diff --git a/.babelrc b/.babelrc
index 8e413272..b5f1bafd 100644
--- a/.babelrc
+++ b/.babelrc
@@ -1,10 +1,13 @@
{
"presets": [
- "env",
- "react"
+ ["@babel/preset-env", {
+ "targets": {
+ "browsers": ["last 3 versions", "ie >= 11"]
+ }
+ }],
+ "@babel/preset-react"
],
"plugins": [
- "transform-async-to-generator"
- ],
- "ignore": "node_modules/**/*"
+ "@babel/plugin-transform-async-generator-functions"
+ ]
}
diff --git a/bash.exe.stackdump b/bash.exe.stackdump
new file mode 100644
index 00000000..e5cc35b6
--- /dev/null
+++ b/bash.exe.stackdump
@@ -0,0 +1,28 @@
+Stack trace:
+Frame Function Args
+0007FFFFB750 00021005FE8E (000210285F68, 00021026AB6E, 000000000000, 0007FFFFA650) msys-2.0.dll+0x1FE8E
+0007FFFFB750 0002100467F9 (000000000000, 000000000000, 000000000000, 0007FFFFBA28) msys-2.0.dll+0x67F9
+0007FFFFB750 000210046832 (000210286019, 0007FFFFB608, 000000000000, 000000000000) msys-2.0.dll+0x6832
+0007FFFFB750 000210068CF6 (000000000000, 000000000000, 000000000000, 000000000000) msys-2.0.dll+0x28CF6
+0007FFFFB750 000210068E24 (0007FFFFB760, 000000000000, 000000000000, 000000000000) msys-2.0.dll+0x28E24
+0007FFFFBA30 00021006A225 (0007FFFFB760, 000000000000, 000000000000, 000000000000) msys-2.0.dll+0x2A225
+End of stack trace
+Loaded modules:
+000100400000 bash.exe
+7FFF10F80000 ntdll.dll
+7FFF0EDD0000 KERNEL32.DLL
+7FFF0E720000 KERNELBASE.dll
+7FFF0EF50000 USER32.dll
+7FFF0E2B0000 win32u.dll
+7FFF103D0000 GDI32.dll
+7FFF0EAF0000 gdi32full.dll
+7FFF0E200000 msvcp_win.dll
+7FFF0E5D0000 ucrtbase.dll
+000210040000 msys-2.0.dll
+7FFF0F880000 advapi32.dll
+7FFF0EEA0000 msvcrt.dll
+7FFF10E10000 sechost.dll
+7FFF109E0000 RPCRT4.dll
+7FFF0D750000 CRYPTBASE.DLL
+7FFF0E160000 bcryptPrimitives.dll
+7FFF0ED80000 IMM32.DLL
diff --git a/package-lock.json b/package-lock.json
index bba5b1c4..5d9339d6 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -4,4741 +4,5576 @@
"lockfileVersion": 1,
"requires": true,
"dependencies": {
- "@sinonjs/commons": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.6.0.tgz",
- "integrity": "sha512-w4/WHG7C4WWFyE5geCieFJF6MZkbW4VAriol5KlmQXpAQdxvV0p26sqNZOW6Qyw6Y0l9K4g+cHvvczR2sEEpqg==",
- "dev": true,
- "requires": {
- "type-detect": "4.0.8"
- }
- },
- "@sinonjs/formatio": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-3.2.2.tgz",
- "integrity": "sha512-B8SEsgd8gArBLMD6zpRw3juQ2FVSsmdd7qlevyDqzS9WTCtvF55/gAL+h6gue8ZvPYcdiPdvueM/qm//9XzyTQ==",
+ "@ampproject/remapping": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
+ "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
"dev": true,
"requires": {
- "@sinonjs/commons": "^1",
- "@sinonjs/samsam": "^3.1.0"
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.24"
}
},
- "@sinonjs/samsam": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-3.3.3.tgz",
- "integrity": "sha512-bKCMKZvWIjYD0BLGnNrxVuw4dkWCYsLqFOUWw8VgKF/+5Y+mE7LfHWPIYoDXowH+3a9LsWDMo0uAP8YDosPvHQ==",
+ "@babel/code-frame": {
+ "version": "7.26.2",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz",
+ "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==",
"dev": true,
"requires": {
- "@sinonjs/commons": "^1.3.0",
- "array-from": "^2.1.1",
- "lodash": "^4.17.15"
+ "@babel/helper-validator-identifier": "^7.25.9",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.0.0"
},
"dependencies": {
- "lodash": {
- "version": "4.17.15",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
- "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
+ "js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "dev": true
+ },
+ "picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
"dev": true
}
}
},
- "@sinonjs/text-encoding": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz",
- "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==",
- "dev": true
- },
- "abbrev": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
- "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
- "dev": true
- },
- "accepts": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz",
- "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=",
- "requires": {
- "mime-types": "~2.1.16",
- "negotiator": "0.6.1"
- }
- },
- "acorn": {
- "version": "5.7.3",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz",
- "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==",
+ "@babel/compat-data": {
+ "version": "7.26.8",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz",
+ "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==",
"dev": true
},
- "acorn-dynamic-import": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz",
- "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=",
+ "@babel/core": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz",
+ "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==",
"dev": true,
"requires": {
- "acorn": "^4.0.3"
+ "@ampproject/remapping": "^2.2.0",
+ "@babel/code-frame": "^7.22.5",
+ "@babel/generator": "^7.22.5",
+ "@babel/helper-compilation-targets": "^7.22.5",
+ "@babel/helper-module-transforms": "^7.22.5",
+ "@babel/helpers": "^7.22.5",
+ "@babel/parser": "^7.22.5",
+ "@babel/template": "^7.22.5",
+ "@babel/traverse": "^7.22.5",
+ "@babel/types": "^7.22.5",
+ "convert-source-map": "^1.7.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.2",
+ "json5": "^2.2.2",
+ "semver": "^6.3.0"
},
"dependencies": {
- "acorn": {
- "version": "4.0.13",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz",
- "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=",
+ "debug": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
+ "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.3"
+ }
+ },
+ "json5": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+ "dev": true
+ },
+ "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
+ },
+ "semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true
}
}
},
- "acorn-jsx": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz",
- "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=",
+ "@babel/generator": {
+ "version": "7.27.0",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.0.tgz",
+ "integrity": "sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==",
"dev": true,
"requires": {
- "acorn": "^3.0.4"
+ "@babel/parser": "^7.27.0",
+ "@babel/types": "^7.27.0",
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.25",
+ "jsesc": "^3.0.2"
},
"dependencies": {
- "acorn": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
- "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=",
+ "jsesc": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
+ "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
"dev": true
}
}
},
- "acorn-walk": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz",
- "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==",
- "dev": true
- },
- "ajv": {
- "version": "5.5.2",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
- "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
+ "@babel/helper-annotate-as-pure": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz",
+ "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==",
"dev": true,
"requires": {
- "co": "^4.6.0",
- "fast-deep-equal": "^1.0.0",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.3.0"
+ "@babel/types": "^7.25.9"
}
},
- "ajv-keywords": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz",
- "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=",
- "dev": true
- },
- "align-text": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
- "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
+ "@babel/helper-compilation-targets": {
+ "version": "7.27.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.0.tgz",
+ "integrity": "sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==",
"dev": true,
"requires": {
- "kind-of": "^3.0.2",
- "longest": "^1.0.1",
- "repeat-string": "^1.5.2"
+ "@babel/compat-data": "^7.26.8",
+ "@babel/helper-validator-option": "^7.25.9",
+ "browserslist": "^4.24.0",
+ "lru-cache": "^5.1.1",
+ "semver": "^6.3.1"
},
"dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "browserslist": {
+ "version": "4.24.4",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz",
+ "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==",
"dev": true,
"requires": {
- "is-buffer": "^1.1.5"
+ "caniuse-lite": "^1.0.30001688",
+ "electron-to-chromium": "^1.5.73",
+ "node-releases": "^2.0.19",
+ "update-browserslist-db": "^1.1.1"
+ }
+ },
+ "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"
}
+ },
+ "semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true
+ },
+ "yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+ "dev": true
}
}
},
- "alphanum-sort": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz",
- "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=",
- "dev": true
- },
- "ansi-align": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz",
- "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=",
+ "@babel/helper-create-class-features-plugin": {
+ "version": "7.27.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.0.tgz",
+ "integrity": "sha512-vSGCvMecvFCd/BdpGlhpXYNhhC4ccxyvQWpbGL4CWbvfEoLFWUZuSuf7s9Aw70flgQF+6vptvgK2IfOnKlRmBg==",
"dev": true,
"requires": {
- "string-width": "^2.0.0"
+ "@babel/helper-annotate-as-pure": "^7.25.9",
+ "@babel/helper-member-expression-to-functions": "^7.25.9",
+ "@babel/helper-optimise-call-expression": "^7.25.9",
+ "@babel/helper-replace-supers": "^7.26.5",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9",
+ "@babel/traverse": "^7.27.0",
+ "semver": "^6.3.1"
},
"dependencies": {
- "ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ }
+ }
+ },
+ "@babel/helper-create-regexp-features-plugin": {
+ "version": "7.27.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.0.tgz",
+ "integrity": "sha512-fO8l08T76v48BhpNRW/nQ0MxfnSdoSKUJBMjubOAYffsVuGG5qOfMq7N6Es7UJvi7Y8goXXo07EfcHZXDPuELQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.25.9",
+ "regexpu-core": "^6.2.0",
+ "semver": "^6.3.1"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true
- },
- "string-width": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
- "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ }
+ }
+ },
+ "@babel/helper-define-polyfill-provider": {
+ "version": "0.6.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.4.tgz",
+ "integrity": "sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-compilation-targets": "^7.22.6",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "debug": "^4.1.1",
+ "lodash.debounce": "^4.0.8",
+ "resolve": "^1.14.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
+ "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
"dev": true,
"requires": {
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
+ "ms": "^2.1.3"
}
},
- "strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
- "dev": true,
- "requires": {
- "ansi-regex": "^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
}
}
},
- "ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
- "dev": true
- },
- "ansi-styles": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
- "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
- "dev": true
- },
- "anymatch": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz",
- "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==",
+ "@babel/helper-member-expression-to-functions": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz",
+ "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==",
+ "dev": true,
"requires": {
- "micromatch": "^2.1.5",
- "normalize-path": "^2.0.0"
+ "@babel/traverse": "^7.25.9",
+ "@babel/types": "^7.25.9"
}
},
- "argparse": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz",
- "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=",
+ "@babel/helper-module-imports": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz",
+ "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==",
+ "dev": true,
"requires": {
- "sprintf-js": "~1.0.2"
+ "@babel/traverse": "^7.25.9",
+ "@babel/types": "^7.25.9"
}
},
- "arr-diff": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
- "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
+ "@babel/helper-module-transforms": {
+ "version": "7.26.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz",
+ "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==",
+ "dev": true,
"requires": {
- "arr-flatten": "^1.0.1"
+ "@babel/helper-module-imports": "^7.25.9",
+ "@babel/helper-validator-identifier": "^7.25.9",
+ "@babel/traverse": "^7.25.9"
}
},
- "arr-flatten": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
- "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg=="
+ "@babel/helper-optimise-call-expression": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz",
+ "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.25.9"
+ }
},
- "arr-union": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
- "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "@babel/helper-plugin-utils": {
+ "version": "7.26.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz",
+ "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==",
"dev": true
},
- "array-filter": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz",
- "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=",
- "dev": true
+ "@babel/helper-remap-async-to-generator": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz",
+ "integrity": "sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.25.9",
+ "@babel/helper-wrap-function": "^7.25.9",
+ "@babel/traverse": "^7.25.9"
+ }
},
- "array-find-index": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
- "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
- "dev": true
+ "@babel/helper-replace-supers": {
+ "version": "7.26.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz",
+ "integrity": "sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-member-expression-to-functions": "^7.25.9",
+ "@babel/helper-optimise-call-expression": "^7.25.9",
+ "@babel/traverse": "^7.26.5"
+ }
},
- "array-flatten": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
- "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
+ "@babel/helper-skip-transparent-expression-wrappers": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz",
+ "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==",
+ "dev": true,
+ "requires": {
+ "@babel/traverse": "^7.25.9",
+ "@babel/types": "^7.25.9"
+ }
},
- "array-from": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz",
- "integrity": "sha1-z+nYwmYoudxa7MYqn12PHzUsEZU=",
+ "@babel/helper-string-parser": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz",
+ "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==",
"dev": true
},
- "array-iterate": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/array-iterate/-/array-iterate-1.1.1.tgz",
- "integrity": "sha1-hlv3+K851rCYLGCQKRSsdrwBCPY=",
+ "@babel/helper-validator-identifier": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz",
+ "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==",
"dev": true
},
- "array-map": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz",
- "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=",
+ "@babel/helper-validator-option": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz",
+ "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==",
"dev": true
},
- "array-reduce": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz",
- "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=",
- "dev": true
+ "@babel/helper-wrap-function": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz",
+ "integrity": "sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==",
+ "dev": true,
+ "requires": {
+ "@babel/template": "^7.25.9",
+ "@babel/traverse": "^7.25.9",
+ "@babel/types": "^7.25.9"
+ }
},
- "array-union": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
- "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
+ "@babel/helpers": {
+ "version": "7.27.0",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.0.tgz",
+ "integrity": "sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==",
"dev": true,
"requires": {
- "array-uniq": "^1.0.1"
+ "@babel/template": "^7.27.0",
+ "@babel/types": "^7.27.0"
}
},
- "array-uniq": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
- "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
- "dev": true
+ "@babel/parser": {
+ "version": "7.27.0",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz",
+ "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.27.0"
+ }
},
- "array-unique": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
- "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM="
+ "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
+ "version": "7.25.9",
+ "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.25.9.tgz",
+ "integrity": "sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.25.9"
+ }
},
- "arrify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
- "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
+ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz",
+ "integrity": "sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9",
+ "@babel/plugin-transform-optional-chaining": "^7.25.9"
+ }
+ },
+ "@babel/plugin-proposal-private-property-in-object": {
+ "version": "7.21.0-placeholder-for-preset-env.2",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz",
+ "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==",
"dev": true
},
- "asap": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
- "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY="
+ "@babel/plugin-proposal-unicode-property-regex": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz",
+ "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-regexp-features-plugin": "^7.18.6",
+ "@babel/helper-plugin-utils": "^7.18.6"
+ }
},
- "asn1": {
- "version": "0.2.4",
- "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
- "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
+ "@babel/plugin-syntax-async-generators": {
+ "version": "7.8.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
+ "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
+ "dev": true,
"requires": {
- "safer-buffer": "~2.1.0"
+ "@babel/helper-plugin-utils": "^7.8.0"
}
},
- "asn1.js": {
- "version": "4.10.1",
- "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
- "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
+ "@babel/plugin-syntax-class-properties": {
+ "version": "7.12.13",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
+ "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
"dev": true,
"requires": {
- "bn.js": "^4.0.0",
- "inherits": "^2.0.1",
- "minimalistic-assert": "^1.0.0"
+ "@babel/helper-plugin-utils": "^7.12.13"
}
},
- "assert": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz",
- "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=",
+ "@babel/plugin-syntax-class-static-block": {
+ "version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz",
+ "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==",
"dev": true,
"requires": {
- "util": "0.10.3"
- },
- "dependencies": {
- "inherits": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
- "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
- "dev": true
- },
- "util": {
- "version": "0.10.3",
- "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
- "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
- "dev": true,
- "requires": {
- "inherits": "2.0.1"
- }
- }
+ "@babel/helper-plugin-utils": "^7.14.5"
}
},
- "assert-plus": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
- },
- "assertion-error": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
- "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
- "dev": true
- },
- "assign-symbols": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
- "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
- "dev": true
- },
- "async": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz",
- "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==",
+ "@babel/plugin-syntax-dynamic-import": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz",
+ "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==",
"dev": true,
"requires": {
- "lodash": "^4.17.10"
- },
- "dependencies": {
- "lodash": {
- "version": "4.17.11",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
- "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==",
- "dev": true
- }
+ "@babel/helper-plugin-utils": "^7.8.0"
}
},
- "async-each": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz",
- "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0="
- },
- "async-limiter": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
- "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==",
- "dev": true
- },
- "async-retry": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz",
- "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==",
+ "@babel/plugin-syntax-export-namespace-from": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz",
+ "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==",
"dev": true,
"requires": {
- "retry": "0.13.1"
+ "@babel/helper-plugin-utils": "^7.8.3"
}
},
- "asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
+ "@babel/plugin-syntax-import-assertions": {
+ "version": "7.26.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz",
+ "integrity": "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.25.9"
+ }
},
- "atob": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
- "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
- "dev": true
+ "@babel/plugin-syntax-import-attributes": {
+ "version": "7.26.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz",
+ "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.25.9"
+ }
},
- "autoprefixer": {
- "version": "6.7.7",
- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz",
- "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=",
+ "@babel/plugin-syntax-import-meta": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
+ "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
"dev": true,
"requires": {
- "browserslist": "^1.7.6",
- "caniuse-db": "^1.0.30000634",
- "normalize-range": "^0.1.2",
- "num2fraction": "^1.2.2",
- "postcss": "^5.2.16",
- "postcss-value-parser": "^3.2.3"
- },
- "dependencies": {
- "browserslist": {
- "version": "1.7.7",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz",
- "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
- "dev": true,
- "requires": {
- "caniuse-db": "^1.0.30000639",
- "electron-to-chromium": "^1.2.7"
- }
- },
- "postcss": {
- "version": "5.2.18",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
- "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
- "dev": true,
- "requires": {
- "chalk": "^1.1.3",
- "js-base64": "^2.1.9",
- "source-map": "^0.5.6",
- "supports-color": "^3.2.3"
- }
- },
- "supports-color": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
- "dev": true,
- "requires": {
- "has-flag": "^1.0.0"
- }
- }
+ "@babel/helper-plugin-utils": "^7.10.4"
}
},
- "aws-sign2": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
- "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
+ "@babel/plugin-syntax-json-strings": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
+ "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
},
- "aws4": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
- "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ=="
+ "@babel/plugin-syntax-jsx": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz",
+ "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.25.9"
+ }
},
- "babel-code-frame": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
- "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "@babel/plugin-syntax-logical-assignment-operators": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
+ "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
"dev": true,
"requires": {
- "chalk": "^1.1.3",
- "esutils": "^2.0.2",
- "js-tokens": "^3.0.2"
+ "@babel/helper-plugin-utils": "^7.10.4"
}
},
- "babel-core": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz",
- "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=",
+ "@babel/plugin-syntax-nullish-coalescing-operator": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
+ "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
"dev": true,
"requires": {
- "babel-code-frame": "^6.26.0",
- "babel-generator": "^6.26.0",
- "babel-helpers": "^6.24.1",
- "babel-messages": "^6.23.0",
- "babel-register": "^6.26.0",
- "babel-runtime": "^6.26.0",
- "babel-template": "^6.26.0",
- "babel-traverse": "^6.26.0",
- "babel-types": "^6.26.0",
- "babylon": "^6.18.0",
- "convert-source-map": "^1.5.0",
- "debug": "^2.6.8",
- "json5": "^0.5.1",
- "lodash": "^4.17.4",
- "minimatch": "^3.0.4",
- "path-is-absolute": "^1.0.1",
- "private": "^0.1.7",
- "slash": "^1.0.0",
- "source-map": "^0.5.6"
- },
- "dependencies": {
- "convert-source-map": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz",
- "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=",
- "dev": true
- }
+ "@babel/helper-plugin-utils": "^7.8.0"
}
},
- "babel-generator": {
- "version": "6.26.1",
- "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
- "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
+ "@babel/plugin-syntax-numeric-separator": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
+ "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
"dev": true,
"requires": {
- "babel-messages": "^6.23.0",
- "babel-runtime": "^6.26.0",
- "babel-types": "^6.26.0",
- "detect-indent": "^4.0.0",
- "jsesc": "^1.3.0",
- "lodash": "^4.17.4",
- "source-map": "^0.5.7",
- "trim-right": "^1.0.1"
+ "@babel/helper-plugin-utils": "^7.10.4"
}
},
- "babel-helper-builder-binary-assignment-operator-visitor": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz",
- "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=",
+ "@babel/plugin-syntax-object-rest-spread": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
+ "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
"dev": true,
"requires": {
- "babel-helper-explode-assignable-expression": "^6.24.1",
- "babel-runtime": "^6.22.0",
- "babel-types": "^6.24.1"
+ "@babel/helper-plugin-utils": "^7.8.0"
}
},
- "babel-helper-builder-react-jsx": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz",
- "integrity": "sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA=",
+ "@babel/plugin-syntax-optional-catch-binding": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
+ "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
"dev": true,
"requires": {
- "babel-runtime": "^6.26.0",
- "babel-types": "^6.26.0",
- "esutils": "^2.0.2"
+ "@babel/helper-plugin-utils": "^7.8.0"
}
},
- "babel-helper-call-delegate": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz",
- "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=",
+ "@babel/plugin-syntax-optional-chaining": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
+ "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
"dev": true,
"requires": {
- "babel-helper-hoist-variables": "^6.24.1",
- "babel-runtime": "^6.22.0",
- "babel-traverse": "^6.24.1",
- "babel-types": "^6.24.1"
+ "@babel/helper-plugin-utils": "^7.8.0"
}
},
- "babel-helper-define-map": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz",
- "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=",
+ "@babel/plugin-syntax-private-property-in-object": {
+ "version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz",
+ "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==",
"dev": true,
"requires": {
- "babel-helper-function-name": "^6.24.1",
- "babel-runtime": "^6.26.0",
- "babel-types": "^6.26.0",
- "lodash": "^4.17.4"
+ "@babel/helper-plugin-utils": "^7.14.5"
}
},
- "babel-helper-explode-assignable-expression": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz",
- "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=",
+ "@babel/plugin-syntax-top-level-await": {
+ "version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
+ "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
"dev": true,
"requires": {
- "babel-runtime": "^6.22.0",
- "babel-traverse": "^6.24.1",
- "babel-types": "^6.24.1"
+ "@babel/helper-plugin-utils": "^7.14.5"
}
},
- "babel-helper-function-name": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz",
- "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=",
+ "@babel/plugin-syntax-unicode-sets-regex": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz",
+ "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==",
"dev": true,
"requires": {
- "babel-helper-get-function-arity": "^6.24.1",
- "babel-runtime": "^6.22.0",
- "babel-template": "^6.24.1",
- "babel-traverse": "^6.24.1",
- "babel-types": "^6.24.1"
+ "@babel/helper-create-regexp-features-plugin": "^7.18.6",
+ "@babel/helper-plugin-utils": "^7.18.6"
}
},
- "babel-helper-get-function-arity": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz",
- "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=",
+ "@babel/plugin-transform-arrow-functions": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz",
+ "integrity": "sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==",
"dev": true,
"requires": {
- "babel-runtime": "^6.22.0",
- "babel-types": "^6.24.1"
+ "@babel/helper-plugin-utils": "^7.25.9"
}
},
- "babel-helper-hoist-variables": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz",
- "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=",
+ "@babel/plugin-transform-async-generator-functions": {
+ "version": "7.26.8",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.26.8.tgz",
+ "integrity": "sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg==",
"dev": true,
"requires": {
- "babel-runtime": "^6.22.0",
- "babel-types": "^6.24.1"
+ "@babel/helper-plugin-utils": "^7.26.5",
+ "@babel/helper-remap-async-to-generator": "^7.25.9",
+ "@babel/traverse": "^7.26.8"
}
},
- "babel-helper-optimise-call-expression": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz",
- "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=",
+ "@babel/plugin-transform-async-to-generator": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz",
+ "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==",
"dev": true,
"requires": {
- "babel-runtime": "^6.22.0",
- "babel-types": "^6.24.1"
+ "@babel/helper-module-imports": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/helper-remap-async-to-generator": "^7.25.9"
}
},
- "babel-helper-regex": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz",
- "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=",
+ "@babel/plugin-transform-block-scoped-functions": {
+ "version": "7.26.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.26.5.tgz",
+ "integrity": "sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==",
"dev": true,
"requires": {
- "babel-runtime": "^6.26.0",
- "babel-types": "^6.26.0",
- "lodash": "^4.17.4"
+ "@babel/helper-plugin-utils": "^7.26.5"
}
},
- "babel-helper-remap-async-to-generator": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz",
- "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=",
+ "@babel/plugin-transform-block-scoping": {
+ "version": "7.27.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.27.0.tgz",
+ "integrity": "sha512-u1jGphZ8uDI2Pj/HJj6YQ6XQLZCNjOlprjxB5SVz6rq2T6SwAR+CdrWK0CP7F+9rDVMXdB0+r6Am5G5aobOjAQ==",
"dev": true,
"requires": {
- "babel-helper-function-name": "^6.24.1",
- "babel-runtime": "^6.22.0",
- "babel-template": "^6.24.1",
- "babel-traverse": "^6.24.1",
- "babel-types": "^6.24.1"
+ "@babel/helper-plugin-utils": "^7.26.5"
}
},
- "babel-helper-replace-supers": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz",
- "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=",
+ "@babel/plugin-transform-class-properties": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz",
+ "integrity": "sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==",
"dev": true,
"requires": {
- "babel-helper-optimise-call-expression": "^6.24.1",
- "babel-messages": "^6.23.0",
- "babel-runtime": "^6.22.0",
- "babel-template": "^6.24.1",
- "babel-traverse": "^6.24.1",
- "babel-types": "^6.24.1"
+ "@babel/helper-create-class-features-plugin": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9"
}
},
- "babel-helpers": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz",
- "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=",
+ "@babel/plugin-transform-class-static-block": {
+ "version": "7.26.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz",
+ "integrity": "sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==",
"dev": true,
"requires": {
- "babel-runtime": "^6.22.0",
- "babel-template": "^6.24.1"
+ "@babel/helper-create-class-features-plugin": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9"
}
},
- "babel-loader": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-7.1.2.tgz",
- "integrity": "sha512-jRwlFbINAeyDStqK6Dd5YuY0k5YuzQUvlz2ZamuXrXmxav3pNqe9vfJ402+2G+OmlJSXxCOpB6Uz0INM7RQe2A==",
+ "@babel/plugin-transform-classes": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz",
+ "integrity": "sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==",
"dev": true,
"requires": {
- "find-cache-dir": "^1.0.0",
- "loader-utils": "^1.0.2",
- "mkdirp": "^0.5.1"
+ "@babel/helper-annotate-as-pure": "^7.25.9",
+ "@babel/helper-compilation-targets": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/helper-replace-supers": "^7.25.9",
+ "@babel/traverse": "^7.25.9",
+ "globals": "^11.1.0"
},
"dependencies": {
- "minimist": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
- "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
"dev": true
- },
- "mkdirp": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
- "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
- "dev": true,
- "requires": {
- "minimist": "0.0.8"
- }
}
}
},
- "babel-messages": {
- "version": "6.23.0",
- "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
- "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "@babel/plugin-transform-computed-properties": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz",
+ "integrity": "sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==",
"dev": true,
"requires": {
- "babel-runtime": "^6.22.0"
+ "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/template": "^7.25.9"
}
},
- "babel-plugin-check-es2015-constants": {
- "version": "6.22.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz",
- "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=",
+ "@babel/plugin-transform-destructuring": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz",
+ "integrity": "sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==",
"dev": true,
"requires": {
- "babel-runtime": "^6.22.0"
+ "@babel/helper-plugin-utils": "^7.25.9"
}
},
- "babel-plugin-syntax-async-functions": {
- "version": "6.13.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz",
- "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=",
- "dev": true
- },
- "babel-plugin-syntax-exponentiation-operator": {
- "version": "6.13.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz",
- "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=",
- "dev": true
- },
- "babel-plugin-syntax-flow": {
- "version": "6.18.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz",
- "integrity": "sha1-TDqyCiryaqIM0lmVw5jE63AxDI0=",
- "dev": true
- },
- "babel-plugin-syntax-jsx": {
- "version": "6.18.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz",
- "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=",
- "dev": true
- },
- "babel-plugin-syntax-trailing-function-commas": {
- "version": "6.22.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz",
- "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=",
- "dev": true
+ "@babel/plugin-transform-dotall-regex": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz",
+ "integrity": "sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-regexp-features-plugin": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9"
+ }
},
- "babel-plugin-transform-async-to-generator": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz",
- "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=",
+ "@babel/plugin-transform-duplicate-keys": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz",
+ "integrity": "sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==",
"dev": true,
"requires": {
- "babel-helper-remap-async-to-generator": "^6.24.1",
- "babel-plugin-syntax-async-functions": "^6.8.0",
- "babel-runtime": "^6.22.0"
+ "@babel/helper-plugin-utils": "^7.25.9"
}
},
- "babel-plugin-transform-es2015-arrow-functions": {
- "version": "6.22.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz",
- "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=",
+ "@babel/plugin-transform-dynamic-import": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz",
+ "integrity": "sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==",
"dev": true,
"requires": {
- "babel-runtime": "^6.22.0"
+ "@babel/helper-plugin-utils": "^7.25.9"
}
},
- "babel-plugin-transform-es2015-block-scoped-functions": {
- "version": "6.22.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz",
- "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=",
+ "@babel/plugin-transform-exponentiation-operator": {
+ "version": "7.26.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz",
+ "integrity": "sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==",
"dev": true,
"requires": {
- "babel-runtime": "^6.22.0"
+ "@babel/helper-plugin-utils": "^7.25.9"
}
},
- "babel-plugin-transform-es2015-block-scoping": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz",
- "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=",
+ "@babel/plugin-transform-export-namespace-from": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz",
+ "integrity": "sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==",
"dev": true,
"requires": {
- "babel-runtime": "^6.26.0",
- "babel-template": "^6.26.0",
- "babel-traverse": "^6.26.0",
- "babel-types": "^6.26.0",
- "lodash": "^4.17.4"
+ "@babel/helper-plugin-utils": "^7.25.9"
}
},
- "babel-plugin-transform-es2015-classes": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz",
- "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=",
+ "@babel/plugin-transform-for-of": {
+ "version": "7.26.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.26.9.tgz",
+ "integrity": "sha512-Hry8AusVm8LW5BVFgiyUReuoGzPUpdHQQqJY5bZnbbf+ngOHWuCuYFKw/BqaaWlvEUrF91HMhDtEaI1hZzNbLg==",
"dev": true,
"requires": {
- "babel-helper-define-map": "^6.24.1",
- "babel-helper-function-name": "^6.24.1",
- "babel-helper-optimise-call-expression": "^6.24.1",
- "babel-helper-replace-supers": "^6.24.1",
- "babel-messages": "^6.23.0",
- "babel-runtime": "^6.22.0",
- "babel-template": "^6.24.1",
- "babel-traverse": "^6.24.1",
- "babel-types": "^6.24.1"
+ "@babel/helper-plugin-utils": "^7.26.5",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9"
}
},
- "babel-plugin-transform-es2015-computed-properties": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz",
- "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=",
+ "@babel/plugin-transform-function-name": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz",
+ "integrity": "sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==",
"dev": true,
"requires": {
- "babel-runtime": "^6.22.0",
- "babel-template": "^6.24.1"
+ "@babel/helper-compilation-targets": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/traverse": "^7.25.9"
}
},
- "babel-plugin-transform-es2015-destructuring": {
- "version": "6.23.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz",
- "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=",
+ "@babel/plugin-transform-json-strings": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz",
+ "integrity": "sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==",
"dev": true,
"requires": {
- "babel-runtime": "^6.22.0"
+ "@babel/helper-plugin-utils": "^7.25.9"
}
},
- "babel-plugin-transform-es2015-duplicate-keys": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz",
- "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=",
+ "@babel/plugin-transform-literals": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz",
+ "integrity": "sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==",
"dev": true,
"requires": {
- "babel-runtime": "^6.22.0",
- "babel-types": "^6.24.1"
+ "@babel/helper-plugin-utils": "^7.25.9"
}
},
- "babel-plugin-transform-es2015-for-of": {
- "version": "6.23.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz",
- "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=",
+ "@babel/plugin-transform-logical-assignment-operators": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz",
+ "integrity": "sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==",
"dev": true,
"requires": {
- "babel-runtime": "^6.22.0"
+ "@babel/helper-plugin-utils": "^7.25.9"
}
},
- "babel-plugin-transform-es2015-function-name": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz",
- "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=",
+ "@babel/plugin-transform-member-expression-literals": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz",
+ "integrity": "sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==",
"dev": true,
"requires": {
- "babel-helper-function-name": "^6.24.1",
- "babel-runtime": "^6.22.0",
- "babel-types": "^6.24.1"
+ "@babel/helper-plugin-utils": "^7.25.9"
}
},
- "babel-plugin-transform-es2015-literals": {
- "version": "6.22.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz",
- "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=",
+ "@babel/plugin-transform-modules-amd": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz",
+ "integrity": "sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==",
"dev": true,
"requires": {
- "babel-runtime": "^6.22.0"
+ "@babel/helper-module-transforms": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9"
}
},
- "babel-plugin-transform-es2015-modules-amd": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz",
- "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=",
+ "@babel/plugin-transform-modules-commonjs": {
+ "version": "7.26.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz",
+ "integrity": "sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==",
"dev": true,
"requires": {
- "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1",
- "babel-runtime": "^6.22.0",
- "babel-template": "^6.24.1"
+ "@babel/helper-module-transforms": "^7.26.0",
+ "@babel/helper-plugin-utils": "^7.25.9"
}
},
- "babel-plugin-transform-es2015-modules-commonjs": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz",
- "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=",
+ "@babel/plugin-transform-modules-systemjs": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz",
+ "integrity": "sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==",
"dev": true,
"requires": {
- "babel-plugin-transform-strict-mode": "^6.24.1",
- "babel-runtime": "^6.26.0",
- "babel-template": "^6.26.0",
- "babel-types": "^6.26.0"
+ "@babel/helper-module-transforms": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/helper-validator-identifier": "^7.25.9",
+ "@babel/traverse": "^7.25.9"
}
},
- "babel-plugin-transform-es2015-modules-systemjs": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz",
- "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=",
+ "@babel/plugin-transform-modules-umd": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz",
+ "integrity": "sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==",
"dev": true,
"requires": {
- "babel-helper-hoist-variables": "^6.24.1",
- "babel-runtime": "^6.22.0",
- "babel-template": "^6.24.1"
+ "@babel/helper-module-transforms": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9"
}
},
- "babel-plugin-transform-es2015-modules-umd": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz",
- "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=",
+ "@babel/plugin-transform-named-capturing-groups-regex": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz",
+ "integrity": "sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==",
"dev": true,
"requires": {
- "babel-plugin-transform-es2015-modules-amd": "^6.24.1",
- "babel-runtime": "^6.22.0",
- "babel-template": "^6.24.1"
+ "@babel/helper-create-regexp-features-plugin": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9"
}
},
- "babel-plugin-transform-es2015-object-super": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz",
- "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=",
+ "@babel/plugin-transform-new-target": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz",
+ "integrity": "sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==",
"dev": true,
"requires": {
- "babel-helper-replace-supers": "^6.24.1",
- "babel-runtime": "^6.22.0"
+ "@babel/helper-plugin-utils": "^7.25.9"
}
},
- "babel-plugin-transform-es2015-parameters": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz",
- "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=",
+ "@babel/plugin-transform-nullish-coalescing-operator": {
+ "version": "7.26.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.6.tgz",
+ "integrity": "sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==",
"dev": true,
"requires": {
- "babel-helper-call-delegate": "^6.24.1",
- "babel-helper-get-function-arity": "^6.24.1",
- "babel-runtime": "^6.22.0",
- "babel-template": "^6.24.1",
- "babel-traverse": "^6.24.1",
- "babel-types": "^6.24.1"
+ "@babel/helper-plugin-utils": "^7.26.5"
}
},
- "babel-plugin-transform-es2015-shorthand-properties": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz",
- "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=",
+ "@babel/plugin-transform-numeric-separator": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz",
+ "integrity": "sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==",
"dev": true,
"requires": {
- "babel-runtime": "^6.22.0",
- "babel-types": "^6.24.1"
+ "@babel/helper-plugin-utils": "^7.25.9"
}
},
- "babel-plugin-transform-es2015-spread": {
- "version": "6.22.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz",
- "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=",
+ "@babel/plugin-transform-object-rest-spread": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz",
+ "integrity": "sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==",
"dev": true,
"requires": {
- "babel-runtime": "^6.22.0"
+ "@babel/helper-compilation-targets": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/plugin-transform-parameters": "^7.25.9"
}
},
- "babel-plugin-transform-es2015-sticky-regex": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz",
- "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=",
+ "@babel/plugin-transform-object-super": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz",
+ "integrity": "sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==",
"dev": true,
"requires": {
- "babel-helper-regex": "^6.24.1",
- "babel-runtime": "^6.22.0",
- "babel-types": "^6.24.1"
+ "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/helper-replace-supers": "^7.25.9"
}
},
- "babel-plugin-transform-es2015-template-literals": {
- "version": "6.22.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz",
- "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=",
+ "@babel/plugin-transform-optional-catch-binding": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz",
+ "integrity": "sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==",
"dev": true,
"requires": {
- "babel-runtime": "^6.22.0"
+ "@babel/helper-plugin-utils": "^7.25.9"
}
},
- "babel-plugin-transform-es2015-typeof-symbol": {
- "version": "6.23.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz",
- "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=",
+ "@babel/plugin-transform-optional-chaining": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz",
+ "integrity": "sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==",
"dev": true,
"requires": {
- "babel-runtime": "^6.22.0"
+ "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9"
}
},
- "babel-plugin-transform-es2015-unicode-regex": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz",
- "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=",
+ "@babel/plugin-transform-parameters": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz",
+ "integrity": "sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==",
"dev": true,
"requires": {
- "babel-helper-regex": "^6.24.1",
- "babel-runtime": "^6.22.0",
- "regexpu-core": "^2.0.0"
+ "@babel/helper-plugin-utils": "^7.25.9"
}
},
- "babel-plugin-transform-exponentiation-operator": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz",
- "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=",
+ "@babel/plugin-transform-private-methods": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz",
+ "integrity": "sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==",
"dev": true,
"requires": {
- "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1",
- "babel-plugin-syntax-exponentiation-operator": "^6.8.0",
- "babel-runtime": "^6.22.0"
+ "@babel/helper-create-class-features-plugin": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9"
}
},
- "babel-plugin-transform-flow-strip-types": {
- "version": "6.22.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz",
- "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=",
+ "@babel/plugin-transform-private-property-in-object": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz",
+ "integrity": "sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==",
"dev": true,
"requires": {
- "babel-plugin-syntax-flow": "^6.18.0",
- "babel-runtime": "^6.22.0"
+ "@babel/helper-annotate-as-pure": "^7.25.9",
+ "@babel/helper-create-class-features-plugin": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9"
}
},
- "babel-plugin-transform-react-display-name": {
- "version": "6.25.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz",
- "integrity": "sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE=",
+ "@babel/plugin-transform-property-literals": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz",
+ "integrity": "sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==",
"dev": true,
"requires": {
- "babel-runtime": "^6.22.0"
+ "@babel/helper-plugin-utils": "^7.25.9"
}
},
- "babel-plugin-transform-react-jsx": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz",
- "integrity": "sha1-hAoCjn30YN/DotKfDA2R9jduZqM=",
+ "@babel/plugin-transform-react-display-name": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.9.tgz",
+ "integrity": "sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ==",
"dev": true,
"requires": {
- "babel-helper-builder-react-jsx": "^6.24.1",
- "babel-plugin-syntax-jsx": "^6.8.0",
- "babel-runtime": "^6.22.0"
+ "@babel/helper-plugin-utils": "^7.25.9"
}
},
- "babel-plugin-transform-react-jsx-self": {
- "version": "6.22.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz",
- "integrity": "sha1-322AqdomEqEh5t3XVYvL7PBuY24=",
+ "@babel/plugin-transform-react-jsx": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz",
+ "integrity": "sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==",
"dev": true,
"requires": {
- "babel-plugin-syntax-jsx": "^6.8.0",
- "babel-runtime": "^6.22.0"
+ "@babel/helper-annotate-as-pure": "^7.25.9",
+ "@babel/helper-module-imports": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/plugin-syntax-jsx": "^7.25.9",
+ "@babel/types": "^7.25.9"
}
},
- "babel-plugin-transform-react-jsx-source": {
- "version": "6.22.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz",
- "integrity": "sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY=",
+ "@babel/plugin-transform-react-jsx-development": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.9.tgz",
+ "integrity": "sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw==",
"dev": true,
"requires": {
- "babel-plugin-syntax-jsx": "^6.8.0",
- "babel-runtime": "^6.22.0"
+ "@babel/plugin-transform-react-jsx": "^7.25.9"
}
},
- "babel-plugin-transform-regenerator": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz",
- "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=",
+ "@babel/plugin-transform-react-pure-annotations": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.9.tgz",
+ "integrity": "sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg==",
"dev": true,
"requires": {
- "regenerator-transform": "^0.10.0"
+ "@babel/helper-annotate-as-pure": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9"
}
},
- "babel-plugin-transform-strict-mode": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz",
- "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=",
+ "@babel/plugin-transform-regenerator": {
+ "version": "7.27.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.27.0.tgz",
+ "integrity": "sha512-LX/vCajUJQDqE7Aum/ELUMZAY19+cDpghxrnyt5I1tV6X5PyC86AOoWXWFYFeIvauyeSA6/ktn4tQVn/3ZifsA==",
"dev": true,
"requires": {
- "babel-runtime": "^6.22.0",
- "babel-types": "^6.24.1"
+ "@babel/helper-plugin-utils": "^7.26.5",
+ "regenerator-transform": "^0.15.2"
}
},
- "babel-polyfill": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz",
- "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=",
+ "@babel/plugin-transform-reserved-words": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz",
+ "integrity": "sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==",
"dev": true,
"requires": {
- "babel-runtime": "^6.26.0",
- "core-js": "^2.5.0",
- "regenerator-runtime": "^0.10.5"
- },
- "dependencies": {
- "core-js": {
- "version": "2.5.3",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz",
- "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=",
- "dev": true
- },
- "regenerator-runtime": {
- "version": "0.10.5",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz",
- "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=",
- "dev": true
- }
+ "@babel/helper-plugin-utils": "^7.25.9"
}
},
- "babel-preset-env": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.6.1.tgz",
- "integrity": "sha512-W6VIyA6Ch9ePMI7VptNn2wBM6dbG0eSz25HEiL40nQXCsXGTGZSTZu1Iap+cj3Q0S5a7T9+529l/5Bkvd+afNA==",
- "dev": true,
- "requires": {
- "babel-plugin-check-es2015-constants": "^6.22.0",
- "babel-plugin-syntax-trailing-function-commas": "^6.22.0",
- "babel-plugin-transform-async-to-generator": "^6.22.0",
- "babel-plugin-transform-es2015-arrow-functions": "^6.22.0",
- "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0",
- "babel-plugin-transform-es2015-block-scoping": "^6.23.0",
- "babel-plugin-transform-es2015-classes": "^6.23.0",
- "babel-plugin-transform-es2015-computed-properties": "^6.22.0",
- "babel-plugin-transform-es2015-destructuring": "^6.23.0",
- "babel-plugin-transform-es2015-duplicate-keys": "^6.22.0",
- "babel-plugin-transform-es2015-for-of": "^6.23.0",
- "babel-plugin-transform-es2015-function-name": "^6.22.0",
- "babel-plugin-transform-es2015-literals": "^6.22.0",
- "babel-plugin-transform-es2015-modules-amd": "^6.22.0",
- "babel-plugin-transform-es2015-modules-commonjs": "^6.23.0",
- "babel-plugin-transform-es2015-modules-systemjs": "^6.23.0",
- "babel-plugin-transform-es2015-modules-umd": "^6.23.0",
- "babel-plugin-transform-es2015-object-super": "^6.22.0",
- "babel-plugin-transform-es2015-parameters": "^6.23.0",
- "babel-plugin-transform-es2015-shorthand-properties": "^6.22.0",
- "babel-plugin-transform-es2015-spread": "^6.22.0",
- "babel-plugin-transform-es2015-sticky-regex": "^6.22.0",
- "babel-plugin-transform-es2015-template-literals": "^6.22.0",
- "babel-plugin-transform-es2015-typeof-symbol": "^6.23.0",
- "babel-plugin-transform-es2015-unicode-regex": "^6.22.0",
- "babel-plugin-transform-exponentiation-operator": "^6.22.0",
- "babel-plugin-transform-regenerator": "^6.22.0",
- "browserslist": "^2.1.2",
- "invariant": "^2.2.2",
- "semver": "^5.3.0"
+ "@babel/plugin-transform-shorthand-properties": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz",
+ "integrity": "sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.25.9"
}
},
- "babel-preset-flow": {
- "version": "6.23.0",
- "resolved": "https://registry.npmjs.org/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz",
- "integrity": "sha1-5xIYiHCFrpoktb5Baa/7WZgWxJ0=",
+ "@babel/plugin-transform-spread": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz",
+ "integrity": "sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==",
"dev": true,
"requires": {
- "babel-plugin-transform-flow-strip-types": "^6.22.0"
+ "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9"
}
},
- "babel-preset-react": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-preset-react/-/babel-preset-react-6.24.1.tgz",
- "integrity": "sha1-umnfrqRfw+xjm2pOzqbhdwLJE4A=",
+ "@babel/plugin-transform-sticky-regex": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz",
+ "integrity": "sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==",
"dev": true,
"requires": {
- "babel-plugin-syntax-jsx": "^6.3.13",
- "babel-plugin-transform-react-display-name": "^6.23.0",
- "babel-plugin-transform-react-jsx": "^6.24.1",
- "babel-plugin-transform-react-jsx-self": "^6.22.0",
- "babel-plugin-transform-react-jsx-source": "^6.22.0",
- "babel-preset-flow": "^6.23.0"
+ "@babel/helper-plugin-utils": "^7.25.9"
}
},
- "babel-register": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz",
- "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=",
+ "@babel/plugin-transform-template-literals": {
+ "version": "7.26.8",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.26.8.tgz",
+ "integrity": "sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q==",
"dev": true,
"requires": {
- "babel-core": "^6.26.0",
- "babel-runtime": "^6.26.0",
- "core-js": "^2.5.0",
- "home-or-tmp": "^2.0.0",
- "lodash": "^4.17.4",
- "mkdirp": "^0.5.1",
- "source-map-support": "^0.4.15"
- },
- "dependencies": {
- "core-js": {
- "version": "2.5.3",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz",
- "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=",
- "dev": true
- },
- "minimist": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
- "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
- "dev": true
- },
- "mkdirp": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
- "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
- "dev": true,
- "requires": {
- "minimist": "0.0.8"
- }
- }
+ "@babel/helper-plugin-utils": "^7.26.5"
}
},
- "babel-runtime": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
- "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "@babel/plugin-transform-typeof-symbol": {
+ "version": "7.27.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.0.tgz",
+ "integrity": "sha512-+LLkxA9rKJpNoGsbLnAgOCdESl73vwYn+V6b+5wHbrE7OGKVDPHIQvbFSzqE6rwqaCw2RE+zdJrlLkcf8YOA0w==",
"dev": true,
"requires": {
- "core-js": "^2.4.0",
- "regenerator-runtime": "^0.11.0"
- },
- "dependencies": {
- "core-js": {
- "version": "2.5.3",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz",
- "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=",
- "dev": true
- }
+ "@babel/helper-plugin-utils": "^7.26.5"
}
},
- "babel-template": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
- "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
+ "@babel/plugin-transform-unicode-escapes": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz",
+ "integrity": "sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==",
"dev": true,
"requires": {
- "babel-runtime": "^6.26.0",
- "babel-traverse": "^6.26.0",
- "babel-types": "^6.26.0",
- "babylon": "^6.18.0",
- "lodash": "^4.17.4"
+ "@babel/helper-plugin-utils": "^7.25.9"
}
},
- "babel-traverse": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
- "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "@babel/plugin-transform-unicode-property-regex": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz",
+ "integrity": "sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==",
"dev": true,
"requires": {
- "babel-code-frame": "^6.26.0",
- "babel-messages": "^6.23.0",
- "babel-runtime": "^6.26.0",
- "babel-types": "^6.26.0",
- "babylon": "^6.18.0",
- "debug": "^2.6.8",
- "globals": "^9.18.0",
- "invariant": "^2.2.2",
- "lodash": "^4.17.4"
+ "@babel/helper-create-regexp-features-plugin": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9"
}
},
- "babel-types": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
- "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "@babel/plugin-transform-unicode-regex": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz",
+ "integrity": "sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==",
"dev": true,
"requires": {
- "babel-runtime": "^6.26.0",
- "esutils": "^2.0.2",
- "lodash": "^4.17.4",
- "to-fast-properties": "^1.0.3"
+ "@babel/helper-create-regexp-features-plugin": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9"
}
},
- "babylon": {
- "version": "6.18.0",
- "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
- "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
- "dev": true
- },
- "bail": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.2.tgz",
- "integrity": "sha1-99bBcxYwqfnw1NNe0fli4gdKF2Q=",
- "dev": true
- },
- "balanced-match": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
- "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
+ "@babel/plugin-transform-unicode-sets-regex": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz",
+ "integrity": "sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-regexp-features-plugin": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9"
+ }
},
- "base": {
- "version": "0.11.2",
- "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
- "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "@babel/preset-env": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.5.tgz",
+ "integrity": "sha512-fj06hw89dpiZzGZtxn+QybifF07nNiZjZ7sazs2aVDcysAZVGjW7+7iFYxg6GLNM47R/thYfLdrXc+2f11Vi9A==",
"dev": true,
"requires": {
- "cache-base": "^1.0.1",
- "class-utils": "^0.3.5",
- "component-emitter": "^1.2.1",
- "define-property": "^1.0.0",
- "isobject": "^3.0.1",
- "mixin-deep": "^1.2.0",
- "pascalcase": "^0.1.1"
+ "@babel/compat-data": "^7.22.5",
+ "@babel/helper-compilation-targets": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-validator-option": "^7.22.5",
+ "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5",
+ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5",
+ "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2",
+ "@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",
+ "@babel/plugin-syntax-dynamic-import": "^7.8.3",
+ "@babel/plugin-syntax-export-namespace-from": "^7.8.3",
+ "@babel/plugin-syntax-import-assertions": "^7.22.5",
+ "@babel/plugin-syntax-import-attributes": "^7.22.5",
+ "@babel/plugin-syntax-import-meta": "^7.10.4",
+ "@babel/plugin-syntax-json-strings": "^7.8.3",
+ "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
+ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
+ "@babel/plugin-syntax-numeric-separator": "^7.10.4",
+ "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
+ "@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-syntax-unicode-sets-regex": "^7.18.6",
+ "@babel/plugin-transform-arrow-functions": "^7.22.5",
+ "@babel/plugin-transform-async-generator-functions": "^7.22.5",
+ "@babel/plugin-transform-async-to-generator": "^7.22.5",
+ "@babel/plugin-transform-block-scoped-functions": "^7.22.5",
+ "@babel/plugin-transform-block-scoping": "^7.22.5",
+ "@babel/plugin-transform-class-properties": "^7.22.5",
+ "@babel/plugin-transform-class-static-block": "^7.22.5",
+ "@babel/plugin-transform-classes": "^7.22.5",
+ "@babel/plugin-transform-computed-properties": "^7.22.5",
+ "@babel/plugin-transform-destructuring": "^7.22.5",
+ "@babel/plugin-transform-dotall-regex": "^7.22.5",
+ "@babel/plugin-transform-duplicate-keys": "^7.22.5",
+ "@babel/plugin-transform-dynamic-import": "^7.22.5",
+ "@babel/plugin-transform-exponentiation-operator": "^7.22.5",
+ "@babel/plugin-transform-export-namespace-from": "^7.22.5",
+ "@babel/plugin-transform-for-of": "^7.22.5",
+ "@babel/plugin-transform-function-name": "^7.22.5",
+ "@babel/plugin-transform-json-strings": "^7.22.5",
+ "@babel/plugin-transform-literals": "^7.22.5",
+ "@babel/plugin-transform-logical-assignment-operators": "^7.22.5",
+ "@babel/plugin-transform-member-expression-literals": "^7.22.5",
+ "@babel/plugin-transform-modules-amd": "^7.22.5",
+ "@babel/plugin-transform-modules-commonjs": "^7.22.5",
+ "@babel/plugin-transform-modules-systemjs": "^7.22.5",
+ "@babel/plugin-transform-modules-umd": "^7.22.5",
+ "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5",
+ "@babel/plugin-transform-new-target": "^7.22.5",
+ "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5",
+ "@babel/plugin-transform-numeric-separator": "^7.22.5",
+ "@babel/plugin-transform-object-rest-spread": "^7.22.5",
+ "@babel/plugin-transform-object-super": "^7.22.5",
+ "@babel/plugin-transform-optional-catch-binding": "^7.22.5",
+ "@babel/plugin-transform-optional-chaining": "^7.22.5",
+ "@babel/plugin-transform-parameters": "^7.22.5",
+ "@babel/plugin-transform-private-methods": "^7.22.5",
+ "@babel/plugin-transform-private-property-in-object": "^7.22.5",
+ "@babel/plugin-transform-property-literals": "^7.22.5",
+ "@babel/plugin-transform-regenerator": "^7.22.5",
+ "@babel/plugin-transform-reserved-words": "^7.22.5",
+ "@babel/plugin-transform-shorthand-properties": "^7.22.5",
+ "@babel/plugin-transform-spread": "^7.22.5",
+ "@babel/plugin-transform-sticky-regex": "^7.22.5",
+ "@babel/plugin-transform-template-literals": "^7.22.5",
+ "@babel/plugin-transform-typeof-symbol": "^7.22.5",
+ "@babel/plugin-transform-unicode-escapes": "^7.22.5",
+ "@babel/plugin-transform-unicode-property-regex": "^7.22.5",
+ "@babel/plugin-transform-unicode-regex": "^7.22.5",
+ "@babel/plugin-transform-unicode-sets-regex": "^7.22.5",
+ "@babel/preset-modules": "^0.1.5",
+ "@babel/types": "^7.22.5",
+ "babel-plugin-polyfill-corejs2": "^0.4.3",
+ "babel-plugin-polyfill-corejs3": "^0.8.1",
+ "babel-plugin-polyfill-regenerator": "^0.5.0",
+ "core-js-compat": "^3.30.2",
+ "semver": "^6.3.0"
},
"dependencies": {
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true
}
}
},
- "base64-js": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz",
- "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==",
- "dev": true
+ "@babel/preset-modules": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6.tgz",
+ "integrity": "sha512-ID2yj6K/4lKfhuU3+EX4UvNbIt7eACFbHmNUjzA+ep+B5971CknnA/9DEWKbRokfbbtblxxxXFJJrH47UEAMVg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-proposal-unicode-property-regex": "^7.4.4",
+ "@babel/plugin-transform-dotall-regex": "^7.4.4",
+ "@babel/types": "^7.4.4",
+ "esutils": "^2.0.2"
+ }
},
- "basic-auth": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.0.tgz",
- "integrity": "sha1-AV2z81PgLlY3d1X5YnQuiYHnu7o=",
+ "@babel/preset-react": {
+ "version": "7.26.3",
+ "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.26.3.tgz",
+ "integrity": "sha512-Nl03d6T9ky516DGK2YMxrTqvnpUW63TnJMOMonj+Zae0JiPC5BC9xPMSL6L8fiSpA5vP88qfygavVQvnLp+6Cw==",
+ "dev": true,
"requires": {
- "safe-buffer": "5.1.1"
+ "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/helper-validator-option": "^7.25.9",
+ "@babel/plugin-transform-react-display-name": "^7.25.9",
+ "@babel/plugin-transform-react-jsx": "^7.25.9",
+ "@babel/plugin-transform-react-jsx-development": "^7.25.9",
+ "@babel/plugin-transform-react-pure-annotations": "^7.25.9"
}
},
- "bcrypt-pbkdf": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
- "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
+ "@babel/runtime": {
+ "version": "7.27.0",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.0.tgz",
+ "integrity": "sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==",
"requires": {
- "tweetnacl": "^0.14.3"
+ "regenerator-runtime": "^0.14.0"
+ },
+ "dependencies": {
+ "regenerator-runtime": {
+ "version": "0.14.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
+ "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="
+ }
}
},
- "bfj": {
- "version": "6.1.2",
- "resolved": "https://registry.npmjs.org/bfj/-/bfj-6.1.2.tgz",
- "integrity": "sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw==",
+ "@babel/template": {
+ "version": "7.27.0",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz",
+ "integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==",
"dev": true,
"requires": {
- "bluebird": "^3.5.5",
- "check-types": "^8.0.3",
- "hoopy": "^0.1.4",
- "tryer": "^1.0.1"
+ "@babel/code-frame": "^7.26.2",
+ "@babel/parser": "^7.27.0",
+ "@babel/types": "^7.27.0"
+ }
+ },
+ "@babel/traverse": {
+ "version": "7.27.0",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.0.tgz",
+ "integrity": "sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.26.2",
+ "@babel/generator": "^7.27.0",
+ "@babel/parser": "^7.27.0",
+ "@babel/template": "^7.27.0",
+ "@babel/types": "^7.27.0",
+ "debug": "^4.3.1",
+ "globals": "^11.1.0"
},
"dependencies": {
- "bluebird": {
- "version": "3.7.1",
- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.1.tgz",
- "integrity": "sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg==",
+ "debug": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
+ "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.3"
+ }
+ },
+ "globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+ "dev": true
+ },
+ "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
}
}
},
- "big-integer": {
- "version": "1.6.40",
- "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.40.tgz",
- "integrity": "sha512-CjhtJp0BViLzP1ZkEnoywjgtFQXS2pomKjAJtIISTCnuHILkLcAXLdFLG/nxsHc4s9kJfc+82Xpg8WNyhfACzQ=="
- },
- "big.js": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz",
- "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==",
- "dev": true
- },
- "binary": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz",
- "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=",
+ "@babel/types": {
+ "version": "7.27.0",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz",
+ "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==",
+ "dev": true,
"requires": {
- "buffers": "~0.1.1",
- "chainsaw": "~0.1.0"
+ "@babel/helper-string-parser": "^7.25.9",
+ "@babel/helper-validator-identifier": "^7.25.9"
}
},
- "binary-extensions": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz",
- "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU="
+ "@jridgewell/gen-mapping": {
+ "version": "0.3.8",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz",
+ "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==",
+ "dev": true,
+ "requires": {
+ "@jridgewell/set-array": "^1.2.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ }
},
- "bluebird": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.2.tgz",
- "integrity": "sha512-dhHTWMI7kMx5whMQntl7Vr9C6BvV10lFXDAasnqnrMYhXVCzzk6IO9Fo2L75jXHT07WrOngL1WDXOp+yYS91Yg=="
+ "@jridgewell/resolve-uri": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+ "dev": true
},
- "bn.js": {
- "version": "4.11.8",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
- "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==",
+ "@jridgewell/set-array": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
+ "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
"dev": true
},
- "body-parser": {
- "version": "1.18.2",
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz",
- "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=",
+ "@jridgewell/sourcemap-codec": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
+ "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
+ "dev": true
+ },
+ "@jridgewell/trace-mapping": {
+ "version": "0.3.25",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
+ "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
+ "dev": true,
"requires": {
- "bytes": "3.0.0",
- "content-type": "~1.0.4",
- "debug": "2.6.9",
- "depd": "~1.1.1",
- "http-errors": "~1.6.2",
- "iconv-lite": "0.4.19",
- "on-finished": "~2.3.0",
- "qs": "6.5.1",
- "raw-body": "2.3.2",
- "type-is": "~1.6.15"
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
}
},
- "boxen": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz",
- "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==",
+ "@sinonjs/commons": {
+ "version": "1.8.6",
+ "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz",
+ "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==",
"dev": true,
"requires": {
- "ansi-align": "^2.0.0",
- "camelcase": "^4.0.0",
- "chalk": "^2.0.1",
- "cli-boxes": "^1.0.0",
- "string-width": "^2.0.0",
- "term-size": "^1.2.0",
- "widest-line": "^2.0.0"
+ "type-detect": "4.0.8"
},
"dependencies": {
- "ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
- "dev": true
- },
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "camelcase": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
- "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
- "dev": true
- },
- "chalk": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
- "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "type-detect": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
+ "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
"dev": true
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
- "dev": true
- },
- "string-width": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
- "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
- "dev": true,
- "requires": {
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
- }
- },
- "strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
- "dev": true,
- "requires": {
- "ansi-regex": "^3.0.0"
- }
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
}
}
},
- "brace-expansion": {
- "version": "1.1.8",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
- "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "braces": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
- "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
+ "@sinonjs/formatio": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-3.2.2.tgz",
+ "integrity": "sha512-B8SEsgd8gArBLMD6zpRw3juQ2FVSsmdd7qlevyDqzS9WTCtvF55/gAL+h6gue8ZvPYcdiPdvueM/qm//9XzyTQ==",
+ "dev": true,
"requires": {
- "expand-range": "^1.8.1",
- "preserve": "^0.2.0",
- "repeat-element": "^1.1.2"
+ "@sinonjs/commons": "^1",
+ "@sinonjs/samsam": "^3.1.0"
}
},
- "broadway": {
- "version": "0.3.6",
- "resolved": "https://registry.npmjs.org/broadway/-/broadway-0.3.6.tgz",
- "integrity": "sha1-fb7waLlUt5B5Jf1USWO1eKkCuno=",
+ "@sinonjs/samsam": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-3.3.3.tgz",
+ "integrity": "sha512-bKCMKZvWIjYD0BLGnNrxVuw4dkWCYsLqFOUWw8VgKF/+5Y+mE7LfHWPIYoDXowH+3a9LsWDMo0uAP8YDosPvHQ==",
+ "dev": true,
"requires": {
- "cliff": "0.1.9",
- "eventemitter2": "0.4.14",
- "nconf": "0.6.9",
- "utile": "0.2.1",
- "winston": "0.8.0"
+ "@sinonjs/commons": "^1.3.0",
+ "array-from": "^2.1.1",
+ "lodash": "^4.17.15"
},
"dependencies": {
- "async": {
- "version": "0.2.10",
- "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
- "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E="
- },
- "cliff": {
- "version": "0.1.9",
- "resolved": "https://registry.npmjs.org/cliff/-/cliff-0.1.9.tgz",
- "integrity": "sha1-ohHgnGo947oa8n0EnTASUNGIErw=",
- "requires": {
- "colors": "0.x.x",
- "eyes": "0.1.x",
- "winston": "0.8.x"
- }
- },
- "colors": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz",
- "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w="
- },
- "winston": {
- "version": "0.8.0",
- "resolved": "https://registry.npmjs.org/winston/-/winston-0.8.0.tgz",
- "integrity": "sha1-YdCDD6aZcGISIGsKK1ymmpMENmg=",
- "requires": {
- "async": "0.2.x",
- "colors": "0.6.x",
- "cycle": "1.0.x",
- "eyes": "0.1.x",
- "pkginfo": "0.3.x",
- "stack-trace": "0.0.x"
- }
+ "lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+ "dev": true
}
}
},
- "brorand": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
- "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
+ "@sinonjs/text-encoding": {
+ "version": "0.7.3",
+ "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.3.tgz",
+ "integrity": "sha512-DE427ROAphMQzU4ENbliGYrBSYPXF+TtLg9S8vzeA+OF4ZKzoDdzfL8sxuMUGS/lgRhM6j1URSk9ghf7Xo1tyA==",
"dev": true
},
- "browser-split": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/browser-split/-/browser-split-0.0.0.tgz",
- "integrity": "sha1-QUGcrvdpdVkp3VGJZ9PuwKYmJ3E="
- },
- "browser-stdout": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
- "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
+ "@types/json-schema": {
+ "version": "7.0.15",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
+ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
"dev": true
},
- "browserify-aes": {
- "version": "1.2.0",
- "resolved": "http://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
- "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
- "dev": true,
+ "accepts": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
+ "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
"requires": {
- "buffer-xor": "^1.0.3",
- "cipher-base": "^1.0.0",
- "create-hash": "^1.1.0",
- "evp_bytestokey": "^1.0.3",
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
+ "mime-types": "~2.1.34",
+ "negotiator": "0.6.3"
}
},
- "browserify-cipher": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
- "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
- "dev": true,
- "requires": {
- "browserify-aes": "^1.0.4",
- "browserify-des": "^1.0.0",
- "evp_bytestokey": "^1.0.0"
- }
+ "acorn": {
+ "version": "5.7.4",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz",
+ "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==",
+ "dev": true
},
- "browserify-des": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
- "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
+ "acorn-dynamic-import": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz",
+ "integrity": "sha512-GKp5tQ8h0KMPWIYGRHHXI1s5tUpZixZ3IHF2jAu42wSCf6In/G873s6/y4DdKdhWvzhu1T6mE1JgvnhAKqyYYQ==",
"dev": true,
"requires": {
- "cipher-base": "^1.0.1",
- "des.js": "^1.0.0",
- "inherits": "^2.0.1",
- "safe-buffer": "^5.1.2"
+ "acorn": "^4.0.3"
},
"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==",
+ "acorn": {
+ "version": "4.0.13",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz",
+ "integrity": "sha512-fu2ygVGuMmlzG8ZeRJ0bvR41nsAkxxhbyk8bZ1SS521Z7vmgJFTQQlfz/Mp/nJexGBz+v8sC9bM6+lNgskt4Ug==",
"dev": true
}
}
},
- "browserify-rsa": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
- "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
+ "acorn-jsx": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz",
+ "integrity": "sha512-AU7pnZkguthwBjKgCg6998ByQNIMjbuDQZ8bb78QAFZwPfmKia8AIzgY/gWgqCjnht8JLdXmB4YxA0KaV60ncQ==",
"dev": true,
"requires": {
- "bn.js": "^4.1.0",
- "randombytes": "^2.0.1"
+ "acorn": "^3.0.4"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
+ "integrity": "sha512-OLUyIIZ7mF5oaAUT1w0TFqQS81q3saT46x8t7ukpPjMNk+nbs4ZHhs7ToV8EWnLYLepjETXd4XaCE4uxkMeqUw==",
+ "dev": true
+ }
}
},
- "browserify-sign": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz",
- "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
- "dev": true,
- "requires": {
- "bn.js": "^4.1.1",
- "browserify-rsa": "^4.0.0",
- "create-hash": "^1.1.0",
- "create-hmac": "^1.1.2",
- "elliptic": "^6.0.0",
- "inherits": "^2.0.1",
- "parse-asn1": "^5.0.0"
- }
+ "acorn-walk": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz",
+ "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==",
+ "dev": true
},
- "browserify-zlib": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
- "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
+ "ajv": {
+ "version": "5.5.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
+ "integrity": "sha512-Ajr4IcMXq/2QmMkEmSvxqfLN5zGmJ92gHXAeOXq1OekoH2rfDNsgdDoL2f7QaRCy7G/E6TpxBVdRuNraMztGHw==",
"dev": true,
"requires": {
- "pako": "~1.0.5"
+ "co": "^4.6.0",
+ "fast-deep-equal": "^1.0.0",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.3.0"
}
},
- "browserslist": {
- "version": "2.11.3",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.11.3.tgz",
- "integrity": "sha512-yWu5cXT7Av6mVwzWc8lMsJMHWn4xyjSuGYi4IozbVTLUOEYPSagUB8kiMDUHA1fS3zjr8nkxkn9jdvug4BBRmA==",
+ "ajv-keywords": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
+ "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
+ "dev": true
+ },
+ "align-text": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
+ "integrity": "sha512-GrTZLRpmp6wIC2ztrWW9MjjTgSKccffgFagbNDOX95/dcjEcYZibYTeaOntySQLcdw1ztBoFkviiUvTMbb9MYg==",
"dev": true,
"requires": {
- "caniuse-lite": "^1.0.30000792",
- "electron-to-chromium": "^1.3.30"
+ "kind-of": "^3.0.2",
+ "longest": "^1.0.1",
+ "repeat-string": "^1.5.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
}
},
- "buffer": {
- "version": "4.9.1",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz",
- "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
+ "alphanum-sort": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz",
+ "integrity": "sha512-0FcBfdcmaumGPQ0qPn7Q5qTgz/ooXgIyp1rf8ik5bGX8mpE2YHjC0P/eyQvxu1GURYQgq9ozf2mteQ5ZD9YiyQ==",
+ "dev": true
+ },
+ "ansi-align": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz",
+ "integrity": "sha512-TdlOggdA/zURfMYa7ABC66j+oqfMew58KpJMbUlH3bcZP1b+cBHIHDDn5uH9INsxrHBPjsqM0tDB4jPTF/vgJA==",
"dev": true,
"requires": {
- "base64-js": "^1.0.2",
- "ieee754": "^1.1.4",
- "isarray": "^1.0.0"
+ "string-width": "^2.0.0"
}
},
- "buffer-indexof-polyfill": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.1.tgz",
- "integrity": "sha1-qfuAbOgUXVQoUQznLyeLs2OmOL8="
- },
- "buffer-xor": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
- "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
+ "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==",
"dev": true
},
- "buffers": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz",
- "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s="
- },
- "builtin-modules": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
- "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
"dev": true
},
- "builtin-status-codes": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
- "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=",
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==",
"dev": true
},
- "bytes": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
- "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
+ "anymatch": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz",
+ "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==",
+ "requires": {
+ "micromatch": "^2.1.5",
+ "normalize-path": "^2.0.0"
+ }
},
- "cache-base": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
- "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
- "dev": true,
+ "argparse": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz",
+ "integrity": "sha512-iK7YPKV+GsvihPUTKcM3hh2gq47zSFCpVDv/Ay2O9mzuD7dfvLV4vhms4XcjZvv4VRgXuGLMEts51IlTjS11/A==",
"requires": {
- "collection-visit": "^1.0.0",
- "component-emitter": "^1.2.1",
- "get-value": "^2.0.6",
- "has-value": "^1.0.0",
- "isobject": "^3.0.1",
- "set-value": "^2.0.0",
- "to-object-path": "^0.3.0",
- "union-value": "^1.0.0",
- "unset-value": "^1.0.0"
- },
- "dependencies": {
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- }
+ "sprintf-js": "~1.0.2"
}
},
- "call-me-maybe": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz",
- "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms="
+ "arr-diff": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
+ "integrity": "sha512-dtXTVMkh6VkEEA7OhXnN1Ecb8aAGFdZ1LFxtOCoqj4qkyOJMt7+qs6Ahdy6p/NQCPYsRSXXivhSB/J5E9jmYKA==",
+ "requires": {
+ "arr-flatten": "^1.0.1"
+ }
},
- "caller": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/caller/-/caller-0.0.1.tgz",
- "integrity": "sha1-83odbqEOgp2UchrimpC7T7Uqt2c=",
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg=="
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==",
+ "dev": true
+ },
+ "array-buffer-byte-length": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz",
+ "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==",
"requires": {
- "tape": "~2.3.2"
+ "call-bound": "^1.0.3",
+ "is-array-buffer": "^3.0.5"
}
},
- "caller-path": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
- "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=",
+ "array-find-index": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
+ "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==",
+ "dev": true
+ },
+ "array-flatten": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+ "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
+ },
+ "array-from": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz",
+ "integrity": "sha512-GQTc6Uupx1FCavi5mPzBvVT7nEOeWMmUA9P95wpfpW1XwMSKs+KaymD5C2Up7KAUKg/mYwbsUYzdZWcoajlNZg==",
+ "dev": true
+ },
+ "array-union": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
+ "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==",
"dev": true,
"requires": {
- "callsites": "^0.2.0"
+ "array-uniq": "^1.0.1"
}
},
- "callsites": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz",
- "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=",
+ "array-uniq": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
+ "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==",
"dev": true
},
- "camelcase": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
- "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=",
+ "array-unique": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
+ "integrity": "sha512-G2n5bG5fSUCpnsXz4+8FUkYsGPkNfLn9YvS66U5qbTIXI2Ynnlo4Bi42bWv+omKUCqz+ejzfClwne0alJWJPhg=="
+ },
+ "arraybuffer.prototype.slice": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz",
+ "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==",
+ "dev": true,
+ "requires": {
+ "array-buffer-byte-length": "^1.0.1",
+ "call-bind": "^1.0.8",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.5",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.6",
+ "is-array-buffer": "^3.0.4"
+ }
+ },
+ "arrify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+ "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==",
"dev": true
},
- "camelcase-keys": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
- "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
+ "asn1": {
+ "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"
+ }
+ },
+ "asn1.js": {
+ "version": "4.10.1",
+ "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
+ "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
"dev": true,
"requires": {
- "camelcase": "^2.0.0",
- "map-obj": "^1.0.0"
+ "bn.js": "^4.0.0",
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
},
"dependencies": {
- "camelcase": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
- "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
+ "bn.js": {
+ "version": "4.12.1",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz",
+ "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==",
"dev": true
}
}
},
- "caniuse-api": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz",
- "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=",
+ "assert": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.1.tgz",
+ "integrity": "sha512-zzw1uCAgLbsKwBfFc8CX78DDg+xZeBksSO3vwVIDDN5i94eOrPsSSyiVhmsSABFDM/OcpE2aagCat9dnWQLG1A==",
"dev": true,
"requires": {
- "browserslist": "^1.3.6",
- "caniuse-db": "^1.0.30000529",
- "lodash.memoize": "^4.1.2",
- "lodash.uniq": "^4.5.0"
+ "object.assign": "^4.1.4",
+ "util": "^0.10.4"
},
"dependencies": {
- "browserslist": {
- "version": "1.7.7",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz",
- "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
+ "util": {
+ "version": "0.10.4",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz",
+ "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==",
"dev": true,
"requires": {
- "caniuse-db": "^1.0.30000639",
- "electron-to-chromium": "^1.2.7"
+ "inherits": "2.0.3"
}
}
}
},
- "caniuse-db": {
- "version": "1.0.30000803",
- "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000803.tgz",
- "integrity": "sha1-Po0rr1bC/VpZyC4ieSig3CwmcC0=",
- "dev": true
- },
- "caniuse-lite": {
- "version": "1.0.30000803",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000803.tgz",
- "integrity": "sha512-AoROHIFLv2iv5CG4nonOfT9ZCQ3JTN0GyEn8LG2sPb2Wc5cIyX/UwLYP0pnVajVF3LWH+mrO/DXBzmte0BK9cQ==",
- "dev": true
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw=="
},
- "capture-stack-trace": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz",
- "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==",
+ "assertion-error": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
+ "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
"dev": true
},
- "caseless": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
- "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
- },
- "ccount": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.0.2.tgz",
- "integrity": "sha1-U7ai+BW7d7nChx97mnLDol8djok=",
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==",
"dev": true
},
- "center-align": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
- "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
+ "async": {
+ "version": "2.6.4",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz",
+ "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==",
"dev": true,
"requires": {
- "align-text": "^0.1.3",
- "lazy-cache": "^1.0.3"
+ "lodash": "^4.17.14"
},
"dependencies": {
- "lazy-cache": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
- "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=",
+ "lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
"dev": true
}
}
},
- "chai": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chai/-/chai-4.1.2.tgz",
- "integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=",
+ "async-each": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz",
+ "integrity": "sha512-STDwmg+1mv249vNFx+s+sF4HrdLxlF5Z6L4npilrkgchWPEuW4X13gKzSJq51qJy9InOgwmPepgfMb9/Qu0fSg=="
+ },
+ "async-function": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz",
+ "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==",
+ "dev": true
+ },
+ "async-limiter": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
+ "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==",
+ "dev": true
+ },
+ "async-retry": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz",
+ "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==",
"dev": true,
"requires": {
- "assertion-error": "^1.0.1",
- "check-error": "^1.0.1",
- "deep-eql": "^3.0.0",
- "get-func-name": "^2.0.0",
- "pathval": "^1.0.0",
- "type-detect": "^4.0.0"
+ "retry": "0.13.1"
}
},
- "chai-as-promised": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz",
- "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==",
- "requires": {
- "check-error": "^1.0.2"
- }
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
},
- "chainsaw": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz",
- "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=",
- "requires": {
- "traverse": ">=0.3.0 <0.4"
- }
+ "atob": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
+ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
+ "dev": true
},
- "chalk": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
- "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "autoprefixer": {
+ "version": "6.7.7",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz",
+ "integrity": "sha512-WKExI/eSGgGAkWAO+wMVdFObZV7hQen54UpD1kCCTN3tvlL3W1jL4+lPP/M7MwoP7Q4RHzKtO3JQ4HxYEcd+xQ==",
"dev": true,
"requires": {
- "ansi-styles": "^2.2.1",
- "escape-string-regexp": "^1.0.2",
- "has-ansi": "^2.0.0",
- "strip-ansi": "^3.0.0",
- "supports-color": "^2.0.0"
+ "browserslist": "^1.7.6",
+ "caniuse-db": "^1.0.30000634",
+ "normalize-range": "^0.1.2",
+ "num2fraction": "^1.2.2",
+ "postcss": "^5.2.16",
+ "postcss-value-parser": "^3.2.3"
+ },
+ "dependencies": {
+ "browserslist": {
+ "version": "1.7.7",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz",
+ "integrity": "sha512-qHJblDE2bXVRYzuDetv/wAeHOJyO97+9wxC1cdCtyzgNuSozOyRCiiLaCR1f71AN66lQdVVBipWm63V+a7bPOw==",
+ "dev": true,
+ "requires": {
+ "caniuse-db": "^1.0.30000639",
+ "electron-to-chromium": "^1.2.7"
+ }
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^1.0.0"
+ }
+ }
}
},
- "character-entities": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.1.tgz",
- "integrity": "sha1-92hxvl72bdt/j440eOzDdMJ9bco=",
- "dev": true
- },
- "character-entities-html4": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.1.tgz",
- "integrity": "sha1-NZoqSg9+KdPcKsmb2+Ie45Q46lA=",
- "dev": true
- },
- "character-entities-legacy": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.1.tgz",
- "integrity": "sha1-9Ad53xoQGHK7UQo9KV4fzPFHIC8=",
- "dev": true
- },
- "character-reference-invalid": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.1.tgz",
- "integrity": "sha1-lCg191Dk7GGjCOYMLvjMEBEgLvw=",
- "dev": true
- },
- "chardet": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz",
- "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=",
- "dev": true
+ "available-typed-arrays": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
+ "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
+ "requires": {
+ "possible-typed-array-names": "^1.0.0"
+ }
},
- "check-error": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
- "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII="
+ "aws-sign2": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+ "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA=="
},
- "check-types": {
- "version": "8.0.3",
- "resolved": "https://registry.npmjs.org/check-types/-/check-types-8.0.3.tgz",
- "integrity": "sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ==",
- "dev": true
+ "aws4": {
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz",
+ "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw=="
},
- "chokidar": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz",
- "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=",
+ "babel-code-frame": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==",
+ "dev": true,
"requires": {
- "anymatch": "^1.3.0",
- "async-each": "^1.0.0",
- "fsevents": "^1.0.0",
- "glob-parent": "^2.0.0",
- "inherits": "^2.0.1",
- "is-binary-path": "^1.0.0",
- "is-glob": "^2.0.0",
- "path-is-absolute": "^1.0.0",
- "readdirp": "^2.0.0"
+ "chalk": "^1.1.3",
+ "esutils": "^2.0.2",
+ "js-tokens": "^3.0.2"
}
},
- "ci-info": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz",
- "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==",
- "dev": true
- },
- "cipher-base": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
- "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
+ "babel-helper-builder-react-jsx": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz",
+ "integrity": "sha512-02I9jDjnVEuGy2BR3LRm9nPRb/+Ja0pvZVLr1eI5TYAA/dB0Xoc+WBo50+aDfhGDLhlBY1+QURjn9uvcFd8gzg==",
"dev": true,
"requires": {
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "esutils": "^2.0.2"
}
},
- "circular-json": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz",
- "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==",
- "dev": true
+ "babel-helper-function-name": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz",
+ "integrity": "sha512-Oo6+e2iX+o9eVvJ9Y5eKL5iryeRdsIkwRYheCuhYdVHsdEQysbc2z2QkqCLIYnNxkT5Ss3ggrHdXiDI7Dhrn4Q==",
+ "dev": true,
+ "requires": {
+ "babel-helper-get-function-arity": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1",
+ "babel-traverse": "^6.24.1",
+ "babel-types": "^6.24.1"
+ }
},
- "clap": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz",
- "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==",
+ "babel-helper-get-function-arity": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz",
+ "integrity": "sha512-WfgKFX6swFB1jS2vo+DwivRN4NB8XUdM3ij0Y1gnC21y1tdBoe6xjVnd7NSI6alv+gZXCtJqvrTeMW3fR/c0ng==",
"dev": true,
"requires": {
- "chalk": "^1.1.3"
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.24.1"
}
},
- "class-list": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/class-list/-/class-list-0.1.1.tgz",
- "integrity": "sha1-m5dFGSxBebXaCg12M2WOPHDXlss=",
+ "babel-helper-remap-async-to-generator": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz",
+ "integrity": "sha512-RYqaPD0mQyQIFRu7Ho5wE2yvA/5jxqCIj/Lv4BXNq23mHYu/vxikOy2JueLiBxQknwapwrJeNCesvY0ZcfnlHg==",
+ "dev": true,
"requires": {
- "indexof": "0.0.1"
+ "babel-helper-function-name": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1",
+ "babel-traverse": "^6.24.1",
+ "babel-types": "^6.24.1"
}
},
- "class-utils": {
- "version": "0.3.6",
- "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
- "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "babel-loader": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz",
+ "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==",
"dev": true,
"requires": {
- "arr-union": "^3.1.0",
- "define-property": "^0.2.5",
- "isobject": "^3.0.0",
- "static-extend": "^0.1.1"
+ "find-cache-dir": "^3.3.1",
+ "loader-utils": "^2.0.0",
+ "make-dir": "^3.1.0",
+ "schema-utils": "^2.6.5"
},
"dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "json5": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+ "dev": true
+ },
+ "loader-utils": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
+ "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
"dev": true,
"requires": {
- "is-descriptor": "^0.1.0"
+ "big.js": "^5.2.2",
+ "emojis-list": "^3.0.0",
+ "json5": "^2.1.2"
}
},
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "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": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
+ "semver": "^6.0.0"
}
},
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true
+ }
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha512-Bl3ZiA+LjqaMtNYopA9TYE9HP1tQ+E5dLxE0XrAzcIJeK2UqF0/EaqXwBn9esd4UmTfEab+P+UYQ1GnioFIb/w==",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-polyfill-corejs2": {
+ "version": "0.4.13",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.13.tgz",
+ "integrity": "sha512-3sX/eOms8kd3q2KZ6DAhKPc0dgm525Gqq5NtWKZ7QYYZEv57OQ54KtblzJzH1lQF/eQxO8KjWGIK9IPUJNus5g==",
+ "dev": true,
+ "requires": {
+ "@babel/compat-data": "^7.22.6",
+ "@babel/helper-define-polyfill-provider": "^0.6.4",
+ "semver": "^6.3.1"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-polyfill-corejs3": {
+ "version": "0.8.7",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.7.tgz",
+ "integrity": "sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-define-polyfill-provider": "^0.4.4",
+ "core-js-compat": "^3.33.1"
+ },
+ "dependencies": {
+ "@babel/helper-define-polyfill-provider": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.4.tgz",
+ "integrity": "sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA==",
"dev": true,
"requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
+ "@babel/helper-compilation-targets": "^7.22.6",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "debug": "^4.1.1",
+ "lodash.debounce": "^4.0.8",
+ "resolve": "^1.14.2"
}
},
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "debug": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
+ "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
"dev": true,
"requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
+ "ms": "^2.1.3"
}
},
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- },
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "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
}
}
},
- "classnames": {
- "version": "2.2.5",
- "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.5.tgz",
- "integrity": "sha1-+zgB1FNGdknvNgPH1hoCvRKb3m0="
- },
- "cli-boxes": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz",
- "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=",
- "dev": true
- },
- "cli-spinners": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.1.0.tgz",
- "integrity": "sha1-8YR7FohE2RemceudFH499JfJDQY=",
- "dev": true
- },
- "cli-width": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
- "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
- "dev": true
- },
- "cliff": {
- "version": "0.1.10",
- "resolved": "https://registry.npmjs.org/cliff/-/cliff-0.1.10.tgz",
- "integrity": "sha1-U74z6p9ZvshWCe4wCsQgdgPlIBM=",
+ "babel-plugin-polyfill-regenerator": {
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz",
+ "integrity": "sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg==",
+ "dev": true,
"requires": {
- "colors": "~1.0.3",
- "eyes": "~0.1.8",
- "winston": "0.8.x"
+ "@babel/helper-define-polyfill-provider": "^0.5.0"
},
"dependencies": {
- "async": {
- "version": "0.2.10",
- "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
- "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E="
+ "@babel/helper-define-polyfill-provider": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz",
+ "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-compilation-targets": "^7.22.6",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "debug": "^4.1.1",
+ "lodash.debounce": "^4.0.8",
+ "resolve": "^1.14.2"
+ }
},
- "winston": {
- "version": "0.8.3",
- "resolved": "https://registry.npmjs.org/winston/-/winston-0.8.3.tgz",
- "integrity": "sha1-ZLar9M0Brcrv1QCTk7HY6L7BnbA=",
+ "debug": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
+ "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
+ "dev": true,
"requires": {
- "async": "0.2.x",
- "colors": "0.6.x",
- "cycle": "1.0.x",
- "eyes": "0.1.x",
- "isstream": "0.1.x",
- "pkginfo": "0.3.x",
- "stack-trace": "0.0.x"
- },
- "dependencies": {
- "colors": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz",
- "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w="
- }
+ "ms": "^2.1.3"
}
+ },
+ "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
}
}
},
- "cliui": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
- "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
- "dev": true,
- "requires": {
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wrap-ansi": "^2.0.0"
- }
+ "babel-plugin-syntax-async-functions": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz",
+ "integrity": "sha512-4Zp4unmHgw30A1eWI5EpACji2qMocisdXhAftfhXoSV9j0Tvj6nRFE3tOmRY912E0FMRm/L5xWE7MGVT2FoLnw==",
+ "dev": true
},
- "clone": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz",
- "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8="
+ "babel-plugin-syntax-flow": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz",
+ "integrity": "sha512-HbTDIoG1A1op7Tl/wIFQPULIBA61tsJ8Ntq2FAhLwuijrzosM/92kAfgU1Q3Kc7DH/cprJg5vDfuTY4QUL4rDA==",
+ "dev": true
},
- "clone-regexp": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-1.0.0.tgz",
- "integrity": "sha1-6uCiQT9VwJQvgYwin+/OhF1/Oxw=",
+ "babel-plugin-syntax-jsx": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz",
+ "integrity": "sha512-qrPaCSo9c8RHNRHIotaufGbuOBN8rtdC4QrrFFc43vyWCCz7Kl7GL1PGaXtMGQZUXrkCjNEgxDfmAuAabr/rlw==",
+ "dev": true
+ },
+ "babel-plugin-transform-async-to-generator": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz",
+ "integrity": "sha512-7BgYJujNCg0Ti3x0c/DL3tStvnKS6ktIYOmo9wginv/dfZOrbSZ+qG4IRRHMBOzZ5Awb1skTiAsQXg/+IWkZYw==",
"dev": true,
"requires": {
- "is-regexp": "^1.0.0",
- "is-supported-regexp-flag": "^1.0.0"
+ "babel-helper-remap-async-to-generator": "^6.24.1",
+ "babel-plugin-syntax-async-functions": "^6.8.0",
+ "babel-runtime": "^6.22.0"
}
},
- "co": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
- "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
- "dev": true
- },
- "coa": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz",
- "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=",
+ "babel-plugin-transform-flow-strip-types": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz",
+ "integrity": "sha512-TxIM0ZWNw9oYsoTthL3lvAK3+eTujzktoXJg4ubGvICGbVuXVYv5hHv0XXpz8fbqlJaGYY4q5SVzaSmsg3t4Fg==",
"dev": true,
"requires": {
- "q": "^1.1.2"
+ "babel-plugin-syntax-flow": "^6.18.0",
+ "babel-runtime": "^6.22.0"
}
},
- "code-point-at": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
- "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
- "dev": true
- },
- "collapse-white-space": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.3.tgz",
- "integrity": "sha1-S5BvZw5aljqHt2sOFolkM0G2Ajw=",
- "dev": true
- },
- "collection-visit": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
- "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "babel-plugin-transform-react-display-name": {
+ "version": "6.25.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz",
+ "integrity": "sha512-QLYkLiZeeED2PKd4LuXGg5y9fCgPB5ohF8olWUuETE2ryHNRqqnXlEVP7RPuef89+HTfd3syptMGVHeoAu0Wig==",
"dev": true,
"requires": {
- "map-visit": "^1.0.0",
- "object-visit": "^1.0.0"
+ "babel-runtime": "^6.22.0"
}
},
- "color": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color/-/color-2.0.1.tgz",
- "integrity": "sha512-ubUCVVKfT7r2w2D3qtHakj8mbmKms+tThR8gI8zEYCbUBl8/voqFGt3kgBqGwXAopgXybnkuOq+qMYCRrp4cXw==",
+ "babel-plugin-transform-react-jsx": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz",
+ "integrity": "sha512-s+q/Y2u2OgDPHRuod3t6zyLoV8pUHc64i/O7ZNgIOEdYTq+ChPeybcKBi/xk9VI60VriILzFPW+dUxAEbTxh2w==",
"dev": true,
"requires": {
- "color-convert": "^1.9.1",
- "color-string": "^1.5.2"
+ "babel-helper-builder-react-jsx": "^6.24.1",
+ "babel-plugin-syntax-jsx": "^6.8.0",
+ "babel-runtime": "^6.22.0"
}
},
- "color-convert": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz",
- "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==",
+ "babel-plugin-transform-react-jsx-self": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz",
+ "integrity": "sha512-Y3ZHP1nunv0U1+ysTNwLK39pabHj6cPVsfN4TRC7BDBfbgbyF4RifP5kd6LnbuMV9wcfedQMe7hn1fyKc7IzTQ==",
"dev": true,
"requires": {
- "color-name": "^1.1.1"
+ "babel-plugin-syntax-jsx": "^6.8.0",
+ "babel-runtime": "^6.22.0"
}
},
- "color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
- "dev": true
- },
- "color-string": {
- "version": "1.5.2",
- "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.2.tgz",
- "integrity": "sha1-JuRYFLw8mny9Z1FkikFDRRSnc6k=",
+ "babel-plugin-transform-react-jsx-source": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz",
+ "integrity": "sha512-pcDNDsZ9q/6LJmujQ/OhjeoIlp5Nl546HJ2yiFIJK3mYpgNXhI5/S9mXfVxu5yqWAi7HdI7e/q6a9xtzwL69Vw==",
"dev": true,
"requires": {
- "color-name": "^1.0.0",
- "simple-swizzle": "^0.2.2"
+ "babel-plugin-syntax-jsx": "^6.8.0",
+ "babel-runtime": "^6.22.0"
}
},
- "colormin": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz",
- "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=",
+ "babel-polyfill": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz",
+ "integrity": "sha512-F2rZGQnAdaHWQ8YAoeRbukc7HS9QgdgeyJ0rQDd485v9opwuPvjpPFcOOT/WmkKTdgy9ESgSPXDcTNpzrGr6iQ==",
"dev": true,
"requires": {
- "color": "^0.11.0",
- "css-color-names": "0.0.4",
- "has": "^1.0.1"
+ "babel-runtime": "^6.26.0",
+ "core-js": "^2.5.0",
+ "regenerator-runtime": "^0.10.5"
},
"dependencies": {
- "color": {
- "version": "0.11.4",
- "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz",
- "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=",
- "dev": true,
- "requires": {
- "clone": "^1.0.2",
- "color-convert": "^1.3.0",
- "color-string": "^0.3.0"
- }
- },
- "color-string": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz",
- "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=",
- "dev": true,
- "requires": {
- "color-name": "^1.0.0"
- }
+ "regenerator-runtime": {
+ "version": "0.10.5",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz",
+ "integrity": "sha512-02YopEIhAgiBHWeoTiA8aitHDt8z6w+rQqNuIftlM+ZtvSl/brTouaU7DW6GO/cHtvxJvS4Hwv2ibKdxIRi24w==",
+ "dev": true
}
}
},
- "colors": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
- "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs="
- },
- "combined-stream": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz",
- "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==",
+ "babel-preset-flow": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz",
+ "integrity": "sha512-PQZFJXnM3d80Vq4O67OE6EMVKIw2Vmzy8UXovqulNogCtblWU8rzP7Sm5YgHiCg4uejUxzCkHfNXQ4Z6GI+Dhw==",
+ "dev": true,
"requires": {
- "delayed-stream": "~1.0.0"
+ "babel-plugin-transform-flow-strip-types": "^6.22.0"
}
},
- "commander": {
- "version": "11.1.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz",
- "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==",
- "dev": true
- },
- "commondir": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
- "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
- "dev": true
- },
- "component-emitter": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
- "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
- "dev": true
- },
- "concat": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/concat/-/concat-1.0.3.tgz",
- "integrity": "sha1-QPM1MInWVGdpXLGIa0Xt1jfYzKg=",
+ "babel-preset-react": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-preset-react/-/babel-preset-react-6.24.1.tgz",
+ "integrity": "sha512-phQe3bElbgF887UM0Dhz55d22ob8czTL1kbhZFwpCE6+R/X9kHktfwmx9JZb+bBSVRGphP5tZ9oWhVhlgjrX3Q==",
+ "dev": true,
"requires": {
- "commander": "^2.9.0"
- },
- "dependencies": {
- "commander": {
- "version": "2.20.3",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
- }
+ "babel-plugin-syntax-jsx": "^6.3.13",
+ "babel-plugin-transform-react-display-name": "^6.23.0",
+ "babel-plugin-transform-react-jsx": "^6.24.1",
+ "babel-plugin-transform-react-jsx-self": "^6.22.0",
+ "babel-plugin-transform-react-jsx-source": "^6.22.0",
+ "babel-preset-flow": "^6.23.0"
}
},
- "concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
},
- "configstore": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz",
- "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==",
+ "babel-template": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
+ "integrity": "sha512-PCOcLFW7/eazGUKIoqH97sO9A2UYMahsn/yRQ7uOk37iutwjq7ODtcTNF+iFDSHNfkctqsLRjLP7URnOx0T1fg==",
"dev": true,
"requires": {
- "dot-prop": "^4.1.0",
- "graceful-fs": "^4.1.2",
- "make-dir": "^1.0.0",
- "unique-string": "^1.0.0",
- "write-file-atomic": "^2.0.0",
- "xdg-basedir": "^3.0.0"
+ "babel-runtime": "^6.26.0",
+ "babel-traverse": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "lodash": "^4.17.4"
}
},
- "console-browserify": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
- "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
+ "babel-traverse": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha512-iSxeXx7apsjCHe9c7n8VtRXGzI2Bk1rBSOJgCCjfyXb6v1aCqE1KSEpq/8SXuVN8Ka/Rh1WDTF0MDzkvTA4MIA==",
"dev": true,
"requires": {
- "date-now": "^0.1.4"
+ "babel-code-frame": "^6.26.0",
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "debug": "^2.6.8",
+ "globals": "^9.18.0",
+ "invariant": "^2.2.2",
+ "lodash": "^4.17.4"
}
},
- "constants-browserify": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
- "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=",
- "dev": true
- },
- "contains-path": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz",
- "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=",
- "dev": true
- },
- "content-disposition": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
- "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ="
- },
- "content-type": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
- "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
- },
- "cookie": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
- "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s="
- },
- "cookie-parser": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.3.tgz",
- "integrity": "sha1-D+MfoZ0AC5X0qt8fU/3CuKIDuqU=",
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha512-zhe3V/26rCWsEZK8kZN+HaQj5yQ1CilTObixFzKW1UWjqG7618Twz6YEsCnjfg5gBcJh02DrpCkS9h98ZqDY+g==",
+ "dev": true,
"requires": {
- "cookie": "0.3.1",
- "cookie-signature": "1.0.6"
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
}
},
- "cookie-signature": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
- "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
- },
- "copy-descriptor": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
- "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+ "babylon": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
"dev": true
},
- "core-js": {
- "version": "1.2.7",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz",
- "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY="
+ "bail": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz",
+ "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==",
+ "dev": true
},
- "core-util-is": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha512-9Y0g0Q8rmSt+H33DfKv7FOc3v+iRI+o1lbzt8jGcIosYW37IIW/2XVYq5NPdmaD5NQ59Nk26Kl/vZbwW9Fr8vg=="
},
- "cosmiconfig": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz",
- "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==",
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
"dev": true,
"requires": {
- "is-directory": "^0.3.1",
- "js-yaml": "^3.4.3",
- "minimist": "^1.2.0",
- "object-assign": "^4.1.0",
- "os-homedir": "^1.0.1",
- "parse-json": "^2.2.0",
- "require-from-string": "^1.1.0"
+ "cache-base": "^1.0.1",
+ "class-utils": "^0.3.5",
+ "component-emitter": "^1.2.1",
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.1",
+ "mixin-deep": "^1.2.0",
+ "pascalcase": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz",
+ "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.1",
+ "is-data-descriptor": "^1.0.1"
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
+ "dev": true
+ }
}
},
- "create-ecdh": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz",
- "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==",
- "dev": true,
- "requires": {
- "bn.js": "^4.1.0",
- "elliptic": "^6.0.0"
- }
+ "base64-js": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+ "dev": true
},
- "create-error-class": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz",
- "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=",
- "dev": true,
+ "basic-auth": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz",
+ "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==",
"requires": {
- "capture-stack-trace": "^1.0.0"
+ "safe-buffer": "5.1.2"
+ },
+ "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=="
+ }
}
},
- "create-hash": {
- "version": "1.2.0",
- "resolved": "http://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
- "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
- "dev": true,
+ "bcrypt-pbkdf": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+ "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==",
"requires": {
- "cipher-base": "^1.0.1",
- "inherits": "^2.0.1",
- "md5.js": "^1.3.4",
- "ripemd160": "^2.0.1",
- "sha.js": "^2.4.0"
+ "tweetnacl": "^0.14.3"
}
},
- "create-hmac": {
- "version": "1.1.7",
- "resolved": "http://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
- "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
+ "bfj": {
+ "version": "6.1.2",
+ "resolved": "https://registry.npmjs.org/bfj/-/bfj-6.1.2.tgz",
+ "integrity": "sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw==",
"dev": true,
"requires": {
- "cipher-base": "^1.0.3",
- "create-hash": "^1.1.0",
- "inherits": "^2.0.1",
- "ripemd160": "^2.0.0",
- "safe-buffer": "^5.0.1",
- "sha.js": "^2.4.8"
+ "bluebird": "^3.5.5",
+ "check-types": "^8.0.3",
+ "hoopy": "^0.1.4",
+ "tryer": "^1.0.1"
+ },
+ "dependencies": {
+ "bluebird": {
+ "version": "3.7.2",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
+ "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
+ "dev": true
+ }
}
},
- "create-react-class": {
- "version": "15.6.3",
- "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.6.3.tgz",
- "integrity": "sha512-M+/3Q6E6DLO6Yx3OwrWjwHBnvfXXYA7W+dFjt/ZDBemHO1DDZhsalX/NUtnTYclN6GfnBDRh4qRHjcDHmlJBJg==",
- "requires": {
- "fbjs": "^0.8.9",
- "loose-envify": "^1.3.1",
- "object-assign": "^4.1.1"
- }
+ "big-integer": {
+ "version": "1.6.52",
+ "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz",
+ "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg=="
},
- "cross-env": {
- "version": "5.1.3",
- "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.1.3.tgz",
- "integrity": "sha512-UOokgwvDzCT0mqRSLEkJzUhYXB1vK3E5UgDrD41QiXsm9UetcW2rCGHYz/O3p873lMJ1VZbFCF9Izkwh7nYR5A==",
- "dev": true,
- "requires": {
- "cross-spawn": "^5.1.0",
- "is-windows": "^1.0.0"
- }
+ "big.js": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
+ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
+ "dev": true
},
- "cross-spawn": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
- "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
- "dev": true,
+ "binary": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz",
+ "integrity": "sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==",
"requires": {
- "lru-cache": "^4.0.1",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
+ "buffers": "~0.1.1",
+ "chainsaw": "~0.1.0"
}
},
- "crypto-browserify": {
- "version": "3.12.0",
- "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
- "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
- "dev": true,
+ "binary-extensions": {
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
+ "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw=="
+ },
+ "bindings": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
+ "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
+ "optional": true,
"requires": {
- "browserify-cipher": "^1.0.0",
- "browserify-sign": "^4.0.0",
- "create-ecdh": "^4.0.0",
- "create-hash": "^1.1.0",
- "create-hmac": "^1.1.0",
- "diffie-hellman": "^5.0.0",
- "inherits": "^2.0.1",
- "pbkdf2": "^3.0.3",
- "public-encrypt": "^4.0.0",
- "randombytes": "^2.0.0",
- "randomfill": "^1.0.3"
+ "file-uri-to-path": "1.0.0"
}
},
- "crypto-random-string": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz",
- "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=",
+ "bluebird": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.2.tgz",
+ "integrity": "sha512-dhHTWMI7kMx5whMQntl7Vr9C6BvV10lFXDAasnqnrMYhXVCzzk6IO9Fo2L75jXHT07WrOngL1WDXOp+yYS91Yg=="
+ },
+ "bn.js": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz",
+ "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==",
"dev": true
},
- "css-color-function": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/css-color-function/-/css-color-function-1.3.3.tgz",
- "integrity": "sha1-jtJMLAIFBzM5+voAS8jBQfzLKC4=",
+ "body-parser": {
+ "version": "1.18.2",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz",
+ "integrity": "sha512-XIXhPptoLGNcvFyyOzjNXCjDYIbYj4iuXO0VU9lM0f3kYdG0ar5yg7C+pIc3OyoTlZXDu5ObpLTmS2Cgp89oDg==",
+ "requires": {
+ "bytes": "3.0.0",
+ "content-type": "~1.0.4",
+ "debug": "2.6.9",
+ "depd": "~1.1.1",
+ "http-errors": "~1.6.2",
+ "iconv-lite": "0.4.19",
+ "on-finished": "~2.3.0",
+ "qs": "6.5.1",
+ "raw-body": "2.3.2",
+ "type-is": "~1.6.15"
+ }
+ },
+ "boxen": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz",
+ "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==",
"dev": true,
"requires": {
- "balanced-match": "0.1.0",
- "color": "^0.11.0",
- "debug": "^3.1.0",
- "rgb": "~0.1.0"
+ "ansi-align": "^2.0.0",
+ "camelcase": "^4.0.0",
+ "chalk": "^2.0.1",
+ "cli-boxes": "^1.0.0",
+ "string-width": "^2.0.0",
+ "term-size": "^1.2.0",
+ "widest-line": "^2.0.0"
},
"dependencies": {
- "balanced-match": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.1.0.tgz",
- "integrity": "sha1-tQS9BYabOSWd0MXvw12EMXbczEo=",
- "dev": true
- },
- "color": {
- "version": "0.11.4",
- "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz",
- "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=",
- "dev": true,
- "requires": {
- "clone": "^1.0.2",
- "color-convert": "^1.3.0",
- "color-string": "^0.3.0"
- }
- },
- "color-string": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz",
- "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=",
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
"requires": {
- "color-name": "^1.0.0"
+ "color-convert": "^1.9.0"
}
},
- "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"
- }
- }
- }
- },
- "css-color-names": {
- "version": "0.0.4",
- "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz",
- "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=",
- "dev": true
- },
- "css-unit-converter": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.1.tgz",
- "integrity": "sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY=",
- "dev": true
- },
- "cssnano": {
- "version": "3.10.0",
- "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz",
- "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=",
- "dev": true,
- "requires": {
- "autoprefixer": "^6.3.1",
- "decamelize": "^1.1.2",
- "defined": "^1.0.0",
- "has": "^1.0.1",
- "object-assign": "^4.0.1",
- "postcss": "^5.0.14",
- "postcss-calc": "^5.2.0",
- "postcss-colormin": "^2.1.8",
- "postcss-convert-values": "^2.3.4",
- "postcss-discard-comments": "^2.0.4",
- "postcss-discard-duplicates": "^2.0.1",
- "postcss-discard-empty": "^2.0.1",
- "postcss-discard-overridden": "^0.1.1",
- "postcss-discard-unused": "^2.2.1",
- "postcss-filter-plugins": "^2.0.0",
- "postcss-merge-idents": "^2.1.5",
- "postcss-merge-longhand": "^2.0.1",
- "postcss-merge-rules": "^2.0.3",
- "postcss-minify-font-values": "^1.0.2",
- "postcss-minify-gradients": "^1.0.1",
- "postcss-minify-params": "^1.0.4",
- "postcss-minify-selectors": "^2.0.4",
- "postcss-normalize-charset": "^1.1.0",
- "postcss-normalize-url": "^3.0.7",
- "postcss-ordered-values": "^2.1.0",
- "postcss-reduce-idents": "^2.2.2",
- "postcss-reduce-initial": "^1.0.0",
- "postcss-reduce-transforms": "^1.0.3",
- "postcss-svgo": "^2.1.1",
- "postcss-unique-selectors": "^2.0.2",
- "postcss-value-parser": "^3.2.3",
- "postcss-zindex": "^2.0.1"
- },
- "dependencies": {
- "postcss": {
- "version": "5.2.18",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
- "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "camelcase": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+ "integrity": "sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==",
+ "dev": true
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"dev": true,
"requires": {
- "chalk": "^1.1.3",
- "js-base64": "^2.1.9",
- "source-map": "^0.5.6",
- "supports-color": "^3.2.3"
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
}
},
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "dev": true
+ },
"supports-color": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"dev": true,
"requires": {
- "has-flag": "^1.0.0"
+ "has-flag": "^3.0.0"
}
}
}
},
- "csso": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz",
- "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=",
- "dev": true,
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"requires": {
- "clap": "^1.0.9",
- "source-map": "^0.5.3"
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
}
},
- "csv": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/csv/-/csv-5.1.1.tgz",
- "integrity": "sha512-gezB9D+enrh2tLj+vsAD8JyYRMIJdSMpec/Pgbb+7YRj6Q6/D12HLSwjhx+CrirRT4dESjZYXWX1JfqlV4RlTA==",
+ "braces": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
+ "integrity": "sha512-xU7bpz2ytJl1bH9cgIurjpg/n8Gohy9GTw81heDYLJQ4RU60dlyJsa+atVF2pI0yMMvKxI9HkKwjePCj5XI1hw==",
"requires": {
- "csv-generate": "^3.2.0",
- "csv-parse": "^4.3.0",
- "csv-stringify": "^5.1.2",
- "stream-transform": "^1.0.8"
+ "expand-range": "^1.8.1",
+ "preserve": "^0.2.0",
+ "repeat-element": "^1.1.2"
}
},
- "csv-generate": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/csv-generate/-/csv-generate-3.2.3.tgz",
- "integrity": "sha512-IcR3K0Nx+nJAkcU2eAglVR7DuHnxcuhUM2w2cR+aHOW7bZp2S5LyN2HF3zTkp6BV/DjR6ykoKznUm+AjnWcOKg=="
- },
- "csv-parse": {
- "version": "4.4.3",
- "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-4.4.3.tgz",
- "integrity": "sha512-TiLGAy14FPJ7/yB+Gn6RgSxoZLpf6pJTRkGqmCt9t/SGVwubrXjbUWtEw39RlKB6hDHzbdjLyBZaysQ0Ji6p/w=="
- },
- "csv-stringify": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-5.3.0.tgz",
- "integrity": "sha512-VMYPbE8zWz475smwqb9VbX9cj0y4J0PBl59UdcqzLkzXHZZ8dh4Rmbb0ZywsWEtUml4A96Hn7Q5MW9ppVghYzg==",
+ "broadway": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/broadway/-/broadway-0.3.6.tgz",
+ "integrity": "sha512-zivf7KWx8ftTEsXaKfmve6wdSfbDJ6NLXwhwWN4Q1z5+/nsHWALP952KV9jJbJGwjZHEMZABHyuKqEAh3wb2kw==",
"requires": {
- "lodash.get": "~4.4.2"
+ "cliff": "0.1.9",
+ "eventemitter2": "0.4.14",
+ "nconf": "0.6.9",
+ "utile": "0.2.1",
+ "winston": "0.8.0"
+ },
+ "dependencies": {
+ "async": {
+ "version": "0.2.10",
+ "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
+ "integrity": "sha512-eAkdoKxU6/LkKDBzLpT+t6Ff5EtfSF4wx1WfJiPEEV7WNLnDaRXk0oVysiEPm262roaachGexwUv94WhSgN5TQ=="
+ },
+ "cliff": {
+ "version": "0.1.9",
+ "resolved": "https://registry.npmjs.org/cliff/-/cliff-0.1.9.tgz",
+ "integrity": "sha512-2EECQDk23AtYy9WTUDS0UwdlyGJe62IatdR9dOfG/T3+VIoC6/SA5AnYJWGTjXjweTYL360HEGu4DchCeee4Ng==",
+ "requires": {
+ "colors": "0.x.x",
+ "eyes": "0.1.x",
+ "winston": "0.8.x"
+ }
+ },
+ "winston": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/winston/-/winston-0.8.0.tgz",
+ "integrity": "sha512-BoFzn3FEOWlq+1rDbDrbD093E3IRqukS8DYiqtY4vblIFR+5MSGUstAU228MGJa0vodiqm/iU2c8OGw6Iorx1g==",
+ "requires": {
+ "async": "0.2.x",
+ "colors": "0.6.x",
+ "cycle": "1.0.x",
+ "eyes": "0.1.x",
+ "pkginfo": "0.3.x",
+ "stack-trace": "0.0.x"
+ }
+ }
}
},
- "cuint": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz",
- "integrity": "sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs=",
+ "brorand": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
+ "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==",
"dev": true
},
- "currently-unhandled": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
- "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
- "dev": true,
- "requires": {
- "array-find-index": "^1.0.1"
- }
+ "browser-split": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/browser-split/-/browser-split-0.0.0.tgz",
+ "integrity": "sha512-CNXO3AXAS1H/kOGQkPjucm1161/XoF3aVkMfujqwk85XN/D/MkQMvoB81lXyX/2rerZS+hPAYYRR3mAW05awjQ=="
},
- "cycle": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
- "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI="
+ "browser-stdout": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
+ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
+ "dev": true
},
- "cytoscape": {
- "version": "3.2.22",
- "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.2.22.tgz",
- "integrity": "sha512-0eHGQWuE6UTTZ0T3L/p1gYBfAkq/+PAFJWq79PL2qDexPSLnbYi6JivSid31TLIRwxe29MW6TPqZZ6ynMXPK8A==",
+ "browserify-aes": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
+ "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
+ "dev": true,
"requires": {
- "heap": "^0.2.6",
- "lodash.debounce": "^4.0.8"
+ "buffer-xor": "^1.0.3",
+ "cipher-base": "^1.0.0",
+ "create-hash": "^1.1.0",
+ "evp_bytestokey": "^1.0.3",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
}
},
- "cytoscape-cola": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/cytoscape-cola/-/cytoscape-cola-2.3.0.tgz",
- "integrity": "sha512-xblxlCH8JXGLdH6XMUBJY3xBUJuL1rLy8bLMGvqkvoPHSbBfV+/klMWoqwervVKWOmFHPwUdihtxy8stG4RM5g==",
+ "browserify-cipher": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
+ "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
+ "dev": true,
"requires": {
- "webcola": "^3.3.6"
+ "browserify-aes": "^1.0.4",
+ "browserify-des": "^1.0.0",
+ "evp_bytestokey": "^1.0.0"
}
},
- "cytoscape-cose-bilkent": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-3.0.4.tgz",
- "integrity": "sha1-7JzgrS9/dHda5QyrUJW2i31YENI=",
+ "browserify-des": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
+ "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
+ "dev": true,
"requires": {
- "linkedlist-js": "1.3.0"
+ "cipher-base": "^1.0.1",
+ "des.js": "^1.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ },
+ "dependencies": {
+ "safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "dev": true
+ }
}
},
- "cytoscape-cxtmenu": {
- "version": "2.10.3",
- "resolved": "https://registry.npmjs.org/cytoscape-cxtmenu/-/cytoscape-cxtmenu-2.10.3.tgz",
- "integrity": "sha1-0k3O4OCiRNFRxPjYBWUfL2dOgXo="
- },
- "cytoscape-expand-collapse": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/cytoscape-expand-collapse/-/cytoscape-expand-collapse-3.1.2.tgz",
- "integrity": "sha512-yClfo0z2IqEkhlOipUh85k1kJGSgxaSKs4e30KO1mDIXPKOnvL/iQhVXmNt9+KmuIGg9YtNt09P0j3F4BN3WsA=="
- },
- "cytoscape-popper": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/cytoscape-popper/-/cytoscape-popper-1.0.1.tgz",
- "integrity": "sha512-TW1BWgD0z7n9WIur2bcyI82U2hfV4qoZG/jBMFd7+n6FOCLEdfBW69SNtf+jMzy8S8qkbzn8glFaCRvrBsdZxA==",
+ "browserify-rsa": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.1.tgz",
+ "integrity": "sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ==",
+ "dev": true,
"requires": {
- "popper.js": "^1.0.0"
+ "bn.js": "^5.2.1",
+ "randombytes": "^2.1.0",
+ "safe-buffer": "^5.2.1"
+ },
+ "dependencies": {
+ "safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "dev": true
+ }
}
},
- "cytoscape-sbgn-stylesheet": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/cytoscape-sbgn-stylesheet/-/cytoscape-sbgn-stylesheet-3.0.1.tgz",
- "integrity": "sha1-tSFWzZogwHkVM9R+X+oF+rK95z4=",
+ "browserify-sign": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.3.tgz",
+ "integrity": "sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==",
+ "dev": true,
"requires": {
- "extend": "^3.0.0",
- "lodash.defaultsdeep": "^4.6.0",
- "lodash.memoize": "^4.1.2",
- "text-width": "^1.2.0"
+ "bn.js": "^5.2.1",
+ "browserify-rsa": "^4.1.0",
+ "create-hash": "^1.2.0",
+ "create-hmac": "^1.1.7",
+ "elliptic": "^6.5.5",
+ "hash-base": "~3.0",
+ "inherits": "^2.0.4",
+ "parse-asn1": "^5.1.7",
+ "readable-stream": "^2.3.8",
+ "safe-buffer": "^5.2.1"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.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==",
+ "dev": true
+ }
+ }
+ },
+ "safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ },
+ "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==",
+ "dev": true
+ }
+ }
+ }
}
},
- "d": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz",
- "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=",
+ "browserify-zlib": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
+ "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
"dev": true,
"requires": {
- "es5-ext": "^0.10.9"
+ "pako": "~1.0.5"
}
},
- "d3-dispatch": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.5.tgz",
- "integrity": "sha512-vwKx+lAqB1UuCeklr6Jh1bvC4SZgbSqbkGBLClItFBIYH4vqDJCA7qfoy14lXmJdnBOdxndAMxjCbImJYW7e6g=="
- },
- "d3-drag": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-1.2.3.tgz",
- "integrity": "sha512-8S3HWCAg+ilzjJsNtWW1Mutl74Nmzhb9yU6igspilaJzeZVFktmY6oO9xOh5TDk+BM2KrNFjttZNoJJmDnkjkg==",
+ "browserslist": {
+ "version": "2.11.3",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.11.3.tgz",
+ "integrity": "sha512-yWu5cXT7Av6mVwzWc8lMsJMHWn4xyjSuGYi4IozbVTLUOEYPSagUB8kiMDUHA1fS3zjr8nkxkn9jdvug4BBRmA==",
+ "dev": true,
"requires": {
- "d3-dispatch": "1",
- "d3-selection": "1"
+ "caniuse-lite": "^1.0.30000792",
+ "electron-to-chromium": "^1.3.30"
}
},
- "d3-selection": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.3.2.tgz",
- "integrity": "sha512-OoXdv1nZ7h2aKMVg3kaUFbLLK5jXUFAMLD/Tu5JA96mjf8f2a9ZUESGY+C36t8R1WFeWk/e55hy54Ml2I62CRQ=="
- },
- "d3-timer": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.9.tgz",
- "integrity": "sha512-rT34J5HnQUHhcLvhSB9GjCkN0Ddd5Y8nCwDBG2u6wQEeYxT/Lf51fTFFkldeib/sE/J0clIe0pnCfs6g/lRbyg=="
- },
- "dashdash": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
- "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+ "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": {
- "assert-plus": "^1.0.0"
+ "base64-js": "^1.0.2",
+ "ieee754": "^1.1.4",
+ "isarray": "^1.0.0"
}
},
- "date-now": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
- "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=",
+ "buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
"dev": true
},
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "requires": {
- "ms": "2.0.0"
- }
+ "buffer-indexof-polyfill": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz",
+ "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A=="
},
- "decamelize": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
- "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+ "buffer-xor": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
+ "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==",
"dev": true
},
- "decamelize-keys": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz",
- "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=",
- "dev": true,
- "requires": {
- "decamelize": "^1.1.0",
- "map-obj": "^1.0.0"
- }
- },
- "decode-uri-component": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
- "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU="
- },
- "deep-eql": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
- "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==",
- "dev": true,
- "requires": {
- "type-detect": "^4.0.0"
- }
- },
- "deep-equal": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz",
- "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU="
+ "buffers": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz",
+ "integrity": "sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ=="
},
- "deep-extend": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
- "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
+ "builtin-modules": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
+ "integrity": "sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==",
"dev": true
},
- "deep-is": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
- "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "builtin-status-codes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
+ "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==",
"dev": true
},
- "define-properties": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz",
- "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=",
+ "bytes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
+ "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw=="
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
"dev": true,
"requires": {
- "foreach": "^2.0.5",
- "object-keys": "^1.0.8"
+ "collection-visit": "^1.0.0",
+ "component-emitter": "^1.2.1",
+ "get-value": "^2.0.6",
+ "has-value": "^1.0.0",
+ "isobject": "^3.0.1",
+ "set-value": "^2.0.0",
+ "to-object-path": "^0.3.0",
+ "union-value": "^1.0.0",
+ "unset-value": "^1.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
+ "dev": true
+ }
}
},
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "dev": true,
+ "call-bind": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz",
+ "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==",
"requires": {
- "is-descriptor": "^1.0.0"
+ "call-bind-apply-helpers": "^1.0.0",
+ "es-define-property": "^1.0.0",
+ "get-intrinsic": "^1.2.4",
+ "set-function-length": "^1.2.2"
}
},
- "defined": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
- "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=",
- "dev": true
- },
- "del": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz",
- "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=",
- "dev": true,
+ "call-bind-apply-helpers": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
+ "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
"requires": {
- "globby": "^5.0.0",
- "is-path-cwd": "^1.0.0",
- "is-path-in-cwd": "^1.0.0",
- "object-assign": "^4.0.1",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0",
- "rimraf": "^2.2.8"
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2"
},
"dependencies": {
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
- "dev": true
+ "function-bind": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="
}
}
},
- "delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
- },
- "depd": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
- "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
- },
- "dependency-graph": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.5.2.tgz",
- "integrity": "sha512-fuF8ISen2Rk75wQ4tWHcfJ/IV1cmPMFE+wth10tAnj/JkpqMJzNW5oKpVOCAkpdfYD+NwtA3kL3nOeyprxPG2A==",
- "dev": true
- },
- "des.js": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz",
- "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=",
- "dev": true,
+ "call-bound": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
+ "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
"requires": {
- "inherits": "^2.0.1",
- "minimalistic-assert": "^1.0.0"
+ "call-bind-apply-helpers": "^1.0.2",
+ "get-intrinsic": "^1.3.0"
}
},
- "destroy": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
- "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
+ "call-me-maybe": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz",
+ "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ=="
},
- "detect-indent": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
- "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "caller": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/caller/-/caller-1.1.0.tgz",
+ "integrity": "sha512-n+21IZC3j06YpCWaxmUy5AnVqhmCIM2bQtqQyy00HJlmStRt6kwDX5F9Z97pqwAB+G/tgSz6q/kUBbNyQzIubw=="
+ },
+ "caller-path": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
+ "integrity": "sha512-UJiE1otjXPF5/x+T3zTnSFiTOEmJoGTD9HmBoxnCUwho61a2eSNn/VwtwuIBDAo2SEOv1AJ7ARI5gCmohFLu/g==",
"dev": true,
"requires": {
- "repeating": "^2.0.0"
+ "callsites": "^0.2.0"
}
},
- "dice-coefficient": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/dice-coefficient/-/dice-coefficient-1.0.2.tgz",
- "integrity": "sha1-mFyoYy3UzKzkWIfpLCR8+/GruMI=",
- "requires": {
- "n-gram": "^1.0.0"
- }
+ "callsites": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz",
+ "integrity": "sha512-Zv4Dns9IbXXmPkgRRUjAaJQgfN4xX5p6+RQFhWUqscdvvK2xK/ZL8b3IXIJsj+4sD+f24NwnWy2BY8AJ82JB0A==",
+ "dev": true
},
- "diff": {
- "version": "3.5.0",
- "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
- "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
+ "camelcase": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+ "integrity": "sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==",
"dev": true
},
- "diffie-hellman": {
- "version": "5.0.3",
- "resolved": "http://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
- "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
+ "camelcase-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
+ "integrity": "sha512-bA/Z/DERHKqoEOrp+qeGKw1QlvEQkGZSc0XaY6VnTxZr+Kv1G5zFwttpjv8qxZ/sBPT4nthwZaAcsAZTJlSKXQ==",
"dev": true,
"requires": {
- "bn.js": "^4.1.0",
- "miller-rabin": "^4.0.0",
- "randombytes": "^2.0.0"
+ "camelcase": "^2.0.0",
+ "map-obj": "^1.0.0"
}
},
- "dir-glob": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz",
- "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==",
+ "caniuse-api": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz",
+ "integrity": "sha512-SBTl70K0PkDUIebbkXrxWqZlHNs0wRgRD6QZ8guctShjbh63gEPfF+Wj0Yw+75f5Y8tSzqAI/NcisYv/cCah2Q==",
"dev": true,
"requires": {
- "arrify": "^1.0.1",
- "path-type": "^3.0.0"
+ "browserslist": "^1.3.6",
+ "caniuse-db": "^1.0.30000529",
+ "lodash.memoize": "^4.1.2",
+ "lodash.uniq": "^4.5.0"
},
"dependencies": {
- "path-type": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
- "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
+ "browserslist": {
+ "version": "1.7.7",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz",
+ "integrity": "sha512-qHJblDE2bXVRYzuDetv/wAeHOJyO97+9wxC1cdCtyzgNuSozOyRCiiLaCR1f71AN66lQdVVBipWm63V+a7bPOw==",
"dev": true,
"requires": {
- "pify": "^3.0.0"
+ "caniuse-db": "^1.0.30000639",
+ "electron-to-chromium": "^1.2.7"
}
}
}
},
- "director": {
- "version": "1.2.7",
- "resolved": "https://registry.npmjs.org/director/-/director-1.2.7.tgz",
- "integrity": "sha1-v9N0EHX9f7GlsuE2WMX0vsd3NvM="
- },
- "doctrine": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
- "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
- "requires": {
- "esutils": "^2.0.2"
- }
- },
- "dom-serializer": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz",
- "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=",
- "dev": true,
- "requires": {
- "domelementtype": "~1.1.1",
- "entities": "~1.1.1"
- },
- "dependencies": {
- "domelementtype": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz",
- "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=",
- "dev": true
- }
- }
+ "caniuse-db": {
+ "version": "1.0.30001707",
+ "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30001707.tgz",
+ "integrity": "sha512-qAh4lbpYliRSGxdgUGeLYbKYu7JUikmfHp1N4GmeqMNAfXU7RssamxgR7vHNNOEP6a+devOkPS7FPrYIH+ubAA==",
+ "dev": true
},
- "domain-browser": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
- "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==",
+ "caniuse-lite": {
+ "version": "1.0.30001707",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001707.tgz",
+ "integrity": "sha512-3qtRjw/HQSMlDWf+X79N206fepf4SOOU6SQLMaq/0KkZLmSjPxAkBOQQ+FxbHKfHmYLZFfdWsO3KA90ceHPSnw==",
"dev": true
},
- "domelementtype": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz",
- "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=",
+ "capture-stack-trace": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.2.tgz",
+ "integrity": "sha512-X/WM2UQs6VMHUtjUDnZTRI+i1crWteJySFzr9UpGoQa4WQffXVTTXuekjl7TjZRlcF2XfjgITT0HxZ9RnxeT0w==",
"dev": true
},
- "domhandler": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.1.tgz",
- "integrity": "sha1-iS5HAAqZvlW783dP/qBWHYh5wlk=",
- "dev": true,
- "requires": {
- "domelementtype": "1"
- }
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="
},
- "domutils": {
- "version": "1.6.2",
- "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.6.2.tgz",
- "integrity": "sha1-GVjMC0yUJuntNn+xyOhUiRsPo/8=",
+ "ccount": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz",
+ "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==",
+ "dev": true
+ },
+ "center-align": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
+ "integrity": "sha512-Baz3aNe2gd2LP2qk5U+sDk/m4oSuwSDcBfayTCTBoWpfIGO5XFxPmjILQII4NGiZjD6DoDI6kf7gKaxkf7s3VQ==",
"dev": true,
"requires": {
- "dom-serializer": "0",
- "domelementtype": "1"
+ "align-text": "^0.1.3",
+ "lazy-cache": "^1.0.3"
}
},
- "dot-prop": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz",
- "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==",
+ "chai": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chai/-/chai-4.1.2.tgz",
+ "integrity": "sha512-YTHf80rJ8M5/cJoFKEV1y3PnexbGs0vSHjouRRU8gLM05Nc3Mqq9zor/P4SCqB/sgvKRLvya7wHLC1XQ9pTjgQ==",
"dev": true,
"requires": {
- "is-obj": "^1.0.0"
+ "assertion-error": "^1.0.1",
+ "check-error": "^1.0.1",
+ "deep-eql": "^3.0.0",
+ "get-func-name": "^2.0.0",
+ "pathval": "^1.0.0",
+ "type-detect": "^4.0.0"
}
},
- "duplexer": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
- "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=",
- "dev": true
- },
- "duplexer2": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
- "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=",
+ "chai-as-promised": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz",
+ "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==",
"requires": {
- "readable-stream": "^2.0.2"
+ "check-error": "^1.0.2"
}
},
- "duplexer3": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
- "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=",
- "dev": true
- },
- "ecc-jsbn": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
- "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
+ "chainsaw": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz",
+ "integrity": "sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==",
"requires": {
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.1.0"
+ "traverse": ">=0.3.0 <0.4"
}
},
- "echo-cli": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/echo-cli/-/echo-cli-1.0.8.tgz",
- "integrity": "sha1-cKRbh/ltsItFQ8mJW/KuguaRCYg=",
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==",
"dev": true,
"requires": {
- "meow": "^3.7.0",
- "unescape-js": "^1.0.3"
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
}
},
- "ee-first": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
- "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
+ "character-entities": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz",
+ "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==",
+ "dev": true
},
- "ejs": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.1.tgz",
- "integrity": "sha512-kS/gEPzZs3Y1rRsbGX4UOSjtP/CeJP0CxSNZHYxGfVM/VgLcv0ZqM7C45YyTj2DI2g7+P9Dd24C+IMIg6D0nYQ==",
+ "character-entities-html4": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.4.tgz",
+ "integrity": "sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g==",
"dev": true
},
- "electron-to-chromium": {
- "version": "1.3.32",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.32.tgz",
- "integrity": "sha1-EdBoTAhA4APEvoko+KxfNdvCtOY=",
+ "character-entities-legacy": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz",
+ "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==",
"dev": true
},
- "elliptic": {
- "version": "6.4.1",
- "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz",
- "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==",
- "dev": true,
- "requires": {
- "bn.js": "^4.4.0",
- "brorand": "^1.0.1",
- "hash.js": "^1.0.0",
- "hmac-drbg": "^1.0.0",
- "inherits": "^2.0.1",
- "minimalistic-assert": "^1.0.0",
- "minimalistic-crypto-utils": "^1.0.0"
- }
+ "character-reference-invalid": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz",
+ "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==",
+ "dev": true
},
- "emojis-list": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
- "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=",
+ "chardet": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz",
+ "integrity": "sha512-j/Toj7f1z98Hh2cYo2BVr85EpIRWqUi7rtRSGxh/cqUjqrnJe9l9UE7IUGd2vQ2p+kSHLkSzObQPZPLUC6TQwg==",
"dev": true
},
- "encodeurl": {
+ "check-error": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
- "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
+ "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
+ "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA=="
},
- "encoding": {
- "version": "0.1.12",
- "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz",
- "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=",
- "requires": {
- "iconv-lite": "~0.4.13"
- }
+ "check-types": {
+ "version": "8.0.3",
+ "resolved": "https://registry.npmjs.org/check-types/-/check-types-8.0.3.tgz",
+ "integrity": "sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ==",
+ "dev": true
},
- "enhanced-resolve": {
- "version": "3.4.1",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz",
- "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=",
- "dev": true,
+ "chokidar": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz",
+ "integrity": "sha512-mk8fAWcRUOxY7btlLtitj3A45jOwSAxH4tOFOoEGbVsl6cL6pPMWUy7dwZ/canfj3QEdP6FHSnf/l1c6/WkzVg==",
"requires": {
- "graceful-fs": "^4.1.2",
- "memory-fs": "^0.4.0",
- "object-assign": "^4.0.1",
- "tapable": "^0.2.7"
+ "anymatch": "^1.3.0",
+ "async-each": "^1.0.0",
+ "fsevents": "^1.0.0",
+ "glob-parent": "^2.0.0",
+ "inherits": "^2.0.1",
+ "is-binary-path": "^1.0.0",
+ "is-glob": "^2.0.0",
+ "path-is-absolute": "^1.0.0",
+ "readdirp": "^2.0.0"
}
},
- "entities": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz",
- "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=",
+ "ci-info": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz",
+ "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==",
"dev": true
},
- "errno": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
- "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==",
- "dev": true,
- "requires": {
- "prr": "~1.0.1"
- }
- },
- "error-ex": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz",
- "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=",
+ "cipher-base": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.6.tgz",
+ "integrity": "sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw==",
"dev": true,
"requires": {
- "is-arrayish": "^0.2.1"
+ "inherits": "^2.0.4",
+ "safe-buffer": "^5.2.1"
},
"dependencies": {
- "is-arrayish": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
"dev": true
}
}
},
- "es-abstract": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.10.0.tgz",
- "integrity": "sha512-/uh/DhdqIOSkAWifU+8nG78vlQxdLckUdI/sPgy0VhuXi2qJ7T8czBmqIYtLQVpCIFYafChnsRsB5pyb1JdmCQ==",
+ "circular-json": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz",
+ "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==",
+ "dev": true
+ },
+ "clap": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz",
+ "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==",
"dev": true,
"requires": {
- "es-to-primitive": "^1.1.1",
- "function-bind": "^1.1.1",
- "has": "^1.0.1",
- "is-callable": "^1.1.3",
- "is-regex": "^1.0.4"
+ "chalk": "^1.1.3"
}
},
- "es-to-primitive": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz",
- "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=",
- "dev": true,
+ "class-list": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/class-list/-/class-list-0.1.1.tgz",
+ "integrity": "sha512-zqR0uW+VsLtyQhixBhkdQ+z6B8+Y8HTh28kdSVjJ4zTTKM7Xz2asAQSya9VI6m/34F6N6Ktm0mrchKB+E5a8Xw==",
"requires": {
- "is-callable": "^1.1.1",
- "is-date-object": "^1.0.1",
- "is-symbol": "^1.0.1"
+ "indexof": "0.0.1"
}
},
- "es5-ext": {
- "version": "0.10.46",
- "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.46.tgz",
- "integrity": "sha512-24XxRvJXNFwEMpJb3nOkiRJKRoupmjYmOPVlI65Qy2SrtxwOTB+g6ODjBKOtwEHbYrhWRty9xxOWLNdClT2djw==",
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
"dev": true,
"requires": {
- "es6-iterator": "~2.0.3",
- "es6-symbol": "~3.1.1",
- "next-tick": "1"
+ "arr-union": "^3.1.0",
+ "define-property": "^0.2.5",
+ "isobject": "^3.0.0",
+ "static-extend": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
+ "dev": true
+ }
}
},
- "es6-iterator": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
- "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
+ "classnames": {
+ "version": "2.2.5",
+ "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.5.tgz",
+ "integrity": "sha512-DTt3GhOUDKhh4ONwIJW4lmhyotQmV2LjNlGK/J2hkwUcqcbKkCLAdJPtxQnxnlc7SR3f1CEXCyMmc7WLUsWbNA=="
+ },
+ "cli-boxes": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz",
+ "integrity": "sha512-3Fo5wu8Ytle8q9iCzS4D2MWVL2X7JVWRiS1BnXbTFDhS9c/REkM9vd1AmabsoZoY5/dGi5TT9iKL8Kb6DeBRQg==",
+ "dev": true
+ },
+ "cli-cursor": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+ "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==",
"dev": true,
"requires": {
- "d": "1",
- "es5-ext": "^0.10.35",
- "es6-symbol": "^3.1.1"
+ "restore-cursor": "^2.0.0"
}
},
- "es6-map": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz",
- "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=",
+ "cli-spinners": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.3.1.tgz",
+ "integrity": "sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==",
+ "dev": true
+ },
+ "cli-width": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz",
+ "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==",
+ "dev": true
+ },
+ "cliff": {
+ "version": "0.1.10",
+ "resolved": "https://registry.npmjs.org/cliff/-/cliff-0.1.10.tgz",
+ "integrity": "sha512-roZWcC2Cxo/kKjRXw7YUpVNtxJccbvcl7VzTjUYgLQk6Ot0R8bm2netbhSZYWWNrKlOO/7HD6GXHl8dtzE6SiQ==",
+ "requires": {
+ "colors": "~1.0.3",
+ "eyes": "~0.1.8",
+ "winston": "0.8.x"
+ },
+ "dependencies": {
+ "async": {
+ "version": "0.2.10",
+ "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
+ "integrity": "sha512-eAkdoKxU6/LkKDBzLpT+t6Ff5EtfSF4wx1WfJiPEEV7WNLnDaRXk0oVysiEPm262roaachGexwUv94WhSgN5TQ=="
+ },
+ "colors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw=="
+ },
+ "winston": {
+ "version": "0.8.3",
+ "resolved": "https://registry.npmjs.org/winston/-/winston-0.8.3.tgz",
+ "integrity": "sha512-fPoamsHq8leJ62D1M9V/f15mjQ1UHe4+7j1wpAT3fqgA5JqhJkk4aIfPEjfMTI9x6ZTjaLOpMAjluLtmgO5b6g==",
+ "requires": {
+ "async": "0.2.x",
+ "colors": "0.6.x",
+ "cycle": "1.0.x",
+ "eyes": "0.1.x",
+ "isstream": "0.1.x",
+ "pkginfo": "0.3.x",
+ "stack-trace": "0.0.x"
+ },
+ "dependencies": {
+ "colors": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz",
+ "integrity": "sha512-OsSVtHK8Ir8r3+Fxw/b4jS1ZLPXkV6ZxDRJQzeD7qo0SqMXWrHDM71DgYzPMHY8SFJ0Ao+nNU2p1MmwdzKqPrw=="
+ }
+ }
+ }
+ }
+ },
+ "cliui": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
+ "integrity": "sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==",
"dev": true,
"requires": {
- "d": "1",
- "es5-ext": "~0.10.14",
- "es6-iterator": "~2.0.1",
- "es6-set": "~0.1.5",
- "es6-symbol": "~3.1.1",
- "event-emitter": "~0.3.5"
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wrap-ansi": "^2.0.0"
+ },
+ "dependencies": {
+ "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": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==",
+ "dev": 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": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==",
+ "dev": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ }
}
},
- "es6-promise": {
- "version": "4.2.6",
- "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.6.tgz",
- "integrity": "sha512-aRVgGdnmW2OiySVPUC9e6m+plolMAJKjZnQlCwNSuK5yQ0JN61DZSO1X1Ufd1foqWRAlig0rhduTCHe7sVtK5Q=="
+ "clone": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz",
+ "integrity": "sha512-q59awR9d5z/jaFidcIvRUxOw4NxX8o7y6zAxqRL7Ym1Eqe4j5qBMRbGv8A1tsuRNxNrh6mxCVWkcmukICpd9XA=="
},
- "es6-set": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz",
- "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=",
+ "clone-regexp": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-1.0.1.tgz",
+ "integrity": "sha512-Fcij9IwRW27XedRIJnSOEupS7RVcXtObJXbcUOX93UCLqqOdRpkvzKywOOSizmEK/Is3S/RHX9dLdfo6R1Q1mw==",
"dev": true,
"requires": {
- "d": "1",
- "es5-ext": "~0.10.14",
- "es6-iterator": "~2.0.1",
- "es6-symbol": "3.1.1",
- "event-emitter": "~0.3.5"
+ "is-regexp": "^1.0.0",
+ "is-supported-regexp-flag": "^1.0.0"
}
},
- "es6-symbol": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz",
- "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=",
+ "co": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==",
+ "dev": true
+ },
+ "coa": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz",
+ "integrity": "sha512-KAGck/eNAmCL0dcT3BiuYwLbExK6lduR8DxM3C1TyDzaXhZHyZ8ooX5I5+na2e3dPFuibfxrGdorr0/Lr7RYCQ==",
"dev": true,
"requires": {
- "d": "1",
- "es5-ext": "~0.10.14"
+ "q": "^1.1.2"
}
},
- "es6-weak-map": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz",
- "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=",
+ "code-point-at": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+ "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==",
+ "dev": true
+ },
+ "collapse-white-space": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz",
+ "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==",
+ "dev": true
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==",
"dev": true,
"requires": {
- "d": "1",
- "es5-ext": "^0.10.14",
- "es6-iterator": "^2.0.1",
- "es6-symbol": "^3.1.1"
+ "map-visit": "^1.0.0",
+ "object-visit": "^1.0.0"
}
},
- "escape-html": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
- "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
+ "color": {
+ "version": "0.11.4",
+ "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz",
+ "integrity": "sha512-Ajpjd8asqZ6EdxQeqGzU5WBhhTfJ/0cA4Wlbre7e5vXfmDSmda7Ov6jeKoru+b0vHcb1CqvuroTHp5zIWzhVMA==",
+ "dev": true,
+ "requires": {
+ "clone": "^1.0.2",
+ "color-convert": "^1.3.0",
+ "color-string": "^0.3.0"
+ }
},
- "escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
"dev": true
},
- "escope": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz",
- "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=",
+ "color-string": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz",
+ "integrity": "sha512-sz29j1bmSDfoAxKIEU6zwoIZXN6BrFbAMIhfYCNyiZXBDuU/aiHlN84lp/xDzL2ubyFhLDobHIlU1X70XRrMDA==",
"dev": true,
"requires": {
- "es6-map": "^0.1.3",
- "es6-weak-map": "^2.0.1",
- "esrecurse": "^4.1.0",
- "estraverse": "^4.1.1"
+ "color-name": "^1.0.0"
}
},
- "eslint": {
- "version": "4.17.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.17.0.tgz",
- "integrity": "sha512-AyxBUCANU/o/xC0ijGMKavo5Ls3oK6xykiOITlMdjFjrKOsqLrA7Nf5cnrDgcKrHzBirclAZt63XO7YZlVUPwA==",
+ "colormin": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz",
+ "integrity": "sha512-XSEQUUQUR/lXqGyddiNH3XYFUPYlYr1vXy9rTFMsSOw+J7Q6EQkdlQIrTlYn4TccpsOaUE1PYQNjBn20gwCdgQ==",
"dev": true,
"requires": {
- "ajv": "^5.3.0",
- "babel-code-frame": "^6.22.0",
- "chalk": "^2.1.0",
- "concat-stream": "^1.6.0",
- "cross-spawn": "^5.1.0",
- "debug": "^3.1.0",
- "doctrine": "^2.1.0",
- "eslint-scope": "^3.7.1",
- "eslint-visitor-keys": "^1.0.0",
- "espree": "^3.5.2",
- "esquery": "^1.0.0",
- "esutils": "^2.0.2",
- "file-entry-cache": "^2.0.0",
- "functional-red-black-tree": "^1.0.1",
- "glob": "^7.1.2",
- "globals": "^11.0.1",
- "ignore": "^3.3.3",
- "imurmurhash": "^0.1.4",
- "inquirer": "^3.0.6",
- "is-resolvable": "^1.0.0",
- "js-yaml": "^3.9.1",
- "json-stable-stringify-without-jsonify": "^1.0.1",
- "levn": "^0.3.0",
- "lodash": "^4.17.4",
- "minimatch": "^3.0.2",
- "mkdirp": "^0.5.1",
- "natural-compare": "^1.4.0",
- "optionator": "^0.8.2",
- "path-is-inside": "^1.0.2",
- "pluralize": "^7.0.0",
- "progress": "^2.0.0",
- "require-uncached": "^1.0.3",
- "semver": "^5.3.0",
- "strip-ansi": "^4.0.0",
- "strip-json-comments": "~2.0.1",
- "table": "^4.0.1",
- "text-table": "~0.2.0"
+ "color": "^0.11.0",
+ "css-color-names": "0.0.4",
+ "has": "^1.0.1"
+ }
+ },
+ "colors": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz",
+ "integrity": "sha512-OsSVtHK8Ir8r3+Fxw/b4jS1ZLPXkV6ZxDRJQzeD7qo0SqMXWrHDM71DgYzPMHY8SFJ0Ao+nNU2p1MmwdzKqPrw=="
+ },
+ "combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "requires": {
+ "delayed-stream": "~1.0.0"
+ }
+ },
+ "commander": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz",
+ "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==",
+ "dev": true
+ },
+ "commondir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+ "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==",
+ "dev": true
+ },
+ "component-emitter": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz",
+ "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==",
+ "dev": true
+ },
+ "concat": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/concat/-/concat-1.0.3.tgz",
+ "integrity": "sha512-f/ZaH1aLe64qHgTILdldbvyfGiGF4uzeo9IuXUloIOLQzFmIPloy9QbZadNsuVv0j5qbKQvQb/H/UYf2UsKTpw==",
+ "requires": {
+ "commander": "^2.9.0"
},
"dependencies": {
- "ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
- "dev": true
- },
- "ansi-styles": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
- "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
- "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.1.0",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^4.0.0"
- }
- },
- "concat-stream": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz",
- "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=",
- "dev": true,
- "requires": {
- "inherits": "^2.0.3",
- "readable-stream": "^2.2.2",
- "typedarray": "^0.0.6"
- }
- },
- "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"
- }
- },
- "esprima": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz",
- "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==",
- "dev": true
- },
- "globals": {
- "version": "11.3.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-11.3.0.tgz",
- "integrity": "sha512-kkpcKNlmQan9Z5ZmgqKH/SMbSmjxQ7QjyNqfXVc8VJcoBV2UEg+sxQD15GQofGRh2hfpwUb70VC31DR7Rq5Hdw==",
- "dev": true
- },
- "has-flag": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
- "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
- "dev": true
- },
- "js-yaml": {
- "version": "3.10.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz",
- "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==",
- "dev": true,
- "requires": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
- }
- },
- "minimist": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
- "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
- "dev": true
- },
- "mkdirp": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
- "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
- "dev": true,
- "requires": {
- "minimist": "0.0.8"
- }
- },
- "progress": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz",
- "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=",
- "dev": true
- },
- "strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
- "dev": true,
- "requires": {
- "ansi-regex": "^3.0.0"
- }
- },
- "supports-color": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
- "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
- "dev": true,
- "requires": {
- "has-flag": "^2.0.0"
- }
+ "commander": {
+ "version": "2.20.3",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
}
}
},
- "eslint-config-standard": {
- "version": "10.2.1",
- "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-10.2.1.tgz",
- "integrity": "sha1-wGHk0GbzedwXzVYsZOgZtN1FRZE=",
- "dev": true
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
},
- "eslint-import-resolver-node": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz",
- "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==",
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
"dev": true,
"requires": {
- "debug": "^2.6.9",
- "resolve": "^1.5.0"
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
}
},
- "eslint-module-utils": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.1.1.tgz",
- "integrity": "sha512-jDI/X5l/6D1rRD/3T43q8Qgbls2nq5km5KSqiwlyUbGo5+04fXhMKdCPhjwbqAa6HXWaMxj8Q4hQDIh7IadJQw==",
+ "configstore": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.5.tgz",
+ "integrity": "sha512-nlOhI4+fdzoK5xmJ+NY+1gZK56bwEaWZr8fYuXohZ9Vkc1o3a4T/R3M+yE/w7x/ZVJ1zF8c+oaOvF0dztdUgmA==",
"dev": true,
"requires": {
- "debug": "^2.6.8",
- "pkg-dir": "^1.0.0"
- },
- "dependencies": {
- "find-up": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
- "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
- "dev": true,
- "requires": {
- "path-exists": "^2.0.0",
- "pinkie-promise": "^2.0.0"
- }
- },
- "path-exists": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
- "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
- "dev": true,
- "requires": {
- "pinkie-promise": "^2.0.0"
- }
- },
- "pkg-dir": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz",
- "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=",
- "dev": true,
- "requires": {
- "find-up": "^1.0.0"
- }
- }
+ "dot-prop": "^4.2.1",
+ "graceful-fs": "^4.1.2",
+ "make-dir": "^1.0.0",
+ "unique-string": "^1.0.0",
+ "write-file-atomic": "^2.0.0",
+ "xdg-basedir": "^3.0.0"
}
},
- "eslint-plugin-import": {
- "version": "2.8.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.8.0.tgz",
- "integrity": "sha512-Rf7dfKJxZ16QuTgVv1OYNxkZcsu/hULFnC+e+w0Gzi6jMC3guQoWQgxYxc54IDRinlb6/0v5z/PxxIKmVctN+g==",
+ "console-browserify": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz",
+ "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==",
+ "dev": true
+ },
+ "constants-browserify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
+ "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==",
+ "dev": true
+ },
+ "contains-path": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz",
+ "integrity": "sha512-OKZnPGeMQy2RPaUIBPFFd71iNf4791H12MCRuVQDnzGRwCYNYmTDy5pdafo2SLAcEMKzTOQnLWG4QdcjeJUMEg==",
+ "dev": true
+ },
+ "content-disposition": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
+ "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA=="
+ },
+ "content-type": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
+ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
+ },
+ "convert-source-map": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
+ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
+ "dev": true
+ },
+ "cookie": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
+ "integrity": "sha512-+IJOX0OqlHCszo2mBUq+SrEbCj6w7Kpffqx60zYbPTFaO4+yYgRjHwcZNpWvaTylDHaV7PPmBHzSecZiMhtPgw=="
+ },
+ "cookie-parser": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.3.tgz",
+ "integrity": "sha512-EZyO2G+zVFsMjU8jDtxs2iLS1DmryYNjC0s4/IHtsS6pWPUJSr0kt0UPOctRZosebPHYekb7bNcIBt4YW0S9bg==",
+ "requires": {
+ "cookie": "0.3.1",
+ "cookie-signature": "1.0.6"
+ }
+ },
+ "cookie-signature": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==",
+ "dev": true
+ },
+ "core-js": {
+ "version": "2.6.12",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz",
+ "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ=="
+ },
+ "core-js-compat": {
+ "version": "3.41.0",
+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.41.0.tgz",
+ "integrity": "sha512-RFsU9LySVue9RTwdDVX/T0e2Y6jRYWXERKElIjpuEOEnxaXffI0X7RUwVzfYLfzuLXSNJDYoRYUAmRUcyln20A==",
"dev": true,
"requires": {
- "builtin-modules": "^1.1.1",
- "contains-path": "^0.1.0",
- "debug": "^2.6.8",
- "doctrine": "1.5.0",
- "eslint-import-resolver-node": "^0.3.1",
- "eslint-module-utils": "^2.1.1",
- "has": "^1.0.1",
- "lodash.cond": "^4.3.0",
- "minimatch": "^3.0.3",
- "read-pkg-up": "^2.0.0"
+ "browserslist": "^4.24.4"
},
"dependencies": {
- "doctrine": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz",
- "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=",
- "dev": true,
- "requires": {
- "esutils": "^2.0.2",
- "isarray": "^1.0.0"
- }
- },
- "load-json-file": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
- "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^2.2.0",
- "pify": "^2.0.0",
- "strip-bom": "^3.0.0"
- }
- },
- "path-type": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
- "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
- "dev": true,
- "requires": {
- "pify": "^2.0.0"
- }
- },
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
- "dev": true
- },
- "read-pkg": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
- "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
- "dev": true,
- "requires": {
- "load-json-file": "^2.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^2.0.0"
- }
- },
- "read-pkg-up": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
- "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
+ "browserslist": {
+ "version": "4.24.4",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz",
+ "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==",
"dev": true,
"requires": {
- "find-up": "^2.0.0",
- "read-pkg": "^2.0.0"
+ "caniuse-lite": "^1.0.30001688",
+ "electron-to-chromium": "^1.5.73",
+ "node-releases": "^2.0.19",
+ "update-browserslist-db": "^1.1.1"
}
- },
- "strip-bom": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
- "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
- "dev": true
}
}
},
- "eslint-plugin-node": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-5.2.1.tgz",
- "integrity": "sha512-xhPXrh0Vl/b7870uEbaumb2Q+LxaEcOQ3kS1jtIXanBAwpMre1l5q/l2l/hESYJGEFKuI78bp6Uw50hlpr7B+g==",
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ=="
+ },
+ "cosmiconfig": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz",
+ "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==",
"dev": true,
"requires": {
- "ignore": "^3.3.6",
- "minimatch": "^3.0.4",
- "resolve": "^1.3.3",
- "semver": "5.3.0"
+ "is-directory": "^0.3.1",
+ "js-yaml": "^3.4.3",
+ "minimist": "^1.2.0",
+ "object-assign": "^4.1.0",
+ "os-homedir": "^1.0.1",
+ "parse-json": "^2.2.0",
+ "require-from-string": "^1.1.0"
+ }
+ },
+ "create-ecdh": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz",
+ "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "elliptic": "^6.5.3"
},
"dependencies": {
- "semver": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
- "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=",
+ "bn.js": {
+ "version": "4.12.1",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz",
+ "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==",
"dev": true
}
}
},
- "eslint-plugin-promise": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-3.6.0.tgz",
- "integrity": "sha512-YQzM6TLTlApAr7Li8vWKR+K3WghjwKcYzY0d2roWap4SLK+kzuagJX/leTetIDWsFcTFnKNJXWupDCD6aZkP2Q==",
- "dev": true
+ "create-error-class": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz",
+ "integrity": "sha512-gYTKKexFO3kh200H1Nit76sRwRtOY32vQd3jpAQKpLtZqyNsSQNfI4N7o3eP2wUjV35pTWKRYqFUDBvUha/Pkw==",
+ "dev": true,
+ "requires": {
+ "capture-stack-trace": "^1.0.0"
+ }
},
- "eslint-plugin-standard": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-3.0.1.tgz",
- "integrity": "sha1-NNDJFbRe3G8BA5PH7vOCOwhWXPI=",
- "dev": true
+ "create-hash": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
+ "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
+ "dev": true,
+ "requires": {
+ "cipher-base": "^1.0.1",
+ "inherits": "^2.0.1",
+ "md5.js": "^1.3.4",
+ "ripemd160": "^2.0.1",
+ "sha.js": "^2.4.0"
+ }
},
- "eslint-scope": {
- "version": "3.7.1",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz",
- "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=",
+ "create-hmac": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
+ "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
"dev": true,
"requires": {
- "esrecurse": "^4.1.0",
- "estraverse": "^4.1.1"
- },
- "dependencies": {
- "estraverse": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
- "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
- "dev": true
- }
+ "cipher-base": "^1.0.3",
+ "create-hash": "^1.1.0",
+ "inherits": "^2.0.1",
+ "ripemd160": "^2.0.0",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
}
},
- "eslint-visitor-keys": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz",
- "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==",
- "dev": true
+ "create-react-class": {
+ "version": "15.7.0",
+ "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.7.0.tgz",
+ "integrity": "sha512-QZv4sFWG9S5RUvkTYWbflxeZX+JG7Cz0Tn33rQBJ+WFQTqTfUTjMjiv9tnfXazjsO5r0KhPs+AqCjyrQX6h2ng==",
+ "requires": {
+ "loose-envify": "^1.3.1",
+ "object-assign": "^4.1.1"
+ }
},
- "espree": {
- "version": "3.5.3",
- "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.3.tgz",
- "integrity": "sha512-Zy3tAJDORxQZLl2baguiRU1syPERAIg0L+JB2MWorORgTu/CplzvxS9WWA7Xh4+Q+eOQihNs/1o1Xep8cvCxWQ==",
+ "cross-env": {
+ "version": "5.1.3",
+ "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.1.3.tgz",
+ "integrity": "sha512-UOokgwvDzCT0mqRSLEkJzUhYXB1vK3E5UgDrD41QiXsm9UetcW2rCGHYz/O3p873lMJ1VZbFCF9Izkwh7nYR5A==",
"dev": true,
"requires": {
- "acorn": "^5.4.0",
- "acorn-jsx": "^3.0.0"
- },
- "dependencies": {
- "acorn": {
- "version": "5.4.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.4.1.tgz",
- "integrity": "sha512-XLmq3H/BVvW6/GbxKryGxWORz1ebilSsUDlyC27bXhWGWAZWkGwS6FLHjOlwFXNFoWFQEO/Df4u0YYd0K3BQgQ==",
- "dev": true
- }
+ "cross-spawn": "^5.1.0",
+ "is-windows": "^1.0.0"
}
},
- "esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
- },
- "esquery": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz",
- "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=",
+ "cross-spawn": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+ "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==",
"dev": true,
"requires": {
- "estraverse": "^4.0.0"
- },
- "dependencies": {
- "estraverse": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
- "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
- "dev": true
- }
+ "lru-cache": "^4.0.1",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
}
},
- "esrecurse": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz",
- "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=",
+ "crypto-browserify": {
+ "version": "3.12.1",
+ "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.1.tgz",
+ "integrity": "sha512-r4ESw/IlusD17lgQi1O20Fa3qNnsckR126TdUuBgAu7GBYSIPvdNyONd3Zrxh0xCwA4+6w/TDArBPsMvhur+KQ==",
"dev": true,
"requires": {
- "estraverse": "^4.1.0",
- "object-assign": "^4.0.1"
+ "browserify-cipher": "^1.0.1",
+ "browserify-sign": "^4.2.3",
+ "create-ecdh": "^4.0.4",
+ "create-hash": "^1.2.0",
+ "create-hmac": "^1.1.7",
+ "diffie-hellman": "^5.0.3",
+ "hash-base": "~3.0.4",
+ "inherits": "^2.0.4",
+ "pbkdf2": "^3.1.2",
+ "public-encrypt": "^4.0.3",
+ "randombytes": "^2.1.0",
+ "randomfill": "^1.0.4"
},
"dependencies": {
- "estraverse": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
- "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"dev": true
}
}
},
- "estraverse": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
- "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "crypto-random-string": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz",
+ "integrity": "sha512-GsVpkFPlycH7/fRR7Dhcmnoii54gV1nz7y4CWyeFS14N+JVBBhY+r8amRHE4BwSYal7BPTDp8isvAlCxyFt3Hg==",
"dev": true
},
- "esutils": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
- "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs="
- },
- "etag": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
- "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
- },
- "event-emitter": {
- "version": "0.3.5",
- "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz",
- "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=",
+ "css-color-function": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/css-color-function/-/css-color-function-1.3.3.tgz",
+ "integrity": "sha512-YD/WhiRZIYgadwFJ48X5QmlOQ/w8Me4yQI6/eSUoiE8spIFp+S/rGpsAH48iyq/0ZWkCDWqVQKUlQmUzn7BQ9w==",
"dev": true,
"requires": {
- "d": "1",
- "es5-ext": "~0.10.14"
- }
- },
- "event-stream": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-0.5.3.tgz",
- "integrity": "sha1-t3uTCfcQet3+q2PwwOr9jbC9jBw=",
- "requires": {
- "optimist": "0.2"
+ "balanced-match": "0.1.0",
+ "color": "^0.11.0",
+ "debug": "^3.1.0",
+ "rgb": "~0.1.0"
},
"dependencies": {
- "optimist": {
- "version": "0.2.8",
- "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.2.8.tgz",
- "integrity": "sha1-6YGrfiaLRXlIWTtVZ0wJmoFcrDE=",
+ "balanced-match": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.1.0.tgz",
+ "integrity": "sha512-4xb6XqAEo3Z+5pEDJz33R8BZXI8FRJU+cDNLdKgDpmnz+pKKRVYLpdv+VvUAC7yUhBMj4izmyt19eCGv1QGV7A==",
+ "dev": true
+ },
+ "debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
"requires": {
- "wordwrap": ">=0.0.1 <0.1.0"
+ "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
}
}
},
- "eventemitter2": {
- "version": "0.4.14",
- "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz",
- "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas="
- },
- "eventemitter3": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz",
- "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA=="
+ "css-color-names": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz",
+ "integrity": "sha512-zj5D7X1U2h2zsXOAM8EyUREBnnts6H+Jm+d1M2DbiQQcUtnqgQsMrdo8JW9R80YFUmIdBZeMu5wvYM7hcgWP/Q==",
+ "dev": true
},
- "events": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz",
- "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=",
+ "css-unit-converter": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.2.tgz",
+ "integrity": "sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA==",
"dev": true
},
- "evp_bytestokey": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
- "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
+ "cssnano": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz",
+ "integrity": "sha512-0o0IMQE0Ezo4b41Yrm8U6Rp9/Ag81vNXY1gZMnT1XhO4DpjEf2utKERqWJbOoz3g1Wdc1d3QSta/cIuJ1wSTEg==",
"dev": true,
"requires": {
- "md5.js": "^1.3.4",
- "safe-buffer": "^5.1.1"
+ "autoprefixer": "^6.3.1",
+ "decamelize": "^1.1.2",
+ "defined": "^1.0.0",
+ "has": "^1.0.1",
+ "object-assign": "^4.0.1",
+ "postcss": "^5.0.14",
+ "postcss-calc": "^5.2.0",
+ "postcss-colormin": "^2.1.8",
+ "postcss-convert-values": "^2.3.4",
+ "postcss-discard-comments": "^2.0.4",
+ "postcss-discard-duplicates": "^2.0.1",
+ "postcss-discard-empty": "^2.0.1",
+ "postcss-discard-overridden": "^0.1.1",
+ "postcss-discard-unused": "^2.2.1",
+ "postcss-filter-plugins": "^2.0.0",
+ "postcss-merge-idents": "^2.1.5",
+ "postcss-merge-longhand": "^2.0.1",
+ "postcss-merge-rules": "^2.0.3",
+ "postcss-minify-font-values": "^1.0.2",
+ "postcss-minify-gradients": "^1.0.1",
+ "postcss-minify-params": "^1.0.4",
+ "postcss-minify-selectors": "^2.0.4",
+ "postcss-normalize-charset": "^1.1.0",
+ "postcss-normalize-url": "^3.0.7",
+ "postcss-ordered-values": "^2.1.0",
+ "postcss-reduce-idents": "^2.2.2",
+ "postcss-reduce-initial": "^1.0.0",
+ "postcss-reduce-transforms": "^1.0.3",
+ "postcss-svgo": "^2.1.1",
+ "postcss-unique-selectors": "^2.0.2",
+ "postcss-value-parser": "^3.2.3",
+ "postcss-zindex": "^2.0.1"
+ },
+ "dependencies": {
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^1.0.0"
+ }
+ }
}
},
- "execa": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
- "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
+ "csso": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz",
+ "integrity": "sha512-FmCI/hmqDeHHLaIQckMhMZneS84yzUZdrWDAvJVVxOwcKE1P1LF9FGmzr1ktIQSxOw6fl3PaQsmfg+GN+VvR3w==",
"dev": true,
"requires": {
- "cross-spawn": "^5.0.1",
- "get-stream": "^3.0.0",
- "is-stream": "^1.1.0",
- "npm-run-path": "^2.0.0",
- "p-finally": "^1.0.0",
- "signal-exit": "^3.0.0",
- "strip-eof": "^1.0.0"
+ "clap": "^1.0.9",
+ "source-map": "^0.5.3"
}
},
- "execall": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/execall/-/execall-1.0.0.tgz",
- "integrity": "sha1-c9CQTjlbPKsGWLCNCewlMH8pu3M=",
- "dev": true,
+ "csv": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/csv/-/csv-5.1.1.tgz",
+ "integrity": "sha512-gezB9D+enrh2tLj+vsAD8JyYRMIJdSMpec/Pgbb+7YRj6Q6/D12HLSwjhx+CrirRT4dESjZYXWX1JfqlV4RlTA==",
"requires": {
- "clone-regexp": "^1.0.0"
+ "csv-generate": "^3.2.0",
+ "csv-parse": "^4.3.0",
+ "csv-stringify": "^5.1.2",
+ "stream-transform": "^1.0.8"
}
},
- "expand-brackets": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
- "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
- "requires": {
- "is-posix-bracket": "^0.1.0"
- }
+ "csv-generate": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/csv-generate/-/csv-generate-3.4.3.tgz",
+ "integrity": "sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw=="
},
- "expand-range": {
- "version": "1.8.2",
- "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
- "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
- "requires": {
- "fill-range": "^2.1.0"
- }
+ "csv-parse": {
+ "version": "4.16.3",
+ "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-4.16.3.tgz",
+ "integrity": "sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg=="
},
- "express": {
- "version": "4.16.2",
- "resolved": "https://registry.npmjs.org/express/-/express-4.16.2.tgz",
- "integrity": "sha1-41xt/i1kt9ygpc1PIXgb4ymeB2w=",
- "requires": {
- "accepts": "~1.3.4",
- "array-flatten": "1.1.1",
- "body-parser": "1.18.2",
- "content-disposition": "0.5.2",
- "content-type": "~1.0.4",
- "cookie": "0.3.1",
- "cookie-signature": "1.0.6",
- "debug": "2.6.9",
- "depd": "~1.1.1",
- "encodeurl": "~1.0.1",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "finalhandler": "1.1.0",
- "fresh": "0.5.2",
- "merge-descriptors": "1.0.1",
- "methods": "~1.1.2",
- "on-finished": "~2.3.0",
- "parseurl": "~1.3.2",
- "path-to-regexp": "0.1.7",
- "proxy-addr": "~2.0.2",
- "qs": "6.5.1",
- "range-parser": "~1.2.0",
- "safe-buffer": "5.1.1",
- "send": "0.16.1",
- "serve-static": "1.13.1",
- "setprototypeof": "1.1.0",
- "statuses": "~1.3.1",
- "type-is": "~1.6.15",
- "utils-merge": "1.0.1",
- "vary": "~1.1.2"
- },
- "dependencies": {
- "setprototypeof": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
- "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ=="
- },
- "statuses": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
- "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4="
- }
- }
+ "csv-stringify": {
+ "version": "5.6.5",
+ "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-5.6.5.tgz",
+ "integrity": "sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A=="
},
- "extend": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",
- "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ="
+ "cuint": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz",
+ "integrity": "sha512-d4ZVpCW31eWwCMe1YT3ur7mUDnTXbgwyzaL320DrcRT45rfjYxkt5QWLrmOJ+/UEAI2+fQgKe/fCjR8l4TpRgw==",
+ "dev": true
},
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "currently-unhandled": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
+ "integrity": "sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==",
"dev": true,
"requires": {
- "is-extendable": "^0.1.0"
+ "array-find-index": "^1.0.1"
}
},
- "external-editor": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.1.0.tgz",
- "integrity": "sha512-E44iT5QVOUJBKij4IIV3uvxuNlbKS38Tw1HiupxEIHPv9qtC2PrDYohbXV5U+1jnfIXttny8gUhj+oZvflFlzA==",
- "dev": true,
+ "cycle": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
+ "integrity": "sha512-TVF6svNzeQCOpjCqsy0/CSy8VgObG3wXusJ73xW2GbG5rGx7lC8zxDSURicsXI2UsGdi2L0QNRCi745/wUDvsA=="
+ },
+ "cytoscape": {
+ "version": "3.2.22",
+ "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.2.22.tgz",
+ "integrity": "sha512-0eHGQWuE6UTTZ0T3L/p1gYBfAkq/+PAFJWq79PL2qDexPSLnbYi6JivSid31TLIRwxe29MW6TPqZZ6ynMXPK8A==",
"requires": {
- "chardet": "^0.4.0",
- "iconv-lite": "^0.4.17",
- "tmp": "^0.0.33"
+ "heap": "^0.2.6",
+ "lodash.debounce": "^4.0.8"
}
},
- "extglob": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
- "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
+ "cytoscape-cola": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/cytoscape-cola/-/cytoscape-cola-2.3.0.tgz",
+ "integrity": "sha512-xblxlCH8JXGLdH6XMUBJY3xBUJuL1rLy8bLMGvqkvoPHSbBfV+/klMWoqwervVKWOmFHPwUdihtxy8stG4RM5g==",
"requires": {
- "is-extglob": "^1.0.0"
+ "webcola": "^3.3.6"
}
},
- "extsprintf": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
- "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
- },
- "eyes": {
- "version": "0.1.8",
- "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
- "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A="
- },
- "fast-deep-equal": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz",
- "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=",
- "dev": true
+ "cytoscape-cose-bilkent": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-3.0.4.tgz",
+ "integrity": "sha512-oAh/ga1fxJ7j9bBjjfGRlpTAKVFddYu+HfwJaebLpZTc0LUnnnHe/Ng3aiWj1Ammc301+RDTSXT6ecpIz4dSMQ==",
+ "requires": {
+ "linkedlist-js": "1.3.0"
+ }
},
- "fast-json-stable-stringify": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
- "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
+ "cytoscape-cxtmenu": {
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/cytoscape-cxtmenu/-/cytoscape-cxtmenu-2.10.3.tgz",
+ "integrity": "sha512-P9yUbf7uxBJzxpcjcZTRH0IpPW29f2Ydv3gHgbMBd/KpZx0K4DbmR9+He/dy3feXrPqujXyeBX7vH5DGFY0dsw=="
},
- "fast-levenshtein": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
- "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
- "dev": true
+ "cytoscape-expand-collapse": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/cytoscape-expand-collapse/-/cytoscape-expand-collapse-3.1.2.tgz",
+ "integrity": "sha512-yClfo0z2IqEkhlOipUh85k1kJGSgxaSKs4e30KO1mDIXPKOnvL/iQhVXmNt9+KmuIGg9YtNt09P0j3F4BN3WsA=="
},
- "fbjs": {
- "version": "0.8.17",
- "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz",
- "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=",
+ "cytoscape-popper": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cytoscape-popper/-/cytoscape-popper-1.0.1.tgz",
+ "integrity": "sha512-TW1BWgD0z7n9WIur2bcyI82U2hfV4qoZG/jBMFd7+n6FOCLEdfBW69SNtf+jMzy8S8qkbzn8glFaCRvrBsdZxA==",
"requires": {
- "core-js": "^1.0.0",
- "isomorphic-fetch": "^2.1.1",
- "loose-envify": "^1.0.0",
- "object-assign": "^4.1.0",
- "promise": "^7.1.1",
- "setimmediate": "^1.0.5",
- "ua-parser-js": "^0.7.18"
+ "popper.js": "^1.0.0"
}
},
- "fibers": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/fibers/-/fibers-3.0.0.tgz",
- "integrity": "sha512-cAcOHOTbTMlcpNZvr94BNFsnBDBiEu9JP5MYcRLyl12HF/X0z3KvZyNzU9+BtI8lOIaV84PlDQJOKK3f5llJug=="
+ "cytoscape-sbgn-stylesheet": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/cytoscape-sbgn-stylesheet/-/cytoscape-sbgn-stylesheet-3.0.1.tgz",
+ "integrity": "sha512-c2Hw1Fo5Zq8t9W0GBWibLeUesfcVuq79JHdxsO+/hQRov3OcddgnKMz04jkyt6dTUUVLEzoQ/05iTbGTjLXcsg==",
+ "requires": {
+ "extend": "^3.0.0",
+ "lodash.defaultsdeep": "^4.6.0",
+ "lodash.memoize": "^4.1.2",
+ "text-width": "^1.2.0"
+ }
},
- "file-entry-cache": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz",
- "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=",
+ "d": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz",
+ "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==",
"dev": true,
"requires": {
- "flat-cache": "^1.2.1",
- "object-assign": "^4.0.1"
+ "es5-ext": "^0.10.64",
+ "type": "^2.7.2"
}
},
- "file-saver": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-1.3.3.tgz",
- "integrity": "sha1-zdTETTqiZOrC9o7BZbx5HDSvEjI="
+ "d3-dispatch": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.6.tgz",
+ "integrity": "sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA=="
},
- "filename-regex": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
- "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY="
+ "d3-drag": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-1.2.5.tgz",
+ "integrity": "sha512-rD1ohlkKQwMZYkQlYVCrSFxsWPzI97+W+PaEIBNTMxRuxz9RF0Hi5nJWHGVJ3Om9d2fRTe1yOBINJyy/ahV95w==",
+ "requires": {
+ "d3-dispatch": "1",
+ "d3-selection": "1"
+ }
},
- "filesize": {
- "version": "3.6.1",
- "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz",
- "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==",
- "dev": true
+ "d3-path": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz",
+ "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg=="
},
- "fill-range": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz",
- "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==",
+ "d3-selection": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.4.2.tgz",
+ "integrity": "sha512-SJ0BqYihzOjDnnlfyeHT0e30k0K1+5sR3d5fNueCNeuhZTnGw4M4o8mqJchSwgKMXCNFo+e2VTChiSJ0vYtXkg=="
+ },
+ "d3-shape": {
+ "version": "1.3.7",
+ "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz",
+ "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==",
"requires": {
- "is-number": "^2.1.0",
- "isobject": "^2.0.0",
- "randomatic": "^3.0.0",
- "repeat-element": "^1.1.2",
- "repeat-string": "^1.5.2"
+ "d3-path": "1"
}
},
- "finalhandler": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz",
- "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=",
+ "d3-timer": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.10.tgz",
+ "integrity": "sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw=="
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==",
"requires": {
- "debug": "2.6.9",
- "encodeurl": "~1.0.1",
- "escape-html": "~1.0.3",
- "on-finished": "~2.3.0",
- "parseurl": "~1.3.2",
- "statuses": "~1.3.1",
- "unpipe": "~1.0.0"
- },
- "dependencies": {
- "statuses": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
- "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4="
- }
+ "assert-plus": "^1.0.0"
}
},
- "find-cache-dir": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz",
- "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=",
+ "data-view-buffer": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz",
+ "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==",
"dev": true,
"requires": {
- "commondir": "^1.0.1",
- "make-dir": "^1.0.0",
- "pkg-dir": "^2.0.0"
+ "call-bound": "^1.0.3",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.2"
}
},
- "find-up": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
- "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "data-view-byte-length": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz",
+ "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==",
"dev": true,
"requires": {
- "locate-path": "^2.0.0"
+ "call-bound": "^1.0.3",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.2"
}
},
- "flat-cache": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz",
- "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=",
+ "data-view-byte-offset": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz",
+ "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==",
"dev": true,
"requires": {
- "circular-json": "^0.3.1",
- "del": "^2.0.2",
- "graceful-fs": "^4.1.2",
- "write": "^0.2.1"
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.1"
}
},
- "flatiron": {
- "version": "0.4.3",
- "resolved": "https://registry.npmjs.org/flatiron/-/flatiron-0.4.3.tgz",
- "integrity": "sha1-JIz3mj2n19w3nioRySonGcu1QPY=",
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"requires": {
- "broadway": "~0.3.2",
- "director": "1.2.7",
- "optimist": "0.6.0",
- "prompt": "0.2.14"
- },
- "dependencies": {
- "minimist": {
- "version": "0.0.10",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
- "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8="
- },
- "optimist": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.0.tgz",
- "integrity": "sha1-aUJIJvNAX3nxQub8PZrljU27kgA=",
- "requires": {
- "minimist": "~0.0.1",
- "wordwrap": "~0.0.2"
- }
- }
+ "ms": "2.0.0"
}
},
- "flatten": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz",
- "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=",
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==",
"dev": true
},
- "for-in": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
- "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA="
- },
- "for-own": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
- "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
+ "decamelize-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz",
+ "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==",
+ "dev": true,
"requires": {
- "for-in": "^1.0.1"
- }
+ "decamelize": "^1.1.0",
+ "map-obj": "^1.0.0"
+ }
},
- "foreach": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz",
- "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=",
- "dev": true
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og=="
},
- "forever": {
- "version": "0.15.3",
- "resolved": "https://registry.npmjs.org/forever/-/forever-0.15.3.tgz",
- "integrity": "sha1-d9nX4V/S9RGtnYShEMfdj8js68I=",
+ "deep-eql": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
+ "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==",
+ "dev": true,
"requires": {
- "cliff": "~0.1.9",
- "clone": "^1.0.2",
- "colors": "~0.6.2",
- "flatiron": "~0.4.2",
- "forever-monitor": "~1.7.0",
- "nconf": "~0.6.9",
- "nssocket": "~0.5.1",
- "object-assign": "^3.0.0",
- "optimist": "~0.6.0",
- "path-is-absolute": "~1.0.0",
- "prettyjson": "^1.1.2",
- "shush": "^1.0.0",
- "timespan": "~2.3.0",
- "utile": "~0.2.1",
- "winston": "~0.8.1"
- },
- "dependencies": {
- "async": {
- "version": "0.2.10",
- "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
- "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E="
- },
- "colors": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz",
- "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w="
- },
- "object-assign": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz",
- "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I="
+ "type-detect": "^4.0.0"
+ }
+ },
+ "deep-equal": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz",
+ "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==",
+ "requires": {
+ "array-buffer-byte-length": "^1.0.0",
+ "call-bind": "^1.0.5",
+ "es-get-iterator": "^1.1.3",
+ "get-intrinsic": "^1.2.2",
+ "is-arguments": "^1.1.1",
+ "is-array-buffer": "^3.0.2",
+ "is-date-object": "^1.0.5",
+ "is-regex": "^1.1.4",
+ "is-shared-array-buffer": "^1.0.2",
+ "isarray": "^2.0.5",
+ "object-is": "^1.1.5",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.4",
+ "regexp.prototype.flags": "^1.5.1",
+ "side-channel": "^1.0.4",
+ "which-boxed-primitive": "^1.0.2",
+ "which-collection": "^1.0.1",
+ "which-typed-array": "^1.1.13"
+ },
+ "dependencies": {
+ "is-date-object": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz",
+ "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==",
+ "requires": {
+ "call-bound": "^1.0.2",
+ "has-tostringtag": "^1.0.2"
+ }
},
- "winston": {
- "version": "0.8.3",
- "resolved": "https://registry.npmjs.org/winston/-/winston-0.8.3.tgz",
- "integrity": "sha1-ZLar9M0Brcrv1QCTk7HY6L7BnbA=",
+ "is-regex": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz",
+ "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==",
"requires": {
- "async": "0.2.x",
- "colors": "0.6.x",
- "cycle": "1.0.x",
- "eyes": "0.1.x",
- "isstream": "0.1.x",
- "pkginfo": "0.3.x",
- "stack-trace": "0.0.x"
+ "call-bound": "^1.0.2",
+ "gopd": "^1.2.0",
+ "has-tostringtag": "^1.0.2",
+ "hasown": "^2.0.2"
}
+ },
+ "isarray": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
+ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="
+ },
+ "object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
}
}
},
- "forever-agent": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
- "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
+ "deep-extend": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
+ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
+ "dev": true
},
- "forever-monitor": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/forever-monitor/-/forever-monitor-1.7.1.tgz",
- "integrity": "sha1-XYIPSjp42y2BriZx8Vi56GoJG7g=",
+ "deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true
+ },
+ "define-data-property": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
+ "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
"requires": {
- "broadway": "~0.3.6",
- "chokidar": "^1.0.1",
- "minimatch": "~3.0.2",
- "ps-tree": "0.0.x",
- "utile": "~0.2.1"
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.0.1"
}
},
- "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==",
+ "define-properties": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
+ "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
+ "dev": true,
"requires": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.6",
- "mime-types": "^2.1.12"
+ "define-data-property": "^1.0.1",
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
}
},
- "format-util": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/format-util/-/format-util-1.0.3.tgz",
- "integrity": "sha1-Ay3KShFiYqEsQ/TD7IVmQWxbLZU="
- },
- "forwarded": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
- "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
- },
- "fragment-cache": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
- "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
"dev": true,
"requires": {
- "map-cache": "^0.2.2"
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ },
+ "dependencies": {
+ "is-descriptor": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz",
+ "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.1",
+ "is-data-descriptor": "^1.0.1"
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
+ "dev": true
+ }
}
},
- "fready": {
+ "defined": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz",
+ "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==",
+ "dev": true
+ },
+ "delayed-stream": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fready/-/fready-1.0.0.tgz",
- "integrity": "sha1-7x9xj44uOjAwDjsTDAPLwS/pX9k="
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
},
- "fresh": {
+ "depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ=="
+ },
+ "dependency-graph": {
"version": "0.5.2",
- "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
- "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
+ "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.5.2.tgz",
+ "integrity": "sha512-fuF8ISen2Rk75wQ4tWHcfJ/IV1cmPMFE+wth10tAnj/JkpqMJzNW5oKpVOCAkpdfYD+NwtA3kL3nOeyprxPG2A==",
+ "dev": true
},
- "from": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz",
- "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=",
+ "des.js": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz",
+ "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
+ }
+ },
+ "destroy": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
+ "integrity": "sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg=="
+ },
+ "dice-coefficient": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/dice-coefficient/-/dice-coefficient-1.0.2.tgz",
+ "integrity": "sha512-A2/UWD5epmtd1o/qgnkeAnMcH1ewcPUc5dKEtYisAFFCu5hPqHaQWcxNuCvpD5+zUQduxnPs+6LPaWADZcTqdA==",
+ "requires": {
+ "n-gram": "^1.0.0"
+ }
+ },
+ "diff": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
+ "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
"dev": true
},
- "fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
+ "diffie-hellman": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
+ "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "miller-rabin": "^4.0.0",
+ "randombytes": "^2.0.0"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.12.1",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz",
+ "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==",
+ "dev": true
+ }
+ }
},
- "fsevents": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz",
- "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==",
- "optional": true,
+ "dir-glob": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz",
+ "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==",
+ "dev": true,
"requires": {
- "nan": "^2.9.2",
- "node-pre-gyp": "^0.10.0"
+ "path-type": "^3.0.0"
},
"dependencies": {
- "abbrev": {
- "version": "1.1.1",
- "bundled": true,
- "optional": true
- },
- "ansi-regex": {
- "version": "2.1.1",
- "bundled": true,
- "optional": true
- },
- "aproba": {
- "version": "1.2.0",
- "bundled": true,
- "optional": true
- },
- "are-we-there-yet": {
- "version": "1.1.4",
- "bundled": true,
- "optional": true,
- "requires": {
- "delegates": "^1.0.0",
- "readable-stream": "^2.0.6"
- }
- },
- "balanced-match": {
- "version": "1.0.0",
- "bundled": true,
- "optional": true
- },
- "brace-expansion": {
- "version": "1.1.11",
- "bundled": true,
- "optional": true,
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "chownr": {
- "version": "1.0.1",
- "bundled": true,
- "optional": true
- },
- "code-point-at": {
- "version": "1.1.0",
- "bundled": true,
- "optional": true
- },
- "concat-map": {
- "version": "0.0.1",
- "bundled": true,
- "optional": true
- },
- "console-control-strings": {
- "version": "1.1.0",
- "bundled": true,
- "optional": true
- },
- "core-util-is": {
- "version": "1.0.2",
- "bundled": true,
- "optional": true
- },
- "debug": {
- "version": "2.6.9",
- "bundled": true,
- "optional": true,
+ "path-type": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
+ "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
+ "dev": true,
"requires": {
- "ms": "2.0.0"
+ "pify": "^3.0.0"
}
+ }
+ }
+ },
+ "director": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/director/-/director-1.2.7.tgz",
+ "integrity": "sha512-Cuia7IBvmSanM+7ZmKYtP9hq+Du7n7mv2cpCt8GiEIkUDni0ecSlVCFJUL6HWwGzqLX03uA49xVOZOjwnabWmQ=="
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
+ "dom-serializer": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz",
+ "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==",
+ "dev": true,
+ "requires": {
+ "domelementtype": "^2.0.1",
+ "entities": "^2.0.0"
+ },
+ "dependencies": {
+ "domelementtype": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
+ "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
+ "dev": true
},
- "deep-extend": {
- "version": "0.5.1",
- "bundled": true,
- "optional": true
- },
- "delegates": {
- "version": "1.0.0",
- "bundled": true,
- "optional": true
- },
- "detect-libc": {
- "version": "1.0.3",
- "bundled": true,
- "optional": true
- },
- "fs-minipass": {
- "version": "1.2.5",
- "bundled": true,
- "optional": true,
- "requires": {
- "minipass": "^2.2.1"
- }
- },
- "fs.realpath": {
- "version": "1.0.0",
- "bundled": true,
- "optional": true
- },
- "gauge": {
- "version": "2.7.4",
- "bundled": true,
- "optional": true,
- "requires": {
- "aproba": "^1.0.3",
- "console-control-strings": "^1.0.0",
- "has-unicode": "^2.0.0",
- "object-assign": "^4.1.0",
- "signal-exit": "^3.0.0",
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wide-align": "^1.1.0"
- }
- },
- "glob": {
- "version": "7.1.2",
- "bundled": true,
- "optional": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "has-unicode": {
- "version": "2.0.1",
- "bundled": true,
- "optional": true
+ "entities": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
+ "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
+ "dev": true
+ }
+ }
+ },
+ "domain-browser": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
+ "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==",
+ "dev": true
+ },
+ "domelementtype": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz",
+ "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==",
+ "dev": true
+ },
+ "domhandler": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
+ "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
+ "dev": true,
+ "requires": {
+ "domelementtype": "1"
+ }
+ },
+ "domutils": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz",
+ "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==",
+ "dev": true,
+ "requires": {
+ "dom-serializer": "0",
+ "domelementtype": "1"
+ }
+ },
+ "dot-prop": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.1.tgz",
+ "integrity": "sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ==",
+ "dev": true,
+ "requires": {
+ "is-obj": "^1.0.0"
+ }
+ },
+ "dotenv": {
+ "version": "16.4.7",
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz",
+ "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==",
+ "dev": true
+ },
+ "dunder-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
+ "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
+ "requires": {
+ "call-bind-apply-helpers": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.2.0"
+ }
+ },
+ "duplexer": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz",
+ "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==",
+ "dev": true
+ },
+ "duplexer2": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
+ "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==",
+ "requires": {
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "duplexer3": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz",
+ "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==",
+ "dev": true
+ },
+ "ecc-jsbn": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+ "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==",
+ "requires": {
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.1.0"
+ }
+ },
+ "echo-cli": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/echo-cli/-/echo-cli-1.0.8.tgz",
+ "integrity": "sha512-OZC63J3y2i3Agl02OJ8R/+AAfbWp2l2HC57IPCzRXhK8qNccgMY34lM6juBs0QpDfmEghjVYGHbAnkqSRmLWtQ==",
+ "dev": true,
+ "requires": {
+ "meow": "^3.7.0",
+ "unescape-js": "^1.0.3"
+ }
+ },
+ "ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
+ },
+ "ejs": {
+ "version": "2.7.4",
+ "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz",
+ "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==",
+ "dev": true
+ },
+ "electron-to-chromium": {
+ "version": "1.5.123",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.123.tgz",
+ "integrity": "sha512-refir3NlutEZqlKaBLK0tzlVLe5P2wDKS7UQt/3SpibizgsRAPOsqQC3ffw1nlv3ze5gjRQZYHoPymgVZkplFA==",
+ "dev": true
+ },
+ "elliptic": {
+ "version": "6.6.1",
+ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz",
+ "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.11.9",
+ "brorand": "^1.1.0",
+ "hash.js": "^1.0.0",
+ "hmac-drbg": "^1.0.1",
+ "inherits": "^2.0.4",
+ "minimalistic-assert": "^1.0.1",
+ "minimalistic-crypto-utils": "^1.0.1"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.12.1",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz",
+ "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==",
+ "dev": true
},
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ }
+ }
+ },
+ "emojis-list": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
+ "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
+ "dev": true
+ },
+ "encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w=="
+ },
+ "encoding": {
+ "version": "0.1.13",
+ "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz",
+ "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==",
+ "requires": {
+ "iconv-lite": "^0.6.2"
+ },
+ "dependencies": {
"iconv-lite": {
- "version": "0.4.21",
- "bundled": true,
- "optional": true,
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
"requires": {
- "safer-buffer": "^2.1.0"
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
}
- },
- "ignore-walk": {
+ }
+ }
+ },
+ "enhanced-resolve": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz",
+ "integrity": "sha512-ZaAux1rigq1e2nQrztHn4h2ugvpzZxs64qneNah+8Mh/K0CRqJFJc+UoXnUsq+1yX+DmQFPPdVqboKAJ89e0Iw==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "memory-fs": "^0.4.0",
+ "object-assign": "^4.0.1",
+ "tapable": "^0.2.7"
+ }
+ },
+ "entities": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
+ "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==",
+ "dev": true
+ },
+ "errno": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz",
+ "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==",
+ "dev": true,
+ "requires": {
+ "prr": "~1.0.1"
+ }
+ },
+ "error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "dev": true,
+ "requires": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "es-abstract": {
+ "version": "1.23.9",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz",
+ "integrity": "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==",
+ "dev": true,
+ "requires": {
+ "array-buffer-byte-length": "^1.0.2",
+ "arraybuffer.prototype.slice": "^1.0.4",
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.3",
+ "data-view-buffer": "^1.0.2",
+ "data-view-byte-length": "^1.0.2",
+ "data-view-byte-offset": "^1.0.1",
+ "es-define-property": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0",
+ "es-set-tostringtag": "^2.1.0",
+ "es-to-primitive": "^1.3.0",
+ "function.prototype.name": "^1.1.8",
+ "get-intrinsic": "^1.2.7",
+ "get-proto": "^1.0.0",
+ "get-symbol-description": "^1.1.0",
+ "globalthis": "^1.0.4",
+ "gopd": "^1.2.0",
+ "has-property-descriptors": "^1.0.2",
+ "has-proto": "^1.2.0",
+ "has-symbols": "^1.1.0",
+ "hasown": "^2.0.2",
+ "internal-slot": "^1.1.0",
+ "is-array-buffer": "^3.0.5",
+ "is-callable": "^1.2.7",
+ "is-data-view": "^1.0.2",
+ "is-regex": "^1.2.1",
+ "is-shared-array-buffer": "^1.0.4",
+ "is-string": "^1.1.1",
+ "is-typed-array": "^1.1.15",
+ "is-weakref": "^1.1.0",
+ "math-intrinsics": "^1.1.0",
+ "object-inspect": "^1.13.3",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.7",
+ "own-keys": "^1.0.1",
+ "regexp.prototype.flags": "^1.5.3",
+ "safe-array-concat": "^1.1.3",
+ "safe-push-apply": "^1.0.0",
+ "safe-regex-test": "^1.1.0",
+ "set-proto": "^1.0.0",
+ "string.prototype.trim": "^1.2.10",
+ "string.prototype.trimend": "^1.0.9",
+ "string.prototype.trimstart": "^1.0.8",
+ "typed-array-buffer": "^1.0.3",
+ "typed-array-byte-length": "^1.0.3",
+ "typed-array-byte-offset": "^1.0.4",
+ "typed-array-length": "^1.0.7",
+ "unbox-primitive": "^1.1.0",
+ "which-typed-array": "^1.1.18"
+ }
+ },
+ "es-define-property": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
+ "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="
+ },
+ "es-errors": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="
+ },
+ "es-get-iterator": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz",
+ "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.1.3",
+ "has-symbols": "^1.0.3",
+ "is-arguments": "^1.1.1",
+ "is-map": "^2.0.2",
+ "is-set": "^2.0.2",
+ "is-string": "^1.0.7",
+ "isarray": "^2.0.5",
+ "stop-iteration-iterator": "^1.0.0"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
+ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="
+ }
+ }
+ },
+ "es-object-atoms": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
+ "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
+ "requires": {
+ "es-errors": "^1.3.0"
+ }
+ },
+ "es-set-tostringtag": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
+ "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
+ "dev": true,
+ "requires": {
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.6",
+ "has-tostringtag": "^1.0.2",
+ "hasown": "^2.0.2"
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz",
+ "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==",
+ "dev": true,
+ "requires": {
+ "is-callable": "^1.2.7",
+ "is-date-object": "^1.0.5",
+ "is-symbol": "^1.0.4"
+ }
+ },
+ "es5-ext": {
+ "version": "0.10.64",
+ "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz",
+ "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==",
+ "dev": true,
+ "requires": {
+ "es6-iterator": "^2.0.3",
+ "es6-symbol": "^3.1.3",
+ "esniff": "^2.0.1",
+ "next-tick": "^1.1.0"
+ }
+ },
+ "es6-iterator": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
+ "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==",
+ "dev": true,
+ "requires": {
+ "d": "1",
+ "es5-ext": "^0.10.35",
+ "es6-symbol": "^3.1.1"
+ }
+ },
+ "es6-map": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz",
+ "integrity": "sha512-mz3UqCh0uPCIqsw1SSAkB/p0rOzF/M0V++vyN7JqlPtSW/VsYgQBvVvqMLmfBuyMzTpLnNqi6JmcSizs4jy19A==",
+ "dev": true,
+ "requires": {
+ "d": "1",
+ "es5-ext": "~0.10.14",
+ "es6-iterator": "~2.0.1",
+ "es6-set": "~0.1.5",
+ "es6-symbol": "~3.1.1",
+ "event-emitter": "~0.3.5"
+ }
+ },
+ "es6-promise": {
+ "version": "4.2.8",
+ "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz",
+ "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w=="
+ },
+ "es6-set": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.6.tgz",
+ "integrity": "sha512-TE3LgGLDIBX332jq3ypv6bcOpkLO0AslAQo7p2VqX/1N46YNsvIWgvjojjSEnWEGWMhr1qUbYeTSir5J6mFHOw==",
+ "dev": true,
+ "requires": {
+ "d": "^1.0.1",
+ "es5-ext": "^0.10.62",
+ "es6-iterator": "~2.0.3",
+ "es6-symbol": "^3.1.3",
+ "event-emitter": "^0.3.5",
+ "type": "^2.7.2"
+ }
+ },
+ "es6-symbol": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz",
+ "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==",
+ "dev": true,
+ "requires": {
+ "d": "^1.0.2",
+ "ext": "^1.7.0"
+ }
+ },
+ "es6-weak-map": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz",
+ "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==",
+ "dev": true,
+ "requires": {
+ "d": "1",
+ "es5-ext": "^0.10.46",
+ "es6-iterator": "^2.0.3",
+ "es6-symbol": "^3.1.1"
+ }
+ },
+ "escalade": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+ "dev": true
+ },
+ "escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "dev": true
+ },
+ "escope": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz",
+ "integrity": "sha512-75IUQsusDdalQEW/G/2esa87J7raqdJF+Ca0/Xm5C3Q58Nr4yVYjZGp/P1+2xiEVgXRrA39dpRb8LcshajbqDQ==",
+ "dev": true,
+ "requires": {
+ "es6-map": "^0.1.3",
+ "es6-weak-map": "^2.0.1",
+ "esrecurse": "^4.1.0",
+ "estraverse": "^4.1.1"
+ }
+ },
+ "eslint": {
+ "version": "4.17.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.17.0.tgz",
+ "integrity": "sha512-AyxBUCANU/o/xC0ijGMKavo5Ls3oK6xykiOITlMdjFjrKOsqLrA7Nf5cnrDgcKrHzBirclAZt63XO7YZlVUPwA==",
+ "dev": true,
+ "requires": {
+ "ajv": "^5.3.0",
+ "babel-code-frame": "^6.22.0",
+ "chalk": "^2.1.0",
+ "concat-stream": "^1.6.0",
+ "cross-spawn": "^5.1.0",
+ "debug": "^3.1.0",
+ "doctrine": "^2.1.0",
+ "eslint-scope": "^3.7.1",
+ "eslint-visitor-keys": "^1.0.0",
+ "espree": "^3.5.2",
+ "esquery": "^1.0.0",
+ "esutils": "^2.0.2",
+ "file-entry-cache": "^2.0.0",
+ "functional-red-black-tree": "^1.0.1",
+ "glob": "^7.1.2",
+ "globals": "^11.0.1",
+ "ignore": "^3.3.3",
+ "imurmurhash": "^0.1.4",
+ "inquirer": "^3.0.6",
+ "is-resolvable": "^1.0.0",
+ "js-yaml": "^3.9.1",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.3.0",
+ "lodash": "^4.17.4",
+ "minimatch": "^3.0.2",
+ "mkdirp": "^0.5.1",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.8.2",
+ "path-is-inside": "^1.0.2",
+ "pluralize": "^7.0.0",
+ "progress": "^2.0.0",
+ "require-uncached": "^1.0.3",
+ "semver": "^5.3.0",
+ "strip-ansi": "^4.0.0",
+ "strip-json-comments": "~2.0.1",
+ "table": "^4.0.1",
+ "text-table": "~0.2.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
"version": "3.0.1",
- "bundled": true,
- "optional": true,
- "requires": {
- "minimatch": "^3.0.4"
- }
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz",
+ "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==",
+ "dev": true
},
- "inflight": {
- "version": "1.0.6",
- "bundled": true,
- "optional": true,
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
"requires": {
- "once": "^1.3.0",
- "wrappy": "1"
+ "color-convert": "^1.9.0"
}
},
- "inherits": {
- "version": "2.0.3",
- "bundled": true,
- "optional": true
- },
- "ini": {
- "version": "1.3.5",
- "bundled": true,
- "optional": true
- },
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "bundled": true,
- "optional": true,
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
"requires": {
- "number-is-nan": "^1.0.0"
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
}
},
- "isarray": {
- "version": "1.0.0",
- "bundled": true,
- "optional": true
- },
- "minimatch": {
- "version": "3.0.4",
- "bundled": true,
- "optional": true,
+ "debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
"requires": {
- "brace-expansion": "^1.1.7"
+ "ms": "^2.1.1"
}
},
- "minimist": {
- "version": "0.0.8",
- "bundled": true,
- "optional": true
+ "globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+ "dev": true
},
- "minipass": {
- "version": "2.2.4",
- "bundled": true,
- "optional": true,
- "requires": {
- "safe-buffer": "^5.1.1",
- "yallist": "^3.0.0"
- }
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "dev": true
},
- "minizlib": {
- "version": "1.1.0",
- "bundled": true,
- "optional": true,
+ "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": {
- "minipass": "^2.2.1"
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
}
},
+ "minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "dev": true
+ },
"mkdirp": {
- "version": "0.5.1",
- "bundled": true,
- "optional": true,
+ "version": "0.5.6",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
+ "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
+ "dev": true,
"requires": {
- "minimist": "0.0.8"
+ "minimist": "^1.2.6"
}
},
"ms": {
- "version": "2.0.0",
- "bundled": true,
- "optional": true
- },
- "nan": {
- "version": "2.11.1",
- "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.1.tgz",
- "integrity": "sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA==",
- "optional": true
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true
},
- "needle": {
- "version": "2.2.0",
- "bundled": true,
- "optional": true,
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==",
+ "dev": true,
"requires": {
- "debug": "^2.1.2",
- "iconv-lite": "^0.4.4",
- "sax": "^1.2.4"
+ "ansi-regex": "^3.0.0"
}
},
- "node-pre-gyp": {
- "version": "0.10.0",
- "bundled": true,
- "optional": true,
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
"requires": {
- "detect-libc": "^1.0.2",
- "mkdirp": "^0.5.1",
- "needle": "^2.2.0",
- "nopt": "^4.0.1",
- "npm-packlist": "^1.1.6",
- "npmlog": "^4.0.2",
- "rc": "^1.1.7",
- "rimraf": "^2.6.1",
- "semver": "^5.3.0",
- "tar": "^4"
+ "has-flag": "^3.0.0"
}
- },
- "nopt": {
- "version": "4.0.1",
- "bundled": true,
- "optional": true,
+ }
+ }
+ },
+ "eslint-config-standard": {
+ "version": "10.2.1",
+ "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-10.2.1.tgz",
+ "integrity": "sha512-UkFojTV1o0GOe1edOEiuI5ccYLJSuNngtqSeClNzhsmG8KPJ+7mRxgtp2oYhqZAK/brlXMoCd+VgXViE0AfyKw==",
+ "dev": true
+ },
+ "eslint-import-resolver-node": {
+ "version": "0.3.9",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz",
+ "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==",
+ "dev": true,
+ "requires": {
+ "debug": "^3.2.7",
+ "is-core-module": "^2.13.0",
+ "resolve": "^1.22.4"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
"requires": {
- "abbrev": "1",
- "osenv": "^0.1.4"
+ "ms": "^2.1.1"
}
},
- "npm-bundled": {
- "version": "1.0.3",
- "bundled": true,
- "optional": true
- },
- "npm-packlist": {
- "version": "1.1.10",
- "bundled": true,
- "optional": true,
+ "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.12.0",
+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz",
+ "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==",
+ "dev": true,
+ "requires": {
+ "debug": "^3.2.7"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
"requires": {
- "ignore-walk": "^3.0.1",
- "npm-bundled": "^1.0.1"
+ "ms": "^2.1.1"
}
},
- "npmlog": {
- "version": "4.1.2",
- "bundled": true,
- "optional": true,
+ "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-plugin-import": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.8.0.tgz",
+ "integrity": "sha512-Rf7dfKJxZ16QuTgVv1OYNxkZcsu/hULFnC+e+w0Gzi6jMC3guQoWQgxYxc54IDRinlb6/0v5z/PxxIKmVctN+g==",
+ "dev": true,
+ "requires": {
+ "builtin-modules": "^1.1.1",
+ "contains-path": "^0.1.0",
+ "debug": "^2.6.8",
+ "doctrine": "1.5.0",
+ "eslint-import-resolver-node": "^0.3.1",
+ "eslint-module-utils": "^2.1.1",
+ "has": "^1.0.1",
+ "lodash.cond": "^4.3.0",
+ "minimatch": "^3.0.3",
+ "read-pkg-up": "^2.0.0"
+ },
+ "dependencies": {
+ "doctrine": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz",
+ "integrity": "sha512-lsGyRuYr4/PIB0txi+Fy2xOMI2dGaTguCaotzFGkVZuKR5usKfcRWIFKNM3QNrU7hh/+w2bwTW+ZeXPK5l8uVg==",
+ "dev": true,
"requires": {
- "are-we-there-yet": "~1.1.2",
- "console-control-strings": "~1.1.0",
- "gauge": "~2.7.3",
- "set-blocking": "~2.0.0"
+ "esutils": "^2.0.2",
+ "isarray": "^1.0.0"
}
},
- "number-is-nan": {
- "version": "1.0.1",
- "bundled": true,
- "optional": true
- },
- "object-assign": {
- "version": "4.1.1",
- "bundled": true,
- "optional": true
+ "load-json-file": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
+ "integrity": "sha512-3p6ZOGNbiX4CdvEd1VcE6yi78UrGNpjHO33noGwHCnT/o2fyllJDepsm8+mFFv/DvtwFHht5HIHSyOy5a+ChVQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^2.2.0",
+ "pify": "^2.0.0",
+ "strip-bom": "^3.0.0"
+ }
},
- "once": {
- "version": "1.4.0",
- "bundled": true,
- "optional": true,
+ "path-type": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
+ "integrity": "sha512-dUnb5dXUf+kzhC/W/F4e5/SkluXIFf5VUHolW1Eg1irn1hGWjPGdsRcvYJ1nD6lhk8Ir7VM0bHJKsYTx8Jx9OQ==",
+ "dev": true,
"requires": {
- "wrappy": "1"
+ "pify": "^2.0.0"
}
},
- "os-homedir": {
- "version": "1.0.2",
- "bundled": true,
- "optional": true
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+ "dev": true
},
- "os-tmpdir": {
- "version": "1.0.2",
- "bundled": true,
- "optional": true
+ "read-pkg": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
+ "integrity": "sha512-eFIBOPW7FGjzBuk3hdXEuNSiTZS/xEMlH49HxMyzb0hyPfu4EhVjT2DH32K1hSSmVq4sebAWnZuuY5auISUTGA==",
+ "dev": true,
+ "requires": {
+ "load-json-file": "^2.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^2.0.0"
+ }
},
- "osenv": {
- "version": "0.1.5",
- "bundled": true,
- "optional": true,
+ "read-pkg-up": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
+ "integrity": "sha512-1orxQfbWGUiTn9XsPlChs6rLie/AV9jwZTGmu2NZw/CUDJQchXJFYE0Fq5j7+n558T1JhDWLdhyd1Zj+wLY//w==",
+ "dev": true,
"requires": {
- "os-homedir": "^1.0.0",
- "os-tmpdir": "^1.0.0"
+ "find-up": "^2.0.0",
+ "read-pkg": "^2.0.0"
}
},
- "path-is-absolute": {
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
+ "dev": true
+ }
+ }
+ },
+ "eslint-plugin-node": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-5.2.1.tgz",
+ "integrity": "sha512-xhPXrh0Vl/b7870uEbaumb2Q+LxaEcOQ3kS1jtIXanBAwpMre1l5q/l2l/hESYJGEFKuI78bp6Uw50hlpr7B+g==",
+ "dev": true,
+ "requires": {
+ "ignore": "^3.3.6",
+ "minimatch": "^3.0.4",
+ "resolve": "^1.3.3",
+ "semver": "5.3.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
+ "integrity": "sha512-mfmm3/H9+67MCVix1h+IXTpDwL6710LyHuk7+cWC9T1mE0qz4iHhh6r4hU2wrIT9iTsAAC2XQRvfblL028cpLw==",
+ "dev": true
+ }
+ }
+ },
+ "eslint-plugin-promise": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-3.6.0.tgz",
+ "integrity": "sha512-YQzM6TLTlApAr7Li8vWKR+K3WghjwKcYzY0d2roWap4SLK+kzuagJX/leTetIDWsFcTFnKNJXWupDCD6aZkP2Q==",
+ "dev": true
+ },
+ "eslint-plugin-standard": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-3.0.1.tgz",
+ "integrity": "sha512-JyT7wqVYlaHxnljWMT7CKa0R1QDQqArTi6g8kYnexTHHuK7x3Vg//kCepnoTgdT9x/kDbSluXMhJgjBvgVRLlQ==",
+ "dev": true
+ },
+ "eslint-scope": {
+ "version": "3.7.3",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.3.tgz",
+ "integrity": "sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.1.0",
+ "estraverse": "^4.1.1"
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
+ "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+ "dev": true
+ },
+ "esniff": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz",
+ "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==",
+ "dev": true,
+ "requires": {
+ "d": "^1.0.1",
+ "es5-ext": "^0.10.62",
+ "event-emitter": "^0.3.5",
+ "type": "^2.7.2"
+ }
+ },
+ "espree": {
+ "version": "3.5.4",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz",
+ "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==",
+ "dev": true,
+ "requires": {
+ "acorn": "^5.5.0",
+ "acorn-jsx": "^3.0.0"
+ }
+ },
+ "esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
+ },
+ "esquery": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
+ "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^5.1.0"
+ },
+ "dependencies": {
+ "estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true
+ }
+ }
+ },
+ "esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^5.2.0"
+ },
+ "dependencies": {
+ "estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true
+ }
+ }
+ },
+ "estraverse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha512-UUPPULqkyAV+M3Shodis7l8D+IyX6V8SbaBnTb449jf3fMTd8+UOZI1Q70NbZVOQkcR91yYgdHsJiMMMVmYshg=="
+ },
+ "etag": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+ "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="
+ },
+ "event-emitter": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz",
+ "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==",
+ "dev": true,
+ "requires": {
+ "d": "1",
+ "es5-ext": "~0.10.14"
+ }
+ },
+ "event-stream": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-0.5.3.tgz",
+ "integrity": "sha512-PzynKvHzEq8UpM5xBNuz8fSufJik0619XuJp5uXCC3X6PpmbHUmsWbpfCBS+grDG2xFBpsDF9TbtftWFEpDKaA==",
+ "requires": {
+ "optimist": "0.2"
+ },
+ "dependencies": {
+ "optimist": {
+ "version": "0.2.8",
+ "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.2.8.tgz",
+ "integrity": "sha512-Wy7E3cQDpqsTIFyW7m22hSevyTLxw850ahYv7FWsw4G6MIKVTZ8NSA95KBrQ95a4SMsMr1UGUUnwEFKhVaSzIg==",
+ "requires": {
+ "wordwrap": ">=0.0.1 <0.1.0"
+ }
+ }
+ }
+ },
+ "eventemitter2": {
+ "version": "0.4.14",
+ "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz",
+ "integrity": "sha512-K7J4xq5xAD5jHsGM5ReWXRTFa3JRGofHiMcVgQ8PRwgWxzjHpMWCIzsmyf60+mh8KLsqYPcjUMa0AC4hd6lPyQ=="
+ },
+ "eventemitter3": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz",
+ "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA=="
+ },
+ "events": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
+ "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
+ "dev": true
+ },
+ "evp_bytestokey": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
+ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
+ "dev": true,
+ "requires": {
+ "md5.js": "^1.3.4",
+ "safe-buffer": "^5.1.1"
+ }
+ },
+ "execa": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
+ "integrity": "sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^5.0.1",
+ "get-stream": "^3.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ }
+ },
+ "execall": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/execall/-/execall-1.0.0.tgz",
+ "integrity": "sha512-/J0Q8CvOvlAdpvhfkD/WnTQ4H1eU0exze2nFGPj/RSC7jpQ0NkKe2r28T5eMkhEEs+fzepMZNy1kVRKNlC04nQ==",
+ "dev": true,
+ "requires": {
+ "clone-regexp": "^1.0.0"
+ }
+ },
+ "expand-brackets": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
+ "integrity": "sha512-hxx03P2dJxss6ceIeri9cmYOT4SRs3Zk3afZwWpOsRqLqprhTR8u++SlC+sFGsQr7WGFPdMF7Gjc1njDLDK6UA==",
+ "requires": {
+ "is-posix-bracket": "^0.1.0"
+ }
+ },
+ "expand-range": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
+ "integrity": "sha512-AFASGfIlnIbkKPQwX1yHaDjFvh/1gyKJODme52V6IORh69uEYgZp0o9C+qsIGNVEiuuhQU0CSSl++Rlegg1qvA==",
+ "requires": {
+ "fill-range": "^2.1.0"
+ }
+ },
+ "express": {
+ "version": "4.16.2",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.16.2.tgz",
+ "integrity": "sha512-4mc9RUEAUpPMFR6gpXcnPt0/q2Zil35FTUr07ixWYX90RmUKL3jUbvTvJzkc/uL3r+A7kuWSiIqOyVUSWoZXWQ==",
+ "requires": {
+ "accepts": "~1.3.4",
+ "array-flatten": "1.1.1",
+ "body-parser": "1.18.2",
+ "content-disposition": "0.5.2",
+ "content-type": "~1.0.4",
+ "cookie": "0.3.1",
+ "cookie-signature": "1.0.6",
+ "debug": "2.6.9",
+ "depd": "~1.1.1",
+ "encodeurl": "~1.0.1",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "finalhandler": "1.1.0",
+ "fresh": "0.5.2",
+ "merge-descriptors": "1.0.1",
+ "methods": "~1.1.2",
+ "on-finished": "~2.3.0",
+ "parseurl": "~1.3.2",
+ "path-to-regexp": "0.1.7",
+ "proxy-addr": "~2.0.2",
+ "qs": "6.5.1",
+ "range-parser": "~1.2.0",
+ "safe-buffer": "5.1.1",
+ "send": "0.16.1",
+ "serve-static": "1.13.1",
+ "setprototypeof": "1.1.0",
+ "statuses": "~1.3.1",
+ "type-is": "~1.6.15",
+ "utils-merge": "1.0.1",
+ "vary": "~1.1.2"
+ },
+ "dependencies": {
+ "statuses": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
+ "integrity": "sha512-wuTCPGlJONk/a1kqZ4fQM2+908lC7fa7nPYpTC1EhnvqLX/IICbeP1OZGDtA374trpSq68YubKUMo8oRhN46yg=="
+ }
+ }
+ },
+ "ext": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz",
+ "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==",
+ "dev": true,
+ "requires": {
+ "type": "^2.7.2"
+ }
+ },
+ "extend": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",
+ "integrity": "sha512-u1aUSYGdAQxyguoP919qsgj24krDCtaO/DJFNPwFmojMmKp14gtCTVsc8lQSqRDFrwAch+mxMWC8/6ZJPz5Hpw=="
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
"version": "1.0.1",
- "bundled": true,
- "optional": true
- },
- "process-nextick-args": {
- "version": "2.0.0",
- "bundled": true,
- "optional": true
- },
- "rc": {
- "version": "1.2.7",
- "bundled": true,
- "optional": true,
- "requires": {
- "deep-extend": "^0.5.1",
- "ini": "~1.3.0",
- "minimist": "^1.2.0",
- "strip-json-comments": "~2.0.1"
- },
- "dependencies": {
- "minimist": {
- "version": "1.2.0",
- "bundled": true,
- "optional": true
- }
- }
- },
- "readable-stream": {
- "version": "2.3.6",
- "bundled": true,
- "optional": true,
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
"requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
+ "is-plain-object": "^2.0.4"
}
- },
- "rimraf": {
- "version": "2.6.2",
- "bundled": true,
- "optional": true,
+ }
+ }
+ },
+ "external-editor": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz",
+ "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==",
+ "dev": true,
+ "requires": {
+ "chardet": "^0.4.0",
+ "iconv-lite": "^0.4.17",
+ "tmp": "^0.0.33"
+ }
+ },
+ "extglob": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
+ "integrity": "sha512-1FOj1LOwn42TMrruOHGt18HemVnbwAmAak7krWk+wa93KXxGbK+2jpezm+ytJYDaBX0/SPLZFHKM7m+tKobWGg==",
+ "requires": {
+ "is-extglob": "^1.0.0"
+ }
+ },
+ "extsprintf": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g=="
+ },
+ "eyes": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
+ "integrity": "sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ=="
+ },
+ "fast-deep-equal": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
+ "integrity": "sha512-fueX787WZKCV0Is4/T2cyAdM4+x1S3MXXOAhavE1ys/W42SHAPacLTQhucja22QBYrfGw50M2sRiXPtTGv9Ymw==",
+ "dev": true
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
+ "integrity": "sha512-eIgZvM9C3P05kg0qxfqaVU6Tma4QedCPIByQOcemV0vju8ot3cS2DpHi4m2G2JvbSMI152rjfLX0p1pkSdyPlQ=="
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "dev": true
+ },
+ "fibers": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/fibers/-/fibers-3.0.0.tgz",
+ "integrity": "sha512-cAcOHOTbTMlcpNZvr94BNFsnBDBiEu9JP5MYcRLyl12HF/X0z3KvZyNzU9+BtI8lOIaV84PlDQJOKK3f5llJug=="
+ },
+ "figures": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
+ "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "^1.0.5"
+ }
+ },
+ "file-entry-cache": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz",
+ "integrity": "sha512-uXP/zGzxxFvFfcZGgBIwotm+Tdc55ddPAzF7iHshP4YGaXMww7rSF9peD9D1sui5ebONg5UobsZv+FfgEpGv/w==",
+ "dev": true,
+ "requires": {
+ "flat-cache": "^1.2.1",
+ "object-assign": "^4.0.1"
+ }
+ },
+ "file-saver": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-1.3.3.tgz",
+ "integrity": "sha512-2lGfU4gymmhXRUiPLeQlnlkMaSY8azJB9W8e/vFp44AlAOEvzf6XiBUoTHO9NBM4OVlehybxDM9B4SwLBh42mw=="
+ },
+ "file-uri-to-path": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
+ "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
+ "optional": true
+ },
+ "filename-regex": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
+ "integrity": "sha512-BTCqyBaWBTsauvnHiE8i562+EdJj+oUpkqWp2R1iCoR8f6oo8STRu3of7WJJ0TqWtxN50a5YFpzYK4Jj9esYfQ=="
+ },
+ "filesize": {
+ "version": "3.6.1",
+ "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz",
+ "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==",
+ "dev": true
+ },
+ "fill-range": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz",
+ "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==",
+ "requires": {
+ "is-number": "^2.1.0",
+ "isobject": "^2.0.0",
+ "randomatic": "^3.0.0",
+ "repeat-element": "^1.1.2",
+ "repeat-string": "^1.5.2"
+ }
+ },
+ "finalhandler": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz",
+ "integrity": "sha512-ejnvM9ZXYzp6PUPUyQBMBf0Co5VX2gr5H2VQe2Ui2jWXNlxv+PYZo8wpAymJNJdLsG1R4p+M4aynF8KuoUEwRw==",
+ "requires": {
+ "debug": "2.6.9",
+ "encodeurl": "~1.0.1",
+ "escape-html": "~1.0.3",
+ "on-finished": "~2.3.0",
+ "parseurl": "~1.3.2",
+ "statuses": "~1.3.1",
+ "unpipe": "~1.0.0"
+ },
+ "dependencies": {
+ "statuses": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
+ "integrity": "sha512-wuTCPGlJONk/a1kqZ4fQM2+908lC7fa7nPYpTC1EhnvqLX/IICbeP1OZGDtA374trpSq68YubKUMo8oRhN46yg=="
+ }
+ }
+ },
+ "find-cache-dir": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz",
+ "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==",
+ "dev": true,
+ "requires": {
+ "commondir": "^1.0.1",
+ "make-dir": "^3.0.2",
+ "pkg-dir": "^4.1.0"
+ },
+ "dependencies": {
+ "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": {
- "glob": "^7.0.5"
+ "semver": "^6.0.0"
}
},
- "safe-buffer": {
- "version": "5.1.1",
- "bundled": true,
- "optional": true
- },
- "safer-buffer": {
- "version": "2.1.2",
- "bundled": true,
- "optional": true
- },
- "sax": {
- "version": "1.2.4",
- "bundled": true,
- "optional": true
- },
"semver": {
- "version": "5.5.0",
- "bundled": true,
- "optional": true
- },
- "set-blocking": {
- "version": "2.0.0",
- "bundled": true,
- "optional": true
- },
- "signal-exit": {
- "version": "3.0.2",
- "bundled": true,
- "optional": true
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true
+ }
+ }
+ },
+ "find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+ "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^2.0.0"
+ }
+ },
+ "flat-cache": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz",
+ "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==",
+ "dev": true,
+ "requires": {
+ "circular-json": "^0.3.1",
+ "graceful-fs": "^4.1.2",
+ "rimraf": "~2.6.2",
+ "write": "^0.2.1"
+ }
+ },
+ "flatiron": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/flatiron/-/flatiron-0.4.3.tgz",
+ "integrity": "sha512-+X3/0hl9in0FJPsPB5/xTpkxxMzDSoA4cyon46HtXhrfEbpqBvKxpR+HJGqMjKv4jcBmoLjEtTVIAADJjLjv8A==",
+ "requires": {
+ "broadway": "~0.3.2",
+ "director": "1.2.7",
+ "optimist": "0.6.0",
+ "prompt": "0.2.14"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
+ "integrity": "sha512-iotkTvxc+TwOm5Ieim8VnSNvCDjCK9S8G3scJ50ZthspSxa7jx50jkhYduuAtAjvfDUwSgOwf8+If99AlOEhyw=="
},
- "string-width": {
- "version": "1.0.2",
- "bundled": true,
- "optional": true,
+ "optimist": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.0.tgz",
+ "integrity": "sha512-ubrZPyOU0AHpXkmwqfWolap+eHMwQ484AKivkf0ZGyysd6fUJZl7ow9iu5UNV1vCZv46HQ7EM83IC3NGJ820hg==",
"requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
+ "minimist": "~0.0.1",
+ "wordwrap": "~0.0.2"
}
+ }
+ }
+ },
+ "flatten": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz",
+ "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==",
+ "dev": true
+ },
+ "for-each": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz",
+ "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==",
+ "requires": {
+ "is-callable": "^1.2.7"
+ },
+ "dependencies": {
+ "is-callable": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
+ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA=="
+ }
+ }
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ=="
+ },
+ "for-own": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
+ "integrity": "sha512-SKmowqGTJoPzLO1T0BBJpkfp3EMacCMOuH40hOUbrbzElVktk4DioXVM99QkLCyKoiuOmyjgcWMpVz2xjE7LZw==",
+ "requires": {
+ "for-in": "^1.0.1"
+ }
+ },
+ "forever": {
+ "version": "0.15.3",
+ "resolved": "https://registry.npmjs.org/forever/-/forever-0.15.3.tgz",
+ "integrity": "sha512-yUy1bmHlsX9NasrUMOPk6CiE53y08+jMl8Xoc3LOTJ22BRJLpG9IXPa+oJMGanSMMumoV/aPcGmDu+nIFMMezQ==",
+ "requires": {
+ "cliff": "~0.1.9",
+ "clone": "^1.0.2",
+ "colors": "~0.6.2",
+ "flatiron": "~0.4.2",
+ "forever-monitor": "~1.7.0",
+ "nconf": "~0.6.9",
+ "nssocket": "~0.5.1",
+ "object-assign": "^3.0.0",
+ "optimist": "~0.6.0",
+ "path-is-absolute": "~1.0.0",
+ "prettyjson": "^1.1.2",
+ "shush": "^1.0.0",
+ "timespan": "~2.3.0",
+ "utile": "~0.2.1",
+ "winston": "~0.8.1"
+ },
+ "dependencies": {
+ "async": {
+ "version": "0.2.10",
+ "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
+ "integrity": "sha512-eAkdoKxU6/LkKDBzLpT+t6Ff5EtfSF4wx1WfJiPEEV7WNLnDaRXk0oVysiEPm262roaachGexwUv94WhSgN5TQ=="
},
- "string_decoder": {
- "version": "1.1.1",
- "bundled": true,
- "optional": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
+ "object-assign": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz",
+ "integrity": "sha512-jHP15vXVGeVh1HuaA2wY6lxk+whK/x4KBG88VXeRma7CCun7iGD5qPc4eYykQ9sdQvg8jkwFKsSxHln2ybW3xQ=="
},
- "strip-ansi": {
- "version": "3.0.1",
- "bundled": true,
- "optional": true,
+ "winston": {
+ "version": "0.8.3",
+ "resolved": "https://registry.npmjs.org/winston/-/winston-0.8.3.tgz",
+ "integrity": "sha512-fPoamsHq8leJ62D1M9V/f15mjQ1UHe4+7j1wpAT3fqgA5JqhJkk4aIfPEjfMTI9x6ZTjaLOpMAjluLtmgO5b6g==",
"requires": {
- "ansi-regex": "^2.0.0"
+ "async": "0.2.x",
+ "colors": "0.6.x",
+ "cycle": "1.0.x",
+ "eyes": "0.1.x",
+ "isstream": "0.1.x",
+ "pkginfo": "0.3.x",
+ "stack-trace": "0.0.x"
}
+ }
+ }
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw=="
+ },
+ "forever-monitor": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/forever-monitor/-/forever-monitor-1.7.2.tgz",
+ "integrity": "sha512-TGFkX9Hg1X0A4o0ShOvI7AH+p0Ra2kUfhA4kNL0/DY1lQO7T+DUBbSODFBQrykcrxjyw+D1RiawNOX3X2NFfrw==",
+ "requires": {
+ "broadway": "~0.3.6",
+ "chokidar": "^1.7.0",
+ "minimatch": "~3.0.2",
+ "ps-tree": "0.0.x",
+ "utile": "^0.3.0"
+ },
+ "dependencies": {
+ "async": {
+ "version": "0.9.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz",
+ "integrity": "sha512-l6ToIJIotphWahxxHyzK9bnLR6kM4jJIIgLShZeqLY7iboHoGkdgFl7W2/Ivi4SkMJYGKqW8vSuk0uKUj6qsSw=="
},
- "strip-json-comments": {
- "version": "2.0.1",
- "bundled": true,
- "optional": true
- },
- "tar": {
- "version": "4.4.1",
- "bundled": true,
- "optional": true,
- "requires": {
- "chownr": "^1.0.1",
- "fs-minipass": "^1.2.5",
- "minipass": "^2.2.4",
- "minizlib": "^1.1.0",
- "mkdirp": "^0.5.0",
- "safe-buffer": "^5.1.1",
- "yallist": "^3.0.2"
- }
+ "deep-equal": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-0.2.2.tgz",
+ "integrity": "sha512-FXgye2Jr6oEk01S7gmSrHrPEQ1ontR7wwl+nYiZ8h4SXlHVm0DYda74BIPcHz2s2qPz4+375IcAz1vsWLwddgQ=="
},
- "util-deprecate": {
- "version": "1.0.2",
- "bundled": true,
- "optional": true
+ "ncp": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/ncp/-/ncp-1.0.1.tgz",
+ "integrity": "sha512-akBX7I5X9KQDDWmYYgQlLbVbjkveTje2mioZjhLLrVt09akSZcoqXWE5LEn1E2fu8T7th1PZYGfewQsTkTLTmQ=="
},
- "wide-align": {
- "version": "1.1.2",
- "bundled": true,
- "optional": true,
+ "utile": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/utile/-/utile-0.3.0.tgz",
+ "integrity": "sha512-KaciY16ate/pJ7BAwBpVcfQlgJT02WRivIv8DlCX1cvg6WxaNEXHcdqazuS9fQ7PUoU5CH2UeY3wkqq16wRiWg==",
"requires": {
- "string-width": "^1.0.2"
+ "async": "~0.9.0",
+ "deep-equal": "~0.2.1",
+ "i": "0.3.x",
+ "mkdirp": "0.x.x",
+ "ncp": "1.0.x",
+ "rimraf": "2.x.x"
}
- },
- "wrappy": {
- "version": "1.0.2",
- "bundled": true,
- "optional": true
- },
- "yallist": {
- "version": "3.0.2",
- "bundled": true,
- "optional": true
}
}
},
+ "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"
+ }
+ },
+ "format-util": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/format-util/-/format-util-1.0.5.tgz",
+ "integrity": "sha512-varLbTj0e0yVyRpqQhuWV+8hlePAgaoFRhNFj50BNjEIrw1/DphHSObtqwskVCPWNgzwPoQrZAbfa/SBiicNeg=="
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==",
+ "dev": true,
+ "requires": {
+ "map-cache": "^0.2.2"
+ }
+ },
+ "fready": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fready/-/fready-1.0.0.tgz",
+ "integrity": "sha512-XyjZLP1efOKfAgAGQL8vNtqFPx9UlqP9K/8DQKOkwGihN3WsoaEdqSk3+mwMLRpl+7s0RFoOtJA94dsGuFQeqw=="
+ },
+ "fresh": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+ "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q=="
+ },
+ "from": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz",
+ "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==",
+ "dev": true
+ },
+ "fs-extra": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz",
+ "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
+ },
+ "fsevents": {
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
+ "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
+ "optional": true,
+ "requires": {
+ "bindings": "^1.5.0",
+ "nan": "^2.12.1"
+ }
+ },
"fstream": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz",
- "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=",
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz",
+ "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==",
"requires": {
"graceful-fs": "^4.1.2",
"inherits": "~2.0.0",
@@ -4746,52 +5581,115 @@
"rimraf": "2"
}
},
- "function-bind": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
- "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
- "dev": true
+ "function.prototype.name": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz",
+ "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.3",
+ "define-properties": "^1.2.1",
+ "functions-have-names": "^1.2.3",
+ "hasown": "^2.0.2",
+ "is-callable": "^1.2.7"
+ }
},
"functional-red-black-tree": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
- "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
+ "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==",
+ "dev": true
+ },
+ "functions-have-names": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
+ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ=="
+ },
+ "gensync": {
+ "version": "1.0.0-beta.2",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
"dev": true
},
"get-caller-file": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz",
- "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
+ "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==",
"dev": true
},
"get-func-name": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz",
- "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz",
+ "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==",
"dev": true
},
+ "get-intrinsic": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
+ "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
+ "requires": {
+ "call-bind-apply-helpers": "^1.0.2",
+ "es-define-property": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.1.1",
+ "function-bind": "^1.1.2",
+ "get-proto": "^1.0.1",
+ "gopd": "^1.2.0",
+ "has-symbols": "^1.1.0",
+ "hasown": "^2.0.2",
+ "math-intrinsics": "^1.1.0"
+ },
+ "dependencies": {
+ "function-bind": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="
+ }
+ }
+ },
+ "get-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
+ "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
+ "requires": {
+ "dunder-proto": "^1.0.1",
+ "es-object-atoms": "^1.0.0"
+ }
+ },
"get-stdin": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
- "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
+ "integrity": "sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==",
"dev": true
},
"get-stream": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
- "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+ "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==",
"dev": true
},
+ "get-symbol-description": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz",
+ "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==",
+ "dev": true,
+ "requires": {
+ "call-bound": "^1.0.3",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.6"
+ }
+ },
"get-value": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
- "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+ "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==",
"dev": true
},
"getpass": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
- "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+ "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==",
"requires": {
"assert-plus": "^1.0.0"
}
@@ -4812,7 +5710,7 @@
"glob-base": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
- "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
+ "integrity": "sha512-ab1S1g1EbO7YzauaJLkgLp7DZVAqj9M/dvKlTt8DkXA2tiOIcSMrlVI2J1RZyB5iJVccEscjGn+kpOG9788MHA==",
"requires": {
"glob-parent": "^2.0.0",
"is-glob": "^2.0.0"
@@ -4821,7 +5719,7 @@
"glob-parent": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
- "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
+ "integrity": "sha512-JDYOvfxio/t42HKdxkAYaCiBN7oYiuxykOxKxdaUW5Qn0zaYN3gRQWolrwdnf0shM9/EP0ebuuTmyoXNr1cC5w==",
"requires": {
"is-glob": "^2.0.0"
}
@@ -4829,7 +5727,7 @@
"global-dirs": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz",
- "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=",
+ "integrity": "sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==",
"dev": true,
"requires": {
"ini": "^1.3.4"
@@ -4841,14 +5739,23 @@
"integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
"dev": true
},
+ "globalthis": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz",
+ "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.2.1",
+ "gopd": "^1.0.1"
+ }
+ },
"globby": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz",
- "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=",
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
+ "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==",
"dev": true,
"requires": {
"array-union": "^1.0.1",
- "arrify": "^1.0.0",
"glob": "^7.0.3",
"object-assign": "^4.0.1",
"pify": "^2.0.0",
@@ -4858,7 +5765,7 @@
"pify": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
"dev": true
}
}
@@ -4866,30 +5773,35 @@
"globjoin": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz",
- "integrity": "sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM=",
+ "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==",
"dev": true
},
"gonzales-pe": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.2.3.tgz",
- "integrity": "sha512-Kjhohco0esHQnOiqqdJeNz/5fyPkOMD/d6XVjwTAoPGUFh0mCollPUTUTa2OZy4dYNAqlPIQdTiNzJTWdd9Htw==",
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz",
+ "integrity": "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==",
"dev": true,
"requires": {
- "minimist": "1.1.x"
+ "minimist": "^1.2.5"
},
"dependencies": {
"minimist": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.1.3.tgz",
- "integrity": "sha1-O+39kaktOQFvz6ocaB6Pqhoe/ag=",
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
"dev": true
}
}
},
+ "gopd": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
+ "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="
+ },
"got": {
"version": "6.7.1",
- "resolved": "http://registry.npmjs.org/got/-/got-6.7.1.tgz",
- "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=",
+ "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz",
+ "integrity": "sha512-Y/K3EDuiQN9rTZhBvPRWMLXIKdeD1Rj0nzunfoi0Yyn5WBEbzxXKU9Ub2X41oZBagVWOBU3MuDonFMgPWQFnwg==",
"dev": true,
"requires": {
"create-error-class": "^3.0.0",
@@ -4908,7 +5820,7 @@
"graceful-fs": {
"version": "4.1.11",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
- "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg="
+ "integrity": "sha512-9x6DLUuW+ROFdMTII9ec9t/FK8va6kYcC8/LggumssLM8kNv7IdFl3VrNUqgir2tJuBVxBga1QBoRziZacO5Zg=="
},
"growl": {
"version": "1.10.5",
@@ -4937,32 +5849,32 @@
"har-schema": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
- "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
+ "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q=="
},
"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"
},
"dependencies": {
"ajv": {
- "version": "6.6.1",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.6.1.tgz",
- "integrity": "sha512-ZoJjft5B+EJBjUyu9C9Hc0OZyPZSSlOF+plzouTrg6UlA8f+e/n8NIgBFG/9tppJtpPWfthHakK7juJdNDODww==",
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"requires": {
- "fast-deep-equal": "^2.0.1",
+ "fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
"json-schema-traverse": "^0.4.1",
"uri-js": "^4.2.2"
}
},
"fast-deep-equal": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
- "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk="
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
},
"json-schema-traverse": {
"version": "0.4.1",
@@ -4972,33 +5884,65 @@
}
},
"has": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz",
- "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=",
- "dev": true,
- "requires": {
- "function-bind": "^1.0.2"
- }
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz",
+ "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==",
+ "dev": true
},
"has-ansi": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
- "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==",
"dev": true,
"requires": {
"ansi-regex": "^2.0.0"
}
},
+ "has-bigints": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz",
+ "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg=="
+ },
"has-flag": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
- "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==",
"dev": true
},
+ "has-property-descriptors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
+ "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
+ "requires": {
+ "es-define-property": "^1.0.0"
+ }
+ },
+ "has-proto": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz",
+ "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==",
+ "dev": true,
+ "requires": {
+ "dunder-proto": "^1.0.0"
+ }
+ },
+ "has-symbols": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
+ "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="
+ },
+ "has-tostringtag": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
+ "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
+ "requires": {
+ "has-symbols": "^1.0.3"
+ }
+ },
"has-value": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
- "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==",
"dev": true,
"requires": {
"get-value": "^2.0.6",
@@ -5009,7 +5953,7 @@
"isobject": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
"dev": true
}
}
@@ -5017,7 +5961,7 @@
"has-values": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
- "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==",
"dev": true,
"requires": {
"is-number": "^3.0.0",
@@ -5027,7 +5971,7 @@
"is-number": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==",
"dev": true,
"requires": {
"kind-of": "^3.0.2"
@@ -5036,7 +5980,7 @@
"kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
"dev": true,
"requires": {
"is-buffer": "^1.1.5"
@@ -5047,7 +5991,7 @@
"kind-of": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
- "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==",
"dev": true,
"requires": {
"is-buffer": "^1.1.5"
@@ -5056,62 +6000,82 @@
}
},
"hash-base": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
- "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.5.tgz",
+ "integrity": "sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg==",
"dev": true,
"requires": {
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
+ "inherits": "^2.0.4",
+ "safe-buffer": "^5.2.1"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "dev": true
+ }
}
},
"hash.js": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.5.tgz",
- "integrity": "sha512-eWI5HG9Np+eHV1KQhisXWwM+4EPPYe5dFX1UZZH7k/E3JzDEazVH+VGlZi6R94ZqImq+A3D1mCEtrFIfg/E7sA==",
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
+ "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
"dev": true,
"requires": {
"inherits": "^2.0.3",
"minimalistic-assert": "^1.0.1"
}
},
+ "hasown": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+ "requires": {
+ "function-bind": "^1.1.2"
+ },
+ "dependencies": {
+ "function-bind": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="
+ }
+ }
+ },
"he": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz",
- "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=",
+ "integrity": "sha512-z/GDPjlRMNOa2XJiB4em8wJpuuBfrFOlYKTZxtpkdr1uPdibHI8rYA3MY0KDObpVyaes0e/aunid/t88ZI2EKA==",
"dev": true
},
"heap": {
- "version": "0.2.6",
- "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.6.tgz",
- "integrity": "sha1-CH4fELBGky/IWU3Z5tN4r8nR5aw="
+ "version": "0.2.7",
+ "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz",
+ "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg=="
},
"history": {
- "version": "4.7.2",
- "resolved": "https://registry.npmjs.org/history/-/history-4.7.2.tgz",
- "integrity": "sha512-1zkBRWW6XweO0NBcjiphtVJVsIQ+SXF29z9DVkceeaSLVMFXHool+fdCZD4spDCfZJCILPILc3bm7Bc+HRi0nA==",
+ "version": "4.10.1",
+ "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz",
+ "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==",
"requires": {
- "invariant": "^2.2.1",
+ "@babel/runtime": "^7.1.2",
"loose-envify": "^1.2.0",
- "resolve-pathname": "^2.2.0",
- "value-equal": "^0.4.0",
- "warning": "^3.0.0"
- },
- "dependencies": {
- "warning": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz",
- "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=",
- "requires": {
- "loose-envify": "^1.0.0"
- }
- }
+ "resolve-pathname": "^3.0.0",
+ "tiny-invariant": "^1.0.2",
+ "tiny-warning": "^1.0.0",
+ "value-equal": "^1.0.1"
}
},
"hmac-drbg": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
- "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
+ "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==",
"dev": true,
"requires": {
"hash.js": "^1.0.3",
@@ -5124,16 +6088,6 @@
"resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz",
"integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw=="
},
- "home-or-tmp": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz",
- "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=",
- "dev": true,
- "requires": {
- "os-homedir": "^1.0.0",
- "os-tmpdir": "^1.0.1"
- }
- },
"hoopy": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz",
@@ -5141,21 +6095,21 @@
"dev": true
},
"hosted-git-info": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz",
- "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==",
+ "version": "2.8.9",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
+ "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
"dev": true
},
"html-comment-regex": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.1.tgz",
- "integrity": "sha1-ZouTd26q5V696POtRkswekljYl4=",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz",
+ "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==",
"dev": true
},
"html-element": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/html-element/-/html-element-2.2.0.tgz",
- "integrity": "sha1-w8H/iMJh23TQr2OR7vkMNG+QBzA=",
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/html-element/-/html-element-2.3.1.tgz",
+ "integrity": "sha512-xnFt2ZkbFcjc+JoAtg3Hl89VeEZDjododu4VCPkRvFmBTHHA9U1Nt6hLUWfW2O+6Sl/rT1hHK/PivleX3PdBJQ==",
"requires": {
"class-list": "~0.1.1"
}
@@ -5163,45 +6117,66 @@
"html-tags": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz",
- "integrity": "sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=",
+ "integrity": "sha512-+Il6N8cCo2wB/Vd3gqy/8TZhTD3QvcVeQLCnZiGkGCH3JP28IgGAY41giccp2W4R3jfyJPAP318FQTa1yU7K7g==",
"dev": true
},
"htmlparser2": {
- "version": "3.9.2",
- "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz",
- "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=",
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz",
+ "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==",
"dev": true,
"requires": {
- "domelementtype": "^1.3.0",
+ "domelementtype": "^1.3.1",
"domhandler": "^2.3.0",
"domutils": "^1.5.1",
"entities": "^1.1.1",
"inherits": "^2.0.1",
- "readable-stream": "^2.0.2"
+ "readable-stream": "^3.1.1"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "dev": true
+ },
+ "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==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.2.0"
+ }
+ }
}
},
"http-errors": {
- "version": "1.6.2",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz",
- "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=",
+ "version": "1.6.3",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
+ "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==",
"requires": {
- "depd": "1.1.1",
- "inherits": "2.0.3",
- "setprototypeof": "1.0.3",
- "statuses": ">= 1.3.1 < 2"
- },
- "dependencies": {
- "depd": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz",
- "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k="
- }
+ "depd": "~1.1.2",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.1.0",
+ "statuses": ">= 1.4.0 < 2"
}
},
"http-signature": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
- "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+ "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==",
"requires": {
"assert-plus": "^1.0.0",
"jsprim": "^1.2.2",
@@ -5211,13 +6186,13 @@
"https-browserify": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
- "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=",
+ "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==",
"dev": true
},
"hyperscript": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/hyperscript/-/hyperscript-2.0.2.tgz",
- "integrity": "sha1-ODnLpFVUvf4nu4HCFC0WhPgTWvU=",
+ "integrity": "sha512-uggBAYfHFC5WyZQXlJ61BNZbPmJbschcvfYNhYdZWCp+0J8KYb5Du8nQuk8Ru+ThoCNb01B0tPtnTRqnrFBkVg==",
"requires": {
"browser-split": "0.0.0",
"class-list": "~0.1.0",
@@ -5225,9 +6200,9 @@
}
},
"i": {
- "version": "0.3.6",
- "resolved": "https://registry.npmjs.org/i/-/i-0.3.6.tgz",
- "integrity": "sha1-2WyScyB28HJxG2sQ/X1PZa2O4j0="
+ "version": "0.3.7",
+ "resolved": "https://registry.npmjs.org/i/-/i-0.3.7.tgz",
+ "integrity": "sha512-FYz4wlXgkQwIPqhzC5TdNMLSE5+GS1IIDJZY/1ZiEPCT2S3COUVZeT5OW4BmW4r5LHLQuOosSwsvnroG9GR59Q=="
},
"iconv-lite": {
"version": "0.4.19",
@@ -5235,39 +6210,39 @@
"integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ=="
},
"ieee754": {
- "version": "1.1.12",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz",
- "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==",
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
"dev": true
},
"ignore": {
- "version": "3.3.7",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz",
- "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==",
+ "version": "3.3.10",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz",
+ "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==",
"dev": true
},
"ignore-by-default": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz",
- "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=",
+ "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==",
"dev": true
},
"import-lazy": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz",
- "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=",
+ "integrity": "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==",
"dev": true
},
"imurmurhash": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
"dev": true
},
"indent-string": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
- "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
+ "integrity": "sha512-aqwDFWSgSgfRaEwao5lg5KEcVd/2a+D1rvoG7NdilmYz0NwRk6StWpWdz/Hpk34MKPpx7s8XxUqimfcQK6gGlg==",
"dev": true,
"requires": {
"repeating": "^2.0.0"
@@ -5276,18 +6251,18 @@
"indexes-of": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz",
- "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=",
+ "integrity": "sha512-bup+4tap3Hympa+JBJUG7XuOsdNQ6fxt0MHyXMKuLBKn0OqsTfvUxkUrroEX1+B2VsSHvCjiIcZVxRtYa4nllA==",
"dev": true
},
"indexof": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
- "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10="
+ "integrity": "sha512-i0G7hLJ1z0DE8dsqJa2rycj9dBmNKgXBvotXtZYXakU9oivfB9Uj2ZBC27qqef2U58/ZLwalxa1X/RDCdkHtVg=="
},
"inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
"requires": {
"once": "^1.3.0",
"wrappy": "1"
@@ -5296,7 +6271,7 @@
"inherits": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+ "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw=="
},
"ini": {
"version": "1.3.5",
@@ -5325,127 +6300,79 @@
"through": "^2.3.6"
},
"dependencies": {
- "ansi-escapes": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.0.0.tgz",
- "integrity": "sha512-O/klc27mWNUigtv0F8NJWbLF00OcegQalkqKURWdosW08YZKi4m6CnSUSvIZG1otNJbTWhN01Hhz389DW7mvDQ==",
- "dev": true
- },
"ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz",
+ "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==",
"dev": true
},
"ansi-styles": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
- "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
"requires": {
"color-convert": "^1.9.0"
}
},
"chalk": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
- "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"dev": true,
"requires": {
- "ansi-styles": "^3.1.0",
+ "ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
- "supports-color": "^4.0.0"
- }
- },
- "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=",
- "dev": true,
- "requires": {
- "restore-cursor": "^2.0.0"
- }
- },
- "figures": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
- "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
- "dev": true,
- "requires": {
- "escape-string-regexp": "^1.0.5"
+ "supports-color": "^5.3.0"
}
},
"has-flag": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
- "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
"dev": true
},
- "onetime": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
- "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
- "dev": true,
- "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=",
- "dev": true,
- "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==",
- "dev": true,
- "requires": {
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
- }
- },
"strip-ansi": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==",
"dev": true,
"requires": {
"ansi-regex": "^3.0.0"
}
},
"supports-color": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
- "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"dev": true,
"requires": {
- "has-flag": "^2.0.0"
+ "has-flag": "^3.0.0"
}
}
}
},
- "interpret": {
+ "internal-slot": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz",
- "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz",
+ "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==",
+ "requires": {
+ "es-errors": "^1.3.0",
+ "hasown": "^2.0.2",
+ "side-channel": "^1.1.0"
+ }
+ },
+ "interpret": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
+ "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==",
"dev": true
},
"invariant": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz",
- "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=",
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dev": true,
"requires": {
"loose-envify": "^1.0.0"
}
@@ -5453,91 +6380,123 @@
"invert-kv": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
- "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
+ "integrity": "sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==",
"dev": true
},
"ipaddr.js": {
- "version": "1.5.2",
- "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.5.2.tgz",
- "integrity": "sha1-1LUFvemUaYfM8PxY2QEP+WB+P6A="
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
+ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
},
"is-absolute-url": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz",
- "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=",
+ "integrity": "sha512-vOx7VprsKyllwjSkLV79NIhpyLfr3jAp7VaTCMXOJHu4m0Ew1CZ2fcjASwmV1jI3BWuWHB013M48eyeldk9gYg==",
"dev": true
},
"is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz",
+ "integrity": "sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==",
"dev": true,
"requires": {
- "kind-of": "^6.0.0"
- },
- "dependencies": {
- "kind-of": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
- "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
- "dev": true
- }
+ "hasown": "^2.0.0"
}
},
"is-alphabetical": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.1.tgz",
- "integrity": "sha1-x3B5zJHU76x3W+EDS/LSQ/lebwg=",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz",
+ "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==",
"dev": true
},
"is-alphanumeric": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz",
- "integrity": "sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ=",
+ "integrity": "sha512-ZmRL7++ZkcMOfDuWZuMJyIVLr2keE1o/DeNWh1EmgqGhUcV+9BIVsx0BcSBOHTZqzjs4+dISzr2KAeBEWGgXeA==",
"dev": true
},
"is-alphanumerical": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.1.tgz",
- "integrity": "sha1-37SqTRCF4zvbYcLe6cgOnGwZ9Ts=",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz",
+ "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==",
"dev": true,
"requires": {
"is-alphabetical": "^1.0.0",
"is-decimal": "^1.0.0"
}
},
+ "is-arguments": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz",
+ "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==",
+ "requires": {
+ "call-bound": "^1.0.2",
+ "has-tostringtag": "^1.0.2"
+ }
+ },
+ "is-array-buffer": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz",
+ "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==",
+ "requires": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.3",
+ "get-intrinsic": "^1.2.6"
+ }
+ },
"is-arrayish": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.1.tgz",
- "integrity": "sha1-wt/DhquqDD4zxI2z/ocFnmkGXv0=",
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
"dev": true
},
+ "is-async-function": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz",
+ "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==",
+ "dev": true,
+ "requires": {
+ "async-function": "^1.0.0",
+ "call-bound": "^1.0.3",
+ "get-proto": "^1.0.1",
+ "has-tostringtag": "^1.0.2",
+ "safe-regex-test": "^1.1.0"
+ }
+ },
+ "is-bigint": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz",
+ "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==",
+ "requires": {
+ "has-bigints": "^1.0.2"
+ }
+ },
"is-binary-path": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
- "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+ "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==",
"requires": {
"binary-extensions": "^1.0.0"
}
},
+ "is-boolean-object": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz",
+ "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==",
+ "requires": {
+ "call-bound": "^1.0.3",
+ "has-tostringtag": "^1.0.2"
+ }
+ },
"is-buffer": {
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
"integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
},
- "is-builtin-module": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
- "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
- "dev": true,
- "requires": {
- "builtin-modules": "^1.0.0"
- }
- },
"is-callable": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz",
- "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=",
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
+ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
"dev": true
},
"is-ci": {
@@ -5549,69 +6508,76 @@
"ci-info": "^1.5.0"
}
},
+ "is-core-module": {
+ "version": "2.16.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
+ "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
+ "dev": true,
+ "requires": {
+ "hasown": "^2.0.2"
+ }
+ },
"is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz",
+ "integrity": "sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==",
"dev": true,
"requires": {
- "kind-of": "^6.0.0"
- },
- "dependencies": {
- "kind-of": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
- "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
- "dev": true
- }
+ "hasown": "^2.0.0"
+ }
+ },
+ "is-data-view": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz",
+ "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==",
+ "dev": true,
+ "requires": {
+ "call-bound": "^1.0.2",
+ "get-intrinsic": "^1.2.6",
+ "is-typed-array": "^1.1.13"
}
},
"is-date-object": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz",
- "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=",
- "dev": true
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz",
+ "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==",
+ "dev": true,
+ "requires": {
+ "call-bound": "^1.0.2",
+ "has-tostringtag": "^1.0.2"
+ }
},
"is-decimal": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.1.tgz",
- "integrity": "sha1-9ftqlJlq2ejjdh+/vQkfH8qMToI=",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz",
+ "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==",
"dev": true
},
"is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz",
+ "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==",
"dev": true,
"requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
- "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
- "dev": true
- }
+ "is-accessor-descriptor": "^1.0.1",
+ "is-data-descriptor": "^1.0.1"
}
},
"is-directory": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz",
- "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=",
+ "integrity": "sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==",
"dev": true
},
"is-dotfile": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz",
- "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE="
+ "integrity": "sha512-9YclgOGtN/f8zx0Pr4FQYMdibBiTaH3sn52vjYip4ZSf6C4/6RfTEZ+MR4GvKhCxdPh21Bg42/WL55f6KSnKpg=="
},
"is-equal-shallow": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",
- "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
+ "integrity": "sha512-0EygVC5qPvIyb+gSz7zdD5/AAoS6Qrx1e//6N4yv4oNm30kqvdmG66oZFWVlQHUWe5OjP08FuTw2IdT0EOTcYA==",
"requires": {
"is-primitive": "^2.0.0"
}
@@ -5619,65 +6585,85 @@
"is-extendable": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik="
+ "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw=="
},
"is-extglob": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
- "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA="
+ "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww=="
},
- "is-finite": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
- "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "is-finalizationregistry": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz",
+ "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==",
"dev": true,
"requires": {
- "number-is-nan": "^1.0.0"
+ "call-bound": "^1.0.3"
}
},
+ "is-finite": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz",
+ "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==",
+ "dev": 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=",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==",
+ "dev": true
+ },
+ "is-generator-function": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz",
+ "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==",
"dev": true,
"requires": {
- "number-is-nan": "^1.0.0"
+ "call-bound": "^1.0.3",
+ "get-proto": "^1.0.0",
+ "has-tostringtag": "^1.0.2",
+ "safe-regex-test": "^1.1.0"
}
},
"is-glob": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
- "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+ "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==",
"requires": {
"is-extglob": "^1.0.0"
}
},
"is-hexadecimal": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.1.tgz",
- "integrity": "sha1-bghLvJIGH7sJcexYts5tQE4k2mk=",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz",
+ "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==",
"dev": true
},
"is-installed-globally": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz",
- "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=",
+ "integrity": "sha512-ERNhMg+i/XgDwPIPF3u24qpajVreaiSuvpb1Uu0jugw7KKcxGyCX8cgp8P5fwTmAuXku6beDHHECdKArjlg7tw==",
"dev": true,
"requires": {
"global-dirs": "^0.1.0",
"is-path-inside": "^1.0.0"
}
},
+ "is-map": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz",
+ "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw=="
+ },
"is-npm": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz",
- "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=",
+ "integrity": "sha512-9r39FIr3d+KD9SbX0sfMsHzb5PP3uimOiwr3YupUaUFG4W0l1U57Rx3utpttV7qz5U3jmrO5auUa04LU9pyHsg==",
"dev": true
},
"is-number": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
- "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
+ "integrity": "sha512-QUzH43Gfb9+5yckcrSA0VBDwEtDUchrk4F6tfJZQuNzDJbEDB9cZNzSfXGQ1jqmdDY/kl41lUOWM9syA8z8jlg==",
"requires": {
"kind-of": "^3.0.2"
},
@@ -5685,38 +6671,32 @@
"kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
"requires": {
"is-buffer": "^1.1.5"
}
}
}
},
+ "is-number-object": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz",
+ "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==",
+ "requires": {
+ "call-bound": "^1.0.3",
+ "has-tostringtag": "^1.0.2"
+ }
+ },
"is-obj": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
- "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
- "dev": true
- },
- "is-path-cwd": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz",
- "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=",
+ "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==",
"dev": true
},
- "is-path-in-cwd": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz",
- "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=",
- "dev": true,
- "requires": {
- "is-path-inside": "^1.0.0"
- }
- },
"is-path-inside": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz",
- "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
+ "integrity": "sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g==",
"dev": true,
"requires": {
"path-is-inside": "^1.0.1"
@@ -5725,7 +6705,7 @@
"is-plain-obj": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
- "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=",
+ "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==",
"dev": true
},
"is-plain-object": {
@@ -5740,7 +6720,7 @@
"isobject": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
"dev": true
}
}
@@ -5748,38 +6728,35 @@
"is-posix-bracket": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz",
- "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q="
+ "integrity": "sha512-Yu68oeXJ7LeWNmZ3Zov/xg/oDBnBK2RNxwYY1ilNJX+tKKZqgPK+qOn/Gs9jEu66KDY9Netf5XLKNGzas/vPfQ=="
},
"is-primitive": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz",
- "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU="
- },
- "is-promise": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
- "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
- "dev": true
+ "integrity": "sha512-N3w1tFaRfk3UrPfqeRyD+GYDASU3W5VinKhlORy8EWVf/sIdDL9GAcew85XmktCfH+ngG7SRXEVDoO18WMdB/Q=="
},
"is-redirect": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz",
- "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=",
+ "integrity": "sha512-cr/SlUEe5zOGmzvj9bUyC4LVvkNVAXu4GytXLNMr1pny+a65MpQ9IJzFHD5vi7FyJgb4qt27+eS3TuQnqB+RQw==",
"dev": true
},
"is-regex": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
- "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz",
+ "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==",
"dev": true,
"requires": {
- "has": "^1.0.1"
+ "call-bound": "^1.0.2",
+ "gopd": "^1.2.0",
+ "has-tostringtag": "^1.0.2",
+ "hasown": "^2.0.2"
}
},
"is-regexp": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz",
- "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=",
+ "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==",
"dev": true
},
"is-resolvable": {
@@ -5789,120 +6766,170 @@
"dev": true
},
"is-retry-allowed": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz",
- "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz",
+ "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==",
"dev": true
},
+ "is-set": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz",
+ "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg=="
+ },
+ "is-shared-array-buffer": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz",
+ "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==",
+ "requires": {
+ "call-bound": "^1.0.3"
+ }
+ },
"is-stream": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
- "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
+ "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ=="
+ },
+ "is-string": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz",
+ "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==",
+ "requires": {
+ "call-bound": "^1.0.3",
+ "has-tostringtag": "^1.0.2"
+ }
},
"is-supported-regexp-flag": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-supported-regexp-flag/-/is-supported-regexp-flag-1.0.0.tgz",
- "integrity": "sha1-i1IMhfrnolM4LUsCZS4EVXbhO7g=",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-supported-regexp-flag/-/is-supported-regexp-flag-1.0.1.tgz",
+ "integrity": "sha512-3vcJecUUrpgCqc/ca0aWeNu64UGgxcvO60K/Fkr1N6RSvfGCTU60UKN68JDmKokgba0rFFJs12EnzOQa14ubKQ==",
"dev": true
},
"is-svg": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz",
- "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=",
+ "integrity": "sha512-Ya1giYJUkcL/94quj0+XGcmts6cETPBW1MiFz1ReJrnDJ680F52qpAEGAEGU0nq96FRGIGPx6Yo1CyPXcOoyGw==",
"dev": true,
"requires": {
"html-comment-regex": "^1.1.0"
}
},
"is-symbol": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz",
- "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=",
- "dev": true
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz",
+ "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==",
+ "dev": true,
+ "requires": {
+ "call-bound": "^1.0.2",
+ "has-symbols": "^1.1.0",
+ "safe-regex-test": "^1.1.0"
+ }
+ },
+ "is-typed-array": {
+ "version": "1.1.15",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz",
+ "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==",
+ "dev": true,
+ "requires": {
+ "which-typed-array": "^1.1.16"
+ }
},
"is-typedarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
- "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
+ "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA=="
},
"is-utf8": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
- "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
+ "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==",
"dev": true
},
+ "is-weakmap": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz",
+ "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w=="
+ },
+ "is-weakref": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz",
+ "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==",
+ "dev": true,
+ "requires": {
+ "call-bound": "^1.0.3"
+ }
+ },
+ "is-weakset": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz",
+ "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==",
+ "requires": {
+ "call-bound": "^1.0.3",
+ "get-intrinsic": "^1.2.6"
+ }
+ },
"is-whitespace-character": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.1.tgz",
- "integrity": "sha1-muAXbzKCtlRXoZks2whPil+DPjs=",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz",
+ "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==",
"dev": true
},
"is-windows": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.1.tgz",
- "integrity": "sha1-MQ23D3QtJZoWo2kgK1GvhCMzENk=",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
"dev": true
},
"is-word-character": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.1.tgz",
- "integrity": "sha1-WgP6HqkazopusMfNdw64bWXIvvs=",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz",
+ "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==",
"dev": true
},
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
},
"isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
"dev": true
},
"isnumeric": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/isnumeric/-/isnumeric-0.2.0.tgz",
- "integrity": "sha1-ojR7o2DeGeM9D/1ZD933dVy/LmQ=",
+ "integrity": "sha512-uSJoAwnN1eCKDFKi8hL3UCYJSkQv+NwhKzhevUPIn/QZ8ILO21f+wQnlZHU0eh1rsLO1gI4w/HQdeOSTKwlqMg==",
"dev": true
},
"isobject": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
- "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==",
"requires": {
"isarray": "1.0.0"
}
},
- "isomorphic-fetch": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz",
- "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=",
- "requires": {
- "node-fetch": "^1.0.1",
- "whatwg-fetch": ">=0.10.0"
- }
- },
"isstream": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
- "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
+ "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g=="
},
"js-base64": {
- "version": "2.4.3",
- "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.3.tgz",
- "integrity": "sha512-H7ErYLM34CvDMto3GbD6xD0JLUGYXR3QTcH6B/tr4Hi/QpSThnCsIp+Sy5FRTw3B0d6py4HcNkW7nO/wdtGWEw==",
+ "version": "2.6.4",
+ "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz",
+ "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==",
"dev": true
},
"js-tokens": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
- "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls="
+ "integrity": "sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg=="
},
"js-yaml": {
"version": "3.7.0",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz",
- "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=",
+ "integrity": "sha512-eIlkGty7HGmntbV6P/ZlAsoncFLGsNoM27lkTzS+oneY/EiNhj+geqD9ezg/ip+SW6Var0BJU2JtV0vEUZpWVQ==",
"requires": {
"argparse": "^1.0.7",
"esprima": "^2.6.0"
@@ -5911,19 +6938,19 @@
"esprima": {
"version": "2.7.3",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
- "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE="
+ "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A=="
}
}
},
"jsbn": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
- "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
+ "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg=="
},
"jsesc": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
- "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz",
+ "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==",
"dev": true
},
"json-loader": {
@@ -5933,20 +6960,20 @@
"dev": true
},
"json-parse-better-errors": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.1.tgz",
- "integrity": "sha512-xyQpxeWWMKyJps9CuGJYeng6ssI5bpqS9ltQpdVQ90t4ql6NdnxFKh95JcRt2cun/DjMVNrdjniLPuMA69xmCw==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
+ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
"dev": true
},
"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-ref-parser": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/json-schema-ref-parser/-/json-schema-ref-parser-1.4.1.tgz",
- "integrity": "sha1-wMLkOL8HlnI7AkUbrovH3Qs3/tA=",
+ "integrity": "sha512-GdF0nCPo+cxX7/sgu0pIH4PI1uNUBZHsZOaOCrGha8rL7JoaIKYJd7iNDeqmwJZrbOwXw1g51knhz/HJdw02nA==",
"requires": {
"call-me-maybe": "^1.0.1",
"debug": "^2.2.0",
@@ -5958,58 +6985,62 @@
"es6-promise": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz",
- "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM="
+ "integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg=="
},
"ono": {
"version": "2.2.5",
"resolved": "https://registry.npmjs.org/ono/-/ono-2.2.5.tgz",
- "integrity": "sha1-2vCUiLURdNp6fkJ136sxtDj/oOM="
+ "integrity": "sha512-pi/dX/DqBA9O8FFTgdR2uuYBQoW40QIB0UW7vH1QcRpoTsYA/ANcWspzD7pFxyrs+P09/K5fKAVdr9k42twy3A=="
}
}
},
"json-schema-traverse": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
- "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=",
+ "integrity": "sha512-4JD/Ivzg7PoW8NzdrBSr3UFwC9mHgvI7Z6z3QGBsSHgKaRTUDmyZAAKJo2UbG1kUVfS9WS8bi36N49U1xw43DA==",
"dev": true
},
"json-stable-stringify-without-jsonify": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
- "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
"dev": true
},
"json-stringify-safe": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
- "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
+ "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA=="
},
"json5": {
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
- "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
+ "integrity": "sha512-4xrs1aW+6N5DalkqSVA8fxh458CXvR99WU8WLKmq4v8eWAL86Xo3BVqyd3SkA9wEVjCMqyvvRRkshAdOnBp5rw==",
"dev": true
},
- "jsonify": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
- "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM="
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.6"
+ }
},
"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"
}
},
"just-extend": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.0.2.tgz",
- "integrity": "sha512-FrLwOgm+iXrPV+5zDU6Jqu4gCRXbWEQg2O3SKONsWE4w7AXFRkryS53bpWdaL9cNol+AmR3AEYz6kn+o0fCPnw==",
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz",
+ "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==",
"dev": true
},
"kind-of": {
@@ -6026,7 +7057,7 @@
"latest-version": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz",
- "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=",
+ "integrity": "sha512-Be1YRHWWlZaSsrz2U+VInk+tO0EwLIyV+23RhWLINJYwg/UIikxjlj3MhH37/6/EDCAusjajvMkMMUXRaMWl/w==",
"dev": true,
"requires": {
"package-json": "^4.0.0"
@@ -6035,12 +7066,18 @@
"lazy": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/lazy/-/lazy-1.0.11.tgz",
- "integrity": "sha1-2qBoIGKCVCwIgojpdcKXwa53tpA="
+ "integrity": "sha512-Y+CjUfLmIpoUCCRl0ub4smrYtGGr5AOa2AKOaWelGHOGz33X/Y/KizefGqbkwfz44+cnq/+9habclf8vOmu2LA=="
+ },
+ "lazy-cache": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
+ "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==",
+ "dev": true
},
"lcid": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
- "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
+ "integrity": "sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==",
"dev": true,
"requires": {
"invert-kv": "^1.0.0"
@@ -6049,7 +7086,7 @@
"levn": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
- "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==",
"dev": true,
"requires": {
"prelude-ls": "~1.1.2",
@@ -6059,12 +7096,12 @@
"linkedlist-js": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/linkedlist-js/-/linkedlist-js-1.3.0.tgz",
- "integrity": "sha1-K0H5MzjFOGg/WUCgyHhROIv13ng="
+ "integrity": "sha512-YwgG4Et8dJF04nsn9YuyrydUJvwmJHOQo7PzxvkT09NTgQ1yC+vXHGBolo48rTjAItIYR7YWIXh6xZsavCBSvQ=="
},
"listenercount": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz",
- "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc="
+ "integrity": "sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ=="
},
"livereload": {
"version": "0.7.0",
@@ -6073,32 +7110,14 @@
"dev": true,
"requires": {
"chokidar": "^1.7.0",
- "opts": ">= 1.2.0",
- "ws": "^1.1.5"
- },
- "dependencies": {
- "ultron": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz",
- "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=",
- "dev": true
- },
- "ws": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz",
- "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==",
- "dev": true,
- "requires": {
- "options": ">=0.0.5",
- "ultron": "1.0.x"
- }
- }
+ "opts": ">= 1.2.0",
+ "ws": "^1.1.5"
}
},
"load-json-file": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
- "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
+ "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==",
"dev": true,
"requires": {
"graceful-fs": "^4.1.2",
@@ -6111,32 +7130,43 @@
"pify": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
"dev": true
}
}
},
"loader-runner": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.1.tgz",
- "integrity": "sha512-By6ZFY7ETWOc9RFaAIb23IjJVcM4dvJC/N57nmdz9RSkMXvAXGI7SyVlAw3v8vjtDRlqThgVDVmTnr9fqMlxkw==",
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz",
+ "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==",
"dev": true
},
"loader-utils": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz",
- "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz",
+ "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",
"dev": true,
"requires": {
- "big.js": "^3.1.3",
- "emojis-list": "^2.0.0",
- "json5": "^0.5.0"
+ "big.js": "^5.2.2",
+ "emojis-list": "^3.0.0",
+ "json5": "^1.0.1"
+ },
+ "dependencies": {
+ "json5": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
+ "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.0"
+ }
+ }
}
},
"locate-path": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
- "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+ "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==",
"dev": true,
"requires": {
"p-locate": "^2.0.0",
@@ -6151,63 +7181,63 @@
"lodash._reinterpolate": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
- "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=",
+ "integrity": "sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA==",
"dev": true
},
"lodash.cond": {
"version": "4.5.2",
"resolved": "https://registry.npmjs.org/lodash.cond/-/lodash.cond-4.5.2.tgz",
- "integrity": "sha1-9HGh2khr5g9quVXRcRVSPdHSVdU=",
+ "integrity": "sha512-RWjUhzGbzG/KfDwk+onqdXvrsNv47G9UCMJgSKalPTSqJQyxZhQophG9jgqLf+15TIbZ5a/yG2YKOWsH3dVy9A==",
"dev": true
},
"lodash.debounce": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
- "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168="
+ "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow=="
},
"lodash.defaultsdeep": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.0.tgz",
- "integrity": "sha1-vsECT4WxvZbL6kBbI8FK1kQ6b4E="
+ "version": "4.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz",
+ "integrity": "sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA=="
},
"lodash.get": {
"version": "4.4.2",
"resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
- "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk="
+ "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ=="
},
"lodash.isequal": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
- "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA="
+ "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ=="
},
"lodash.memoize": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
- "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4="
+ "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag=="
},
"lodash.template": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.4.0.tgz",
- "integrity": "sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=",
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz",
+ "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==",
"dev": true,
"requires": {
- "lodash._reinterpolate": "~3.0.0",
+ "lodash._reinterpolate": "^3.0.0",
"lodash.templatesettings": "^4.0.0"
}
},
"lodash.templatesettings": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz",
- "integrity": "sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=",
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz",
+ "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==",
"dev": true,
"requires": {
- "lodash._reinterpolate": "~3.0.0"
+ "lodash._reinterpolate": "^3.0.0"
}
},
"lodash.uniq": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
- "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=",
+ "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==",
"dev": true
},
"log-symbols": {
@@ -6220,38 +7250,38 @@
},
"dependencies": {
"ansi-styles": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
- "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
"requires": {
"color-convert": "^1.9.0"
}
},
"chalk": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
- "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"dev": true,
"requires": {
- "ansi-styles": "^3.1.0",
+ "ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
- "supports-color": "^4.0.0"
+ "supports-color": "^5.3.0"
}
},
"has-flag": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
- "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
"dev": true
},
"supports-color": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
- "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"dev": true,
"requires": {
- "has-flag": "^2.0.0"
+ "has-flag": "^3.0.0"
}
}
}
@@ -6265,19 +7295,19 @@
"longest": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
- "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=",
+ "integrity": "sha512-k+yt5n3l48JU4k8ftnKG6V7u32wyH2NfKzeMto9F/QRE0amxy/LayxwlvjjkZEIzqR+19IrtFO8p5kB9QaYUFg==",
"dev": true
},
"longest-streak": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.2.tgz",
- "integrity": "sha512-TmYTeEYxiAmSVdpbnQDXGtvYOIRsCMg89CVZzwzc2o7GFL1CjoiRPjH5ec0NFAVlAx3fVof9dX/t6KKRAo2OWA==",
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz",
+ "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==",
"dev": true
},
"loose-envify": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
- "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
+ "integrity": "sha512-iG/U770U9HaHmy0u+fSyxSIclZ3d9WPFtGjV2drWW0SthBnQ1Fa/SCKIaGLAVwYzrBGEPx9gen047er+MCUgnQ==",
"requires": {
"js-tokens": "^3.0.0"
}
@@ -6285,7 +7315,7 @@
"loud-rejection": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
- "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
+ "integrity": "sha512-RPNliZOFkqFumDhvYqOaNY4Uz9oJM2K9tC6JWsJJsNdhuONW4LQHRBpb0qf4pJApVffI5N39SwzWZJuEhfd7eQ==",
"dev": true,
"requires": {
"currently-unhandled": "^0.4.1",
@@ -6299,9 +7329,9 @@
"dev": true
},
"lru-cache": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz",
- "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==",
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+ "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
"dev": true,
"requires": {
"pseudomap": "^1.0.2",
@@ -6313,25 +7343,19 @@
"resolved": "https://registry.npmjs.org/lucene-escape-query/-/lucene-escape-query-1.0.1.tgz",
"integrity": "sha512-iuB/RqAZjHI9YWm3zyM8qQkPxCi5nA3zcYZn71UM/W/+wh26fWpfxkLKZSgogoAvBjhN/4NhR+hxk2gScc81ow=="
},
- "macaddress": {
- "version": "0.2.9",
- "resolved": "https://registry.npmjs.org/macaddress/-/macaddress-0.2.9.tgz",
- "integrity": "sha512-k4F1JUof6cQXxNFzx3thLby4oJzXTXQueAOOts944Vqizn+Rjc2QNFenT9FJSLU1CH3PmrHRSyZs2E+Cqw+P2w==",
- "dev": true
- },
"make-dir": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.1.0.tgz",
- "integrity": "sha512-0Pkui4wLJ7rxvmfUvs87skoEaxmu0hCUApF8nonzpl7q//FWp9zu8W61Scz4sd/kUiqDxvUhtoam2efDyiBzcA==",
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
+ "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
"dev": true,
"requires": {
"pify": "^3.0.0"
}
},
"map-age-cleaner": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.2.tgz",
- "integrity": "sha512-UN1dNocxQq44IhJyMI4TU8phc2m9BddacHRPRjKGLYaF0jqd3xLz0jS0skpAU9WgYyoR4gHtUpzytNBS385FWQ==",
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz",
+ "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==",
"requires": {
"p-defer": "^1.0.0"
}
@@ -6339,57 +7363,62 @@
"map-cache": {
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
- "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==",
"dev": true
},
"map-obj": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
- "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
+ "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==",
"dev": true
},
"map-stream": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz",
- "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=",
+ "integrity": "sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==",
"dev": true
},
"map-visit": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
- "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==",
"dev": true,
"requires": {
"object-visit": "^1.0.0"
}
},
"markdown-escapes": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.1.tgz",
- "integrity": "sha1-GZTfLTr0gR3lmmcUk0wrIpJzRRg=",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz",
+ "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==",
"dev": true
},
"markdown-table": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.1.tgz",
- "integrity": "sha1-Sz3ToTPRUYuO8NvHCb8qG0gkvIw=",
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz",
+ "integrity": "sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==",
"dev": true
},
"math-expression-evaluator": {
- "version": "1.2.17",
- "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz",
- "integrity": "sha1-3oGf282E3M2PrlnGrreWFbnSZqw=",
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.4.0.tgz",
+ "integrity": "sha512-4vRUvPyxdO8cWULGTh9dZWL2tZK6LDBvj+OGHBER7poH9Qdt7kXEoj20wiz4lQUbUXQZFjPbe5mVDo9nutizCw==",
"dev": true
},
+ "math-intrinsics": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
+ "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="
+ },
"math-random": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz",
- "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w="
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz",
+ "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A=="
},
"mathml-tag-names": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.0.1.tgz",
- "integrity": "sha1-jUEmgWi/htEQK5gQnijlMeejRXg=",
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz",
+ "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==",
"dev": true
},
"md5.js": {
@@ -6404,27 +7433,26 @@
},
"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==",
"dev": true
}
}
},
"mdast-util-compact": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-1.0.1.tgz",
- "integrity": "sha1-zbX4TitqLTEU3zO9BdnLMuPECDo=",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-1.0.4.tgz",
+ "integrity": "sha512-3YDMQHI5vRiS2uygEFYaqckibpJtKq5Sj2c8JioeOQBU6INpKbdWzfyLqFFnDwEcEnRFIdMsguzs5pC1Jp4Isg==",
"dev": true,
"requires": {
- "unist-util-modify-children": "^1.0.0",
"unist-util-visit": "^1.1.0"
}
},
"media-typer": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
- "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
+ "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ=="
},
"mem": {
"version": "4.0.0",
@@ -6439,7 +7467,7 @@
"memory-fs": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
- "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
+ "integrity": "sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==",
"dev": true,
"requires": {
"errno": "^0.1.3",
@@ -6449,13 +7477,13 @@
"memorystream": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz",
- "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=",
+ "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==",
"dev": true
},
"meow": {
"version": "3.7.0",
"resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
- "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
+ "integrity": "sha512-TNdwZs0skRlpPpCUK25StC4VH+tP5GgeY1HQOOGP+lQ2xtdkN2VtT/5tiX9k3IWpkBPV9b3LsAWXn4GGi/PrSA==",
"dev": true,
"requires": {
"camelcase-keys": "^2.0.0",
@@ -6473,17 +7501,17 @@
"merge-descriptors": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
- "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
+ "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w=="
},
"methods": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
- "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
+ "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w=="
},
"micromatch": {
"version": "2.3.11",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
- "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
+ "integrity": "sha512-LnU2XFEk9xxSJ6rfgAry/ty5qwUTyHYOBU0g4R6tIw5ljwgGIBmiKhRWLw5NpMOnrgUNcDJ4WMp8rl3sYVHLNA==",
"requires": {
"arr-diff": "^2.0.0",
"array-unique": "^0.2.1",
@@ -6503,7 +7531,7 @@
"kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
"requires": {
"is-buffer": "^1.1.5"
}
@@ -6518,6 +7546,14 @@
"requires": {
"bn.js": "^4.0.0",
"brorand": "^1.0.1"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.12.1",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz",
+ "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==",
+ "dev": true
+ }
}
},
"mime": {
@@ -6526,16 +7562,16 @@
"integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ=="
},
"mime-db": {
- "version": "1.30.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz",
- "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE="
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
},
"mime-types": {
- "version": "2.1.17",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz",
- "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=",
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
"requires": {
- "mime-db": "~1.30.0"
+ "mime-db": "1.52.0"
}
},
"mimic-fn": {
@@ -6552,7 +7588,7 @@
"minimalistic-crypto-utils": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
- "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=",
+ "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==",
"dev": true
},
"minimatch": {
@@ -6566,7 +7602,7 @@
"minimist": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
+ "integrity": "sha512-7Wl+Jz+IGWuSdgsQEJ4JunV0si/iMhg42MnQQG6h1R6TNeVenp4U9x5CC5v/gYqz/fENLQITAWXidNtVL0NNbw=="
},
"minimist-options": {
"version": "3.0.2",
@@ -6579,9 +7615,9 @@
}
},
"mixin-deep": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
- "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
+ "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
"dev": true,
"requires": {
"for-in": "^1.0.2",
@@ -6602,7 +7638,7 @@
"mkdirp": {
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz",
- "integrity": "sha1-HXMHam35hs2TROFecfzAWkyavxI=",
+ "integrity": "sha512-xjjNGy+ry1lhtIKcr2PT6ok3aszhQfgrUDp4OZLHacgRgFmF6XR9XCOJVcXlVGQonIqXcK1DvqgKKQOPWYGSfw==",
"requires": {
"minimist": "0.0.8"
},
@@ -6610,7 +7646,7 @@
"minimist": {
"version": "0.0.8",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
- "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
+ "integrity": "sha512-miQKw5Hv4NS1Psg2517mV4e4dYNaO3++hjAvLOAzKqZ61rH8NS1SK+vbfBWZ5PY/Me/bEWhUwqMghEW5Fb9T7Q=="
}
}
},
@@ -6651,19 +7687,19 @@
"has-flag": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
"dev": true
},
"minimist": {
"version": "0.0.8",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
- "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "integrity": "sha512-miQKw5Hv4NS1Psg2517mV4e4dYNaO3++hjAvLOAzKqZ61rH8NS1SK+vbfBWZ5PY/Me/bEWhUwqMghEW5Fb9T7Q==",
"dev": true
},
"mkdirp": {
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
- "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "integrity": "sha512-SknJC52obPfGQPnjIkXbmA6+5H15E+fR+E4iR2oQ3zzCLbd7/ONua69R/Gw7AgkTLsRG+r5fzksYwWe1AgTyWA==",
"dev": true,
"requires": {
"minimist": "0.0.8"
@@ -6683,7 +7719,7 @@
"morgan": {
"version": "1.9.0",
"resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.0.tgz",
- "integrity": "sha1-0B+mxlhZt2/PMbPLU6OCGjEdgFE=",
+ "integrity": "sha512-vqY5UfyHbGQZ3KXlGtNvAqGzOkPxrFTtChQdP146QCjpUhbtgW/aQIb2gUVR0jY0rH+MNArmklXiXxDd+L8fmA==",
"requires": {
"basic-auth": "~2.0.0",
"debug": "2.6.9",
@@ -6700,7 +7736,7 @@
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
},
"multistream": {
"version": "2.1.1",
@@ -6714,12 +7750,18 @@
"mute-stream": {
"version": "0.0.7",
"resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
- "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s="
+ "integrity": "sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ=="
},
"n-gram": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/n-gram/-/n-gram-1.0.1.tgz",
- "integrity": "sha1-0ppGXk3rz/f57tn7V9nabIBvQRI="
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/n-gram/-/n-gram-1.1.2.tgz",
+ "integrity": "sha512-mBTpWKp0NHdujHmxrskPg2jc108mjyMmVxHN1rZGK/ogTLi9O0debDIXlQPqotNELdNmVGtL4jr7SCig+4OWvQ=="
+ },
+ "nan": {
+ "version": "2.22.2",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.22.2.tgz",
+ "integrity": "sha512-DANghxFkS1plDdRsX0X9pm0Z6SJNN6gBdtXfanwoZ8hooC5gosGFSBGRYHUVPz1asKA/kMRqDRdHrluZ61SpBQ==",
+ "optional": true
},
"nanomatch": {
"version": "1.2.13",
@@ -6743,54 +7785,13 @@
"arr-diff": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
- "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==",
"dev": true
},
"array-unique": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
- "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
- "dev": true
- },
- "define-property": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
- "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.2",
- "isobject": "^3.0.1"
- }
- },
- "extend-shallow": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
- "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
- "dev": true,
- "requires": {
- "assign-symbols": "^1.0.0",
- "is-extendable": "^1.0.1"
- }
- },
- "is-extendable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
- "dev": true,
- "requires": {
- "is-plain-object": "^2.0.4"
- }
- },
- "is-windows": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
- "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
- "dev": true
- },
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==",
"dev": true
}
}
@@ -6798,13 +7799,13 @@
"natural-compare": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
- "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
"dev": true
},
"nconf": {
"version": "0.6.9",
"resolved": "https://registry.npmjs.org/nconf/-/nconf-0.6.9.tgz",
- "integrity": "sha1-lXDvFe1vmuays8jV5xtm0xk81mE=",
+ "integrity": "sha512-MHiYHIc2igQsoI1v0IcVE4MVaV/+yIQtduOwUcQNoLd+pPgoKblWKbgU3itkhC0az5w2VMdQlQuAO+oi4qxtJg==",
"requires": {
"async": "0.2.9",
"ini": "1.x.x",
@@ -6814,17 +7815,17 @@
"async": {
"version": "0.2.9",
"resolved": "https://registry.npmjs.org/async/-/async-0.2.9.tgz",
- "integrity": "sha1-32MGD789Myhqdqr21Vophtn/hhk="
+ "integrity": "sha512-OAtM6mexGteNKdU29wcUfRW+VuBr94A3hx9h9yzBnPaQAbKoW1ORd68XM4CCAOpdL5wlNFgO29hsY1TKv2vAKw=="
},
"minimist": {
"version": "0.0.10",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
- "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8="
+ "integrity": "sha512-iotkTvxc+TwOm5Ieim8VnSNvCDjCK9S8G3scJ50ZthspSxa7jx50jkhYduuAtAjvfDUwSgOwf8+If99AlOEhyw=="
},
"optimist": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.0.tgz",
- "integrity": "sha1-aUJIJvNAX3nxQub8PZrljU27kgA=",
+ "integrity": "sha512-ubrZPyOU0AHpXkmwqfWolap+eHMwQ484AKivkf0ZGyysd6fUJZl7ow9iu5UNV1vCZv46HQ7EM83IC3NGJ820hg==",
"requires": {
"minimist": "~0.0.1",
"wordwrap": "~0.0.2"
@@ -6835,48 +7836,57 @@
"ncp": {
"version": "0.4.2",
"resolved": "https://registry.npmjs.org/ncp/-/ncp-0.4.2.tgz",
- "integrity": "sha1-q8xsvT7C7Spyn/bnwfqPAXhKhXQ="
+ "integrity": "sha512-PfGU8jYWdRl4FqJfCy0IzbkGyFHntfWygZg46nFk/dJD/XRrk2cj0SsKSX9n5u5gE0E0YfEpKWrEkfjnlZSTXA=="
},
"negotiator": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
- "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk="
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
+ "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg=="
},
"neo-async": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.5.2.tgz",
- "integrity": "sha512-vdqTKI9GBIYcAEbFAcpKPErKINfPF5zIuz3/niBfq8WUZjpT2tytLlFVrBgWdOtqI4uaA/Rb6No0hux39XXDuw==",
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
+ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
"dev": true
},
"next-tick": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz",
- "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz",
+ "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==",
"dev": true
},
"nise": {
- "version": "1.5.2",
- "resolved": "https://registry.npmjs.org/nise/-/nise-1.5.2.tgz",
- "integrity": "sha512-/6RhOUlicRCbE9s+94qCUsyE+pKlVJ5AhIv+jEE7ESKwnbXqulKZ1FYU+XAtHHWE9TinYvAxDUJAb912PwPoWA==",
+ "version": "1.5.3",
+ "resolved": "https://registry.npmjs.org/nise/-/nise-1.5.3.tgz",
+ "integrity": "sha512-Ymbac/94xeIrMf59REBPOv0thr+CJVFMhrlAkW/gjCIE58BGQdCj0x7KRCb3yz+Ga2Rz3E9XXSvUyyxqqhjQAQ==",
"dev": true,
"requires": {
"@sinonjs/formatio": "^3.2.1",
"@sinonjs/text-encoding": "^0.7.1",
"just-extend": "^4.0.2",
- "lolex": "^4.1.0",
+ "lolex": "^5.0.1",
"path-to-regexp": "^1.7.0"
},
"dependencies": {
"isarray": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==",
"dev": true
},
+ "lolex": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/lolex/-/lolex-5.1.2.tgz",
+ "integrity": "sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A==",
+ "dev": true,
+ "requires": {
+ "@sinonjs/commons": "^1.7.0"
+ }
+ },
"path-to-regexp": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz",
- "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz",
+ "integrity": "sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==",
"dev": true,
"requires": {
"isarray": "0.0.1"
@@ -6903,9 +7913,9 @@
}
},
"node-libs-browser": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz",
- "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==",
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz",
+ "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==",
"dev": true,
"requires": {
"assert": "^1.1.1",
@@ -6915,10 +7925,10 @@
"constants-browserify": "^1.0.0",
"crypto-browserify": "^3.11.0",
"domain-browser": "^1.1.1",
- "events": "^1.0.0",
+ "events": "^3.0.0",
"https-browserify": "^1.0.0",
"os-browserify": "^0.3.0",
- "path-browserify": "0.0.0",
+ "path-browserify": "0.0.1",
"process": "^0.11.10",
"punycode": "^1.2.4",
"querystring-es3": "^0.2.0",
@@ -6929,8 +7939,8 @@
"timers-browserify": "^2.0.4",
"tty-browserify": "0.0.0",
"url": "^0.11.0",
- "util": "^0.10.3",
- "vm-browserify": "0.0.4"
+ "util": "^0.11.0",
+ "vm-browserify": "^1.0.1"
}
},
"node-object-hash": {
@@ -6938,6 +7948,12 @@
"resolved": "https://registry.npmjs.org/node-object-hash/-/node-object-hash-1.4.1.tgz",
"integrity": "sha512-JQVqSM5/mOaUoUhCYR0t1vgm8RFo7qpJtPvnoFCLeqQh1xrfmr3BCD3nGBnACzpIEF7F7EVgqGD3O4lao/BY/A=="
},
+ "node-releases": {
+ "version": "2.0.19",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz",
+ "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==",
+ "dev": true
+ },
"nodemon": {
"version": "1.18.7",
"resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.18.7.tgz",
@@ -6964,18 +7980,29 @@
"requires": {
"micromatch": "^3.1.4",
"normalize-path": "^2.1.1"
+ },
+ "dependencies": {
+ "normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==",
+ "dev": true,
+ "requires": {
+ "remove-trailing-separator": "^1.0.1"
+ }
+ }
}
},
"arr-diff": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
- "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==",
"dev": true
},
"array-unique": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
- "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==",
"dev": true
},
"braces": {
@@ -6999,7 +8026,7 @@
"extend-shallow": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
"dev": true,
"requires": {
"is-extendable": "^0.1.0"
@@ -7008,57 +8035,46 @@
}
},
"chokidar": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz",
- "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==",
+ "version": "2.1.8",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
+ "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
"dev": true,
"requires": {
"anymatch": "^2.0.0",
- "async-each": "^1.0.0",
- "braces": "^2.3.0",
- "fsevents": "^1.2.2",
+ "async-each": "^1.0.1",
+ "braces": "^2.3.2",
+ "fsevents": "^1.2.7",
"glob-parent": "^3.1.0",
- "inherits": "^2.0.1",
+ "inherits": "^2.0.3",
"is-binary-path": "^1.0.0",
"is-glob": "^4.0.0",
- "lodash.debounce": "^4.0.8",
- "normalize-path": "^2.1.1",
+ "normalize-path": "^3.0.0",
"path-is-absolute": "^1.0.0",
- "readdirp": "^2.0.0",
- "upath": "^1.0.5"
+ "readdirp": "^2.2.1",
+ "upath": "^1.1.1"
}
},
"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==",
"dev": true,
"requires": {
"ms": "^2.1.1"
},
"dependencies": {
"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==",
"dev": true
}
}
},
- "define-property": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
- "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.2",
- "isobject": "^3.0.1"
- }
- },
"expand-brackets": {
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
- "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==",
"dev": true,
"requires": {
"debug": "^2.3.3",
@@ -7082,7 +8098,7 @@
"define-property": {
"version": "0.2.5",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
"dev": true,
"requires": {
"is-descriptor": "^0.1.0"
@@ -7091,48 +8107,20 @@
"extend-shallow": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
"dev": true,
"requires": {
"is-extendable": "^0.1.0"
}
},
"is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- }
- },
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true
- }
- }
- },
- "extend-shallow": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
- "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
- "dev": true,
- "requires": {
- "assign-symbols": "^1.0.0",
- "is-extendable": "^1.0.1"
- },
- "dependencies": {
- "is-extendable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz",
+ "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==",
"dev": true,
"requires": {
- "is-plain-object": "^2.0.4"
+ "is-accessor-descriptor": "^1.0.1",
+ "is-data-descriptor": "^1.0.1"
}
}
}
@@ -7156,7 +8144,7 @@
"define-property": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
"dev": true,
"requires": {
"is-descriptor": "^1.0.0"
@@ -7165,7 +8153,7 @@
"extend-shallow": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
"dev": true,
"requires": {
"is-extendable": "^0.1.0"
@@ -7176,7 +8164,7 @@
"fill-range": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==",
"dev": true,
"requires": {
"extend-shallow": "^2.0.1",
@@ -7188,7 +8176,7 @@
"extend-shallow": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
"dev": true,
"requires": {
"is-extendable": "^0.1.0"
@@ -7199,7 +8187,7 @@
"glob-parent": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
- "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==",
"dev": true,
"requires": {
"is-glob": "^3.1.0",
@@ -7209,7 +8197,7 @@
"is-glob": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
- "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==",
"dev": true,
"requires": {
"is-extglob": "^2.1.0"
@@ -7220,59 +8208,29 @@
"has-flag": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
"dev": true
},
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "is-descriptor": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz",
+ "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==",
"dev": true,
"requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
+ "is-accessor-descriptor": "^1.0.1",
+ "is-data-descriptor": "^1.0.1"
}
},
"is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
"dev": true
},
"is-glob": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
- "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
"dev": true,
"requires": {
"is-extglob": "^2.1.1"
@@ -7281,7 +8239,7 @@
"is-number": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==",
"dev": true,
"requires": {
"kind-of": "^3.0.2"
@@ -7290,7 +8248,7 @@
"kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
"dev": true,
"requires": {
"is-buffer": "^1.1.5"
@@ -7301,7 +8259,7 @@
"isobject": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
"dev": true
},
"micromatch": {
@@ -7325,6 +8283,23 @@
"to-regex": "^3.0.2"
}
},
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true
+ },
+ "readdirp": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
+ "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.11",
+ "micromatch": "^3.1.10",
+ "readable-stream": "^2.0.2"
+ }
+ },
"supports-color": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
@@ -7336,23 +8311,14 @@
}
}
},
- "nopt": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz",
- "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=",
- "dev": true,
- "requires": {
- "abbrev": "1"
- }
- },
"normalize-package-data": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
- "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+ "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
"dev": true,
"requires": {
"hosted-git-info": "^2.1.4",
- "is-builtin-module": "^1.0.0",
+ "resolve": "^1.10.0",
"semver": "2 || 3 || 4 || 5",
"validate-npm-package-license": "^3.0.1"
}
@@ -7360,7 +8326,7 @@
"normalize-path": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
- "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==",
"requires": {
"remove-trailing-separator": "^1.0.1"
}
@@ -7368,19 +8334,19 @@
"normalize-range": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
- "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=",
+ "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
"dev": true
},
"normalize-selector": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/normalize-selector/-/normalize-selector-0.2.0.tgz",
- "integrity": "sha1-0LFF62kRicY6eNIB3E/bEpPvDAM=",
+ "integrity": "sha512-dxvWdI8gw6eAvk9BlPffgEoGfM7AdijoCwOEJge3e3ulT2XLgmU7KvvxprOaCu05Q1uGRHmOhHe1r6emZoKyFw==",
"dev": true
},
"normalize-url": {
"version": "1.9.1",
"resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz",
- "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=",
+ "integrity": "sha512-A48My/mtCklowHBlI8Fq2jFWK4tX4lJ5E6ytFsSOq1fzpvT0SQSgKhSg7lN5c2uYFOrUAOQp6zhhJnpp1eMloQ==",
"dev": true,
"requires": {
"object-assign": "^4.0.1",
@@ -7392,7 +8358,7 @@
"query-string": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz",
- "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=",
+ "integrity": "sha512-O2XLNDBIg1DnTOa+2XrIwSiXEV8h2KImXUnjhhn2+UsvZ+Es2uyd5CCRTNQlDGbzUQOW3aYCBx9rVA6dzsiY7Q==",
"dev": true,
"requires": {
"object-assign": "^4.1.0",
@@ -7404,7 +8370,7 @@
"normalize.css": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/normalize.css/-/normalize.css-5.0.0.tgz",
- "integrity": "sha1-fOyHXOgXilMzxN6Ato6pwYudfDc="
+ "integrity": "sha512-/b05fOCyJtLDXlxSVdqyLWBrqi39nAUTeBOKrtLQw+a9FuMwNqguB6X4Mlf7C4QxTs/2xu8SlzE6Xbp9Smrq7A=="
},
"npm-run-all": {
"version": "4.1.2",
@@ -7424,29 +8390,29 @@
},
"dependencies": {
"ansi-styles": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
- "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
"requires": {
"color-convert": "^1.9.0"
}
},
"chalk": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
- "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"dev": true,
"requires": {
- "ansi-styles": "^3.1.0",
+ "ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
- "supports-color": "^4.0.0"
+ "supports-color": "^5.3.0"
}
},
"event-stream": {
"version": "3.3.4",
"resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz",
- "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=",
+ "integrity": "sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==",
"dev": true,
"requires": {
"duplexer": "~0.1.1",
@@ -7459,15 +8425,15 @@
}
},
"has-flag": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
- "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
"dev": true
},
"load-json-file": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
- "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
+ "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==",
"dev": true,
"requires": {
"graceful-fs": "^4.1.2",
@@ -7479,7 +8445,7 @@
"parse-json": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
- "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+ "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==",
"dev": true,
"requires": {
"error-ex": "^1.3.1",
@@ -7496,18 +8462,18 @@
}
},
"ps-tree": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.1.0.tgz",
- "integrity": "sha1-tCGyQUDWID8e08dplrRCewjowBQ=",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz",
+ "integrity": "sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==",
"dev": true,
"requires": {
- "event-stream": "~3.3.0"
+ "event-stream": "=3.3.4"
}
},
"read-pkg": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
- "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
+ "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==",
"dev": true,
"requires": {
"load-json-file": "^4.0.0",
@@ -7518,16 +8484,16 @@
"strip-bom": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
- "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+ "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
"dev": true
},
"supports-color": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
- "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"dev": true,
"requires": {
- "has-flag": "^2.0.0"
+ "has-flag": "^3.0.0"
}
}
}
@@ -7535,7 +8501,7 @@
"npm-run-path": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
- "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+ "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==",
"dev": true,
"requires": {
"path-key": "^2.0.0"
@@ -7544,7 +8510,7 @@
"nssocket": {
"version": "0.5.3",
"resolved": "https://registry.npmjs.org/nssocket/-/nssocket-0.5.3.tgz",
- "integrity": "sha1-iDyi7GBfXtZKTVGQsmJUAZKPj40=",
+ "integrity": "sha512-qrxdGVhPQDkwoI62afGMEqlp35zyqj7PvrkGFAIFgXuIoZEvZtz3lJJR4ZFfOYnRPh2zLzAHw5ylU5vATCdMYQ==",
"requires": {
"eventemitter2": "~0.4.14",
"lazy": "~1.0.11"
@@ -7553,13 +8519,13 @@
"num2fraction": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz",
- "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=",
+ "integrity": "sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg==",
"dev": true
},
"number-is-nan": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
- "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==",
"dev": true
},
"oauth-sign": {
@@ -7570,12 +8536,12 @@
"object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="
},
"object-copy": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
- "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==",
"dev": true,
"requires": {
"copy-descriptor": "^0.1.0",
@@ -7586,53 +8552,16 @@
"define-property": {
"version": "0.2.5",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
"dev": true,
"requires": {
"is-descriptor": "^0.1.0"
}
},
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- }
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- },
- "dependencies": {
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true
- }
- }
- },
"kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
"dev": true,
"requires": {
"is-buffer": "^1.1.5"
@@ -7645,21 +8574,52 @@
"resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.2.0.tgz",
"integrity": "sha512-smRWXzkvxw72VquyZ0wggySl7PFUtoDhvhpdwgESXxUrH7vVhhp9asfup1+rVLrhsl7L45Ee1Q/l5R2Ul4MwUg=="
},
+ "object-inspect": {
+ "version": "1.13.4",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
+ "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew=="
+ },
+ "object-is": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz",
+ "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==",
+ "requires": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1"
+ },
+ "dependencies": {
+ "define-properties": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
+ "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
+ "requires": {
+ "define-data-property": "^1.0.1",
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ }
+ },
+ "object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
+ }
+ }
+ },
"object-keys": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz",
- "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
"dev": true
},
"object-path": {
- "version": "0.11.4",
- "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.4.tgz",
- "integrity": "sha1-NwrnUvvzfePqcKhhwju6iRVpGUk="
+ "version": "0.11.8",
+ "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.8.tgz",
+ "integrity": "sha512-YJjNZrlXJFM42wTBn6zgOJVar9KFJvzx6sTWDte8sWZF//cnjl0BxHNpfZx+ZffXX63A9q0b1zsFiBX4g4X5KA=="
},
"object-visit": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
- "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==",
"dev": true,
"requires": {
"isobject": "^3.0.0"
@@ -7668,15 +8628,45 @@
"isobject": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
"dev": true
}
}
},
+ "object.assign": {
+ "version": "4.1.7",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz",
+ "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==",
+ "requires": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.3",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0",
+ "has-symbols": "^1.1.0",
+ "object-keys": "^1.1.1"
+ },
+ "dependencies": {
+ "define-properties": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
+ "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
+ "requires": {
+ "define-data-property": "^1.0.1",
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ }
+ },
+ "object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
+ }
+ }
+ },
"object.omit": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
- "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
+ "integrity": "sha512-UiAM5mhmIuKLsOvrL+B0U2d1hXHF3bFYWIuH1LMpuV2EJEHG1Ntz06PgLEHjm6VFd87NpH8rastvPoyv6UW2fA==",
"requires": {
"for-own": "^0.1.4",
"is-extendable": "^0.1.1"
@@ -7685,7 +8675,7 @@
"object.pick": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
- "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==",
"dev": true,
"requires": {
"isobject": "^3.0.1"
@@ -7694,7 +8684,7 @@
"isobject": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
"dev": true
}
}
@@ -7702,30 +8692,39 @@
"on-finished": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
- "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+ "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==",
"requires": {
"ee-first": "1.1.1"
}
},
"on-headers": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz",
- "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c="
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
+ "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA=="
},
"once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
"requires": {
"wrappy": "1"
}
},
"onecolor": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/onecolor/-/onecolor-3.0.5.tgz",
- "integrity": "sha1-Nu/zIgE3nv3xGA+0ReUajiQl+fY=",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/onecolor/-/onecolor-3.1.0.tgz",
+ "integrity": "sha512-YZSypViXzu3ul5LMu/m6XjJ9ol8qAy9S2VjHl5E6UlhUH1KGKWabyEJifn0Jjpw23bYDzC2ucKMPGiH5kfwSGQ==",
"dev": true
},
+ "onetime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+ "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^1.0.0"
+ }
+ },
"ono": {
"version": "4.0.11",
"resolved": "https://registry.npmjs.org/ono/-/ono-4.0.11.tgz",
@@ -7735,20 +8734,20 @@
}
},
"opencollective-postinstall": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.1.tgz",
- "integrity": "sha512-saQQ9hjLwu/oS0492eyYotoh+bra1819cfAT5rjY/e4REWwuc8IgZ844Oo44SiftWcJuBiqp0SA0BFVbmLX0IQ=="
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz",
+ "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q=="
},
"opener": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.1.tgz",
- "integrity": "sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==",
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz",
+ "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==",
"dev": true
},
"optimist": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
- "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
+ "integrity": "sha512-snN4O4TkigujZphWLN0E//nQmm7790RYaE53DdL7ZYwee2D8DDo9/EyYiKUfN3rneWUjhJnueija3G9I2i0h3g==",
"requires": {
"minimist": "~0.0.1",
"wordwrap": "~0.0.2"
@@ -7757,42 +8756,34 @@
"minimist": {
"version": "0.0.10",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
- "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8="
+ "integrity": "sha512-iotkTvxc+TwOm5Ieim8VnSNvCDjCK9S8G3scJ50ZthspSxa7jx50jkhYduuAtAjvfDUwSgOwf8+If99AlOEhyw=="
}
}
},
"optionator": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
- "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "version": "0.8.3",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
+ "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
"dev": true,
"requires": {
"deep-is": "~0.1.3",
- "fast-levenshtein": "~2.0.4",
+ "fast-levenshtein": "~2.0.6",
"levn": "~0.3.0",
"prelude-ls": "~1.1.2",
"type-check": "~0.3.2",
- "wordwrap": "~1.0.0"
- },
- "dependencies": {
- "wordwrap": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
- "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
- "dev": true
- }
+ "word-wrap": "~1.2.3"
}
},
"options": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz",
- "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=",
+ "integrity": "sha512-bOj3L1ypm++N+n7CEbbe473A414AB7z+amKYshRb//iuL3MpdDCLhPnw6aVTdKB9g5ZRVHIEp8eUln6L2NUStg==",
"dev": true
},
"opts": {
- "version": "1.2.6",
- "resolved": "https://registry.npmjs.org/opts/-/opts-1.2.6.tgz",
- "integrity": "sha1-0YXAQlz9652h0YKQi2W1wCOP67M=",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/opts/-/opts-2.0.2.tgz",
+ "integrity": "sha512-k41FwbcLnlgnFh69f4qdUfvDQ+5vaSDnVPFI/y5XuhKRq97EnVVneO9F1ESVCdiVu4fCS2L8usX3mU331hB7pg==",
"dev": true
},
"ora": {
@@ -7808,66 +8799,38 @@
},
"dependencies": {
"ansi-styles": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
- "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
"requires": {
"color-convert": "^1.9.0"
}
},
"chalk": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
- "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"dev": true,
"requires": {
- "ansi-styles": "^3.1.0",
+ "ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
- "supports-color": "^4.0.0"
- }
- },
- "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=",
- "dev": true,
- "requires": {
- "restore-cursor": "^2.0.0"
+ "supports-color": "^5.3.0"
}
},
"has-flag": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
- "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
"dev": true
},
- "onetime": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
- "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
- "dev": true,
- "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=",
- "dev": true,
- "requires": {
- "onetime": "^2.0.0",
- "signal-exit": "^3.0.2"
- }
- },
"supports-color": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
- "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"dev": true,
"requires": {
- "has-flag": "^2.0.0"
+ "has-flag": "^3.0.0"
}
}
}
@@ -7875,41 +8838,74 @@
"os-browserify": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
- "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
+ "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==",
"dev": true
},
"os-homedir": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
- "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
+ "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==",
"dev": true
},
+ "os-locale": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz",
+ "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==",
+ "dev": true,
+ "requires": {
+ "execa": "^0.7.0",
+ "lcid": "^1.0.0",
+ "mem": "^1.1.0"
+ },
+ "dependencies": {
+ "mem": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz",
+ "integrity": "sha512-nOBDrc/wgpkd3X/JOhMqYR+/eLqlfLP4oQfoBA6QExIxEl+GU01oyEkwWyueyO8110pUKijtiHGhEmYoOn88oQ==",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^1.0.0"
+ }
+ }
+ }
+ },
"os-tmpdir": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
- "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+ "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==",
"dev": true
},
+ "own-keys": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz",
+ "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==",
+ "dev": true,
+ "requires": {
+ "get-intrinsic": "^1.2.6",
+ "object-keys": "^1.1.1",
+ "safe-push-apply": "^1.0.0"
+ }
+ },
"p-defer": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz",
- "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww="
+ "integrity": "sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw=="
},
"p-finally": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
- "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
+ "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==",
"dev": true
},
"p-is-promise": {
"version": "1.1.0",
- "resolved": "http://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz",
- "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4="
+ "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz",
+ "integrity": "sha512-zL7VE4JVS2IFSkR2GQKDSPEVxkoH43/p7oEnwpdCndKYJO0HVeRB7fA8TJwuLOTBREtK0ea8eHaxdwcpob5dmg=="
},
"p-limit": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz",
- "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==",
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
+ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
"dev": true,
"requires": {
"p-try": "^1.0.0"
@@ -7918,7 +8914,7 @@
"p-locate": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
- "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+ "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==",
"dev": true,
"requires": {
"p-limit": "^1.1.0"
@@ -7931,30 +8927,18 @@
"requires": {
"mem": "^4.0.0",
"mimic-fn": "^1.0.0"
- },
- "dependencies": {
- "mem": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/mem/-/mem-4.0.0.tgz",
- "integrity": "sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA==",
- "requires": {
- "map-age-cleaner": "^0.1.1",
- "mimic-fn": "^1.0.0",
- "p-is-promise": "^1.1.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=",
+ "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==",
"dev": true
},
"package-json": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz",
- "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=",
+ "integrity": "sha512-q/R5GrMek0vzgoomq6rm9OX+3PQve8sLwTirmK30YB3Cu0Bbt9OX9M/SIUnroN5BGJkzwGsFwDaRGD9EwBOlCA==",
"dev": true,
"requires": {
"got": "^6.7.1",
@@ -7964,28 +8948,37 @@
}
},
"pako": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz",
- "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==",
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
+ "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
"dev": true
},
"parse-asn1": {
- "version": "5.1.1",
- "resolved": "http://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz",
- "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==",
+ "version": "5.1.7",
+ "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.7.tgz",
+ "integrity": "sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==",
"dev": true,
"requires": {
- "asn1.js": "^4.0.0",
- "browserify-aes": "^1.0.0",
- "create-hash": "^1.1.0",
- "evp_bytestokey": "^1.0.0",
- "pbkdf2": "^3.0.3"
+ "asn1.js": "^4.10.1",
+ "browserify-aes": "^1.2.0",
+ "evp_bytestokey": "^1.0.3",
+ "hash-base": "~3.0",
+ "pbkdf2": "^3.1.2",
+ "safe-buffer": "^5.2.1"
+ },
+ "dependencies": {
+ "safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "dev": true
+ }
}
},
"parse-entities": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.1.1.tgz",
- "integrity": "sha1-gRLYhHExnyerrk1klksSL+ThuJA=",
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.2.2.tgz",
+ "integrity": "sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg==",
"dev": true,
"requires": {
"character-entities": "^1.0.0",
@@ -7999,7 +8992,7 @@
"parse-glob": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
- "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
+ "integrity": "sha512-FC5TeK0AwXzq3tUBFtH74naWkPQCEWs4K+xMxWZBlKDWu0bVHXGZa+KKqxKidd7xwhdZ19ZNuF2uO1M/r196HA==",
"requires": {
"glob-base": "^0.3.0",
"is-dotfile": "^1.0.0",
@@ -8010,73 +9003,73 @@
"parse-json": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
- "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==",
"dev": true,
"requires": {
"error-ex": "^1.2.0"
}
},
"parseurl": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
- "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M="
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
},
"pascalcase": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
- "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+ "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==",
"dev": true
},
"path-browserify": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz",
- "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=",
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz",
+ "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==",
"dev": true
},
"path-dirname": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
- "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+ "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==",
"dev": true
},
"path-exists": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==",
"dev": true
},
"path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="
},
"path-is-inside": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
- "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+ "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==",
"dev": true
},
"path-key": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
- "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+ "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==",
"dev": true
},
"path-parse": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
- "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=",
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
"dev": true
},
"path-to-regexp": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
- "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
+ "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
},
"path-type": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
- "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
+ "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==",
"dev": true,
"requires": {
"graceful-fs": "^4.1.2",
@@ -8087,30 +9080,30 @@
"pify": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
"dev": true
}
}
},
"pathval": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz",
- "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz",
+ "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==",
"dev": true
},
"pause-stream": {
"version": "0.0.11",
"resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz",
- "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=",
+ "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==",
"dev": true,
"requires": {
"through": "~2.3"
}
},
"pbkdf2": {
- "version": "3.0.17",
- "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz",
- "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==",
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz",
+ "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==",
"dev": true,
"requires": {
"create-hash": "^1.1.2",
@@ -8123,24 +9116,37 @@
"performance-now": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
- "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
+ "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow=="
+ },
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz",
+ "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==",
+ "dev": true
+ },
+ "picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true,
+ "optional": true
},
"pify": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
"dev": true
},
"pinkie": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
- "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==",
"dev": true
},
"pinkie-promise": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
- "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==",
"dev": true,
"requires": {
"pinkie": "^2.0.0"
@@ -8149,7 +9155,7 @@
"pixrem": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/pixrem/-/pixrem-4.0.1.tgz",
- "integrity": "sha1-LaSh3m7EQjxfw3lOkwuB1EkOxoY=",
+ "integrity": "sha512-sFMGjkE42jNwAMBvBdWSx9f6MGZfufkfChzLxow7JmKY6XHWpNqLIwTQABcJOek0LCdtNf22cdL5fYzKLELmCA==",
"dev": true,
"requires": {
"browserslist": "^2.0.0",
@@ -8158,23 +9164,74 @@
}
},
"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": "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-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "requires": {
+ "p-try": "^2.0.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"
+ }
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "dev": true
+ },
+ "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
+ }
}
},
"pkginfo": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.3.1.tgz",
- "integrity": "sha1-Wyn2qB9wcXFC4J52W76rl7T4HiE="
+ "integrity": "sha512-yO5feByMzAp96LtP58wvPKSbaKAi/1C4kV9XpTctr6EepnP6F33RBNOiVrdz9BrPA98U2BMFsTNHo44TWcbQ2A=="
},
"pleeease-filters": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/pleeease-filters/-/pleeease-filters-4.0.0.tgz",
- "integrity": "sha1-ZjKy+wVkjSdY2GU4T7zteeHMrsc=",
+ "integrity": "sha512-EtyjMK41s2+q/eM6wED/9U5bWzowfP/ImQb9AxKzt/+Xlbb5CxQ7dAToEoSQuxyidmkZzHAl483m2sBm2XvfFw==",
"dev": true,
"requires": {
"onecolor": "^3.0.4",
@@ -8188,21 +9245,26 @@
"dev": true
},
"popper.js": {
- "version": "1.12.9",
- "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.12.9.tgz",
- "integrity": "sha1-DfvC3/lsRRuzMu3Pz6r1ZtMx1bM="
+ "version": "1.16.1",
+ "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz",
+ "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ=="
},
"porter-stemmer": {
"version": "0.9.1",
"resolved": "https://registry.npmjs.org/porter-stemmer/-/porter-stemmer-0.9.1.tgz",
- "integrity": "sha1-oW7Oo6vkRySsiMFIACHqNrqiH5s="
+ "integrity": "sha512-vnSYgMMWKMo0+zCUumdcQAYE2RD55k2b27sPySqseetSRaGtXCCktv3llCB4EXyU1nQApMM5u+rGwVWcW72AHg=="
},
"posix-character-classes": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
- "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+ "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==",
"dev": true
},
+ "possible-typed-array-names": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz",
+ "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg=="
+ },
"postcss": {
"version": "6.0.17",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.17.tgz",
@@ -8215,40 +9277,29 @@
},
"dependencies": {
"ansi-styles": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
- "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
"requires": {
"color-convert": "^1.9.0"
}
},
"chalk": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
- "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"dev": true,
"requires": {
- "ansi-styles": "^3.1.0",
+ "ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
- "supports-color": "^4.0.0"
- },
- "dependencies": {
- "supports-color": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
- "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
- "dev": true,
- "requires": {
- "has-flag": "^2.0.0"
- }
- }
+ "supports-color": "^5.3.0"
}
},
"has-flag": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
- "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
"dev": true
},
"source-map": {
@@ -8258,12 +9309,12 @@
"dev": true
},
"supports-color": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.1.0.tgz",
- "integrity": "sha512-Ry0AwkoKjDpVKK4sV4h6o3UJmNRbjYm2uXhwfj3J56lMVdvnUNqzQVRztOOMGQ++w1K/TjNDFvpJk0F/LoeBCQ==",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"dev": true,
"requires": {
- "has-flag": "^2.0.0"
+ "has-flag": "^3.0.0"
}
}
}
@@ -8271,7 +9322,7 @@
"postcss-apply": {
"version": "0.8.0",
"resolved": "https://registry.npmjs.org/postcss-apply/-/postcss-apply-0.8.0.tgz",
- "integrity": "sha1-FOVEu7XLbxweBIhXll15rgZrE0M=",
+ "integrity": "sha512-J8HDo5oAW4HSZ8rsSQrfUC4kRurHZFzNC0gGIrJEuRu0imobXMtPhAXQN7d44eDXKWshABjtFxowbQi8OIznwg==",
"dev": true,
"requires": {
"babel-runtime": "^6.23.0",
@@ -8282,7 +9333,7 @@
"balanced-match": {
"version": "0.4.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
- "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=",
+ "integrity": "sha512-STw03mQKnGUYtoNjmowo4F2cRmIIxYEGiMsjjwla/u5P1lxadj/05WkNaFjNiKTgJkj8KiXbgAiRTmcQRwQNtg==",
"dev": true
}
}
@@ -8290,7 +9341,7 @@
"postcss-attribute-case-insensitive": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-2.0.0.tgz",
- "integrity": "sha1-lNxCLI+QmX8WvTOjZUu77AhJY7Q=",
+ "integrity": "sha512-J8sdzNF8glKA0ZpNLOftTaNu12a48wJ97sVDTYGRR6gX8cSoRE4tXoVgYRemFz3TvSurbmVuMQUmqUclA0hL/Q==",
"dev": true,
"requires": {
"postcss": "^6.0.0",
@@ -8300,7 +9351,7 @@
"postcss-calc": {
"version": "5.3.1",
"resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz",
- "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=",
+ "integrity": "sha512-iBcptYFq+QUh9gzP7ta2btw50o40s4uLI4UDVgd5yRAZtUDWc5APdl5yQDd2h/TyiZNbJrv0HiYhT102CMgN7Q==",
"dev": true,
"requires": {
"postcss": "^5.0.2",
@@ -8323,7 +9374,7 @@
"supports-color": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==",
"dev": true,
"requires": {
"has-flag": "^1.0.0"
@@ -8334,7 +9385,7 @@
"postcss-cli": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-4.1.1.tgz",
- "integrity": "sha1-uUvY//u3rB9i8mB+ePyTl/f2Ol0=",
+ "integrity": "sha512-Mp21ROBZsInE5vYxpI3r+1tSiGtQvkLuMFBOJzPALu5Dpayx+tdNUXYLoa2f22C+oVUyQpkbT/Di1/kiJXzwtw==",
"dev": true,
"requires": {
"chalk": "^2.1.0",
@@ -8352,243 +9403,115 @@
"yargs": "^8.0.1"
},
"dependencies": {
- "ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
- "dev": true
- },
"ansi-styles": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
- "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "camelcase": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
- "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
- "dev": true
- },
- "chalk": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
- "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.1.0",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^4.0.0"
- }
- },
- "fs-extra": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz",
- "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "jsonfile": "^4.0.0",
- "universalify": "^0.1.0"
- }
- },
- "get-stdin": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz",
- "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=",
- "dev": true
- },
- "globby": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
- "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
- "dev": true,
- "requires": {
- "array-union": "^1.0.1",
- "glob": "^7.0.3",
- "object-assign": "^4.0.1",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0"
- }
- },
- "has-flag": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
- "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
- "dev": true
- },
- "jsonfile": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
- "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.6"
- }
- },
- "load-json-file": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
- "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^2.2.0",
- "pify": "^2.0.0",
- "strip-bom": "^3.0.0"
- }
- },
- "os-locale": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz",
- "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==",
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
- "requires": {
- "execa": "^0.7.0",
- "lcid": "^1.0.0",
- "mem": "^1.1.0"
- },
- "dependencies": {
- "mem": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz",
- "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=",
- "dev": true,
- "requires": {
- "mimic-fn": "^1.0.0"
- }
- }
+ "requires": {
+ "color-convert": "^1.9.0"
}
},
- "path-type": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
- "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"dev": true,
"requires": {
- "pify": "^2.0.0"
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
}
},
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "get-stdin": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz",
+ "integrity": "sha512-jZV7n6jGE3Gt7fgSTJoz91Ak5MuTLwMwkoYdjxuJ/AmjIsE1UC03y/IWkZCQGEvVNS9qoRNwy5BCqxImv0FVeA==",
"dev": true
},
- "read-pkg": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
- "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
- "dev": true,
- "requires": {
- "load-json-file": "^2.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^2.0.0"
- }
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "dev": true
},
- "read-pkg-up": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
- "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"dev": true,
"requires": {
- "find-up": "^2.0.0",
- "read-pkg": "^2.0.0"
+ "has-flag": "^3.0.0"
}
- },
- "string-width": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
- "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ }
+ }
+ },
+ "postcss-color-function": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-color-function/-/postcss-color-function-4.1.0.tgz",
+ "integrity": "sha512-2/fuv6mP5Lt03XbRpVfMdGC8lRP1sykme+H1bR4ARyOmSMB8LPSjcL6EAI1iX6dqUF+jNEvKIVVXhan1w/oFDQ==",
+ "dev": true,
+ "requires": {
+ "css-color-function": "~1.3.3",
+ "postcss": "^6.0.23",
+ "postcss-message-helpers": "^2.0.0",
+ "postcss-value-parser": "^3.3.1"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
"requires": {
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
+ "color-convert": "^1.9.0"
}
},
- "strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"dev": true,
"requires": {
- "ansi-regex": "^3.0.0"
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
}
},
- "strip-bom": {
+ "has-flag": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
- "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
"dev": true
},
- "supports-color": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
- "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "postcss": {
+ "version": "6.0.23",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
+ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
"dev": true,
"requires": {
- "has-flag": "^2.0.0"
+ "chalk": "^2.4.1",
+ "source-map": "^0.6.1",
+ "supports-color": "^5.4.0"
}
},
- "which-module": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
- "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
+ "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
},
- "yargs": {
- "version": "8.0.2",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz",
- "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=",
- "dev": true,
- "requires": {
- "camelcase": "^4.1.0",
- "cliui": "^3.2.0",
- "decamelize": "^1.1.1",
- "get-caller-file": "^1.0.1",
- "os-locale": "^2.0.0",
- "read-pkg-up": "^2.0.0",
- "require-directory": "^2.1.1",
- "require-main-filename": "^1.0.1",
- "set-blocking": "^2.0.0",
- "string-width": "^2.0.0",
- "which-module": "^2.0.0",
- "y18n": "^3.2.1",
- "yargs-parser": "^7.0.0"
- }
- },
- "yargs-parser": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz",
- "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=",
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"dev": true,
"requires": {
- "camelcase": "^4.1.0"
+ "has-flag": "^3.0.0"
}
}
}
},
- "postcss-color-function": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/postcss-color-function/-/postcss-color-function-4.0.1.tgz",
- "integrity": "sha1-QCs/LOvD9pR+YY+2vjZU++zvZEQ=",
- "dev": true,
- "requires": {
- "css-color-function": "~1.3.3",
- "postcss": "^6.0.1",
- "postcss-message-helpers": "^2.0.0",
- "postcss-value-parser": "^3.3.0"
- }
- },
"postcss-color-gray": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/postcss-color-gray/-/postcss-color-gray-4.1.0.tgz",
@@ -8599,12 +9522,34 @@
"postcss": "^6.0.14",
"postcss-message-helpers": "^2.0.0",
"reduce-function-call": "^1.0.2"
+ },
+ "dependencies": {
+ "color": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color/-/color-2.0.1.tgz",
+ "integrity": "sha512-ubUCVVKfT7r2w2D3qtHakj8mbmKms+tThR8gI8zEYCbUBl8/voqFGt3kgBqGwXAopgXybnkuOq+qMYCRrp4cXw==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.1",
+ "color-string": "^1.5.2"
+ }
+ },
+ "color-string": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
+ "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
+ "dev": true,
+ "requires": {
+ "color-name": "^1.0.0",
+ "simple-swizzle": "^0.2.2"
+ }
+ }
}
},
"postcss-color-hex-alpha": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-3.0.0.tgz",
- "integrity": "sha1-HlPmyKyyN5Vej9CLfs2xuLgwn5U=",
+ "integrity": "sha512-Tpg2yEBcdE0e7jJSyRaLinX8xqf4geXIBClhbSA3hhnpXELJcqfvoRD8V9RHV6oYyoR/vyS3dCg1EuCEw6CvhQ==",
"dev": true,
"requires": {
"color": "^1.0.3",
@@ -8615,19 +9560,29 @@
"color": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/color/-/color-1.0.3.tgz",
- "integrity": "sha1-5I6DLYXxTvaU+0aIEcLVz+cptV0=",
+ "integrity": "sha512-HWCZFEr1styyDW4BAYpeDtVrUfTzPK0XOxs8izgcGofpl/T9U2m5f7cYjcPKorrCLKDrFlmcHciMdktwxr1btw==",
"dev": true,
"requires": {
"color-convert": "^1.8.2",
"color-string": "^1.4.0"
}
+ },
+ "color-string": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
+ "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
+ "dev": true,
+ "requires": {
+ "color-name": "^1.0.0",
+ "simple-swizzle": "^0.2.2"
+ }
}
}
},
"postcss-color-hsl": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/postcss-color-hsl/-/postcss-color-hsl-2.0.0.tgz",
- "integrity": "sha1-EnA2ZvoxBDDj8wpFTawThjF9WEQ=",
+ "integrity": "sha512-4DNpOj3NWejHtjV4mLxf+rmE1KA+IKDJH8QSThgJOrjGFuiqOPxkFSZX1RQJ+XQISZD3MW/JDaZoNnmxS9pSBQ==",
"dev": true,
"requires": {
"postcss": "^6.0.1",
@@ -8638,7 +9593,7 @@
"postcss-color-hwb": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/postcss-color-hwb/-/postcss-color-hwb-3.0.0.tgz",
- "integrity": "sha1-NAKxnvTYSXVAwftQcr6YY8qVVx4=",
+ "integrity": "sha512-53CnpaKZKKiuQ2KvVStY4uVYnp2UCSUCDGYnW2sbe4oJBq3/H4eCcO4My2cMv3l8czsh3yBRLNA9Ls8IwqARhA==",
"dev": true,
"requires": {
"color": "^1.0.3",
@@ -8650,29 +9605,93 @@
"color": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/color/-/color-1.0.3.tgz",
- "integrity": "sha1-5I6DLYXxTvaU+0aIEcLVz+cptV0=",
+ "integrity": "sha512-HWCZFEr1styyDW4BAYpeDtVrUfTzPK0XOxs8izgcGofpl/T9U2m5f7cYjcPKorrCLKDrFlmcHciMdktwxr1btw==",
"dev": true,
"requires": {
"color-convert": "^1.8.2",
"color-string": "^1.4.0"
}
+ },
+ "color-string": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
+ "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
+ "dev": true,
+ "requires": {
+ "color-name": "^1.0.0",
+ "simple-swizzle": "^0.2.2"
+ }
}
}
},
"postcss-color-rebeccapurple": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-3.0.0.tgz",
- "integrity": "sha1-7rrwPTY7QwC5Z5K9MIHBntZlE9M=",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-3.1.0.tgz",
+ "integrity": "sha512-212hJUk9uSsbwO5ECqVjmh/iLsmiVL1xy9ce9TVf+X3cK/ZlUIlaMdoxje/YpsL9cmUH3I7io+/G2LyWx5rg1g==",
"dev": true,
"requires": {
- "postcss": "^6.0.1",
- "postcss-value-parser": "^3.3.0"
+ "postcss": "^6.0.22",
+ "postcss-values-parser": "^1.5.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "dev": true
+ },
+ "postcss": {
+ "version": "6.0.23",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
+ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.4.1",
+ "source-map": "^0.6.1",
+ "supports-color": "^5.4.0"
+ }
+ },
+ "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": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
}
},
"postcss-color-rgb": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/postcss-color-rgb/-/postcss-color-rgb-2.0.0.tgz",
- "integrity": "sha1-FFOcinExSUtILg3RzCZf9lFLUmM=",
+ "integrity": "sha512-oGgwvqUHEz4CYmbwUwQ4LwIr4Wqw9p1r+6fJFQqdZPp+ulXFsmJ1cAqJ+V7x5VoNMOuAi1e3UPyJ01JpUtX+Vw==",
"dev": true,
"requires": {
"postcss": "^6.0.1",
@@ -8682,7 +9701,7 @@
"postcss-color-rgba-fallback": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/postcss-color-rgba-fallback/-/postcss-color-rgba-fallback-3.0.0.tgz",
- "integrity": "sha1-N9XJNToHoJJwkSqCYGu0Kg1wLAQ=",
+ "integrity": "sha512-RBCHHCQ0sVJH+y31jiVSLBM/b3vvfiU8g9tyAglpF7NOuYzcw41Tu+iGEm8B2zVEAYYgEhWCASNY/j4Wh3vi4w==",
"dev": true,
"requires": {
"postcss": "^6.0.6",
@@ -8693,7 +9712,7 @@
"postcss-colormin": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz",
- "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=",
+ "integrity": "sha512-XXitQe+jNNPf+vxvQXIQ1+pvdQKWKgkx8zlJNltcMEmLma1ypDRDQwlLt+6cP26fBreihNhZxohh1rcgCH2W5w==",
"dev": true,
"requires": {
"colormin": "^1.0.5",
@@ -8716,7 +9735,7 @@
"supports-color": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==",
"dev": true,
"requires": {
"has-flag": "^1.0.0"
@@ -8727,7 +9746,7 @@
"postcss-convert-values": {
"version": "2.6.1",
"resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz",
- "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=",
+ "integrity": "sha512-SE7mf25D3ORUEXpu3WUqQqy0nCbMuM5BEny+ULE/FXdS/0UMA58OdzwvzuHJRpIFlk1uojt16JhaEogtP6W2oA==",
"dev": true,
"requires": {
"postcss": "^5.0.11",
@@ -8749,7 +9768,7 @@
"supports-color": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==",
"dev": true,
"requires": {
"has-flag": "^1.0.0"
@@ -8797,32 +9816,32 @@
},
"dependencies": {
"ansi-styles": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
- "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
"requires": {
"color-convert": "^1.9.0"
}
},
"autoprefixer": {
- "version": "7.2.5",
- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-7.2.5.tgz",
- "integrity": "sha512-XqHfo8Ht0VU+T5P+eWEVoXza456KJ4l62BPewu3vpNf3LP9s2+zYXkXBznzYby4XeECXgG3N4i+hGvOhXErZmA==",
+ "version": "7.2.6",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-7.2.6.tgz",
+ "integrity": "sha512-Iq8TRIB+/9eQ8rbGhcP7ct5cYb/3qjNYAR2SnzLCEcwF6rvVOax8+9+fccgXk4bEhQGjOZd5TLhsksmAdsbGqQ==",
"dev": true,
"requires": {
- "browserslist": "^2.11.1",
- "caniuse-lite": "^1.0.30000791",
+ "browserslist": "^2.11.3",
+ "caniuse-lite": "^1.0.30000805",
"normalize-range": "^0.1.2",
"num2fraction": "^1.2.2",
- "postcss": "^6.0.16",
+ "postcss": "^6.0.17",
"postcss-value-parser": "^3.2.3"
}
},
"caniuse-api": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-2.0.0.tgz",
- "integrity": "sha1-sd21pZZrFvSNxJmERNS7xsfZ2DQ=",
+ "integrity": "sha512-425yJRcUDCCMKc0Zga2KSUe7Qp7nCtL8H0BJIsDxF9yMzG2eSYvOggi5U1wXzxgcSgDGnzVLvZ8dZGMBrA6Ltg==",
"dev": true,
"requires": {
"browserslist": "^2.0.0",
@@ -8832,51 +9851,69 @@
}
},
"chalk": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
- "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"dev": true,
"requires": {
- "ansi-styles": "^3.1.0",
+ "ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
- "supports-color": "^4.0.0"
+ "supports-color": "^5.3.0"
}
},
"has-flag": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
- "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
"dev": true
},
"postcss-calc": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-6.0.1.tgz",
- "integrity": "sha1-PSQXG79udinUIqQ26/5t2VEfQzA=",
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-6.0.2.tgz",
+ "integrity": "sha512-fiznXjEN5T42Qm7qqMCVJXS3roaj9r4xsSi+meaBVe7CJBl8t/QLOXu02Z2E6oWAMWIvCuF6JrvzFekmVEbOKA==",
"dev": true,
"requires": {
"css-unit-converter": "^1.1.1",
- "postcss": "^6.0.0",
+ "postcss": "^7.0.2",
"postcss-selector-parser": "^2.2.2",
"reduce-css-calc": "^2.0.0"
+ },
+ "dependencies": {
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz",
+ "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.1"
+ }
+ }
}
},
"reduce-css-calc": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.4.tgz",
- "integrity": "sha512-i/vWQbyd3aJRmip9OVSN9V6nIjLf/gg/ctxb0CpvHWtcRysFl/ngDBQD+rqavxdw/doScA3GMBXhzkHQ4GCzFQ==",
+ "version": "2.1.8",
+ "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz",
+ "integrity": "sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg==",
"dev": true,
"requires": {
"css-unit-converter": "^1.1.1",
"postcss-value-parser": "^3.3.0"
}
},
+ "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": "4.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
- "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"dev": true,
"requires": {
- "has-flag": "^2.0.0"
+ "has-flag": "^3.0.0"
}
}
}
@@ -8884,26 +9921,80 @@
"postcss-custom-media": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-6.0.0.tgz",
- "integrity": "sha1-vlMnhBEOyylQRPtTlaGABushpzc=",
+ "integrity": "sha512-MLjf2Yghub+USZpLWCB11hLrEEaCWM4lYf4UR9ui3iPCQFdywvEaY5yt4PnOClGrACGaHTNKPF9koiZLdJOmYw==",
"dev": true,
"requires": {
"postcss": "^6.0.1"
}
},
"postcss-custom-properties": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-6.2.0.tgz",
- "integrity": "sha512-eNR2h9T9ciKMoQEORrPjH33XeN/nuvVuxArOKmHtsFbGbNss631tgTrKou3/pmjAZbA4QQkhLIkPQkIk3WW+8w==",
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-6.3.1.tgz",
+ "integrity": "sha512-zoiwn4sCiUFbr4KcgcNZLFkR6gVQom647L+z1p/KBVHZ1OYwT87apnS42atJtx6XlX2yI7N5fjXbFixShQO2QQ==",
"dev": true,
"requires": {
"balanced-match": "^1.0.0",
- "postcss": "^6.0.13"
+ "postcss": "^6.0.18"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "dev": true
+ },
+ "postcss": {
+ "version": "6.0.23",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
+ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.4.1",
+ "source-map": "^0.6.1",
+ "supports-color": "^5.4.0"
+ }
+ },
+ "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": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
}
},
"postcss-custom-selectors": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-4.0.1.tgz",
- "integrity": "sha1-eBOC+UxS5yfvXKR3bqKt9JphE4I=",
+ "integrity": "sha512-mXhdsA16oq2xbXhIJs6LscTq8peUrvAD4w6I8+BhfIK5ZQH2sVjSM1xYJdadFBfR8MISg4466I+V860Hi68PfQ==",
"dev": true,
"requires": {
"postcss": "^6.0.1",
@@ -8913,7 +10004,7 @@
"postcss-discard-comments": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz",
- "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=",
+ "integrity": "sha512-yGbyBDo5FxsImE90LD8C87vgnNlweQkODMkUZlDVM/CBgLr9C5RasLGJxxh9GjVOBeG8NcCMatoqI1pXg8JNXg==",
"dev": true,
"requires": {
"postcss": "^5.0.14"
@@ -8934,7 +10025,7 @@
"supports-color": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==",
"dev": true,
"requires": {
"has-flag": "^1.0.0"
@@ -8945,7 +10036,7 @@
"postcss-discard-duplicates": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz",
- "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=",
+ "integrity": "sha512-+lk5W1uqO8qIUTET+UETgj9GWykLC3LOldr7EehmymV0Wu36kyoHimC4cILrAAYpHQ+fr4ypKcWcVNaGzm0reA==",
"dev": true,
"requires": {
"postcss": "^5.0.4"
@@ -8966,7 +10057,7 @@
"supports-color": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==",
"dev": true,
"requires": {
"has-flag": "^1.0.0"
@@ -8977,7 +10068,7 @@
"postcss-discard-empty": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz",
- "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=",
+ "integrity": "sha512-IBFoyrwk52dhF+5z/ZAbzq5Jy7Wq0aLUsOn69JNS+7YeuyHaNzJwBIYE0QlUH/p5d3L+OON72Fsexyb7OK/3og==",
"dev": true,
"requires": {
"postcss": "^5.0.14"
@@ -8998,7 +10089,7 @@
"supports-color": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==",
"dev": true,
"requires": {
"has-flag": "^1.0.0"
@@ -9009,7 +10100,7 @@
"postcss-discard-overridden": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz",
- "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=",
+ "integrity": "sha512-IyKoDL8QNObOiUc6eBw8kMxBHCfxUaERYTUe2QF8k7j/xiirayDzzkmlR6lMQjrAM1p1DDRTvWrS7Aa8lp6/uA==",
"dev": true,
"requires": {
"postcss": "^5.0.16"
@@ -9030,7 +10121,7 @@
"supports-color": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==",
"dev": true,
"requires": {
"has-flag": "^1.0.0"
@@ -9041,7 +10132,7 @@
"postcss-discard-unused": {
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz",
- "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=",
+ "integrity": "sha512-nCbFNfqYAbKCw9J6PSJubpN9asnrwVLkRDFc4KCwyUEdOtM5XDE/eTW3OpqHrYY1L4fZxgan7LLRAAYYBzwzrg==",
"dev": true,
"requires": {
"postcss": "^5.0.14",
@@ -9063,7 +10154,7 @@
"supports-color": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==",
"dev": true,
"requires": {
"has-flag": "^1.0.0"
@@ -9074,7 +10165,7 @@
"postcss-extend": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/postcss-extend/-/postcss-extend-1.0.5.tgz",
- "integrity": "sha1-XqmL94e6PKz030YJdD+AqDOx0Oc=",
+ "integrity": "sha512-zplAc8IovPMe/JqV0B9nl6o6sElIX7VX1CP2FbV+lGZud3hcnDMr4clN0S8xdHthQoTNDN2K1Q+z0YEW5FWc8A==",
"dev": true,
"requires": {
"postcss": "^5.0.4"
@@ -9095,7 +10186,7 @@
"supports-color": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==",
"dev": true,
"requires": {
"has-flag": "^1.0.0"
@@ -9104,13 +10195,12 @@
}
},
"postcss-filter-plugins": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz",
- "integrity": "sha1-bYWGJTTXNaxCDkqFgG4fXUKG2Ew=",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz",
+ "integrity": "sha512-T53GVFsdinJhgwm7rg1BzbeBRomOg9y5MBVhGcsV0CxurUdVj1UlPdKtn7aqYA/c/QVkzKMjq2bSV5dKG5+AwQ==",
"dev": true,
"requires": {
- "postcss": "^5.0.4",
- "uniqid": "^4.0.0"
+ "postcss": "^5.0.4"
},
"dependencies": {
"postcss": {
@@ -9128,7 +10218,7 @@
"supports-color": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==",
"dev": true,
"requires": {
"has-flag": "^1.0.0"
@@ -9148,7 +10238,7 @@
"postcss-font-variant": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-3.0.0.tgz",
- "integrity": "sha1-CMzIj2BQuoLtjvLMdsDGprQfGD4=",
+ "integrity": "sha512-zZ89AX55J3Bfn6xQBOwNV75I+4Mqj7fhILlwu2KT+pDC3Xsu5vI0YQil3Q1imJQGhN5XnN/DMFQp+UvV91IXig==",
"dev": true,
"requires": {
"postcss": "^6.0.1"
@@ -9168,7 +10258,7 @@
"postcss-image-set-polyfill": {
"version": "0.3.5",
"resolved": "https://registry.npmjs.org/postcss-image-set-polyfill/-/postcss-image-set-polyfill-0.3.5.tgz",
- "integrity": "sha1-Dxk0E3AM8fgr05Bm7wFtZaShgYE=",
+ "integrity": "sha512-4Df/0UNixbXqkw8k+j4CWbicfeZe8/pzkePgBRwWk+iA8wpz1r9ac0YZoXAFAtGISGrw+2d+Kzm/RItZIlu43Q==",
"dev": true,
"requires": {
"postcss": "^6.0.1",
@@ -9178,7 +10268,7 @@
"postcss-import": {
"version": "10.0.0",
"resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-10.0.0.tgz",
- "integrity": "sha1-TIXJewmRNsxeoCQNwd/b/eTi674=",
+ "integrity": "sha512-tU3ZSSdREBRjndNDxfyaDOozz2ODOlV0DP26EZuZ9b3YVr0PR/AyGiGH/nhqNX1j0ku+D7JgrbcnZd8S6iLwFA==",
"dev": true,
"requires": {
"object-assign": "^4.0.1",
@@ -9191,7 +10281,7 @@
"postcss-initial": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-2.0.0.tgz",
- "integrity": "sha1-cnFfczbgu3k1HZnuZcSiU6hEG6Q=",
+ "integrity": "sha512-XiU1taLGTuHjr/9QMrGMA3Y6zIIxlUudHL7XwLDepPPNSp8pJTYkv5VCQC8IynXGsXa3FKzNJ37eZdfsI71NjA==",
"dev": true,
"requires": {
"lodash.template": "^4.2.4",
@@ -9199,9 +10289,9 @@
}
},
"postcss-less": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-1.1.3.tgz",
- "integrity": "sha512-WS0wsQxRm+kmN8wEYAGZ3t4lnoNfoyx9EJZrhiPR1K0lMHR0UNWnz52Ya5QRXChHtY75Ef+kDc05FpnBujebgw==",
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-1.1.5.tgz",
+ "integrity": "sha512-QQIiIqgEjNnquc0d4b6HDOSFZxbFQoy4MPpli2lSLpKhMyBkKwwca2HFqu4xzxlKID/F2fxSOowwtKpgczhF7A==",
"dev": true,
"requires": {
"postcss": "^5.2.16"
@@ -9222,7 +10312,7 @@
"supports-color": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==",
"dev": true,
"requires": {
"has-flag": "^1.0.0"
@@ -9233,7 +10323,7 @@
"postcss-load-config": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-1.2.0.tgz",
- "integrity": "sha1-U56a/J3chiASHr+djDZz4M5Q0oo=",
+ "integrity": "sha512-3fpCfnXo9Qd/O/q/XL4cJUhRsqjVD2V1Vhy3wOEcLE5kz0TGtdDXJSoiTdH4e847KphbEac4+EZSH4qLRYIgLw==",
"dev": true,
"requires": {
"cosmiconfig": "^2.1.0",
@@ -9245,7 +10335,7 @@
"postcss-load-options": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/postcss-load-options/-/postcss-load-options-1.2.0.tgz",
- "integrity": "sha1-sJixVZ3awt8EvAuzdfmaXP4rbYw=",
+ "integrity": "sha512-WKS5LJMZLWGwtfhs5ahb2ycpoYF3m0kK4QEaM+elr5EpiMt0H296P/9ETa13WXzjPwB0DDTBiUBBWSHoApQIJg==",
"dev": true,
"requires": {
"cosmiconfig": "^2.1.0",
@@ -9255,7 +10345,7 @@
"postcss-load-plugins": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz",
- "integrity": "sha1-dFdoEWWZrKLwCfrUJrABdQSdjZI=",
+ "integrity": "sha512-/WGUMYhKiryWjYO6c7kAcqMuD7DVkaQ8HcbQenDme/d3OBOmrYMFObOKgUWyUy1uih5U2Dakq8H6VcJi5C9wHQ==",
"dev": true,
"requires": {
"cosmiconfig": "^2.1.1",
@@ -9265,7 +10355,7 @@
"postcss-media-minmax": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-3.0.0.tgz",
- "integrity": "sha1-Z1JWA3pD70C8Twdgv9BtTcadSNI=",
+ "integrity": "sha512-lYwGbUhk6+8NSMJ4P2T4+Zi0tbHUDFgdHXC4zTe/P7zkIk+lRuaEpZcZFzlL3dxWarnwc6ImpDV4MGBV4uDDXg==",
"dev": true,
"requires": {
"postcss": "^6.0.1"
@@ -9274,13 +10364,13 @@
"postcss-media-query-parser": {
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz",
- "integrity": "sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ=",
+ "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==",
"dev": true
},
"postcss-merge-idents": {
"version": "2.1.7",
"resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz",
- "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=",
+ "integrity": "sha512-9DHmfCZ7/hNHhIKnNkz4CU0ejtGen5BbTRJc13Z2uHfCedeCUsK2WEQoAJRBL+phs68iWK6Qf8Jze71anuysWA==",
"dev": true,
"requires": {
"has": "^1.0.1",
@@ -9303,7 +10393,7 @@
"supports-color": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==",
"dev": true,
"requires": {
"has-flag": "^1.0.0"
@@ -9314,7 +10404,7 @@
"postcss-merge-longhand": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz",
- "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=",
+ "integrity": "sha512-ma7YvxjdLQdifnc1HFsW/AW6fVfubGyR+X4bE3FOSdBVMY9bZjKVdklHT+odknKBB7FSCfKIHC3yHK7RUAqRPg==",
"dev": true,
"requires": {
"postcss": "^5.0.4"
@@ -9335,7 +10425,7 @@
"supports-color": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==",
"dev": true,
"requires": {
"has-flag": "^1.0.0"
@@ -9346,7 +10436,7 @@
"postcss-merge-rules": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz",
- "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=",
+ "integrity": "sha512-Wgg2FS6W3AYBl+5L9poL6ZUISi5YzL+sDCJfM7zNw/Q1qsyVQXXZ2cbVui6mu2cYJpt1hOKCGj1xA4mq/obz/Q==",
"dev": true,
"requires": {
"browserslist": "^1.5.2",
@@ -9359,7 +10449,7 @@
"browserslist": {
"version": "1.7.7",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz",
- "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
+ "integrity": "sha512-qHJblDE2bXVRYzuDetv/wAeHOJyO97+9wxC1cdCtyzgNuSozOyRCiiLaCR1f71AN66lQdVVBipWm63V+a7bPOw==",
"dev": true,
"requires": {
"caniuse-db": "^1.0.30000639",
@@ -9381,7 +10471,7 @@
"supports-color": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==",
"dev": true,
"requires": {
"has-flag": "^1.0.0"
@@ -9392,13 +10482,13 @@
"postcss-message-helpers": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz",
- "integrity": "sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4=",
+ "integrity": "sha512-tPLZzVAiIJp46TBbpXtrUAKqedXSyW5xDEo1sikrfEfnTs+49SBZR/xDdqCiJvSSbtr615xDsaMF3RrxS2jZlA==",
"dev": true
},
"postcss-minify-font-values": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz",
- "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=",
+ "integrity": "sha512-vFSPzrJhNe6/8McOLU13XIsERohBJiIFFuC1PolgajOZdRWqRgKITP/A4Z/n4GQhEmtbxmO9NDw3QLaFfE1dFQ==",
"dev": true,
"requires": {
"object-assign": "^4.0.1",
@@ -9421,7 +10511,7 @@
"supports-color": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==",
"dev": true,
"requires": {
"has-flag": "^1.0.0"
@@ -9432,7 +10522,7 @@
"postcss-minify-gradients": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz",
- "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=",
+ "integrity": "sha512-DZhT0OE+RbVqVyGsTIKx84rU/5cury1jmwPa19bViqYPQu499ZU831yMzzsyC8EhiZVd73+h5Z9xb/DdaBpw7Q==",
"dev": true,
"requires": {
"postcss": "^5.0.12",
@@ -9454,7 +10544,7 @@
"supports-color": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==",
"dev": true,
"requires": {
"has-flag": "^1.0.0"
@@ -9465,7 +10555,7 @@
"postcss-minify-params": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz",
- "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=",
+ "integrity": "sha512-hhJdMVgP8vasrHbkKAk+ab28vEmPYgyuDzRl31V3BEB3QOR3L5TTIVEWLDNnZZ3+fiTi9d6Ker8GM8S1h8p2Ow==",
"dev": true,
"requires": {
"alphanum-sort": "^1.0.1",
@@ -9489,7 +10579,7 @@
"supports-color": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==",
"dev": true,
"requires": {
"has-flag": "^1.0.0"
@@ -9500,7 +10590,7 @@
"postcss-minify-selectors": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz",
- "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=",
+ "integrity": "sha512-e13vxPBSo3ZaPne43KVgM+UETkx3Bs4/Qvm6yXI9HQpQp4nyb7HZ0gKpkF+Wn2x+/dbQ+swNpCdZSbMOT7+TIA==",
"dev": true,
"requires": {
"alphanum-sort": "^1.0.2",
@@ -9524,7 +10614,7 @@
"supports-color": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==",
"dev": true,
"requires": {
"has-flag": "^1.0.0"
@@ -9544,7 +10634,7 @@
"postcss-normalize-charset": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz",
- "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=",
+ "integrity": "sha512-RKgjEks83l8w4yEhztOwNZ+nLSrJ+NvPNhpS+mVDzoaiRHZQVoG7NF2TP5qjwnaN9YswUhj6m1E0S0Z+WDCgEQ==",
"dev": true,
"requires": {
"postcss": "^5.0.5"
@@ -9565,7 +10655,7 @@
"supports-color": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==",
"dev": true,
"requires": {
"has-flag": "^1.0.0"
@@ -9576,7 +10666,7 @@
"postcss-normalize-url": {
"version": "3.0.8",
"resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz",
- "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=",
+ "integrity": "sha512-WqtWG6GV2nELsQEFES0RzfL2ebVwmGl/M8VmMbshKto/UClBo+mznX8Zi4/hkThdqx7ijwv+O8HWPdpK7nH/Ig==",
"dev": true,
"requires": {
"is-absolute-url": "^2.0.0",
@@ -9600,7 +10690,7 @@
"supports-color": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==",
"dev": true,
"requires": {
"has-flag": "^1.0.0"
@@ -9611,7 +10701,7 @@
"postcss-ordered-values": {
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz",
- "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=",
+ "integrity": "sha512-5RB1IUZhkxDCfa5fx/ogp/A82mtq+r7USqS+7zt0e428HJ7+BHCxyeY39ClmkkUtxdOd3mk8gD6d9bjH2BECMg==",
"dev": true,
"requires": {
"postcss": "^5.0.4",
@@ -9633,7 +10723,7 @@
"supports-color": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==",
"dev": true,
"requires": {
"has-flag": "^1.0.0"
@@ -9644,7 +10734,7 @@
"postcss-pseudo-class-any-link": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-4.0.0.tgz",
- "integrity": "sha1-kVKgYT00UHIFE+iJKFS65C0O5o4=",
+ "integrity": "sha512-xindgr9qqu6HDnHKk7lJSIII6nvNmGKxIb8BOUUfteLctichwaNEGtwWvq66Sc/EuTu/bK/+fAyLRwWkPx/nFA==",
"dev": true,
"requires": {
"postcss": "^6.0.1",
@@ -9654,7 +10744,7 @@
"postcss-pseudoelements": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/postcss-pseudoelements/-/postcss-pseudoelements-5.0.0.tgz",
- "integrity": "sha1-7vGU6NUkZFylIKlJ6V5RjoEkAss=",
+ "integrity": "sha512-XHKyn37k6nm8R9C1g+PXisjp5Y8ISOpeuQe9IVCAe5I2+t2WVBtF3YhS1TsRz3asMkW1zg+tIe6g7eX/sT/QOg==",
"dev": true,
"requires": {
"postcss": "^6.0.0"
@@ -9663,7 +10753,7 @@
"postcss-reduce-idents": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz",
- "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=",
+ "integrity": "sha512-0+Ow9e8JLtffjumJJFPqvN4qAvokVbdQPnijUDSOX8tfTwrILLP4ETvrZcXZxAtpFLh/U0c+q8oRMJLr1Kiu4w==",
"dev": true,
"requires": {
"postcss": "^5.0.4",
@@ -9685,7 +10775,7 @@
"supports-color": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==",
"dev": true,
"requires": {
"has-flag": "^1.0.0"
@@ -9696,7 +10786,7 @@
"postcss-reduce-initial": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz",
- "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=",
+ "integrity": "sha512-jJFrV1vWOPCQsIVitawGesRgMgunbclERQ/IRGW7r93uHrVzNQQmHQ7znsOIjJPZ4yWMzs5A8NFhp3AkPHPbDA==",
"dev": true,
"requires": {
"postcss": "^5.0.4"
@@ -9717,7 +10807,7 @@
"supports-color": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==",
"dev": true,
"requires": {
"has-flag": "^1.0.0"
@@ -9728,7 +10818,7 @@
"postcss-reduce-transforms": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz",
- "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=",
+ "integrity": "sha512-lGgRqnSuAR5i5uUg1TA33r9UngfTadWxOyL2qx1KuPoCQzfmtaHjp9PuwX7yVyRxG3BWBzeFUaS5uV9eVgnEgQ==",
"dev": true,
"requires": {
"has": "^1.0.1",
@@ -9751,7 +10841,7 @@
"supports-color": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==",
"dev": true,
"requires": {
"has-flag": "^1.0.0"
@@ -9762,7 +10852,7 @@
"postcss-replace-overflow-wrap": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-2.0.0.tgz",
- "integrity": "sha1-eU22+qVPjbEAhUOSqTr0V2i04ls=",
+ "integrity": "sha512-JNYt+DiUQiCtsy17cqcHQlCJ5huBPDq8F49hlnTd747GCMvaUEq4ouI0QR0E38zdKs1ptnzhoGYwm6mvpbeD5w==",
"dev": true,
"requires": {
"postcss": "^6.0.1"
@@ -9781,52 +10871,52 @@
},
"dependencies": {
"ansi-styles": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
- "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
"requires": {
"color-convert": "^1.9.0"
}
},
"chalk": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
- "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"dev": true,
"requires": {
- "ansi-styles": "^3.1.0",
+ "ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
- "supports-color": "^4.0.0"
+ "supports-color": "^5.3.0"
}
},
"has-flag": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
- "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
"dev": true
},
"supports-color": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
- "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"dev": true,
"requires": {
- "has-flag": "^2.0.0"
+ "has-flag": "^3.0.0"
}
}
}
},
"postcss-resolve-nested-selector": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz",
- "integrity": "sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4=",
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.6.tgz",
+ "integrity": "sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw==",
"dev": true
},
"postcss-safe-parser": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-3.0.1.tgz",
- "integrity": "sha1-t1Pv9sfArqXoN1++TN6L+QY/8UI=",
+ "integrity": "sha512-eK9pkDrG4YAt9IeopMfv3r94jL7VlNqUxjahusQS1pOCZKJCxs37vQJEABaZHJ9l1oc+4ddcJ1aTxctvR28Ong==",
"dev": true,
"requires": {
"postcss": "^6.0.6"
@@ -9843,18 +10933,72 @@
}
},
"postcss-scss": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-1.0.3.tgz",
- "integrity": "sha512-N2ZPDOV5PGEGVwdiB7b1QppxKkmkHodNWkemja7PV+/mHqbUlA6ZcYRreden5Ag5nwBBX8/aRE7lfg1xjdszyg==",
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-1.0.6.tgz",
+ "integrity": "sha512-4EFYGHcEw+H3E06PT/pQQri06u/1VIIPjeJQaM8skB80vZuXMhp4cSNV5azmdNkontnOID/XYWEvEEELLFB1ww==",
"dev": true,
"requires": {
- "postcss": "^6.0.15"
+ "postcss": "^6.0.23"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "dev": true
+ },
+ "postcss": {
+ "version": "6.0.23",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
+ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.4.1",
+ "source-map": "^0.6.1",
+ "supports-color": "^5.4.0"
+ }
+ },
+ "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": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
}
},
"postcss-selector-matches": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/postcss-selector-matches/-/postcss-selector-matches-3.0.1.tgz",
- "integrity": "sha1-5WNAEeE5UIgYYbvdWMLQER/8lqs=",
+ "integrity": "sha512-R8p740Ufx5ho+agdlZ389OOOrylLJGMWwnpbm9LBoV/L4aL12MRR+zuGWJo03XYUAeXtAggSEnn6wngoSOqweQ==",
"dev": true,
"requires": {
"balanced-match": "^0.4.2",
@@ -9864,7 +11008,7 @@
"balanced-match": {
"version": "0.4.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
- "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=",
+ "integrity": "sha512-STw03mQKnGUYtoNjmowo4F2cRmIIxYEGiMsjjwla/u5P1lxadj/05WkNaFjNiKTgJkj8KiXbgAiRTmcQRwQNtg==",
"dev": true
}
}
@@ -9872,7 +11016,7 @@
"postcss-selector-not": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-3.0.1.tgz",
- "integrity": "sha1-Lk2y8JZTNsAefOx9tsYN/3ZzNdk=",
+ "integrity": "sha512-Tt/45Rvaj3I/nCHHMG3L9ioiJjI2YEk8lsvQbko+N6wrOBfLOx0yk51DMT3Ynhd7GzQwXinzeO3gYnwtUe83pA==",
"dev": true,
"requires": {
"balanced-match": "^0.4.2",
@@ -9882,7 +11026,7 @@
"balanced-match": {
"version": "0.4.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
- "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=",
+ "integrity": "sha512-STw03mQKnGUYtoNjmowo4F2cRmIIxYEGiMsjjwla/u5P1lxadj/05WkNaFjNiKTgJkj8KiXbgAiRTmcQRwQNtg==",
"dev": true
}
}
@@ -9890,7 +11034,7 @@
"postcss-selector-parser": {
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz",
- "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=",
+ "integrity": "sha512-3pqyakeGhrO0BQ5+/tGTfvi5IAUAhHRayGK8WFSu06aEv2BmHoXw/Mhb+w7VY5HERIuC+QoUI7wgrCcq2hqCVA==",
"dev": true,
"requires": {
"flatten": "^1.0.2",
@@ -9901,7 +11045,7 @@
"postcss-svgo": {
"version": "2.1.6",
"resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz",
- "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=",
+ "integrity": "sha512-y5AdQdgBoF4rbpdbeWAJuxE953g/ylRfVNp6mvAi61VCN/Y25Tu9p5mh3CyI42WbTRIiwR9a1GdFtmDnNPeskQ==",
"dev": true,
"requires": {
"is-svg": "^2.0.0",
@@ -9925,7 +11069,7 @@
"supports-color": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==",
"dev": true,
"requires": {
"has-flag": "^1.0.0"
@@ -9936,7 +11080,7 @@
"postcss-unique-selectors": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz",
- "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=",
+ "integrity": "sha512-WZX8r1M0+IyljoJOJleg3kYm10hxNYF9scqAT7v/xeSX1IdehutOM85SNO0gP9K+bgs86XERr7Ud5u3ch4+D8g==",
"dev": true,
"requires": {
"alphanum-sort": "^1.0.1",
@@ -9959,7 +11103,7 @@
"supports-color": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==",
"dev": true,
"requires": {
"has-flag": "^1.0.0"
@@ -9981,15 +11125,26 @@
}
},
"postcss-value-parser": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz",
- "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=",
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
"dev": true
},
+ "postcss-values-parser": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-1.5.0.tgz",
+ "integrity": "sha512-3M3p+2gMp0AH3da530TlX8kiO1nxdTnc3C6vr8dMxRLIlh8UYkz0/wcwptSXjhtx2Fr0TySI7a+BHDQ8NL7LaQ==",
+ "dev": true,
+ "requires": {
+ "flatten": "^1.0.2",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ },
"postcss-zindex": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz",
- "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=",
+ "integrity": "sha512-uhRZ2hRgj0lorxm9cr62B01YzpUe63h0RXMXQ4gWW3oa2rpJh+FJAiEAytaFCPU/VgaBS+uW2SJ1XKyDNz1h4w==",
"dev": true,
"requires": {
"has": "^1.0.1",
@@ -10012,7 +11167,7 @@
"supports-color": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==",
"dev": true,
"requires": {
"has-flag": "^1.0.0"
@@ -10023,71 +11178,63 @@
"prelude-ls": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
- "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==",
"dev": true
},
"prepend-http": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
- "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=",
+ "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==",
"dev": true
},
"preserve": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz",
- "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks="
+ "integrity": "sha512-s/46sYeylUfHNjI+sA/78FAHlmIuKqI9wNnzEOGehAlUUYeObv5C2mOinXBjyUyWmJ2SfcS2/ydApH4hTF4WXQ=="
},
"pretty-hrtime": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
- "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=",
+ "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==",
"dev": true
},
"prettyjson": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/prettyjson/-/prettyjson-1.2.1.tgz",
- "integrity": "sha1-/P+rQdGcq0365eV15kJGYZsS0ok=",
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/prettyjson/-/prettyjson-1.2.5.tgz",
+ "integrity": "sha512-rksPWtoZb2ZpT5OVgtmy0KHVM+Dca3iVwWY9ifwhcexfjebtgjg3wmrUt9PvJ59XIYBcknQeYHD8IAnVlh9lAw==",
"requires": {
- "colors": "^1.1.2",
+ "colors": "1.4.0",
"minimist": "^1.2.0"
},
"dependencies": {
"colors": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz",
- "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg=="
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz",
+ "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA=="
}
}
},
- "private": {
- "version": "0.1.8",
- "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
- "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
- "dev": true
- },
"process": {
"version": "0.11.10",
"resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
- "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
+ "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
"dev": true
},
"process-nextick-args": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
- "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M="
+ "integrity": "sha512-yN0WQmuCX63LP/TMvAg31nvT6m4vDqJEiiv2CAZqWOGNWutc9DfDk1NPYYmKUFmaVM2UwDowH4u5AHWYP/jxKw=="
},
- "promise": {
- "version": "7.3.1",
- "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
- "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
- "requires": {
- "asap": "~2.0.3"
- }
+ "progress": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
+ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
+ "dev": true
},
"prompt": {
"version": "0.2.14",
"resolved": "https://registry.npmjs.org/prompt/-/prompt-0.2.14.tgz",
- "integrity": "sha1-V3VPZPVD/XsIRXB8gY7OYY8F/9w=",
+ "integrity": "sha512-jDK5yEbAakJmNm+260gZG1+PuzX3jT5Jy0VZAUGrrW9RQ1JEWEDEVNnhO70mL3+U5r6bSJo02xsE34wOS/LnrA==",
"requires": {
"pkginfo": "0.x.x",
"read": "1.0.x",
@@ -10099,17 +11246,12 @@
"async": {
"version": "0.2.10",
"resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
- "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E="
- },
- "colors": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz",
- "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w="
+ "integrity": "sha512-eAkdoKxU6/LkKDBzLpT+t6Ff5EtfSF4wx1WfJiPEEV7WNLnDaRXk0oVysiEPm262roaachGexwUv94WhSgN5TQ=="
},
"winston": {
"version": "0.8.3",
"resolved": "https://registry.npmjs.org/winston/-/winston-0.8.3.tgz",
- "integrity": "sha1-ZLar9M0Brcrv1QCTk7HY6L7BnbA=",
+ "integrity": "sha512-fPoamsHq8leJ62D1M9V/f15mjQ1UHe4+7j1wpAT3fqgA5JqhJkk4aIfPEjfMTI9x6ZTjaLOpMAjluLtmgO5b6g==",
"requires": {
"async": "0.2.x",
"colors": "0.6.x",
@@ -10123,33 +11265,51 @@
}
},
"prop-types": {
- "version": "15.6.2",
- "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.2.tgz",
- "integrity": "sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ==",
+ "version": "15.8.1",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
+ "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
"requires": {
- "loose-envify": "^1.3.1",
- "object-assign": "^4.1.1"
+ "loose-envify": "^1.4.0",
+ "object-assign": "^4.1.1",
+ "react-is": "^16.13.1"
+ },
+ "dependencies": {
+ "loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "requires": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ }
+ }
}
},
"proxy-addr": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.2.tgz",
- "integrity": "sha1-ZXFQT0e7mI7IGAJT+F3X4UlSvew=",
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
+ "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
"requires": {
- "forwarded": "~0.1.2",
- "ipaddr.js": "1.5.2"
+ "forwarded": "0.2.0",
+ "ipaddr.js": "1.9.1"
+ },
+ "dependencies": {
+ "forwarded": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
+ "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="
+ }
}
},
"prr": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
- "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
+ "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==",
"dev": true
},
"ps-tree": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-0.0.3.tgz",
- "integrity": "sha1-2/jXUqf+Ivp9WGNWiUmWEOknbdw=",
+ "integrity": "sha512-FRHemqwOCUAt+U9Ni9bN/JfsFIBIm1Ho2Zr6Y/yWCgbfecrU4cEuYDebyv/pJpFBltArsJ3j4EgI89PR+BsXTA==",
"requires": {
"event-stream": "~0.5"
}
@@ -10157,18 +11317,28 @@
"pseudomap": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
- "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
+ "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==",
"dev": true
},
"psl": {
- "version": "1.1.31",
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz",
- "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw=="
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz",
+ "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==",
+ "requires": {
+ "punycode": "^2.3.1"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="
+ }
+ }
},
"pstree.remy": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.2.tgz",
- "integrity": "sha512-vL6NLxNHzkNTjGJUpMm5PLC+94/0tTlC1vkP9bdU0pOHih+EujMjgMTwfZopZvHWRFbqJ5Y73OMoau50PewDDA==",
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz",
+ "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==",
"dev": true
},
"public-encrypt": {
@@ -10185,10 +11355,16 @@
"safe-buffer": "^5.1.2"
},
"dependencies": {
+ "bn.js": {
+ "version": "4.12.1",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz",
+ "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==",
+ "dev": true
+ },
"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==",
"dev": true
}
}
@@ -10196,12 +11372,12 @@
"punycode": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
- "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
+ "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ=="
},
"q": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
- "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
+ "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==",
"dev": true
},
"qs": {
@@ -10219,22 +11395,16 @@
"strict-uri-encode": "^1.0.0"
}
},
- "querystring": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
- "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
- "dev": true
- },
"querystring-es3": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
- "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=",
+ "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==",
"dev": true
},
"quick-lru": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz",
- "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g="
+ "integrity": "sha512-tRS7sTgyxMXtLum8L65daJnHUhfDUgboRdcWW2bR9vBfrj2+O5HSMbQOJfJJjIVSPFqbBCF37FpwWXGitDc5tA=="
},
"randomatic": {
"version": "3.1.1",
@@ -10254,9 +11424,9 @@
}
},
"randombytes": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz",
- "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
"dev": true,
"requires": {
"safe-buffer": "^5.1.0"
@@ -10273,19 +11443,42 @@
}
},
"range-parser": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
- "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4="
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
},
"raw-body": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz",
- "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=",
+ "integrity": "sha512-Ss0DsBxqLxCmQkfG5yazYhtbVVTJqS9jTsZG2lhrNwqzOk2SUC7O/NB/M//CkEBqsrtmlNgJCPccJGuYSFr6Vg==",
"requires": {
"bytes": "3.0.0",
"http-errors": "1.6.2",
"iconv-lite": "0.4.19",
"unpipe": "1.0.0"
+ },
+ "dependencies": {
+ "depd": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz",
+ "integrity": "sha512-Jlk9xvkTDGXwZiIDyoM7+3AsuvJVoyOpRupvEVy9nX3YO3/ieZxhlgh8GpLNZ8AY7HjO6y2YwpMSh1ejhu3uIw=="
+ },
+ "http-errors": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz",
+ "integrity": "sha512-STnYGcKMXL9CGdtpeTFnLmgMSHTTNQJSHxiC4DETHKf934Q160Ht5pljrNeH24S0O9xUN+9vsDJZdZtk5js6Ww==",
+ "requires": {
+ "depd": "1.1.1",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.0.3",
+ "statuses": ">= 1.3.1 < 2"
+ }
+ },
+ "setprototypeof": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz",
+ "integrity": "sha512-9jphSf3UbIgpOX/RKvX02iw/rN2TKdusnsPpGfO/rkcsrd+IRqgHZb4VGnmL0Cynps8Nj2hN45wsi30BzrHDIw=="
+ }
}
},
"rc": {
@@ -10327,10 +11520,15 @@
"resolved": "https://registry.npmjs.org/react-hyperscript/-/react-hyperscript-3.2.0.tgz",
"integrity": "sha512-kf9VmxwCNqAImT3uDrCPJ8H5XdNzfSLps9x0qgJCH6OUCBiGAy1m9wHpedfr7GSuFqowhkNwv4ZuC40k3E/zRQ=="
},
+ "react-is": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
+ },
"react-loader": {
"version": "2.4.5",
"resolved": "https://registry.npmjs.org/react-loader/-/react-loader-2.4.5.tgz",
- "integrity": "sha1-zT5VHGzQc4wcDxPwc2VPk4KL5ak=",
+ "integrity": "sha512-xtlIupZgMpW7F06nNvDh6MAcTZ/zYU6l1L8JtbRvSRTc49dbmRzLmJBuB2Qb7FO9iP2q/rAw9wDWTjV3VxLy8w==",
"requires": {
"create-react-class": "^15.5.2",
"prop-types": "^15.5.8",
@@ -10362,12 +11560,12 @@
"isarray": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
+ "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ=="
},
"path-to-regexp": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz",
- "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz",
+ "integrity": "sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==",
"requires": {
"isarray": "0.0.1"
}
@@ -10409,7 +11607,7 @@
"read": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz",
- "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=",
+ "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==",
"requires": {
"mute-stream": "~0.0.4"
}
@@ -10417,7 +11615,7 @@
"read-cache": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
- "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=",
+ "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
"dev": true,
"requires": {
"pify": "^2.3.0"
@@ -10426,7 +11624,7 @@
"pify": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
"dev": true
}
}
@@ -10434,7 +11632,7 @@
"read-pkg": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
- "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
+ "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==",
"dev": true,
"requires": {
"load-json-file": "^1.0.0",
@@ -10445,7 +11643,7 @@
"read-pkg-up": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
- "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
+ "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==",
"dev": true,
"requires": {
"find-up": "^1.0.0",
@@ -10455,7 +11653,7 @@
"find-up": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
- "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+ "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==",
"dev": true,
"requires": {
"path-exists": "^2.0.0",
@@ -10465,7 +11663,7 @@
"path-exists": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
- "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+ "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==",
"dev": true,
"requires": {
"pinkie-promise": "^2.0.0"
@@ -10490,7 +11688,7 @@
"readdirp": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz",
- "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=",
+ "integrity": "sha512-LgQ8mdp6hbxJUZz27qxVl7gmFM/0DfHRO52c5RUbKAgMvr81tour7YYWW1JYNmrXyD/o0Myy9/DC3fUYkqnyzg==",
"requires": {
"graceful-fs": "^4.1.2",
"minimatch": "^3.0.2",
@@ -10501,12 +11699,12 @@
"recursive-iterator": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/recursive-iterator/-/recursive-iterator-2.0.3.tgz",
- "integrity": "sha1-0ODSx+eoMQnXMJHPBD/FCeWnbcM="
+ "integrity": "sha512-SqfNKjjTw7Lq3E2S6P8L5Ac7YFD91mbkzWRlxrWK4tWioJRKDhe1+PtWS0X0hkQNEzZDpSish0TTXAVM4cRUzQ=="
},
"redent": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
- "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
+ "integrity": "sha512-qtW5hKzGQZqKoh6JNSD+4lfitfPKGz42e6QwiRmPM5mmKtR0N41AbJRYu0xJi7nhOJ4WDgRkKvAk6tw4WIwR4g==",
"dev": true,
"requires": {
"indent-string": "^2.1.0",
@@ -10516,7 +11714,7 @@
"reduce-css-calc": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz",
- "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=",
+ "integrity": "sha512-0dVfwYVOlf/LBA2ec4OwQ6p3X9mYxn/wOl2xTcLwjnPYrkgEfPx3VI4eGCH3rQLlPISG5v9I9bkZosKsNRTRKA==",
"dev": true,
"requires": {
"balanced-match": "^0.4.2",
@@ -10527,34 +11725,51 @@
"balanced-match": {
"version": "0.4.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
- "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=",
+ "integrity": "sha512-STw03mQKnGUYtoNjmowo4F2cRmIIxYEGiMsjjwla/u5P1lxadj/05WkNaFjNiKTgJkj8KiXbgAiRTmcQRwQNtg==",
"dev": true
}
}
},
"reduce-function-call": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.2.tgz",
- "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.3.tgz",
+ "integrity": "sha512-Hl/tuV2VDgWgCSEeWMLwxLZqX7OK59eU1guxXsRKTAyeYimivsKdtcV4fu3r710tpG5GmDKDhQ0HSZLExnNmyQ==",
"dev": true,
"requires": {
- "balanced-match": "^0.4.2"
- },
- "dependencies": {
- "balanced-match": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
- "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=",
- "dev": true
- }
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "reflect.getprototypeof": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz",
+ "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.8",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.9",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0",
+ "get-intrinsic": "^1.2.7",
+ "get-proto": "^1.0.1",
+ "which-builtin-type": "^1.2.1"
}
},
"regenerate": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz",
- "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==",
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
+ "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==",
"dev": true
},
+ "regenerate-unicode-properties": {
+ "version": "10.2.0",
+ "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz",
+ "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==",
+ "dev": true,
+ "requires": {
+ "regenerate": "^1.4.2"
+ }
+ },
"regenerator-runtime": {
"version": "0.11.1",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
@@ -10562,14 +11777,12 @@
"dev": true
},
"regenerator-transform": {
- "version": "0.10.1",
- "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz",
- "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==",
+ "version": "0.15.2",
+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz",
+ "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==",
"dev": true,
"requires": {
- "babel-runtime": "^6.18.0",
- "babel-types": "^6.19.0",
- "private": "^0.1.6"
+ "@babel/runtime": "^7.8.4"
}
},
"regex-cache": {
@@ -10581,29 +11794,63 @@
}
},
"regex-not": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.0.tgz",
- "integrity": "sha1-Qvg+OXcWIt+CawKvF2Ul1qXxV/k=",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
"dev": true,
"requires": {
- "extend-shallow": "^2.0.1"
+ "extend-shallow": "^3.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "regexp.prototype.flags": {
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz",
+ "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==",
+ "requires": {
+ "call-bind": "^1.0.8",
+ "define-properties": "^1.2.1",
+ "es-errors": "^1.3.0",
+ "get-proto": "^1.0.1",
+ "gopd": "^1.2.0",
+ "set-function-name": "^2.0.2"
+ },
+ "dependencies": {
+ "define-properties": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
+ "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
+ "requires": {
+ "define-data-property": "^1.0.1",
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ }
+ },
+ "object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
+ }
}
},
"regexpu-core": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz",
- "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=",
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz",
+ "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==",
"dev": true,
"requires": {
- "regenerate": "^1.2.1",
- "regjsgen": "^0.2.0",
- "regjsparser": "^0.1.4"
+ "regenerate": "^1.4.2",
+ "regenerate-unicode-properties": "^10.2.0",
+ "regjsgen": "^0.8.0",
+ "regjsparser": "^0.12.0",
+ "unicode-match-property-ecmascript": "^2.0.0",
+ "unicode-match-property-value-ecmascript": "^2.1.0"
}
},
"registry-auth-token": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz",
- "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==",
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz",
+ "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==",
"dev": true,
"requires": {
"rc": "^1.1.6",
@@ -10613,33 +11860,25 @@
"registry-url": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz",
- "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=",
+ "integrity": "sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==",
"dev": true,
"requires": {
"rc": "^1.0.1"
}
},
"regjsgen": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz",
- "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=",
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz",
+ "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==",
"dev": true
},
"regjsparser": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz",
- "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=",
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz",
+ "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==",
"dev": true,
"requires": {
- "jsesc": "~0.5.0"
- },
- "dependencies": {
- "jsesc": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
- "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
- "dev": true
- }
+ "jsesc": "~3.0.2"
}
},
"remark": {
@@ -10701,22 +11940,22 @@
"remove-trailing-separator": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
- "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8="
+ "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw=="
},
"repeat-element": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
- "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo="
+ "integrity": "sha512-PJn5P/wQgXwp0Bpmzv9JU693QYky9P5bwntpuw8SsMXgUZHlcEyr9Vajgp/zhGSFX56/lv9Bz2k9mKrkpxLI4A=="
},
"repeat-string": {
"version": "1.6.1",
"resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
- "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
+ "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w=="
},
"repeating": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
- "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "integrity": "sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A==",
"dev": true,
"requires": {
"is-finite": "^1.0.0"
@@ -10725,7 +11964,7 @@
"replace-ext": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz",
- "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=",
+ "integrity": "sha512-vuNYXC7gG7IeVNBC1xUllqCcZKRbJoSPOBhnTEcAIiKCsbuef6zO3F0Rve3isPMMoNoQRWjQwbAgAjHUHniyEA==",
"dev": true
},
"request": {
@@ -10760,58 +11999,45 @@
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
},
- "mime-db": {
- "version": "1.37.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz",
- "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg=="
- },
- "mime-types": {
- "version": "2.1.21",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz",
- "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==",
- "requires": {
- "mime-db": "~1.37.0"
- }
- },
"qs": {
- "version": "6.5.2",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
- "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
+ "version": "6.5.3",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz",
+ "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA=="
},
"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=="
},
"uuid": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
- "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA=="
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
}
}
},
"require-directory": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
"dev": true
},
"require-from-string": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz",
- "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=",
+ "integrity": "sha512-H7AkJWMobeskkttHyhTVtS0fxpFLjxhbfMa6Bk3wimP7sdPRGL3EyCg3sAQenFfAe+xQ+oAc85Nmtvq0ROM83Q==",
"dev": true
},
"require-main-filename": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
- "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
+ "integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==",
"dev": true
},
"require-uncached": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz",
- "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=",
+ "integrity": "sha512-Xct+41K3twrbBHdxAgMoOS+cNcoqIjfM2/VxBF4LL2hVph7YsF8VSKyQ3BDFZwEVbok9yeDl2le/qo0S77WG2w==",
"dev": true,
"requires": {
"caller-path": "^0.1.0",
@@ -10819,37 +12045,41 @@
}
},
"resolve": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz",
- "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==",
+ "version": "1.22.10",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz",
+ "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==",
"dev": true,
"requires": {
- "path-parse": "^1.0.5"
+ "is-core-module": "^2.16.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
}
},
"resolve-from": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz",
- "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=",
+ "integrity": "sha512-kT10v4dhrlLNcnO084hEjvXCI1wUG9qZLoz2RogxqDQQYy7IxjI/iMUkOtQTNEh6rzHxvdQWHsJyel1pKOVCxg==",
"dev": true
},
"resolve-pathname": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-2.2.0.tgz",
- "integrity": "sha512-bAFz9ld18RzJfddgrO2e/0S2O81710++chRMUxHjXOYKF6jTAMrUNZrEZ1PvV0zlhfjidm08iRPdTLPno1FuRg=="
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz",
+ "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng=="
},
"resolve-url": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
- "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==",
"dev": true
},
- "resumer": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz",
- "integrity": "sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=",
+ "restore-cursor": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+ "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==",
+ "dev": true,
"requires": {
- "through": "~2.3.4"
+ "onetime": "^2.0.0",
+ "signal-exit": "^3.0.2"
}
},
"ret": {
@@ -10867,24 +12097,24 @@
"revalidator": {
"version": "0.1.8",
"resolved": "https://registry.npmjs.org/revalidator/-/revalidator-0.1.8.tgz",
- "integrity": "sha1-/s5hv6DBtSoga9axgZgYS91SOjs="
+ "integrity": "sha512-xcBILK2pA9oh4SiinPEZfhP8HfrB/ha+a2fTMyl7Om2WjlDVrOQy99N2MXXlUHqGJz4qEu2duXxHJjDWuK/0xg=="
},
"rgb": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/rgb/-/rgb-0.1.0.tgz",
- "integrity": "sha1-vieykej+/+rBvZlylyG/pA/AN7U=",
+ "integrity": "sha512-F49dXX73a92N09uQkfCp2QjwXpmJcn9/i9PvjmwsSIXUGqRLCf/yx5Q9gRxuLQTq248kakqQuc8GX/U/CxSqlA==",
"dev": true
},
"rgb-hex": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/rgb-hex/-/rgb-hex-2.1.0.tgz",
- "integrity": "sha1-x3PF/iJoolV42SU5qCp6XOU77aY=",
+ "integrity": "sha512-1hDa60MqECZiEGsa9TtcOE9VbV6fhZSMQARy7U+a2HkhIJyoEBhcG4v/qYAJYzV3Bbj+j52sBoAIKKF5EPuQZw==",
"dev": true
},
"right-align": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
- "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
+ "integrity": "sha512-yqINtL/G7vs2v+dFIZmFUDbnVyFUJFKd6gK22Kgo6R4jfJGFtisKyncWDDULgjfqf4ASQuIQyjJ7XZ+3aWpsAg==",
"dev": true,
"requires": {
"align-text": "^0.1.1"
@@ -10909,43 +12139,102 @@
}
},
"run-async": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
- "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
- "dev": true,
- "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==",
+ "dev": true
},
"rx-lite": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz",
- "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=",
+ "integrity": "sha512-Cun9QucwK6MIrp3mry/Y7hqD1oFqTYLQ4pGxaHTjIdaFDWRGGLikqp6u8LcWJnzpoALg9hap+JGk8sFIUuEGNA==",
"dev": true
},
"rx-lite-aggregates": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz",
- "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=",
+ "integrity": "sha512-3xPNZGW93oCjiO7PtKxRK6iOVYBWBvtf9QHDfU23Oc+dLIQmAV//UnyXV/yihv81VS/UqoQPk4NegS8EFi55Hg==",
"dev": true,
"requires": {
"rx-lite": "*"
}
},
+ "safe-array-concat": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz",
+ "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.2",
+ "get-intrinsic": "^1.2.6",
+ "has-symbols": "^1.1.0",
+ "isarray": "^2.0.5"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
+ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
+ "dev": true
+ }
+ }
+ },
"safe-buffer": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
"integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg=="
},
+ "safe-push-apply": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz",
+ "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==",
+ "dev": true,
+ "requires": {
+ "es-errors": "^1.3.0",
+ "isarray": "^2.0.5"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
+ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
+ "dev": true
+ }
+ }
+ },
"safe-regex": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
- "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==",
"dev": true,
"requires": {
"ret": "~0.1.10"
}
},
+ "safe-regex-test": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz",
+ "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==",
+ "requires": {
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "is-regex": "^1.2.1"
+ },
+ "dependencies": {
+ "is-regex": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz",
+ "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==",
+ "requires": {
+ "call-bound": "^1.0.2",
+ "gopd": "^1.2.0",
+ "has-tostringtag": "^1.0.2",
+ "hasown": "^2.0.2"
+ }
+ }
+ }
+ },
"safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
@@ -10954,7 +12243,7 @@
"sanitize-filename": {
"version": "1.6.1",
"resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.1.tgz",
- "integrity": "sha1-YS2hyWRz+gLczaktzVtKsWSmdyo=",
+ "integrity": "sha512-XJty6Im+yPTLWiF7mW6BeZogNpYLk4jCSHJh1Xm8MyTcjajC1NDB/SwJEN5rDop3hp0AV2FFipwaTnmtKJMyRQ==",
"requires": {
"truncate-utf8-bytes": "^1.0.0"
}
@@ -10978,19 +12267,56 @@
"resolved": "https://registry.npmjs.org/schedule/-/schedule-0.4.0.tgz",
"integrity": "sha512-hYjmoaEMojiMkWCxKr6ue+LYcZ29u29+AamWYmzwT2VOO9ws5UJp/wNhsVUPiUeNh+EdRfZm7nDeB40ffTfMhA==",
"requires": {
- "object-assign": "^4.1.1"
+ "object-assign": "^4.1.1"
+ }
+ },
+ "schema-utils": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz",
+ "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==",
+ "dev": true,
+ "requires": {
+ "@types/json-schema": "^7.0.5",
+ "ajv": "^6.12.4",
+ "ajv-keywords": "^3.5.2"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ }
}
},
"semver": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
- "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==",
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
"dev": true
},
"semver-diff": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz",
- "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=",
+ "integrity": "sha512-gL8F8L4ORwsS0+iQ34yCYv///jsOq0ZL7WP55d1HnJ32o7tyFYEFQZQA22mrLIacZdU6xecaBBZ+uEiffGNyXw==",
"dev": true,
"requires": {
"semver": "^5.0.3"
@@ -11019,7 +12345,7 @@
"statuses": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
- "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4="
+ "integrity": "sha512-wuTCPGlJONk/a1kqZ4fQM2+908lC7fa7nPYpTC1EhnvqLX/IICbeP1OZGDtA374trpSq68YubKUMo8oRhN46yg=="
}
}
},
@@ -11049,39 +12375,92 @@
"set-blocking": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
- "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==",
"dev": true
},
+ "set-function-length": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
+ "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
+ "requires": {
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.2"
+ },
+ "dependencies": {
+ "function-bind": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="
+ }
+ }
+ },
+ "set-function-name": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz",
+ "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==",
+ "requires": {
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
+ "functions-have-names": "^1.2.3",
+ "has-property-descriptors": "^1.0.2"
+ }
+ },
"set-immediate-shim": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz",
- "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E="
+ "integrity": "sha512-Li5AOqrZWCVA2n5kryzEmqai6bKSIvpz5oUJHPVj6+dsbD3X1ixtsY5tEnsaNpH3pFAHmG8eIHUrtEtohrg+UQ=="
+ },
+ "set-proto": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz",
+ "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==",
+ "dev": true,
+ "requires": {
+ "dunder-proto": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0"
+ }
},
"set-value": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
- "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
+ "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
"dev": true,
"requires": {
"extend-shallow": "^2.0.1",
"is-extendable": "^0.1.1",
"is-plain-object": "^2.0.3",
"split-string": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
}
},
"setimmediate": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
- "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="
+ "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA=="
},
"setprototypeof": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz",
- "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ="
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
+ "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ=="
},
"sha.js": {
"version": "2.4.11",
- "resolved": "http://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
+ "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
"integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
"dev": true,
"requires": {
@@ -11092,7 +12471,7 @@
"shebang-command": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
- "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+ "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==",
"dev": true,
"requires": {
"shebang-regex": "^1.0.0"
@@ -11101,50 +12480,96 @@
"shebang-regex": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
- "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+ "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==",
"dev": true
},
"shell-quote": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz",
- "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=",
- "dev": true,
- "requires": {
- "array-filter": "~0.0.0",
- "array-map": "~0.0.0",
- "array-reduce": "~0.0.0",
- "jsonify": "~0.0.0"
- }
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz",
+ "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==",
+ "dev": true
},
"shush": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/shush/-/shush-1.0.0.tgz",
- "integrity": "sha1-wnQVqeRY8v7TmyfPjrN8ADeCtDE=",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/shush/-/shush-1.0.4.tgz",
+ "integrity": "sha512-G5w1eODRWHWd/H5u6PMAN83TQJ/iOOM8cRgzC2v7trPbnMlq3XIxmQpGw8idyqRkE/wi5YX2j+fobj5xArPw+g==",
"requires": {
- "caller": "~0.0.1",
- "strip-json-comments": "~0.1.1"
+ "caller": "^1.1.0",
+ "strip-json-comments": "^3.1.1"
},
"dependencies": {
"strip-json-comments": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-0.1.3.tgz",
- "integrity": "sha1-Fkxk43Coo8wAyeAbU55WmCPw7lQ="
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="
}
}
},
+ "side-channel": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
+ "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
+ "requires": {
+ "es-errors": "^1.3.0",
+ "object-inspect": "^1.13.3",
+ "side-channel-list": "^1.0.0",
+ "side-channel-map": "^1.0.1",
+ "side-channel-weakmap": "^1.0.2"
+ }
+ },
+ "side-channel-list": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz",
+ "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
+ "requires": {
+ "es-errors": "^1.3.0",
+ "object-inspect": "^1.13.3"
+ }
+ },
+ "side-channel-map": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
+ "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
+ "requires": {
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.5",
+ "object-inspect": "^1.13.3"
+ }
+ },
+ "side-channel-weakmap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
+ "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
+ "requires": {
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.5",
+ "object-inspect": "^1.13.3",
+ "side-channel-map": "^1.0.1"
+ }
+ },
"signal-exit": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
- "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
"dev": true
},
"simple-swizzle": {
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
- "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=",
+ "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==",
"dev": true,
"requires": {
"is-arrayish": "^0.3.1"
+ },
+ "dependencies": {
+ "is-arrayish": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
+ "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==",
+ "dev": true
+ }
}
},
"sinon": {
@@ -11165,7 +12590,7 @@
"has-flag": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
"dev": true
},
"supports-color": {
@@ -11182,7 +12607,7 @@
"slash": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
- "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
+ "integrity": "sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg==",
"dev": true
},
"slice-ansi": {
@@ -11192,14 +12617,6 @@
"dev": true,
"requires": {
"is-fullwidth-code-point": "^2.0.0"
- },
- "dependencies": {
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
- "dev": true
- }
}
},
"snapdragon": {
@@ -11221,68 +12638,20 @@
"define-property": {
"version": "0.2.5",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
"dev": true,
"requires": {
"is-descriptor": "^0.1.0"
}
},
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
"dev": true,
"requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
+ "is-extendable": "^0.1.0"
}
- },
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true
}
}
},
@@ -11297,10 +12666,29 @@
"snapdragon-util": "^3.0.1"
},
"dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz",
+ "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.1",
+ "is-data-descriptor": "^1.0.1"
+ }
+ },
"isobject": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
"dev": true
}
}
@@ -11317,7 +12705,7 @@
"kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
"dev": true,
"requires": {
"is-buffer": "^1.1.5"
@@ -11328,71 +12716,73 @@
"sort-keys": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz",
- "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=",
+ "integrity": "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==",
"dev": true,
"requires": {
"is-plain-obj": "^1.0.0"
}
},
"source-list-map": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz",
- "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz",
+ "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==",
"dev": true
},
"source-map": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
"dev": true
},
"source-map-resolve": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
- "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
+ "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
"dev": true,
"requires": {
- "atob": "^2.1.1",
+ "atob": "^2.1.2",
"decode-uri-component": "^0.2.0",
"resolve-url": "^0.2.1",
"source-map-url": "^0.4.0",
"urix": "^0.1.0"
}
},
- "source-map-support": {
- "version": "0.4.18",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz",
- "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==",
- "dev": true,
- "requires": {
- "source-map": "^0.5.6"
- }
- },
"source-map-url": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
- "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz",
+ "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==",
"dev": true
},
"spdx-correct": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz",
- "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
+ "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==",
"dev": true,
"requires": {
- "spdx-license-ids": "^1.0.2"
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
}
},
- "spdx-expression-parse": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz",
- "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=",
+ "spdx-exceptions": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz",
+ "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==",
"dev": true
},
+ "spdx-expression-parse": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
+ "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
+ "dev": true,
+ "requires": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
"spdx-license-ids": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz",
- "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=",
+ "version": "3.0.21",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz",
+ "integrity": "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==",
"dev": true
},
"specificity": {
@@ -11404,12 +12794,12 @@
"spin.js": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/spin.js/-/spin.js-2.3.2.tgz",
- "integrity": "sha1-bKpW1SBnNFD9XPvGlx5tB3LDeho="
+ "integrity": "sha512-ryhCvKCRa6J5Fxa7Y+fnhE2a+e05JwfW5dxO82zPd0uDM9o+qp8p74BJUurjiqCqmDsWNvGOAxfqdD317XIedg=="
},
"split": {
"version": "0.3.3",
"resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz",
- "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=",
+ "integrity": "sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==",
"dev": true,
"requires": {
"through": "2"
@@ -11422,38 +12812,17 @@
"dev": true,
"requires": {
"extend-shallow": "^3.0.0"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
- "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
- "dev": true,
- "requires": {
- "assign-symbols": "^1.0.0",
- "is-extendable": "^1.0.1"
- }
- },
- "is-extendable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
- "dev": true,
- "requires": {
- "is-plain-object": "^2.0.4"
- }
- }
}
},
"sprintf-js": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
+ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="
},
"sshpk": {
- "version": "1.15.2",
- "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.15.2.tgz",
- "integrity": "sha512-Ra/OXQtuh0/enyl4ETZAfTaeksa6BXks5ZcjpSUNrjBr0DvrJKX+1fsKDPpT9TBXgHAFsa4510aNVgI8g/+SzA==",
+ "version": "1.18.0",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz",
+ "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==",
"requires": {
"asn1": "~0.2.3",
"assert-plus": "^1.0.0",
@@ -11469,18 +12838,18 @@
"stack-trace": {
"version": "0.0.10",
"resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
- "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA="
+ "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg=="
},
"state-toggle": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.0.tgz",
- "integrity": "sha1-0g+aYWu08MO5i5GSLSW2QKorxCU=",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz",
+ "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==",
"dev": true
},
"static-extend": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
- "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==",
"dev": true,
"requires": {
"define-property": "^0.2.5",
@@ -11490,80 +12859,32 @@
"define-property": {
"version": "0.2.5",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
"dev": true,
"requires": {
"is-descriptor": "^0.1.0"
}
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- }
- },
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true
}
}
},
"statuses": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
- "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew=="
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+ "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA=="
+ },
+ "stop-iteration-iterator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz",
+ "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==",
+ "requires": {
+ "es-errors": "^1.3.0",
+ "internal-slot": "^1.1.0"
+ }
},
"stream-browserify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz",
- "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz",
+ "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==",
"dev": true,
"requires": {
"inherits": "~2.0.1",
@@ -11573,7 +12894,7 @@
"stream-combiner": {
"version": "0.0.4",
"resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz",
- "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=",
+ "integrity": "sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==",
"dev": true,
"requires": {
"duplexer": "~0.1.1"
@@ -11593,15 +12914,15 @@
},
"dependencies": {
"process-nextick-args": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
- "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
"dev": true
},
"readable-stream": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
- "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
"dev": true,
"requires": {
"core-util-is": "~1.0.0",
@@ -11632,34 +12953,89 @@
"strict-uri-encode": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz",
- "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM="
+ "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ=="
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz",
+ "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ }
+ }
+ },
+ "string.fromcodepoint": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/string.fromcodepoint/-/string.fromcodepoint-0.2.1.tgz",
+ "integrity": "sha512-n69H31OnxSGSZyZbgBlvYIXlrMhJQ0dQAX1js1QDhpaUH6zmU3QYlj07bCwCNlPOu3oRXIubGPl2gDGnHsiCqg==",
+ "dev": true
+ },
+ "string.prototype.padend": {
+ "version": "3.1.6",
+ "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.6.tgz",
+ "integrity": "sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-object-atoms": "^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=",
+ "string.prototype.trim": {
+ "version": "1.2.10",
+ "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz",
+ "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==",
"dev": true,
"requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.2",
+ "define-data-property": "^1.1.4",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.5",
+ "es-object-atoms": "^1.0.0",
+ "has-property-descriptors": "^1.0.2"
}
},
- "string.fromcodepoint": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/string.fromcodepoint/-/string.fromcodepoint-0.2.1.tgz",
- "integrity": "sha1-jZeDM8C8klOPUPOD5IiPPlYZ1lM=",
- "dev": true
+ "string.prototype.trimend": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz",
+ "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.2",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
+ }
},
- "string.prototype.padend": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz",
- "integrity": "sha1-86rvfBcZ8XDF6rHDK/eA2W4h8vA=",
+ "string.prototype.trimstart": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz",
+ "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==",
"dev": true,
"requires": {
- "define-properties": "^1.1.2",
- "es-abstract": "^1.4.3",
- "function-bind": "^1.0.2"
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
}
},
"string_decoder": {
@@ -11671,9 +13047,9 @@
}
},
"stringify-entities": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-1.3.1.tgz",
- "integrity": "sha1-sVDsLXKsTBtfMktR+2soyc3/BYw=",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-1.3.2.tgz",
+ "integrity": "sha512-nrBAQClJAPN2p+uGCVJRPIPakKeKWZ9GtBCmormE7pWOSlHat7+x5A8gx85M7HM5Dt0BP3pP5RhVW77WdbJJ3A==",
"dev": true,
"requires": {
"character-entities-html4": "^1.0.0",
@@ -11685,7 +13061,7 @@
"strip-ansi": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==",
"dev": true,
"requires": {
"ansi-regex": "^2.0.0"
@@ -11694,7 +13070,7 @@
"strip-bom": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
- "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+ "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==",
"dev": true,
"requires": {
"is-utf8": "^0.2.0"
@@ -11703,13 +13079,13 @@
"strip-eof": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
- "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
+ "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==",
"dev": true
},
"strip-indent": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
- "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
+ "integrity": "sha512-I5iQq6aFMM62fBEAIB/hXzwJD6EEZ0xEGCX2t7oXqaKPIRgt4WruAQ285BISgdkP+HLGWyeGmNJcpIwFeRYRUA==",
"dev": true,
"requires": {
"get-stdin": "^4.0.1"
@@ -11718,13 +13094,13 @@
"strip-json-comments": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
- "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+ "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==",
"dev": true
},
"style-search": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz",
- "integrity": "sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI=",
+ "integrity": "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==",
"dev": true
},
"stylelint": {
@@ -11774,45 +13150,39 @@
"table": "^4.0.1"
},
"dependencies": {
- "ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
- "dev": true
- },
"ansi-styles": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
- "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
"requires": {
"color-convert": "^1.9.0"
}
},
"autoprefixer": {
- "version": "7.2.5",
- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-7.2.5.tgz",
- "integrity": "sha512-XqHfo8Ht0VU+T5P+eWEVoXza456KJ4l62BPewu3vpNf3LP9s2+zYXkXBznzYby4XeECXgG3N4i+hGvOhXErZmA==",
+ "version": "7.2.6",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-7.2.6.tgz",
+ "integrity": "sha512-Iq8TRIB+/9eQ8rbGhcP7ct5cYb/3qjNYAR2SnzLCEcwF6rvVOax8+9+fccgXk4bEhQGjOZd5TLhsksmAdsbGqQ==",
"dev": true,
"requires": {
- "browserslist": "^2.11.1",
- "caniuse-lite": "^1.0.30000791",
+ "browserslist": "^2.11.3",
+ "caniuse-lite": "^1.0.30000805",
"normalize-range": "^0.1.2",
"num2fraction": "^1.2.2",
- "postcss": "^6.0.16",
+ "postcss": "^6.0.17",
"postcss-value-parser": "^3.2.3"
}
},
"camelcase": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
- "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
+ "integrity": "sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==",
"dev": true
},
"camelcase-keys": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz",
- "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=",
+ "integrity": "sha512-Ej37YKYbFUI8QiYlvj9YHb6/Z60dZyPJW0Cs8sFilMbd2lP0bw3ylAq9yJkK4lcTA2dID5fG8LjmJYbO7kWb7Q==",
"dev": true,
"requires": {
"camelcase": "^4.1.0",
@@ -11821,14 +13191,14 @@
}
},
"chalk": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
- "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"dev": true,
"requires": {
- "ansi-styles": "^3.1.0",
+ "ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
- "supports-color": "^4.0.0"
+ "supports-color": "^5.3.0"
}
},
"cosmiconfig": {
@@ -11844,30 +13214,33 @@
}
},
"debug": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
- "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
"dev": true,
"requires": {
- "ms": "2.0.0"
+ "ms": "^2.1.1"
}
},
- "esprima": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz",
- "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==",
- "dev": true
+ "dot-prop": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz",
+ "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==",
+ "dev": true,
+ "requires": {
+ "is-obj": "^2.0.0"
+ }
},
"get-stdin": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz",
- "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=",
+ "integrity": "sha512-jZV7n6jGE3Gt7fgSTJoz91Ak5MuTLwMwkoYdjxuJ/AmjIsE1UC03y/IWkZCQGEvVNS9qoRNwy5BCqxImv0FVeA==",
"dev": true
},
"globby": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz",
- "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=",
+ "integrity": "sha512-yANWAN2DUcBtuus5Cpd+SKROzXHs2iVXFZt/Ykrfz6SAXqacLX25NZpltE+39ceMexYF4TtEadjuSTw8+3wX4g==",
"dev": true,
"requires": {
"array-union": "^1.0.1",
@@ -11879,27 +13252,27 @@
}
},
"has-flag": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
- "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
"dev": true
},
"indent-string": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz",
- "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=",
+ "integrity": "sha512-BYqTHXTGUIvg7t1r4sJNKcbDZkL92nkXA8YtRpbjFHRHGDL/NtUeiBJMeE60kIFN/Mg8ESaWQvftaYMGJzQZCQ==",
"dev": true
},
- "is-fullwidth-code-point": {
+ "is-obj": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
+ "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==",
"dev": true
},
"js-yaml": {
- "version": "3.10.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz",
- "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==",
+ "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",
@@ -11909,7 +13282,7 @@
"load-json-file": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
- "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
+ "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==",
"dev": true,
"requires": {
"graceful-fs": "^4.1.2",
@@ -11921,7 +13294,7 @@
"parse-json": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
- "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+ "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==",
"dev": true,
"requires": {
"error-ex": "^1.3.1",
@@ -11933,13 +13306,13 @@
"map-obj": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz",
- "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=",
+ "integrity": "sha512-TzQSV2DiMYgoF5RycneKVUzIa9bQsj/B3tTgsE3dOGqlzHnGIDaC7XBE7grnA+8kZPnfqSGFe95VHc2oc0VFUQ==",
"dev": true
},
"meow": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.0.tgz",
- "integrity": "sha512-Me/kel335m6vMKmEmA6c87Z6DUFW3JqkINRnxkbC+A/PUm0D5Fl2dEBQrPKnqCL9Te/CIa1MUt/0InMJhuC/sw==",
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz",
+ "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==",
"dev": true,
"requires": {
"camelcase-keys": "^4.0.0",
@@ -11953,10 +13326,16 @@
"trim-newlines": "^2.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
+ },
"parse-json": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-3.0.0.tgz",
- "integrity": "sha1-+m9HsY4jgm6tMvJj50TQ4ehH+xM=",
+ "integrity": "sha512-bO3CWnT9rDPNFvYVH9+t7ZqrML3DUPYzyN3X87T1snwJHbgrb8+oscL116q39/ViL+qYoMCwLH70N0bTORMa8w==",
"dev": true,
"requires": {
"error-ex": "^1.3.1"
@@ -11972,12 +13351,12 @@
}
},
"postcss-selector-parser": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz",
- "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=",
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz",
+ "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==",
"dev": true,
"requires": {
- "dot-prop": "^4.1.1",
+ "dot-prop": "^5.2.0",
"indexes-of": "^1.0.1",
"uniq": "^1.0.1"
}
@@ -11985,7 +13364,7 @@
"read-pkg": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
- "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
+ "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==",
"dev": true,
"requires": {
"load-json-file": "^4.0.0",
@@ -11996,7 +13375,7 @@
"read-pkg-up": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz",
- "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=",
+ "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==",
"dev": true,
"requires": {
"find-up": "^2.0.0",
@@ -12006,7 +13385,7 @@
"redent": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz",
- "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=",
+ "integrity": "sha512-XNwrTx77JQCEMXTeb8movBKuK75MgH0RZkujNuDKCezemx/voapl9i2gCSi8WWm8+ox5ycJi1gxF22fR7c0Ciw==",
"dev": true,
"requires": {
"indent-string": "^3.0.0",
@@ -12014,9 +13393,9 @@
}
},
"require-from-string": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.1.tgz",
- "integrity": "sha1-xUUjPp19pmFunVmt+zn8n1iGdv8=",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
+ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
"dev": true
},
"resolve-from": {
@@ -12025,50 +13404,31 @@
"integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
"dev": true
},
- "string-width": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
- "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
- "dev": true,
- "requires": {
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
- }
- },
- "strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
- "dev": true,
- "requires": {
- "ansi-regex": "^3.0.0"
- }
- },
"strip-bom": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
- "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+ "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
"dev": true
},
"strip-indent": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
- "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "integrity": "sha512-RsSNPLpq6YUL7QYy44RnPVTn/lcVZtb48Uof3X5JLbF4zD/Gs7ZFDv2HWol+leoQN2mT86LAzSshGfkTlSOpsA==",
"dev": true
},
"supports-color": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
- "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"dev": true,
"requires": {
- "has-flag": "^2.0.0"
+ "has-flag": "^3.0.0"
}
},
"trim-newlines": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz",
- "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=",
+ "integrity": "sha512-MTBWv3jhVjTU7XR3IQHllbiJs8sc75a80OEhB6or/q7pLTWgQ0bMGQXXYQSrSuXe6WiKWDZ5txXY5P59a/coVA==",
"dev": true
}
}
@@ -12100,19 +13460,25 @@
"supports-color": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
- "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==",
+ "dev": true
+ },
+ "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
},
"svg-tags": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz",
- "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=",
+ "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==",
"dev": true
},
"svgo": {
"version": "0.7.2",
"resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz",
- "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=",
+ "integrity": "sha512-jT/g9FFMoe9lu2IT6HtAxTA7RR2XOrmcrmCtGnyB/+GQnV6ZjNn+KOHZbZ35yL81+1F/aB6OeEsJztzBQ2EEwA==",
"dev": true,
"requires": {
"coa": "~1.0.1",
@@ -12127,22 +13493,22 @@
"colors": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
- "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=",
+ "integrity": "sha512-ENwblkFQpqqia6b++zLD/KUWafYlVY/UNnAp7oz7LY7E924wmpye416wBOmvv/HMWzl8gL1kJlfvId/1Dg176w==",
"dev": true
},
"minimist": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
- "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
"dev": true
},
"mkdirp": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
- "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "version": "0.5.6",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
+ "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
"dev": true,
"requires": {
- "minimist": "0.0.8"
+ "minimist": "^1.2.6"
}
}
}
@@ -12150,7 +13516,7 @@
"swagger-jsdoc": {
"version": "1.9.7",
"resolved": "https://registry.npmjs.org/swagger-jsdoc/-/swagger-jsdoc-1.9.7.tgz",
- "integrity": "sha1-enYdTX70pUv0V86lxn7DFruC+Lk=",
+ "integrity": "sha512-ELLLqU+JuThzOm5DxPwlz6SR8sl1Nv0tynnIFB1swozTbbTaDg6czHSMj88Op5IMYevzw4Q4RVjm17LLA9+Wew==",
"requires": {
"chokidar": "^1.7.0",
"commander": "^2.11.0",
@@ -12167,9 +13533,9 @@
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
},
"js-yaml": {
- "version": "3.12.2",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.2.tgz",
- "integrity": "sha512-QHn/Lh/7HhZ/Twc7vJYQTkjuCa0kaCcDcjK5Zlk2rvnUpy7DxMJ23+Jc2dcyvltwQVg1nygAVlB2oRDFHoRS5Q==",
+ "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"
@@ -12198,147 +13564,115 @@
},
"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.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=="
}
}
},
"swagger-schema-official": {
"version": "2.0.0-bab6bed",
"resolved": "https://registry.npmjs.org/swagger-schema-official/-/swagger-schema-official-2.0.0-bab6bed.tgz",
- "integrity": "sha1-cAcEaNbSl3ylI3suUZyn0Gouo/0="
+ "integrity": "sha512-rCC0NWGKr/IJhtRuPq/t37qvZHI/mH4I4sxflVM+qgVe5Z2uOCivzWaVbuioJaB61kvm5UvB7b49E+oBY0M8jA=="
},
"swagger-ui-express": {
"version": "3.0.10",
"resolved": "https://registry.npmjs.org/swagger-ui-express/-/swagger-ui-express-3.0.10.tgz",
- "integrity": "sha1-xysyEHpXpHkT87RgA+j9Yqc3jqI="
+ "integrity": "sha512-vP0sHXTm8w0kwpy4z9tBe1sTOyIc807PvkBNrfBPMieeRrl3NbjUnz7KgOygkzmz4QBhd4fo3efFKcwR42vcjQ=="
},
"table": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz",
- "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==",
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/table/-/table-4.0.3.tgz",
+ "integrity": "sha512-S7rnFITmBH1EnyKcvxBh1LjYeQMmnZtCXSEbHcH6S0NoKit24ZuFO/T1vDcLdYsLQkM188PVVhQmzKIuThNkKg==",
"dev": true,
"requires": {
- "ajv": "^5.2.3",
- "ajv-keywords": "^2.1.0",
+ "ajv": "^6.0.1",
+ "ajv-keywords": "^3.0.0",
"chalk": "^2.1.0",
"lodash": "^4.17.4",
"slice-ansi": "1.0.0",
"string-width": "^2.1.1"
},
"dependencies": {
- "ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
- "dev": true
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
},
"ansi-styles": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
- "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
"requires": {
"color-convert": "^1.9.0"
}
},
"chalk": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
- "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"dev": true,
"requires": {
- "ansi-styles": "^3.1.0",
+ "ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
- "supports-color": "^4.0.0"
+ "supports-color": "^5.3.0"
}
},
- "has-flag": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
- "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
+ "fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
"dev": true
},
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
"dev": true
},
- "string-width": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
- "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
- "dev": true,
- "requires": {
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
- }
- },
- "strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
- "dev": true,
- "requires": {
- "ansi-regex": "^3.0.0"
- }
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
},
"supports-color": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
- "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"dev": true,
"requires": {
- "has-flag": "^2.0.0"
+ "has-flag": "^3.0.0"
}
}
}
},
"tapable": {
- "version": "0.2.8",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz",
- "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=",
+ "version": "0.2.9",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.9.tgz",
+ "integrity": "sha512-2wsvQ+4GwBvLPLWsNfLCDYGsW6xb7aeC6utq2Qh0PFwgEy7K7dsma9Jsmb2zSQj7GvYAyUGSntLtsv++GmgL1A==",
"dev": true
},
- "tape": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/tape/-/tape-2.3.3.tgz",
- "integrity": "sha1-Lnzgox3wn41oUWZKcYQuDKUFevc=",
- "requires": {
- "deep-equal": "~0.1.0",
- "defined": "~0.0.0",
- "inherits": "~2.0.1",
- "jsonify": "~0.0.0",
- "resumer": "~0.0.0",
- "through": "~2.3.4"
- },
- "dependencies": {
- "deep-equal": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-0.1.2.tgz",
- "integrity": "sha1-skbCuApXCkfBG+HZvRBw7IeLh84="
- },
- "defined": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/defined/-/defined-0.0.0.tgz",
- "integrity": "sha1-817qfXBekzuvE7LwOz+D2SFAOz4="
- }
- }
- },
"term-size": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz",
- "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=",
+ "integrity": "sha512-7dPUZQGy/+m3/wjVz3ZW5dobSoD/02NxJpoXUX0WIyjfVS3l0c+b/+9phIDFA7FHzkYtwtMFgeGZ/Y8jVTeqQQ==",
"dev": true,
"requires": {
"execa": "^0.7.0"
@@ -12347,13 +13681,13 @@
"text-table": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
- "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
"dev": true
},
"text-width": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/text-width/-/text-width-1.2.0.tgz",
- "integrity": "sha1-dCFoDEi/hidlziSA995h4/AtoQI=",
+ "integrity": "sha512-OKG3qEx+b2F5270V+oVTfDq3GVbVhWyrvZjghpAeXwO3tAunG8Zy0SU33tMiYN87hG0EURwmT0Qutvbg/57vIA==",
"requires": {
"xtend": "~4.0.0"
}
@@ -12361,18 +13695,19 @@
"through": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
- "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
+ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==",
+ "dev": true
},
"timed-out": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz",
- "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=",
+ "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==",
"dev": true
},
"timers-browserify": {
- "version": "2.0.10",
- "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz",
- "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==",
+ "version": "2.0.12",
+ "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz",
+ "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==",
"dev": true,
"requires": {
"setimmediate": "^1.0.4"
@@ -12381,7 +13716,17 @@
"timespan": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/timespan/-/timespan-2.3.0.tgz",
- "integrity": "sha1-SQLOBAvRPYRcj1myfp1ZutbzmSk="
+ "integrity": "sha512-0Jq9+58T2wbOyLth0EU+AUb6JMGCLaTWIykJFa7hyAybjVH9gpVMTfUAwo5fWAvtFt2Tjh/Elg8JtgNpnMnM8g=="
+ },
+ "tiny-invariant": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz",
+ "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg=="
+ },
+ "tiny-warning": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz",
+ "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA=="
},
"tippy.js": {
"version": "2.6.0",
@@ -12389,13 +13734,6 @@
"integrity": "sha512-hBcy6UXK3epiFwpkycy7Pn1SSLofUmawpPnlYg5ginbXMc/3EX2ivjzHfjvr/WPEpUg71/7ssiovhxDtCWvL2A==",
"requires": {
"popper.js": "^1.14.3"
- },
- "dependencies": {
- "popper.js": {
- "version": "1.14.4",
- "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.14.4.tgz",
- "integrity": "sha1-juwdj/AqWjoVLdQ0FKFce3n9abY="
- }
}
},
"tmp": {
@@ -12410,19 +13748,19 @@
"to-arraybuffer": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
- "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=",
+ "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==",
"dev": true
},
"to-fast-properties": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
- "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "integrity": "sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og==",
"dev": true
},
"to-object-path": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
- "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==",
"dev": true,
"requires": {
"kind-of": "^3.0.2"
@@ -12431,7 +13769,7 @@
"kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
"dev": true,
"requires": {
"is-buffer": "^1.1.5"
@@ -12449,59 +13787,12 @@
"extend-shallow": "^3.0.2",
"regex-not": "^1.0.2",
"safe-regex": "^1.1.0"
- },
- "dependencies": {
- "define-property": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
- "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.2",
- "isobject": "^3.0.1"
- }
- },
- "extend-shallow": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
- "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
- "dev": true,
- "requires": {
- "assign-symbols": "^1.0.0",
- "is-extendable": "^1.0.1"
- }
- },
- "is-extendable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
- "dev": true,
- "requires": {
- "is-plain-object": "^2.0.4"
- }
- },
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- },
- "regex-not": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
- "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
- "dev": true,
- "requires": {
- "extend-shallow": "^3.0.2",
- "safe-regex": "^1.1.0"
- }
- }
}
},
"to-regex-range": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
- "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==",
"dev": true,
"requires": {
"is-number": "^3.0.0",
@@ -12511,7 +13802,7 @@
"is-number": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==",
"dev": true,
"requires": {
"kind-of": "^3.0.2"
@@ -12520,7 +13811,7 @@
"kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
"dev": true,
"requires": {
"is-buffer": "^1.1.5"
@@ -12529,19 +13820,16 @@
}
},
"toidentifier": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
- "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
+ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
"dev": true
},
"touch": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz",
- "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==",
- "dev": true,
- "requires": {
- "nopt": "~1.0.10"
- }
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz",
+ "integrity": "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==",
+ "dev": true
},
"tough-cookie": {
"version": "2.4.3",
@@ -12555,42 +13843,36 @@
"traverse": {
"version": "0.3.9",
"resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz",
- "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk="
+ "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ=="
},
"trim": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz",
- "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=",
+ "integrity": "sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ==",
"dev": true
},
"trim-newlines": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
- "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
- "dev": true
- },
- "trim-right": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
- "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "integrity": "sha512-Nm4cF79FhSTzrLKGDMi3I4utBtFv8qKy4sq1enftf2gMdpqI8oVQTAfySkTz5r49giVzDj88SVZXP4CeYQwjaw==",
"dev": true
},
"trim-trailing-lines": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.0.tgz",
- "integrity": "sha1-eu+7eAjfnWafbaLkOMrIxGradoQ=",
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz",
+ "integrity": "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==",
"dev": true
},
"trough": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.1.tgz",
- "integrity": "sha1-qf2LA5Swro//guBjOgo2zK1bX4Y=",
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz",
+ "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==",
"dev": true
},
"truncate-utf8-bytes": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz",
- "integrity": "sha1-QFkjkJWS1W94pYGENLC3hInKXys=",
+ "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==",
"requires": {
"utf8-byte-length": "^1.0.1"
}
@@ -12604,13 +13886,13 @@
"tty-browserify": {
"version": "0.0.0",
"resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
- "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=",
+ "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==",
"dev": true
},
"tunnel-agent": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
- "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+ "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
"requires": {
"safe-buffer": "^5.0.1"
}
@@ -12618,36 +13900,95 @@
"tweetnacl": {
"version": "0.14.5",
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
- "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
+ "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA=="
+ },
+ "type": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz",
+ "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==",
+ "dev": true
},
"type-check": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
- "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==",
"dev": true,
"requires": {
"prelude-ls": "~1.1.2"
}
},
"type-detect": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
- "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz",
+ "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==",
"dev": true
},
"type-is": {
- "version": "1.6.15",
- "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz",
- "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=",
+ "version": "1.6.18",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
+ "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
"requires": {
"media-typer": "0.3.0",
- "mime-types": "~2.1.15"
+ "mime-types": "~2.1.24"
+ }
+ },
+ "typed-array-buffer": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz",
+ "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==",
+ "dev": true,
+ "requires": {
+ "call-bound": "^1.0.3",
+ "es-errors": "^1.3.0",
+ "is-typed-array": "^1.1.14"
+ }
+ },
+ "typed-array-byte-length": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz",
+ "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.8",
+ "for-each": "^0.3.3",
+ "gopd": "^1.2.0",
+ "has-proto": "^1.2.0",
+ "is-typed-array": "^1.1.14"
+ }
+ },
+ "typed-array-byte-offset": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz",
+ "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==",
+ "dev": true,
+ "requires": {
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.8",
+ "for-each": "^0.3.3",
+ "gopd": "^1.2.0",
+ "has-proto": "^1.2.0",
+ "is-typed-array": "^1.1.15",
+ "reflect.getprototypeof": "^1.0.9"
+ }
+ },
+ "typed-array-length": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz",
+ "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.7",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "is-typed-array": "^1.1.13",
+ "possible-typed-array-names": "^1.0.0",
+ "reflect.getprototypeof": "^1.0.6"
}
},
"typedarray": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
- "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==",
"dev": true
},
"tz-offset": {
@@ -12655,15 +13996,10 @@
"resolved": "https://registry.npmjs.org/tz-offset/-/tz-offset-0.0.1.tgz",
"integrity": "sha512-kMBmblijHJXyOpKzgDhKx9INYU4u4E1RPMB0HqmKSgWG8vEcf3exEfLh4FFfzd3xdQOw9EuIy/cP0akY6rHopQ=="
},
- "ua-parser-js": {
- "version": "0.7.18",
- "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.18.tgz",
- "integrity": "sha512-LtzwHlVHwFGTptfNSgezHp7WUlwiqb0gA9AALRbKaERfxwJoiX0A73QbTToxteIAuIaFshhgIZfqK8s7clqgnA=="
- },
"uglify-js": {
"version": "2.8.29",
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
- "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
+ "integrity": "sha512-qLq/4y2pjcU3vhlhseXGGJ7VbFO4pBANu0kwl8VCa9KEI0V8VfZIx2Fy3w01iSTA/pGwKZSmu/+I4etLNDdt5w==",
"dev": true,
"requires": {
"source-map": "~0.5.1",
@@ -12671,10 +14007,16 @@
"yargs": "~3.10.0"
},
"dependencies": {
+ "camelcase": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
+ "integrity": "sha512-wzLkDa4K/mzI1OSITC+DUyjgIl/ETNHE9QvYgy6J6Jvqyyz4C0Xfd+lQhb19sX2jMpZV4IssUn0VDVmglV+s4g==",
+ "dev": true
+ },
"cliui": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
- "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
+ "integrity": "sha512-GIOYRizG+TGoc7Wgc1LiOTLare95R3mzKgoln+Q/lE4ceiYH19gUpl0l0Ffq4lJDEf3FxujMe6IBfOCs7pfqNA==",
"dev": true,
"requires": {
"center-align": "^0.1.1",
@@ -12682,22 +14024,16 @@
"wordwrap": "0.0.2"
}
},
- "window-size": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
- "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=",
- "dev": true
- },
"wordwrap": {
"version": "0.0.2",
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
- "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=",
+ "integrity": "sha512-xSBsCeh+g+dinoBv3GAOWM4LcVVO68wLXRanibtBSdUvkGWQRGeE9P7IwU9EmDDi4jA6L44lz15CGMwdw9N5+Q==",
"dev": true
},
"yargs": {
"version": "3.10.0",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
- "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
+ "integrity": "sha512-QFzUah88GAGy9lyDKGBqZdkYApt63rCXYBGYnEP4xDJPXNqXXnBDACnbrXnViV6jRSqAePwrATi2i8mfYm4L1A==",
"dev": true,
"requires": {
"camelcase": "^1.0.2",
@@ -12711,14 +14047,14 @@
"uglify-to-browserify": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
- "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
+ "integrity": "sha512-vb2s1lYx2xBtUgy+ta+b2J/GLVUR+wmpINwHePmPRhOsIVCG2wDzKJ0n14GslH1BifsqVzSOwQhRaCAsZ/nI4Q==",
"dev": true,
"optional": true
},
"uglifyjs-webpack-plugin": {
"version": "0.4.6",
"resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz",
- "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=",
+ "integrity": "sha512-TNM20HMW67kxHRNCZdvLyiwE1ST6WyY5Ae+TG55V81NpvNwJ9+V4/po4LHA1R9afV/WrqzfedG2UJCk2+swirw==",
"dev": true,
"requires": {
"source-map": "^0.5.6",
@@ -12726,38 +14062,81 @@
"webpack-sources": "^1.0.1"
}
},
- "undefsafe": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.2.tgz",
- "integrity": "sha1-Il9rngM3Zj4Njnz9aG/Cg2zKznY=",
+ "ultron": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz",
+ "integrity": "sha512-QMpnpVtYaWEeY+MwKDN/UdKlE/LsFZXM5lO1u7GaZzNgmIbGixHEmVMIKT+vqYOALu3m5GYQy9kz4Xu4IVn7Ow==",
+ "dev": true
+ },
+ "unbox-primitive": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz",
+ "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==",
"dev": true,
"requires": {
- "debug": "^2.2.0"
+ "call-bound": "^1.0.3",
+ "has-bigints": "^1.0.2",
+ "has-symbols": "^1.1.0",
+ "which-boxed-primitive": "^1.1.1"
}
},
+ "undefsafe": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz",
+ "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==",
+ "dev": true
+ },
"unescape-js": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/unescape-js/-/unescape-js-1.1.0.tgz",
- "integrity": "sha512-i3T5O4vhXV9EktDDChkX3yPdBvFSOJl6wl+Rqb30XGE75fX/sP26AIgBnzI0QCKzxKfWGV/DzO0f0iu0gXK5qw==",
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/unescape-js/-/unescape-js-1.1.4.tgz",
+ "integrity": "sha512-42SD8NOQEhdYntEiUQdYq/1V/YHwr1HLwlHuTJB5InVVdOSbgI6xu8jK5q65yIzuFCfczzyDF/7hbGzVbyCw0g==",
+ "dev": true,
+ "requires": {
+ "string.fromcodepoint": "^0.2.1"
+ }
+ },
+ "unherit": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz",
+ "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==",
"dev": true,
"requires": {
- "string.fromcodepoint": "^0.2.1"
+ "inherits": "^2.0.0",
+ "xtend": "^4.0.0"
}
},
- "unherit": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.0.tgz",
- "integrity": "sha1-a5qu379z3xdWrZ4xbdmBiFhAzX0=",
+ "unicode-canonical-property-names-ecmascript": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz",
+ "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==",
+ "dev": true
+ },
+ "unicode-match-property-ecmascript": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz",
+ "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==",
"dev": true,
"requires": {
- "inherits": "^2.0.1",
- "xtend": "^4.0.1"
+ "unicode-canonical-property-names-ecmascript": "^2.0.0",
+ "unicode-property-aliases-ecmascript": "^2.0.0"
}
},
+ "unicode-match-property-value-ecmascript": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz",
+ "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==",
+ "dev": true
+ },
+ "unicode-property-aliases-ecmascript": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz",
+ "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==",
+ "dev": true
+ },
"unified": {
- "version": "6.1.6",
- "resolved": "https://registry.npmjs.org/unified/-/unified-6.1.6.tgz",
- "integrity": "sha512-pW2f82bCIo2ifuIGYcV12fL96kMMYgw7JKVEgh7ODlrM9rj6vXSY3BV+H6lCcv1ksxynFf582hwWLnA1qRFy4w==",
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/unified/-/unified-6.2.0.tgz",
+ "integrity": "sha512-1k+KPhlVtqmG99RaTbAv/usu85fcSRu3wY8X+vnsEhIxNP5VbVIDiXnLqyKIG+UMdyTg0ZX9EI6k2AfjJkHPtA==",
"dev": true,
"requires": {
"bail": "^1.0.0",
@@ -12765,123 +14144,99 @@
"is-plain-obj": "^1.1.0",
"trough": "^1.0.0",
"vfile": "^2.0.0",
- "x-is-function": "^1.0.4",
"x-is-string": "^0.1.0"
}
},
"union-value": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
- "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
+ "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
"dev": true,
"requires": {
"arr-union": "^3.1.0",
"get-value": "^2.0.6",
"is-extendable": "^0.1.1",
- "set-value": "^0.4.3"
- },
- "dependencies": {
- "set-value": {
- "version": "0.4.3",
- "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
- "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
- "dev": true,
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-extendable": "^0.1.1",
- "is-plain-object": "^2.0.1",
- "to-object-path": "^0.3.0"
- }
- }
+ "set-value": "^2.0.1"
}
},
"uniq": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz",
- "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=",
+ "integrity": "sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA==",
"dev": true
},
- "uniqid": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/uniqid/-/uniqid-4.1.1.tgz",
- "integrity": "sha1-iSIN32t1GuUrX3JISGNShZa7hME=",
- "dev": true,
- "requires": {
- "macaddress": "^0.2.8"
- }
- },
"uniqs": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz",
- "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=",
+ "integrity": "sha512-mZdDpf3vBV5Efh29kMw5tXoup/buMgxLzOt/XKFKcVmi+15ManNQWr6HfZ2aiZTYlYixbdNJ0KFmIZIv52tHSQ==",
"dev": true
},
"unique-concat": {
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/unique-concat/-/unique-concat-0.2.2.tgz",
- "integrity": "sha1-khD5vcqsxeHjkpSQ18AZ35bxhxI="
+ "integrity": "sha512-nFT3frbsvTa9rrc71FJApPqXF8oIhVHbX3IWgObQi1mF7WrW48Ys70daL7o4evZUtmUf6Qn6WK0LbHhyO0hpXw=="
},
"unique-string": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz",
- "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=",
+ "integrity": "sha512-ODgiYu03y5g76A1I9Gt0/chLCzQjvzDy7DsZGsLOE/1MrF6wriEskSncj1+/C58Xk/kPZDppSctDybCwOSaGAg==",
"dev": true,
"requires": {
"crypto-random-string": "^1.0.0"
}
},
"unist-util-find-all-after": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-1.0.1.tgz",
- "integrity": "sha1-TlUSq/734GFnga7Pex7XUcAK+Qg=",
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-1.0.5.tgz",
+ "integrity": "sha512-lWgIc3rrTMTlK1Y0hEuL+k+ApzFk78h+lsaa2gHf63Gp5Ww+mt11huDniuaoq1H+XMK2lIIjjPkncxXcDp3QDw==",
"dev": true,
"requires": {
- "unist-util-is": "^2.0.0"
+ "unist-util-is": "^3.0.0"
}
},
"unist-util-is": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-2.1.1.tgz",
- "integrity": "sha1-DDEmKeP5YMZukx6BLT2A53AQlHs=",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz",
+ "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==",
"dev": true
},
- "unist-util-modify-children": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/unist-util-modify-children/-/unist-util-modify-children-1.1.1.tgz",
- "integrity": "sha1-ZtfmpEnm9nIguXarPLi166w55R0=",
- "dev": true,
- "requires": {
- "array-iterate": "^1.0.0"
- }
- },
"unist-util-remove-position": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.1.tgz",
- "integrity": "sha1-WoXBVV/BugwQG4ZwfRXlD6TIcbs=",
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.4.tgz",
+ "integrity": "sha512-tLqd653ArxJIPnKII6LMZwH+mb5q+n/GtXQZo6S6csPRs5zB0u79Yw8ouR3wTw8wxvdJFhpP6Y7jorWdCgLO0A==",
"dev": true,
"requires": {
"unist-util-visit": "^1.1.0"
}
},
"unist-util-stringify-position": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.1.tgz",
- "integrity": "sha1-PMvcU2ee7W7PN3fdf14yKcG2qjw=",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz",
+ "integrity": "sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==",
"dev": true
},
"unist-util-visit": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.3.0.tgz",
- "integrity": "sha512-9ntYcxPFtl44gnwXrQKZ5bMqXMY0ZHzUpqMFiU4zcc8mmf/jzYm8GhYgezuUlX4cJIM1zIDYaO6fG/fI+L6iiQ==",
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz",
+ "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==",
+ "dev": true,
+ "requires": {
+ "unist-util-visit-parents": "^2.0.0"
+ }
+ },
+ "unist-util-visit-parents": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz",
+ "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==",
"dev": true,
"requires": {
- "unist-util-is": "^2.1.1"
+ "unist-util-is": "^3.0.0"
}
},
"units-css": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/units-css/-/units-css-0.4.0.tgz",
- "integrity": "sha1-1iKGU6UZg9fBb/KPi53Dsf/tOgc=",
+ "integrity": "sha512-WijzYC+chwzg2D6HmNGUSzPAgFRJfuxVyG9oiY28Ei5E+g6fHoPkhXUr5GV+5hE/RTHZNd9SuX2KLioYHdttoA==",
"dev": true,
"requires": {
"isnumeric": "^0.2.0",
@@ -12889,20 +14244,20 @@
}
},
"universalify": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
- "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=",
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
"dev": true
},
"unpipe": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
- "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
+ "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="
},
"unset-value": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
- "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==",
"dev": true,
"requires": {
"has-value": "^0.3.1",
@@ -12912,7 +14267,7 @@
"has-value": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
- "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==",
"dev": true,
"requires": {
"get-value": "^2.0.3",
@@ -12923,7 +14278,7 @@
"isobject": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
- "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==",
"dev": true,
"requires": {
"isarray": "1.0.0"
@@ -12934,13 +14289,13 @@
"has-values": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
- "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+ "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==",
"dev": true
},
"isobject": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
"dev": true
}
}
@@ -12948,7 +14303,7 @@
"unzip-response": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz",
- "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=",
+ "integrity": "sha512-N0XH6lqDtFH84JxptQoZYmloF4nzrQqqrAymNj+/gW60AO2AZgOcf4O/nUXJcYfyQkqvMo9lSupBZmmgvuVXlw==",
"dev": true
},
"unzipper": {
@@ -12970,17 +14325,17 @@
"bluebird": {
"version": "3.4.7",
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz",
- "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM="
+ "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA=="
},
"process-nextick-args": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
- "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
},
"readable-stream": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
- "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
@@ -13002,11 +14357,29 @@
}
},
"upath": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz",
- "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz",
+ "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==",
"dev": true
},
+ "update-browserslist-db": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz",
+ "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==",
+ "dev": true,
+ "requires": {
+ "escalade": "^3.2.0",
+ "picocolors": "^1.1.1"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "dev": true
+ }
+ }
+ },
"update-notifier": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz",
@@ -13035,9 +14408,9 @@
}
},
"chalk": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
- "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"dev": true,
"requires": {
"ansi-styles": "^3.2.1",
@@ -13048,7 +14421,7 @@
"has-flag": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
"dev": true
},
"supports-color": {
@@ -13071,40 +14444,43 @@
},
"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=="
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="
}
}
},
"urix": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
- "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==",
"dev": true
},
"url": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
- "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
+ "version": "0.11.4",
+ "resolved": "https://registry.npmjs.org/url/-/url-0.11.4.tgz",
+ "integrity": "sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==",
"dev": true,
"requires": {
- "punycode": "1.3.2",
- "querystring": "0.2.0"
+ "punycode": "^1.4.1",
+ "qs": "^6.12.3"
},
"dependencies": {
- "punycode": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
- "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
- "dev": true
+ "qs": {
+ "version": "6.14.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz",
+ "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==",
+ "dev": true,
+ "requires": {
+ "side-channel": "^1.1.0"
+ }
}
}
},
"url-parse-lax": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz",
- "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=",
+ "integrity": "sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==",
"dev": true,
"requires": {
"prepend-http": "^1.0.1"
@@ -13117,14 +14493,14 @@
"dev": true
},
"utf8-byte-length": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz",
- "integrity": "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E="
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz",
+ "integrity": "sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA=="
},
"util": {
- "version": "0.10.4",
- "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz",
- "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==",
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz",
+ "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==",
"dev": true,
"requires": {
"inherits": "2.0.3"
@@ -13133,12 +14509,12 @@
"util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
},
"utile": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/utile/-/utile-0.2.1.tgz",
- "integrity": "sha1-kwyI6ZCY1iIINMNWy9mncFItkNc=",
+ "integrity": "sha512-ltfvuCJNa/JFOhKBBiQ9qDyyFwLstoMMO1ru0Yg/Mcl8dp1Z3IBaL7n+5dHpyma+d3lCogkgBQnWKtGxzNyqhg==",
"requires": {
"async": "~0.2.9",
"deep-equal": "*",
@@ -13151,14 +14527,14 @@
"async": {
"version": "0.2.10",
"resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
- "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E="
+ "integrity": "sha512-eAkdoKxU6/LkKDBzLpT+t6Ff5EtfSF4wx1WfJiPEEV7WNLnDaRXk0oVysiEPm262roaachGexwUv94WhSgN5TQ=="
}
}
},
"utils-merge": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
- "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
+ "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA=="
},
"uuid": {
"version": "3.2.1",
@@ -13166,13 +14542,13 @@
"integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA=="
},
"validate-npm-package-license": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz",
- "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=",
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
"dev": true,
"requires": {
- "spdx-correct": "~1.0.0",
- "spdx-expression-parse": "~1.0.0"
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
}
},
"validator": {
@@ -13181,25 +14557,25 @@
"integrity": "sha512-X/p3UZerAIsbBfN/IwahhYaBbY68EN/UQBWHtsbXGT5bfrH/p4NQzUCG1kF/rtKaNpnJ7jAu6NGTdSNtyNIXMw=="
},
"value-equal": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-0.4.0.tgz",
- "integrity": "sha512-x+cYdNnaA3CxvMaTX0INdTCN8m8aF2uY9BvEqmxuYp8bL09cs/kWVQPVGcA35fMktdOsP69IgU7wFj/61dJHEw=="
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz",
+ "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw=="
},
"vary": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
- "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
+ "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="
},
"vendors": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.1.tgz",
- "integrity": "sha1-N61zyO5Bf7PVgOeFMSMH0nSEfyI=",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz",
+ "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==",
"dev": true
},
"verror": {
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
- "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+ "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==",
"requires": {
"assert-plus": "^1.0.0",
"core-util-is": "1.0.2",
@@ -13219,15 +14595,15 @@
}
},
"vfile-location": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.2.tgz",
- "integrity": "sha1-02dcWch3SY5JK0dW/2Xkrxp1IlU=",
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.6.tgz",
+ "integrity": "sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA==",
"dev": true
},
"vfile-message": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.0.0.tgz",
- "integrity": "sha512-HPREhzTOB/sNDc9/Mxf8w0FmHnThg5CRSJdR9VRFkD2riqYWs+fuXlj5z8mIpv2LrD7uU41+oPWFOL4Mjlf+dw==",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.1.1.tgz",
+ "integrity": "sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA==",
"dev": true,
"requires": {
"unist-util-stringify-position": "^1.1.1"
@@ -13236,804 +14612,388 @@
"viewport-dimensions": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/viewport-dimensions/-/viewport-dimensions-0.2.0.tgz",
- "integrity": "sha1-3nQHR9tTh/0XJfUXXpG6x2r982w=",
+ "integrity": "sha512-94JqlKxEP4m7WO+N3rm4tFRGXZmXXwSPQCoV+EPxDnn8YAGiLU3T+Ha1imLreAjXsHl0K+ELnIqv64i1XZHLFQ==",
"dev": true
},
"vm-browserify": {
- "version": "0.0.4",
- "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz",
- "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=",
- "dev": true,
- "requires": {
- "indexof": "0.0.1"
- }
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz",
+ "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==",
+ "dev": true
},
"warning": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.2.tgz",
- "integrity": "sha512-wbTp09q/9C+jJn4KKJfJfoS6VleK/Dti0yqWSm6KMvJ4MRCXFQNapHuJXutJIrWV0Cf4AhTdeIe4qdKHR1+Hug==",
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz",
+ "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==",
"requires": {
"loose-envify": "^1.0.0"
}
},
"watchpack": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz",
- "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==",
+ "version": "1.7.5",
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz",
+ "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==",
"dev": true,
"requires": {
- "chokidar": "^2.0.2",
+ "chokidar": "^3.4.1",
"graceful-fs": "^4.1.2",
- "neo-async": "^2.5.0"
+ "neo-async": "^2.5.0",
+ "watchpack-chokidar2": "^2.0.1"
},
"dependencies": {
"anymatch": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
- "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
"dev": true,
+ "optional": true,
"requires": {
- "micromatch": "^3.1.4",
- "normalize-path": "^2.1.1"
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
}
},
- "arr-diff": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
- "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
- "dev": true
- },
- "array-unique": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
- "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
- "dev": true
+ "binary-extensions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
+ "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
+ "dev": true,
+ "optional": true
},
"braces": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
"dev": true,
+ "optional": true,
"requires": {
- "arr-flatten": "^1.1.0",
- "array-unique": "^0.3.2",
- "extend-shallow": "^2.0.1",
- "fill-range": "^4.0.0",
- "isobject": "^3.0.1",
- "repeat-element": "^1.1.2",
- "snapdragon": "^0.8.1",
- "snapdragon-node": "^2.0.1",
- "split-string": "^3.0.2",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
+ "fill-range": "^7.1.1"
}
},
"chokidar": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz",
- "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==",
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+ "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
"dev": true,
+ "optional": true,
"requires": {
- "anymatch": "^2.0.0",
- "async-each": "^1.0.0",
- "braces": "^2.3.0",
- "fsevents": "^1.2.2",
- "glob-parent": "^3.1.0",
- "inherits": "^2.0.1",
- "is-binary-path": "^1.0.0",
- "is-glob": "^4.0.0",
- "lodash.debounce": "^4.0.8",
- "normalize-path": "^2.1.1",
- "path-is-absolute": "^1.0.0",
- "readdirp": "^2.0.0",
- "upath": "^1.0.5"
+ "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"
}
},
- "define-property": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
- "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "fill-range": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
"dev": true,
+ "optional": true,
"requires": {
- "is-descriptor": "^1.0.2",
- "isobject": "^3.0.1"
+ "to-regex-range": "^5.0.1"
}
},
- "expand-brackets": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
- "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "dev": true,
+ "optional": true
+ },
+ "glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
"dev": true,
+ "optional": true,
"requires": {
- "debug": "^2.3.3",
- "define-property": "^0.2.5",
- "extend-shallow": "^2.0.1",
- "posix-character-classes": "^0.1.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- }
- },
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true
- }
+ "is-glob": "^4.0.1"
}
},
- "extend-shallow": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
- "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
"dev": true,
+ "optional": true,
"requires": {
- "assign-symbols": "^1.0.0",
- "is-extendable": "^1.0.1"
- },
- "dependencies": {
- "is-extendable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
- "dev": true,
- "requires": {
- "is-plain-object": "^2.0.4"
- }
- }
+ "binary-extensions": "^2.0.0"
}
},
- "extglob": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
- "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true,
+ "optional": true
+ },
+ "is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true,
+ "optional": true
+ },
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true,
+ "optional": true
+ },
+ "readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "picomatch": "^2.2.1"
+ }
+ },
+ "to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "is-number": "^7.0.0"
+ }
+ }
+ }
+ },
+ "watchpack-chokidar2": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz",
+ "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "chokidar": "^2.1.8"
+ },
+ "dependencies": {
+ "anymatch": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
+ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
"dev": true,
+ "optional": true,
"requires": {
- "array-unique": "^0.3.2",
- "define-property": "^1.0.0",
- "expand-brackets": "^2.1.4",
- "extend-shallow": "^2.0.1",
- "fragment-cache": "^0.2.1",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
+ "micromatch": "^3.1.4",
+ "normalize-path": "^2.1.1"
},
"dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==",
"dev": true,
+ "optional": true,
"requires": {
- "is-extendable": "^0.1.0"
+ "remove-trailing-separator": "^1.0.1"
}
}
}
},
- "fill-range": {
+ "arr-diff": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==",
+ "dev": true,
+ "optional": true
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==",
+ "dev": true,
+ "optional": true
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
"dev": true,
+ "optional": true,
"requires": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
"extend-shallow": "^2.0.1",
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1",
- "to-regex-range": "^2.1.0"
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
},
"dependencies": {
"extend-shallow": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
"dev": true,
+ "optional": true,
"requires": {
"is-extendable": "^0.1.0"
}
}
}
},
- "fsevents": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz",
- "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==",
+ "chokidar": {
+ "version": "2.1.8",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
+ "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
"dev": true,
"optional": true,
"requires": {
- "nan": "^2.9.2",
- "node-pre-gyp": "^0.10.0"
- },
- "dependencies": {
- "abbrev": {
- "version": "1.1.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "ansi-regex": {
- "version": "2.1.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "aproba": {
- "version": "1.2.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "are-we-there-yet": {
- "version": "1.1.4",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "delegates": "^1.0.0",
- "readable-stream": "^2.0.6"
- }
- },
- "balanced-match": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "brace-expansion": {
- "version": "1.1.11",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "chownr": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "code-point-at": {
- "version": "1.1.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "concat-map": {
- "version": "0.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "console-control-strings": {
- "version": "1.1.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "core-util-is": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "debug": {
- "version": "2.6.9",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "deep-extend": {
- "version": "0.5.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "delegates": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "detect-libc": {
- "version": "1.0.3",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "fs-minipass": {
- "version": "1.2.5",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "minipass": "^2.2.1"
- }
- },
- "fs.realpath": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "gauge": {
- "version": "2.7.4",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "aproba": "^1.0.3",
- "console-control-strings": "^1.0.0",
- "has-unicode": "^2.0.0",
- "object-assign": "^4.1.0",
- "signal-exit": "^3.0.0",
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wide-align": "^1.1.0"
- }
- },
- "glob": {
- "version": "7.1.2",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "has-unicode": {
- "version": "2.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "iconv-lite": {
- "version": "0.4.21",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "safer-buffer": "^2.1.0"
- }
- },
- "ignore-walk": {
- "version": "3.0.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "minimatch": "^3.0.4"
- }
- },
- "inflight": {
- "version": "1.0.6",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.3",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "ini": {
- "version": "1.3.5",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "isarray": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "minimatch": {
- "version": "3.0.4",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "minimist": {
- "version": "0.0.8",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "minipass": {
- "version": "2.2.4",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "safe-buffer": "^5.1.1",
- "yallist": "^3.0.0"
- }
- },
- "minizlib": {
- "version": "1.1.0",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "minipass": "^2.2.1"
- }
- },
- "mkdirp": {
- "version": "0.5.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "minimist": "0.0.8"
- }
- },
- "ms": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "needle": {
- "version": "2.2.0",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "debug": "^2.1.2",
- "iconv-lite": "^0.4.4",
- "sax": "^1.2.4"
- }
- },
- "node-pre-gyp": {
- "version": "0.10.0",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "detect-libc": "^1.0.2",
- "mkdirp": "^0.5.1",
- "needle": "^2.2.0",
- "nopt": "^4.0.1",
- "npm-packlist": "^1.1.6",
- "npmlog": "^4.0.2",
- "rc": "^1.1.7",
- "rimraf": "^2.6.1",
- "semver": "^5.3.0",
- "tar": "^4"
- }
- },
- "nopt": {
- "version": "4.0.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "abbrev": "1",
- "osenv": "^0.1.4"
- }
- },
- "npm-bundled": {
- "version": "1.0.3",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "npm-packlist": {
- "version": "1.1.10",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "ignore-walk": "^3.0.1",
- "npm-bundled": "^1.0.1"
- }
- },
- "npmlog": {
- "version": "4.1.2",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "are-we-there-yet": "~1.1.2",
- "console-control-strings": "~1.1.0",
- "gauge": "~2.7.3",
- "set-blocking": "~2.0.0"
- }
- },
- "number-is-nan": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "object-assign": {
- "version": "4.1.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "once": {
- "version": "1.4.0",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "wrappy": "1"
- }
- },
- "os-homedir": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "os-tmpdir": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "osenv": {
- "version": "0.1.5",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "os-homedir": "^1.0.0",
- "os-tmpdir": "^1.0.0"
- }
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "process-nextick-args": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "rc": {
- "version": "1.2.7",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "deep-extend": "^0.5.1",
- "ini": "~1.3.0",
- "minimist": "^1.2.0",
- "strip-json-comments": "~2.0.1"
- },
- "dependencies": {
- "minimist": {
- "version": "1.2.0",
- "bundled": true,
- "dev": true,
- "optional": true
- }
- }
- },
- "readable-stream": {
- "version": "2.3.6",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "rimraf": {
- "version": "2.6.2",
- "bundled": true,
+ "anymatch": "^2.0.0",
+ "async-each": "^1.0.1",
+ "braces": "^2.3.2",
+ "fsevents": "^1.2.7",
+ "glob-parent": "^3.1.0",
+ "inherits": "^2.0.3",
+ "is-binary-path": "^1.0.0",
+ "is-glob": "^4.0.0",
+ "normalize-path": "^3.0.0",
+ "path-is-absolute": "^1.0.0",
+ "readdirp": "^2.2.1",
+ "upath": "^1.1.1"
+ }
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
"dev": true,
"optional": true,
"requires": {
- "glob": "^7.0.5"
+ "is-descriptor": "^0.1.0"
}
},
- "safe-buffer": {
- "version": "5.1.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "safer-buffer": {
- "version": "2.1.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "sax": {
- "version": "1.2.4",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "semver": {
- "version": "5.5.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "set-blocking": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "signal-exit": {
- "version": "3.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "string-width": {
- "version": "1.0.2",
- "bundled": true,
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
"dev": true,
"optional": true,
"requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
+ "is-extendable": "^0.1.0"
}
},
- "string_decoder": {
- "version": "1.1.1",
- "bundled": true,
+ "is-descriptor": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz",
+ "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==",
"dev": true,
"optional": true,
"requires": {
- "safe-buffer": "~5.1.0"
+ "is-accessor-descriptor": "^1.0.1",
+ "is-data-descriptor": "^1.0.1"
}
- },
- "strip-ansi": {
- "version": "3.0.1",
- "bundled": true,
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
"dev": true,
"optional": true,
"requires": {
- "ansi-regex": "^2.0.0"
+ "is-descriptor": "^1.0.0"
}
},
- "strip-json-comments": {
+ "extend-shallow": {
"version": "2.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "tar": {
- "version": "4.4.1",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
"dev": true,
"optional": true,
"requires": {
- "chownr": "^1.0.1",
- "fs-minipass": "^1.2.5",
- "minipass": "^2.2.4",
- "minizlib": "^1.1.0",
- "mkdirp": "^0.5.0",
- "safe-buffer": "^5.1.1",
- "yallist": "^3.0.2"
+ "is-extendable": "^0.1.0"
}
- },
- "util-deprecate": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "wide-align": {
- "version": "1.1.2",
- "bundled": true,
+ }
+ }
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
"dev": true,
"optional": true,
"requires": {
- "string-width": "^1.0.2"
+ "is-extendable": "^0.1.0"
}
- },
- "wrappy": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "yallist": {
- "version": "3.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
}
}
},
"glob-parent": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
- "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==",
"dev": true,
+ "optional": true,
"requires": {
"is-glob": "^3.1.0",
"path-dirname": "^1.0.0"
@@ -14042,65 +15002,39 @@
"is-glob": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
- "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==",
"dev": true,
+ "optional": true,
"requires": {
"is-extglob": "^2.1.0"
}
}
}
},
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "is-descriptor": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz",
+ "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==",
"dev": true,
+ "optional": true,
"requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
+ "is-accessor-descriptor": "^1.0.1",
+ "is-data-descriptor": "^1.0.1"
}
},
"is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
- "dev": true
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true,
+ "optional": true
},
"is-glob": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
- "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
"dev": true,
+ "optional": true,
"requires": {
"is-extglob": "^2.1.1"
}
@@ -14108,8 +15042,9 @@
"is-number": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==",
"dev": true,
+ "optional": true,
"requires": {
"kind-of": "^3.0.2"
},
@@ -14117,31 +15052,28 @@
"kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
"dev": true,
+ "optional": true,
"requires": {
"is-buffer": "^1.1.5"
}
}
}
},
- "is-windows": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
- "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
- "dev": true
- },
"isobject": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
+ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
+ "dev": true,
+ "optional": true
},
"micromatch": {
"version": "3.1.10",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
"integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
"dev": true,
+ "optional": true,
"requires": {
"arr-diff": "^4.0.0",
"array-unique": "^0.3.2",
@@ -14158,65 +15090,35 @@
"to-regex": "^3.0.2"
}
},
- "nan": {
- "version": "2.11.1",
- "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.1.tgz",
- "integrity": "sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA==",
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
"dev": true,
"optional": true
},
- "nanomatch": {
- "version": "1.2.13",
- "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
- "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
- "dev": true,
- "requires": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "fragment-cache": "^0.2.1",
- "is-windows": "^1.0.2",
- "kind-of": "^6.0.2",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- }
- },
- "to-regex": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
- "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "readdirp": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
+ "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
"dev": true,
+ "optional": true,
"requires": {
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "regex-not": "^1.0.2",
- "safe-regex": "^1.1.0"
- },
- "dependencies": {
- "regex-not": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
- "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
- "dev": true,
- "requires": {
- "extend-shallow": "^3.0.2",
- "safe-regex": "^1.1.0"
- }
- }
+ "graceful-fs": "^4.1.11",
+ "micromatch": "^3.1.10",
+ "readable-stream": "^2.0.2"
}
}
}
},
"webcola": {
- "version": "3.3.8",
- "resolved": "https://registry.npmjs.org/webcola/-/webcola-3.3.8.tgz",
- "integrity": "sha512-WVDTdHS1SaqYCUJGPdbOhqj44mchDyTC78tozUdqJllwYeJ2554+BWkJfc5kNphT8foip2StCMw1FWsIvGmv9w==",
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/webcola/-/webcola-3.4.0.tgz",
+ "integrity": "sha512-4BiLXjXw3SJHo3Xd+rF+7fyClT6n7I+AR6TkBqyQ4kTsePSAMDLRCXY1f3B/kXJeP9tYn4G1TblxTO+jAt0gaw==",
"requires": {
"d3-dispatch": "^1.0.3",
"d3-drag": "^1.0.4",
+ "d3-shape": "^1.3.5",
"d3-timer": "^1.0.5"
}
},
@@ -14251,51 +15153,27 @@
},
"dependencies": {
"ajv": {
- "version": "6.5.4",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.4.tgz",
- "integrity": "sha512-4Wyjt8+t6YszqaXnLDfMmG/8AlO5Zbcsy3ATHncCzjW/NoPzAId8AK6749Ybjmdt+kUY1gP60fCu46oDxPv/mg==",
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"dev": true,
"requires": {
- "fast-deep-equal": "^2.0.1",
+ "fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
"json-schema-traverse": "^0.4.1",
"uri-js": "^4.2.2"
}
},
- "ajv-keywords": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz",
- "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=",
- "dev": true
- },
- "ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
- "dev": true
- },
- "camelcase": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
- "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
- "dev": true
- },
"fast-deep-equal": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
- "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
"dev": true
},
"has-flag": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
- "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "integrity": "sha512-P+1n3MnwjR/Epg9BBo1KT8qbye2g2Ou4sFumihwt6I4tsUX7jnLcX4BTOSKg/B1ZrIYMN9FcEnG4x5a7NB8Eng==",
"dev": true
},
"json-schema-traverse": {
@@ -14304,145 +15182,14 @@
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
"dev": true
},
- "load-json-file": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
- "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^2.2.0",
- "pify": "^2.0.0",
- "strip-bom": "^3.0.0"
- }
- },
- "os-locale": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz",
- "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==",
- "dev": true,
- "requires": {
- "execa": "^0.7.0",
- "lcid": "^1.0.0",
- "mem": "^1.1.0"
- },
- "dependencies": {
- "mem": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz",
- "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=",
- "dev": true,
- "requires": {
- "mimic-fn": "^1.0.0"
- }
- }
- }
- },
- "path-type": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
- "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
- "dev": true,
- "requires": {
- "pify": "^2.0.0"
- }
- },
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
- "dev": true
- },
- "read-pkg": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
- "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
- "dev": true,
- "requires": {
- "load-json-file": "^2.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^2.0.0"
- }
- },
- "read-pkg-up": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
- "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
- "dev": true,
- "requires": {
- "find-up": "^2.0.0",
- "read-pkg": "^2.0.0"
- }
- },
- "string-width": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
- "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
- "dev": true,
- "requires": {
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
- }
- },
- "strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
- "dev": true,
- "requires": {
- "ansi-regex": "^3.0.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
- },
"supports-color": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
- "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "integrity": "sha512-ycQR/UbvI9xIlEdQT1TQqwoXtEldExbCEAJgRo5YXlmSKjv6ThHnP9/vwGa1gr19Gfw+LkFd7KqYMhzrRC5JYw==",
"dev": true,
"requires": {
"has-flag": "^2.0.0"
}
- },
- "which-module": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
- "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
- "dev": true
- },
- "yargs": {
- "version": "8.0.2",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz",
- "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=",
- "dev": true,
- "requires": {
- "camelcase": "^4.1.0",
- "cliui": "^3.2.0",
- "decamelize": "^1.1.1",
- "get-caller-file": "^1.0.1",
- "os-locale": "^2.0.0",
- "read-pkg-up": "^2.0.0",
- "require-directory": "^2.1.1",
- "require-main-filename": "^1.0.1",
- "set-blocking": "^2.0.0",
- "string-width": "^2.0.0",
- "which-module": "^2.0.0",
- "y18n": "^3.2.1",
- "yargs-parser": "^7.0.0"
- }
- },
- "yargs-parser": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz",
- "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=",
- "dev": true,
- "requires": {
- "camelcase": "^4.1.0"
- }
}
}
},
@@ -14467,20 +15214,10 @@
"ws": "^6.0.0"
},
"dependencies": {
- "accepts": {
- "version": "1.3.7",
- "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
- "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
- "dev": true,
- "requires": {
- "mime-types": "~2.1.24",
- "negotiator": "0.6.2"
- }
- },
"acorn": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz",
- "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==",
+ "version": "6.4.2",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz",
+ "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==",
"dev": true
},
"ansi-styles": {
@@ -14493,27 +15230,37 @@
}
},
"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.20.3",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz",
+ "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==",
"dev": true,
"requires": {
- "bytes": "3.1.0",
- "content-type": "~1.0.4",
+ "bytes": "3.1.2",
+ "content-type": "~1.0.5",
"debug": "2.6.9",
- "depd": "~1.1.2",
- "http-errors": "1.7.2",
+ "depd": "2.0.0",
+ "destroy": "1.2.0",
+ "http-errors": "2.0.0",
"iconv-lite": "0.4.24",
- "on-finished": "~2.3.0",
- "qs": "6.7.0",
- "raw-body": "2.4.0",
- "type-is": "~1.6.17"
+ "on-finished": "2.4.1",
+ "qs": "6.13.0",
+ "raw-body": "2.5.2",
+ "type-is": "~1.6.18",
+ "unpipe": "1.0.0"
+ },
+ "dependencies": {
+ "content-type": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
+ "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
+ "dev": true
+ }
}
},
"bytes": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
- "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
+ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
"dev": true
},
"chalk": {
@@ -14534,90 +15281,109 @@
"dev": true
},
"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==",
"dev": true,
"requires": {
- "safe-buffer": "5.1.2"
+ "safe-buffer": "5.2.1"
}
},
"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.7.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz",
+ "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==",
+ "dev": true
+ },
+ "depd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
+ "dev": true
+ },
+ "destroy": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
+ "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
+ "dev": true
+ },
+ "encodeurl": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
+ "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
"dev": true
},
"express": {
- "version": "4.17.1",
- "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
- "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
+ "version": "4.21.2",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz",
+ "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==",
"dev": true,
"requires": {
- "accepts": "~1.3.7",
+ "accepts": "~1.3.8",
"array-flatten": "1.1.1",
- "body-parser": "1.19.0",
- "content-disposition": "0.5.3",
+ "body-parser": "1.20.3",
+ "content-disposition": "0.5.4",
"content-type": "~1.0.4",
- "cookie": "0.4.0",
+ "cookie": "0.7.1",
"cookie-signature": "1.0.6",
"debug": "2.6.9",
- "depd": "~1.1.2",
- "encodeurl": "~1.0.2",
+ "depd": "2.0.0",
+ "encodeurl": "~2.0.0",
"escape-html": "~1.0.3",
"etag": "~1.8.1",
- "finalhandler": "~1.1.2",
+ "finalhandler": "1.3.1",
"fresh": "0.5.2",
- "merge-descriptors": "1.0.1",
+ "http-errors": "2.0.0",
+ "merge-descriptors": "1.0.3",
"methods": "~1.1.2",
- "on-finished": "~2.3.0",
+ "on-finished": "2.4.1",
"parseurl": "~1.3.3",
- "path-to-regexp": "0.1.7",
- "proxy-addr": "~2.0.5",
- "qs": "6.7.0",
+ "path-to-regexp": "0.1.12",
+ "proxy-addr": "~2.0.7",
+ "qs": "6.13.0",
"range-parser": "~1.2.1",
- "safe-buffer": "5.1.2",
- "send": "0.17.1",
- "serve-static": "1.14.1",
- "setprototypeof": "1.1.1",
- "statuses": "~1.5.0",
+ "safe-buffer": "5.2.1",
+ "send": "0.19.0",
+ "serve-static": "1.16.2",
+ "setprototypeof": "1.2.0",
+ "statuses": "2.0.1",
"type-is": "~1.6.18",
"utils-merge": "1.0.1",
"vary": "~1.1.2"
}
},
"finalhandler": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
- "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz",
+ "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==",
"dev": true,
"requires": {
"debug": "2.6.9",
- "encodeurl": "~1.0.2",
+ "encodeurl": "~2.0.0",
"escape-html": "~1.0.3",
- "on-finished": "~2.3.0",
+ "on-finished": "2.4.1",
"parseurl": "~1.3.3",
- "statuses": "~1.5.0",
+ "statuses": "2.0.1",
"unpipe": "~1.0.0"
}
},
"has-flag": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
"dev": true
},
"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==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
+ "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
"dev": true,
"requires": {
- "depd": "~1.1.2",
- "inherits": "2.0.3",
- "setprototypeof": "1.1.1",
- "statuses": ">= 1.5.0 < 2",
- "toidentifier": "1.0.0"
+ "depd": "2.0.0",
+ "inherits": "2.0.4",
+ "setprototypeof": "1.2.0",
+ "statuses": "2.0.1",
+ "toidentifier": "1.0.1"
}
},
"iconv-lite": {
@@ -14629,16 +15395,22 @@
"safer-buffer": ">= 2.1.2 < 3"
}
},
- "ipaddr.js": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz",
- "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==",
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"dev": true
},
"lodash": {
- "version": "4.17.15",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
- "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+ "dev": true
+ },
+ "merge-descriptors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz",
+ "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==",
"dev": true
},
"mime": {
@@ -14647,137 +15419,120 @@
"integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
"dev": true
},
- "mime-db": {
- "version": "1.40.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz",
- "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==",
- "dev": true
- },
- "mime-types": {
- "version": "2.1.24",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz",
- "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==",
- "dev": true,
- "requires": {
- "mime-db": "1.40.0"
- }
- },
"minimist": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
- "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
"dev": true
},
"mkdirp": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
- "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "version": "0.5.6",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
+ "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
"dev": true,
"requires": {
- "minimist": "0.0.8"
+ "minimist": "^1.2.6"
}
},
"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==",
- "dev": true
- },
- "negotiator": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
- "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==",
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
"dev": true
},
- "parseurl": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
- "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
- "dev": true
- },
- "proxy-addr": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz",
- "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==",
+ "on-finished": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
+ "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
"dev": true,
"requires": {
- "forwarded": "~0.1.2",
- "ipaddr.js": "1.9.0"
+ "ee-first": "1.1.1"
}
},
- "qs": {
- "version": "6.7.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
- "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
+ "path-to-regexp": {
+ "version": "0.1.12",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz",
+ "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==",
"dev": true
},
- "range-parser": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
- "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
- "dev": true
+ "qs": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz",
+ "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
+ "dev": true,
+ "requires": {
+ "side-channel": "^1.0.6"
+ }
},
"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.5.2",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
+ "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
"dev": true,
"requires": {
- "bytes": "3.1.0",
- "http-errors": "1.7.2",
+ "bytes": "3.1.2",
+ "http-errors": "2.0.0",
"iconv-lite": "0.4.24",
"unpipe": "1.0.0"
}
},
"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==",
"dev": true
},
"send": {
- "version": "0.17.1",
- "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
- "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
+ "version": "0.19.0",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz",
+ "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==",
"dev": true,
"requires": {
"debug": "2.6.9",
- "depd": "~1.1.2",
- "destroy": "~1.0.4",
+ "depd": "2.0.0",
+ "destroy": "1.2.0",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"etag": "~1.8.1",
"fresh": "0.5.2",
- "http-errors": "~1.7.2",
+ "http-errors": "2.0.0",
"mime": "1.6.0",
- "ms": "2.1.1",
- "on-finished": "~2.3.0",
+ "ms": "2.1.3",
+ "on-finished": "2.4.1",
"range-parser": "~1.2.1",
- "statuses": "~1.5.0"
+ "statuses": "2.0.1"
+ },
+ "dependencies": {
+ "encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
+ "dev": true
+ }
}
},
"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.16.2",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz",
+ "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==",
"dev": true,
"requires": {
- "encodeurl": "~1.0.2",
+ "encodeurl": "~2.0.0",
"escape-html": "~1.0.3",
"parseurl": "~1.3.3",
- "send": "0.17.1"
+ "send": "0.19.0"
}
},
"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==",
"dev": true
},
"statuses": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
- "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
+ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
"dev": true
},
"supports-color": {
@@ -14789,22 +15544,21 @@
"has-flag": "^3.0.0"
}
},
- "type-is": {
- "version": "1.6.18",
- "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
- "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+ "ws": {
+ "version": "6.2.3",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz",
+ "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==",
"dev": true,
"requires": {
- "media-typer": "0.3.0",
- "mime-types": "~2.1.24"
+ "async-limiter": "~1.0.0"
}
}
}
},
"webpack-sources": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.1.0.tgz",
- "integrity": "sha512-aqYp18kPphgoO5c/+NaUvEeACtZjMESmDChuD3NBciVpah3XpMEU9VAAtIaB1BsfJWWTSdv8Vv1m3T0aRk2dUw==",
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz",
+ "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==",
"dev": true,
"requires": {
"source-list-map": "^2.0.0",
@@ -14822,23 +15576,107 @@
"whatwg-fetch": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz",
- "integrity": "sha1-nITsLc9oGH/wC8ZOEnS0QhduHIQ="
+ "integrity": "sha512-SA2KdOXATOroD3EBUYvcdugsusXS5YiQFqwskSbsp5b1gK8HpNi/YP0jcy/BDpdllp305HMnrsVf9K7Be9GiEQ=="
},
"whet.extend": {
"version": "0.9.9",
"resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz",
- "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=",
+ "integrity": "sha512-mmIPAft2vTgEILgPeZFqE/wWh24SEsR/k+N9fJ3Jxrz44iDFy9aemCxdksfURSHYFCLmvs/d/7Iso5XjPpNfrA==",
"dev": true
},
"which": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz",
- "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==",
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
"dev": true,
"requires": {
"isexe": "^2.0.0"
}
},
+ "which-boxed-primitive": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz",
+ "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==",
+ "requires": {
+ "is-bigint": "^1.1.0",
+ "is-boolean-object": "^1.2.1",
+ "is-number-object": "^1.1.1",
+ "is-string": "^1.1.1",
+ "is-symbol": "^1.1.1"
+ },
+ "dependencies": {
+ "is-symbol": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz",
+ "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==",
+ "requires": {
+ "call-bound": "^1.0.2",
+ "has-symbols": "^1.1.0",
+ "safe-regex-test": "^1.1.0"
+ }
+ }
+ }
+ },
+ "which-builtin-type": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz",
+ "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==",
+ "dev": true,
+ "requires": {
+ "call-bound": "^1.0.2",
+ "function.prototype.name": "^1.1.6",
+ "has-tostringtag": "^1.0.2",
+ "is-async-function": "^2.0.0",
+ "is-date-object": "^1.1.0",
+ "is-finalizationregistry": "^1.1.0",
+ "is-generator-function": "^1.0.10",
+ "is-regex": "^1.2.1",
+ "is-weakref": "^1.0.2",
+ "isarray": "^2.0.5",
+ "which-boxed-primitive": "^1.1.0",
+ "which-collection": "^1.0.2",
+ "which-typed-array": "^1.1.16"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
+ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
+ "dev": true
+ }
+ }
+ },
+ "which-collection": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz",
+ "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==",
+ "requires": {
+ "is-map": "^2.0.3",
+ "is-set": "^2.0.3",
+ "is-weakmap": "^2.0.2",
+ "is-weakset": "^2.0.3"
+ }
+ },
+ "which-module": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz",
+ "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==",
+ "dev": true
+ },
+ "which-typed-array": {
+ "version": "1.1.19",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz",
+ "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==",
+ "requires": {
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.4",
+ "for-each": "^0.3.5",
+ "get-proto": "^1.0.1",
+ "gopd": "^1.2.0",
+ "has-tostringtag": "^1.0.2"
+ }
+ },
"widest-line": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz",
@@ -14846,45 +15684,18 @@
"dev": true,
"requires": {
"string-width": "^2.1.1"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
- "dev": true
- },
- "string-width": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
- "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
- "dev": true,
- "requires": {
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
- }
- },
- "strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
- "dev": true,
- "requires": {
- "ansi-regex": "^3.0.0"
- }
- }
}
},
+ "window-size": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
+ "integrity": "sha512-1pTPQDKTdd61ozlKGNCjhNRd+KPmgLSGa3mZTHoOliaGcESD8G1PXhh7c1fgiPjVbNVfgy2Faw4BI8/m0cC8Mg==",
+ "dev": true
+ },
"winston": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/winston/-/winston-2.4.0.tgz",
- "integrity": "sha1-gIBQuT1SZh7Z+2wms/DIJnCLCu4=",
+ "integrity": "sha512-4/DotzcMp5ilGEC0KrZkpZ0pCHuUrVWmM41qAT5zAa5nNaBAyc1MQBPTVjcajiYf1D6b+CHjziYNY2Mi6Svv2g==",
"requires": {
"async": "~1.0.0",
"colors": "1.0.x",
@@ -14897,60 +15708,93 @@
"async": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz",
- "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k="
+ "integrity": "sha512-5mO7DX4CbJzp9zjaFXusQQ4tzKJARjNB1Ih1pVBi8wkbmXy/xzIDgEMXxWePLzt2OdFwaxfneIlT1nCiXubrPQ=="
+ },
+ "colors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw=="
}
}
},
+ "word-wrap": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
+ "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
+ "dev": true
+ },
"wordwrap": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
- "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc="
+ "integrity": "sha512-1tMA907+V4QmxV7dbRvb4/8MaRALK6q9Abid3ndMYnbyo8piisCmeONVqVSXqQA3KaP4SLt5b7ud6E2sqP8TFw=="
},
"wrap-ansi": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
- "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
+ "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==",
"dev": true,
"requires": {
"string-width": "^1.0.1",
"strip-ansi": "^3.0.1"
+ },
+ "dependencies": {
+ "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": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==",
+ "dev": 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": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==",
+ "dev": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ }
}
},
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
},
"write": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz",
- "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=",
+ "integrity": "sha512-CJ17OoULEKXpA5pef3qLj5AxTJ6mSt7g84he2WIskKwqFO4T97d5V7Tadl0DYDk7qyUOQD5WlUlOMChaYrhxeA==",
"dev": true,
"requires": {
"mkdirp": "^0.5.1"
},
"dependencies": {
"minimist": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
- "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
"dev": true
},
"mkdirp": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
- "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "version": "0.5.6",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
+ "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
"dev": true,
"requires": {
- "minimist": "0.0.8"
+ "minimist": "^1.2.6"
}
}
}
},
"write-file-atomic": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz",
- "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==",
+ "version": "2.4.3",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz",
+ "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==",
"dev": true,
"requires": {
"graceful-fs": "^4.1.11",
@@ -14959,36 +15803,31 @@
}
},
"ws": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz",
- "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==",
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz",
+ "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==",
"dev": true,
"requires": {
- "async-limiter": "~1.0.0"
+ "options": ">=0.0.5",
+ "ultron": "1.0.x"
}
},
- "x-is-function": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/x-is-function/-/x-is-function-1.0.4.tgz",
- "integrity": "sha1-XSlNw9Joy90GJYDgxd93o5HR+h4=",
- "dev": true
- },
"x-is-string": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz",
- "integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=",
+ "integrity": "sha512-GojqklwG8gpzOVEVki5KudKNoq7MbbjYZCbyWzEz7tyPA7eleiE0+ePwOWQQRb5fm86rD3S8Tc0tSFf3AOv50w==",
"dev": true
},
"xdg-basedir": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz",
- "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=",
+ "integrity": "sha512-1Dly4xqlulvPD3fZUQJLY+FUIeqN3N2MM3uqe4rCJftAvOjFa3jFGfctOgluGx4ahPbUCsZkmJILiP0Vi4T6lQ==",
"dev": true
},
"xml-js": {
- "version": "1.6.4",
- "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.4.tgz",
- "integrity": "sha512-ZJ4DPgx97LzSdZ0NAbd0J5gWeSgWTpL2hIH1j1bOmk6QMyppee0S+vQAv/H+oYY1923kck5msPWOuSs0BDUh/w==",
+ "version": "1.6.11",
+ "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz",
+ "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==",
"requires": {
"sax": "^1.2.4"
}
@@ -14996,7 +15835,7 @@
"xtend": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
- "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68="
+ "integrity": "sha512-iTwvhNBRetXWe81+VcIw5YeadVSWyze7uA7nVnpP13ulrpnJ3UfQm5ApGnrkmxDJFdrblRdZs0EvaTCIfei5oQ=="
},
"xxhashjs": {
"version": "0.2.2",
@@ -15008,17 +15847,117 @@
}
},
"y18n": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
- "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz",
+ "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==",
"dev": true
},
"yallist": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
- "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+ "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==",
"dev": true
},
+ "yargs": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz",
+ "integrity": "sha512-3RiZrpLpjrzIAKgGdPktBcMP/eG5bDFlkI+PHle1qwzyVXyDQL+pD/eZaMoOOO0Y7LLBfjpucObuUm/icvbpKQ==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^4.1.0",
+ "cliui": "^3.2.0",
+ "decamelize": "^1.1.1",
+ "get-caller-file": "^1.0.1",
+ "os-locale": "^2.0.0",
+ "read-pkg-up": "^2.0.0",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^1.0.1",
+ "set-blocking": "^2.0.0",
+ "string-width": "^2.0.0",
+ "which-module": "^2.0.0",
+ "y18n": "^3.2.1",
+ "yargs-parser": "^7.0.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+ "integrity": "sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==",
+ "dev": true
+ },
+ "load-json-file": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
+ "integrity": "sha512-3p6ZOGNbiX4CdvEd1VcE6yi78UrGNpjHO33noGwHCnT/o2fyllJDepsm8+mFFv/DvtwFHht5HIHSyOy5a+ChVQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^2.2.0",
+ "pify": "^2.0.0",
+ "strip-bom": "^3.0.0"
+ }
+ },
+ "path-type": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
+ "integrity": "sha512-dUnb5dXUf+kzhC/W/F4e5/SkluXIFf5VUHolW1Eg1irn1hGWjPGdsRcvYJ1nD6lhk8Ir7VM0bHJKsYTx8Jx9OQ==",
+ "dev": true,
+ "requires": {
+ "pify": "^2.0.0"
+ }
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+ "dev": true
+ },
+ "read-pkg": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
+ "integrity": "sha512-eFIBOPW7FGjzBuk3hdXEuNSiTZS/xEMlH49HxMyzb0hyPfu4EhVjT2DH32K1hSSmVq4sebAWnZuuY5auISUTGA==",
+ "dev": true,
+ "requires": {
+ "load-json-file": "^2.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^2.0.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
+ "integrity": "sha512-1orxQfbWGUiTn9XsPlChs6rLie/AV9jwZTGmu2NZw/CUDJQchXJFYE0Fq5j7+n558T1JhDWLdhyd1Zj+wLY//w==",
+ "dev": true,
+ "requires": {
+ "find-up": "^2.0.0",
+ "read-pkg": "^2.0.0"
+ }
+ },
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
+ "dev": true
+ }
+ }
+ },
+ "yargs-parser": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz",
+ "integrity": "sha512-WhzC+xgstid9MbVUktco/bf+KJG+Uu6vMX0LN1sLJvwmbCQVxb4D8LzogobonKycNasCZLdOzTAk1SK7+K7swg==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^4.1.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+ "integrity": "sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==",
+ "dev": true
+ }
+ }
+ },
"z-schema": {
"version": "3.25.1",
"resolved": "https://registry.npmjs.org/z-schema/-/z-schema-3.25.1.tgz",
@@ -15036,11 +15975,6 @@
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
"optional": true
- },
- "core-js": {
- "version": "2.6.5",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.5.tgz",
- "integrity": "sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A=="
}
}
}
diff --git a/package.json b/package.json
index 15997130..21c69e4f 100644
--- a/package.json
+++ b/package.json
@@ -17,18 +17,18 @@
"lint:js": "eslint ./src",
"bundle:js": "webpack",
"watch:js": "webpack --watch",
- "watch:sync-bundle": "livereload \"build, src/views/index.html\"",
+ "watch:sync-bundle": "livereload \"public, src/views/index.html\"",
"watch:sync-server": "nodemon src/server/index.js",
"lint:css": "stylelint src/**/*.css",
- "bundle:css": "postcss src/styles/index.css -o build/bundle.css",
- "watch:css": "postcss --watch src/styles/index.css -o build/bundle.css",
- "bundle:css-deps": "postcss src/styles/deps.css -o build/deps.css",
- "watch:css-deps": "postcss --watch src/styles/deps.css -o build/deps.css",
+ "bundle:css": "postcss src/styles/index.css -o public/bundle.css",
+ "watch:css": "postcss --watch src/styles/index.css -o public/bundle.css",
+ "bundle:css-deps": "postcss src/styles/deps.css -o public/deps.css",
+ "watch:css-deps": "postcss --watch src/styles/deps.css -o public/deps.css",
"bundle": "run-s bundle:*",
"bundle-profile": "cross-env NODE_ENV=production PROFILE=true webpack --profile",
"build": "run-p bundle",
"build-prod": "cross-env NODE_ENV=production run-s build",
- "clean": "rimraf build/*",
+ "clean": "rimraf public/bundle.js public/deps.js public/bundle.css public/deps.css",
"lint": "run-s lint:*",
"watch": "run-p watch:*",
"test": "mocha --recursive",
@@ -94,17 +94,21 @@
"winston": "^2.4.0"
},
"devDependencies": {
+ "@babel/core": "^7.22.5",
+ "@babel/helper-remap-async-to-generator": "^7.25.9",
+ "@babel/plugin-transform-async-generator-functions": "^7.26.8",
+ "@babel/preset-env": "^7.22.5",
+ "@babel/preset-react": "^7.26.3",
"async-retry": "^1.3.3",
- "babel-core": "^6.26.0",
- "babel-loader": "^7.1.2",
+ "babel-loader": "^8.3.0",
"babel-plugin-transform-async-to-generator": "^6.24.1",
"babel-polyfill": "^6.26.0",
- "babel-preset-env": "^1.6.0",
"babel-preset-react": "^6.24.1",
"chai": "^4.1.2",
"commander": "^11.1.0",
"cross-env": "^5.0.5",
"cssnano": "^3.10.0",
+ "dotenv": "^16.4.7",
"echo-cli": "^1.0.8",
"eslint": "^4.8.0",
"eslint-config-standard": "^10.2.1",
diff --git a/public/bundle.css b/public/bundle.css
index 952d31d1..c5c005c1 120000
--- a/public/bundle.css
+++ b/public/bundle.css
@@ -1 +1,2528 @@
-../build/bundle.css
\ No newline at end of file
+/* css entry point */
+
+/* per-page css files */
+
+:root {
+ /* Pathway commons colors */
+
+ /* Colours used by other modules */
+}
+
+/* Viewport scaling sizes */
+
+.toggle-extra-downloads-container, .download-option-description {
+ cursor: default;
+}
+
+body {
+ font-family: Open Sans, Roboto, Liberation Sans, Helvetica Neue, Helvetica, Arial, sans-serif;
+}
+
+@-webkit-keyframes spin {
+ 0% {
+ -webkit-transform: rotate(45deg);
+ transform: rotate(45deg);
+ }
+
+ 100% {
+ -webkit-transform: rotate(404deg);
+ transform: rotate(404deg);
+ }
+}
+
+@keyframes spin {
+ 0% {
+ -webkit-transform: rotate(45deg);
+ transform: rotate(45deg);
+ }
+
+ 100% {
+ -webkit-transform: rotate(404deg);
+ transform: rotate(404deg);
+ }
+}
+
+@-webkit-keyframes fadeIn {
+ 0% {
+ opacity: 0;
+ }
+
+ 100% {
+ opacity: 1;
+ }
+}
+
+@keyframes fadeIn {
+ 0% {
+ opacity: 0;
+ }
+
+ 100% {
+ opacity: 1;
+ }
+}
+
+body {
+ font-family: Open Sans, Helvetica Neue, Helvetica, sans-serif;
+ font-size: 12pt
+}
+
+body.content-page {
+ margin: 0.5em;
+}
+
+* {
+ outline: none !important;
+}
+
+input[type='text'], input[type='date'], input[type='week'], input[type='datetime'], input[type='email'], input[type='file'], input[type='month'], input[type='number'], input[type='password'], input[type='search'], input[type='tel'], input[type='url'], textarea {
+ /* width: var(--defaultWidgetWidth); */
+}
+
+input[type='text'], input[type='date'], input[type='week'], input[type='datetime'], input[type='email'], input[type='file'], input[type='month'], input[type='number'], input[type='password'], input[type='search'], input[type='tel'], input[type='url'], input[type='reset'], input[type='submit'], button, textarea, select, .radioset input[type="radio"] + label, .button-like {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+ vertical-align: middle;
+ font: inherit;
+ outline: none !important;
+ padding: 0 0.25em;
+ height: 1.75em;
+ min-height: 1.75em;
+ line-height: 1.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ display: inline-block;
+ background-color: transparent;
+ border-radius: 4px;
+ border: 1px solid #d3d8da;
+ -webkit-transition-property: border-color, background-color, color;
+ -o-transition-property: border-color, background-color, color;
+ transition-property: border-color, background-color, color;
+ -webkit-transition-duration: 500ms;
+ -o-transition-duration: 500ms;
+ transition-duration: 500ms;
+ -webkit-transition-timing-function: ease-out;
+ -o-transition-timing-function: ease-out;
+ transition-timing-function: ease-out
+}
+
+input[type='text']:disabled, input[type='date']:disabled, input[type='week']:disabled, input[type='datetime']:disabled, input[type='email']:disabled, input[type='file']:disabled, input[type='month']:disabled, input[type='number']:disabled, input[type='password']:disabled, input[type='search']:disabled, input[type='tel']:disabled, input[type='url']:disabled, input[type='reset']:disabled, input[type='submit']:disabled, button:disabled, textarea:disabled, select:disabled, .radioset input[type="radio"] + label:disabled, .button-like:disabled {
+ border: 1px solid #ddd;
+ cursor: default;
+ color: #888;
+}
+
+input[type='text']::-webkit-input-placeholder, input[type='date']::-webkit-input-placeholder, input[type='week']::-webkit-input-placeholder, input[type='datetime']::-webkit-input-placeholder, input[type='email']::-webkit-input-placeholder, input[type='file']::-webkit-input-placeholder, input[type='month']::-webkit-input-placeholder, input[type='number']::-webkit-input-placeholder, input[type='password']::-webkit-input-placeholder, input[type='search']::-webkit-input-placeholder, input[type='tel']::-webkit-input-placeholder, input[type='url']::-webkit-input-placeholder, input[type='reset']::-webkit-input-placeholder, input[type='submit']::-webkit-input-placeholder, button::-webkit-input-placeholder, textarea::-webkit-input-placeholder, select::-webkit-input-placeholder, .radioset input[type="radio"] + label::-webkit-input-placeholder, .button-like::-webkit-input-placeholder {
+ color: rgb(165, 165, 165);
+}
+
+input[type='text']::-moz-placeholder, input[type='date']::-moz-placeholder, input[type='week']::-moz-placeholder, input[type='datetime']::-moz-placeholder, input[type='email']::-moz-placeholder, input[type='file']::-moz-placeholder, input[type='month']::-moz-placeholder, input[type='number']::-moz-placeholder, input[type='password']::-moz-placeholder, input[type='search']::-moz-placeholder, input[type='tel']::-moz-placeholder, input[type='url']::-moz-placeholder, input[type='reset']::-moz-placeholder, input[type='submit']::-moz-placeholder, button::-moz-placeholder, textarea::-moz-placeholder, select::-moz-placeholder, .radioset input[type="radio"] + label::-moz-placeholder, .button-like::-moz-placeholder {
+ color: rgb(165, 165, 165);
+}
+
+input[type='text']::-ms-input-placeholder, input[type='date']::-ms-input-placeholder, input[type='week']::-ms-input-placeholder, input[type='datetime']::-ms-input-placeholder, input[type='email']::-ms-input-placeholder, input[type='file']::-ms-input-placeholder, input[type='month']::-ms-input-placeholder, input[type='number']::-ms-input-placeholder, input[type='password']::-ms-input-placeholder, input[type='search']::-ms-input-placeholder, input[type='tel']::-ms-input-placeholder, input[type='url']::-ms-input-placeholder, input[type='reset']::-ms-input-placeholder, input[type='submit']::-ms-input-placeholder, button::-ms-input-placeholder, textarea::-ms-input-placeholder, select::-ms-input-placeholder, .radioset input[type="radio"] + label::-ms-input-placeholder, .button-like::-ms-input-placeholder {
+ color: rgb(165, 165, 165);
+}
+
+input[type='text']::placeholder, input[type='date']::placeholder, input[type='week']::placeholder, input[type='datetime']::placeholder, input[type='email']::placeholder, input[type='file']::placeholder, input[type='month']::placeholder, input[type='number']::placeholder, input[type='password']::placeholder, input[type='search']::placeholder, input[type='tel']::placeholder, input[type='url']::placeholder, input[type='reset']::placeholder, input[type='submit']::placeholder, button::placeholder, textarea::placeholder, select::placeholder, .radioset input[type="radio"] + label::placeholder, .button-like::placeholder {
+ color: rgb(165, 165, 165);
+}
+
+input[type='text']:active, input[type='date']:active, input[type='week']:active, input[type='datetime']:active, input[type='email']:active, input[type='file']:active, input[type='month']:active, input[type='number']:active, input[type='password']:active, input[type='search']:active, input[type='tel']:active, input[type='url']:active, input[type='reset']:active, input[type='submit']:active, button:active, textarea:active, select:active, .radioset input[type="radio"] + label:active, .button-like:active {
+ color: #000;
+}
+
+input[type='text']:active, input[type='text']:focus, input[type='date']:active, input[type='date']:focus, input[type='week']:active, input[type='week']:focus, input[type='datetime']:active, input[type='datetime']:focus, input[type='email']:active, input[type='email']:focus, input[type='file']:active, input[type='file']:focus, input[type='month']:active, input[type='month']:focus, input[type='number']:active, input[type='number']:focus, input[type='password']:active, input[type='password']:focus, input[type='search']:active, input[type='search']:focus, input[type='tel']:active, input[type='tel']:focus, input[type='url']:active, input[type='url']:focus, input[type='reset']:active, input[type='reset']:focus, input[type='submit']:active, input[type='submit']:focus, button:active, button:focus, textarea:active, textarea:focus, select:active, select:focus, .radioset input[type="radio"] + label:active, .radioset input[type="radio"] + label:focus, .button-like:active, .button-like:focus {
+ border-color: #aaa;
+}
+
+input[type='text']:invalid, input[type='date']:invalid, input[type='week']:invalid, input[type='datetime']:invalid, input[type='email']:invalid, input[type='file']:invalid, input[type='month']:invalid, input[type='number']:invalid, input[type='password']:invalid, input[type='search']:invalid, input[type='tel']:invalid, input[type='url']:invalid, input[type='reset']:invalid, input[type='submit']:invalid, button:invalid, textarea:invalid, select:invalid, .radioset input[type="radio"] + label:invalid, .button-like:invalid {
+ border-color: #c20e0e;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+input[type='text']::-moz-focus-inner, input[type='date']::-moz-focus-inner, input[type='week']::-moz-focus-inner, input[type='datetime']::-moz-focus-inner, input[type='email']::-moz-focus-inner, input[type='file']::-moz-focus-inner, input[type='month']::-moz-focus-inner, input[type='number']::-moz-focus-inner, input[type='password']::-moz-focus-inner, input[type='search']::-moz-focus-inner, input[type='tel']::-moz-focus-inner, input[type='url']::-moz-focus-inner, input[type='reset']::-moz-focus-inner, input[type='submit']::-moz-focus-inner, button::-moz-focus-inner, textarea::-moz-focus-inner, select::-moz-focus-inner, .radioset input[type="radio"] + label::-moz-focus-inner, .button-like::-moz-focus-inner {
+ border: 0;
+}
+
+input[type='text']::-ms-clear, input[type='date']::-ms-clear, input[type='week']::-ms-clear, input[type='datetime']::-ms-clear, input[type='email']::-ms-clear, input[type='file']::-ms-clear, input[type='month']::-ms-clear, input[type='number']::-ms-clear, input[type='password']::-ms-clear, input[type='search']::-ms-clear, input[type='tel']::-ms-clear, input[type='url']::-ms-clear, input[type='reset']::-ms-clear, input[type='submit']::-ms-clear, button::-ms-clear, textarea::-ms-clear, select::-ms-clear, .radioset input[type="radio"] + label::-ms-clear, .button-like::-ms-clear {
+ display: none;
+}
+
+button.button-toggle.button-toggle-on {
+ background-color: #ccc;
+}
+
+.radioset {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex
+}
+
+.radioset input[type="radio"] {
+ display: none;/* hide native radio circle */
+}
+
+.radioset input[type="radio"]:active + label {
+ border-color: black;
+}
+
+.radioset input[type="radio"]:checked + label {
+ background-color: #ccc;
+}
+
+.radioset input[type="radio"] + label::before {
+ display: none;/* hide icon replacement */
+}
+
+.radioset input[type="radio"] + label {
+ border-radius: 0;
+}
+
+.radioset input[type="radio"]:first-child + label {
+ border-top-left-radius: 4px;
+ border-bottom-left-radius: 4px;
+}
+
+.radioset input[type="radio"] + label:last-child {
+ border-top-right-radius: 4px;
+ border-bottom-right-radius: 4px;
+}
+
+select {
+ width: 12em;
+ padding-right: 1em;
+ background-image: url("data:image/svg+xml,%3Csvg width%3D%221792%22 height%3D%221792%22 viewBox%3D%220 0 1792 1792%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath d%3D%22M1395 736q0 13-10 23l-466 466q-10 10-23 10t-23-10l-466-466q-10-10-10-23t10-23l50-50q10-10 23-10t23 10l393 393 393-393q10-10 23-10t23 10l50 50q10 10 10 23z%22%2F%3E%3C%2Fsvg%3E%0D");
+ background-position: 100% 50%;
+ background-position: calc(100% - 0.5em) 50%;
+ background-size: 1em 1em;
+ background-repeat: no-repeat;
+
+ /* background-blend-mode: overlay; */
+ cursor: pointer
+
+ /* &:disabled {
+ background-color: rgba(255, 255, 255, 0.5);
+ } */
+
+ /* removes dotted lines on ff */
+}
+
+select:-moz-focusring {
+ color: transparent;
+ text-shadow: 0 0 0 #000;
+}
+
+input[type='range'] {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+ width: 12em;
+ height: 1em;
+ background: transparent;
+ cursor: pointer;
+ outline: none !important
+}
+
+input[type='range']:focus {
+ outline: none !important;
+}
+
+input[type='range']::-moz-focus-outer {
+ border: 0;
+}
+
+input[type='range']::-webkit-slider-thumb {
+ -webkit-appearance: none;
+ background-color: #000;
+ border-radius: 1em;
+ border-width: 0;
+ width: 1em;
+ height: 1em;
+ margin-top: -0.45em;
+ cursor: pointer;
+ outline: none;
+}
+
+input[type='range']::-moz-range-thumb {
+ background-color: #000;
+ border-radius: 1em;
+ border-width: 0;
+ width: 1em;
+ height: 1em;
+ margin-top: -0.45em;
+ cursor: pointer;
+ outline: none;
+}
+
+input[type='range']::-ms-thumb {
+ background-color: #000;
+ border-radius: 1em;
+ border-width: 0;
+ width: 1em;
+ height: 1em;
+ margin-top: 0;
+ cursor: pointer;
+ outline: none;
+}
+
+input[type='range']::-webkit-slider-runnable-track {
+ width: 100%;
+ height: 0.1em;
+ background-color: #d3d8da;
+ border-radius: 0.1em;
+ outline: none;
+}
+
+input[type='range']::-moz-range-track {
+ width: 100%;
+ height: 0.1em;
+ background-color: #d3d8da;
+ border-radius: 0.1em;
+ outline: none;
+}
+
+input[type='range']::-ms-track {
+ background: transparent;
+ color: transparent;
+ width: 100%;
+ height: 0.1em;
+ background-color: #d3d8da;
+ border-radius: 0.1em;
+ outline: none;
+}
+
+input[type='reset'], input[type='submit'], button {
+ cursor: pointer;
+ text-align: center
+}
+
+input[type='reset'].plain-button, input[type='submit'].plain-button, button.plain-button {
+ border-color: transparent;
+}
+
+input[type='reset']:active, input[type='submit']:active, button:active {
+ border-color: #000;
+ -webkit-box-shadow: inset 0 0 0 1px #fff, inset 0 0 4px #fff;
+ box-shadow: inset 0 0 0 1px #fff, inset 0 0 4px #fff;
+}
+
+input[type='reset']:active.plain-button, input[type='submit']:active.plain-button, button:active.plain-button {
+ border-color: rgb(84, 84, 84);
+}
+
+input.input-joined + button, button.button-joined {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+ min-width: 2em;
+}
+
+input.input-joined {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+ position: relative;
+}
+
+input.input-joined:not(.input-round) {
+ border-right-width: 0;
+}
+
+input.input-round {
+ border-radius: 1em;
+ padding-left: 0.5em;
+ padding-right: 2em;
+}
+
+input.input-round + button, input.input-round + .input-joined-after {
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ height: 1.75em;
+ display: -webkit-inline-box;
+ display: -ms-inline-flexbox;
+ display: inline-flex;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: row;
+ flex-direction: row;
+ border-color: transparent;
+ position: absolute;
+ width: 2em;
+ margin-left: -2em;
+ border-top-right-radius: 1em;
+ border-bottom-right-radius: 1em;
+}
+
+input.input-round + button:active, input.input-round + .input-joined-after:active {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ color: #888;
+}
+
+.input-icon {
+ position: absolute;
+ height: 1.75em;
+ line-height: 1.75em;
+ width: 2em;
+ text-align: center
+}
+
+.input-icon + input {
+ padding-left: 1.75em;
+}
+
+.icon {
+ display: inline-block;
+ line-height: 1em;
+ vertical-align: -0.125em;
+ width: 1em;
+ height: 1em;
+ background-size: contain;
+ background-repeat: no-repeat
+}
+
+.icon.icon-spinner {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ background-image: url("data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22UTF-8%22%3F%3E%0D%3C!DOCTYPE svg PUBLIC %22-%2F%2FW3C%2F%2FDTD SVG 1.1%2F%2FEN%22 %22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%0D%3Csvg version%3D%221.1%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22 x%3D%220%22 y%3D%220%22 width%3D%2224%22 height%3D%2224%22 viewBox%3D%220%2C 0%2C 24%2C 24%22%3E%0D %3Cg id%3D%22Layer_1%22%3E%0D %3Cpath d%3D%22M12%2C18.975 C14.21%2C18.975 16.17%2C17.955 17.45%2C16.355 L20.05%2C17.885 C18.23%2C20.365 15.3%2C21.975 11.99%2C21.975 C6.47%2C21.975 2%2C17.495 2%2C11.975 C2%2C6.785 5.94%2C2.525 11%2C2.025 L11%2C5.055 C7.61%2C5.545 5%2C8.445 5%2C11.975 C5%2C15.845 8.13%2C18.975 12%2C18.975 z%22 fill%3D%22%23000000%22%2F%3E%0D %3C%2Fg%3E%0D%3C%2Fsvg%3E%0D");
+ -webkit-animation: spin 750ms infinite linear;
+ animation: spin 750ms infinite linear;
+}
+
+.icon.icon-biofactoid {
+ background-image: url("data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22UTF-8%22 standalone%3D%22no%22%3F%3E%0D%3C!DOCTYPE svg PUBLIC %22-%2F%2FW3C%2F%2FDTD SVG 1.1%2F%2FEN%22 %22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%0D%3Csvg width%3D%22100%25%22 height%3D%22100%25%22 viewBox%3D%220 0 100 100%22 version%3D%221.1%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22 xml%3Aspace%3D%22preserve%22 xmlns%3Aserif%3D%22http%3A%2F%2Fwww.serif.com%2F%22 style%3D%22fill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bstroke-linejoin%3Around%3Bstroke-miterlimit%3A2%3B%22%3E%0D %3Cg transform%3D%22matrix(1%2C0%2C0%2C1%2C-847.921%2C-1308.12)%22%3E%0D %3Cg transform%3D%22matrix(1.06872%2C0%2C0%2C1.06872%2C-41.1717%2C-50.3547)%22%3E%0D %3Cg transform%3D%22matrix(0.514119%2C0%2C0%2C0.514119%2C473.066%2C714.847)%22%3E%0D %3Ccircle cx%3D%22789%22 cy%3D%221173%22 r%3D%2291%22 style%3D%22fill%3Argb(255%2C212%2C121)%3B%22%2F%3E%0D %3C%2Fg%3E%0D %3Cg transform%3D%22matrix(0.591623%2C0%2C0%2C0.591623%2C-475.358%2C574.836)%22%3E%0D %3Cg transform%3D%22matrix(9.26845e-18%2C0.151365%2C-0.151365%2C9.26845e-18%2C2476.47%2C1048.47)%22%3E%0D %3Cpath d%3D%22M1369.82%2C847.06L1540.04%2C945.334L1540.04%2C1141.88L1369.82%2C1240.16L1199.61%2C1141.88L1199.61%2C945.334L1369.82%2C847.06Z%22 style%3D%22fill%3Awhite%3B%22%2F%3E%0D %3C%2Fg%3E%0D %3Cg transform%3D%22matrix(9.26845e-18%2C0.151365%2C-0.151365%2C9.26845e-18%2C2428.92%2C1021.17)%22%3E%0D %3Cpath d%3D%22M1369.82%2C847.06L1540.04%2C945.334L1540.04%2C1141.88L1369.82%2C1240.16L1199.61%2C1141.88L1199.61%2C945.334L1369.82%2C847.06Z%22 style%3D%22fill%3Awhite%3B%22%2F%3E%0D %3C%2Fg%3E%0D %3Cg transform%3D%22matrix(9.26845e-18%2C0.151365%2C-0.151365%2C9.26845e-18%2C2428.92%2C1075.71)%22%3E%0D %3Cpath d%3D%22M1369.82%2C847.06L1540.04%2C945.334L1540.04%2C1141.88L1369.82%2C1240.16L1199.61%2C1141.88L1199.61%2C945.334L1369.82%2C847.06Z%22 style%3D%22fill%3Awhite%3B%22%2F%3E%0D %3C%2Fg%3E%0D %3C%2Fg%3E%0D %3C%2Fg%3E%0D %3C%2Fg%3E%0D%3C%2Fsvg%3E%0D");
+}
+
+.icon.icon-t {
+ background-image: url("data:image/svg+xml,%3Csvg aria-hidden%3D%22true%22 focusable%3D%22false%22 data-prefix%3D%22fab%22 data-icon%3D%22twitter%22 class%3D%22svg-inline--fa fa-twitter fa-w-16%22 role%3D%22img%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 viewBox%3D%220 0 512 512%22%3E%3Cpath fill%3D%22%23000%22 d%3D%22M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z%22%3E%3C%2Fpath%3E%3C%2Fsvg%3E");
+}
+
+.icon.icon-t-white {
+ background-image: url("data:image/svg+xml,%3Csvg aria-hidden%3D%22true%22 focusable%3D%22false%22 data-prefix%3D%22fab%22 data-icon%3D%22twitter%22 class%3D%22svg-inline--fa fa-twitter fa-w-16%22 role%3D%22img%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 viewBox%3D%220 0 512 512%22%3E%3Cpath fill%3D%22%23fff%22 d%3D%22M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z%22%3E%3C%2Fpath%3E%3C%2Fsvg%3E");
+}
+
+.icon.icon-orcid {
+ background-image: url("data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%0D%3C!-- Generator%3A Adobe Illustrator 19.1.0%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%0D%3Csvg version%3D%221.1%22 id%3D%22Layer_1%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22 x%3D%220px%22 y%3D%220px%22%0D%09 viewBox%3D%220 0 256 256%22 style%3D%22enable-background%3Anew 0 0 256 256%3B%22 xml%3Aspace%3D%22preserve%22%3E%0D%3Cstyle type%3D%22text%2Fcss%22%3E%0D%09.st0%7Bfill%3A%23A6CE39%3B%7D%0D%09.st1%7Bfill%3A%23FFFFFF%3B%7D%0D%3C%2Fstyle%3E%0D%3Cpath class%3D%22st0%22 d%3D%22M256%2C128c0%2C70.7-57.3%2C128-128%2C128C57.3%2C256%2C0%2C198.7%2C0%2C128C0%2C57.3%2C57.3%2C0%2C128%2C0C198.7%2C0%2C256%2C57.3%2C256%2C128z%22%2F%3E%0D%3Cg%3E%0D%09%3Cpath class%3D%22st1%22 d%3D%22M86.3%2C186.2H70.9V79.1h15.4v48.4V186.2z%22%2F%3E%0D%09%3Cpath class%3D%22st1%22 d%3D%22M108.9%2C79.1h41.6c39.6%2C0%2C57%2C28.3%2C57%2C53.6c0%2C27.5-21.5%2C53.6-56.8%2C53.6h-41.8V79.1z M124.3%2C172.4h24.5%0D%09%09c34.9%2C0%2C42.9-26.5%2C42.9-39.7c0-21.5-13.7-39.7-43.7-39.7h-23.7V172.4z%22%2F%3E%0D%09%3Cpath class%3D%22st1%22 d%3D%22M88.7%2C56.8c0%2C5.5-4.5%2C10.1-10.1%2C10.1c-5.6%2C0-10.1-4.6-10.1-10.1c0-5.6%2C4.5-10.1%2C10.1-10.1%0D%09%09C84.2%2C46.7%2C88.7%2C51.3%2C88.7%2C56.8z%22%2F%3E%0D%3C%2Fg%3E%0D%3C%2Fsvg%3E");
+}
+
+.icon.icon-ncbi {
+ background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAfYAAAJoCAYAAACUb8MSAAAACXBIWXMAABcSAAAXEgFnn9JSAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgABDFpJREFUeNrs3XmYFOW1P/BTVd0zOBIMMSZeE2O88ZoYNTHGXK/3+jMmCMzW3bV1D4hoRMQoCaJGjcRojKLIMjAzvVV1VS8zA8MmIogCIososoogsu+y78MsMOv390c1i4qICjIDJ8/zeVBANL19+33f855DAIgxxhhj5wZ+EBhrqZprRTTXiGg+BKABQDOO/a8ZQAPqGg6hpr4e+w/XY2fNIWw7WI31+6rw9rpqVCzYgyFvrMOjpR/iruL3cfs/JuO6h0bhwkAc5I2gl/EeKg83ZPJjzRgHO2PstKl2A7XiF/16bSPE3bWN2HzgEFbursTiLXsxb+MOjFm4HYPf3IynRy7Fn8PvwvvcBNzycCmuumsY/kMbiEvUIfiuPATfkYfiQjWICwMGMgIWJL8F0iyQL8rBzhgHO2PsK2vYn4XGfW2dAP/i37frYF37dbsqr1i6cdf181duuXnG0k0dBk5e//wTo5cZ9xnvI7f/m7jhkQpcereBTN8guDxD4ZYjIE8Q5DNBig3SSkFKCiQnQd44SE6A1CRIjYPUdKAX2CDdAvl4xc4YBztj7BvZc7C+3drtlVcuWrvjxtlLN932yvwNXQZP2/hcv9FLw91Lpk/+49Ov4Of32/ieMgSujs+D8gaCPENA+YUgXwlIiTqhrMchqFGIcglIDoKUCEgzQX4bpMdBqg1BsSFoaaoJUY5A9IUgKUEIaoxX7IxxsDPGTtX2A/UXf7h+1w3vfrT+tvJ31/YcPGX1c38rXxTrPmz65M7PvoZf907hUv9QZOQMBOUUgzoPBWUXgzyGs8L2l4P0MghKFIIcAskhCHIIohKEpAYhysVwqyFkalFkaFG4lChcigFRMSAqMZBiQFDDEOQgBF8QohKBWzWRocbg8kUhqBZI5mBnjIOdsfNVU7UbOPipAKxthvjJ3oOXLly77abR8zd2t2Z83Kf/K/MG/CX2Trn20uuzb+lbjp/fG4IkR0E5YVCnElBu2NkW96dAShykWBD8MZAac7bSlSRIKwdpFSC1AqSXgfQkSE8c3U4XVBOCEoGk2hCVJCS1FKKcgkstg6ikIKnlENUUBL8B0gyQYjgreD0FwV/ubNWrcZDMW/GMcbAzdp7aX9uctXjLoRteX7RZiby55NF/VLwfvCf8zqTsFybhhr4V+N49cbiUYlCHF0F/eAnUeRjIEwXJ6XNtPQ7Bn4CgJZxA98UhyglISgKSakFQYxBVE5JiwKVE4FLCcClhSFoMkm5B1K2j2+qkpmkWSDGcX1MNiHoMpEQh6jEImglJiUFULQiaBfHIFwN/EuRPONv1vgh6GXM42BnjYGfs3LZqz6Grpi7bkZucuf7BZ8rnF/25aOoo70sz5v7271Nwec/hyFDCoE6FoI7DQDkRUG4EJEdBsuEUqOkJJ0D1JEhNOIVtsglBjUFQDJAcAfnCEJQwRDXqbLerUYiqAVE1ICmmQzUhKuG0CAQl6qy+FROkxECqAVIjELQoSIs4lLDzoxqBIJsOxYSgmumVu+mcxWs2SIniwehMVB2qd/PzzhgHO2PnhNX7cNXEhduU4lfn9/tL8LXyPw0bN/GPT5Uv/+VDSfywR6mz6u5QAuoUBOWG0qtw0wlw1XK20E/IPM6Jfv3L/vlT/X3WZ36fdWp/thYHKRE8FHoLVdWHONgZ42BnrPVZu6fmygmLPtEGj333ufsGjR6f+/TwRf/92KitP71/OL7bxXbOv7NLQJ2LQHlBZ2WsxUD+GEiPnUIItyJ6AuQL4y/ht1FZWcNb8YxxsDPWMlU3Nbv3NyNrxYGGqyd9tMtXOHHFMw+UzBrb8bHRy657oLTy8ntT+I4eBOUMBnUeAsorAnnDIF8MgjYWpIwEqcOdynTZgOQ34AqEIajRU1xhtxKaDfIF8Xji3VhNdS2v2BnjYGfsDGqsFZsbq08pbCrrGzLXV9Zf8faK/R2NN5f1vfPlqVP/8PdxuO7BFC7tbiLLH4Xgi4C8EZDHAnmSIDnlBLcSc87GlShINyDJFoR8Ey7VhksxQZ4w3JoJt25AUI1za8WuxkByGP3HfTSAX3OMcbAzdmY1V7nRXPm57eGDh+szd1TVXvzBjqobR7y3tcfj9qxYTr/hi697IIrLukfQVi9BG9UA5YVA2UGQ1wQpCSfEC0aCCsog+C0Iug1Bj6erym2QkoCgJpDhj8KlheH2xyBpdrqiPQVSy5zfdy6FumJClIMomrq2H7/mGONgZ+zMb6k3Nrm3Hay5ZPmu/ddMXrU/f9Ab6567d+iUiTf91cZ31GFopweR5Y+CvEFQbjHIGwXJNsiTAHkTICUJlz8JdyABKRCDqEcgaCGnQ5svDJIjEBTTuTamxEGyBUELgtQgSIuCtHQVuxaHoCZAinXOBTt5ixGatuFxfr0xxsHO2BkIcrg37a25bOmGHdePXLDjnn+M+SiY/9wr+Nk9JfiOPgySHnW2zpW4s4pW0tfJtHT7VD0OQTNBegRCwIComyBfBILXQIZiI1O2IclxkFYKQU2m26waEJVI+jpZKB3oUZAWhqBHIOlRhxpKb8WfS+FugTwlCE1dy8HOGAc7Y6eh4UvVwazNO/ZeNm/NlptL56zr1Xf4h8lb/jkBWQUloPwS5+63zzh6B5zkI3e32elZsScg5IUQnbbyUX49MsbBzthXD/JGZC3bXnXtmx+uyzemLOnbMzhn3B1PjMVP7wwiI3sA6I5BTpCrZc62t2Jy+HKwM8Y42FlLsmT7oetfX7JZKZy09Jk/m++Nuq3fq7i4SzGo40ugXBuUG3POxOUykFruhLonCZI5eDnYGWMc7Oys23ig+fJJizb7IhPef/TP5ruj/u/ZKRsv/1MMlP0yqNNgp8BNT4H0cudHLencp9acXuiiZkBSI077Uw5fDnbGGAc7O/2aUCM2o0Y80a/trkW7uat33BJ7Y36fPuZbpXc89/qyH/caDsordoag5Aed++NKDOSPQwgk4PLH4dJNkBYG+aPpYrcIRH8YohaEqJacm3fGOdgZYxzsrKU5CGQu2Fp7U3za0t6Pm5NinV6aufSXfcYgSykC/eFFUKchTpFboMypulaikPwWXP4YBCUM8hZDkoNw6xFIAROi3wSp6Up03XD+Wk+3ceXw5WBnjHGws9NvX11z26kL1+f2L58+IPDSazN+9eg4tL97uDPRrHMIlB9NzxSPO81fVAMkh+BSw3BrUYhqBKIShXCkjamWAKlxuNQY3JoF0WfApcTg1hMQFAuiFk+PJuXw5WBnjHGws6/R5a3ajeO22qsA95LdDdcnZy5/8L7iyeNv+tv47T/pWYY2agiUPQyUEwT5bJCaclblmgXSbAi6M1PcGSlqQFRNiFp6ypmSnoamxY/dO1diaSZENT03PP1zHLwc7IwxDnb2NdU214vbDtVf8s7qg7cPGL2gv/fp4XN/3iOMS7sG4fIFQdlhZ1UuHz8i9GTjSL8MF8ZxsDPGONjZaXWgviFrzd6qK6d+sDL3r8mF5b9/ehJ+dFcMbZR0f3VfPH0FLcVBzMHOGONgZ2dXrQh8fjLagaqarOU7DlyTmrOp193FUyf9sreNi/RCSAHnTJw8QWfmuD/dqrXLcFCXcm4Uw8HOGONgZy1ji71B3F1Z2e7jT/ZcY0xZ27frMxXTruk6CO3loRB8BkgpB6mvpD/owxD1KEQ9CkGPOgVwfgOCzgHIwc4Y42BnZ9WaPVVXvr58u/LSG+v7e154HT++MwTJE4XLY8KtpSDISVCeDVKGQ+jyCiTZwgVqDFl6HJlKDBmygQzZgJQXhOAJOcVxHIQc7IwxDnb2Lamvdq/avv+qSct2+PqPXTwg5x+vLv6eFgJll6THl5aB1LhT+KbHnQ91zblDLviCkBQTGVocLs2pVCc5BlGzIWlxCCpfO+NgZ4xxsLNvxdq9TVdOXbo9t2TMrCezn5mAi+9MOA1ickIg2blSRn4bVGBB0CMOvwFBj4C0CEiPgJQQSDPSBXKG0xhGT/9zus2rdQ52xhgHOzuphip3U+OJ27N+vgDu8z+/48Chi99avLbzC68sGHjHv95YdlE3G5Qfca6j+b7OvHAObg52DnbGONjZt3s1raoxa96SzTe/9Nri/gUDJs24qnshMjr/C9TxBVBeEcRAHIIe5+p1xsHOGONgb6mqAPecDZW3Dntj8dNdX54w7bqeJig/BMoudn7U4xADSQhKHCTbzvxyDivGwc4Y42A/i5o+v92+aW/tZak35ve6f8j4cTf2KUMbPQzKi4CUUlBghDPuVCsD+cuckaeKDUGLQ+CzcMbBzhjjYG8ZdjWg/ZuL1uf3NSYnb35sxNYfBoogZA8C5aW7wKkJUKDcWaGnK9cF1YKo2ekfLQg8DY1xsDPGONjP7lb7+9vqb3lm9MKiP/YbsfyqHkG45SJQThQkJ0BqubNKV0yQGoSgFUPwReBSY8jQbbg1Gy7VgqSYcKmGM3yFMQ52xhgH+7er8nBD5sQ5HysPDh416td/jqKNWgzyhkFKIn1WboLUpNMVTkk5RXGBCCgQhKDaELU4RMWCIJsQZBOibEKUDS6cYxzsjDEO9tOtBs3iF4X54s0HbxhcMeu5/3qoov67dyYgKRGnN7s3kr5yZqd/NI+7hnZkJKrTUOboz6kxEI82ZRzsjDEO9jOtRjz+/vn2yuqLX1n4SZcuL78x7Sd3R5HpHQbyREG+dHBrx3V1U0xedTMOdsYYB3tLU11f716wad9Nxa8v6XfHE8llF+S/7KzK/aNA2min+E2zjuKAYRzsjDEO9hZow4HDl7/60bbAX1OLyq/oGYeYNxAkh52KdjUBUhIQ/UkIusXBzjjYGWMc7N+22sZm8VR+38ptlVcnZq1+UBkwZU67QBCUPQSkpFu7BspAShyiZsGtRpDhK4agfnq7nUOecbAzxjjYz3qRHMRF63fdOGD8kv7/88SYzZKvBJRbAlIsiFoMohqBoBkQvOnJaQVJSGoM5Pv8OToHO+NgZ4xxsJ8l++sasmYsWdmhT+n7pb9+pAKUNwiUF3Y6wmkpiLIJl25D9KcgqiZcWhQXBGIQfWGIcgyClnSq2Y8L9yOhLuo2hzvjYGeMcbCfMc3HJrDtBtqNXbSt25+Gvj7xuvuKQXlDQflhkBYH+ZMgPeFsvcuG07NdTx1dvbs0A4IchqRZEDTbuc52gup3DnX2rZMTEPLDiE5dzsHOGAf7uae+7vN927dWN1xSPntZz4Ihr834QXcDlDvMWaF/6g65edzd8+N/jkejspYe7HFQfgjRyR9zsDPGwX5u21vX1LZo6qp+ev9xs37UdQiEvEGgnGEQvDFIXUZB0BN855ydE1vx5AnDnLK875HXfkNdlZs/AxjjYD9nbD6My6JvrXi08z9GLG3f1QblF4FyQxD85XDdORqiPhyCLwGBR6SyVs8EaaUQvBHEpq7sc+Q90NxYK/JnAWMc7K3eruqm9vEpH/Tu9I/ypRd1iYBygiCPDSEwwhnGkm9BkONw+RPIVKIQFIODgZ0TwU75IRiTP+7LH4KMcbCfE3ZWNbRPTV/Rq/Pfy5Z+Vy8EySGnN7sch6jEIWopiHoKohaHoBhwK0FcoAyFqET53JydE8VzlFsC47iteMYYB3vLvm/+BU1mth6qvcSesap33tMVi74fKATJEZDPBvkskN+GWzPQRjMhKqZTKKdZEHQTLn8YGVoJBJVX7Owc4ItD9IRR+s6GXvwhyBgHe+ssiqutb/v6oo3Kn/5dOvH7BUUgnwHyRp0xqYEy59qaFoWoBCH5jruiptsg3QLpBkiLnKDqnbHWuGK34VYtTFi8U+MPQcY42FuM5uaDmY1NJy/4OXC4OWvSyh0+/7Aps74TKAHlG85VH65sZ+c1A+Q18cG6HTfyhyBjHOwtVlNd9aeu67y/ce8tj8Xm2Fd1t0DZRSAlCupqgvwc6oyDnYOdMQ72lr16P3ww8+hwlu37r/7n68uLbuxbtkvsNACix4TLX+FMWiuIgfyxzzSaYYyDnTHGwd7ibK/Fxdbbq/t0fLJsGd0xDJRTAlJCIH8Qgh6BqMYg+mwIMle1Mw52DnbGONhbnoZjq/Spy7bm3j1kyqSLA2FQTgkkJQFRiYGUKAQtAskfQYYWRhtfEJIc5Q92xsHOwc4YB3tLtHzP4Wv6jZgX/s+7Q03UcSAoPwZBL4dLKYZLNyHpKQhyCoIcR4YWxQXqUEhqiO+iMw52DnbGONhbkqp6uEtnrejVud+IpS7PEFB2CUgvBSkmBDkIlxyCpFkQtRRISYLUFEQ9CVGzIHBFPONg52BnjIO95Zi7tvKWe4fMnPjDbjYoezDIF3VGqGpxkGpAUKOQdBuCaqVnoKenrGk2SI3zap0xDnbGONjP7lm6Mx9996H6doPGf/Dcrx+M76PsoSCPAVLtdFAfP0KVg5sxDnbGONjPutpGiLVN+FTDmcZ6J9SXbK26vsegyePbKUFQfjFI5Z7tjHGwM8Za3Yp9/6G6LGP6KlzzQAJCrgnSyiEETIgFUb6LzhgHO2OsJQd7c2O1+8i2OwBasL3qprsHvTrpu6ozSpXUFAQ9BkkugaiEecXOGAc7Y6ylBntz44Gsxrp9bQHQwQZkjp+9JnDD4xV7yFMEyjUgqTYkvQTuQBAuLQ5RSfJAFsY42BljLTHYG+ur3Wg+kAWA1lYdwlMVi/HjgAnKt0BqEpI/BkkrgVsLw6VZEGQbxN3j2NditvIvhJ/97z/Z/5+T/ZoB8saweN2OG/hDkDEO9jNm1uaDt3cZMhFuXxEoPwlSyp0PJr3EGZmq2BCUUoiqBUHh7nHsq7LT43nTVx7TNRqCFoOgWemjHQukWRDUGATFhKgYEFUDohpL/5yDjqdazp+ppynpQNVjIL8FUTMhqEaa+ZnANSHqFgQt/Wdp6WuZigVSbUiqBVGJQZBNCEoMohqHoCVAig1S4s78AyWe/nsLgmod+29UE+lfT/95iumMK/ZEQHlBUHYx5qzdfit/CDLGwX56tt6bakU0Oqv06sZmt/nuur7XPDy6hnKHQvDbEDSDR6uy07zSjYP8ZSB/KUi1ISgGBM2EqBsQ1Wg68G0ImgVJMSHJEbjkEFxyCVxK1AlYxXTIJgTZSDMhaDZE3YYYiENUInAFTIgBA+SPQNKjkDQDomZA1A2QZoJ0J/gFzYBLi0JUoiBf2Pk5Pe6EtBZHhmbDrdlwqXGIWgKSmoQgJ0G+OMgTB3lLQXIKlB8DZYdAOUFnkmHHoaAOYVCHEOgPJaCOQYiKhe90TeHCQAKX3l2K6+6PYdbmXbfzhyBjHOxf4x76CWamNzlFclsrGy8ZNOb9536svQj64/OQAhYk3YKoGRxG7DSyQHIUohyGS4vCrUYgqSG41QhcShCCt9j5femVMmk2RM0JeecLppEO4+MZDi0CUS6BJIcg+YJw+SJoo8fh8poQ86MQlDgoUArS002U/HGQ33LGB/stkDcCUgyQHAHll4B8IVBeMSh3mNNR8Yg7hoL+MBjUuQgZBSl8t1sMl/4pip/1qcAv+o7A9Y+OwP89OwGdXp6K/IFTFtw79K2Jvc1ZFX3td5JPJOcY/ccuGRCeuvbx8NT1j4+Zt7Xbm4s25++qqWv/2X4RjDEO9q9t9a66q+4tmY3v5b0EKX8oJH8S5IvBrcchySHnw44r39lpCnZRiSBDLkaGGkSGEoSkhiBp6dW0GoWQ3nIXj2zLK84WuxAohaDbIM2AoDsrfEGLQtDCIC0IQYtA8JeCAsNBailIKQUpw0E5CQjKSJA36WyJe01QbjEotxDUoT/oj8+DOg8E/XEgJCWM73ZP4JK7bVzb9xX89smJuLnfRAQGv4V7hr416cHIrFF/L3vf+PfIeUMGjf/wOXP6hr7l76zs+er7ywJvfbSx8zsrt9w+d92OW1bsrrp6U3XjZdtrmi7mDzfGONjPrKZasanp2DS2+Zuqb/b+Y9RcKS8IygtD0sshBUZCUEshKTG4PMUQFF61s9NH0CxIWix95m1CUGMgLQZBTW/B+4rh0oLI8Btw6wZcahQkhyHIYZCSAKnlIK3UCWmfBcqPgvJCDk/YWXlnDwV1GgzKKQTlDMJ37orjp/cl8Ou+Ffjfp15F9vOvo3voHTwUf7/iiZHzjQGvL+w/9PWFT5vTl/UdNXdd93ELNnWZtWrv7Qs3V9/04ZaaG3bW1Lfff7g+67QfhdVXu9FcIzY11vIqnTEO9m/C+RAZtWB9998+UraLsgeBlAQEfzlIKwNp5SB/CpJqIks3IGocRuw00myQml4960mQP3FcoVq6AE6xnAIzX7rGwxcF5ZWAciKg7CioQxHoj0Phygnih3eV47qHJ+P2f76NwEvj0DM4BY+VzbZfnvTB89a7y/ok5nz84JgP1nWb+fEnHRat3Xnjsk/2X7t+V+0Vew+hbXUj3F/7fdRYK6L+2Jfk06G6Ge5aQKxpauagZ4yD/asZPX9z96vvCx6mvEJQIJnebk9/6Opxp3BOiUDyFacriHkrnn0DSswJaMVMzxWIO1vichQkByF6CpHhHYI2ciHIFwTlF8HtHYaLu0Twi94V+P2zk+EZMgd9rTkYPGbec9Zbq/qMn7cuMHXxxtz3Vu689cNNVTes2l571ZZ9VZfuqa5rV9uIUwvG5hoRTdVu/gBijLW+YG/YnwXUiNWAe8irC575r3sj9ZQ3GNS1DKLfglsLwqVHIGphkBICaWEIegSkhrgBDfviQrijjgtv2Ty22j6ebB7362FkaBH88J4Ebnh0DHL7T8GfIvPwZMXHhjl1Zd9x8zd3mbV6++2LN+y6YfWWfVd9suvgpTsO1Fy891Bd25rmE61mueCMMXYOBvuXrVIONDZl9X9tCS7uZoE8JkhNQFINZCglzh3io/d6DedHzTn75ABr2UQ5DlGOO3etVds5OtEMkBJ2qsb9CZBugzTn191yDBkeExmeKDK0MDL0CDK1KFy+CESfgQzFRoYch1uNQZQjEHxhkC8MQYk6tySUcHrs7kjnmle+7Vz7UuLp+9sGXH4TFxRYuPiuGH7+YCk6PPMaekbnoN/Y1bCmLu8za8Gy2z/asOvadTsqr9i8p/qynQfr2u8/1JxVXQ9ePTPGONhPxYGG5qzBr7z/3OVdBoM8IVBBBUhNIEON4AI1zAHZqs+s4yDNTn85izn3s/0RkB6Gyx+D2x+HeFzhmqimG6jIBgQtDCFgOP0KVMO5AqbZIJ8J8pU5VeVamVOk5ok4AS+HcYEWwvfVQbisyzBc/acgbuptIf+5V/EXe175CxPXDxy7YEe3d1ZX3r5sR9W1m/dXX7anqrZdTW0dAFDDYS4UY4xxsJ+i/Ses2q1qaHS/MH7JwB91LQRlvwSpSwqkl0JQbEhyBBlqhMOxNdOjoC4mhK4xiAUmBC0CkktASglcShBuNQxJjTqhr9hOZbm/DOSvAOmvOCtvX8I5+/YWgzq/AFJeRtadCbS9swzfvyeJH99j4vqHLOT+e/yiXrE5YweMX9L/lZlLury3cuetGyoPXb679lC7/YcPZ1U1NJx4xd1cK6Kpyo2mykx+szPGONhPVXOV+9g1Guev99Y1tX3mlXlF37srBvJFIXUtg6AnIagJuPwpiL50ty0OyFYc7GGQHgLJwfSK2gTJFgRfAoIec1bvSsRpvCKbTtFaTgTUsQSUHcSFfhvf62Ljpz1S+NWDpfjfR8qg9H9zTr/4zHDotYWPT166M3/F7oard9c1tKtpajj5arupyo2mKt5OZ4yx07kV39hU5Qaq3DX1jeILYxYMbNcl7IxbDVSA9DIIWhLuLuWQNBui14BLi3M4tuYzdjWe7lOeAqnDIWgjQfIoUN5IkCcB8gRBOcNAnmH4btcQrrrfxo19y3DrY6Xru/3zlanPJRcOib+1sfe0j/d3XnMAV+4F2lbjJGfdzVyoxhhj3/oZe01Ds1g08QP8MFDonI/6y50Pf9mC5E86Xb28BkQ1DlFNcEC25mtknrizle61QB2LQX8YDCk3iO91K8d/9RqN/3nsVXhfemPug8bbo14av6D/2EWbun24t+GGnUB7fuMxxlgrCfbUjNW9fnynCcqLgrokICkhZKphuJUwJF/E2YJX45C0UpDMwd4yhqOcyohQCyTHQPkGKDvsbKfnFKJd1xh+2acCdzw7btndw16b9NyIGUNi05b2mbVy9+2bD+CyGuDUV9kN1W408t1uxhg7+8He5FQbv7J4Z5dreyWqKM+ApJVD0G24lRDaaGFkqM6ZuqTZx7ZwVZuD9XS0SlXto3e6Bc06StRt56xbjTpn3aoJ8ttOBboed/qgq3EnsOUjY02PjDQ1nR2XPAvUqQh0xyBkacW45i+l6PTC60vvjsye1H/UnAHx6St6z1yzv8PmQ7iM30yMMdbKgr2msVH8ohXY1FW7cm94bOQeumMgJJ+BTNWCW0lAUDi8z/xZtw1BTq+o0zPCBd12BpooBiQtfe1Mi4H8MZA/6lS0B6JOG1+51KlYV2JOr/OOL0HwDsNlPcrwf/+YAv+w92c9UTHXiL39YZ9ZKzbdvn7fwSv4jcMYY+dEsNefMNRX76u7Sn/h1VlCp/4gTwSibsOtxyB+aiuXnbEubN4wXLKBzEACbs2CqJrppj9RZ1SpYjoDdZT0nXE5AvKGHPkR0B2FEHKG4Kc9LGT/6zU8kng/GXx7+ZNvLNnkW7ll/9V7D6Mtv1EYY+xc3opvrHLj8IEsALT7UFO73tbciu/Iw5yt24LhEANxCH7DCRYO9jPOpRpwqwZc3hAkTwlENQqXZkBQoyAtAvKHnatpWgTkKQZ1KsRFcgy/uP81aP3fnP1U+YJw4r2VD05fvqXj2j21V9Y2fXZXpkbks2/GGDuXg73BmSxVA4jGtBV9L1QNp1hOrQB1qQDlFcEViELSDWc6Fofvmd2K1xIQtBRITUAMpCAVJEG+sNP0RTVAuRG08YZw1X1J6AOmznrptRX9X126I/D+xspbNu2pPfHZeBNfLWOMsfOueO61j3Zqv/qz6bT89A8HdRkFUuOQ5BBccihd1MVn7Ge8ql0rB+kjQXIc5DFAcggZSjG+f7eJ/+v3Gv6Z/LBo5Nyd9yz8ZN9NWyoPX8ovesYY42D//Ln6/vqrtJffnE05hSAl6Az70ONwa1FkaWFI3jBIHwHSU7wdf9qvpVlOoZvPdILcW4ILtRJcEhiK3zxooFdo2lhz5oa+MzYc6LB2f/WVNfV1vPpm7DTYX30oa1/VIa45YedmsA8Y817/tnIhyGdD9Jc47UPVMDLVENoqQbjlGEgZ4VRbc7Afmzl/JJSPFLgp5mdGkX72r4/8fQIkpwei5DktXC8osPG97mXo8HjZ8gGj5vWfvuZAx01VtZfV1KfbrzZXuQEefMLY6Wm+1STO+/Djm99+d37HDdv3Xl5Ze4jnD7BzJ9hnrz942/f/lAIpqXTl+2fvVR8fSBzoTqhboMBwkJqE4DPgksNwyUFIcgiiYjpT0hQL5DMhaAkI/kR6hrjhDFDJS0HwJtDOb+CX90XQ7fmKqebrH/b9cFvNDdV1DVzYxti3ZG/14baLV2684e33F3f8eMO2a3YcqL6YHxfWqoO96nCDu2v/MdMEbzDdKtbg0D5FkhyF4Is4VeyaAUmJwKWZEBUDohyFlJ5BLiiG02c9eyhINtHunlL8X58Y7it6Y7w9c13vJTvrrj/Y3MSrBcbOon2H69u+MXeVb8J7S7WFa7betGXXHq5fYa0z2OMz1vb+jjIElFsESechLqfcHU6L4QItBJdcDFE1kBEohehPpbfnYyA93SAmpxDUeQDaa4Pxu4eT2+8Nz5gYnL7hyW01DZd8bkBK4/4sNO3l8z7Gzua5e11D1ruL1tz2+oy5ypwly2/9aM0n1+6va8zix4a1imDfcuDQpf/3xKiNpMQhqCbcahSCnuDgPsXiN8EXdFboahyklYIKRoAUC5TvrM5dSgTX9hmDLoNenRacOP/J1TsOX8UvUMZahwN1TVlT56/ONcbP6ZuY8dGD7y5dcVvlIT6HZy082F8cPX9AGzkC0ivgDsQheYud818O7lNctTvFc4JsOdcAc4eCOryAK+5LQR3wxuyXR895/t2Nh2+rPb5tb31lJhoO8Ld/xlqgpuZjjZuONHY60ISsN95b5us//N0Bz49cMHDE9Pk9th6svYQfL9bign3l7pqrb3p4+Hby2SCtFC7FQKZmQpS54v0rFdB5g6DsAbhYHYTfP5pY82RypjH+w+2B3fVoxy9Gxs4d22pxiT1lae8+xa+V9i5+vSL42vwnV28/yLtwrOUEe9FrC/q10S2QWgZJiSJDNeFSYhDPx+I57bMjTWNfcE3NPPZznigopwjt745DH/zWLGPah32XfbL/Wn4BMnZu+6Sy4dLI5CWPdhs8Zar3X2Pn9hsxNzxnU82t/Niwsxrsy/fhmtyXpi6ivGKQkoDoi8EdSEKQoxDV8HkV6m4tDjHPhKSmQEoSgtdGhhZHhi+MNnIQbZQQJNlw7p37S0HZRaCcIfhln7F4NvHW0EkLN/o+qQZXzzJ2ntmw//Dl8RlLe3d7cdzU/+5tbb3XmDNx3JKdXT5XFMvYGQ329PlRyazNT7a70wLlDIKgxUFKKSiQgqCEIWqh8yrYM/0JuOUYJF8MgmLBpVqQVBOSHIVLCcPlj4HUJKijiYx8A3948tVVQyd+9PSCTftuqj9UxW9gxs5HTccaRa3bU3nF4HHzn/vdo6O2X3mvgc7/fn1p6O0Nj2891OycwzcfyGpqqsxsbuLmUuwMrdhrGiDePeyNSfTHf0PylUDyJ0BqCqTFnWD3R8+zArgoXAEDoh6C6A9D0MMgNQIKWE77XDkBUQ7jf58YtzEyY92ja3ZVX8kvMsbYZ63bsf+KoZM+evq6PiMqL9QjuPlvY7a+OGLegHU7D1zBjw87o8E+Z/WWW6/vbYHyC5EZsCBoTntTQbNBmgHSzrPpbUoY5CkBBRKgQNwJdDUCyh+MtkohfE9PmDty8fZ7Vu2v5iIZxtiXWrWr+qqnRywIXt7dQqYngsu7j8IDJfPGTl55KH9XY3N7fozYaQ/2wonznsnwDAKpEYhqFIISg0tPQNRtCJozSex824qX1CRIrwB5S0FeE+2UQuT+Y8yiCYu2aweqDvHVNMbYV7Z40/4bHrDmjG17VxIkl6NtlwTyB7y+oHTBxl6bag5dxo8ROy3Bvq+xue1dw2ZNpk5DQH4bpBhwqc65sqgaEPwmSD+/quIFjwnKN0F5UbRVIvi/R0dvNN9a23dLVcOnC+Kaqtxo4jN1xtipO9jYlPnu+m236UPemvXdrgYorxAuTyF+93DZ9kGvfvDcss17r62tb/z02XvdwUzU82cNO8Vgn7dq+82/6j0K5LNBXZIQ/XFIqgm3YsClGCDNgBA41xrUWCe4tnacfBPkCeI3D5p7ho2d9/QnB04837y5vtrdzMHOGDuJ5sYasbmh5nNFcrWNdeLEhZsUz7/GL8jwRUG5UQh5g/Gf9wzFI4n3km8s3+nbcKD2cn4M2VcO9tSUD3tdKAfTxXIWBN2GKBtwqwbcWgwkh0Fa62tQI6gmRM2EoH365xwGBDUCUiLO/zctPWbVEwV1CuHKngn0sueM/WBn441HKljRXJnZxBWsjLFvVDl/3EIgfSNpVz3aF037pN+Nj7+2K1M1QXkGKKcIPwwMQfdh0yYPf29jj9XbK7meh51CsDfvaQeAnhq5OEwdi0DauTXsRdKicGsRiFr6GEExISgGJCUKSS6Cyz8YohZ0BrP4y0GdSnCRrxgdnpqwfNa8j27nFw1j7Nu0emfVVc+MfK/ouofLIMphUK4F8lkQNQM3P/Xq1sLJy55ZvG7bDZ/95xqbD2Ye3/aWndcr9gNZe2rq2t097J1JlFMCOsemuImaAUEOg+QIRNWAqFvpKWtxkGpC8pfA1aUc5B0B6hzHf/UcXv/C6HkDNx86zAUsjLGzohYQ39tUc+ujifft/+yRbJI693dGO6sWyFuE3zxk7Hl55Ozn5y3ffPP+Jny6iLfhYCYO7+G21ef7VvySjXuu/99HR4E8kXMu2Ek1IWgmJM2EpBmQ/Hb6+loZKFABQR4ByrcheYvR6fmJS19bslPjFwpjrKV4+8NPOt415K3JbQMJUHYEgj8F8oRB2cPwi/ttPBidNWrM/FXdPqlpPFYDdIKzfHaeBfuUDzfm/uQuE+Q7B4e8KCZE3YaoxUDeMEg2IOi28wVGLgN1SuJHd1l4snSGsfZAFTeYYYy1DPUHM490sdtahUuMt9b1ve3v49dQThEoPwEqGOf02ej0En54VwTawDdnmzOW912zt+Hzn2N1lZkc9udZsFe8v+qeC3whZ164apxbVe++CAQ1XRinxiD5bYhqBJRXCCn3ZdzYO4HEexserG5M93Bu4hc/Y6xlWrZ5/7X9KpaGr3pwdD11GgKSS5xBVZ4YKCeMC/UQOj09eumQiYueWbnr8NXHVvC1Ihq56Pe8CvbQzBWPU6dikByHoJ1jq3Y5DFE1QP4kqKAUghoDZb+E7ysDofcfN2vOxm23VvFgBsZYi62g/3xB3MxVOzvcX/LWuCx/EJQ/DGJ+GKJig/JDoDsG4AI9iN8+Ur7rHyPeDc7f3ngzP47nYbD3f2PFALq9EKJsQ9LNc64qXtJMkJ50qt7zw7hIHYoHjdmjPt5bcw2/KBhjrdG+mtq2ZQs39vz9EyPXSNlDQL5SkD4GpJc57bCzh8KlmrjuL6nKPiXjSt9duvE2ftzOo2DvN2JhmDoOSd/tbo0z003nGpsWh6jakBQTohyCIBfB5TcgqkkI/tEgj42L/UPx3Oj3h+yoqruYXxCMsdZu7Y7KK/89auGQ/3qgFOQJgfRSUNeRIL8F0iIgOQbRZ+On91fg3uLpEycs3KhVNzW5T1aRz4/rORDsj8Vn29R5iHNW0+pCPeYMaNGdDnJOf3sLkmZA0CIQFAOimgLlx3CRGsbfR39gbDncwDPSGWPnjKqGJvfba/Z07D5s6uT22hBQ7jBIBVG49CIIvjDIa4HyDbg9RfjRXUXI+/fYReMW7+6y9XDTJUf/nEa+A39uBbs926bsoc43PMVsdQVygp50iuM0ExSw0yEfA6kJZ7xqbhDf14rRr3xheMuhZg51xtg5aXtl/cXJGase7PB4Yrnb8zIovwgX6BG01Qy4vUEISgykxEG+GH54ZwnUFyfOLpu9oeeWynS77KYaEfWVmfxYngPB/kRyjkF5xU4oyq3vjF1UbacVrN8CFdhOwOtJkH8EKD+C9gUhPF2xCLsONfFYRMbYuem4FfeKnTVXP5ycV3rJn0pB+UWg7GKQNwYpMByCXuas4POGQvAMRVu9GLf/YxyMmeux6UA1N+Y6V4L976VzDcoZ5mxpK60v2CUl5txT99sg3QTpMUiBOMhrIMszEE9WLMTWOsB58deIaOBrH4yxc1tNc7M4bvH2Lvn/mrggy2+C8iyQnILoiyHTF4WgWCAt5RTbyQYy5EL8/u8j1kTeW//ohr3Vnx46c7jKjcN8FbhVBfs/hi8IHhnXKrTCBjTkKYHktyAEUumt+RgofzAycl7GX6PTsaW6DgCosb7a3cyhzhg7j3xShUufG798yM96JZsovwTkMSApSQj+CpBWCkG1IfgtkC8MyisGqTH88R+vLjffWtF3+a5qvjnUWoP9xdeWD6DsoSA9BkGzWlmwGxCVYogB59unqKYgqSaow7Po8Nyry1fvqb0KADU0c6Azxs4z9cc+995evr3jXYVvTm6nR0DeBNx+27kK7AmD5JgzAEyOObM0vDG4PUF0eGrs8tTbS3pt2rmHt+hbW7Ab01f0pc6FzhOr2a1uLKtLD8KlxyDKSUhKKShnCK7vGaycsmZnrlMQwqHOGDvXz9hP9jnnnL/vPIz24SkrH7/lIXMz3TEIgi8KyZ8E6QkIug1BCUGSiyAUjABpw0GdB+Mi30vwPlMxNzL1o0dX7K66mh/rVhLsY+es6JbhKwYFRoD8iVZ2zm5CkoPIUG1I2nCQ18R3tEEYNvnDp/kJZ4yxz/tw5ZobAuE5My7yl4A6F4HkJAQtBVEzISpFELxBSLIJUm1Q+rqwqBQh+9mRi+PTP+y9YX/9sTP4xhoRjXz+3uKCfdqyLZ1/0jMJ0pxvbq0p2AUtBrcWgeCNg3zDQblD4S+cMGtjdcPl/IQzxtiJ7W6sa2dOXdz3xgfLdlGHCMg32lmlaxGIvgjcHgNifhSixwbpw0FKEnTHQLT1DMQf/zVh+aA3lz23rrLhCn4sW2iwf/hJ5Q23PjYC1GmYE+5qKwt2vwnylILykrjiTyYmfrRF4SebMcZOpsoNgN5bv/fWu4ZNn3yhGgTlmyBtJNrcOQIuJQzBMxQu3XAagekJUKAUJEdB2YPRtiCKPzz72qqiKSv7bagCL6RaWrDvrm1qd++giRPpjkGgwPBWtxUv+C2QOhwZso2HrVmltY3NvC3EGGOnaFdNQ/uiKYv7/fKhBCgnBMoPQQoYEAoiEJUiuP1hSP4ISI2A/DFIesQJ+M7D0LbARMdnxiwLTVz0+I5DDRef+rk/O6PBDoBeKp/VnzoPcu40qq3sLrueAOWGcO19qap5m2rTk4y4exJjjJ3yvfemJvGdzXtuv7t40qR2aiEoNwjyGRDS8zckbxBun4EM3YagRCBoTvtuyhkMuuN5XNotjP/9+5iNo2ev6l7ZhE99/jbyHfizE+xj3v6wW3utBORLtLJe8U5xhzuvEH2Dk5NH/z81c99jxtj5ranuq6+Y91Ufals8eXm/6/+cqqQOA5xZ73ISbtXGBVoSoteEWJCCqyABwRdChmbAFUiPjM01cOldYegDJswaOW/LPbvqm7nb59kM9nkrPrn52odfAXnjEFrNVrzpXNFTy/Cf91qYtnhnZ36SGWPsa3wJ+Eyvj4kfb1e8AyejTUEU5A2nrxfHQLIBSQlB0GyQXgpBT7epVS2ImgXyxkFqDD/oUoju/UdMfmfZltv58T1Lwb65tuky3+C359LtLyFDizlPkGw44Skbzug/Ld4CV+xxkMdEx0eNZbVNPG6QMca+seaDmUCtuK228ZIXxrw/8Kfdi0HZQ0FKGUgfDkEzIPrjEPQ4BMWCS7WQqRrI9AWRoUYhaCYoPwwhvwQ/uddCr9CMsW+v3NexprGeP6O/vWB3zj/+NW7h0Da+IEg5MgzGhMtvwaXFIKg2SG6BXekUC+4upXgqMSPMTzBjjJ1eVWh2v/bhDu3//W3EeldeEchrgwrKIWgWBDkKyi+B6ItCVCyIqg2XFoWg26CC4U4v+pxitFML8ZuHLPQrfTf80Y7Ka2t45vu3EOwNB7IA0JQlG3OveqAMlB8D6aUg1YJbM9HGH4Ok2yC5BXal80Tww/vK8frH+/mKG2OMnSYHG5s/VQC3bFf9tQ9FZ1ZcUhACZQedyZr+OEi1IBWUQVATEI/UaMkxkD8FurPCCXdP2JE7BNf/OYFhU1Y+vXbXwSu/6N9d28A3m755sNc7wb63uq6t/OKkOdSxGELXkSA5CZcvigv0KETVSJ9nt7Bgzw/hur+UYn0tuFECY4ydRs111W4cPnbDaF99c9vwG0sf//mDycNi7kBQXghClzEQuo6GkG8iQzWdsJeN9Lm86aze/XEn6P1loPwoxOyB+P2jw9dUvLPinu37Dx27Ild3IAv1B/lG0+k6Yz9iwIQP+2d4hzrb8UoZXN4YMuUQBDUM0lvYVrwSA3kj8P37lblVaOIqeMYYO03qD33xzaK3V+7tqL7wKtxyEchjgwIVEDQbbu9QiKpzjCvKIbjUEmSqQbiUEFxqGKIagxAY7gR85yJc6B2Mrv3HT5u2eEPn2ob09vzhykw08PW40xrs72+qvOV/HisFZQ8DqRVwKaXI8IUhaSGQFm1Zwe4z4NJjeCr1nnO+3lzF4c4YY2dKfZX7yNHt6j11Vz1W+q79H92CoOzBEOQIMrUoRMUAaSYk3YRLjyJDC8OtBJGhBuFSIyDVAukpUEEFSLFAd/wbv7i7EI+aM/Heqj238uN8BoK9thniw9E3SzO9RSB5FFzKCGT4IpDUIEgPt7hgv6BLAsE3Vj7pdDnan8VPMmOMnWHpjnJVTc3u0hkre117X7iKOheC9FHOka2ebhymJ0FaAqTGnR/1GAQtClLTN678lvN7PUFQ7jD8qk/5vqfHLAwu2V55PT/OpzHYAdDkRevzr7wvAcq2IQRGQvIE4VKCIM1oWcHuNXBRtxTeWLTZd6QIsLmBG9Mwxti36a1lOzsr/35jTkb2UKfJmZZAht8GyRGQbEMKlEOUDYi+MEgzQUoUJIecv/anQ99fCuo8FBn5hfj9k6PW2DPX9d5Wh0v48T1NwQ6A7ix+e6oox0BqCpIWg6REIKhWiwv273VP4f2VW29xvkXWiGjkYGeMsW/bB1sP3fh3a6bRLmCmj0lN5767YkDSTGTKQUi+EmcrXo0d92PsaBtzSbdAeUFQx8G4uGsEfxo2ZeLbS7d35Mf3NAX7xGX7lZ/enwDlFEMsKHe2UuSWt2Jv3z2FWR+nOxs188ABxhj7tjQ11YgNDcdqm/bVo+2wKaufvvyuYlDOUFBBGUTdglsugSSHIflPfrNKUCIQu6ZAmgXqOBhCpxdxw4OpPU8O/8hYvaPmKn7Mv2Gw1zZBvG/wK+Pd+YOcO+3+shYa7KWYtWLb7fzkMsZYyzB23uZuv/lrag95gxD8CYiqCUGLQ1C/5Mq0bkLokkw3Q0tfj8spRqYngv/tm9pY/s7qnlXNcL5INPFC7isHOwCa9fG226/tGaoiOQrSUhADqRYX7N/tXoq3l+/grRrGGGtB5m3ad3Pe8+MXkTcI8tkQtThc/sQXjgUXNAuZgTgEbwSk2k7hnWJB8MedefCeIL6rl6DgxbEz5q3dczM/xl8z2AHQk/Y04wLfQOfOuJ5sccHerlsS4+av78JPLmOMtRDpY9HVe2uvuqtk1mSXXAzyFEHwlTjb7CfsS2JC8oRxoT+ODN2CqEYg6VEIahCCFkyfyadAnhL87E+RpgHjl/bfUlN/qfPvPL9X71/5H1i8ueqG2x6x1pAv6DyoLeq6m4msLjaMNxb05d7DjDHW8uyoqb/432M+wA/uLAHlDnPurn/RGbvmTJATfCEIcghufwRuv+H8vTcMQbYgFFSAfDG4lCL4+r82d+zCT7rtb2jK4mD/ioonftjvO3oxKFB+tHqRVAuCYkJQzfSY17NQMS+byNRNPFc2E9XNzVwNzxhjLeq+e7UbTdXuGkAsentjv/+4xwZ5ounteOvT3UzlGEi3nTa0WgyiZkJUDLhUG5Iah0s2IciR9H34pLM9nzsQl3QLou+IxclNu6ov42A/Bc11NSJQK+6uaWhXMOj1GeQdCkkNgzQbFCiDS46ijRqCW4lA0FLOuci32lLWBPlMaC/PgPMi4h7DjDHWUk1buqXzLx8dXUX5xSAlDuqSgug3IeomRK/lTBU97gxe0CwImgVRtyGcaAtfcXZuyRvGbx8evct+Z2vv/Ycaso72NWk6P1rTfu2zkvEf7Qr87H4DJJdA8Cec1bseR6YWQaZuONfh1LMwJCYvjN/1HYWD9Y2ZXCXJGGMt2+y122/7Q78xqyg/DPJacGkGMrQgMvzRzxXWfWmwH7faF/NK8INAER6OvF26ZMv+63nFfgoONjdnvjjugwFZaqHTTUhNQtRTkDQDLiUMQTlL5+x5IVze3cbc9dW38JuGMcZavqWf7L9e7/8aXL4wyJMAyRGI8qB0q9nPB/tJQ12LgRQLoi8BQbZAuYX470dGbo3PXt/7QB2+8Oy9sqE2swqN7vM22JvTk3Y+qWq8tMvgadOo478h6HEIgZRzxu4tce4pnpUCuijaFth4efxHz/MbhjHGWrh02+8te6suvTf87kRSUiClDKRF0hlifbVgVy3nXF6JQVASIP9wUH4U3/OXoHd4WsWCzdU3fSrPGqvdOMe26L/5Nsq6ytt++2B4F2UPBPkTIN12Chx0++y0nFViELwG1JffnM1vGsYYa/maGp1udZsqmy67N/zORJcvDJJLnSY2pxTmnw52UYkiUx4GSTVBcgJUMBKUb0DIfhm/e/SV7RXvfnxPNY4rsG6ocjfXnTvTQE/LH5J6Z2WvHwSKQHIUYiAJUbMh6vGzd+0tJ4Jf/HVMzcqdVVfzm4YxxlqPXQcPt3927NKh3wtEne6mJwp2xfzCxjZOK1oDmUoQmQELkmaBFBuCP+VcretUhB8VDMBTI2aHP9zZcAOfsZ9wG2V/VmVDc+ZfR39QTnlO0wDxyFUFzf72Q12zQHIK3+1aioo35t8D1HABHWOMtQZ1zk2m2maIoYmLHifFBMmxzwS7lQ71Lwp28+iMd0m34FaDaCMXI9NXAtFnOP1XssNoI4fR4e9jl0/84BOFg/2zWyj16fP2Qw2Xdhv0+lTqPBgUGA5Bdbbk3ZoNId+AKNsgLQZBi0DSDAhy+AzcdbcgqAZcShBifhTygNdRiyaxuZGr4xljrLUZNvGjpy/RBoG8UZAeh1stQRu1xLnSpsVPEu6WM/9dMSEoUbiUiDOR9Oh9eRvkiYCyh+G//pSsf3HMkgE7DuFiZ7F6kmvS9fuzzo8V+3EWbKm+6fd/f3UNdS4C6TYEzUSmnkSWPhyiz3bmtweikLQI3Kp5RlbsTrCXgPJC+EnvkZi9vhJf+mQxxhhrmeE+edXT7boYIK8BUQlD8hY5RXXalx33mscV01mfXkgGTJAcgaCnQJ1DuMgzBH8aOH7i9I83n3DOSGN961ocnvY/cNz8T7r8ske0ivKLQAWlEHxxuJQyuLQkSAuD/GEImgnpjDavsUGKCbdchCfL3nGCvW5/Fr9JGGOsdalsRuYLb67Dhf7Qp7ucfoM6LkG3IfhMCP4ypwdLbgnETv3xq4fL9xkzNvb99HFzjYi6A1kAaH8zss7LYAdAZe+t7fmjewxQXjFIK4XgS0FS45D0MAQtCFGzQd4zFewWSC+DqNugnMG44eFyfLCp+kZ+gzDGWCtT7+y0HmgGBk9eg4sCRSBPGKSnTmHFfpJg90YgqTEIgSRIsUEFpU59Vm4xvlsQQb+yd8PbDtVfcl5XxR+9D5gufKgC3M+Onjf0osBQiHIEbi0F0RuDyx+BpIdA3hhIKT3J+cg3KZ6zj82KV0y4fCX4Z/k7RfwmYYyxVqjRqeOqaYI4ZMKSZy7SC0GyDfKXnrQy/mTcSgRuOQJRiToDZbQopAILomaClCjE/CLo/V+bNW9j5afHwbaS++5n7A8+0NCc9Y/RC9E273nQHUOQESiFoIYhyiUQfDZEffiZCfb0VQdJs0BqApQ9DL/5S2rPnHV7b+U3CWOMtcZq+cqjNVIDJy57vq0yBJRT/LVvXmXoBkRfEIIvBElNF9dpYQjyMAhyMcifAuUU49reI6rK3l/fs6a+6fw+Y69tbhJrag9mov5g5or9dVffG5w+0Z1bDEFJQPCbEORiuLVSCL6ydLCbpzXgBSWKCzxD4A6kQFopRNmAO28wnhr+bpjfIIwx1oo0VX+uaczBRmQ+PWJO0J03BOQ5cq36K+aIFgVpUQhqAoKSguC1QIoBIRABqSVO9XwXp2NdO6UQ/xy9sGhHVd3F522wVzc1OU9EvVNssGw/ru1R/P74NrmFIF8EYsCGOxAH+WIgOe5M9FETIMWGqMUhahZExfja5+uiYuBC7yDnLr1eDkFPgLKH4MbeiV3vb9jP/eMZY6y1aHaCvRpI54qzFb6zpql9n+SC0u94h6ZruZIgNQ5RMSCqxud6zH+OP93zRElA0Moh6uXO+Fd/DILfgKiaEOWo09DG53Sx6xF+Z/zinbjhvAz2E/lkf92l9xdPh6vTEOdsJBCCEAjBpQyHIJeB5CTIF4ekJ+BSDbjVCATN/JrX3Uy4lSBENeo82XopBDUC1x3PoIc5c/zew4fbOjsLzUe3Vprr+Z47Y4y1Jntq69rdPXj0pDY5A0C+JMiXglsx4dLDEPToV8iNz6z2NRukJiCqNkTNgls3IXiLQXcMxP/2n79x5pKtHc77YK+rd/rvrjkA9CyaDemOl0E+A2IgDrdmICMQg0uPQlDDILkYgh6B6I9CUL9+sLvUMKSADaGgFKTGIQUsuD2D8cMuIYyZv6kbvykYY6z1W7hl302eZ4YvcOcMBHktCP5ykGZB1IxvVoCtxSGqzmhYlxZDhmZA6PgyKGcwrntweGVs2vI+zn9Dlbu5qTLzvAv2Q/WVmY0N1W6gGZ9UAb2K3oGrcyHIZ0LUoxCVErj9YWQURCDIRRAChtM84GufsztVjaQa6a0WE6JuQdRjoI6F6PzPsUvXHqi+8rMFGYwxxlqf91ZvvfWWP4c2Z6hRZ+XuLwMpkW92ZVq1nFa2qgVRNZChx5DhN+FSwqC8GC4KmPjXmPlD99U3tgWq3SeqBTjnt+LReDDTCdFmbKgGegydhTY5A0FKHJIeh+gz4NZtZAQSEOQYJH/yK0zy+XyveMEfd65ByNH0jwZIT4L85cjIG4R/jny/qKq+yc1vCsYYa/0mLNqs/fSeECg/AtJSkPzf4I77kb70sjP6VdLSN61UEy7NBPmTIC2JTDWIv9jvY3sNcPy1vPMi2GvrGsUjjQaa021d1x1ovKJX0YyxYm4IgseAW0tByLfhVsqQqQ2H5LFAyjeojtcT6WEwBgTdgqin+wZ3GQ7yhHFpwTC8umh7gN8QjDF2bhgw/oP+7bSBoLxiiP7Sb3S7SvInIOi2UymvxCCoMWdqqWaDdAOkxUA+C678MAoK52DJblx//q3Y0xobq92HDqfDfW/DFXcH50y6MPt5CJ4SuLRSUL6NDK0ULtn62o0Hjq7Qj377ikEMxCH5LUi66bSbzStCh6fGLl+xv4bHujLG2DlgX31z20eik5MZ+YNBetnXD3bFhCAbkPzp8eOKCVJiEBQbgmrB7Y9C8BVBVC2QNwHKC+OOf01cNmvD3tvPy2AHQE3HnUV8uK/+hj+bb6OdPhjkC4MCpRD0OAQl+s1Ht+px56qb4jT7dyshXKCHIKo2yBfHBb4i/C0+K3awrpHP2Rlj7By47752f82Vdzz7xjLyJI7u+gqfGghzCqt13YJbi0GQDYh63NmW12znlpWWxIVqETL9UVCgDKSXQvQWIyP7Odz0xKjtbyzb4zsvg/14zc2VmbsON7R/7pUPhrT3D3Ma8WsJiHIcLnU4XP7hIDUO0k2QfqRasSx9Z9E8tQKII9/AFBOiakKQTQhaOchXhosKLBiztvR1Xhg1YhOPd2WMsVZt+vJdHX/TfRDIk0SmbqKtXAi3UgKhIAlSLbi1sNM69gvP2B2f2zXWnEwRVcP5dc1Ojwo3QXIYlBfCr/qO2TdpySbfeR3sDYecqvS9TWg7ZMKSZ67sHgR1HgryV0CSyyAqSedBU8IQCwy4C9IPqvL1q+ZFJQZBTYG8SVBeMW54KLZn1ur9t/MbgjHGWr8aQDQnf9S3jd+GmDcUbm8R3H5n1S0UJCEowXTVvHV6h48pMZAniP/6U6Q+MW3Fg+dtsH9W2Ture/7yoWQVZQ9DGzUJyRcDeaMgJQJRDUHyFSHTW4hMNfy1nxRJtUGeKFyaM7tdyh+Cjk+PWrZ0z+HrAVBTY5UbzTUimnn1zhhjrdGuQ83te4TeGS90fsGZ4OYvh+BPQVANkBo9QwPIYiCfDco3cNldUVgzV/Q5/r/pYBMyz69gP3TsPvnYJdu63fKItZn+0B+SakHQkqBAKUi14fJGkKWUwOUr+drBLigmRF8IbiUIQbdAPhuitxj3Bd8av6W24VIA1Nx0AM2N+9ryG4QxxlqneRv23Hxdr2gl5UdBBSOd8az5Jenj2DMxNtyE4E84893lGC7rHoX99vLe5/2K/egTsmrDzZ2ff32pmDMQlB90npTAKJBeDlGJQfoG37YEOYoMvwm3FoWgWCB/Bchn4Tu+Qfh72fvYVdeEJtShuZ6DnTHGWrNhb3789IVaiVNMrcYg6TYkPXmat+GPncG7fcVweYc5I2U9Bn5UMBijZi3pzsGetqISVz8YfQvf8bwI6lwEl1IOClQ4jWaUr98u0O2PQfAUQwokIOgpUKAMLj0Oyh2G73cN4+Upq3EQ6YYDTbwdzxhjrdWOmvqL7xk6eZLYqT9E1YKkp+DWUxDORLCrFjK1ENr4CkFaHBQYDvKW4Mo7X0Z86oe9OdgBAmrFg83I/FfF3KGXdTFBHgvki0NUohDU6HHfuMxPFy98yYPv0sKQlBDIXw4KlEOSw8hUQ+k7iTZ+0qMUFe9uSHcS4mBnjLGWqukUFl8zlu/o8Mv7IqDcIEgrh+CzIcjmmdmK1+KQ/EmImgnBbztz3T0luOyuIhjvrOx73gd7c5PTnq+qGe6ydzb1/HXP+D66YyBENQW3HofkKwb5DKejnBIByUEIgbjzTelklYu+EISCuLNa1xKQNAOCN31mr6RAnYvw6x4mpnywM5ffOIwx1rrVNkB8NjF1qHjHC6CCsRC01De6WXXSOSVaEqSlIGoxCHLEySc1AfJF8IPucdiz1/X+NnaDW82T8/bHWzrm/HPiYupUCJITcAVSEHxR58y8a9yZ5iNH4ArYzh3DL7uWcPyoviN96XXLkRvEbY+MWvPuyh238RuDMcZat482bL/25r+mtlJ2DKSXHvvMPxPh/qkasPRfKzFQfgT/cX8cE5Zu1AAQ6s7c4JiW/YQ014rNDcf+z3+8u+6aPuE3Si9SgiDPCLi1GDLUENyqBbGgDG7VRIY87BtdZRACcYhaDK5OL6LDo6nlc1bvupXfGIwx1roNGv/hc5meIEhJpnd2zTMU7l+woJQjcHd+Hr99pAITF29Xzu8Ve+PBTNQdq1CvPFSfGZm6+tGr7quop46FznU4nw1JtSB5w3B/g8I6UgwIvggoEHemxGUX4vd9y9fMXbPrFn5jMMZYK161b62+9n8eHwPKi4K0xLcc7M6EuDaeYlB+DDc9MXH7B5urbwRATfVV7vMm2Gubm8WaxmbnHKLx8w1j3v5oZ8cOT45ZTjnFIDkFQU2ijT8FSUt9/QdeNSGqEafRQGA4SK0A3VEIuV/5nI+377uG3xyMMdYaOfnx7PB3kKFEnVbl33awqxbcagrkKwV5LeS98MaiNTsPXglUu+tPc6F2q36y1u2pveKvkenlbbUgSE1B9FrIUMx00/+vdz4iBUxIagyCLw6h4FWQN4kLsl9Et4ETpi7fUXk03Juaa8VmcNU8Y4y1dI3pYrWFG/bcdO2D5VXUufgMnrN/8Xa8oJVClG1QvgUhL4heJVOwr7ah7XmzYj9VNXX1ojl5ad9r749VUU4RSIl//W9UfguCHsQFmoG2BWUQPHFIBSNAsgkptwj3Fk6cOGPl7g41AAc6Y4y15KtwdZ/Z4m52Opz2LJo6jjoXn5kmNadyJU6JQipIgXxxuL1FeHbEvKEc7GnVTQ3pJ825Fvf+6t23ZP/r9cVt/SlQvpGen2umrzVYRyfxnGjOu6DFnMlvWhRSlygy9Cjc+U5RnuBPgdQUSBuBNjmD0OlvpZi5en8HfuMwxlgL1uQE+8FGZNaiWTwS7K/M3drlh38qB3miINU+7qramQ51A6SUQNRN54q2FgepZfieP4yyKUt7crB/ga17Dl5SVPp6vx/8aSQotwhSfrHTVU4thaCXQ9ISEGTD6VynxUBKFKRE4dYNZKohuOSS4wrpzBNckxsByinG/z4W3zhj7a4OAKjxcA2v3hljrBXJfnr4YsqPQlCGQ/DFIKpBUCAKQTacQWFnKtxlA6Iag6gakFQDohKB6Anip4+8hSnL93yud0ol0oNj6r9azpxzT9jBOmS+umBH4Pd/H7mGvBGQXg5SkyBfBJJmQQrYEHQjvSViOiGvRECy8eVn85oN8lsQc17GrX0S62euObZyP9JQhzHGWMv2t9L3YqIaAXmTEOQYSC0BBZzQdWn2GSygi0HSbEhaDC7VhFszIOQMBeUGob70+uy1u6uu5BX7p87amz4VrMt31V9znzEbF91pg/LCIDnqjH7VrfRknyhEzYTkj0HQrHSV5Jecz2slkLomQEoSmd4Ebnnklc2vf7hFOb7qkjHGWMv22sf7tP+4xwLlxZy6LNkJdkGNQVTO5JU3J9wFxYSoGMjwW3BrBkRvEO7coXiqbEG4urHJzcF+ogrIBidkq5saYMxYiRufeAXkKwHlDgLJBkhPQdBtCHoMkh5Lh33sS9sMupUgBM10ps15S0H5EVx1d0l9YubaB/nNwhhjrcOWw7j0/x4t3UjZEaeGSgmC/AYExYDgO3PX4JzcsSHqtnO9WonCpcXg1gxQbhw/uDOGsnlrenKwf1FFZFOtiCana92SbTXXP2i9M+p73WKgnGEgJQpBd+6tk+wMlXGrYbjUyEmflAvkGFyyBQqkQH4LpIQh5AzET+9OIDp93aNVdYfdAKj5cGUm6o/NmGeMMday9Bg8fryQGwHJKZDfABU4V6Ul5Qx3oPOZIMWEqNnOj6oJSY2C1OEgr4UbHk3uWbxp1w0c7CfT4ATsgQZkWXO39Ln50ZFbs3JfBOUOBPkiTkgH4hDlEERfyUmflAwtCTHfgCCH4e4ag+QPQ5TDIF8K3/dH8cIr8wbuaMDFzr/3YCbqDmTxG4gxxlqeolc/6Jel2iBvAhSwnDN2LQbXGSuec25ZiWoc5I1C0CwImgVJs+DSj1y9S4FyhuEv4bfLaxubRA72U7Rg456bHku9b//4rigotwgUKAcVjABpTqXiye42Sl1SEDQbGYqBLDmKLMWA+0j3Io+Ji7qWoZf5HtbtrgbQjCNfKo5WNjLGGGsR3liy23fpPSNBnqQT7GoQghyFpJyh++1KDIIcgxQoBcnOlrygWs55uxoDyUG4CxKg/Dh+WGBg9Psru6OxMhN1X73l7Hn5hO493ND21Q+2Bzr987WllFMIyg2D7hwJsWsKgloEQQnDrVqQvHGQN33/XTVAmgnSbUhqDKLXgEs2ISrpO4lqCpRfDld+CZQBk/D+rloAoPqmandd8762/EZijLGWY9Oe2suuvj8O59qb7RTR+ULpYuozEewmyBc91lPlU/8eE6IahkstcY5782zc9NgoLKs8dC2v2L+ilbuqrn7+laX4r/tMUP4QkBx2rsHpllPc4HUKKdx6Ai7lM3fbtc/3AZZk50VC+cNw89+HY/LafWhEI9C4ux2/kRhjrAXdpDrcKP76wdg+ygtCVOIQtBEQ1agzuvtb70gXg6TFQL4SiKoJ8qWQoYbxz/EfFHGwf83ORDPX7u3QfdCEyW3zXgR5UyDFAhXYoK4xCIEoMrUY2uRFIfqML+hOZEFUI3CrJZC0uFOMkRvCb/5soeK9dahCsxuocn92kA0AQh3ff2eMsbPh/z0xej3lhSEqFkT/cGT4nYLqsxHspNgQ9SQE2QRpBgRPMa65N1rz3poDt3KwfxX1+7OO3D//5EDdpfFp63r/5uExe7LkoaCcQSC/CQrYEJUY2igxSCcpihDVCFx6EIKWAAVGgbQK0B1DcOWdJRj0xkZUNtTzOTtjjLUgvgFT55LPgCCbEAPDkREwnI6kZyPY5Thc/pEQlSgoUARSTWTmRPFQaGbFwXSdVnPDqfVL4Sf3MxZu23dT38iU5M/uKgHlFDsNDNQEBH/MOWP/wifFhORPweVPgryG04PYa4Jyominl+GvsSnlyysPHRv9WneQg54xxs6ibsH3pkqqBcEbhaCXQlLDJ/+cP4PDYUhLgbThzjXqQDEEfwIueSQuvyuKV5dvC/CK/Ruqqm9wT168C+rTr+F7chAkB0Fa2Cmg+6InRbFBXhsuzYbkNyFoEYhyDJJ/JCi/DC7PYOT8+9XFM9dV8QAZxhhrAe4sfneqS41B8ERAWilEOQhRM85OsPtLQbIF0RdEhj/ibMkrpaDcQmgvT5xd03Dq19/4yf1sY5uGWvHIYJftVQ0Xl0z66MnfPTpiO3nDTmtaJXbCOb6CYkKUoyBPOH0/0YbkT0BUDQi66Zy75wzDDb3je0rfW99rT30jF9QxxtjZ3Ip/YdJcwRuG5I1CUJPIUIIQlMjZ2YrX4xDkEDLlYmTI6UY2gTDIG8SPu9mYsmh5Lgf7KZ2x14o4bjpbbfNxc9abjm2Vz9vWdPNfzIXll/ccAcotBuWVOP3mNRukWRC1GNz+KNyBoHM+Iyec4TNy+m5koBiCfwTIGwflDsN/FAzGsxWzh+44WHexc8bPfeYZY+xbL57728j1lF8ClxyBqMSRoYVPONr7W6uMV0PIVEJwedP5cmcEpBi4QLbQJziudF8D2nKwn2aTlu70dRk0eVp7/zCnuY0Wh6DZcOtRuPxBkF4E0W+AlARISYL8SVAgBkEPQlSiEOQYxEApKL8Y7fKexwNDxmPJpv3Xf/bf01hfKzbXO2FfC3DoM8bYabarsbH9z3uWHqa8Yc41N68N0iMQ9NRZC/YvbEObW4xfPFiO2asrbzu6EG1sFjnYT5N9h9E29vbyPv/v6dfWC94SUOcikB6H5IsgwxeCq8AGFSTTdyEjcPmK0SZ3EARfFGKgDKSlIBWUQZBDcHV8Frf+ffT6MQs+6caPLWOMfYt9TPY1XP2znuWg7EKIehQk2yAt6jSqaVHB7hRnX6iG8ULF+wN5xX66NR7bMl+9p+mq/uMW4rqHK0A5RaB8C255OEi2IGhhuPxBSP4wMlQDmV4LompD0OJOkZ2ScFrZBlKgvAiuuNvEi2PnDthdw+fujDH2bXh1wbbAf/QoBXnDkHTD6V+imSdtK352mCA9BcqJ4Pa/DV+1aX/dZRzsZ+Rsvvpo79456/fe2nf4+8kf9xwO6lgC8hqQFBOSbECSYxDVJEgtc+b8ygZcfguSboFkE6QnIRSMAOUYaCOH0G3IlKmL1u250fkSUe3mx5oxxs6Mp5LvhDMCMZA/BUGNQtQMCHr8hMXRZz3Y/aUg3whcHAhhxLuregAgNFS7j88iDvbTVD2P+mMr+MnLtuV3j8yefGmXEtDthSDvSJA2BqTGIRYYIG8IGbqZHg8bRIY/Ckl2rtCJ/iRIcVbvv+o9fF/p9FW9+DFmjLEzx/uvsXMppxiklUHwheH2R0Bq/CTXms9isGsJkDYalD0MDxnTK5wC7xrxixaA/ASfDnX7s5zz9+a2o95b393z7MQFbdUIKD8C0iIQlCK4tBgkxYCkGnDpUUhyCJIahssfRZYehVu2QGo5yJPAxV0N/C0xM7Z6T91V/Pgyxtjp9fHOmmuu/3NZJeUUg9RSiHIUbj0EkuMgJdziztgFxYIgl4M6BfG7v43d/sH26ht5K/5btmV/7aXx2at63/7s6FUutQTksZxOdLIJQYtD0JPO3+s2RN1EhhzBBd4IJJ8B8peB5ARceUOQ868xi99cti2fH1PGGDt9St9e0usSPQrSEyD/CGRoMUhakRPserTFBbukxpDps0EeG+27GIjP+Lg3AGpqqhFrmxpFDvZv0cYDNZdHXl/0aIfexRDlIEgx0i+kMpCecloG6iYk3YaoJSD4DAiK6dyR9xogTwRX9ByBIWM/eGZDVdPl/Jgyxtg35+k/eYGYE0z3IrEhaLH0FrzV8iri1RhE2YTbY4HUUgjZRXhk5JzkyWqx+Ek+w2qamsTluw5c88+KuUW/fiC0T8p9Md0AIQnyWhDVGEQ5ggwthsyABVEOwqUYkDQL5IuB8k1c4CmG2n/i7Fmrdt3OjyljjH25xuOnadZXu9FUmQmA3py/Ov9Hf0qC8o1jZ9gtMMw/FexKDC6f7bSYvaMQ3sGT5+6qrm+PphM3N+MXwLdoyebK6/+ZnF503f3hSrdvaHquewoZehxubxBCfhEy/SZcmjM6UNKd1rSklEP0BvGrB6L7otM+enR3bT1fi2OMsVPVUJmJRqcWqsfQ18cL2UNb7Or8xGfsMbhkC4KWAnmi+HXfcsxft+tmPmNvSY0Rtlde/WTsTePqnoaz/eOJgmQDpKfvucvp7SE1BkGJQFRMUH4U5IshQytB18Jp0+ZvOnAzP5aMMXYKmpzW4ZM+3Oa7/L5yUG641YQ6qTEIagySEoOgJkBqHN/1F2HUe8u7c7CfjWY2R5xoix4Q31l38PYHhk4Y+5N7wiBPCJQ9zGlD27XCuVupmBB9QVzgj8Ct2xCUUpBWCsoehBseMPYEp69+ck91Ha/eGWPsSxysb8y8q3AiKDvsjEhtBVvwR4Nds5zjWW8U5DFBf3wRA8Yv6M/B3oJNW7az873BmROv6hEB5Q0GZQ8FKSakLikIShSCEoGkmnArMbh9BiRfGJQ9BIIWRs/iyePmrNl9azVwrIiijofKMMbY8ez31vb+wd1hUL7ldP9sZcEuqAZEOexsx3cchj7xhaVVTeDiuZasuqHZPXXpttxexrSxP77XBt0xEJRXDNJMiKoT7KI3hjZKCi4t5XRHUiKg3IG4sW8FBr/x8XNbDh6+lB9LxhhLO+xM6Vy8af8Nv328Yhd5g3BpZRAUq1VtxZMaAylhuJUwXIHhoBwTgUGzsPFAw+Uc7C36DMhZZVcCmZM+3u/rFX537NU9YqA//huUXwRXQdL5puaNQ9BScGsmLtCKIeiloPwYLlIKcc/ACZPmrt1zCz+ejLHzXXN9ZSbqa8Qdh3HxQ6F3KqjzyxCUGDI1A5Jmtrpgd1bsBiTFBuVG8Pt/vomlW6uv52BvVdfkIL7x4SbfX6JTyn9yTwRi7gBQzjBQoBRCoBwun4EsJYwM2XT60XtjoPxi/Kp36b4hr81/ZkfloYv5cWSMnb+LpcrMmkbgpYkr8N0CG5QfhSAbyFSLnTGtrakqXjUhKc4RgqBEQN4Qbvz7JCzYfPAmDvbW8C2zqdrdeFzTgf1A1uuL1ioPR6eX/uyeMCi7EOSNgwpGgfwVuMBbjDZyCYRAGahgNCg7iKy8/ijoP3bG6wvWKPyYMsbOO+k77KPfX49f3B0EdS505qzLMbjUEETNaGWrdROiaoG0BAQlCvIE8fO/jMS7q3fdxsHeSjSdoOnAvjq0nb5iW8en4u+Gr3vAriRPCKRVQFDiTsW8vwykDwf5hztX53wh/PT+OJ4aPju8eFftDfy4MsbO+YXRcbeQXll+oMvv/hqD0PklSFoSglYGUm2IWhSC2sq24hUDghID6SmIqjNU7Md/sjFt6ebOHOzniIUbd970zMgFRb/oEa2h3GEgOQbymSAlBtLiIL0U5C8H5cXg9sbwP38fu3n4zPSoP8YYOwc1HK46utM5a9Wu23/zxNg9lP1ierWbcrq2KXFnPKtmtbpgJ9mE4C91gt0XxqV3mZj64YZcDvZzzOoNO696fvSigb/oGanJzH8J5Ctx2tXKJsS8YmRqCZAyBpQXww+7RNGjcMr4eRu5sQ1j7NzReNz47Eogc/KqyvzfP2KtodwhEP0xiLoN8tmQCoZDVG0ImpHuDd8Kg10vdQr/5Aj+4+4Y3lqykVfs56o1O/ddGXrzo8dv6ZPYfIFnECivCBlKFJIv4nSvUxOg7CgotwTXP5SsHPTqh89tPnj4Mn7sGGPnkkmrDvpu7FsB6vgyKGBC0AyIvjDcqgWXYjnn03LYCcrWthUvx5wVu+ZsxV/eI4G3P9rSkYO9tVbIo/nkDWfSxXabKmsuGzzh4+du7FOx6zsFKUiyDcEzBOQNgtSEM3gmtwTt/WHc9uRra95duuk2fnwZY+eCGcu3dbitr7WGOheCuo0FqVEI3hAy/TFkKCG45DBE1YCgGaBWtmIXFNOZya6nICgGyBPCz3qV4p0V227nYD9P7KxtaD/6nY+7K/8qQ/s/JUFK2GlF6C8DBcpBsgXKC+P7fgMPGfMrFnxScxM/boyxFldIjJoTLmpq0Sw21B3IAkD76hvaFs/a2O+nf06CcodA6JIE+a2jneWcbXezVXWa+/yK3YRbNdFGiYCUFMibxG1PVGDV5t1XcbCfR2oBcdOhpsvGzt/SrcuAV6b96F7TOX/PM0BeCySboOwiSJ4S/ObhkXsKJyx9Ztv+mkv4sWOMtTT1n7sp5AT+1uq6S54d/s7QH905GJQ3BKSaEBWj9VW9nwKXEoVbCYIKKkDeOHKfGYtN2w9cxsF+Hpv80c78+4OTx13zYLJG9AwDdR4KkpNOBX1eMdp4h0D+94Q54xZ80uXgodrM4//Z6ma4q5tP3JOYMcbOhiVbD1z/p2GT8T3vS8jSwhA1G4JsIaNraavsLHdSmgVBjkCUgxC7jgLlhHHXoNcn7zt4uC0HO6P56/fd/Ghihv3ffxuxNTNQAuo8GOS1QQWvgHJNfEcvwoPGtFHvrt35hefvTY01PGSGMfbtSn/uVAHuiQt3KP/be8RG6jwElBtKf4aNdPp5eKPOoKxzasXuzAaRlDCEguGgDoPwN2t67IseK36xnKfW7q2+ctDY6c91fnb00ou6xEHZMZAnAdJToHwTP+2ZwMBx7zy/dOvedC/iWrG54UBWcyNPjmOMnaUrvrsOXfXPcUuKfnxXHNSpBHTkfro+AqSWg3xxuGQTGUr0HAt2E5IWhVs3QGoc1HkgiibM78fBzo5prhEBp5nDuv0NV5TN+LjnPYVvTvpRdxPUsRiUnwB5SuDO+Sd+/5i1xpr2UZ8dteDe84yxs6ISyBy7cHO3nGcmLRazi5zJlgUJkJaEGChLD8gyQZqNjEAconyOrdgVE6JmOMHuiaJ99xhem7dG42BnJ1VdV+9+c9GG/L9Y75X/Z4+KJsoOgfINUHYRLupqQB88ZdZrH2zU+LFijH2bVm7effVjqfn2j+4uB+WEQbIBVyAEtxaESzcg+Q0IugnRb0HwxyCoUSf4z7EzdlKjENQIyBPFLx97DXPXV97Cwc5O2bsr9t720pgl/f/n8Vc3u7QoKDcGyjVwxT1J9CyePu7tVVUd+XFijJ1JVY1wD35r03O3PTVhjTsvCMo1nJawfgsuJQRJCUPSDCfElQgEPX21TWl999S/jKjF4FINkG6DcqIIDJk6Y29NbVsOdvaVLdu8+1p75trenpfeWnBRQRTUcRCowwD851/GND2SfC+5ZFfTcefvnz57r6k7xGfxjLGveETo/PWExVs1/wuvzsq6eywoJwLyGcgIJEC+KEQlBkmznSu7RwrLVOucu972qWBXYnB7oyA9AcqP4d+j5g852WPJLyb2pbbtq7nkzYUb8/8SnVH+47tCTrvGfBvX9H2tpv+45QM2VDZffvT3N+zPcr5tN3/uelxtM8RagAOfsfNUTTPE2pN00py8ZEv+3YWvT/rxfUlQTgkoPwTyRZFZkITbHwfJBiQ1BkmzICjmOR3mnyJbELxxkMfA9+8qw6h5W7pzsLPTYn9tfdbsdXtve3nCx8//7iFrO3V6Ce7cCH7X7+3tkenbH91R3cgFdoyxr34nfXv19X1L5ycvvzcOyi4CeaIg1YZLs5BZkERmQRJiOtDd/jjc/jhEzTpPgt2EoMbhVkeAOg7FbX8fj+X7Gq9xFlJVbg529tW+XZ9kdb1mT+WVyekrHsx7auSiC/OL0NYbQcdnJi0b+8GOblX1jSduZtNY7UZDZSY/toyxPfX17d7btO/WJ+yZxs97lBx2eYpAvgRIK4Wkx+DyDoUgGxDTvdIlzUJGIHH074XzZbWumiAtAcFbCnfHgXiqbFb46M5nczUHOzsTq/i6rOkfbuvYc8Cr437adSi+08VG4KUJM95YuN63+1BDO36MGGPH23eoru1bK3Z3vnvAxEmXdimGqJkgOQryReHSbbj9JtxaFBcGYs7Ak3S4u/xxSGoM5I1AVMzzaMUeA6k2qFMIv7g7iilLNh6dwd7cfOK+IvxCYyfVWHfqDWk+2lF7bd/ShcnrHohW3nB/Mf4SfLP87eWbO+47VN+WH0vGzm9r9lVeOXzh1h6BwW/MuLRrGGJuEKTEQVoCJJsQtSgEJQRBCUPSbIiqs+V+ZPvdpdsgXxSCbEDSLIjn4sr8ZL+eW4IuA6ZM23u44Us/T/kFx05N06kH/IqD9Ve/PG3D8zn9yhf/9wNhPBScXjFt5c7OlY3gbXjGzjNLN++4PjR53uN3PFW67EI1CMq3QXI5SC2FqJpwqUFnRrpqQgikIGhJp1hMSzgFcrIBUbMgpgvmJN2GmP75c+uuup1uHWs4uxhHRrZqFshTgu90iSI0dc3jAKi5/uRtvfmFx84A50W3pw7tKt7fe0/3lyZP9jw9esGzo+cPnbZ8U+daNHBlPGPn8k2ayrpLpizekjuw4r3n/6PnSGdl7jNAnghItSD5405gnU+V7V+2WtdLIegpuOQg3ErQeXz8SYi6CbHjC+j0VNnSnU1ofyqPP78I2bfT9Gb5xtv+FZ049OHBk0qLJi7qN/vjjbfVNDYeDfgm7kHP2Fl10jkQjVVuNO1ri+aDmfiCc93aJogL1m6/KTj1oyeVgW/N+WF3C5RbBEG1IGi2s8KWDQiaBVG3neI3DvZjfBYyAim08RsQ8otB/iSoSzkovwTf61KMoRMWPX2qzyW/oNkZVisePw1u5Zbqq4vGLOr3cum7z5sT5vedu3zLLfwYMdZ6rd+5+4ryOWt79rVmJX/1ZxOU8xIotxikpECBUSDFdorjZAOkmBA061hFOwf7pwrkJNWEJIecv9dLQbIFyh+K//fUqPUb9tZczsHOWrTVOw5fNfztZT2CE5Y9ab/xUe+5H3/CAc9YK7H2IK4cs2BLt6dS74U7/WP00rZ32qCOA0F5QZBmQwgkISkGJF+xE+rKsfNi4XM90DnUSY1B1G2QJwi3Zjiz5btWOKv1QDFCM7c8/lWeH36Rsm/vXnxdvVjb/Om78Rv2Vl3+5tw1GDl95T0jp2+8Z8WmvVfXNDTxtjxjLcyG6obLx7y/qtvTI2cGs5+btPg/7k6CciOgzhGn1as/CSFQBlJtCKoBSQkiQyuGpDuhJWiW08v9uDATONiPaxtrwq05BMWC4E+BOr8E9d+jZ289jEsAUHNDtRuNNSIHOzsrqpFuUlN77By9Fs3iATRmHamyr6879gLderDhktkr99w2ed6K/FmLVt6+8pOdV9c2cftZxs7qFbX9DVe+vmCd8mTyXaPTsxOX/qxHDBl5A0F3vAjKLwIFbJBugTxhiHIUohyBFLAgBmyQEoHodwrlRJ0D/MvbxhpoUxCH6AlD0BOg3CL8tHsxxi/YHPiqzxu/eNmZK8ZpqhWbm6rcjV/QHelI0VzjcVfpth88ePHqnXuvWrh2+00zFn7c4YPla26sbmh28+PJ2Ldj3Z5DV6SmL+vVM/jGuP/+2+itP7o3BZIjoM7DQPnB9H1rA4JmQlQNCHIMgn8kSE+CvBFIcgiCHoHUNQFBT1e+H8dZuVt8xv654rkoBF8UrvS1N0kJoXdiYcWBemRxsLNzQtXhRveOPfsvXrV2w1Uffbzq2gMHq7P4cWHsG37Zxucr2qsbmtwfbtx9Q7/XNoe1obNn//rhkfsuucuC4AuBcoIgz5E71ukg1pyJaoIag6DEQIrlhLoeT/8eA6QYEHSLK98/yx8DaWb6epsNQbVAsg1RTSJTtSEpEQh3loFyQvjfvsM3Lttdc+3XeZ75xc5avF2797Tnx4Gx02fTgfrLXlm4s0vf+Jzk7f3GrvrPHha+c2cSlD0UdMcgZ/WoJ5yKdi1xLNhP2jWNA/zLCH4LYkF6J+PIFyOfBUGOQ/RGnMfcE8Nld5lIvbu519d9fvlFzhhj57ADNXVZe6uq285dc/CWl0Yu7x/4x6gZN94X23X5XTYu8MdB3gQo34aQPxSipwhuNYrMQBySboN86RW5ymfkpy/c7fTENhMZBSlk6AkIPtNZyWulcOcF8VjqXXtPQ1M7DnbGGGNUeaguc/2+qitmrt7XoWjKmn5dB7057Zc9huEi3YRbHQvKS4ByLVBuFJQXdoavaCYydRMuzYAoRyHIUWerXbNBus3X0k4X3XaOJmQD5I1AUEyIignBFwbpCVBOEfL/NXHBqj01V32T1wC/ERhjrAVrqqsR0VjtRnO1G82fnr9d3Qj31gOHLlm6ed/1s5btvL3wjTXP3Fc8bfzvHjRxsTYILrkYpMVBailIToHUBAQ96UwLU2Mg3QT5oyAtAkE1nHGo6Q5xom5D8iecc2AO5dOzWlcsCKoFdyBdaOiLIEOPwa1FQbkl+HkvE29+vCv/Ux3/ONgZY+wc3lavqsnavHPfZR+s23rj6PfWdH+mYkGR/MIk/FfPBC6Uh4HUuNOtzGOAvDGQkgDpKZBeDlJMiEoJRD0CQQtB8Kd/1EMQCwwIug1RT0DyJ52V+pGVZbpjHAfz6ah8j0FUbGQEkhAVE20CFjL9UVDOYPy0Wxj2jJW9a/DNr/nym4Uxxlqo9bv2X/Hemm23jv1gc7ehk9c//Rd7cfkf+k3AT7uF4ercH9R5oHMVTUsXuSm2MxUtkIKgxyHIJkRfFKJsOhXqfhsUiINUEy7dgkuz4PJFkaGaTmW7Ggdp6QEtPgPki0LSuJHMaVuxq/F0sVwMohyBWwuDcgdD8sfxzNjFRQcO133q9k9VI5wVe3ONyMHOGGOtzOZ9tZctWr35xrHvr+sWemvF40+UvmvkPzt2wc/vj+MiPQrqXATKjoDk4SBv0tle95c5w0I0C6TF4JKDcHmLIXlLIMlhp62rGoOoOlvA5I87v1+2QUoCopqCICchKIl0sDvn6YJuQ9CcQS3SCTrGsZM4stPxmV0OQbEgyim4ZROStwSiakKQo3DJQ3CP/cGkjdW4/PNXEdPBDg52xhhr2SvxPfVXvLti523DZy7rMWTCvGceLX3P9vWfMPeGh0xI/jgoPwbKDoFyQiCfedysbvO4q2XmCa6ZWcc52dW0L/tr9k1CXVDMdPGhdWw8rc+E22fjAtWA60ixXG4RPC++suCT3XsvPZ2vL36TMcbYGWu01ORe+cm+q6d8sDHXnrqk9wsjZg38a2RaeYfnZiy/7i9j8F0tAupUCOo4DJRnguQkBD0BUYt9aswpd2prPW1hBcWEK5CAFEh86nkT5Agu8AUhqCmQPgbkCeP3T41Ys3TrvutP9+uO33yMMfZFmmpENNaKaKo96VZoTTPEdbsOXzFz8eYOY6ct6fbS8Jn9HwpNrgi8OH7G//xtOK64L4E2uuFsp98xFJRXDPJG0nfE4yA16Yzp9Jc7k9COjDnlQSmtbsUuqDG4AgmImuU0+klPbhNUE245BJJLQd4k/t8/xmPxpr03nInXLb9xGWPnt4YaEXXVp3StaGct2i/ZfOD6KR9syC2csuyZfqPmhO8Nvjkx51/jFv933wpcdV8Kl91pQ8gvBnUaAuo8FJRb4mynqwmQvxTkT0L0hyD4wxC1EEStBJJSBJdWhAy9BIIaTRdafT7UOeRbQYGcZjk1D74oyBuBqDmDcEiznec/rwS3/2PsqsVbK51Qb6x2c7AzxthX4Awjqj3l4qMDDcjasq/u0ndW7b/dendrnxdeWTzwgfC0scqA1+fc2m/c+uv6jsZP7k+hbfcYRLUE1GkwqEMhKMcA+cpA8iiQloCopfuqa5bTR12LO/fIVRuSakGQDQi+CEQ5ApcSRYYaRYYShaQfKV6zThwaHJ4tOtSPPEfCZ/6evBGQpwS3/2PUqqVb9l//Te6pc7Azxs5vzZ8O9ZrmRnF3XWO7TZWNl03f2NSxYtG+ewZN/Pi5vxpvlwf6j5nxx8cTy3/35zD+s4eJ7947Am0KLJAvDMqPgPKiIG8c5LGdn/NFQHIUomZBLEhBKiiDqCchFlRA6DIyXYGe3pKVQ8hQg8hUoxDkUpCSgqCVQtDSfy0nQR4bomof7SXOWuN2vLMlL+o2RN12/l61IKkmOveLL1204+CNZ/o1z296xtg5p+Zwg3ig8mDWik/2XD3+w10Ba+baPk9XzA/eVTR18m3PvLrm6j4V+EnPFP7j3iS+f3cCbbtYEJUoyJMOcI/p/OiLONPKNGdUKfnCkDQDLt0EKXEIWtxZXasmBDkIUSmBSwsjQylBhq8IGUoIGWoEkhqFoJoQdcspjFOjEP3pvuFHtm4126mU1mI85rRFO/nAG+G4okdSnVn1ghbHDU9N2bNq+56rvo3XP38IMHYOavyKDS1ahv1ZX3Rf93CDs+o+UFOXtavqcPvtlbUXr99bfcWclbtuHbFgR4/C6RufeXLkB8Y94VmTOvefvPTXj4zed3mPFL5/VwLfuasUF3RNwuVPXzvyRkH5YVBeCJQfAnkiznmobKaL2ez0trn1+Q90xRneIajm56+VKenwV00IigFBiTptWtV0c5ij19E+Gw7HhQTfF2/xXHIxJG+x82VNM0GK035X9MfhUsO4QC2BqBogrRykj4DoLYL+3PBZyzYfuPbbei/xhyBj7KyqrK3P3Ftd33Z75eGLN+2tvmzdzgNXrNi+7+qFn+y7aeLC9Uri7eUPPjHiY+MvicXl/penzbrt8bG45j4bP+4aQXulGBfrw3CRMhju/IGQPENAcgnIFwJ5w06Ie6NOFzX5yCr42woB3k4/J4NdtyCqBgTdhKDFICgGRL8FQTMgyBGIsgFSnC5+F2jD0Kt48tj1lTVXfJvvKf5gYew81NRwkhV93emp0t1X3dB2x4Haiz/ZW3Xpmm37r1yydff18zduv/md1Vtun/jBZiU+dVXvQaMWPdfPmBHuUTQHnfvPxn//bQJ+ek8K3/NH0C5gINMXRqZigJSoQzVBfsvZIvdEQP4ESEmBPPF0b/R4en54PF24xlvX7DTTEiA1DkG3IGomRC0K0W9BVC2ne59/BCg7gu8oQ/BM6Yyi/bWHs77t9zd/yDHGvlR1Y4P7QF1d1pb9dZdu2l9/2cpdNVcv2rjvxnkbdt88fdXWjm8s3eh7ZfHGLpFZGx8dMHF1/6fHLgveH509ThvwJrKfm4CbHynDlQ9a+P5dxWijDgLlvgzqXAjBY0D0xSF4naphUbVAPgvksUByAuRLgrQyuBQDlF8CwRuEFDAgBiIgrQTkDzr3v7URIL0cglYG0pIQ1DgEOQaBz6TZmbjOpprO8Y0v7PTqV0ynH4FeBvIY+FH3KIa+vuTp6iO93hu+3aMx/tBi7JysBD/xqru2rkbcX4+snYfRfuOBhsvX7j185YqdNVcv3rzvhndXbb9t+sdbO765dHv+mLnrupXOXtXLnL6676DXPnzuqbJ3w48l3oE2eDryBs7C//vn67iuz0j87KEKfO8uE2L+EFB+IShnIKjTAJCnGJRf7Hz46UlnNa0lnWljWikoMBwUGAnqMhrkH5VuuVkESQ1B1CIgLQpBN0Dpc8w2chKufAui14Ikx5zrYooB8gYhqBGIuglJj0FSTEiKCbdqIUOx4VJ4O5ydXhm6AVEOgnwhSAEbUkHSKbD0RUHZQ3FD7+SeVxZs7vKpHbK6WqfREQc7Y+xrn1vXN2VuO3jokhU7Dly94JN9N8375MDNb63e09masazPC5NWo8+IZdCHvIXsf7+OPz77On732Bj8vFcSP+6RQNu7SkHZhaA/vgzKHgbKC4JyikE5QVDOMFB+EShvmBPcWroITDZAerrCWzGP3dvWU6CCcpCWgqgmQF4TomxAVAwISgSiFoGghiD6DYiBGEiNgDQDFLAhdImDCiyQnj6v9idAXcpAgSSoIAUKJED+OEQtBLdeApcWhCiXQPSFIakxuBQLosJBxE4vtxKC4CsBaSZcXcsgaSYo+2VckD8Yvudemfv+2j23nO33P38IMnaO2bnzQPuJH+xWrLfXoV/ZXNw5eAo6/usN/Pbx13BlrxH4wb1JtAmEQLkDQbmFzhUvTxTktZ2JYWrCOas+MsJTj0NUY3DJBkQ9DkGxnEI0zYSgGiBfCKIcgqjFIOgJJ9TVmFMNrkQhKGGIcti5ny2bELUYRM2EIIch6VGIehiiZsClJyCqMYiKM/WKfFEIivP7BX8UpIVBfmfSmKgnIKgJiP5y59ePrPCVY18MyM+DTdg3KXy0TjhoR5DD6VqPMpCWAnUuxA8LivGQORurdhy4qiV8BvAHIWOtLbj3HW4/f8PBm19duj9Q+u4nvQpf//iZp4fPDz4UnlVx98uTJynPTZjz349PwK/6jsNPe1Xgoq5xiIoB8hig/CMjJSNOMZp+5O503Nkq10pBahKinoKgJkC+GMhnQlRicGk2BD0OUtKTxo5boYuaMxr06AeiYjoTro6szNWo83tV69OTyjQLpFsgOQaSLYiqDVGzISgxkGxCUNIjR5UoyBt2urXJJkTFhiDbEGWnk9vRP/fInxewnSI7vj7GvmKgS1oUGUoxBCWSHonrFMtJehySL+I0HFJTIDkFyinBtX9OIfTmSmyvPXQxUCtysDPGPudgIzK3VTZe8vaqnR1Hvr/2nqKJi/o9lZgRfiD45lj/i5Nmder36tLf9h2NKx8YgUu623ApIVD2UFDHYlBO2JkSlpdutOI9cj/7ZNexzM/crTZP0oTDxNm79mWd+n+PEvsWr7Wxc4mkGXCrJU6diGpBCpRCSB8lubQEyD8clG8gI3cI8p59bdGbH2/Pr2mG2FJCnYOdsdNxdQwHshqaD2Q144uuiX2+IrYSyFx9oPmqGesOdxg575N7Xh634Pk+xuTSri+Pm9b56Yql//dYKa78y0hcct9wtCkwQbnFzlSwO4pB2TFnsEjuQJBnKEQ5CFGNpJuhcKAx9o1bwqoJiP4k3H4Lkm5CUNOrdK0MlBvCpV3CeCLxLlbvqj669V7d0OTmYGfsHFeHWnFrY+Ml87bV3jz2gy3diqd81O+x5HS74OWxM/749+Ty3zycwJUPDscP/xRHVkEEJAdB+SVOiGeXgHKLQN4QSEm3I01z6XGI/jhIsyColrPlraY7YKkGRD5XZuzrj13VExAD5c5Rj5Ju9ysbIE8IlFeEW/5avrl09pZeew43tTv+BkptQxOv2BlrHWq+dA53ZQMyt9Q0Xfrh9sM3vDJ/e5eXR3/0/EPD3qnIeXTk4pseHYmrHijDpfdY+H73ODIUA9S5GNSpBJQbBPlKQJ4SkDeYLvwyIfktSH7nzFhIT/qSNAsu3YRLi0BSS5y7tIFyUKAU5E9B8Mch6jZcegySzh/QjH3d4x5BMZChmXBpSac4zp8C5QzCZV0G4wHjnbGLNx244ehnQFOt2NxYmdnSPrf4g5uxU2nQ0tDo3nu4vu3mmkOXLdp56MaxH+zq9uLYhQP+XDJlVG6/ibjpgVL87G4L3w+YaKPGIOlJZwpYjgHKNUC+uFNs40mAfOUgpQKklELQ4keHgIhaDJIahaiEICqhdNVtmdOeUktACCTSQ0OMdLFY6ljhW/oDSfBFnKYZ/CHN2NcrnlOiaOMtdgpOlRgE7zD8zyOpzfGZq3vvPNzQ/os7NvIZO2Mt1p5Dh9ttOFh7+aKdVTfO2lh5e3Tm5kcfic9N+p4bi+vuD+LSLoX4rr8IF/pDaKMbEHwxUE7IGekpp6vL/WUgf7mztScbcOnpSm9vFIKWgKAlQT4bgmJBUO10wB9Hj0NSLIg+E4LPqQQXNAOkmyDdhOi34PLHIepWeiBJmmbxyE/GvlFnORuSlgTlDMX31UHoVTxl7IItB29qTZ9h/EHOzmv7qmrbbtm9/9KFm/ffNOHDzdrg8fOf61n8xrg/PDkCV95r4EK5EG65CG49AkmLpjukxUCyDdLLnXamahBCgQHyR53pXprpXLnSLEh6BKIWBGlhCFoUpEadX9PjEFUDbjkItxKGJIchKmGnm9qR6lxfFBmKiQzNgkuznXGfiuGcpWtRSFoUkmZA0p3Zz86fazv4A5qd9z3drWNXLNMz0elIO9gj2+7acVcij1zDzI+ijdfA7x4Zs92e+Unv3fWN7Vrb5xp/uLOWo6HqjFaV7jrY0H7Njsor31uz7dZR8zZ3//fYD4d0GzRh6v/0TUDUj/sAUExnGpjPSF8XMz4zFYxXxIy1itW3P+EcVyl2ehxvDKIadRopqUmIAac+RdBizmAhXxQ/uTuGf4RfDa7cVX11a/0s5TBhrVt9tRsnmD2+o6r+4hXbDlw9a+W220e/t7z7C2MXD+w6dO60/3tsLH7oL4HUeRCo8zCQNwZRKz3uW33sBDO2+QOSsdZW3U6eMAQ56nQ19Jtwa1FIchBuLQKXboJ8ptPyWLVBuYW40Psi8v41ZtErS/d2OQBktebPRQ4G1ro0fj7ED9Qja+32yiunfLAud/g7H/d4vmLOwHsLJ0/8/RNjcHn3GMSOA0EdC53Vd34U5LNBahnIXwEKjAZpIyFoNgTNOoo/HBlr3dvwkm5ClENwaWFkaCFkKCFk+NPT2XwhiJoJyisB5RXit31Ldw0dP/fpzQcOX3YufE5yULDW11L1QEP791duv2XkeyvuGTBpSf8esfnjOzz3Jn7UPYnM3CJQh3SQ50Wcs/CCclAgAUELQdSjkPwGJL8B0R+BK2BAChgQtBgHO2PnTAFcDKIeA/nCEHUzXZ8SAwXKQIEK55gtZxD+8z6z6WFrZunCrTXHiuMaD2ZysDP2tVfftSIaqtxoOvk1kXX7ccW0Jds6hycvffzB1LxR6uAZs3/VZzja6SWg7EGgzoXOBLJA+vqXGgf5yyBo5SAlBVKHQ1STkOQoMjQTbs2AW4nArYTQRgnjAj16wpnLHPKMteKteNmEUJByttv1lNP3QbVB+RF8Rw8iMHTqjIkfbVM+dax3jny2criws3g+/vlt9f3NyPp4a801r7y3qsuLI2cNuD80ddwf/jlp1c/uL4XbFwbdEXL6oXtMZ3CIYkBQoxDUqPOmVW3nqljAhqQZEOQSiPIwiL4oRDkFSS2DpJZBVFIQvHGIHhuSN/65s/QjoS7qNoc7Y6013LWEc3NFS4A6vozvel9C3r8nLoq9vaLPlkO49FijmRoRTTUiBztjp8mKLXuvTkxf/OBj9hu25+XJC377xGu47B4bYl4h6I5BoE5FoNwoSLadu9tqzJn6pVtwBWxIero5ixpJB3wEghaBoBsQ/AYE3Ql+UTEhaZYzelRPjyVV4xCUdLAfF+4c7Iy19or49Bf9fAOUX4L/eWzU5tjUj/ps2Fl1ufPZUys21507Yc7Bzs6qtzagc/DtLU8+YMwZ2/m5N5b+6pGx+35wTwKiZ5hTqZ4TdOaDy0cq1J03qKBZzhxv1Ugz0/dQrXQYRyCoEeeueLpZi9PwJeHcWU3/c6SZaTGQFjtpQxcOdcbOpmj6vZr+HFDsY2NUFQOZuoFMLQpRDkLSoxD09Jdzf8o5hus0CL+6L7JvyGsfPLNqe9VV58tnLAcNOy2av6CneiWQ+eH2hhvs6et7PzT09YoOD5vLr3sgXvnDrhFQ7jBQxyJQbsTZWvdEv+H1MuurjfZkjLXcFbeannugGBAUE+5AHJJmgdQIJL8Jt1oElzIEkt9I30VPgJS4c40trxhX3xPB0yM/DM7duOuW8+3zmEOJnfbhKKv3VF01av767k8lpoRznkos/q8eUXy3qw1BTYFyTLhyBiDDNwzudCU6KTEIiglJM51GEfyhxhgHu2oh05+CKMdAniAkJYg2BQbadIlA8pdAUItBfhNUkK50V5IQ84fhV38uxVPli8KLN++9oaoJ7vPx85kDin2x5i8/f6o8VJ+58eChy6euPZD77OgPhub+fcSin91nNbXrbsKlFIFyCp0xpD4LpJaClBSE9HUU4bhOb4ISg0uPcbAzxo4SFRuCbEBSopB0A4ISgeALO+2T/cNB2miQWgrRF8TP7zcO/6NsdvCDzQdurG38zAjVpnPzLJ2DnZ2eKWd1Te7Neysvm7npYIfiKWv6FfSfOOMX95pod6SXuhZ1Jpl5h4PUdC91f8rpX65FnF9XU86WmeqMJBV1G4LqDEjhTm+MsePP2EV/DIJuO8WugXJQl1EgrQLksSGpEfy8V+zwE9Y0Y8knldfzZzQHOztF2yprL1mwdc9Nwxft7PGXxKLy3/UpxwWBFEQ17swQl0MgOeIUtihlkJQUMpQUBNl2BqZoNihgO9tmgfS4US0OQTGdb9++iFMop6fSgxj4A40xFoOgG86YYj0BQU04UxRzhqFdFws3PBTd87fYxNgHWw7eyJ/THOzsSxw6XCuu+P/snXmcVOWV/s+9t6obETGOMUPMGMeJ44xxTBx/zjhmjGNEbHqrultVtyAad43GGI1LjHEJouy91Xa3WrobWhYRRRQRRUURZRNZFBEQ2XeaXqDX5/fHW2zGXZYGzh/fD0gDjXXr3qfOec95nnVbzpm4cH34qefmDzIGPzfjrN/GIReUgQptkFqT3SFPgoxqSHpGrIypDmTDgqIm4FdtyMEEKJAQ0aIhF5KRgKw7IM2FrCeQo0eRq1VBUWMgPZVtrSV52I1hjivsL7nnbSi6C0lPgtQ0qCiG7loZet+XWjLk6bcGLllXfy4/r1nYma9gazN6zFm++aIxb3084InMK0OvfGAUfIYDyhsBKigTFfneOFIHfjUGvxqDT4tB0WKQdUucmeuuqNzNbK645kA2HMhqHJIagU9LiNjRrPNbjhGDz7DFzaulODmNYY45o5g9K6tu1i9CrKoqe+Zs9LRIW8tGqkq6mLmRVBfUNwEqTOC0Uhe/eXDc0uHPL3h82daWs75+PqhZ7uzc0R1ollnYmeOKNVt393pr8erLrBcX3H1jxSsT//3WDKioElTogNSUyP4+qDGlLNoMc9yh2vt8KHQbkhqDYiTgNxPwazYUPSOG5DQPUjgtfv9V5aA+5fjpDaNRPHDy7OS09+/Y1LT7FH5us7AzAAEHBhos3rr73NGzPr5h4JjXhhYNeXX2z26tRU7+U6ArnwQFotlKO2vByC1xhmG+Jz7TAgWrIGsx5JQkIZsOJDUO0rLGMnpEHO0Ve6C+wt/i336XwW8Tb2Di/LVYvXs/61eGhZ0RrFi76czx09/vf6833fu/vzy77IcDkqD8ClGZF3mgYAoUqhafljULkhaDzKLOMMzBEHYtBkWP752/ETnoaZG0VpICGVFQ3xGQgxFc8sBznz02fk7ZjKWbLmsE/EA7ABB2N/jReny21VnYmb0sXLXzPHfygruuqZwx5f8eeHbZj0vjoKuGixZXsQcy6qCY1SDVFZPrug055EAxRYvMZ7CwMwxzMFrxDuRQRuQzaC6UUFqcuwdtUEE5ftAvAmPka6h87UMsWN+0b2Wtoz63s/3r0x8ZFvajm45mGW07c9H+xfGC76/bdUHlSwsfKi17adovf1+3rWdpGlRcDSpOiTNzMw2pJAUp5EDSYlD0BBTThi8k/NIl3YGsJSGHayCFM9yKZxjm+xOqAYWqQapowctFI5CT/yT+7dZa3GrNGv/cuyuNNY37J601+vl5z8J+3LID6P7+ptYL3KmL77px6PiJ/3WHt/600jiooEqspRnVYn/czN5ghgMKuaCwB6kkmZ1OtSCHPEjhFKRQBhSqFTehkeIHEsMw33MiPjsVH4iB+g7GP6pPovjB2tlVLyx84J1Pt16ybTd67H2mtTfJaG9gUWdhPz5ZtmX3WfYri+7uN/jpqf92xyj0vKYWVGyBCi1QQESY5hgx+I0o5KANRbPh1x3k6C78qp3FEtaupgvJ8CAZNiQ9DlmPw6fHoGgJnmJnGOZrds0/H7Lk7puED1qgoI0cLYozb0jhhsS7E5/9YH145dY9sanfnI7OJm7Hs7AfRbR/szfs+uaWUycs2FHar/LNqWfeVI2eV2fPqYrioIAl9kSNpFgr0W1IekJElGqixS7p2R+zgSvSHutWY7+bU7P2VvESt+EZ5vhxeDNcyGYKFLQgBS1h92ykhEtkaBQkLQJSy+A3bPh08dyR1ShyzQgUoxL7YpIdUDAGqbgCJ5dEcPFfXkBq0lu3L1u1/qz63Z25/MxnYT+u2dmJ3JU7d53x6uL1fe6seK720jsjK/6xtAxSMCrEXPOy+cQswAzDfH+PCclMwx/OICfkQdEtcR6uJyAZFrqFnoZPHQW5yIIcsuDr54LClhDzcEZU54UV6K6X4ec3VzX80Xo1/drHW/usbtzda/duHn5jYT9uEWdLGxqaT31j5dbLn5r48aDL752IHwaj6BZ2xHpa0M7arqag6Ba6adFsy5wfTAzDfM+qXfMg6y5k3YFPt5FrJJBrROHTKiAXxqFoKfjCaUimIwS92AUVjUa3kqfxrzfHUPy3cbOTM1bdsaqh5fR9zzUWdRb2Y5imNnzpG3xbS0uPeeu2Xljz1kc3lT4xYdo/hauQUxiFHPBAqieG2cxqUEkdyBwFSfXg1yzkBCqF0QOfhTMM831EXbfh1xLINZOQzaR47uhJUCgFMl1Ipa5IZsyPgPKi6FEcx8+uTeKqR1/84NGxH5QtWrv9vEZ08uAbC/txeJa+u/6AM6aPtuw+Z8LsVaW/s96rO+f2Z+ArGAnKK4dvz1mVkQD1syEbccjBKHy6DdlMQTGS8Bse/IY4N+cHE8Mw36sNr1vIKSqDXFQFCjggcxSo31hRTKhJUJ8oqCCBM66rwRX3jlnyYOJl641Fqy9v7PxyMW9u6+BqnYX9WEe0pHa2IPfND9dd/rcJC0Zc9cQrH/QojYKujIKK6sR6WsgBmXGQboHMGpA5Cj61Erl6BN3MBPxaAopqwae7kPU0JJ1jThmG+X7IhoPuhg1ZTWTT1DxQn+Ggq55Er35RXHpP3YpbKl8ZXz3z01s+3Y0z+HnOws4A9MHGlvOTby7DTZHXcc7NSVCfp0AFlaBwGr6SGuToaSgBB5LmQjLFZDupiey0ahqykQSpFmTVQo7hITeUgaJlJ+P5wcQwx221fSBftEtuf80KW/brwZTwv8iP4wTTwcX31K2935lijZoy+4Zlm7ad9V2ee52tO3kSnoX9KKfzwEGRnR3Iff2jXb2fGrdw0CUPv/JZNzMBunKIMGswkntjDBXNgl9z4FM9yMEkZNWDbNggowqklYP0FMhIg4wUZDMJWXfFnmjA4ql4hjnO9sklIwHZtCDpcZAWg6TH9/6ctARkwxbPD92BFMomphnJ7HqrnT3mS4LMjHiuFHugvAhOUyvw6z+OW3GHNbPOe+2TOz5Y23o+P9dZ2Jk9O+dN7aeOnbF0wI1l0yaec8sEUG8L1DcixNjwvsOncftrDCIYhjluhN20IZcmIYVtkB4HGQnIZkL8XLUhGy5kw90b6KToceQYMShGEqQLa1cqqgRd9SRODA7B/zwwAbdn3h9TN33edR+s2MhizsLO7M/cda0XDnl2zsC8RyZ80Ks0Duo7ElRYCV9xhEWZYZjvj+GBQhmBmYJkpCCFRDePVAf+kj0BKxYk04USciDpCchqFFQQBV1VhX8IJ9D7z+Pxl9TrkfFvzO+/ZNXac5uxb9CtvbNJ7uxo8POqGgv7cUs9kDt16fqCP6Vecf7rzur1J6ploLxKEYeqp6GEkvCZMXZyYxjmIOya21C0BGQ16xAXzLpKGkLkZd0GqRZIjYOCEVBRBSS1Ct2uTuE3Dz2/9Mmn5w+eMOez0kXr6s9rbMd+E+3iLLwDzXJHZ30uOupzWdhZ2I/DvfQOeeLby8OlTz037ac3VUMxHFB+FSiQgBzKQA6nIZkuKORkW2b8UGIY5ntOr2sWcvQ4fJoNRXch60mQlk1vVNOgoAtSE/BrFfjpgAoEH6mbNWLi+4+88uGmvE83N/A0Owv78U1nZ7Pc3r4zt+1zEamfbWk9PTX1o9uDfx0/60clFpRgElRcAyqsAek1INWCEqxEN7UM3cIxKCUOSEvwkBvDMAcBT3i47wlaKYqCCishB6PoEbJx/k1RXFv28mT3zU/vem/Vlos3bG88lR3gWNiZL3KG6+zssXDHrvOGTpw/8Ir7apacpI8EBeJiECXowWc48JsuyPDgCyfhNxLwaVXwGzH4wh6UcEpYMPKDiWGY77TSlhVyNRuDqlahmzocZ5QOQ+8/JZf8pfbdyLj52/qv3VJ/WkNzCzvAsbDzi/DlzkmQl6xtPvepsfMGXXhzFfxqpai8zSQonAKFbEglcSgl5ZCNcsghC1LIhWQms3nmHkhzxHoaP6AY5hjDypLdWDEOtGiVdJGiKH3hzvnnkhUNB2Tu+Tv3BDy5oGACVFAFKoxANjyc3N/D2be5rcVPvTR7yIvLBr71WeNlG5p3n8rPa4aF/euS1Zpbc19fvrX3XTWLq//55lGQ88pARbF97fS91bf9DbKKGYY5FtfOyKiAZFZCNqOQzTgk04ZkiGE2nxpDTjACnxoTVtC6C0l3s54UKZDhiBkcQ6yvUYkFCsdBeiWoyBZGMZqDk/rZ+OlvY7jsvsyy36ffrZ0wZ23p5s0bT+HnNMPC/g2z0Le3oPurS9b3+aM1PX3OdVVQCoYLQQ+6kDSPfdkZhtlXbZckQSEPZHpCqHUbctZwStKtbBXuQQ57ID0BClZB0qKQwhYo7GVnbyxRlfcpA/Upxw/MDP7ltwlc8sfkZ9eOeG5y5QsLHpqzqvGixg4OWGFY2L9EyEU0anN72wGCvqMN3acvXd/7bvfddK8BNroZETGUonrCv91Iw2cks5+4+aHGMIwLyUiCNAeSakPSLCiaBUVNwBeIQdYtkfuwx+nNdLOtdluclRcmQFeVw1dciZ8OcHDp3aNx/bApk/42asGIN+evuHzzjoaeLFAMC/s3pWNnLiAm3es7kTvto/V597jveudea0Pq/aRot2uuiEkNj4Zs1oicYtUCafxAYxjGgaQ76KbGkKNG4Vfj8OnZrp6WhM+sgS+UEYIfiItB24JK0JXDIBdG8KP+1fjVH55BePAr0x+umRkZ9fbKGxZubDuvGeDJdYaF/fswb9XmCx8cPcf6l996oCuHgYriUHQXkmFDUuOQNAeSkYRiJqHoLhTVgsQrawzD7BF2LYGcQAw+zYFiVoOMGpBWDTJGg4ozoD5xUH4cP7k6iUv/MBa/HTJ10uCn3xv09JvLr1u4ett5O4Duf5cA2SG6ik2dkJs7WegZFvavn3IH5Hc/3XnxoKffGXzx75211PcpYbMYqoUUqoGsOZCNBBQ9DkWLQQ7EIBVHIQWtrOhzK55hmD2paUmRXV4cB+WPBF3xBCjvKZxUGsF/3vssSivem/bXZxZU1Ly5/KY5KxsuamrbX6h3dAfqc4EGPjtnWNi/Xdu9wb8ncW3FluYzKydMf+i/7nkWcjAN6lMBCjqgUBKS6YrJVC0OyRT/LRsWZM2CojmQ9aQwhTBcnn5nmKNhYv2ATRX3a77+Lf4ezQUFbVCRBSrwQH1j6HG1jV/9eTxuTbw2vuyF2Q+Pe3th/3kr11y4rXV3jy80v2pjsxiGhf3bu8a17/sUvKEDp9qvr7y794NPL/mBKlrupNWA9My+pDUtLqZWDeHstGedTdL3+DB7Yjedh+cY5si0vtUEKJgQ9+QenwjNA+kpcY+qlhhK01yQkQGFqkFmrfCcCEVAIQtkWOLeNrLtcm0UfIYNWY+B1JjwV1etfSutRka4SWppMbnedxjk/ME443oPvR+bjMfTr4zIvPLBLa8sWJ23eG3DuTtaP99aZxgW9oPO87PXGeqjE2eerGcDEbRKkBb9jnvnXKkzzBHxRzcc5Jo2FC0OWUtA1mwxmKba8BkeZD0OWY9A1hNQdEvsjKseKCBa5ZJmQwmlIIeS4jjNyE6r6zYkzctmk6fE5LoaBwWqQIFK+AoqcGogjl/e9jRKh78+7W/PLB5RM2v5TdOXre+9ZPPOc9ub63NZRBgW9sPEWxtaLvuD81r1Wf0jyC1IQApkIGsupJK4+OTO0+0Mc1QNqvl0Gz7Dgk+Pw6fG4dPjyNHj6GbE4DOSUIw0fIYHv2EjV48hV6vECUYZcvWIqOqNJKTQ/uIdEVV6KCO6dMWV8BUNwU/6V6DPw+NwR+q9OmfairtmLlx/6ZLV287dWL+bTWEYFvYjwdLtbWcPGT9r4D/fVI1uegRUNAKSHoVs7rFxTIP0JD8sGeaoG1SzIRkuZN0RGyt7jspUC5KehqRnIGkpSKqbtXO1QHr2iE2zQcVRUCACSY8iR4+guxHBD0pjuPyB0bixatrE4ZM/fvyFRZu099dtvWD19qZeO1o6uK3OsLAffrOZfQMoO1o7uo+ZvXZAn4fHLuqhjQD1jYECNsi0QOEY5FAMftNCruZC4WqdYY7KVDMykuLDuZEBhWpAoVGgcJ04OzfjwgBGtUGFFqjQBamjkWOMwg80Cz8ptfD/fpeCMejZGX+pezsyet5nN8zavPOSjTsbT2nYxaEpDAt7l2L2moaLfhd/re6HoZGggnKQkYI/ZEHWs4M0WgqS6sCnViI3MAyKGuUhOIY52tLNzMy+cBTDAxUnQPmVoL4VoMIYSHPQPezg1KtjOPPaKP73vloMqJw2ZeCERUOfm7vZePez5otXN7X02tHSypU4w8LeVdnctLun9/qSO/7zjuQWKhwhzs21FKSgB0VNiClazQEZHmQjCcVwkWM4kPlByRx3q18HOT70e/+eb/J3uCKiNGCJ7lswCepTCcorRze1CqeFyvGzAVW46Hf2+rw/1X5w49CXJ5Y9v/ThKYvrixZvaj93w66OU5s6Or/3WlknduZyljnDwn4YmLF062U3Vk6deJoxGFRUJgZgjGpIZhp+IwVFrYFipCGFbFA4BjITICMNSX86e87OE+7MsX4m7YE0D5KeFJbIugdJcyFpzr7h0f3OqkmzIRvOgUFHmgXSElB0G4phQ9LiB947RlaADU+slRkOJC0GWU9A1rNBKJqd/dCd/dFw90tJ9A789wYcUX3nlYOuGgkKRHBivxR+fNMoXPD7WvzqT2M+1Z96ccZ9qVlO7OVl973yYWPeskacxQ9yhjlKhL1pf9/kVuHtvmZ7c6/YlPfvO+fWmt3UN/YdpttZ0JnjpHWtZSBpaShmNSTVg09PQlFdKKoNRfOgmOKIStZdyIYLSU3AFxKDZ3vPszUXkmYjx3CRG/agqHFIugXJsISBU8iBHHIhhzxQyINkulB0B77sFLtsOJDMbBKaZoGCnmipF8azLfQqUN4IUFEFuvfz8JOb6/DzP07ApY88v0IfMnHGH9xp1WUvLnp4wuxVpas+/fSMXbu4cmaYY6Ni7xRmM7M/3nJRvyEvTu2hDwcFyvmcnGG+akXMiIOMGCQzDtIiICOWnRKPw286yDE9SMEEJM0Wwm64kEIeSLMgaw4kwxMmMHoapKbEwFp4FORwCrJhQdFjULQY/GYc3cwYcvVKKCEPVDpG+KUHPFCRIwbZ8iLC6bGgHD2vdnHGjdW44O465P9t0vz+I1+eeof3el35c+8+/Pysj405K7dftGkXeLWMYY5lYa/vQK7z6oe48M6nRatOd7PmEizsDPPFe982FKMSklEJyYiCjCgoFAeFbFCJC59hIUeLQQlGhOmLaQlhN11IugW/EYMcqIIUiEDS4pA1C1IwIXbAQ6NBxiiQmhS2qoURUH6ZqLyvGAT6zUDkBkbix9c6+PnvR+Oyh5+HPuLNGTc4syYOHjNjUPLl+XdMnr0iOH/ltgs2NLSf+tWW0M0y2nbmdraynzrDHN3C3troR6twdPp4Q/PZd7lvVZ8UToACLqSS0aBQKmv9yjDMlx05KVlBlnVXVN5mWtishmogaa4IPDL3s0rec6wVSkIqqRbn4ME4yLRFpZ8/AtR3GOjKEaC+lcjRbPzwmgzOuWMcfv3XlxEYPgu/c2bWDX/6zce9l+bf8dysZcZbH62/7MN1jedsacFXZ4u3N7JwM8wxKeytTQecn41dsHFAn79OXOTLKwcVJUBhS1QeqgNJS/F5OcN86eCcCymQgqymIakpKHo1FC0DRa+BomWy0aKjQCV1wje9OCHywgsrQYUVoL7DQcUjcaJZgZ/elMR/3T8eeYNexLXWrMkP186KlD33/sOjZiy94YV5q7S3Pt582ZKNLeeubkKvL80T76jPRev27l+WuNgIsLAzzLFcsa/ehV4Vz73/0D/fWiMeNsUWcktSkNVKSFql8HrWPH54M8xXCbuRgaSnQMUWpEAcVFAOJX8k/PkjQPnDIRWV4QelCfzsljR+9eA4GMNewY2Jt3Ff7Wyn7IX5D9e+s/Sm5+YtN6Z/uKb3vM+2Xrh0U/PZG5px6ne6r9ua5c9/cGcY5jgR9nkbWy+80Xpn4slmFahgj5ezBbm0BpJWC0lNw29E4NOr+IydOc7E2tlvbSyL+jmCNihoiSSyQBRkxHHC1RbOvH0U/vOBZ3HVU9NglM/Ag2MWYujzi1H5wqKHRk1fcsObC9dcvnpzU6/tjbu7N7a0Hv7qmVvxDHNsCHtLW7MM7EtHmvbxprzf/LluqS9QCdLSkHQPpFvZJCYRz0h6EpKeyPpA88Oe+QIMF5LpQTE9+EwHsp4QyX5qAqQlQUb2a4YDRU1AUSNQgpHszrYNWbcgazEoahR+LYpuRgyKZoH0JGQzBTmUFufVRgpkZiCZGcjZmF/hdJg909ZFrKhi2PCZCciGJVa/TBdk7tn7Tol/k+ZmI0cToGAUpFZBClaBgimRUKZmI0qDFmTNhk9PgIoqkRN2kHO1CylQgRNCUfQIR3BySRTn3FGHy+6pRZ8H63BjxTQ8kJqJJ0a/h8z0Fbe8MG+L9u7i1RevWLX+zB2N7MLGMCzsh4BGwF8359PrLrjD2UJXDYKkJSCp9j4TC95BZ76xqDt7I3klzYKkWSJfW9vvA6IqQkRkw4bfcJBjWvAZlhgSCzliMtx0xL62bkE2Hci6DVkVoisFY5DUKHxqFH4tDp+WDRrR4yAjATISYtVMj4HUSFbsk0KYVRcUzBJwxX8bHsj0IIdc5JQ46Ba20b0kgR7hGP4xXI4z+lXiP25L4bIHxyPw5Eu4IfYO7si8X/fn6pmx6PNz7qt+45Nbnnn3s9KZK7ddumDD9vMXrdt+3idbG876ZHvjWZ9sbzxrfePuUzc1tpyyaeeuU3Y2t3LMKMOwsB/iVbbW9tyql95/4PRrKsQErpZCjuGiuxoRD2UWK+ZbYUHShLCT4YqqOJSdBjdFtS6bKUihtMjfNlLCmU1PQlEdKKoHWUtC1tMgPQPSasSgmVkLMquzsx0eZMOBoicgF1eIYbOAJ2xPi+OgwiioqAoUrIKkRdDdjOKkcAz/cHUc/3iNhTN+6+BnN7k4+yYHF99dvbb0qWenXV8+ZdK96ZneU88vGZR4c+09o+Zuv+HZhU3hFVsbz1xX33jaxobmU7Y07e65fVdL98bWdn9TWwefVzMM0/WEfV1D62l3p99Nn1L0N1BRJShcB6lkLCjgoJtuQeaVNuZbopgOFCNruBLaI+oZULgWkuFB0SJQ9DhkLQ6pOAoqjok/F04JQxYt60++98zaAgUSWeFOggpt4ZoWiEExLZxYauGUazz85Noa/PSGGpxzcy3+83d1uPy+Z5ZqA6fMvHbkm5OHjHtvoDfl/TvGvLF0wNQFawvmf9Z4war6ltM37t59Sn1LC1fQDMMc3cK+q1lMxn64Yec5t4x4abxfs0AFFfDpFnyhJCTVBalpUSEZPPnOfDtkLQFJS4A0S2Rya7bwQjfdbCs+AdmwoZi2sE5VE6DiiNi+6JsQFMRBgQRyTRun9PPQ67pq/OstKVzw+xR+9afaT/MeHv1B+Klnp//enl77t2cXjki89vE9L8xeor29bM2ly7Y2nbW1rbNHcyeOeEXd2ckDaQzDwn6YmLOp5aLSIVOm5RYOB+m1kHQPPjWKHLUSPlMMKVFoFAs78x0mx8VshmRYUPQEFC0KKVABqWi4mBIvdkB9o6D8CEizceKAGpx28zj89LZx+O8/jMJv7h+zNPjYhFk3DJ888cHkW1bl5A8fGvX2hhve/mjTpSs37Txjewt42IxhGBZ2ANSe3WF986MVl6tPTpypBOMgfRTkUEpUWHockhaBbMYgBSpB4ewZKYvVUR4Xan/J0KP75X9G2//P2F/zd2Yd04IWqCguLIcL4qA+Ih1MDlbi1GtcnHXLaFx0zzj0fWTC/NCQF964Jfry+IeqZ8SqJi98oG7W2uumfri9YNW25tO3t7JwMwzDwk5f5/XcmRX1F5dsDF50e2S9lP8UKJiGotWC1BjksAcplPV/1+KQzIQIruAp+C5RAUu6I9a59lTDeyrj7Fm0tEek1T3tb0tMges1YuDMyAhfcdWFrCeh6EnIwRgULQ5FtyHrIoCEjKQYaAtnsoNtSXE+bqazk+UeSEuBilKgQgd0ZSXoiuGg/HL0vNrDv/xuPC67/xkUP/bC7OvKXp98X+YdZ/DEhYOSM9bcMWFhfenc1bsu3N7UzsLNMAwL+7ehub3zwLPFjp25APDih2vxy3vHgIqiID0NWXWQw8NxXVrQxR64B1mzoRgivlPWbPhMD4ruQAmlIWliXUsMnjnia4abzf9OZn0HPOFLrtqQNQu+oAVZjcNnOvAZLiTVyR6/ZESkZ7hWJIoVJYRJ0VUjQHkjoARj+IcBaZx/1zj8ZuA0XF05c9of0m9XP/nMu4PTry+9fcqizUVLlq8/d/OWnT35xmYYhoX9INPW2iR3tolKfeqitfjf3ydAvR8TVbgpTGZkLcYC2tWF3XBBgThk3YFiuHvFXgi4DVJF0IhiuGIFzPQgaS58ehX8+kjIwZGQtQooJXHIJQ7IiAsTlpJaIebBbNBIUSUobyjoN09AzhuEH19dhf939ygEBz6P38Veqxv67LyBqdcW3z7xnY/Dcz787KIVG3ee2djK/uIMwzCHXNjbdx0YrzhrXecl/3t3NaTej6Jb2BX7wyVpSEYUkh5lAe3S0Z8OJNWCrFrw76nEVUug2fBrwpnNZ8QhqzFIgSgkNS6c2wwXkrGfQ5vqggIWKJg9D88fArpqIE4yRuDnv0+j78DncKvz9viBkxcMrX5zwS0vz1tWMG/lxgs/29p8enMbeGebYRjmSAl7Z1vz3ofwkrUbzg0Ofm0WFVSBgnH4+9dlbWFtIexGnAW0K6+OGS78oST8oSTk7Bm6sqdyN1zIhgfZTIo2vJ7d+VazDm96BqRWi2G2vAooecPw45IY/udPE1Fa9hYemzC/zHlr6V0vLlwZfGflxkuWbW48awcPrjEMw3TdVvycjc0XlQ6pm6bkDYYUqoEcyoi2q+aAggkopg3ZYGe5rl2xizN1SbVAxTHImo3ckjR8pidCRkyR7S2G2mxhwapWgYrK8aNrIvjVAzW4Nvb65CEvLRs4/v3V/Wcu33Dphxvqz1mzo6XXzjZ8zpil0Q80+NGxvTs6mrlCZxiG6UrC/mlT5xm3Jd8bk1M0HBRMQDI8SIaN3JANn5aAErTh01NQjBQLaBev2JU90/CqJT6UFcVABTHIhofc4DCcGi7DP19XhUvuTuH68pcnDX1h2cCJizeF563ZfOGKLTvO3Njccso3fu+0N8tobfjCc/P2FhZ7hmGYwyrsnZ37HrxPjH1vaI/ioaIVW1oDMhNQjBhy9Bi66XH4gzbkYBqKXs0rbUdqr9ywRXLe53fLDeGFLs7EbWGnWhyHojvoXpLESSUuzrhtAq4YOnvJE2NmDX3mvVWlC9bXn79uR+NpO5sPjj1qEzrlRnT6v2h1km9YhmGYwyHsnU0yIB66kemfPHByvxpQkYfuugvfAcKd3YH+WpMS5lu1zM1k1szHFsIc8sQ5t2bv3T6Q9RgkMwZJj0A2I1BCUSjhqDgfV5Mg1RN+6EUuqNiDEqpDz9JROONaD7/601jcVP7KhMSLi+6Zu3zrhZvrd/ds3LWLJ9IZhmGOWWHPVlKvLFyTd97NdgMVxkFGDbqpiWyONYvvIQ0+0R34NCebTubAp7nw6y78qgtf0IakVkHSYpBDScgltSKxrKgapI4BFVqg/Er49Sh+MiCO866vbMi/15n/gPOaNX7Wuv6LNrSet3ZXx2kNnR0s5AzDMMdTK37x5tZz+z7+POjKIZBVB7Luwa9aYpqaObQVuxqHosbh1y341Th8wTj8WgJ+LQGfkYRkjhbJZMWeSCe7Kga52ME/9BuDn9+ewhUPjVryu/iUuswbS2/5cOOucw74wNbO7W+GYZhjUtibviCtqi370G9sb/f/wXunmgJVoNAoyGYKspqArDvCKpTF99AKe2kaUoknzsxDNqjEBZkJkBYBFUdFYlkggVNKLJx7k4PCh2vnPpiaZqXe+OT2D9bWn7+94yvWzDqaZbQ1+tt2c1IYwzDMMSXsXxVDOWrmJzecagwXnuClT0PSXSh6PBvuwsJ7yAfiSutAJWNEIl6oWji59S2DFIjix9cnceXDtYuur3xh0vDn3nv89U+29t4B3hdnGIbhVvyX8P76XRf88u5x2yh/uLCKNTOQDA+yaUPS49mkLhbgQ7tvngYVWaArRyAnfwT+/QYP5lOvvPHo+A/KxsxeM2BVQ9Pp/EZnGIZhYf9atu5q7fFI6rUKCriQNRv+YBV8ehzynlUqkwfnvn717Jt+bf9f84QpTJEF6hPFiepwXHJ3ErfGp46vmjTrgTcXrb18667OHvzmZhiGYWH/Voybva7/GddZIDUJSXeEqGvxbGynLVauOMFtr++633QhaY6IOzVSom1upECaA8kQTm+ke6BwjfBY1z0ohgWfYYPM0cLprTgC6vMEfhh4An3uH7XoL6PmRsa+uWjAgk83nd8M9lRnGIZhvqOwr9ne2ivw2IRZVLR/u93l3fSvqNAVNQpZi0M2xJGFSDezoGgWcswE/EZcCL+RAYWz5+WaDQrEQYVVODEUwyUPPouH6ubEJr67KPzx6g1n8xuYYRiGOSjC7kxZeFeP4idBxdxu/8b75sEqKFosm3wmMsoVNQGfFoVPi0POdjjkUFJU7/nDkRMYiZ//rgb3J1+zRs9adcP89Tsv2Apwm51hGIb5HsKezVXfw5ZdHT2vuC+1hNSYaBuzaH8j/HocOSEbSjgJMpKQ9CRkMwkl5IG0JEhLgYJxKIVD8K8DynB75ZQx495d0//91dsuaNrdwm12hjnCtHFmAXOsVuzulPl3nagOA5kZUEkti/Y3PWfPzh9ImivO1vWMGIILWKDCMpxijsSVDz+zqPKVFQ/NX7ftgvpdrft5rzfLaG/ws186wzAMc1CFfdUunH7Zvd4yCkRAuhjwYtH+hsIe8iCHPEiGAwpGQAXD0dMox5nX27gz9nLtG4vWXr56x65e/KZkmK5HczN3zZhjVNjt15fffVJpQgx+GQ4Uk/fU962jfd2ve6DCKlDBCPzo6kr0vj+5ZPDYWYPmr2u4oLmtnR8aDNOFWfHZ+jPnfrD0whWrN5+5Y1cLmzwxx4awN7dBLhr4/GwyPEiqBVmLwmccZ8NzZjZFTbMhGS4k3QVpLiQ9CdJcyLoN2XRFdrnugsyUSE4rTMCnVuIn17vQhrwyMzlz/R0rmzrO+NLXu5Vb7gzT1Vi/teHUWe9/dMm7C5ZevHbLttN2NDazwDNHt7C/vKip4B9vfxlUHEOuNhT+kAtS08eXsIccSKYFSY9B0uKQVQd+PQNFGwU54CJXj8JnuGJlzRwFKrBAhTGceet43Fk2tnbq3GUFTR28b84wR7XAb95y6qx5Cy95Y8Gnly9evfHctVt3nnbgwLHIVvg7K24OVWK6mrA/kpxRkaNnQKYHnz4i6wWfOb6EvTiCHNNGjmlBDlTBp1vIMV0oqg1Fc6DoLijggAot+EIu/uO2VP0foi9Vv7pwYx9eU2OYY4vPduw+/YU352tTZi4pevuDlZd+vHbzXm+JpnY+k2e6uLBvbm7veeUfkouoTwWoJAnFqAAF45C0zHG2smYhR42J/XPDg890QLoFJeRAMlOggAcKVOLfbrJ3/6X6jci8T+sv/KLXs7ONP7kzzLHCp1sazxg/bXb/UVPn3zD2zYUDpi9d3Xv/rzcBclMbd+qYLibsL8xbrf1sQBzUNwIybUhmBJKWgBQ8vlrxftMRlrm6K2xfzQwolAEFEqC+I3HmDQ5ut6eNeXPx6sv5zcUwxxfLNzeeWfPyuzfFJ868Z9D49wY/t2C9wa8L02WF/aHaN2MnGhakoA3SEqBQAj7DhqwfZ2fswTjo6gwolBabAWYSlDcMp4YTuLb8tcmvzl/epwHg7HKGOR5oq89Fe4O/vbXhgHt+1eYdp8dfmn/PPak3vfvjL1ljXv1gAJ+zM11K2He2ITfw5POzKD8BRbMh6RYo7EDRLShG+jgLc7FBoSTI9ED5I3Bi8SAUPTpuduatz27Z1Nx+Cr+hGOb4o7216QvFevmaDWdWTpj9UPjJydPVgS/MHPnCokfWbW8+jV8z5ogL+6LVm8/77/vHga5ykKvZkA0LFHIhaXGQmjzO3ONcKEEHVFiOf721unXQ84sGf7y5ITsw08iVOsMwBIA69nOJnP/plgsGT1w0qOCxyXP/+8GJa+8dNcdb/9nyM/l1Yo6YsCffWnvHqTeOARVG4dcTwhpVtyGpCZFGdswZzXig0CiQWQNJjaGbVgW/Hhc76cUxdFNHon/Zy1PfWbXtEn4DMQzzTVm4Zvt5j9TOqPjvO9M4/45n6/tHpk99denmPo0dfHzHHEJh/6JM78cmLisj1QMFq+DTE5DUOPymC8VwIRvHWEyrZkPWbMi6C8VMQinNQFYTkLUoqKgMv/x9ctvQl5cNXN64mz9tMwzzrWlsb/fP+mTTJX+ufjd23q1x9DKHou9jz8x/etba69Y0dPydpXT7bj6TZw5Bxf475506urIMfiMBn25DCsaRE04K57VjUNh9agQnhmLINWxQSQ0o6OEEdSSuHjkV767YdjG/aRiG+dbn8J9bcW1ta/DPX7Htghsq3ph4aj8PJ5sJXHx39dqBE+YO3Xe8t2fgrj4XrdvZ5Y45eMJeOnzqNLpipDBi0W2QaolKXbWz1qnHkrBbUPS4aL0XR0GBCH56YwpPPbcYqxrbAYDQ0STzZCvDMAeL1z9u6F06/PVpPYuHQgmMxE+usXBTdPqEqR+uK9ja2MTGVszBFfZ19Y2nFf5t0lzqG4Fi2Nkd7j2rX9l97mNs6l02HJGNXhTFBXfVbHlm9urSvcYyLTtz+U3DMMzBpqmtU3527uZw3mNTPsjRIqCiSpxkxJH/txfnp2evu/3jLU37VfE7c9GyMxe7eWCX+Q7Cvuizjef9+sHxoMI4SLUEugMyXJCeFG5rx4qwG6744FJYAdmII3/Qy/PfXF4vjGY6m2S07hP15rZOrtgZhjkkVE1d/sCFf3oa/mAlqNAFFTm4+I9j1kaen/XA+6vWX7C9HdyWZ767sL+3bPXF/+8PtaCCOCTdgWR4IM0Woh462vPY7f1iVV3x/xJMwG8mcF3lq5M/3NhwDr9BGIY5GHzRYPIBX29vlQFQR6coID7d1n7GkxMWD/73O59posJKUP4wKAWDcf5t1bindrE34f21pesbd53Kry3zrYV9xtI1l/3izlpQQQyS6e0Tds0Vrmva0ZfH7jMSUHQr6xyXhhLyoKhRUEEFTg7F8JfRsyNrmiGmU9sauNXFMMyhp1201Zs6O+X2/WKbZ6+qv+gub3r1mddXgwodUL4Dyo/hJ9emMaD81Smj3/7khuVbmnlLh/nmwv7msvWXn/+HMaIVf0y03F3k6DH41BiUkjpQaBR8ug2l75M4WRuKv4ydH0ELiznDMF2LCXNWlYaGvPTGD6/xQH1joGILVBBBrmnjqkenfBB5aeED7y1fe+DWTmuTjPYmPjZkYT+Qtz9ee+kv7qoDFSaOHQMazQPpLpRQUnQgiiI4SR+Jv477oGJ9K7i1xTBMl2R9M06tfv0T5P31Gfj7PgkqjIJCtaC8cpwUHIpf/SH56V9Hv1nxxtLNl39py7+DU+aOe2GfuXTNsSXsmg0qqQUZKchaAqRWoXsoggfGLbE2toG93hmG6Zq0NPqza7b4bFszhk+Yj/+4cyyoIAIKWGJGqDCGE/oOwy9vTW+7w3qt7tm5q8Jb2tCTXz8W9gOY/cm6iy7849OggvgxtdamhNOQDBe+oqH4beW0SWtbwcEMDMN0XdqaZbTW56K1wQ+0ohPA3JWb8HvnTfS62hOt+XA1ZNMC5VeC8mM4/bo6GENenVHz6kc3bW5o/zuB72xhP47jUtiXrtt+9q8fehaUHztmRF3WE5CKKiEVjUDh356du2Rjw7n8RmAY5migs71ZRtu2vaY1Dbva/BPnrwkHh7w4y19cDlKzuRZ6LSjPAl0xHGf0i6Pvw2Pnx1+Ye8+GhnY+bjzehX1jY9sp+YOmgvIix44JTTgDKhiGX9wc2Tbzk42X8puAYZijjfaWnblo27F3n33FjuYz7anv3/2vN6Vb/UXDQeoISCVRkBkDFUZAV0ZxslqBX9+TXPFI3bsV8zbuvvDrVvCYY1TYmzshGyNnzKCrqj63/30Ui3vAww9KE0i/8cnte1tc/EZgGOYYYN7arRf+3p6K0/pHQMUuyBwHCo+Gz0iAAglQsYMTjAgu/r2LJ0a9PnTRZzvO49ftOBN2AHSn+1YtXRUDGWnIehxSsAJKSUbsgetWF7SFdeHXMsjV08jRHPh0G7JugQwLFLIh9X4c97pvew1tHJXIMMyxRoO/saXF/+x7G8IFD784NzdoieG6UhdSiQ0yXVDQAwVS6KYncVb/BG6LTR8zY03TZfzaHUfC/rdx74+QQymQkYakJeDTopDMJMhIgYyuWb1LQQdywEKO7kHRXWEXG3JBecPxv/eM+vSNZdsv54vPMMyxzOrG3b1GTv7gkfNusxvkwgpQsBKyXgnFcEABFxRMQg5YkIrKcfq1Fu72ZqbfWLH98s0Nu3iS/lgX9tHvrLuh102js2luFnLMhPBUD6VEYEoX9X2XTReK6YB0D5KZARXH4S8sx8gXlz3CF55hmGN7ir4+F53iDP7dz3ZefFvZy2N+FBoJCoyEpMagaC5kPQPS0yAjCQraINXFiWYE6qAXZk56f722tbGVk+WOVWFfsKH1/AvvGgXKGwEyPCimLXLYzRTkLnvebkEO2yAtDtI8SOFRoLyR6PPYy4uWbmkVKUmtfLbOMMzxQX0bcke9s/qG/3nomc+UohGgvlGQWQsyaiAHE8g1EiAtDdIzoKIYTim1cM3I16a89P7qoi0NLVzBH2vC3tgJv/7I6BnU+0lQKAnSbUjhlAhOUbvofrtpQwonIOlxkJkGBR2cVDQUkZc/fGDv/1srRx4yDHNs09x24OT7wg0N592bfsv76W214uw94MEXroavOAYpEIPPTEHWUyKWu3AEflwyEv3Kpk+d9O5qbWtD534VPNvVHtXCDoAez0wbkauWZ1PQXMjhFEi1IKmxLukHT7oL0mJQTAsUSoPyy/DrP9WsWLiOJ0AZhjlOaWmW0Sk6lRPmrSm94pHxS/xqBSg/DlnLwKe5yDU9nFDiQdGjkPWEcOssTOD0Eg/XD58xyX1zyV0fbm/i5MtjQdgnvPNp6Rk314CKEpBD2Wl4NSGmzbuisKse/FoCshoVU6DFI/CnmhkOX3CGYRjByq31ZzwxbtbQf7+9rokKLCiqGDxWdA+y5kIOV0MyU1A0GxRyQEUR5BRHUPT4tNnelI/uWLmh8Qx+HY9iYV+9vaXXr/409lO6cgTk0hqQXgs5aCPXiHTBdTcHuaYDn+FBDsZBgTj+6WYPL8z7ROMLzjAMA+rcL5L6zcUbLr958PgJshoDFUYhqUn4jGoooTSkYCX82jDIoRioJAUKpkBX2fiBkcJVf37mA2vqwrs372Y/+qNS2AHQ76LT6pSCEeLMOjQOsuohVyvrgpaxFrrplSIzXnNA+ZXIe3LKBxsaW9hKkWEY5gvYvmN794EvfDj0P27z6qmgHLJeA6nYgz/swBcaAUWPQFZjUIwEyPRE6Ex+BXqGowg/9cL08TOW9N/ehu78Wh5lwj5h/sbSXgNsULEDCtVACiVBgXiXjGaV1UpIuidMdAorcGfNu7V8sRmGYb6at5ZuuCw0bNobVBQDBauhhGrgDyWg6An4jQT8RhSSFhNrxEZa2NX2HYEf3ViD4OAXZ9W++clNO1jgjx5h39yKnr3vG7WECi1QyAOFkyA11fVa8YYDX0isuVEwiZ79XERe228anmEYhvkCxKbQqh0tp5dPXvjwebckG6ggAlJHg/QaSLoLKRiDz7DgK82AtBTIqAGV1An72qIYfnhdCsawl2aMf3dN/8bPuXu2fS5NjrPhj7Swd4gL8tTT7w06obhS7IebjrioXc6cxoEUskCqCypw8G931OGlJeuK+GIzDMN81Wpz+wFCPPOjjZcG/zZpli9ggwJpULgWUkktJNWGHBBT85LhQg55UEqSoHA1qMgGFUXQq18E/Z96ZurE+ZvCTZ2fE/CWRn8HrxsfeWHvzO4rLt7Yeu65NyaaKFAl9tkNr0u24iVdOCtRnwR+9cCET5dt2XkWX2yGYZgvp2lv2luzLACt2rn79EGj3h78L9cmOihQKYJkzDSUkAc5WAV/sBzdtCrIwThySjPwmQ4oEAUVVYAClThlQAp3xV6pnvHxzsvqO5DLr3MXa8Xv4fept2pl3QGpDhS9omt6xRtxKJoD6m2haOBLs8W/vYE/ITIMw3wHXp6/psB44rkZucUjRNs9VAtJt5FjxODTopB1F7JmoVtpErklSUi6I2acAi78gRh+9lsH97hvenNW7byoub2dW/BdTdinrNpd9OPf1oCCFvxGtnLXbciGm72Ytvg1zT5iPvFSiQO/7oCutFE67OVpLOwMwzDfj2Vb2866Kz27+tQBGTFErXqgUAakOZD1OHwlaUhqEpJZAylcDQpGcIJeCdLrQIEMuhWPwMW3VmLomBkDF65rOK8BnLDZZYS9ubNT/n3FpFqlqApkjgUZUfiCCXQzkvBpNshMgMwEfIEo5CMh7poDSUshN5wE9RmGkhEvTucLzTAM8z3o2Df4Nur1xTdcfFtirZQ3HKTVgow6KHoCOaYHSRNFns+0IalVyAnFoOiW+BBg1gov+sIqXPC7Gox8afEjKzZvP5Nf3y4g7ABo2oeb8356XRwUdIQjkepADjiQdRtyiQUplBDOb9qRMqlJiWjCK4ehZBgLO8MwzMFk1oqdl1wz4uUpPUNxUH4MZFaDgjZkQ8w4UTAKyoaF5Zg2ZM0SUd8h0e1VCofhB0VP4Io/JpdUz1h6y6qd7afz63qEhX1HR2f3u9Mz0r6iJ0BmChQeBQokIekWlHAMkinOXCTdPTKWsmZS+NhfOQLhYS+zsDMMwxxkVjej11MT3h90zvUJUEElSLPEEazpCV3Qk5DDNfDrcfi0GCTdzrbtXSi6AzkYA+WV4YQSC/qwV2dMmL2i9PMrcsxhFHYANHvdzosu+l3ZeirKxv+pGUi6BcmoBGkRseOoJ4/IGTuZLqRgFJRXgZKRr7KwMwzDHAKaOyC/MGclLn1oPPxFT4GKoqDSMSCjBj7dg99IQApakA0PvpAnBF21hTaYGdDVY0QVf9VQ/FP/cvzRejX99kdrL937Pdob/WjniO3DJuwAqPKF9x7qFhwOyq8CBdMgwwEZlSA9AtLTR07YQzYkLQ7Kj0MfMn0GX2iGYZjvSdZgpql9v7309p25QCtmf1aPm6JT0CNUBSp2IIVHw2+66BYYAUnzQFoSkmrBpztQTA+S6YGMNEh3IRkulJIMSLVAhcNw/s3x+idGvzl08Zqd5+79Pq3NMlpZ4A+LsH+6o+WMokHPze5WMAxU7ImIVDMCMqKiYte8I7LHTkYcZFigfAt9Hn5pUf2ORrY4ZBiGORj77vtnvLftzEVHfS4A2rCr89TBz80b9C/XRTsobzD8Why5hgVfKA3FSIKCCSHemiPiYFUbcjAKRY1CMlNihc6sBuWNRE7+IPzf/U/DfmUJlu8ED9gdKmHfZ15wIGPnfzbgjNJKsf5gVgtRN6pAWlIEBRwJYTdjkEwHdJWF//3DM1j16dozAFA7+BMfwzDMQaezae+zddKcVdqV949eJOeXgfSx8Jk2uplx+EL7zUEZbva83YFsWFAMB1L216SSGqEfhQmc2j+BgoHPzp30/ipO5zxcFTsA2tm6o/sjNXMrpPwqkGmBQhakYEJ8OtPtIzQVn4Av7IKKHZxxQy0mzeLIVoZhmMPFwtWN5/0h9kb1acVDQIU2ZNXDiSEbPjUqqvVwGrIehc+IQzI8yIYDSbPEca6ZBBnZM/hgHFQwHP98vYW7Um9Xv7uu6WJ+fQ+DsAOgDze3nnP5Q88vpcKR4nzbcMREvHZkDGpkwxVn7LoHfyiB4RPfe5wvNsMwzOFj+c72M0dMnP3IP/Z3QcUxKGoCsumC1ARkLQ6fEYWkRUUF//mu635mZxRKgvqWQyoYhv+5N/XZkPFvD/wim/DmNna0O6jCDoAmLVinnX2tC8ovB5XsCYhJHfaqXTJc+EKe8Cs20qC+w3GXNaWaLzbDMMzhZXM7elbPWnvL+bc79VRULnzmTRcnmAnIagI+8+s0whWzWloSFLRBfYbgB8Zw5D3x4gcvfrAuyK/xIRV2Ydc6eNw8+AvKxDlJuEa0U45AO17WLRFQE6oGXTUMeQ+P/WD59jYewGAYhjkCTFu6Le//HhoDKq4AGR4UMwm/loIcdEX7/Uue5X7NhU9PQdIyIKMWZFSLIJpAAmfe4OLOxOu189c3XLD3e3XwHNXBE/aWnblAg399UxtCQ16BVGzDZ8RA6he1WQ61pawNWY1DKakVw3xFVfjptXGMnb1iAF9whmGYw40Q20Wbm84bUD5lil+Pggpt+FUPOeZXFH+aDaWgCrlGEj49BSp2IRkZ+EoyIpekKAmp2MN/31mzNv3KR7dvbdzdg1/rg9yKR9uO7gDovZXNF//6TxNWSH0eF0Y1h1nYJc2GosaE6YGeAWkJUN+heHDMOxZfcIZhmCMxNS/Eff2u9lPvGz3POTkUBRWWQVK/XCMk3UGO7kHRHEjBOKRgHIqegM+IQ9aiYjVOqwUVxnGSWobw4BemT1++tbf4nk0yC/v3oLGzc58FYNYhaMLsFaX/emumlYpi+85J9h+G0N1DJviSbiNHjYP0WkhGNWTdBl01Elf97aUP1mzZ1YtvMoZhmCNHfVtbbtXUJQ+ccaMFyi/bt/62t3J395uZSoJ0F7LhQDGzPvR6HHLYgz+cgD+cEFP0ahJUFMHPb/Iahk1Y/PiyTY1nsbB/X8OCjr+fRqyY8uFDJ4WSoKIYZC0mBFZPgowMJD0BxUgcsoo9R41CMjOQQjWQdQ9SUQJn9Iti0ntLee2NYRjmSNHW6EebmMmqmb/+pp/fUd1ABVXi3NxICmMxPQ7JsCHrngiOMZP7hN9wQGHx65IRhaSOBJkJSFdXgzQX1LcSJwZj6PPA84veWrzusi/zX2Fh/67s3pn7B29OtT9/OHwFg0XamjEKpI+CokeRa1YeoqrdhqJFIesxSIYLSUsjJ5iEdOnDuNmbPmFzK3ryDcYwDHPkmffxugv/757Ry+g3I0HBWpDpQAlVQNEjULT0N9AI93MrciK6mwoiOLWfjUcnLCpbsblZDE63Nfg72hr9LOzfkxXbOs+8bthLk5WCkSA9AymcgWzEs5+8vEPmPKcE45C0GEiLgzQPuaEMfPkjcPYtabz16c7L+IZiGIbpIuK+YvOFBY+9OJfy0yC1Gr4SB7IWBanf58jWBgVGIqdoJAr/MnHui/M/C+4/yMfC/n1NCrbsOjPv0RdB+RFQyINcmv1EpR2igBjNgS9ow6c7ID0BMmwooTQUwwVdVY4nn5kzmG8mhmGYLmRms6XlzGuGTp8iFcdBajWk8Cj4VVtEvX4XUdddSOFacfzbZxh+er2FR8a8h9Xb2790zqq5rUNmYf8mdIi2xzuf7sAl948BqQlQqBqyYcOnxw/ZZLyiuvAbHsiwIYU9cS4TyoCKMvh/t9ubFqxZcz4AQmsjZ/8yDMN0AdZtbTjtDufNOp+RABUl0U2vFQ6m30XYNRekpkElSVD/DKg4AV/fShT9dfzsFz5Ye8CsVUfrju4drTu6c8X+bYclAHpz+abL/98fx2yiwjik4irkhuKH0CvehaS5oKANqSQ7kKE5IH00lKsG48mJ8wY3dIJFnWEYpguxrbmtx8NjZkR+oJZBKqz5jp1dF7KWwAlqORTdBqkZULgOFLRAfYfgzJsy+FvNjBGrd7Tsrd4727Z3R5tIqWNh/5aV+zPvri499/p4U04wBimQOIR+8TZI9UDBJCTNhaInxL5k0AblJ3DubbV4ZemWPADU1tzETkUMwzBdhMbWBv/Q5+YNPClYDiqKf4dzdheSnoBfL0OunoQ/WA0KWvD1d6CEEqACG90LR6J08IvTXlnamMdn7N+B5s+tG4x6Z+UNp984DqTWiZSfQ5LHHoOsp+Az60CFCfjVKuQaEShqFUh/GlRQgT8lX3Hq29oO+ITWybGuDMMwR74tv6vjtIHjZg7NMR2xCvetNSAJMkdBMW2cEK5CN7UMfjUOSbVB4SRIrYFUZOHfb7Ca4i+9f8+x1sE97N+wCZBr3/z4pgtu80SLRK2ALzgcOeEkZL0aFHSRY8Sze+/fQ9x1V/jFazYkzYKsZwcxQhlQgYNe/SxMXLIpzDcRwzBM16O5rUN+asLsQadoFaBiF2QmcIJWjhM1C2SmQaH0VxSHrtiB121IRkLkh2i2OJI1HJDpgjQLVBhFTy2K6yumT1qwvl3MXn2V33zb9u4s7F9axXfKyTc+uePMW2og5Q+DHIxBCSXFRdJsSLp3kHbc7S+MdSWzGpRfjj4Pphat3t7AbnQMwzBdkM2723s+Nn5e2cn9HFCxAykQgy9YJcxr9OS3f/7vJQEKRCGV1IICDvwFw9HnvtpFo9/++IbG9nY/V+zfo0Vf8/aym/7tRns35cezO4tRyOEUyKgD6d6hSYZTbSilKZBahRPyB2P4s0seB0CdrXzWzjAM0+XEvaW9559Gz0E3PQUKeiAjAklzIGmp764RIUdsaRkZSOFRYv4qbxh+8tskHh67ILK9sXVfZd7RLGO3qNTrgVwW9m9AzdvLbjrjugSoKAIKpUB6EpKeOmRe8rLmQtKjIC0OKZjB2ddmWl9fsSc4gGEYhukyZFeSN7QCj4xbgpNLYqDiKpCWBump76EFFuSQK7zoi2yQWQ0pVA0qiiHXiOG35a9M+mDDzvO5Yv8eTJy7Mnz+XTX1ompPwm9EIenWodlxN5LC1UhPgPSxkIpcFD329OxVO3edzjcSwzBM16Gzo9Hf3ii85Xe0tuGJsbPxAyMhtp5Cye9csct6HIoeQ45uwRe0oKgOfHrW80SzQflluPSe2hWT3l93YL5Ix9HR2e0y/5A3lm6+/H/vGwvKGwo5OHK/FLiDvOOuumIyUndAWgaSUY0eejkerXuvbOdR0mZhGIY5nuhoavSjvUmu343ch2vmRHroVSA1+p01QjESUNQo/JqFbrqLnEAcSnEMcqAKcjAihvMKojjjtymMfGnhI9uaO3pwxf4d2y3vfLLxksv+MmEZFdkgdX+Tf/eAaffvJ+4eqDiFnKALKVgBCjmQ9RT+ZUACz85ZzVPyDMMwXW23vb3d37JL6MT6+t2n3hqdPp6KIqBgdiD6W65Oy3oCim5D1tMgvRpUnAQFXCghD4phQdYSYuq+MI7uagXucN6u+2Rr81ks7N+25dImVgzmrW+58MYRUyZSYQykefDpCUjBKCTTg2SmIKlx8aLrDiQjK/KaDVItwdea13ggNQW/7kHWq0BhV7gbXTkCl91Xt2zphuaz+UZiGIbpOjR1HOiHsmxT41kDRk6f4i8qAwWioHAGpFpQtAR8hgX5a4ReNvZ0bZOQQjWg0CiQnhb6YLhiRVqNQzaTINWCXDgCwcFTZ01b2ZnHwv4d2bll7Wm3JReM6aZnByVCKUi6B1m34dNjUNS4WIszXIHuQNKdby7ue89l3KzVrAiPkYpjuLFs6sTPdnaI8/bOBradZRiG6YKs3NZ4Rt+/1s2nghEgIw0KJHBSiYMcLQb5W61E70+2+NNTkPUkZN1FTsiBHKgCXf4U/uPB1+onvPlhKQv7d2TLbvT866j3Kk4usUDBlHihQy5kw4KkJg5ovcimB39JGrLpgYLf1arWBRVW4gdFT+Fv4z8Ysfe8vb2ez90ZhmG6IG+v2nrpL36f2Ub5FVBCKeQaVtYf/vtYknsgQ9iRS7oLxbCRa9qQ8oaB+g7FOdckdo+YOPeRHZ0QK3FtXc+xtGufq7TC70xbeteZ10TFhQrVgIIWJMMRrXnDFUIeTEAJJfeZ3Hzn83ch7j8sjSLx+scQF60+F+1sNcswDNMVeWbu+tKzbkiAdAukJSGrjhD376MDugtSbSHsugW/YSM37MCvx0H5CZwacvDX2jkVG3fhlL06wcL+7Xhl/vK8i37vrqeCMlDpaJCZhmQ4kENJSKoFCsRBqrXvzP37fFILjwL1rcQ/XxPBi/NWBPnGYRiG6dpEJn/wQM/SOMiohRJOI1er/O6bU4YL2fDE8axmQ86euSu6LT4wmGlIei16Bi3cVPUmPmlGtgjsOjHgR82FW7Ryw3lXP/XMNEmNgIodUDAhLoDpifP1bKX+vcTd8ECloyFdXQfKG4Ff/T756TvLN1/CNw7DMEwXpa0+t6GlzX+79/YYf8iGFIzAHxz5/fxOQkkxOKdZWZtzIfay6YH0jNijL4pBCVQhPPwtzFmHi7hi/46s2L7rzLusadUnmxViglEVA3RKKNuW/95pcba4kIYHUpOgvEr0eXjSojmrd1zENxDDMEwXpF2YxnzW2HJ68LGxs/zFI7/HrJUoEqVgAorpQTH3ZJhkPVA0F37ThaTFQCVpUMCDfGU5iv/6/Ow3VzVczsL+Ldk//nXEpCWPnHLjeFAgBiqKC1tAzQEF49lPWPudk3yLCl4ybChGDIpuQS55GhQcDbpyJG6ufGnC2vrG0/gmYhiG6bq8s2zLJf9+e6qJ1MzevBHJ2H8DyvpatzrFdOE3xZaVbCZF0Wh4YvLeSEMyykFmAmSOhmSMhlRUCd+Vf8EVD45b8tqH9X1Y2L8Hry34tM9l99QukwsSoGBN9kWPgcwqyGoSPiMD0lyQ6YFMR/B1Vf2eaUjdg2R48JlizSE3UA7dWjpj5daWMz7/IYNhGIbpOqRnLL/9H7XhoGA1ZDMKv2lDCmQgBSwoRiV8agKSejBSQ/czT1MToKI4/vXm2ta6tz++7oAd/M7DrxdH9QWcu2rnhTeVT0cPIwEqckAl1ZBKPOQaHk4sSUEJRqEEqyAbcUghG3Loa6L8DBekpyBporXvM2zkmAnQb56Cr7gSd0Rfrlvd0MoxrwzDMF2UZTvaz7oz8nqtlF8OOeSKjaqAC59hITdsQTaS2Wr+YNqVu6KQzC/Hz2+wGg4Q9yOwVXX0XsBO8WJtbers8cS4+UN/cm0aVJQAqS6kYAI+PQG/GkGuHoffiEHSY5CM+FeHyxiuuODaniQ4C7mmgxw9Dqm4Av6iYfjz6Lmxht3wo72RzWsYhmG6IHNWNF500V2Z9dQ3CjLrQGoMOVol/JoLMqqzJjQHP2SMNA9UEME5N9i7x85cOgAAoXVnLgBqPoyV+1E+Dblz7+7g+PfW9v+/+8fD13ckSLVBZhKSmQYFXUhBG0rYg6RGQMHYV/rNS9nMdkl3oBguZM2C33DEmUtxAj8IV+HJcbMH7/s3cI47wzBMV6C9fd/z2H3to7t6ahYoPAZSSRw5ajl8gaRYaf4eyXBf3aJPgowMqDCGs290WsfN/Lg/n7F/5+pdXMyFq3ef94fEW9Un9bdBBeUgIwO5ZBxIrQZpLuSQDcm0Rcvky/YXQ0nIpgvSrOwanQNJz9rWGuLXe2jlGPTMAiHuHSzsDMMwXY3Nza09rxkxYwoVVkEKReHTI1C0JKi0VsxeafZBr9h9egKKLj5MUNDD2Tc4rXsrdxb2b0ZTdoits6PRjw7Rmt/Rhu7DX//o8V/entgmXfEEqDgFKTQ2m9xjQynZzx/+C9YcSLXEDqPhicpfcyBpHmTdg2w4ICMFKkzgJH0khkx4f2B9B0e9MgzDdEVeWrSl6Gc32KCicki6DcmwQHrikIg66S58ehw5ehSSkQaF60CFUZxzg7277u1l17Gwf9tVuM72fVVzuwhuef3D1b1LBr8y3ZcfBxXXQCkZBUmPQtLj+63AuQe05WXDgU+3IWXFXdr79ZRIgNM9KCUZyJoLKo6ipxnFPam3vXWbtvAqHMMwTBejsa3D/+cx78WoIAYK14BK4vBrlZA169CcsatxSMEIco0oFMMSbfmCKpx7vdU0+u2Pb2BhPwis2t5x+uAJCwedc62zm/qWg9QUJK0GUsCFT0sgx4hCMSKQ9JjwoDfTUEx3b3IcGdmBOjMJMpIgIw3ZSEIxPWFlWxiBv2gIrovPmrxoO87jG4lhGKZrsWjDjvP+697x66koAikkKmpFtw+NsOsuSE3AZyQg6wkxpKe5oIIK/Ozm2o5nZ68Jf34AnIX9OzJp/hqt4NEX5nYPVkIKeKBgGj7DhaLHIauVyAlb8BnfIPLVSIFUF7KZhJwNBaA+Q0EFEVyXeGfyZ1s3n843EsMwTBehQ3RwR7y08JETzSpRUesJSIdM2P++E7z31wqi+NUfMp++uXLn5eLf1yR3HiJxPyYvZmd7o7+zZVuPjv0mJBdv2X3uY5nXy35ydQWob6VYSzBrQXoasuHBb0SQa3xNcICZAmmeaNFrNnJMkf1LVw1FN60c+rDJM+as3ibsZ3kdjmEYpkuwZEvruZc+9OwKKqwSHVjVOoTC/uWVfO5VjyH/4THz31vfcvH+g98s7N9U3DuaZXQ0+vdfR2tqaZPHzVnf//I/j1/qy3sKFPBAoTEgswZKKAFZLf8GF0cM1Mm6A1m3kGM6yA3Zws42UIUr/1y9aNbSzzg4hmEYpgvxxIQ5QyU1DgplvpXV+MFCMhxhmHbVk9CHTcHypk6IlemDH/l6XF7gD7ftPuevtbMq/vkaYQNIahKkJyGVpr7ywsimsJrdcwYv69lYP90WqT+aDSoYjv+6u3r9pIVrtD3fr62VV+IYhmGOJAvW7Tr/gnvGbaGiKKRQ6hBNxn9NuEy28yv3HYbbE9Ows70jlyv2g1XJA9TU3iFPXrAZff/yNLoHhgvjmqLYV3/iysb5SftV7pLhQTZTkANRKIEYpKvHgfLj+NffJlqffnfldU0d7CvPMAxzRMl2bu+vftOS+44Qz+/DXLHvDaQJ14CKbfQMlmHg2NlDt3d0dmdhP2jn8ELg1zS09vrb6Jkjzr3Ja/IVR0GBxJcMPziQNRuSZkExk6JyV21xVq+68GsucgIuJK0GpI8GFcVx1oAIyp5f+PDm1vaefHMxDMMcWWZ8uOGyn92cAfWtOuzteMl04S/1IAVjkEtGgYoc/LDUgvv6R3exsB9M2vdZ0r7yUVNeaNBLb3S/Og0qrBBpPYaX9RQWjnP+UBKKZmeNDhyQ6YJCaVAoDTlUC59aDanIhqIlIRnVoIJKnB4agYdHzY5sa27vwTcWwzDMESrm2prl+g7khoa99IbUt1wYlWlipXmfu6hzCKxm96vY9SgU0wapHsh8GlSYwP/c6X729sdrL2VhP2RmBvA/9eKHgy66u3o9FQ0XqUChWpCWhKyJFQlfKAlFtyGpMUhGQsTBhpNZ7+EvuJhBG1ScwJ3Rl2vf37jjgi/6UMEwDMMcHqqenfbAyUY5KOBkBTYF2fCgaBb8pgVJix8yYfcblvBI0T1IoTRIjYF+8ygKBk+du3zHrjOBnbnNB2EFji/0FzBnVcNFtztv4B9vqAblVYKCSchmGrLhQlIt+HQb/pAFWauCz4zBZ8ZBX/pmcEHBBJQ+j6Hg4dFzX/tobR9+jRmGYQ4TLQcOL89etuai//hdTT0VxLKhLUkR061b8BkJYT52KFrxugO/ERPW5JonCsaSFKSCYfBd+QT+knkDO1vbcrliPxTsidgD5PGzVvUv/Ntzc316AlRoiSCZ7AXy6RZkIwG/HkU3rRJ+/atS47JRgQVl+M8b41vGvrV8AL/WDMMwRwZ90OQZ1LdcOIrqKUiaC7+RgKwlDt1gnWaBissg6RakUAakpaCY1fBdnQEVVeJHRhlqZn56Ewv7ITt7b5b3pLata2g9begLCwb+8q7R26ioTEzPm27WOz4lnOg0C76vdSKqBWm1oMIEzrjGw6BnFw5e34JTAVB7+47ube3NPD3PMAxzyCbj9z1jH0i/Y+UEykG6B9LTkDQbOYYFWfvy9M/vX7FbkIOVkPQ4pHBSOJkGPUhmBlI4A+obxf/c+9xnC9fvPo+F/TAx75ONF96Zfq+21zUR0FVPQCnJCIP/YFo42Glfne/r0x0o4TqQOR5UlEZ3M46bq16asGjddvaYZxiGOYykpq+8/fR+MVDAAhnVkFQLOXoCsm5nxf7QTMb7DAuyYYmd9lAScrgaFKoWrqbmKEhXjsQdla/VbWpsPYWF/SDT3Nb+hdXz1lb0eGbe6lJj4NgZJ6tDQEWV6BaugWLWfANhj0MOpUBGLUjPgIIJ5BQ+iSserFsyeeG2IL/uDMMwh4dZq1ouOf9WD1RQBQqNEhW7FoO8JxPkUK286TZk04UUjEMKRuELJyGZ2cAxMw1Z9XByoAxPv7v+OjHJ/91c6fgifyvE+fuK7U1nVkz7+KELfv/0Fim/DEphDD71qy+oYligQAT+cAK+UAySGhET8wUpnH9jst55/q27trZ0ipW4Tm7LMwzDHCo+a8Xp/3t38lO6qgxUUgdJd5CjRSHrLsjMHNJ9dtl0ReUerERuKAFFi0DRYpCNGORQGlSYwKV/HLVixcYdZwI7cztbvr0e8EX+Hsz/bOcFj4x+p+IXt8RABcNAalqExISSUEwXsp6AzxRteFlPQC7xxBSk6YFCqWyoTAqUH8UPQwn80Xs3vaq+hRPiGIZhDjGFD4+eS33LoZgOpGACkiYcRSUjeVh84yXdgmzYYphOz9rN6mmQlkJu8Qj8OfMWtrW39eCK/Qiwua2z59Sl2wtuib82/pRwJXyBMlAwKvYUNTFYJwcikLUIJDUK0uJQTEeszukOZN2GYiRBhXF0yx8C9bHxM19fXt+7uTNrRdvB1TvDMMzB5uphk6aRasEfsrMrbqnsRLx7BOxmHUhmCnIoI75//kj8+802XvmkKW/vQDcL+2Fg94FnH9tb2rs/O/vTcPHDtbN/YIwU0/MBG6Q6yA27kE0LftNGrpmAolVBClRAViNQNAu5hgMlkAAV2yDVwtm3ZjB80qLHt+5qYbc6hmGYQ8BNsdcmUCgJX8jOmsak9rnRHQFhJ82BP+Qg10yAiqsgFZWjf9m0qfVtbbnfNgacL/BBZvXO1l7xqR/f86t7aj49QasABWKg4hiopBZkpiGpFmTTRk7IhqzFIQXjUDQLSrgGUuk4kDkGVGzhtNBI/CH+UvXSrY1n8+vKMAxzcLnVemM86TZIjYqkNy0JSfeOmLBLuoNcPYETtUr4S9KgYAr/0N/F5HlrvvVwNV/gQ8RHm1vOeXzs3BHn/35UvS8YBRXZICMN6ve0WG8IOpBDKShmUuxNhqvF+pyZEeYFhWU4ITgS//fAuGVTZy0paG7vPKAV09nWJHe2cpueYRjmu3CbPWOMMI2pzEa4JiEbR07YlVASuUYM/uKRUMLVIG00yPDQ78nxU5vawa34LmFwk/35O2tbL7l/1BzrP+6qrfcXDQXljxQWhmoKspGBL5SGpLmQNAeKbkHS4/CZlniDqUlQfgTn9nsST4ydNfTT+pYzDvg+rQ1+fr0ZhmG+PbfbM8aQ4ULS9sR1pyCbySN3xr7HJCdQCQpakPuNBWk2evWvwpi5mwewsHdBpi9a2/sB52Xr7OuqWim/TJznGGnIugOf6cBf6iKn1BUBBGocsuFBConfQ2oSuWoFQk8998ZrH65mr3mGYZjvyS3x18eT7kA29gh7GrJxZIVdMTxIugtZd+EvSUJWI5CCURgjps/4NgN0fIEPB237Qggmz18bvHbEy5PP6G+B8ipAxR4ksxqyHoekxaHoFmQtDl8WUi3Q1c+KNYjef8Mvboxsi01ZeN+WZnDGO8MwzHck9NQzb1BhApKeElPxmg0p5GajWw8/spnMrtq5UEJJSMEIfKYFKk7gn26pw4zFay5jYe/CNLdDnvDOx6UDRk6b8qN+aVBeDLKagqym4NM9SJoDybCg6FFIWgSkZqP+jCSoMIqeoRhujb42/r3l2y/m15NhGObbsR3oftmfnGWUlwDpY6CocUh6FeQSG6QljsxU/BdmjDhiBS9o41rrvcliBXpHdwDU3NEps7B3QTa14ZRn3/0kHB40afrJWgTUezgomAGVjAeFR4FCNmS1MhsT64KKo2LQrigBqWAEfvmH8dvclxfdtX13e3d+PRmGYb4Zi7fsOvf/3ZUE5SdAWg38RgKKmQCZThcS9v0EPr8KF9799KYPNzadwxV7F6WzvdHfud/g2+r63b3s1z+6Wx00cWZ3dSToqkqQVg3Sa0DFLmQtAUWNINeII9fc80lOmNqcenUMv7On172/uuEC8fft3LvzuNfkhmEYhtnLmLeXD/jpbxNiW0lLwW9awoFOF05wXUvYHVDAwklmApFJcx8QA9pNMgv7UcKqHc2nj3n74wHaX+tm9iwcCuobz648ZEC6B18gBn8wAp8WhRSMQNIToIANRYvi1/dkVjz9+uLr+HVkGIb5ah5KzYj5g5VCNA0HipGAZIjtJNmwu56wmylQYRT9hk2a2gzI6GyWv8qVlC9yFxywW7+1/tS6t1ZcV/DoM3P9RUNAmgfSMiIe1khC1mLwaVH4jQRk0wapCVAgjtP6ufht5WuT5qzedRG/pgzDMF9M8NHnZ1FeJSjkQQ4loOgxYQOuulD0LijsmgvqG8WFf3oG761uvFh0flnYj44W/a4D2ysrtjeeOWb2igF5fxn3QfeioaCiOKikTkxNGi5k04OsVcIXdkBmHSgwGlRs4Re3J7fFX1lwz+b2dp6cZxiG2Y83F6+4/JzrU7upyAOFXEihKshGHGTUQNKSkPVE1xN21QYV2+jRz0PZ5Pcf5jP2rk5H09eeg2+ub+o5/r11/a945Pkl3YJRsQKnWiA9CUmPQTLikPQkJD0DUl1QQTlOvMZGv6qpU1esXHUmv84MwzCgRsD/aOr5shMKykGhMSDDAhnlkM04pPBokJGCpMa6nLDLhgfFrAH1KcMtsSnjWdiPpSn6xtZTxryxdEDfB2vmn6RXgdRqkOqBAjEoagJ+PQ6fHodkJEBaHKRZOOu2sRg0YfHg1fUtvb72e+xuZCc7hmGOWZZubjn7138eB+pbIdaHdQe0p/VuuF2vUt+LJ8zKCirx679OXrFw7e7zWNiPtSG75rbTkzPX3tH7oVFLTr06JuJgA3ERNBOqhRJKIceMQ9GqQMUR5BaNQOCJ52ZNXbC6gF8/hmGOVyqem/3QyWYFKJjowiL+ZcKeAhVW4V9uqcHLC9YVsLAfS+fwLfuq6vrOjtyJ728I9xs5eepPrqkUQ3RqDag4A0mthl9zIWlVkENJUEEFzuxXiYE1bw39eM22L02M4xU5hmGORVZuaznj1/fVraCrRoLM5FEm7C4kwwMVx5BbNBzWlPl3s7AfS7Q3yWg7MPxl6+62Hs+9t9y4duTkyT8dYIEK4qDiUSICVo9BCkShGElQIAnKr8J//XH0+uqZH99S39Key68pwzDHAyMmvPvICSELZNRm2/D2USXukuGIFLrLn8Sf02/EWNiPE3a2IPfluZ8W3GO/5p1/a009FVWBgg4o6Ik3c2gMJLMWVBxBj1AV7ohPqXtr+cZ9/sOtO1noGYY55pj10YZL/vN2ZwsFbFC4TrS2jzZh121QKA26ciSuHfny5MZW+FnYj1GaOiE3d/x9+3zmB59e+qfo887P7xzb4NcsUH4cFEgg14hCCVSCgjboqmH4xc32tiHPvDNw5bb6M/j1ZBjmWGNNY0uv6ytfnaQUV4C0lHDt7NKDcl8k6hZkPQEpXAMqtND30YlYubn5DBb245R3Fm28ZMQz8x655IFnPqPCclDfGEjPQNaSkMM1oPxKdAuWoeCJ5+eOnrXihh27wb7zDMMcM9gvvnd3T71KzB4ZKeRoUciadXSdsWsWZC0KKVQDKkri1w8+g0WfbTmPhf04Z/HanedWvLjkofxHXprf3XSEH32wEnR1DcgcB8qrQa9wNW6tfH38e6u3cmocwzBdmm8y6PvSwo1FF9xZs4X6JkBaBrKRgE+rgqQljlju+ncTdhuyZkHRXVDQwT/fWoeXP/jyLSd+gxxnLNtUf1bVax8/YJS/NeMfwhWggqGggAUqHSOCZ/qW4bw7RjcMrHt36NrN2087cHCvmSfmGYbpOkeRbW1yW2uj/4t805dsaDz3ykfHL6KADQrVgYIJSEYUFLKOuvN10h3IehI+LQ7S4uh5TQ3qZi2/joWd+dy5U3uvZxesCd8Rf6XuX/qVgfoOFROXmgfKTyBXS+Cy+0cv815bdkdDe3ZIo72JhZ1hmC5DR+sXFxtrt+w67fqh4ybl5D0KMtKQS+ugaBZkLQIqTYJCSfG8O6qE3YNPS4C0BE65thZj31sxgIWdEeyuz8XuHd0BIdJbd7X2eGvZxsv+nF4QO/fmWkhF5SBDBCJQcQon97MRGjThjWkfbsvj149hmC7F/pV69ucbW9pPuSc+1csteAyKFgOFaiDrSeSaFhS1SgzOHXV77CzszDeh5cBPujva0P299TsvHjHl40d+c2/10hOLy0RcbJEFKqjCj6/1cKczo/aDDc3n8+vHMEyXqtyz3cRtu9p63Jt8yzvJjIK0GKSSGpCehqzZ8AcqoegxSGby6DpfZ2FnDgbrdjSdNvqtVTf0/duz80+7JiGShfKjoPxh+M+bolsqnl/40LqG3afxa8UwTFdhY9OuUx5wpqKnXgUKZoQJjZqEbNbAr9nI1aLwGTYonAKZHgs7c3yyaXfLKS/MX61dP3zSpH+9PtbqLywD9a0CFcbwf/ePXpZ6Z+3taxt3scAzDHNkh4Lrd5919dAJ005Qy0FBRyRdhlOQw9WQVQ9KURy5ugWfboGOtlW3LxD2kwfUYsy7LOzM17AbzXI7vnw47t1VTRffWz3f+/mt4xtOLh0HurIS3bRKhJ+YMH3KgjVFO3a18f47wzBHYJW3/tySJ0ZPlwqHgkI1oHAt/FoCkmZB0l3ImgO/6UEOxCBrNuTQ0deGl3QHiu5A0SyQauNH19fi2bkrwyzszLems/PvY1zXbt55Wmb8a7dc9vDLy067thbUexhy9Spcn5g16e3lWy/d//c2dLb7d6KDbWoZhjnoNHR0+Md9sLn//9yb+YyuGggKeaCwB8mMQwkljsqq/MtQdHGUQHoSVJTGhXePxjufrLuEhZ056Ex8a1G4tHzatJ/eOgHUpwI/Lq3Cn0e9G5u3cuuFvPvOMMyhYkdTc3frlaV3//wGD76rnoRipiBpaUhaCoruolvIO6aEXdZt0YY3U6BiD//34FgsWL35fBZ25qDS1ikEuwmQpy3dlnd/7UzronvHr6e+VTjrWhdPjZszaPHa5nP3/P523oFnGOZb0oiOv+saLtxQf96d0VdrTzfioKsikAMuJC0DWa+GYlRDKrLhU51jStgl3YasW0LY8yIwBk2asaZ+Vy8WduagsrMTf9di/2gbzql6aekD+QNfnn9qKIHzb03XD3/u/cdXb2/qxa8ZwzDfhfb2fTHVk2Yu0654cNwSKoiDelcip7QGvpIMJDUOfzgJWY0LMTS9Y0zYRdVOhgP6zVD8PvFK7Ve9ZvzGYQ4621s7uz/37qfGzZVTJ/zH7zL1//fwhGXlL33w8Kodzafz68MwzLcekNvYcO4DNTOsf+rngPpEQXoaSqkHyYyAAiMhh6ogh6MgrQpU6oJKjy1hJ92DpDsgNQYlbxiGj5v5OAs7c2hpb/SjbWdu5xe0299asuayh2tmRHo/MGpJ0aPjZ5e/9OHDazrRqwFfniXMMAwDgBrQ6a+evvSWX/3p2U8pYIGCFuSwB0V3IRsJyGYE/pIEZCMK0mNQSpMgLQ7aU7kfMyQFxZX4p2tdjH97WX8Wduaw0treJHd2NBwg3HNXbLxwxAuLHikdNn1av8ETMGH2itKm9mw6U9tOnpxnGOYAPvzoo3OMkTNm/PCaFOiqEcLb3UxCNhOQQzGQFoekp8S5up4BqSnIWhJ+zYUStI89YTfSoKIK/Pd9z2PW8oZLWNiZLsPKDTvPmPDWh6VDMm8OvL/8GevZd1eFN3d09ARA6OQBO4Y5Jmn7mnu7bd9q7dKtOPvxCR+N+OWdtdsoPwEqToAMC6Tvt8JmWOK8WfNAqpetaD2Q6kA2XEhHoWXsV8e2OiDNBfUegWvKp0xpbOn0s7AzXY5VW3ae/tpHq/skXlp0z9+ciSNeeeejvMZdLdyeZ5hjjObO9r2i3tnR4O9o2/GFZlZrdrb1qpq04IFL7kp+doIRBRVbQtC+kfgdaxX6F4m7B7+ewGNjZ5V93WvObzzmCLCv9b6xueWUBZ9tOf+FGcu1SGbKA+8uXHnxjt0t3Zs7Orl6Z5hjQtg/dy+3N/iBff4Wnza1nRF97dP7Ln5gwtrupSlQwAIVlMOvxcTAGCPIr8TPbh+FqR9uLWBhZ7oeX5ChXN/akbtuR8Np02Yvzhs39S3M/mjVRVubmnvw68UwxyabG3f1rJ72wS2/vjez4mSzAhRwQMbToNDTkMPVkLTo8VGJfxMMD5Q3DIG/PTNrewe6s7AzR9d+fEd77tbdrT3e/2T1Ba/Nmt9nyfLV527eUd+zubWNK3iGOQb4eMvOs9231971m4efXdotMBy+QCUUNQZJtaCE0sKERXcgmS4L+h6CcfQMV6L8+dkPAyC0fPXMAr/RmK676tLa7p+3eNmFr7w5K2/B0hXnr9m0rdfWHQ1cxTNMV2+/t+EA4Wls6fDPXrXtoicnLB78X38Ytd4XGAkqqgKZYuhNKo6gmxFFj1AMSrACUjAGCqVBBos7GS4orwy/uMPdtmRD47nf5PXnNyFzFJzRQV60ct15L70xq2jRkk/O4+qdYY4ONm7Zdsr0JZ/1vj890zrn5iRIS4C0NMgQbnGSZoPCNZBDHnxGArJaBcWIwRfyIOnecS7q2WMI1QapCdzgzJgotoe+fj2Y33zMUUNja6t/245GrtgZpsuZVB3YGv5g/a7zk68tvuP2oXVjTiupBBWUgYJRSKEUyEiB1OwKl+6K82PT2+9HR2SmH2/VupqArFliYDBoQQ4lQaoFKorj9FvqMO2THXkACB1fvxbMb0iGYRjm+1fnja2nvDTv46KHx86K/PeDE9eSHgEVxfcJOJ+Vf2W7XQnGkKPFoOg2KODAF6oW+fGBCH4bmznp21wLfkMyDMMw35n3l62+YPiURY/3Gz556k9LnoLS+6+g/CGgvefkHgv3N4lmNVz4dRtyMA6ppBakZiDpNv7lukjH9BW7erOwMwzDMIdm5gWQ56xpvsh69cO7b614cfx/3eGsl4ujoD7DQH3LoRgeFDMFKrJBwSRX69+4FW9DUW1IxVFI4VGgcB2oz2DcHXkh/W2vEb9RGYZhmK9l2YaGs1KT3739trLnxvz3PaPRs9QGFUZBfWOgIgtKuBZyqBoUcCGpSfiNDBQ1+S3c4453YXcg6w5k0wXpGZDu4d9uiO+evWzzRSzsDMMwzLemEwcOZTUC/g821Z9f89o7N11XNnHyhXdVb/qhOQKU92R2GM4C6dWQw7XwhxzImg1Fd+HXXSiqA5/uwWckjz3f9kOEYjiQDBdS6ShQcQK5BU/iqWfnDwJAaGvws7AzDMMw34kF65vOr5q6+IFQ+UtvnPvHOpw6wAEVVIHyoqCgDQqloISSkE0HspaAYiTgM+OQ1CgUPQHFsCBrFhTdgaxaXLF/I1z49RgUNQEyR4GCMeQ/mJm/atuu07/LNeQ3MsMwzHFMU1Ojf+6iZRc+PGZhRB04cea5N8Wb/qE0AlKjoMI4SM2IyFDd3bemptmQ1ISo0sNJyGEXpMYgGTYkQ3xdNly2hP3G++ouctRKKIYH0kfjlAFJjJ+zvv93vab8xmYYhjmO2LarpceiTU3nZWZtuuW66MzJv7x7zLZev03BH06CAnFRnRfHD9wz17MirWXZEyW6xxnNcPf9OvOlVTlpaZCahKQ6kAwHUsgFBSNQzCiUq2tBZh1O0GK4N/6q19jc5gdEnG1DJ7gVzzAMwwjWN7WcumLrjjOnLN5c9NCoebG+92fmn3X1MJykjwQFIyIeNZgUZ+Z7d875XPzQCLsHWbWQW+KJjkcoCTmcghSMg8xqUGEUfR+ZOP/DDQ3niLP1Rj9X7AzDMMdzW70D8rrGltOWbNpx7ssfby4Y8dKKR0JDX3rj7OvKcII6AqTGQYEqUDCerb4dkJGCFEqz8B4WIxobihmHolWBdAsUqgZpGUhmLahvJc4eEGt9adHGou/7PuCbgWEY5ijeKV9T39Jrwaot57+xePXlj0z8uCJU9hr+43cp9NBHggLlQkDMNMjMiOQ0I7nfGXkcihaFokVZdA8DkhmHEopADoyAbNogoxqk1YCKXPxIL0PspcX3HYz3Bd8cDMMwRwm7mupzV6zfduZ7H6+5ePTby254ZOwHFcGh0/HPt4yCVFQJCkRFVa5a4my8JA0qyYBCGciGJ3zINREqIulx5JgW/EYCkhZj4T0cmAlIWgVyQ1HIpgcyakD5UXTLG4KHUjNim3e19wRA6KjPBf4+JY+FnWEY5ihnzfaWXnOWb77ouVmfGIkX3rvnHudV7/KHJ+Ls6+Polv8k6KrBoOKYqPyMWlBxApJuQwl7kA0LFKgEFVfAp0fh0+Ig1YZkJkUYi+6K5DAtKSp6Ft5D7gcvl6Sg6HH49TgolAGZGfh6P47+A8dizY5dvfZc947WZpkrdoZhmKOcjTsbT/lg+crzn31vRbjyxSUP3eO95RlDps644I/PoKfpgHpXgK6KgYIuKGCL1TPDg2K6UHQbvmAcPj0Ov5mAz7Qg6xZITYA0G4rhwR8Wu+ekxiHpNmQzCcn0QHuFnsX30KyyZdEcSFoKuYYLKs7uqxfEcelfn1kxb9XWCwEQOpvlhtY2//d9L/ENxTAMcyho//Kq6+PtOPud5fWXjJv1af+y5+c9fG/qLS88ePL0/7s3gx9dkwIVREFXDAflVQgR1zyxSx7KgAwXUigryroNSY1D1hLw6TYUPQFJt0Tsqe5mz9TTID0FSXch6YmssFuQDUf8Xt2CZPCq2kE5Q9ds+HQXsuaJD2BaGqSnIelpSFoSuaoLRfVAWjXoqnKcd1umYfLSHcH92+98xs4wDPNlg2WdbfKh/h4dHV/dMq3f3Zq7dF392dMWbsxzX11216Oj3iu7JTJ9fO/HXlxywd1jcPp1HqioDNR7KCg/Cir2skKe3Q8/YO3M/o6GL5//c7zKdsgS2nQHStCCorlQDCHosiFEXdYd5OoOSE2B8qP4t1syuye8v6b0ULwv+QHAMAzzlZV30zf6gLBlF3rOWbb5oufeWGAMHj9/0M2J2ROKBr40+7//NA7n3FGHH1zrgYrLQH2Ggq4aCcovE4NuugMyHEhhbokfE613w4Jc4kI245C0KvjDcUhaJSQ9CtI9UH45/uU6uyM9a+Pte9477W3NMgs7wzDMEVovW72ttdecZZsvSr++8vYh4+cNvCPycp32+LiZv7736RXn3pLBP12TQE5JGhRMga6qFO30wgioOCIMYTRbDLqZYniK9Owgm8GV9DEh7CVJkBGHz4zCH45BKhoJ2UxAKXFB+eX4cWkVql5e+sCe91TbrgY/V+wMwzDfh879q6OduYKswQs65a3o7LGhs+PU97d1XvDMopbSylc+feiPybfTVw+ZNK3Pw2MXXfT7FP71BgunXJPGCWEPFEiAChKgAhdUXA0KPg1SE/AblcgJW/CZNiQ9e0Zu1oKMTPaM24Js2PCZAtlIQNYTLI5Hcyve8CDrHihoITechqJ7kII2ckvrQHkR/KRfFYa9uPTxHW3oLpzlduairUlmYWcYhvk+7mxtrXJDy27/9t27us9a3XDJ8ws3Gc7rn9z11zFzK64rf3Vy74eewS/vyODM65P44XVpnNI/idyQBSqOggoqQQURUFFcTDZrDshMiiE1PQky0lDMDGQtCVlLwReqhqw7IN2CHLIhGVHIgXJ0U8vRTauAX6uCX4vCZ4h0NElLiF1z5uiMXtUc+AIO/GY1fMEUpEAafj0NuqoCP72mGiNeXPjI5nb0PNTvcb7RGYY5ptixu7X7puaWU9Y27Drtox3N57z6WUOfujmrrxv2/ILH70u+5QwYOmVK7z+Owi+ujeInAzI4rV8NeoZT6KYlIQVSoKIUqDADKrBAxZWQtIRYHdPE+phsOFDCHkiLgfQoJCMGSauCHKyEHKyEX42IKt30xJ8JWpA0BzlGErmaC38gAZ8Wgd+Iw6fH4DNtKKYrVtNUiwXyqB6esyAHopA0DxSuhd9MQc4bjF/cbCPx5oZ7dnZ05B6Oe4AfBAzDHDU07m73b2ts7bFhR/Opqzc39Fq5YccZMz7efNnod1bcUPHC+w89WDPTGjDy5SlX/nUCzr89gx9fE8dJ/RLoXpqAP2SJPW4jCdLTIDUNCnoCbc/0eBxkxEBGFBSys5W4K3aQTReyuce9LQEybZCxH6YYgiPdRq7poJtmQQ7GIWdbtJLuQTKzZjBmEhRK7QtdMZPijD2UyqapsUh2XaMZ73NhOfuQtDgkPQIKuaDSFKjPk/jP260t49/f3H97Z2f3zx8FNXdCZmFnGObI0NEsH3g2/WXn1ztzga8aBvr788QmdMiNLW3+rfXNPTbV7z5l1ebG05eu2372nOWbLnpr6frLXpi3WotMXf7A38Z/MOL2xFtjtCFT8T8PTsSZt9TgxHAMimFD2jN4ptnCTS1ogQKWOP8OJMR/q9mvaV+39vVd18qY44JwGnIoe/xipiAZaSihNCTNzvoHCMteKhqJi+5Orn9mzlqx0ta6M/dw3a/8wGIY5pCxc3db7uadzT3Xbm88bemGXWfPW1V/4bufbLl4+qJ1vSfPWxOsmb7spuhzc+97aNT7GBCZA33YG/j1AxNx3m21+FE4iu7FI+HLH4pugTL4ikaACkfsmyzX9ziw7ceexDKNBYg5ROfoaiW6XW3DF7IhmcJvQNEt5OoWfKW1INWDUjAUhY88PffdNTsvPhL3HT98GOa4o9GPzh3d0bmj+7f9sw2t8O9oQffV23b1Wrml6YzFa7afO3PpukvfWbrmksnzVwQzMz68JTVj6e0VL3/80GPj5pfdZb9Rff3IFxEe9Bwuvv9V/Outz6PXgDrkFNmgvglQXgLUxwIVx0FqBUit3BcrGkyI1nS4WoRlGNXCycvIiAlzw4Ok8YoYc3g5UStDN60MueEEFD3bLVJjyFGjoKIIcoojuKZy6pSPNjaKTPWWRj8LO8Mwh+/MurXNv6lh9ykrNu48c8maLefOW7nlwlcXbe4z5f2NRc/NWWNUv7H0Fmva4rsjr3z0wGN1s8v+kHqv+jb3PehPvYiCJybj0j8/i3NucvGzm5PoEYqBfjMc1KcMlJedHi+Mg4oSguIIqLACFIiLNrnuiR1uNQUpEIUvOAJ+rRJ+PQpFj0JWY5B1MaxGhrBQlQwXkm5D0mwougWfbkHitjlzGOmmR9BNj0PSXVAoDdKTkEMuqKgcPzSG44GamdbKxvYz9roTNm/r0dbaJLOwMwzzjen8XBLU8s2NZ874ZPtl05ZszHt29orw028vva7mjSU3xV6cfd+IZ9585KkJ7w36y+h5kbvsWdW3RN8a32/EdOQ/Ogn/d/84/Nc94/GTW8fiH296GidfWwsqrAJdORJUEAf1qQTllYEKy0FXDBMrX2oSVOSI/ezwKEih6mzSWEZ4ZBsZSEYGspmBHLJARhykJ8Tw2Z7zSM2GHLTgDybg12z4dQ8+1YGiepC1JHy6BzkYgaLF4NOFL7qs2ZB1D4opPND5TJw5bH7wqpM1FaoBhUeDNBd05RP42e0ZxF/9EE1tu+Uj/UzgByPDHEtn2i1tuYnnZt3zi3sn4uw7xuBH/S2ccrWNk/olRbV8+SDQFRWgK6KgK6pAfRKgvl6WJKjQBRWWgYoqQMEoKBCFoiXgC7uQ1YSYCDaTIM2FFMqAjJSI/QzVQDY8seqlReBTI/CrVchRK/dCRhxkJkCmBQo5oJAN2bQhGxakkAupJCUmw00v686W/bnpwadbUHQHPt0F6UlIRgqkZ0SLXvdY2JnDuNKWAYVGQQqNAhXHIfV9Ar+5L7104gfrwnsHTVnYGYY5WE5q21tau/818RwovxIUtEUrPOCBjFGgYA3IeBoUGg3JrBZGKkYKkuFB1l34dAeK7kI20iJNLGhD0hzIhgOfnoCSbYtLqgW/6SLHsKEEqpCrxnCCHoUvGIOsu5ANsRamhFwopkgck/U4SNuTPJaApFmQNXFGmWO4kDUxiS4FE1B0B4ruwB9KQdYcKIYNv+FC0RwomkjOUvQkJNWFpHo8KMcc3uG5oIPccC0oP4qcYAWuj0yb9MHa7eeLe/Hwn6ezsDPMsV6xt7Xl/tl9DRRMQNbdbJvaFUKtullbUw+SIQRb1i1IWeGV9ZiI9dRT2V3vZPZHd694StloSsVwoBhONi7Ugl9PZMXZE3/GSGYd2ZKiyje8bGXtZfd9xeCbpHmQNQ+S5uydbJe1bEqW7ooPFpoNec/3ziJn/x2SxpU6c7D31IVvv2y4UAwbpMVB2Q+kFE6KHPW+Zfi366MYMmH2wPVNnad2tecAPwwZ5hiioa3Nf3/yrezal/253eyv29F2v8Me91ftgrNIMEcjHqRgEjmmB38oBtLKIZXY4sNpwINSNBJXPTLhgwkL1pc2dXTKXfE5wA9DhjnGhP2B5IwvEHaGYb4JPiOJE4x0tuPliHkQLQbKr8CppUk8mppetmhd43ld+TnAD0OGYWFnGCbbhpfUGBQtAsmsBRWPBRWORk5+BX59d3JF9aw1tzS3tO+t0ttbu8aZOgs7w7CwMwzzRWiO8HkvSYO0GlBRNXqZKdwVmVH90fqd5xwtzwF+GDIMCzvDMHsIuqBiD90CFfjV3clPx8z6bEBDR4f/aHoO8MOQYVjYGeYYrsI/PwzqfvGgp+GBAg4ovxI/7RfHHfFX6uav237B0fgc4Ichw7CwM8yxJ+ZBKxuFm8waHbmQDBuKZkExEtm4XU/E6GoOKG8Eeuhx9P7rc0vGvLN8wNZO9Pjae66Nz9gZhmFhZ5hDb/uqWZCDEZDhgEprQKWjQOEUJDOGHL0cOaGoMEsKZURCYMFI/PI2G0+Ne2fQZ9vbTz/anwP8MGQYFnaGObaE3bDhC0cha1EoQQc+LQ2fkYJkJEChKmGFXOSC8srwo9Iq3BSdNuHNFdsubwbkY+E5wA9DhmFhZ5hjrBUvMgUUzUZOMIqcYAQ5pg0plBb5AoVxdAtUIu/hiR/Uvr3spnogFwB1tNXndgWvdxZ2hmFY2BnmAGH3QEU1kIIpYVdsxEW1HrRAeRYuujOzfuizswd+uGn3Ocfic4AfhgzDws4wx1YrPhskREY1pH4TQdpo0OVDcPZvbTw0dm7sveUbL95zz3S2NvrR1iyzsDMMw8LOMF1W2C1IWpUIbulbhR+VuLg1NnP89I/W9W5E+95J9o6WJpkrdoZhWNgZpsuvujmggIceV9vQhkye+czcz0p37O7sLlbUvlzMOzt25qKj0c/CzjBMF6HBD4DuTc0We7ks7MxR791ug0KeiP/Vk5AMDz7TgaxG4QtG4NNikAwHZGRAWhpU7IGCaZxYmsJ1Tz49+bk5q4xNjS2nHG/PAn4YMswxw87c1rY23Jd5n4WdOQawIRlVoGAlJC0BRU9C0T0ohg1JiyDHTMAfToK0JMioBmkuegRHoOChcXPTb6+7fVVD0+nH67OAH4YMc8wgWoy/d2dzK545JgbgcgwXcjAKnxmDLxwFqVVZR7lqUCAFUj2Q4eAkswJX/Cm9JD114e1bGnb3PN6fBfwwZJhjiPrmltz+I6aBVBZ25hjYRQ/UgPQMyIiCzHJQaUy05YtGgdQMTr7GweUPVi+1Xphz95ZGFnQWdoY5BtncsLtn/l+fBamWaMezQDBHLS4oXAMKCxGXgilQcRxUMAKn/DaJ4iefm51+4+Pb17fiVL73WdgZ5phlS9Ounr0feka0K1nYmaN6cM4B9bNAwTjoygS65ydx9jUpGE+Mn+G8t+yuLe0dXKGzsDPMMbzm1gE/ANrctLtn74cmsrAzXWoI7msr872/b7/fqzmgPBt0VSXOuSmN30Vfq3th9mptRxu68z3Pws4wxw2bmnaf8puHJ7GwM4cX1RbvN8MTP6qWqLh1B7KehKx5kHUbsm5D0m3xNTMphFyNQTY9SGYaZKRBQQ9UkADlx3H5naOX3hN/y5u8aENwZ9bPnWFhZ5jj64y9qaXnbx6dDAraLOzMYTGDkUwPcigN0pKQQllv9kACsuFA1h3IegaymoKsWfDrcfjMGCQjDjIcyLoNRXcgm7WgQDXoygh8hRW48qHnFg2ZsGDg4mUrzuX7moWdYVjYWdiZwynshgfZTIOCNmTDg2x4kDQbsu5AMRyQYWWxIZsOfKYNv2nBr0ehmElQsBp0ZQV+1M9DaOirbzjTFt71ybptZ/H9zMLOMAwLO3MEW/GS5kAxk5BND6TGQcE4ZM2CpFZAMqoghVxQKCna9sVxUDAKKhqBn94Qx++SM+smffCZtqmh7RS+j1nYGYZhYWeOtJmM4UEJp7OinoCkJuDTbfgMS2Sg62mQmQGFUqCC4eihDcWv/vLsp0MnLRg4f/maC7a1oQffvyzsDMOwsDNdRthdyIYH0izIagJ+w4aixUGBKpBWB1JHg4qi+FH/KK4pf3nKhPmrSz/e3HD2Ae/f1ia5s+PYTFtjYWcYhoWdOYr2zV3IhgvFcCEbDnyGCyqOgvIroBg2/kEficv+9PSyJ57/cOhbq7ZetrHpS0JZ2ptktO/ojk4h7s3oZJFnYWcYhoWd+e7e7O6X7KDbe1fX9lTnkrH/7rkLUl1QIA4qikAJRpCrR3DGLXXoPWz2kpfmLi/atG0Hn52zsDMMw8LOHM5Wuk9PQVIdSJoDyXRBRgKkR0DhCKSwWF2TNBtKKAlfOAnSsq5wxRaoOAXZcNCrfwR9HnAXDR//xuPvr952QX1rJ++es7AzDMPCzhyRtbXiOJSgBZ9hQTbsvStqZDqQ9AQUIwHFsEHBBKiwElRQCVI9nNQ/if/6g4vb3BljnlmyvXRVa+fpfC+ysDMMw8LOHNE2vA2/aUMxRFVOmgsyUpCMDEjLgMxqkOYJQe87DCepI/CL3yW3XV3+2rSqVz954NMdzWd8oTPc7mY+J2dhZxiGhZ05Eq14JZwRlrB6GlJ4NMioFZnnhSlQXhSkJnDmraOhPvXczBHPvvvInJXbL+J7joWdYRgWdqarRqRmd83lUBoUiIGuGIycwjL8yy3jUPTYc7Mfqp0Rm7R4m7YJOOXza2p877GwMwzDws50uT10G9R3OKj34/hHczD6/rlm/sBx7w6dMG996cZG8FQ7CzvDMCzszKGprN3vEZ9qH/j3qA6oMAHKq0LPUAyX/fWFZfeNfsupm7nkuo82N54j3leNfnTyWTkLO8MwLOzMdzR8cUCmCzJtkJGAZCQgGwlIZhyKFoM/EINfs8SEum6JtTTTBoUd4dGuZ//7ABJiAM4YAwokQXll8PUdgh+HytD7oWdw/+gF1sR3loc/3Nx2zt+9rzoa/HxvsbAzDMPCznzn1bNEVpwtyGEbkpmApEUhqREoRhT+UAyKHoGkRSEbCfhMF4ruQtIc5BiOWFczHUihpJhuL7aFqAcSUArKcHo/C3mPTsSQSYvw0oLlWLx+G5oBrshZ2BmGYWFnDgV+04WiWSA1Dtl0oYRTkIwkyEyKHzUPkpGCbHoi81xLQNFj8OkJKFoKFPRAQUckqPWtwIlqHP900zPQBr04s+L5dx+a+uHagqVbG89uBPwAADQD4FY7CzvDMCzszCEhN+Qix7AhqxZkzYVkpkBGBqSloWjV8GujIAWqIalpyGYGFE6JdrsaAwU8UNDGiXoUP7/JwbWDJ8F9eRneXbHj4g31u0498P3SLKOzwY+ObT3QsaM73z8s7AzDsLAzhwBZTcCv28gxk5BUBxR0IGXNYiQ9BTI9kJEUg28FMVBhFN10D6f2r8Uv7krheuuNSanZG2+ft2nnhVuadvcU7w0+J2dhZxiGhZ05YtnmsumJtDTNgqJZUPQ4KFAJyq8CFdqQ1AROMqtw9oByFP85M3vwmNmDXl60o2DNzsZeO1pbP1d9N/qBevZsZ2FnGIaFnTkilGb+P3t3HhxlfcYB/Pe+m4UpBgRbpsjUOtYZp7SjpZa2o7YVy5FISPa9doPK0eJJPWrBaywOONYDJYSw97v77m4OQQ4hFSmogEqBUUDAFATGBohkIhAIEbK5IPn2j99LPKhTHbVA+/3jM/tHspuZ3Z355nc8zyNX5boNoUchCkoh8mfhguIoLp2cwi/+kMHvStYuj6/ef//WhrarmzpP5p65xc4zcwY7ETHY6YzBKEKP9zRwET2jSpOy9aqVkENSTLdEzbAhtBhUPQ7VsKEYcSiGDcVMuM91n2c6nylvc6BYjvy5Ly4vvY0JQhSF0X98AlfclW4fPXNpzf0LdmSqdzYHGlva+7V0gVvrxGAnYrDTl2kEo2hxqFocyidnkOtJCD0FYWagFiehWG7NuD8JYcWh6BHk6FHkGLb7PNudXW5DaHGoZhKqlYIw0hCGIwO/KAIxugQifw68RhyX3zkf1z361/2/D722PLyy5sFtdR8N5XebGOxEDHYG+1e9xGY58AbS8FiOO/HMhmqloFppKEYSOWYEqhmBYkRloxgrBeEvh+Ivh2K6wd3zPBuqEYOqhSF8YdntbWQJVF8Il01O47ppC/aPL12xauaSraVv7G4a0ZDFwDM+X26vE4OdiMHOgP6KM8qNJLzFGaj+FBQjCY+Vguf0+XcgAcWMQ9GjULQYehkJ9PYlkFMQgUePwWPFoOpReU4+NgSRPxeiKI6+4ytwzQMvYNyclasfX7SxZNk79YF9zbjkUwHe3ariFIOcGOxEDHYG+9d7xm4kkRPIQLGSED4Z4Ioeg+KLQRhVEL5yqHo5PP4K9LIc5PgiULQgRGEEIq8MIq8E/YvD+Nn9z2N82ZpVM5e9W5r5+94pNfuarnQbxHz6M+z8/LI0docjBjsRg53h/JV6tid7ur2pRhI5VgK9rSS8RgSqLyhvrlvuZbhCG2LkXIi8CHrftBhXTluB4rKNr8+o3lZauX73bVv2Nw070dnNC2/EYCciBvvZC3ZHXnLTk1DNJDymDbUoiJzCefBqQYi8MET+PPQPRHHNtIWYYm9YGF7zzwcXb264ZXPtkWFH27pyz/iMTrWq3R1sFkMMdiJisJ+FbXg32LUkhGZDjJkHUVCGgbcuwLWPr9v/SPrteGpt7d1rdtSPeq++acjx9pNsAkMMdiL6ejW1tucOn7lSBtF5FOyKHoeq21BNB+rpum5TlpUJKw1hxiGMKIQVg+KPQxhhCD0E1QxD0ZMQRgZKoAJqIC0vtBlheMwQPGa0531QDBtCj0HRolC0iHuxze7ZcheGI0Pcl5TT0LQYLtRL8aO7MgjMWvn6rOqaJ17e/qG+/YPmobWN2Uv5fSMGOxF94462tOX++rG/nXcrdo/lIMd0V8ZFMflopCCMlJxk5i+H0Bw52czKQLEyPSvqXoEovFYZFK0MihaCYthQzRQUPQ1FS0DRIlCMuGwoY6RkHbqWgtDSEFYaij8FrxVBru85fH/ccxj5UCXuTayviq3dN/W1PYfztn3YPLT+eOsgfr+IwU5EZ2HF3pl7/cxXzr8Vu5GAoskmLsJduXv8acl04NETUDUbOYaDXoFy5AQq5AhTLYUczYGnKAmlyIbQHaiBDJTi021Z4xBFUYiCoNxKLwzBa8XQ9yYHAyakcNU9GVizVuLJ5XueWbHzmG/nweYhjR+19Gtt6+ANdGKwE9G5EezDZ7563gW7bOSSgGI5UMwkVCMBRbehGm5jFyMI1QxBMcNQjBCEFoQwQrLzm5GSY03NCjm2NC8CkReCKEzAa6XQ9xYH37utHMP+VAHrL0venFG1sXTZOwcDNUfarmzMtvY71tbR53hH978/H+9u8aKL9eTEYCeisxXs2c7c38x49bzbilcsB4qVgjBkqHtMG17TRo4RlWfhxVUQxZUQ/rR7Hp6A8MXkKnxMGEJP4IKb0rh4ooMf3mpj+NTKPTc/9dKrD6c2xNPr6qasq2sb3tDZNTB7quszIZ1VAQY3MdiJ6Bx1+ET7gJ9OXSqHiejnW2mZnDGuaDLUvUYUnsK5EGNKIcamIfJsiFFhiIIILrw5g8vvXIQh9yzFDQ++sGfiMy+vmDF/S+mit+onvFOfvfpgB779jb7X3Vn+M0AMdiL65jU0twwcPD4GURSX08KM5BcaePLFftf+gq/1ec+1P/Man/i7mgPhS0EUJuQ2+g2zIUbPgdefwncnz8dVU9L47SML3xv31LLVfwytrAhWb334tZrGvJ2Hu4b8x45s3a1qd2dW7e5gGBODnYjOM/VNLYMuGheG8IWgGFEoRgyqEZOPZhyqGYOi21B0t/zLiEMYMQgjCsWMQTHjEFoCwnDk5TTTLQMzUhBmWpaG9Tg9gtSlxSH0sPxbljvq1Ei6t9vTrpTcSRgbhcifBzGqFGJECTyF8zB4goMf37cQ1//5pfe1p1dtvDO+fsnj1btLkusb7ttUe+SX9VnwZjoRg53of1fPSrWruc+pLrkaPXAsO2jABAdCC0G1olCNqBxGYsXg8cfh8cegGnH3UpotB5joYSh6GKoZgWpEofrcmnIjAdVIQtVtePQEPD1zxO2PH3V3xKnuQDESbkmZ+zNfHKIgAnFjWK7CRwUhNBv9J1ViyL0LMeKxakyYvWrVvdG1Vc8u3vDE/De2T17zj32jag+3sEaciMFO9P+r+9Txnhvd9c3ZQReOd2u+rXLZ3MU6vfJ2H003gK2U2/wlA2GUQ+gVEEa5bBKjx6H45GzxXmYU3zIj6K2H5CreKofwZ+TrFEUgCubJc/D8Mhneo+eiV1EQgyc5+PlDS1D47GpMiKxf9fSizU/GVtZMfXFD7biNuw7+qvZQy6XZkxxsQsRgJ6JPB/sn5nTXHW0d3Lc4A1Ekt9s9ZhKqFkOOFkOOLwqvFoFqxD8uMdMSUDQHqp6BVy+Hx6yC8L8AYT3vlpCl5O8VBiHyZ0PkzYbInwNRMAe9tTIMmpjE0KkvYuRTazEp/PaK6ZXbQqXLa6ZXrdt126rtdWO31zUN/aC5Y/CxTvThZ0XEYCeiL33G3jroO+MrIAodKHoKHn9G3jLXbXi1GHrrUahmBsKohNAzbhe20yvvIERBmQzuG0sgCmYj1yzDZbence305SgqWYdpznrnmcVbnkys3nVf9ab3A2t2HBi1te7Y1e8fOXnZkTb042dAxGAnoq/jvL1L1mcfPtYyoL81D2JsBkKrhLCq5EjRQve8e2wIYmwYnjFB9C4K4qJABD+4PYNrH12Kwtlv4I7UW0vmVm+aXvHm7jtWvLvX9/rOuhGb9x4atutQyxX7mk9dku3k1jkRg52I/msaDx0acMXEMvQZ8yQuLi7FT+6uwPBHlqC4ZA3uSm7CAwt2JKKv7J66dGPtuDU7GkZt2Xtw2M4DR4fsazxxSUNzx8CmbGcu30ciBjsRnQtn7e1NuSdajvVZ8G7zpO0HGoe+13B0SN2RjwY3HM0ObDrRkXuitd3b2n7u9kDvZgc4IgY7ERERMdiJiIgY7ERERMRgJyIiIgY7ERERMdiJiIgY7HwTiIiIGOxERETEYCciIiIGOxERETHYiYiIGOxERETEYCciIiIGOxERETHYiYiIiMFORETEYCciIiIGOxERETHYiYiIiMFOREREDHYiIiIGOxEREZ2T/jUA/fdM69MYw0IAAAAASUVORK5CYII=');
+}
+
+.icon.logo-pubmed {
+ background-image: url("data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%0D%3C!-- Generator%3A Adobe Illustrator 13.0.2%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 14948) --%3E%0D%3C!DOCTYPE svg PUBLIC %22-%2F%2FW3C%2F%2FDTD SVG 1.1%2F%2FEN%22 %22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%0D%3Csvg version%3D%221.1%22 id%3D%22Layer_1%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22 x%3D%220px%22 y%3D%220px%22%0D%09 width%3D%22720px%22 height%3D%22256px%22 viewBox%3D%220 0 123.1 43.691%22 enable-background%3D%22new 0 0 123.1 43.691%22 xml%3Aspace%3D%22preserve%22%3E%0D%3Cg%3E%0D%09%3Cg%3E%0D%09%09%3Cpath fill%3D%22%23231F1F%22 d%3D%22M50.487%2C2.04v29.034c0%2C0%2C11.162-1.299%2C11.162%2C9.604V13.201C61.649%2C2.818%2C50.487%2C2.04%2C50.487%2C2.04%22%2F%3E%0D%09%09%3Cpath fill%3D%22%23AAAAAA%22 d%3D%22M55.715%2C0v25.547c0%2C0%2C6.162%2C1.189%2C6.162%2C12.091c0%2C10.903%2C0.031-20.283%2C0.031-26.124%0D%09%09%09C61.909%2C1.132%2C55.715%2C0%2C55.715%2C0%22%2F%3E%0D%09%3C%2Fg%3E%0D%09%3Cpath fill%3D%22%233978AD%22 d%3D%22M62.077%2C12.941v26.422c0%2C0%2C5.359-15.01%2C27.887%2C4.328c0-7.008%2C0.043-24.683%2C0.043-30.525%0D%09%09C67.739-3.057%2C62.077%2C12.941%2C62.077%2C12.941%22%2F%3E%0D%09%3Cpath fill%3D%22%233978AD%22 d%3D%22M0%2C32.718h5v-6.399h2.848c4.388%2C0%2C6.852-1.996%2C6.852-6.55c0-4.427-2.869-6.349-7.018-6.349H0V32.718z%0D%09%09 M5%2C17.419h0.853c1.965%2C0%2C3.646%2C0.027%2C3.646%2C2.503c0%2C2.396-1.81%2C2.396-3.646%2C2.396H5V17.419z%22%2F%3E%0D%09%3Cpath fill%3D%22%233978AD%22 d%3D%22M16.699%2C19.619v7.871c0%2C4.304%2C3.073%2C5.629%2C7.05%2C5.629c3.977%2C0%2C7.051-1.324%2C7.051-5.629v-7.871h-4.7v6.974%0D%09%09c0%2C1.654-0.414%2C2.825-2.351%2C2.825s-2.35-1.171-2.35-2.825v-6.974H16.699z%22%2F%3E%0D%09%3Cpath fill%3D%22%233978AD%22 d%3D%22M33.6%2C32.718h4.7v-1.459h0.051c0.841%2C1.282%2C2.42%2C1.859%2C3.949%2C1.859c3.898%2C0%2C6.6-3.225%2C6.6-7.013%0D%09%09c0-3.764-2.677-6.988-6.549-6.988c-1.503%2C0-3.057%2C0.574-4.05%2C1.747v-9.347h-4.7L33.6%2C32.718z M41.1%2C23.118c1.897%2C0%2C3%2C1.378%2C3%2C3.014%0D%09%09c0%2C1.688-1.102%2C2.986-3%2C2.986c-1.897%2C0-3-1.298-3-2.986C38.1%2C24.496%2C39.202%2C23.118%2C41.1%2C23.118L41.1%2C23.118z%22%2F%3E%0D%09%3Cpolygon fill%3D%22%23FFFFFF%22 points%3D%2264.2%2C32.718 69.192%2C32.718 70.805%2C21.607 70.856%2C21.607 75.286%2C32.718 77.284%2C32.718 %0D%09%0981.918%2C21.607 81.969%2C21.607 83.377%2C32.718 88.399%2C32.718 85.477%2C13.419 80.485%2C13.419 76.336%2C23.733 72.418%2C13.419 67.477%2C13.419 %0D%09%09%09%22%2F%3E%0D%09%3Cpath fill%3D%22%233978AD%22 d%3D%22M96.7%2C24.218c0.281-1.374%2C1.408-2.1%2C2.764-2.1c1.254%2C0%2C2.406%2C0.83%2C2.639%2C2.1H96.7z M106.426%2C26.431%0D%09%09c0-4.49-2.65-7.313-7.227-7.313c-4.293%2C0-7.299%2C2.636-7.299%2C7.013c0%2C4.53%2C3.264%2C6.987%2C7.637%2C6.987c3.008%2C0%2C5.965-1.406%2C6.711-4.5%0D%09%09h-4.492c-0.512%2C0.869-1.23%2C1.201-2.23%2C1.201c-1.924%2C0-2.926-1.019-2.926-2.901h9.826V26.431z%22%2F%3E%0D%09%3Cpath fill%3D%22%233978AD%22 d%3D%22M118.399%2C32.718h4.701v-21.2h-4.701v9.347c-0.969-1.173-2.549-1.747-4.051-1.747%0D%09%09c-3.873%2C0-6.549%2C3.225-6.549%2C6.987c0%2C3.762%2C2.727%2C7.012%2C6.6%2C7.012c1.527%2C0%2C3.133-0.578%2C3.947-1.859h0.053V32.718z M115.6%2C23.118%0D%09%09c1.896%2C0%2C3%2C1.378%2C3%2C3.014c0%2C1.688-1.102%2C2.986-3%2C2.986c-1.896%2C0-3-1.298-3-2.986C112.6%2C24.496%2C113.702%2C23.118%2C115.6%2C23.118%0D%09%09L115.6%2C23.118z%22%2F%3E%0D%3C%2Fg%3E%0D%3C%2Fsvg%3E%0D");
+}
+
+.icon.icon-chebi {
+ background-image: url('data:image/png;base64,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');
+}
+
+.icon.icon-pc-light {
+ background-image: url("data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22UTF-8%22 standalone%3D%22no%22%3F%3E%0D%3C!DOCTYPE svg PUBLIC %22-%2F%2FW3C%2F%2FDTD SVG 1.1%2F%2FEN%22 %22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%0D%3Csvg width%3D%22100%25%22 height%3D%22100%25%22 viewBox%3D%220 0 736 876%22 version%3D%221.1%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22 xml%3Aspace%3D%22preserve%22 xmlns%3Aserif%3D%22http%3A%2F%2Fwww.serif.com%2F%22 style%3D%22fill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bstroke-linejoin%3Around%3Bstroke-miterlimit%3A1.41421%3B%22%3E%0D %3Cg transform%3D%22matrix(1%2C0%2C0%2C1%2C-74.9667%2C0)%22%3E%0D %3Cg id%3D%22path4%22 transform%3D%22matrix(1.20416%2C0%2C0%2C1.20416%2C-81.5743%2C-158.293)%22%3E%0D %3Cpath d%3D%22M562.305%2C328.826C530.644%2C291.595 484.241%2C270.142 435.374%2C270.142C343.405%2C270.142 268.738%2C344.823 268.738%2C436.81C268.738%2C528.797 343.405%2C603.479 435.374%2C603.479C474.934%2C603.479 513.204%2C589.402 543.338%2C563.766L479.072%2C488.195C466.876%2C498.571 451.386%2C504.268 435.374%2C504.268C398.15%2C504.268 367.929%2C474.041 367.929%2C436.81C367.929%2C399.579 398.15%2C369.352 435.374%2C369.352C455.153%2C369.352 473.934%2C378.035 486.749%2C393.104L562.305%2C328.826Z%22 style%3D%22fill%3Argb(22%2C160%2C133)%3B%22%2F%3E%0D %3C%2Fg%3E%0D %3Cg id%3D%22rect6%22 transform%3D%22matrix(1.20416%2C0%2C0%2C1.20416%2C-81.5743%2C-158.293)%22%3E%0D %3Crect x%3D%22130%22 y%3D%22436%22 width%3D%22139%22 height%3D%22422.932%22 style%3D%22fill%3Argb(42%2C62%2C80)%3B%22%2F%3E%0D %3C%2Fg%3E%0D %3Cg id%3D%22path8%22 transform%3D%22matrix(1.20416%2C0%2C0%2C1.20416%2C-81.5743%2C-158.293)%22%3E%0D %3Cpath d%3D%22M297.36%2C708.985C340.117%2C730.656 387.377%2C741.949 435.31%2C741.949C603.748%2C741.949 740.497%2C605.172 740.497%2C436.702C740.497%2C268.231 603.748%2C131.455 435.31%2C131.455C266.76%2C131.455 130.123%2C268.119 130.123%2C436.702L269.019%2C436.702C269.019%2C344.844 343.47%2C270.378 435.31%2C270.378C527.089%2C270.378 601.601%2C344.905 601.601%2C436.702C601.601%2C528.498 527.089%2C603.025 435.31%2C603.025C409.192%2C603.025 383.441%2C596.872 360.144%2C585.064L297.36%2C708.985Z%22 style%3D%22fill%3Argb(42%2C62%2C80)%3B%22%2F%3E%0D %3C%2Fg%3E%0D %3Cg id%3D%22rect3712%22 transform%3D%22matrix(1.20416%2C0%2C0%2C1.20416%2C-81.5743%2C-158.293)%22%3E%0D %3Crect x%3D%22131.234%22 y%3D%22421.93%22 width%3D%22104.987%22 height%3D%2281.365%22 style%3D%22fill%3Argb(42%2C62%2C80)%3Bstroke%3Argb(42%2C62%2C80)%3Bstroke-width%3A1px%3B%22%2F%3E%0D %3C%2Fg%3E%0D %3Cg id%3D%22rect3714%22 transform%3D%22matrix(1.20416%2C0%2C0%2C1.20416%2C-81.5743%2C-158.293)%22%3E%0D %3Crect x%3D%22196.851%22 y%3D%22403.557%22 width%3D%2268.242%22 height%3D%22125.985%22 style%3D%22fill%3Argb(42%2C62%2C80)%3Bstroke%3Argb(42%2C62%2C80)%3Bstroke-width%3A1px%3B%22%2F%3E%0D %3C%2Fg%3E%0D %3C%2Fg%3E%0D%3C%2Fsvg%3E%0D");
+}
+
+.icon.logo-biofactoid {
+ background-image: url("data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22UTF-8%22 standalone%3D%22no%22%3F%3E%0D%3C!DOCTYPE svg PUBLIC %22-%2F%2FW3C%2F%2FDTD SVG 1.1%2F%2FEN%22 %22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%0D%3Csvg width%3D%22100%25%22 height%3D%22100%25%22 viewBox%3D%220 0 1229 187%22 version%3D%221.1%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22 xml%3Aspace%3D%22preserve%22 xmlns%3Aserif%3D%22http%3A%2F%2Fwww.serif.com%2F%22 style%3D%22fill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bstroke-linejoin%3Around%3Bstroke-miterlimit%3A2%3B%22%3E%0D %3Cg transform%3D%22matrix(1%2C0%2C0%2C1%2C-1926.56%2C-1883.8)%22%3E%0D %3Cg transform%3D%22matrix(1%2C0%2C0%2C1%2C0%2C607.427)%22%3E%0D %3Cg transform%3D%22matrix(0.904512%2C0%2C0%2C0.904512%2C1381.44%2C266.242)%22%3E%0D %3Ctext x%3D%22836.31px%22 y%3D%221317.08px%22 style%3D%22font-family%3A'HelveticaNeue-Thin'%2C 'Helvetica Neue'%2C sans-serif%3Bfont-weight%3A200%3Bfont-size%3A266.667px%3B%22%3Ebio%3C%2Ftext%3E%0D %3Ctext x%3D%221172.58px%22 y%3D%221317.08px%22 style%3D%22font-family%3A'HelveticaNeue-Medium'%2C 'Helvetica Neue'%2C sans-serif%3Bfont-weight%3A500%3Bfont-size%3A266.667px%3B%22%3Efact%3C%2Ftext%3E%0D %3Ctext x%3D%221641.91px%22 y%3D%221317.08px%22 style%3D%22font-family%3A'HelveticaNeue-Thin'%2C 'Helvetica Neue'%2C sans-serif%3Bfont-weight%3A200%3Bfont-size%3A266.667px%3B%22%3Eoid%3C%2Ftext%3E%0D %3C%2Fg%3E%0D %3Cg transform%3D%22matrix(1.34193%2C0%2C0%2C1.34193%2C416.61%2C-209.197)%22%3E%0D %3Cg%3E%0D %3Cg transform%3D%22matrix(1.2169e-17%2C0.198734%2C-0.198734%2C1.2169e-17%2C1434.11%2C904.48)%22%3E%0D %3Cpath d%3D%22M1369.82%2C847.06L1540.04%2C945.334L1540.04%2C1141.88L1369.82%2C1240.16L1199.61%2C1141.88L1199.61%2C945.334L1369.82%2C847.06Z%22 style%3D%22fill%3Argb(255%2C212%2C121)%3B%22%2F%3E%0D %3C%2Fg%3E%0D %3Cg transform%3D%22matrix(1.2169e-17%2C0.198734%2C-0.198734%2C1.2169e-17%2C1371.67%2C868.635)%22%3E%0D %3Cpath d%3D%22M1369.82%2C847.06L1540.04%2C945.334L1540.04%2C1141.88L1369.82%2C1240.16L1199.61%2C1141.88L1199.61%2C945.334L1369.82%2C847.06Z%22 style%3D%22fill%3Argb(255%2C212%2C121)%3B%22%2F%3E%0D %3C%2Fg%3E%0D %3Cg transform%3D%22matrix(1.2169e-17%2C0.198734%2C-0.198734%2C1.2169e-17%2C1371.67%2C940.242)%22%3E%0D %3Cpath d%3D%22M1369.82%2C847.06L1540.04%2C945.334L1540.04%2C1141.88L1369.82%2C1240.16L1199.61%2C1141.88L1199.61%2C945.334L1369.82%2C847.06Z%22 style%3D%22fill%3Argb(255%2C212%2C121)%3B%22%2F%3E%0D %3C%2Fg%3E%0D %3C%2Fg%3E%0D %3C%2Fg%3E%0D %3C%2Fg%3E%0D %3C%2Fg%3E%0D%3C%2Fsvg%3E%0D");
+}
+
+.icon {/* Add chevron icons for gene card scrolling */
+}
+
+.icon.icon-chevron-left {
+ position: relative;
+ width: 0.6em;
+ height: 0.6em;
+ border-width: 0 0 0.1em 0.1em;
+ border-style: solid;
+ border-color: currentColor;
+ -webkit-transform: rotate(45deg);
+ -ms-transform: rotate(45deg);
+ transform: rotate(45deg);
+}
+
+.icon.icon-chevron-right {
+ position: relative;
+ width: 0.6em;
+ height: 0.6em;
+ border-width: 0.1em 0.1em 0 0;
+ border-style: solid;
+ border-color: currentColor;
+ -webkit-transform: rotate(45deg);
+ -ms-transform: rotate(45deg);
+ transform: rotate(45deg);
+}
+
+.icon-rot-90 {
+ -webkit-transform: rotate(90deg);
+ -ms-transform: rotate(90deg);
+ transform: rotate(90deg);
+}
+
+.icon-rot-180 {
+ -webkit-transform: rotate(180deg);
+ -ms-transform: rotate(180deg);
+ transform: rotate(180deg);
+}
+
+.icon-rot-270 {
+ -webkit-transform: rotate(270deg);
+ -ms-transform: rotate(270deg);
+ transform: rotate(270deg);
+}
+
+h1, h2, h3 {
+ font-weight: 600;
+ line-height: 1.5em;
+}
+
+h1 {
+ font-size: 1.5em;
+ margin: 0.66667em 0;
+}
+
+h2 {
+ font-size: 1.25em;
+ margin: 0.8em 0;
+}
+
+h3 {
+ font-size: 1em;
+ margin: 1em 0;
+}
+
+a {
+ color: inherit;
+ text-decoration: none
+}
+
+a.plain-link {
+ -webkit-box-shadow: 0 -1px rgba(49, 147, 253, 0.5) inset;
+ box-shadow: 0 -1px rgba(49, 147, 253, 0.5) inset;
+ -webkit-transition: -webkit-box-shadow 500ms ease-out;
+ transition: -webkit-box-shadow 500ms ease-out;
+ -o-transition: box-shadow 500ms ease-out;
+ transition: box-shadow 500ms ease-out;
+ transition: box-shadow 500ms ease-out, -webkit-box-shadow 500ms ease-out;
+}
+
+a.plain-link:active {
+ -webkit-box-shadow: 0 -2px #3193fd inset;
+ box-shadow: 0 -2px #3193fd inset;
+}
+
+img {
+ border: none;
+}
+
+p {
+ line-height: 1.5em;
+ margin: 1em 0;
+}
+
+pre.code-block {
+ border: 1px solid #d3d8da;
+ border-radius: 4px;
+}
+
+ul, ol {
+ margin: 1em 0;
+ padding-left: 1.5em;
+ line-height: 1.5em;
+}
+
+li {
+ margin: 1em 0;
+}
+
+ul.horizontal-list {
+ margin: 0;
+ padding: 0;
+}
+
+ul.horizontal-list > li {
+ list-style: none;
+ display: inline;
+}
+
+ul.horizontal-list > li::after {
+ content: '\00a0\00b7\00a0';
+}
+
+ul.horizontal-list > li:last-child::after {
+ content: none;
+}
+
+code, pre, .code, input.code {
+ font-family: Inconsolata, Courier New, monospace;
+}
+
+.dropdown {
+ position: relative;
+ cursor: pointer;
+ border: 1px solid #d3d8da;
+ min-width: 11em;
+ opacity: 1;
+}
+
+.dropdown-active {
+}
+
+.dropdown-header {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: row;
+ flex-direction: row;
+ -webkit-box-pack: justify;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ padding: 5px;
+ color: #7F8C8D;
+ z-index: 1
+}
+
+.dropdown-header i {
+ padding-left: 10px;
+}
+
+.dropdown-title {
+ border-right: 1px solid #d3d8da;
+ padding-right: 10px;
+}
+
+.dropdown-options {
+ border: 1px solid #d3d8da;
+ list-style: none;
+ position: absolute;
+ background-color: white;
+ margin: 0 -1px;
+ -webkit-box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .14), 0 3px 1px -2px rgba(0, 0, 0, .12), 0 1px 5px 0 rgba(0, 0, 0, .2);
+ box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .14), 0 3px 1px -2px rgba(0, 0, 0, .12), 0 1px 5px 0 rgba(0, 0, 0, .2);
+ z-index: 1;
+}
+
+.dropdown-option {
+ /* height: 2em; */
+ padding: 10px;
+}
+
+.dropdown-option:hover {
+ background-color: #d3d8da
+}
+
+.search-dropdown {
+ font-size: 0.75em;
+}
+
+button.call-to-action {
+ text-align: center;
+ text-transform: uppercase
+}
+
+button.call-to-action:not(:active) {
+ border-color: #3193fd;
+ color: #3193fd;
+}
+
+.icon-button {
+ width: 1.75em;
+ text-align: center
+}
+
+.icon-button i {
+ font-size: 1.2em;
+}
+
+.empty-network {
+ text-align: center;
+ padding: 10em
+}
+
+.empty-network .pc-logo {
+ background-image: url("data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22UTF-8%22 standalone%3D%22no%22%3F%3E%0D%3Csvg%0D xmlns%3Adc%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Felements%2F1.1%2F%22%0D xmlns%3Acc%3D%22http%3A%2F%2Fcreativecommons.org%2Fns%23%22%0D xmlns%3Ardf%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%22%0D xmlns%3Asvg%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0D xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0D xmlns%3Asodipodi%3D%22http%3A%2F%2Fsodipodi.sourceforge.net%2FDTD%2Fsodipodi-0.dtd%22%0D xmlns%3Ainkscape%3D%22http%3A%2F%2Fwww.inkscape.org%2Fnamespaces%2Finkscape%22%0D width%3D%22100%25%22%0D height%3D%22100%25%22%0D viewBox%3D%220 0 876 876%22%0D version%3D%221.1%22%0D xml%3Aspace%3D%22preserve%22%0D style%3D%22fill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bstroke-linejoin%3Around%3Bstroke-miterlimit%3A1.41421%3B%22%0D id%3D%22svg12%22%0D sodipodi%3Adocname%3D%22pc_logo_dark.svg%22%0D inkscape%3Aversion%3D%220.92.2 5c3e80d%2C 2017-08-06%22%3E%3Cmetadata%0D id%3D%22metadata18%22%3E%3Crdf%3ARDF%3E%3Ccc%3AWork%0D rdf%3Aabout%3D%22%22%3E%3Cdc%3Aformat%3Eimage%2Fsvg%2Bxml%3C%2Fdc%3Aformat%3E%3Cdc%3Atype%0D rdf%3Aresource%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Fdcmitype%2FStillImage%22 %2F%3E%3C%2Fcc%3AWork%3E%3C%2Frdf%3ARDF%3E%3C%2Fmetadata%3E%3Cdefs%0D id%3D%22defs16%22 %2F%3E%3Csodipodi%3Anamedview%0D pagecolor%3D%22%23ffffff%22%0D bordercolor%3D%22%23666666%22%0D borderopacity%3D%221%22%0D objecttolerance%3D%2210%22%0D gridtolerance%3D%2210%22%0D guidetolerance%3D%2210%22%0D inkscape%3Apageopacity%3D%220%22%0D inkscape%3Apageshadow%3D%222%22%0D inkscape%3Awindow-width%3D%221927%22%0D inkscape%3Awindow-height%3D%22973%22%0D id%3D%22namedview14%22%0D showgrid%3D%22false%22%0D inkscape%3Azoom%3D%222.1552511%22%0D inkscape%3Acx%3D%22177.6091%22%0D inkscape%3Acy%3D%22419.30717%22%0D inkscape%3Awindow-x%3D%220%22%0D inkscape%3Awindow-y%3D%220%22%0D inkscape%3Awindow-maximized%3D%220%22%0D inkscape%3Acurrent-layer%3D%22svg12%22 %2F%3E%3Cg%0D id%3D%22g10%22%3E%3Cpath%0D d%3D%22M0%2C437.619c0%2C-241.528 196.052%2C-437.619 437.534%2C-437.619c241.481%2C0 437.533%2C196.091 437.533%2C437.619c0%2C241.529 -196.052%2C437.619 -437.533%2C437.619c-241.482%2C0 -437.534%2C-196.09 -437.534%2C-437.619Z%22%0D style%3D%22fill%3A%23ecf0f1%3B%22%0D id%3D%22path2%22 %2F%3E%3Cpath%0D d%3D%22M562.305%2C328.826c-31.661%2C-37.231 -78.064%2C-58.684 -126.931%2C-58.684c-91.969%2C0 -166.636%2C74.681 -166.636%2C166.668c0%2C91.987 74.667%2C166.669 166.636%2C166.669c39.56%2C0 77.83%2C-14.077 107.964%2C-39.713l-64.266%2C-75.571c-12.196%2C10.376 -27.686%2C16.073 -43.698%2C16.073c-37.224%2C0 -67.445%2C-30.227 -67.445%2C-67.458c0%2C-37.231 30.221%2C-67.458 67.445%2C-67.458c19.779%2C0 38.56%2C8.683 51.375%2C23.752l75.556%2C-64.278Z%22%0D style%3D%22fill%3A%2316a085%3B%22%0D id%3D%22path4%22 %2F%3E%3Crect%0D x%3D%22130%22%0D y%3D%22436%22%0D width%3D%22139%22%0D height%3D%22422.932%22%0D style%3D%22fill%3A%232a3e50%3B%22%0D id%3D%22rect6%22 %2F%3E%3Cpath%0D d%3D%22M297.36%2C708.985c42.757%2C21.671 90.017%2C32.964 137.95%2C32.964c168.438%2C0 305.187%2C-136.777 305.187%2C-305.247c0%2C-168.471 -136.749%2C-305.247 -305.187%2C-305.247c-168.55%2C0 -305.187%2C136.664 -305.187%2C305.247l138.896%2C0c0%2C-91.858 74.451%2C-166.324 166.291%2C-166.324c91.779%2C0 166.291%2C74.527 166.291%2C166.324c0%2C91.796 -74.512%2C166.323 -166.291%2C166.323c-26.118%2C0 -51.869%2C-6.153 -75.166%2C-17.961l-62.784%2C123.921Z%22%0D style%3D%22fill%3A%232a3e50%3B%22%0D id%3D%22path8%22 %2F%3E%3C%2Fg%3E%3Cg%0D inkscape%3Agroupmode%3D%22layer%22%0D id%3D%22layer1%22%0D inkscape%3Alabel%3D%22Layer 1%22%0D style%3D%22display%3Ainline%22 %2F%3E%3Crect%0D style%3D%22fill%3A%232a3e50%3Bfill-opacity%3A1%3Bstroke%3A%232a3e50%3Bstroke-opacity%3A1%22%0D id%3D%22rect3712%22%0D width%3D%22104.98738%22%0D height%3D%2281.365219%22%0D x%3D%22131.23422%22%0D y%3D%22421.9296%22 %2F%3E%3Crect%0D style%3D%22fill%3A%232a3e50%3Bfill-opacity%3A1%3Bstroke%3A%232a3e50%3Bstroke-opacity%3A1%22%0D id%3D%22rect3714%22%0D width%3D%2268.241798%22%0D height%3D%22125.98486%22%0D x%3D%22196.85133%22%0D y%3D%22403.55679%22 %2F%3E%3C%2Fsvg%3E");
+ background-repeat: no-repeat;
+ height: 5em;
+ width: 5em;
+ padding: 20px 0px 0px 0px;
+}
+
+.empty-network .empty-network-message {
+ margin-left: 10px;
+}
+
+.empty-network-header {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: row;
+ flex-direction: row;
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ -webkit-box-align: space-between;
+ -ms-flex-align: space-between;
+ align-items: space-between;
+}
+
+.error-message-container {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: row;
+ flex-direction: row;
+ margin: 1.5em
+}
+
+.error-message-container .pc-logo {
+ background-image: url("data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22UTF-8%22 standalone%3D%22no%22%3F%3E%0D%3Csvg%0D xmlns%3Adc%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Felements%2F1.1%2F%22%0D xmlns%3Acc%3D%22http%3A%2F%2Fcreativecommons.org%2Fns%23%22%0D xmlns%3Ardf%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%22%0D xmlns%3Asvg%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0D xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0D xmlns%3Asodipodi%3D%22http%3A%2F%2Fsodipodi.sourceforge.net%2FDTD%2Fsodipodi-0.dtd%22%0D xmlns%3Ainkscape%3D%22http%3A%2F%2Fwww.inkscape.org%2Fnamespaces%2Finkscape%22%0D width%3D%22100%25%22%0D height%3D%22100%25%22%0D viewBox%3D%220 0 876 876%22%0D version%3D%221.1%22%0D xml%3Aspace%3D%22preserve%22%0D style%3D%22fill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bstroke-linejoin%3Around%3Bstroke-miterlimit%3A1.41421%3B%22%0D id%3D%22svg12%22%0D sodipodi%3Adocname%3D%22pc_logo_dark.svg%22%0D inkscape%3Aversion%3D%220.92.2 5c3e80d%2C 2017-08-06%22%3E%3Cmetadata%0D id%3D%22metadata18%22%3E%3Crdf%3ARDF%3E%3Ccc%3AWork%0D rdf%3Aabout%3D%22%22%3E%3Cdc%3Aformat%3Eimage%2Fsvg%2Bxml%3C%2Fdc%3Aformat%3E%3Cdc%3Atype%0D rdf%3Aresource%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Fdcmitype%2FStillImage%22 %2F%3E%3C%2Fcc%3AWork%3E%3C%2Frdf%3ARDF%3E%3C%2Fmetadata%3E%3Cdefs%0D id%3D%22defs16%22 %2F%3E%3Csodipodi%3Anamedview%0D pagecolor%3D%22%23ffffff%22%0D bordercolor%3D%22%23666666%22%0D borderopacity%3D%221%22%0D objecttolerance%3D%2210%22%0D gridtolerance%3D%2210%22%0D guidetolerance%3D%2210%22%0D inkscape%3Apageopacity%3D%220%22%0D inkscape%3Apageshadow%3D%222%22%0D inkscape%3Awindow-width%3D%221927%22%0D inkscape%3Awindow-height%3D%22973%22%0D id%3D%22namedview14%22%0D showgrid%3D%22false%22%0D inkscape%3Azoom%3D%222.1552511%22%0D inkscape%3Acx%3D%22177.6091%22%0D inkscape%3Acy%3D%22419.30717%22%0D inkscape%3Awindow-x%3D%220%22%0D inkscape%3Awindow-y%3D%220%22%0D inkscape%3Awindow-maximized%3D%220%22%0D inkscape%3Acurrent-layer%3D%22svg12%22 %2F%3E%3Cg%0D id%3D%22g10%22%3E%3Cpath%0D d%3D%22M0%2C437.619c0%2C-241.528 196.052%2C-437.619 437.534%2C-437.619c241.481%2C0 437.533%2C196.091 437.533%2C437.619c0%2C241.529 -196.052%2C437.619 -437.533%2C437.619c-241.482%2C0 -437.534%2C-196.09 -437.534%2C-437.619Z%22%0D style%3D%22fill%3A%23ecf0f1%3B%22%0D id%3D%22path2%22 %2F%3E%3Cpath%0D d%3D%22M562.305%2C328.826c-31.661%2C-37.231 -78.064%2C-58.684 -126.931%2C-58.684c-91.969%2C0 -166.636%2C74.681 -166.636%2C166.668c0%2C91.987 74.667%2C166.669 166.636%2C166.669c39.56%2C0 77.83%2C-14.077 107.964%2C-39.713l-64.266%2C-75.571c-12.196%2C10.376 -27.686%2C16.073 -43.698%2C16.073c-37.224%2C0 -67.445%2C-30.227 -67.445%2C-67.458c0%2C-37.231 30.221%2C-67.458 67.445%2C-67.458c19.779%2C0 38.56%2C8.683 51.375%2C23.752l75.556%2C-64.278Z%22%0D style%3D%22fill%3A%2316a085%3B%22%0D id%3D%22path4%22 %2F%3E%3Crect%0D x%3D%22130%22%0D y%3D%22436%22%0D width%3D%22139%22%0D height%3D%22422.932%22%0D style%3D%22fill%3A%232a3e50%3B%22%0D id%3D%22rect6%22 %2F%3E%3Cpath%0D d%3D%22M297.36%2C708.985c42.757%2C21.671 90.017%2C32.964 137.95%2C32.964c168.438%2C0 305.187%2C-136.777 305.187%2C-305.247c0%2C-168.471 -136.749%2C-305.247 -305.187%2C-305.247c-168.55%2C0 -305.187%2C136.664 -305.187%2C305.247l138.896%2C0c0%2C-91.858 74.451%2C-166.324 166.291%2C-166.324c91.779%2C0 166.291%2C74.527 166.291%2C166.324c0%2C91.796 -74.512%2C166.323 -166.291%2C166.323c-26.118%2C0 -51.869%2C-6.153 -75.166%2C-17.961l-62.784%2C123.921Z%22%0D style%3D%22fill%3A%232a3e50%3B%22%0D id%3D%22path8%22 %2F%3E%3C%2Fg%3E%3Cg%0D inkscape%3Agroupmode%3D%22layer%22%0D id%3D%22layer1%22%0D inkscape%3Alabel%3D%22Layer 1%22%0D style%3D%22display%3Ainline%22 %2F%3E%3Crect%0D style%3D%22fill%3A%232a3e50%3Bfill-opacity%3A1%3Bstroke%3A%232a3e50%3Bstroke-opacity%3A1%22%0D id%3D%22rect3712%22%0D width%3D%22104.98738%22%0D height%3D%2281.365219%22%0D x%3D%22131.23422%22%0D y%3D%22421.9296%22 %2F%3E%3Crect%0D style%3D%22fill%3A%232a3e50%3Bfill-opacity%3A1%3Bstroke%3A%232a3e50%3Bstroke-opacity%3A1%22%0D id%3D%22rect3714%22%0D width%3D%2268.241798%22%0D height%3D%22125.98486%22%0D x%3D%22196.85133%22%0D y%3D%22403.55679%22 %2F%3E%3C%2Fsvg%3E");
+ background-repeat: no-repeat;
+ height: 3em;
+ width: 3em;
+ padding: 0;
+}
+
+.error-branding {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ height: 100%;
+ padding-right: 0.5em;
+ margin-bottom: 1em;
+}
+
+.error-branding-descriptor {
+ margin-left: 0.5em;
+}
+
+.error-title {
+ margin: 0;
+ line-height: 1em;
+ color: #212f3d;
+ font-size: 2em;
+}
+
+.error-subtitle {
+ margin: 0;
+ line-height: 1em;
+ color: #212f3d;
+ font-size: 0.75em;
+}
+
+.error-message {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ -webkit-box-align: start;
+ -ms-flex-align: start;
+ align-items: flex-start;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: column;
+ flex-direction: column;
+}
+
+.error-message-body, .error-message-footer {
+ color: #b5b9bb;
+ margin: 0;
+ font-size: 0.9em;
+}
+
+.pc-logo {
+ height: 50px;
+ width: 50px;
+ background-image: url("data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22UTF-8%22 standalone%3D%22no%22%3F%3E%0D%3Csvg%0D xmlns%3Adc%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Felements%2F1.1%2F%22%0D xmlns%3Acc%3D%22http%3A%2F%2Fcreativecommons.org%2Fns%23%22%0D xmlns%3Ardf%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%22%0D xmlns%3Asvg%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0D xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0D xmlns%3Asodipodi%3D%22http%3A%2F%2Fsodipodi.sourceforge.net%2FDTD%2Fsodipodi-0.dtd%22%0D xmlns%3Ainkscape%3D%22http%3A%2F%2Fwww.inkscape.org%2Fnamespaces%2Finkscape%22%0D width%3D%22100%25%22%0D height%3D%22100%25%22%0D viewBox%3D%220 0 876 876%22%0D version%3D%221.1%22%0D xml%3Aspace%3D%22preserve%22%0D style%3D%22fill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bstroke-linejoin%3Around%3Bstroke-miterlimit%3A1.41421%3B%22%0D id%3D%22svg12%22%0D sodipodi%3Adocname%3D%22pc_logo_dark.svg%22%0D inkscape%3Aversion%3D%220.92.2 5c3e80d%2C 2017-08-06%22%3E%3Cmetadata%0D id%3D%22metadata18%22%3E%3Crdf%3ARDF%3E%3Ccc%3AWork%0D rdf%3Aabout%3D%22%22%3E%3Cdc%3Aformat%3Eimage%2Fsvg%2Bxml%3C%2Fdc%3Aformat%3E%3Cdc%3Atype%0D rdf%3Aresource%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Fdcmitype%2FStillImage%22 %2F%3E%3C%2Fcc%3AWork%3E%3C%2Frdf%3ARDF%3E%3C%2Fmetadata%3E%3Cdefs%0D id%3D%22defs16%22 %2F%3E%3Csodipodi%3Anamedview%0D pagecolor%3D%22%23ffffff%22%0D bordercolor%3D%22%23666666%22%0D borderopacity%3D%221%22%0D objecttolerance%3D%2210%22%0D gridtolerance%3D%2210%22%0D guidetolerance%3D%2210%22%0D inkscape%3Apageopacity%3D%220%22%0D inkscape%3Apageshadow%3D%222%22%0D inkscape%3Awindow-width%3D%221927%22%0D inkscape%3Awindow-height%3D%22973%22%0D id%3D%22namedview14%22%0D showgrid%3D%22false%22%0D inkscape%3Azoom%3D%222.1552511%22%0D inkscape%3Acx%3D%22177.6091%22%0D inkscape%3Acy%3D%22419.30717%22%0D inkscape%3Awindow-x%3D%220%22%0D inkscape%3Awindow-y%3D%220%22%0D inkscape%3Awindow-maximized%3D%220%22%0D inkscape%3Acurrent-layer%3D%22svg12%22 %2F%3E%3Cg%0D id%3D%22g10%22%3E%3Cpath%0D d%3D%22M0%2C437.619c0%2C-241.528 196.052%2C-437.619 437.534%2C-437.619c241.481%2C0 437.533%2C196.091 437.533%2C437.619c0%2C241.529 -196.052%2C437.619 -437.533%2C437.619c-241.482%2C0 -437.534%2C-196.09 -437.534%2C-437.619Z%22%0D style%3D%22fill%3A%23ecf0f1%3B%22%0D id%3D%22path2%22 %2F%3E%3Cpath%0D d%3D%22M562.305%2C328.826c-31.661%2C-37.231 -78.064%2C-58.684 -126.931%2C-58.684c-91.969%2C0 -166.636%2C74.681 -166.636%2C166.668c0%2C91.987 74.667%2C166.669 166.636%2C166.669c39.56%2C0 77.83%2C-14.077 107.964%2C-39.713l-64.266%2C-75.571c-12.196%2C10.376 -27.686%2C16.073 -43.698%2C16.073c-37.224%2C0 -67.445%2C-30.227 -67.445%2C-67.458c0%2C-37.231 30.221%2C-67.458 67.445%2C-67.458c19.779%2C0 38.56%2C8.683 51.375%2C23.752l75.556%2C-64.278Z%22%0D style%3D%22fill%3A%2316a085%3B%22%0D id%3D%22path4%22 %2F%3E%3Crect%0D x%3D%22130%22%0D y%3D%22436%22%0D width%3D%22139%22%0D height%3D%22422.932%22%0D style%3D%22fill%3A%232a3e50%3B%22%0D id%3D%22rect6%22 %2F%3E%3Cpath%0D d%3D%22M297.36%2C708.985c42.757%2C21.671 90.017%2C32.964 137.95%2C32.964c168.438%2C0 305.187%2C-136.777 305.187%2C-305.247c0%2C-168.471 -136.749%2C-305.247 -305.187%2C-305.247c-168.55%2C0 -305.187%2C136.664 -305.187%2C305.247l138.896%2C0c0%2C-91.858 74.451%2C-166.324 166.291%2C-166.324c91.779%2C0 166.291%2C74.527 166.291%2C166.324c0%2C91.796 -74.512%2C166.323 -166.291%2C166.323c-26.118%2C0 -51.869%2C-6.153 -75.166%2C-17.961l-62.784%2C123.921Z%22%0D style%3D%22fill%3A%232a3e50%3B%22%0D id%3D%22path8%22 %2F%3E%3C%2Fg%3E%3Cg%0D inkscape%3Agroupmode%3D%22layer%22%0D id%3D%22layer1%22%0D inkscape%3Alabel%3D%22Layer 1%22%0D style%3D%22display%3Ainline%22 %2F%3E%3Crect%0D style%3D%22fill%3A%232a3e50%3Bfill-opacity%3A1%3Bstroke%3A%232a3e50%3Bstroke-opacity%3A1%22%0D id%3D%22rect3712%22%0D width%3D%22104.98738%22%0D height%3D%2281.365219%22%0D x%3D%22131.23422%22%0D y%3D%22421.9296%22 %2F%3E%3Crect%0D style%3D%22fill%3A%232a3e50%3Bfill-opacity%3A1%3Bstroke%3A%232a3e50%3Bstroke-opacity%3A1%22%0D id%3D%22rect3714%22%0D width%3D%2268.241798%22%0D height%3D%22125.98486%22%0D x%3D%22196.85133%22%0D y%3D%22403.55679%22 %2F%3E%3C%2Fsvg%3E");
+}
+
+.pc-logo-light {
+ height: 30px;
+ width: 30px;
+ background-image: url("data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22UTF-8%22 standalone%3D%22no%22%3F%3E%0D%3C!DOCTYPE svg PUBLIC %22-%2F%2FW3C%2F%2FDTD SVG 1.1%2F%2FEN%22 %22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%0D%3Csvg width%3D%22100%25%22 height%3D%22100%25%22 viewBox%3D%220 0 736 876%22 version%3D%221.1%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22 xml%3Aspace%3D%22preserve%22 xmlns%3Aserif%3D%22http%3A%2F%2Fwww.serif.com%2F%22 style%3D%22fill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bstroke-linejoin%3Around%3Bstroke-miterlimit%3A1.41421%3B%22%3E%0D %3Cg transform%3D%22matrix(1%2C0%2C0%2C1%2C-74.9667%2C0)%22%3E%0D %3Cg id%3D%22path4%22 transform%3D%22matrix(1.20416%2C0%2C0%2C1.20416%2C-81.5743%2C-158.293)%22%3E%0D %3Cpath d%3D%22M562.305%2C328.826C530.644%2C291.595 484.241%2C270.142 435.374%2C270.142C343.405%2C270.142 268.738%2C344.823 268.738%2C436.81C268.738%2C528.797 343.405%2C603.479 435.374%2C603.479C474.934%2C603.479 513.204%2C589.402 543.338%2C563.766L479.072%2C488.195C466.876%2C498.571 451.386%2C504.268 435.374%2C504.268C398.15%2C504.268 367.929%2C474.041 367.929%2C436.81C367.929%2C399.579 398.15%2C369.352 435.374%2C369.352C455.153%2C369.352 473.934%2C378.035 486.749%2C393.104L562.305%2C328.826Z%22 style%3D%22fill%3Argb(22%2C160%2C133)%3B%22%2F%3E%0D %3C%2Fg%3E%0D %3Cg id%3D%22rect6%22 transform%3D%22matrix(1.20416%2C0%2C0%2C1.20416%2C-81.5743%2C-158.293)%22%3E%0D %3Crect x%3D%22130%22 y%3D%22436%22 width%3D%22139%22 height%3D%22422.932%22 style%3D%22fill%3Argb(42%2C62%2C80)%3B%22%2F%3E%0D %3C%2Fg%3E%0D %3Cg id%3D%22path8%22 transform%3D%22matrix(1.20416%2C0%2C0%2C1.20416%2C-81.5743%2C-158.293)%22%3E%0D %3Cpath d%3D%22M297.36%2C708.985C340.117%2C730.656 387.377%2C741.949 435.31%2C741.949C603.748%2C741.949 740.497%2C605.172 740.497%2C436.702C740.497%2C268.231 603.748%2C131.455 435.31%2C131.455C266.76%2C131.455 130.123%2C268.119 130.123%2C436.702L269.019%2C436.702C269.019%2C344.844 343.47%2C270.378 435.31%2C270.378C527.089%2C270.378 601.601%2C344.905 601.601%2C436.702C601.601%2C528.498 527.089%2C603.025 435.31%2C603.025C409.192%2C603.025 383.441%2C596.872 360.144%2C585.064L297.36%2C708.985Z%22 style%3D%22fill%3Argb(42%2C62%2C80)%3B%22%2F%3E%0D %3C%2Fg%3E%0D %3Cg id%3D%22rect3712%22 transform%3D%22matrix(1.20416%2C0%2C0%2C1.20416%2C-81.5743%2C-158.293)%22%3E%0D %3Crect x%3D%22131.234%22 y%3D%22421.93%22 width%3D%22104.987%22 height%3D%2281.365%22 style%3D%22fill%3Argb(42%2C62%2C80)%3Bstroke%3Argb(42%2C62%2C80)%3Bstroke-width%3A1px%3B%22%2F%3E%0D %3C%2Fg%3E%0D %3Cg id%3D%22rect3714%22 transform%3D%22matrix(1.20416%2C0%2C0%2C1.20416%2C-81.5743%2C-158.293)%22%3E%0D %3Crect x%3D%22196.851%22 y%3D%22403.557%22 width%3D%2268.242%22 height%3D%22125.985%22 style%3D%22fill%3Argb(42%2C62%2C80)%3Bstroke%3Argb(42%2C62%2C80)%3Bstroke-width%3A1px%3B%22%2F%3E%0D %3C%2Fg%3E%0D %3C%2Fg%3E%0D%3C%2Fsvg%3E%0D");
+}
+
+.sidebar-menu {
+ height: 100%;
+ width: 33%;
+ position: fixed;
+ top: 0;
+ right: 0;
+ z-index: 25;
+ -webkit-box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .14), 0 3px 1px -2px rgba(0, 0, 0, .12), 0 1px 5px 0 rgba(0, 0, 0, .2);
+ box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .14), 0 3px 1px -2px rgba(0, 0, 0, .12), 0 1px 5px 0 rgba(0, 0, 0, .2);
+ opacity: 0;
+ -webkit-transform: translate3d(110%, 0, 0);
+ transform: translate3d(110%, 0, 0);
+ pointer-events: none;
+ -webkit-transition-duration: 250ms;
+ -o-transition-duration: 250ms;
+ transition-duration: 250ms;
+ -webkit-transition-property: opacity, -webkit-transform;
+ transition-property: opacity, -webkit-transform;
+ -o-transition-property: transform, opacity;
+ transition-property: transform, opacity;
+ transition-property: transform, opacity, -webkit-transform;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ border-left: 1px solid rgb(211, 216, 218);
+ background-color: #ecf0f1
+}
+
+.sidebar-menu.sidebar-menu-open {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ pointer-events: auto;
+}
+
+.sidebar-close {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ -webkit-box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .14), 0 3px 1px -2px rgba(0, 0, 0, .12), 0 1px 5px 0 rgba(0, 0, 0, .2);
+ box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .14), 0 3px 1px -2px rgba(0, 0, 0, .12), 0 1px 5px 0 rgba(0, 0, 0, .2);
+ height: 36px;
+ width: 36px;
+ left: -36px;
+ position: absolute;
+ top: -1px;
+ z-index: 10;
+ background-color: rgba(255, 255, 255, .5);
+ background-color: #ecf0f1;
+ border-radius: 0 0 0 3px;
+ border: 1px solid rgb(211, 216, 218);
+ border-right: 0;
+}
+
+.sidebar-content {
+ height: 100%;
+ width: 100%;
+ position: relative;
+ z-index: 50;
+}
+
+.sidebar-text {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ height: 100%;
+ width: 100%;
+ padding: 1em;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ -webkit-box-pack: start;
+ -ms-flex-pack: start;
+ justify-content: flex-start;
+ -webkit-box-align: start;
+ -ms-flex-align: start;
+ align-items: flex-start;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ position: relative;
+ z-index: 300;
+ background-color: #ecf0f1;
+ overflow-y: scroll
+}
+
+.sidebar-text h2 {
+ margin-top: 0;
+}
+
+.sidebar-text p {
+ font-size: 0.9em;
+}
+
+/* Mobile scaling */
+
+@media (max-width: 600px) {
+ .sidebar-text h2 {
+ font-size: 1em;
+ }
+}
+
+.cy-tooltip {
+ max-width: 500px;
+ min-width: 10em;
+ max-height: 95vh;
+ position: relative;
+ top: 0;
+ right: 0;
+ border-radius: 0;
+ color: black;
+ text-align: left;
+ overflow-y: scroll;
+ word-wrap: break-word;
+}
+
+@media (max-width: 600px){
+ .cy-tooltip {
+ max-height: calc(100vh - 14em);
+ max-width: 300px;
+ }
+}
+
+.cy-tooltip-content {
+ position: relative;
+ left: 0;
+ text-align: left;
+}
+
+.cy-tooltip-header {
+ color: #212f3d;
+ margin: 0.25em 0.5em;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: row;
+ flex-direction: row;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+}
+
+.cy-tooltip-title {
+ margin: 0;
+ line-height: 1.5em;
+ display: inline-block;
+}
+
+.cy-tooltip-type-chip {
+ display: inline-block;
+ padding: 2px 6px;
+ background-color: #d3d8da;
+ font-size: 0.9em;
+ color: black;
+ border-radius: 10px;
+ margin-left: 0.5em;
+}
+
+.cy-tooltip-body {
+ border-top: 1px solid #d3d8da;
+ margin: 0.25em;
+}
+
+.cy-tooltip-warning {
+ margin: 0.25em;
+ font-weight: bold;
+}
+
+.cy-tooltip-section {
+ font-size: 0.9em;
+ margin: 0.25em;
+}
+
+.cy-tooltip-field-name {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: row;
+ flex-direction: row;
+ -webkit-box-pack: justify;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ font-weight: bold
+}
+
+.cy-tooltip-field-name i {
+ height: 10px;
+ width: 10px;
+}
+
+.cy-tooltip-field-value {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: row;
+ flex-direction: row;
+ margin: 2px;
+}
+
+.cy-tooltip-footer {
+ margin: 0.25em;
+ border-top: 1px solid #d3d8da;
+}
+
+.cy-tooltip-links {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: row;
+ flex-direction: row;
+ -webkit-box-pack: start;
+ -ms-flex-pack: start;
+ justify-content: flex-start;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap
+}
+
+.cy-tooltip-links a {
+ display: inline-block;
+ margin-right: 10px;
+}
+
+.cy-tooltip-links a.cy-tooltip-number-link {
+ padding: 0 0.5em;
+}
+
+.cy-tooltip-call-to-action {
+ text-align: center;
+ margin: 0.5em 0.25em 0.25em;
+}
+
+.cy-overflow-content {
+ word-wrap: break-word;
+ overflow: hidden;
+ margin: 0.25em 0;
+ width: 100%
+}
+
+.cy-overflow-content + .cy-overflow-content {
+ margin-top: 0.5em;
+}
+
+.expand-collapse-cue {
+ cursor: pointer;
+ margin: 0.25em;
+ font-size: 1.5em;
+}
+
+.expand-collapse-cue:hover {
+ color: #16a085;
+}
+
+a.cy-tooltip-edge-link {
+ cursor: pointer;
+}
+
+.cy-tooltip-edge-entry {
+ margin: 0.5em 0;
+ display: relative;
+}
+
+.cy-tooltip-edge-color {
+ display: inline-block;
+ margin-bottom: -0.0625em;
+ margin-right: 0.25em;
+ height: 0.85em;
+ width: 1em;
+ background-color: #888;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ border: 1px solid #ccc;
+}
+
+.cy-tooltip-back {
+ margin-right: 0.25em;
+ cursor: pointer;
+ font-weight: bold;
+ font-size: 1.25em;
+}
+
+.cy-tooltip-loading-section {
+ font-size: 1.5em;
+ text-align: center;
+ margin: 0.25em;
+}
+
+.network {
+ position: absolute;
+ left: 0;
+ top: 0;
+ right: 0;
+ bottom: 0;
+}
+
+.network-loading {
+ visibility: hidden;
+}
+
+.network-sidebar-open {
+ width: calc(100vw - 33%);
+}
+
+.network-cy {
+ width: 100%;
+ height: 100%;
+ position: absolute;
+ left: 0;
+ top: 0;
+ right: 0;
+ bottom: 0;
+}
+
+.app-bar {
+ max-width: 95vw; /* 80% browser window size */
+ position: fixed; /* relative to viewport */
+ z-index: 10;
+ left: 0;
+ margin: 0.5em;
+ border-radius: 0.25em;
+ -webkit-box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .14), 0 3px 1px -2px rgba(0, 0, 0, .12), 0 1px 5px 0 rgba(0, 0, 0, .2);
+ box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .14), 0 3px 1px -2px rgba(0, 0, 0, .12), 0 1px 5px 0 rgba(0, 0, 0, .2);
+}
+
+@media(max-width: 600px){
+ .app-bar {
+ font-size: 0.8em;
+ }
+}
+
+.app-bar-branding {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: row;
+ flex-direction: row;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ max-width: 95vw;
+ padding: 0.25em 0.5em;
+ background-color: #ecf0f1;
+ border: 1px solid #d3d8da;
+ border-radius: 0.25em 0.25em 0 0;
+}
+
+/* .app-bar-title {
+ color: var(--dark-base-colour);
+ font-weight: bold;
+ font-size: 0.9em;
+ max-width: 95vw;
+} */
+
+.app-toolbar {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex; /* use inline-flex if you want the bar to take up only the width of its children */
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: row;
+ flex-direction: row;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ -webkit-box-pack: start;
+ -ms-flex-pack: start;
+ justify-content: flex-start;
+ padding: 0.33em 0;
+ z-index: 10;
+ position: relative;
+ top: 0;
+ width: auto;
+ border: 1px solid #d3d8da;
+ border-radius: 0 0 0.25em 0.25em;
+ border-top: 0;
+ background-color: rgba(255, 255, 255, .9)
+}
+
+.app-toolbar .icon-button {
+ margin: 0 0.25em;
+}
+
+.app-toolbar {/* make the search bar take up the remainder of the unused space
+ disable for now b/c chrome 68 is buggy *//* & .element-search {
+ flex-grow: 1;
+ } */
+}
+
+.app-toolbar .element-search {
+ white-space: nowrap;
+}
+
+.app-toolbar .element-search-input {
+ width: 100%;
+}
+
+.app-bar .contribute {
+ position: absolute;
+ margin: 0.5em 0;
+ left: 0.25em;
+}
+
+.info-menu {
+ width: 35em;
+ max-width: 95vw;
+ padding: 0.25em;
+ position: relative
+}
+
+.info-menu p:first-child {
+ margin-top: 0;
+}
+
+.info-menu p:last-child {
+ margin-bottom: 0;
+}
+
+.file-download-menu {
+ width: 66vw;
+ max-width: 600px;
+}
+
+@media(max-width: 600px){
+ .file-download-menu {
+ font-size: 0.8em;
+ width: 300px;
+ }
+
+ .info-menu {
+ font-size: 0.8em;
+ width: 300px;
+ }
+}
+
+.interactions-download-menu {
+ max-width: 315px;
+}
+
+.enrichment-download-menu {
+ max-width: 315px;
+}
+
+.file-download-menu h2 {
+ font-size: 1em;
+ padding: 0.25em;
+ margin: 0;
+ text-align: center;
+}
+
+.file-download-content {
+ overflow: scroll;
+ max-height: 80vh;
+}
+
+.file-download-error {
+ padding: 0.5em 1em;
+ color: #c20e0e;
+}
+
+.toggle-extra-downloads-container {
+
+ width: 100%;
+ margin: 0.5em 0;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-pack: start;
+ -ms-flex-pack: start;
+ justify-content: flex-start;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+}
+
+.file-download-extras {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ max-height: 100%;
+ -webkit-transform-origin: top center;
+ -ms-transform-origin: top center;
+ transform-origin: top center;
+ -webkit-transform: scaleY(100%);
+ -ms-transform: scaleY(100%);
+ transform: scaleY(100%);
+ overflow: hidden;
+ -webkit-transition: max-height 0s linear 0s, -webkit-transform 0.25s ease-out;
+ transition: max-height 0s linear 0s, -webkit-transform 0.25s ease-out;
+ -o-transition: max-height 0s linear 0s, transform 0.25s ease-out;
+ transition: max-height 0s linear 0s, transform 0.25s ease-out;
+ transition: max-height 0s linear 0s, transform 0.25s ease-out, -webkit-transform 0.25s ease-out
+}
+
+.file-download-extras.file-download-extras-hide {
+ max-height: 0;
+ -webkit-transform: scaleY(0);
+ -ms-transform: scaleY(0);
+ transform: scaleY(0);
+ -webkit-transition: max-height 0s linear 0.25s, -webkit-transform 0.25s ease-out;
+ transition: max-height 0s linear 0.25s, -webkit-transform 0.25s ease-out;
+ -o-transition: transform 0.25s ease-out, max-height 0s linear 0.25s;
+ transition: transform 0.25s ease-out, max-height 0s linear 0.25s;
+ transition: transform 0.25s ease-out, max-height 0s linear 0.25s, -webkit-transform 0.25s ease-out;
+}
+
+.download-option {
+ width: 100%;
+ padding: 0.25em;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ -ms-flex-line-pack: center;
+ align-content: center;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ border-style: solid;
+ border-color: #d3d8da;
+ border-width: 1px 1px 0px;
+ cursor: pointer;
+ -webkit-transition: all 0.1s linear;
+ -o-transition: all 0.1s linear;
+ transition: all 0.1s linear
+}
+
+.download-option:hover {
+ background-color: #d3d8da;
+}
+
+.download-option:last-of-type {
+ border-width: 1px;
+}
+
+.download-option-header {
+ margin-bottom: 0.25em;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-pack: start;
+ -ms-flex-pack: start;
+ justify-content: flex-start;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center
+}
+
+.download-option-header h3 {
+ margin: 0;
+ margin-right: 1em;
+ cursor: pointer;
+}
+
+.download-option-description {
+
+ width: 100%;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ -webkit-box-align: start;
+ -ms-flex-align: start;
+ align-items: flex-start;
+ cursor: pointer;
+ font-size: 0.8em;
+}
+
+/* css for non-cytoscape tooltips */
+
+.tooltip-description {
+ display: inline-block;
+ padding: 0.25em 0.33em;
+}
+
+.card {
+ height: 70px;
+ width: 220px;
+ border: 1px solid #d3d8da;
+ overflow: hidden;
+ margin-right: 1em;
+ margin-bottom: 0.5em;
+ -webkit-box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .14), 0 3px 1px -2px rgba(0, 0, 0, .12), 0 1px 5px 0 rgba(0, 0, 0, .2);
+ box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .14), 0 3px 1px -2px rgba(0, 0, 0, .12), 0 1px 5px 0 rgba(0, 0, 0, .2);
+}
+
+/*
+ AppCard
+*/
+
+.app-card {
+ -webkit-box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .14), 0 3px 1px -2px rgba(0, 0, 0, .12), 0 1px 5px 0 rgba(0, 0, 0, .2);
+ box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .14), 0 3px 1px -2px rgba(0, 0, 0, .12), 0 1px 5px 0 rgba(0, 0, 0, .2);
+ border: 1px solid #d3d8da;
+ margin: 0.5em 0.25em 0.5em 0;
+ position: relative;
+ overflow: hidden;
+ padding-bottom: 1.75em;
+ padding-bottom: 1.75em;
+ cursor: default
+}
+
+.app-card.app-card-disabled {
+ opacity: 0.5;
+ cursor: not-allowed;
+}
+
+.app-card.app-card-disabled a {
+ pointer-events: none;
+}
+
+.app-card.app-card-disabled .app-card-hint {
+ display: block;
+}
+
+.app-card-content {
+ width: 100%;
+ padding: 0.5em 0.25em;
+ background: rgba(255, 255, 255, .85);
+ position: absolute;
+ -webkit-transform: translateY(-0.25em);
+ -ms-transform: translateY(-0.25em);
+ transform: translateY(-0.25em);
+ -webkit-transition: -webkit-transform 250ms ease-out;
+ transition: -webkit-transform 250ms ease-out;
+ -o-transition: transform 250ms ease-out;
+ transition: transform 250ms ease-out;
+ transition: transform 250ms ease-out, -webkit-transform 250ms ease-out;
+}
+
+.app-card:hover .app-card-content {
+ -webkit-transform: translateY(calc(-100% + 2em));
+ -ms-transform: translateY(calc(-100% + 2em));
+ transform: translateY(calc(-100% + 2em));
+}
+
+.app-card-header {
+ margin-bottom: 0.5em;
+}
+
+.app-card-title {
+ margin: 0;
+ padding-bottom: 0.5em;
+}
+
+.app-card-hint {
+ text-decoration: underline;
+ margin-bottom: 1em;
+ display: none;
+}
+
+.app-card-image {
+ text-align: center;
+ height: 150px
+}
+
+.app-card-image > img {
+ height: 100%;
+ padding-bottom: 1.75em;
+}
+
+.app-card-image.background {
+ background-repeat: no-repeat;
+ background-size: contain;
+ background-position: center center;
+}
+
+.app-card-body {
+ margin: 0.5em;
+ max-height: 112.5px;
+ overflow-y: scroll;
+}
+
+.app-card .hidden {
+ display: none;
+}
+
+.contribute i {
+ margin: 0em 0.25em;
+ color: #888;
+}
+
+.contribute i:hover {
+ cursor: pointer;
+}
+
+.contribute-popover-info {
+ max-width: 30em;
+ padding: 0.5em;
+}
+
+@media(max-width: 600px){
+ .contribute-popover-info {
+ font-size: 0.8em;
+ }
+}
+
+.search {
+ height: 100vh;
+ width: 100vw;
+}
+
+.search .hidden {
+ display: none;
+}
+
+.search-nav-links {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-pack: start;
+ -ms-flex-pack: start;
+ justify-content: flex-start;
+ -webkit-box-align: start;
+ -ms-flex-align: start;
+ align-items: flex-start;
+ padding: 0em 0.5em;
+}
+
+.search-nav-links a {
+ padding: 1em 1em;
+ /* background: cyan; */
+}
+
+.search-nav-links .contribute {
+ padding: 1em
+}
+
+.search-nav-links .contribute a {
+ text-decoration: none;
+ padding: 0;
+}
+
+.search-header {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-pack: start;
+ -ms-flex-pack: start;
+ justify-content: flex-start;
+ -webkit-box-align: start;
+ -ms-flex-align: start;
+ align-items: flex-start;
+ background-color: #ecf0f1;
+ padding: 1em;
+ border-bottom: 1px solid #d3d8da;
+}
+
+.search-branding {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ height: 100%;
+ padding-right: 0.5em;
+}
+
+.search-branding-descriptor {
+ margin-left: 0.5em;
+}
+
+.search-title {
+ margin: 0;
+ line-height: 1em;
+ color: #212f3d;
+ font-size: 2em;
+}
+
+.search-subtitle {
+ margin: 0;
+ line-height: 1em;
+ color: #212f3d;
+ font-size: 0.75em;
+}
+
+.search-logo {
+ display: inline-block;
+ height: 55px;
+ width: 55px;
+}
+
+.search-searchbar-container {
+ max-width: 100%;
+ width: 740px;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: column;
+ flex-direction: column;
+}
+
+.search-searchbar {
+ height: 50px;
+ border: 1px solid;
+ border-color: white;
+ padding-left: 0.25em;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ background-color: white;
+ -webkit-box-shadow: 0 2px 3px rgba(0, 0, 0, .1), 0 3px 6px rgba(0, 0, 0, .2);
+ box-shadow: 0 2px 3px rgba(0, 0, 0, .1), 0 3px 6px rgba(0, 0, 0, .2);
+ -webkit-transition: -webkit-box-shadow 0.15s ease-in-out;
+ transition: -webkit-box-shadow 0.15s ease-in-out;
+ -o-transition: box-shadow 0.15s ease-in-out;
+ transition: box-shadow 0.15s ease-in-out;
+ transition: box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
+}
+
+.search-searchbar:hover {
+ -webkit-box-shadow: 0 2px 4px rgba(0, 0, 0, .1), 0 6px 6px rgba(0, 0, 0, .2);
+ box-shadow: 0 2px 4px rgba(0, 0, 0, .1), 0 6px 6px rgba(0, 0, 0, .2);
+}
+
+.search-searchbar > input {
+ background: none;
+ border: none;
+ -webkit-box-flex: 1;
+ -ms-flex-positive: 1;
+ flex-grow: 1;
+ height: 100%;
+}
+
+.search-search-button {
+ font-size: 1.5em;
+ border-radius: 5px;
+ background-color: white;
+ line-height: 2em;
+ margin: 0 5px;
+ cursor: pointer;
+}
+
+.search-searchbar > button > i {
+ color: #333;
+}
+
+.search-suggestions {
+ padding: 0.5em 0 0 0.25em;
+ font-size: 0.75em;
+ color: #212f3d;
+}
+
+.search-example {
+ cursor: pointer
+}
+
+.search-example:hover {
+ color: #16a085;
+}
+
+.search-body {
+ min-height: 4em;
+ padding-left: 200px;
+ max-width: 740px;
+ position: relative;
+}
+
+.search-results-header p {
+ margin: 0.5em 0 0.25em;
+}
+
+.search-results-header .search-results-header-title {
+ font-size: larger;
+}
+
+.search-results-header .search-results-header-subtitle {
+ font-size: smaller;
+ color: #212f3d;
+}
+
+.search-tools {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: row;
+ flex-direction: row;
+ -webkit-box-pack: justify;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ margin: 1em 0;
+}
+
+@media (max-width: 700px) {
+ .search-tools {
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ -webkit-box-align: start;
+ -ms-flex-align: start;
+ align-items: flex-start;
+ }
+
+ .search-results-header {
+ display: none;
+ }
+}
+
+.search-pathways-header {
+ margin: 0;
+}
+
+.search-result-hit-count {
+ margin-top: 10px;
+}
+
+.search-genes-info-panel {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+}
+
+.search-genes-scroll-container {
+ position: relative;
+ width: 100%;
+ padding: 0 2em; /* Reduced padding for arrows */
+ margin: 1em 0;
+}
+
+.search-genes-list {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ overflow-x: auto;
+ scroll-behavior: smooth;
+ scrollbar-width: none; /* Firefox */
+ -ms-overflow-style: none; /* IE and Edge */
+ gap: 1em; /* Space between cards */
+ padding: 0.5em 0; /* Vertical padding only */
+ -ms-scroll-snap-type: x mandatory;
+ scroll-snap-type: x mandatory;
+}
+
+.search-genes-list::-webkit-scrollbar {
+ display: none; /* Chrome, Safari, Opera */
+}
+
+.scroll-caret-button {
+ position: absolute;
+ top: 50%;
+ -webkit-transform: translateY(-50%);
+ -ms-transform: translateY(-50%);
+ transform: translateY(-50%);
+ background: rgba(255, 255, 255, .9);
+ border: 1px solid #d3d8da;
+ border-radius: 50%;
+ width: 2em;
+ height: 2em;
+ display: none; /* Hidden by default */
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ cursor: pointer;
+ z-index: 1;
+ -webkit-transition: all 0.2s ease;
+ -o-transition: all 0.2s ease;
+ transition: all 0.2s ease;
+}
+
+.scroll-caret-button:hover {
+ background: #ecf0f1;
+}
+
+.scroll-caret-button.left {
+ left: 0.5em; /* Adjusted position */
+}
+
+.scroll-caret-button.right {
+ right: 0.5em; /* Adjusted position */
+}
+
+.scroll-caret-button.inactive {
+ opacity: 0.5;
+ cursor: default;
+}
+
+.search-genes-scroll-container.has-scroll .scroll-caret-button {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex; /* Only show when needed */
+}
+
+/* Ensure cards have consistent width and spacing */
+
+.search-genes-list .card {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 auto;
+ flex: 0 0 auto;
+ width: calc(33.33% - 0.67em); /* One-third width minus gap */
+ min-width: 15em; /* Minimum width for readability */
+ margin: 0; /* Remove margin as we're using gap */
+ scroll-snap-align: start;
+}
+
+.search-genes-header {
+ margin-bottom: 1em;
+}
+
+/* Ensure the container takes full width */
+
+.search-genes-results {
+ width: 100%;
+ max-width: 100%;
+ overflow: hidden;
+}
+
+.card {
+ min-width: 20em; /* Previously was in px */
+ margin: 0.5em;
+ -ms-flex-negative: 0;
+ flex-shrink: 0;
+}
+
+/* Update other pixel values to em/rem */
+
+.search-genes-header {
+ margin-bottom: 1em;
+ font-size: 1.25rem;
+}
+
+.search-app-cards {
+ margin-top: 2em;
+ display: grid;
+ grid-template-columns: repeat(auto-fit, minmax(20em, 1fr));
+ gap: 1em;
+}
+
+.interactions-logo {
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAX4AAAGCCAYAAADniqieAAABfGlDQ1BJQ0MgUHJvZmlsZQAAKJFjYGAqSSwoyGFhYGDIzSspCnJ3UoiIjFJgv8PAzcDDIMRgxSCemFxc4BgQ4MOAE3y7xsAIoi/rgsxK8/x506a1fP4WNq+ZclYlOrj1gQF3SmpxMgMDIweQnZxSnJwLZOcA2TrJBUUlQPYMIFu3vKQAxD4BZIsUAR0IZN8BsdMh7A8gdhKYzcQCVhMS5AxkSwDZAkkQtgaInQ5hW4DYyRmJKUC2B8guiBvAgNPDRcHcwFLXkYC7SQa5OaUwO0ChxZOaFxoMcgcQyzB4MLgwKDCYMxgwWDLoMjiWpFaUgBQ65xdUFmWmZ5QoOAJDNlXBOT+3oLQktUhHwTMvWU9HwcjA0ACkDhRnEKM/B4FNZxQ7jxDLX8jAYKnMwMDcgxBLmsbAsH0PA4PEKYSYyjwGBn5rBoZt5woSixLhDmf8xkKIX5xmbARh8zgxMLDe+///sxoDA/skBoa/E////73o//+/i4H2A+PsQA4AJHdp4IxrEg8AAAGdaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA1LjQuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjM4MjwvZXhpZjpQaXhlbFhEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj4zODY8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KG7H1RgAAQABJREFUeAHtXQd8HMXVf1fVe7F6sWzZlovcGzYYjDEGTDVgOqGH0BIIIQUSEggJCQESAiSEFuCjt4BtwLiCbdy7JdmWZckqlqzedSfdfW/OCMuyyt3O7N6WNz+v72535s17/1n9d/bNzBuTGxNQIgQIAUKAEDAMAmbDWEqGEgKEACFACHgQIOKnG4EQIAQIAYMhQMRvsAYncwkBQoAQIOKne4AQIAQIAYMhQMRvsAYncwkBQoAQIOKne4AQIAQIAYMhQMRvsAYncwkBQoAQIOKne4AQIAQIAYMhQMRvsAYncwkBQoAQIOKne4AQIAQIAYMhQMRvsAYncwkBQoAQIOKne4AQIAQIAYMhQMRvsAYncwkBQoAQIOKne4AQIAQIAYMhQMRvsAYncwkBQoAQIOKne4AQIAQIAYMhQMRvsAYncwkBQoAQIOKne4AQIAQIAYMhYDWYvWSuDhFoaW2DuvpGqGtshsamJmhqaoXmtjZobW2HtvYOaHc4wIGH09kJXV1deLige8dRk8kEZrMZrBYLWG0WsNvsEGi3QWBQIAQHBkBIcBCEhQRDWHgIRIaFQVRkOESGh+oQRTLJSAgQ8RuptTVoa0XlMThSXgWlR6vgaGU1VB6rgWM1tXCsth7q6hqhvqEBHE6nopZZLGaICAuHqKgIiI2OhLiYKIiPjYHE+BhISoyD1MQESEtJADM+VCgRAmpEwESbrauxWYylE+uxFxwqhoOHjkBRSRkUl1ZAaXkllB2txF66sqQuEvnEIfGQkjQE0lMSISMtGbIyUiB7aDrE4cOCEiHgTwSI+P2JvgHrLsce/J78g7Bv/2HYf+gwFBYdgYrKKkMhER0ZCUPxITA8Kx1GDcuEMSOGwbDMFENhQMb6FwEifv/ir+vanY5O2Lw7D3buKUCyPwB5+4ugurZW1zZLNS4UxxFGDBsKo0dmQe7oETBp7EiIxvEESoSAHAgQ8cuBqkFltra1w4atu2HLjn2wY28+7EWypyQdgcz01OMPgXE5MH3iGBgSFy1dGJUkBHogQMTfAwz66jsCm5Hk123ZCVu274Fd+wp8F0AlvEYgKyMNJuWOhhmTx8Hp0yaAzUZzM7wGjzKehAAR/0lw0I/BEKjFaZOr1m+GdRt3wMbtu3HqZPNgRei6DAiwmUWTx4+FmVPGw5wZkyAzLUmGWkikXhEg4tdrywq0q/hIBXz97UZY+9022L5rn0DJJEoUAlmZ6TB7+gSYO2sq5OZkixJLcnSKABG/ThuW1yxG9l+sXg+r1m2GfQUHecVReQURSElKhDmnTYZzzpgO43GgmBIh0BsBIv7eiBj4d219A3y2/FtYvmYD7MLBWUraRyAjLQXmzp4O5589C4bhFFJKhABDgIif7gNYtnIdLF3xLaxB3z0l/SKQO3okLDhrFly8YA4EY0gKSsZFgIjfoG3PVsp+snQVfLHyW6ipqzcoCsY022q1wDlzZsGF8+fAzMljjQmCwa0m4jfYDfDZV2vhky9WwWackUOJEBiGg8IL8QFw5YXz6C3AQLcDEb8BGpsFNHv3ky/hk2WroKq62gAWk4m+IsCikrIHwBUL58Go7Exfi1N+jSFAxK+xBvNF3T35hfD2J1/AZ1+u8qUY5TU4AjOnTsA3gPlwJs4MoqRPBIj4ddiua7/bjoS/DBdZbdOhdWSSUgiMHJ4FV158Dlx23lylqqR6FEKAiF8hoJWo5ouV6+Gtj5dhULQ8JaqjOgyCAFsXsPiSc+H6RecbxGL9m0nEr4M2/nz5N/DGB0sw+iUttNJBc6rWhPjYWLj6sgVw0+KLVKsjKeYdAkT83uGkylxLV6yD19/7HxJ+oSr1I6X0iUB8TAxcc/kF8KMrF+rTQANYRcSvwUZetW4LvPz2J7S6VoNtpyeVkxKGwA1XXghXXTxfT2YZwhYifg0189Zd+fDSmx/C+s3bNaQ1qap3BIbhdpI3X3WJJyyE3m3Vi31E/BpoSbb/7D9few+WLF+jAW1JRaMiwMJE33H9Ipg6YbRRIdCM3UT8Km+qZ156G159+yNwu90q15TUIwSOI3D+vDPg7psWQ1JCHEGiUgSI+FXaMB/hKtt/vf6+4TYiV2lzkFo+IsDiAd1yzSK488bLfSxJ2ZVAgIhfCZR9qGNvwSF49j//B99t2eFDKcpKCKgTgcy0VPgJ9v7POWOaOhU0qFZE/Cpq+L+++Ab8991PVaQRqUIIiEHgnDmnwf13XAuJQ8j9IwZRPilE/Hz4CSm9fO0mePalN6GktFyIPBJCCKgRgcCAALjzpqvgxisuUKN6htKJiN+Pzd3Y0gp//vur8NlXFETNj81AVSuMwOTxY+CBH98AORQFVGHkT1RHxH8CC0W/sbj4T//rDaiurVO0XqqMEFALAnfeuBjuuGGRWtQxlB5E/Ao3d0trGzz2zH9oTr7CuFN16kRgwtgceOjuH8Go4bQHgJItRMSvINpfrd0ITz73KlQdo81QFISdqtIAAvfdfh0Ff1OwnYj4FQL7j8++Au98slSh2qgaQkB7CMyePhke+dltMCQuWnvKa0xjIn6ZG2x3XiH84Zl/Qz5F0JQZaRKvBwQiIsLhobtuorg/MjcmEb+MAL/xwVL4yz9fkbEGEk0I6BOBxZecB7+65yZ9GqcCq4j4ZWgEl8sFv3rin7D0awqqJgO8JNIgCOSOHgmP/vzHMDQ92SAWK2cmEb9grHfnHYRH/vICFBYVC5ZM4ggB4yEQHBQEv/npbXDBvNnGM15Gi4n4BYL7/udfw+NP/xtYj58SIUAIiEPghsUXw/23XytOoMElEfELugH+9Nxr8H8ffi5IGokhBAiB3gjMnjEZ/vzreyA0JLj3JfrtIwJE/D4C1jt7Y1Mr/OLxZ2Ddxm29L9FvQoAQEIxAemoyPPbQ3ZCbM0ywZGOJI+LnaO89+YXwyz/+HYqPlHFIoaKEACHgCwI2qxUeffAn5Pf3BbReeYn4ewHi7c8vVq+Hh594DjocDm+LUD5CgBAQiMCdP7oKt3q8TKBE44gi4pfQ1q+++xk8/eLrEkpSEUKAEBCJwKXnz4PfPXC7SJGGkEXE72MzP/n86/Dm+5/5WIqyEwKEgFwIsEHfZx/9OVhtFrmq0J1cIn4fmvShx56FpSu+8aEEZSUECAElEBg9cjg8/egDkBAfo0R1mq+DiN+LJnQ6OuHu3/wZ1m/e7kVuykIIEAL+QCAlKQGe+t39FOLZC/CJ+AcBqaa2Hkn/SdiTt3+QnHSZECAE/I1ARHgY/PW398O0iWP8rYqq6yfiH6B5io9UwL0PPwmHio8MkIsuEQKEgJoQYNM9n0TynztriprUUpUuRPz9NEd+4WG499dPQkVlVT856DQhQAioGYEnfn0fhXfup4GI+PsAhgVau+fXf4aaOtoPtw946BQhoBkEHn3wLrhkwRzN6KuUokT8vZDevqfAQ/oNjY29rtBPQoAQ0CICD99/B1x+wdlaVF02nYn4e0C7bVc+DuT+CZqamnucpa+EACGgdQR+89Pb4YoL52ndDGH6m4VJ0rig7Xuxp0+kr/FWJPUJgb4ReOzpf8EHGDad0nEEiPgRBxZs7V6cstlIPX36uyAEdIvA7596ET7+YrVu7fPFMMMT//6iErgPSb++vsEX3CgvIUAIaBCB3/75OVx9v06DmotV2dDEX1ZRhaT/F6iqqRGLKkkjBAgB1SLw0GNPw6p1W1SrnxKKGZb4Gxpb4B5cnFVaXqEEzlQHIUAIqAiBnz/6N9i8Y5+KNFJWFcMS/z0Ye+cALtKiRAgQAsZDwOF0wAOPPgUFhcXGMx4tNuR0zrtxcdaa9ZsN0+BWE0ACPuITMGptnMUN0fgZiefC8AjC83ZEwoLf3fjZif914NGMRxMedbhvfHWXCaq6AI7i91r8pEQI6AWBtJQkeOXpRyE+NkovJnllh+GI/5EnX4RPlul7WlcgkvgwG8BwqxuyrACZeIhKTUj+h5D8DzpNcMAJcIQeBKKgJTl+QmBszgh487nHwGTCPxyDJEMR/7P/eQdefusDXTZtKPbcxyHZ59rdMAY/lUr1+CDYgQ+AHY7jDwKl6qV6CAGRCMw5bSr8/bEHRYpUtSzDEP87n3wJf3z2JVU3hhTlRiLJTw9wwxTmr/FzqsaHwIYOgE34ECCXkJ8bg6r3GYHLLzwXHv7pLT6X02IBQxD/2g3b4K5f/VGL7dOvztMDAOYg4acKdOP0W5mECxtwD/q1bSYoIVeQBPSoiL8QuOeWa+CWay7xV/WK1at74i8qKYfr7/kNNDToI+gaI/xzAt0wBAdotZA24wNgOT4AyugBoIXmIh0RgT8//DNYcNZMXWOha+J3u92w+I6HIG9/oeYbkbl0LghyCx2oVRKUVegCWoYPgBZ0B1EiBNSMQGBAALz298cgJztTzWpy6aZr4n/g0afhq9XruADyd2E2aHthsBtOU4EPnxeLFpwe+lGrCb7DhwAlQkDNCGRlpMHbL/4ZAgMUnCmhICBIK/pM/3z1Pc2T/gQk+4fD9UH67C4Lwdly14W44aYwN0To9s7T59+T0awqPFwCDz3+jG7N1uWf35erN8C//vuephvtMiTIW0LdwHr8ekuTsBP1qwg3jNPBW4ze2obsOYHAym82wj9efufECR19052rp7j0KFx950Oa3UwlFgdtr0XXznB9vmGe8qfzWRvAF+j7p0QIqBWBv+DG7fPnzFCrepL00l1/8pEnn9cs6Q/DqZkPoBvEKKTP7tiFQfigwzcbSoSAWhH4w9P/htKKSrWqJ0kvXRH/E39/Fbbv1mbEvfHo9vgp+vPDdNUi3t2TM9D2n+ADj4WaoEQIqA2BxsYmeOTJF9SmFpc+uqGZz5d/A29/vIQLDH8Vnopz8281eK83B11bjPyN+ODz131H9XqPwJYde+CvL77hfQGV59QF8ZcdrYIn/vGyyqHuW70pSPo34ECuv5I5OAgskRFgjYkGa3QUWMLDwGT3zwDDUHR13Y4PwBBd3JX+alGqVy4E/vvup7B87Sa5xCsqVxeDu7c/+Bhs2LxDUeBEVJaLLo7bFOrpm8NCISA9GWwpiWBLjAdrHBJ9VATGY+6bZd2t7eCsrYeuympwlFWC80g5dBSXijB7UBn7MejbP5tNnhDRg2amDISAggjExcTAhy8/BZERoQrWKr4qzRP/i//9AJ5/VXtTrli45J+hT1/OZI2LhaAx2RA4OhvsaYncVbkdDmjfdxCPA9C2uwDcXfLFYdiG5P9yEzn9uRuNBAhHYO7pM+DpR+8XLldJgZom/m178uHGu3+jJF5C6orCTvYDSPqRfXe2uesIHjcKgqflQsDwTG5Z/QlgD4HWjbugedMO6Kw81l82rvNftwN8jCt9KRECakPgwbtvhmsvXaA2tbzWR9PEf8Vtv4D8A9qLw3MXDmKOksGNHjxpLISeMQ1sCXFe3wAiMrZt3QPNazaCA8daRKe3WkywnkI8iIaV5HEiYLPa4AN0+WSmJXFK8k9xzRI/G2Fngy1aSxfh4qxzAsVqHTA0HcLnzwZ7ZqpYwT5Ka1mzCRqWrwW3A/00AtOfGky005dAPEmUGASmT8qFf//1YTHCFJYik7NBXis2btujSdJnO2OJJv3I8+dC7B1X+530WYuHnDEV4u+/FYJwTEFkusKPs55E2kGy9IXAd1t3wivvfqZJozTZ4190689h/8EiTQFuR1f1rzE+TaygR609KQEiFi0Ae0qCKnFoWv0dNC5dJUy3pejvX0L+fmF4kiAxCFgtFvjgladhqMZcPoJoSAyI3kh55qW3NUf6zK6F6OIRRfpBOHgbd/eNqiV9Zm/YnOkQc+MVwNYJiEjnoXssTSObz4iwl2RoA4FOnNn2l+df04ayPbTUFPHvzi+EV/7vwx7qa+NrJk7dPAsXaolIITMmQfS1F+P8e/XPdgnMyYLY2672LAwTYTt7eFIiBNSGwLqN2+DdT79Sm1oD6qMp4v/bv7S5ZPo83DlLRAqdPRUiLzlHhCjFZNiS4iHmlivBGhvDXScL6zAJF71RIgTUhsA/Xnkb6jS0vatmiP/ND5fBVoyXobXEYs4zwuJNIdMnQsTCubxi/FLeGhsF0TdeBpaIMO76Fwh6iHIrQgIIgR4IsEBuT73wZo8z6v6qCeJnT9IXXntX3Uj2o9083BidNwWNGQGRl87nFePX8rb4GIi+6iIAE5+LKhH9/DMFuc38CghVrjsE/vflSvjmu+2asEsTxP/0v96CpuZmTQDaU8mx2Ntngcd4kjU+FqIWL+QRoZqy9qGpEIUzkXjTXAEPU14dqDwh0BcC/9BI+BjVE/+m7Xvhk2Ur+sJY9edOD+Dv7Udddq7fomXKAXDwlFxgbiuelIC9frYfMSVCQG0I5O/HCSjvqH9hqeqJ/zmNPEF734CpSE68vv3wc/y/Gre3XSJ+M7cVCyDHk04T8FDlqZ/KEgL9IfDSGx+qfqBX1cT//udfw47def3hq+rzUzndEfbkRAg7e5aqbeRRLuK8OTzFPbGOmL+fEiGgNgRaWlvh7/9Rd8RgVRM/e3JqNU3jdEWEYW9fzylw9HBgUUR50iTq9fPAR2VlRODDz7+CPbjuSK1JtcT/3CvvwtEqecL9yt0YLCZPCMfklaBRwyFwVJbcavpdfujc07h0mCRgmiyXAlSYEBgAgRdef2+Aq/69pEriP4Y7P732zif+RYaj9rGcPVEW7MwIyZYYByyUtNQUj64eCuMgFT0qJzcC33y3FVat2yJ3NZLkq5L4X3ztfXA4xYb2lYSOxELjOKZwBmZlQMDQNIk1a68YC0HBk3Ls/DOneOqnsoTAQAi89NZHA1322zXVEX9hcRm8/9mXfgOEt2I2myecA9XgqeN4VdBUebYlJNtPQGoaSe4eqdBROQUQ2JO3Hz75YrUCNflWBQdF+VaRt7lfelOdT0hv9R/GQUTmkCAImjDa26p0ky94fI5kW4bj2xULeU2JEFArAq+98z/VqaYq4t9bcAiWfr1GdSD5olCmTbrrISgn25eqdJM3aDzf7J50mtapm3tBj4YcKi5RXfROVRH/Kxoe0O2+YTM4SChw5LBuMYb6NAUGQCDHxvBpHGMqhgKajPUbAv99/3O/1d1Xxaohfjbndfnq9X3pqJlzoYhmDAeiASMyNWOraEXtwzIki0y2Sn/LklwpFSQEfEDgSFk5vP2xesYuVdNXev099fnBfGhXT9Z4DtK3pyTpKiaPr9gFZKb4WuSH/EkcuP8ghL74hIDbHgLuwHBw20PBZQ8Gtw23SLPawW3BlYsm1iBs4MWF/zrB1OnEowNMzlYwOVrB3N4E0NEApq5On+rUeua3PloCV12ijii7qiD+gsJi+HLVOq23K8RwuHlsKUM0bz+PAfa05OMhm92+997ZfH5KMiJgtoArbAh0hcaBKyQO3CEx4EaS502m9gYwN1d7DktTFZja63lFqrp8SWk5sDA0l19wtt/1VAXx//f9JX4HQoQC0WbfSau7XtuQuO6vxvw0mzBwWwx0VlX7bH8Adi5DsJPZgh1MSmIQcFsDoSsqFboiU8EVmYRCWQ9ebHIHRkAXO2KzgK3aMXU0gaW+DI9SMDdWiK1MJdLe/vgLIn7WFmVHq+Az3MBADymCw+VgjYvWAwRcNthioiQRP6s0DHmphat2KswQ6IpKg86YoeBC0lc6uQPCoHPISM9hcrSApfoQWGuK8E2gQWlVZKvv4KHDsHTFOjiPM1wJr4J+7/G/8cFSXhtUU571OqUmc0S41KK6KWfm2JqRJzaSbgCUaojZCp1x2Ui42cDIVw2JjSF0Jo31HOa6YrBVHdDNW8A7n35hbOJva++Aj5d8rYb7TIgOQRxSLKHBHKX1UZQtYJOamLuHko8I4CBsZ0IOdCaOPj4o62NxpbK7otKhAw/m/rEd3QfmhnKlqpalHhZqfsPWPTBj0hhZ5Hsj1K89/rc+XApt7e3e6KmJPByLdsGMc9mNnkwB0jGg1bu+3T2dccOhMzkXZ+NIf9j6ViN/bld4InTgwd4A7GW7wdRWxy/UTxLew16/YYn/o6X68O133zs4Pik9WTj8RNJrVVVJMwcGhJ53TenCmTnOlAmeWTrelVBfLvYG0I6HtXw32Mp2qE9BLzRa8c13cPhIBWSkJnqRW3wWv/29sAGO0nJ9jdxLmIl4okVd0mcEnRCi8W8cGNCEnsHb3pmUCx2jztU06fe0ko0BtI++AO1J6HlaM9/f/dR/C7r8RvwfLdXmBuoD3VU8y1HcDsdAog1xzeWUjkEnPTf7vUfYtMmOkeega0d/kV/dwVFo2zwcp5C+r0O/wMl84X9frQY3V29RuoJ+If68A0Wwadsu6VqrtGQHh15drW0cpfVR1NUiHYMOIv4+b4Ku6AzsFZ+vm15+n0biSWfKeOgYNkfIwrL+6hB9vqmpGYO3LRct1it5fiH+D5for7fP0G7m8De46nEZu8FTV5P0mfitRPyn3D2diWPAkTUbAFfeGiGxtQcdI+eDO1g7a2I+/XKVX5pGceJnbzbLvv7GL8bKXWkjB/l01mp3hoIoXLtwy02p6cyzJsPIYalgNit+S0tVWdZyzrQpnkFcWStRoXB3UKTHreUKZ6uN1Z/25h+A7XsKFFdU8emcH6Jvv6lFes9OcYR8qLCui03rkcb+zqO+hyrwQTVNZHUeq5Gmp8kEi648GxZhaYfDCZt3F8GOvUWwb/8RXBluPFwdmTM9YRCkgan9Um6LDTpGzAX7wTVgqStRvUGfLFsNE8aMUFRPxYn/8+VrFTVQycpqOFw9neVVSqqqurrYg8/dIW1w1xIV+YM9drsNTpuU7TnYyaNV9bB1zyHYmVcM+QdLoZHDnfRDJSr+4hh6GnRhyAVK2AkYdoYmyP/LVd/Cb++/VdG3VUWJv/BwKWzbuVe39+QxDuLvwMh9Rk5OvDekJlts/z7dhPhIOP+siZ6Dyd93AO/BPUWwZ38JHCgsgy4XR6NJVVimco6M6YqRfqDNDMPi7JAVY4W0aBskhVkgLsQK4YEmCLSagK1pcSK0rTjqXtvWBZXNXVDa0AmH65xQeMwJR/BTicTIP2D/ClWv9m1ta4OPl62Cy86fqwQknjoUJf7/faXf3j5Ds7YLb3T09ARLWMjlxvAVjkMlYB+apljjq6miDgzNLTVZE2K9LpozPAXYwVJHB3MLFaJb6LDnbaC0QrtuIWfKROjC1bhyppQoG0zLCIJpqXbITRx8lbUNx5SDbSaIxR2KsuNOXtde1+qCTaUd8F1JG2w63AGdXfI9gNlsn8D8L8HUItGVKCeo38tetnKdfolf6ztsedP+xTiZf9TJ97g3xTx52vMKDUv87TjFV2qyp0hbwBMQYINZk0d6DlZ3eWUduoWKYHd+MRQUlkJDozbGojrjMaIlxtuRK80dEQLzRwQj2duFVREVbIb52UGeowMXYSwraIPlBS1w8Jg0d9+AiuGspo6hsyAgD8m/U50hYtj09tKKSkhJVGZfDsV6/Bu27kbDjg7YPnq4eIiD+Nv2HYTw88/UAww+2dC+9yC4ONYx2NJxExcBKWlIFLBj4dyJHml7cXCYuYWYe2j/oVLokrFXKlV9Fr/GmT5FavF+y+F4OVw0NhSuGBcGMTxhZ/ut4cSFAHQNXTw62HOsO9wOH+xqhn0VPKtiTsju/sZ2C2OD3gEHVnafUt3n58u/hTuuv0wRvRQj/i/wVcYI6WAn8/NIm9nTeawamMsjICvdCFD9YGMbx7iPNSYarFERP8gS+WV0diqwg6W2dgdsQbfQrn3FkHewDDsxx0RWJUkW2yyFkZnodGZ2MNw4ORwS0G+vdDotIxDY8fXBNnhzSxNUNIgbC3BFJoMzebxq4/t8vfY7/RH/qnWblL6H/FIf6/Ezb6VZYu2tm3cbivhd6E5p3bFPIloAAcOUGRMJCrTD7CmjPAdTtuxorccttLegBN1CZVDf2CzZBqkFWU/fjfvdikoJETa4dXo4zELi9Xc6e1gQsOP59Q3w6W5x2LL4PpbmYzjYW+ZvE0+pf39hEeTtL4JR2ZmnXBN9QpEe/6p1W6C+oVG07qqUx2LG7MZOSq5EP3/rtt0QNn+2bL1YtYHWvH4Ll0qB2Vlc5aUWTk6IBnZcePYkj4jd+ABgg8T7cMoomy3U2YUj/TKmrtjhwMIxiEpzsJd//+mRYLewN1b1pDtnRkBuUgA8920D1LZgr0pAcuADM3APup1d8raRFFW/WLNBP8T/9dqNUjDQbJldDhMSvzR3DzO6Zc0miLh4nmbt91ZxNm+/ZcM2b7Ofks+Ec/YDx2afct4fJ8aOSAN2sNTa2gFbcO3A7vwSz2yhI+Vi3UJuWzA40yYLM/OGaRFw9fhQYfJEC2KunxGxdvjjqlrYW87v+2e7jDmTJ4DtCF+nQ7SdTN6adZvhp7deLYfok2Qq0uNfu3HrSZXq/Qfr8fMk1gsOmTkRrPExPGJUX7YJQ3O72qTPsggarQ7S7w10cHAAnD51lOdg10orajxuoTwcJM7H2UL1DXyuCyfbQMUi5k/353OjPS6V3jao7TebEvq3hbHwhxV18O3BVm71OhNGeVb1mpvVtXDyUPERYEEsRw2X190j5u4ZoBm++W47NBjEzdMNQws6+bcg+U+W6O5hcpqWfwNR11zcLVJ3n87Kamha/R2XXUG5OVzllSqckhiD0/Ri4KJ5x3vpu/BNYOe+wzhIzGYLoVuo03uXA4s93xU3jF919Og8ck6MZyCVX5hyEh6eGwVP4pjzigJ+8ndimOqAgq+VU97LmlZ8s0n7xL+K04frJVaqy7ap3YTEL93d07ozDwKxRxs0Xhvk5msDNC1d7WuRk/JbY6IgMEcAAZ4kVZkf40amATtYamlpx9lCh4BNHWUPgsHcQs6kMUKU/PU87ZF+t+EPzokCJz4r13L2/NlU2K7odLDUFneLVsXn2o3b4K6brpRVF9l7/Os2bZfVALUK34s9/qN4cyZwzIhrWLISAvCVj2cTcjXi0/LtFmjLO8ClWvBk7W280ZfBISGBcMb0HM/Brh8pr4Ht+1iAuVLPIrK6Hm4hV2QKMLLiTXefEQWnZ/p/5g6PHb/Gnn99mwt2lUl3FbL6nQmjVUf8+fsLoayiCpIT43kgGrCs5XeYBszBcXFPfiG8/u6nHBI0XhRXwYzhcPewwU8Wqjgod5TGgTihvqOkAmrf+OjECQnfXBh6uWzKZIiNj8LAVuqahSLBnJOKRIQFw4ihSTBryki4eP5UGIWhpmOjwwFMZigPGwXuAL5B2EUTwuGqXD4ZJynsxx9TUgJhTVE7tDrQtyo14XRYc3sDmNsapEqQpVwSruDNzRkui2wmVFbi/+DzFbCFY3GObFYrJPgIzj6bhSFNAji4qbOqGqDLjfPVtb+oi8Ujqnn1A3C18Plnv2hzw7/X58HSVdtgf9FRqKlvBrvdClERIQq1rHLVJMRFwrhR6RCRng1fF0tdHXJc3/GpgfCLOScimSpnhTw1BWEcoFSMH7TyAN/95LYFgrW6UB4lJUo1gQkumDdbYunBi8nq6tmwdefgGug4B+uHfIW+/kXB0n39DJ4mXPVsjQiD4BkTNI1W7RufQGcV39RGNpN7NWLKUjNu1fjdtnzPwX4nDYmBMTilkq22HYs+9OhIffRsmW1L8vjiBtmtZrhnln5In2HC0pSUALh8Yji8v036OiFX2BBwhcaDmmb4bNq+27Mfr4nFzpAhyUb8jU2tsHNPvgwqa0vkKnRBnoG9/jgOXz+zuO7jL8CEQcWCJo7RFgDfa1v75ifQfuAQt+5LcVve/ra4LK+swUBrNfDV2uPjSiOHp8KY7DQ8Uj29Zq26harR4PWHpO9HzEC/YWo4JIdz3oTcrSePgFumhMHm4nY4XCM9wFtn7FCwq2hqp9PphLU4I/KMGcfjRolGTjbi/9agg7p9NdAS7KHeGMLX62dya9/5DKIwUFjwlHF9VaPac7VvfAxtu/k7AdX4CrW8zfseUP6BI8COD5YAhAYHwpiRGZDz/dtAZkqcavHqrdhXnLNXsuMDYNFY/bnBeuJ0/eQw+P2X0sMuezavKdmsqtW86zfv1B7xb8TQA5SOI7AZFxtOxoi2PAO93VjWvb8EutDFETZnWvcp1X66UM+6t7Cnf/CwEB3/12ryxEGSIqy5tf0kt1AiuoXGjUyH0SNScMVtuqrHB77l7O1fNVE/Lq/+2p6t7p2cHgRbiiW+GWHo5q7INJzhU9RfFYqf3yzj+KhsPf6tu/YpDpSaK/wUSWtMBH+vn9nYuHQldNXUQuRlC1RrcgduKlP//jLoRD1FJLYgbqv0N/lTVKhAlxA7vlyzzXONbdTOxgWYa4g9EHASjSpSST3bsUq64WOTAmFmuranbnrbEFfkhkgnfqykKypFVcR/8NBhOIaz+uKixY/NyEL8ZUeroMTgWwn2vlnLcU7/R0j+l3IO9HbLbdm4A5yllZ6YPnZB8ei7ZfN+Nq36DhpxKzlRqR2fl58gdnKm/IPoFsLjfVgHIR63UDoOFKfjQyAV0pP95xbaUCyd9BleF47Rt4un5z3BdgXLTQ6EnRLn9ndFpqI4dp+J6aD11E3q9424j4kcs3tkIf6N2/dKtVPX5VbgQO9wnNc/lmNuf0+AHGUVcOyf/4WwM2dC+IIzel7yy3dHcRk0fbEW2gsPC63/7RYT1OGDU6nUgm6hjdsKPAerMzE+GgeHM3CMAN8K8GEQGS4uFPJgNm2TSGJMbnKkTfMLtQbDp/f1BaOCJRM/oLvHFZ4A5saK3mL99nvLzn3aIf5tu/L8BpTaK34HSSw93A3hAl0JTavWQxuGeAg7cwYET8tVHILO+gZoXrkBWnAWgui0AsdHtvB1erlVqqiqBXZ0u4VGoFsoF+fWs6mj3aEXuCvpR8C+CunGzxmm3AOqH/UVP31mVhC8uN4K9a3SQjh3heG0ThUR/469BbJgKEuPf9e+/bIoqweh9Tgz5XUk/7vDxL5OdtbWQd2HS6Hp280QilPAQqbjnH+ZV7U6cVl5y4btSPjH/eSi2ycP/fofIVZqSwXoEmLHe58BhASx2ULoEsIHAQvLnJYcK0zdvZUOcHSy1SDSEiNBI6YZGQGwbJ804mfz+dWUDh0ugToMchkVES5ULeHEX4u9v8MlpUKV1JuwfCS0t9FnfZUgf39PfDorj0H9J19C45drPKEegsaNErrql83Uad9d4HnDEO3S6WnHMXTt/FeFpN9TR/a9BcNKb9yObiE8WErwuIVOPAhYCAapKb8KbxSJKRPj16dG6nPe/mCQzMwIQuJvGSxbn9ddoeIe3H1WIOHkll35MG/2VAkl+y8inPi3ISlQGhyBb9HfH46d2fNl6pSxOPfM9cIOc1gIBOI+vvaMVLClJYE9aYjXbwOuphZwlB4F5r93HDoCHdgDkTuxwdz/NJugUXpnV24V+5V/FF1C7PhqzXG314isFHQLZcDYUSc2aum3cK8LhTXSiX98Es4fNmiamhoAbKWypLclsxXcgRFgwvg9akk70d2jeuLfSW4er++XpbgYKdDkhrkyz7Zj5M32te25t601OgosGAbCHIpBqgKQJKzYO3S7we3sBDcObnZhmc6GBnA188VB8RqM7zMyB9gLTSYoVXAw11cdfclfgBuvsOO9zwGCgwI8i8jG5+CDAN1CqUkDb7RzpE6au4LpNxZnuBg5ZcfbYU859q4kJFdQOFhURPx78g9KsGLgIsJ7/PsKCgeuka6ehACb4mlC8j9L4b9TNibADjUl1sF/Dkn/oHS+U5M5p+jS2tYBm9AlxA6WhsRFewaJc3MycQ1BKoSHnvz6V9EoHYjRCcbt8TNseYifbc2oplQgINRJb3uEE3/BwaLeddDvQRD4EH3ZTuxtz5e55z+IGn693Ipd/ReR9Aulc51f9ZdSeeUxdAmx4/vYQtket1A6sDeCoZkp0NQu7bUnOsQKkYECp41JMc7PZYZGS6c2t11dK51bWtug4FAxhutOF4aqdHT6UOHwkXJobGru4wqdGgwBFo6gBcnv0iD8z2CJbVjzMvr02SI3I6f96BJix/ufrwN7BLqBss+TBEeCToOx+QJGaoT0gW0XxuhXW9qbf0go8QvtFuwtOKQ2vDSlzwoMM8IGNTU4pikZ5z04fvk09vSNTvq9AezolD6NNS5UOun11kOrvxPCOfq0VoX9rl6AnLdfLLcKJf48cvN40YQDZ9mO63X+1GCCwwZweXyJY29sILe/MMsDI6Xvq26L9OXdRnfzsDuDYYAbtUlKbqv6xkf2FxVLsqW/QhKh6VvcQQzMRYkfgTJ0efyl0QQrO/hlqVECm6b5L3yzYe4tSv0ggNMKpabgAKF/1lLV8Hu5IJvENx8M3aC2VHj4iFCVhN4hhYdLhSpndGFs0Pd57BFX6sj3vQ7faB7Hh9ou6ZEIDHFbuDl2XrLJvGJbKw1gkcpuJvURf2NjE0aTPSYMeundil4qNOM+qpXHxCnWS7xhf+5FH3geun4W4Crf8zQ864fNy2c9fGYPJXkRwAlilBAB6TBILykn8PvRo5I4REykWKnPxFPs219Ucso5OiEGATbYuwRJ81F8AGzQWE+ZuXXeRd2fQN2J9L2/H0xu1urSUkeXOolLmjXSSzk7JeLgUucr9kGB7h5hPX5y80i/Qb0tWYX345voG1+Nb6JzcNrnDPWNQf1gSi3y1krccnItDuCq88/oB1XV+aVL+uh+cwchzmLbtTslPjxd0rGX82YqKi4XJl5Yj7+oRJxSwqzTqSDmNmEPgN9hL/oLJNYmife3HPAEpCVD5CXnwt8gHNhG80RB0lA2dUl/tattVdENIc187lLVLdLvPFOndOy5FR9AQHGZOI4V1uM/gpuCUFIWARbB8jN0o3yG4XRysfc/we6GSfgp7GnupTkWjPsTNHo4RgPNAXtaoqdUbl45rF5P+y57CeGp2Zz41JSYqpqkk57EKlVXrLxJeq/d5JS4b6/MKJSWVQqrQRjxl5aLU0qYdQYStBM7KTsdJngLZ0iOwFYdiQ8B9pkkwwQFEwZ0s6elQMDQNAgYmfUD2feEezxGpCTi74mIb99NThYcj/mofZ/yWt4gnfR801K9uYtrpWNgcigbmNBbFGvq6qAVo+4G4x4QvEkY8YucasRrlJHLO5Er2GrYPc7jhBGK3f8UJP9kbOlEixvi8XcsHhFevBawsbEa9BpU43EUj/EzxsPI6eMwvHPyoBBPHDMUbFYrODul/wEOWonOM5jamzBEsO8bcDDfdnGdE9KjpC8C0zq0PCGtTR3qDTtTfKQCRmVncjePEOKvqWvAJ5E6X4+4EdK4ALYqNp8dnmmUJ3qPjPdD8L9APMVuAvZiwPqXjKaZh7MNy7C4+D1TdXMXjPOC9FmZ8LAgGI/kv3nH/p4i6LsPCLCY8FKIn1Wxu9LYxF/AsYmNuaPRh1ZSNmtJxVEhxO9Fv29ww46Qm2dwkFSWA3ndMyjMxgkq8GADxmzFMFssxjY27036TP09+cU+WcE2KKckHQFzq/TNQHaV63TZtxdw1rS4oKRW+gCtiQN3L9TjylJ+tJqrfHdhIcRffpQWbnUDqufP2vom2F1Q4rWJE0dneJ2XMp6KgLmt9tSTXp7ZUWZc4t9wRPrAuMnRAqZO9XovKgRxrRDiP3pMzFPIy3uasvkRge+2HfC69uSEaBg1PM3r/JTxZATMzTUnn/DhV0NrF2wuNSb5bzgsnfjNzeruxFZWS78net4+Qoi/slp6z6SnMvRd/Qjs3HfYJyVzR6X7lJ8yn0DA5GgGU0fTiRM+flt1UL09Vx9N8To7W8OwpVi63eamKq/r8kfGqmoxu+YJIf5qQcr4A0iq0zcESiuOQUmZ9294E3CAl5J0BMwN0tfHrEXib3X0GqGXroomSi7N55uKaWlS97T0GkHbpQoh/pq6ek3cFKSkGAQ2+ODuGTE0ETcVFxNYSoz22pJiaZRO/M4uF3y8t0VbBnNq+0W+dHtN7Y1galM3l9XVSx/w7wmtEOKvrVfv9KeextJ3MQhs23vIJ0HjcTNxStIQsDSU4Txb6b32zw1E/J/ubYVjHCt2LfWl0hpJwVIdDgewSMi8SQjx12OsaErGQaDg4BGob/T+5htPs3uk3xwYKdJSd1hy+dqWTnhzu3oXJEk2rI+CH+7is9NSd6QPqeo7VV3L3+sXQvxNRPzquztk1mjD1gKva5g0dihERoR6nZ8ynoyApda39RMnlwZ4f3sT6D1w2+tbm6Gy0bNKsbf5Xv1mLh5zs7oHdrsNqW1QAfE3NLVAl4stB6JkJAS27PbN3TNh9FAjwSPUVtYT5Ykfw0I4/HsjP1kINUqgMBae4v+28tlnrfbtfhaovs+iGhr43mxYhdw9/oYmcvP43HI6KLC3oBjcLu99z7k5GTqw2n8mWI55v36iLy1X7W+F5QekT3PsS6Zazv1zA44xen8r9qm2RUPEX9+kAuJvavLe19sn4nRSkwi0dzhg3TYf3D1jMsGKUT0pSUPAeuygtII9Sr24vgEqGjEeh47Sa1ubYCfHSl0GhaVqv6pX6/ZurqZm6TOXumVx9/hFjDB3K0Of2kJg8w7vySgsNAgmjMnSloEq0paFabZWev+g7Uv15vYueHK1mAVAfclX+tzqQ23w9hb+GYU2JH4tpZYW/jc3fuJv5VdCS6CTricQ2JNfcuKHF9/Gk7vHC5T6z2KtzOv/opdX9lV0wBOrtE/++yod8NQq/jn3lupCnLuvLTxaBERC5ib+NtwYgJIxEajB9Ru7fCD/CaNpPj/PncLCN1iP7uMR4Sm7Gv39/1jHNxjKrQSHgCIczH3s6zpwsI11OZOtgh9PThV8Lt7Wxh+DiZ/4O/iV8NlyKqAaBDZu9/41OWlIFIwclqoa3bWoiLViD5i6pE9b7Lb58z3NmiT/gzVOeHhZLdQ082/wwx6ipnb+t4ZuTJX6ZONrvImb+Ds6+G9CXiOovP8Q2J3nm7uHpnXytZWpswOspTv4hHxfmpH/nzTk9tmKoaZ/uaSGa3VuN3Am3NPYWr6r+6emPh0O/s42N/E7nPxPXk2hTsqehEBJeRUUl3kfynYCreI9CT8pP6xV+WBuFBNMjE3z/Nln1XBU5Ru0f5rXCr/6vBoa28TMSrId2SrkzUlK+/GWEcG53MTf2Uk9ft6G1Hr5DVu9d/dkY9C25IRYrZvsd/3tR7YI02Ev7tZ198fHYGWh+iZqsLWhT62th+fXihuAtdQUgaVGOwu2ejd0Zyf/w4+b+LswAiAlYyOwI8+3kAITMYQDJT4ETK21YCsRR/6sJ/3nr2txumc9NLSr4296bVE73PReFXyVxz9vvRttk7NNKG7dcpX87ML4TbyJm/hdFK6Btw00Xz7/QAnUNXj/x0nROsU0OZveaak9LEbY91JWFLTAj96pgnd28q8OlaoYG8D93fJaePyrGqhoEOtRsB/+DhdraXsmosuHFfP9tQE38XOulO5PLzqvMQQ2bPPe3TNpbCZEhIVozEJ1qmtjRCY4hnxLRxe8+l0DXPd/lfDerhYQ4FnwCry8Kgc8sbIOfvJBFWzAxVmik610O5g1EHp5MLvdHGG6u2VzE7+pWxJ9GhqBbXt885lOGkereEXcMGxqZ8ChdQACXv9761OFse1f3lAPi/5bAc98Uw87K/inEfauo9Xphs9w16yf/a8a7sNxhtUH5AkBY8GQF2wqrB6SSQDpWnmBMInQglcJKu93BPYWlCD3uMFs8e6uzB2VASvXaXM6nd/B7qUA8/cHFK6FjuFn9roi5mebwwXL9rV4jrgwK0xICYDxSQEwJsEOQ0J9j7/EVt3uOuqA7Tg9cwdnnB1vLDTXl4H98AZvsmoij8nE3V8HbuK3WPiV0ATapOSACLS1d2DQtnyYPWXUgPm6L7IBXnbv0OSAbkT4PpkLw164DhxZp/EJGqQ02+Hqqzx2HB/TiQy2QFKEFRLCLBAdYoWwABME4MOfdQg70Rfdhj36ehw4rm7p8gSIK63rVDSMO9s8nT0U9ZREcC438VPERT3dUny2bN11yGviDwsJ9ARt27LzAF+lVPoHBCy1h8COvUHH0Bk/nJP7S31rF7Bjn/StgWVT0dR8DOwHV6MbTF9rjawW39+yeoPM3V232Wy9ZdJvgyLga9C2ibQ5i/A7xVJz0NPzFy5YYwLNjUchYP9KnMHDv8pVbabbrNz9df6NWAKI+NV2X/hNn+q6Bti5r9jr+ieMyfA6L2X0HgHW8w84sEqWAV/vtfBfTjbFNWD/17gyV/xgtP+sOlGz3W4/8UPiN+4ef2BggMSqqZgeEdi8y/sY/YnxUZCdlaJHGPxuE/P5B+Z9iVM9tRuFUwqILPCavfAb3JFLvxPNAwNUQPxBgYFS2ofK6BSB3fne9/gZBJNocxbZ7gRTaw0E5H0hfJGXbApzCrYXbQAWg0fvSRXEHxJMPX6932i+2FdcWgVFpd4HbZuIWzJSkg8B5u5gPWBbiX4JkQ3iBu5dApZq79825UNcfskhwUHclXC7ekJCgrmVIAH6QmCjD6t4h2cmQNKQGH0BoEJrrJX7IHDfUjA3VapQO+kqWct2oUvrC2BrGYySggVwLjfxh4fQ0nuj3HDe2rnLR3fPZFrF6y20XPlMLej6yf/qeJAyGVb6cinnY2FzQ4XnQWYr3+ljSe1nDwtRQY8/IjxU+0iSBUIR2Le/BGrrfQjaRlsyCsV/MGEsuFvgzo9x8/b8wbKq7jobrLYXfnt81g4+yIyYwgXEueLu8UdGhBkRe7J5EAQ2bCsYJMeJy8zPHxZKLsMTiMj/zdTJwhNvhsDd/wNLlfcB9uTXrO8aTO1I+BiQLnAP6ltb1Hcmg5yNCg/ntpSb+C1mM4SSu4e7IfQmYMe+wz6ZREHbfIJLWGYPoRZvPP4GUL4b2JaEakpsIRYbnPY8oI7RKm/WNiI62/xLwFCRiPAwaG7x/tVeTTcW6SIPAixoWydu0mP1MpbTxDFDYfX63fIoQ1IHRcDkaAZb2Q7P0RWdAZ14uKJSBy0nRwZTRxP26ovBWnMY1yGI23lLDl39ITM2KoK7WiHEHxUZDmUVR7mVIQH6QaC1rR3Wby2A06eO8sqoSejnN2NgL5eOF954BYQKMrGVr+xwW+zgikiGrohEcIUngdvOP6jYn3lsSqYFB2wtjeVgxu+U+kbAjB6WaLUQf4wARfo2k85qGYHte4q8Jv4QFrRtbBZs9WHlr5ax0YLubA0A86d3+9TdgRHgCokBV3A0HlHgDooAt83Hh4HbBab2RjDj5jHm1jo8asHUXK3b8Aqi2zkqgr+3z3QS0uOPjY4SbR/J0wECe3yc1jmJiF/Vrc7GAyzs6LlRudmK5B+MB67gt9rBjb/B9H30SPb25u7ykLonWBrud8v2vKUkHYHo6EjphXuUFEL88bHRPUTSV0LgOALHahtgBwZtG5+T7hUkE2lap1c4qSoThjw2dTR6DlXppVNl4mLEED/3rB6G75B4Wnmp0/uM26ytuwu9lpEQHwnDhyZ7nZ8yEgJGQ2BIrBiuFUL8yUPijIY/2eslAr4GbZsybriXkikbIWA8BBLiY4UYLYb4E4n4hbSGDoUcPlIJh45UeW3ZhNEZXueljISA0RBIShDDtUKIPyVxCLCFXJQIgb4Q2LzDe3cPC9qWEE9jRn3hSOcIAca1IpIwtk4YEi9CH5KhQwR25R/2yaop44b5lJ8yEwJGQSAtJUGIqcKIPzmRiF9Ii+hQCAvaVlPf7LVlbBUvJUKAEDgZgZDgYIgTNJ1TGPGnJol5Ep1sKv3SAwJunM+9cZv3cVbYXrwiQs/qATuygRDoRiBZkJuHyRNG/BlpSd360SchcAoCO/MOn3JuoBMTcTEXJUKAEDiBgCg3D5MojPiHptP86xNNRN96I7C3oBg6O129T/f7e3IuEX+/4NAFQyKQmSqOY4UR//CMNEM2BhntHQLNrRi0bZv3G39MGj3UO8GUixAwCAJZ6SnCLBVG/Am4ejc8jHbjEtYyOhTEwjd4m4KDA2DCGOr1e4sX5dM/AsOyxHWuhRE/gz0zTdwTSf/NaDwL9+R5T/wMnanjaRWv8e4SsrgvBGxWK2RnqpT4hwlUrC/j6Zy2EaiqqYftew97bQSt4vUaKsqocwQy08VuiiO0xz8iK0Pn8JN5vAhs3+v9fqkJcZEwLJNmi/FiTuW1j8Dwod5FuPXWUqHEP3rEUG/rpXwGRYCCthm04clsLgRGDsvgKt+7sFDiHzMyCyyW7zdh6F0T/SYEEIGikqNwqNj7oG2TxlJngm4cQmD0CLETHYQSvwn3TB2elUGtRAgMiMCW3YcGvN7z4rCMITAkjnZ464kJfTceArmjxE50EEr8rDlyhlMPzXi3pW8W+xq0bTIFbfMNYMqtKwSGZ2WCzS5ks8QfcBFO/GNzsn8QTl8Igb4Q2Le/GGrqmvq61Oe5KePEvub2WQmdJARUioBoNw8zUzjxTxgzQqXwkVpqQcDlcsOmHQe9Vmc8bs4SEoybeVMiBAyIQG6OWDcPg1Ds+wMKHIrB2mKiorBHV2fAJiKTvUVgJy7mWnDmBK+yH2hugthpQ6GqohI6Q2zQFWwFVyAedpxIYDOD22L6QY6pyw3gdIHF0QWm9k6wtHaCtdkJliYHWJs68HD8kJe+EAJaQGDi2FHC1RRO/EzDsfiEWr1uk3BlSaB+EGBB25zOLrDZTp0Ftr72GGzBY3d9DexvqIeOrk4AtuNc3OD7jXoeAnYzuELYrR1wCmBmhwusNW1gr8ajqhXs+J0SIaBWBOJiojEigvi1LLIQ/wR8QhHxq/VWUodeTS1t8N2O/TB7yijAPjosO1oKq6oqYEv1UWjrRKKXKbnwoeBIDPEcrApzRxcElLdAQFkzBJZ7P+4gk3oklhA4CYFxo+UZM5WF+Kfk5pykPP0gBPpCYPmBIlgV2gGrKo7ISvZ91d19zhVggbbMcM/BHgKBxY0QdLgRbPXt3VnokxDwGwITx8rDpbIQP1vIFRkRDvUNjX4DjCpWLwLtSaHQOiwKvortADjifQgHuS1iD4HW7CjPYce3gJCD9RBw1PstI+XWj+QbD4FpE8fIYrQsxM80Ze6eVd9ulEVpEqpNBNqTwqBlZBQ4Y4NUb4AjCd1BeNiq2iA0v5YeAKpvMf0pGB8bA9lDxUXk7ImQ8Omc3cKnTJDnSdUtnz61g4AjOghqZ6dA/awkTZB+T2Sd8UFQd3oy1J2WDM5ImlLaExv6Li8Ck2R0mctG/LOmjJcXFZKuegTcZhM05sZD7dlpPwymql7pfhTsSA6FmnPSoWksm15EiRCQH4Fpk8bJVolsxJ+RmgjpKeL2iJQNARIsCwIdCaFQPT8TWkfoK85Oy6hoj12O+BBZcCOhhEA3ArOnebfOpTu/L5+yET9TYtqksb7oQnl1gkDTmDiPe6QrzKYTi042ozPCDrVzUqA5Z/B1BSeXpF+EgHcI5IwYBnHRkd5llpBLVuKX84klwVYqIjMCbDUt8+W35ETLXJM6xDePiYG6mcng7mMRmjo0JC20isCMybmyqi4r8Z8xYxIEBdKAmKwtqBLhbAC35izt+/J9hbMjBX3/aDcN/PqKHOUfCIEzZkwc6DL3NVmJn2k3Y4q8Ty5uBEgANwIdiaFQd2YqdIXq07UzGEAe1w/aT37/wZCi694gMARDk4wfLW+wS9mJ//QZk72xlfJoFIG21HCom43ujh6B0jRqCpfabgwWx/z+bK0CJUKAB4HTpsrb22e6mdyYeJQcrGxzSyvMvOD6wbLRdQ0iwEi/YUai4prHBgbBkKBgiAkIggibDYIsVjDj7m9deCu3YUC3BocTahxtUNnWCjXtygdhi/y2DOP+0IpfxW8MnVT43BO/gtOny0v+sq3c7W6D0JBgdPdMgA2bt3efok8dIMDcO0qQvhlMMC4mFiZGxX8zwNsAABxASURBVEJuZAyMCY+EEKv3LqVGpxP2NNXDrroa2F5XDTsx6qfcqX5WMkSvLsXony1yV0XydYYAC3UjN+kzyGQnflbJWadNIeJnQOgkOaKCoH6m+FCxPeGZEpcAZw9JhnPwCLKcGrq5Z96BvofjG8HM6DjPwfK1dDrhy6py+BqjgW6rrhqoKNc1hk/U6hIM9obxiCgRAl4icPp0ZVzjsrt6mL0NjS0w+6IbvDSdsqkZAVeAFWrmpskykGtHgr8wNROuSB4KaSHyL5A61NwM75Uegs8wUFyX2yUcdmuDA2JWFoMJN4ahRAh4g8A//vhLYLMh5U6KED8z4ie/fAK++W6r3PaQfJkRqJ2V4gleJrqayzOGwy2Z2eizt4sWPai8GkcH/KeoAD4uLhw0r68ZAo80Q+SGMl+LUX4DIsB2Llz10UuKWC77rJ5uK+adMbP7K31qFIGm0bHCSX9GfBK8NfNsuD97jF9InzVFjD0AfjFiHLw+4yyYHJsgtHXaU0OheWSMUJkkTJ8InDVrqmKGKUb8C+fNhsCAU7fCU8xSqogLgY4hIdAyWhyB2c1m+GnOeHh6/DTIClXHFMgRYRHw3MQZcBc+BNigsqjUPA4fmLHBosSRHJ0isGDuLMUsU4z4LRYzzD19hmKGUUUCEUAObBofL0zg8PAo+M+0OXBlSqYwmSIFXZueBS9NPwMyQiOEiRWJnzClSJBqEMhMS4XJueI3Ve/PQMWInylw/jzlnmj9GUznfUeABV1jq1NFpNlDUuCN6XMgG3vXak6j8eH0Oj6cpseLWafgjA6goG5qbnA/6zb/TGVd4YoSP4vRn5os7zRAP7ef7qpnMWhYKGIR6XycsfOX3CkiRCkiIwDfUp8ZPx3mJYnZBYkFdesME/MAVQQAqkQxBC6af4ZidbGKFCV+VqGSfixWHyU+BJpzxPj1L0DSf3iUNjfn+cOYSXBOUjofkN+XbhklBk8hypAQVSDAQjQkJ4pzpXpjlOLEf+mCOd7oRXlUgAALOsaiT/KmOQmp8BuNkn637b8fMxFOwxlIvKktIxxYJFNKhEA3AgvPUba3z+pVnPiTEuLhjJnaed3vbhwjfjYL2D1rdFQM/GmcMqsR5W6jv4ybCsMxZARvah0hxnXGqweV9z8C8TExcN7c0xRXRHHiZxZedO5ZihtKFfqGgCMmiHufXBZT57ejJ/lWsYpzm3EP4YdHTwS7WXoICWYem9tP8ftV3NAKqna+H3r7zDy/EP/Zs6fQfrwK3lxSqmrL4u/Z3jtqHKQFyx96QYp9Usuw2Uh3j+TfBLt1KD++Um2gcupB4PKFc/2ijF+In1l60blz/GIwVTo4AmwLReaL5klnJabChYliZsPw6CFH2ctTMtDfn8wlui0rAtxWv/35celOhcUgcNbs6ZCSOESMMB+l+O3OW3zJuWDDyImU1IdAWxof6TNXyD3DR6vPMIEa3TM8h08aLorjxZlPASrtbwQWLTzbbyr4jfhDg4PI1++3Zh+44vZUvhAKV2UOhwTcLEXPKT0kFBZjUDme1JbGhzNP3VTWvwjkjBgGbF2Tv5LfiJ8ZvPji+f6ym+rtBwG2wMgZE9jP1cFPh2N0zVszRw6eUQc5bs7IhkDc/UtqcsYHQ1cQvfVKxU/L5fzZ22e4+ZX4s4emwZzTlItIp+UbRSndOxL4BmNZPH0rzn4xQgpDV+XC1AwuU3nx5qqcCvsFgYT4OFh0vv/cPMxovxI/U+CqSxawD0oqQYCXiC5PHaoSS5RRYxFuGsOTHAkUtZMHPy2WXbRwnt/V9jvxz5g0FibljvE7EKTAcQSY+0FqmokrW4cESHcTSa3Xn+XScaewibHSl9s7OPD2p91UtzQEQvF+ueGKhdIKCyzld+Jntlx96XkCTSJRUhFge+m6LdLdNGcO4Q9pIFV3f5Y7k2NqpyvAAp3htE+FP9tPybovv3A+BNj9P66jCuKfd/pUGD2Kb4aEko2n17qcUXwENDfOmMR/FmfoZmeUsd6S9Pr3M5hdNlzJ/qMrLxwsmyLXVUH8zNLrLjtfEYOpkv4R6IyUTvwsJk+wlS+UQf+aqfsK27pxGEcMH2eEdNzVjQxp1xOBK3HtUmQEf9DDnjKlflcN8bNARWxuKyX/IcDjchgTaezAY6M57O8Kpxj9/rvrlanZarXCzVddpExlXtSiGuJnul5/uf8HPbzATLdZukKl+x5HhRk79sxIjh5/Jwfuur0ZdWbYYpy9GBOlnr8RVRE/6/WPyxmhsybXiDk4pusKlr4YaZjA/Wk1gthJamaFSA9z4QqR/sA9SQn6oUoEAgMC4LZrLlOVbqoifobMj666WFUAGUUZV4B00mcY6S0Kp6/tzmM/m0lFAdt8RVw7+a9ZtFA1vv1u1FRH/HNnTYFpk3K79aNPhRBw2aTfCmEYpsFull5eIRNlrSbSg4H0wW2XXXpZWQ0j4VwIREVGwJ3XL+KSIUdhVf613nbtpXLYSjIHQMCNG4tLTWzDFUqAs5qkvzXxrJ8g7NWLwA04fdNml35fyGWZ9L92uTRCuVPGj4b5Zyq/HZmMJqletJsjvo7N4L397sa1cezMxYN/d/30qS4EMlKT4abF6pnJ0xMdVRI/U/DHN1zZU0/6rmIE3CrWjVQjBPyFwM3XqmtAtycOqiX+oelJcC1N7+zZVrJ+N7mk07fD1SWrbloRzoMDD/5awcdIek4ePxYuOud01ZqsWuJniN17y9U49zVKteDpSTFTl0uyOS1Op+SyeirY0ikdB3OndPz1hKFebLnzxitUbYqqiZ8FM7pNhSPiqm5RicqZHdKJhxFeW5exe/21jg7odEnH0OSUXlZik1MxmRC4eMFcmJw7SibpYsSqmviZiVfhLl3jx6obRDFN4V8p5o5OLgWKW5u5ymu9MI/9jPRN1OPX+i3g0T8kOBjuu/Vq1duieuJnCN5901WqB1IPClqapbsqDjQ36gECyTYcaG6SXNbSyvfQlVwxFRSOwO03XAHRURHC5YoWqAninzI+BxYtnC/adpLXCwEe4s9rrO8lzVg/8xvqJBtsaXZILksF1YPAWAw3c+MVF6hHoQE00QTxM/1/fud1EBtt7AiQA7SjkEvWRukEtLuuRogOWhWyp6FWsuo8uEuulAoKR+C+W68RLlMugZoh/qDAQLjrFnL5yHUjMLnW+nbJ4g801gEb4DRiKmtthRIOV5e13pi46eleWXzxebjwNEczJmmG+Bmily44E+acNlUz4GpNURsnAa08VqE1k4Xoy2u3rU76A1eIASSEC4GkhCHwi7tv5JKhdGFNET8D58Gf3IB7VtLGFXLcKDbs8fNM61x5tEwOtVQvc1WVdLvNOLBrJR+/6tt4IAV/evu1YNFY2BLNEX9K4hC459ZrB2oHusaBgK2qVXLpbTVVcLjFWNM62aD2Po7xjQAOvCU3FBUUhsDC+WfC/DkzhMlTSpDmiJ8Bc92i8+C0aROVwshQ9QQcbeGy973SIq7yWiv8ftlhLpXtR6U/aLkqpsLcCMTHxsKv772ZW44/BGiS+BlQv7zrJmA721ASiwAv8X9+pAjqHNJnB4m1Rl5pFe1tsBTt5UmBR431hsSDldrKPvDj6yE4KFBtanmlj2aJPy0lAX52x/VeGUmZvEfA0uoEHncPC1T28uEC7yvUcM6Xi/jsDChvAZPD2KEutNr8l54/D849a6ZW1QfNEj9DfDGGc5g3R7vgq/WuCSqRvgqV2fTB4YNwoKlBreYJ0WsXLthibzc8KZATZ566qax0BDLTUuC3998mXYAKSmqa+Bl+j/zsdmC+NkriEAgqwfALbulhmpkmfz+4T5xCKpT0zwN7ubRis6eCjhg7zAUXgH4s/NA9N4PJZPKjBvxVa574I8JCgDUEJXEIsIBhQYV8PfbNx47Cm8WF4pRSkaSXi/bDztpjXBoFHkJ8OR+uXApQYUkI3H79FTBj0lhJZdVUSPPEz8A8e/YUuP5KdW5xpqbG9kWX4EP8sXeeK9gFOzlCGfiir1J5N9VVw0ucvX2mqwh8lbKZ6jmOwIwpE+AnP7pCF3DogvhZSzxwx3UwefwYXTSKGoxgq3hF+KAf27MNmnSyUUt1Rzs8jvbwpqCiBlq0xQuiwuWjIiPg0QfuULhW+arTDfEziH7/8x9DeFiofGgZTHJwgfTAY91QHWlpggd3ber+qenPh9COyja+dQ4MgJD90iN5ahpADSv/6/tug4T4GA1bcLLquiL+lKQh8BtsIEpiELBjDJkg5ovmTNtxRe8DO7VN/vds3wB7OFbodkMYdKAerA0UlK0bDy183nTNZXDOGdO0oKrXOuqK+JnVbG7tTVerd3d7r1tGJRlD88SEW/62sgx+tmOjSqzyXg0nbkJ/17YNsAkHq3kT29c4bJ8YPHl1ofLeIXD6jMlwnw6jAuuO+Flz3nfrVXDGzCnetSzlGhABS4sTwnZWD5jH24vrq8rhli3fwDH0lWshlWK45Vu2rIEt1fykz+wNRRx5t7jUAm560TElKRH++Mu79WLOSXbokviZhX/+zb2QgQstKPEjEFJQA7bqNn5BKGFPbTXctHENrEP3j5rTqqqjcMumNVBQL8Yfz2LyhBwUI0vNuOlJtz88eCeOGYboyaQfbNEt8bMYGo8/dBfYrNYfjKUv0hEI2y6OqI+1t8L9W9fBPwvzpCskY8lncLrmL3dsgHqHuDeT8J3i8JPRdBL9PQIP338HTModpVs8TG5MurUODfvsq7Xw6yf+rmcTFbOtZXg0NE2IE1rf8PAo+HF2DsyMjhcqV4qwNccq4V8H98IhweEmwrdU0rx9KQ3ipzI3LL4I7r/9Oj/Vrky1uid+BuMLr38AL7z2jjKI6ryWhqmJ0JYRLtzKOQmp8KPM4TAiLEK47MEE7sVtI18tOgBsAFp0YiugI7aKGSMQrRvJOxWBeWfMhKd+97NTL+jsjCGIn7XZI0++CJ8s+1pnzae8OW6zCWrPTANnTKAslZ+ekAKXpWTAtGixbxZ9KcvGGT7CQGvrcNBZjmSraoOY1SVyiCaZMiAwNmcEvPXPx2WQrD6RhiF+Bv0dv3gc1m/arr5W0JhGXaF2qJmTCq5g+cZPMkMj4MyEJJgbnwxZoWHCENqPbpwVSPSrKsu5NkgfTCFLk9ND+ua2zsGy0nUVIJA4JB5ee/YPkDhEP4u0BoLVUMTf1t4B19/9MBQcPDQQJnTNCwQc0UFQd2YKuC3yzw9ICQmDcZExMDYqGnLCIiEb3UHexEZ04Rz8/S0NsLexAXbX18JOjLNT0Sr/xifmji6IWlMKbA9jSupHIMAeAC/97bcwfnS2+pUVpKGhiJ9hVlJeCTff91uoPCZmbrqgdtCkGEdcMNSdzsjfGxoWZyKrLS4oGKIDAiHMZodAsxUsGCa3y+2C9q4uaOx0QG17O7DZQ0ons9MFkWtLwV4jZvqr0vobsb6//f5BDPQ41VCmG474Wevu3Lcfbn/gD9DaRn+cvHe7h/xnJYPbJn/Pn1dXucuznn7kN2Vgr6X7Sm6sRcln0zYvv+BsUeI0I8eQf625Odnw5CM/1UwjqVlR+7FWiFpdCuYWY/uymU8/as0RIn0136y9dLv3tusMSfoMBkMSPzP89OkT4U+/IfJnWPAme93x2SuiVvfy6qN0eVtlK8SsKkGfPgVfUxp7qfXdfO0iuPmqi6QW13w5Q7p6erbaB0tWwO//+kLPU/RdKgLofG+YlABtQ5Wfiy9VZd5yQQfrIWJbJa8YKq8gAtdcdgH84q4bFaxRfVUZnvhZk7z50TJ48h8vq691NKpRy7AoaJro/5W4ssKH6909K3KL+Hcqk1VPEn4SAosWzsd9um896ZwRfxDxf9/qr733OfzthdeMeA/IYrMzMhAax8eDMz5IFvn+FMoCroXvqAJrI7l2/NkOvtZ98Xln42ZNd/haTJf5ifh7NOsr73wKz/zrjR5n6CsvAi3Z0dCcGwtunG6p9cTi6bPQyhRlU3stedG5c+EPv/ix9hSXSWMi/l7AvvruZ/D0i6/3Oks/eRDoCrZBc06Mpn3/zJfPNlExtxt79hLPfeCvshctQNJ/kEi/J/5E/D3R+P776+8vgaeef7WPK3SKBwFHVCC0joyG9lRxIRh49PGmbGBxI4QU1NEqXG/AUmGeS8+fB7974HYVauZflYj4+8H/7U++hCeefamfq3SaBwHm/28dFqnqNwAWVTO4kBE++fF52tqfZRdffB786t6b/KmCausm4h+gaT5ethp+++RzA+SgSzwIuAKt0JYe7jk6IwN4RAkpa6vrANbDDzrcAGZHlxCZJMQ/CNyw+GKMqX+tfyrXQK1E/IM00pdrNsAvfv80uFyuQXLSZR4EHFFB0JEcCh1JIaDkQ4CRvb28GQLLmsmdw9OAKip754+ugjuuv0xFGqlPFSJ+L9pk/dbd8OCjT0Fjk/yRHb1QR/dZukJs0IEB4JyxQRj3Pwg6I+zCbLai68ZW0w523EOYhZuwtDqFySZB/kfgwbtvhmsvXeB/RVSuARG/lw2Ut78I7n/0b1BaXuFlCcomCgG31QydYXbPwR4KbJaQK8DiOdg1DM2J00UBTLioytSF/2GETOaqYTNwLK14tDjB2uTAo+P4dVGKkRzVIMBmC//xV/fB+WfPUo1OalaEiN+H1qk8Vgs/+91TsHtfgQ+lKCshQAjIiUBUZATG3boPZkwaK2c1upJNxO9jc7K96e975K+w6tuNPpak7IQAISAagazMdPgrRtrNykgRLVrX8oj4JTbvH599Bd75ZKnE0lSMECAEeBGYOXUCPPXbn0FIcBCvKMOVJ+LnaHJa5csBHhUlBDgQuOyCc+C399/GIcHYRYn4Odt/xbeb4ZEn/wlNNOOHE0kqTgh4h8C9t18HNy82bix971AaOBcR/8D4eHX1UHEZ/OqJf8C+goNe5adMhAAh4DsCEeFh8Luf3wlzZ03xvTCVOAkBIv6T4OD78cs//gOWLF/DJ4RKEwKEwCkIjBs9Eh5/6C5IT0k45Rqd8B0BIn7fMRuwxMtvfwLP/vvNAfPQRUKAEPAeAQq05j1W3uYk4vcWKR/yrduyE/7w1L+h/GilD6UoKyFACPREwISrsn55zy2w+OL5PU/TdwEIEPELALEvEY1NrfDIX56Hld9819dlOkcIEAIDIDBi2FCctXM7jBmZNUAuuiQVASJ+qch5We4/6Pr5O7l+vESLshECAOTakf8uIOKXH2PYticfHn/mZThQWKRAbVQFIaBNBMJCQ+Dnd90EF88/Q5sGaEhrIn4FG+sxJP/3Pl2mYI1UFSGgDQRmTZsEv/npLZA0JE4bCmtcSyJ+hRtw+dpN8JfnX4OjlVUK10zVEQLqQ8CMA7j33n49/OjKhepTTscaEfH7oXHb2jvgj8++DJ9+sdIPtVOVhIA6EJgyYSz84q4fQfbQNHUoZCAtiPj92Nhfrt4AT//rTZr26cc2oKqVR8BqscBdt1wNN1HYBeXB/75GIn6/QX+84s6uLvjT31+F9/73hZ81oeoJAfkRmD19Mjzw4+shMy1J/sqohn4RIOLvFxplL2zA7R2feektyKN4P8oCT7UpgkBMVBT85ObFsOj8uYrUR5UMjAAR/8D4KH71pbc+hn+9/h44nLQXrOLgU4WyILBo4Xzs5V8HwUGBssgnob4jQMTvO2ayl6ioPIa9//+DZSu+kb0uqoAQkAuBieNGw103LYbJuaPkqoLkSkSAiF8icEoU+3bTDnj+tfdgT95+JaqjOggBIQjEx8bCbdddBldcOE+IPBIiHgEifvGYCpf4zidfwn/e+giqqmuEyyaBhIAoBMxmM9yw+GK49+arwGw2iRJLcmRAgIhfBlDlEMk2eX/ulffg9Xc/Rf+/Q44qSCYhIBmBC889C+684XJISqCVt5JBVLAgEb+CYIuoqqa2Hl7474cU+kEEmCSDG4EzZ02FW6+5jKJociOprAAifmXxFlbb4SMV8J//+xj+R6t/hWFKgrxHYMaU8bgA62KYNnGM94Uop2oQIOJXTVNIU+RgUQm88vb/4PPlq6UJoFKEgA8ITJuUCzdcsRBmTR3vQynKqjYEiPjV1iIS9Sk8XAqvvfsZxv9ZIVECFSME+kfgtGkT4bpF58PMybn9Z6IrmkGAiF8zTeWdomUVVfD6+5/DR58vp0Vg3kFGuQZAYN4ZM+GaRefBxDEjB8hFl7SGABG/1lrMS30bW1rhzfeXwEdLvqZpoF5iRtmOI2Cz2uDiBWfB1ZeeB1kZyQSLDhEg4tdho/Y26YMlK/ABsIIWgvUGhn6fhEBy4hAP4V916QIIDwk+6Rr90BcCRPz6as8Brdm0fS98iG8AFApiQJgMd5EN2F6CPfzz5p5mONuNajARvwFbvq6+ET74fAUs+XotHCo+YkAEyOToyEhYMHcWXHL+WZCdSRuhGO2OIOI3Wov3snc9hoP+/Ku18PWa9dDe0dHrKv3UGwJsb9vzz56Nxyy9mUb2+IAAEb8PYOk5a6ezCz7FtQBfrtoA323ZoWdTDWfbqOwsmDdnBiw8+3QYEhdtOPvJ4FMRIOI/FRPDn6mqroOlK9fBym82wo49eYbHQ4sADE1PhTkYTuHcM2fCyKx0LZpAOsuIABG/jODqQXT50WPw1dqNsGb9Fti6c48eTNKtDcOzMuD06ZPg7NnTYPSIobq1kwzjR4CInx9Dw0hgg8Ir1m2Gbzdug404NtDS2moY29Vq6JQJY+E0DJ9w5swptI+tWhtJhXoR8auwUbSi0rotO2EdbhazGaeJFhw8pBW1Na1ncmICTBk/BkMnjIPTZ0yk7Qw13Zr+U56I33/Y66rmmrp62LBlN2zasRd27M6Hw0dKdWWfv4yJj42B3DEjYDJuYzh90ljq1furIXRWLxG/zhpULeawAeKtO/fB9r0FsCf/IOQfKITOzi61qKdaPbIy0tA/PwzJPhvJPoeIXrUtpW3FiPi13X6a0n4HPgR25xVC3oFDUFBYDEWHS6Czy7gPg7TkJBielQajhg2F0aOyYHxONoQEB2mqTUlZbSJAxK/NdtON1nkHivAhUAIH8SFQVFwGxaUVUFZRAV1dLt3YOCQ+DtJTEiEjNRmGZaRA9rB0JPtMCAoM0I2NZIi2ECDi11Z7GUbbopJyz0OgpLwSyo9WQkVlNRw9VgPV1bVQU1cHLpdbNVhERoRDbEw0JODiqAQk+eTEOEhJGuIh+0wk+wC7TTW6kiKEAEOAiJ/uA00iwMYQjtXUAduDuKahEeobmqChsRmampuhGUNSt7S2Q1t7uycMRXuHE5xOJ3Q6Oz2uJZfLBWzzepZMJhOYzGawWixgtVrAZrN5iDowIMDTIw8ODoTQ4GAICwuGiNBQiIwIg6jICIiJioD4mEiIj4vxlNUkiKS0YREg4jds05PhhAAhYFQEzEY1nOwmBAgBQsCoCBDxG7XlyW5CgBAwLAJE/IZtejKcECAEjIoAEb9RW57sJgQIAcMiQMRv2KYnwwkBQsCoCBDxG7XlyW5CgBAwLAJE/IZtejKcECAEjIoAEb9RW57sJgQIAcMiQMRv2KYnwwkBQsCoCBDxG7XlyW5CgBAwLAJE/IZtejKcECAEjIoAEb9RW57sJgQIAcMiQMRv2KYnwwkBQsCoCBDxG7XlyW5CgBAwLAJE/IZtejKcECAEjIrA/wOtr3OQW5Lw+wAAAABJRU5ErkJggg==");
+}
+
+.enrichment-logo {
+ background-image: url("data:image/png;base64,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");
+}
+
+.search-filters {
+ font-size: 12px;
+}
+
+.search-datasource-filter {
+ font-size: 12px;
+ -o-text-overflow: ellipsis;
+ text-overflow: ellipsis;
+ width: 25em;
+}
+
+.search-datasource-filter > option {
+ overflow: hidden;
+ -o-text-overflow: ellipsis;
+ text-overflow: ellipsis;
+}
+
+.search-item {
+ padding: 1em 0;
+}
+
+.search-item.preview {
+ /* background-color: var(--cloud); */
+ border: 1px solid #b5b9bb;
+}
+
+.search-item-info {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ vertical-align: middle;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+}
+
+.search-item-icon {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 auto;
+ flex: 0 0 auto;
+ width: 80px;
+ height: auto;
+}
+
+.search-item-icon > img {
+ max-width: 80px;
+ max-height: 40px;
+}
+
+.search-item-content {
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ padding-right: 0.5em;
+}
+
+.search-item-content-datasource {
+ margin: 0;
+ margin-top: 2px;
+ font-size: 14px;
+}
+
+.search-item-content-participants {
+ margin: 0;
+ margin-top: 2px;
+ color: #7f8c8d;
+ font-size: 0.66em;
+}
+
+.search-item-preview {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+ width: 70%;
+}
+
+.loader {
+ color: #16a085;
+}
+
+.search-error {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ -webkit-box-align: start;
+ -ms-flex-align: start;
+ align-items: flex-start;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ padding: 10px;
+ padding-left: 215px;
+ width: 60%;
+}
+
+/* Feature */
+
+.feature-area.header {
+ grid-area: header;
+}
+
+.feature-area.article {
+ grid-area: article;
+}
+
+.feature-area.article .headline {
+ font-size: 1.3em;
+ color: #0066CC;
+}
+
+.feature-area.article i.icon.logo-pubmed {
+ margin: auto 1em;
+ width: 6em;
+ height: 2em;
+}
+
+.feature-area .feature-detail-links {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-flow: row;
+ flex-flow: row;
+ -webkit-box-pack: start;
+ -ms-flex-pack: start;
+ justify-content: flex-start;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ margin: 1em 0;
+}
+
+.feature-area .feature-detail-links .feature-detail-link {
+ margin-right: 1em;
+}
+
+.feature-area.pathway {
+ grid-area: pathway;
+}
+
+.feature-area.pathway .app-card .app-card-image {
+ height: 210px;
+}
+
+.feature-area.pathway .app-card .app-card-title {
+ font-size: 0.9em;
+ color: rgb(102, 102, 102);
+ font-weight: normal;
+}
+
+.feature-area.pathway .app-card .app-card-title i.icon {
+ width: 10em;
+ height: 1.25em;
+}
+
+.feature-area.pathway .app-card .app-card-body p {
+ font-size: 0.9em;
+ margin: 0 auto;
+}
+
+.feature-area.pathway .app-card .app-card-body i.icon {
+ margin-left: 0.2em;
+}
+
+.feature-area.footer {
+ grid-area: footer;
+}
+
+.feature-container {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ grid-template-areas:
+ 'header header'
+ 'pathway article'
+ 'footer footer'
+ ;
+ -webkit-column-gap: 2%;
+ -moz-column-gap: 2%;
+ column-gap: 2%;
+ margin: 1em auto;
+ line-height: normal
+}
+
+.feature-container hr {
+ width: 740px;
+ display: block;
+ overflow: hidden;
+ border: solid 0.5px #D3D3D3;
+ margin: 1em auto;
+}
+
+.feature-item {
+ margin: auto auto 1em;
+}
+
+.feature-detail {
+ font-size: 0.85em;
+ color: rgb(102, 102, 102);
+}
+
+.feature-item-row {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-flow: row nowrap;
+ flex-flow: row nowrap;
+ -webkit-box-pack: start;
+ -ms-flex-pack: start;
+ justify-content: flex-start;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+}
+
+@media (max-width: 600px) {
+ .search-nav-links {
+ display: none;
+ }
+
+ .search-header {
+ display: block;
+ }
+
+ .search-genes-info-panel {
+ display: block;
+ }
+
+ .search-item-icon {
+ display: none;
+ }
+
+ .search-body {
+ padding-left: 10px;
+ }
+
+ .search-error {
+ padding-left: 50px;
+ }
+
+ .search-tabs {
+ overflow-x: scroll;
+ }
+
+ .search-app-cards {
+ grid-template-columns: 1fr;
+ }
+
+ .search-results-header {
+ display: none;
+ }
+
+ .feature-container {
+ display: none;
+ }
+}
+
+.element-search {
+ margin: 0 0.25em;
+}
+
+input.element-search-input {
+ margin-right: 0.25em;
+ width: 12em;
+ background-color: #fff;
+}
+
+.element-search-input[value=""] + .element-search-clear {
+ opacity: 0;
+ pointer-events: none;
+}
+
+.paint {
+ overflow: hidden;
+}
+
+.paint-legend {
+ padding: 0px 5px 0px 5px;
+ height: 40px;
+ color: white;
+ background: -webkit-gradient(linear, left top, right top, from(#0A872C), color-stop(33%, white), color-stop(66%, white), to(#880E7C));
+ background: -o-linear-gradient(left, #0A872C, white 33%, white 66%, #880E7C);
+ background: linear-gradient(to right, #0A872C, white 33%, white 66%, #880E7C);
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: row;
+ flex-direction: row;
+ -webkit-box-pack: justify;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+}
+
+.paint-legend > p {
+ margin: 0;
+ padding-top: 10px;
+ text-shadow:
+ -1px -1px 0 #000,
+ 1px -1px 0 #000,
+ -1px 1px 0 #000,
+ 1px 1px 0 #000;
+}
+
+.paint-menu {
+ width: 100%;
+}
+
+.paint-menu-controls {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: row;
+ flex-direction: row;
+ -ms-flex-pack: distribute;
+ justify-content: space-around;
+ padding: 15px;
+}
+
+.paint-select {
+ width: 75px;
+}
+
+.paint-search-result {
+ cursor: pointer;
+ padding: 5px
+}
+
+.paint-search-result p {
+ margin: 0;
+}
+
+.paint-search-result h3 {
+ margin-bottom: 2px;
+}
+
+.paint-search-result-selected {
+ color: #16a085;
+}
+
+.paint-drawer-tab {
+ display: inline-block;
+ border: 1px solid transparent;
+ border-bottom: none;
+ bottom: -1px;
+ position: relative;
+ list-style: none;
+ padding: 6px 0;
+ cursor: pointer;
+ margin-bottom: 0;
+ margin-right: 10px;
+}
+
+.paint-drawer-tab-selected {
+ font-weight: bold;
+ color: #16a085;
+ border-bottom: 3px solid #16a085;
+}
+
+.expression-table-header {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: row;
+ flex-direction: row;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ -ms-flex-pack: distribute;
+ justify-content: space-around;
+}
+
+.expression-entry {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: row;
+ flex-direction: row;
+ -ms-flex-pack: distribute;
+ justify-content: space-around;
+}
+
+.expression-table-view {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ -webkit-box-pack: justify;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ background-color: white;
+ border: 1px solid #d3d8da;
+ border-radius: 0.25em;
+
+}
+
+.expression-table-header {
+ margin: 10px;
+}
+
+.expression-table-header-column {
+ width: 50%;
+ cursor: pointer;
+}
+
+.expression-filter input {
+ width: 100%;
+}
+
+.expression-list {
+ max-height: 74vh;
+ overflow: scroll;
+}
+
+.expression-entry {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: row;
+ flex-direction: row;
+ border-top: 1px solid #d3d8da;
+
+ padding: 10px;
+}
+
+.expression-gene {
+ width: 50%;
+ padding-left: 10px;
+}
+
+.pathways {
+ width: 100vw;
+ height: 100vh;
+ position: relative;
+ overflow: hidden;
+}
+
+.pathway-title {
+ max-width: 95vw;
+ margin: 0.25em;
+}
+
+.pathway-title .pathway-title-name {
+ font-size: 1.2em;
+ font-weight: bold;
+ padding: 0.15em
+}
+
+.pathway-title .pathway-title-name .highlight-link {
+ color: rgb(26, 117, 215);
+}
+
+.pathway-title .pathway-title-source {
+ font-size: 1em;
+ padding: 0.15em;
+
+}
+
+.interactions {
+ overflow: hidden;
+ width: 100%;
+ height: 100%;
+ position: absolute;
+}
+
+.interactions-bar {
+ position: absolute;
+ top: 0;
+ left: 0;
+ margin: 0.5em;
+ border-radius: 0.25em;
+ -webkit-box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .14), 0 3px 1px -2px rgba(0, 0, 0, .12), 0 1px 5px 0 rgba(0, 0, 0, .2);
+ box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .14), 0 3px 1px -2px rgba(0, 0, 0, .12), 0 1px 5px 0 rgba(0, 0, 0, .2);
+}
+
+.interactions-legend {
+ font-size: 0.9em;
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ margin: 0.5em;
+ border-radius: 0.25em;
+ padding: 0.25em;
+ z-index: 10;
+ opacity: 0.9;
+ background-color: white;
+ border: 1px solid #d3d8da;
+ -webkit-box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .14), 0 3px 1px -2px rgba(0, 0, 0, .12), 0 1px 5px 0 rgba(0, 0, 0, .2);
+ box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .14), 0 3px 1px -2px rgba(0, 0, 0, .12), 0 1px 5px 0 rgba(0, 0, 0, .2)
+}
+
+.interactions-legend h3 {
+ margin-top: 0;
+}
+
+@media(max-width: 600px){
+ .interactions-legend {
+ font-size: 0.8em;
+ }
+}
+
+input[type="range"].interactions-sidebar-vis-filter {
+ width: 100%;
+}
+
+.interactions-filter-check {
+ display: inline-block;
+}
+
+.interactions-filter-button {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: row;
+ flex-direction: row;
+ -webkit-box-pack: justify;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ padding: 0.5em 0.25em;
+ margin: 0.25em;
+ border-radius: 0.25em;
+ cursor: pointer;
+ -webkit-transition-property: border-color;
+ -o-transition-property: border-color;
+ transition-property: border-color;
+ -webkit-transition-duration: 500ms;
+ -o-transition-duration: 500ms;
+ transition-duration: 500ms;
+ -webkit-transition-timing-function: ease-out;
+ -o-transition-timing-function: ease-out;
+ transition-timing-function: ease-out;
+ border: 1px solid #d3d8da
+}
+
+.interactions-filter-button:active {
+ border-color: #000;
+}
+
+.interactions-color {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ width: 1.25em;
+ background-color: #888;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ border: 1px solid #ccc;
+}
+
+.interactions-color-modification {
+ background-color: #ffc28b;
+}
+
+.interactions-color-binding {
+ background-color: #8bd8dd;
+}
+
+.interactions-color-expression {
+ background-color: #f4a2a3;
+}
+
+.interactions-filter-label {
+ -webkit-box-flex: 1;
+ -ms-flex-positive: 1;
+ flex-grow: 1;
+ margin: 0 0.5em;
+}
+
+.entity-summary-box {
+ pointer-events: all;
+ padding: 0.25em 0.5em;
+}
+
+.entity-subtitle {
+ color: #b5b9bb;
+ margin: 0;
+ -o-text-overflow: ellipsis;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ overflow: hidden;
+ font-size: 0.66em;
+}
+
+.entity-title {
+ margin: 0 0 0.5em;
+}
+
+.entity-names {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: row;
+ flex-direction: row;
+ -webkit-box-pack: start;
+ -ms-flex-pack: start;
+ justify-content: flex-start;
+ margin: 0.5em 0;
+}
+
+.entity-links-container {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: row;
+ flex-direction: row;
+ -webkit-box-pack: start;
+ -ms-flex-pack: start;
+ justify-content: flex-start
+}
+
+.entity-links-container a {
+ margin-right: 0.5em;
+ font-size: 0.66em;
+}
+
+.enrichment {
+ overflow: hidden;
+}
+
+.enrichment-sources-popover {
+ width: 100px;
+ max-height: 66vh;
+ overflow-y: scroll;
+ text-align: left;
+ padding: 0.5em 0.25em;
+}
+
+.enrichment-popover-link {
+ cursor: pointer;
+}
+
+@media(max-width: 600px){
+ .enrichment-sources-popover {
+ font-size: 0.8em;
+ }
+}
+
+.biofactoid {
+ height: 100vh;
+ width: 100vw
+}
+
+.biofactoid a {
+ display: block;
+}
diff --git a/public/bundle.js b/public/bundle.js
index 804dc37b..0fcecc6b 120000
--- a/public/bundle.js
+++ b/public/bundle.js
@@ -1 +1,7135 @@
-../build/bundle.js
\ No newline at end of file
+webpackJsonp([0],{
+
+/***/ 131:
+/***/ (function(module, exports, __webpack_require__) {
+
+var _require = __webpack_require__(132),
+ PATHWAYS_LAYOUT_OPTS = _require.PATHWAYS_LAYOUT_OPTS;
+var _require2 = __webpack_require__(188),
+ expandCollapse = _require2.expandCollapse,
+ searchNodes = _require2.searchNodes,
+ layout = _require2.layout,
+ fit = _require2.fit;
+module.exports = {
+ expandCollapse: expandCollapse,
+ fit: fit,
+ layout: layout,
+ stylesheet: __webpack_require__(478),
+ bindCyEvents: __webpack_require__(479),
+ searchNodes: searchNodes,
+ PATHWAYS_LAYOUT_OPTS: PATHWAYS_LAYOUT_OPTS
+};
+
+/***/ }),
+
+/***/ 132:
+/***/ (function(module, exports) {
+
+module.exports = {
+ PATHWAYS_LAYOUT_OPTS: {
+ name: 'cose-bilkent',
+ nodeRepulsion: 5000,
+ nodeDimensionsIncludeLabels: true,
+ tilingPaddingVertical: 20,
+ tilingPaddingHorizontal: 20,
+ animate: 'end',
+ animationEasing: 'ease-in-out',
+ animationDuration: 800,
+ fit: true,
+ padding: 75,
+ randomize: false
+ }
+};
+
+/***/ }),
+
+/***/ 133:
+/***/ (function(module, exports) {
+
+module.exports = {
+ PATHWAYS_LAYOUT_OPTS: {
+ name: 'cose-bilkent',
+ nodeRepulsion: 5000,
+ nodeDimensionsIncludeLabels: true,
+ tilingPaddingVertical: 50,
+ tilingPaddingHorizontal: 20,
+ animate: 'end',
+ animationEasing: 'ease-in-out',
+ animationDuration: 800,
+ fit: true,
+ padding: 75,
+ randomize: false
+ }
+};
+
+/***/ }),
+
+/***/ 16:
+/***/ (function(module, exports, __webpack_require__) {
+
+var ServerAPI = __webpack_require__(466);
+module.exports = {
+ ServerAPI: ServerAPI
+};
+
+/***/ }),
+
+/***/ 182:
+/***/ (function(module, exports, __webpack_require__) {
+
+function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
+function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
+function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
+function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
+function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
+function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
+function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
+function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+var _ = __webpack_require__(6);
+
+// basic pathway model to serve the needs of the pathways view
+// - api to get entities,
+// - compose each entity with entity metadata
+// - get entity by id
+var Pathway = /*#__PURE__*/function () {
+ function Pathway() {
+ _classCallCheck(this, Pathway);
+ this.loaded = false;
+ }
+ return _createClass(Pathway, [{
+ key: "load",
+ value: function load(pathwayJSON) {
+ this.raw = pathwayJSON, this.loaded = true;
+ }
+ }, {
+ key: "uri",
+ value: function uri() {
+ return _.get(this.raw, 'graph.pathwayMetadata.uri', 'Unknown uri');
+ }
+ }, {
+ key: "cyJson",
+ value: function cyJson() {
+ return this.raw.graph;
+ }
+ }, {
+ key: "isEmpty",
+ value: function isEmpty() {
+ return false;
+ }
+ }, {
+ key: "name",
+ value: function name() {
+ return _.get(this.raw, 'graph.pathwayMetadata.title', '');
+ }
+ }, {
+ key: "datasource",
+ value: function datasource() {
+ return _.get(this.raw, 'graph.pathwayMetadata.dataSource', 'Unknown datasource');
+ }
+ }, {
+ key: "datasourceUrl",
+ value: function datasourceUrl() {
+ return _.get(this.raw, 'graph.pathwayMetadata.urlToHomepage');
+ }
+ }, {
+ key: "comments",
+ value: function comments() {
+ return _.get(this.raw, 'graph.pathwayMetadata.comments', []);
+ }
+ }, {
+ key: "macromolecules",
+ value: function macromolecules() {
+ return _.get(this.raw, 'graph.nodes', []).filter(function (node) {
+ return node.data.class === 'macromolecule';
+ });
+ }
+ }, {
+ key: "geneNames",
+ value: function geneNames() {
+ var ms = this.macromolecules();
+ var names = _.flatten(ms.map(function (node) {
+ return [].concat(_toConsumableArray(_.get(node, 'data.metadata.synonyms', [])), [_.get(node, 'data.label', '')]);
+ }));
+ return _.uniq(names);
+ }
+ }, {
+ key: "publicationXrefs",
+ value: function publicationXrefs() {
+ return _.get(this.raw, 'graph.pathwayMetadata.pubXrefs');
+ }
+ }, {
+ key: "unificationXrefs",
+ value: function unificationXrefs() {
+ return _.get(this.raw, 'graph.pathwayMetadata.uniXrefs');
+ }
+ }]);
+}();
+module.exports = Pathway;
+
+/***/ }),
+
+/***/ 183:
+/***/ (function(module, exports) {
+
+module.exports = [{
+ type: 'png',
+ displayName: 'Image (PNG)',
+ ext: 'png',
+ description: 'Download an image of the entire view.'
+}, {
+ type: 'gmt',
+ displayName: 'GMT',
+ pc2Name: 'GSEA',
+ ext: 'gmt',
+ description: 'Gene Matrix Transposed format. The gene database of named gene sets (UniProt) useful for performing enrichment analysis using Gene Set Enrichment Analysis (GSEA)'
+}, {
+ type: 'sif',
+ displayName: 'SIF',
+ pc2Name: 'SIF',
+ ext: 'txt',
+ description: 'Simple interaction format (SIF) is a list of interaction pairs useful for viewing, styling, and editing using Cytoscape desktop software, and for analysis with graph algorithms.'
+}, {
+ type: 'txt',
+ displayName: 'Extended SIF',
+ pc2Name: 'TXT',
+ ext: 'txt',
+ description: 'Similar to the SIF output, but contains extra information on entities and interactions. See the SIF section on the PC2 formats page for more details.'
+}, {
+ type: 'biopax',
+ displayName: 'BioPAX',
+ pc2Name: 'BIOPAX',
+ ext: 'xml',
+ description: 'Biological Pathways Exchange (BioPAX) format includes all details of the biological network stored in Pathway Commons. It is recommended that this format be interpreted using tools like Paxtools or Jena SPARQL.'
+}, {
+ type: 'jsonld',
+ displayName: 'JSON-LD',
+ pc2Name: 'JSONLD',
+ ext: 'json',
+ description: 'JSON-LD is a human-readable linked format. This format is ideal for programming environments, REST web services, and unstructured databses.'
+}, {
+ type: 'sbgn',
+ displayName: 'SBGN-ML',
+ pc2Name: 'SBGN',
+ ext: 'xml',
+ description: 'Systems Biology Graphical Notation (SBGN) is a standard visual notation for biological networks. This download provides an XML in SBGN markup language (SBGN-ML).'
+}];
+
+/***/ }),
+
+/***/ 187:
+/***/ (function(module, exports, __webpack_require__) {
+
+function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
+function _readOnlyError(r) { throw new TypeError('"' + r + '" is read-only'); }
+function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }
+function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
+function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
+function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
+function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
+function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
+function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
+function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
+function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
+function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
+var _ = __webpack_require__(6);
+var geneIntersection = function geneIntersection(pathway, expressionTable) {
+ var genesInPathway = pathway.geneNames();
+ var genesInExpressionData = expressionTable.rawExpressions.map(function (e) {
+ return e.geneName;
+ });
+ return _.intersection(genesInPathway, genesInExpressionData);
+};
+var expressionDataToNodeStyle = function expressionDataToNodeStyle(value, range) {
+ var _range = _slicedToArray(range, 2),
+ max = _range[1];
+ var style = {};
+ if (0 - max / 3 <= value < 0 + max / 3) {
+ style['background-color'] = 'white';
+ style['background-opacity'] = 1;
+ style['color'] = 'black';
+ style['text-outline-color'] = 'white';
+ }
+ if (value < 0 - max / 3) {
+ style['background-opacity'] = "".concat(Math.abs(value / max));
+ style['background-color'] = 'green';
+ style['color'] = 'white';
+ style['text-outline-color'] = 'black';
+ }
+ if (0 + max / 3 <= value) {
+ style['background-color'] = 'purple';
+ style['background-opacity'] = "".concat(value / max);
+ style['color'] = 'white';
+ style['text-outline-color'] = 'black';
+ }
+ return style;
+};
+var applyExpressionData = function applyExpressionData(cy, expressionTable, selectedClass, selectedFunction) {
+ var geneNodes = cy.nodes('[class="macromolecule"]');
+ var nodeNames = function nodeNames(node) {
+ return [node.data('label')].concat(_toConsumableArray(_.get(node.data('metadata'), 'synonyms', [])));
+ };
+ var geneNodeLabels = _.uniq(_.flattenDeep(geneNodes.map(function (node) {
+ return nodeNames(node);
+ }))).sort();
+ var expressionsInNetwork = expressionTable.expressions().filter(function (expression) {
+ return geneNodeLabels.includes(expression.geneName);
+ });
+ var expressionLabels = expressionsInNetwork.map(function (expression) {
+ return expression.geneName;
+ });
+ geneNodes.filter(function (node) {
+ return _.intersection(expressionLabels, nodeNames(node)).length === 0;
+ }).style({
+ 'background-color': 'grey',
+ 'color': 'grey',
+ 'opacity': 0.4
+ });
+ var _expressionTable$comp = expressionTable.computeFoldChangeRange(selectedClass, selectedFunction),
+ min = _expressionTable$comp.min,
+ max = _expressionTable$comp.max;
+ var range = [min, max];
+ expressionsInNetwork.forEach(function (expression) {
+ var fv = expression.foldChange(selectedClass, selectedFunction);
+ if (fv !== Infinity && fv !== -Infinity) {
+ var matchedNodes = cy.nodes().filter(function (node) {
+ return nodeNames(node).includes(expression.geneName);
+ });
+ var style = expressionDataToNodeStyle(fv, range);
+ matchedNodes.style(style);
+ }
+ });
+};
+var Expression = /*#__PURE__*/function () {
+ function Expression(rawExpressionData, expressionClasses) {
+ _classCallCheck(this, Expression);
+ var geneName = rawExpressionData.geneName;
+ var values = rawExpressionData.values;
+ var replacedExpression = rawExpressionData.replaced ? rawExpressionData.replaced : {};
+ var class2ValuesMap = new Map();
+ var _iterator = _createForOfIteratorHelper(_.uniq(expressionClasses)),
+ _step;
+ try {
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
+ var expressionClass = _step.value;
+ class2ValuesMap.set(expressionClass, []);
+ }
+ } catch (err) {
+ _iterator.e(err);
+ } finally {
+ _iterator.f();
+ }
+ for (var i = 0; i < values.length; i++) {
+ class2ValuesMap.get(expressionClasses[i]).push(values[i]);
+ }
+ var classValues = {};
+ Array.from(class2ValuesMap.entries()).forEach(function (entry) {
+ var className = entry[0];
+ var values = entry[1];
+ classValues[className] = values;
+ });
+ this.geneName = geneName;
+ this.classValues = classValues;
+ this.replacedExpression = replacedExpression;
+ }
+ return _createClass(Expression, [{
+ key: "foldChange",
+ value: function foldChange(selectedClass, selectedFunction) {
+ var invalidValueReplacement = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
+ var selectedClassValues = this.classValues[selectedClass];
+ var nonSelectedClasses = _.omit(this.classValues, [selectedClass]);
+ var nonSelectedClassesValues = _.flattenDeep(Object.entries(nonSelectedClasses).map(function (_ref) {
+ var _ref2 = _slicedToArray(_ref, 2),
+ className = _ref2[0],
+ values = _ref2[1];
+ return values;
+ })); // eslint-disable-line no-unused-vars
+
+ var c1Val = selectedFunction(selectedClassValues);
+ var c2Val = _.mean(nonSelectedClassesValues);
+ if (c2Val === 0) {
+ c2Val = 1;
+ }
+ var foldChange = Math.log2(c1Val / c2Val);
+ if (foldChange === Infinity || foldChange === -Infinity) {
+ return invalidValueReplacement;
+ }
+ return parseFloat(foldChange.toFixed(2));
+ }
+ }]);
+}();
+var createRawExpressions = function createRawExpressions(expressionJSON, networkJSON) {
+ var expressionByGeneName = new Map();
+ expressionJSON.forEach(function (expression) {
+ expressionByGeneName.set(expression.geneName, expression);
+ });
+ networkJSON.nodes.forEach(function (node) {
+ var label = _.get(node, 'data.label', '');
+ var synonyms = _.get(node, 'data.metadata.synonyms', []);
+ var geneIntersection = _.intersection(_toConsumableArray(expressionByGeneName.keys()), synonyms);
+ var isGenericMapping = !expressionByGeneName.has(label) && geneIntersection.length > 0;
+ if (isGenericMapping) {
+ var mappingCandidate = geneIntersection[0];
+ var existingExpression = expressionByGeneName.get(mappingCandidate);
+ expressionByGeneName.delete(mappingCandidate);
+ expressionByGeneName.set(label, {
+ geneName: label,
+ values: existingExpression.values,
+ replaced: existingExpression
+ });
+ var _iterator2 = _createForOfIteratorHelper(geneIntersection),
+ _step2;
+ try {
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
+ var gene = _step2.value;
+ expressionByGeneName.delete(gene);
+ }
+ } catch (err) {
+ _iterator2.e(err);
+ } finally {
+ _iterator2.f();
+ }
+ }
+ });
+ return _toConsumableArray(expressionByGeneName.entries()).map(function (entry) {
+ return entry[1];
+ });
+};
+var ExpressionTable = /*#__PURE__*/function () {
+ function ExpressionTable() {
+ _classCallCheck(this, ExpressionTable);
+ this.loaded = false;
+ }
+ return _createClass(ExpressionTable, [{
+ key: "load",
+ value: function load(rawJsonData) {
+ this.raw = rawJsonData;
+ var rawExpressionClasses = _.get(rawJsonData.dataSetClassList, '0.classes', []);
+ var rawExpressions = _.get(rawJsonData.dataSetExpressionList, '0.expressions', []);
+ this.rawExpressions = rawExpressions;
+ this.rawExpressionClasses = rawExpressionClasses;
+ this.classes = _.uniq(rawExpressionClasses);
+ this.loaded = true;
+ }
+ }, {
+ key: "loadPathway",
+ value: function loadPathway(pathwayJSON) {
+ if (!this.loaded) {
+ throw new Error('You must call load() with enrichment JSON first');
+ }
+ var expressionClasses = this.rawExpressionClasses;
+ var expressions = createRawExpressions(this.rawExpressions, pathwayJSON);
+ this.rows = [];
+ this.expressionMap = new Map();
+ var _iterator3 = _createForOfIteratorHelper(expressions),
+ _step3;
+ try {
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
+ var rawExpression = _step3.value;
+ var exp = new Expression(rawExpression, expressionClasses);
+ this.rows.push(exp);
+ this.expressionMap.set(rawExpression.geneName, exp);
+ }
+ } catch (err) {
+ _iterator3.e(err);
+ } finally {
+ _iterator3.f();
+ }
+ }
+ }, {
+ key: "expressions",
+ value: function expressions() {
+ var geneName = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
+ if (geneName != null) {
+ if (this.expressionMap.has(geneName)) {
+ return [this.expressionMap.get(geneName)];
+ } else {
+ return [];
+ }
+ }
+ return this.rows;
+ }
+ }, {
+ key: "foldChange",
+ value: function foldChange(selectedClass, selectedFunction) {
+ var results = new Map();
+ this.rows.forEach(function (expression) {
+ var foldChange = expression.foldChange(selectedClass, selectedFunction);
+ results.set(expression.geneName, foldChange);
+ });
+ return results;
+ }
+ }, {
+ key: "computeFoldChangeRange",
+ value: function computeFoldChangeRange(selectedClass, selectedFunction) {
+ var foldValues = this.rows.map(function (expression) {
+ return expression.foldChange(selectedClass, selectedFunction);
+ });
+ var fvs = foldValues.filter(function (fv) {
+ return fv !== Infinity && fv !== -Infinity;
+ });
+ var maxMagnitude = Math.max(Math.max.apply(Math, _toConsumableArray(fvs)), Math.abs(Math.min.apply(Math, _toConsumableArray(fvs))));
+ var max = maxMagnitude;
+ var min = -maxMagnitude;
+ return {
+ min: min,
+ max: max
+ };
+ }
+ }]);
+}();
+module.exports = {
+ ExpressionTable: ExpressionTable,
+ applyExpressionData: applyExpressionData,
+ geneIntersection: geneIntersection
+};
+
+/***/ }),
+
+/***/ 188:
+/***/ (function(module, exports, __webpack_require__) {
+
+function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
+function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
+function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
+function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
+function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
+var _ = __webpack_require__(6);
+var _require = __webpack_require__(132),
+ PATHWAYS_LAYOUT_OPTS = _require.PATHWAYS_LAYOUT_OPTS;
+var MATCHED_SEARCH_CLASS = 'search-match';
+var expandCollapseAll = function expandCollapseAll() {
+ var expanded = true;
+ return function (cy) {
+ var api = cy.expandCollapse('get');
+ if (expanded) {
+ var nodesToCollapse = cy.nodes('[class="complex"], [class="complex multimer"]').filter(function (node) {
+ return api.isCollapsible(node);
+ });
+ api.collapseRecursively(nodesToCollapse);
+ } else {
+ var nodesToExpand = cy.nodes('[class="complex"], [class="complex multimer"]').filter(function (node) {
+ return api.isExpandable(node);
+ });
+ api.expandRecursively(nodesToExpand);
+ }
+ expanded = !expanded;
+ };
+};
+var fit = function fit(cy) {
+ cy.animation({
+ duration: 250,
+ fit: {
+ padding: 75
+ }
+ }).play();
+};
+var layout = function layout(cy) {
+ cy.layout(PATHWAYS_LAYOUT_OPTS).run();
+};
+var searchNodes = function searchNodes(cy, query) {
+ var queryEmpty = _.trim(query) === '';
+ var ecAPI = cy.expandCollapse('get');
+ var allNodes = cy.nodes().union(ecAPI.getAllCollapsedChildrenRecursively());
+ var getSyns = function getSyns(node) {
+ var metadata = node.data('metadata');
+ var _metadata$synonyms = metadata.synonyms,
+ synonyms = _metadata$synonyms === void 0 ? [] : _metadata$synonyms,
+ _metadata$standardNam = metadata.standardName,
+ standardName = _metadata$standardNam === void 0 ? '' : _metadata$standardNam,
+ _metadata$displayName = metadata.displayName,
+ displayName = _metadata$displayName === void 0 ? '' : _metadata$displayName;
+ var label = node.data('label');
+ return _.uniq([].concat(_toConsumableArray(synonyms), [standardName, displayName, label])).filter(function (el) {
+ return !_.isEmpty(el);
+ });
+ };
+ var matched = allNodes.filter(function (node) {
+ var synonyms = getSyns(node);
+ var synonymMatch = synonyms.find(function (synonym) {
+ return synonym.toUpperCase().includes(query.toUpperCase());
+ });
+ return synonymMatch != null;
+ });
+ allNodes.removeClass(MATCHED_SEARCH_CLASS);
+ if (matched.length > 0 && !queryEmpty) {
+ matched.addClass(MATCHED_SEARCH_CLASS);
+ }
+};
+module.exports = {
+ expandCollapse: expandCollapseAll(),
+ fit: fit,
+ layout: layout,
+ searchNodes: _.debounce(searchNodes, 300),
+ MATCHED_SEARCH_CLASS: MATCHED_SEARCH_CLASS
+};
+
+/***/ }),
+
+/***/ 191:
+/***/ (function(module, exports, __webpack_require__) {
+
+function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
+function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
+function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
+function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
+function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
+function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
+function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
+function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
+function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
+var React = __webpack_require__(1);
+var _ = __webpack_require__(6);
+var h = __webpack_require__(2);
+var Popover = __webpack_require__(72);
+var tippyDefaults = __webpack_require__(192);
+
+/* Props
+Required
+- description
+Optional
+- tippy (an object with tippy.js options)
+- popover props (props you want the popover to have, see popover)
+*/
+var Tooltip = /*#__PURE__*/function (_React$Component) {
+ function Tooltip() {
+ _classCallCheck(this, Tooltip);
+ return _callSuper(this, Tooltip, arguments);
+ }
+ _inherits(Tooltip, _React$Component);
+ return _createClass(Tooltip, [{
+ key: "componentWillMount",
+ value: function componentWillMount() {
+ var _this = this;
+ var props = this.props;
+ var tippyOptions = _.assign({}, tippyDefaults, {
+ html: function () {
+ return h('div.tooltip-content', [h('span.tooltip-description', props.description)]);
+ }(),
+ trigger: 'mouseenter manual',
+ theme: 'dark',
+ delay: [200, 0]
+ }, props.tippy);
+ this.popoverOptions = _.assign({}, props, {
+ tippy: tippyOptions,
+ hide: function hide(hideTippy) {
+ if (props.hide) {
+ props.hide(hideTippy); // make sure we don't override the hide() from props
+ }
+ _this.hideTippy = hideTippy;
+ },
+ onClick: function onClick() {
+ _this.hideTippy();
+ }
+ });
+ }
+ }, {
+ key: "componentWillUnmount",
+ value: function componentWillUnmount() {}
+ }, {
+ key: "render",
+ value: function render() {
+ var props = this.props;
+ return h(Popover, this.popoverOptions, props.children);
+ }
+ }]);
+}(React.Component);
+module.exports = Tooltip;
+
+/***/ }),
+
+/***/ 192:
+/***/ (function(module, exports) {
+
+module.exports = {
+ theme: 'light',
+ placement: 'bottom',
+ createPopperInstanceOnInit: true,
+ animation: 'fade',
+ animateFill: false,
+ duration: [250, 0],
+ delay: [0, 0],
+ arrow: true,
+ trigger: 'click manual',
+ interactive: true,
+ multiple: true,
+ hideOnClick: true
+};
+
+/***/ }),
+
+/***/ 193:
+/***/ (function(module, exports, __webpack_require__) {
+
+function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
+function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
+function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
+function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
+function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
+function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
+function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
+function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
+function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
+var React = __webpack_require__(1);
+var h = __webpack_require__(2);
+var classNames = __webpack_require__(14);
+var PcLogoLink = /*#__PURE__*/function (_React$Component) {
+ function PcLogoLink() {
+ _classCallCheck(this, PcLogoLink);
+ return _callSuper(this, PcLogoLink, arguments);
+ }
+ _inherits(PcLogoLink, _React$Component);
+ return _createClass(PcLogoLink, [{
+ key: "render",
+ value: function render() {
+ var cn = this.props.className;
+ return h('a', {
+ href: '/'
+ }, [h('div', {
+ className: classNames('pc-logo', cn)
+ })]);
+ }
+ }]);
+}(React.Component);
+module.exports = PcLogoLink;
+
+/***/ }),
+
+/***/ 194:
+/***/ (function(module, exports, __webpack_require__) {
+
+var _require = __webpack_require__(133),
+ PATHWAYS_LAYOUT_OPTS = _require.PATHWAYS_LAYOUT_OPTS;
+var _require2 = __webpack_require__(195),
+ expandCollapse = _require2.expandCollapse,
+ searchNodes = _require2.searchNodes,
+ layout = _require2.layout,
+ fit = _require2.fit;
+module.exports = {
+ expandCollapse: expandCollapse,
+ fit: fit,
+ layout: layout,
+ stylesheet: __webpack_require__(496),
+ bindCyEvents: __webpack_require__(497),
+ searchNodes: searchNodes,
+ PATHWAYS_LAYOUT_OPTS: PATHWAYS_LAYOUT_OPTS
+};
+
+/***/ }),
+
+/***/ 195:
+/***/ (function(module, exports, __webpack_require__) {
+
+function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
+function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
+function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
+function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
+function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
+var _ = __webpack_require__(6);
+var _require = __webpack_require__(133),
+ PATHWAYS_LAYOUT_OPTS = _require.PATHWAYS_LAYOUT_OPTS;
+var MATCHED_SEARCH_CLASS = 'search-match';
+var expandCollapseAll = function expandCollapseAll() {
+ var expanded = true;
+ return function (cy) {
+ var api = cy.expandCollapse('get');
+ if (expanded) {
+ var nodesToCollapse = cy.nodes('[class="complex"], [class="complex multimer"]').filter(function (node) {
+ return api.isCollapsible(node);
+ });
+ api.collapseRecursively(nodesToCollapse);
+ } else {
+ var nodesToExpand = cy.nodes('[class="complex"], [class="complex multimer"]').filter(function (node) {
+ return api.isExpandable(node);
+ });
+ api.expandRecursively(nodesToExpand);
+ }
+ expanded = !expanded;
+ };
+};
+var fit = function fit(cy) {
+ cy.animation({
+ duration: 250,
+ fit: {
+ padding: 75
+ }
+ }).play();
+};
+var layout = function layout(cy) {
+ cy.layout(PATHWAYS_LAYOUT_OPTS).run();
+};
+var searchNodes = function searchNodes(cy, query) {
+ var queryEmpty = _.trim(query) === '';
+ var ecAPI = cy.expandCollapse('get');
+ var allNodes = cy.nodes().union(ecAPI.getAllCollapsedChildrenRecursively());
+ var getSyns = function getSyns(node) {
+ var metadata = node.data('metadata');
+ var _metadata$synonyms = metadata.synonyms,
+ synonyms = _metadata$synonyms === void 0 ? [] : _metadata$synonyms,
+ _metadata$standardNam = metadata.standardName,
+ standardName = _metadata$standardNam === void 0 ? '' : _metadata$standardNam,
+ _metadata$displayName = metadata.displayName,
+ displayName = _metadata$displayName === void 0 ? '' : _metadata$displayName;
+ var label = node.data('label');
+ return _.uniq([].concat(_toConsumableArray(synonyms), [standardName, displayName, label])).filter(function (el) {
+ return !_.isEmpty(el);
+ });
+ };
+ var matched = allNodes.filter(function (node) {
+ var synonyms = getSyns(node);
+ var synonymMatch = synonyms.find(function (synonym) {
+ return synonym.toUpperCase().includes(query.toUpperCase());
+ });
+ return synonymMatch != null;
+ });
+ allNodes.removeClass(MATCHED_SEARCH_CLASS);
+ if (matched.length > 0 && !queryEmpty) {
+ matched.addClass(MATCHED_SEARCH_CLASS);
+ }
+};
+module.exports = {
+ expandCollapse: expandCollapseAll(),
+ fit: fit,
+ layout: layout,
+ searchNodes: _.debounce(searchNodes, 300),
+ MATCHED_SEARCH_CLASS: MATCHED_SEARCH_CLASS
+};
+
+/***/ }),
+
+/***/ 196:
+/***/ (function(module, exports, __webpack_require__) {
+
+var h = __webpack_require__(2);
+var CytoscapeTooltip = __webpack_require__(93);
+var _ = __webpack_require__(6);
+var _require = __webpack_require__(16),
+ ServerAPI = _require.ServerAPI;
+var InteractionsNodeTooltip = __webpack_require__(506);
+var InteractionsEdgeTooltip = __webpack_require__(507);
+var SINGLE_SRC_LAYOUT = {
+ name: 'concentric',
+ concentric: function concentric(node) {
+ return node.data('queried') ? 1 : 0;
+ },
+ levelWidth: function levelWidth() {
+ return 1;
+ },
+ animate: true,
+ animationDuration: 800,
+ animationEasing: 'ease-in-out'
+};
+var MULTI_SRC_LAYOUT = {
+ name: 'cose-bilkent',
+ nodeRepulsion: 2000,
+ nodeDimensionsIncludeLabels: true,
+ animate: 'end',
+ animationEasing: 'ease-in-out',
+ animationDuration: 800,
+ fit: true,
+ padding: 75,
+ randomize: true
+};
+var interactionsLayoutOpts = function interactionsLayoutOpts(cy) {
+ var numSources = cy.nodes('[?queried]').size();
+ if (numSources > 1) {
+ return MULTI_SRC_LAYOUT;
+ }
+ return SINGLE_SRC_LAYOUT;
+};
+var SHOW_INTERACTIONS_TOOLTIPS_EVENT = 'showinteractionstooltip';
+var bindEvents = function bindEvents(cy) {
+ var geneData = [];
+
+ // on initial interactions data load, popualate gene metadata
+ cy.one('add', function () {
+ var geneQuery = cy.nodes().map(function (node) {
+ return node.data('id');
+ }).join(' ');
+ ServerAPI.searchGenes(geneQuery).then(function (res) {
+ return geneData = res;
+ }).catch(function () {}); // swallow
+ });
+ var hideTooltips = function hideTooltips() {
+ cy.elements().forEach(function (ele) {
+ var tooltip = ele.scratch('_tooltip');
+ if (tooltip) {
+ tooltip.hide();
+ }
+ });
+ };
+ cy.on(SHOW_INTERACTIONS_TOOLTIPS_EVENT, 'node', function (evt) {
+ var node = evt.target;
+ var geneId = node.data('id');
+ var geneMetadata = geneData.find(function (info) {
+ return info.query === geneId;
+ }) || {};
+ var tooltip = new CytoscapeTooltip(node.popperRef(), {
+ html: h(InteractionsNodeTooltip, {
+ node: node,
+ geneMetadata: geneMetadata
+ })
+ });
+ node.scratch('_tooltip', tooltip);
+ tooltip.show();
+ });
+ cy.on(SHOW_INTERACTIONS_TOOLTIPS_EVENT, 'edge', function (evt) {
+ var edge = evt.target;
+ var tooltip = new CytoscapeTooltip(edge.popperRef(), {
+ html: h(InteractionsEdgeTooltip, {
+ edge: edge
+ })
+ });
+ edge.scratch('_tooltip', tooltip);
+ tooltip.show();
+ });
+ cy.on('tap', function (evt) {
+ var tgt = evt.target;
+
+ // we clicked an element that has a tooltip open -> close it
+ if (tgt.scratch('_tooltip')) {
+ hideTooltips();
+ tgt.removeScratch('_tooltip');
+ } else {
+ // open the tooltip for the clicked element
+ hideTooltips();
+ tgt.emit(SHOW_INTERACTIONS_TOOLTIPS_EVENT);
+ }
+ });
+
+ //Hide Tooltips on various graph movements
+ cy.on('drag', function () {
+ return hideTooltips();
+ });
+ cy.on('pan', function () {
+ return hideTooltips();
+ });
+ cy.on('zoom', function () {
+ return hideTooltips();
+ });
+ cy.on('layoutstart', function () {
+ return hideTooltips();
+ });
+ cy.on('hide-type', function () {
+ return hideTooltips();
+ });
+ cy.on('slider-change', function () {
+ return hideTooltips();
+ });
+ var nodeHoverMouseOver = _.debounce(function (evt) {
+ var node = evt.target;
+ var elesToHighlight = cy.collection();
+
+ //Create a list of the hovered node & its neighbourhood
+ node.neighborhood().nodes().union(node).forEach(function (node) {
+ elesToHighlight.merge(node.ancestors());
+ elesToHighlight.merge(node.descendants());
+ elesToHighlight.merge(node);
+ });
+ elesToHighlight.merge(node.neighborhood().edges());
+
+ //Add highlighted class to node & its neighbourhood, unhighlighted to everything else
+ cy.elements().addClass('unhighlighted');
+ elesToHighlight.forEach(function (ele) {
+ ele.removeClass('unhighlighted');
+ ele.addClass('highlighted');
+ });
+ }, 750);
+
+ //call style-applying and style-removing functions on 'mouseover' and 'mouseout' for non-compartment nodes
+ cy.on('mouseover', 'node[class!="compartment"]', nodeHoverMouseOver);
+ cy.on('mouseout', 'node[class!="compartment"]', function () {
+ nodeHoverMouseOver.cancel();
+ cy.elements().removeClass('highlighted unhighlighted');
+ });
+};
+
+//Search by keyword within network
+var searchInteractionNodes = _.debounce(function (cy, query) {
+ var queryEmpty = _.trim(query) === '';
+ var allNodes = cy.nodes();
+ var matched = allNodes.filter(function (node) {
+ return node.data('id').toUpperCase().includes(query.toUpperCase());
+ });
+ cy.batch(function () {
+ allNodes.removeClass('matched');
+ if (matched.length > 0 && !queryEmpty) {
+ matched.addClass('matched');
+ }
+ });
+}, 250);
+module.exports = {
+ interactionsLayoutOpts: interactionsLayoutOpts,
+ searchInteractionNodes: searchInteractionNodes,
+ interactionsStylesheet: __webpack_require__(508),
+ bindEvents: bindEvents
+};
+
+/***/ }),
+
+/***/ 197:
+/***/ (function(module, exports) {
+
+var INTERACTION_TYPES = {
+ BINDING: 'Binding',
+ MODIFICATION: 'Modification',
+ EXPRESSION: 'Expression',
+ OTHER: 'Other'
+};
+module.exports = INTERACTION_TYPES;
+
+/***/ }),
+
+/***/ 198:
+/***/ (function(module, exports, __webpack_require__) {
+
+var h = __webpack_require__(2);
+var CytoscapeTooltip = __webpack_require__(93);
+var _ = __webpack_require__(6);
+var EnrichmentTooltip = __webpack_require__(514);
+var _require = __webpack_require__(515),
+ generateClusterLabels = _require.generateClusterLabels;
+var SHOW_ENRICHMENT_TOOLTIPS_EVENT = 'showenrichmenttooltip';
+var ENRICHMENT_LAYOUT_OPTS = {
+ name: 'cola',
+ refresh: 10,
+ animate: false,
+ maxSimulationTime: 500,
+ nodeDimensionsIncludeLabels: true,
+ randomize: true,
+ convergenceThreshold: 50,
+ padding: 50
+};
+var PARENT_SEL_PREFIX = 'component-';
+var noParent = function noParent(component) {
+ return !component.isChild();
+};
+var enrichmentLayout = function enrichmentLayout(cy) {
+ var nodesWithNoEdges = cy.nodes().filter(function (node) {
+ return node.connectedEdges().size() === 0;
+ });
+ var nodesWithEdges = cy.elements().difference(nodesWithNoEdges);
+ var w = cy.width();
+ var h = cy.height();
+ var firstLayout = nodesWithEdges.layout(ENRICHMENT_LAYOUT_OPTS);
+ var firstLayoutPromise = firstLayout.pon('layoutstop');
+ firstLayout.run();
+ return firstLayoutPromise.then(function () {
+ // add parent nodes for each component with size > 2
+ cy.elements().components().filter(function (component) {
+ return component.size() > 2;
+ }).filter(noParent).forEach(function (component, index) {
+ var labelInput = component.nodes().map(function (node) {
+ return node.data('name');
+ }).join('. ');
+ var tags = generateClusterLabels(labelInput);
+ var componentParentId = PARENT_SEL_PREFIX + index;
+ cy.add({
+ group: 'nodes',
+ label: '',
+ data: {
+ tags: tags.join(' '),
+ id: componentParentId
+ }
+ });
+ component.move({
+ parent: componentParentId
+ });
+ });
+ var firstLayoutBB = nodesWithEdges.boundingBox();
+ var bbIsEmpty = function bbIsEmpty(bb) {
+ return bb.h === 0 && bb.w === 0;
+ };
+ var secondLayoutBB = {
+ x1: 0,
+ x2: w,
+ y1: 0,
+ y2: h
+ };
+ if (!bbIsEmpty(firstLayoutBB)) {
+ secondLayoutBB = {
+ x1: firstLayoutBB.x1,
+ x2: firstLayoutBB.x2,
+ y1: firstLayoutBB.y2 + 200,
+ y2: firstLayoutBB.y2 + 400
+ };
+ }
+ var secondLayout = nodesWithNoEdges.layout({
+ name: 'grid',
+ nodeDimensionsIncludeLabels: true,
+ boundingBox: secondLayoutBB,
+ stop: function stop() {
+ return cy.fit([], Math.min(0.05 * h, 0.05 * w));
+ }
+ });
+ var secondLayoutPromise = secondLayout.pon('layoutstop');
+ secondLayout.run();
+ return secondLayoutPromise;
+ });
+};
+var bindEvents = function bindEvents(cy) {
+ var hideTooltips = function hideTooltips() {
+ cy.elements().forEach(function (ele) {
+ var tooltip = ele.scratch('_tooltip');
+ if (tooltip) {
+ tooltip.hide();
+ }
+ });
+ };
+ cy.on(SHOW_ENRICHMENT_TOOLTIPS_EVENT, 'node', function (evt) {
+ var node = evt.target;
+ if (node.isParent()) {
+ return;
+ }
+ var tooltip = new CytoscapeTooltip(node.popperRef(), {
+ html: h(EnrichmentTooltip, {
+ node: node
+ })
+ });
+ node.scratch('_tooltip', tooltip);
+ tooltip.show();
+ });
+ cy.on('tap', function (evt) {
+ var tgt = evt.target;
+
+ // if we didn't click a node, close all tooltips
+ if (evt.target === cy || evt.target.isEdge()) {
+ hideTooltips();
+ return;
+ }
+
+ // we clicked a node that has a tooltip open -> close it
+ if (tgt.scratch('_tooltip-opened')) {
+ hideTooltips();
+ } else {
+ // open the tooltip for the clicked node
+ hideTooltips();
+ tgt.emit(SHOW_ENRICHMENT_TOOLTIPS_EVENT);
+ }
+ });
+
+ //Hide Tooltips on various graph movements
+ cy.on('drag', function () {
+ return hideTooltips();
+ });
+ cy.on('pan', function () {
+ return hideTooltips();
+ });
+ cy.on('zoom', function () {
+ return hideTooltips();
+ });
+ cy.on('layoutstart', function () {
+ return hideTooltips();
+ });
+};
+var searchEnrichmentNodes = _.debounce(function (cy, query) {
+ var queryEmpty = _.trim(query) === '';
+ var allNodes = cy.nodes();
+ var matched = allNodes.filter(function (node) {
+ var geneSet = (node.data('geneSet') || []).map(function (name) {
+ return name.toUpperCase();
+ });
+ var name = (node.data('name') || '').toUpperCase();
+ var matches = function matches(str, q) {
+ return str.indexOf(q) >= 0;
+ };
+ var q = query.toUpperCase();
+ return matches(name, q) || geneSet.some(function (geneName) {
+ return matches(geneName, q);
+ });
+ });
+ cy.batch(function () {
+ allNodes.removeClass('matched');
+ if (matched.length > 0 && !queryEmpty) {
+ matched.addClass('matched');
+ }
+ });
+}, 250);
+module.exports = {
+ enrichmentLayout: enrichmentLayout,
+ searchEnrichmentNodes: searchEnrichmentNodes,
+ enrichmentStylesheet: __webpack_require__(519),
+ bindEvents: bindEvents
+};
+
+/***/ }),
+
+/***/ 206:
+/***/ (function(module, exports, __webpack_require__) {
+
+__webpack_require__(207);
+__webpack_require__(409);
+var debug = __webpack_require__(410);
+var hh = __webpack_require__(123);
+var h = __webpack_require__(2);
+var Router = __webpack_require__(419);
+var ReactDOM = __webpack_require__(54);
+var RegisterCyExtensions = __webpack_require__(521);
+if (debug.enabled()) {
+ debug.init();
+}
+RegisterCyExtensions();
+var root = hh('div#root');
+document.body.appendChild(root);
+ReactDOM.render(h(Router), root);
+
+/***/ }),
+
+/***/ 24:
+/***/ (function(module, exports, __webpack_require__) {
+
+/* WEBPACK VAR INJECTION */(function(process) {var _ = __webpack_require__(6);
+var defaults = {
+ PORT: 3000,
+ METADATA_CRON_SCHEDULE: '0 0 * * Monday',
+ // update file from gprofiler etc. (Monday at midnight)
+ PC_URL: 'https://www.pathwaycommons.org/',
+ DOWNLOADS_FOLDER_NAME: 'downloads',
+ GPROFILER_URL: "https://biit.cs.ut.ee/gprofiler/",
+ GMT_ARCHIVE_URL: 'https://biit.cs.ut.ee/gprofiler/static/gprofiler_hsapiens.name.zip',
+ IDENTIFIERS_URL: 'http://bioregistry.io',
+ NCBI_EUTILS_BASE_URL: 'https://eutils.ncbi.nlm.nih.gov/entrez/eutils',
+ NCBI_API_KEY: 'b99e10ebe0f90d815a7a99f18403aab08008',
+ // for dev testing only (baderlabsysmonitor ncbi key)
+ PUBMED_BASE_URL: 'https://pubmed.ncbi.nlm.nih.gov/',
+ HGNC_BASE_URL: 'https://rest.genenames.org',
+ UNIPROT_API_BASE_URL: 'https://www.ebi.ac.uk/proteins/api',
+ DOI_BASE_URL: 'https://doi.org/',
+ ORCID_BASE_URL: 'https://orcid.org/',
+ SBGN_IMG_SERVICE_BASE_URL: 'http://localhost:9090/',
+ SBGN_IMG_PATH: 'public/img/pathways',
+ PC_IMAGE_CACHE_MAX_SIZE: 10000,
+ PC_CACHE_MAX_SIZE: 1000,
+ PUB_CACHE_MAX_SIZE: 1000000,
+ ENT_CACHE_MAX_SIZE: 1000000,
+ ENT_SUMMARY_CACHE_MAX_SIZE: 1000000,
+ MAX_SIF_NODES: 25,
+ CLIENT_FETCH_TIMEOUT: 15000,
+ SERVER_FETCH_TIMEOUT: 5000,
+ // DB config values
+ DB_NAME: 'appui',
+ DB_HOST: '127.0.0.1',
+ DB_PORT: '28015',
+ DB_USER: undefined,
+ DB_PASS: undefined,
+ DB_CERT: undefined,
+ // factoid specific urls
+ FACTOID_URL: 'https://biofactoid.org/',
+ NS_CHEBI: 'chebi',
+ NS_ENSEMBL: 'ensembl',
+ NS_GENECARDS: 'genecards',
+ NS_GENE_ONTOLOGY: 'go',
+ NS_HGNC: 'hgnc',
+ NS_HGNC_SYMBOL: 'hgnc.symbol',
+ NS_NCBI_GENE: 'ncbigene',
+ NS_PUBMED: 'pubmed',
+ NS_REACTOME: 'reactome',
+ NS_UNIPROT: 'uniprot',
+ NS_BIOFACTOID: 'biofactoid',
+ NS_PATHWAYCOMMONS: 'pathwaycommons'
+};
+var envVars = _.pick(process.env, Object.keys(defaults));
+
+// these vars are always included in the bundle because they ref `process.env.${name}` directly
+// NB DO NOT include passwords etc. here
+var clientVars = {
+ NODE_ENV: "development",
+ PC_URL: "https://www.pathwaycommons.org",
+ FACTOID_URL: "https://factoid.baderlab.org"
+};
+_.assign(envVars, clientVars);
+for (var key in envVars) {
+ var val = envVars[key];
+ if (val === '' || val == null) {
+ delete envVars[key];
+ }
+}
+var conf = Object.assign({}, defaults, envVars);
+Object.freeze(conf);
+module.exports = conf;
+/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(129)))
+
+/***/ }),
+
+/***/ 410:
+/***/ (function(module, exports, __webpack_require__) {
+
+var domReady = __webpack_require__(411);
+var sync = __webpack_require__(412);
+var debug = window.dbg = {
+ enabled: function enabled(on) {
+ if (arguments.length === 0) {
+ if (this._enabled != null) {
+ return this._enabled;
+ } else {
+ return window.DEBUG || "development" !== 'production';
+ }
+ } else {
+ this._enabled = !!on;
+ }
+ },
+ init: function init() {
+ domReady(sync);
+ }
+};
+module.exports = debug;
+
+/***/ }),
+
+/***/ 412:
+/***/ (function(module, exports) {
+
+module.exports = function appendScript() {
+ var script = document.createElement('script');
+ script.src = 'http://' + window.location.hostname + ':35729/livereload.js';
+ document.head.insertBefore(script, document.head.firstChild);
+};
+
+/***/ }),
+
+/***/ 416:
+/***/ (function(module, exports) {
+
+/* (ignored) */
+
+/***/ }),
+
+/***/ 419:
+/***/ (function(module, exports, __webpack_require__) {
+
+var _require = __webpack_require__(60),
+ BrowserRouter = _require.BrowserRouter,
+ Route = _require.Route,
+ Switch = _require.Switch;
+var h = __webpack_require__(2);
+var _ = __webpack_require__(6);
+var qs = __webpack_require__(37);
+var Features = __webpack_require__(450);
+module.exports = function () {
+ return h(BrowserRouter, [h(Switch, [{
+ path: '/',
+ render: function render(props) {
+ return h(Features.Search, props);
+ }
+ }, {
+ path: '/search',
+ render: function render(props) {
+ return h(Features.Search, props);
+ }
+ }, {
+ path: '/pathways',
+ render: function render(props) {
+ var uri = qs.parse(location.search).uri;
+ var apiOpts = {
+ type: 'pathways',
+ uri: uri
+ };
+ var downloadOpts = {
+ downloadTypes: ['png', 'gmt', 'sif', 'txt', 'biopax', 'jsonld', 'sbgn']
+ };
+ return h(Features.Pathways, _.assign({}, props, {
+ apiOpts: apiOpts,
+ downloadOpts: downloadOpts
+ }));
+ }
+ }, {
+ path: '/biofactoid',
+ render: function render(props) {
+ return h(Features.Biofactoid, props);
+ }
+ }, {
+ path: '/biofactoid/:id',
+ render: function render(props) {
+ var match = props.match;
+ var id = match.params.id;
+ var apiOpts = {
+ type: 'biofactoid',
+ id: id
+ };
+ return h(Features.Pathways, _.assign({}, props, {
+ apiOpts: apiOpts
+ }));
+ }
+ }, {
+ path: '/paint',
+ render: function render(props) {
+ return h(Features.Paint, props);
+ }
+ }, {
+ path: '/interactions',
+ render: function render(props) {
+ return h(Features.Interactions, props);
+ }
+ }, {
+ path: '/enrichment',
+ render: function render(props) {
+ return h(Features.Enrichment, props);
+ }
+ }, {
+ path: '*',
+ render: function render(props) {
+ props = _.assign({
+ notFoundError: true
+ }, props);
+ return h(Features.Search, props);
+ }
+ }].map(function (spec) {
+ return h(Route, _.assign({
+ exact: true
+ }, spec));
+ }))]);
+};
+
+/***/ }),
+
+/***/ 450:
+/***/ (function(module, exports, __webpack_require__) {
+
+var Paint = __webpack_require__(451);
+var Pathways = __webpack_require__(492);
+var Search = __webpack_require__(500);
+var Interactions = __webpack_require__(504);
+var Enrichment = __webpack_require__(511);
+var Biofactoid = __webpack_require__(520);
+module.exports = {
+ Paint: Paint,
+ Search: Search,
+ Pathways: Pathways,
+ Interactions: Interactions,
+ Enrichment: Enrichment,
+ Biofactoid: Biofactoid
+};
+
+/***/ }),
+
+/***/ 451:
+/***/ (function(module, exports, __webpack_require__) {
+
+function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
+function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
+function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
+function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
+function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
+function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
+function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
+function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
+function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
+function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
+function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
+function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
+function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
+function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
+var React = __webpack_require__(1);
+var h = __webpack_require__(2);
+var queryString = __webpack_require__(37);
+var _ = __webpack_require__(6);
+var classNames = __webpack_require__(14);
+var Loader = __webpack_require__(38);
+var Promise = __webpack_require__(128).Promise;
+var _require = __webpack_require__(63),
+ fetch = _require.fetch;
+var CytoscapeService = __webpack_require__(90);
+var _require2 = __webpack_require__(16),
+ ServerAPI = _require2.ServerAPI;
+var Pathway = __webpack_require__(182);
+var FileDownloadMenu = __webpack_require__(467);
+var InfoMenu = __webpack_require__(470);
+var PaintMenu = __webpack_require__(471);
+var PathwaysToolbar = __webpack_require__(481);
+var _require3 = __webpack_require__(55),
+ Sidebar = _require3.Sidebar,
+ PcLogoLink = _require3.PcLogoLink,
+ CytoscapeNetwork = _require3.CytoscapeNetwork;
+var demoExpressions = __webpack_require__(490);
+var demoPathways = __webpack_require__(491);
+var _require4 = __webpack_require__(187),
+ ExpressionTable = _require4.ExpressionTable,
+ applyExpressionData = _require4.applyExpressionData,
+ geneIntersection = _require4.geneIntersection;
+var _require5 = __webpack_require__(131),
+ stylesheet = _require5.stylesheet,
+ bindCyEvents = _require5.bindCyEvents,
+ PATHWAYS_LAYOUT_OPTS = _require5.PATHWAYS_LAYOUT_OPTS;
+
+// given a string of N gene names, chunk them into N / 15 subqueries and send them to pathway commons
+// for each pathway in the search results
+// get the pathway json for that result
+// find out all the genes are in that pathway
+// find all the genes in the expression data
+// return the intersection between genes in (expData, p) for p in Pathway List
+var getPathwaysRelevantTo = function getPathwaysRelevantTo(searchParam, expressionTable) {
+ var expressions = expressionTable.rawExpressions;
+ var geneQueries = _.chunk(expressions.map(function (expression) {
+ return expression.geneName;
+ }), 15).map(function (chunk) {
+ return ServerAPI.search({
+ q: chunk.join(' '),
+ type: 'Pathway'
+ });
+ });
+ var searchQuery = ServerAPI.search({
+ q: searchParam,
+ type: 'Pathway'
+ });
+ return Promise.all([].concat(_toConsumableArray(geneQueries), [searchQuery])).then(function (searchResults) {
+ var pathwaySearchResults = _toConsumableArray(searchResults.map(function (result) {
+ return result.searchHits;
+ }));
+ var uniqueResults = _.uniqBy(_.flatten(pathwaySearchResults), function (result) {
+ return result.uri;
+ });
+ var pathwaysJSON = uniqueResults.map(function (result) {
+ return ServerAPI.getPathway(result.uri, 'latest').catch(function () {
+ return null;
+ });
+ });
+ return Promise.all(pathwaysJSON).then(function (pathwaysJSON) {
+ return _.uniqWith(pathwaysJSON.filter(function (pj) {
+ return pj != null;
+ }).map(function (pathwayJSON) {
+ var p = new Pathway();
+ p.load(pathwayJSON);
+ return p;
+ }), function (p0, p1) {
+ return _.isEqual(p0.cyJson(), p1.cyJson());
+ });
+ });
+ });
+};
+var Paint = /*#__PURE__*/function (_React$Component) {
+ function Paint(props) {
+ var _this;
+ _classCallCheck(this, Paint);
+ _this = _callSuper(this, Paint, [props]);
+ _this.state = {
+ cySrv: new CytoscapeService({
+ style: stylesheet,
+ onMount: bindCyEvents
+ }),
+ pathways: [],
+ curPathway: new Pathway(),
+ expressionTable: new ExpressionTable(),
+ activeMenu: 'paintMenu',
+ paintMenuCtrls: {
+ exprClass: '',
+ exprFnName: 'mean',
+ exprFn: _.mean
+ },
+ activeTab: 0,
+ invalidEnrichments: false,
+ loading: true
+ };
+ if (true) {
+ _this.state.cySrv.getPromise().then(function (cy) {
+ return window.cy = cy;
+ });
+ }
+ return _this;
+ }
+ _inherits(Paint, _React$Component);
+ return _createClass(Paint, [{
+ key: "loadPaintDemoData",
+ value: function loadPaintDemoData() {
+ var _this2 = this;
+ var _this$state = this.state,
+ expressionTable = _this$state.expressionTable,
+ paintMenuCtrls = _this$state.paintMenuCtrls;
+ var pathways = demoPathways.map(function (json) {
+ var p = new Pathway();
+ p.load(json);
+ return p;
+ });
+ expressionTable.load(demoExpressions);
+ this.setState({
+ paintMenuCtrls: _.assign({}, paintMenuCtrls, {
+ exprClass: expressionTable.classes[0]
+ }),
+ pathways: pathways
+ }, function () {
+ return _this2.loadPathway(pathways[0]);
+ });
+ }
+
+ // onMount prop passed to CytoscapeNetwork
+ // called after CytoscapeNetwork has mounted
+ }, {
+ key: "getEnrichmentsAndPathways",
+ value: function getEnrichmentsAndPathways() {
+ var _this3 = this;
+ var query = queryString.parse(this.props.location.search);
+ var searchParam = query.q;
+ var enrichmentsUri = query.uri;
+ var _this$state2 = this.state,
+ expressionTable = _this$state2.expressionTable,
+ paintMenuCtrls = _this$state2.paintMenuCtrls;
+
+ // if the user just comes into the app without enrichments, load the demo data
+ if (enrichmentsUri == null) {
+ this.loadPaintDemoData();
+ return;
+ }
+ var getEnrichments = function getEnrichments() {
+ return fetch(enrichmentsUri).then(function (res) {
+ return res.json();
+ }).then(function (json) {
+ expressionTable.load(json);
+ });
+ };
+ var findBestPathway = function findBestPathway(pathways) {
+ // 1. check if there is a pathway with a name that matches the search param
+ // 2. sort the pathawys by their gene intersection between the expression table
+
+ // see if there is a pathway that has the same title as the search param
+ var bestResult = pathways.find(function (pathway) {
+ return pathway.name() === searchParam;
+ });
+ if (bestResult == null) {
+ bestResult = pathways[0];
+ }
+ if (bestResult == null) {
+ return null;
+ }
+ return bestResult;
+ };
+ getEnrichments().then(function () {
+ return getPathwaysRelevantTo(searchParam, expressionTable);
+ }).then(function (pathways) {
+ if (expressionTable.classes == null) {
+ _this3.setState({
+ invalidEnrichments: true
+ });
+ return;
+ }
+ pathways.sort(function (p0, p1) {
+ return geneIntersection(p1, expressionTable).length - geneIntersection(p0, expressionTable).length;
+ });
+ _this3.setState({
+ paintMenuCtrls: _.assign({}, paintMenuCtrls, {
+ exprClass: expressionTable.classes[0]
+ }),
+ pathways: pathways
+ }, function () {
+ return _this3.loadPathway(findBestPathway(pathways));
+ });
+ });
+ }
+ }, {
+ key: "loadPathway",
+ value: function loadPathway(pathway) {
+ var _this4 = this;
+ var _this$state3 = this.state,
+ cySrv = _this$state3.cySrv,
+ paintMenuCtrls = _this$state3.paintMenuCtrls,
+ expressionTable = _this$state3.expressionTable;
+ var exprClass = paintMenuCtrls.exprClass,
+ exprFn = paintMenuCtrls.exprFn;
+ var cy = cySrv.get();
+ this.setState({
+ curPathway: pathway,
+ loading: true
+ }, function () {
+ expressionTable.loadPathway(pathway.cyJson());
+ cy.remove('*');
+ cy.add(pathway.cyJson());
+ cy.layout(_.assign({}, PATHWAYS_LAYOUT_OPTS, {
+ stop: function stop() {
+ applyExpressionData(cy, expressionTable, exprClass, exprFn);
+ _this4.setState({
+ loading: false
+ });
+ }
+ })).run();
+ });
+ }
+ }, {
+ key: "changeMenu",
+ value: function changeMenu(menu) {
+ var _this5 = this;
+ var resizeCyImmediate = function resizeCyImmediate() {
+ return _this5.state.cySrv.get().resize();
+ };
+ var resizeCyDebounced = _.debounce(resizeCyImmediate, 500);
+ if (menu === this.state.activeMenu) {
+ this.setState({
+ activeMenu: 'closeMenu'
+ }, resizeCyDebounced);
+ } else {
+ this.setState({
+ activeMenu: menu
+ }, resizeCyDebounced);
+ }
+ }
+ }, {
+ key: "handlePaintCtrlChange",
+ value: function handlePaintCtrlChange(newVal) {
+ var _this6 = this;
+ this.setState({
+ paintMenuCtrls: _.assign({}, this.state.paintMenuCtrls, newVal)
+ }, function () {
+ var _this6$state = _this6.state,
+ cySrv = _this6$state.cySrv,
+ expressionTable = _this6$state.expressionTable,
+ paintMenuCtrls = _this6$state.paintMenuCtrls;
+ var exprClass = paintMenuCtrls.exprClass,
+ exprFn = paintMenuCtrls.exprFn;
+ applyExpressionData(cySrv.get(), expressionTable, exprClass, exprFn);
+ });
+ }
+ }, {
+ key: "handlePaintMenuTabChange",
+ value: function handlePaintMenuTabChange(newTab) {
+ this.setState({
+ activeTab: newTab
+ });
+ }
+ }, {
+ key: "render",
+ value: function render() {
+ var _this7 = this;
+ var _this$state4 = this.state,
+ invalidEnrichments = _this$state4.invalidEnrichments,
+ loading = _this$state4.loading,
+ expressionTable = _this$state4.expressionTable,
+ curPathway = _this$state4.curPathway,
+ pathways = _this$state4.pathways,
+ cySrv = _this$state4.cySrv,
+ activeMenu = _this$state4.activeMenu,
+ paintMenuCtrls = _this$state4.paintMenuCtrls,
+ activeTab = _this$state4.activeTab;
+ if (invalidEnrichments) {
+ return h('div', 'The painter app requires enrichments that have an associated class file');
+ }
+ var appBar = h('div.app-bar', [h('div.app-bar-branding', [h(PcLogoLink), h('div.app-bar-title', [h('span', curPathway.name() + ' | '), h('a.plain-link', {
+ href: curPathway.datasourceUrl(),
+ target: '_blank'
+ }, ' ' + curPathway.datasource())])]), h(PathwaysToolbar, {
+ cySrv: cySrv,
+ activeMenu: activeMenu,
+ controller: this
+ })]);
+ var sidebar = h(Sidebar, {
+ controller: this,
+ activeMenu: activeMenu
+ }, [h(InfoMenu, {
+ key: 'infoMenu',
+ infoList: curPathway.comments()
+ }), h(FileDownloadMenu, {
+ key: 'downloadMenu',
+ cySrv: cySrv,
+ fileName: curPathway.name(),
+ uri: curPathway.uri()
+ }), h(PaintMenu, {
+ key: 'paintMenu',
+ selectedIndex: activeTab,
+ controller: this,
+ cySrv: cySrv,
+ curPathway: curPathway,
+ paintMenuCtrls: paintMenuCtrls,
+ pathways: pathways,
+ expressionTable: expressionTable
+ })]);
+ var content = [h(Loader, {
+ loaded: !loading,
+ options: {
+ left: '50%',
+ color: '#16a085'
+ }
+ }, [appBar, sidebar]), h(CytoscapeNetwork, {
+ cySrv: cySrv,
+ onMount: function onMount() {
+ return _this7.getEnrichmentsAndPathways();
+ },
+ className: classNames({
+ 'network-loading': loading,
+ 'network-sidebar-open': activeMenu !== 'closeMenu'
+ })
+ })];
+ return h('div.paint', content);
+ }
+ }]);
+}(React.Component);
+module.exports = Paint;
+
+/***/ }),
+
+/***/ 461:
+/***/ (function(module, exports, __webpack_require__) {
+
+function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
+var _require = __webpack_require__(462),
+ promiseTimeout = _require.promiseTimeout,
+ TimeoutError = _require.TimeoutError;
+var _ = __webpack_require__(6);
+var _require2 = __webpack_require__(24),
+ CLIENT_FETCH_TIMEOUT = _require2.CLIENT_FETCH_TIMEOUT,
+ SERVER_FETCH_TIMEOUT = _require2.SERVER_FETCH_TIMEOUT;
+var isClient = function isClient() {
+ return (typeof window === "undefined" ? "undefined" : _typeof(window)) !== ( true ? "undefined" : _typeof(undefined));
+};
+var isServer = function isServer() {
+ return !isClient();
+};
+var failOnBadStatus = function failOnBadStatus(res) {
+ if (!res.ok) {
+ throw new Error("Fetch failed due to bad status code : ".concat(res.statusText, " : ").concat(res.url));
+ } else {
+ return res;
+ }
+};
+var safeFetch = function safeFetch(url, options) {
+ var FETCH_TIMEOUT = isServer() ? SERVER_FETCH_TIMEOUT : CLIENT_FETCH_TIMEOUT;
+ var timeout = _.get(options, ['timeout'], FETCH_TIMEOUT);
+ var opts = _.omit(options, ['timeout']);
+ return promiseTimeout(function () {
+ return fetch(url, opts).then(failOnBadStatus);
+ }, timeout);
+};
+module.exports = {
+ safeFetch: safeFetch,
+ TimeoutError: TimeoutError
+};
+
+/***/ }),
+
+/***/ 462:
+/***/ (function(module, exports, __webpack_require__) {
+
+var Promise = __webpack_require__(128);
+var promiseTimeout = function promiseTimeout(fn, timeout) {
+ return Promise.resolve().then(fn).timeout(timeout);
+};
+module.exports = {
+ promiseTimeout: promiseTimeout,
+ TimeoutError: Promise.TimeoutError
+};
+
+/***/ }),
+
+/***/ 466:
+/***/ (function(module, exports, __webpack_require__) {
+
+var qs = __webpack_require__(37);
+var _ = __webpack_require__(6);
+var PC_URL;
+var _require = __webpack_require__(63),
+ fetch = _require.fetch;
+var _require2 = __webpack_require__(24),
+ NCBI_EUTILS_BASE_URL = _require2.NCBI_EUTILS_BASE_URL;
+var defaultFetchOpts = {
+ headers: {
+ 'Content-Type': 'application/json',
+ 'Accept': 'application/json'
+ }
+};
+var ServerAPI = {
+ getPCURL: function getPCURL() {
+ if (PC_URL) {
+ return Promise.resolve(PC_URL);
+ } else {
+ return fetch('/api/pc/baseURL').then(function (res) {
+ return res.text();
+ }).then(function (baseUrl) {
+ PC_URL = baseUrl;
+ return PC_URL;
+ });
+ }
+ },
+ // a generic method that gets pathway sbgn json from various sources
+ // e.g. pathwaycommons, factoid, or human created layouts
+ getAPIResource: function getAPIResource(opts) {
+ var type = opts.type,
+ uri = opts.uri,
+ id = opts.id;
+ if (type === 'pathways') {
+ if (uri !== null) {
+ return this.getPathway(uri);
+ } else {
+ throw new Error('Invalid parameter. Pathways api calls require a uri parameter');
+ }
+ }
+ if (type === 'biofactoid') {
+ if (id !== null) {
+ return this.getDocById(opts.id);
+ } else {
+ throw new Error('Invalid paramter. Factoids api calls require a id parameter');
+ }
+ }
+ },
+ getPathway: function getPathway(uri) {
+ var url = "/api/pathways?".concat(qs.stringify({
+ uri: uri
+ }));
+ var fetchOpts = _.assign({}, defaultFetchOpts);
+ return fetch(url, fetchOpts).then(function (res) {
+ return res.json();
+ }).then(function (pathwayJson) {
+ return {
+ graph: pathwayJson
+ };
+ });
+ },
+ getAllDocs: function getAllDocs() {
+ return fetch('/api/biofactoid', defaultFetchOpts).then(function (res) {
+ return res.json();
+ });
+ },
+ getDocById: function getDocById(id) {
+ var url = "/api/biofactoid/".concat(id);
+ return fetch(url, defaultFetchOpts).then(function (res) {
+ return res.json();
+ }).then(function (pathwayJson) {
+ return {
+ graph: pathwayJson
+ };
+ });
+ },
+ getInteractionGraph: function getInteractionGraph(sources) {
+ return fetch("/api/interactions?".concat(qs.stringify(sources)), defaultFetchOpts).then(function (res) {
+ return res.json();
+ });
+ },
+ getPubmedPublications: function getPubmedPublications(pubmedIds) {
+ var opts = {
+ db: 'pubmed',
+ retmode: 'json',
+ id: pubmedIds.toString()
+ };
+ var url = "".concat(NCBI_EUTILS_BASE_URL, "/esummary.fcgi?").concat(qs.stringify(opts));
+ return fetch(url).then(function (res) {
+ return res.json();
+ }).then(function (res) {
+ var result = res.result;
+ if (result == null) {
+ return [];
+ }
+ var uids = result.uids;
+ return uids.map(function (uid) {
+ var record = result[uid];
+ var title = record.title,
+ authors = record.authors,
+ sortfirstauthor = record.sortfirstauthor,
+ pubdate = record.pubdate,
+ source = record.source,
+ articleids = record.articleids;
+ var doi = _.find(articleids, {
+ idtype: 'doi'
+ });
+ var pubmed = _.find(articleids, {
+ idtype: 'pubmed'
+ });
+ var pmc = _.find(articleids, {
+ idtype: 'pmc'
+ });
+ return {
+ id: uid,
+ title: title,
+ authors: authors,
+ firstAuthor: sortfirstauthor,
+ date: pubdate,
+ source: source,
+ doi: _.get(doi, 'value', null),
+ pubmed: _.get(pubmed, 'value', null),
+ pmc: pmc ? pmc.value : null
+ };
+ });
+ });
+ },
+ getGoInformation: function getGoInformation(goID) {
+ return fetch("https://www.ebi.ac.uk/QuickGO/services/ontology/go/search?query=GO%3A".concat(goID, "&limit=1&page=1")).then(function (res) {
+ return res.json();
+ });
+ },
+ getReactomeInformation: function getReactomeInformation(reactomeID) {
+ return fetch("https://reactome.org/ContentService/data/query/".concat(reactomeID)).then(function (res) {
+ return res.json();
+ });
+ },
+ downloadFileFromPathwayCommons: function downloadFileFromPathwayCommons(uri, format) {
+ return this.getPCURL().then(function (url) {
+ return fetch(url + 'pc2/get?' + qs.stringify({
+ uri: uri,
+ format: format
+ }), defaultFetchOpts);
+ });
+ },
+ search: function search(query) {
+ var queryClone = _.assign({}, query);
+ if (/^((uniprot|hgnc|hgnc.symbol):\w+|ncbi:[0-9]+)$/i.test(queryClone.q)) {
+ queryClone.q = queryClone.q.replace(/^(uniprot|ncbi|hgnc|hgnc.symbol):/i, "");
+ }
+ return fetch("/api/search", {
+ method: 'POST',
+ headers: {
+ 'Accept': 'application/json',
+ 'Content-Type': 'application/json'
+ },
+ body: JSON.stringify(queryClone)
+ }).then(function (res) {
+ return res.json();
+ });
+ },
+ searchGenes: function searchGenes(query) {
+ return fetch('/api/search/genes', {
+ method: 'POST',
+ headers: {
+ 'Accept': 'application/json',
+ 'Content-Type': 'application/json'
+ },
+ body: JSON.stringify({
+ query: query
+ })
+ }).then(function (res) {
+ return res.json();
+ });
+ },
+ enrichmentAPI: function enrichmentAPI(query, type) {
+ return fetch("/api/enrichment/".concat(type), {
+ method: 'POST',
+ headers: {
+ 'Accept': 'application/json',
+ 'Content-Type': 'application/json'
+ },
+ body: JSON.stringify(query)
+ }).then(function (res) {
+ return res.json();
+ });
+ }
+};
+module.exports = ServerAPI;
+
+/***/ }),
+
+/***/ 467:
+/***/ (function(module, exports, __webpack_require__) {
+
+function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
+function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
+function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
+function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
+function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
+function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
+function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
+function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
+function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
+function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
+function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
+function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
+function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
+function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
+var React = __webpack_require__(1);
+var h = __webpack_require__(2);
+var saveAs = __webpack_require__(91).saveAs;
+var _ = __webpack_require__(6);
+var Loader = __webpack_require__(38);
+var _require = __webpack_require__(16),
+ ServerAPI = _require.ServerAPI;
+var pcDownloadTypes = __webpack_require__(183);
+var FileDownloadMenu = /*#__PURE__*/function (_React$Component) {
+ function FileDownloadMenu(props) {
+ var _this;
+ _classCallCheck(this, FileDownloadMenu);
+ _this = _callSuper(this, FileDownloadMenu, [props]);
+ _this.state = {
+ downloadTypes: pcDownloadTypes,
+ loading: false
+ };
+ return _this;
+ }
+ _inherits(FileDownloadMenu, _React$Component);
+ return _createClass(FileDownloadMenu, [{
+ key: "downloadFromDisplayName",
+ value: function downloadFromDisplayName(displayName) {
+ var _this2 = this;
+ var _this$props = this.props,
+ cySrv = _this$props.cySrv,
+ fileName = _this$props.fileName;
+ var downloadTypes = this.state.downloadTypes;
+ var option = _.find(downloadTypes, ['displayName', displayName]);
+ var pc2Name = option.pc2Name,
+ ext = option.ext,
+ type = option.type;
+ if (type === 'png') {
+ // The setTimeout triggers a rerender so that the loader appears on screen
+ this.setState({
+ loading: true
+ }, function () {
+ setTimeout(function () {
+ saveAs(cySrv.get().png({
+ output: 'blob',
+ scale: 2,
+ bg: 'white',
+ full: true
+ }), "".concat(fileName, ".").concat(ext));
+ _this2.setState({
+ loading: false
+ });
+ }, 1);
+ });
+ } else {
+ this.downloadFileFromPC(pc2Name, ext);
+ }
+ }
+ }, {
+ key: "downloadFileFromPC",
+ value: function downloadFileFromPC(format, fileExt) {
+ var _this3 = this;
+ var FILENAME_CUTOFF = 20;
+ var _this$props2 = this.props,
+ fileName = _this$props2.fileName,
+ uri = _this$props2.uri;
+ fileName = fileName.substr(0, fileName.length < FILENAME_CUTOFF ? fileName.length : FILENAME_CUTOFF).replace(/ /g, '_');
+ var downloadFetch = ServerAPI.downloadFileFromPathwayCommons(uri, format).then(function (res) {
+ return res.text();
+ });
+ this.setState({
+ loading: true
+ }, function () {
+ downloadFetch.then(function (content) {
+ content = _typeof(content) === 'object' ? JSON.stringify(content) : content;
+ var fileContent = new File([content], "".concat(fileName, ".").concat(fileExt), {
+ type: 'text/plain;charset=utf-8'
+ });
+ saveAs(fileContent);
+ _this3.setState({
+ loading: false
+ });
+ });
+ });
+ }
+ }, {
+ key: "render",
+ value: function render() {
+ var _this4 = this;
+ var menuContents = this.state.downloadTypes.map(function (dt) {
+ var dlOption = h('div.download-option', {
+ onClick: function onClick() {
+ return _this4.downloadFromDisplayName(dt.displayName);
+ }
+ }, [h('div.download-option-header', [h('h3', dt.displayName)]), h('div.download-option-description', dt.description)]);
+ return dlOption;
+ });
+ return h('div.file-download-menu', [h('h2', 'Network Downloads'), h('div.file-download-content', [].concat(_toConsumableArray(menuContents), [h(Loader, {
+ loaded: !this.state.loading
+ })]))]);
+ }
+ }]);
+}(React.Component);
+module.exports = FileDownloadMenu;
+
+/***/ }),
+
+/***/ 470:
+/***/ (function(module, exports, __webpack_require__) {
+
+function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
+function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
+function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
+function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
+function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
+function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
+function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
+function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
+function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
+var React = __webpack_require__(1);
+var h = __webpack_require__(2);
+var NetworkInfoMenu = /*#__PURE__*/function (_React$Component) {
+ function NetworkInfoMenu() {
+ _classCallCheck(this, NetworkInfoMenu);
+ return _callSuper(this, NetworkInfoMenu, arguments);
+ }
+ _inherits(NetworkInfoMenu, _React$Component);
+ return _createClass(NetworkInfoMenu, [{
+ key: "render",
+ value: function render() {
+ var infoList = this.props.infoList;
+ var noInfoMessage = h('span', [h('p', 'No additional information was found for this network!'), h('p', 'Additional information about the network is normally found here, but we couldn\'t find any for this one.')]);
+ var comments = infoList.map(function (comment) {
+ return h('div', [h('p', comment.replace(/
/g, ' '))]);
+ });
+ var additionalInfo = comments.length ? [h('div', [h('h2', 'Additional Information')].concat(comments))] : [noInfoMessage];
+ return h('div', [h('div', additionalInfo)]);
+ }
+ }]);
+}(React.Component);
+module.exports = NetworkInfoMenu;
+
+/***/ }),
+
+/***/ 471:
+/***/ (function(module, exports, __webpack_require__) {
+
+function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
+function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
+function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
+function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
+function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
+function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
+function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
+function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
+function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
+function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
+function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
+function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
+function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
+function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
+var React = __webpack_require__(1);
+var h = __webpack_require__(2);
+var _ = __webpack_require__(6);
+var classNames = __webpack_require__(14);
+var _require = __webpack_require__(472),
+ Tab = _require.Tab,
+ Tabs = _require.Tabs,
+ TabList = _require.TabList,
+ TabPanel = _require.TabPanel;
+var _require2 = __webpack_require__(187),
+ geneIntersection = _require2.geneIntersection;
+var _require3 = __webpack_require__(131),
+ searchNodes = _require3.searchNodes;
+var ExpressionColourLegend = /*#__PURE__*/function (_React$Component) {
+ function ExpressionColourLegend() {
+ _classCallCheck(this, ExpressionColourLegend);
+ return _callSuper(this, ExpressionColourLegend, arguments);
+ }
+ _inherits(ExpressionColourLegend, _React$Component);
+ return _createClass(ExpressionColourLegend, [{
+ key: "render",
+ value: function render() {
+ var _this$props = this.props,
+ min = _this$props.min,
+ max = _this$props.max;
+ return h('div.paint-legend', [h('p', "low ".concat(min)), h('p', "high ".concat(max))]);
+ }
+ }]);
+}(React.Component);
+var ExpressionTableView = /*#__PURE__*/function (_React$Component2) {
+ function ExpressionTableView(props) {
+ var _this;
+ _classCallCheck(this, ExpressionTableView);
+ _this = _callSuper(this, ExpressionTableView, [props]);
+ _this.state = {
+ sortBy: 'geneName',
+ sortType: 'asc',
+ nodeSearchValue: ''
+ };
+ return _this;
+ }
+ _inherits(ExpressionTableView, _React$Component2);
+ return _createClass(ExpressionTableView, [{
+ key: "handleSortChange",
+ value: function handleSortChange(newSort) {
+ var _this$state = this.state,
+ sortBy = _this$state.sortBy,
+ sortType = _this$state.sortType;
+ if (newSort == sortBy) {
+ this.setState({
+ sortType: sortType === 'asc' ? 'desc' : 'asc'
+ });
+ } else {
+ this.setState({
+ sortBy: newSort
+ });
+ }
+ }
+ }, {
+ key: "handleSearchChange",
+ value: function handleSearchChange(newVal) {
+ var cy = this.props.cySrv.get();
+ this.setState({
+ nodeSearchValue: newVal
+ }, function () {
+ return searchNodes(cy, newVal);
+ });
+ }
+ }, {
+ key: "generateFoldChangeList",
+ value: function generateFoldChangeList() {
+ var _this$props2 = this.props,
+ expressionTable = _this$props2.expressionTable,
+ paintMenuCtrls = _this$props2.paintMenuCtrls;
+ var exprClass = paintMenuCtrls.exprClass,
+ exprFn = paintMenuCtrls.exprFn;
+ var _this$state2 = this.state,
+ sortBy = _this$state2.sortBy,
+ sortType = _this$state2.sortType,
+ nodeSearchValue = _this$state2.nodeSearchValue;
+ var foldChangeExpressions = expressionTable.expressions().map(function (e) {
+ return {
+ geneName: e.geneName,
+ foldChange: e.foldChange(exprClass, exprFn, 'N/A')
+ };
+ });
+ var sortedFoldChanges = _.orderBy(foldChangeExpressions, [sortBy], [sortType]);
+ var filteredFoldChanges = sortedFoldChanges.filter(function (fc) {
+ var upperFc = fc.geneName.toUpperCase();
+ var upperFilter = nodeSearchValue.toUpperCase();
+ return upperFc.includes(upperFilter) || upperFilter.includes(upperFc);
+ });
+ return filteredFoldChanges;
+ }
+ }, {
+ key: "render",
+ value: function render() {
+ var _this2 = this;
+ var _this$state3 = this.state,
+ sortBy = _this$state3.sortBy,
+ sortType = _this$state3.sortType;
+ var foldChangeExpressions = this.generateFoldChangeList();
+ return h('table.expression-table-view', [h('thead', [h('tr.expression-table-header', [h('th.expression-table-header-column', {
+ onClick: function onClick() {
+ return _this2.handleSortChange('geneName');
+ }
+ }, ['Gene', sortBy === 'geneName' ? h('i.material-icons', sortType === 'asc' ? 'keyboard_arrow_up' : 'keyboard_arrow_down') : null]), h('th.expression-table-header-column', {
+ onClick: function onClick() {
+ return _this2.handleSortChange('foldChange');
+ }
+ }, ['Expression Ratio (Log2)', sortBy === 'foldChange' ? h('i.material-icons', sortType === 'asc' ? 'keyboard_arrow_up' : 'keyboard_arrow_down') : null])])]), h('tbody.expression-list', [h('tr.expression-entry', [h('td.expression-filter', [h('input', {
+ placeholder: 'Filter by gene',
+ onChange: function onChange(e) {
+ return _this2.handleSearchChange(e.target.value);
+ }
+ })])]), foldChangeExpressions.map(function (e) {
+ return h('tr.expression-entry', {
+ key: e.geneName
+ }, [h('td.expression-gene', e.geneName), h('td.expression-fold-change', e.foldChange)]);
+ })])]);
+ }
+ }]);
+}(React.Component);
+var PathwayResultsListView = /*#__PURE__*/function (_React$Component3) {
+ function PathwayResultsListView() {
+ _classCallCheck(this, PathwayResultsListView);
+ return _callSuper(this, PathwayResultsListView, arguments);
+ }
+ _inherits(PathwayResultsListView, _React$Component3);
+ return _createClass(PathwayResultsListView, [{
+ key: "render",
+ value: function render() {
+ var _this$props3 = this.props,
+ pathways = _this$props3.pathways,
+ curPathway = _this$props3.curPathway,
+ expressionTable = _this$props3.expressionTable,
+ controller = _this$props3.controller;
+ var pathwayResults = pathways.map(function (pathway) {
+ return h('div.paint-search-result', {
+ className: classNames({
+ 'paint-search-result-selected': curPathway.uri() === pathway.uri()
+ }),
+ onClick: function onClick() {
+ return controller.loadPathway(pathway);
+ }
+ }, [h('h3', pathway.name()), h('p', pathway.datasource()), h('p', "Genes matched: ".concat(geneIntersection(pathway, expressionTable).length))]);
+ });
+ return h('div.pathways-list', _toConsumableArray(pathwayResults));
+ }
+ }]);
+}(React.Component);
+var PaintMenu = /*#__PURE__*/function (_React$Component4) {
+ function PaintMenu() {
+ _classCallCheck(this, PaintMenu);
+ return _callSuper(this, PaintMenu, arguments);
+ }
+ _inherits(PaintMenu, _React$Component4);
+ return _createClass(PaintMenu, [{
+ key: "analysisFns",
+ value: function analysisFns() {
+ return {
+ 'mean': _.mean,
+ 'max': _.max,
+ 'min': _.min
+ };
+ }
+ }, {
+ key: "render",
+ value: function render() {
+ var _this3 = this;
+ var _this$props4 = this.props,
+ cySrv = _this$props4.cySrv,
+ controller = _this$props4.controller,
+ expressionTable = _this$props4.expressionTable,
+ paintMenuCtrls = _this$props4.paintMenuCtrls,
+ curPathway = _this$props4.curPathway,
+ pathways = _this$props4.pathways,
+ selectedIndex = _this$props4.selectedIndex;
+ var exprClass = paintMenuCtrls.exprClass,
+ exprFn = paintMenuCtrls.exprFn,
+ exprFnName = paintMenuCtrls.exprFnName;
+ var _expressionTable$comp = expressionTable.computeFoldChangeRange(exprClass, exprFn),
+ min = _expressionTable$comp.min,
+ max = _expressionTable$comp.max;
+ var functionSelector = h('div', ['Class: ', h('select.paint-select', {
+ value: exprFnName,
+ onChange: function onChange(e) {
+ return controller.handlePaintCtrlChange({
+ exprFnName: e.target.value,
+ exprFn: _this3.analysisFns()[e.target.value]
+ });
+ }
+ }, Object.entries(this.analysisFns()).map(function (entry) {
+ return h('option', {
+ value: entry[0]
+ }, entry[0]);
+ }))]);
+ var classSelector = h('div', ['Compare: ', h('select.paint-select', {
+ value: exprClass,
+ onChange: function onChange(e) {
+ return controller.handlePaintCtrlChange({
+ exprClass: e.target.value
+ });
+ }
+ }, expressionTable.classes.map(function (cls) {
+ return h('option', {
+ value: cls
+ }, cls);
+ })), " vs ".concat(_.difference(expressionTable.classes, [exprClass]))]);
+ return h('div.paint-menu', [h(Tabs, {
+ selectedIndex: selectedIndex,
+ onSelect: function onSelect(index) {
+ return controller.handlePaintMenuTabChange(index);
+ }
+ }, [h(TabList, [h(Tab, {
+ className: 'paint-drawer-tab',
+ selectedClassName: 'paint-drawer-tab-selected'
+ }, 'Expression Data'), h(Tab, {
+ className: 'paint-drawer-tab',
+ selectedClassName: 'paint-drawer-tab-selected'
+ }, 'Select Pathway')]), h(TabPanel, [h(ExpressionColourLegend, {
+ min: min,
+ max: max
+ }), h('div.paint-menu-controls', [functionSelector, classSelector]), h(ExpressionTableView, {
+ cySrv: cySrv,
+ expressionTable: expressionTable,
+ controller: controller,
+ paintMenuCtrls: paintMenuCtrls
+ })]), h(TabPanel, [h(PathwayResultsListView, {
+ controller: controller,
+ curPathway: curPathway,
+ expressionTable: expressionTable,
+ pathways: pathways
+ })])])]);
+ }
+ }]);
+}(React.Component);
+module.exports = PaintMenu;
+
+/***/ }),
+
+/***/ 478:
+/***/ (function(module, exports, __webpack_require__) {
+
+var cytoscape = __webpack_require__(64);
+var sbgnStyleSheet = __webpack_require__(189);
+var _require = __webpack_require__(188),
+ MATCHED_SEARCH_CLASS = _require.MATCHED_SEARCH_CLASS;
+module.exports = sbgnStyleSheet(cytoscape).selector('node').css({
+ 'background-opacity': '0.4'
+}).selector('node:active').css({
+ 'background-opacity': '0.7'
+}).selector('node[class!="compartment"]').css({
+ 'font-size': 20,
+ 'color': 'black',
+ 'text-outline-color': 'white',
+ 'text-outline-width': 2,
+ 'text-outline-opacity': 0.5,
+ 'text-wrap': 'wrap',
+ 'text-max-width': 175,
+ 'label': function label(node) {
+ var label = node.data('label').split('(').join('').split(')').join('').split(':').join(' ');
+ return label;
+ }
+}).selector('node[class="complex"]').css({
+ 'width': 45,
+ 'height': 45,
+ 'label': function label(node) {
+ return node.isParent() ? '' : node.data('label');
+ }
+}).selector('.compoundcollapse-collapsed-node').css({
+ 'font-size': 20,
+ 'text-max-width': 175
+}).selector('edge').css({
+ 'opacity': 0.3
+}).selector('node[class="and"],node[class="or"],node[class="not"]').css({
+ 'label': function label(node) {
+ return node.data('class');
+ }
+}).selector('.hidden').css({
+ 'display': 'none'
+}).selector(".".concat(MATCHED_SEARCH_CLASS)).css({
+ 'border-width': 8,
+ 'border-color': 'red'
+});
+
+/***/ }),
+
+/***/ 479:
+/***/ (function(module, exports, __webpack_require__) {
+
+var _ = __webpack_require__(6);
+var h = __webpack_require__(2);
+var PathwayNodeMetadataView = __webpack_require__(480);
+var _require = __webpack_require__(132),
+ PATHWAYS_LAYOUT_OPTS = _require.PATHWAYS_LAYOUT_OPTS;
+var CytoscapeTooltip = __webpack_require__(93);
+var EXPAND_COLLAPSE_OPTS = {
+ layoutBy: _.assign({}, PATHWAYS_LAYOUT_OPTS, {
+ fit: false
+ }),
+ fisheye: true,
+ animate: true,
+ undoable: false,
+ cueEnabled: false
+};
+var SHOW_TOOLTIPS_EVENT = 'showtooltip';
+var bindCyEvents = function bindCyEvents(cy) {
+ var hideTooltips = function hideTooltips() {
+ cy.elements().forEach(function (ele) {
+ var tooltip = ele.scratch('_tooltip');
+ if (tooltip) {
+ tooltip.hide();
+ }
+ });
+ };
+ cy.expandCollapse(EXPAND_COLLAPSE_OPTS);
+ cy.on(SHOW_TOOLTIPS_EVENT, 'node[class != "compartment"]', function (evt) {
+ var node = evt.target;
+ var tooltip = new CytoscapeTooltip(node.popperRef(), {
+ html: h(PathwayNodeMetadataView, {
+ node: node
+ })
+ });
+ node.scratch('_tooltip', tooltip);
+ tooltip.show();
+ });
+ cy.on('tap', function (evt) {
+ var tgt = evt.target;
+
+ // if we didn't click a node, close all tooltips
+ if (evt.target === cy || evt.target.isEdge()) {
+ hideTooltips();
+ return;
+ }
+
+ // we clicked a node that has a tooltip open -> close it
+ if (tgt.scratch('_tooltip-opened')) {
+ hideTooltips();
+ } else {
+ // open the tooltip for the clicked node
+ hideTooltips();
+ tgt.emit(SHOW_TOOLTIPS_EVENT);
+ }
+ });
+
+ //Hide Tooltips on various graph movements
+ cy.on('drag', function () {
+ return hideTooltips();
+ });
+ cy.on('pan', function () {
+ return hideTooltips();
+ });
+ cy.on('zoom', function () {
+ return hideTooltips();
+ });
+ cy.on('layoutstart', function () {
+ return hideTooltips();
+ });
+ var nodeHoverMouseOver = _.debounce(function (evt) {
+ var node = evt.target;
+ var elesToHighlight = cy.collection();
+
+ //Create a list of the hovered node & its neighbourhood
+ node.neighborhood().nodes().union(node).forEach(function (node) {
+ elesToHighlight.merge(node.ancestors());
+ elesToHighlight.merge(node.descendants());
+ elesToHighlight.merge(node);
+ });
+ elesToHighlight.merge(node.neighborhood().edges());
+
+ //Add highlighted class to node & its neighbourhood, unhighlighted to everything else
+ cy.elements().addClass('unhighlighted');
+ elesToHighlight.forEach(function (ele) {
+ ele.removeClass('unhighlighted');
+ ele.addClass('highlighted');
+ });
+ }, 750);
+
+ //call style-applying and style-removing functions on 'mouseover' and 'mouseout' for non-compartment nodes
+ cy.on('mouseover', 'node[class!="compartment"]', nodeHoverMouseOver);
+ cy.on('mouseout', 'node[class!="compartment"]', function () {
+ nodeHoverMouseOver.cancel();
+ cy.elements().removeClass('highlighted unhighlighted');
+ });
+};
+module.exports = bindCyEvents;
+
+/***/ }),
+
+/***/ 480:
+/***/ (function(module, exports, __webpack_require__) {
+
+function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
+function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
+function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
+function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
+function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
+function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
+function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
+function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
+function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
+var React = __webpack_require__(1);
+var h = __webpack_require__(2);
+var _ = __webpack_require__(6);
+var _require = __webpack_require__(16),
+ ServerAPI = _require.ServerAPI;
+var _require2 = __webpack_require__(24),
+ NS_CHEBI = _require2.NS_CHEBI,
+ NS_ENSEMBL = _require2.NS_ENSEMBL,
+ NS_HGNC = _require2.NS_HGNC,
+ NS_HGNC_SYMBOL = _require2.NS_HGNC_SYMBOL,
+ NS_NCBI_GENE = _require2.NS_NCBI_GENE,
+ NS_PUBMED = _require2.NS_PUBMED,
+ NS_REACTOME = _require2.NS_REACTOME,
+ NS_UNIPROT = _require2.NS_UNIPROT;
+var DEFAULT_NUM_NAMES = 3;
+var SUPPORTED_COLLECTIONS = new Map([[NS_CHEBI, 'ChEBI'], [NS_ENSEMBL, 'Ensembl'], [NS_HGNC, 'HGNC'], [NS_HGNC_SYMBOL, 'HGNC'], [NS_NCBI_GENE, 'NCBI Gene'], [NS_REACTOME, 'Reactome'], [NS_UNIPROT, 'UniProt']]);
+var getUriIds = function getUriIds(uris) {
+ return uris.map(function (uri) {
+ return _.last(uri.split('/'));
+ });
+};
+
+// A component that displays a pathway node's metadata
+// props:
+// - cytoscape node)
+var PathwayNodeMetadataView = /*#__PURE__*/function (_React$Component) {
+ function PathwayNodeMetadataView(props) {
+ var _this;
+ _classCallCheck(this, PathwayNodeMetadataView);
+ _this = _callSuper(this, PathwayNodeMetadataView, [props]);
+ _this.state = {
+ publications: []
+ };
+ return _this;
+ }
+ _inherits(PathwayNodeMetadataView, _React$Component);
+ return _createClass(PathwayNodeMetadataView, [{
+ key: "componentDidMount",
+ value: function componentDidMount() {
+ var _this2 = this;
+ var node = this.props.node;
+ var metadata = node.data('metadata');
+ var pubmedUris = _.get(metadata, "xrefLinks.".concat(NS_PUBMED), null);
+ if (pubmedUris != null) {
+ var pubmedIds = getUriIds(pubmedUris);
+ ServerAPI.getPubmedPublications(pubmedIds).then(function (publications) {
+ _this2.setState({
+ publications: publications
+ });
+ });
+ }
+ }
+ }, {
+ key: "render",
+ value: function render() {
+ var node = this.props.node;
+ var publications = this.state.publications;
+ var md = node.data('metadata');
+ var synonyms = md.synonyms,
+ type = md.type,
+ standardName = md.standardName,
+ displayName = md.displayName,
+ xrefLinks = md.xrefLinks;
+ var searchLinkQuery = node.data('class') === 'process' ? displayName : node.data('label');
+ var label = node.data('label');
+ if (_.isEmpty(md)) {
+ return h('div.cy-tooltip', [h('div.cy-tooltip-content', [h('div.cy-tooltip-header', [h('h2.cy-tooltip-title', node.data('class'))])])]);
+ }
+ var dbLinks = _.keys(xrefLinks).map(function (collection) {
+ var link = null;
+ var displayName = SUPPORTED_COLLECTIONS.get(collection);
+ var uri = _.get(xrefLinks, "".concat(collection, "[0]"));
+ if (displayName && uri) link = h('a.plain-link', {
+ href: uri,
+ target: '_blank'
+ }, displayName);
+ return link;
+ });
+ var publicationEles = publications.map(function (publication) {
+ var id = publication.id,
+ title = publication.title,
+ firstAuthor = publication.firstAuthor,
+ date = publication.date,
+ source = publication.source;
+ return h('div.cy-overflow-content', [h('a.plain-link', {
+ href: 'https://bioregistry.io/pubmed:' + id,
+ target: '_blank'
+ }, title), h('div', firstAuthor + ' et al. | ' + source + ' - ' + new Date(date).getFullYear().toString())]);
+ });
+ var showType = type !== '';
+ var showStdName = standardName !== '';
+ var showDispName = displayName !== '' && displayName !== label;
+ var showSynonyms = synonyms.length > 0;
+ var showPubs = publicationEles.length > 0;
+ var showBody = showStdName || showDispName || showSynonyms || showPubs;
+ var showLinks = dbLinks.length > 0;
+ var showPcSearchLink = label || displayName;
+ return h('div.cy-tooltip', [h('div.cy-tooltip-content', [h('div.cy-tooltip-header', [h('h2.cy-tooltip-title', "".concat(label || displayName || '')), showType ? h('div.cy-tooltip-type-chip', type) : null]), showBody ? h('div.cy-tooltip-body', [showStdName ? h('div.cy-tooltip-section', [h('div.cy-tooltip-field-name', 'Name'), h('div.cy-tooltip-field-value', standardName)]) : null, showDispName ? h('div.cy-tooltip-section', [h('div.cy-tooltip-field-name', 'Display Name'), h('div.cy-tooltip-field-value', displayName)]) : null, showSynonyms ? h('div.cy-tooltip-section', [h('div.cy-tooltip-field-name', ['Synonyms']), h('div.cy-tooltip-field-value', synonyms.slice(0, DEFAULT_NUM_NAMES).join(', '))]) : null, showPubs ? h('div.cy-tooltip-section', [h('div.cy-tooltip-field-name', ['Publications']), h('div', publicationEles)]) : null]) : null, h('div.cy-tooltip-footer', [showLinks ? h('div.cy-tooltip-section', [h('div.cy-tooltip-field-name', ['Links']), h('div.cy-tooltip-links', dbLinks)]) : null]), showPcSearchLink ? h('div.cy-tooltip-call-to-action', [h('a', {
+ target: '_blank',
+ href: '/search?q=' + searchLinkQuery
+ }, [h('button.call-to-action', 'Find Related Pathways')])]) : null])]);
+ }
+ }]);
+}(React.Component);
+module.exports = PathwayNodeMetadataView;
+
+/***/ }),
+
+/***/ 481:
+/***/ (function(module, exports, __webpack_require__) {
+
+function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
+function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
+function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
+function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
+function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
+function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
+function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
+function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
+function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
+var React = __webpack_require__(1);
+var h = __webpack_require__(2);
+var IconButton = __webpack_require__(71);
+var _require = __webpack_require__(131),
+ fit = _require.fit,
+ expandCollapse = _require.expandCollapse,
+ layout = _require.layout;
+var PathwaysToolbar = /*#__PURE__*/function (_React$Component) {
+ function PathwaysToolbar() {
+ _classCallCheck(this, PathwaysToolbar);
+ return _callSuper(this, PathwaysToolbar, arguments);
+ }
+ _inherits(PathwaysToolbar, _React$Component);
+ return _createClass(PathwaysToolbar, [{
+ key: "render",
+ value: function render() {
+ var _this$props = this.props,
+ cySrv = _this$props.cySrv,
+ controller = _this$props.controller,
+ activeMenu = _this$props.activeMenu;
+ var cy = cySrv.get();
+ return h('div.app-toolbar', [h(IconButton, {
+ description: 'Extra Information',
+ onClick: function onClick() {
+ return controller.changeMenu('infoMenu');
+ },
+ isActive: activeMenu === 'infoMenu',
+ icon: 'info'
+ }), h(IconButton, {
+ description: 'Downloads',
+ onClick: function onClick() {
+ return controller.changeMenu('downloadMenu');
+ },
+ isActive: activeMenu === 'downloadMenu',
+ icon: 'file_download'
+ }), h(IconButton, {
+ description: 'Downloads',
+ onClick: function onClick() {
+ return controller.changeMenu('paintMenu');
+ },
+ isActive: activeMenu === 'paintMenu',
+ icon: 'format_paint'
+ }), h(IconButton, {
+ description: 'Expand/Collapse all complex nodes',
+ onClick: function onClick() {
+ return expandCollapse(cy);
+ },
+ isActive: false,
+ icon: 'select_all'
+ }), h(IconButton, {
+ description: 'Fit pathway to screen',
+ onClick: function onClick() {
+ return fit(cy);
+ },
+ isActive: false,
+ icon: 'fullscreen'
+ }), h(IconButton, {
+ description: 'Reset pathway arrangement',
+ onClick: function onClick() {
+ return layout(cy);
+ },
+ isActive: false,
+ icon: 'replay'
+ })]);
+ }
+ }]);
+}(React.Component);
+module.exports = PathwaysToolbar;
+
+/***/ }),
+
+/***/ 484:
+/***/ (function(module, exports, __webpack_require__) {
+
+function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
+function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
+function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
+function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
+function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
+function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
+function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
+function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
+function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
+var React = __webpack_require__(1);
+var h = __webpack_require__(2);
+var classNames = __webpack_require__(14);
+var Dropdown = /*#__PURE__*/function (_React$Component) {
+ function Dropdown(props) {
+ var _this;
+ _classCallCheck(this, Dropdown);
+ _this = _callSuper(this, Dropdown, [props]);
+ _this.state = {
+ open: false,
+ title: props.title
+ };
+ _this.handleClose = function (e) {
+ return _this.close(e);
+ };
+ return _this;
+ }
+ _inherits(Dropdown, _React$Component);
+ return _createClass(Dropdown, [{
+ key: "open",
+ value: function open(e) {
+ var _this2 = this;
+ e.preventDefault();
+ this.setState({
+ open: true
+ }, function () {
+ document.addEventListener('click', _this2.handleClose);
+ });
+ }
+ }, {
+ key: "close",
+ value: function close(e) {
+ var _this3 = this;
+ if (!this.el.contains(e.target)) {
+ this.setState({
+ open: false
+ }, function () {
+ document.removeEventListener('click', _this3.handleClose);
+ });
+ }
+ }
+ }, {
+ key: "handleChange",
+ value: function handleChange(newVal) {
+ var _this4 = this;
+ this.props.onChange(newVal);
+ this.setState({
+ open: false,
+ title: newVal.label
+ }, function () {
+ document.removeEventListener('click', _this4.handleClose);
+ });
+ }
+ }, {
+ key: "render",
+ value: function render() {
+ var _this5 = this;
+ var listOptions = this.props.listOptions;
+ var _this$state = this.state,
+ open = _this$state.open,
+ title = _this$state.title;
+ return h("div.dropdown", {
+ ref: function ref(el) {
+ return _this5.el = el;
+ },
+ className: classNames(this.props.className, {
+ 'dropdown-active': open
+ })
+ }, [h('div.dropdown-header', {
+ onClick: function onClick(e) {
+ return _this5.open(e);
+ }
+ }, [h('div.dropdown-title', title), h('i.material-icons', open ? 'keyboard_arrow_up' : 'keyboard_arrow_down')]), open ? h('div.dropdown-options', listOptions.map(function (dOpt) {
+ return h('div.dropdown-option', [h('div', {
+ key: dOpt.value,
+ onClick: function onClick() {
+ return _this5.handleChange(dOpt);
+ }
+ }, dOpt.label)]);
+ })) : null]);
+ }
+ }]);
+}(React.Component);
+module.exports = Dropdown;
+
+/***/ }),
+
+/***/ 485:
+/***/ (function(module, exports, __webpack_require__) {
+
+function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
+function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
+function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
+function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
+function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
+function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
+function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
+function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
+function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
+var React = __webpack_require__(1);
+var h = __webpack_require__(2);
+var Card = /*#__PURE__*/function (_React$Component) {
+ function Card() {
+ _classCallCheck(this, Card);
+ return _callSuper(this, Card, arguments);
+ }
+ _inherits(Card, _React$Component);
+ return _createClass(Card, [{
+ key: "render",
+ value: function render() {
+ return h('div.card', [this.props.children]);
+ }
+ }]);
+}(React.Component);
+var CardGrid = /*#__PURE__*/function (_React$Component2) {
+ function CardGrid() {
+ _classCallCheck(this, CardGrid);
+ return _callSuper(this, CardGrid, arguments);
+ }
+ _inherits(CardGrid, _React$Component2);
+ return _createClass(CardGrid, [{
+ key: "render",
+ value: function render() {
+ return h('div.card-grid', this.props.children.map(function (item) {
+ return h(Card, [item]);
+ }));
+ }
+ }]);
+}(React.Component);
+module.exports = {
+ Card: Card,
+ CardGrid: CardGrid
+};
+
+/***/ }),
+
+/***/ 486:
+/***/ (function(module, exports, __webpack_require__) {
+
+function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
+function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
+function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
+function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
+function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
+function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
+function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
+function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
+var React = __webpack_require__(1);
+var h = __webpack_require__(2);
+var classNames = __webpack_require__(14);
+var AppCard = /*#__PURE__*/function (_React$Component) {
+ function AppCard(props) {
+ _classCallCheck(this, AppCard);
+ return _callSuper(this, AppCard, [props]);
+ }
+ _inherits(AppCard, _React$Component);
+ return _createClass(AppCard, [{
+ key: "render",
+ value: function render() {
+ var _this$props = this.props,
+ enabled = _this$props.enabled,
+ hint = _this$props.hint,
+ url = _this$props.url,
+ image = _this$props.image,
+ imageClass = _this$props.imageClass,
+ title = _this$props.title,
+ body = _this$props.body,
+ linkifyContent = _this$props.linkifyContent;
+ return h('.app-card', {
+ className: classNames({
+ 'app-card-disabled': !enabled
+ })
+ }, [h('a', {
+ href: url,
+ target: '_blank'
+ }, [h('div.app-card-image', {
+ className: classNames(_defineProperty(_defineProperty({}, imageClass, !!imageClass), 'background', !!imageClass))
+ }, [image])]), h('a.app-card-content-link', linkifyContent ? {
+ href: url,
+ target: '_blank'
+ } : {}, [h('div.app-card-content', [h('div.app-card-header', [h('h4.app-card-title', [title]), h('span.app-card-hint', [hint])]), h('div.app-card-body', [body])])])]);
+ }
+ }]);
+}(React.Component); // Specifies the default values for props:
+AppCard.defaultProps = {
+ enabled: true,
+ hint: null,
+ imageClass: null,
+ image: null
+};
+module.exports = {
+ AppCard: AppCard
+};
+
+/***/ }),
+
+/***/ 487:
+/***/ (function(module, exports, __webpack_require__) {
+
+function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
+function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
+function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
+function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
+function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
+function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
+function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
+function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
+function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
+var React = __webpack_require__(1);
+var h = __webpack_require__(2);
+var _require = __webpack_require__(60),
+ Link = _require.Link;
+var EmptyNetwork = /*#__PURE__*/function (_React$Component) {
+ function EmptyNetwork() {
+ _classCallCheck(this, EmptyNetwork);
+ return _callSuper(this, EmptyNetwork, arguments);
+ }
+ _inherits(EmptyNetwork, _React$Component);
+ return _createClass(EmptyNetwork, [{
+ key: "render",
+ value: function render() {
+ var _this$props = this.props,
+ msg = _this$props.msg,
+ showPcLink = _this$props.showPcLink;
+ var linkToPcSearch = showPcLink ? h('div', ['Return to', h(Link, {
+ className: 'plain-link',
+ to: {
+ pathname: '/'
+ }
+ }, ' Pathway Commons Search')]) : null;
+ return h('div.empty-network', [h('div.empty-network-header', [h('div.pc-logo'), h('h1.empty-network-message', msg)]), linkToPcSearch]);
+ }
+ }]);
+}(React.Component);
+module.exports = EmptyNetwork;
+
+/***/ }),
+
+/***/ 488:
+/***/ (function(module, exports, __webpack_require__) {
+
+function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
+function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
+function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
+function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
+function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
+function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
+function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
+function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
+function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
+var React = __webpack_require__(1);
+var h = __webpack_require__(2);
+var classNames = __webpack_require__(14);
+var IconButton = __webpack_require__(71);
+
+// a sidebar for a network view
+// props:
+// - controller: parent component that implements changeMenu
+// - activeMenu: a string representing which menu to open
+// - children: each menu should be a child for this sidebar
+// and contain a key that can be used to compare
+// against the current menu
+//
+
+// example usage:
+// class ParentComponent extends React.Component {
+// constructor(props){
+// this.state = {
+// activeMenu: 'menu1'
+// };
+// }
+// changeMenu(newMenu){
+// this.setState({ activeMenu: newMenu });
+// }
+// render(){
+// let { activeMenu } = this.state;
+// return h(Sidebar, { controller: this, activeMenu }, [
+// h(Menu1, { key: 'menu1' }),
+// h(Menu2, { key: 'menu2' })
+// ])
+// }
+// }
+var Sidebar = /*#__PURE__*/function (_React$Component) {
+ function Sidebar() {
+ _classCallCheck(this, Sidebar);
+ return _callSuper(this, Sidebar, arguments);
+ }
+ _inherits(Sidebar, _React$Component);
+ return _createClass(Sidebar, [{
+ key: "render",
+ value: function render() {
+ var _this$props = this.props,
+ controller = _this$props.controller,
+ activeMenu = _this$props.activeMenu,
+ children = _this$props.children;
+ var activeMenuContent = children.find(function (child) {
+ return child.key === activeMenu;
+ });
+ return h('div.sidebar-menu', {
+ className: classNames({
+ 'sidebar-menu-open': activeMenu != 'closeMenu'
+ })
+ }, [h('div.sidebar-close', [h(IconButton, {
+ description: 'Close the sidebar',
+ onClick: function onClick() {
+ return controller.changeMenu('closeMenu');
+ },
+ isActive: false,
+ icon: 'close'
+ })]), h('div.sidebar-content', [h('div.sidebar-text', [activeMenuContent])])]);
+ }
+ }]);
+}(React.Component);
+module.exports = Sidebar;
+
+/***/ }),
+
+/***/ 489:
+/***/ (function(module, exports, __webpack_require__) {
+
+function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
+function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
+function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
+function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
+function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
+function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
+function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
+function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
+function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
+var React = __webpack_require__(1);
+var h = __webpack_require__(2);
+var classNames = __webpack_require__(14);
+var CytoscapeNetwork = /*#__PURE__*/function (_React$Component) {
+ function CytoscapeNetwork() {
+ _classCallCheck(this, CytoscapeNetwork);
+ return _callSuper(this, CytoscapeNetwork, arguments);
+ }
+ _inherits(CytoscapeNetwork, _React$Component);
+ return _createClass(CytoscapeNetwork, [{
+ key: "componentDidMount",
+ value: function componentDidMount() {
+ var _this$props = this.props,
+ cySrv = _this$props.cySrv,
+ _this$props$onMount = _this$props.onMount,
+ onMount = _this$props$onMount === void 0 ? function () {} : _this$props$onMount;
+ cySrv.mount(this.network);
+ onMount();
+ }
+ }, {
+ key: "componentWillUnmount",
+ value: function componentWillUnmount() {
+ var cySrv = this.props.cySrv;
+ cySrv.destroy();
+ }
+ }, {
+ key: "render",
+ value: function render() {
+ var _this = this;
+ return h('div.network', {
+ className: classNames('network', this.props.className)
+ }, [h('div.network-cy#cy', {
+ ref: function ref(dom) {
+ return _this.network = dom;
+ }
+ })]);
+ }
+ }]);
+}(React.Component);
+module.exports = CytoscapeNetwork;
+
+/***/ }),
+
+/***/ 490:
+/***/ (function(module, exports) {
+
+module.exports = {"dataSetExpressionList":[{"dataSets":["TEP"],"numConditions":10,"columnNames":["MGH-BrCa-H-74_htsqct","MGH-BrCa-H-68_htsqct","MGH-BrCa-H-66_htsqct","MGH-BrCa-H-59_htsqct","MGH-BrCa-H-11_htsqct","HD-5_htsqct","HD-4_htsqct","HD-3-1_htsqct","HD-2-1_htsqct","HD-1_htsqct"],"expressionUniverse":6211,"expressions":[{"geneName":"TP53","values":[116.7492,74.6966,85.4111,283.3992,55.8744,632.8274,509.1714,545.0434,577.2644,291.2219]},{"geneName":"ZNF385A","values":[116.7492,74.6966,85.4111,283.3992,55.8744,506.2619,407.3371,436.0348,461.8115,232.9776]},{"geneName":"PCBP4","values":[350.2476,224.0899,256.2334,850.1974,167.6233,126.5655,101.8343,109.0087,115.4529,58.2444]},{"geneName":"CDKN1A","values":[116.7492,74.6966,85.4111,283.3992,55.8744,379.6964,305.5029,327.0261,346.3587,174.7332]}]}],"dataSetClassList":[{"dataSet":"TEP","classes":["BrCa","BrCa","BrCa","BrCa","BrCa","HD","HD","HD","HD","HD"],"phenotype1":"BrCa","phenotype2":"HD"}]}
+
+/***/ }),
+
+/***/ 491:
+/***/ (function(module, exports) {
+
+module.exports = [{"graph":{"edges":[{"data":{"bendPointPositions":[],"cardinality":0,"class":"consumption","id":"http://pathwaycommons.org/pc2/Rna_b0c799710a192ab1ed6794a6332e3b0f--TO--INP_http://identifiers.org/reactome/R-HSA-6803411_LEFTTORIGHT","portSource":"http://pathwaycommons.org/pc2/Rna_b0c799710a192ab1ed6794a6332e3b0f","portTarget":"http://identifiers.org/reactome/R-HSA-6803411_LEFTTORIGHT","source":"http://pathwaycommons.org/pc2/Rna_b0c799710a192ab1ed6794a6332e3b0f","target":"http://identifiers.org/reactome/R-HSA-6803411_LEFTTORIGHT"}},{"data":{"bendPointPositions":[],"cardinality":0,"class":"production","id":"OUT_http://identifiers.org/reactome/R-HSA-6803801_LEFTTORIGHT--TO--http://pathwaycommons.org/pc2/Complex_293d627d8f9f22b9e72ebcd86909d334","portSource":"http://identifiers.org/reactome/R-HSA-6803801_LEFTTORIGHT","portTarget":"http://pathwaycommons.org/pc2/Complex_293d627d8f9f22b9e72ebcd86909d334","source":"http://identifiers.org/reactome/R-HSA-6803801_LEFTTORIGHT","target":"http://pathwaycommons.org/pc2/Complex_293d627d8f9f22b9e72ebcd86909d334"}},{"data":{"bendPointPositions":[],"cardinality":0,"class":"consumption","id":"http://pathwaycommons.org/pc2/Rna_b0c799710a192ab1ed6794a6332e3b0f--TO--INP_http://identifiers.org/reactome/R-HSA-6803403_LEFTTORIGHT","portSource":"http://pathwaycommons.org/pc2/Rna_b0c799710a192ab1ed6794a6332e3b0f","portTarget":"http://identifiers.org/reactome/R-HSA-6803403_LEFTTORIGHT","source":"http://pathwaycommons.org/pc2/Rna_b0c799710a192ab1ed6794a6332e3b0f","target":"http://identifiers.org/reactome/R-HSA-6803403_LEFTTORIGHT"}},{"data":{"bendPointPositions":[],"cardinality":0,"class":"production","id":"OUT_http://identifiers.org/reactome/R-HSA-6803719_LEFTTORIGHT--TO--http://pathwaycommons.org/pc2/Complex_3b9bde21e8f130870b91f73ac31dcaba","portSource":"http://identifiers.org/reactome/R-HSA-6803719_LEFTTORIGHT","portTarget":"http://pathwaycommons.org/pc2/Complex_3b9bde21e8f130870b91f73ac31dcaba","source":"http://identifiers.org/reactome/R-HSA-6803719_LEFTTORIGHT","target":"http://pathwaycommons.org/pc2/Complex_3b9bde21e8f130870b91f73ac31dcaba"}},{"data":{"bendPointPositions":[],"cardinality":0,"class":"inhibition","id":"http://pathwaycommons.org/pc2/Complex_e5eadb29e1ffa1af7e4743cca5684049--TO--http://identifiers.org/reactome/R-HSA-6803411_LEFTTORIGHT","portSource":"http://pathwaycommons.org/pc2/Complex_e5eadb29e1ffa1af7e4743cca5684049","portTarget":"http://identifiers.org/reactome/R-HSA-6803411_LEFTTORIGHT","source":"http://pathwaycommons.org/pc2/Complex_e5eadb29e1ffa1af7e4743cca5684049","target":"http://identifiers.org/reactome/R-HSA-6803411_LEFTTORIGHT"}},{"data":{"bendPointPositions":[],"cardinality":0,"class":"consumption","id":"http://pathwaycommons.org/pc2/Dna_91b0bb49fefe3673ba23d46ddacefc56--TO--INP_http://identifiers.org/reactome/R-HSA-6803801_LEFTTORIGHT","portSource":"http://pathwaycommons.org/pc2/Dna_91b0bb49fefe3673ba23d46ddacefc56","portTarget":"http://identifiers.org/reactome/R-HSA-6803801_LEFTTORIGHT","source":"http://pathwaycommons.org/pc2/Dna_91b0bb49fefe3673ba23d46ddacefc56","target":"http://identifiers.org/reactome/R-HSA-6803801_LEFTTORIGHT"}},{"data":{"bendPointPositions":[],"cardinality":0,"class":"consumption","id":"http://pathwaycommons.org/pc2/Dna_91b0bb49fefe3673ba23d46ddacefc56--TO--INP_http://identifiers.org/reactome/R-HSA-6803388_LEFTTORIGHT","portSource":"http://pathwaycommons.org/pc2/Dna_91b0bb49fefe3673ba23d46ddacefc56","portTarget":"http://identifiers.org/reactome/R-HSA-6803388_LEFTTORIGHT","source":"http://pathwaycommons.org/pc2/Dna_91b0bb49fefe3673ba23d46ddacefc56","target":"http://identifiers.org/reactome/R-HSA-6803388_LEFTTORIGHT"}},{"data":{"bendPointPositions":[],"cardinality":0,"class":"consumption","id":"http://pathwaycommons.org/pc2/Protein_c1f5c065e6bc72127ca56ee0bf005494--TO--INP_http://identifiers.org/reactome/R-HSA-6803403_LEFTTORIGHT","portSource":"http://pathwaycommons.org/pc2/Protein_c1f5c065e6bc72127ca56ee0bf005494","portTarget":"http://identifiers.org/reactome/R-HSA-6803403_LEFTTORIGHT","source":"http://pathwaycommons.org/pc2/Protein_c1f5c065e6bc72127ca56ee0bf005494","target":"http://identifiers.org/reactome/R-HSA-6803403_LEFTTORIGHT"}},{"data":{"bendPointPositions":[],"cardinality":0,"class":"production","id":"OUT_http://identifiers.org/reactome/R-HSA-6803388_LEFTTORIGHT--TO--http://pathwaycommons.org/pc2/Rna_b0c799710a192ab1ed6794a6332e3b0f","portSource":"http://identifiers.org/reactome/R-HSA-6803388_LEFTTORIGHT","portTarget":"http://pathwaycommons.org/pc2/Rna_b0c799710a192ab1ed6794a6332e3b0f","source":"http://identifiers.org/reactome/R-HSA-6803388_LEFTTORIGHT","target":"http://pathwaycommons.org/pc2/Rna_b0c799710a192ab1ed6794a6332e3b0f"}},{"data":{"bendPointPositions":[],"cardinality":0,"class":"stimulation","id":"http://pathwaycommons.org/pc2/Complex_293d627d8f9f22b9e72ebcd86909d334--TO--http://identifiers.org/reactome/R-HSA-6803388_LEFTTORIGHT","portSource":"http://pathwaycommons.org/pc2/Complex_293d627d8f9f22b9e72ebcd86909d334","portTarget":"http://identifiers.org/reactome/R-HSA-6803388_LEFTTORIGHT","source":"http://pathwaycommons.org/pc2/Complex_293d627d8f9f22b9e72ebcd86909d334","target":"http://identifiers.org/reactome/R-HSA-6803388_LEFTTORIGHT"}},{"data":{"bendPointPositions":[],"cardinality":0,"class":"production","id":"OUT_http://identifiers.org/reactome/R-HSA-6803411_LEFTTORIGHT--TO--http://pathwaycommons.org/pc2/Protein_9d656b3e41b0c69ff45a305f058b3cef","portSource":"http://identifiers.org/reactome/R-HSA-6803411_LEFTTORIGHT","portTarget":"http://pathwaycommons.org/pc2/Protein_9d656b3e41b0c69ff45a305f058b3cef","source":"http://identifiers.org/reactome/R-HSA-6803411_LEFTTORIGHT","target":"http://pathwaycommons.org/pc2/Protein_9d656b3e41b0c69ff45a305f058b3cef"}},{"data":{"bendPointPositions":[],"cardinality":0,"class":"consumption","id":"http://pathwaycommons.org/pc2/Complex_e4c55477314b3d4bfd4b8f47ceff3e14--TO--INP_http://identifiers.org/reactome/R-HSA-6803719_LEFTTORIGHT","portSource":"http://pathwaycommons.org/pc2/Complex_e4c55477314b3d4bfd4b8f47ceff3e14","portTarget":"http://identifiers.org/reactome/R-HSA-6803719_LEFTTORIGHT","source":"http://pathwaycommons.org/pc2/Complex_e4c55477314b3d4bfd4b8f47ceff3e14","target":"http://identifiers.org/reactome/R-HSA-6803719_LEFTTORIGHT"}},{"data":{"bendPointPositions":[],"cardinality":0,"class":"production","id":"OUT_http://identifiers.org/reactome/R-HSA-6803403_LEFTTORIGHT--TO--http://pathwaycommons.org/pc2/Complex_e5eadb29e1ffa1af7e4743cca5684049","portSource":"http://identifiers.org/reactome/R-HSA-6803403_LEFTTORIGHT","portTarget":"http://pathwaycommons.org/pc2/Complex_e5eadb29e1ffa1af7e4743cca5684049","source":"http://identifiers.org/reactome/R-HSA-6803403_LEFTTORIGHT","target":"http://pathwaycommons.org/pc2/Complex_e5eadb29e1ffa1af7e4743cca5684049"}},{"data":{"bendPointPositions":[],"cardinality":0,"class":"consumption","id":"http://pathwaycommons.org/pc2/Complex_3b9bde21e8f130870b91f73ac31dcaba--TO--INP_http://identifiers.org/reactome/R-HSA-6803801_LEFTTORIGHT","portSource":"http://pathwaycommons.org/pc2/Complex_3b9bde21e8f130870b91f73ac31dcaba","portTarget":"http://identifiers.org/reactome/R-HSA-6803801_LEFTTORIGHT","source":"http://pathwaycommons.org/pc2/Complex_3b9bde21e8f130870b91f73ac31dcaba","target":"http://identifiers.org/reactome/R-HSA-6803801_LEFTTORIGHT"}},{"data":{"bendPointPositions":[],"cardinality":0,"class":"consumption","id":"http://pathwaycommons.org/pc2/Protein_74816ffc8af8e1d43b16b1226a5c0db2--TO--INP_http://identifiers.org/reactome/R-HSA-6803719_LEFTTORIGHT","portSource":"http://pathwaycommons.org/pc2/Protein_74816ffc8af8e1d43b16b1226a5c0db2","portTarget":"http://identifiers.org/reactome/R-HSA-6803719_LEFTTORIGHT","source":"http://pathwaycommons.org/pc2/Protein_74816ffc8af8e1d43b16b1226a5c0db2","target":"http://identifiers.org/reactome/R-HSA-6803719_LEFTTORIGHT"}}],"nodes":[{"data":{"bbox":{"h":15,"w":15,"x":7.5,"y":7.5},"class":"process","clonemarker":false,"id":"http://identifiers.org/reactome/R-HSA-6803403_LEFTTORIGHT","label":"","metadata":{"comments":["Edited: Orlic-Milacic, Marija, 2015-10-14","PCBP4 binds the 3'-UTR of the CDKN1A (p21) mRNA and reduces its stability (Scoumanne et al. 2011).","Reviewed: Zaccara, Sara, 2016-02-04","Authored: Orlic-Milacic, Marija, 2015-10-14","Reviewed: Inga, Alberto, 2016-02-04"],"databaseIds":{"pubmed":["20817677"],"reactome":["R-HSA-6803403"]},"datasource":"http://pathwaycommons.org/pc2/reactome","displayName":"PCBP4 binds the CDKN1A mRNA","standardName":"","synonyms":[],"type":"BiochemicalReaction"},"parent":"cytosol","stateVariables":[],"unitsOfInformation":[]}},{"data":{"bbox":{"h":15,"w":15,"x":7.5,"y":7.5},"class":"process","clonemarker":false,"id":"http://identifiers.org/reactome/R-HSA-6803411_LEFTTORIGHT","label":"","metadata":{"comments":["Reviewed: Zaccara, Sara, 2016-02-04","Reviewed: Inga, Alberto, 2016-02-04","Edited: Orlic-Milacic, Marija, 2015-10-14","Authored: Orlic-Milacic, Marija, 2015-10-14","PCBP4 binding to the 3'-UTR of the CDKN1A (p21) mRNA reduces half-life of the CDKN1A mRNA and the amount of CDKN1A protein. Upon DNA damage, TP53-mediated induction of CDKN1A is rapid, while the induction of PCBP4 is more gradual. It is hypothesized that, under prolonged stress, PCBP4-mediated down-regulation of CDKN1A may switch from G1 cell cycle arrest to G2 arrest, which may precede apoptosis (Scoumanne et al. 2011)."],"databaseIds":{"pubmed":["20817677"],"reactome":["R-HSA-6803411"]},"datasource":"http://pathwaycommons.org/pc2/reactome","displayName":"PCBP4 modulates CDKN1A translation","standardName":"","synonyms":[],"type":"BiochemicalReaction"},"parent":"cytosol","stateVariables":[],"unitsOfInformation":[]}},{"data":{"bbox":{"h":30,"w":50,"x":25,"y":15},"class":"nucleic acid feature","clonemarker":false,"id":"http://pathwaycommons.org/pc2/Rna_b0c799710a192ab1ed6794a6332e3b0f","label":"CDKN1A","metadata":{"comments":["REPLACED http://www.reactome.org/biopax/64/48887#Rna95","Reactome DB_ID: 6803386"],"databaseIds":{"ensembl":["ENST00000244741"],"hgnc.symbol":["CDKN1A"],"reactome":["R-HSA-6803386"],"uniprot":["P38936"]},"datasource":"http://pathwaycommons.org/pc2/reactome","displayName":"p21 mRNA","standardName":"","synonyms":["CDKN1A mRNA","ENSEMBL:ENST00000244741 CDKN1A"],"type":"Rna"},"parent":"cytosol","stateVariables":[],"unitsOfInformation":[{"class":"unit of information","id":null,"label":{"text":"mt:RNA"}}]}},{"data":{"bbox":{"h":34,"w":54,"x":25,"y":15},"class":"complex","clonemarker":false,"id":"http://pathwaycommons.org/pc2/Complex_e5eadb29e1ffa1af7e4743cca5684049","label":"PCBP4:CDKN1A mRNA","metadata":{"comments":["REPLACED http://www.reactome.org/biopax/64/48887#Complex4632","Reactome DB_ID: 6803405"],"databaseIds":{"reactome":["R-HSA-6803405"]},"datasource":"http://pathwaycommons.org/pc2/reactome","displayName":"PCBP4:CDKN1A mRNA","standardName":"","synonyms":[],"type":"Complex"},"parent":"cytosol","stateVariables":[],"unitsOfInformation":[]}},{"data":{"bbox":{"h":30,"w":50,"x":25,"y":15},"class":"nucleic acid feature","clonemarker":false,"id":"http://pathwaycommons.org/pc2/Rna_b0c799710a192ab1ed6794a6332e3b0f_5178567a47ecc386c9cd4c86331da218","label":"CDKN1A","metadata":{"comments":["REPLACED http://www.reactome.org/biopax/64/48887#Rna95","Reactome DB_ID: 6803386"],"databaseIds":{"ensembl":["ENST00000244741"],"hgnc.symbol":["CDKN1A"],"reactome":["R-HSA-6803386"],"uniprot":["P38936"]},"datasource":"http://pathwaycommons.org/pc2/reactome","displayName":"p21 mRNA","standardName":"","synonyms":["CDKN1A mRNA","ENSEMBL:ENST00000244741 CDKN1A"],"type":"Rna"},"parent":"http://pathwaycommons.org/pc2/Complex_e5eadb29e1ffa1af7e4743cca5684049","stateVariables":[],"unitsOfInformation":[{"class":"unit of information","id":null,"label":{"text":"mt:RNA"}}]}},{"data":{"bbox":{"h":30,"w":48,"x":24,"y":15},"class":"macromolecule","clonemarker":false,"id":"http://pathwaycommons.org/pc2/Protein_c1f5c065e6bc72127ca56ee0bf005494_5178567a47ecc386c9cd4c86331da218","label":"PCBP4","metadata":{"comments":["Reactome DB_ID: 6803382","REPLACED http://www.reactome.org/biopax/64/48887#Protein10458"],"databaseIds":{"hgnc.symbol":["PCBP4"],"reactome":["R-HSA-6803382"],"uniprot":["P57723"]},"datasource":"http://pathwaycommons.org/pc2/reactome","displayName":"PCBP4","standardName":"Poly(rC)-binding protein 4","synonyms":["Alpha-CP4","Poly(rC)-binding protein 4","MCG10","PCBP4"],"type":"Protein"},"parent":"http://pathwaycommons.org/pc2/Complex_e5eadb29e1ffa1af7e4743cca5684049","stateVariables":[{"class":"state variable","id":null,"state":{"value":"x[1 - 403]","variable":""}}],"unitsOfInformation":[]}},{"data":{"bbox":{"h":30,"w":48,"x":24,"y":15},"class":"macromolecule","clonemarker":false,"id":"http://pathwaycommons.org/pc2/Protein_c1f5c065e6bc72127ca56ee0bf005494","label":"PCBP4","metadata":{"comments":["Reactome DB_ID: 6803382","REPLACED http://www.reactome.org/biopax/64/48887#Protein10458"],"databaseIds":{"hgnc.symbol":["PCBP4"],"reactome":["R-HSA-6803382"],"uniprot":["P57723"]},"datasource":"http://pathwaycommons.org/pc2/reactome","displayName":"PCBP4","standardName":"Poly(rC)-binding protein 4","synonyms":["Alpha-CP4","Poly(rC)-binding protein 4","MCG10","PCBP4"],"type":"Protein"},"parent":"cytosol","stateVariables":[{"class":"state variable","id":null,"state":{"value":"x[1 - 403]","variable":""}}],"unitsOfInformation":[]}},{"data":{"bbox":{"h":15,"w":15,"x":7.5,"y":7.5},"class":"process","clonemarker":false,"id":"http://identifiers.org/reactome/R-HSA-6803801_LEFTTORIGHT","label":"","metadata":{"comments":["Reviewed: Inga, Alberto, 2016-02-04","Edited: Orlic-Milacic, Marija, 2015-10-14","TP53 (p53) binds at least two p53 response elements in the promoter of the CDKN1A (p21, WAF1) gene (El-Deiry et al. 1993, Espinosa et al. 2003). Formation of the complex of TP53 and ZNF385A (HZF) facilitates binding of TP53 to the CDKN1A promoter (Das et al. 2007).","Authored: Orlic-Milacic, M, 2013-07-15","Reviewed: Samarajiwa, Shamith, 2013-09-03","Reviewed: Zaccara, Sara, 2016-02-04","Authored: Orlic-Milacic, Marija, 2015-10-14"],"databaseIds":{"pubmed":["14580351","8242752","17719541"],"reactome":["R-HSA-6803801"]},"datasource":"http://pathwaycommons.org/pc2/reactome","displayName":"TP53 in complex with ZNF385A binds the CDKN1A promoter","standardName":"","synonyms":[],"type":"BiochemicalReaction"},"parent":"nucleoplasm","stateVariables":[],"unitsOfInformation":[]}},{"data":{"bbox":{"h":15,"w":15,"x":7.5,"y":7.5},"class":"process","clonemarker":false,"id":"http://identifiers.org/reactome/R-HSA-6803388_LEFTTORIGHT","label":"","metadata":{"comments":["Authored: Orlic-Milacic, Marija, 2015-10-14","Edited: Orlic-Milacic, Marija, 2015-10-14","Reviewed: Inga, Alberto, 2016-02-04","Reviewed: Coqueret, O, 2006-10-06 08:59:06","Binding of TP53 (p53) to its response elements in the promoter of the CDKN1A (p21) gene stimulates CDKN1A transcription (El-Deiry et al. 1993). Binding of ZNF385A (HZF) to the DNA binding domain of TP53 facilitates CDKN1A induction and the consequent cell cycle arrest (Das et al. 2007).","Reviewed: Zaccara, Sara, 2016-02-04","Authored: Matthews, L, 2006-09-29 13:54:26"],"databaseIds":{"pubmed":["17719541","8242752"],"reactome":["R-HSA-6803388"]},"datasource":"http://pathwaycommons.org/pc2/reactome","displayName":"TP53 stimulates CDKN1A (p21) transcription","standardName":"","synonyms":[],"type":"BiochemicalReaction"},"parent":"nucleoplasm","stateVariables":[],"unitsOfInformation":[]}},{"data":{"bbox":{"h":15,"w":15,"x":7.5,"y":7.5},"class":"process","clonemarker":false,"id":"http://identifiers.org/reactome/R-HSA-6803719_LEFTTORIGHT","label":"","metadata":{"comments":["Reviewed: Inga, Alberto, 2016-02-04","Reviewed: Zaccara, Sara, 2016-02-04","ZNF385A (HZF) forms a complex with TP53 (p53), interacting with the DNA binding domain of TP53. The complex of TP53 and ZNF385A associates with p53 response elements of cell cycle arrest genes, such as CDKN1A (p21) and stimulates their transcription. Under prolonged stress, ZNF385A undergoes ubiquitination and proteasome-mediated degradation, which coincides with expression of TP53-regulated pro-apoptotic genes (Das et al. 2007).","Authored: Orlic-Milacic, Marija, 2015-10-14","Edited: Orlic-Milacic, Marija, 2015-10-14"],"databaseIds":{"pubmed":["17719541"],"reactome":["R-HSA-6803719"]},"datasource":"http://pathwaycommons.org/pc2/reactome","displayName":"TP53 binds ZNF385A","standardName":"","synonyms":[],"type":"BiochemicalReaction"},"parent":"nucleoplasm","stateVariables":[],"unitsOfInformation":[]}},{"data":{"bbox":{"h":25,"w":48,"x":24,"y":12.5},"class":"macromolecule","clonemarker":false,"id":"http://pathwaycommons.org/pc2/Protein_74816ffc8af8e1d43b16b1226a5c0db2","label":"ZNF385A","metadata":{"comments":["Reactome DB_ID: 6803421","REPLACED http://www.reactome.org/biopax/64/48887#Protein10457"],"databaseIds":{"hgnc.symbol":["ZNF385A"],"reactome":["R-HSA-6803421"],"uniprot":["Q96PM9"]},"datasource":"http://pathwaycommons.org/pc2/reactome","displayName":"HZF","standardName":"Zinc finger protein 385A","synonyms":["Zinc finger protein 385A","ZNF385A","ZNF385","Retinal zinc finger protein","Hematopoietic zinc finger protein","RZF","HZF"],"type":"Protein"},"parent":"nucleoplasm","stateVariables":[],"unitsOfInformation":[]}},{"data":{"bbox":{"h":34,"w":89,"x":42.5,"y":15},"class":"complex","clonemarker":false,"id":"http://pathwaycommons.org/pc2/Complex_e4c55477314b3d4bfd4b8f47ceff3e14","label":"p-S15,S20-TP53 Tetramer","metadata":{"comments":["REPLACED http://www.reactome.org/biopax/64/48887#Complex4625","Reactome DB_ID: 3222171"],"databaseIds":{"reactome":["R-HSA-3222171"]},"datasource":"http://pathwaycommons.org/pc2/reactome","displayName":"p-S15,S20-TP53 Tetramer","standardName":"","synonyms":[],"type":"Complex"},"parent":"nucleoplasm","stateVariables":[],"unitsOfInformation":[]}},{"data":{"bbox":{"h":30,"w":85,"x":42.5,"y":15},"class":"macromolecule","clonemarker":false,"id":"http://pathwaycommons.org/pc2/Protein_1bda2d80d7f26e79f1ec46b69ea62814_118feaa670629f9e2393b181ce87eec2","label":"TP53","metadata":{"comments":["REPLACED http://www.reactome.org/biopax/64/48887#Protein10449","Reactome DB_ID: 69683"],"databaseIds":{"hgnc.symbol":["TP53"],"reactome":["R-HSA-69683"],"uniprot":["P04637"]},"datasource":"http://pathwaycommons.org/pc2/reactome","displayName":"p-S15,S20-TP53","standardName":"Cellular tumor antigen p53","synonyms":["Tumor suppressor p53","TP53","Antigen NY-CO-13","Phosphoprotein p53","P53"],"type":"Protein"},"parent":"http://pathwaycommons.org/pc2/Complex_e4c55477314b3d4bfd4b8f47ceff3e14","stateVariables":[{"class":"state variable","id":null,"state":{"value":"opser-51","variable":"20"}},{"class":"state variable","id":null,"state":{"value":"opser-51","variable":"15"}},{"class":"state variable","id":null,"state":{"value":"x[1 - 393]","variable":""}}],"unitsOfInformation":[]}},{"data":{"bbox":{"h":30,"w":50,"x":25,"y":15},"class":"nucleic acid feature","clonemarker":false,"id":"http://pathwaycommons.org/pc2/Dna_91b0bb49fefe3673ba23d46ddacefc56","label":"CDKN1A","metadata":{"comments":["Reactome DB_ID: 3786256","REPLACED http://www.reactome.org/biopax/64/48887#Dna50"],"databaseIds":{"ensembl":["ENSG00000124762"],"hgnc.symbol":["CDKN1A"],"reactome":["R-HSA-3786256"],"uniprot":["P38936"]},"datasource":"http://pathwaycommons.org/pc2/reactome","displayName":"p21 gene","standardName":"","synonyms":["WAF1 gene","CIP1 gene","CDKN1A gene","PIC1","CAP20","CDKN1A","WAF1","MDA6","CDKN1","SDI1","ENSEMBL:ENSG00000124762 CDKN1A"],"type":"Dna"},"parent":"nucleoplasm","stateVariables":[],"unitsOfInformation":[{"class":"unit of information","id":null,"label":{"text":"mt:DNA"}}]}},{"data":{"bbox":{"h":30,"w":48,"x":24,"y":15},"class":"macromolecule","clonemarker":false,"id":"http://pathwaycommons.org/pc2/Protein_9d656b3e41b0c69ff45a305f058b3cef","label":"CDKN1A","metadata":{"comments":["Reactome DB_ID: 182585","REPLACED http://www.reactome.org/biopax/64/48887#Protein1393"],"databaseIds":{"hgnc.symbol":["CDKN1A"],"reactome":["R-HSA-182585"],"uniprot":["P38936"]},"datasource":"http://pathwaycommons.org/pc2/reactome","displayName":"p21","standardName":"Cyclin-dependent kinase inhibitor 1","synonyms":["CDKN1A","CAP20","WAF1","CDKN1","PIC1","p21","MDA-6","MDA6","Melanoma differentiation-associated protein 6","SDI1","CDK-interacting protein 1","CIP1"],"type":"Protein"},"parent":"nucleoplasm","stateVariables":[{"class":"state variable","id":null,"state":{"value":"x[2 - 164]","variable":""}}],"unitsOfInformation":[]}},{"data":{"bbox":{"h":34,"w":89,"x":42.5,"y":15},"class":"complex","clonemarker":false,"id":"http://pathwaycommons.org/pc2/Complex_3b9bde21e8f130870b91f73ac31dcaba","label":"p-S15,S20-TP53 Tetramer:ZNF385A","metadata":{"comments":["REPLACED http://www.reactome.org/biopax/64/48887#Complex4630","Reactome DB_ID: 6803718"],"databaseIds":{"reactome":["R-HSA-6803718"]},"datasource":"http://pathwaycommons.org/pc2/reactome","displayName":"p-S15,S20-TP53 Tetramer:ZNF385A","standardName":"","synonyms":[],"type":"Complex"},"parent":"nucleoplasm","stateVariables":[],"unitsOfInformation":[]}},{"data":{"bbox":{"h":30,"w":85,"x":42.5,"y":15},"class":"macromolecule","clonemarker":false,"id":"http://pathwaycommons.org/pc2/Protein_1bda2d80d7f26e79f1ec46b69ea62814_8f3ce9a594ac249a622a48b0f53f0b29","label":"TP53","metadata":{"comments":["REPLACED http://www.reactome.org/biopax/64/48887#Protein10449","Reactome DB_ID: 69683"],"databaseIds":{"hgnc.symbol":["TP53"],"reactome":["R-HSA-69683"],"uniprot":["P04637"]},"datasource":"http://pathwaycommons.org/pc2/reactome","displayName":"p-S15,S20-TP53","standardName":"Cellular tumor antigen p53","synonyms":["Tumor suppressor p53","TP53","Antigen NY-CO-13","Phosphoprotein p53","P53"],"type":"Protein"},"parent":"http://pathwaycommons.org/pc2/Complex_3b9bde21e8f130870b91f73ac31dcaba","stateVariables":[{"class":"state variable","id":null,"state":{"value":"opser-51","variable":"20"}},{"class":"state variable","id":null,"state":{"value":"opser-51","variable":"15"}},{"class":"state variable","id":null,"state":{"value":"x[1 - 393]","variable":""}}],"unitsOfInformation":[]}},{"data":{"bbox":{"h":25,"w":48,"x":24,"y":12.5},"class":"macromolecule","clonemarker":false,"id":"http://pathwaycommons.org/pc2/Protein_74816ffc8af8e1d43b16b1226a5c0db2_8f3ce9a594ac249a622a48b0f53f0b29","label":"ZNF385A","metadata":{"comments":["Reactome DB_ID: 6803421","REPLACED http://www.reactome.org/biopax/64/48887#Protein10457"],"databaseIds":{"hgnc.symbol":["ZNF385A"],"reactome":["R-HSA-6803421"],"uniprot":["Q96PM9"]},"datasource":"http://pathwaycommons.org/pc2/reactome","displayName":"HZF","standardName":"Zinc finger protein 385A","synonyms":["Zinc finger protein 385A","ZNF385A","ZNF385","Retinal zinc finger protein","Hematopoietic zinc finger protein","RZF","HZF"],"type":"Protein"},"parent":"http://pathwaycommons.org/pc2/Complex_3b9bde21e8f130870b91f73ac31dcaba","stateVariables":[],"unitsOfInformation":[]}},{"data":{"bbox":{"h":34,"w":89,"x":42.5,"y":15},"class":"complex","clonemarker":false,"id":"http://pathwaycommons.org/pc2/Complex_293d627d8f9f22b9e72ebcd86909d334","label":"p-S15,S20-TP53 Tetramer:ZNF385A:CDKN1A Gene","metadata":{"comments":["REPLACED http://www.reactome.org/biopax/64/48887#Complex4631","Reactome DB_ID: 6803802"],"databaseIds":{"reactome":["R-HSA-6803802"]},"datasource":"http://pathwaycommons.org/pc2/reactome","displayName":"p-S15,S20-TP53 Tetramer:ZNF385A:CDKN1A Gene","standardName":"","synonyms":[],"type":"Complex"},"parent":"nucleoplasm","stateVariables":[],"unitsOfInformation":[]}},{"data":{"bbox":{"h":30,"w":85,"x":42.5,"y":15},"class":"macromolecule","clonemarker":false,"id":"http://pathwaycommons.org/pc2/Protein_1bda2d80d7f26e79f1ec46b69ea62814_e084db4218995c6713265fec7de6398c","label":"TP53","metadata":{"comments":["REPLACED http://www.reactome.org/biopax/64/48887#Protein10449","Reactome DB_ID: 69683"],"databaseIds":{"hgnc.symbol":["TP53"],"reactome":["R-HSA-69683"],"uniprot":["P04637"]},"datasource":"http://pathwaycommons.org/pc2/reactome","displayName":"p-S15,S20-TP53","standardName":"Cellular tumor antigen p53","synonyms":["Tumor suppressor p53","TP53","Antigen NY-CO-13","Phosphoprotein p53","P53"],"type":"Protein"},"parent":"http://pathwaycommons.org/pc2/Complex_293d627d8f9f22b9e72ebcd86909d334","stateVariables":[{"class":"state variable","id":null,"state":{"value":"opser-51","variable":"20"}},{"class":"state variable","id":null,"state":{"value":"opser-51","variable":"15"}},{"class":"state variable","id":null,"state":{"value":"x[1 - 393]","variable":""}}],"unitsOfInformation":[]}},{"data":{"bbox":{"h":30,"w":50,"x":25,"y":15},"class":"nucleic acid feature","clonemarker":false,"id":"http://pathwaycommons.org/pc2/Dna_91b0bb49fefe3673ba23d46ddacefc56_e084db4218995c6713265fec7de6398c","label":"CDKN1A","metadata":{"comments":["Reactome DB_ID: 3786256","REPLACED http://www.reactome.org/biopax/64/48887#Dna50"],"databaseIds":{"ensembl":["ENSG00000124762"],"hgnc.symbol":["CDKN1A"],"reactome":["R-HSA-3786256"],"uniprot":["P38936"]},"datasource":"http://pathwaycommons.org/pc2/reactome","displayName":"p21 gene","standardName":"","synonyms":["WAF1 gene","CIP1 gene","CDKN1A gene","PIC1","CAP20","CDKN1A","WAF1","MDA6","CDKN1","SDI1","ENSEMBL:ENSG00000124762 CDKN1A"],"type":"Dna"},"parent":"http://pathwaycommons.org/pc2/Complex_293d627d8f9f22b9e72ebcd86909d334","stateVariables":[],"unitsOfInformation":[{"class":"unit of information","id":null,"label":{"text":"mt:DNA"}}]}},{"data":{"bbox":{"h":25,"w":48,"x":24,"y":12.5},"class":"macromolecule","clonemarker":false,"id":"http://pathwaycommons.org/pc2/Protein_74816ffc8af8e1d43b16b1226a5c0db2_e084db4218995c6713265fec7de6398c","label":"ZNF385A","metadata":{"comments":["Reactome DB_ID: 6803421","REPLACED http://www.reactome.org/biopax/64/48887#Protein10457"],"databaseIds":{"hgnc.symbol":["ZNF385A"],"reactome":["R-HSA-6803421"],"uniprot":["Q96PM9"]},"datasource":"http://pathwaycommons.org/pc2/reactome","displayName":"HZF","standardName":"Zinc finger protein 385A","synonyms":["Zinc finger protein 385A","ZNF385A","ZNF385","Retinal zinc finger protein","Hematopoietic zinc finger protein","RZF","HZF"],"type":"Protein"},"parent":"http://pathwaycommons.org/pc2/Complex_293d627d8f9f22b9e72ebcd86909d334","stateVariables":[],"unitsOfInformation":[]}},{"data":{"bbox":{"h":38,"w":58,"x":25,"y":15},"class":"compartment","clonemarker":false,"id":"cytosol","label":"cytosol","metadata":{},"parent":"","stateVariables":[],"unitsOfInformation":[]}},{"data":{"bbox":{"h":38,"w":93,"x":42.5,"y":15},"class":"compartment","clonemarker":false,"id":"nucleoplasm","label":"nucleoplasm","metadata":{},"parent":"","stateVariables":[],"unitsOfInformation":[]}}],"pathwayMetadata":{"comments":["Both p53-independent and p53-dependent mechanisms of induction of p21 mRNA have been demonstrated. p21 is transcriptionally activated by p53 after DNA damage (el-Deiry et al., 1993)."],"dataSource":["Reactome"],"organism":["Homo sapiens"],"title":["Transcriptional activation of cell cycle inhibitor p21"],"uri":"http://identifiers.org/reactome/R-HSA-69895"}}}]
+
+/***/ }),
+
+/***/ 492:
+/***/ (function(module, exports, __webpack_require__) {
+
+function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
+function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
+function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
+function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
+function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
+function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
+function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
+function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
+function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
+var React = __webpack_require__(1);
+var h = __webpack_require__(2);
+var Loader = __webpack_require__(38);
+var classNames = __webpack_require__(14);
+var CytoscapeService = __webpack_require__(90);
+var _require = __webpack_require__(16),
+ ServerAPI = _require.ServerAPI;
+var PathwaysToolbar = __webpack_require__(493);
+var _require2 = __webpack_require__(55),
+ PcLogoLink = _require2.PcLogoLink,
+ CytoscapeNetwork = _require2.CytoscapeNetwork;
+var Pathway = __webpack_require__(182);
+var _require3 = __webpack_require__(194),
+ stylesheet = _require3.stylesheet,
+ bindCyEvents = _require3.bindCyEvents,
+ PATHWAYS_LAYOUT_OPTS = _require3.PATHWAYS_LAYOUT_OPTS;
+var _require4 = __webpack_require__(63),
+ TimeoutError = _require4.TimeoutError;
+var _require5 = __webpack_require__(73),
+ ErrorMessage = _require5.ErrorMessage;
+var _require6 = __webpack_require__(94),
+ Contribute = _require6.Contribute;
+var PathwayTitle = __webpack_require__(499);
+var Pathways = /*#__PURE__*/function (_React$Component) {
+ function Pathways(props) {
+ var _this;
+ _classCallCheck(this, Pathways);
+ _this = _callSuper(this, Pathways, [props]);
+ _this.state = {
+ cySrv: new CytoscapeService({
+ style: stylesheet,
+ onMount: bindCyEvents
+ }),
+ pathway: new Pathway(),
+ activeMenu: 'closeMenu',
+ loading: true,
+ networkEmpty: false
+ };
+ if (true) {
+ _this.state.cySrv.getPromise().then(function (cy) {
+ return window.cy = cy;
+ });
+ }
+ return _this;
+ }
+
+ // onMount prop passed to CytoscapeNetwork
+ // called after CytoscapeNetwork has mounted
+ _inherits(Pathways, _React$Component);
+ return _createClass(Pathways, [{
+ key: "loadPathway",
+ value: function loadPathway() {
+ var _this2 = this;
+ var _this$state = this.state,
+ pathway = _this$state.pathway,
+ cySrv = _this$state.cySrv;
+ var apiOpts = this.props.apiOpts;
+ var initializeCytoscape = function initializeCytoscape(pathway) {
+ var cy = cySrv.get();
+ cy.remove('*');
+ cy.add(pathway.cyJson());
+ var layout = cy.layout(PATHWAYS_LAYOUT_OPTS);
+ layout.on('layoutstop', function () {
+ _this2.setState({
+ loading: false,
+ pathway: pathway,
+ error: null
+ });
+ });
+ layout.run();
+ };
+ ServerAPI.getAPIResource(apiOpts).then(function (pathwayJSON) {
+ if (pathwayJSON.graph.nodes.length === 0) {
+ _this2.setState({
+ loading: false,
+ networkEmpty: true
+ });
+ return;
+ }
+ pathway.load(pathwayJSON);
+ initializeCytoscape(pathway);
+ }).catch(function (e) {
+ return _this2.setState({
+ error: e
+ });
+ });
+ }
+ }, {
+ key: "render",
+ value: function render() {
+ var _this3 = this;
+ var _this$state2 = this.state,
+ loading = _this$state2.loading,
+ pathway = _this$state2.pathway,
+ cySrv = _this$state2.cySrv,
+ networkEmpty = _this$state2.networkEmpty,
+ error = _this$state2.error;
+ var downloadOpts = this.props.downloadOpts;
+ var errorMessage;
+ if (networkEmpty) {
+ errorMessage = h(ErrorMessage, {
+ title: 'No pathway data available. Please view another result',
+ footer: null
+ });
+ } else if (error instanceof TimeoutError) {
+ errorMessage = h(ErrorMessage, {
+ title: 'This is taking longer that we expected',
+ body: 'Try again later.',
+ logo: true
+ });
+ } else if (error) {
+ errorMessage = h(ErrorMessage, {
+ logo: true
+ });
+ }
+ var appBar = h('div.app-bar', [h('div.app-bar-branding', [h(PcLogoLink), h(PathwayTitle, {
+ pathway: pathway
+ })]), h(PathwaysToolbar, {
+ cySrv: cySrv,
+ pathway: pathway,
+ downloadOpts: downloadOpts
+ }), h(Contribute, {
+ text: 'Add my pathway'
+ })]);
+ var content = !errorMessage ? [h(Loader, {
+ loaded: !loading,
+ options: {
+ left: '50%',
+ color: '#16a085'
+ }
+ }, [appBar]), h(CytoscapeNetwork, {
+ cySrv: cySrv,
+ onMount: function onMount() {
+ return _this3.loadPathway();
+ },
+ className: classNames({
+ 'network-loading': loading
+ })
+ })] : [errorMessage];
+ return h('div.pathways', content);
+ }
+ }]);
+}(React.Component);
+module.exports = Pathways;
+
+/***/ }),
+
+/***/ 493:
+/***/ (function(module, exports, __webpack_require__) {
+
+function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
+function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
+function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
+function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
+function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
+function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
+function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
+function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
+function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
+var React = __webpack_require__(1);
+var ReactDom = __webpack_require__(54);
+var h = __webpack_require__(2);
+var Popover = __webpack_require__(72);
+var InfoMenu = __webpack_require__(494);
+var FileDownloadMenu = __webpack_require__(495);
+var IconButton = __webpack_require__(71);
+var _require = __webpack_require__(194),
+ fit = _require.fit,
+ expandCollapse = _require.expandCollapse,
+ layout = _require.layout,
+ searchNodes = _require.searchNodes;
+var PathwaysToolbar = /*#__PURE__*/function (_React$Component) {
+ function PathwaysToolbar(props) {
+ var _this;
+ _classCallCheck(this, PathwaysToolbar);
+ _this = _callSuper(this, PathwaysToolbar, [props]);
+ _this.state = {
+ searchValue: ''
+ };
+ return _this;
+ }
+ _inherits(PathwaysToolbar, _React$Component);
+ return _createClass(PathwaysToolbar, [{
+ key: "handleNodeSearchChange",
+ value: function handleNodeSearchChange(searchVal) {
+ var _this2 = this;
+ this.setState({
+ searchValue: searchVal
+ }, function () {
+ return searchNodes(_this2.props.cySrv.get(), searchVal);
+ });
+ }
+ }, {
+ key: "focusNodeSearch",
+ value: function focusNodeSearch() {
+ ReactDom.findDOMNode(this).querySelector('.element-search-input').focus();
+ }
+ }, {
+ key: "render",
+ value: function render() {
+ var _this3 = this;
+ var _this$props = this.props,
+ cySrv = _this$props.cySrv,
+ pathway = _this$props.pathway,
+ downloadOpts = _this$props.downloadOpts;
+ var searchValue = this.state.searchValue;
+ var cy = cySrv.get();
+ return h('div.app-toolbar', [h(Popover, {
+ tippy: {
+ position: 'bottom',
+ html: h(InfoMenu, {
+ key: 'infoMenu',
+ infoList: pathway.comments()
+ })
+ }
+ }, [h(IconButton, {
+ description: 'Extra Information',
+ icon: 'info'
+ })]), h(Popover, {
+ tippy: {
+ position: 'bottom',
+ html: h(FileDownloadMenu, {
+ key: 'downloadMenu',
+ cySrv: cySrv,
+ fileName: pathway.name(),
+ uri: pathway.uri(),
+ downloadOpts: downloadOpts
+ })
+ }
+ }, [h(IconButton, {
+ description: 'Downloads',
+ icon: 'file_download'
+ })]), h(IconButton, {
+ description: 'Expand/Collapse all complex nodes',
+ onClick: function onClick() {
+ return expandCollapse(cy);
+ },
+ icon: 'select_all'
+ }), h(IconButton, {
+ description: 'Fit pathway to screen',
+ onClick: function onClick() {
+ return fit(cy);
+ },
+ icon: 'fullscreen'
+ }), h(IconButton, {
+ description: 'Reset pathway arrangement',
+ onClick: function onClick() {
+ return layout(cy);
+ },
+ icon: 'replay'
+ }), h('div.element-search', [h('input.element-search-input.input-round.input-joined', {
+ value: searchValue,
+ onChange: function onChange(e) {
+ return _this3.handleNodeSearchChange(e.target.value);
+ },
+ type: 'text',
+ placeholder: 'Search'
+ }), h('button.element-search-clear', {
+ onClick: function onClick() {
+ _this3.handleNodeSearchChange('');
+ _this3.focusNodeSearch();
+ }
+ }, [h('i.material-icons', 'close')])])]);
+ }
+ }]);
+}(React.Component);
+module.exports = PathwaysToolbar;
+
+/***/ }),
+
+/***/ 494:
+/***/ (function(module, exports, __webpack_require__) {
+
+function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
+function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
+function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
+function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
+function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
+function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
+function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
+function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
+function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
+var React = __webpack_require__(1);
+var h = __webpack_require__(2);
+var NetworkInfoMenu = /*#__PURE__*/function (_React$Component) {
+ function NetworkInfoMenu() {
+ _classCallCheck(this, NetworkInfoMenu);
+ return _callSuper(this, NetworkInfoMenu, arguments);
+ }
+ _inherits(NetworkInfoMenu, _React$Component);
+ return _createClass(NetworkInfoMenu, [{
+ key: "render",
+ value: function render() {
+ var infoList = this.props.infoList;
+ var noInfoMessage = [h('p', {
+ key: 1
+ }, 'No additional information was found for this network!'), h('p', {
+ key: 2
+ }, 'Additional information about the network is normally found here, but we couldn\'t find any for this one.')];
+ var comments = infoList.map(function (comment, key) {
+ return h('p', {
+ key: key
+ }, comment.replace(/
/g, ' '));
+ });
+ return h('div.info-menu', [comments.length > 0 ? comments : noInfoMessage]);
+ }
+ }]);
+}(React.Component);
+module.exports = NetworkInfoMenu;
+
+/***/ }),
+
+/***/ 495:
+/***/ (function(module, exports, __webpack_require__) {
+
+function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
+function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
+function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
+function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
+function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
+function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
+function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
+function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
+function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
+function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
+function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
+function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
+function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
+function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
+var React = __webpack_require__(1);
+var h = __webpack_require__(2);
+var saveAs = __webpack_require__(91).saveAs;
+var _ = __webpack_require__(6);
+var Loader = __webpack_require__(38);
+var _require = __webpack_require__(16),
+ ServerAPI = _require.ServerAPI;
+var pcDownloadTypes = __webpack_require__(183);
+var FileDownloadMenu = /*#__PURE__*/function (_React$Component) {
+ function FileDownloadMenu(props) {
+ var _this;
+ _classCallCheck(this, FileDownloadMenu);
+ _this = _callSuper(this, FileDownloadMenu, [props]);
+ _this.state = {
+ downloadTypes: pcDownloadTypes,
+ loading: false,
+ error: null
+ };
+ return _this;
+ }
+ _inherits(FileDownloadMenu, _React$Component);
+ return _createClass(FileDownloadMenu, [{
+ key: "downloadFromDisplayName",
+ value: function downloadFromDisplayName(displayName) {
+ var _this2 = this;
+ var _this$props = this.props,
+ cySrv = _this$props.cySrv,
+ fileName = _this$props.fileName;
+ var downloadTypes = this.state.downloadTypes;
+ var option = _.find(downloadTypes, ['displayName', displayName]);
+ var pc2Name = option.pc2Name,
+ ext = option.ext,
+ type = option.type;
+ if (type === 'png') {
+ // The setTimeout triggers a rerender so that the loader appears on screen
+ this.setState({
+ loading: true
+ }, function () {
+ setTimeout(function () {
+ saveAs(cySrv.get().png({
+ output: 'blob',
+ scale: 2,
+ bg: 'white',
+ full: true
+ }), "".concat(fileName, ".").concat(ext));
+ _this2.setState({
+ loading: false
+ });
+ }, 1);
+ });
+ } else {
+ this.downloadFileFromPC(pc2Name, ext);
+ }
+ }
+ }, {
+ key: "downloadFileFromPC",
+ value: function downloadFileFromPC(format, fileExt) {
+ var _this3 = this;
+ var FILENAME_CUTOFF = 20;
+ var _this$props2 = this.props,
+ fileName = _this$props2.fileName,
+ uri = _this$props2.uri;
+ fileName = fileName.substr(0, fileName.length < FILENAME_CUTOFF ? fileName.length : FILENAME_CUTOFF).replace(/ /g, '_');
+ this.setState({
+ loading: true
+ }, function () {
+ ServerAPI.downloadFileFromPathwayCommons(uri, format).then(function (res) {
+ return res.text();
+ }).then(function (content) {
+ content = _typeof(content) === 'object' ? JSON.stringify(content) : content;
+ var fileContent = new File([content], "".concat(fileName, ".").concat(fileExt), {
+ type: 'text/plain;charset=utf-8'
+ });
+ saveAs(fileContent);
+ _this3.setState({
+ error: null,
+ loading: false
+ });
+ }).catch(function (e) {
+ return _this3.setState({
+ error: e,
+ loading: false
+ });
+ });
+ });
+ }
+ }, {
+ key: "render",
+ value: function render() {
+ var _this4 = this;
+ var downloadOpts = this.props.downloadOpts;
+ var opts = _.assign({
+ downloadTypes: ['png']
+ }, downloadOpts);
+ var menuContents = this.state.downloadTypes.filter(function (dt) {
+ return opts.downloadTypes.indexOf(dt.type) >= 0;
+ }).map(function (dt) {
+ var dlOption = h('div.download-option', {
+ onClick: function onClick() {
+ return _this4.downloadFromDisplayName(dt.displayName);
+ }
+ }, [h('div.download-option-header', [h('h3', dt.displayName)]), h('div.download-option-description', dt.description)]);
+ return dlOption;
+ });
+ var errorMessage = this.state.error ? h('div.file-download-error', 'An error occurred - Please try again later.') : null;
+ return h('div.file-download-menu', [h('h2', 'Download As...'), h('div.file-download-content', [].concat(_toConsumableArray(menuContents), [h(Loader, {
+ loaded: !this.state.loading
+ })])), errorMessage]);
+ }
+ }]);
+}(React.Component);
+module.exports = FileDownloadMenu;
+
+/***/ }),
+
+/***/ 496:
+/***/ (function(module, exports, __webpack_require__) {
+
+var cytoscape = __webpack_require__(64);
+var sbgnStyleSheet = __webpack_require__(189);
+var _require = __webpack_require__(195),
+ MATCHED_SEARCH_CLASS = _require.MATCHED_SEARCH_CLASS;
+module.exports = sbgnStyleSheet(cytoscape).selector('node').css({
+ 'background-opacity': '0.4'
+}).selector('node:active').css({
+ 'background-opacity': '0.7'
+}).selector('node[class!="compartment"]').css({
+ 'font-size': 20,
+ 'color': 'black',
+ 'text-outline-color': 'white',
+ 'text-outline-width': 2,
+ 'text-outline-opacity': 0.5,
+ 'text-wrap': 'wrap',
+ 'text-max-width': 175,
+ 'label': function label(node) {
+ var label = node.data('label').split('(').join('').split(')').join('').split(':').join(' ');
+ return label;
+ }
+}).selector('node[class="complex"]').css({
+ 'width': 45,
+ 'height': 45,
+ 'label': function label(node) {
+ return node.isParent() ? '' : node.data('label');
+ }
+}).selector('.cy-expand-collapse-collapsed-node').css({
+ 'font-size': 20,
+ 'text-max-width': 175
+}).selector('.cy-expand-collapse-meta-edge').css({
+ 'line-style': 'dashed'
+}).selector('edge').css({
+ 'opacity': 0.3
+}).selector('node[class="and"],node[class="or"],node[class="not"]').css({
+ 'label': function label(node) {
+ return node.data('class');
+ }
+}).selector('.highlighted').css({
+ 'opacity': 1
+}).selector('.unhighlighted').css({
+ 'opacity': 0.4
+}).selector('.hidden').css({
+ 'display': 'none'
+}).selector(".".concat(MATCHED_SEARCH_CLASS)).css({
+ 'overlay-color': 'yellow',
+ 'overlay-padding': 0,
+ 'overlay-opacity': 0.5
+});
+
+/***/ }),
+
+/***/ 497:
+/***/ (function(module, exports, __webpack_require__) {
+
+var _ = __webpack_require__(6);
+var h = __webpack_require__(2);
+var PathwayNodeMetadataView = __webpack_require__(498);
+var _require = __webpack_require__(133),
+ PATHWAYS_LAYOUT_OPTS = _require.PATHWAYS_LAYOUT_OPTS;
+var CytoscapeTooltip = __webpack_require__(93);
+var EXPAND_COLLAPSE_OPTS = {
+ layoutBy: _.assign({}, PATHWAYS_LAYOUT_OPTS, {
+ fit: false
+ }),
+ fisheye: true,
+ animate: true,
+ undoable: false,
+ cueEnabled: false
+};
+var SHOW_TOOLTIPS_EVENT = 'showtooltip';
+var bindCyEvents = function bindCyEvents(cy) {
+ var hideTooltips = function hideTooltips() {
+ cy.elements().forEach(function (ele) {
+ var tooltip = ele.scratch('_tooltip');
+ if (tooltip) {
+ tooltip.hide();
+ }
+ });
+ };
+ cy.expandCollapse(EXPAND_COLLAPSE_OPTS);
+ cy.on(SHOW_TOOLTIPS_EVENT, 'node[class != "compartment"]', function (evt) {
+ var node = evt.target;
+ var tooltip = new CytoscapeTooltip(node.popperRef(), {
+ html: h(PathwayNodeMetadataView, {
+ node: node
+ })
+ });
+ node.scratch('_tooltip', tooltip);
+ tooltip.show();
+ });
+ cy.on('tap', function (evt) {
+ var tgt = evt.target;
+
+ // if we didn't click a node, close all tooltips
+ if (evt.target === cy || evt.target.isEdge()) {
+ hideTooltips();
+ return;
+ }
+
+ // we clicked a node that has a tooltip open -> close it
+ if (tgt.scratch('_tooltip-opened')) {
+ hideTooltips();
+ } else {
+ // open the tooltip for the clicked node
+ hideTooltips();
+ tgt.emit(SHOW_TOOLTIPS_EVENT);
+ }
+ });
+
+ //Hide Tooltips on various graph movements
+ cy.on('drag', function () {
+ return hideTooltips();
+ });
+ cy.on('pan', function () {
+ return hideTooltips();
+ });
+ cy.on('zoom', function () {
+ return hideTooltips();
+ });
+ cy.on('layoutstart', function () {
+ return hideTooltips();
+ });
+ var nodeHoverMouseOver = _.debounce(function (evt) {
+ var node = evt.target;
+ var elesToHighlight = cy.collection();
+
+ //Create a list of the hovered node & its neighbourhood
+ node.neighborhood().nodes().union(node).forEach(function (node) {
+ elesToHighlight.merge(node.ancestors());
+ elesToHighlight.merge(node.descendants());
+ elesToHighlight.merge(node);
+ });
+ elesToHighlight.merge(node.neighborhood().edges());
+
+ //Add highlighted class to node & its neighbourhood, unhighlighted to everything else
+ cy.elements().addClass('unhighlighted');
+ elesToHighlight.forEach(function (ele) {
+ ele.removeClass('unhighlighted');
+ ele.addClass('highlighted');
+ });
+ }, 750);
+
+ //call style-applying and style-removing functions on 'mouseover' and 'mouseout' for non-compartment nodes
+ cy.on('mouseover', 'node[class!="compartment"]', nodeHoverMouseOver);
+ cy.on('mouseout', 'node[class!="compartment"]', function () {
+ nodeHoverMouseOver.cancel();
+ cy.elements().removeClass('highlighted unhighlighted');
+ });
+};
+module.exports = bindCyEvents;
+
+/***/ }),
+
+/***/ 498:
+/***/ (function(module, exports, __webpack_require__) {
+
+function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
+function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
+function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
+function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
+function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
+function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
+function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
+function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
+function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
+var React = __webpack_require__(1);
+var h = __webpack_require__(2);
+var _ = __webpack_require__(6);
+var _require = __webpack_require__(16),
+ ServerAPI = _require.ServerAPI;
+var _require2 = __webpack_require__(24),
+ NS_CHEBI = _require2.NS_CHEBI,
+ NS_ENSEMBL = _require2.NS_ENSEMBL,
+ NS_HGNC = _require2.NS_HGNC,
+ NS_HGNC_SYMBOL = _require2.NS_HGNC_SYMBOL,
+ NS_NCBI_GENE = _require2.NS_NCBI_GENE,
+ NS_PUBMED = _require2.NS_PUBMED,
+ NS_REACTOME = _require2.NS_REACTOME,
+ NS_UNIPROT = _require2.NS_UNIPROT;
+var DEFAULT_NUM_NAMES = 3;
+var SUPPORTED_COLLECTIONS = new Map([[NS_CHEBI, 'ChEBI'], [NS_ENSEMBL, 'Ensembl'], [NS_HGNC, 'HGNC'], [NS_HGNC_SYMBOL, 'HGNC'], [NS_NCBI_GENE, 'NCBI Gene'], [NS_REACTOME, 'Reactome'], [NS_UNIPROT, 'UniProt']]);
+var getUriIds = function getUriIds(uris) {
+ return uris.map(function (uri) {
+ return _.last(uri.split('/'));
+ });
+};
+
+// A component that displays a pathway node's metadata
+// props:
+// - cytoscape node)
+var PathwayNodeMetadataView = /*#__PURE__*/function (_React$Component) {
+ function PathwayNodeMetadataView(props) {
+ var _this;
+ _classCallCheck(this, PathwayNodeMetadataView);
+ _this = _callSuper(this, PathwayNodeMetadataView, [props]);
+ _this.state = {
+ publications: []
+ };
+ return _this;
+ }
+ _inherits(PathwayNodeMetadataView, _React$Component);
+ return _createClass(PathwayNodeMetadataView, [{
+ key: "componentDidMount",
+ value: function componentDidMount() {
+ var _this2 = this;
+ var node = this.props.node;
+ var metadata = node.data('metadata');
+ var pubmedUris = _.get(metadata, "xrefLinks.".concat(NS_PUBMED), null);
+ if (pubmedUris != null) {
+ var pubmedIds = getUriIds(pubmedUris);
+ ServerAPI.getPubmedPublications(pubmedIds).then(function (publications) {
+ _this2.setState({
+ publications: publications
+ });
+ });
+ }
+ }
+ }, {
+ key: "render",
+ value: function render() {
+ var node = this.props.node;
+ var publications = this.state.publications;
+ var nodeData = node.data();
+ var nodeClass = _.get(nodeData, ['class']);
+ var nodeLabel = _.get(nodeData, ['label']);
+ var defaultNodeMeta = {
+ synonyms: [],
+ datasource: '',
+ type: nodeClass,
+ standardName: '',
+ displayName: nodeLabel,
+ xrefLinks: []
+ };
+ var nodeMeta = _.get(nodeData, ['metadata'], {});
+ var md = _.assign({}, defaultNodeMeta, nodeMeta);
+ var synonyms = md.synonyms,
+ type = md.type,
+ standardName = md.standardName,
+ displayName = md.displayName,
+ xrefLinks = md.xrefLinks;
+ var title = nodeLabel || displayName;
+ var searchLinkQuery = displayName;
+ var dbLinks = _.keys(xrefLinks).map(function (collection) {
+ var link = null;
+ var displayName = SUPPORTED_COLLECTIONS.get(collection);
+ var uri = _.get(xrefLinks, "".concat(collection, "[0]"));
+ if (displayName && uri) link = h('a.plain-link', {
+ href: uri,
+ target: '_blank'
+ }, displayName);
+ return link;
+ });
+ var publicationEles = publications.map(function (publication) {
+ var id = publication.id,
+ title = publication.title,
+ firstAuthor = publication.firstAuthor,
+ date = publication.date,
+ source = publication.source;
+ return h('div.cy-overflow-content', [h('a.plain-link', {
+ href: 'http://bioregistry.io/pubmed:' + id,
+ target: '_blank'
+ }, title), h('div', firstAuthor + ' et al. | ' + source + ' - ' + new Date(date).getFullYear().toString())]);
+ });
+ var showTitle = title !== '';
+ var showType = type !== '';
+ var showStdName = standardName !== '';
+ var showDispName = displayName !== '' && displayName !== (nodeLabel || title);
+ var showSynonyms = synonyms.length > 0;
+ var showPubs = publicationEles.length > 0;
+ var showLinks = dbLinks.length > 0;
+ var showHeader = showTitle || showType;
+ var showBody = showStdName || showDispName || showSynonyms || showPubs;
+ var showFooter = showLinks;
+ var showPcSearchLink = searchLinkQuery !== '';
+ return h('div.cy-tooltip', [h('div.cy-tooltip-content', [showHeader ? h('div.cy-tooltip-header', [showTitle ? h('h2.cy-tooltip-title', title) : null, showType ? h('div.cy-tooltip-type-chip', type) : null]) : null, showBody ? h('div.cy-tooltip-body', [showStdName ? h('div.cy-tooltip-section', [h('div.cy-tooltip-field-name', 'Name'), h('div.cy-tooltip-field-value', standardName)]) : null, showDispName ? h('div.cy-tooltip-section', [h('div.cy-tooltip-field-name', 'Display Name'), h('div.cy-tooltip-field-value', displayName)]) : null, showSynonyms ? h('div.cy-tooltip-section', [h('div.cy-tooltip-field-name', ['Synonyms']), h('div.cy-tooltip-field-value', synonyms.slice(0, DEFAULT_NUM_NAMES).join(', '))]) : null, showPubs ? h('div.cy-tooltip-section', [h('div.cy-tooltip-field-name', ['Publications']), h('div', publicationEles)]) : null]) : null, showFooter ? h('div.cy-tooltip-footer', [showLinks ? h('div.cy-tooltip-section', [h('div.cy-tooltip-field-name', ['Links']), h('div.cy-tooltip-links', dbLinks)]) : null]) : null, showPcSearchLink ? h('div.cy-tooltip-call-to-action', [h('a', {
+ target: '_blank',
+ href: '/search?q=' + searchLinkQuery
+ }, [h('button.call-to-action', 'Find Related Pathways')])]) : null])]);
+ }
+ }]);
+}(React.Component);
+module.exports = PathwayNodeMetadataView;
+
+/***/ }),
+
+/***/ 499:
+/***/ (function(module, exports, __webpack_require__) {
+
+function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
+function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, catch: function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
+function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
+function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
+function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
+function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
+function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
+function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
+function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
+function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
+function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
+function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
+var React = __webpack_require__(1);
+var h = __webpack_require__(2);
+var _ = __webpack_require__(6);
+var _require = __webpack_require__(16),
+ ServerAPI = _require.ServerAPI;
+var _require2 = __webpack_require__(24),
+ DOI_BASE_URL = _require2.DOI_BASE_URL,
+ IDENTIFIERS_URL = _require2.IDENTIFIERS_URL,
+ PUBMED_BASE_URL = _require2.PUBMED_BASE_URL;
+
+// A component that displays a pathway title
+// props:
+// - pathway: Model instance
+var PathwayTitle = /*#__PURE__*/function (_React$Component) {
+ function PathwayTitle(props) {
+ var _this;
+ _classCallCheck(this, PathwayTitle);
+ _this = _callSuper(this, PathwayTitle, [props]);
+ _this.state = {
+ publications: []
+ };
+ return _this;
+ }
+
+ /**
+ * Supports PublicationXrefs from PubMed; in principle, could be any source (e.g. bioRxiv).
+ * @returns {Promise} - Array of publication objects
+ */
+ _inherits(PathwayTitle, _React$Component);
+ return _createClass(PathwayTitle, [{
+ key: "loadPublications",
+ value: (function () {
+ var _loadPublications = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
+ var normalizePubmedRecord, MAX_PUBS, isPubmedXref, pathway, pubmedIds;
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
+ while (1) switch (_context.prev = _context.next) {
+ case 0:
+ normalizePubmedRecord = function normalizePubmedRecord(record) {
+ var journal = record.source,
+ date = record.date,
+ firstAuthor = record.firstAuthor,
+ doi = record.doi,
+ pubmed = record.pubmed;
+ return {
+ journal: journal,
+ date: date,
+ firstAuthor: firstAuthor,
+ doi: doi,
+ pubmed: pubmed
+ };
+ };
+ MAX_PUBS = 10;
+ isPubmedXref = function isPubmedXref(_ref) {
+ var db = _ref.db;
+ return db === 'pubmed';
+ };
+ pathway = this.props.pathway;
+ pubmedIds = pathway.publicationXrefs().slice(0, MAX_PUBS).filter(isPubmedXref).map(function (_ref2) {
+ var id = _ref2.id;
+ return id;
+ });
+ _context.prev = 5;
+ return _context.abrupt("return", ServerAPI.getPubmedPublications(pubmedIds).map(normalizePubmedRecord));
+ case 9:
+ _context.prev = 9;
+ _context.t0 = _context["catch"](5);
+ case 11:
+ case "end":
+ return _context.stop();
+ }
+ }, _callee, this, [[5, 9]]);
+ }));
+ function loadPublications() {
+ return _loadPublications.apply(this, arguments);
+ }
+ return loadPublications;
+ }())
+ }, {
+ key: "componentDidMount",
+ value: function () {
+ var _componentDidMount = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
+ var _this2 = this;
+ var publications;
+ return _regeneratorRuntime().wrap(function _callee2$(_context2) {
+ while (1) switch (_context2.prev = _context2.next) {
+ case 0:
+ _context2.next = 2;
+ return this.loadPublications();
+ case 2:
+ publications = _context2.sent;
+ return _context2.abrupt("return", new Promise(function (resolve) {
+ return _this2.setState({
+ publications: publications
+ }, function () {
+ return resolve(publications);
+ });
+ }));
+ case 4:
+ case "end":
+ return _context2.stop();
+ }
+ }, _callee2, this);
+ }));
+ function componentDidMount() {
+ return _componentDidMount.apply(this, arguments);
+ }
+ return componentDidMount;
+ }() // Enhance the name with a link to a source page if possible
+ }, {
+ key: "getName",
+ value: function getName() {
+ // Crapshoot whether a DB has a resolvable URL or not
+ var DB_PREFIX_2_URL_TEMPLATE = new Map([['biofactoid', "".concat(IDENTIFIERS_URL, "/biofactoid:")], ['panther.pathway', "".concat(IDENTIFIERS_URL, "/panther.pathway:")], ['smpdb', "".concat(IDENTIFIERS_URL, "/smpdb:")], ['reactome', "".concat(IDENTIFIERS_URL, "/reactome:")]]);
+ var isSupportedDb = function isSupportedDb(_ref3) {
+ var db = _ref3.db;
+ return DB_PREFIX_2_URL_TEMPLATE.has(db);
+ };
+ var pathway = this.props.pathway;
+ var name = pathway.name();
+ var uniXrefs = pathway.unificationXrefs();
+ if (!_.isEmpty(uniXrefs)) {
+ uniXrefs = uniXrefs.filter(isSupportedDb);
+ if (uniXrefs.length) {
+ var _$first = _.first(uniXrefs),
+ db = _$first.db,
+ id = _$first.id;
+ var baseUrl = DB_PREFIX_2_URL_TEMPLATE.get(db);
+ var href = "".concat(baseUrl).concat(id);
+ name = [h('a.highlight-link', {
+ href: href,
+ target: '_blank'
+ }, name)];
+ }
+ }
+ return name;
+ }
+
+ // Add an article link when directly relevant to pathway (i.e. Biofactoid!)
+ }, {
+ key: "getSource",
+ value: function getSource() {
+ var ARTICLE_SUPPORTED_DATASOURCES = new Set(['Biofactoid']);
+ var pathway = this.props.pathway;
+ var publications = this.state.publications;
+ var datasource = pathway.datasource();
+ var source = [h('a', {
+ href: pathway.datasourceUrl(),
+ target: '_blank'
+ }, ' ' + datasource)];
+ if (ARTICLE_SUPPORTED_DATASOURCES.has(datasource) && publications.length) {
+ var _$first2 = _.first(publications),
+ journal = _$first2.journal,
+ date = _$first2.date,
+ firstAuthor = _$first2.firstAuthor,
+ doi = _$first2.doi,
+ pubmed = _$first2.pubmed;
+ var author = h('span', " ".concat(firstAuthor, " et al."));
+ var reference = h(doi ? 'a.plain-link' : 'span', doi ? {
+ href: "".concat(DOI_BASE_URL).concat(doi),
+ target: '_blank'
+ } : null, "".concat(journal, " ").concat(date));
+ source.push(h('span', ' | '), author, ' ', reference);
+ if (pubmed) {
+ var pubmedLink = h('a.plain-link', {
+ href: "".concat(PUBMED_BASE_URL).concat(pubmed),
+ target: '_blank'
+ }, 'PubMed');
+ source.push(' · ', pubmedLink);
+ }
+ }
+ return source;
+ }
+ }, {
+ key: "render",
+ value: function render() {
+ var name = this.getName();
+ var source = this.getSource();
+ return h('div.pathway-title', [h('div.pathway-title-name', name), h('div.pathway-title-source', source)]);
+ }
+ }]);
+}(React.Component);
+module.exports = PathwayTitle;
+
+/***/ }),
+
+/***/ 500:
+/***/ (function(module, exports, __webpack_require__) {
+
+function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
+function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
+function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
+function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
+function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
+function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
+function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
+function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
+function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
+var React = __webpack_require__(1);
+var h = __webpack_require__(2);
+var Link = __webpack_require__(60).Link;
+var Loader = __webpack_require__(38);
+var classNames = __webpack_require__(14);
+var queryString = __webpack_require__(37);
+var _ = __webpack_require__(6);
+var _require = __webpack_require__(24),
+ FACTOID_URL = _require.FACTOID_URL;
+var _require2 = __webpack_require__(16),
+ ServerAPI = _require2.ServerAPI;
+var PcLogoLink = __webpack_require__(193);
+var _require3 = __webpack_require__(501),
+ PathwayResultsView = _require3.PathwayResultsView;
+var _require4 = __webpack_require__(502),
+ GeneResultsView = _require4.GeneResultsView;
+var _require5 = __webpack_require__(63),
+ TimeoutError = _require5.TimeoutError;
+var _require6 = __webpack_require__(73),
+ ErrorMessage = _require6.ErrorMessage;
+var _require7 = __webpack_require__(503),
+ FeatureView = _require7.FeatureView;
+var _require8 = __webpack_require__(94),
+ Contribute = _require8.Contribute;
+var Search = /*#__PURE__*/function (_React$Component) {
+ function Search(props) {
+ var _this;
+ _classCallCheck(this, Search);
+ _this = _callSuper(this, Search, [props]);
+ var query = queryString.parse(props.location.search);
+ _this.state = {
+ query: _.assign({
+ q: '',
+ type: 'Pathway',
+ datasource: []
+ }, query),
+ geneResults: null,
+ searchHits: null,
+ feature: null,
+ dataSources: [],
+ loading: false,
+ error: null,
+ PC_URL: null
+ };
+ return _this;
+ }
+ _inherits(Search, _React$Component);
+ return _createClass(Search, [{
+ key: "getSearchResult",
+ value: function getSearchResult() {
+ var _this2 = this;
+ var state = this.state;
+ var query = state.query;
+ if (query.q !== '') {
+ this.setState({
+ loading: true
+ });
+ ServerAPI.search(query).then(function (res) {
+ var genes = res.genes,
+ searchHits = res.searchHits,
+ feature = res.feature,
+ dataSources = res.dataSources;
+ _this2.setState({
+ geneResults: genes,
+ searchHits: searchHits,
+ feature: feature,
+ dataSources: dataSources,
+ loading: false,
+ error: null
+ });
+ return null; // Bluebird warning
+ }).catch(function (e) {
+ return _this2.setState({
+ error: e,
+ loading: false
+ });
+ });
+ }
+ }
+ }, {
+ key: "componentDidMount",
+ value: function componentDidMount() {
+ var _this3 = this;
+ this.getSearchResult();
+ return ServerAPI.getPCURL().then(function (PC_URL) {
+ return _this3.setState({
+ PC_URL: PC_URL
+ });
+ });
+ }
+ }, {
+ key: "onSearchValueChange",
+ value: function onSearchValueChange(e) {
+ // if the user presses enter, submit the query
+ if (e.which && e.which === 13) {
+ this.submitSearchQuery(e);
+ } else {
+ var newQueryState = _.assign({}, this.state.query);
+ newQueryState.q = e.target.value;
+ this.setState({
+ query: newQueryState
+ });
+ }
+ }
+ }, {
+ key: "setAndSubmitSearchQuery",
+ value: function setAndSubmitSearchQuery(query) {
+ var _this4 = this;
+ var state = this.state;
+ if (!state.searchLoading) {
+ var newQueryState = _.assign({}, state.query, query);
+ this.setState({
+ query: newQueryState
+ }, function () {
+ return _this4.submitSearchQuery();
+ });
+ }
+ }
+ }, {
+ key: "submitSearchQuery",
+ value: function submitSearchQuery() {
+ var props = this.props;
+ var state = this.state;
+ var query = state.query;
+ props.history.push({
+ pathname: '/search',
+ search: queryString.stringify(query),
+ state: {}
+ });
+ this.getSearchResult();
+ }
+ }, {
+ key: "componentWillReceiveProps",
+ value: function componentWillReceiveProps(nextProps) {
+ var _this5 = this;
+ var nextSearch = nextProps.location.search;
+ if (this.props.location.search !== nextSearch) {
+ this.setState({
+ query: _.assign({
+ q: '',
+ type: 'Pathway',
+ datasource: []
+ }, queryString.parse(nextSearch))
+ }, function () {
+ _this5.getSearchResult();
+ });
+ }
+ }
+ }, {
+ key: "render",
+ value: function render() {
+ var _this6 = this;
+ var _this$state = this.state,
+ geneResults = _this$state.geneResults,
+ searchHits = _this$state.searchHits,
+ feature = _this$state.feature,
+ query = _this$state.query,
+ loading = _this$state.loading,
+ dataSources = _this$state.dataSources,
+ PC_URL = _this$state.PC_URL;
+ var searchListing = h(Loader, {
+ loaded: !loading,
+ options: {
+ left: '50%',
+ color: '#16A085'
+ }
+ }, [h('div.search-results-header', [h('p.search-results-header-title', {
+ className: classNames({
+ 'hidden': _.isEmpty(geneResults) && _.isEmpty(searchHits)
+ })
+ }, 'Explore how your query is connected to millions of curated interactions'), h('p.search-results-header-subtitle', ['Pathway Commons accepts contributions - ', h('a.plain-link', {
+ href: "".concat(FACTOID_URL),
+ target: '_blank'
+ }, 'add interactions from your publication')])]), h('div.search-results-content', [h(FeatureView, {
+ feature: feature
+ }), h(GeneResultsView, {
+ geneResults: geneResults
+ }), h(PathwayResultsView, {
+ searchHits: searchHits,
+ query: query,
+ controller: this,
+ dataSources: dataSources,
+ hasFeature: feature != null
+ })])]);
+ var errorMessage;
+ if (this.props.notFoundError) {
+ errorMessage = h(ErrorMessage, {
+ title: 'We couldn\'t find the resource you are looking for',
+ body: 'Check the location and try again.'
+ });
+ } else if (this.state.error instanceof TimeoutError) {
+ errorMessage = h(ErrorMessage, {
+ title: 'This is taking longer than expected',
+ body: 'Try again later.'
+ });
+ } else if (this.state.error) {
+ errorMessage = h(ErrorMessage);
+ }
+ var searchBody = errorMessage ? errorMessage : searchListing;
+ return h('div.search', [h('div.search-nav-links', [h('a', {
+ href: PC_URL,
+ target: '_blank'
+ }, 'About'), h('a', {
+ href: PC_URL + '#faq',
+ target: '_blank'
+ }, 'FAQ'), h('a', {
+ href: PC_URL + '#training',
+ target: '_blank'
+ }, 'Training'), h('a', {
+ href: PC_URL + '#data',
+ target: '_blank'
+ }, 'Data'), h('a', {
+ href: PC_URL + '#contact',
+ target: '_blank'
+ }, 'Contact'), h(Contribute, {
+ text: 'Contribute'
+ })]), h('div.search-header', [h('div.search-branding', [h(PcLogoLink, {
+ className: 'search-logo'
+ }), h('div.search-branding-descriptor', [h('h2.search-subtitle', 'Pathway Commons'), h('h1.search-title', 'Search')])]), h('div.search-searchbar-container', {
+ ref: function ref(dom) {
+ return _this6.searchBar = dom;
+ }
+ }, [h('div.search-searchbar', [h('input', {
+ type: 'text',
+ placeholder: 'Enter pathway name or gene names',
+ value: query.q,
+ maxLength: 250,
+ // 250 chars max of user input
+ onChange: function onChange(e) {
+ return _this6.onSearchValueChange(e);
+ },
+ onKeyPress: function onKeyPress(e) {
+ return _this6.onSearchValueChange(e);
+ }
+ }), h(Link, {
+ to: {
+ pathname: '/search',
+ search: queryString.stringify(query)
+ },
+ className: "search-search-button"
+ }, [h('i.material-icons', 'search')])]), h('div.search-suggestions', ['e.g. ', h(Link, {
+ to: {
+ pathname: '/search',
+ search: queryString.stringify(_.assign({}, query, {
+ q: 'cell cycle'
+ }))
+ }
+ }, 'cell cycle, '), h(Link, {
+ to: {
+ pathname: '/search',
+ search: queryString.stringify(_.assign({}, query, {
+ q: 'SRC TLN1 DLC1 PXN VCL KANK1'
+ }))
+ }
+ }, 'SRC TLN1 DLC1 PXN VCL KANK1, '), h(Link, {
+ to: {
+ pathname: '/search',
+ search: queryString.stringify(_.assign({}, query, {
+ q: 'uniprot:Q9Y490'
+ }))
+ }
+ }, 'uniprot:Q9Y490')])])]), h('div.search-body', [searchBody])]);
+ }
+ }]);
+}(React.Component);
+module.exports = Search;
+
+/***/ }),
+
+/***/ 501:
+/***/ (function(module, exports, __webpack_require__) {
+
+function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
+function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
+function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
+function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
+function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
+function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
+function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
+function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
+function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
+function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
+function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
+function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
+function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
+function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
+var React = __webpack_require__(1);
+var h = __webpack_require__(2);
+var Link = __webpack_require__(60).Link;
+var queryString = __webpack_require__(37);
+var _ = __webpack_require__(6);
+var classNames = __webpack_require__(14);
+var _require = __webpack_require__(73),
+ ErrorMessage = _require.ErrorMessage;
+var PathwayResultsView = /*#__PURE__*/function (_React$Component) {
+ function PathwayResultsView() {
+ _classCallCheck(this, PathwayResultsView);
+ return _callSuper(this, PathwayResultsView, arguments);
+ }
+ _inherits(PathwayResultsView, _React$Component);
+ return _createClass(PathwayResultsView, [{
+ key: "render",
+ value: function render() {
+ var _this$props = this.props,
+ pathwayResults = _this$props.searchHits,
+ controller = _this$props.controller,
+ query = _this$props.query,
+ dataSources = _this$props.dataSources,
+ hasFeature = _this$props.hasFeature;
+ var curDatasource = query.datasource;
+ var sources = dataSources.filter(function (source) {
+ return query.type === 'Pathway' ? source.numPathways : source.numInteractions;
+ });
+ var noPathwaysMsg = h(ErrorMessage, {
+ title: 'Your search didn\'t match any pathways',
+ footer: 'Try different keywords or gene names.'
+ });
+ if (pathwayResults === null) {
+ return null;
+ }
+ var searchList = pathwayResults.map(function (result, index) {
+ var dsInfo = _.get(result, 'sourceInfo', '');
+ var iconUrl = dsInfo.iconUrl || '';
+ var name = dsInfo.name || '';
+ var pathwayTitle = result.name;
+ var topHit = index === 0;
+ var hasPreview = result.previewUrl;
+ var showPreview = topHit && hasPreview;
+ var item;
+ var itemLink = function itemLink(children) {
+ return h(Link, {
+ className: 'plain-link',
+ to: {
+ pathname: '/pathways',
+ search: queryString.stringify({
+ uri: result.uri
+ })
+ },
+ target: '_blank'
+ }, children || 'N/A');
+ };
+ var itemPreview = h('img.search-item-preview', {
+ src: result.previewUrl
+ });
+ var itemInfo = function itemInfo(title) {
+ return h('div.search-item-info', [h('div.search-item-icon', [h('img', {
+ src: iconUrl
+ })]), h('div.search-item-content', [title, h('p.search-item-content-datasource', " ".concat(name)), h('p.search-item-content-participants', "".concat(result.numParticipants, " Participants"))])]);
+ };
+ if (showPreview) {
+ // Wrap the entire item in a link
+ item = itemLink([itemInfo(pathwayTitle), itemPreview]);
+ } else {
+ // Associate the link with the content
+ item = itemInfo(itemLink(pathwayTitle));
+ }
+ return h('div.search-item', {
+ className: classNames({
+ 'preview': showPreview
+ })
+ }, item);
+ });
+ var searchResultFilter = h('div.search-filters', [h('select.search-datasource-filter', {
+ value: !Array.isArray(curDatasource) ? curDatasource : '',
+ multiple: false,
+ onChange: function onChange(e) {
+ return controller.setAndSubmitSearchQuery({
+ datasource: e.target.value
+ });
+ }
+ }, [h('option', {
+ value: []
+ }, 'Any datasource')].concat(sources.map(function (ds) {
+ return h('option', {
+ value: [ds.identifier]
+ }, ds.name);
+ })))]);
+ var header = h('h3.search-pathways-header', pathwayResults.length ? "Pathways (".concat(searchList.length, ")") : null);
+ var filter = pathwayResults.length || curDatasource.length ? searchResultFilter : null;
+ var listing = pathwayResults.length || hasFeature ? searchList : [noPathwaysMsg];
+ return h('div.search-pathway-results', [h('div.search-tools', [header, filter])].concat(_toConsumableArray(listing)));
+ }
+ }]);
+}(React.Component);
+module.exports = {
+ PathwayResultsView: PathwayResultsView
+};
+
+/***/ }),
+
+/***/ 502:
+/***/ (function(module, exports, __webpack_require__) {
+
+function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
+function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
+function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
+function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
+function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
+function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
+function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
+function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
+function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
+function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
+function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
+function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
+function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
+var React = __webpack_require__(1);
+var h = __webpack_require__(2);
+var queryString = __webpack_require__(37);
+var _ = __webpack_require__(6);
+var MIN_GENE_COUNT_ENRICHMENT = 5;
+var _require = __webpack_require__(24),
+ NS_HGNC_SYMBOL = _require.NS_HGNC_SYMBOL,
+ NS_GENECARDS = _require.NS_GENECARDS,
+ NS_NCBI_GENE = _require.NS_NCBI_GENE,
+ NS_UNIPROT = _require.NS_UNIPROT;
+var _require2 = __webpack_require__(55),
+ AppCard = _require2.AppCard;
+var SUPPORTED_COLLECTIONS = new Map([[NS_GENECARDS, 'GeneCards'], [NS_HGNC_SYMBOL, 'HGNC'], [NS_NCBI_GENE, 'NCBI Gene'], [NS_UNIPROT, 'UniProt']]);
+var EntitySummaryBox = /*#__PURE__*/function (_React$Component) {
+ function EntitySummaryBox() {
+ _classCallCheck(this, EntitySummaryBox);
+ return _callSuper(this, EntitySummaryBox, arguments);
+ }
+ _inherits(EntitySummaryBox, _React$Component);
+ return _createClass(EntitySummaryBox, [{
+ key: "render",
+ value: function render() {
+ var geneInfo = this.props.geneInfo;
+ var geneSymbol = geneInfo.geneSymbol,
+ summary = geneInfo.summary;
+ var displayName = summary.displayName,
+ xrefLinks = summary.xrefLinks;
+
+ // sometimes duplicated namespace/uri pairs are received e.g. uniprot/tp53 twice
+ var sortedLinks = _.uniqWith(xrefLinks.sort(function (p1, p2) {
+ return p1.namespace > p2.namespace ? 1 : -1;
+ }), function (p1, p2) {
+ return p1.namespace === p2.namespace;
+ }).map(function (link) {
+ return h('a.plain-link', {
+ href: link.uri,
+ target: '_blank'
+ }, SUPPORTED_COLLECTIONS.get(link.namespace));
+ });
+ return h('div.entity-summary-box', [h('h5.entity-subtitle', displayName), h('h3.entity-title', geneSymbol), h('div.entity-links-container', _toConsumableArray(sortedLinks))]);
+ }
+ }]);
+}(React.Component);
+var GeneResultsView = /*#__PURE__*/function (_React$Component2) {
+ function GeneResultsView(props) {
+ var _this;
+ _classCallCheck(this, GeneResultsView);
+ _this = _callSuper(this, GeneResultsView, [props]);
+ _defineProperty(_this, "checkScroll", function () {
+ if (_this.scrollContainerRef.current) {
+ var _this$scrollContainer = _this.scrollContainerRef.current,
+ scrollLeft = _this$scrollContainer.scrollLeft,
+ scrollWidth = _this$scrollContainer.scrollWidth,
+ clientWidth = _this$scrollContainer.clientWidth;
+ var geneResults = _this.props.geneResults;
+ _this.setState({
+ showLeftButton: scrollLeft > 0 && geneResults.length > _this.visibleItems,
+ showRightButton: scrollLeft < scrollWidth - clientWidth && geneResults.length > _this.visibleItems
+ });
+ }
+ });
+ _defineProperty(_this, "scroll", function (direction) {
+ if (_this.scrollContainerRef.current) {
+ var container = _this.scrollContainerRef.current;
+ var cardWidth = container.querySelector('.card').offsetWidth;
+ var containerWidth = container.clientWidth;
+ var scrollAmount = Math.floor(containerWidth / cardWidth) * cardWidth;
+ var newScrollLeft = container.scrollLeft + (direction === 'left' ? -scrollAmount : scrollAmount);
+ container.scrollTo({
+ left: newScrollLeft,
+ behavior: 'smooth'
+ });
+ }
+ });
+ _this.state = {
+ showLeftButton: false,
+ showRightButton: false
+ };
+ _this.scrollContainerRef = React.createRef();
+ _this.itemWidth = 20; // in em units
+ _this.visibleItems = 3;
+ return _this;
+ }
+ _inherits(GeneResultsView, _React$Component2);
+ return _createClass(GeneResultsView, [{
+ key: "componentDidMount",
+ value: function componentDidMount() {
+ var _this$scrollContainer2;
+ this.checkScroll();
+ (_this$scrollContainer2 = this.scrollContainerRef.current) === null || _this$scrollContainer2 === void 0 || _this$scrollContainer2.addEventListener('scroll', this.checkScroll);
+ }
+ }, {
+ key: "componentWillUnmount",
+ value: function componentWillUnmount() {
+ var _this$scrollContainer3;
+ (_this$scrollContainer3 = this.scrollContainerRef.current) === null || _this$scrollContainer3 === void 0 || _this$scrollContainer3.removeEventListener('scroll', this.checkScroll);
+ }
+ }, {
+ key: "getEnrichmentAppInfo",
+ value: function getEnrichmentAppInfo(geneResults, searchString) {
+ var enabled = geneResults.length >= MIN_GENE_COUNT_ENRICHMENT;
+ var hint = "Requires at least ".concat(MIN_GENE_COUNT_ENRICHMENT, " genes.");
+ var linkPath = '/enrichment';
+ var url = "".concat(linkPath, "/?").concat(searchString);
+ var imageClass = 'enrichment-logo';
+ var title = 'Enrichment';
+ var body = 'Explore a network of pathways that contain genes identified in your query.';
+ return {
+ enabled: enabled,
+ hint: hint,
+ url: url,
+ imageClass: imageClass,
+ title: title,
+ body: body,
+ linkifyContent: true
+ };
+ }
+ }, {
+ key: "getInteractionsAppInfo",
+ value: function getInteractionsAppInfo(geneResults, searchString) {
+ var enabled = geneResults.length > 0;
+ var hint = "Requires one recognized gene.";
+ var linkPath = '/interactions';
+ var url = "".concat(linkPath, "/?").concat(searchString);
+ var imageClass = 'interactions-logo';
+ var title = 'Interactions';
+ var body = 'Visualize interactions between the genes identified in your query.';
+ return {
+ enabled: enabled,
+ hint: hint,
+ url: url,
+ imageClass: imageClass,
+ title: title,
+ body: body,
+ linkifyContent: true
+ };
+ }
+ }, {
+ key: "render",
+ value: function render() {
+ var _this2 = this;
+ var geneResults = this.props.geneResults;
+ var _this$state = this.state,
+ showLeftButton = _this$state.showLeftButton,
+ showRightButton = _this$state.showRightButton;
+ if (geneResults === null || geneResults.length === 0) {
+ return null;
+ }
+ var sources = geneResults.map(function (geneInfo) {
+ return geneInfo.geneSymbol;
+ });
+ var searchString = queryString.stringify({
+ source: sources.join(',')
+ });
+ var appsInfos = [this.getInteractionsAppInfo(geneResults, searchString), this.getEnrichmentAppInfo(geneResults, searchString)].map(function (info) {
+ return h(AppCard, info);
+ });
+ return h('div.search-genes-results', [h('h3.search-genes-header', "Recognized genes (".concat(geneResults.length, ")")), h('div.search-genes-scroll-container', [showLeftButton && h('button.scroll-caret-button.left', {
+ onClick: function onClick() {
+ return _this2.scroll('left');
+ },
+ disabled: !showLeftButton,
+ className: showLeftButton ? 'active' : 'inactive'
+ }, [h('i.icon.icon-chevron-left')]), h('div.search-genes-list', {
+ ref: this.scrollContainerRef,
+ onScroll: this.checkScroll
+ }, _toConsumableArray(geneResults.map(function (geneInfo) {
+ return h('div.card', [h(EntitySummaryBox, {
+ geneInfo: geneInfo
+ })]);
+ }))), showRightButton && h('button.scroll-caret-button.right', {
+ onClick: function onClick() {
+ return _this2.scroll('right');
+ },
+ disabled: !showRightButton,
+ className: showRightButton ? 'active' : 'inactive'
+ }, [h('i.icon.icon-chevron-right')])]), h('div.search-app-cards', appsInfos)]);
+ }
+ }]);
+}(React.Component);
+module.exports = {
+ GeneResultsView: GeneResultsView
+};
+
+/***/ }),
+
+/***/ 503:
+/***/ (function(module, exports, __webpack_require__) {
+
+function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
+function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
+function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
+function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
+function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
+function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
+function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
+function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
+function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
+var React = __webpack_require__(1);
+var h = __webpack_require__(2);
+var _require = __webpack_require__(55),
+ AppCard = _require.AppCard;
+var _ = __webpack_require__(6);
+var _require2 = __webpack_require__(24),
+ NS_BIOFACTOID = _require2.NS_BIOFACTOID,
+ NS_PATHWAYCOMMONS = _require2.NS_PATHWAYCOMMONS;
+var FeatureView = /*#__PURE__*/function (_React$Component) {
+ function FeatureView() {
+ _classCallCheck(this, FeatureView);
+ return _callSuper(this, FeatureView, arguments);
+ }
+ _inherits(FeatureView, _React$Component);
+ return _createClass(FeatureView, [{
+ key: "render",
+ value: function render() {
+ var feature = this.props.feature;
+ if (feature == null) return null;
+ var MAX_AUTHORS = 8;
+ var article = feature.article,
+ pathways = feature.pathways,
+ authors = feature.authors;
+ var pcPathway = _.find(pathways, ['db', NS_PATHWAYCOMMONS]);
+ var biofactoidPathway = _.find(pathways, ['db', NS_BIOFACTOID]);
+
+ // Card Content
+ var body = biofactoidPathway.text;
+
+ // Authors
+ var authorList = authors.map(function (_ref, key) {
+ var href = _ref.url,
+ label = _ref.label;
+ var element = null;
+ if (href) {
+ element = [h('a.plain-link', {
+ href: href,
+ target: '_blank'
+ }, "".concat(label, " ")), h('i.icon.icon-orcid')];
+ } else {
+ element = h('span', label);
+ }
+ return h('li', {
+ key: key
+ }, element);
+ });
+ if (authorList.length > MAX_AUTHORS) {
+ // Abbreviate when necessary
+ var numFromStart = Math.floor(MAX_AUTHORS / 2);
+ var numFromEnd = Math.ceil(MAX_AUTHORS / 2);
+ authorList = _.concat(_.take(authorList, numFromStart), h('li', '...'), _.takeRight(authorList, numFromEnd));
+ }
+ return h('div.feature-container', [h('div.feature-area.pathway', [h('div.feature-item', [h(AppCard, {
+ url: biofactoidPathway.url,
+ image: h('img', {
+ src: biofactoidPathway.imageSrc
+ }),
+ title: h('div', [h('i.icon.logo-biofactoid'), biofactoidPathway.organism ? h('span', biofactoidPathway.organism) : null]),
+ body: body
+ }), h('a.plain-link', {
+ href: "/pathways?uri=".concat(pcPathway.url),
+ target: '_blank'
+ }, 'Detailed pathway view (SBGN)')])]), h('div.feature-area.article', [h('div.feature-item', [h('div.headline', article.title), h('ul.horizontal-list.feature-detail', authorList), h('div.horizontal-list.feature-detail.feature-detail-links', [h('div.feature-detail-link', [article.doiUrl ? h('a.plain-link', {
+ href: article.doiUrl,
+ target: '_blank'
+ }, article.reference) : h('span', article.reference)]), h('div.feature-detail-link', [article.pubmedUrl ? h('a.plain-link', {
+ href: article.pubmedUrl,
+ target: '_blank'
+ }, 'PubMed') : null])])])]), h('div.feature-area.footer', [h('hr')])]);
+ }
+ }]);
+}(React.Component);
+module.exports = {
+ FeatureView: FeatureView
+};
+
+/***/ }),
+
+/***/ 504:
+/***/ (function(module, exports, __webpack_require__) {
+
+function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
+function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
+function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
+function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
+function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
+function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
+function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
+function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
+function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
+var React = __webpack_require__(1);
+var h = __webpack_require__(2);
+var _ = __webpack_require__(6);
+var queryString = __webpack_require__(37);
+var Loader = __webpack_require__(38);
+var classNames = __webpack_require__(14);
+var config = __webpack_require__(24);
+var CytoscapeService = __webpack_require__(90);
+var _require = __webpack_require__(16),
+ ServerAPI = _require.ServerAPI;
+var InteractionsToolbar = __webpack_require__(505);
+var _require2 = __webpack_require__(55),
+ Popover = _require2.Popover,
+ PcLogoLink = _require2.PcLogoLink,
+ CytoscapeNetwork = _require2.CytoscapeNetwork;
+var _require3 = __webpack_require__(196),
+ interactionsStylesheet = _require3.interactionsStylesheet,
+ interactionsLayoutOpts = _require3.interactionsLayoutOpts,
+ bindEvents = _require3.bindEvents;
+var _require4 = __webpack_require__(63),
+ TimeoutError = _require4.TimeoutError;
+var _require5 = __webpack_require__(73),
+ ErrorMessage = _require5.ErrorMessage;
+var MAX_ELEMENTS_CUTOFF = 3;
+var LIST_ELEMENTS_SHOWN = MAX_ELEMENTS_CUTOFF - 1;
+var InteractionsMenu = __webpack_require__(510);
+var _require6 = __webpack_require__(94),
+ Contribute = _require6.Contribute;
+var Interactions = /*#__PURE__*/function (_React$Component) {
+ function Interactions(props) {
+ var _this;
+ _classCallCheck(this, Interactions);
+ _this = _callSuper(this, Interactions, [props]);
+ _this.state = {
+ cySrv: new CytoscapeService({
+ style: interactionsStylesheet,
+ onMount: bindEvents
+ }),
+ loading: true,
+ sources: _.uniq(queryString.parse(props.location.search).source.split(',')),
+ networkEmpty: false
+ };
+ if (true) {
+ _this.state.cySrv.getPromise().then(function (cy) {
+ return window.cy = cy;
+ });
+ }
+ return _this;
+ }
+ _inherits(Interactions, _React$Component);
+ return _createClass(Interactions, [{
+ key: "loadInteractionsNetwork",
+ value: function loadInteractionsNetwork() {
+ var _this2 = this;
+ var _this$state = this.state,
+ cySrv = _this$state.cySrv,
+ sources = _this$state.sources;
+ var initializeCytoscape = function initializeCytoscape(network) {
+ var cy = cySrv.get();
+ cy.remove('*');
+ cy.add(network);
+ if (network.nodes.length === 0) {
+ _this2.setState({
+ networkEmpty: true,
+ loading: false,
+ error: null
+ });
+ return;
+ }
+ cy.layout(_.assign({}, interactionsLayoutOpts(cy), {
+ stop: function stop() {
+ _this2.setState({
+ loading: false,
+ error: null
+ });
+ }
+ })).run();
+ };
+ ServerAPI.getInteractionGraph({
+ sources: sources
+ }).then(function (result) {
+ initializeCytoscape(_.get(result, 'network', {
+ nodes: [],
+ edges: []
+ }));
+ return null; //http://bluebirdjs.com/docs/warning-explanations.html#warning-a-promise-was-created-in-a-handler-but-was-not-returned-from-it
+ }).catch(function (e) {
+ return _this2.setState({
+ error: e
+ });
+ });
+ }
+ }, {
+ key: "componentWillUnmount",
+ value: function componentWillUnmount() {
+ this.state.cySrv.destroy();
+ }
+ }, {
+ key: "render",
+ value: function render() {
+ var _this3 = this;
+ var _this$state2 = this.state,
+ loading = _this$state2.loading,
+ cySrv = _this$state2.cySrv,
+ activeMenu = _this$state2.activeMenu,
+ sources = _this$state2.sources,
+ networkEmpty = _this$state2.networkEmpty,
+ error = _this$state2.error;
+ var errorMessage;
+ if (networkEmpty) {
+ errorMessage = h(ErrorMessage, {
+ title: 'No interactions to display.',
+ body: 'Try different genes in your search.',
+ footer: null,
+ logo: true
+ });
+ } else if (error instanceof TimeoutError) {
+ errorMessage = h(ErrorMessage, {
+ title: 'This is taking longer than expected',
+ body: 'Try again later.',
+ logo: true
+ });
+ } else if (error) {
+ errorMessage = h(ErrorMessage, {
+ logo: true
+ });
+ }
+ var titleContent = [];
+ if (sources.length === 1) {
+ titleContent.push(h('span', "Interactions between ".concat(sources[0], " and ").concat(config.MAX_SIF_NODES, " other genes")));
+ }
+ if (1 < sources.length && sources.length <= MAX_ELEMENTS_CUTOFF) {
+ titleContent.push(h('span', "Interactions between ".concat(sources.slice(0, sources.length - 1).join(', '), " and ").concat(sources.slice(-1))));
+ }
+ if (sources.length > MAX_ELEMENTS_CUTOFF) {
+ titleContent.push(h('span', "Interactions between ".concat(sources.slice(0, LIST_ELEMENTS_SHOWN).join(', '), " and ")));
+ titleContent.push(h(Popover, {
+ tippy: {
+ position: 'bottom',
+ html: h('div.enrichment-sources-popover', sources.slice(LIST_ELEMENTS_SHOWN).sort().map(function (s) {
+ return h('div', s);
+ }))
+ }
+ }, [h('a.plain-link.enrichment-popover-link', "".concat(sources.length - LIST_ELEMENTS_SHOWN, " other gene(s)"))]));
+ }
+ var appBar = h('div.app-bar.interactions-bar', [h('div.app-bar-branding', [h(PcLogoLink), h('div.app-bar-title', titleContent)]), h(InteractionsToolbar, {
+ cySrv: cySrv,
+ activeMenu: activeMenu,
+ sources: this.state.sources,
+ controller: this
+ }), h(Contribute, {
+ text: 'Add my interactions'
+ })]);
+ var interactionsLegend = h('div.interactions-legend', [h(InteractionsMenu, {
+ cySrv: cySrv
+ })]);
+ var content = !errorMessage ? [h(Loader, {
+ loaded: !loading,
+ options: {
+ left: '50%',
+ color: '#16a085'
+ }
+ }, [appBar, interactionsLegend]), h(CytoscapeNetwork, {
+ cySrv: cySrv,
+ onMount: function onMount() {
+ return _this3.loadInteractionsNetwork();
+ },
+ className: classNames({
+ 'network-loading': loading
+ })
+ })] : [errorMessage];
+ return h('div.interactions', content);
+ }
+ }]);
+}(React.Component);
+module.exports = Interactions;
+
+/***/ }),
+
+/***/ 505:
+/***/ (function(module, exports, __webpack_require__) {
+
+function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
+function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
+function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
+function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
+function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
+function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
+function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
+function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
+function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
+var React = __webpack_require__(1);
+var ReactDom = __webpack_require__(54);
+var h = __webpack_require__(2);
+var Popover = __webpack_require__(72);
+var IconButton = __webpack_require__(71);
+var _require = __webpack_require__(196),
+ interactionsLayoutOpts = _require.interactionsLayoutOpts,
+ searchInteractionNodes = _require.searchInteractionNodes;
+var InteractionsDownloadMenu = __webpack_require__(509);
+var InteractionsToolbar = /*#__PURE__*/function (_React$Component) {
+ function InteractionsToolbar(props) {
+ var _this;
+ _classCallCheck(this, InteractionsToolbar);
+ _this = _callSuper(this, InteractionsToolbar, [props]);
+ _this.state = {
+ searchValue: ''
+ };
+ return _this;
+ }
+ _inherits(InteractionsToolbar, _React$Component);
+ return _createClass(InteractionsToolbar, [{
+ key: "handleNodeSearchChange",
+ value: function handleNodeSearchChange(searchVal) {
+ var _this2 = this;
+ this.setState({
+ searchValue: searchVal
+ }, function () {
+ return searchInteractionNodes(_this2.props.cySrv.get(), searchVal);
+ });
+ }
+ }, {
+ key: "focusNodeSearch",
+ value: function focusNodeSearch() {
+ ReactDom.findDOMNode(this).querySelector('.element-search-input').focus();
+ }
+ }, {
+ key: "render",
+ value: function render() {
+ var _this3 = this;
+ var cySrv = this.props.cySrv;
+ var searchValue = this.state.searchValue;
+ var cy = cySrv.get();
+ var sources = this.props.sources || ['download'];
+ return h('div.app-toolbar', [h(Popover, {
+ tippy: {
+ position: 'bottom',
+ html: h(InteractionsDownloadMenu, {
+ cySrv: cySrv,
+ sources: sources
+ })
+ }
+ }, [h(IconButton, {
+ description: 'Downloads',
+ icon: 'file_download'
+ })]), h(IconButton, {
+ description: 'Fit to screen',
+ onClick: function onClick() {
+ return cy.animate({
+ fit: {
+ eles: cy.nodes().filter(function (n) {
+ return !n.hasClass('type-hidden') && !n.hasClass('metric-hidden');
+ }),
+ padding: 25
+ },
+ easing: 'ease-in-out'
+ });
+ },
+ isActive: false,
+ icon: 'fullscreen'
+ }), h(IconButton, {
+ description: 'Reset arrangement',
+ onClick: function onClick() {
+ return cy.layout(interactionsLayoutOpts(cy)).run();
+ },
+ isActive: false,
+ icon: 'replay'
+ }), h('div.element-search', [h('input.element-search-input.input-round.input-joined', {
+ value: searchValue,
+ onChange: function onChange(e) {
+ return _this3.handleNodeSearchChange(e.target.value);
+ },
+ type: 'text',
+ placeholder: 'Search'
+ }), h('button.element-search-clear', {
+ onClick: function onClick() {
+ _this3.handleNodeSearchChange('');
+ _this3.focusNodeSearch();
+ }
+ }, [h('i.material-icons', 'close')])])]);
+ }
+ }]);
+}(React.Component);
+module.exports = InteractionsToolbar;
+
+/***/ }),
+
+/***/ 506:
+/***/ (function(module, exports, __webpack_require__) {
+
+function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
+function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
+function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
+function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
+function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
+function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
+function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
+function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
+function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
+function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
+function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
+function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
+function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
+function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
+var React = __webpack_require__(1);
+var h = __webpack_require__(2);
+var _ = __webpack_require__(6);
+var _require = __webpack_require__(24),
+ NS_GENECARDS = _require.NS_GENECARDS,
+ NS_NCBI_GENE = _require.NS_NCBI_GENE,
+ NS_HGNC_SYMBOL = _require.NS_HGNC_SYMBOL,
+ NS_UNIPROT = _require.NS_UNIPROT;
+var InteractionsNodeTooltip = /*#__PURE__*/function (_React$Component) {
+ function InteractionsNodeTooltip() {
+ _classCallCheck(this, InteractionsNodeTooltip);
+ return _callSuper(this, InteractionsNodeTooltip, arguments);
+ }
+ _inherits(InteractionsNodeTooltip, _React$Component);
+ return _createClass(InteractionsNodeTooltip, [{
+ key: "render",
+ value: function render() {
+ var _this$props = this.props,
+ node = _this$props.node,
+ geneMetadata = _this$props.geneMetadata;
+ var xrefLinks = _.get(geneMetadata, 'summary.xrefLinks', []);
+ var description = _.get(geneMetadata, 'summary.description', '');
+ var aliases = _.get(geneMetadata, 'summary.aliases', []);
+ var title = node.data('id');
+ var links = [];
+ xrefLinks.forEach(function (link) {
+ var name;
+ var url = link.uri;
+ switch (link.namespace) {
+ case NS_HGNC_SYMBOL:
+ name = 'HGNC';
+ break;
+ case NS_UNIPROT:
+ name = 'UniProt';
+ break;
+ case NS_NCBI_GENE:
+ name = 'NCBI Gene';
+ break;
+ case NS_GENECARDS:
+ name = 'GeneCards';
+ break;
+ default:
+ name = null;
+ }
+ links.push({
+ name: name,
+ url: url
+ });
+ });
+ return h('div.cy-tooltip', [h('div.cy-tooltip-header', [h('h2.cy-tooltip-title', title)]), h('div.cy-tooltip-body', [aliases.length > 0 ? h('div.cy-tooltip-section', [h('div.cy-tooltip-field-name', 'Other names')].concat(_toConsumableArray(aliases.slice(0, 3).map(function (alias) {
+ return h('div.cy-tooltip-field-value', alias);
+ })))) : null, description != '' ? h('div.cy-tooltip-section', [h('div.cy-tooltip-field-name', 'Description'), h('div.cy-tooltip-field-value', description)]) : null]), links.length > 0 ? h('div.cy-tooltip-footer', [h('div.cy-tooltip-section', [h('div.cy-tooltip-field-name', ['Links']), h('div.cy-tooltip-links', links.map(function (link) {
+ var name = link.name,
+ url = link.url;
+ return h('a.plain-link', {
+ href: url,
+ target: '_blank'
+ }, name);
+ }))])]) : null, h('div.cy-tooltip-call-to-action', [h('a', {
+ target: '_blank',
+ href: '/search?q=' + title
+ }, [h('button.call-to-action', "Find Related Pathways")])])]);
+ }
+ }]);
+}(React.Component);
+module.exports = InteractionsNodeTooltip;
+
+/***/ }),
+
+/***/ 507:
+/***/ (function(module, exports, __webpack_require__) {
+
+function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
+function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
+function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
+function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
+function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
+function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
+function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
+function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
+function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
+var React = __webpack_require__(1);
+var h = __webpack_require__(2);
+var queryString = __webpack_require__(37);
+var _require = __webpack_require__(16),
+ ServerAPI = _require.ServerAPI;
+var INTERACTION_TYPES = __webpack_require__(197);
+var InteractionsEdgeTooltip = /*#__PURE__*/function (_React$Component) {
+ function InteractionsEdgeTooltip(props) {
+ var _this;
+ _classCallCheck(this, InteractionsEdgeTooltip);
+ _this = _callSuper(this, InteractionsEdgeTooltip, [props]);
+ var edges = props.edge.parallelEdges();
+ _this.state = {
+ publications: [],
+ publicationsLoaded: false,
+ parallelEdges: edges,
+ selectedEdge: edges.length === 1 ? edges[0] : null
+ };
+ return _this;
+ }
+ _inherits(InteractionsEdgeTooltip, _React$Component);
+ return _createClass(InteractionsEdgeTooltip, [{
+ key: "componentDidMount",
+ value: function componentDidMount() {
+ if (this.state.selectedEdge) {
+ this.getPublications(this.state.selectedEdge);
+ }
+ }
+ }, {
+ key: "getPublications",
+ value: function getPublications(edge) {
+ var _this2 = this;
+ var pubmedIds = edge.data('pubmedIds');
+ this.setState({
+ publicationsLoaded: false
+ }, function () {
+ ServerAPI.getPubmedPublications(pubmedIds).then(function (publications) {
+ _this2.setState({
+ publications: publications,
+ publicationsLoaded: true
+ });
+ }).catch(function () {
+ return _this2.setState({
+ publicationsLoaded: true
+ });
+ }); // swallow;
+ });
+ }
+ }, {
+ key: "selectEdge",
+ value: function selectEdge(edge) {
+ this.setState({
+ selectedEdge: edge
+ });
+ this.getPublications(edge);
+ }
+ }, {
+ key: "deselectEdge",
+ value: function deselectEdge() {
+ this.setState({
+ selectedEdge: null
+ });
+ }
+ }, {
+ key: "renderEdge",
+ value: function renderEdge() {
+ var _this3 = this;
+ var _this$state = this.state,
+ edge = _this$state.selectedEdge,
+ parallelEdges = _this$state.parallelEdges,
+ publicationsLoaded = _this$state.publicationsLoaded,
+ publications = _this$state.publications;
+ var title = edge.data('id');
+ var datasources = edge.data('datasources');
+ var pcIds = edge.data('pcIds');
+ if (!publicationsLoaded) {
+ return h('div.cy-tooltip', [h('div.cy-tooltip-content', [h('div.cy-tooltip-header', [h('h2.cy-tooltip-title', 'Loading...')]), h('div.cy-tooltip-body', [h('div.cy-tooltip-loading-section', [h('i.icon.icon-spinner')])])])]);
+ }
+ var providersList = datasources.map(function (ds) {
+ return h('div', ds);
+ });
+ var publicationList = publications.map(function (publication) {
+ var id = publication.id,
+ title = publication.title,
+ firstAuthor = publication.firstAuthor,
+ date = publication.date,
+ source = publication.source;
+ return h('div.cy-overflow-content', [h('a.plain-link', {
+ href: 'http://bioregistry.io/pubmed:' + id,
+ target: '_blank'
+ }, title), h('div', firstAuthor + ' et al. | ' + source + ' - ' + new Date(date).getFullYear().toString())]);
+ });
+ var detailedViewsList = pcIds.map(function (pcId, index) {
+ return h('a.plain-link.cy-tooltip-number-link', {
+ href: '/pathways?' + queryString.stringify({
+ uri: pcId
+ }),
+ target: '_blank'
+ }, " ".concat(index + 1, " "));
+ });
+ return h('div.cy-tooltip', [h('div.cy-tooltip-header', [parallelEdges.length > 1 ? h('button.plain-button.cy-tooltip-back', {
+ onClick: function onClick() {
+ return _this3.deselectEdge();
+ }
+ }, [
+ // h('i.material-icons', 'arrow_back') // does not work for some reason
+ h('span', '<')]) : null, h('h2.cy-tooltip-title', title)].filter(function (el) {
+ return el != null;
+ })), h('div.cy-tooltip-body', [providersList.length > 0 ? h('div.cy-tooltip-section', [h('div.cy-tooltip-field-name', 'Data Sources'), h('div', providersList)]) : null, publicationList.length > 0 ? h('div.cy-tooltip-section', [h('div.cy-tooltip-field-name', 'Publications'), h('div', publicationList)]) : null, detailedViewsList.length > 0 ? h('div.cy-tooltip-section', [h('div.cy-tooltip-field-name', 'Open a detailed view of this interaction'), h('div.cy-tooltip-links', detailedViewsList)]) : null
+ // h('div.cy-tooltip-section', [
+ // h('div.cy-tooltip-field-name', 'Reactome Links'),
+ // h('div.cy-tooltip-field-value', reactomeIds)
+ // ])
+ ])]);
+ }
+ }, {
+ key: "renderEdgeChoice",
+ value: function renderEdgeChoice() {
+ var _this4 = this;
+ var edges = this.state.parallelEdges;
+ var interactionTypeValues = Object.keys(INTERACTION_TYPES).map(function (k) {
+ return INTERACTION_TYPES[k];
+ });
+ return h('div.cy-tooltip', [h('div.cy-tooltip-header', [h('h2.cy-tooltip-title', 'Choose an interaction')]), h('div.cy-tooltip-body', [h('div.cy-tooltip-edge-entries', edges.map(function (edge) {
+ return h('div.cy-tooltip-edge-entry', [h('a.plain-link.cy-tooltip-edge-link', {
+ onClick: function onClick() {
+ return _this4.selectEdge(edge);
+ }
+ }, [h('span.cy-tooltip-edge-color', {
+ className: 'interactions-color-' + interactionTypeValues.find(function (type) {
+ return edge.hasClass(type);
+ }).toLowerCase()
+ }), h('span.cy-tooltip-edge-name', edge.id())])]);
+ }))])]);
+ }
+ }, {
+ key: "render",
+ value: function render() {
+ var selectedEdge = this.state.selectedEdge;
+ if (selectedEdge) {
+ return this.renderEdge();
+ } else {
+ return this.renderEdgeChoice();
+ }
+ }
+ }]);
+}(React.Component);
+module.exports = InteractionsEdgeTooltip;
+
+/***/ }),
+
+/***/ 508:
+/***/ (function(module, exports, __webpack_require__) {
+
+var cytoscape = __webpack_require__(64);
+var iStylesheet = cytoscape.stylesheet().selector('edge').css({
+ 'opacity': 0.4,
+ 'line-color': '#555',
+ 'width': 4,
+ 'curve-style': 'haystack',
+ 'haystack-radius': 0.25
+}).selector('.Modification').css({
+ 'line-color': '#ffc28b'
+}).selector('.Binding').css({
+ 'line-color': '#8bd8dd'
+}).selector('.Expression').css({
+ 'line-color': '#f4a2a3'
+}).selector('.Other').css({
+ 'line-color': '#949494'
+}).selector('node[class@="ball"]').css({
+ 'font-size': 20,
+ 'color': '#fff',
+ 'background-color': '#555',
+ 'text-outline-color': '#555',
+ 'text-outline-width': 4,
+ 'width': 50,
+ 'height': 50,
+ 'label': 'data(id)',
+ 'text-halign': 'center',
+ 'text-valign': 'center'
+}).selector('.highlighted').css({
+ 'opacity': 1
+}).selector('.unhighlighted').css({
+ 'opacity': 0.2
+}).selector('.metric-hidden').css({
+ 'display': 'none'
+}).selector('.type-hidden').css({
+ 'display': 'none'
+}).selector(".matched").css({
+ 'border-color': 'yellow',
+ 'border-width': 10,
+ 'background-color': '#606000',
+ 'text-outline-color': '#606000'
+}).selector('node[[degree = 0]]').css({
+ 'display': 'none'
+}).selector('node[?queried]').css({
+ 'display': 'element',
+ 'width': 75,
+ 'height': 75
+}).selector('node:selected').css({
+ 'background-color': '#0169d9',
+ 'text-outline-color': '#0169d9'
+}).selector('edge:selected').css({
+ 'z-index': 999,
+ 'opacity': 1
+});
+module.exports = iStylesheet;
+
+/***/ }),
+
+/***/ 509:
+/***/ (function(module, exports, __webpack_require__) {
+
+function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
+function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
+function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
+function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
+function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
+function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
+function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
+function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
+function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
+var React = __webpack_require__(1);
+var h = __webpack_require__(2);
+var saveAs = __webpack_require__(91).saveAs;
+var Loader = __webpack_require__(38);
+var InteractionsDownloadMenu = /*#__PURE__*/function (_React$Component) {
+ function InteractionsDownloadMenu(props) {
+ var _this;
+ _classCallCheck(this, InteractionsDownloadMenu);
+ _this = _callSuper(this, InteractionsDownloadMenu, [props]);
+ _this.state = {
+ loading: false
+ };
+ return _this;
+ }
+ _inherits(InteractionsDownloadMenu, _React$Component);
+ return _createClass(InteractionsDownloadMenu, [{
+ key: "downloadPng",
+ value: function downloadPng() {
+ var _this2 = this;
+ var _this$props = this.props,
+ cySrv = _this$props.cySrv,
+ sources = _this$props.sources;
+ var cy = cySrv.get();
+ var saveCyPng = function saveCyPng() {
+ setTimeout(function () {
+ saveAs(cy.png({
+ output: 'blob',
+ scale: 2,
+ bg: 'white',
+ full: true
+ }), "".concat(sources.join('_'), "_interactions.png"));
+ _this2.setState({
+ loading: false
+ });
+ }, 1);
+ };
+ this.setState({
+ loading: true
+ }, function () {
+ return saveCyPng();
+ });
+ }
+ }, {
+ key: "downloadSif",
+ value: function downloadSif() {
+ var _this$props2 = this.props,
+ cySrv = _this$props2.cySrv,
+ sources = _this$props2.sources;
+ var edgeIds = cySrv.get().edges().map(function (edge) {
+ return edge.data('id');
+ }).sort().join('\n');
+ saveAs(new File([edgeIds], "".concat(sources.join('_'), "_interactions.sif"), {
+ type: 'text/plain;charset=utf-8'
+ }));
+ }
+ }, {
+ key: "render",
+ value: function render() {
+ var _this3 = this;
+ return h('div.file-download-menu.interactions-download-menu', [h('h2', 'Download As...'), h('div.file-download-content', [h('div.download-option', {
+ onClick: function onClick() {
+ return _this3.downloadPng();
+ }
+ }, [h('div.download-option-header', [h('h3', 'Image (PNG)')]), h('div.download-option-description', 'Download an image of the entire view')]), h('div.download-option', {
+ onClick: function onClick() {
+ return _this3.downloadSif();
+ }
+ }, [h('div.download-option-header', [h('h3', 'SIF')]), h('div.download-option-description', 'List of interaction pairs to be used with Cytoscape desktop, analysis, and graph algorithms.')]), h(Loader, {
+ loaded: !this.state.loading
+ })])]);
+ }
+ }]);
+}(React.Component);
+module.exports = InteractionsDownloadMenu;
+
+/***/ }),
+
+/***/ 510:
+/***/ (function(module, exports, __webpack_require__) {
+
+function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
+function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
+function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
+function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
+function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
+function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
+function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
+function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
+var React = __webpack_require__(1);
+var h = __webpack_require__(2);
+var classNames = __webpack_require__(14);
+var INTERACTION_TYPES = __webpack_require__(197);
+var InteractionsMenu = /*#__PURE__*/function (_React$Component) {
+ function InteractionsMenu(props) {
+ var _this;
+ _classCallCheck(this, InteractionsMenu);
+ _this = _callSuper(this, InteractionsMenu, [props]);
+ var BINDING = INTERACTION_TYPES.BINDING,
+ MODIFICATION = INTERACTION_TYPES.MODIFICATION,
+ EXPRESSION = INTERACTION_TYPES.EXPRESSION,
+ OTHER = INTERACTION_TYPES.OTHER;
+ _this.state = _defineProperty(_defineProperty(_defineProperty(_defineProperty({}, BINDING, true), MODIFICATION, true), EXPRESSION, true), OTHER, true);
+ return _this;
+ }
+ _inherits(InteractionsMenu, _React$Component);
+ return _createClass(InteractionsMenu, [{
+ key: "toggleIntnType",
+ value: function toggleIntnType(type) {
+ var cySrv = this.props.cySrv;
+ var cy = cySrv.get();
+ var edges = cy.edges(".".concat(type));
+ var nodes = edges.connectedNodes();
+ var nodeHasNoVisibleEdges = function nodeHasNoVisibleEdges(node) {
+ return node.connectedEdges().every(function (edge) {
+ return edge.hasClass('type-hidden') || edge.hasClass('metric-hidden');
+ });
+ };
+ if (this.state[type]) {
+ edges.addClass('type-hidden');
+ nodes.filter(nodeHasNoVisibleEdges).addClass('type-hidden');
+ } else {
+ nodes.removeClass('type-hidden');
+ edges.removeClass('type-hidden');
+ }
+ cy.emit('hide-type');
+ this.setState(_defineProperty({}, type, !this.state[type]));
+ }
+ }, {
+ key: "render",
+ value: function render() {
+ var _this2 = this;
+ var cySrv = this.props.cySrv;
+ var _this$state2 = this.state,
+ Binding = _this$state2.Binding,
+ Expression = _this$state2.Expression,
+ Modification = _this$state2.Modification,
+ Other = _this$state2.Other;
+ var cy = cySrv.get();
+ var hasType = function hasType(cy, type) {
+ return cy.edges(".".concat(type)).length > 0;
+ };
+ var BINDING = INTERACTION_TYPES.BINDING,
+ MODIFICATION = INTERACTION_TYPES.MODIFICATION,
+ EXPRESSION = INTERACTION_TYPES.EXPRESSION,
+ OTHER = INTERACTION_TYPES.OTHER;
+ var hasModifications = hasType(cy, MODIFICATION);
+ var hasExpressions = hasType(cy, EXPRESSION);
+ var hasBindings = hasType(cy, BINDING);
+ var hasOther = hasType(cy, OTHER);
+ var InteractionToggleButton = function InteractionToggleButton(props) {
+ var type = props.type,
+ active = props.active;
+ var legendClass = "interactions-color-".concat(type.toLowerCase());
+ return h('div', {
+ onClick: function onClick() {
+ return _this2.toggleIntnType(type);
+ },
+ className: classNames({
+ 'interactions-filter-button': true,
+ 'interactions-filter-button-active': active
+ })
+ }, [h('div', {
+ className: classNames(_defineProperty(_defineProperty({}, legendClass, true), 'interactions-color', true))
+ }), h('div.interactions-filter-label', type), h('div.interactions-filter-check', [h('i.material-icons', active ? 'check_box' : 'check_box_outline_blank')])]);
+ };
+ return h('div.interactions-sidebar', [hasBindings ? h(InteractionToggleButton, {
+ type: BINDING,
+ active: Binding
+ }) : null, hasExpressions ? h(InteractionToggleButton, {
+ type: EXPRESSION,
+ active: Expression
+ }) : null, hasModifications ? h(InteractionToggleButton, {
+ type: MODIFICATION,
+ active: Modification
+ }) : null, hasOther ? h(InteractionToggleButton, {
+ type: OTHER,
+ active: Other
+ }) : null]);
+ }
+ }]);
+}(React.Component);
+module.exports = InteractionsMenu;
+
+/***/ }),
+
+/***/ 511:
+/***/ (function(module, exports, __webpack_require__) {
+
+function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
+function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, catch: function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
+function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
+function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
+function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
+function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
+function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
+function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
+function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
+function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
+function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
+function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
+var React = __webpack_require__(1);
+var h = __webpack_require__(2);
+var _ = __webpack_require__(6);
+var Loader = __webpack_require__(38);
+var classNames = __webpack_require__(14);
+var queryString = __webpack_require__(37);
+var EnrichmentToolbar = __webpack_require__(512);
+var _require = __webpack_require__(55),
+ PcLogoLink = _require.PcLogoLink,
+ CytoscapeNetwork = _require.CytoscapeNetwork,
+ Popover = _require.Popover;
+var CytoscapeService = __webpack_require__(90);
+var _require2 = __webpack_require__(16),
+ ServerAPI = _require2.ServerAPI;
+var _require3 = __webpack_require__(198),
+ enrichmentLayout = _require3.enrichmentLayout,
+ enrichmentStylesheet = _require3.enrichmentStylesheet,
+ bindEvents = _require3.bindEvents;
+var _require4 = __webpack_require__(63),
+ TimeoutError = _require4.TimeoutError;
+var _require5 = __webpack_require__(73),
+ ErrorMessage = _require5.ErrorMessage;
+var _require6 = __webpack_require__(94),
+ Contribute = _require6.Contribute;
+var MAX_ELEMENTS_CUTOFF = 3;
+var LIST_ELEMENTS_SHOWN = MAX_ELEMENTS_CUTOFF - 1;
+var Enrichment = /*#__PURE__*/function (_React$Component) {
+ function Enrichment(props) {
+ var _this;
+ _classCallCheck(this, Enrichment);
+ _this = _callSuper(this, Enrichment, [props]);
+ _this.state = {
+ cySrv: new CytoscapeService({
+ style: enrichmentStylesheet,
+ onMount: bindEvents
+ }),
+ sources: _.uniq(queryString.parse(props.location.search).source.split(',')),
+ error: null,
+ loading: true,
+ networkEmpty: false
+ };
+ if (true) {
+ _this.state.cySrv.getPromise().then(function (cy) {
+ return window.cy = cy;
+ });
+ }
+ return _this;
+ }
+ _inherits(Enrichment, _React$Component);
+ return _createClass(Enrichment, [{
+ key: "componentDidMount",
+ value: function componentDidMount() {
+ this.loadEnrichment();
+ }
+ }, {
+ key: "loadEnrichment",
+ value: function loadEnrichment() {
+ var _this2 = this;
+ var _this$state = this.state,
+ sources = _this$state.sources,
+ cySrv = _this$state.cySrv;
+ var cy = cySrv.get();
+ var getNetworkJson = /*#__PURE__*/function () {
+ var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
+ var _yield$ServerAPI$enri, pathways, enrichmentNetwork, networkHasZeroNodes;
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
+ while (1) switch (_context.prev = _context.next) {
+ case 0:
+ _context.prev = 0;
+ _context.next = 3;
+ return ServerAPI.enrichmentAPI({
+ query: sources
+ }, 'analysis');
+ case 3:
+ _yield$ServerAPI$enri = _context.sent;
+ pathways = _yield$ServerAPI$enri.pathways;
+ _context.next = 7;
+ return ServerAPI.enrichmentAPI({
+ pathways: pathways
+ }, 'visualization');
+ case 7:
+ enrichmentNetwork = _context.sent;
+ networkHasZeroNodes = enrichmentNetwork.graph.elements.nodes.length === 0;
+ enrichmentNetwork.graph.elements.nodes.forEach(function (node) {
+ var intersection = _.intersection(node.data.geneSet, sources);
+ _.assign(node.data, {
+ intersection: intersection
+ });
+ });
+ cy.remove('*');
+ cy.add({
+ edges: enrichmentNetwork.graph.elements.edges,
+ nodes: enrichmentNetwork.graph.elements.nodes
+ });
+ enrichmentLayout(cy).then(function () {
+ _this2.setState({
+ loading: false,
+ networkEmpty: networkHasZeroNodes,
+ error: null
+ });
+ });
+ _context.next = 18;
+ break;
+ case 15:
+ _context.prev = 15;
+ _context.t0 = _context["catch"](0);
+ _this2.setState({
+ error: _context.t0,
+ loading: false
+ });
+ case 18:
+ case "end":
+ return _context.stop();
+ }
+ }, _callee, null, [[0, 15]]);
+ }));
+ return function getNetworkJson() {
+ return _ref.apply(this, arguments);
+ };
+ }();
+ this.setState({
+ loading: true,
+ networkEmpty: false
+ }, function () {
+ return getNetworkJson();
+ });
+ }
+ }, {
+ key: "render",
+ value: function render() {
+ var _this$state2 = this.state,
+ loading = _this$state2.loading,
+ cySrv = _this$state2.cySrv,
+ networkEmpty = _this$state2.networkEmpty,
+ sources = _this$state2.sources,
+ error = _this$state2.error;
+ var titleContent = [];
+ var errorMessage;
+ if (networkEmpty) {
+ errorMessage = h(ErrorMessage, {
+ title: 'No results to display.',
+ body: 'Try different genes in your search.',
+ footer: null,
+ logo: true
+ });
+ } else if (error instanceof TimeoutError) {
+ errorMessage = h(ErrorMessage, {
+ title: 'This is taking longer than expected',
+ body: 'Try again later.',
+ logo: true
+ });
+ } else if (error) {
+ errorMessage = h(ErrorMessage, {
+ logo: true
+ });
+ }
+ if (sources.length === 1) {
+ titleContent.push(h('span', "Pathways enriched for ".concat(sources[0])));
+ }
+ if (1 < sources.length && sources.length <= MAX_ELEMENTS_CUTOFF) {
+ titleContent.push(h('span', "Pathways enriched for ".concat(sources.slice(0, sources.length - 1).join(', '), " and ").concat(sources.slice(-1))));
+ }
+ if (sources.length > MAX_ELEMENTS_CUTOFF) {
+ titleContent.push(h('span', "Pathways enriched for ".concat(sources.slice(0, LIST_ELEMENTS_SHOWN).join(', '), " and ")));
+ titleContent.push(h(Popover, {
+ tippy: {
+ position: 'bottom',
+ html: h('div.enrichment-sources-popover', sources.slice(LIST_ELEMENTS_SHOWN).sort().map(function (s) {
+ return h('div', s);
+ }))
+ }
+ }, [h('a.plain-link.enrichment-popover-link', "".concat(sources.length - LIST_ELEMENTS_SHOWN, " other gene(s)"))]));
+ }
+ var appBar = h('div.app-bar.interactions-bar', [h('div.app-bar-branding', [h(PcLogoLink), h('div.app-bar-title', titleContent)]), h(EnrichmentToolbar, {
+ cySrv: cySrv,
+ sources: this.state.sources,
+ controller: this
+ }), h(Contribute, {
+ text: 'Add my pathway'
+ })]);
+ return !errorMessage ? h('div.enrichment', [h(Loader, {
+ loaded: !loading,
+ options: {
+ left: '50%',
+ color: '#16a085'
+ }
+ }, [appBar]), h(CytoscapeNetwork, {
+ cySrv: cySrv,
+ className: classNames({
+ 'network-loading': loading
+ })
+ })]) : errorMessage;
+ }
+ }]);
+}(React.Component);
+module.exports = Enrichment;
+
+/***/ }),
+
+/***/ 512:
+/***/ (function(module, exports, __webpack_require__) {
+
+function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
+function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
+function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
+function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
+function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
+function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
+function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
+function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
+function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
+var React = __webpack_require__(1);
+var ReactDom = __webpack_require__(54);
+var h = __webpack_require__(2);
+var _require = __webpack_require__(55),
+ Popover = _require.Popover,
+ IconButton = _require.IconButton;
+var EnrichmentDownloadMenu = __webpack_require__(513);
+var _require2 = __webpack_require__(198),
+ enrichmentLayout = _require2.enrichmentLayout,
+ searchEnrichmentNodes = _require2.searchEnrichmentNodes;
+var EnrichmentToolbar = /*#__PURE__*/function (_React$Component) {
+ function EnrichmentToolbar(props) {
+ var _this;
+ _classCallCheck(this, EnrichmentToolbar);
+ _this = _callSuper(this, EnrichmentToolbar, [props]);
+ _this.state = {
+ searchValue: ''
+ };
+ return _this;
+ }
+ _inherits(EnrichmentToolbar, _React$Component);
+ return _createClass(EnrichmentToolbar, [{
+ key: "handleNodeSearchChange",
+ value: function handleNodeSearchChange(searchVal) {
+ var _this2 = this;
+ this.setState({
+ searchValue: searchVal
+ }, function () {
+ return searchEnrichmentNodes(_this2.props.cySrv.get(), searchVal);
+ });
+ }
+ }, {
+ key: "focusNodeSearch",
+ value: function focusNodeSearch() {
+ ReactDom.findDOMNode(this).querySelector('.element-search-input').focus();
+ }
+ }, {
+ key: "render",
+ value: function render() {
+ var _this3 = this;
+ var cySrv = this.props.cySrv;
+ var searchValue = this.state.searchValue;
+ var cy = cySrv.get();
+ return h('div.app-toolbar', [h(Popover, {
+ tippy: {
+ position: 'bottom',
+ html: h(EnrichmentDownloadMenu, {
+ cySrv: cySrv
+ })
+ }
+ }, [h(IconButton, {
+ description: 'Downloads',
+ icon: 'file_download'
+ })]), h(IconButton, {
+ description: 'Fit to screen',
+ onClick: function onClick() {
+ return cy.animate({
+ fit: {
+ padding: 25
+ },
+ easing: 'ease-in-out'
+ });
+ },
+ isActive: false,
+ icon: 'fullscreen'
+ }), h(IconButton, {
+ description: 'Reset arrangement',
+ onClick: function onClick() {
+ return enrichmentLayout(cy);
+ },
+ isActive: false,
+ icon: 'replay'
+ }), h('div.element-search', [h('input.element-search-input.input-round.input-joined', {
+ value: searchValue,
+ onChange: function onChange(e) {
+ return _this3.handleNodeSearchChange(e.target.value);
+ },
+ type: 'text',
+ placeholder: 'Search'
+ }), h('button.element-search-clear', {
+ onClick: function onClick() {
+ _this3.handleNodeSearchChange('');
+ _this3.focusNodeSearch();
+ }
+ }, [h('i.material-icons', 'close')])])]);
+ }
+ }]);
+}(React.Component);
+module.exports = EnrichmentToolbar;
+
+/***/ }),
+
+/***/ 513:
+/***/ (function(module, exports, __webpack_require__) {
+
+function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
+function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
+function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
+function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
+function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
+function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
+function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
+function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
+function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
+var React = __webpack_require__(1);
+var h = __webpack_require__(2);
+var saveAs = __webpack_require__(91).saveAs;
+var Loader = __webpack_require__(38);
+var EnrichmentDownloadMenu = /*#__PURE__*/function (_React$Component) {
+ function EnrichmentDownloadMenu(props) {
+ var _this;
+ _classCallCheck(this, EnrichmentDownloadMenu);
+ _this = _callSuper(this, EnrichmentDownloadMenu, [props]);
+ _this.state = {
+ loading: false
+ };
+ return _this;
+ }
+ _inherits(EnrichmentDownloadMenu, _React$Component);
+ return _createClass(EnrichmentDownloadMenu, [{
+ key: "downloadPng",
+ value: function downloadPng() {
+ var _this2 = this;
+ var cySrv = this.props.cySrv;
+ var cy = cySrv.get();
+ var saveCyPng = function saveCyPng() {
+ setTimeout(function () {
+ saveAs(cy.png({
+ output: 'blob',
+ scale: 2,
+ bg: 'white',
+ full: true
+ }), "enrichment-network.png");
+ _this2.setState({
+ loading: false
+ });
+ }, 1);
+ };
+ this.setState({
+ loading: true
+ }, function () {
+ return saveCyPng();
+ });
+ }
+ }, {
+ key: "downloadJson",
+ value: function downloadJson() {
+ var _this3 = this;
+ var cySrv = this.props.cySrv;
+ var cy = cySrv.get();
+ var saveCyJson = function saveCyJson() {
+ setTimeout(function () {
+ saveAs(new Blob([JSON.stringify(cy.json(), null, 2)], {
+ type: 'text/plain;charset=utf-8'
+ }), "enrichment-network.json");
+ _this3.setState({
+ loading: false
+ });
+ }, 1);
+ };
+ this.setState({
+ loading: true
+ }, function () {
+ return saveCyJson();
+ });
+ }
+ }, {
+ key: "render",
+ value: function render() {
+ var _this4 = this;
+ return h('div.file-download-menu', [h('h2', 'Network Downloads'), h('div.file-download-content', [h('div.download-option', {
+ onClick: function onClick() {
+ return _this4.downloadPng();
+ }
+ }, [h('div.download-option-header', [h('h3', 'Image (PNG)')]), h('div.download-option-description', 'Download an image of the entire view')]), h('div.download-option', {
+ onClick: function onClick() {
+ return _this4.downloadJson();
+ }
+ }, [h('div.download-option-header', [h('h3', 'Cytoscape JSON')]), h('div.download-option-description', 'Download a Cytoscape JSON file, compatible with Cytoscape and Cytoscape.js')]), h(Loader, {
+ loaded: !this.state.loading
+ })])]);
+ }
+ }]);
+}(React.Component);
+module.exports = EnrichmentDownloadMenu;
+
+/***/ }),
+
+/***/ 514:
+/***/ (function(module, exports, __webpack_require__) {
+
+function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
+function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
+function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
+function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
+function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
+function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
+function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
+function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
+function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
+var React = __webpack_require__(1);
+var h = __webpack_require__(2);
+var _ = __webpack_require__(6);
+var _require = __webpack_require__(24),
+ NS_GENE_ONTOLOGY = _require.NS_GENE_ONTOLOGY,
+ NS_REACTOME = _require.NS_REACTOME;
+var _require2 = __webpack_require__(16),
+ ServerAPI = _require2.ServerAPI;
+var EnrichmentTooltip = /*#__PURE__*/function (_React$Component) {
+ function EnrichmentTooltip(props) {
+ var _this;
+ _classCallCheck(this, EnrichmentTooltip);
+ _this = _callSuper(this, EnrichmentTooltip, [props]);
+ _this.state = {
+ name: '',
+ description: '',
+ descriptionLoaded: false
+ };
+ return _this;
+ }
+ _inherits(EnrichmentTooltip, _React$Component);
+ return _createClass(EnrichmentTooltip, [{
+ key: "componentDidMount",
+ value: function componentDidMount() {
+ var _this2 = this;
+ var node = this.props.node;
+ var id = node.data('id');
+ var namespace = node.data('namespace');
+ var descriptionOnFail = 'No description available';
+ if (namespace === NS_GENE_ONTOLOGY) {
+ ServerAPI.getGoInformation(id.replace('GO:', '')).then(function (res) {
+ var description = _.get(res, 'results[0].definition.text', descriptionOnFail);
+ var update = function update() {
+ return _this2.setState({
+ name: NS_GENE_ONTOLOGY.toUpperCase(),
+ description: description,
+ descriptionLoaded: true
+ });
+ };
+ update();
+ }).catch(function () {
+ return _this2.setState({
+ name: NS_GENE_ONTOLOGY.toUpperCase(),
+ descriptionLoaded: true
+ });
+ });
+ }
+ if (namespace === NS_REACTOME) {
+ ServerAPI.getReactomeInformation(id.replace('REAC:', '')).then(function (res) {
+ var description = _.get(res, 'summation[0].text', descriptionOnFail);
+ var update = function update() {
+ return _this2.setState({
+ name: NS_REACTOME.toUpperCase(),
+ description: description,
+ descriptionLoaded: true
+ });
+ };
+ update();
+ }).catch(function () {
+ return _this2.setState({
+ name: NS_REACTOME.toUpperCase(),
+ descriptionLoaded: true
+ });
+ });
+ }
+ }
+ }, {
+ key: "render",
+ value: function render() {
+ var node = this.props.node;
+ var _this$state = this.state,
+ description = _this$state.description,
+ name = _this$state.name;
+ var title = node.data('name');
+ var sharedGeneList = node.data('intersection').sort();
+ var sharedGeneCount = sharedGeneList.length;
+ var url = node.data('uri');
+ if (!this.state.descriptionLoaded) {
+ return h('div.cy-tooltip', [h('div.cy-tooltip-content', [h('div.cy-tooltip-header', [h('h2.cy-tooltip-title', 'Loading...')]), h('div.cy-tooltip-body', [h('div.cy-tooltip-loading-section', [h('i.icon.icon-spinner')])])])]);
+ }
+ var descriptionSection = description ? h('div.cy-tooltip-section', [h('div.cy-tooltip-field-name', 'Description'), h('div.cy-tooltip-field-value', description)]) : null;
+ return h('div.cy-tooltip', [h('div.cy-tooltip-content', [h('div.cy-tooltip-header', [h('h2.cy-tooltip-title', [h('a.plain-link', {
+ href: url,
+ target: '_blank'
+ }, title[0].toUpperCase() + title.substr(1)), h('div.cy-tooltip-type-chip', name)])]), h('div.cy-tooltip-body', [descriptionSection, h('div.cy-tooltip-section', [h('div.cy-tooltip-field-name', 'Genes Shared with Entered List (' + sharedGeneCount + ')'), h('div.cy-tooltip-field-value', sharedGeneList.join(', '))])]), h('div.cy-tooltip-call-to-action', [h('a', {
+ target: '_blank',
+ href: '/search?q=' + title
+ }, [h('button.call-to-action', 'Find Related Pathways')])])])]);
+ }
+ }]);
+}(React.Component);
+module.exports = EnrichmentTooltip;
+
+/***/ }),
+
+/***/ 515:
+/***/ (function(module, exports, __webpack_require__) {
+
+function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
+function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
+function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
+function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
+function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
+var _ = __webpack_require__(6);
+var _require = __webpack_require__(516),
+ stemmer = _require.stemmer;
+var stopWords = __webpack_require__(517);
+var flaggedWords = __webpack_require__(518);
+
+// This module summarizes text for a enrichment cluster.
+// Here is the general algorithm:
+// Input Sanitization
+// 1. tokenize by a list of delimiters e.g. tabs, spaces, newlines, special characters
+// 2. filter the tokens for stop words or flagged words
+// Preprocessing
+// 3. compute the occurences of each token
+// 4. compute the word stem of the token using the Porter Stemmer Algorithm
+// 5. associate each stem with the original token
+// Selection
+// 6. for each stem, get the token associated with the most occurences
+
+// For more context/information:
+// https://tagcrowd.com/faq.html#howto
+// http://wordcloud.cs.arizona.edu/faq.html#q-how-it-works
+// http://snowball.tartarus.org/algorithms/porter/stemmer.html
+
+// Input: String -- representing text labels of pathway names of a given component
+// Output: Array of strings -- representing the most common words that are not stop words or flagged words
+var generateClusterLabels = function generateClusterLabels(text) {
+ var delimiterRegex = /[\t \n\r\f!\\#$%&()*+,.<=>?@[^\\\]`_{|}~\\'"]/;
+ var filterWords = new Set([].concat(_toConsumableArray(stopWords), [flaggedWords]));
+ var wordOccurenceMap = new Map();
+ var stemToWordsMap = new Map();
+ var incrKey = function incrKey(m, k) {
+ if (m.has(k)) {
+ m.set(k, m.get(k) + 1);
+ } else {
+ m.set(k, 1);
+ }
+ };
+ var appendKey = function appendKey(m, k, v) {
+ if (m.has(k)) {
+ m.set(k, m.get(k).add(v));
+ } else {
+ m.set(k, new Set([v]));
+ }
+ };
+
+ // input sanitization
+ var tokens = text.split(delimiterRegex).filter(function (word) {
+ return !filterWords.has(word) && word !== '';
+ });
+
+ // preprocess the tokens -- compute word occurences, compute word stems
+ var wordStems = _.uniq(tokens.map(function (token) {
+ incrKey(wordOccurenceMap, token);
+ var wordStem = stemmer(token.toLowerCase());
+ appendKey(stemToWordsMap, wordStem, token);
+ return wordStem;
+ }));
+
+ // for each stem, get its associated tokens and return the token with the most occurences
+ var words = wordStems.map(function (ws) {
+ var associatedWords = _toConsumableArray(stemToWordsMap.get(ws)).sort(function (w0, w1) {
+ return wordOccurenceMap.get(w1) > wordOccurenceMap.get(w0);
+ });
+ return associatedWords[0];
+ });
+
+ // return all words that appear at least once
+ return words.filter(function (word) {
+ return wordOccurenceMap.get(word) > 1;
+ });
+};
+module.exports = {
+ generateClusterLabels: generateClusterLabels
+};
+
+/***/ }),
+
+/***/ 517:
+/***/ (function(module, exports) {
+
+module.exports = ["a","a's","able","about","above","according","accordingly","across","actually","after","afterwards","again","against","ain't","all","allow","allows","almost","alone","along","already","also","although","always","am","among","amongst","an","and","another","any","anybody","anyhow","anyone","anything","anyway","anyways","anywhere","apart","appear","appreciate","appropriate","are","aren't","around","as","aside","ask","asking","associated","at","available","away","awfully","b","be","became","because","become","becomes","becoming","been","before","beforehand","behind","being","believe","below","beside","besides","best","better","between","beyond","both","brief","but","by","c","c'mon","c's","came","can","can't","cannot","cant","cause","causes","certain","certainly","changes","clearly","co","com","come","comes","concerning","consequently","consider","considering","contain","containing","contains","corresponding","could","couldn't","course","currently","d","definitely","described","despite","did","didn't","different","do","does","doesn't","doing","don't","done","down","downwards","during","e","each","edu","eg","eight","either","else","elsewhere","enough","entirely","especially","et","etc","even","ever","every","everybody","everyone","everything","everywhere","ex","exactly","example","except","f","far","few","fifth","first","five","followed","following","follows","for","former","formerly","forth","four","from","further","furthermore","g","get","gets","getting","given","gives","go","goes","going","gone","got","gotten","greetings","h","had","hadn't","happens","hardly","has","hasn't","have","haven't","having","he","he's","hello","help","hence","her","here","here's","hereafter","hereby","herein","hereupon","hers","herself","hi","him","himself","his","hither","hopefully","how","howbeit","however","i","i'd","i'll","i'm","i've","ie","if","ignored","immediate","in","inasmuch","inc","indeed","indicate","indicated","indicates","inner","insofar","instead","into","inward","is","isn't","it","it'd","it'll","it's","its","itself","j","just","k","keep","keeps","kept","know","knows","known","l","last","lately","later","latter","latterly","least","less","lest","let","let's","like","liked","likely","little","look","looking","looks","ltd","m","mainly","many","may","maybe","me","mean","meanwhile","merely","might","more","moreover","most","mostly","much","must","my","myself","n","name","namely","nd","near","nearly","necessary","need","needs","neither","never","nevertheless","new","next","nine","no","nobody","non","none","noone","nor","normally","not","nothing","novel","now","nowhere","o","obviously","of","off","often","oh","ok","okay","old","on","once","one","ones","only","onto","or","other","others","otherwise","ought","our","ours","ourselves","out","outside","over","overall","own","p","particular","particularly","per","perhaps","placed","please","plus","possible","presumably","probably","provides","q","que","quite","qv","r","rather","rd","re","really","reasonably","regarding","regardless","regards","relatively","respectively","right","s","said","same","saw","say","saying","says","second","secondly","see","seeing","seem","seemed","seeming","seems","seen","self","selves","sensible","sent","serious","seriously","seven","several","shall","she","should","shouldn't","since","six","so","some","somebody","somehow","someone","something","sometime","sometimes","somewhat","somewhere","soon","sorry","specified","specify","specifying","still","sub","such","sup","sure","t","t's","take","taken","tell","tends","th","than","thank","thanks","thanx","that","that's","thats","the","their","theirs","them","themselves","then","thence","there","there's","thereafter","thereby","therefore","therein","theres","thereupon","these","they","they'd","they'll","they're","they've","think","third","this","thorough","thoroughly","those","though","three","through","throughout","thru","thus","to","together","too","took","toward","towards","tried","tries","truly","try","trying","twice","two","u","un","under","unfortunately","unless","unlikely","until","unto","up","upon","us","use","used","useful","uses","using","usually","uucp","v","value","various","very","via","viz","vs","w","want","wants","was","wasn't","way","we","we'd","we'll","we're","we've","welcome","well","went","were","weren't","what","what's","whatever","when","whence","whenever","where","where's","whereafter","whereas","whereby","wherein","whereupon","wherever","whether","which","while","whither","who","who's","whoever","whole","whom","whose","why","will","willing","wish","with","within","without","won't","wonder","would","would","wouldn't","x","y","yes","yet","you","you'd","you'll","you're","you've","your","yours","yourself","yourselves","z","zero"]
+
+/***/ }),
+
+/***/ 518:
+/***/ (function(module, exports) {
+
+module.exports = ["kegg","reactome","react","biocarta","go","nci","msigdb"]
+
+/***/ }),
+
+/***/ 519:
+/***/ (function(module, exports, __webpack_require__) {
+
+var cytoscape = __webpack_require__(64);
+var DEFAULT_NODE_SIZE = 30;
+var getNodeSize = function getNodeSize(node) {
+ var geneCount = node.data('geneCount') || DEFAULT_NODE_SIZE;
+ return Math.min(Math.max(DEFAULT_NODE_SIZE, geneCount), 100);
+};
+var enrichmentStylesheet = cytoscape.stylesheet().selector('edge').css({
+ 'opacity': 0.3,
+ 'curve-style': 'haystack',
+ 'haystack-radius': 0,
+ 'line-color': '#555',
+ 'width': function width(edge) {
+ var similarity = edge.data('similarity');
+ if (similarity <= 0.3) {
+ return 2;
+ }
+ if (similarity <= 0.75) {
+ return 4;
+ }
+ return 12;
+ }
+}).selector('node').css({
+ 'font-size': 14,
+ 'color': '#fff',
+ 'background-color': '#333',
+ 'text-outline-color': '#333',
+ 'text-outline-width': 4,
+ 'text-wrap': 'wrap',
+ 'text-max-width': 175,
+ 'width': function width(node) {
+ return getNodeSize(node);
+ },
+ 'height': function height(node) {
+ return getNodeSize(node);
+ },
+ 'label': function label(node) {
+ return node.data('name');
+ },
+ 'min-zoomed-font-size': 5,
+ 'text-halign': 'center',
+ 'text-valign': 'center',
+ 'text-events': 'yes'
+}).selector('$node > node').css({
+ 'text-outline-width': 0,
+ 'label': function label(node) {
+ return node.data('tags') != '' ? "Tags: ".concat(node.data('tags')) : '';
+ },
+ 'border-width': 5,
+ 'background-color': 'white',
+ 'color': '#333',
+ 'text-valign': 'bottom',
+ 'text-max-width': 1000,
+ 'font-size': 40,
+ 'text-events': 'no'
+}).selector('node[?queried]').css({
+ 'background-color': 'blue',
+ 'opacity': 1,
+ 'z-compound-depth': 'top',
+ 'color': 'white',
+ 'text-outline-color': 'black'
+}).selector('node:selected').css({
+ 'background-color': '#0169d9',
+ 'text-outline-color': '#0169d9'
+}).selector('edge:selected').css({
+ 'z-index': 999,
+ 'opacity': 1,
+ 'line-color': '#0169d9'
+}).selector('.hidden').css({
+ 'display': 'none'
+}).selector('.highlighted').css({
+ 'opacity': 1
+}).selector('.unhighlighted').css({
+ 'opacity': 0.1
+}).selector(".matched").css({
+ 'border-color': 'yellow',
+ 'border-width': 10,
+ 'background-color': '#606000',
+ 'text-outline-color': '#606000'
+});
+module.exports = enrichmentStylesheet;
+
+/***/ }),
+
+/***/ 520:
+/***/ (function(module, exports, __webpack_require__) {
+
+function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
+function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
+function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
+function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
+function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
+function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
+function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
+function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
+function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
+var h = __webpack_require__(2);
+var _require = __webpack_require__(1),
+ Component = _require.Component;
+var _require2 = __webpack_require__(60),
+ Link = _require2.Link;
+var _require3 = __webpack_require__(16),
+ ServerAPI = _require3.ServerAPI;
+var Biofactoid = /*#__PURE__*/function (_Component) {
+ function Biofactoid(props) {
+ var _this;
+ _classCallCheck(this, Biofactoid);
+ _this = _callSuper(this, Biofactoid, [props]);
+ _this.state = {
+ docs: []
+ };
+ return _this;
+ }
+ _inherits(Biofactoid, _Component);
+ return _createClass(Biofactoid, [{
+ key: "componentDidMount",
+ value: function componentDidMount() {
+ var _this2 = this;
+ ServerAPI.getAllDocs().then(function (res) {
+ return _this2.setState({
+ docs: res
+ });
+ });
+ }
+ }, {
+ key: "render",
+ value: function render() {
+ var docs = this.state.docs;
+ return h('div.biofactoid', docs.map(function (f) {
+ return h(Link, {
+ className: 'plain-link',
+ to: {
+ pathname: "/biofactoid/".concat(f.id)
+ },
+ target: '_blank'
+ }, f.id);
+ }));
+ }
+ }]);
+}(Component);
+module.exports = Biofactoid;
+
+/***/ }),
+
+/***/ 521:
+/***/ (function(module, exports, __webpack_require__) {
+
+var cytoscape = __webpack_require__(64);
+
+//Layouts
+var coseBilkent = __webpack_require__(522);
+var cola = __webpack_require__(523);
+var expandCollapse = __webpack_require__(531);
+
+//Tooltips
+var popper = __webpack_require__(537);
+module.exports = function () {
+ cytoscape.use(cola);
+ cytoscape.use(coseBilkent);
+ cytoscape.use(expandCollapse);
+ cytoscape.use(popper);
+};
+
+/***/ }),
+
+/***/ 55:
+/***/ (function(module, exports, __webpack_require__) {
+
+var Dropdown = __webpack_require__(484);
+var Popover = __webpack_require__(72);
+var Tooltip = __webpack_require__(191);
+var IconButton = __webpack_require__(71);
+var _require = __webpack_require__(485),
+ Card = _require.Card,
+ CardGrid = _require.CardGrid;
+var _require2 = __webpack_require__(486),
+ AppCard = _require2.AppCard;
+var PcLogoLink = __webpack_require__(193);
+var EmptyNetwork = __webpack_require__(487);
+var Sidebar = __webpack_require__(488);
+var CytoscapeNetwork = __webpack_require__(489);
+module.exports = {
+ Dropdown: Dropdown,
+ Popover: Popover,
+ Tooltip: Tooltip,
+ IconButton: IconButton,
+ Card: Card,
+ CardGrid: CardGrid,
+ AppCard: AppCard,
+ PcLogoLink: PcLogoLink,
+ EmptyNetwork: EmptyNetwork,
+ Sidebar: Sidebar,
+ CytoscapeNetwork: CytoscapeNetwork
+};
+
+/***/ }),
+
+/***/ 63:
+/***/ (function(module, exports, __webpack_require__) {
+
+var _require = __webpack_require__(461),
+ fetch = _require.safeFetch,
+ TimeoutError = _require.TimeoutError;
+module.exports = {
+ fetch: fetch,
+ TimeoutError: TimeoutError
+};
+
+/***/ }),
+
+/***/ 71:
+/***/ (function(module, exports, __webpack_require__) {
+
+function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
+function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
+function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
+function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
+function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
+function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
+function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
+function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
+function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
+var React = __webpack_require__(1);
+var h = __webpack_require__(2);
+var Tooltip = __webpack_require__(191);
+var classNames = __webpack_require__(14);
+var IconButton = /*#__PURE__*/function (_React$Component) {
+ function IconButton() {
+ _classCallCheck(this, IconButton);
+ return _callSuper(this, IconButton, arguments);
+ }
+ _inherits(IconButton, _React$Component);
+ return _createClass(IconButton, [{
+ key: "render",
+ value: function render() {
+ var _this$props = this.props,
+ description = _this$props.description,
+ _onClick = _this$props.onClick,
+ isActive = _this$props.isActive,
+ icon = _this$props.icon;
+ _onClick = _onClick || function () {};
+ return h('button.icon-button.button-toggle.plain-button', {
+ onClick: function onClick(e) {
+ return _onClick(e);
+ },
+ className: classNames({
+ 'button-toggle-on': isActive
+ })
+ }, [h(Tooltip, {
+ description: description
+ }, [h('span', [h('i.material-icons', icon)])])]);
+ }
+ }]);
+}(React.Component);
+module.exports = IconButton;
+
+/***/ }),
+
+/***/ 72:
+/***/ (function(module, exports, __webpack_require__) {
+
+function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
+function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
+function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
+function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
+function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
+function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
+function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
+function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
+function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
+var React = __webpack_require__(1);
+var ReactDom = __webpack_require__(54);
+var h = __webpack_require__(2);
+var hh = __webpack_require__(123);
+var Tippy = __webpack_require__(190);
+var _ = __webpack_require__(6);
+var Mousetrap = __webpack_require__(482);
+var EventEmitter = __webpack_require__(483);
+var tippyEmitter = new EventEmitter();
+var tippyDefaults = __webpack_require__(192);
+Mousetrap.bind('escape', function () {
+ return tippyEmitter.emit('esc');
+});
+var Popover = /*#__PURE__*/function (_React$Component) {
+ function Popover(props) {
+ _classCallCheck(this, Popover);
+ return _callSuper(this, Popover, [props]);
+ }
+ _inherits(Popover, _React$Component);
+ return _createClass(Popover, [{
+ key: "render",
+ value: function render() {
+ var _this = this;
+ var p = this.props;
+ return h('span.popover-target', {
+ ref: function ref(el) {
+ return _this.target = el;
+ },
+ onClick: p.onClick
+ }, p.children);
+ }
+ }, {
+ key: "renderTipContent",
+ value: function renderTipContent() {
+ var el = this.props.tippy.html;
+ if (_.isFunction(el)) {
+ el = h(el);
+ }
+ ReactDom.render(el, this.content);
+ }
+ }, {
+ key: "componentDidMount",
+ value: function componentDidMount() {
+ var _this2 = this;
+ var p = this.props;
+ var target = p.target || this.target;
+ var options = p.tippy;
+ var content = this.content = hh('div', {
+ className: (this.props.className || '') + ' popover-content'
+ });
+ var rawTippyOptions = _.assign({}, tippyDefaults, options);
+ var tippyOptions = _.assign({}, rawTippyOptions, {
+ html: content,
+ hideOnClick: false
+ });
+ this.renderTipContent();
+ var tippy = Tippy(target, tippyOptions).tooltips[0];
+ var show = function show() {
+ return tippy.show();
+ };
+ var hide = function hide() {
+ return tippy.hide();
+ };
+ if (p.show) {
+ p.show(show);
+ }
+ if (p.hide) {
+ p.hide(hide);
+ }
+ this.showTippy = function () {
+ return tippy.show();
+ };
+ this.hideTippy = function () {
+ return tippy.hide();
+ };
+ this.destroyTippy = function () {
+ return tippy.destroy();
+ };
+ tippyEmitter.on('esc', this.hideTippy);
+
+ // the tippy hide on click doesn't work with and nested tippies otherwise
+ if (rawTippyOptions.hideOnClick) {
+ this.onBodyClick = function (e) {
+ var parent = e.target;
+ var hide = true;
+ while (parent !== document.body) {
+ if (parent === content || parent === target) {
+ hide = false;
+ break;
+ }
+ parent = parent.parentNode;
+ }
+ if (hide) {
+ _this2.hideTippy();
+ }
+ };
+ document.body.addEventListener('click', this.onBodyClick);
+ }
+ }
+ }, {
+ key: "componentWillUnmount",
+ value: function componentWillUnmount() {
+ tippyEmitter.removeListener('esc', this.hideTippy);
+ ReactDom.unmountComponentAtNode(this.content);
+ if (this.onBodyClick) {
+ document.body.removeEventListener('click', this.onBodyClick);
+ }
+ this.destroyTippy();
+ }
+ }, {
+ key: "componentDidUpdate",
+ value: function componentDidUpdate() {
+ this.renderTipContent();
+ }
+ }]);
+}(React.Component);
+module.exports = Popover;
+
+/***/ }),
+
+/***/ 73:
+/***/ (function(module, exports, __webpack_require__) {
+
+function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
+function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
+function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
+function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
+function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
+function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
+function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
+function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
+function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
+var React = __webpack_require__(1);
+var h = __webpack_require__(2);
+var _require = __webpack_require__(60),
+ Link = _require.Link;
+var ErrorMessage = /*#__PURE__*/function (_React$Component) {
+ function ErrorMessage() {
+ _classCallCheck(this, ErrorMessage);
+ return _callSuper(this, ErrorMessage, arguments);
+ }
+ _inherits(ErrorMessage, _React$Component);
+ return _createClass(ErrorMessage, [{
+ key: "render",
+ value: function render() {
+ var logo = this.props.logo ? h(Link, {
+ to: {
+ pathname: "/"
+ },
+ target: '_blank'
+ }, [h('div.error-branding', [h('div.pc-logo'), h('div.error-branding-descriptor', [h('h2.error-subtitle', 'Pathway Commons'), h('h1.error-title', 'Search')])])]) : null;
+ var title = h('h1.error-message-title', this.props.title !== undefined ? this.props.title : 'An error occurred');
+ var body = this.props.body ? h('p.error-message-body', [h('span', this.props.body)]) : null;
+ var footer = h('p.error-message-footer', this.props.footer !== undefined ? this.props.footer : [h('span', 'If difficulties persist, please report this to our '), h('a.plain-link', {
+ href: 'mailto: pathway-commons-help@googlegroups.com'
+ }, 'help forum.')]);
+ return h('div.error-message-container', [h('div.error-message', [logo, title, body, footer])]);
+ }
+ }]);
+}(React.Component);
+module.exports = {
+ ErrorMessage: ErrorMessage
+};
+
+/***/ }),
+
+/***/ 90:
+/***/ (function(module, exports, __webpack_require__) {
+
+function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
+function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
+function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+var cytoscape = __webpack_require__(64);
+var Promise = __webpack_require__(128);
+
+/**
+ * A service to create Cytoscape instances. This can be used to create
+ * Cytoscape instances that are passed to multiple components, with delayed
+ * mounting.
+ */
+var CytoscapeService = /*#__PURE__*/function () {
+ /**
+ * Creates the service, storing the specified options for later initialisation of
+ * the Cytoscape instance.
+ * @param options An options object that contains Cytoscape options and common app
+ * binding options.
+ */
+ function CytoscapeService(options) {
+ var _this = this;
+ _classCallCheck(this, CytoscapeService);
+ this.options = Object.assign({
+ onMount: function onMount() {},
+ minZoom: 0.08,
+ maxZoom: 4,
+ zoomingEnabled: true,
+ layout: {
+ name: 'null'
+ }
+ }, options);
+ this.mounted = false;
+ this.mountPromise = new Promise(function (resolve) {
+ _this.resolveMount = resolve;
+ });
+ this.loadedPromise = new Promise(function (resolve) {
+ _this.resolveLoad = resolve;
+ });
+ }
+
+ /**
+ * Synchronously gets the Cytoscape instance. This may return `undefined`, as the
+ * instance might not be initialised yet.
+ * @returns The Cytoscape instance (`cy`)
+ */
+ return _createClass(CytoscapeService, [{
+ key: "get",
+ value: function get() {
+ return this.cy;
+ }
+
+ /**
+ * Asynchronously gets the Cytoscape instance by resolving a promise with the instance
+ * (`cy`). Using this guarantees that you won't get null exceptions on `cy`.
+ */
+ }, {
+ key: "getPromise",
+ value: function getPromise() {
+ return this.mountPromise;
+ }
+ }, {
+ key: "loadPromise",
+ value: function loadPromise() {
+ return this.loadedPromise;
+ }
+
+ /**
+ * Initialise the Cytoscape instance.
+ * @param container The container in which to mount. If unspecified, Cytoscape is
+ * mounted in `options.container`.
+ */
+ }, {
+ key: "mount",
+ value: function mount(container) {
+ if (this.mounted) {
+ throw new Error("Can not mount an already mounted CytoscapeService");
+ }
+ this.mounted = true;
+ var options = container == null ? this.options : Object.assign({}, this.options, {
+ container: container
+ });
+ var cy = this.cy = cytoscape(options);
+ options.onMount(cy);
+ this.resolveMount(cy);
+ }
+ }, {
+ key: "load",
+ value: function load() {
+ if (!this.mounted) {
+ throw new Error("Can not indicate loaded for an unmounted CytoscapeService");
+ }
+ if (!this.cy) {
+ throw new Error("Can not indicate loaded with no cy ref");
+ }
+ this.resolveLoad(this.cy);
+ }
+
+ /**
+ * Destroy the Cytoscape instance, unmounting it and cleaning up any listeners etc.
+ */
+ }, {
+ key: "destroy",
+ value: function destroy() {
+ if (this.cy == null) {
+ throw new Error("Can not destroy a non-mounted CytoscapeService");
+ }
+ this.cy.destroy();
+ }
+ }]);
+}();
+module.exports = CytoscapeService;
+
+/***/ }),
+
+/***/ 93:
+/***/ (function(module, exports, __webpack_require__) {
+
+function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
+function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
+function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+var ReactDom = __webpack_require__(54);
+var hh = __webpack_require__(123);
+var tippy = __webpack_require__(190);
+var _ = __webpack_require__(6);
+var CytoscapeTooltip = /*#__PURE__*/function () {
+ function CytoscapeTooltip(tippyRef, tippyOpts) {
+ var _this = this;
+ _classCallCheck(this, CytoscapeTooltip);
+ this.tooltip = null;
+ this.opts = tippyOpts;
+ this.tippyRef = tippyRef;
+ this.onBodyClick = function (e) {
+ var parent = e.target;
+ var target = document.getElementById('cy');
+ var hide = true;
+ while (parent !== document.body) {
+ if (parent === _this.container || parent === target) {
+ hide = false;
+ break;
+ }
+ parent = parent.parentNode;
+ }
+ if (hide) {
+ _this.hide();
+ }
+ };
+ document.body.addEventListener('click', this.onBodyClick);
+ }
+ return _createClass(CytoscapeTooltip, [{
+ key: "isSmallScreen",
+ value: function isSmallScreen() {
+ return window.innerWidth <= 600;
+ }
+ }, {
+ key: "reactRender",
+ value: function reactRender(html) {
+ var div = hh('div');
+ ReactDom.render(html, div);
+ this.container = div;
+ return div;
+ }
+ }, {
+ key: "show",
+ value: function show() {
+ var tooltip = this.tooltip,
+ tippyRef = this.tippyRef,
+ opts = this.opts;
+ var html = opts.html;
+ var isSmallScreen = this.isSmallScreen();
+ if (tooltip != null) {
+ tooltip.destroy();
+ tooltip = null;
+ }
+ if (isSmallScreen) {
+ tippyRef = {
+ clientWidth: 1,
+ clientHeight: 1,
+ focus: function focus() {},
+ // TODO file bug with tippy expecting focus method on ref obj
+ getBoundingClientRect: function getBoundingClientRect() {
+ var w = window.innerWidth;
+ var h = window.innerHeight;
+ return {
+ top: h,
+ bottom: 0,
+ left: w / 2,
+ right: w / 2,
+ width: 1,
+ height: 1
+ };
+ }
+ };
+ }
+ tooltip = tippy(tippyRef, _.assign({}, {
+ theme: 'light',
+ interactive: true,
+ trigger: 'manual',
+ animation: 'fade',
+ animateFill: false,
+ duration: [250, 0],
+ hideOnClick: false,
+ arrow: !isSmallScreen,
+ placement: isSmallScreen ? 'top' : 'right',
+ flip: isSmallScreen ? false : true,
+ distance: 10
+ }, opts, {
+ html: this.reactRender(html)
+ })).tooltips[0];
+ this.tooltip = tooltip;
+ tooltip.show();
+ }
+ }, {
+ key: "hide",
+ value: function hide() {
+ if (this.tooltip) {
+ this.tooltip.hide();
+ document.body.removeEventListener('click', this.onBodyClick);
+ }
+ }
+ }]);
+}();
+module.exports = CytoscapeTooltip;
+
+/***/ }),
+
+/***/ 94:
+/***/ (function(module, exports, __webpack_require__) {
+
+function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
+function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
+function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
+function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
+function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
+function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
+function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
+function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
+function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
+var React = __webpack_require__(1);
+var h = __webpack_require__(2);
+var Popover = __webpack_require__(72);
+var _require = __webpack_require__(24),
+ FACTOID_URL = _require.FACTOID_URL;
+var Contribute = /*#__PURE__*/function (_React$Component) {
+ function Contribute(props) {
+ _classCallCheck(this, Contribute);
+ return _callSuper(this, Contribute, [props]);
+ }
+ _inherits(Contribute, _React$Component);
+ return _createClass(Contribute, [{
+ key: "render",
+ value: function render() {
+ var _this$props = this.props,
+ text = _this$props.text,
+ info = _this$props.info;
+ return h('div.contribute', {}, [h('a.contribute-popover-link', {
+ href: "".concat(FACTOID_URL),
+ target: '_blank'
+ }, text), h(Popover, {
+ tippy: {
+ position: 'bottom',
+ html: h('div.contribute-popover', [info])
+ }
+ }, [h('i.material-icons', 'info')])]);
+ }
+ }]);
+}(React.Component); // Specifies the default values for props:
+Contribute.defaultProps = {
+ text: 'Add my data',
+ info: h('div.contribute-popover-info', {}, ["Authors of primary research articles with pathway and interaction information (e.g. binding, transcription) can contribute these findings to Pathway Commons through Biofactoid. Learn more at ", h('a.plain-link', {
+ href: "".concat(FACTOID_URL),
+ target: '_blank'
+ }, 'biofactoid.org'), '.'])
+};
+module.exports = {
+ Contribute: Contribute
+};
+
+/***/ })
+
+},[206]);
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2ZlYXR1cmVzL3BhaW50L2N5L2luZGV4LmpzIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvZmVhdHVyZXMvcGFpbnQvY3kvbGF5b3V0LmpzIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvZmVhdHVyZXMvcGF0aHdheXMvY3kvbGF5b3V0LmpzIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvc2VydmljZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL21vZGVscy9wYXRod2F5L3BhdGh3YXktbW9kZWwuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9jb21tb24vcGMtZG93bmxvYWQtdHlwZXMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9mZWF0dXJlcy9wYWludC9leHByZXNzaW9uLXRhYmxlLmpzIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvZmVhdHVyZXMvcGFpbnQvY3kvYWN0aW9ucy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2NvbW1vbi9jb21wb25lbnRzL3Rvb2x0aXAuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9jb21tb24vdGlwcHktZGVmYXVsdHMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9jb21tb24vY29tcG9uZW50cy9wYy1sb2dvLWxpbmsuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9mZWF0dXJlcy9wYXRod2F5cy9jeS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2ZlYXR1cmVzL3BhdGh3YXlzL2N5L2FjdGlvbnMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9mZWF0dXJlcy9pbnRlcmFjdGlvbnMvY3kvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9mZWF0dXJlcy9pbnRlcmFjdGlvbnMvdHlwZXMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9mZWF0dXJlcy9lbnJpY2htZW50L2N5L2luZGV4LmpzIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbmZpZy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2RlYnVnLmpzIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvc3luYy5qcyIsIndlYnBhY2s6Ly8vaHRtbC1lbGVtZW50IChpZ25vcmVkKSIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L3JvdXRlci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2ZlYXR1cmVzL2luZGV4LmpzIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvZmVhdHVyZXMvcGFpbnQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3V0aWwvZmV0Y2guanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3V0aWwvcHJvbWlzZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L3NlcnZpY2VzL3NlcnZlci1hcGkvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9mZWF0dXJlcy9wYWludC9tZW51cy9maWxlLWRvd25sb2FkLW1lbnUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9mZWF0dXJlcy9wYWludC9tZW51cy9uZXR3b3JrLWluZm8tbWVudS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2ZlYXR1cmVzL3BhaW50L21lbnVzL3BhaW50LW1lbnUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9mZWF0dXJlcy9wYWludC9jeS9wYXRod2F5cy1zdHlsZXNoZWV0LmpzIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvZmVhdHVyZXMvcGFpbnQvY3kvZXZlbnRzLmpzIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvZmVhdHVyZXMvcGFpbnQvcGF0aHdheS1ub2RlLW1ldGFkYXRhLmpzIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvZmVhdHVyZXMvcGFpbnQvcGF0aHdheXMtdG9vbGJhci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2NvbW1vbi9jb21wb25lbnRzL2Ryb3Bkb3duLmpzIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvY29tbW9uL2NvbXBvbmVudHMvY2FyZC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2NvbW1vbi9jb21wb25lbnRzL2FwcC1jYXJkLmpzIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvY29tbW9uL2NvbXBvbmVudHMvZW1wdHktbmV0d29yay5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2NvbW1vbi9jb21wb25lbnRzL3NpZGViYXIuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9jb21tb24vY29tcG9uZW50cy9jeXRvc2NhcGUtbmV0d29yay5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2ZlYXR1cmVzL3BhaW50L2RlbW8tZXhwcmVzc2lvbnMuanNvbiIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2ZlYXR1cmVzL3BhaW50L2RlbW8tcGF0aHdheS1yZXN1bHRzLmpzb24iLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9mZWF0dXJlcy9wYXRod2F5cy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2ZlYXR1cmVzL3BhdGh3YXlzL3BhdGh3YXlzLXRvb2xiYXIuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9mZWF0dXJlcy9wYXRod2F5cy9tZW51cy9uZXR3b3JrLWluZm8tbWVudS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2ZlYXR1cmVzL3BhdGh3YXlzL21lbnVzL2ZpbGUtZG93bmxvYWQtbWVudS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2ZlYXR1cmVzL3BhdGh3YXlzL2N5L3BhdGh3YXlzLXN0eWxlc2hlZXQuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9mZWF0dXJlcy9wYXRod2F5cy9jeS9ldmVudHMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9mZWF0dXJlcy9wYXRod2F5cy9wYXRod2F5LW5vZGUtbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9mZWF0dXJlcy9wYXRod2F5cy9wYXRod2F5LXRpdGxlLmpzIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvZmVhdHVyZXMvc2VhcmNoL2luZGV4LmpzIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvZmVhdHVyZXMvc2VhcmNoL3BhdGh3YXktcmVzdWx0cy12aWV3LmpzIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvZmVhdHVyZXMvc2VhcmNoL2dlbmUtcmVzdWx0cy12aWV3LmpzIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvZmVhdHVyZXMvc2VhcmNoL2ZlYXR1cmUtdmlldy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2ZlYXR1cmVzL2ludGVyYWN0aW9ucy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2ZlYXR1cmVzL2ludGVyYWN0aW9ucy9pbnRlcmFjdGlvbnMtdG9vbGJhci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2ZlYXR1cmVzL2ludGVyYWN0aW9ucy9pbnRlcmFjdGlvbnMtbm9kZS10b29sdGlwLmpzIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvZmVhdHVyZXMvaW50ZXJhY3Rpb25zL2ludGVyYWN0aW9ucy1lZGdlLXRvb2x0aXAuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9mZWF0dXJlcy9pbnRlcmFjdGlvbnMvY3kvaW50ZXJhY3Rpb25zLXN0eWxlc2hlZXQuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9mZWF0dXJlcy9pbnRlcmFjdGlvbnMvaW50ZXJhY3Rpb25zLWRvd25sb2FkLW1lbnUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9mZWF0dXJlcy9pbnRlcmFjdGlvbnMvaW50ZXJhY3Rpb25zLW1lbnUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9mZWF0dXJlcy9lbnJpY2htZW50L2luZGV4LmpzIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvZmVhdHVyZXMvZW5yaWNobWVudC9lbnJpY2htZW50LXRvb2xiYXIuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9mZWF0dXJlcy9lbnJpY2htZW50L2VucmljaG1lbnQtZG93bmxvYWQtbWVudS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2ZlYXR1cmVzL2VucmljaG1lbnQvZW5yaWNobWVudC10b29sdGlwLmpzIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvZmVhdHVyZXMvZW5yaWNobWVudC9jeS9jbHVzdGVyLWxhYmVsLWNhdGVnb3JpemF0aW9uL2luZGV4LmpzIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvZmVhdHVyZXMvZW5yaWNobWVudC9jeS9jbHVzdGVyLWxhYmVsLWNhdGVnb3JpemF0aW9uL3N0b3B3b3Jkcy5qc29uIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvZmVhdHVyZXMvZW5yaWNobWVudC9jeS9jbHVzdGVyLWxhYmVsLWNhdGVnb3JpemF0aW9uL2ZsYWdnZWR3b3Jkcy5qc29uIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvZmVhdHVyZXMvZW5yaWNobWVudC9jeS9lbnJpY2htZW50LXN0eWxlc2hlZXQuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9mZWF0dXJlcy9iaW9mYWN0b2lkL2luZGV4LmpzIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvY3l0b3NjYXBlLWV4dGVuc2lvbnMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9jb21tb24vY29tcG9uZW50cy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdXRpbC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2NvbW1vbi9jb21wb25lbnRzL2ljb24tYnV0dG9uLmpzIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvY29tbW9uL2NvbXBvbmVudHMvcG9wb3Zlci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2NvbW1vbi9jb21wb25lbnRzL2Vycm9yLW1lc3NhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9jb21tb24vY3kvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9jb21tb24vY3kvY3l0b3NjYXBlLXRvb2x0aXAuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9jb21tb24vY29tcG9uZW50cy9jb250cmlidXRlLmpzIl0sIm5hbWVzIjpbIl9yZXF1aXJlIiwicmVxdWlyZSIsIlBBVEhXQVlTX0xBWU9VVF9PUFRTIiwiX3JlcXVpcmUyIiwiZXhwYW5kQ29sbGFwc2UiLCJzZWFyY2hOb2RlcyIsImxheW91dCIsImZpdCIsIm1vZHVsZSIsImV4cG9ydHMiLCJzdHlsZXNoZWV0IiwiYmluZEN5RXZlbnRzIiwibmFtZSIsIm5vZGVSZXB1bHNpb24iLCJub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHMiLCJ0aWxpbmdQYWRkaW5nVmVydGljYWwiLCJ0aWxpbmdQYWRkaW5nSG9yaXpvbnRhbCIsImFuaW1hdGUiLCJhbmltYXRpb25FYXNpbmciLCJhbmltYXRpb25EdXJhdGlvbiIsInBhZGRpbmciLCJyYW5kb21pemUiLCJTZXJ2ZXJBUEkiLCJfIiwiUGF0aHdheSIsIl9jbGFzc0NhbGxDaGVjayIsImxvYWRlZCIsIl9jcmVhdGVDbGFzcyIsImtleSIsInZhbHVlIiwibG9hZCIsInBhdGh3YXlKU09OIiwicmF3IiwidXJpIiwiZ2V0IiwiY3lKc29uIiwiZ3JhcGgiLCJpc0VtcHR5IiwiZGF0YXNvdXJjZSIsImRhdGFzb3VyY2VVcmwiLCJjb21tZW50cyIsIm1hY3JvbW9sZWN1bGVzIiwiZmlsdGVyIiwibm9kZSIsImRhdGEiLCJjbGFzcyIsImdlbmVOYW1lcyIsIm1zIiwibmFtZXMiLCJmbGF0dGVuIiwibWFwIiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5IiwidW5pcSIsInB1YmxpY2F0aW9uWHJlZnMiLCJ1bmlmaWNhdGlvblhyZWZzIiwidHlwZSIsImRpc3BsYXlOYW1lIiwiZXh0IiwiZGVzY3JpcHRpb24iLCJwYzJOYW1lIiwiZ2VuZUludGVyc2VjdGlvbiIsInBhdGh3YXkiLCJleHByZXNzaW9uVGFibGUiLCJnZW5lc0luUGF0aHdheSIsImdlbmVzSW5FeHByZXNzaW9uRGF0YSIsInJhd0V4cHJlc3Npb25zIiwiZSIsImdlbmVOYW1lIiwiaW50ZXJzZWN0aW9uIiwiZXhwcmVzc2lvbkRhdGFUb05vZGVTdHlsZSIsInJhbmdlIiwiX3JhbmdlIiwiX3NsaWNlZFRvQXJyYXkiLCJtYXgiLCJzdHlsZSIsIk1hdGgiLCJhYnMiLCJhcHBseUV4cHJlc3Npb25EYXRhIiwiY3kiLCJzZWxlY3RlZENsYXNzIiwic2VsZWN0ZWRGdW5jdGlvbiIsImdlbmVOb2RlcyIsIm5vZGVzIiwibm9kZU5hbWVzIiwiZ2VuZU5vZGVMYWJlbHMiLCJmbGF0dGVuRGVlcCIsInNvcnQiLCJleHByZXNzaW9uc0luTmV0d29yayIsImV4cHJlc3Npb25zIiwiZXhwcmVzc2lvbiIsImluY2x1ZGVzIiwiZXhwcmVzc2lvbkxhYmVscyIsImxlbmd0aCIsIl9leHByZXNzaW9uVGFibGUkY29tcCIsImNvbXB1dGVGb2xkQ2hhbmdlUmFuZ2UiLCJtaW4iLCJmb3JFYWNoIiwiZnYiLCJmb2xkQ2hhbmdlIiwiSW5maW5pdHkiLCJtYXRjaGVkTm9kZXMiLCJFeHByZXNzaW9uIiwicmF3RXhwcmVzc2lvbkRhdGEiLCJleHByZXNzaW9uQ2xhc3NlcyIsInZhbHVlcyIsInJlcGxhY2VkRXhwcmVzc2lvbiIsInJlcGxhY2VkIiwiY2xhc3MyVmFsdWVzTWFwIiwiTWFwIiwiX2l0ZXJhdG9yIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJfc3RlcCIsInMiLCJuIiwiZG9uZSIsImV4cHJlc3Npb25DbGFzcyIsInNldCIsImVyciIsImYiLCJpIiwicHVzaCIsImNsYXNzVmFsdWVzIiwiQXJyYXkiLCJmcm9tIiwiZW50cmllcyIsImVudHJ5IiwiY2xhc3NOYW1lIiwiaW52YWxpZFZhbHVlUmVwbGFjZW1lbnQiLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJzZWxlY3RlZENsYXNzVmFsdWVzIiwibm9uU2VsZWN0ZWRDbGFzc2VzIiwib21pdCIsIm5vblNlbGVjdGVkQ2xhc3Nlc1ZhbHVlcyIsIk9iamVjdCIsIl9yZWYiLCJfcmVmMiIsImMxVmFsIiwiYzJWYWwiLCJtZWFuIiwibG9nMiIsInBhcnNlRmxvYXQiLCJ0b0ZpeGVkIiwiY3JlYXRlUmF3RXhwcmVzc2lvbnMiLCJleHByZXNzaW9uSlNPTiIsIm5ldHdvcmtKU09OIiwiZXhwcmVzc2lvbkJ5R2VuZU5hbWUiLCJsYWJlbCIsInN5bm9ueW1zIiwia2V5cyIsImlzR2VuZXJpY01hcHBpbmciLCJoYXMiLCJtYXBwaW5nQ2FuZGlkYXRlIiwiZXhpc3RpbmdFeHByZXNzaW9uIiwiZGVsZXRlIiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsImdlbmUiLCJFeHByZXNzaW9uVGFibGUiLCJyYXdKc29uRGF0YSIsInJhd0V4cHJlc3Npb25DbGFzc2VzIiwiZGF0YVNldENsYXNzTGlzdCIsImRhdGFTZXRFeHByZXNzaW9uTGlzdCIsImNsYXNzZXMiLCJsb2FkUGF0aHdheSIsIkVycm9yIiwicm93cyIsImV4cHJlc3Npb25NYXAiLCJfaXRlcmF0b3IzIiwiX3N0ZXAzIiwicmF3RXhwcmVzc2lvbiIsImV4cCIsInJlc3VsdHMiLCJmb2xkVmFsdWVzIiwiZnZzIiwibWF4TWFnbml0dWRlIiwiYXBwbHkiLCJNQVRDSEVEX1NFQVJDSF9DTEFTUyIsImV4cGFuZENvbGxhcHNlQWxsIiwiZXhwYW5kZWQiLCJhcGkiLCJub2Rlc1RvQ29sbGFwc2UiLCJpc0NvbGxhcHNpYmxlIiwiY29sbGFwc2VSZWN1cnNpdmVseSIsIm5vZGVzVG9FeHBhbmQiLCJpc0V4cGFuZGFibGUiLCJleHBhbmRSZWN1cnNpdmVseSIsImFuaW1hdGlvbiIsImR1cmF0aW9uIiwicGxheSIsInJ1biIsInF1ZXJ5IiwicXVlcnlFbXB0eSIsInRyaW0iLCJlY0FQSSIsImFsbE5vZGVzIiwidW5pb24iLCJnZXRBbGxDb2xsYXBzZWRDaGlsZHJlblJlY3Vyc2l2ZWx5IiwiZ2V0U3lucyIsIm1ldGFkYXRhIiwiX21ldGFkYXRhJHN5bm9ueW1zIiwiX21ldGFkYXRhJHN0YW5kYXJkTmFtIiwic3RhbmRhcmROYW1lIiwiX21ldGFkYXRhJGRpc3BsYXlOYW1lIiwiZWwiLCJtYXRjaGVkIiwic3lub255bU1hdGNoIiwiZmluZCIsInN5bm9ueW0iLCJ0b1VwcGVyQ2FzZSIsInJlbW92ZUNsYXNzIiwiYWRkQ2xhc3MiLCJkZWJvdW5jZSIsIlJlYWN0IiwiaCIsIlBvcG92ZXIiLCJ0aXBweURlZmF1bHRzIiwiVG9vbHRpcCIsIl9SZWFjdCRDb21wb25lbnQiLCJfY2FsbFN1cGVyIiwiX2luaGVyaXRzIiwiY29tcG9uZW50V2lsbE1vdW50IiwiX3RoaXMiLCJwcm9wcyIsInRpcHB5T3B0aW9ucyIsImFzc2lnbiIsImh0bWwiLCJ0cmlnZ2VyIiwidGhlbWUiLCJkZWxheSIsInRpcHB5IiwicG9wb3Zlck9wdGlvbnMiLCJoaWRlIiwiaGlkZVRpcHB5Iiwib25DbGljayIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwicmVuZGVyIiwiY2hpbGRyZW4iLCJDb21wb25lbnQiLCJwbGFjZW1lbnQiLCJjcmVhdGVQb3BwZXJJbnN0YW5jZU9uSW5pdCIsImFuaW1hdGVGaWxsIiwiYXJyb3ciLCJpbnRlcmFjdGl2ZSIsIm11bHRpcGxlIiwiaGlkZU9uQ2xpY2siLCJjbGFzc05hbWVzIiwiUGNMb2dvTGluayIsImNuIiwiaHJlZiIsIkN5dG9zY2FwZVRvb2x0aXAiLCJJbnRlcmFjdGlvbnNOb2RlVG9vbHRpcCIsIkludGVyYWN0aW9uc0VkZ2VUb29sdGlwIiwiU0lOR0xFX1NSQ19MQVlPVVQiLCJjb25jZW50cmljIiwibGV2ZWxXaWR0aCIsIk1VTFRJX1NSQ19MQVlPVVQiLCJpbnRlcmFjdGlvbnNMYXlvdXRPcHRzIiwibnVtU291cmNlcyIsInNpemUiLCJTSE9XX0lOVEVSQUNUSU9OU19UT09MVElQU19FVkVOVCIsImJpbmRFdmVudHMiLCJnZW5lRGF0YSIsIm9uZSIsImdlbmVRdWVyeSIsImpvaW4iLCJzZWFyY2hHZW5lcyIsInRoZW4iLCJyZXMiLCJjYXRjaCIsImhpZGVUb29sdGlwcyIsImVsZW1lbnRzIiwiZWxlIiwidG9vbHRpcCIsInNjcmF0Y2giLCJvbiIsImV2dCIsInRhcmdldCIsImdlbmVJZCIsImdlbmVNZXRhZGF0YSIsImluZm8iLCJwb3BwZXJSZWYiLCJzaG93IiwiZWRnZSIsInRndCIsInJlbW92ZVNjcmF0Y2giLCJlbWl0Iiwibm9kZUhvdmVyTW91c2VPdmVyIiwiZWxlc1RvSGlnaGxpZ2h0IiwiY29sbGVjdGlvbiIsIm5laWdoYm9yaG9vZCIsIm1lcmdlIiwiYW5jZXN0b3JzIiwiZGVzY2VuZGFudHMiLCJlZGdlcyIsImNhbmNlbCIsInNlYXJjaEludGVyYWN0aW9uTm9kZXMiLCJiYXRjaCIsImludGVyYWN0aW9uc1N0eWxlc2hlZXQiLCJJTlRFUkFDVElPTl9UWVBFUyIsIkJJTkRJTkciLCJNT0RJRklDQVRJT04iLCJFWFBSRVNTSU9OIiwiT1RIRVIiLCJFbnJpY2htZW50VG9vbHRpcCIsImdlbmVyYXRlQ2x1c3RlckxhYmVscyIsIlNIT1dfRU5SSUNITUVOVF9UT09MVElQU19FVkVOVCIsIkVOUklDSE1FTlRfTEFZT1VUX09QVFMiLCJyZWZyZXNoIiwibWF4U2ltdWxhdGlvblRpbWUiLCJjb252ZXJnZW5jZVRocmVzaG9sZCIsIlBBUkVOVF9TRUxfUFJFRklYIiwibm9QYXJlbnQiLCJjb21wb25lbnQiLCJpc0NoaWxkIiwiZW5yaWNobWVudExheW91dCIsIm5vZGVzV2l0aE5vRWRnZXMiLCJjb25uZWN0ZWRFZGdlcyIsIm5vZGVzV2l0aEVkZ2VzIiwiZGlmZmVyZW5jZSIsInciLCJ3aWR0aCIsImhlaWdodCIsImZpcnN0TGF5b3V0IiwiZmlyc3RMYXlvdXRQcm9taXNlIiwicG9uIiwiY29tcG9uZW50cyIsImluZGV4IiwibGFiZWxJbnB1dCIsInRhZ3MiLCJjb21wb25lbnRQYXJlbnRJZCIsImFkZCIsImdyb3VwIiwiaWQiLCJtb3ZlIiwicGFyZW50IiwiZmlyc3RMYXlvdXRCQiIsImJvdW5kaW5nQm94IiwiYmJJc0VtcHR5IiwiYmIiLCJzZWNvbmRMYXlvdXRCQiIsIngxIiwieDIiLCJ5MSIsInkyIiwic2Vjb25kTGF5b3V0Iiwic3RvcCIsInNlY29uZExheW91dFByb21pc2UiLCJpc1BhcmVudCIsImlzRWRnZSIsInNlYXJjaEVucmljaG1lbnROb2RlcyIsImdlbmVTZXQiLCJtYXRjaGVzIiwic3RyIiwicSIsImluZGV4T2YiLCJzb21lIiwiZW5yaWNobWVudFN0eWxlc2hlZXQiLCJkZWJ1ZyIsImhoIiwiUm91dGVyIiwiUmVhY3RET00iLCJSZWdpc3RlckN5RXh0ZW5zaW9ucyIsImVuYWJsZWQiLCJpbml0Iiwicm9vdCIsImRvY3VtZW50IiwiYm9keSIsImFwcGVuZENoaWxkIiwiZGVmYXVsdHMiLCJQT1JUIiwiTUVUQURBVEFfQ1JPTl9TQ0hFRFVMRSIsIlBDX1VSTCIsIkRPV05MT0FEU19GT0xERVJfTkFNRSIsIkdQUk9GSUxFUl9VUkwiLCJHTVRfQVJDSElWRV9VUkwiLCJJREVOVElGSUVSU19VUkwiLCJOQ0JJX0VVVElMU19CQVNFX1VSTCIsIk5DQklfQVBJX0tFWSIsIlBVQk1FRF9CQVNFX1VSTCIsIkhHTkNfQkFTRV9VUkwiLCJVTklQUk9UX0FQSV9CQVNFX1VSTCIsIkRPSV9CQVNFX1VSTCIsIk9SQ0lEX0JBU0VfVVJMIiwiU0JHTl9JTUdfU0VSVklDRV9CQVNFX1VSTCIsIlNCR05fSU1HX1BBVEgiLCJQQ19JTUFHRV9DQUNIRV9NQVhfU0laRSIsIlBDX0NBQ0hFX01BWF9TSVpFIiwiUFVCX0NBQ0hFX01BWF9TSVpFIiwiRU5UX0NBQ0hFX01BWF9TSVpFIiwiRU5UX1NVTU1BUllfQ0FDSEVfTUFYX1NJWkUiLCJNQVhfU0lGX05PREVTIiwiQ0xJRU5UX0ZFVENIX1RJTUVPVVQiLCJTRVJWRVJfRkVUQ0hfVElNRU9VVCIsIkRCX05BTUUiLCJEQl9IT1NUIiwiREJfUE9SVCIsIkRCX1VTRVIiLCJEQl9QQVNTIiwiREJfQ0VSVCIsIkZBQ1RPSURfVVJMIiwiTlNfQ0hFQkkiLCJOU19FTlNFTUJMIiwiTlNfR0VORUNBUkRTIiwiTlNfR0VORV9PTlRPTE9HWSIsIk5TX0hHTkMiLCJOU19IR05DX1NZTUJPTCIsIk5TX05DQklfR0VORSIsIk5TX1BVQk1FRCIsIk5TX1JFQUNUT01FIiwiTlNfVU5JUFJPVCIsIk5TX0JJT0ZBQ1RPSUQiLCJOU19QQVRIV0FZQ09NTU9OUyIsImVudlZhcnMiLCJwaWNrIiwicHJvY2VzcyIsImVudiIsImNsaWVudFZhcnMiLCJOT0RFX0VOViIsInZhbCIsImNvbmYiLCJmcmVlemUiLCJkb21SZWFkeSIsInN5bmMiLCJ3aW5kb3ciLCJkYmciLCJfZW5hYmxlZCIsIkRFQlVHIiwiYXBwZW5kU2NyaXB0Iiwic2NyaXB0IiwiY3JlYXRlRWxlbWVudCIsInNyYyIsImxvY2F0aW9uIiwiaG9zdG5hbWUiLCJoZWFkIiwiaW5zZXJ0QmVmb3JlIiwiZmlyc3RDaGlsZCIsIkJyb3dzZXJSb3V0ZXIiLCJSb3V0ZSIsIlN3aXRjaCIsInFzIiwiRmVhdHVyZXMiLCJwYXRoIiwiU2VhcmNoIiwicGFyc2UiLCJzZWFyY2giLCJhcGlPcHRzIiwiZG93bmxvYWRPcHRzIiwiZG93bmxvYWRUeXBlcyIsIlBhdGh3YXlzIiwiQmlvZmFjdG9pZCIsIm1hdGNoIiwicGFyYW1zIiwiUGFpbnQiLCJJbnRlcmFjdGlvbnMiLCJFbnJpY2htZW50Iiwibm90Rm91bmRFcnJvciIsInNwZWMiLCJleGFjdCIsInF1ZXJ5U3RyaW5nIiwiTG9hZGVyIiwiUHJvbWlzZSIsImZldGNoIiwiQ3l0b3NjYXBlU2VydmljZSIsIkZpbGVEb3dubG9hZE1lbnUiLCJJbmZvTWVudSIsIlBhaW50TWVudSIsIlBhdGh3YXlzVG9vbGJhciIsIl9yZXF1aXJlMyIsIlNpZGViYXIiLCJDeXRvc2NhcGVOZXR3b3JrIiwiZGVtb0V4cHJlc3Npb25zIiwiZGVtb1BhdGh3YXlzIiwiX3JlcXVpcmU0IiwiX3JlcXVpcmU1IiwiZ2V0UGF0aHdheXNSZWxldmFudFRvIiwic2VhcmNoUGFyYW0iLCJnZW5lUXVlcmllcyIsImNodW5rIiwic2VhcmNoUXVlcnkiLCJhbGwiLCJzZWFyY2hSZXN1bHRzIiwicGF0aHdheVNlYXJjaFJlc3VsdHMiLCJyZXN1bHQiLCJzZWFyY2hIaXRzIiwidW5pcXVlUmVzdWx0cyIsInVuaXFCeSIsInBhdGh3YXlzSlNPTiIsImdldFBhdGh3YXkiLCJ1bmlxV2l0aCIsInBqIiwicCIsInAwIiwicDEiLCJpc0VxdWFsIiwic3RhdGUiLCJjeVNydiIsIm9uTW91bnQiLCJwYXRod2F5cyIsImN1clBhdGh3YXkiLCJhY3RpdmVNZW51IiwicGFpbnRNZW51Q3RybHMiLCJleHByQ2xhc3MiLCJleHByRm5OYW1lIiwiZXhwckZuIiwiYWN0aXZlVGFiIiwiaW52YWxpZEVucmljaG1lbnRzIiwibG9hZGluZyIsImdldFByb21pc2UiLCJsb2FkUGFpbnREZW1vRGF0YSIsIl90aGlzMiIsIl90aGlzJHN0YXRlIiwianNvbiIsInNldFN0YXRlIiwiZ2V0RW5yaWNobWVudHNBbmRQYXRod2F5cyIsIl90aGlzMyIsImVucmljaG1lbnRzVXJpIiwiX3RoaXMkc3RhdGUyIiwiZ2V0RW5yaWNobWVudHMiLCJmaW5kQmVzdFBhdGh3YXkiLCJiZXN0UmVzdWx0IiwiX3RoaXM0IiwiX3RoaXMkc3RhdGUzIiwicmVtb3ZlIiwiY2hhbmdlTWVudSIsIm1lbnUiLCJfdGhpczUiLCJyZXNpemVDeUltbWVkaWF0ZSIsInJlc2l6ZSIsInJlc2l6ZUN5RGVib3VuY2VkIiwiaGFuZGxlUGFpbnRDdHJsQ2hhbmdlIiwibmV3VmFsIiwiX3RoaXM2IiwiX3RoaXM2JHN0YXRlIiwiaGFuZGxlUGFpbnRNZW51VGFiQ2hhbmdlIiwibmV3VGFiIiwiX3RoaXM3IiwiX3RoaXMkc3RhdGU0IiwiYXBwQmFyIiwiY29udHJvbGxlciIsInNpZGViYXIiLCJpbmZvTGlzdCIsImZpbGVOYW1lIiwic2VsZWN0ZWRJbmRleCIsImNvbnRlbnQiLCJvcHRpb25zIiwibGVmdCIsImNvbG9yIiwicHJvbWlzZVRpbWVvdXQiLCJUaW1lb3V0RXJyb3IiLCJpc0NsaWVudCIsIl90eXBlb2YiLCJpc1NlcnZlciIsImZhaWxPbkJhZFN0YXR1cyIsIm9rIiwic3RhdHVzVGV4dCIsInVybCIsInNhZmVGZXRjaCIsIkZFVENIX1RJTUVPVVQiLCJ0aW1lb3V0Iiwib3B0cyIsImZuIiwicmVzb2x2ZSIsImRlZmF1bHRGZXRjaE9wdHMiLCJoZWFkZXJzIiwiZ2V0UENVUkwiLCJ0ZXh0IiwiYmFzZVVybCIsImdldEFQSVJlc291cmNlIiwiZ2V0RG9jQnlJZCIsInN0cmluZ2lmeSIsImZldGNoT3B0cyIsInBhdGh3YXlKc29uIiwiZ2V0QWxsRG9jcyIsImdldEludGVyYWN0aW9uR3JhcGgiLCJzb3VyY2VzIiwiZ2V0UHVibWVkUHVibGljYXRpb25zIiwicHVibWVkSWRzIiwiZGIiLCJyZXRtb2RlIiwidG9TdHJpbmciLCJ1aWRzIiwidWlkIiwicmVjb3JkIiwidGl0bGUiLCJhdXRob3JzIiwic29ydGZpcnN0YXV0aG9yIiwicHViZGF0ZSIsInNvdXJjZSIsImFydGljbGVpZHMiLCJkb2kiLCJpZHR5cGUiLCJwdWJtZWQiLCJwbWMiLCJmaXJzdEF1dGhvciIsImRhdGUiLCJnZXRHb0luZm9ybWF0aW9uIiwiZ29JRCIsImdldFJlYWN0b21lSW5mb3JtYXRpb24iLCJyZWFjdG9tZUlEIiwiZG93bmxvYWRGaWxlRnJvbVBhdGh3YXlDb21tb25zIiwiZm9ybWF0IiwicXVlcnlDbG9uZSIsInRlc3QiLCJyZXBsYWNlIiwibWV0aG9kIiwiSlNPTiIsImVucmljaG1lbnRBUEkiLCJzYXZlQXMiLCJwY0Rvd25sb2FkVHlwZXMiLCJkb3dubG9hZEZyb21EaXNwbGF5TmFtZSIsIl90aGlzJHByb3BzIiwib3B0aW9uIiwic2V0VGltZW91dCIsInBuZyIsIm91dHB1dCIsInNjYWxlIiwiYmciLCJmdWxsIiwiZG93bmxvYWRGaWxlRnJvbVBDIiwiZmlsZUV4dCIsIkZJTEVOQU1FX0NVVE9GRiIsIl90aGlzJHByb3BzMiIsInN1YnN0ciIsImRvd25sb2FkRmV0Y2giLCJmaWxlQ29udGVudCIsIkZpbGUiLCJtZW51Q29udGVudHMiLCJkdCIsImRsT3B0aW9uIiwiTmV0d29ya0luZm9NZW51Iiwibm9JbmZvTWVzc2FnZSIsImNvbW1lbnQiLCJhZGRpdGlvbmFsSW5mbyIsIlRhYiIsIlRhYnMiLCJUYWJMaXN0IiwiVGFiUGFuZWwiLCJFeHByZXNzaW9uQ29sb3VyTGVnZW5kIiwiRXhwcmVzc2lvblRhYmxlVmlldyIsIl9SZWFjdCRDb21wb25lbnQyIiwic29ydEJ5Iiwic29ydFR5cGUiLCJub2RlU2VhcmNoVmFsdWUiLCJoYW5kbGVTb3J0Q2hhbmdlIiwibmV3U29ydCIsImhhbmRsZVNlYXJjaENoYW5nZSIsImdlbmVyYXRlRm9sZENoYW5nZUxpc3QiLCJmb2xkQ2hhbmdlRXhwcmVzc2lvbnMiLCJzb3J0ZWRGb2xkQ2hhbmdlcyIsIm9yZGVyQnkiLCJmaWx0ZXJlZEZvbGRDaGFuZ2VzIiwiZmMiLCJ1cHBlckZjIiwidXBwZXJGaWx0ZXIiLCJwbGFjZWhvbGRlciIsIm9uQ2hhbmdlIiwiUGF0aHdheVJlc3VsdHNMaXN0VmlldyIsIl9SZWFjdCRDb21wb25lbnQzIiwiX3RoaXMkcHJvcHMzIiwicGF0aHdheVJlc3VsdHMiLCJfUmVhY3QkQ29tcG9uZW50NCIsImFuYWx5c2lzRm5zIiwiX3RoaXMkcHJvcHM0IiwiZnVuY3Rpb25TZWxlY3RvciIsImNsYXNzU2VsZWN0b3IiLCJjbHMiLCJvblNlbGVjdCIsInNlbGVjdGVkQ2xhc3NOYW1lIiwiY3l0b3NjYXBlIiwic2JnblN0eWxlU2hlZXQiLCJzZWxlY3RvciIsImNzcyIsInNwbGl0IiwiUGF0aHdheU5vZGVNZXRhZGF0YVZpZXciLCJFWFBBTkRfQ09MTEFQU0VfT1BUUyIsImxheW91dEJ5IiwiZmlzaGV5ZSIsInVuZG9hYmxlIiwiY3VlRW5hYmxlZCIsIlNIT1dfVE9PTFRJUFNfRVZFTlQiLCJERUZBVUxUX05VTV9OQU1FUyIsIlNVUFBPUlRFRF9DT0xMRUNUSU9OUyIsImdldFVyaUlkcyIsInVyaXMiLCJsYXN0IiwicHVibGljYXRpb25zIiwiY29tcG9uZW50RGlkTW91bnQiLCJwdWJtZWRVcmlzIiwibWQiLCJ4cmVmTGlua3MiLCJzZWFyY2hMaW5rUXVlcnkiLCJkYkxpbmtzIiwibGluayIsInB1YmxpY2F0aW9uRWxlcyIsInB1YmxpY2F0aW9uIiwiRGF0ZSIsImdldEZ1bGxZZWFyIiwic2hvd1R5cGUiLCJzaG93U3RkTmFtZSIsInNob3dEaXNwTmFtZSIsInNob3dTeW5vbnltcyIsInNob3dQdWJzIiwic2hvd0JvZHkiLCJzaG93TGlua3MiLCJzaG93UGNTZWFyY2hMaW5rIiwic2xpY2UiLCJJY29uQnV0dG9uIiwiaXNBY3RpdmUiLCJpY29uIiwiRHJvcGRvd24iLCJvcGVuIiwiaGFuZGxlQ2xvc2UiLCJjbG9zZSIsInByZXZlbnREZWZhdWx0IiwiYWRkRXZlbnRMaXN0ZW5lciIsImNvbnRhaW5zIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImhhbmRsZUNoYW5nZSIsImxpc3RPcHRpb25zIiwicmVmIiwiZE9wdCIsIkNhcmQiLCJDYXJkR3JpZCIsIml0ZW0iLCJBcHBDYXJkIiwiaGludCIsImltYWdlIiwiaW1hZ2VDbGFzcyIsImxpbmtpZnlDb250ZW50IiwiX2RlZmluZVByb3BlcnR5IiwiZGVmYXVsdFByb3BzIiwiTGluayIsIkVtcHR5TmV0d29yayIsIm1zZyIsInNob3dQY0xpbmsiLCJsaW5rVG9QY1NlYXJjaCIsInRvIiwicGF0aG5hbWUiLCJhY3RpdmVNZW51Q29udGVudCIsImNoaWxkIiwiX3RoaXMkcHJvcHMkb25Nb3VudCIsIm1vdW50IiwibmV0d29yayIsImRlc3Ryb3kiLCJkb20iLCJFcnJvck1lc3NhZ2UiLCJfcmVxdWlyZTYiLCJDb250cmlidXRlIiwiUGF0aHdheVRpdGxlIiwibmV0d29ya0VtcHR5IiwiaW5pdGlhbGl6ZUN5dG9zY2FwZSIsImVycm9yIiwiZXJyb3JNZXNzYWdlIiwiZm9vdGVyIiwibG9nbyIsIlJlYWN0RG9tIiwic2VhcmNoVmFsdWUiLCJoYW5kbGVOb2RlU2VhcmNoQ2hhbmdlIiwic2VhcmNoVmFsIiwiZm9jdXNOb2RlU2VhcmNoIiwiZmluZERPTU5vZGUiLCJxdWVyeVNlbGVjdG9yIiwiZm9jdXMiLCJwb3NpdGlvbiIsIm5vZGVEYXRhIiwibm9kZUNsYXNzIiwibm9kZUxhYmVsIiwiZGVmYXVsdE5vZGVNZXRhIiwibm9kZU1ldGEiLCJzaG93VGl0bGUiLCJzaG93SGVhZGVyIiwic2hvd0Zvb3RlciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJ0IiwiciIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwibyIsImRlZmluZVByb3BlcnR5IiwiU3ltYm9sIiwiYSIsIml0ZXJhdG9yIiwiYyIsImFzeW5jSXRlcmF0b3IiLCJ1IiwidG9TdHJpbmdUYWciLCJkZWZpbmUiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJ3cmFwIiwiR2VuZXJhdG9yIiwiY3JlYXRlIiwiQ29udGV4dCIsIm1ha2VJbnZva2VNZXRob2QiLCJ0cnlDYXRjaCIsImFyZyIsImNhbGwiLCJsIiwieSIsIkdlbmVyYXRvckZ1bmN0aW9uIiwiR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUiLCJkIiwiZ2V0UHJvdG90eXBlT2YiLCJ2IiwiZyIsImRlZmluZUl0ZXJhdG9yTWV0aG9kcyIsIl9pbnZva2UiLCJBc3luY0l0ZXJhdG9yIiwiaW52b2tlIiwiX19hd2FpdCIsImNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnIiwiZGVsZWdhdGUiLCJtYXliZUludm9rZURlbGVnYXRlIiwic2VudCIsIl9zZW50IiwiZGlzcGF0Y2hFeGNlcHRpb24iLCJhYnJ1cHQiLCJyZXR1cm4iLCJUeXBlRXJyb3IiLCJyZXN1bHROYW1lIiwibmV4dCIsIm5leHRMb2MiLCJwdXNoVHJ5RW50cnkiLCJ0cnlMb2MiLCJjYXRjaExvYyIsImZpbmFsbHlMb2MiLCJhZnRlckxvYyIsInRyeUVudHJpZXMiLCJyZXNldFRyeUVudHJ5IiwiY29tcGxldGlvbiIsInJlc2V0IiwiaXNOYU4iLCJpc0dlbmVyYXRvckZ1bmN0aW9uIiwiY29uc3RydWN0b3IiLCJtYXJrIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJhd3JhcCIsImFzeW5jIiwicmV2ZXJzZSIsInBvcCIsInByZXYiLCJjaGFyQXQiLCJydmFsIiwiaGFuZGxlIiwiY29tcGxldGUiLCJmaW5pc2giLCJfY2F0Y2giLCJkZWxlZ2F0ZVlpZWxkIiwiYXN5bmNHZW5lcmF0b3JTdGVwIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfbmV4dCIsIl90aHJvdyIsIl9kZWZpbmVQcm9wZXJ0aWVzIiwiX3RvUHJvcGVydHlLZXkiLCJfdG9QcmltaXRpdmUiLCJ0b1ByaW1pdGl2ZSIsIlN0cmluZyIsIk51bWJlciIsIl9nZXRQcm90b3R5cGVPZiIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwiUmVmZXJlbmNlRXJyb3IiLCJCb29sZWFuIiwidmFsdWVPZiIsImJpbmQiLCJfc2V0UHJvdG90eXBlT2YiLCJfbG9hZFB1YmxpY2F0aW9ucyIsIl9jYWxsZWUiLCJub3JtYWxpemVQdWJtZWRSZWNvcmQiLCJNQVhfUFVCUyIsImlzUHVibWVkWHJlZiIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJqb3VybmFsIiwidDAiLCJsb2FkUHVibGljYXRpb25zIiwiX2NvbXBvbmVudERpZE1vdW50IiwiX2NhbGxlZTIiLCJfY2FsbGVlMiQiLCJfY29udGV4dDIiLCJnZXROYW1lIiwiREJfUFJFRklYXzJfVVJMX1RFTVBMQVRFIiwiaXNTdXBwb3J0ZWREYiIsIl9yZWYzIiwidW5pWHJlZnMiLCJfJGZpcnN0IiwiZmlyc3QiLCJnZXRTb3VyY2UiLCJBUlRJQ0xFX1NVUFBPUlRFRF9EQVRBU09VUkNFUyIsIlNldCIsIl8kZmlyc3QyIiwiYXV0aG9yIiwicmVmZXJlbmNlIiwicHVibWVkTGluayIsIlBhdGh3YXlSZXN1bHRzVmlldyIsIkdlbmVSZXN1bHRzVmlldyIsIl9yZXF1aXJlNyIsIkZlYXR1cmVWaWV3IiwiX3JlcXVpcmU4IiwiZ2VuZVJlc3VsdHMiLCJmZWF0dXJlIiwiZGF0YVNvdXJjZXMiLCJnZXRTZWFyY2hSZXN1bHQiLCJnZW5lcyIsIm9uU2VhcmNoVmFsdWVDaGFuZ2UiLCJ3aGljaCIsInN1Ym1pdFNlYXJjaFF1ZXJ5IiwibmV3UXVlcnlTdGF0ZSIsInNldEFuZFN1Ym1pdFNlYXJjaFF1ZXJ5Iiwic2VhcmNoTG9hZGluZyIsImhpc3RvcnkiLCJjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIiwibmV4dFByb3BzIiwibmV4dFNlYXJjaCIsInNlYXJjaExpc3RpbmciLCJoYXNGZWF0dXJlIiwic2VhcmNoQm9keSIsInNlYXJjaEJhciIsIm1heExlbmd0aCIsIm9uS2V5UHJlc3MiLCJjdXJEYXRhc291cmNlIiwibnVtUGF0aHdheXMiLCJudW1JbnRlcmFjdGlvbnMiLCJub1BhdGh3YXlzTXNnIiwic2VhcmNoTGlzdCIsImRzSW5mbyIsImljb25VcmwiLCJwYXRod2F5VGl0bGUiLCJ0b3BIaXQiLCJoYXNQcmV2aWV3IiwicHJldmlld1VybCIsInNob3dQcmV2aWV3IiwiaXRlbUxpbmsiLCJpdGVtUHJldmlldyIsIml0ZW1JbmZvIiwibnVtUGFydGljaXBhbnRzIiwic2VhcmNoUmVzdWx0RmlsdGVyIiwiaXNBcnJheSIsImRzIiwiaWRlbnRpZmllciIsImhlYWRlciIsImxpc3RpbmciLCJNSU5fR0VORV9DT1VOVF9FTlJJQ0hNRU5UIiwiRW50aXR5U3VtbWFyeUJveCIsImdlbmVJbmZvIiwiZ2VuZVN5bWJvbCIsInN1bW1hcnkiLCJzb3J0ZWRMaW5rcyIsInAyIiwibmFtZXNwYWNlIiwic2Nyb2xsQ29udGFpbmVyUmVmIiwiY3VycmVudCIsIl90aGlzJHNjcm9sbENvbnRhaW5lciIsInNjcm9sbExlZnQiLCJzY3JvbGxXaWR0aCIsImNsaWVudFdpZHRoIiwic2hvd0xlZnRCdXR0b24iLCJ2aXNpYmxlSXRlbXMiLCJzaG93UmlnaHRCdXR0b24iLCJkaXJlY3Rpb24iLCJjb250YWluZXIiLCJjYXJkV2lkdGgiLCJvZmZzZXRXaWR0aCIsImNvbnRhaW5lcldpZHRoIiwic2Nyb2xsQW1vdW50IiwiZmxvb3IiLCJuZXdTY3JvbGxMZWZ0Iiwic2Nyb2xsVG8iLCJiZWhhdmlvciIsImNyZWF0ZVJlZiIsIml0ZW1XaWR0aCIsIl90aGlzJHNjcm9sbENvbnRhaW5lcjIiLCJjaGVja1Njcm9sbCIsIl90aGlzJHNjcm9sbENvbnRhaW5lcjMiLCJnZXRFbnJpY2htZW50QXBwSW5mbyIsInNlYXJjaFN0cmluZyIsImxpbmtQYXRoIiwiZ2V0SW50ZXJhY3Rpb25zQXBwSW5mbyIsImFwcHNJbmZvcyIsInNjcm9sbCIsImRpc2FibGVkIiwib25TY3JvbGwiLCJNQVhfQVVUSE9SUyIsImFydGljbGUiLCJwY1BhdGh3YXkiLCJiaW9mYWN0b2lkUGF0aHdheSIsImF1dGhvckxpc3QiLCJlbGVtZW50IiwibnVtRnJvbVN0YXJ0IiwibnVtRnJvbUVuZCIsImNlaWwiLCJ0YWtlIiwidGFrZVJpZ2h0IiwiaW1hZ2VTcmMiLCJvcmdhbmlzbSIsImRvaVVybCIsInB1Ym1lZFVybCIsImNvbmZpZyIsIkludGVyYWN0aW9uc1Rvb2xiYXIiLCJNQVhfRUxFTUVOVFNfQ1VUT0ZGIiwiTElTVF9FTEVNRU5UU19TSE9XTiIsIkludGVyYWN0aW9uc01lbnUiLCJsb2FkSW50ZXJhY3Rpb25zTmV0d29yayIsInRpdGxlQ29udGVudCIsImludGVyYWN0aW9uc0xlZ2VuZCIsIkludGVyYWN0aW9uc0Rvd25sb2FkTWVudSIsImVsZXMiLCJoYXNDbGFzcyIsImVhc2luZyIsImFsaWFzZXMiLCJsaW5rcyIsImFsaWFzIiwicGFyYWxsZWxFZGdlcyIsInB1YmxpY2F0aW9uc0xvYWRlZCIsInNlbGVjdGVkRWRnZSIsImdldFB1YmxpY2F0aW9ucyIsInNlbGVjdEVkZ2UiLCJkZXNlbGVjdEVkZ2UiLCJyZW5kZXJFZGdlIiwiZGF0YXNvdXJjZXMiLCJwY0lkcyIsInByb3ZpZGVyc0xpc3QiLCJwdWJsaWNhdGlvbkxpc3QiLCJkZXRhaWxlZFZpZXdzTGlzdCIsInBjSWQiLCJyZW5kZXJFZGdlQ2hvaWNlIiwiaW50ZXJhY3Rpb25UeXBlVmFsdWVzIiwiayIsInRvTG93ZXJDYXNlIiwiaVN0eWxlc2hlZXQiLCJkb3dubG9hZFBuZyIsInNhdmVDeVBuZyIsImRvd25sb2FkU2lmIiwiZWRnZUlkcyIsInRvZ2dsZUludG5UeXBlIiwiY29ubmVjdGVkTm9kZXMiLCJub2RlSGFzTm9WaXNpYmxlRWRnZXMiLCJldmVyeSIsIkJpbmRpbmciLCJNb2RpZmljYXRpb24iLCJPdGhlciIsImhhc1R5cGUiLCJoYXNNb2RpZmljYXRpb25zIiwiaGFzRXhwcmVzc2lvbnMiLCJoYXNCaW5kaW5ncyIsImhhc090aGVyIiwiSW50ZXJhY3Rpb25Ub2dnbGVCdXR0b24iLCJhY3RpdmUiLCJsZWdlbmRDbGFzcyIsIkVucmljaG1lbnRUb29sYmFyIiwibG9hZEVucmljaG1lbnQiLCJnZXROZXR3b3JrSnNvbiIsIl95aWVsZCRTZXJ2ZXJBUEkkZW5yaSIsImVucmljaG1lbnROZXR3b3JrIiwibmV0d29ya0hhc1plcm9Ob2RlcyIsIkVucmljaG1lbnREb3dubG9hZE1lbnUiLCJkb3dubG9hZEpzb24iLCJzYXZlQ3lKc29uIiwiQmxvYiIsImRlc2NyaXB0aW9uTG9hZGVkIiwiZGVzY3JpcHRpb25PbkZhaWwiLCJ1cGRhdGUiLCJzaGFyZWRHZW5lTGlzdCIsInNoYXJlZEdlbmVDb3VudCIsImRlc2NyaXB0aW9uU2VjdGlvbiIsInN0ZW1tZXIiLCJzdG9wV29yZHMiLCJmbGFnZ2VkV29yZHMiLCJkZWxpbWl0ZXJSZWdleCIsImZpbHRlcldvcmRzIiwid29yZE9jY3VyZW5jZU1hcCIsInN0ZW1Ub1dvcmRzTWFwIiwiaW5jcktleSIsIm0iLCJhcHBlbmRLZXkiLCJ0b2tlbnMiLCJ3b3JkIiwid29yZFN0ZW1zIiwidG9rZW4iLCJ3b3JkU3RlbSIsIndvcmRzIiwid3MiLCJhc3NvY2lhdGVkV29yZHMiLCJ3MCIsIncxIiwiREVGQVVMVF9OT0RFX1NJWkUiLCJnZXROb2RlU2l6ZSIsImdlbmVDb3VudCIsInNpbWlsYXJpdHkiLCJfQ29tcG9uZW50IiwiZG9jcyIsImNvc2VCaWxrZW50IiwiY29sYSIsInBvcHBlciIsInVzZSIsIlRpcHB5IiwiTW91c2V0cmFwIiwiRXZlbnRFbWl0dGVyIiwidGlwcHlFbWl0dGVyIiwicmVuZGVyVGlwQ29udGVudCIsImlzRnVuY3Rpb24iLCJyYXdUaXBweU9wdGlvbnMiLCJ0b29sdGlwcyIsInNob3dUaXBweSIsImRlc3Ryb3lUaXBweSIsIm9uQm9keUNsaWNrIiwicGFyZW50Tm9kZSIsInJlbW92ZUxpc3RlbmVyIiwidW5tb3VudENvbXBvbmVudEF0Tm9kZSIsImNvbXBvbmVudERpZFVwZGF0ZSIsIm1pblpvb20iLCJtYXhab29tIiwiem9vbWluZ0VuYWJsZWQiLCJtb3VudGVkIiwibW91bnRQcm9taXNlIiwicmVzb2x2ZU1vdW50IiwibG9hZGVkUHJvbWlzZSIsInJlc29sdmVMb2FkIiwibG9hZFByb21pc2UiLCJ0aXBweVJlZiIsInRpcHB5T3B0cyIsImdldEVsZW1lbnRCeUlkIiwiaXNTbWFsbFNjcmVlbiIsImlubmVyV2lkdGgiLCJyZWFjdFJlbmRlciIsImRpdiIsImNsaWVudEhlaWdodCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImlubmVySGVpZ2h0IiwidG9wIiwiYm90dG9tIiwicmlnaHQiLCJmbGlwIiwiZGlzdGFuY2UiXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsSUFBQUEsUUFBQSxHQUFpQ0MsbUJBQU8sQ0FBQyxHQUFVLENBQUM7RUFBNUNDLG9CQUFvQixHQUFBRixRQUFBLENBQXBCRSxvQkFBb0I7QUFDNUIsSUFBQUMsU0FBQSxHQUFxREYsbUJBQU8sQ0FBQyxHQUFXLENBQUM7RUFBakVHLGNBQWMsR0FBQUQsU0FBQSxDQUFkQyxjQUFjO0VBQUVDLFdBQVcsR0FBQUYsU0FBQSxDQUFYRSxXQUFXO0VBQUVDLE1BQU0sR0FBQUgsU0FBQSxDQUFORyxNQUFNO0VBQUVDLEdBQUcsR0FBQUosU0FBQSxDQUFISSxHQUFHO0FBRWhEQyxNQUFNLENBQUNDLE9BQU8s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Q1YsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLEVBQUUsR0FBRyxDQUMxQjtBQUNILENBQUM7QUFFRDlRLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHO0VBQUVvdUIsVUFBVSxFQUFWQTtBQUFXLENBQUMsQyIsImZpbGUiOiIuL3B1YmxpYy9idW5kbGUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCB7IFBBVEhXQVlTX0xBWU9VVF9PUFRTIH0gPSByZXF1aXJlKCcuL2xheW91dCcpO1xyXG5jb25zdCB7IGV4cGFuZENvbGxhcHNlLCBzZWFyY2hOb2RlcywgbGF5b3V0LCBmaXQgfSA9IHJlcXVpcmUoJy4vYWN0aW9ucycpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcbiAgZXhwYW5kQ29sbGFwc2UsXHJcbiAgZml0LFxyXG4gIGxheW91dCxcclxuICBzdHlsZXNoZWV0OiByZXF1aXJlKCcuL3BhdGh3YXlzLXN0eWxlc2hlZXQnKSxcclxuICBiaW5kQ3lFdmVudHM6IHJlcXVpcmUoJy4vZXZlbnRzJyksXHJcbiAgc2VhcmNoTm9kZXMsXHJcbiAgUEFUSFdBWVNfTEFZT1VUX09QVFNcclxufTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY2xpZW50L2ZlYXR1cmVzL3BhaW50L2N5L2luZGV4LmpzIiwibW9kdWxlLmV4cG9ydHMgPSB7XHJcbiAgUEFUSFdBWVNfTEFZT1VUX09QVFM6IHtcclxuICAgIG5hbWU6ICdjb3NlLWJpbGtlbnQnLFxyXG4gICAgbm9kZVJlcHVsc2lvbjogNTAwMCxcclxuICAgIG5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczogdHJ1ZSxcclxuICAgIHRpbGluZ1BhZGRpbmdWZXJ0aWNhbDogMjAsXHJcbiAgICB0aWxpbmdQYWRkaW5nSG9yaXpvbnRhbDogMjAsXHJcbiAgICBhbmltYXRlOiAnZW5kJyxcclxuICAgIGFuaW1hdGlvbkVhc2luZzogJ2Vhc2UtaW4tb3V0JyxcclxuICAgIGFuaW1hdGlvbkR1cmF0aW9uOiA4MDAsXHJcbiAgICBmaXQ6IHRydWUsXHJcbiAgICBwYWRkaW5nOiA3NSxcclxuICAgIHJhbmRvbWl6ZTogZmFsc2VcclxuICB9XHJcbn07XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NsaWVudC9mZWF0dXJlcy9wYWludC9jeS9sYXlvdXQuanMiLCJtb2R1bGUuZXhwb3J0cyA9IHtcclxuICBQQVRIV0FZU19MQVlPVVRfT1BUUzoge1xyXG4gICAgbmFtZTogJ2Nvc2UtYmlsa2VudCcsXHJcbiAgICBub2RlUmVwdWxzaW9uOiA1MDAwLFxyXG4gICAgbm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiB0cnVlLFxyXG4gICAgdGlsaW5nUGFkZGluZ1ZlcnRpY2FsOiA1MCxcclxuICAgIHRpbGluZ1BhZGRpbmdIb3Jpem9udGFsOiAyMCxcclxuICAgIGFuaW1hdGU6ICdlbmQnLFxyXG4gICAgYW5pbWF0aW9uRWFzaW5nOiAnZWFzZS1pbi1vdXQnLFxyXG4gICAgYW5pbWF0aW9uRHVyYXRpb246IDgwMCxcclxuICAgIGZpdDogdHJ1ZSxcclxuICAgIHBhZGRpbmc6IDc1LFxyXG4gICAgcmFuZG9taXplOiBmYWxzZVxyXG4gIH1cclxufTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY2xpZW50L2ZlYXR1cmVzL3BhdGh3YXlzL2N5L2xheW91dC5qcyIsImNvbnN0IFNlcnZlckFQSSA9IHJlcXVpcmUoJy4vc2VydmVyLWFwaS8nKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1NlcnZlckFQSX07XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NsaWVudC9zZXJ2aWNlcy9pbmRleC5qcyIsImNvbnN0IF8gPSByZXF1aXJlKCdsb2Rhc2gnKTtcclxuXHJcbi8vIGJhc2ljIHBhdGh3YXkgbW9kZWwgdG8gc2VydmUgdGhlIG5lZWRzIG9mIHRoZSBwYXRod2F5cyB2aWV3XHJcbi8vICAtIGFwaSB0byBnZXQgZW50aXRpZXMsXHJcbi8vICAtIGNvbXBvc2UgZWFjaCBlbnRpdHkgd2l0aCBlbnRpdHkgbWV0YWRhdGFcclxuLy8gIC0gZ2V0IGVudGl0eSBieSBpZFxyXG5jbGFzcyBQYXRod2F5IHtcclxuICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgdGhpcy5sb2FkZWQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGxvYWQocGF0aHdheUpTT04pe1xyXG4gICAgdGhpcy5yYXcgPSBwYXRod2F5SlNPTixcclxuICAgIHRoaXMubG9hZGVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHVyaSgpe1xyXG4gICAgcmV0dXJuIF8uZ2V0KHRoaXMucmF3LCAnZ3JhcGgucGF0aHdheU1ldGFkYXRhLnVyaScsICdVbmtub3duIHVyaScpO1xyXG4gIH1cclxuXHJcbiAgY3lKc29uKCl7XHJcbiAgICByZXR1cm4gdGhpcy5yYXcuZ3JhcGg7XHJcbiAgfVxyXG5cclxuICBpc0VtcHR5KCl7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBuYW1lKCl7XHJcbiAgICByZXR1cm4gXy5nZXQodGhpcy5yYXcsICdncmFwaC5wYXRod2F5TWV0YWRhdGEudGl0bGUnLCAnJyk7XHJcbiAgfVxyXG5cclxuICBkYXRhc291cmNlKCl7XHJcbiAgICByZXR1cm4gXy5nZXQodGhpcy5yYXcsICdncmFwaC5wYXRod2F5TWV0YWRhdGEuZGF0YVNvdXJjZScsICdVbmtub3duIGRhdGFzb3VyY2UnKTtcclxuICB9XHJcblxyXG4gIGRhdGFzb3VyY2VVcmwoKXtcclxuICAgIHJldHVybiBfLmdldCh0aGlzLnJhdywgJ2dyYXBoLnBhdGh3YXlNZXRhZGF0YS51cmxUb0hvbWVwYWdlJyApO1xyXG4gIH1cclxuXHJcbiAgY29tbWVudHMoKXtcclxuICAgIHJldHVybiBfLmdldCh0aGlzLnJhdywgJ2dyYXBoLnBhdGh3YXlNZXRhZGF0YS5jb21tZW50cycsIFtdKTtcclxuICB9XHJcblxyXG4gIG1hY3JvbW9sZWN1bGVzKCl7XHJcbiAgICByZXR1cm4gXy5nZXQodGhpcy5yYXcsICdncmFwaC5ub2RlcycsIFtdKS5maWx0ZXIoIG5vZGUgPT4gbm9kZS5kYXRhLmNsYXNzID09PSAnbWFjcm9tb2xlY3VsZScgKTtcclxuICB9XHJcblxyXG4gIGdlbmVOYW1lcygpe1xyXG4gICAgbGV0IG1zID0gdGhpcy5tYWNyb21vbGVjdWxlcygpO1xyXG4gICAgbGV0IG5hbWVzID0gXy5mbGF0dGVuKG1zLm1hcCggbm9kZSA9PiBbIC4uLl8uZ2V0KG5vZGUsICdkYXRhLm1ldGFkYXRhLnN5bm9ueW1zJywgW10pLCAuLi5bXy5nZXQobm9kZSwgJ2RhdGEubGFiZWwnLCAnJyldIF0gKSk7XHJcbiAgICByZXR1cm4gXy51bmlxKG5hbWVzKTtcclxuICB9XHJcblxyXG4gIHB1YmxpY2F0aW9uWHJlZnMoKXtcclxuICAgIHJldHVybiBfLmdldCggdGhpcy5yYXcsICdncmFwaC5wYXRod2F5TWV0YWRhdGEucHViWHJlZnMnICk7XHJcbiAgfVxyXG5cclxuICB1bmlmaWNhdGlvblhyZWZzKCl7XHJcbiAgICByZXR1cm4gXy5nZXQoIHRoaXMucmF3LCAnZ3JhcGgucGF0aHdheU1ldGFkYXRhLnVuaVhyZWZzJyApO1xyXG4gIH1cclxuXHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUGF0aHdheTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvbW9kZWxzL3BhdGh3YXkvcGF0aHdheS1tb2RlbC5qcyIsIm1vZHVsZS5leHBvcnRzID0gW1xyXG4gIHsgdHlwZTogJ3BuZycsIGRpc3BsYXlOYW1lOiAnSW1hZ2UgKFBORyknLCBleHQ6ICdwbmcnLCBkZXNjcmlwdGlvbjogJ0Rvd25sb2FkIGFuIGltYWdlIG9mIHRoZSBlbnRpcmUgdmlldy4nIH0sXHJcbiAgeyB0eXBlOiAnZ210JywgZGlzcGxheU5hbWU6ICdHTVQnLCBwYzJOYW1lOiAnR1NFQScsIGV4dDogJ2dtdCcsIGRlc2NyaXB0aW9uOiAnR2VuZSBNYXRyaXggVHJhbnNwb3NlZCBmb3JtYXQuIFRoZSBnZW5lIGRhdGFiYXNlIG9mIG5hbWVkIGdlbmUgc2V0cyAoVW5pUHJvdCkgdXNlZnVsIGZvciBwZXJmb3JtaW5nIGVucmljaG1lbnQgYW5hbHlzaXMgdXNpbmcgR2VuZSBTZXQgRW5yaWNobWVudCBBbmFseXNpcyAoR1NFQSknIH0sXHJcbiAgeyB0eXBlOiAnc2lmJywgZGlzcGxheU5hbWU6ICdTSUYnLCBwYzJOYW1lOiAnU0lGJywgZXh0OiAndHh0JywgZGVzY3JpcHRpb246ICdTaW1wbGUgaW50ZXJhY3Rpb24gZm9ybWF0IChTSUYpIGlzIGEgbGlzdCBvZiBpbnRlcmFjdGlvbiBwYWlycyB1c2VmdWwgZm9yIHZpZXdpbmcsIHN0eWxpbmcsIGFuZCBlZGl0aW5nIHVzaW5nIEN5dG9zY2FwZSBkZXNrdG9wIHNvZnR3YXJlLCBhbmQgZm9yIGFuYWx5c2lzIHdpdGggZ3JhcGggYWxnb3JpdGhtcy4nIH0sXHJcbiAgeyB0eXBlOiAndHh0JywgZGlzcGxheU5hbWU6ICdFeHRlbmRlZCBTSUYnLCBwYzJOYW1lOiAnVFhUJywgZXh0OiAndHh0JywgZGVzY3JpcHRpb246ICdTaW1pbGFyIHRvIHRoZSBTSUYgb3V0cHV0LCBidXQgY29udGFpbnMgZXh0cmEgaW5mb3JtYXRpb24gb24gZW50aXRpZXMgYW5kIGludGVyYWN0aW9ucy4gU2VlIHRoZSBTSUYgc2VjdGlvbiBvbiB0aGUgUEMyIGZvcm1hdHMgcGFnZSBmb3IgbW9yZSBkZXRhaWxzLicgfSxcclxuICB7IHR5cGU6ICdiaW9wYXgnLCBkaXNwbGF5TmFtZTogJ0Jpb1BBWCcsIHBjMk5hbWU6ICdCSU9QQVgnLCBleHQ6ICd4bWwnLCBkZXNjcmlwdGlvbjogJ0Jpb2xvZ2ljYWwgUGF0aHdheXMgRXhjaGFuZ2UgKEJpb1BBWCkgZm9ybWF0IGluY2x1ZGVzIGFsbCBkZXRhaWxzIG9mIHRoZSBiaW9sb2dpY2FsIG5ldHdvcmsgc3RvcmVkIGluIFBhdGh3YXkgQ29tbW9ucy4gSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB0aGlzIGZvcm1hdCBiZSBpbnRlcnByZXRlZCB1c2luZyB0b29scyBsaWtlIFBheHRvb2xzIG9yIEplbmEgU1BBUlFMLicgfSxcclxuICB7IHR5cGU6ICdqc29ubGQnLCBkaXNwbGF5TmFtZTogJ0pTT04tTEQnLCBwYzJOYW1lOiAnSlNPTkxEJywgZXh0OiAnanNvbicsIGRlc2NyaXB0aW9uOiAnSlNPTi1MRCBpcyBhIGh1bWFuLXJlYWRhYmxlIGxpbmtlZCBmb3JtYXQuIFRoaXMgZm9ybWF0IGlzIGlkZWFsIGZvciBwcm9ncmFtbWluZyBlbnZpcm9ubWVudHMsIFJFU1Qgd2ViIHNlcnZpY2VzLCBhbmQgdW5zdHJ1Y3R1cmVkIGRhdGFic2VzLicgfSxcclxuICB7IHR5cGU6ICdzYmduJywgZGlzcGxheU5hbWU6ICdTQkdOLU1MJywgcGMyTmFtZTogJ1NCR04nLCBleHQ6ICd4bWwnLCBkZXNjcmlwdGlvbjogJ1N5c3RlbXMgQmlvbG9neSBHcmFwaGljYWwgTm90YXRpb24gKFNCR04pIGlzIGEgc3RhbmRhcmQgdmlzdWFsIG5vdGF0aW9uIGZvciBiaW9sb2dpY2FsIG5ldHdvcmtzLiBUaGlzIGRvd25sb2FkIHByb3ZpZGVzIGFuIFhNTCBpbiBTQkdOIG1hcmt1cCBsYW5ndWFnZSAoU0JHTi1NTCkuJyB9XHJcbl07XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NsaWVudC9jb21tb24vcGMtZG93bmxvYWQtdHlwZXMuanMiLCJjb25zdCBfID0gcmVxdWlyZSgnbG9kYXNoJyk7XHJcblxyXG5sZXQgZ2VuZUludGVyc2VjdGlvbiA9IChwYXRod2F5LCBleHByZXNzaW9uVGFibGUpID0+IHtcclxuICBsZXQgZ2VuZXNJblBhdGh3YXkgPSBwYXRod2F5LmdlbmVOYW1lcygpO1xyXG4gIGxldCBnZW5lc0luRXhwcmVzc2lvbkRhdGEgPSBleHByZXNzaW9uVGFibGUucmF3RXhwcmVzc2lvbnMubWFwKCBlID0+IGUuZ2VuZU5hbWUpO1xyXG5cclxuICByZXR1cm4gXy5pbnRlcnNlY3Rpb24oZ2VuZXNJblBhdGh3YXksIGdlbmVzSW5FeHByZXNzaW9uRGF0YSk7XHJcbn07XHJcblxyXG5jb25zdCBleHByZXNzaW9uRGF0YVRvTm9kZVN0eWxlID0gKHZhbHVlLCByYW5nZSkgPT4ge1xyXG4gIGNvbnN0IFssIG1heF0gPSByYW5nZTtcclxuICBjb25zdCBzdHlsZSA9IHt9O1xyXG5cclxuICBpZiAoKDAgLSBtYXggLyAzKSA8PSB2YWx1ZSA8ICgwICsgbWF4IC8gMykpIHtcclxuICAgIHN0eWxlWydiYWNrZ3JvdW5kLWNvbG9yJ10gPSAnd2hpdGUnO1xyXG4gICAgc3R5bGVbJ2JhY2tncm91bmQtb3BhY2l0eSddID0gMTtcclxuICAgIHN0eWxlWydjb2xvciddID0gJ2JsYWNrJztcclxuICAgIHN0eWxlWyd0ZXh0LW91dGxpbmUtY29sb3InXSA9ICd3aGl0ZSc7XHJcbiAgfVxyXG5cclxuICBpZiAodmFsdWUgPCAoMCAtIG1heCAvIDMpKSB7XHJcbiAgICBzdHlsZVsnYmFja2dyb3VuZC1vcGFjaXR5J10gPSBgJHtNYXRoLmFicyh2YWx1ZSAvIG1heCl9YDtcclxuICAgIHN0eWxlWydiYWNrZ3JvdW5kLWNvbG9yJ10gPSAnZ3JlZW4nO1xyXG4gICAgc3R5bGVbJ2NvbG9yJ10gPSAnd2hpdGUnO1xyXG4gICAgc3R5bGVbJ3RleHQtb3V0bGluZS1jb2xvciddID0gJ2JsYWNrJztcclxuICB9XHJcblxyXG4gIGlmICgoMCArIG1heCAvIDMpIDw9IHZhbHVlICkge1xyXG4gICAgc3R5bGVbJ2JhY2tncm91bmQtY29sb3InXSA9ICdwdXJwbGUnO1xyXG4gICAgc3R5bGVbJ2JhY2tncm91bmQtb3BhY2l0eSddID0gYCR7dmFsdWUgLyBtYXh9YDtcclxuICAgIHN0eWxlWydjb2xvciddID0gJ3doaXRlJztcclxuICAgIHN0eWxlWyd0ZXh0LW91dGxpbmUtY29sb3InXSA9ICdibGFjayc7XHJcblxyXG4gIH1cclxuICByZXR1cm4gc3R5bGU7XHJcbn07XHJcblxyXG5jb25zdCBhcHBseUV4cHJlc3Npb25EYXRhID0gKGN5LCBleHByZXNzaW9uVGFibGUsIHNlbGVjdGVkQ2xhc3MsIHNlbGVjdGVkRnVuY3Rpb24pID0+IHtcclxuICBjb25zdCBnZW5lTm9kZXMgPSBjeS5ub2RlcygnW2NsYXNzPVwibWFjcm9tb2xlY3VsZVwiXScpO1xyXG4gIGNvbnN0IG5vZGVOYW1lcyA9IG5vZGUgPT4gW25vZGUuZGF0YSgnbGFiZWwnKSwgLi4uXy5nZXQobm9kZS5kYXRhKCdtZXRhZGF0YScpLCAnc3lub255bXMnLCBbXSldO1xyXG4gIGNvbnN0IGdlbmVOb2RlTGFiZWxzID0gXy51bmlxKFxyXG4gICAgXy5mbGF0dGVuRGVlcChnZW5lTm9kZXMubWFwKG5vZGUgPT4gbm9kZU5hbWVzKG5vZGUpKVxyXG4gICkpLnNvcnQoKTtcclxuXHJcbiAgY29uc3QgZXhwcmVzc2lvbnNJbk5ldHdvcmsgPSBleHByZXNzaW9uVGFibGUuZXhwcmVzc2lvbnMoKS5maWx0ZXIoZXhwcmVzc2lvbiA9PiBnZW5lTm9kZUxhYmVscy5pbmNsdWRlcyhleHByZXNzaW9uLmdlbmVOYW1lKSk7XHJcblxyXG4gIGNvbnN0IGV4cHJlc3Npb25MYWJlbHMgPSBleHByZXNzaW9uc0luTmV0d29yay5tYXAoZXhwcmVzc2lvbiA9PiBleHByZXNzaW9uLmdlbmVOYW1lKTtcclxuICBnZW5lTm9kZXMuZmlsdGVyKG5vZGUgPT4gXy5pbnRlcnNlY3Rpb24oZXhwcmVzc2lvbkxhYmVscywgbm9kZU5hbWVzKG5vZGUpKS5sZW5ndGggPT09IDApLnN0eWxlKHtcclxuICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogJ2dyZXknLFxyXG4gICAgJ2NvbG9yJzogJ2dyZXknLFxyXG4gICAgJ29wYWNpdHknOiAwLjRcclxuICB9KTtcclxuXHJcbiAgY29uc3Qge21pbiwgbWF4fSA9IGV4cHJlc3Npb25UYWJsZS5jb21wdXRlRm9sZENoYW5nZVJhbmdlKHNlbGVjdGVkQ2xhc3MsIHNlbGVjdGVkRnVuY3Rpb24pO1xyXG4gIGNvbnN0IHJhbmdlID0gW21pbiwgbWF4XTtcclxuXHJcbiAgZXhwcmVzc2lvbnNJbk5ldHdvcmsuZm9yRWFjaChleHByZXNzaW9uID0+IHtcclxuICAgIGNvbnN0IGZ2ID0gZXhwcmVzc2lvbi5mb2xkQ2hhbmdlKHNlbGVjdGVkQ2xhc3MsIHNlbGVjdGVkRnVuY3Rpb24pO1xyXG5cclxuICAgIGlmIChmdiAhPT0gSW5maW5pdHkgJiYgZnYgIT09IC1JbmZpbml0eSkge1xyXG5cclxuICAgICAgY29uc3QgbWF0Y2hlZE5vZGVzID0gY3kubm9kZXMoKS5maWx0ZXIobm9kZSA9PiBub2RlTmFtZXMobm9kZSkuaW5jbHVkZXMoZXhwcmVzc2lvbi5nZW5lTmFtZSkpO1xyXG5cclxuICAgICAgY29uc3Qgc3R5bGUgPSBleHByZXNzaW9uRGF0YVRvTm9kZVN0eWxlKGZ2LCByYW5nZSk7XHJcbiAgICAgIG1hdGNoZWROb2Rlcy5zdHlsZShzdHlsZSk7XHJcbiAgICB9XHJcblxyXG4gIH0pO1xyXG59O1xyXG5cclxuXHJcblxyXG5jbGFzcyBFeHByZXNzaW9uIHtcclxuICBjb25zdHJ1Y3RvcihyYXdFeHByZXNzaW9uRGF0YSwgZXhwcmVzc2lvbkNsYXNzZXMpIHtcclxuICAgIGNvbnN0IGdlbmVOYW1lID0gcmF3RXhwcmVzc2lvbkRhdGEuZ2VuZU5hbWU7XHJcbiAgICBjb25zdCB2YWx1ZXMgPSByYXdFeHByZXNzaW9uRGF0YS52YWx1ZXM7XHJcbiAgICBjb25zdCByZXBsYWNlZEV4cHJlc3Npb24gPSByYXdFeHByZXNzaW9uRGF0YS5yZXBsYWNlZCA/IHJhd0V4cHJlc3Npb25EYXRhLnJlcGxhY2VkIDoge307XHJcblxyXG4gICAgY29uc3QgY2xhc3MyVmFsdWVzTWFwID0gbmV3IE1hcCgpO1xyXG5cclxuICAgIGZvciAoY29uc3QgZXhwcmVzc2lvbkNsYXNzIG9mIF8udW5pcShleHByZXNzaW9uQ2xhc3NlcykpIHtcclxuICAgICAgY2xhc3MyVmFsdWVzTWFwLnNldChleHByZXNzaW9uQ2xhc3MsIFtdKTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjbGFzczJWYWx1ZXNNYXAuZ2V0KGV4cHJlc3Npb25DbGFzc2VzW2ldKS5wdXNoKHZhbHVlc1tpXSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY2xhc3NWYWx1ZXMgPSB7fTtcclxuICAgIEFycmF5LmZyb20oY2xhc3MyVmFsdWVzTWFwLmVudHJpZXMoKSkuZm9yRWFjaChlbnRyeSA9PiB7XHJcbiAgICAgIGNvbnN0IGNsYXNzTmFtZSA9IGVudHJ5WzBdO1xyXG4gICAgICBjb25zdCB2YWx1ZXMgPSBlbnRyeVsxXTtcclxuICAgICAgY2xhc3NWYWx1ZXNbY2xhc3NOYW1lXSA9IHZhbHVlcztcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZ2VuZU5hbWUgPSBnZW5lTmFtZTtcclxuICAgIHRoaXMuY2xhc3NWYWx1ZXMgPSBjbGFzc1ZhbHVlcztcclxuICAgIHRoaXMucmVwbGFjZWRFeHByZXNzaW9uID0gcmVwbGFjZWRFeHByZXNzaW9uO1xyXG4gIH1cclxuXHJcbiAgZm9sZENoYW5nZShzZWxlY3RlZENsYXNzLCBzZWxlY3RlZEZ1bmN0aW9uLCBpbnZhbGlkVmFsdWVSZXBsYWNlbWVudCA9IG51bGwpIHtcclxuICAgIGNvbnN0IHNlbGVjdGVkQ2xhc3NWYWx1ZXMgPSB0aGlzLmNsYXNzVmFsdWVzW3NlbGVjdGVkQ2xhc3NdO1xyXG4gICAgY29uc3Qgbm9uU2VsZWN0ZWRDbGFzc2VzID0gXy5vbWl0KHRoaXMuY2xhc3NWYWx1ZXMsIFtzZWxlY3RlZENsYXNzXSk7XHJcblxyXG4gICAgY29uc3Qgbm9uU2VsZWN0ZWRDbGFzc2VzVmFsdWVzID1fLmZsYXR0ZW5EZWVwKE9iamVjdC5lbnRyaWVzKG5vblNlbGVjdGVkQ2xhc3NlcylcclxuICAgICAgLm1hcCgoW2NsYXNzTmFtZSwgdmFsdWVzXSkgPT4gdmFsdWVzKSk7Ly8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xyXG5cclxuICAgIGNvbnN0IGMxVmFsID0gc2VsZWN0ZWRGdW5jdGlvbihzZWxlY3RlZENsYXNzVmFsdWVzKTtcclxuXHJcbiAgICBsZXQgYzJWYWwgPSBfLm1lYW4obm9uU2VsZWN0ZWRDbGFzc2VzVmFsdWVzKTtcclxuXHJcbiAgICBpZiAoYzJWYWwgPT09IDApIHtcclxuICAgICAgYzJWYWwgPSAxO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGZvbGRDaGFuZ2UgPSBNYXRoLmxvZzIoYzFWYWwgLyBjMlZhbCk7XHJcblxyXG4gICAgaWYgKGZvbGRDaGFuZ2UgPT09IEluZmluaXR5IHx8IGZvbGRDaGFuZ2UgPT09IC1JbmZpbml0eSkge1xyXG4gICAgICByZXR1cm4gaW52YWxpZFZhbHVlUmVwbGFjZW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHBhcnNlRmxvYXQoZm9sZENoYW5nZS50b0ZpeGVkKDIpKTtcclxuICB9XHJcbn1cclxuXHJcblxyXG5jb25zdCBjcmVhdGVSYXdFeHByZXNzaW9ucyA9IChleHByZXNzaW9uSlNPTiwgbmV0d29ya0pTT04pID0+IHtcclxuICBjb25zdCBleHByZXNzaW9uQnlHZW5lTmFtZSA9IG5ldyBNYXAoKTtcclxuXHJcbiAgZXhwcmVzc2lvbkpTT04uZm9yRWFjaChleHByZXNzaW9uID0+IHtcclxuICAgIGV4cHJlc3Npb25CeUdlbmVOYW1lLnNldChleHByZXNzaW9uLmdlbmVOYW1lLCBleHByZXNzaW9uKTtcclxuICB9KTtcclxuXHJcbiAgbmV0d29ya0pTT04ubm9kZXMuZm9yRWFjaChub2RlID0+IHtcclxuICAgIGNvbnN0IGxhYmVsID0gXy5nZXQobm9kZSwgJ2RhdGEubGFiZWwnLCAnJyk7XHJcbiAgICBjb25zdCBzeW5vbnltcyA9IF8uZ2V0KG5vZGUsICdkYXRhLm1ldGFkYXRhLnN5bm9ueW1zJywgW10pO1xyXG4gICAgY29uc3QgZ2VuZUludGVyc2VjdGlvbiA9ICBfLmludGVyc2VjdGlvbihbLi4uZXhwcmVzc2lvbkJ5R2VuZU5hbWUua2V5cygpXSwgc3lub255bXMpO1xyXG4gICAgY29uc3QgaXNHZW5lcmljTWFwcGluZyA9ICFleHByZXNzaW9uQnlHZW5lTmFtZS5oYXMobGFiZWwpICYmIGdlbmVJbnRlcnNlY3Rpb24ubGVuZ3RoID4gMDtcclxuXHJcbiAgICBpZiAoaXNHZW5lcmljTWFwcGluZykge1xyXG4gICAgICBjb25zdCBtYXBwaW5nQ2FuZGlkYXRlID0gZ2VuZUludGVyc2VjdGlvblswXTtcclxuICAgICAgY29uc3QgZXhpc3RpbmdFeHByZXNzaW9uID0gZXhwcmVzc2lvbkJ5R2VuZU5hbWUuZ2V0KG1hcHBpbmdDYW5kaWRhdGUpO1xyXG4gICAgICBleHByZXNzaW9uQnlHZW5lTmFtZS5kZWxldGUobWFwcGluZ0NhbmRpZGF0ZSk7XHJcbiAgICAgIGV4cHJlc3Npb25CeUdlbmVOYW1lLnNldChsYWJlbCwge2dlbmVOYW1lOiBsYWJlbCwgdmFsdWVzOiBleGlzdGluZ0V4cHJlc3Npb24udmFsdWVzLCByZXBsYWNlZDogZXhpc3RpbmdFeHByZXNzaW9ufSk7XHJcblxyXG4gICAgICBmb3IgKGNvbnN0IGdlbmUgb2YgZ2VuZUludGVyc2VjdGlvbikge1xyXG4gICAgICAgIGV4cHJlc3Npb25CeUdlbmVOYW1lLmRlbGV0ZShnZW5lKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICByZXR1cm4gWy4uLmV4cHJlc3Npb25CeUdlbmVOYW1lLmVudHJpZXMoKV0ubWFwKGVudHJ5ID0+IGVudHJ5WzFdKTtcclxufTtcclxuXHJcbmNsYXNzIEV4cHJlc3Npb25UYWJsZSB7XHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLmxvYWRlZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbG9hZCggcmF3SnNvbkRhdGEgKXtcclxuICAgIHRoaXMucmF3ID0gcmF3SnNvbkRhdGE7XHJcbiAgICBsZXQgcmF3RXhwcmVzc2lvbkNsYXNzZXMgPSBfLmdldChyYXdKc29uRGF0YS5kYXRhU2V0Q2xhc3NMaXN0LCAnMC5jbGFzc2VzJywgW10pO1xyXG4gICAgbGV0IHJhd0V4cHJlc3Npb25zID0gXy5nZXQocmF3SnNvbkRhdGEuZGF0YVNldEV4cHJlc3Npb25MaXN0LCAnMC5leHByZXNzaW9ucycsIFtdKTtcclxuXHJcbiAgICB0aGlzLnJhd0V4cHJlc3Npb25zID0gcmF3RXhwcmVzc2lvbnM7XHJcbiAgICB0aGlzLnJhd0V4cHJlc3Npb25DbGFzc2VzID0gcmF3RXhwcmVzc2lvbkNsYXNzZXM7XHJcbiAgICB0aGlzLmNsYXNzZXMgPSBfLnVuaXEocmF3RXhwcmVzc2lvbkNsYXNzZXMpO1xyXG4gICAgdGhpcy5sb2FkZWQgPSB0cnVlO1xyXG5cclxuICB9XHJcblxyXG4gIGxvYWRQYXRod2F5KCBwYXRod2F5SlNPTiApe1xyXG4gICAgaWYoICF0aGlzLmxvYWRlZCApe1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBtdXN0IGNhbGwgbG9hZCgpIHdpdGggZW5yaWNobWVudCBKU09OIGZpcnN0Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGV4cHJlc3Npb25DbGFzc2VzID0gdGhpcy5yYXdFeHByZXNzaW9uQ2xhc3NlcztcclxuICAgIGxldCBleHByZXNzaW9ucyA9IGNyZWF0ZVJhd0V4cHJlc3Npb25zKHRoaXMucmF3RXhwcmVzc2lvbnMsIHBhdGh3YXlKU09OKTtcclxuICAgIHRoaXMucm93cyA9IFtdO1xyXG4gICAgdGhpcy5leHByZXNzaW9uTWFwID0gbmV3IE1hcCgpO1xyXG5cclxuICAgIGZvciAobGV0IHJhd0V4cHJlc3Npb24gb2YgZXhwcmVzc2lvbnMpIHtcclxuICAgICAgbGV0IGV4cCA9IG5ldyBFeHByZXNzaW9uKHJhd0V4cHJlc3Npb24sIGV4cHJlc3Npb25DbGFzc2VzKTtcclxuICAgICAgdGhpcy5yb3dzLnB1c2goZXhwKTtcclxuICAgICAgdGhpcy5leHByZXNzaW9uTWFwLnNldChyYXdFeHByZXNzaW9uLmdlbmVOYW1lLCBleHApO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIGV4cHJlc3Npb25zKGdlbmVOYW1lID0gbnVsbCkge1xyXG4gICAgaWYgKGdlbmVOYW1lICE9IG51bGwpIHtcclxuICAgICAgaWYgKHRoaXMuZXhwcmVzc2lvbk1hcC5oYXMoZ2VuZU5hbWUpKSB7XHJcbiAgICAgICAgcmV0dXJuIFt0aGlzLmV4cHJlc3Npb25NYXAuZ2V0KGdlbmVOYW1lKV07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5yb3dzO1xyXG4gIH1cclxuXHJcbiAgZm9sZENoYW5nZShzZWxlY3RlZENsYXNzLCBzZWxlY3RlZEZ1bmN0aW9uKSB7XHJcbiAgICBjb25zdCByZXN1bHRzID0gbmV3IE1hcCgpO1xyXG5cclxuICAgIHRoaXMucm93cy5mb3JFYWNoKGV4cHJlc3Npb24gPT4ge1xyXG4gICAgICBjb25zdCBmb2xkQ2hhbmdlID0gZXhwcmVzc2lvbi5mb2xkQ2hhbmdlKHNlbGVjdGVkQ2xhc3MsIHNlbGVjdGVkRnVuY3Rpb24pO1xyXG4gICAgICByZXN1bHRzLnNldChleHByZXNzaW9uLmdlbmVOYW1lLCBmb2xkQ2hhbmdlKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiByZXN1bHRzO1xyXG4gIH1cclxuXHJcbiAgY29tcHV0ZUZvbGRDaGFuZ2VSYW5nZShzZWxlY3RlZENsYXNzLCBzZWxlY3RlZEZ1bmN0aW9uKSB7XHJcbiAgICBjb25zdCBmb2xkVmFsdWVzID0gdGhpcy5yb3dzLm1hcChleHByZXNzaW9uID0+IGV4cHJlc3Npb24uZm9sZENoYW5nZShzZWxlY3RlZENsYXNzLCBzZWxlY3RlZEZ1bmN0aW9uKSk7XHJcbiAgICBjb25zdCBmdnMgPSBmb2xkVmFsdWVzLmZpbHRlcihmdiA9PiBmdiAhPT0gSW5maW5pdHkgJiYgZnYgIT09IC1JbmZpbml0eSk7XHJcbiAgICBjb25zdCBtYXhNYWduaXR1ZGUgPSBNYXRoLm1heChNYXRoLm1heCguLi5mdnMpLCBNYXRoLmFicyhNYXRoLm1pbiguLi5mdnMpKSk7XHJcblxyXG4gICAgY29uc3QgbWF4ID0gIG1heE1hZ25pdHVkZTtcclxuICAgIGNvbnN0IG1pbiA9IC1tYXhNYWduaXR1ZGU7XHJcblxyXG4gICAgcmV0dXJuIHttaW4sIG1heH07XHJcbiAgfVxyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHsgRXhwcmVzc2lvblRhYmxlLCBhcHBseUV4cHJlc3Npb25EYXRhLCBnZW5lSW50ZXJzZWN0aW9uIH07XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NsaWVudC9mZWF0dXJlcy9wYWludC9leHByZXNzaW9uLXRhYmxlLmpzIiwiY29uc3QgXyA9IHJlcXVpcmUoJ2xvZGFzaCcpO1xyXG5jb25zdCB7IFBBVEhXQVlTX0xBWU9VVF9PUFRTIH0gPSByZXF1aXJlKCcuL2xheW91dCcpO1xyXG5cclxuXHJcbmNvbnN0IE1BVENIRURfU0VBUkNIX0NMQVNTID0gJ3NlYXJjaC1tYXRjaCc7XHJcblxyXG5sZXQgZXhwYW5kQ29sbGFwc2VBbGwgPSAoKSA9PiB7XHJcbiAgbGV0IGV4cGFuZGVkID0gdHJ1ZTtcclxuXHJcbiAgcmV0dXJuIGN5ID0+IHtcclxuICAgIGxldCBhcGkgPSBjeS5leHBhbmRDb2xsYXBzZSgnZ2V0Jyk7XHJcblxyXG4gICAgaWYoIGV4cGFuZGVkICl7XHJcbiAgICAgIGxldCBub2Rlc1RvQ29sbGFwc2UgPSBjeS5ub2RlcygnW2NsYXNzPVwiY29tcGxleFwiXSwgW2NsYXNzPVwiY29tcGxleCBtdWx0aW1lclwiXScpLmZpbHRlcihub2RlID0+IGFwaS5pc0NvbGxhcHNpYmxlKG5vZGUpKTtcclxuICAgICAgYXBpLmNvbGxhcHNlUmVjdXJzaXZlbHkobm9kZXNUb0NvbGxhcHNlKTtcclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgbm9kZXNUb0V4cGFuZCA9IGN5Lm5vZGVzKCdbY2xhc3M9XCJjb21wbGV4XCJdLCBbY2xhc3M9XCJjb21wbGV4IG11bHRpbWVyXCJdJykuZmlsdGVyKG5vZGUgPT4gYXBpLmlzRXhwYW5kYWJsZShub2RlKSk7XHJcbiAgICAgIGFwaS5leHBhbmRSZWN1cnNpdmVseShub2Rlc1RvRXhwYW5kKTtcclxuICAgIH1cclxuICAgIGV4cGFuZGVkID0gIWV4cGFuZGVkO1xyXG4gIH07XHJcbn07XHJcblxyXG5sZXQgZml0ID0gY3kgPT4ge1xyXG4gIGN5LmFuaW1hdGlvbih7IGR1cmF0aW9uOiAyNTAsIGZpdDogeyBwYWRkaW5nOiA3NSB9fSkucGxheSgpO1xyXG59O1xyXG5cclxubGV0IGxheW91dCA9IGN5ID0+IHtcclxuICBjeS5sYXlvdXQoUEFUSFdBWVNfTEFZT1VUX09QVFMpLnJ1bigpO1xyXG59O1xyXG5cclxubGV0IHNlYXJjaE5vZGVzID0gKGN5LCBxdWVyeSkgPT4ge1xyXG4gIGxldCBxdWVyeUVtcHR5ID0gXy50cmltKHF1ZXJ5KSA9PT0gJyc7XHJcbiAgbGV0IGVjQVBJID0gY3kuZXhwYW5kQ29sbGFwc2UoJ2dldCcpO1xyXG4gIGxldCBhbGxOb2RlcyA9IGN5Lm5vZGVzKCkudW5pb24oZWNBUEkuZ2V0QWxsQ29sbGFwc2VkQ2hpbGRyZW5SZWN1cnNpdmVseSgpKTtcclxuXHJcbiAgbGV0IGdldFN5bnMgPSBub2RlID0+IHtcclxuICAgIGxldCBtZXRhZGF0YSA9IG5vZGUuZGF0YSgnbWV0YWRhdGEnKTtcclxuICAgIGxldCB7IHN5bm9ueW1zID0gW10sIHN0YW5kYXJkTmFtZSA9ICcnLCBkaXNwbGF5TmFtZSA9ICcnIH0gPSBtZXRhZGF0YTtcclxuICAgIGxldCBsYWJlbCA9IG5vZGUuZGF0YSgnbGFiZWwnKTtcclxuXHJcbiAgICByZXR1cm4gXy51bmlxKFtcclxuICAgICAgLi4uc3lub255bXMsXHJcbiAgICAgIHN0YW5kYXJkTmFtZSxcclxuICAgICAgZGlzcGxheU5hbWUsXHJcbiAgICAgIGxhYmVsXHJcbiAgICBdKS5maWx0ZXIoIGVsID0+ICFfLmlzRW1wdHkoIGVsICkgKTtcclxuICB9O1xyXG5cclxuICBsZXQgbWF0Y2hlZCA9IGFsbE5vZGVzLmZpbHRlcihub2RlID0+IHtcclxuICAgIGxldCBzeW5vbnltcyA9IGdldFN5bnMobm9kZSk7XHJcblxyXG4gICAgbGV0IHN5bm9ueW1NYXRjaCA9IHN5bm9ueW1zLmZpbmQoIHN5bm9ueW0gPT4gc3lub255bS50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKCBxdWVyeS50b1VwcGVyQ2FzZSgpICkpO1xyXG5cclxuICAgIHJldHVybiBzeW5vbnltTWF0Y2ggIT0gbnVsbDtcclxuICB9KTtcclxuXHJcbiAgYWxsTm9kZXMucmVtb3ZlQ2xhc3MoTUFUQ0hFRF9TRUFSQ0hfQ0xBU1MpO1xyXG5cclxuICBpZiAoIG1hdGNoZWQubGVuZ3RoID4gMCAmJiAhcXVlcnlFbXB0eSApIHtcclxuICAgIG1hdGNoZWQuYWRkQ2xhc3MoTUFUQ0hFRF9TRUFSQ0hfQ0xBU1MpO1xyXG4gIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG4gIGV4cGFuZENvbGxhcHNlOiBleHBhbmRDb2xsYXBzZUFsbCgpLFxyXG4gIGZpdCxcclxuICBsYXlvdXQsXHJcbiAgc2VhcmNoTm9kZXM6IF8uZGVib3VuY2Uoc2VhcmNoTm9kZXMsIDMwMCksXHJcbiAgTUFUQ0hFRF9TRUFSQ0hfQ0xBU1NcclxufTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY2xpZW50L2ZlYXR1cmVzL3BhaW50L2N5L2FjdGlvbnMuanMiLCJjb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XHJcbmNvbnN0IF8gPSByZXF1aXJlKCdsb2Rhc2gnKTtcclxuY29uc3QgaCA9IHJlcXVpcmUoJ3JlYWN0LWh5cGVyc2NyaXB0Jyk7XHJcblxyXG5jb25zdCBQb3BvdmVyID0gcmVxdWlyZSgnLi9wb3BvdmVyJyk7XHJcbmNvbnN0IHRpcHB5RGVmYXVsdHMgPSByZXF1aXJlKCcuLi90aXBweS1kZWZhdWx0cycpO1xyXG5cclxuLyogUHJvcHNcclxuUmVxdWlyZWRcclxuLSBkZXNjcmlwdGlvblxyXG5PcHRpb25hbFxyXG4tIHRpcHB5IChhbiBvYmplY3Qgd2l0aCB0aXBweS5qcyBvcHRpb25zKVxyXG4tIHBvcG92ZXIgcHJvcHMgKHByb3BzIHlvdSB3YW50IHRoZSBwb3BvdmVyIHRvIGhhdmUsIHNlZSBwb3BvdmVyKVxyXG4qL1xyXG5jbGFzcyBUb29sdGlwIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICBjb21wb25lbnRXaWxsTW91bnQoKXtcclxuICAgIGxldCBwcm9wcyA9IHRoaXMucHJvcHM7XHJcblxyXG4gICAgbGV0IHRpcHB5T3B0aW9ucyA9IF8uYXNzaWduKHt9LCB0aXBweURlZmF1bHRzLCB7XHJcbiAgICAgIGh0bWw6ICgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGgoJ2Rpdi50b29sdGlwLWNvbnRlbnQnLCBbaCgnc3Bhbi50b29sdGlwLWRlc2NyaXB0aW9uJywgcHJvcHMuZGVzY3JpcHRpb24pXSk7XHJcbiAgICAgIH0pKCksXHJcbiAgICAgIHRyaWdnZXI6ICdtb3VzZWVudGVyIG1hbnVhbCcsXHJcbiAgICAgIHRoZW1lOiAnZGFyaycsXHJcbiAgICAgIGRlbGF5OiBbIDIwMCwgMCBdXHJcbiAgICB9LCBwcm9wcy50aXBweSk7XHJcblxyXG4gICAgdGhpcy5wb3BvdmVyT3B0aW9ucyA9IF8uYXNzaWduKHt9LCBwcm9wcywge1xyXG4gICAgICB0aXBweTogdGlwcHlPcHRpb25zLFxyXG4gICAgICBoaWRlOiBoaWRlVGlwcHkgPT4ge1xyXG4gICAgICAgIGlmKHByb3BzLmhpZGUpe1xyXG4gICAgICAgICAgcHJvcHMuaGlkZShoaWRlVGlwcHkpOyAvLyBtYWtlIHN1cmUgd2UgZG9uJ3Qgb3ZlcnJpZGUgdGhlIGhpZGUoKSBmcm9tIHByb3BzXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmhpZGVUaXBweSA9IGhpZGVUaXBweTtcclxuICAgICAgfSxcclxuICAgICAgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuaGlkZVRpcHB5KCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY29tcG9uZW50V2lsbFVubW91bnQoKXtcclxuXHJcbiAgfVxyXG5cclxuICByZW5kZXIoKSB7XHJcbiAgICBsZXQgcHJvcHMgPSB0aGlzLnByb3BzO1xyXG5cclxuICAgIHJldHVybiBoKFBvcG92ZXIsIHRoaXMucG9wb3Zlck9wdGlvbnMsIHByb3BzLmNoaWxkcmVuKTtcclxuICB9XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gVG9vbHRpcDtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY2xpZW50L2NvbW1vbi9jb21wb25lbnRzL3Rvb2x0aXAuanMiLCJtb2R1bGUuZXhwb3J0cyA9IHtcclxuICB0aGVtZTogJ2xpZ2h0JyxcclxuICBwbGFjZW1lbnQ6ICdib3R0b20nLFxyXG4gIGNyZWF0ZVBvcHBlckluc3RhbmNlT25Jbml0OiB0cnVlLFxyXG4gIGFuaW1hdGlvbjogJ2ZhZGUnLFxyXG4gIGFuaW1hdGVGaWxsOiBmYWxzZSxcclxuICBkdXJhdGlvbjogWyAyNTAsIDAgXSxcclxuICBkZWxheTogWyAwLCAwIF0sXHJcbiAgYXJyb3c6IHRydWUsXHJcbiAgdHJpZ2dlcjogJ2NsaWNrIG1hbnVhbCcsXHJcbiAgaW50ZXJhY3RpdmU6IHRydWUsXHJcbiAgbXVsdGlwbGU6IHRydWUsXHJcbiAgaGlkZU9uQ2xpY2s6IHRydWVcclxufTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY2xpZW50L2NvbW1vbi90aXBweS1kZWZhdWx0cy5qcyIsImNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcclxuY29uc3QgaCA9IHJlcXVpcmUoJ3JlYWN0LWh5cGVyc2NyaXB0Jyk7XHJcbmNvbnN0IGNsYXNzTmFtZXMgPSByZXF1aXJlKCdjbGFzc25hbWVzJyk7XHJcblxyXG5jbGFzcyBQY0xvZ29MaW5rIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICByZW5kZXIoKSB7XHJcbiAgICBsZXQgY24gPSB0aGlzLnByb3BzLmNsYXNzTmFtZTtcclxuICAgIHJldHVybiBoKCdhJywgeyBocmVmOiAnLycgfSwgWyBoKCdkaXYnLCB7IGNsYXNzTmFtZTogY2xhc3NOYW1lcygncGMtbG9nbycsIGNuKSB9KSBdKTtcclxuICB9XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUGNMb2dvTGluaztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY2xpZW50L2NvbW1vbi9jb21wb25lbnRzL3BjLWxvZ28tbGluay5qcyIsImNvbnN0IHsgUEFUSFdBWVNfTEFZT1VUX09QVFMgfSA9IHJlcXVpcmUoJy4vbGF5b3V0Jyk7XHJcbmNvbnN0IHsgZXhwYW5kQ29sbGFwc2UsIHNlYXJjaE5vZGVzLCBsYXlvdXQsIGZpdCB9ID0gcmVxdWlyZSgnLi9hY3Rpb25zJyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuICBleHBhbmRDb2xsYXBzZSxcclxuICBmaXQsXHJcbiAgbGF5b3V0LFxyXG4gIHN0eWxlc2hlZXQ6IHJlcXVpcmUoJy4vcGF0aHdheXMtc3R5bGVzaGVldCcpLFxyXG4gIGJpbmRDeUV2ZW50czogcmVxdWlyZSgnLi9ldmVudHMnKSxcclxuICBzZWFyY2hOb2RlcyxcclxuICBQQVRIV0FZU19MQVlPVVRfT1BUU1xyXG59O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jbGllbnQvZmVhdHVyZXMvcGF0aHdheXMvY3kvaW5kZXguanMiLCJjb25zdCBfID0gcmVxdWlyZSgnbG9kYXNoJyk7XHJcbmNvbnN0IHsgUEFUSFdBWVNfTEFZT1VUX09QVFMgfSA9IHJlcXVpcmUoJy4vbGF5b3V0Jyk7XHJcblxyXG5cclxuY29uc3QgTUFUQ0hFRF9TRUFSQ0hfQ0xBU1MgPSAnc2VhcmNoLW1hdGNoJztcclxuXHJcbmxldCBleHBhbmRDb2xsYXBzZUFsbCA9ICgpID0+IHtcclxuICBsZXQgZXhwYW5kZWQgPSB0cnVlO1xyXG5cclxuICByZXR1cm4gY3kgPT4ge1xyXG4gICAgbGV0IGFwaSA9IGN5LmV4cGFuZENvbGxhcHNlKCdnZXQnKTtcclxuXHJcbiAgICBpZiggZXhwYW5kZWQgKXtcclxuICAgICAgbGV0IG5vZGVzVG9Db2xsYXBzZSA9IGN5Lm5vZGVzKCdbY2xhc3M9XCJjb21wbGV4XCJdLCBbY2xhc3M9XCJjb21wbGV4IG11bHRpbWVyXCJdJykuZmlsdGVyKG5vZGUgPT4gYXBpLmlzQ29sbGFwc2libGUobm9kZSkpO1xyXG4gICAgICBhcGkuY29sbGFwc2VSZWN1cnNpdmVseShub2Rlc1RvQ29sbGFwc2UpO1xyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBub2Rlc1RvRXhwYW5kID0gY3kubm9kZXMoJ1tjbGFzcz1cImNvbXBsZXhcIl0sIFtjbGFzcz1cImNvbXBsZXggbXVsdGltZXJcIl0nKS5maWx0ZXIobm9kZSA9PiBhcGkuaXNFeHBhbmRhYmxlKG5vZGUpKTtcclxuICAgICAgYXBpLmV4cGFuZFJlY3Vyc2l2ZWx5KG5vZGVzVG9FeHBhbmQpO1xyXG4gICAgfVxyXG4gICAgZXhwYW5kZWQgPSAhZXhwYW5kZWQ7XHJcbiAgfTtcclxufTtcclxuXHJcbmxldCBmaXQgPSBjeSA9PiB7XHJcbiAgY3kuYW5pbWF0aW9uKHsgZHVyYXRpb246IDI1MCwgZml0OiB7IHBhZGRpbmc6IDc1IH19KS5wbGF5KCk7XHJcbn07XHJcblxyXG5sZXQgbGF5b3V0ID0gY3kgPT4ge1xyXG4gIGN5LmxheW91dChQQVRIV0FZU19MQVlPVVRfT1BUUykucnVuKCk7XHJcbn07XHJcblxyXG5sZXQgc2VhcmNoTm9kZXMgPSAoY3ksIHF1ZXJ5KSA9PiB7XHJcbiAgbGV0IHF1ZXJ5RW1wdHkgPSBfLnRyaW0ocXVlcnkpID09PSAnJztcclxuICBsZXQgZWNBUEkgPSBjeS5leHBhbmRDb2xsYXBzZSgnZ2V0Jyk7XHJcbiAgbGV0IGFsbE5vZGVzID0gY3kubm9kZXMoKS51bmlvbihlY0FQSS5nZXRBbGxDb2xsYXBzZWRDaGlsZHJlblJlY3Vyc2l2ZWx5KCkpO1xyXG5cclxuICBsZXQgZ2V0U3lucyA9IG5vZGUgPT4ge1xyXG4gICAgbGV0IG1ldGFkYXRhID0gbm9kZS5kYXRhKCdtZXRhZGF0YScpO1xyXG4gICAgbGV0IHsgc3lub255bXMgPSBbXSwgc3RhbmRhcmROYW1lID0gJycsIGRpc3BsYXlOYW1lID0gJycgfSA9IG1ldGFkYXRhO1xyXG4gICAgbGV0IGxhYmVsID0gbm9kZS5kYXRhKCdsYWJlbCcpO1xyXG5cclxuICAgIHJldHVybiBfLnVuaXEoW1xyXG4gICAgICAuLi5zeW5vbnltcyxcclxuICAgICAgc3RhbmRhcmROYW1lLFxyXG4gICAgICBkaXNwbGF5TmFtZSxcclxuICAgICAgbGFiZWxcclxuICAgIF0pLmZpbHRlciggZWwgPT4gIV8uaXNFbXB0eSggZWwgKSApO1xyXG4gIH07XHJcblxyXG4gIGxldCBtYXRjaGVkID0gYWxsTm9kZXMuZmlsdGVyKG5vZGUgPT4ge1xyXG4gICAgbGV0IHN5bm9ueW1zID0gZ2V0U3lucyhub2RlKTtcclxuXHJcbiAgICBsZXQgc3lub255bU1hdGNoID0gc3lub255bXMuZmluZCggc3lub255bSA9PiBzeW5vbnltLnRvVXBwZXJDYXNlKCkuaW5jbHVkZXMoIHF1ZXJ5LnRvVXBwZXJDYXNlKCkgKSk7XHJcblxyXG4gICAgcmV0dXJuIHN5bm9ueW1NYXRjaCAhPSBudWxsO1xyXG4gIH0pO1xyXG5cclxuICBhbGxOb2Rlcy5yZW1vdmVDbGFzcyhNQVRDSEVEX1NFQVJDSF9DTEFTUyk7XHJcblxyXG4gIGlmICggbWF0Y2hlZC5sZW5ndGggPiAwICYmICFxdWVyeUVtcHR5ICkge1xyXG4gICAgbWF0Y2hlZC5hZGRDbGFzcyhNQVRDSEVEX1NFQVJDSF9DTEFTUyk7XHJcbiAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcbiAgZXhwYW5kQ29sbGFwc2U6IGV4cGFuZENvbGxhcHNlQWxsKCksXHJcbiAgZml0LFxyXG4gIGxheW91dCxcclxuICBzZWFyY2hOb2RlczogXy5kZWJvdW5jZShzZWFyY2hOb2RlcywgMzAwKSxcclxuICBNQVRDSEVEX1NFQVJDSF9DTEFTU1xyXG59O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jbGllbnQvZmVhdHVyZXMvcGF0aHdheXMvY3kvYWN0aW9ucy5qcyIsImNvbnN0IGggPSByZXF1aXJlKCdyZWFjdC1oeXBlcnNjcmlwdCcpO1xyXG5jb25zdCBDeXRvc2NhcGVUb29sdGlwID0gcmVxdWlyZSgnLi4vLi4vLi4vY29tbW9uL2N5L2N5dG9zY2FwZS10b29sdGlwJyk7XHJcbmNvbnN0IF8gPSByZXF1aXJlKCdsb2Rhc2gnKTtcclxuXHJcbmNvbnN0IHsgU2VydmVyQVBJIH0gPSByZXF1aXJlKCcuLi8uLi8uLi9zZXJ2aWNlcycpO1xyXG5jb25zdCBJbnRlcmFjdGlvbnNOb2RlVG9vbHRpcCA9IHJlcXVpcmUoJy4uL2ludGVyYWN0aW9ucy1ub2RlLXRvb2x0aXAnKTtcclxuY29uc3QgSW50ZXJhY3Rpb25zRWRnZVRvb2x0aXAgPSByZXF1aXJlKCcuLi9pbnRlcmFjdGlvbnMtZWRnZS10b29sdGlwJyk7XHJcblxyXG5jb25zdCBTSU5HTEVfU1JDX0xBWU9VVCA9IHtcclxuICBuYW1lOiAnY29uY2VudHJpYycsXHJcbiAgY29uY2VudHJpYzogbm9kZSA9PiBub2RlLmRhdGEoJ3F1ZXJpZWQnKSA/IDEgOiAwLFxyXG4gIGxldmVsV2lkdGg6ICgpID0+IDEsXHJcbiAgYW5pbWF0ZTogdHJ1ZSxcclxuICBhbmltYXRpb25EdXJhdGlvbjogODAwLFxyXG4gIGFuaW1hdGlvbkVhc2luZzogJ2Vhc2UtaW4tb3V0J1xyXG59O1xyXG5cclxuY29uc3QgTVVMVElfU1JDX0xBWU9VVCA9IHtcclxuICBuYW1lOiAnY29zZS1iaWxrZW50JyxcclxuICBub2RlUmVwdWxzaW9uOiAyMDAwLFxyXG4gIG5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczogdHJ1ZSxcclxuICBhbmltYXRlOiAnZW5kJyxcclxuICBhbmltYXRpb25FYXNpbmc6ICdlYXNlLWluLW91dCcsXHJcbiAgYW5pbWF0aW9uRHVyYXRpb246IDgwMCxcclxuICBmaXQ6IHRydWUsXHJcbiAgcGFkZGluZzogNzUsXHJcbiAgcmFuZG9taXplOiB0cnVlXHJcbn07XHJcblxyXG5jb25zdCBpbnRlcmFjdGlvbnNMYXlvdXRPcHRzID0gY3kgPT4ge1xyXG4gIGxldCBudW1Tb3VyY2VzID0gY3kubm9kZXMoJ1s/cXVlcmllZF0nKS5zaXplKCk7XHJcbiAgaWYoIG51bVNvdXJjZXMgPiAxICl7XHJcbiAgICByZXR1cm4gTVVMVElfU1JDX0xBWU9VVDtcclxuICB9XHJcbiAgcmV0dXJuIFNJTkdMRV9TUkNfTEFZT1VUO1xyXG59O1xyXG5cclxuY29uc3QgU0hPV19JTlRFUkFDVElPTlNfVE9PTFRJUFNfRVZFTlQgPSAnc2hvd2ludGVyYWN0aW9uc3Rvb2x0aXAnO1xyXG5cclxubGV0IGJpbmRFdmVudHMgPSAoIGN5ICkgPT4ge1xyXG4gIGxldCBnZW5lRGF0YSA9IFtdO1xyXG5cclxuICAvLyBvbiBpbml0aWFsIGludGVyYWN0aW9ucyBkYXRhIGxvYWQsIHBvcHVhbGF0ZSBnZW5lIG1ldGFkYXRhXHJcbiAgY3kub25lKCdhZGQnLCAoKSA9PiB7XHJcbiAgICBsZXQgZ2VuZVF1ZXJ5ID0gY3kubm9kZXMoKS5tYXAoIG5vZGUgPT4gbm9kZS5kYXRhKCdpZCcpICkuam9pbignICcpO1xyXG4gICAgU2VydmVyQVBJLnNlYXJjaEdlbmVzKCBnZW5lUXVlcnkgKVxyXG4gICAgICAudGhlbiggcmVzID0+IGdlbmVEYXRhID0gcmVzIClcclxuICAgICAgLmNhdGNoKCAoKSA9PiB7fSApOyAvLyBzd2FsbG93XHJcbiAgfSk7XHJcblxyXG4gIGxldCBoaWRlVG9vbHRpcHMgPSAoKSA9PiB7XHJcbiAgICBjeS5lbGVtZW50cygpLmZvckVhY2goZWxlID0+IHtcclxuICAgICAgbGV0IHRvb2x0aXAgPSBlbGUuc2NyYXRjaCgnX3Rvb2x0aXAnKTtcclxuICAgICAgaWYgKHRvb2x0aXApIHtcclxuICAgICAgICB0b29sdGlwLmhpZGUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfTtcclxuXHJcbiAgY3kub24oU0hPV19JTlRFUkFDVElPTlNfVE9PTFRJUFNfRVZFTlQsICdub2RlJywgZnVuY3Rpb24gKGV2dCkge1xyXG4gICAgbGV0IG5vZGUgPSBldnQudGFyZ2V0O1xyXG4gICAgbGV0IGdlbmVJZCA9IG5vZGUuZGF0YSgnaWQnKTtcclxuICAgIGxldCBnZW5lTWV0YWRhdGEgPSBnZW5lRGF0YS5maW5kKCBpbmZvID0+IGluZm8ucXVlcnkgPT09IGdlbmVJZCApIHx8IHt9O1xyXG4gICAgbGV0IHRvb2x0aXAgPSBuZXcgQ3l0b3NjYXBlVG9vbHRpcCggbm9kZS5wb3BwZXJSZWYoKSwge1xyXG4gICAgICBodG1sOiBoKEludGVyYWN0aW9uc05vZGVUb29sdGlwLCB7IG5vZGUsIGdlbmVNZXRhZGF0YSB9KVxyXG4gICAgfSApO1xyXG4gICAgbm9kZS5zY3JhdGNoKCdfdG9vbHRpcCcsIHRvb2x0aXApO1xyXG4gICAgdG9vbHRpcC5zaG93KCk7XHJcbiAgfSk7XHJcblxyXG4gIGN5Lm9uKFNIT1dfSU5URVJBQ1RJT05TX1RPT0xUSVBTX0VWRU5ULCAnZWRnZScsIGZ1bmN0aW9uIChldnQpIHtcclxuICAgIGxldCBlZGdlID0gZXZ0LnRhcmdldDtcclxuICAgIGxldCB0b29sdGlwID0gbmV3IEN5dG9zY2FwZVRvb2x0aXAoIGVkZ2UucG9wcGVyUmVmKCksIHtcclxuICAgICAgaHRtbDogaChJbnRlcmFjdGlvbnNFZGdlVG9vbHRpcCwge1xyXG4gICAgICAgIGVkZ2U6IGVkZ2VcclxuICAgICAgICB9KVxyXG4gICAgfSApO1xyXG4gICAgZWRnZS5zY3JhdGNoKCdfdG9vbHRpcCcsIHRvb2x0aXApO1xyXG4gICAgdG9vbHRpcC5zaG93KCk7XHJcbiAgfSk7XHJcblxyXG4gIGN5Lm9uKCd0YXAnLCBldnQgPT4ge1xyXG4gICAgY29uc3QgdGd0ID0gZXZ0LnRhcmdldDtcclxuXHJcbiAgICAvLyB3ZSBjbGlja2VkIGFuIGVsZW1lbnQgdGhhdCBoYXMgYSB0b29sdGlwIG9wZW4gLT4gY2xvc2UgaXRcclxuICAgIGlmKCB0Z3Quc2NyYXRjaCgnX3Rvb2x0aXAnKSl7XHJcbiAgICAgIGhpZGVUb29sdGlwcygpO1xyXG4gICAgICB0Z3QucmVtb3ZlU2NyYXRjaCgnX3Rvb2x0aXAnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIG9wZW4gdGhlIHRvb2x0aXAgZm9yIHRoZSBjbGlja2VkIGVsZW1lbnRcclxuICAgICAgaGlkZVRvb2x0aXBzKCk7XHJcbiAgICAgIHRndC5lbWl0KFNIT1dfSU5URVJBQ1RJT05TX1RPT0xUSVBTX0VWRU5UKTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgLy9IaWRlIFRvb2x0aXBzIG9uIHZhcmlvdXMgZ3JhcGggbW92ZW1lbnRzXHJcbiAgY3kub24oJ2RyYWcnLCAoKSA9PiBoaWRlVG9vbHRpcHMoKSk7XHJcbiAgY3kub24oJ3BhbicsICgpID0+IGhpZGVUb29sdGlwcygpKTtcclxuICBjeS5vbignem9vbScsICgpID0+IGhpZGVUb29sdGlwcygpKTtcclxuICBjeS5vbignbGF5b3V0c3RhcnQnLCAoKSA9PiBoaWRlVG9vbHRpcHMoKSk7XHJcbiAgY3kub24oJ2hpZGUtdHlwZScsICgpID0+IGhpZGVUb29sdGlwcygpKTtcclxuICBjeS5vbignc2xpZGVyLWNoYW5nZScsICgpID0+IGhpZGVUb29sdGlwcygpKTtcclxuXHJcbiAgbGV0IG5vZGVIb3Zlck1vdXNlT3ZlciA9IF8uZGVib3VuY2UoZXZ0ID0+IHtcclxuICAgIGxldCBub2RlID0gZXZ0LnRhcmdldDtcclxuICAgIGxldCBlbGVzVG9IaWdobGlnaHQgPSBjeS5jb2xsZWN0aW9uKCk7XHJcblxyXG4gICAgLy9DcmVhdGUgYSBsaXN0IG9mIHRoZSBob3ZlcmVkIG5vZGUgJiBpdHMgbmVpZ2hib3VyaG9vZFxyXG4gICAgbm9kZS5uZWlnaGJvcmhvb2QoKS5ub2RlcygpLnVuaW9uKG5vZGUpLmZvckVhY2gobm9kZSA9PiB7XHJcbiAgICAgIGVsZXNUb0hpZ2hsaWdodC5tZXJnZShub2RlLmFuY2VzdG9ycygpKTtcclxuICAgICAgZWxlc1RvSGlnaGxpZ2h0Lm1lcmdlKG5vZGUuZGVzY2VuZGFudHMoKSk7XHJcbiAgICAgIGVsZXNUb0hpZ2hsaWdodC5tZXJnZShub2RlKTtcclxuICAgIH0pO1xyXG4gICAgZWxlc1RvSGlnaGxpZ2h0Lm1lcmdlKG5vZGUubmVpZ2hib3Job29kKCkuZWRnZXMoKSk7XHJcblxyXG4gICAgLy9BZGQgaGlnaGxpZ2h0ZWQgY2xhc3MgdG8gbm9kZSAmIGl0cyBuZWlnaGJvdXJob29kLCB1bmhpZ2hsaWdodGVkIHRvIGV2ZXJ5dGhpbmcgZWxzZVxyXG4gICAgY3kuZWxlbWVudHMoKS5hZGRDbGFzcygndW5oaWdobGlnaHRlZCcpO1xyXG4gICAgZWxlc1RvSGlnaGxpZ2h0LmZvckVhY2goZWxlID0+IHtcclxuICAgICAgZWxlLnJlbW92ZUNsYXNzKCd1bmhpZ2hsaWdodGVkJyk7XHJcbiAgICAgIGVsZS5hZGRDbGFzcygnaGlnaGxpZ2h0ZWQnKTtcclxuICAgIH0pO1xyXG5cclxuICB9LCA3NTApO1xyXG5cclxuICAvL2NhbGwgc3R5bGUtYXBwbHlpbmcgYW5kIHN0eWxlLXJlbW92aW5nIGZ1bmN0aW9ucyBvbiAnbW91c2VvdmVyJyBhbmQgJ21vdXNlb3V0JyBmb3Igbm9uLWNvbXBhcnRtZW50IG5vZGVzXHJcbiAgY3kub24oJ21vdXNlb3ZlcicsICdub2RlW2NsYXNzIT1cImNvbXBhcnRtZW50XCJdJywgbm9kZUhvdmVyTW91c2VPdmVyKTtcclxuICBjeS5vbignbW91c2VvdXQnLCAnbm9kZVtjbGFzcyE9XCJjb21wYXJ0bWVudFwiXScsICgpID0+IHtcclxuICAgIG5vZGVIb3Zlck1vdXNlT3Zlci5jYW5jZWwoKTtcclxuICAgIGN5LmVsZW1lbnRzKCkucmVtb3ZlQ2xhc3MoJ2hpZ2hsaWdodGVkIHVuaGlnaGxpZ2h0ZWQnKTtcclxuICB9KTtcclxufTtcclxuXHJcbi8vU2VhcmNoIGJ5IGtleXdvcmQgd2l0aGluIG5ldHdvcmtcclxubGV0IHNlYXJjaEludGVyYWN0aW9uTm9kZXMgPSBfLmRlYm91bmNlKChjeSwgcXVlcnkpID0+IHtcclxuICBsZXQgcXVlcnlFbXB0eSA9IF8udHJpbShxdWVyeSkgPT09ICcnO1xyXG4gIGxldCBhbGxOb2RlcyA9IGN5Lm5vZGVzKCk7XHJcbiAgbGV0IG1hdGNoZWQgPSBhbGxOb2Rlcy5maWx0ZXIoIG5vZGUgPT4gbm9kZS5kYXRhKCdpZCcpLnRvVXBwZXJDYXNlKCkuaW5jbHVkZXMoIHF1ZXJ5LnRvVXBwZXJDYXNlKCkgKSApO1xyXG5cclxuICBjeS5iYXRjaCgoKSA9PiB7XHJcbiAgICBhbGxOb2Rlcy5yZW1vdmVDbGFzcygnbWF0Y2hlZCcpO1xyXG5cclxuICAgIGlmKCBtYXRjaGVkLmxlbmd0aCA+IDAgJiYgIXF1ZXJ5RW1wdHkgKXtcclxuICAgICAgbWF0Y2hlZC5hZGRDbGFzcygnbWF0Y2hlZCcpO1xyXG4gICAgfVxyXG4gIH0pO1xyXG59LCAyNTApO1xyXG5cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG4gIGludGVyYWN0aW9uc0xheW91dE9wdHMsXHJcbiAgc2VhcmNoSW50ZXJhY3Rpb25Ob2RlcyxcclxuICBpbnRlcmFjdGlvbnNTdHlsZXNoZWV0OiByZXF1aXJlKCcuL2ludGVyYWN0aW9ucy1zdHlsZXNoZWV0JyksXHJcbiAgYmluZEV2ZW50c1xyXG59O1xyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY2xpZW50L2ZlYXR1cmVzL2ludGVyYWN0aW9ucy9jeS9pbmRleC5qcyIsImNvbnN0IElOVEVSQUNUSU9OX1RZUEVTID0ge1xyXG4gIEJJTkRJTkc6ICdCaW5kaW5nJyxcclxuICBNT0RJRklDQVRJT046ICdNb2RpZmljYXRpb24nLFxyXG4gIEVYUFJFU1NJT046ICdFeHByZXNzaW9uJyxcclxuICBPVEhFUjogJ090aGVyJ1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBJTlRFUkFDVElPTl9UWVBFUztcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NsaWVudC9mZWF0dXJlcy9pbnRlcmFjdGlvbnMvdHlwZXMuanMiLCJjb25zdCBoID0gcmVxdWlyZSgncmVhY3QtaHlwZXJzY3JpcHQnKTtcclxuY29uc3QgQ3l0b3NjYXBlVG9vbHRpcCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbW1vbi9jeS9jeXRvc2NhcGUtdG9vbHRpcCcpO1xyXG5jb25zdCBfID0gcmVxdWlyZSgnbG9kYXNoJyk7XHJcblxyXG5jb25zdCBFbnJpY2htZW50VG9vbHRpcCA9IHJlcXVpcmUoJy4uL2VucmljaG1lbnQtdG9vbHRpcCcpO1xyXG5cclxuY29uc3QgeyBnZW5lcmF0ZUNsdXN0ZXJMYWJlbHMgfSA9IHJlcXVpcmUoJy4vY2x1c3Rlci1sYWJlbC1jYXRlZ29yaXphdGlvbicpO1xyXG5cclxuXHJcbmNvbnN0IFNIT1dfRU5SSUNITUVOVF9UT09MVElQU19FVkVOVCA9ICdzaG93ZW5yaWNobWVudHRvb2x0aXAnO1xyXG5jb25zdCBFTlJJQ0hNRU5UX0xBWU9VVF9PUFRTID0ge1xyXG4gIG5hbWU6ICdjb2xhJyxcclxuICByZWZyZXNoOiAxMCxcclxuICBhbmltYXRlOiBmYWxzZSxcclxuICBtYXhTaW11bGF0aW9uVGltZTogNTAwLFxyXG4gIG5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczogdHJ1ZSxcclxuXHJcbiAgcmFuZG9taXplOiB0cnVlLFxyXG4gIGNvbnZlcmdlbmNlVGhyZXNob2xkOiA1MCxcclxuICBwYWRkaW5nOiA1MFxyXG59O1xyXG5jb25zdCBQQVJFTlRfU0VMX1BSRUZJWCA9ICdjb21wb25lbnQtJztcclxuY29uc3Qgbm9QYXJlbnQgPSBjb21wb25lbnQgPT4gIWNvbXBvbmVudC5pc0NoaWxkKCk7XHJcblxyXG5sZXQgZW5yaWNobWVudExheW91dCA9IGN5ID0+IHtcclxuICBsZXQgbm9kZXNXaXRoTm9FZGdlcyA9IGN5Lm5vZGVzKCkuZmlsdGVyKCBub2RlID0+IG5vZGUuY29ubmVjdGVkRWRnZXMoKS5zaXplKCkgPT09IDAgKTtcclxuICBsZXQgbm9kZXNXaXRoRWRnZXMgPSBjeS5lbGVtZW50cygpLmRpZmZlcmVuY2UoIG5vZGVzV2l0aE5vRWRnZXMgKTtcclxuICBsZXQgdyA9IGN5LndpZHRoKCk7XHJcbiAgbGV0IGggPSBjeS5oZWlnaHQoKTtcclxuXHJcbiAgbGV0IGZpcnN0TGF5b3V0ID0gbm9kZXNXaXRoRWRnZXMubGF5b3V0KEVOUklDSE1FTlRfTEFZT1VUX09QVFMpO1xyXG4gIGxldCBmaXJzdExheW91dFByb21pc2UgPSBmaXJzdExheW91dC5wb24oJ2xheW91dHN0b3AnKTtcclxuICBmaXJzdExheW91dC5ydW4oKTtcclxuXHJcbiAgcmV0dXJuIGZpcnN0TGF5b3V0UHJvbWlzZS50aGVuKCAoKSA9PiB7XHJcblxyXG4gICAgLy8gYWRkIHBhcmVudCBub2RlcyBmb3IgZWFjaCBjb21wb25lbnQgd2l0aCBzaXplID4gMlxyXG4gICAgY3kuZWxlbWVudHMoKVxyXG4gICAgICAuY29tcG9uZW50cygpXHJcbiAgICAgIC5maWx0ZXIoIGNvbXBvbmVudCA9PiBjb21wb25lbnQuc2l6ZSgpID4gMiApXHJcbiAgICAgIC5maWx0ZXIoIG5vUGFyZW50IClcclxuICAgICAgLmZvckVhY2goIChjb21wb25lbnQsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgbGV0IGxhYmVsSW5wdXQgPSBjb21wb25lbnQubm9kZXMoKS5tYXAobm9kZSA9PiBub2RlLmRhdGEoJ25hbWUnKSkuam9pbignLiAnKTtcclxuICAgICAgICBsZXQgdGFncyA9IGdlbmVyYXRlQ2x1c3RlckxhYmVscyhsYWJlbElucHV0KTtcclxuXHJcbiAgICAgICAgbGV0IGNvbXBvbmVudFBhcmVudElkID0gUEFSRU5UX1NFTF9QUkVGSVggKyBpbmRleDtcclxuICAgICAgICBjeS5hZGQoe1xyXG4gICAgICAgICAgZ3JvdXA6ICdub2RlcycsXHJcbiAgICAgICAgICBsYWJlbDogJycsXHJcbiAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgIHRhZ3M6IHRhZ3Muam9pbignICcpLFxyXG4gICAgICAgICAgICBpZDogY29tcG9uZW50UGFyZW50SWRcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbXBvbmVudC5tb3ZlKHtcclxuICAgICAgICAgIHBhcmVudDogY29tcG9uZW50UGFyZW50SWRcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcblxyXG5cclxuICAgIGxldCBmaXJzdExheW91dEJCID0gbm9kZXNXaXRoRWRnZXMuYm91bmRpbmdCb3goKTtcclxuICAgIGxldCBiYklzRW1wdHkgPSBiYiA9PiBiYi5oID09PSAwICYmIGJiLncgPT09IDA7XHJcblxyXG4gICAgbGV0IHNlY29uZExheW91dEJCID0ge1xyXG4gICAgICB4MTogMCxcclxuICAgICAgeDI6IHcsXHJcbiAgICAgIHkxOiAwLFxyXG4gICAgICB5MjogaFxyXG4gICAgfTtcclxuXHJcbiAgICBpZiggIWJiSXNFbXB0eSggZmlyc3RMYXlvdXRCQiApICl7XHJcbiAgICAgIHNlY29uZExheW91dEJCID0ge1xyXG4gICAgICAgIHgxOiBmaXJzdExheW91dEJCLngxLFxyXG4gICAgICAgIHgyOiBmaXJzdExheW91dEJCLngyLFxyXG4gICAgICAgIHkxOiBmaXJzdExheW91dEJCLnkyICsgMjAwLFxyXG4gICAgICAgIHkyOiBmaXJzdExheW91dEJCLnkyICsgNDAwXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHNlY29uZExheW91dCA9IG5vZGVzV2l0aE5vRWRnZXMubGF5b3V0KHtcclxuICAgICAgbmFtZTogJ2dyaWQnLFxyXG4gICAgICBub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHM6IHRydWUsXHJcbiAgICAgIGJvdW5kaW5nQm94OiBzZWNvbmRMYXlvdXRCQixcclxuICAgICAgc3RvcDogKCkgPT4gY3kuZml0KFtdLCBNYXRoLm1pbigwLjA1ICogaCwgMC4wNSAqIHcpKVxyXG4gICAgfSk7XHJcbiAgICBsZXQgc2Vjb25kTGF5b3V0UHJvbWlzZSA9IHNlY29uZExheW91dC5wb24oJ2xheW91dHN0b3AnKTtcclxuICAgIHNlY29uZExheW91dC5ydW4oKTtcclxuXHJcbiAgICByZXR1cm4gc2Vjb25kTGF5b3V0UHJvbWlzZTtcclxuICB9KTtcclxufTtcclxuXHJcblxyXG5sZXQgYmluZEV2ZW50cyA9IGN5ID0+IHtcclxuICBsZXQgaGlkZVRvb2x0aXBzID0gKCkgPT4ge1xyXG4gICAgY3kuZWxlbWVudHMoKS5mb3JFYWNoKGVsZSA9PiB7XHJcbiAgICAgIGxldCB0b29sdGlwID0gZWxlLnNjcmF0Y2goJ190b29sdGlwJyk7XHJcbiAgICAgIGlmICh0b29sdGlwKSB7XHJcbiAgICAgICAgdG9vbHRpcC5oaWRlKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH07XHJcblxyXG4gIGN5Lm9uKFNIT1dfRU5SSUNITUVOVF9UT09MVElQU19FVkVOVCwgJ25vZGUnLCBmdW5jdGlvbiAoZXZ0KSB7XHJcbiAgICBsZXQgbm9kZSA9IGV2dC50YXJnZXQ7XHJcblxyXG4gICAgaWYoIG5vZGUuaXNQYXJlbnQoKSApeyByZXR1cm47IH1cclxuXHJcbiAgICBsZXQgdG9vbHRpcCA9IG5ldyBDeXRvc2NhcGVUb29sdGlwKCBub2RlLnBvcHBlclJlZigpLCB7XHJcbiAgICAgIGh0bWw6IGgoRW5yaWNobWVudFRvb2x0aXAsIHtcclxuICAgICAgICBub2RlOiBub2RlLFxyXG4gICAgICAgIH0pXHJcbiAgICB9ICk7XHJcbiAgICBub2RlLnNjcmF0Y2goJ190b29sdGlwJywgdG9vbHRpcCk7XHJcbiAgICB0b29sdGlwLnNob3coKTtcclxuICB9KTtcclxuXHJcbiAgY3kub24oJ3RhcCcsIGV2dCA9PiB7XHJcbiAgICBjb25zdCB0Z3QgPSBldnQudGFyZ2V0O1xyXG5cclxuICAgIC8vIGlmIHdlIGRpZG4ndCBjbGljayBhIG5vZGUsIGNsb3NlIGFsbCB0b29sdGlwc1xyXG4gICAgaWYoIGV2dC50YXJnZXQgPT09IGN5IHx8IGV2dC50YXJnZXQuaXNFZGdlKCkgKXtcclxuICAgICAgaGlkZVRvb2x0aXBzKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyB3ZSBjbGlja2VkIGEgbm9kZSB0aGF0IGhhcyBhIHRvb2x0aXAgb3BlbiAtPiBjbG9zZSBpdFxyXG4gICAgaWYoIHRndC5zY3JhdGNoKCdfdG9vbHRpcC1vcGVuZWQnKSApe1xyXG4gICAgICBoaWRlVG9vbHRpcHMoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIG9wZW4gdGhlIHRvb2x0aXAgZm9yIHRoZSBjbGlja2VkIG5vZGVcclxuICAgICAgaGlkZVRvb2x0aXBzKCk7XHJcbiAgICAgIHRndC5lbWl0KFNIT1dfRU5SSUNITUVOVF9UT09MVElQU19FVkVOVCk7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIC8vSGlkZSBUb29sdGlwcyBvbiB2YXJpb3VzIGdyYXBoIG1vdmVtZW50c1xyXG4gIGN5Lm9uKCdkcmFnJywgKCkgPT4gaGlkZVRvb2x0aXBzKCkpO1xyXG4gIGN5Lm9uKCdwYW4nLCAoKSA9PiBoaWRlVG9vbHRpcHMoKSk7XHJcbiAgY3kub24oJ3pvb20nLCAoKSA9PiBoaWRlVG9vbHRpcHMoKSk7XHJcbiAgY3kub24oJ2xheW91dHN0YXJ0JywgKCkgPT4gaGlkZVRvb2x0aXBzKCkpO1xyXG59O1xyXG5cclxubGV0IHNlYXJjaEVucmljaG1lbnROb2RlcyA9IF8uZGVib3VuY2UoKGN5LCBxdWVyeSkgPT4ge1xyXG4gIGxldCBxdWVyeUVtcHR5ID0gXy50cmltKHF1ZXJ5KSA9PT0gJyc7XHJcbiAgbGV0IGFsbE5vZGVzID0gY3kubm9kZXMoKTtcclxuICBsZXQgbWF0Y2hlZCA9IGFsbE5vZGVzLmZpbHRlciggbm9kZSA9PiB7XHJcbiAgICBjb25zdCBnZW5lU2V0ID0gKG5vZGUuZGF0YSgnZ2VuZVNldCcpIHx8IFtdKS5tYXAobmFtZSA9PiBuYW1lLnRvVXBwZXJDYXNlKCkpO1xyXG4gICAgY29uc3QgbmFtZSA9IChub2RlLmRhdGEoJ25hbWUnKSB8fCAnJykudG9VcHBlckNhc2UoKTtcclxuICAgIGNvbnN0IG1hdGNoZXMgPSAoc3RyLCBxKSA9PiBzdHIuaW5kZXhPZihxKSA+PSAwO1xyXG4gICAgY29uc3QgcSA9IHF1ZXJ5LnRvVXBwZXJDYXNlKCk7XHJcblxyXG4gICAgcmV0dXJuIG1hdGNoZXMobmFtZSwgcSkgfHwgZ2VuZVNldC5zb21lKGdlbmVOYW1lID0+IG1hdGNoZXMoZ2VuZU5hbWUsIHEpKTtcclxuICB9KTtcclxuXHJcbiAgY3kuYmF0Y2goKCkgPT4ge1xyXG4gICAgYWxsTm9kZXMucmVtb3ZlQ2xhc3MoJ21hdGNoZWQnKTtcclxuICAgIGlmKCBtYXRjaGVkLmxlbmd0aCA+IDAgJiYgIXF1ZXJ5RW1wdHkgKXtcclxuICAgICAgbWF0Y2hlZC5hZGRDbGFzcygnbWF0Y2hlZCcpO1xyXG4gICAgfVxyXG4gIH0pO1xyXG59LCAyNTApO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcbiAgZW5yaWNobWVudExheW91dCxcclxuICBzZWFyY2hFbnJpY2htZW50Tm9kZXMsXHJcbiAgZW5yaWNobWVudFN0eWxlc2hlZXQ6IHJlcXVpcmUoJy4vZW5yaWNobWVudC1zdHlsZXNoZWV0JyksXHJcbiAgYmluZEV2ZW50c1xyXG59O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jbGllbnQvZmVhdHVyZXMvZW5yaWNobWVudC9jeS9pbmRleC5qcyIsInJlcXVpcmUoJ2JhYmVsLXBvbHlmaWxsJyk7XHJcbnJlcXVpcmUoJ3doYXR3Zy1mZXRjaCcpO1xyXG5cclxuY29uc3QgZGVidWcgPSByZXF1aXJlKCcuL2RlYnVnJyk7XHJcbmNvbnN0IGhoID0gcmVxdWlyZSgnaHlwZXJzY3JpcHQnKTtcclxuY29uc3QgaCA9IHJlcXVpcmUoJ3JlYWN0LWh5cGVyc2NyaXB0Jyk7XHJcbmNvbnN0IFJvdXRlciA9IHJlcXVpcmUoJy4vcm91dGVyJyk7XHJcbmNvbnN0IFJlYWN0RE9NID0gcmVxdWlyZSgncmVhY3QtZG9tJyk7XHJcblxyXG5jb25zdCBSZWdpc3RlckN5RXh0ZW5zaW9ucyA9IHJlcXVpcmUoJy4vY3l0b3NjYXBlLWV4dGVuc2lvbnMnKTtcclxuXHJcbmlmKCBkZWJ1Zy5lbmFibGVkKCkgKXtcclxuICBkZWJ1Zy5pbml0KCk7XHJcbn1cclxuXHJcblJlZ2lzdGVyQ3lFeHRlbnNpb25zKCk7XHJcblxyXG5sZXQgcm9vdCA9IGhoKCdkaXYjcm9vdCcpO1xyXG5kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKCByb290ICk7XHJcblxyXG5SZWFjdERPTS5yZW5kZXIoIGgoUm91dGVyKSwgcm9vdCk7XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jbGllbnQvaW5kZXguanMiLCJjb25zdCBfID0gcmVxdWlyZSgnbG9kYXNoJyk7XHJcblxyXG5sZXQgZGVmYXVsdHMgPSB7XHJcbiAgUE9SVDogMzAwMCxcclxuICBNRVRBREFUQV9DUk9OX1NDSEVEVUxFOiAnMCAwICogKiBNb25kYXknLCAvLyB1cGRhdGUgZmlsZSBmcm9tIGdwcm9maWxlciBldGMuIChNb25kYXkgYXQgbWlkbmlnaHQpXHJcbiAgUENfVVJMOiAnaHR0cHM6Ly93d3cucGF0aHdheWNvbW1vbnMub3JnLycsXHJcbiAgRE9XTkxPQURTX0ZPTERFUl9OQU1FOiAnZG93bmxvYWRzJyxcclxuICBHUFJPRklMRVJfVVJMOiBcImh0dHBzOi8vYmlpdC5jcy51dC5lZS9ncHJvZmlsZXIvXCIsXHJcbiAgR01UX0FSQ0hJVkVfVVJMOiAnaHR0cHM6Ly9iaWl0LmNzLnV0LmVlL2dwcm9maWxlci9zdGF0aWMvZ3Byb2ZpbGVyX2hzYXBpZW5zLm5hbWUuemlwJyxcclxuICBJREVOVElGSUVSU19VUkw6ICdodHRwOi8vYmlvcmVnaXN0cnkuaW8nLFxyXG4gIE5DQklfRVVUSUxTX0JBU0VfVVJMOiAnaHR0cHM6Ly9ldXRpbHMubmNiaS5ubG0ubmloLmdvdi9lbnRyZXovZXV0aWxzJyxcclxuICBOQ0JJX0FQSV9LRVk6ICdiOTllMTBlYmUwZjkwZDgxNWE3YTk5ZjE4NDAzYWFiMDgwMDgnLCAvLyBmb3IgZGV2IHRlc3Rpbmcgb25seSAoYmFkZXJsYWJzeXNtb25pdG9yIG5jYmkga2V5KVxyXG4gIFBVQk1FRF9CQVNFX1VSTDogJ2h0dHBzOi8vcHVibWVkLm5jYmkubmxtLm5paC5nb3YvJyxcclxuICBIR05DX0JBU0VfVVJMOiAnaHR0cHM6Ly9yZXN0LmdlbmVuYW1lcy5vcmcnLFxyXG4gIFVOSVBST1RfQVBJX0JBU0VfVVJMOiAnaHR0cHM6Ly93d3cuZWJpLmFjLnVrL3Byb3RlaW5zL2FwaScsXHJcbiAgRE9JX0JBU0VfVVJMOiAnaHR0cHM6Ly9kb2kub3JnLycsXHJcbiAgT1JDSURfQkFTRV9VUkw6ICdodHRwczovL29yY2lkLm9yZy8nLFxyXG4gIFNCR05fSU1HX1NFUlZJQ0VfQkFTRV9VUkw6ICdodHRwOi8vbG9jYWxob3N0OjkwOTAvJyxcclxuICBTQkdOX0lNR19QQVRIOiAncHVibGljL2ltZy9wYXRod2F5cycsXHJcbiAgUENfSU1BR0VfQ0FDSEVfTUFYX1NJWkU6IDEwMDAwLFxyXG4gIFBDX0NBQ0hFX01BWF9TSVpFOiAxMDAwLFxyXG4gIFBVQl9DQUNIRV9NQVhfU0laRTogMTAwMDAwMCxcclxuICBFTlRfQ0FDSEVfTUFYX1NJWkU6IDEwMDAwMDAsXHJcbiAgRU5UX1NVTU1BUllfQ0FDSEVfTUFYX1NJWkU6IDEwMDAwMDAsXHJcbiAgTUFYX1NJRl9OT0RFUzogMjUsXHJcbiAgQ0xJRU5UX0ZFVENIX1RJTUVPVVQ6IDE1MDAwLFxyXG4gIFNFUlZFUl9GRVRDSF9USU1FT1VUOiA1MDAwLFxyXG4gIC8vIERCIGNvbmZpZyB2YWx1ZXNcclxuICBEQl9OQU1FOiAgJ2FwcHVpJyxcclxuICBEQl9IT1NUOiAgJzEyNy4wLjAuMScsXHJcbiAgREJfUE9SVDogJzI4MDE1JyxcclxuICBEQl9VU0VSOiB1bmRlZmluZWQsXHJcbiAgREJfUEFTUzogdW5kZWZpbmVkLFxyXG4gIERCX0NFUlQ6IHVuZGVmaW5lZCxcclxuICAvLyBmYWN0b2lkIHNwZWNpZmljIHVybHNcclxuICBGQUNUT0lEX1VSTDogJ2h0dHBzOi8vYmlvZmFjdG9pZC5vcmcvJyxcclxuICBOU19DSEVCSTogJ2NoZWJpJyxcclxuICBOU19FTlNFTUJMOiAnZW5zZW1ibCcsXHJcbiAgTlNfR0VORUNBUkRTOiAnZ2VuZWNhcmRzJyxcclxuICBOU19HRU5FX09OVE9MT0dZOiAnZ28nLFxyXG4gIE5TX0hHTkM6ICdoZ25jJyxcclxuICBOU19IR05DX1NZTUJPTDogJ2hnbmMuc3ltYm9sJyxcclxuICBOU19OQ0JJX0dFTkU6ICduY2JpZ2VuZScsXHJcbiAgTlNfUFVCTUVEOiAncHVibWVkJyxcclxuICBOU19SRUFDVE9NRTogJ3JlYWN0b21lJyxcclxuICBOU19VTklQUk9UOiAndW5pcHJvdCcsXHJcbiAgTlNfQklPRkFDVE9JRDogJ2Jpb2ZhY3RvaWQnLFxyXG4gIE5TX1BBVEhXQVlDT01NT05TOiAncGF0aHdheWNvbW1vbnMnXHJcbn07XHJcblxyXG5sZXQgZW52VmFycyA9IF8ucGljayggcHJvY2Vzcy5lbnYsIE9iamVjdC5rZXlzKCBkZWZhdWx0cyApICk7XHJcblxyXG5cclxuLy8gdGhlc2UgdmFycyBhcmUgYWx3YXlzIGluY2x1ZGVkIGluIHRoZSBidW5kbGUgYmVjYXVzZSB0aGV5IHJlZiBgcHJvY2Vzcy5lbnYuJHtuYW1lfWAgZGlyZWN0bHlcclxuLy8gTkIgRE8gTk9UIGluY2x1ZGUgcGFzc3dvcmRzIGV0Yy4gaGVyZVxyXG5sZXQgY2xpZW50VmFycyA9IHtcclxuICBOT0RFX0VOVjogcHJvY2Vzcy5lbnYuTk9ERV9FTlYsXHJcbiAgUENfVVJMOiBwcm9jZXNzLmVudi5QQ19VUkwsXHJcbiAgRkFDVE9JRF9VUkw6IHByb2Nlc3MuZW52LkZBQ1RPSURfVVJMXHJcbn07XHJcblxyXG5fLmFzc2lnbihlbnZWYXJzLCBjbGllbnRWYXJzKTtcclxuXHJcbmZvciggbGV0IGtleSBpbiBlbnZWYXJzICl7XHJcbiAgbGV0IHZhbCA9IGVudlZhcnNba2V5XTtcclxuXHJcbiAgaWYoIHZhbCA9PT0gJycgfHwgdmFsID09IG51bGwgKXtcclxuICAgIGRlbGV0ZSBlbnZWYXJzW2tleV07XHJcbiAgfVxyXG59XHJcblxyXG5sZXQgY29uZiA9IE9iamVjdC5hc3NpZ24oIHt9LCBkZWZhdWx0cywgZW52VmFycyApO1xyXG5cclxuT2JqZWN0LmZyZWV6ZSggY29uZiApO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBjb25mO1xyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY29uZmlnLmpzIiwibGV0IGRvbVJlYWR5ID0gcmVxdWlyZSgnZnJlYWR5Jyk7XHJcbmxldCBzeW5jID0gcmVxdWlyZSgnLi9zeW5jJyk7XHJcblxyXG5sZXQgZGVidWcgPSB3aW5kb3cuZGJnID0ge1xyXG4gIGVuYWJsZWQ6IGZ1bmN0aW9uKCBvbiApe1xyXG4gICAgaWYoIGFyZ3VtZW50cy5sZW5ndGggPT09IDAgKXtcclxuICAgICAgaWYoIHRoaXMuX2VuYWJsZWQgIT0gbnVsbCApe1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9lbmFibGVkO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB3aW5kb3cuREVCVUcgfHwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJztcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fZW5hYmxlZCA9ICEhb247XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgaW5pdDogZnVuY3Rpb24oKXtcclxuICAgIGRvbVJlYWR5KCBzeW5jICk7XHJcbiAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBkZWJ1ZztcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NsaWVudC9kZWJ1Zy5qcyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYXBwZW5kU2NyaXB0KCl7XHJcbiAgbGV0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xyXG4gIHNjcmlwdC5zcmMgPSAnaHR0cDovLycgKyB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUgKyAnOjM1NzI5L2xpdmVyZWxvYWQuanMnO1xyXG5cclxuICBkb2N1bWVudC5oZWFkLmluc2VydEJlZm9yZSggc2NyaXB0LCBkb2N1bWVudC5oZWFkLmZpcnN0Q2hpbGQgKTtcclxufTtcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NsaWVudC9zeW5jLmpzIiwiLyogKGlnbm9yZWQpICovXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gaHRtbC1lbGVtZW50IChpZ25vcmVkKVxuLy8gbW9kdWxlIGlkID0gNDE2XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImNvbnN0IHtCcm93c2VyUm91dGVyLCBSb3V0ZSwgU3dpdGNofSA9IHJlcXVpcmUoJ3JlYWN0LXJvdXRlci1kb20nKTtcclxuY29uc3QgaCA9IHJlcXVpcmUoJ3JlYWN0LWh5cGVyc2NyaXB0Jyk7XHJcbmNvbnN0IF8gPSByZXF1aXJlKCdsb2Rhc2gnKTtcclxuY29uc3QgcXMgPSByZXF1aXJlKCdxdWVyeS1zdHJpbmcnKTtcclxuXHJcbmNvbnN0IEZlYXR1cmVzID0gcmVxdWlyZSgnLi9mZWF0dXJlcycpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSAoKSA9PiB7XHJcbiAgcmV0dXJuIGgoQnJvd3NlclJvdXRlciwgW1xyXG4gICAgaChTd2l0Y2gsIFtcclxuICAgICAge1xyXG4gICAgICAgIHBhdGg6ICcvJyxcclxuICAgICAgICByZW5kZXI6IHByb3BzID0+IHtcclxuICAgICAgICAgIHJldHVybiBoKEZlYXR1cmVzLlNlYXJjaCwgcHJvcHMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHBhdGg6ICcvc2VhcmNoJyxcclxuICAgICAgICByZW5kZXI6IHByb3BzID0+IHtcclxuICAgICAgICAgIHJldHVybiBoKEZlYXR1cmVzLlNlYXJjaCwgcHJvcHMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHBhdGg6ICcvcGF0aHdheXMnLFxyXG4gICAgICAgIHJlbmRlcjogcHJvcHMgPT4ge1xyXG4gICAgICAgICAgbGV0IHVyaSA9IHFzLnBhcnNlKGxvY2F0aW9uLnNlYXJjaCkudXJpO1xyXG4gICAgICAgICAgbGV0IGFwaU9wdHMgPSB7XHJcbiAgICAgICAgICAgIHR5cGU6ICdwYXRod2F5cycsXHJcbiAgICAgICAgICAgIHVyaVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIGNvbnN0IGRvd25sb2FkT3B0cyA9IHtcclxuICAgICAgICAgICAgZG93bmxvYWRUeXBlczogWyAncG5nJywgJ2dtdCcsICdzaWYnLCAndHh0JywgJ2Jpb3BheCcsICdqc29ubGQnLCAnc2JnbicgXVxyXG4gICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICByZXR1cm4gaChGZWF0dXJlcy5QYXRod2F5cywgXy5hc3NpZ24oIHt9LCBwcm9wcywgeyBhcGlPcHRzLCBkb3dubG9hZE9wdHMgfSApKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBwYXRoOiAnL2Jpb2ZhY3RvaWQnLFxyXG4gICAgICAgIHJlbmRlcjogcHJvcHMgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGgoRmVhdHVyZXMuQmlvZmFjdG9pZCwgcHJvcHMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHBhdGg6ICcvYmlvZmFjdG9pZC86aWQnLFxyXG4gICAgICAgIHJlbmRlcjogcHJvcHMgPT4ge1xyXG4gICAgICAgICAgbGV0IHsgbWF0Y2ggfSA9IHByb3BzO1xyXG4gICAgICAgICAgbGV0IHsgaWQgfSA9IG1hdGNoLnBhcmFtcztcclxuICAgICAgICAgIGxldCBhcGlPcHRzID0ge1xyXG4gICAgICAgICAgICB0eXBlOiAnYmlvZmFjdG9pZCcsXHJcbiAgICAgICAgICAgIGlkXHJcbiAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgIHJldHVybiBoKEZlYXR1cmVzLlBhdGh3YXlzLCBfLmFzc2lnbigge30sIHByb3BzLCB7IGFwaU9wdHMgfSApKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBwYXRoOiAnL3BhaW50JyxcclxuICAgICAgICByZW5kZXI6IHByb3BzID0+IHtcclxuICAgICAgICAgIHJldHVybiBoKEZlYXR1cmVzLlBhaW50LCBwcm9wcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgcGF0aDogJy9pbnRlcmFjdGlvbnMnLFxyXG4gICAgICAgIHJlbmRlcjogcHJvcHMgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGgoRmVhdHVyZXMuSW50ZXJhY3Rpb25zLCBwcm9wcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgcGF0aDogJy9lbnJpY2htZW50JyxcclxuICAgICAgICByZW5kZXI6IHByb3BzID0+IHtcclxuICAgICAgICAgIHJldHVybiBoKEZlYXR1cmVzLkVucmljaG1lbnQsIHByb3BzKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBwYXRoOiAnKicsXHJcbiAgICAgICAgcmVuZGVyOiBwcm9wcyA9PiB7XHJcbiAgICAgICAgICBwcm9wcyA9IF8uYXNzaWduKHsgbm90Rm91bmRFcnJvcjogdHJ1ZSB9LCBwcm9wcyk7XHJcbiAgICAgICAgICByZXR1cm4gaChGZWF0dXJlcy5TZWFyY2gsIHByb3BzKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIF0ubWFwKCBzcGVjID0+IGgoUm91dGUsIF8uYXNzaWduKHsgZXhhY3Q6IHRydWUgfSwgc3BlYykpICkpXHJcbiAgXSk7XHJcbn07XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jbGllbnQvcm91dGVyLmpzIiwiY29uc3QgUGFpbnQgPSByZXF1aXJlKCcuL3BhaW50Jyk7XHJcbmNvbnN0IFBhdGh3YXlzID0gcmVxdWlyZSgnLi9wYXRod2F5cycpO1xyXG5jb25zdCBTZWFyY2ggPSByZXF1aXJlKCcuL3NlYXJjaCcpO1xyXG5jb25zdCBJbnRlcmFjdGlvbnMgPSByZXF1aXJlKCcuL2ludGVyYWN0aW9ucycpO1xyXG5jb25zdCBFbnJpY2htZW50ID0gcmVxdWlyZSgnLi9lbnJpY2htZW50Jyk7XHJcbmNvbnN0IEJpb2ZhY3RvaWQgPSByZXF1aXJlKCcuL2Jpb2ZhY3RvaWQnKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG4gIFBhaW50LFxyXG4gIFNlYXJjaCxcclxuICBQYXRod2F5cyxcclxuICBJbnRlcmFjdGlvbnMsXHJcbiAgRW5yaWNobWVudCxcclxuICBCaW9mYWN0b2lkXHJcbn07XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NsaWVudC9mZWF0dXJlcy9pbmRleC5qcyIsImNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcclxuY29uc3QgaCA9IHJlcXVpcmUoJ3JlYWN0LWh5cGVyc2NyaXB0Jyk7XHJcbmNvbnN0IHF1ZXJ5U3RyaW5nID0gcmVxdWlyZSgncXVlcnktc3RyaW5nJyk7XHJcbmNvbnN0IF8gPSByZXF1aXJlKCdsb2Rhc2gnKTtcclxuY29uc3QgY2xhc3NOYW1lcyA9IHJlcXVpcmUoJ2NsYXNzbmFtZXMnKTtcclxuY29uc3QgTG9hZGVyID0gcmVxdWlyZSgncmVhY3QtbG9hZGVyJyk7XHJcbmNvbnN0IFByb21pc2UgPSByZXF1aXJlKCdibHVlYmlyZCcpLlByb21pc2U7XHJcblxyXG5jb25zdCB7IGZldGNoIH0gPSByZXF1aXJlKCcuLi8uLi8uLi91dGlsJyk7XHJcbmNvbnN0IEN5dG9zY2FwZVNlcnZpY2UgPSByZXF1aXJlKCcuLi8uLi9jb21tb24vY3knKTtcclxuY29uc3QgeyBTZXJ2ZXJBUEkgfSA9IHJlcXVpcmUoJy4uLy4uL3NlcnZpY2VzJyk7XHJcblxyXG5jb25zdCBQYXRod2F5ID0gcmVxdWlyZSgnLi4vLi4vLi4vbW9kZWxzL3BhdGh3YXkvcGF0aHdheS1tb2RlbCcpO1xyXG5cclxuY29uc3QgRmlsZURvd25sb2FkTWVudSA9IHJlcXVpcmUoJy4vbWVudXMvZmlsZS1kb3dubG9hZC1tZW51Jyk7XHJcbmNvbnN0IEluZm9NZW51ID0gcmVxdWlyZSgnLi9tZW51cy9uZXR3b3JrLWluZm8tbWVudScpO1xyXG5jb25zdCBQYWludE1lbnUgPSByZXF1aXJlKCcuL21lbnVzL3BhaW50LW1lbnUnKTtcclxuY29uc3QgUGF0aHdheXNUb29sYmFyID0gcmVxdWlyZSgnLi9wYXRod2F5cy10b29sYmFyJyk7XHJcblxyXG5jb25zdCB7IFNpZGViYXIsIFBjTG9nb0xpbmssIEN5dG9zY2FwZU5ldHdvcmsgfSA9IHJlcXVpcmUoJy4uLy4uL2NvbW1vbi9jb21wb25lbnRzLycpO1xyXG5cclxuY29uc3QgZGVtb0V4cHJlc3Npb25zID0gcmVxdWlyZSgnLi9kZW1vLWV4cHJlc3Npb25zLmpzb24nKTtcclxuY29uc3QgZGVtb1BhdGh3YXlzID0gcmVxdWlyZSgnLi9kZW1vLXBhdGh3YXktcmVzdWx0cy5qc29uJyk7XHJcblxyXG5jb25zdCB7IEV4cHJlc3Npb25UYWJsZSwgYXBwbHlFeHByZXNzaW9uRGF0YSwgZ2VuZUludGVyc2VjdGlvbiB9ID0gcmVxdWlyZSgnLi9leHByZXNzaW9uLXRhYmxlJyk7XHJcblxyXG5jb25zdCB7IHN0eWxlc2hlZXQsIGJpbmRDeUV2ZW50cywgUEFUSFdBWVNfTEFZT1VUX09QVFMgfSA9ICByZXF1aXJlKCcuL2N5Jyk7XHJcblxyXG4vLyBnaXZlbiBhIHN0cmluZyBvZiBOIGdlbmUgbmFtZXMsIGNodW5rIHRoZW0gaW50byBOIC8gMTUgc3VicXVlcmllcyBhbmQgc2VuZCB0aGVtIHRvIHBhdGh3YXkgY29tbW9uc1xyXG4vLyBmb3IgZWFjaCBwYXRod2F5IGluIHRoZSBzZWFyY2ggcmVzdWx0c1xyXG4vLyBnZXQgdGhlIHBhdGh3YXkganNvbiBmb3IgdGhhdCByZXN1bHRcclxuLy8gZmluZCBvdXQgYWxsIHRoZSBnZW5lcyBhcmUgaW4gdGhhdCBwYXRod2F5XHJcbi8vIGZpbmQgYWxsIHRoZSBnZW5lcyBpbiB0aGUgZXhwcmVzc2lvbiBkYXRhXHJcbi8vIHJldHVybiB0aGUgaW50ZXJzZWN0aW9uIGJldHdlZW4gZ2VuZXMgaW4gKGV4cERhdGEsIHApIGZvciBwIGluIFBhdGh3YXkgTGlzdFxyXG5sZXQgZ2V0UGF0aHdheXNSZWxldmFudFRvID0gKHNlYXJjaFBhcmFtLCBleHByZXNzaW9uVGFibGUpID0+IHtcclxuICBsZXQgZXhwcmVzc2lvbnMgPSBleHByZXNzaW9uVGFibGUucmF3RXhwcmVzc2lvbnM7XHJcbiAgbGV0IGdlbmVRdWVyaWVzID0gXy5jaHVuayhleHByZXNzaW9ucy5tYXAoZXhwcmVzc2lvbiA9PiBleHByZXNzaW9uLmdlbmVOYW1lKSwgMTUpXHJcbiAgLm1hcChjaHVuayA9PiBTZXJ2ZXJBUEkuc2VhcmNoKHtxOiBjaHVuay5qb2luKCcgJyksIHR5cGU6ICdQYXRod2F5J30pKTtcclxuXHJcblxyXG4gIGxldCBzZWFyY2hRdWVyeSA9IFNlcnZlckFQSS5zZWFyY2goe3E6IHNlYXJjaFBhcmFtLCB0eXBlOiAnUGF0aHdheSd9KTtcclxuXHJcbiAgcmV0dXJuIFByb21pc2UuYWxsKFsuLi5nZW5lUXVlcmllcywgc2VhcmNoUXVlcnldKS50aGVuKHNlYXJjaFJlc3VsdHMgPT4ge1xyXG4gICAgbGV0IHBhdGh3YXlTZWFyY2hSZXN1bHRzID0gWy4uLnNlYXJjaFJlc3VsdHMubWFwKCByZXN1bHQgPT4gcmVzdWx0LnNlYXJjaEhpdHMpXTtcclxuICAgIGxldCB1bmlxdWVSZXN1bHRzID0gXy51bmlxQnkoXy5mbGF0dGVuKHBhdGh3YXlTZWFyY2hSZXN1bHRzKSwgcmVzdWx0ID0+IHJlc3VsdC51cmkpO1xyXG4gICAgbGV0IHBhdGh3YXlzSlNPTiA9IHVuaXF1ZVJlc3VsdHMubWFwKHJlc3VsdCA9PiBTZXJ2ZXJBUEkuZ2V0UGF0aHdheShyZXN1bHQudXJpLCAnbGF0ZXN0JykuY2F0Y2goICgpID0+IG51bGwgKSk7XHJcblxyXG4gICAgcmV0dXJuIFByb21pc2UuYWxsKHBhdGh3YXlzSlNPTikudGhlbihwYXRod2F5c0pTT04gPT4ge1xyXG4gICAgICByZXR1cm4gXy51bmlxV2l0aChwYXRod2F5c0pTT04uZmlsdGVyKCBwaiA9PiBwaiAhPSBudWxsICkubWFwKCBwYXRod2F5SlNPTiA9PiB7XHJcbiAgICAgICAgbGV0IHAgPSBuZXcgUGF0aHdheSgpO1xyXG4gICAgICAgIHAubG9hZCggcGF0aHdheUpTT04gKTtcclxuICAgICAgICByZXR1cm4gcDtcclxuICAgICAgfSksIChwMCwgcDEpID0+IF8uaXNFcXVhbChwMC5jeUpzb24oKSwgcDEuY3lKc29uKCkpKTtcclxuICAgIH0pO1xyXG4gIH0pO1xyXG59O1xyXG5cclxuY2xhc3MgUGFpbnQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICBzdXBlcihwcm9wcyk7XHJcblxyXG4gICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgY3lTcnY6IG5ldyBDeXRvc2NhcGVTZXJ2aWNlKHsgc3R5bGU6IHN0eWxlc2hlZXQsIG9uTW91bnQ6IGJpbmRDeUV2ZW50cyB9KSxcclxuICAgICAgcGF0aHdheXM6IFtdLFxyXG4gICAgICBjdXJQYXRod2F5OiBuZXcgUGF0aHdheSgpLFxyXG4gICAgICBleHByZXNzaW9uVGFibGU6IG5ldyBFeHByZXNzaW9uVGFibGUoKSxcclxuICAgICAgYWN0aXZlTWVudTogJ3BhaW50TWVudScsXHJcbiAgICAgIHBhaW50TWVudUN0cmxzOiB7XHJcbiAgICAgICAgZXhwckNsYXNzOiAnJyxcclxuICAgICAgICBleHByRm5OYW1lOiAnbWVhbicsXHJcbiAgICAgICAgZXhwckZuOiBfLm1lYW5cclxuICAgICAgfSxcclxuICAgICAgYWN0aXZlVGFiOiAwLFxyXG4gICAgICBpbnZhbGlkRW5yaWNobWVudHM6IGZhbHNlLFxyXG4gICAgICBsb2FkaW5nOiB0cnVlXHJcbiAgICB9O1xyXG5cclxuICAgIGlmKCBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICl7XHJcbiAgICAgIHRoaXMuc3RhdGUuY3lTcnYuZ2V0UHJvbWlzZSgpLnRoZW4oY3kgPT4gd2luZG93LmN5ID0gY3kpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbG9hZFBhaW50RGVtb0RhdGEoKXtcclxuICAgIGxldCB7IGV4cHJlc3Npb25UYWJsZSwgcGFpbnRNZW51Q3RybHMgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBsZXQgcGF0aHdheXMgPSBkZW1vUGF0aHdheXMubWFwKCBqc29uID0+IHtcclxuICAgICAgbGV0IHAgPSBuZXcgUGF0aHdheSgpO1xyXG4gICAgICBwLmxvYWQoIGpzb24gKTtcclxuICAgICAgcmV0dXJuIHA7XHJcbiAgICB9KTtcclxuXHJcbiAgICBleHByZXNzaW9uVGFibGUubG9hZCggZGVtb0V4cHJlc3Npb25zICk7XHJcblxyXG4gICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgIHBhaW50TWVudUN0cmxzOiBfLmFzc2lnbih7fSwgcGFpbnRNZW51Q3RybHMsIHsgZXhwckNsYXNzOiBleHByZXNzaW9uVGFibGUuY2xhc3Nlc1swXSB9KSxcclxuICAgICAgcGF0aHdheXNcclxuICAgIH0sICgpID0+IHRoaXMubG9hZFBhdGh3YXkocGF0aHdheXNbMF0pKTtcclxuICB9XHJcblxyXG4gIC8vIG9uTW91bnQgcHJvcCBwYXNzZWQgdG8gQ3l0b3NjYXBlTmV0d29ya1xyXG4gIC8vIGNhbGxlZCBhZnRlciBDeXRvc2NhcGVOZXR3b3JrIGhhcyBtb3VudGVkXHJcbiAgZ2V0RW5yaWNobWVudHNBbmRQYXRod2F5cygpe1xyXG4gICAgbGV0IHF1ZXJ5ID0gcXVlcnlTdHJpbmcucGFyc2UodGhpcy5wcm9wcy5sb2NhdGlvbi5zZWFyY2gpO1xyXG4gICAgbGV0IHNlYXJjaFBhcmFtID0gcXVlcnkucTtcclxuICAgIGxldCBlbnJpY2htZW50c1VyaSA9IHF1ZXJ5LnVyaTtcclxuICAgIGxldCB7IGV4cHJlc3Npb25UYWJsZSwgcGFpbnRNZW51Q3RybHMgIH0gPSB0aGlzLnN0YXRlO1xyXG5cclxuICAgIC8vIGlmIHRoZSB1c2VyIGp1c3QgY29tZXMgaW50byB0aGUgYXBwIHdpdGhvdXQgZW5yaWNobWVudHMsIGxvYWQgdGhlIGRlbW8gZGF0YVxyXG4gICAgaWYoIGVucmljaG1lbnRzVXJpID09IG51bGwgKXtcclxuICAgICAgdGhpcy5sb2FkUGFpbnREZW1vRGF0YSgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGdldEVucmljaG1lbnRzID0gKCkgPT4ge1xyXG4gICAgICByZXR1cm4gZmV0Y2goZW5yaWNobWVudHNVcmkpLnRoZW4oIHJlcyA9PiByZXMuanNvbigpICkudGhlbigganNvbiA9PiAge1xyXG4gICAgICAgIGV4cHJlc3Npb25UYWJsZS5sb2FkKCBqc29uICk7XHJcbiAgICAgIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICBsZXQgZmluZEJlc3RQYXRod2F5ID0gcGF0aHdheXMgPT4ge1xyXG4gICAgICAvLyAxLiBjaGVjayBpZiB0aGVyZSBpcyBhIHBhdGh3YXkgd2l0aCBhIG5hbWUgdGhhdCBtYXRjaGVzIHRoZSBzZWFyY2ggcGFyYW1cclxuICAgICAgLy8gMi4gc29ydCB0aGUgcGF0aGF3eXMgYnkgdGhlaXIgZ2VuZSBpbnRlcnNlY3Rpb24gYmV0d2VlbiB0aGUgZXhwcmVzc2lvbiB0YWJsZVxyXG5cclxuICAgICAgLy8gc2VlIGlmIHRoZXJlIGlzIGEgcGF0aHdheSB0aGF0IGhhcyB0aGUgc2FtZSB0aXRsZSBhcyB0aGUgc2VhcmNoIHBhcmFtXHJcbiAgICAgIGxldCBiZXN0UmVzdWx0ID0gcGF0aHdheXMuZmluZCggcGF0aHdheSA9PiBwYXRod2F5Lm5hbWUoKSA9PT0gc2VhcmNoUGFyYW0gKTtcclxuICAgICAgaWYoIGJlc3RSZXN1bHQgPT0gbnVsbCApe1xyXG4gICAgICAgIGJlc3RSZXN1bHQgPSBwYXRod2F5c1swXTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYoIGJlc3RSZXN1bHQgPT0gbnVsbCApe1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gYmVzdFJlc3VsdDtcclxuICAgIH07XHJcblxyXG4gICAgZ2V0RW5yaWNobWVudHMoKS50aGVuKCAoKSA9PiBnZXRQYXRod2F5c1JlbGV2YW50VG8oIHNlYXJjaFBhcmFtLCBleHByZXNzaW9uVGFibGUgKSApLnRoZW4oIHBhdGh3YXlzID0+IHtcclxuXHJcbiAgICAgIGlmKCBleHByZXNzaW9uVGFibGUuY2xhc3NlcyA9PSBudWxsICl7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICBpbnZhbGlkRW5yaWNobWVudHM6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHBhdGh3YXlzLnNvcnQoKHAwLCBwMSkgPT4gZ2VuZUludGVyc2VjdGlvbihwMSwgZXhwcmVzc2lvblRhYmxlKS5sZW5ndGggLSBnZW5lSW50ZXJzZWN0aW9uKHAwLCBleHByZXNzaW9uVGFibGUpLmxlbmd0aCk7XHJcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgIHBhaW50TWVudUN0cmxzOiBfLmFzc2lnbih7fSwgcGFpbnRNZW51Q3RybHMsIHsgZXhwckNsYXNzOiBleHByZXNzaW9uVGFibGUuY2xhc3Nlc1swXSB9KSxcclxuICAgICAgICBwYXRod2F5czogcGF0aHdheXMsXHJcbiAgICAgIH0sICgpID0+IHRoaXMubG9hZFBhdGh3YXkoZmluZEJlc3RQYXRod2F5KHBhdGh3YXlzKSkpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBsb2FkUGF0aHdheShwYXRod2F5KXtcclxuICAgIGxldCB7IGN5U3J2LCBwYWludE1lbnVDdHJscywgZXhwcmVzc2lvblRhYmxlIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgbGV0IHsgZXhwckNsYXNzLCBleHByRm4gfSA9IHBhaW50TWVudUN0cmxzO1xyXG4gICAgbGV0IGN5ID0gY3lTcnYuZ2V0KCk7XHJcblxyXG4gICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgIGN1clBhdGh3YXk6IHBhdGh3YXksXHJcbiAgICAgIGxvYWRpbmc6IHRydWVcclxuICAgIH0sICgpID0+IHtcclxuICAgICAgZXhwcmVzc2lvblRhYmxlLmxvYWRQYXRod2F5KCBwYXRod2F5LmN5SnNvbigpICk7XHJcbiAgICAgIGN5LnJlbW92ZSgnKicpO1xyXG4gICAgICBjeS5hZGQoIHBhdGh3YXkuY3lKc29uKCkgKTtcclxuXHJcbiAgICAgIGN5LmxheW91dChfLmFzc2lnbih7fSwgUEFUSFdBWVNfTEFZT1VUX09QVFMsIHtcclxuICAgICAgICBzdG9wOiAoKSA9PiB7XHJcbiAgICAgICAgICBhcHBseUV4cHJlc3Npb25EYXRhKGN5LCBleHByZXNzaW9uVGFibGUsIGV4cHJDbGFzcywgZXhwckZuKTtcclxuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe2xvYWRpbmc6IGZhbHNlIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSkpLnJ1bigpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VNZW51KG1lbnUpe1xyXG4gICAgbGV0IHJlc2l6ZUN5SW1tZWRpYXRlID0gKCkgPT4gdGhpcy5zdGF0ZS5jeVNydi5nZXQoKS5yZXNpemUoKTtcclxuICAgIGxldCByZXNpemVDeURlYm91bmNlZCA9IF8uZGVib3VuY2UoIHJlc2l6ZUN5SW1tZWRpYXRlLCA1MDAgKTtcclxuICAgIGlmKCBtZW51ID09PSB0aGlzLnN0YXRlLmFjdGl2ZU1lbnUgKXtcclxuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGFjdGl2ZU1lbnU6ICdjbG9zZU1lbnUnIH0sIHJlc2l6ZUN5RGVib3VuY2VkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBhY3RpdmVNZW51OiBtZW51IH0sIHJlc2l6ZUN5RGVib3VuY2VkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZVBhaW50Q3RybENoYW5nZShuZXdWYWwpIHtcclxuICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICBwYWludE1lbnVDdHJsczogXy5hc3NpZ24oe30sIHRoaXMuc3RhdGUucGFpbnRNZW51Q3RybHMsIG5ld1ZhbClcclxuICAgIH0sICgpID0+IHtcclxuICAgICAgbGV0IHsgY3lTcnYsIGV4cHJlc3Npb25UYWJsZSwgcGFpbnRNZW51Q3RybHMgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICAgIGxldCB7IGV4cHJDbGFzcywgZXhwckZuIH0gPSBwYWludE1lbnVDdHJscztcclxuICAgICAgYXBwbHlFeHByZXNzaW9uRGF0YShjeVNydi5nZXQoKSwgZXhwcmVzc2lvblRhYmxlLCBleHByQ2xhc3MsIGV4cHJGbik7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGhhbmRsZVBhaW50TWVudVRhYkNoYW5nZShuZXdUYWIpe1xyXG4gICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgIGFjdGl2ZVRhYjogbmV3VGFiXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHJlbmRlcigpIHtcclxuICAgIGxldCB7IGludmFsaWRFbnJpY2htZW50cywgbG9hZGluZywgZXhwcmVzc2lvblRhYmxlLCBjdXJQYXRod2F5LCBwYXRod2F5cywgY3lTcnYsIGFjdGl2ZU1lbnUsIHBhaW50TWVudUN0cmxzLCBhY3RpdmVUYWIgfSA9IHRoaXMuc3RhdGU7XHJcblxyXG4gICAgaWYoIGludmFsaWRFbnJpY2htZW50cyApe1xyXG4gICAgICByZXR1cm4gaCgnZGl2JywgJ1RoZSBwYWludGVyIGFwcCByZXF1aXJlcyBlbnJpY2htZW50cyB0aGF0IGhhdmUgYW4gYXNzb2NpYXRlZCBjbGFzcyBmaWxlJyk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGFwcEJhciA9IGgoJ2Rpdi5hcHAtYmFyJywgW1xyXG4gICAgICBoKCdkaXYuYXBwLWJhci1icmFuZGluZycsIFtcclxuICAgICAgICBoKFBjTG9nb0xpbmspLFxyXG4gICAgICAgIGgoJ2Rpdi5hcHAtYmFyLXRpdGxlJywgW1xyXG4gICAgICAgICAgaCgnc3BhbicsIGN1clBhdGh3YXkubmFtZSgpICsgJyB8ICcpLFxyXG4gICAgICAgICAgaCgnYS5wbGFpbi1saW5rJywgeyBocmVmOiBjdXJQYXRod2F5LmRhdGFzb3VyY2VVcmwoKSwgdGFyZ2V0OidfYmxhbmsnIH0sICcgJyArIGN1clBhdGh3YXkuZGF0YXNvdXJjZSgpKSxcclxuICAgICAgICBdKSxcclxuICAgICAgXSksXHJcbiAgICAgIGgoUGF0aHdheXNUb29sYmFyLCB7IGN5U3J2LCBhY3RpdmVNZW51LCBjb250cm9sbGVyOiB0aGlzIH0pXHJcbiAgICBdKTtcclxuXHJcbiAgICBsZXQgc2lkZWJhciA9IGgoU2lkZWJhciwgeyAgY29udHJvbGxlcjogdGhpcywgYWN0aXZlTWVudSB9LCBbXHJcbiAgICAgIGgoSW5mb01lbnUsIHsga2V5OiAnaW5mb01lbnUnLCBpbmZvTGlzdDogY3VyUGF0aHdheS5jb21tZW50cygpIH0gKSxcclxuICAgICAgaChGaWxlRG93bmxvYWRNZW51LCB7XHJcbiAgICAgICAga2V5OiAnZG93bmxvYWRNZW51JyxcclxuICAgICAgICBjeVNydixcclxuICAgICAgICBmaWxlTmFtZTogY3VyUGF0aHdheS5uYW1lKCksXHJcbiAgICAgICAgdXJpOiBjdXJQYXRod2F5LnVyaSgpXHJcbiAgICAgIH0pLFxyXG4gICAgICBoKFBhaW50TWVudSwge1xyXG4gICAgICAgIGtleTogJ3BhaW50TWVudScsXHJcbiAgICAgICAgc2VsZWN0ZWRJbmRleDogYWN0aXZlVGFiLFxyXG4gICAgICAgIGNvbnRyb2xsZXI6IHRoaXMsXHJcbiAgICAgICAgY3lTcnYsXHJcbiAgICAgICAgY3VyUGF0aHdheSxcclxuICAgICAgICBwYWludE1lbnVDdHJscyxcclxuICAgICAgICBwYXRod2F5cyxcclxuICAgICAgICBleHByZXNzaW9uVGFibGVcclxuICAgICAgfSlcclxuICAgIF0pO1xyXG5cclxuICAgIGxldCBjb250ZW50ID0gW1xyXG4gICAgICBoKExvYWRlciwgeyBsb2FkZWQ6ICFsb2FkaW5nLCBvcHRpb25zOiB7IGxlZnQ6ICc1MCUnLCBjb2xvcjogJyMxNmEwODUnIH19LCBbIGFwcEJhciwgc2lkZWJhciBdICksXHJcbiAgICAgIGgoQ3l0b3NjYXBlTmV0d29yaywge1xyXG4gICAgICAgIGN5U3J2LFxyXG4gICAgICAgIG9uTW91bnQ6ICgpID0+IHRoaXMuZ2V0RW5yaWNobWVudHNBbmRQYXRod2F5cygpLFxyXG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcyh7XHJcbiAgICAgICAgJ25ldHdvcmstbG9hZGluZyc6IGxvYWRpbmcsXHJcbiAgICAgICAgJ25ldHdvcmstc2lkZWJhci1vcGVuJzogYWN0aXZlTWVudSAhPT0gJ2Nsb3NlTWVudSdcclxuICAgICAgICB9KVxyXG4gICAgICB9KVxyXG4gICAgXTtcclxuXHJcbiAgICByZXR1cm4gaCgnZGl2LnBhaW50JywgY29udGVudCk7XHJcbiAgfVxyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFBhaW50O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jbGllbnQvZmVhdHVyZXMvcGFpbnQvaW5kZXguanMiLCJjb25zdCB7IHByb21pc2VUaW1lb3V0LCBUaW1lb3V0RXJyb3IgfSA9IHJlcXVpcmUoJy4vcHJvbWlzZScpO1xyXG5jb25zdCBfID0gcmVxdWlyZSgnbG9kYXNoJyk7XHJcblxyXG5jb25zdCB7IENMSUVOVF9GRVRDSF9USU1FT1VULCBTRVJWRVJfRkVUQ0hfVElNRU9VVCB9ID0gcmVxdWlyZSgnLi4vY29uZmlnJyk7XHJcblxyXG5jb25zdCBpc0NsaWVudCA9ICgpID0+IHR5cGVvZiB3aW5kb3cgIT09IHR5cGVvZiB1bmRlZmluZWQ7XHJcbmNvbnN0IGlzU2VydmVyID0gKCkgPT4gIWlzQ2xpZW50KCk7XHJcblxyXG5jb25zdCBmYWlsT25CYWRTdGF0dXMgPSByZXMgPT4ge1xyXG4gIGlmKCFyZXMub2spe1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKGBGZXRjaCBmYWlsZWQgZHVlIHRvIGJhZCBzdGF0dXMgY29kZSA6ICR7cmVzLnN0YXR1c1RleHR9IDogJHtyZXMudXJsfWApO1xyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxufTtcclxuXHJcbmNvbnN0IHNhZmVGZXRjaCA9ICAoIHVybCwgb3B0aW9ucyApID0+IHtcclxuICBjb25zdCBGRVRDSF9USU1FT1VUID0gaXNTZXJ2ZXIoKSA/IFNFUlZFUl9GRVRDSF9USU1FT1VUIDogQ0xJRU5UX0ZFVENIX1RJTUVPVVQ7XHJcbiAgY29uc3QgdGltZW91dCA9IF8uZ2V0KCBvcHRpb25zLCBbJ3RpbWVvdXQnXSwgRkVUQ0hfVElNRU9VVCApO1xyXG4gIGNvbnN0IG9wdHMgPSBfLm9taXQoIG9wdGlvbnMsIFsndGltZW91dCddKTtcclxuICByZXR1cm4gcHJvbWlzZVRpbWVvdXQoICgpID0+IGZldGNoKCB1cmwsIG9wdHMgKS50aGVuKCBmYWlsT25CYWRTdGF0dXMgKSwgdGltZW91dCApO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7IHNhZmVGZXRjaCwgVGltZW91dEVycm9yIH07XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy91dGlsL2ZldGNoLmpzIiwiY29uc3QgUHJvbWlzZSA9IHJlcXVpcmUoJ2JsdWViaXJkJyk7XHJcblxyXG5sZXQgcHJvbWlzZVRpbWVvdXQgPSAoIGZuLCB0aW1lb3V0ICkgPT4ge1xyXG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKCBmbiApLnRpbWVvdXQoIHRpbWVvdXQgKTtcclxufTtcclxuXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuICBwcm9taXNlVGltZW91dCxcclxuICBUaW1lb3V0RXJyb3I6IFByb21pc2UuVGltZW91dEVycm9yXHJcbn07XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3V0aWwvcHJvbWlzZS5qcyIsImNvbnN0IHFzID0gcmVxdWlyZSgncXVlcnktc3RyaW5nJyk7XHJcbmNvbnN0IF8gPSByZXF1aXJlKCdsb2Rhc2gnKTtcclxuXHJcbmxldCBQQ19VUkw7XHJcbmNvbnN0IHsgZmV0Y2ggfSA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWwnKTtcclxuY29uc3QgeyBOQ0JJX0VVVElMU19CQVNFX1VSTCB9ID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uZmlnJyk7XHJcblxyXG5jb25zdCBkZWZhdWx0RmV0Y2hPcHRzID0ge1xyXG4gIGhlYWRlcnM6IHtcclxuICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXHJcbiAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nXHJcbiAgfVxyXG59O1xyXG5cclxuY29uc3QgU2VydmVyQVBJID0ge1xyXG4gIGdldFBDVVJMKCl7XHJcbiAgICBpZiggUENfVVJMICl7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoUENfVVJMKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmZXRjaCgnL2FwaS9wYy9iYXNlVVJMJylcclxuICAgICAgICAudGhlbiggcmVzID0+IHJlcy50ZXh0KCkgKVxyXG4gICAgICAgIC50aGVuKCBiYXNlVXJsID0+IHtcclxuICAgICAgICAgIFBDX1VSTCA9IGJhc2VVcmw7XHJcbiAgICAgICAgICByZXR1cm4gUENfVVJMO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH0sXHJcblxyXG4gIC8vIGEgZ2VuZXJpYyBtZXRob2QgdGhhdCBnZXRzIHBhdGh3YXkgc2JnbiBqc29uIGZyb20gdmFyaW91cyBzb3VyY2VzXHJcbiAgLy8gZS5nLiBwYXRod2F5Y29tbW9ucywgZmFjdG9pZCwgb3IgaHVtYW4gY3JlYXRlZCBsYXlvdXRzXHJcbiAgZ2V0QVBJUmVzb3VyY2Uob3B0cyl7XHJcbiAgICBsZXQgeyB0eXBlLCB1cmksIGlkIH0gPSBvcHRzO1xyXG4gICAgaWYoIHR5cGUgPT09ICdwYXRod2F5cycgKXtcclxuICAgICAgaWYoIHVyaSAhPT0gbnVsbCApe1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFBhdGh3YXkoIHVyaSApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBwYXJhbWV0ZXIuICBQYXRod2F5cyBhcGkgY2FsbHMgcmVxdWlyZSBhIHVyaSBwYXJhbWV0ZXInKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYoIHR5cGUgPT09ICdiaW9mYWN0b2lkJyApe1xyXG4gICAgICBpZiggaWQgIT09IG51bGwgKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXREb2NCeUlkKG9wdHMuaWQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBwYXJhbXRlci4gRmFjdG9pZHMgYXBpIGNhbGxzIHJlcXVpcmUgYSBpZCBwYXJhbWV0ZXInKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0sXHJcblxyXG4gIGdldFBhdGh3YXkodXJpKSB7XHJcbiAgICBsZXQgdXJsID0gYC9hcGkvcGF0aHdheXM/JHsgcXMuc3RyaW5naWZ5KHsgdXJpIH0pIH1gO1xyXG4gICAgY29uc3QgZmV0Y2hPcHRzID0gXy5hc3NpZ24oIHt9LCBkZWZhdWx0RmV0Y2hPcHRzICk7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBmZXRjaCh1cmwsIGZldGNoT3B0cylcclxuICAgICAgICAudGhlbihyZXMgPT4gIHJlcy5qc29uKCkpXHJcbiAgICAgICAgLnRoZW4oIHBhdGh3YXlKc29uID0+IHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGdyYXBoOiBwYXRod2F5SnNvblxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9KVxyXG4gICAgKTtcclxuICB9LFxyXG5cclxuICBnZXRBbGxEb2NzKCkge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgZmV0Y2goJy9hcGkvYmlvZmFjdG9pZCcsIGRlZmF1bHRGZXRjaE9wdHMpXHJcbiAgICAgICAgLnRoZW4oIHJlcyA9PiByZXMuanNvbigpIClcclxuICAgICk7XHJcbiAgfSxcclxuXHJcbiAgZ2V0RG9jQnlJZChpZCkge1xyXG4gICAgbGV0IHVybCA9IGAvYXBpL2Jpb2ZhY3RvaWQvJHsgaWQgfWA7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBmZXRjaCh1cmwsIGRlZmF1bHRGZXRjaE9wdHMpXHJcbiAgICAgICAgLnRoZW4ocmVzID0+ICByZXMuanNvbigpKVxyXG4gICAgICAgIC50aGVuKCBwYXRod2F5SnNvbiA9PiB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBncmFwaDogcGF0aHdheUpzb25cclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSlcclxuICAgICk7XHJcbiAgfSxcclxuXHJcbiAgZ2V0SW50ZXJhY3Rpb25HcmFwaChzb3VyY2VzKSB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBmZXRjaChgL2FwaS9pbnRlcmFjdGlvbnM/JHtxcy5zdHJpbmdpZnkoc291cmNlcyl9YCwgZGVmYXVsdEZldGNoT3B0cylcclxuICAgICAgIC50aGVuKCByZXMgPT4gcmVzLmpzb24oKSlcclxuICAgICk7XHJcbiAgfSxcclxuXHJcbiAgZ2V0UHVibWVkUHVibGljYXRpb25zKCBwdWJtZWRJZHMgKXtcclxuICAgIGNvbnN0IG9wdHMgPSB7XHJcbiAgICAgIGRiOiAncHVibWVkJyxcclxuICAgICAgcmV0bW9kZTogJ2pzb24nLFxyXG4gICAgICBpZDogcHVibWVkSWRzLnRvU3RyaW5nKClcclxuICAgIH07XHJcbiAgICBjb25zdCB1cmwgPSBgJHtOQ0JJX0VVVElMU19CQVNFX1VSTH0vZXN1bW1hcnkuZmNnaT8ke3FzLnN0cmluZ2lmeShvcHRzKX1gO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgZmV0Y2godXJsKVxyXG4gICAgICAgIC50aGVuKHJlcyA9PiByZXMuanNvbigpKVxyXG4gICAgICAgIC50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgICBsZXQgeyByZXN1bHQgfSA9IHJlcztcclxuICAgICAgICAgIGlmKCByZXN1bHQgPT0gbnVsbCApeyByZXR1cm4gW107IH1cclxuICAgICAgICAgIGxldCB7IHVpZHMgfSA9IHJlc3VsdDtcclxuXHJcbiAgICAgICAgICByZXR1cm4gdWlkcy5tYXAoIHVpZCA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlY29yZCA9IHJlc3VsdFt1aWRdO1xyXG4gICAgICAgICAgICBsZXQgeyB0aXRsZSwgYXV0aG9ycywgc29ydGZpcnN0YXV0aG9yLCBwdWJkYXRlLCBzb3VyY2UsIGFydGljbGVpZHMgfSA9IHJlY29yZDtcclxuICAgICAgICAgICAgY29uc3QgZG9pID0gXy5maW5kKCBhcnRpY2xlaWRzLCB7IGlkdHlwZTogJ2RvaScgfSApO1xyXG4gICAgICAgICAgICBjb25zdCBwdWJtZWQgPSBfLmZpbmQoIGFydGljbGVpZHMsIHsgaWR0eXBlOiAncHVibWVkJyB9ICk7XHJcbiAgICAgICAgICAgIGNvbnN0IHBtYyA9IF8uZmluZCggYXJ0aWNsZWlkcywgeyBpZHR5cGU6ICdwbWMnIH0gKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgaWQ6IHVpZCxcclxuICAgICAgICAgICAgICB0aXRsZSxcclxuICAgICAgICAgICAgICBhdXRob3JzLFxyXG4gICAgICAgICAgICAgIGZpcnN0QXV0aG9yOiBzb3J0Zmlyc3RhdXRob3IsXHJcbiAgICAgICAgICAgICAgZGF0ZTogcHViZGF0ZSxcclxuICAgICAgICAgICAgICBzb3VyY2UsXHJcbiAgICAgICAgICAgICAgZG9pOiBfLmdldCggZG9pLCAndmFsdWUnLCBudWxsKSxcclxuICAgICAgICAgICAgICBwdWJtZWQ6IF8uZ2V0KCBwdWJtZWQsICd2YWx1ZScsIG51bGwpLFxyXG4gICAgICAgICAgICAgIHBtYzogcG1jID8gcG1jLnZhbHVlIDogbnVsbFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfSApO1xyXG4gICAgICAgIH0pXHJcbiAgICApO1xyXG4gIH0sXHJcblxyXG4gIGdldEdvSW5mb3JtYXRpb24oZ29JRCkge1xyXG4gICAgcmV0dXJuIGZldGNoKGBodHRwczovL3d3dy5lYmkuYWMudWsvUXVpY2tHTy9zZXJ2aWNlcy9vbnRvbG9neS9nby9zZWFyY2g/cXVlcnk9R08lM0Eke2dvSUR9JmxpbWl0PTEmcGFnZT0xYClcclxuICAgIC50aGVuKCByZXMgPT4gcmVzLmpzb24oKSApO1xyXG4gIH0sXHJcblxyXG4gIGdldFJlYWN0b21lSW5mb3JtYXRpb24ocmVhY3RvbWVJRCkge1xyXG4gICAgcmV0dXJuIGZldGNoKGBodHRwczovL3JlYWN0b21lLm9yZy9Db250ZW50U2VydmljZS9kYXRhL3F1ZXJ5LyR7cmVhY3RvbWVJRH1gKVxyXG4gICAgLnRoZW4oIHJlcyA9PiByZXMuanNvbigpICk7XHJcbiAgfSxcclxuXHJcbiAgZG93bmxvYWRGaWxlRnJvbVBhdGh3YXlDb21tb25zKCB1cmksIGZvcm1hdCApe1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0UENVUkwoKVxyXG4gICAgICAudGhlbiggdXJsID0+IHtcclxuICAgICAgICByZXR1cm4gZmV0Y2godXJsICsgJ3BjMi9nZXQ/JyArIHFzLnN0cmluZ2lmeSh7IHVyaSwgZm9ybWF0fSksIGRlZmF1bHRGZXRjaE9wdHMpO1xyXG4gICAgICB9KTtcclxuICB9LFxyXG5cclxuICBzZWFyY2gocXVlcnkpe1xyXG4gICAgY29uc3QgcXVlcnlDbG9uZT1fLmFzc2lnbih7fSxxdWVyeSk7XHJcbiAgICBpZiAoL14oKHVuaXByb3R8aGduY3xoZ25jLnN5bWJvbCk6XFx3K3xuY2JpOlswLTldKykkL2kudGVzdChxdWVyeUNsb25lLnEpKSB7XHJcbiAgICAgIHF1ZXJ5Q2xvbmUucT1xdWVyeUNsb25lLnEucmVwbGFjZSgvXih1bmlwcm90fG5jYml8aGduY3xoZ25jLnN5bWJvbCk6L2ksXCJcIik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmV0Y2goYC9hcGkvc2VhcmNoYCwge1xyXG4gICAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbicsXHJcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xyXG4gICAgICB9LFxyXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShxdWVyeUNsb25lKVxyXG4gICAgfSkudGhlbihyZXMgPT4gcmVzLmpzb24oKSk7XHJcbiAgfSxcclxuXHJcbiAgc2VhcmNoR2VuZXMoIHF1ZXJ5ICl7XHJcbiAgICByZXR1cm4gZmV0Y2goJy9hcGkvc2VhcmNoL2dlbmVzJywge1xyXG4gICAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbicsXHJcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xyXG4gICAgICB9LFxyXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSggeyBxdWVyeSB9IClcclxuICAgIH0pLnRoZW4oIHJlcyA9PiByZXMuanNvbigpICk7XHJcbiAgfSxcclxuXHJcbiAgZW5yaWNobWVudEFQSShxdWVyeSwgdHlwZSl7XHJcbiAgICByZXR1cm4gZmV0Y2goYC9hcGkvZW5yaWNobWVudC8ke3R5cGV9YCwge1xyXG4gICAgICBtZXRob2Q6J1BPU1QnLFxyXG4gICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJyxcclxuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXHJcbiAgICAgIH0sXHJcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHF1ZXJ5KVxyXG4gICAgfSlcclxuICAgIC50aGVuKHJlcyA9PiByZXMuanNvbigpKTtcclxuICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNlcnZlckFQSTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY2xpZW50L3NlcnZpY2VzL3NlcnZlci1hcGkvaW5kZXguanMiLCJjb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XHJcbmNvbnN0IGggPSByZXF1aXJlKCdyZWFjdC1oeXBlcnNjcmlwdCcpO1xyXG5jb25zdCBzYXZlQXMgPSByZXF1aXJlKCdmaWxlLXNhdmVyJykuc2F2ZUFzO1xyXG5jb25zdCBfID0gcmVxdWlyZSgnbG9kYXNoJyk7XHJcbmNvbnN0IExvYWRlciA9IHJlcXVpcmUoJ3JlYWN0LWxvYWRlcicpO1xyXG5cclxuY29uc3QgeyBTZXJ2ZXJBUEkgfSA9IHJlcXVpcmUoJy4uLy4uLy4uL3NlcnZpY2VzJyk7XHJcblxyXG5jb25zdCBwY0Rvd25sb2FkVHlwZXMgPSByZXF1aXJlKCcuLi8uLi8uLi9jb21tb24vcGMtZG93bmxvYWQtdHlwZXMnKTtcclxuXHJcblxyXG5jbGFzcyBGaWxlRG93bmxvYWRNZW51IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgc3VwZXIocHJvcHMpO1xyXG4gICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgZG93bmxvYWRUeXBlczogcGNEb3dubG9hZFR5cGVzLFxyXG4gICAgICBsb2FkaW5nOiBmYWxzZVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGRvd25sb2FkRnJvbURpc3BsYXlOYW1lKGRpc3BsYXlOYW1lKSB7XHJcbiAgICBsZXQgeyBjeVNydiwgZmlsZU5hbWUgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBsZXQgeyBkb3dubG9hZFR5cGVzLCB9ID0gdGhpcy5zdGF0ZTtcclxuICAgIGxldCBvcHRpb24gPSBfLmZpbmQoZG93bmxvYWRUeXBlcywgWydkaXNwbGF5TmFtZScsIGRpc3BsYXlOYW1lXSk7XHJcbiAgICBsZXQgeyBwYzJOYW1lLCBleHQsIHR5cGUgfSA9IG9wdGlvbjtcclxuXHJcbiAgICBpZiAodHlwZSA9PT0gJ3BuZycpIHtcclxuICAgICAgLy8gVGhlIHNldFRpbWVvdXQgdHJpZ2dlcnMgYSByZXJlbmRlciBzbyB0aGF0IHRoZSBsb2FkZXIgYXBwZWFycyBvbiBzY3JlZW5cclxuICAgICAgdGhpcy5zZXRTdGF0ZSggeyBsb2FkaW5nOiB0cnVlIH0gLCAoKSA9PiB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICBzYXZlQXMoY3lTcnYuZ2V0KCkucG5nKHtcclxuICAgICAgICAgICAgb3V0cHV0OiAnYmxvYicsXHJcbiAgICAgICAgICAgIHNjYWxlOiAyLFxyXG4gICAgICAgICAgICBiZzogJ3doaXRlJyxcclxuICAgICAgICAgICAgZnVsbDogdHJ1ZVxyXG4gICAgICAgICAgfSksIGAke2ZpbGVOYW1lfS4ke2V4dH1gKTtcclxuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBsb2FkaW5nOiBmYWxzZSB9KTtcclxuICAgICAgICB9LCAxKTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmRvd25sb2FkRmlsZUZyb21QQyhwYzJOYW1lLCBleHQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZG93bmxvYWRGaWxlRnJvbVBDKGZvcm1hdCwgZmlsZUV4dCkge1xyXG4gICAgY29uc3QgRklMRU5BTUVfQ1VUT0ZGID0gMjA7XHJcbiAgICBsZXQgeyBmaWxlTmFtZSwgdXJpIH0gID0gIHRoaXMucHJvcHM7XHJcbiAgICBmaWxlTmFtZSA9IGZpbGVOYW1lLnN1YnN0cigwLCBmaWxlTmFtZS5sZW5ndGggPCBGSUxFTkFNRV9DVVRPRkYgPyBmaWxlTmFtZS5sZW5ndGggOiBGSUxFTkFNRV9DVVRPRkYpLnJlcGxhY2UoLyAvZywgJ18nKTtcclxuXHJcbiAgICBsZXQgZG93bmxvYWRGZXRjaCA9IFNlcnZlckFQSS5kb3dubG9hZEZpbGVGcm9tUGF0aHdheUNvbW1vbnModXJpLCBmb3JtYXQpLnRoZW4ocmVzID0+IHJlcy50ZXh0KCkpO1xyXG4gICAgdGhpcy5zZXRTdGF0ZSh7bG9hZGluZzogdHJ1ZX0sICgpID0+IHtcclxuICAgICAgZG93bmxvYWRGZXRjaC50aGVuKGNvbnRlbnQgPT4ge1xyXG4gICAgICAgIGNvbnRlbnQgPSB0eXBlb2YgY29udGVudCA9PT0gJ29iamVjdCcgPyBKU09OLnN0cmluZ2lmeShjb250ZW50KSA6IGNvbnRlbnQ7XHJcbiAgICAgICAgbGV0IGZpbGVDb250ZW50ID0gbmV3IEZpbGUoW2NvbnRlbnRdLCBgJHtmaWxlTmFtZX0uJHtmaWxlRXh0fWAsIHsgdHlwZTondGV4dC9wbGFpbjtjaGFyc2V0PXV0Zi04JyB9KTtcclxuXHJcbiAgICAgICAgc2F2ZUFzKGZpbGVDb250ZW50KTtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHsgbG9hZGluZzogZmFsc2V9KTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHJlbmRlcigpIHtcclxuICAgIGxldCBtZW51Q29udGVudHMgPSB0aGlzLnN0YXRlLmRvd25sb2FkVHlwZXMubWFwKCBkdCA9PiB7XHJcbiAgICAgIGxldCBkbE9wdGlvbiA9IGgoJ2Rpdi5kb3dubG9hZC1vcHRpb24nLCB7IG9uQ2xpY2s6ICgpID0+IHRoaXMuZG93bmxvYWRGcm9tRGlzcGxheU5hbWUoIGR0LmRpc3BsYXlOYW1lICkgfSwgW1xyXG4gICAgICAgICAgaCgnZGl2LmRvd25sb2FkLW9wdGlvbi1oZWFkZXInLCBbXHJcbiAgICAgICAgICAgIGgoJ2gzJywgZHQuZGlzcGxheU5hbWUpLFxyXG4gICAgICAgICAgXSksXHJcbiAgICAgICAgICBoKCdkaXYuZG93bmxvYWQtb3B0aW9uLWRlc2NyaXB0aW9uJywgZHQuZGVzY3JpcHRpb24pXHJcbiAgICAgIF0pO1xyXG5cclxuICAgICAgcmV0dXJuIGRsT3B0aW9uO1xyXG4gICAgfSApO1xyXG5cclxuICAgIHJldHVybiBoKCdkaXYuZmlsZS1kb3dubG9hZC1tZW51JywgW1xyXG4gICAgICBoKCdoMicsICdOZXR3b3JrIERvd25sb2FkcycpLFxyXG4gICAgICBoKCdkaXYuZmlsZS1kb3dubG9hZC1jb250ZW50JywgW1xyXG4gICAgICAgIC4uLm1lbnVDb250ZW50cyxcclxuICAgICAgICBoKExvYWRlciwgeyBsb2FkZWQ6ICF0aGlzLnN0YXRlLmxvYWRpbmcgfSlcclxuICAgICAgXSlcclxuICAgIF0pO1xyXG4gIH1cclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBGaWxlRG93bmxvYWRNZW51O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jbGllbnQvZmVhdHVyZXMvcGFpbnQvbWVudXMvZmlsZS1kb3dubG9hZC1tZW51LmpzIiwiY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xyXG5jb25zdCBoID0gcmVxdWlyZSgncmVhY3QtaHlwZXJzY3JpcHQnKTtcclxuXHJcblxyXG5jbGFzcyBOZXR3b3JrSW5mb01lbnUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gIHJlbmRlcigpIHtcclxuICAgIGNvbnN0IHsgaW5mb0xpc3QgfSA9IHRoaXMucHJvcHM7XHJcblxyXG4gICAgY29uc3Qgbm9JbmZvTWVzc2FnZSA9IGgoJ3NwYW4nLCBbXHJcbiAgICAgIGgoJ3AnLCAnTm8gYWRkaXRpb25hbCBpbmZvcm1hdGlvbiB3YXMgZm91bmQgZm9yIHRoaXMgbmV0d29yayEnKSxcclxuICAgICAgaCgncCcsICdBZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBuZXR3b3JrIGlzIG5vcm1hbGx5IGZvdW5kIGhlcmUsIGJ1dCB3ZSBjb3VsZG5cXCd0IGZpbmQgYW55IGZvciB0aGlzIG9uZS4nKVxyXG4gICAgXSk7XHJcblxyXG4gICAgY29uc3QgY29tbWVudHMgPSBpbmZvTGlzdC5tYXAoY29tbWVudCA9PiB7XHJcbiAgICAgIHJldHVybiBoKCdkaXYnLCBbaCgncCcsIGNvbW1lbnQucmVwbGFjZSgvPHA+L2csICcgJykpXSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBhZGRpdGlvbmFsSW5mbyA9IGNvbW1lbnRzLmxlbmd0aCA/XHJcbiAgICAgIFtoKCdkaXYnLCBbXHJcbiAgICAgICAgaCgnaDInLCAnQWRkaXRpb25hbCBJbmZvcm1hdGlvbicpXHJcbiAgICAgIF0uY29uY2F0KGNvbW1lbnRzKSldXHJcbiAgICAgIDogW25vSW5mb01lc3NhZ2VdO1xyXG5cclxuICAgIHJldHVybiAoXHJcbiAgICAgIGgoJ2RpdicsIFtcclxuICAgICAgICBoKCdkaXYnLCBhZGRpdGlvbmFsSW5mbylcclxuICAgICAgXSlcclxuICAgICk7XHJcbiAgfVxyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IE5ldHdvcmtJbmZvTWVudTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY2xpZW50L2ZlYXR1cmVzL3BhaW50L21lbnVzL25ldHdvcmstaW5mby1tZW51LmpzIiwiY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xyXG5jb25zdCBoID0gcmVxdWlyZSgncmVhY3QtaHlwZXJzY3JpcHQnKTtcclxuY29uc3QgXyA9IHJlcXVpcmUoJ2xvZGFzaCcpO1xyXG5jb25zdCBjbGFzc05hbWVzID0gcmVxdWlyZSgnY2xhc3NuYW1lcycpO1xyXG5jb25zdCB7IFRhYiwgVGFicywgVGFiTGlzdCwgVGFiUGFuZWwgfSA9IHJlcXVpcmUoJ3JlYWN0LXRhYnMnKTtcclxuY29uc3QgeyBnZW5lSW50ZXJzZWN0aW9uIH0gPSByZXF1aXJlKCcuLi9leHByZXNzaW9uLXRhYmxlJyk7XHJcbmNvbnN0IHsgc2VhcmNoTm9kZXMgfSA9IHJlcXVpcmUoJy4uL2N5Jyk7XHJcblxyXG5jbGFzcyBFeHByZXNzaW9uQ29sb3VyTGVnZW5kIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICByZW5kZXIoKXtcclxuICAgIGxldCB7IG1pbiwgbWF4IH0gPSB0aGlzLnByb3BzO1xyXG5cclxuICAgIHJldHVybiBoKCdkaXYucGFpbnQtbGVnZW5kJywgW1xyXG4gICAgICBoKCdwJywgYGxvdyAke21pbn1gKSxcclxuICAgICAgaCgncCcsIGBoaWdoICR7bWF4fWApXHJcbiAgICBdKTtcclxuICB9XHJcbn1cclxuXHJcbmNsYXNzIEV4cHJlc3Npb25UYWJsZVZpZXcgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gIGNvbnN0cnVjdG9yKHByb3BzKXtcclxuICAgIHN1cGVyKHByb3BzKTtcclxuXHJcbiAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICBzb3J0Qnk6ICdnZW5lTmFtZScsXHJcbiAgICAgIHNvcnRUeXBlOiAnYXNjJyxcclxuICAgICAgbm9kZVNlYXJjaFZhbHVlOiAnJ1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGhhbmRsZVNvcnRDaGFuZ2UobmV3U29ydCl7XHJcbiAgICBsZXQgeyBzb3J0QnksIHNvcnRUeXBlIH0gPSB0aGlzLnN0YXRlO1xyXG5cclxuICAgIGlmKCBuZXdTb3J0ID09IHNvcnRCeSApe1xyXG4gICAgICB0aGlzLnNldFN0YXRlKHsgc29ydFR5cGU6IHNvcnRUeXBlID09PSAnYXNjJyA/ICdkZXNjJyA6ICdhc2MnfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNldFN0YXRlKHsgc29ydEJ5OiBuZXdTb3J0IH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlU2VhcmNoQ2hhbmdlKG5ld1ZhbCl7XHJcbiAgICBsZXQgY3kgPSB0aGlzLnByb3BzLmN5U3J2LmdldCgpO1xyXG4gICAgdGhpcy5zZXRTdGF0ZSh7bm9kZVNlYXJjaFZhbHVlOiBuZXdWYWx9LCAoKSA9PiBzZWFyY2hOb2RlcyhjeSwgbmV3VmFsKSk7XHJcbiAgfVxyXG5cclxuICBnZW5lcmF0ZUZvbGRDaGFuZ2VMaXN0KCl7XHJcbiAgICBsZXQgeyBleHByZXNzaW9uVGFibGUsIHBhaW50TWVudUN0cmxzIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgbGV0IHsgZXhwckNsYXNzLCBleHByRm4gfSA9IHBhaW50TWVudUN0cmxzO1xyXG4gICAgbGV0IHsgc29ydEJ5LCBzb3J0VHlwZSwgbm9kZVNlYXJjaFZhbHVlIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgbGV0IGZvbGRDaGFuZ2VFeHByZXNzaW9ucyA9IGV4cHJlc3Npb25UYWJsZS5leHByZXNzaW9ucygpLm1hcChlID0+IHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBnZW5lTmFtZTogZS5nZW5lTmFtZSxcclxuICAgICAgICBmb2xkQ2hhbmdlOiBlLmZvbGRDaGFuZ2UoIGV4cHJDbGFzcywgZXhwckZuLCAnTi9BJylcclxuICAgICAgfTtcclxuICAgIH0pO1xyXG5cclxuICAgIGxldCBzb3J0ZWRGb2xkQ2hhbmdlcyA9IF8ub3JkZXJCeShmb2xkQ2hhbmdlRXhwcmVzc2lvbnMsIFtzb3J0QnldLCBbc29ydFR5cGVdKTtcclxuXHJcbiAgICBsZXQgZmlsdGVyZWRGb2xkQ2hhbmdlcyA9IHNvcnRlZEZvbGRDaGFuZ2VzLmZpbHRlcihmYyA9PiB7XHJcbiAgICAgIGxldCB1cHBlckZjID0gZmMuZ2VuZU5hbWUudG9VcHBlckNhc2UoKTtcclxuICAgICAgbGV0IHVwcGVyRmlsdGVyID0gbm9kZVNlYXJjaFZhbHVlLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgIHJldHVybiB1cHBlckZjLmluY2x1ZGVzKHVwcGVyRmlsdGVyKSB8fCB1cHBlckZpbHRlci5pbmNsdWRlcyh1cHBlckZjKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBmaWx0ZXJlZEZvbGRDaGFuZ2VzO1xyXG4gIH1cclxuXHJcbiAgcmVuZGVyKCl7XHJcbiAgICBsZXQgeyBzb3J0QnksIHNvcnRUeXBlIH0gPSB0aGlzLnN0YXRlO1xyXG5cclxuICAgIGxldCBmb2xkQ2hhbmdlRXhwcmVzc2lvbnMgPSB0aGlzLmdlbmVyYXRlRm9sZENoYW5nZUxpc3QoKTtcclxuXHJcbiAgICByZXR1cm4gaCgndGFibGUuZXhwcmVzc2lvbi10YWJsZS12aWV3JywgW1xyXG4gICAgICBoKCd0aGVhZCcsIFtcclxuICAgICAgICBoKCd0ci5leHByZXNzaW9uLXRhYmxlLWhlYWRlcicsIFtcclxuICAgICAgICAgIGgoJ3RoLmV4cHJlc3Npb24tdGFibGUtaGVhZGVyLWNvbHVtbicsIHsgb25DbGljazogKCkgPT4gdGhpcy5oYW5kbGVTb3J0Q2hhbmdlKCdnZW5lTmFtZScpIH0sIFtcclxuICAgICAgICAgICAgJ0dlbmUnLFxyXG4gICAgICAgICAgICBzb3J0QnkgPT09ICdnZW5lTmFtZScgPyBoKCdpLm1hdGVyaWFsLWljb25zJywgc29ydFR5cGUgPT09ICdhc2MnID8gJ2tleWJvYXJkX2Fycm93X3VwJyA6ICdrZXlib2FyZF9hcnJvd19kb3duJykgOiBudWxsXHJcbiAgICAgICAgICBdKSxcclxuICAgICAgICAgIGgoJ3RoLmV4cHJlc3Npb24tdGFibGUtaGVhZGVyLWNvbHVtbicsIHsgb25DbGljazogKCkgPT4gdGhpcy5oYW5kbGVTb3J0Q2hhbmdlKCdmb2xkQ2hhbmdlJykgfSwgW1xyXG4gICAgICAgICAgICAnRXhwcmVzc2lvbiBSYXRpbyAoTG9nMiknLFxyXG4gICAgICAgICAgICBzb3J0QnkgPT09ICdmb2xkQ2hhbmdlJyA/IGgoJ2kubWF0ZXJpYWwtaWNvbnMnLCBzb3J0VHlwZSA9PT0gJ2FzYycgPyAna2V5Ym9hcmRfYXJyb3dfdXAnIDogJ2tleWJvYXJkX2Fycm93X2Rvd24nKSA6IG51bGxcclxuICAgICAgICAgIF0pXHJcbiAgICAgICAgXSlcclxuICAgICAgXSksXHJcbiAgICAgIGgoJ3Rib2R5LmV4cHJlc3Npb24tbGlzdCcsIFtcclxuICAgICAgICBoKCd0ci5leHByZXNzaW9uLWVudHJ5JywgW1xyXG4gICAgICAgICAgaCgndGQuZXhwcmVzc2lvbi1maWx0ZXInLCBbXHJcbiAgICAgICAgICAgIGgoJ2lucHV0JywgeyBwbGFjZWhvbGRlcjogJ0ZpbHRlciBieSBnZW5lJywgb25DaGFuZ2U6IGUgPT4gdGhpcy5oYW5kbGVTZWFyY2hDaGFuZ2UoZS50YXJnZXQudmFsdWUpIH0pLFxyXG4gICAgICAgICAgXSlcclxuICAgICAgICBdKSxcclxuICAgICAgICBmb2xkQ2hhbmdlRXhwcmVzc2lvbnMubWFwKCBlID0+IHtcclxuICAgICAgICAgIHJldHVybiBoKCd0ci5leHByZXNzaW9uLWVudHJ5JywgeyBrZXk6IGUuZ2VuZU5hbWUgfSwgW1xyXG4gICAgICAgICAgICBoKCd0ZC5leHByZXNzaW9uLWdlbmUnLCBlLmdlbmVOYW1lKSxcclxuICAgICAgICAgICAgaCgndGQuZXhwcmVzc2lvbi1mb2xkLWNoYW5nZScsIGUuZm9sZENoYW5nZSlcclxuICAgICAgICAgIF0pO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIF0pXHJcbiAgICBdKTtcclxuICB9XHJcbn1cclxuXHJcblxyXG5jbGFzcyBQYXRod2F5UmVzdWx0c0xpc3RWaWV3IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICByZW5kZXIoKXtcclxuICAgIGxldCB7IHBhdGh3YXlzLCBjdXJQYXRod2F5LCBleHByZXNzaW9uVGFibGUsIGNvbnRyb2xsZXIgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBsZXQgcGF0aHdheVJlc3VsdHMgPSBwYXRod2F5cy5tYXAocGF0aHdheSA9PiB7XHJcbiAgICAgIHJldHVybiBoKCdkaXYucGFpbnQtc2VhcmNoLXJlc3VsdCcsIHsgY2xhc3NOYW1lOiBjbGFzc05hbWVzKHsncGFpbnQtc2VhcmNoLXJlc3VsdC1zZWxlY3RlZCc6IGN1clBhdGh3YXkudXJpKCkgPT09IHBhdGh3YXkudXJpKCl9KSwgb25DbGljazogKCkgPT4gY29udHJvbGxlci5sb2FkUGF0aHdheShwYXRod2F5KSB9LCBbXHJcbiAgICAgICAgaCgnaDMnLCBwYXRod2F5Lm5hbWUoKSksXHJcbiAgICAgICAgaCgncCcsIHBhdGh3YXkuZGF0YXNvdXJjZSgpKSxcclxuICAgICAgICBoKCdwJywgYEdlbmVzIG1hdGNoZWQ6ICR7Z2VuZUludGVyc2VjdGlvbihwYXRod2F5LCBleHByZXNzaW9uVGFibGUpLmxlbmd0aH1gKVxyXG4gICAgICBdKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBoKCdkaXYucGF0aHdheXMtbGlzdCcsIFtcclxuICAgICAgLi4ucGF0aHdheVJlc3VsdHNcclxuICAgIF0pO1xyXG4gIH1cclxufVxyXG5cclxuY2xhc3MgUGFpbnRNZW51IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuXHJcbiAgYW5hbHlzaXNGbnMoKXtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICdtZWFuJzogXy5tZWFuLFxyXG4gICAgICAnbWF4JzogXy5tYXgsXHJcbiAgICAgICdtaW4nOiBfLm1pblxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHJlbmRlcigpIHtcclxuICAgIGxldCB7IGN5U3J2LCBjb250cm9sbGVyLCBleHByZXNzaW9uVGFibGUsIHBhaW50TWVudUN0cmxzLCBjdXJQYXRod2F5LCBwYXRod2F5cywgc2VsZWN0ZWRJbmRleCB9ID0gdGhpcy5wcm9wcztcclxuICAgIGxldCB7IGV4cHJDbGFzcywgZXhwckZuLCBleHByRm5OYW1lIH0gPSBwYWludE1lbnVDdHJscztcclxuICAgIGxldCB7IG1pbiwgbWF4IH0gPSBleHByZXNzaW9uVGFibGUuY29tcHV0ZUZvbGRDaGFuZ2VSYW5nZShleHByQ2xhc3MsIGV4cHJGbik7XHJcblxyXG5cclxuICAgICAgbGV0IGZ1bmN0aW9uU2VsZWN0b3IgPSBoKCdkaXYnLCBbXHJcbiAgICAgICAgJ0NsYXNzOiAnLFxyXG4gICAgICAgIGgoJ3NlbGVjdC5wYWludC1zZWxlY3QnLCB7IHZhbHVlOiBleHByRm5OYW1lLFxyXG4gICAgICAgICAgb25DaGFuZ2U6IGUgPT4gY29udHJvbGxlci5oYW5kbGVQYWludEN0cmxDaGFuZ2Uoe1xyXG4gICAgICAgICAgICBleHByRm5OYW1lOiBlLnRhcmdldC52YWx1ZSxcclxuICAgICAgICAgICAgZXhwckZuOiB0aGlzLmFuYWx5c2lzRm5zKClbZS50YXJnZXQudmFsdWVdXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgT2JqZWN0LmVudHJpZXModGhpcy5hbmFseXNpc0ZucygpKS5tYXAoZW50cnkgPT4gaCgnb3B0aW9uJywge3ZhbHVlOiBlbnRyeVswXX0sIGVudHJ5WzBdKSlcclxuICAgICAgKVxyXG4gICAgICBdKTtcclxuXHJcbiAgICBsZXQgY2xhc3NTZWxlY3RvciA9IGgoJ2RpdicsIFtcclxuICAgICAgJ0NvbXBhcmU6ICcsXHJcbiAgICAgIGgoJ3NlbGVjdC5wYWludC1zZWxlY3QnLCB7XHJcbiAgICAgICAgdmFsdWU6IGV4cHJDbGFzcyxcclxuICAgICAgICBvbkNoYW5nZTogZSA9PiBjb250cm9sbGVyLmhhbmRsZVBhaW50Q3RybENoYW5nZSh7ZXhwckNsYXNzOiBlLnRhcmdldC52YWx1ZX0pXHJcbiAgICAgIH0sXHJcbiAgICAgIGV4cHJlc3Npb25UYWJsZS5jbGFzc2VzLm1hcChjbHMgPT4gaCgnb3B0aW9uJywgeyB2YWx1ZTogY2xzfSwgY2xzKSlcclxuICAgICAgKSxcclxuICAgICAgYCB2cyAke18uZGlmZmVyZW5jZShleHByZXNzaW9uVGFibGUuY2xhc3NlcywgW2V4cHJDbGFzc10pfWBcclxuICAgIF0pO1xyXG5cclxuXHJcbiAgICByZXR1cm4gaCgnZGl2LnBhaW50LW1lbnUnLCBbXHJcbiAgICAgIGgoVGFicywgeyBzZWxlY3RlZEluZGV4LCBvblNlbGVjdDogaW5kZXggPT4gY29udHJvbGxlci5oYW5kbGVQYWludE1lbnVUYWJDaGFuZ2UoaW5kZXgpIH0sIFtcclxuICAgICAgICBoKFRhYkxpc3QsIFtcclxuICAgICAgICAgIGgoVGFiLCB7XHJcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3BhaW50LWRyYXdlci10YWInLFxyXG4gICAgICAgICAgICBzZWxlY3RlZENsYXNzTmFtZTogJ3BhaW50LWRyYXdlci10YWItc2VsZWN0ZWQnLFxyXG4gICAgICAgICAgfSwgJ0V4cHJlc3Npb24gRGF0YScpLFxyXG4gICAgICAgICAgaChUYWIsIHsgY2xhc3NOYW1lOiAncGFpbnQtZHJhd2VyLXRhYicsIHNlbGVjdGVkQ2xhc3NOYW1lOiAncGFpbnQtZHJhd2VyLXRhYi1zZWxlY3RlZCcgfSwgJ1NlbGVjdCBQYXRod2F5JylcclxuICAgICAgICBdKSxcclxuICAgICAgICBoKFRhYlBhbmVsLCBbXHJcbiAgICAgICAgICBoKEV4cHJlc3Npb25Db2xvdXJMZWdlbmQsIHsgbWluLCBtYXggfSksXHJcbiAgICAgICAgICBoKCdkaXYucGFpbnQtbWVudS1jb250cm9scycsIFtcclxuICAgICAgICAgICAgZnVuY3Rpb25TZWxlY3RvcixcclxuICAgICAgICAgICAgY2xhc3NTZWxlY3RvclxyXG4gICAgICAgICAgXSksXHJcbiAgICAgICAgICBoKEV4cHJlc3Npb25UYWJsZVZpZXcsIHsgY3lTcnYsIGV4cHJlc3Npb25UYWJsZSwgY29udHJvbGxlciwgcGFpbnRNZW51Q3RybHN9ICksXHJcbiAgICAgICAgXSksXHJcbiAgICAgICAgaChUYWJQYW5lbCwgW1xyXG4gICAgICAgICAgaChQYXRod2F5UmVzdWx0c0xpc3RWaWV3LCB7IGNvbnRyb2xsZXIsIGN1clBhdGh3YXksIGV4cHJlc3Npb25UYWJsZSwgcGF0aHdheXMgfSlcclxuICAgICAgICBdKVxyXG4gICAgICBdKVxyXG4gICAgXSk7XHJcbiAgfVxyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFBhaW50TWVudTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY2xpZW50L2ZlYXR1cmVzL3BhaW50L21lbnVzL3BhaW50LW1lbnUuanMiLCJjb25zdCBjeXRvc2NhcGUgPSByZXF1aXJlKCdjeXRvc2NhcGUnKTtcclxuY29uc3Qgc2JnblN0eWxlU2hlZXQgPSByZXF1aXJlKCdjeXRvc2NhcGUtc2Jnbi1zdHlsZXNoZWV0Jyk7XHJcbmNvbnN0IHsgTUFUQ0hFRF9TRUFSQ0hfQ0xBU1MgfSA9IHJlcXVpcmUoJy4vYWN0aW9ucycpO1xyXG5cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gc2JnblN0eWxlU2hlZXQoY3l0b3NjYXBlKVxyXG4uc2VsZWN0b3IoJ25vZGUnKVxyXG4uY3NzKHtcclxuICAnYmFja2dyb3VuZC1vcGFjaXR5JzogJzAuNCdcclxufSlcclxuLnNlbGVjdG9yKCdub2RlOmFjdGl2ZScpXHJcbi5jc3Moe1xyXG4gICdiYWNrZ3JvdW5kLW9wYWNpdHknOiAnMC43JyxcclxufSlcclxuLnNlbGVjdG9yKCdub2RlW2NsYXNzIT1cImNvbXBhcnRtZW50XCJdJylcclxuLmNzcyh7XHJcbiAgJ2ZvbnQtc2l6ZSc6IDIwLFxyXG4gICdjb2xvcic6ICdibGFjaycsXHJcbiAgJ3RleHQtb3V0bGluZS1jb2xvcic6ICd3aGl0ZScsXHJcbiAgJ3RleHQtb3V0bGluZS13aWR0aCc6IDIsXHJcbiAgJ3RleHQtb3V0bGluZS1vcGFjaXR5JzogMC41LFxyXG4gICd0ZXh0LXdyYXAnOiAnd3JhcCcsXHJcbiAgJ3RleHQtbWF4LXdpZHRoJzogMTc1LFxyXG4gICdsYWJlbCc6IG5vZGUgPT4ge1xyXG4gICAgY29uc3QgbGFiZWwgPSBub2RlLmRhdGEoJ2xhYmVsJylcclxuICAgICAgLnNwbGl0KCcoJykuam9pbignJykuc3BsaXQoJyknKS5qb2luKCcnKVxyXG4gICAgICAuc3BsaXQoJzonKS5qb2luKCcgJyk7XHJcbiAgICByZXR1cm4gbGFiZWw7XHJcbiAgfVxyXG59KVxyXG4uc2VsZWN0b3IoJ25vZGVbY2xhc3M9XCJjb21wbGV4XCJdJylcclxuLmNzcyh7XHJcbiAgJ3dpZHRoJzogNDUsXHJcbiAgJ2hlaWdodCc6IDQ1LFxyXG4gICdsYWJlbCc6IG5vZGUgPT4gbm9kZS5pc1BhcmVudCgpID8gJycgOiBub2RlLmRhdGEoJ2xhYmVsJylcclxufSlcclxuLnNlbGVjdG9yKCcuY29tcG91bmRjb2xsYXBzZS1jb2xsYXBzZWQtbm9kZScpXHJcbi5jc3Moe1xyXG4gICdmb250LXNpemUnOiAyMCxcclxuICAndGV4dC1tYXgtd2lkdGgnOiAxNzVcclxufSlcclxuLnNlbGVjdG9yKCdlZGdlJylcclxuLmNzcyh7XHJcbiAgJ29wYWNpdHknOiAwLjNcclxufSlcclxuLnNlbGVjdG9yKCdub2RlW2NsYXNzPVwiYW5kXCJdLG5vZGVbY2xhc3M9XCJvclwiXSxub2RlW2NsYXNzPVwibm90XCJdJylcclxuLmNzcyh7XHJcbiAgJ2xhYmVsJzpub2RlPT5ub2RlLmRhdGEoJ2NsYXNzJylcclxufSlcclxuLnNlbGVjdG9yKCcuaGlkZGVuJylcclxuLmNzcyh7XHJcbiAgJ2Rpc3BsYXknOidub25lJyxcclxufSlcclxuLnNlbGVjdG9yKGAuJHtNQVRDSEVEX1NFQVJDSF9DTEFTU31gKVxyXG4uY3NzKHtcclxuICAnYm9yZGVyLXdpZHRoJzogOCxcclxuICAnYm9yZGVyLWNvbG9yJzogJ3JlZCdcclxufSk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NsaWVudC9mZWF0dXJlcy9wYWludC9jeS9wYXRod2F5cy1zdHlsZXNoZWV0LmpzIiwiY29uc3QgXyA9IHJlcXVpcmUoJ2xvZGFzaCcpO1xyXG5jb25zdCBoID0gcmVxdWlyZSgncmVhY3QtaHlwZXJzY3JpcHQnKTtcclxuXHJcbmNvbnN0IFBhdGh3YXlOb2RlTWV0YWRhdGFWaWV3ID0gcmVxdWlyZSgnLi4vcGF0aHdheS1ub2RlLW1ldGFkYXRhJyk7XHJcbmNvbnN0IHsgUEFUSFdBWVNfTEFZT1VUX09QVFMgfSA9IHJlcXVpcmUoJy4vbGF5b3V0Jyk7XHJcblxyXG5jb25zdCBDeXRvc2NhcGVUb29sdGlwID0gcmVxdWlyZSgnLi4vLi4vLi4vY29tbW9uL2N5L2N5dG9zY2FwZS10b29sdGlwJyk7XHJcblxyXG5jb25zdCBFWFBBTkRfQ09MTEFQU0VfT1BUUyA9IHtcclxuICBsYXlvdXRCeTogXy5hc3NpZ24oe30sIFBBVEhXQVlTX0xBWU9VVF9PUFRTLCB7IGZpdDogZmFsc2UgfSksXHJcbiAgZmlzaGV5ZTogdHJ1ZSxcclxuICBhbmltYXRlOiB0cnVlLFxyXG4gIHVuZG9hYmxlOiBmYWxzZSxcclxuICBjdWVFbmFibGVkOiBmYWxzZVxyXG59O1xyXG5cclxuY29uc3QgU0hPV19UT09MVElQU19FVkVOVCA9ICdzaG93dG9vbHRpcCc7XHJcblxyXG5sZXQgYmluZEN5RXZlbnRzID0gY3kgPT4ge1xyXG5cclxuICBsZXQgaGlkZVRvb2x0aXBzID0gKCkgPT4ge1xyXG4gICAgY3kuZWxlbWVudHMoKS5mb3JFYWNoKGVsZSA9PiB7XHJcbiAgICAgIGxldCB0b29sdGlwID0gZWxlLnNjcmF0Y2goJ190b29sdGlwJyk7XHJcbiAgICAgIGlmICh0b29sdGlwKSB7XHJcbiAgICAgICAgdG9vbHRpcC5oaWRlKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH07XHJcblxyXG4gIGN5LmV4cGFuZENvbGxhcHNlKEVYUEFORF9DT0xMQVBTRV9PUFRTKTtcclxuICBjeS5vbihTSE9XX1RPT0xUSVBTX0VWRU5ULCAnbm9kZVtjbGFzcyAhPSBcImNvbXBhcnRtZW50XCJdJywgZnVuY3Rpb24gKGV2dCkge1xyXG4gICAgbGV0IG5vZGUgPSBldnQudGFyZ2V0O1xyXG5cclxuICAgIGxldCB0b29sdGlwID0gbmV3IEN5dG9zY2FwZVRvb2x0aXAoIG5vZGUucG9wcGVyUmVmKCksIHtcclxuICAgICAgaHRtbDogaChQYXRod2F5Tm9kZU1ldGFkYXRhVmlldywgeyBub2RlIH0pXHJcbiAgICB9ICk7XHJcbiAgICBub2RlLnNjcmF0Y2goJ190b29sdGlwJywgdG9vbHRpcCk7XHJcbiAgICB0b29sdGlwLnNob3coKTtcclxuICB9KTtcclxuXHJcbiAgY3kub24oJ3RhcCcsIGV2dCA9PiB7XHJcbiAgICBjb25zdCB0Z3QgPSBldnQudGFyZ2V0O1xyXG5cclxuICAgIC8vIGlmIHdlIGRpZG4ndCBjbGljayBhIG5vZGUsIGNsb3NlIGFsbCB0b29sdGlwc1xyXG4gICAgaWYoIGV2dC50YXJnZXQgPT09IGN5IHx8IGV2dC50YXJnZXQuaXNFZGdlKCkgKXtcclxuICAgICAgaGlkZVRvb2x0aXBzKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyB3ZSBjbGlja2VkIGEgbm9kZSB0aGF0IGhhcyBhIHRvb2x0aXAgb3BlbiAtPiBjbG9zZSBpdFxyXG4gICAgaWYoIHRndC5zY3JhdGNoKCdfdG9vbHRpcC1vcGVuZWQnKSApe1xyXG4gICAgICBoaWRlVG9vbHRpcHMoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIG9wZW4gdGhlIHRvb2x0aXAgZm9yIHRoZSBjbGlja2VkIG5vZGVcclxuICAgICAgaGlkZVRvb2x0aXBzKCk7XHJcbiAgICAgIHRndC5lbWl0KFNIT1dfVE9PTFRJUFNfRVZFTlQpO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICAvL0hpZGUgVG9vbHRpcHMgb24gdmFyaW91cyBncmFwaCBtb3ZlbWVudHNcclxuICBjeS5vbignZHJhZycsICgpID0+IGhpZGVUb29sdGlwcygpKTtcclxuICBjeS5vbigncGFuJywgKCkgPT4gaGlkZVRvb2x0aXBzKCkpO1xyXG4gIGN5Lm9uKCd6b29tJywgKCkgPT4gaGlkZVRvb2x0aXBzKCkpO1xyXG4gIGN5Lm9uKCdsYXlvdXRzdGFydCcsICgpID0+IGhpZGVUb29sdGlwcygpKTtcclxuXHJcbiAgbGV0IG5vZGVIb3Zlck1vdXNlT3ZlciA9IF8uZGVib3VuY2UoZXZ0ID0+IHtcclxuICAgIGxldCBub2RlID0gZXZ0LnRhcmdldDtcclxuICAgIGxldCBlbGVzVG9IaWdobGlnaHQgPSBjeS5jb2xsZWN0aW9uKCk7XHJcblxyXG4gICAgLy9DcmVhdGUgYSBsaXN0IG9mIHRoZSBob3ZlcmVkIG5vZGUgJiBpdHMgbmVpZ2hib3VyaG9vZFxyXG4gICAgbm9kZS5uZWlnaGJvcmhvb2QoKS5ub2RlcygpLnVuaW9uKG5vZGUpLmZvckVhY2gobm9kZSA9PiB7XHJcbiAgICAgIGVsZXNUb0hpZ2hsaWdodC5tZXJnZShub2RlLmFuY2VzdG9ycygpKTtcclxuICAgICAgZWxlc1RvSGlnaGxpZ2h0Lm1lcmdlKG5vZGUuZGVzY2VuZGFudHMoKSk7XHJcbiAgICAgIGVsZXNUb0hpZ2hsaWdodC5tZXJnZShub2RlKTtcclxuICAgIH0pO1xyXG4gICAgZWxlc1RvSGlnaGxpZ2h0Lm1lcmdlKG5vZGUubmVpZ2hib3Job29kKCkuZWRnZXMoKSk7XHJcblxyXG4gICAgLy9BZGQgaGlnaGxpZ2h0ZWQgY2xhc3MgdG8gbm9kZSAmIGl0cyBuZWlnaGJvdXJob29kLCB1bmhpZ2hsaWdodGVkIHRvIGV2ZXJ5dGhpbmcgZWxzZVxyXG4gICAgY3kuZWxlbWVudHMoKS5hZGRDbGFzcygndW5oaWdobGlnaHRlZCcpO1xyXG4gICAgZWxlc1RvSGlnaGxpZ2h0LmZvckVhY2goZWxlID0+IHtcclxuICAgICAgZWxlLnJlbW92ZUNsYXNzKCd1bmhpZ2hsaWdodGVkJyk7XHJcbiAgICAgIGVsZS5hZGRDbGFzcygnaGlnaGxpZ2h0ZWQnKTtcclxuICAgIH0pO1xyXG5cclxuICB9LCA3NTApO1xyXG5cclxuICAvL2NhbGwgc3R5bGUtYXBwbHlpbmcgYW5kIHN0eWxlLXJlbW92aW5nIGZ1bmN0aW9ucyBvbiAnbW91c2VvdmVyJyBhbmQgJ21vdXNlb3V0JyBmb3Igbm9uLWNvbXBhcnRtZW50IG5vZGVzXHJcbiAgY3kub24oJ21vdXNlb3ZlcicsICdub2RlW2NsYXNzIT1cImNvbXBhcnRtZW50XCJdJywgbm9kZUhvdmVyTW91c2VPdmVyKTtcclxuICBjeS5vbignbW91c2VvdXQnLCAnbm9kZVtjbGFzcyE9XCJjb21wYXJ0bWVudFwiXScsICgpID0+IHtcclxuICAgIG5vZGVIb3Zlck1vdXNlT3Zlci5jYW5jZWwoKTtcclxuICAgIGN5LmVsZW1lbnRzKCkucmVtb3ZlQ2xhc3MoJ2hpZ2hsaWdodGVkIHVuaGlnaGxpZ2h0ZWQnKTtcclxuICB9KTtcclxuXHJcbn07XHJcbm1vZHVsZS5leHBvcnRzID0gYmluZEN5RXZlbnRzO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jbGllbnQvZmVhdHVyZXMvcGFpbnQvY3kvZXZlbnRzLmpzIiwiY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xyXG5jb25zdCBoID0gcmVxdWlyZSgncmVhY3QtaHlwZXJzY3JpcHQnKTtcclxuY29uc3QgXyA9IHJlcXVpcmUoJ2xvZGFzaCcpO1xyXG5cclxuY29uc3QgeyBTZXJ2ZXJBUEkgfSA9IHJlcXVpcmUoJy4uLy4uL3NlcnZpY2VzJyk7XHJcbmNvbnN0IHsgTlNfQ0hFQkksIE5TX0VOU0VNQkwsIE5TX0hHTkMsIE5TX0hHTkNfU1lNQk9MLCBOU19OQ0JJX0dFTkUsIE5TX1BVQk1FRCwgTlNfUkVBQ1RPTUUsIE5TX1VOSVBST1QgfSA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbmZpZycpO1xyXG5cclxuY29uc3QgREVGQVVMVF9OVU1fTkFNRVMgPSAzO1xyXG5jb25zdCBTVVBQT1JURURfQ09MTEVDVElPTlMgPSBuZXcgTWFwKFtcclxuICBbTlNfQ0hFQkksICdDaEVCSSddLFxyXG4gIFtOU19FTlNFTUJMLCAnRW5zZW1ibCddLFxyXG4gIFtOU19IR05DLCAnSEdOQyddLFxyXG4gIFtOU19IR05DX1NZTUJPTCwgJ0hHTkMnXSxcclxuICBbTlNfTkNCSV9HRU5FLCAnTkNCSSBHZW5lJ10sXHJcbiAgW05TX1JFQUNUT01FLCAnUmVhY3RvbWUnXSxcclxuICBbTlNfVU5JUFJPVCwgJ1VuaVByb3QnXVxyXG5dKTtcclxuXHJcbmNvbnN0IGdldFVyaUlkcyA9IHVyaXMgPT4gdXJpcy5tYXAoIHVyaSA9PiBfLmxhc3QoIHVyaS5zcGxpdCggJy8nICkgKSApO1xyXG5cclxuLy8gQSBjb21wb25lbnQgdGhhdCBkaXNwbGF5cyBhIHBhdGh3YXkgbm9kZSdzIG1ldGFkYXRhXHJcbi8vIHByb3BzOlxyXG4vLyAtIGN5dG9zY2FwZSBub2RlKVxyXG5jbGFzcyBQYXRod2F5Tm9kZU1ldGFkYXRhVmlldyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgY29uc3RydWN0b3IocHJvcHMpe1xyXG4gICAgc3VwZXIocHJvcHMpO1xyXG5cclxuICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgIHB1YmxpY2F0aW9uczogW11cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBjb21wb25lbnREaWRNb3VudCgpe1xyXG4gICAgbGV0IHsgbm9kZSB9ID0gdGhpcy5wcm9wcztcclxuICAgIGxldCBtZXRhZGF0YSA9IG5vZGUuZGF0YSgnbWV0YWRhdGEnKTtcclxuICAgIGxldCBwdWJtZWRVcmlzID0gXy5nZXQobWV0YWRhdGEsIGB4cmVmTGlua3MuJHtOU19QVUJNRUR9YCwgbnVsbCk7XHJcblxyXG4gICAgaWYoIHB1Ym1lZFVyaXMgIT0gbnVsbCApe1xyXG4gICAgICBjb25zdCBwdWJtZWRJZHMgPSBnZXRVcmlJZHMoIHB1Ym1lZFVyaXMgKTtcclxuICAgICAgU2VydmVyQVBJLmdldFB1Ym1lZFB1YmxpY2F0aW9ucyhwdWJtZWRJZHMpLnRoZW4oIHB1YmxpY2F0aW9ucyA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHB1YmxpY2F0aW9ucyB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW5kZXIoKXtcclxuICAgIGxldCB7IG5vZGUgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBsZXQgeyBwdWJsaWNhdGlvbnMgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBsZXQgbWQgPSBub2RlLmRhdGEoJ21ldGFkYXRhJyk7XHJcbiAgICBsZXQgeyBzeW5vbnltcywgdHlwZSwgc3RhbmRhcmROYW1lLCBkaXNwbGF5TmFtZSwgeHJlZkxpbmtzIH0gPSBtZDtcclxuICAgIGxldCBzZWFyY2hMaW5rUXVlcnkgPSBub2RlLmRhdGEoJ2NsYXNzJykgPT09ICdwcm9jZXNzJyA/IGRpc3BsYXlOYW1lIDogbm9kZS5kYXRhKCdsYWJlbCcpO1xyXG4gICAgbGV0IGxhYmVsID0gbm9kZS5kYXRhKCdsYWJlbCcpO1xyXG5cclxuICAgIGlmKCBfLmlzRW1wdHkoIG1kICkgKXtcclxuICAgICAgcmV0dXJuIGgoJ2Rpdi5jeS10b29sdGlwJywgW1xyXG4gICAgICAgIGgoJ2Rpdi5jeS10b29sdGlwLWNvbnRlbnQnLCBbXHJcbiAgICAgICAgICBoKCdkaXYuY3ktdG9vbHRpcC1oZWFkZXInLCBbXHJcbiAgICAgICAgICAgIGgoJ2gyLmN5LXRvb2x0aXAtdGl0bGUnLCAgbm9kZS5kYXRhKCdjbGFzcycpKVxyXG4gICAgICAgICAgXSlcclxuICAgICAgICBdKVxyXG4gICAgICBdKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZGJMaW5rcyA9IF8ua2V5cyggeHJlZkxpbmtzICkubWFwKCBjb2xsZWN0aW9uID0+IHtcclxuICAgICAgbGV0IGxpbmsgPSBudWxsO1xyXG4gICAgICBjb25zdCBkaXNwbGF5TmFtZSA9IFNVUFBPUlRFRF9DT0xMRUNUSU9OUy5nZXQoIGNvbGxlY3Rpb24gKTtcclxuICAgICAgY29uc3QgdXJpID0gXy5nZXQoIHhyZWZMaW5rcywgYCR7Y29sbGVjdGlvbn1bMF1gICk7XHJcbiAgICAgIGlmICggZGlzcGxheU5hbWUgJiYgdXJpICkgbGluayA9IGgoJ2EucGxhaW4tbGluaycsIHsgaHJlZjogdXJpLCB0YXJnZXQ6ICdfYmxhbmsnIH0sIGRpc3BsYXlOYW1lICk7XHJcbiAgICAgIHJldHVybiBsaW5rO1xyXG4gICAgfSk7XHJcblxyXG4gICAgbGV0IHB1YmxpY2F0aW9uRWxlcyA9IHB1YmxpY2F0aW9ucy5tYXAocHVibGljYXRpb24gPT4ge1xyXG4gICAgICBsZXQgeyBpZCwgdGl0bGUsIGZpcnN0QXV0aG9yLCBkYXRlLCBzb3VyY2UgfSA9IHB1YmxpY2F0aW9uO1xyXG4gICAgICByZXR1cm4gaCgnZGl2LmN5LW92ZXJmbG93LWNvbnRlbnQnLCBbXHJcbiAgICAgICAgaCgnYS5wbGFpbi1saW5rJywgeyBocmVmOiAnaHR0cHM6Ly9iaW9yZWdpc3RyeS5pby9wdWJtZWQ6JyArIGlkLCB0YXJnZXQ6ICdfYmxhbmsnICB9LCB0aXRsZSksXHJcbiAgICAgICAgaCgnZGl2JywgZmlyc3RBdXRob3IgKyAgJyBldCBhbC4gfCAnICsgc291cmNlICsgJyAtICcgKyBuZXcgRGF0ZShkYXRlKS5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKCkpXHJcbiAgICAgIF0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgbGV0IHNob3dUeXBlID0gdHlwZSAhPT0gJyc7XHJcblxyXG4gICAgbGV0IHNob3dTdGROYW1lID0gc3RhbmRhcmROYW1lICE9PSAnJztcclxuICAgIGxldCBzaG93RGlzcE5hbWUgPSBkaXNwbGF5TmFtZSAhPT0gJycgJiYgZGlzcGxheU5hbWUgIT09IGxhYmVsO1xyXG4gICAgbGV0IHNob3dTeW5vbnltcyA9IHN5bm9ueW1zLmxlbmd0aCA+IDA7XHJcbiAgICBsZXQgc2hvd1B1YnMgPSBwdWJsaWNhdGlvbkVsZXMubGVuZ3RoID4gMDtcclxuXHJcbiAgICBsZXQgc2hvd0JvZHkgPSBzaG93U3RkTmFtZSB8fCBzaG93RGlzcE5hbWUgfHwgc2hvd1N5bm9ueW1zIHx8IHNob3dQdWJzO1xyXG4gICAgbGV0IHNob3dMaW5rcyA9IGRiTGlua3MubGVuZ3RoID4gMDtcclxuICAgIGxldCBzaG93UGNTZWFyY2hMaW5rID0gbGFiZWwgfHwgZGlzcGxheU5hbWU7XHJcblxyXG4gICAgcmV0dXJuIGgoJ2Rpdi5jeS10b29sdGlwJywgW1xyXG4gICAgICBoKCdkaXYuY3ktdG9vbHRpcC1jb250ZW50JywgW1xyXG4gICAgICAgIGgoJ2Rpdi5jeS10b29sdGlwLWhlYWRlcicsIFtcclxuICAgICAgICAgIGgoJ2gyLmN5LXRvb2x0aXAtdGl0bGUnLCAgYCR7bGFiZWwgfHwgZGlzcGxheU5hbWUgfHwgJyd9YCksXHJcbiAgICAgICAgICBzaG93VHlwZSA/IGgoJ2Rpdi5jeS10b29sdGlwLXR5cGUtY2hpcCcsIHR5cGUpIDogbnVsbCxcclxuICAgICAgICBdKSxcclxuICAgICAgICBzaG93Qm9keSA/IGgoJ2Rpdi5jeS10b29sdGlwLWJvZHknLCBbXHJcbiAgICAgICAgICBzaG93U3RkTmFtZSA/IGgoJ2Rpdi5jeS10b29sdGlwLXNlY3Rpb24nLCBbXHJcbiAgICAgICAgICAgIGgoJ2Rpdi5jeS10b29sdGlwLWZpZWxkLW5hbWUnLCAnTmFtZScpLFxyXG4gICAgICAgICAgICBoKCdkaXYuY3ktdG9vbHRpcC1maWVsZC12YWx1ZScsIHN0YW5kYXJkTmFtZSlcclxuICAgICAgICAgIF0pIDogbnVsbCxcclxuICAgICAgICAgIHNob3dEaXNwTmFtZSA/IGgoJ2Rpdi5jeS10b29sdGlwLXNlY3Rpb24nLCBbXHJcbiAgICAgICAgICAgIGgoJ2Rpdi5jeS10b29sdGlwLWZpZWxkLW5hbWUnLCAnRGlzcGxheSBOYW1lJyksXHJcbiAgICAgICAgICAgIGgoJ2Rpdi5jeS10b29sdGlwLWZpZWxkLXZhbHVlJywgZGlzcGxheU5hbWUpXHJcbiAgICAgICAgICBdKSA6IG51bGwsXHJcbiAgICAgICAgICBzaG93U3lub255bXMgPyBoKCdkaXYuY3ktdG9vbHRpcC1zZWN0aW9uJywgW1xyXG4gICAgICAgICAgICBoKCdkaXYuY3ktdG9vbHRpcC1maWVsZC1uYW1lJywgW1xyXG4gICAgICAgICAgICAgICdTeW5vbnltcycsXHJcbiAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICBoKCdkaXYuY3ktdG9vbHRpcC1maWVsZC12YWx1ZScsIHN5bm9ueW1zLnNsaWNlKDAsIERFRkFVTFRfTlVNX05BTUVTKS5qb2luKCcsICcpKVxyXG4gICAgICAgICAgXSkgOiBudWxsLFxyXG4gICAgICAgICAgc2hvd1B1YnMgPyBoKCdkaXYuY3ktdG9vbHRpcC1zZWN0aW9uJywgW1xyXG4gICAgICAgICAgICBoKCdkaXYuY3ktdG9vbHRpcC1maWVsZC1uYW1lJywgW1xyXG4gICAgICAgICAgICAgICdQdWJsaWNhdGlvbnMnLFxyXG4gICAgICAgICAgICBdKSxcclxuICAgICAgICAgICAgaCgnZGl2JywgcHVibGljYXRpb25FbGVzKVxyXG4gICAgICAgICAgXSkgOiBudWxsXHJcbiAgICAgICAgXSk6IG51bGwsXHJcbiAgICAgICAgaCgnZGl2LmN5LXRvb2x0aXAtZm9vdGVyJywgW1xyXG4gICAgICAgICAgc2hvd0xpbmtzID8gaCgnZGl2LmN5LXRvb2x0aXAtc2VjdGlvbicsIFtcclxuICAgICAgICAgICAgaCgnZGl2LmN5LXRvb2x0aXAtZmllbGQtbmFtZScsIFtcclxuICAgICAgICAgICAgICAnTGlua3MnLFxyXG4gICAgICAgICAgICBdKSxcclxuICAgICAgICAgICAgaCgnZGl2LmN5LXRvb2x0aXAtbGlua3MnLCBkYkxpbmtzKVxyXG4gICAgICAgICAgXSkgOiBudWxsXHJcbiAgICAgICAgXSksXHJcbiAgICAgICAgc2hvd1BjU2VhcmNoTGluayA/IGgoJ2Rpdi5jeS10b29sdGlwLWNhbGwtdG8tYWN0aW9uJywgW1xyXG4gICAgICAgICAgaCgnYScsIHtcclxuICAgICAgICAgICAgdGFyZ2V0OiAnX2JsYW5rJyxcclxuICAgICAgICAgICAgaHJlZjogJy9zZWFyY2g/cT0nICsgc2VhcmNoTGlua1F1ZXJ5XHJcbiAgICAgICAgICB9LCBbXHJcbiAgICAgICAgICAgIGgoJ2J1dHRvbi5jYWxsLXRvLWFjdGlvbicsICdGaW5kIFJlbGF0ZWQgUGF0aHdheXMnKVxyXG4gICAgICAgICAgXSlcclxuICAgICAgICBdKSA6IG51bGxcclxuICAgICAgXSlcclxuICAgIF0pO1xyXG4gIH1cclxufVxyXG5cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUGF0aHdheU5vZGVNZXRhZGF0YVZpZXc7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NsaWVudC9mZWF0dXJlcy9wYWludC9wYXRod2F5LW5vZGUtbWV0YWRhdGEuanMiLCJcclxuY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xyXG5jb25zdCBoID0gcmVxdWlyZSgncmVhY3QtaHlwZXJzY3JpcHQnKTtcclxuXHJcbmNvbnN0IEljb25CdXR0b24gPSByZXF1aXJlKCcuLi8uLi9jb21tb24vY29tcG9uZW50cy9pY29uLWJ1dHRvbicpO1xyXG5cclxuXHJcbmNvbnN0IHsgZml0LCBleHBhbmRDb2xsYXBzZSwgbGF5b3V0IH0gPSByZXF1aXJlKCcuL2N5Jyk7XHJcblxyXG5jbGFzcyBQYXRod2F5c1Rvb2xiYXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gIHJlbmRlcigpe1xyXG4gICAgbGV0IHsgY3lTcnYsIGNvbnRyb2xsZXIsIGFjdGl2ZU1lbnUgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBsZXQgY3kgPSBjeVNydi5nZXQoKTtcclxuXHJcbiAgICByZXR1cm4gaCgnZGl2LmFwcC10b29sYmFyJywgW1xyXG4gICAgICBoKEljb25CdXR0b24sIHtcclxuICAgICAgICBkZXNjcmlwdGlvbjogJ0V4dHJhIEluZm9ybWF0aW9uJyxcclxuICAgICAgICBvbkNsaWNrOiAoKSA9PiBjb250cm9sbGVyLmNoYW5nZU1lbnUoJ2luZm9NZW51JyksXHJcbiAgICAgICAgaXNBY3RpdmU6IGFjdGl2ZU1lbnUgPT09ICdpbmZvTWVudScsXHJcbiAgICAgICAgaWNvbjogJ2luZm8nXHJcbiAgICAgIH0pLFxyXG4gICAgICBoKEljb25CdXR0b24sIHtcclxuICAgICAgICBkZXNjcmlwdGlvbjogJ0Rvd25sb2FkcycsXHJcbiAgICAgICAgb25DbGljazogKCkgPT4gY29udHJvbGxlci5jaGFuZ2VNZW51KCdkb3dubG9hZE1lbnUnKSxcclxuICAgICAgICBpc0FjdGl2ZTogYWN0aXZlTWVudSA9PT0gJ2Rvd25sb2FkTWVudScsXHJcbiAgICAgICAgaWNvbjogJ2ZpbGVfZG93bmxvYWQnXHJcbiAgICAgIH0pLFxyXG4gICAgICBoKEljb25CdXR0b24sIHtcclxuICAgICAgICBkZXNjcmlwdGlvbjogJ0Rvd25sb2FkcycsXHJcbiAgICAgICAgb25DbGljazogKCkgPT4gY29udHJvbGxlci5jaGFuZ2VNZW51KCdwYWludE1lbnUnKSxcclxuICAgICAgICBpc0FjdGl2ZTogYWN0aXZlTWVudSA9PT0gJ3BhaW50TWVudScsXHJcbiAgICAgICAgaWNvbjogJ2Zvcm1hdF9wYWludCdcclxuICAgICAgfSksXHJcbiAgICAgIGgoSWNvbkJ1dHRvbiwge1xyXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnRXhwYW5kL0NvbGxhcHNlIGFsbCBjb21wbGV4IG5vZGVzJyxcclxuICAgICAgICBvbkNsaWNrOiAoKSA9PiBleHBhbmRDb2xsYXBzZSggY3kgKSxcclxuICAgICAgICBpc0FjdGl2ZTogZmFsc2UsXHJcbiAgICAgICAgaWNvbjogJ3NlbGVjdF9hbGwnXHJcbiAgICAgIH0pLFxyXG4gICAgICBoKEljb25CdXR0b24sIHtcclxuICAgICAgICBkZXNjcmlwdGlvbjogJ0ZpdCBwYXRod2F5IHRvIHNjcmVlbicsXHJcbiAgICAgICAgb25DbGljazogKCkgPT4gZml0KCBjeSApLFxyXG4gICAgICAgIGlzQWN0aXZlOiBmYWxzZSxcclxuICAgICAgICBpY29uOiAnZnVsbHNjcmVlbidcclxuICAgICAgfSksXHJcbiAgICAgIGgoSWNvbkJ1dHRvbiwge1xyXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmVzZXQgcGF0aHdheSBhcnJhbmdlbWVudCcsXHJcbiAgICAgICAgb25DbGljazogKCkgPT4gbGF5b3V0KCBjeSApLFxyXG4gICAgICAgIGlzQWN0aXZlOiBmYWxzZSxcclxuICAgICAgICBpY29uOiAncmVwbGF5J1xyXG4gICAgICB9KSxcclxuICAgIF0pO1xyXG4gIH1cclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQYXRod2F5c1Rvb2xiYXI7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NsaWVudC9mZWF0dXJlcy9wYWludC9wYXRod2F5cy10b29sYmFyLmpzIiwiY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xyXG5jb25zdCBoID0gcmVxdWlyZSgncmVhY3QtaHlwZXJzY3JpcHQnKTtcclxuY29uc3QgY2xhc3NOYW1lcyA9IHJlcXVpcmUoJ2NsYXNzbmFtZXMnKTtcclxuXHJcbmNsYXNzIERyb3Bkb3duIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgc3VwZXIocHJvcHMpO1xyXG4gICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgb3BlbjogZmFsc2UsXHJcbiAgICAgIHRpdGxlOiBwcm9wcy50aXRsZVxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmhhbmRsZUNsb3NlID0gZSA9PiB0aGlzLmNsb3NlKGUpO1xyXG4gIH1cclxuXHJcbiAgb3BlbiggZSApe1xyXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIHRoaXMuc2V0U3RhdGUoeyBvcGVuOiB0cnVlfSwgKCkgPT4ge1xyXG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuaGFuZGxlQ2xvc2UpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjbG9zZSggZSApe1xyXG4gICAgaWYoICF0aGlzLmVsLmNvbnRhaW5zKGUudGFyZ2V0KSApe1xyXG4gICAgICB0aGlzLnNldFN0YXRlKHsgb3BlbjogZmFsc2UgfSwgKCkgPT4ge1xyXG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5oYW5kbGVDbG9zZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlQ2hhbmdlKCBuZXdWYWwgKXtcclxuICAgIHRoaXMucHJvcHMub25DaGFuZ2UobmV3VmFsKTtcclxuICAgIHRoaXMuc2V0U3RhdGUoeyBvcGVuOiBmYWxzZSwgdGl0bGU6IG5ld1ZhbC5sYWJlbCB9LCAoKSA9PiB7XHJcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5oYW5kbGVDbG9zZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHJlbmRlcigpIHtcclxuICAgIGNvbnN0IHsgbGlzdE9wdGlvbnMgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBjb25zdCB7IG9wZW4sIHRpdGxlIH0gPSB0aGlzLnN0YXRlO1xyXG5cclxuICAgIHJldHVybiAoXHJcbiAgICAgIGgoYGRpdi5kcm9wZG93bmAsIHsgcmVmOiBlbCA9PiB0aGlzLmVsID0gZWwsIGNsYXNzTmFtZTogY2xhc3NOYW1lcyh0aGlzLnByb3BzLmNsYXNzTmFtZSwgeydkcm9wZG93bi1hY3RpdmUnOiBvcGVufSkgfSwgW1xyXG4gICAgICAgIGgoJ2Rpdi5kcm9wZG93bi1oZWFkZXInLCB7IG9uQ2xpY2s6IGUgPT4gdGhpcy5vcGVuKGUpIH0sIFtcclxuICAgICAgICAgIGgoJ2Rpdi5kcm9wZG93bi10aXRsZScsIHRpdGxlKSxcclxuICAgICAgICAgIGgoJ2kubWF0ZXJpYWwtaWNvbnMnLCBvcGVuID8gJ2tleWJvYXJkX2Fycm93X3VwJyA6ICdrZXlib2FyZF9hcnJvd19kb3duJylcclxuICAgICAgICBdKSxcclxuXHJcbiAgICAgICAgb3BlbiA/IGgoJ2Rpdi5kcm9wZG93bi1vcHRpb25zJywgbGlzdE9wdGlvbnMubWFwKCBkT3B0ID0+IHtcclxuICAgICAgICAgIHJldHVybiBoKCdkaXYuZHJvcGRvd24tb3B0aW9uJywgW1xyXG4gICAgICAgICAgICBoKCdkaXYnLCB7IGtleTogZE9wdC52YWx1ZSwgb25DbGljazogKCkgPT4gdGhpcy5oYW5kbGVDaGFuZ2UoZE9wdCkgfSwgZE9wdC5sYWJlbCApXHJcbiAgICAgICAgICBdKTtcclxuICAgICAgICB9KSkgOiBudWxsXHJcbiAgICAgIF0pXHJcbiAgICApO1xyXG4gIH1cclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBEcm9wZG93bjtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY2xpZW50L2NvbW1vbi9jb21wb25lbnRzL2Ryb3Bkb3duLmpzIiwiY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xyXG5jb25zdCBoID0gcmVxdWlyZSgncmVhY3QtaHlwZXJzY3JpcHQnKTtcclxuXHJcbmNsYXNzIENhcmQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gIHJlbmRlcigpe1xyXG4gICAgcmV0dXJuIGgoJ2Rpdi5jYXJkJywgW1xyXG4gICAgICB0aGlzLnByb3BzLmNoaWxkcmVuXHJcbiAgICBdKTtcclxuICB9XHJcbn1cclxuXHJcbmNsYXNzIENhcmRHcmlkIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICByZW5kZXIoKXtcclxuICAgIHJldHVybiBoKCdkaXYuY2FyZC1ncmlkJywgdGhpcy5wcm9wcy5jaGlsZHJlbi5tYXAoIGl0ZW0gPT4gaChDYXJkLCBbIGl0ZW0gXSApKSk7XHJcbiAgfVxyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHsgQ2FyZCwgQ2FyZEdyaWQgfTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY2xpZW50L2NvbW1vbi9jb21wb25lbnRzL2NhcmQuanMiLCJjb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XHJcbmNvbnN0IGggPSByZXF1aXJlKCdyZWFjdC1oeXBlcnNjcmlwdCcpO1xyXG5jb25zdCBjbGFzc05hbWVzID0gcmVxdWlyZSgnY2xhc3NuYW1lcycpO1xyXG5cclxuY2xhc3MgQXBwQ2FyZCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgY29uc3RydWN0b3IoIHByb3BzICl7XHJcbiAgICBzdXBlciggcHJvcHMgKTtcclxuICB9XHJcblxyXG4gIHJlbmRlcigpe1xyXG4gICAgbGV0IHsgZW5hYmxlZCwgaGludCwgdXJsLCBpbWFnZSwgaW1hZ2VDbGFzcywgdGl0bGUsIGJvZHksIGxpbmtpZnlDb250ZW50IH0gPSB0aGlzLnByb3BzO1xyXG5cclxuICAgIHJldHVybiBoKCcuYXBwLWNhcmQnLCB7XHJcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWVzKHsgJ2FwcC1jYXJkLWRpc2FibGVkJzogIWVuYWJsZWQgfSlcclxuICAgICAgfSwgW1xyXG4gICAgICBoKCAnYScsIHtcclxuICAgICAgICBocmVmOiB1cmwsXHJcbiAgICAgICAgdGFyZ2V0OiAnX2JsYW5rJ1xyXG4gICAgICB9LCBbXHJcbiAgICAgICAgaCggJ2Rpdi5hcHAtY2FyZC1pbWFnZScsIHtcclxuICAgICAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcyh7XHJcbiAgICAgICAgICAgIFtpbWFnZUNsYXNzXTogISFpbWFnZUNsYXNzLFxyXG4gICAgICAgICAgICAnYmFja2dyb3VuZCc6ICEhaW1hZ2VDbGFzcyxcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfSwgWyBpbWFnZSBdKVxyXG4gICAgICBdKSxcclxuICAgICAgaCgnYS5hcHAtY2FyZC1jb250ZW50LWxpbmsnLCBsaW5raWZ5Q29udGVudCA/IHtcclxuICAgICAgICBocmVmOiB1cmwsXHJcbiAgICAgICAgdGFyZ2V0OiAnX2JsYW5rJ1xyXG4gICAgICB9IDoge30sIFtcclxuICAgICAgICBoKCdkaXYuYXBwLWNhcmQtY29udGVudCcsIFtcclxuICAgICAgICAgIGgoICdkaXYuYXBwLWNhcmQtaGVhZGVyJywgW1xyXG4gICAgICAgICAgICBoKCAnaDQuYXBwLWNhcmQtdGl0bGUnLCBbdGl0bGVdICksXHJcbiAgICAgICAgICAgIGgoICdzcGFuLmFwcC1jYXJkLWhpbnQnLCBbaGludF0gKVxyXG4gICAgICAgICAgXSksXHJcbiAgICAgICAgICBoKCAnZGl2LmFwcC1jYXJkLWJvZHknLCBbYm9keV0gKVxyXG4gICAgICAgIF0pXHJcbiAgICAgIF0pXHJcbiAgICBdKTtcclxuICB9XHJcbn1cclxuXHJcbi8vIFNwZWNpZmllcyB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIHByb3BzOlxyXG5BcHBDYXJkLmRlZmF1bHRQcm9wcyA9IHtcclxuICBlbmFibGVkOiB0cnVlLFxyXG4gIGhpbnQ6IG51bGwsXHJcbiAgaW1hZ2VDbGFzczogbnVsbCxcclxuICBpbWFnZTogbnVsbFxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7IEFwcENhcmQgfTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY2xpZW50L2NvbW1vbi9jb21wb25lbnRzL2FwcC1jYXJkLmpzIiwiY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xyXG5jb25zdCBoID0gcmVxdWlyZSgncmVhY3QtaHlwZXJzY3JpcHQnKTtcclxuY29uc3QgeyBMaW5rIH0gPSByZXF1aXJlKCdyZWFjdC1yb3V0ZXItZG9tJyk7XHJcblxyXG5cclxuXHJcblxyXG5jbGFzcyBFbXB0eU5ldHdvcmsgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gIHJlbmRlcigpe1xyXG4gICAgbGV0IHsgbXNnLCBzaG93UGNMaW5rIH0gPSB0aGlzLnByb3BzO1xyXG5cclxuICAgIGxldCBsaW5rVG9QY1NlYXJjaCA9IHNob3dQY0xpbmsgPyBoKCdkaXYnLCBbJ1JldHVybiB0bycsIGgoTGluaywgeyBjbGFzc05hbWU6ICdwbGFpbi1saW5rJywgdG86IHsgcGF0aG5hbWU6ICcvJyB9IH0sICAnIFBhdGh3YXkgQ29tbW9ucyBTZWFyY2gnKV0pIDogbnVsbDtcclxuXHJcbiAgICByZXR1cm4gaCgnZGl2LmVtcHR5LW5ldHdvcmsnLFtcclxuICAgICAgaCgnZGl2LmVtcHR5LW5ldHdvcmstaGVhZGVyJywgW1xyXG4gICAgICAgIGgoJ2Rpdi5wYy1sb2dvJyksXHJcbiAgICAgICAgaCgnaDEuZW1wdHktbmV0d29yay1tZXNzYWdlJywgbXNnKVxyXG4gICAgICBdKSxcclxuICAgICAgbGlua1RvUGNTZWFyY2hcclxuICAgIF0pO1xyXG4gIH1cclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBFbXB0eU5ldHdvcms7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NsaWVudC9jb21tb24vY29tcG9uZW50cy9lbXB0eS1uZXR3b3JrLmpzIiwiXHJcbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcclxuY29uc3QgaCA9IHJlcXVpcmUoJ3JlYWN0LWh5cGVyc2NyaXB0Jyk7XHJcbmNvbnN0IGNsYXNzTmFtZXMgPSByZXF1aXJlKCdjbGFzc25hbWVzJyk7XHJcblxyXG5jb25zdCBJY29uQnV0dG9uID0gcmVxdWlyZSgnLi9pY29uLWJ1dHRvbicpO1xyXG5cclxuXHJcbi8vIGEgc2lkZWJhciBmb3IgYSBuZXR3b3JrIHZpZXdcclxuLy8gcHJvcHM6XHJcbi8vICAtIGNvbnRyb2xsZXI6IHBhcmVudCBjb21wb25lbnQgdGhhdCBpbXBsZW1lbnRzIGNoYW5nZU1lbnVcclxuLy8gIC0gYWN0aXZlTWVudTogYSBzdHJpbmcgcmVwcmVzZW50aW5nIHdoaWNoIG1lbnUgdG8gb3BlblxyXG4vLyAgLSBjaGlsZHJlbjogZWFjaCBtZW51IHNob3VsZCBiZSBhIGNoaWxkIGZvciB0aGlzIHNpZGViYXJcclxuLy8gICAgICAgICAgICAgIGFuZCBjb250YWluIGEga2V5IHRoYXQgY2FuIGJlIHVzZWQgdG8gY29tcGFyZVxyXG4vLyAgICAgICAgICAgICAgYWdhaW5zdCB0aGUgY3VycmVudCBtZW51XHJcbi8vXHJcblxyXG4vLyBleGFtcGxlIHVzYWdlOlxyXG4vLyBjbGFzcyBQYXJlbnRDb21wb25lbnQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4vLyAgIGNvbnN0cnVjdG9yKHByb3BzKXtcclxuLy8gICAgIHRoaXMuc3RhdGUgPSB7XHJcbi8vICAgICAgIGFjdGl2ZU1lbnU6ICdtZW51MSdcclxuLy8gICAgIH07XHJcbi8vICAgfVxyXG4vLyAgIGNoYW5nZU1lbnUobmV3TWVudSl7XHJcbi8vICAgICB0aGlzLnNldFN0YXRlKHsgYWN0aXZlTWVudTogbmV3TWVudSB9KTtcclxuLy8gICB9XHJcbi8vICAgcmVuZGVyKCl7XHJcbi8vICAgICBsZXQgeyBhY3RpdmVNZW51IH0gPSB0aGlzLnN0YXRlO1xyXG4vLyAgICAgcmV0dXJuIGgoU2lkZWJhciwgeyBjb250cm9sbGVyOiB0aGlzLCBhY3RpdmVNZW51IH0sIFtcclxuLy8gICAgICAgaChNZW51MSwgeyBrZXk6ICdtZW51MScgfSksXHJcbi8vICAgICAgIGgoTWVudTIsIHsga2V5OiAnbWVudTInIH0pXHJcbi8vICAgICBdKVxyXG4vLyAgIH1cclxuLy8gfVxyXG5cclxuY2xhc3MgU2lkZWJhciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgcmVuZGVyKCl7XHJcbiAgICBsZXQgeyBjb250cm9sbGVyLCBhY3RpdmVNZW51LCBjaGlsZHJlbiB9ID0gdGhpcy5wcm9wcztcclxuICAgIGxldCBhY3RpdmVNZW51Q29udGVudCA9IGNoaWxkcmVuLmZpbmQoY2hpbGQgPT4gY2hpbGQua2V5ID09PSBhY3RpdmVNZW51KTtcclxuXHJcbiAgICByZXR1cm4gaCgnZGl2LnNpZGViYXItbWVudScsIHsgY2xhc3NOYW1lOiBjbGFzc05hbWVzKHsnc2lkZWJhci1tZW51LW9wZW4nOiBhY3RpdmVNZW51ICE9ICdjbG9zZU1lbnUnIH0pfSwgW1xyXG4gICAgICBoKCdkaXYuc2lkZWJhci1jbG9zZScsIFtcclxuICAgICAgICBoKEljb25CdXR0b24sIHtcclxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnQ2xvc2UgdGhlIHNpZGViYXInLFxyXG4gICAgICAgICAgb25DbGljazogKCkgPT4gY29udHJvbGxlci5jaGFuZ2VNZW51KCdjbG9zZU1lbnUnKSxcclxuICAgICAgICAgIGlzQWN0aXZlOiBmYWxzZSxcclxuICAgICAgICAgIGljb246ICdjbG9zZSdcclxuICAgICAgICB9KVxyXG4gICAgICBdKSxcclxuICAgICAgaCgnZGl2LnNpZGViYXItY29udGVudCcsIFtcclxuICAgICAgICBoKCdkaXYuc2lkZWJhci10ZXh0JywgW2FjdGl2ZU1lbnVDb250ZW50XSlcclxuICAgICAgXSlcclxuICAgIF0pO1xyXG4gIH1cclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTaWRlYmFyO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jbGllbnQvY29tbW9uL2NvbXBvbmVudHMvc2lkZWJhci5qcyIsImNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcclxuY29uc3QgaCA9IHJlcXVpcmUoJ3JlYWN0LWh5cGVyc2NyaXB0Jyk7XHJcbmNvbnN0IGNsYXNzTmFtZXMgPSByZXF1aXJlKCdjbGFzc25hbWVzJyk7XHJcblxyXG5cclxuXHJcblxyXG5jbGFzcyBDeXRvc2NhcGVOZXR3b3JrIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuXHJcbiAgY29tcG9uZW50RGlkTW91bnQoKXtcclxuICAgIGxldCB7IGN5U3J2LCBvbk1vdW50ID0gKCkgPT4ge30gfSA9IHRoaXMucHJvcHM7XHJcbiAgICBjeVNydi5tb3VudCh0aGlzLm5ldHdvcmspO1xyXG5cclxuICAgIG9uTW91bnQoKTtcclxuICB9XHJcbiAgY29tcG9uZW50V2lsbFVubW91bnQoKXtcclxuICAgIGxldCB7IGN5U3J2IH0gPSB0aGlzLnByb3BzO1xyXG4gICAgY3lTcnYuZGVzdHJveSgpO1xyXG4gIH1cclxuXHJcbiAgcmVuZGVyKCl7XHJcbiAgICByZXR1cm4gaCgnZGl2Lm5ldHdvcmsnLCB7IGNsYXNzTmFtZTogY2xhc3NOYW1lcygnbmV0d29yaycsIHRoaXMucHJvcHMuY2xhc3NOYW1lKX0sIFtcclxuICAgICAgaCgnZGl2Lm5ldHdvcmstY3kjY3knLCB7XHJcbiAgICAgICAgcmVmOiBkb20gPT4gdGhpcy5uZXR3b3JrID0gZG9tXHJcbiAgICAgIH0pXHJcbiAgICBdKTtcclxuICB9XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ3l0b3NjYXBlTmV0d29yaztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY2xpZW50L2NvbW1vbi9jb21wb25lbnRzL2N5dG9zY2FwZS1uZXR3b3JrLmpzIiwibW9kdWxlLmV4cG9ydHMgPSB7XCJkYXRhU2V0RXhwcmVzc2lvbkxpc3RcIjpbe1wiZGF0YVNldHNcIjpbXCJURVBcIl0sXCJudW1Db25kaXRpb25zXCI6MTAsXCJjb2x1bW5OYW1lc1wiOltcIk1HSC1CckNhLUgtNzRfaHRzcWN0XCIsXCJNR0gtQnJDYS1ILTY4X2h0c3FjdFwiLFwiTUdILUJyQ2EtSC02Nl9odHNxY3RcIixcIk1HSC1CckNhLUgtNTlfaHRzcWN0XCIsXCJNR0gtQnJDYS1ILTExX2h0c3FjdFwiLFwiSEQtNV9odHNxY3RcIixcIkhELTRfaHRzcWN0XCIsXCJIRC0zLTFfaHRzcWN0XCIsXCJIRC0yLTFfaHRzcWN0XCIsXCJIRC0xX2h0c3FjdFwiXSxcImV4cHJlc3Npb25Vbml2ZXJzZVwiOjYyMTEsXCJleHByZXNzaW9uc1wiOlt7XCJnZW5lTmFtZVwiOlwiVFA1M1wiLFwidmFsdWVzXCI6WzExNi43NDkyLDc0LjY5NjYsODUuNDExMSwyODMuMzk5Miw1NS44NzQ0LDYzMi44Mjc0LDUwOS4xNzE0LDU0NS4wNDM0LDU3Ny4yNjQ0LDI5MS4yMjE5XX0se1wiZ2VuZU5hbWVcIjpcIlpORjM4NUFcIixcInZhbHVlc1wiOlsxMTYuNzQ5Miw3NC42OTY2LDg1LjQxMTEsMjgzLjM5OTIsNTUuODc0NCw1MDYuMjYxOSw0MDcuMzM3MSw0MzYuMDM0OCw0NjEuODExNSwyMzIuOTc3Nl19LHtcImdlbmVOYW1lXCI6XCJQQ0JQNFwiLFwidmFsdWVzXCI6WzM1MC4yNDc2LDIyNC4wODk5LDI1Ni4yMzM0LDg1MC4xOTc0LDE2Ny42MjMzLDEyNi41NjU1LDEwMS44MzQzLDEwOS4wMDg3LDExNS40NTI5LDU4LjI0NDRdfSx7XCJnZW5lTmFtZVwiOlwiQ0RLTjFBXCIsXCJ2YWx1ZXNcIjpbMTE2Ljc0OTIsNzQuNjk2Niw4NS40MTExLDI4My4zOTkyLDU1Ljg3NDQsMzc5LjY5NjQsMzA1LjUwMjksMzI3LjAyNjEsMzQ2LjM1ODcsMTc0LjczMzJdfV19XSxcImRhdGFTZXRDbGFzc0xpc3RcIjpbe1wiZGF0YVNldFwiOlwiVEVQXCIsXCJjbGFzc2VzXCI6W1wiQnJDYVwiLFwiQnJDYVwiLFwiQnJDYVwiLFwiQnJDYVwiLFwiQnJDYVwiLFwiSERcIixcIkhEXCIsXCJIRFwiLFwiSERcIixcIkhEXCJdLFwicGhlbm90eXBlMVwiOlwiQnJDYVwiLFwicGhlbm90eXBlMlwiOlwiSERcIn1dfVxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL2NsaWVudC9mZWF0dXJlcy9wYWludC9kZW1vLWV4cHJlc3Npb25zLmpzb25cbi8vIG1vZHVsZSBpZCA9IDQ5MFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IFt7XCJncmFwaFwiOntcImVkZ2VzXCI6W3tcImRhdGFcIjp7XCJiZW5kUG9pbnRQb3NpdGlvbnNcIjpbXSxcImNhcmRpbmFsaXR5XCI6MCxcImNsYXNzXCI6XCJjb25zdW1wdGlvblwiLFwiaWRcIjpcImh0dHA6Ly9wYXRod2F5Y29tbW9ucy5vcmcvcGMyL1JuYV9iMGM3OTk3MTBhMTkyYWIxZWQ2Nzk0YTYzMzJlM2IwZi0tVE8tLUlOUF9odHRwOi8vaWRlbnRpZmllcnMub3JnL3JlYWN0b21lL1ItSFNBLTY4MDM0MTFfTEVGVFRPUklHSFRcIixcInBvcnRTb3VyY2VcIjpcImh0dHA6Ly9wYXRod2F5Y29tbW9ucy5vcmcvcGMyL1JuYV9iMGM3OTk3MTBhMTkyYWIxZWQ2Nzk0YTYzMzJlM2IwZlwiLFwicG9ydFRhcmdldFwiOlwiaHR0cDovL2lkZW50aWZpZXJzLm9yZy9yZWFjdG9tZS9SLUhTQS02ODAzNDExX0xFRlRUT1JJR0hUXCIsXCJzb3VyY2VcIjpcImh0dHA6Ly9wYXRod2F5Y29tbW9ucy5vcmcvcGMyL1JuYV9iMGM3OTk3MTBhMTkyYWIxZWQ2Nzk0YTYzMzJlM2IwZlwiLFwidGFyZ2V0XCI6XCJodHRwOi8vaWRlbnRpZmllcnMub3JnL3JlYWN0b21lL1ItSFNBLTY4MDM0MTFfTEVGVFRPUklHSFRcIn19LHtcImRhdGFcIjp7XCJiZW5kUG9pbnRQb3NpdGlvbnNcIjpbXSxcImNhcmRpbmFsaXR5XCI6MCxcImNsYXNzXCI6XCJwcm9kdWN0aW9uXCIsXCJpZFwiOlwiT1VUX2h0dHA6Ly9pZGVudGlmaWVycy5vcmcvcmVhY3RvbWUvUi1IU0EtNjgwMzgwMV9MRUZUVE9SSUdIVC0tVE8tLWh0dHA6Ly9wYXRod2F5Y29tbW9ucy5vcmcvcGMyL0NvbXBsZXhfMjkzZDYyN2Q4ZjlmMjJiOWU3MmViY2Q4NjkwOWQzMzRcIixcInBvcnRTb3VyY2VcIjpcImh0dHA6Ly9pZGVudGlmaWVycy5vcmcvcmVhY3RvbWUvUi1IU0EtNjgwMzgwMV9MRUZUVE9SSUdIVFwiLFwicG9ydFRhcmdldFwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvQ29tcGxleF8yOTNkNjI3ZDhmOWYyMmI5ZTcyZWJjZDg2OTA5ZDMzNFwiLFwic291cmNlXCI6XCJodHRwOi8vaWRlbnRpZmllcnMub3JnL3JlYWN0b21lL1ItSFNBLTY4MDM4MDFfTEVGVFRPUklHSFRcIixcInRhcmdldFwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvQ29tcGxleF8yOTNkNjI3ZDhmOWYyMmI5ZTcyZWJjZDg2OTA5ZDMzNFwifX0se1wiZGF0YVwiOntcImJlbmRQb2ludFBvc2l0aW9uc1wiOltdLFwiY2FyZGluYWxpdHlcIjowLFwiY2xhc3NcIjpcImNvbnN1bXB0aW9uXCIsXCJpZFwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvUm5hX2IwYzc5OTcxMGExOTJhYjFlZDY3OTRhNjMzMmUzYjBmLS1UTy0tSU5QX2h0dHA6Ly9pZGVudGlmaWVycy5vcmcvcmVhY3RvbWUvUi1IU0EtNjgwMzQwM19MRUZUVE9SSUdIVFwiLFwicG9ydFNvdXJjZVwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvUm5hX2IwYzc5OTcxMGExOTJhYjFlZDY3OTRhNjMzMmUzYjBmXCIsXCJwb3J0VGFyZ2V0XCI6XCJodHRwOi8vaWRlbnRpZmllcnMub3JnL3JlYWN0b21lL1ItSFNBLTY4MDM0MDNfTEVGVFRPUklHSFRcIixcInNvdXJjZVwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvUm5hX2IwYzc5OTcxMGExOTJhYjFlZDY3OTRhNjMzMmUzYjBmXCIsXCJ0YXJnZXRcIjpcImh0dHA6Ly9pZGVudGlmaWVycy5vcmcvcmVhY3RvbWUvUi1IU0EtNjgwMzQwM19MRUZUVE9SSUdIVFwifX0se1wiZGF0YVwiOntcImJlbmRQb2ludFBvc2l0aW9uc1wiOltdLFwiY2FyZGluYWxpdHlcIjowLFwiY2xhc3NcIjpcInByb2R1Y3Rpb25cIixcImlkXCI6XCJPVVRfaHR0cDovL2lkZW50aWZpZXJzLm9yZy9yZWFjdG9tZS9SLUhTQS02ODAzNzE5X0xFRlRUT1JJR0hULS1UTy0taHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvQ29tcGxleF8zYjliZGUyMWU4ZjEzMDg3MGI5MWY3M2FjMzFkY2FiYVwiLFwicG9ydFNvdXJjZVwiOlwiaHR0cDovL2lkZW50aWZpZXJzLm9yZy9yZWFjdG9tZS9SLUhTQS02ODAzNzE5X0xFRlRUT1JJR0hUXCIsXCJwb3J0VGFyZ2V0XCI6XCJodHRwOi8vcGF0aHdheWNvbW1vbnMub3JnL3BjMi9Db21wbGV4XzNiOWJkZTIxZThmMTMwODcwYjkxZjczYWMzMWRjYWJhXCIsXCJzb3VyY2VcIjpcImh0dHA6Ly9pZGVudGlmaWVycy5vcmcvcmVhY3RvbWUvUi1IU0EtNjgwMzcxOV9MRUZUVE9SSUdIVFwiLFwidGFyZ2V0XCI6XCJodHRwOi8vcGF0aHdheWNvbW1vbnMub3JnL3BjMi9Db21wbGV4XzNiOWJkZTIxZThmMTMwODcwYjkxZjczYWMzMWRjYWJhXCJ9fSx7XCJkYXRhXCI6e1wiYmVuZFBvaW50UG9zaXRpb25zXCI6W10sXCJjYXJkaW5hbGl0eVwiOjAsXCJjbGFzc1wiOlwiaW5oaWJpdGlvblwiLFwiaWRcIjpcImh0dHA6Ly9wYXRod2F5Y29tbW9ucy5vcmcvcGMyL0NvbXBsZXhfZTVlYWRiMjllMWZmYTFhZjdlNDc0M2NjYTU2ODQwNDktLVRPLS1odHRwOi8vaWRlbnRpZmllcnMub3JnL3JlYWN0b21lL1ItSFNBLTY4MDM0MTFfTEVGVFRPUklHSFRcIixcInBvcnRTb3VyY2VcIjpcImh0dHA6Ly9wYXRod2F5Y29tbW9ucy5vcmcvcGMyL0NvbXBsZXhfZTVlYWRiMjllMWZmYTFhZjdlNDc0M2NjYTU2ODQwNDlcIixcInBvcnRUYXJnZXRcIjpcImh0dHA6Ly9pZGVudGlmaWVycy5vcmcvcmVhY3RvbWUvUi1IU0EtNjgwMzQxMV9MRUZUVE9SSUdIVFwiLFwic291cmNlXCI6XCJodHRwOi8vcGF0aHdheWNvbW1vbnMub3JnL3BjMi9Db21wbGV4X2U1ZWFkYjI5ZTFmZmExYWY3ZTQ3NDNjY2E1Njg0MDQ5XCIsXCJ0YXJnZXRcIjpcImh0dHA6Ly9pZGVudGlmaWVycy5vcmcvcmVhY3RvbWUvUi1IU0EtNjgwMzQxMV9MRUZUVE9SSUdIVFwifX0se1wiZGF0YVwiOntcImJlbmRQb2ludFBvc2l0aW9uc1wiOltdLFwiY2FyZGluYWxpdHlcIjowLFwiY2xhc3NcIjpcImNvbnN1bXB0aW9uXCIsXCJpZFwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvRG5hXzkxYjBiYjQ5ZmVmZTM2NzNiYTIzZDQ2ZGRhY2VmYzU2LS1UTy0tSU5QX2h0dHA6Ly9pZGVudGlmaWVycy5vcmcvcmVhY3RvbWUvUi1IU0EtNjgwMzgwMV9MRUZUVE9SSUdIVFwiLFwicG9ydFNvdXJjZVwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvRG5hXzkxYjBiYjQ5ZmVmZTM2NzNiYTIzZDQ2ZGRhY2VmYzU2XCIsXCJwb3J0VGFyZ2V0XCI6XCJodHRwOi8vaWRlbnRpZmllcnMub3JnL3JlYWN0b21lL1ItSFNBLTY4MDM4MDFfTEVGVFRPUklHSFRcIixcInNvdXJjZVwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvRG5hXzkxYjBiYjQ5ZmVmZTM2NzNiYTIzZDQ2ZGRhY2VmYzU2XCIsXCJ0YXJnZXRcIjpcImh0dHA6Ly9pZGVudGlmaWVycy5vcmcvcmVhY3RvbWUvUi1IU0EtNjgwMzgwMV9MRUZUVE9SSUdIVFwifX0se1wiZGF0YVwiOntcImJlbmRQb2ludFBvc2l0aW9uc1wiOltdLFwiY2FyZGluYWxpdHlcIjowLFwiY2xhc3NcIjpcImNvbnN1bXB0aW9uXCIsXCJpZFwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvRG5hXzkxYjBiYjQ5ZmVmZTM2NzNiYTIzZDQ2ZGRhY2VmYzU2LS1UTy0tSU5QX2h0dHA6Ly9pZGVudGlmaWVycy5vcmcvcmVhY3RvbWUvUi1IU0EtNjgwMzM4OF9MRUZUVE9SSUdIVFwiLFwicG9ydFNvdXJjZVwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvRG5hXzkxYjBiYjQ5ZmVmZTM2NzNiYTIzZDQ2ZGRhY2VmYzU2XCIsXCJwb3J0VGFyZ2V0XCI6XCJodHRwOi8vaWRlbnRpZmllcnMub3JnL3JlYWN0b21lL1ItSFNBLTY4MDMzODhfTEVGVFRPUklHSFRcIixcInNvdXJjZVwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvRG5hXzkxYjBiYjQ5ZmVmZTM2NzNiYTIzZDQ2ZGRhY2VmYzU2XCIsXCJ0YXJnZXRcIjpcImh0dHA6Ly9pZGVudGlmaWVycy5vcmcvcmVhY3RvbWUvUi1IU0EtNjgwMzM4OF9MRUZUVE9SSUdIVFwifX0se1wiZGF0YVwiOntcImJlbmRQb2ludFBvc2l0aW9uc1wiOltdLFwiY2FyZGluYWxpdHlcIjowLFwiY2xhc3NcIjpcImNvbnN1bXB0aW9uXCIsXCJpZFwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvUHJvdGVpbl9jMWY1YzA2NWU2YmM3MjEyN2NhNTZlZTBiZjAwNTQ5NC0tVE8tLUlOUF9odHRwOi8vaWRlbnRpZmllcnMub3JnL3JlYWN0b21lL1ItSFNBLTY4MDM0MDNfTEVGVFRPUklHSFRcIixcInBvcnRTb3VyY2VcIjpcImh0dHA6Ly9wYXRod2F5Y29tbW9ucy5vcmcvcGMyL1Byb3RlaW5fYzFmNWMwNjVlNmJjNzIxMjdjYTU2ZWUwYmYwMDU0OTRcIixcInBvcnRUYXJnZXRcIjpcImh0dHA6Ly9pZGVudGlmaWVycy5vcmcvcmVhY3RvbWUvUi1IU0EtNjgwMzQwM19MRUZUVE9SSUdIVFwiLFwic291cmNlXCI6XCJodHRwOi8vcGF0aHdheWNvbW1vbnMub3JnL3BjMi9Qcm90ZWluX2MxZjVjMDY1ZTZiYzcyMTI3Y2E1NmVlMGJmMDA1NDk0XCIsXCJ0YXJnZXRcIjpcImh0dHA6Ly9pZGVudGlmaWVycy5vcmcvcmVhY3RvbWUvUi1IU0EtNjgwMzQwM19MRUZUVE9SSUdIVFwifX0se1wiZGF0YVwiOntcImJlbmRQb2ludFBvc2l0aW9uc1wiOltdLFwiY2FyZGluYWxpdHlcIjowLFwiY2xhc3NcIjpcInByb2R1Y3Rpb25cIixcImlkXCI6XCJPVVRfaHR0cDovL2lkZW50aWZpZXJzLm9yZy9yZWFjdG9tZS9SLUhTQS02ODAzMzg4X0xFRlRUT1JJR0hULS1UTy0taHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvUm5hX2IwYzc5OTcxMGExOTJhYjFlZDY3OTRhNjMzMmUzYjBmXCIsXCJwb3J0U291cmNlXCI6XCJodHRwOi8vaWRlbnRpZmllcnMub3JnL3JlYWN0b21lL1ItSFNBLTY4MDMzODhfTEVGVFRPUklHSFRcIixcInBvcnRUYXJnZXRcIjpcImh0dHA6Ly9wYXRod2F5Y29tbW9ucy5vcmcvcGMyL1JuYV9iMGM3OTk3MTBhMTkyYWIxZWQ2Nzk0YTYzMzJlM2IwZlwiLFwic291cmNlXCI6XCJodHRwOi8vaWRlbnRpZmllcnMub3JnL3JlYWN0b21lL1ItSFNBLTY4MDMzODhfTEVGVFRPUklHSFRcIixcInRhcmdldFwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvUm5hX2IwYzc5OTcxMGExOTJhYjFlZDY3OTRhNjMzMmUzYjBmXCJ9fSx7XCJkYXRhXCI6e1wiYmVuZFBvaW50UG9zaXRpb25zXCI6W10sXCJjYXJkaW5hbGl0eVwiOjAsXCJjbGFzc1wiOlwic3RpbXVsYXRpb25cIixcImlkXCI6XCJodHRwOi8vcGF0aHdheWNvbW1vbnMub3JnL3BjMi9Db21wbGV4XzI5M2Q2MjdkOGY5ZjIyYjllNzJlYmNkODY5MDlkMzM0LS1UTy0taHR0cDovL2lkZW50aWZpZXJzLm9yZy9yZWFjdG9tZS9SLUhTQS02ODAzMzg4X0xFRlRUT1JJR0hUXCIsXCJwb3J0U291cmNlXCI6XCJodHRwOi8vcGF0aHdheWNvbW1vbnMub3JnL3BjMi9Db21wbGV4XzI5M2Q2MjdkOGY5ZjIyYjllNzJlYmNkODY5MDlkMzM0XCIsXCJwb3J0VGFyZ2V0XCI6XCJodHRwOi8vaWRlbnRpZmllcnMub3JnL3JlYWN0b21lL1ItSFNBLTY4MDMzODhfTEVGVFRPUklHSFRcIixcInNvdXJjZVwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvQ29tcGxleF8yOTNkNjI3ZDhmOWYyMmI5ZTcyZWJjZDg2OTA5ZDMzNFwiLFwidGFyZ2V0XCI6XCJodHRwOi8vaWRlbnRpZmllcnMub3JnL3JlYWN0b21lL1ItSFNBLTY4MDMzODhfTEVGVFRPUklHSFRcIn19LHtcImRhdGFcIjp7XCJiZW5kUG9pbnRQb3NpdGlvbnNcIjpbXSxcImNhcmRpbmFsaXR5XCI6MCxcImNsYXNzXCI6XCJwcm9kdWN0aW9uXCIsXCJpZFwiOlwiT1VUX2h0dHA6Ly9pZGVudGlmaWVycy5vcmcvcmVhY3RvbWUvUi1IU0EtNjgwMzQxMV9MRUZUVE9SSUdIVC0tVE8tLWh0dHA6Ly9wYXRod2F5Y29tbW9ucy5vcmcvcGMyL1Byb3RlaW5fOWQ2NTZiM2U0MWIwYzY5ZmY0NWEzMDVmMDU4YjNjZWZcIixcInBvcnRTb3VyY2VcIjpcImh0dHA6Ly9pZGVudGlmaWVycy5vcmcvcmVhY3RvbWUvUi1IU0EtNjgwMzQxMV9MRUZUVE9SSUdIVFwiLFwicG9ydFRhcmdldFwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvUHJvdGVpbl85ZDY1NmIzZTQxYjBjNjlmZjQ1YTMwNWYwNThiM2NlZlwiLFwic291cmNlXCI6XCJodHRwOi8vaWRlbnRpZmllcnMub3JnL3JlYWN0b21lL1ItSFNBLTY4MDM0MTFfTEVGVFRPUklHSFRcIixcInRhcmdldFwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvUHJvdGVpbl85ZDY1NmIzZTQxYjBjNjlmZjQ1YTMwNWYwNThiM2NlZlwifX0se1wiZGF0YVwiOntcImJlbmRQb2ludFBvc2l0aW9uc1wiOltdLFwiY2FyZGluYWxpdHlcIjowLFwiY2xhc3NcIjpcImNvbnN1bXB0aW9uXCIsXCJpZFwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvQ29tcGxleF9lNGM1NTQ3NzMxNGIzZDRiZmQ0YjhmNDdjZWZmM2UxNC0tVE8tLUlOUF9odHRwOi8vaWRlbnRpZmllcnMub3JnL3JlYWN0b21lL1ItSFNBLTY4MDM3MTlfTEVGVFRPUklHSFRcIixcInBvcnRTb3VyY2VcIjpcImh0dHA6Ly9wYXRod2F5Y29tbW9ucy5vcmcvcGMyL0NvbXBsZXhfZTRjNTU0NzczMTRiM2Q0YmZkNGI4ZjQ3Y2VmZjNlMTRcIixcInBvcnRUYXJnZXRcIjpcImh0dHA6Ly9pZGVudGlmaWVycy5vcmcvcmVhY3RvbWUvUi1IU0EtNjgwMzcxOV9MRUZUVE9SSUdIVFwiLFwic291cmNlXCI6XCJodHRwOi8vcGF0aHdheWNvbW1vbnMub3JnL3BjMi9Db21wbGV4X2U0YzU1NDc3MzE0YjNkNGJmZDRiOGY0N2NlZmYzZTE0XCIsXCJ0YXJnZXRcIjpcImh0dHA6Ly9pZGVudGlmaWVycy5vcmcvcmVhY3RvbWUvUi1IU0EtNjgwMzcxOV9MRUZUVE9SSUdIVFwifX0se1wiZGF0YVwiOntcImJlbmRQb2ludFBvc2l0aW9uc1wiOltdLFwiY2FyZGluYWxpdHlcIjowLFwiY2xhc3NcIjpcInByb2R1Y3Rpb25cIixcImlkXCI6XCJPVVRfaHR0cDovL2lkZW50aWZpZXJzLm9yZy9yZWFjdG9tZS9SLUhTQS02ODAzNDAzX0xFRlRUT1JJR0hULS1UTy0taHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvQ29tcGxleF9lNWVhZGIyOWUxZmZhMWFmN2U0NzQzY2NhNTY4NDA0OVwiLFwicG9ydFNvdXJjZVwiOlwiaHR0cDovL2lkZW50aWZpZXJzLm9yZy9yZWFjdG9tZS9SLUhTQS02ODAzNDAzX0xFRlRUT1JJR0hUXCIsXCJwb3J0VGFyZ2V0XCI6XCJodHRwOi8vcGF0aHdheWNvbW1vbnMub3JnL3BjMi9Db21wbGV4X2U1ZWFkYjI5ZTFmZmExYWY3ZTQ3NDNjY2E1Njg0MDQ5XCIsXCJzb3VyY2VcIjpcImh0dHA6Ly9pZGVudGlmaWVycy5vcmcvcmVhY3RvbWUvUi1IU0EtNjgwMzQwM19MRUZUVE9SSUdIVFwiLFwidGFyZ2V0XCI6XCJodHRwOi8vcGF0aHdheWNvbW1vbnMub3JnL3BjMi9Db21wbGV4X2U1ZWFkYjI5ZTFmZmExYWY3ZTQ3NDNjY2E1Njg0MDQ5XCJ9fSx7XCJkYXRhXCI6e1wiYmVuZFBvaW50UG9zaXRpb25zXCI6W10sXCJjYXJkaW5hbGl0eVwiOjAsXCJjbGFzc1wiOlwiY29uc3VtcHRpb25cIixcImlkXCI6XCJodHRwOi8vcGF0aHdheWNvbW1vbnMub3JnL3BjMi9Db21wbGV4XzNiOWJkZTIxZThmMTMwODcwYjkxZjczYWMzMWRjYWJhLS1UTy0tSU5QX2h0dHA6Ly9pZGVudGlmaWVycy5vcmcvcmVhY3RvbWUvUi1IU0EtNjgwMzgwMV9MRUZUVE9SSUdIVFwiLFwicG9ydFNvdXJjZVwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvQ29tcGxleF8zYjliZGUyMWU4ZjEzMDg3MGI5MWY3M2FjMzFkY2FiYVwiLFwicG9ydFRhcmdldFwiOlwiaHR0cDovL2lkZW50aWZpZXJzLm9yZy9yZWFjdG9tZS9SLUhTQS02ODAzODAxX0xFRlRUT1JJR0hUXCIsXCJzb3VyY2VcIjpcImh0dHA6Ly9wYXRod2F5Y29tbW9ucy5vcmcvcGMyL0NvbXBsZXhfM2I5YmRlMjFlOGYxMzA4NzBiOTFmNzNhYzMxZGNhYmFcIixcInRhcmdldFwiOlwiaHR0cDovL2lkZW50aWZpZXJzLm9yZy9yZWFjdG9tZS9SLUhTQS02ODAzODAxX0xFRlRUT1JJR0hUXCJ9fSx7XCJkYXRhXCI6e1wiYmVuZFBvaW50UG9zaXRpb25zXCI6W10sXCJjYXJkaW5hbGl0eVwiOjAsXCJjbGFzc1wiOlwiY29uc3VtcHRpb25cIixcImlkXCI6XCJodHRwOi8vcGF0aHdheWNvbW1vbnMub3JnL3BjMi9Qcm90ZWluXzc0ODE2ZmZjOGFmOGUxZDQzYjE2YjEyMjZhNWMwZGIyLS1UTy0tSU5QX2h0dHA6Ly9pZGVudGlmaWVycy5vcmcvcmVhY3RvbWUvUi1IU0EtNjgwMzcxOV9MRUZUVE9SSUdIVFwiLFwicG9ydFNvdXJjZVwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvUHJvdGVpbl83NDgxNmZmYzhhZjhlMWQ0M2IxNmIxMjI2YTVjMGRiMlwiLFwicG9ydFRhcmdldFwiOlwiaHR0cDovL2lkZW50aWZpZXJzLm9yZy9yZWFjdG9tZS9SLUhTQS02ODAzNzE5X0xFRlRUT1JJR0hUXCIsXCJzb3VyY2VcIjpcImh0dHA6Ly9wYXRod2F5Y29tbW9ucy5vcmcvcGMyL1Byb3RlaW5fNzQ4MTZmZmM4YWY4ZTFkNDNiMTZiMTIyNmE1YzBkYjJcIixcInRhcmdldFwiOlwiaHR0cDovL2lkZW50aWZpZXJzLm9yZy9yZWFjdG9tZS9SLUhTQS02ODAzNzE5X0xFRlRUT1JJR0hUXCJ9fV0sXCJub2Rlc1wiOlt7XCJkYXRhXCI6e1wiYmJveFwiOntcImhcIjoxNSxcIndcIjoxNSxcInhcIjo3LjUsXCJ5XCI6Ny41fSxcImNsYXNzXCI6XCJwcm9jZXNzXCIsXCJjbG9uZW1hcmtlclwiOmZhbHNlLFwiaWRcIjpcImh0dHA6Ly9pZGVudGlmaWVycy5vcmcvcmVhY3RvbWUvUi1IU0EtNjgwMzQwM19MRUZUVE9SSUdIVFwiLFwibGFiZWxcIjpcIlwiLFwibWV0YWRhdGFcIjp7XCJjb21tZW50c1wiOltcIkVkaXRlZDogT3JsaWMtTWlsYWNpYywgTWFyaWphLCAyMDE1LTEwLTE0XCIsXCJQQ0JQNCBiaW5kcyB0aGUgMyctVVRSIG9mIHRoZSBDREtOMUEgKHAyMSkgbVJOQSBhbmQgcmVkdWNlcyBpdHMgc3RhYmlsaXR5IChTY291bWFubmUgZXQgYWwuIDIwMTEpLlwiLFwiUmV2aWV3ZWQ6IFphY2NhcmEsIFNhcmEsIDIwMTYtMDItMDRcIixcIkF1dGhvcmVkOiBPcmxpYy1NaWxhY2ljLCBNYXJpamEsIDIwMTUtMTAtMTRcIixcIlJldmlld2VkOiBJbmdhLCBBbGJlcnRvLCAyMDE2LTAyLTA0XCJdLFwiZGF0YWJhc2VJZHNcIjp7XCJwdWJtZWRcIjpbXCIyMDgxNzY3N1wiXSxcInJlYWN0b21lXCI6W1wiUi1IU0EtNjgwMzQwM1wiXX0sXCJkYXRhc291cmNlXCI6XCJodHRwOi8vcGF0aHdheWNvbW1vbnMub3JnL3BjMi9yZWFjdG9tZVwiLFwiZGlzcGxheU5hbWVcIjpcIlBDQlA0IGJpbmRzIHRoZSBDREtOMUEgbVJOQVwiLFwic3RhbmRhcmROYW1lXCI6XCJcIixcInN5bm9ueW1zXCI6W10sXCJ0eXBlXCI6XCJCaW9jaGVtaWNhbFJlYWN0aW9uXCJ9LFwicGFyZW50XCI6XCJjeXRvc29sXCIsXCJzdGF0ZVZhcmlhYmxlc1wiOltdLFwidW5pdHNPZkluZm9ybWF0aW9uXCI6W119fSx7XCJkYXRhXCI6e1wiYmJveFwiOntcImhcIjoxNSxcIndcIjoxNSxcInhcIjo3LjUsXCJ5XCI6Ny41fSxcImNsYXNzXCI6XCJwcm9jZXNzXCIsXCJjbG9uZW1hcmtlclwiOmZhbHNlLFwiaWRcIjpcImh0dHA6Ly9pZGVudGlmaWVycy5vcmcvcmVhY3RvbWUvUi1IU0EtNjgwMzQxMV9MRUZUVE9SSUdIVFwiLFwibGFiZWxcIjpcIlwiLFwibWV0YWRhdGFcIjp7XCJjb21tZW50c1wiOltcIlJldmlld2VkOiBaYWNjYXJhLCBTYXJhLCAyMDE2LTAyLTA0XCIsXCJSZXZpZXdlZDogSW5nYSwgQWxiZXJ0bywgMjAxNi0wMi0wNFwiLFwiRWRpdGVkOiBPcmxpYy1NaWxhY2ljLCBNYXJpamEsIDIwMTUtMTAtMTRcIixcIkF1dGhvcmVkOiBPcmxpYy1NaWxhY2ljLCBNYXJpamEsIDIwMTUtMTAtMTRcIixcIlBDQlA0IGJpbmRpbmcgdG8gdGhlIDMnLVVUUiBvZiB0aGUgQ0RLTjFBIChwMjEpIG1STkEgcmVkdWNlcyBoYWxmLWxpZmUgb2YgdGhlIENES04xQSBtUk5BIGFuZCB0aGUgYW1vdW50IG9mIENES04xQSBwcm90ZWluLiBVcG9uIEROQSBkYW1hZ2UsIFRQNTMtbWVkaWF0ZWQgaW5kdWN0aW9uIG9mIENES04xQSBpcyByYXBpZCwgd2hpbGUgdGhlIGluZHVjdGlvbiBvZiBQQ0JQNCBpcyBtb3JlIGdyYWR1YWwuIEl0IGlzIGh5cG90aGVzaXplZCB0aGF0LCB1bmRlciBwcm9sb25nZWQgc3RyZXNzLCBQQ0JQNC1tZWRpYXRlZCBkb3duLXJlZ3VsYXRpb24gb2YgQ0RLTjFBIG1heSBzd2l0Y2ggZnJvbSBHMSBjZWxsIGN5Y2xlIGFycmVzdCB0byBHMiBhcnJlc3QsIHdoaWNoIG1heSBwcmVjZWRlIGFwb3B0b3NpcyAoU2NvdW1hbm5lIGV0IGFsLiAyMDExKS5cIl0sXCJkYXRhYmFzZUlkc1wiOntcInB1Ym1lZFwiOltcIjIwODE3Njc3XCJdLFwicmVhY3RvbWVcIjpbXCJSLUhTQS02ODAzNDExXCJdfSxcImRhdGFzb3VyY2VcIjpcImh0dHA6Ly9wYXRod2F5Y29tbW9ucy5vcmcvcGMyL3JlYWN0b21lXCIsXCJkaXNwbGF5TmFtZVwiOlwiUENCUDQgbW9kdWxhdGVzIENES04xQSB0cmFuc2xhdGlvblwiLFwic3RhbmRhcmROYW1lXCI6XCJcIixcInN5bm9ueW1zXCI6W10sXCJ0eXBlXCI6XCJCaW9jaGVtaWNhbFJlYWN0aW9uXCJ9LFwicGFyZW50XCI6XCJjeXRvc29sXCIsXCJzdGF0ZVZhcmlhYmxlc1wiOltdLFwidW5pdHNPZkluZm9ybWF0aW9uXCI6W119fSx7XCJkYXRhXCI6e1wiYmJveFwiOntcImhcIjozMCxcIndcIjo1MCxcInhcIjoyNSxcInlcIjoxNX0sXCJjbGFzc1wiOlwibnVjbGVpYyBhY2lkIGZlYXR1cmVcIixcImNsb25lbWFya2VyXCI6ZmFsc2UsXCJpZFwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvUm5hX2IwYzc5OTcxMGExOTJhYjFlZDY3OTRhNjMzMmUzYjBmXCIsXCJsYWJlbFwiOlwiQ0RLTjFBXCIsXCJtZXRhZGF0YVwiOntcImNvbW1lbnRzXCI6W1wiUkVQTEFDRUQgaHR0cDovL3d3dy5yZWFjdG9tZS5vcmcvYmlvcGF4LzY0LzQ4ODg3I1JuYTk1XCIsXCJSZWFjdG9tZSBEQl9JRDogNjgwMzM4NlwiXSxcImRhdGFiYXNlSWRzXCI6e1wiZW5zZW1ibFwiOltcIkVOU1QwMDAwMDI0NDc0MVwiXSxcImhnbmMuc3ltYm9sXCI6W1wiQ0RLTjFBXCJdLFwicmVhY3RvbWVcIjpbXCJSLUhTQS02ODAzMzg2XCJdLFwidW5pcHJvdFwiOltcIlAzODkzNlwiXX0sXCJkYXRhc291cmNlXCI6XCJodHRwOi8vcGF0aHdheWNvbW1vbnMub3JnL3BjMi9yZWFjdG9tZVwiLFwiZGlzcGxheU5hbWVcIjpcInAyMSBtUk5BXCIsXCJzdGFuZGFyZE5hbWVcIjpcIlwiLFwic3lub255bXNcIjpbXCJDREtOMUEgbVJOQVwiLFwiRU5TRU1CTDpFTlNUMDAwMDAyNDQ3NDEgQ0RLTjFBXCJdLFwidHlwZVwiOlwiUm5hXCJ9LFwicGFyZW50XCI6XCJjeXRvc29sXCIsXCJzdGF0ZVZhcmlhYmxlc1wiOltdLFwidW5pdHNPZkluZm9ybWF0aW9uXCI6W3tcImNsYXNzXCI6XCJ1bml0IG9mIGluZm9ybWF0aW9uXCIsXCJpZFwiOm51bGwsXCJsYWJlbFwiOntcInRleHRcIjpcIm10OlJOQVwifX1dfX0se1wiZGF0YVwiOntcImJib3hcIjp7XCJoXCI6MzQsXCJ3XCI6NTQsXCJ4XCI6MjUsXCJ5XCI6MTV9LFwiY2xhc3NcIjpcImNvbXBsZXhcIixcImNsb25lbWFya2VyXCI6ZmFsc2UsXCJpZFwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvQ29tcGxleF9lNWVhZGIyOWUxZmZhMWFmN2U0NzQzY2NhNTY4NDA0OVwiLFwibGFiZWxcIjpcIlBDQlA0OkNES04xQSBtUk5BXCIsXCJtZXRhZGF0YVwiOntcImNvbW1lbnRzXCI6W1wiUkVQTEFDRUQgaHR0cDovL3d3dy5yZWFjdG9tZS5vcmcvYmlvcGF4LzY0LzQ4ODg3I0NvbXBsZXg0NjMyXCIsXCJSZWFjdG9tZSBEQl9JRDogNjgwMzQwNVwiXSxcImRhdGFiYXNlSWRzXCI6e1wicmVhY3RvbWVcIjpbXCJSLUhTQS02ODAzNDA1XCJdfSxcImRhdGFzb3VyY2VcIjpcImh0dHA6Ly9wYXRod2F5Y29tbW9ucy5vcmcvcGMyL3JlYWN0b21lXCIsXCJkaXNwbGF5TmFtZVwiOlwiUENCUDQ6Q0RLTjFBIG1STkFcIixcInN0YW5kYXJkTmFtZVwiOlwiXCIsXCJzeW5vbnltc1wiOltdLFwidHlwZVwiOlwiQ29tcGxleFwifSxcInBhcmVudFwiOlwiY3l0b3NvbFwiLFwic3RhdGVWYXJpYWJsZXNcIjpbXSxcInVuaXRzT2ZJbmZvcm1hdGlvblwiOltdfX0se1wiZGF0YVwiOntcImJib3hcIjp7XCJoXCI6MzAsXCJ3XCI6NTAsXCJ4XCI6MjUsXCJ5XCI6MTV9LFwiY2xhc3NcIjpcIm51Y2xlaWMgYWNpZCBmZWF0dXJlXCIsXCJjbG9uZW1hcmtlclwiOmZhbHNlLFwiaWRcIjpcImh0dHA6Ly9wYXRod2F5Y29tbW9ucy5vcmcvcGMyL1JuYV9iMGM3OTk3MTBhMTkyYWIxZWQ2Nzk0YTYzMzJlM2IwZl81MTc4NTY3YTQ3ZWNjMzg2YzljZDRjODYzMzFkYTIxOFwiLFwibGFiZWxcIjpcIkNES04xQVwiLFwibWV0YWRhdGFcIjp7XCJjb21tZW50c1wiOltcIlJFUExBQ0VEIGh0dHA6Ly93d3cucmVhY3RvbWUub3JnL2Jpb3BheC82NC80ODg4NyNSbmE5NVwiLFwiUmVhY3RvbWUgREJfSUQ6IDY4MDMzODZcIl0sXCJkYXRhYmFzZUlkc1wiOntcImVuc2VtYmxcIjpbXCJFTlNUMDAwMDAyNDQ3NDFcIl0sXCJoZ25jLnN5bWJvbFwiOltcIkNES04xQVwiXSxcInJlYWN0b21lXCI6W1wiUi1IU0EtNjgwMzM4NlwiXSxcInVuaXByb3RcIjpbXCJQMzg5MzZcIl19LFwiZGF0YXNvdXJjZVwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvcmVhY3RvbWVcIixcImRpc3BsYXlOYW1lXCI6XCJwMjEgbVJOQVwiLFwic3RhbmRhcmROYW1lXCI6XCJcIixcInN5bm9ueW1zXCI6W1wiQ0RLTjFBIG1STkFcIixcIkVOU0VNQkw6RU5TVDAwMDAwMjQ0NzQxIENES04xQVwiXSxcInR5cGVcIjpcIlJuYVwifSxcInBhcmVudFwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvQ29tcGxleF9lNWVhZGIyOWUxZmZhMWFmN2U0NzQzY2NhNTY4NDA0OVwiLFwic3RhdGVWYXJpYWJsZXNcIjpbXSxcInVuaXRzT2ZJbmZvcm1hdGlvblwiOlt7XCJjbGFzc1wiOlwidW5pdCBvZiBpbmZvcm1hdGlvblwiLFwiaWRcIjpudWxsLFwibGFiZWxcIjp7XCJ0ZXh0XCI6XCJtdDpSTkFcIn19XX19LHtcImRhdGFcIjp7XCJiYm94XCI6e1wiaFwiOjMwLFwid1wiOjQ4LFwieFwiOjI0LFwieVwiOjE1fSxcImNsYXNzXCI6XCJtYWNyb21vbGVjdWxlXCIsXCJjbG9uZW1hcmtlclwiOmZhbHNlLFwiaWRcIjpcImh0dHA6Ly9wYXRod2F5Y29tbW9ucy5vcmcvcGMyL1Byb3RlaW5fYzFmNWMwNjVlNmJjNzIxMjdjYTU2ZWUwYmYwMDU0OTRfNTE3ODU2N2E0N2VjYzM4NmM5Y2Q0Yzg2MzMxZGEyMThcIixcImxhYmVsXCI6XCJQQ0JQNFwiLFwibWV0YWRhdGFcIjp7XCJjb21tZW50c1wiOltcIlJlYWN0b21lIERCX0lEOiA2ODAzMzgyXCIsXCJSRVBMQUNFRCBodHRwOi8vd3d3LnJlYWN0b21lLm9yZy9iaW9wYXgvNjQvNDg4ODcjUHJvdGVpbjEwNDU4XCJdLFwiZGF0YWJhc2VJZHNcIjp7XCJoZ25jLnN5bWJvbFwiOltcIlBDQlA0XCJdLFwicmVhY3RvbWVcIjpbXCJSLUhTQS02ODAzMzgyXCJdLFwidW5pcHJvdFwiOltcIlA1NzcyM1wiXX0sXCJkYXRhc291cmNlXCI6XCJodHRwOi8vcGF0aHdheWNvbW1vbnMub3JnL3BjMi9yZWFjdG9tZVwiLFwiZGlzcGxheU5hbWVcIjpcIlBDQlA0XCIsXCJzdGFuZGFyZE5hbWVcIjpcIlBvbHkockMpLWJpbmRpbmcgcHJvdGVpbiA0XCIsXCJzeW5vbnltc1wiOltcIkFscGhhLUNQNFwiLFwiUG9seShyQyktYmluZGluZyBwcm90ZWluIDRcIixcIk1DRzEwXCIsXCJQQ0JQNFwiXSxcInR5cGVcIjpcIlByb3RlaW5cIn0sXCJwYXJlbnRcIjpcImh0dHA6Ly9wYXRod2F5Y29tbW9ucy5vcmcvcGMyL0NvbXBsZXhfZTVlYWRiMjllMWZmYTFhZjdlNDc0M2NjYTU2ODQwNDlcIixcInN0YXRlVmFyaWFibGVzXCI6W3tcImNsYXNzXCI6XCJzdGF0ZSB2YXJpYWJsZVwiLFwiaWRcIjpudWxsLFwic3RhdGVcIjp7XCJ2YWx1ZVwiOlwieFsxIC0gNDAzXVwiLFwidmFyaWFibGVcIjpcIlwifX1dLFwidW5pdHNPZkluZm9ybWF0aW9uXCI6W119fSx7XCJkYXRhXCI6e1wiYmJveFwiOntcImhcIjozMCxcIndcIjo0OCxcInhcIjoyNCxcInlcIjoxNX0sXCJjbGFzc1wiOlwibWFjcm9tb2xlY3VsZVwiLFwiY2xvbmVtYXJrZXJcIjpmYWxzZSxcImlkXCI6XCJodHRwOi8vcGF0aHdheWNvbW1vbnMub3JnL3BjMi9Qcm90ZWluX2MxZjVjMDY1ZTZiYzcyMTI3Y2E1NmVlMGJmMDA1NDk0XCIsXCJsYWJlbFwiOlwiUENCUDRcIixcIm1ldGFkYXRhXCI6e1wiY29tbWVudHNcIjpbXCJSZWFjdG9tZSBEQl9JRDogNjgwMzM4MlwiLFwiUkVQTEFDRUQgaHR0cDovL3d3dy5yZWFjdG9tZS5vcmcvYmlvcGF4LzY0LzQ4ODg3I1Byb3RlaW4xMDQ1OFwiXSxcImRhdGFiYXNlSWRzXCI6e1wiaGduYy5zeW1ib2xcIjpbXCJQQ0JQNFwiXSxcInJlYWN0b21lXCI6W1wiUi1IU0EtNjgwMzM4MlwiXSxcInVuaXByb3RcIjpbXCJQNTc3MjNcIl19LFwiZGF0YXNvdXJjZVwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvcmVhY3RvbWVcIixcImRpc3BsYXlOYW1lXCI6XCJQQ0JQNFwiLFwic3RhbmRhcmROYW1lXCI6XCJQb2x5KHJDKS1iaW5kaW5nIHByb3RlaW4gNFwiLFwic3lub255bXNcIjpbXCJBbHBoYS1DUDRcIixcIlBvbHkockMpLWJpbmRpbmcgcHJvdGVpbiA0XCIsXCJNQ0cxMFwiLFwiUENCUDRcIl0sXCJ0eXBlXCI6XCJQcm90ZWluXCJ9LFwicGFyZW50XCI6XCJjeXRvc29sXCIsXCJzdGF0ZVZhcmlhYmxlc1wiOlt7XCJjbGFzc1wiOlwic3RhdGUgdmFyaWFibGVcIixcImlkXCI6bnVsbCxcInN0YXRlXCI6e1widmFsdWVcIjpcInhbMSAtIDQwM11cIixcInZhcmlhYmxlXCI6XCJcIn19XSxcInVuaXRzT2ZJbmZvcm1hdGlvblwiOltdfX0se1wiZGF0YVwiOntcImJib3hcIjp7XCJoXCI6MTUsXCJ3XCI6MTUsXCJ4XCI6Ny41LFwieVwiOjcuNX0sXCJjbGFzc1wiOlwicHJvY2Vzc1wiLFwiY2xvbmVtYXJrZXJcIjpmYWxzZSxcImlkXCI6XCJodHRwOi8vaWRlbnRpZmllcnMub3JnL3JlYWN0b21lL1ItSFNBLTY4MDM4MDFfTEVGVFRPUklHSFRcIixcImxhYmVsXCI6XCJcIixcIm1ldGFkYXRhXCI6e1wiY29tbWVudHNcIjpbXCJSZXZpZXdlZDogSW5nYSwgQWxiZXJ0bywgMjAxNi0wMi0wNFwiLFwiRWRpdGVkOiBPcmxpYy1NaWxhY2ljLCBNYXJpamEsIDIwMTUtMTAtMTRcIixcIlRQNTMgKHA1MykgYmluZHMgYXQgbGVhc3QgdHdvIHA1MyByZXNwb25zZSBlbGVtZW50cyBpbiB0aGUgcHJvbW90ZXIgb2YgdGhlIENES04xQSAocDIxLCBXQUYxKSBnZW5lIChFbC1EZWlyeSBldCBhbC4gMTk5MywgRXNwaW5vc2EgZXQgYWwuIDIwMDMpLiBGb3JtYXRpb24gb2YgdGhlIGNvbXBsZXggb2YgVFA1MyBhbmQgWk5GMzg1QSAoSFpGKSBmYWNpbGl0YXRlcyBiaW5kaW5nIG9mIFRQNTMgdG8gdGhlIENES04xQSBwcm9tb3RlciAoRGFzIGV0IGFsLiAyMDA3KS5cIixcIkF1dGhvcmVkOiBPcmxpYy1NaWxhY2ljLCBNLCAyMDEzLTA3LTE1XCIsXCJSZXZpZXdlZDogU2FtYXJhaml3YSwgU2hhbWl0aCwgMjAxMy0wOS0wM1wiLFwiUmV2aWV3ZWQ6IFphY2NhcmEsIFNhcmEsIDIwMTYtMDItMDRcIixcIkF1dGhvcmVkOiBPcmxpYy1NaWxhY2ljLCBNYXJpamEsIDIwMTUtMTAtMTRcIl0sXCJkYXRhYmFzZUlkc1wiOntcInB1Ym1lZFwiOltcIjE0NTgwMzUxXCIsXCI4MjQyNzUyXCIsXCIxNzcxOTU0MVwiXSxcInJlYWN0b21lXCI6W1wiUi1IU0EtNjgwMzgwMVwiXX0sXCJkYXRhc291cmNlXCI6XCJodHRwOi8vcGF0aHdheWNvbW1vbnMub3JnL3BjMi9yZWFjdG9tZVwiLFwiZGlzcGxheU5hbWVcIjpcIlRQNTMgaW4gY29tcGxleCB3aXRoIFpORjM4NUEgYmluZHMgdGhlIENES04xQSBwcm9tb3RlclwiLFwic3RhbmRhcmROYW1lXCI6XCJcIixcInN5bm9ueW1zXCI6W10sXCJ0eXBlXCI6XCJCaW9jaGVtaWNhbFJlYWN0aW9uXCJ9LFwicGFyZW50XCI6XCJudWNsZW9wbGFzbVwiLFwic3RhdGVWYXJpYWJsZXNcIjpbXSxcInVuaXRzT2ZJbmZvcm1hdGlvblwiOltdfX0se1wiZGF0YVwiOntcImJib3hcIjp7XCJoXCI6MTUsXCJ3XCI6MTUsXCJ4XCI6Ny41LFwieVwiOjcuNX0sXCJjbGFzc1wiOlwicHJvY2Vzc1wiLFwiY2xvbmVtYXJrZXJcIjpmYWxzZSxcImlkXCI6XCJodHRwOi8vaWRlbnRpZmllcnMub3JnL3JlYWN0b21lL1ItSFNBLTY4MDMzODhfTEVGVFRPUklHSFRcIixcImxhYmVsXCI6XCJcIixcIm1ldGFkYXRhXCI6e1wiY29tbWVudHNcIjpbXCJBdXRob3JlZDogT3JsaWMtTWlsYWNpYywgTWFyaWphLCAyMDE1LTEwLTE0XCIsXCJFZGl0ZWQ6IE9ybGljLU1pbGFjaWMsIE1hcmlqYSwgMjAxNS0xMC0xNFwiLFwiUmV2aWV3ZWQ6IEluZ2EsIEFsYmVydG8sIDIwMTYtMDItMDRcIixcIlJldmlld2VkOiBDb3F1ZXJldCwgTywgMjAwNi0xMC0wNiAwODo1OTowNlwiLFwiQmluZGluZyBvZiBUUDUzIChwNTMpIHRvIGl0cyByZXNwb25zZSBlbGVtZW50cyBpbiB0aGUgcHJvbW90ZXIgb2YgdGhlIENES04xQSAocDIxKSBnZW5lIHN0aW11bGF0ZXMgQ0RLTjFBIHRyYW5zY3JpcHRpb24gKEVsLURlaXJ5IGV0IGFsLiAxOTkzKS4gQmluZGluZyBvZiBaTkYzODVBIChIWkYpIHRvIHRoZSBETkEgYmluZGluZyBkb21haW4gb2YgVFA1MyBmYWNpbGl0YXRlcyBDREtOMUEgaW5kdWN0aW9uIGFuZCB0aGUgY29uc2VxdWVudCBjZWxsIGN5Y2xlIGFycmVzdCAoRGFzIGV0IGFsLiAyMDA3KS5cIixcIlJldmlld2VkOiBaYWNjYXJhLCBTYXJhLCAyMDE2LTAyLTA0XCIsXCJBdXRob3JlZDogTWF0dGhld3MsIEwsIDIwMDYtMDktMjkgMTM6NTQ6MjZcIl0sXCJkYXRhYmFzZUlkc1wiOntcInB1Ym1lZFwiOltcIjE3NzE5NTQxXCIsXCI4MjQyNzUyXCJdLFwicmVhY3RvbWVcIjpbXCJSLUhTQS02ODAzMzg4XCJdfSxcImRhdGFzb3VyY2VcIjpcImh0dHA6Ly9wYXRod2F5Y29tbW9ucy5vcmcvcGMyL3JlYWN0b21lXCIsXCJkaXNwbGF5TmFtZVwiOlwiVFA1MyBzdGltdWxhdGVzIENES04xQSAocDIxKSB0cmFuc2NyaXB0aW9uXCIsXCJzdGFuZGFyZE5hbWVcIjpcIlwiLFwic3lub255bXNcIjpbXSxcInR5cGVcIjpcIkJpb2NoZW1pY2FsUmVhY3Rpb25cIn0sXCJwYXJlbnRcIjpcIm51Y2xlb3BsYXNtXCIsXCJzdGF0ZVZhcmlhYmxlc1wiOltdLFwidW5pdHNPZkluZm9ybWF0aW9uXCI6W119fSx7XCJkYXRhXCI6e1wiYmJveFwiOntcImhcIjoxNSxcIndcIjoxNSxcInhcIjo3LjUsXCJ5XCI6Ny41fSxcImNsYXNzXCI6XCJwcm9jZXNzXCIsXCJjbG9uZW1hcmtlclwiOmZhbHNlLFwiaWRcIjpcImh0dHA6Ly9pZGVudGlmaWVycy5vcmcvcmVhY3RvbWUvUi1IU0EtNjgwMzcxOV9MRUZUVE9SSUdIVFwiLFwibGFiZWxcIjpcIlwiLFwibWV0YWRhdGFcIjp7XCJjb21tZW50c1wiOltcIlJldmlld2VkOiBJbmdhLCBBbGJlcnRvLCAyMDE2LTAyLTA0XCIsXCJSZXZpZXdlZDogWmFjY2FyYSwgU2FyYSwgMjAxNi0wMi0wNFwiLFwiWk5GMzg1QSAoSFpGKSBmb3JtcyBhIGNvbXBsZXggd2l0aCBUUDUzIChwNTMpLCBpbnRlcmFjdGluZyB3aXRoIHRoZSBETkEgYmluZGluZyBkb21haW4gb2YgVFA1My4gVGhlIGNvbXBsZXggb2YgVFA1MyBhbmQgWk5GMzg1QSBhc3NvY2lhdGVzIHdpdGggcDUzIHJlc3BvbnNlIGVsZW1lbnRzIG9mIGNlbGwgY3ljbGUgYXJyZXN0IGdlbmVzLCBzdWNoIGFzIENES04xQSAocDIxKSBhbmQgc3RpbXVsYXRlcyB0aGVpciB0cmFuc2NyaXB0aW9uLiBVbmRlciBwcm9sb25nZWQgc3RyZXNzLCBaTkYzODVBIHVuZGVyZ29lcyB1YmlxdWl0aW5hdGlvbiBhbmQgcHJvdGVhc29tZS1tZWRpYXRlZCBkZWdyYWRhdGlvbiwgd2hpY2ggY29pbmNpZGVzIHdpdGggZXhwcmVzc2lvbiBvZiBUUDUzLXJlZ3VsYXRlZCBwcm8tYXBvcHRvdGljIGdlbmVzIChEYXMgZXQgYWwuIDIwMDcpLlwiLFwiQXV0aG9yZWQ6IE9ybGljLU1pbGFjaWMsIE1hcmlqYSwgMjAxNS0xMC0xNFwiLFwiRWRpdGVkOiBPcmxpYy1NaWxhY2ljLCBNYXJpamEsIDIwMTUtMTAtMTRcIl0sXCJkYXRhYmFzZUlkc1wiOntcInB1Ym1lZFwiOltcIjE3NzE5NTQxXCJdLFwicmVhY3RvbWVcIjpbXCJSLUhTQS02ODAzNzE5XCJdfSxcImRhdGFzb3VyY2VcIjpcImh0dHA6Ly9wYXRod2F5Y29tbW9ucy5vcmcvcGMyL3JlYWN0b21lXCIsXCJkaXNwbGF5TmFtZVwiOlwiVFA1MyBiaW5kcyBaTkYzODVBXCIsXCJzdGFuZGFyZE5hbWVcIjpcIlwiLFwic3lub255bXNcIjpbXSxcInR5cGVcIjpcIkJpb2NoZW1pY2FsUmVhY3Rpb25cIn0sXCJwYXJlbnRcIjpcIm51Y2xlb3BsYXNtXCIsXCJzdGF0ZVZhcmlhYmxlc1wiOltdLFwidW5pdHNPZkluZm9ybWF0aW9uXCI6W119fSx7XCJkYXRhXCI6e1wiYmJveFwiOntcImhcIjoyNSxcIndcIjo0OCxcInhcIjoyNCxcInlcIjoxMi41fSxcImNsYXNzXCI6XCJtYWNyb21vbGVjdWxlXCIsXCJjbG9uZW1hcmtlclwiOmZhbHNlLFwiaWRcIjpcImh0dHA6Ly9wYXRod2F5Y29tbW9ucy5vcmcvcGMyL1Byb3RlaW5fNzQ4MTZmZmM4YWY4ZTFkNDNiMTZiMTIyNmE1YzBkYjJcIixcImxhYmVsXCI6XCJaTkYzODVBXCIsXCJtZXRhZGF0YVwiOntcImNvbW1lbnRzXCI6W1wiUmVhY3RvbWUgREJfSUQ6IDY4MDM0MjFcIixcIlJFUExBQ0VEIGh0dHA6Ly93d3cucmVhY3RvbWUub3JnL2Jpb3BheC82NC80ODg4NyNQcm90ZWluMTA0NTdcIl0sXCJkYXRhYmFzZUlkc1wiOntcImhnbmMuc3ltYm9sXCI6W1wiWk5GMzg1QVwiXSxcInJlYWN0b21lXCI6W1wiUi1IU0EtNjgwMzQyMVwiXSxcInVuaXByb3RcIjpbXCJROTZQTTlcIl19LFwiZGF0YXNvdXJjZVwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvcmVhY3RvbWVcIixcImRpc3BsYXlOYW1lXCI6XCJIWkZcIixcInN0YW5kYXJkTmFtZVwiOlwiWmluYyBmaW5nZXIgcHJvdGVpbiAzODVBXCIsXCJzeW5vbnltc1wiOltcIlppbmMgZmluZ2VyIHByb3RlaW4gMzg1QVwiLFwiWk5GMzg1QVwiLFwiWk5GMzg1XCIsXCJSZXRpbmFsIHppbmMgZmluZ2VyIHByb3RlaW5cIixcIkhlbWF0b3BvaWV0aWMgemluYyBmaW5nZXIgcHJvdGVpblwiLFwiUlpGXCIsXCJIWkZcIl0sXCJ0eXBlXCI6XCJQcm90ZWluXCJ9LFwicGFyZW50XCI6XCJudWNsZW9wbGFzbVwiLFwic3RhdGVWYXJpYWJsZXNcIjpbXSxcInVuaXRzT2ZJbmZvcm1hdGlvblwiOltdfX0se1wiZGF0YVwiOntcImJib3hcIjp7XCJoXCI6MzQsXCJ3XCI6ODksXCJ4XCI6NDIuNSxcInlcIjoxNX0sXCJjbGFzc1wiOlwiY29tcGxleFwiLFwiY2xvbmVtYXJrZXJcIjpmYWxzZSxcImlkXCI6XCJodHRwOi8vcGF0aHdheWNvbW1vbnMub3JnL3BjMi9Db21wbGV4X2U0YzU1NDc3MzE0YjNkNGJmZDRiOGY0N2NlZmYzZTE0XCIsXCJsYWJlbFwiOlwicC1TMTUsUzIwLVRQNTMgVGV0cmFtZXJcIixcIm1ldGFkYXRhXCI6e1wiY29tbWVudHNcIjpbXCJSRVBMQUNFRCBodHRwOi8vd3d3LnJlYWN0b21lLm9yZy9iaW9wYXgvNjQvNDg4ODcjQ29tcGxleDQ2MjVcIixcIlJlYWN0b21lIERCX0lEOiAzMjIyMTcxXCJdLFwiZGF0YWJhc2VJZHNcIjp7XCJyZWFjdG9tZVwiOltcIlItSFNBLTMyMjIxNzFcIl19LFwiZGF0YXNvdXJjZVwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvcmVhY3RvbWVcIixcImRpc3BsYXlOYW1lXCI6XCJwLVMxNSxTMjAtVFA1MyBUZXRyYW1lclwiLFwic3RhbmRhcmROYW1lXCI6XCJcIixcInN5bm9ueW1zXCI6W10sXCJ0eXBlXCI6XCJDb21wbGV4XCJ9LFwicGFyZW50XCI6XCJudWNsZW9wbGFzbVwiLFwic3RhdGVWYXJpYWJsZXNcIjpbXSxcInVuaXRzT2ZJbmZvcm1hdGlvblwiOltdfX0se1wiZGF0YVwiOntcImJib3hcIjp7XCJoXCI6MzAsXCJ3XCI6ODUsXCJ4XCI6NDIuNSxcInlcIjoxNX0sXCJjbGFzc1wiOlwibWFjcm9tb2xlY3VsZVwiLFwiY2xvbmVtYXJrZXJcIjpmYWxzZSxcImlkXCI6XCJodHRwOi8vcGF0aHdheWNvbW1vbnMub3JnL3BjMi9Qcm90ZWluXzFiZGEyZDgwZDdmMjZlNzlmMWVjNDZiNjllYTYyODE0XzExOGZlYWE2NzA2MjlmOWUyMzkzYjE4MWNlODdlZWMyXCIsXCJsYWJlbFwiOlwiVFA1M1wiLFwibWV0YWRhdGFcIjp7XCJjb21tZW50c1wiOltcIlJFUExBQ0VEIGh0dHA6Ly93d3cucmVhY3RvbWUub3JnL2Jpb3BheC82NC80ODg4NyNQcm90ZWluMTA0NDlcIixcIlJlYWN0b21lIERCX0lEOiA2OTY4M1wiXSxcImRhdGFiYXNlSWRzXCI6e1wiaGduYy5zeW1ib2xcIjpbXCJUUDUzXCJdLFwicmVhY3RvbWVcIjpbXCJSLUhTQS02OTY4M1wiXSxcInVuaXByb3RcIjpbXCJQMDQ2MzdcIl19LFwiZGF0YXNvdXJjZVwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvcmVhY3RvbWVcIixcImRpc3BsYXlOYW1lXCI6XCJwLVMxNSxTMjAtVFA1M1wiLFwic3RhbmRhcmROYW1lXCI6XCJDZWxsdWxhciB0dW1vciBhbnRpZ2VuIHA1M1wiLFwic3lub255bXNcIjpbXCJUdW1vciBzdXBwcmVzc29yIHA1M1wiLFwiVFA1M1wiLFwiQW50aWdlbiBOWS1DTy0xM1wiLFwiUGhvc3Bob3Byb3RlaW4gcDUzXCIsXCJQNTNcIl0sXCJ0eXBlXCI6XCJQcm90ZWluXCJ9LFwicGFyZW50XCI6XCJodHRwOi8vcGF0aHdheWNvbW1vbnMub3JnL3BjMi9Db21wbGV4X2U0YzU1NDc3MzE0YjNkNGJmZDRiOGY0N2NlZmYzZTE0XCIsXCJzdGF0ZVZhcmlhYmxlc1wiOlt7XCJjbGFzc1wiOlwic3RhdGUgdmFyaWFibGVcIixcImlkXCI6bnVsbCxcInN0YXRlXCI6e1widmFsdWVcIjpcIm9wc2VyLTUxXCIsXCJ2YXJpYWJsZVwiOlwiMjBcIn19LHtcImNsYXNzXCI6XCJzdGF0ZSB2YXJpYWJsZVwiLFwiaWRcIjpudWxsLFwic3RhdGVcIjp7XCJ2YWx1ZVwiOlwib3BzZXItNTFcIixcInZhcmlhYmxlXCI6XCIxNVwifX0se1wiY2xhc3NcIjpcInN0YXRlIHZhcmlhYmxlXCIsXCJpZFwiOm51bGwsXCJzdGF0ZVwiOntcInZhbHVlXCI6XCJ4WzEgLSAzOTNdXCIsXCJ2YXJpYWJsZVwiOlwiXCJ9fV0sXCJ1bml0c09mSW5mb3JtYXRpb25cIjpbXX19LHtcImRhdGFcIjp7XCJiYm94XCI6e1wiaFwiOjMwLFwid1wiOjUwLFwieFwiOjI1LFwieVwiOjE1fSxcImNsYXNzXCI6XCJudWNsZWljIGFjaWQgZmVhdHVyZVwiLFwiY2xvbmVtYXJrZXJcIjpmYWxzZSxcImlkXCI6XCJodHRwOi8vcGF0aHdheWNvbW1vbnMub3JnL3BjMi9EbmFfOTFiMGJiNDlmZWZlMzY3M2JhMjNkNDZkZGFjZWZjNTZcIixcImxhYmVsXCI6XCJDREtOMUFcIixcIm1ldGFkYXRhXCI6e1wiY29tbWVudHNcIjpbXCJSZWFjdG9tZSBEQl9JRDogMzc4NjI1NlwiLFwiUkVQTEFDRUQgaHR0cDovL3d3dy5yZWFjdG9tZS5vcmcvYmlvcGF4LzY0LzQ4ODg3I0RuYTUwXCJdLFwiZGF0YWJhc2VJZHNcIjp7XCJlbnNlbWJsXCI6W1wiRU5TRzAwMDAwMTI0NzYyXCJdLFwiaGduYy5zeW1ib2xcIjpbXCJDREtOMUFcIl0sXCJyZWFjdG9tZVwiOltcIlItSFNBLTM3ODYyNTZcIl0sXCJ1bmlwcm90XCI6W1wiUDM4OTM2XCJdfSxcImRhdGFzb3VyY2VcIjpcImh0dHA6Ly9wYXRod2F5Y29tbW9ucy5vcmcvcGMyL3JlYWN0b21lXCIsXCJkaXNwbGF5TmFtZVwiOlwicDIxIGdlbmVcIixcInN0YW5kYXJkTmFtZVwiOlwiXCIsXCJzeW5vbnltc1wiOltcIldBRjEgZ2VuZVwiLFwiQ0lQMSBnZW5lXCIsXCJDREtOMUEgZ2VuZVwiLFwiUElDMVwiLFwiQ0FQMjBcIixcIkNES04xQVwiLFwiV0FGMVwiLFwiTURBNlwiLFwiQ0RLTjFcIixcIlNESTFcIixcIkVOU0VNQkw6RU5TRzAwMDAwMTI0NzYyIENES04xQVwiXSxcInR5cGVcIjpcIkRuYVwifSxcInBhcmVudFwiOlwibnVjbGVvcGxhc21cIixcInN0YXRlVmFyaWFibGVzXCI6W10sXCJ1bml0c09mSW5mb3JtYXRpb25cIjpbe1wiY2xhc3NcIjpcInVuaXQgb2YgaW5mb3JtYXRpb25cIixcImlkXCI6bnVsbCxcImxhYmVsXCI6e1widGV4dFwiOlwibXQ6RE5BXCJ9fV19fSx7XCJkYXRhXCI6e1wiYmJveFwiOntcImhcIjozMCxcIndcIjo0OCxcInhcIjoyNCxcInlcIjoxNX0sXCJjbGFzc1wiOlwibWFjcm9tb2xlY3VsZVwiLFwiY2xvbmVtYXJrZXJcIjpmYWxzZSxcImlkXCI6XCJodHRwOi8vcGF0aHdheWNvbW1vbnMub3JnL3BjMi9Qcm90ZWluXzlkNjU2YjNlNDFiMGM2OWZmNDVhMzA1ZjA1OGIzY2VmXCIsXCJsYWJlbFwiOlwiQ0RLTjFBXCIsXCJtZXRhZGF0YVwiOntcImNvbW1lbnRzXCI6W1wiUmVhY3RvbWUgREJfSUQ6IDE4MjU4NVwiLFwiUkVQTEFDRUQgaHR0cDovL3d3dy5yZWFjdG9tZS5vcmcvYmlvcGF4LzY0LzQ4ODg3I1Byb3RlaW4xMzkzXCJdLFwiZGF0YWJhc2VJZHNcIjp7XCJoZ25jLnN5bWJvbFwiOltcIkNES04xQVwiXSxcInJlYWN0b21lXCI6W1wiUi1IU0EtMTgyNTg1XCJdLFwidW5pcHJvdFwiOltcIlAzODkzNlwiXX0sXCJkYXRhc291cmNlXCI6XCJodHRwOi8vcGF0aHdheWNvbW1vbnMub3JnL3BjMi9yZWFjdG9tZVwiLFwiZGlzcGxheU5hbWVcIjpcInAyMVwiLFwic3RhbmRhcmROYW1lXCI6XCJDeWNsaW4tZGVwZW5kZW50IGtpbmFzZSBpbmhpYml0b3IgMVwiLFwic3lub255bXNcIjpbXCJDREtOMUFcIixcIkNBUDIwXCIsXCJXQUYxXCIsXCJDREtOMVwiLFwiUElDMVwiLFwicDIxXCIsXCJNREEtNlwiLFwiTURBNlwiLFwiTWVsYW5vbWEgZGlmZmVyZW50aWF0aW9uLWFzc29jaWF0ZWQgcHJvdGVpbiA2XCIsXCJTREkxXCIsXCJDREstaW50ZXJhY3RpbmcgcHJvdGVpbiAxXCIsXCJDSVAxXCJdLFwidHlwZVwiOlwiUHJvdGVpblwifSxcInBhcmVudFwiOlwibnVjbGVvcGxhc21cIixcInN0YXRlVmFyaWFibGVzXCI6W3tcImNsYXNzXCI6XCJzdGF0ZSB2YXJpYWJsZVwiLFwiaWRcIjpudWxsLFwic3RhdGVcIjp7XCJ2YWx1ZVwiOlwieFsyIC0gMTY0XVwiLFwidmFyaWFibGVcIjpcIlwifX1dLFwidW5pdHNPZkluZm9ybWF0aW9uXCI6W119fSx7XCJkYXRhXCI6e1wiYmJveFwiOntcImhcIjozNCxcIndcIjo4OSxcInhcIjo0Mi41LFwieVwiOjE1fSxcImNsYXNzXCI6XCJjb21wbGV4XCIsXCJjbG9uZW1hcmtlclwiOmZhbHNlLFwiaWRcIjpcImh0dHA6Ly9wYXRod2F5Y29tbW9ucy5vcmcvcGMyL0NvbXBsZXhfM2I5YmRlMjFlOGYxMzA4NzBiOTFmNzNhYzMxZGNhYmFcIixcImxhYmVsXCI6XCJwLVMxNSxTMjAtVFA1MyBUZXRyYW1lcjpaTkYzODVBXCIsXCJtZXRhZGF0YVwiOntcImNvbW1lbnRzXCI6W1wiUkVQTEFDRUQgaHR0cDovL3d3dy5yZWFjdG9tZS5vcmcvYmlvcGF4LzY0LzQ4ODg3I0NvbXBsZXg0NjMwXCIsXCJSZWFjdG9tZSBEQl9JRDogNjgwMzcxOFwiXSxcImRhdGFiYXNlSWRzXCI6e1wicmVhY3RvbWVcIjpbXCJSLUhTQS02ODAzNzE4XCJdfSxcImRhdGFzb3VyY2VcIjpcImh0dHA6Ly9wYXRod2F5Y29tbW9ucy5vcmcvcGMyL3JlYWN0b21lXCIsXCJkaXNwbGF5TmFtZVwiOlwicC1TMTUsUzIwLVRQNTMgVGV0cmFtZXI6Wk5GMzg1QVwiLFwic3RhbmRhcmROYW1lXCI6XCJcIixcInN5bm9ueW1zXCI6W10sXCJ0eXBlXCI6XCJDb21wbGV4XCJ9LFwicGFyZW50XCI6XCJudWNsZW9wbGFzbVwiLFwic3RhdGVWYXJpYWJsZXNcIjpbXSxcInVuaXRzT2ZJbmZvcm1hdGlvblwiOltdfX0se1wiZGF0YVwiOntcImJib3hcIjp7XCJoXCI6MzAsXCJ3XCI6ODUsXCJ4XCI6NDIuNSxcInlcIjoxNX0sXCJjbGFzc1wiOlwibWFjcm9tb2xlY3VsZVwiLFwiY2xvbmVtYXJrZXJcIjpmYWxzZSxcImlkXCI6XCJodHRwOi8vcGF0aHdheWNvbW1vbnMub3JnL3BjMi9Qcm90ZWluXzFiZGEyZDgwZDdmMjZlNzlmMWVjNDZiNjllYTYyODE0XzhmM2NlOWE1OTRhYzI0OWE2MjJhNDhiMGY1M2YwYjI5XCIsXCJsYWJlbFwiOlwiVFA1M1wiLFwibWV0YWRhdGFcIjp7XCJjb21tZW50c1wiOltcIlJFUExBQ0VEIGh0dHA6Ly93d3cucmVhY3RvbWUub3JnL2Jpb3BheC82NC80ODg4NyNQcm90ZWluMTA0NDlcIixcIlJlYWN0b21lIERCX0lEOiA2OTY4M1wiXSxcImRhdGFiYXNlSWRzXCI6e1wiaGduYy5zeW1ib2xcIjpbXCJUUDUzXCJdLFwicmVhY3RvbWVcIjpbXCJSLUhTQS02OTY4M1wiXSxcInVuaXByb3RcIjpbXCJQMDQ2MzdcIl19LFwiZGF0YXNvdXJjZVwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvcmVhY3RvbWVcIixcImRpc3BsYXlOYW1lXCI6XCJwLVMxNSxTMjAtVFA1M1wiLFwic3RhbmRhcmROYW1lXCI6XCJDZWxsdWxhciB0dW1vciBhbnRpZ2VuIHA1M1wiLFwic3lub255bXNcIjpbXCJUdW1vciBzdXBwcmVzc29yIHA1M1wiLFwiVFA1M1wiLFwiQW50aWdlbiBOWS1DTy0xM1wiLFwiUGhvc3Bob3Byb3RlaW4gcDUzXCIsXCJQNTNcIl0sXCJ0eXBlXCI6XCJQcm90ZWluXCJ9LFwicGFyZW50XCI6XCJodHRwOi8vcGF0aHdheWNvbW1vbnMub3JnL3BjMi9Db21wbGV4XzNiOWJkZTIxZThmMTMwODcwYjkxZjczYWMzMWRjYWJhXCIsXCJzdGF0ZVZhcmlhYmxlc1wiOlt7XCJjbGFzc1wiOlwic3RhdGUgdmFyaWFibGVcIixcImlkXCI6bnVsbCxcInN0YXRlXCI6e1widmFsdWVcIjpcIm9wc2VyLTUxXCIsXCJ2YXJpYWJsZVwiOlwiMjBcIn19LHtcImNsYXNzXCI6XCJzdGF0ZSB2YXJpYWJsZVwiLFwiaWRcIjpudWxsLFwic3RhdGVcIjp7XCJ2YWx1ZVwiOlwib3BzZXItNTFcIixcInZhcmlhYmxlXCI6XCIxNVwifX0se1wiY2xhc3NcIjpcInN0YXRlIHZhcmlhYmxlXCIsXCJpZFwiOm51bGwsXCJzdGF0ZVwiOntcInZhbHVlXCI6XCJ4WzEgLSAzOTNdXCIsXCJ2YXJpYWJsZVwiOlwiXCJ9fV0sXCJ1bml0c09mSW5mb3JtYXRpb25cIjpbXX19LHtcImRhdGFcIjp7XCJiYm94XCI6e1wiaFwiOjI1LFwid1wiOjQ4LFwieFwiOjI0LFwieVwiOjEyLjV9LFwiY2xhc3NcIjpcIm1hY3JvbW9sZWN1bGVcIixcImNsb25lbWFya2VyXCI6ZmFsc2UsXCJpZFwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvUHJvdGVpbl83NDgxNmZmYzhhZjhlMWQ0M2IxNmIxMjI2YTVjMGRiMl84ZjNjZTlhNTk0YWMyNDlhNjIyYTQ4YjBmNTNmMGIyOVwiLFwibGFiZWxcIjpcIlpORjM4NUFcIixcIm1ldGFkYXRhXCI6e1wiY29tbWVudHNcIjpbXCJSZWFjdG9tZSBEQl9JRDogNjgwMzQyMVwiLFwiUkVQTEFDRUQgaHR0cDovL3d3dy5yZWFjdG9tZS5vcmcvYmlvcGF4LzY0LzQ4ODg3I1Byb3RlaW4xMDQ1N1wiXSxcImRhdGFiYXNlSWRzXCI6e1wiaGduYy5zeW1ib2xcIjpbXCJaTkYzODVBXCJdLFwicmVhY3RvbWVcIjpbXCJSLUhTQS02ODAzNDIxXCJdLFwidW5pcHJvdFwiOltcIlE5NlBNOVwiXX0sXCJkYXRhc291cmNlXCI6XCJodHRwOi8vcGF0aHdheWNvbW1vbnMub3JnL3BjMi9yZWFjdG9tZVwiLFwiZGlzcGxheU5hbWVcIjpcIkhaRlwiLFwic3RhbmRhcmROYW1lXCI6XCJaaW5jIGZpbmdlciBwcm90ZWluIDM4NUFcIixcInN5bm9ueW1zXCI6W1wiWmluYyBmaW5nZXIgcHJvdGVpbiAzODVBXCIsXCJaTkYzODVBXCIsXCJaTkYzODVcIixcIlJldGluYWwgemluYyBmaW5nZXIgcHJvdGVpblwiLFwiSGVtYXRvcG9pZXRpYyB6aW5jIGZpbmdlciBwcm90ZWluXCIsXCJSWkZcIixcIkhaRlwiXSxcInR5cGVcIjpcIlByb3RlaW5cIn0sXCJwYXJlbnRcIjpcImh0dHA6Ly9wYXRod2F5Y29tbW9ucy5vcmcvcGMyL0NvbXBsZXhfM2I5YmRlMjFlOGYxMzA4NzBiOTFmNzNhYzMxZGNhYmFcIixcInN0YXRlVmFyaWFibGVzXCI6W10sXCJ1bml0c09mSW5mb3JtYXRpb25cIjpbXX19LHtcImRhdGFcIjp7XCJiYm94XCI6e1wiaFwiOjM0LFwid1wiOjg5LFwieFwiOjQyLjUsXCJ5XCI6MTV9LFwiY2xhc3NcIjpcImNvbXBsZXhcIixcImNsb25lbWFya2VyXCI6ZmFsc2UsXCJpZFwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvQ29tcGxleF8yOTNkNjI3ZDhmOWYyMmI5ZTcyZWJjZDg2OTA5ZDMzNFwiLFwibGFiZWxcIjpcInAtUzE1LFMyMC1UUDUzIFRldHJhbWVyOlpORjM4NUE6Q0RLTjFBIEdlbmVcIixcIm1ldGFkYXRhXCI6e1wiY29tbWVudHNcIjpbXCJSRVBMQUNFRCBodHRwOi8vd3d3LnJlYWN0b21lLm9yZy9iaW9wYXgvNjQvNDg4ODcjQ29tcGxleDQ2MzFcIixcIlJlYWN0b21lIERCX0lEOiA2ODAzODAyXCJdLFwiZGF0YWJhc2VJZHNcIjp7XCJyZWFjdG9tZVwiOltcIlItSFNBLTY4MDM4MDJcIl19LFwiZGF0YXNvdXJjZVwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvcmVhY3RvbWVcIixcImRpc3BsYXlOYW1lXCI6XCJwLVMxNSxTMjAtVFA1MyBUZXRyYW1lcjpaTkYzODVBOkNES04xQSBHZW5lXCIsXCJzdGFuZGFyZE5hbWVcIjpcIlwiLFwic3lub255bXNcIjpbXSxcInR5cGVcIjpcIkNvbXBsZXhcIn0sXCJwYXJlbnRcIjpcIm51Y2xlb3BsYXNtXCIsXCJzdGF0ZVZhcmlhYmxlc1wiOltdLFwidW5pdHNPZkluZm9ybWF0aW9uXCI6W119fSx7XCJkYXRhXCI6e1wiYmJveFwiOntcImhcIjozMCxcIndcIjo4NSxcInhcIjo0Mi41LFwieVwiOjE1fSxcImNsYXNzXCI6XCJtYWNyb21vbGVjdWxlXCIsXCJjbG9uZW1hcmtlclwiOmZhbHNlLFwiaWRcIjpcImh0dHA6Ly9wYXRod2F5Y29tbW9ucy5vcmcvcGMyL1Byb3RlaW5fMWJkYTJkODBkN2YyNmU3OWYxZWM0NmI2OWVhNjI4MTRfZTA4NGRiNDIxODk5NWM2NzEzMjY1ZmVjN2RlNjM5OGNcIixcImxhYmVsXCI6XCJUUDUzXCIsXCJtZXRhZGF0YVwiOntcImNvbW1lbnRzXCI6W1wiUkVQTEFDRUQgaHR0cDovL3d3dy5yZWFjdG9tZS5vcmcvYmlvcGF4LzY0LzQ4ODg3I1Byb3RlaW4xMDQ0OVwiLFwiUmVhY3RvbWUgREJfSUQ6IDY5NjgzXCJdLFwiZGF0YWJhc2VJZHNcIjp7XCJoZ25jLnN5bWJvbFwiOltcIlRQNTNcIl0sXCJyZWFjdG9tZVwiOltcIlItSFNBLTY5NjgzXCJdLFwidW5pcHJvdFwiOltcIlAwNDYzN1wiXX0sXCJkYXRhc291cmNlXCI6XCJodHRwOi8vcGF0aHdheWNvbW1vbnMub3JnL3BjMi9yZWFjdG9tZVwiLFwiZGlzcGxheU5hbWVcIjpcInAtUzE1LFMyMC1UUDUzXCIsXCJzdGFuZGFyZE5hbWVcIjpcIkNlbGx1bGFyIHR1bW9yIGFudGlnZW4gcDUzXCIsXCJzeW5vbnltc1wiOltcIlR1bW9yIHN1cHByZXNzb3IgcDUzXCIsXCJUUDUzXCIsXCJBbnRpZ2VuIE5ZLUNPLTEzXCIsXCJQaG9zcGhvcHJvdGVpbiBwNTNcIixcIlA1M1wiXSxcInR5cGVcIjpcIlByb3RlaW5cIn0sXCJwYXJlbnRcIjpcImh0dHA6Ly9wYXRod2F5Y29tbW9ucy5vcmcvcGMyL0NvbXBsZXhfMjkzZDYyN2Q4ZjlmMjJiOWU3MmViY2Q4NjkwOWQzMzRcIixcInN0YXRlVmFyaWFibGVzXCI6W3tcImNsYXNzXCI6XCJzdGF0ZSB2YXJpYWJsZVwiLFwiaWRcIjpudWxsLFwic3RhdGVcIjp7XCJ2YWx1ZVwiOlwib3BzZXItNTFcIixcInZhcmlhYmxlXCI6XCIyMFwifX0se1wiY2xhc3NcIjpcInN0YXRlIHZhcmlhYmxlXCIsXCJpZFwiOm51bGwsXCJzdGF0ZVwiOntcInZhbHVlXCI6XCJvcHNlci01MVwiLFwidmFyaWFibGVcIjpcIjE1XCJ9fSx7XCJjbGFzc1wiOlwic3RhdGUgdmFyaWFibGVcIixcImlkXCI6bnVsbCxcInN0YXRlXCI6e1widmFsdWVcIjpcInhbMSAtIDM5M11cIixcInZhcmlhYmxlXCI6XCJcIn19XSxcInVuaXRzT2ZJbmZvcm1hdGlvblwiOltdfX0se1wiZGF0YVwiOntcImJib3hcIjp7XCJoXCI6MzAsXCJ3XCI6NTAsXCJ4XCI6MjUsXCJ5XCI6MTV9LFwiY2xhc3NcIjpcIm51Y2xlaWMgYWNpZCBmZWF0dXJlXCIsXCJjbG9uZW1hcmtlclwiOmZhbHNlLFwiaWRcIjpcImh0dHA6Ly9wYXRod2F5Y29tbW9ucy5vcmcvcGMyL0RuYV85MWIwYmI0OWZlZmUzNjczYmEyM2Q0NmRkYWNlZmM1Nl9lMDg0ZGI0MjE4OTk1YzY3MTMyNjVmZWM3ZGU2Mzk4Y1wiLFwibGFiZWxcIjpcIkNES04xQVwiLFwibWV0YWRhdGFcIjp7XCJjb21tZW50c1wiOltcIlJlYWN0b21lIERCX0lEOiAzNzg2MjU2XCIsXCJSRVBMQUNFRCBodHRwOi8vd3d3LnJlYWN0b21lLm9yZy9iaW9wYXgvNjQvNDg4ODcjRG5hNTBcIl0sXCJkYXRhYmFzZUlkc1wiOntcImVuc2VtYmxcIjpbXCJFTlNHMDAwMDAxMjQ3NjJcIl0sXCJoZ25jLnN5bWJvbFwiOltcIkNES04xQVwiXSxcInJlYWN0b21lXCI6W1wiUi1IU0EtMzc4NjI1NlwiXSxcInVuaXByb3RcIjpbXCJQMzg5MzZcIl19LFwiZGF0YXNvdXJjZVwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvcmVhY3RvbWVcIixcImRpc3BsYXlOYW1lXCI6XCJwMjEgZ2VuZVwiLFwic3RhbmRhcmROYW1lXCI6XCJcIixcInN5bm9ueW1zXCI6W1wiV0FGMSBnZW5lXCIsXCJDSVAxIGdlbmVcIixcIkNES04xQSBnZW5lXCIsXCJQSUMxXCIsXCJDQVAyMFwiLFwiQ0RLTjFBXCIsXCJXQUYxXCIsXCJNREE2XCIsXCJDREtOMVwiLFwiU0RJMVwiLFwiRU5TRU1CTDpFTlNHMDAwMDAxMjQ3NjIgQ0RLTjFBXCJdLFwidHlwZVwiOlwiRG5hXCJ9LFwicGFyZW50XCI6XCJodHRwOi8vcGF0aHdheWNvbW1vbnMub3JnL3BjMi9Db21wbGV4XzI5M2Q2MjdkOGY5ZjIyYjllNzJlYmNkODY5MDlkMzM0XCIsXCJzdGF0ZVZhcmlhYmxlc1wiOltdLFwidW5pdHNPZkluZm9ybWF0aW9uXCI6W3tcImNsYXNzXCI6XCJ1bml0IG9mIGluZm9ybWF0aW9uXCIsXCJpZFwiOm51bGwsXCJsYWJlbFwiOntcInRleHRcIjpcIm10OkROQVwifX1dfX0se1wiZGF0YVwiOntcImJib3hcIjp7XCJoXCI6MjUsXCJ3XCI6NDgsXCJ4XCI6MjQsXCJ5XCI6MTIuNX0sXCJjbGFzc1wiOlwibWFjcm9tb2xlY3VsZVwiLFwiY2xvbmVtYXJrZXJcIjpmYWxzZSxcImlkXCI6XCJodHRwOi8vcGF0aHdheWNvbW1vbnMub3JnL3BjMi9Qcm90ZWluXzc0ODE2ZmZjOGFmOGUxZDQzYjE2YjEyMjZhNWMwZGIyX2UwODRkYjQyMTg5OTVjNjcxMzI2NWZlYzdkZTYzOThjXCIsXCJsYWJlbFwiOlwiWk5GMzg1QVwiLFwibWV0YWRhdGFcIjp7XCJjb21tZW50c1wiOltcIlJlYWN0b21lIERCX0lEOiA2ODAzNDIxXCIsXCJSRVBMQUNFRCBodHRwOi8vd3d3LnJlYWN0b21lLm9yZy9iaW9wYXgvNjQvNDg4ODcjUHJvdGVpbjEwNDU3XCJdLFwiZGF0YWJhc2VJZHNcIjp7XCJoZ25jLnN5bWJvbFwiOltcIlpORjM4NUFcIl0sXCJyZWFjdG9tZVwiOltcIlItSFNBLTY4MDM0MjFcIl0sXCJ1bmlwcm90XCI6W1wiUTk2UE05XCJdfSxcImRhdGFzb3VyY2VcIjpcImh0dHA6Ly9wYXRod2F5Y29tbW9ucy5vcmcvcGMyL3JlYWN0b21lXCIsXCJkaXNwbGF5TmFtZVwiOlwiSFpGXCIsXCJzdGFuZGFyZE5hbWVcIjpcIlppbmMgZmluZ2VyIHByb3RlaW4gMzg1QVwiLFwic3lub255bXNcIjpbXCJaaW5jIGZpbmdlciBwcm90ZWluIDM4NUFcIixcIlpORjM4NUFcIixcIlpORjM4NVwiLFwiUmV0aW5hbCB6aW5jIGZpbmdlciBwcm90ZWluXCIsXCJIZW1hdG9wb2lldGljIHppbmMgZmluZ2VyIHByb3RlaW5cIixcIlJaRlwiLFwiSFpGXCJdLFwidHlwZVwiOlwiUHJvdGVpblwifSxcInBhcmVudFwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvQ29tcGxleF8yOTNkNjI3ZDhmOWYyMmI5ZTcyZWJjZDg2OTA5ZDMzNFwiLFwic3RhdGVWYXJpYWJsZXNcIjpbXSxcInVuaXRzT2ZJbmZvcm1hdGlvblwiOltdfX0se1wiZGF0YVwiOntcImJib3hcIjp7XCJoXCI6MzgsXCJ3XCI6NTgsXCJ4XCI6MjUsXCJ5XCI6MTV9LFwiY2xhc3NcIjpcImNvbXBhcnRtZW50XCIsXCJjbG9uZW1hcmtlclwiOmZhbHNlLFwiaWRcIjpcImN5dG9zb2xcIixcImxhYmVsXCI6XCJjeXRvc29sXCIsXCJtZXRhZGF0YVwiOnt9LFwicGFyZW50XCI6XCJcIixcInN0YXRlVmFyaWFibGVzXCI6W10sXCJ1bml0c09mSW5mb3JtYXRpb25cIjpbXX19LHtcImRhdGFcIjp7XCJiYm94XCI6e1wiaFwiOjM4LFwid1wiOjkzLFwieFwiOjQyLjUsXCJ5XCI6MTV9LFwiY2xhc3NcIjpcImNvbXBhcnRtZW50XCIsXCJjbG9uZW1hcmtlclwiOmZhbHNlLFwiaWRcIjpcIm51Y2xlb3BsYXNtXCIsXCJsYWJlbFwiOlwibnVjbGVvcGxhc21cIixcIm1ldGFkYXRhXCI6e30sXCJwYXJlbnRcIjpcIlwiLFwic3RhdGVWYXJpYWJsZXNcIjpbXSxcInVuaXRzT2ZJbmZvcm1hdGlvblwiOltdfX1dLFwicGF0aHdheU1ldGFkYXRhXCI6e1wiY29tbWVudHNcIjpbXCJCb3RoIHA1My1pbmRlcGVuZGVudCBhbmQgcDUzLWRlcGVuZGVudCBtZWNoYW5pc21zIG9mIGluZHVjdGlvbiBvZiBwMjEgbVJOQSBoYXZlIGJlZW4gZGVtb25zdHJhdGVkLiBwMjEgaXMgdHJhbnNjcmlwdGlvbmFsbHkgYWN0aXZhdGVkIGJ5IHA1MyBhZnRlciBETkEgZGFtYWdlIChlbC1EZWlyeSBldCBhbC4sIDE5OTMpLlwiXSxcImRhdGFTb3VyY2VcIjpbXCJSZWFjdG9tZVwiXSxcIm9yZ2FuaXNtXCI6W1wiSG9tbyBzYXBpZW5zXCJdLFwidGl0bGVcIjpbXCJUcmFuc2NyaXB0aW9uYWwgYWN0aXZhdGlvbiBvZiBjZWxsIGN5Y2xlIGluaGliaXRvciBwMjFcIl0sXCJ1cmlcIjpcImh0dHA6Ly9pZGVudGlmaWVycy5vcmcvcmVhY3RvbWUvUi1IU0EtNjk4OTVcIn19fV1cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy9jbGllbnQvZmVhdHVyZXMvcGFpbnQvZGVtby1wYXRod2F5LXJlc3VsdHMuanNvblxuLy8gbW9kdWxlIGlkID0gNDkxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcclxuY29uc3QgaCA9IHJlcXVpcmUoJ3JlYWN0LWh5cGVyc2NyaXB0Jyk7XHJcbmNvbnN0IExvYWRlciA9IHJlcXVpcmUoJ3JlYWN0LWxvYWRlcicpO1xyXG5jb25zdCBjbGFzc05hbWVzID0gcmVxdWlyZSgnY2xhc3NuYW1lcycpO1xyXG5cclxuY29uc3QgQ3l0b3NjYXBlU2VydmljZSA9IHJlcXVpcmUoJy4uLy4uL2NvbW1vbi9jeS8nKTtcclxuY29uc3QgeyBTZXJ2ZXJBUEkgfSA9IHJlcXVpcmUoJy4uLy4uL3NlcnZpY2VzLycpO1xyXG5cclxuY29uc3QgUGF0aHdheXNUb29sYmFyID0gcmVxdWlyZSgnLi9wYXRod2F5cy10b29sYmFyJyk7XHJcbmNvbnN0IHsgUGNMb2dvTGluaywgQ3l0b3NjYXBlTmV0d29yayB9ID0gcmVxdWlyZSgnLi4vLi4vY29tbW9uL2NvbXBvbmVudHMvJyk7XHJcblxyXG5jb25zdCBQYXRod2F5ID0gcmVxdWlyZSgnLi4vLi4vLi4vbW9kZWxzL3BhdGh3YXkvcGF0aHdheS1tb2RlbCcpO1xyXG5cclxuY29uc3QgeyBzdHlsZXNoZWV0LCBiaW5kQ3lFdmVudHMsIFBBVEhXQVlTX0xBWU9VVF9PUFRTIH0gPSByZXF1aXJlKCcuL2N5Jyk7XHJcblxyXG5jb25zdCB7IFRpbWVvdXRFcnJvciB9ID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbCcpO1xyXG5jb25zdCB7IEVycm9yTWVzc2FnZSB9ID0gcmVxdWlyZSgnLi4vLi4vY29tbW9uL2NvbXBvbmVudHMvZXJyb3ItbWVzc2FnZScpO1xyXG5jb25zdCB7IENvbnRyaWJ1dGUgfSA9IHJlcXVpcmUoJy4uLy4uL2NvbW1vbi9jb21wb25lbnRzL2NvbnRyaWJ1dGUnKTtcclxuY29uc3QgUGF0aHdheVRpdGxlID0gcmVxdWlyZSgnLi9wYXRod2F5LXRpdGxlJyk7XHJcblxyXG5jbGFzcyBQYXRod2F5cyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgIHN1cGVyKHByb3BzKTtcclxuXHJcbiAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICBjeVNydjogbmV3IEN5dG9zY2FwZVNlcnZpY2UoeyBzdHlsZTogc3R5bGVzaGVldCwgb25Nb3VudDogYmluZEN5RXZlbnRzIH0pLFxyXG4gICAgICBwYXRod2F5OiBuZXcgUGF0aHdheSgpLFxyXG4gICAgICBhY3RpdmVNZW51OiAnY2xvc2VNZW51JyxcclxuICAgICAgbG9hZGluZzogdHJ1ZSxcclxuICAgICAgbmV0d29ya0VtcHR5OiBmYWxzZVxyXG4gICAgfTtcclxuXHJcbiAgICBpZiggcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyApe1xyXG4gICAgICB0aGlzLnN0YXRlLmN5U3J2LmdldFByb21pc2UoKS50aGVuKGN5ID0+IHdpbmRvdy5jeSA9IGN5KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIG9uTW91bnQgcHJvcCBwYXNzZWQgdG8gQ3l0b3NjYXBlTmV0d29ya1xyXG4gIC8vIGNhbGxlZCBhZnRlciBDeXRvc2NhcGVOZXR3b3JrIGhhcyBtb3VudGVkXHJcbiAgbG9hZFBhdGh3YXkoKXtcclxuICAgIGxldCB7IHBhdGh3YXksIGN5U3J2fSA9IHRoaXMuc3RhdGU7XHJcbiAgICBsZXQgeyBhcGlPcHRzIH0gPSB0aGlzLnByb3BzO1xyXG5cclxuICAgIGxldCBpbml0aWFsaXplQ3l0b3NjYXBlID0gcGF0aHdheSA9PiB7XHJcblxyXG4gICAgICBsZXQgY3kgPSBjeVNydi5nZXQoKTtcclxuICAgICAgY3kucmVtb3ZlKCcqJyk7XHJcbiAgICAgIGN5LmFkZCggcGF0aHdheS5jeUpzb24oKSApO1xyXG5cclxuICAgICAgbGV0IGxheW91dCA9IGN5LmxheW91dChQQVRIV0FZU19MQVlPVVRfT1BUUyk7XHJcbiAgICAgIGxheW91dC5vbignbGF5b3V0c3RvcCcsICgpID0+IHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxyXG4gICAgICAgICAgcGF0aHdheTogcGF0aHdheSxcclxuICAgICAgICAgIGVycm9yOiBudWxsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICBsYXlvdXQucnVuKCk7XHJcbiAgICB9O1xyXG5cclxuICAgIFNlcnZlckFQSS5nZXRBUElSZXNvdXJjZSggYXBpT3B0cyApLnRoZW4oIHBhdGh3YXlKU09OID0+IHtcclxuICAgICAgaWYoIHBhdGh3YXlKU09OLmdyYXBoLm5vZGVzLmxlbmd0aCA9PT0gMCApe1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgbG9hZGluZzogZmFsc2UsXHJcbiAgICAgICAgICBuZXR3b3JrRW1wdHk6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgcGF0aHdheS5sb2FkKCBwYXRod2F5SlNPTiApO1xyXG4gICAgICBpbml0aWFsaXplQ3l0b3NjYXBlKCBwYXRod2F5ICk7XHJcbiAgICB9KVxyXG4gICAgLmNhdGNoKCBlID0+IHRoaXMuc2V0U3RhdGUoeyBlcnJvcjogZSB9KSk7XHJcbiAgfVxyXG5cclxuICByZW5kZXIoKSB7XHJcbiAgICBsZXQgeyBsb2FkaW5nLCBwYXRod2F5LCBjeVNydiwgbmV0d29ya0VtcHR5LCBlcnJvciB9ID0gdGhpcy5zdGF0ZTtcclxuICAgIGNvbnN0IHsgZG93bmxvYWRPcHRzIH0gPSB0aGlzLnByb3BzO1xyXG5cclxuICAgIGxldCBlcnJvck1lc3NhZ2U7XHJcbiAgICBpZiggbmV0d29ya0VtcHR5ICkge1xyXG4gICAgICBlcnJvck1lc3NhZ2UgPSBoKEVycm9yTWVzc2FnZSwgeyB0aXRsZTogJ05vIHBhdGh3YXkgZGF0YSBhdmFpbGFibGUuIFBsZWFzZSB2aWV3IGFub3RoZXIgcmVzdWx0JywgZm9vdGVyOiBudWxsIH0gKTtcclxuICAgIH0gZWxzZSBpZiggZXJyb3IgaW5zdGFuY2VvZiBUaW1lb3V0RXJyb3IgKSB7XHJcbiAgICAgIGVycm9yTWVzc2FnZSA9IGgoIEVycm9yTWVzc2FnZSwgeyB0aXRsZTogJ1RoaXMgaXMgdGFraW5nIGxvbmdlciB0aGF0IHdlIGV4cGVjdGVkJywgYm9keTogJ1RyeSBhZ2FpbiBsYXRlci4nLCBsb2dvOiB0cnVlIH0gKTtcclxuICAgIH0gZWxzZSBpZiggZXJyb3IgKSB7XHJcbiAgICAgIGVycm9yTWVzc2FnZSA9IGgoIEVycm9yTWVzc2FnZSwgeyBsb2dvOiB0cnVlIH0gKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgYXBwQmFyID0gaCgnZGl2LmFwcC1iYXInLCBbXHJcbiAgICAgIGgoJ2Rpdi5hcHAtYmFyLWJyYW5kaW5nJywgW1xyXG4gICAgICAgIGgoUGNMb2dvTGluayksXHJcbiAgICAgICAgaChQYXRod2F5VGl0bGUsIHsgcGF0aHdheSB9KVxyXG4gICAgICBdKSxcclxuICAgICAgaChQYXRod2F5c1Rvb2xiYXIsIHsgY3lTcnYsIHBhdGh3YXksIGRvd25sb2FkT3B0cyB9KSxcclxuICAgICAgaChDb250cmlidXRlLCB7IHRleHQ6ICdBZGQgbXkgcGF0aHdheScgfSlcclxuICAgIF0pO1xyXG5cclxuICAgIGxldCBjb250ZW50ID0gIWVycm9yTWVzc2FnZSA/IFtcclxuICAgICAgaChMb2FkZXIsIHsgbG9hZGVkOiAhbG9hZGluZywgb3B0aW9uczogeyBsZWZ0OiAnNTAlJywgY29sb3I6ICcjMTZhMDg1JyB9fSwgWyBhcHBCYXIgXSksXHJcbiAgICAgIGgoQ3l0b3NjYXBlTmV0d29yaywge1xyXG4gICAgICAgIGN5U3J2LFxyXG4gICAgICAgIG9uTW91bnQ6ICgpID0+IHRoaXMubG9hZFBhdGh3YXkoKSxcclxuICAgICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoe1xyXG4gICAgICAgICduZXR3b3JrLWxvYWRpbmcnOiBsb2FkaW5nXHJcbiAgICAgICAgfSlcclxuICAgICAgfSlcclxuICAgIF0gOiBbIGVycm9yTWVzc2FnZSBdO1xyXG5cclxuICAgIHJldHVybiBoKCdkaXYucGF0aHdheXMnLCBjb250ZW50KTtcclxuICB9XHJcblxyXG59XHJcblxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQYXRod2F5cztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY2xpZW50L2ZlYXR1cmVzL3BhdGh3YXlzL2luZGV4LmpzIiwiXHJcbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcclxuY29uc3QgUmVhY3REb20gPSByZXF1aXJlKCdyZWFjdC1kb20nKTtcclxuY29uc3QgaCA9IHJlcXVpcmUoJ3JlYWN0LWh5cGVyc2NyaXB0Jyk7XHJcblxyXG5jb25zdCBQb3BvdmVyID0gcmVxdWlyZSgnLi4vLi4vY29tbW9uL2NvbXBvbmVudHMvcG9wb3ZlcicpO1xyXG5jb25zdCBJbmZvTWVudSA9IHJlcXVpcmUoJy4vbWVudXMvbmV0d29yay1pbmZvLW1lbnUnKTtcclxuY29uc3QgRmlsZURvd25sb2FkTWVudSA9IHJlcXVpcmUoJy4vbWVudXMvZmlsZS1kb3dubG9hZC1tZW51Jyk7XHJcbmNvbnN0IEljb25CdXR0b24gPSByZXF1aXJlKCcuLi8uLi9jb21tb24vY29tcG9uZW50cy9pY29uLWJ1dHRvbicpO1xyXG5cclxuY29uc3QgeyBmaXQsIGV4cGFuZENvbGxhcHNlLCBsYXlvdXQsIHNlYXJjaE5vZGVzIH0gPSByZXF1aXJlKCcuL2N5Jyk7XHJcblxyXG5jbGFzcyBQYXRod2F5c1Rvb2xiYXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gIGNvbnN0cnVjdG9yKHByb3BzKXtcclxuICAgIHN1cGVyKHByb3BzKTtcclxuICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgIHNlYXJjaFZhbHVlOiAnJ1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGhhbmRsZU5vZGVTZWFyY2hDaGFuZ2Uoc2VhcmNoVmFsKXtcclxuICAgIHRoaXMuc2V0U3RhdGUoeyBzZWFyY2hWYWx1ZTogc2VhcmNoVmFsIH0sICgpID0+IHNlYXJjaE5vZGVzKCB0aGlzLnByb3BzLmN5U3J2LmdldCgpLCBzZWFyY2hWYWwpKTtcclxuICB9XHJcblxyXG4gIGZvY3VzTm9kZVNlYXJjaCgpe1xyXG4gICAgUmVhY3REb20uZmluZERPTU5vZGUodGhpcykucXVlcnlTZWxlY3RvcignLmVsZW1lbnQtc2VhcmNoLWlucHV0JykuZm9jdXMoKTtcclxuICB9XHJcblxyXG4gIHJlbmRlcigpe1xyXG4gICAgbGV0IHsgY3lTcnYsIHBhdGh3YXksIGRvd25sb2FkT3B0cyB9ID0gdGhpcy5wcm9wcztcclxuICAgIGxldCB7IHNlYXJjaFZhbHVlIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgbGV0IGN5ID0gY3lTcnYuZ2V0KCk7XHJcblxyXG4gICAgcmV0dXJuIGgoJ2Rpdi5hcHAtdG9vbGJhcicsIFtcclxuICAgICAgaChQb3BvdmVyLCB7XHJcbiAgICAgICAgdGlwcHk6IHtcclxuICAgICAgICAgIHBvc2l0aW9uOiAnYm90dG9tJyxcclxuICAgICAgICAgIGh0bWw6IGgoSW5mb01lbnUsIHsga2V5OiAnaW5mb01lbnUnLCBpbmZvTGlzdDogcGF0aHdheS5jb21tZW50cygpIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9LCBbXHJcbiAgICAgICAgaChJY29uQnV0dG9uLCB7XHJcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ0V4dHJhIEluZm9ybWF0aW9uJyxcclxuICAgICAgICAgIGljb246ICdpbmZvJ1xyXG4gICAgICAgIH0pXHJcbiAgICAgIF0pLFxyXG4gICAgICBoKFBvcG92ZXIsIHtcclxuICAgICAgICB0aXBweToge1xyXG4gICAgICAgICAgcG9zaXRpb246ICdib3R0b20nLFxyXG4gICAgICAgICAgaHRtbDogaChGaWxlRG93bmxvYWRNZW51LCB7IGtleTogJ2Rvd25sb2FkTWVudScsIGN5U3J2LCBmaWxlTmFtZTogcGF0aHdheS5uYW1lKCksIHVyaTogcGF0aHdheS51cmkoKSwgZG93bmxvYWRPcHRzIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9LCBbXHJcbiAgICAgICAgaChJY29uQnV0dG9uLCB7XHJcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ0Rvd25sb2FkcycsXHJcbiAgICAgICAgICBpY29uOiAnZmlsZV9kb3dubG9hZCdcclxuICAgICAgICB9KVxyXG4gICAgICBdKSxcclxuICAgICAgaChJY29uQnV0dG9uLCB7XHJcbiAgICAgICAgZGVzY3JpcHRpb246ICdFeHBhbmQvQ29sbGFwc2UgYWxsIGNvbXBsZXggbm9kZXMnLFxyXG4gICAgICAgIG9uQ2xpY2s6ICgpID0+IGV4cGFuZENvbGxhcHNlKCBjeSApLFxyXG4gICAgICAgIGljb246ICdzZWxlY3RfYWxsJ1xyXG4gICAgICB9KSxcclxuICAgICAgaChJY29uQnV0dG9uLCB7XHJcbiAgICAgICAgZGVzY3JpcHRpb246ICdGaXQgcGF0aHdheSB0byBzY3JlZW4nLFxyXG4gICAgICAgIG9uQ2xpY2s6ICgpID0+IGZpdCggY3kgKSxcclxuICAgICAgICBpY29uOiAnZnVsbHNjcmVlbidcclxuICAgICAgfSksXHJcbiAgICAgIGgoSWNvbkJ1dHRvbiwge1xyXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmVzZXQgcGF0aHdheSBhcnJhbmdlbWVudCcsXHJcbiAgICAgICAgb25DbGljazogKCkgPT4gbGF5b3V0KCBjeSApLFxyXG4gICAgICAgIGljb246ICdyZXBsYXknXHJcbiAgICAgIH0pLFxyXG4gICAgICBoKCdkaXYuZWxlbWVudC1zZWFyY2gnLCBbXHJcbiAgICAgICAgaCgnaW5wdXQuZWxlbWVudC1zZWFyY2gtaW5wdXQuaW5wdXQtcm91bmQuaW5wdXQtam9pbmVkJywge1xyXG4gICAgICAgICAgdmFsdWU6IHNlYXJjaFZhbHVlLFxyXG4gICAgICAgICAgb25DaGFuZ2U6IGUgPT4gdGhpcy5oYW5kbGVOb2RlU2VhcmNoQ2hhbmdlKGUudGFyZ2V0LnZhbHVlKSxcclxuICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcclxuICAgICAgICAgIHBsYWNlaG9sZGVyOiAnU2VhcmNoJyxcclxuICAgICAgICB9KSxcclxuICAgICAgICBoKCdidXR0b24uZWxlbWVudC1zZWFyY2gtY2xlYXInLCB7XHJcbiAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlTm9kZVNlYXJjaENoYW5nZSgnJyk7XHJcbiAgICAgICAgICAgIHRoaXMuZm9jdXNOb2RlU2VhcmNoKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSwgW1xyXG4gICAgICAgICAgaCgnaS5tYXRlcmlhbC1pY29ucycsICdjbG9zZScpXHJcbiAgICAgICAgXSlcclxuICAgICAgXSlcclxuICAgIF0pO1xyXG4gIH1cclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQYXRod2F5c1Rvb2xiYXI7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NsaWVudC9mZWF0dXJlcy9wYXRod2F5cy9wYXRod2F5cy10b29sYmFyLmpzIiwiY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xyXG5jb25zdCBoID0gcmVxdWlyZSgncmVhY3QtaHlwZXJzY3JpcHQnKTtcclxuXHJcblxyXG5jbGFzcyBOZXR3b3JrSW5mb01lbnUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gIHJlbmRlcigpIHtcclxuICAgIGNvbnN0IHsgaW5mb0xpc3QgfSA9IHRoaXMucHJvcHM7XHJcblxyXG4gICAgY29uc3Qgbm9JbmZvTWVzc2FnZSA9IFtcclxuICAgICAgaCgncCcsIHsga2V5OiAxIH0sICdObyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHdhcyBmb3VuZCBmb3IgdGhpcyBuZXR3b3JrIScpLFxyXG4gICAgICBoKCdwJywgeyBrZXk6IDIgfSwgJ0FkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG5ldHdvcmsgaXMgbm9ybWFsbHkgZm91bmQgaGVyZSwgYnV0IHdlIGNvdWxkblxcJ3QgZmluZCBhbnkgZm9yIHRoaXMgb25lLicpXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0IGNvbW1lbnRzID0gaW5mb0xpc3QubWFwKCAoIGNvbW1lbnQsIGtleSApID0+IGgoJ3AnLCB7IGtleSB9LCBjb21tZW50LnJlcGxhY2UoLzxwPi9nLCAnICcpKSk7XHJcblxyXG4gICAgcmV0dXJuIChcclxuICAgICAgaCgnZGl2LmluZm8tbWVudScsIFtcclxuICAgICAgICBjb21tZW50cy5sZW5ndGggPiAwID8gY29tbWVudHMgOiBub0luZm9NZXNzYWdlXHJcbiAgICAgIF0pXHJcbiAgICApO1xyXG4gIH1cclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBOZXR3b3JrSW5mb01lbnU7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NsaWVudC9mZWF0dXJlcy9wYXRod2F5cy9tZW51cy9uZXR3b3JrLWluZm8tbWVudS5qcyIsImNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcclxuY29uc3QgaCA9IHJlcXVpcmUoJ3JlYWN0LWh5cGVyc2NyaXB0Jyk7XHJcbmNvbnN0IHNhdmVBcyA9IHJlcXVpcmUoJ2ZpbGUtc2F2ZXInKS5zYXZlQXM7XHJcbmNvbnN0IF8gPSByZXF1aXJlKCdsb2Rhc2gnKTtcclxuY29uc3QgTG9hZGVyID0gcmVxdWlyZSgncmVhY3QtbG9hZGVyJyk7XHJcblxyXG5jb25zdCB7IFNlcnZlckFQSSB9ID0gcmVxdWlyZSgnLi4vLi4vLi4vc2VydmljZXMnKTtcclxuXHJcbmNvbnN0IHBjRG93bmxvYWRUeXBlcyA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbW1vbi9wYy1kb3dubG9hZC10eXBlcycpO1xyXG5cclxuXHJcbmNsYXNzIEZpbGVEb3dubG9hZE1lbnUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICBkb3dubG9hZFR5cGVzOiBwY0Rvd25sb2FkVHlwZXMsXHJcbiAgICAgIGxvYWRpbmc6IGZhbHNlLFxyXG4gICAgICBlcnJvcjogbnVsbFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGRvd25sb2FkRnJvbURpc3BsYXlOYW1lKGRpc3BsYXlOYW1lKSB7XHJcbiAgICBsZXQgeyBjeVNydiwgZmlsZU5hbWUgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBsZXQgeyBkb3dubG9hZFR5cGVzIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgbGV0IG9wdGlvbiA9IF8uZmluZChkb3dubG9hZFR5cGVzLCBbJ2Rpc3BsYXlOYW1lJywgZGlzcGxheU5hbWVdKTtcclxuICAgIGxldCB7IHBjMk5hbWUsIGV4dCwgdHlwZSB9ID0gb3B0aW9uO1xyXG5cclxuICAgIGlmICh0eXBlID09PSAncG5nJykge1xyXG4gICAgICAvLyBUaGUgc2V0VGltZW91dCB0cmlnZ2VycyBhIHJlcmVuZGVyIHNvIHRoYXQgdGhlIGxvYWRlciBhcHBlYXJzIG9uIHNjcmVlblxyXG4gICAgICB0aGlzLnNldFN0YXRlKCB7IGxvYWRpbmc6IHRydWUgfSAsICgpID0+IHtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIHNhdmVBcyhjeVNydi5nZXQoKS5wbmcoe1xyXG4gICAgICAgICAgICBvdXRwdXQ6ICdibG9iJyxcclxuICAgICAgICAgICAgc2NhbGU6IDIsXHJcbiAgICAgICAgICAgIGJnOiAnd2hpdGUnLFxyXG4gICAgICAgICAgICBmdWxsOiB0cnVlXHJcbiAgICAgICAgICB9KSwgYCR7ZmlsZU5hbWV9LiR7ZXh0fWApO1xyXG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGxvYWRpbmc6IGZhbHNlIH0pO1xyXG4gICAgICAgIH0sIDEpO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZG93bmxvYWRGaWxlRnJvbVBDKHBjMk5hbWUsIGV4dCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkb3dubG9hZEZpbGVGcm9tUEMoZm9ybWF0LCBmaWxlRXh0KSB7XHJcbiAgICBjb25zdCBGSUxFTkFNRV9DVVRPRkYgPSAyMDtcclxuICAgIGxldCB7IGZpbGVOYW1lLCB1cmkgfSAgPSAgdGhpcy5wcm9wcztcclxuICAgIGZpbGVOYW1lID0gZmlsZU5hbWUuc3Vic3RyKDAsIGZpbGVOYW1lLmxlbmd0aCA8IEZJTEVOQU1FX0NVVE9GRiA/IGZpbGVOYW1lLmxlbmd0aCA6IEZJTEVOQU1FX0NVVE9GRikucmVwbGFjZSgvIC9nLCAnXycpO1xyXG5cclxuICAgIHRoaXMuc2V0U3RhdGUoeyBsb2FkaW5nOiB0cnVlIH0sICgpID0+IHtcclxuICAgICAgU2VydmVyQVBJLmRvd25sb2FkRmlsZUZyb21QYXRod2F5Q29tbW9ucyh1cmksIGZvcm1hdCkudGhlbihyZXMgPT4gcmVzLnRleHQoKSlcclxuICAgICAgICAudGhlbihjb250ZW50ID0+IHtcclxuICAgICAgICAgIGNvbnRlbnQgPSB0eXBlb2YgY29udGVudCA9PT0gJ29iamVjdCcgPyBKU09OLnN0cmluZ2lmeShjb250ZW50KSA6IGNvbnRlbnQ7XHJcbiAgICAgICAgICBsZXQgZmlsZUNvbnRlbnQgPSBuZXcgRmlsZShbY29udGVudF0sIGAke2ZpbGVOYW1lfS4ke2ZpbGVFeHR9YCwgeyB0eXBlOid0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLTgnIH0pO1xyXG4gICAgICAgICAgc2F2ZUFzKCBmaWxlQ29udGVudCApO1xyXG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGVycm9yOiBudWxsLCBsb2FkaW5nOiBmYWxzZSB9KTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5jYXRjaCggZSA9PiB0aGlzLnNldFN0YXRlKHsgZXJyb3I6IGUsIGxvYWRpbmc6IGZhbHNlIH0pICk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHJlbmRlcigpIHtcclxuICAgIGNvbnN0IHsgZG93bmxvYWRPcHRzIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgY29uc3Qgb3B0cyA9IF8uYXNzaWduKCB7IGRvd25sb2FkVHlwZXM6IFsgJ3BuZycgXSB9LCBkb3dubG9hZE9wdHMgKTtcclxuICAgIGxldCBtZW51Q29udGVudHMgPSB0aGlzLnN0YXRlLmRvd25sb2FkVHlwZXNcclxuICAgICAgLmZpbHRlciggZHQgPT4gb3B0cy5kb3dubG9hZFR5cGVzLmluZGV4T2YoIGR0LnR5cGUgKSA+PSAwIClcclxuICAgICAgLm1hcCggZHQgPT4ge1xyXG4gICAgICAgIGxldCBkbE9wdGlvbiA9IGgoJ2Rpdi5kb3dubG9hZC1vcHRpb24nLCB7IG9uQ2xpY2s6ICgpID0+IHRoaXMuZG93bmxvYWRGcm9tRGlzcGxheU5hbWUoIGR0LmRpc3BsYXlOYW1lICkgfSwgW1xyXG4gICAgICAgICAgICBoKCdkaXYuZG93bmxvYWQtb3B0aW9uLWhlYWRlcicsIFtcclxuICAgICAgICAgICAgICBoKCdoMycsIGR0LmRpc3BsYXlOYW1lKSxcclxuICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgIGgoJ2Rpdi5kb3dubG9hZC1vcHRpb24tZGVzY3JpcHRpb24nLCBkdC5kZXNjcmlwdGlvbilcclxuICAgICAgICBdKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGRsT3B0aW9uO1xyXG4gICAgICB9ICk7XHJcbiAgICBsZXQgZXJyb3JNZXNzYWdlID0gdGhpcy5zdGF0ZS5lcnJvciA/IGgoJ2Rpdi5maWxlLWRvd25sb2FkLWVycm9yJywgJ0FuIGVycm9yIG9jY3VycmVkIC0gUGxlYXNlIHRyeSBhZ2FpbiBsYXRlci4nKTogbnVsbDtcclxuXHJcbiAgICByZXR1cm4gaCgnZGl2LmZpbGUtZG93bmxvYWQtbWVudScsIFtcclxuICAgICAgaCgnaDInLCAnRG93bmxvYWQgQXMuLi4nKSxcclxuICAgICAgaCgnZGl2LmZpbGUtZG93bmxvYWQtY29udGVudCcsIFtcclxuICAgICAgICAuLi5tZW51Q29udGVudHMsXHJcbiAgICAgICAgaChMb2FkZXIsIHsgbG9hZGVkOiAhdGhpcy5zdGF0ZS5sb2FkaW5nIH0pXHJcbiAgICAgIF0pLFxyXG4gICAgICBlcnJvck1lc3NhZ2VcclxuICAgIF0pO1xyXG4gIH1cclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBGaWxlRG93bmxvYWRNZW51O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jbGllbnQvZmVhdHVyZXMvcGF0aHdheXMvbWVudXMvZmlsZS1kb3dubG9hZC1tZW51LmpzIiwiY29uc3QgY3l0b3NjYXBlID0gcmVxdWlyZSgnY3l0b3NjYXBlJyk7XHJcbmNvbnN0IHNiZ25TdHlsZVNoZWV0ID0gcmVxdWlyZSgnY3l0b3NjYXBlLXNiZ24tc3R5bGVzaGVldCcpO1xyXG5jb25zdCB7IE1BVENIRURfU0VBUkNIX0NMQVNTIH0gPSByZXF1aXJlKCcuL2FjdGlvbnMnKTtcclxuXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHNiZ25TdHlsZVNoZWV0KGN5dG9zY2FwZSlcclxuLnNlbGVjdG9yKCdub2RlJylcclxuLmNzcyh7XHJcbiAgJ2JhY2tncm91bmQtb3BhY2l0eSc6ICcwLjQnXHJcbn0pXHJcbi5zZWxlY3Rvcignbm9kZTphY3RpdmUnKVxyXG4uY3NzKHtcclxuICAnYmFja2dyb3VuZC1vcGFjaXR5JzogJzAuNycsXHJcbn0pXHJcbi5zZWxlY3Rvcignbm9kZVtjbGFzcyE9XCJjb21wYXJ0bWVudFwiXScpXHJcbi5jc3Moe1xyXG4gICdmb250LXNpemUnOiAyMCxcclxuICAnY29sb3InOiAnYmxhY2snLFxyXG4gICd0ZXh0LW91dGxpbmUtY29sb3InOiAnd2hpdGUnLFxyXG4gICd0ZXh0LW91dGxpbmUtd2lkdGgnOiAyLFxyXG4gICd0ZXh0LW91dGxpbmUtb3BhY2l0eSc6IDAuNSxcclxuICAndGV4dC13cmFwJzogJ3dyYXAnLFxyXG4gICd0ZXh0LW1heC13aWR0aCc6IDE3NSxcclxuICAnbGFiZWwnOiBub2RlID0+IHtcclxuICAgIGNvbnN0IGxhYmVsID0gbm9kZS5kYXRhKCdsYWJlbCcpXHJcbiAgICAgIC5zcGxpdCgnKCcpLmpvaW4oJycpLnNwbGl0KCcpJykuam9pbignJylcclxuICAgICAgLnNwbGl0KCc6Jykuam9pbignICcpO1xyXG4gICAgcmV0dXJuIGxhYmVsO1xyXG4gIH1cclxufSlcclxuLnNlbGVjdG9yKCdub2RlW2NsYXNzPVwiY29tcGxleFwiXScpXHJcbi5jc3Moe1xyXG4gICd3aWR0aCc6IDQ1LFxyXG4gICdoZWlnaHQnOiA0NSxcclxuICAnbGFiZWwnOiBub2RlID0+IG5vZGUuaXNQYXJlbnQoKSA/ICcnIDogbm9kZS5kYXRhKCdsYWJlbCcpXHJcbn0pXHJcbi5zZWxlY3RvcignLmN5LWV4cGFuZC1jb2xsYXBzZS1jb2xsYXBzZWQtbm9kZScpXHJcbi5jc3Moe1xyXG4gICdmb250LXNpemUnOiAyMCxcclxuICAndGV4dC1tYXgtd2lkdGgnOiAxNzVcclxufSlcclxuLnNlbGVjdG9yKCcuY3ktZXhwYW5kLWNvbGxhcHNlLW1ldGEtZWRnZScpXHJcbi5jc3Moe1xyXG4gICdsaW5lLXN0eWxlJzogJ2Rhc2hlZCdcclxufSlcclxuLnNlbGVjdG9yKCdlZGdlJylcclxuLmNzcyh7XHJcbiAgJ29wYWNpdHknOiAwLjNcclxufSlcclxuLnNlbGVjdG9yKCdub2RlW2NsYXNzPVwiYW5kXCJdLG5vZGVbY2xhc3M9XCJvclwiXSxub2RlW2NsYXNzPVwibm90XCJdJylcclxuLmNzcyh7XHJcbiAgJ2xhYmVsJzpub2RlPT5ub2RlLmRhdGEoJ2NsYXNzJylcclxufSlcclxuLnNlbGVjdG9yKCcuaGlnaGxpZ2h0ZWQnKVxyXG4uY3NzKHtcclxuICAnb3BhY2l0eSc6MSxcclxufSlcclxuLnNlbGVjdG9yKCcudW5oaWdobGlnaHRlZCcpXHJcbi5jc3Moe1xyXG4gICdvcGFjaXR5JzowLjQsXHJcbn0pXHJcbi5zZWxlY3RvcignLmhpZGRlbicpXHJcbi5jc3Moe1xyXG4gICdkaXNwbGF5Jzonbm9uZScsXHJcbn0pXHJcbi5zZWxlY3RvcihgLiR7TUFUQ0hFRF9TRUFSQ0hfQ0xBU1N9YClcclxuLmNzcyh7XHJcbiAgJ292ZXJsYXktY29sb3InOiAneWVsbG93JyxcclxuICAnb3ZlcmxheS1wYWRkaW5nJzogMCxcclxuICAnb3ZlcmxheS1vcGFjaXR5JzogMC41XHJcbn0pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jbGllbnQvZmVhdHVyZXMvcGF0aHdheXMvY3kvcGF0aHdheXMtc3R5bGVzaGVldC5qcyIsImNvbnN0IF8gPSByZXF1aXJlKCdsb2Rhc2gnKTtcclxuY29uc3QgaCA9IHJlcXVpcmUoJ3JlYWN0LWh5cGVyc2NyaXB0Jyk7XHJcblxyXG5jb25zdCBQYXRod2F5Tm9kZU1ldGFkYXRhVmlldyA9IHJlcXVpcmUoJy4uL3BhdGh3YXktbm9kZS1tZXRhZGF0YScpO1xyXG5jb25zdCB7IFBBVEhXQVlTX0xBWU9VVF9PUFRTIH0gPSByZXF1aXJlKCcuL2xheW91dCcpO1xyXG5cclxuY29uc3QgQ3l0b3NjYXBlVG9vbHRpcCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbW1vbi9jeS9jeXRvc2NhcGUtdG9vbHRpcCcpO1xyXG5cclxuY29uc3QgRVhQQU5EX0NPTExBUFNFX09QVFMgPSB7XHJcbiAgbGF5b3V0Qnk6IF8uYXNzaWduKHt9LCBQQVRIV0FZU19MQVlPVVRfT1BUUywgeyBmaXQ6IGZhbHNlIH0pLFxyXG4gIGZpc2hleWU6IHRydWUsXHJcbiAgYW5pbWF0ZTogdHJ1ZSxcclxuICB1bmRvYWJsZTogZmFsc2UsXHJcbiAgY3VlRW5hYmxlZDogZmFsc2VcclxufTtcclxuXHJcbmNvbnN0IFNIT1dfVE9PTFRJUFNfRVZFTlQgPSAnc2hvd3Rvb2x0aXAnO1xyXG5cclxubGV0IGJpbmRDeUV2ZW50cyA9IGN5ID0+IHtcclxuXHJcbiAgbGV0IGhpZGVUb29sdGlwcyA9ICgpID0+IHtcclxuICAgIGN5LmVsZW1lbnRzKCkuZm9yRWFjaChlbGUgPT4ge1xyXG4gICAgICBsZXQgdG9vbHRpcCA9IGVsZS5zY3JhdGNoKCdfdG9vbHRpcCcpO1xyXG4gICAgICBpZiAodG9vbHRpcCkge1xyXG4gICAgICAgIHRvb2x0aXAuaGlkZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9O1xyXG5cclxuICBjeS5leHBhbmRDb2xsYXBzZShFWFBBTkRfQ09MTEFQU0VfT1BUUyk7XHJcbiAgY3kub24oU0hPV19UT09MVElQU19FVkVOVCwgJ25vZGVbY2xhc3MgIT0gXCJjb21wYXJ0bWVudFwiXScsIGZ1bmN0aW9uIChldnQpIHtcclxuICAgIGxldCBub2RlID0gZXZ0LnRhcmdldDtcclxuXHJcbiAgICBsZXQgdG9vbHRpcCA9IG5ldyBDeXRvc2NhcGVUb29sdGlwKCBub2RlLnBvcHBlclJlZigpLCB7XHJcbiAgICAgIGh0bWw6IGgoUGF0aHdheU5vZGVNZXRhZGF0YVZpZXcsIHsgbm9kZSB9KVxyXG4gICAgfSApO1xyXG4gICAgbm9kZS5zY3JhdGNoKCdfdG9vbHRpcCcsIHRvb2x0aXApO1xyXG4gICAgdG9vbHRpcC5zaG93KCk7XHJcbiAgfSk7XHJcblxyXG4gIGN5Lm9uKCd0YXAnLCBldnQgPT4ge1xyXG4gICAgY29uc3QgdGd0ID0gZXZ0LnRhcmdldDtcclxuXHJcbiAgICAvLyBpZiB3ZSBkaWRuJ3QgY2xpY2sgYSBub2RlLCBjbG9zZSBhbGwgdG9vbHRpcHNcclxuICAgIGlmKCBldnQudGFyZ2V0ID09PSBjeSB8fCBldnQudGFyZ2V0LmlzRWRnZSgpICl7XHJcbiAgICAgIGhpZGVUb29sdGlwcygpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gd2UgY2xpY2tlZCBhIG5vZGUgdGhhdCBoYXMgYSB0b29sdGlwIG9wZW4gLT4gY2xvc2UgaXRcclxuICAgIGlmKCB0Z3Quc2NyYXRjaCgnX3Rvb2x0aXAtb3BlbmVkJykgKXtcclxuICAgICAgaGlkZVRvb2x0aXBzKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBvcGVuIHRoZSB0b29sdGlwIGZvciB0aGUgY2xpY2tlZCBub2RlXHJcbiAgICAgIGhpZGVUb29sdGlwcygpO1xyXG4gICAgICB0Z3QuZW1pdChTSE9XX1RPT0xUSVBTX0VWRU5UKTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgLy9IaWRlIFRvb2x0aXBzIG9uIHZhcmlvdXMgZ3JhcGggbW92ZW1lbnRzXHJcbiAgY3kub24oJ2RyYWcnLCAoKSA9PiBoaWRlVG9vbHRpcHMoKSk7XHJcbiAgY3kub24oJ3BhbicsICgpID0+IGhpZGVUb29sdGlwcygpKTtcclxuICBjeS5vbignem9vbScsICgpID0+IGhpZGVUb29sdGlwcygpKTtcclxuICBjeS5vbignbGF5b3V0c3RhcnQnLCAoKSA9PiBoaWRlVG9vbHRpcHMoKSk7XHJcblxyXG4gIGxldCBub2RlSG92ZXJNb3VzZU92ZXIgPSBfLmRlYm91bmNlKGV2dCA9PiB7XHJcbiAgICBsZXQgbm9kZSA9IGV2dC50YXJnZXQ7XHJcbiAgICBsZXQgZWxlc1RvSGlnaGxpZ2h0ID0gY3kuY29sbGVjdGlvbigpO1xyXG5cclxuICAgIC8vQ3JlYXRlIGEgbGlzdCBvZiB0aGUgaG92ZXJlZCBub2RlICYgaXRzIG5laWdoYm91cmhvb2RcclxuICAgIG5vZGUubmVpZ2hib3Job29kKCkubm9kZXMoKS51bmlvbihub2RlKS5mb3JFYWNoKG5vZGUgPT4ge1xyXG4gICAgICBlbGVzVG9IaWdobGlnaHQubWVyZ2Uobm9kZS5hbmNlc3RvcnMoKSk7XHJcbiAgICAgIGVsZXNUb0hpZ2hsaWdodC5tZXJnZShub2RlLmRlc2NlbmRhbnRzKCkpO1xyXG4gICAgICBlbGVzVG9IaWdobGlnaHQubWVyZ2Uobm9kZSk7XHJcbiAgICB9KTtcclxuICAgIGVsZXNUb0hpZ2hsaWdodC5tZXJnZShub2RlLm5laWdoYm9yaG9vZCgpLmVkZ2VzKCkpO1xyXG5cclxuICAgIC8vQWRkIGhpZ2hsaWdodGVkIGNsYXNzIHRvIG5vZGUgJiBpdHMgbmVpZ2hib3VyaG9vZCwgdW5oaWdobGlnaHRlZCB0byBldmVyeXRoaW5nIGVsc2VcclxuICAgIGN5LmVsZW1lbnRzKCkuYWRkQ2xhc3MoJ3VuaGlnaGxpZ2h0ZWQnKTtcclxuICAgIGVsZXNUb0hpZ2hsaWdodC5mb3JFYWNoKGVsZSA9PiB7XHJcbiAgICAgIGVsZS5yZW1vdmVDbGFzcygndW5oaWdobGlnaHRlZCcpO1xyXG4gICAgICBlbGUuYWRkQ2xhc3MoJ2hpZ2hsaWdodGVkJyk7XHJcbiAgICB9KTtcclxuXHJcbiAgfSwgNzUwKTtcclxuXHJcbiAgLy9jYWxsIHN0eWxlLWFwcGx5aW5nIGFuZCBzdHlsZS1yZW1vdmluZyBmdW5jdGlvbnMgb24gJ21vdXNlb3ZlcicgYW5kICdtb3VzZW91dCcgZm9yIG5vbi1jb21wYXJ0bWVudCBub2Rlc1xyXG4gIGN5Lm9uKCdtb3VzZW92ZXInLCAnbm9kZVtjbGFzcyE9XCJjb21wYXJ0bWVudFwiXScsIG5vZGVIb3Zlck1vdXNlT3Zlcik7XHJcbiAgY3kub24oJ21vdXNlb3V0JywgJ25vZGVbY2xhc3MhPVwiY29tcGFydG1lbnRcIl0nLCAoKSA9PiB7XHJcbiAgICBub2RlSG92ZXJNb3VzZU92ZXIuY2FuY2VsKCk7XHJcbiAgICBjeS5lbGVtZW50cygpLnJlbW92ZUNsYXNzKCdoaWdobGlnaHRlZCB1bmhpZ2hsaWdodGVkJyk7XHJcbiAgfSk7XHJcblxyXG59O1xyXG5tb2R1bGUuZXhwb3J0cyA9IGJpbmRDeUV2ZW50cztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY2xpZW50L2ZlYXR1cmVzL3BhdGh3YXlzL2N5L2V2ZW50cy5qcyIsImNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcclxuY29uc3QgaCA9IHJlcXVpcmUoJ3JlYWN0LWh5cGVyc2NyaXB0Jyk7XHJcbmNvbnN0IF8gPSByZXF1aXJlKCdsb2Rhc2gnKTtcclxuXHJcbmNvbnN0IHsgU2VydmVyQVBJIH0gPSByZXF1aXJlKCcuLi8uLi9zZXJ2aWNlcycpO1xyXG5jb25zdCB7IE5TX0NIRUJJLCBOU19FTlNFTUJMLCBOU19IR05DLCBOU19IR05DX1NZTUJPTCwgTlNfTkNCSV9HRU5FLCBOU19QVUJNRUQsIE5TX1JFQUNUT01FLCBOU19VTklQUk9UIH0gPSByZXF1aXJlKCcuLi8uLi8uLi9jb25maWcnKTtcclxuXHJcbmNvbnN0IERFRkFVTFRfTlVNX05BTUVTID0gMztcclxuY29uc3QgU1VQUE9SVEVEX0NPTExFQ1RJT05TID0gbmV3IE1hcChbXHJcbiAgW05TX0NIRUJJLCAnQ2hFQkknXSxcclxuICBbTlNfRU5TRU1CTCwgJ0Vuc2VtYmwnXSxcclxuICBbTlNfSEdOQywgJ0hHTkMnXSxcclxuICBbTlNfSEdOQ19TWU1CT0wsICdIR05DJ10sXHJcbiAgW05TX05DQklfR0VORSwgJ05DQkkgR2VuZSddLFxyXG4gIFtOU19SRUFDVE9NRSwgJ1JlYWN0b21lJ10sXHJcbiAgW05TX1VOSVBST1QsICdVbmlQcm90J11cclxuXSk7XHJcblxyXG5jb25zdCBnZXRVcmlJZHMgPSB1cmlzID0+IHVyaXMubWFwKCB1cmkgPT4gXy5sYXN0KCB1cmkuc3BsaXQoICcvJyApICkgKTtcclxuXHJcbi8vIEEgY29tcG9uZW50IHRoYXQgZGlzcGxheXMgYSBwYXRod2F5IG5vZGUncyBtZXRhZGF0YVxyXG4vLyBwcm9wczpcclxuLy8gLSBjeXRvc2NhcGUgbm9kZSlcclxuY2xhc3MgUGF0aHdheU5vZGVNZXRhZGF0YVZpZXcgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gIGNvbnN0cnVjdG9yKHByb3BzKXtcclxuICAgIHN1cGVyKHByb3BzKTtcclxuXHJcbiAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICBwdWJsaWNhdGlvbnM6IFtdXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgY29tcG9uZW50RGlkTW91bnQoKXtcclxuICAgIGxldCB7IG5vZGUgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBsZXQgbWV0YWRhdGEgPSBub2RlLmRhdGEoJ21ldGFkYXRhJyk7XHJcbiAgICBsZXQgcHVibWVkVXJpcyA9IF8uZ2V0KG1ldGFkYXRhLCBgeHJlZkxpbmtzLiR7TlNfUFVCTUVEfWAsIG51bGwpO1xyXG5cclxuICAgIGlmKCBwdWJtZWRVcmlzICE9IG51bGwgKXtcclxuICAgICAgY29uc3QgcHVibWVkSWRzID0gZ2V0VXJpSWRzKCBwdWJtZWRVcmlzICk7XHJcbiAgICAgIFNlcnZlckFQSS5nZXRQdWJtZWRQdWJsaWNhdGlvbnMocHVibWVkSWRzKS50aGVuKCBwdWJsaWNhdGlvbnMgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBwdWJsaWNhdGlvbnMgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVuZGVyKCl7XHJcbiAgICBsZXQgeyBub2RlIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgbGV0IHsgcHVibGljYXRpb25zIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgY29uc3Qgbm9kZURhdGEgPSBub2RlLmRhdGEoKTtcclxuICAgIGNvbnN0IG5vZGVDbGFzcyA9IF8uZ2V0KCBub2RlRGF0YSwgWydjbGFzcyddICk7XHJcbiAgICBjb25zdCBub2RlTGFiZWwgPSBfLmdldCggbm9kZURhdGEsIFsnbGFiZWwnXSApO1xyXG5cclxuICAgIGNvbnN0IGRlZmF1bHROb2RlTWV0YSA9IHtcclxuICAgICAgc3lub255bXM6IFtdLFxyXG4gICAgICBkYXRhc291cmNlOicnLFxyXG4gICAgICB0eXBlOiBub2RlQ2xhc3MsXHJcbiAgICAgIHN0YW5kYXJkTmFtZTogJycsXHJcbiAgICAgIGRpc3BsYXlOYW1lOiBub2RlTGFiZWwsXHJcbiAgICAgIHhyZWZMaW5rczogW10gICAgXHJcbiAgICB9OyBcclxuICAgIGNvbnN0IG5vZGVNZXRhID0gXy5nZXQoIG5vZGVEYXRhLCBbJ21ldGFkYXRhJ10sIHt9ICk7XHJcbiAgICBjb25zdCBtZCA9IF8uYXNzaWduKCB7fSwgZGVmYXVsdE5vZGVNZXRhLCBub2RlTWV0YSApO1xyXG4gICAgXHJcbiAgICBsZXQgeyBzeW5vbnltcywgdHlwZSwgc3RhbmRhcmROYW1lLCBkaXNwbGF5TmFtZSwgeHJlZkxpbmtzIH0gPSBtZDtcclxuICAgIGxldCB0aXRsZSA9IG5vZGVMYWJlbCB8fCBkaXNwbGF5TmFtZTsgXHJcbiAgICBsZXQgc2VhcmNoTGlua1F1ZXJ5ID0gZGlzcGxheU5hbWU7XHJcbiAgXHJcbiAgICBsZXQgZGJMaW5rcyA9IF8ua2V5cyggeHJlZkxpbmtzICkubWFwKCBjb2xsZWN0aW9uID0+IHtcclxuICAgICAgbGV0IGxpbmsgPSBudWxsO1xyXG4gICAgICBjb25zdCBkaXNwbGF5TmFtZSA9IFNVUFBPUlRFRF9DT0xMRUNUSU9OUy5nZXQoIGNvbGxlY3Rpb24gKTtcclxuICAgICAgY29uc3QgdXJpID0gXy5nZXQoIHhyZWZMaW5rcywgYCR7Y29sbGVjdGlvbn1bMF1gICk7XHJcbiAgICAgIGlmICggZGlzcGxheU5hbWUgJiYgdXJpICkgbGluayA9IGgoJ2EucGxhaW4tbGluaycsIHsgaHJlZjogdXJpLCB0YXJnZXQ6ICdfYmxhbmsnIH0sIGRpc3BsYXlOYW1lICk7XHJcbiAgICAgIHJldHVybiBsaW5rO1xyXG4gICAgfSk7XHJcblxyXG4gICAgbGV0IHB1YmxpY2F0aW9uRWxlcyA9IHB1YmxpY2F0aW9ucy5tYXAocHVibGljYXRpb24gPT4ge1xyXG4gICAgICBsZXQgeyBpZCwgdGl0bGUsIGZpcnN0QXV0aG9yLCBkYXRlLCBzb3VyY2UgfSA9IHB1YmxpY2F0aW9uO1xyXG4gICAgICByZXR1cm4gaCgnZGl2LmN5LW92ZXJmbG93LWNvbnRlbnQnLCBbXHJcbiAgICAgICAgaCgnYS5wbGFpbi1saW5rJywgeyBocmVmOiAnaHR0cDovL2Jpb3JlZ2lzdHJ5LmlvL3B1Ym1lZDonICsgaWQsIHRhcmdldDogJ19ibGFuaycgIH0sIHRpdGxlKSxcclxuICAgICAgICBoKCdkaXYnLCBmaXJzdEF1dGhvciArICAnIGV0IGFsLiB8ICcgKyBzb3VyY2UgKyAnIC0gJyArIG5ldyBEYXRlKGRhdGUpLmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKSlcclxuICAgICAgXSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBsZXQgc2hvd1RpdGxlID0gdGl0bGUgIT09ICcnO1xyXG4gICAgbGV0IHNob3dUeXBlID0gdHlwZSAhPT0gJyc7XHJcbiAgICBsZXQgc2hvd1N0ZE5hbWUgPSBzdGFuZGFyZE5hbWUgIT09ICcnO1xyXG4gICAgbGV0IHNob3dEaXNwTmFtZSA9IGRpc3BsYXlOYW1lICE9PSAnJyAmJiBkaXNwbGF5TmFtZSAhPT0gKCBub2RlTGFiZWwgfHwgdGl0bGUgKTtcclxuICAgIGxldCBzaG93U3lub255bXMgPSBzeW5vbnltcy5sZW5ndGggPiAwO1xyXG4gICAgbGV0IHNob3dQdWJzID0gcHVibGljYXRpb25FbGVzLmxlbmd0aCA+IDA7XHJcbiAgICBsZXQgc2hvd0xpbmtzID0gZGJMaW5rcy5sZW5ndGggPiAwO1xyXG4gICAgXHJcbiAgICBsZXQgc2hvd0hlYWRlciA9IHNob3dUaXRsZSB8fCBzaG93VHlwZTtcclxuICAgIGxldCBzaG93Qm9keSA9IHNob3dTdGROYW1lIHx8IHNob3dEaXNwTmFtZSB8fCBzaG93U3lub255bXMgfHwgc2hvd1B1YnM7XHJcbiAgICBsZXQgc2hvd0Zvb3RlciA9IHNob3dMaW5rcztcclxuICAgIGxldCBzaG93UGNTZWFyY2hMaW5rID0gc2VhcmNoTGlua1F1ZXJ5ICE9PSAnJztcclxuICAgIFxyXG4gICAgcmV0dXJuIGgoJ2Rpdi5jeS10b29sdGlwJywgW1xyXG4gICAgICBoKCdkaXYuY3ktdG9vbHRpcC1jb250ZW50JywgW1xyXG4gICAgICAgIHNob3dIZWFkZXIgPyBoKCdkaXYuY3ktdG9vbHRpcC1oZWFkZXInLCBbXHJcbiAgICAgICAgICBzaG93VGl0bGU/IGgoJ2gyLmN5LXRvb2x0aXAtdGl0bGUnLCAgdGl0bGUpOiBudWxsLFxyXG4gICAgICAgICAgc2hvd1R5cGUgPyBoKCdkaXYuY3ktdG9vbHRpcC10eXBlLWNoaXAnLCB0eXBlKSA6IG51bGwsXHJcbiAgICAgICAgXSk6IG51bGwsXHJcbiAgICAgICAgc2hvd0JvZHkgPyBoKCdkaXYuY3ktdG9vbHRpcC1ib2R5JywgW1xyXG4gICAgICAgICAgc2hvd1N0ZE5hbWUgPyBoKCdkaXYuY3ktdG9vbHRpcC1zZWN0aW9uJywgW1xyXG4gICAgICAgICAgICBoKCdkaXYuY3ktdG9vbHRpcC1maWVsZC1uYW1lJywgJ05hbWUnKSxcclxuICAgICAgICAgICAgaCgnZGl2LmN5LXRvb2x0aXAtZmllbGQtdmFsdWUnLCBzdGFuZGFyZE5hbWUpXHJcbiAgICAgICAgICBdKSA6IG51bGwsXHJcbiAgICAgICAgICBzaG93RGlzcE5hbWUgPyBoKCdkaXYuY3ktdG9vbHRpcC1zZWN0aW9uJywgW1xyXG4gICAgICAgICAgICBoKCdkaXYuY3ktdG9vbHRpcC1maWVsZC1uYW1lJywgJ0Rpc3BsYXkgTmFtZScpLFxyXG4gICAgICAgICAgICBoKCdkaXYuY3ktdG9vbHRpcC1maWVsZC12YWx1ZScsIGRpc3BsYXlOYW1lKVxyXG4gICAgICAgICAgXSkgOiBudWxsLFxyXG4gICAgICAgICAgc2hvd1N5bm9ueW1zID8gaCgnZGl2LmN5LXRvb2x0aXAtc2VjdGlvbicsIFtcclxuICAgICAgICAgICAgaCgnZGl2LmN5LXRvb2x0aXAtZmllbGQtbmFtZScsIFtcclxuICAgICAgICAgICAgICAnU3lub255bXMnLFxyXG4gICAgICAgICAgICBdKSxcclxuICAgICAgICAgICAgaCgnZGl2LmN5LXRvb2x0aXAtZmllbGQtdmFsdWUnLCBzeW5vbnltcy5zbGljZSgwLCBERUZBVUxUX05VTV9OQU1FUykuam9pbignLCAnKSlcclxuICAgICAgICAgIF0pIDogbnVsbCxcclxuICAgICAgICAgIHNob3dQdWJzID8gaCgnZGl2LmN5LXRvb2x0aXAtc2VjdGlvbicsIFtcclxuICAgICAgICAgICAgaCgnZGl2LmN5LXRvb2x0aXAtZmllbGQtbmFtZScsIFtcclxuICAgICAgICAgICAgICAnUHVibGljYXRpb25zJyxcclxuICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgIGgoJ2RpdicsIHB1YmxpY2F0aW9uRWxlcylcclxuICAgICAgICAgIF0pIDogbnVsbFxyXG4gICAgICAgIF0pOiBudWxsLFxyXG4gICAgICAgIHNob3dGb290ZXIgPyBoKCdkaXYuY3ktdG9vbHRpcC1mb290ZXInLCBbXHJcbiAgICAgICAgICBzaG93TGlua3MgPyBoKCdkaXYuY3ktdG9vbHRpcC1zZWN0aW9uJywgW1xyXG4gICAgICAgICAgICBoKCdkaXYuY3ktdG9vbHRpcC1maWVsZC1uYW1lJywgW1xyXG4gICAgICAgICAgICAgICdMaW5rcycsXHJcbiAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICBoKCdkaXYuY3ktdG9vbHRpcC1saW5rcycsIGRiTGlua3MpXHJcbiAgICAgICAgICBdKSA6IG51bGxcclxuICAgICAgICBdKTogbnVsbCxcclxuICAgICAgICBzaG93UGNTZWFyY2hMaW5rID8gaCgnZGl2LmN5LXRvb2x0aXAtY2FsbC10by1hY3Rpb24nLCBbXHJcbiAgICAgICAgICBoKCdhJywge1xyXG4gICAgICAgICAgICB0YXJnZXQ6ICdfYmxhbmsnLFxyXG4gICAgICAgICAgICBocmVmOiAnL3NlYXJjaD9xPScgKyBzZWFyY2hMaW5rUXVlcnlcclxuICAgICAgICAgIH0sIFtcclxuICAgICAgICAgICAgaCgnYnV0dG9uLmNhbGwtdG8tYWN0aW9uJywgJ0ZpbmQgUmVsYXRlZCBQYXRod2F5cycpXHJcbiAgICAgICAgICBdKVxyXG4gICAgICAgIF0pIDogbnVsbFxyXG4gICAgICBdKVxyXG4gICAgXSk7XHJcbiAgfVxyXG59XHJcblxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQYXRod2F5Tm9kZU1ldGFkYXRhVmlldztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY2xpZW50L2ZlYXR1cmVzL3BhdGh3YXlzL3BhdGh3YXktbm9kZS1tZXRhZGF0YS5qcyIsImNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcclxuY29uc3QgaCA9IHJlcXVpcmUoJ3JlYWN0LWh5cGVyc2NyaXB0Jyk7XHJcbmNvbnN0IF8gPSByZXF1aXJlKCdsb2Rhc2gnKTtcclxuXHJcbmNvbnN0IHsgU2VydmVyQVBJIH0gPSByZXF1aXJlKCcuLi8uLi9zZXJ2aWNlcycpO1xyXG5cclxuY29uc3QgeyBET0lfQkFTRV9VUkwsIElERU5USUZJRVJTX1VSTCwgUFVCTUVEX0JBU0VfVVJMIH0gPSByZXF1aXJlKCAnLi4vLi4vLi4vY29uZmlnLmpzJyApO1xyXG5cclxuLy8gQSBjb21wb25lbnQgdGhhdCBkaXNwbGF5cyBhIHBhdGh3YXkgdGl0bGVcclxuLy8gcHJvcHM6XHJcbi8vIC0gcGF0aHdheTogTW9kZWwgaW5zdGFuY2VcclxuY2xhc3MgUGF0aHdheVRpdGxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICBjb25zdHJ1Y3Rvcihwcm9wcyl7XHJcbiAgICBzdXBlcihwcm9wcyk7XHJcblxyXG4gICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgcHVibGljYXRpb25zOiBbXVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN1cHBvcnRzIFB1YmxpY2F0aW9uWHJlZnMgZnJvbSBQdWJNZWQ7IGluIHByaW5jaXBsZSwgY291bGQgYmUgYW55IHNvdXJjZSAoZS5nLiBiaW9SeGl2KS5cclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxBcnJheT59IC0gQXJyYXkgb2YgcHVibGljYXRpb24gb2JqZWN0c1xyXG4gICAqL1xyXG4gIGFzeW5jIGxvYWRQdWJsaWNhdGlvbnMoKXtcclxuICAgIGNvbnN0IG5vcm1hbGl6ZVB1Ym1lZFJlY29yZCA9IHJlY29yZCA9PiB7XHJcbiAgICAgIGNvbnN0IHsgc291cmNlOiBqb3VybmFsLCBkYXRlLCBmaXJzdEF1dGhvciwgZG9pLCBwdWJtZWQgIH0gPSByZWNvcmQ7XHJcbiAgICAgIHJldHVybiB7IGpvdXJuYWwsIGRhdGUsIGZpcnN0QXV0aG9yLCBkb2ksIHB1Ym1lZCB9O1xyXG4gICAgfTtcclxuICAgIGNvbnN0IE1BWF9QVUJTID0gMTA7XHJcbiAgICBjb25zdCBpc1B1Ym1lZFhyZWYgPSAoeyBkYiB9KSA9PiBkYiA9PT0gJ3B1Ym1lZCc7XHJcbiAgICBjb25zdCB7IHBhdGh3YXkgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBjb25zdCBwdWJtZWRJZHMgPSBwYXRod2F5LnB1YmxpY2F0aW9uWHJlZnMoKS5zbGljZSggMCwgTUFYX1BVQlMgKS5maWx0ZXIoIGlzUHVibWVkWHJlZiApLm1hcCggKHsgaWQgfSkgPT4gaWQgKTtcclxuICAgIHRyeSB7XHJcbiAgICAgIHJldHVybiBTZXJ2ZXJBUEkuZ2V0UHVibWVkUHVibGljYXRpb25zKCBwdWJtZWRJZHMgKS5tYXAoIG5vcm1hbGl6ZVB1Ym1lZFJlY29yZCApO1xyXG4gICAgfSBjYXRjaCggZXJyICl7XHJcbiAgICAgIC8vIFN3YWxsb3cgZXJyb3JcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGNvbXBvbmVudERpZE1vdW50KCl7XHJcbiAgICBjb25zdCBwdWJsaWNhdGlvbnMgPSBhd2FpdCB0aGlzLmxvYWRQdWJsaWNhdGlvbnMoKTtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHRoaXMuc2V0U3RhdGUoeyBwdWJsaWNhdGlvbnMgfSwgKCkgPT4gcmVzb2x2ZSggcHVibGljYXRpb25zICkpKTtcclxuICB9XHJcblxyXG4gIC8vIEVuaGFuY2UgdGhlIG5hbWUgd2l0aCBhIGxpbmsgdG8gYSBzb3VyY2UgcGFnZSBpZiBwb3NzaWJsZVxyXG4gIGdldE5hbWUoKXtcclxuICAgIC8vIENyYXBzaG9vdCB3aGV0aGVyIGEgREIgaGFzIGEgcmVzb2x2YWJsZSBVUkwgb3Igbm90XHJcbiAgICBjb25zdCBEQl9QUkVGSVhfMl9VUkxfVEVNUExBVEUgPSBuZXcgTWFwKFtcclxuICAgICAgWydiaW9mYWN0b2lkJywgYCR7SURFTlRJRklFUlNfVVJMfS9iaW9mYWN0b2lkOmBdLFxyXG4gICAgICBbJ3BhbnRoZXIucGF0aHdheScsIGAke0lERU5USUZJRVJTX1VSTH0vcGFudGhlci5wYXRod2F5OmBdLFxyXG4gICAgICBbJ3NtcGRiJywgYCR7SURFTlRJRklFUlNfVVJMfS9zbXBkYjpgXSxcclxuICAgICAgWydyZWFjdG9tZScsIGAke0lERU5USUZJRVJTX1VSTH0vcmVhY3RvbWU6YF1cclxuICAgIF0pO1xyXG4gICAgY29uc3QgaXNTdXBwb3J0ZWREYiA9ICh7IGRiIH0pID0+IERCX1BSRUZJWF8yX1VSTF9URU1QTEFURS5oYXMoIGRiICk7XHJcbiAgICBjb25zdCB7IHBhdGh3YXkgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBsZXQgbmFtZSA9IHBhdGh3YXkubmFtZSgpO1xyXG5cclxuICAgIGxldCB1bmlYcmVmcyA9IHBhdGh3YXkudW5pZmljYXRpb25YcmVmcygpO1xyXG4gICAgaWYoICFfLmlzRW1wdHkoIHVuaVhyZWZzICkgKXtcclxuICAgICAgdW5pWHJlZnMgPSB1bmlYcmVmcy5maWx0ZXIoIGlzU3VwcG9ydGVkRGIgKTtcclxuICAgICAgaWYoIHVuaVhyZWZzLmxlbmd0aCApe1xyXG4gICAgICAgIGNvbnN0IHsgZGIsIGlkIH0gPSBfLmZpcnN0KCB1bmlYcmVmcyApO1xyXG4gICAgICAgIGNvbnN0IGJhc2VVcmwgPSBEQl9QUkVGSVhfMl9VUkxfVEVNUExBVEUuZ2V0KCBkYiApO1xyXG4gICAgICAgIGNvbnN0IGhyZWYgPSBgJHtiYXNlVXJsfSR7aWR9YDtcclxuICAgICAgICBuYW1lID0gWyBoKCdhLmhpZ2hsaWdodC1saW5rJywgeyBocmVmLCB0YXJnZXQ6ICdfYmxhbmsnIH0sIG5hbWUpIF07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbmFtZTtcclxuICB9XHJcblxyXG4gIC8vIEFkZCBhbiBhcnRpY2xlIGxpbmsgd2hlbiBkaXJlY3RseSByZWxldmFudCB0byBwYXRod2F5IChpLmUuIEJpb2ZhY3RvaWQhKVxyXG4gIGdldFNvdXJjZSgpe1xyXG4gICAgY29uc3QgQVJUSUNMRV9TVVBQT1JURURfREFUQVNPVVJDRVMgPSBuZXcgU2V0KFsgJ0Jpb2ZhY3RvaWQnIF0pO1xyXG4gICAgY29uc3QgeyBwYXRod2F5IH0gPSB0aGlzLnByb3BzO1xyXG4gICAgY29uc3QgeyBwdWJsaWNhdGlvbnMgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBjb25zdCBkYXRhc291cmNlID0gcGF0aHdheS5kYXRhc291cmNlKCk7XHJcbiAgICBsZXQgc291cmNlID0gWyBoKCdhJywgeyBocmVmOiBwYXRod2F5LmRhdGFzb3VyY2VVcmwoKSwgdGFyZ2V0OiAnX2JsYW5rJyB9LCAnICcgKyBkYXRhc291cmNlICkgXTtcclxuXHJcbiAgICBpZiggQVJUSUNMRV9TVVBQT1JURURfREFUQVNPVVJDRVMuaGFzKCBkYXRhc291cmNlICkgJiYgcHVibGljYXRpb25zLmxlbmd0aCApe1xyXG4gICAgICBjb25zdCB7IGpvdXJuYWwsIGRhdGUsIGZpcnN0QXV0aG9yLCBkb2ksIHB1Ym1lZCB9ID0gXy5maXJzdCggcHVibGljYXRpb25zICk7XHJcbiAgICAgIGNvbnN0IGF1dGhvciA9IGgoJ3NwYW4nLCBgICR7Zmlyc3RBdXRob3J9IGV0IGFsLmApO1xyXG4gICAgICBjb25zdCByZWZlcmVuY2UgPSBoKCBkb2kgPyAnYS5wbGFpbi1saW5rJyA6ICdzcGFuJywgZG9pID8geyBocmVmOiBgJHtET0lfQkFTRV9VUkx9JHtkb2l9YCwgdGFyZ2V0OiAnX2JsYW5rJyB9IDogbnVsbCwgYCR7am91cm5hbH0gJHtkYXRlfWAgKTtcclxuICAgICAgc291cmNlLnB1c2goIGgoJ3NwYW4nLCAnIHwgJyksIGF1dGhvciwgJyAnLCByZWZlcmVuY2UgKTtcclxuICAgICAgaWYoIHB1Ym1lZCApe1xyXG4gICAgICAgIGNvbnN0IHB1Ym1lZExpbmsgPSBoKCdhLnBsYWluLWxpbmsnLCB7IGhyZWY6IGAke1BVQk1FRF9CQVNFX1VSTH0ke3B1Ym1lZH1gLCB0YXJnZXQ6ICdfYmxhbmsnIH0sICdQdWJNZWQnICk7XHJcbiAgICAgICAgc291cmNlLnB1c2goICcgwrcgJywgcHVibWVkTGluayApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc291cmNlO1xyXG4gIH1cclxuXHJcbiAgcmVuZGVyKCl7XHJcbiAgICBsZXQgbmFtZSA9IHRoaXMuZ2V0TmFtZSgpO1xyXG4gICAgbGV0IHNvdXJjZSA9IHRoaXMuZ2V0U291cmNlKCk7XHJcblxyXG4gICAgcmV0dXJuIGgoJ2Rpdi5wYXRod2F5LXRpdGxlJywgW1xyXG4gICAgICBoKCdkaXYucGF0aHdheS10aXRsZS1uYW1lJywgbmFtZSApLFxyXG4gICAgICBoKCdkaXYucGF0aHdheS10aXRsZS1zb3VyY2UnLCBzb3VyY2UgKVxyXG4gICAgXSk7XHJcbiAgfVxyXG59XHJcblxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQYXRod2F5VGl0bGU7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NsaWVudC9mZWF0dXJlcy9wYXRod2F5cy9wYXRod2F5LXRpdGxlLmpzIiwiY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xyXG5jb25zdCBoID0gcmVxdWlyZSgncmVhY3QtaHlwZXJzY3JpcHQnKTtcclxuY29uc3QgTGluayA9IHJlcXVpcmUoJ3JlYWN0LXJvdXRlci1kb20nKS5MaW5rO1xyXG5jb25zdCBMb2FkZXIgPSByZXF1aXJlKCdyZWFjdC1sb2FkZXInKTtcclxuY29uc3QgY2xhc3NOYW1lcyA9IHJlcXVpcmUoJ2NsYXNzbmFtZXMnKTtcclxuY29uc3QgcXVlcnlTdHJpbmcgPSByZXF1aXJlKCdxdWVyeS1zdHJpbmcnKTtcclxuY29uc3QgXyA9IHJlcXVpcmUoJ2xvZGFzaCcpO1xyXG5cclxuY29uc3QgeyBGQUNUT0lEX1VSTCB9ID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uZmlnJyk7XHJcbmNvbnN0IHsgU2VydmVyQVBJIH0gPSByZXF1aXJlKCcuLi8uLi9zZXJ2aWNlcycpO1xyXG5cclxuY29uc3QgUGNMb2dvTGluayA9IHJlcXVpcmUoJy4uLy4uL2NvbW1vbi9jb21wb25lbnRzL3BjLWxvZ28tbGluaycpO1xyXG5cclxuY29uc3QgeyBQYXRod2F5UmVzdWx0c1ZpZXcgfSA9IHJlcXVpcmUoJy4vcGF0aHdheS1yZXN1bHRzLXZpZXcnKTtcclxuY29uc3QgeyBHZW5lUmVzdWx0c1ZpZXcgfSA9IHJlcXVpcmUoJy4vZ2VuZS1yZXN1bHRzLXZpZXcnKTtcclxuY29uc3QgeyBUaW1lb3V0RXJyb3IgfSA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWwnKTtcclxuY29uc3QgeyBFcnJvck1lc3NhZ2UgfSA9IHJlcXVpcmUoJy4uLy4uL2NvbW1vbi9jb21wb25lbnRzL2Vycm9yLW1lc3NhZ2UnKTtcclxuY29uc3QgeyBGZWF0dXJlVmlldyB9ID0gcmVxdWlyZSgnLi9mZWF0dXJlLXZpZXcnKTtcclxuY29uc3QgeyBDb250cmlidXRlIH0gPSByZXF1aXJlKCcuLi8uLi9jb21tb24vY29tcG9uZW50cy9jb250cmlidXRlJyk7XHJcblxyXG5jbGFzcyBTZWFyY2ggZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgc3VwZXIocHJvcHMpO1xyXG5cclxuICAgIGNvbnN0IHF1ZXJ5ID0gcXVlcnlTdHJpbmcucGFyc2UocHJvcHMubG9jYXRpb24uc2VhcmNoKTtcclxuXHJcbiAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICBxdWVyeTogXy5hc3NpZ24oe1xyXG4gICAgICAgIHE6ICcnLFxyXG4gICAgICAgIHR5cGU6ICdQYXRod2F5JyxcclxuICAgICAgICBkYXRhc291cmNlOiBbXVxyXG4gICAgICB9LCBxdWVyeSksXHJcbiAgICAgIGdlbmVSZXN1bHRzOiBudWxsLFxyXG4gICAgICBzZWFyY2hIaXRzOiBudWxsLFxyXG4gICAgICBmZWF0dXJlOiBudWxsLFxyXG4gICAgICBkYXRhU291cmNlczogW10sXHJcbiAgICAgIGxvYWRpbmc6IGZhbHNlLFxyXG4gICAgICBlcnJvcjogbnVsbCxcclxuICAgICAgUENfVVJMOiBudWxsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZ2V0U2VhcmNoUmVzdWx0KCkge1xyXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLnN0YXRlO1xyXG4gICAgY29uc3QgcXVlcnkgPSBzdGF0ZS5xdWVyeTtcclxuXHJcbiAgICBpZiAocXVlcnkucSAhPT0gJycpIHtcclxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgbG9hZGluZzogdHJ1ZSxcclxuICAgICAgfSk7XHJcbiAgICAgIFNlcnZlckFQSS5zZWFyY2goIHF1ZXJ5ICkudGhlbiggcmVzID0+IHtcclxuICAgICAgICBsZXQgeyBnZW5lcywgc2VhcmNoSGl0cywgZmVhdHVyZSwgZGF0YVNvdXJjZXMgfSA9IHJlcztcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgIGdlbmVSZXN1bHRzOiBnZW5lcyxcclxuICAgICAgICAgIHNlYXJjaEhpdHMsXHJcbiAgICAgICAgICBmZWF0dXJlLFxyXG4gICAgICAgICAgZGF0YVNvdXJjZXMsXHJcbiAgICAgICAgICBsb2FkaW5nOiBmYWxzZSxcclxuICAgICAgICAgIGVycm9yOiBudWxsXHJcbiAgICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBudWxsOyAvLyBCbHVlYmlyZCB3YXJuaW5nXHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaCggZSA9PiB0aGlzLnNldFN0YXRlKHsgZXJyb3I6IGUsIGxvYWRpbmc6IGZhbHNlIH0pKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xyXG4gICAgdGhpcy5nZXRTZWFyY2hSZXN1bHQoKTtcclxuICAgIHJldHVybiBTZXJ2ZXJBUEkuZ2V0UENVUkwoKVxyXG4gICAgICAudGhlbiggUENfVVJMID0+IHRoaXMuc2V0U3RhdGUoeyBQQ19VUkwgfSkgKTtcclxuICB9XHJcblxyXG4gIG9uU2VhcmNoVmFsdWVDaGFuZ2UoZSkge1xyXG4gICAgLy8gaWYgdGhlIHVzZXIgcHJlc3NlcyBlbnRlciwgc3VibWl0IHRoZSBxdWVyeVxyXG4gICAgaWYgKGUud2hpY2ggJiYgZS53aGljaCA9PT0gMTMpIHtcclxuICAgICAgdGhpcy5zdWJtaXRTZWFyY2hRdWVyeShlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IG5ld1F1ZXJ5U3RhdGUgPSBfLmFzc2lnbih7fSwgdGhpcy5zdGF0ZS5xdWVyeSk7XHJcbiAgICAgIG5ld1F1ZXJ5U3RhdGUucSA9IGUudGFyZ2V0LnZhbHVlO1xyXG4gICAgICB0aGlzLnNldFN0YXRlKHsgcXVlcnk6IG5ld1F1ZXJ5U3RhdGUgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRBbmRTdWJtaXRTZWFyY2hRdWVyeShxdWVyeSkge1xyXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLnN0YXRlO1xyXG4gICAgaWYgKCFzdGF0ZS5zZWFyY2hMb2FkaW5nKSB7XHJcbiAgICAgIGNvbnN0IG5ld1F1ZXJ5U3RhdGUgPSBfLmFzc2lnbih7fSwgc3RhdGUucXVlcnksIHF1ZXJ5KTtcclxuICAgICAgdGhpcy5zZXRTdGF0ZSh7IHF1ZXJ5OiBuZXdRdWVyeVN0YXRlIH0sICgpID0+IHRoaXMuc3VibWl0U2VhcmNoUXVlcnkoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdWJtaXRTZWFyY2hRdWVyeSgpIHtcclxuICAgIGNvbnN0IHByb3BzID0gdGhpcy5wcm9wcztcclxuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5zdGF0ZTtcclxuICAgIGNvbnN0IHF1ZXJ5ID0gc3RhdGUucXVlcnk7XHJcblxyXG4gICAgcHJvcHMuaGlzdG9yeS5wdXNoKHtcclxuICAgICAgcGF0aG5hbWU6ICcvc2VhcmNoJyxcclxuICAgICAgc2VhcmNoOiBxdWVyeVN0cmluZy5zdHJpbmdpZnkocXVlcnkpLFxyXG4gICAgICBzdGF0ZToge31cclxuICAgIH0pO1xyXG4gICAgdGhpcy5nZXRTZWFyY2hSZXN1bHQoKTtcclxuICB9XHJcblxyXG4gIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgKG5leHRQcm9wcykge1xyXG4gICAgY29uc3QgbmV4dFNlYXJjaCA9IG5leHRQcm9wcy5sb2NhdGlvbi5zZWFyY2g7XHJcbiAgICBpZiggdGhpcy5wcm9wcy5sb2NhdGlvbi5zZWFyY2ggIT09ICBuZXh0U2VhcmNoKXtcclxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgcXVlcnk6IF8uYXNzaWduKHtcclxuICAgICAgICAgIHE6ICcnLFxyXG4gICAgICAgICAgdHlwZTogJ1BhdGh3YXknLFxyXG4gICAgICAgICAgZGF0YXNvdXJjZTogW11cclxuICAgICAgICAgIH0sIHF1ZXJ5U3RyaW5nLnBhcnNlKG5leHRTZWFyY2gpKX0gLCAoKT0+e1xyXG4gICAgICAgICAgICB0aGlzLmdldFNlYXJjaFJlc3VsdCgpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW5kZXIoKSB7XHJcbiAgICBsZXQgeyBnZW5lUmVzdWx0cywgc2VhcmNoSGl0cywgZmVhdHVyZSwgcXVlcnksIGxvYWRpbmcsIGRhdGFTb3VyY2VzLCBQQ19VUkwgfSA9IHRoaXMuc3RhdGU7XHJcblxyXG4gICAgY29uc3Qgc2VhcmNoTGlzdGluZyA9IGgoTG9hZGVyLCB7IGxvYWRlZDogIWxvYWRpbmcsIG9wdGlvbnM6IHsgbGVmdDogJzUwJScsIGNvbG9yOiAnIzE2QTA4NScgfSB9LCBbXHJcbiAgICAgIGgoJ2Rpdi5zZWFyY2gtcmVzdWx0cy1oZWFkZXInLCBbXHJcbiAgICAgICAgaCgncC5zZWFyY2gtcmVzdWx0cy1oZWFkZXItdGl0bGUnLCB7XHJcbiAgICAgICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoe1xyXG4gICAgICAgICAgICAnaGlkZGVuJzogXy5pc0VtcHR5KGdlbmVSZXN1bHRzKSAmJiBfLmlzRW1wdHkoc2VhcmNoSGl0cylcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfSwgJ0V4cGxvcmUgaG93IHlvdXIgcXVlcnkgaXMgY29ubmVjdGVkIHRvIG1pbGxpb25zIG9mIGN1cmF0ZWQgaW50ZXJhY3Rpb25zJyksXHJcbiAgICAgICAgaCgncC5zZWFyY2gtcmVzdWx0cy1oZWFkZXItc3VidGl0bGUnLCBbXHJcbiAgICAgICAgICAnUGF0aHdheSBDb21tb25zIGFjY2VwdHMgY29udHJpYnV0aW9ucyAtICcsXHJcbiAgICAgICAgICBoKCdhLnBsYWluLWxpbmsnLCB7XHJcbiAgICAgICAgICAgIGhyZWY6IGAke0ZBQ1RPSURfVVJMfWAsXHJcbiAgICAgICAgICAgIHRhcmdldDogJ19ibGFuaydcclxuICAgICAgICAgIH0sICdhZGQgaW50ZXJhY3Rpb25zIGZyb20geW91ciBwdWJsaWNhdGlvbicpXHJcbiAgICAgICAgXSksXHJcbiAgICAgIF0pLFxyXG4gICAgICBoKCdkaXYuc2VhcmNoLXJlc3VsdHMtY29udGVudCcsIFtcclxuICAgICAgICBoKEZlYXR1cmVWaWV3LCB7IGZlYXR1cmUgfSksXHJcbiAgICAgICAgaChHZW5lUmVzdWx0c1ZpZXcsIHsgZ2VuZVJlc3VsdHMgfSApLFxyXG4gICAgICAgIGgoUGF0aHdheVJlc3VsdHNWaWV3LCB7IHNlYXJjaEhpdHMsIHF1ZXJ5LCBjb250cm9sbGVyOiB0aGlzLCBkYXRhU291cmNlcywgaGFzRmVhdHVyZTogZmVhdHVyZSAhPSBudWxsIH0pXHJcbiAgICAgIF0pXHJcbiAgICBdKTtcclxuXHJcbiAgICBsZXQgZXJyb3JNZXNzYWdlO1xyXG4gICAgaWYoIHRoaXMucHJvcHMubm90Rm91bmRFcnJvciApIHtcclxuICAgICAgZXJyb3JNZXNzYWdlID0gaCggRXJyb3JNZXNzYWdlLCB7IHRpdGxlOiAnV2UgY291bGRuXFwndCBmaW5kIHRoZSByZXNvdXJjZSB5b3UgYXJlIGxvb2tpbmcgZm9yJywgYm9keTogJ0NoZWNrIHRoZSBsb2NhdGlvbiBhbmQgdHJ5IGFnYWluLicgfSApO1xyXG4gICAgfSBlbHNlIGlmKCB0aGlzLnN0YXRlLmVycm9yIGluc3RhbmNlb2YgVGltZW91dEVycm9yICkge1xyXG4gICAgICBlcnJvck1lc3NhZ2UgPSBoKCBFcnJvck1lc3NhZ2UsIHsgdGl0bGU6ICdUaGlzIGlzIHRha2luZyBsb25nZXIgdGhhbiBleHBlY3RlZCcsIGJvZHk6ICdUcnkgYWdhaW4gbGF0ZXIuJyB9ICApO1xyXG4gICAgfSBlbHNlIGlmKCB0aGlzLnN0YXRlLmVycm9yICkge1xyXG4gICAgICBlcnJvck1lc3NhZ2UgPSBoKCBFcnJvck1lc3NhZ2UgKTtcclxuICAgIH1cclxuICAgIGxldCBzZWFyY2hCb2R5ID0gZXJyb3JNZXNzYWdlID8gZXJyb3JNZXNzYWdlIDogc2VhcmNoTGlzdGluZztcclxuXHJcbiAgICByZXR1cm4gaCgnZGl2LnNlYXJjaCcsIFtcclxuICAgICAgaCgnZGl2LnNlYXJjaC1uYXYtbGlua3MnLCBbXHJcbiAgICAgICAgaCgnYScsIHtcclxuICAgICAgICAgIGhyZWY6IFBDX1VSTCxcclxuICAgICAgICAgIHRhcmdldDogJ19ibGFuaydcclxuICAgICAgICB9LCAnQWJvdXQnKSxcclxuXHJcbiAgICAgICAgaCgnYScsIHtcclxuICAgICAgICAgIGhyZWY6IFBDX1VSTCArICcjZmFxJyxcclxuICAgICAgICAgIHRhcmdldDogJ19ibGFuaydcclxuICAgICAgICB9LCAnRkFRJyksXHJcblxyXG4gICAgICAgIGgoJ2EnLCB7XHJcbiAgICAgICAgICBocmVmOiBQQ19VUkwgKyAnI3RyYWluaW5nJyxcclxuICAgICAgICAgIHRhcmdldDogJ19ibGFuaydcclxuICAgICAgICB9LCAnVHJhaW5pbmcnKSxcclxuXHJcbiAgICAgICAgaCgnYScsIHtcclxuICAgICAgICAgIGhyZWY6IFBDX1VSTCArICcjZGF0YScsXHJcbiAgICAgICAgICB0YXJnZXQ6ICdfYmxhbmsnXHJcbiAgICAgICAgfSwgJ0RhdGEnKSxcclxuXHJcbiAgICAgICAgaCgnYScsIHtcclxuICAgICAgICAgIGhyZWY6IFBDX1VSTCArICcjY29udGFjdCcsXHJcbiAgICAgICAgICB0YXJnZXQ6ICdfYmxhbmsnXHJcbiAgICAgICAgfSwgJ0NvbnRhY3QnKSxcclxuXHJcbiAgICAgICAgaChDb250cmlidXRlLCB7dGV4dDogJ0NvbnRyaWJ1dGUnfSlcclxuICAgICAgXSksXHJcbiAgICAgIGgoJ2Rpdi5zZWFyY2gtaGVhZGVyJywgW1xyXG4gICAgICAgIGgoJ2Rpdi5zZWFyY2gtYnJhbmRpbmcnLCBbXHJcbiAgICAgICAgICBoKFBjTG9nb0xpbmssIHsgY2xhc3NOYW1lOiAnc2VhcmNoLWxvZ28nfSApLFxyXG4gICAgICAgICAgaCgnZGl2LnNlYXJjaC1icmFuZGluZy1kZXNjcmlwdG9yJywgW1xyXG4gICAgICAgICAgICBoKCdoMi5zZWFyY2gtc3VidGl0bGUnLCAnUGF0aHdheSBDb21tb25zJyksXHJcbiAgICAgICAgICAgIGgoJ2gxLnNlYXJjaC10aXRsZScsICdTZWFyY2gnKVxyXG4gICAgICAgICAgXSlcclxuICAgICAgICBdKSxcclxuICAgICAgICBoKCdkaXYuc2VhcmNoLXNlYXJjaGJhci1jb250YWluZXInLCB7XHJcbiAgICAgICAgICByZWY6IGRvbSA9PiB0aGlzLnNlYXJjaEJhciA9IGRvbVxyXG4gICAgICAgIH0sIFtcclxuICAgICAgICAgIGgoJ2Rpdi5zZWFyY2gtc2VhcmNoYmFyJywgW1xyXG4gICAgICAgICAgICBoKCdpbnB1dCcsIHtcclxuICAgICAgICAgICAgICB0eXBlOiAndGV4dCcsXHJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICdFbnRlciBwYXRod2F5IG5hbWUgb3IgZ2VuZSBuYW1lcycsXHJcbiAgICAgICAgICAgICAgdmFsdWU6IHF1ZXJ5LnEsXHJcbiAgICAgICAgICAgICAgbWF4TGVuZ3RoOiAyNTAsIC8vIDI1MCBjaGFycyBtYXggb2YgdXNlciBpbnB1dFxyXG4gICAgICAgICAgICAgIG9uQ2hhbmdlOiBlID0+IHRoaXMub25TZWFyY2hWYWx1ZUNoYW5nZShlKSxcclxuICAgICAgICAgICAgICBvbktleVByZXNzOiBlID0+IHRoaXMub25TZWFyY2hWYWx1ZUNoYW5nZShlKVxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgaChMaW5rLCB7IHRvOiB7IHBhdGhuYW1lOiAnL3NlYXJjaCcsIHNlYXJjaDogcXVlcnlTdHJpbmcuc3RyaW5naWZ5KHF1ZXJ5KX0sY2xhc3NOYW1lOlwic2VhcmNoLXNlYXJjaC1idXR0b25cIn0sIFtcclxuICAgICAgICAgICAgICBoKCdpLm1hdGVyaWFsLWljb25zJywgJ3NlYXJjaCcpXHJcbiAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICBdKSxcclxuICAgICAgICAgIGgoJ2Rpdi5zZWFyY2gtc3VnZ2VzdGlvbnMnLCBbXHJcbiAgICAgICAgICAgICdlLmcuICcsXHJcbiAgICAgICAgICAgIGgoTGluaywgeyB0bzogeyBwYXRobmFtZTogJy9zZWFyY2gnLCBzZWFyY2g6IHF1ZXJ5U3RyaW5nLnN0cmluZ2lmeShfLmFzc2lnbih7fSwgcXVlcnksIHtxOiAnY2VsbCBjeWNsZSd9KSkgfX0sICdjZWxsIGN5Y2xlLCAnKSxcclxuICAgICAgICAgICAgaChMaW5rLCB7IHRvOiB7IHBhdGhuYW1lOiAnL3NlYXJjaCcsIHNlYXJjaDogcXVlcnlTdHJpbmcuc3RyaW5naWZ5KF8uYXNzaWduKHt9LCBxdWVyeSwge3E6ICdTUkMgVExOMSBETEMxIFBYTiBWQ0wgS0FOSzEnfSkpIH19LCAnU1JDIFRMTjEgRExDMSBQWE4gVkNMIEtBTksxLCAnKSxcclxuICAgICAgICAgICAgaChMaW5rLCB7IHRvOiB7IHBhdGhuYW1lOiAnL3NlYXJjaCcsIHNlYXJjaDogcXVlcnlTdHJpbmcuc3RyaW5naWZ5KF8uYXNzaWduKHt9LCBxdWVyeSwge3E6ICd1bmlwcm90OlE5WTQ5MCd9KSkgfX0sICd1bmlwcm90OlE5WTQ5MCcpXHJcbiAgICAgICAgICBdKVxyXG4gICAgICAgIF0pXHJcbiAgICAgIF0pLFxyXG4gICAgICBoKCdkaXYuc2VhcmNoLWJvZHknLCBbc2VhcmNoQm9keV0pXHJcbiAgICBdKTtcclxuICB9XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gU2VhcmNoO1xyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY2xpZW50L2ZlYXR1cmVzL3NlYXJjaC9pbmRleC5qcyIsImNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcclxuY29uc3QgaCA9IHJlcXVpcmUoJ3JlYWN0LWh5cGVyc2NyaXB0Jyk7XHJcbmNvbnN0IExpbmsgPSByZXF1aXJlKCdyZWFjdC1yb3V0ZXItZG9tJykuTGluaztcclxuY29uc3QgcXVlcnlTdHJpbmcgPSByZXF1aXJlKCdxdWVyeS1zdHJpbmcnKTtcclxuY29uc3QgXyA9IHJlcXVpcmUoJ2xvZGFzaCcpO1xyXG5jb25zdCBjbGFzc05hbWVzID0gcmVxdWlyZSgnY2xhc3NuYW1lcycpO1xyXG5cclxuY29uc3QgeyBFcnJvck1lc3NhZ2UgfSA9IHJlcXVpcmUoJy4uLy4uL2NvbW1vbi9jb21wb25lbnRzL2Vycm9yLW1lc3NhZ2UnKTtcclxuXHJcbmNsYXNzIFBhdGh3YXlSZXN1bHRzVmlldyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgcmVuZGVyKCl7XHJcbiAgICBsZXQgeyBzZWFyY2hIaXRzOiBwYXRod2F5UmVzdWx0cywgY29udHJvbGxlciwgcXVlcnkgLCBkYXRhU291cmNlcywgaGFzRmVhdHVyZSB9ID0gdGhpcy5wcm9wcztcclxuICAgIGNvbnN0IGN1ckRhdGFzb3VyY2UgPSBxdWVyeS5kYXRhc291cmNlO1xyXG4gICAgY29uc3Qgc291cmNlcyA9IGRhdGFTb3VyY2VzLmZpbHRlciggc291cmNlID0+IHF1ZXJ5LnR5cGUgPT09ICdQYXRod2F5JyA/IHNvdXJjZS5udW1QYXRod2F5cyA6IHNvdXJjZS5udW1JbnRlcmFjdGlvbnMgKTtcclxuICAgIGNvbnN0IG5vUGF0aHdheXNNc2cgPSBoKCBFcnJvck1lc3NhZ2UsIHsgdGl0bGU6ICdZb3VyIHNlYXJjaCBkaWRuXFwndCBtYXRjaCBhbnkgcGF0aHdheXMnLCBmb290ZXI6ICdUcnkgZGlmZmVyZW50IGtleXdvcmRzIG9yIGdlbmUgbmFtZXMuJ30gKTtcclxuXHJcbiAgICBpZiggcGF0aHdheVJlc3VsdHMgPT09IG51bGwgKXtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc2VhcmNoTGlzdCA9IHBhdGh3YXlSZXN1bHRzLm1hcCggKCByZXN1bHQsIGluZGV4ICkgPT4ge1xyXG4gICAgICBsZXQgZHNJbmZvID0gXy5nZXQoIHJlc3VsdCwgJ3NvdXJjZUluZm8nLCAnJyApO1xyXG4gICAgICBsZXQgaWNvblVybCA9IGRzSW5mby5pY29uVXJsIHx8ICcnO1xyXG4gICAgICBsZXQgbmFtZSA9IGRzSW5mby5uYW1lIHx8ICcnO1xyXG4gICAgICBjb25zdCBwYXRod2F5VGl0bGUgPSByZXN1bHQubmFtZTsgICAgICBcclxuICAgICAgY29uc3QgdG9wSGl0ID0gaW5kZXggPT09IDA7XHJcbiAgICAgIGNvbnN0IGhhc1ByZXZpZXcgPSByZXN1bHQucHJldmlld1VybDtcclxuICAgICAgY29uc3Qgc2hvd1ByZXZpZXcgPSB0b3BIaXQgJiYgaGFzUHJldmlldztcclxuICAgIFxyXG4gICAgICBsZXQgaXRlbTtcclxuICAgICAgY29uc3QgaXRlbUxpbmsgPSBjaGlsZHJlbiA9PiBoKExpbmssIHsgY2xhc3NOYW1lOiAncGxhaW4tbGluaycsIHRvOiB7IHBhdGhuYW1lOiAnL3BhdGh3YXlzJywgc2VhcmNoOiBxdWVyeVN0cmluZy5zdHJpbmdpZnkoeyB1cmk6IHJlc3VsdC51cmkgfSkgfSwgdGFyZ2V0OiAnX2JsYW5rJyB9LCBjaGlsZHJlbiB8fCAnTi9BJyk7XHJcbiAgICAgIGNvbnN0IGl0ZW1QcmV2aWV3ID0gaCgnaW1nLnNlYXJjaC1pdGVtLXByZXZpZXcnLCB7c3JjOiByZXN1bHQucHJldmlld1VybH0pO1xyXG4gICAgICBjb25zdCBpdGVtSW5mbyA9IHRpdGxlID0+IGgoJ2Rpdi5zZWFyY2gtaXRlbS1pbmZvJywgW1xyXG4gICAgICAgIGgoJ2Rpdi5zZWFyY2gtaXRlbS1pY29uJywgWyBcclxuICAgICAgICAgIGgoJ2ltZycsIHtzcmM6IGljb25Vcmx9KSBcclxuICAgICAgICBdKSxcclxuICAgICAgICBoKCdkaXYuc2VhcmNoLWl0ZW0tY29udGVudCcsIFtcclxuICAgICAgICAgIHRpdGxlLCAgICAgICAgIFxyXG4gICAgICAgICAgaCgncC5zZWFyY2gtaXRlbS1jb250ZW50LWRhdGFzb3VyY2UnLCBgICR7bmFtZX1gKSxcclxuICAgICAgICAgIGgoJ3Auc2VhcmNoLWl0ZW0tY29udGVudC1wYXJ0aWNpcGFudHMnLCBgJHtyZXN1bHQubnVtUGFydGljaXBhbnRzfSBQYXJ0aWNpcGFudHNgKVxyXG4gICAgICAgIF0pXHJcbiAgICAgIF0pO1xyXG4gICAgICBcclxuICAgICAgaWYoIHNob3dQcmV2aWV3ICl7IFxyXG4gICAgICAgIC8vIFdyYXAgdGhlIGVudGlyZSBpdGVtIGluIGEgbGluayBcclxuICAgICAgICBpdGVtID0gaXRlbUxpbmsoW1xyXG4gICAgICAgICAgaXRlbUluZm8oIHBhdGh3YXlUaXRsZSApLCBcclxuICAgICAgICAgIGl0ZW1QcmV2aWV3XHJcbiAgICAgICAgXSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gQXNzb2NpYXRlIHRoZSBsaW5rIHdpdGggdGhlIGNvbnRlbnRcclxuICAgICAgICBpdGVtID0gaXRlbUluZm8oIGl0ZW1MaW5rKCBwYXRod2F5VGl0bGUgKSApO1xyXG4gICAgICB9IFxyXG4gICAgICBcclxuICAgICAgcmV0dXJuIGgoJ2Rpdi5zZWFyY2gtaXRlbScsIHtcclxuICAgICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoeyAncHJldmlldyc6IHNob3dQcmV2aWV3IH0pXHJcbiAgICAgIH0sIGl0ZW0gKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHNlYXJjaFJlc3VsdEZpbHRlciA9IGgoJ2Rpdi5zZWFyY2gtZmlsdGVycycsIFtcclxuICAgICAgaCgnc2VsZWN0LnNlYXJjaC1kYXRhc291cmNlLWZpbHRlcicsIHtcclxuICAgICAgICB2YWx1ZTogIUFycmF5LmlzQXJyYXkoY3VyRGF0YXNvdXJjZSkgPyBjdXJEYXRhc291cmNlIDogJycsXHJcbiAgICAgICAgbXVsdGlwbGU6IGZhbHNlLFxyXG4gICAgICAgIG9uQ2hhbmdlOiBlID0+IGNvbnRyb2xsZXIuc2V0QW5kU3VibWl0U2VhcmNoUXVlcnkoeyBkYXRhc291cmNlOiBlLnRhcmdldC52YWx1ZSB9KVxyXG4gICAgICB9LCBbXHJcbiAgICAgICAgaCgnb3B0aW9uJywgeyB2YWx1ZTogW10gfSwgJ0FueSBkYXRhc291cmNlJyldLmNvbmNhdChcclxuICAgICAgICAgIHNvdXJjZXMubWFwKCBkcyA9PiBoKCdvcHRpb24nLCB7IHZhbHVlOiBbZHMuaWRlbnRpZmllciBdIH0sIGRzLm5hbWUgKSlcclxuICAgICAgICAgICkpLFxyXG4gICAgXSk7XHJcblxyXG4gICAgY29uc3QgaGVhZGVyID0gaCgnaDMuc2VhcmNoLXBhdGh3YXlzLWhlYWRlcicsIHBhdGh3YXlSZXN1bHRzLmxlbmd0aCA/IGBQYXRod2F5cyAoJHtzZWFyY2hMaXN0Lmxlbmd0aH0pYDogbnVsbCk7XHJcbiAgICBjb25zdCBmaWx0ZXIgPSBwYXRod2F5UmVzdWx0cy5sZW5ndGggfHwgY3VyRGF0YXNvdXJjZS5sZW5ndGggPyBzZWFyY2hSZXN1bHRGaWx0ZXI6IG51bGw7XHJcbiAgICBjb25zdCBsaXN0aW5nID0gcGF0aHdheVJlc3VsdHMubGVuZ3RoIHx8IGhhc0ZlYXR1cmUgPyBzZWFyY2hMaXN0OiBbbm9QYXRod2F5c01zZ107XHJcblxyXG4gICAgcmV0dXJuIGgoJ2Rpdi5zZWFyY2gtcGF0aHdheS1yZXN1bHRzJywgW1xyXG4gICAgICBoKCdkaXYuc2VhcmNoLXRvb2xzJywgWyBoZWFkZXIsIGZpbHRlciBdKSxcclxuICAgICAgLi4ubGlzdGluZ1xyXG4gICAgXSk7XHJcbiAgfVxyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHsgUGF0aHdheVJlc3VsdHNWaWV3IH07XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jbGllbnQvZmVhdHVyZXMvc2VhcmNoL3BhdGh3YXktcmVzdWx0cy12aWV3LmpzIiwiY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuY29uc3QgaCA9IHJlcXVpcmUoJ3JlYWN0LWh5cGVyc2NyaXB0Jyk7XG5jb25zdCBxdWVyeVN0cmluZyA9IHJlcXVpcmUoJ3F1ZXJ5LXN0cmluZycpO1xuY29uc3QgXyA9IHJlcXVpcmUoJ2xvZGFzaCcpO1xuXG5jb25zdCBNSU5fR0VORV9DT1VOVF9FTlJJQ0hNRU5UID0gNTtcbmNvbnN0IHsgTlNfSEdOQ19TWU1CT0wsIE5TX0dFTkVDQVJEUywgTlNfTkNCSV9HRU5FLCBOU19VTklQUk9UIH0gPSByZXF1aXJlKCcuLi8uLi8uLi9jb25maWcnKTtcbmNvbnN0IHsgQXBwQ2FyZCB9ID0gcmVxdWlyZSgnLi4vLi4vY29tbW9uL2NvbXBvbmVudHMnKTtcblxuY29uc3QgU1VQUE9SVEVEX0NPTExFQ1RJT05TID0gbmV3IE1hcChbXG4gIFtOU19HRU5FQ0FSRFMsICdHZW5lQ2FyZHMnXSxcbiAgW05TX0hHTkNfU1lNQk9MLCAnSEdOQyddLFxuICBbTlNfTkNCSV9HRU5FLCAnTkNCSSBHZW5lJ10sXG4gIFtOU19VTklQUk9ULCAnVW5pUHJvdCddXG5dKTtcblxuY2xhc3MgRW50aXR5U3VtbWFyeUJveCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHJlbmRlcigpIHtcbiAgICBsZXQgeyBnZW5lSW5mbyB9ID0gdGhpcy5wcm9wcztcbiAgICBsZXQgeyBnZW5lU3ltYm9sLCBzdW1tYXJ5IH0gPSBnZW5lSW5mbztcbiAgICBsZXQgeyBkaXNwbGF5TmFtZSwgeHJlZkxpbmtzIH0gPSBzdW1tYXJ5O1xuXG4gICAgLy8gc29tZXRpbWVzIGR1cGxpY2F0ZWQgbmFtZXNwYWNlL3VyaSBwYWlycyBhcmUgcmVjZWl2ZWQgZS5nLiB1bmlwcm90L3RwNTMgdHdpY2VcbiAgICBsZXQgc29ydGVkTGlua3MgPSBfLnVuaXFXaXRoKHhyZWZMaW5rcy5zb3J0KChwMSwgcDIpID0+IHAxLm5hbWVzcGFjZSA+IHAyLm5hbWVzcGFjZSA/IDEgOiAtMSksIChwMSwgcDIpID0+IHAxLm5hbWVzcGFjZSA9PT0gcDIubmFtZXNwYWNlKVxuICAgICAgLm1hcChsaW5rID0+IGgoJ2EucGxhaW4tbGluaycsIHsgaHJlZjogbGluay51cmksIHRhcmdldDogJ19ibGFuaycgfSwgU1VQUE9SVEVEX0NPTExFQ1RJT05TLmdldChsaW5rLm5hbWVzcGFjZSkpKTtcblxuICAgIHJldHVybiBoKCdkaXYuZW50aXR5LXN1bW1hcnktYm94JywgW1xuICAgICAgaCgnaDUuZW50aXR5LXN1YnRpdGxlJywgZGlzcGxheU5hbWUpLFxuICAgICAgaCgnaDMuZW50aXR5LXRpdGxlJywgZ2VuZVN5bWJvbCksXG4gICAgICBoKCdkaXYuZW50aXR5LWxpbmtzLWNvbnRhaW5lcicsIFtcbiAgICAgICAgLi4uc29ydGVkTGlua3NcbiAgICAgIF0pXG4gICAgXSk7XG4gIH1cbn1cblxuY2xhc3MgR2VuZVJlc3VsdHNWaWV3IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHNob3dMZWZ0QnV0dG9uOiBmYWxzZSxcbiAgICAgIHNob3dSaWdodEJ1dHRvbjogZmFsc2VcbiAgICB9O1xuICAgIFxuICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gICAgdGhpcy5pdGVtV2lkdGggPSAyMDsgLy8gaW4gZW0gdW5pdHNcbiAgICB0aGlzLnZpc2libGVJdGVtcyA9IDM7XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aGlzLmNoZWNrU2Nyb2xsKCk7XG4gICAgdGhpcy5zY3JvbGxDb250YWluZXJSZWYuY3VycmVudD8uYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5jaGVja1Njcm9sbCk7XG4gIH1cblxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLnNjcm9sbENvbnRhaW5lclJlZi5jdXJyZW50Py5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLmNoZWNrU2Nyb2xsKTtcbiAgfVxuXG4gIGNoZWNrU2Nyb2xsID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLnNjcm9sbENvbnRhaW5lclJlZi5jdXJyZW50KSB7XG4gICAgICBjb25zdCB7IHNjcm9sbExlZnQsIHNjcm9sbFdpZHRoLCBjbGllbnRXaWR0aCB9ID0gdGhpcy5zY3JvbGxDb250YWluZXJSZWYuY3VycmVudDtcbiAgICAgIGNvbnN0IHsgZ2VuZVJlc3VsdHMgfSA9IHRoaXMucHJvcHM7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgc2hvd0xlZnRCdXR0b246IHNjcm9sbExlZnQgPiAwICYmIGdlbmVSZXN1bHRzLmxlbmd0aCA+IHRoaXMudmlzaWJsZUl0ZW1zLFxuICAgICAgICBzaG93UmlnaHRCdXR0b246IHNjcm9sbExlZnQgPCBzY3JvbGxXaWR0aCAtIGNsaWVudFdpZHRoICYmIGdlbmVSZXN1bHRzLmxlbmd0aCA+IHRoaXMudmlzaWJsZUl0ZW1zXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzY3JvbGwgPSAoZGlyZWN0aW9uKSA9PiB7XG4gICAgaWYgKHRoaXMuc2Nyb2xsQ29udGFpbmVyUmVmLmN1cnJlbnQpIHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuc2Nyb2xsQ29udGFpbmVyUmVmLmN1cnJlbnQ7XG4gICAgICBjb25zdCBjYXJkV2lkdGggPSBjb250YWluZXIucXVlcnlTZWxlY3RvcignLmNhcmQnKS5vZmZzZXRXaWR0aDtcbiAgICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gY29udGFpbmVyLmNsaWVudFdpZHRoO1xuICAgICAgY29uc3Qgc2Nyb2xsQW1vdW50ID0gTWF0aC5mbG9vcihjb250YWluZXJXaWR0aCAvIGNhcmRXaWR0aCkgKiBjYXJkV2lkdGg7XG4gICAgICBcbiAgICAgIGNvbnN0IG5ld1Njcm9sbExlZnQgPSBjb250YWluZXIuc2Nyb2xsTGVmdCArIChkaXJlY3Rpb24gPT09ICdsZWZ0JyA/IC1zY3JvbGxBbW91bnQgOiBzY3JvbGxBbW91bnQpO1xuICAgICAgY29udGFpbmVyLnNjcm9sbFRvKHtcbiAgICAgICAgbGVmdDogbmV3U2Nyb2xsTGVmdCxcbiAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBnZXRFbnJpY2htZW50QXBwSW5mbyhnZW5lUmVzdWx0cywgc2VhcmNoU3RyaW5nKSB7XG4gICAgbGV0IGVuYWJsZWQgPSBnZW5lUmVzdWx0cy5sZW5ndGggPj0gTUlOX0dFTkVfQ09VTlRfRU5SSUNITUVOVDtcbiAgICBsZXQgaGludCA9IGBSZXF1aXJlcyBhdCBsZWFzdCAke01JTl9HRU5FX0NPVU5UX0VOUklDSE1FTlR9IGdlbmVzLmA7XG4gICAgbGV0IGxpbmtQYXRoID0gJy9lbnJpY2htZW50JztcbiAgICBsZXQgdXJsID0gYCR7bGlua1BhdGh9Lz8ke3NlYXJjaFN0cmluZ31gO1xuICAgIGxldCBpbWFnZUNsYXNzID0gJ2VucmljaG1lbnQtbG9nbyc7XG4gICAgbGV0IHRpdGxlID0gJ0VucmljaG1lbnQnO1xuICAgIGxldCBib2R5ID0gJ0V4cGxvcmUgYSBuZXR3b3JrIG9mIHBhdGh3YXlzIHRoYXQgY29udGFpbiBnZW5lcyBpZGVudGlmaWVkIGluIHlvdXIgcXVlcnkuJztcblxuICAgIHJldHVybiB7IGVuYWJsZWQsIGhpbnQsIHVybCwgaW1hZ2VDbGFzcywgdGl0bGUsIGJvZHksIGxpbmtpZnlDb250ZW50OiB0cnVlIH07XG4gIH1cblxuICBnZXRJbnRlcmFjdGlvbnNBcHBJbmZvKGdlbmVSZXN1bHRzLCBzZWFyY2hTdHJpbmcpIHtcbiAgICBsZXQgZW5hYmxlZCA9IGdlbmVSZXN1bHRzLmxlbmd0aCA+IDA7XG4gICAgbGV0IGhpbnQgPSBgUmVxdWlyZXMgb25lIHJlY29nbml6ZWQgZ2VuZS5gO1xuICAgIGxldCBsaW5rUGF0aCA9ICcvaW50ZXJhY3Rpb25zJztcbiAgICBsZXQgdXJsID0gYCR7bGlua1BhdGh9Lz8ke3NlYXJjaFN0cmluZ31gO1xuICAgIGxldCBpbWFnZUNsYXNzID0gJ2ludGVyYWN0aW9ucy1sb2dvJztcbiAgICBsZXQgdGl0bGUgPSAnSW50ZXJhY3Rpb25zJztcbiAgICBsZXQgYm9keSA9ICdWaXN1YWxpemUgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlIGdlbmVzIGlkZW50aWZpZWQgaW4geW91ciBxdWVyeS4nO1xuXG4gICAgcmV0dXJuIHsgZW5hYmxlZCwgaGludCwgdXJsLCBpbWFnZUNsYXNzLCB0aXRsZSwgYm9keSwgbGlua2lmeUNvbnRlbnQ6IHRydWUgfTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBsZXQgeyBnZW5lUmVzdWx0cyB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IHNob3dMZWZ0QnV0dG9uLCBzaG93UmlnaHRCdXR0b24gfSA9IHRoaXMuc3RhdGU7XG5cbiAgICBpZiAoZ2VuZVJlc3VsdHMgPT09IG51bGwgfHwgZ2VuZVJlc3VsdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBsZXQgc291cmNlcyA9IGdlbmVSZXN1bHRzLm1hcChnZW5lSW5mbyA9PiBnZW5lSW5mby5nZW5lU3ltYm9sKTtcbiAgICBsZXQgc2VhcmNoU3RyaW5nID0gcXVlcnlTdHJpbmcuc3RyaW5naWZ5KHsgc291cmNlOiBzb3VyY2VzLmpvaW4oJywnKSB9KTtcblxuICAgIGNvbnN0IGFwcHNJbmZvcyA9IFtcbiAgICAgIHRoaXMuZ2V0SW50ZXJhY3Rpb25zQXBwSW5mbyhnZW5lUmVzdWx0cywgc2VhcmNoU3RyaW5nKSxcbiAgICAgIHRoaXMuZ2V0RW5yaWNobWVudEFwcEluZm8oZ2VuZVJlc3VsdHMsIHNlYXJjaFN0cmluZylcbiAgICBdLm1hcChpbmZvID0+IGgoQXBwQ2FyZCwgaW5mbykpO1xuXG4gICAgcmV0dXJuIGgoJ2Rpdi5zZWFyY2gtZ2VuZXMtcmVzdWx0cycsIFtcbiAgICAgIGgoJ2gzLnNlYXJjaC1nZW5lcy1oZWFkZXInLCBgUmVjb2duaXplZCBnZW5lcyAoJHtnZW5lUmVzdWx0cy5sZW5ndGh9KWApLFxuICAgICAgaCgnZGl2LnNlYXJjaC1nZW5lcy1zY3JvbGwtY29udGFpbmVyJywgW1xuICAgICAgICBzaG93TGVmdEJ1dHRvbiAmJiBoKCdidXR0b24uc2Nyb2xsLWNhcmV0LWJ1dHRvbi5sZWZ0Jywge1xuICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHRoaXMuc2Nyb2xsKCdsZWZ0JyksXG4gICAgICAgICAgZGlzYWJsZWQ6ICFzaG93TGVmdEJ1dHRvbixcbiAgICAgICAgICBjbGFzc05hbWU6IHNob3dMZWZ0QnV0dG9uID8gJ2FjdGl2ZScgOiAnaW5hY3RpdmUnXG4gICAgICAgIH0sIFtcbiAgICAgICAgICBoKCdpLmljb24uaWNvbi1jaGV2cm9uLWxlZnQnKVxuICAgICAgICBdKSxcbiAgICAgICAgaCgnZGl2LnNlYXJjaC1nZW5lcy1saXN0Jywge1xuICAgICAgICAgIHJlZjogdGhpcy5zY3JvbGxDb250YWluZXJSZWYsXG4gICAgICAgICAgb25TY3JvbGw6IHRoaXMuY2hlY2tTY3JvbGxcbiAgICAgICAgfSwgW1xuICAgICAgICAgIC4uLmdlbmVSZXN1bHRzLm1hcChnZW5lSW5mbyA9PiB7XG4gICAgICAgICAgICByZXR1cm4gaCgnZGl2LmNhcmQnLCBbXG4gICAgICAgICAgICAgIGgoRW50aXR5U3VtbWFyeUJveCwgeyBnZW5lSW5mbyB9KVxuICAgICAgICAgICAgXSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgXSksXG4gICAgICAgIHNob3dSaWdodEJ1dHRvbiAmJiBoKCdidXR0b24uc2Nyb2xsLWNhcmV0LWJ1dHRvbi5yaWdodCcsIHtcbiAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB0aGlzLnNjcm9sbCgncmlnaHQnKSxcbiAgICAgICAgICBkaXNhYmxlZDogIXNob3dSaWdodEJ1dHRvbixcbiAgICAgICAgICBjbGFzc05hbWU6IHNob3dSaWdodEJ1dHRvbiA/ICdhY3RpdmUnIDogJ2luYWN0aXZlJ1xuICAgICAgICB9LCBbXG4gICAgICAgICAgaCgnaS5pY29uLmljb24tY2hldnJvbi1yaWdodCcpXG4gICAgICAgIF0pXG4gICAgICBdKSxcbiAgICAgIGgoJ2Rpdi5zZWFyY2gtYXBwLWNhcmRzJywgYXBwc0luZm9zKVxuICAgIF0pO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0geyBHZW5lUmVzdWx0c1ZpZXcgfTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY2xpZW50L2ZlYXR1cmVzL3NlYXJjaC9nZW5lLXJlc3VsdHMtdmlldy5qcyIsImNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcclxuY29uc3QgaCA9IHJlcXVpcmUoJ3JlYWN0LWh5cGVyc2NyaXB0Jyk7XHJcbmNvbnN0IHsgQXBwQ2FyZCB9ID0gcmVxdWlyZSgnLi4vLi4vY29tbW9uL2NvbXBvbmVudHMnKTtcclxuY29uc3QgXyA9IHJlcXVpcmUoJ2xvZGFzaCcpO1xyXG5cclxuY29uc3Qge1xyXG4gIE5TX0JJT0ZBQ1RPSUQsXHJcbiAgTlNfUEFUSFdBWUNPTU1PTlNcclxufSA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbmZpZycpO1xyXG5cclxuY2xhc3MgRmVhdHVyZVZpZXcgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG5cclxuICByZW5kZXIoKXtcclxuXHJcbiAgICBjb25zdCB7IGZlYXR1cmUgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBpZiggZmVhdHVyZSA9PSBudWxsICkgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgY29uc3QgTUFYX0FVVEhPUlMgPSA4O1xyXG5cclxuICAgIGNvbnN0IHsgYXJ0aWNsZSwgcGF0aHdheXMsIGF1dGhvcnMgfSA9IGZlYXR1cmU7XHJcbiAgICBjb25zdCBwY1BhdGh3YXkgPSBfLmZpbmQoIHBhdGh3YXlzLCBbJ2RiJywgTlNfUEFUSFdBWUNPTU1PTlNdICk7XHJcbiAgICBjb25zdCBiaW9mYWN0b2lkUGF0aHdheSA9IF8uZmluZCggcGF0aHdheXMsIFsnZGInLCBOU19CSU9GQUNUT0lEXSApO1xyXG5cclxuICAgIC8vIENhcmQgQ29udGVudFxyXG4gICAgY29uc3QgYm9keSA9IGJpb2ZhY3RvaWRQYXRod2F5LnRleHQ7XHJcblxyXG4gICAgLy8gQXV0aG9yc1xyXG4gICAgbGV0IGF1dGhvckxpc3QgPSBhdXRob3JzLm1hcCggKHsgdXJsOiBocmVmLCBsYWJlbCB9LCBrZXkpID0+IHtcclxuICAgICAgbGV0IGVsZW1lbnQgPSBudWxsO1xyXG4gICAgICBpZiggaHJlZiApe1xyXG4gICAgICAgIGVsZW1lbnQgPSBbXHJcbiAgICAgICAgICBoKCdhLnBsYWluLWxpbmsnLCB7IGhyZWYsIHRhcmdldDogJ19ibGFuaycgfSwgYCR7bGFiZWx9IGAgKSxcclxuICAgICAgICAgIGgoJ2kuaWNvbi5pY29uLW9yY2lkJylcclxuICAgICAgICBdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGVsZW1lbnQgPSBoKCAnc3BhbicsIGxhYmVsICk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGgoJ2xpJywgeyBrZXkgfSwgZWxlbWVudCApO1xyXG4gICAgfSk7XHJcbiAgICBpZiAoIGF1dGhvckxpc3QubGVuZ3RoID4gTUFYX0FVVEhPUlMgKXsgLy8gQWJicmV2aWF0ZSB3aGVuIG5lY2Vzc2FyeVxyXG4gICAgICBjb25zdCBudW1Gcm9tU3RhcnQgPSBNYXRoLmZsb29yKCBNQVhfQVVUSE9SUyAvIDIgKTtcclxuICAgICAgY29uc3QgbnVtRnJvbUVuZCA9IE1hdGguY2VpbCggTUFYX0FVVEhPUlMgLyAyICk7XHJcbiAgICAgIGF1dGhvckxpc3QgPSBfLmNvbmNhdChcclxuICAgICAgICBfLnRha2UoIGF1dGhvckxpc3QsIG51bUZyb21TdGFydCApLFxyXG4gICAgICAgIGgoJ2xpJywgJy4uLicpLFxyXG4gICAgICAgIF8udGFrZVJpZ2h0KCBhdXRob3JMaXN0LCBudW1Gcm9tRW5kIClcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBoKCdkaXYuZmVhdHVyZS1jb250YWluZXInLCBbXHJcbiAgICAgICAgaCgnZGl2LmZlYXR1cmUtYXJlYS5wYXRod2F5JywgW1xyXG4gICAgICAgICAgaCgnZGl2LmZlYXR1cmUtaXRlbScsIFtcclxuICAgICAgICAgICAgaChBcHBDYXJkLCB7XHJcbiAgICAgICAgICAgICAgdXJsOiBiaW9mYWN0b2lkUGF0aHdheS51cmwsXHJcbiAgICAgICAgICAgICAgaW1hZ2U6IGgoJ2ltZycsIHsgc3JjOiBiaW9mYWN0b2lkUGF0aHdheS5pbWFnZVNyYyB9KSxcclxuICAgICAgICAgICAgICB0aXRsZTogaCgnZGl2JywgW1xyXG4gICAgICAgICAgICAgICAgaCgnaS5pY29uLmxvZ28tYmlvZmFjdG9pZCcpLFxyXG4gICAgICAgICAgICAgICAgYmlvZmFjdG9pZFBhdGh3YXkub3JnYW5pc20gPyBoKCdzcGFuJywgYmlvZmFjdG9pZFBhdGh3YXkub3JnYW5pc20gKSA6IG51bGxcclxuICAgICAgICAgICAgICBdKSxcclxuICAgICAgICAgICAgICBib2R5XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBoKCdhLnBsYWluLWxpbmsnLCB7XHJcbiAgICAgICAgICAgICAgaHJlZjogYC9wYXRod2F5cz91cmk9JHtwY1BhdGh3YXkudXJsfWAsXHJcbiAgICAgICAgICAgICAgdGFyZ2V0OiAnX2JsYW5rJ1xyXG4gICAgICAgICAgICB9LCAnRGV0YWlsZWQgcGF0aHdheSB2aWV3IChTQkdOKScpXHJcbiAgICAgICAgICBdKVxyXG4gICAgICAgIF0pLFxyXG4gICAgICAgIGgoJ2Rpdi5mZWF0dXJlLWFyZWEuYXJ0aWNsZScsIFtcclxuICAgICAgICAgIGgoJ2Rpdi5mZWF0dXJlLWl0ZW0nLCBbXHJcbiAgICAgICAgICAgIGgoJ2Rpdi5oZWFkbGluZScsIGFydGljbGUudGl0bGUgKSxcclxuICAgICAgICAgICAgaCgndWwuaG9yaXpvbnRhbC1saXN0LmZlYXR1cmUtZGV0YWlsJywgYXV0aG9yTGlzdCApLFxyXG4gICAgICAgICAgICBoKCdkaXYuaG9yaXpvbnRhbC1saXN0LmZlYXR1cmUtZGV0YWlsLmZlYXR1cmUtZGV0YWlsLWxpbmtzJyxcclxuICAgICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgICBoKCdkaXYuZmVhdHVyZS1kZXRhaWwtbGluaycsIFtcclxuICAgICAgICAgICAgICAgICAgYXJ0aWNsZS5kb2lVcmwgP1xyXG4gICAgICAgICAgICAgICAgICAgIGgoJ2EucGxhaW4tbGluaycsIHsgaHJlZjogYXJ0aWNsZS5kb2lVcmwsIHRhcmdldDogJ19ibGFuaycgfSwgYXJ0aWNsZS5yZWZlcmVuY2UgKSA6XHJcbiAgICAgICAgICAgICAgICAgICAgaCggJ3NwYW4nLCBhcnRpY2xlLnJlZmVyZW5jZSApLFxyXG4gICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgICAgICBoKCdkaXYuZmVhdHVyZS1kZXRhaWwtbGluaycsIFtcclxuICAgICAgICAgICAgICAgICAgYXJ0aWNsZS5wdWJtZWRVcmwgP1xyXG4gICAgICAgICAgICAgICAgICAgIGgoJ2EucGxhaW4tbGluaycsIHsgaHJlZjogYXJ0aWNsZS5wdWJtZWRVcmwsIHRhcmdldDogJ19ibGFuaycgfSwgJ1B1Yk1lZCcgKSA6XHJcbiAgICAgICAgICAgICAgICAgICAgbnVsbFxyXG4gICAgICAgICAgICAgICAgXSlcclxuICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgIF0pXHJcbiAgICAgICAgXSksXHJcbiAgICAgICAgaCgnZGl2LmZlYXR1cmUtYXJlYS5mb290ZXInLCBbIGgoJ2hyJykgXSApXHJcbiAgICAgIF0pXHJcbiAgICApO1xyXG4gIH1cclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7IEZlYXR1cmVWaWV3IH07XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NsaWVudC9mZWF0dXJlcy9zZWFyY2gvZmVhdHVyZS12aWV3LmpzIiwiY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xyXG5jb25zdCBoID0gcmVxdWlyZSgncmVhY3QtaHlwZXJzY3JpcHQnKTtcclxuY29uc3QgXyA9IHJlcXVpcmUoJ2xvZGFzaCcpO1xyXG5jb25zdCBxdWVyeVN0cmluZyA9IHJlcXVpcmUoJ3F1ZXJ5LXN0cmluZycpO1xyXG5jb25zdCBMb2FkZXIgPSByZXF1aXJlKCdyZWFjdC1sb2FkZXInKTtcclxuY29uc3QgY2xhc3NOYW1lcyA9IHJlcXVpcmUoJ2NsYXNzbmFtZXMnKTtcclxuXHJcbmNvbnN0IGNvbmZpZyA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbmZpZycpO1xyXG5jb25zdCBDeXRvc2NhcGVTZXJ2aWNlID0gcmVxdWlyZSgnLi4vLi4vY29tbW9uL2N5LycpO1xyXG5jb25zdCB7IFNlcnZlckFQSSB9ID0gcmVxdWlyZSgnLi4vLi4vc2VydmljZXMvJyk7XHJcblxyXG5jb25zdCBJbnRlcmFjdGlvbnNUb29sYmFyID0gcmVxdWlyZSgnLi9pbnRlcmFjdGlvbnMtdG9vbGJhcicpO1xyXG5jb25zdCB7IFBvcG92ZXIsIFBjTG9nb0xpbmssIEN5dG9zY2FwZU5ldHdvcmsgfSA9IHJlcXVpcmUoJy4uLy4uL2NvbW1vbi9jb21wb25lbnRzLycpO1xyXG5cclxuY29uc3QgeyBpbnRlcmFjdGlvbnNTdHlsZXNoZWV0LCBpbnRlcmFjdGlvbnNMYXlvdXRPcHRzLCBiaW5kRXZlbnRzIH0gPSByZXF1aXJlKCcuL2N5Jyk7XHJcbmNvbnN0IHsgVGltZW91dEVycm9yIH0gPSByZXF1aXJlKCcuLi8uLi8uLi91dGlsJyk7XHJcbmNvbnN0IHsgRXJyb3JNZXNzYWdlIH0gPSByZXF1aXJlKCcuLi8uLi9jb21tb24vY29tcG9uZW50cy9lcnJvci1tZXNzYWdlJyk7XHJcblxyXG5jb25zdCBNQVhfRUxFTUVOVFNfQ1VUT0ZGID0gMztcclxuY29uc3QgTElTVF9FTEVNRU5UU19TSE9XTiA9IE1BWF9FTEVNRU5UU19DVVRPRkYgLSAxO1xyXG5cclxuY29uc3QgSW50ZXJhY3Rpb25zTWVudSA9IHJlcXVpcmUoJy4vaW50ZXJhY3Rpb25zLW1lbnUnKTtcclxuY29uc3QgeyBDb250cmlidXRlIH0gPSByZXF1aXJlKCcuLi8uLi9jb21tb24vY29tcG9uZW50cy9jb250cmlidXRlJyk7XHJcblxyXG5jbGFzcyBJbnRlcmFjdGlvbnMgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICBzdXBlcihwcm9wcyk7XHJcblxyXG4gICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgY3lTcnY6IG5ldyBDeXRvc2NhcGVTZXJ2aWNlKHsgc3R5bGU6IGludGVyYWN0aW9uc1N0eWxlc2hlZXQsIG9uTW91bnQ6IGJpbmRFdmVudHMgfSksXHJcbiAgICAgIGxvYWRpbmc6IHRydWUsXHJcbiAgICAgIHNvdXJjZXM6IF8udW5pcShxdWVyeVN0cmluZy5wYXJzZShwcm9wcy5sb2NhdGlvbi5zZWFyY2gpLnNvdXJjZS5zcGxpdCgnLCcpKSxcclxuICAgICAgbmV0d29ya0VtcHR5OiBmYWxzZVxyXG4gICAgfTtcclxuXHJcbiAgICBpZiggcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyApe1xyXG4gICAgICB0aGlzLnN0YXRlLmN5U3J2LmdldFByb21pc2UoKS50aGVuKGN5ID0+IHdpbmRvdy5jeSA9IGN5KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGxvYWRJbnRlcmFjdGlvbnNOZXR3b3JrKCl7XHJcbiAgICBsZXQgeyBjeVNydiwgc291cmNlcyB9ID0gdGhpcy5zdGF0ZTtcclxuICAgIGxldCBpbml0aWFsaXplQ3l0b3NjYXBlID0gbmV0d29yayA9PiB7XHJcblxyXG4gICAgICBsZXQgY3kgPSBjeVNydi5nZXQoKTtcclxuICAgICAgY3kucmVtb3ZlKCcqJyk7XHJcbiAgICAgIGN5LmFkZCggbmV0d29yayApO1xyXG5cclxuICAgICAgaWYoIG5ldHdvcmsubm9kZXMubGVuZ3RoID09PSAwICl7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICBuZXR3b3JrRW1wdHk6IHRydWUsXHJcbiAgICAgICAgICBsb2FkaW5nOiBmYWxzZSxcclxuICAgICAgICAgIGVycm9yOiBudWxsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjeS5sYXlvdXQoXy5hc3NpZ24oe30sIGludGVyYWN0aW9uc0xheW91dE9wdHMoIGN5ICksIHtcclxuICAgICAgICBzdG9wOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgbG9hZGluZzogZmFsc2UsXHJcbiAgICAgICAgICAgIGVycm9yOiBudWxsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pKS5ydW4oKTtcclxuICAgIH07XHJcblxyXG4gICAgU2VydmVyQVBJLmdldEludGVyYWN0aW9uR3JhcGgoeyBzb3VyY2VzOiBzb3VyY2VzIH0pXHJcbiAgICAudGhlbiggcmVzdWx0ID0+IHtcclxuICAgICAgaW5pdGlhbGl6ZUN5dG9zY2FwZSggXy5nZXQocmVzdWx0LCAnbmV0d29yaycsIHsgbm9kZXM6IFtdLCBlZGdlczogW10gfSApKTtcclxuICAgICAgcmV0dXJuIG51bGw7IC8vaHR0cDovL2JsdWViaXJkanMuY29tL2RvY3Mvd2FybmluZy1leHBsYW5hdGlvbnMuaHRtbCN3YXJuaW5nLWEtcHJvbWlzZS13YXMtY3JlYXRlZC1pbi1hLWhhbmRsZXItYnV0LXdhcy1ub3QtcmV0dXJuZWQtZnJvbS1pdFxyXG4gICAgfSlcclxuICAgIC5jYXRjaCggZSA9PiB0aGlzLnNldFN0YXRlKHsgZXJyb3I6IGUgfSkpO1xyXG4gIH1cclxuXHJcbiAgY29tcG9uZW50V2lsbFVubW91bnQoKXtcclxuICAgIHRoaXMuc3RhdGUuY3lTcnYuZGVzdHJveSgpO1xyXG4gIH1cclxuXHJcbiAgcmVuZGVyKCkge1xyXG4gICAgbGV0IHsgbG9hZGluZywgY3lTcnYsIGFjdGl2ZU1lbnUsIHNvdXJjZXMsIG5ldHdvcmtFbXB0eSwgZXJyb3IgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBsZXQgZXJyb3JNZXNzYWdlO1xyXG4gICAgaWYoIG5ldHdvcmtFbXB0eSApIHtcclxuICAgICAgZXJyb3JNZXNzYWdlID0gaChFcnJvck1lc3NhZ2UsIHsgdGl0bGU6ICdObyBpbnRlcmFjdGlvbnMgdG8gZGlzcGxheS4nLCBib2R5OiAnVHJ5IGRpZmZlcmVudCBnZW5lcyBpbiB5b3VyIHNlYXJjaC4nICwgZm9vdGVyOiBudWxsLCBsb2dvOiB0cnVlIH0gKTtcclxuICAgIH0gZWxzZSBpZiggZXJyb3IgaW5zdGFuY2VvZiBUaW1lb3V0RXJyb3IgKSB7XHJcbiAgICAgIGVycm9yTWVzc2FnZSA9IGgoIEVycm9yTWVzc2FnZSwgeyB0aXRsZTogJ1RoaXMgaXMgdGFraW5nIGxvbmdlciB0aGFuIGV4cGVjdGVkJywgYm9keTogJ1RyeSBhZ2FpbiBsYXRlci4nLCBsb2dvOiB0cnVlIH0gKTtcclxuICAgIH0gZWxzZSBpZiggZXJyb3IgKSB7XHJcbiAgICAgIGVycm9yTWVzc2FnZSA9IGgoIEVycm9yTWVzc2FnZSwgeyBsb2dvOiB0cnVlIH0gKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgdGl0bGVDb250ZW50ID0gW107XHJcbiAgICBpZiggc291cmNlcy5sZW5ndGggPT09IDEgKXtcclxuICAgICAgdGl0bGVDb250ZW50LnB1c2goaCgnc3BhbicsIGBJbnRlcmFjdGlvbnMgYmV0d2VlbiAke3NvdXJjZXNbMF19IGFuZCAke2NvbmZpZy5NQVhfU0lGX05PREVTfSBvdGhlciBnZW5lc2ApKTtcclxuICAgIH1cclxuICAgIGlmKCAxIDwgc291cmNlcy5sZW5ndGggJiYgc291cmNlcy5sZW5ndGggPD0gTUFYX0VMRU1FTlRTX0NVVE9GRiApe1xyXG4gICAgICB0aXRsZUNvbnRlbnQucHVzaChoKCdzcGFuJywgYEludGVyYWN0aW9ucyBiZXR3ZWVuICR7IHNvdXJjZXMuc2xpY2UoMCwgc291cmNlcy5sZW5ndGggLSAxKS5qb2luKCcsICcpfSBhbmQgJHtzb3VyY2VzLnNsaWNlKC0xKX1gKSk7XHJcbiAgICB9XHJcbiAgICBpZiggc291cmNlcy5sZW5ndGggPiBNQVhfRUxFTUVOVFNfQ1VUT0ZGICl7XHJcbiAgICAgIHRpdGxlQ29udGVudC5wdXNoKGgoJ3NwYW4nLCBgSW50ZXJhY3Rpb25zIGJldHdlZW4gJHsgc291cmNlcy5zbGljZSgwLCBMSVNUX0VMRU1FTlRTX1NIT1dOKS5qb2luKCcsICcpfSBhbmQgYCkpO1xyXG4gICAgICB0aXRsZUNvbnRlbnQucHVzaChoKFBvcG92ZXIsIHtcclxuICAgICAgICB0aXBweToge1xyXG4gICAgICAgICAgcG9zaXRpb246ICdib3R0b20nLFxyXG4gICAgICAgICAgaHRtbDogaCgnZGl2LmVucmljaG1lbnQtc291cmNlcy1wb3BvdmVyJywgc291cmNlcy5zbGljZShMSVNUX0VMRU1FTlRTX1NIT1dOKS5zb3J0KCkubWFwKCBzID0+IGgoJ2RpdicsIHMpICkgKVxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sIFsgaCgnYS5wbGFpbi1saW5rLmVucmljaG1lbnQtcG9wb3Zlci1saW5rJywgYCR7c291cmNlcy5sZW5ndGggLSBMSVNUX0VMRU1FTlRTX1NIT1dOfSBvdGhlciBnZW5lKHMpYCkgXVxyXG4gICAgICApKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgYXBwQmFyID0gaCgnZGl2LmFwcC1iYXIuaW50ZXJhY3Rpb25zLWJhcicsIFtcclxuICAgICAgaCgnZGl2LmFwcC1iYXItYnJhbmRpbmcnLCBbXHJcbiAgICAgICAgaChQY0xvZ29MaW5rKSxcclxuICAgICAgICBoKCdkaXYuYXBwLWJhci10aXRsZScsIHRpdGxlQ29udGVudClcclxuICAgICAgXSksXHJcbiAgICAgIGgoSW50ZXJhY3Rpb25zVG9vbGJhciwgeyBjeVNydiwgYWN0aXZlTWVudSwgc291cmNlczogdGhpcy5zdGF0ZS5zb3VyY2VzLCBjb250cm9sbGVyOiB0aGlzIH0pLFxyXG4gICAgICBoKENvbnRyaWJ1dGUsIHsgdGV4dDogJ0FkZCBteSBpbnRlcmFjdGlvbnMnIH0pXHJcbiAgICBdKTtcclxuXHJcbiAgICBsZXQgaW50ZXJhY3Rpb25zTGVnZW5kID0gaCgnZGl2LmludGVyYWN0aW9ucy1sZWdlbmQnLCBbXHJcbiAgICAgIGgoSW50ZXJhY3Rpb25zTWVudSwgeyBjeVNydiB9IClcclxuICAgIF0pO1xyXG5cclxuICAgIGxldCBjb250ZW50ID0gIWVycm9yTWVzc2FnZSA/IFtcclxuICAgICAgaChMb2FkZXIsIHsgbG9hZGVkOiAhbG9hZGluZywgb3B0aW9uczogeyBsZWZ0OiAnNTAlJywgY29sb3I6ICcjMTZhMDg1JyB9fSwgW1xyXG4gICAgICAgIGFwcEJhcixcclxuICAgICAgICBpbnRlcmFjdGlvbnNMZWdlbmRcclxuICAgICAgXSksXHJcbiAgICAgIGgoQ3l0b3NjYXBlTmV0d29yaywge1xyXG4gICAgICAgIGN5U3J2LFxyXG4gICAgICAgIG9uTW91bnQ6ICgpID0+IHRoaXMubG9hZEludGVyYWN0aW9uc05ldHdvcmsoKSxcclxuICAgICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoe1xyXG4gICAgICAgICduZXR3b3JrLWxvYWRpbmcnOiBsb2FkaW5nXHJcbiAgICAgICAgfSlcclxuICAgICAgfSlcclxuICAgIF0gOiBbIGVycm9yTWVzc2FnZSBdO1xyXG5cclxuXHJcbiAgICByZXR1cm4gaCgnZGl2LmludGVyYWN0aW9ucycsIGNvbnRlbnQpO1xyXG4gIH1cclxuXHJcbn1cclxuXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEludGVyYWN0aW9ucztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY2xpZW50L2ZlYXR1cmVzL2ludGVyYWN0aW9ucy9pbmRleC5qcyIsIlxyXG5jb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XHJcbmNvbnN0IFJlYWN0RG9tID0gcmVxdWlyZSgncmVhY3QtZG9tJyk7XHJcbmNvbnN0IGggPSByZXF1aXJlKCdyZWFjdC1oeXBlcnNjcmlwdCcpO1xyXG5cclxuY29uc3QgUG9wb3ZlciA9IHJlcXVpcmUoJy4uLy4uL2NvbW1vbi9jb21wb25lbnRzL3BvcG92ZXInKTtcclxuY29uc3QgSWNvbkJ1dHRvbiA9IHJlcXVpcmUoJy4uLy4uL2NvbW1vbi9jb21wb25lbnRzL2ljb24tYnV0dG9uJyk7XHJcblxyXG5jb25zdCB7IGludGVyYWN0aW9uc0xheW91dE9wdHMsIHNlYXJjaEludGVyYWN0aW9uTm9kZXMgfSA9IHJlcXVpcmUoJy4vY3knKTtcclxuXHJcbmNvbnN0IEludGVyYWN0aW9uc0Rvd25sb2FkTWVudSA9IHJlcXVpcmUoJy4vaW50ZXJhY3Rpb25zLWRvd25sb2FkLW1lbnUnKTtcclxuXHJcbmNsYXNzIEludGVyYWN0aW9uc1Rvb2xiYXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gIGNvbnN0cnVjdG9yKHByb3BzKXtcclxuICAgIHN1cGVyKHByb3BzKTtcclxuICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgIHNlYXJjaFZhbHVlOiAnJ1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGhhbmRsZU5vZGVTZWFyY2hDaGFuZ2Uoc2VhcmNoVmFsKXtcclxuICAgIHRoaXMuc2V0U3RhdGUoeyBzZWFyY2hWYWx1ZTogc2VhcmNoVmFsIH0sICgpID0+IHNlYXJjaEludGVyYWN0aW9uTm9kZXMoIHRoaXMucHJvcHMuY3lTcnYuZ2V0KCksIHNlYXJjaFZhbCkpO1xyXG4gIH1cclxuXHJcbiAgZm9jdXNOb2RlU2VhcmNoKCl7XHJcbiAgICBSZWFjdERvbS5maW5kRE9NTm9kZSh0aGlzKS5xdWVyeVNlbGVjdG9yKCcuZWxlbWVudC1zZWFyY2gtaW5wdXQnKS5mb2N1cygpO1xyXG4gIH1cclxuXHJcbiAgcmVuZGVyKCl7XHJcbiAgICBsZXQgeyBjeVNydiB9ID0gdGhpcy5wcm9wcztcclxuICAgIGxldCB7IHNlYXJjaFZhbHVlIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgbGV0IGN5ID0gY3lTcnYuZ2V0KCk7XHJcbiAgICBsZXQgc291cmNlcyA9IHRoaXMucHJvcHMuc291cmNlcyB8fCBbJ2Rvd25sb2FkJ107XHJcblxyXG4gICAgcmV0dXJuIGgoJ2Rpdi5hcHAtdG9vbGJhcicsIFtcclxuICAgICAgaChQb3BvdmVyLCB7XHJcbiAgICAgICAgdGlwcHk6IHtcclxuICAgICAgICAgIHBvc2l0aW9uOiAnYm90dG9tJyxcclxuICAgICAgICAgIGh0bWw6IGgoSW50ZXJhY3Rpb25zRG93bmxvYWRNZW51LCB7IGN5U3J2LCBzb3VyY2VzIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9LCBbXHJcbiAgICAgICAgaChJY29uQnV0dG9uLCB7XHJcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ0Rvd25sb2FkcycsXHJcbiAgICAgICAgICBpY29uOiAnZmlsZV9kb3dubG9hZCdcclxuICAgICAgICB9KVxyXG4gICAgICBdKSxcclxuICAgICAgaChJY29uQnV0dG9uLCB7XHJcbiAgICAgICAgZGVzY3JpcHRpb246ICdGaXQgdG8gc2NyZWVuJyxcclxuICAgICAgICBvbkNsaWNrOiAoKSA9PiBjeS5hbmltYXRlKHtcclxuICAgICAgICAgIGZpdDoge1xyXG4gICAgICAgICAgICBlbGVzOiBjeS5ub2RlcygpLmZpbHRlciggbiA9PiAhbi5oYXNDbGFzcygndHlwZS1oaWRkZW4nKSAmJiAhbi5oYXNDbGFzcygnbWV0cmljLWhpZGRlbicpKSxcclxuICAgICAgICAgICAgcGFkZGluZzogMjVcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlYXNpbmc6ICdlYXNlLWluLW91dCdcclxuICAgICAgICB9KSxcclxuICAgICAgICBpc0FjdGl2ZTogZmFsc2UsXHJcbiAgICAgICAgaWNvbjogJ2Z1bGxzY3JlZW4nXHJcbiAgICAgIH0pLFxyXG4gICAgICBoKEljb25CdXR0b24sIHtcclxuICAgICAgICBkZXNjcmlwdGlvbjogJ1Jlc2V0IGFycmFuZ2VtZW50JyxcclxuICAgICAgICBvbkNsaWNrOiAoKSA9PiBjeS5sYXlvdXQoaW50ZXJhY3Rpb25zTGF5b3V0T3B0cyggY3kgKSkucnVuKCksXHJcbiAgICAgICAgaXNBY3RpdmU6IGZhbHNlLFxyXG4gICAgICAgIGljb246ICdyZXBsYXknXHJcbiAgICAgIH0pLFxyXG4gICAgICBoKCdkaXYuZWxlbWVudC1zZWFyY2gnLCBbXHJcbiAgICAgICAgaCgnaW5wdXQuZWxlbWVudC1zZWFyY2gtaW5wdXQuaW5wdXQtcm91bmQuaW5wdXQtam9pbmVkJywge1xyXG4gICAgICAgICAgdmFsdWU6IHNlYXJjaFZhbHVlLFxyXG4gICAgICAgICAgb25DaGFuZ2U6IGUgPT4gdGhpcy5oYW5kbGVOb2RlU2VhcmNoQ2hhbmdlKGUudGFyZ2V0LnZhbHVlKSxcclxuICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcclxuICAgICAgICAgIHBsYWNlaG9sZGVyOiAnU2VhcmNoJyxcclxuICAgICAgICB9KSxcclxuICAgICAgICBoKCdidXR0b24uZWxlbWVudC1zZWFyY2gtY2xlYXInLCB7XHJcbiAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlTm9kZVNlYXJjaENoYW5nZSgnJyk7XHJcbiAgICAgICAgICAgIHRoaXMuZm9jdXNOb2RlU2VhcmNoKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSwgW1xyXG4gICAgICAgICAgaCgnaS5tYXRlcmlhbC1pY29ucycsICdjbG9zZScpXHJcbiAgICAgICAgXSlcclxuICAgICAgXSlcclxuICAgIF0pO1xyXG4gIH1cclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBJbnRlcmFjdGlvbnNUb29sYmFyO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jbGllbnQvZmVhdHVyZXMvaW50ZXJhY3Rpb25zL2ludGVyYWN0aW9ucy10b29sYmFyLmpzIiwiY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xyXG5jb25zdCBoID0gcmVxdWlyZSgncmVhY3QtaHlwZXJzY3JpcHQnKTtcclxuY29uc3QgXyA9IHJlcXVpcmUoJ2xvZGFzaCcpO1xyXG5cclxuY29uc3QgeyBOU19HRU5FQ0FSRFMsIE5TX05DQklfR0VORSwgTlNfSEdOQ19TWU1CT0wsIE5TX1VOSVBST1QgfSA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbmZpZycpO1xyXG5cclxuY2xhc3MgSW50ZXJhY3Rpb25zTm9kZVRvb2x0aXAgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gIHJlbmRlcigpe1xyXG4gICAgbGV0IHsgbm9kZSwgZ2VuZU1ldGFkYXRhIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgbGV0IHhyZWZMaW5rcyA9IF8uZ2V0KGdlbmVNZXRhZGF0YSwgJ3N1bW1hcnkueHJlZkxpbmtzJywgW10pO1xyXG4gICAgbGV0IGRlc2NyaXB0aW9uID0gXy5nZXQoZ2VuZU1ldGFkYXRhLCAnc3VtbWFyeS5kZXNjcmlwdGlvbicsICcnKTtcclxuICAgIGxldCBhbGlhc2VzID0gXy5nZXQoZ2VuZU1ldGFkYXRhLCAnc3VtbWFyeS5hbGlhc2VzJywgW10pO1xyXG5cclxuICAgIGxldCB0aXRsZSA9IG5vZGUuZGF0YSgnaWQnKTtcclxuICAgIGxldCBsaW5rcyA9IFtdO1xyXG5cclxuICAgIHhyZWZMaW5rcy5mb3JFYWNoKCBsaW5rID0+IHtcclxuICAgICAgbGV0IG5hbWU7XHJcbiAgICAgIGNvbnN0IHVybCA9IGxpbmsudXJpO1xyXG4gICAgICBzd2l0Y2ggKCBsaW5rLm5hbWVzcGFjZSApIHtcclxuICAgICAgICBjYXNlIE5TX0hHTkNfU1lNQk9MOlxyXG4gICAgICAgICAgbmFtZSA9ICdIR05DJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgTlNfVU5JUFJPVDpcclxuICAgICAgICAgIG5hbWUgPSAnVW5pUHJvdCc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIE5TX05DQklfR0VORTpcclxuICAgICAgICAgIG5hbWUgPSAnTkNCSSBHZW5lJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgTlNfR0VORUNBUkRTOlxyXG4gICAgICAgICAgbmFtZSA9ICdHZW5lQ2FyZHMnO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIG5hbWUgPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIGxpbmtzLnB1c2goeyBuYW1lLCB1cmwgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gaCgnZGl2LmN5LXRvb2x0aXAnLCBbXHJcbiAgICAgIGgoJ2Rpdi5jeS10b29sdGlwLWhlYWRlcicsIFtcclxuICAgICAgICBoKCdoMi5jeS10b29sdGlwLXRpdGxlJywgdGl0bGUgKVxyXG4gICAgICBdKSxcclxuICAgICAgaCgnZGl2LmN5LXRvb2x0aXAtYm9keScsIFtcclxuICAgICAgICBhbGlhc2VzLmxlbmd0aCA+IDAgPyBoKCdkaXYuY3ktdG9vbHRpcC1zZWN0aW9uJywgW1xyXG4gICAgICAgICAgaCgnZGl2LmN5LXRvb2x0aXAtZmllbGQtbmFtZScsICdPdGhlciBuYW1lcycpLFxyXG4gICAgICAgICAgLi4uYWxpYXNlcy5zbGljZSgwLCAzKS5tYXAoIGFsaWFzID0+IGgoJ2Rpdi5jeS10b29sdGlwLWZpZWxkLXZhbHVlJywgYWxpYXMpIClcclxuICAgICAgICBdKSA6IG51bGwsXHJcbiAgICAgICAgZGVzY3JpcHRpb24gIT0gJycgPyBoKCdkaXYuY3ktdG9vbHRpcC1zZWN0aW9uJywgW1xyXG4gICAgICAgICAgaCgnZGl2LmN5LXRvb2x0aXAtZmllbGQtbmFtZScsICdEZXNjcmlwdGlvbicpLFxyXG4gICAgICAgICAgaCgnZGl2LmN5LXRvb2x0aXAtZmllbGQtdmFsdWUnLCBkZXNjcmlwdGlvbilcclxuICAgICAgICBdKSA6IG51bGxcclxuICAgICAgXSksXHJcbiAgICAgIGxpbmtzLmxlbmd0aCA+IDAgPyBoKCdkaXYuY3ktdG9vbHRpcC1mb290ZXInLCBbXHJcbiAgICAgICAgaCgnZGl2LmN5LXRvb2x0aXAtc2VjdGlvbicsIFtcclxuICAgICAgICAgIGgoJ2Rpdi5jeS10b29sdGlwLWZpZWxkLW5hbWUnLCBbXHJcbiAgICAgICAgICAgICdMaW5rcydcclxuICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgaCgnZGl2LmN5LXRvb2x0aXAtbGlua3MnLCBsaW5rcy5tYXAobGluayA9PiB7XHJcbiAgICAgICAgICAgIGxldCB7IG5hbWUsIHVybCB9ID0gbGluaztcclxuICAgICAgICAgICAgcmV0dXJuIGgoJ2EucGxhaW4tbGluaycsIHsgaHJlZjogdXJsLCB0YXJnZXQ6ICdfYmxhbmsnICB9LCBuYW1lKTtcclxuICAgICAgICAgIH0pKVxyXG4gICAgICAgIF0pXHJcbiAgICAgIF0pIDogbnVsbCxcclxuICAgICAgaCgnZGl2LmN5LXRvb2x0aXAtY2FsbC10by1hY3Rpb24nLCBbXHJcbiAgICAgICAgaCgnYScsIHtcclxuICAgICAgICAgIHRhcmdldDogJ19ibGFuaycsXHJcbiAgICAgICAgICBocmVmOiAnL3NlYXJjaD9xPScgKyB0aXRsZVxyXG4gICAgICAgIH0sIFtcclxuICAgICAgICAgIGgoJ2J1dHRvbi5jYWxsLXRvLWFjdGlvbicsIGBGaW5kIFJlbGF0ZWQgUGF0aHdheXNgKVxyXG4gICAgICAgIF0pXHJcbiAgICAgIF0pXHJcbiAgICBdKTtcclxuICB9XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gSW50ZXJhY3Rpb25zTm9kZVRvb2x0aXA7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NsaWVudC9mZWF0dXJlcy9pbnRlcmFjdGlvbnMvaW50ZXJhY3Rpb25zLW5vZGUtdG9vbHRpcC5qcyIsImNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcclxuY29uc3QgaCA9IHJlcXVpcmUoJ3JlYWN0LWh5cGVyc2NyaXB0Jyk7XHJcbmNvbnN0IHF1ZXJ5U3RyaW5nID0gcmVxdWlyZSgncXVlcnktc3RyaW5nJyk7XHJcblxyXG5jb25zdCB7IFNlcnZlckFQSSB9ID0gcmVxdWlyZSgnLi4vLi4vc2VydmljZXMvJyk7XHJcbmNvbnN0IElOVEVSQUNUSU9OX1RZUEVTID0gcmVxdWlyZSgnLi90eXBlcycpO1xyXG5cclxuY2xhc3MgSW50ZXJhY3Rpb25zRWRnZVRvb2x0aXAgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gIGNvbnN0cnVjdG9yKHByb3BzKXtcclxuICAgIHN1cGVyKHByb3BzKTtcclxuXHJcbiAgICBjb25zdCBlZGdlcyA9IHByb3BzLmVkZ2UucGFyYWxsZWxFZGdlcygpO1xyXG5cclxuICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgIHB1YmxpY2F0aW9uczogW10sXHJcbiAgICAgIHB1YmxpY2F0aW9uc0xvYWRlZDogZmFsc2UsXHJcbiAgICAgIHBhcmFsbGVsRWRnZXM6IGVkZ2VzLFxyXG4gICAgICBzZWxlY3RlZEVkZ2U6IGVkZ2VzLmxlbmd0aCA9PT0gMSA/IGVkZ2VzWzBdOiBudWxsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XHJcbiAgICBpZiggdGhpcy5zdGF0ZS5zZWxlY3RlZEVkZ2UgKXtcclxuICAgICAgdGhpcy5nZXRQdWJsaWNhdGlvbnMoIHRoaXMuc3RhdGUuc2VsZWN0ZWRFZGdlICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRQdWJsaWNhdGlvbnMoZWRnZSl7XHJcbiAgICBsZXQgcHVibWVkSWRzID0gZWRnZS5kYXRhKCdwdWJtZWRJZHMnKTtcclxuXHJcbiAgICB0aGlzLnNldFN0YXRlKHsgcHVibGljYXRpb25zTG9hZGVkOiBmYWxzZSB9LCAoKSA9PiB7XHJcbiAgICAgIFNlcnZlckFQSS5nZXRQdWJtZWRQdWJsaWNhdGlvbnMocHVibWVkSWRzKS50aGVuKCBwdWJsaWNhdGlvbnMgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe3B1YmxpY2F0aW9ucywgcHVibGljYXRpb25zTG9hZGVkOiB0cnVlfSk7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaCggKCkgPT4gdGhpcy5zZXRTdGF0ZSh7IHB1YmxpY2F0aW9uc0xvYWRlZDogdHJ1ZSB9KSApOyAvLyBzd2FsbG93O1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RFZGdlKGVkZ2Upe1xyXG4gICAgdGhpcy5zZXRTdGF0ZSh7IHNlbGVjdGVkRWRnZTogZWRnZSB9KTtcclxuXHJcbiAgICB0aGlzLmdldFB1YmxpY2F0aW9ucyhlZGdlKTtcclxuICB9XHJcblxyXG4gIGRlc2VsZWN0RWRnZSgpe1xyXG4gICAgdGhpcy5zZXRTdGF0ZSh7IHNlbGVjdGVkRWRnZTogbnVsbCB9KTtcclxuICB9XHJcblxyXG4gIHJlbmRlckVkZ2UoKXtcclxuICAgIGxldCB7IHNlbGVjdGVkRWRnZTogZWRnZSwgcGFyYWxsZWxFZGdlcywgcHVibGljYXRpb25zTG9hZGVkLCBwdWJsaWNhdGlvbnMgfSA9IHRoaXMuc3RhdGU7XHJcblxyXG4gICAgbGV0IHRpdGxlID0gZWRnZS5kYXRhKCdpZCcpO1xyXG4gICAgbGV0IGRhdGFzb3VyY2VzID0gZWRnZS5kYXRhKCdkYXRhc291cmNlcycpO1xyXG4gICAgbGV0IHBjSWRzID0gZWRnZS5kYXRhKCdwY0lkcycpO1xyXG5cclxuICAgIGlmKCAhcHVibGljYXRpb25zTG9hZGVkICl7XHJcbiAgICAgIHJldHVybiBoKCdkaXYuY3ktdG9vbHRpcCcsIFtcclxuICAgICAgICBoKCdkaXYuY3ktdG9vbHRpcC1jb250ZW50JywgW1xyXG4gICAgICAgICAgaCgnZGl2LmN5LXRvb2x0aXAtaGVhZGVyJyxbXHJcbiAgICAgICAgICAgIGgoJ2gyLmN5LXRvb2x0aXAtdGl0bGUnLCAnTG9hZGluZy4uLicpXHJcbiAgICAgICAgICBdKSxcclxuICAgICAgICAgIGgoJ2Rpdi5jeS10b29sdGlwLWJvZHknLCBbXHJcbiAgICAgICAgICAgIGgoJ2Rpdi5jeS10b29sdGlwLWxvYWRpbmctc2VjdGlvbicsIFtcclxuICAgICAgICAgICAgICBoKCdpLmljb24uaWNvbi1zcGlubmVyJylcclxuICAgICAgICAgICAgXSlcclxuICAgICAgICAgIF0pXHJcbiAgICAgICAgXSlcclxuICAgICAgXSk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHByb3ZpZGVyc0xpc3QgPSBkYXRhc291cmNlcy5tYXAoIGRzID0+IGgoJ2RpdicsIGRzKSk7XHJcblxyXG4gICAgbGV0IHB1YmxpY2F0aW9uTGlzdCA9IHB1YmxpY2F0aW9ucy5tYXAoIHB1YmxpY2F0aW9uID0+IHtcclxuICAgICAgbGV0IHsgaWQsIHRpdGxlLCBmaXJzdEF1dGhvciwgZGF0ZSwgc291cmNlIH0gPSBwdWJsaWNhdGlvbjtcclxuICAgICAgcmV0dXJuIGgoJ2Rpdi5jeS1vdmVyZmxvdy1jb250ZW50JywgW1xyXG4gICAgICAgIGgoJ2EucGxhaW4tbGluaycsIHsgaHJlZjogJ2h0dHA6Ly9iaW9yZWdpc3RyeS5pby9wdWJtZWQ6JyArIGlkLCB0YXJnZXQ6ICdfYmxhbmsnIH0sIHRpdGxlKSxcclxuICAgICAgICBoKCdkaXYnLCBmaXJzdEF1dGhvciArICAnIGV0IGFsLiB8ICcgKyBzb3VyY2UgKyAnIC0gJyArIG5ldyBEYXRlKGRhdGUpLmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKSlcclxuICAgICAgXSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBsZXQgZGV0YWlsZWRWaWV3c0xpc3QgPSBwY0lkcy5tYXAoIChwY0lkLCBpbmRleCkgID0+IHtcclxuICAgICAgcmV0dXJuIGgoJ2EucGxhaW4tbGluay5jeS10b29sdGlwLW51bWJlci1saW5rJywgeyBocmVmOiAnL3BhdGh3YXlzPycgKyBxdWVyeVN0cmluZy5zdHJpbmdpZnkoeyB1cmk6IHBjSWQgfSksIHRhcmdldDogJ19ibGFuaycgfSwgYCAke2luZGV4ICsgMX0gYCk7XHJcbiAgICB9ICk7XHJcblxyXG4gICAgcmV0dXJuIGgoJ2Rpdi5jeS10b29sdGlwJywgW1xyXG4gICAgICBoKCdkaXYuY3ktdG9vbHRpcC1oZWFkZXInLCBbXHJcbiAgICAgICAgcGFyYWxsZWxFZGdlcy5sZW5ndGggPiAxID8gaCgnYnV0dG9uLnBsYWluLWJ1dHRvbi5jeS10b29sdGlwLWJhY2snLCB7XHJcbiAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB0aGlzLmRlc2VsZWN0RWRnZSgpXHJcbiAgICAgICAgfSwgW1xyXG4gICAgICAgICAgLy8gIGgoJ2kubWF0ZXJpYWwtaWNvbnMnLCAnYXJyb3dfYmFjaycpIC8vIGRvZXMgbm90IHdvcmsgZm9yIHNvbWUgcmVhc29uXHJcbiAgICAgICAgICBoKCdzcGFuJywgJzwnKVxyXG4gICAgICAgIF0pIDogbnVsbCxcclxuICAgICAgICBoKCdoMi5jeS10b29sdGlwLXRpdGxlJywgdGl0bGUpXHJcbiAgICAgIF0uZmlsdGVyKGVsID0+IGVsICE9IG51bGwpKSxcclxuICAgICAgaCgnZGl2LmN5LXRvb2x0aXAtYm9keScsIFtcclxuICAgICAgICBwcm92aWRlcnNMaXN0Lmxlbmd0aCA+IDAgPyBoKCdkaXYuY3ktdG9vbHRpcC1zZWN0aW9uJywgW1xyXG4gICAgICAgICAgaCgnZGl2LmN5LXRvb2x0aXAtZmllbGQtbmFtZScsICdEYXRhIFNvdXJjZXMnKSxcclxuICAgICAgICAgIGgoJ2RpdicsIHByb3ZpZGVyc0xpc3QpXHJcbiAgICAgICAgXSkgOiBudWxsLFxyXG4gICAgICAgIHB1YmxpY2F0aW9uTGlzdC5sZW5ndGggPiAwID8gaCgnZGl2LmN5LXRvb2x0aXAtc2VjdGlvbicsIFtcclxuICAgICAgICAgIGgoJ2Rpdi5jeS10b29sdGlwLWZpZWxkLW5hbWUnLCAnUHVibGljYXRpb25zJyksXHJcbiAgICAgICAgICBoKCdkaXYnLCBwdWJsaWNhdGlvbkxpc3QpXHJcbiAgICAgICAgXSkgOiBudWxsLFxyXG4gICAgICAgIGRldGFpbGVkVmlld3NMaXN0Lmxlbmd0aCA+IDAgPyBoKCdkaXYuY3ktdG9vbHRpcC1zZWN0aW9uJywgW1xyXG4gICAgICAgICAgaCgnZGl2LmN5LXRvb2x0aXAtZmllbGQtbmFtZScsICdPcGVuIGEgZGV0YWlsZWQgdmlldyBvZiB0aGlzIGludGVyYWN0aW9uJyksXHJcbiAgICAgICAgICBoKCdkaXYuY3ktdG9vbHRpcC1saW5rcycsIGRldGFpbGVkVmlld3NMaXN0KVxyXG4gICAgICAgIF0pIDogbnVsbCxcclxuICAgICAgICAvLyBoKCdkaXYuY3ktdG9vbHRpcC1zZWN0aW9uJywgW1xyXG4gICAgICAgIC8vICAgaCgnZGl2LmN5LXRvb2x0aXAtZmllbGQtbmFtZScsICdSZWFjdG9tZSBMaW5rcycpLFxyXG4gICAgICAgIC8vICAgaCgnZGl2LmN5LXRvb2x0aXAtZmllbGQtdmFsdWUnLCByZWFjdG9tZUlkcylcclxuICAgICAgICAvLyBdKVxyXG4gICAgICBdKVxyXG4gICAgXSk7XHJcbiAgfVxyXG5cclxuICByZW5kZXJFZGdlQ2hvaWNlKCl7XHJcbiAgICBjb25zdCB7IHBhcmFsbGVsRWRnZXM6IGVkZ2VzIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgbGV0IGludGVyYWN0aW9uVHlwZVZhbHVlcyA9IE9iamVjdC5rZXlzKElOVEVSQUNUSU9OX1RZUEVTKS5tYXAoayA9PiBJTlRFUkFDVElPTl9UWVBFU1trXSk7XHJcblxyXG4gICAgcmV0dXJuIGgoJ2Rpdi5jeS10b29sdGlwJywgW1xyXG4gICAgICBoKCdkaXYuY3ktdG9vbHRpcC1oZWFkZXInLFtcclxuICAgICAgICBoKCdoMi5jeS10b29sdGlwLXRpdGxlJywgJ0Nob29zZSBhbiBpbnRlcmFjdGlvbicpXHJcbiAgICAgIF0pLFxyXG4gICAgICBoKCdkaXYuY3ktdG9vbHRpcC1ib2R5JywgW1xyXG4gICAgICAgIGgoJ2Rpdi5jeS10b29sdGlwLWVkZ2UtZW50cmllcycsIGVkZ2VzLm1hcChlZGdlID0+IGgoJ2Rpdi5jeS10b29sdGlwLWVkZ2UtZW50cnknLCBbXHJcbiAgICAgICAgICBoKCdhLnBsYWluLWxpbmsuY3ktdG9vbHRpcC1lZGdlLWxpbmsnLCB7XHJcbiAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHRoaXMuc2VsZWN0RWRnZShlZGdlKVxyXG4gICAgICAgICAgfSwgW1xyXG4gICAgICAgICAgICBoKCdzcGFuLmN5LXRvb2x0aXAtZWRnZS1jb2xvcicsIHtcclxuICAgICAgICAgICAgICBjbGFzc05hbWU6ICdpbnRlcmFjdGlvbnMtY29sb3ItJyArIGludGVyYWN0aW9uVHlwZVZhbHVlcy5maW5kKHR5cGUgPT4gZWRnZS5oYXNDbGFzcyh0eXBlKSkudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgaCgnc3Bhbi5jeS10b29sdGlwLWVkZ2UtbmFtZScsIGVkZ2UuaWQoKSlcclxuICAgICAgICAgIF0pXHJcbiAgICAgICAgXSkpKVxyXG4gICAgICBdKVxyXG4gICAgXSk7XHJcbiAgfVxyXG5cclxuICByZW5kZXIoKXtcclxuICAgIGxldCB7IHNlbGVjdGVkRWRnZSB9ID0gdGhpcy5zdGF0ZTtcclxuXHJcbiAgICBpZiggc2VsZWN0ZWRFZGdlICl7XHJcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlckVkZ2UoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlckVkZ2VDaG9pY2UoKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gSW50ZXJhY3Rpb25zRWRnZVRvb2x0aXA7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NsaWVudC9mZWF0dXJlcy9pbnRlcmFjdGlvbnMvaW50ZXJhY3Rpb25zLWVkZ2UtdG9vbHRpcC5qcyIsImNvbnN0IGN5dG9zY2FwZSA9IHJlcXVpcmUoJ2N5dG9zY2FwZScpO1xyXG5jb25zdCBpU3R5bGVzaGVldD1jeXRvc2NhcGUuc3R5bGVzaGVldCgpXHJcbi5zZWxlY3RvcignZWRnZScpXHJcbiAgLmNzcyh7XHJcbiAgICAnb3BhY2l0eSc6IDAuNCxcclxuICAgICdsaW5lLWNvbG9yJzogJyM1NTUnLFxyXG4gICAgJ3dpZHRoJzogNCxcclxuICAgICdjdXJ2ZS1zdHlsZSc6ICdoYXlzdGFjaycsXHJcbiAgICAnaGF5c3RhY2stcmFkaXVzJzogMC4yNVxyXG4gIH0pXHJcbi5zZWxlY3RvcignLk1vZGlmaWNhdGlvbicpXHJcbiAgLmNzcyh7XHJcbiAgICAnbGluZS1jb2xvcic6ICcjZmZjMjhiJ1xyXG4gIH0pXHJcbi5zZWxlY3RvcignLkJpbmRpbmcnKVxyXG4gIC5jc3Moe1xyXG4gICAgJ2xpbmUtY29sb3InOiAnIzhiZDhkZCdcclxuICB9KVxyXG4uc2VsZWN0b3IoJy5FeHByZXNzaW9uJylcclxuICAuY3NzKHtcclxuICAgICdsaW5lLWNvbG9yJzogJyNmNGEyYTMnXHJcbiAgfSlcclxuLnNlbGVjdG9yKCcuT3RoZXInKVxyXG4gIC5jc3Moe1xyXG4gICAgJ2xpbmUtY29sb3InOiAnIzk0OTQ5NCdcclxuICB9KVxyXG4uc2VsZWN0b3IoJ25vZGVbY2xhc3NAPVwiYmFsbFwiXScpXHJcbiAgLmNzcyh7XHJcbiAgICAnZm9udC1zaXplJzogMjAsXHJcbiAgICAnY29sb3InOiAnI2ZmZicsXHJcbiAgICAnYmFja2dyb3VuZC1jb2xvcic6ICcjNTU1JyxcclxuICAgICd0ZXh0LW91dGxpbmUtY29sb3InOiAnIzU1NScsXHJcbiAgICAndGV4dC1vdXRsaW5lLXdpZHRoJzogNCxcclxuICAgICd3aWR0aCc6IDUwLFxyXG4gICAgJ2hlaWdodCc6IDUwLFxyXG4gICAgJ2xhYmVsJzogJ2RhdGEoaWQpJyxcclxuICAgICd0ZXh0LWhhbGlnbic6ICdjZW50ZXInLFxyXG4gICAgJ3RleHQtdmFsaWduJzogJ2NlbnRlcicsXHJcbiAgfSlcclxuLnNlbGVjdG9yKCcuaGlnaGxpZ2h0ZWQnKVxyXG4gIC5jc3Moe1xyXG4gICAgJ29wYWNpdHknOjEsXHJcbiAgfSlcclxuLnNlbGVjdG9yKCcudW5oaWdobGlnaHRlZCcpXHJcbiAgLmNzcyh7XHJcbiAgICAnb3BhY2l0eSc6MC4yLFxyXG4gIH0pXHJcbi5zZWxlY3RvcignLm1ldHJpYy1oaWRkZW4nKVxyXG4gIC5jc3Moe1xyXG4gICAgJ2Rpc3BsYXknOidub25lJyxcclxuICB9KVxyXG4uc2VsZWN0b3IoJy50eXBlLWhpZGRlbicpXHJcbiAgLmNzcyh7XHJcbiAgICAnZGlzcGxheSc6ICdub25lJ1xyXG4gIH0pXHJcbi5zZWxlY3RvcihgLm1hdGNoZWRgKVxyXG4gIC5jc3Moe1xyXG4gICAgJ2JvcmRlci1jb2xvcic6ICd5ZWxsb3cnLFxyXG4gICAgJ2JvcmRlci13aWR0aCc6IDEwLFxyXG4gICAgJ2JhY2tncm91bmQtY29sb3InOiAnIzYwNjAwMCcsXHJcbiAgICAndGV4dC1vdXRsaW5lLWNvbG9yJzogJyM2MDYwMDAnXHJcbiAgfSlcclxuLnNlbGVjdG9yKCdub2RlW1tkZWdyZWUgPSAwXV0nKVxyXG4gIC5jc3Moe1xyXG4gICAgJ2Rpc3BsYXknOiAnbm9uZSdcclxuICB9KVxyXG4uc2VsZWN0b3IoJ25vZGVbP3F1ZXJpZWRdJylcclxuICAuY3NzKHtcclxuICAgICdkaXNwbGF5JzogJ2VsZW1lbnQnLFxyXG4gICAgJ3dpZHRoJzogNzUsXHJcbiAgICAnaGVpZ2h0JzogNzVcclxuICB9KVxyXG4uc2VsZWN0b3IoJ25vZGU6c2VsZWN0ZWQnKVxyXG4gIC5jc3Moe1xyXG4gICAgJ2JhY2tncm91bmQtY29sb3InOiAnIzAxNjlkOScsXHJcbiAgICAndGV4dC1vdXRsaW5lLWNvbG9yJzogJyMwMTY5ZDknXHJcbiAgfSlcclxuLnNlbGVjdG9yKCdlZGdlOnNlbGVjdGVkJylcclxuICAuY3NzKHtcclxuICAgICd6LWluZGV4JzogOTk5LFxyXG4gICAgJ29wYWNpdHknOiAxXHJcbiAgfSk7XHJcbm1vZHVsZS5leHBvcnRzID0gaVN0eWxlc2hlZXQ7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NsaWVudC9mZWF0dXJlcy9pbnRlcmFjdGlvbnMvY3kvaW50ZXJhY3Rpb25zLXN0eWxlc2hlZXQuanMiLCJjb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XHJcbmNvbnN0IGggPSByZXF1aXJlKCdyZWFjdC1oeXBlcnNjcmlwdCcpO1xyXG5jb25zdCBzYXZlQXMgPSByZXF1aXJlKCdmaWxlLXNhdmVyJykuc2F2ZUFzO1xyXG5jb25zdCBMb2FkZXIgPSByZXF1aXJlKCdyZWFjdC1sb2FkZXInKTtcclxuXHJcblxyXG5jbGFzcyBJbnRlcmFjdGlvbnNEb3dubG9hZE1lbnUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICBsb2FkaW5nOiBmYWxzZVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGRvd25sb2FkUG5nKCl7XHJcbiAgICBsZXQgeyBjeVNydiwgc291cmNlcyB9ID0gdGhpcy5wcm9wcztcclxuICAgIGxldCBjeSA9IGN5U3J2LmdldCgpO1xyXG5cclxuICAgIGxldCBzYXZlQ3lQbmcgPSAoKSA9PntcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgc2F2ZUFzKGN5LnBuZyh7XHJcbiAgICAgICAgICBvdXRwdXQ6ICdibG9iJyxcclxuICAgICAgICAgIHNjYWxlOiAyLFxyXG4gICAgICAgICAgYmc6ICd3aGl0ZScsXHJcbiAgICAgICAgICBmdWxsOiB0cnVlXHJcbiAgICAgICAgfSksIGAke3NvdXJjZXMuam9pbignXycpfV9pbnRlcmFjdGlvbnMucG5nYCk7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGxvYWRpbmc6IGZhbHNlIH0pO1xyXG4gICAgICB9LCAxKTtcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5zZXRTdGF0ZSh7IGxvYWRpbmc6IHRydWUgfSwgKCkgPT4gc2F2ZUN5UG5nKCkgKTtcclxuICB9XHJcblxyXG4gIGRvd25sb2FkU2lmKCl7XHJcbiAgICBsZXQgeyBjeVNydiwgc291cmNlcyB9ID0gdGhpcy5wcm9wcztcclxuICAgIGxldCBlZGdlSWRzID0gY3lTcnYuZ2V0KCkuZWRnZXMoKS5tYXAoIGVkZ2UgPT4gZWRnZS5kYXRhKCdpZCcpICkuc29ydCgpLmpvaW4oJ1xcbicpO1xyXG5cclxuICAgIHNhdmVBcyhuZXcgRmlsZShbZWRnZUlkc10sIGAke3NvdXJjZXMuam9pbignXycpfV9pbnRlcmFjdGlvbnMuc2lmYCAsIHsgdHlwZTogJ3RleHQvcGxhaW47Y2hhcnNldD11dGYtOCcgfSkpO1xyXG4gIH1cclxuXHJcbiAgcmVuZGVyKCkge1xyXG4gICAgcmV0dXJuIGgoJ2Rpdi5maWxlLWRvd25sb2FkLW1lbnUuaW50ZXJhY3Rpb25zLWRvd25sb2FkLW1lbnUnLCBbXHJcbiAgICAgIGgoJ2gyJywgJ0Rvd25sb2FkIEFzLi4uJyksXHJcbiAgICAgIGgoJ2Rpdi5maWxlLWRvd25sb2FkLWNvbnRlbnQnLCBbXHJcbiAgICAgICAgaCgnZGl2LmRvd25sb2FkLW9wdGlvbicsIHsgb25DbGljazogKCkgPT4gdGhpcy5kb3dubG9hZFBuZygpIH0sIFtcclxuICAgICAgICAgIGgoJ2Rpdi5kb3dubG9hZC1vcHRpb24taGVhZGVyJywgW1xyXG4gICAgICAgICAgICBoKCdoMycsICdJbWFnZSAoUE5HKScpLFxyXG4gICAgICAgICAgXSksXHJcbiAgICAgICAgICBoKCdkaXYuZG93bmxvYWQtb3B0aW9uLWRlc2NyaXB0aW9uJywgJ0Rvd25sb2FkIGFuIGltYWdlIG9mIHRoZSBlbnRpcmUgdmlldycpXHJcbiAgICAgICAgXSksXHJcbiAgICAgICAgaCgnZGl2LmRvd25sb2FkLW9wdGlvbicsIHsgb25DbGljazogKCkgPT4gdGhpcy5kb3dubG9hZFNpZigpIH0sIFtcclxuICAgICAgICAgIGgoJ2Rpdi5kb3dubG9hZC1vcHRpb24taGVhZGVyJywgW1xyXG4gICAgICAgICAgICBoKCdoMycsICdTSUYnKSxcclxuICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgaCgnZGl2LmRvd25sb2FkLW9wdGlvbi1kZXNjcmlwdGlvbicsICdMaXN0IG9mIGludGVyYWN0aW9uIHBhaXJzIHRvIGJlIHVzZWQgd2l0aCBDeXRvc2NhcGUgZGVza3RvcCwgYW5hbHlzaXMsIGFuZCBncmFwaCBhbGdvcml0aG1zLicpXHJcbiAgICAgICAgXSksXHJcblxyXG4gICAgICAgIGgoTG9hZGVyLCB7IGxvYWRlZDogIXRoaXMuc3RhdGUubG9hZGluZyB9KVxyXG4gICAgICBdKVxyXG4gICAgXSk7XHJcbiAgfVxyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEludGVyYWN0aW9uc0Rvd25sb2FkTWVudTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY2xpZW50L2ZlYXR1cmVzL2ludGVyYWN0aW9ucy9pbnRlcmFjdGlvbnMtZG93bmxvYWQtbWVudS5qcyIsImNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcclxuY29uc3QgaCA9IHJlcXVpcmUoJ3JlYWN0LWh5cGVyc2NyaXB0Jyk7XHJcbmNvbnN0IGNsYXNzTmFtZXMgPSByZXF1aXJlKCdjbGFzc25hbWVzJyk7XHJcblxyXG5jb25zdCBJTlRFUkFDVElPTl9UWVBFUyA9IHJlcXVpcmUoJy4vdHlwZXMnKTtcclxuXHJcbmNsYXNzIEludGVyYWN0aW9uc01lbnUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gIGNvbnN0cnVjdG9yKHByb3BzKXtcclxuICAgIHN1cGVyKHByb3BzKTtcclxuICAgIGxldCB7IEJJTkRJTkcsIE1PRElGSUNBVElPTiwgRVhQUkVTU0lPTiwgT1RIRVIgfSA9IElOVEVSQUNUSU9OX1RZUEVTO1xyXG5cclxuICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgIFtCSU5ESU5HXTogdHJ1ZSxcclxuICAgICAgW01PRElGSUNBVElPTl06IHRydWUsXHJcbiAgICAgIFtFWFBSRVNTSU9OXTogdHJ1ZSxcclxuICAgICAgW09USEVSXTogdHJ1ZVxyXG4gICAgfTtcclxuXHJcbiAgfVxyXG5cclxuICB0b2dnbGVJbnRuVHlwZSh0eXBlKXtcclxuICAgIGxldCB7IGN5U3J2IH0gPSB0aGlzLnByb3BzO1xyXG4gICAgbGV0IGN5ID0gY3lTcnYuZ2V0KCk7XHJcbiAgICBsZXQgZWRnZXMgPSBjeS5lZGdlcyhgLiR7dHlwZX1gKTtcclxuICAgIGxldCBub2RlcyA9IGVkZ2VzLmNvbm5lY3RlZE5vZGVzKCk7XHJcblxyXG4gICAgbGV0IG5vZGVIYXNOb1Zpc2libGVFZGdlcyA9IG5vZGUgPT4gbm9kZS5jb25uZWN0ZWRFZGdlcygpLmV2ZXJ5KCBlZGdlID0+IGVkZ2UuaGFzQ2xhc3MoJ3R5cGUtaGlkZGVuJykgfHwgZWRnZS5oYXNDbGFzcygnbWV0cmljLWhpZGRlbicpKTtcclxuXHJcbiAgICBpZiggdGhpcy5zdGF0ZVt0eXBlXSApe1xyXG4gICAgICBlZGdlcy5hZGRDbGFzcygndHlwZS1oaWRkZW4nKTtcclxuICAgICAgbm9kZXMuZmlsdGVyKCBub2RlSGFzTm9WaXNpYmxlRWRnZXMgKS5hZGRDbGFzcygndHlwZS1oaWRkZW4nKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG5vZGVzLnJlbW92ZUNsYXNzKCd0eXBlLWhpZGRlbicpO1xyXG4gICAgICBlZGdlcy5yZW1vdmVDbGFzcygndHlwZS1oaWRkZW4nKTtcclxuICAgIH1cclxuXHJcbiAgICBjeS5lbWl0KCdoaWRlLXR5cGUnKTtcclxuXHJcbiAgICB0aGlzLnNldFN0YXRlKHtbdHlwZV06ICF0aGlzLnN0YXRlW3R5cGVdIH0pO1xyXG4gIH1cclxuXHJcbiAgcmVuZGVyKCl7XHJcbiAgICBsZXQgeyBjeVNydiB9ID0gdGhpcy5wcm9wcztcclxuICAgIGxldCB7IEJpbmRpbmcsIEV4cHJlc3Npb24sIE1vZGlmaWNhdGlvbiwgT3RoZXIgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBsZXQgY3kgPSBjeVNydi5nZXQoKTtcclxuXHJcbiAgICBsZXQgaGFzVHlwZSA9IChjeSwgdHlwZSkgPT4gY3kuZWRnZXMoYC4ke3R5cGV9YCkubGVuZ3RoID4gMDtcclxuICAgIGxldCB7IEJJTkRJTkcsIE1PRElGSUNBVElPTiwgRVhQUkVTU0lPTiwgT1RIRVIgfSA9IElOVEVSQUNUSU9OX1RZUEVTO1xyXG5cclxuICAgIGxldCBoYXNNb2RpZmljYXRpb25zID0gaGFzVHlwZShjeSwgTU9ESUZJQ0FUSU9OKTtcclxuICAgIGxldCBoYXNFeHByZXNzaW9ucyA9IGhhc1R5cGUoY3ksIEVYUFJFU1NJT04pO1xyXG4gICAgbGV0IGhhc0JpbmRpbmdzID0gaGFzVHlwZShjeSwgQklORElORyk7XHJcbiAgICBsZXQgaGFzT3RoZXIgPSBoYXNUeXBlKGN5LCBPVEhFUik7XHJcblxyXG4gICAgbGV0IEludGVyYWN0aW9uVG9nZ2xlQnV0dG9uID0gcHJvcHMgPT4ge1xyXG4gICAgICBsZXQgeyB0eXBlLCBhY3RpdmUgfSA9IHByb3BzO1xyXG4gICAgICBsZXQgbGVnZW5kQ2xhc3MgPSBgaW50ZXJhY3Rpb25zLWNvbG9yLSR7dHlwZS50b0xvd2VyQ2FzZSgpfWA7XHJcblxyXG4gICAgICByZXR1cm4gaCgnZGl2Jywge1xyXG4gICAgICAgIG9uQ2xpY2s6ICgpID0+ICB0aGlzLnRvZ2dsZUludG5UeXBlKHR5cGUpLFxyXG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcyh7XHJcbiAgICAgICAgICAnaW50ZXJhY3Rpb25zLWZpbHRlci1idXR0b24nOiB0cnVlLFxyXG4gICAgICAgICAgJ2ludGVyYWN0aW9ucy1maWx0ZXItYnV0dG9uLWFjdGl2ZSc6IGFjdGl2ZVxyXG4gICAgICAgIH0pLFxyXG5cclxuICAgICAgfSwgW1xyXG4gICAgICAgIGgoJ2RpdicsIHtcclxuICAgICAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcyh7XHJcbiAgICAgICAgICAgIFtsZWdlbmRDbGFzc106IHRydWUsXHJcbiAgICAgICAgICAgICdpbnRlcmFjdGlvbnMtY29sb3InOiB0cnVlXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH0gKSxcclxuICAgICAgICBoKCdkaXYuaW50ZXJhY3Rpb25zLWZpbHRlci1sYWJlbCcsIHR5cGUpLFxyXG4gICAgICAgIGgoJ2Rpdi5pbnRlcmFjdGlvbnMtZmlsdGVyLWNoZWNrJywgW1xyXG4gICAgICAgICAgaCgnaS5tYXRlcmlhbC1pY29ucycsIChhY3RpdmUgPyAnY2hlY2tfYm94JyA6ICdjaGVja19ib3hfb3V0bGluZV9ibGFuaycpKVxyXG4gICAgICAgIF0pXHJcbiAgICAgIF0pO1xyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gaCgnZGl2LmludGVyYWN0aW9ucy1zaWRlYmFyJywgW1xyXG4gICAgICBoYXNCaW5kaW5ncyA/IGgoSW50ZXJhY3Rpb25Ub2dnbGVCdXR0b24sIHsgdHlwZTogQklORElORywgYWN0aXZlOiBCaW5kaW5nIH0pIDogbnVsbCxcclxuICAgICAgaGFzRXhwcmVzc2lvbnMgPyBoKEludGVyYWN0aW9uVG9nZ2xlQnV0dG9uLCB7IHR5cGU6IEVYUFJFU1NJT04sIGFjdGl2ZTogRXhwcmVzc2lvbiB9KSA6IG51bGwsXHJcbiAgICAgIGhhc01vZGlmaWNhdGlvbnMgPyBoKEludGVyYWN0aW9uVG9nZ2xlQnV0dG9uLCB7IHR5cGU6IE1PRElGSUNBVElPTiwgYWN0aXZlOiBNb2RpZmljYXRpb24gfSkgOiBudWxsLFxyXG4gICAgICBoYXNPdGhlciA/IGgoSW50ZXJhY3Rpb25Ub2dnbGVCdXR0b24sIHsgdHlwZTogT1RIRVIsIGFjdGl2ZTogT3RoZXIgfSkgOiBudWxsLFxyXG4gICAgXSk7XHJcbiAgfVxyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEludGVyYWN0aW9uc01lbnU7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NsaWVudC9mZWF0dXJlcy9pbnRlcmFjdGlvbnMvaW50ZXJhY3Rpb25zLW1lbnUuanMiLCJjb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XHJcbmNvbnN0IGggPSByZXF1aXJlKCdyZWFjdC1oeXBlcnNjcmlwdCcpO1xyXG5jb25zdCBfID0gcmVxdWlyZSgnbG9kYXNoJyk7XHJcbmNvbnN0IExvYWRlciA9IHJlcXVpcmUoJ3JlYWN0LWxvYWRlcicpO1xyXG5jb25zdCBjbGFzc05hbWVzID0gcmVxdWlyZSgnY2xhc3NuYW1lcycpO1xyXG5jb25zdCBxdWVyeVN0cmluZyA9IHJlcXVpcmUoJ3F1ZXJ5LXN0cmluZycpO1xyXG5cclxuY29uc3QgRW5yaWNobWVudFRvb2xiYXIgPSByZXF1aXJlKCcuL2VucmljaG1lbnQtdG9vbGJhcicpO1xyXG5jb25zdCB7IFBjTG9nb0xpbmssIEN5dG9zY2FwZU5ldHdvcmssIFBvcG92ZXIgfSA9IHJlcXVpcmUoJy4uLy4uL2NvbW1vbi9jb21wb25lbnRzLycpO1xyXG5cclxuY29uc3QgQ3l0b3NjYXBlU2VydmljZSA9IHJlcXVpcmUoJy4uLy4uL2NvbW1vbi9jeS8nKTtcclxuY29uc3QgeyBTZXJ2ZXJBUEkgfSA9IHJlcXVpcmUoJy4uLy4uL3NlcnZpY2VzJyk7XHJcblxyXG5jb25zdCB7IGVucmljaG1lbnRMYXlvdXQsIGVucmljaG1lbnRTdHlsZXNoZWV0LCBiaW5kRXZlbnRzIH0gPSByZXF1aXJlKCcuL2N5Jyk7XHJcbmNvbnN0IHsgVGltZW91dEVycm9yIH0gPSByZXF1aXJlKCcuLi8uLi8uLi91dGlsJyk7XHJcbmNvbnN0IHsgRXJyb3JNZXNzYWdlIH0gPSByZXF1aXJlKCcuLi8uLi9jb21tb24vY29tcG9uZW50cy9lcnJvci1tZXNzYWdlJyk7XHJcbmNvbnN0IHsgQ29udHJpYnV0ZSB9ID0gcmVxdWlyZSgnLi4vLi4vY29tbW9uL2NvbXBvbmVudHMvY29udHJpYnV0ZScpO1xyXG5cclxuY29uc3QgTUFYX0VMRU1FTlRTX0NVVE9GRiA9IDM7XHJcbmNvbnN0IExJU1RfRUxFTUVOVFNfU0hPV04gPSBNQVhfRUxFTUVOVFNfQ1VUT0ZGIC0gMTtcclxuXHJcbmNsYXNzIEVucmljaG1lbnQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gIGNvbnN0cnVjdG9yKHByb3BzKXtcclxuICAgIHN1cGVyKHByb3BzKTtcclxuXHJcbiAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICBjeVNydjogbmV3IEN5dG9zY2FwZVNlcnZpY2UoeyBzdHlsZTogZW5yaWNobWVudFN0eWxlc2hlZXQsIG9uTW91bnQ6IGJpbmRFdmVudHMgfSksXHJcbiAgICAgIHNvdXJjZXM6IF8udW5pcShxdWVyeVN0cmluZy5wYXJzZShwcm9wcy5sb2NhdGlvbi5zZWFyY2gpLnNvdXJjZS5zcGxpdCgnLCcpKSxcclxuICAgICAgZXJyb3I6IG51bGwsXHJcbiAgICAgIGxvYWRpbmc6IHRydWUsXHJcbiAgICAgIG5ldHdvcmtFbXB0eTogZmFsc2VcclxuICAgIH07XHJcblxyXG4gICAgaWYoIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgKXtcclxuICAgICAgdGhpcy5zdGF0ZS5jeVNydi5nZXRQcm9taXNlKCkudGhlbihjeSA9PiB3aW5kb3cuY3kgPSBjeSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb21wb25lbnREaWRNb3VudCgpe1xyXG4gICAgdGhpcy5sb2FkRW5yaWNobWVudCgpO1xyXG4gIH1cclxuXHJcbiAgbG9hZEVucmljaG1lbnQoKXtcclxuICAgIGxldCB7IHNvdXJjZXMsIGN5U3J2IH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgbGV0IGN5ID0gY3lTcnYuZ2V0KCk7XHJcblxyXG4gICAgbGV0IGdldE5ldHdvcmtKc29uID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGxldCB7IHBhdGh3YXlzIH0gPSBhd2FpdCBTZXJ2ZXJBUEkuZW5yaWNobWVudEFQSSh7IHF1ZXJ5OiBzb3VyY2VzfSwgJ2FuYWx5c2lzJyk7XHJcbiAgICAgICAgbGV0IGVucmljaG1lbnROZXR3b3JrID0gYXdhaXQgU2VydmVyQVBJLmVucmljaG1lbnRBUEkoeyBwYXRod2F5cyB9LCAndmlzdWFsaXphdGlvbicpO1xyXG4gICAgICAgIGxldCBuZXR3b3JrSGFzWmVyb05vZGVzID0gZW5yaWNobWVudE5ldHdvcmsuZ3JhcGguZWxlbWVudHMubm9kZXMubGVuZ3RoID09PSAwO1xyXG4gICAgICAgIGVucmljaG1lbnROZXR3b3JrLmdyYXBoLmVsZW1lbnRzLm5vZGVzLmZvckVhY2goIG5vZGUgPT4ge1xyXG4gICAgICAgICAgY29uc3QgaW50ZXJzZWN0aW9uID0gXy5pbnRlcnNlY3Rpb24oIG5vZGUuZGF0YS5nZW5lU2V0LCBzb3VyY2VzICk7XHJcbiAgICAgICAgICBfLmFzc2lnbiggbm9kZS5kYXRhLCB7IGludGVyc2VjdGlvbiB9ICk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGN5LnJlbW92ZSgnKicpO1xyXG4gICAgICAgIGN5LmFkZCh7XHJcbiAgICAgICAgICBlZGdlczogZW5yaWNobWVudE5ldHdvcmsuZ3JhcGguZWxlbWVudHMuZWRnZXMsXHJcbiAgICAgICAgICBub2RlczogZW5yaWNobWVudE5ldHdvcmsuZ3JhcGguZWxlbWVudHMubm9kZXNcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgZW5yaWNobWVudExheW91dCggY3kgKS50aGVuICggKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxyXG4gICAgICAgICAgICBuZXR3b3JrRW1wdHk6IG5ldHdvcmtIYXNaZXJvTm9kZXMsXHJcbiAgICAgICAgICAgIGVycm9yOiBudWxsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSBjYXRjaCggZSApe1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgZXJyb3I6IGUsXHJcbiAgICAgICAgICBsb2FkaW5nOiBmYWxzZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuc2V0U3RhdGUoeyBsb2FkaW5nOiB0cnVlLCBuZXR3b3JrRW1wdHk6IGZhbHNlIH0sICgpID0+IGdldE5ldHdvcmtKc29uKCkpO1xyXG4gIH1cclxuXHJcbiAgcmVuZGVyKCl7XHJcbiAgICBsZXQgeyBsb2FkaW5nLCBjeVNydiwgbmV0d29ya0VtcHR5LCBzb3VyY2VzLCBlcnJvciB9ID0gdGhpcy5zdGF0ZTtcclxuICAgIGxldCB0aXRsZUNvbnRlbnQgPSBbXTtcclxuXHJcbiAgICBsZXQgZXJyb3JNZXNzYWdlO1xyXG4gICAgaWYoIG5ldHdvcmtFbXB0eSApIHtcclxuICAgICAgZXJyb3JNZXNzYWdlID0gaChFcnJvck1lc3NhZ2UsIHsgdGl0bGU6ICdObyByZXN1bHRzIHRvIGRpc3BsYXkuJywgYm9keTogJ1RyeSBkaWZmZXJlbnQgZ2VuZXMgaW4geW91ciBzZWFyY2guJyAsIGZvb3RlcjogbnVsbCwgbG9nbzogdHJ1ZSB9ICk7XHJcbiAgICB9IGVsc2UgaWYoIGVycm9yIGluc3RhbmNlb2YgVGltZW91dEVycm9yICkge1xyXG4gICAgICBlcnJvck1lc3NhZ2UgPSBoKCBFcnJvck1lc3NhZ2UsIHsgdGl0bGU6ICdUaGlzIGlzIHRha2luZyBsb25nZXIgdGhhbiBleHBlY3RlZCcsIGJvZHk6ICdUcnkgYWdhaW4gbGF0ZXIuJywgbG9nbzogdHJ1ZSB9ICk7XHJcbiAgICB9IGVsc2UgaWYoIGVycm9yICkge1xyXG4gICAgICBlcnJvck1lc3NhZ2UgPSBoKCBFcnJvck1lc3NhZ2UsIHsgbG9nbzogdHJ1ZSB9ICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYoIHNvdXJjZXMubGVuZ3RoID09PSAxICl7XHJcbiAgICAgIHRpdGxlQ29udGVudC5wdXNoKGgoJ3NwYW4nLCBgUGF0aHdheXMgZW5yaWNoZWQgZm9yICR7c291cmNlc1swXX1gKSk7XHJcbiAgICB9XHJcbiAgICBpZiggMSA8IHNvdXJjZXMubGVuZ3RoICYmIHNvdXJjZXMubGVuZ3RoIDw9IE1BWF9FTEVNRU5UU19DVVRPRkYgKXtcclxuICAgICAgdGl0bGVDb250ZW50LnB1c2goaCgnc3BhbicsIGBQYXRod2F5cyBlbnJpY2hlZCBmb3IgJHsgc291cmNlcy5zbGljZSgwLCBzb3VyY2VzLmxlbmd0aCAtIDEpLmpvaW4oJywgJyl9IGFuZCAke3NvdXJjZXMuc2xpY2UoLTEpfWApKTtcclxuICAgIH1cclxuICAgIGlmKCBzb3VyY2VzLmxlbmd0aCA+IE1BWF9FTEVNRU5UU19DVVRPRkYgKXtcclxuICAgICAgdGl0bGVDb250ZW50LnB1c2goaCgnc3BhbicsIGBQYXRod2F5cyBlbnJpY2hlZCBmb3IgJHsgc291cmNlcy5zbGljZSgwLCBMSVNUX0VMRU1FTlRTX1NIT1dOKS5qb2luKCcsICcpfSBhbmQgYCkpO1xyXG4gICAgICB0aXRsZUNvbnRlbnQucHVzaChoKFBvcG92ZXIsIHtcclxuICAgICAgICB0aXBweToge1xyXG4gICAgICAgICAgcG9zaXRpb246ICdib3R0b20nLFxyXG4gICAgICAgICAgaHRtbDogaCgnZGl2LmVucmljaG1lbnQtc291cmNlcy1wb3BvdmVyJywgc291cmNlcy5zbGljZShMSVNUX0VMRU1FTlRTX1NIT1dOKS5zb3J0KCkubWFwKCBzID0+IGgoJ2RpdicsIHMpICkgKVxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sIFsgaCgnYS5wbGFpbi1saW5rLmVucmljaG1lbnQtcG9wb3Zlci1saW5rJywgYCR7c291cmNlcy5sZW5ndGggLSBMSVNUX0VMRU1FTlRTX1NIT1dOfSBvdGhlciBnZW5lKHMpYCkgXVxyXG4gICAgICApKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgYXBwQmFyID0gaCgnZGl2LmFwcC1iYXIuaW50ZXJhY3Rpb25zLWJhcicsIFtcclxuICAgICAgaCgnZGl2LmFwcC1iYXItYnJhbmRpbmcnLCBbXHJcbiAgICAgICAgaChQY0xvZ29MaW5rKSxcclxuICAgICAgICBoKCdkaXYuYXBwLWJhci10aXRsZScsIHRpdGxlQ29udGVudClcclxuICAgICAgXSksXHJcbiAgICAgIGgoRW5yaWNobWVudFRvb2xiYXIsIHsgY3lTcnYsIHNvdXJjZXM6IHRoaXMuc3RhdGUuc291cmNlcywgY29udHJvbGxlcjogdGhpcyB9KSxcclxuICAgICAgaChDb250cmlidXRlLCB7IHRleHQ6ICdBZGQgbXkgcGF0aHdheScgfSlcclxuICAgIF0pO1xyXG5cclxuICAgIHJldHVybiAhZXJyb3JNZXNzYWdlID8gaCgnZGl2LmVucmljaG1lbnQnLCBbXHJcbiAgICAgIGgoTG9hZGVyLCB7IGxvYWRlZDogIWxvYWRpbmcsIG9wdGlvbnM6IHsgbGVmdDogJzUwJScsIGNvbG9yOiAnIzE2YTA4NScgfX0sIFtcclxuICAgICAgICBhcHBCYXJcclxuICAgICAgIF0pLFxyXG4gICAgICBoKEN5dG9zY2FwZU5ldHdvcmssIHtcclxuICAgICAgICBjeVNydixcclxuICAgICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoeyduZXR3b3JrLWxvYWRpbmcnOiBsb2FkaW5nfSlcclxuICAgICAgfSlcclxuICAgIF0pIDogZXJyb3JNZXNzYWdlO1xyXG4gIH1cclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBFbnJpY2htZW50O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jbGllbnQvZmVhdHVyZXMvZW5yaWNobWVudC9pbmRleC5qcyIsIlxyXG5jb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XHJcbmNvbnN0IFJlYWN0RG9tID0gcmVxdWlyZSgncmVhY3QtZG9tJyk7XHJcbmNvbnN0IGggPSByZXF1aXJlKCdyZWFjdC1oeXBlcnNjcmlwdCcpO1xyXG5cclxuY29uc3QgeyBQb3BvdmVyLCBJY29uQnV0dG9uIH0gPSByZXF1aXJlKCcuLi8uLi9jb21tb24vY29tcG9uZW50cy8nKTtcclxuY29uc3QgRW5yaWNobWVudERvd25sb2FkTWVudSA9IHJlcXVpcmUoJy4vZW5yaWNobWVudC1kb3dubG9hZC1tZW51Jyk7XHJcblxyXG5jb25zdCB7IGVucmljaG1lbnRMYXlvdXQsIHNlYXJjaEVucmljaG1lbnROb2RlcyB9ID0gcmVxdWlyZSgnLi9jeScpO1xyXG5cclxuY2xhc3MgRW5yaWNobWVudFRvb2xiYXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gIGNvbnN0cnVjdG9yKHByb3BzKXtcclxuICAgIHN1cGVyKHByb3BzKTtcclxuICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgIHNlYXJjaFZhbHVlOiAnJ1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGhhbmRsZU5vZGVTZWFyY2hDaGFuZ2Uoc2VhcmNoVmFsKXtcclxuICAgIHRoaXMuc2V0U3RhdGUoeyBzZWFyY2hWYWx1ZTogc2VhcmNoVmFsIH0sICgpID0+IHNlYXJjaEVucmljaG1lbnROb2RlcyggdGhpcy5wcm9wcy5jeVNydi5nZXQoKSwgc2VhcmNoVmFsKSk7XHJcbiAgfVxyXG5cclxuICBmb2N1c05vZGVTZWFyY2goKXtcclxuICAgIFJlYWN0RG9tLmZpbmRET01Ob2RlKHRoaXMpLnF1ZXJ5U2VsZWN0b3IoJy5lbGVtZW50LXNlYXJjaC1pbnB1dCcpLmZvY3VzKCk7XHJcbiAgfVxyXG5cclxuICByZW5kZXIoKXtcclxuICAgIGxldCB7IGN5U3J2IH0gPSB0aGlzLnByb3BzO1xyXG4gICAgbGV0IHsgc2VhcmNoVmFsdWUgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBsZXQgY3kgPSBjeVNydi5nZXQoKTtcclxuXHJcbiAgICByZXR1cm4gaCgnZGl2LmFwcC10b29sYmFyJywgW1xyXG4gICAgICBoKFBvcG92ZXIsIHtcclxuICAgICAgICB0aXBweToge1xyXG4gICAgICAgICAgcG9zaXRpb246ICdib3R0b20nLFxyXG4gICAgICAgICAgaHRtbDogaChFbnJpY2htZW50RG93bmxvYWRNZW51LCB7IGN5U3J2IH0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9LCBbXHJcbiAgICAgICAgaChJY29uQnV0dG9uLCB7XHJcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ0Rvd25sb2FkcycsXHJcbiAgICAgICAgICBpY29uOiAnZmlsZV9kb3dubG9hZCdcclxuICAgICAgICB9KVxyXG4gICAgICBdKSxcclxuICAgICAgaChJY29uQnV0dG9uLCB7XHJcbiAgICAgICAgZGVzY3JpcHRpb246ICdGaXQgdG8gc2NyZWVuJyxcclxuICAgICAgICBvbkNsaWNrOiAoKSA9PiBjeS5hbmltYXRlKHtcclxuICAgICAgICAgIGZpdDoge1xyXG4gICAgICAgICAgICBwYWRkaW5nOiAyNVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVhc2luZzogJ2Vhc2UtaW4tb3V0J1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGlzQWN0aXZlOiBmYWxzZSxcclxuICAgICAgICBpY29uOiAnZnVsbHNjcmVlbidcclxuICAgICAgfSksXHJcbiAgICAgIGgoSWNvbkJ1dHRvbiwge1xyXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmVzZXQgYXJyYW5nZW1lbnQnLFxyXG4gICAgICAgIG9uQ2xpY2s6ICgpID0+IGVucmljaG1lbnRMYXlvdXQoIGN5ICksXHJcbiAgICAgICAgaXNBY3RpdmU6IGZhbHNlLFxyXG4gICAgICAgIGljb246ICdyZXBsYXknXHJcbiAgICAgIH0pLFxyXG5cclxuICAgICAgaCgnZGl2LmVsZW1lbnQtc2VhcmNoJywgW1xyXG4gICAgICAgIGgoJ2lucHV0LmVsZW1lbnQtc2VhcmNoLWlucHV0LmlucHV0LXJvdW5kLmlucHV0LWpvaW5lZCcsIHtcclxuICAgICAgICAgIHZhbHVlOiBzZWFyY2hWYWx1ZSxcclxuICAgICAgICAgIG9uQ2hhbmdlOiBlID0+IHRoaXMuaGFuZGxlTm9kZVNlYXJjaENoYW5nZShlLnRhcmdldC52YWx1ZSksXHJcbiAgICAgICAgICB0eXBlOiAndGV4dCcsXHJcbiAgICAgICAgICBwbGFjZWhvbGRlcjogJ1NlYXJjaCcsXHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgaCgnYnV0dG9uLmVsZW1lbnQtc2VhcmNoLWNsZWFyJywge1xyXG4gICAgICAgICAgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZU5vZGVTZWFyY2hDaGFuZ2UoJycpO1xyXG4gICAgICAgICAgICB0aGlzLmZvY3VzTm9kZVNlYXJjaCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sIFtcclxuICAgICAgICAgIGgoJ2kubWF0ZXJpYWwtaWNvbnMnLCAnY2xvc2UnKVxyXG4gICAgICAgIF0pXHJcbiAgICAgIF0pXHJcbiAgICBdKTtcclxuICB9XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRW5yaWNobWVudFRvb2xiYXI7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NsaWVudC9mZWF0dXJlcy9lbnJpY2htZW50L2VucmljaG1lbnQtdG9vbGJhci5qcyIsImNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcclxuY29uc3QgaCA9IHJlcXVpcmUoJ3JlYWN0LWh5cGVyc2NyaXB0Jyk7XHJcbmNvbnN0IHNhdmVBcyA9IHJlcXVpcmUoJ2ZpbGUtc2F2ZXInKS5zYXZlQXM7XHJcbmNvbnN0IExvYWRlciA9IHJlcXVpcmUoJ3JlYWN0LWxvYWRlcicpO1xyXG5cclxuXHJcbmNsYXNzIEVucmljaG1lbnREb3dubG9hZE1lbnUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICBsb2FkaW5nOiBmYWxzZVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGRvd25sb2FkUG5nKCl7XHJcbiAgICBsZXQgeyBjeVNydiB9ID0gdGhpcy5wcm9wcztcclxuICAgIGxldCBjeSA9IGN5U3J2LmdldCgpO1xyXG5cclxuICAgIGxldCBzYXZlQ3lQbmcgPSAoKSA9PntcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgc2F2ZUFzKGN5LnBuZyh7XHJcbiAgICAgICAgICBvdXRwdXQ6ICdibG9iJyxcclxuICAgICAgICAgIHNjYWxlOiAyLFxyXG4gICAgICAgICAgYmc6ICd3aGl0ZScsXHJcbiAgICAgICAgICBmdWxsOiB0cnVlXHJcbiAgICAgICAgfSksIGBlbnJpY2htZW50LW5ldHdvcmsucG5nYCk7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGxvYWRpbmc6IGZhbHNlIH0pO1xyXG4gICAgICB9LCAxKTtcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5zZXRTdGF0ZSh7IGxvYWRpbmc6IHRydWUgfSwgKCkgPT4gc2F2ZUN5UG5nKCkgKTtcclxuICB9XHJcblxyXG4gIGRvd25sb2FkSnNvbigpe1xyXG4gICAgbGV0IHsgY3lTcnYgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBsZXQgY3kgPSBjeVNydi5nZXQoKTtcclxuICAgIGxldCBzYXZlQ3lKc29uID0gKCkgPT4ge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBzYXZlQXMobmV3IEJsb2IoW0pTT04uc3RyaW5naWZ5KGN5Lmpzb24oKSwgbnVsbCwgMildLCB7IHR5cGU6ICd0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLTgnIH0pLCBgZW5yaWNobWVudC1uZXR3b3JrLmpzb25gKTtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHsgbG9hZGluZzogZmFsc2UgfSk7XHJcbiAgICAgIH0sIDEpO1xyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnNldFN0YXRlKHsgbG9hZGluZzogdHJ1ZSB9LCAoKSA9PiBzYXZlQ3lKc29uKCkgKTtcclxuICB9XHJcblxyXG4gIHJlbmRlcigpIHtcclxuICAgIHJldHVybiBoKCdkaXYuZmlsZS1kb3dubG9hZC1tZW51JywgW1xyXG4gICAgICBoKCdoMicsICdOZXR3b3JrIERvd25sb2FkcycpLFxyXG4gICAgICBoKCdkaXYuZmlsZS1kb3dubG9hZC1jb250ZW50JywgW1xyXG4gICAgICAgIGgoJ2Rpdi5kb3dubG9hZC1vcHRpb24nLCB7IG9uQ2xpY2s6ICgpID0+IHRoaXMuZG93bmxvYWRQbmcoKSB9LCBbXHJcbiAgICAgICAgICBoKCdkaXYuZG93bmxvYWQtb3B0aW9uLWhlYWRlcicsIFtcclxuICAgICAgICAgICAgaCgnaDMnLCAnSW1hZ2UgKFBORyknKSxcclxuICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgaCgnZGl2LmRvd25sb2FkLW9wdGlvbi1kZXNjcmlwdGlvbicsICdEb3dubG9hZCBhbiBpbWFnZSBvZiB0aGUgZW50aXJlIHZpZXcnKVxyXG4gICAgICAgIF0pLFxyXG4gICAgICAgIGgoJ2Rpdi5kb3dubG9hZC1vcHRpb24nLCB7IG9uQ2xpY2s6ICgpID0+IHRoaXMuZG93bmxvYWRKc29uKCkgfSwgW1xyXG4gICAgICAgICAgaCgnZGl2LmRvd25sb2FkLW9wdGlvbi1oZWFkZXInLCBbXHJcbiAgICAgICAgICAgIGgoJ2gzJywgJ0N5dG9zY2FwZSBKU09OJyksXHJcbiAgICAgICAgICBdKSxcclxuICAgICAgICAgIGgoJ2Rpdi5kb3dubG9hZC1vcHRpb24tZGVzY3JpcHRpb24nLCAnRG93bmxvYWQgYSBDeXRvc2NhcGUgSlNPTiBmaWxlLCBjb21wYXRpYmxlIHdpdGggQ3l0b3NjYXBlIGFuZCBDeXRvc2NhcGUuanMnKVxyXG4gICAgICAgIF0pLFxyXG4gICAgICAgIGgoTG9hZGVyLCB7IGxvYWRlZDogIXRoaXMuc3RhdGUubG9hZGluZyB9KVxyXG4gICAgICBdKVxyXG4gICAgXSk7XHJcbiAgfVxyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEVucmljaG1lbnREb3dubG9hZE1lbnU7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NsaWVudC9mZWF0dXJlcy9lbnJpY2htZW50L2VucmljaG1lbnQtZG93bmxvYWQtbWVudS5qcyIsImNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcclxuY29uc3QgaCA9IHJlcXVpcmUoJ3JlYWN0LWh5cGVyc2NyaXB0Jyk7XHJcbmNvbnN0IF8gPSByZXF1aXJlKCdsb2Rhc2gnKTtcclxuXHJcbmNvbnN0IHsgTlNfR0VORV9PTlRPTE9HWSwgTlNfUkVBQ1RPTUUgfSA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbmZpZycpO1xyXG5jb25zdCB7IFNlcnZlckFQSSB9ID0gcmVxdWlyZSgnLi4vLi4vc2VydmljZXMnKTtcclxuXHJcblxyXG5jbGFzcyBFbnJpY2htZW50VG9vbHRpcCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgY29uc3RydWN0b3IocHJvcHMpe1xyXG4gICAgc3VwZXIocHJvcHMpO1xyXG5cclxuICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgIG5hbWU6ICcnLFxyXG4gICAgICBkZXNjcmlwdGlvbjogJycsXHJcbiAgICAgIGRlc2NyaXB0aW9uTG9hZGVkOiBmYWxzZVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGNvbXBvbmVudERpZE1vdW50KCl7XHJcbiAgICBsZXQgeyBub2RlIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgbGV0IGlkID0gbm9kZS5kYXRhKCdpZCcpO1xyXG4gICAgY29uc3QgbmFtZXNwYWNlID0gbm9kZS5kYXRhKCduYW1lc3BhY2UnKTtcclxuICAgIGNvbnN0IGRlc2NyaXB0aW9uT25GYWlsID0gJ05vIGRlc2NyaXB0aW9uIGF2YWlsYWJsZSc7XHJcblxyXG4gICAgaWYoIG5hbWVzcGFjZSA9PT0gTlNfR0VORV9PTlRPTE9HWSApe1xyXG4gICAgICBTZXJ2ZXJBUEkuZ2V0R29JbmZvcm1hdGlvbiggaWQucmVwbGFjZSgnR086JywgJycpIClcclxuICAgICAgLnRoZW4oIHJlcyA9PiB7XHJcbiAgICAgICAgbGV0IGRlc2NyaXB0aW9uID0gXy5nZXQocmVzLCAncmVzdWx0c1swXS5kZWZpbml0aW9uLnRleHQnLCBkZXNjcmlwdGlvbk9uRmFpbCk7XHJcbiAgICAgICAgbGV0IHVwZGF0ZSA9ICgpID0+IHRoaXMuc2V0U3RhdGUoeyBuYW1lOiBOU19HRU5FX09OVE9MT0dZLnRvVXBwZXJDYXNlKCksIGRlc2NyaXB0aW9uLCBkZXNjcmlwdGlvbkxvYWRlZDogdHJ1ZSB9KTtcclxuXHJcbiAgICAgICAgdXBkYXRlKCk7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaCggKCkgPT4gdGhpcy5zZXRTdGF0ZSh7IG5hbWU6IE5TX0dFTkVfT05UT0xPR1kudG9VcHBlckNhc2UoKSwgZGVzY3JpcHRpb25Mb2FkZWQ6IHRydWUgfSkgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiggbmFtZXNwYWNlID09PSBOU19SRUFDVE9NRSApe1xyXG4gICAgICBTZXJ2ZXJBUEkuZ2V0UmVhY3RvbWVJbmZvcm1hdGlvbiggaWQucmVwbGFjZSgnUkVBQzonLCAnJykgKVxyXG4gICAgICAudGhlbiggcmVzID0+IHtcclxuICAgICAgICBsZXQgZGVzY3JpcHRpb24gPSBfLmdldChyZXMsICdzdW1tYXRpb25bMF0udGV4dCcsIGRlc2NyaXB0aW9uT25GYWlsKTtcclxuICAgICAgICBsZXQgdXBkYXRlID0gKCkgPT4gdGhpcy5zZXRTdGF0ZSh7IG5hbWU6IE5TX1JFQUNUT01FLnRvVXBwZXJDYXNlKCksIGRlc2NyaXB0aW9uLCBkZXNjcmlwdGlvbkxvYWRlZDogdHJ1ZSB9KTtcclxuXHJcbiAgICAgICAgdXBkYXRlKCk7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaCggKCkgPT4gdGhpcy5zZXRTdGF0ZSh7IG5hbWU6IE5TX1JFQUNUT01FLnRvVXBwZXJDYXNlKCksIGRlc2NyaXB0aW9uTG9hZGVkOiB0cnVlIH0pICk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJlbmRlcigpe1xyXG4gICAgbGV0IHtub2RlfSA9IHRoaXMucHJvcHM7XHJcbiAgICBsZXQgeyBkZXNjcmlwdGlvbiwgbmFtZSB9ID0gdGhpcy5zdGF0ZTtcclxuICAgIGxldCB0aXRsZSA9IG5vZGUuZGF0YSgnbmFtZScpO1xyXG4gICAgbGV0IHNoYXJlZEdlbmVMaXN0ID0gbm9kZS5kYXRhKCdpbnRlcnNlY3Rpb24nKS5zb3J0KCk7XHJcbiAgICBsZXQgc2hhcmVkR2VuZUNvdW50ID0gc2hhcmVkR2VuZUxpc3QubGVuZ3RoO1xyXG4gICAgbGV0IHVybCA9IG5vZGUuZGF0YSgndXJpJyk7XHJcblxyXG4gICAgaWYoICF0aGlzLnN0YXRlLmRlc2NyaXB0aW9uTG9hZGVkICl7XHJcbiAgICAgIHJldHVybiBoKCdkaXYuY3ktdG9vbHRpcCcsIFtcclxuICAgICAgICBoKCdkaXYuY3ktdG9vbHRpcC1jb250ZW50JywgW1xyXG4gICAgICAgICAgaCgnZGl2LmN5LXRvb2x0aXAtaGVhZGVyJyxbXHJcbiAgICAgICAgICAgIGgoJ2gyLmN5LXRvb2x0aXAtdGl0bGUnLCAnTG9hZGluZy4uLicpXHJcbiAgICAgICAgICBdKSxcclxuICAgICAgICAgIGgoJ2Rpdi5jeS10b29sdGlwLWJvZHknLCBbXHJcbiAgICAgICAgICAgIGgoJ2Rpdi5jeS10b29sdGlwLWxvYWRpbmctc2VjdGlvbicsIFtcclxuICAgICAgICAgICAgICBoKCdpLmljb24uaWNvbi1zcGlubmVyJylcclxuICAgICAgICAgICAgXSlcclxuICAgICAgICAgIF0pXHJcbiAgICAgICAgXSlcclxuICAgICAgXSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZGVzY3JpcHRpb25TZWN0aW9uID0gZGVzY3JpcHRpb24gPyBoKCdkaXYuY3ktdG9vbHRpcC1zZWN0aW9uJywgW1xyXG4gICAgICBoKCdkaXYuY3ktdG9vbHRpcC1maWVsZC1uYW1lJywgJ0Rlc2NyaXB0aW9uJyksXHJcbiAgICAgIGgoJ2Rpdi5jeS10b29sdGlwLWZpZWxkLXZhbHVlJywgZGVzY3JpcHRpb24pXHJcbiAgICBdKSA6IG51bGw7XHJcblxyXG4gICAgcmV0dXJuIGgoJ2Rpdi5jeS10b29sdGlwJywgW1xyXG4gICAgICBoKCdkaXYuY3ktdG9vbHRpcC1jb250ZW50JywgW1xyXG4gICAgICAgIGgoJ2Rpdi5jeS10b29sdGlwLWhlYWRlcicsW1xyXG4gICAgICAgICAgaCgnaDIuY3ktdG9vbHRpcC10aXRsZScsIFtcclxuICAgICAgICAgICAgaCgnYS5wbGFpbi1saW5rJywgeyBocmVmOiB1cmwsIHRhcmdldDogJ19ibGFuaycsIH0sIHRpdGxlWzBdLnRvVXBwZXJDYXNlKCkgKyB0aXRsZS5zdWJzdHIoMSkgKSxcclxuICAgICAgICAgICAgaCgnZGl2LmN5LXRvb2x0aXAtdHlwZS1jaGlwJywgbmFtZSApXHJcbiAgICAgICAgICBdKVxyXG4gICAgICAgIF0pLFxyXG4gICAgICAgIGgoJ2Rpdi5jeS10b29sdGlwLWJvZHknLCBbXHJcbiAgICAgICAgICBkZXNjcmlwdGlvblNlY3Rpb24sXHJcbiAgICAgICAgICBoKCdkaXYuY3ktdG9vbHRpcC1zZWN0aW9uJywgW1xyXG4gICAgICAgICAgICBoKCdkaXYuY3ktdG9vbHRpcC1maWVsZC1uYW1lJywgJ0dlbmVzIFNoYXJlZCB3aXRoIEVudGVyZWQgTGlzdCAoJyArIHNoYXJlZEdlbmVDb3VudCArICcpJyksXHJcbiAgICAgICAgICAgIGgoJ2Rpdi5jeS10b29sdGlwLWZpZWxkLXZhbHVlJywgc2hhcmVkR2VuZUxpc3Quam9pbignLCAnKSksXHJcbiAgICAgICAgICBdKVxyXG4gICAgICAgIF0pLFxyXG4gICAgICAgIGgoJ2Rpdi5jeS10b29sdGlwLWNhbGwtdG8tYWN0aW9uJywgW1xyXG4gICAgICAgICAgaCgnYScsIHtcclxuICAgICAgICAgICAgdGFyZ2V0OiAnX2JsYW5rJyxcclxuICAgICAgICAgICAgaHJlZjogJy9zZWFyY2g/cT0nICsgdGl0bGVcclxuICAgICAgICAgICAgfSwgW1xyXG4gICAgICAgICAgICAgIGgoJ2J1dHRvbi5jYWxsLXRvLWFjdGlvbicsICdGaW5kIFJlbGF0ZWQgUGF0aHdheXMnKVxyXG4gICAgICAgICAgXSlcclxuICAgICAgICBdKVxyXG4gICAgICBdKVxyXG4gICAgXSk7XHJcbiAgfVxyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEVucmljaG1lbnRUb29sdGlwO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jbGllbnQvZmVhdHVyZXMvZW5yaWNobWVudC9lbnJpY2htZW50LXRvb2x0aXAuanMiLCJjb25zdCBfID0gcmVxdWlyZSgnbG9kYXNoJyk7XHJcblxyXG5jb25zdCB7IHN0ZW1tZXIgfSA9IHJlcXVpcmUoJ3BvcnRlci1zdGVtbWVyJyk7XHJcbmNvbnN0IHN0b3BXb3JkcyA9IHJlcXVpcmUoJy4vc3RvcHdvcmRzLmpzb24nKTtcclxuY29uc3QgZmxhZ2dlZFdvcmRzID0gcmVxdWlyZSgnLi9mbGFnZ2Vkd29yZHMuanNvbicpO1xyXG5cclxuXHJcblxyXG4vLyBUaGlzIG1vZHVsZSBzdW1tYXJpemVzIHRleHQgZm9yIGEgZW5yaWNobWVudCBjbHVzdGVyLlxyXG4vLyBIZXJlIGlzIHRoZSBnZW5lcmFsIGFsZ29yaXRobTpcclxuLy8gICBJbnB1dCBTYW5pdGl6YXRpb25cclxuLy8gICAgIDEuIHRva2VuaXplIGJ5IGEgbGlzdCBvZiBkZWxpbWl0ZXJzIGUuZy4gdGFicywgc3BhY2VzLCBuZXdsaW5lcywgc3BlY2lhbCBjaGFyYWN0ZXJzXHJcbi8vICAgICAyLiBmaWx0ZXIgdGhlIHRva2VucyBmb3Igc3RvcCB3b3JkcyBvciBmbGFnZ2VkIHdvcmRzXHJcbi8vICAgUHJlcHJvY2Vzc2luZ1xyXG4vLyAgICAgMy4gY29tcHV0ZSB0aGUgb2NjdXJlbmNlcyBvZiBlYWNoIHRva2VuXHJcbi8vICAgICA0LiBjb21wdXRlIHRoZSB3b3JkIHN0ZW0gb2YgdGhlIHRva2VuIHVzaW5nIHRoZSBQb3J0ZXIgU3RlbW1lciBBbGdvcml0aG1cclxuLy8gICAgIDUuIGFzc29jaWF0ZSBlYWNoIHN0ZW0gd2l0aCB0aGUgb3JpZ2luYWwgdG9rZW5cclxuLy8gICBTZWxlY3Rpb25cclxuLy8gICAgIDYuIGZvciBlYWNoIHN0ZW0sIGdldCB0aGUgdG9rZW4gYXNzb2NpYXRlZCB3aXRoIHRoZSBtb3N0IG9jY3VyZW5jZXNcclxuXHJcbi8vIEZvciBtb3JlIGNvbnRleHQvaW5mb3JtYXRpb246XHJcbi8vICAgIGh0dHBzOi8vdGFnY3Jvd2QuY29tL2ZhcS5odG1sI2hvd3RvXHJcbi8vICAgIGh0dHA6Ly93b3JkY2xvdWQuY3MuYXJpem9uYS5lZHUvZmFxLmh0bWwjcS1ob3ctaXQtd29ya3NcclxuLy8gICAgaHR0cDovL3Nub3diYWxsLnRhcnRhcnVzLm9yZy9hbGdvcml0aG1zL3BvcnRlci9zdGVtbWVyLmh0bWxcclxuXHJcblxyXG4vLyBJbnB1dDogIFN0cmluZyAtLSAgcmVwcmVzZW50aW5nIHRleHQgbGFiZWxzIG9mIHBhdGh3YXkgbmFtZXMgb2YgYSBnaXZlbiBjb21wb25lbnRcclxuLy8gT3V0cHV0OiBBcnJheSBvZiBzdHJpbmdzIC0tIHJlcHJlc2VudGluZyB0aGUgbW9zdCBjb21tb24gd29yZHMgdGhhdCBhcmUgbm90IHN0b3Agd29yZHMgb3IgZmxhZ2dlZCB3b3Jkc1xyXG5sZXQgZ2VuZXJhdGVDbHVzdGVyTGFiZWxzID0gdGV4dCA9PiB7XHJcbiAgbGV0IGRlbGltaXRlclJlZ2V4ID0gL1tcXHQgXFxuXFxyXFxmIVxcXFwjJCUmKCkqKywuPD0+P0BbXlxcXFxcXF1gX3t8fX5cXFxcJ1wiXS87XHJcbiAgbGV0IGZpbHRlcldvcmRzID0gbmV3IFNldChbLi4uc3RvcFdvcmRzLCBmbGFnZ2VkV29yZHNdKTtcclxuICBsZXQgd29yZE9jY3VyZW5jZU1hcCA9IG5ldyBNYXAoKTtcclxuICBsZXQgc3RlbVRvV29yZHNNYXAgPSBuZXcgTWFwKCk7XHJcblxyXG4gIGxldCBpbmNyS2V5ID0gKCBtLCBrICkgPT4ge1xyXG4gICAgaWYoIG0uaGFzKCBrICkgKXtcclxuICAgICAgbS5zZXQoaywgbS5nZXQoaykgKyAxKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG0uc2V0KCBrLCAxICk7XHJcbiAgICB9XHJcbiAgfTtcclxuICBsZXQgYXBwZW5kS2V5ID0gKCBtLCBrLCB2ICkgPT4ge1xyXG4gICAgaWYoIG0uaGFzKCBrICkgKXtcclxuICAgICAgbS5zZXQoaywgbS5nZXQoaykuYWRkKHYpICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBtLnNldCggaywgbmV3IFNldChbdl0pICk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgLy8gaW5wdXQgc2FuaXRpemF0aW9uXHJcbiAgbGV0IHRva2VucyA9IHRleHQuc3BsaXQoZGVsaW1pdGVyUmVnZXgpLmZpbHRlciggd29yZCA9PiAhZmlsdGVyV29yZHMuaGFzKHdvcmQpICYmIHdvcmQgIT09ICcnICk7XHJcblxyXG4gIC8vIHByZXByb2Nlc3MgdGhlIHRva2VucyAtLSBjb21wdXRlIHdvcmQgb2NjdXJlbmNlcywgY29tcHV0ZSB3b3JkIHN0ZW1zXHJcbiAgbGV0IHdvcmRTdGVtcyA9IF8udW5pcSh0b2tlbnMubWFwKCB0b2tlbiA9PiB7XHJcbiAgICBpbmNyS2V5KCB3b3JkT2NjdXJlbmNlTWFwLCB0b2tlbiApO1xyXG4gICAgbGV0IHdvcmRTdGVtID0gc3RlbW1lciggdG9rZW4udG9Mb3dlckNhc2UoKSApO1xyXG4gICAgYXBwZW5kS2V5KCBzdGVtVG9Xb3Jkc01hcCwgd29yZFN0ZW0sIHRva2VuICk7XHJcbiAgICByZXR1cm4gd29yZFN0ZW07XHJcbiAgIH0gKSApO1xyXG5cclxuICAvLyBmb3IgZWFjaCBzdGVtLCBnZXQgaXRzIGFzc29jaWF0ZWQgdG9rZW5zIGFuZCByZXR1cm4gdGhlIHRva2VuIHdpdGggdGhlIG1vc3Qgb2NjdXJlbmNlc1xyXG4gIGxldCB3b3JkcyA9IHdvcmRTdGVtcy5tYXAoIHdzID0+IHtcclxuICAgIGxldCBhc3NvY2lhdGVkV29yZHMgPSBbLi4uc3RlbVRvV29yZHNNYXAuZ2V0KCB3cyApXS5zb3J0KCAodzAsIHcxICkgPT4ge1xyXG4gICAgICByZXR1cm4gd29yZE9jY3VyZW5jZU1hcC5nZXQodzEpID4gd29yZE9jY3VyZW5jZU1hcC5nZXQodzApO1xyXG4gICAgfSApO1xyXG5cclxuICAgIHJldHVybiBhc3NvY2lhdGVkV29yZHNbMF07XHJcbiAgfSk7XHJcblxyXG4gIC8vIHJldHVybiBhbGwgd29yZHMgdGhhdCBhcHBlYXIgYXQgbGVhc3Qgb25jZVxyXG4gIHJldHVybiB3b3Jkcy5maWx0ZXIoIHdvcmQgPT4gd29yZE9jY3VyZW5jZU1hcC5nZXQod29yZCkgPiAxICk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuICBnZW5lcmF0ZUNsdXN0ZXJMYWJlbHNcclxufTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY2xpZW50L2ZlYXR1cmVzL2VucmljaG1lbnQvY3kvY2x1c3Rlci1sYWJlbC1jYXRlZ29yaXphdGlvbi9pbmRleC5qcyIsIm1vZHVsZS5leHBvcnRzID0gW1wiYVwiLFwiYSdzXCIsXCJhYmxlXCIsXCJhYm91dFwiLFwiYWJvdmVcIixcImFjY29yZGluZ1wiLFwiYWNjb3JkaW5nbHlcIixcImFjcm9zc1wiLFwiYWN0dWFsbHlcIixcImFmdGVyXCIsXCJhZnRlcndhcmRzXCIsXCJhZ2FpblwiLFwiYWdhaW5zdFwiLFwiYWluJ3RcIixcImFsbFwiLFwiYWxsb3dcIixcImFsbG93c1wiLFwiYWxtb3N0XCIsXCJhbG9uZVwiLFwiYWxvbmdcIixcImFscmVhZHlcIixcImFsc29cIixcImFsdGhvdWdoXCIsXCJhbHdheXNcIixcImFtXCIsXCJhbW9uZ1wiLFwiYW1vbmdzdFwiLFwiYW5cIixcImFuZFwiLFwiYW5vdGhlclwiLFwiYW55XCIsXCJhbnlib2R5XCIsXCJhbnlob3dcIixcImFueW9uZVwiLFwiYW55dGhpbmdcIixcImFueXdheVwiLFwiYW55d2F5c1wiLFwiYW55d2hlcmVcIixcImFwYXJ0XCIsXCJhcHBlYXJcIixcImFwcHJlY2lhdGVcIixcImFwcHJvcHJpYXRlXCIsXCJhcmVcIixcImFyZW4ndFwiLFwiYXJvdW5kXCIsXCJhc1wiLFwiYXNpZGVcIixcImFza1wiLFwiYXNraW5nXCIsXCJhc3NvY2lhdGVkXCIsXCJhdFwiLFwiYXZhaWxhYmxlXCIsXCJhd2F5XCIsXCJhd2Z1bGx5XCIsXCJiXCIsXCJiZVwiLFwiYmVjYW1lXCIsXCJiZWNhdXNlXCIsXCJiZWNvbWVcIixcImJlY29tZXNcIixcImJlY29taW5nXCIsXCJiZWVuXCIsXCJiZWZvcmVcIixcImJlZm9yZWhhbmRcIixcImJlaGluZFwiLFwiYmVpbmdcIixcImJlbGlldmVcIixcImJlbG93XCIsXCJiZXNpZGVcIixcImJlc2lkZXNcIixcImJlc3RcIixcImJldHRlclwiLFwiYmV0d2VlblwiLFwiYmV5b25kXCIsXCJib3RoXCIsXCJicmllZlwiLFwiYnV0XCIsXCJieVwiLFwiY1wiLFwiYydtb25cIixcImMnc1wiLFwiY2FtZVwiLFwiY2FuXCIsXCJjYW4ndFwiLFwiY2Fubm90XCIsXCJjYW50XCIsXCJjYXVzZVwiLFwiY2F1c2VzXCIsXCJjZXJ0YWluXCIsXCJjZXJ0YWlubHlcIixcImNoYW5nZXNcIixcImNsZWFybHlcIixcImNvXCIsXCJjb21cIixcImNvbWVcIixcImNvbWVzXCIsXCJjb25jZXJuaW5nXCIsXCJjb25zZXF1ZW50bHlcIixcImNvbnNpZGVyXCIsXCJjb25zaWRlcmluZ1wiLFwiY29udGFpblwiLFwiY29udGFpbmluZ1wiLFwiY29udGFpbnNcIixcImNvcnJlc3BvbmRpbmdcIixcImNvdWxkXCIsXCJjb3VsZG4ndFwiLFwiY291cnNlXCIsXCJjdXJyZW50bHlcIixcImRcIixcImRlZmluaXRlbHlcIixcImRlc2NyaWJlZFwiLFwiZGVzcGl0ZVwiLFwiZGlkXCIsXCJkaWRuJ3RcIixcImRpZmZlcmVudFwiLFwiZG9cIixcImRvZXNcIixcImRvZXNuJ3RcIixcImRvaW5nXCIsXCJkb24ndFwiLFwiZG9uZVwiLFwiZG93blwiLFwiZG93bndhcmRzXCIsXCJkdXJpbmdcIixcImVcIixcImVhY2hcIixcImVkdVwiLFwiZWdcIixcImVpZ2h0XCIsXCJlaXRoZXJcIixcImVsc2VcIixcImVsc2V3aGVyZVwiLFwiZW5vdWdoXCIsXCJlbnRpcmVseVwiLFwiZXNwZWNpYWxseVwiLFwiZXRcIixcImV0Y1wiLFwiZXZlblwiLFwiZXZlclwiLFwiZXZlcnlcIixcImV2ZXJ5Ym9keVwiLFwiZXZlcnlvbmVcIixcImV2ZXJ5dGhpbmdcIixcImV2ZXJ5d2hlcmVcIixcImV4XCIsXCJleGFjdGx5XCIsXCJleGFtcGxlXCIsXCJleGNlcHRcIixcImZcIixcImZhclwiLFwiZmV3XCIsXCJmaWZ0aFwiLFwiZmlyc3RcIixcImZpdmVcIixcImZvbGxvd2VkXCIsXCJmb2xsb3dpbmdcIixcImZvbGxvd3NcIixcImZvclwiLFwiZm9ybWVyXCIsXCJmb3JtZXJseVwiLFwiZm9ydGhcIixcImZvdXJcIixcImZyb21cIixcImZ1cnRoZXJcIixcImZ1cnRoZXJtb3JlXCIsXCJnXCIsXCJnZXRcIixcImdldHNcIixcImdldHRpbmdcIixcImdpdmVuXCIsXCJnaXZlc1wiLFwiZ29cIixcImdvZXNcIixcImdvaW5nXCIsXCJnb25lXCIsXCJnb3RcIixcImdvdHRlblwiLFwiZ3JlZXRpbmdzXCIsXCJoXCIsXCJoYWRcIixcImhhZG4ndFwiLFwiaGFwcGVuc1wiLFwiaGFyZGx5XCIsXCJoYXNcIixcImhhc24ndFwiLFwiaGF2ZVwiLFwiaGF2ZW4ndFwiLFwiaGF2aW5nXCIsXCJoZVwiLFwiaGUnc1wiLFwiaGVsbG9cIixcImhlbHBcIixcImhlbmNlXCIsXCJoZXJcIixcImhlcmVcIixcImhlcmUnc1wiLFwiaGVyZWFmdGVyXCIsXCJoZXJlYnlcIixcImhlcmVpblwiLFwiaGVyZXVwb25cIixcImhlcnNcIixcImhlcnNlbGZcIixcImhpXCIsXCJoaW1cIixcImhpbXNlbGZcIixcImhpc1wiLFwiaGl0aGVyXCIsXCJob3BlZnVsbHlcIixcImhvd1wiLFwiaG93YmVpdFwiLFwiaG93ZXZlclwiLFwiaVwiLFwiaSdkXCIsXCJpJ2xsXCIsXCJpJ21cIixcImkndmVcIixcImllXCIsXCJpZlwiLFwiaWdub3JlZFwiLFwiaW1tZWRpYXRlXCIsXCJpblwiLFwiaW5hc211Y2hcIixcImluY1wiLFwiaW5kZWVkXCIsXCJpbmRpY2F0ZVwiLFwiaW5kaWNhdGVkXCIsXCJpbmRpY2F0ZXNcIixcImlubmVyXCIsXCJpbnNvZmFyXCIsXCJpbnN0ZWFkXCIsXCJpbnRvXCIsXCJpbndhcmRcIixcImlzXCIsXCJpc24ndFwiLFwiaXRcIixcIml0J2RcIixcIml0J2xsXCIsXCJpdCdzXCIsXCJpdHNcIixcIml0c2VsZlwiLFwialwiLFwianVzdFwiLFwia1wiLFwia2VlcFwiLFwia2VlcHNcIixcImtlcHRcIixcImtub3dcIixcImtub3dzXCIsXCJrbm93blwiLFwibFwiLFwibGFzdFwiLFwibGF0ZWx5XCIsXCJsYXRlclwiLFwibGF0dGVyXCIsXCJsYXR0ZXJseVwiLFwibGVhc3RcIixcImxlc3NcIixcImxlc3RcIixcImxldFwiLFwibGV0J3NcIixcImxpa2VcIixcImxpa2VkXCIsXCJsaWtlbHlcIixcImxpdHRsZVwiLFwibG9va1wiLFwibG9va2luZ1wiLFwibG9va3NcIixcImx0ZFwiLFwibVwiLFwibWFpbmx5XCIsXCJtYW55XCIsXCJtYXlcIixcIm1heWJlXCIsXCJtZVwiLFwibWVhblwiLFwibWVhbndoaWxlXCIsXCJtZXJlbHlcIixcIm1pZ2h0XCIsXCJtb3JlXCIsXCJtb3Jlb3ZlclwiLFwibW9zdFwiLFwibW9zdGx5XCIsXCJtdWNoXCIsXCJtdXN0XCIsXCJteVwiLFwibXlzZWxmXCIsXCJuXCIsXCJuYW1lXCIsXCJuYW1lbHlcIixcIm5kXCIsXCJuZWFyXCIsXCJuZWFybHlcIixcIm5lY2Vzc2FyeVwiLFwibmVlZFwiLFwibmVlZHNcIixcIm5laXRoZXJcIixcIm5ldmVyXCIsXCJuZXZlcnRoZWxlc3NcIixcIm5ld1wiLFwibmV4dFwiLFwibmluZVwiLFwibm9cIixcIm5vYm9keVwiLFwibm9uXCIsXCJub25lXCIsXCJub29uZVwiLFwibm9yXCIsXCJub3JtYWxseVwiLFwibm90XCIsXCJub3RoaW5nXCIsXCJub3ZlbFwiLFwibm93XCIsXCJub3doZXJlXCIsXCJvXCIsXCJvYnZpb3VzbHlcIixcIm9mXCIsXCJvZmZcIixcIm9mdGVuXCIsXCJvaFwiLFwib2tcIixcIm9rYXlcIixcIm9sZFwiLFwib25cIixcIm9uY2VcIixcIm9uZVwiLFwib25lc1wiLFwib25seVwiLFwib250b1wiLFwib3JcIixcIm90aGVyXCIsXCJvdGhlcnNcIixcIm90aGVyd2lzZVwiLFwib3VnaHRcIixcIm91clwiLFwib3Vyc1wiLFwib3Vyc2VsdmVzXCIsXCJvdXRcIixcIm91dHNpZGVcIixcIm92ZXJcIixcIm92ZXJhbGxcIixcIm93blwiLFwicFwiLFwicGFydGljdWxhclwiLFwicGFydGljdWxhcmx5XCIsXCJwZXJcIixcInBlcmhhcHNcIixcInBsYWNlZFwiLFwicGxlYXNlXCIsXCJwbHVzXCIsXCJwb3NzaWJsZVwiLFwicHJlc3VtYWJseVwiLFwicHJvYmFibHlcIixcInByb3ZpZGVzXCIsXCJxXCIsXCJxdWVcIixcInF1aXRlXCIsXCJxdlwiLFwiclwiLFwicmF0aGVyXCIsXCJyZFwiLFwicmVcIixcInJlYWxseVwiLFwicmVhc29uYWJseVwiLFwicmVnYXJkaW5nXCIsXCJyZWdhcmRsZXNzXCIsXCJyZWdhcmRzXCIsXCJyZWxhdGl2ZWx5XCIsXCJyZXNwZWN0aXZlbHlcIixcInJpZ2h0XCIsXCJzXCIsXCJzYWlkXCIsXCJzYW1lXCIsXCJzYXdcIixcInNheVwiLFwic2F5aW5nXCIsXCJzYXlzXCIsXCJzZWNvbmRcIixcInNlY29uZGx5XCIsXCJzZWVcIixcInNlZWluZ1wiLFwic2VlbVwiLFwic2VlbWVkXCIsXCJzZWVtaW5nXCIsXCJzZWVtc1wiLFwic2VlblwiLFwic2VsZlwiLFwic2VsdmVzXCIsXCJzZW5zaWJsZVwiLFwic2VudFwiLFwic2VyaW91c1wiLFwic2VyaW91c2x5XCIsXCJzZXZlblwiLFwic2V2ZXJhbFwiLFwic2hhbGxcIixcInNoZVwiLFwic2hvdWxkXCIsXCJzaG91bGRuJ3RcIixcInNpbmNlXCIsXCJzaXhcIixcInNvXCIsXCJzb21lXCIsXCJzb21lYm9keVwiLFwic29tZWhvd1wiLFwic29tZW9uZVwiLFwic29tZXRoaW5nXCIsXCJzb21ldGltZVwiLFwic29tZXRpbWVzXCIsXCJzb21ld2hhdFwiLFwic29tZXdoZXJlXCIsXCJzb29uXCIsXCJzb3JyeVwiLFwic3BlY2lmaWVkXCIsXCJzcGVjaWZ5XCIsXCJzcGVjaWZ5aW5nXCIsXCJzdGlsbFwiLFwic3ViXCIsXCJzdWNoXCIsXCJzdXBcIixcInN1cmVcIixcInRcIixcInQnc1wiLFwidGFrZVwiLFwidGFrZW5cIixcInRlbGxcIixcInRlbmRzXCIsXCJ0aFwiLFwidGhhblwiLFwidGhhbmtcIixcInRoYW5rc1wiLFwidGhhbnhcIixcInRoYXRcIixcInRoYXQnc1wiLFwidGhhdHNcIixcInRoZVwiLFwidGhlaXJcIixcInRoZWlyc1wiLFwidGhlbVwiLFwidGhlbXNlbHZlc1wiLFwidGhlblwiLFwidGhlbmNlXCIsXCJ0aGVyZVwiLFwidGhlcmUnc1wiLFwidGhlcmVhZnRlclwiLFwidGhlcmVieVwiLFwidGhlcmVmb3JlXCIsXCJ0aGVyZWluXCIsXCJ0aGVyZXNcIixcInRoZXJldXBvblwiLFwidGhlc2VcIixcInRoZXlcIixcInRoZXknZFwiLFwidGhleSdsbFwiLFwidGhleSdyZVwiLFwidGhleSd2ZVwiLFwidGhpbmtcIixcInRoaXJkXCIsXCJ0aGlzXCIsXCJ0aG9yb3VnaFwiLFwidGhvcm91Z2hseVwiLFwidGhvc2VcIixcInRob3VnaFwiLFwidGhyZWVcIixcInRocm91Z2hcIixcInRocm91Z2hvdXRcIixcInRocnVcIixcInRodXNcIixcInRvXCIsXCJ0b2dldGhlclwiLFwidG9vXCIsXCJ0b29rXCIsXCJ0b3dhcmRcIixcInRvd2FyZHNcIixcInRyaWVkXCIsXCJ0cmllc1wiLFwidHJ1bHlcIixcInRyeVwiLFwidHJ5aW5nXCIsXCJ0d2ljZVwiLFwidHdvXCIsXCJ1XCIsXCJ1blwiLFwidW5kZXJcIixcInVuZm9ydHVuYXRlbHlcIixcInVubGVzc1wiLFwidW5saWtlbHlcIixcInVudGlsXCIsXCJ1bnRvXCIsXCJ1cFwiLFwidXBvblwiLFwidXNcIixcInVzZVwiLFwidXNlZFwiLFwidXNlZnVsXCIsXCJ1c2VzXCIsXCJ1c2luZ1wiLFwidXN1YWxseVwiLFwidXVjcFwiLFwidlwiLFwidmFsdWVcIixcInZhcmlvdXNcIixcInZlcnlcIixcInZpYVwiLFwidml6XCIsXCJ2c1wiLFwid1wiLFwid2FudFwiLFwid2FudHNcIixcIndhc1wiLFwid2Fzbid0XCIsXCJ3YXlcIixcIndlXCIsXCJ3ZSdkXCIsXCJ3ZSdsbFwiLFwid2UncmVcIixcIndlJ3ZlXCIsXCJ3ZWxjb21lXCIsXCJ3ZWxsXCIsXCJ3ZW50XCIsXCJ3ZXJlXCIsXCJ3ZXJlbid0XCIsXCJ3aGF0XCIsXCJ3aGF0J3NcIixcIndoYXRldmVyXCIsXCJ3aGVuXCIsXCJ3aGVuY2VcIixcIndoZW5ldmVyXCIsXCJ3aGVyZVwiLFwid2hlcmUnc1wiLFwid2hlcmVhZnRlclwiLFwid2hlcmVhc1wiLFwid2hlcmVieVwiLFwid2hlcmVpblwiLFwid2hlcmV1cG9uXCIsXCJ3aGVyZXZlclwiLFwid2hldGhlclwiLFwid2hpY2hcIixcIndoaWxlXCIsXCJ3aGl0aGVyXCIsXCJ3aG9cIixcIndobydzXCIsXCJ3aG9ldmVyXCIsXCJ3aG9sZVwiLFwid2hvbVwiLFwid2hvc2VcIixcIndoeVwiLFwid2lsbFwiLFwid2lsbGluZ1wiLFwid2lzaFwiLFwid2l0aFwiLFwid2l0aGluXCIsXCJ3aXRob3V0XCIsXCJ3b24ndFwiLFwid29uZGVyXCIsXCJ3b3VsZFwiLFwid291bGRcIixcIndvdWxkbid0XCIsXCJ4XCIsXCJ5XCIsXCJ5ZXNcIixcInlldFwiLFwieW91XCIsXCJ5b3UnZFwiLFwieW91J2xsXCIsXCJ5b3UncmVcIixcInlvdSd2ZVwiLFwieW91clwiLFwieW91cnNcIixcInlvdXJzZWxmXCIsXCJ5b3Vyc2VsdmVzXCIsXCJ6XCIsXCJ6ZXJvXCJdXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvY2xpZW50L2ZlYXR1cmVzL2VucmljaG1lbnQvY3kvY2x1c3Rlci1sYWJlbC1jYXRlZ29yaXphdGlvbi9zdG9wd29yZHMuanNvblxuLy8gbW9kdWxlIGlkID0gNTE3XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gW1wia2VnZ1wiLFwicmVhY3RvbWVcIixcInJlYWN0XCIsXCJiaW9jYXJ0YVwiLFwiZ29cIixcIm5jaVwiLFwibXNpZ2RiXCJdXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvY2xpZW50L2ZlYXR1cmVzL2VucmljaG1lbnQvY3kvY2x1c3Rlci1sYWJlbC1jYXRlZ29yaXphdGlvbi9mbGFnZ2Vkd29yZHMuanNvblxuLy8gbW9kdWxlIGlkID0gNTE4XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImNvbnN0IGN5dG9zY2FwZSA9IHJlcXVpcmUoJ2N5dG9zY2FwZScpO1xyXG5cclxuY29uc3QgREVGQVVMVF9OT0RFX1NJWkUgPSAzMDtcclxuXHJcbmxldCAgZ2V0Tm9kZVNpemUgPSBub2RlID0+IHtcclxuICBsZXQgZ2VuZUNvdW50ID0gbm9kZS5kYXRhKCdnZW5lQ291bnQnKSB8fCBERUZBVUxUX05PREVfU0laRTtcclxuXHJcbiAgcmV0dXJuIE1hdGgubWluKCBNYXRoLm1heChERUZBVUxUX05PREVfU0laRSwgZ2VuZUNvdW50KSwgMTAwICk7XHJcbn07XHJcblxyXG5jb25zdCBlbnJpY2htZW50U3R5bGVzaGVldD1jeXRvc2NhcGUuc3R5bGVzaGVldCgpXHJcbi5zZWxlY3RvcignZWRnZScpXHJcbiAgLmNzcyh7XHJcbiAgICAnb3BhY2l0eSc6IDAuMyxcclxuICAgICdjdXJ2ZS1zdHlsZSc6ICdoYXlzdGFjaycsXHJcbiAgICAnaGF5c3RhY2stcmFkaXVzJzogMCxcclxuICAgICdsaW5lLWNvbG9yJzogJyM1NTUnLFxyXG4gICAgJ3dpZHRoJzogZWRnZSA9PiB7XHJcbiAgICAgIGxldCBzaW1pbGFyaXR5ID0gZWRnZS5kYXRhKCdzaW1pbGFyaXR5Jyk7XHJcblxyXG4gICAgICBpZiggc2ltaWxhcml0eSA8PSAwLjMgKXtcclxuICAgICAgICByZXR1cm4gMjtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYoIHNpbWlsYXJpdHkgPD0gMC43NSApe1xyXG4gICAgICAgIHJldHVybiA0O1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gMTI7XHJcbiAgICB9XHJcbiAgfSlcclxuLnNlbGVjdG9yKCdub2RlJylcclxuICAuY3NzKHtcclxuICAgICdmb250LXNpemUnOiAxNCxcclxuICAgICdjb2xvcic6ICcjZmZmJyxcclxuICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogJyMzMzMnLFxyXG4gICAgJ3RleHQtb3V0bGluZS1jb2xvcic6ICcjMzMzJyxcclxuICAgICd0ZXh0LW91dGxpbmUtd2lkdGgnOiA0LFxyXG4gICAgJ3RleHQtd3JhcCc6ICd3cmFwJyxcclxuICAgICd0ZXh0LW1heC13aWR0aCc6IDE3NSxcclxuICAgICd3aWR0aCc6IG5vZGUgPT4gZ2V0Tm9kZVNpemUobm9kZSksXHJcbiAgICAnaGVpZ2h0Jzogbm9kZSA9PiBnZXROb2RlU2l6ZShub2RlKSxcclxuICAgICdsYWJlbCc6IG5vZGUgPT4gbm9kZS5kYXRhKCduYW1lJyksXHJcbiAgICAnbWluLXpvb21lZC1mb250LXNpemUnOiA1LFxyXG4gICAgJ3RleHQtaGFsaWduJzogJ2NlbnRlcicsXHJcbiAgICAndGV4dC12YWxpZ24nOiAnY2VudGVyJyxcclxuICAgICd0ZXh0LWV2ZW50cyc6ICd5ZXMnXHJcbiAgfSlcclxuLnNlbGVjdG9yKCckbm9kZSA+IG5vZGUnKVxyXG4gIC5jc3Moe1xyXG4gICAgJ3RleHQtb3V0bGluZS13aWR0aCc6IDAsXHJcbiAgICAnbGFiZWwnOiBub2RlID0+IG5vZGUuZGF0YSgndGFncycpICE9ICcnID8gYFRhZ3M6ICR7bm9kZS5kYXRhKCd0YWdzJyl9YCA6ICcnLFxyXG4gICAgJ2JvcmRlci13aWR0aCc6IDUsXHJcbiAgICAnYmFja2dyb3VuZC1jb2xvcic6ICd3aGl0ZScsXHJcbiAgICAnY29sb3InOiAnIzMzMycsXHJcbiAgICAndGV4dC12YWxpZ24nOiAnYm90dG9tJyxcclxuICAgICd0ZXh0LW1heC13aWR0aCc6IDEwMDAsXHJcbiAgICAnZm9udC1zaXplJzogNDAsXHJcbiAgICAndGV4dC1ldmVudHMnOiAnbm8nXHJcbiAgfSlcclxuLnNlbGVjdG9yKCdub2RlWz9xdWVyaWVkXScpXHJcbiAgLmNzcyh7XHJcbiAgICAnYmFja2dyb3VuZC1jb2xvcic6ICdibHVlJyxcclxuICAgICdvcGFjaXR5JzogMSxcclxuICAgICd6LWNvbXBvdW5kLWRlcHRoJzogJ3RvcCcsXHJcbiAgICAnY29sb3InOiAnd2hpdGUnLFxyXG4gICAgJ3RleHQtb3V0bGluZS1jb2xvcic6ICdibGFjaydcclxuICB9KVxyXG4uc2VsZWN0b3IoJ25vZGU6c2VsZWN0ZWQnKVxyXG4gIC5jc3Moe1xyXG4gICAgJ2JhY2tncm91bmQtY29sb3InOiAnIzAxNjlkOScsXHJcbiAgICAndGV4dC1vdXRsaW5lLWNvbG9yJzogJyMwMTY5ZDknXHJcbiAgfSlcclxuLnNlbGVjdG9yKCdlZGdlOnNlbGVjdGVkJylcclxuICAuY3NzKHtcclxuICAgICd6LWluZGV4JzogOTk5LFxyXG4gICAgJ29wYWNpdHknOiAxLFxyXG4gICAgJ2xpbmUtY29sb3InOiAnIzAxNjlkOSdcclxuICB9KVxyXG4uc2VsZWN0b3IoJy5oaWRkZW4nKVxyXG4gIC5jc3Moe1xyXG4gICAgJ2Rpc3BsYXknOidub25lJyxcclxuICB9KVxyXG4uc2VsZWN0b3IoJy5oaWdobGlnaHRlZCcpXHJcbiAgLmNzcyh7XHJcbiAgICAnb3BhY2l0eSc6IDEsXHJcbiAgfSlcclxuLnNlbGVjdG9yKCcudW5oaWdobGlnaHRlZCcpXHJcbiAgLmNzcyh7XHJcbiAgICAnb3BhY2l0eSc6IDAuMSxcclxuICB9KVxyXG4uc2VsZWN0b3IoYC5tYXRjaGVkYClcclxuICAuY3NzKHtcclxuICAgICdib3JkZXItY29sb3InOiAneWVsbG93JyxcclxuICAgICdib3JkZXItd2lkdGgnOiAxMCxcclxuICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogJyM2MDYwMDAnLFxyXG4gICAgJ3RleHQtb3V0bGluZS1jb2xvcic6ICcjNjA2MDAwJ1xyXG4gIH0pO1xyXG5tb2R1bGUuZXhwb3J0cyA9IGVucmljaG1lbnRTdHlsZXNoZWV0O1xyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY2xpZW50L2ZlYXR1cmVzL2VucmljaG1lbnQvY3kvZW5yaWNobWVudC1zdHlsZXNoZWV0LmpzIiwiY29uc3QgaCA9IHJlcXVpcmUoJ3JlYWN0LWh5cGVyc2NyaXB0Jyk7XHJcbmNvbnN0IHsgQ29tcG9uZW50IH0gPSByZXF1aXJlKCdyZWFjdCcpO1xyXG5jb25zdCB7IExpbmsgfSA9IHJlcXVpcmUoJ3JlYWN0LXJvdXRlci1kb20nKTtcclxuXHJcbmNvbnN0IHsgU2VydmVyQVBJIH0gPSByZXF1aXJlKCcuLi8uLi9zZXJ2aWNlcycpO1xyXG5cclxuY2xhc3MgQmlvZmFjdG9pZCBleHRlbmRzIENvbXBvbmVudCB7XHJcbiAgY29uc3RydWN0b3IocHJvcHMpe1xyXG4gICAgc3VwZXIocHJvcHMpO1xyXG5cclxuICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgIGRvY3M6IFtdXHJcbiAgICB9O1xyXG4gIH1cclxuICBjb21wb25lbnREaWRNb3VudCgpe1xyXG4gICAgU2VydmVyQVBJLmdldEFsbERvY3MoKS50aGVuKCByZXMgPT4gdGhpcy5zZXRTdGF0ZSh7ZG9jczogcmVzfSkpO1xyXG4gIH1cclxuXHJcbiAgcmVuZGVyKCl7XHJcbiAgICBsZXQgeyBkb2NzIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgcmV0dXJuIGgoJ2Rpdi5iaW9mYWN0b2lkJywgZG9jcy5tYXAoIGYgPT4ge1xyXG4gICAgICByZXR1cm4gaChMaW5rLCB7IGNsYXNzTmFtZTogJ3BsYWluLWxpbmsnLCB0bzogeyBwYXRobmFtZTogYC9iaW9mYWN0b2lkLyR7Zi5pZH1gfSwgdGFyZ2V0OiAnX2JsYW5rJyB9LCBmLmlkKTtcclxuICAgIH0pKTtcclxuICB9XHJcbn1cclxuXHJcblxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBCaW9mYWN0b2lkO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jbGllbnQvZmVhdHVyZXMvYmlvZmFjdG9pZC9pbmRleC5qcyIsImNvbnN0IGN5dG9zY2FwZSA9IHJlcXVpcmUoJ2N5dG9zY2FwZScpO1xyXG5cclxuLy9MYXlvdXRzXHJcbmNvbnN0IGNvc2VCaWxrZW50ID0gcmVxdWlyZSgnY3l0b3NjYXBlLWNvc2UtYmlsa2VudCcpO1xyXG5jb25zdCBjb2xhID0gcmVxdWlyZSgnY3l0b3NjYXBlLWNvbGEnKTtcclxuXHJcbmNvbnN0IGV4cGFuZENvbGxhcHNlID0gcmVxdWlyZSgnY3l0b3NjYXBlLWV4cGFuZC1jb2xsYXBzZScpO1xyXG5cclxuLy9Ub29sdGlwc1xyXG5jb25zdCBwb3BwZXIgPSByZXF1aXJlKCdjeXRvc2NhcGUtcG9wcGVyJyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9ICgpID0+IHtcclxuICBjeXRvc2NhcGUudXNlKGNvbGEpO1xyXG4gIGN5dG9zY2FwZS51c2UoY29zZUJpbGtlbnQpO1xyXG4gIGN5dG9zY2FwZS51c2UoZXhwYW5kQ29sbGFwc2UpO1xyXG4gIGN5dG9zY2FwZS51c2UocG9wcGVyKTtcclxufTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY2xpZW50L2N5dG9zY2FwZS1leHRlbnNpb25zLmpzIiwiY29uc3QgRHJvcGRvd24gPSByZXF1aXJlKCcuL2Ryb3Bkb3duJyk7XHJcbmNvbnN0IFBvcG92ZXIgPSByZXF1aXJlKCcuL3BvcG92ZXInKTtcclxuY29uc3QgVG9vbHRpcCA9IHJlcXVpcmUoJy4vdG9vbHRpcCcpO1xyXG5jb25zdCBJY29uQnV0dG9uID0gcmVxdWlyZSgnLi9pY29uLWJ1dHRvbicpO1xyXG5jb25zdCB7IENhcmQsIENhcmRHcmlkIH0gPSByZXF1aXJlKCcuL2NhcmQnKTtcclxuY29uc3QgeyBBcHBDYXJkIH0gPSByZXF1aXJlKCcuL2FwcC1jYXJkJyk7XHJcbmNvbnN0IFBjTG9nb0xpbmsgPSByZXF1aXJlKCcuL3BjLWxvZ28tbGluaycpO1xyXG5jb25zdCBFbXB0eU5ldHdvcmsgPSByZXF1aXJlKCcuL2VtcHR5LW5ldHdvcmsnKTtcclxuY29uc3QgU2lkZWJhciA9IHJlcXVpcmUoJy4vc2lkZWJhcicpO1xyXG5jb25zdCBDeXRvc2NhcGVOZXR3b3JrID0gcmVxdWlyZSgnLi9jeXRvc2NhcGUtbmV0d29yaycpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcbiAgRHJvcGRvd24sXHJcbiAgUG9wb3ZlcixcclxuICBUb29sdGlwLFxyXG4gIEljb25CdXR0b24sXHJcbiAgQ2FyZCxcclxuICBDYXJkR3JpZCxcclxuICBBcHBDYXJkLFxyXG4gIFBjTG9nb0xpbmssXHJcbiAgRW1wdHlOZXR3b3JrLFxyXG4gIFNpZGViYXIsXHJcbiAgQ3l0b3NjYXBlTmV0d29ya1xyXG59O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jbGllbnQvY29tbW9uL2NvbXBvbmVudHMvaW5kZXguanMiLCJjb25zdCB7IHNhZmVGZXRjaDogZmV0Y2gsIFRpbWVvdXRFcnJvciB9ID0gcmVxdWlyZSgnLi9mZXRjaCcpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7IGZldGNoLCBUaW1lb3V0RXJyb3IgfTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvdXRpbC9pbmRleC5qcyIsImNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcclxuY29uc3QgaCA9IHJlcXVpcmUoJ3JlYWN0LWh5cGVyc2NyaXB0Jyk7XHJcblxyXG5jb25zdCBUb29sdGlwID0gcmVxdWlyZSgnLi90b29sdGlwJyk7XHJcbmNvbnN0IGNsYXNzTmFtZXMgPSByZXF1aXJlKCdjbGFzc25hbWVzJyk7XHJcblxyXG5jbGFzcyBJY29uQnV0dG9uIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICByZW5kZXIoKXtcclxuICAgIGxldCB7IGRlc2NyaXB0aW9uLCBvbkNsaWNrLCBpc0FjdGl2ZSwgaWNvbiB9ID0gdGhpcy5wcm9wcztcclxuXHJcbiAgICBvbkNsaWNrID0gb25DbGljayB8fCAoZnVuY3Rpb24oKXt9KTtcclxuXHJcbiAgICByZXR1cm4gaCgnYnV0dG9uLmljb24tYnV0dG9uLmJ1dHRvbi10b2dnbGUucGxhaW4tYnV0dG9uJywge1xyXG4gICAgICAgIG9uQ2xpY2s6IGUgPT4gb25DbGljayhlKSxcclxuICAgICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoeyAnYnV0dG9uLXRvZ2dsZS1vbic6IGlzQWN0aXZlIH0pXHJcbiAgICAgIH0sIFtcclxuICAgICAgICBoKFRvb2x0aXAsIHsgZGVzY3JpcHRpb24gfSwgW1xyXG4gICAgICAgICAgaCgnc3BhbicsIFtcclxuICAgICAgICAgICAgaCgnaS5tYXRlcmlhbC1pY29ucycsIGljb24pXHJcbiAgICAgICAgICBdKVxyXG4gICAgICAgIF0pXHJcbiAgICAgIF0pO1xyXG4gIH1cclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBJY29uQnV0dG9uO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jbGllbnQvY29tbW9uL2NvbXBvbmVudHMvaWNvbi1idXR0b24uanMiLCJjb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XHJcbmNvbnN0IFJlYWN0RG9tID0gcmVxdWlyZSgncmVhY3QtZG9tJyk7XHJcbmNvbnN0IGggPSByZXF1aXJlKCdyZWFjdC1oeXBlcnNjcmlwdCcpO1xyXG5jb25zdCBoaCA9IHJlcXVpcmUoJ2h5cGVyc2NyaXB0Jyk7XHJcbmNvbnN0IFRpcHB5ID0gcmVxdWlyZSgndGlwcHkuanMnKTtcclxuY29uc3QgXyA9IHJlcXVpcmUoJ2xvZGFzaCcpO1xyXG5jb25zdCBNb3VzZXRyYXAgPSByZXF1aXJlKCdtb3VzZXRyYXAnKTtcclxuY29uc3QgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpO1xyXG5cclxuY29uc3QgdGlwcHlFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5jb25zdCB0aXBweURlZmF1bHRzID0gcmVxdWlyZSgnLi4vdGlwcHktZGVmYXVsdHMnKTtcclxuXHJcbk1vdXNldHJhcC5iaW5kKCdlc2NhcGUnLCAoKSA9PiB0aXBweUVtaXR0ZXIuZW1pdCgnZXNjJykpO1xyXG5cclxuY2xhc3MgUG9wb3ZlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgY29uc3RydWN0b3IoIHByb3BzICl7XHJcbiAgICBzdXBlciggcHJvcHMgKTtcclxuICB9XHJcblxyXG4gIHJlbmRlcigpe1xyXG4gICAgbGV0IHAgPSB0aGlzLnByb3BzO1xyXG5cclxuICAgIHJldHVybiBoKCAnc3Bhbi5wb3BvdmVyLXRhcmdldCcsIHtcclxuICAgICAgcmVmOiBlbCA9PiB0aGlzLnRhcmdldCA9IGVsLFxyXG4gICAgICBvbkNsaWNrOiBwLm9uQ2xpY2tcclxuICAgIH0sIHAuY2hpbGRyZW4gKTtcclxuICB9XHJcblxyXG4gIHJlbmRlclRpcENvbnRlbnQoKXtcclxuICAgIGxldCBlbCA9IHRoaXMucHJvcHMudGlwcHkuaHRtbDtcclxuXHJcbiAgICBpZiggXy5pc0Z1bmN0aW9uKGVsKSApe1xyXG4gICAgICBlbCA9IGgoZWwpO1xyXG4gICAgfVxyXG5cclxuICAgIFJlYWN0RG9tLnJlbmRlciggZWwsIHRoaXMuY29udGVudCApO1xyXG4gIH1cclxuXHJcbiAgY29tcG9uZW50RGlkTW91bnQoKXtcclxuICAgIGxldCBwID0gdGhpcy5wcm9wcztcclxuICAgIGxldCB0YXJnZXQgPSBwLnRhcmdldCB8fCB0aGlzLnRhcmdldDtcclxuICAgIGxldCBvcHRpb25zID0gcC50aXBweTtcclxuICAgIGxldCBjb250ZW50ID0gdGhpcy5jb250ZW50ID0gaGgoJ2RpdicsIHtcclxuICAgICAgY2xhc3NOYW1lOiAoIHRoaXMucHJvcHMuY2xhc3NOYW1lIHx8ICcnICkgKyAnIHBvcG92ZXItY29udGVudCdcclxuICAgIH0pO1xyXG5cclxuICAgIGxldCByYXdUaXBweU9wdGlvbnMgPSBfLmFzc2lnbigge30sIHRpcHB5RGVmYXVsdHMsIG9wdGlvbnMgKTtcclxuXHJcbiAgICBsZXQgdGlwcHlPcHRpb25zID0gXy5hc3NpZ24oIHt9LCByYXdUaXBweU9wdGlvbnMsIHtcclxuICAgICAgaHRtbDogY29udGVudCxcclxuICAgICAgaGlkZU9uQ2xpY2s6IGZhbHNlXHJcbiAgICB9ICk7XHJcblxyXG4gICAgdGhpcy5yZW5kZXJUaXBDb250ZW50KCk7XHJcblxyXG4gICAgbGV0IHRpcHB5ID0gVGlwcHkoIHRhcmdldCwgdGlwcHlPcHRpb25zICkudG9vbHRpcHNbMF07XHJcblxyXG4gICAgbGV0IHNob3cgPSAoKSA9PiB0aXBweS5zaG93KCk7XHJcbiAgICBsZXQgaGlkZSA9ICgpID0+IHRpcHB5LmhpZGUoKTtcclxuXHJcbiAgICBpZiggcC5zaG93ICl7IHAuc2hvdyggc2hvdyApOyB9XHJcbiAgICBpZiggcC5oaWRlICl7IHAuaGlkZSggaGlkZSApOyB9XHJcblxyXG4gICAgdGhpcy5zaG93VGlwcHkgPSAoKSA9PiB0aXBweS5zaG93KCk7XHJcbiAgICB0aGlzLmhpZGVUaXBweSA9ICgpID0+IHRpcHB5LmhpZGUoKTtcclxuICAgIHRoaXMuZGVzdHJveVRpcHB5ID0gKCkgPT4gdGlwcHkuZGVzdHJveSgpO1xyXG5cclxuICAgIHRpcHB5RW1pdHRlci5vbignZXNjJywgdGhpcy5oaWRlVGlwcHkpO1xyXG5cclxuICAgIC8vIHRoZSB0aXBweSBoaWRlIG9uIGNsaWNrIGRvZXNuJ3Qgd29yayB3aXRoIGFuZCBuZXN0ZWQgdGlwcGllcyBvdGhlcndpc2VcclxuICAgIGlmKCByYXdUaXBweU9wdGlvbnMuaGlkZU9uQ2xpY2sgKXtcclxuICAgICAgdGhpcy5vbkJvZHlDbGljayA9IChlKSA9PiB7XHJcbiAgICAgICAgbGV0IHBhcmVudCA9IGUudGFyZ2V0O1xyXG4gICAgICAgIGxldCBoaWRlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgd2hpbGUoIHBhcmVudCAhPT0gZG9jdW1lbnQuYm9keSApe1xyXG4gICAgICAgICAgaWYoIHBhcmVudCA9PT0gY29udGVudCB8fCBwYXJlbnQgPT09IHRhcmdldCApe1xyXG4gICAgICAgICAgICBoaWRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIGhpZGUgKXtcclxuICAgICAgICAgIHRoaXMuaGlkZVRpcHB5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG5cclxuICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMub25Cb2R5Q2xpY2spO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29tcG9uZW50V2lsbFVubW91bnQoKXtcclxuICAgIHRpcHB5RW1pdHRlci5yZW1vdmVMaXN0ZW5lcignZXNjJywgdGhpcy5oaWRlVGlwcHkpO1xyXG5cclxuICAgIFJlYWN0RG9tLnVubW91bnRDb21wb25lbnRBdE5vZGUoIHRoaXMuY29udGVudCApO1xyXG5cclxuICAgIGlmKCB0aGlzLm9uQm9keUNsaWNrICl7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLm9uQm9keUNsaWNrKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRlc3Ryb3lUaXBweSgpO1xyXG4gIH1cclxuXHJcbiAgY29tcG9uZW50RGlkVXBkYXRlKCl7XHJcbiAgICB0aGlzLnJlbmRlclRpcENvbnRlbnQoKTtcclxuICB9XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUG9wb3ZlcjtcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NsaWVudC9jb21tb24vY29tcG9uZW50cy9wb3BvdmVyLmpzIiwiY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xyXG5jb25zdCBoID0gcmVxdWlyZSgncmVhY3QtaHlwZXJzY3JpcHQnKTtcclxuXHJcbmNvbnN0IHsgTGluayB9ID0gcmVxdWlyZSgncmVhY3Qtcm91dGVyLWRvbScpO1xyXG5cclxuY2xhc3MgRXJyb3JNZXNzYWdlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICByZW5kZXIoKXtcclxuICAgIGNvbnN0IGxvZ28gPSB0aGlzLnByb3BzLmxvZ29cclxuICAgICAgPyBoKCBMaW5rLCB7IHRvOiB7IHBhdGhuYW1lOiBgL2B9LCB0YXJnZXQ6ICdfYmxhbmsnIH0sIFtcclxuICAgICAgICAgIGgoJ2Rpdi5lcnJvci1icmFuZGluZycsIFtcclxuICAgICAgICAgICAgaCgnZGl2LnBjLWxvZ28nKSxcclxuICAgICAgICAgICAgaCgnZGl2LmVycm9yLWJyYW5kaW5nLWRlc2NyaXB0b3InLCBbXHJcbiAgICAgICAgICAgICAgaCgnaDIuZXJyb3Itc3VidGl0bGUnLCAnUGF0aHdheSBDb21tb25zJyksXHJcbiAgICAgICAgICAgICAgaCgnaDEuZXJyb3ItdGl0bGUnLCAnU2VhcmNoJylcclxuICAgICAgICAgICAgXSlcclxuICAgICAgICAgIF0pXHJcbiAgICAgIF0pXHJcbiAgICAgIDogbnVsbDtcclxuXHJcbiAgICBjb25zdCB0aXRsZSA9IGgoJ2gxLmVycm9yLW1lc3NhZ2UtdGl0bGUnLFxyXG4gICAgICB0aGlzLnByb3BzLnRpdGxlICE9PSB1bmRlZmluZWQgPyB0aGlzLnByb3BzLnRpdGxlIDogJ0FuIGVycm9yIG9jY3VycmVkJyApO1xyXG5cclxuICAgIGNvbnN0IGJvZHkgPSB0aGlzLnByb3BzLmJvZHkgP1xyXG4gICAgICBoKCdwLmVycm9yLW1lc3NhZ2UtYm9keScsIFtcclxuICAgICAgICBoKCdzcGFuJywgdGhpcy5wcm9wcy5ib2R5IClcclxuICAgICAgXSkgOiBudWxsO1xyXG5cclxuICAgIGNvbnN0IGZvb3RlciA9IGgoJ3AuZXJyb3ItbWVzc2FnZS1mb290ZXInLCB0aGlzLnByb3BzLmZvb3RlciAhPT0gdW5kZWZpbmVkID8gdGhpcy5wcm9wcy5mb290ZXI6IFtcclxuICAgICAgaCgnc3BhbicsICdJZiBkaWZmaWN1bHRpZXMgcGVyc2lzdCwgcGxlYXNlIHJlcG9ydCB0aGlzIHRvIG91ciAnKSxcclxuICAgICAgaCgnYS5wbGFpbi1saW5rJywgeyBocmVmOiAnbWFpbHRvOiBwYXRod2F5LWNvbW1vbnMtaGVscEBnb29nbGVncm91cHMuY29tJyB9LCAnaGVscCBmb3J1bS4nKVxyXG4gICAgXSk7XHJcblxyXG4gICAgcmV0dXJuICBoKCdkaXYuZXJyb3ItbWVzc2FnZS1jb250YWluZXInLCBbXHJcbiAgICAgIGgoJ2Rpdi5lcnJvci1tZXNzYWdlJywgW1xyXG4gICAgICAgIGxvZ28sXHJcbiAgICAgICAgdGl0bGUsXHJcbiAgICAgICAgYm9keSxcclxuICAgICAgICBmb290ZXJcclxuICAgICAgXSlcclxuICAgIF0pO1xyXG4gIH1cclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7IEVycm9yTWVzc2FnZSB9O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jbGllbnQvY29tbW9uL2NvbXBvbmVudHMvZXJyb3ItbWVzc2FnZS5qcyIsImNvbnN0IGN5dG9zY2FwZSA9IHJlcXVpcmUoJ2N5dG9zY2FwZScpO1xyXG5jb25zdCBQcm9taXNlID0gcmVxdWlyZSgnYmx1ZWJpcmQnKTtcclxuXHJcbi8qKlxyXG4gKiBBIHNlcnZpY2UgdG8gY3JlYXRlIEN5dG9zY2FwZSBpbnN0YW5jZXMuICBUaGlzIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZVxyXG4gKiBDeXRvc2NhcGUgaW5zdGFuY2VzIHRoYXQgYXJlIHBhc3NlZCB0byBtdWx0aXBsZSBjb21wb25lbnRzLCB3aXRoIGRlbGF5ZWRcclxuICogbW91bnRpbmcuXHJcbiAqL1xyXG5jbGFzcyBDeXRvc2NhcGVTZXJ2aWNlIHtcclxuICAvKipcclxuICAgKiBDcmVhdGVzIHRoZSBzZXJ2aWNlLCBzdG9yaW5nIHRoZSBzcGVjaWZpZWQgb3B0aW9ucyBmb3IgbGF0ZXIgaW5pdGlhbGlzYXRpb24gb2ZcclxuICAgKiB0aGUgQ3l0b3NjYXBlIGluc3RhbmNlLlxyXG4gICAqIEBwYXJhbSBvcHRpb25zIEFuIG9wdGlvbnMgb2JqZWN0IHRoYXQgY29udGFpbnMgQ3l0b3NjYXBlIG9wdGlvbnMgYW5kIGNvbW1vbiBhcHBcclxuICAgKiBiaW5kaW5nIG9wdGlvbnMuXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3Iob3B0aW9ucyl7XHJcbiAgICB0aGlzLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHtcclxuICAgICAgb25Nb3VudDogKCkgPT4ge30sXHJcbiAgICAgIG1pblpvb206IDAuMDgsXHJcbiAgICAgIG1heFpvb206IDQsXHJcbiAgICAgIHpvb21pbmdFbmFibGVkOiB0cnVlLFxyXG4gICAgICBsYXlvdXQ6IHtcclxuICAgICAgICBuYW1lOiAnbnVsbCdcclxuICAgICAgfVxyXG4gICAgfSwgb3B0aW9ucyk7XHJcblxyXG4gICAgdGhpcy5tb3VudGVkID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy5tb3VudFByb21pc2UgPSBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuICAgICAgdGhpcy5yZXNvbHZlTW91bnQgPSByZXNvbHZlO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5sb2FkZWRQcm9taXNlID0gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgIHRoaXMucmVzb2x2ZUxvYWQgPSByZXNvbHZlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTeW5jaHJvbm91c2x5IGdldHMgdGhlIEN5dG9zY2FwZSBpbnN0YW5jZS4gIFRoaXMgbWF5IHJldHVybiBgdW5kZWZpbmVkYCwgYXMgdGhlXHJcbiAgICogaW5zdGFuY2UgbWlnaHQgbm90IGJlIGluaXRpYWxpc2VkIHlldC5cclxuICAgKiBAcmV0dXJucyBUaGUgQ3l0b3NjYXBlIGluc3RhbmNlIChgY3lgKVxyXG4gICAqL1xyXG4gIGdldCgpe1xyXG4gICAgcmV0dXJuIHRoaXMuY3k7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBc3luY2hyb25vdXNseSBnZXRzIHRoZSBDeXRvc2NhcGUgaW5zdGFuY2UgYnkgcmVzb2x2aW5nIGEgcHJvbWlzZSB3aXRoIHRoZSBpbnN0YW5jZVxyXG4gICAqIChgY3lgKS4gIFVzaW5nIHRoaXMgZ3VhcmFudGVlcyB0aGF0IHlvdSB3b24ndCBnZXQgbnVsbCBleGNlcHRpb25zIG9uIGBjeWAuXHJcbiAgICovXHJcbiAgZ2V0UHJvbWlzZSgpe1xyXG4gICAgcmV0dXJuIHRoaXMubW91bnRQcm9taXNlO1xyXG4gIH1cclxuXHJcbiAgbG9hZFByb21pc2UoKXtcclxuICAgIHJldHVybiB0aGlzLmxvYWRlZFByb21pc2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbml0aWFsaXNlIHRoZSBDeXRvc2NhcGUgaW5zdGFuY2UuXHJcbiAgICogQHBhcmFtIGNvbnRhaW5lciBUaGUgY29udGFpbmVyIGluIHdoaWNoIHRvIG1vdW50LiAgSWYgdW5zcGVjaWZpZWQsIEN5dG9zY2FwZSBpc1xyXG4gICAqIG1vdW50ZWQgaW4gYG9wdGlvbnMuY29udGFpbmVyYC5cclxuICAgKi9cclxuICBtb3VudChjb250YWluZXIpe1xyXG4gICAgaWYodGhpcy5tb3VudGVkKXtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW4gbm90IG1vdW50IGFuIGFscmVhZHkgbW91bnRlZCBDeXRvc2NhcGVTZXJ2aWNlYCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5tb3VudGVkID0gdHJ1ZTtcclxuXHJcbiAgICBsZXQgb3B0aW9ucyA9IGNvbnRhaW5lciA9PSBudWxsID8gdGhpcy5vcHRpb25zIDogT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5vcHRpb25zLCB7IGNvbnRhaW5lciB9KTtcclxuICAgIGxldCBjeSA9IHRoaXMuY3kgPSBjeXRvc2NhcGUob3B0aW9ucyk7XHJcblxyXG4gICAgb3B0aW9ucy5vbk1vdW50KGN5KTtcclxuXHJcbiAgICB0aGlzLnJlc29sdmVNb3VudChjeSk7XHJcbiAgfVxyXG5cclxuICBsb2FkKCl7XHJcbiAgICBpZighdGhpcy5tb3VudGVkKXtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW4gbm90IGluZGljYXRlIGxvYWRlZCBmb3IgYW4gdW5tb3VudGVkIEN5dG9zY2FwZVNlcnZpY2VgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZighdGhpcy5jeSl7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2FuIG5vdCBpbmRpY2F0ZSBsb2FkZWQgd2l0aCBubyBjeSByZWZgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlc29sdmVMb2FkKHRoaXMuY3kpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVzdHJveSB0aGUgQ3l0b3NjYXBlIGluc3RhbmNlLCB1bm1vdW50aW5nIGl0IGFuZCBjbGVhbmluZyB1cCBhbnkgbGlzdGVuZXJzIGV0Yy5cclxuICAgKi9cclxuICBkZXN0cm95KCl7XHJcbiAgICBpZih0aGlzLmN5ID09IG51bGwpe1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbiBub3QgZGVzdHJveSBhIG5vbi1tb3VudGVkIEN5dG9zY2FwZVNlcnZpY2VgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmN5LmRlc3Ryb3koKTtcclxuICB9XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ3l0b3NjYXBlU2VydmljZTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY2xpZW50L2NvbW1vbi9jeS9pbmRleC5qcyIsImNvbnN0IFJlYWN0RG9tID0gcmVxdWlyZSgncmVhY3QtZG9tJyk7XHJcbmNvbnN0IGhoID0gcmVxdWlyZSgnaHlwZXJzY3JpcHQnKTtcclxuY29uc3QgdGlwcHkgPSByZXF1aXJlKCd0aXBweS5qcycpO1xyXG5jb25zdCBfID0gcmVxdWlyZSgnbG9kYXNoJyk7XHJcblxyXG5jbGFzcyBDeXRvc2NhcGVUb29sdGlwIHtcclxuICBjb25zdHJ1Y3Rvcih0aXBweVJlZiwgdGlwcHlPcHRzKSB7XHJcbiAgICB0aGlzLnRvb2x0aXAgPSBudWxsO1xyXG4gICAgdGhpcy5vcHRzID0gdGlwcHlPcHRzO1xyXG4gICAgdGhpcy50aXBweVJlZiA9IHRpcHB5UmVmO1xyXG5cclxuXHJcbiAgICB0aGlzLm9uQm9keUNsaWNrID0gKCBlICkgPT4ge1xyXG4gICAgICBsZXQgcGFyZW50ID0gZS50YXJnZXQ7XHJcbiAgICAgIGxldCB0YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY3knKTtcclxuICAgICAgbGV0IGhpZGUgPSB0cnVlO1xyXG5cclxuICAgICAgd2hpbGUoIHBhcmVudCAhPT0gZG9jdW1lbnQuYm9keSApe1xyXG4gICAgICAgIGlmKCBwYXJlbnQgPT09IHRoaXMuY29udGFpbmVyIHx8IHBhcmVudCA9PT0gdGFyZ2V0ICl7XHJcbiAgICAgICAgICBoaWRlID0gZmFsc2U7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiggaGlkZSApe1xyXG4gICAgICAgIHRoaXMuaGlkZSgpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLm9uQm9keUNsaWNrKTtcclxuICB9XHJcblxyXG4gIGlzU21hbGxTY3JlZW4oKXtcclxuICAgIHJldHVybiB3aW5kb3cuaW5uZXJXaWR0aCA8PSA2MDA7XHJcbiAgfVxyXG5cclxuICByZWFjdFJlbmRlcihodG1sKXtcclxuICAgIGxldCBkaXYgPSBoaCgnZGl2Jyk7XHJcbiAgICBSZWFjdERvbS5yZW5kZXIoIGh0bWwsIGRpdiApO1xyXG5cclxuICAgIHRoaXMuY29udGFpbmVyID0gZGl2O1xyXG5cclxuICAgIHJldHVybiBkaXY7XHJcbiAgfVxyXG5cclxuICBzaG93KCkge1xyXG4gICAgbGV0IHsgdG9vbHRpcCwgdGlwcHlSZWYsIG9wdHMgfSA9IHRoaXM7XHJcbiAgICBsZXQgeyBodG1sIH0gPSBvcHRzO1xyXG5cclxuICAgIGxldCBpc1NtYWxsU2NyZWVuID0gdGhpcy5pc1NtYWxsU2NyZWVuKCk7XHJcblxyXG4gICAgaWYoIHRvb2x0aXAgIT0gbnVsbCApe1xyXG4gICAgICB0b29sdGlwLmRlc3Ryb3koKTtcclxuICAgICAgdG9vbHRpcCA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYoIGlzU21hbGxTY3JlZW4gKXtcclxuICAgICAgdGlwcHlSZWYgPSB7XHJcbiAgICAgICAgY2xpZW50V2lkdGg6IDEsXHJcbiAgICAgICAgY2xpZW50SGVpZ2h0OiAxLFxyXG4gICAgICAgIGZvY3VzOiAoKSA9PiB7fSwgLy8gVE9ETyBmaWxlIGJ1ZyB3aXRoIHRpcHB5IGV4cGVjdGluZyBmb2N1cyBtZXRob2Qgb24gcmVmIG9ialxyXG4gICAgICAgIGdldEJvdW5kaW5nQ2xpZW50UmVjdDogKCkgPT4ge1xyXG4gICAgICAgICAgbGV0IHcgPSB3aW5kb3cuaW5uZXJXaWR0aDtcclxuICAgICAgICAgIGxldCBoID0gd2luZG93LmlubmVySGVpZ2h0O1xyXG5cclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHRvcDogaCxcclxuICAgICAgICAgICAgYm90dG9tOiAwLFxyXG4gICAgICAgICAgICBsZWZ0OiB3IC8gMixcclxuICAgICAgICAgICAgcmlnaHQ6IHcgLyAyLFxyXG4gICAgICAgICAgICB3aWR0aDogMSxcclxuICAgICAgICAgICAgaGVpZ2h0OiAxXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgdG9vbHRpcCA9IHRpcHB5KHRpcHB5UmVmLCBfLmFzc2lnbih7fSwge1xyXG4gICAgICB0aGVtZTogJ2xpZ2h0JyxcclxuICAgICAgaW50ZXJhY3RpdmU6IHRydWUsXHJcbiAgICAgIHRyaWdnZXI6ICdtYW51YWwnLFxyXG4gICAgICBhbmltYXRpb246ICdmYWRlJyxcclxuICAgICAgYW5pbWF0ZUZpbGw6IGZhbHNlLFxyXG4gICAgICBkdXJhdGlvbjogWyAyNTAsIDAgXSxcclxuICAgICAgaGlkZU9uQ2xpY2s6IGZhbHNlLFxyXG4gICAgICBhcnJvdzogIWlzU21hbGxTY3JlZW4sXHJcbiAgICAgIHBsYWNlbWVudDogaXNTbWFsbFNjcmVlbiA/ICd0b3AnIDogJ3JpZ2h0JyxcclxuICAgICAgZmxpcDogaXNTbWFsbFNjcmVlbiA/IGZhbHNlIDogdHJ1ZSxcclxuICAgICAgZGlzdGFuY2U6IDEwXHJcbiAgICAgIH0sXHJcbiAgICAgIG9wdHMsIHsgaHRtbDogdGhpcy5yZWFjdFJlbmRlcihodG1sKSB9XHJcbiAgICApKS50b29sdGlwc1swXTtcclxuXHJcbiAgICB0aGlzLnRvb2x0aXAgPSB0b29sdGlwO1xyXG4gICAgdG9vbHRpcC5zaG93KCk7XHJcbiAgfVxyXG5cclxuICBoaWRlKCkge1xyXG4gICAgaWYgKHRoaXMudG9vbHRpcCkge1xyXG4gICAgICB0aGlzLnRvb2x0aXAuaGlkZSgpO1xyXG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vbkJvZHlDbGljayk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEN5dG9zY2FwZVRvb2x0aXA7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NsaWVudC9jb21tb24vY3kvY3l0b3NjYXBlLXRvb2x0aXAuanMiLCJjb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XHJcbmNvbnN0IGggPSByZXF1aXJlKCdyZWFjdC1oeXBlcnNjcmlwdCcpO1xyXG5jb25zdCBQb3BvdmVyID0gcmVxdWlyZSgnLi9wb3BvdmVyJyk7XHJcblxyXG5jb25zdCB7IEZBQ1RPSURfVVJMIH0gPSByZXF1aXJlKCcuLi8uLi8uLi9jb25maWcnKTtcclxuXHJcbmNsYXNzIENvbnRyaWJ1dGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gIGNvbnN0cnVjdG9yKCBwcm9wcyApe1xyXG4gICAgc3VwZXIoIHByb3BzICk7XHJcbiAgfVxyXG5cclxuICByZW5kZXIoKXtcclxuICAgIGNvbnN0IHsgdGV4dCwgaW5mbyB9ID0gdGhpcy5wcm9wcztcclxuXHJcbiAgICByZXR1cm4gaCgnZGl2LmNvbnRyaWJ1dGUnLCB7fSwgW1xyXG4gICAgICBoKCdhLmNvbnRyaWJ1dGUtcG9wb3Zlci1saW5rJywge1xyXG4gICAgICAgIGhyZWY6IGAke0ZBQ1RPSURfVVJMfWAsXHJcbiAgICAgICAgdGFyZ2V0OiAnX2JsYW5rJ1xyXG4gICAgICB9LCB0ZXh0KSxcclxuICAgICAgaChQb3BvdmVyICwge1xyXG4gICAgICAgICAgdGlwcHk6IHtcclxuICAgICAgICAgICAgcG9zaXRpb246ICdib3R0b20nLFxyXG4gICAgICAgICAgICBodG1sOiBoKCdkaXYuY29udHJpYnV0ZS1wb3BvdmVyJywgW2luZm9dIClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LCBbIGgoJ2kubWF0ZXJpYWwtaWNvbnMnLCAnaW5mbycpIF1cclxuICAgICAgKVxyXG4gICAgXSk7XHJcbiAgfVxyXG59XHJcblxyXG4vLyBTcGVjaWZpZXMgdGhlIGRlZmF1bHQgdmFsdWVzIGZvciBwcm9wczpcclxuQ29udHJpYnV0ZS5kZWZhdWx0UHJvcHMgPSB7XHJcbiAgdGV4dDogJ0FkZCBteSBkYXRhJyxcclxuICBpbmZvOiBoKCdkaXYuY29udHJpYnV0ZS1wb3BvdmVyLWluZm8nLCB7XHJcbiAgfSwgW1xyXG4gICAgYEF1dGhvcnMgb2YgcHJpbWFyeSByZXNlYXJjaCBhcnRpY2xlcyB3aXRoIHBhdGh3YXkgYW5kIGludGVyYWN0aW9uIGluZm9ybWF0aW9uIChlLmcuIGJpbmRpbmcsIHRyYW5zY3JpcHRpb24pIGNhbiBjb250cmlidXRlIHRoZXNlIGZpbmRpbmdzIHRvIFBhdGh3YXkgQ29tbW9ucyB0aHJvdWdoIEJpb2ZhY3RvaWQuIExlYXJuIG1vcmUgYXQgYCxcclxuICAgIGgoJ2EucGxhaW4tbGluaycsIHtcclxuICAgICAgaHJlZjogYCR7RkFDVE9JRF9VUkx9YCxcclxuICAgICAgdGFyZ2V0OiAnX2JsYW5rJ1xyXG4gICAgfSwgJ2Jpb2ZhY3RvaWQub3JnJyksICcuJ1xyXG4gIF0pLFxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7IENvbnRyaWJ1dGUgfTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY2xpZW50L2NvbW1vbi9jb21wb25lbnRzL2NvbnRyaWJ1dGUuanMiXSwic291cmNlUm9vdCI6IiJ9
\ No newline at end of file
diff --git a/public/deps.css b/public/deps.css
index 0d24d26f..ab251311 120000
--- a/public/deps.css
+++ b/public/deps.css
@@ -1 +1,824 @@
-../build/deps.css
\ No newline at end of file
+/* css entry point for dependencies bundle */
+
+/*! normalize.css v5.0.0 | MIT License | github.com/necolas/normalize.css */
+
+/**
+ * 1. Change the default font family in all browsers (opinionated).
+ * 2. Correct the line height in all browsers.
+ * 3. Prevent adjustments of font size after orientation changes in
+ * IE on Windows Phone and in iOS.
+ */
+
+/* Document
+ ========================================================================== */
+
+html {
+ font-family: sans-serif; /* 1 */
+ line-height: 1.15; /* 2 */
+ -ms-text-size-adjust: 100%; /* 3 */
+ -webkit-text-size-adjust: 100%; /* 3 */
+}
+
+/* Sections
+ ========================================================================== */
+
+/**
+ * Remove the margin in all browsers (opinionated).
+ */
+
+body {
+ margin: 0;
+}
+
+/**
+ * Add the correct display in IE 9-.
+ */
+
+article, aside, footer, header, nav, section {
+ display: block;
+}
+
+/**
+ * Correct the font size and margin on `h1` elements within `section` and
+ * `article` contexts in Chrome, Firefox, and Safari.
+ */
+
+h1 {
+ font-size: 2em;
+ margin: 0.67em 0;
+}
+
+/* Grouping content
+ ========================================================================== */
+
+/**
+ * Add the correct display in IE 9-.
+ * 1. Add the correct display in IE.
+ */
+
+figcaption, figure, main { /* 1 */
+ display: block;
+}
+
+/**
+ * Add the correct margin in IE 8.
+ */
+
+figure {
+ margin: 1em 40px;
+}
+
+/**
+ * 1. Add the correct box sizing in Firefox.
+ * 2. Show the overflow in Edge and IE.
+ */
+
+hr {
+ -webkit-box-sizing: content-box;
+ box-sizing: content-box; /* 1 */
+ height: 0; /* 1 */
+ overflow: visible; /* 2 */
+}
+
+/**
+ * 1. Correct the inheritance and scaling of font size in all browsers.
+ * 2. Correct the odd `em` font sizing in all browsers.
+ */
+
+pre {
+ font-family: monospace, monospace; /* 1 */
+ font-size: 1em; /* 2 */
+}
+
+/* Text-level semantics
+ ========================================================================== */
+
+/**
+ * 1. Remove the gray background on active links in IE 10.
+ * 2. Remove gaps in links underline in iOS 8+ and Safari 8+.
+ */
+
+a {
+ background-color: transparent; /* 1 */
+ -webkit-text-decoration-skip: objects; /* 2 */
+}
+
+/**
+ * Remove the outline on focused links when they are also active or hovered
+ * in all browsers (opinionated).
+ */
+
+a:active, a:hover {
+ outline-width: 0;
+}
+
+/**
+ * 1. Remove the bottom border in Firefox 39-.
+ * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
+ */
+
+abbr[title] {
+ border-bottom: none; /* 1 */
+ text-decoration: underline; /* 2 */
+ -webkit-text-decoration: underline dotted;
+ text-decoration: underline dotted; /* 2 */
+}
+
+/**
+ * Prevent the duplicate application of `bolder` by the next rule in Safari 6.
+ */
+
+b, strong {
+ font-weight: inherit;
+}
+
+/**
+ * Add the correct font weight in Chrome, Edge, and Safari.
+ */
+
+b, strong {
+ font-weight: bolder;
+}
+
+/**
+ * 1. Correct the inheritance and scaling of font size in all browsers.
+ * 2. Correct the odd `em` font sizing in all browsers.
+ */
+
+code, kbd, samp {
+ font-family: monospace, monospace; /* 1 */
+ font-size: 1em; /* 2 */
+}
+
+/**
+ * Add the correct font style in Android 4.3-.
+ */
+
+dfn {
+ font-style: italic;
+}
+
+/**
+ * Add the correct background and color in IE 9-.
+ */
+
+mark {
+ background-color: #ff0;
+ color: #000;
+}
+
+/**
+ * Add the correct font size in all browsers.
+ */
+
+small {
+ font-size: 80%;
+}
+
+/**
+ * Prevent `sub` and `sup` elements from affecting the line height in
+ * all browsers.
+ */
+
+sub, sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline;
+}
+
+sub {
+ bottom: -0.25em;
+}
+
+sup {
+ top: -0.5em;
+}
+
+/* Embedded content
+ ========================================================================== */
+
+/**
+ * Add the correct display in IE 9-.
+ */
+
+audio, video {
+ display: inline-block;
+}
+
+/**
+ * Add the correct display in iOS 4-7.
+ */
+
+audio:not([controls]) {
+ display: none;
+ height: 0;
+}
+
+/**
+ * Remove the border on images inside links in IE 10-.
+ */
+
+img {
+ border-style: none;
+}
+
+/**
+ * Hide the overflow in IE.
+ */
+
+svg:not(:root) {
+ overflow: hidden;
+}
+
+/* Forms
+ ========================================================================== */
+
+/**
+ * 1. Change the font styles in all browsers (opinionated).
+ * 2. Remove the margin in Firefox and Safari.
+ */
+
+button, input, optgroup, select, textarea {
+ font-family: sans-serif; /* 1 */
+ font-size: 100%; /* 1 */
+ line-height: 1.15; /* 1 */
+ margin: 0; /* 2 */
+}
+
+/**
+ * Show the overflow in IE.
+ * 1. Show the overflow in Edge.
+ */
+
+button, input { /* 1 */
+ overflow: visible;
+}
+
+/**
+ * Remove the inheritance of text transform in Edge, Firefox, and IE.
+ * 1. Remove the inheritance of text transform in Firefox.
+ */
+
+button, select { /* 1 */
+ text-transform: none;
+}
+
+/**
+ * 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`
+ * controls in Android 4.
+ * 2. Correct the inability to style clickable types in iOS and Safari.
+ */
+
+button, html [type="button"], [type="reset"], [type="submit"] {
+ -webkit-appearance: button; /* 2 */
+}
+
+/**
+ * Remove the inner border and padding in Firefox.
+ */
+
+button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner {
+ border-style: none;
+ padding: 0;
+}
+
+/**
+ * Restore the focus styles unset by the previous rule.
+ */
+
+button:-moz-focusring, [type="button"]:-moz-focusring, [type="reset"]:-moz-focusring, [type="submit"]:-moz-focusring {
+ outline: 1px dotted ButtonText;
+}
+
+/**
+ * Change the border, margin, and padding in all browsers (opinionated).
+ */
+
+fieldset {
+ border: 1px solid #c0c0c0;
+ margin: 0 2px;
+ padding: 0.35em 0.625em 0.75em;
+}
+
+/**
+ * 1. Correct the text wrapping in Edge and IE.
+ * 2. Correct the color inheritance from `fieldset` elements in IE.
+ * 3. Remove the padding so developers are not caught out when they zero out
+ * `fieldset` elements in all browsers.
+ */
+
+legend {
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box; /* 1 */
+ color: inherit; /* 2 */
+ display: table; /* 1 */
+ max-width: 100%; /* 1 */
+ padding: 0; /* 3 */
+ white-space: normal; /* 1 */
+}
+
+/**
+ * 1. Add the correct display in IE 9-.
+ * 2. Add the correct vertical alignment in Chrome, Firefox, and Opera.
+ */
+
+progress {
+ display: inline-block; /* 1 */
+ vertical-align: baseline; /* 2 */
+}
+
+/**
+ * Remove the default vertical scrollbar in IE.
+ */
+
+textarea {
+ overflow: auto;
+}
+
+/**
+ * 1. Add the correct box sizing in IE 10-.
+ * 2. Remove the padding in IE 10-.
+ */
+
+[type="checkbox"], [type="radio"] {
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box; /* 1 */
+ padding: 0; /* 2 */
+}
+
+/**
+ * Correct the cursor style of increment and decrement buttons in Chrome.
+ */
+
+[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button {
+ height: auto;
+}
+
+/**
+ * 1. Correct the odd appearance in Chrome and Safari.
+ * 2. Correct the outline style in Safari.
+ */
+
+[type="search"] {
+ -webkit-appearance: textfield; /* 1 */
+ outline-offset: -2px; /* 2 */
+}
+
+/**
+ * Remove the inner padding and cancel buttons in Chrome and Safari on macOS.
+ */
+
+[type="search"]::-webkit-search-cancel-button, [type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+
+/**
+ * 1. Correct the inability to style clickable types in iOS and Safari.
+ * 2. Change font properties to `inherit` in Safari.
+ */
+
+::-webkit-file-upload-button {
+ -webkit-appearance: button; /* 1 */
+ font: inherit; /* 2 */
+}
+
+/* Interactive
+ ========================================================================== */
+
+/*
+ * Add the correct display in IE 9-.
+ * 1. Add the correct display in Edge, IE, and Firefox.
+ */
+
+details, menu {
+ display: block;
+}
+
+/*
+ * Add the correct display in all browsers.
+ */
+
+summary {
+ display: list-item;
+}
+
+/* Scripting
+ ========================================================================== */
+
+/**
+ * Add the correct display in IE 9-.
+ */
+
+canvas {
+ display: inline-block;
+}
+
+/**
+ * Add the correct display in IE.
+ */
+
+template {
+ display: none;
+}
+
+/* Hidden
+ ========================================================================== */
+
+/**
+ * Add the correct display in IE 10-.
+ */
+
+[hidden] {
+ display: none;
+}
+
+:root {
+ /* Pathway commons colors */
+
+ /* Colours used by other modules */
+}
+
+/* Viewport scaling sizes */
+
+/*
+- WOFF3 disabled to save file size until browsers universally support it
+*/
+
+@font-face {
+ font-family: 'Material Icons';
+ font-style: normal;
+ font-weight: 400;
+ src:
+ local('Material Icons'),
+ local('MaterialIcons-Regular'),
+
+ url('data:application/font-woff;base64,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') format('woff');
+}
+
+.material-icons {
+ font: normal normal normal 24px/1 'Material Icons';
+ font-size: inherit;
+ text-rendering: auto;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ line-height: inherit;
+ vertical-align: bottom;
+
+ /* Support for all WebKit browsers. */
+ -webkit-font-smoothing: antialiased;
+
+ /* Support for Safari and Chrome. */
+ text-rendering: optimizeLegibility;
+
+ /* Support for Firefox. */
+ -moz-osx-font-smoothing: grayscale;
+
+ /* Support for IE. */
+ -webkit-font-feature-settings: 'liga';
+ font-feature-settings: 'liga';
+
+ display: inline-block;
+}
+
+input[type="radio"], input[type="checkbox"] {
+ position: absolute;
+ opacity: 0.00001;
+ pointer-events: none;
+}
+
+input[type="radio"] + label:before, input[type="checkbox"] + label::before {
+ font: normal normal normal 24px/1 'Material Icons';
+ font-size: inherit;
+ text-rendering: auto;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ line-height: inherit;
+ vertical-align: bottom;
+
+ /* Support for all WebKit browsers. */
+ -webkit-font-smoothing: antialiased;
+
+ /* Support for Safari and Chrome. */
+ text-rendering: optimizeLegibility;
+
+ /* Support for Firefox. */
+ -moz-osx-font-smoothing: grayscale;
+
+ /* Support for IE. */
+ -webkit-font-feature-settings: 'liga';
+ font-feature-settings: 'liga';
+
+ display: inline-block;
+ width: 1.28571429em;
+ text-align: center;
+ color: #d3d8da;
+
+ cursor: pointer;
+}
+
+input + label, input + label {
+ cursor: pointer;
+}
+
+input[type="checkbox"] + label::before {
+ content: '\e835';
+}
+
+input[type="checkbox"]:checked + label::before {
+ content: '\e834';
+ color: inherit;
+}
+
+input[type="radio"] + label::before {
+ content: '\e836';
+}
+
+input[type="radio"]:checked + label::before {
+ content: '\e837';
+ color: inherit;
+}
+
+/* fonts */
+
+/* @import "./vendor/fonts/roboto.css"; */
+
+/* @import "./vendor/fonts/open-sans.css"; */
+
+/* Generated by Font Squirrel (https://www.fontsquirrel.com) */
+
+/* Disabled WOFF2 as there isn't universal browser support */
+
+/* Only regular weight and bold weight enabled for now, since using light and semibold adds 200KB */
+
+/* Light */
+
+@font-face {
+ font-family: 'Open Sans';
+ src:
+ /* url('./open-sans-latin-greek/opensans-lightitalic-webfont.woff2') format('woff2'), */
+ /*url('./open-sans-latin-greek/opensans-lightitalic-webfont.woff') format('woff')*/
+ ;
+ font-weight: 300;
+ font-style: italic;
+
+}
+
+@font-face {
+ font-family: 'Open Sans';
+ src:
+ /* url('./open-sans-latin-greek/opensans-light-webfont.woff2') format('woff2'), */
+ /*url('./open-sans-latin-greek/opensans-light-webfont.woff') format('woff')*/
+ ;
+ font-weight: 300;
+ font-style: normal;
+
+}
+
+/* Regular */
+
+@font-face {
+ font-family: 'Open Sans';
+ src:
+ /* url('./open-sans-latin-greek/opensans-regular-webfont.woff2') format('woff2'), */
+ url('data:application/font-woff;base64,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') format('woff');
+ font-weight: 400;
+ font-style: normal;
+
+}
+
+@font-face {
+ font-family: 'Open Sans';
+ src:
+ /* /* url('./open-sans-latin-greek/opensans-italic-webfont.woff2') format('woff2'), */ */
+ url('data:application/font-woff;base64,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') format('woff');
+ font-weight: 400;
+ font-style: italic;
+
+}
+
+/* Semi-bold */
+
+@font-face {
+ font-family: 'Open Sans';
+ src:
+ /* url('./open-sans-latin-greek/opensans-semibolditalic-webfont.woff2') format('woff2'), */
+ /*url('./open-sans-latin-greek/opensans-semibolditalic-webfont.woff') format('woff')*/
+ ;
+ font-weight: 600;
+ font-style: italic;
+
+}
+
+@font-face {
+ font-family: 'Open Sans';
+ src:
+ /* url('./open-sans-latin-greek/opensans-semibold-webfont.woff2') format('woff2'), */
+ /*url('./open-sans-latin-greek/opensans-semibold-webfont.woff') format('woff')*/
+ ;
+ font-weight: 600;
+ font-style: normal;
+
+}
+
+/* Bold */
+
+@font-face {
+ font-family: 'Open Sans';
+ src:
+ /* url('./open-sans-latin-greek/opensans-bolditalic-webfont.woff2') format('woff2'), */
+ url('data:application/font-woff;base64,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') format('woff');
+ font-weight: 700;
+ font-style: italic;
+
+}
+
+@font-face {
+ font-family: 'Open Sans';
+ src:
+ /* url('./open-sans-latin-greek/opensans-bold-webfont.woff2') format('woff2'), */
+ url('data:application/font-woff;base64,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') format('woff');
+ font-weight: 700;
+ font-style: normal;
+
+}
+
+/* @import "./vendor/fonts/inconsolata.css"; */
+
+/* Generated by Font Squirrel (https://www.fontsquirrel.com) */
+
+/*
+- Disabled WOFF2 until universal browser support exists
+*/
+
+@font-face {
+ font-family: 'Inconsolata';
+ src:
+ /*url('./inconsolata-ascii/inconsolata-webfont.woff2') format('woff2'),*/
+ url('data:application/font-woff;base64,d09GRgABAAAAACcQAA8AAAAAN1wAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAAm7AAAABwAAAAca3kgMUdERUYAACbQAAAAHAAAAB4AJwCVT1MvMgAAAdAAAABYAAAAYF2S0MJjbWFwAAADNAAAAUUAAAH6jQvIr2N2dCAAAAR8AAAABAAAAAQAIQJ5Z2FzcAAAJsgAAAAIAAAACAAAABBnbHlmAAAFkAAAHfIAACo8oWMeUWhlYWQAAAFYAAAANgAAADb6tsyyaGhlYQAAAZAAAAAeAAAAJAfNBFRobXR4AAACKAAAAQoAAAI8CpQisWxvY2EAAASAAAABDwAAASA0uT/2bWF4cAAAAbAAAAAfAAAAIADWAIVuYW1lAAAjhAAAAfkAAAOuhpZYDnBvc3QAACWAAAABRgAAAe6N9z3Bd2ViZgAAJwgAAAAGAAAABmDpWdUAAQAAAAECTXYIM6hfDzz1AB8D6AAAAADBWXYOAAAAANX7EWgAAP9PBC8CuwAAAAgAAgAAAAAAAHjaY2BkYGB2+h/AEMVSwgAELPoMjAyooB8AST4DKwAAeNpjYGRgYOhnCGFgZQABJiBmZACJOTDogQQAGtsBXAB42mNgZnzE+IWBlYGFqYtpDwMDQw+EZnzAYMjIxMDAxM3GyczADJRoYGDQB4pnM0BBQJprCpBSUP3DbPLfh4GB2YlhgwMDg3DrFaCqE0z5IDkGRgDm9g91eNo10DtKA1EYQOE7QbDTaCEIEQmRMQpBDSoR44P4GC1UxMIiptJS0CILEASbqVyAZVobxcYF2Ii9S7B3AZ47HAMfd+bmf05yHaqBX3KE38IrbjCJNiqYwRdyHGAODQyQ4QXbaKKLQ+xh0fsdnFhv1/iYW7NO3bhpjJoXe6xiHcfOEN9PsYR5dIyLfaeMjWcLy9ZrusuYsRXv7u15hp6z5NZuW6Ph+xZS7OPK+TrulLpT3bw41yXWjN/0vzIWMGH/FXzjwrmCdWfd9RYjfrvM5088effgN+wmvRBK7+R7hh88o69z5EiLHtm/0l3IhvrF85u1Bu60oeGYx/kYxZqcVYwnHyH8AYvPotEAAHjaY2BgYGaAYBkGRgYQ+ALkMYL5LAw3gLQRgwKQJcRQx7CAYTHDUoaVDKsZ1jFsYdjBsJvpGNMtpjsKXAoiClIKcgpqCvoKVgrxCmsUlVT//P8P1KsA1LMIqGcFUM9aFD0MCgIKEgoyYD2WCD3/H/8/9P/g/wP/9/3f+3/P/+3/t/zf9HfF36l/pzwofJDzIPNBxoPEB5EPAh7o3H9wP/vWJKibSQSMbAxwjYxMQIIJXQEwSFhY2dg5OLm4eXj5+AUEhYRFRMXEJSSlpGVk5eQVFJWUVVTV1DU0tbR1dPX0DQyNjE1MzcwtLK2sbWzt7B0cnZxdXN3cPTy9vH18/fwDAoOCQ0LDwiMio6JjYuPiExKJcGVyCojMSu/NToOKpGIqyshtTwIz6htaWhubwMyezi4Q1dyGqTyvAEjk5wAJAMPiZMEAAAAAIQJ5eNpjYGDQgsIYhj6GI4wKjCWMpxhfMPEwaTH5MCUw1TH1MC1i2sT0jpmN2Yu5j3kF8x0WFRY7lkks11j+sGqx2rEGsaawrmBjYpNii2ObwXaC7QHbF3Y99gD2NPYZ7HvYL7G/4eDg8OAo4TjF8YvTiTOEs4NzFuc2zgucT7gYuIS4lLhMuNy4QrjKuA5wc3CbcDdxb+N+xhPHM4lnG88HXiFeNd4M3im8e/gY+Ez4IvgW8V3hZ+FX4vfgT+Cfxr9JQEpAQ6BLYAMQfhJ0EEwR7BG8J/hHiEsoQihNqEtohdAuoXvCbDigiLCSsIGwnbCPcJZwh/Ay4TsiQiIeIiVA2CYyAwhfiQqIygEANGBC5QB42qV6eZgc1XVv3VvVVb13V3dXV+9b9b5Or9U9vcy+j2a0L0gyCC2ABBrpgZBlgQxxQP4M2BAcbJGAHWLMYmMjYZYYL4Q4CBEMmNhgEh48m8+fIQ6OX9ieA1Pzzq3ukYTsJH9k5uvq6qpb955z7jm/8zv3FoWpMEWhNL6doimOyh9HVKF1gmOot0vHWc2rrRM0hlPqOE0ua8jlExyLPmqdQOR6mQ/ziTIvhZHuzZMn8e2Lu8J4I0Vh6jtL76EM/ktKTwUoKupgI/FqpYPKJbrkFJ2Cw4w4WqLzuFqRaygjFSWr1+oWLV6WpjXIVrIgDcOZJouRiBtu4KJTsHisiaxF+Vfk8BVDZg8fgjEW0F+im0BuCxUEDRwWlJBr1QoMVCuXnNw5v9FNEZfs1LEenvc9EHbVnXqOnOKt0pZh02jAbUjrfd5A8GO/YAw3pUev4sspLxnDLnMDmJMtWLbQ5Eh+DSARPg+0hb2OjmMzu1nYrtnubDsXhKawjdnuuIxeqDn2Cngf/U301/hrqA/diwv4O8yj6AT9HZzH96MCKtyH76XA+q2ln6Bn8Q1UnqpRHRitDIZi/cgpcvFqvBhPxBOCajyWE6RqPCHDqegU4YyoKNuFDqpWoFHVjMiN3wwibms9o0GIibRzzh0bVvZfOpJh6NJMSNy5Yay/IJf4rdm8bMY3YEzrNHH9SA2xWsyk9H9r0WW29F9gGGhzUy2a45iq9lW9oW9dbbVOefKkrikVvbrtD2jy/lxIS2ko39L76Jf4U6CBFXwpR9VhNspIspeIrFIkD2LVxIgZC44AXS6RKUFdh4B5CaB4hBUcTvU6OjqifG3wE/nhoXywHBzOaq0WPWcwm1h7IITGhrYMD+cD5cCWZCjscITwwuIt+FMzDXk60orVpyucNSjYA7yBkRIFSSnVp6fl+nS4lY6lk4lYMgPSRZfeRb/ABygJLNwA+6rycWKt5yWyCD+4hBlJqmwyOXAOkVg1LkVYkZiVyDmAftVY0SzuC5rBtEOR9HhTDm4qjmwaa0ysNLSlVMrnS8aSuUoi0LJa8IHZRnGz545ojmEwR7NMri1vzm5MFDaN9O8JrRuvz/xp36x9KCJlU2+555KZusTzYD7qOfDtAdW3/8Cz0UDYLf9x96Uo8uwNS2vQffCsA36IrJRGID6nSi9yeWStoc8GQBiGxjS7YfsVO0MHj34W397GiK58Z8+VP25WO28i26vQz+TSanQpPkZksMsBmhgroVpjzt7aMRb/4tX2XQevwJs73o17jgwf/XWzVfu7/Qs/7MqQonajZzBH8cSPzciCZJEYl0vICVn82SrEIMtXPN84Il+6r/YnD3juwhxrYW+bbFe+lPn6PdnbqkOz0EeOuhg9jQ2UgfQhlAUJ3F6qll8b+MY3Bo4fx4ZvtB9/vA3t7l7aiErUReB9VMzBJdT5TCwbq7Qn4nNaRF/Y5Us7Vl4a8ERdNofF7hEjeSLnBHKjb6Mt4B2UPSyEJ9DFypfRlhFVh4cAw9LUxYBhBMF6jlxCacnFe61ScbwvbPFaXBG17eDSS+hhsBX0IyIRDaJGS3nKhL8eXNxCkdguQV9PAo7YAEnixPcCEA5mWnW1Dhbz4HQQBqJMBwAkO4CLH8bGG5IrUZF984elxuRRR8VbXmt+51Wh5nNmkm58eWb+0ys6l0yUxW/dPHl4Ze7zydTRfYO1V5Q3U1lvbVtnrDsPm5eW0O14H9EB8WUhXC3zMAcovU/5p8sP81/F+xafkmX0RjSxttt+Cg6Pgpw5kJHgNcFqzJlZLlySayI830Fyh+lGBPgUN+f9RHX2Ekcs6KQjlrDgc+uRhtVwrPJnsfX9TmuCt46XYnUzpmlsLtR2TQVb5bBABy0hdyRqZzg8np3aXbVb0v6cUBqLCoyF6coxBva6D++nyCSB3wWQCiUJOYDEAO6CCDh1tSQThyTWg3kHNMHoL8rpvubu9TsGqwyj0dj6PLXJ1UNWSycalLyl4EA20d4YG8x50D/mpq38xvrMnokBxq5hLcJMRR7Adau5FvBkvX2ZEXemH/C/D8b/kWo/E0E1ftkL7XQZNZorV059+NGjj+J9yqc633ygjMLKW6ovvIe+jxdIXiU+xdVKPfHj58gP8bQbtZQlfXH32vK+tfULgx0C1656sDo1Uw11xCxeGHjI1Xf+0IV7S/k8bcOc6Jsfm5gL+mwg2wjg7qP4SipCFUC2EgS3RoqYaU6dt+54BNY62B6BmWKdPewNzvcXNZxGb/ea+XA25EbCRHJ858XT6TlvwWsbmjCL+YSZnWpkB4bxlY0qzTNaHacNFre0peTCdy9PJydvvGKmOhFUXhfi7vUHp8emJ7tzNg+HB0Fvo6o3y7GcBLEoh+fRtkG5mp+vD2YKyvt4IXHzF2+59d679y+oOe999Df4IOTZqJo3uphM7NXDYfA3Ne7sy/BbidMRch7AQUQCJU8jPLa1lqsNFzdVV10WqscylW2lXGu8XBydzHmzbjEUMhhdcVFvcwXxwfWd3CqXe2utMJ/bNi6N1njnfG7wPOUx+0ymMDyweQUKuZJuMeMTNBpTPO+y+EVeB7YeBTkfhtwRorIQ4cQRsUikAf2WE0a5S20gKmhyPa5GtPOVlf1FRsPQ/nxs1CbSztHE+M5LpqtbRcHj3R2KDAjaiXpucEgPhtbpaDGdre4MRvdu2HRgdGRg4fLxySmUSkmb988ODU8RXqViEroHMNEJNu+ikkqsbH+AUFYv75J6WIWuK0SsnqDHqnxlGbVwFzehLyvl+yPIic/q/GMoqj3d+zl4imZ7g4AvSFQB/RjLFAtzWtUImmoMPaNsQvcrd6HfTbze9/vZHxGfwYAz96On0SMq91Sjhfzn0F8oO9XPI+0/a6u+lYT+Xuz2Z+/2l0b3KuvR1tPdYYi7d9AJwGA9Qa9Y14HAHE60DGQ0zI0fSSS59zAM4gINEu4ZiZQiS1To4saqC4w+PkH7LMN8gAlanPpWzl3OWrJgtEghEkFvF+WLprzZuC2E3blQKpWsh5mQLRyx5dpCwqvqFIQ5+gk+RBWpIZCDWJEmIK/6Bxl+eaLkWhOpQvSYkQzpgOuRIYjaKnpocDYxNVYJZidWZ+pbXM5Woi21pFIuucIyVw8PVILujNwM9BdpfkUkmQ+LSQPHoUDKWZ5eGFn16elYs1L6xD/E85FWND1ps9TnQ52LhupbO2lbGDVFbzacE53mtOgnMlsgT7wBHI4jmUK0l+1SQuLkBGd5Vfu7ybGnWv++cSXChxevf+TRt3/7W5gtgounINZtwO8zJD+XRBXkukjNsRlkFyCREbaQiEs0nMvLP/qOr0hmCqV0ZUguZtc9OHZhoz8UDvjk7QervqAUC4fbeIG3T2VyM7xtU620RrDjykl3wevrMxoV5T2TuSFF2lZLj2dAXP4MX0ElCHYAuAJVrrRRJdFLqKopReIJ6hzQyJma6edHGNoxGB3btmMyNiZU/BfWQ4MDff5g31AbXxGox8I0h6AOYcOJGw4e+kJKivTV7IWJfWOT/2s8T3C3BrZ6FnS3Un5Vc6dIyBGBWNCaV0GhqkpQu6VvOBjIec2Qd4rrrxsejFU95815ajG8YHLYm5Orc2P714puXFWwgW9/9a5BJ0kyVBMOfwM5x3AmIsh/Ex1RfoQ0yoeooVyH93V+PPjrjmqDOTg8DO11vfaQo3hpDl2kvP7WW+N4X/tHbeU50i4KtnoWMCyu4iyYqmsl4nIEy2RCrgT2tKmE/gu8RZazDCbTM2KoVZhoVvef2Hh+ZHiwEJAqo/34QL2vxFjCqXymufOW0Vr8i+13hxyFsb2jc4dGs+bu/BBbPQG2Es7UM5BEyYnAS+S/NofYd2cRN/HOFF4AmqBn30EGjBmdZvHrKK28DH2sgj5uhT669pB6NEbaiKqHr1V+cPgKvNBUNP1N9B/QtgixR/wy0GtLpkUFgtOpl0QWL30T+S/ABqMwk0vP+gqQQhh7wVXwGAzok6S7OwJSWUhmouEGbcIam5iwgv+hHV2d0ksfoZfB51Ru6wTz8cjZRLSdozleSq+F0hYxjpDnXz/a9PPiDN7HajWc8h8oqlHeUe6gUaumKN1+hkGvR0FW3el+YPaGVyONBmWVG/ACp9PpFv+t3fNz4nP71Nxa9oINJZ6TEryUkm+/ozp81HtkCC8oz6PS4hfQyx/+PyVLninBMyfhGXAqsDnQP3UMCfGlUcROI4aRlbfhqRJ6nuU4bvF+9BvFSbDAD37yMvAKkUQ2goSGez7BqBCW6AIWPuPo6OWYozUkBVqtvN8hZStFd3WbP/6qt1Tw+wsVnzTo8LkcY6h21Uyy7nb0TeyfaF44WvKbWo2ZI67q9uGJPf3eVKa5/ZJWqQ/GJ/7/NNjFRHmWkaULKbxk584CkuYPZlOZQj6dnD48OYmOFDwef9DnLeIFwbl222qnA7TLvWo0lwOhmtmk6rWg6uUgI9hPa9GhVSXsRFGO0O9amUvjPErE5TxDIoFUqaLzQ1857/fna35bNB0S3ML4ozFrXzWAA2kj1NCmihARDW3kh75cgVy7GZCGWo4Yrnmq24cmLm35DeHy5tZFA+U+ZemqmXDJx4bTmlGa0wS3MJ7S+CWDE/vHCja3nJju5kXChV4AG1hIbj6DrnaJhpixnw2n9cfmUun8eOPmuc8dmpg4VHB7fQG/pwRWEFb1dbZZlH9B9o9bgvhGBeb4JPB8whyhKFzGS5FoSig/4dpO9bfKGhPEHL2K6qGsBmH7cKrSHjQfC/WJhTXyoemUhhbnCoNTVdvNoZFLV5fPw7EWNtG+SC1Wj+kGA7mRUEsOr5wkqwn+xGiuGjY0xeLU0PmpbiwEwVefB1/lenEL/0H04GMTx/G+gcXncKnrz++hp3q8mkAI8eaehOCIfJl3sL1Yh/RamkccY7EOxWNDVuuIzuo5v94432PREZBh9BqtcrQVksB84QF0m7In3fYXSqWCr5mGcdwQ36+BLGwv1mjJPfXVL439JAQ8P4xeW7wJ2vDQ5s0e1yVt1GYGJPFDIzucOxvN7d49l/khuDajg8pRdM/iTYTOqHUxhX7axXZ4ArIsJ0EpIaLD43cen//c9bP33zPzGRjmeeVvP/gAeEvpbXgGPAC9As9ol+WBCsS38tjnpo/PQtOfoLxy9P33e/H+/DL/5lC4pBZsKNxB1yLlWRTneE7ZjvqVF/FCcXGJQ6NFrNr+M0v3oLvwnadtD/j6GRR47XXlF/jO1uKRxjn1rYZDMnq4qTzVNPnx14Ld+VsDfezv9oF4FZ6raL/yy9dfw3cu6hr4T1rQZivaoOI42BW0IKsBW485j1a37UULiFpyf/vbhDcuPYheXHpbraMBDSX0bWWVvd1b10APogr+Cqnz7fECkkWn6q5k0uP/7Ay7Kx6jlQtxPDZpnQH0Y+/mEfew367zaV2SnmNMalyR/PAQ+kfID+BS9h5n51VOpi76dHBTXUUDJibCJTV7nGFkm9u7aqtF5+jMprF11Yp3Nt9nsXhHVhff4TVtT8aSTFUzyY7NYqbRrYOJWGxC+VWpPVtNTtr1OsTXXNnyFxAC7yt4Q4WIwxIRrKpMLTVnHaNcwBiXMwGhrOoSASb+DE7Sy9OEJxLumqdbazHUdDPZyFA1GJZHoqkJ0Z3/vlQ3GWnGEwuYTZ6QTzQL/ngQH9OwDLdExbL++ub+1gX9wXi4hW6LBv0jY0IwbdeyRrdUi+THEy4tsXOdyINepLwEG+KVPLNMpWSRVSk1QYFTZQ2tc3iSzsEN541MFtOjO7ddc+3O2iZ0dZPmWYPdYtw6u3JXvTj52eeO5npcHzDnCdAzRFXV1QgSwHaHKMXb6HSKwUTtxJnFwuUMc/kKlkGaScaSkX2+cgGK8P5BScxEPIeFVMLFe6QwHxsw6TjTKLoe2Vkdyy0+4OZNQsIdd9ji9VXFgfOrHqPDj63SWD4zlvIaCslAdcyfz1A9v3gf/RD9FHJeSGWSUN1xYZWUiz3X4Mo1lasj2i9XYlqOUR7Hob4+z2Q+2bxk26cOFT9kx2RHMuFHP+WjQ9lMrm9CspYT44f3HjzyZH2NOaDG0QAc3gAfDnQrdpjbLlflCDHq4l61TIp2hDZsrIQxQK21Ghz08bfdNrZ9u9u1Bn9lYJhhoFL0lwJjUkO5AR1o5GaTCRVHaSq+tBb9M/onyJ0D1BrwJkcPwFV8l0tiLaiuBnZXZhM95lcj1Aj1nA0GJx+1QqGXqaHaAwjKJuJHvHlfqunNe9PNSwaz8qTOZM5ExW2jAV/IK2R1/b4ML0XFwjp577aZWCUU3YUauXhjKJbReexGKWTrQ/3wcDPlg8MV2bymiZ1SenCrwet2ajUIQTTXgu5C2jOYrRUcqVxGGI6NnK8MBpNxm8XhihkEG40RQriLCeNwOA4+FVE5jqObFNR6T41rvpLHiW6dB9fH17CMd1U2OcRbJxBj0LpjYiGgF/ExjBiOYZUPUuVMPDal/AZovD3g1vtFrynYp/we/AOoH7oR3wxczUFidJmD2roLLcRYux/do/z8wMKnM4GAYHaZ0Sllf38/WodQIBOA30LXz/qWVqNroR8fFVX76aWs0+y0Q5NU1u0XQu3IO1qTuL68sVKgGUzzWZfRKdjMGuP934VhMkEYZEOs4skWBju0iWZ5p0Znthk8BXQVwgHSosczP0Kvg43sp9FFBr7K2SMSQLAgAeNkmV8JIc8T/4eh1z/emsLHWJ2GVT75U83Dym/pt+rf6q3t3A196M7Wft0z1yv3H70WH1v8q/5+HCNjxSEHvQRxlFfnQ1BhDImEQ4kEztQpUdGV/dhpfNha8jokJ8M6vUFrn0unRaOswe13OUYYQygEFdypnDtoC9gtbl4fM8XcLg2tPI7GKmZ3KpRUXkSdnEXKeOPK8yDDKFmHAhl8Z2Q47Q10It4tefjRaY/qCvwEwho954qH2jzA2qozPmCyeGyC1p9y9nwgufQuehZyhwGQmoo52NPLPgmCj71Ai6NnP7lu05FrNq355Av1lclOrDa/+peXXXt018Wfu2bk/JW1tZktqzae38P9Teh56M9BrGXvGes05gtSd9mO9KySnB7sT4krstJQNRwBzE9PitM/FNNhrRGxrKkRMbnDPrfZGUgG0KnxWMYnb+lvX9AMxCNv4LY1IPg6aSljDoQ1gPeyVJhIiByRIw1yfBf9DOoZshOo5u4za1piVzvnWVh85eikMJuZ23vlqnUp7jOV2blqbMCoN5iH0PUjizf/Lp47euneIyN629o1m7cTlJ0LJkh5Tm0H33gG5kWtBdVVSrIfobqAGfuRtH0GC5sr031hjQF5i/NFiwVPoVMbC5XSGMPjyAox7bK9Dv00AKsfg37K3fyUyOOzuau6TOxkxd5eE2GueY2qCnowrcGGQD2QrOdsh/wjuzZePpfSQOgLsZKvOJq3b9UbjSGHy3jh3CXoxgFkps1uUfJGBJ1kjQ/X109OYgut40VLKhhz6nyMhrHYXGF7dYbg0NIH6Ht4JckedtlJNjwAzdkegVZzSELd7ZTk8vfmEdIg42236WhNxp+vO8dWjElGE9bvQZfhERPLGphLm5vOG3bGpVSjXOT7Qt4DB5owRgfy8mPolFrblknX3RKsDdUgyaLV7kok8PSBSV7nDdtCDattSjOLkXM2k1vhsKFTSyMh3mNK+MONj5QL3FazIMUzxWxqvoulyaVFyPun1P2espMIb5drcpnlaCm5HjHoT6cLliF7aaGOTjEmKNWVE/fvnV9zQPkInrXC3P4Cnl3GGBEYnr2DEvA0ocXWKbLfNDKX3eaz4pFAfnTtyiF0ijPq9MqjaFT5/veuz/76DZRUfk7kIDXJ09CXypGBhgH9kRPAkXdPf/He1UcOrv6rO+cPolOv/ebEiTd/cR+0dwKmPg/tQ125z4gNcd6F1rJa+NcGUH4T0uDrN7h1M1b/F2xCdqKZjNMMwnqPJeqzWgFmNGZWozz43kSpOq8cLYqlxCBtYgymAB+NLNfUT8JY3TXuMxx7Am2HQstCKPY+5IVy/1RRuZtQbHSeatvq0jb0ZXw1tVqt5pZ3HDtcP2oiQUpjKD1JlJH8pSZnMr2aknP5dp5Vyy/CTDOoas8LHlzkrGaH0aX3cD4ciGg9JofJwiaxRSyuo1OMVmvgTJyZ4+lYlPFp3TrBYDNY2DrjETIO5HP6GsaCaVOONWhZhkaogTDLuEeNeWNfqCD4j1hl04yPZhgMqbYOyZZmWK0ms0sYMg97yLYi9crSJciHb1T3zQAwXhkZwTd+9L+7frQFdH0CdJ2BH0JvSVPoLiOA8OV+3NEsGyC+rFaeZrv3AqzY099ZRk+AsB5atpejUb0mGmPsnFVr0hp0mhS9tk+00kmtVTRFOCmIfZxHLxodZitXoj3OHPLVHZ5h85CwK2M2Y9CALOjRvhmTbD3iFwqhPtB01K1hMVEdEe0MbG6TqWBs+Jzd9RY0il5FL5BVdnuiC8xnlhJBkc0l11TKVwwk7c64O++eTHv7fAkhh9aHEyXR5wqF4zHZHXD3cv5x9HdQvwXVVUooWCzdPX2yWU93wQEycZdxybSdcF8n8o8gHdLPJbMM48vnZ+Xo0EUMY2mYZzYd3lHOpIbiMt7HsRZutaXToDkjEzErd9WLE/u4/cLV63dep1EuRefRqRXlwS2qPoml/4tegtqrrtb7ONEj9SKgFJkbksWWuS7ZS+tgFeyBi3azALoL5KBppDVbRWN2QLtjvSlqMkcu8qXCnkoluDdWmfD4bXatZBmucBdNTeOWTHNajFkdpxlseuON/sRME6d8lTRwQZPeaqyNxjqNqG/VDrIuCTK9CPZxna5vyS7b6f1e9ROdu+W66W9dD3+jN8If1L0fIkZ5TGgM1C+8sD7QEMDO+3AFHQWOYiQ92Rxm1F1mJ9m/m1PJZsDPTC6vaA4IJtcPtSa7XvD70358hU80maBYCphjertJ608HAuDZZsqO/h2TFe4UVeutmUKPvXTjJMvbXYcgNrItkwHBEetyge7+AmLzY/oKDRATdsZlOWH1i1xWGI62162//eTnP79jx+eVqdrm6qoDV6yubq6heyspO2NBLG/vy+YGDILJH4puHhhYp+z58917/hw+u/svrF914qr69i6fHKHa6AfoZqipob4l76KIXKG31/77LyUOXZO845Evk687F29NXXlj8j6x+0X913vfzGnd9VARpagKRUX/E/1EvkftgKvAoJJQFbr4Bnkdbf9DDS/4RF7kRaPFww8WOsOVqNXutEbt5yr3NIoCJfNbbEFRczV39eEPN+qNTtGoU+V+FuvRdvw4kRsUTqDowM4Sfjx9NAD37liaR9dAK4jbMOQO5xlG0GVnGci9WZZ3m/2N8nDVnZU9Dqc7UAD4M4f9uVg6atHrzefaNSao7y1w3S/0gzsTnz6U8N+ZvOZQYlG8L3njlalbu19d/LseLaJD+AF1/UhW1zmuX3Duzc+twuEbb5Iu2kXm7W6o7Lbgh8G+jtP7eGTvjnM4VTkjLNpSi7vTrursnCvidkdc+NrJiivpilY22L1eO3y6+/s4iB7AX1NjJ6HSNbWGOI1T7NFsrZlIBRyc0UiSQSDjscfdYbPNg3OhDZmQxsS5mGRUcvlc3v/ufYj/wT3cPPveu4rxrHtM4ax79JsfuZbvPYIW0Ag+oq73qG/nqFmhu5P+yG7p9IYkenLlpUF3zMU7rLbl9zruhmdL3WfRf/lOCM6c81LI/+R9EkzNw7j3q+MSLn2u1IlzL6DAbtKdyxdx+VLPn3V+rk6xc1WEsdow1rHlseznSiqee+GZ3ZLfaQbJ3WSoM+fnWiB2rlbqWGCTY6pNwn/EKtwfmOnYfzKY478di6Y44LkvURdTHDBRT+/tQQgNpvftPGun+6VIUZKKyqlIKRIpPX/mxZxwXySyfOy9pIOoW8BiG9SY7iFl4paPYeM5bXpRjzacHeikTRjkewFfQd4hO5NLgbeVOcL4BfhyisvZFApOoPyVLvOvyepm+gtuGiOMObsYtZfPc9D4A+e/4OfE44ZAcU0n52+u8lZafXGu35TEsqlsdEm75dW4M4q1kFA5i0E/Mq7X93tDekN/OzWSKpUN4eKaar9WGwn0N1KdmjpfNjSI3sCHwYaEwfQWlsLiANk5qlpQAYgZ/2/n5dYj/2QsHk4H/VY5jQ8nlbeRPXnL5JTy9y/LVbTnZUTqDhKMJ9FJEqN8mA+jk0qDfCjq/wOV0tHnAAB42o1RwWobMRSc3TiGkrb0lPO79RKv14Y4jq8Gg8GtwYHcetjYwitwpWUlJ+QD+hWlH5BLf6TXHvsJPfbQY0eyAoESiIWlefNW8+bpAXiL78hw+H3NxglnOMl+J5yjm3cTPsL7/FPCHZzk3xI+xrv8R8Jd8n/4ZdZ5RaFRvBVwhtPsZ8I5Xmd/Ez7Cx/xNwh2c5l8SPobkDwl3yf/CFC0UKnjuGwhucM99RaZBTbQgfwvN3TDawxEbbIlrIsfT4i7mPJHFLnIVmaA2I2OYCWfLWwoF2SmjhnVaKmyp48kNUXKNnq1dxIyifnDrktt9rKOoFOrXRIIrzHlTsKTKwfWji6CosY5sUDiLXXiuBhP0uRyzwVVDzrFm6HbH8+C+T80ZNQpg2qrKq43c3MuqampZqFutjOydNluptRN7Z8Rbu3NSmY3MrPEz225VIVPb3Ld6W3sZluXo6e1CVmqnKkfZvdmoVnyt5Gq+kGVD6SAhC71Wxqkzqb1vJv2+W7e68a5weldQvr+cLWhuzv7WsWcXJxKmW5E2a2uc3VWewYf4gpov+JmB2ug9z//HFQZTcDDCB5JnhA+5Ac7Rw5j/wygvKPfYtQyLUibyxACjwXlv3OMbXLzM8HUccxiIjUMNNQbRW4lLxrhWrdPWSFkOirK8lBfJ/gMIIrXtAAAAeNptzccyg3EYxeHfK5EQJUSi995930f0FiJ6750ZdcZgmCzs2ag794CdumPDPbDgDtyCUfJfOptnzrt4D0H85esTg/9yBhIkJkyYCcaClRBCsRFGOBFEYieKaBzE4MRFLHHEk0AiSSSTQipppJNBJllkk0MueeRTQCFFFFNCKWVo6D/b5VTgppIqqqmhljrqaaCRJprx0EIrXtrw0U4HnXTRTQ+99NHPAIMMMcwIo4wxzgSTTDHNDLPMMc8Ci2JmnwPOOeWICwnmkBM+uOSVd97EIlYJkVCxSZiES4REil2iJFocEsM1N9zzwDO33PHClTh55ElcEsuxxFlWN/a21/QAhtW/ua5pHk3p/dXQNE2pKw1lubJC6VZWKquU1coapSegrv7qum1lfdW/s7y0uLsWOBm+gG6fuc2/s/VX3L7WbxdWWDwAAAABAAH//wAPeNpjYGRgYOABYjEgZmJgBMI+IGYB8xgACbgAvQAAAAEAAAAA1CSYugAAAADBWXYOAAAAANX7EWgAAVnVYOgAAA==') format('woff');
+ font-weight: normal;
+ font-style: normal;
+
+}
+
+/* @import "./vendor/fonts/font-awesome.css"; */
+
+/* @import "./vendor/fonts/font-awesome-form.css"; */
+
+/* @import "./vendor/fonts/font-awesome-custom.css"; */
+
+/* @import "./vendor/fonts/material-form.css"; */
+
+/* tippy theme overrides */
+
+.tippy-popper .tippy-tooltip {
+ padding: 0;
+ text-align: inherit;
+}
+
+.tippy-popper[x-placement^=top] .tippy-tooltip .tippy-arrow {
+ border-top: 7px solid #fff;
+ border-right: 7px solid transparent;
+ border-left: 7px solid transparent;
+ bottom: -7px;
+ margin: 0 7px;
+}
+
+.tippy-popper[x-placement^=bottom] .tippy-tooltip .tippy-arrow {
+ border-bottom: 7px solid #fff;
+ border-right: 7px solid transparent;
+ border-left: 7px solid transparent;
+ top: -7px;
+ margin: 0 7px;
+}
+
+.tippy-popper[x-placement^=left] .tippy-tooltip .tippy-arrow {
+ border-left: 7px solid #fff;
+ border-top: 7px solid transparent;
+ border-bottom: 7px solid transparent;
+ right: -7px;
+ margin: 4px 0;
+}
+
+.tippy-popper[x-placement^=right] .tippy-tooltip .tippy-arrow {
+ border-right: 7px solid #fff;
+ border-top: 7px solid transparent;
+ border-bottom: 7px solid transparent;
+ left: -7px;
+ margin: 4px 0;
+}
+
+.tippy-popper .tippy-tooltip.light-theme {
+ color: inherit;
+ background-color: #fff;
+}
+
+.tippy-popper[x-placement^=top] .tippy-tooltip.light-theme .tippy-arrow {
+ border-top-color: #fff;
+}
+
+.tippy-popper[x-placement^=bottom] .tippy-tooltip.light-theme .tippy-arrow {
+ border-bottom-color: #fff;
+}
+
+.tippy-popper[x-placement^=left] .tippy-tooltip.light-theme .tippy-arrow {
+ border-left-color: #fff;
+}
+
+.tippy-popper[x-placement^=right] .tippy-tooltip.light-theme .tippy-arrow {
+ border-right-color: #fff;
+}
+
+.tippy-popper .tippy-tooltip.dark-theme {
+ color: #fff;
+ background-color: #333;
+}
+
+.tippy-popper[x-placement^=top] .tippy-tooltip.dark-theme .tippy-arrow {
+ border-top-color: #333;
+}
+
+.tippy-popper[x-placement^=bottom] .tippy-tooltip.dark-theme .tippy-arrow {
+ border-bottom-color: #333;
+}
+
+.tippy-popper[x-placement^=left] .tippy-tooltip.dark-theme .tippy-arrow {
+ border-left-color: #333;
+}
+
+.tippy-popper[x-placement^=right] .tippy-tooltip.dark-theme .tippy-arrow {
+ border-right-color: #333;
+}
+
+.tippy, .tippy-popper, .tippy-tooltip {
+ font-size: inherit;
+}
+
+.tippy-popper .tippy-tooltip {
+ -webkit-box-shadow: 0 4px 20px 4px rgba(0, 20, 60, .2), 0 4px 80px -8px rgba(0, 20, 60, .3);
+ box-shadow: 0 4px 20px 4px rgba(0, 20, 60, .2), 0 4px 80px -8px rgba(0, 20, 60, .3);
+}
+
+.tippy-popper {
+ /*
+ commented out to allow tooltips to be configured using custom zindex values
+ z-index: 999999 !important;
+
+ commented out to allow tooltips to be more easily aligned outside of full-screen views
+ position: fixed !important;
+ */
+}
+
+.react-tabs__tab-list {
+ border-bottom: 1px solid #aaa;
+ margin: 0 0 10px;
+ padding: 0;
+}
+
+.react-tabs__tab {
+ display: inline-block;
+ border: 1px solid transparent;
+ border-bottom: none;
+ bottom: -1px;
+ position: relative;
+ list-style: none;
+ padding: 6px 12px;
+ cursor: pointer;
+}
+
+.react-tabs__tab--selected {
+ background: #fff;
+ border-color: #aaa;
+ color: black;
+ border-radius: 5px 5px 0 0;
+}
+
+.react-tabs__tab--disabled {
+ color: GrayText;
+ cursor: default;
+}
+
+.react-tabs__tab:focus {
+ -webkit-box-shadow: 0 0 5px hsl(208, 99%, 50%);
+ box-shadow: 0 0 5px hsl(208, 99%, 50%);
+ border-color: hsl(208, 99%, 50%);
+ outline: none;
+}
+
+.react-tabs__tab:focus:after {
+ content: "";
+ position: absolute;
+ height: 5px;
+ left: -4px;
+ right: -4px;
+ bottom: -5px;
+ background: #fff;
+}
+
+.react-tabs__tab-panel {
+ display: none;
+}
+
+.react-tabs__tab-panel--selected {
+ display: block;
+}
diff --git a/public/deps.js b/public/deps.js
index 7dd53df8..99b0fe7f 120000
--- a/public/deps.js
+++ b/public/deps.js
@@ -1 +1,116242 @@
-../build/deps.js
\ No newline at end of file
+/******/ (function(modules) { // webpackBootstrap
+/******/ // install a JSONP callback for chunk loading
+/******/ var parentJsonpFunction = window["webpackJsonp"];
+/******/ window["webpackJsonp"] = function webpackJsonpCallback(chunkIds, moreModules, executeModules) {
+/******/ // add "moreModules" to the modules object,
+/******/ // then flag all "chunkIds" as loaded and fire callback
+/******/ var moduleId, chunkId, i = 0, resolves = [], result;
+/******/ for(;i < chunkIds.length; i++) {
+/******/ chunkId = chunkIds[i];
+/******/ if(installedChunks[chunkId]) {
+/******/ resolves.push(installedChunks[chunkId][0]);
+/******/ }
+/******/ installedChunks[chunkId] = 0;
+/******/ }
+/******/ for(moduleId in moreModules) {
+/******/ if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {
+/******/ modules[moduleId] = moreModules[moduleId];
+/******/ }
+/******/ }
+/******/ if(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules, executeModules);
+/******/ while(resolves.length) {
+/******/ resolves.shift()();
+/******/ }
+/******/ if(executeModules) {
+/******/ for(i=0; i < executeModules.length; i++) {
+/******/ result = __webpack_require__(__webpack_require__.s = executeModules[i]);
+/******/ }
+/******/ }
+/******/ return result;
+/******/ };
+/******/
+/******/ // The module cache
+/******/ var installedModules = {};
+/******/
+/******/ // objects to store loaded and loading chunks
+/******/ var installedChunks = {
+/******/ 1: 0
+/******/ };
+/******/
+/******/ // The require function
+/******/ function __webpack_require__(moduleId) {
+/******/
+/******/ // Check if module is in cache
+/******/ if(installedModules[moduleId]) {
+/******/ return installedModules[moduleId].exports;
+/******/ }
+/******/ // Create a new module (and put it into the cache)
+/******/ var module = installedModules[moduleId] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = true;
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/******/
+/******/ // expose the modules object (__webpack_modules__)
+/******/ __webpack_require__.m = modules;
+/******/
+/******/ // expose the module cache
+/******/ __webpack_require__.c = installedModules;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, {
+/******/ configurable: false,
+/******/ enumerable: true,
+/******/ get: getter
+/******/ });
+/******/ }
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/ // on error function for async loading
+/******/ __webpack_require__.oe = function(err) { console.error(err); throw err; };
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var global = __webpack_require__(4);
+var core = __webpack_require__(25);
+var hide = __webpack_require__(17);
+var redefine = __webpack_require__(18);
+var ctx = __webpack_require__(26);
+var PROTOTYPE = 'prototype';
+
+var $export = function (type, name, source) {
+ var IS_FORCED = type & $export.F;
+ var IS_GLOBAL = type & $export.G;
+ var IS_STATIC = type & $export.S;
+ var IS_PROTO = type & $export.P;
+ var IS_BIND = type & $export.B;
+ var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];
+ var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});
+ var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});
+ var key, own, out, exp;
+ if (IS_GLOBAL) source = name;
+ for (key in source) {
+ // contains in native
+ own = !IS_FORCED && target && target[key] !== undefined;
+ // export native or passed
+ out = (own ? target : source)[key];
+ // bind timers to global for call from export context
+ exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;
+ // extend global
+ if (target) redefine(target, key, out, type & $export.U);
+ // export
+ if (exports[key] != out) hide(exports, key, exp);
+ if (IS_PROTO && expProto[key] != out) expProto[key] = out;
+ }
+};
+global.core = core;
+// type bitmap
+$export.F = 1; // forced
+$export.G = 2; // global
+$export.S = 4; // static
+$export.P = 8; // proto
+$export.B = 16; // bind
+$export.W = 32; // wrap
+$export.U = 64; // safe
+$export.R = 128; // real proto method for `library`
+module.exports = $export;
+
+
+/***/ }),
+/* 1 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+if (false) {
+ module.exports = require('./cjs/react.production.min.js');
+} else {
+ module.exports = __webpack_require__(417);
+}
+
+
+/***/ }),
+/* 2 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var React = __webpack_require__(1);
+
+var parseTag = __webpack_require__(418);
+
+module.exports = h;
+
+function h(componentOrTag, properties, children) {
+ // if only one argument which is an array, wrap items with React.Fragment
+ if (arguments.length === 1 && Array.isArray(componentOrTag)) {
+ return h(React.Fragment, null, componentOrTag);
+ } else if (!children && isChildren(properties)) {
+ // If a child array or text node are passed as the second argument, shift them
+ children = properties;
+ properties = {};
+ } else if (arguments.length === 2) {
+ // If no children were passed, we don't want to pass "undefined"
+ // and potentially overwrite the `children` prop
+ children = [];
+ }
+
+ properties = properties ? Object.assign({}, properties) : {};
+
+ // Supported nested dataset attributes
+ if (properties.dataset) {
+ Object.keys(properties.dataset).forEach(function unnest(attrName) {
+ var dashedAttr = attrName.replace(/([a-z])([A-Z])/, function dash(match) {
+ return match[0] + '-' + match[1].toLowerCase();
+ });
+ properties['data-' + dashedAttr] = properties.dataset[attrName];
+ });
+
+ properties.dataset = undefined;
+ }
+
+ // Support nested attributes
+ if (properties.attributes) {
+ Object.keys(properties.attributes).forEach(function unnest(attrName) {
+ properties[attrName] = properties.attributes[attrName];
+ });
+
+ properties.attributes = undefined;
+ }
+
+ // When a selector, parse the tag name and fill out the properties object
+ if (typeof componentOrTag === 'string') {
+ componentOrTag = parseTag(componentOrTag, properties);
+ }
+
+ // Create the element
+ var args = [componentOrTag, properties].concat(children);
+ return React.createElement.apply(React, args);
+}
+
+function isChildren(x) {
+ return typeof x === 'string' || typeof x === 'number' || Array.isArray(x);
+}
+
+
+/***/ }),
+/* 3 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var isObject = __webpack_require__(7);
+module.exports = function (it) {
+ if (!isObject(it)) throw TypeError(it + ' is not an object!');
+ return it;
+};
+
+
+/***/ }),
+/* 4 */
+/***/ (function(module, exports) {
+
+// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
+var global = module.exports = typeof window != 'undefined' && window.Math == Math
+ ? window : typeof self != 'undefined' && self.Math == Math ? self
+ // eslint-disable-next-line no-new-func
+ : Function('return this')();
+if (typeof __g == 'number') __g = global; // eslint-disable-line no-undef
+
+
+/***/ }),
+/* 5 */
+/***/ (function(module, exports) {
+
+module.exports = function (exec) {
+ try {
+ return !!exec();
+ } catch (e) {
+ return true;
+ }
+};
+
+
+/***/ }),
+/* 6 */
+/***/ (function(module, exports, __webpack_require__) {
+
+/* WEBPACK VAR INJECTION */(function(global, module) {var __WEBPACK_AMD_DEFINE_RESULT__;/**
+ * @license
+ * Lodash
+ * Copyright JS Foundation and other contributors
+ * Released under MIT license
+ * Based on Underscore.js 1.8.3
+ * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ */
+;(function() {
+
+ /** Used as a safe reference for `undefined` in pre-ES5 environments. */
+ var undefined;
+
+ /** Used as the semantic version number. */
+ var VERSION = '4.17.5';
+
+ /** Used as the size to enable large array optimizations. */
+ var LARGE_ARRAY_SIZE = 200;
+
+ /** Error message constants. */
+ var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',
+ FUNC_ERROR_TEXT = 'Expected a function';
+
+ /** Used to stand-in for `undefined` hash values. */
+ var HASH_UNDEFINED = '__lodash_hash_undefined__';
+
+ /** Used as the maximum memoize cache size. */
+ var MAX_MEMOIZE_SIZE = 500;
+
+ /** Used as the internal argument placeholder. */
+ var PLACEHOLDER = '__lodash_placeholder__';
+
+ /** Used to compose bitmasks for cloning. */
+ var CLONE_DEEP_FLAG = 1,
+ CLONE_FLAT_FLAG = 2,
+ CLONE_SYMBOLS_FLAG = 4;
+
+ /** Used to compose bitmasks for value comparisons. */
+ var COMPARE_PARTIAL_FLAG = 1,
+ COMPARE_UNORDERED_FLAG = 2;
+
+ /** Used to compose bitmasks for function metadata. */
+ var WRAP_BIND_FLAG = 1,
+ WRAP_BIND_KEY_FLAG = 2,
+ WRAP_CURRY_BOUND_FLAG = 4,
+ WRAP_CURRY_FLAG = 8,
+ WRAP_CURRY_RIGHT_FLAG = 16,
+ WRAP_PARTIAL_FLAG = 32,
+ WRAP_PARTIAL_RIGHT_FLAG = 64,
+ WRAP_ARY_FLAG = 128,
+ WRAP_REARG_FLAG = 256,
+ WRAP_FLIP_FLAG = 512;
+
+ /** Used as default options for `_.truncate`. */
+ var DEFAULT_TRUNC_LENGTH = 30,
+ DEFAULT_TRUNC_OMISSION = '...';
+
+ /** Used to detect hot functions by number of calls within a span of milliseconds. */
+ var HOT_COUNT = 800,
+ HOT_SPAN = 16;
+
+ /** Used to indicate the type of lazy iteratees. */
+ var LAZY_FILTER_FLAG = 1,
+ LAZY_MAP_FLAG = 2,
+ LAZY_WHILE_FLAG = 3;
+
+ /** Used as references for various `Number` constants. */
+ var INFINITY = 1 / 0,
+ MAX_SAFE_INTEGER = 9007199254740991,
+ MAX_INTEGER = 1.7976931348623157e+308,
+ NAN = 0 / 0;
+
+ /** Used as references for the maximum length and index of an array. */
+ var MAX_ARRAY_LENGTH = 4294967295,
+ MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,
+ HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;
+
+ /** Used to associate wrap methods with their bit flags. */
+ var wrapFlags = [
+ ['ary', WRAP_ARY_FLAG],
+ ['bind', WRAP_BIND_FLAG],
+ ['bindKey', WRAP_BIND_KEY_FLAG],
+ ['curry', WRAP_CURRY_FLAG],
+ ['curryRight', WRAP_CURRY_RIGHT_FLAG],
+ ['flip', WRAP_FLIP_FLAG],
+ ['partial', WRAP_PARTIAL_FLAG],
+ ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],
+ ['rearg', WRAP_REARG_FLAG]
+ ];
+
+ /** `Object#toString` result references. */
+ var argsTag = '[object Arguments]',
+ arrayTag = '[object Array]',
+ asyncTag = '[object AsyncFunction]',
+ boolTag = '[object Boolean]',
+ dateTag = '[object Date]',
+ domExcTag = '[object DOMException]',
+ errorTag = '[object Error]',
+ funcTag = '[object Function]',
+ genTag = '[object GeneratorFunction]',
+ mapTag = '[object Map]',
+ numberTag = '[object Number]',
+ nullTag = '[object Null]',
+ objectTag = '[object Object]',
+ promiseTag = '[object Promise]',
+ proxyTag = '[object Proxy]',
+ regexpTag = '[object RegExp]',
+ setTag = '[object Set]',
+ stringTag = '[object String]',
+ symbolTag = '[object Symbol]',
+ undefinedTag = '[object Undefined]',
+ weakMapTag = '[object WeakMap]',
+ weakSetTag = '[object WeakSet]';
+
+ var arrayBufferTag = '[object ArrayBuffer]',
+ dataViewTag = '[object DataView]',
+ float32Tag = '[object Float32Array]',
+ float64Tag = '[object Float64Array]',
+ int8Tag = '[object Int8Array]',
+ int16Tag = '[object Int16Array]',
+ int32Tag = '[object Int32Array]',
+ uint8Tag = '[object Uint8Array]',
+ uint8ClampedTag = '[object Uint8ClampedArray]',
+ uint16Tag = '[object Uint16Array]',
+ uint32Tag = '[object Uint32Array]';
+
+ /** Used to match empty string literals in compiled template source. */
+ var reEmptyStringLeading = /\b__p \+= '';/g,
+ reEmptyStringMiddle = /\b(__p \+=) '' \+/g,
+ reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g;
+
+ /** Used to match HTML entities and HTML characters. */
+ var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,
+ reUnescapedHtml = /[&<>"']/g,
+ reHasEscapedHtml = RegExp(reEscapedHtml.source),
+ reHasUnescapedHtml = RegExp(reUnescapedHtml.source);
+
+ /** Used to match template delimiters. */
+ var reEscape = /<%-([\s\S]+?)%>/g,
+ reEvaluate = /<%([\s\S]+?)%>/g,
+ reInterpolate = /<%=([\s\S]+?)%>/g;
+
+ /** Used to match property names within property paths. */
+ var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,
+ reIsPlainProp = /^\w*$/,
+ rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;
+
+ /**
+ * Used to match `RegExp`
+ * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
+ */
+ var reRegExpChar = /[\\^$.*+?()[\]{}|]/g,
+ reHasRegExpChar = RegExp(reRegExpChar.source);
+
+ /** Used to match leading and trailing whitespace. */
+ var reTrim = /^\s+|\s+$/g,
+ reTrimStart = /^\s+/,
+ reTrimEnd = /\s+$/;
+
+ /** Used to match wrap detail comments. */
+ var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,
+ reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/,
+ reSplitDetails = /,? & /;
+
+ /** Used to match words composed of alphanumeric characters. */
+ var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g;
+
+ /** Used to match backslashes in property paths. */
+ var reEscapeChar = /\\(\\)?/g;
+
+ /**
+ * Used to match
+ * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).
+ */
+ var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g;
+
+ /** Used to match `RegExp` flags from their coerced string values. */
+ var reFlags = /\w*$/;
+
+ /** Used to detect bad signed hexadecimal string values. */
+ var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
+
+ /** Used to detect binary string values. */
+ var reIsBinary = /^0b[01]+$/i;
+
+ /** Used to detect host constructors (Safari). */
+ var reIsHostCtor = /^\[object .+?Constructor\]$/;
+
+ /** Used to detect octal string values. */
+ var reIsOctal = /^0o[0-7]+$/i;
+
+ /** Used to detect unsigned integer values. */
+ var reIsUint = /^(?:0|[1-9]\d*)$/;
+
+ /** Used to match Latin Unicode letters (excluding mathematical operators). */
+ var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g;
+
+ /** Used to ensure capturing order of template delimiters. */
+ var reNoMatch = /($^)/;
+
+ /** Used to match unescaped characters in compiled string literals. */
+ var reUnescapedString = /['\n\r\u2028\u2029\\]/g;
+
+ /** Used to compose unicode character classes. */
+ var rsAstralRange = '\\ud800-\\udfff',
+ rsComboMarksRange = '\\u0300-\\u036f',
+ reComboHalfMarksRange = '\\ufe20-\\ufe2f',
+ rsComboSymbolsRange = '\\u20d0-\\u20ff',
+ rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,
+ rsDingbatRange = '\\u2700-\\u27bf',
+ rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff',
+ rsMathOpRange = '\\xac\\xb1\\xd7\\xf7',
+ rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf',
+ rsPunctuationRange = '\\u2000-\\u206f',
+ rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000',
+ rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde',
+ rsVarRange = '\\ufe0e\\ufe0f',
+ rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;
+
+ /** Used to compose unicode capture groups. */
+ var rsApos = "['\u2019]",
+ rsAstral = '[' + rsAstralRange + ']',
+ rsBreak = '[' + rsBreakRange + ']',
+ rsCombo = '[' + rsComboRange + ']',
+ rsDigits = '\\d+',
+ rsDingbat = '[' + rsDingbatRange + ']',
+ rsLower = '[' + rsLowerRange + ']',
+ rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',
+ rsFitz = '\\ud83c[\\udffb-\\udfff]',
+ rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',
+ rsNonAstral = '[^' + rsAstralRange + ']',
+ rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}',
+ rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]',
+ rsUpper = '[' + rsUpperRange + ']',
+ rsZWJ = '\\u200d';
+
+ /** Used to compose unicode regexes. */
+ var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',
+ rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',
+ rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',
+ rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',
+ reOptMod = rsModifier + '?',
+ rsOptVar = '[' + rsVarRange + ']?',
+ rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',
+ rsOrdLower = '\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])',
+ rsOrdUpper = '\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])',
+ rsSeq = rsOptVar + reOptMod + rsOptJoin,
+ rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,
+ rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';
+
+ /** Used to match apostrophes. */
+ var reApos = RegExp(rsApos, 'g');
+
+ /**
+ * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and
+ * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).
+ */
+ var reComboMark = RegExp(rsCombo, 'g');
+
+ /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */
+ var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');
+
+ /** Used to match complex or compound words. */
+ var reUnicodeWord = RegExp([
+ rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',
+ rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',
+ rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,
+ rsUpper + '+' + rsOptContrUpper,
+ rsOrdUpper,
+ rsOrdLower,
+ rsDigits,
+ rsEmoji
+ ].join('|'), 'g');
+
+ /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */
+ var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');
+
+ /** Used to detect strings that need a more robust regexp to match words. */
+ var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;
+
+ /** Used to assign default `context` object properties. */
+ var contextProps = [
+ 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',
+ 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',
+ 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',
+ 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',
+ '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'
+ ];
+
+ /** Used to make template sourceURLs easier to identify. */
+ var templateCounter = -1;
+
+ /** Used to identify `toStringTag` values of typed arrays. */
+ var typedArrayTags = {};
+ typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =
+ typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =
+ typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =
+ typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =
+ typedArrayTags[uint32Tag] = true;
+ typedArrayTags[argsTag] = typedArrayTags[arrayTag] =
+ typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =
+ typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =
+ typedArrayTags[errorTag] = typedArrayTags[funcTag] =
+ typedArrayTags[mapTag] = typedArrayTags[numberTag] =
+ typedArrayTags[objectTag] = typedArrayTags[regexpTag] =
+ typedArrayTags[setTag] = typedArrayTags[stringTag] =
+ typedArrayTags[weakMapTag] = false;
+
+ /** Used to identify `toStringTag` values supported by `_.clone`. */
+ var cloneableTags = {};
+ cloneableTags[argsTag] = cloneableTags[arrayTag] =
+ cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =
+ cloneableTags[boolTag] = cloneableTags[dateTag] =
+ cloneableTags[float32Tag] = cloneableTags[float64Tag] =
+ cloneableTags[int8Tag] = cloneableTags[int16Tag] =
+ cloneableTags[int32Tag] = cloneableTags[mapTag] =
+ cloneableTags[numberTag] = cloneableTags[objectTag] =
+ cloneableTags[regexpTag] = cloneableTags[setTag] =
+ cloneableTags[stringTag] = cloneableTags[symbolTag] =
+ cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =
+ cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;
+ cloneableTags[errorTag] = cloneableTags[funcTag] =
+ cloneableTags[weakMapTag] = false;
+
+ /** Used to map Latin Unicode letters to basic Latin letters. */
+ var deburredLetters = {
+ // Latin-1 Supplement block.
+ '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A',
+ '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a',
+ '\xc7': 'C', '\xe7': 'c',
+ '\xd0': 'D', '\xf0': 'd',
+ '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E',
+ '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e',
+ '\xcc': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I',
+ '\xec': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i',
+ '\xd1': 'N', '\xf1': 'n',
+ '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O',
+ '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o',
+ '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U',
+ '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u',
+ '\xdd': 'Y', '\xfd': 'y', '\xff': 'y',
+ '\xc6': 'Ae', '\xe6': 'ae',
+ '\xde': 'Th', '\xfe': 'th',
+ '\xdf': 'ss',
+ // Latin Extended-A block.
+ '\u0100': 'A', '\u0102': 'A', '\u0104': 'A',
+ '\u0101': 'a', '\u0103': 'a', '\u0105': 'a',
+ '\u0106': 'C', '\u0108': 'C', '\u010a': 'C', '\u010c': 'C',
+ '\u0107': 'c', '\u0109': 'c', '\u010b': 'c', '\u010d': 'c',
+ '\u010e': 'D', '\u0110': 'D', '\u010f': 'd', '\u0111': 'd',
+ '\u0112': 'E', '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E',
+ '\u0113': 'e', '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e',
+ '\u011c': 'G', '\u011e': 'G', '\u0120': 'G', '\u0122': 'G',
+ '\u011d': 'g', '\u011f': 'g', '\u0121': 'g', '\u0123': 'g',
+ '\u0124': 'H', '\u0126': 'H', '\u0125': 'h', '\u0127': 'h',
+ '\u0128': 'I', '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I',
+ '\u0129': 'i', '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i',
+ '\u0134': 'J', '\u0135': 'j',
+ '\u0136': 'K', '\u0137': 'k', '\u0138': 'k',
+ '\u0139': 'L', '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L',
+ '\u013a': 'l', '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l',
+ '\u0143': 'N', '\u0145': 'N', '\u0147': 'N', '\u014a': 'N',
+ '\u0144': 'n', '\u0146': 'n', '\u0148': 'n', '\u014b': 'n',
+ '\u014c': 'O', '\u014e': 'O', '\u0150': 'O',
+ '\u014d': 'o', '\u014f': 'o', '\u0151': 'o',
+ '\u0154': 'R', '\u0156': 'R', '\u0158': 'R',
+ '\u0155': 'r', '\u0157': 'r', '\u0159': 'r',
+ '\u015a': 'S', '\u015c': 'S', '\u015e': 'S', '\u0160': 'S',
+ '\u015b': 's', '\u015d': 's', '\u015f': 's', '\u0161': 's',
+ '\u0162': 'T', '\u0164': 'T', '\u0166': 'T',
+ '\u0163': 't', '\u0165': 't', '\u0167': 't',
+ '\u0168': 'U', '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U',
+ '\u0169': 'u', '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u',
+ '\u0174': 'W', '\u0175': 'w',
+ '\u0176': 'Y', '\u0177': 'y', '\u0178': 'Y',
+ '\u0179': 'Z', '\u017b': 'Z', '\u017d': 'Z',
+ '\u017a': 'z', '\u017c': 'z', '\u017e': 'z',
+ '\u0132': 'IJ', '\u0133': 'ij',
+ '\u0152': 'Oe', '\u0153': 'oe',
+ '\u0149': "'n", '\u017f': 's'
+ };
+
+ /** Used to map characters to HTML entities. */
+ var htmlEscapes = {
+ '&': '&',
+ '<': '<',
+ '>': '>',
+ '"': '"',
+ "'": '''
+ };
+
+ /** Used to map HTML entities to characters. */
+ var htmlUnescapes = {
+ '&': '&',
+ '<': '<',
+ '>': '>',
+ '"': '"',
+ ''': "'"
+ };
+
+ /** Used to escape characters for inclusion in compiled string literals. */
+ var stringEscapes = {
+ '\\': '\\',
+ "'": "'",
+ '\n': 'n',
+ '\r': 'r',
+ '\u2028': 'u2028',
+ '\u2029': 'u2029'
+ };
+
+ /** Built-in method references without a dependency on `root`. */
+ var freeParseFloat = parseFloat,
+ freeParseInt = parseInt;
+
+ /** Detect free variable `global` from Node.js. */
+ var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
+
+ /** Detect free variable `self`. */
+ var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
+
+ /** Used as a reference to the global object. */
+ var root = freeGlobal || freeSelf || Function('return this')();
+
+ /** Detect free variable `exports`. */
+ var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;
+
+ /** Detect free variable `module`. */
+ var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;
+
+ /** Detect the popular CommonJS extension `module.exports`. */
+ var moduleExports = freeModule && freeModule.exports === freeExports;
+
+ /** Detect free variable `process` from Node.js. */
+ var freeProcess = moduleExports && freeGlobal.process;
+
+ /** Used to access faster Node.js helpers. */
+ var nodeUtil = (function() {
+ try {
+ return freeProcess && freeProcess.binding && freeProcess.binding('util');
+ } catch (e) {}
+ }());
+
+ /* Node.js helper references. */
+ var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,
+ nodeIsDate = nodeUtil && nodeUtil.isDate,
+ nodeIsMap = nodeUtil && nodeUtil.isMap,
+ nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,
+ nodeIsSet = nodeUtil && nodeUtil.isSet,
+ nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;
+
+ /*--------------------------------------------------------------------------*/
+
+ /**
+ * A faster alternative to `Function#apply`, this function invokes `func`
+ * with the `this` binding of `thisArg` and the arguments of `args`.
+ *
+ * @private
+ * @param {Function} func The function to invoke.
+ * @param {*} thisArg The `this` binding of `func`.
+ * @param {Array} args The arguments to invoke `func` with.
+ * @returns {*} Returns the result of `func`.
+ */
+ function apply(func, thisArg, args) {
+ switch (args.length) {
+ case 0: return func.call(thisArg);
+ case 1: return func.call(thisArg, args[0]);
+ case 2: return func.call(thisArg, args[0], args[1]);
+ case 3: return func.call(thisArg, args[0], args[1], args[2]);
+ }
+ return func.apply(thisArg, args);
+ }
+
+ /**
+ * A specialized version of `baseAggregator` for arrays.
+ *
+ * @private
+ * @param {Array} [array] The array to iterate over.
+ * @param {Function} setter The function to set `accumulator` values.
+ * @param {Function} iteratee The iteratee to transform keys.
+ * @param {Object} accumulator The initial aggregated object.
+ * @returns {Function} Returns `accumulator`.
+ */
+ function arrayAggregator(array, setter, iteratee, accumulator) {
+ var index = -1,
+ length = array == null ? 0 : array.length;
+
+ while (++index < length) {
+ var value = array[index];
+ setter(accumulator, value, iteratee(value), array);
+ }
+ return accumulator;
+ }
+
+ /**
+ * A specialized version of `_.forEach` for arrays without support for
+ * iteratee shorthands.
+ *
+ * @private
+ * @param {Array} [array] The array to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Array} Returns `array`.
+ */
+ function arrayEach(array, iteratee) {
+ var index = -1,
+ length = array == null ? 0 : array.length;
+
+ while (++index < length) {
+ if (iteratee(array[index], index, array) === false) {
+ break;
+ }
+ }
+ return array;
+ }
+
+ /**
+ * A specialized version of `_.forEachRight` for arrays without support for
+ * iteratee shorthands.
+ *
+ * @private
+ * @param {Array} [array] The array to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Array} Returns `array`.
+ */
+ function arrayEachRight(array, iteratee) {
+ var length = array == null ? 0 : array.length;
+
+ while (length--) {
+ if (iteratee(array[length], length, array) === false) {
+ break;
+ }
+ }
+ return array;
+ }
+
+ /**
+ * A specialized version of `_.every` for arrays without support for
+ * iteratee shorthands.
+ *
+ * @private
+ * @param {Array} [array] The array to iterate over.
+ * @param {Function} predicate The function invoked per iteration.
+ * @returns {boolean} Returns `true` if all elements pass the predicate check,
+ * else `false`.
+ */
+ function arrayEvery(array, predicate) {
+ var index = -1,
+ length = array == null ? 0 : array.length;
+
+ while (++index < length) {
+ if (!predicate(array[index], index, array)) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * A specialized version of `_.filter` for arrays without support for
+ * iteratee shorthands.
+ *
+ * @private
+ * @param {Array} [array] The array to iterate over.
+ * @param {Function} predicate The function invoked per iteration.
+ * @returns {Array} Returns the new filtered array.
+ */
+ function arrayFilter(array, predicate) {
+ var index = -1,
+ length = array == null ? 0 : array.length,
+ resIndex = 0,
+ result = [];
+
+ while (++index < length) {
+ var value = array[index];
+ if (predicate(value, index, array)) {
+ result[resIndex++] = value;
+ }
+ }
+ return result;
+ }
+
+ /**
+ * A specialized version of `_.includes` for arrays without support for
+ * specifying an index to search from.
+ *
+ * @private
+ * @param {Array} [array] The array to inspect.
+ * @param {*} target The value to search for.
+ * @returns {boolean} Returns `true` if `target` is found, else `false`.
+ */
+ function arrayIncludes(array, value) {
+ var length = array == null ? 0 : array.length;
+ return !!length && baseIndexOf(array, value, 0) > -1;
+ }
+
+ /**
+ * This function is like `arrayIncludes` except that it accepts a comparator.
+ *
+ * @private
+ * @param {Array} [array] The array to inspect.
+ * @param {*} target The value to search for.
+ * @param {Function} comparator The comparator invoked per element.
+ * @returns {boolean} Returns `true` if `target` is found, else `false`.
+ */
+ function arrayIncludesWith(array, value, comparator) {
+ var index = -1,
+ length = array == null ? 0 : array.length;
+
+ while (++index < length) {
+ if (comparator(value, array[index])) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * A specialized version of `_.map` for arrays without support for iteratee
+ * shorthands.
+ *
+ * @private
+ * @param {Array} [array] The array to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Array} Returns the new mapped array.
+ */
+ function arrayMap(array, iteratee) {
+ var index = -1,
+ length = array == null ? 0 : array.length,
+ result = Array(length);
+
+ while (++index < length) {
+ result[index] = iteratee(array[index], index, array);
+ }
+ return result;
+ }
+
+ /**
+ * Appends the elements of `values` to `array`.
+ *
+ * @private
+ * @param {Array} array The array to modify.
+ * @param {Array} values The values to append.
+ * @returns {Array} Returns `array`.
+ */
+ function arrayPush(array, values) {
+ var index = -1,
+ length = values.length,
+ offset = array.length;
+
+ while (++index < length) {
+ array[offset + index] = values[index];
+ }
+ return array;
+ }
+
+ /**
+ * A specialized version of `_.reduce` for arrays without support for
+ * iteratee shorthands.
+ *
+ * @private
+ * @param {Array} [array] The array to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @param {*} [accumulator] The initial value.
+ * @param {boolean} [initAccum] Specify using the first element of `array` as
+ * the initial value.
+ * @returns {*} Returns the accumulated value.
+ */
+ function arrayReduce(array, iteratee, accumulator, initAccum) {
+ var index = -1,
+ length = array == null ? 0 : array.length;
+
+ if (initAccum && length) {
+ accumulator = array[++index];
+ }
+ while (++index < length) {
+ accumulator = iteratee(accumulator, array[index], index, array);
+ }
+ return accumulator;
+ }
+
+ /**
+ * A specialized version of `_.reduceRight` for arrays without support for
+ * iteratee shorthands.
+ *
+ * @private
+ * @param {Array} [array] The array to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @param {*} [accumulator] The initial value.
+ * @param {boolean} [initAccum] Specify using the last element of `array` as
+ * the initial value.
+ * @returns {*} Returns the accumulated value.
+ */
+ function arrayReduceRight(array, iteratee, accumulator, initAccum) {
+ var length = array == null ? 0 : array.length;
+ if (initAccum && length) {
+ accumulator = array[--length];
+ }
+ while (length--) {
+ accumulator = iteratee(accumulator, array[length], length, array);
+ }
+ return accumulator;
+ }
+
+ /**
+ * A specialized version of `_.some` for arrays without support for iteratee
+ * shorthands.
+ *
+ * @private
+ * @param {Array} [array] The array to iterate over.
+ * @param {Function} predicate The function invoked per iteration.
+ * @returns {boolean} Returns `true` if any element passes the predicate check,
+ * else `false`.
+ */
+ function arraySome(array, predicate) {
+ var index = -1,
+ length = array == null ? 0 : array.length;
+
+ while (++index < length) {
+ if (predicate(array[index], index, array)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Gets the size of an ASCII `string`.
+ *
+ * @private
+ * @param {string} string The string inspect.
+ * @returns {number} Returns the string size.
+ */
+ var asciiSize = baseProperty('length');
+
+ /**
+ * Converts an ASCII `string` to an array.
+ *
+ * @private
+ * @param {string} string The string to convert.
+ * @returns {Array} Returns the converted array.
+ */
+ function asciiToArray(string) {
+ return string.split('');
+ }
+
+ /**
+ * Splits an ASCII `string` into an array of its words.
+ *
+ * @private
+ * @param {string} The string to inspect.
+ * @returns {Array} Returns the words of `string`.
+ */
+ function asciiWords(string) {
+ return string.match(reAsciiWord) || [];
+ }
+
+ /**
+ * The base implementation of methods like `_.findKey` and `_.findLastKey`,
+ * without support for iteratee shorthands, which iterates over `collection`
+ * using `eachFunc`.
+ *
+ * @private
+ * @param {Array|Object} collection The collection to inspect.
+ * @param {Function} predicate The function invoked per iteration.
+ * @param {Function} eachFunc The function to iterate over `collection`.
+ * @returns {*} Returns the found element or its key, else `undefined`.
+ */
+ function baseFindKey(collection, predicate, eachFunc) {
+ var result;
+ eachFunc(collection, function(value, key, collection) {
+ if (predicate(value, key, collection)) {
+ result = key;
+ return false;
+ }
+ });
+ return result;
+ }
+
+ /**
+ * The base implementation of `_.findIndex` and `_.findLastIndex` without
+ * support for iteratee shorthands.
+ *
+ * @private
+ * @param {Array} array The array to inspect.
+ * @param {Function} predicate The function invoked per iteration.
+ * @param {number} fromIndex The index to search from.
+ * @param {boolean} [fromRight] Specify iterating from right to left.
+ * @returns {number} Returns the index of the matched value, else `-1`.
+ */
+ function baseFindIndex(array, predicate, fromIndex, fromRight) {
+ var length = array.length,
+ index = fromIndex + (fromRight ? 1 : -1);
+
+ while ((fromRight ? index-- : ++index < length)) {
+ if (predicate(array[index], index, array)) {
+ return index;
+ }
+ }
+ return -1;
+ }
+
+ /**
+ * The base implementation of `_.indexOf` without `fromIndex` bounds checks.
+ *
+ * @private
+ * @param {Array} array The array to inspect.
+ * @param {*} value The value to search for.
+ * @param {number} fromIndex The index to search from.
+ * @returns {number} Returns the index of the matched value, else `-1`.
+ */
+ function baseIndexOf(array, value, fromIndex) {
+ return value === value
+ ? strictIndexOf(array, value, fromIndex)
+ : baseFindIndex(array, baseIsNaN, fromIndex);
+ }
+
+ /**
+ * This function is like `baseIndexOf` except that it accepts a comparator.
+ *
+ * @private
+ * @param {Array} array The array to inspect.
+ * @param {*} value The value to search for.
+ * @param {number} fromIndex The index to search from.
+ * @param {Function} comparator The comparator invoked per element.
+ * @returns {number} Returns the index of the matched value, else `-1`.
+ */
+ function baseIndexOfWith(array, value, fromIndex, comparator) {
+ var index = fromIndex - 1,
+ length = array.length;
+
+ while (++index < length) {
+ if (comparator(array[index], value)) {
+ return index;
+ }
+ }
+ return -1;
+ }
+
+ /**
+ * The base implementation of `_.isNaN` without support for number objects.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.
+ */
+ function baseIsNaN(value) {
+ return value !== value;
+ }
+
+ /**
+ * The base implementation of `_.mean` and `_.meanBy` without support for
+ * iteratee shorthands.
+ *
+ * @private
+ * @param {Array} array The array to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {number} Returns the mean.
+ */
+ function baseMean(array, iteratee) {
+ var length = array == null ? 0 : array.length;
+ return length ? (baseSum(array, iteratee) / length) : NAN;
+ }
+
+ /**
+ * The base implementation of `_.property` without support for deep paths.
+ *
+ * @private
+ * @param {string} key The key of the property to get.
+ * @returns {Function} Returns the new accessor function.
+ */
+ function baseProperty(key) {
+ return function(object) {
+ return object == null ? undefined : object[key];
+ };
+ }
+
+ /**
+ * The base implementation of `_.propertyOf` without support for deep paths.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {Function} Returns the new accessor function.
+ */
+ function basePropertyOf(object) {
+ return function(key) {
+ return object == null ? undefined : object[key];
+ };
+ }
+
+ /**
+ * The base implementation of `_.reduce` and `_.reduceRight`, without support
+ * for iteratee shorthands, which iterates over `collection` using `eachFunc`.
+ *
+ * @private
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @param {*} accumulator The initial value.
+ * @param {boolean} initAccum Specify using the first or last element of
+ * `collection` as the initial value.
+ * @param {Function} eachFunc The function to iterate over `collection`.
+ * @returns {*} Returns the accumulated value.
+ */
+ function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {
+ eachFunc(collection, function(value, index, collection) {
+ accumulator = initAccum
+ ? (initAccum = false, value)
+ : iteratee(accumulator, value, index, collection);
+ });
+ return accumulator;
+ }
+
+ /**
+ * The base implementation of `_.sortBy` which uses `comparer` to define the
+ * sort order of `array` and replaces criteria objects with their corresponding
+ * values.
+ *
+ * @private
+ * @param {Array} array The array to sort.
+ * @param {Function} comparer The function to define sort order.
+ * @returns {Array} Returns `array`.
+ */
+ function baseSortBy(array, comparer) {
+ var length = array.length;
+
+ array.sort(comparer);
+ while (length--) {
+ array[length] = array[length].value;
+ }
+ return array;
+ }
+
+ /**
+ * The base implementation of `_.sum` and `_.sumBy` without support for
+ * iteratee shorthands.
+ *
+ * @private
+ * @param {Array} array The array to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {number} Returns the sum.
+ */
+ function baseSum(array, iteratee) {
+ var result,
+ index = -1,
+ length = array.length;
+
+ while (++index < length) {
+ var current = iteratee(array[index]);
+ if (current !== undefined) {
+ result = result === undefined ? current : (result + current);
+ }
+ }
+ return result;
+ }
+
+ /**
+ * The base implementation of `_.times` without support for iteratee shorthands
+ * or max array length checks.
+ *
+ * @private
+ * @param {number} n The number of times to invoke `iteratee`.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Array} Returns the array of results.
+ */
+ function baseTimes(n, iteratee) {
+ var index = -1,
+ result = Array(n);
+
+ while (++index < n) {
+ result[index] = iteratee(index);
+ }
+ return result;
+ }
+
+ /**
+ * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array
+ * of key-value pairs for `object` corresponding to the property names of `props`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {Array} props The property names to get values for.
+ * @returns {Object} Returns the key-value pairs.
+ */
+ function baseToPairs(object, props) {
+ return arrayMap(props, function(key) {
+ return [key, object[key]];
+ });
+ }
+
+ /**
+ * The base implementation of `_.unary` without support for storing metadata.
+ *
+ * @private
+ * @param {Function} func The function to cap arguments for.
+ * @returns {Function} Returns the new capped function.
+ */
+ function baseUnary(func) {
+ return function(value) {
+ return func(value);
+ };
+ }
+
+ /**
+ * The base implementation of `_.values` and `_.valuesIn` which creates an
+ * array of `object` property values corresponding to the property names
+ * of `props`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {Array} props The property names to get values for.
+ * @returns {Object} Returns the array of property values.
+ */
+ function baseValues(object, props) {
+ return arrayMap(props, function(key) {
+ return object[key];
+ });
+ }
+
+ /**
+ * Checks if a `cache` value for `key` exists.
+ *
+ * @private
+ * @param {Object} cache The cache to query.
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+ function cacheHas(cache, key) {
+ return cache.has(key);
+ }
+
+ /**
+ * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol
+ * that is not found in the character symbols.
+ *
+ * @private
+ * @param {Array} strSymbols The string symbols to inspect.
+ * @param {Array} chrSymbols The character symbols to find.
+ * @returns {number} Returns the index of the first unmatched string symbol.
+ */
+ function charsStartIndex(strSymbols, chrSymbols) {
+ var index = -1,
+ length = strSymbols.length;
+
+ while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}
+ return index;
+ }
+
+ /**
+ * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol
+ * that is not found in the character symbols.
+ *
+ * @private
+ * @param {Array} strSymbols The string symbols to inspect.
+ * @param {Array} chrSymbols The character symbols to find.
+ * @returns {number} Returns the index of the last unmatched string symbol.
+ */
+ function charsEndIndex(strSymbols, chrSymbols) {
+ var index = strSymbols.length;
+
+ while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}
+ return index;
+ }
+
+ /**
+ * Gets the number of `placeholder` occurrences in `array`.
+ *
+ * @private
+ * @param {Array} array The array to inspect.
+ * @param {*} placeholder The placeholder to search for.
+ * @returns {number} Returns the placeholder count.
+ */
+ function countHolders(array, placeholder) {
+ var length = array.length,
+ result = 0;
+
+ while (length--) {
+ if (array[length] === placeholder) {
+ ++result;
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A
+ * letters to basic Latin letters.
+ *
+ * @private
+ * @param {string} letter The matched letter to deburr.
+ * @returns {string} Returns the deburred letter.
+ */
+ var deburrLetter = basePropertyOf(deburredLetters);
+
+ /**
+ * Used by `_.escape` to convert characters to HTML entities.
+ *
+ * @private
+ * @param {string} chr The matched character to escape.
+ * @returns {string} Returns the escaped character.
+ */
+ var escapeHtmlChar = basePropertyOf(htmlEscapes);
+
+ /**
+ * Used by `_.template` to escape characters for inclusion in compiled string literals.
+ *
+ * @private
+ * @param {string} chr The matched character to escape.
+ * @returns {string} Returns the escaped character.
+ */
+ function escapeStringChar(chr) {
+ return '\\' + stringEscapes[chr];
+ }
+
+ /**
+ * Gets the value at `key` of `object`.
+ *
+ * @private
+ * @param {Object} [object] The object to query.
+ * @param {string} key The key of the property to get.
+ * @returns {*} Returns the property value.
+ */
+ function getValue(object, key) {
+ return object == null ? undefined : object[key];
+ }
+
+ /**
+ * Checks if `string` contains Unicode symbols.
+ *
+ * @private
+ * @param {string} string The string to inspect.
+ * @returns {boolean} Returns `true` if a symbol is found, else `false`.
+ */
+ function hasUnicode(string) {
+ return reHasUnicode.test(string);
+ }
+
+ /**
+ * Checks if `string` contains a word composed of Unicode symbols.
+ *
+ * @private
+ * @param {string} string The string to inspect.
+ * @returns {boolean} Returns `true` if a word is found, else `false`.
+ */
+ function hasUnicodeWord(string) {
+ return reHasUnicodeWord.test(string);
+ }
+
+ /**
+ * Converts `iterator` to an array.
+ *
+ * @private
+ * @param {Object} iterator The iterator to convert.
+ * @returns {Array} Returns the converted array.
+ */
+ function iteratorToArray(iterator) {
+ var data,
+ result = [];
+
+ while (!(data = iterator.next()).done) {
+ result.push(data.value);
+ }
+ return result;
+ }
+
+ /**
+ * Converts `map` to its key-value pairs.
+ *
+ * @private
+ * @param {Object} map The map to convert.
+ * @returns {Array} Returns the key-value pairs.
+ */
+ function mapToArray(map) {
+ var index = -1,
+ result = Array(map.size);
+
+ map.forEach(function(value, key) {
+ result[++index] = [key, value];
+ });
+ return result;
+ }
+
+ /**
+ * Creates a unary function that invokes `func` with its argument transformed.
+ *
+ * @private
+ * @param {Function} func The function to wrap.
+ * @param {Function} transform The argument transform.
+ * @returns {Function} Returns the new function.
+ */
+ function overArg(func, transform) {
+ return function(arg) {
+ return func(transform(arg));
+ };
+ }
+
+ /**
+ * Replaces all `placeholder` elements in `array` with an internal placeholder
+ * and returns an array of their indexes.
+ *
+ * @private
+ * @param {Array} array The array to modify.
+ * @param {*} placeholder The placeholder to replace.
+ * @returns {Array} Returns the new array of placeholder indexes.
+ */
+ function replaceHolders(array, placeholder) {
+ var index = -1,
+ length = array.length,
+ resIndex = 0,
+ result = [];
+
+ while (++index < length) {
+ var value = array[index];
+ if (value === placeholder || value === PLACEHOLDER) {
+ array[index] = PLACEHOLDER;
+ result[resIndex++] = index;
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Gets the value at `key`, unless `key` is "__proto__".
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {string} key The key of the property to get.
+ * @returns {*} Returns the property value.
+ */
+ function safeGet(object, key) {
+ return key == '__proto__'
+ ? undefined
+ : object[key];
+ }
+
+ /**
+ * Converts `set` to an array of its values.
+ *
+ * @private
+ * @param {Object} set The set to convert.
+ * @returns {Array} Returns the values.
+ */
+ function setToArray(set) {
+ var index = -1,
+ result = Array(set.size);
+
+ set.forEach(function(value) {
+ result[++index] = value;
+ });
+ return result;
+ }
+
+ /**
+ * Converts `set` to its value-value pairs.
+ *
+ * @private
+ * @param {Object} set The set to convert.
+ * @returns {Array} Returns the value-value pairs.
+ */
+ function setToPairs(set) {
+ var index = -1,
+ result = Array(set.size);
+
+ set.forEach(function(value) {
+ result[++index] = [value, value];
+ });
+ return result;
+ }
+
+ /**
+ * A specialized version of `_.indexOf` which performs strict equality
+ * comparisons of values, i.e. `===`.
+ *
+ * @private
+ * @param {Array} array The array to inspect.
+ * @param {*} value The value to search for.
+ * @param {number} fromIndex The index to search from.
+ * @returns {number} Returns the index of the matched value, else `-1`.
+ */
+ function strictIndexOf(array, value, fromIndex) {
+ var index = fromIndex - 1,
+ length = array.length;
+
+ while (++index < length) {
+ if (array[index] === value) {
+ return index;
+ }
+ }
+ return -1;
+ }
+
+ /**
+ * A specialized version of `_.lastIndexOf` which performs strict equality
+ * comparisons of values, i.e. `===`.
+ *
+ * @private
+ * @param {Array} array The array to inspect.
+ * @param {*} value The value to search for.
+ * @param {number} fromIndex The index to search from.
+ * @returns {number} Returns the index of the matched value, else `-1`.
+ */
+ function strictLastIndexOf(array, value, fromIndex) {
+ var index = fromIndex + 1;
+ while (index--) {
+ if (array[index] === value) {
+ return index;
+ }
+ }
+ return index;
+ }
+
+ /**
+ * Gets the number of symbols in `string`.
+ *
+ * @private
+ * @param {string} string The string to inspect.
+ * @returns {number} Returns the string size.
+ */
+ function stringSize(string) {
+ return hasUnicode(string)
+ ? unicodeSize(string)
+ : asciiSize(string);
+ }
+
+ /**
+ * Converts `string` to an array.
+ *
+ * @private
+ * @param {string} string The string to convert.
+ * @returns {Array} Returns the converted array.
+ */
+ function stringToArray(string) {
+ return hasUnicode(string)
+ ? unicodeToArray(string)
+ : asciiToArray(string);
+ }
+
+ /**
+ * Used by `_.unescape` to convert HTML entities to characters.
+ *
+ * @private
+ * @param {string} chr The matched character to unescape.
+ * @returns {string} Returns the unescaped character.
+ */
+ var unescapeHtmlChar = basePropertyOf(htmlUnescapes);
+
+ /**
+ * Gets the size of a Unicode `string`.
+ *
+ * @private
+ * @param {string} string The string inspect.
+ * @returns {number} Returns the string size.
+ */
+ function unicodeSize(string) {
+ var result = reUnicode.lastIndex = 0;
+ while (reUnicode.test(string)) {
+ ++result;
+ }
+ return result;
+ }
+
+ /**
+ * Converts a Unicode `string` to an array.
+ *
+ * @private
+ * @param {string} string The string to convert.
+ * @returns {Array} Returns the converted array.
+ */
+ function unicodeToArray(string) {
+ return string.match(reUnicode) || [];
+ }
+
+ /**
+ * Splits a Unicode `string` into an array of its words.
+ *
+ * @private
+ * @param {string} The string to inspect.
+ * @returns {Array} Returns the words of `string`.
+ */
+ function unicodeWords(string) {
+ return string.match(reUnicodeWord) || [];
+ }
+
+ /*--------------------------------------------------------------------------*/
+
+ /**
+ * Create a new pristine `lodash` function using the `context` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 1.1.0
+ * @category Util
+ * @param {Object} [context=root] The context object.
+ * @returns {Function} Returns a new `lodash` function.
+ * @example
+ *
+ * _.mixin({ 'foo': _.constant('foo') });
+ *
+ * var lodash = _.runInContext();
+ * lodash.mixin({ 'bar': lodash.constant('bar') });
+ *
+ * _.isFunction(_.foo);
+ * // => true
+ * _.isFunction(_.bar);
+ * // => false
+ *
+ * lodash.isFunction(lodash.foo);
+ * // => false
+ * lodash.isFunction(lodash.bar);
+ * // => true
+ *
+ * // Create a suped-up `defer` in Node.js.
+ * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;
+ */
+ var runInContext = (function runInContext(context) {
+ context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));
+
+ /** Built-in constructor references. */
+ var Array = context.Array,
+ Date = context.Date,
+ Error = context.Error,
+ Function = context.Function,
+ Math = context.Math,
+ Object = context.Object,
+ RegExp = context.RegExp,
+ String = context.String,
+ TypeError = context.TypeError;
+
+ /** Used for built-in method references. */
+ var arrayProto = Array.prototype,
+ funcProto = Function.prototype,
+ objectProto = Object.prototype;
+
+ /** Used to detect overreaching core-js shims. */
+ var coreJsData = context['__core-js_shared__'];
+
+ /** Used to resolve the decompiled source of functions. */
+ var funcToString = funcProto.toString;
+
+ /** Used to check objects for own properties. */
+ var hasOwnProperty = objectProto.hasOwnProperty;
+
+ /** Used to generate unique IDs. */
+ var idCounter = 0;
+
+ /** Used to detect methods masquerading as native. */
+ var maskSrcKey = (function() {
+ var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');
+ return uid ? ('Symbol(src)_1.' + uid) : '';
+ }());
+
+ /**
+ * Used to resolve the
+ * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+ var nativeObjectToString = objectProto.toString;
+
+ /** Used to infer the `Object` constructor. */
+ var objectCtorString = funcToString.call(Object);
+
+ /** Used to restore the original `_` reference in `_.noConflict`. */
+ var oldDash = root._;
+
+ /** Used to detect if a method is native. */
+ var reIsNative = RegExp('^' +
+ funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
+ .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
+ );
+
+ /** Built-in value references. */
+ var Buffer = moduleExports ? context.Buffer : undefined,
+ Symbol = context.Symbol,
+ Uint8Array = context.Uint8Array,
+ allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,
+ getPrototype = overArg(Object.getPrototypeOf, Object),
+ objectCreate = Object.create,
+ propertyIsEnumerable = objectProto.propertyIsEnumerable,
+ splice = arrayProto.splice,
+ spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,
+ symIterator = Symbol ? Symbol.iterator : undefined,
+ symToStringTag = Symbol ? Symbol.toStringTag : undefined;
+
+ var defineProperty = (function() {
+ try {
+ var func = getNative(Object, 'defineProperty');
+ func({}, '', {});
+ return func;
+ } catch (e) {}
+ }());
+
+ /** Mocked built-ins. */
+ var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,
+ ctxNow = Date && Date.now !== root.Date.now && Date.now,
+ ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;
+
+ /* Built-in method references for those with the same name as other `lodash` methods. */
+ var nativeCeil = Math.ceil,
+ nativeFloor = Math.floor,
+ nativeGetSymbols = Object.getOwnPropertySymbols,
+ nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,
+ nativeIsFinite = context.isFinite,
+ nativeJoin = arrayProto.join,
+ nativeKeys = overArg(Object.keys, Object),
+ nativeMax = Math.max,
+ nativeMin = Math.min,
+ nativeNow = Date.now,
+ nativeParseInt = context.parseInt,
+ nativeRandom = Math.random,
+ nativeReverse = arrayProto.reverse;
+
+ /* Built-in method references that are verified to be native. */
+ var DataView = getNative(context, 'DataView'),
+ Map = getNative(context, 'Map'),
+ Promise = getNative(context, 'Promise'),
+ Set = getNative(context, 'Set'),
+ WeakMap = getNative(context, 'WeakMap'),
+ nativeCreate = getNative(Object, 'create');
+
+ /** Used to store function metadata. */
+ var metaMap = WeakMap && new WeakMap;
+
+ /** Used to lookup unminified function names. */
+ var realNames = {};
+
+ /** Used to detect maps, sets, and weakmaps. */
+ var dataViewCtorString = toSource(DataView),
+ mapCtorString = toSource(Map),
+ promiseCtorString = toSource(Promise),
+ setCtorString = toSource(Set),
+ weakMapCtorString = toSource(WeakMap);
+
+ /** Used to convert symbols to primitives and strings. */
+ var symbolProto = Symbol ? Symbol.prototype : undefined,
+ symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,
+ symbolToString = symbolProto ? symbolProto.toString : undefined;
+
+ /*------------------------------------------------------------------------*/
+
+ /**
+ * Creates a `lodash` object which wraps `value` to enable implicit method
+ * chain sequences. Methods that operate on and return arrays, collections,
+ * and functions can be chained together. Methods that retrieve a single value
+ * or may return a primitive value will automatically end the chain sequence
+ * and return the unwrapped value. Otherwise, the value must be unwrapped
+ * with `_#value`.
+ *
+ * Explicit chain sequences, which must be unwrapped with `_#value`, may be
+ * enabled using `_.chain`.
+ *
+ * The execution of chained methods is lazy, that is, it's deferred until
+ * `_#value` is implicitly or explicitly called.
+ *
+ * Lazy evaluation allows several methods to support shortcut fusion.
+ * Shortcut fusion is an optimization to merge iteratee calls; this avoids
+ * the creation of intermediate arrays and can greatly reduce the number of
+ * iteratee executions. Sections of a chain sequence qualify for shortcut
+ * fusion if the section is applied to an array and iteratees accept only
+ * one argument. The heuristic for whether a section qualifies for shortcut
+ * fusion is subject to change.
+ *
+ * Chaining is supported in custom builds as long as the `_#value` method is
+ * directly or indirectly included in the build.
+ *
+ * In addition to lodash methods, wrappers have `Array` and `String` methods.
+ *
+ * The wrapper `Array` methods are:
+ * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`
+ *
+ * The wrapper `String` methods are:
+ * `replace` and `split`
+ *
+ * The wrapper methods that support shortcut fusion are:
+ * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,
+ * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,
+ * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`
+ *
+ * The chainable wrapper methods are:
+ * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,
+ * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,
+ * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,
+ * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,
+ * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,
+ * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,
+ * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,
+ * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,
+ * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,
+ * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,
+ * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,
+ * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,
+ * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,
+ * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,
+ * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,
+ * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,
+ * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,
+ * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,
+ * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,
+ * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,
+ * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,
+ * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,
+ * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,
+ * `zipObject`, `zipObjectDeep`, and `zipWith`
+ *
+ * The wrapper methods that are **not** chainable by default are:
+ * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,
+ * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,
+ * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,
+ * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,
+ * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,
+ * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,
+ * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,
+ * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,
+ * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,
+ * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,
+ * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,
+ * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,
+ * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,
+ * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,
+ * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,
+ * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,
+ * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,
+ * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,
+ * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,
+ * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,
+ * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,
+ * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,
+ * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,
+ * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,
+ * `upperFirst`, `value`, and `words`
+ *
+ * @name _
+ * @constructor
+ * @category Seq
+ * @param {*} value The value to wrap in a `lodash` instance.
+ * @returns {Object} Returns the new `lodash` wrapper instance.
+ * @example
+ *
+ * function square(n) {
+ * return n * n;
+ * }
+ *
+ * var wrapped = _([1, 2, 3]);
+ *
+ * // Returns an unwrapped value.
+ * wrapped.reduce(_.add);
+ * // => 6
+ *
+ * // Returns a wrapped value.
+ * var squares = wrapped.map(square);
+ *
+ * _.isArray(squares);
+ * // => false
+ *
+ * _.isArray(squares.value());
+ * // => true
+ */
+ function lodash(value) {
+ if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {
+ if (value instanceof LodashWrapper) {
+ return value;
+ }
+ if (hasOwnProperty.call(value, '__wrapped__')) {
+ return wrapperClone(value);
+ }
+ }
+ return new LodashWrapper(value);
+ }
+
+ /**
+ * The base implementation of `_.create` without support for assigning
+ * properties to the created object.
+ *
+ * @private
+ * @param {Object} proto The object to inherit from.
+ * @returns {Object} Returns the new object.
+ */
+ var baseCreate = (function() {
+ function object() {}
+ return function(proto) {
+ if (!isObject(proto)) {
+ return {};
+ }
+ if (objectCreate) {
+ return objectCreate(proto);
+ }
+ object.prototype = proto;
+ var result = new object;
+ object.prototype = undefined;
+ return result;
+ };
+ }());
+
+ /**
+ * The function whose prototype chain sequence wrappers inherit from.
+ *
+ * @private
+ */
+ function baseLodash() {
+ // No operation performed.
+ }
+
+ /**
+ * The base constructor for creating `lodash` wrapper objects.
+ *
+ * @private
+ * @param {*} value The value to wrap.
+ * @param {boolean} [chainAll] Enable explicit method chain sequences.
+ */
+ function LodashWrapper(value, chainAll) {
+ this.__wrapped__ = value;
+ this.__actions__ = [];
+ this.__chain__ = !!chainAll;
+ this.__index__ = 0;
+ this.__values__ = undefined;
+ }
+
+ /**
+ * By default, the template delimiters used by lodash are like those in
+ * embedded Ruby (ERB) as well as ES2015 template strings. Change the
+ * following template settings to use alternative delimiters.
+ *
+ * @static
+ * @memberOf _
+ * @type {Object}
+ */
+ lodash.templateSettings = {
+
+ /**
+ * Used to detect `data` property values to be HTML-escaped.
+ *
+ * @memberOf _.templateSettings
+ * @type {RegExp}
+ */
+ 'escape': reEscape,
+
+ /**
+ * Used to detect code to be evaluated.
+ *
+ * @memberOf _.templateSettings
+ * @type {RegExp}
+ */
+ 'evaluate': reEvaluate,
+
+ /**
+ * Used to detect `data` property values to inject.
+ *
+ * @memberOf _.templateSettings
+ * @type {RegExp}
+ */
+ 'interpolate': reInterpolate,
+
+ /**
+ * Used to reference the data object in the template text.
+ *
+ * @memberOf _.templateSettings
+ * @type {string}
+ */
+ 'variable': '',
+
+ /**
+ * Used to import variables into the compiled template.
+ *
+ * @memberOf _.templateSettings
+ * @type {Object}
+ */
+ 'imports': {
+
+ /**
+ * A reference to the `lodash` function.
+ *
+ * @memberOf _.templateSettings.imports
+ * @type {Function}
+ */
+ '_': lodash
+ }
+ };
+
+ // Ensure wrappers are instances of `baseLodash`.
+ lodash.prototype = baseLodash.prototype;
+ lodash.prototype.constructor = lodash;
+
+ LodashWrapper.prototype = baseCreate(baseLodash.prototype);
+ LodashWrapper.prototype.constructor = LodashWrapper;
+
+ /*------------------------------------------------------------------------*/
+
+ /**
+ * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.
+ *
+ * @private
+ * @constructor
+ * @param {*} value The value to wrap.
+ */
+ function LazyWrapper(value) {
+ this.__wrapped__ = value;
+ this.__actions__ = [];
+ this.__dir__ = 1;
+ this.__filtered__ = false;
+ this.__iteratees__ = [];
+ this.__takeCount__ = MAX_ARRAY_LENGTH;
+ this.__views__ = [];
+ }
+
+ /**
+ * Creates a clone of the lazy wrapper object.
+ *
+ * @private
+ * @name clone
+ * @memberOf LazyWrapper
+ * @returns {Object} Returns the cloned `LazyWrapper` object.
+ */
+ function lazyClone() {
+ var result = new LazyWrapper(this.__wrapped__);
+ result.__actions__ = copyArray(this.__actions__);
+ result.__dir__ = this.__dir__;
+ result.__filtered__ = this.__filtered__;
+ result.__iteratees__ = copyArray(this.__iteratees__);
+ result.__takeCount__ = this.__takeCount__;
+ result.__views__ = copyArray(this.__views__);
+ return result;
+ }
+
+ /**
+ * Reverses the direction of lazy iteration.
+ *
+ * @private
+ * @name reverse
+ * @memberOf LazyWrapper
+ * @returns {Object} Returns the new reversed `LazyWrapper` object.
+ */
+ function lazyReverse() {
+ if (this.__filtered__) {
+ var result = new LazyWrapper(this);
+ result.__dir__ = -1;
+ result.__filtered__ = true;
+ } else {
+ result = this.clone();
+ result.__dir__ *= -1;
+ }
+ return result;
+ }
+
+ /**
+ * Extracts the unwrapped value from its lazy wrapper.
+ *
+ * @private
+ * @name value
+ * @memberOf LazyWrapper
+ * @returns {*} Returns the unwrapped value.
+ */
+ function lazyValue() {
+ var array = this.__wrapped__.value(),
+ dir = this.__dir__,
+ isArr = isArray(array),
+ isRight = dir < 0,
+ arrLength = isArr ? array.length : 0,
+ view = getView(0, arrLength, this.__views__),
+ start = view.start,
+ end = view.end,
+ length = end - start,
+ index = isRight ? end : (start - 1),
+ iteratees = this.__iteratees__,
+ iterLength = iteratees.length,
+ resIndex = 0,
+ takeCount = nativeMin(length, this.__takeCount__);
+
+ if (!isArr || (!isRight && arrLength == length && takeCount == length)) {
+ return baseWrapperValue(array, this.__actions__);
+ }
+ var result = [];
+
+ outer:
+ while (length-- && resIndex < takeCount) {
+ index += dir;
+
+ var iterIndex = -1,
+ value = array[index];
+
+ while (++iterIndex < iterLength) {
+ var data = iteratees[iterIndex],
+ iteratee = data.iteratee,
+ type = data.type,
+ computed = iteratee(value);
+
+ if (type == LAZY_MAP_FLAG) {
+ value = computed;
+ } else if (!computed) {
+ if (type == LAZY_FILTER_FLAG) {
+ continue outer;
+ } else {
+ break outer;
+ }
+ }
+ }
+ result[resIndex++] = value;
+ }
+ return result;
+ }
+
+ // Ensure `LazyWrapper` is an instance of `baseLodash`.
+ LazyWrapper.prototype = baseCreate(baseLodash.prototype);
+ LazyWrapper.prototype.constructor = LazyWrapper;
+
+ /*------------------------------------------------------------------------*/
+
+ /**
+ * Creates a hash object.
+ *
+ * @private
+ * @constructor
+ * @param {Array} [entries] The key-value pairs to cache.
+ */
+ function Hash(entries) {
+ var index = -1,
+ length = entries == null ? 0 : entries.length;
+
+ this.clear();
+ while (++index < length) {
+ var entry = entries[index];
+ this.set(entry[0], entry[1]);
+ }
+ }
+
+ /**
+ * Removes all key-value entries from the hash.
+ *
+ * @private
+ * @name clear
+ * @memberOf Hash
+ */
+ function hashClear() {
+ this.__data__ = nativeCreate ? nativeCreate(null) : {};
+ this.size = 0;
+ }
+
+ /**
+ * Removes `key` and its value from the hash.
+ *
+ * @private
+ * @name delete
+ * @memberOf Hash
+ * @param {Object} hash The hash to modify.
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+ function hashDelete(key) {
+ var result = this.has(key) && delete this.__data__[key];
+ this.size -= result ? 1 : 0;
+ return result;
+ }
+
+ /**
+ * Gets the hash value for `key`.
+ *
+ * @private
+ * @name get
+ * @memberOf Hash
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+ function hashGet(key) {
+ var data = this.__data__;
+ if (nativeCreate) {
+ var result = data[key];
+ return result === HASH_UNDEFINED ? undefined : result;
+ }
+ return hasOwnProperty.call(data, key) ? data[key] : undefined;
+ }
+
+ /**
+ * Checks if a hash value for `key` exists.
+ *
+ * @private
+ * @name has
+ * @memberOf Hash
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+ function hashHas(key) {
+ var data = this.__data__;
+ return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);
+ }
+
+ /**
+ * Sets the hash `key` to `value`.
+ *
+ * @private
+ * @name set
+ * @memberOf Hash
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ * @returns {Object} Returns the hash instance.
+ */
+ function hashSet(key, value) {
+ var data = this.__data__;
+ this.size += this.has(key) ? 0 : 1;
+ data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;
+ return this;
+ }
+
+ // Add methods to `Hash`.
+ Hash.prototype.clear = hashClear;
+ Hash.prototype['delete'] = hashDelete;
+ Hash.prototype.get = hashGet;
+ Hash.prototype.has = hashHas;
+ Hash.prototype.set = hashSet;
+
+ /*------------------------------------------------------------------------*/
+
+ /**
+ * Creates an list cache object.
+ *
+ * @private
+ * @constructor
+ * @param {Array} [entries] The key-value pairs to cache.
+ */
+ function ListCache(entries) {
+ var index = -1,
+ length = entries == null ? 0 : entries.length;
+
+ this.clear();
+ while (++index < length) {
+ var entry = entries[index];
+ this.set(entry[0], entry[1]);
+ }
+ }
+
+ /**
+ * Removes all key-value entries from the list cache.
+ *
+ * @private
+ * @name clear
+ * @memberOf ListCache
+ */
+ function listCacheClear() {
+ this.__data__ = [];
+ this.size = 0;
+ }
+
+ /**
+ * Removes `key` and its value from the list cache.
+ *
+ * @private
+ * @name delete
+ * @memberOf ListCache
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+ function listCacheDelete(key) {
+ var data = this.__data__,
+ index = assocIndexOf(data, key);
+
+ if (index < 0) {
+ return false;
+ }
+ var lastIndex = data.length - 1;
+ if (index == lastIndex) {
+ data.pop();
+ } else {
+ splice.call(data, index, 1);
+ }
+ --this.size;
+ return true;
+ }
+
+ /**
+ * Gets the list cache value for `key`.
+ *
+ * @private
+ * @name get
+ * @memberOf ListCache
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+ function listCacheGet(key) {
+ var data = this.__data__,
+ index = assocIndexOf(data, key);
+
+ return index < 0 ? undefined : data[index][1];
+ }
+
+ /**
+ * Checks if a list cache value for `key` exists.
+ *
+ * @private
+ * @name has
+ * @memberOf ListCache
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+ function listCacheHas(key) {
+ return assocIndexOf(this.__data__, key) > -1;
+ }
+
+ /**
+ * Sets the list cache `key` to `value`.
+ *
+ * @private
+ * @name set
+ * @memberOf ListCache
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ * @returns {Object} Returns the list cache instance.
+ */
+ function listCacheSet(key, value) {
+ var data = this.__data__,
+ index = assocIndexOf(data, key);
+
+ if (index < 0) {
+ ++this.size;
+ data.push([key, value]);
+ } else {
+ data[index][1] = value;
+ }
+ return this;
+ }
+
+ // Add methods to `ListCache`.
+ ListCache.prototype.clear = listCacheClear;
+ ListCache.prototype['delete'] = listCacheDelete;
+ ListCache.prototype.get = listCacheGet;
+ ListCache.prototype.has = listCacheHas;
+ ListCache.prototype.set = listCacheSet;
+
+ /*------------------------------------------------------------------------*/
+
+ /**
+ * Creates a map cache object to store key-value pairs.
+ *
+ * @private
+ * @constructor
+ * @param {Array} [entries] The key-value pairs to cache.
+ */
+ function MapCache(entries) {
+ var index = -1,
+ length = entries == null ? 0 : entries.length;
+
+ this.clear();
+ while (++index < length) {
+ var entry = entries[index];
+ this.set(entry[0], entry[1]);
+ }
+ }
+
+ /**
+ * Removes all key-value entries from the map.
+ *
+ * @private
+ * @name clear
+ * @memberOf MapCache
+ */
+ function mapCacheClear() {
+ this.size = 0;
+ this.__data__ = {
+ 'hash': new Hash,
+ 'map': new (Map || ListCache),
+ 'string': new Hash
+ };
+ }
+
+ /**
+ * Removes `key` and its value from the map.
+ *
+ * @private
+ * @name delete
+ * @memberOf MapCache
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+ function mapCacheDelete(key) {
+ var result = getMapData(this, key)['delete'](key);
+ this.size -= result ? 1 : 0;
+ return result;
+ }
+
+ /**
+ * Gets the map value for `key`.
+ *
+ * @private
+ * @name get
+ * @memberOf MapCache
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+ function mapCacheGet(key) {
+ return getMapData(this, key).get(key);
+ }
+
+ /**
+ * Checks if a map value for `key` exists.
+ *
+ * @private
+ * @name has
+ * @memberOf MapCache
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+ function mapCacheHas(key) {
+ return getMapData(this, key).has(key);
+ }
+
+ /**
+ * Sets the map `key` to `value`.
+ *
+ * @private
+ * @name set
+ * @memberOf MapCache
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ * @returns {Object} Returns the map cache instance.
+ */
+ function mapCacheSet(key, value) {
+ var data = getMapData(this, key),
+ size = data.size;
+
+ data.set(key, value);
+ this.size += data.size == size ? 0 : 1;
+ return this;
+ }
+
+ // Add methods to `MapCache`.
+ MapCache.prototype.clear = mapCacheClear;
+ MapCache.prototype['delete'] = mapCacheDelete;
+ MapCache.prototype.get = mapCacheGet;
+ MapCache.prototype.has = mapCacheHas;
+ MapCache.prototype.set = mapCacheSet;
+
+ /*------------------------------------------------------------------------*/
+
+ /**
+ *
+ * Creates an array cache object to store unique values.
+ *
+ * @private
+ * @constructor
+ * @param {Array} [values] The values to cache.
+ */
+ function SetCache(values) {
+ var index = -1,
+ length = values == null ? 0 : values.length;
+
+ this.__data__ = new MapCache;
+ while (++index < length) {
+ this.add(values[index]);
+ }
+ }
+
+ /**
+ * Adds `value` to the array cache.
+ *
+ * @private
+ * @name add
+ * @memberOf SetCache
+ * @alias push
+ * @param {*} value The value to cache.
+ * @returns {Object} Returns the cache instance.
+ */
+ function setCacheAdd(value) {
+ this.__data__.set(value, HASH_UNDEFINED);
+ return this;
+ }
+
+ /**
+ * Checks if `value` is in the array cache.
+ *
+ * @private
+ * @name has
+ * @memberOf SetCache
+ * @param {*} value The value to search for.
+ * @returns {number} Returns `true` if `value` is found, else `false`.
+ */
+ function setCacheHas(value) {
+ return this.__data__.has(value);
+ }
+
+ // Add methods to `SetCache`.
+ SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;
+ SetCache.prototype.has = setCacheHas;
+
+ /*------------------------------------------------------------------------*/
+
+ /**
+ * Creates a stack cache object to store key-value pairs.
+ *
+ * @private
+ * @constructor
+ * @param {Array} [entries] The key-value pairs to cache.
+ */
+ function Stack(entries) {
+ var data = this.__data__ = new ListCache(entries);
+ this.size = data.size;
+ }
+
+ /**
+ * Removes all key-value entries from the stack.
+ *
+ * @private
+ * @name clear
+ * @memberOf Stack
+ */
+ function stackClear() {
+ this.__data__ = new ListCache;
+ this.size = 0;
+ }
+
+ /**
+ * Removes `key` and its value from the stack.
+ *
+ * @private
+ * @name delete
+ * @memberOf Stack
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+ function stackDelete(key) {
+ var data = this.__data__,
+ result = data['delete'](key);
+
+ this.size = data.size;
+ return result;
+ }
+
+ /**
+ * Gets the stack value for `key`.
+ *
+ * @private
+ * @name get
+ * @memberOf Stack
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+ function stackGet(key) {
+ return this.__data__.get(key);
+ }
+
+ /**
+ * Checks if a stack value for `key` exists.
+ *
+ * @private
+ * @name has
+ * @memberOf Stack
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+ function stackHas(key) {
+ return this.__data__.has(key);
+ }
+
+ /**
+ * Sets the stack `key` to `value`.
+ *
+ * @private
+ * @name set
+ * @memberOf Stack
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ * @returns {Object} Returns the stack cache instance.
+ */
+ function stackSet(key, value) {
+ var data = this.__data__;
+ if (data instanceof ListCache) {
+ var pairs = data.__data__;
+ if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {
+ pairs.push([key, value]);
+ this.size = ++data.size;
+ return this;
+ }
+ data = this.__data__ = new MapCache(pairs);
+ }
+ data.set(key, value);
+ this.size = data.size;
+ return this;
+ }
+
+ // Add methods to `Stack`.
+ Stack.prototype.clear = stackClear;
+ Stack.prototype['delete'] = stackDelete;
+ Stack.prototype.get = stackGet;
+ Stack.prototype.has = stackHas;
+ Stack.prototype.set = stackSet;
+
+ /*------------------------------------------------------------------------*/
+
+ /**
+ * Creates an array of the enumerable property names of the array-like `value`.
+ *
+ * @private
+ * @param {*} value The value to query.
+ * @param {boolean} inherited Specify returning inherited property names.
+ * @returns {Array} Returns the array of property names.
+ */
+ function arrayLikeKeys(value, inherited) {
+ var isArr = isArray(value),
+ isArg = !isArr && isArguments(value),
+ isBuff = !isArr && !isArg && isBuffer(value),
+ isType = !isArr && !isArg && !isBuff && isTypedArray(value),
+ skipIndexes = isArr || isArg || isBuff || isType,
+ result = skipIndexes ? baseTimes(value.length, String) : [],
+ length = result.length;
+
+ for (var key in value) {
+ if ((inherited || hasOwnProperty.call(value, key)) &&
+ !(skipIndexes && (
+ // Safari 9 has enumerable `arguments.length` in strict mode.
+ key == 'length' ||
+ // Node.js 0.10 has enumerable non-index properties on buffers.
+ (isBuff && (key == 'offset' || key == 'parent')) ||
+ // PhantomJS 2 has enumerable non-index properties on typed arrays.
+ (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||
+ // Skip index properties.
+ isIndex(key, length)
+ ))) {
+ result.push(key);
+ }
+ }
+ return result;
+ }
+
+ /**
+ * A specialized version of `_.sample` for arrays.
+ *
+ * @private
+ * @param {Array} array The array to sample.
+ * @returns {*} Returns the random element.
+ */
+ function arraySample(array) {
+ var length = array.length;
+ return length ? array[baseRandom(0, length - 1)] : undefined;
+ }
+
+ /**
+ * A specialized version of `_.sampleSize` for arrays.
+ *
+ * @private
+ * @param {Array} array The array to sample.
+ * @param {number} n The number of elements to sample.
+ * @returns {Array} Returns the random elements.
+ */
+ function arraySampleSize(array, n) {
+ return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));
+ }
+
+ /**
+ * A specialized version of `_.shuffle` for arrays.
+ *
+ * @private
+ * @param {Array} array The array to shuffle.
+ * @returns {Array} Returns the new shuffled array.
+ */
+ function arrayShuffle(array) {
+ return shuffleSelf(copyArray(array));
+ }
+
+ /**
+ * This function is like `assignValue` except that it doesn't assign
+ * `undefined` values.
+ *
+ * @private
+ * @param {Object} object The object to modify.
+ * @param {string} key The key of the property to assign.
+ * @param {*} value The value to assign.
+ */
+ function assignMergeValue(object, key, value) {
+ if ((value !== undefined && !eq(object[key], value)) ||
+ (value === undefined && !(key in object))) {
+ baseAssignValue(object, key, value);
+ }
+ }
+
+ /**
+ * Assigns `value` to `key` of `object` if the existing value is not equivalent
+ * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
+ * for equality comparisons.
+ *
+ * @private
+ * @param {Object} object The object to modify.
+ * @param {string} key The key of the property to assign.
+ * @param {*} value The value to assign.
+ */
+ function assignValue(object, key, value) {
+ var objValue = object[key];
+ if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||
+ (value === undefined && !(key in object))) {
+ baseAssignValue(object, key, value);
+ }
+ }
+
+ /**
+ * Gets the index at which the `key` is found in `array` of key-value pairs.
+ *
+ * @private
+ * @param {Array} array The array to inspect.
+ * @param {*} key The key to search for.
+ * @returns {number} Returns the index of the matched value, else `-1`.
+ */
+ function assocIndexOf(array, key) {
+ var length = array.length;
+ while (length--) {
+ if (eq(array[length][0], key)) {
+ return length;
+ }
+ }
+ return -1;
+ }
+
+ /**
+ * Aggregates elements of `collection` on `accumulator` with keys transformed
+ * by `iteratee` and values set by `setter`.
+ *
+ * @private
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function} setter The function to set `accumulator` values.
+ * @param {Function} iteratee The iteratee to transform keys.
+ * @param {Object} accumulator The initial aggregated object.
+ * @returns {Function} Returns `accumulator`.
+ */
+ function baseAggregator(collection, setter, iteratee, accumulator) {
+ baseEach(collection, function(value, key, collection) {
+ setter(accumulator, value, iteratee(value), collection);
+ });
+ return accumulator;
+ }
+
+ /**
+ * The base implementation of `_.assign` without support for multiple sources
+ * or `customizer` functions.
+ *
+ * @private
+ * @param {Object} object The destination object.
+ * @param {Object} source The source object.
+ * @returns {Object} Returns `object`.
+ */
+ function baseAssign(object, source) {
+ return object && copyObject(source, keys(source), object);
+ }
+
+ /**
+ * The base implementation of `_.assignIn` without support for multiple sources
+ * or `customizer` functions.
+ *
+ * @private
+ * @param {Object} object The destination object.
+ * @param {Object} source The source object.
+ * @returns {Object} Returns `object`.
+ */
+ function baseAssignIn(object, source) {
+ return object && copyObject(source, keysIn(source), object);
+ }
+
+ /**
+ * The base implementation of `assignValue` and `assignMergeValue` without
+ * value checks.
+ *
+ * @private
+ * @param {Object} object The object to modify.
+ * @param {string} key The key of the property to assign.
+ * @param {*} value The value to assign.
+ */
+ function baseAssignValue(object, key, value) {
+ if (key == '__proto__' && defineProperty) {
+ defineProperty(object, key, {
+ 'configurable': true,
+ 'enumerable': true,
+ 'value': value,
+ 'writable': true
+ });
+ } else {
+ object[key] = value;
+ }
+ }
+
+ /**
+ * The base implementation of `_.at` without support for individual paths.
+ *
+ * @private
+ * @param {Object} object The object to iterate over.
+ * @param {string[]} paths The property paths to pick.
+ * @returns {Array} Returns the picked elements.
+ */
+ function baseAt(object, paths) {
+ var index = -1,
+ length = paths.length,
+ result = Array(length),
+ skip = object == null;
+
+ while (++index < length) {
+ result[index] = skip ? undefined : get(object, paths[index]);
+ }
+ return result;
+ }
+
+ /**
+ * The base implementation of `_.clamp` which doesn't coerce arguments.
+ *
+ * @private
+ * @param {number} number The number to clamp.
+ * @param {number} [lower] The lower bound.
+ * @param {number} upper The upper bound.
+ * @returns {number} Returns the clamped number.
+ */
+ function baseClamp(number, lower, upper) {
+ if (number === number) {
+ if (upper !== undefined) {
+ number = number <= upper ? number : upper;
+ }
+ if (lower !== undefined) {
+ number = number >= lower ? number : lower;
+ }
+ }
+ return number;
+ }
+
+ /**
+ * The base implementation of `_.clone` and `_.cloneDeep` which tracks
+ * traversed objects.
+ *
+ * @private
+ * @param {*} value The value to clone.
+ * @param {boolean} bitmask The bitmask flags.
+ * 1 - Deep clone
+ * 2 - Flatten inherited properties
+ * 4 - Clone symbols
+ * @param {Function} [customizer] The function to customize cloning.
+ * @param {string} [key] The key of `value`.
+ * @param {Object} [object] The parent object of `value`.
+ * @param {Object} [stack] Tracks traversed objects and their clone counterparts.
+ * @returns {*} Returns the cloned value.
+ */
+ function baseClone(value, bitmask, customizer, key, object, stack) {
+ var result,
+ isDeep = bitmask & CLONE_DEEP_FLAG,
+ isFlat = bitmask & CLONE_FLAT_FLAG,
+ isFull = bitmask & CLONE_SYMBOLS_FLAG;
+
+ if (customizer) {
+ result = object ? customizer(value, key, object, stack) : customizer(value);
+ }
+ if (result !== undefined) {
+ return result;
+ }
+ if (!isObject(value)) {
+ return value;
+ }
+ var isArr = isArray(value);
+ if (isArr) {
+ result = initCloneArray(value);
+ if (!isDeep) {
+ return copyArray(value, result);
+ }
+ } else {
+ var tag = getTag(value),
+ isFunc = tag == funcTag || tag == genTag;
+
+ if (isBuffer(value)) {
+ return cloneBuffer(value, isDeep);
+ }
+ if (tag == objectTag || tag == argsTag || (isFunc && !object)) {
+ result = (isFlat || isFunc) ? {} : initCloneObject(value);
+ if (!isDeep) {
+ return isFlat
+ ? copySymbolsIn(value, baseAssignIn(result, value))
+ : copySymbols(value, baseAssign(result, value));
+ }
+ } else {
+ if (!cloneableTags[tag]) {
+ return object ? value : {};
+ }
+ result = initCloneByTag(value, tag, isDeep);
+ }
+ }
+ // Check for circular references and return its corresponding clone.
+ stack || (stack = new Stack);
+ var stacked = stack.get(value);
+ if (stacked) {
+ return stacked;
+ }
+ stack.set(value, result);
+
+ if (isSet(value)) {
+ value.forEach(function(subValue) {
+ result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));
+ });
+
+ return result;
+ }
+
+ if (isMap(value)) {
+ value.forEach(function(subValue, key) {
+ result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));
+ });
+
+ return result;
+ }
+
+ var keysFunc = isFull
+ ? (isFlat ? getAllKeysIn : getAllKeys)
+ : (isFlat ? keysIn : keys);
+
+ var props = isArr ? undefined : keysFunc(value);
+ arrayEach(props || value, function(subValue, key) {
+ if (props) {
+ key = subValue;
+ subValue = value[key];
+ }
+ // Recursively populate clone (susceptible to call stack limits).
+ assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));
+ });
+ return result;
+ }
+
+ /**
+ * The base implementation of `_.conforms` which doesn't clone `source`.
+ *
+ * @private
+ * @param {Object} source The object of property predicates to conform to.
+ * @returns {Function} Returns the new spec function.
+ */
+ function baseConforms(source) {
+ var props = keys(source);
+ return function(object) {
+ return baseConformsTo(object, source, props);
+ };
+ }
+
+ /**
+ * The base implementation of `_.conformsTo` which accepts `props` to check.
+ *
+ * @private
+ * @param {Object} object The object to inspect.
+ * @param {Object} source The object of property predicates to conform to.
+ * @returns {boolean} Returns `true` if `object` conforms, else `false`.
+ */
+ function baseConformsTo(object, source, props) {
+ var length = props.length;
+ if (object == null) {
+ return !length;
+ }
+ object = Object(object);
+ while (length--) {
+ var key = props[length],
+ predicate = source[key],
+ value = object[key];
+
+ if ((value === undefined && !(key in object)) || !predicate(value)) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * The base implementation of `_.delay` and `_.defer` which accepts `args`
+ * to provide to `func`.
+ *
+ * @private
+ * @param {Function} func The function to delay.
+ * @param {number} wait The number of milliseconds to delay invocation.
+ * @param {Array} args The arguments to provide to `func`.
+ * @returns {number|Object} Returns the timer id or timeout object.
+ */
+ function baseDelay(func, wait, args) {
+ if (typeof func != 'function') {
+ throw new TypeError(FUNC_ERROR_TEXT);
+ }
+ return setTimeout(function() { func.apply(undefined, args); }, wait);
+ }
+
+ /**
+ * The base implementation of methods like `_.difference` without support
+ * for excluding multiple arrays or iteratee shorthands.
+ *
+ * @private
+ * @param {Array} array The array to inspect.
+ * @param {Array} values The values to exclude.
+ * @param {Function} [iteratee] The iteratee invoked per element.
+ * @param {Function} [comparator] The comparator invoked per element.
+ * @returns {Array} Returns the new array of filtered values.
+ */
+ function baseDifference(array, values, iteratee, comparator) {
+ var index = -1,
+ includes = arrayIncludes,
+ isCommon = true,
+ length = array.length,
+ result = [],
+ valuesLength = values.length;
+
+ if (!length) {
+ return result;
+ }
+ if (iteratee) {
+ values = arrayMap(values, baseUnary(iteratee));
+ }
+ if (comparator) {
+ includes = arrayIncludesWith;
+ isCommon = false;
+ }
+ else if (values.length >= LARGE_ARRAY_SIZE) {
+ includes = cacheHas;
+ isCommon = false;
+ values = new SetCache(values);
+ }
+ outer:
+ while (++index < length) {
+ var value = array[index],
+ computed = iteratee == null ? value : iteratee(value);
+
+ value = (comparator || value !== 0) ? value : 0;
+ if (isCommon && computed === computed) {
+ var valuesIndex = valuesLength;
+ while (valuesIndex--) {
+ if (values[valuesIndex] === computed) {
+ continue outer;
+ }
+ }
+ result.push(value);
+ }
+ else if (!includes(values, computed, comparator)) {
+ result.push(value);
+ }
+ }
+ return result;
+ }
+
+ /**
+ * The base implementation of `_.forEach` without support for iteratee shorthands.
+ *
+ * @private
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Array|Object} Returns `collection`.
+ */
+ var baseEach = createBaseEach(baseForOwn);
+
+ /**
+ * The base implementation of `_.forEachRight` without support for iteratee shorthands.
+ *
+ * @private
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Array|Object} Returns `collection`.
+ */
+ var baseEachRight = createBaseEach(baseForOwnRight, true);
+
+ /**
+ * The base implementation of `_.every` without support for iteratee shorthands.
+ *
+ * @private
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function} predicate The function invoked per iteration.
+ * @returns {boolean} Returns `true` if all elements pass the predicate check,
+ * else `false`
+ */
+ function baseEvery(collection, predicate) {
+ var result = true;
+ baseEach(collection, function(value, index, collection) {
+ result = !!predicate(value, index, collection);
+ return result;
+ });
+ return result;
+ }
+
+ /**
+ * The base implementation of methods like `_.max` and `_.min` which accepts a
+ * `comparator` to determine the extremum value.
+ *
+ * @private
+ * @param {Array} array The array to iterate over.
+ * @param {Function} iteratee The iteratee invoked per iteration.
+ * @param {Function} comparator The comparator used to compare values.
+ * @returns {*} Returns the extremum value.
+ */
+ function baseExtremum(array, iteratee, comparator) {
+ var index = -1,
+ length = array.length;
+
+ while (++index < length) {
+ var value = array[index],
+ current = iteratee(value);
+
+ if (current != null && (computed === undefined
+ ? (current === current && !isSymbol(current))
+ : comparator(current, computed)
+ )) {
+ var computed = current,
+ result = value;
+ }
+ }
+ return result;
+ }
+
+ /**
+ * The base implementation of `_.fill` without an iteratee call guard.
+ *
+ * @private
+ * @param {Array} array The array to fill.
+ * @param {*} value The value to fill `array` with.
+ * @param {number} [start=0] The start position.
+ * @param {number} [end=array.length] The end position.
+ * @returns {Array} Returns `array`.
+ */
+ function baseFill(array, value, start, end) {
+ var length = array.length;
+
+ start = toInteger(start);
+ if (start < 0) {
+ start = -start > length ? 0 : (length + start);
+ }
+ end = (end === undefined || end > length) ? length : toInteger(end);
+ if (end < 0) {
+ end += length;
+ }
+ end = start > end ? 0 : toLength(end);
+ while (start < end) {
+ array[start++] = value;
+ }
+ return array;
+ }
+
+ /**
+ * The base implementation of `_.filter` without support for iteratee shorthands.
+ *
+ * @private
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function} predicate The function invoked per iteration.
+ * @returns {Array} Returns the new filtered array.
+ */
+ function baseFilter(collection, predicate) {
+ var result = [];
+ baseEach(collection, function(value, index, collection) {
+ if (predicate(value, index, collection)) {
+ result.push(value);
+ }
+ });
+ return result;
+ }
+
+ /**
+ * The base implementation of `_.flatten` with support for restricting flattening.
+ *
+ * @private
+ * @param {Array} array The array to flatten.
+ * @param {number} depth The maximum recursion depth.
+ * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.
+ * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.
+ * @param {Array} [result=[]] The initial result value.
+ * @returns {Array} Returns the new flattened array.
+ */
+ function baseFlatten(array, depth, predicate, isStrict, result) {
+ var index = -1,
+ length = array.length;
+
+ predicate || (predicate = isFlattenable);
+ result || (result = []);
+
+ while (++index < length) {
+ var value = array[index];
+ if (depth > 0 && predicate(value)) {
+ if (depth > 1) {
+ // Recursively flatten arrays (susceptible to call stack limits).
+ baseFlatten(value, depth - 1, predicate, isStrict, result);
+ } else {
+ arrayPush(result, value);
+ }
+ } else if (!isStrict) {
+ result[result.length] = value;
+ }
+ }
+ return result;
+ }
+
+ /**
+ * The base implementation of `baseForOwn` which iterates over `object`
+ * properties returned by `keysFunc` and invokes `iteratee` for each property.
+ * Iteratee functions may exit iteration early by explicitly returning `false`.
+ *
+ * @private
+ * @param {Object} object The object to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @param {Function} keysFunc The function to get the keys of `object`.
+ * @returns {Object} Returns `object`.
+ */
+ var baseFor = createBaseFor();
+
+ /**
+ * This function is like `baseFor` except that it iterates over properties
+ * in the opposite order.
+ *
+ * @private
+ * @param {Object} object The object to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @param {Function} keysFunc The function to get the keys of `object`.
+ * @returns {Object} Returns `object`.
+ */
+ var baseForRight = createBaseFor(true);
+
+ /**
+ * The base implementation of `_.forOwn` without support for iteratee shorthands.
+ *
+ * @private
+ * @param {Object} object The object to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Object} Returns `object`.
+ */
+ function baseForOwn(object, iteratee) {
+ return object && baseFor(object, iteratee, keys);
+ }
+
+ /**
+ * The base implementation of `_.forOwnRight` without support for iteratee shorthands.
+ *
+ * @private
+ * @param {Object} object The object to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Object} Returns `object`.
+ */
+ function baseForOwnRight(object, iteratee) {
+ return object && baseForRight(object, iteratee, keys);
+ }
+
+ /**
+ * The base implementation of `_.functions` which creates an array of
+ * `object` function property names filtered from `props`.
+ *
+ * @private
+ * @param {Object} object The object to inspect.
+ * @param {Array} props The property names to filter.
+ * @returns {Array} Returns the function names.
+ */
+ function baseFunctions(object, props) {
+ return arrayFilter(props, function(key) {
+ return isFunction(object[key]);
+ });
+ }
+
+ /**
+ * The base implementation of `_.get` without support for default values.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {Array|string} path The path of the property to get.
+ * @returns {*} Returns the resolved value.
+ */
+ function baseGet(object, path) {
+ path = castPath(path, object);
+
+ var index = 0,
+ length = path.length;
+
+ while (object != null && index < length) {
+ object = object[toKey(path[index++])];
+ }
+ return (index && index == length) ? object : undefined;
+ }
+
+ /**
+ * The base implementation of `getAllKeys` and `getAllKeysIn` which uses
+ * `keysFunc` and `symbolsFunc` to get the enumerable property names and
+ * symbols of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {Function} keysFunc The function to get the keys of `object`.
+ * @param {Function} symbolsFunc The function to get the symbols of `object`.
+ * @returns {Array} Returns the array of property names and symbols.
+ */
+ function baseGetAllKeys(object, keysFunc, symbolsFunc) {
+ var result = keysFunc(object);
+ return isArray(object) ? result : arrayPush(result, symbolsFunc(object));
+ }
+
+ /**
+ * The base implementation of `getTag` without fallbacks for buggy environments.
+ *
+ * @private
+ * @param {*} value The value to query.
+ * @returns {string} Returns the `toStringTag`.
+ */
+ function baseGetTag(value) {
+ if (value == null) {
+ return value === undefined ? undefinedTag : nullTag;
+ }
+ return (symToStringTag && symToStringTag in Object(value))
+ ? getRawTag(value)
+ : objectToString(value);
+ }
+
+ /**
+ * The base implementation of `_.gt` which doesn't coerce arguments.
+ *
+ * @private
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @returns {boolean} Returns `true` if `value` is greater than `other`,
+ * else `false`.
+ */
+ function baseGt(value, other) {
+ return value > other;
+ }
+
+ /**
+ * The base implementation of `_.has` without support for deep paths.
+ *
+ * @private
+ * @param {Object} [object] The object to query.
+ * @param {Array|string} key The key to check.
+ * @returns {boolean} Returns `true` if `key` exists, else `false`.
+ */
+ function baseHas(object, key) {
+ return object != null && hasOwnProperty.call(object, key);
+ }
+
+ /**
+ * The base implementation of `_.hasIn` without support for deep paths.
+ *
+ * @private
+ * @param {Object} [object] The object to query.
+ * @param {Array|string} key The key to check.
+ * @returns {boolean} Returns `true` if `key` exists, else `false`.
+ */
+ function baseHasIn(object, key) {
+ return object != null && key in Object(object);
+ }
+
+ /**
+ * The base implementation of `_.inRange` which doesn't coerce arguments.
+ *
+ * @private
+ * @param {number} number The number to check.
+ * @param {number} start The start of the range.
+ * @param {number} end The end of the range.
+ * @returns {boolean} Returns `true` if `number` is in the range, else `false`.
+ */
+ function baseInRange(number, start, end) {
+ return number >= nativeMin(start, end) && number < nativeMax(start, end);
+ }
+
+ /**
+ * The base implementation of methods like `_.intersection`, without support
+ * for iteratee shorthands, that accepts an array of arrays to inspect.
+ *
+ * @private
+ * @param {Array} arrays The arrays to inspect.
+ * @param {Function} [iteratee] The iteratee invoked per element.
+ * @param {Function} [comparator] The comparator invoked per element.
+ * @returns {Array} Returns the new array of shared values.
+ */
+ function baseIntersection(arrays, iteratee, comparator) {
+ var includes = comparator ? arrayIncludesWith : arrayIncludes,
+ length = arrays[0].length,
+ othLength = arrays.length,
+ othIndex = othLength,
+ caches = Array(othLength),
+ maxLength = Infinity,
+ result = [];
+
+ while (othIndex--) {
+ var array = arrays[othIndex];
+ if (othIndex && iteratee) {
+ array = arrayMap(array, baseUnary(iteratee));
+ }
+ maxLength = nativeMin(array.length, maxLength);
+ caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))
+ ? new SetCache(othIndex && array)
+ : undefined;
+ }
+ array = arrays[0];
+
+ var index = -1,
+ seen = caches[0];
+
+ outer:
+ while (++index < length && result.length < maxLength) {
+ var value = array[index],
+ computed = iteratee ? iteratee(value) : value;
+
+ value = (comparator || value !== 0) ? value : 0;
+ if (!(seen
+ ? cacheHas(seen, computed)
+ : includes(result, computed, comparator)
+ )) {
+ othIndex = othLength;
+ while (--othIndex) {
+ var cache = caches[othIndex];
+ if (!(cache
+ ? cacheHas(cache, computed)
+ : includes(arrays[othIndex], computed, comparator))
+ ) {
+ continue outer;
+ }
+ }
+ if (seen) {
+ seen.push(computed);
+ }
+ result.push(value);
+ }
+ }
+ return result;
+ }
+
+ /**
+ * The base implementation of `_.invert` and `_.invertBy` which inverts
+ * `object` with values transformed by `iteratee` and set by `setter`.
+ *
+ * @private
+ * @param {Object} object The object to iterate over.
+ * @param {Function} setter The function to set `accumulator` values.
+ * @param {Function} iteratee The iteratee to transform values.
+ * @param {Object} accumulator The initial inverted object.
+ * @returns {Function} Returns `accumulator`.
+ */
+ function baseInverter(object, setter, iteratee, accumulator) {
+ baseForOwn(object, function(value, key, object) {
+ setter(accumulator, iteratee(value), key, object);
+ });
+ return accumulator;
+ }
+
+ /**
+ * The base implementation of `_.invoke` without support for individual
+ * method arguments.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {Array|string} path The path of the method to invoke.
+ * @param {Array} args The arguments to invoke the method with.
+ * @returns {*} Returns the result of the invoked method.
+ */
+ function baseInvoke(object, path, args) {
+ path = castPath(path, object);
+ object = parent(object, path);
+ var func = object == null ? object : object[toKey(last(path))];
+ return func == null ? undefined : apply(func, object, args);
+ }
+
+ /**
+ * The base implementation of `_.isArguments`.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an `arguments` object,
+ */
+ function baseIsArguments(value) {
+ return isObjectLike(value) && baseGetTag(value) == argsTag;
+ }
+
+ /**
+ * The base implementation of `_.isArrayBuffer` without Node.js optimizations.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.
+ */
+ function baseIsArrayBuffer(value) {
+ return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;
+ }
+
+ /**
+ * The base implementation of `_.isDate` without Node.js optimizations.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a date object, else `false`.
+ */
+ function baseIsDate(value) {
+ return isObjectLike(value) && baseGetTag(value) == dateTag;
+ }
+
+ /**
+ * The base implementation of `_.isEqual` which supports partial comparisons
+ * and tracks traversed objects.
+ *
+ * @private
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @param {boolean} bitmask The bitmask flags.
+ * 1 - Unordered comparison
+ * 2 - Partial comparison
+ * @param {Function} [customizer] The function to customize comparisons.
+ * @param {Object} [stack] Tracks traversed `value` and `other` objects.
+ * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
+ */
+ function baseIsEqual(value, other, bitmask, customizer, stack) {
+ if (value === other) {
+ return true;
+ }
+ if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {
+ return value !== value && other !== other;
+ }
+ return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);
+ }
+
+ /**
+ * A specialized version of `baseIsEqual` for arrays and objects which performs
+ * deep comparisons and tracks traversed objects enabling objects with circular
+ * references to be compared.
+ *
+ * @private
+ * @param {Object} object The object to compare.
+ * @param {Object} other The other object to compare.
+ * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
+ * @param {Function} customizer The function to customize comparisons.
+ * @param {Function} equalFunc The function to determine equivalents of values.
+ * @param {Object} [stack] Tracks traversed `object` and `other` objects.
+ * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
+ */
+ function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {
+ var objIsArr = isArray(object),
+ othIsArr = isArray(other),
+ objTag = objIsArr ? arrayTag : getTag(object),
+ othTag = othIsArr ? arrayTag : getTag(other);
+
+ objTag = objTag == argsTag ? objectTag : objTag;
+ othTag = othTag == argsTag ? objectTag : othTag;
+
+ var objIsObj = objTag == objectTag,
+ othIsObj = othTag == objectTag,
+ isSameTag = objTag == othTag;
+
+ if (isSameTag && isBuffer(object)) {
+ if (!isBuffer(other)) {
+ return false;
+ }
+ objIsArr = true;
+ objIsObj = false;
+ }
+ if (isSameTag && !objIsObj) {
+ stack || (stack = new Stack);
+ return (objIsArr || isTypedArray(object))
+ ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)
+ : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);
+ }
+ if (!(bitmask & COMPARE_PARTIAL_FLAG)) {
+ var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),
+ othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');
+
+ if (objIsWrapped || othIsWrapped) {
+ var objUnwrapped = objIsWrapped ? object.value() : object,
+ othUnwrapped = othIsWrapped ? other.value() : other;
+
+ stack || (stack = new Stack);
+ return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);
+ }
+ }
+ if (!isSameTag) {
+ return false;
+ }
+ stack || (stack = new Stack);
+ return equalObjects(object, other, bitmask, customizer, equalFunc, stack);
+ }
+
+ /**
+ * The base implementation of `_.isMap` without Node.js optimizations.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a map, else `false`.
+ */
+ function baseIsMap(value) {
+ return isObjectLike(value) && getTag(value) == mapTag;
+ }
+
+ /**
+ * The base implementation of `_.isMatch` without support for iteratee shorthands.
+ *
+ * @private
+ * @param {Object} object The object to inspect.
+ * @param {Object} source The object of property values to match.
+ * @param {Array} matchData The property names, values, and compare flags to match.
+ * @param {Function} [customizer] The function to customize comparisons.
+ * @returns {boolean} Returns `true` if `object` is a match, else `false`.
+ */
+ function baseIsMatch(object, source, matchData, customizer) {
+ var index = matchData.length,
+ length = index,
+ noCustomizer = !customizer;
+
+ if (object == null) {
+ return !length;
+ }
+ object = Object(object);
+ while (index--) {
+ var data = matchData[index];
+ if ((noCustomizer && data[2])
+ ? data[1] !== object[data[0]]
+ : !(data[0] in object)
+ ) {
+ return false;
+ }
+ }
+ while (++index < length) {
+ data = matchData[index];
+ var key = data[0],
+ objValue = object[key],
+ srcValue = data[1];
+
+ if (noCustomizer && data[2]) {
+ if (objValue === undefined && !(key in object)) {
+ return false;
+ }
+ } else {
+ var stack = new Stack;
+ if (customizer) {
+ var result = customizer(objValue, srcValue, key, object, source, stack);
+ }
+ if (!(result === undefined
+ ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)
+ : result
+ )) {
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+
+ /**
+ * The base implementation of `_.isNative` without bad shim checks.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a native function,
+ * else `false`.
+ */
+ function baseIsNative(value) {
+ if (!isObject(value) || isMasked(value)) {
+ return false;
+ }
+ var pattern = isFunction(value) ? reIsNative : reIsHostCtor;
+ return pattern.test(toSource(value));
+ }
+
+ /**
+ * The base implementation of `_.isRegExp` without Node.js optimizations.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.
+ */
+ function baseIsRegExp(value) {
+ return isObjectLike(value) && baseGetTag(value) == regexpTag;
+ }
+
+ /**
+ * The base implementation of `_.isSet` without Node.js optimizations.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a set, else `false`.
+ */
+ function baseIsSet(value) {
+ return isObjectLike(value) && getTag(value) == setTag;
+ }
+
+ /**
+ * The base implementation of `_.isTypedArray` without Node.js optimizations.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
+ */
+ function baseIsTypedArray(value) {
+ return isObjectLike(value) &&
+ isLength(value.length) && !!typedArrayTags[baseGetTag(value)];
+ }
+
+ /**
+ * The base implementation of `_.iteratee`.
+ *
+ * @private
+ * @param {*} [value=_.identity] The value to convert to an iteratee.
+ * @returns {Function} Returns the iteratee.
+ */
+ function baseIteratee(value) {
+ // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.
+ // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.
+ if (typeof value == 'function') {
+ return value;
+ }
+ if (value == null) {
+ return identity;
+ }
+ if (typeof value == 'object') {
+ return isArray(value)
+ ? baseMatchesProperty(value[0], value[1])
+ : baseMatches(value);
+ }
+ return property(value);
+ }
+
+ /**
+ * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property names.
+ */
+ function baseKeys(object) {
+ if (!isPrototype(object)) {
+ return nativeKeys(object);
+ }
+ var result = [];
+ for (var key in Object(object)) {
+ if (hasOwnProperty.call(object, key) && key != 'constructor') {
+ result.push(key);
+ }
+ }
+ return result;
+ }
+
+ /**
+ * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property names.
+ */
+ function baseKeysIn(object) {
+ if (!isObject(object)) {
+ return nativeKeysIn(object);
+ }
+ var isProto = isPrototype(object),
+ result = [];
+
+ for (var key in object) {
+ if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {
+ result.push(key);
+ }
+ }
+ return result;
+ }
+
+ /**
+ * The base implementation of `_.lt` which doesn't coerce arguments.
+ *
+ * @private
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @returns {boolean} Returns `true` if `value` is less than `other`,
+ * else `false`.
+ */
+ function baseLt(value, other) {
+ return value < other;
+ }
+
+ /**
+ * The base implementation of `_.map` without support for iteratee shorthands.
+ *
+ * @private
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Array} Returns the new mapped array.
+ */
+ function baseMap(collection, iteratee) {
+ var index = -1,
+ result = isArrayLike(collection) ? Array(collection.length) : [];
+
+ baseEach(collection, function(value, key, collection) {
+ result[++index] = iteratee(value, key, collection);
+ });
+ return result;
+ }
+
+ /**
+ * The base implementation of `_.matches` which doesn't clone `source`.
+ *
+ * @private
+ * @param {Object} source The object of property values to match.
+ * @returns {Function} Returns the new spec function.
+ */
+ function baseMatches(source) {
+ var matchData = getMatchData(source);
+ if (matchData.length == 1 && matchData[0][2]) {
+ return matchesStrictComparable(matchData[0][0], matchData[0][1]);
+ }
+ return function(object) {
+ return object === source || baseIsMatch(object, source, matchData);
+ };
+ }
+
+ /**
+ * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.
+ *
+ * @private
+ * @param {string} path The path of the property to get.
+ * @param {*} srcValue The value to match.
+ * @returns {Function} Returns the new spec function.
+ */
+ function baseMatchesProperty(path, srcValue) {
+ if (isKey(path) && isStrictComparable(srcValue)) {
+ return matchesStrictComparable(toKey(path), srcValue);
+ }
+ return function(object) {
+ var objValue = get(object, path);
+ return (objValue === undefined && objValue === srcValue)
+ ? hasIn(object, path)
+ : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);
+ };
+ }
+
+ /**
+ * The base implementation of `_.merge` without support for multiple sources.
+ *
+ * @private
+ * @param {Object} object The destination object.
+ * @param {Object} source The source object.
+ * @param {number} srcIndex The index of `source`.
+ * @param {Function} [customizer] The function to customize merged values.
+ * @param {Object} [stack] Tracks traversed source values and their merged
+ * counterparts.
+ */
+ function baseMerge(object, source, srcIndex, customizer, stack) {
+ if (object === source) {
+ return;
+ }
+ baseFor(source, function(srcValue, key) {
+ if (isObject(srcValue)) {
+ stack || (stack = new Stack);
+ baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);
+ }
+ else {
+ var newValue = customizer
+ ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)
+ : undefined;
+
+ if (newValue === undefined) {
+ newValue = srcValue;
+ }
+ assignMergeValue(object, key, newValue);
+ }
+ }, keysIn);
+ }
+
+ /**
+ * A specialized version of `baseMerge` for arrays and objects which performs
+ * deep merges and tracks traversed objects enabling objects with circular
+ * references to be merged.
+ *
+ * @private
+ * @param {Object} object The destination object.
+ * @param {Object} source The source object.
+ * @param {string} key The key of the value to merge.
+ * @param {number} srcIndex The index of `source`.
+ * @param {Function} mergeFunc The function to merge values.
+ * @param {Function} [customizer] The function to customize assigned values.
+ * @param {Object} [stack] Tracks traversed source values and their merged
+ * counterparts.
+ */
+ function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {
+ var objValue = safeGet(object, key),
+ srcValue = safeGet(source, key),
+ stacked = stack.get(srcValue);
+
+ if (stacked) {
+ assignMergeValue(object, key, stacked);
+ return;
+ }
+ var newValue = customizer
+ ? customizer(objValue, srcValue, (key + ''), object, source, stack)
+ : undefined;
+
+ var isCommon = newValue === undefined;
+
+ if (isCommon) {
+ var isArr = isArray(srcValue),
+ isBuff = !isArr && isBuffer(srcValue),
+ isTyped = !isArr && !isBuff && isTypedArray(srcValue);
+
+ newValue = srcValue;
+ if (isArr || isBuff || isTyped) {
+ if (isArray(objValue)) {
+ newValue = objValue;
+ }
+ else if (isArrayLikeObject(objValue)) {
+ newValue = copyArray(objValue);
+ }
+ else if (isBuff) {
+ isCommon = false;
+ newValue = cloneBuffer(srcValue, true);
+ }
+ else if (isTyped) {
+ isCommon = false;
+ newValue = cloneTypedArray(srcValue, true);
+ }
+ else {
+ newValue = [];
+ }
+ }
+ else if (isPlainObject(srcValue) || isArguments(srcValue)) {
+ newValue = objValue;
+ if (isArguments(objValue)) {
+ newValue = toPlainObject(objValue);
+ }
+ else if (!isObject(objValue) || (srcIndex && isFunction(objValue))) {
+ newValue = initCloneObject(srcValue);
+ }
+ }
+ else {
+ isCommon = false;
+ }
+ }
+ if (isCommon) {
+ // Recursively merge objects and arrays (susceptible to call stack limits).
+ stack.set(srcValue, newValue);
+ mergeFunc(newValue, srcValue, srcIndex, customizer, stack);
+ stack['delete'](srcValue);
+ }
+ assignMergeValue(object, key, newValue);
+ }
+
+ /**
+ * The base implementation of `_.nth` which doesn't coerce arguments.
+ *
+ * @private
+ * @param {Array} array The array to query.
+ * @param {number} n The index of the element to return.
+ * @returns {*} Returns the nth element of `array`.
+ */
+ function baseNth(array, n) {
+ var length = array.length;
+ if (!length) {
+ return;
+ }
+ n += n < 0 ? length : 0;
+ return isIndex(n, length) ? array[n] : undefined;
+ }
+
+ /**
+ * The base implementation of `_.orderBy` without param guards.
+ *
+ * @private
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.
+ * @param {string[]} orders The sort orders of `iteratees`.
+ * @returns {Array} Returns the new sorted array.
+ */
+ function baseOrderBy(collection, iteratees, orders) {
+ var index = -1;
+ iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(getIteratee()));
+
+ var result = baseMap(collection, function(value, key, collection) {
+ var criteria = arrayMap(iteratees, function(iteratee) {
+ return iteratee(value);
+ });
+ return { 'criteria': criteria, 'index': ++index, 'value': value };
+ });
+
+ return baseSortBy(result, function(object, other) {
+ return compareMultiple(object, other, orders);
+ });
+ }
+
+ /**
+ * The base implementation of `_.pick` without support for individual
+ * property identifiers.
+ *
+ * @private
+ * @param {Object} object The source object.
+ * @param {string[]} paths The property paths to pick.
+ * @returns {Object} Returns the new object.
+ */
+ function basePick(object, paths) {
+ return basePickBy(object, paths, function(value, path) {
+ return hasIn(object, path);
+ });
+ }
+
+ /**
+ * The base implementation of `_.pickBy` without support for iteratee shorthands.
+ *
+ * @private
+ * @param {Object} object The source object.
+ * @param {string[]} paths The property paths to pick.
+ * @param {Function} predicate The function invoked per property.
+ * @returns {Object} Returns the new object.
+ */
+ function basePickBy(object, paths, predicate) {
+ var index = -1,
+ length = paths.length,
+ result = {};
+
+ while (++index < length) {
+ var path = paths[index],
+ value = baseGet(object, path);
+
+ if (predicate(value, path)) {
+ baseSet(result, castPath(path, object), value);
+ }
+ }
+ return result;
+ }
+
+ /**
+ * A specialized version of `baseProperty` which supports deep paths.
+ *
+ * @private
+ * @param {Array|string} path The path of the property to get.
+ * @returns {Function} Returns the new accessor function.
+ */
+ function basePropertyDeep(path) {
+ return function(object) {
+ return baseGet(object, path);
+ };
+ }
+
+ /**
+ * The base implementation of `_.pullAllBy` without support for iteratee
+ * shorthands.
+ *
+ * @private
+ * @param {Array} array The array to modify.
+ * @param {Array} values The values to remove.
+ * @param {Function} [iteratee] The iteratee invoked per element.
+ * @param {Function} [comparator] The comparator invoked per element.
+ * @returns {Array} Returns `array`.
+ */
+ function basePullAll(array, values, iteratee, comparator) {
+ var indexOf = comparator ? baseIndexOfWith : baseIndexOf,
+ index = -1,
+ length = values.length,
+ seen = array;
+
+ if (array === values) {
+ values = copyArray(values);
+ }
+ if (iteratee) {
+ seen = arrayMap(array, baseUnary(iteratee));
+ }
+ while (++index < length) {
+ var fromIndex = 0,
+ value = values[index],
+ computed = iteratee ? iteratee(value) : value;
+
+ while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {
+ if (seen !== array) {
+ splice.call(seen, fromIndex, 1);
+ }
+ splice.call(array, fromIndex, 1);
+ }
+ }
+ return array;
+ }
+
+ /**
+ * The base implementation of `_.pullAt` without support for individual
+ * indexes or capturing the removed elements.
+ *
+ * @private
+ * @param {Array} array The array to modify.
+ * @param {number[]} indexes The indexes of elements to remove.
+ * @returns {Array} Returns `array`.
+ */
+ function basePullAt(array, indexes) {
+ var length = array ? indexes.length : 0,
+ lastIndex = length - 1;
+
+ while (length--) {
+ var index = indexes[length];
+ if (length == lastIndex || index !== previous) {
+ var previous = index;
+ if (isIndex(index)) {
+ splice.call(array, index, 1);
+ } else {
+ baseUnset(array, index);
+ }
+ }
+ }
+ return array;
+ }
+
+ /**
+ * The base implementation of `_.random` without support for returning
+ * floating-point numbers.
+ *
+ * @private
+ * @param {number} lower The lower bound.
+ * @param {number} upper The upper bound.
+ * @returns {number} Returns the random number.
+ */
+ function baseRandom(lower, upper) {
+ return lower + nativeFloor(nativeRandom() * (upper - lower + 1));
+ }
+
+ /**
+ * The base implementation of `_.range` and `_.rangeRight` which doesn't
+ * coerce arguments.
+ *
+ * @private
+ * @param {number} start The start of the range.
+ * @param {number} end The end of the range.
+ * @param {number} step The value to increment or decrement by.
+ * @param {boolean} [fromRight] Specify iterating from right to left.
+ * @returns {Array} Returns the range of numbers.
+ */
+ function baseRange(start, end, step, fromRight) {
+ var index = -1,
+ length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),
+ result = Array(length);
+
+ while (length--) {
+ result[fromRight ? length : ++index] = start;
+ start += step;
+ }
+ return result;
+ }
+
+ /**
+ * The base implementation of `_.repeat` which doesn't coerce arguments.
+ *
+ * @private
+ * @param {string} string The string to repeat.
+ * @param {number} n The number of times to repeat the string.
+ * @returns {string} Returns the repeated string.
+ */
+ function baseRepeat(string, n) {
+ var result = '';
+ if (!string || n < 1 || n > MAX_SAFE_INTEGER) {
+ return result;
+ }
+ // Leverage the exponentiation by squaring algorithm for a faster repeat.
+ // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.
+ do {
+ if (n % 2) {
+ result += string;
+ }
+ n = nativeFloor(n / 2);
+ if (n) {
+ string += string;
+ }
+ } while (n);
+
+ return result;
+ }
+
+ /**
+ * The base implementation of `_.rest` which doesn't validate or coerce arguments.
+ *
+ * @private
+ * @param {Function} func The function to apply a rest parameter to.
+ * @param {number} [start=func.length-1] The start position of the rest parameter.
+ * @returns {Function} Returns the new function.
+ */
+ function baseRest(func, start) {
+ return setToString(overRest(func, start, identity), func + '');
+ }
+
+ /**
+ * The base implementation of `_.sample`.
+ *
+ * @private
+ * @param {Array|Object} collection The collection to sample.
+ * @returns {*} Returns the random element.
+ */
+ function baseSample(collection) {
+ return arraySample(values(collection));
+ }
+
+ /**
+ * The base implementation of `_.sampleSize` without param guards.
+ *
+ * @private
+ * @param {Array|Object} collection The collection to sample.
+ * @param {number} n The number of elements to sample.
+ * @returns {Array} Returns the random elements.
+ */
+ function baseSampleSize(collection, n) {
+ var array = values(collection);
+ return shuffleSelf(array, baseClamp(n, 0, array.length));
+ }
+
+ /**
+ * The base implementation of `_.set`.
+ *
+ * @private
+ * @param {Object} object The object to modify.
+ * @param {Array|string} path The path of the property to set.
+ * @param {*} value The value to set.
+ * @param {Function} [customizer] The function to customize path creation.
+ * @returns {Object} Returns `object`.
+ */
+ function baseSet(object, path, value, customizer) {
+ if (!isObject(object)) {
+ return object;
+ }
+ path = castPath(path, object);
+
+ var index = -1,
+ length = path.length,
+ lastIndex = length - 1,
+ nested = object;
+
+ while (nested != null && ++index < length) {
+ var key = toKey(path[index]),
+ newValue = value;
+
+ if (index != lastIndex) {
+ var objValue = nested[key];
+ newValue = customizer ? customizer(objValue, key, nested) : undefined;
+ if (newValue === undefined) {
+ newValue = isObject(objValue)
+ ? objValue
+ : (isIndex(path[index + 1]) ? [] : {});
+ }
+ }
+ assignValue(nested, key, newValue);
+ nested = nested[key];
+ }
+ return object;
+ }
+
+ /**
+ * The base implementation of `setData` without support for hot loop shorting.
+ *
+ * @private
+ * @param {Function} func The function to associate metadata with.
+ * @param {*} data The metadata.
+ * @returns {Function} Returns `func`.
+ */
+ var baseSetData = !metaMap ? identity : function(func, data) {
+ metaMap.set(func, data);
+ return func;
+ };
+
+ /**
+ * The base implementation of `setToString` without support for hot loop shorting.
+ *
+ * @private
+ * @param {Function} func The function to modify.
+ * @param {Function} string The `toString` result.
+ * @returns {Function} Returns `func`.
+ */
+ var baseSetToString = !defineProperty ? identity : function(func, string) {
+ return defineProperty(func, 'toString', {
+ 'configurable': true,
+ 'enumerable': false,
+ 'value': constant(string),
+ 'writable': true
+ });
+ };
+
+ /**
+ * The base implementation of `_.shuffle`.
+ *
+ * @private
+ * @param {Array|Object} collection The collection to shuffle.
+ * @returns {Array} Returns the new shuffled array.
+ */
+ function baseShuffle(collection) {
+ return shuffleSelf(values(collection));
+ }
+
+ /**
+ * The base implementation of `_.slice` without an iteratee call guard.
+ *
+ * @private
+ * @param {Array} array The array to slice.
+ * @param {number} [start=0] The start position.
+ * @param {number} [end=array.length] The end position.
+ * @returns {Array} Returns the slice of `array`.
+ */
+ function baseSlice(array, start, end) {
+ var index = -1,
+ length = array.length;
+
+ if (start < 0) {
+ start = -start > length ? 0 : (length + start);
+ }
+ end = end > length ? length : end;
+ if (end < 0) {
+ end += length;
+ }
+ length = start > end ? 0 : ((end - start) >>> 0);
+ start >>>= 0;
+
+ var result = Array(length);
+ while (++index < length) {
+ result[index] = array[index + start];
+ }
+ return result;
+ }
+
+ /**
+ * The base implementation of `_.some` without support for iteratee shorthands.
+ *
+ * @private
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function} predicate The function invoked per iteration.
+ * @returns {boolean} Returns `true` if any element passes the predicate check,
+ * else `false`.
+ */
+ function baseSome(collection, predicate) {
+ var result;
+
+ baseEach(collection, function(value, index, collection) {
+ result = predicate(value, index, collection);
+ return !result;
+ });
+ return !!result;
+ }
+
+ /**
+ * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which
+ * performs a binary search of `array` to determine the index at which `value`
+ * should be inserted into `array` in order to maintain its sort order.
+ *
+ * @private
+ * @param {Array} array The sorted array to inspect.
+ * @param {*} value The value to evaluate.
+ * @param {boolean} [retHighest] Specify returning the highest qualified index.
+ * @returns {number} Returns the index at which `value` should be inserted
+ * into `array`.
+ */
+ function baseSortedIndex(array, value, retHighest) {
+ var low = 0,
+ high = array == null ? low : array.length;
+
+ if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {
+ while (low < high) {
+ var mid = (low + high) >>> 1,
+ computed = array[mid];
+
+ if (computed !== null && !isSymbol(computed) &&
+ (retHighest ? (computed <= value) : (computed < value))) {
+ low = mid + 1;
+ } else {
+ high = mid;
+ }
+ }
+ return high;
+ }
+ return baseSortedIndexBy(array, value, identity, retHighest);
+ }
+
+ /**
+ * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`
+ * which invokes `iteratee` for `value` and each element of `array` to compute
+ * their sort ranking. The iteratee is invoked with one argument; (value).
+ *
+ * @private
+ * @param {Array} array The sorted array to inspect.
+ * @param {*} value The value to evaluate.
+ * @param {Function} iteratee The iteratee invoked per element.
+ * @param {boolean} [retHighest] Specify returning the highest qualified index.
+ * @returns {number} Returns the index at which `value` should be inserted
+ * into `array`.
+ */
+ function baseSortedIndexBy(array, value, iteratee, retHighest) {
+ value = iteratee(value);
+
+ var low = 0,
+ high = array == null ? 0 : array.length,
+ valIsNaN = value !== value,
+ valIsNull = value === null,
+ valIsSymbol = isSymbol(value),
+ valIsUndefined = value === undefined;
+
+ while (low < high) {
+ var mid = nativeFloor((low + high) / 2),
+ computed = iteratee(array[mid]),
+ othIsDefined = computed !== undefined,
+ othIsNull = computed === null,
+ othIsReflexive = computed === computed,
+ othIsSymbol = isSymbol(computed);
+
+ if (valIsNaN) {
+ var setLow = retHighest || othIsReflexive;
+ } else if (valIsUndefined) {
+ setLow = othIsReflexive && (retHighest || othIsDefined);
+ } else if (valIsNull) {
+ setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);
+ } else if (valIsSymbol) {
+ setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);
+ } else if (othIsNull || othIsSymbol) {
+ setLow = false;
+ } else {
+ setLow = retHighest ? (computed <= value) : (computed < value);
+ }
+ if (setLow) {
+ low = mid + 1;
+ } else {
+ high = mid;
+ }
+ }
+ return nativeMin(high, MAX_ARRAY_INDEX);
+ }
+
+ /**
+ * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without
+ * support for iteratee shorthands.
+ *
+ * @private
+ * @param {Array} array The array to inspect.
+ * @param {Function} [iteratee] The iteratee invoked per element.
+ * @returns {Array} Returns the new duplicate free array.
+ */
+ function baseSortedUniq(array, iteratee) {
+ var index = -1,
+ length = array.length,
+ resIndex = 0,
+ result = [];
+
+ while (++index < length) {
+ var value = array[index],
+ computed = iteratee ? iteratee(value) : value;
+
+ if (!index || !eq(computed, seen)) {
+ var seen = computed;
+ result[resIndex++] = value === 0 ? 0 : value;
+ }
+ }
+ return result;
+ }
+
+ /**
+ * The base implementation of `_.toNumber` which doesn't ensure correct
+ * conversions of binary, hexadecimal, or octal string values.
+ *
+ * @private
+ * @param {*} value The value to process.
+ * @returns {number} Returns the number.
+ */
+ function baseToNumber(value) {
+ if (typeof value == 'number') {
+ return value;
+ }
+ if (isSymbol(value)) {
+ return NAN;
+ }
+ return +value;
+ }
+
+ /**
+ * The base implementation of `_.toString` which doesn't convert nullish
+ * values to empty strings.
+ *
+ * @private
+ * @param {*} value The value to process.
+ * @returns {string} Returns the string.
+ */
+ function baseToString(value) {
+ // Exit early for strings to avoid a performance hit in some environments.
+ if (typeof value == 'string') {
+ return value;
+ }
+ if (isArray(value)) {
+ // Recursively convert values (susceptible to call stack limits).
+ return arrayMap(value, baseToString) + '';
+ }
+ if (isSymbol(value)) {
+ return symbolToString ? symbolToString.call(value) : '';
+ }
+ var result = (value + '');
+ return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
+ }
+
+ /**
+ * The base implementation of `_.uniqBy` without support for iteratee shorthands.
+ *
+ * @private
+ * @param {Array} array The array to inspect.
+ * @param {Function} [iteratee] The iteratee invoked per element.
+ * @param {Function} [comparator] The comparator invoked per element.
+ * @returns {Array} Returns the new duplicate free array.
+ */
+ function baseUniq(array, iteratee, comparator) {
+ var index = -1,
+ includes = arrayIncludes,
+ length = array.length,
+ isCommon = true,
+ result = [],
+ seen = result;
+
+ if (comparator) {
+ isCommon = false;
+ includes = arrayIncludesWith;
+ }
+ else if (length >= LARGE_ARRAY_SIZE) {
+ var set = iteratee ? null : createSet(array);
+ if (set) {
+ return setToArray(set);
+ }
+ isCommon = false;
+ includes = cacheHas;
+ seen = new SetCache;
+ }
+ else {
+ seen = iteratee ? [] : result;
+ }
+ outer:
+ while (++index < length) {
+ var value = array[index],
+ computed = iteratee ? iteratee(value) : value;
+
+ value = (comparator || value !== 0) ? value : 0;
+ if (isCommon && computed === computed) {
+ var seenIndex = seen.length;
+ while (seenIndex--) {
+ if (seen[seenIndex] === computed) {
+ continue outer;
+ }
+ }
+ if (iteratee) {
+ seen.push(computed);
+ }
+ result.push(value);
+ }
+ else if (!includes(seen, computed, comparator)) {
+ if (seen !== result) {
+ seen.push(computed);
+ }
+ result.push(value);
+ }
+ }
+ return result;
+ }
+
+ /**
+ * The base implementation of `_.unset`.
+ *
+ * @private
+ * @param {Object} object The object to modify.
+ * @param {Array|string} path The property path to unset.
+ * @returns {boolean} Returns `true` if the property is deleted, else `false`.
+ */
+ function baseUnset(object, path) {
+ path = castPath(path, object);
+ object = parent(object, path);
+ return object == null || delete object[toKey(last(path))];
+ }
+
+ /**
+ * The base implementation of `_.update`.
+ *
+ * @private
+ * @param {Object} object The object to modify.
+ * @param {Array|string} path The path of the property to update.
+ * @param {Function} updater The function to produce the updated value.
+ * @param {Function} [customizer] The function to customize path creation.
+ * @returns {Object} Returns `object`.
+ */
+ function baseUpdate(object, path, updater, customizer) {
+ return baseSet(object, path, updater(baseGet(object, path)), customizer);
+ }
+
+ /**
+ * The base implementation of methods like `_.dropWhile` and `_.takeWhile`
+ * without support for iteratee shorthands.
+ *
+ * @private
+ * @param {Array} array The array to query.
+ * @param {Function} predicate The function invoked per iteration.
+ * @param {boolean} [isDrop] Specify dropping elements instead of taking them.
+ * @param {boolean} [fromRight] Specify iterating from right to left.
+ * @returns {Array} Returns the slice of `array`.
+ */
+ function baseWhile(array, predicate, isDrop, fromRight) {
+ var length = array.length,
+ index = fromRight ? length : -1;
+
+ while ((fromRight ? index-- : ++index < length) &&
+ predicate(array[index], index, array)) {}
+
+ return isDrop
+ ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))
+ : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));
+ }
+
+ /**
+ * The base implementation of `wrapperValue` which returns the result of
+ * performing a sequence of actions on the unwrapped `value`, where each
+ * successive action is supplied the return value of the previous.
+ *
+ * @private
+ * @param {*} value The unwrapped value.
+ * @param {Array} actions Actions to perform to resolve the unwrapped value.
+ * @returns {*} Returns the resolved value.
+ */
+ function baseWrapperValue(value, actions) {
+ var result = value;
+ if (result instanceof LazyWrapper) {
+ result = result.value();
+ }
+ return arrayReduce(actions, function(result, action) {
+ return action.func.apply(action.thisArg, arrayPush([result], action.args));
+ }, result);
+ }
+
+ /**
+ * The base implementation of methods like `_.xor`, without support for
+ * iteratee shorthands, that accepts an array of arrays to inspect.
+ *
+ * @private
+ * @param {Array} arrays The arrays to inspect.
+ * @param {Function} [iteratee] The iteratee invoked per element.
+ * @param {Function} [comparator] The comparator invoked per element.
+ * @returns {Array} Returns the new array of values.
+ */
+ function baseXor(arrays, iteratee, comparator) {
+ var length = arrays.length;
+ if (length < 2) {
+ return length ? baseUniq(arrays[0]) : [];
+ }
+ var index = -1,
+ result = Array(length);
+
+ while (++index < length) {
+ var array = arrays[index],
+ othIndex = -1;
+
+ while (++othIndex < length) {
+ if (othIndex != index) {
+ result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);
+ }
+ }
+ }
+ return baseUniq(baseFlatten(result, 1), iteratee, comparator);
+ }
+
+ /**
+ * This base implementation of `_.zipObject` which assigns values using `assignFunc`.
+ *
+ * @private
+ * @param {Array} props The property identifiers.
+ * @param {Array} values The property values.
+ * @param {Function} assignFunc The function to assign values.
+ * @returns {Object} Returns the new object.
+ */
+ function baseZipObject(props, values, assignFunc) {
+ var index = -1,
+ length = props.length,
+ valsLength = values.length,
+ result = {};
+
+ while (++index < length) {
+ var value = index < valsLength ? values[index] : undefined;
+ assignFunc(result, props[index], value);
+ }
+ return result;
+ }
+
+ /**
+ * Casts `value` to an empty array if it's not an array like object.
+ *
+ * @private
+ * @param {*} value The value to inspect.
+ * @returns {Array|Object} Returns the cast array-like object.
+ */
+ function castArrayLikeObject(value) {
+ return isArrayLikeObject(value) ? value : [];
+ }
+
+ /**
+ * Casts `value` to `identity` if it's not a function.
+ *
+ * @private
+ * @param {*} value The value to inspect.
+ * @returns {Function} Returns cast function.
+ */
+ function castFunction(value) {
+ return typeof value == 'function' ? value : identity;
+ }
+
+ /**
+ * Casts `value` to a path array if it's not one.
+ *
+ * @private
+ * @param {*} value The value to inspect.
+ * @param {Object} [object] The object to query keys on.
+ * @returns {Array} Returns the cast property path array.
+ */
+ function castPath(value, object) {
+ if (isArray(value)) {
+ return value;
+ }
+ return isKey(value, object) ? [value] : stringToPath(toString(value));
+ }
+
+ /**
+ * A `baseRest` alias which can be replaced with `identity` by module
+ * replacement plugins.
+ *
+ * @private
+ * @type {Function}
+ * @param {Function} func The function to apply a rest parameter to.
+ * @returns {Function} Returns the new function.
+ */
+ var castRest = baseRest;
+
+ /**
+ * Casts `array` to a slice if it's needed.
+ *
+ * @private
+ * @param {Array} array The array to inspect.
+ * @param {number} start The start position.
+ * @param {number} [end=array.length] The end position.
+ * @returns {Array} Returns the cast slice.
+ */
+ function castSlice(array, start, end) {
+ var length = array.length;
+ end = end === undefined ? length : end;
+ return (!start && end >= length) ? array : baseSlice(array, start, end);
+ }
+
+ /**
+ * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).
+ *
+ * @private
+ * @param {number|Object} id The timer id or timeout object of the timer to clear.
+ */
+ var clearTimeout = ctxClearTimeout || function(id) {
+ return root.clearTimeout(id);
+ };
+
+ /**
+ * Creates a clone of `buffer`.
+ *
+ * @private
+ * @param {Buffer} buffer The buffer to clone.
+ * @param {boolean} [isDeep] Specify a deep clone.
+ * @returns {Buffer} Returns the cloned buffer.
+ */
+ function cloneBuffer(buffer, isDeep) {
+ if (isDeep) {
+ return buffer.slice();
+ }
+ var length = buffer.length,
+ result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);
+
+ buffer.copy(result);
+ return result;
+ }
+
+ /**
+ * Creates a clone of `arrayBuffer`.
+ *
+ * @private
+ * @param {ArrayBuffer} arrayBuffer The array buffer to clone.
+ * @returns {ArrayBuffer} Returns the cloned array buffer.
+ */
+ function cloneArrayBuffer(arrayBuffer) {
+ var result = new arrayBuffer.constructor(arrayBuffer.byteLength);
+ new Uint8Array(result).set(new Uint8Array(arrayBuffer));
+ return result;
+ }
+
+ /**
+ * Creates a clone of `dataView`.
+ *
+ * @private
+ * @param {Object} dataView The data view to clone.
+ * @param {boolean} [isDeep] Specify a deep clone.
+ * @returns {Object} Returns the cloned data view.
+ */
+ function cloneDataView(dataView, isDeep) {
+ var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;
+ return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);
+ }
+
+ /**
+ * Creates a clone of `regexp`.
+ *
+ * @private
+ * @param {Object} regexp The regexp to clone.
+ * @returns {Object} Returns the cloned regexp.
+ */
+ function cloneRegExp(regexp) {
+ var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));
+ result.lastIndex = regexp.lastIndex;
+ return result;
+ }
+
+ /**
+ * Creates a clone of the `symbol` object.
+ *
+ * @private
+ * @param {Object} symbol The symbol object to clone.
+ * @returns {Object} Returns the cloned symbol object.
+ */
+ function cloneSymbol(symbol) {
+ return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};
+ }
+
+ /**
+ * Creates a clone of `typedArray`.
+ *
+ * @private
+ * @param {Object} typedArray The typed array to clone.
+ * @param {boolean} [isDeep] Specify a deep clone.
+ * @returns {Object} Returns the cloned typed array.
+ */
+ function cloneTypedArray(typedArray, isDeep) {
+ var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;
+ return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);
+ }
+
+ /**
+ * Compares values to sort them in ascending order.
+ *
+ * @private
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @returns {number} Returns the sort order indicator for `value`.
+ */
+ function compareAscending(value, other) {
+ if (value !== other) {
+ var valIsDefined = value !== undefined,
+ valIsNull = value === null,
+ valIsReflexive = value === value,
+ valIsSymbol = isSymbol(value);
+
+ var othIsDefined = other !== undefined,
+ othIsNull = other === null,
+ othIsReflexive = other === other,
+ othIsSymbol = isSymbol(other);
+
+ if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||
+ (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||
+ (valIsNull && othIsDefined && othIsReflexive) ||
+ (!valIsDefined && othIsReflexive) ||
+ !valIsReflexive) {
+ return 1;
+ }
+ if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||
+ (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||
+ (othIsNull && valIsDefined && valIsReflexive) ||
+ (!othIsDefined && valIsReflexive) ||
+ !othIsReflexive) {
+ return -1;
+ }
+ }
+ return 0;
+ }
+
+ /**
+ * Used by `_.orderBy` to compare multiple properties of a value to another
+ * and stable sort them.
+ *
+ * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,
+ * specify an order of "desc" for descending or "asc" for ascending sort order
+ * of corresponding values.
+ *
+ * @private
+ * @param {Object} object The object to compare.
+ * @param {Object} other The other object to compare.
+ * @param {boolean[]|string[]} orders The order to sort by for each property.
+ * @returns {number} Returns the sort order indicator for `object`.
+ */
+ function compareMultiple(object, other, orders) {
+ var index = -1,
+ objCriteria = object.criteria,
+ othCriteria = other.criteria,
+ length = objCriteria.length,
+ ordersLength = orders.length;
+
+ while (++index < length) {
+ var result = compareAscending(objCriteria[index], othCriteria[index]);
+ if (result) {
+ if (index >= ordersLength) {
+ return result;
+ }
+ var order = orders[index];
+ return result * (order == 'desc' ? -1 : 1);
+ }
+ }
+ // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications
+ // that causes it, under certain circumstances, to provide the same value for
+ // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247
+ // for more details.
+ //
+ // This also ensures a stable sort in V8 and other engines.
+ // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.
+ return object.index - other.index;
+ }
+
+ /**
+ * Creates an array that is the composition of partially applied arguments,
+ * placeholders, and provided arguments into a single array of arguments.
+ *
+ * @private
+ * @param {Array} args The provided arguments.
+ * @param {Array} partials The arguments to prepend to those provided.
+ * @param {Array} holders The `partials` placeholder indexes.
+ * @params {boolean} [isCurried] Specify composing for a curried function.
+ * @returns {Array} Returns the new array of composed arguments.
+ */
+ function composeArgs(args, partials, holders, isCurried) {
+ var argsIndex = -1,
+ argsLength = args.length,
+ holdersLength = holders.length,
+ leftIndex = -1,
+ leftLength = partials.length,
+ rangeLength = nativeMax(argsLength - holdersLength, 0),
+ result = Array(leftLength + rangeLength),
+ isUncurried = !isCurried;
+
+ while (++leftIndex < leftLength) {
+ result[leftIndex] = partials[leftIndex];
+ }
+ while (++argsIndex < holdersLength) {
+ if (isUncurried || argsIndex < argsLength) {
+ result[holders[argsIndex]] = args[argsIndex];
+ }
+ }
+ while (rangeLength--) {
+ result[leftIndex++] = args[argsIndex++];
+ }
+ return result;
+ }
+
+ /**
+ * This function is like `composeArgs` except that the arguments composition
+ * is tailored for `_.partialRight`.
+ *
+ * @private
+ * @param {Array} args The provided arguments.
+ * @param {Array} partials The arguments to append to those provided.
+ * @param {Array} holders The `partials` placeholder indexes.
+ * @params {boolean} [isCurried] Specify composing for a curried function.
+ * @returns {Array} Returns the new array of composed arguments.
+ */
+ function composeArgsRight(args, partials, holders, isCurried) {
+ var argsIndex = -1,
+ argsLength = args.length,
+ holdersIndex = -1,
+ holdersLength = holders.length,
+ rightIndex = -1,
+ rightLength = partials.length,
+ rangeLength = nativeMax(argsLength - holdersLength, 0),
+ result = Array(rangeLength + rightLength),
+ isUncurried = !isCurried;
+
+ while (++argsIndex < rangeLength) {
+ result[argsIndex] = args[argsIndex];
+ }
+ var offset = argsIndex;
+ while (++rightIndex < rightLength) {
+ result[offset + rightIndex] = partials[rightIndex];
+ }
+ while (++holdersIndex < holdersLength) {
+ if (isUncurried || argsIndex < argsLength) {
+ result[offset + holders[holdersIndex]] = args[argsIndex++];
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Copies the values of `source` to `array`.
+ *
+ * @private
+ * @param {Array} source The array to copy values from.
+ * @param {Array} [array=[]] The array to copy values to.
+ * @returns {Array} Returns `array`.
+ */
+ function copyArray(source, array) {
+ var index = -1,
+ length = source.length;
+
+ array || (array = Array(length));
+ while (++index < length) {
+ array[index] = source[index];
+ }
+ return array;
+ }
+
+ /**
+ * Copies properties of `source` to `object`.
+ *
+ * @private
+ * @param {Object} source The object to copy properties from.
+ * @param {Array} props The property identifiers to copy.
+ * @param {Object} [object={}] The object to copy properties to.
+ * @param {Function} [customizer] The function to customize copied values.
+ * @returns {Object} Returns `object`.
+ */
+ function copyObject(source, props, object, customizer) {
+ var isNew = !object;
+ object || (object = {});
+
+ var index = -1,
+ length = props.length;
+
+ while (++index < length) {
+ var key = props[index];
+
+ var newValue = customizer
+ ? customizer(object[key], source[key], key, object, source)
+ : undefined;
+
+ if (newValue === undefined) {
+ newValue = source[key];
+ }
+ if (isNew) {
+ baseAssignValue(object, key, newValue);
+ } else {
+ assignValue(object, key, newValue);
+ }
+ }
+ return object;
+ }
+
+ /**
+ * Copies own symbols of `source` to `object`.
+ *
+ * @private
+ * @param {Object} source The object to copy symbols from.
+ * @param {Object} [object={}] The object to copy symbols to.
+ * @returns {Object} Returns `object`.
+ */
+ function copySymbols(source, object) {
+ return copyObject(source, getSymbols(source), object);
+ }
+
+ /**
+ * Copies own and inherited symbols of `source` to `object`.
+ *
+ * @private
+ * @param {Object} source The object to copy symbols from.
+ * @param {Object} [object={}] The object to copy symbols to.
+ * @returns {Object} Returns `object`.
+ */
+ function copySymbolsIn(source, object) {
+ return copyObject(source, getSymbolsIn(source), object);
+ }
+
+ /**
+ * Creates a function like `_.groupBy`.
+ *
+ * @private
+ * @param {Function} setter The function to set accumulator values.
+ * @param {Function} [initializer] The accumulator object initializer.
+ * @returns {Function} Returns the new aggregator function.
+ */
+ function createAggregator(setter, initializer) {
+ return function(collection, iteratee) {
+ var func = isArray(collection) ? arrayAggregator : baseAggregator,
+ accumulator = initializer ? initializer() : {};
+
+ return func(collection, setter, getIteratee(iteratee, 2), accumulator);
+ };
+ }
+
+ /**
+ * Creates a function like `_.assign`.
+ *
+ * @private
+ * @param {Function} assigner The function to assign values.
+ * @returns {Function} Returns the new assigner function.
+ */
+ function createAssigner(assigner) {
+ return baseRest(function(object, sources) {
+ var index = -1,
+ length = sources.length,
+ customizer = length > 1 ? sources[length - 1] : undefined,
+ guard = length > 2 ? sources[2] : undefined;
+
+ customizer = (assigner.length > 3 && typeof customizer == 'function')
+ ? (length--, customizer)
+ : undefined;
+
+ if (guard && isIterateeCall(sources[0], sources[1], guard)) {
+ customizer = length < 3 ? undefined : customizer;
+ length = 1;
+ }
+ object = Object(object);
+ while (++index < length) {
+ var source = sources[index];
+ if (source) {
+ assigner(object, source, index, customizer);
+ }
+ }
+ return object;
+ });
+ }
+
+ /**
+ * Creates a `baseEach` or `baseEachRight` function.
+ *
+ * @private
+ * @param {Function} eachFunc The function to iterate over a collection.
+ * @param {boolean} [fromRight] Specify iterating from right to left.
+ * @returns {Function} Returns the new base function.
+ */
+ function createBaseEach(eachFunc, fromRight) {
+ return function(collection, iteratee) {
+ if (collection == null) {
+ return collection;
+ }
+ if (!isArrayLike(collection)) {
+ return eachFunc(collection, iteratee);
+ }
+ var length = collection.length,
+ index = fromRight ? length : -1,
+ iterable = Object(collection);
+
+ while ((fromRight ? index-- : ++index < length)) {
+ if (iteratee(iterable[index], index, iterable) === false) {
+ break;
+ }
+ }
+ return collection;
+ };
+ }
+
+ /**
+ * Creates a base function for methods like `_.forIn` and `_.forOwn`.
+ *
+ * @private
+ * @param {boolean} [fromRight] Specify iterating from right to left.
+ * @returns {Function} Returns the new base function.
+ */
+ function createBaseFor(fromRight) {
+ return function(object, iteratee, keysFunc) {
+ var index = -1,
+ iterable = Object(object),
+ props = keysFunc(object),
+ length = props.length;
+
+ while (length--) {
+ var key = props[fromRight ? length : ++index];
+ if (iteratee(iterable[key], key, iterable) === false) {
+ break;
+ }
+ }
+ return object;
+ };
+ }
+
+ /**
+ * Creates a function that wraps `func` to invoke it with the optional `this`
+ * binding of `thisArg`.
+ *
+ * @private
+ * @param {Function} func The function to wrap.
+ * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
+ * @param {*} [thisArg] The `this` binding of `func`.
+ * @returns {Function} Returns the new wrapped function.
+ */
+ function createBind(func, bitmask, thisArg) {
+ var isBind = bitmask & WRAP_BIND_FLAG,
+ Ctor = createCtor(func);
+
+ function wrapper() {
+ var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
+ return fn.apply(isBind ? thisArg : this, arguments);
+ }
+ return wrapper;
+ }
+
+ /**
+ * Creates a function like `_.lowerFirst`.
+ *
+ * @private
+ * @param {string} methodName The name of the `String` case method to use.
+ * @returns {Function} Returns the new case function.
+ */
+ function createCaseFirst(methodName) {
+ return function(string) {
+ string = toString(string);
+
+ var strSymbols = hasUnicode(string)
+ ? stringToArray(string)
+ : undefined;
+
+ var chr = strSymbols
+ ? strSymbols[0]
+ : string.charAt(0);
+
+ var trailing = strSymbols
+ ? castSlice(strSymbols, 1).join('')
+ : string.slice(1);
+
+ return chr[methodName]() + trailing;
+ };
+ }
+
+ /**
+ * Creates a function like `_.camelCase`.
+ *
+ * @private
+ * @param {Function} callback The function to combine each word.
+ * @returns {Function} Returns the new compounder function.
+ */
+ function createCompounder(callback) {
+ return function(string) {
+ return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');
+ };
+ }
+
+ /**
+ * Creates a function that produces an instance of `Ctor` regardless of
+ * whether it was invoked as part of a `new` expression or by `call` or `apply`.
+ *
+ * @private
+ * @param {Function} Ctor The constructor to wrap.
+ * @returns {Function} Returns the new wrapped function.
+ */
+ function createCtor(Ctor) {
+ return function() {
+ // Use a `switch` statement to work with class constructors. See
+ // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist
+ // for more details.
+ var args = arguments;
+ switch (args.length) {
+ case 0: return new Ctor;
+ case 1: return new Ctor(args[0]);
+ case 2: return new Ctor(args[0], args[1]);
+ case 3: return new Ctor(args[0], args[1], args[2]);
+ case 4: return new Ctor(args[0], args[1], args[2], args[3]);
+ case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);
+ case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);
+ case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);
+ }
+ var thisBinding = baseCreate(Ctor.prototype),
+ result = Ctor.apply(thisBinding, args);
+
+ // Mimic the constructor's `return` behavior.
+ // See https://es5.github.io/#x13.2.2 for more details.
+ return isObject(result) ? result : thisBinding;
+ };
+ }
+
+ /**
+ * Creates a function that wraps `func` to enable currying.
+ *
+ * @private
+ * @param {Function} func The function to wrap.
+ * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
+ * @param {number} arity The arity of `func`.
+ * @returns {Function} Returns the new wrapped function.
+ */
+ function createCurry(func, bitmask, arity) {
+ var Ctor = createCtor(func);
+
+ function wrapper() {
+ var length = arguments.length,
+ args = Array(length),
+ index = length,
+ placeholder = getHolder(wrapper);
+
+ while (index--) {
+ args[index] = arguments[index];
+ }
+ var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)
+ ? []
+ : replaceHolders(args, placeholder);
+
+ length -= holders.length;
+ if (length < arity) {
+ return createRecurry(
+ func, bitmask, createHybrid, wrapper.placeholder, undefined,
+ args, holders, undefined, undefined, arity - length);
+ }
+ var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
+ return apply(fn, this, args);
+ }
+ return wrapper;
+ }
+
+ /**
+ * Creates a `_.find` or `_.findLast` function.
+ *
+ * @private
+ * @param {Function} findIndexFunc The function to find the collection index.
+ * @returns {Function} Returns the new find function.
+ */
+ function createFind(findIndexFunc) {
+ return function(collection, predicate, fromIndex) {
+ var iterable = Object(collection);
+ if (!isArrayLike(collection)) {
+ var iteratee = getIteratee(predicate, 3);
+ collection = keys(collection);
+ predicate = function(key) { return iteratee(iterable[key], key, iterable); };
+ }
+ var index = findIndexFunc(collection, predicate, fromIndex);
+ return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;
+ };
+ }
+
+ /**
+ * Creates a `_.flow` or `_.flowRight` function.
+ *
+ * @private
+ * @param {boolean} [fromRight] Specify iterating from right to left.
+ * @returns {Function} Returns the new flow function.
+ */
+ function createFlow(fromRight) {
+ return flatRest(function(funcs) {
+ var length = funcs.length,
+ index = length,
+ prereq = LodashWrapper.prototype.thru;
+
+ if (fromRight) {
+ funcs.reverse();
+ }
+ while (index--) {
+ var func = funcs[index];
+ if (typeof func != 'function') {
+ throw new TypeError(FUNC_ERROR_TEXT);
+ }
+ if (prereq && !wrapper && getFuncName(func) == 'wrapper') {
+ var wrapper = new LodashWrapper([], true);
+ }
+ }
+ index = wrapper ? index : length;
+ while (++index < length) {
+ func = funcs[index];
+
+ var funcName = getFuncName(func),
+ data = funcName == 'wrapper' ? getData(func) : undefined;
+
+ if (data && isLaziable(data[0]) &&
+ data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&
+ !data[4].length && data[9] == 1
+ ) {
+ wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);
+ } else {
+ wrapper = (func.length == 1 && isLaziable(func))
+ ? wrapper[funcName]()
+ : wrapper.thru(func);
+ }
+ }
+ return function() {
+ var args = arguments,
+ value = args[0];
+
+ if (wrapper && args.length == 1 && isArray(value)) {
+ return wrapper.plant(value).value();
+ }
+ var index = 0,
+ result = length ? funcs[index].apply(this, args) : value;
+
+ while (++index < length) {
+ result = funcs[index].call(this, result);
+ }
+ return result;
+ };
+ });
+ }
+
+ /**
+ * Creates a function that wraps `func` to invoke it with optional `this`
+ * binding of `thisArg`, partial application, and currying.
+ *
+ * @private
+ * @param {Function|string} func The function or method name to wrap.
+ * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
+ * @param {*} [thisArg] The `this` binding of `func`.
+ * @param {Array} [partials] The arguments to prepend to those provided to
+ * the new function.
+ * @param {Array} [holders] The `partials` placeholder indexes.
+ * @param {Array} [partialsRight] The arguments to append to those provided
+ * to the new function.
+ * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.
+ * @param {Array} [argPos] The argument positions of the new function.
+ * @param {number} [ary] The arity cap of `func`.
+ * @param {number} [arity] The arity of `func`.
+ * @returns {Function} Returns the new wrapped function.
+ */
+ function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {
+ var isAry = bitmask & WRAP_ARY_FLAG,
+ isBind = bitmask & WRAP_BIND_FLAG,
+ isBindKey = bitmask & WRAP_BIND_KEY_FLAG,
+ isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),
+ isFlip = bitmask & WRAP_FLIP_FLAG,
+ Ctor = isBindKey ? undefined : createCtor(func);
+
+ function wrapper() {
+ var length = arguments.length,
+ args = Array(length),
+ index = length;
+
+ while (index--) {
+ args[index] = arguments[index];
+ }
+ if (isCurried) {
+ var placeholder = getHolder(wrapper),
+ holdersCount = countHolders(args, placeholder);
+ }
+ if (partials) {
+ args = composeArgs(args, partials, holders, isCurried);
+ }
+ if (partialsRight) {
+ args = composeArgsRight(args, partialsRight, holdersRight, isCurried);
+ }
+ length -= holdersCount;
+ if (isCurried && length < arity) {
+ var newHolders = replaceHolders(args, placeholder);
+ return createRecurry(
+ func, bitmask, createHybrid, wrapper.placeholder, thisArg,
+ args, newHolders, argPos, ary, arity - length
+ );
+ }
+ var thisBinding = isBind ? thisArg : this,
+ fn = isBindKey ? thisBinding[func] : func;
+
+ length = args.length;
+ if (argPos) {
+ args = reorder(args, argPos);
+ } else if (isFlip && length > 1) {
+ args.reverse();
+ }
+ if (isAry && ary < length) {
+ args.length = ary;
+ }
+ if (this && this !== root && this instanceof wrapper) {
+ fn = Ctor || createCtor(fn);
+ }
+ return fn.apply(thisBinding, args);
+ }
+ return wrapper;
+ }
+
+ /**
+ * Creates a function like `_.invertBy`.
+ *
+ * @private
+ * @param {Function} setter The function to set accumulator values.
+ * @param {Function} toIteratee The function to resolve iteratees.
+ * @returns {Function} Returns the new inverter function.
+ */
+ function createInverter(setter, toIteratee) {
+ return function(object, iteratee) {
+ return baseInverter(object, setter, toIteratee(iteratee), {});
+ };
+ }
+
+ /**
+ * Creates a function that performs a mathematical operation on two values.
+ *
+ * @private
+ * @param {Function} operator The function to perform the operation.
+ * @param {number} [defaultValue] The value used for `undefined` arguments.
+ * @returns {Function} Returns the new mathematical operation function.
+ */
+ function createMathOperation(operator, defaultValue) {
+ return function(value, other) {
+ var result;
+ if (value === undefined && other === undefined) {
+ return defaultValue;
+ }
+ if (value !== undefined) {
+ result = value;
+ }
+ if (other !== undefined) {
+ if (result === undefined) {
+ return other;
+ }
+ if (typeof value == 'string' || typeof other == 'string') {
+ value = baseToString(value);
+ other = baseToString(other);
+ } else {
+ value = baseToNumber(value);
+ other = baseToNumber(other);
+ }
+ result = operator(value, other);
+ }
+ return result;
+ };
+ }
+
+ /**
+ * Creates a function like `_.over`.
+ *
+ * @private
+ * @param {Function} arrayFunc The function to iterate over iteratees.
+ * @returns {Function} Returns the new over function.
+ */
+ function createOver(arrayFunc) {
+ return flatRest(function(iteratees) {
+ iteratees = arrayMap(iteratees, baseUnary(getIteratee()));
+ return baseRest(function(args) {
+ var thisArg = this;
+ return arrayFunc(iteratees, function(iteratee) {
+ return apply(iteratee, thisArg, args);
+ });
+ });
+ });
+ }
+
+ /**
+ * Creates the padding for `string` based on `length`. The `chars` string
+ * is truncated if the number of characters exceeds `length`.
+ *
+ * @private
+ * @param {number} length The padding length.
+ * @param {string} [chars=' '] The string used as padding.
+ * @returns {string} Returns the padding for `string`.
+ */
+ function createPadding(length, chars) {
+ chars = chars === undefined ? ' ' : baseToString(chars);
+
+ var charsLength = chars.length;
+ if (charsLength < 2) {
+ return charsLength ? baseRepeat(chars, length) : chars;
+ }
+ var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));
+ return hasUnicode(chars)
+ ? castSlice(stringToArray(result), 0, length).join('')
+ : result.slice(0, length);
+ }
+
+ /**
+ * Creates a function that wraps `func` to invoke it with the `this` binding
+ * of `thisArg` and `partials` prepended to the arguments it receives.
+ *
+ * @private
+ * @param {Function} func The function to wrap.
+ * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
+ * @param {*} thisArg The `this` binding of `func`.
+ * @param {Array} partials The arguments to prepend to those provided to
+ * the new function.
+ * @returns {Function} Returns the new wrapped function.
+ */
+ function createPartial(func, bitmask, thisArg, partials) {
+ var isBind = bitmask & WRAP_BIND_FLAG,
+ Ctor = createCtor(func);
+
+ function wrapper() {
+ var argsIndex = -1,
+ argsLength = arguments.length,
+ leftIndex = -1,
+ leftLength = partials.length,
+ args = Array(leftLength + argsLength),
+ fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
+
+ while (++leftIndex < leftLength) {
+ args[leftIndex] = partials[leftIndex];
+ }
+ while (argsLength--) {
+ args[leftIndex++] = arguments[++argsIndex];
+ }
+ return apply(fn, isBind ? thisArg : this, args);
+ }
+ return wrapper;
+ }
+
+ /**
+ * Creates a `_.range` or `_.rangeRight` function.
+ *
+ * @private
+ * @param {boolean} [fromRight] Specify iterating from right to left.
+ * @returns {Function} Returns the new range function.
+ */
+ function createRange(fromRight) {
+ return function(start, end, step) {
+ if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {
+ end = step = undefined;
+ }
+ // Ensure the sign of `-0` is preserved.
+ start = toFinite(start);
+ if (end === undefined) {
+ end = start;
+ start = 0;
+ } else {
+ end = toFinite(end);
+ }
+ step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);
+ return baseRange(start, end, step, fromRight);
+ };
+ }
+
+ /**
+ * Creates a function that performs a relational operation on two values.
+ *
+ * @private
+ * @param {Function} operator The function to perform the operation.
+ * @returns {Function} Returns the new relational operation function.
+ */
+ function createRelationalOperation(operator) {
+ return function(value, other) {
+ if (!(typeof value == 'string' && typeof other == 'string')) {
+ value = toNumber(value);
+ other = toNumber(other);
+ }
+ return operator(value, other);
+ };
+ }
+
+ /**
+ * Creates a function that wraps `func` to continue currying.
+ *
+ * @private
+ * @param {Function} func The function to wrap.
+ * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
+ * @param {Function} wrapFunc The function to create the `func` wrapper.
+ * @param {*} placeholder The placeholder value.
+ * @param {*} [thisArg] The `this` binding of `func`.
+ * @param {Array} [partials] The arguments to prepend to those provided to
+ * the new function.
+ * @param {Array} [holders] The `partials` placeholder indexes.
+ * @param {Array} [argPos] The argument positions of the new function.
+ * @param {number} [ary] The arity cap of `func`.
+ * @param {number} [arity] The arity of `func`.
+ * @returns {Function} Returns the new wrapped function.
+ */
+ function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {
+ var isCurry = bitmask & WRAP_CURRY_FLAG,
+ newHolders = isCurry ? holders : undefined,
+ newHoldersRight = isCurry ? undefined : holders,
+ newPartials = isCurry ? partials : undefined,
+ newPartialsRight = isCurry ? undefined : partials;
+
+ bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);
+ bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);
+
+ if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {
+ bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);
+ }
+ var newData = [
+ func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,
+ newHoldersRight, argPos, ary, arity
+ ];
+
+ var result = wrapFunc.apply(undefined, newData);
+ if (isLaziable(func)) {
+ setData(result, newData);
+ }
+ result.placeholder = placeholder;
+ return setWrapToString(result, func, bitmask);
+ }
+
+ /**
+ * Creates a function like `_.round`.
+ *
+ * @private
+ * @param {string} methodName The name of the `Math` method to use when rounding.
+ * @returns {Function} Returns the new round function.
+ */
+ function createRound(methodName) {
+ var func = Math[methodName];
+ return function(number, precision) {
+ number = toNumber(number);
+ precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);
+ if (precision) {
+ // Shift with exponential notation to avoid floating-point issues.
+ // See [MDN](https://mdn.io/round#Examples) for more details.
+ var pair = (toString(number) + 'e').split('e'),
+ value = func(pair[0] + 'e' + (+pair[1] + precision));
+
+ pair = (toString(value) + 'e').split('e');
+ return +(pair[0] + 'e' + (+pair[1] - precision));
+ }
+ return func(number);
+ };
+ }
+
+ /**
+ * Creates a set object of `values`.
+ *
+ * @private
+ * @param {Array} values The values to add to the set.
+ * @returns {Object} Returns the new set.
+ */
+ var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {
+ return new Set(values);
+ };
+
+ /**
+ * Creates a `_.toPairs` or `_.toPairsIn` function.
+ *
+ * @private
+ * @param {Function} keysFunc The function to get the keys of a given object.
+ * @returns {Function} Returns the new pairs function.
+ */
+ function createToPairs(keysFunc) {
+ return function(object) {
+ var tag = getTag(object);
+ if (tag == mapTag) {
+ return mapToArray(object);
+ }
+ if (tag == setTag) {
+ return setToPairs(object);
+ }
+ return baseToPairs(object, keysFunc(object));
+ };
+ }
+
+ /**
+ * Creates a function that either curries or invokes `func` with optional
+ * `this` binding and partially applied arguments.
+ *
+ * @private
+ * @param {Function|string} func The function or method name to wrap.
+ * @param {number} bitmask The bitmask flags.
+ * 1 - `_.bind`
+ * 2 - `_.bindKey`
+ * 4 - `_.curry` or `_.curryRight` of a bound function
+ * 8 - `_.curry`
+ * 16 - `_.curryRight`
+ * 32 - `_.partial`
+ * 64 - `_.partialRight`
+ * 128 - `_.rearg`
+ * 256 - `_.ary`
+ * 512 - `_.flip`
+ * @param {*} [thisArg] The `this` binding of `func`.
+ * @param {Array} [partials] The arguments to be partially applied.
+ * @param {Array} [holders] The `partials` placeholder indexes.
+ * @param {Array} [argPos] The argument positions of the new function.
+ * @param {number} [ary] The arity cap of `func`.
+ * @param {number} [arity] The arity of `func`.
+ * @returns {Function} Returns the new wrapped function.
+ */
+ function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {
+ var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;
+ if (!isBindKey && typeof func != 'function') {
+ throw new TypeError(FUNC_ERROR_TEXT);
+ }
+ var length = partials ? partials.length : 0;
+ if (!length) {
+ bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);
+ partials = holders = undefined;
+ }
+ ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);
+ arity = arity === undefined ? arity : toInteger(arity);
+ length -= holders ? holders.length : 0;
+
+ if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {
+ var partialsRight = partials,
+ holdersRight = holders;
+
+ partials = holders = undefined;
+ }
+ var data = isBindKey ? undefined : getData(func);
+
+ var newData = [
+ func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,
+ argPos, ary, arity
+ ];
+
+ if (data) {
+ mergeData(newData, data);
+ }
+ func = newData[0];
+ bitmask = newData[1];
+ thisArg = newData[2];
+ partials = newData[3];
+ holders = newData[4];
+ arity = newData[9] = newData[9] === undefined
+ ? (isBindKey ? 0 : func.length)
+ : nativeMax(newData[9] - length, 0);
+
+ if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {
+ bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);
+ }
+ if (!bitmask || bitmask == WRAP_BIND_FLAG) {
+ var result = createBind(func, bitmask, thisArg);
+ } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {
+ result = createCurry(func, bitmask, arity);
+ } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {
+ result = createPartial(func, bitmask, thisArg, partials);
+ } else {
+ result = createHybrid.apply(undefined, newData);
+ }
+ var setter = data ? baseSetData : setData;
+ return setWrapToString(setter(result, newData), func, bitmask);
+ }
+
+ /**
+ * Used by `_.defaults` to customize its `_.assignIn` use to assign properties
+ * of source objects to the destination object for all destination properties
+ * that resolve to `undefined`.
+ *
+ * @private
+ * @param {*} objValue The destination value.
+ * @param {*} srcValue The source value.
+ * @param {string} key The key of the property to assign.
+ * @param {Object} object The parent object of `objValue`.
+ * @returns {*} Returns the value to assign.
+ */
+ function customDefaultsAssignIn(objValue, srcValue, key, object) {
+ if (objValue === undefined ||
+ (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {
+ return srcValue;
+ }
+ return objValue;
+ }
+
+ /**
+ * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source
+ * objects into destination objects that are passed thru.
+ *
+ * @private
+ * @param {*} objValue The destination value.
+ * @param {*} srcValue The source value.
+ * @param {string} key The key of the property to merge.
+ * @param {Object} object The parent object of `objValue`.
+ * @param {Object} source The parent object of `srcValue`.
+ * @param {Object} [stack] Tracks traversed source values and their merged
+ * counterparts.
+ * @returns {*} Returns the value to assign.
+ */
+ function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {
+ if (isObject(objValue) && isObject(srcValue)) {
+ // Recursively merge objects and arrays (susceptible to call stack limits).
+ stack.set(srcValue, objValue);
+ baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);
+ stack['delete'](srcValue);
+ }
+ return objValue;
+ }
+
+ /**
+ * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain
+ * objects.
+ *
+ * @private
+ * @param {*} value The value to inspect.
+ * @param {string} key The key of the property to inspect.
+ * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.
+ */
+ function customOmitClone(value) {
+ return isPlainObject(value) ? undefined : value;
+ }
+
+ /**
+ * A specialized version of `baseIsEqualDeep` for arrays with support for
+ * partial deep comparisons.
+ *
+ * @private
+ * @param {Array} array The array to compare.
+ * @param {Array} other The other array to compare.
+ * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
+ * @param {Function} customizer The function to customize comparisons.
+ * @param {Function} equalFunc The function to determine equivalents of values.
+ * @param {Object} stack Tracks traversed `array` and `other` objects.
+ * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.
+ */
+ function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {
+ var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
+ arrLength = array.length,
+ othLength = other.length;
+
+ if (arrLength != othLength && !(isPartial && othLength > arrLength)) {
+ return false;
+ }
+ // Assume cyclic values are equal.
+ var stacked = stack.get(array);
+ if (stacked && stack.get(other)) {
+ return stacked == other;
+ }
+ var index = -1,
+ result = true,
+ seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;
+
+ stack.set(array, other);
+ stack.set(other, array);
+
+ // Ignore non-index properties.
+ while (++index < arrLength) {
+ var arrValue = array[index],
+ othValue = other[index];
+
+ if (customizer) {
+ var compared = isPartial
+ ? customizer(othValue, arrValue, index, other, array, stack)
+ : customizer(arrValue, othValue, index, array, other, stack);
+ }
+ if (compared !== undefined) {
+ if (compared) {
+ continue;
+ }
+ result = false;
+ break;
+ }
+ // Recursively compare arrays (susceptible to call stack limits).
+ if (seen) {
+ if (!arraySome(other, function(othValue, othIndex) {
+ if (!cacheHas(seen, othIndex) &&
+ (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
+ return seen.push(othIndex);
+ }
+ })) {
+ result = false;
+ break;
+ }
+ } else if (!(
+ arrValue === othValue ||
+ equalFunc(arrValue, othValue, bitmask, customizer, stack)
+ )) {
+ result = false;
+ break;
+ }
+ }
+ stack['delete'](array);
+ stack['delete'](other);
+ return result;
+ }
+
+ /**
+ * A specialized version of `baseIsEqualDeep` for comparing objects of
+ * the same `toStringTag`.
+ *
+ * **Note:** This function only supports comparing values with tags of
+ * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
+ *
+ * @private
+ * @param {Object} object The object to compare.
+ * @param {Object} other The other object to compare.
+ * @param {string} tag The `toStringTag` of the objects to compare.
+ * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
+ * @param {Function} customizer The function to customize comparisons.
+ * @param {Function} equalFunc The function to determine equivalents of values.
+ * @param {Object} stack Tracks traversed `object` and `other` objects.
+ * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
+ */
+ function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {
+ switch (tag) {
+ case dataViewTag:
+ if ((object.byteLength != other.byteLength) ||
+ (object.byteOffset != other.byteOffset)) {
+ return false;
+ }
+ object = object.buffer;
+ other = other.buffer;
+
+ case arrayBufferTag:
+ if ((object.byteLength != other.byteLength) ||
+ !equalFunc(new Uint8Array(object), new Uint8Array(other))) {
+ return false;
+ }
+ return true;
+
+ case boolTag:
+ case dateTag:
+ case numberTag:
+ // Coerce booleans to `1` or `0` and dates to milliseconds.
+ // Invalid dates are coerced to `NaN`.
+ return eq(+object, +other);
+
+ case errorTag:
+ return object.name == other.name && object.message == other.message;
+
+ case regexpTag:
+ case stringTag:
+ // Coerce regexes to strings and treat strings, primitives and objects,
+ // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring
+ // for more details.
+ return object == (other + '');
+
+ case mapTag:
+ var convert = mapToArray;
+
+ case setTag:
+ var isPartial = bitmask & COMPARE_PARTIAL_FLAG;
+ convert || (convert = setToArray);
+
+ if (object.size != other.size && !isPartial) {
+ return false;
+ }
+ // Assume cyclic values are equal.
+ var stacked = stack.get(object);
+ if (stacked) {
+ return stacked == other;
+ }
+ bitmask |= COMPARE_UNORDERED_FLAG;
+
+ // Recursively compare objects (susceptible to call stack limits).
+ stack.set(object, other);
+ var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);
+ stack['delete'](object);
+ return result;
+
+ case symbolTag:
+ if (symbolValueOf) {
+ return symbolValueOf.call(object) == symbolValueOf.call(other);
+ }
+ }
+ return false;
+ }
+
+ /**
+ * A specialized version of `baseIsEqualDeep` for objects with support for
+ * partial deep comparisons.
+ *
+ * @private
+ * @param {Object} object The object to compare.
+ * @param {Object} other The other object to compare.
+ * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
+ * @param {Function} customizer The function to customize comparisons.
+ * @param {Function} equalFunc The function to determine equivalents of values.
+ * @param {Object} stack Tracks traversed `object` and `other` objects.
+ * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
+ */
+ function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {
+ var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
+ objProps = getAllKeys(object),
+ objLength = objProps.length,
+ othProps = getAllKeys(other),
+ othLength = othProps.length;
+
+ if (objLength != othLength && !isPartial) {
+ return false;
+ }
+ var index = objLength;
+ while (index--) {
+ var key = objProps[index];
+ if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {
+ return false;
+ }
+ }
+ // Assume cyclic values are equal.
+ var stacked = stack.get(object);
+ if (stacked && stack.get(other)) {
+ return stacked == other;
+ }
+ var result = true;
+ stack.set(object, other);
+ stack.set(other, object);
+
+ var skipCtor = isPartial;
+ while (++index < objLength) {
+ key = objProps[index];
+ var objValue = object[key],
+ othValue = other[key];
+
+ if (customizer) {
+ var compared = isPartial
+ ? customizer(othValue, objValue, key, other, object, stack)
+ : customizer(objValue, othValue, key, object, other, stack);
+ }
+ // Recursively compare objects (susceptible to call stack limits).
+ if (!(compared === undefined
+ ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))
+ : compared
+ )) {
+ result = false;
+ break;
+ }
+ skipCtor || (skipCtor = key == 'constructor');
+ }
+ if (result && !skipCtor) {
+ var objCtor = object.constructor,
+ othCtor = other.constructor;
+
+ // Non `Object` object instances with different constructors are not equal.
+ if (objCtor != othCtor &&
+ ('constructor' in object && 'constructor' in other) &&
+ !(typeof objCtor == 'function' && objCtor instanceof objCtor &&
+ typeof othCtor == 'function' && othCtor instanceof othCtor)) {
+ result = false;
+ }
+ }
+ stack['delete'](object);
+ stack['delete'](other);
+ return result;
+ }
+
+ /**
+ * A specialized version of `baseRest` which flattens the rest array.
+ *
+ * @private
+ * @param {Function} func The function to apply a rest parameter to.
+ * @returns {Function} Returns the new function.
+ */
+ function flatRest(func) {
+ return setToString(overRest(func, undefined, flatten), func + '');
+ }
+
+ /**
+ * Creates an array of own enumerable property names and symbols of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property names and symbols.
+ */
+ function getAllKeys(object) {
+ return baseGetAllKeys(object, keys, getSymbols);
+ }
+
+ /**
+ * Creates an array of own and inherited enumerable property names and
+ * symbols of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property names and symbols.
+ */
+ function getAllKeysIn(object) {
+ return baseGetAllKeys(object, keysIn, getSymbolsIn);
+ }
+
+ /**
+ * Gets metadata for `func`.
+ *
+ * @private
+ * @param {Function} func The function to query.
+ * @returns {*} Returns the metadata for `func`.
+ */
+ var getData = !metaMap ? noop : function(func) {
+ return metaMap.get(func);
+ };
+
+ /**
+ * Gets the name of `func`.
+ *
+ * @private
+ * @param {Function} func The function to query.
+ * @returns {string} Returns the function name.
+ */
+ function getFuncName(func) {
+ var result = (func.name + ''),
+ array = realNames[result],
+ length = hasOwnProperty.call(realNames, result) ? array.length : 0;
+
+ while (length--) {
+ var data = array[length],
+ otherFunc = data.func;
+ if (otherFunc == null || otherFunc == func) {
+ return data.name;
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Gets the argument placeholder value for `func`.
+ *
+ * @private
+ * @param {Function} func The function to inspect.
+ * @returns {*} Returns the placeholder value.
+ */
+ function getHolder(func) {
+ var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;
+ return object.placeholder;
+ }
+
+ /**
+ * Gets the appropriate "iteratee" function. If `_.iteratee` is customized,
+ * this function returns the custom method, otherwise it returns `baseIteratee`.
+ * If arguments are provided, the chosen function is invoked with them and
+ * its result is returned.
+ *
+ * @private
+ * @param {*} [value] The value to convert to an iteratee.
+ * @param {number} [arity] The arity of the created iteratee.
+ * @returns {Function} Returns the chosen function or its result.
+ */
+ function getIteratee() {
+ var result = lodash.iteratee || iteratee;
+ result = result === iteratee ? baseIteratee : result;
+ return arguments.length ? result(arguments[0], arguments[1]) : result;
+ }
+
+ /**
+ * Gets the data for `map`.
+ *
+ * @private
+ * @param {Object} map The map to query.
+ * @param {string} key The reference key.
+ * @returns {*} Returns the map data.
+ */
+ function getMapData(map, key) {
+ var data = map.__data__;
+ return isKeyable(key)
+ ? data[typeof key == 'string' ? 'string' : 'hash']
+ : data.map;
+ }
+
+ /**
+ * Gets the property names, values, and compare flags of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the match data of `object`.
+ */
+ function getMatchData(object) {
+ var result = keys(object),
+ length = result.length;
+
+ while (length--) {
+ var key = result[length],
+ value = object[key];
+
+ result[length] = [key, value, isStrictComparable(value)];
+ }
+ return result;
+ }
+
+ /**
+ * Gets the native function at `key` of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {string} key The key of the method to get.
+ * @returns {*} Returns the function if it's native, else `undefined`.
+ */
+ function getNative(object, key) {
+ var value = getValue(object, key);
+ return baseIsNative(value) ? value : undefined;
+ }
+
+ /**
+ * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.
+ *
+ * @private
+ * @param {*} value The value to query.
+ * @returns {string} Returns the raw `toStringTag`.
+ */
+ function getRawTag(value) {
+ var isOwn = hasOwnProperty.call(value, symToStringTag),
+ tag = value[symToStringTag];
+
+ try {
+ value[symToStringTag] = undefined;
+ var unmasked = true;
+ } catch (e) {}
+
+ var result = nativeObjectToString.call(value);
+ if (unmasked) {
+ if (isOwn) {
+ value[symToStringTag] = tag;
+ } else {
+ delete value[symToStringTag];
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Creates an array of the own enumerable symbols of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of symbols.
+ */
+ var getSymbols = !nativeGetSymbols ? stubArray : function(object) {
+ if (object == null) {
+ return [];
+ }
+ object = Object(object);
+ return arrayFilter(nativeGetSymbols(object), function(symbol) {
+ return propertyIsEnumerable.call(object, symbol);
+ });
+ };
+
+ /**
+ * Creates an array of the own and inherited enumerable symbols of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of symbols.
+ */
+ var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {
+ var result = [];
+ while (object) {
+ arrayPush(result, getSymbols(object));
+ object = getPrototype(object);
+ }
+ return result;
+ };
+
+ /**
+ * Gets the `toStringTag` of `value`.
+ *
+ * @private
+ * @param {*} value The value to query.
+ * @returns {string} Returns the `toStringTag`.
+ */
+ var getTag = baseGetTag;
+
+ // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.
+ if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||
+ (Map && getTag(new Map) != mapTag) ||
+ (Promise && getTag(Promise.resolve()) != promiseTag) ||
+ (Set && getTag(new Set) != setTag) ||
+ (WeakMap && getTag(new WeakMap) != weakMapTag)) {
+ getTag = function(value) {
+ var result = baseGetTag(value),
+ Ctor = result == objectTag ? value.constructor : undefined,
+ ctorString = Ctor ? toSource(Ctor) : '';
+
+ if (ctorString) {
+ switch (ctorString) {
+ case dataViewCtorString: return dataViewTag;
+ case mapCtorString: return mapTag;
+ case promiseCtorString: return promiseTag;
+ case setCtorString: return setTag;
+ case weakMapCtorString: return weakMapTag;
+ }
+ }
+ return result;
+ };
+ }
+
+ /**
+ * Gets the view, applying any `transforms` to the `start` and `end` positions.
+ *
+ * @private
+ * @param {number} start The start of the view.
+ * @param {number} end The end of the view.
+ * @param {Array} transforms The transformations to apply to the view.
+ * @returns {Object} Returns an object containing the `start` and `end`
+ * positions of the view.
+ */
+ function getView(start, end, transforms) {
+ var index = -1,
+ length = transforms.length;
+
+ while (++index < length) {
+ var data = transforms[index],
+ size = data.size;
+
+ switch (data.type) {
+ case 'drop': start += size; break;
+ case 'dropRight': end -= size; break;
+ case 'take': end = nativeMin(end, start + size); break;
+ case 'takeRight': start = nativeMax(start, end - size); break;
+ }
+ }
+ return { 'start': start, 'end': end };
+ }
+
+ /**
+ * Extracts wrapper details from the `source` body comment.
+ *
+ * @private
+ * @param {string} source The source to inspect.
+ * @returns {Array} Returns the wrapper details.
+ */
+ function getWrapDetails(source) {
+ var match = source.match(reWrapDetails);
+ return match ? match[1].split(reSplitDetails) : [];
+ }
+
+ /**
+ * Checks if `path` exists on `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {Array|string} path The path to check.
+ * @param {Function} hasFunc The function to check properties.
+ * @returns {boolean} Returns `true` if `path` exists, else `false`.
+ */
+ function hasPath(object, path, hasFunc) {
+ path = castPath(path, object);
+
+ var index = -1,
+ length = path.length,
+ result = false;
+
+ while (++index < length) {
+ var key = toKey(path[index]);
+ if (!(result = object != null && hasFunc(object, key))) {
+ break;
+ }
+ object = object[key];
+ }
+ if (result || ++index != length) {
+ return result;
+ }
+ length = object == null ? 0 : object.length;
+ return !!length && isLength(length) && isIndex(key, length) &&
+ (isArray(object) || isArguments(object));
+ }
+
+ /**
+ * Initializes an array clone.
+ *
+ * @private
+ * @param {Array} array The array to clone.
+ * @returns {Array} Returns the initialized clone.
+ */
+ function initCloneArray(array) {
+ var length = array.length,
+ result = new array.constructor(length);
+
+ // Add properties assigned by `RegExp#exec`.
+ if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {
+ result.index = array.index;
+ result.input = array.input;
+ }
+ return result;
+ }
+
+ /**
+ * Initializes an object clone.
+ *
+ * @private
+ * @param {Object} object The object to clone.
+ * @returns {Object} Returns the initialized clone.
+ */
+ function initCloneObject(object) {
+ return (typeof object.constructor == 'function' && !isPrototype(object))
+ ? baseCreate(getPrototype(object))
+ : {};
+ }
+
+ /**
+ * Initializes an object clone based on its `toStringTag`.
+ *
+ * **Note:** This function only supports cloning values with tags of
+ * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.
+ *
+ * @private
+ * @param {Object} object The object to clone.
+ * @param {string} tag The `toStringTag` of the object to clone.
+ * @param {boolean} [isDeep] Specify a deep clone.
+ * @returns {Object} Returns the initialized clone.
+ */
+ function initCloneByTag(object, tag, isDeep) {
+ var Ctor = object.constructor;
+ switch (tag) {
+ case arrayBufferTag:
+ return cloneArrayBuffer(object);
+
+ case boolTag:
+ case dateTag:
+ return new Ctor(+object);
+
+ case dataViewTag:
+ return cloneDataView(object, isDeep);
+
+ case float32Tag: case float64Tag:
+ case int8Tag: case int16Tag: case int32Tag:
+ case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:
+ return cloneTypedArray(object, isDeep);
+
+ case mapTag:
+ return new Ctor;
+
+ case numberTag:
+ case stringTag:
+ return new Ctor(object);
+
+ case regexpTag:
+ return cloneRegExp(object);
+
+ case setTag:
+ return new Ctor;
+
+ case symbolTag:
+ return cloneSymbol(object);
+ }
+ }
+
+ /**
+ * Inserts wrapper `details` in a comment at the top of the `source` body.
+ *
+ * @private
+ * @param {string} source The source to modify.
+ * @returns {Array} details The details to insert.
+ * @returns {string} Returns the modified source.
+ */
+ function insertWrapDetails(source, details) {
+ var length = details.length;
+ if (!length) {
+ return source;
+ }
+ var lastIndex = length - 1;
+ details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];
+ details = details.join(length > 2 ? ', ' : ' ');
+ return source.replace(reWrapComment, '{\n/* [wrapped with ' + details + '] */\n');
+ }
+
+ /**
+ * Checks if `value` is a flattenable `arguments` object or array.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.
+ */
+ function isFlattenable(value) {
+ return isArray(value) || isArguments(value) ||
+ !!(spreadableSymbol && value && value[spreadableSymbol]);
+ }
+
+ /**
+ * Checks if `value` is a valid array-like index.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
+ * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
+ */
+ function isIndex(value, length) {
+ var type = typeof value;
+ length = length == null ? MAX_SAFE_INTEGER : length;
+
+ return !!length &&
+ (type == 'number' ||
+ (type != 'symbol' && reIsUint.test(value))) &&
+ (value > -1 && value % 1 == 0 && value < length);
+ }
+
+ /**
+ * Checks if the given arguments are from an iteratee call.
+ *
+ * @private
+ * @param {*} value The potential iteratee value argument.
+ * @param {*} index The potential iteratee index or key argument.
+ * @param {*} object The potential iteratee object argument.
+ * @returns {boolean} Returns `true` if the arguments are from an iteratee call,
+ * else `false`.
+ */
+ function isIterateeCall(value, index, object) {
+ if (!isObject(object)) {
+ return false;
+ }
+ var type = typeof index;
+ if (type == 'number'
+ ? (isArrayLike(object) && isIndex(index, object.length))
+ : (type == 'string' && index in object)
+ ) {
+ return eq(object[index], value);
+ }
+ return false;
+ }
+
+ /**
+ * Checks if `value` is a property name and not a property path.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @param {Object} [object] The object to query keys on.
+ * @returns {boolean} Returns `true` if `value` is a property name, else `false`.
+ */
+ function isKey(value, object) {
+ if (isArray(value)) {
+ return false;
+ }
+ var type = typeof value;
+ if (type == 'number' || type == 'symbol' || type == 'boolean' ||
+ value == null || isSymbol(value)) {
+ return true;
+ }
+ return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||
+ (object != null && value in Object(object));
+ }
+
+ /**
+ * Checks if `value` is suitable for use as unique object key.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
+ */
+ function isKeyable(value) {
+ var type = typeof value;
+ return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')
+ ? (value !== '__proto__')
+ : (value === null);
+ }
+
+ /**
+ * Checks if `func` has a lazy counterpart.
+ *
+ * @private
+ * @param {Function} func The function to check.
+ * @returns {boolean} Returns `true` if `func` has a lazy counterpart,
+ * else `false`.
+ */
+ function isLaziable(func) {
+ var funcName = getFuncName(func),
+ other = lodash[funcName];
+
+ if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {
+ return false;
+ }
+ if (func === other) {
+ return true;
+ }
+ var data = getData(other);
+ return !!data && func === data[0];
+ }
+
+ /**
+ * Checks if `func` has its source masked.
+ *
+ * @private
+ * @param {Function} func The function to check.
+ * @returns {boolean} Returns `true` if `func` is masked, else `false`.
+ */
+ function isMasked(func) {
+ return !!maskSrcKey && (maskSrcKey in func);
+ }
+
+ /**
+ * Checks if `func` is capable of being masked.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `func` is maskable, else `false`.
+ */
+ var isMaskable = coreJsData ? isFunction : stubFalse;
+
+ /**
+ * Checks if `value` is likely a prototype object.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.
+ */
+ function isPrototype(value) {
+ var Ctor = value && value.constructor,
+ proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;
+
+ return value === proto;
+ }
+
+ /**
+ * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` if suitable for strict
+ * equality comparisons, else `false`.
+ */
+ function isStrictComparable(value) {
+ return value === value && !isObject(value);
+ }
+
+ /**
+ * A specialized version of `matchesProperty` for source values suitable
+ * for strict equality comparisons, i.e. `===`.
+ *
+ * @private
+ * @param {string} key The key of the property to get.
+ * @param {*} srcValue The value to match.
+ * @returns {Function} Returns the new spec function.
+ */
+ function matchesStrictComparable(key, srcValue) {
+ return function(object) {
+ if (object == null) {
+ return false;
+ }
+ return object[key] === srcValue &&
+ (srcValue !== undefined || (key in Object(object)));
+ };
+ }
+
+ /**
+ * A specialized version of `_.memoize` which clears the memoized function's
+ * cache when it exceeds `MAX_MEMOIZE_SIZE`.
+ *
+ * @private
+ * @param {Function} func The function to have its output memoized.
+ * @returns {Function} Returns the new memoized function.
+ */
+ function memoizeCapped(func) {
+ var result = memoize(func, function(key) {
+ if (cache.size === MAX_MEMOIZE_SIZE) {
+ cache.clear();
+ }
+ return key;
+ });
+
+ var cache = result.cache;
+ return result;
+ }
+
+ /**
+ * Merges the function metadata of `source` into `data`.
+ *
+ * Merging metadata reduces the number of wrappers used to invoke a function.
+ * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`
+ * may be applied regardless of execution order. Methods like `_.ary` and
+ * `_.rearg` modify function arguments, making the order in which they are
+ * executed important, preventing the merging of metadata. However, we make
+ * an exception for a safe combined case where curried functions have `_.ary`
+ * and or `_.rearg` applied.
+ *
+ * @private
+ * @param {Array} data The destination metadata.
+ * @param {Array} source The source metadata.
+ * @returns {Array} Returns `data`.
+ */
+ function mergeData(data, source) {
+ var bitmask = data[1],
+ srcBitmask = source[1],
+ newBitmask = bitmask | srcBitmask,
+ isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);
+
+ var isCombo =
+ ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||
+ ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||
+ ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));
+
+ // Exit early if metadata can't be merged.
+ if (!(isCommon || isCombo)) {
+ return data;
+ }
+ // Use source `thisArg` if available.
+ if (srcBitmask & WRAP_BIND_FLAG) {
+ data[2] = source[2];
+ // Set when currying a bound function.
+ newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;
+ }
+ // Compose partial arguments.
+ var value = source[3];
+ if (value) {
+ var partials = data[3];
+ data[3] = partials ? composeArgs(partials, value, source[4]) : value;
+ data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];
+ }
+ // Compose partial right arguments.
+ value = source[5];
+ if (value) {
+ partials = data[5];
+ data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;
+ data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];
+ }
+ // Use source `argPos` if available.
+ value = source[7];
+ if (value) {
+ data[7] = value;
+ }
+ // Use source `ary` if it's smaller.
+ if (srcBitmask & WRAP_ARY_FLAG) {
+ data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);
+ }
+ // Use source `arity` if one is not provided.
+ if (data[9] == null) {
+ data[9] = source[9];
+ }
+ // Use source `func` and merge bitmasks.
+ data[0] = source[0];
+ data[1] = newBitmask;
+
+ return data;
+ }
+
+ /**
+ * This function is like
+ * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
+ * except that it includes inherited enumerable properties.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property names.
+ */
+ function nativeKeysIn(object) {
+ var result = [];
+ if (object != null) {
+ for (var key in Object(object)) {
+ result.push(key);
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Converts `value` to a string using `Object.prototype.toString`.
+ *
+ * @private
+ * @param {*} value The value to convert.
+ * @returns {string} Returns the converted string.
+ */
+ function objectToString(value) {
+ return nativeObjectToString.call(value);
+ }
+
+ /**
+ * A specialized version of `baseRest` which transforms the rest array.
+ *
+ * @private
+ * @param {Function} func The function to apply a rest parameter to.
+ * @param {number} [start=func.length-1] The start position of the rest parameter.
+ * @param {Function} transform The rest array transform.
+ * @returns {Function} Returns the new function.
+ */
+ function overRest(func, start, transform) {
+ start = nativeMax(start === undefined ? (func.length - 1) : start, 0);
+ return function() {
+ var args = arguments,
+ index = -1,
+ length = nativeMax(args.length - start, 0),
+ array = Array(length);
+
+ while (++index < length) {
+ array[index] = args[start + index];
+ }
+ index = -1;
+ var otherArgs = Array(start + 1);
+ while (++index < start) {
+ otherArgs[index] = args[index];
+ }
+ otherArgs[start] = transform(array);
+ return apply(func, this, otherArgs);
+ };
+ }
+
+ /**
+ * Gets the parent value at `path` of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {Array} path The path to get the parent value of.
+ * @returns {*} Returns the parent value.
+ */
+ function parent(object, path) {
+ return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));
+ }
+
+ /**
+ * Reorder `array` according to the specified indexes where the element at
+ * the first index is assigned as the first element, the element at
+ * the second index is assigned as the second element, and so on.
+ *
+ * @private
+ * @param {Array} array The array to reorder.
+ * @param {Array} indexes The arranged array indexes.
+ * @returns {Array} Returns `array`.
+ */
+ function reorder(array, indexes) {
+ var arrLength = array.length,
+ length = nativeMin(indexes.length, arrLength),
+ oldArray = copyArray(array);
+
+ while (length--) {
+ var index = indexes[length];
+ array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;
+ }
+ return array;
+ }
+
+ /**
+ * Sets metadata for `func`.
+ *
+ * **Note:** If this function becomes hot, i.e. is invoked a lot in a short
+ * period of time, it will trip its breaker and transition to an identity
+ * function to avoid garbage collection pauses in V8. See
+ * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)
+ * for more details.
+ *
+ * @private
+ * @param {Function} func The function to associate metadata with.
+ * @param {*} data The metadata.
+ * @returns {Function} Returns `func`.
+ */
+ var setData = shortOut(baseSetData);
+
+ /**
+ * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).
+ *
+ * @private
+ * @param {Function} func The function to delay.
+ * @param {number} wait The number of milliseconds to delay invocation.
+ * @returns {number|Object} Returns the timer id or timeout object.
+ */
+ var setTimeout = ctxSetTimeout || function(func, wait) {
+ return root.setTimeout(func, wait);
+ };
+
+ /**
+ * Sets the `toString` method of `func` to return `string`.
+ *
+ * @private
+ * @param {Function} func The function to modify.
+ * @param {Function} string The `toString` result.
+ * @returns {Function} Returns `func`.
+ */
+ var setToString = shortOut(baseSetToString);
+
+ /**
+ * Sets the `toString` method of `wrapper` to mimic the source of `reference`
+ * with wrapper details in a comment at the top of the source body.
+ *
+ * @private
+ * @param {Function} wrapper The function to modify.
+ * @param {Function} reference The reference function.
+ * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
+ * @returns {Function} Returns `wrapper`.
+ */
+ function setWrapToString(wrapper, reference, bitmask) {
+ var source = (reference + '');
+ return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));
+ }
+
+ /**
+ * Creates a function that'll short out and invoke `identity` instead
+ * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`
+ * milliseconds.
+ *
+ * @private
+ * @param {Function} func The function to restrict.
+ * @returns {Function} Returns the new shortable function.
+ */
+ function shortOut(func) {
+ var count = 0,
+ lastCalled = 0;
+
+ return function() {
+ var stamp = nativeNow(),
+ remaining = HOT_SPAN - (stamp - lastCalled);
+
+ lastCalled = stamp;
+ if (remaining > 0) {
+ if (++count >= HOT_COUNT) {
+ return arguments[0];
+ }
+ } else {
+ count = 0;
+ }
+ return func.apply(undefined, arguments);
+ };
+ }
+
+ /**
+ * A specialized version of `_.shuffle` which mutates and sets the size of `array`.
+ *
+ * @private
+ * @param {Array} array The array to shuffle.
+ * @param {number} [size=array.length] The size of `array`.
+ * @returns {Array} Returns `array`.
+ */
+ function shuffleSelf(array, size) {
+ var index = -1,
+ length = array.length,
+ lastIndex = length - 1;
+
+ size = size === undefined ? length : size;
+ while (++index < size) {
+ var rand = baseRandom(index, lastIndex),
+ value = array[rand];
+
+ array[rand] = array[index];
+ array[index] = value;
+ }
+ array.length = size;
+ return array;
+ }
+
+ /**
+ * Converts `string` to a property path array.
+ *
+ * @private
+ * @param {string} string The string to convert.
+ * @returns {Array} Returns the property path array.
+ */
+ var stringToPath = memoizeCapped(function(string) {
+ var result = [];
+ if (string.charCodeAt(0) === 46 /* . */) {
+ result.push('');
+ }
+ string.replace(rePropName, function(match, number, quote, subString) {
+ result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));
+ });
+ return result;
+ });
+
+ /**
+ * Converts `value` to a string key if it's not a string or symbol.
+ *
+ * @private
+ * @param {*} value The value to inspect.
+ * @returns {string|symbol} Returns the key.
+ */
+ function toKey(value) {
+ if (typeof value == 'string' || isSymbol(value)) {
+ return value;
+ }
+ var result = (value + '');
+ return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
+ }
+
+ /**
+ * Converts `func` to its source code.
+ *
+ * @private
+ * @param {Function} func The function to convert.
+ * @returns {string} Returns the source code.
+ */
+ function toSource(func) {
+ if (func != null) {
+ try {
+ return funcToString.call(func);
+ } catch (e) {}
+ try {
+ return (func + '');
+ } catch (e) {}
+ }
+ return '';
+ }
+
+ /**
+ * Updates wrapper `details` based on `bitmask` flags.
+ *
+ * @private
+ * @returns {Array} details The details to modify.
+ * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
+ * @returns {Array} Returns `details`.
+ */
+ function updateWrapDetails(details, bitmask) {
+ arrayEach(wrapFlags, function(pair) {
+ var value = '_.' + pair[0];
+ if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {
+ details.push(value);
+ }
+ });
+ return details.sort();
+ }
+
+ /**
+ * Creates a clone of `wrapper`.
+ *
+ * @private
+ * @param {Object} wrapper The wrapper to clone.
+ * @returns {Object} Returns the cloned wrapper.
+ */
+ function wrapperClone(wrapper) {
+ if (wrapper instanceof LazyWrapper) {
+ return wrapper.clone();
+ }
+ var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);
+ result.__actions__ = copyArray(wrapper.__actions__);
+ result.__index__ = wrapper.__index__;
+ result.__values__ = wrapper.__values__;
+ return result;
+ }
+
+ /*------------------------------------------------------------------------*/
+
+ /**
+ * Creates an array of elements split into groups the length of `size`.
+ * If `array` can't be split evenly, the final chunk will be the remaining
+ * elements.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category Array
+ * @param {Array} array The array to process.
+ * @param {number} [size=1] The length of each chunk
+ * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
+ * @returns {Array} Returns the new array of chunks.
+ * @example
+ *
+ * _.chunk(['a', 'b', 'c', 'd'], 2);
+ * // => [['a', 'b'], ['c', 'd']]
+ *
+ * _.chunk(['a', 'b', 'c', 'd'], 3);
+ * // => [['a', 'b', 'c'], ['d']]
+ */
+ function chunk(array, size, guard) {
+ if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {
+ size = 1;
+ } else {
+ size = nativeMax(toInteger(size), 0);
+ }
+ var length = array == null ? 0 : array.length;
+ if (!length || size < 1) {
+ return [];
+ }
+ var index = 0,
+ resIndex = 0,
+ result = Array(nativeCeil(length / size));
+
+ while (index < length) {
+ result[resIndex++] = baseSlice(array, index, (index += size));
+ }
+ return result;
+ }
+
+ /**
+ * Creates an array with all falsey values removed. The values `false`, `null`,
+ * `0`, `""`, `undefined`, and `NaN` are falsey.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Array
+ * @param {Array} array The array to compact.
+ * @returns {Array} Returns the new array of filtered values.
+ * @example
+ *
+ * _.compact([0, 1, false, 2, '', 3]);
+ * // => [1, 2, 3]
+ */
+ function compact(array) {
+ var index = -1,
+ length = array == null ? 0 : array.length,
+ resIndex = 0,
+ result = [];
+
+ while (++index < length) {
+ var value = array[index];
+ if (value) {
+ result[resIndex++] = value;
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Creates a new array concatenating `array` with any additional arrays
+ * and/or values.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Array
+ * @param {Array} array The array to concatenate.
+ * @param {...*} [values] The values to concatenate.
+ * @returns {Array} Returns the new concatenated array.
+ * @example
+ *
+ * var array = [1];
+ * var other = _.concat(array, 2, [3], [[4]]);
+ *
+ * console.log(other);
+ * // => [1, 2, 3, [4]]
+ *
+ * console.log(array);
+ * // => [1]
+ */
+ function concat() {
+ var length = arguments.length;
+ if (!length) {
+ return [];
+ }
+ var args = Array(length - 1),
+ array = arguments[0],
+ index = length;
+
+ while (index--) {
+ args[index - 1] = arguments[index];
+ }
+ return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));
+ }
+
+ /**
+ * Creates an array of `array` values not included in the other given arrays
+ * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
+ * for equality comparisons. The order and references of result values are
+ * determined by the first array.
+ *
+ * **Note:** Unlike `_.pullAll`, this method returns a new array.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Array
+ * @param {Array} array The array to inspect.
+ * @param {...Array} [values] The values to exclude.
+ * @returns {Array} Returns the new array of filtered values.
+ * @see _.without, _.xor
+ * @example
+ *
+ * _.difference([2, 1], [2, 3]);
+ * // => [1]
+ */
+ var difference = baseRest(function(array, values) {
+ return isArrayLikeObject(array)
+ ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))
+ : [];
+ });
+
+ /**
+ * This method is like `_.difference` except that it accepts `iteratee` which
+ * is invoked for each element of `array` and `values` to generate the criterion
+ * by which they're compared. The order and references of result values are
+ * determined by the first array. The iteratee is invoked with one argument:
+ * (value).
+ *
+ * **Note:** Unlike `_.pullAllBy`, this method returns a new array.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Array
+ * @param {Array} array The array to inspect.
+ * @param {...Array} [values] The values to exclude.
+ * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
+ * @returns {Array} Returns the new array of filtered values.
+ * @example
+ *
+ * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);
+ * // => [1.2]
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');
+ * // => [{ 'x': 2 }]
+ */
+ var differenceBy = baseRest(function(array, values) {
+ var iteratee = last(values);
+ if (isArrayLikeObject(iteratee)) {
+ iteratee = undefined;
+ }
+ return isArrayLikeObject(array)
+ ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))
+ : [];
+ });
+
+ /**
+ * This method is like `_.difference` except that it accepts `comparator`
+ * which is invoked to compare elements of `array` to `values`. The order and
+ * references of result values are determined by the first array. The comparator
+ * is invoked with two arguments: (arrVal, othVal).
+ *
+ * **Note:** Unlike `_.pullAllWith`, this method returns a new array.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Array
+ * @param {Array} array The array to inspect.
+ * @param {...Array} [values] The values to exclude.
+ * @param {Function} [comparator] The comparator invoked per element.
+ * @returns {Array} Returns the new array of filtered values.
+ * @example
+ *
+ * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
+ *
+ * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);
+ * // => [{ 'x': 2, 'y': 1 }]
+ */
+ var differenceWith = baseRest(function(array, values) {
+ var comparator = last(values);
+ if (isArrayLikeObject(comparator)) {
+ comparator = undefined;
+ }
+ return isArrayLikeObject(array)
+ ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)
+ : [];
+ });
+
+ /**
+ * Creates a slice of `array` with `n` elements dropped from the beginning.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.5.0
+ * @category Array
+ * @param {Array} array The array to query.
+ * @param {number} [n=1] The number of elements to drop.
+ * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
+ * @returns {Array} Returns the slice of `array`.
+ * @example
+ *
+ * _.drop([1, 2, 3]);
+ * // => [2, 3]
+ *
+ * _.drop([1, 2, 3], 2);
+ * // => [3]
+ *
+ * _.drop([1, 2, 3], 5);
+ * // => []
+ *
+ * _.drop([1, 2, 3], 0);
+ * // => [1, 2, 3]
+ */
+ function drop(array, n, guard) {
+ var length = array == null ? 0 : array.length;
+ if (!length) {
+ return [];
+ }
+ n = (guard || n === undefined) ? 1 : toInteger(n);
+ return baseSlice(array, n < 0 ? 0 : n, length);
+ }
+
+ /**
+ * Creates a slice of `array` with `n` elements dropped from the end.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category Array
+ * @param {Array} array The array to query.
+ * @param {number} [n=1] The number of elements to drop.
+ * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
+ * @returns {Array} Returns the slice of `array`.
+ * @example
+ *
+ * _.dropRight([1, 2, 3]);
+ * // => [1, 2]
+ *
+ * _.dropRight([1, 2, 3], 2);
+ * // => [1]
+ *
+ * _.dropRight([1, 2, 3], 5);
+ * // => []
+ *
+ * _.dropRight([1, 2, 3], 0);
+ * // => [1, 2, 3]
+ */
+ function dropRight(array, n, guard) {
+ var length = array == null ? 0 : array.length;
+ if (!length) {
+ return [];
+ }
+ n = (guard || n === undefined) ? 1 : toInteger(n);
+ n = length - n;
+ return baseSlice(array, 0, n < 0 ? 0 : n);
+ }
+
+ /**
+ * Creates a slice of `array` excluding elements dropped from the end.
+ * Elements are dropped until `predicate` returns falsey. The predicate is
+ * invoked with three arguments: (value, index, array).
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category Array
+ * @param {Array} array The array to query.
+ * @param {Function} [predicate=_.identity] The function invoked per iteration.
+ * @returns {Array} Returns the slice of `array`.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'barney', 'active': true },
+ * { 'user': 'fred', 'active': false },
+ * { 'user': 'pebbles', 'active': false }
+ * ];
+ *
+ * _.dropRightWhile(users, function(o) { return !o.active; });
+ * // => objects for ['barney']
+ *
+ * // The `_.matches` iteratee shorthand.
+ * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });
+ * // => objects for ['barney', 'fred']
+ *
+ * // The `_.matchesProperty` iteratee shorthand.
+ * _.dropRightWhile(users, ['active', false]);
+ * // => objects for ['barney']
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.dropRightWhile(users, 'active');
+ * // => objects for ['barney', 'fred', 'pebbles']
+ */
+ function dropRightWhile(array, predicate) {
+ return (array && array.length)
+ ? baseWhile(array, getIteratee(predicate, 3), true, true)
+ : [];
+ }
+
+ /**
+ * Creates a slice of `array` excluding elements dropped from the beginning.
+ * Elements are dropped until `predicate` returns falsey. The predicate is
+ * invoked with three arguments: (value, index, array).
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category Array
+ * @param {Array} array The array to query.
+ * @param {Function} [predicate=_.identity] The function invoked per iteration.
+ * @returns {Array} Returns the slice of `array`.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'barney', 'active': false },
+ * { 'user': 'fred', 'active': false },
+ * { 'user': 'pebbles', 'active': true }
+ * ];
+ *
+ * _.dropWhile(users, function(o) { return !o.active; });
+ * // => objects for ['pebbles']
+ *
+ * // The `_.matches` iteratee shorthand.
+ * _.dropWhile(users, { 'user': 'barney', 'active': false });
+ * // => objects for ['fred', 'pebbles']
+ *
+ * // The `_.matchesProperty` iteratee shorthand.
+ * _.dropWhile(users, ['active', false]);
+ * // => objects for ['pebbles']
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.dropWhile(users, 'active');
+ * // => objects for ['barney', 'fred', 'pebbles']
+ */
+ function dropWhile(array, predicate) {
+ return (array && array.length)
+ ? baseWhile(array, getIteratee(predicate, 3), true)
+ : [];
+ }
+
+ /**
+ * Fills elements of `array` with `value` from `start` up to, but not
+ * including, `end`.
+ *
+ * **Note:** This method mutates `array`.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.2.0
+ * @category Array
+ * @param {Array} array The array to fill.
+ * @param {*} value The value to fill `array` with.
+ * @param {number} [start=0] The start position.
+ * @param {number} [end=array.length] The end position.
+ * @returns {Array} Returns `array`.
+ * @example
+ *
+ * var array = [1, 2, 3];
+ *
+ * _.fill(array, 'a');
+ * console.log(array);
+ * // => ['a', 'a', 'a']
+ *
+ * _.fill(Array(3), 2);
+ * // => [2, 2, 2]
+ *
+ * _.fill([4, 6, 8, 10], '*', 1, 3);
+ * // => [4, '*', '*', 10]
+ */
+ function fill(array, value, start, end) {
+ var length = array == null ? 0 : array.length;
+ if (!length) {
+ return [];
+ }
+ if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {
+ start = 0;
+ end = length;
+ }
+ return baseFill(array, value, start, end);
+ }
+
+ /**
+ * This method is like `_.find` except that it returns the index of the first
+ * element `predicate` returns truthy for instead of the element itself.
+ *
+ * @static
+ * @memberOf _
+ * @since 1.1.0
+ * @category Array
+ * @param {Array} array The array to inspect.
+ * @param {Function} [predicate=_.identity] The function invoked per iteration.
+ * @param {number} [fromIndex=0] The index to search from.
+ * @returns {number} Returns the index of the found element, else `-1`.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'barney', 'active': false },
+ * { 'user': 'fred', 'active': false },
+ * { 'user': 'pebbles', 'active': true }
+ * ];
+ *
+ * _.findIndex(users, function(o) { return o.user == 'barney'; });
+ * // => 0
+ *
+ * // The `_.matches` iteratee shorthand.
+ * _.findIndex(users, { 'user': 'fred', 'active': false });
+ * // => 1
+ *
+ * // The `_.matchesProperty` iteratee shorthand.
+ * _.findIndex(users, ['active', false]);
+ * // => 0
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.findIndex(users, 'active');
+ * // => 2
+ */
+ function findIndex(array, predicate, fromIndex) {
+ var length = array == null ? 0 : array.length;
+ if (!length) {
+ return -1;
+ }
+ var index = fromIndex == null ? 0 : toInteger(fromIndex);
+ if (index < 0) {
+ index = nativeMax(length + index, 0);
+ }
+ return baseFindIndex(array, getIteratee(predicate, 3), index);
+ }
+
+ /**
+ * This method is like `_.findIndex` except that it iterates over elements
+ * of `collection` from right to left.
+ *
+ * @static
+ * @memberOf _
+ * @since 2.0.0
+ * @category Array
+ * @param {Array} array The array to inspect.
+ * @param {Function} [predicate=_.identity] The function invoked per iteration.
+ * @param {number} [fromIndex=array.length-1] The index to search from.
+ * @returns {number} Returns the index of the found element, else `-1`.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'barney', 'active': true },
+ * { 'user': 'fred', 'active': false },
+ * { 'user': 'pebbles', 'active': false }
+ * ];
+ *
+ * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });
+ * // => 2
+ *
+ * // The `_.matches` iteratee shorthand.
+ * _.findLastIndex(users, { 'user': 'barney', 'active': true });
+ * // => 0
+ *
+ * // The `_.matchesProperty` iteratee shorthand.
+ * _.findLastIndex(users, ['active', false]);
+ * // => 2
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.findLastIndex(users, 'active');
+ * // => 0
+ */
+ function findLastIndex(array, predicate, fromIndex) {
+ var length = array == null ? 0 : array.length;
+ if (!length) {
+ return -1;
+ }
+ var index = length - 1;
+ if (fromIndex !== undefined) {
+ index = toInteger(fromIndex);
+ index = fromIndex < 0
+ ? nativeMax(length + index, 0)
+ : nativeMin(index, length - 1);
+ }
+ return baseFindIndex(array, getIteratee(predicate, 3), index, true);
+ }
+
+ /**
+ * Flattens `array` a single level deep.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Array
+ * @param {Array} array The array to flatten.
+ * @returns {Array} Returns the new flattened array.
+ * @example
+ *
+ * _.flatten([1, [2, [3, [4]], 5]]);
+ * // => [1, 2, [3, [4]], 5]
+ */
+ function flatten(array) {
+ var length = array == null ? 0 : array.length;
+ return length ? baseFlatten(array, 1) : [];
+ }
+
+ /**
+ * Recursively flattens `array`.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category Array
+ * @param {Array} array The array to flatten.
+ * @returns {Array} Returns the new flattened array.
+ * @example
+ *
+ * _.flattenDeep([1, [2, [3, [4]], 5]]);
+ * // => [1, 2, 3, 4, 5]
+ */
+ function flattenDeep(array) {
+ var length = array == null ? 0 : array.length;
+ return length ? baseFlatten(array, INFINITY) : [];
+ }
+
+ /**
+ * Recursively flatten `array` up to `depth` times.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.4.0
+ * @category Array
+ * @param {Array} array The array to flatten.
+ * @param {number} [depth=1] The maximum recursion depth.
+ * @returns {Array} Returns the new flattened array.
+ * @example
+ *
+ * var array = [1, [2, [3, [4]], 5]];
+ *
+ * _.flattenDepth(array, 1);
+ * // => [1, 2, [3, [4]], 5]
+ *
+ * _.flattenDepth(array, 2);
+ * // => [1, 2, 3, [4], 5]
+ */
+ function flattenDepth(array, depth) {
+ var length = array == null ? 0 : array.length;
+ if (!length) {
+ return [];
+ }
+ depth = depth === undefined ? 1 : toInteger(depth);
+ return baseFlatten(array, depth);
+ }
+
+ /**
+ * The inverse of `_.toPairs`; this method returns an object composed
+ * from key-value `pairs`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Array
+ * @param {Array} pairs The key-value pairs.
+ * @returns {Object} Returns the new object.
+ * @example
+ *
+ * _.fromPairs([['a', 1], ['b', 2]]);
+ * // => { 'a': 1, 'b': 2 }
+ */
+ function fromPairs(pairs) {
+ var index = -1,
+ length = pairs == null ? 0 : pairs.length,
+ result = {};
+
+ while (++index < length) {
+ var pair = pairs[index];
+ result[pair[0]] = pair[1];
+ }
+ return result;
+ }
+
+ /**
+ * Gets the first element of `array`.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @alias first
+ * @category Array
+ * @param {Array} array The array to query.
+ * @returns {*} Returns the first element of `array`.
+ * @example
+ *
+ * _.head([1, 2, 3]);
+ * // => 1
+ *
+ * _.head([]);
+ * // => undefined
+ */
+ function head(array) {
+ return (array && array.length) ? array[0] : undefined;
+ }
+
+ /**
+ * Gets the index at which the first occurrence of `value` is found in `array`
+ * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
+ * for equality comparisons. If `fromIndex` is negative, it's used as the
+ * offset from the end of `array`.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Array
+ * @param {Array} array The array to inspect.
+ * @param {*} value The value to search for.
+ * @param {number} [fromIndex=0] The index to search from.
+ * @returns {number} Returns the index of the matched value, else `-1`.
+ * @example
+ *
+ * _.indexOf([1, 2, 1, 2], 2);
+ * // => 1
+ *
+ * // Search from the `fromIndex`.
+ * _.indexOf([1, 2, 1, 2], 2, 2);
+ * // => 3
+ */
+ function indexOf(array, value, fromIndex) {
+ var length = array == null ? 0 : array.length;
+ if (!length) {
+ return -1;
+ }
+ var index = fromIndex == null ? 0 : toInteger(fromIndex);
+ if (index < 0) {
+ index = nativeMax(length + index, 0);
+ }
+ return baseIndexOf(array, value, index);
+ }
+
+ /**
+ * Gets all but the last element of `array`.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Array
+ * @param {Array} array The array to query.
+ * @returns {Array} Returns the slice of `array`.
+ * @example
+ *
+ * _.initial([1, 2, 3]);
+ * // => [1, 2]
+ */
+ function initial(array) {
+ var length = array == null ? 0 : array.length;
+ return length ? baseSlice(array, 0, -1) : [];
+ }
+
+ /**
+ * Creates an array of unique values that are included in all given arrays
+ * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
+ * for equality comparisons. The order and references of result values are
+ * determined by the first array.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Array
+ * @param {...Array} [arrays] The arrays to inspect.
+ * @returns {Array} Returns the new array of intersecting values.
+ * @example
+ *
+ * _.intersection([2, 1], [2, 3]);
+ * // => [2]
+ */
+ var intersection = baseRest(function(arrays) {
+ var mapped = arrayMap(arrays, castArrayLikeObject);
+ return (mapped.length && mapped[0] === arrays[0])
+ ? baseIntersection(mapped)
+ : [];
+ });
+
+ /**
+ * This method is like `_.intersection` except that it accepts `iteratee`
+ * which is invoked for each element of each `arrays` to generate the criterion
+ * by which they're compared. The order and references of result values are
+ * determined by the first array. The iteratee is invoked with one argument:
+ * (value).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Array
+ * @param {...Array} [arrays] The arrays to inspect.
+ * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
+ * @returns {Array} Returns the new array of intersecting values.
+ * @example
+ *
+ * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);
+ * // => [2.1]
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
+ * // => [{ 'x': 1 }]
+ */
+ var intersectionBy = baseRest(function(arrays) {
+ var iteratee = last(arrays),
+ mapped = arrayMap(arrays, castArrayLikeObject);
+
+ if (iteratee === last(mapped)) {
+ iteratee = undefined;
+ } else {
+ mapped.pop();
+ }
+ return (mapped.length && mapped[0] === arrays[0])
+ ? baseIntersection(mapped, getIteratee(iteratee, 2))
+ : [];
+ });
+
+ /**
+ * This method is like `_.intersection` except that it accepts `comparator`
+ * which is invoked to compare elements of `arrays`. The order and references
+ * of result values are determined by the first array. The comparator is
+ * invoked with two arguments: (arrVal, othVal).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Array
+ * @param {...Array} [arrays] The arrays to inspect.
+ * @param {Function} [comparator] The comparator invoked per element.
+ * @returns {Array} Returns the new array of intersecting values.
+ * @example
+ *
+ * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
+ * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
+ *
+ * _.intersectionWith(objects, others, _.isEqual);
+ * // => [{ 'x': 1, 'y': 2 }]
+ */
+ var intersectionWith = baseRest(function(arrays) {
+ var comparator = last(arrays),
+ mapped = arrayMap(arrays, castArrayLikeObject);
+
+ comparator = typeof comparator == 'function' ? comparator : undefined;
+ if (comparator) {
+ mapped.pop();
+ }
+ return (mapped.length && mapped[0] === arrays[0])
+ ? baseIntersection(mapped, undefined, comparator)
+ : [];
+ });
+
+ /**
+ * Converts all elements in `array` into a string separated by `separator`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Array
+ * @param {Array} array The array to convert.
+ * @param {string} [separator=','] The element separator.
+ * @returns {string} Returns the joined string.
+ * @example
+ *
+ * _.join(['a', 'b', 'c'], '~');
+ * // => 'a~b~c'
+ */
+ function join(array, separator) {
+ return array == null ? '' : nativeJoin.call(array, separator);
+ }
+
+ /**
+ * Gets the last element of `array`.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Array
+ * @param {Array} array The array to query.
+ * @returns {*} Returns the last element of `array`.
+ * @example
+ *
+ * _.last([1, 2, 3]);
+ * // => 3
+ */
+ function last(array) {
+ var length = array == null ? 0 : array.length;
+ return length ? array[length - 1] : undefined;
+ }
+
+ /**
+ * This method is like `_.indexOf` except that it iterates over elements of
+ * `array` from right to left.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Array
+ * @param {Array} array The array to inspect.
+ * @param {*} value The value to search for.
+ * @param {number} [fromIndex=array.length-1] The index to search from.
+ * @returns {number} Returns the index of the matched value, else `-1`.
+ * @example
+ *
+ * _.lastIndexOf([1, 2, 1, 2], 2);
+ * // => 3
+ *
+ * // Search from the `fromIndex`.
+ * _.lastIndexOf([1, 2, 1, 2], 2, 2);
+ * // => 1
+ */
+ function lastIndexOf(array, value, fromIndex) {
+ var length = array == null ? 0 : array.length;
+ if (!length) {
+ return -1;
+ }
+ var index = length;
+ if (fromIndex !== undefined) {
+ index = toInteger(fromIndex);
+ index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);
+ }
+ return value === value
+ ? strictLastIndexOf(array, value, index)
+ : baseFindIndex(array, baseIsNaN, index, true);
+ }
+
+ /**
+ * Gets the element at index `n` of `array`. If `n` is negative, the nth
+ * element from the end is returned.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.11.0
+ * @category Array
+ * @param {Array} array The array to query.
+ * @param {number} [n=0] The index of the element to return.
+ * @returns {*} Returns the nth element of `array`.
+ * @example
+ *
+ * var array = ['a', 'b', 'c', 'd'];
+ *
+ * _.nth(array, 1);
+ * // => 'b'
+ *
+ * _.nth(array, -2);
+ * // => 'c';
+ */
+ function nth(array, n) {
+ return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;
+ }
+
+ /**
+ * Removes all given values from `array` using
+ * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
+ * for equality comparisons.
+ *
+ * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`
+ * to remove elements from an array by predicate.
+ *
+ * @static
+ * @memberOf _
+ * @since 2.0.0
+ * @category Array
+ * @param {Array} array The array to modify.
+ * @param {...*} [values] The values to remove.
+ * @returns {Array} Returns `array`.
+ * @example
+ *
+ * var array = ['a', 'b', 'c', 'a', 'b', 'c'];
+ *
+ * _.pull(array, 'a', 'c');
+ * console.log(array);
+ * // => ['b', 'b']
+ */
+ var pull = baseRest(pullAll);
+
+ /**
+ * This method is like `_.pull` except that it accepts an array of values to remove.
+ *
+ * **Note:** Unlike `_.difference`, this method mutates `array`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Array
+ * @param {Array} array The array to modify.
+ * @param {Array} values The values to remove.
+ * @returns {Array} Returns `array`.
+ * @example
+ *
+ * var array = ['a', 'b', 'c', 'a', 'b', 'c'];
+ *
+ * _.pullAll(array, ['a', 'c']);
+ * console.log(array);
+ * // => ['b', 'b']
+ */
+ function pullAll(array, values) {
+ return (array && array.length && values && values.length)
+ ? basePullAll(array, values)
+ : array;
+ }
+
+ /**
+ * This method is like `_.pullAll` except that it accepts `iteratee` which is
+ * invoked for each element of `array` and `values` to generate the criterion
+ * by which they're compared. The iteratee is invoked with one argument: (value).
+ *
+ * **Note:** Unlike `_.differenceBy`, this method mutates `array`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Array
+ * @param {Array} array The array to modify.
+ * @param {Array} values The values to remove.
+ * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
+ * @returns {Array} Returns `array`.
+ * @example
+ *
+ * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];
+ *
+ * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');
+ * console.log(array);
+ * // => [{ 'x': 2 }]
+ */
+ function pullAllBy(array, values, iteratee) {
+ return (array && array.length && values && values.length)
+ ? basePullAll(array, values, getIteratee(iteratee, 2))
+ : array;
+ }
+
+ /**
+ * This method is like `_.pullAll` except that it accepts `comparator` which
+ * is invoked to compare elements of `array` to `values`. The comparator is
+ * invoked with two arguments: (arrVal, othVal).
+ *
+ * **Note:** Unlike `_.differenceWith`, this method mutates `array`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.6.0
+ * @category Array
+ * @param {Array} array The array to modify.
+ * @param {Array} values The values to remove.
+ * @param {Function} [comparator] The comparator invoked per element.
+ * @returns {Array} Returns `array`.
+ * @example
+ *
+ * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];
+ *
+ * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);
+ * console.log(array);
+ * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]
+ */
+ function pullAllWith(array, values, comparator) {
+ return (array && array.length && values && values.length)
+ ? basePullAll(array, values, undefined, comparator)
+ : array;
+ }
+
+ /**
+ * Removes elements from `array` corresponding to `indexes` and returns an
+ * array of removed elements.
+ *
+ * **Note:** Unlike `_.at`, this method mutates `array`.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category Array
+ * @param {Array} array The array to modify.
+ * @param {...(number|number[])} [indexes] The indexes of elements to remove.
+ * @returns {Array} Returns the new array of removed elements.
+ * @example
+ *
+ * var array = ['a', 'b', 'c', 'd'];
+ * var pulled = _.pullAt(array, [1, 3]);
+ *
+ * console.log(array);
+ * // => ['a', 'c']
+ *
+ * console.log(pulled);
+ * // => ['b', 'd']
+ */
+ var pullAt = flatRest(function(array, indexes) {
+ var length = array == null ? 0 : array.length,
+ result = baseAt(array, indexes);
+
+ basePullAt(array, arrayMap(indexes, function(index) {
+ return isIndex(index, length) ? +index : index;
+ }).sort(compareAscending));
+
+ return result;
+ });
+
+ /**
+ * Removes all elements from `array` that `predicate` returns truthy for
+ * and returns an array of the removed elements. The predicate is invoked
+ * with three arguments: (value, index, array).
+ *
+ * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`
+ * to pull elements from an array by value.
+ *
+ * @static
+ * @memberOf _
+ * @since 2.0.0
+ * @category Array
+ * @param {Array} array The array to modify.
+ * @param {Function} [predicate=_.identity] The function invoked per iteration.
+ * @returns {Array} Returns the new array of removed elements.
+ * @example
+ *
+ * var array = [1, 2, 3, 4];
+ * var evens = _.remove(array, function(n) {
+ * return n % 2 == 0;
+ * });
+ *
+ * console.log(array);
+ * // => [1, 3]
+ *
+ * console.log(evens);
+ * // => [2, 4]
+ */
+ function remove(array, predicate) {
+ var result = [];
+ if (!(array && array.length)) {
+ return result;
+ }
+ var index = -1,
+ indexes = [],
+ length = array.length;
+
+ predicate = getIteratee(predicate, 3);
+ while (++index < length) {
+ var value = array[index];
+ if (predicate(value, index, array)) {
+ result.push(value);
+ indexes.push(index);
+ }
+ }
+ basePullAt(array, indexes);
+ return result;
+ }
+
+ /**
+ * Reverses `array` so that the first element becomes the last, the second
+ * element becomes the second to last, and so on.
+ *
+ * **Note:** This method mutates `array` and is based on
+ * [`Array#reverse`](https://mdn.io/Array/reverse).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Array
+ * @param {Array} array The array to modify.
+ * @returns {Array} Returns `array`.
+ * @example
+ *
+ * var array = [1, 2, 3];
+ *
+ * _.reverse(array);
+ * // => [3, 2, 1]
+ *
+ * console.log(array);
+ * // => [3, 2, 1]
+ */
+ function reverse(array) {
+ return array == null ? array : nativeReverse.call(array);
+ }
+
+ /**
+ * Creates a slice of `array` from `start` up to, but not including, `end`.
+ *
+ * **Note:** This method is used instead of
+ * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are
+ * returned.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category Array
+ * @param {Array} array The array to slice.
+ * @param {number} [start=0] The start position.
+ * @param {number} [end=array.length] The end position.
+ * @returns {Array} Returns the slice of `array`.
+ */
+ function slice(array, start, end) {
+ var length = array == null ? 0 : array.length;
+ if (!length) {
+ return [];
+ }
+ if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {
+ start = 0;
+ end = length;
+ }
+ else {
+ start = start == null ? 0 : toInteger(start);
+ end = end === undefined ? length : toInteger(end);
+ }
+ return baseSlice(array, start, end);
+ }
+
+ /**
+ * Uses a binary search to determine the lowest index at which `value`
+ * should be inserted into `array` in order to maintain its sort order.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Array
+ * @param {Array} array The sorted array to inspect.
+ * @param {*} value The value to evaluate.
+ * @returns {number} Returns the index at which `value` should be inserted
+ * into `array`.
+ * @example
+ *
+ * _.sortedIndex([30, 50], 40);
+ * // => 1
+ */
+ function sortedIndex(array, value) {
+ return baseSortedIndex(array, value);
+ }
+
+ /**
+ * This method is like `_.sortedIndex` except that it accepts `iteratee`
+ * which is invoked for `value` and each element of `array` to compute their
+ * sort ranking. The iteratee is invoked with one argument: (value).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Array
+ * @param {Array} array The sorted array to inspect.
+ * @param {*} value The value to evaluate.
+ * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
+ * @returns {number} Returns the index at which `value` should be inserted
+ * into `array`.
+ * @example
+ *
+ * var objects = [{ 'x': 4 }, { 'x': 5 }];
+ *
+ * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });
+ * // => 0
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.sortedIndexBy(objects, { 'x': 4 }, 'x');
+ * // => 0
+ */
+ function sortedIndexBy(array, value, iteratee) {
+ return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));
+ }
+
+ /**
+ * This method is like `_.indexOf` except that it performs a binary
+ * search on a sorted `array`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Array
+ * @param {Array} array The array to inspect.
+ * @param {*} value The value to search for.
+ * @returns {number} Returns the index of the matched value, else `-1`.
+ * @example
+ *
+ * _.sortedIndexOf([4, 5, 5, 5, 6], 5);
+ * // => 1
+ */
+ function sortedIndexOf(array, value) {
+ var length = array == null ? 0 : array.length;
+ if (length) {
+ var index = baseSortedIndex(array, value);
+ if (index < length && eq(array[index], value)) {
+ return index;
+ }
+ }
+ return -1;
+ }
+
+ /**
+ * This method is like `_.sortedIndex` except that it returns the highest
+ * index at which `value` should be inserted into `array` in order to
+ * maintain its sort order.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category Array
+ * @param {Array} array The sorted array to inspect.
+ * @param {*} value The value to evaluate.
+ * @returns {number} Returns the index at which `value` should be inserted
+ * into `array`.
+ * @example
+ *
+ * _.sortedLastIndex([4, 5, 5, 5, 6], 5);
+ * // => 4
+ */
+ function sortedLastIndex(array, value) {
+ return baseSortedIndex(array, value, true);
+ }
+
+ /**
+ * This method is like `_.sortedLastIndex` except that it accepts `iteratee`
+ * which is invoked for `value` and each element of `array` to compute their
+ * sort ranking. The iteratee is invoked with one argument: (value).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Array
+ * @param {Array} array The sorted array to inspect.
+ * @param {*} value The value to evaluate.
+ * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
+ * @returns {number} Returns the index at which `value` should be inserted
+ * into `array`.
+ * @example
+ *
+ * var objects = [{ 'x': 4 }, { 'x': 5 }];
+ *
+ * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });
+ * // => 1
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');
+ * // => 1
+ */
+ function sortedLastIndexBy(array, value, iteratee) {
+ return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);
+ }
+
+ /**
+ * This method is like `_.lastIndexOf` except that it performs a binary
+ * search on a sorted `array`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Array
+ * @param {Array} array The array to inspect.
+ * @param {*} value The value to search for.
+ * @returns {number} Returns the index of the matched value, else `-1`.
+ * @example
+ *
+ * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);
+ * // => 3
+ */
+ function sortedLastIndexOf(array, value) {
+ var length = array == null ? 0 : array.length;
+ if (length) {
+ var index = baseSortedIndex(array, value, true) - 1;
+ if (eq(array[index], value)) {
+ return index;
+ }
+ }
+ return -1;
+ }
+
+ /**
+ * This method is like `_.uniq` except that it's designed and optimized
+ * for sorted arrays.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Array
+ * @param {Array} array The array to inspect.
+ * @returns {Array} Returns the new duplicate free array.
+ * @example
+ *
+ * _.sortedUniq([1, 1, 2]);
+ * // => [1, 2]
+ */
+ function sortedUniq(array) {
+ return (array && array.length)
+ ? baseSortedUniq(array)
+ : [];
+ }
+
+ /**
+ * This method is like `_.uniqBy` except that it's designed and optimized
+ * for sorted arrays.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Array
+ * @param {Array} array The array to inspect.
+ * @param {Function} [iteratee] The iteratee invoked per element.
+ * @returns {Array} Returns the new duplicate free array.
+ * @example
+ *
+ * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);
+ * // => [1.1, 2.3]
+ */
+ function sortedUniqBy(array, iteratee) {
+ return (array && array.length)
+ ? baseSortedUniq(array, getIteratee(iteratee, 2))
+ : [];
+ }
+
+ /**
+ * Gets all but the first element of `array`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Array
+ * @param {Array} array The array to query.
+ * @returns {Array} Returns the slice of `array`.
+ * @example
+ *
+ * _.tail([1, 2, 3]);
+ * // => [2, 3]
+ */
+ function tail(array) {
+ var length = array == null ? 0 : array.length;
+ return length ? baseSlice(array, 1, length) : [];
+ }
+
+ /**
+ * Creates a slice of `array` with `n` elements taken from the beginning.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Array
+ * @param {Array} array The array to query.
+ * @param {number} [n=1] The number of elements to take.
+ * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
+ * @returns {Array} Returns the slice of `array`.
+ * @example
+ *
+ * _.take([1, 2, 3]);
+ * // => [1]
+ *
+ * _.take([1, 2, 3], 2);
+ * // => [1, 2]
+ *
+ * _.take([1, 2, 3], 5);
+ * // => [1, 2, 3]
+ *
+ * _.take([1, 2, 3], 0);
+ * // => []
+ */
+ function take(array, n, guard) {
+ if (!(array && array.length)) {
+ return [];
+ }
+ n = (guard || n === undefined) ? 1 : toInteger(n);
+ return baseSlice(array, 0, n < 0 ? 0 : n);
+ }
+
+ /**
+ * Creates a slice of `array` with `n` elements taken from the end.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category Array
+ * @param {Array} array The array to query.
+ * @param {number} [n=1] The number of elements to take.
+ * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
+ * @returns {Array} Returns the slice of `array`.
+ * @example
+ *
+ * _.takeRight([1, 2, 3]);
+ * // => [3]
+ *
+ * _.takeRight([1, 2, 3], 2);
+ * // => [2, 3]
+ *
+ * _.takeRight([1, 2, 3], 5);
+ * // => [1, 2, 3]
+ *
+ * _.takeRight([1, 2, 3], 0);
+ * // => []
+ */
+ function takeRight(array, n, guard) {
+ var length = array == null ? 0 : array.length;
+ if (!length) {
+ return [];
+ }
+ n = (guard || n === undefined) ? 1 : toInteger(n);
+ n = length - n;
+ return baseSlice(array, n < 0 ? 0 : n, length);
+ }
+
+ /**
+ * Creates a slice of `array` with elements taken from the end. Elements are
+ * taken until `predicate` returns falsey. The predicate is invoked with
+ * three arguments: (value, index, array).
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category Array
+ * @param {Array} array The array to query.
+ * @param {Function} [predicate=_.identity] The function invoked per iteration.
+ * @returns {Array} Returns the slice of `array`.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'barney', 'active': true },
+ * { 'user': 'fred', 'active': false },
+ * { 'user': 'pebbles', 'active': false }
+ * ];
+ *
+ * _.takeRightWhile(users, function(o) { return !o.active; });
+ * // => objects for ['fred', 'pebbles']
+ *
+ * // The `_.matches` iteratee shorthand.
+ * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });
+ * // => objects for ['pebbles']
+ *
+ * // The `_.matchesProperty` iteratee shorthand.
+ * _.takeRightWhile(users, ['active', false]);
+ * // => objects for ['fred', 'pebbles']
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.takeRightWhile(users, 'active');
+ * // => []
+ */
+ function takeRightWhile(array, predicate) {
+ return (array && array.length)
+ ? baseWhile(array, getIteratee(predicate, 3), false, true)
+ : [];
+ }
+
+ /**
+ * Creates a slice of `array` with elements taken from the beginning. Elements
+ * are taken until `predicate` returns falsey. The predicate is invoked with
+ * three arguments: (value, index, array).
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category Array
+ * @param {Array} array The array to query.
+ * @param {Function} [predicate=_.identity] The function invoked per iteration.
+ * @returns {Array} Returns the slice of `array`.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'barney', 'active': false },
+ * { 'user': 'fred', 'active': false },
+ * { 'user': 'pebbles', 'active': true }
+ * ];
+ *
+ * _.takeWhile(users, function(o) { return !o.active; });
+ * // => objects for ['barney', 'fred']
+ *
+ * // The `_.matches` iteratee shorthand.
+ * _.takeWhile(users, { 'user': 'barney', 'active': false });
+ * // => objects for ['barney']
+ *
+ * // The `_.matchesProperty` iteratee shorthand.
+ * _.takeWhile(users, ['active', false]);
+ * // => objects for ['barney', 'fred']
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.takeWhile(users, 'active');
+ * // => []
+ */
+ function takeWhile(array, predicate) {
+ return (array && array.length)
+ ? baseWhile(array, getIteratee(predicate, 3))
+ : [];
+ }
+
+ /**
+ * Creates an array of unique values, in order, from all given arrays using
+ * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
+ * for equality comparisons.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Array
+ * @param {...Array} [arrays] The arrays to inspect.
+ * @returns {Array} Returns the new array of combined values.
+ * @example
+ *
+ * _.union([2], [1, 2]);
+ * // => [2, 1]
+ */
+ var union = baseRest(function(arrays) {
+ return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));
+ });
+
+ /**
+ * This method is like `_.union` except that it accepts `iteratee` which is
+ * invoked for each element of each `arrays` to generate the criterion by
+ * which uniqueness is computed. Result values are chosen from the first
+ * array in which the value occurs. The iteratee is invoked with one argument:
+ * (value).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Array
+ * @param {...Array} [arrays] The arrays to inspect.
+ * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
+ * @returns {Array} Returns the new array of combined values.
+ * @example
+ *
+ * _.unionBy([2.1], [1.2, 2.3], Math.floor);
+ * // => [2.1, 1.2]
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
+ * // => [{ 'x': 1 }, { 'x': 2 }]
+ */
+ var unionBy = baseRest(function(arrays) {
+ var iteratee = last(arrays);
+ if (isArrayLikeObject(iteratee)) {
+ iteratee = undefined;
+ }
+ return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));
+ });
+
+ /**
+ * This method is like `_.union` except that it accepts `comparator` which
+ * is invoked to compare elements of `arrays`. Result values are chosen from
+ * the first array in which the value occurs. The comparator is invoked
+ * with two arguments: (arrVal, othVal).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Array
+ * @param {...Array} [arrays] The arrays to inspect.
+ * @param {Function} [comparator] The comparator invoked per element.
+ * @returns {Array} Returns the new array of combined values.
+ * @example
+ *
+ * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
+ * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
+ *
+ * _.unionWith(objects, others, _.isEqual);
+ * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]
+ */
+ var unionWith = baseRest(function(arrays) {
+ var comparator = last(arrays);
+ comparator = typeof comparator == 'function' ? comparator : undefined;
+ return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);
+ });
+
+ /**
+ * Creates a duplicate-free version of an array, using
+ * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
+ * for equality comparisons, in which only the first occurrence of each element
+ * is kept. The order of result values is determined by the order they occur
+ * in the array.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Array
+ * @param {Array} array The array to inspect.
+ * @returns {Array} Returns the new duplicate free array.
+ * @example
+ *
+ * _.uniq([2, 1, 2]);
+ * // => [2, 1]
+ */
+ function uniq(array) {
+ return (array && array.length) ? baseUniq(array) : [];
+ }
+
+ /**
+ * This method is like `_.uniq` except that it accepts `iteratee` which is
+ * invoked for each element in `array` to generate the criterion by which
+ * uniqueness is computed. The order of result values is determined by the
+ * order they occur in the array. The iteratee is invoked with one argument:
+ * (value).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Array
+ * @param {Array} array The array to inspect.
+ * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
+ * @returns {Array} Returns the new duplicate free array.
+ * @example
+ *
+ * _.uniqBy([2.1, 1.2, 2.3], Math.floor);
+ * // => [2.1, 1.2]
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');
+ * // => [{ 'x': 1 }, { 'x': 2 }]
+ */
+ function uniqBy(array, iteratee) {
+ return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];
+ }
+
+ /**
+ * This method is like `_.uniq` except that it accepts `comparator` which
+ * is invoked to compare elements of `array`. The order of result values is
+ * determined by the order they occur in the array.The comparator is invoked
+ * with two arguments: (arrVal, othVal).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Array
+ * @param {Array} array The array to inspect.
+ * @param {Function} [comparator] The comparator invoked per element.
+ * @returns {Array} Returns the new duplicate free array.
+ * @example
+ *
+ * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];
+ *
+ * _.uniqWith(objects, _.isEqual);
+ * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]
+ */
+ function uniqWith(array, comparator) {
+ comparator = typeof comparator == 'function' ? comparator : undefined;
+ return (array && array.length) ? baseUniq(array, undefined, comparator) : [];
+ }
+
+ /**
+ * This method is like `_.zip` except that it accepts an array of grouped
+ * elements and creates an array regrouping the elements to their pre-zip
+ * configuration.
+ *
+ * @static
+ * @memberOf _
+ * @since 1.2.0
+ * @category Array
+ * @param {Array} array The array of grouped elements to process.
+ * @returns {Array} Returns the new array of regrouped elements.
+ * @example
+ *
+ * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);
+ * // => [['a', 1, true], ['b', 2, false]]
+ *
+ * _.unzip(zipped);
+ * // => [['a', 'b'], [1, 2], [true, false]]
+ */
+ function unzip(array) {
+ if (!(array && array.length)) {
+ return [];
+ }
+ var length = 0;
+ array = arrayFilter(array, function(group) {
+ if (isArrayLikeObject(group)) {
+ length = nativeMax(group.length, length);
+ return true;
+ }
+ });
+ return baseTimes(length, function(index) {
+ return arrayMap(array, baseProperty(index));
+ });
+ }
+
+ /**
+ * This method is like `_.unzip` except that it accepts `iteratee` to specify
+ * how regrouped values should be combined. The iteratee is invoked with the
+ * elements of each group: (...group).
+ *
+ * @static
+ * @memberOf _
+ * @since 3.8.0
+ * @category Array
+ * @param {Array} array The array of grouped elements to process.
+ * @param {Function} [iteratee=_.identity] The function to combine
+ * regrouped values.
+ * @returns {Array} Returns the new array of regrouped elements.
+ * @example
+ *
+ * var zipped = _.zip([1, 2], [10, 20], [100, 200]);
+ * // => [[1, 10, 100], [2, 20, 200]]
+ *
+ * _.unzipWith(zipped, _.add);
+ * // => [3, 30, 300]
+ */
+ function unzipWith(array, iteratee) {
+ if (!(array && array.length)) {
+ return [];
+ }
+ var result = unzip(array);
+ if (iteratee == null) {
+ return result;
+ }
+ return arrayMap(result, function(group) {
+ return apply(iteratee, undefined, group);
+ });
+ }
+
+ /**
+ * Creates an array excluding all given values using
+ * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
+ * for equality comparisons.
+ *
+ * **Note:** Unlike `_.pull`, this method returns a new array.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Array
+ * @param {Array} array The array to inspect.
+ * @param {...*} [values] The values to exclude.
+ * @returns {Array} Returns the new array of filtered values.
+ * @see _.difference, _.xor
+ * @example
+ *
+ * _.without([2, 1, 2, 3], 1, 2);
+ * // => [3]
+ */
+ var without = baseRest(function(array, values) {
+ return isArrayLikeObject(array)
+ ? baseDifference(array, values)
+ : [];
+ });
+
+ /**
+ * Creates an array of unique values that is the
+ * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)
+ * of the given arrays. The order of result values is determined by the order
+ * they occur in the arrays.
+ *
+ * @static
+ * @memberOf _
+ * @since 2.4.0
+ * @category Array
+ * @param {...Array} [arrays] The arrays to inspect.
+ * @returns {Array} Returns the new array of filtered values.
+ * @see _.difference, _.without
+ * @example
+ *
+ * _.xor([2, 1], [2, 3]);
+ * // => [1, 3]
+ */
+ var xor = baseRest(function(arrays) {
+ return baseXor(arrayFilter(arrays, isArrayLikeObject));
+ });
+
+ /**
+ * This method is like `_.xor` except that it accepts `iteratee` which is
+ * invoked for each element of each `arrays` to generate the criterion by
+ * which by which they're compared. The order of result values is determined
+ * by the order they occur in the arrays. The iteratee is invoked with one
+ * argument: (value).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Array
+ * @param {...Array} [arrays] The arrays to inspect.
+ * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
+ * @returns {Array} Returns the new array of filtered values.
+ * @example
+ *
+ * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);
+ * // => [1.2, 3.4]
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
+ * // => [{ 'x': 2 }]
+ */
+ var xorBy = baseRest(function(arrays) {
+ var iteratee = last(arrays);
+ if (isArrayLikeObject(iteratee)) {
+ iteratee = undefined;
+ }
+ return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));
+ });
+
+ /**
+ * This method is like `_.xor` except that it accepts `comparator` which is
+ * invoked to compare elements of `arrays`. The order of result values is
+ * determined by the order they occur in the arrays. The comparator is invoked
+ * with two arguments: (arrVal, othVal).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Array
+ * @param {...Array} [arrays] The arrays to inspect.
+ * @param {Function} [comparator] The comparator invoked per element.
+ * @returns {Array} Returns the new array of filtered values.
+ * @example
+ *
+ * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
+ * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
+ *
+ * _.xorWith(objects, others, _.isEqual);
+ * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]
+ */
+ var xorWith = baseRest(function(arrays) {
+ var comparator = last(arrays);
+ comparator = typeof comparator == 'function' ? comparator : undefined;
+ return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);
+ });
+
+ /**
+ * Creates an array of grouped elements, the first of which contains the
+ * first elements of the given arrays, the second of which contains the
+ * second elements of the given arrays, and so on.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Array
+ * @param {...Array} [arrays] The arrays to process.
+ * @returns {Array} Returns the new array of grouped elements.
+ * @example
+ *
+ * _.zip(['a', 'b'], [1, 2], [true, false]);
+ * // => [['a', 1, true], ['b', 2, false]]
+ */
+ var zip = baseRest(unzip);
+
+ /**
+ * This method is like `_.fromPairs` except that it accepts two arrays,
+ * one of property identifiers and one of corresponding values.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.4.0
+ * @category Array
+ * @param {Array} [props=[]] The property identifiers.
+ * @param {Array} [values=[]] The property values.
+ * @returns {Object} Returns the new object.
+ * @example
+ *
+ * _.zipObject(['a', 'b'], [1, 2]);
+ * // => { 'a': 1, 'b': 2 }
+ */
+ function zipObject(props, values) {
+ return baseZipObject(props || [], values || [], assignValue);
+ }
+
+ /**
+ * This method is like `_.zipObject` except that it supports property paths.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.1.0
+ * @category Array
+ * @param {Array} [props=[]] The property identifiers.
+ * @param {Array} [values=[]] The property values.
+ * @returns {Object} Returns the new object.
+ * @example
+ *
+ * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);
+ * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }
+ */
+ function zipObjectDeep(props, values) {
+ return baseZipObject(props || [], values || [], baseSet);
+ }
+
+ /**
+ * This method is like `_.zip` except that it accepts `iteratee` to specify
+ * how grouped values should be combined. The iteratee is invoked with the
+ * elements of each group: (...group).
+ *
+ * @static
+ * @memberOf _
+ * @since 3.8.0
+ * @category Array
+ * @param {...Array} [arrays] The arrays to process.
+ * @param {Function} [iteratee=_.identity] The function to combine
+ * grouped values.
+ * @returns {Array} Returns the new array of grouped elements.
+ * @example
+ *
+ * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {
+ * return a + b + c;
+ * });
+ * // => [111, 222]
+ */
+ var zipWith = baseRest(function(arrays) {
+ var length = arrays.length,
+ iteratee = length > 1 ? arrays[length - 1] : undefined;
+
+ iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;
+ return unzipWith(arrays, iteratee);
+ });
+
+ /*------------------------------------------------------------------------*/
+
+ /**
+ * Creates a `lodash` wrapper instance that wraps `value` with explicit method
+ * chain sequences enabled. The result of such sequences must be unwrapped
+ * with `_#value`.
+ *
+ * @static
+ * @memberOf _
+ * @since 1.3.0
+ * @category Seq
+ * @param {*} value The value to wrap.
+ * @returns {Object} Returns the new `lodash` wrapper instance.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'barney', 'age': 36 },
+ * { 'user': 'fred', 'age': 40 },
+ * { 'user': 'pebbles', 'age': 1 }
+ * ];
+ *
+ * var youngest = _
+ * .chain(users)
+ * .sortBy('age')
+ * .map(function(o) {
+ * return o.user + ' is ' + o.age;
+ * })
+ * .head()
+ * .value();
+ * // => 'pebbles is 1'
+ */
+ function chain(value) {
+ var result = lodash(value);
+ result.__chain__ = true;
+ return result;
+ }
+
+ /**
+ * This method invokes `interceptor` and returns `value`. The interceptor
+ * is invoked with one argument; (value). The purpose of this method is to
+ * "tap into" a method chain sequence in order to modify intermediate results.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Seq
+ * @param {*} value The value to provide to `interceptor`.
+ * @param {Function} interceptor The function to invoke.
+ * @returns {*} Returns `value`.
+ * @example
+ *
+ * _([1, 2, 3])
+ * .tap(function(array) {
+ * // Mutate input array.
+ * array.pop();
+ * })
+ * .reverse()
+ * .value();
+ * // => [2, 1]
+ */
+ function tap(value, interceptor) {
+ interceptor(value);
+ return value;
+ }
+
+ /**
+ * This method is like `_.tap` except that it returns the result of `interceptor`.
+ * The purpose of this method is to "pass thru" values replacing intermediate
+ * results in a method chain sequence.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category Seq
+ * @param {*} value The value to provide to `interceptor`.
+ * @param {Function} interceptor The function to invoke.
+ * @returns {*} Returns the result of `interceptor`.
+ * @example
+ *
+ * _(' abc ')
+ * .chain()
+ * .trim()
+ * .thru(function(value) {
+ * return [value];
+ * })
+ * .value();
+ * // => ['abc']
+ */
+ function thru(value, interceptor) {
+ return interceptor(value);
+ }
+
+ /**
+ * This method is the wrapper version of `_.at`.
+ *
+ * @name at
+ * @memberOf _
+ * @since 1.0.0
+ * @category Seq
+ * @param {...(string|string[])} [paths] The property paths to pick.
+ * @returns {Object} Returns the new `lodash` wrapper instance.
+ * @example
+ *
+ * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };
+ *
+ * _(object).at(['a[0].b.c', 'a[1]']).value();
+ * // => [3, 4]
+ */
+ var wrapperAt = flatRest(function(paths) {
+ var length = paths.length,
+ start = length ? paths[0] : 0,
+ value = this.__wrapped__,
+ interceptor = function(object) { return baseAt(object, paths); };
+
+ if (length > 1 || this.__actions__.length ||
+ !(value instanceof LazyWrapper) || !isIndex(start)) {
+ return this.thru(interceptor);
+ }
+ value = value.slice(start, +start + (length ? 1 : 0));
+ value.__actions__.push({
+ 'func': thru,
+ 'args': [interceptor],
+ 'thisArg': undefined
+ });
+ return new LodashWrapper(value, this.__chain__).thru(function(array) {
+ if (length && !array.length) {
+ array.push(undefined);
+ }
+ return array;
+ });
+ });
+
+ /**
+ * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.
+ *
+ * @name chain
+ * @memberOf _
+ * @since 0.1.0
+ * @category Seq
+ * @returns {Object} Returns the new `lodash` wrapper instance.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'barney', 'age': 36 },
+ * { 'user': 'fred', 'age': 40 }
+ * ];
+ *
+ * // A sequence without explicit chaining.
+ * _(users).head();
+ * // => { 'user': 'barney', 'age': 36 }
+ *
+ * // A sequence with explicit chaining.
+ * _(users)
+ * .chain()
+ * .head()
+ * .pick('user')
+ * .value();
+ * // => { 'user': 'barney' }
+ */
+ function wrapperChain() {
+ return chain(this);
+ }
+
+ /**
+ * Executes the chain sequence and returns the wrapped result.
+ *
+ * @name commit
+ * @memberOf _
+ * @since 3.2.0
+ * @category Seq
+ * @returns {Object} Returns the new `lodash` wrapper instance.
+ * @example
+ *
+ * var array = [1, 2];
+ * var wrapped = _(array).push(3);
+ *
+ * console.log(array);
+ * // => [1, 2]
+ *
+ * wrapped = wrapped.commit();
+ * console.log(array);
+ * // => [1, 2, 3]
+ *
+ * wrapped.last();
+ * // => 3
+ *
+ * console.log(array);
+ * // => [1, 2, 3]
+ */
+ function wrapperCommit() {
+ return new LodashWrapper(this.value(), this.__chain__);
+ }
+
+ /**
+ * Gets the next value on a wrapped object following the
+ * [iterator protocol](https://mdn.io/iteration_protocols#iterator).
+ *
+ * @name next
+ * @memberOf _
+ * @since 4.0.0
+ * @category Seq
+ * @returns {Object} Returns the next iterator value.
+ * @example
+ *
+ * var wrapped = _([1, 2]);
+ *
+ * wrapped.next();
+ * // => { 'done': false, 'value': 1 }
+ *
+ * wrapped.next();
+ * // => { 'done': false, 'value': 2 }
+ *
+ * wrapped.next();
+ * // => { 'done': true, 'value': undefined }
+ */
+ function wrapperNext() {
+ if (this.__values__ === undefined) {
+ this.__values__ = toArray(this.value());
+ }
+ var done = this.__index__ >= this.__values__.length,
+ value = done ? undefined : this.__values__[this.__index__++];
+
+ return { 'done': done, 'value': value };
+ }
+
+ /**
+ * Enables the wrapper to be iterable.
+ *
+ * @name Symbol.iterator
+ * @memberOf _
+ * @since 4.0.0
+ * @category Seq
+ * @returns {Object} Returns the wrapper object.
+ * @example
+ *
+ * var wrapped = _([1, 2]);
+ *
+ * wrapped[Symbol.iterator]() === wrapped;
+ * // => true
+ *
+ * Array.from(wrapped);
+ * // => [1, 2]
+ */
+ function wrapperToIterator() {
+ return this;
+ }
+
+ /**
+ * Creates a clone of the chain sequence planting `value` as the wrapped value.
+ *
+ * @name plant
+ * @memberOf _
+ * @since 3.2.0
+ * @category Seq
+ * @param {*} value The value to plant.
+ * @returns {Object} Returns the new `lodash` wrapper instance.
+ * @example
+ *
+ * function square(n) {
+ * return n * n;
+ * }
+ *
+ * var wrapped = _([1, 2]).map(square);
+ * var other = wrapped.plant([3, 4]);
+ *
+ * other.value();
+ * // => [9, 16]
+ *
+ * wrapped.value();
+ * // => [1, 4]
+ */
+ function wrapperPlant(value) {
+ var result,
+ parent = this;
+
+ while (parent instanceof baseLodash) {
+ var clone = wrapperClone(parent);
+ clone.__index__ = 0;
+ clone.__values__ = undefined;
+ if (result) {
+ previous.__wrapped__ = clone;
+ } else {
+ result = clone;
+ }
+ var previous = clone;
+ parent = parent.__wrapped__;
+ }
+ previous.__wrapped__ = value;
+ return result;
+ }
+
+ /**
+ * This method is the wrapper version of `_.reverse`.
+ *
+ * **Note:** This method mutates the wrapped array.
+ *
+ * @name reverse
+ * @memberOf _
+ * @since 0.1.0
+ * @category Seq
+ * @returns {Object} Returns the new `lodash` wrapper instance.
+ * @example
+ *
+ * var array = [1, 2, 3];
+ *
+ * _(array).reverse().value()
+ * // => [3, 2, 1]
+ *
+ * console.log(array);
+ * // => [3, 2, 1]
+ */
+ function wrapperReverse() {
+ var value = this.__wrapped__;
+ if (value instanceof LazyWrapper) {
+ var wrapped = value;
+ if (this.__actions__.length) {
+ wrapped = new LazyWrapper(this);
+ }
+ wrapped = wrapped.reverse();
+ wrapped.__actions__.push({
+ 'func': thru,
+ 'args': [reverse],
+ 'thisArg': undefined
+ });
+ return new LodashWrapper(wrapped, this.__chain__);
+ }
+ return this.thru(reverse);
+ }
+
+ /**
+ * Executes the chain sequence to resolve the unwrapped value.
+ *
+ * @name value
+ * @memberOf _
+ * @since 0.1.0
+ * @alias toJSON, valueOf
+ * @category Seq
+ * @returns {*} Returns the resolved unwrapped value.
+ * @example
+ *
+ * _([1, 2, 3]).value();
+ * // => [1, 2, 3]
+ */
+ function wrapperValue() {
+ return baseWrapperValue(this.__wrapped__, this.__actions__);
+ }
+
+ /*------------------------------------------------------------------------*/
+
+ /**
+ * Creates an object composed of keys generated from the results of running
+ * each element of `collection` thru `iteratee`. The corresponding value of
+ * each key is the number of times the key was returned by `iteratee`. The
+ * iteratee is invoked with one argument: (value).
+ *
+ * @static
+ * @memberOf _
+ * @since 0.5.0
+ * @category Collection
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function} [iteratee=_.identity] The iteratee to transform keys.
+ * @returns {Object} Returns the composed aggregate object.
+ * @example
+ *
+ * _.countBy([6.1, 4.2, 6.3], Math.floor);
+ * // => { '4': 1, '6': 2 }
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.countBy(['one', 'two', 'three'], 'length');
+ * // => { '3': 2, '5': 1 }
+ */
+ var countBy = createAggregator(function(result, value, key) {
+ if (hasOwnProperty.call(result, key)) {
+ ++result[key];
+ } else {
+ baseAssignValue(result, key, 1);
+ }
+ });
+
+ /**
+ * Checks if `predicate` returns truthy for **all** elements of `collection`.
+ * Iteration is stopped once `predicate` returns falsey. The predicate is
+ * invoked with three arguments: (value, index|key, collection).
+ *
+ * **Note:** This method returns `true` for
+ * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because
+ * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of
+ * elements of empty collections.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Collection
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function} [predicate=_.identity] The function invoked per iteration.
+ * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
+ * @returns {boolean} Returns `true` if all elements pass the predicate check,
+ * else `false`.
+ * @example
+ *
+ * _.every([true, 1, null, 'yes'], Boolean);
+ * // => false
+ *
+ * var users = [
+ * { 'user': 'barney', 'age': 36, 'active': false },
+ * { 'user': 'fred', 'age': 40, 'active': false }
+ * ];
+ *
+ * // The `_.matches` iteratee shorthand.
+ * _.every(users, { 'user': 'barney', 'active': false });
+ * // => false
+ *
+ * // The `_.matchesProperty` iteratee shorthand.
+ * _.every(users, ['active', false]);
+ * // => true
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.every(users, 'active');
+ * // => false
+ */
+ function every(collection, predicate, guard) {
+ var func = isArray(collection) ? arrayEvery : baseEvery;
+ if (guard && isIterateeCall(collection, predicate, guard)) {
+ predicate = undefined;
+ }
+ return func(collection, getIteratee(predicate, 3));
+ }
+
+ /**
+ * Iterates over elements of `collection`, returning an array of all elements
+ * `predicate` returns truthy for. The predicate is invoked with three
+ * arguments: (value, index|key, collection).
+ *
+ * **Note:** Unlike `_.remove`, this method returns a new array.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Collection
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function} [predicate=_.identity] The function invoked per iteration.
+ * @returns {Array} Returns the new filtered array.
+ * @see _.reject
+ * @example
+ *
+ * var users = [
+ * { 'user': 'barney', 'age': 36, 'active': true },
+ * { 'user': 'fred', 'age': 40, 'active': false }
+ * ];
+ *
+ * _.filter(users, function(o) { return !o.active; });
+ * // => objects for ['fred']
+ *
+ * // The `_.matches` iteratee shorthand.
+ * _.filter(users, { 'age': 36, 'active': true });
+ * // => objects for ['barney']
+ *
+ * // The `_.matchesProperty` iteratee shorthand.
+ * _.filter(users, ['active', false]);
+ * // => objects for ['fred']
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.filter(users, 'active');
+ * // => objects for ['barney']
+ */
+ function filter(collection, predicate) {
+ var func = isArray(collection) ? arrayFilter : baseFilter;
+ return func(collection, getIteratee(predicate, 3));
+ }
+
+ /**
+ * Iterates over elements of `collection`, returning the first element
+ * `predicate` returns truthy for. The predicate is invoked with three
+ * arguments: (value, index|key, collection).
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Collection
+ * @param {Array|Object} collection The collection to inspect.
+ * @param {Function} [predicate=_.identity] The function invoked per iteration.
+ * @param {number} [fromIndex=0] The index to search from.
+ * @returns {*} Returns the matched element, else `undefined`.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'barney', 'age': 36, 'active': true },
+ * { 'user': 'fred', 'age': 40, 'active': false },
+ * { 'user': 'pebbles', 'age': 1, 'active': true }
+ * ];
+ *
+ * _.find(users, function(o) { return o.age < 40; });
+ * // => object for 'barney'
+ *
+ * // The `_.matches` iteratee shorthand.
+ * _.find(users, { 'age': 1, 'active': true });
+ * // => object for 'pebbles'
+ *
+ * // The `_.matchesProperty` iteratee shorthand.
+ * _.find(users, ['active', false]);
+ * // => object for 'fred'
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.find(users, 'active');
+ * // => object for 'barney'
+ */
+ var find = createFind(findIndex);
+
+ /**
+ * This method is like `_.find` except that it iterates over elements of
+ * `collection` from right to left.
+ *
+ * @static
+ * @memberOf _
+ * @since 2.0.0
+ * @category Collection
+ * @param {Array|Object} collection The collection to inspect.
+ * @param {Function} [predicate=_.identity] The function invoked per iteration.
+ * @param {number} [fromIndex=collection.length-1] The index to search from.
+ * @returns {*} Returns the matched element, else `undefined`.
+ * @example
+ *
+ * _.findLast([1, 2, 3, 4], function(n) {
+ * return n % 2 == 1;
+ * });
+ * // => 3
+ */
+ var findLast = createFind(findLastIndex);
+
+ /**
+ * Creates a flattened array of values by running each element in `collection`
+ * thru `iteratee` and flattening the mapped results. The iteratee is invoked
+ * with three arguments: (value, index|key, collection).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Collection
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+ * @returns {Array} Returns the new flattened array.
+ * @example
+ *
+ * function duplicate(n) {
+ * return [n, n];
+ * }
+ *
+ * _.flatMap([1, 2], duplicate);
+ * // => [1, 1, 2, 2]
+ */
+ function flatMap(collection, iteratee) {
+ return baseFlatten(map(collection, iteratee), 1);
+ }
+
+ /**
+ * This method is like `_.flatMap` except that it recursively flattens the
+ * mapped results.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.7.0
+ * @category Collection
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+ * @returns {Array} Returns the new flattened array.
+ * @example
+ *
+ * function duplicate(n) {
+ * return [[[n, n]]];
+ * }
+ *
+ * _.flatMapDeep([1, 2], duplicate);
+ * // => [1, 1, 2, 2]
+ */
+ function flatMapDeep(collection, iteratee) {
+ return baseFlatten(map(collection, iteratee), INFINITY);
+ }
+
+ /**
+ * This method is like `_.flatMap` except that it recursively flattens the
+ * mapped results up to `depth` times.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.7.0
+ * @category Collection
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+ * @param {number} [depth=1] The maximum recursion depth.
+ * @returns {Array} Returns the new flattened array.
+ * @example
+ *
+ * function duplicate(n) {
+ * return [[[n, n]]];
+ * }
+ *
+ * _.flatMapDepth([1, 2], duplicate, 2);
+ * // => [[1, 1], [2, 2]]
+ */
+ function flatMapDepth(collection, iteratee, depth) {
+ depth = depth === undefined ? 1 : toInteger(depth);
+ return baseFlatten(map(collection, iteratee), depth);
+ }
+
+ /**
+ * Iterates over elements of `collection` and invokes `iteratee` for each element.
+ * The iteratee is invoked with three arguments: (value, index|key, collection).
+ * Iteratee functions may exit iteration early by explicitly returning `false`.
+ *
+ * **Note:** As with other "Collections" methods, objects with a "length"
+ * property are iterated like arrays. To avoid this behavior use `_.forIn`
+ * or `_.forOwn` for object iteration.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @alias each
+ * @category Collection
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+ * @returns {Array|Object} Returns `collection`.
+ * @see _.forEachRight
+ * @example
+ *
+ * _.forEach([1, 2], function(value) {
+ * console.log(value);
+ * });
+ * // => Logs `1` then `2`.
+ *
+ * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {
+ * console.log(key);
+ * });
+ * // => Logs 'a' then 'b' (iteration order is not guaranteed).
+ */
+ function forEach(collection, iteratee) {
+ var func = isArray(collection) ? arrayEach : baseEach;
+ return func(collection, getIteratee(iteratee, 3));
+ }
+
+ /**
+ * This method is like `_.forEach` except that it iterates over elements of
+ * `collection` from right to left.
+ *
+ * @static
+ * @memberOf _
+ * @since 2.0.0
+ * @alias eachRight
+ * @category Collection
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+ * @returns {Array|Object} Returns `collection`.
+ * @see _.forEach
+ * @example
+ *
+ * _.forEachRight([1, 2], function(value) {
+ * console.log(value);
+ * });
+ * // => Logs `2` then `1`.
+ */
+ function forEachRight(collection, iteratee) {
+ var func = isArray(collection) ? arrayEachRight : baseEachRight;
+ return func(collection, getIteratee(iteratee, 3));
+ }
+
+ /**
+ * Creates an object composed of keys generated from the results of running
+ * each element of `collection` thru `iteratee`. The order of grouped values
+ * is determined by the order they occur in `collection`. The corresponding
+ * value of each key is an array of elements responsible for generating the
+ * key. The iteratee is invoked with one argument: (value).
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Collection
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function} [iteratee=_.identity] The iteratee to transform keys.
+ * @returns {Object} Returns the composed aggregate object.
+ * @example
+ *
+ * _.groupBy([6.1, 4.2, 6.3], Math.floor);
+ * // => { '4': [4.2], '6': [6.1, 6.3] }
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.groupBy(['one', 'two', 'three'], 'length');
+ * // => { '3': ['one', 'two'], '5': ['three'] }
+ */
+ var groupBy = createAggregator(function(result, value, key) {
+ if (hasOwnProperty.call(result, key)) {
+ result[key].push(value);
+ } else {
+ baseAssignValue(result, key, [value]);
+ }
+ });
+
+ /**
+ * Checks if `value` is in `collection`. If `collection` is a string, it's
+ * checked for a substring of `value`, otherwise
+ * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
+ * is used for equality comparisons. If `fromIndex` is negative, it's used as
+ * the offset from the end of `collection`.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to inspect.
+ * @param {*} value The value to search for.
+ * @param {number} [fromIndex=0] The index to search from.
+ * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.
+ * @returns {boolean} Returns `true` if `value` is found, else `false`.
+ * @example
+ *
+ * _.includes([1, 2, 3], 1);
+ * // => true
+ *
+ * _.includes([1, 2, 3], 1, 2);
+ * // => false
+ *
+ * _.includes({ 'a': 1, 'b': 2 }, 1);
+ * // => true
+ *
+ * _.includes('abcd', 'bc');
+ * // => true
+ */
+ function includes(collection, value, fromIndex, guard) {
+ collection = isArrayLike(collection) ? collection : values(collection);
+ fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;
+
+ var length = collection.length;
+ if (fromIndex < 0) {
+ fromIndex = nativeMax(length + fromIndex, 0);
+ }
+ return isString(collection)
+ ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)
+ : (!!length && baseIndexOf(collection, value, fromIndex) > -1);
+ }
+
+ /**
+ * Invokes the method at `path` of each element in `collection`, returning
+ * an array of the results of each invoked method. Any additional arguments
+ * are provided to each invoked method. If `path` is a function, it's invoked
+ * for, and `this` bound to, each element in `collection`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Collection
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Array|Function|string} path The path of the method to invoke or
+ * the function invoked per iteration.
+ * @param {...*} [args] The arguments to invoke each method with.
+ * @returns {Array} Returns the array of results.
+ * @example
+ *
+ * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');
+ * // => [[1, 5, 7], [1, 2, 3]]
+ *
+ * _.invokeMap([123, 456], String.prototype.split, '');
+ * // => [['1', '2', '3'], ['4', '5', '6']]
+ */
+ var invokeMap = baseRest(function(collection, path, args) {
+ var index = -1,
+ isFunc = typeof path == 'function',
+ result = isArrayLike(collection) ? Array(collection.length) : [];
+
+ baseEach(collection, function(value) {
+ result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);
+ });
+ return result;
+ });
+
+ /**
+ * Creates an object composed of keys generated from the results of running
+ * each element of `collection` thru `iteratee`. The corresponding value of
+ * each key is the last element responsible for generating the key. The
+ * iteratee is invoked with one argument: (value).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Collection
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function} [iteratee=_.identity] The iteratee to transform keys.
+ * @returns {Object} Returns the composed aggregate object.
+ * @example
+ *
+ * var array = [
+ * { 'dir': 'left', 'code': 97 },
+ * { 'dir': 'right', 'code': 100 }
+ * ];
+ *
+ * _.keyBy(array, function(o) {
+ * return String.fromCharCode(o.code);
+ * });
+ * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }
+ *
+ * _.keyBy(array, 'dir');
+ * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }
+ */
+ var keyBy = createAggregator(function(result, value, key) {
+ baseAssignValue(result, key, value);
+ });
+
+ /**
+ * Creates an array of values by running each element in `collection` thru
+ * `iteratee`. The iteratee is invoked with three arguments:
+ * (value, index|key, collection).
+ *
+ * Many lodash methods are guarded to work as iteratees for methods like
+ * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.
+ *
+ * The guarded methods are:
+ * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,
+ * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,
+ * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,
+ * `template`, `trim`, `trimEnd`, `trimStart`, and `words`
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Collection
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+ * @returns {Array} Returns the new mapped array.
+ * @example
+ *
+ * function square(n) {
+ * return n * n;
+ * }
+ *
+ * _.map([4, 8], square);
+ * // => [16, 64]
+ *
+ * _.map({ 'a': 4, 'b': 8 }, square);
+ * // => [16, 64] (iteration order is not guaranteed)
+ *
+ * var users = [
+ * { 'user': 'barney' },
+ * { 'user': 'fred' }
+ * ];
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.map(users, 'user');
+ * // => ['barney', 'fred']
+ */
+ function map(collection, iteratee) {
+ var func = isArray(collection) ? arrayMap : baseMap;
+ return func(collection, getIteratee(iteratee, 3));
+ }
+
+ /**
+ * This method is like `_.sortBy` except that it allows specifying the sort
+ * orders of the iteratees to sort by. If `orders` is unspecified, all values
+ * are sorted in ascending order. Otherwise, specify an order of "desc" for
+ * descending or "asc" for ascending sort order of corresponding values.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Collection
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]
+ * The iteratees to sort by.
+ * @param {string[]} [orders] The sort orders of `iteratees`.
+ * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.
+ * @returns {Array} Returns the new sorted array.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'fred', 'age': 48 },
+ * { 'user': 'barney', 'age': 34 },
+ * { 'user': 'fred', 'age': 40 },
+ * { 'user': 'barney', 'age': 36 }
+ * ];
+ *
+ * // Sort by `user` in ascending order and by `age` in descending order.
+ * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);
+ * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]
+ */
+ function orderBy(collection, iteratees, orders, guard) {
+ if (collection == null) {
+ return [];
+ }
+ if (!isArray(iteratees)) {
+ iteratees = iteratees == null ? [] : [iteratees];
+ }
+ orders = guard ? undefined : orders;
+ if (!isArray(orders)) {
+ orders = orders == null ? [] : [orders];
+ }
+ return baseOrderBy(collection, iteratees, orders);
+ }
+
+ /**
+ * Creates an array of elements split into two groups, the first of which
+ * contains elements `predicate` returns truthy for, the second of which
+ * contains elements `predicate` returns falsey for. The predicate is
+ * invoked with one argument: (value).
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category Collection
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function} [predicate=_.identity] The function invoked per iteration.
+ * @returns {Array} Returns the array of grouped elements.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'barney', 'age': 36, 'active': false },
+ * { 'user': 'fred', 'age': 40, 'active': true },
+ * { 'user': 'pebbles', 'age': 1, 'active': false }
+ * ];
+ *
+ * _.partition(users, function(o) { return o.active; });
+ * // => objects for [['fred'], ['barney', 'pebbles']]
+ *
+ * // The `_.matches` iteratee shorthand.
+ * _.partition(users, { 'age': 1, 'active': false });
+ * // => objects for [['pebbles'], ['barney', 'fred']]
+ *
+ * // The `_.matchesProperty` iteratee shorthand.
+ * _.partition(users, ['active', false]);
+ * // => objects for [['barney', 'pebbles'], ['fred']]
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.partition(users, 'active');
+ * // => objects for [['fred'], ['barney', 'pebbles']]
+ */
+ var partition = createAggregator(function(result, value, key) {
+ result[key ? 0 : 1].push(value);
+ }, function() { return [[], []]; });
+
+ /**
+ * Reduces `collection` to a value which is the accumulated result of running
+ * each element in `collection` thru `iteratee`, where each successive
+ * invocation is supplied the return value of the previous. If `accumulator`
+ * is not given, the first element of `collection` is used as the initial
+ * value. The iteratee is invoked with four arguments:
+ * (accumulator, value, index|key, collection).
+ *
+ * Many lodash methods are guarded to work as iteratees for methods like
+ * `_.reduce`, `_.reduceRight`, and `_.transform`.
+ *
+ * The guarded methods are:
+ * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,
+ * and `sortBy`
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Collection
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+ * @param {*} [accumulator] The initial value.
+ * @returns {*} Returns the accumulated value.
+ * @see _.reduceRight
+ * @example
+ *
+ * _.reduce([1, 2], function(sum, n) {
+ * return sum + n;
+ * }, 0);
+ * // => 3
+ *
+ * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {
+ * (result[value] || (result[value] = [])).push(key);
+ * return result;
+ * }, {});
+ * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)
+ */
+ function reduce(collection, iteratee, accumulator) {
+ var func = isArray(collection) ? arrayReduce : baseReduce,
+ initAccum = arguments.length < 3;
+
+ return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);
+ }
+
+ /**
+ * This method is like `_.reduce` except that it iterates over elements of
+ * `collection` from right to left.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Collection
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+ * @param {*} [accumulator] The initial value.
+ * @returns {*} Returns the accumulated value.
+ * @see _.reduce
+ * @example
+ *
+ * var array = [[0, 1], [2, 3], [4, 5]];
+ *
+ * _.reduceRight(array, function(flattened, other) {
+ * return flattened.concat(other);
+ * }, []);
+ * // => [4, 5, 2, 3, 0, 1]
+ */
+ function reduceRight(collection, iteratee, accumulator) {
+ var func = isArray(collection) ? arrayReduceRight : baseReduce,
+ initAccum = arguments.length < 3;
+
+ return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);
+ }
+
+ /**
+ * The opposite of `_.filter`; this method returns the elements of `collection`
+ * that `predicate` does **not** return truthy for.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Collection
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function} [predicate=_.identity] The function invoked per iteration.
+ * @returns {Array} Returns the new filtered array.
+ * @see _.filter
+ * @example
+ *
+ * var users = [
+ * { 'user': 'barney', 'age': 36, 'active': false },
+ * { 'user': 'fred', 'age': 40, 'active': true }
+ * ];
+ *
+ * _.reject(users, function(o) { return !o.active; });
+ * // => objects for ['fred']
+ *
+ * // The `_.matches` iteratee shorthand.
+ * _.reject(users, { 'age': 40, 'active': true });
+ * // => objects for ['barney']
+ *
+ * // The `_.matchesProperty` iteratee shorthand.
+ * _.reject(users, ['active', false]);
+ * // => objects for ['fred']
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.reject(users, 'active');
+ * // => objects for ['barney']
+ */
+ function reject(collection, predicate) {
+ var func = isArray(collection) ? arrayFilter : baseFilter;
+ return func(collection, negate(getIteratee(predicate, 3)));
+ }
+
+ /**
+ * Gets a random element from `collection`.
+ *
+ * @static
+ * @memberOf _
+ * @since 2.0.0
+ * @category Collection
+ * @param {Array|Object} collection The collection to sample.
+ * @returns {*} Returns the random element.
+ * @example
+ *
+ * _.sample([1, 2, 3, 4]);
+ * // => 2
+ */
+ function sample(collection) {
+ var func = isArray(collection) ? arraySample : baseSample;
+ return func(collection);
+ }
+
+ /**
+ * Gets `n` random elements at unique keys from `collection` up to the
+ * size of `collection`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Collection
+ * @param {Array|Object} collection The collection to sample.
+ * @param {number} [n=1] The number of elements to sample.
+ * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
+ * @returns {Array} Returns the random elements.
+ * @example
+ *
+ * _.sampleSize([1, 2, 3], 2);
+ * // => [3, 1]
+ *
+ * _.sampleSize([1, 2, 3], 4);
+ * // => [2, 3, 1]
+ */
+ function sampleSize(collection, n, guard) {
+ if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {
+ n = 1;
+ } else {
+ n = toInteger(n);
+ }
+ var func = isArray(collection) ? arraySampleSize : baseSampleSize;
+ return func(collection, n);
+ }
+
+ /**
+ * Creates an array of shuffled values, using a version of the
+ * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Collection
+ * @param {Array|Object} collection The collection to shuffle.
+ * @returns {Array} Returns the new shuffled array.
+ * @example
+ *
+ * _.shuffle([1, 2, 3, 4]);
+ * // => [4, 1, 3, 2]
+ */
+ function shuffle(collection) {
+ var func = isArray(collection) ? arrayShuffle : baseShuffle;
+ return func(collection);
+ }
+
+ /**
+ * Gets the size of `collection` by returning its length for array-like
+ * values or the number of own enumerable string keyed properties for objects.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to inspect.
+ * @returns {number} Returns the collection size.
+ * @example
+ *
+ * _.size([1, 2, 3]);
+ * // => 3
+ *
+ * _.size({ 'a': 1, 'b': 2 });
+ * // => 2
+ *
+ * _.size('pebbles');
+ * // => 7
+ */
+ function size(collection) {
+ if (collection == null) {
+ return 0;
+ }
+ if (isArrayLike(collection)) {
+ return isString(collection) ? stringSize(collection) : collection.length;
+ }
+ var tag = getTag(collection);
+ if (tag == mapTag || tag == setTag) {
+ return collection.size;
+ }
+ return baseKeys(collection).length;
+ }
+
+ /**
+ * Checks if `predicate` returns truthy for **any** element of `collection`.
+ * Iteration is stopped once `predicate` returns truthy. The predicate is
+ * invoked with three arguments: (value, index|key, collection).
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Collection
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function} [predicate=_.identity] The function invoked per iteration.
+ * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
+ * @returns {boolean} Returns `true` if any element passes the predicate check,
+ * else `false`.
+ * @example
+ *
+ * _.some([null, 0, 'yes', false], Boolean);
+ * // => true
+ *
+ * var users = [
+ * { 'user': 'barney', 'active': true },
+ * { 'user': 'fred', 'active': false }
+ * ];
+ *
+ * // The `_.matches` iteratee shorthand.
+ * _.some(users, { 'user': 'barney', 'active': false });
+ * // => false
+ *
+ * // The `_.matchesProperty` iteratee shorthand.
+ * _.some(users, ['active', false]);
+ * // => true
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.some(users, 'active');
+ * // => true
+ */
+ function some(collection, predicate, guard) {
+ var func = isArray(collection) ? arraySome : baseSome;
+ if (guard && isIterateeCall(collection, predicate, guard)) {
+ predicate = undefined;
+ }
+ return func(collection, getIteratee(predicate, 3));
+ }
+
+ /**
+ * Creates an array of elements, sorted in ascending order by the results of
+ * running each element in a collection thru each iteratee. This method
+ * performs a stable sort, that is, it preserves the original sort order of
+ * equal elements. The iteratees are invoked with one argument: (value).
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Collection
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {...(Function|Function[])} [iteratees=[_.identity]]
+ * The iteratees to sort by.
+ * @returns {Array} Returns the new sorted array.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'fred', 'age': 48 },
+ * { 'user': 'barney', 'age': 36 },
+ * { 'user': 'fred', 'age': 40 },
+ * { 'user': 'barney', 'age': 34 }
+ * ];
+ *
+ * _.sortBy(users, [function(o) { return o.user; }]);
+ * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]
+ *
+ * _.sortBy(users, ['user', 'age']);
+ * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]]
+ */
+ var sortBy = baseRest(function(collection, iteratees) {
+ if (collection == null) {
+ return [];
+ }
+ var length = iteratees.length;
+ if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {
+ iteratees = [];
+ } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {
+ iteratees = [iteratees[0]];
+ }
+ return baseOrderBy(collection, baseFlatten(iteratees, 1), []);
+ });
+
+ /*------------------------------------------------------------------------*/
+
+ /**
+ * Gets the timestamp of the number of milliseconds that have elapsed since
+ * the Unix epoch (1 January 1970 00:00:00 UTC).
+ *
+ * @static
+ * @memberOf _
+ * @since 2.4.0
+ * @category Date
+ * @returns {number} Returns the timestamp.
+ * @example
+ *
+ * _.defer(function(stamp) {
+ * console.log(_.now() - stamp);
+ * }, _.now());
+ * // => Logs the number of milliseconds it took for the deferred invocation.
+ */
+ var now = ctxNow || function() {
+ return root.Date.now();
+ };
+
+ /*------------------------------------------------------------------------*/
+
+ /**
+ * The opposite of `_.before`; this method creates a function that invokes
+ * `func` once it's called `n` or more times.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Function
+ * @param {number} n The number of calls before `func` is invoked.
+ * @param {Function} func The function to restrict.
+ * @returns {Function} Returns the new restricted function.
+ * @example
+ *
+ * var saves = ['profile', 'settings'];
+ *
+ * var done = _.after(saves.length, function() {
+ * console.log('done saving!');
+ * });
+ *
+ * _.forEach(saves, function(type) {
+ * asyncSave({ 'type': type, 'complete': done });
+ * });
+ * // => Logs 'done saving!' after the two async saves have completed.
+ */
+ function after(n, func) {
+ if (typeof func != 'function') {
+ throw new TypeError(FUNC_ERROR_TEXT);
+ }
+ n = toInteger(n);
+ return function() {
+ if (--n < 1) {
+ return func.apply(this, arguments);
+ }
+ };
+ }
+
+ /**
+ * Creates a function that invokes `func`, with up to `n` arguments,
+ * ignoring any additional arguments.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category Function
+ * @param {Function} func The function to cap arguments for.
+ * @param {number} [n=func.length] The arity cap.
+ * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
+ * @returns {Function} Returns the new capped function.
+ * @example
+ *
+ * _.map(['6', '8', '10'], _.ary(parseInt, 1));
+ * // => [6, 8, 10]
+ */
+ function ary(func, n, guard) {
+ n = guard ? undefined : n;
+ n = (func && n == null) ? func.length : n;
+ return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);
+ }
+
+ /**
+ * Creates a function that invokes `func`, with the `this` binding and arguments
+ * of the created function, while it's called less than `n` times. Subsequent
+ * calls to the created function return the result of the last `func` invocation.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category Function
+ * @param {number} n The number of calls at which `func` is no longer invoked.
+ * @param {Function} func The function to restrict.
+ * @returns {Function} Returns the new restricted function.
+ * @example
+ *
+ * jQuery(element).on('click', _.before(5, addContactToList));
+ * // => Allows adding up to 4 contacts to the list.
+ */
+ function before(n, func) {
+ var result;
+ if (typeof func != 'function') {
+ throw new TypeError(FUNC_ERROR_TEXT);
+ }
+ n = toInteger(n);
+ return function() {
+ if (--n > 0) {
+ result = func.apply(this, arguments);
+ }
+ if (n <= 1) {
+ func = undefined;
+ }
+ return result;
+ };
+ }
+
+ /**
+ * Creates a function that invokes `func` with the `this` binding of `thisArg`
+ * and `partials` prepended to the arguments it receives.
+ *
+ * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,
+ * may be used as a placeholder for partially applied arguments.
+ *
+ * **Note:** Unlike native `Function#bind`, this method doesn't set the "length"
+ * property of bound functions.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Function
+ * @param {Function} func The function to bind.
+ * @param {*} thisArg The `this` binding of `func`.
+ * @param {...*} [partials] The arguments to be partially applied.
+ * @returns {Function} Returns the new bound function.
+ * @example
+ *
+ * function greet(greeting, punctuation) {
+ * return greeting + ' ' + this.user + punctuation;
+ * }
+ *
+ * var object = { 'user': 'fred' };
+ *
+ * var bound = _.bind(greet, object, 'hi');
+ * bound('!');
+ * // => 'hi fred!'
+ *
+ * // Bound with placeholders.
+ * var bound = _.bind(greet, object, _, '!');
+ * bound('hi');
+ * // => 'hi fred!'
+ */
+ var bind = baseRest(function(func, thisArg, partials) {
+ var bitmask = WRAP_BIND_FLAG;
+ if (partials.length) {
+ var holders = replaceHolders(partials, getHolder(bind));
+ bitmask |= WRAP_PARTIAL_FLAG;
+ }
+ return createWrap(func, bitmask, thisArg, partials, holders);
+ });
+
+ /**
+ * Creates a function that invokes the method at `object[key]` with `partials`
+ * prepended to the arguments it receives.
+ *
+ * This method differs from `_.bind` by allowing bound functions to reference
+ * methods that may be redefined or don't yet exist. See
+ * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)
+ * for more details.
+ *
+ * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic
+ * builds, may be used as a placeholder for partially applied arguments.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.10.0
+ * @category Function
+ * @param {Object} object The object to invoke the method on.
+ * @param {string} key The key of the method.
+ * @param {...*} [partials] The arguments to be partially applied.
+ * @returns {Function} Returns the new bound function.
+ * @example
+ *
+ * var object = {
+ * 'user': 'fred',
+ * 'greet': function(greeting, punctuation) {
+ * return greeting + ' ' + this.user + punctuation;
+ * }
+ * };
+ *
+ * var bound = _.bindKey(object, 'greet', 'hi');
+ * bound('!');
+ * // => 'hi fred!'
+ *
+ * object.greet = function(greeting, punctuation) {
+ * return greeting + 'ya ' + this.user + punctuation;
+ * };
+ *
+ * bound('!');
+ * // => 'hiya fred!'
+ *
+ * // Bound with placeholders.
+ * var bound = _.bindKey(object, 'greet', _, '!');
+ * bound('hi');
+ * // => 'hiya fred!'
+ */
+ var bindKey = baseRest(function(object, key, partials) {
+ var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;
+ if (partials.length) {
+ var holders = replaceHolders(partials, getHolder(bindKey));
+ bitmask |= WRAP_PARTIAL_FLAG;
+ }
+ return createWrap(key, bitmask, object, partials, holders);
+ });
+
+ /**
+ * Creates a function that accepts arguments of `func` and either invokes
+ * `func` returning its result, if at least `arity` number of arguments have
+ * been provided, or returns a function that accepts the remaining `func`
+ * arguments, and so on. The arity of `func` may be specified if `func.length`
+ * is not sufficient.
+ *
+ * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,
+ * may be used as a placeholder for provided arguments.
+ *
+ * **Note:** This method doesn't set the "length" property of curried functions.
+ *
+ * @static
+ * @memberOf _
+ * @since 2.0.0
+ * @category Function
+ * @param {Function} func The function to curry.
+ * @param {number} [arity=func.length] The arity of `func`.
+ * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
+ * @returns {Function} Returns the new curried function.
+ * @example
+ *
+ * var abc = function(a, b, c) {
+ * return [a, b, c];
+ * };
+ *
+ * var curried = _.curry(abc);
+ *
+ * curried(1)(2)(3);
+ * // => [1, 2, 3]
+ *
+ * curried(1, 2)(3);
+ * // => [1, 2, 3]
+ *
+ * curried(1, 2, 3);
+ * // => [1, 2, 3]
+ *
+ * // Curried with placeholders.
+ * curried(1)(_, 3)(2);
+ * // => [1, 2, 3]
+ */
+ function curry(func, arity, guard) {
+ arity = guard ? undefined : arity;
+ var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);
+ result.placeholder = curry.placeholder;
+ return result;
+ }
+
+ /**
+ * This method is like `_.curry` except that arguments are applied to `func`
+ * in the manner of `_.partialRight` instead of `_.partial`.
+ *
+ * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic
+ * builds, may be used as a placeholder for provided arguments.
+ *
+ * **Note:** This method doesn't set the "length" property of curried functions.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category Function
+ * @param {Function} func The function to curry.
+ * @param {number} [arity=func.length] The arity of `func`.
+ * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
+ * @returns {Function} Returns the new curried function.
+ * @example
+ *
+ * var abc = function(a, b, c) {
+ * return [a, b, c];
+ * };
+ *
+ * var curried = _.curryRight(abc);
+ *
+ * curried(3)(2)(1);
+ * // => [1, 2, 3]
+ *
+ * curried(2, 3)(1);
+ * // => [1, 2, 3]
+ *
+ * curried(1, 2, 3);
+ * // => [1, 2, 3]
+ *
+ * // Curried with placeholders.
+ * curried(3)(1, _)(2);
+ * // => [1, 2, 3]
+ */
+ function curryRight(func, arity, guard) {
+ arity = guard ? undefined : arity;
+ var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);
+ result.placeholder = curryRight.placeholder;
+ return result;
+ }
+
+ /**
+ * Creates a debounced function that delays invoking `func` until after `wait`
+ * milliseconds have elapsed since the last time the debounced function was
+ * invoked. The debounced function comes with a `cancel` method to cancel
+ * delayed `func` invocations and a `flush` method to immediately invoke them.
+ * Provide `options` to indicate whether `func` should be invoked on the
+ * leading and/or trailing edge of the `wait` timeout. The `func` is invoked
+ * with the last arguments provided to the debounced function. Subsequent
+ * calls to the debounced function return the result of the last `func`
+ * invocation.
+ *
+ * **Note:** If `leading` and `trailing` options are `true`, `func` is
+ * invoked on the trailing edge of the timeout only if the debounced function
+ * is invoked more than once during the `wait` timeout.
+ *
+ * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
+ * until to the next tick, similar to `setTimeout` with a timeout of `0`.
+ *
+ * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
+ * for details over the differences between `_.debounce` and `_.throttle`.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Function
+ * @param {Function} func The function to debounce.
+ * @param {number} [wait=0] The number of milliseconds to delay.
+ * @param {Object} [options={}] The options object.
+ * @param {boolean} [options.leading=false]
+ * Specify invoking on the leading edge of the timeout.
+ * @param {number} [options.maxWait]
+ * The maximum time `func` is allowed to be delayed before it's invoked.
+ * @param {boolean} [options.trailing=true]
+ * Specify invoking on the trailing edge of the timeout.
+ * @returns {Function} Returns the new debounced function.
+ * @example
+ *
+ * // Avoid costly calculations while the window size is in flux.
+ * jQuery(window).on('resize', _.debounce(calculateLayout, 150));
+ *
+ * // Invoke `sendMail` when clicked, debouncing subsequent calls.
+ * jQuery(element).on('click', _.debounce(sendMail, 300, {
+ * 'leading': true,
+ * 'trailing': false
+ * }));
+ *
+ * // Ensure `batchLog` is invoked once after 1 second of debounced calls.
+ * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });
+ * var source = new EventSource('/stream');
+ * jQuery(source).on('message', debounced);
+ *
+ * // Cancel the trailing debounced invocation.
+ * jQuery(window).on('popstate', debounced.cancel);
+ */
+ function debounce(func, wait, options) {
+ var lastArgs,
+ lastThis,
+ maxWait,
+ result,
+ timerId,
+ lastCallTime,
+ lastInvokeTime = 0,
+ leading = false,
+ maxing = false,
+ trailing = true;
+
+ if (typeof func != 'function') {
+ throw new TypeError(FUNC_ERROR_TEXT);
+ }
+ wait = toNumber(wait) || 0;
+ if (isObject(options)) {
+ leading = !!options.leading;
+ maxing = 'maxWait' in options;
+ maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;
+ trailing = 'trailing' in options ? !!options.trailing : trailing;
+ }
+
+ function invokeFunc(time) {
+ var args = lastArgs,
+ thisArg = lastThis;
+
+ lastArgs = lastThis = undefined;
+ lastInvokeTime = time;
+ result = func.apply(thisArg, args);
+ return result;
+ }
+
+ function leadingEdge(time) {
+ // Reset any `maxWait` timer.
+ lastInvokeTime = time;
+ // Start the timer for the trailing edge.
+ timerId = setTimeout(timerExpired, wait);
+ // Invoke the leading edge.
+ return leading ? invokeFunc(time) : result;
+ }
+
+ function remainingWait(time) {
+ var timeSinceLastCall = time - lastCallTime,
+ timeSinceLastInvoke = time - lastInvokeTime,
+ timeWaiting = wait - timeSinceLastCall;
+
+ return maxing
+ ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)
+ : timeWaiting;
+ }
+
+ function shouldInvoke(time) {
+ var timeSinceLastCall = time - lastCallTime,
+ timeSinceLastInvoke = time - lastInvokeTime;
+
+ // Either this is the first call, activity has stopped and we're at the
+ // trailing edge, the system time has gone backwards and we're treating
+ // it as the trailing edge, or we've hit the `maxWait` limit.
+ return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||
+ (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));
+ }
+
+ function timerExpired() {
+ var time = now();
+ if (shouldInvoke(time)) {
+ return trailingEdge(time);
+ }
+ // Restart the timer.
+ timerId = setTimeout(timerExpired, remainingWait(time));
+ }
+
+ function trailingEdge(time) {
+ timerId = undefined;
+
+ // Only invoke if we have `lastArgs` which means `func` has been
+ // debounced at least once.
+ if (trailing && lastArgs) {
+ return invokeFunc(time);
+ }
+ lastArgs = lastThis = undefined;
+ return result;
+ }
+
+ function cancel() {
+ if (timerId !== undefined) {
+ clearTimeout(timerId);
+ }
+ lastInvokeTime = 0;
+ lastArgs = lastCallTime = lastThis = timerId = undefined;
+ }
+
+ function flush() {
+ return timerId === undefined ? result : trailingEdge(now());
+ }
+
+ function debounced() {
+ var time = now(),
+ isInvoking = shouldInvoke(time);
+
+ lastArgs = arguments;
+ lastThis = this;
+ lastCallTime = time;
+
+ if (isInvoking) {
+ if (timerId === undefined) {
+ return leadingEdge(lastCallTime);
+ }
+ if (maxing) {
+ // Handle invocations in a tight loop.
+ timerId = setTimeout(timerExpired, wait);
+ return invokeFunc(lastCallTime);
+ }
+ }
+ if (timerId === undefined) {
+ timerId = setTimeout(timerExpired, wait);
+ }
+ return result;
+ }
+ debounced.cancel = cancel;
+ debounced.flush = flush;
+ return debounced;
+ }
+
+ /**
+ * Defers invoking the `func` until the current call stack has cleared. Any
+ * additional arguments are provided to `func` when it's invoked.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Function
+ * @param {Function} func The function to defer.
+ * @param {...*} [args] The arguments to invoke `func` with.
+ * @returns {number} Returns the timer id.
+ * @example
+ *
+ * _.defer(function(text) {
+ * console.log(text);
+ * }, 'deferred');
+ * // => Logs 'deferred' after one millisecond.
+ */
+ var defer = baseRest(function(func, args) {
+ return baseDelay(func, 1, args);
+ });
+
+ /**
+ * Invokes `func` after `wait` milliseconds. Any additional arguments are
+ * provided to `func` when it's invoked.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Function
+ * @param {Function} func The function to delay.
+ * @param {number} wait The number of milliseconds to delay invocation.
+ * @param {...*} [args] The arguments to invoke `func` with.
+ * @returns {number} Returns the timer id.
+ * @example
+ *
+ * _.delay(function(text) {
+ * console.log(text);
+ * }, 1000, 'later');
+ * // => Logs 'later' after one second.
+ */
+ var delay = baseRest(function(func, wait, args) {
+ return baseDelay(func, toNumber(wait) || 0, args);
+ });
+
+ /**
+ * Creates a function that invokes `func` with arguments reversed.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Function
+ * @param {Function} func The function to flip arguments for.
+ * @returns {Function} Returns the new flipped function.
+ * @example
+ *
+ * var flipped = _.flip(function() {
+ * return _.toArray(arguments);
+ * });
+ *
+ * flipped('a', 'b', 'c', 'd');
+ * // => ['d', 'c', 'b', 'a']
+ */
+ function flip(func) {
+ return createWrap(func, WRAP_FLIP_FLAG);
+ }
+
+ /**
+ * Creates a function that memoizes the result of `func`. If `resolver` is
+ * provided, it determines the cache key for storing the result based on the
+ * arguments provided to the memoized function. By default, the first argument
+ * provided to the memoized function is used as the map cache key. The `func`
+ * is invoked with the `this` binding of the memoized function.
+ *
+ * **Note:** The cache is exposed as the `cache` property on the memoized
+ * function. Its creation may be customized by replacing the `_.memoize.Cache`
+ * constructor with one whose instances implement the
+ * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)
+ * method interface of `clear`, `delete`, `get`, `has`, and `set`.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Function
+ * @param {Function} func The function to have its output memoized.
+ * @param {Function} [resolver] The function to resolve the cache key.
+ * @returns {Function} Returns the new memoized function.
+ * @example
+ *
+ * var object = { 'a': 1, 'b': 2 };
+ * var other = { 'c': 3, 'd': 4 };
+ *
+ * var values = _.memoize(_.values);
+ * values(object);
+ * // => [1, 2]
+ *
+ * values(other);
+ * // => [3, 4]
+ *
+ * object.a = 2;
+ * values(object);
+ * // => [1, 2]
+ *
+ * // Modify the result cache.
+ * values.cache.set(object, ['a', 'b']);
+ * values(object);
+ * // => ['a', 'b']
+ *
+ * // Replace `_.memoize.Cache`.
+ * _.memoize.Cache = WeakMap;
+ */
+ function memoize(func, resolver) {
+ if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {
+ throw new TypeError(FUNC_ERROR_TEXT);
+ }
+ var memoized = function() {
+ var args = arguments,
+ key = resolver ? resolver.apply(this, args) : args[0],
+ cache = memoized.cache;
+
+ if (cache.has(key)) {
+ return cache.get(key);
+ }
+ var result = func.apply(this, args);
+ memoized.cache = cache.set(key, result) || cache;
+ return result;
+ };
+ memoized.cache = new (memoize.Cache || MapCache);
+ return memoized;
+ }
+
+ // Expose `MapCache`.
+ memoize.Cache = MapCache;
+
+ /**
+ * Creates a function that negates the result of the predicate `func`. The
+ * `func` predicate is invoked with the `this` binding and arguments of the
+ * created function.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category Function
+ * @param {Function} predicate The predicate to negate.
+ * @returns {Function} Returns the new negated function.
+ * @example
+ *
+ * function isEven(n) {
+ * return n % 2 == 0;
+ * }
+ *
+ * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));
+ * // => [1, 3, 5]
+ */
+ function negate(predicate) {
+ if (typeof predicate != 'function') {
+ throw new TypeError(FUNC_ERROR_TEXT);
+ }
+ return function() {
+ var args = arguments;
+ switch (args.length) {
+ case 0: return !predicate.call(this);
+ case 1: return !predicate.call(this, args[0]);
+ case 2: return !predicate.call(this, args[0], args[1]);
+ case 3: return !predicate.call(this, args[0], args[1], args[2]);
+ }
+ return !predicate.apply(this, args);
+ };
+ }
+
+ /**
+ * Creates a function that is restricted to invoking `func` once. Repeat calls
+ * to the function return the value of the first invocation. The `func` is
+ * invoked with the `this` binding and arguments of the created function.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Function
+ * @param {Function} func The function to restrict.
+ * @returns {Function} Returns the new restricted function.
+ * @example
+ *
+ * var initialize = _.once(createApplication);
+ * initialize();
+ * initialize();
+ * // => `createApplication` is invoked once
+ */
+ function once(func) {
+ return before(2, func);
+ }
+
+ /**
+ * Creates a function that invokes `func` with its arguments transformed.
+ *
+ * @static
+ * @since 4.0.0
+ * @memberOf _
+ * @category Function
+ * @param {Function} func The function to wrap.
+ * @param {...(Function|Function[])} [transforms=[_.identity]]
+ * The argument transforms.
+ * @returns {Function} Returns the new function.
+ * @example
+ *
+ * function doubled(n) {
+ * return n * 2;
+ * }
+ *
+ * function square(n) {
+ * return n * n;
+ * }
+ *
+ * var func = _.overArgs(function(x, y) {
+ * return [x, y];
+ * }, [square, doubled]);
+ *
+ * func(9, 3);
+ * // => [81, 6]
+ *
+ * func(10, 5);
+ * // => [100, 10]
+ */
+ var overArgs = castRest(function(func, transforms) {
+ transforms = (transforms.length == 1 && isArray(transforms[0]))
+ ? arrayMap(transforms[0], baseUnary(getIteratee()))
+ : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));
+
+ var funcsLength = transforms.length;
+ return baseRest(function(args) {
+ var index = -1,
+ length = nativeMin(args.length, funcsLength);
+
+ while (++index < length) {
+ args[index] = transforms[index].call(this, args[index]);
+ }
+ return apply(func, this, args);
+ });
+ });
+
+ /**
+ * Creates a function that invokes `func` with `partials` prepended to the
+ * arguments it receives. This method is like `_.bind` except it does **not**
+ * alter the `this` binding.
+ *
+ * The `_.partial.placeholder` value, which defaults to `_` in monolithic
+ * builds, may be used as a placeholder for partially applied arguments.
+ *
+ * **Note:** This method doesn't set the "length" property of partially
+ * applied functions.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.2.0
+ * @category Function
+ * @param {Function} func The function to partially apply arguments to.
+ * @param {...*} [partials] The arguments to be partially applied.
+ * @returns {Function} Returns the new partially applied function.
+ * @example
+ *
+ * function greet(greeting, name) {
+ * return greeting + ' ' + name;
+ * }
+ *
+ * var sayHelloTo = _.partial(greet, 'hello');
+ * sayHelloTo('fred');
+ * // => 'hello fred'
+ *
+ * // Partially applied with placeholders.
+ * var greetFred = _.partial(greet, _, 'fred');
+ * greetFred('hi');
+ * // => 'hi fred'
+ */
+ var partial = baseRest(function(func, partials) {
+ var holders = replaceHolders(partials, getHolder(partial));
+ return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);
+ });
+
+ /**
+ * This method is like `_.partial` except that partially applied arguments
+ * are appended to the arguments it receives.
+ *
+ * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic
+ * builds, may be used as a placeholder for partially applied arguments.
+ *
+ * **Note:** This method doesn't set the "length" property of partially
+ * applied functions.
+ *
+ * @static
+ * @memberOf _
+ * @since 1.0.0
+ * @category Function
+ * @param {Function} func The function to partially apply arguments to.
+ * @param {...*} [partials] The arguments to be partially applied.
+ * @returns {Function} Returns the new partially applied function.
+ * @example
+ *
+ * function greet(greeting, name) {
+ * return greeting + ' ' + name;
+ * }
+ *
+ * var greetFred = _.partialRight(greet, 'fred');
+ * greetFred('hi');
+ * // => 'hi fred'
+ *
+ * // Partially applied with placeholders.
+ * var sayHelloTo = _.partialRight(greet, 'hello', _);
+ * sayHelloTo('fred');
+ * // => 'hello fred'
+ */
+ var partialRight = baseRest(function(func, partials) {
+ var holders = replaceHolders(partials, getHolder(partialRight));
+ return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);
+ });
+
+ /**
+ * Creates a function that invokes `func` with arguments arranged according
+ * to the specified `indexes` where the argument value at the first index is
+ * provided as the first argument, the argument value at the second index is
+ * provided as the second argument, and so on.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category Function
+ * @param {Function} func The function to rearrange arguments for.
+ * @param {...(number|number[])} indexes The arranged argument indexes.
+ * @returns {Function} Returns the new function.
+ * @example
+ *
+ * var rearged = _.rearg(function(a, b, c) {
+ * return [a, b, c];
+ * }, [2, 0, 1]);
+ *
+ * rearged('b', 'c', 'a')
+ * // => ['a', 'b', 'c']
+ */
+ var rearg = flatRest(function(func, indexes) {
+ return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);
+ });
+
+ /**
+ * Creates a function that invokes `func` with the `this` binding of the
+ * created function and arguments from `start` and beyond provided as
+ * an array.
+ *
+ * **Note:** This method is based on the
+ * [rest parameter](https://mdn.io/rest_parameters).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Function
+ * @param {Function} func The function to apply a rest parameter to.
+ * @param {number} [start=func.length-1] The start position of the rest parameter.
+ * @returns {Function} Returns the new function.
+ * @example
+ *
+ * var say = _.rest(function(what, names) {
+ * return what + ' ' + _.initial(names).join(', ') +
+ * (_.size(names) > 1 ? ', & ' : '') + _.last(names);
+ * });
+ *
+ * say('hello', 'fred', 'barney', 'pebbles');
+ * // => 'hello fred, barney, & pebbles'
+ */
+ function rest(func, start) {
+ if (typeof func != 'function') {
+ throw new TypeError(FUNC_ERROR_TEXT);
+ }
+ start = start === undefined ? start : toInteger(start);
+ return baseRest(func, start);
+ }
+
+ /**
+ * Creates a function that invokes `func` with the `this` binding of the
+ * create function and an array of arguments much like
+ * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).
+ *
+ * **Note:** This method is based on the
+ * [spread operator](https://mdn.io/spread_operator).
+ *
+ * @static
+ * @memberOf _
+ * @since 3.2.0
+ * @category Function
+ * @param {Function} func The function to spread arguments over.
+ * @param {number} [start=0] The start position of the spread.
+ * @returns {Function} Returns the new function.
+ * @example
+ *
+ * var say = _.spread(function(who, what) {
+ * return who + ' says ' + what;
+ * });
+ *
+ * say(['fred', 'hello']);
+ * // => 'fred says hello'
+ *
+ * var numbers = Promise.all([
+ * Promise.resolve(40),
+ * Promise.resolve(36)
+ * ]);
+ *
+ * numbers.then(_.spread(function(x, y) {
+ * return x + y;
+ * }));
+ * // => a Promise of 76
+ */
+ function spread(func, start) {
+ if (typeof func != 'function') {
+ throw new TypeError(FUNC_ERROR_TEXT);
+ }
+ start = start == null ? 0 : nativeMax(toInteger(start), 0);
+ return baseRest(function(args) {
+ var array = args[start],
+ otherArgs = castSlice(args, 0, start);
+
+ if (array) {
+ arrayPush(otherArgs, array);
+ }
+ return apply(func, this, otherArgs);
+ });
+ }
+
+ /**
+ * Creates a throttled function that only invokes `func` at most once per
+ * every `wait` milliseconds. The throttled function comes with a `cancel`
+ * method to cancel delayed `func` invocations and a `flush` method to
+ * immediately invoke them. Provide `options` to indicate whether `func`
+ * should be invoked on the leading and/or trailing edge of the `wait`
+ * timeout. The `func` is invoked with the last arguments provided to the
+ * throttled function. Subsequent calls to the throttled function return the
+ * result of the last `func` invocation.
+ *
+ * **Note:** If `leading` and `trailing` options are `true`, `func` is
+ * invoked on the trailing edge of the timeout only if the throttled function
+ * is invoked more than once during the `wait` timeout.
+ *
+ * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
+ * until to the next tick, similar to `setTimeout` with a timeout of `0`.
+ *
+ * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
+ * for details over the differences between `_.throttle` and `_.debounce`.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Function
+ * @param {Function} func The function to throttle.
+ * @param {number} [wait=0] The number of milliseconds to throttle invocations to.
+ * @param {Object} [options={}] The options object.
+ * @param {boolean} [options.leading=true]
+ * Specify invoking on the leading edge of the timeout.
+ * @param {boolean} [options.trailing=true]
+ * Specify invoking on the trailing edge of the timeout.
+ * @returns {Function} Returns the new throttled function.
+ * @example
+ *
+ * // Avoid excessively updating the position while scrolling.
+ * jQuery(window).on('scroll', _.throttle(updatePosition, 100));
+ *
+ * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.
+ * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });
+ * jQuery(element).on('click', throttled);
+ *
+ * // Cancel the trailing throttled invocation.
+ * jQuery(window).on('popstate', throttled.cancel);
+ */
+ function throttle(func, wait, options) {
+ var leading = true,
+ trailing = true;
+
+ if (typeof func != 'function') {
+ throw new TypeError(FUNC_ERROR_TEXT);
+ }
+ if (isObject(options)) {
+ leading = 'leading' in options ? !!options.leading : leading;
+ trailing = 'trailing' in options ? !!options.trailing : trailing;
+ }
+ return debounce(func, wait, {
+ 'leading': leading,
+ 'maxWait': wait,
+ 'trailing': trailing
+ });
+ }
+
+ /**
+ * Creates a function that accepts up to one argument, ignoring any
+ * additional arguments.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Function
+ * @param {Function} func The function to cap arguments for.
+ * @returns {Function} Returns the new capped function.
+ * @example
+ *
+ * _.map(['6', '8', '10'], _.unary(parseInt));
+ * // => [6, 8, 10]
+ */
+ function unary(func) {
+ return ary(func, 1);
+ }
+
+ /**
+ * Creates a function that provides `value` to `wrapper` as its first
+ * argument. Any additional arguments provided to the function are appended
+ * to those provided to the `wrapper`. The wrapper is invoked with the `this`
+ * binding of the created function.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Function
+ * @param {*} value The value to wrap.
+ * @param {Function} [wrapper=identity] The wrapper function.
+ * @returns {Function} Returns the new function.
+ * @example
+ *
+ * var p = _.wrap(_.escape, function(func, text) {
+ * return '' + func(text) + '
';
+ * });
+ *
+ * p('fred, barney, & pebbles');
+ * // => 'fred, barney, & pebbles
'
+ */
+ function wrap(value, wrapper) {
+ return partial(castFunction(wrapper), value);
+ }
+
+ /*------------------------------------------------------------------------*/
+
+ /**
+ * Casts `value` as an array if it's not one.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.4.0
+ * @category Lang
+ * @param {*} value The value to inspect.
+ * @returns {Array} Returns the cast array.
+ * @example
+ *
+ * _.castArray(1);
+ * // => [1]
+ *
+ * _.castArray({ 'a': 1 });
+ * // => [{ 'a': 1 }]
+ *
+ * _.castArray('abc');
+ * // => ['abc']
+ *
+ * _.castArray(null);
+ * // => [null]
+ *
+ * _.castArray(undefined);
+ * // => [undefined]
+ *
+ * _.castArray();
+ * // => []
+ *
+ * var array = [1, 2, 3];
+ * console.log(_.castArray(array) === array);
+ * // => true
+ */
+ function castArray() {
+ if (!arguments.length) {
+ return [];
+ }
+ var value = arguments[0];
+ return isArray(value) ? value : [value];
+ }
+
+ /**
+ * Creates a shallow clone of `value`.
+ *
+ * **Note:** This method is loosely based on the
+ * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)
+ * and supports cloning arrays, array buffers, booleans, date objects, maps,
+ * numbers, `Object` objects, regexes, sets, strings, symbols, and typed
+ * arrays. The own enumerable properties of `arguments` objects are cloned
+ * as plain objects. An empty object is returned for uncloneable values such
+ * as error objects, functions, DOM nodes, and WeakMaps.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to clone.
+ * @returns {*} Returns the cloned value.
+ * @see _.cloneDeep
+ * @example
+ *
+ * var objects = [{ 'a': 1 }, { 'b': 2 }];
+ *
+ * var shallow = _.clone(objects);
+ * console.log(shallow[0] === objects[0]);
+ * // => true
+ */
+ function clone(value) {
+ return baseClone(value, CLONE_SYMBOLS_FLAG);
+ }
+
+ /**
+ * This method is like `_.clone` except that it accepts `customizer` which
+ * is invoked to produce the cloned value. If `customizer` returns `undefined`,
+ * cloning is handled by the method instead. The `customizer` is invoked with
+ * up to four arguments; (value [, index|key, object, stack]).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to clone.
+ * @param {Function} [customizer] The function to customize cloning.
+ * @returns {*} Returns the cloned value.
+ * @see _.cloneDeepWith
+ * @example
+ *
+ * function customizer(value) {
+ * if (_.isElement(value)) {
+ * return value.cloneNode(false);
+ * }
+ * }
+ *
+ * var el = _.cloneWith(document.body, customizer);
+ *
+ * console.log(el === document.body);
+ * // => false
+ * console.log(el.nodeName);
+ * // => 'BODY'
+ * console.log(el.childNodes.length);
+ * // => 0
+ */
+ function cloneWith(value, customizer) {
+ customizer = typeof customizer == 'function' ? customizer : undefined;
+ return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);
+ }
+
+ /**
+ * This method is like `_.clone` except that it recursively clones `value`.
+ *
+ * @static
+ * @memberOf _
+ * @since 1.0.0
+ * @category Lang
+ * @param {*} value The value to recursively clone.
+ * @returns {*} Returns the deep cloned value.
+ * @see _.clone
+ * @example
+ *
+ * var objects = [{ 'a': 1 }, { 'b': 2 }];
+ *
+ * var deep = _.cloneDeep(objects);
+ * console.log(deep[0] === objects[0]);
+ * // => false
+ */
+ function cloneDeep(value) {
+ return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);
+ }
+
+ /**
+ * This method is like `_.cloneWith` except that it recursively clones `value`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to recursively clone.
+ * @param {Function} [customizer] The function to customize cloning.
+ * @returns {*} Returns the deep cloned value.
+ * @see _.cloneWith
+ * @example
+ *
+ * function customizer(value) {
+ * if (_.isElement(value)) {
+ * return value.cloneNode(true);
+ * }
+ * }
+ *
+ * var el = _.cloneDeepWith(document.body, customizer);
+ *
+ * console.log(el === document.body);
+ * // => false
+ * console.log(el.nodeName);
+ * // => 'BODY'
+ * console.log(el.childNodes.length);
+ * // => 20
+ */
+ function cloneDeepWith(value, customizer) {
+ customizer = typeof customizer == 'function' ? customizer : undefined;
+ return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);
+ }
+
+ /**
+ * Checks if `object` conforms to `source` by invoking the predicate
+ * properties of `source` with the corresponding property values of `object`.
+ *
+ * **Note:** This method is equivalent to `_.conforms` when `source` is
+ * partially applied.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.14.0
+ * @category Lang
+ * @param {Object} object The object to inspect.
+ * @param {Object} source The object of property predicates to conform to.
+ * @returns {boolean} Returns `true` if `object` conforms, else `false`.
+ * @example
+ *
+ * var object = { 'a': 1, 'b': 2 };
+ *
+ * _.conformsTo(object, { 'b': function(n) { return n > 1; } });
+ * // => true
+ *
+ * _.conformsTo(object, { 'b': function(n) { return n > 2; } });
+ * // => false
+ */
+ function conformsTo(object, source) {
+ return source == null || baseConformsTo(object, source, keys(source));
+ }
+
+ /**
+ * Performs a
+ * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
+ * comparison between two values to determine if they are equivalent.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
+ * @example
+ *
+ * var object = { 'a': 1 };
+ * var other = { 'a': 1 };
+ *
+ * _.eq(object, object);
+ * // => true
+ *
+ * _.eq(object, other);
+ * // => false
+ *
+ * _.eq('a', 'a');
+ * // => true
+ *
+ * _.eq('a', Object('a'));
+ * // => false
+ *
+ * _.eq(NaN, NaN);
+ * // => true
+ */
+ function eq(value, other) {
+ return value === other || (value !== value && other !== other);
+ }
+
+ /**
+ * Checks if `value` is greater than `other`.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.9.0
+ * @category Lang
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @returns {boolean} Returns `true` if `value` is greater than `other`,
+ * else `false`.
+ * @see _.lt
+ * @example
+ *
+ * _.gt(3, 1);
+ * // => true
+ *
+ * _.gt(3, 3);
+ * // => false
+ *
+ * _.gt(1, 3);
+ * // => false
+ */
+ var gt = createRelationalOperation(baseGt);
+
+ /**
+ * Checks if `value` is greater than or equal to `other`.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.9.0
+ * @category Lang
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @returns {boolean} Returns `true` if `value` is greater than or equal to
+ * `other`, else `false`.
+ * @see _.lte
+ * @example
+ *
+ * _.gte(3, 1);
+ * // => true
+ *
+ * _.gte(3, 3);
+ * // => true
+ *
+ * _.gte(1, 3);
+ * // => false
+ */
+ var gte = createRelationalOperation(function(value, other) {
+ return value >= other;
+ });
+
+ /**
+ * Checks if `value` is likely an `arguments` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an `arguments` object,
+ * else `false`.
+ * @example
+ *
+ * _.isArguments(function() { return arguments; }());
+ * // => true
+ *
+ * _.isArguments([1, 2, 3]);
+ * // => false
+ */
+ var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {
+ return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&
+ !propertyIsEnumerable.call(value, 'callee');
+ };
+
+ /**
+ * Checks if `value` is classified as an `Array` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an array, else `false`.
+ * @example
+ *
+ * _.isArray([1, 2, 3]);
+ * // => true
+ *
+ * _.isArray(document.body.children);
+ * // => false
+ *
+ * _.isArray('abc');
+ * // => false
+ *
+ * _.isArray(_.noop);
+ * // => false
+ */
+ var isArray = Array.isArray;
+
+ /**
+ * Checks if `value` is classified as an `ArrayBuffer` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.3.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.
+ * @example
+ *
+ * _.isArrayBuffer(new ArrayBuffer(2));
+ * // => true
+ *
+ * _.isArrayBuffer(new Array(2));
+ * // => false
+ */
+ var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;
+
+ /**
+ * Checks if `value` is array-like. A value is considered array-like if it's
+ * not a function and has a `value.length` that's an integer greater than or
+ * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
+ * @example
+ *
+ * _.isArrayLike([1, 2, 3]);
+ * // => true
+ *
+ * _.isArrayLike(document.body.children);
+ * // => true
+ *
+ * _.isArrayLike('abc');
+ * // => true
+ *
+ * _.isArrayLike(_.noop);
+ * // => false
+ */
+ function isArrayLike(value) {
+ return value != null && isLength(value.length) && !isFunction(value);
+ }
+
+ /**
+ * This method is like `_.isArrayLike` except that it also checks if `value`
+ * is an object.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an array-like object,
+ * else `false`.
+ * @example
+ *
+ * _.isArrayLikeObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isArrayLikeObject(document.body.children);
+ * // => true
+ *
+ * _.isArrayLikeObject('abc');
+ * // => false
+ *
+ * _.isArrayLikeObject(_.noop);
+ * // => false
+ */
+ function isArrayLikeObject(value) {
+ return isObjectLike(value) && isArrayLike(value);
+ }
+
+ /**
+ * Checks if `value` is classified as a boolean primitive or object.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.
+ * @example
+ *
+ * _.isBoolean(false);
+ * // => true
+ *
+ * _.isBoolean(null);
+ * // => false
+ */
+ function isBoolean(value) {
+ return value === true || value === false ||
+ (isObjectLike(value) && baseGetTag(value) == boolTag);
+ }
+
+ /**
+ * Checks if `value` is a buffer.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.3.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.
+ * @example
+ *
+ * _.isBuffer(new Buffer(2));
+ * // => true
+ *
+ * _.isBuffer(new Uint8Array(2));
+ * // => false
+ */
+ var isBuffer = nativeIsBuffer || stubFalse;
+
+ /**
+ * Checks if `value` is classified as a `Date` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a date object, else `false`.
+ * @example
+ *
+ * _.isDate(new Date);
+ * // => true
+ *
+ * _.isDate('Mon April 23 2012');
+ * // => false
+ */
+ var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;
+
+ /**
+ * Checks if `value` is likely a DOM element.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.
+ * @example
+ *
+ * _.isElement(document.body);
+ * // => true
+ *
+ * _.isElement('');
+ * // => false
+ */
+ function isElement(value) {
+ return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);
+ }
+
+ /**
+ * Checks if `value` is an empty object, collection, map, or set.
+ *
+ * Objects are considered empty if they have no own enumerable string keyed
+ * properties.
+ *
+ * Array-like values such as `arguments` objects, arrays, buffers, strings, or
+ * jQuery-like collections are considered empty if they have a `length` of `0`.
+ * Similarly, maps and sets are considered empty if they have a `size` of `0`.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is empty, else `false`.
+ * @example
+ *
+ * _.isEmpty(null);
+ * // => true
+ *
+ * _.isEmpty(true);
+ * // => true
+ *
+ * _.isEmpty(1);
+ * // => true
+ *
+ * _.isEmpty([1, 2, 3]);
+ * // => false
+ *
+ * _.isEmpty({ 'a': 1 });
+ * // => false
+ */
+ function isEmpty(value) {
+ if (value == null) {
+ return true;
+ }
+ if (isArrayLike(value) &&
+ (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||
+ isBuffer(value) || isTypedArray(value) || isArguments(value))) {
+ return !value.length;
+ }
+ var tag = getTag(value);
+ if (tag == mapTag || tag == setTag) {
+ return !value.size;
+ }
+ if (isPrototype(value)) {
+ return !baseKeys(value).length;
+ }
+ for (var key in value) {
+ if (hasOwnProperty.call(value, key)) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Performs a deep comparison between two values to determine if they are
+ * equivalent.
+ *
+ * **Note:** This method supports comparing arrays, array buffers, booleans,
+ * date objects, error objects, maps, numbers, `Object` objects, regexes,
+ * sets, strings, symbols, and typed arrays. `Object` objects are compared
+ * by their own, not inherited, enumerable properties. Functions and DOM
+ * nodes are compared by strict equality, i.e. `===`.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
+ * @example
+ *
+ * var object = { 'a': 1 };
+ * var other = { 'a': 1 };
+ *
+ * _.isEqual(object, other);
+ * // => true
+ *
+ * object === other;
+ * // => false
+ */
+ function isEqual(value, other) {
+ return baseIsEqual(value, other);
+ }
+
+ /**
+ * This method is like `_.isEqual` except that it accepts `customizer` which
+ * is invoked to compare values. If `customizer` returns `undefined`, comparisons
+ * are handled by the method instead. The `customizer` is invoked with up to
+ * six arguments: (objValue, othValue [, index|key, object, other, stack]).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @param {Function} [customizer] The function to customize comparisons.
+ * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
+ * @example
+ *
+ * function isGreeting(value) {
+ * return /^h(?:i|ello)$/.test(value);
+ * }
+ *
+ * function customizer(objValue, othValue) {
+ * if (isGreeting(objValue) && isGreeting(othValue)) {
+ * return true;
+ * }
+ * }
+ *
+ * var array = ['hello', 'goodbye'];
+ * var other = ['hi', 'goodbye'];
+ *
+ * _.isEqualWith(array, other, customizer);
+ * // => true
+ */
+ function isEqualWith(value, other, customizer) {
+ customizer = typeof customizer == 'function' ? customizer : undefined;
+ var result = customizer ? customizer(value, other) : undefined;
+ return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;
+ }
+
+ /**
+ * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,
+ * `SyntaxError`, `TypeError`, or `URIError` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an error object, else `false`.
+ * @example
+ *
+ * _.isError(new Error);
+ * // => true
+ *
+ * _.isError(Error);
+ * // => false
+ */
+ function isError(value) {
+ if (!isObjectLike(value)) {
+ return false;
+ }
+ var tag = baseGetTag(value);
+ return tag == errorTag || tag == domExcTag ||
+ (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));
+ }
+
+ /**
+ * Checks if `value` is a finite primitive number.
+ *
+ * **Note:** This method is based on
+ * [`Number.isFinite`](https://mdn.io/Number/isFinite).
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.
+ * @example
+ *
+ * _.isFinite(3);
+ * // => true
+ *
+ * _.isFinite(Number.MIN_VALUE);
+ * // => true
+ *
+ * _.isFinite(Infinity);
+ * // => false
+ *
+ * _.isFinite('3');
+ * // => false
+ */
+ function isFinite(value) {
+ return typeof value == 'number' && nativeIsFinite(value);
+ }
+
+ /**
+ * Checks if `value` is classified as a `Function` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a function, else `false`.
+ * @example
+ *
+ * _.isFunction(_);
+ * // => true
+ *
+ * _.isFunction(/abc/);
+ * // => false
+ */
+ function isFunction(value) {
+ if (!isObject(value)) {
+ return false;
+ }
+ // The use of `Object#toString` avoids issues with the `typeof` operator
+ // in Safari 9 which returns 'object' for typed arrays and other constructors.
+ var tag = baseGetTag(value);
+ return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;
+ }
+
+ /**
+ * Checks if `value` is an integer.
+ *
+ * **Note:** This method is based on
+ * [`Number.isInteger`](https://mdn.io/Number/isInteger).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an integer, else `false`.
+ * @example
+ *
+ * _.isInteger(3);
+ * // => true
+ *
+ * _.isInteger(Number.MIN_VALUE);
+ * // => false
+ *
+ * _.isInteger(Infinity);
+ * // => false
+ *
+ * _.isInteger('3');
+ * // => false
+ */
+ function isInteger(value) {
+ return typeof value == 'number' && value == toInteger(value);
+ }
+
+ /**
+ * Checks if `value` is a valid array-like length.
+ *
+ * **Note:** This method is loosely based on
+ * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
+ * @example
+ *
+ * _.isLength(3);
+ * // => true
+ *
+ * _.isLength(Number.MIN_VALUE);
+ * // => false
+ *
+ * _.isLength(Infinity);
+ * // => false
+ *
+ * _.isLength('3');
+ * // => false
+ */
+ function isLength(value) {
+ return typeof value == 'number' &&
+ value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
+ }
+
+ /**
+ * Checks if `value` is the
+ * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
+ * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
+ * @example
+ *
+ * _.isObject({});
+ * // => true
+ *
+ * _.isObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isObject(_.noop);
+ * // => true
+ *
+ * _.isObject(null);
+ * // => false
+ */
+ function isObject(value) {
+ var type = typeof value;
+ return value != null && (type == 'object' || type == 'function');
+ }
+
+ /**
+ * Checks if `value` is object-like. A value is object-like if it's not `null`
+ * and has a `typeof` result of "object".
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
+ * @example
+ *
+ * _.isObjectLike({});
+ * // => true
+ *
+ * _.isObjectLike([1, 2, 3]);
+ * // => true
+ *
+ * _.isObjectLike(_.noop);
+ * // => false
+ *
+ * _.isObjectLike(null);
+ * // => false
+ */
+ function isObjectLike(value) {
+ return value != null && typeof value == 'object';
+ }
+
+ /**
+ * Checks if `value` is classified as a `Map` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.3.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a map, else `false`.
+ * @example
+ *
+ * _.isMap(new Map);
+ * // => true
+ *
+ * _.isMap(new WeakMap);
+ * // => false
+ */
+ var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;
+
+ /**
+ * Performs a partial deep comparison between `object` and `source` to
+ * determine if `object` contains equivalent property values.
+ *
+ * **Note:** This method is equivalent to `_.matches` when `source` is
+ * partially applied.
+ *
+ * Partial comparisons will match empty array and empty object `source`
+ * values against any array or object value, respectively. See `_.isEqual`
+ * for a list of supported value comparisons.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category Lang
+ * @param {Object} object The object to inspect.
+ * @param {Object} source The object of property values to match.
+ * @returns {boolean} Returns `true` if `object` is a match, else `false`.
+ * @example
+ *
+ * var object = { 'a': 1, 'b': 2 };
+ *
+ * _.isMatch(object, { 'b': 2 });
+ * // => true
+ *
+ * _.isMatch(object, { 'b': 1 });
+ * // => false
+ */
+ function isMatch(object, source) {
+ return object === source || baseIsMatch(object, source, getMatchData(source));
+ }
+
+ /**
+ * This method is like `_.isMatch` except that it accepts `customizer` which
+ * is invoked to compare values. If `customizer` returns `undefined`, comparisons
+ * are handled by the method instead. The `customizer` is invoked with five
+ * arguments: (objValue, srcValue, index|key, object, source).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {Object} object The object to inspect.
+ * @param {Object} source The object of property values to match.
+ * @param {Function} [customizer] The function to customize comparisons.
+ * @returns {boolean} Returns `true` if `object` is a match, else `false`.
+ * @example
+ *
+ * function isGreeting(value) {
+ * return /^h(?:i|ello)$/.test(value);
+ * }
+ *
+ * function customizer(objValue, srcValue) {
+ * if (isGreeting(objValue) && isGreeting(srcValue)) {
+ * return true;
+ * }
+ * }
+ *
+ * var object = { 'greeting': 'hello' };
+ * var source = { 'greeting': 'hi' };
+ *
+ * _.isMatchWith(object, source, customizer);
+ * // => true
+ */
+ function isMatchWith(object, source, customizer) {
+ customizer = typeof customizer == 'function' ? customizer : undefined;
+ return baseIsMatch(object, source, getMatchData(source), customizer);
+ }
+
+ /**
+ * Checks if `value` is `NaN`.
+ *
+ * **Note:** This method is based on
+ * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as
+ * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for
+ * `undefined` and other non-number values.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.
+ * @example
+ *
+ * _.isNaN(NaN);
+ * // => true
+ *
+ * _.isNaN(new Number(NaN));
+ * // => true
+ *
+ * isNaN(undefined);
+ * // => true
+ *
+ * _.isNaN(undefined);
+ * // => false
+ */
+ function isNaN(value) {
+ // An `NaN` primitive is the only value that is not equal to itself.
+ // Perform the `toStringTag` check first to avoid errors with some
+ // ActiveX objects in IE.
+ return isNumber(value) && value != +value;
+ }
+
+ /**
+ * Checks if `value` is a pristine native function.
+ *
+ * **Note:** This method can't reliably detect native functions in the presence
+ * of the core-js package because core-js circumvents this kind of detection.
+ * Despite multiple requests, the core-js maintainer has made it clear: any
+ * attempt to fix the detection will be obstructed. As a result, we're left
+ * with little choice but to throw an error. Unfortunately, this also affects
+ * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),
+ * which rely on core-js.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a native function,
+ * else `false`.
+ * @example
+ *
+ * _.isNative(Array.prototype.push);
+ * // => true
+ *
+ * _.isNative(_);
+ * // => false
+ */
+ function isNative(value) {
+ if (isMaskable(value)) {
+ throw new Error(CORE_ERROR_TEXT);
+ }
+ return baseIsNative(value);
+ }
+
+ /**
+ * Checks if `value` is `null`.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is `null`, else `false`.
+ * @example
+ *
+ * _.isNull(null);
+ * // => true
+ *
+ * _.isNull(void 0);
+ * // => false
+ */
+ function isNull(value) {
+ return value === null;
+ }
+
+ /**
+ * Checks if `value` is `null` or `undefined`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is nullish, else `false`.
+ * @example
+ *
+ * _.isNil(null);
+ * // => true
+ *
+ * _.isNil(void 0);
+ * // => true
+ *
+ * _.isNil(NaN);
+ * // => false
+ */
+ function isNil(value) {
+ return value == null;
+ }
+
+ /**
+ * Checks if `value` is classified as a `Number` primitive or object.
+ *
+ * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are
+ * classified as numbers, use the `_.isFinite` method.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a number, else `false`.
+ * @example
+ *
+ * _.isNumber(3);
+ * // => true
+ *
+ * _.isNumber(Number.MIN_VALUE);
+ * // => true
+ *
+ * _.isNumber(Infinity);
+ * // => true
+ *
+ * _.isNumber('3');
+ * // => false
+ */
+ function isNumber(value) {
+ return typeof value == 'number' ||
+ (isObjectLike(value) && baseGetTag(value) == numberTag);
+ }
+
+ /**
+ * Checks if `value` is a plain object, that is, an object created by the
+ * `Object` constructor or one with a `[[Prototype]]` of `null`.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.8.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * }
+ *
+ * _.isPlainObject(new Foo);
+ * // => false
+ *
+ * _.isPlainObject([1, 2, 3]);
+ * // => false
+ *
+ * _.isPlainObject({ 'x': 0, 'y': 0 });
+ * // => true
+ *
+ * _.isPlainObject(Object.create(null));
+ * // => true
+ */
+ function isPlainObject(value) {
+ if (!isObjectLike(value) || baseGetTag(value) != objectTag) {
+ return false;
+ }
+ var proto = getPrototype(value);
+ if (proto === null) {
+ return true;
+ }
+ var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;
+ return typeof Ctor == 'function' && Ctor instanceof Ctor &&
+ funcToString.call(Ctor) == objectCtorString;
+ }
+
+ /**
+ * Checks if `value` is classified as a `RegExp` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.
+ * @example
+ *
+ * _.isRegExp(/abc/);
+ * // => true
+ *
+ * _.isRegExp('/abc/');
+ * // => false
+ */
+ var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;
+
+ /**
+ * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754
+ * double precision number which isn't the result of a rounded unsafe integer.
+ *
+ * **Note:** This method is based on
+ * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.
+ * @example
+ *
+ * _.isSafeInteger(3);
+ * // => true
+ *
+ * _.isSafeInteger(Number.MIN_VALUE);
+ * // => false
+ *
+ * _.isSafeInteger(Infinity);
+ * // => false
+ *
+ * _.isSafeInteger('3');
+ * // => false
+ */
+ function isSafeInteger(value) {
+ return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;
+ }
+
+ /**
+ * Checks if `value` is classified as a `Set` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.3.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a set, else `false`.
+ * @example
+ *
+ * _.isSet(new Set);
+ * // => true
+ *
+ * _.isSet(new WeakSet);
+ * // => false
+ */
+ var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;
+
+ /**
+ * Checks if `value` is classified as a `String` primitive or object.
+ *
+ * @static
+ * @since 0.1.0
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a string, else `false`.
+ * @example
+ *
+ * _.isString('abc');
+ * // => true
+ *
+ * _.isString(1);
+ * // => false
+ */
+ function isString(value) {
+ return typeof value == 'string' ||
+ (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);
+ }
+
+ /**
+ * Checks if `value` is classified as a `Symbol` primitive or object.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
+ * @example
+ *
+ * _.isSymbol(Symbol.iterator);
+ * // => true
+ *
+ * _.isSymbol('abc');
+ * // => false
+ */
+ function isSymbol(value) {
+ return typeof value == 'symbol' ||
+ (isObjectLike(value) && baseGetTag(value) == symbolTag);
+ }
+
+ /**
+ * Checks if `value` is classified as a typed array.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
+ * @example
+ *
+ * _.isTypedArray(new Uint8Array);
+ * // => true
+ *
+ * _.isTypedArray([]);
+ * // => false
+ */
+ var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;
+
+ /**
+ * Checks if `value` is `undefined`.
+ *
+ * @static
+ * @since 0.1.0
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.
+ * @example
+ *
+ * _.isUndefined(void 0);
+ * // => true
+ *
+ * _.isUndefined(null);
+ * // => false
+ */
+ function isUndefined(value) {
+ return value === undefined;
+ }
+
+ /**
+ * Checks if `value` is classified as a `WeakMap` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.3.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.
+ * @example
+ *
+ * _.isWeakMap(new WeakMap);
+ * // => true
+ *
+ * _.isWeakMap(new Map);
+ * // => false
+ */
+ function isWeakMap(value) {
+ return isObjectLike(value) && getTag(value) == weakMapTag;
+ }
+
+ /**
+ * Checks if `value` is classified as a `WeakSet` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.3.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.
+ * @example
+ *
+ * _.isWeakSet(new WeakSet);
+ * // => true
+ *
+ * _.isWeakSet(new Set);
+ * // => false
+ */
+ function isWeakSet(value) {
+ return isObjectLike(value) && baseGetTag(value) == weakSetTag;
+ }
+
+ /**
+ * Checks if `value` is less than `other`.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.9.0
+ * @category Lang
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @returns {boolean} Returns `true` if `value` is less than `other`,
+ * else `false`.
+ * @see _.gt
+ * @example
+ *
+ * _.lt(1, 3);
+ * // => true
+ *
+ * _.lt(3, 3);
+ * // => false
+ *
+ * _.lt(3, 1);
+ * // => false
+ */
+ var lt = createRelationalOperation(baseLt);
+
+ /**
+ * Checks if `value` is less than or equal to `other`.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.9.0
+ * @category Lang
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @returns {boolean} Returns `true` if `value` is less than or equal to
+ * `other`, else `false`.
+ * @see _.gte
+ * @example
+ *
+ * _.lte(1, 3);
+ * // => true
+ *
+ * _.lte(3, 3);
+ * // => true
+ *
+ * _.lte(3, 1);
+ * // => false
+ */
+ var lte = createRelationalOperation(function(value, other) {
+ return value <= other;
+ });
+
+ /**
+ * Converts `value` to an array.
+ *
+ * @static
+ * @since 0.1.0
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to convert.
+ * @returns {Array} Returns the converted array.
+ * @example
+ *
+ * _.toArray({ 'a': 1, 'b': 2 });
+ * // => [1, 2]
+ *
+ * _.toArray('abc');
+ * // => ['a', 'b', 'c']
+ *
+ * _.toArray(1);
+ * // => []
+ *
+ * _.toArray(null);
+ * // => []
+ */
+ function toArray(value) {
+ if (!value) {
+ return [];
+ }
+ if (isArrayLike(value)) {
+ return isString(value) ? stringToArray(value) : copyArray(value);
+ }
+ if (symIterator && value[symIterator]) {
+ return iteratorToArray(value[symIterator]());
+ }
+ var tag = getTag(value),
+ func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);
+
+ return func(value);
+ }
+
+ /**
+ * Converts `value` to a finite number.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.12.0
+ * @category Lang
+ * @param {*} value The value to convert.
+ * @returns {number} Returns the converted number.
+ * @example
+ *
+ * _.toFinite(3.2);
+ * // => 3.2
+ *
+ * _.toFinite(Number.MIN_VALUE);
+ * // => 5e-324
+ *
+ * _.toFinite(Infinity);
+ * // => 1.7976931348623157e+308
+ *
+ * _.toFinite('3.2');
+ * // => 3.2
+ */
+ function toFinite(value) {
+ if (!value) {
+ return value === 0 ? value : 0;
+ }
+ value = toNumber(value);
+ if (value === INFINITY || value === -INFINITY) {
+ var sign = (value < 0 ? -1 : 1);
+ return sign * MAX_INTEGER;
+ }
+ return value === value ? value : 0;
+ }
+
+ /**
+ * Converts `value` to an integer.
+ *
+ * **Note:** This method is loosely based on
+ * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to convert.
+ * @returns {number} Returns the converted integer.
+ * @example
+ *
+ * _.toInteger(3.2);
+ * // => 3
+ *
+ * _.toInteger(Number.MIN_VALUE);
+ * // => 0
+ *
+ * _.toInteger(Infinity);
+ * // => 1.7976931348623157e+308
+ *
+ * _.toInteger('3.2');
+ * // => 3
+ */
+ function toInteger(value) {
+ var result = toFinite(value),
+ remainder = result % 1;
+
+ return result === result ? (remainder ? result - remainder : result) : 0;
+ }
+
+ /**
+ * Converts `value` to an integer suitable for use as the length of an
+ * array-like object.
+ *
+ * **Note:** This method is based on
+ * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to convert.
+ * @returns {number} Returns the converted integer.
+ * @example
+ *
+ * _.toLength(3.2);
+ * // => 3
+ *
+ * _.toLength(Number.MIN_VALUE);
+ * // => 0
+ *
+ * _.toLength(Infinity);
+ * // => 4294967295
+ *
+ * _.toLength('3.2');
+ * // => 3
+ */
+ function toLength(value) {
+ return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;
+ }
+
+ /**
+ * Converts `value` to a number.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to process.
+ * @returns {number} Returns the number.
+ * @example
+ *
+ * _.toNumber(3.2);
+ * // => 3.2
+ *
+ * _.toNumber(Number.MIN_VALUE);
+ * // => 5e-324
+ *
+ * _.toNumber(Infinity);
+ * // => Infinity
+ *
+ * _.toNumber('3.2');
+ * // => 3.2
+ */
+ function toNumber(value) {
+ if (typeof value == 'number') {
+ return value;
+ }
+ if (isSymbol(value)) {
+ return NAN;
+ }
+ if (isObject(value)) {
+ var other = typeof value.valueOf == 'function' ? value.valueOf() : value;
+ value = isObject(other) ? (other + '') : other;
+ }
+ if (typeof value != 'string') {
+ return value === 0 ? value : +value;
+ }
+ value = value.replace(reTrim, '');
+ var isBinary = reIsBinary.test(value);
+ return (isBinary || reIsOctal.test(value))
+ ? freeParseInt(value.slice(2), isBinary ? 2 : 8)
+ : (reIsBadHex.test(value) ? NAN : +value);
+ }
+
+ /**
+ * Converts `value` to a plain object flattening inherited enumerable string
+ * keyed properties of `value` to own properties of the plain object.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category Lang
+ * @param {*} value The value to convert.
+ * @returns {Object} Returns the converted plain object.
+ * @example
+ *
+ * function Foo() {
+ * this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.assign({ 'a': 1 }, new Foo);
+ * // => { 'a': 1, 'b': 2 }
+ *
+ * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));
+ * // => { 'a': 1, 'b': 2, 'c': 3 }
+ */
+ function toPlainObject(value) {
+ return copyObject(value, keysIn(value));
+ }
+
+ /**
+ * Converts `value` to a safe integer. A safe integer can be compared and
+ * represented correctly.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to convert.
+ * @returns {number} Returns the converted integer.
+ * @example
+ *
+ * _.toSafeInteger(3.2);
+ * // => 3
+ *
+ * _.toSafeInteger(Number.MIN_VALUE);
+ * // => 0
+ *
+ * _.toSafeInteger(Infinity);
+ * // => 9007199254740991
+ *
+ * _.toSafeInteger('3.2');
+ * // => 3
+ */
+ function toSafeInteger(value) {
+ return value
+ ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)
+ : (value === 0 ? value : 0);
+ }
+
+ /**
+ * Converts `value` to a string. An empty string is returned for `null`
+ * and `undefined` values. The sign of `-0` is preserved.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to convert.
+ * @returns {string} Returns the converted string.
+ * @example
+ *
+ * _.toString(null);
+ * // => ''
+ *
+ * _.toString(-0);
+ * // => '-0'
+ *
+ * _.toString([1, 2, 3]);
+ * // => '1,2,3'
+ */
+ function toString(value) {
+ return value == null ? '' : baseToString(value);
+ }
+
+ /*------------------------------------------------------------------------*/
+
+ /**
+ * Assigns own enumerable string keyed properties of source objects to the
+ * destination object. Source objects are applied from left to right.
+ * Subsequent sources overwrite property assignments of previous sources.
+ *
+ * **Note:** This method mutates `object` and is loosely based on
+ * [`Object.assign`](https://mdn.io/Object/assign).
+ *
+ * @static
+ * @memberOf _
+ * @since 0.10.0
+ * @category Object
+ * @param {Object} object The destination object.
+ * @param {...Object} [sources] The source objects.
+ * @returns {Object} Returns `object`.
+ * @see _.assignIn
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * }
+ *
+ * function Bar() {
+ * this.c = 3;
+ * }
+ *
+ * Foo.prototype.b = 2;
+ * Bar.prototype.d = 4;
+ *
+ * _.assign({ 'a': 0 }, new Foo, new Bar);
+ * // => { 'a': 1, 'c': 3 }
+ */
+ var assign = createAssigner(function(object, source) {
+ if (isPrototype(source) || isArrayLike(source)) {
+ copyObject(source, keys(source), object);
+ return;
+ }
+ for (var key in source) {
+ if (hasOwnProperty.call(source, key)) {
+ assignValue(object, key, source[key]);
+ }
+ }
+ });
+
+ /**
+ * This method is like `_.assign` except that it iterates over own and
+ * inherited source properties.
+ *
+ * **Note:** This method mutates `object`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @alias extend
+ * @category Object
+ * @param {Object} object The destination object.
+ * @param {...Object} [sources] The source objects.
+ * @returns {Object} Returns `object`.
+ * @see _.assign
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * }
+ *
+ * function Bar() {
+ * this.c = 3;
+ * }
+ *
+ * Foo.prototype.b = 2;
+ * Bar.prototype.d = 4;
+ *
+ * _.assignIn({ 'a': 0 }, new Foo, new Bar);
+ * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }
+ */
+ var assignIn = createAssigner(function(object, source) {
+ copyObject(source, keysIn(source), object);
+ });
+
+ /**
+ * This method is like `_.assignIn` except that it accepts `customizer`
+ * which is invoked to produce the assigned values. If `customizer` returns
+ * `undefined`, assignment is handled by the method instead. The `customizer`
+ * is invoked with five arguments: (objValue, srcValue, key, object, source).
+ *
+ * **Note:** This method mutates `object`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @alias extendWith
+ * @category Object
+ * @param {Object} object The destination object.
+ * @param {...Object} sources The source objects.
+ * @param {Function} [customizer] The function to customize assigned values.
+ * @returns {Object} Returns `object`.
+ * @see _.assignWith
+ * @example
+ *
+ * function customizer(objValue, srcValue) {
+ * return _.isUndefined(objValue) ? srcValue : objValue;
+ * }
+ *
+ * var defaults = _.partialRight(_.assignInWith, customizer);
+ *
+ * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
+ * // => { 'a': 1, 'b': 2 }
+ */
+ var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {
+ copyObject(source, keysIn(source), object, customizer);
+ });
+
+ /**
+ * This method is like `_.assign` except that it accepts `customizer`
+ * which is invoked to produce the assigned values. If `customizer` returns
+ * `undefined`, assignment is handled by the method instead. The `customizer`
+ * is invoked with five arguments: (objValue, srcValue, key, object, source).
+ *
+ * **Note:** This method mutates `object`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Object
+ * @param {Object} object The destination object.
+ * @param {...Object} sources The source objects.
+ * @param {Function} [customizer] The function to customize assigned values.
+ * @returns {Object} Returns `object`.
+ * @see _.assignInWith
+ * @example
+ *
+ * function customizer(objValue, srcValue) {
+ * return _.isUndefined(objValue) ? srcValue : objValue;
+ * }
+ *
+ * var defaults = _.partialRight(_.assignWith, customizer);
+ *
+ * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
+ * // => { 'a': 1, 'b': 2 }
+ */
+ var assignWith = createAssigner(function(object, source, srcIndex, customizer) {
+ copyObject(source, keys(source), object, customizer);
+ });
+
+ /**
+ * Creates an array of values corresponding to `paths` of `object`.
+ *
+ * @static
+ * @memberOf _
+ * @since 1.0.0
+ * @category Object
+ * @param {Object} object The object to iterate over.
+ * @param {...(string|string[])} [paths] The property paths to pick.
+ * @returns {Array} Returns the picked values.
+ * @example
+ *
+ * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };
+ *
+ * _.at(object, ['a[0].b.c', 'a[1]']);
+ * // => [3, 4]
+ */
+ var at = flatRest(baseAt);
+
+ /**
+ * Creates an object that inherits from the `prototype` object. If a
+ * `properties` object is given, its own enumerable string keyed properties
+ * are assigned to the created object.
+ *
+ * @static
+ * @memberOf _
+ * @since 2.3.0
+ * @category Object
+ * @param {Object} prototype The object to inherit from.
+ * @param {Object} [properties] The properties to assign to the object.
+ * @returns {Object} Returns the new object.
+ * @example
+ *
+ * function Shape() {
+ * this.x = 0;
+ * this.y = 0;
+ * }
+ *
+ * function Circle() {
+ * Shape.call(this);
+ * }
+ *
+ * Circle.prototype = _.create(Shape.prototype, {
+ * 'constructor': Circle
+ * });
+ *
+ * var circle = new Circle;
+ * circle instanceof Circle;
+ * // => true
+ *
+ * circle instanceof Shape;
+ * // => true
+ */
+ function create(prototype, properties) {
+ var result = baseCreate(prototype);
+ return properties == null ? result : baseAssign(result, properties);
+ }
+
+ /**
+ * Assigns own and inherited enumerable string keyed properties of source
+ * objects to the destination object for all destination properties that
+ * resolve to `undefined`. Source objects are applied from left to right.
+ * Once a property is set, additional values of the same property are ignored.
+ *
+ * **Note:** This method mutates `object`.
+ *
+ * @static
+ * @since 0.1.0
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The destination object.
+ * @param {...Object} [sources] The source objects.
+ * @returns {Object} Returns `object`.
+ * @see _.defaultsDeep
+ * @example
+ *
+ * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
+ * // => { 'a': 1, 'b': 2 }
+ */
+ var defaults = baseRest(function(object, sources) {
+ object = Object(object);
+
+ var index = -1;
+ var length = sources.length;
+ var guard = length > 2 ? sources[2] : undefined;
+
+ if (guard && isIterateeCall(sources[0], sources[1], guard)) {
+ length = 1;
+ }
+
+ while (++index < length) {
+ var source = sources[index];
+ var props = keysIn(source);
+ var propsIndex = -1;
+ var propsLength = props.length;
+
+ while (++propsIndex < propsLength) {
+ var key = props[propsIndex];
+ var value = object[key];
+
+ if (value === undefined ||
+ (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {
+ object[key] = source[key];
+ }
+ }
+ }
+
+ return object;
+ });
+
+ /**
+ * This method is like `_.defaults` except that it recursively assigns
+ * default properties.
+ *
+ * **Note:** This method mutates `object`.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.10.0
+ * @category Object
+ * @param {Object} object The destination object.
+ * @param {...Object} [sources] The source objects.
+ * @returns {Object} Returns `object`.
+ * @see _.defaults
+ * @example
+ *
+ * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });
+ * // => { 'a': { 'b': 2, 'c': 3 } }
+ */
+ var defaultsDeep = baseRest(function(args) {
+ args.push(undefined, customDefaultsMerge);
+ return apply(mergeWith, undefined, args);
+ });
+
+ /**
+ * This method is like `_.find` except that it returns the key of the first
+ * element `predicate` returns truthy for instead of the element itself.
+ *
+ * @static
+ * @memberOf _
+ * @since 1.1.0
+ * @category Object
+ * @param {Object} object The object to inspect.
+ * @param {Function} [predicate=_.identity] The function invoked per iteration.
+ * @returns {string|undefined} Returns the key of the matched element,
+ * else `undefined`.
+ * @example
+ *
+ * var users = {
+ * 'barney': { 'age': 36, 'active': true },
+ * 'fred': { 'age': 40, 'active': false },
+ * 'pebbles': { 'age': 1, 'active': true }
+ * };
+ *
+ * _.findKey(users, function(o) { return o.age < 40; });
+ * // => 'barney' (iteration order is not guaranteed)
+ *
+ * // The `_.matches` iteratee shorthand.
+ * _.findKey(users, { 'age': 1, 'active': true });
+ * // => 'pebbles'
+ *
+ * // The `_.matchesProperty` iteratee shorthand.
+ * _.findKey(users, ['active', false]);
+ * // => 'fred'
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.findKey(users, 'active');
+ * // => 'barney'
+ */
+ function findKey(object, predicate) {
+ return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);
+ }
+
+ /**
+ * This method is like `_.findKey` except that it iterates over elements of
+ * a collection in the opposite order.
+ *
+ * @static
+ * @memberOf _
+ * @since 2.0.0
+ * @category Object
+ * @param {Object} object The object to inspect.
+ * @param {Function} [predicate=_.identity] The function invoked per iteration.
+ * @returns {string|undefined} Returns the key of the matched element,
+ * else `undefined`.
+ * @example
+ *
+ * var users = {
+ * 'barney': { 'age': 36, 'active': true },
+ * 'fred': { 'age': 40, 'active': false },
+ * 'pebbles': { 'age': 1, 'active': true }
+ * };
+ *
+ * _.findLastKey(users, function(o) { return o.age < 40; });
+ * // => returns 'pebbles' assuming `_.findKey` returns 'barney'
+ *
+ * // The `_.matches` iteratee shorthand.
+ * _.findLastKey(users, { 'age': 36, 'active': true });
+ * // => 'barney'
+ *
+ * // The `_.matchesProperty` iteratee shorthand.
+ * _.findLastKey(users, ['active', false]);
+ * // => 'fred'
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.findLastKey(users, 'active');
+ * // => 'pebbles'
+ */
+ function findLastKey(object, predicate) {
+ return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);
+ }
+
+ /**
+ * Iterates over own and inherited enumerable string keyed properties of an
+ * object and invokes `iteratee` for each property. The iteratee is invoked
+ * with three arguments: (value, key, object). Iteratee functions may exit
+ * iteration early by explicitly returning `false`.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.3.0
+ * @category Object
+ * @param {Object} object The object to iterate over.
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+ * @returns {Object} Returns `object`.
+ * @see _.forInRight
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.forIn(new Foo, function(value, key) {
+ * console.log(key);
+ * });
+ * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).
+ */
+ function forIn(object, iteratee) {
+ return object == null
+ ? object
+ : baseFor(object, getIteratee(iteratee, 3), keysIn);
+ }
+
+ /**
+ * This method is like `_.forIn` except that it iterates over properties of
+ * `object` in the opposite order.
+ *
+ * @static
+ * @memberOf _
+ * @since 2.0.0
+ * @category Object
+ * @param {Object} object The object to iterate over.
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+ * @returns {Object} Returns `object`.
+ * @see _.forIn
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.forInRight(new Foo, function(value, key) {
+ * console.log(key);
+ * });
+ * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.
+ */
+ function forInRight(object, iteratee) {
+ return object == null
+ ? object
+ : baseForRight(object, getIteratee(iteratee, 3), keysIn);
+ }
+
+ /**
+ * Iterates over own enumerable string keyed properties of an object and
+ * invokes `iteratee` for each property. The iteratee is invoked with three
+ * arguments: (value, key, object). Iteratee functions may exit iteration
+ * early by explicitly returning `false`.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.3.0
+ * @category Object
+ * @param {Object} object The object to iterate over.
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+ * @returns {Object} Returns `object`.
+ * @see _.forOwnRight
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.forOwn(new Foo, function(value, key) {
+ * console.log(key);
+ * });
+ * // => Logs 'a' then 'b' (iteration order is not guaranteed).
+ */
+ function forOwn(object, iteratee) {
+ return object && baseForOwn(object, getIteratee(iteratee, 3));
+ }
+
+ /**
+ * This method is like `_.forOwn` except that it iterates over properties of
+ * `object` in the opposite order.
+ *
+ * @static
+ * @memberOf _
+ * @since 2.0.0
+ * @category Object
+ * @param {Object} object The object to iterate over.
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+ * @returns {Object} Returns `object`.
+ * @see _.forOwn
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.forOwnRight(new Foo, function(value, key) {
+ * console.log(key);
+ * });
+ * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.
+ */
+ function forOwnRight(object, iteratee) {
+ return object && baseForOwnRight(object, getIteratee(iteratee, 3));
+ }
+
+ /**
+ * Creates an array of function property names from own enumerable properties
+ * of `object`.
+ *
+ * @static
+ * @since 0.1.0
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to inspect.
+ * @returns {Array} Returns the function names.
+ * @see _.functionsIn
+ * @example
+ *
+ * function Foo() {
+ * this.a = _.constant('a');
+ * this.b = _.constant('b');
+ * }
+ *
+ * Foo.prototype.c = _.constant('c');
+ *
+ * _.functions(new Foo);
+ * // => ['a', 'b']
+ */
+ function functions(object) {
+ return object == null ? [] : baseFunctions(object, keys(object));
+ }
+
+ /**
+ * Creates an array of function property names from own and inherited
+ * enumerable properties of `object`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Object
+ * @param {Object} object The object to inspect.
+ * @returns {Array} Returns the function names.
+ * @see _.functions
+ * @example
+ *
+ * function Foo() {
+ * this.a = _.constant('a');
+ * this.b = _.constant('b');
+ * }
+ *
+ * Foo.prototype.c = _.constant('c');
+ *
+ * _.functionsIn(new Foo);
+ * // => ['a', 'b', 'c']
+ */
+ function functionsIn(object) {
+ return object == null ? [] : baseFunctions(object, keysIn(object));
+ }
+
+ /**
+ * Gets the value at `path` of `object`. If the resolved value is
+ * `undefined`, the `defaultValue` is returned in its place.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.7.0
+ * @category Object
+ * @param {Object} object The object to query.
+ * @param {Array|string} path The path of the property to get.
+ * @param {*} [defaultValue] The value returned for `undefined` resolved values.
+ * @returns {*} Returns the resolved value.
+ * @example
+ *
+ * var object = { 'a': [{ 'b': { 'c': 3 } }] };
+ *
+ * _.get(object, 'a[0].b.c');
+ * // => 3
+ *
+ * _.get(object, ['a', '0', 'b', 'c']);
+ * // => 3
+ *
+ * _.get(object, 'a.b.c', 'default');
+ * // => 'default'
+ */
+ function get(object, path, defaultValue) {
+ var result = object == null ? undefined : baseGet(object, path);
+ return result === undefined ? defaultValue : result;
+ }
+
+ /**
+ * Checks if `path` is a direct property of `object`.
+ *
+ * @static
+ * @since 0.1.0
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to query.
+ * @param {Array|string} path The path to check.
+ * @returns {boolean} Returns `true` if `path` exists, else `false`.
+ * @example
+ *
+ * var object = { 'a': { 'b': 2 } };
+ * var other = _.create({ 'a': _.create({ 'b': 2 }) });
+ *
+ * _.has(object, 'a');
+ * // => true
+ *
+ * _.has(object, 'a.b');
+ * // => true
+ *
+ * _.has(object, ['a', 'b']);
+ * // => true
+ *
+ * _.has(other, 'a');
+ * // => false
+ */
+ function has(object, path) {
+ return object != null && hasPath(object, path, baseHas);
+ }
+
+ /**
+ * Checks if `path` is a direct or inherited property of `object`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Object
+ * @param {Object} object The object to query.
+ * @param {Array|string} path The path to check.
+ * @returns {boolean} Returns `true` if `path` exists, else `false`.
+ * @example
+ *
+ * var object = _.create({ 'a': _.create({ 'b': 2 }) });
+ *
+ * _.hasIn(object, 'a');
+ * // => true
+ *
+ * _.hasIn(object, 'a.b');
+ * // => true
+ *
+ * _.hasIn(object, ['a', 'b']);
+ * // => true
+ *
+ * _.hasIn(object, 'b');
+ * // => false
+ */
+ function hasIn(object, path) {
+ return object != null && hasPath(object, path, baseHasIn);
+ }
+
+ /**
+ * Creates an object composed of the inverted keys and values of `object`.
+ * If `object` contains duplicate values, subsequent values overwrite
+ * property assignments of previous values.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.7.0
+ * @category Object
+ * @param {Object} object The object to invert.
+ * @returns {Object} Returns the new inverted object.
+ * @example
+ *
+ * var object = { 'a': 1, 'b': 2, 'c': 1 };
+ *
+ * _.invert(object);
+ * // => { '1': 'c', '2': 'b' }
+ */
+ var invert = createInverter(function(result, value, key) {
+ if (value != null &&
+ typeof value.toString != 'function') {
+ value = nativeObjectToString.call(value);
+ }
+
+ result[value] = key;
+ }, constant(identity));
+
+ /**
+ * This method is like `_.invert` except that the inverted object is generated
+ * from the results of running each element of `object` thru `iteratee`. The
+ * corresponding inverted value of each inverted key is an array of keys
+ * responsible for generating the inverted value. The iteratee is invoked
+ * with one argument: (value).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.1.0
+ * @category Object
+ * @param {Object} object The object to invert.
+ * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
+ * @returns {Object} Returns the new inverted object.
+ * @example
+ *
+ * var object = { 'a': 1, 'b': 2, 'c': 1 };
+ *
+ * _.invertBy(object);
+ * // => { '1': ['a', 'c'], '2': ['b'] }
+ *
+ * _.invertBy(object, function(value) {
+ * return 'group' + value;
+ * });
+ * // => { 'group1': ['a', 'c'], 'group2': ['b'] }
+ */
+ var invertBy = createInverter(function(result, value, key) {
+ if (value != null &&
+ typeof value.toString != 'function') {
+ value = nativeObjectToString.call(value);
+ }
+
+ if (hasOwnProperty.call(result, value)) {
+ result[value].push(key);
+ } else {
+ result[value] = [key];
+ }
+ }, getIteratee);
+
+ /**
+ * Invokes the method at `path` of `object`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Object
+ * @param {Object} object The object to query.
+ * @param {Array|string} path The path of the method to invoke.
+ * @param {...*} [args] The arguments to invoke the method with.
+ * @returns {*} Returns the result of the invoked method.
+ * @example
+ *
+ * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };
+ *
+ * _.invoke(object, 'a[0].b.c.slice', 1, 3);
+ * // => [2, 3]
+ */
+ var invoke = baseRest(baseInvoke);
+
+ /**
+ * Creates an array of the own enumerable property names of `object`.
+ *
+ * **Note:** Non-object values are coerced to objects. See the
+ * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
+ * for more details.
+ *
+ * @static
+ * @since 0.1.0
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property names.
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.keys(new Foo);
+ * // => ['a', 'b'] (iteration order is not guaranteed)
+ *
+ * _.keys('hi');
+ * // => ['0', '1']
+ */
+ function keys(object) {
+ return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);
+ }
+
+ /**
+ * Creates an array of the own and inherited enumerable property names of `object`.
+ *
+ * **Note:** Non-object values are coerced to objects.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category Object
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property names.
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.keysIn(new Foo);
+ * // => ['a', 'b', 'c'] (iteration order is not guaranteed)
+ */
+ function keysIn(object) {
+ return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);
+ }
+
+ /**
+ * The opposite of `_.mapValues`; this method creates an object with the
+ * same values as `object` and keys generated by running each own enumerable
+ * string keyed property of `object` thru `iteratee`. The iteratee is invoked
+ * with three arguments: (value, key, object).
+ *
+ * @static
+ * @memberOf _
+ * @since 3.8.0
+ * @category Object
+ * @param {Object} object The object to iterate over.
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+ * @returns {Object} Returns the new mapped object.
+ * @see _.mapValues
+ * @example
+ *
+ * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {
+ * return key + value;
+ * });
+ * // => { 'a1': 1, 'b2': 2 }
+ */
+ function mapKeys(object, iteratee) {
+ var result = {};
+ iteratee = getIteratee(iteratee, 3);
+
+ baseForOwn(object, function(value, key, object) {
+ baseAssignValue(result, iteratee(value, key, object), value);
+ });
+ return result;
+ }
+
+ /**
+ * Creates an object with the same keys as `object` and values generated
+ * by running each own enumerable string keyed property of `object` thru
+ * `iteratee`. The iteratee is invoked with three arguments:
+ * (value, key, object).
+ *
+ * @static
+ * @memberOf _
+ * @since 2.4.0
+ * @category Object
+ * @param {Object} object The object to iterate over.
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+ * @returns {Object} Returns the new mapped object.
+ * @see _.mapKeys
+ * @example
+ *
+ * var users = {
+ * 'fred': { 'user': 'fred', 'age': 40 },
+ * 'pebbles': { 'user': 'pebbles', 'age': 1 }
+ * };
+ *
+ * _.mapValues(users, function(o) { return o.age; });
+ * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.mapValues(users, 'age');
+ * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
+ */
+ function mapValues(object, iteratee) {
+ var result = {};
+ iteratee = getIteratee(iteratee, 3);
+
+ baseForOwn(object, function(value, key, object) {
+ baseAssignValue(result, key, iteratee(value, key, object));
+ });
+ return result;
+ }
+
+ /**
+ * This method is like `_.assign` except that it recursively merges own and
+ * inherited enumerable string keyed properties of source objects into the
+ * destination object. Source properties that resolve to `undefined` are
+ * skipped if a destination value exists. Array and plain object properties
+ * are merged recursively. Other objects and value types are overridden by
+ * assignment. Source objects are applied from left to right. Subsequent
+ * sources overwrite property assignments of previous sources.
+ *
+ * **Note:** This method mutates `object`.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.5.0
+ * @category Object
+ * @param {Object} object The destination object.
+ * @param {...Object} [sources] The source objects.
+ * @returns {Object} Returns `object`.
+ * @example
+ *
+ * var object = {
+ * 'a': [{ 'b': 2 }, { 'd': 4 }]
+ * };
+ *
+ * var other = {
+ * 'a': [{ 'c': 3 }, { 'e': 5 }]
+ * };
+ *
+ * _.merge(object, other);
+ * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }
+ */
+ var merge = createAssigner(function(object, source, srcIndex) {
+ baseMerge(object, source, srcIndex);
+ });
+
+ /**
+ * This method is like `_.merge` except that it accepts `customizer` which
+ * is invoked to produce the merged values of the destination and source
+ * properties. If `customizer` returns `undefined`, merging is handled by the
+ * method instead. The `customizer` is invoked with six arguments:
+ * (objValue, srcValue, key, object, source, stack).
+ *
+ * **Note:** This method mutates `object`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Object
+ * @param {Object} object The destination object.
+ * @param {...Object} sources The source objects.
+ * @param {Function} customizer The function to customize assigned values.
+ * @returns {Object} Returns `object`.
+ * @example
+ *
+ * function customizer(objValue, srcValue) {
+ * if (_.isArray(objValue)) {
+ * return objValue.concat(srcValue);
+ * }
+ * }
+ *
+ * var object = { 'a': [1], 'b': [2] };
+ * var other = { 'a': [3], 'b': [4] };
+ *
+ * _.mergeWith(object, other, customizer);
+ * // => { 'a': [1, 3], 'b': [2, 4] }
+ */
+ var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {
+ baseMerge(object, source, srcIndex, customizer);
+ });
+
+ /**
+ * The opposite of `_.pick`; this method creates an object composed of the
+ * own and inherited enumerable property paths of `object` that are not omitted.
+ *
+ * **Note:** This method is considerably slower than `_.pick`.
+ *
+ * @static
+ * @since 0.1.0
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The source object.
+ * @param {...(string|string[])} [paths] The property paths to omit.
+ * @returns {Object} Returns the new object.
+ * @example
+ *
+ * var object = { 'a': 1, 'b': '2', 'c': 3 };
+ *
+ * _.omit(object, ['a', 'c']);
+ * // => { 'b': '2' }
+ */
+ var omit = flatRest(function(object, paths) {
+ var result = {};
+ if (object == null) {
+ return result;
+ }
+ var isDeep = false;
+ paths = arrayMap(paths, function(path) {
+ path = castPath(path, object);
+ isDeep || (isDeep = path.length > 1);
+ return path;
+ });
+ copyObject(object, getAllKeysIn(object), result);
+ if (isDeep) {
+ result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);
+ }
+ var length = paths.length;
+ while (length--) {
+ baseUnset(result, paths[length]);
+ }
+ return result;
+ });
+
+ /**
+ * The opposite of `_.pickBy`; this method creates an object composed of
+ * the own and inherited enumerable string keyed properties of `object` that
+ * `predicate` doesn't return truthy for. The predicate is invoked with two
+ * arguments: (value, key).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Object
+ * @param {Object} object The source object.
+ * @param {Function} [predicate=_.identity] The function invoked per property.
+ * @returns {Object} Returns the new object.
+ * @example
+ *
+ * var object = { 'a': 1, 'b': '2', 'c': 3 };
+ *
+ * _.omitBy(object, _.isNumber);
+ * // => { 'b': '2' }
+ */
+ function omitBy(object, predicate) {
+ return pickBy(object, negate(getIteratee(predicate)));
+ }
+
+ /**
+ * Creates an object composed of the picked `object` properties.
+ *
+ * @static
+ * @since 0.1.0
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The source object.
+ * @param {...(string|string[])} [paths] The property paths to pick.
+ * @returns {Object} Returns the new object.
+ * @example
+ *
+ * var object = { 'a': 1, 'b': '2', 'c': 3 };
+ *
+ * _.pick(object, ['a', 'c']);
+ * // => { 'a': 1, 'c': 3 }
+ */
+ var pick = flatRest(function(object, paths) {
+ return object == null ? {} : basePick(object, paths);
+ });
+
+ /**
+ * Creates an object composed of the `object` properties `predicate` returns
+ * truthy for. The predicate is invoked with two arguments: (value, key).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Object
+ * @param {Object} object The source object.
+ * @param {Function} [predicate=_.identity] The function invoked per property.
+ * @returns {Object} Returns the new object.
+ * @example
+ *
+ * var object = { 'a': 1, 'b': '2', 'c': 3 };
+ *
+ * _.pickBy(object, _.isNumber);
+ * // => { 'a': 1, 'c': 3 }
+ */
+ function pickBy(object, predicate) {
+ if (object == null) {
+ return {};
+ }
+ var props = arrayMap(getAllKeysIn(object), function(prop) {
+ return [prop];
+ });
+ predicate = getIteratee(predicate);
+ return basePickBy(object, props, function(value, path) {
+ return predicate(value, path[0]);
+ });
+ }
+
+ /**
+ * This method is like `_.get` except that if the resolved value is a
+ * function it's invoked with the `this` binding of its parent object and
+ * its result is returned.
+ *
+ * @static
+ * @since 0.1.0
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to query.
+ * @param {Array|string} path The path of the property to resolve.
+ * @param {*} [defaultValue] The value returned for `undefined` resolved values.
+ * @returns {*} Returns the resolved value.
+ * @example
+ *
+ * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };
+ *
+ * _.result(object, 'a[0].b.c1');
+ * // => 3
+ *
+ * _.result(object, 'a[0].b.c2');
+ * // => 4
+ *
+ * _.result(object, 'a[0].b.c3', 'default');
+ * // => 'default'
+ *
+ * _.result(object, 'a[0].b.c3', _.constant('default'));
+ * // => 'default'
+ */
+ function result(object, path, defaultValue) {
+ path = castPath(path, object);
+
+ var index = -1,
+ length = path.length;
+
+ // Ensure the loop is entered when path is empty.
+ if (!length) {
+ length = 1;
+ object = undefined;
+ }
+ while (++index < length) {
+ var value = object == null ? undefined : object[toKey(path[index])];
+ if (value === undefined) {
+ index = length;
+ value = defaultValue;
+ }
+ object = isFunction(value) ? value.call(object) : value;
+ }
+ return object;
+ }
+
+ /**
+ * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,
+ * it's created. Arrays are created for missing index properties while objects
+ * are created for all other missing properties. Use `_.setWith` to customize
+ * `path` creation.
+ *
+ * **Note:** This method mutates `object`.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.7.0
+ * @category Object
+ * @param {Object} object The object to modify.
+ * @param {Array|string} path The path of the property to set.
+ * @param {*} value The value to set.
+ * @returns {Object} Returns `object`.
+ * @example
+ *
+ * var object = { 'a': [{ 'b': { 'c': 3 } }] };
+ *
+ * _.set(object, 'a[0].b.c', 4);
+ * console.log(object.a[0].b.c);
+ * // => 4
+ *
+ * _.set(object, ['x', '0', 'y', 'z'], 5);
+ * console.log(object.x[0].y.z);
+ * // => 5
+ */
+ function set(object, path, value) {
+ return object == null ? object : baseSet(object, path, value);
+ }
+
+ /**
+ * This method is like `_.set` except that it accepts `customizer` which is
+ * invoked to produce the objects of `path`. If `customizer` returns `undefined`
+ * path creation is handled by the method instead. The `customizer` is invoked
+ * with three arguments: (nsValue, key, nsObject).
+ *
+ * **Note:** This method mutates `object`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Object
+ * @param {Object} object The object to modify.
+ * @param {Array|string} path The path of the property to set.
+ * @param {*} value The value to set.
+ * @param {Function} [customizer] The function to customize assigned values.
+ * @returns {Object} Returns `object`.
+ * @example
+ *
+ * var object = {};
+ *
+ * _.setWith(object, '[0][1]', 'a', Object);
+ * // => { '0': { '1': 'a' } }
+ */
+ function setWith(object, path, value, customizer) {
+ customizer = typeof customizer == 'function' ? customizer : undefined;
+ return object == null ? object : baseSet(object, path, value, customizer);
+ }
+
+ /**
+ * Creates an array of own enumerable string keyed-value pairs for `object`
+ * which can be consumed by `_.fromPairs`. If `object` is a map or set, its
+ * entries are returned.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @alias entries
+ * @category Object
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the key-value pairs.
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.toPairs(new Foo);
+ * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)
+ */
+ var toPairs = createToPairs(keys);
+
+ /**
+ * Creates an array of own and inherited enumerable string keyed-value pairs
+ * for `object` which can be consumed by `_.fromPairs`. If `object` is a map
+ * or set, its entries are returned.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @alias entriesIn
+ * @category Object
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the key-value pairs.
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.toPairsIn(new Foo);
+ * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)
+ */
+ var toPairsIn = createToPairs(keysIn);
+
+ /**
+ * An alternative to `_.reduce`; this method transforms `object` to a new
+ * `accumulator` object which is the result of running each of its own
+ * enumerable string keyed properties thru `iteratee`, with each invocation
+ * potentially mutating the `accumulator` object. If `accumulator` is not
+ * provided, a new object with the same `[[Prototype]]` will be used. The
+ * iteratee is invoked with four arguments: (accumulator, value, key, object).
+ * Iteratee functions may exit iteration early by explicitly returning `false`.
+ *
+ * @static
+ * @memberOf _
+ * @since 1.3.0
+ * @category Object
+ * @param {Object} object The object to iterate over.
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+ * @param {*} [accumulator] The custom accumulator value.
+ * @returns {*} Returns the accumulated value.
+ * @example
+ *
+ * _.transform([2, 3, 4], function(result, n) {
+ * result.push(n *= n);
+ * return n % 2 == 0;
+ * }, []);
+ * // => [4, 9]
+ *
+ * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {
+ * (result[value] || (result[value] = [])).push(key);
+ * }, {});
+ * // => { '1': ['a', 'c'], '2': ['b'] }
+ */
+ function transform(object, iteratee, accumulator) {
+ var isArr = isArray(object),
+ isArrLike = isArr || isBuffer(object) || isTypedArray(object);
+
+ iteratee = getIteratee(iteratee, 4);
+ if (accumulator == null) {
+ var Ctor = object && object.constructor;
+ if (isArrLike) {
+ accumulator = isArr ? new Ctor : [];
+ }
+ else if (isObject(object)) {
+ accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};
+ }
+ else {
+ accumulator = {};
+ }
+ }
+ (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {
+ return iteratee(accumulator, value, index, object);
+ });
+ return accumulator;
+ }
+
+ /**
+ * Removes the property at `path` of `object`.
+ *
+ * **Note:** This method mutates `object`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Object
+ * @param {Object} object The object to modify.
+ * @param {Array|string} path The path of the property to unset.
+ * @returns {boolean} Returns `true` if the property is deleted, else `false`.
+ * @example
+ *
+ * var object = { 'a': [{ 'b': { 'c': 7 } }] };
+ * _.unset(object, 'a[0].b.c');
+ * // => true
+ *
+ * console.log(object);
+ * // => { 'a': [{ 'b': {} }] };
+ *
+ * _.unset(object, ['a', '0', 'b', 'c']);
+ * // => true
+ *
+ * console.log(object);
+ * // => { 'a': [{ 'b': {} }] };
+ */
+ function unset(object, path) {
+ return object == null ? true : baseUnset(object, path);
+ }
+
+ /**
+ * This method is like `_.set` except that accepts `updater` to produce the
+ * value to set. Use `_.updateWith` to customize `path` creation. The `updater`
+ * is invoked with one argument: (value).
+ *
+ * **Note:** This method mutates `object`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.6.0
+ * @category Object
+ * @param {Object} object The object to modify.
+ * @param {Array|string} path The path of the property to set.
+ * @param {Function} updater The function to produce the updated value.
+ * @returns {Object} Returns `object`.
+ * @example
+ *
+ * var object = { 'a': [{ 'b': { 'c': 3 } }] };
+ *
+ * _.update(object, 'a[0].b.c', function(n) { return n * n; });
+ * console.log(object.a[0].b.c);
+ * // => 9
+ *
+ * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });
+ * console.log(object.x[0].y.z);
+ * // => 0
+ */
+ function update(object, path, updater) {
+ return object == null ? object : baseUpdate(object, path, castFunction(updater));
+ }
+
+ /**
+ * This method is like `_.update` except that it accepts `customizer` which is
+ * invoked to produce the objects of `path`. If `customizer` returns `undefined`
+ * path creation is handled by the method instead. The `customizer` is invoked
+ * with three arguments: (nsValue, key, nsObject).
+ *
+ * **Note:** This method mutates `object`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.6.0
+ * @category Object
+ * @param {Object} object The object to modify.
+ * @param {Array|string} path The path of the property to set.
+ * @param {Function} updater The function to produce the updated value.
+ * @param {Function} [customizer] The function to customize assigned values.
+ * @returns {Object} Returns `object`.
+ * @example
+ *
+ * var object = {};
+ *
+ * _.updateWith(object, '[0][1]', _.constant('a'), Object);
+ * // => { '0': { '1': 'a' } }
+ */
+ function updateWith(object, path, updater, customizer) {
+ customizer = typeof customizer == 'function' ? customizer : undefined;
+ return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);
+ }
+
+ /**
+ * Creates an array of the own enumerable string keyed property values of `object`.
+ *
+ * **Note:** Non-object values are coerced to objects.
+ *
+ * @static
+ * @since 0.1.0
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property values.
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.values(new Foo);
+ * // => [1, 2] (iteration order is not guaranteed)
+ *
+ * _.values('hi');
+ * // => ['h', 'i']
+ */
+ function values(object) {
+ return object == null ? [] : baseValues(object, keys(object));
+ }
+
+ /**
+ * Creates an array of the own and inherited enumerable string keyed property
+ * values of `object`.
+ *
+ * **Note:** Non-object values are coerced to objects.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category Object
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property values.
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.valuesIn(new Foo);
+ * // => [1, 2, 3] (iteration order is not guaranteed)
+ */
+ function valuesIn(object) {
+ return object == null ? [] : baseValues(object, keysIn(object));
+ }
+
+ /*------------------------------------------------------------------------*/
+
+ /**
+ * Clamps `number` within the inclusive `lower` and `upper` bounds.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Number
+ * @param {number} number The number to clamp.
+ * @param {number} [lower] The lower bound.
+ * @param {number} upper The upper bound.
+ * @returns {number} Returns the clamped number.
+ * @example
+ *
+ * _.clamp(-10, -5, 5);
+ * // => -5
+ *
+ * _.clamp(10, -5, 5);
+ * // => 5
+ */
+ function clamp(number, lower, upper) {
+ if (upper === undefined) {
+ upper = lower;
+ lower = undefined;
+ }
+ if (upper !== undefined) {
+ upper = toNumber(upper);
+ upper = upper === upper ? upper : 0;
+ }
+ if (lower !== undefined) {
+ lower = toNumber(lower);
+ lower = lower === lower ? lower : 0;
+ }
+ return baseClamp(toNumber(number), lower, upper);
+ }
+
+ /**
+ * Checks if `n` is between `start` and up to, but not including, `end`. If
+ * `end` is not specified, it's set to `start` with `start` then set to `0`.
+ * If `start` is greater than `end` the params are swapped to support
+ * negative ranges.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.3.0
+ * @category Number
+ * @param {number} number The number to check.
+ * @param {number} [start=0] The start of the range.
+ * @param {number} end The end of the range.
+ * @returns {boolean} Returns `true` if `number` is in the range, else `false`.
+ * @see _.range, _.rangeRight
+ * @example
+ *
+ * _.inRange(3, 2, 4);
+ * // => true
+ *
+ * _.inRange(4, 8);
+ * // => true
+ *
+ * _.inRange(4, 2);
+ * // => false
+ *
+ * _.inRange(2, 2);
+ * // => false
+ *
+ * _.inRange(1.2, 2);
+ * // => true
+ *
+ * _.inRange(5.2, 4);
+ * // => false
+ *
+ * _.inRange(-3, -2, -6);
+ * // => true
+ */
+ function inRange(number, start, end) {
+ start = toFinite(start);
+ if (end === undefined) {
+ end = start;
+ start = 0;
+ } else {
+ end = toFinite(end);
+ }
+ number = toNumber(number);
+ return baseInRange(number, start, end);
+ }
+
+ /**
+ * Produces a random number between the inclusive `lower` and `upper` bounds.
+ * If only one argument is provided a number between `0` and the given number
+ * is returned. If `floating` is `true`, or either `lower` or `upper` are
+ * floats, a floating-point number is returned instead of an integer.
+ *
+ * **Note:** JavaScript follows the IEEE-754 standard for resolving
+ * floating-point values which can produce unexpected results.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.7.0
+ * @category Number
+ * @param {number} [lower=0] The lower bound.
+ * @param {number} [upper=1] The upper bound.
+ * @param {boolean} [floating] Specify returning a floating-point number.
+ * @returns {number} Returns the random number.
+ * @example
+ *
+ * _.random(0, 5);
+ * // => an integer between 0 and 5
+ *
+ * _.random(5);
+ * // => also an integer between 0 and 5
+ *
+ * _.random(5, true);
+ * // => a floating-point number between 0 and 5
+ *
+ * _.random(1.2, 5.2);
+ * // => a floating-point number between 1.2 and 5.2
+ */
+ function random(lower, upper, floating) {
+ if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {
+ upper = floating = undefined;
+ }
+ if (floating === undefined) {
+ if (typeof upper == 'boolean') {
+ floating = upper;
+ upper = undefined;
+ }
+ else if (typeof lower == 'boolean') {
+ floating = lower;
+ lower = undefined;
+ }
+ }
+ if (lower === undefined && upper === undefined) {
+ lower = 0;
+ upper = 1;
+ }
+ else {
+ lower = toFinite(lower);
+ if (upper === undefined) {
+ upper = lower;
+ lower = 0;
+ } else {
+ upper = toFinite(upper);
+ }
+ }
+ if (lower > upper) {
+ var temp = lower;
+ lower = upper;
+ upper = temp;
+ }
+ if (floating || lower % 1 || upper % 1) {
+ var rand = nativeRandom();
+ return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);
+ }
+ return baseRandom(lower, upper);
+ }
+
+ /*------------------------------------------------------------------------*/
+
+ /**
+ * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category String
+ * @param {string} [string=''] The string to convert.
+ * @returns {string} Returns the camel cased string.
+ * @example
+ *
+ * _.camelCase('Foo Bar');
+ * // => 'fooBar'
+ *
+ * _.camelCase('--foo-bar--');
+ * // => 'fooBar'
+ *
+ * _.camelCase('__FOO_BAR__');
+ * // => 'fooBar'
+ */
+ var camelCase = createCompounder(function(result, word, index) {
+ word = word.toLowerCase();
+ return result + (index ? capitalize(word) : word);
+ });
+
+ /**
+ * Converts the first character of `string` to upper case and the remaining
+ * to lower case.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category String
+ * @param {string} [string=''] The string to capitalize.
+ * @returns {string} Returns the capitalized string.
+ * @example
+ *
+ * _.capitalize('FRED');
+ * // => 'Fred'
+ */
+ function capitalize(string) {
+ return upperFirst(toString(string).toLowerCase());
+ }
+
+ /**
+ * Deburrs `string` by converting
+ * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)
+ * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)
+ * letters to basic Latin letters and removing
+ * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category String
+ * @param {string} [string=''] The string to deburr.
+ * @returns {string} Returns the deburred string.
+ * @example
+ *
+ * _.deburr('déjà vu');
+ * // => 'deja vu'
+ */
+ function deburr(string) {
+ string = toString(string);
+ return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');
+ }
+
+ /**
+ * Checks if `string` ends with the given target string.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category String
+ * @param {string} [string=''] The string to inspect.
+ * @param {string} [target] The string to search for.
+ * @param {number} [position=string.length] The position to search up to.
+ * @returns {boolean} Returns `true` if `string` ends with `target`,
+ * else `false`.
+ * @example
+ *
+ * _.endsWith('abc', 'c');
+ * // => true
+ *
+ * _.endsWith('abc', 'b');
+ * // => false
+ *
+ * _.endsWith('abc', 'b', 2);
+ * // => true
+ */
+ function endsWith(string, target, position) {
+ string = toString(string);
+ target = baseToString(target);
+
+ var length = string.length;
+ position = position === undefined
+ ? length
+ : baseClamp(toInteger(position), 0, length);
+
+ var end = position;
+ position -= target.length;
+ return position >= 0 && string.slice(position, end) == target;
+ }
+
+ /**
+ * Converts the characters "&", "<", ">", '"', and "'" in `string` to their
+ * corresponding HTML entities.
+ *
+ * **Note:** No other characters are escaped. To escape additional
+ * characters use a third-party library like [_he_](https://mths.be/he).
+ *
+ * Though the ">" character is escaped for symmetry, characters like
+ * ">" and "/" don't need escaping in HTML and have no special meaning
+ * unless they're part of a tag or unquoted attribute value. See
+ * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)
+ * (under "semi-related fun fact") for more details.
+ *
+ * When working with HTML you should always
+ * [quote attribute values](http://wonko.com/post/html-escaping) to reduce
+ * XSS vectors.
+ *
+ * @static
+ * @since 0.1.0
+ * @memberOf _
+ * @category String
+ * @param {string} [string=''] The string to escape.
+ * @returns {string} Returns the escaped string.
+ * @example
+ *
+ * _.escape('fred, barney, & pebbles');
+ * // => 'fred, barney, & pebbles'
+ */
+ function escape(string) {
+ string = toString(string);
+ return (string && reHasUnescapedHtml.test(string))
+ ? string.replace(reUnescapedHtml, escapeHtmlChar)
+ : string;
+ }
+
+ /**
+ * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+",
+ * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category String
+ * @param {string} [string=''] The string to escape.
+ * @returns {string} Returns the escaped string.
+ * @example
+ *
+ * _.escapeRegExp('[lodash](https://lodash.com/)');
+ * // => '\[lodash\]\(https://lodash\.com/\)'
+ */
+ function escapeRegExp(string) {
+ string = toString(string);
+ return (string && reHasRegExpChar.test(string))
+ ? string.replace(reRegExpChar, '\\$&')
+ : string;
+ }
+
+ /**
+ * Converts `string` to
+ * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category String
+ * @param {string} [string=''] The string to convert.
+ * @returns {string} Returns the kebab cased string.
+ * @example
+ *
+ * _.kebabCase('Foo Bar');
+ * // => 'foo-bar'
+ *
+ * _.kebabCase('fooBar');
+ * // => 'foo-bar'
+ *
+ * _.kebabCase('__FOO_BAR__');
+ * // => 'foo-bar'
+ */
+ var kebabCase = createCompounder(function(result, word, index) {
+ return result + (index ? '-' : '') + word.toLowerCase();
+ });
+
+ /**
+ * Converts `string`, as space separated words, to lower case.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category String
+ * @param {string} [string=''] The string to convert.
+ * @returns {string} Returns the lower cased string.
+ * @example
+ *
+ * _.lowerCase('--Foo-Bar--');
+ * // => 'foo bar'
+ *
+ * _.lowerCase('fooBar');
+ * // => 'foo bar'
+ *
+ * _.lowerCase('__FOO_BAR__');
+ * // => 'foo bar'
+ */
+ var lowerCase = createCompounder(function(result, word, index) {
+ return result + (index ? ' ' : '') + word.toLowerCase();
+ });
+
+ /**
+ * Converts the first character of `string` to lower case.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category String
+ * @param {string} [string=''] The string to convert.
+ * @returns {string} Returns the converted string.
+ * @example
+ *
+ * _.lowerFirst('Fred');
+ * // => 'fred'
+ *
+ * _.lowerFirst('FRED');
+ * // => 'fRED'
+ */
+ var lowerFirst = createCaseFirst('toLowerCase');
+
+ /**
+ * Pads `string` on the left and right sides if it's shorter than `length`.
+ * Padding characters are truncated if they can't be evenly divided by `length`.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category String
+ * @param {string} [string=''] The string to pad.
+ * @param {number} [length=0] The padding length.
+ * @param {string} [chars=' '] The string used as padding.
+ * @returns {string} Returns the padded string.
+ * @example
+ *
+ * _.pad('abc', 8);
+ * // => ' abc '
+ *
+ * _.pad('abc', 8, '_-');
+ * // => '_-abc_-_'
+ *
+ * _.pad('abc', 3);
+ * // => 'abc'
+ */
+ function pad(string, length, chars) {
+ string = toString(string);
+ length = toInteger(length);
+
+ var strLength = length ? stringSize(string) : 0;
+ if (!length || strLength >= length) {
+ return string;
+ }
+ var mid = (length - strLength) / 2;
+ return (
+ createPadding(nativeFloor(mid), chars) +
+ string +
+ createPadding(nativeCeil(mid), chars)
+ );
+ }
+
+ /**
+ * Pads `string` on the right side if it's shorter than `length`. Padding
+ * characters are truncated if they exceed `length`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category String
+ * @param {string} [string=''] The string to pad.
+ * @param {number} [length=0] The padding length.
+ * @param {string} [chars=' '] The string used as padding.
+ * @returns {string} Returns the padded string.
+ * @example
+ *
+ * _.padEnd('abc', 6);
+ * // => 'abc '
+ *
+ * _.padEnd('abc', 6, '_-');
+ * // => 'abc_-_'
+ *
+ * _.padEnd('abc', 3);
+ * // => 'abc'
+ */
+ function padEnd(string, length, chars) {
+ string = toString(string);
+ length = toInteger(length);
+
+ var strLength = length ? stringSize(string) : 0;
+ return (length && strLength < length)
+ ? (string + createPadding(length - strLength, chars))
+ : string;
+ }
+
+ /**
+ * Pads `string` on the left side if it's shorter than `length`. Padding
+ * characters are truncated if they exceed `length`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category String
+ * @param {string} [string=''] The string to pad.
+ * @param {number} [length=0] The padding length.
+ * @param {string} [chars=' '] The string used as padding.
+ * @returns {string} Returns the padded string.
+ * @example
+ *
+ * _.padStart('abc', 6);
+ * // => ' abc'
+ *
+ * _.padStart('abc', 6, '_-');
+ * // => '_-_abc'
+ *
+ * _.padStart('abc', 3);
+ * // => 'abc'
+ */
+ function padStart(string, length, chars) {
+ string = toString(string);
+ length = toInteger(length);
+
+ var strLength = length ? stringSize(string) : 0;
+ return (length && strLength < length)
+ ? (createPadding(length - strLength, chars) + string)
+ : string;
+ }
+
+ /**
+ * Converts `string` to an integer of the specified radix. If `radix` is
+ * `undefined` or `0`, a `radix` of `10` is used unless `value` is a
+ * hexadecimal, in which case a `radix` of `16` is used.
+ *
+ * **Note:** This method aligns with the
+ * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.
+ *
+ * @static
+ * @memberOf _
+ * @since 1.1.0
+ * @category String
+ * @param {string} string The string to convert.
+ * @param {number} [radix=10] The radix to interpret `value` by.
+ * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
+ * @returns {number} Returns the converted integer.
+ * @example
+ *
+ * _.parseInt('08');
+ * // => 8
+ *
+ * _.map(['6', '08', '10'], _.parseInt);
+ * // => [6, 8, 10]
+ */
+ function parseInt(string, radix, guard) {
+ if (guard || radix == null) {
+ radix = 0;
+ } else if (radix) {
+ radix = +radix;
+ }
+ return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);
+ }
+
+ /**
+ * Repeats the given string `n` times.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category String
+ * @param {string} [string=''] The string to repeat.
+ * @param {number} [n=1] The number of times to repeat the string.
+ * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
+ * @returns {string} Returns the repeated string.
+ * @example
+ *
+ * _.repeat('*', 3);
+ * // => '***'
+ *
+ * _.repeat('abc', 2);
+ * // => 'abcabc'
+ *
+ * _.repeat('abc', 0);
+ * // => ''
+ */
+ function repeat(string, n, guard) {
+ if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {
+ n = 1;
+ } else {
+ n = toInteger(n);
+ }
+ return baseRepeat(toString(string), n);
+ }
+
+ /**
+ * Replaces matches for `pattern` in `string` with `replacement`.
+ *
+ * **Note:** This method is based on
+ * [`String#replace`](https://mdn.io/String/replace).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category String
+ * @param {string} [string=''] The string to modify.
+ * @param {RegExp|string} pattern The pattern to replace.
+ * @param {Function|string} replacement The match replacement.
+ * @returns {string} Returns the modified string.
+ * @example
+ *
+ * _.replace('Hi Fred', 'Fred', 'Barney');
+ * // => 'Hi Barney'
+ */
+ function replace() {
+ var args = arguments,
+ string = toString(args[0]);
+
+ return args.length < 3 ? string : string.replace(args[1], args[2]);
+ }
+
+ /**
+ * Converts `string` to
+ * [snake case](https://en.wikipedia.org/wiki/Snake_case).
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category String
+ * @param {string} [string=''] The string to convert.
+ * @returns {string} Returns the snake cased string.
+ * @example
+ *
+ * _.snakeCase('Foo Bar');
+ * // => 'foo_bar'
+ *
+ * _.snakeCase('fooBar');
+ * // => 'foo_bar'
+ *
+ * _.snakeCase('--FOO-BAR--');
+ * // => 'foo_bar'
+ */
+ var snakeCase = createCompounder(function(result, word, index) {
+ return result + (index ? '_' : '') + word.toLowerCase();
+ });
+
+ /**
+ * Splits `string` by `separator`.
+ *
+ * **Note:** This method is based on
+ * [`String#split`](https://mdn.io/String/split).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category String
+ * @param {string} [string=''] The string to split.
+ * @param {RegExp|string} separator The separator pattern to split by.
+ * @param {number} [limit] The length to truncate results to.
+ * @returns {Array} Returns the string segments.
+ * @example
+ *
+ * _.split('a-b-c', '-', 2);
+ * // => ['a', 'b']
+ */
+ function split(string, separator, limit) {
+ if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {
+ separator = limit = undefined;
+ }
+ limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;
+ if (!limit) {
+ return [];
+ }
+ string = toString(string);
+ if (string && (
+ typeof separator == 'string' ||
+ (separator != null && !isRegExp(separator))
+ )) {
+ separator = baseToString(separator);
+ if (!separator && hasUnicode(string)) {
+ return castSlice(stringToArray(string), 0, limit);
+ }
+ }
+ return string.split(separator, limit);
+ }
+
+ /**
+ * Converts `string` to
+ * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).
+ *
+ * @static
+ * @memberOf _
+ * @since 3.1.0
+ * @category String
+ * @param {string} [string=''] The string to convert.
+ * @returns {string} Returns the start cased string.
+ * @example
+ *
+ * _.startCase('--foo-bar--');
+ * // => 'Foo Bar'
+ *
+ * _.startCase('fooBar');
+ * // => 'Foo Bar'
+ *
+ * _.startCase('__FOO_BAR__');
+ * // => 'FOO BAR'
+ */
+ var startCase = createCompounder(function(result, word, index) {
+ return result + (index ? ' ' : '') + upperFirst(word);
+ });
+
+ /**
+ * Checks if `string` starts with the given target string.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category String
+ * @param {string} [string=''] The string to inspect.
+ * @param {string} [target] The string to search for.
+ * @param {number} [position=0] The position to search from.
+ * @returns {boolean} Returns `true` if `string` starts with `target`,
+ * else `false`.
+ * @example
+ *
+ * _.startsWith('abc', 'a');
+ * // => true
+ *
+ * _.startsWith('abc', 'b');
+ * // => false
+ *
+ * _.startsWith('abc', 'b', 1);
+ * // => true
+ */
+ function startsWith(string, target, position) {
+ string = toString(string);
+ position = position == null
+ ? 0
+ : baseClamp(toInteger(position), 0, string.length);
+
+ target = baseToString(target);
+ return string.slice(position, position + target.length) == target;
+ }
+
+ /**
+ * Creates a compiled template function that can interpolate data properties
+ * in "interpolate" delimiters, HTML-escape interpolated data properties in
+ * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data
+ * properties may be accessed as free variables in the template. If a setting
+ * object is given, it takes precedence over `_.templateSettings` values.
+ *
+ * **Note:** In the development build `_.template` utilizes
+ * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)
+ * for easier debugging.
+ *
+ * For more information on precompiling templates see
+ * [lodash's custom builds documentation](https://lodash.com/custom-builds).
+ *
+ * For more information on Chrome extension sandboxes see
+ * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).
+ *
+ * @static
+ * @since 0.1.0
+ * @memberOf _
+ * @category String
+ * @param {string} [string=''] The template string.
+ * @param {Object} [options={}] The options object.
+ * @param {RegExp} [options.escape=_.templateSettings.escape]
+ * The HTML "escape" delimiter.
+ * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]
+ * The "evaluate" delimiter.
+ * @param {Object} [options.imports=_.templateSettings.imports]
+ * An object to import into the template as free variables.
+ * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]
+ * The "interpolate" delimiter.
+ * @param {string} [options.sourceURL='lodash.templateSources[n]']
+ * The sourceURL of the compiled template.
+ * @param {string} [options.variable='obj']
+ * The data object variable name.
+ * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
+ * @returns {Function} Returns the compiled template function.
+ * @example
+ *
+ * // Use the "interpolate" delimiter to create a compiled template.
+ * var compiled = _.template('hello <%= user %>!');
+ * compiled({ 'user': 'fred' });
+ * // => 'hello fred!'
+ *
+ * // Use the HTML "escape" delimiter to escape data property values.
+ * var compiled = _.template('<%- value %>');
+ * compiled({ 'value': '