From fe2bbd9a2d269ad7174c7f57ebc890527dc8b3fe Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 5 Apr 2021 21:31:25 +0000 Subject: [PATCH 01/17] Update dependency react-div-100vh to ^0.6.0 --- tournament-scheduler/package-lock.json | 8 ++++---- tournament-scheduler/package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/tournament-scheduler/package-lock.json b/tournament-scheduler/package-lock.json index a582630d..cfda8434 100644 --- a/tournament-scheduler/package-lock.json +++ b/tournament-scheduler/package-lock.json @@ -13029,7 +13029,7 @@ } }, "react-add-to-calendar": { - "version": "file:https:/registry.npmjs.org/react-add-to-calendar/-/react-add-to-calendar-0.1.5.tgz", + "version": "file:dependencies/react-add-to-calendar", "integrity": "sha512-DI+q3vvHCiYhxgh+83sg9UrPD9sdyBYcuY77UMcfX3y1MUPMW+f/w/6EG0MZg7B07vLQ4R6nxqk6wtMtcXOicA==", "requires": { "moment": "^2.18.1" @@ -13155,9 +13155,9 @@ } }, "react-div-100vh": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/react-div-100vh/-/react-div-100vh-0.5.6.tgz", - "integrity": "sha512-foNzJeBwiWp2Xs+pDhKyX2sP9O8UoGfYyz/D+GgZaHCKS3R+lbtJc8OdgMDr03txXgPVsxGEtmjKeDcLW30xwQ==" + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/react-div-100vh/-/react-div-100vh-0.6.0.tgz", + "integrity": "sha512-ErV0VTNXUd8jZqofC0ExZr5u+XDD2kN2te4SbwtqsyTm0UOjVYu53kP+FalGQrTe+DoMG8VYR2dITcAFu7c/5w==" }, "react-dom": { "version": "17.0.2", diff --git a/tournament-scheduler/package.json b/tournament-scheduler/package.json index e954e89d..e1e4a179 100644 --- a/tournament-scheduler/package.json +++ b/tournament-scheduler/package.json @@ -25,7 +25,7 @@ "moment": "^2.29.1", "react": "^17.0.2", "react-add-to-calendar": "file:dependencies/react-add-to-calendar", - "react-div-100vh": "^0.5.0", + "react-div-100vh": "^0.6.0", "react-dom": "^17.0.2", "react-scripts": "4.0.3", "react-text-mask": "^5.4.3" From 9c65adcf9e716f168b28a9ed957143bb31d5cf38 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 19 Apr 2021 14:51:31 +0000 Subject: [PATCH 02/17] Update dependency eslint-plugin-unicorn to v30 --- global-scoreboard/package-lock.json | 202 ++++++++----------------- global-scoreboard/package.json | 2 +- tournament-scheduler/package-lock.json | 200 ++++++++---------------- tournament-scheduler/package.json | 2 +- 4 files changed, 125 insertions(+), 281 deletions(-) diff --git a/global-scoreboard/package-lock.json b/global-scoreboard/package-lock.json index 842ee03f..e629fdb5 100644 --- a/global-scoreboard/package-lock.json +++ b/global-scoreboard/package-lock.json @@ -48,26 +48,16 @@ } }, "@babel/eslint-parser": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.13.10.tgz", - "integrity": "sha512-/I1HQ3jGPhIpeBFeI3wO9WwWOnBYpuR0pX0KlkdGcRQAVX9prB/FCS2HBpL7BiFbzhny1YCiBH8MTZD2jJa7Hg==", + "version": "7.13.14", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.13.14.tgz", + "integrity": "sha512-I0HweR36D73Ibn/FfrRDMKlMqJHFwidIUgYdMpH+aXYuQC+waq59YaJ6t9e9N36axJ82v1jR041wwqDrDXEwRA==", "dev": true, "requires": { - "eslint-scope": "5.1.0", + "eslint-scope": "^5.1.0", "eslint-visitor-keys": "^1.3.0", "semver": "^6.3.0" }, "dependencies": { - "eslint-scope": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.0.tgz", - "integrity": "sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==", - "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", @@ -6219,9 +6209,9 @@ } }, "eslint-plugin-unicorn": { - "version": "29.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-29.0.0.tgz", - "integrity": "sha512-R9jGLKb2p6LuOixviByGlH2mkfY72EBELXAPeUufveebN0M2Woa7B7dUO3gN2xPn/+eGjrIm4I2u7dDtr9G4iA==", + "version": "30.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-30.0.0.tgz", + "integrity": "sha512-ZKbE48Ep99z/3geLpkBfv+jNrzr2k7bLqCC/RfZOekZzAvn2/ECDE/d8zGdW1YxHmIC9pevQvm8Pl89v9GEIVw==", "dev": true, "requires": { "ci-info": "^3.1.1", @@ -6230,13 +6220,13 @@ "eslint-utils": "^2.1.0", "eslint-visitor-keys": "^2.0.0", "import-modules": "^2.1.0", - "lodash": "^4.17.20", + "lodash": "^4.17.21", "pluralize": "^8.0.0", "read-pkg-up": "^7.0.1", "regexp-tree": "^0.1.23", "reserved-words": "^0.1.2", "safe-regex": "^2.1.1", - "semver": "^7.3.4" + "semver": "^7.3.5" }, "dependencies": { "ci-info": { @@ -6245,6 +6235,12 @@ "integrity": "sha512-kdRWLBIJwdsYJWYJFtAFFYxybguqeF91qpZaggjG5Nf8QKdizFG2hjqvaTXbxFIcYbSaD74KpAXv6BSm17DHEQ==", "dev": true }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, "read-pkg": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", @@ -6286,9 +6282,9 @@ } }, "semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -6327,135 +6323,73 @@ "@babel/highlight": "^7.12.13" } }, - "@babel/compat-data": { - "version": "7.13.11", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.13.11.tgz", - "integrity": "sha512-BwKEkO+2a67DcFeS3RLl0Z3Gs2OvdXewuWjc1Hfokhb5eQWP9YRYH1/+VrVZvql2CfjOiNGqSAFOYt4lsqTHzg==", - "dev": true - }, "@babel/core": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.10.tgz", - "integrity": "sha512-bfIYcT0BdKeAZrovpMqX2Mx5NrgAckGbwT982AkdS5GNfn3KMGiprlBAtmBcFZRUmpaufS6WZFP8trvx8ptFDw==", + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.15.tgz", + "integrity": "sha512-6GXmNYeNjS2Uz+uls5jalOemgIhnTMeaXo+yBUA72kC2uX/8VW6XyhVIo2L8/q0goKQA3EVKx0KOQpVKSeWadQ==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", "@babel/generator": "^7.13.9", - "@babel/helper-compilation-targets": "^7.13.10", - "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-compilation-targets": "^7.13.13", + "@babel/helper-module-transforms": "^7.13.14", "@babel/helpers": "^7.13.10", - "@babel/parser": "^7.13.10", + "@babel/parser": "^7.13.15", "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.0", + "@babel/traverse": "^7.13.15", + "@babel/types": "^7.13.14", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.1.2", - "lodash": "^4.17.19", "semver": "^6.3.0", "source-map": "^0.5.0" } }, - "@babel/generator": { - "version": "7.13.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz", - "integrity": "sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw==", - "dev": true, - "requires": { - "@babel/types": "^7.13.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, "@babel/helper-compilation-targets": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.10.tgz", - "integrity": "sha512-/Xju7Qg1GQO4mHZ/Kcs6Au7gfafgZnwm+a7sy/ow/tV1sHeraRUHbjdat8/UvDor4Tez+siGKDk6zIKtCPKVJA==", + "version": "7.13.13", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.13.tgz", + "integrity": "sha512-q1kcdHNZehBwD9jYPh3WyXcsFERi39X4I59I3NadciWtNDyZ6x+GboOxncFK0kXlKIv6BJm5acncehXWUjWQMQ==", "dev": true, "requires": { - "@babel/compat-data": "^7.13.8", + "@babel/compat-data": "^7.13.12", "@babel/helper-validator-option": "^7.12.17", "browserslist": "^4.14.5", "semver": "^6.3.0" } }, - "@babel/helper-function-name": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", - "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", - "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", - "dev": true, - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.0.tgz", - "integrity": "sha512-yvRf8Ivk62JwisqV1rFRMxiSMDGnN6KH1/mDMmIrij4jztpQNRoHqqMG3U6apYbGRPJpgPalhva9Yd06HlUxJQ==", + "@babel/helper-module-imports": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", + "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", "dev": true, "requires": { - "@babel/types": "^7.13.0" + "@babel/types": "^7.13.12" } }, "@babel/helper-module-transforms": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.13.0.tgz", - "integrity": "sha512-Ls8/VBwH577+pw7Ku1QkUWIyRRNHpYlts7+qSqBBFCW3I8QteB9DxfcZ5YJpOwH6Ihe/wn8ch7fMGOP1OhEIvw==", + "version": "7.13.14", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.13.14.tgz", + "integrity": "sha512-QuU/OJ0iAOSIatyVZmfqB0lbkVP0kDRiKj34xy+QNsnVZi/PA6BoSoreeqnxxa9EHFAIL0R9XOaAR/G9WlIy5g==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-replace-supers": "^7.13.0", - "@babel/helper-simple-access": "^7.12.13", + "@babel/helper-module-imports": "^7.13.12", + "@babel/helper-replace-supers": "^7.13.12", + "@babel/helper-simple-access": "^7.13.12", "@babel/helper-split-export-declaration": "^7.12.13", "@babel/helper-validator-identifier": "^7.12.11", "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.0", - "lodash": "^4.17.19" - } - }, - "@babel/helper-replace-supers": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.0.tgz", - "integrity": "sha512-Segd5me1+Pz+rmN/NFBOplMbZG3SqRJOBlY+mA0SxAv6rjj7zJqr1AVr3SfzUVTLCv7ZLU5FycOM/SBGuLPbZw==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.13.0", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.0" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", - "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", - "dev": true, - "requires": { - "@babel/types": "^7.12.13" + "@babel/traverse": "^7.13.13", + "@babel/types": "^7.13.14" } }, - "@babel/helpers": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.13.10.tgz", - "integrity": "sha512-4VO883+MWPDUVRF3PhiLBUFHoX/bsLTGFpFK/HqvvfBZz2D57u9XzPVNFVBTc0PW/CWR9BXTOKt8NF4DInUHcQ==", + "@babel/helper-simple-access": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", + "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", "dev": true, "requires": { - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.0" + "@babel/types": "^7.13.12" } }, "@babel/highlight": { @@ -6470,43 +6404,31 @@ } }, "@babel/parser": { - "version": "7.13.11", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.11.tgz", - "integrity": "sha512-PhuoqeHoO9fc4ffMEVk4qb/w/s2iOSWohvbHxLtxui0eBg3Lg5gN1U8wp1V1u61hOWkPQJJyJzGH6Y+grwkq8Q==", + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.15.tgz", + "integrity": "sha512-b9COtcAlVEQljy/9fbcMHpG+UIW9ReF+gpaxDHTlZd0c6/UU9ng8zdySAW9sRTzpvcdCHn6bUcbuYUgGzLAWVQ==", "dev": true }, - "@babel/template": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", - "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, "@babel/traverse": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.0.tgz", - "integrity": "sha512-xys5xi5JEhzC3RzEmSGrs/b3pJW/o87SypZ+G/PhaE7uqVQNv/jlmVIBXuoh5atqQ434LfXV+sf23Oxj0bchJQ==", + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.15.tgz", + "integrity": "sha512-/mpZMNvj6bce59Qzl09fHEs8Bt8NnpEDQYleHUPZQ3wXUMvXi+HJPLars68oAbmp839fGoOkv2pSL2z9ajCIaQ==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.13.0", + "@babel/generator": "^7.13.9", "@babel/helper-function-name": "^7.12.13", "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.13.0", - "@babel/types": "^7.13.0", + "@babel/parser": "^7.13.15", + "@babel/types": "^7.13.14", "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" + "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.0.tgz", - "integrity": "sha512-hE+HE8rnG1Z6Wzo+MhaKE5lM5eMx71T4EHJgku2E3xIfaULhDcxiiRxUYgwX8qwP1BBSlag+TdGOt6JAidIZTA==", + "version": "7.13.14", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.14.tgz", + "integrity": "sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.12.11", @@ -13130,7 +13052,7 @@ } }, "react-bootstrap-table-next": { - "version": "file:https:/registry.npmjs.org/react-bootstrap-table-next/-/react-bootstrap-table-next-4.0.3.tgz", + "version": "file:dependencies/react-bootstrap-table-next", "integrity": "sha512-uKxC73qUdUfusRf2uzDfMiF9LvTG5vuhTZa0lbAgHWSLLLaKTsI0iHf1e4+c7gP71q8dFsp7StvkP65SxC1JRg==", "requires": { "classnames": "^2.2.5", diff --git a/global-scoreboard/package.json b/global-scoreboard/package.json index eeb5e035..4fb1168a 100644 --- a/global-scoreboard/package.json +++ b/global-scoreboard/package.json @@ -48,7 +48,7 @@ "eslint-plugin-simple-import-sort": "^7.0.0", "eslint-plugin-sonarjs": "^0.6.0", "eslint-plugin-switch-case": "^1.1.2", - "eslint-plugin-unicorn": "^29.0.0", + "eslint-plugin-unicorn": "^30.0.0", "typescript": "^4.2.3" }, "eslintConfig": { diff --git a/tournament-scheduler/package-lock.json b/tournament-scheduler/package-lock.json index cfda8434..aca57a2a 100644 --- a/tournament-scheduler/package-lock.json +++ b/tournament-scheduler/package-lock.json @@ -48,26 +48,16 @@ } }, "@babel/eslint-parser": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.13.10.tgz", - "integrity": "sha512-/I1HQ3jGPhIpeBFeI3wO9WwWOnBYpuR0pX0KlkdGcRQAVX9prB/FCS2HBpL7BiFbzhny1YCiBH8MTZD2jJa7Hg==", + "version": "7.13.14", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.13.14.tgz", + "integrity": "sha512-I0HweR36D73Ibn/FfrRDMKlMqJHFwidIUgYdMpH+aXYuQC+waq59YaJ6t9e9N36axJ82v1jR041wwqDrDXEwRA==", "dev": true, "requires": { - "eslint-scope": "5.1.0", + "eslint-scope": "^5.1.0", "eslint-visitor-keys": "^1.3.0", "semver": "^6.3.0" }, "dependencies": { - "eslint-scope": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.0.tgz", - "integrity": "sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==", - "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", @@ -6239,9 +6229,9 @@ } }, "eslint-plugin-unicorn": { - "version": "29.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-29.0.0.tgz", - "integrity": "sha512-R9jGLKb2p6LuOixviByGlH2mkfY72EBELXAPeUufveebN0M2Woa7B7dUO3gN2xPn/+eGjrIm4I2u7dDtr9G4iA==", + "version": "30.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-30.0.0.tgz", + "integrity": "sha512-ZKbE48Ep99z/3geLpkBfv+jNrzr2k7bLqCC/RfZOekZzAvn2/ECDE/d8zGdW1YxHmIC9pevQvm8Pl89v9GEIVw==", "dev": true, "requires": { "ci-info": "^3.1.1", @@ -6250,13 +6240,13 @@ "eslint-utils": "^2.1.0", "eslint-visitor-keys": "^2.0.0", "import-modules": "^2.1.0", - "lodash": "^4.17.20", + "lodash": "^4.17.21", "pluralize": "^8.0.0", "read-pkg-up": "^7.0.1", "regexp-tree": "^0.1.23", "reserved-words": "^0.1.2", "safe-regex": "^2.1.1", - "semver": "^7.3.4" + "semver": "^7.3.5" }, "dependencies": { "ci-info": { @@ -6265,6 +6255,12 @@ "integrity": "sha512-kdRWLBIJwdsYJWYJFtAFFYxybguqeF91qpZaggjG5Nf8QKdizFG2hjqvaTXbxFIcYbSaD74KpAXv6BSm17DHEQ==", "dev": true }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, "read-pkg": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", @@ -6306,9 +6302,9 @@ } }, "semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -6347,135 +6343,73 @@ "@babel/highlight": "^7.12.13" } }, - "@babel/compat-data": { - "version": "7.13.11", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.13.11.tgz", - "integrity": "sha512-BwKEkO+2a67DcFeS3RLl0Z3Gs2OvdXewuWjc1Hfokhb5eQWP9YRYH1/+VrVZvql2CfjOiNGqSAFOYt4lsqTHzg==", - "dev": true - }, "@babel/core": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.10.tgz", - "integrity": "sha512-bfIYcT0BdKeAZrovpMqX2Mx5NrgAckGbwT982AkdS5GNfn3KMGiprlBAtmBcFZRUmpaufS6WZFP8trvx8ptFDw==", + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.15.tgz", + "integrity": "sha512-6GXmNYeNjS2Uz+uls5jalOemgIhnTMeaXo+yBUA72kC2uX/8VW6XyhVIo2L8/q0goKQA3EVKx0KOQpVKSeWadQ==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", "@babel/generator": "^7.13.9", - "@babel/helper-compilation-targets": "^7.13.10", - "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-compilation-targets": "^7.13.13", + "@babel/helper-module-transforms": "^7.13.14", "@babel/helpers": "^7.13.10", - "@babel/parser": "^7.13.10", + "@babel/parser": "^7.13.15", "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.0", + "@babel/traverse": "^7.13.15", + "@babel/types": "^7.13.14", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.1.2", - "lodash": "^4.17.19", "semver": "^6.3.0", "source-map": "^0.5.0" } }, - "@babel/generator": { - "version": "7.13.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz", - "integrity": "sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw==", - "dev": true, - "requires": { - "@babel/types": "^7.13.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, "@babel/helper-compilation-targets": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.10.tgz", - "integrity": "sha512-/Xju7Qg1GQO4mHZ/Kcs6Au7gfafgZnwm+a7sy/ow/tV1sHeraRUHbjdat8/UvDor4Tez+siGKDk6zIKtCPKVJA==", + "version": "7.13.13", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.13.tgz", + "integrity": "sha512-q1kcdHNZehBwD9jYPh3WyXcsFERi39X4I59I3NadciWtNDyZ6x+GboOxncFK0kXlKIv6BJm5acncehXWUjWQMQ==", "dev": true, "requires": { - "@babel/compat-data": "^7.13.8", + "@babel/compat-data": "^7.13.12", "@babel/helper-validator-option": "^7.12.17", "browserslist": "^4.14.5", "semver": "^6.3.0" } }, - "@babel/helper-function-name": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", - "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", - "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", - "dev": true, - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.0.tgz", - "integrity": "sha512-yvRf8Ivk62JwisqV1rFRMxiSMDGnN6KH1/mDMmIrij4jztpQNRoHqqMG3U6apYbGRPJpgPalhva9Yd06HlUxJQ==", + "@babel/helper-module-imports": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", + "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", "dev": true, "requires": { - "@babel/types": "^7.13.0" + "@babel/types": "^7.13.12" } }, "@babel/helper-module-transforms": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.13.0.tgz", - "integrity": "sha512-Ls8/VBwH577+pw7Ku1QkUWIyRRNHpYlts7+qSqBBFCW3I8QteB9DxfcZ5YJpOwH6Ihe/wn8ch7fMGOP1OhEIvw==", + "version": "7.13.14", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.13.14.tgz", + "integrity": "sha512-QuU/OJ0iAOSIatyVZmfqB0lbkVP0kDRiKj34xy+QNsnVZi/PA6BoSoreeqnxxa9EHFAIL0R9XOaAR/G9WlIy5g==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-replace-supers": "^7.13.0", - "@babel/helper-simple-access": "^7.12.13", + "@babel/helper-module-imports": "^7.13.12", + "@babel/helper-replace-supers": "^7.13.12", + "@babel/helper-simple-access": "^7.13.12", "@babel/helper-split-export-declaration": "^7.12.13", "@babel/helper-validator-identifier": "^7.12.11", "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.0", - "lodash": "^4.17.19" - } - }, - "@babel/helper-replace-supers": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.0.tgz", - "integrity": "sha512-Segd5me1+Pz+rmN/NFBOplMbZG3SqRJOBlY+mA0SxAv6rjj7zJqr1AVr3SfzUVTLCv7ZLU5FycOM/SBGuLPbZw==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.13.0", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.0" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", - "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", - "dev": true, - "requires": { - "@babel/types": "^7.12.13" + "@babel/traverse": "^7.13.13", + "@babel/types": "^7.13.14" } }, - "@babel/helpers": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.13.10.tgz", - "integrity": "sha512-4VO883+MWPDUVRF3PhiLBUFHoX/bsLTGFpFK/HqvvfBZz2D57u9XzPVNFVBTc0PW/CWR9BXTOKt8NF4DInUHcQ==", + "@babel/helper-simple-access": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", + "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", "dev": true, "requires": { - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.0" + "@babel/types": "^7.13.12" } }, "@babel/highlight": { @@ -6490,43 +6424,31 @@ } }, "@babel/parser": { - "version": "7.13.11", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.11.tgz", - "integrity": "sha512-PhuoqeHoO9fc4ffMEVk4qb/w/s2iOSWohvbHxLtxui0eBg3Lg5gN1U8wp1V1u61hOWkPQJJyJzGH6Y+grwkq8Q==", + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.15.tgz", + "integrity": "sha512-b9COtcAlVEQljy/9fbcMHpG+UIW9ReF+gpaxDHTlZd0c6/UU9ng8zdySAW9sRTzpvcdCHn6bUcbuYUgGzLAWVQ==", "dev": true }, - "@babel/template": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", - "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, "@babel/traverse": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.0.tgz", - "integrity": "sha512-xys5xi5JEhzC3RzEmSGrs/b3pJW/o87SypZ+G/PhaE7uqVQNv/jlmVIBXuoh5atqQ434LfXV+sf23Oxj0bchJQ==", + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.15.tgz", + "integrity": "sha512-/mpZMNvj6bce59Qzl09fHEs8Bt8NnpEDQYleHUPZQ3wXUMvXi+HJPLars68oAbmp839fGoOkv2pSL2z9ajCIaQ==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.13.0", + "@babel/generator": "^7.13.9", "@babel/helper-function-name": "^7.12.13", "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.13.0", - "@babel/types": "^7.13.0", + "@babel/parser": "^7.13.15", + "@babel/types": "^7.13.14", "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" + "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.0.tgz", - "integrity": "sha512-hE+HE8rnG1Z6Wzo+MhaKE5lM5eMx71T4EHJgku2E3xIfaULhDcxiiRxUYgwX8qwP1BBSlag+TdGOt6JAidIZTA==", + "version": "7.13.14", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.14.tgz", + "integrity": "sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.12.11", diff --git a/tournament-scheduler/package.json b/tournament-scheduler/package.json index e1e4a179..3d0e72f5 100644 --- a/tournament-scheduler/package.json +++ b/tournament-scheduler/package.json @@ -48,7 +48,7 @@ "eslint-plugin-simple-import-sort": "^7.0.0", "eslint-plugin-sonarjs": "^0.6.0", "eslint-plugin-switch-case": "^1.1.2", - "eslint-plugin-unicorn": "^29.0.0", + "eslint-plugin-unicorn": "^30.0.0", "typescript": "^4.2.3" }, "eslintConfig": { From 7458bdf3ccf6a9f234e4eded6d0acfdd0527f548 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 23 Apr 2021 11:13:45 +0000 Subject: [PATCH 03/17] Update dependency eslint-plugin-sonarjs to ^0.7.0 --- global-scoreboard/package-lock.json | 6 +++--- global-scoreboard/package.json | 2 +- tournament-scheduler/package-lock.json | 6 +++--- tournament-scheduler/package.json | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/global-scoreboard/package-lock.json b/global-scoreboard/package-lock.json index e629fdb5..1be14a24 100644 --- a/global-scoreboard/package-lock.json +++ b/global-scoreboard/package-lock.json @@ -6138,9 +6138,9 @@ "dev": true }, "eslint-plugin-sonarjs": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-sonarjs/-/eslint-plugin-sonarjs-0.6.0.tgz", - "integrity": "sha512-y+sXXWsYVW2kNEjmZI87laFspwC/hic7wyMjsPFoST8aQ2hESUVavkZjnTeVdHMOmlmcloKkyX/GJJetmfBY4Q==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-sonarjs/-/eslint-plugin-sonarjs-0.7.0.tgz", + "integrity": "sha512-vi6zGkd5Eznc32AQlleWUOMrMeDiUih9wR7nPPfrDCyVRmwYNHIBRPZGv1EgXwELwaPghCSvoAoHoR7uSbBF/Q==", "dev": true }, "eslint-plugin-switch-case": { diff --git a/global-scoreboard/package.json b/global-scoreboard/package.json index 4fb1168a..1e29505c 100644 --- a/global-scoreboard/package.json +++ b/global-scoreboard/package.json @@ -46,7 +46,7 @@ "eslint-plugin-react": "^7.23.1", "eslint-plugin-react-hooks": "^4.2.0", "eslint-plugin-simple-import-sort": "^7.0.0", - "eslint-plugin-sonarjs": "^0.6.0", + "eslint-plugin-sonarjs": "^0.7.0", "eslint-plugin-switch-case": "^1.1.2", "eslint-plugin-unicorn": "^30.0.0", "typescript": "^4.2.3" diff --git a/tournament-scheduler/package-lock.json b/tournament-scheduler/package-lock.json index aca57a2a..84309073 100644 --- a/tournament-scheduler/package-lock.json +++ b/tournament-scheduler/package-lock.json @@ -6158,9 +6158,9 @@ "dev": true }, "eslint-plugin-sonarjs": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-sonarjs/-/eslint-plugin-sonarjs-0.6.0.tgz", - "integrity": "sha512-y+sXXWsYVW2kNEjmZI87laFspwC/hic7wyMjsPFoST8aQ2hESUVavkZjnTeVdHMOmlmcloKkyX/GJJetmfBY4Q==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-sonarjs/-/eslint-plugin-sonarjs-0.7.0.tgz", + "integrity": "sha512-vi6zGkd5Eznc32AQlleWUOMrMeDiUih9wR7nPPfrDCyVRmwYNHIBRPZGv1EgXwELwaPghCSvoAoHoR7uSbBF/Q==", "dev": true }, "eslint-plugin-switch-case": { diff --git a/tournament-scheduler/package.json b/tournament-scheduler/package.json index 3d0e72f5..106a2eed 100644 --- a/tournament-scheduler/package.json +++ b/tournament-scheduler/package.json @@ -46,7 +46,7 @@ "eslint-plugin-react": "^7.23.1", "eslint-plugin-react-hooks": "^4.2.0", "eslint-plugin-simple-import-sort": "^7.0.0", - "eslint-plugin-sonarjs": "^0.6.0", + "eslint-plugin-sonarjs": "^0.7.0", "eslint-plugin-switch-case": "^1.1.2", "eslint-plugin-unicorn": "^30.0.0", "typescript": "^4.2.3" From 4d3c88295401a9db6f57567882816d600ca00f51 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 23 Apr 2021 16:49:01 +0000 Subject: [PATCH 04/17] Update dependency eslint-plugin-unicorn to v31 --- global-scoreboard/package-lock.json | 93 ++++++++++++++++++-------- global-scoreboard/package.json | 2 +- tournament-scheduler/package-lock.json | 93 ++++++++++++++++++-------- tournament-scheduler/package.json | 2 +- 4 files changed, 132 insertions(+), 58 deletions(-) diff --git a/global-scoreboard/package-lock.json b/global-scoreboard/package-lock.json index 1be14a24..7ce11167 100644 --- a/global-scoreboard/package-lock.json +++ b/global-scoreboard/package-lock.json @@ -6209,9 +6209,9 @@ } }, "eslint-plugin-unicorn": { - "version": "30.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-30.0.0.tgz", - "integrity": "sha512-ZKbE48Ep99z/3geLpkBfv+jNrzr2k7bLqCC/RfZOekZzAvn2/ECDE/d8zGdW1YxHmIC9pevQvm8Pl89v9GEIVw==", + "version": "31.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-31.0.0.tgz", + "integrity": "sha512-HR3gI4ANtV8A+0FLAaxjBD/G5J3PWBo+7OswyGeK5nylGqtKLJVbnPksIkBgmVg+SFpxu5MnjaxQQI+9KjyVAg==", "dev": true, "requires": { "ci-info": "^3.1.1", @@ -6220,6 +6220,7 @@ "eslint-utils": "^2.1.0", "eslint-visitor-keys": "^2.0.0", "import-modules": "^2.1.0", + "is-builtin-module": "^3.1.0", "lodash": "^4.17.21", "pluralize": "^8.0.0", "read-pkg-up": "^7.0.1", @@ -6323,21 +6324,27 @@ "@babel/highlight": "^7.12.13" } }, - "@babel/core": { + "@babel/compat-data": { "version": "7.13.15", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.15.tgz", - "integrity": "sha512-6GXmNYeNjS2Uz+uls5jalOemgIhnTMeaXo+yBUA72kC2uX/8VW6XyhVIo2L8/q0goKQA3EVKx0KOQpVKSeWadQ==", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.13.15.tgz", + "integrity": "sha512-ltnibHKR1VnrU4ymHyQ/CXtNXI6yZC0oJThyW78Hft8XndANwi+9H+UIklBDraIjFEJzw8wmcM427oDd9KS5wA==", + "dev": true + }, + "@babel/core": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.16.tgz", + "integrity": "sha512-sXHpixBiWWFti0AV2Zq7avpTasr6sIAu7Y396c608541qAU2ui4a193m0KSQmfPSKFZLnQ3cvlKDOm3XkuXm3Q==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.13.9", - "@babel/helper-compilation-targets": "^7.13.13", + "@babel/generator": "^7.13.16", + "@babel/helper-compilation-targets": "^7.13.16", "@babel/helper-module-transforms": "^7.13.14", - "@babel/helpers": "^7.13.10", - "@babel/parser": "^7.13.15", + "@babel/helpers": "^7.13.16", + "@babel/parser": "^7.13.16", "@babel/template": "^7.12.13", "@babel/traverse": "^7.13.15", - "@babel/types": "^7.13.14", + "@babel/types": "^7.13.16", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -6346,13 +6353,24 @@ "source-map": "^0.5.0" } }, + "@babel/generator": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.16.tgz", + "integrity": "sha512-grBBR75UnKOcUWMp8WoDxNsWCFl//XCK6HWTrBQKTr5SV9f5g0pNOjdyzi/DTBv12S9GnYPInIXQBTky7OXEMg==", + "dev": true, + "requires": { + "@babel/types": "^7.13.16", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, "@babel/helper-compilation-targets": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.13.tgz", - "integrity": "sha512-q1kcdHNZehBwD9jYPh3WyXcsFERi39X4I59I3NadciWtNDyZ6x+GboOxncFK0kXlKIv6BJm5acncehXWUjWQMQ==", + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz", + "integrity": "sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA==", "dev": true, "requires": { - "@babel/compat-data": "^7.13.12", + "@babel/compat-data": "^7.13.15", "@babel/helper-validator-option": "^7.12.17", "browserslist": "^4.14.5", "semver": "^6.3.0" @@ -6392,6 +6410,17 @@ "@babel/types": "^7.13.12" } }, + "@babel/helpers": { + "version": "7.13.17", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.13.17.tgz", + "integrity": "sha512-Eal4Gce4kGijo1/TGJdqp3WuhllaMLSrW6XcL0ulyUAQOuxHcCafZE8KHg9857gcTehsm/v7RcOx2+jp0Ryjsg==", + "dev": true, + "requires": { + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.17", + "@babel/types": "^7.13.17" + } + }, "@babel/highlight": { "version": "7.13.10", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", @@ -6404,35 +6433,34 @@ } }, "@babel/parser": { - "version": "7.13.15", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.15.tgz", - "integrity": "sha512-b9COtcAlVEQljy/9fbcMHpG+UIW9ReF+gpaxDHTlZd0c6/UU9ng8zdySAW9sRTzpvcdCHn6bUcbuYUgGzLAWVQ==", + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.16.tgz", + "integrity": "sha512-6bAg36mCwuqLO0hbR+z7PHuqWiCeP7Dzg73OpQwsAB1Eb8HnGEz5xYBzCfbu+YjoaJsJs+qheDxVAuqbt3ILEw==", "dev": true }, "@babel/traverse": { - "version": "7.13.15", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.15.tgz", - "integrity": "sha512-/mpZMNvj6bce59Qzl09fHEs8Bt8NnpEDQYleHUPZQ3wXUMvXi+HJPLars68oAbmp839fGoOkv2pSL2z9ajCIaQ==", + "version": "7.13.17", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.17.tgz", + "integrity": "sha512-BMnZn0R+X6ayqm3C3To7o1j7Q020gWdqdyP50KEoVqaCO2c/Im7sYZSmVgvefp8TTMQ+9CtwuBp0Z1CZ8V3Pvg==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.13.9", + "@babel/generator": "^7.13.16", "@babel/helper-function-name": "^7.12.13", "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.13.15", - "@babel/types": "^7.13.14", + "@babel/parser": "^7.13.16", + "@babel/types": "^7.13.17", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.13.14", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.14.tgz", - "integrity": "sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ==", + "version": "7.13.17", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.17.tgz", + "integrity": "sha512-RawydLgxbOPDlTLJNtoIypwdmAy//uQIzlKt2+iBiJaRlVuI6QLUxVAyWGNfOzp8Yu4L4lLIacoCyTNtpb4wiA==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } }, @@ -8182,6 +8210,15 @@ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, + "is-builtin-module": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.1.0.tgz", + "integrity": "sha512-OV7JjAgOTfAFJmHZLvpSTb4qi0nIILDV1gWPYDnDJUTNFM5aGlRAhk4QcT8i7TuAleeEV5Fdkqn3t4mS+Q11fg==", + "dev": true, + "requires": { + "builtin-modules": "^3.0.0" + } + }, "is-callable": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", diff --git a/global-scoreboard/package.json b/global-scoreboard/package.json index 1e29505c..893274a6 100644 --- a/global-scoreboard/package.json +++ b/global-scoreboard/package.json @@ -48,7 +48,7 @@ "eslint-plugin-simple-import-sort": "^7.0.0", "eslint-plugin-sonarjs": "^0.7.0", "eslint-plugin-switch-case": "^1.1.2", - "eslint-plugin-unicorn": "^30.0.0", + "eslint-plugin-unicorn": "^31.0.0", "typescript": "^4.2.3" }, "eslintConfig": { diff --git a/tournament-scheduler/package-lock.json b/tournament-scheduler/package-lock.json index 84309073..e0790b30 100644 --- a/tournament-scheduler/package-lock.json +++ b/tournament-scheduler/package-lock.json @@ -6229,9 +6229,9 @@ } }, "eslint-plugin-unicorn": { - "version": "30.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-30.0.0.tgz", - "integrity": "sha512-ZKbE48Ep99z/3geLpkBfv+jNrzr2k7bLqCC/RfZOekZzAvn2/ECDE/d8zGdW1YxHmIC9pevQvm8Pl89v9GEIVw==", + "version": "31.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-31.0.0.tgz", + "integrity": "sha512-HR3gI4ANtV8A+0FLAaxjBD/G5J3PWBo+7OswyGeK5nylGqtKLJVbnPksIkBgmVg+SFpxu5MnjaxQQI+9KjyVAg==", "dev": true, "requires": { "ci-info": "^3.1.1", @@ -6240,6 +6240,7 @@ "eslint-utils": "^2.1.0", "eslint-visitor-keys": "^2.0.0", "import-modules": "^2.1.0", + "is-builtin-module": "^3.1.0", "lodash": "^4.17.21", "pluralize": "^8.0.0", "read-pkg-up": "^7.0.1", @@ -6343,21 +6344,27 @@ "@babel/highlight": "^7.12.13" } }, - "@babel/core": { + "@babel/compat-data": { "version": "7.13.15", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.15.tgz", - "integrity": "sha512-6GXmNYeNjS2Uz+uls5jalOemgIhnTMeaXo+yBUA72kC2uX/8VW6XyhVIo2L8/q0goKQA3EVKx0KOQpVKSeWadQ==", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.13.15.tgz", + "integrity": "sha512-ltnibHKR1VnrU4ymHyQ/CXtNXI6yZC0oJThyW78Hft8XndANwi+9H+UIklBDraIjFEJzw8wmcM427oDd9KS5wA==", + "dev": true + }, + "@babel/core": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.16.tgz", + "integrity": "sha512-sXHpixBiWWFti0AV2Zq7avpTasr6sIAu7Y396c608541qAU2ui4a193m0KSQmfPSKFZLnQ3cvlKDOm3XkuXm3Q==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.13.9", - "@babel/helper-compilation-targets": "^7.13.13", + "@babel/generator": "^7.13.16", + "@babel/helper-compilation-targets": "^7.13.16", "@babel/helper-module-transforms": "^7.13.14", - "@babel/helpers": "^7.13.10", - "@babel/parser": "^7.13.15", + "@babel/helpers": "^7.13.16", + "@babel/parser": "^7.13.16", "@babel/template": "^7.12.13", "@babel/traverse": "^7.13.15", - "@babel/types": "^7.13.14", + "@babel/types": "^7.13.16", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -6366,13 +6373,24 @@ "source-map": "^0.5.0" } }, + "@babel/generator": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.16.tgz", + "integrity": "sha512-grBBR75UnKOcUWMp8WoDxNsWCFl//XCK6HWTrBQKTr5SV9f5g0pNOjdyzi/DTBv12S9GnYPInIXQBTky7OXEMg==", + "dev": true, + "requires": { + "@babel/types": "^7.13.16", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, "@babel/helper-compilation-targets": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.13.tgz", - "integrity": "sha512-q1kcdHNZehBwD9jYPh3WyXcsFERi39X4I59I3NadciWtNDyZ6x+GboOxncFK0kXlKIv6BJm5acncehXWUjWQMQ==", + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz", + "integrity": "sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA==", "dev": true, "requires": { - "@babel/compat-data": "^7.13.12", + "@babel/compat-data": "^7.13.15", "@babel/helper-validator-option": "^7.12.17", "browserslist": "^4.14.5", "semver": "^6.3.0" @@ -6412,6 +6430,17 @@ "@babel/types": "^7.13.12" } }, + "@babel/helpers": { + "version": "7.13.17", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.13.17.tgz", + "integrity": "sha512-Eal4Gce4kGijo1/TGJdqp3WuhllaMLSrW6XcL0ulyUAQOuxHcCafZE8KHg9857gcTehsm/v7RcOx2+jp0Ryjsg==", + "dev": true, + "requires": { + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.17", + "@babel/types": "^7.13.17" + } + }, "@babel/highlight": { "version": "7.13.10", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", @@ -6424,35 +6453,34 @@ } }, "@babel/parser": { - "version": "7.13.15", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.15.tgz", - "integrity": "sha512-b9COtcAlVEQljy/9fbcMHpG+UIW9ReF+gpaxDHTlZd0c6/UU9ng8zdySAW9sRTzpvcdCHn6bUcbuYUgGzLAWVQ==", + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.16.tgz", + "integrity": "sha512-6bAg36mCwuqLO0hbR+z7PHuqWiCeP7Dzg73OpQwsAB1Eb8HnGEz5xYBzCfbu+YjoaJsJs+qheDxVAuqbt3ILEw==", "dev": true }, "@babel/traverse": { - "version": "7.13.15", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.15.tgz", - "integrity": "sha512-/mpZMNvj6bce59Qzl09fHEs8Bt8NnpEDQYleHUPZQ3wXUMvXi+HJPLars68oAbmp839fGoOkv2pSL2z9ajCIaQ==", + "version": "7.13.17", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.17.tgz", + "integrity": "sha512-BMnZn0R+X6ayqm3C3To7o1j7Q020gWdqdyP50KEoVqaCO2c/Im7sYZSmVgvefp8TTMQ+9CtwuBp0Z1CZ8V3Pvg==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.13.9", + "@babel/generator": "^7.13.16", "@babel/helper-function-name": "^7.12.13", "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.13.15", - "@babel/types": "^7.13.14", + "@babel/parser": "^7.13.16", + "@babel/types": "^7.13.17", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.13.14", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.14.tgz", - "integrity": "sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ==", + "version": "7.13.17", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.17.tgz", + "integrity": "sha512-RawydLgxbOPDlTLJNtoIypwdmAy//uQIzlKt2+iBiJaRlVuI6QLUxVAyWGNfOzp8Yu4L4lLIacoCyTNtpb4wiA==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } }, @@ -8217,6 +8245,15 @@ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, + "is-builtin-module": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.1.0.tgz", + "integrity": "sha512-OV7JjAgOTfAFJmHZLvpSTb4qi0nIILDV1gWPYDnDJUTNFM5aGlRAhk4QcT8i7TuAleeEV5Fdkqn3t4mS+Q11fg==", + "dev": true, + "requires": { + "builtin-modules": "^3.0.0" + } + }, "is-callable": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", diff --git a/tournament-scheduler/package.json b/tournament-scheduler/package.json index 106a2eed..99de2993 100644 --- a/tournament-scheduler/package.json +++ b/tournament-scheduler/package.json @@ -48,7 +48,7 @@ "eslint-plugin-simple-import-sort": "^7.0.0", "eslint-plugin-sonarjs": "^0.7.0", "eslint-plugin-switch-case": "^1.1.2", - "eslint-plugin-unicorn": "^30.0.0", + "eslint-plugin-unicorn": "^31.0.0", "typescript": "^4.2.3" }, "eslintConfig": { From b52a1344bfad2d27f90e00a17e26a18d4d9ffbc1 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sun, 9 May 2021 11:58:01 +0000 Subject: [PATCH 05/17] Update dependency eslint-plugin-unicorn to v32 --- global-scoreboard/package-lock.json | 101 +++++++++++++------------ global-scoreboard/package.json | 2 +- tournament-scheduler/package-lock.json | 101 +++++++++++++------------ tournament-scheduler/package.json | 2 +- 4 files changed, 108 insertions(+), 98 deletions(-) diff --git a/global-scoreboard/package-lock.json b/global-scoreboard/package-lock.json index 7ce11167..48c3560a 100644 --- a/global-scoreboard/package-lock.json +++ b/global-scoreboard/package-lock.json @@ -6209,16 +6209,15 @@ } }, "eslint-plugin-unicorn": { - "version": "31.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-31.0.0.tgz", - "integrity": "sha512-HR3gI4ANtV8A+0FLAaxjBD/G5J3PWBo+7OswyGeK5nylGqtKLJVbnPksIkBgmVg+SFpxu5MnjaxQQI+9KjyVAg==", + "version": "32.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-32.0.0.tgz", + "integrity": "sha512-VYE/XvZvdcY0RvOKGxsrVVWo8DaI/tGVYuhKzSd6Uuy69Ydc8zX+roZ/H9PgyykM4nuj8JDoOHSwVk9a4OYbCQ==", "dev": true, "requires": { "ci-info": "^3.1.1", "clean-regexp": "^1.0.0", "eslint-template-visitor": "^2.3.2", "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", "import-modules": "^2.1.0", "is-builtin-module": "^3.1.0", "lodash": "^4.17.21", @@ -6325,26 +6324,26 @@ } }, "@babel/compat-data": { - "version": "7.13.15", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.13.15.tgz", - "integrity": "sha512-ltnibHKR1VnrU4ymHyQ/CXtNXI6yZC0oJThyW78Hft8XndANwi+9H+UIklBDraIjFEJzw8wmcM427oDd9KS5wA==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.0.tgz", + "integrity": "sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q==", "dev": true }, "@babel/core": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.16.tgz", - "integrity": "sha512-sXHpixBiWWFti0AV2Zq7avpTasr6sIAu7Y396c608541qAU2ui4a193m0KSQmfPSKFZLnQ3cvlKDOm3XkuXm3Q==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.0.tgz", + "integrity": "sha512-8YqpRig5NmIHlMLw09zMlPTvUVMILjqCOtVgu+TVNWEBvy9b5I3RRyhqnrV4hjgEK7n8P9OqvkWJAFmEL6Wwfw==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.13.16", + "@babel/generator": "^7.14.0", "@babel/helper-compilation-targets": "^7.13.16", - "@babel/helper-module-transforms": "^7.13.14", - "@babel/helpers": "^7.13.16", - "@babel/parser": "^7.13.16", + "@babel/helper-module-transforms": "^7.14.0", + "@babel/helpers": "^7.14.0", + "@babel/parser": "^7.14.0", "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.15", - "@babel/types": "^7.13.16", + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.14.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -6354,12 +6353,12 @@ } }, "@babel/generator": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.16.tgz", - "integrity": "sha512-grBBR75UnKOcUWMp8WoDxNsWCFl//XCK6HWTrBQKTr5SV9f5g0pNOjdyzi/DTBv12S9GnYPInIXQBTky7OXEMg==", + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.1.tgz", + "integrity": "sha512-TMGhsXMXCP/O1WtQmZjpEYDhCYC9vFhayWZPJSZCGkPJgUqX0rF0wwtrYvnzVxIjcF80tkUertXVk5cwqi5cAQ==", "dev": true, "requires": { - "@babel/types": "^7.13.16", + "@babel/types": "^7.14.1", "jsesc": "^2.5.1", "source-map": "^0.5.0" } @@ -6386,19 +6385,19 @@ } }, "@babel/helper-module-transforms": { - "version": "7.13.14", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.13.14.tgz", - "integrity": "sha512-QuU/OJ0iAOSIatyVZmfqB0lbkVP0kDRiKj34xy+QNsnVZi/PA6BoSoreeqnxxa9EHFAIL0R9XOaAR/G9WlIy5g==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.0.tgz", + "integrity": "sha512-L40t9bxIuGOfpIGA3HNkJhU9qYrf4y5A5LUSw7rGMSn+pcG8dfJ0g6Zval6YJGd2nEjI7oP00fRdnhLKndx6bw==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.13.12", "@babel/helper-replace-supers": "^7.13.12", "@babel/helper-simple-access": "^7.13.12", "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/helper-validator-identifier": "^7.12.11", + "@babel/helper-validator-identifier": "^7.14.0", "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.13", - "@babel/types": "^7.13.14" + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.14.0" } }, "@babel/helper-simple-access": { @@ -6410,57 +6409,63 @@ "@babel/types": "^7.13.12" } }, + "@babel/helper-validator-identifier": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", + "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", + "dev": true + }, "@babel/helpers": { - "version": "7.13.17", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.13.17.tgz", - "integrity": "sha512-Eal4Gce4kGijo1/TGJdqp3WuhllaMLSrW6XcL0ulyUAQOuxHcCafZE8KHg9857gcTehsm/v7RcOx2+jp0Ryjsg==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", + "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", "dev": true, "requires": { "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.17", - "@babel/types": "^7.13.17" + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.14.0" } }, "@babel/highlight": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", - "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", + "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.12.11", + "@babel/helper-validator-identifier": "^7.14.0", "chalk": "^2.0.0", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.16.tgz", - "integrity": "sha512-6bAg36mCwuqLO0hbR+z7PHuqWiCeP7Dzg73OpQwsAB1Eb8HnGEz5xYBzCfbu+YjoaJsJs+qheDxVAuqbt3ILEw==", + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.1.tgz", + "integrity": "sha512-muUGEKu8E/ftMTPlNp+mc6zL3E9zKWmF5sDHZ5MSsoTP9Wyz64AhEf9kD08xYJ7w6Hdcu8H550ircnPyWSIF0Q==", "dev": true }, "@babel/traverse": { - "version": "7.13.17", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.17.tgz", - "integrity": "sha512-BMnZn0R+X6ayqm3C3To7o1j7Q020gWdqdyP50KEoVqaCO2c/Im7sYZSmVgvefp8TTMQ+9CtwuBp0Z1CZ8V3Pvg==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.0.tgz", + "integrity": "sha512-dZ/a371EE5XNhTHomvtuLTUyx6UEoJmYX+DT5zBCQN3McHemsuIaKKYqsc/fs26BEkHs/lBZy0J571LP5z9kQA==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.13.16", + "@babel/generator": "^7.14.0", "@babel/helper-function-name": "^7.12.13", "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.13.16", - "@babel/types": "^7.13.17", + "@babel/parser": "^7.14.0", + "@babel/types": "^7.14.0", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.13.17", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.17.tgz", - "integrity": "sha512-RawydLgxbOPDlTLJNtoIypwdmAy//uQIzlKt2+iBiJaRlVuI6QLUxVAyWGNfOzp8Yu4L4lLIacoCyTNtpb4wiA==", + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.1.tgz", + "integrity": "sha512-S13Qe85fzLs3gYRUnrpyeIrBJIMYv33qSTg1qoBwiG6nPKwUWAD9odSzWhEedpwOIzSEI6gbdQIWEMiCI42iBA==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.12.11", + "@babel/helper-validator-identifier": "^7.14.0", "to-fast-properties": "^2.0.0" } }, diff --git a/global-scoreboard/package.json b/global-scoreboard/package.json index 893274a6..b0722bec 100644 --- a/global-scoreboard/package.json +++ b/global-scoreboard/package.json @@ -48,7 +48,7 @@ "eslint-plugin-simple-import-sort": "^7.0.0", "eslint-plugin-sonarjs": "^0.7.0", "eslint-plugin-switch-case": "^1.1.2", - "eslint-plugin-unicorn": "^31.0.0", + "eslint-plugin-unicorn": "^32.0.0", "typescript": "^4.2.3" }, "eslintConfig": { diff --git a/tournament-scheduler/package-lock.json b/tournament-scheduler/package-lock.json index e0790b30..642244a4 100644 --- a/tournament-scheduler/package-lock.json +++ b/tournament-scheduler/package-lock.json @@ -6229,16 +6229,15 @@ } }, "eslint-plugin-unicorn": { - "version": "31.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-31.0.0.tgz", - "integrity": "sha512-HR3gI4ANtV8A+0FLAaxjBD/G5J3PWBo+7OswyGeK5nylGqtKLJVbnPksIkBgmVg+SFpxu5MnjaxQQI+9KjyVAg==", + "version": "32.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-32.0.0.tgz", + "integrity": "sha512-VYE/XvZvdcY0RvOKGxsrVVWo8DaI/tGVYuhKzSd6Uuy69Ydc8zX+roZ/H9PgyykM4nuj8JDoOHSwVk9a4OYbCQ==", "dev": true, "requires": { "ci-info": "^3.1.1", "clean-regexp": "^1.0.0", "eslint-template-visitor": "^2.3.2", "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", "import-modules": "^2.1.0", "is-builtin-module": "^3.1.0", "lodash": "^4.17.21", @@ -6345,26 +6344,26 @@ } }, "@babel/compat-data": { - "version": "7.13.15", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.13.15.tgz", - "integrity": "sha512-ltnibHKR1VnrU4ymHyQ/CXtNXI6yZC0oJThyW78Hft8XndANwi+9H+UIklBDraIjFEJzw8wmcM427oDd9KS5wA==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.0.tgz", + "integrity": "sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q==", "dev": true }, "@babel/core": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.16.tgz", - "integrity": "sha512-sXHpixBiWWFti0AV2Zq7avpTasr6sIAu7Y396c608541qAU2ui4a193m0KSQmfPSKFZLnQ3cvlKDOm3XkuXm3Q==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.0.tgz", + "integrity": "sha512-8YqpRig5NmIHlMLw09zMlPTvUVMILjqCOtVgu+TVNWEBvy9b5I3RRyhqnrV4hjgEK7n8P9OqvkWJAFmEL6Wwfw==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.13.16", + "@babel/generator": "^7.14.0", "@babel/helper-compilation-targets": "^7.13.16", - "@babel/helper-module-transforms": "^7.13.14", - "@babel/helpers": "^7.13.16", - "@babel/parser": "^7.13.16", + "@babel/helper-module-transforms": "^7.14.0", + "@babel/helpers": "^7.14.0", + "@babel/parser": "^7.14.0", "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.15", - "@babel/types": "^7.13.16", + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.14.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -6374,12 +6373,12 @@ } }, "@babel/generator": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.16.tgz", - "integrity": "sha512-grBBR75UnKOcUWMp8WoDxNsWCFl//XCK6HWTrBQKTr5SV9f5g0pNOjdyzi/DTBv12S9GnYPInIXQBTky7OXEMg==", + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.1.tgz", + "integrity": "sha512-TMGhsXMXCP/O1WtQmZjpEYDhCYC9vFhayWZPJSZCGkPJgUqX0rF0wwtrYvnzVxIjcF80tkUertXVk5cwqi5cAQ==", "dev": true, "requires": { - "@babel/types": "^7.13.16", + "@babel/types": "^7.14.1", "jsesc": "^2.5.1", "source-map": "^0.5.0" } @@ -6406,19 +6405,19 @@ } }, "@babel/helper-module-transforms": { - "version": "7.13.14", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.13.14.tgz", - "integrity": "sha512-QuU/OJ0iAOSIatyVZmfqB0lbkVP0kDRiKj34xy+QNsnVZi/PA6BoSoreeqnxxa9EHFAIL0R9XOaAR/G9WlIy5g==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.0.tgz", + "integrity": "sha512-L40t9bxIuGOfpIGA3HNkJhU9qYrf4y5A5LUSw7rGMSn+pcG8dfJ0g6Zval6YJGd2nEjI7oP00fRdnhLKndx6bw==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.13.12", "@babel/helper-replace-supers": "^7.13.12", "@babel/helper-simple-access": "^7.13.12", "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/helper-validator-identifier": "^7.12.11", + "@babel/helper-validator-identifier": "^7.14.0", "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.13", - "@babel/types": "^7.13.14" + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.14.0" } }, "@babel/helper-simple-access": { @@ -6430,57 +6429,63 @@ "@babel/types": "^7.13.12" } }, + "@babel/helper-validator-identifier": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", + "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", + "dev": true + }, "@babel/helpers": { - "version": "7.13.17", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.13.17.tgz", - "integrity": "sha512-Eal4Gce4kGijo1/TGJdqp3WuhllaMLSrW6XcL0ulyUAQOuxHcCafZE8KHg9857gcTehsm/v7RcOx2+jp0Ryjsg==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", + "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", "dev": true, "requires": { "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.17", - "@babel/types": "^7.13.17" + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.14.0" } }, "@babel/highlight": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", - "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", + "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.12.11", + "@babel/helper-validator-identifier": "^7.14.0", "chalk": "^2.0.0", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.16.tgz", - "integrity": "sha512-6bAg36mCwuqLO0hbR+z7PHuqWiCeP7Dzg73OpQwsAB1Eb8HnGEz5xYBzCfbu+YjoaJsJs+qheDxVAuqbt3ILEw==", + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.1.tgz", + "integrity": "sha512-muUGEKu8E/ftMTPlNp+mc6zL3E9zKWmF5sDHZ5MSsoTP9Wyz64AhEf9kD08xYJ7w6Hdcu8H550ircnPyWSIF0Q==", "dev": true }, "@babel/traverse": { - "version": "7.13.17", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.17.tgz", - "integrity": "sha512-BMnZn0R+X6ayqm3C3To7o1j7Q020gWdqdyP50KEoVqaCO2c/Im7sYZSmVgvefp8TTMQ+9CtwuBp0Z1CZ8V3Pvg==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.0.tgz", + "integrity": "sha512-dZ/a371EE5XNhTHomvtuLTUyx6UEoJmYX+DT5zBCQN3McHemsuIaKKYqsc/fs26BEkHs/lBZy0J571LP5z9kQA==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.13.16", + "@babel/generator": "^7.14.0", "@babel/helper-function-name": "^7.12.13", "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.13.16", - "@babel/types": "^7.13.17", + "@babel/parser": "^7.14.0", + "@babel/types": "^7.14.0", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.13.17", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.17.tgz", - "integrity": "sha512-RawydLgxbOPDlTLJNtoIypwdmAy//uQIzlKt2+iBiJaRlVuI6QLUxVAyWGNfOzp8Yu4L4lLIacoCyTNtpb4wiA==", + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.1.tgz", + "integrity": "sha512-S13Qe85fzLs3gYRUnrpyeIrBJIMYv33qSTg1qoBwiG6nPKwUWAD9odSzWhEedpwOIzSEI6gbdQIWEMiCI42iBA==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.12.11", + "@babel/helper-validator-identifier": "^7.14.0", "to-fast-properties": "^2.0.0" } }, diff --git a/tournament-scheduler/package.json b/tournament-scheduler/package.json index 99de2993..98b26519 100644 --- a/tournament-scheduler/package.json +++ b/tournament-scheduler/package.json @@ -48,7 +48,7 @@ "eslint-plugin-simple-import-sort": "^7.0.0", "eslint-plugin-sonarjs": "^0.7.0", "eslint-plugin-switch-case": "^1.1.2", - "eslint-plugin-unicorn": "^31.0.0", + "eslint-plugin-unicorn": "^32.0.0", "typescript": "^4.2.3" }, "eslintConfig": { From 6f4aaba7389c294487d2a20db5fed4a003f1ed8d Mon Sep 17 00:00:00 2001 From: Avasam Date: Wed, 19 May 2021 03:59:20 -0400 Subject: [PATCH 06/17] Updated libraries --- .eslintrc.json | 5 +- .vscode/extensions.json | 3 +- README.md | 1 + flask_app.py | 2 +- global-scoreboard/package-lock.json | 364 +++++++++++------ global-scoreboard/package.json | 20 +- tournament-scheduler/package-lock.json | 385 +++++++++++------- tournament-scheduler/package.json | 22 +- tournament-scheduler/src/App.tsx | 23 +- .../ScheduleWizard/TimeSlotRow.tsx | 13 +- .../src/ScheduleViewer/ScheduleViewer.tsx | 2 +- 11 files changed, 550 insertions(+), 290 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index 400d3706..a786b829 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -104,7 +104,7 @@ "unicorn/no-keyword-prefix": [ "error", { - "blacklist": [ + "disallowedPrefixes": [ "class", "for", "of" @@ -130,7 +130,7 @@ { "checkDefaultAndNamespaceImports": false, "checkShorthandImports": false, - "whitelist": { + "allowList": { "fn": true, "args": true, // environment config @@ -353,6 +353,7 @@ // Comparison "a", "b", + "x", // Date formats "dd", "mm", diff --git a/.vscode/extensions.json b/.vscode/extensions.json index cde5c26c..797d284f 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -2,7 +2,7 @@ "recommendations": [ "dbaeumer.vscode-eslint", "ms-vscode.vscode-typescript-next", - "ms-pyright.pyright", + "ms-python.vscode-pylance", "ms-python.python", "sonarsource.sonarlint-vscode", "davidanson.vscode-markdownlint", @@ -11,6 +11,7 @@ "hookyqr.minify" ], "unwantedRecommendations": [ + "ms-pyright.pyright", "esbenp.prettier-vscode" ] } diff --git a/README.md b/README.md index dd66ab81..558fcf91 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ # speedrun.com global scoreboard Webapp + The webapp version of an unofficial speedrun.com global scoreboard for competitive speedrunning [![Renovate](https://img.shields.io/badge/renovate-enabled-brightgreen.svg)](https://renovatebot.com) diff --git a/flask_app.py b/flask_app.py index 2697db7e..d9782a7d 100644 --- a/flask_app.py +++ b/flask_app.py @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/python3.7 # -*- coding: utf-8 -*- ########################################################################## diff --git a/global-scoreboard/package-lock.json b/global-scoreboard/package-lock.json index 48c3560a..28632b2d 100644 --- a/global-scoreboard/package-lock.json +++ b/global-scoreboard/package-lock.json @@ -48,20 +48,20 @@ } }, "@babel/eslint-parser": { - "version": "7.13.14", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.13.14.tgz", - "integrity": "sha512-I0HweR36D73Ibn/FfrRDMKlMqJHFwidIUgYdMpH+aXYuQC+waq59YaJ6t9e9N36axJ82v1jR041wwqDrDXEwRA==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.14.3.tgz", + "integrity": "sha512-IfJXKEVRV/Gisvgmih/+05gkBzzg4Dy0gcxkZ84iFiLK8+O+fI1HLnGJv3UrUMPpsMmmThNa69v+UnF80XP+kA==", "dev": true, "requires": { "eslint-scope": "^5.1.0", - "eslint-visitor-keys": "^1.3.0", + "eslint-visitor-keys": "^2.1.0", "semver": "^6.3.0" }, "dependencies": { "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==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true }, "semver": { @@ -1996,9 +1996,9 @@ } }, "@popperjs/core": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.9.1.tgz", - "integrity": "sha512-DvJbbn3dUgMxDnJLH+RZQPnXak1h4ZVYQ7CWiFWjQwBFkVajT4rfw2PdpHLTSTwxrYfnoEXkuBiwkDm6tPMQeA==" + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.9.2.tgz", + "integrity": "sha512-VZMYa7+fXHdwIq1TDhSXoVmSPEGM/aa+6Aiq3nVVJ9bXr24zScr+NlKFKC3iPljA7ho/GAZr+d2jOf5GIRC30Q==" }, "@restart/context": { "version": "2.1.4", @@ -2229,9 +2229,12 @@ } }, "@types/classnames": { - "version": "2.2.11", - "resolved": "https://registry.npmjs.org/@types/classnames/-/classnames-2.2.11.tgz", - "integrity": "sha512-2koNhpWm3DgWRp5tpkiJ8JGc1xTn2q0l+jUNUE7oMKXUf5NpI9AIdC4kbjGNFBdHtcxBD18LAksoudAVhFKCjw==" + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@types/classnames/-/classnames-2.3.1.tgz", + "integrity": "sha512-zeOWb0JGBoVmlQoznvqXbE0tEC/HONsnoUNH19Hc96NFsTAwTXbTqb8FMYkru1F/iqp7a18Ws3nWJvtA1sHD1A==", + "requires": { + "classnames": "*" + } }, "@types/eslint": { "version": "7.2.7", @@ -2296,9 +2299,9 @@ } }, "@types/jest": { - "version": "26.0.21", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.21.tgz", - "integrity": "sha512-ab9TyM/69yg7eew9eOwKMUmvIZAKEGZYlq/dhe5/0IMUd/QLJv5ldRMdddSn+u22N13FP3s5jYyktxuBwY0kDA==", + "version": "26.0.23", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.23.tgz", + "integrity": "sha512-ZHLmWMJ9jJ9PTiT58juykZpL7KjwJywFN3Rr2pTSkyQfydf/rk22yS7W8p5DaVUMQ2BQC7oYiU3FjbTM/mYrOA==", "dev": true, "requires": { "jest-diff": "^26.0.0", @@ -2321,9 +2324,9 @@ "integrity": "sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==" }, "@types/node": { - "version": "13.13.47", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.47.tgz", - "integrity": "sha512-R6851wTjN1YJza8ZIeX6puNBSi/ZULHVh4WVleA7q256l+cP2EtXnKbO455fTs2ytQk3dL9qkU+Wh8l/uROdKg==" + "version": "13.13.52", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.52.tgz", + "integrity": "sha512-s3nugnZumCC//n4moGGe6tkNMyYEdaDBitVjwPxXmR5lnMG5dHePinH2EdxkG3Rh1ghFHHixAG4NJhpJW1rthQ==" }, "@types/normalize-package-data": { "version": "2.4.0", @@ -2351,9 +2354,9 @@ "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==" }, "@types/react": { - "version": "17.0.3", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.3.tgz", - "integrity": "sha512-wYOUxIgs2HZZ0ACNiIayItyluADNbONl7kt8lkLjVK8IitMH5QMyAh75Fwhmo37r1m7L2JaFj03sIfxBVDvRAg==", + "version": "17.0.6", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.6.tgz", + "integrity": "sha512-u/TtPoF/hrvb63LdukET6ncaplYsvCvmkceasx8oG84/ZCsoLxz9Z/raPBP4lTAiWW1Jb889Y9svHmv8R26dWw==", "requires": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -2361,9 +2364,9 @@ } }, "@types/react-dom": { - "version": "17.0.3", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.3.tgz", - "integrity": "sha512-4NnJbCeWE+8YBzupn/YrJxZ8VnjcJq5iR1laqQ1vkpQgBiA7bwk0Rp24fxsdNinzJY2U+HHS4dJJDPdoMjdJ7w==", + "version": "17.0.5", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.5.tgz", + "integrity": "sha512-ikqukEhH4H9gr4iJCmQVNzTB307kROe3XFfHAOTxOXPOw7lAoEXnM5KWTkzeANGL5Ce6ABfiMl/zJBYNi7ObmQ==", "dev": true, "requires": { "@types/react": "*" @@ -2476,18 +2479,70 @@ "integrity": "sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==" }, "@typescript-eslint/eslint-plugin": { - "version": "4.19.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.19.0.tgz", - "integrity": "sha512-CRQNQ0mC2Pa7VLwKFbrGVTArfdVDdefS+gTw0oC98vSI98IX5A8EVH4BzJ2FOB0YlCmm8Im36Elad/Jgtvveaw==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.24.0.tgz", + "integrity": "sha512-qbCgkPM7DWTsYQGjx9RTuQGswi+bEt0isqDBeo+CKV0953zqI0Tp7CZ7Fi9ipgFA6mcQqF4NOVNwS/f2r6xShw==", "requires": { - "@typescript-eslint/experimental-utils": "4.19.0", - "@typescript-eslint/scope-manager": "4.19.0", + "@typescript-eslint/experimental-utils": "4.24.0", + "@typescript-eslint/scope-manager": "4.24.0", "debug": "^4.1.1", "functional-red-black-tree": "^1.0.1", "lodash": "^4.17.15", "regexpp": "^3.0.0", "semver": "^7.3.2", "tsutils": "^3.17.1" + }, + "dependencies": { + "@typescript-eslint/experimental-utils": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.24.0.tgz", + "integrity": "sha512-IwTT2VNDKH1h8RZseMH4CcYBz6lTvRoOLDuuqNZZoThvfHEhOiZPQCow+5El3PtyxJ1iDr6UXZwYtE3yZQjhcw==", + "requires": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/scope-manager": "4.24.0", + "@typescript-eslint/types": "4.24.0", + "@typescript-eslint/typescript-estree": "4.24.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" + } + }, + "@typescript-eslint/scope-manager": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.24.0.tgz", + "integrity": "sha512-9+WYJGDnuC9VtYLqBhcSuM7du75fyCS/ypC8c5g7Sdw7pGL4NDTbeH38eJPfzIydCHZDoOgjloxSAA3+4l/zsA==", + "requires": { + "@typescript-eslint/types": "4.24.0", + "@typescript-eslint/visitor-keys": "4.24.0" + } + }, + "@typescript-eslint/types": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.24.0.tgz", + "integrity": "sha512-tkZUBgDQKdvfs8L47LaqxojKDE+mIUmOzdz7r+u+U54l3GDkTpEbQ1Jp3cNqqAU9vMUCBA1fitsIhm7yN0vx9Q==" + }, + "@typescript-eslint/typescript-estree": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.24.0.tgz", + "integrity": "sha512-kBDitL/by/HK7g8CYLT7aKpAwlR8doshfWz8d71j97n5kUa5caHWvY0RvEUEanL/EqBJoANev8Xc/mQ6LLwXGA==", + "requires": { + "@typescript-eslint/types": "4.24.0", + "@typescript-eslint/visitor-keys": "4.24.0", + "debug": "^4.1.1", + "globby": "^11.0.1", + "is-glob": "^4.0.1", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.24.0.tgz", + "integrity": "sha512-4ox1sjmGHIxjEDBnMCtWFFhErXtKA1Ec0sBpuz0fqf3P+g3JFGyTxxbF06byw0FRsPnnbq44cKivH7Ks1/0s6g==", + "requires": { + "@typescript-eslint/types": "4.24.0", + "eslint-visitor-keys": "^2.0.0" + } + } } }, "@typescript-eslint/experimental-utils": { @@ -2504,14 +2559,53 @@ } }, "@typescript-eslint/parser": { - "version": "4.19.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.19.0.tgz", - "integrity": "sha512-/uabZjo2ZZhm66rdAu21HA8nQebl3lAIDcybUoOxoI7VbZBYavLIwtOOmykKCJy+Xq6Vw6ugkiwn8Js7D6wieA==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.24.0.tgz", + "integrity": "sha512-dj1ZIh/4QKeECLb2f/QjRwMmDArcwc2WorWPRlB8UNTZlY1KpTVsbX7e3ZZdphfRw29aTFUSNuGB8w9X5sS97w==", "requires": { - "@typescript-eslint/scope-manager": "4.19.0", - "@typescript-eslint/types": "4.19.0", - "@typescript-eslint/typescript-estree": "4.19.0", + "@typescript-eslint/scope-manager": "4.24.0", + "@typescript-eslint/types": "4.24.0", + "@typescript-eslint/typescript-estree": "4.24.0", "debug": "^4.1.1" + }, + "dependencies": { + "@typescript-eslint/scope-manager": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.24.0.tgz", + "integrity": "sha512-9+WYJGDnuC9VtYLqBhcSuM7du75fyCS/ypC8c5g7Sdw7pGL4NDTbeH38eJPfzIydCHZDoOgjloxSAA3+4l/zsA==", + "requires": { + "@typescript-eslint/types": "4.24.0", + "@typescript-eslint/visitor-keys": "4.24.0" + } + }, + "@typescript-eslint/types": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.24.0.tgz", + "integrity": "sha512-tkZUBgDQKdvfs8L47LaqxojKDE+mIUmOzdz7r+u+U54l3GDkTpEbQ1Jp3cNqqAU9vMUCBA1fitsIhm7yN0vx9Q==" + }, + "@typescript-eslint/typescript-estree": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.24.0.tgz", + "integrity": "sha512-kBDitL/by/HK7g8CYLT7aKpAwlR8doshfWz8d71j97n5kUa5caHWvY0RvEUEanL/EqBJoANev8Xc/mQ6LLwXGA==", + "requires": { + "@typescript-eslint/types": "4.24.0", + "@typescript-eslint/visitor-keys": "4.24.0", + "debug": "^4.1.1", + "globby": "^11.0.1", + "is-glob": "^4.0.1", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.24.0.tgz", + "integrity": "sha512-4ox1sjmGHIxjEDBnMCtWFFhErXtKA1Ec0sBpuz0fqf3P+g3JFGyTxxbF06byw0FRsPnnbq44cKivH7Ks1/0s6g==", + "requires": { + "@typescript-eslint/types": "4.24.0", + "eslint-visitor-keys": "^2.0.0" + } + } } }, "@typescript-eslint/scope-manager": { @@ -5985,9 +6079,9 @@ "dev": true }, "eslint-plugin-react": { - "version": "7.23.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.23.1.tgz", - "integrity": "sha512-MvFGhZjI8Z4HusajmSw0ougGrq3Gs4vT/0WgwksZgf5RrLrRa2oYAw56okU4tZJl8+j7IYNuTM+2RnFEuTSdRQ==", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.23.2.tgz", + "integrity": "sha512-AfjgFQB+nYszudkxRkTFu0UR1zEQig0ArVMPloKhxwlwkzaw/fBiH0QWcBBhZONlXqQC51+nfqFrkn4EzHcGBw==", "requires": { "array-includes": "^3.1.3", "array.prototype.flatmap": "^1.2.4", @@ -6078,12 +6172,19 @@ "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==" }, "is-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", - "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", + "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", "requires": { "call-bind": "^1.0.2", - "has-symbols": "^1.0.1" + "has-symbols": "^1.0.2" + }, + "dependencies": { + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" + } } }, "object.values": { @@ -6209,9 +6310,9 @@ } }, "eslint-plugin-unicorn": { - "version": "32.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-32.0.0.tgz", - "integrity": "sha512-VYE/XvZvdcY0RvOKGxsrVVWo8DaI/tGVYuhKzSd6Uuy69Ydc8zX+roZ/H9PgyykM4nuj8JDoOHSwVk9a4OYbCQ==", + "version": "32.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-32.0.1.tgz", + "integrity": "sha512-LaZ9utnXtOJjnoDkpm+nQsONUUmyRR0WD6PGROSdQRRW3LRmgK/ZP8wxjW+Ai+2uolKTtuJzLx2mvbIeIoLqpg==", "dev": true, "requires": { "ci-info": "^3.1.1", @@ -6330,20 +6431,20 @@ "dev": true }, "@babel/core": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.0.tgz", - "integrity": "sha512-8YqpRig5NmIHlMLw09zMlPTvUVMILjqCOtVgu+TVNWEBvy9b5I3RRyhqnrV4hjgEK7n8P9OqvkWJAFmEL6Wwfw==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.3.tgz", + "integrity": "sha512-jB5AmTKOCSJIZ72sd78ECEhuPiDMKlQdDI/4QRI6lzYATx5SSogS1oQA2AoPecRCknm30gHi2l+QVvNUu3wZAg==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.0", + "@babel/generator": "^7.14.3", "@babel/helper-compilation-targets": "^7.13.16", - "@babel/helper-module-transforms": "^7.14.0", + "@babel/helper-module-transforms": "^7.14.2", "@babel/helpers": "^7.14.0", - "@babel/parser": "^7.14.0", + "@babel/parser": "^7.14.3", "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.14.0", + "@babel/traverse": "^7.14.2", + "@babel/types": "^7.14.2", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -6353,12 +6454,12 @@ } }, "@babel/generator": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.1.tgz", - "integrity": "sha512-TMGhsXMXCP/O1WtQmZjpEYDhCYC9vFhayWZPJSZCGkPJgUqX0rF0wwtrYvnzVxIjcF80tkUertXVk5cwqi5cAQ==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.3.tgz", + "integrity": "sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA==", "dev": true, "requires": { - "@babel/types": "^7.14.1", + "@babel/types": "^7.14.2", "jsesc": "^2.5.1", "source-map": "^0.5.0" } @@ -6375,6 +6476,17 @@ "semver": "^6.3.0" } }, + "@babel/helper-function-name": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz", + "integrity": "sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.14.2" + } + }, "@babel/helper-module-imports": { "version": "7.13.12", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", @@ -6385,9 +6497,9 @@ } }, "@babel/helper-module-transforms": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.0.tgz", - "integrity": "sha512-L40t9bxIuGOfpIGA3HNkJhU9qYrf4y5A5LUSw7rGMSn+pcG8dfJ0g6Zval6YJGd2nEjI7oP00fRdnhLKndx6bw==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.2.tgz", + "integrity": "sha512-OznJUda/soKXv0XhpvzGWDnml4Qnwp16GN+D/kZIdLsWoHj05kyu8Rm5kXmMef+rVJZ0+4pSGLkeixdqNUATDA==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.13.12", @@ -6396,8 +6508,8 @@ "@babel/helper-split-export-declaration": "^7.12.13", "@babel/helper-validator-identifier": "^7.14.0", "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.14.0" + "@babel/traverse": "^7.14.2", + "@babel/types": "^7.14.2" } }, "@babel/helper-simple-access": { @@ -6438,31 +6550,31 @@ } }, "@babel/parser": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.1.tgz", - "integrity": "sha512-muUGEKu8E/ftMTPlNp+mc6zL3E9zKWmF5sDHZ5MSsoTP9Wyz64AhEf9kD08xYJ7w6Hdcu8H550ircnPyWSIF0Q==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.3.tgz", + "integrity": "sha512-7MpZDIfI7sUC5zWo2+foJ50CSI5lcqDehZ0lVgIhSi4bFEk94fLAKlF3Q0nzSQQ+ca0lm+O6G9ztKVBeu8PMRQ==", "dev": true }, "@babel/traverse": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.0.tgz", - "integrity": "sha512-dZ/a371EE5XNhTHomvtuLTUyx6UEoJmYX+DT5zBCQN3McHemsuIaKKYqsc/fs26BEkHs/lBZy0J571LP5z9kQA==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz", + "integrity": "sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.0", - "@babel/helper-function-name": "^7.12.13", + "@babel/generator": "^7.14.2", + "@babel/helper-function-name": "^7.14.2", "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.14.0", - "@babel/types": "^7.14.0", + "@babel/parser": "^7.14.2", + "@babel/types": "^7.14.2", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.1.tgz", - "integrity": "sha512-S13Qe85fzLs3gYRUnrpyeIrBJIMYv33qSTg1qoBwiG6nPKwUWAD9odSzWhEedpwOIzSEI6gbdQIWEMiCI42iBA==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.2.tgz", + "integrity": "sha512-SdjAG/3DikRHpUOjxZgnkbR11xUlyDMUFJdvnIgZEE16mqmY0BINMmc4//JMJglEmn6i7sq6p+mGrFWyZ98EEw==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.14.0", @@ -7635,9 +7747,9 @@ "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==" }, "hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==" + "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==" }, "hpack.js": { "version": "2.1.6", @@ -10275,9 +10387,9 @@ } }, "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "lodash-es": { "version": "4.17.21", @@ -10737,11 +10849,6 @@ "integrity": "sha512-0ZIR9PasPxGXmRsEF8jsDzndzHDj7tIav+JUmvIFB/WHswliFnquxECT/De7GR4yg99ky/NlRKJT82G1y271bw==", "dev": true }, - "nanoid": { - "version": "3.1.22", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.22.tgz", - "integrity": "sha512-/2ZUaJX2ANuLtTvqTlgqBQNJoQO398KyJgZloL0PZkC0dpysjncRUPsFe3DUPzz/y3h+u7C46np8RMuvF3jsSQ==" - }, "nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", @@ -11144,12 +11251,12 @@ "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==" }, "is-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", - "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", + "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", "requires": { "call-bind": "^1.0.2", - "has-symbols": "^1.0.1" + "has-symbols": "^1.0.2" } }, "string.prototype.trimend": { @@ -12667,13 +12774,20 @@ "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==" }, "postcss": { - "version": "8.2.8", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.8.tgz", - "integrity": "sha512-1F0Xb2T21xET7oQV9eKuctbM9S7BC0fetoHCc4H13z0PT6haiRLP4T0ZY4XWh7iLP0usgqykT6p9B2RtOf4FPw==", + "version": "8.2.15", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.15.tgz", + "integrity": "sha512-2zO3b26eJD/8rb106Qu2o7Qgg52ND5HPjcyQiK2B98O388h43A448LCslC0dI2P97wCAQRJsFvwTRcXxTKds+Q==", "requires": { "colorette": "^1.2.2", - "nanoid": "^3.1.20", + "nanoid": "^3.1.23", "source-map": "^0.6.1" + }, + "dependencies": { + "nanoid": { + "version": "3.1.23", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", + "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==" + } } }, "source-map": { @@ -13059,9 +13173,9 @@ } }, "react-bootstrap": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-1.5.2.tgz", - "integrity": "sha512-mGKPY5+lLd7Vtkx2VFivoRkPT4xAHazuFfIhJLTEgHlDfIUSePn7qrmpZe5gXH9zvHV0RsBaQ9cLfXjxnZrOpA==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-1.6.0.tgz", + "integrity": "sha512-PaeOGeRC2+JH9Uf1PukJgXcIpfGlrKKHEBZIArymjenYzSJ/RhO2UdNX+e7nalsCFFZLRRgQ0/FKkscW2LmmRg==", "requires": { "@babel/runtime": "^7.13.8", "@restart/context": "^2.1.4", @@ -13084,9 +13198,9 @@ }, "dependencies": { "@babel/runtime": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.10.tgz", - "integrity": "sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.0.tgz", + "integrity": "sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA==", "requires": { "regenerator-runtime": "^0.13.4" } @@ -13239,18 +13353,28 @@ "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" }, "react-overlays": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/react-overlays/-/react-overlays-5.0.0.tgz", - "integrity": "sha512-TKbqfAv23TFtCJ2lzISdx76p97G/DP8Rp4TOFdqM9n8GTruVYgE3jX7Zgb8+w7YJ18slTVcDTQ1/tFzdCqjVhA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/react-overlays/-/react-overlays-5.0.1.tgz", + "integrity": "sha512-plwUJieTBbLSrgvQ4OkkbTD/deXgxiJdNuKzo6n1RWE3OVnQIU5hffCGS/nvIuu6LpXFs2majbzaXY8rcUVdWA==", "requires": { - "@babel/runtime": "^7.12.1", - "@popperjs/core": "^2.5.3", - "@restart/hooks": "^0.3.25", + "@babel/runtime": "^7.13.8", + "@popperjs/core": "^2.8.6", + "@restart/hooks": "^0.3.26", "@types/warning": "^3.0.0", "dom-helpers": "^5.2.0", "prop-types": "^15.7.2", - "uncontrollable": "^7.0.0", + "uncontrollable": "^7.2.1", "warning": "^4.0.3" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.0.tgz", + "integrity": "sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + } } }, "react-picky": { @@ -14973,12 +15097,19 @@ "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==" }, "is-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", - "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", + "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", "requires": { "call-bind": "^1.0.2", - "has-symbols": "^1.0.1" + "has-symbols": "^1.0.2" + }, + "dependencies": { + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" + } } }, "regexp.prototype.flags": { @@ -15652,9 +15783,9 @@ } }, "typescript": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.3.tgz", - "integrity": "sha512-qOcYwxaByStAWrBf4x0fibwZvMRG+r4cQoTjbPtUlrWjBHbmCAww1i448U0GJ+3cNNEtebDteo/cHOR3xJ4wEw==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.4.tgz", + "integrity": "sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg==", "dev": true }, "unbox-primitive": { @@ -16574,8 +16705,7 @@ }, "ssri": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "resolved": "", "requires": { "figgy-pudding": "^3.5.1" } diff --git a/global-scoreboard/package.json b/global-scoreboard/package.json index b0722bec..cce3f6e7 100644 --- a/global-scoreboard/package.json +++ b/global-scoreboard/package.json @@ -24,7 +24,7 @@ "bootstrap": "^4.6.0", "http-status-codes": "^2.1.4", "react": "^17.0.2", - "react-bootstrap": "^1.5.2", + "react-bootstrap": "^1.6.0", "react-bootstrap-table-next": "file:dependencies/react-bootstrap-table-next", "react-bootstrap-table2-filter": "^1.3.3", "react-bootstrap-table2-paginator": "^2.1.2", @@ -34,22 +34,22 @@ "react-scripts": "4.0.3" }, "devDependencies": { - "@types/jest": "^26.0.21", - "@types/node": "^13.13.47", - "@types/react": "^17.0.3", - "@types/react-dom": "^17.0.3", - "@typescript-eslint/eslint-plugin": "^4.19.0", - "@typescript-eslint/parser": "^4.19.0", + "@types/jest": "^26.0.23", + "@types/node": "^13.13.52", + "@types/react": "^17.0.6", + "@types/react-dom": "^17.0.5", + "@typescript-eslint/eslint-plugin": "^4.24.0", + "@typescript-eslint/parser": "^4.24.0", "eslint-plugin-extra-rules": "0.0.0-development", "eslint-plugin-jsx-a11y": "^6.4.1", "eslint-plugin-prefer-arrow": "^1.2.3", - "eslint-plugin-react": "^7.23.1", + "eslint-plugin-react": "^7.23.2", "eslint-plugin-react-hooks": "^4.2.0", "eslint-plugin-simple-import-sort": "^7.0.0", "eslint-plugin-sonarjs": "^0.7.0", "eslint-plugin-switch-case": "^1.1.2", - "eslint-plugin-unicorn": "^32.0.0", - "typescript": "^4.2.3" + "eslint-plugin-unicorn": "^32.0.1", + "typescript": "^4.2.4" }, "eslintConfig": { "extends": [ diff --git a/tournament-scheduler/package-lock.json b/tournament-scheduler/package-lock.json index 642244a4..39c92b61 100644 --- a/tournament-scheduler/package-lock.json +++ b/tournament-scheduler/package-lock.json @@ -48,20 +48,20 @@ } }, "@babel/eslint-parser": { - "version": "7.13.14", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.13.14.tgz", - "integrity": "sha512-I0HweR36D73Ibn/FfrRDMKlMqJHFwidIUgYdMpH+aXYuQC+waq59YaJ6t9e9N36axJ82v1jR041wwqDrDXEwRA==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.14.3.tgz", + "integrity": "sha512-IfJXKEVRV/Gisvgmih/+05gkBzzg4Dy0gcxkZ84iFiLK8+O+fI1HLnGJv3UrUMPpsMmmThNa69v+UnF80XP+kA==", "dev": true, "requires": { "eslint-scope": "^5.1.0", - "eslint-visitor-keys": "^1.3.0", + "eslint-visitor-keys": "^2.1.0", "semver": "^6.3.0" }, "dependencies": { "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==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true }, "semver": { @@ -1918,14 +1918,14 @@ } }, "@material-ui/core": { - "version": "4.11.3", - "resolved": "https://registry.npmjs.org/@material-ui/core/-/core-4.11.3.tgz", - "integrity": "sha512-Adt40rGW6Uds+cAyk3pVgcErpzU/qxc7KBR94jFHBYretU4AtWZltYcNsbeMn9tXL86jjVL1kuGcIHsgLgFGRw==", + "version": "4.11.4", + "resolved": "https://registry.npmjs.org/@material-ui/core/-/core-4.11.4.tgz", + "integrity": "sha512-oqb+lJ2Dl9HXI9orc6/aN8ZIAMkeThufA5iZELf2LQeBn2NtjVilF5D2w7e9RpntAzDb4jK5DsVhkfOvFY/8fg==", "requires": { "@babel/runtime": "^7.4.4", - "@material-ui/styles": "^4.11.3", + "@material-ui/styles": "^4.11.4", "@material-ui/system": "^4.11.3", - "@material-ui/types": "^5.1.0", + "@material-ui/types": "5.1.0", "@material-ui/utils": "^4.11.2", "@types/react-transition-group": "^4.2.0", "clsx": "^1.0.4", @@ -1958,13 +1958,13 @@ } }, "@material-ui/styles": { - "version": "4.11.3", - "resolved": "https://registry.npmjs.org/@material-ui/styles/-/styles-4.11.3.tgz", - "integrity": "sha512-HzVzCG+PpgUGMUYEJ2rTEmQYeonGh41BYfILNFb/1ueqma+p1meSdu4RX6NjxYBMhf7k+jgfHFTTz+L1SXL/Zg==", + "version": "4.11.4", + "resolved": "https://registry.npmjs.org/@material-ui/styles/-/styles-4.11.4.tgz", + "integrity": "sha512-KNTIZcnj/zprG5LW0Sao7zw+yG3O35pviHzejMdcSGCdWbiO8qzRgOYL8JAxAsWBKOKYwVZxXtHWaB5T2Kvxew==", "requires": { "@babel/runtime": "^7.4.4", "@emotion/hash": "^0.8.0", - "@material-ui/types": "^5.1.0", + "@material-ui/types": "5.1.0", "@material-ui/utils": "^4.11.2", "clsx": "^1.0.4", "csstype": "^2.5.2", @@ -2337,9 +2337,9 @@ } }, "@types/jest": { - "version": "26.0.21", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.21.tgz", - "integrity": "sha512-ab9TyM/69yg7eew9eOwKMUmvIZAKEGZYlq/dhe5/0IMUd/QLJv5ldRMdddSn+u22N13FP3s5jYyktxuBwY0kDA==", + "version": "26.0.23", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.23.tgz", + "integrity": "sha512-ZHLmWMJ9jJ9PTiT58juykZpL7KjwJywFN3Rr2pTSkyQfydf/rk22yS7W8p5DaVUMQ2BQC7oYiU3FjbTM/mYrOA==", "dev": true, "requires": { "jest-diff": "^26.0.0", @@ -2362,9 +2362,9 @@ "integrity": "sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==" }, "@types/node": { - "version": "13.13.47", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.47.tgz", - "integrity": "sha512-R6851wTjN1YJza8ZIeX6puNBSi/ZULHVh4WVleA7q256l+cP2EtXnKbO455fTs2ytQk3dL9qkU+Wh8l/uROdKg==" + "version": "13.13.52", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.52.tgz", + "integrity": "sha512-s3nugnZumCC//n4moGGe6tkNMyYEdaDBitVjwPxXmR5lnMG5dHePinH2EdxkG3Rh1ghFHHixAG4NJhpJW1rthQ==" }, "@types/normalize-package-data": { "version": "2.4.0", @@ -2392,9 +2392,9 @@ "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==" }, "@types/react": { - "version": "17.0.3", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.3.tgz", - "integrity": "sha512-wYOUxIgs2HZZ0ACNiIayItyluADNbONl7kt8lkLjVK8IitMH5QMyAh75Fwhmo37r1m7L2JaFj03sIfxBVDvRAg==", + "version": "17.0.6", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.6.tgz", + "integrity": "sha512-u/TtPoF/hrvb63LdukET6ncaplYsvCvmkceasx8oG84/ZCsoLxz9Z/raPBP4lTAiWW1Jb889Y9svHmv8R26dWw==", "requires": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -2402,9 +2402,9 @@ }, "dependencies": { "csstype": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.7.tgz", - "integrity": "sha512-KxnUB0ZMlnUWCsx2Z8MUsr6qV6ja1w9ArPErJaJaF8a5SOWoHLIszeCTKGRGRgtLgYrs1E8CHkNSP1VZTTPc9g==" + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz", + "integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==" } } }, @@ -2427,27 +2427,27 @@ } }, "@types/react-dom": { - "version": "17.0.3", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.3.tgz", - "integrity": "sha512-4NnJbCeWE+8YBzupn/YrJxZ8VnjcJq5iR1laqQ1vkpQgBiA7bwk0Rp24fxsdNinzJY2U+HHS4dJJDPdoMjdJ7w==", + "version": "17.0.5", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.5.tgz", + "integrity": "sha512-ikqukEhH4H9gr4iJCmQVNzTB307kROe3XFfHAOTxOXPOw7lAoEXnM5KWTkzeANGL5Ce6ABfiMl/zJBYNi7ObmQ==", "dev": true, "requires": { "@types/react": "*" } }, "@types/react-text-mask": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/@types/react-text-mask/-/react-text-mask-5.4.6.tgz", - "integrity": "sha512-0KkER9oXZY/v1x8aoMTHwANlWnKT5tnmV7Zz+g81gBvcHRtcIHotcpY4KgWRwx0T5JMcsYmEh7wGOz0lwdONew==", + "version": "5.4.7", + "resolved": "https://registry.npmjs.org/@types/react-text-mask/-/react-text-mask-5.4.7.tgz", + "integrity": "sha512-3fGkrjipQF/8NfZ1txWBkAok8X3CSZoai+Mqnu0zeVrCgHjTUTllZHyi/jGVs+mX/YE/VUbRr+4Rt66c91FaQQ==", "dev": true, "requires": { "@types/react": "*" } }, "@types/react-transition-group": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.0.tgz", - "integrity": "sha512-/QfLHGpu+2fQOqQaXh8MG9q03bFENooTb/it4jr5kKaZlDQfWvjqWZg48AwzPVMBHlRuTRAY7hRHCEOXz5kV6w==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.1.tgz", + "integrity": "sha512-vIo69qKKcYoJ8wKCJjwSgCTM+z3chw3g18dkrDfVX665tMH7tmbDxEAnPdey4gTlwZz5QuHGzd+hul0OVZDqqQ==", "requires": { "@types/react": "*" } @@ -2554,18 +2554,70 @@ "integrity": "sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==" }, "@typescript-eslint/eslint-plugin": { - "version": "4.19.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.19.0.tgz", - "integrity": "sha512-CRQNQ0mC2Pa7VLwKFbrGVTArfdVDdefS+gTw0oC98vSI98IX5A8EVH4BzJ2FOB0YlCmm8Im36Elad/Jgtvveaw==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.24.0.tgz", + "integrity": "sha512-qbCgkPM7DWTsYQGjx9RTuQGswi+bEt0isqDBeo+CKV0953zqI0Tp7CZ7Fi9ipgFA6mcQqF4NOVNwS/f2r6xShw==", "requires": { - "@typescript-eslint/experimental-utils": "4.19.0", - "@typescript-eslint/scope-manager": "4.19.0", + "@typescript-eslint/experimental-utils": "4.24.0", + "@typescript-eslint/scope-manager": "4.24.0", "debug": "^4.1.1", "functional-red-black-tree": "^1.0.1", "lodash": "^4.17.15", "regexpp": "^3.0.0", "semver": "^7.3.2", "tsutils": "^3.17.1" + }, + "dependencies": { + "@typescript-eslint/experimental-utils": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.24.0.tgz", + "integrity": "sha512-IwTT2VNDKH1h8RZseMH4CcYBz6lTvRoOLDuuqNZZoThvfHEhOiZPQCow+5El3PtyxJ1iDr6UXZwYtE3yZQjhcw==", + "requires": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/scope-manager": "4.24.0", + "@typescript-eslint/types": "4.24.0", + "@typescript-eslint/typescript-estree": "4.24.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" + } + }, + "@typescript-eslint/scope-manager": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.24.0.tgz", + "integrity": "sha512-9+WYJGDnuC9VtYLqBhcSuM7du75fyCS/ypC8c5g7Sdw7pGL4NDTbeH38eJPfzIydCHZDoOgjloxSAA3+4l/zsA==", + "requires": { + "@typescript-eslint/types": "4.24.0", + "@typescript-eslint/visitor-keys": "4.24.0" + } + }, + "@typescript-eslint/types": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.24.0.tgz", + "integrity": "sha512-tkZUBgDQKdvfs8L47LaqxojKDE+mIUmOzdz7r+u+U54l3GDkTpEbQ1Jp3cNqqAU9vMUCBA1fitsIhm7yN0vx9Q==" + }, + "@typescript-eslint/typescript-estree": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.24.0.tgz", + "integrity": "sha512-kBDitL/by/HK7g8CYLT7aKpAwlR8doshfWz8d71j97n5kUa5caHWvY0RvEUEanL/EqBJoANev8Xc/mQ6LLwXGA==", + "requires": { + "@typescript-eslint/types": "4.24.0", + "@typescript-eslint/visitor-keys": "4.24.0", + "debug": "^4.1.1", + "globby": "^11.0.1", + "is-glob": "^4.0.1", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.24.0.tgz", + "integrity": "sha512-4ox1sjmGHIxjEDBnMCtWFFhErXtKA1Ec0sBpuz0fqf3P+g3JFGyTxxbF06byw0FRsPnnbq44cKivH7Ks1/0s6g==", + "requires": { + "@typescript-eslint/types": "4.24.0", + "eslint-visitor-keys": "^2.0.0" + } + } } }, "@typescript-eslint/experimental-utils": { @@ -2582,14 +2634,53 @@ } }, "@typescript-eslint/parser": { - "version": "4.19.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.19.0.tgz", - "integrity": "sha512-/uabZjo2ZZhm66rdAu21HA8nQebl3lAIDcybUoOxoI7VbZBYavLIwtOOmykKCJy+Xq6Vw6ugkiwn8Js7D6wieA==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.24.0.tgz", + "integrity": "sha512-dj1ZIh/4QKeECLb2f/QjRwMmDArcwc2WorWPRlB8UNTZlY1KpTVsbX7e3ZZdphfRw29aTFUSNuGB8w9X5sS97w==", "requires": { - "@typescript-eslint/scope-manager": "4.19.0", - "@typescript-eslint/types": "4.19.0", - "@typescript-eslint/typescript-estree": "4.19.0", + "@typescript-eslint/scope-manager": "4.24.0", + "@typescript-eslint/types": "4.24.0", + "@typescript-eslint/typescript-estree": "4.24.0", "debug": "^4.1.1" + }, + "dependencies": { + "@typescript-eslint/scope-manager": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.24.0.tgz", + "integrity": "sha512-9+WYJGDnuC9VtYLqBhcSuM7du75fyCS/ypC8c5g7Sdw7pGL4NDTbeH38eJPfzIydCHZDoOgjloxSAA3+4l/zsA==", + "requires": { + "@typescript-eslint/types": "4.24.0", + "@typescript-eslint/visitor-keys": "4.24.0" + } + }, + "@typescript-eslint/types": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.24.0.tgz", + "integrity": "sha512-tkZUBgDQKdvfs8L47LaqxojKDE+mIUmOzdz7r+u+U54l3GDkTpEbQ1Jp3cNqqAU9vMUCBA1fitsIhm7yN0vx9Q==" + }, + "@typescript-eslint/typescript-estree": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.24.0.tgz", + "integrity": "sha512-kBDitL/by/HK7g8CYLT7aKpAwlR8doshfWz8d71j97n5kUa5caHWvY0RvEUEanL/EqBJoANev8Xc/mQ6LLwXGA==", + "requires": { + "@typescript-eslint/types": "4.24.0", + "@typescript-eslint/visitor-keys": "4.24.0", + "debug": "^4.1.1", + "globby": "^11.0.1", + "is-glob": "^4.0.1", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.24.0.tgz", + "integrity": "sha512-4ox1sjmGHIxjEDBnMCtWFFhErXtKA1Ec0sBpuz0fqf3P+g3JFGyTxxbF06byw0FRsPnnbq44cKivH7Ks1/0s6g==", + "requires": { + "@typescript-eslint/types": "4.24.0", + "eslint-visitor-keys": "^2.0.0" + } + } } }, "@typescript-eslint/scope-manager": { @@ -4926,9 +5017,9 @@ } }, "csstype": { - "version": "2.6.14", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.14.tgz", - "integrity": "sha512-2mSc+VEpGPblzAxyeR+vZhJKgYg0Og0nnRi7pmRXFYYxSfnOnW8A5wwQb4n4cE2nIOzqKOAzLCaEX6aBmNEv8A==" + "version": "2.6.17", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.17.tgz", + "integrity": "sha512-u1wmTI1jJGzCJzWndZo8mk4wnPTZd1eOIYTYvuEyOQGfmDl3TrabCCfKnOC86FZwW/9djqTl933UF/cS425i9A==" }, "cyclist": { "version": "1.0.1", @@ -6076,9 +6167,9 @@ "dev": true }, "eslint-plugin-react": { - "version": "7.23.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.23.1.tgz", - "integrity": "sha512-MvFGhZjI8Z4HusajmSw0ougGrq3Gs4vT/0WgwksZgf5RrLrRa2oYAw56okU4tZJl8+j7IYNuTM+2RnFEuTSdRQ==", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.23.2.tgz", + "integrity": "sha512-AfjgFQB+nYszudkxRkTFu0UR1zEQig0ArVMPloKhxwlwkzaw/fBiH0QWcBBhZONlXqQC51+nfqFrkn4EzHcGBw==", "requires": { "array-includes": "^3.1.3", "array.prototype.flatmap": "^1.2.4", @@ -6229,9 +6320,9 @@ } }, "eslint-plugin-unicorn": { - "version": "32.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-32.0.0.tgz", - "integrity": "sha512-VYE/XvZvdcY0RvOKGxsrVVWo8DaI/tGVYuhKzSd6Uuy69Ydc8zX+roZ/H9PgyykM4nuj8JDoOHSwVk9a4OYbCQ==", + "version": "32.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-32.0.1.tgz", + "integrity": "sha512-LaZ9utnXtOJjnoDkpm+nQsONUUmyRR0WD6PGROSdQRRW3LRmgK/ZP8wxjW+Ai+2uolKTtuJzLx2mvbIeIoLqpg==", "dev": true, "requires": { "ci-info": "^3.1.1", @@ -6350,20 +6441,20 @@ "dev": true }, "@babel/core": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.0.tgz", - "integrity": "sha512-8YqpRig5NmIHlMLw09zMlPTvUVMILjqCOtVgu+TVNWEBvy9b5I3RRyhqnrV4hjgEK7n8P9OqvkWJAFmEL6Wwfw==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.3.tgz", + "integrity": "sha512-jB5AmTKOCSJIZ72sd78ECEhuPiDMKlQdDI/4QRI6lzYATx5SSogS1oQA2AoPecRCknm30gHi2l+QVvNUu3wZAg==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.0", + "@babel/generator": "^7.14.3", "@babel/helper-compilation-targets": "^7.13.16", - "@babel/helper-module-transforms": "^7.14.0", + "@babel/helper-module-transforms": "^7.14.2", "@babel/helpers": "^7.14.0", - "@babel/parser": "^7.14.0", + "@babel/parser": "^7.14.3", "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.14.0", + "@babel/traverse": "^7.14.2", + "@babel/types": "^7.14.2", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -6373,12 +6464,12 @@ } }, "@babel/generator": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.1.tgz", - "integrity": "sha512-TMGhsXMXCP/O1WtQmZjpEYDhCYC9vFhayWZPJSZCGkPJgUqX0rF0wwtrYvnzVxIjcF80tkUertXVk5cwqi5cAQ==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.3.tgz", + "integrity": "sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA==", "dev": true, "requires": { - "@babel/types": "^7.14.1", + "@babel/types": "^7.14.2", "jsesc": "^2.5.1", "source-map": "^0.5.0" } @@ -6395,6 +6486,17 @@ "semver": "^6.3.0" } }, + "@babel/helper-function-name": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz", + "integrity": "sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.14.2" + } + }, "@babel/helper-module-imports": { "version": "7.13.12", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", @@ -6405,9 +6507,9 @@ } }, "@babel/helper-module-transforms": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.0.tgz", - "integrity": "sha512-L40t9bxIuGOfpIGA3HNkJhU9qYrf4y5A5LUSw7rGMSn+pcG8dfJ0g6Zval6YJGd2nEjI7oP00fRdnhLKndx6bw==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.2.tgz", + "integrity": "sha512-OznJUda/soKXv0XhpvzGWDnml4Qnwp16GN+D/kZIdLsWoHj05kyu8Rm5kXmMef+rVJZ0+4pSGLkeixdqNUATDA==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.13.12", @@ -6416,8 +6518,8 @@ "@babel/helper-split-export-declaration": "^7.12.13", "@babel/helper-validator-identifier": "^7.14.0", "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.14.0" + "@babel/traverse": "^7.14.2", + "@babel/types": "^7.14.2" } }, "@babel/helper-simple-access": { @@ -6458,31 +6560,31 @@ } }, "@babel/parser": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.1.tgz", - "integrity": "sha512-muUGEKu8E/ftMTPlNp+mc6zL3E9zKWmF5sDHZ5MSsoTP9Wyz64AhEf9kD08xYJ7w6Hdcu8H550ircnPyWSIF0Q==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.3.tgz", + "integrity": "sha512-7MpZDIfI7sUC5zWo2+foJ50CSI5lcqDehZ0lVgIhSi4bFEk94fLAKlF3Q0nzSQQ+ca0lm+O6G9ztKVBeu8PMRQ==", "dev": true }, "@babel/traverse": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.0.tgz", - "integrity": "sha512-dZ/a371EE5XNhTHomvtuLTUyx6UEoJmYX+DT5zBCQN3McHemsuIaKKYqsc/fs26BEkHs/lBZy0J571LP5z9kQA==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz", + "integrity": "sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.0", - "@babel/helper-function-name": "^7.12.13", + "@babel/generator": "^7.14.2", + "@babel/helper-function-name": "^7.14.2", "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.14.0", - "@babel/types": "^7.14.0", + "@babel/parser": "^7.14.2", + "@babel/types": "^7.14.2", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.1.tgz", - "integrity": "sha512-S13Qe85fzLs3gYRUnrpyeIrBJIMYv33qSTg1qoBwiG6nPKwUWAD9odSzWhEedpwOIzSEI6gbdQIWEMiCI42iBA==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.2.tgz", + "integrity": "sha512-SdjAG/3DikRHpUOjxZgnkbR11xUlyDMUFJdvnIgZEE16mqmY0BINMmc4//JMJglEmn6i7sq6p+mGrFWyZ98EEw==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.14.0", @@ -7665,9 +7767,9 @@ "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==" }, "hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==" + "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==" }, "hpack.js": { "version": "2.1.6", @@ -10196,9 +10298,9 @@ } }, "jss": { - "version": "10.5.1", - "resolved": "https://registry.npmjs.org/jss/-/jss-10.5.1.tgz", - "integrity": "sha512-hbbO3+FOTqVdd7ZUoTiwpHzKXIo5vGpMNbuXH1a0wubRSWLWSBvwvaq4CiHH/U42CmjOnp6lVNNs/l+Z7ZdDmg==", + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/jss/-/jss-10.6.0.tgz", + "integrity": "sha512-n7SHdCozmxnzYGXBHe0NsO0eUf9TvsHVq2MXvi4JmTn3x5raynodDVE/9VQmBdWFyyj9HpHZ2B4xNZ7MMy7lkw==", "requires": { "@babel/runtime": "^7.3.1", "csstype": "^3.0.2", @@ -10208,77 +10310,77 @@ }, "dependencies": { "csstype": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.6.tgz", - "integrity": "sha512-+ZAmfyWMT7TiIlzdqJgjMb7S4f1beorDbWbsocyK4RaiqA5RTX3K14bnBWmmA9QEM0gRdsjyyrEmcyga8Zsxmw==" + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz", + "integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==" } } }, "jss-plugin-camel-case": { - "version": "10.5.1", - "resolved": "https://registry.npmjs.org/jss-plugin-camel-case/-/jss-plugin-camel-case-10.5.1.tgz", - "integrity": "sha512-9+oymA7wPtswm+zxVti1qiowC5q7bRdCJNORtns2JUj/QHp2QPXYwSNRD8+D2Cy3/CEMtdJzlNnt5aXmpS6NAg==", + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/jss-plugin-camel-case/-/jss-plugin-camel-case-10.6.0.tgz", + "integrity": "sha512-JdLpA3aI/npwj3nDMKk308pvnhoSzkW3PXlbgHAzfx0yHWnPPVUjPhXFtLJzgKZge8lsfkUxvYSQ3X2OYIFU6A==", "requires": { "@babel/runtime": "^7.3.1", "hyphenate-style-name": "^1.0.3", - "jss": "10.5.1" + "jss": "10.6.0" } }, "jss-plugin-default-unit": { - "version": "10.5.1", - "resolved": "https://registry.npmjs.org/jss-plugin-default-unit/-/jss-plugin-default-unit-10.5.1.tgz", - "integrity": "sha512-D48hJBc9Tj3PusvlillHW8Fz0y/QqA7MNmTYDQaSB/7mTrCZjt7AVRROExoOHEtd2qIYKOYJW3Jc2agnvsXRlQ==", + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/jss-plugin-default-unit/-/jss-plugin-default-unit-10.6.0.tgz", + "integrity": "sha512-7y4cAScMHAxvslBK2JRK37ES9UT0YfTIXWgzUWD5euvR+JR3q+o8sQKzBw7GmkQRfZijrRJKNTiSt1PBsLI9/w==", "requires": { "@babel/runtime": "^7.3.1", - "jss": "10.5.1" + "jss": "10.6.0" } }, "jss-plugin-global": { - "version": "10.5.1", - "resolved": "https://registry.npmjs.org/jss-plugin-global/-/jss-plugin-global-10.5.1.tgz", - "integrity": "sha512-jX4XpNgoaB8yPWw/gA1aPXJEoX0LNpvsROPvxlnYe+SE0JOhuvF7mA6dCkgpXBxfTWKJsno7cDSCgzHTocRjCQ==", + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/jss-plugin-global/-/jss-plugin-global-10.6.0.tgz", + "integrity": "sha512-I3w7ji/UXPi3VuWrTCbHG9rVCgB4yoBQLehGDTmsnDfXQb3r1l3WIdcO8JFp9m0YMmyy2CU7UOV6oPI7/Tmu+w==", "requires": { "@babel/runtime": "^7.3.1", - "jss": "10.5.1" + "jss": "10.6.0" } }, "jss-plugin-nested": { - "version": "10.5.1", - "resolved": "https://registry.npmjs.org/jss-plugin-nested/-/jss-plugin-nested-10.5.1.tgz", - "integrity": "sha512-xXkWKOCljuwHNjSYcXrCxBnjd8eJp90KVFW1rlhvKKRXnEKVD6vdKXYezk2a89uKAHckSvBvBoDGsfZrldWqqQ==", + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/jss-plugin-nested/-/jss-plugin-nested-10.6.0.tgz", + "integrity": "sha512-fOFQWgd98H89E6aJSNkEh2fAXquC9aZcAVjSw4q4RoQ9gU++emg18encR4AT4OOIFl4lQwt5nEyBBRn9V1Rk8g==", "requires": { "@babel/runtime": "^7.3.1", - "jss": "10.5.1", + "jss": "10.6.0", "tiny-warning": "^1.0.2" } }, "jss-plugin-props-sort": { - "version": "10.5.1", - "resolved": "https://registry.npmjs.org/jss-plugin-props-sort/-/jss-plugin-props-sort-10.5.1.tgz", - "integrity": "sha512-t+2vcevNmMg4U/jAuxlfjKt46D/jHzCPEjsjLRj/J56CvP7Iy03scsUP58Iw8mVnaV36xAUZH2CmAmAdo8994g==", + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/jss-plugin-props-sort/-/jss-plugin-props-sort-10.6.0.tgz", + "integrity": "sha512-oMCe7hgho2FllNc60d9VAfdtMrZPo9n1Iu6RNa+3p9n0Bkvnv/XX5San8fTPujrTBScPqv9mOE0nWVvIaohNuw==", "requires": { "@babel/runtime": "^7.3.1", - "jss": "10.5.1" + "jss": "10.6.0" } }, "jss-plugin-rule-value-function": { - "version": "10.5.1", - "resolved": "https://registry.npmjs.org/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.5.1.tgz", - "integrity": "sha512-3gjrSxsy4ka/lGQsTDY8oYYtkt2esBvQiceGBB4PykXxHoGRz14tbCK31Zc6DHEnIeqsjMUGbq+wEly5UViStQ==", + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.6.0.tgz", + "integrity": "sha512-TKFqhRTDHN1QrPTMYRlIQUOC2FFQb271+AbnetURKlGvRl/eWLswcgHQajwuxI464uZk91sPiTtdGi7r7XaWfA==", "requires": { "@babel/runtime": "^7.3.1", - "jss": "10.5.1", + "jss": "10.6.0", "tiny-warning": "^1.0.2" } }, "jss-plugin-vendor-prefixer": { - "version": "10.5.1", - "resolved": "https://registry.npmjs.org/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.5.1.tgz", - "integrity": "sha512-cLkH6RaPZWHa1TqSfd2vszNNgxT1W0omlSjAd6hCFHp3KIocSrW21gaHjlMU26JpTHwkc+tJTCQOmE/O1A4FKQ==", + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.6.0.tgz", + "integrity": "sha512-doJ7MouBXT1lypLLctCwb4nJ6lDYqrTfVS3LtXgox42Xz0gXusXIIDboeh6UwnSmox90QpVnub7au8ybrb0krQ==", "requires": { "@babel/runtime": "^7.3.1", "css-vendor": "^2.0.8", - "jss": "10.5.1" + "jss": "10.6.0" } }, "jsx-ast-utils": { @@ -10401,9 +10503,9 @@ } }, "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "lodash._reinterpolate": { "version": "3.0.0", @@ -10863,11 +10965,6 @@ "integrity": "sha512-0ZIR9PasPxGXmRsEF8jsDzndzHDj7tIav+JUmvIFB/WHswliFnquxECT/De7GR4yg99ky/NlRKJT82G1y271bw==", "dev": true }, - "nanoid": { - "version": "3.1.22", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.22.tgz", - "integrity": "sha512-/2ZUaJX2ANuLtTvqTlgqBQNJoQO398KyJgZloL0PZkC0dpysjncRUPsFe3DUPzz/y3h+u7C46np8RMuvF3jsSQ==" - }, "nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", @@ -12621,13 +12718,20 @@ "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==" }, "postcss": { - "version": "8.2.8", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.8.tgz", - "integrity": "sha512-1F0Xb2T21xET7oQV9eKuctbM9S7BC0fetoHCc4H13z0PT6haiRLP4T0ZY4XWh7iLP0usgqykT6p9B2RtOf4FPw==", + "version": "8.2.15", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.15.tgz", + "integrity": "sha512-2zO3b26eJD/8rb106Qu2o7Qgg52ND5HPjcyQiK2B98O388h43A448LCslC0dI2P97wCAQRJsFvwTRcXxTKds+Q==", "requires": { "colorette": "^1.2.2", - "nanoid": "^3.1.20", + "nanoid": "^3.1.23", "source-map": "^0.6.1" + }, + "dependencies": { + "nanoid": { + "version": "3.1.23", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", + "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==" + } } }, "source-map": { @@ -15451,9 +15555,9 @@ } }, "typescript": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.3.tgz", - "integrity": "sha512-qOcYwxaByStAWrBf4x0fibwZvMRG+r4cQoTjbPtUlrWjBHbmCAww1i448U0GJ+3cNNEtebDteo/cHOR3xJ4wEw==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.4.tgz", + "integrity": "sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg==", "dev": true }, "unbox-primitive": { @@ -16340,8 +16444,7 @@ }, "ssri": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "resolved": "", "requires": { "figgy-pudding": "^3.5.1" } diff --git a/tournament-scheduler/package.json b/tournament-scheduler/package.json index 98b26519..c6e86155 100644 --- a/tournament-scheduler/package.json +++ b/tournament-scheduler/package.json @@ -18,7 +18,7 @@ }, "dependencies": { "@date-io/moment": "^1.3.13", - "@material-ui/core": "^4.11.3", + "@material-ui/core": "^4.11.4", "@material-ui/icons": "^4.11.2", "@material-ui/pickers": "^3.3.10", "http-status-codes": "^2.1.4", @@ -31,25 +31,25 @@ "react-text-mask": "^5.4.3" }, "devDependencies": { - "@types/jest": "^26.0.21", - "@types/node": "^13.13.47", - "@types/react": "^17.0.3", + "@types/jest": "^26.0.23", + "@types/node": "^13.13.52", + "@types/react": "^17.0.6", "@types/react-add-to-calendar": "^0.1.0", "@types/react-div-100vh": "^0.3.0", - "@types/react-dom": "^17.0.3", - "@types/react-text-mask": "^5.4.6", - "@typescript-eslint/eslint-plugin": "^4.19.0", - "@typescript-eslint/parser": "^4.19.0", + "@types/react-dom": "^17.0.5", + "@types/react-text-mask": "^5.4.7", + "@typescript-eslint/eslint-plugin": "^4.24.0", + "@typescript-eslint/parser": "^4.24.0", "eslint-plugin-extra-rules": "0.0.0-development", "eslint-plugin-jsx-a11y": "^6.4.1", "eslint-plugin-prefer-arrow": "^1.2.3", - "eslint-plugin-react": "^7.23.1", + "eslint-plugin-react": "^7.23.2", "eslint-plugin-react-hooks": "^4.2.0", "eslint-plugin-simple-import-sort": "^7.0.0", "eslint-plugin-sonarjs": "^0.7.0", "eslint-plugin-switch-case": "^1.1.2", - "eslint-plugin-unicorn": "^32.0.0", - "typescript": "^4.2.3" + "eslint-plugin-unicorn": "^32.0.1", + "typescript": "^4.2.4" }, "eslintConfig": { "extends": [ diff --git a/tournament-scheduler/src/App.tsx b/tournament-scheduler/src/App.tsx index b6938ac2..194af506 100644 --- a/tournament-scheduler/src/App.tsx +++ b/tournament-scheduler/src/App.tsx @@ -106,8 +106,27 @@ const App: FC = () => { diff --git a/tournament-scheduler/src/ScheduleManagement/ScheduleWizard/TimeSlotRow.tsx b/tournament-scheduler/src/ScheduleManagement/ScheduleWizard/TimeSlotRow.tsx index cf48f69a..7a3e4bf2 100644 --- a/tournament-scheduler/src/ScheduleManagement/ScheduleWizard/TimeSlotRow.tsx +++ b/tournament-scheduler/src/ScheduleManagement/ScheduleWizard/TimeSlotRow.tsx @@ -25,6 +25,11 @@ const putRegistration = (registration: Registration) => const deleteRegistration = (registrationId: number) => apiDelete(`registrations/${registrationId}`) +// eslint-disable-next-line prefer-arrow/prefer-arrow-functions +const createProxy = function (registrations: T) { + return JSON.parse(JSON.stringify(registrations)) as T +} + type TimeSlotRowProps = { schedule: Schedule timeSlot: TimeSlot @@ -39,7 +44,7 @@ type TimeSlotRowProps = { const TimeSlotRow: FC = (props: TimeSlotRowProps) => { const [open, setOpen] = useState(false) const [registrationsProxy, setRegistrationsProxy] = useState( - JSON.parse(JSON.stringify(props.timeSlot.registrations)) + createProxy(props.timeSlot.registrations) ) const handleParticipantNameChange = (registration: RegistrationProxy, participantIndex: number, name: string) => { @@ -58,7 +63,7 @@ const TimeSlotRow: FC = (props: TimeSlotRowProps) => { } registrationProxy.hasChanged = false - setRegistrationsProxy(JSON.parse(JSON.stringify(registrationsProxy))) + setRegistrationsProxy(createProxy(registrationsProxy)) }) .catch(console.error) @@ -67,7 +72,7 @@ const TimeSlotRow: FC = (props: TimeSlotRowProps) => { ...props.timeSlot.registrations[registrationIndex], hasChanged: false, } - setRegistrationsProxy(JSON.parse(JSON.stringify(registrationsProxy))) + setRegistrationsProxy(createProxy(registrationsProxy)) } const handleRemoveRegistrations = (registrationIndex: number) => @@ -75,7 +80,7 @@ const TimeSlotRow: FC = (props: TimeSlotRowProps) => { .then(() => { props.timeSlot.registrations.splice(registrationIndex, 1) registrationsProxy.splice(registrationIndex, 1) - setRegistrationsProxy(JSON.parse(JSON.stringify(registrationsProxy))) + setRegistrationsProxy(createProxy(registrationsProxy)) }) .catch(console.error) diff --git a/tournament-scheduler/src/ScheduleViewer/ScheduleViewer.tsx b/tournament-scheduler/src/ScheduleViewer/ScheduleViewer.tsx index bc4e759d..fd05d722 100644 --- a/tournament-scheduler/src/ScheduleViewer/ScheduleViewer.tsx +++ b/tournament-scheduler/src/ScheduleViewer/ScheduleViewer.tsx @@ -110,7 +110,7 @@ const ScheduleViewer: FC = (props: ScheduleRegistrati :
All dates and times are given in your local timezone. - {!scheduleState.active &&

This scheduleState is currently inactive and registration is closed.
} + {!scheduleState.active &&

This schedule is currently inactive and registration is closed.
} {scheduleState .timeSlots .filter(timeSlot => timeSlot.registrations.length > 0) From 45c034a042a318b289d7b1d1cadb1dcfbc6aaa48 Mon Sep 17 00:00:00 2001 From: Avasam Date: Wed, 19 May 2021 22:30:04 -0400 Subject: [PATCH 07/17] Fixed calendars by updating tobetter library --- .../react-add-to-calendar/LICENSE | 21 - .../react-add-to-calendar/README.md | 88 - .../dist/react-add-to-calendar.css | 2913 ----------------- .../dist/react-add-to-calendar.js | 670 ---- .../dist/react-add-to-calendar.min.css | 4 - .../dist/react-add-to-calendar.min.js | 1 - .../lib/ReactAddToCalendar.js | 267 -- .../lib/helpers/index.js | 126 - .../react-add-to-calendar/package.json | 136 - tournament-scheduler/package-lock.json | 12 +- tournament-scheduler/package.json | 2 +- tournament-scheduler/src/App.css | 29 +- .../src/ScheduleViewer/ScheduleViewer.tsx | 33 +- 13 files changed, 44 insertions(+), 4258 deletions(-) delete mode 100644 tournament-scheduler/dependencies/react-add-to-calendar/LICENSE delete mode 100644 tournament-scheduler/dependencies/react-add-to-calendar/README.md delete mode 100644 tournament-scheduler/dependencies/react-add-to-calendar/dist/react-add-to-calendar.css delete mode 100644 tournament-scheduler/dependencies/react-add-to-calendar/dist/react-add-to-calendar.js delete mode 100644 tournament-scheduler/dependencies/react-add-to-calendar/dist/react-add-to-calendar.min.css delete mode 100644 tournament-scheduler/dependencies/react-add-to-calendar/dist/react-add-to-calendar.min.js delete mode 100644 tournament-scheduler/dependencies/react-add-to-calendar/lib/ReactAddToCalendar.js delete mode 100644 tournament-scheduler/dependencies/react-add-to-calendar/lib/helpers/index.js delete mode 100644 tournament-scheduler/dependencies/react-add-to-calendar/package.json diff --git a/tournament-scheduler/dependencies/react-add-to-calendar/LICENSE b/tournament-scheduler/dependencies/react-add-to-calendar/LICENSE deleted file mode 100644 index 77afca31..00000000 --- a/tournament-scheduler/dependencies/react-add-to-calendar/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016-2017 Jason Salzman - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file diff --git a/tournament-scheduler/dependencies/react-add-to-calendar/README.md b/tournament-scheduler/dependencies/react-add-to-calendar/README.md deleted file mode 100644 index fac370cc..00000000 --- a/tournament-scheduler/dependencies/react-add-to-calendar/README.md +++ /dev/null @@ -1,88 +0,0 @@ -# React Add to Calendar Button - -[![npm version](https://badge.fury.io/js/react-add-to-calendar.svg)](https://badge.fury.io/js/react-add-to-calendar) -[![Build Status](https://travis-ci.org/jasonsalzman/react-add-to-calendar.svg?branch=master)](https://travis-ci.org/jasonsalzman/react-add-to-calendar) -[![Dependency Status](https://img.shields.io/david/strongloop/express.svg?maxAge=2592000)](https://david-dm.org/jasonsalzman/react-add-to-calendar) -[![Peer Dependency Status](https://img.shields.io/david/peer/webcomponents/generator-element.svg?maxAge=2592000)](https://david-dm.org/jasonsalzman/react-add-to-calendar) -[![codecov](https://codecov.io/gh/jasonsalzman/react-add-to-calendar/branch/master/graph/badge.svg)](https://codecov.io/gh/jasonsalzman/react-add-to-calendar) -[![Downloads](http://img.shields.io/npm/dm/react-add-to-calendar.svg)](https://npmjs.org/package/react-add-to-calendar) - -A simple, customizable, and reusable Add to Calendar button component for React ([Demo](https://jasonsalzman.github.io/react-add-to-calendar/)) - -## Installation - -The package can be installed via NPM: - -``` -npm install react-add-to-calendar --save -``` - -You’ll need to install React and Moment separately since they are not included in the package. Below is a simple example on how to use the Add to Calendar button in a React view. - -```js -import React from 'react'; -import AddToCalendar from 'react-add-to-calendar'; - -class Example extends React.Component { - static displayName = 'Example'; - state = { - event: { - title: 'Sample Event', - description: 'This is the sample event provided as an example only', - location: 'Portland, OR', - startTime: '2016-09-16T20:15:00-04:00', - endTime: '2016-09-16T21:45:00-04:00' - } - }; - - render() { - return ; - }; -} -``` - -## Configuration - -The most basic use of the Add to Calendar button can be described with: - -```js -let event = { - title: 'Sample Event', - description: 'This is the sample event provided as an example only', - location: 'Portland, OR', - startTime: '2016-09-16T20:15:00-04:00', - endTime: '2016-09-16T21:45:00-04:00' -} - - -``` - -See [here](https://github.com/jasonsalzman/react-add-to-calendar/blob/master/docs/ReactAddToCalendar.md) for a full list of props that may be passed to the component. Examples are given on the [main website](https://jasonsalzman.github.io/react-add-to-calendar). - -## Compatibility - -### React - -I'll do my best to stay compatible with the latest version of React. I can't guarantee support for all older versions of React. - -Latest compatible versions: -- React 16.2.0 or newer - -### Browser Support - -The Add to Calendar button is compatible with the latest versions of Chrome, Firefox, Safari, and IE10+. - -Unfortunately it is difficult to support legacy browsers while maintaining the ability to develop new features in the future. For IE9 support, it is known that the [classlist polyfill](https://www.npmjs.com/package/classlist-polyfill) is needed, but this may change or break at any point in the future. - -## Local Development - -The `master` branch contains the latest version of the Add to Calendar component. To start your example app, you can run `npm start`. This starts a simple webserver on http://localhost:8080. - -You can run `npm test` to execute the test suite and linters. To help you develop the component I’ve set up some tests that covers the basic functionality (can be found in `/tests`). I highly recommend you add tests when you’re adding new functionality. - -### The examples -The examples are hosted within the docs folder and are ran in the simple add that loads the Add to Calendar button. To extend the examples with a new example, you can simply duplicate one of the existing examples and change the unique properties of your example. - -## License - -Copyright (c) 2016-2017 Jason Salzman. Licensed under MIT license, see [LICENSE](LICENSE) for the full license. diff --git a/tournament-scheduler/dependencies/react-add-to-calendar/dist/react-add-to-calendar.css b/tournament-scheduler/dependencies/react-add-to-calendar/dist/react-add-to-calendar.css deleted file mode 100644 index 9f84fb2d..00000000 --- a/tournament-scheduler/dependencies/react-add-to-calendar/dist/react-add-to-calendar.css +++ /dev/null @@ -1,2913 +0,0 @@ -@charset "UTF-8"; -/*! - * Font Awesome 4.6.3 by @davegandy - http://fontawesome.io - @fontawesome - * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */ -/*$fa-font-path: "../fonts" !default;*/ -/* FONT PATH - * -------------------------- */ -@font-face { - font-family: 'FontAwesome'; - src: url("//netdna.bootstrapcdn.com/font-awesome/4.6.3/fonts/fontawesome-webfont.eot?v=4.6.3"); - src: url("//netdna.bootstrapcdn.com/font-awesome/4.6.3/fonts/fontawesome-webfont.eot?#iefix&v=4.6.3") format("embedded-opentype"), url("//netdna.bootstrapcdn.com/font-awesome/4.6.3/fonts/fontawesome-webfont.woff2?v=4.6.3") format("woff2"), url("//netdna.bootstrapcdn.com/font-awesome/4.6.3/fonts/fontawesome-webfont.woff?v=4.6.3") format("woff"), url("//netdna.bootstrapcdn.com/font-awesome/4.6.3/fonts/fontawesome-webfont.ttf?v=4.6.3") format("truetype"), url("//netdna.bootstrapcdn.com/font-awesome/4.6.3/fonts/fontawesome-webfont.svg?v=4.6.3#fontawesomeregular") format("svg"); - font-weight: normal; - font-style: normal; -} -.fa { - display: inline-block; - font: normal normal normal 14px/1 FontAwesome; - font-size: inherit; - text-rendering: auto; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -/* makes the font 33% larger relative to the icon container */ -.fa-lg { - font-size: 1.3333333333em; - line-height: 0.75em; - vertical-align: -15%; -} - -.fa-2x { - font-size: 2em; -} - -.fa-3x { - font-size: 3em; -} - -.fa-4x { - font-size: 4em; -} - -.fa-5x { - font-size: 5em; -} - -.fa-fw { - width: 1.2857142857em; - text-align: center; -} - -.fa-ul { - padding-left: 0; - margin-left: 2.1428571429em; - list-style-type: none; -} -.fa-ul > li { - position: relative; -} - -.fa-li { - position: absolute; - left: -2.1428571429em; - width: 2.1428571429em; - top: 0.1428571429em; - text-align: center; -} -.fa-li.fa-lg { - left: -1.8571428571em; -} - -.fa-border { - padding: .2em .25em .15em; - border: solid 0.08em #eee; - border-radius: .1em; -} - -.fa-pull-left { - float: left; -} - -.fa-pull-right { - float: right; -} - -.fa.fa-pull-left { - margin-right: .3em; -} -.fa.fa-pull-right { - margin-left: .3em; -} - -/* Deprecated as of 4.4.0 */ -.pull-right { - float: right; -} - -.pull-left { - float: left; -} - -.fa.pull-left { - margin-right: .3em; -} -.fa.pull-right { - margin-left: .3em; -} - -.fa-spin { - -webkit-animation: fa-spin 2s infinite linear; - animation: fa-spin 2s infinite linear; -} - -.fa-pulse { - -webkit-animation: fa-spin 1s infinite steps(8); - animation: fa-spin 1s infinite steps(8); -} - -@-webkit-keyframes fa-spin { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - 100% { - -webkit-transform: rotate(359deg); - transform: rotate(359deg); - } -} -@keyframes fa-spin { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - 100% { - -webkit-transform: rotate(359deg); - transform: rotate(359deg); - } -} -.fa-rotate-90 { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)"; - -webkit-transform: rotate(90deg); - -ms-transform: rotate(90deg); - transform: rotate(90deg); -} - -.fa-rotate-180 { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)"; - -webkit-transform: rotate(180deg); - -ms-transform: rotate(180deg); - transform: rotate(180deg); -} - -.fa-rotate-270 { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)"; - -webkit-transform: rotate(270deg); - -ms-transform: rotate(270deg); - transform: rotate(270deg); -} - -.fa-flip-horizontal { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)"; - -webkit-transform: scale(-1, 1); - -ms-transform: scale(-1, 1); - transform: scale(-1, 1); -} - -.fa-flip-vertical { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; - -webkit-transform: scale(1, -1); - -ms-transform: scale(1, -1); - transform: scale(1, -1); -} - -:root .fa-rotate-90, -:root .fa-rotate-180, -:root .fa-rotate-270, -:root .fa-flip-horizontal, -:root .fa-flip-vertical { - filter: none; -} - -.fa-stack { - position: relative; - display: inline-block; - width: 2em; - height: 2em; - line-height: 2em; - vertical-align: middle; -} - -.fa-stack-1x, .fa-stack-2x { - position: absolute; - left: 0; - width: 100%; - text-align: center; -} - -.fa-stack-1x { - line-height: inherit; -} - -.fa-stack-2x { - font-size: 2em; -} - -.fa-inverse { - color: #fff; -} - -/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen - readers do not read off random characters that represent icons */ -.fa-glass:before { - content: ""; -} - -.fa-music:before { - content: ""; -} - -.fa-search:before { - content: ""; -} - -.fa-envelope-o:before { - content: ""; -} - -.fa-heart:before { - content: ""; -} - -.fa-star:before { - content: ""; -} - -.fa-star-o:before { - content: ""; -} - -.fa-user:before { - content: ""; -} - -.fa-film:before { - content: ""; -} - -.fa-th-large:before { - content: ""; -} - -.fa-th:before { - content: ""; -} - -.fa-th-list:before { - content: ""; -} - -.fa-check:before { - content: ""; -} - -.fa-remove:before, -.fa-close:before, -.fa-times:before { - content: ""; -} - -.fa-search-plus:before { - content: ""; -} - -.fa-search-minus:before { - content: ""; -} - -.fa-power-off:before { - content: ""; -} - -.fa-signal:before { - content: ""; -} - -.fa-gear:before, -.fa-cog:before { - content: ""; -} - -.fa-trash-o:before { - content: ""; -} - -.fa-home:before { - content: ""; -} - -.fa-file-o:before { - content: ""; -} - -.fa-clock-o:before { - content: ""; -} - -.fa-road:before { - content: ""; -} - -.fa-download:before { - content: ""; -} - -.fa-arrow-circle-o-down:before { - content: ""; -} - -.fa-arrow-circle-o-up:before { - content: ""; -} - -.fa-inbox:before { - content: ""; -} - -.fa-play-circle-o:before { - content: ""; -} - -.fa-rotate-right:before, -.fa-repeat:before { - content: ""; -} - -.fa-refresh:before { - content: ""; -} - -.fa-list-alt:before { - content: ""; -} - -.fa-lock:before { - content: ""; -} - -.fa-flag:before { - content: ""; -} - -.fa-headphones:before { - content: ""; -} - -.fa-volume-off:before { - content: ""; -} - -.fa-volume-down:before { - content: ""; -} - -.fa-volume-up:before { - content: ""; -} - -.fa-qrcode:before { - content: ""; -} - -.fa-barcode:before { - content: ""; -} - -.fa-tag:before { - content: ""; -} - -.fa-tags:before { - content: ""; -} - -.fa-book:before { - content: ""; -} - -.fa-bookmark:before { - content: ""; -} - -.fa-print:before { - content: ""; -} - -.fa-camera:before { - content: ""; -} - -.fa-font:before { - content: ""; -} - -.fa-bold:before { - content: ""; -} - -.fa-italic:before { - content: ""; -} - -.fa-text-height:before { - content: ""; -} - -.fa-text-width:before { - content: ""; -} - -.fa-align-left:before { - content: ""; -} - -.fa-align-center:before { - content: ""; -} - -.fa-align-right:before { - content: ""; -} - -.fa-align-justify:before { - content: ""; -} - -.fa-list:before { - content: ""; -} - -.fa-dedent:before, -.fa-outdent:before { - content: ""; -} - -.fa-indent:before { - content: ""; -} - -.fa-video-camera:before { - content: ""; -} - -.fa-photo:before, -.fa-image:before, -.fa-picture-o:before { - content: ""; -} - -.fa-pencil:before { - content: ""; -} - -.fa-map-marker:before { - content: ""; -} - -.fa-adjust:before { - content: ""; -} - -.fa-tint:before { - content: ""; -} - -.fa-edit:before, -.fa-pencil-square-o:before { - content: ""; -} - -.fa-share-square-o:before { - content: ""; -} - -.fa-check-square-o:before { - content: ""; -} - -.fa-arrows:before { - content: ""; -} - -.fa-step-backward:before { - content: ""; -} - -.fa-fast-backward:before { - content: ""; -} - -.fa-backward:before { - content: ""; -} - -.fa-play:before { - content: ""; -} - -.fa-pause:before { - content: ""; -} - -.fa-stop:before { - content: ""; -} - -.fa-forward:before { - content: ""; -} - -.fa-fast-forward:before { - content: ""; -} - -.fa-step-forward:before { - content: ""; -} - -.fa-eject:before { - content: ""; -} - -.fa-chevron-left:before { - content: ""; -} - -.fa-chevron-right:before { - content: ""; -} - -.fa-plus-circle:before { - content: ""; -} - -.fa-minus-circle:before { - content: ""; -} - -.fa-times-circle:before { - content: ""; -} - -.fa-check-circle:before { - content: ""; -} - -.fa-question-circle:before { - content: ""; -} - -.fa-info-circle:before { - content: ""; -} - -.fa-crosshairs:before { - content: ""; -} - -.fa-times-circle-o:before { - content: ""; -} - -.fa-check-circle-o:before { - content: ""; -} - -.fa-ban:before { - content: ""; -} - -.fa-arrow-left:before { - content: ""; -} - -.fa-arrow-right:before { - content: ""; -} - -.fa-arrow-up:before { - content: ""; -} - -.fa-arrow-down:before { - content: ""; -} - -.fa-mail-forward:before, -.fa-share:before { - content: ""; -} - -.fa-expand:before { - content: ""; -} - -.fa-compress:before { - content: ""; -} - -.fa-plus:before { - content: ""; -} - -.fa-minus:before { - content: ""; -} - -.fa-asterisk:before { - content: ""; -} - -.fa-exclamation-circle:before { - content: ""; -} - -.fa-gift:before { - content: ""; -} - -.fa-leaf:before { - content: ""; -} - -.fa-fire:before { - content: ""; -} - -.fa-eye:before { - content: ""; -} - -.fa-eye-slash:before { - content: ""; -} - -.fa-warning:before, -.fa-exclamation-triangle:before { - content: ""; -} - -.fa-plane:before { - content: ""; -} - -.fa-calendar:before { - content: ""; -} - -.fa-random:before { - content: ""; -} - -.fa-comment:before { - content: ""; -} - -.fa-magnet:before { - content: ""; -} - -.fa-chevron-up:before { - content: ""; -} - -.fa-chevron-down:before { - content: ""; -} - -.fa-retweet:before { - content: ""; -} - -.fa-shopping-cart:before { - content: ""; -} - -.fa-folder:before { - content: ""; -} - -.fa-folder-open:before { - content: ""; -} - -.fa-arrows-v:before { - content: ""; -} - -.fa-arrows-h:before { - content: ""; -} - -.fa-bar-chart-o:before, -.fa-bar-chart:before { - content: ""; -} - -.fa-twitter-square:before { - content: ""; -} - -.fa-facebook-square:before { - content: ""; -} - -.fa-camera-retro:before { - content: ""; -} - -.fa-key:before { - content: ""; -} - -.fa-gears:before, -.fa-cogs:before { - content: ""; -} - -.fa-comments:before { - content: ""; -} - -.fa-thumbs-o-up:before { - content: ""; -} - -.fa-thumbs-o-down:before { - content: ""; -} - -.fa-star-half:before { - content: ""; -} - -.fa-heart-o:before { - content: ""; -} - -.fa-sign-out:before { - content: ""; -} - -.fa-linkedin-square:before { - content: ""; -} - -.fa-thumb-tack:before { - content: ""; -} - -.fa-external-link:before { - content: ""; -} - -.fa-sign-in:before { - content: ""; -} - -.fa-trophy:before { - content: ""; -} - -.fa-github-square:before { - content: ""; -} - -.fa-upload:before { - content: ""; -} - -.fa-lemon-o:before { - content: ""; -} - -.fa-phone:before { - content: ""; -} - -.fa-square-o:before { - content: ""; -} - -.fa-bookmark-o:before { - content: ""; -} - -.fa-phone-square:before { - content: ""; -} - -.fa-twitter:before { - content: ""; -} - -.fa-facebook-f:before, -.fa-facebook:before { - content: ""; -} - -.fa-github:before { - content: ""; -} - -.fa-unlock:before { - content: ""; -} - -.fa-credit-card:before { - content: ""; -} - -.fa-feed:before, -.fa-rss:before { - content: ""; -} - -.fa-hdd-o:before { - content: ""; -} - -.fa-bullhorn:before { - content: ""; -} - -.fa-bell:before { - content: ""; -} - -.fa-certificate:before { - content: ""; -} - -.fa-hand-o-right:before { - content: ""; -} - -.fa-hand-o-left:before { - content: ""; -} - -.fa-hand-o-up:before { - content: ""; -} - -.fa-hand-o-down:before { - content: ""; -} - -.fa-arrow-circle-left:before { - content: ""; -} - -.fa-arrow-circle-right:before { - content: ""; -} - -.fa-arrow-circle-up:before { - content: ""; -} - -.fa-arrow-circle-down:before { - content: ""; -} - -.fa-globe:before { - content: ""; -} - -.fa-wrench:before { - content: ""; -} - -.fa-tasks:before { - content: ""; -} - -.fa-filter:before { - content: ""; -} - -.fa-briefcase:before { - content: ""; -} - -.fa-arrows-alt:before { - content: ""; -} - -.fa-group:before, -.fa-users:before { - content: ""; -} - -.fa-chain:before, -.fa-link:before { - content: ""; -} - -.fa-cloud:before { - content: ""; -} - -.fa-flask:before { - content: ""; -} - -.fa-cut:before, -.fa-scissors:before { - content: ""; -} - -.fa-copy:before, -.fa-files-o:before { - content: ""; -} - -.fa-paperclip:before { - content: ""; -} - -.fa-save:before, -.fa-floppy-o:before { - content: ""; -} - -.fa-square:before { - content: ""; -} - -.fa-navicon:before, -.fa-reorder:before, -.fa-bars:before { - content: ""; -} - -.fa-list-ul:before { - content: ""; -} - -.fa-list-ol:before { - content: ""; -} - -.fa-strikethrough:before { - content: ""; -} - -.fa-underline:before { - content: ""; -} - -.fa-table:before { - content: ""; -} - -.fa-magic:before { - content: ""; -} - -.fa-truck:before { - content: ""; -} - -.fa-pinterest:before { - content: ""; -} - -.fa-pinterest-square:before { - content: ""; -} - -.fa-google-plus-square:before { - content: ""; -} - -.fa-google-plus:before { - content: ""; -} - -.fa-money:before { - content: ""; -} - -.fa-caret-down:before { - content: ""; -} - -.fa-caret-up:before { - content: ""; -} - -.fa-caret-left:before { - content: ""; -} - -.fa-caret-right:before { - content: ""; -} - -.fa-columns:before { - content: ""; -} - -.fa-unsorted:before, -.fa-sort:before { - content: ""; -} - -.fa-sort-down:before, -.fa-sort-desc:before { - content: ""; -} - -.fa-sort-up:before, -.fa-sort-asc:before { - content: ""; -} - -.fa-envelope:before { - content: ""; -} - -.fa-linkedin:before { - content: ""; -} - -.fa-rotate-left:before, -.fa-undo:before { - content: ""; -} - -.fa-legal:before, -.fa-gavel:before { - content: ""; -} - -.fa-dashboard:before, -.fa-tachometer:before { - content: ""; -} - -.fa-comment-o:before { - content: ""; -} - -.fa-comments-o:before { - content: ""; -} - -.fa-flash:before, -.fa-bolt:before { - content: ""; -} - -.fa-sitemap:before { - content: ""; -} - -.fa-umbrella:before { - content: ""; -} - -.fa-paste:before, -.fa-clipboard:before { - content: ""; -} - -.fa-lightbulb-o:before { - content: ""; -} - -.fa-exchange:before { - content: ""; -} - -.fa-cloud-download:before { - content: ""; -} - -.fa-cloud-upload:before { - content: ""; -} - -.fa-user-md:before { - content: ""; -} - -.fa-stethoscope:before { - content: ""; -} - -.fa-suitcase:before { - content: ""; -} - -.fa-bell-o:before { - content: ""; -} - -.fa-coffee:before { - content: ""; -} - -.fa-cutlery:before { - content: ""; -} - -.fa-file-text-o:before { - content: ""; -} - -.fa-building-o:before { - content: ""; -} - -.fa-hospital-o:before { - content: ""; -} - -.fa-ambulance:before { - content: ""; -} - -.fa-medkit:before { - content: ""; -} - -.fa-fighter-jet:before { - content: ""; -} - -.fa-beer:before { - content: ""; -} - -.fa-h-square:before { - content: ""; -} - -.fa-plus-square:before { - content: ""; -} - -.fa-angle-double-left:before { - content: ""; -} - -.fa-angle-double-right:before { - content: ""; -} - -.fa-angle-double-up:before { - content: ""; -} - -.fa-angle-double-down:before { - content: ""; -} - -.fa-angle-left:before { - content: ""; -} - -.fa-angle-right:before { - content: ""; -} - -.fa-angle-up:before { - content: ""; -} - -.fa-angle-down:before { - content: ""; -} - -.fa-desktop:before { - content: ""; -} - -.fa-laptop:before { - content: ""; -} - -.fa-tablet:before { - content: ""; -} - -.fa-mobile-phone:before, -.fa-mobile:before { - content: ""; -} - -.fa-circle-o:before { - content: ""; -} - -.fa-quote-left:before { - content: ""; -} - -.fa-quote-right:before { - content: ""; -} - -.fa-spinner:before { - content: ""; -} - -.fa-circle:before { - content: ""; -} - -.fa-mail-reply:before, -.fa-reply:before { - content: ""; -} - -.fa-github-alt:before { - content: ""; -} - -.fa-folder-o:before { - content: ""; -} - -.fa-folder-open-o:before { - content: ""; -} - -.fa-smile-o:before { - content: ""; -} - -.fa-frown-o:before { - content: ""; -} - -.fa-meh-o:before { - content: ""; -} - -.fa-gamepad:before { - content: ""; -} - -.fa-keyboard-o:before { - content: ""; -} - -.fa-flag-o:before { - content: ""; -} - -.fa-flag-checkered:before { - content: ""; -} - -.fa-terminal:before { - content: ""; -} - -.fa-code:before { - content: ""; -} - -.fa-mail-reply-all:before, -.fa-reply-all:before { - content: ""; -} - -.fa-star-half-empty:before, -.fa-star-half-full:before, -.fa-star-half-o:before { - content: ""; -} - -.fa-location-arrow:before { - content: ""; -} - -.fa-crop:before { - content: ""; -} - -.fa-code-fork:before { - content: ""; -} - -.fa-unlink:before, -.fa-chain-broken:before { - content: ""; -} - -.fa-question:before { - content: ""; -} - -.fa-info:before { - content: ""; -} - -.fa-exclamation:before { - content: ""; -} - -.fa-superscript:before { - content: ""; -} - -.fa-subscript:before { - content: ""; -} - -.fa-eraser:before { - content: ""; -} - -.fa-puzzle-piece:before { - content: ""; -} - -.fa-microphone:before { - content: ""; -} - -.fa-microphone-slash:before { - content: ""; -} - -.fa-shield:before { - content: ""; -} - -.fa-calendar-o:before { - content: ""; -} - -.fa-fire-extinguisher:before { - content: ""; -} - -.fa-rocket:before { - content: ""; -} - -.fa-maxcdn:before { - content: ""; -} - -.fa-chevron-circle-left:before { - content: ""; -} - -.fa-chevron-circle-right:before { - content: ""; -} - -.fa-chevron-circle-up:before { - content: ""; -} - -.fa-chevron-circle-down:before { - content: ""; -} - -.fa-html5:before { - content: ""; -} - -.fa-css3:before { - content: ""; -} - -.fa-anchor:before { - content: ""; -} - -.fa-unlock-alt:before { - content: ""; -} - -.fa-bullseye:before { - content: ""; -} - -.fa-ellipsis-h:before { - content: ""; -} - -.fa-ellipsis-v:before { - content: ""; -} - -.fa-rss-square:before { - content: ""; -} - -.fa-play-circle:before { - content: ""; -} - -.fa-ticket:before { - content: ""; -} - -.fa-minus-square:before { - content: ""; -} - -.fa-minus-square-o:before { - content: ""; -} - -.fa-level-up:before { - content: ""; -} - -.fa-level-down:before { - content: ""; -} - -.fa-check-square:before { - content: ""; -} - -.fa-pencil-square:before { - content: ""; -} - -.fa-external-link-square:before { - content: ""; -} - -.fa-share-square:before { - content: ""; -} - -.fa-compass:before { - content: ""; -} - -.fa-toggle-down:before, -.fa-caret-square-o-down:before { - content: ""; -} - -.fa-toggle-up:before, -.fa-caret-square-o-up:before { - content: ""; -} - -.fa-toggle-right:before, -.fa-caret-square-o-right:before { - content: ""; -} - -.fa-euro:before, -.fa-eur:before { - content: ""; -} - -.fa-gbp:before { - content: ""; -} - -.fa-dollar:before, -.fa-usd:before { - content: ""; -} - -.fa-rupee:before, -.fa-inr:before { - content: ""; -} - -.fa-cny:before, -.fa-rmb:before, -.fa-yen:before, -.fa-jpy:before { - content: ""; -} - -.fa-ruble:before, -.fa-rouble:before, -.fa-rub:before { - content: ""; -} - -.fa-won:before, -.fa-krw:before { - content: ""; -} - -.fa-bitcoin:before, -.fa-btc:before { - content: ""; -} - -.fa-file:before { - content: ""; -} - -.fa-file-text:before { - content: ""; -} - -.fa-sort-alpha-asc:before { - content: ""; -} - -.fa-sort-alpha-desc:before { - content: ""; -} - -.fa-sort-amount-asc:before { - content: ""; -} - -.fa-sort-amount-desc:before { - content: ""; -} - -.fa-sort-numeric-asc:before { - content: ""; -} - -.fa-sort-numeric-desc:before { - content: ""; -} - -.fa-thumbs-up:before { - content: ""; -} - -.fa-thumbs-down:before { - content: ""; -} - -.fa-youtube-square:before { - content: ""; -} - -.fa-youtube:before { - content: ""; -} - -.fa-xing:before { - content: ""; -} - -.fa-xing-square:before { - content: ""; -} - -.fa-youtube-play:before { - content: ""; -} - -.fa-dropbox:before { - content: ""; -} - -.fa-stack-overflow:before { - content: ""; -} - -.fa-instagram:before { - content: ""; -} - -.fa-flickr:before { - content: ""; -} - -.fa-adn:before { - content: ""; -} - -.fa-bitbucket:before { - content: ""; -} - -.fa-bitbucket-square:before { - content: ""; -} - -.fa-tumblr:before { - content: ""; -} - -.fa-tumblr-square:before { - content: ""; -} - -.fa-long-arrow-down:before { - content: ""; -} - -.fa-long-arrow-up:before { - content: ""; -} - -.fa-long-arrow-left:before { - content: ""; -} - -.fa-long-arrow-right:before { - content: ""; -} - -.fa-apple:before { - content: ""; -} - -.fa-windows:before { - content: ""; -} - -.fa-android:before { - content: ""; -} - -.fa-linux:before { - content: ""; -} - -.fa-dribbble:before { - content: ""; -} - -.fa-skype:before { - content: ""; -} - -.fa-foursquare:before { - content: ""; -} - -.fa-trello:before { - content: ""; -} - -.fa-female:before { - content: ""; -} - -.fa-male:before { - content: ""; -} - -.fa-gittip:before, -.fa-gratipay:before { - content: ""; -} - -.fa-sun-o:before { - content: ""; -} - -.fa-moon-o:before { - content: ""; -} - -.fa-archive:before { - content: ""; -} - -.fa-bug:before { - content: ""; -} - -.fa-vk:before { - content: ""; -} - -.fa-weibo:before { - content: ""; -} - -.fa-renren:before { - content: ""; -} - -.fa-pagelines:before { - content: ""; -} - -.fa-stack-exchange:before { - content: ""; -} - -.fa-arrow-circle-o-right:before { - content: ""; -} - -.fa-arrow-circle-o-left:before { - content: ""; -} - -.fa-toggle-left:before, -.fa-caret-square-o-left:before { - content: ""; -} - -.fa-dot-circle-o:before { - content: ""; -} - -.fa-wheelchair:before { - content: ""; -} - -.fa-vimeo-square:before { - content: ""; -} - -.fa-turkish-lira:before, -.fa-try:before { - content: ""; -} - -.fa-plus-square-o:before { - content: ""; -} - -.fa-space-shuttle:before { - content: ""; -} - -.fa-slack:before { - content: ""; -} - -.fa-envelope-square:before { - content: ""; -} - -.fa-wordpress:before { - content: ""; -} - -.fa-openid:before { - content: ""; -} - -.fa-institution:before, -.fa-bank:before, -.fa-university:before { - content: ""; -} - -.fa-mortar-board:before, -.fa-graduation-cap:before { - content: ""; -} - -.fa-yahoo:before { - content: ""; -} - -.fa-google:before { - content: ""; -} - -.fa-reddit:before { - content: ""; -} - -.fa-reddit-square:before { - content: ""; -} - -.fa-stumbleupon-circle:before { - content: ""; -} - -.fa-stumbleupon:before { - content: ""; -} - -.fa-delicious:before { - content: ""; -} - -.fa-digg:before { - content: ""; -} - -.fa-pied-piper-pp:before { - content: ""; -} - -.fa-pied-piper-alt:before { - content: ""; -} - -.fa-drupal:before { - content: ""; -} - -.fa-joomla:before { - content: ""; -} - -.fa-language:before { - content: ""; -} - -.fa-fax:before { - content: ""; -} - -.fa-building:before { - content: ""; -} - -.fa-child:before { - content: ""; -} - -.fa-paw:before { - content: ""; -} - -.fa-spoon:before { - content: ""; -} - -.fa-cube:before { - content: ""; -} - -.fa-cubes:before { - content: ""; -} - -.fa-behance:before { - content: ""; -} - -.fa-behance-square:before { - content: ""; -} - -.fa-steam:before { - content: ""; -} - -.fa-steam-square:before { - content: ""; -} - -.fa-recycle:before { - content: ""; -} - -.fa-automobile:before, -.fa-car:before { - content: ""; -} - -.fa-cab:before, -.fa-taxi:before { - content: ""; -} - -.fa-tree:before { - content: ""; -} - -.fa-spotify:before { - content: ""; -} - -.fa-deviantart:before { - content: ""; -} - -.fa-soundcloud:before { - content: ""; -} - -.fa-database:before { - content: ""; -} - -.fa-file-pdf-o:before { - content: ""; -} - -.fa-file-word-o:before { - content: ""; -} - -.fa-file-excel-o:before { - content: ""; -} - -.fa-file-powerpoint-o:before { - content: ""; -} - -.fa-file-photo-o:before, -.fa-file-picture-o:before, -.fa-file-image-o:before { - content: ""; -} - -.fa-file-zip-o:before, -.fa-file-archive-o:before { - content: ""; -} - -.fa-file-sound-o:before, -.fa-file-audio-o:before { - content: ""; -} - -.fa-file-movie-o:before, -.fa-file-video-o:before { - content: ""; -} - -.fa-file-code-o:before { - content: ""; -} - -.fa-vine:before { - content: ""; -} - -.fa-codepen:before { - content: ""; -} - -.fa-jsfiddle:before { - content: ""; -} - -.fa-life-bouy:before, -.fa-life-buoy:before, -.fa-life-saver:before, -.fa-support:before, -.fa-life-ring:before { - content: ""; -} - -.fa-circle-o-notch:before { - content: ""; -} - -.fa-ra:before, -.fa-resistance:before, -.fa-rebel:before { - content: ""; -} - -.fa-ge:before, -.fa-empire:before { - content: ""; -} - -.fa-git-square:before { - content: ""; -} - -.fa-git:before { - content: ""; -} - -.fa-y-combinator-square:before, -.fa-yc-square:before, -.fa-hacker-news:before { - content: ""; -} - -.fa-tencent-weibo:before { - content: ""; -} - -.fa-qq:before { - content: ""; -} - -.fa-wechat:before, -.fa-weixin:before { - content: ""; -} - -.fa-send:before, -.fa-paper-plane:before { - content: ""; -} - -.fa-send-o:before, -.fa-paper-plane-o:before { - content: ""; -} - -.fa-history:before { - content: ""; -} - -.fa-circle-thin:before { - content: ""; -} - -.fa-header:before { - content: ""; -} - -.fa-paragraph:before { - content: ""; -} - -.fa-sliders:before { - content: ""; -} - -.fa-share-alt:before { - content: ""; -} - -.fa-share-alt-square:before { - content: ""; -} - -.fa-bomb:before { - content: ""; -} - -.fa-soccer-ball-o:before, -.fa-futbol-o:before { - content: ""; -} - -.fa-tty:before { - content: ""; -} - -.fa-binoculars:before { - content: ""; -} - -.fa-plug:before { - content: ""; -} - -.fa-slideshare:before { - content: ""; -} - -.fa-twitch:before { - content: ""; -} - -.fa-yelp:before { - content: ""; -} - -.fa-newspaper-o:before { - content: ""; -} - -.fa-wifi:before { - content: ""; -} - -.fa-calculator:before { - content: ""; -} - -.fa-paypal:before { - content: ""; -} - -.fa-google-wallet:before { - content: ""; -} - -.fa-cc-visa:before { - content: ""; -} - -.fa-cc-mastercard:before { - content: ""; -} - -.fa-cc-discover:before { - content: ""; -} - -.fa-cc-amex:before { - content: ""; -} - -.fa-cc-paypal:before { - content: ""; -} - -.fa-cc-stripe:before { - content: ""; -} - -.fa-bell-slash:before { - content: ""; -} - -.fa-bell-slash-o:before { - content: ""; -} - -.fa-trash:before { - content: ""; -} - -.fa-copyright:before { - content: ""; -} - -.fa-at:before { - content: ""; -} - -.fa-eyedropper:before { - content: ""; -} - -.fa-paint-brush:before { - content: ""; -} - -.fa-birthday-cake:before { - content: ""; -} - -.fa-area-chart:before { - content: ""; -} - -.fa-pie-chart:before { - content: ""; -} - -.fa-line-chart:before { - content: ""; -} - -.fa-lastfm:before { - content: ""; -} - -.fa-lastfm-square:before { - content: ""; -} - -.fa-toggle-off:before { - content: ""; -} - -.fa-toggle-on:before { - content: ""; -} - -.fa-bicycle:before { - content: ""; -} - -.fa-bus:before { - content: ""; -} - -.fa-ioxhost:before { - content: ""; -} - -.fa-angellist:before { - content: ""; -} - -.fa-cc:before { - content: ""; -} - -.fa-shekel:before, -.fa-sheqel:before, -.fa-ils:before { - content: ""; -} - -.fa-meanpath:before { - content: ""; -} - -.fa-buysellads:before { - content: ""; -} - -.fa-connectdevelop:before { - content: ""; -} - -.fa-dashcube:before { - content: ""; -} - -.fa-forumbee:before { - content: ""; -} - -.fa-leanpub:before { - content: ""; -} - -.fa-sellsy:before { - content: ""; -} - -.fa-shirtsinbulk:before { - content: ""; -} - -.fa-simplybuilt:before { - content: ""; -} - -.fa-skyatlas:before { - content: ""; -} - -.fa-cart-plus:before { - content: ""; -} - -.fa-cart-arrow-down:before { - content: ""; -} - -.fa-diamond:before { - content: ""; -} - -.fa-ship:before { - content: ""; -} - -.fa-user-secret:before { - content: ""; -} - -.fa-motorcycle:before { - content: ""; -} - -.fa-street-view:before { - content: ""; -} - -.fa-heartbeat:before { - content: ""; -} - -.fa-venus:before { - content: ""; -} - -.fa-mars:before { - content: ""; -} - -.fa-mercury:before { - content: ""; -} - -.fa-intersex:before, -.fa-transgender:before { - content: ""; -} - -.fa-transgender-alt:before { - content: ""; -} - -.fa-venus-double:before { - content: ""; -} - -.fa-mars-double:before { - content: ""; -} - -.fa-venus-mars:before { - content: ""; -} - -.fa-mars-stroke:before { - content: ""; -} - -.fa-mars-stroke-v:before { - content: ""; -} - -.fa-mars-stroke-h:before { - content: ""; -} - -.fa-neuter:before { - content: ""; -} - -.fa-genderless:before { - content: ""; -} - -.fa-facebook-official:before { - content: ""; -} - -.fa-pinterest-p:before { - content: ""; -} - -.fa-whatsapp:before { - content: ""; -} - -.fa-server:before { - content: ""; -} - -.fa-user-plus:before { - content: ""; -} - -.fa-user-times:before { - content: ""; -} - -.fa-hotel:before, -.fa-bed:before { - content: ""; -} - -.fa-viacoin:before { - content: ""; -} - -.fa-train:before { - content: ""; -} - -.fa-subway:before { - content: ""; -} - -.fa-medium:before { - content: ""; -} - -.fa-yc:before, -.fa-y-combinator:before { - content: ""; -} - -.fa-optin-monster:before { - content: ""; -} - -.fa-opencart:before { - content: ""; -} - -.fa-expeditedssl:before { - content: ""; -} - -.fa-battery-4:before, -.fa-battery-full:before { - content: ""; -} - -.fa-battery-3:before, -.fa-battery-three-quarters:before { - content: ""; -} - -.fa-battery-2:before, -.fa-battery-half:before { - content: ""; -} - -.fa-battery-1:before, -.fa-battery-quarter:before { - content: ""; -} - -.fa-battery-0:before, -.fa-battery-empty:before { - content: ""; -} - -.fa-mouse-pointer:before { - content: ""; -} - -.fa-i-cursor:before { - content: ""; -} - -.fa-object-group:before { - content: ""; -} - -.fa-object-ungroup:before { - content: ""; -} - -.fa-sticky-note:before { - content: ""; -} - -.fa-sticky-note-o:before { - content: ""; -} - -.fa-cc-jcb:before { - content: ""; -} - -.fa-cc-diners-club:before { - content: ""; -} - -.fa-clone:before { - content: ""; -} - -.fa-balance-scale:before { - content: ""; -} - -.fa-hourglass-o:before { - content: ""; -} - -.fa-hourglass-1:before, -.fa-hourglass-start:before { - content: ""; -} - -.fa-hourglass-2:before, -.fa-hourglass-half:before { - content: ""; -} - -.fa-hourglass-3:before, -.fa-hourglass-end:before { - content: ""; -} - -.fa-hourglass:before { - content: ""; -} - -.fa-hand-grab-o:before, -.fa-hand-rock-o:before { - content: ""; -} - -.fa-hand-stop-o:before, -.fa-hand-paper-o:before { - content: ""; -} - -.fa-hand-scissors-o:before { - content: ""; -} - -.fa-hand-lizard-o:before { - content: ""; -} - -.fa-hand-spock-o:before { - content: ""; -} - -.fa-hand-pointer-o:before { - content: ""; -} - -.fa-hand-peace-o:before { - content: ""; -} - -.fa-trademark:before { - content: ""; -} - -.fa-registered:before { - content: ""; -} - -.fa-creative-commons:before { - content: ""; -} - -.fa-gg:before { - content: ""; -} - -.fa-gg-circle:before { - content: ""; -} - -.fa-tripadvisor:before { - content: ""; -} - -.fa-odnoklassniki:before { - content: ""; -} - -.fa-odnoklassniki-square:before { - content: ""; -} - -.fa-get-pocket:before { - content: ""; -} - -.fa-wikipedia-w:before { - content: ""; -} - -.fa-safari:before { - content: ""; -} - -.fa-chrome:before { - content: ""; -} - -.fa-firefox:before { - content: ""; -} - -.fa-opera:before { - content: ""; -} - -.fa-internet-explorer:before { - content: ""; -} - -.fa-tv:before, -.fa-television:before { - content: ""; -} - -.fa-contao:before { - content: ""; -} - -.fa-500px:before { - content: ""; -} - -.fa-amazon:before { - content: ""; -} - -.fa-calendar-plus-o:before { - content: ""; -} - -.fa-calendar-minus-o:before { - content: ""; -} - -.fa-calendar-times-o:before { - content: ""; -} - -.fa-calendar-check-o:before { - content: ""; -} - -.fa-industry:before { - content: ""; -} - -.fa-map-pin:before { - content: ""; -} - -.fa-map-signs:before { - content: ""; -} - -.fa-map-o:before { - content: ""; -} - -.fa-map:before { - content: ""; -} - -.fa-commenting:before { - content: ""; -} - -.fa-commenting-o:before { - content: ""; -} - -.fa-houzz:before { - content: ""; -} - -.fa-vimeo:before { - content: ""; -} - -.fa-black-tie:before { - content: ""; -} - -.fa-fonticons:before { - content: ""; -} - -.fa-reddit-alien:before { - content: ""; -} - -.fa-edge:before { - content: ""; -} - -.fa-credit-card-alt:before { - content: ""; -} - -.fa-codiepie:before { - content: ""; -} - -.fa-modx:before { - content: ""; -} - -.fa-fort-awesome:before { - content: ""; -} - -.fa-usb:before { - content: ""; -} - -.fa-product-hunt:before { - content: ""; -} - -.fa-mixcloud:before { - content: ""; -} - -.fa-scribd:before { - content: ""; -} - -.fa-pause-circle:before { - content: ""; -} - -.fa-pause-circle-o:before { - content: ""; -} - -.fa-stop-circle:before { - content: ""; -} - -.fa-stop-circle-o:before { - content: ""; -} - -.fa-shopping-bag:before { - content: ""; -} - -.fa-shopping-basket:before { - content: ""; -} - -.fa-hashtag:before { - content: ""; -} - -.fa-bluetooth:before { - content: ""; -} - -.fa-bluetooth-b:before { - content: ""; -} - -.fa-percent:before { - content: ""; -} - -.fa-gitlab:before { - content: ""; -} - -.fa-wpbeginner:before { - content: ""; -} - -.fa-wpforms:before { - content: ""; -} - -.fa-envira:before { - content: ""; -} - -.fa-universal-access:before { - content: ""; -} - -.fa-wheelchair-alt:before { - content: ""; -} - -.fa-question-circle-o:before { - content: ""; -} - -.fa-blind:before { - content: ""; -} - -.fa-audio-description:before { - content: ""; -} - -.fa-volume-control-phone:before { - content: ""; -} - -.fa-braille:before { - content: ""; -} - -.fa-assistive-listening-systems:before { - content: ""; -} - -.fa-asl-interpreting:before, -.fa-american-sign-language-interpreting:before { - content: ""; -} - -.fa-deafness:before, -.fa-hard-of-hearing:before, -.fa-deaf:before { - content: ""; -} - -.fa-glide:before { - content: ""; -} - -.fa-glide-g:before { - content: ""; -} - -.fa-signing:before, -.fa-sign-language:before { - content: ""; -} - -.fa-low-vision:before { - content: ""; -} - -.fa-viadeo:before { - content: ""; -} - -.fa-viadeo-square:before { - content: ""; -} - -.fa-snapchat:before { - content: ""; -} - -.fa-snapchat-ghost:before { - content: ""; -} - -.fa-snapchat-square:before { - content: ""; -} - -.fa-pied-piper:before { - content: ""; -} - -.fa-first-order:before { - content: ""; -} - -.fa-yoast:before { - content: ""; -} - -.fa-themeisle:before { - content: ""; -} - -.fa-google-plus-circle:before, -.fa-google-plus-official:before { - content: ""; -} - -.fa-fa:before, -.fa-font-awesome:before { - content: ""; -} - -.sr-only { - position: absolute; - width: 1px; - height: 1px; - padding: 0; - margin: -1px; - overflow: hidden; - clip: rect(0, 0, 0, 0); - border: 0; -} - -.sr-only-focusable:active, .sr-only-focusable:focus { - position: static; - width: auto; - height: auto; - margin: 0; - overflow: visible; - clip: auto; -} - -.react-add-to-calendar { - -webkit-font-smoothing: antialiased; - text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.004); - position: relative; - display: inline-block; - margin: 0 auto; -} -.react-add-to-calendar__wrapper { - zoom: 1; - cursor: pointer; -} -.react-add-to-calendar__button { - padding: 10px; - background-color: #f9f9f9; - border: 1px solid #aab9d4; - border-radius: 3px; - color: #000; -} -.react-add-to-calendar__button--light { - background-color: #fff; -} -.react-add-to-calendar__icon--right { - padding-left: 5px; -} -.react-add-to-calendar__icon--left { - padding-right: 5px; -} -.react-add-to-calendar__dropdown { - position: absolute; - top: 30px; - left: 1px; - width: 93%; - padding: 5px 0 5px 8px; - box-shadow: 1px 3px 6px rgba(0, 0, 0, 0.15); - border: 1px solid #a8a8a8; - background-color: #fff; - text-align: left; -} -.react-add-to-calendar__dropdown ul { - list-style: none; - margin: 0; -} -.react-add-to-calendar__dropdown ul li a { - color: #000; - text-decoration: none; -} -.react-add-to-calendar__dropdown ul li a i { - padding-right: 10px; -} diff --git a/tournament-scheduler/dependencies/react-add-to-calendar/dist/react-add-to-calendar.js b/tournament-scheduler/dependencies/react-add-to-calendar/dist/react-add-to-calendar.js deleted file mode 100644 index 969c073f..00000000 --- a/tournament-scheduler/dependencies/react-add-to-calendar/dist/react-add-to-calendar.js +++ /dev/null @@ -1,670 +0,0 @@ -(function webpackUniversalModuleDefinition(root, factory) { - if (typeof exports === 'object' && typeof module === 'object') - module.exports = factory(require('react'), require('moment')) - else if (typeof define === 'function' && define.amd) - define(['react', 'moment'], factory) - else if (typeof exports === 'object') - exports['ReactAddToCalendar'] = factory(require('react'), require('moment')) - else - root['ReactAddToCalendar'] = factory(root['React'], root['moment']) -})(this, (__WEBPACK_EXTERNAL_MODULE_1__, __WEBPACK_EXTERNAL_MODULE_8__) => -/******/(function (modules) { // webpackBootstrap - /******/ // The module cache - /******/ var installedModules = {} - - /******/ // 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] = { - /******/ exports: {}, - /******/ id: moduleId, - /******/ loaded: false - /******/ - } - - /******/ // Execute the module function - /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__) - - /******/ // Flag the module as loaded - /******/ module.loaded = 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 - - /******/ // __webpack_public_path__ - /******/ __webpack_require__.p = '' - - /******/ // Load entry module and return exports - /******/ return __webpack_require__(0) - /******/ - }) - /************************************************************************/ - /******/([ - /* 0 */ - /***/ function (module, exports, __webpack_require__) { - - - - Object.defineProperty(exports, '__esModule', { - value: true - }) - - var _createClass = function () { function defineProperties(target, props) { for (var descriptor of props) { descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor) } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor } }() - - var _react = __webpack_require__(1) - - var _react2 = _interopRequireDefault(_react) - - var _propertyTypes = __webpack_require__(2) - - var _propertyTypes2 = _interopRequireDefault(_propertyTypes) - - var _helpers = __webpack_require__(7) - - var _helpers2 = _interopRequireDefault(_helpers) - - function _interopRequireDefault(object) { return object && object.__esModule ? object : { default: object } } - - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function') } } - - function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError('this hasn\'t been initialised - super() hasn\'t been called') } return call && (typeof call === 'object' || typeof call === 'function') ? call : self } - - function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError(`Super expression must either be null or a function, not ${typeof superClass}`) } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass } - - var helpers = new _helpers2.default() - - var ReactAddToCalendar = function (_React$Component) { - _inherits(ReactAddToCalendar, _React$Component) - - function ReactAddToCalendar(props) { - _classCallCheck(this, ReactAddToCalendar) - - var _this = _possibleConstructorReturn(this, (ReactAddToCalendar.__proto__ || Object.getPrototypeOf(ReactAddToCalendar)).call(this, props)) - - _this.state = { - optionsOpen: props.optionsOpen || false, - isCrappyIE: false - } - - _this.toggleCalendarDropdown = _this.toggleCalendarDropdown.bind(_this) - _this.handleDropdownLinkClick = _this.handleDropdownLinkClick.bind(_this) - return _this - } - - _createClass(ReactAddToCalendar, [{ - key: 'UNSAFE_componentWillMount', - value: function UNSAFE_componentWillMount() { - // polyfill for startsWith to fix IE bug - if (!String.prototype.startsWith) { - String.prototype.startsWith = function (searchString, position) { - position = position || 0 - return this.indexOf(searchString, position) === position - } - } - - var isCrappyIE = false - if (typeof window !== 'undefined' && window.navigator.msSaveOrOpenBlob && window.Blob) { - isCrappyIE = true - } - - this.setState({ isCrappyIE }) - } - }, { - key: 'toggleCalendarDropdown', - value: function toggleCalendarDropdown() { - var showOptions = !this.state.optionsOpen - - if (showOptions) { - document.addEventListener('click', this.toggleCalendarDropdown, { capture: true }) - } else { - document.removeEventListener('click', this.toggleCalendarDropdown, { capture: true }) - } - - this.setState({ optionsOpen: showOptions }) - } - }, { - key: 'handleDropdownLinkClick', - value: function handleDropdownLinkClick(e) { - e.preventDefault() - var url = e.currentTarget.getAttribute('href') - - if (!helpers.isMobile() && (url.startsWith('data') || url.startsWith('BEGIN'))) { - var filename = 'download.ics' - var blob = new Blob([url], { type: 'text/calendar;charset=utf-8' }) - - if (this.state.isCrappyIE) { - window.navigator.msSaveOrOpenBlob(blob, filename) - } else { - /**************************************************************** - // many browsers do not properly support downloading data URIs - // (even with "download" attribute in use) so this solution - // ensures the event will download cross-browser - ****************************************************************/ - var link = document.createElement('a') - link.href = window.URL.createObjectURL(blob) - link.setAttribute('download', filename) - document.body.append(link) - link.click() - link.remove() - } - } else { - window.open(url, '_blank') - } - - this.toggleCalendarDropdown() - } - }, { - key: 'renderDropdown', - value: function renderDropdown() { - var self = this - - var items = this.props.listItems.map(listItem => { - var currentItem = Object.keys(listItem)[0] - var currentLabel = listItem[currentItem] - - var icon = null - if (self.props.displayItemIcons) { - var currentIcon = currentItem === 'outlook' || currentItem === 'outlookcom' ? 'windows' : currentItem - icon = _react2.default.createElement('i', { className: `fa fa-${currentIcon}` }) - } - - return _react2.default.createElement( - 'li', - { key: helpers.getRandomKey() }, - _react2.default.createElement( - 'a', - { - className: `${currentItem}-link`, - onClick: self.handleDropdownLinkClick, - href: helpers.buildUrl(self.props.event, currentItem, self.state.isCrappyIE), - target: '_blank' - }, - icon, - currentLabel - ) - ) - }) - - return _react2.default.createElement( - 'div', - { className: this.props.dropdownClass }, - _react2.default.createElement( - 'ul', - null, - items - ) - ) - } - }, { - key: 'renderButton', - value: function renderButton() { - var buttonLabel = this.props.buttonLabel - var buttonIcon = null - var template = Object.keys(this.props.buttonTemplate) - - if (template[0] !== 'textOnly') { - var iconPlacement = this.props.buttonTemplate[template] - var buttonClassPrefix = this.props.buttonIconClass === 'react-add-to-calendar__icon--' ? `${this.props.buttonIconClass}${iconPlacement}` : this.props.buttonIconClass - var iconPrefix = this.props.useFontAwesomeIcons ? 'fa fa-' : '' - - var mainButtonIconClass = template[0] === 'caret' ? this.state.optionsOpen ? 'caret-up' : 'caret-down' : template[0] - - var buttonIconClass = `${buttonClassPrefix} ${iconPrefix}${mainButtonIconClass}` - - buttonIcon = _react2.default.createElement('i', { className: buttonIconClass }) - buttonLabel = iconPlacement === 'right' ? _react2.default.createElement( - 'span', - null, - `${buttonLabel} `, - buttonIcon - ) : _react2.default.createElement( - 'span', - null, - buttonIcon, - ` ${buttonLabel}` - ) - } - - var buttonClass = this.state.optionsOpen ? `${this.props.buttonClassClosed} ${this.props.buttonClassOpen}` : this.props.buttonClassClosed - - return _react2.default.createElement( - 'div', - { className: this.props.buttonWrapperClass }, - _react2.default.createElement( - 'a', - { className: buttonClass, onClick: this.toggleCalendarDropdown }, - buttonLabel - ) - ) - } - }, { - key: 'render', - value: function render() { - var options = null - if (this.state.optionsOpen) { - options = this.renderDropdown() - } - - var addToCalendarButton = null - if (this.props.event) { - addToCalendarButton = this.renderButton() - } - - return _react2.default.createElement( - 'div', - { className: this.props.rootClass }, - addToCalendarButton, - options - ) - } - }]) - - return ReactAddToCalendar - }(_react2.default.Component) - - exports.default = ReactAddToCalendar - - - ReactAddToCalendar.displayName = 'Add To Calendar' - - ReactAddToCalendar.propTypes = { - buttonClassClosed: _propertyTypes2.default.string, - buttonClassOpen: _propertyTypes2.default.string, - buttonLabel: _propertyTypes2.default.string, - buttonTemplate: _propertyTypes2.default.object, - buttonIconClass: _propertyTypes2.default.string, - useFontAwesomeIcons: _propertyTypes2.default.bool, - buttonWrapperClass: _propertyTypes2.default.string, - displayItemIcons: _propertyTypes2.default.bool, - optionsOpen: _propertyTypes2.default.bool, - dropdownClass: _propertyTypes2.default.string, - event: _propertyTypes2.default.shape({ - title: _propertyTypes2.default.string, - description: _propertyTypes2.default.string, - location: _propertyTypes2.default.string, - startTime: _propertyTypes2.default.string, - endTime: _propertyTypes2.default.string - }).isRequired, - listItems: _propertyTypes2.default.arrayOf(_propertyTypes2.default.object), - rootClass: _propertyTypes2.default.string - } - - ReactAddToCalendar.defaultProps = { - buttonClassClosed: 'react-add-to-calendar__button', - buttonClassOpen: 'react-add-to-calendar__button--light', - buttonLabel: 'Add to My Calendar', - buttonTemplate: { caret: 'right' }, - buttonIconClass: 'react-add-to-calendar__icon--', - useFontAwesomeIcons: true, - buttonWrapperClass: 'react-add-to-calendar__wrapper', - displayItemIcons: true, - optionsOpen: false, - dropdownClass: 'react-add-to-calendar__dropdown', - event: { - title: 'Sample Event', - description: 'This is the sample event provided as an example only', - location: 'Portland, OR', - startTime: '2016-09-16T20:15:00-04:00', - endTime: '2016-09-16T21:45:00-04:00' - }, - listItems: [{ apple: 'Apple Calendar' }, { google: 'Google' }, { outlook: 'Outlook' }, { outlookcom: 'Outlook.com' }, { yahoo: 'Yahoo' }], - rootClass: 'react-add-to-calendar' - } - - /***/ - }, - /* 1 */ - /***/ function (module, exports) { - - module.exports = __WEBPACK_EXTERNAL_MODULE_1__ - - /***/ - }, - /* 2 */ - /***/ function (module, exports, __webpack_require__) { - - /** - * Copyright (c) 2013-present, Facebook, Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - - if (false) { - } else { - // By explicitly using `prop-types` you are opting into new production behavior. - // http://fb.me/prop-types-in-prod - module.exports = __webpack_require__(3)() - } - - - /***/ - }, - /* 3 */ - /***/ function (module, exports, __webpack_require__) { - - /** - * Copyright (c) 2013-present, Facebook, Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - - - - var emptyFunction = __webpack_require__(4) - var invariant = __webpack_require__(5) - var ReactPropertyTypesSecret = __webpack_require__(6) - - module.exports = function () { - function shim(props, propertyName, componentName, location, propertyFullName, secret) { - if (secret === ReactPropertyTypesSecret) { - // It is still safe when called from React. - return - } - invariant( - false, - 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' + - 'Use PropTypes.checkPropTypes() to call them. ' + - 'Read more at http://fb.me/use-check-prop-types' - ) - } - shim.isRequired = shim - function getShim() { - return shim - } - // Important! - // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`. - var ReactPropertyTypes = { - array: shim, - bool: shim, - func: shim, - number: shim, - object: shim, - string: shim, - symbol: shim, - - any: shim, - arrayOf: getShim, - element: shim, - instanceOf: getShim, - node: shim, - objectOf: getShim, - oneOf: getShim, - oneOfType: getShim, - shape: getShim, - exact: getShim - } - - ReactPropertyTypes.checkPropTypes = emptyFunction - ReactPropertyTypes.PropTypes = ReactPropertyTypes - - return ReactPropertyTypes - } - - - /***/ - }, - /* 4 */ - /***/ function (module, exports) { - - - - /** - * Copyright (c) 2013-present, Facebook, Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * - */ - - function makeEmptyFunction(argument) { - return function () { - return argument - } - } - - /** - * This function accepts and discards inputs; it has no side effects. This is - * primarily useful idiomatically for overridable function endpoints which - * always need to be callable, since JS lacks a null-call idiom ala Cocoa. - */ - var emptyFunction = function emptyFunction() { } - - emptyFunction.thatReturns = makeEmptyFunction - emptyFunction.thatReturnsFalse = makeEmptyFunction(false) - emptyFunction.thatReturnsTrue = makeEmptyFunction(true) - emptyFunction.thatReturnsNull = makeEmptyFunction(null) - emptyFunction.thatReturnsThis = function () { - return this - } - emptyFunction.thatReturnsArgument = function (argument) { - return argument - } - - module.exports = emptyFunction - - /***/ - }, - /* 5 */ - /***/ function (module, exports, __webpack_require__) { - - /** - * Copyright (c) 2013-present, Facebook, Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - */ - - - - /** - * Use invariant() to assert state which your program assumes to be true. - * - * Provide sprintf-style format (only %s is supported) and arguments - * to provide information about what broke and what you were - * expecting. - * - * The invariant message will be stripped in production, but the invariant - * will remain to ensure logic does not differ in production. - */ - - var validateFormat = function validateFormat(format) { } - - - function invariant(condition, format, a, b, c, d, e, f) { - validateFormat(format) - - if (!condition) { - var error - if (format === undefined) { - error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.') - } else { - var args = [a, b, c, d, e, f] - var argumentIndex = 0 - error = new Error(format.replace(/%s/g, () => args[argumentIndex++])) - error.name = 'Invariant Violation' - } - - error.framesToPop = 1 // we don't care about invariant's own frame - throw error - } - } - - module.exports = invariant - - /***/ - }, - /* 6 */ - /***/ function (module, exports) { - - /** - * Copyright (c) 2013-present, Facebook, Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - - - - var ReactPropertyTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED' - - module.exports = ReactPropertyTypesSecret - - - /***/ - }, - /* 7 */ - /***/ function (module, exports, __webpack_require__) { - - - - Object.defineProperty(exports, '__esModule', { - value: true - }) - - var _createClass = function () { function defineProperties(target, props) { for (var descriptor of props) { descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor) } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor } }() - - var _moment = __webpack_require__(8) - - var _moment2 = _interopRequireDefault(_moment) - - function _interopRequireDefault(object) { return object && object.__esModule ? object : { default: object } } - - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function') } } - - var helpers = function () { - function helpers() { - _classCallCheck(this, helpers) - } - - _createClass(helpers, [{ - key: 'getRandomKey', - value: function getRandomKey() { - var n = Math.floor(Math.random() * 999999999999).toString() - return `${Date.now().toString()}_${n}` - } - }, { - key: 'formatTime', - value: function formatTime(date) { - var formattedDate = _moment2.default.utc(date).format('YYYYMMDDTHHmmssZ') - return formattedDate.replace('+00:00', 'Z') - } - }, { - key: 'formatOutlookTime', - value: function formatOutlookTime(date) { - var formattedDate = _moment2.default.utc(date).format('YYYY-MM-DDTHH:mm:ssZ') - return formattedDate.replace('+00:00', 'Z') - } - }, { - key: 'calculateDuration', - value: function calculateDuration(startTime, endTime) { - // snag parameters and format properly in UTC - var end = _moment2.default.utc(endTime).format('DD/MM/YYYY HH:mm:ss') - var start = _moment2.default.utc(startTime).format('DD/MM/YYYY HH:mm:ss') - - // calculate the difference in milliseconds between the start and end times - var difference = (0, _moment2.default)(end, 'DD/MM/YYYY HH:mm:ss').diff((0, _moment2.default)(start, 'DD/MM/YYYY HH:mm:ss')) - - // convert difference from above to a proper momentJs duration object - var duration = _moment2.default.duration(difference) - - return Math.floor(duration.asHours()) + _moment2.default.utc(difference).format(':mm') - } - }, { - key: 'buildUrl', - value: function buildUrl(event, type, isCrappyIE) { - var calendarUrl = '' - - // allow mobile browsers to open the gmail data URI within native calendar app - // type = (type == "google" && this.isMobile()) ? "outlook" : type; - - switch (type) { - case 'google': - calendarUrl = 'https://calendar.google.com/calendar/render' - calendarUrl += '?action=TEMPLATE' - calendarUrl += `&dates=${this.formatTime(event.startTime)}` - calendarUrl += `/${this.formatTime(event.endTime)}` - calendarUrl += `&location=${encodeURIComponent(event.location)}` - calendarUrl += `&text=${encodeURIComponent(event.title)}` - calendarUrl += `&details=${encodeURIComponent(event.description)}` - break - case 'yahoo': - // yahoo doesn't utilize endTime so we need to calulate duration - var duration = this.calculateDuration(event.startTime, event.endTime) - calendarUrl = 'https://calendar.yahoo.com/?v=60&view=d&type=20' - calendarUrl += `&title=${encodeURIComponent(event.title)}` - calendarUrl += `&st=${this.formatTime(event.startTime)}` - calendarUrl += `&dur=${duration}` - calendarUrl += `&desc=${encodeURIComponent(event.description)}` - calendarUrl += `&in_loc=${encodeURIComponent(event.location)}` - break - case 'outlookcom': - calendarUrl = 'https://outlook.live.com/owa/?rru=addevent' - calendarUrl += `&startdt=${this.formatOutlookTime(event.startTime)}` - calendarUrl += `&enddt=${this.formatOutlookTime(event.endTime)}` - calendarUrl += `&subject=${encodeURIComponent(event.title)}` - calendarUrl += `&location=${encodeURIComponent(event.location)}` - calendarUrl += `&body=${encodeURIComponent(event.description)}` - calendarUrl += '&allday=false' - calendarUrl += `&uid=${this.getRandomKey()}` - calendarUrl += '&path=/calendar/view/Month' - break - default: - calendarUrl = ['BEGIN:VCALENDAR', 'VERSION:2.0', 'BEGIN:VEVENT', `URL:${document.URL}`, `DTSTART:${this.formatTime(event.startTime)}`, `DTEND:${this.formatTime(event.endTime)}`, `SUMMARY:${event.title}`, `DESCRIPTION:${event.description}`, `LOCATION:${event.location}`, 'END:VEVENT', 'END:VCALENDAR'].join('\n') - - if (!isCrappyIE && this.isMobile()) { - calendarUrl = encodeURI(`data:text/calendar;charset=utf8,${calendarUrl}`) - } - } - - return calendarUrl - } - - // determine if a mobile browser is being used - - }, { - key: 'isMobile', - value: function isMobile() { - var mobile = false; - - (function (a) { - if ((/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i).test(a) || (/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[23]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i).test(a.slice(0, 4))) mobile = true - })(window.navigator.userAgent || window.navigator.vendor || window.opera) - - return mobile - } - }]) - - return helpers - }() - - exports.default = helpers - - /***/ - }, - /* 8 */ - /***/ function (module, exports) { - - module.exports = __WEBPACK_EXTERNAL_MODULE_8__ - - /***/ - } - /******/])) - diff --git a/tournament-scheduler/dependencies/react-add-to-calendar/dist/react-add-to-calendar.min.css b/tournament-scheduler/dependencies/react-add-to-calendar/dist/react-add-to-calendar.min.css deleted file mode 100644 index be3e4f03..00000000 --- a/tournament-scheduler/dependencies/react-add-to-calendar/dist/react-add-to-calendar.min.css +++ /dev/null @@ -1,4 +0,0 @@ -/*! - * Font Awesome 4.6.3 by @davegandy - http://fontawesome.io - @fontawesome - * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */@font-face{font-family:'FontAwesome';src:url("//netdna.bootstrapcdn.com/font-awesome/4.6.3/fonts/fontawesome-webfont.eot?v=4.6.3");src:url("//netdna.bootstrapcdn.com/font-awesome/4.6.3/fonts/fontawesome-webfont.eot?#iefix&v=4.6.3") format("embedded-opentype"),url("//netdna.bootstrapcdn.com/font-awesome/4.6.3/fonts/fontawesome-webfont.woff2?v=4.6.3") format("woff2"),url("//netdna.bootstrapcdn.com/font-awesome/4.6.3/fonts/fontawesome-webfont.woff?v=4.6.3") format("woff"),url("//netdna.bootstrapcdn.com/font-awesome/4.6.3/fonts/fontawesome-webfont.ttf?v=4.6.3") format("truetype"),url("//netdna.bootstrapcdn.com/font-awesome/4.6.3/fonts/fontawesome-webfont.svg?v=4.6.3#fontawesomeregular") format("svg");font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.3333333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.2857142857em;text-align:center}.fa-ul{padding-left:0;margin-left:2.1428571429em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.1428571429em;width:2.1428571429em;top:.1428571429em;text-align:center}.fa-li.fa-lg{left:-1.8571428571em}.fa-border{padding:.2em .25em .15em;border:solid 0.08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-remove:before,.fa-close:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-gear:before,.fa-cog:before{content:""}.fa-trash-o:before{content:""}.fa-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-rotate-right:before,.fa-repeat:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before{content:""}.fa-check-circle:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-warning:before,.fa-exclamation-triangle:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-gears:before,.fa-cogs:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before{content:""}.fa-arrow-circle-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-save:before,.fa-floppy-o:before{content:""}.fa-square:before{content:""}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-unsorted:before,.fa-sort:before{content:""}.fa-sort-down:before,.fa-sort-desc:before{content:""}.fa-sort-up:before,.fa-sort-asc:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-legal:before,.fa-gavel:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-flash:before,.fa-bolt:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-paste:before,.fa-clipboard:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-unlink:before,.fa-chain-broken:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:""}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:""}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:""}.fa-euro:before,.fa-eur:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-rupee:before,.fa-inr:before{content:""}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:""}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:""}.fa-won:before,.fa-krw:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-turkish-lira:before,.fa-try:before{content:""}.fa-plus-square-o:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-institution:before,.fa-bank:before,.fa-university:before{content:""}.fa-mortar-board:before,.fa-graduation-cap:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:""}.fa-file-zip-o:before,.fa-file-archive-o:before{content:""}.fa-file-sound-o:before,.fa-file-audio-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:""}.fa-ge:before,.fa-empire:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-send:before,.fa-paper-plane:before{content:""}.fa-send-o:before,.fa-paper-plane-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-hotel:before,.fa-bed:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-yc:before,.fa-y-combinator:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-tv:before,.fa-television:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:""}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-signing:before,.fa-sign-language:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.react-add-to-calendar{-webkit-font-smoothing:antialiased;text-shadow:1px 1px 1px rgba(0,0,0,0.004);position:relative;display:inline-block;margin:0 auto}.react-add-to-calendar__wrapper{zoom:1;cursor:pointer}.react-add-to-calendar__button{padding:10px;background-color:#f9f9f9;border:1px solid #aab9d4;border-radius:3px;color:#000}.react-add-to-calendar__button--light{background-color:#fff}.react-add-to-calendar__icon--right{padding-left:5px}.react-add-to-calendar__icon--left{padding-right:5px}.react-add-to-calendar__dropdown{position:absolute;top:30px;left:1px;width:93%;padding:5px 0 5px 8px;box-shadow:1px 3px 6px rgba(0,0,0,0.15);border:1px solid #a8a8a8;background-color:#fff;text-align:left}.react-add-to-calendar__dropdown ul{list-style:none;margin:0}.react-add-to-calendar__dropdown ul li a{color:#000;text-decoration:none}.react-add-to-calendar__dropdown ul li a i{padding-right:10px} diff --git a/tournament-scheduler/dependencies/react-add-to-calendar/dist/react-add-to-calendar.min.js b/tournament-scheduler/dependencies/react-add-to-calendar/dist/react-add-to-calendar.min.js deleted file mode 100644 index adb49be7..00000000 --- a/tournament-scheduler/dependencies/react-add-to-calendar/dist/react-add-to-calendar.min.js +++ /dev/null @@ -1 +0,0 @@ -(function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("react"),require("moment")):"function"==typeof define&&define.amd?define(["react","moment"],t):"object"==typeof exports?exports.ReactAddToCalendar=t(require("react"),require("moment")):e.ReactAddToCalendar=t(e.React,e.moment)})(this,(e,t)=>(function(e){function t(n){if(o[n])return o[n].exports;var a=o[n]={exports:{},id:n,loaded:!1};return e[n].call(a.exports,a,a.exports,t),a.loaded=!0,a.exports}var o={};return t.m=e,t.c=o,t.p="",t(0)})([function(e,t,o){function n(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError(`Super expression must either be null or a function, not ${typeof t}`);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var s=function(){function e(e,t){for(var o of t)o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}return function(t,o,n){return o&&e(t.prototype,o),n&&e(t,n),t}}(),l=o(1),c=n(l),u=o(2),d=n(u),p=o(7),m=n(p),f=new m.default,h=function(e){function t(e){a(this,t);var o=r(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return o.state={optionsOpen:e.optionsOpen||!1,isCrappyIE:!1},o.toggleCalendarDropdown=o.toggleCalendarDropdown.bind(o),o.handleDropdownLinkClick=o.handleDropdownLinkClick.bind(o),o}return i(t,e),s(t,[{key:"UNSAFE_componentWillMount",value:function(){String.prototype.startsWith||(String.prototype.startsWith=function(e,t){return t=t||0,this.indexOf(e,t)===t});var e=!1;"undefined"!=typeof window&&window.navigator.msSaveOrOpenBlob&&window.Blob&&(e=!0),this.setState({isCrappyIE:e})}},{key:"toggleCalendarDropdown",value:function(){var e=!this.state.optionsOpen;e?document.addEventListener("click",this.toggleCalendarDropdown,{capture:!0}):document.removeEventListener("click",this.toggleCalendarDropdown,{capture:!0}),this.setState({optionsOpen:e})}},{key:"handleDropdownLinkClick",value:function(e){e.preventDefault();var t=e.currentTarget.getAttribute("href");if(f.isMobile()||!t.startsWith("data")&&!t.startsWith("BEGIN"))window.open(t,"_blank");else{var o="download.ics",n=new Blob([t],{type:"text/calendar;charset=utf-8"});if(this.state.isCrappyIE)window.navigator.msSaveOrOpenBlob(n,o);else{var a=document.createElement("a");a.href=window.URL.createObjectURL(n),a.setAttribute("download",o),document.body.append(a),a.click(),a.remove()}}this.toggleCalendarDropdown()}},{key:"renderDropdown",value:function(){var e=this,t=this.props.listItems.map(t=>{var o=Object.keys(t)[0],n=t[o],a=null;if(e.props.displayItemIcons){var r="outlook"===o||"outlookcom"===o?"windows":o;a=c.default.createElement("i",{className:`fa fa-${r}`})}return c.default.createElement("li",{key:f.getRandomKey()},c.default.createElement("a",{className:`${o}-link`,onClick:e.handleDropdownLinkClick,href:f.buildUrl(e.props.event,o,e.state.isCrappyIE),target:"_blank"},a,n))});return c.default.createElement("div",{className:this.props.dropdownClass},c.default.createElement("ul",null,t))}},{key:"renderButton",value:function(){var e=this.props.buttonLabel,t=null,o=Object.keys(this.props.buttonTemplate);if("textOnly"!==o[0]){var n=this.props.buttonTemplate[o],a="react-add-to-calendar__icon--"===this.props.buttonIconClass?`${this.props.buttonIconClass}${n}`:this.props.buttonIconClass,r=this.props.useFontAwesomeIcons?"fa fa-":"",i="caret"===o[0]?this.state.optionsOpen?"caret-up":"caret-down":o[0],s=`${a} ${r}${i}`;t=c.default.createElement("i",{className:s}),e="right"===n?c.default.createElement("span",null,`${e} `,t):c.default.createElement("span",null,t,` ${e}`)}var l=this.state.optionsOpen?`${this.props.buttonClassClosed} ${this.props.buttonClassOpen}`:this.props.buttonClassClosed;return c.default.createElement("div",{className:this.props.buttonWrapperClass},c.default.createElement("a",{className:l,onClick:this.toggleCalendarDropdown},e))}},{key:"render",value:function(){var e=null;this.state.optionsOpen&&(e=this.renderDropdown());var t=null;return this.props.event&&(t=this.renderButton()),c.default.createElement("div",{className:this.props.rootClass},t,e)}}]),t}(c.default.Component);t.default=h,h.displayName="Add To Calendar",h.propTypes={buttonClassClosed:d.default.string,buttonClassOpen:d.default.string,buttonLabel:d.default.string,buttonTemplate:d.default.object,buttonIconClass:d.default.string,useFontAwesomeIcons:d.default.bool,buttonWrapperClass:d.default.string,displayItemIcons:d.default.bool,optionsOpen:d.default.bool,dropdownClass:d.default.string,event:d.default.shape({title:d.default.string,description:d.default.string,location:d.default.string,startTime:d.default.string,endTime:d.default.string}).isRequired,listItems:d.default.arrayOf(d.default.object),rootClass:d.default.string},h.defaultProps={buttonClassClosed:"react-add-to-calendar__button",buttonClassOpen:"react-add-to-calendar__button--light",buttonLabel:"Add to My Calendar",buttonTemplate:{caret:"right"},buttonIconClass:"react-add-to-calendar__icon--",useFontAwesomeIcons:!0,buttonWrapperClass:"react-add-to-calendar__wrapper",displayItemIcons:!0,optionsOpen:!1,dropdownClass:"react-add-to-calendar__dropdown",event:{title:"Sample Event",description:"This is the sample event provided as an example only",location:"Portland, OR",startTime:"2016-09-16T20:15:00-04:00",endTime:"2016-09-16T21:45:00-04:00"},listItems:[{apple:"Apple Calendar"},{google:"Google"},{outlook:"Outlook"},{outlookcom:"Outlook.com"},{yahoo:"Yahoo"}],rootClass:"react-add-to-calendar"}},function(t,o){t.exports=e},function(e,t,o){e.exports=o(3)()},function(e,t,o){var n=o(4),a=o(5),r=o(6);e.exports=function(){function e(e,t,o,n,i,s){s!==r&&a(!1,"Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types")}function t(){return e}e.isRequired=e;var o={array:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t};return o.checkPropTypes=n,o.PropTypes=o,o}},function(e,t){function o(e){return function(){return e}}var n=function(){};n.thatReturns=o,n.thatReturnsFalse=o(!1),n.thatReturnsTrue=o(!0),n.thatReturnsNull=o(null),n.thatReturnsThis=function(){return this},n.thatReturnsArgument=function(e){return e},e.exports=n},function(e,t,o){function n(e,t,o,n,r,i,s,l){if(a(t),!e){var c;if(void 0===t)c=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var u=[o,n,r,i,s,l],d=0;c=new Error(t.replace(/%s/g,()=>u[d++])),c.name="Invariant Violation"}throw c.framesToPop=1,c}}var a=function(e){};e.exports=n},function(e,t){var o="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED";e.exports=o},function(e,t,o){function n(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e,t){for(var o of t)o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}return function(t,o,n){return o&&e(t.prototype,o),n&&e(t,n),t}}(),i=o(8),s=n(i),l=function(){function e(){a(this,e)}return r(e,[{key:"getRandomKey",value:function(){var e=Math.floor(999999999999*Math.random()).toString();return`${Date.now().toString()}_${e}`}},{key:"formatTime",value:function(e){var t=s.default.utc(e).format("YYYYMMDDTHHmmssZ");return t.replace("+00:00","Z")}},{key:"formatOutlookTime",value:function(e){var t=s.default.utc(e).format("YYYY-MM-DDTHH:mm:ssZ");return t.replace("+00:00","Z")}},{key:"calculateDuration",value:function(e,t){var o=s.default.utc(t).format("DD/MM/YYYY HH:mm:ss"),n=s.default.utc(e).format("DD/MM/YYYY HH:mm:ss"),a=(0,s.default)(o,"DD/MM/YYYY HH:mm:ss").diff((0,s.default)(n,"DD/MM/YYYY HH:mm:ss")),r=s.default.duration(a);return Math.floor(r.asHours())+s.default.utc(a).format(":mm")}},{key:"buildUrl",value:function(e,t,o){var n="";switch(t){case"google":n="https://calendar.google.com/calendar/render",n+="?action=TEMPLATE",n+=`&dates=${this.formatTime(e.startTime)}`,n+=`/${this.formatTime(e.endTime)}`,n+=`&location=${encodeURIComponent(e.location)}`,n+=`&text=${encodeURIComponent(e.title)}`,n+=`&details=${encodeURIComponent(e.description)}`;break;case"yahoo":var a=this.calculateDuration(e.startTime,e.endTime);n="https://calendar.yahoo.com/?v=60&view=d&type=20",n+=`&title=${encodeURIComponent(e.title)}`,n+=`&st=${this.formatTime(e.startTime)}`,n+=`&dur=${a}`,n+=`&desc=${encodeURIComponent(e.description)}`,n+=`&in_loc=${encodeURIComponent(e.location)}`;break;case"outlookcom":n="https://outlook.live.com/owa/?rru=addevent",n+=`&startdt=${this.formatOutlookTime(e.startTime)}`,n+=`&enddt=${this.formatOutlookTime(e.endTime)}`,n+=`&subject=${encodeURIComponent(e.title)}`,n+=`&location=${encodeURIComponent(e.location)}`,n+=`&body=${encodeURIComponent(e.description)}`,n+="&allday=false",n+=`&uid=${this.getRandomKey()}`,n+="&path=/calendar/view/Month";break;default:n=["BEGIN:VCALENDAR","VERSION:2.0","BEGIN:VEVENT",`URL:${document.URL}`,`DTSTART:${this.formatTime(e.startTime)}`,`DTEND:${this.formatTime(e.endTime)}`,`SUMMARY:${e.title}`,`DESCRIPTION:${e.description}`,`LOCATION:${e.location}`,"END:VEVENT","END:VCALENDAR"].join("\n"),!o&&this.isMobile()&&(n=encodeURI(`data:text/calendar;charset=utf8,${n}`))}return n}},{key:"isMobile",value:function(){var e,t=!1;return e=window.navigator.userAgent||window.navigator.vendor||window.opera,(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(e)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[23]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(e.slice(0,4)))&&(t=!0),t}}]),e}();t.default=l},function(e,o){e.exports=t}])); \ No newline at end of file diff --git a/tournament-scheduler/dependencies/react-add-to-calendar/lib/ReactAddToCalendar.js b/tournament-scheduler/dependencies/react-add-to-calendar/lib/ReactAddToCalendar.js deleted file mode 100644 index 6fb4540c..00000000 --- a/tournament-scheduler/dependencies/react-add-to-calendar/lib/ReactAddToCalendar.js +++ /dev/null @@ -1,267 +0,0 @@ - - -Object.defineProperty(exports, '__esModule', { - value: true -}) - -var _createClass = function () { function defineProperties(target, props) { for (var descriptor of props) { descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor) } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor } }() - -var _react = require('react') - -var _react2 = _interopRequireDefault(_react) - -var _propTypes = require('prop-types') - -var _propertyTypes2 = _interopRequireDefault(_propTypes) - -var _helpers = require('./helpers') - -var _helpers2 = _interopRequireDefault(_helpers) - -function _interopRequireDefault(object) { return object && object.__esModule ? object : { default: object } } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function') } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError('this hasn\'t been initialised - super() hasn\'t been called') } return call && (typeof call === 'object' || typeof call === 'function') ? call : self } - -function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError(`Super expression must either be null or a function, not ${typeof superClass}`) } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass } - -var helpers = new _helpers2.default() - -var ReactAddToCalendar = function (_React$Component) { - _inherits(ReactAddToCalendar, _React$Component) - - function ReactAddToCalendar(props) { - _classCallCheck(this, ReactAddToCalendar) - - var _this = _possibleConstructorReturn(this, (ReactAddToCalendar.__proto__ || Object.getPrototypeOf(ReactAddToCalendar)).call(this, props)) - - _this.state = { - optionsOpen: props.optionsOpen || false, - isCrappyIE: false - } - - _this.toggleCalendarDropdown = _this.toggleCalendarDropdown.bind(_this) - _this.handleDropdownLinkClick = _this.handleDropdownLinkClick.bind(_this) - return _this - } - - _createClass(ReactAddToCalendar, [{ - key: 'UNSAFE_componentWillMount', - value: function UNSAFE_componentWillMount() { - // polyfill for startsWith to fix IE bug - if (!String.prototype.startsWith) { - String.prototype.startsWith = function (searchString, position) { - position = position || 0 - return this.indexOf(searchString, position) === position - } - } - - var isCrappyIE = false - if (typeof window !== 'undefined' && window.navigator.msSaveOrOpenBlob && window.Blob) { - isCrappyIE = true - } - - this.setState({ isCrappyIE }) - } - }, { - key: 'toggleCalendarDropdown', - value: function toggleCalendarDropdown() { - var showOptions = !this.state.optionsOpen - - if (showOptions) { - document.addEventListener('click', this.toggleCalendarDropdown, { capture: true }) - } else { - document.removeEventListener('click', this.toggleCalendarDropdown, { capture: true }) - } - - this.setState({ optionsOpen: showOptions }) - } - }, { - key: 'handleDropdownLinkClick', - value: function handleDropdownLinkClick(e) { - e.preventDefault() - var url = e.currentTarget.getAttribute('href') - - if (!helpers.isMobile() && (url.startsWith('data') || url.startsWith('BEGIN'))) { - var filename = 'download.ics' - var blob = new Blob([url], { type: 'text/calendar;charset=utf-8' }) - - if (this.state.isCrappyIE) { - window.navigator.msSaveOrOpenBlob(blob, filename) - } else { - /**************************************************************** - // many browsers do not properly support downloading data URIs - // (even with "download" attribute in use) so this solution - // ensures the event will download cross-browser - ****************************************************************/ - var link = document.createElement('a') - link.href = window.URL.createObjectURL(blob) - link.setAttribute('download', filename) - document.body.append(link) - link.click() - link.remove() - } - } else { - window.open(url, '_blank') - } - - this.toggleCalendarDropdown() - } - }, { - key: 'renderDropdown', - value: function renderDropdown() { - var self = this - - var items = this.props.listItems.map(listItem => { - var currentItem = Object.keys(listItem)[0] - var currentLabel = listItem[currentItem] - - var icon = null - if (self.props.displayItemIcons) { - var currentIcon = currentItem === 'outlook' || currentItem === 'outlookcom' ? 'windows' : currentItem - icon = _react2.default.createElement('i', { className: `fa fa-${currentIcon}` }) - } - - return _react2.default.createElement( - 'li', - { key: helpers.getRandomKey() }, - _react2.default.createElement( - 'a', - { - className: `${currentItem}-link`, - onClick: self.handleDropdownLinkClick, - href: helpers.buildUrl(self.props.event, currentItem, self.state.isCrappyIE), - target: '_blank' - }, - icon, - currentLabel - ) - ) - }) - - return _react2.default.createElement( - 'div', - { className: this.props.dropdownClass }, - _react2.default.createElement( - 'ul', - null, - items - ) - ) - } - }, { - key: 'renderButton', - value: function renderButton() { - var buttonLabel = this.props.buttonLabel - var buttonIcon = null - var template = Object.keys(this.props.buttonTemplate) - - if (template[0] !== 'textOnly') { - var iconPlacement = this.props.buttonTemplate[template] - var buttonClassPrefix = this.props.buttonIconClass === 'react-add-to-calendar__icon--' ? `${this.props.buttonIconClass}${iconPlacement}` : this.props.buttonIconClass - var iconPrefix = this.props.useFontAwesomeIcons ? 'fa fa-' : '' - - var mainButtonIconClass = template[0] === 'caret' ? this.state.optionsOpen ? 'caret-up' : 'caret-down' : template[0] - - var buttonIconClass = `${buttonClassPrefix} ${iconPrefix}${mainButtonIconClass}` - - buttonIcon = _react2.default.createElement('i', { className: buttonIconClass }) - buttonLabel = iconPlacement === 'right' ? _react2.default.createElement( - 'span', - null, - `${buttonLabel} `, - buttonIcon - ) : _react2.default.createElement( - 'span', - null, - buttonIcon, - ` ${buttonLabel}` - ) - } - - var buttonClass = this.state.optionsOpen ? `${this.props.buttonClassClosed} ${this.props.buttonClassOpen}` : this.props.buttonClassClosed - - return _react2.default.createElement( - 'div', - { className: this.props.buttonWrapperClass }, - _react2.default.createElement( - 'a', - { className: buttonClass, onClick: this.toggleCalendarDropdown }, - buttonLabel - ) - ) - } - }, { - key: 'render', - value: function render() { - var options = null - if (this.state.optionsOpen) { - options = this.renderDropdown() - } - - var addToCalendarButton = null - if (this.props.event) { - addToCalendarButton = this.renderButton() - } - - return _react2.default.createElement( - 'div', - { className: this.props.rootClass }, - addToCalendarButton, - options - ) - } - }]) - - return ReactAddToCalendar -}(_react2.default.Component) - -exports.default = ReactAddToCalendar - - -ReactAddToCalendar.displayName = 'Add To Calendar' - -ReactAddToCalendar.propTypes = { - buttonClassClosed: _propertyTypes2.default.string, - buttonClassOpen: _propertyTypes2.default.string, - buttonLabel: _propertyTypes2.default.string, - buttonTemplate: _propertyTypes2.default.object, - buttonIconClass: _propertyTypes2.default.string, - useFontAwesomeIcons: _propertyTypes2.default.bool, - buttonWrapperClass: _propertyTypes2.default.string, - displayItemIcons: _propertyTypes2.default.bool, - optionsOpen: _propertyTypes2.default.bool, - dropdownClass: _propertyTypes2.default.string, - event: _propertyTypes2.default.shape({ - title: _propertyTypes2.default.string, - description: _propertyTypes2.default.string, - location: _propertyTypes2.default.string, - startTime: _propertyTypes2.default.string, - endTime: _propertyTypes2.default.string - }).isRequired, - listItems: _propertyTypes2.default.arrayOf(_propertyTypes2.default.object), - rootClass: _propertyTypes2.default.string -} - -ReactAddToCalendar.defaultProps = { - buttonClassClosed: 'react-add-to-calendar__button', - buttonClassOpen: 'react-add-to-calendar__button--light', - buttonLabel: 'Add to My Calendar', - buttonTemplate: { caret: 'right' }, - buttonIconClass: 'react-add-to-calendar__icon--', - useFontAwesomeIcons: true, - buttonWrapperClass: 'react-add-to-calendar__wrapper', - displayItemIcons: true, - optionsOpen: false, - dropdownClass: 'react-add-to-calendar__dropdown', - event: { - title: 'Sample Event', - description: 'This is the sample event provided as an example only', - location: 'Portland, OR', - startTime: '2016-09-16T20:15:00-04:00', - endTime: '2016-09-16T21:45:00-04:00' - }, - listItems: [{ apple: 'Apple Calendar' }, { google: 'Google' }, { outlook: 'Outlook' }, { outlookcom: 'Outlook.com' }, { yahoo: 'Yahoo' }], - rootClass: 'react-add-to-calendar' -} diff --git a/tournament-scheduler/dependencies/react-add-to-calendar/lib/helpers/index.js b/tournament-scheduler/dependencies/react-add-to-calendar/lib/helpers/index.js deleted file mode 100644 index 5fe99b04..00000000 --- a/tournament-scheduler/dependencies/react-add-to-calendar/lib/helpers/index.js +++ /dev/null @@ -1,126 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _moment = require("moment"); - -var _moment2 = _interopRequireDefault(_moment); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var helpers = function () { - function helpers() { - _classCallCheck(this, helpers); - } - - _createClass(helpers, [{ - key: "getRandomKey", - value: function getRandomKey() { - var n = Math.floor(Math.random() * 999999999999).toString(); - return new Date().getTime().toString() + "_" + n; - } - }, { - key: "formatTime", - value: function formatTime(date) { - var formattedDate = _moment2.default.utc(date).format("YYYYMMDDTHHmmssZ"); - return formattedDate.replace("+00:00", "Z"); - } - }, { - key: "formatOutlookTime", - value: function formatOutlookTime(date) { - var formattedDate = _moment2.default.utc(date).format("YYYY-MM-DDTHH:mm:ssZ"); - return formattedDate.replace("+00:00", "Z"); - } - }, { - key: "calculateDuration", - value: function calculateDuration(startTime, endTime) { - // snag parameters and format properly in UTC - var end = _moment2.default.utc(endTime).format("DD/MM/YYYY HH:mm:ss"); - var start = _moment2.default.utc(startTime).format("DD/MM/YYYY HH:mm:ss"); - - // calculate the difference in milliseconds between the start and end times - var difference = (0, _moment2.default)(end, "DD/MM/YYYY HH:mm:ss").diff((0, _moment2.default)(start, "DD/MM/YYYY HH:mm:ss")); - - // convert difference from above to a proper momentJs duration object - var duration = _moment2.default.duration(difference); - - return Math.floor(duration.asHours()) + _moment2.default.utc(difference).format(":mm"); - } - }, { - key: "buildUrl", - value: function buildUrl(event, type, isCrappyIE) { - var calendarUrl = ""; - - // allow mobile browsers to open the gmail data URI within native calendar app - // type = (type == "google" && this.isMobile()) ? "outlook" : type; - - switch (type) { - case "google": - calendarUrl = "https://calendar.google.com/calendar/render"; - calendarUrl += "?action=TEMPLATE"; - calendarUrl += "&dates=" + this.formatTime(event.startTime); - calendarUrl += "/" + this.formatTime(event.endTime); - calendarUrl += "&location=" + encodeURIComponent(event.location); - calendarUrl += "&text=" + encodeURIComponent(event.title); - calendarUrl += "&details=" + encodeURIComponent(event.description); - break; - - case "yahoo": - // yahoo doesn't utilize endTime so we need to calulate duration - var duration = this.calculateDuration(event.startTime, event.endTime); - calendarUrl = "https://calendar.yahoo.com/?v=60&view=d&type=20"; - calendarUrl += "&title=" + encodeURIComponent(event.title); - calendarUrl += "&st=" + this.formatTime(event.startTime); - calendarUrl += "&dur=" + duration; - calendarUrl += "&desc=" + encodeURIComponent(event.description); - calendarUrl += "&in_loc=" + encodeURIComponent(event.location); - break; - - case "outlookcom": - calendarUrl = "https://outlook.live.com/owa/?rru=addevent"; - calendarUrl += "&startdt=" + this.formatOutlookTime(event.startTime); - calendarUrl += "&enddt=" + this.formatOutlookTime(event.endTime); - calendarUrl += "&subject=" + encodeURIComponent(event.title); - calendarUrl += "&location=" + encodeURIComponent(event.location); - calendarUrl += "&body=" + encodeURIComponent(event.description); - calendarUrl += "&allday=false"; - calendarUrl += "&uid=" + this.getRandomKey(); - calendarUrl += "&path=/calendar/view/Month"; - break; - - default: - calendarUrl = ["BEGIN:VCALENDAR", "VERSION:2.0", "BEGIN:VEVENT", "URL:" + document.URL, "DTSTART:" + this.formatTime(event.startTime), "DTEND:" + this.formatTime(event.endTime), "SUMMARY:" + event.title, "DESCRIPTION:" + event.description, "LOCATION:" + event.location, "END:VEVENT", "END:VCALENDAR"].join("\n"); - - if (!isCrappyIE && this.isMobile()) { - calendarUrl = encodeURI("data:text/calendar;charset=utf8," + calendarUrl); - } - } - - return calendarUrl; - } - - // determine if a mobile browser is being used - - }, { - key: "isMobile", - value: function isMobile() { - var mobile = false; - - (function (a) { - if (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0, 4))) mobile = true; - })(window.navigator.userAgent || window.navigator.vendor || window.opera); - - return mobile; - } - }]); - - return helpers; -}(); - -exports.default = helpers; diff --git a/tournament-scheduler/dependencies/react-add-to-calendar/package.json b/tournament-scheduler/dependencies/react-add-to-calendar/package.json deleted file mode 100644 index bf63db5e..00000000 --- a/tournament-scheduler/dependencies/react-add-to-calendar/package.json +++ /dev/null @@ -1,136 +0,0 @@ -{ - "_from": "react-add-to-calendar", - "_id": "react-add-to-calendar@0.1.5", - "_inBundle": false, - "_integrity": "sha512-DI+q3vvHCiYhxgh+83sg9UrPD9sdyBYcuY77UMcfX3y1MUPMW+f/w/6EG0MZg7B07vLQ4R6nxqk6wtMtcXOicA==", - "_location": "/react-add-to-calendar", - "_phantomChildren": {}, - "_requested": { - "type": "tag", - "registry": true, - "raw": "react-add-to-calendar", - "name": "react-add-to-calendar", - "escapedName": "react-add-to-calendar", - "rawSpec": "", - "saveSpec": null, - "fetchSpec": "latest" - }, - "_requiredBy": [ - "#USER", - "/" - ], - "_resolved": "https://registry.npmjs.org/react-add-to-calendar/-/react-add-to-calendar-0.1.5.tgz", - "_shasum": "ab077fe98ca0f178a5a3b70a3590d4b630c0f275", - "_spec": "react-add-to-calendar", - "_where": "E:\\Users\\Avasam\\Documents\\Git\\speedrun.com_global_leaderboard_webapp\\tournament-scheduler", - "author": { - "name": "Jason Salzman" - }, - "bugs": { - "url": "https://github.com/jasonsalzman/react-add-to-calendar/issues" - }, - "bundleDependencies": false, - "dependencies": { - "moment": "^2.18.1" - }, - "deprecated": false, - "description": "A simple and reusable add to calendar button component for React", - "devDependencies": { - "babel-core": "^6.24.1", - "babel-loader": "^6.4.1", - "babel-plugin-react-transform": "^2.0.2", - "babel-preset-airbnb": "^2.2.3", - "babel-preset-es2015": "^6.24.1", - "babel-preset-react": "^6.24.1", - "babel-preset-stage-0": "^6.24.1", - "chai": "^3.5.0", - "codecov": ">=3.7.1", - "create-react-class": "^15.5.3", - "css-loader": "^0.28.2", - "enzyme": "^3.2.0", - "eslint": ">=4.18.2", - "eslint-config-standard": "^10.2.1", - "eslint-plugin-import": "^2.2.0", - "eslint-plugin-node": "^4.2.2", - "eslint-plugin-promise": "^3.5.0", - "eslint-plugin-react": "^7.0.1", - "eslint-plugin-standard": "^3.0.1", - "express": "^4.15.3", - "extract-text-webpack-plugin": "^1.0.1", - "grunt": "1.0.1", - "grunt-babel": "^6.0.0", - "grunt-cli": "^1.2.0", - "grunt-contrib-sass": "1.0.0", - "grunt-contrib-watch": "1.0.0", - "grunt-eslint": "^19.0.0", - "grunt-karma": "^2.0.0", - "grunt-scss-lint": "^0.5.0", - "grunt-webpack": "^1.0.18", - "highlight.js": ">=10.4.1", - "istanbul-instrumenter-loader": "^2.0.0", - "jsdom": "^9.12.0", - "karma": "^1.7.0", - "karma-chai": "^0.1.0", - "karma-chrome-launcher": "^2.1.1", - "karma-coverage": "^1.1.1", - "karma-firefox-launcher": "^1.0.1", - "karma-mocha": "^1.3.0", - "karma-safari-launcher": "^1.0.0", - "karma-sinon": "^1.0.5", - "karma-sourcemap-loader": "^0.3.7", - "karma-webpack": "^1.8.1", - "lodash": "^4.17.4", - "mocha": "^3.4.1", - "mocha-jsdom": "^1.1.0", - "node-sass": "^4.7.2", - "prop-types": "^15.5.10", - "react": "^16.2.0", - "react-docgen": "^2.15.0", - "react-dom": "^16.2.0", - "react-transform-hmr": "^1.0.4", - "sass-loader": "^4.1.1", - "sinon": "^1.17.7", - "style-loader": "^0.18.0", - "webpack": "^1.15.0", - "webpack-dev-middleware": "^1.10.2", - "webpack-dev-server": ">=3.1.11", - "webpack-hot-middleware": "^2.18.0" - }, - "files": [ - "*.md", - "dist", - "lib" - ], - "homepage": "https://github.com/jasonsalzman/react-add-to-calendar", - "keywords": [ - "react", - "add-to-calendar", - "calendar", - "event", - "react-component" - ], - "license": "MIT", - "main": "dist/react-add-to-calendar.min.js", - "name": "react-add-to-calendar", - "optionalDependencies": { - "moment": "^2.18.1" - }, - "peerDependencies": { - "react": "^15.5.4 || ^16.0.0", - "react-dom": "^15.5.4 || ^16.0.0" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/jasonsalzman/react-add-to-calendar.git" - }, - "scripts": { - "build": "NODE_ENV=production grunt build", - "codecov": "cat coverage/*/lcov.info | ./node_modules/codecov/bin/codecov", - "eslint": "eslint **/*.js", - "prepublish": "npm run build", - "start": "node server.js", - "test": "NODE_ENV=test grunt travis" - }, - "style": "dist/react-add-to-calendar.min.css", - "version": "0.1.5" -} diff --git a/tournament-scheduler/package-lock.json b/tournament-scheduler/package-lock.json index 39c92b61..69c36872 100644 --- a/tournament-scheduler/package-lock.json +++ b/tournament-scheduler/package-lock.json @@ -1291,6 +1291,11 @@ "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-10.1.0.tgz", "integrity": "sha512-ij4wRiunFfaJxjB0BdrYHIH8FxBJpOwNPhhAcunlmPdXudL1WQV1qoP9un6JsEBAgQH+7UXyyjh0g7jTxXK6tg==" }, + "@culturehq/add-to-calendar": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@culturehq/add-to-calendar/-/add-to-calendar-1.1.2.tgz", + "integrity": "sha512-x3Z4UuJdWIHwptmExMkgka6HWxbPRv5rKWAEevCMJQXzfWRK6utJp523d3xb7VGeXHnSTL2xleY0kjswMRS5yQ==" + }, "@date-io/core": { "version": "1.3.13", "resolved": "https://registry.npmjs.org/@date-io/core/-/core-1.3.13.tgz", @@ -13096,13 +13101,6 @@ "object-assign": "^4.1.1" } }, - "react-add-to-calendar": { - "version": "file:dependencies/react-add-to-calendar", - "integrity": "sha512-DI+q3vvHCiYhxgh+83sg9UrPD9sdyBYcuY77UMcfX3y1MUPMW+f/w/6EG0MZg7B07vLQ4R6nxqk6wtMtcXOicA==", - "requires": { - "moment": "^2.18.1" - } - }, "react-app-polyfill": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-2.0.0.tgz", diff --git a/tournament-scheduler/package.json b/tournament-scheduler/package.json index c6e86155..616634d6 100644 --- a/tournament-scheduler/package.json +++ b/tournament-scheduler/package.json @@ -17,6 +17,7 @@ "react-add-to-calendar": "Fixed Outlook dates" }, "dependencies": { + "@culturehq/add-to-calendar": "^1.1.2", "@date-io/moment": "^1.3.13", "@material-ui/core": "^4.11.4", "@material-ui/icons": "^4.11.2", @@ -24,7 +25,6 @@ "http-status-codes": "^2.1.4", "moment": "^2.29.1", "react": "^17.0.2", - "react-add-to-calendar": "file:dependencies/react-add-to-calendar", "react-div-100vh": "^0.6.0", "react-dom": "^17.0.2", "react-scripts": "4.0.3", diff --git a/tournament-scheduler/src/App.css b/tournament-scheduler/src/App.css index 6c7365ad..b1446e04 100644 --- a/tournament-scheduler/src/App.css +++ b/tournament-scheduler/src/App.css @@ -17,7 +17,7 @@ } .MuiContainer-root { - padding-top: 16px; + padding-top: 16px; } .App .MuiTextField-root { @@ -74,15 +74,28 @@ p, .paragraph { max-width: 90px; /* Enough to fit title at minimum supported width */ } -.react-add-to-calendar, -.react-add-to-calendar .react-add-to-calendar__button, -.react-add-to-calendar .react-add-to-calendar__dropdown, -.react-add-to-calendar .react-add-to-calendar__dropdown ul li a { - z-index: 1; +/* Replicate Material Design Style with AddToCalendar */ +.chq-atc, +.chq-atc .chq-atc--button, +.chq-atc .chq-atc--button:focus, +.chq-atc .chq-atc--dropdown, +.chq-atc .chq-atc--dropdown a { + border: 0; + border-radius: inherit; color: inherit; background-color: inherit; } -.react-add-to-calendar ul { - padding: 0; +.chq-atc .chq-atc--dropdown { + padding: 8px 0; +} + +.chq-atc .chq-atc--button:hover, + +.chq-atc .chq-atc--dropdown a:hover { + background-color: rgba(255, 255, 255, 0.08); +} + +.chq-atc--button path:not(:hover) { + fill: white; } diff --git a/tournament-scheduler/src/ScheduleViewer/ScheduleViewer.tsx b/tournament-scheduler/src/ScheduleViewer/ScheduleViewer.tsx index fd05d722..2859c2f3 100644 --- a/tournament-scheduler/src/ScheduleViewer/ScheduleViewer.tsx +++ b/tournament-scheduler/src/ScheduleViewer/ScheduleViewer.tsx @@ -1,12 +1,12 @@ -import 'react-add-to-calendar/dist/react-add-to-calendar.min.css' +import '@culturehq/add-to-calendar/dist/styles.css' +import AddToCalendar from '@culturehq/add-to-calendar' import DateFnsUtils from '@date-io/moment' import { Container, createStyles, List, ListItem, ListItemText, makeStyles } from '@material-ui/core' import { StatusCodes } from 'http-status-codes' import moment from 'moment' import type { FC } from 'react' import { useEffect, useState } from 'react' -import AddToCalendar from 'react-add-to-calendar' import { apiGet } from '../fetchers/Api' import type { ScheduleDto } from '../models/Schedule' @@ -48,7 +48,8 @@ const useStyles = makeStyles(theme => marginBottom: 10, display: 'inline-block', color: theme.palette.text.primary, - backgroundColor: theme.palette.background.default, + backgroundColor: theme.palette.background.paper, + borderRadius: 4, }, })) @@ -67,21 +68,21 @@ const buildCalendarEventDescription = (timeSlot: TimeSlot, schedule: Schedule) = const url = window.location.href const title = schedule.name const players = timeSlot.registrations.length <= 1 - ? `Participants:\n${timeSlot + ? `Participants:
${timeSlot .registrations .flatMap(registration => registration.participants) - .map((participant, index) => `${index + 1}. ${participant}\n`) + .map((participant, index) => `${index + 1}. ${participant}
`) .join('')}` : timeSlot .registrations .map(registration => registration.participants) .map((participants, entryIndex) => - `Participants for entry #${entryIndex + 1}:\n${participants + `Participants for entry #${entryIndex + 1}:
${participants .map((participant, index) => `${index + 1}. ${participant}`) - .join('\n')}`) - .join('\n\n') - return `${title}\n${url}\n\n${players}` + .join('
')}`) + .join('

') + return `${title}
${url}

${players}` } @@ -125,15 +126,15 @@ const ScheduleViewer: FC = (props: ScheduleRegistrati {moment(timeSlot.dateTime).format(`ddd ${new DateFnsUtils().dateTime24hFormat}`)}
+ >Add to calendar
} secondary={ From faaa492ad6f79bb4f236ec1625096ff578ef65a0 Mon Sep 17 00:00:00 2001 From: Avasam Date: Thu, 20 May 2021 00:46:38 -0400 Subject: [PATCH 08/17] Integrated react-bootstrap-table2 string coolumn sort optimizations --- .../react-bootstrap-table-next/README.md | 43 - .../dist/react-bootstrap-table-next.js | 9345 ----------------- .../dist/react-bootstrap-table-next.js.map | 1 - .../dist/react-bootstrap-table-next.min.js | 6 - .../dist/react-bootstrap-table2.css | 129 - .../dist/react-bootstrap-table2.min.css | 1 - .../react-bootstrap-table-next/lib/index.js | 17 - .../lib/src/body.js | 182 - .../lib/src/bootstrap-table.js | 337 - .../lib/src/caption.js | 39 - .../lib/src/cell-event-delegater.js | 71 - .../lib/src/cell.js | 134 - .../lib/src/const.js | 24 - .../lib/src/contexts/bootstrap.js | 16 - .../lib/src/contexts/column-context.js | 80 - .../lib/src/contexts/data-context.js | 84 - .../lib/src/contexts/index.js | 434 - .../lib/src/contexts/row-expand-context.js | 197 - .../lib/src/contexts/selection-context.js | 182 - .../lib/src/contexts/sort-context.js | 182 - .../lib/src/filters-cell.js | 65 - .../lib/src/filters.js | 96 - .../lib/src/footer-cell.js | 110 - .../lib/src/footer.js | 76 - .../lib/src/header-cell.js | 226 - .../lib/src/header.js | 141 - .../lib/src/props-resolver/column-resolver.js | 54 - .../lib/src/props-resolver/index.js | 70 - .../lib/src/props-resolver/remote-resolver.js | 140 - .../lib/src/row-expand/expand-cell.js | 100 - .../row-expand/expand-header-cell-consumer.js | 27 - .../lib/src/row-expand/expand-header-cell.js | 78 - .../lib/src/row-expand/expand-row.js | 77 - .../lib/src/row-expand/row-consumer.js | 76 - .../lib/src/row-selection/row-consumer.js | 83 - .../lib/src/row-selection/selection-cell.js | 146 - .../selection-header-cell-consumer.js | 27 - .../row-selection/selection-header-cell.js | 174 - .../lib/src/row/aggregate-row.js | 192 - .../lib/src/row/event-delegater.js | 122 - .../lib/src/row/row-pure-content.js | 151 - .../lib/src/row/row-section.js | 45 - .../lib/src/row/row-template.js | 68 - .../lib/src/row/should-updater.js | 80 - .../lib/src/row/simple-row.js | 108 - .../lib/src/sort/caret.js | 52 - .../lib/src/sort/symbol.js | 39 - .../lib/src/store/expand.js | 59 - .../lib/src/store/mutate.js | 19 - .../lib/src/store/operators.js | 35 - .../lib/src/store/rows.js | 22 - .../lib/src/store/selection.js | 85 - .../lib/src/store/sort.js | 72 - .../lib/src/store/type.js | 28 - .../lib/src/utils.js | 122 - .../react-bootstrap-table-next/package.json | 81 - global-scoreboard/package-lock.json | 4 +- global-scoreboard/package.json | 2 +- 58 files changed, 3 insertions(+), 14653 deletions(-) delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/README.md delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/dist/react-bootstrap-table-next.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/dist/react-bootstrap-table-next.js.map delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/dist/react-bootstrap-table-next.min.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/dist/react-bootstrap-table2.css delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/dist/react-bootstrap-table2.min.css delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/index.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/body.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/bootstrap-table.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/caption.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/cell-event-delegater.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/cell.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/const.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/contexts/bootstrap.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/contexts/column-context.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/contexts/data-context.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/contexts/index.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/contexts/row-expand-context.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/contexts/selection-context.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/contexts/sort-context.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/filters-cell.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/filters.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/footer-cell.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/footer.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/header-cell.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/header.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/props-resolver/column-resolver.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/props-resolver/index.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/props-resolver/remote-resolver.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-expand/expand-cell.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-expand/expand-header-cell-consumer.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-expand/expand-header-cell.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-expand/expand-row.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-expand/row-consumer.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-selection/row-consumer.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-selection/selection-cell.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-selection/selection-header-cell-consumer.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-selection/selection-header-cell.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row/aggregate-row.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row/event-delegater.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row/row-pure-content.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row/row-section.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row/row-template.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row/should-updater.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row/simple-row.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/sort/caret.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/sort/symbol.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/store/expand.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/store/mutate.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/store/operators.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/store/rows.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/store/selection.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/store/sort.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/store/type.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/utils.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/package.json diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/README.md b/global-scoreboard/dependencies/react-bootstrap-table-next/README.md deleted file mode 100644 index ebaa7934..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/README.md +++ /dev/null @@ -1,43 +0,0 @@ -# react-bootstrap-table-next -Next generation of [`react-bootstrap-table`](https://github.com/AllenFang/react-bootstrap-table) - -## Usage - -### Installation - -```sh -npm install react-bootstrap-table-next --save -``` - -### Include CSS - -> react-bootstrap-table2 need you to add bootstrap css in your application firstly. About bootstrap css, we only compatible with bootstrap 3 but will start to compatible for bootstrap 4 on v0.2.0 - -```js -// es5 -require('react-bootstrap-table-next/dist/react-bootstrap-table2.min.css'); - -// es6 -import 'react-bootstrap-table-next/dist/react-bootstrap-table2.min.css'; -``` - -### Your First Table - -```js -import BootstrapTable from 'react-bootstrap-table-next'; - -const products = [ ... ]; -const columns = [{ - dataField: 'id', - text: 'Product ID' -}, { - dataField: 'name', - text: 'Product Name' -}, { - dataField: 'price', - text: 'Product Price' -}]; - -export default () => - -``` \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/dist/react-bootstrap-table-next.js b/global-scoreboard/dependencies/react-bootstrap-table-next/dist/react-bootstrap-table-next.js deleted file mode 100644 index e2c407b9..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/dist/react-bootstrap-table-next.js +++ /dev/null @@ -1,9345 +0,0 @@ -(function webpackUniversalModuleDefinition(root, factory) { - if(typeof exports === 'object' && typeof module === 'object') - module.exports = factory(require("react"), require("react-dom")); - else if(typeof define === 'function' && define.amd) - define(["react", "react-dom"], factory); - else if(typeof exports === 'object') - exports["ReactBootstrapTable2"] = factory(require("react"), require("react-dom")); - else - root["ReactBootstrapTable2"] = factory(root["React"], root["ReactDOM"]); -})(this, function(__WEBPACK_EXTERNAL_MODULE_0__, __WEBPACK_EXTERNAL_MODULE_20__) { -return /******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // 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 = ""; -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 26); -/******/ }) -/************************************************************************/ -/******/ ([ -/* 0 */ -/***/ (function(module, exports) { - -module.exports = __WEBPACK_EXTERNAL_MODULE_0__; - -/***/ }), -/* 1 */ -/***/ (function(module, exports, __webpack_require__) { - -/** - * Copyright (c) 2013-present, Facebook, Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -if (false) { - var ReactIs = require('react-is'); - - // By explicitly using `prop-types` you are opting into new development behavior. - // http://fb.me/prop-types-in-prod - var throwOnDirectAccess = true; - module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess); -} else { - // By explicitly using `prop-types` you are opting into new production behavior. - // http://fb.me/prop-types-in-prod - module.exports = __webpack_require__(28)(); -} - - -/***/ }), -/* 2 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _underscore = __webpack_require__(34); - -var _underscore2 = _interopRequireDefault(_underscore); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function splitNested(str) { - return [str].join('.').replace(/\[/g, '.').replace(/\]/g, '').split('.'); -} /* eslint no-empty: 0 */ -/* eslint no-param-reassign: 0 */ -/* eslint prefer-rest-params: 0 */ - - -function contains(list, value) { - if (_underscore2.default.includes) { - return _underscore2.default.includes(list, value); - } - - return list.indexOf(value) > -1; -} - -function get(target, field) { - var directGet = target[field]; - if (directGet !== undefined && directGet !== null) { - return directGet; - } - - var pathArray = splitNested(field); - var result = void 0; - try { - result = pathArray.reduce(function (curr, path) { - return curr[path]; - }, target); - } catch (e) {} - return result; -} - -function set(target, field, value) { - var safe = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; - - var pathArray = splitNested(field); - var level = 0; - pathArray.reduce(function (a, b) { - level += 1; - if (typeof a[b] === 'undefined') { - if (!safe) throw new Error(a + '.' + b + ' is undefined'); - a[b] = {}; - return a[b]; - } - - if (level === pathArray.length) { - a[b] = value; - return value; - } - return a[b]; - }, target); -} - -function isEmptyObject(obj) { - if (!_underscore2.default.isObject(obj)) return false; - - var hasOwnProperty = Object.prototype.hasOwnProperty; - var keys = Object.keys(obj); - - for (var i = 0; i < keys.length; i += 1) { - if (hasOwnProperty.call(obj, keys[i])) return false; - } - - return true; -} - -function isDefined(value) { - return typeof value !== 'undefined' && value !== null; -} - -function sleep(fn, ms) { - return setTimeout(function () { - return fn(); - }, ms); -} - -function debounce(func, wait, immediate) { - var _this = this, - _arguments = arguments; - - var timeout = void 0; - - return function () { - var later = function later() { - timeout = null; - - if (!immediate) { - func.apply(_this, _arguments); - } - }; - - var callNow = immediate && !timeout; - - clearTimeout(timeout); - timeout = setTimeout(later, wait || 0); - - if (callNow) { - func.apply(_this, _arguments); - } - }; -} - -exports.default = Object.assign(_underscore2.default, { - get: get, - set: set, - isDefined: isDefined, - isEmptyObject: isEmptyObject, - sleep: sleep, - debounce: debounce, - contains: contains -}); - -/***/ }), -/* 3 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = { - SORT_ASC: 'asc', - SORT_DESC: 'desc', - ROW_SELECT_SINGLE: 'radio', - ROW_SELECT_MULTIPLE: 'checkbox', - ROW_SELECT_DISABLED: 'ROW_SELECT_DISABLED', - CHECKBOX_STATUS_CHECKED: 'checked', - CHECKBOX_STATUS_INDETERMINATE: 'indeterminate', - CHECKBOX_STATUS_UNCHECKED: 'unchecked', - INDICATOR_POSITION_LEFT: 'left', - INDICATOR_POSITION_RIGHT: 'right', - TYPE_STRING: 'string', - TYPE_NUMBER: 'number', - TYPE_BOOLEAN: 'bool', - TYPE_DATE: 'date', - FILTERS_POSITION_INLINE: 'inline', - FILTERS_POSITION_TOP: 'top', - FILTERS_POSITION_BOTTOM: 'bottom' -}; - -/***/ }), -/* 4 */ -/***/ (function(module, exports, __webpack_require__) { - -var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! - Copyright (c) 2016 Jed Watson. - Licensed under the MIT License (MIT), see - http://jedwatson.github.io/classnames -*/ -/* global define */ - -(function () { - 'use strict'; - - var hasOwn = {}.hasOwnProperty; - - function classNames () { - var classes = []; - - for (var i = 0; i < arguments.length; i++) { - var arg = arguments[i]; - if (!arg) continue; - - var argType = typeof arg; - - if (argType === 'string' || argType === 'number') { - classes.push(arg); - } else if (Array.isArray(arg)) { - classes.push(classNames.apply(null, arg)); - } else if (argType === 'object') { - for (var key in arg) { - if (hasOwn.call(arg, key) && arg[key]) { - classes.push(key); - } - } - } - } - - return classes.join(' '); - } - - if (typeof module !== 'undefined' && module.exports) { - module.exports = classNames; - } else if (true) { - // register as 'classnames', consistent with npm package name - !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function () { - return classNames; - }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), - __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - } else { - window.classNames = classNames; - } -}()); - - -/***/ }), -/* 5 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.BootstrapContext = undefined; - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var BootstrapContext = exports.BootstrapContext = _react2.default.createContext({ - bootstrap4: false -}); - -/***/ }), -/* 6 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.getRowByRowId = exports.matchRow = undefined; - -var _utils = __webpack_require__(2); - -var _utils2 = _interopRequireDefault(_utils); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var matchRow = exports.matchRow = function matchRow(keyField, id) { - return function (row) { - return _utils2.default.get(row, keyField) === id; - }; -}; - -var getRowByRowId = exports.getRowByRowId = function getRowByRowId(data, keyField, id) { - return data.find(matchRow(keyField, id)); -}; - -/***/ }), -/* 7 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["a"] = _objectWithoutPropertiesLoose; -function _objectWithoutPropertiesLoose(source, excluded) { - if (source == null) return {}; - var target = {}; - var sourceKeys = Object.keys(source); - var key, i; - - for (i = 0; i < sourceKeys.length; i++) { - key = sourceKeys[i]; - if (excluded.indexOf(key) >= 0) continue; - target[key] = source[key]; - } - - return target; -} - -/***/ }), -/* 8 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["a"] = _inheritsLoose; -function _inheritsLoose(subClass, superClass) { - subClass.prototype = Object.create(superClass.prototype); - subClass.prototype.constructor = subClass; - subClass.__proto__ = superClass; -} - -/***/ }), -/* 9 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _utils = __webpack_require__(2); - -var _utils2 = _interopRequireDefault(_utils); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -var events = ['onClick', 'onDoubleClick', 'onMouseEnter', 'onMouseLeave', 'onContextMenu', 'onAuxClick']; - -exports.default = function (ExtendBase) { - return function (_ExtendBase) { - _inherits(CellEventDelegater, _ExtendBase); - - function CellEventDelegater(props) { - _classCallCheck(this, CellEventDelegater); - - var _this = _possibleConstructorReturn(this, (CellEventDelegater.__proto__ || Object.getPrototypeOf(CellEventDelegater)).call(this, props)); - - _this.createDefaultEventHandler = _this.createDefaultEventHandler.bind(_this); - return _this; - } - - _createClass(CellEventDelegater, [{ - key: 'createDefaultEventHandler', - value: function createDefaultEventHandler(cb) { - var _this2 = this; - - return function (e) { - var _props = _this2.props, - column = _props.column, - columnIndex = _props.columnIndex, - index = _props.index; - - cb(e, column, typeof columnIndex !== 'undefined' ? columnIndex : index); - }; - } - }, { - key: 'delegate', - value: function delegate() { - var _this3 = this; - - var attrs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - var newAttrs = _extends({}, attrs); - Object.keys(attrs).forEach(function (attr) { - if (_utils2.default.contains(events, attr)) { - newAttrs[attr] = _this3.createDefaultEventHandler(attrs[attr]); - } - }); - return newAttrs; - } - }]); - - return CellEventDelegater; - }(ExtendBase); -}; - -/***/ }), -/* 10 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = __webpack_require__(1); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _const = __webpack_require__(3); - -var _const2 = _interopRequireDefault(_const); - -var _utils = __webpack_require__(2); - -var _utils2 = _interopRequireDefault(_utils); - -var _operators = __webpack_require__(11); - -var _operators2 = _interopRequireDefault(_operators); - -var _selection = __webpack_require__(13); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint camelcase: 0 */ -/* eslint react/prop-types: 0 */ - - -var SelectionContext = _react2.default.createContext(); - -var SelectionProvider = function (_React$Component) { - _inherits(SelectionProvider, _React$Component); - - function SelectionProvider(props) { - _classCallCheck(this, SelectionProvider); - - var _this = _possibleConstructorReturn(this, (SelectionProvider.__proto__ || Object.getPrototypeOf(SelectionProvider)).call(this, props)); - - _this.handleRowSelect = function (rowKey, checked, rowIndex, e) { - var _this$props = _this.props, - data = _this$props.data, - keyField = _this$props.keyField, - _this$props$selectRow = _this$props.selectRow, - mode = _this$props$selectRow.mode, - onSelect = _this$props$selectRow.onSelect; - var ROW_SELECT_SINGLE = _const2.default.ROW_SELECT_SINGLE; - - - var currSelected = [].concat(_toConsumableArray(_this.selected)); - - var result = true; - if (onSelect) { - var row = _operators2.default.getRowByRowId(data, keyField, rowKey); - result = onSelect(row, checked, rowIndex, e); - } - - if (result === true || result === undefined) { - if (mode === ROW_SELECT_SINGLE) { - // when select mode is radio - currSelected = [rowKey]; - } else if (checked) { - // when select mode is checkbox - currSelected.push(rowKey); - } else { - currSelected = currSelected.filter(function (value) { - return value !== rowKey; - }); - } - } - _this.selected = currSelected; - _this.forceUpdate(); - }; - - _this.handleAllRowsSelect = function (e, isUnSelect) { - var _this$props2 = _this.props, - data = _this$props2.data, - keyField = _this$props2.keyField, - _this$props2$selectRo = _this$props2.selectRow, - onSelectAll = _this$props2$selectRo.onSelectAll, - nonSelectable = _this$props2$selectRo.nonSelectable; - var selected = _this.selected; - - - var currSelected = void 0; - - if (!isUnSelect) { - currSelected = selected.concat(_operators2.default.selectableKeys(data, keyField, nonSelectable)); - } else { - currSelected = selected.filter(function (s) { - return typeof data.find(function (d) { - return _utils2.default.get(d, keyField) === s; - }) === 'undefined'; - }); - } - - var result = void 0; - if (onSelectAll) { - result = onSelectAll(!isUnSelect, _operators2.default.getSelectedRows(data, keyField, isUnSelect ? selected : currSelected), e); - if (Array.isArray(result)) { - currSelected = result; - } - } - _this.selected = currSelected; - _this.forceUpdate(); - }; - - _this.selected = props.selectRow.selected || []; - return _this; - } - - // exposed API - - - _createClass(SelectionProvider, [{ - key: 'getSelected', - value: function getSelected() { - return this.selected; - } - }, { - key: 'UNSAFE_componentWillReceiveProps', - value: function UNSAFE_componentWillReceiveProps(nextProps) { - if (nextProps.selectRow) { - this.selected = nextProps.selectRow.selected || this.selected; - } - } - }, { - key: 'render', - value: function render() { - var _getSelectionSummary = (0, _selection.getSelectionSummary)(this.props.data, this.props.keyField, this.selected), - allRowsSelected = _getSelectionSummary.allRowsSelected, - allRowsNotSelected = _getSelectionSummary.allRowsNotSelected; - - var checkedStatus = void 0; - - // checkbox status depending on selected rows counts - if (allRowsSelected) checkedStatus = _const2.default.CHECKBOX_STATUS_CHECKED;else if (allRowsNotSelected) checkedStatus = _const2.default.CHECKBOX_STATUS_UNCHECKED;else checkedStatus = _const2.default.CHECKBOX_STATUS_INDETERMINATE; - - return _react2.default.createElement( - SelectionContext.Provider, - { - value: _extends({}, this.props.selectRow, { - selected: this.selected, - onRowSelect: this.handleRowSelect, - onAllRowsSelect: this.handleAllRowsSelect, - allRowsSelected: allRowsSelected, - allRowsNotSelected: allRowsNotSelected, - checkedStatus: checkedStatus - }) - }, - this.props.children - ); - } - }]); - - return SelectionProvider; -}(_react2.default.Component); - -SelectionProvider.propTypes = { - children: _propTypes2.default.node.isRequired, - data: _propTypes2.default.array.isRequired, - keyField: _propTypes2.default.string.isRequired -}; -exports.default = { - Provider: SelectionProvider, - Consumer: SelectionContext.Consumer -}; - -/***/ }), -/* 11 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _rows = __webpack_require__(6); - -var rows = _interopRequireWildcard(_rows); - -var _selection = __webpack_require__(13); - -var selection = _interopRequireWildcard(_selection); - -var _expand = __webpack_require__(40); - -var expand = _interopRequireWildcard(_expand); - -var _mutate = __webpack_require__(41); - -var mutate = _interopRequireWildcard(_mutate); - -var _sort = __webpack_require__(42); - -var sort = _interopRequireWildcard(_sort); - -var _type = __webpack_require__(43); - -var type = _interopRequireWildcard(_type); - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - -exports.default = _extends({}, rows, selection, expand, mutate, sort, type); - -/***/ }), -/* 12 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = __webpack_require__(1); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _operators = __webpack_require__(11); - -var _operators2 = _interopRequireDefault(_operators); - -var _utils = __webpack_require__(2); - -var _utils2 = _interopRequireDefault(_utils); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint camelcase: 0 */ -/* eslint react/prop-types: 0 */ - - -var RowExpandContext = _react2.default.createContext(); - -var RowExpandProvider = function (_React$Component) { - _inherits(RowExpandProvider, _React$Component); - - function RowExpandProvider() { - var _ref; - - var _temp, _this, _ret; - - _classCallCheck(this, RowExpandProvider); - - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = RowExpandProvider.__proto__ || Object.getPrototypeOf(RowExpandProvider)).call.apply(_ref, [this].concat(args))), _this), _this.state = { expanded: _this.props.expandRow.expanded || [], - isClosing: _this.props.expandRow.isClosing || [] }, _this.onClosed = function (closedRow) { - _this.setState({ isClosing: _this.state.isClosing.filter(function (value) { - return value !== closedRow; - }) }); - }, _this.handleRowExpand = function (rowKey, expanded, rowIndex, e) { - var _this$props = _this.props, - data = _this$props.data, - keyField = _this$props.keyField, - _this$props$expandRow = _this$props.expandRow, - onExpand = _this$props$expandRow.onExpand, - onlyOneExpanding = _this$props$expandRow.onlyOneExpanding, - nonExpandable = _this$props$expandRow.nonExpandable; - - if (nonExpandable && _utils2.default.contains(nonExpandable, rowKey)) { - return; - } - - var currExpanded = [].concat(_toConsumableArray(_this.state.expanded)); - var isClosing = [].concat(_toConsumableArray(_this.state.isClosing)); - - if (expanded) { - if (onlyOneExpanding) { - isClosing = isClosing.concat(currExpanded); - currExpanded = [rowKey]; - } else currExpanded.push(rowKey); - } else { - isClosing.push(rowKey); - currExpanded = currExpanded.filter(function (value) { - return value !== rowKey; - }); - } - - if (onExpand) { - var row = _operators2.default.getRowByRowId(data, keyField, rowKey); - onExpand(row, expanded, rowIndex, e); - } - _this.setState(function () { - return { expanded: currExpanded, isClosing: isClosing }; - }); - }, _this.handleAllRowExpand = function (e, expandAll) { - var _this$props2 = _this.props, - data = _this$props2.data, - keyField = _this$props2.keyField, - _this$props2$expandRo = _this$props2.expandRow, - onExpandAll = _this$props2$expandRo.onExpandAll, - nonExpandable = _this$props2$expandRo.nonExpandable; - var expanded = _this.state.expanded; - - - var currExpanded = void 0; - - if (expandAll) { - currExpanded = expanded.concat(_operators2.default.expandableKeys(data, keyField, nonExpandable)); - } else { - currExpanded = expanded.filter(function (s) { - return typeof data.find(function (d) { - return _utils2.default.get(d, keyField) === s; - }) === 'undefined'; - }); - } - - if (onExpandAll) { - onExpandAll(expandAll, _operators2.default.getExpandedRows(data, keyField, currExpanded), e); - } - - _this.setState(function () { - return { expanded: currExpanded }; - }); - }, _temp), _possibleConstructorReturn(_this, _ret); - } - - _createClass(RowExpandProvider, [{ - key: 'UNSAFE_componentWillReceiveProps', - value: function UNSAFE_componentWillReceiveProps(nextProps) { - var _this2 = this; - - if (nextProps.expandRow) { - var nextExpanded = [].concat(_toConsumableArray(nextProps.expandRow.expanded || this.state.expanded)); - var _nextProps$expandRow$ = nextProps.expandRow.nonExpandable, - nonExpandable = _nextProps$expandRow$ === undefined ? [] : _nextProps$expandRow$; - - nextExpanded = nextExpanded.filter(function (rowId) { - return !_utils2.default.contains(nonExpandable, rowId); - }); - var isClosing = this.state.expanded.reduce(function (acc, cur) { - if (!_utils2.default.contains(nextExpanded, cur)) { - acc.push(cur); - } - return acc; - }, []); - - this.setState(function () { - return { - expanded: nextExpanded, - isClosing: isClosing - }; - }); - } else { - this.setState(function () { - return { - expanded: _this2.state.expanded - }; - }); - } - } - }, { - key: 'render', - value: function render() { - var _props = this.props, - data = _props.data, - keyField = _props.keyField; - - return _react2.default.createElement( - RowExpandContext.Provider, - { - value: _extends({}, this.props.expandRow, { - nonExpandable: this.props.expandRow.nonExpandable, - expanded: this.state.expanded, - isClosing: this.state.isClosing, - onClosed: this.onClosed, - isAnyExpands: _operators2.default.isAnyExpands(data, keyField, this.state.expanded), - onRowExpand: this.handleRowExpand, - onAllRowExpand: this.handleAllRowExpand - }) - }, - this.props.children - ); - } - }]); - - return RowExpandProvider; -}(_react2.default.Component); - -RowExpandProvider.propTypes = { - children: _propTypes2.default.node.isRequired, - data: _propTypes2.default.array.isRequired, - keyField: _propTypes2.default.string.isRequired -}; -exports.default = { - Provider: RowExpandProvider, - Consumer: RowExpandContext.Consumer -}; - -/***/ }), -/* 13 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.getSelectedRows = exports.unSelectableKeys = exports.selectableKeys = exports.getSelectionSummary = undefined; - -var _utils = __webpack_require__(2); - -var _utils2 = _interopRequireDefault(_utils); - -var _rows = __webpack_require__(6); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var getSelectionSummary = exports.getSelectionSummary = function getSelectionSummary() { - var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; - var keyField = arguments[1]; - var selected = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : []; - - var allRowsSelected = data.length > 0; - var allRowsNotSelected = true; - - var rowKeys = data.map(function (d) { - return _utils2.default.get(d, keyField); - }); - - var _loop = function _loop(i) { - var curr = rowKeys[i]; - if (typeof selected.find(function (x) { - return x === curr; - }) === 'undefined') { - allRowsSelected = false; - } else { - allRowsNotSelected = false; - } - }; - - for (var i = 0; i < rowKeys.length; i += 1) { - _loop(i); - } - return { - allRowsSelected: allRowsSelected, - allRowsNotSelected: allRowsNotSelected - }; -}; - -var selectableKeys = exports.selectableKeys = function selectableKeys() { - var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; - var keyField = arguments[1]; - var skips = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : []; - - if (skips.length === 0) { - return data.map(function (row) { - return _utils2.default.get(row, keyField); - }); - } - return data.filter(function (row) { - return !_utils2.default.contains(skips, _utils2.default.get(row, keyField)); - }).map(function (row) { - return _utils2.default.get(row, keyField); - }); -}; - -var unSelectableKeys = exports.unSelectableKeys = function unSelectableKeys(selected) { - var skips = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; - - if (skips.length === 0) { - return []; - } - return selected.filter(function (x) { - return _utils2.default.contains(skips, x); - }); -}; - -var getSelectedRows = exports.getSelectedRows = function getSelectedRows() { - var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; - var keyField = arguments[1]; - var selected = arguments[2]; - return selected.map(function (k) { - return (0, _rows.getRowByRowId)(data, keyField, k); - }).filter(function (x) { - return !!x; - }); -}; - -/***/ }), -/* 14 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = __webpack_require__(1); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _const = __webpack_require__(3); - -var _const2 = _interopRequireDefault(_const); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } /* eslint react/require-default-props: 0 */ - - -var RowTemplate = function RowTemplate(props) { - var renderContent = props.renderContent, - selectRow = props.selectRow, - expandRow = props.expandRow, - cellEl = props.cellEl, - rest = _objectWithoutProperties(props, ['renderContent', 'selectRow', 'expandRow', 'cellEl']); - - var isRenderFunctionColumnInLeft = function isRenderFunctionColumnInLeft() { - var position = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _const2.default.INDICATOR_POSITION_LEFT; - return position === _const2.default.INDICATOR_POSITION_LEFT; - }; - - var childrens = renderContent() || []; - - if (selectRow && selectRow.hideSelectColumn !== true) { - if (isRenderFunctionColumnInLeft(selectRow.selectColumnPosition)) { - childrens.unshift(_react2.default.createElement(cellEl, { key: 'selection' })); - } else { - childrens.push(_react2.default.createElement(cellEl, { key: 'selection' })); - } - } - - if (expandRow.showExpandColumn) { - if (isRenderFunctionColumnInLeft(expandRow.expandColumnPosition)) { - childrens.unshift(_react2.default.createElement(cellEl, { key: 'expansion' })); - } else { - childrens.push(_react2.default.createElement(cellEl, { key: 'expansion' })); - } - } - - return _react2.default.createElement( - 'tr', - rest, - childrens - ); -}; - -RowTemplate.propTypes = { - renderContent: _propTypes2.default.func.isRequired, - cellEl: _propTypes2.default.string.isRequired, - selectRow: _propTypes2.default.object, - expandRow: _propTypes2.default.object -}; - -exports.default = RowTemplate; - -/***/ }), -/* 15 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _utils = __webpack_require__(2); - -var _utils2 = _interopRequireDefault(_utils); - -var _cell = __webpack_require__(50); - -var _cell2 = _interopRequireDefault(_cell); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint react/prop-types: 0 */ -/* eslint react/no-array-index-key: 0 */ -/* eslint no-plusplus: 0 */ - - -var RowPureContent = function (_React$Component) { - _inherits(RowPureContent, _React$Component); - - function RowPureContent() { - _classCallCheck(this, RowPureContent); - - return _possibleConstructorReturn(this, (RowPureContent.__proto__ || Object.getPrototypeOf(RowPureContent)).apply(this, arguments)); - } - - _createClass(RowPureContent, [{ - key: 'shouldComponentUpdate', - value: function shouldComponentUpdate(nextProps) { - if (typeof nextProps.shouldUpdate !== 'undefined') { - return nextProps.shouldUpdate; - } - return true; - } - }, { - key: 'render', - value: function render() { - var _props = this.props, - row = _props.row, - keyField = _props.keyField, - columns = _props.columns, - rowIndex = _props.rowIndex, - editable = _props.editable, - editingRowIdx = _props.editingRowIdx, - editingColIdx = _props.editingColIdx, - onStart = _props.onStart, - clickToEdit = _props.clickToEdit, - dbclickToEdit = _props.dbclickToEdit, - EditingCellComponent = _props.EditingCellComponent, - tabIndexStart = _props.tabIndexStart; - - - var tabIndex = tabIndexStart; - - return columns.map(function (column, index) { - var dataField = column.dataField; - - var content = _utils2.default.get(row, dataField); - if (rowIndex === editingRowIdx && index === editingColIdx) { - return _react2.default.createElement(EditingCellComponent, { - key: content + '-' + index + '-editing', - row: row, - rowIndex: rowIndex, - column: column, - columnIndex: index - }); - } - // render cell - var cellTitle = void 0; - var cellStyle = {}; - var cellAttrs = _extends({}, _utils2.default.isFunction(column.attrs) ? column.attrs(content, row, rowIndex, index) : column.attrs); - - if (column.events) { - var events = Object.assign({}, column.events); - Object.keys(Object.assign({}, column.events)).forEach(function (key) { - var originFn = events[key]; - events[key] = function () { - for (var _len = arguments.length, rest = Array(_len), _key = 0; _key < _len; _key++) { - rest[_key] = arguments[_key]; - } - - return originFn.apply(undefined, rest.concat([row, rowIndex])); - }; - }); - cellAttrs = _extends({}, cellAttrs, events); - } - - var cellClasses = _utils2.default.isFunction(column.classes) ? column.classes(content, row, rowIndex, index) : column.classes; - - if (column.style) { - cellStyle = _utils2.default.isFunction(column.style) ? column.style(content, row, rowIndex, index) : column.style; - cellStyle = Object.assign({}, cellStyle) || {}; - } - - if (column.title) { - cellTitle = _utils2.default.isFunction(column.title) ? column.title(content, row, rowIndex, index) : content; - cellAttrs.title = cellTitle; - } - - if (column.align) { - cellStyle.textAlign = _utils2.default.isFunction(column.align) ? column.align(content, row, rowIndex, index) : column.align; - } - - if (cellClasses) cellAttrs.className = cellClasses; - if (!_utils2.default.isEmptyObject(cellStyle)) cellAttrs.style = cellStyle; - - var editableCell = _utils2.default.isDefined(column.editable) ? column.editable : true; - if (column.dataField === keyField || !editable) editableCell = false; - if (_utils2.default.isFunction(column.editable)) { - editableCell = column.editable(content, row, rowIndex, index); - } - - if (tabIndexStart !== -1) { - cellAttrs.tabIndex = tabIndex++; - } - - return _react2.default.createElement(_cell2.default, _extends({ - key: content + '-' + index, - row: row, - editable: editableCell, - rowIndex: rowIndex, - columnIndex: index, - column: column, - onStart: onStart, - clickToEdit: clickToEdit, - dbclickToEdit: dbclickToEdit - }, cellAttrs)); - }); - } - }]); - - return RowPureContent; -}(_react2.default.Component); - -exports.default = RowPureContent; - -/***/ }), -/* 16 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _utils = __webpack_require__(2); - -var _utils2 = _interopRequireDefault(_utils); - -var _const = __webpack_require__(3); - -var _const2 = _interopRequireDefault(_const); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -var events = ['onClick', 'onDoubleClick', 'onMouseEnter', 'onMouseLeave', 'onContextMenu', 'onAuxClick']; - -exports.default = function (ExtendBase) { - return function (_ExtendBase) { - _inherits(RowEventDelegater, _ExtendBase); - - function RowEventDelegater(props) { - _classCallCheck(this, RowEventDelegater); - - var _this = _possibleConstructorReturn(this, (RowEventDelegater.__proto__ || Object.getPrototypeOf(RowEventDelegater)).call(this, props)); - - _this.clickNum = 0; - _this.createDefaultEventHandler = _this.createDefaultEventHandler.bind(_this); - _this.createClickEventHandler = _this.createClickEventHandler.bind(_this); - return _this; - } - - _createClass(RowEventDelegater, [{ - key: 'createClickEventHandler', - value: function createClickEventHandler(cb) { - var _this2 = this; - - return function (e) { - var _props = _this2.props, - row = _props.row, - selected = _props.selected, - keyField = _props.keyField, - selectable = _props.selectable, - expandable = _props.expandable, - rowIndex = _props.rowIndex, - expanded = _props.expanded, - expandRow = _props.expandRow, - selectRow = _props.selectRow, - DELAY_FOR_DBCLICK = _props.DELAY_FOR_DBCLICK; - - var clickFn = function clickFn() { - if (cb) { - cb(e, row, rowIndex); - } - var key = _utils2.default.get(row, keyField); - if (expandRow && expandable && !expandRow.expandByColumnOnly) { - if (selectRow.mode !== _const2.default.ROW_SELECT_DISABLED && selectRow.clickToExpand || selectRow.mode === _const2.default.ROW_SELECT_DISABLED) { - expandRow.onRowExpand(key, !expanded, rowIndex, e); - } - } - if (selectRow.clickToSelect && selectable) { - selectRow.onRowSelect(key, !selected, rowIndex, e); - } - }; - - if (DELAY_FOR_DBCLICK) { - _this2.clickNum += 1; - _utils2.default.debounce(function () { - if (_this2.clickNum === 1) { - clickFn(); - } - _this2.clickNum = 0; - }, DELAY_FOR_DBCLICK)(); - } else { - clickFn(); - } - }; - } - }, { - key: 'createDefaultEventHandler', - value: function createDefaultEventHandler(cb) { - var _this3 = this; - - return function (e) { - var _props2 = _this3.props, - row = _props2.row, - rowIndex = _props2.rowIndex; - - cb(e, row, rowIndex); - }; - } - }, { - key: 'delegate', - value: function delegate() { - var _this4 = this; - - var attrs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - var newAttrs = _extends({}, attrs); - Object.keys(attrs).forEach(function (attr) { - if (_utils2.default.contains(events, attr)) { - newAttrs[attr] = _this4.createDefaultEventHandler(attrs[attr]); - } - }); - return newAttrs; - } - }]); - - return RowEventDelegater; - }(ExtendBase); -}; - -/***/ }), -/* 17 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _utils = __webpack_require__(2); - -var _utils2 = _interopRequireDefault(_utils); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint react/prop-types: 0 */ - - -exports.default = function (ExtendBase) { - return function (_ExtendBase) { - _inherits(RowShouldUpdater, _ExtendBase); - - function RowShouldUpdater() { - _classCallCheck(this, RowShouldUpdater); - - return _possibleConstructorReturn(this, (RowShouldUpdater.__proto__ || Object.getPrototypeOf(RowShouldUpdater)).apply(this, arguments)); - } - - _createClass(RowShouldUpdater, [{ - key: 'shouldUpdateByCellEditing', - value: function shouldUpdateByCellEditing(nextProps) { - if (!(this.props.clickToEdit || this.props.dbclickToEdit)) return false; - return nextProps.editingRowIdx === nextProps.rowIndex || this.props.editingRowIdx === nextProps.rowIndex && nextProps.editingRowIdx === null || this.props.editingRowIdx === nextProps.rowIndex; - } - }, { - key: 'shouldUpdatedBySelfProps', - value: function shouldUpdatedBySelfProps(nextProps) { - return this.props.className !== nextProps.className || !_utils2.default.isEqual(this.props.style, nextProps.style) || !_utils2.default.isEqual(this.props.attrs, nextProps.attrs); - } - - // Only use for simple-row - - }, { - key: 'shouldUpdateByColumnsForSimpleCheck', - value: function shouldUpdateByColumnsForSimpleCheck(nextProps) { - if (this.props.columns.length !== nextProps.columns.length) { - return true; - } - for (var i = 0; i < this.props.columns.length; i += 1) { - if (!_utils2.default.isEqual(this.props.columns[i], nextProps.columns[i])) { - return true; - } - } - return false; - } - }, { - key: 'shouldUpdatedByNormalProps', - value: function shouldUpdatedByNormalProps(nextProps) { - var shouldUpdate = this.props.rowIndex !== nextProps.rowIndex || this.props.editable !== nextProps.editable || !_utils2.default.isEqual(this.props.row, nextProps.row) || this.props.columns.length !== nextProps.columns.length; - - return shouldUpdate; - } - }, { - key: 'shouldUpdateChild', - value: function shouldUpdateChild(nextProps) { - return this.shouldUpdateByCellEditing(nextProps) || this.shouldUpdatedByNormalProps(nextProps); - } - }, { - key: 'shouldRowContentUpdate', - value: function shouldRowContentUpdate(nextProps) { - return this.shouldUpdateChild(nextProps) || this.shouldUpdateByColumnsForSimpleCheck(nextProps); - } - }]); - - return RowShouldUpdater; - }(ExtendBase); -}; - -/***/ }), -/* 18 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["a"] = _extends; -function _extends() { - _extends = Object.assign || function (target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - - for (var key in source) { - if (Object.prototype.hasOwnProperty.call(source, key)) { - target[key] = source[key]; - } - } - } - - return target; - }; - - return _extends.apply(this, arguments); -} - -/***/ }), -/* 19 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* unused harmony export UNMOUNTED */ -/* unused harmony export EXITED */ -/* unused harmony export ENTERING */ -/* unused harmony export ENTERED */ -/* unused harmony export EXITING */ -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__babel_runtime_helpers_esm_objectWithoutPropertiesLoose__ = __webpack_require__(7); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__babel_runtime_helpers_esm_inheritsLoose__ = __webpack_require__(8); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_prop_types__ = __webpack_require__(1); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_prop_types__); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_react__ = __webpack_require__(0); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_react__); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_react_dom__ = __webpack_require__(20); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_react_dom___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_react_dom__); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__config__ = __webpack_require__(21); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__utils_PropTypes__ = __webpack_require__(22); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__TransitionGroupContext__ = __webpack_require__(23); - - - - - - - - -var UNMOUNTED = 'unmounted'; -var EXITED = 'exited'; -var ENTERING = 'entering'; -var ENTERED = 'entered'; -var EXITING = 'exiting'; -/** - * The Transition component lets you describe a transition from one component - * state to another _over time_ with a simple declarative API. Most commonly - * it's used to animate the mounting and unmounting of a component, but can also - * be used to describe in-place transition states as well. - * - * --- - * - * **Note**: `Transition` is a platform-agnostic base component. If you're using - * transitions in CSS, you'll probably want to use - * [`CSSTransition`](https://reactcommunity.org/react-transition-group/css-transition) - * instead. It inherits all the features of `Transition`, but contains - * additional features necessary to play nice with CSS transitions (hence the - * name of the component). - * - * --- - * - * By default the `Transition` component does not alter the behavior of the - * component it renders, it only tracks "enter" and "exit" states for the - * components. It's up to you to give meaning and effect to those states. For - * example we can add styles to a component when it enters or exits: - * - * ```jsx - * import { Transition } from 'react-transition-group'; - * - * const duration = 300; - * - * const defaultStyle = { - * transition: `opacity ${duration}ms ease-in-out`, - * opacity: 0, - * } - * - * const transitionStyles = { - * entering: { opacity: 1 }, - * entered: { opacity: 1 }, - * exiting: { opacity: 0 }, - * exited: { opacity: 0 }, - * }; - * - * const Fade = ({ in: inProp }) => ( - * - * {state => ( - *
- * I'm a fade Transition! - *
- * )} - *
- * ); - * ``` - * - * There are 4 main states a Transition can be in: - * - `'entering'` - * - `'entered'` - * - `'exiting'` - * - `'exited'` - * - * Transition state is toggled via the `in` prop. When `true` the component - * begins the "Enter" stage. During this stage, the component will shift from - * its current transition state, to `'entering'` for the duration of the - * transition and then to the `'entered'` stage once it's complete. Let's take - * the following example (we'll use the - * [useState](https://reactjs.org/docs/hooks-reference.html#usestate) hook): - * - * ```jsx - * function App() { - * const [inProp, setInProp] = useState(false); - * return ( - *
- * - * {state => ( - * // ... - * )} - * - * - *
- * ); - * } - * ``` - * - * When the button is clicked the component will shift to the `'entering'` state - * and stay there for 500ms (the value of `timeout`) before it finally switches - * to `'entered'`. - * - * When `in` is `false` the same thing happens except the state moves from - * `'exiting'` to `'exited'`. - */ - -var Transition = -/*#__PURE__*/ -function (_React$Component) { - Object(__WEBPACK_IMPORTED_MODULE_1__babel_runtime_helpers_esm_inheritsLoose__["a" /* default */])(Transition, _React$Component); - - function Transition(props, context) { - var _this; - - _this = _React$Component.call(this, props, context) || this; - var parentGroup = context; // In the context of a TransitionGroup all enters are really appears - - var appear = parentGroup && !parentGroup.isMounting ? props.enter : props.appear; - var initialStatus; - _this.appearStatus = null; - - if (props.in) { - if (appear) { - initialStatus = EXITED; - _this.appearStatus = ENTERING; - } else { - initialStatus = ENTERED; - } - } else { - if (props.unmountOnExit || props.mountOnEnter) { - initialStatus = UNMOUNTED; - } else { - initialStatus = EXITED; - } - } - - _this.state = { - status: initialStatus - }; - _this.nextCallback = null; - return _this; - } - - Transition.getDerivedStateFromProps = function getDerivedStateFromProps(_ref, prevState) { - var nextIn = _ref.in; - - if (nextIn && prevState.status === UNMOUNTED) { - return { - status: EXITED - }; - } - - return null; - }; // getSnapshotBeforeUpdate(prevProps) { - // let nextStatus = null - // if (prevProps !== this.props) { - // const { status } = this.state - // if (this.props.in) { - // if (status !== ENTERING && status !== ENTERED) { - // nextStatus = ENTERING - // } - // } else { - // if (status === ENTERING || status === ENTERED) { - // nextStatus = EXITING - // } - // } - // } - // return { nextStatus } - // } - - - var _proto = Transition.prototype; - - _proto.componentDidMount = function componentDidMount() { - this.updateStatus(true, this.appearStatus); - }; - - _proto.componentDidUpdate = function componentDidUpdate(prevProps) { - var nextStatus = null; - - if (prevProps !== this.props) { - var status = this.state.status; - - if (this.props.in) { - if (status !== ENTERING && status !== ENTERED) { - nextStatus = ENTERING; - } - } else { - if (status === ENTERING || status === ENTERED) { - nextStatus = EXITING; - } - } - } - - this.updateStatus(false, nextStatus); - }; - - _proto.componentWillUnmount = function componentWillUnmount() { - this.cancelNextCallback(); - }; - - _proto.getTimeouts = function getTimeouts() { - var timeout = this.props.timeout; - var exit, enter, appear; - exit = enter = appear = timeout; - - if (timeout != null && typeof timeout !== 'number') { - exit = timeout.exit; - enter = timeout.enter; // TODO: remove fallback for next major - - appear = timeout.appear !== undefined ? timeout.appear : enter; - } - - return { - exit: exit, - enter: enter, - appear: appear - }; - }; - - _proto.updateStatus = function updateStatus(mounting, nextStatus) { - if (mounting === void 0) { - mounting = false; - } - - if (nextStatus !== null) { - // nextStatus will always be ENTERING or EXITING. - this.cancelNextCallback(); - var node = __WEBPACK_IMPORTED_MODULE_4_react_dom___default.a.findDOMNode(this); - - if (nextStatus === ENTERING) { - this.performEnter(node, mounting); - } else { - this.performExit(node); - } - } else if (this.props.unmountOnExit && this.state.status === EXITED) { - this.setState({ - status: UNMOUNTED - }); - } - }; - - _proto.performEnter = function performEnter(node, mounting) { - var _this2 = this; - - var enter = this.props.enter; - var appearing = this.context ? this.context.isMounting : mounting; - var timeouts = this.getTimeouts(); - var enterTimeout = appearing ? timeouts.appear : timeouts.enter; // no enter animation skip right to ENTERED - // if we are mounting and running this it means appear _must_ be set - - if (!mounting && !enter || __WEBPACK_IMPORTED_MODULE_5__config__["a" /* default */].disabled) { - this.safeSetState({ - status: ENTERED - }, function () { - _this2.props.onEntered(node); - }); - return; - } - - this.props.onEnter(node, appearing); - this.safeSetState({ - status: ENTERING - }, function () { - _this2.props.onEntering(node, appearing); - - _this2.onTransitionEnd(node, enterTimeout, function () { - _this2.safeSetState({ - status: ENTERED - }, function () { - _this2.props.onEntered(node, appearing); - }); - }); - }); - }; - - _proto.performExit = function performExit(node) { - var _this3 = this; - - var exit = this.props.exit; - var timeouts = this.getTimeouts(); // no exit animation skip right to EXITED - - if (!exit || __WEBPACK_IMPORTED_MODULE_5__config__["a" /* default */].disabled) { - this.safeSetState({ - status: EXITED - }, function () { - _this3.props.onExited(node); - }); - return; - } - - this.props.onExit(node); - this.safeSetState({ - status: EXITING - }, function () { - _this3.props.onExiting(node); - - _this3.onTransitionEnd(node, timeouts.exit, function () { - _this3.safeSetState({ - status: EXITED - }, function () { - _this3.props.onExited(node); - }); - }); - }); - }; - - _proto.cancelNextCallback = function cancelNextCallback() { - if (this.nextCallback !== null) { - this.nextCallback.cancel(); - this.nextCallback = null; - } - }; - - _proto.safeSetState = function safeSetState(nextState, callback) { - // This shouldn't be necessary, but there are weird race conditions with - // setState callbacks and unmounting in testing, so always make sure that - // we can cancel any pending setState callbacks after we unmount. - callback = this.setNextCallback(callback); - this.setState(nextState, callback); - }; - - _proto.setNextCallback = function setNextCallback(callback) { - var _this4 = this; - - var active = true; - - this.nextCallback = function (event) { - if (active) { - active = false; - _this4.nextCallback = null; - callback(event); - } - }; - - this.nextCallback.cancel = function () { - active = false; - }; - - return this.nextCallback; - }; - - _proto.onTransitionEnd = function onTransitionEnd(node, timeout, handler) { - this.setNextCallback(handler); - var doesNotHaveTimeoutOrListener = timeout == null && !this.props.addEndListener; - - if (!node || doesNotHaveTimeoutOrListener) { - setTimeout(this.nextCallback, 0); - return; - } - - if (this.props.addEndListener) { - this.props.addEndListener(node, this.nextCallback); - } - - if (timeout != null) { - setTimeout(this.nextCallback, timeout); - } - }; - - _proto.render = function render() { - var status = this.state.status; - - if (status === UNMOUNTED) { - return null; - } - - var _this$props = this.props, - children = _this$props.children, - childProps = Object(__WEBPACK_IMPORTED_MODULE_0__babel_runtime_helpers_esm_objectWithoutPropertiesLoose__["a" /* default */])(_this$props, ["children"]); // filter props for Transtition - - - delete childProps.in; - delete childProps.mountOnEnter; - delete childProps.unmountOnExit; - delete childProps.appear; - delete childProps.enter; - delete childProps.exit; - delete childProps.timeout; - delete childProps.addEndListener; - delete childProps.onEnter; - delete childProps.onEntering; - delete childProps.onEntered; - delete childProps.onExit; - delete childProps.onExiting; - delete childProps.onExited; - - if (typeof children === 'function') { - // allows for nested Transitions - return __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_7__TransitionGroupContext__["a" /* default */].Provider, { - value: null - }, children(status, childProps)); - } - - var child = __WEBPACK_IMPORTED_MODULE_3_react___default.a.Children.only(children); - return (// allows for nested Transitions - __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_7__TransitionGroupContext__["a" /* default */].Provider, { - value: null - }, __WEBPACK_IMPORTED_MODULE_3_react___default.a.cloneElement(child, childProps)) - ); - }; - - return Transition; -}(__WEBPACK_IMPORTED_MODULE_3_react___default.a.Component); - -Transition.contextType = __WEBPACK_IMPORTED_MODULE_7__TransitionGroupContext__["a" /* default */]; -Transition.propTypes = false ? { - /** - * A `function` child can be used instead of a React element. This function is - * called with the current transition status (`'entering'`, `'entered'`, - * `'exiting'`, `'exited'`), which can be used to apply context - * specific props to a component. - * - * ```jsx - * - * {state => ( - * - * )} - * - * ``` - */ - children: PropTypes.oneOfType([PropTypes.func.isRequired, PropTypes.element.isRequired]).isRequired, - - /** - * Show the component; triggers the enter or exit states - */ - in: PropTypes.bool, - - /** - * By default the child component is mounted immediately along with - * the parent `Transition` component. If you want to "lazy mount" the component on the - * first `in={true}` you can set `mountOnEnter`. After the first enter transition the component will stay - * mounted, even on "exited", unless you also specify `unmountOnExit`. - */ - mountOnEnter: PropTypes.bool, - - /** - * By default the child component stays mounted after it reaches the `'exited'` state. - * Set `unmountOnExit` if you'd prefer to unmount the component after it finishes exiting. - */ - unmountOnExit: PropTypes.bool, - - /** - * Normally a component is not transitioned if it is shown when the `` component mounts. - * If you want to transition on the first mount set `appear` to `true`, and the - * component will transition in as soon as the `` mounts. - * - * > Note: there are no specific "appear" states. `appear` only adds an additional `enter` transition. - */ - appear: PropTypes.bool, - - /** - * Enable or disable enter transitions. - */ - enter: PropTypes.bool, - - /** - * Enable or disable exit transitions. - */ - exit: PropTypes.bool, - - /** - * The duration of the transition, in milliseconds. - * Required unless `addEndListener` is provided. - * - * You may specify a single timeout for all transitions: - * - * ```jsx - * timeout={500} - * ``` - * - * or individually: - * - * ```jsx - * timeout={{ - * appear: 500, - * enter: 300, - * exit: 500, - * }} - * ``` - * - * - `appear` defaults to the value of `enter` - * - `enter` defaults to `0` - * - `exit` defaults to `0` - * - * @type {number | { enter?: number, exit?: number, appear?: number }} - */ - timeout: function timeout(props) { - var pt = timeoutsShape; - if (!props.addEndListener) pt = pt.isRequired; - - for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - args[_key - 1] = arguments[_key]; - } - - return pt.apply(void 0, [props].concat(args)); - }, - - /** - * Add a custom transition end trigger. Called with the transitioning - * DOM node and a `done` callback. Allows for more fine grained transition end - * logic. **Note:** Timeouts are still used as a fallback if provided. - * - * ```jsx - * addEndListener={(node, done) => { - * // use the css transitionend event to mark the finish of a transition - * node.addEventListener('transitionend', done, false); - * }} - * ``` - */ - addEndListener: PropTypes.func, - - /** - * Callback fired before the "entering" status is applied. An extra parameter - * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount - * - * @type Function(node: HtmlElement, isAppearing: bool) -> void - */ - onEnter: PropTypes.func, - - /** - * Callback fired after the "entering" status is applied. An extra parameter - * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount - * - * @type Function(node: HtmlElement, isAppearing: bool) - */ - onEntering: PropTypes.func, - - /** - * Callback fired after the "entered" status is applied. An extra parameter - * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount - * - * @type Function(node: HtmlElement, isAppearing: bool) -> void - */ - onEntered: PropTypes.func, - - /** - * Callback fired before the "exiting" status is applied. - * - * @type Function(node: HtmlElement) -> void - */ - onExit: PropTypes.func, - - /** - * Callback fired after the "exiting" status is applied. - * - * @type Function(node: HtmlElement) -> void - */ - onExiting: PropTypes.func, - - /** - * Callback fired after the "exited" status is applied. - * - * @type Function(node: HtmlElement) -> void - */ - onExited: PropTypes.func // Name the function so it is clearer in the documentation - -} : {}; - -function noop() {} - -Transition.defaultProps = { - in: false, - mountOnEnter: false, - unmountOnExit: false, - appear: false, - enter: true, - exit: true, - onEnter: noop, - onEntering: noop, - onEntered: noop, - onExit: noop, - onExiting: noop, - onExited: noop -}; -Transition.UNMOUNTED = 0; -Transition.EXITED = 1; -Transition.ENTERING = 2; -Transition.ENTERED = 3; -Transition.EXITING = 4; -/* harmony default export */ __webpack_exports__["a"] = (Transition); - -/***/ }), -/* 20 */ -/***/ (function(module, exports) { - -module.exports = __WEBPACK_EXTERNAL_MODULE_20__; - -/***/ }), -/* 21 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = ({ - disabled: false -}); - -/***/ }), -/* 22 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* unused harmony export timeoutsShape */ -/* unused harmony export classNamesShape */ -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_prop_types__ = __webpack_require__(1); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_prop_types__); - -var timeoutsShape = false ? PropTypes.oneOfType([PropTypes.number, PropTypes.shape({ - enter: PropTypes.number, - exit: PropTypes.number, - appear: PropTypes.number -}).isRequired]) : null; -var classNamesShape = false ? PropTypes.oneOfType([PropTypes.string, PropTypes.shape({ - enter: PropTypes.string, - exit: PropTypes.string, - active: PropTypes.string -}), PropTypes.shape({ - enter: PropTypes.string, - enterDone: PropTypes.string, - enterActive: PropTypes.string, - exit: PropTypes.string, - exitDone: PropTypes.string, - exitActive: PropTypes.string -})]) : null; - -/***/ }), -/* 23 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react__ = __webpack_require__(0); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_react__); - -/* harmony default export */ __webpack_exports__["a"] = (__WEBPACK_IMPORTED_MODULE_0_react___default.a.createContext(null)); - -/***/ }), -/* 24 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__babel_runtime_helpers_esm_objectWithoutPropertiesLoose__ = __webpack_require__(7); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__babel_runtime_helpers_esm_extends__ = __webpack_require__(18); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__babel_runtime_helpers_esm_inheritsLoose__ = __webpack_require__(8); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__babel_runtime_helpers_esm_assertThisInitialized__ = __webpack_require__(65); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_prop_types__ = __webpack_require__(1); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_prop_types__); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_react__ = __webpack_require__(0); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_react__); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__TransitionGroupContext__ = __webpack_require__(23); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__utils_ChildMapping__ = __webpack_require__(66); - - - - - - - - - -var values = Object.values || function (obj) { - return Object.keys(obj).map(function (k) { - return obj[k]; - }); -}; - -var defaultProps = { - component: 'div', - childFactory: function childFactory(child) { - return child; - } - /** - * The `` component manages a set of transition components - * (`` and ``) in a list. Like with the transition - * components, `` is a state machine for managing the mounting - * and unmounting of components over time. - * - * Consider the example below. As items are removed or added to the TodoList the - * `in` prop is toggled automatically by the ``. - * - * Note that `` does not define any animation behavior! - * Exactly _how_ a list item animates is up to the individual transition - * component. This means you can mix and match animations across different list - * items. - */ - -}; - -var TransitionGroup = -/*#__PURE__*/ -function (_React$Component) { - Object(__WEBPACK_IMPORTED_MODULE_2__babel_runtime_helpers_esm_inheritsLoose__["a" /* default */])(TransitionGroup, _React$Component); - - function TransitionGroup(props, context) { - var _this; - - _this = _React$Component.call(this, props, context) || this; - - var handleExited = _this.handleExited.bind(Object(__WEBPACK_IMPORTED_MODULE_3__babel_runtime_helpers_esm_assertThisInitialized__["a" /* default */])(Object(__WEBPACK_IMPORTED_MODULE_3__babel_runtime_helpers_esm_assertThisInitialized__["a" /* default */])(_this))); // Initial children should all be entering, dependent on appear - - - _this.state = { - contextValue: { - isMounting: true - }, - handleExited: handleExited, - firstRender: true - }; - return _this; - } - - var _proto = TransitionGroup.prototype; - - _proto.componentDidMount = function componentDidMount() { - this.mounted = true; - this.setState({ - contextValue: { - isMounting: false - } - }); - }; - - _proto.componentWillUnmount = function componentWillUnmount() { - this.mounted = false; - }; - - TransitionGroup.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, _ref) { - var prevChildMapping = _ref.children, - handleExited = _ref.handleExited, - firstRender = _ref.firstRender; - return { - children: firstRender ? Object(__WEBPACK_IMPORTED_MODULE_7__utils_ChildMapping__["b" /* getInitialChildMapping */])(nextProps, handleExited) : Object(__WEBPACK_IMPORTED_MODULE_7__utils_ChildMapping__["c" /* getNextChildMapping */])(nextProps, prevChildMapping, handleExited), - firstRender: false - }; - }; - - _proto.handleExited = function handleExited(child, node) { - var currentChildMapping = Object(__WEBPACK_IMPORTED_MODULE_7__utils_ChildMapping__["a" /* getChildMapping */])(this.props.children); - if (child.key in currentChildMapping) return; - - if (child.props.onExited) { - child.props.onExited(node); - } - - if (this.mounted) { - this.setState(function (state) { - var children = Object(__WEBPACK_IMPORTED_MODULE_1__babel_runtime_helpers_esm_extends__["a" /* default */])({}, state.children); - - delete children[child.key]; - return { - children: children - }; - }); - } - }; - - _proto.render = function render() { - var _this$props = this.props, - Component = _this$props.component, - childFactory = _this$props.childFactory, - props = Object(__WEBPACK_IMPORTED_MODULE_0__babel_runtime_helpers_esm_objectWithoutPropertiesLoose__["a" /* default */])(_this$props, ["component", "childFactory"]); - - var contextValue = this.state.contextValue; - var children = values(this.state.children).map(childFactory); - delete props.appear; - delete props.enter; - delete props.exit; - - if (Component === null) { - return __WEBPACK_IMPORTED_MODULE_5_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_6__TransitionGroupContext__["a" /* default */].Provider, { - value: contextValue - }, children); - } - - return __WEBPACK_IMPORTED_MODULE_5_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_6__TransitionGroupContext__["a" /* default */].Provider, { - value: contextValue - }, __WEBPACK_IMPORTED_MODULE_5_react___default.a.createElement(Component, props, children)); - }; - - return TransitionGroup; -}(__WEBPACK_IMPORTED_MODULE_5_react___default.a.Component); - -TransitionGroup.propTypes = false ? { - /** - * `` renders a `
` by default. You can change this - * behavior by providing a `component` prop. - * If you use React v16+ and would like to avoid a wrapping `
` element - * you can pass in `component={null}`. This is useful if the wrapping div - * borks your css styles. - */ - component: PropTypes.any, - - /** - * A set of `` components, that are toggled `in` and out as they - * leave. the `` will inject specific transition props, so - * remember to spread them through if you are wrapping the `` as - * with our `` example. - * - * While this component is meant for multiple `Transition` or `CSSTransition` - * children, sometimes you may want to have a single transition child with - * content that you want to be transitioned out and in when you change it - * (e.g. routes, images etc.) In that case you can change the `key` prop of - * the transition child as you change its content, this will cause - * `TransitionGroup` to transition the child out and back in. - */ - children: PropTypes.node, - - /** - * A convenience prop that enables or disables appear animations - * for all children. Note that specifying this will override any defaults set - * on individual children Transitions. - */ - appear: PropTypes.bool, - - /** - * A convenience prop that enables or disables enter animations - * for all children. Note that specifying this will override any defaults set - * on individual children Transitions. - */ - enter: PropTypes.bool, - - /** - * A convenience prop that enables or disables exit animations - * for all children. Note that specifying this will override any defaults set - * on individual children Transitions. - */ - exit: PropTypes.bool, - - /** - * You may need to apply reactive updates to a child as it is exiting. - * This is generally done by using `cloneElement` however in the case of an exiting - * child the element has already been removed and not accessible to the consumer. - * - * If you do need to update a child as it leaves you can provide a `childFactory` - * to wrap every child, even the ones that are leaving. - * - * @type Function(child: ReactElement) -> ReactElement - */ - childFactory: PropTypes.func -} : {}; -TransitionGroup.defaultProps = defaultProps; -/* harmony default export */ __webpack_exports__["a"] = (TransitionGroup); - -/***/ }), -/* 25 */ -/***/ (function(module, exports) { - -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -function EventEmitter() { - this._events = this._events || {}; - this._maxListeners = this._maxListeners || undefined; -} -module.exports = EventEmitter; - -// Backwards-compat with node 0.10.x -EventEmitter.EventEmitter = EventEmitter; - -EventEmitter.prototype._events = undefined; -EventEmitter.prototype._maxListeners = undefined; - -// By default EventEmitters will print a warning if more than 10 listeners are -// added to it. This is a useful default which helps finding memory leaks. -EventEmitter.defaultMaxListeners = 10; - -// Obviously not all Emitters should be limited to 10. This function allows -// that to be increased. Set to zero for unlimited. -EventEmitter.prototype.setMaxListeners = function(n) { - if (!isNumber(n) || n < 0 || isNaN(n)) - throw TypeError('n must be a positive number'); - this._maxListeners = n; - return this; -}; - -EventEmitter.prototype.emit = function(type) { - var er, handler, len, args, i, listeners; - - if (!this._events) - this._events = {}; - - // If there is no 'error' event listener then throw. - if (type === 'error') { - if (!this._events.error || - (isObject(this._events.error) && !this._events.error.length)) { - er = arguments[1]; - if (er instanceof Error) { - throw er; // Unhandled 'error' event - } else { - // At least give some kind of context to the user - var err = new Error('Uncaught, unspecified "error" event. (' + er + ')'); - err.context = er; - throw err; - } - } - } - - handler = this._events[type]; - - if (isUndefined(handler)) - return false; - - if (isFunction(handler)) { - switch (arguments.length) { - // fast cases - case 1: - handler.call(this); - break; - case 2: - handler.call(this, arguments[1]); - break; - case 3: - handler.call(this, arguments[1], arguments[2]); - break; - // slower - default: - args = Array.prototype.slice.call(arguments, 1); - handler.apply(this, args); - } - } else if (isObject(handler)) { - args = Array.prototype.slice.call(arguments, 1); - listeners = handler.slice(); - len = listeners.length; - for (i = 0; i < len; i++) - listeners[i].apply(this, args); - } - - return true; -}; - -EventEmitter.prototype.addListener = function(type, listener) { - var m; - - if (!isFunction(listener)) - throw TypeError('listener must be a function'); - - if (!this._events) - this._events = {}; - - // To avoid recursion in the case that type === "newListener"! Before - // adding it to the listeners, first emit "newListener". - if (this._events.newListener) - this.emit('newListener', type, - isFunction(listener.listener) ? - listener.listener : listener); - - if (!this._events[type]) - // Optimize the case of one listener. Don't need the extra array object. - this._events[type] = listener; - else if (isObject(this._events[type])) - // If we've already got an array, just append. - this._events[type].push(listener); - else - // Adding the second element, need to change to array. - this._events[type] = [this._events[type], listener]; - - // Check for listener leak - if (isObject(this._events[type]) && !this._events[type].warned) { - if (!isUndefined(this._maxListeners)) { - m = this._maxListeners; - } else { - m = EventEmitter.defaultMaxListeners; - } - - if (m && m > 0 && this._events[type].length > m) { - this._events[type].warned = true; - console.error('(node) warning: possible EventEmitter memory ' + - 'leak detected. %d listeners added. ' + - 'Use emitter.setMaxListeners() to increase limit.', - this._events[type].length); - if (typeof console.trace === 'function') { - // not supported in IE 10 - console.trace(); - } - } - } - - return this; -}; - -EventEmitter.prototype.on = EventEmitter.prototype.addListener; - -EventEmitter.prototype.once = function(type, listener) { - if (!isFunction(listener)) - throw TypeError('listener must be a function'); - - var fired = false; - - function g() { - this.removeListener(type, g); - - if (!fired) { - fired = true; - listener.apply(this, arguments); - } - } - - g.listener = listener; - this.on(type, g); - - return this; -}; - -// emits a 'removeListener' event iff the listener was removed -EventEmitter.prototype.removeListener = function(type, listener) { - var list, position, length, i; - - if (!isFunction(listener)) - throw TypeError('listener must be a function'); - - if (!this._events || !this._events[type]) - return this; - - list = this._events[type]; - length = list.length; - position = -1; - - if (list === listener || - (isFunction(list.listener) && list.listener === listener)) { - delete this._events[type]; - if (this._events.removeListener) - this.emit('removeListener', type, listener); - - } else if (isObject(list)) { - for (i = length; i-- > 0;) { - if (list[i] === listener || - (list[i].listener && list[i].listener === listener)) { - position = i; - break; - } - } - - if (position < 0) - return this; - - if (list.length === 1) { - list.length = 0; - delete this._events[type]; - } else { - list.splice(position, 1); - } - - if (this._events.removeListener) - this.emit('removeListener', type, listener); - } - - return this; -}; - -EventEmitter.prototype.removeAllListeners = function(type) { - var key, listeners; - - if (!this._events) - return this; - - // not listening for removeListener, no need to emit - if (!this._events.removeListener) { - if (arguments.length === 0) - this._events = {}; - else if (this._events[type]) - delete this._events[type]; - return this; - } - - // emit removeListener for all listeners on all events - if (arguments.length === 0) { - for (key in this._events) { - if (key === 'removeListener') continue; - this.removeAllListeners(key); - } - this.removeAllListeners('removeListener'); - this._events = {}; - return this; - } - - listeners = this._events[type]; - - if (isFunction(listeners)) { - this.removeListener(type, listeners); - } else if (listeners) { - // LIFO order - while (listeners.length) - this.removeListener(type, listeners[listeners.length - 1]); - } - delete this._events[type]; - - return this; -}; - -EventEmitter.prototype.listeners = function(type) { - var ret; - if (!this._events || !this._events[type]) - ret = []; - else if (isFunction(this._events[type])) - ret = [this._events[type]]; - else - ret = this._events[type].slice(); - return ret; -}; - -EventEmitter.prototype.listenerCount = function(type) { - if (this._events) { - var evlistener = this._events[type]; - - if (isFunction(evlistener)) - return 1; - else if (evlistener) - return evlistener.length; - } - return 0; -}; - -EventEmitter.listenerCount = function(emitter, type) { - return emitter.listenerCount(type); -}; - -function isFunction(arg) { - return typeof arg === 'function'; -} - -function isNumber(arg) { - return typeof arg === 'number'; -} - -function isObject(arg) { - return typeof arg === 'object' && arg !== null; -} - -function isUndefined(arg) { - return arg === void 0; -} - - -/***/ }), -/* 26 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _bootstrapTable = __webpack_require__(27); - -var _bootstrapTable2 = _interopRequireDefault(_bootstrapTable); - -var _contexts = __webpack_require__(71); - -var _contexts2 = _interopRequireDefault(_contexts); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -exports.default = (0, _contexts2.default)(_bootstrapTable2.default); - -/***/ }), -/* 27 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = __webpack_require__(1); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _classnames = __webpack_require__(4); - -var _classnames2 = _interopRequireDefault(_classnames); - -var _header = __webpack_require__(30); - -var _header2 = _interopRequireDefault(_header); - -var _filters = __webpack_require__(45); - -var _filters2 = _interopRequireDefault(_filters); - -var _caption = __webpack_require__(47); - -var _caption2 = _interopRequireDefault(_caption); - -var _body = __webpack_require__(48); - -var _body2 = _interopRequireDefault(_body); - -var _footer = __webpack_require__(67); - -var _footer2 = _interopRequireDefault(_footer); - -var _propsResolver = __webpack_require__(69); - -var _propsResolver2 = _interopRequireDefault(_propsResolver); - -var _const = __webpack_require__(3); - -var _const2 = _interopRequireDefault(_const); - -var _utils = __webpack_require__(2); - -var _utils2 = _interopRequireDefault(_utils); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint camelcase: 0 */ -/* eslint arrow-body-style: 0 */ - -var BootstrapTable = function (_PropsBaseResolver) { - _inherits(BootstrapTable, _PropsBaseResolver); - - function BootstrapTable(props) { - _classCallCheck(this, BootstrapTable); - - var _this = _possibleConstructorReturn(this, (BootstrapTable.__proto__ || Object.getPrototypeOf(BootstrapTable)).call(this, props)); - - _this.getData = function () { - return _this.visibleRows(); - }; - - _this.validateProps(); - return _this; - } - - _createClass(BootstrapTable, [{ - key: 'UNSAFE_componentWillReceiveProps', - value: function UNSAFE_componentWillReceiveProps(nextProps) { - if (nextProps.onDataSizeChange && !nextProps.pagination) { - if (nextProps.data.length !== this.props.data.length) { - nextProps.onDataSizeChange({ dataSize: nextProps.data.length }); - } - } - } - - // Exposed APIs - - }, { - key: 'render', - value: function render() { - var _props = this.props, - loading = _props.loading, - overlay = _props.overlay; - - if (overlay) { - var LoadingOverlay = overlay(loading); - return _react2.default.createElement( - LoadingOverlay, - null, - this.renderTable() - ); - } - return this.renderTable(); - } - }, { - key: 'renderTable', - value: function renderTable() { - var _props2 = this.props, - columns = _props2.columns, - keyField = _props2.keyField, - tabIndexCell = _props2.tabIndexCell, - id = _props2.id, - classes = _props2.classes, - bootstrap4 = _props2.bootstrap4, - striped = _props2.striped, - hover = _props2.hover, - bordered = _props2.bordered, - condensed = _props2.condensed, - noDataIndication = _props2.noDataIndication, - caption = _props2.caption, - rowStyle = _props2.rowStyle, - rowClasses = _props2.rowClasses, - wrapperClasses = _props2.wrapperClasses, - rowEvents = _props2.rowEvents, - selectRow = _props2.selectRow, - expandRow = _props2.expandRow, - cellEdit = _props2.cellEdit, - filterPosition = _props2.filterPosition; - - - var tableWrapperClass = (0, _classnames2.default)('react-bootstrap-table', wrapperClasses); - - var tableClass = (0, _classnames2.default)('table', _defineProperty({ - 'table-striped': striped, - 'table-hover': hover, - 'table-bordered': bordered - }, bootstrap4 ? 'table-sm' : 'table-condensed', condensed), classes); - - var hasFilters = columns.some(function (col) { - return col.filter || col.filterRenderer; - }); - - var hasFooter = _utils2.default.filter(columns, function (col) { - return _utils2.default.has(col, 'footer'); - }).length > 0; - - var tableCaption = caption && _react2.default.createElement( - _caption2.default, - { bootstrap4: bootstrap4 }, - caption - ); - - return _react2.default.createElement( - 'div', - { className: tableWrapperClass }, - _react2.default.createElement( - 'table', - { id: id, className: tableClass }, - tableCaption, - _react2.default.createElement(_header2.default, { - columns: columns, - className: this.props.headerClasses, - wrapperClasses: this.props.headerWrapperClasses, - sortField: this.props.sortField, - sortOrder: this.props.sortOrder, - onSort: this.props.onSort, - globalSortCaret: this.props.sort && this.props.sort.sortCaret, - onFilter: this.props.onFilter, - currFilters: this.props.currFilters, - onExternalFilter: this.props.onExternalFilter, - selectRow: selectRow, - expandRow: expandRow, - filterPosition: filterPosition - }), - hasFilters && filterPosition !== _const2.default.FILTERS_POSITION_INLINE && _react2.default.createElement(_filters2.default, { - columns: columns, - className: this.props.filtersClasses, - onSort: this.props.onSort, - onFilter: this.props.onFilter, - currFilters: this.props.currFilters, - filterPosition: this.props.filterPosition, - onExternalFilter: this.props.onExternalFilter, - selectRow: selectRow, - expandRow: expandRow - }), - _react2.default.createElement(_body2.default, { - className: this.props.bodyClasses, - data: this.getData(), - keyField: keyField, - tabIndexCell: tabIndexCell, - columns: columns, - isEmpty: this.isEmpty(), - visibleColumnSize: this.visibleColumnSize(), - noDataIndication: noDataIndication, - cellEdit: cellEdit, - selectRow: selectRow, - expandRow: expandRow, - rowStyle: rowStyle, - rowClasses: rowClasses, - rowEvents: rowEvents - }), - hasFooter && _react2.default.createElement(_footer2.default, { - data: this.getData(), - columns: columns, - selectRow: selectRow, - expandRow: expandRow, - className: this.props.footerClasses - }) - ) - ); - } - }]); - - return BootstrapTable; -}((0, _propsResolver2.default)(_react.Component)); - -BootstrapTable.propTypes = { - keyField: _propTypes2.default.string.isRequired, - data: _propTypes2.default.array.isRequired, - columns: _propTypes2.default.array.isRequired, - bootstrap4: _propTypes2.default.bool, - remote: _propTypes2.default.oneOfType([_propTypes2.default.bool, _propTypes2.default.shape({ - pagination: _propTypes2.default.bool - })]), - noDataIndication: _propTypes2.default.oneOfType([_propTypes2.default.node, _propTypes2.default.func]), - striped: _propTypes2.default.bool, - bordered: _propTypes2.default.bool, - hover: _propTypes2.default.bool, - tabIndexCell: _propTypes2.default.bool, - id: _propTypes2.default.string, - classes: _propTypes2.default.string, - headerClasses: _propTypes2.default.string, - bodyClasses: _propTypes2.default.string, - wrapperClasses: _propTypes2.default.string, - headerWrapperClasses: _propTypes2.default.string, - condensed: _propTypes2.default.bool, - caption: _propTypes2.default.oneOfType([_propTypes2.default.node, _propTypes2.default.string]), - pagination: _propTypes2.default.object, - filter: _propTypes2.default.object, - cellEdit: _propTypes2.default.object, - selectRow: _propTypes2.default.shape({ - mode: _propTypes2.default.oneOf([_const2.default.ROW_SELECT_SINGLE, _const2.default.ROW_SELECT_MULTIPLE, _const2.default.ROW_SELECT_DISABLED]).isRequired, - clickToSelect: _propTypes2.default.bool, - clickToExpand: _propTypes2.default.bool, - clickToEdit: _propTypes2.default.bool, - hideSelectAll: _propTypes2.default.bool, - onSelect: _propTypes2.default.func, - onSelectAll: _propTypes2.default.func, - style: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.func]), - classes: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.func]), - nonSelectable: _propTypes2.default.array, - nonSelectableStyle: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.func]), - nonSelectableClasses: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.func]), - bgColor: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.func]), - hideSelectColumn: _propTypes2.default.bool, - selectionRenderer: _propTypes2.default.func, - selectionHeaderRenderer: _propTypes2.default.func, - headerColumnStyle: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.func]), - selectColumnStyle: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.func]), - selectColumnPosition: _propTypes2.default.oneOf([_const2.default.INDICATOR_POSITION_LEFT, _const2.default.INDICATOR_POSITION_RIGHT]) - }), - expandRow: _propTypes2.default.shape({ - renderer: _propTypes2.default.func, - expanded: _propTypes2.default.array, - onExpand: _propTypes2.default.func, - onExpandAll: _propTypes2.default.func, - nonExpandable: _propTypes2.default.array, - showExpandColumn: _propTypes2.default.bool, - onlyOneExpanding: _propTypes2.default.bool, - expandByColumnOnly: _propTypes2.default.bool, - expandColumnRenderer: _propTypes2.default.func, - expandHeaderColumnRenderer: _propTypes2.default.func, - expandColumnPosition: _propTypes2.default.oneOf([_const2.default.INDICATOR_POSITION_LEFT, _const2.default.INDICATOR_POSITION_RIGHT]), - className: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.func]), - parentClassName: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.func]) - }), - rowStyle: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.func]), - rowEvents: _propTypes2.default.object, - rowClasses: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.func]), - filtersClasses: _propTypes2.default.string, - filterPosition: _propTypes2.default.oneOf([_const2.default.FILTERS_POSITION_TOP, _const2.default.FILTERS_POSITION_INLINE, _const2.default.FILTERS_POSITION_BOTTOM]), - footerClasses: _propTypes2.default.string, - defaultSorted: _propTypes2.default.arrayOf(_propTypes2.default.shape({ - dataField: _propTypes2.default.string.isRequired, - order: _propTypes2.default.oneOf([_const2.default.SORT_DESC, _const2.default.SORT_ASC]).isRequired - })), - sort: _propTypes2.default.shape({ - dataField: _propTypes2.default.string, - order: _propTypes2.default.oneOf([_const2.default.SORT_DESC, _const2.default.SORT_ASC]), - sortFunc: _propTypes2.default.func, - sortCaret: _propTypes2.default.func - }), - defaultSortDirection: _propTypes2.default.oneOf([_const2.default.SORT_DESC, _const2.default.SORT_ASC]), - overlay: _propTypes2.default.func, - onTableChange: _propTypes2.default.func, - onSort: _propTypes2.default.func, - onFilter: _propTypes2.default.func, - onExternalFilter: _propTypes2.default.func, - onDataSizeChange: _propTypes2.default.func, - // Inject from toolkit - search: _propTypes2.default.shape({ - searchText: _propTypes2.default.string, - searchContext: _propTypes2.default.func - }), - setDependencyModules: _propTypes2.default.func -}; - -BootstrapTable.defaultProps = { - bootstrap4: false, - remote: false, - striped: false, - bordered: true, - hover: false, - condensed: false, - noDataIndication: null, - selectRow: { - mode: _const2.default.ROW_SELECT_DISABLED, - selected: [], - hideSelectColumn: true - }, - expandRow: { - renderer: undefined, - expanded: [], - nonExpandable: [] - }, - cellEdit: { - mode: null, - nonEditableRows: [] - }, - filterPosition: _const2.default.FILTERS_POSITION_INLINE -}; - -exports.default = BootstrapTable; - -/***/ }), -/* 28 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (c) 2013-present, Facebook, Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - - - -var ReactPropTypesSecret = __webpack_require__(29); - -function emptyFunction() {} -function emptyFunctionWithReset() {} -emptyFunctionWithReset.resetWarningCache = emptyFunction; - -module.exports = function() { - function shim(props, propName, componentName, location, propFullName, secret) { - if (secret === ReactPropTypesSecret) { - // It is still safe when called from React. - return; - } - var err = new Error( - 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' + - 'Use PropTypes.checkPropTypes() to call them. ' + - 'Read more at http://fb.me/use-check-prop-types' - ); - err.name = 'Invariant Violation'; - throw err; - }; - shim.isRequired = shim; - function getShim() { - return shim; - }; - // Important! - // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`. - var ReactPropTypes = { - array: shim, - bool: shim, - func: shim, - number: shim, - object: shim, - string: shim, - symbol: shim, - - any: shim, - arrayOf: getShim, - element: shim, - elementType: shim, - instanceOf: getShim, - node: shim, - objectOf: getShim, - oneOf: getShim, - oneOfType: getShim, - shape: getShim, - exact: getShim, - - checkPropTypes: emptyFunctionWithReset, - resetWarningCache: emptyFunction - }; - - ReactPropTypes.PropTypes = ReactPropTypes; - - return ReactPropTypes; -}; - - -/***/ }), -/* 29 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (c) 2013-present, Facebook, Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - - - -var ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED'; - -module.exports = ReactPropTypesSecret; - - -/***/ }), -/* 30 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = __webpack_require__(1); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _headerCell = __webpack_require__(31); - -var _headerCell2 = _interopRequireDefault(_headerCell); - -var _selectionHeaderCell = __webpack_require__(37); - -var _selectionHeaderCell2 = _interopRequireDefault(_selectionHeaderCell); - -var _expandHeaderCell = __webpack_require__(38); - -var _expandHeaderCell2 = _interopRequireDefault(_expandHeaderCell); - -var _selectionHeaderCellConsumer = __webpack_require__(39); - -var _selectionHeaderCellConsumer2 = _interopRequireDefault(_selectionHeaderCellConsumer); - -var _expandHeaderCellConsumer = __webpack_require__(44); - -var _expandHeaderCellConsumer2 = _interopRequireDefault(_expandHeaderCellConsumer); - -var _const = __webpack_require__(3); - -var _const2 = _interopRequireDefault(_const); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/* eslint react/require-default-props: 0 */ -var Header = function Header(props) { - var className = props.className, - columns = props.columns, - onSort = props.onSort, - onFilter = props.onFilter, - sortField = props.sortField, - sortOrder = props.sortOrder, - selectRow = props.selectRow, - expandRow = props.expandRow, - currFilters = props.currFilters, - onExternalFilter = props.onExternalFilter, - filterPosition = props.filterPosition, - globalSortCaret = props.globalSortCaret, - wrapperClasses = props.wrapperClasses; - - - var SelectionHeaderCellComp = function SelectionHeaderCellComp() { - return null; - }; - var ExpansionHeaderCellComp = function ExpansionHeaderCellComp() { - return null; - }; - - if (expandRow.showExpandColumn) { - ExpansionHeaderCellComp = (0, _expandHeaderCellConsumer2.default)(_expandHeaderCell2.default); - } - - if (selectRow) { - SelectionHeaderCellComp = (0, _selectionHeaderCellConsumer2.default)(_selectionHeaderCell2.default); - } - - var isRenderFunctionColumnInLeft = function isRenderFunctionColumnInLeft() { - var position = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _const2.default.INDICATOR_POSITION_LEFT; - return position === _const2.default.INDICATOR_POSITION_LEFT; - }; - - var childrens = [columns.map(function (column, i) { - var currSort = column.dataField === sortField; - var isLastSorting = column.dataField === sortField; - - return _react2.default.createElement(_headerCell2.default, { - index: i, - key: column.dataField, - column: column, - onSort: onSort, - sorting: currSort, - sortOrder: sortOrder, - globalSortCaret: globalSortCaret, - isLastSorting: isLastSorting, - onFilter: onFilter, - currFilters: currFilters, - onExternalFilter: onExternalFilter, - filterPosition: filterPosition - }); - })]; - - if (!selectRow.hideSelectColumn) { - if (isRenderFunctionColumnInLeft(selectRow.selectColumnPosition)) { - childrens.unshift(_react2.default.createElement(SelectionHeaderCellComp, { key: 'selection' })); - } else { - childrens.push(_react2.default.createElement(SelectionHeaderCellComp, { key: 'selection' })); - } - } - - if (expandRow.showExpandColumn) { - if (isRenderFunctionColumnInLeft(expandRow.expandColumnPosition)) { - childrens.unshift(_react2.default.createElement(ExpansionHeaderCellComp, { key: 'expansion' })); - } else { - childrens.push(_react2.default.createElement(ExpansionHeaderCellComp, { key: 'expansion' })); - } - } - - return _react2.default.createElement( - 'thead', - { className: wrapperClasses }, - _react2.default.createElement( - 'tr', - { className: className }, - childrens - ) - ); -}; - -Header.propTypes = { - columns: _propTypes2.default.array.isRequired, - onSort: _propTypes2.default.func, - onFilter: _propTypes2.default.func, - sortField: _propTypes2.default.string, - sortOrder: _propTypes2.default.string, - selectRow: _propTypes2.default.object, - currFilters: _propTypes2.default.object, - onExternalFilter: _propTypes2.default.func, - globalSortCaret: _propTypes2.default.func, - className: _propTypes2.default.string, - wrapperClasses: _propTypes2.default.string, - expandRow: _propTypes2.default.object, - filterPosition: _propTypes2.default.oneOf([_const2.default.FILTERS_POSITION_TOP, _const2.default.FILTERS_POSITION_INLINE, _const2.default.FILTERS_POSITION_BOTTOM]) -}; - -exports.default = Header; - -/***/ }), -/* 31 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _classnames = __webpack_require__(4); - -var _classnames2 = _interopRequireDefault(_classnames); - -var _propTypes = __webpack_require__(1); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _const = __webpack_require__(3); - -var _const2 = _interopRequireDefault(_const); - -var _symbol = __webpack_require__(32); - -var _symbol2 = _interopRequireDefault(_symbol); - -var _caret = __webpack_require__(33); - -var _caret2 = _interopRequireDefault(_caret); - -var _utils = __webpack_require__(2); - -var _utils2 = _interopRequireDefault(_utils); - -var _cellEventDelegater = __webpack_require__(9); - -var _cellEventDelegater2 = _interopRequireDefault(_cellEventDelegater); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint react/require-default-props: 0 */ - - -var HeaderCell = function (_eventDelegater) { - _inherits(HeaderCell, _eventDelegater); - - function HeaderCell() { - _classCallCheck(this, HeaderCell); - - return _possibleConstructorReturn(this, (HeaderCell.__proto__ || Object.getPrototypeOf(HeaderCell)).apply(this, arguments)); - } - - _createClass(HeaderCell, [{ - key: 'render', - value: function render() { - var _props = this.props, - column = _props.column, - index = _props.index, - onSort = _props.onSort, - sorting = _props.sorting, - sortOrder = _props.sortOrder, - isLastSorting = _props.isLastSorting, - onFilter = _props.onFilter, - currFilters = _props.currFilters, - filterPosition = _props.filterPosition, - onExternalFilter = _props.onExternalFilter, - globalSortCaret = _props.globalSortCaret; - var text = column.text, - sort = column.sort, - sortCaret = column.sortCaret, - filter = column.filter, - filterRenderer = column.filterRenderer, - headerTitle = column.headerTitle, - headerAlign = column.headerAlign, - headerFormatter = column.headerFormatter, - headerEvents = column.headerEvents, - headerClasses = column.headerClasses, - headerStyle = column.headerStyle, - headerAttrs = column.headerAttrs, - headerSortingClasses = column.headerSortingClasses, - headerSortingStyle = column.headerSortingStyle; - - - var sortCaretfunc = sortCaret || globalSortCaret; - - var delegateEvents = this.delegate(headerEvents); - - var customAttrs = _utils2.default.isFunction(headerAttrs) ? headerAttrs(column, index) : headerAttrs || {}; - - var cellAttrs = _extends({}, customAttrs, delegateEvents, { - tabIndex: _utils2.default.isDefined(customAttrs.tabIndex) ? customAttrs.tabIndex : 0 - }); - - var sortSymbol = void 0; - var filterElm = void 0; - var cellStyle = {}; - var cellClasses = _utils2.default.isFunction(headerClasses) ? headerClasses(column, index) : headerClasses; - - if (headerStyle) { - cellStyle = _utils2.default.isFunction(headerStyle) ? headerStyle(column, index) : headerStyle; - cellStyle = cellStyle ? _extends({}, cellStyle) : cellStyle; - } - - if (headerTitle) { - cellAttrs.title = _utils2.default.isFunction(headerTitle) ? headerTitle(column, index) : text; - } - - if (headerAlign) { - cellStyle.textAlign = _utils2.default.isFunction(headerAlign) ? headerAlign(column, index) : headerAlign; - } - - if (sort) { - var customClick = cellAttrs.onClick; - cellAttrs['aria-label'] = sorting ? text + ' sort ' + sortOrder : text + ' sortable'; - cellAttrs.onKeyUp = function (e) { - if (e.key === 'Enter') { - onSort(column); - if (_utils2.default.isFunction(customClick)) customClick(e); - } - }; - cellAttrs.onClick = function (e) { - onSort(column); - if (_utils2.default.isFunction(customClick)) customClick(e); - }; - cellAttrs.className = (0, _classnames2.default)(cellAttrs.className, 'sortable'); - - if (sorting) { - sortSymbol = sortCaretfunc ? sortCaretfunc(sortOrder, column) : _react2.default.createElement(_caret2.default, { order: sortOrder }); - - // append customized classes or style if table was sorting based on the current column. - cellClasses = (0, _classnames2.default)(cellClasses, _utils2.default.isFunction(headerSortingClasses) ? headerSortingClasses(column, sortOrder, isLastSorting, index) : headerSortingClasses); - - cellStyle = _extends({}, cellStyle, _utils2.default.isFunction(headerSortingStyle) ? headerSortingStyle(column, sortOrder, isLastSorting, index) : headerSortingStyle); - } else { - sortSymbol = sortCaretfunc ? sortCaretfunc(undefined, column) : _react2.default.createElement(_symbol2.default, null); - } - } - - if (cellClasses) cellAttrs.className = (0, _classnames2.default)(cellAttrs.className, cellClasses); - if (!_utils2.default.isEmptyObject(cellStyle)) cellAttrs.style = cellStyle; - - if (filterPosition === _const2.default.FILTERS_POSITION_INLINE) { - if (filterRenderer) { - var onCustomFilter = onExternalFilter(column, filter.props.type); - filterElm = filterRenderer(onCustomFilter, column); - } else if (filter) { - filterElm = _react2.default.createElement(filter.Filter, _extends({}, filter.props, { - filterState: currFilters[column.dataField], - onFilter: onFilter, - column: column - })); - } - } - - var children = headerFormatter ? headerFormatter(column, index, { sortElement: sortSymbol, filterElement: filterElm }) : text; - - if (headerFormatter) { - return _react2.default.createElement('th', cellAttrs, children); - } - - return _react2.default.createElement('th', cellAttrs, children, sortSymbol, filterElm); - } - }]); - - return HeaderCell; -}((0, _cellEventDelegater2.default)(_react2.default.Component)); - -HeaderCell.propTypes = { - column: _propTypes2.default.shape({ - dataField: _propTypes2.default.string.isRequired, - text: _propTypes2.default.string.isRequired, - type: _propTypes2.default.oneOf([_const2.default.TYPE_STRING, _const2.default.TYPE_NUMBER, _const2.default.TYPE_BOOLEAN, _const2.default.TYPE_DATE]), - isDummyField: _propTypes2.default.bool, - hidden: _propTypes2.default.bool, - headerFormatter: _propTypes2.default.func, - formatter: _propTypes2.default.func, - formatExtraData: _propTypes2.default.any, - headerClasses: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.func]), - classes: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.func]), - headerStyle: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.func]), - style: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.func]), - headerTitle: _propTypes2.default.oneOfType([_propTypes2.default.bool, _propTypes2.default.func]), - title: _propTypes2.default.oneOfType([_propTypes2.default.bool, _propTypes2.default.func]), - headerEvents: _propTypes2.default.object, - events: _propTypes2.default.object, - headerAlign: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.func]), - align: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.func]), - headerAttrs: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.func]), - attrs: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.func]), - sort: _propTypes2.default.bool, - sortFunc: _propTypes2.default.func, - onSort: _propTypes2.default.func, - editor: _propTypes2.default.object, - editable: _propTypes2.default.oneOfType([_propTypes2.default.bool, _propTypes2.default.func]), - editCellStyle: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.func]), - editCellClasses: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.func]), - editorStyle: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.func]), - editorClasses: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.func]), - editorRenderer: _propTypes2.default.func, - validator: _propTypes2.default.func, - filter: _propTypes2.default.object, - filterRenderer: _propTypes2.default.func, - filterValue: _propTypes2.default.func, - searchable: _propTypes2.default.bool - }).isRequired, - index: _propTypes2.default.number.isRequired, - onSort: _propTypes2.default.func, - sorting: _propTypes2.default.bool, - sortOrder: _propTypes2.default.oneOf([_const2.default.SORT_ASC, _const2.default.SORT_DESC]), - sortCaret: _propTypes2.default.func, - isLastSorting: _propTypes2.default.bool, - onFilter: _propTypes2.default.func, - filterPosition: _propTypes2.default.oneOf([_const2.default.FILTERS_POSITION_INLINE, _const2.default.FILTERS_POSITION_BOTTOM, _const2.default.FILTERS_POSITION_TOP]), - currFilters: _propTypes2.default.object, - onExternalFilter: _propTypes2.default.func -}; - -exports.default = HeaderCell; - -/***/ }), -/* 32 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _bootstrap = __webpack_require__(5); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var SortSymbol = function SortSymbol() { - return _react2.default.createElement( - _bootstrap.BootstrapContext.Consumer, - null, - function (_ref) { - var bootstrap4 = _ref.bootstrap4; - return bootstrap4 ? _react2.default.createElement('span', { className: 'order-4' }) : _react2.default.createElement( - 'span', - { className: 'order' }, - _react2.default.createElement( - 'span', - { className: 'dropdown' }, - _react2.default.createElement('span', { className: 'caret' }) - ), - _react2.default.createElement( - 'span', - { className: 'dropup' }, - _react2.default.createElement('span', { className: 'caret' }) - ) - ); - } - ); -}; - -exports.default = SortSymbol; - -/***/ }), -/* 33 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _classnames = __webpack_require__(4); - -var _classnames2 = _interopRequireDefault(_classnames); - -var _propTypes = __webpack_require__(1); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _const = __webpack_require__(3); - -var _const2 = _interopRequireDefault(_const); - -var _bootstrap = __webpack_require__(5); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var SortCaret = function SortCaret(_ref) { - var order = _ref.order; - - var orderClass = (0, _classnames2.default)('react-bootstrap-table-sort-order', { - dropup: order === _const2.default.SORT_ASC - }); - - return _react2.default.createElement( - _bootstrap.BootstrapContext.Consumer, - null, - function (_ref2) { - var bootstrap4 = _ref2.bootstrap4; - return bootstrap4 ? _react2.default.createElement('span', { className: 'caret-4-' + order }) : _react2.default.createElement( - 'span', - { className: orderClass }, - _react2.default.createElement('span', { className: 'caret' }) - ); - } - ); -}; - -SortCaret.propTypes = { - order: _propTypes2.default.oneOf([_const2.default.SORT_ASC, _const2.default.SORT_DESC]).isRequired -}; - -exports.default = SortCaret; - -/***/ }), -/* 34 */ -/***/ (function(module, exports, __webpack_require__) { - -/* WEBPACK VAR INJECTION */(function(global, module) {var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// Underscore.js 1.9.1 -// http://underscorejs.org -// (c) 2009-2018 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. - -(function() { - - // Baseline setup - // -------------- - - // Establish the root object, `window` (`self`) in the browser, `global` - // on the server, or `this` in some virtual machines. We use `self` - // instead of `window` for `WebWorker` support. - var root = typeof self == 'object' && self.self === self && self || - typeof global == 'object' && global.global === global && global || - this || - {}; - - // Save the previous value of the `_` variable. - var previousUnderscore = root._; - - // Save bytes in the minified (but not gzipped) version: - var ArrayProto = Array.prototype, ObjProto = Object.prototype; - var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; - - // Create quick reference variables for speed access to core prototypes. - var push = ArrayProto.push, - slice = ArrayProto.slice, - toString = ObjProto.toString, - hasOwnProperty = ObjProto.hasOwnProperty; - - // All **ECMAScript 5** native function implementations that we hope to use - // are declared here. - var nativeIsArray = Array.isArray, - nativeKeys = Object.keys, - nativeCreate = Object.create; - - // Naked function reference for surrogate-prototype-swapping. - var Ctor = function(){}; - - // Create a safe reference to the Underscore object for use below. - var _ = function(obj) { - if (obj instanceof _) return obj; - if (!(this instanceof _)) return new _(obj); - this._wrapped = obj; - }; - - // Export the Underscore object for **Node.js**, with - // backwards-compatibility for their old module API. If we're in - // the browser, add `_` as a global object. - // (`nodeType` is checked to ensure that `module` - // and `exports` are not HTML elements.) - if (typeof exports != 'undefined' && !exports.nodeType) { - if (typeof module != 'undefined' && !module.nodeType && module.exports) { - exports = module.exports = _; - } - exports._ = _; - } else { - root._ = _; - } - - // Current version. - _.VERSION = '1.9.1'; - - // Internal function that returns an efficient (for current engines) version - // of the passed-in callback, to be repeatedly applied in other Underscore - // functions. - var optimizeCb = function(func, context, argCount) { - if (context === void 0) return func; - switch (argCount == null ? 3 : argCount) { - case 1: return function(value) { - return func.call(context, value); - }; - // The 2-argument case is omitted because we’re not using it. - case 3: return function(value, index, collection) { - return func.call(context, value, index, collection); - }; - case 4: return function(accumulator, value, index, collection) { - return func.call(context, accumulator, value, index, collection); - }; - } - return function() { - return func.apply(context, arguments); - }; - }; - - var builtinIteratee; - - // An internal function to generate callbacks that can be applied to each - // element in a collection, returning the desired result — either `identity`, - // an arbitrary callback, a property matcher, or a property accessor. - var cb = function(value, context, argCount) { - if (_.iteratee !== builtinIteratee) return _.iteratee(value, context); - if (value == null) return _.identity; - if (_.isFunction(value)) return optimizeCb(value, context, argCount); - if (_.isObject(value) && !_.isArray(value)) return _.matcher(value); - return _.property(value); - }; - - // External wrapper for our callback generator. Users may customize - // `_.iteratee` if they want additional predicate/iteratee shorthand styles. - // This abstraction hides the internal-only argCount argument. - _.iteratee = builtinIteratee = function(value, context) { - return cb(value, context, Infinity); - }; - - // Some functions take a variable number of arguments, or a few expected - // arguments at the beginning and then a variable number of values to operate - // on. This helper accumulates all remaining arguments past the function’s - // argument length (or an explicit `startIndex`), into an array that becomes - // the last argument. Similar to ES6’s "rest parameter". - var restArguments = function(func, startIndex) { - startIndex = startIndex == null ? func.length - 1 : +startIndex; - return function() { - var length = Math.max(arguments.length - startIndex, 0), - rest = Array(length), - index = 0; - for (; index < length; index++) { - rest[index] = arguments[index + startIndex]; - } - switch (startIndex) { - case 0: return func.call(this, rest); - case 1: return func.call(this, arguments[0], rest); - case 2: return func.call(this, arguments[0], arguments[1], rest); - } - var args = Array(startIndex + 1); - for (index = 0; index < startIndex; index++) { - args[index] = arguments[index]; - } - args[startIndex] = rest; - return func.apply(this, args); - }; - }; - - // An internal function for creating a new object that inherits from another. - var baseCreate = function(prototype) { - if (!_.isObject(prototype)) return {}; - if (nativeCreate) return nativeCreate(prototype); - Ctor.prototype = prototype; - var result = new Ctor; - Ctor.prototype = null; - return result; - }; - - var shallowProperty = function(key) { - return function(obj) { - return obj == null ? void 0 : obj[key]; - }; - }; - - var has = function(obj, path) { - return obj != null && hasOwnProperty.call(obj, path); - } - - var deepGet = function(obj, path) { - var length = path.length; - for (var i = 0; i < length; i++) { - if (obj == null) return void 0; - obj = obj[path[i]]; - } - return length ? obj : void 0; - }; - - // Helper for collection methods to determine whether a collection - // should be iterated as an array or as an object. - // Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength - // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094 - var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; - var getLength = shallowProperty('length'); - var isArrayLike = function(collection) { - var length = getLength(collection); - return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX; - }; - - // Collection Functions - // -------------------- - - // The cornerstone, an `each` implementation, aka `forEach`. - // Handles raw objects in addition to array-likes. Treats all - // sparse array-likes as if they were dense. - _.each = _.forEach = function(obj, iteratee, context) { - iteratee = optimizeCb(iteratee, context); - var i, length; - if (isArrayLike(obj)) { - for (i = 0, length = obj.length; i < length; i++) { - iteratee(obj[i], i, obj); - } - } else { - var keys = _.keys(obj); - for (i = 0, length = keys.length; i < length; i++) { - iteratee(obj[keys[i]], keys[i], obj); - } - } - return obj; - }; - - // Return the results of applying the iteratee to each element. - _.map = _.collect = function(obj, iteratee, context) { - iteratee = cb(iteratee, context); - var keys = !isArrayLike(obj) && _.keys(obj), - length = (keys || obj).length, - results = Array(length); - for (var index = 0; index < length; index++) { - var currentKey = keys ? keys[index] : index; - results[index] = iteratee(obj[currentKey], currentKey, obj); - } - return results; - }; - - // Create a reducing function iterating left or right. - var createReduce = function(dir) { - // Wrap code that reassigns argument variables in a separate function than - // the one that accesses `arguments.length` to avoid a perf hit. (#1991) - var reducer = function(obj, iteratee, memo, initial) { - var keys = !isArrayLike(obj) && _.keys(obj), - length = (keys || obj).length, - index = dir > 0 ? 0 : length - 1; - if (!initial) { - memo = obj[keys ? keys[index] : index]; - index += dir; - } - for (; index >= 0 && index < length; index += dir) { - var currentKey = keys ? keys[index] : index; - memo = iteratee(memo, obj[currentKey], currentKey, obj); - } - return memo; - }; - - return function(obj, iteratee, memo, context) { - var initial = arguments.length >= 3; - return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial); - }; - }; - - // **Reduce** builds up a single result from a list of values, aka `inject`, - // or `foldl`. - _.reduce = _.foldl = _.inject = createReduce(1); - - // The right-associative version of reduce, also known as `foldr`. - _.reduceRight = _.foldr = createReduce(-1); - - // Return the first value which passes a truth test. Aliased as `detect`. - _.find = _.detect = function(obj, predicate, context) { - var keyFinder = isArrayLike(obj) ? _.findIndex : _.findKey; - var key = keyFinder(obj, predicate, context); - if (key !== void 0 && key !== -1) return obj[key]; - }; - - // Return all the elements that pass a truth test. - // Aliased as `select`. - _.filter = _.select = function(obj, predicate, context) { - var results = []; - predicate = cb(predicate, context); - _.each(obj, function(value, index, list) { - if (predicate(value, index, list)) results.push(value); - }); - return results; - }; - - // Return all the elements for which a truth test fails. - _.reject = function(obj, predicate, context) { - return _.filter(obj, _.negate(cb(predicate)), context); - }; - - // Determine whether all of the elements match a truth test. - // Aliased as `all`. - _.every = _.all = function(obj, predicate, context) { - predicate = cb(predicate, context); - var keys = !isArrayLike(obj) && _.keys(obj), - length = (keys || obj).length; - for (var index = 0; index < length; index++) { - var currentKey = keys ? keys[index] : index; - if (!predicate(obj[currentKey], currentKey, obj)) return false; - } - return true; - }; - - // Determine if at least one element in the object matches a truth test. - // Aliased as `any`. - _.some = _.any = function(obj, predicate, context) { - predicate = cb(predicate, context); - var keys = !isArrayLike(obj) && _.keys(obj), - length = (keys || obj).length; - for (var index = 0; index < length; index++) { - var currentKey = keys ? keys[index] : index; - if (predicate(obj[currentKey], currentKey, obj)) return true; - } - return false; - }; - - // Determine if the array or object contains a given item (using `===`). - // Aliased as `includes` and `include`. - _.contains = _.includes = _.include = function(obj, item, fromIndex, guard) { - if (!isArrayLike(obj)) obj = _.values(obj); - if (typeof fromIndex != 'number' || guard) fromIndex = 0; - return _.indexOf(obj, item, fromIndex) >= 0; - }; - - // Invoke a method (with arguments) on every item in a collection. - _.invoke = restArguments(function(obj, path, args) { - var contextPath, func; - if (_.isFunction(path)) { - func = path; - } else if (_.isArray(path)) { - contextPath = path.slice(0, -1); - path = path[path.length - 1]; - } - return _.map(obj, function(context) { - var method = func; - if (!method) { - if (contextPath && contextPath.length) { - context = deepGet(context, contextPath); - } - if (context == null) return void 0; - method = context[path]; - } - return method == null ? method : method.apply(context, args); - }); - }); - - // Convenience version of a common use case of `map`: fetching a property. - _.pluck = function(obj, key) { - return _.map(obj, _.property(key)); - }; - - // Convenience version of a common use case of `filter`: selecting only objects - // containing specific `key:value` pairs. - _.where = function(obj, attrs) { - return _.filter(obj, _.matcher(attrs)); - }; - - // Convenience version of a common use case of `find`: getting the first object - // containing specific `key:value` pairs. - _.findWhere = function(obj, attrs) { - return _.find(obj, _.matcher(attrs)); - }; - - // Return the maximum element (or element-based computation). - _.max = function(obj, iteratee, context) { - var result = -Infinity, lastComputed = -Infinity, - value, computed; - if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) { - obj = isArrayLike(obj) ? obj : _.values(obj); - for (var i = 0, length = obj.length; i < length; i++) { - value = obj[i]; - if (value != null && value > result) { - result = value; - } - } - } else { - iteratee = cb(iteratee, context); - _.each(obj, function(v, index, list) { - computed = iteratee(v, index, list); - if (computed > lastComputed || computed === -Infinity && result === -Infinity) { - result = v; - lastComputed = computed; - } - }); - } - return result; - }; - - // Return the minimum element (or element-based computation). - _.min = function(obj, iteratee, context) { - var result = Infinity, lastComputed = Infinity, - value, computed; - if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) { - obj = isArrayLike(obj) ? obj : _.values(obj); - for (var i = 0, length = obj.length; i < length; i++) { - value = obj[i]; - if (value != null && value < result) { - result = value; - } - } - } else { - iteratee = cb(iteratee, context); - _.each(obj, function(v, index, list) { - computed = iteratee(v, index, list); - if (computed < lastComputed || computed === Infinity && result === Infinity) { - result = v; - lastComputed = computed; - } - }); - } - return result; - }; - - // Shuffle a collection. - _.shuffle = function(obj) { - return _.sample(obj, Infinity); - }; - - // Sample **n** random values from a collection using the modern version of the - // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle). - // If **n** is not specified, returns a single random element. - // The internal `guard` argument allows it to work with `map`. - _.sample = function(obj, n, guard) { - if (n == null || guard) { - if (!isArrayLike(obj)) obj = _.values(obj); - return obj[_.random(obj.length - 1)]; - } - var sample = isArrayLike(obj) ? _.clone(obj) : _.values(obj); - var length = getLength(sample); - n = Math.max(Math.min(n, length), 0); - var last = length - 1; - for (var index = 0; index < n; index++) { - var rand = _.random(index, last); - var temp = sample[index]; - sample[index] = sample[rand]; - sample[rand] = temp; - } - return sample.slice(0, n); - }; - - // Sort the object's values by a criterion produced by an iteratee. - _.sortBy = function(obj, iteratee, context) { - var index = 0; - iteratee = cb(iteratee, context); - return _.pluck(_.map(obj, function(value, key, list) { - return { - value: value, - index: index++, - criteria: iteratee(value, key, list) - }; - }).sort(function(left, right) { - var a = left.criteria; - var b = right.criteria; - if (a !== b) { - if (a > b || a === void 0) return 1; - if (a < b || b === void 0) return -1; - } - return left.index - right.index; - }), 'value'); - }; - - // An internal function used for aggregate "group by" operations. - var group = function(behavior, partition) { - return function(obj, iteratee, context) { - var result = partition ? [[], []] : {}; - iteratee = cb(iteratee, context); - _.each(obj, function(value, index) { - var key = iteratee(value, index, obj); - behavior(result, value, key); - }); - return result; - }; - }; - - // Groups the object's values by a criterion. Pass either a string attribute - // to group by, or a function that returns the criterion. - _.groupBy = group(function(result, value, key) { - if (has(result, key)) result[key].push(value); else result[key] = [value]; - }); - - // Indexes the object's values by a criterion, similar to `groupBy`, but for - // when you know that your index values will be unique. - _.indexBy = group(function(result, value, key) { - result[key] = value; - }); - - // Counts instances of an object that group by a certain criterion. Pass - // either a string attribute to count by, or a function that returns the - // criterion. - _.countBy = group(function(result, value, key) { - if (has(result, key)) result[key]++; else result[key] = 1; - }); - - var reStrSymbol = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g; - // Safely create a real, live array from anything iterable. - _.toArray = function(obj) { - if (!obj) return []; - if (_.isArray(obj)) return slice.call(obj); - if (_.isString(obj)) { - // Keep surrogate pair characters together - return obj.match(reStrSymbol); - } - if (isArrayLike(obj)) return _.map(obj, _.identity); - return _.values(obj); - }; - - // Return the number of elements in an object. - _.size = function(obj) { - if (obj == null) return 0; - return isArrayLike(obj) ? obj.length : _.keys(obj).length; - }; - - // Split a collection into two arrays: one whose elements all satisfy the given - // predicate, and one whose elements all do not satisfy the predicate. - _.partition = group(function(result, value, pass) { - result[pass ? 0 : 1].push(value); - }, true); - - // Array Functions - // --------------- - - // Get the first element of an array. Passing **n** will return the first N - // values in the array. Aliased as `head` and `take`. The **guard** check - // allows it to work with `_.map`. - _.first = _.head = _.take = function(array, n, guard) { - if (array == null || array.length < 1) return n == null ? void 0 : []; - if (n == null || guard) return array[0]; - return _.initial(array, array.length - n); - }; - - // Returns everything but the last entry of the array. Especially useful on - // the arguments object. Passing **n** will return all the values in - // the array, excluding the last N. - _.initial = function(array, n, guard) { - return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n))); - }; - - // Get the last element of an array. Passing **n** will return the last N - // values in the array. - _.last = function(array, n, guard) { - if (array == null || array.length < 1) return n == null ? void 0 : []; - if (n == null || guard) return array[array.length - 1]; - return _.rest(array, Math.max(0, array.length - n)); - }; - - // Returns everything but the first entry of the array. Aliased as `tail` and `drop`. - // Especially useful on the arguments object. Passing an **n** will return - // the rest N values in the array. - _.rest = _.tail = _.drop = function(array, n, guard) { - return slice.call(array, n == null || guard ? 1 : n); - }; - - // Trim out all falsy values from an array. - _.compact = function(array) { - return _.filter(array, Boolean); - }; - - // Internal implementation of a recursive `flatten` function. - var flatten = function(input, shallow, strict, output) { - output = output || []; - var idx = output.length; - for (var i = 0, length = getLength(input); i < length; i++) { - var value = input[i]; - if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) { - // Flatten current level of array or arguments object. - if (shallow) { - var j = 0, len = value.length; - while (j < len) output[idx++] = value[j++]; - } else { - flatten(value, shallow, strict, output); - idx = output.length; - } - } else if (!strict) { - output[idx++] = value; - } - } - return output; - }; - - // Flatten out an array, either recursively (by default), or just one level. - _.flatten = function(array, shallow) { - return flatten(array, shallow, false); - }; - - // Return a version of the array that does not contain the specified value(s). - _.without = restArguments(function(array, otherArrays) { - return _.difference(array, otherArrays); - }); - - // Produce a duplicate-free version of the array. If the array has already - // been sorted, you have the option of using a faster algorithm. - // The faster algorithm will not work with an iteratee if the iteratee - // is not a one-to-one function, so providing an iteratee will disable - // the faster algorithm. - // Aliased as `unique`. - _.uniq = _.unique = function(array, isSorted, iteratee, context) { - if (!_.isBoolean(isSorted)) { - context = iteratee; - iteratee = isSorted; - isSorted = false; - } - if (iteratee != null) iteratee = cb(iteratee, context); - var result = []; - var seen = []; - for (var i = 0, length = getLength(array); i < length; i++) { - var value = array[i], - computed = iteratee ? iteratee(value, i, array) : value; - if (isSorted && !iteratee) { - if (!i || seen !== computed) result.push(value); - seen = computed; - } else if (iteratee) { - if (!_.contains(seen, computed)) { - seen.push(computed); - result.push(value); - } - } else if (!_.contains(result, value)) { - result.push(value); - } - } - return result; - }; - - // Produce an array that contains the union: each distinct element from all of - // the passed-in arrays. - _.union = restArguments(function(arrays) { - return _.uniq(flatten(arrays, true, true)); - }); - - // Produce an array that contains every item shared between all the - // passed-in arrays. - _.intersection = function(array) { - var result = []; - var argsLength = arguments.length; - for (var i = 0, length = getLength(array); i < length; i++) { - var item = array[i]; - if (_.contains(result, item)) continue; - var j; - for (j = 1; j < argsLength; j++) { - if (!_.contains(arguments[j], item)) break; - } - if (j === argsLength) result.push(item); - } - return result; - }; - - // Take the difference between one array and a number of other arrays. - // Only the elements present in just the first array will remain. - _.difference = restArguments(function(array, rest) { - rest = flatten(rest, true, true); - return _.filter(array, function(value){ - return !_.contains(rest, value); - }); - }); - - // Complement of _.zip. Unzip accepts an array of arrays and groups - // each array's elements on shared indices. - _.unzip = function(array) { - var length = array && _.max(array, getLength).length || 0; - var result = Array(length); - - for (var index = 0; index < length; index++) { - result[index] = _.pluck(array, index); - } - return result; - }; - - // Zip together multiple lists into a single array -- elements that share - // an index go together. - _.zip = restArguments(_.unzip); - - // Converts lists into objects. Pass either a single array of `[key, value]` - // pairs, or two parallel arrays of the same length -- one of keys, and one of - // the corresponding values. Passing by pairs is the reverse of _.pairs. - _.object = function(list, values) { - var result = {}; - for (var i = 0, length = getLength(list); i < length; i++) { - if (values) { - result[list[i]] = values[i]; - } else { - result[list[i][0]] = list[i][1]; - } - } - return result; - }; - - // Generator function to create the findIndex and findLastIndex functions. - var createPredicateIndexFinder = function(dir) { - return function(array, predicate, context) { - predicate = cb(predicate, context); - var length = getLength(array); - var index = dir > 0 ? 0 : length - 1; - for (; index >= 0 && index < length; index += dir) { - if (predicate(array[index], index, array)) return index; - } - return -1; - }; - }; - - // Returns the first index on an array-like that passes a predicate test. - _.findIndex = createPredicateIndexFinder(1); - _.findLastIndex = createPredicateIndexFinder(-1); - - // Use a comparator function to figure out the smallest index at which - // an object should be inserted so as to maintain order. Uses binary search. - _.sortedIndex = function(array, obj, iteratee, context) { - iteratee = cb(iteratee, context, 1); - var value = iteratee(obj); - var low = 0, high = getLength(array); - while (low < high) { - var mid = Math.floor((low + high) / 2); - if (iteratee(array[mid]) < value) low = mid + 1; else high = mid; - } - return low; - }; - - // Generator function to create the indexOf and lastIndexOf functions. - var createIndexFinder = function(dir, predicateFind, sortedIndex) { - return function(array, item, idx) { - var i = 0, length = getLength(array); - if (typeof idx == 'number') { - if (dir > 0) { - i = idx >= 0 ? idx : Math.max(idx + length, i); - } else { - length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1; - } - } else if (sortedIndex && idx && length) { - idx = sortedIndex(array, item); - return array[idx] === item ? idx : -1; - } - if (item !== item) { - idx = predicateFind(slice.call(array, i, length), _.isNaN); - return idx >= 0 ? idx + i : -1; - } - for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) { - if (array[idx] === item) return idx; - } - return -1; - }; - }; - - // Return the position of the first occurrence of an item in an array, - // or -1 if the item is not included in the array. - // If the array is large and already in sort order, pass `true` - // for **isSorted** to use binary search. - _.indexOf = createIndexFinder(1, _.findIndex, _.sortedIndex); - _.lastIndexOf = createIndexFinder(-1, _.findLastIndex); - - // Generate an integer Array containing an arithmetic progression. A port of - // the native Python `range()` function. See - // [the Python documentation](http://docs.python.org/library/functions.html#range). - _.range = function(start, stop, step) { - if (stop == null) { - stop = start || 0; - start = 0; - } - if (!step) { - step = stop < start ? -1 : 1; - } - - var length = Math.max(Math.ceil((stop - start) / step), 0); - var range = Array(length); - - for (var idx = 0; idx < length; idx++, start += step) { - range[idx] = start; - } - - return range; - }; - - // Chunk a single array into multiple arrays, each containing `count` or fewer - // items. - _.chunk = function(array, count) { - if (count == null || count < 1) return []; - var result = []; - var i = 0, length = array.length; - while (i < length) { - result.push(slice.call(array, i, i += count)); - } - return result; - }; - - // Function (ahem) Functions - // ------------------ - - // Determines whether to execute a function as a constructor - // or a normal function with the provided arguments. - var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) { - if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args); - var self = baseCreate(sourceFunc.prototype); - var result = sourceFunc.apply(self, args); - if (_.isObject(result)) return result; - return self; - }; - - // Create a function bound to a given object (assigning `this`, and arguments, - // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if - // available. - _.bind = restArguments(function(func, context, args) { - if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function'); - var bound = restArguments(function(callArgs) { - return executeBound(func, bound, context, this, args.concat(callArgs)); - }); - return bound; - }); - - // Partially apply a function by creating a version that has had some of its - // arguments pre-filled, without changing its dynamic `this` context. _ acts - // as a placeholder by default, allowing any combination of arguments to be - // pre-filled. Set `_.partial.placeholder` for a custom placeholder argument. - _.partial = restArguments(function(func, boundArgs) { - var placeholder = _.partial.placeholder; - var bound = function() { - var position = 0, length = boundArgs.length; - var args = Array(length); - for (var i = 0; i < length; i++) { - args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i]; - } - while (position < arguments.length) args.push(arguments[position++]); - return executeBound(func, bound, this, this, args); - }; - return bound; - }); - - _.partial.placeholder = _; - - // Bind a number of an object's methods to that object. Remaining arguments - // are the method names to be bound. Useful for ensuring that all callbacks - // defined on an object belong to it. - _.bindAll = restArguments(function(obj, keys) { - keys = flatten(keys, false, false); - var index = keys.length; - if (index < 1) throw new Error('bindAll must be passed function names'); - while (index--) { - var key = keys[index]; - obj[key] = _.bind(obj[key], obj); - } - }); - - // Memoize an expensive function by storing its results. - _.memoize = function(func, hasher) { - var memoize = function(key) { - var cache = memoize.cache; - var address = '' + (hasher ? hasher.apply(this, arguments) : key); - if (!has(cache, address)) cache[address] = func.apply(this, arguments); - return cache[address]; - }; - memoize.cache = {}; - return memoize; - }; - - // Delays a function for the given number of milliseconds, and then calls - // it with the arguments supplied. - _.delay = restArguments(function(func, wait, args) { - return setTimeout(function() { - return func.apply(null, args); - }, wait); - }); - - // Defers a function, scheduling it to run after the current call stack has - // cleared. - _.defer = _.partial(_.delay, _, 1); - - // Returns a function, that, when invoked, will only be triggered at most once - // during a given window of time. Normally, the throttled function will run - // as much as it can, without ever going more than once per `wait` duration; - // but if you'd like to disable the execution on the leading edge, pass - // `{leading: false}`. To disable execution on the trailing edge, ditto. - _.throttle = function(func, wait, options) { - var timeout, context, args, result; - var previous = 0; - if (!options) options = {}; - - var later = function() { - previous = options.leading === false ? 0 : _.now(); - timeout = null; - result = func.apply(context, args); - if (!timeout) context = args = null; - }; - - var throttled = function() { - var now = _.now(); - if (!previous && options.leading === false) previous = now; - var remaining = wait - (now - previous); - context = this; - args = arguments; - if (remaining <= 0 || remaining > wait) { - if (timeout) { - clearTimeout(timeout); - timeout = null; - } - previous = now; - result = func.apply(context, args); - if (!timeout) context = args = null; - } else if (!timeout && options.trailing !== false) { - timeout = setTimeout(later, remaining); - } - return result; - }; - - throttled.cancel = function() { - clearTimeout(timeout); - previous = 0; - timeout = context = args = null; - }; - - return throttled; - }; - - // Returns a function, that, as long as it continues to be invoked, will not - // be triggered. The function will be called after it stops being called for - // N milliseconds. If `immediate` is passed, trigger the function on the - // leading edge, instead of the trailing. - _.debounce = function(func, wait, immediate) { - var timeout, result; - - var later = function(context, args) { - timeout = null; - if (args) result = func.apply(context, args); - }; - - var debounced = restArguments(function(args) { - if (timeout) clearTimeout(timeout); - if (immediate) { - var callNow = !timeout; - timeout = setTimeout(later, wait); - if (callNow) result = func.apply(this, args); - } else { - timeout = _.delay(later, wait, this, args); - } - - return result; - }); - - debounced.cancel = function() { - clearTimeout(timeout); - timeout = null; - }; - - return debounced; - }; - - // Returns the first function passed as an argument to the second, - // allowing you to adjust arguments, run code before and after, and - // conditionally execute the original function. - _.wrap = function(func, wrapper) { - return _.partial(wrapper, func); - }; - - // Returns a negated version of the passed-in predicate. - _.negate = function(predicate) { - return function() { - return !predicate.apply(this, arguments); - }; - }; - - // Returns a function that is the composition of a list of functions, each - // consuming the return value of the function that follows. - _.compose = function() { - var args = arguments; - var start = args.length - 1; - return function() { - var i = start; - var result = args[start].apply(this, arguments); - while (i--) result = args[i].call(this, result); - return result; - }; - }; - - // Returns a function that will only be executed on and after the Nth call. - _.after = function(times, func) { - return function() { - if (--times < 1) { - return func.apply(this, arguments); - } - }; - }; - - // Returns a function that will only be executed up to (but not including) the Nth call. - _.before = function(times, func) { - var memo; - return function() { - if (--times > 0) { - memo = func.apply(this, arguments); - } - if (times <= 1) func = null; - return memo; - }; - }; - - // Returns a function that will be executed at most one time, no matter how - // often you call it. Useful for lazy initialization. - _.once = _.partial(_.before, 2); - - _.restArguments = restArguments; - - // Object Functions - // ---------------- - - // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. - var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); - var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', - 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; - - var collectNonEnumProps = function(obj, keys) { - var nonEnumIdx = nonEnumerableProps.length; - var constructor = obj.constructor; - var proto = _.isFunction(constructor) && constructor.prototype || ObjProto; - - // Constructor is a special case. - var prop = 'constructor'; - if (has(obj, prop) && !_.contains(keys, prop)) keys.push(prop); - - while (nonEnumIdx--) { - prop = nonEnumerableProps[nonEnumIdx]; - if (prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) { - keys.push(prop); - } - } - }; - - // Retrieve the names of an object's own properties. - // Delegates to **ECMAScript 5**'s native `Object.keys`. - _.keys = function(obj) { - if (!_.isObject(obj)) return []; - if (nativeKeys) return nativeKeys(obj); - var keys = []; - for (var key in obj) if (has(obj, key)) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; - }; - - // Retrieve all the property names of an object. - _.allKeys = function(obj) { - if (!_.isObject(obj)) return []; - var keys = []; - for (var key in obj) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; - }; - - // Retrieve the values of an object's properties. - _.values = function(obj) { - var keys = _.keys(obj); - var length = keys.length; - var values = Array(length); - for (var i = 0; i < length; i++) { - values[i] = obj[keys[i]]; - } - return values; - }; - - // Returns the results of applying the iteratee to each element of the object. - // In contrast to _.map it returns an object. - _.mapObject = function(obj, iteratee, context) { - iteratee = cb(iteratee, context); - var keys = _.keys(obj), - length = keys.length, - results = {}; - for (var index = 0; index < length; index++) { - var currentKey = keys[index]; - results[currentKey] = iteratee(obj[currentKey], currentKey, obj); - } - return results; - }; - - // Convert an object into a list of `[key, value]` pairs. - // The opposite of _.object. - _.pairs = function(obj) { - var keys = _.keys(obj); - var length = keys.length; - var pairs = Array(length); - for (var i = 0; i < length; i++) { - pairs[i] = [keys[i], obj[keys[i]]]; - } - return pairs; - }; - - // Invert the keys and values of an object. The values must be serializable. - _.invert = function(obj) { - var result = {}; - var keys = _.keys(obj); - for (var i = 0, length = keys.length; i < length; i++) { - result[obj[keys[i]]] = keys[i]; - } - return result; - }; - - // Return a sorted list of the function names available on the object. - // Aliased as `methods`. - _.functions = _.methods = function(obj) { - var names = []; - for (var key in obj) { - if (_.isFunction(obj[key])) names.push(key); - } - return names.sort(); - }; - - // An internal function for creating assigner functions. - var createAssigner = function(keysFunc, defaults) { - return function(obj) { - var length = arguments.length; - if (defaults) obj = Object(obj); - if (length < 2 || obj == null) return obj; - for (var index = 1; index < length; index++) { - var source = arguments[index], - keys = keysFunc(source), - l = keys.length; - for (var i = 0; i < l; i++) { - var key = keys[i]; - if (!defaults || obj[key] === void 0) obj[key] = source[key]; - } - } - return obj; - }; - }; - - // Extend a given object with all the properties in passed-in object(s). - _.extend = createAssigner(_.allKeys); - - // Assigns a given object with all the own properties in the passed-in object(s). - // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) - _.extendOwn = _.assign = createAssigner(_.keys); - - // Returns the first key on an object that passes a predicate test. - _.findKey = function(obj, predicate, context) { - predicate = cb(predicate, context); - var keys = _.keys(obj), key; - for (var i = 0, length = keys.length; i < length; i++) { - key = keys[i]; - if (predicate(obj[key], key, obj)) return key; - } - }; - - // Internal pick helper function to determine if `obj` has key `key`. - var keyInObj = function(value, key, obj) { - return key in obj; - }; - - // Return a copy of the object only containing the whitelisted properties. - _.pick = restArguments(function(obj, keys) { - var result = {}, iteratee = keys[0]; - if (obj == null) return result; - if (_.isFunction(iteratee)) { - if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]); - keys = _.allKeys(obj); - } else { - iteratee = keyInObj; - keys = flatten(keys, false, false); - obj = Object(obj); - } - for (var i = 0, length = keys.length; i < length; i++) { - var key = keys[i]; - var value = obj[key]; - if (iteratee(value, key, obj)) result[key] = value; - } - return result; - }); - - // Return a copy of the object without the blacklisted properties. - _.omit = restArguments(function(obj, keys) { - var iteratee = keys[0], context; - if (_.isFunction(iteratee)) { - iteratee = _.negate(iteratee); - if (keys.length > 1) context = keys[1]; - } else { - keys = _.map(flatten(keys, false, false), String); - iteratee = function(value, key) { - return !_.contains(keys, key); - }; - } - return _.pick(obj, iteratee, context); - }); - - // Fill in a given object with default properties. - _.defaults = createAssigner(_.allKeys, true); - - // Creates an object that inherits from the given prototype object. - // If additional properties are provided then they will be added to the - // created object. - _.create = function(prototype, props) { - var result = baseCreate(prototype); - if (props) _.extendOwn(result, props); - return result; - }; - - // Create a (shallow-cloned) duplicate of an object. - _.clone = function(obj) { - if (!_.isObject(obj)) return obj; - return _.isArray(obj) ? obj.slice() : _.extend({}, obj); - }; - - // Invokes interceptor with the obj, and then returns obj. - // The primary purpose of this method is to "tap into" a method chain, in - // order to perform operations on intermediate results within the chain. - _.tap = function(obj, interceptor) { - interceptor(obj); - return obj; - }; - - // Returns whether an object has a given set of `key:value` pairs. - _.isMatch = function(object, attrs) { - var keys = _.keys(attrs), length = keys.length; - if (object == null) return !length; - var obj = Object(object); - for (var i = 0; i < length; i++) { - var key = keys[i]; - if (attrs[key] !== obj[key] || !(key in obj)) return false; - } - return true; - }; - - - // Internal recursive comparison function for `isEqual`. - var eq, deepEq; - eq = function(a, b, aStack, bStack) { - // Identical objects are equal. `0 === -0`, but they aren't identical. - // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal). - if (a === b) return a !== 0 || 1 / a === 1 / b; - // `null` or `undefined` only equal to itself (strict comparison). - if (a == null || b == null) return false; - // `NaN`s are equivalent, but non-reflexive. - if (a !== a) return b !== b; - // Exhaust primitive checks - var type = typeof a; - if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; - return deepEq(a, b, aStack, bStack); - }; - - // Internal recursive comparison function for `isEqual`. - deepEq = function(a, b, aStack, bStack) { - // Unwrap any wrapped objects. - if (a instanceof _) a = a._wrapped; - if (b instanceof _) b = b._wrapped; - // Compare `[[Class]]` names. - var className = toString.call(a); - if (className !== toString.call(b)) return false; - switch (className) { - // Strings, numbers, regular expressions, dates, and booleans are compared by value. - case '[object RegExp]': - // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') - case '[object String]': - // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is - // equivalent to `new String("5")`. - return '' + a === '' + b; - case '[object Number]': - // `NaN`s are equivalent, but non-reflexive. - // Object(NaN) is equivalent to NaN. - if (+a !== +a) return +b !== +b; - // An `egal` comparison is performed for other numeric values. - return +a === 0 ? 1 / +a === 1 / b : +a === +b; - case '[object Date]': - case '[object Boolean]': - // Coerce dates and booleans to numeric primitive values. Dates are compared by their - // millisecond representations. Note that invalid dates with millisecond representations - // of `NaN` are not equivalent. - return +a === +b; - case '[object Symbol]': - return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b); - } - - var areArrays = className === '[object Array]'; - if (!areArrays) { - if (typeof a != 'object' || typeof b != 'object') return false; - - // Objects with different constructors are not equivalent, but `Object`s or `Array`s - // from different frames are. - var aCtor = a.constructor, bCtor = b.constructor; - if (aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor && - _.isFunction(bCtor) && bCtor instanceof bCtor) - && ('constructor' in a && 'constructor' in b)) { - return false; - } - } - // Assume equality for cyclic structures. The algorithm for detecting cyclic - // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. - - // Initializing stack of traversed objects. - // It's done here since we only need them for objects and arrays comparison. - aStack = aStack || []; - bStack = bStack || []; - var length = aStack.length; - while (length--) { - // Linear search. Performance is inversely proportional to the number of - // unique nested structures. - if (aStack[length] === a) return bStack[length] === b; - } - - // Add the first object to the stack of traversed objects. - aStack.push(a); - bStack.push(b); - - // Recursively compare objects and arrays. - if (areArrays) { - // Compare array lengths to determine if a deep comparison is necessary. - length = a.length; - if (length !== b.length) return false; - // Deep compare the contents, ignoring non-numeric properties. - while (length--) { - if (!eq(a[length], b[length], aStack, bStack)) return false; - } - } else { - // Deep compare objects. - var keys = _.keys(a), key; - length = keys.length; - // Ensure that both objects contain the same number of properties before comparing deep equality. - if (_.keys(b).length !== length) return false; - while (length--) { - // Deep compare each member - key = keys[length]; - if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false; - } - } - // Remove the first object from the stack of traversed objects. - aStack.pop(); - bStack.pop(); - return true; - }; - - // Perform a deep comparison to check if two objects are equal. - _.isEqual = function(a, b) { - return eq(a, b); - }; - - // Is a given array, string, or object empty? - // An "empty" object has no enumerable own-properties. - _.isEmpty = function(obj) { - if (obj == null) return true; - if (isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0; - return _.keys(obj).length === 0; - }; - - // Is a given value a DOM element? - _.isElement = function(obj) { - return !!(obj && obj.nodeType === 1); - }; - - // Is a given value an array? - // Delegates to ECMA5's native Array.isArray - _.isArray = nativeIsArray || function(obj) { - return toString.call(obj) === '[object Array]'; - }; - - // Is a given variable an object? - _.isObject = function(obj) { - var type = typeof obj; - return type === 'function' || type === 'object' && !!obj; - }; - - // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError, isMap, isWeakMap, isSet, isWeakSet. - _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error', 'Symbol', 'Map', 'WeakMap', 'Set', 'WeakSet'], function(name) { - _['is' + name] = function(obj) { - return toString.call(obj) === '[object ' + name + ']'; - }; - }); - - // Define a fallback version of the method in browsers (ahem, IE < 9), where - // there isn't any inspectable "Arguments" type. - if (!_.isArguments(arguments)) { - _.isArguments = function(obj) { - return has(obj, 'callee'); - }; - } - - // Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8, - // IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). - var nodelist = root.document && root.document.childNodes; - if (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') { - _.isFunction = function(obj) { - return typeof obj == 'function' || false; - }; - } - - // Is a given object a finite number? - _.isFinite = function(obj) { - return !_.isSymbol(obj) && isFinite(obj) && !isNaN(parseFloat(obj)); - }; - - // Is the given value `NaN`? - _.isNaN = function(obj) { - return _.isNumber(obj) && isNaN(obj); - }; - - // Is a given value a boolean? - _.isBoolean = function(obj) { - return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; - }; - - // Is a given value equal to null? - _.isNull = function(obj) { - return obj === null; - }; - - // Is a given variable undefined? - _.isUndefined = function(obj) { - return obj === void 0; - }; - - // Shortcut function for checking if an object has a given property directly - // on itself (in other words, not on a prototype). - _.has = function(obj, path) { - if (!_.isArray(path)) { - return has(obj, path); - } - var length = path.length; - for (var i = 0; i < length; i++) { - var key = path[i]; - if (obj == null || !hasOwnProperty.call(obj, key)) { - return false; - } - obj = obj[key]; - } - return !!length; - }; - - // Utility Functions - // ----------------- - - // Run Underscore.js in *noConflict* mode, returning the `_` variable to its - // previous owner. Returns a reference to the Underscore object. - _.noConflict = function() { - root._ = previousUnderscore; - return this; - }; - - // Keep the identity function around for default iteratees. - _.identity = function(value) { - return value; - }; - - // Predicate-generating functions. Often useful outside of Underscore. - _.constant = function(value) { - return function() { - return value; - }; - }; - - _.noop = function(){}; - - // Creates a function that, when passed an object, will traverse that object’s - // properties down the given `path`, specified as an array of keys or indexes. - _.property = function(path) { - if (!_.isArray(path)) { - return shallowProperty(path); - } - return function(obj) { - return deepGet(obj, path); - }; - }; - - // Generates a function for a given object that returns a given property. - _.propertyOf = function(obj) { - if (obj == null) { - return function(){}; - } - return function(path) { - return !_.isArray(path) ? obj[path] : deepGet(obj, path); - }; - }; - - // Returns a predicate for checking whether an object has a given set of - // `key:value` pairs. - _.matcher = _.matches = function(attrs) { - attrs = _.extendOwn({}, attrs); - return function(obj) { - return _.isMatch(obj, attrs); - }; - }; - - // Run a function **n** times. - _.times = function(n, iteratee, context) { - var accum = Array(Math.max(0, n)); - iteratee = optimizeCb(iteratee, context, 1); - for (var i = 0; i < n; i++) accum[i] = iteratee(i); - return accum; - }; - - // Return a random integer between min and max (inclusive). - _.random = function(min, max) { - if (max == null) { - max = min; - min = 0; - } - return min + Math.floor(Math.random() * (max - min + 1)); - }; - - // A (possibly faster) way to get the current timestamp as an integer. - _.now = Date.now || function() { - return new Date().getTime(); - }; - - // List of HTML entities for escaping. - var escapeMap = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''', - '`': '`' - }; - var unescapeMap = _.invert(escapeMap); - - // Functions for escaping and unescaping strings to/from HTML interpolation. - var createEscaper = function(map) { - var escaper = function(match) { - return map[match]; - }; - // Regexes for identifying a key that needs to be escaped. - var source = '(?:' + _.keys(map).join('|') + ')'; - var testRegexp = RegExp(source); - var replaceRegexp = RegExp(source, 'g'); - return function(string) { - string = string == null ? '' : '' + string; - return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string; - }; - }; - _.escape = createEscaper(escapeMap); - _.unescape = createEscaper(unescapeMap); - - // Traverses the children of `obj` along `path`. If a child is a function, it - // is invoked with its parent as context. Returns the value of the final - // child, or `fallback` if any child is undefined. - _.result = function(obj, path, fallback) { - if (!_.isArray(path)) path = [path]; - var length = path.length; - if (!length) { - return _.isFunction(fallback) ? fallback.call(obj) : fallback; - } - for (var i = 0; i < length; i++) { - var prop = obj == null ? void 0 : obj[path[i]]; - if (prop === void 0) { - prop = fallback; - i = length; // Ensure we don't continue iterating. - } - obj = _.isFunction(prop) ? prop.call(obj) : prop; - } - return obj; - }; - - // Generate a unique integer id (unique within the entire client session). - // Useful for temporary DOM ids. - var idCounter = 0; - _.uniqueId = function(prefix) { - var id = ++idCounter + ''; - return prefix ? prefix + id : id; - }; - - // By default, Underscore uses ERB-style template delimiters, change the - // following template settings to use alternative delimiters. - _.templateSettings = { - evaluate: /<%([\s\S]+?)%>/g, - interpolate: /<%=([\s\S]+?)%>/g, - escape: /<%-([\s\S]+?)%>/g - }; - - // When customizing `templateSettings`, if you don't want to define an - // interpolation, evaluation or escaping regex, we need one that is - // guaranteed not to match. - var noMatch = /(.)^/; - - // Certain characters need to be escaped so that they can be put into a - // string literal. - var escapes = { - "'": "'", - '\\': '\\', - '\r': 'r', - '\n': 'n', - '\u2028': 'u2028', - '\u2029': 'u2029' - }; - - var escapeRegExp = /\\|'|\r|\n|\u2028|\u2029/g; - - var escapeChar = function(match) { - return '\\' + escapes[match]; - }; - - // JavaScript micro-templating, similar to John Resig's implementation. - // Underscore templating handles arbitrary delimiters, preserves whitespace, - // and correctly escapes quotes within interpolated code. - // NB: `oldSettings` only exists for backwards compatibility. - _.template = function(text, settings, oldSettings) { - if (!settings && oldSettings) settings = oldSettings; - settings = _.defaults({}, settings, _.templateSettings); - - // Combine delimiters into one regular expression via alternation. - var matcher = RegExp([ - (settings.escape || noMatch).source, - (settings.interpolate || noMatch).source, - (settings.evaluate || noMatch).source - ].join('|') + '|$', 'g'); - - // Compile the template source, escaping string literals appropriately. - var index = 0; - var source = "__p+='"; - text.replace(matcher, function(match, escape, interpolate, evaluate, offset) { - source += text.slice(index, offset).replace(escapeRegExp, escapeChar); - index = offset + match.length; - - if (escape) { - source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'"; - } else if (interpolate) { - source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'"; - } else if (evaluate) { - source += "';\n" + evaluate + "\n__p+='"; - } - - // Adobe VMs need the match returned to produce the correct offset. - return match; - }); - source += "';\n"; - - // If a variable is not specified, place data values in local scope. - if (!settings.variable) source = 'with(obj||{}){\n' + source + '}\n'; - - source = "var __t,__p='',__j=Array.prototype.join," + - "print=function(){__p+=__j.call(arguments,'');};\n" + - source + 'return __p;\n'; - - var render; - try { - render = new Function(settings.variable || 'obj', '_', source); - } catch (e) { - e.source = source; - throw e; - } - - var template = function(data) { - return render.call(this, data, _); - }; - - // Provide the compiled source as a convenience for precompilation. - var argument = settings.variable || 'obj'; - template.source = 'function(' + argument + '){\n' + source + '}'; - - return template; - }; - - // Add a "chain" function. Start chaining a wrapped Underscore object. - _.chain = function(obj) { - var instance = _(obj); - instance._chain = true; - return instance; - }; - - // OOP - // --------------- - // If Underscore is called as a function, it returns a wrapped object that - // can be used OO-style. This wrapper holds altered versions of all the - // underscore functions. Wrapped objects may be chained. - - // Helper function to continue chaining intermediate results. - var chainResult = function(instance, obj) { - return instance._chain ? _(obj).chain() : obj; - }; - - // Add your own custom functions to the Underscore object. - _.mixin = function(obj) { - _.each(_.functions(obj), function(name) { - var func = _[name] = obj[name]; - _.prototype[name] = function() { - var args = [this._wrapped]; - push.apply(args, arguments); - return chainResult(this, func.apply(_, args)); - }; - }); - return _; - }; - - // Add all of the Underscore functions to the wrapper object. - _.mixin(_); - - // Add all mutator Array functions to the wrapper. - _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { - var method = ArrayProto[name]; - _.prototype[name] = function() { - var obj = this._wrapped; - method.apply(obj, arguments); - if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0]; - return chainResult(this, obj); - }; - }); - - // Add all accessor Array functions to the wrapper. - _.each(['concat', 'join', 'slice'], function(name) { - var method = ArrayProto[name]; - _.prototype[name] = function() { - return chainResult(this, method.apply(this._wrapped, arguments)); - }; - }); - - // Extracts the result from a wrapped and chained object. - _.prototype.value = function() { - return this._wrapped; - }; - - // Provide unwrapping proxy for some methods used in engine operations - // such as arithmetic and JSON stringification. - _.prototype.valueOf = _.prototype.toJSON = _.prototype.value; - - _.prototype.toString = function() { - return String(this._wrapped); - }; - - // AMD registration happens at the end for compatibility with AMD loaders - // that may not enforce next-turn semantics on modules. Even though general - // practice for AMD registration is to be anonymous, underscore registers - // as a named module because, like jQuery, it is a base library that is - // popular enough to be bundled in a third party lib, but not be part of - // an AMD load request. Those cases could generate an error when an - // anonymous define() is called outside of a loader request. - if (true) { - !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function() { - return _; - }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), - __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - } -}()); - -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(35), __webpack_require__(36)(module))) - -/***/ }), -/* 35 */ -/***/ (function(module, exports) { - -var g; - -// This works in non-strict mode -g = (function() { - return this; -})(); - -try { - // This works if eval is allowed (see CSP) - g = g || Function("return this")() || (1,eval)("this"); -} catch(e) { - // This works if the window reference is available - if(typeof window === "object") - g = window; -} - -// g can still be undefined, but nothing to do about it... -// We return undefined, instead of nothing here, so it's -// easier to handle this case. if(!global) { ...} - -module.exports = g; - - -/***/ }), -/* 36 */ -/***/ (function(module, exports) { - -module.exports = function(module) { - if(!module.webpackPolyfill) { - module.deprecate = function() {}; - module.paths = []; - // module.parent = undefined by default - if(!module.children) module.children = []; - Object.defineProperty(module, "loaded", { - enumerable: true, - get: function() { - return module.l; - } - }); - Object.defineProperty(module, "id", { - enumerable: true, - get: function() { - return module.i; - } - }); - module.webpackPolyfill = 1; - } - return module; -}; - - -/***/ }), -/* 37 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.CheckBox = undefined; - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = __webpack_require__(1); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _const = __webpack_require__(3); - -var _const2 = _interopRequireDefault(_const); - -var _bootstrap = __webpack_require__(5); - -var _utils = __webpack_require__(2); - -var _utils2 = _interopRequireDefault(_utils); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint react/require-default-props: 0 */ - - -var CheckBox = exports.CheckBox = function CheckBox(_ref) { - var className = _ref.className, - checked = _ref.checked, - indeterminate = _ref.indeterminate; - return _react2.default.createElement('input', { - type: 'checkbox', - checked: checked, - className: className, - ref: function ref(input) { - if (input) input.indeterminate = indeterminate; // eslint-disable-line no-param-reassign - }, - onChange: function onChange() {} - }); -}; - -CheckBox.propTypes = { - checked: _propTypes2.default.bool.isRequired, - indeterminate: _propTypes2.default.bool.isRequired, - className: _propTypes2.default.string -}; - -var SelectionHeaderCell = function (_Component) { - _inherits(SelectionHeaderCell, _Component); - - function SelectionHeaderCell() { - _classCallCheck(this, SelectionHeaderCell); - - var _this = _possibleConstructorReturn(this, (SelectionHeaderCell.__proto__ || Object.getPrototypeOf(SelectionHeaderCell)).call(this)); - - _this.handleCheckBoxClick = _this.handleCheckBoxClick.bind(_this); - return _this; - } - - /** - * avoid updating if button is - * 1. radio - * 2. status was not changed. - */ - - - _createClass(SelectionHeaderCell, [{ - key: 'shouldComponentUpdate', - value: function shouldComponentUpdate(nextProps) { - var ROW_SELECT_SINGLE = _const2.default.ROW_SELECT_SINGLE; - var _props = this.props, - mode = _props.mode, - checkedStatus = _props.checkedStatus; - - - if (mode === ROW_SELECT_SINGLE) return false; - - return nextProps.checkedStatus !== checkedStatus; - } - }, { - key: 'handleCheckBoxClick', - value: function handleCheckBoxClick(e) { - var _props2 = this.props, - onAllRowsSelect = _props2.onAllRowsSelect, - checkedStatus = _props2.checkedStatus; - - var isUnSelect = checkedStatus === _const2.default.CHECKBOX_STATUS_CHECKED || checkedStatus === _const2.default.CHECKBOX_STATUS_INDETERMINATE; - - onAllRowsSelect(e, isUnSelect); - } - }, { - key: 'render', - value: function render() { - var _this2 = this; - - var CHECKBOX_STATUS_CHECKED = _const2.default.CHECKBOX_STATUS_CHECKED, - CHECKBOX_STATUS_INDETERMINATE = _const2.default.CHECKBOX_STATUS_INDETERMINATE, - ROW_SELECT_MULTIPLE = _const2.default.ROW_SELECT_MULTIPLE; - var _props3 = this.props, - mode = _props3.mode, - checkedStatus = _props3.checkedStatus, - selectionHeaderRenderer = _props3.selectionHeaderRenderer, - hideSelectAll = _props3.hideSelectAll, - headerColumnStyle = _props3.headerColumnStyle; - - if (hideSelectAll) { - return _react2.default.createElement('th', { 'data-row-selection': true }); - } - - var checked = checkedStatus === CHECKBOX_STATUS_CHECKED; - - var indeterminate = checkedStatus === CHECKBOX_STATUS_INDETERMINATE; - - var attrs = {}; - var content = void 0; - if (selectionHeaderRenderer || mode === ROW_SELECT_MULTIPLE) { - attrs.onClick = this.handleCheckBoxClick; - } - - attrs.style = _utils2.default.isFunction(headerColumnStyle) ? headerColumnStyle(checkedStatus) : headerColumnStyle; - - return _react2.default.createElement( - _bootstrap.BootstrapContext.Consumer, - null, - function (_ref2) { - var bootstrap4 = _ref2.bootstrap4; - - if (selectionHeaderRenderer) { - content = selectionHeaderRenderer({ - mode: mode, - checked: checked, - indeterminate: indeterminate - }); - } else if (mode === ROW_SELECT_MULTIPLE) { - content = _react2.default.createElement(CheckBox, _extends({}, _this2.props, { - checked: checked, - className: bootstrap4 ? 'selection-input-4' : '', - indeterminate: indeterminate - })); - } - return _react2.default.createElement( - 'th', - _extends({ className: 'selection-cell-header', 'data-row-selection': true }, attrs), - content - ); - } - ); - } - }]); - - return SelectionHeaderCell; -}(_react.Component); - -SelectionHeaderCell.propTypes = { - mode: _propTypes2.default.string.isRequired, - checkedStatus: _propTypes2.default.string, - onAllRowsSelect: _propTypes2.default.func, - hideSelectAll: _propTypes2.default.bool, - selectionHeaderRenderer: _propTypes2.default.func, - headerColumnStyle: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.func]) -}; -exports.default = SelectionHeaderCell; - -/***/ }), -/* 38 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = __webpack_require__(1); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint react/require-default-props: 0 */ -/* eslint no-nested-ternary: 0 */ - - -var ExpansionHeaderCell = function (_Component) { - _inherits(ExpansionHeaderCell, _Component); - - function ExpansionHeaderCell() { - _classCallCheck(this, ExpansionHeaderCell); - - var _this = _possibleConstructorReturn(this, (ExpansionHeaderCell.__proto__ || Object.getPrototypeOf(ExpansionHeaderCell)).call(this)); - - _this.handleCheckBoxClick = _this.handleCheckBoxClick.bind(_this); - return _this; - } - - _createClass(ExpansionHeaderCell, [{ - key: 'handleCheckBoxClick', - value: function handleCheckBoxClick(e) { - var _props = this.props, - isAnyExpands = _props.isAnyExpands, - onAllRowExpand = _props.onAllRowExpand; - - - onAllRowExpand(e, !isAnyExpands); - } - }, { - key: 'render', - value: function render() { - var _props2 = this.props, - isAnyExpands = _props2.isAnyExpands, - expandHeaderColumnRenderer = _props2.expandHeaderColumnRenderer; - - var attrs = { - onClick: this.handleCheckBoxClick - }; - - return _react2.default.createElement( - 'th', - _extends({ className: 'expand-cell-header', 'data-row-selection': true }, attrs), - expandHeaderColumnRenderer ? expandHeaderColumnRenderer({ isAnyExpands: isAnyExpands }) : isAnyExpands ? '(-)' : '(+)' - ); - } - }]); - - return ExpansionHeaderCell; -}(_react.Component); - -ExpansionHeaderCell.propTypes = { - isAnyExpands: _propTypes2.default.bool.isRequired, - onAllRowExpand: _propTypes2.default.func.isRequired, - expandHeaderColumnRenderer: _propTypes2.default.func -}; -exports.default = ExpansionHeaderCell; - -/***/ }), -/* 39 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _selectionContext = __webpack_require__(10); - -var _selectionContext2 = _interopRequireDefault(_selectionContext); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -exports.default = function (Component) { - return function () { - return _react2.default.createElement( - _selectionContext2.default.Consumer, - null, - function (selectRow) { - return _react2.default.createElement(Component, selectRow); - } - ); - }; -}; - -/***/ }), -/* 40 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.getExpandedRows = exports.expandableKeys = exports.isAnyExpands = undefined; - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -var _utils = __webpack_require__(2); - -var _utils2 = _interopRequireDefault(_utils); - -var _rows = __webpack_require__(6); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var isAnyExpands = exports.isAnyExpands = function isAnyExpands(data, keyField) { - var expanded = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : []; - - var _loop = function _loop(i) { - var rowKey = _utils2.default.get(data[i], keyField); - if (typeof expanded.find(function (x) { - return x === rowKey; - }) !== 'undefined') { - return { - v: true - }; - } - }; - - for (var i = 0; i < data.length; i += 1) { - var _ret = _loop(i); - - if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v; - } - return false; -}; - -var expandableKeys = exports.expandableKeys = function expandableKeys(data, keyField) { - var skips = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : []; - - if (skips.length === 0) { - return data.map(function (row) { - return _utils2.default.get(row, keyField); - }); - } - return data.filter(function (row) { - return !_utils2.default.contains(skips, _utils2.default.get(row, keyField)); - }).map(function (row) { - return _utils2.default.get(row, keyField); - }); -}; - -var getExpandedRows = exports.getExpandedRows = function getExpandedRows(data, keyField, expanded) { - return expanded.map(function (k) { - return (0, _rows.getRowByRowId)(data, keyField, k); - }); -}; - -/***/ }), -/* 41 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.editCell = undefined; - -var _utils = __webpack_require__(2); - -var _utils2 = _interopRequireDefault(_utils); - -var _rows = __webpack_require__(6); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var editCell = exports.editCell = function editCell(data, keyField, rowId, dataField, newValue) { - var row = (0, _rows.getRowByRowId)(data, keyField, rowId); - if (row) _utils2.default.set(row, dataField, newValue); -}; - -/***/ }), -/* 42 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.nextOrder = exports.sort = undefined; - -var _utils = __webpack_require__(2); - -var _utils2 = _interopRequireDefault(_utils); - -var _const = __webpack_require__(3); - -var _const2 = _interopRequireDefault(_const); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } /* eslint no-nested-ternary: 0 */ -/* eslint no-lonely-if: 0 */ -/* eslint no-underscore-dangle: 0 */ - - -function comparator(a, b) { - var result = void 0; - if (typeof b === 'string') { - result = b.localeCompare(a); - } else { - result = a > b ? -1 : a < b ? 1 : 0; - } - return result; -} - -var sort = exports.sort = function sort(data, sortOrder, _ref) { - var dataField = _ref.dataField, - sortFunc = _ref.sortFunc, - sortValue = _ref.sortValue; - - var _data = [].concat(_toConsumableArray(data)); - _data.sort(function (a, b) { - var result = void 0; - var valueA = _utils2.default.get(a, dataField); - var valueB = _utils2.default.get(b, dataField); - if (sortValue) { - valueA = sortValue(valueA, a); - valueB = sortValue(valueB, b); - } else { - valueA = _utils2.default.isDefined(valueA) ? valueA : ''; - valueB = _utils2.default.isDefined(valueB) ? valueB : ''; - } - - if (sortFunc) { - result = sortFunc(valueA, valueB, sortOrder, dataField, a, b); - } else { - if (sortOrder === _const2.default.SORT_DESC) { - result = comparator(valueA, valueB); - } else { - result = comparator(valueB, valueA); - } - } - return result; - }); - return _data; -}; - -var nextOrder = exports.nextOrder = function nextOrder(currentSortColumn, _ref2) { - var sortOrder = _ref2.sortOrder, - sortColumn = _ref2.sortColumn; - var defaultOrder = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _const2.default.SORT_DESC; - - if (!sortColumn || currentSortColumn.dataField !== sortColumn.dataField) return defaultOrder; - return sortOrder === _const2.default.SORT_DESC ? _const2.default.SORT_ASC : _const2.default.SORT_DESC; -}; - -/***/ }), -/* 43 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.typeConvert = undefined; - -var _const = __webpack_require__(3); - -var _const2 = _interopRequireDefault(_const); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var typeConvert = exports.typeConvert = function typeConvert(type, value) { - if (type === _const2.default.TYPE_STRING) { - return String(value); - } else if (type === _const2.default.TYPE_NUMBER) { - return Number(value); - } else if (type === _const2.default.TYPE_BOOLEAN) { - if (typeof value === 'boolean') { - return value; - } - return value === 'true'; - } else if (type === _const2.default.TYPE_DATE) { - return new Date(value); - } - return value; -}; - -/***/ }), -/* 44 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _rowExpandContext = __webpack_require__(12); - -var _rowExpandContext2 = _interopRequireDefault(_rowExpandContext); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -exports.default = function (Component) { - return function () { - return _react2.default.createElement( - _rowExpandContext2.default.Consumer, - null, - function (expandRow) { - return _react2.default.createElement(Component, expandRow); - } - ); - }; -}; - -/***/ }), -/* 45 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = __webpack_require__(1); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _filtersCell = __webpack_require__(46); - -var _filtersCell2 = _interopRequireDefault(_filtersCell); - -var _const = __webpack_require__(3); - -var _const2 = _interopRequireDefault(_const); - -var _rowTemplate = __webpack_require__(14); - -var _rowTemplate2 = _interopRequireDefault(_rowTemplate); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var Filters = function Filters(props) { - var columns = props.columns, - onFilter = props.onFilter, - currFilters = props.currFilters, - filterPosition = props.filterPosition, - onExternalFilter = props.onExternalFilter, - className = props.className, - selectRow = props.selectRow, - expandRow = props.expandRow; - - - function renderContent() { - var filterColumns = []; - var showFiltersRow = false; - - columns.forEach(function (column, i) { - filterColumns.push(_react2.default.createElement(_filtersCell2.default, { - index: i, - key: column.dataField, - column: column, - currFilters: currFilters, - onExternalFilter: onExternalFilter, - onFilter: onFilter - })); - - if (column.filterRenderer || column.filter) { - if (!showFiltersRow) { - showFiltersRow = true; - } - } - }); - return filterColumns; - } - - return _react2.default.createElement( - 'tbody', - { - className: className, - style: { - display: filterPosition === _const2.default.FILTERS_POSITION_TOP ? 'table-header-group' : 'table-footer-group' - } - }, - _react2.default.createElement(_rowTemplate2.default, { - renderContent: renderContent, - selectRow: selectRow, - expandRow: expandRow, - cellEl: 'td' - }) - ); -}; /* eslint react/require-default-props: 0 */ - - -Filters.propTypes = { - columns: _propTypes2.default.array.isRequired, - onFilter: _propTypes2.default.func, - filterPosition: _propTypes2.default.oneOf([_const2.default.FILTERS_POSITION_TOP, _const2.default.FILTERS_POSITION_INLINE, _const2.default.FILTERS_POSITION_BOTTOM]), - currFilters: _propTypes2.default.object, - onExternalFilter: _propTypes2.default.func, - className: _propTypes2.default.string, - selectRow: _propTypes2.default.object, - expandRow: _propTypes2.default.object -}; - -Filters.defaultProps = { - position: _const2.default.FILTERS_POSITION_TOP -}; - -exports.default = Filters; - -/***/ }), -/* 46 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = __webpack_require__(1); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _utils = __webpack_require__(2); - -var _utils2 = _interopRequireDefault(_utils); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var FiltersCell = function FiltersCell(props) { - var index = props.index, - column = props.column, - onExternalFilter = props.onExternalFilter, - currFilters = props.currFilters, - onFilter = props.onFilter; - var filterRenderer = column.filterRenderer, - filter = column.filter; - - var filterElm = void 0; - var cellAttrs = {}; - var cellStyle = {}; - cellAttrs.style = cellStyle; - if (column.headerAlign) { - cellStyle.textAlign = _utils2.default.isFunction(column.headerAlign) ? column.headerAlign(column, index) : column.headerAlign; - } - if (column.filterRenderer) { - var onCustomFilter = onExternalFilter(column, filter.props.type); - filterElm = filterRenderer(onCustomFilter, column); - } else if (filter) { - filterElm = _react2.default.createElement(filter.Filter, _extends({}, filter.props, { - filterState: currFilters[column.dataField], - onFilter: onFilter, - column: column - })); - } - return _react2.default.createElement('th', cellAttrs, filterElm); -}; - -FiltersCell.propTypes = { - index: _propTypes2.default.number.isRequired, - column: _propTypes2.default.object.isRequired, - currFilters: _propTypes2.default.object.isRequired, - onFilter: _propTypes2.default.func, - onExternalFilter: _propTypes2.default.func -}; - -FiltersCell.defaultProps = { - onFilter: function onFilter() {}, - onExternalFilter: function onExternalFilter() {} -}; - -exports.default = FiltersCell; - -/***/ }), -/* 47 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = __webpack_require__(1); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/* eslint react/require-default-props: 0 */ -var Caption = function Caption(props) { - if (!props.children) return null; - - var caption = props.bootstrap4 ? _react2.default.createElement( - 'caption', - { style: { captionSide: 'top' } }, - props.children - ) : _react2.default.createElement( - 'caption', - null, - props.children - ); - - return caption; -}; - -Caption.propTypes = { - children: _propTypes2.default.oneOfType([_propTypes2.default.node, _propTypes2.default.string]), - bootstrap4: _propTypes2.default.bool -}; - -exports.default = Caption; - -/***/ }), -/* 48 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = __webpack_require__(1); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _utils = __webpack_require__(2); - -var _utils2 = _interopRequireDefault(_utils); - -var _simpleRow = __webpack_require__(49); - -var _simpleRow2 = _interopRequireDefault(_simpleRow); - -var _aggregateRow = __webpack_require__(51); - -var _aggregateRow2 = _interopRequireDefault(_aggregateRow); - -var _rowSection = __webpack_require__(54); - -var _rowSection2 = _interopRequireDefault(_rowSection); - -var _const = __webpack_require__(3); - -var _const2 = _interopRequireDefault(_const); - -var _rowConsumer = __webpack_require__(55); - -var _rowConsumer2 = _interopRequireDefault(_rowConsumer); - -var _rowConsumer3 = __webpack_require__(56); - -var _rowConsumer4 = _interopRequireDefault(_rowConsumer3); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint react/prop-types: 0 */ -/* eslint react/require-default-props: 0 */ - -var Body = function (_React$Component) { - _inherits(Body, _React$Component); - - function Body(props) { - _classCallCheck(this, Body); - - var _this = _possibleConstructorReturn(this, (Body.__proto__ || Object.getPrototypeOf(Body)).call(this, props)); - - var keyField = props.keyField, - cellEdit = props.cellEdit, - selectRow = props.selectRow, - expandRow = props.expandRow; - - // Construct Editing Cell Component - - if (cellEdit.createContext) { - _this.EditingCell = cellEdit.createEditingCell(_utils2.default, cellEdit.options.onStartEdit); - } - - // Construct Row Component - var RowComponent = _simpleRow2.default; - var selectRowEnabled = selectRow.mode !== _const2.default.ROW_SELECT_DISABLED; - var expandRowEnabled = !!expandRow.renderer; - - if (expandRowEnabled) { - RowComponent = (0, _rowConsumer4.default)(_aggregateRow2.default); - } - - if (selectRowEnabled) { - RowComponent = (0, _rowConsumer2.default)(expandRowEnabled ? RowComponent : _aggregateRow2.default); - } - - if (cellEdit.createContext) { - RowComponent = cellEdit.withRowLevelCellEdit(RowComponent, selectRowEnabled, keyField, _utils2.default); - } - _this.RowComponent = RowComponent; - return _this; - } - - _createClass(Body, [{ - key: 'render', - value: function render() { - var _this2 = this; - - var _props = this.props, - columns = _props.columns, - data = _props.data, - tabIndexCell = _props.tabIndexCell, - keyField = _props.keyField, - isEmpty = _props.isEmpty, - noDataIndication = _props.noDataIndication, - visibleColumnSize = _props.visibleColumnSize, - cellEdit = _props.cellEdit, - selectRow = _props.selectRow, - rowStyle = _props.rowStyle, - rowClasses = _props.rowClasses, - rowEvents = _props.rowEvents, - expandRow = _props.expandRow, - className = _props.className; - - - var content = void 0; - - if (isEmpty) { - var indication = _utils2.default.isFunction(noDataIndication) ? noDataIndication() : noDataIndication; - if (!indication) { - return null; - } - content = _react2.default.createElement(_rowSection2.default, { content: indication, colSpan: visibleColumnSize }); - } else { - var selectRowEnabled = selectRow.mode !== _const2.default.ROW_SELECT_DISABLED; - var expandRowEnabled = !!expandRow.renderer; - - var additionalRowProps = {}; - - if (cellEdit.createContext) { - additionalRowProps.EditingCellComponent = this.EditingCell; - } - - if (selectRowEnabled || expandRowEnabled) { - additionalRowProps.expandRow = expandRow; - additionalRowProps.selectRow = selectRow; - } - - content = data.map(function (row, index) { - var key = _utils2.default.get(row, keyField); - var baseRowProps = _extends({ - key: key, - row: row, - tabIndexCell: tabIndexCell, - columns: columns, - keyField: keyField, - cellEdit: cellEdit, - value: key, - rowIndex: index, - visibleColumnSize: visibleColumnSize, - attrs: rowEvents || {} - }, additionalRowProps); - - baseRowProps.style = _utils2.default.isFunction(rowStyle) ? rowStyle(row, index) : rowStyle; - baseRowProps.className = _utils2.default.isFunction(rowClasses) ? rowClasses(row, index) : rowClasses; - - return _react2.default.createElement(_this2.RowComponent, baseRowProps); - }); - } - - return _react2.default.createElement( - 'tbody', - { className: className }, - content - ); - } - }]); - - return Body; -}(_react2.default.Component); - -Body.propTypes = { - keyField: _propTypes2.default.string.isRequired, - data: _propTypes2.default.array.isRequired, - columns: _propTypes2.default.array.isRequired, - selectRow: _propTypes2.default.object -}; - -exports.default = Body; - -/***/ }), -/* 49 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = __webpack_require__(1); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _rowPureContent = __webpack_require__(15); - -var _rowPureContent2 = _interopRequireDefault(_rowPureContent); - -var _eventDelegater = __webpack_require__(16); - -var _eventDelegater2 = _interopRequireDefault(_eventDelegater); - -var _shouldUpdater2 = __webpack_require__(17); - -var _shouldUpdater3 = _interopRequireDefault(_shouldUpdater2); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint react/prop-types: 0 */ -/* eslint react/no-array-index-key: 0 */ - - -var SimpleRow = function (_shouldUpdater) { - _inherits(SimpleRow, _shouldUpdater); - - function SimpleRow(props) { - _classCallCheck(this, SimpleRow); - - var _this = _possibleConstructorReturn(this, (SimpleRow.__proto__ || Object.getPrototypeOf(SimpleRow)).call(this, props)); - - _this.shouldUpdateRowContent = false; - return _this; - } - - _createClass(SimpleRow, [{ - key: 'shouldComponentUpdate', - value: function shouldComponentUpdate(nextProps) { - this.shouldUpdateRowContent = false; - this.shouldUpdateRowContent = this.shouldRowContentUpdate(nextProps); - if (this.shouldUpdateRowContent) return true; - - return this.shouldUpdatedBySelfProps(nextProps); - } - }, { - key: 'render', - value: function render() { - var _props = this.props, - className = _props.className, - style = _props.style, - attrs = _props.attrs, - visibleColumnSize = _props.visibleColumnSize, - tabIndexCell = _props.tabIndexCell, - rest = _objectWithoutProperties(_props, ['className', 'style', 'attrs', 'visibleColumnSize', 'tabIndexCell']); - - var trAttrs = this.delegate(attrs); - var tabIndexStart = this.props.rowIndex * visibleColumnSize + 1; - - return _react2.default.createElement( - 'tr', - _extends({ style: style, className: className }, trAttrs), - _react2.default.createElement(_rowPureContent2.default, _extends({ - shouldUpdate: this.shouldUpdateRowContent, - tabIndexStart: tabIndexCell ? tabIndexStart : -1 - }, rest)) - ); - } - }]); - - return SimpleRow; -}((0, _shouldUpdater3.default)((0, _eventDelegater2.default)(_react.Component))); - -SimpleRow.propTypes = { - row: _propTypes2.default.object.isRequired, - rowIndex: _propTypes2.default.number.isRequired, - columns: _propTypes2.default.array.isRequired, - style: _propTypes2.default.object, - className: _propTypes2.default.string, - attrs: _propTypes2.default.object -}; - -SimpleRow.defaultProps = { - editable: true, - style: {}, - className: null, - attrs: {} -}; - -exports.default = SimpleRow; - -/***/ }), -/* 50 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = __webpack_require__(1); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _cellEventDelegater = __webpack_require__(9); - -var _cellEventDelegater2 = _interopRequireDefault(_cellEventDelegater); - -var _utils = __webpack_require__(2); - -var _utils2 = _interopRequireDefault(_utils); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint react/prop-types: 0 */ - - -var Cell = function (_eventDelegater) { - _inherits(Cell, _eventDelegater); - - function Cell(props) { - _classCallCheck(this, Cell); - - var _this = _possibleConstructorReturn(this, (Cell.__proto__ || Object.getPrototypeOf(Cell)).call(this, props)); - - _this.createHandleEditingCell = function (originFunc) { - return function (e) { - var _this$props = _this.props, - onStart = _this$props.onStart, - rowIndex = _this$props.rowIndex, - columnIndex = _this$props.columnIndex, - clickToEdit = _this$props.clickToEdit, - dbclickToEdit = _this$props.dbclickToEdit; - - if ((clickToEdit || dbclickToEdit) && _utils2.default.isFunction(originFunc)) { - originFunc(e); - } - if (onStart) { - onStart(rowIndex, columnIndex); - } - }; - }; - - _this.createHandleEditingCell = _this.createHandleEditingCell.bind(_this); - return _this; - } - - _createClass(Cell, [{ - key: 'shouldComponentUpdate', - value: function shouldComponentUpdate(nextProps) { - var shouldUpdate = false; - if (nextProps.column.isDummyField) { - shouldUpdate = !_utils2.default.isEqual(this.props.row, nextProps.row); - } else { - shouldUpdate = _utils2.default.get(this.props.row, this.props.column.dataField) !== _utils2.default.get(nextProps.row, nextProps.column.dataField); - } - - if (shouldUpdate) return true; - - // if (nextProps.formatter) - - shouldUpdate = (nextProps.column.formatter ? !_utils2.default.isEqual(this.props.row, nextProps.row) : false) || this.props.column.hidden !== nextProps.column.hidden || this.props.column.isDummyField !== nextProps.column.isDummyField || this.props.rowIndex !== nextProps.rowIndex || this.props.columnIndex !== nextProps.columnIndex || this.props.className !== nextProps.className || this.props.title !== nextProps.title || this.props.editable !== nextProps.editable || this.props.clickToEdit !== nextProps.clickToEdit || this.props.dbclickToEdit !== nextProps.dbclickToEdit || !_utils2.default.isEqual(this.props.style, nextProps.style) || !_utils2.default.isEqual(this.props.column.formatExtraData, nextProps.column.formatExtraData) || !_utils2.default.isEqual(this.props.column.events, nextProps.column.events) || !_utils2.default.isEqual(this.props.column.attrs, nextProps.column.attrs) || this.props.tabIndex !== nextProps.tabIndex; - return shouldUpdate; - } - }, { - key: 'render', - value: function render() { - var _props = this.props, - row = _props.row, - rowIndex = _props.rowIndex, - column = _props.column, - columnIndex = _props.columnIndex, - onStart = _props.onStart, - editable = _props.editable, - clickToEdit = _props.clickToEdit, - dbclickToEdit = _props.dbclickToEdit, - rest = _objectWithoutProperties(_props, ['row', 'rowIndex', 'column', 'columnIndex', 'onStart', 'editable', 'clickToEdit', 'dbclickToEdit']); - - var dataField = column.dataField, - formatter = column.formatter, - formatExtraData = column.formatExtraData; - - var attrs = this.delegate(_extends({}, rest)); - var content = column.isDummyField ? null : _utils2.default.get(row, dataField); - - if (formatter) { - content = column.formatter(content, row, rowIndex, formatExtraData); - } - - if (clickToEdit && editable) { - attrs.onClick = this.createHandleEditingCell(attrs.onClick); - } else if (dbclickToEdit && editable) { - attrs.onDoubleClick = this.createHandleEditingCell(attrs.onDoubleClick); - } - - return _react2.default.createElement( - 'td', - attrs, - typeof content === 'boolean' ? '' + content : content - ); - } - }]); - - return Cell; -}((0, _cellEventDelegater2.default)(_react.Component)); - -Cell.propTypes = { - row: _propTypes2.default.object.isRequired, - rowIndex: _propTypes2.default.number.isRequired, - column: _propTypes2.default.object.isRequired, - columnIndex: _propTypes2.default.number.isRequired -}; - -exports.default = Cell; - -/***/ }), -/* 51 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = __webpack_require__(1); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _utils = __webpack_require__(2); - -var _utils2 = _interopRequireDefault(_utils); - -var _expandCell = __webpack_require__(52); - -var _expandCell2 = _interopRequireDefault(_expandCell); - -var _selectionCell = __webpack_require__(53); - -var _selectionCell2 = _interopRequireDefault(_selectionCell); - -var _shouldUpdater2 = __webpack_require__(17); - -var _shouldUpdater3 = _interopRequireDefault(_shouldUpdater2); - -var _eventDelegater = __webpack_require__(16); - -var _eventDelegater2 = _interopRequireDefault(_eventDelegater); - -var _rowPureContent = __webpack_require__(15); - -var _rowPureContent2 = _interopRequireDefault(_rowPureContent); - -var _const = __webpack_require__(3); - -var _const2 = _interopRequireDefault(_const); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint class-methods-use-this: 0 */ -/* eslint react/prop-types: 0 */ -/* eslint no-plusplus: 0 */ - - -var RowAggregator = function (_shouldUpdater) { - _inherits(RowAggregator, _shouldUpdater); - - function RowAggregator(props) { - _classCallCheck(this, RowAggregator); - - var _this = _possibleConstructorReturn(this, (RowAggregator.__proto__ || Object.getPrototypeOf(RowAggregator)).call(this, props)); - - _this.clickNum = 0; - _this.shouldUpdateRowContent = false; - _this.createClickEventHandler = _this.createClickEventHandler.bind(_this); - return _this; - } - - _createClass(RowAggregator, [{ - key: 'shouldComponentUpdate', - value: function shouldComponentUpdate(nextProps) { - if (this.props.selected !== nextProps.selected || this.props.expanded !== nextProps.expanded || this.props.expandable !== nextProps.expandable || this.props.selectable !== nextProps.selectable || this.props.selectRow.hideSelectColumn !== nextProps.selectRow.hideSelectColumn || this.shouldUpdatedBySelfProps(nextProps)) { - this.shouldUpdateRowContent = this.shouldRowContentUpdate(nextProps); - return true; - } - this.shouldUpdateRowContent = this.shouldRowContentUpdate(nextProps); - - return this.shouldUpdateRowContent; - } - }, { - key: 'isRenderFunctionColumnInLeft', - value: function isRenderFunctionColumnInLeft() { - var position = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _const2.default.INDICATOR_POSITION_LEFT; - - return position === _const2.default.INDICATOR_POSITION_LEFT; - } - }, { - key: 'render', - value: function render() { - var _props = this.props, - row = _props.row, - columns = _props.columns, - keyField = _props.keyField, - rowIndex = _props.rowIndex, - style = _props.style, - className = _props.className, - attrs = _props.attrs, - selectRow = _props.selectRow, - expandRow = _props.expandRow, - expanded = _props.expanded, - expandable = _props.expandable, - selected = _props.selected, - selectable = _props.selectable, - visibleColumnSize = _props.visibleColumnSize, - tabIndexCell = _props.tabIndexCell, - rest = _objectWithoutProperties(_props, ['row', 'columns', 'keyField', 'rowIndex', 'style', 'className', 'attrs', 'selectRow', 'expandRow', 'expanded', 'expandable', 'selected', 'selectable', 'visibleColumnSize', 'tabIndexCell']); - - var key = _utils2.default.get(row, keyField); - var hideSelectColumn = selectRow.hideSelectColumn, - selectColumnPosition = selectRow.selectColumnPosition, - clickToSelect = selectRow.clickToSelect; - var showExpandColumn = expandRow.showExpandColumn, - expandColumnPosition = expandRow.expandColumnPosition; - - - var newAttrs = this.delegate(_extends({}, attrs)); - if (clickToSelect || !!expandRow.renderer) { - newAttrs.onClick = this.createClickEventHandler(newAttrs.onClick); - } - - var tabIndexStart = rowIndex * visibleColumnSize + 1; - - var childrens = [_react2.default.createElement(_rowPureContent2.default, _extends({ - key: 'row', - row: row, - columns: columns, - keyField: keyField, - rowIndex: rowIndex, - shouldUpdate: this.shouldUpdateRowContent, - tabIndexStart: tabIndexCell ? tabIndexStart : -1 - }, rest))]; - - if (!hideSelectColumn) { - var selectCell = _react2.default.createElement(_selectionCell2.default, _extends({}, selectRow, { - key: 'selection-cell', - rowKey: key, - rowIndex: rowIndex, - selected: selected, - disabled: !selectable, - tabIndex: tabIndexCell ? tabIndexStart++ : -1 - })); - if (this.isRenderFunctionColumnInLeft(selectColumnPosition)) { - childrens.unshift(selectCell); - } else { - childrens.push(selectCell); - } - } - - if (showExpandColumn) { - var expandCell = _react2.default.createElement(_expandCell2.default, _extends({}, expandRow, { - key: 'expand-cell', - rowKey: key, - rowIndex: rowIndex, - expanded: expanded, - expandable: expandable, - tabIndex: tabIndexCell ? tabIndexStart++ : -1 - })); - if (this.isRenderFunctionColumnInLeft(expandColumnPosition)) { - childrens.unshift(expandCell); - } else { - childrens.push(expandCell); - } - } - - return _react2.default.createElement( - 'tr', - _extends({ - style: style, - className: className - }, newAttrs), - childrens - ); - } - }]); - - return RowAggregator; -}((0, _shouldUpdater3.default)((0, _eventDelegater2.default)(_react2.default.Component))); - -RowAggregator.propTypes = { - attrs: _propTypes2.default.object, - style: _propTypes2.default.object -}; -RowAggregator.defaultProps = { - attrs: {}, - style: {} -}; -exports.default = RowAggregator; - -/***/ }), -/* 52 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = __webpack_require__(1); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint - react/require-default-props: 0 - jsx-a11y/no-noninteractive-element-interactions: 0 - */ -/* eslint no-nested-ternary: 0 */ - - -var ExpandCell = function (_Component) { - _inherits(ExpandCell, _Component); - - function ExpandCell() { - _classCallCheck(this, ExpandCell); - - var _this = _possibleConstructorReturn(this, (ExpandCell.__proto__ || Object.getPrototypeOf(ExpandCell)).call(this)); - - _this.handleClick = _this.handleClick.bind(_this); - return _this; - } - - _createClass(ExpandCell, [{ - key: 'shouldComponentUpdate', - value: function shouldComponentUpdate(nextProps) { - var shouldUpdate = this.props.rowIndex !== nextProps.rowIndex || this.props.expanded !== nextProps.expanded || this.props.rowKey !== nextProps.rowKey || this.props.tabIndex !== nextProps.tabIndex; - - return shouldUpdate; - } - }, { - key: 'handleClick', - value: function handleClick(e) { - var _props = this.props, - rowKey = _props.rowKey, - expanded = _props.expanded, - onRowExpand = _props.onRowExpand, - rowIndex = _props.rowIndex; - - e.stopPropagation(); - onRowExpand(rowKey, !expanded, rowIndex, e); - } - }, { - key: 'render', - value: function render() { - var _props2 = this.props, - expanded = _props2.expanded, - expandable = _props2.expandable, - expandColumnRenderer = _props2.expandColumnRenderer, - tabIndex = _props2.tabIndex, - rowKey = _props2.rowKey; - - var attrs = {}; - if (tabIndex !== -1) attrs.tabIndex = tabIndex; - - return _react2.default.createElement( - 'td', - _extends({ className: 'expand-cell', onClick: this.handleClick }, attrs), - expandColumnRenderer ? expandColumnRenderer({ - expandable: expandable, - expanded: expanded, - rowKey: rowKey - }) : expandable ? expanded ? '(-)' : '(+)' : '' - ); - } - }]); - - return ExpandCell; -}(_react.Component); - -ExpandCell.propTypes = { - rowKey: _propTypes2.default.any, - expanded: _propTypes2.default.bool.isRequired, - expandable: _propTypes2.default.bool.isRequired, - onRowExpand: _propTypes2.default.func.isRequired, - expandColumnRenderer: _propTypes2.default.func, - rowIndex: _propTypes2.default.number, - tabIndex: _propTypes2.default.number -}; -exports.default = ExpandCell; - -/***/ }), -/* 53 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = __webpack_require__(1); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _const = __webpack_require__(3); - -var _const2 = _interopRequireDefault(_const); - -var _utils = __webpack_require__(2); - -var _utils2 = _interopRequireDefault(_utils); - -var _bootstrap = __webpack_require__(5); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint - react/require-default-props: 0 - jsx-a11y/no-noninteractive-element-interactions: 0 - */ - - -var SelectionCell = function (_Component) { - _inherits(SelectionCell, _Component); - - function SelectionCell() { - _classCallCheck(this, SelectionCell); - - var _this = _possibleConstructorReturn(this, (SelectionCell.__proto__ || Object.getPrototypeOf(SelectionCell)).call(this)); - - _this.handleClick = _this.handleClick.bind(_this); - return _this; - } - - _createClass(SelectionCell, [{ - key: 'shouldComponentUpdate', - value: function shouldComponentUpdate(nextProps) { - var shouldUpdate = this.props.rowIndex !== nextProps.rowIndex || this.props.selected !== nextProps.selected || this.props.disabled !== nextProps.disabled || this.props.rowKey !== nextProps.rowKey || this.props.tabIndex !== nextProps.tabIndex || this.props.selectColumnStyle !== nextProps.selectColumnStyle; - - return shouldUpdate; - } - }, { - key: 'handleClick', - value: function handleClick(e) { - var _props = this.props, - inputType = _props.mode, - rowKey = _props.rowKey, - selected = _props.selected, - onRowSelect = _props.onRowSelect, - disabled = _props.disabled, - rowIndex = _props.rowIndex; - - e.stopPropagation(); - if (disabled) return; - - var checked = inputType === _const2.default.ROW_SELECT_SINGLE ? true : !selected; - - onRowSelect(rowKey, checked, rowIndex, e); - } - }, { - key: 'render', - value: function render() { - var _this2 = this; - - var _props2 = this.props, - rowKey = _props2.rowKey, - inputType = _props2.mode, - selected = _props2.selected, - disabled = _props2.disabled, - tabIndex = _props2.tabIndex, - rowIndex = _props2.rowIndex, - selectionRenderer = _props2.selectionRenderer, - selectColumnStyle = _props2.selectColumnStyle; - - - var attrs = {}; - if (tabIndex !== -1) attrs.tabIndex = tabIndex; - - attrs.style = _utils2.default.isFunction(selectColumnStyle) ? selectColumnStyle({ - checked: selected, - disabled: disabled, - rowIndex: rowIndex, - rowKey: rowKey - }) : selectColumnStyle; - - return _react2.default.createElement( - _bootstrap.BootstrapContext.Consumer, - null, - function (_ref) { - var bootstrap4 = _ref.bootstrap4; - return _react2.default.createElement( - 'td', - _extends({ className: 'selection-cell', onClick: _this2.handleClick }, attrs), - selectionRenderer ? selectionRenderer({ - mode: inputType, - checked: selected, - disabled: disabled, - rowIndex: rowIndex, - rowKey: rowKey - }) : _react2.default.createElement('input', { - type: inputType, - checked: selected, - disabled: disabled, - className: bootstrap4 ? 'selection-input-4' : '', - onChange: function onChange() {} - }) - ); - } - ); - } - }]); - - return SelectionCell; -}(_react.Component); - -SelectionCell.propTypes = { - mode: _propTypes2.default.string.isRequired, - rowKey: _propTypes2.default.any, - selected: _propTypes2.default.bool, - onRowSelect: _propTypes2.default.func, - disabled: _propTypes2.default.bool, - rowIndex: _propTypes2.default.number, - tabIndex: _propTypes2.default.number, - clickToSelect: _propTypes2.default.bool, - selectionRenderer: _propTypes2.default.func, - selectColumnStyle: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.func]) -}; -exports.default = SelectionCell; - -/***/ }), -/* 54 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = __webpack_require__(1); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var RowSection = function RowSection(_ref) { - var content = _ref.content, - colSpan = _ref.colSpan; - return _react2.default.createElement( - 'tr', - null, - _react2.default.createElement( - 'td', - { - 'data-toggle': 'collapse', - colSpan: colSpan, - className: 'react-bs-table-no-data' - }, - content - ) - ); -}; - -RowSection.propTypes = { - content: _propTypes2.default.any, - colSpan: _propTypes2.default.number -}; - -RowSection.defaultProps = { - content: null, - colSpan: 1 -}; - -exports.default = RowSection; - -/***/ }), -/* 55 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; /* eslint react/prop-types: 0 */ - - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _classnames = __webpack_require__(4); - -var _classnames2 = _interopRequireDefault(_classnames); - -var _utils = __webpack_require__(2); - -var _utils2 = _interopRequireDefault(_utils); - -var _selectionContext = __webpack_require__(10); - -var _selectionContext2 = _interopRequireDefault(_selectionContext); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -exports.default = function (Component) { - var renderWithSelection = function renderWithSelection(props, selectRow) { - var key = props.value; - var selected = _utils2.default.contains(selectRow.selected, key); - var selectable = !selectRow.nonSelectable || !_utils2.default.contains(selectRow.nonSelectable, key); - var notSelectable = _utils2.default.contains(selectRow.nonSelectable, key); - - var style = props.style, - className = props.className; - - - if (selected) { - var selectedStyle = _utils2.default.isFunction(selectRow.style) ? selectRow.style(props.row, props.rowIndex) : selectRow.style; - - var selectedClasses = _utils2.default.isFunction(selectRow.classes) ? selectRow.classes(props.row, props.rowIndex) : selectRow.classes; - - style = _extends({}, style, selectedStyle); - className = (0, _classnames2.default)(className, selectedClasses) || undefined; - - if (selectRow.bgColor) { - style = style || {}; - style.backgroundColor = _utils2.default.isFunction(selectRow.bgColor) ? selectRow.bgColor(props.row, props.rowIndex) : selectRow.bgColor; - } - } - - if (notSelectable) { - var notSelectableStyle = _utils2.default.isFunction(selectRow.nonSelectableStyle) ? selectRow.nonSelectableStyle(props.row, props.rowIndex) : selectRow.nonSelectableStyle; - - var notSelectableClasses = _utils2.default.isFunction(selectRow.nonSelectableClasses) ? selectRow.nonSelectableClasses(props.row, props.rowIndex) : selectRow.nonSelectableClasses; - - style = _extends({}, style, notSelectableStyle); - className = (0, _classnames2.default)(className, notSelectableClasses) || undefined; - } - - return _react2.default.createElement(Component, _extends({}, props, { - style: style, - className: className, - selectRow: selectRow, - selected: selected, - selectable: selectable - })); - }; - - function withConsumer(props) { - return _react2.default.createElement( - _selectionContext2.default.Consumer, - null, - function (selectRow) { - return renderWithSelection(props, selectRow); - } - ); - } - - withConsumer.displayName = 'WithSelectionRowConsumer'; - return withConsumer; -}; - -/***/ }), -/* 56 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; /* eslint react/prop-types: 0 */ - - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _classnames = __webpack_require__(4); - -var _classnames2 = _interopRequireDefault(_classnames); - -var _expandRow = __webpack_require__(57); - -var _expandRow2 = _interopRequireDefault(_expandRow); - -var _utils = __webpack_require__(2); - -var _utils2 = _interopRequireDefault(_utils); - -var _rowExpandContext = __webpack_require__(12); - -var _rowExpandContext2 = _interopRequireDefault(_rowExpandContext); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -exports.default = function (Component) { - var renderWithExpansion = function renderWithExpansion(props, expandRow) { - var parentClassName = ''; - var className = ''; - var key = props.value; - - var expanded = _utils2.default.contains(expandRow.expanded, key); - var isClosing = _utils2.default.contains(expandRow.isClosing, key); - var expandable = !expandRow.nonExpandable || !_utils2.default.contains(expandRow.nonExpandable, key); - if (expanded) { - parentClassName = _utils2.default.isFunction(expandRow.parentClassName) ? expandRow.parentClassName(expanded, props.row, props.rowIndex) : expandRow.parentClassName || ''; - - className = _utils2.default.isFunction(expandRow.className) ? expandRow.className(expanded, props.row, props.rowIndex) : expandRow.className || ''; - } - - return [_react2.default.createElement(Component, _extends({}, props, { - key: key, - expanded: expanded, - expandable: expandable, - expandRow: _extends({}, expandRow), - className: (0, _classnames2.default)(props.className, parentClassName) - })), expanded || isClosing ? _react2.default.createElement( - _expandRow2.default, - { - key: key + '-expanding', - colSpan: props.visibleColumnSize, - expanded: expanded, - onClosed: function onClosed() { - return expandRow.onClosed(key); - }, - className: className - }, - expandRow.renderer(props.row, props.rowIndex) - ) : null]; - }; - return function (props) { - return _react2.default.createElement( - _rowExpandContext2.default.Consumer, - null, - function (expandRow) { - return renderWithExpansion(props, expandRow); - } - ); - }; -}; - -/***/ }), -/* 57 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _classnames = __webpack_require__(4); - -var _classnames2 = _interopRequireDefault(_classnames); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = __webpack_require__(1); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _reactTransitionGroup = __webpack_require__(58); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } - -var ExpandRow = function ExpandRow(_ref) { - var children = _ref.children, - expanded = _ref.expanded, - onClosed = _ref.onClosed, - className = _ref.className, - rest = _objectWithoutProperties(_ref, ['children', 'expanded', 'onClosed', 'className']); - - return _react2.default.createElement( - 'tr', - null, - _react2.default.createElement( - 'td', - _extends({ className: (0, _classnames2.default)('reset-expansion-style', className) }, rest), - _react2.default.createElement( - _reactTransitionGroup.CSSTransition, - { - appear: true, - 'in': expanded, - timeout: 400, - classNames: 'row-expand-slide', - onExited: onClosed - }, - _react2.default.createElement( - 'div', - null, - _react2.default.createElement( - 'div', - { className: 'row-expansion-style' }, - children - ) - ) - ) - ) - ); -}; - -ExpandRow.propTypes = { - children: _propTypes2.default.node, - expanded: _propTypes2.default.bool, - onClosed: _propTypes2.default.func, - className: _propTypes2.default.string -}; - -ExpandRow.defaultProps = { - children: null, - expanded: false, - onClosed: null, - className: '' -}; - -exports.default = ExpandRow; - -/***/ }), -/* 58 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__CSSTransition__ = __webpack_require__(59); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "CSSTransition", function() { return __WEBPACK_IMPORTED_MODULE_0__CSSTransition__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__ReplaceTransition__ = __webpack_require__(64); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "ReplaceTransition", function() { return __WEBPACK_IMPORTED_MODULE_1__ReplaceTransition__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__TransitionGroup__ = __webpack_require__(24); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "TransitionGroup", function() { return __WEBPACK_IMPORTED_MODULE_2__TransitionGroup__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__Transition__ = __webpack_require__(19); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Transition", function() { return __WEBPACK_IMPORTED_MODULE_3__Transition__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__config__ = __webpack_require__(21); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "config", function() { return __WEBPACK_IMPORTED_MODULE_4__config__["a"]; }); - - - - - - -/***/ }), -/* 59 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__babel_runtime_helpers_esm_extends__ = __webpack_require__(18); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__babel_runtime_helpers_esm_objectWithoutPropertiesLoose__ = __webpack_require__(7); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__babel_runtime_helpers_esm_inheritsLoose__ = __webpack_require__(8); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_prop_types__ = __webpack_require__(1); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_prop_types__); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_dom_helpers_class_addClass__ = __webpack_require__(60); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_dom_helpers_class_addClass___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_dom_helpers_class_addClass__); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_dom_helpers_class_removeClass__ = __webpack_require__(63); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_dom_helpers_class_removeClass___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_dom_helpers_class_removeClass__); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_react__ = __webpack_require__(0); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6_react__); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__Transition__ = __webpack_require__(19); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__utils_PropTypes__ = __webpack_require__(22); - - - - - - - - - - -var _addClass = function addClass(node, classes) { - return node && classes && classes.split(' ').forEach(function (c) { - return __WEBPACK_IMPORTED_MODULE_4_dom_helpers_class_addClass___default()(node, c); - }); -}; - -var removeClass = function removeClass(node, classes) { - return node && classes && classes.split(' ').forEach(function (c) { - return __WEBPACK_IMPORTED_MODULE_5_dom_helpers_class_removeClass___default()(node, c); - }); -}; -/** - * A transition component inspired by the excellent - * [ng-animate](http://www.nganimate.org/) library, you should use it if you're - * using CSS transitions or animations. It's built upon the - * [`Transition`](https://reactcommunity.org/react-transition-group/transition) - * component, so it inherits all of its props. - * - * `CSSTransition` applies a pair of class names during the `appear`, `enter`, - * and `exit` states of the transition. The first class is applied and then a - * second `*-active` class in order to activate the CSS transition. After the - * transition, matching `*-done` class names are applied to persist the - * transition state. - * - * ```jsx - * function App() { - * const [inProp, setInProp] = useState(false); - * return ( - *
- * - *
- * {"I'll receive my-node-* classes"} - *
- *
- * - *
- * ); - * } - * ``` - * - * When the `in` prop is set to `true`, the child component will first receive - * the class `example-enter`, then the `example-enter-active` will be added in - * the next tick. `CSSTransition` [forces a - * reflow](https://github.com/reactjs/react-transition-group/blob/5007303e729a74be66a21c3e2205e4916821524b/src/CSSTransition.js#L208-L215) - * between before adding the `example-enter-active`. This is an important trick - * because it allows us to transition between `example-enter` and - * `example-enter-active` even though they were added immediately one after - * another. Most notably, this is what makes it possible for us to animate - * _appearance_. - * - * ```css - * .my-node-enter { - * opacity: 0; - * } - * .my-node-enter-active { - * opacity: 1; - * transition: opacity 200ms; - * } - * .my-node-exit { - * opacity: 1; - * } - * .my-node-exit-active { - * opacity: 0; - * transition: opacity 200ms; - * } - * ``` - * - * `*-active` classes represent which styles you want to animate **to**. - */ - - -var CSSTransition = -/*#__PURE__*/ -function (_React$Component) { - Object(__WEBPACK_IMPORTED_MODULE_2__babel_runtime_helpers_esm_inheritsLoose__["a" /* default */])(CSSTransition, _React$Component); - - function CSSTransition() { - var _this; - - for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this; - _this.appliedClasses = { - appear: {}, - enter: {}, - exit: {} - }; - - _this.onEnter = function (node, appearing) { - _this.removeClasses(node, 'exit'); - - _this.addClass(node, appearing ? 'appear' : 'enter', 'base'); - - if (_this.props.onEnter) { - _this.props.onEnter(node, appearing); - } - }; - - _this.onEntering = function (node, appearing) { - var type = appearing ? 'appear' : 'enter'; - - _this.addClass(node, type, 'active'); - - if (_this.props.onEntering) { - _this.props.onEntering(node, appearing); - } - }; - - _this.onEntered = function (node, appearing) { - var type = appearing ? 'appear' : 'enter'; - - _this.removeClasses(node, type); - - _this.addClass(node, type, 'done'); - - if (_this.props.onEntered) { - _this.props.onEntered(node, appearing); - } - }; - - _this.onExit = function (node) { - _this.removeClasses(node, 'appear'); - - _this.removeClasses(node, 'enter'); - - _this.addClass(node, 'exit', 'base'); - - if (_this.props.onExit) { - _this.props.onExit(node); - } - }; - - _this.onExiting = function (node) { - _this.addClass(node, 'exit', 'active'); - - if (_this.props.onExiting) { - _this.props.onExiting(node); - } - }; - - _this.onExited = function (node) { - _this.removeClasses(node, 'exit'); - - _this.addClass(node, 'exit', 'done'); - - if (_this.props.onExited) { - _this.props.onExited(node); - } - }; - - _this.getClassNames = function (type) { - var classNames = _this.props.classNames; - var isStringClassNames = typeof classNames === 'string'; - var prefix = isStringClassNames && classNames ? classNames + "-" : ''; - var baseClassName = isStringClassNames ? "" + prefix + type : classNames[type]; - var activeClassName = isStringClassNames ? baseClassName + "-active" : classNames[type + "Active"]; - var doneClassName = isStringClassNames ? baseClassName + "-done" : classNames[type + "Done"]; - return { - baseClassName: baseClassName, - activeClassName: activeClassName, - doneClassName: doneClassName - }; - }; - - return _this; - } - - var _proto = CSSTransition.prototype; - - _proto.addClass = function addClass(node, type, phase) { - var className = this.getClassNames(type)[phase + "ClassName"]; - - if (type === 'appear' && phase === 'done') { - className += " " + this.getClassNames('enter').doneClassName; - } // This is for to force a repaint, - // which is necessary in order to transition styles when adding a class name. - - - if (phase === 'active') { - /* eslint-disable no-unused-expressions */ - node && node.scrollTop; - } - - this.appliedClasses[type][phase] = className; - - _addClass(node, className); - }; - - _proto.removeClasses = function removeClasses(node, type) { - var _this$appliedClasses$ = this.appliedClasses[type], - baseClassName = _this$appliedClasses$.base, - activeClassName = _this$appliedClasses$.active, - doneClassName = _this$appliedClasses$.done; - this.appliedClasses[type] = {}; - - if (baseClassName) { - removeClass(node, baseClassName); - } - - if (activeClassName) { - removeClass(node, activeClassName); - } - - if (doneClassName) { - removeClass(node, doneClassName); - } - }; - - _proto.render = function render() { - var _this$props = this.props, - _ = _this$props.classNames, - props = Object(__WEBPACK_IMPORTED_MODULE_1__babel_runtime_helpers_esm_objectWithoutPropertiesLoose__["a" /* default */])(_this$props, ["classNames"]); - - return __WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_7__Transition__["a" /* default */], Object(__WEBPACK_IMPORTED_MODULE_0__babel_runtime_helpers_esm_extends__["a" /* default */])({}, props, { - onEnter: this.onEnter, - onEntered: this.onEntered, - onEntering: this.onEntering, - onExit: this.onExit, - onExiting: this.onExiting, - onExited: this.onExited - })); - }; - - return CSSTransition; -}(__WEBPACK_IMPORTED_MODULE_6_react___default.a.Component); - -CSSTransition.defaultProps = { - classNames: '' -}; -CSSTransition.propTypes = false ? _extends({}, Transition.propTypes, { - /** - * The animation classNames applied to the component as it enters, exits or - * has finished the transition. A single name can be provided and it will be - * suffixed for each stage: e.g. - * - * `classNames="fade"` applies `fade-enter`, `fade-enter-active`, - * `fade-enter-done`, `fade-exit`, `fade-exit-active`, `fade-exit-done`, - * `fade-appear`, `fade-appear-active`, and `fade-appear-done`. - * - * **Note**: `fade-appear-done` and `fade-enter-done` will _both_ be applied. - * This allows you to define different behavior for when appearing is done and - * when regular entering is done, using selectors like - * `.fade-enter-done:not(.fade-appear-done)`. For example, you could apply an - * epic entrance animation when element first appears in the DOM using - * [Animate.css](https://daneden.github.io/animate.css/). Otherwise you can - * simply use `fade-enter-done` for defining both cases. - * - * Each individual classNames can also be specified independently like: - * - * ```js - * classNames={{ - * appear: 'my-appear', - * appearActive: 'my-active-appear', - * appearDone: 'my-done-appear', - * enter: 'my-enter', - * enterActive: 'my-active-enter', - * enterDone: 'my-done-enter', - * exit: 'my-exit', - * exitActive: 'my-active-exit', - * exitDone: 'my-done-exit', - * }} - * ``` - * - * If you want to set these classes using CSS Modules: - * - * ```js - * import styles from './styles.css'; - * ``` - * - * you might want to use camelCase in your CSS file, that way could simply - * spread them instead of listing them one by one: - * - * ```js - * classNames={{ ...styles }} - * ``` - * - * @type {string | { - * appear?: string, - * appearActive?: string, - * appearDone?: string, - * enter?: string, - * enterActive?: string, - * enterDone?: string, - * exit?: string, - * exitActive?: string, - * exitDone?: string, - * }} - */ - classNames: classNamesShape, - - /** - * A `` callback fired immediately after the 'enter' or 'appear' class is - * applied. - * - * @type Function(node: HtmlElement, isAppearing: bool) - */ - onEnter: PropTypes.func, - - /** - * A `` callback fired immediately after the 'enter-active' or - * 'appear-active' class is applied. - * - * @type Function(node: HtmlElement, isAppearing: bool) - */ - onEntering: PropTypes.func, - - /** - * A `` callback fired immediately after the 'enter' or - * 'appear' classes are **removed** and the `done` class is added to the DOM node. - * - * @type Function(node: HtmlElement, isAppearing: bool) - */ - onEntered: PropTypes.func, - - /** - * A `` callback fired immediately after the 'exit' class is - * applied. - * - * @type Function(node: HtmlElement) - */ - onExit: PropTypes.func, - - /** - * A `` callback fired immediately after the 'exit-active' is applied. - * - * @type Function(node: HtmlElement) - */ - onExiting: PropTypes.func, - - /** - * A `` callback fired immediately after the 'exit' classes - * are **removed** and the `exit-done` class is added to the DOM node. - * - * @type Function(node: HtmlElement) - */ - onExited: PropTypes.func -}) : {}; -/* harmony default export */ __webpack_exports__["a"] = (CSSTransition); - -/***/ }), -/* 60 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _interopRequireDefault = __webpack_require__(61); - -exports.__esModule = true; -exports.default = addClass; - -var _hasClass = _interopRequireDefault(__webpack_require__(62)); - -function addClass(element, className) { - if (element.classList) element.classList.add(className);else if (!(0, _hasClass.default)(element, className)) if (typeof element.className === 'string') element.className = element.className + ' ' + className;else element.setAttribute('class', (element.className && element.className.baseVal || '') + ' ' + className); -} - -module.exports = exports["default"]; - -/***/ }), -/* 61 */ -/***/ (function(module, exports) { - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - "default": obj - }; -} - -module.exports = _interopRequireDefault; - -/***/ }), -/* 62 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; -exports.default = hasClass; - -function hasClass(element, className) { - if (element.classList) return !!className && element.classList.contains(className);else return (" " + (element.className.baseVal || element.className) + " ").indexOf(" " + className + " ") !== -1; -} - -module.exports = exports["default"]; - -/***/ }), -/* 63 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -function replaceClassName(origClass, classToRemove) { - return origClass.replace(new RegExp('(^|\\s)' + classToRemove + '(?:\\s|$)', 'g'), '$1').replace(/\s+/g, ' ').replace(/^\s*|\s*$/g, ''); -} - -module.exports = function removeClass(element, className) { - if (element.classList) element.classList.remove(className);else if (typeof element.className === 'string') element.className = replaceClassName(element.className, className);else element.setAttribute('class', replaceClassName(element.className && element.className.baseVal || '', className)); -}; - -/***/ }), -/* 64 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__babel_runtime_helpers_esm_objectWithoutPropertiesLoose__ = __webpack_require__(7); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__babel_runtime_helpers_esm_inheritsLoose__ = __webpack_require__(8); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_prop_types__ = __webpack_require__(1); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_prop_types__); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_react__ = __webpack_require__(0); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_react__); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_react_dom__ = __webpack_require__(20); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_react_dom___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_react_dom__); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__TransitionGroup__ = __webpack_require__(24); - - - - - - -/** - * The `` component is a specialized `Transition` component - * that animates between two children. - * - * ```jsx - * - *
I appear first
- *
I replace the above
- *
- * ``` - */ - -var ReplaceTransition = -/*#__PURE__*/ -function (_React$Component) { - Object(__WEBPACK_IMPORTED_MODULE_1__babel_runtime_helpers_esm_inheritsLoose__["a" /* default */])(ReplaceTransition, _React$Component); - - function ReplaceTransition() { - var _this; - - for (var _len = arguments.length, _args = new Array(_len), _key = 0; _key < _len; _key++) { - _args[_key] = arguments[_key]; - } - - _this = _React$Component.call.apply(_React$Component, [this].concat(_args)) || this; - - _this.handleEnter = function () { - for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { - args[_key2] = arguments[_key2]; - } - - return _this.handleLifecycle('onEnter', 0, args); - }; - - _this.handleEntering = function () { - for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { - args[_key3] = arguments[_key3]; - } - - return _this.handleLifecycle('onEntering', 0, args); - }; - - _this.handleEntered = function () { - for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { - args[_key4] = arguments[_key4]; - } - - return _this.handleLifecycle('onEntered', 0, args); - }; - - _this.handleExit = function () { - for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) { - args[_key5] = arguments[_key5]; - } - - return _this.handleLifecycle('onExit', 1, args); - }; - - _this.handleExiting = function () { - for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) { - args[_key6] = arguments[_key6]; - } - - return _this.handleLifecycle('onExiting', 1, args); - }; - - _this.handleExited = function () { - for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) { - args[_key7] = arguments[_key7]; - } - - return _this.handleLifecycle('onExited', 1, args); - }; - - return _this; - } - - var _proto = ReplaceTransition.prototype; - - _proto.handleLifecycle = function handleLifecycle(handler, idx, originalArgs) { - var _child$props; - - var children = this.props.children; - var child = __WEBPACK_IMPORTED_MODULE_3_react___default.a.Children.toArray(children)[idx]; - if (child.props[handler]) (_child$props = child.props)[handler].apply(_child$props, originalArgs); - if (this.props[handler]) this.props[handler](Object(__WEBPACK_IMPORTED_MODULE_4_react_dom__["findDOMNode"])(this)); - }; - - _proto.render = function render() { - var _this$props = this.props, - children = _this$props.children, - inProp = _this$props.in, - props = Object(__WEBPACK_IMPORTED_MODULE_0__babel_runtime_helpers_esm_objectWithoutPropertiesLoose__["a" /* default */])(_this$props, ["children", "in"]); - - var _React$Children$toArr = __WEBPACK_IMPORTED_MODULE_3_react___default.a.Children.toArray(children), - first = _React$Children$toArr[0], - second = _React$Children$toArr[1]; - - delete props.onEnter; - delete props.onEntering; - delete props.onEntered; - delete props.onExit; - delete props.onExiting; - delete props.onExited; - return __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_5__TransitionGroup__["a" /* default */], props, inProp ? __WEBPACK_IMPORTED_MODULE_3_react___default.a.cloneElement(first, { - key: 'first', - onEnter: this.handleEnter, - onEntering: this.handleEntering, - onEntered: this.handleEntered - }) : __WEBPACK_IMPORTED_MODULE_3_react___default.a.cloneElement(second, { - key: 'second', - onEnter: this.handleExit, - onEntering: this.handleExiting, - onEntered: this.handleExited - })); - }; - - return ReplaceTransition; -}(__WEBPACK_IMPORTED_MODULE_3_react___default.a.Component); - -ReplaceTransition.propTypes = false ? { - in: PropTypes.bool.isRequired, - children: function children(props, propName) { - if (React.Children.count(props[propName]) !== 2) return new Error("\"" + propName + "\" must be exactly two transition components."); - return null; - } -} : {}; -/* harmony default export */ __webpack_exports__["a"] = (ReplaceTransition); - -/***/ }), -/* 65 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["a"] = _assertThisInitialized; -function _assertThisInitialized(self) { - if (self === void 0) { - throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); - } - - return self; -} - -/***/ }), -/* 66 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["a"] = getChildMapping; -/* unused harmony export mergeChildMappings */ -/* harmony export (immutable) */ __webpack_exports__["b"] = getInitialChildMapping; -/* harmony export (immutable) */ __webpack_exports__["c"] = getNextChildMapping; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react__ = __webpack_require__(0); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_react__); - -/** - * Given `this.props.children`, return an object mapping key to child. - * - * @param {*} children `this.props.children` - * @return {object} Mapping of key to child - */ - -function getChildMapping(children, mapFn) { - var mapper = function mapper(child) { - return mapFn && Object(__WEBPACK_IMPORTED_MODULE_0_react__["isValidElement"])(child) ? mapFn(child) : child; - }; - - var result = Object.create(null); - if (children) __WEBPACK_IMPORTED_MODULE_0_react__["Children"].map(children, function (c) { - return c; - }).forEach(function (child) { - // run the map function here instead so that the key is the computed one - result[child.key] = mapper(child); - }); - return result; -} -/** - * When you're adding or removing children some may be added or removed in the - * same render pass. We want to show *both* since we want to simultaneously - * animate elements in and out. This function takes a previous set of keys - * and a new set of keys and merges them with its best guess of the correct - * ordering. In the future we may expose some of the utilities in - * ReactMultiChild to make this easy, but for now React itself does not - * directly have this concept of the union of prevChildren and nextChildren - * so we implement it here. - * - * @param {object} prev prev children as returned from - * `ReactTransitionChildMapping.getChildMapping()`. - * @param {object} next next children as returned from - * `ReactTransitionChildMapping.getChildMapping()`. - * @return {object} a key set that contains all keys in `prev` and all keys - * in `next` in a reasonable order. - */ - -function mergeChildMappings(prev, next) { - prev = prev || {}; - next = next || {}; - - function getValueForKey(key) { - return key in next ? next[key] : prev[key]; - } // For each key of `next`, the list of keys to insert before that key in - // the combined list - - - var nextKeysPending = Object.create(null); - var pendingKeys = []; - - for (var prevKey in prev) { - if (prevKey in next) { - if (pendingKeys.length) { - nextKeysPending[prevKey] = pendingKeys; - pendingKeys = []; - } - } else { - pendingKeys.push(prevKey); - } - } - - var i; - var childMapping = {}; - - for (var nextKey in next) { - if (nextKeysPending[nextKey]) { - for (i = 0; i < nextKeysPending[nextKey].length; i++) { - var pendingNextKey = nextKeysPending[nextKey][i]; - childMapping[nextKeysPending[nextKey][i]] = getValueForKey(pendingNextKey); - } - } - - childMapping[nextKey] = getValueForKey(nextKey); - } // Finally, add the keys which didn't appear before any key in `next` - - - for (i = 0; i < pendingKeys.length; i++) { - childMapping[pendingKeys[i]] = getValueForKey(pendingKeys[i]); - } - - return childMapping; -} - -function getProp(child, prop, props) { - return props[prop] != null ? props[prop] : child.props[prop]; -} - -function getInitialChildMapping(props, onExited) { - return getChildMapping(props.children, function (child) { - return Object(__WEBPACK_IMPORTED_MODULE_0_react__["cloneElement"])(child, { - onExited: onExited.bind(null, child), - in: true, - appear: getProp(child, 'appear', props), - enter: getProp(child, 'enter', props), - exit: getProp(child, 'exit', props) - }); - }); -} -function getNextChildMapping(nextProps, prevChildMapping, onExited) { - var nextChildMapping = getChildMapping(nextProps.children); - var children = mergeChildMappings(prevChildMapping, nextChildMapping); - Object.keys(children).forEach(function (key) { - var child = children[key]; - if (!Object(__WEBPACK_IMPORTED_MODULE_0_react__["isValidElement"])(child)) return; - var hasPrev = key in prevChildMapping; - var hasNext = key in nextChildMapping; - var prevChild = prevChildMapping[key]; - var isLeaving = Object(__WEBPACK_IMPORTED_MODULE_0_react__["isValidElement"])(prevChild) && !prevChild.props.in; // item is new (entering) - - if (hasNext && (!hasPrev || isLeaving)) { - // console.log('entering', key) - children[key] = Object(__WEBPACK_IMPORTED_MODULE_0_react__["cloneElement"])(child, { - onExited: onExited.bind(null, child), - in: true, - exit: getProp(child, 'exit', nextProps), - enter: getProp(child, 'enter', nextProps) - }); - } else if (!hasNext && hasPrev && !isLeaving) { - // item is old (exiting) - // console.log('leaving', key) - children[key] = Object(__WEBPACK_IMPORTED_MODULE_0_react__["cloneElement"])(child, { - in: false - }); - } else if (hasNext && hasPrev && Object(__WEBPACK_IMPORTED_MODULE_0_react__["isValidElement"])(prevChild)) { - // item hasn't changed transition states - // copy over the last transition props; - // console.log('unchanged', key) - children[key] = Object(__WEBPACK_IMPORTED_MODULE_0_react__["cloneElement"])(child, { - onExited: onExited.bind(null, child), - in: prevChild.props.in, - exit: getProp(child, 'exit', nextProps), - enter: getProp(child, 'enter', nextProps) - }); - } - }); - return children; -} - -/***/ }), -/* 67 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = __webpack_require__(1); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _rowTemplate = __webpack_require__(14); - -var _rowTemplate2 = _interopRequireDefault(_rowTemplate); - -var _footerCell = __webpack_require__(68); - -var _footerCell2 = _interopRequireDefault(_footerCell); - -var _utils = __webpack_require__(2); - -var _utils2 = _interopRequireDefault(_utils); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var Footer = function Footer(props) { - var data = props.data, - className = props.className, - columns = props.columns, - selectRow = props.selectRow, - expandRow = props.expandRow; - - - function renderContent() { - return columns.map(function (column, i) { - if (column.footer === undefined || column.footer === null) { - return false; - } - - var columnData = _utils2.default.pluck(data, column.dataField); - - return _react2.default.createElement(_footerCell2.default, { - index: i, - key: column.dataField, - column: column, - columnData: columnData - }); - }); - } - - return _react2.default.createElement( - 'tfoot', - null, - _react2.default.createElement(_rowTemplate2.default, { - renderContent: renderContent, - selectRow: selectRow, - expandRow: expandRow, - className: className, - cellEl: 'th' - }) - ); -}; /* eslint react/require-default-props: 0 */ - - -Footer.propTypes = { - data: _propTypes2.default.array, - className: _propTypes2.default.string, - columns: _propTypes2.default.array, - selectRow: _propTypes2.default.object, - expandRow: _propTypes2.default.object -}; - -exports.default = Footer; - -/***/ }), -/* 68 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _classnames = __webpack_require__(4); - -var _classnames2 = _interopRequireDefault(_classnames); - -var _propTypes = __webpack_require__(1); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _utils = __webpack_require__(2); - -var _utils2 = _interopRequireDefault(_utils); - -var _cellEventDelegater = __webpack_require__(9); - -var _cellEventDelegater2 = _interopRequireDefault(_cellEventDelegater); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint react/require-default-props: 0 */ - - -var FooterCell = function (_eventDelegater) { - _inherits(FooterCell, _eventDelegater); - - function FooterCell() { - _classCallCheck(this, FooterCell); - - return _possibleConstructorReturn(this, (FooterCell.__proto__ || Object.getPrototypeOf(FooterCell)).apply(this, arguments)); - } - - _createClass(FooterCell, [{ - key: 'render', - value: function render() { - var _props = this.props, - index = _props.index, - column = _props.column, - columnData = _props.columnData; - var footer = column.footer, - footerTitle = column.footerTitle, - footerAlign = column.footerAlign, - footerFormatter = column.footerFormatter, - footerEvents = column.footerEvents, - footerClasses = column.footerClasses, - footerStyle = column.footerStyle, - footerAttrs = column.footerAttrs; - - - var delegateEvents = this.delegate(footerEvents); - var cellAttrs = _extends({}, _utils2.default.isFunction(footerAttrs) ? footerAttrs(column, index) : footerAttrs, delegateEvents); - - var text = ''; - if (_utils2.default.isString(footer)) { - text = footer; - } else if (_utils2.default.isFunction(footer)) { - text = footer(columnData, column, index); - } - - var cellStyle = {}; - var cellClasses = _utils2.default.isFunction(footerClasses) ? footerClasses(column, index) : footerClasses; - - if (footerStyle) { - cellStyle = _utils2.default.isFunction(footerStyle) ? footerStyle(column, index) : footerStyle; - cellStyle = cellStyle ? _extends({}, cellStyle) : cellStyle; - } - - if (footerTitle) { - cellAttrs.title = _utils2.default.isFunction(footerTitle) ? footerTitle(column, index) : text; - } - - if (footerAlign) { - cellStyle.textAlign = _utils2.default.isFunction(footerAlign) ? footerAlign(column, index) : footerAlign; - } - - if (cellClasses) cellAttrs.className = (0, _classnames2.default)(cellAttrs.className, cellClasses); - if (!_utils2.default.isEmptyObject(cellStyle)) cellAttrs.style = cellStyle; - - var children = footerFormatter ? footerFormatter(column, index, { text: text }) : text; - - return _react2.default.createElement('th', cellAttrs, children); - } - }]); - - return FooterCell; -}((0, _cellEventDelegater2.default)(_react2.default.Component)); - -FooterCell.propTypes = { - columnData: _propTypes2.default.array, - index: _propTypes2.default.number, - column: _propTypes2.default.object -}; - -exports.default = FooterCell; - -/***/ }), -/* 69 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _utils = __webpack_require__(2); - -var _utils2 = _interopRequireDefault(_utils); - -var _columnResolver = __webpack_require__(70); - -var _columnResolver2 = _interopRequireDefault(_columnResolver); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -exports.default = function (ExtendBase) { - return function (_ColumnResolver) { - _inherits(TableResolver, _ColumnResolver); - - function TableResolver() { - _classCallCheck(this, TableResolver); - - return _possibleConstructorReturn(this, (TableResolver.__proto__ || Object.getPrototypeOf(TableResolver)).apply(this, arguments)); - } - - _createClass(TableResolver, [{ - key: 'validateProps', - value: function validateProps() { - var keyField = this.props.keyField; - - if (!keyField) { - throw new Error('Please specify a field as key via keyField'); - } - if (this.visibleColumnSize(false) <= 0) { - throw new Error('No visible columns detected'); - } - } - }, { - key: 'isEmpty', - value: function isEmpty() { - return this.props.data.length === 0; - } - }, { - key: 'visibleRows', - value: function visibleRows() { - var _props = this.props, - data = _props.data, - hiddenRows = _props.hiddenRows, - keyField = _props.keyField; - - if (!hiddenRows || hiddenRows.length === 0) return data; - return data.filter(function (row) { - var key = _utils2.default.get(row, keyField); - return !_utils2.default.contains(hiddenRows, key); - }); - } - }]); - - return TableResolver; - }((0, _columnResolver2.default)(ExtendBase)); -}; - -/***/ }), -/* 70 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -exports.default = function (ExtendBase) { - return function (_ExtendBase) { - _inherits(ColumnResolver, _ExtendBase); - - function ColumnResolver() { - _classCallCheck(this, ColumnResolver); - - return _possibleConstructorReturn(this, (ColumnResolver.__proto__ || Object.getPrototypeOf(ColumnResolver)).apply(this, arguments)); - } - - _createClass(ColumnResolver, [{ - key: "visibleColumnSize", - value: function visibleColumnSize() { - var includeSelectColumn = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; - - var columnLen = void 0; - if (this.props.columnToggle && this.props.columnToggle.toggles) { - var columns = this.props.columnToggle.toggles; - columnLen = Object.keys(columns).filter(function (name) { - return columns[name]; - }).length; - } else { - columnLen = this.props.columns.filter(function (c) { - return !c.hidden; - }).length; - } - if (!includeSelectColumn) return columnLen; - if (this.props.selectRow && !this.props.selectRow.hideSelectColumn) { - columnLen += 1; - } - if (this.props.expandRow && this.props.expandRow.showExpandColumn) { - columnLen += 1; - } - return columnLen; - } - }]); - - return ColumnResolver; - }(ExtendBase); -}; - -/***/ }), -/* 71 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _events = __webpack_require__(25); - -var _events2 = _interopRequireDefault(_events); - -var _utils = __webpack_require__(2); - -var _utils2 = _interopRequireDefault(_utils); - -var _dataContext = __webpack_require__(72); - -var _dataContext2 = _interopRequireDefault(_dataContext); - -var _columnContext = __webpack_require__(73); - -var _columnContext2 = _interopRequireDefault(_columnContext); - -var _sortContext = __webpack_require__(74); - -var _sortContext2 = _interopRequireDefault(_sortContext); - -var _selectionContext = __webpack_require__(10); - -var _selectionContext2 = _interopRequireDefault(_selectionContext); - -var _rowExpandContext = __webpack_require__(12); - -var _rowExpandContext2 = _interopRequireDefault(_rowExpandContext); - -var _remoteResolver2 = __webpack_require__(75); - -var _remoteResolver3 = _interopRequireDefault(_remoteResolver2); - -var _bootstrap = __webpack_require__(5); - -var _operators = __webpack_require__(11); - -var _operators2 = _interopRequireDefault(_operators); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint camelcase: 0 */ -/* eslint no-return-assign: 0 */ -/* eslint no-param-reassign: 0 */ -/* eslint class-methods-use-this: 0 */ - - -var withContext = function withContext(Base) { - return function (_remoteResolver) { - _inherits(BootstrapTableContainer, _remoteResolver); - - function BootstrapTableContainer(props) { - _classCallCheck(this, BootstrapTableContainer); - - var _this = _possibleConstructorReturn(this, (BootstrapTableContainer.__proto__ || Object.getPrototypeOf(BootstrapTableContainer)).call(this, props)); - - _this.DataContext = (0, _dataContext2.default)(); - - if (props.registerExposedAPI) { - var exposedAPIEmitter = new _events2.default(); - exposedAPIEmitter.on('get.table.data', function (payload) { - return payload.result = _this.table.getData(); - }); - exposedAPIEmitter.on('get.selected.rows', function (payload) { - return payload.result = _this.selectionContext.getSelected(); - }); - exposedAPIEmitter.on('get.filtered.rows', function (payload) { - if (_this.searchContext) { - payload.result = _this.searchContext.getSearched(); - } else if (_this.filterContext) { - payload.result = _this.filterContext.getFiltered(); - } else { - payload.result = _this.table.getData(); - } - }); - props.registerExposedAPI(exposedAPIEmitter); - } - - if (props.columns.filter(function (col) { - return col.sort; - }).length > 0) { - _this.SortContext = (0, _sortContext2.default)(_operators2.default, _this.isRemoteSort, _this.handleRemoteSortChange); - } - - if (props.columnToggle || props.columns.filter(function (col) { - return col.hidden; - }).length > 0) { - _this.ColumnManagementContext = (0, _columnContext2.default)(); - } - - if (props.selectRow) { - _this.SelectionContext = _selectionContext2.default; - } - - if (props.expandRow) { - _this.RowExpandContext = _rowExpandContext2.default; - } - - if (props.cellEdit && props.cellEdit.createContext) { - _this.CellEditContext = props.cellEdit.createContext(_utils2.default, _operators2.default, _this.isRemoteCellEdit, _this.handleRemoteCellChange); - } - - if (props.filter) { - _this.FilterContext = props.filter.createContext(_utils2.default, _this.isRemoteFiltering, _this.handleRemoteFilterChange); - } - - if (props.pagination) { - _this.PaginationContext = props.pagination.createContext(); - } - - if (props.search && props.search.searchContext) { - _this.SearchContext = props.search.searchContext(_utils2.default, _this.isRemoteSearch, _this.handleRemoteSearchChange); - } - - if (props.setDependencyModules) { - props.setDependencyModules(_utils2.default); - } - - if (props.setPaginationRemoteEmitter) { - props.setPaginationRemoteEmitter(_this.remoteEmitter); - } - return _this; - } - - _createClass(BootstrapTableContainer, [{ - key: 'UNSAFE_componentWillReceiveProps', - value: function UNSAFE_componentWillReceiveProps(nextProps) { - if (nextProps.columns.filter(function (col) { - return col.sort; - }).length <= 0) { - this.SortContext = null; - } else if (!this.SortContext) { - this.SortContext = (0, _sortContext2.default)(_operators2.default, this.isRemoteSort, this.handleRemoteSortChange); - } - if (!nextProps.pagination && this.props.pagination) { - this.PaginationContext = null; - } - if (nextProps.pagination && !this.props.pagination) { - this.PaginationContext = nextProps.pagination.createContext(this.isRemotePagination, this.handleRemotePageChange); - } - if (!nextProps.cellEdit && this.props.cellEdit) { - this.CellEditContext = null; - } - if (nextProps.cellEdit && !this.props.cellEdit) { - this.CellEditContext = nextProps.cellEdit.createContext(_utils2.default, _operators2.default, this.isRemoteCellEdit, this.handleRemoteCellChange); - } - } - }, { - key: 'renderBase', - value: function renderBase() { - var _this2 = this; - - return function (rootProps, filterProps, searchProps, sortProps, paginationProps, columnToggleProps) { - return _react2.default.createElement(Base, _extends({ - ref: function ref(n) { - return _this2.table = n; - } - }, _this2.props, sortProps, filterProps, searchProps, paginationProps, columnToggleProps, { - data: rootProps.getData(filterProps, searchProps, sortProps, paginationProps) - })); - }; - } - }, { - key: 'renderWithColumnManagementCtx', - value: function renderWithColumnManagementCtx(base, baseProps) { - var _this3 = this; - - return function (rootProps, filterProps, searchProps, sortProps, paginationProps) { - return _react2.default.createElement( - _this3.ColumnManagementContext.Provider, - _extends({}, baseProps, { - toggles: _this3.props.columnToggle ? _this3.props.columnToggle.toggles : null - }), - _react2.default.createElement( - _this3.ColumnManagementContext.Consumer, - null, - function (columnToggleProps) { - return base(rootProps, filterProps, searchProps, sortProps, paginationProps, columnToggleProps); - } - ) - ); - }; - } - }, { - key: 'renderWithSelectionCtx', - value: function renderWithSelectionCtx(base, baseProps) { - var _this4 = this; - - return function (rootProps, filterProps, searchProps, sortProps, paginationProps) { - return _react2.default.createElement( - _this4.SelectionContext.Provider, - _extends({}, baseProps, { - ref: function ref(n) { - return _this4.selectionContext = n; - }, - selectRow: _this4.props.selectRow, - data: rootProps.getData(filterProps, searchProps, sortProps, paginationProps) - }), - base(rootProps, filterProps, searchProps, sortProps, paginationProps) - ); - }; - } - }, { - key: 'renderWithRowExpandCtx', - value: function renderWithRowExpandCtx(base, baseProps) { - var _this5 = this; - - return function (rootProps, filterProps, searchProps, sortProps, paginationProps) { - return _react2.default.createElement( - _this5.RowExpandContext.Provider, - _extends({}, baseProps, { - ref: function ref(n) { - return _this5.rowExpandContext = n; - }, - expandRow: _this5.props.expandRow, - data: rootProps.getData(filterProps, searchProps, sortProps, paginationProps) - }), - base(rootProps, filterProps, searchProps, sortProps, paginationProps) - ); - }; - } - }, { - key: 'renderWithPaginationCtx', - value: function renderWithPaginationCtx(base) { - var _this6 = this; - - return function (rootProps, filterProps, searchProps, sortProps) { - return _react2.default.createElement( - _this6.PaginationContext.Provider, - { - ref: function ref(n) { - return _this6.paginationContext = n; - }, - pagination: _this6.props.pagination, - data: rootProps.getData(filterProps, searchProps, sortProps), - bootstrap4: _this6.props.bootstrap4, - isRemotePagination: _this6.isRemotePagination, - remoteEmitter: _this6.remoteEmitter, - onDataSizeChange: _this6.props.onDataSizeChange, - tableId: _this6.props.id - }, - _react2.default.createElement( - _this6.PaginationContext.Consumer, - null, - function (paginationProps) { - return base(rootProps, filterProps, searchProps, sortProps, paginationProps); - } - ) - ); - }; - } - }, { - key: 'renderWithSortCtx', - value: function renderWithSortCtx(base, baseProps) { - var _this7 = this; - - return function (rootProps, filterProps, searchProps) { - return _react2.default.createElement( - _this7.SortContext.Provider, - _extends({}, baseProps, { - ref: function ref(n) { - return _this7.sortContext = n; - }, - defaultSorted: _this7.props.defaultSorted, - defaultSortDirection: _this7.props.defaultSortDirection, - sort: _this7.props.sort, - data: rootProps.getData(filterProps, searchProps) - }), - _react2.default.createElement( - _this7.SortContext.Consumer, - null, - function (sortProps) { - return base(rootProps, filterProps, searchProps, sortProps); - } - ) - ); - }; - } - }, { - key: 'renderWithSearchCtx', - value: function renderWithSearchCtx(base, baseProps) { - var _this8 = this; - - return function (rootProps, filterProps) { - return _react2.default.createElement( - _this8.SearchContext.Provider, - _extends({}, baseProps, { - ref: function ref(n) { - return _this8.searchContext = n; - }, - data: rootProps.getData(filterProps), - searchText: _this8.props.search.searchText, - dataChangeListener: _this8.props.dataChangeListener - }), - _react2.default.createElement( - _this8.SearchContext.Consumer, - null, - function (searchProps) { - return base(rootProps, filterProps, searchProps); - } - ) - ); - }; - } - }, { - key: 'renderWithFilterCtx', - value: function renderWithFilterCtx(base, baseProps) { - var _this9 = this; - - return function (rootProps) { - return _react2.default.createElement( - _this9.FilterContext.Provider, - _extends({}, baseProps, { - ref: function ref(n) { - return _this9.filterContext = n; - }, - data: rootProps.getData(), - filter: _this9.props.filter.options || {}, - dataChangeListener: _this9.props.dataChangeListener - }), - _react2.default.createElement( - _this9.FilterContext.Consumer, - null, - function (filterProps) { - return base(rootProps, filterProps); - } - ) - ); - }; - } - }, { - key: 'renderWithCellEditCtx', - value: function renderWithCellEditCtx(base, baseProps) { - var _this10 = this; - - return function (rootProps) { - return _react2.default.createElement( - _this10.CellEditContext.Provider, - _extends({}, baseProps, { - ref: function ref(n) { - return _this10.cellEditContext = n; - }, - selectRow: _this10.props.selectRow, - cellEdit: _this10.props.cellEdit, - data: rootProps.getData() - }), - base(rootProps) - ); - }; - } - }, { - key: 'render', - value: function render() { - var _props = this.props, - keyField = _props.keyField, - columns = _props.columns, - bootstrap4 = _props.bootstrap4; - - var baseProps = { keyField: keyField, columns: columns }; - - var base = this.renderBase(); - - if (this.ColumnManagementContext) { - base = this.renderWithColumnManagementCtx(base, baseProps); - } - - if (this.SelectionContext) { - base = this.renderWithSelectionCtx(base, baseProps); - } - - if (this.RowExpandContext) { - base = this.renderWithRowExpandCtx(base, baseProps); - } - - if (this.PaginationContext) { - base = this.renderWithPaginationCtx(base, baseProps); - } - - if (this.SortContext) { - base = this.renderWithSortCtx(base, baseProps); - } - - if (this.SearchContext) { - base = this.renderWithSearchCtx(base, baseProps); - } - - if (this.FilterContext) { - base = this.renderWithFilterCtx(base, baseProps); - } - - if (this.CellEditContext) { - base = this.renderWithCellEditCtx(base, baseProps); - } - - return _react2.default.createElement( - _bootstrap.BootstrapContext.Provider, - { value: { bootstrap4: bootstrap4 } }, - _react2.default.createElement( - this.DataContext.Provider, - _extends({}, baseProps, { - data: this.props.data - }), - _react2.default.createElement( - this.DataContext.Consumer, - null, - base - ) - ) - ); - } - }]); - - return BootstrapTableContainer; - }((0, _remoteResolver3.default)(_react.Component)); -}; - -exports.default = withContext; - -/***/ }), -/* 72 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = __webpack_require__(1); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint camelcase: 0 */ - - -exports.default = function () { - var DataContext = _react2.default.createContext(); - - var DataProvider = function (_Component) { - _inherits(DataProvider, _Component); - - function DataProvider() { - var _ref; - - var _temp, _this, _ret; - - _classCallCheck(this, DataProvider); - - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = DataProvider.__proto__ || Object.getPrototypeOf(DataProvider)).call.apply(_ref, [this].concat(args))), _this), _this.state = { data: _this.props.data }, _this.getData = function (filterProps, searchProps, sortProps, paginationProps) { - if (paginationProps) return paginationProps.data;else if (sortProps) return sortProps.data;else if (searchProps) return searchProps.data;else if (filterProps) return filterProps.data; - return _this.props.data; - }, _temp), _possibleConstructorReturn(_this, _ret); - } - - _createClass(DataProvider, [{ - key: 'UNSAFE_componentWillReceiveProps', - value: function UNSAFE_componentWillReceiveProps(nextProps) { - this.setState(function () { - return { data: nextProps.data }; - }); - } - }, { - key: 'render', - value: function render() { - return _react2.default.createElement( - DataContext.Provider, - { - value: { - data: this.state.data, - getData: this.getData - } - }, - this.props.children - ); - } - }]); - - return DataProvider; - }(_react.Component); - - DataProvider.propTypes = { - data: _propTypes2.default.array.isRequired, - children: _propTypes2.default.node.isRequired - }; - - return { - Provider: DataProvider, - Consumer: DataContext.Consumer - }; -}; - -/***/ }), -/* 73 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = __webpack_require__(1); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint react/prop-types: 0 */ -/* eslint react/prefer-stateless-function: 0 */ - - -exports.default = function () { - var ColumnManagementContext = _react2.default.createContext(); - - var ColumnManagementProvider = function (_React$Component) { - _inherits(ColumnManagementProvider, _React$Component); - - function ColumnManagementProvider() { - _classCallCheck(this, ColumnManagementProvider); - - return _possibleConstructorReturn(this, (ColumnManagementProvider.__proto__ || Object.getPrototypeOf(ColumnManagementProvider)).apply(this, arguments)); - } - - _createClass(ColumnManagementProvider, [{ - key: 'render', - value: function render() { - var toggleColumn = void 0; - var _props = this.props, - columns = _props.columns, - toggles = _props.toggles; - - if (toggles) { - toggleColumn = columns.filter(function (column) { - return toggles[column.dataField]; - }); - } else { - toggleColumn = columns.filter(function (column) { - return !column.hidden; - }); - } - return _react2.default.createElement( - ColumnManagementContext.Provider, - { value: { columns: toggleColumn } }, - this.props.children - ); - } - }]); - - return ColumnManagementProvider; - }(_react2.default.Component); - - ColumnManagementProvider.propTypes = { - columns: _propTypes2.default.array.isRequired, - toggles: _propTypes2.default.object - }; - ColumnManagementProvider.defaultProps = { - toggles: null - }; - - - return { - Provider: ColumnManagementProvider, - Consumer: ColumnManagementContext.Consumer - }; -}; - -/***/ }), -/* 74 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = __webpack_require__(1); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _const = __webpack_require__(3); - -var _const2 = _interopRequireDefault(_const); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint camelcase: 0 */ -/* eslint react/require-default-props: 0 */ - - -exports.default = function (dataOperator, isRemoteSort, handleSortChange) { - var SortContext = _react2.default.createContext(); - - var SortProvider = function (_React$Component) { - _inherits(SortProvider, _React$Component); - - function SortProvider(props) { - _classCallCheck(this, SortProvider); - - var _this = _possibleConstructorReturn(this, (SortProvider.__proto__ || Object.getPrototypeOf(SortProvider)).call(this, props)); - - _initialiseProps.call(_this); - - var sortOrder = void 0; - var sortColumn = void 0; - var defaultSorted = props.defaultSorted, - defaultSortDirection = props.defaultSortDirection, - sort = props.sort; - - - if (defaultSorted && defaultSorted.length > 0) { - sortOrder = defaultSorted[0].order || defaultSortDirection; - sortColumn = _this.initSort(defaultSorted[0].dataField, sortOrder); - } else if (sort && sort.dataField && sort.order) { - sortOrder = sort.order; - sortColumn = _this.initSort(sort.dataField, sortOrder); - } - _this.state = { sortOrder: sortOrder, sortColumn: sortColumn }; - return _this; - } - - _createClass(SortProvider, [{ - key: 'componentDidMount', - value: function componentDidMount() { - var _state = this.state, - sortOrder = _state.sortOrder, - sortColumn = _state.sortColumn; - - if (isRemoteSort() && sortOrder && sortColumn) { - handleSortChange(sortColumn.dataField, sortOrder); - } - } - }, { - key: 'UNSAFE_componentWillReceiveProps', - value: function UNSAFE_componentWillReceiveProps(nextProps) { - var sort = nextProps.sort, - columns = nextProps.columns; - - if (sort && sort.dataField && sort.order) { - this.setState({ - sortOrder: sort.order, - sortColumn: columns.find(function (col) { - return col.dataField === sort.dataField; - }) - }); - } - } - }, { - key: 'initSort', - value: function initSort(sortField, sortOrder) { - var sortColumn = void 0; - var columns = this.props.columns; - - var sortColumns = columns.filter(function (col) { - return col.dataField === sortField; - }); - if (sortColumns.length > 0) { - sortColumn = sortColumns[0]; - - if (sortColumn.onSort) { - sortColumn.onSort(sortField, sortOrder); - } - } - return sortColumn; - } - }, { - key: 'render', - value: function render() { - var data = this.props.data; - var sort = this.props.sort; - var _state2 = this.state, - sortOrder = _state2.sortOrder, - sortColumn = _state2.sortColumn; - - if (!isRemoteSort() && sortColumn) { - var sortFunc = sortColumn.sortFunc ? sortColumn.sortFunc : sort && sort.sortFunc; - data = dataOperator.sort(data, sortOrder, _extends({}, sortColumn, { sortFunc: sortFunc })); - } - - return _react2.default.createElement( - SortContext.Provider, - { - value: { - data: data, - sortOrder: sortOrder, - onSort: this.handleSort, - sortField: sortColumn ? sortColumn.dataField : null - } - }, - this.props.children - ); - } - }]); - - return SortProvider; - }(_react2.default.Component); - - SortProvider.propTypes = { - data: _propTypes2.default.array.isRequired, - columns: _propTypes2.default.array.isRequired, - children: _propTypes2.default.node.isRequired, - defaultSorted: _propTypes2.default.arrayOf(_propTypes2.default.shape({ - dataField: _propTypes2.default.string.isRequired, - order: _propTypes2.default.oneOf([_const2.default.SORT_DESC, _const2.default.SORT_ASC]).isRequired - })), - sort: _propTypes2.default.shape({ - dataField: _propTypes2.default.string, - order: _propTypes2.default.oneOf([_const2.default.SORT_DESC, _const2.default.SORT_ASC]), - sortFunc: _propTypes2.default.func - }), - defaultSortDirection: _propTypes2.default.oneOf([_const2.default.SORT_DESC, _const2.default.SORT_ASC]) - }; - - var _initialiseProps = function _initialiseProps() { - var _this2 = this; - - this.handleSort = function (column) { - var sortOrder = dataOperator.nextOrder(column, _this2.state, _this2.props.defaultSortDirection); - - if (column.onSort) { - column.onSort(column.dataField, sortOrder); - } - - if (isRemoteSort()) { - handleSortChange(column.dataField, sortOrder); - } - _this2.setState(function () { - return { - sortOrder: sortOrder, - sortColumn: column - }; - }); - }; - }; - - return { - Provider: SortProvider, - Consumer: SortContext.Consumer - }; -}; - -/***/ }), -/* 75 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _events = __webpack_require__(25); - -var _events2 = _interopRequireDefault(_events); - -var _utils = __webpack_require__(2); - -var _utils2 = _interopRequireDefault(_utils); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -exports.default = function (ExtendBase) { - return function (_ExtendBase) { - _inherits(RemoteResolver, _ExtendBase); - - function RemoteResolver(props) { - _classCallCheck(this, RemoteResolver); - - var _this = _possibleConstructorReturn(this, (RemoteResolver.__proto__ || Object.getPrototypeOf(RemoteResolver)).call(this, props)); - - _this.getNewestState = function () { - var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - var sortOrder = void 0; - var sortField = void 0; - var page = void 0; - var sizePerPage = void 0; - var searchText = void 0; - var filters = {}; - - if (_this.sortContext) { - sortOrder = _this.sortContext.state.sortOrder; - sortField = _this.sortContext.state.sortColumn ? _this.sortContext.state.sortColumn.dataField : null; - } - - if (_this.filterContext) { - filters = _this.filterContext.currFilters; - } - - if (_this.paginationContext) { - page = _this.paginationContext.currPage; - sizePerPage = _this.paginationContext.currSizePerPage; - } - - if (_this.searchContext) { - searchText = _this.props.search.searchText; - } - - return _extends({ - sortOrder: sortOrder, - sortField: sortField, - filters: filters, - page: page, - sizePerPage: sizePerPage, - searchText: searchText - }, state, { - data: _this.props.data - }); - }; - - _this.isRemoteSearch = function () { - var remote = _this.props.remote; - - return remote === true || _utils2.default.isObject(remote) && remote.search || _this.isRemotePagination(); - }; - - _this.isRemotePagination = function () { - var e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - var remote = _this.props.remote; - - e.result = remote === true || _utils2.default.isObject(remote) && remote.pagination; - return e.result; - }; - - _this.isRemoteFiltering = function () { - var remote = _this.props.remote; - - return remote === true || _utils2.default.isObject(remote) && remote.filter || _this.isRemotePagination(); - }; - - _this.isRemoteSort = function () { - var remote = _this.props.remote; - - return remote === true || _utils2.default.isObject(remote) && remote.sort || _this.isRemotePagination(); - }; - - _this.isRemoteCellEdit = function () { - var remote = _this.props.remote; - - return remote === true || _utils2.default.isObject(remote) && remote.cellEdit; - }; - - _this.handleRemotePageChange = function (page, sizePerPage) { - _this.props.onTableChange('pagination', _this.getNewestState({ page: page, sizePerPage: sizePerPage })); - }; - - _this.handleRemoteFilterChange = function (filters) { - var newState = { filters: filters }; - if (_this.isRemotePagination()) { - var options = _this.props.pagination.options || {}; - newState.page = _utils2.default.isDefined(options.pageStartIndex) ? options.pageStartIndex : 1; - } - _this.props.onTableChange('filter', _this.getNewestState(newState)); - }; - - _this.handleRemoteSortChange = function (sortField, sortOrder) { - _this.props.onTableChange('sort', _this.getNewestState({ sortField: sortField, sortOrder: sortOrder })); - }; - - _this.handleRemoteCellChange = function (rowId, dataField, newValue) { - var cellEdit = { rowId: rowId, dataField: dataField, newValue: newValue }; - _this.props.onTableChange('cellEdit', _this.getNewestState({ cellEdit: cellEdit })); - }; - - _this.handleRemoteSearchChange = function (searchText) { - _this.props.onTableChange('search', _this.getNewestState({ searchText: searchText })); - }; - - _this.remoteEmitter = new _events2.default(); - _this.remoteEmitter.on('paginationChange', _this.handleRemotePageChange); - _this.remoteEmitter.on('isRemotePagination', _this.isRemotePagination); - return _this; - } - - return RemoteResolver; - }(ExtendBase); -}; - -/***/ }) -/******/ ]); -}); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCBiMmQ1MTE5NGY5YjA0OTZiYjQ4NiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwge1wicm9vdFwiOlwiUmVhY3RcIixcImNvbW1vbmpzMlwiOlwicmVhY3RcIixcImNvbW1vbmpzXCI6XCJyZWFjdFwiLFwiYW1kXCI6XCJyZWFjdFwifSIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL3V0aWxzLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL2NvbnN0LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9zcmMvY29udGV4dHMvYm9vdHN0cmFwLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL3N0b3JlL3Jvd3MuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZS5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL2NlbGwtZXZlbnQtZGVsZWdhdGVyLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL2NvbnRleHRzL3NlbGVjdGlvbi1jb250ZXh0LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL3N0b3JlL29wZXJhdG9ycy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9jb250ZXh0cy9yb3ctZXhwYW5kLWNvbnRleHQuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9zcmMvc3RvcmUvc2VsZWN0aW9uLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL3Jvdy9yb3ctdGVtcGxhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9zcmMvcm93L3Jvdy1wdXJlLWNvbnRlbnQuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9zcmMvcm93L2V2ZW50LWRlbGVnYXRlci5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9yb3cvc2hvdWxkLXVwZGF0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9UcmFuc2l0aW9uLmpzIiwid2VicGFjazovLy9leHRlcm5hbCB7XCJyb290XCI6XCJSZWFjdERPTVwiLFwiY29tbW9uanMyXCI6XCJyZWFjdC1kb21cIixcImNvbW1vbmpzXCI6XCJyZWFjdC1kb21cIixcImFtZFwiOlwicmVhY3QtZG9tXCJ9Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL2NvbmZpZy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS91dGlscy9Qcm9wVHlwZXMuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9lc20vVHJhbnNpdGlvbkdyb3VwQ29udGV4dC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9UcmFuc2l0aW9uR3JvdXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2V2ZW50cy9ldmVudHMuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9ib290c3RyYXAtdGFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9zcmMvaGVhZGVyLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL2hlYWRlci1jZWxsLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL3NvcnQvc3ltYm9sLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL3NvcnQvY2FyZXQuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS91bmRlcnNjb3JlLmpzIiwid2VicGFjazovLy8od2VicGFjaykvYnVpbGRpbi9nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL21vZHVsZS5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9yb3ctc2VsZWN0aW9uL3NlbGVjdGlvbi1oZWFkZXItY2VsbC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9yb3ctZXhwYW5kL2V4cGFuZC1oZWFkZXItY2VsbC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9yb3ctc2VsZWN0aW9uL3NlbGVjdGlvbi1oZWFkZXItY2VsbC1jb25zdW1lci5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9zdG9yZS9leHBhbmQuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9zcmMvc3RvcmUvbXV0YXRlLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL3N0b3JlL3NvcnQuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9zcmMvc3RvcmUvdHlwZS5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9yb3ctZXhwYW5kL2V4cGFuZC1oZWFkZXItY2VsbC1jb25zdW1lci5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9maWx0ZXJzLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL2ZpbHRlcnMtY2VsbC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9jYXB0aW9uLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL2JvZHkuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9zcmMvcm93L3NpbXBsZS1yb3cuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9zcmMvY2VsbC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9yb3cvYWdncmVnYXRlLXJvdy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9yb3ctZXhwYW5kL2V4cGFuZC1jZWxsLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL3Jvdy1zZWxlY3Rpb24vc2VsZWN0aW9uLWNlbGwuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9zcmMvcm93L3Jvdy1zZWN0aW9uLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL3Jvdy1zZWxlY3Rpb24vcm93LWNvbnN1bWVyLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL3Jvdy1leHBhbmQvcm93LWNvbnN1bWVyLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL3Jvdy1leHBhbmQvZXhwYW5kLXJvdy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9DU1NUcmFuc2l0aW9uLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvbm9kZV9tb2R1bGVzL2RvbS1oZWxwZXJzL2NsYXNzL2FkZENsYXNzLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvbm9kZV9tb2R1bGVzL2RvbS1oZWxwZXJzL2NsYXNzL2hhc0NsYXNzLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvbm9kZV9tb2R1bGVzL2RvbS1oZWxwZXJzL2NsYXNzL3JlbW92ZUNsYXNzLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL1JlcGxhY2VUcmFuc2l0aW9uLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS91dGlscy9DaGlsZE1hcHBpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9zcmMvZm9vdGVyLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL2Zvb3Rlci1jZWxsLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL3Byb3BzLXJlc29sdmVyL2luZGV4LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL3Byb3BzLXJlc29sdmVyL2NvbHVtbi1yZXNvbHZlci5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9jb250ZXh0cy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9jb250ZXh0cy9kYXRhLWNvbnRleHQuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9zcmMvY29udGV4dHMvY29sdW1uLWNvbnRleHQuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9zcmMvY29udGV4dHMvc29ydC1jb250ZXh0LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL3Byb3BzLXJlc29sdmVyL3JlbW90ZS1yZXNvbHZlci5qcyJdLCJuYW1lcyI6WyJzcGxpdE5lc3RlZCIsInN0ciIsImpvaW4iLCJyZXBsYWNlIiwic3BsaXQiLCJjb250YWlucyIsImxpc3QiLCJ2YWx1ZSIsImluY2x1ZGVzIiwiaW5kZXhPZiIsImdldCIsInRhcmdldCIsImZpZWxkIiwiZGlyZWN0R2V0IiwidW5kZWZpbmVkIiwicGF0aEFycmF5IiwicmVzdWx0IiwicmVkdWNlIiwiY3VyciIsInBhdGgiLCJlIiwic2V0Iiwic2FmZSIsImxldmVsIiwiYSIsImIiLCJFcnJvciIsImxlbmd0aCIsImlzRW1wdHlPYmplY3QiLCJvYmoiLCJpc09iamVjdCIsImhhc093blByb3BlcnR5IiwiT2JqZWN0IiwicHJvdG90eXBlIiwia2V5cyIsImkiLCJjYWxsIiwiaXNEZWZpbmVkIiwic2xlZXAiLCJmbiIsIm1zIiwic2V0VGltZW91dCIsImRlYm91bmNlIiwiZnVuYyIsIndhaXQiLCJpbW1lZGlhdGUiLCJ0aW1lb3V0IiwibGF0ZXIiLCJhcHBseSIsImNhbGxOb3ciLCJjbGVhclRpbWVvdXQiLCJhc3NpZ24iLCJTT1JUX0FTQyIsIlNPUlRfREVTQyIsIlJPV19TRUxFQ1RfU0lOR0xFIiwiUk9XX1NFTEVDVF9NVUxUSVBMRSIsIlJPV19TRUxFQ1RfRElTQUJMRUQiLCJDSEVDS0JPWF9TVEFUVVNfQ0hFQ0tFRCIsIkNIRUNLQk9YX1NUQVRVU19JTkRFVEVSTUlOQVRFIiwiQ0hFQ0tCT1hfU1RBVFVTX1VOQ0hFQ0tFRCIsIklORElDQVRPUl9QT1NJVElPTl9MRUZUIiwiSU5ESUNBVE9SX1BPU0lUSU9OX1JJR0hUIiwiVFlQRV9TVFJJTkciLCJUWVBFX05VTUJFUiIsIlRZUEVfQk9PTEVBTiIsIlRZUEVfREFURSIsIkZJTFRFUlNfUE9TSVRJT05fSU5MSU5FIiwiRklMVEVSU19QT1NJVElPTl9UT1AiLCJGSUxURVJTX1BPU0lUSU9OX0JPVFRPTSIsIkJvb3RzdHJhcENvbnRleHQiLCJjcmVhdGVDb250ZXh0IiwiYm9vdHN0cmFwNCIsIm1hdGNoUm93Iiwia2V5RmllbGQiLCJpZCIsInJvdyIsImdldFJvd0J5Um93SWQiLCJkYXRhIiwiZmluZCIsImV2ZW50cyIsInByb3BzIiwiY3JlYXRlRGVmYXVsdEV2ZW50SGFuZGxlciIsImJpbmQiLCJjYiIsImNvbHVtbiIsImNvbHVtbkluZGV4IiwiaW5kZXgiLCJhdHRycyIsIm5ld0F0dHJzIiwiZm9yRWFjaCIsImF0dHIiLCJFeHRlbmRCYXNlIiwiU2VsZWN0aW9uQ29udGV4dCIsIlNlbGVjdGlvblByb3ZpZGVyIiwiaGFuZGxlUm93U2VsZWN0Iiwicm93S2V5IiwiY2hlY2tlZCIsInJvd0luZGV4Iiwic2VsZWN0Um93IiwibW9kZSIsIm9uU2VsZWN0IiwiY3VyclNlbGVjdGVkIiwic2VsZWN0ZWQiLCJwdXNoIiwiZmlsdGVyIiwiZm9yY2VVcGRhdGUiLCJoYW5kbGVBbGxSb3dzU2VsZWN0IiwiaXNVblNlbGVjdCIsIm9uU2VsZWN0QWxsIiwibm9uU2VsZWN0YWJsZSIsImNvbmNhdCIsInNlbGVjdGFibGVLZXlzIiwiZCIsInMiLCJnZXRTZWxlY3RlZFJvd3MiLCJBcnJheSIsImlzQXJyYXkiLCJuZXh0UHJvcHMiLCJhbGxSb3dzU2VsZWN0ZWQiLCJhbGxSb3dzTm90U2VsZWN0ZWQiLCJjaGVja2VkU3RhdHVzIiwib25Sb3dTZWxlY3QiLCJvbkFsbFJvd3NTZWxlY3QiLCJjaGlsZHJlbiIsIkNvbXBvbmVudCIsInByb3BUeXBlcyIsIm5vZGUiLCJpc1JlcXVpcmVkIiwiYXJyYXkiLCJzdHJpbmciLCJQcm92aWRlciIsIkNvbnN1bWVyIiwicm93cyIsInNlbGVjdGlvbiIsImV4cGFuZCIsIm11dGF0ZSIsInNvcnQiLCJ0eXBlIiwiUm93RXhwYW5kQ29udGV4dCIsIlJvd0V4cGFuZFByb3ZpZGVyIiwic3RhdGUiLCJleHBhbmRlZCIsImV4cGFuZFJvdyIsImlzQ2xvc2luZyIsIm9uQ2xvc2VkIiwiY2xvc2VkUm93Iiwic2V0U3RhdGUiLCJoYW5kbGVSb3dFeHBhbmQiLCJvbkV4cGFuZCIsIm9ubHlPbmVFeHBhbmRpbmciLCJub25FeHBhbmRhYmxlIiwiY3VyckV4cGFuZGVkIiwiaGFuZGxlQWxsUm93RXhwYW5kIiwiZXhwYW5kQWxsIiwib25FeHBhbmRBbGwiLCJleHBhbmRhYmxlS2V5cyIsImdldEV4cGFuZGVkUm93cyIsIm5leHRFeHBhbmRlZCIsInJvd0lkIiwiYWNjIiwiY3VyIiwiaXNBbnlFeHBhbmRzIiwib25Sb3dFeHBhbmQiLCJvbkFsbFJvd0V4cGFuZCIsImdldFNlbGVjdGlvblN1bW1hcnkiLCJyb3dLZXlzIiwibWFwIiwieCIsInNraXBzIiwidW5TZWxlY3RhYmxlS2V5cyIsImsiLCJSb3dUZW1wbGF0ZSIsInJlbmRlckNvbnRlbnQiLCJjZWxsRWwiLCJyZXN0IiwiaXNSZW5kZXJGdW5jdGlvbkNvbHVtbkluTGVmdCIsInBvc2l0aW9uIiwiY2hpbGRyZW5zIiwiaGlkZVNlbGVjdENvbHVtbiIsInNlbGVjdENvbHVtblBvc2l0aW9uIiwidW5zaGlmdCIsImNyZWF0ZUVsZW1lbnQiLCJrZXkiLCJzaG93RXhwYW5kQ29sdW1uIiwiZXhwYW5kQ29sdW1uUG9zaXRpb24iLCJvYmplY3QiLCJSb3dQdXJlQ29udGVudCIsInNob3VsZFVwZGF0ZSIsImNvbHVtbnMiLCJlZGl0YWJsZSIsImVkaXRpbmdSb3dJZHgiLCJlZGl0aW5nQ29sSWR4Iiwib25TdGFydCIsImNsaWNrVG9FZGl0IiwiZGJjbGlja1RvRWRpdCIsIkVkaXRpbmdDZWxsQ29tcG9uZW50IiwidGFiSW5kZXhTdGFydCIsInRhYkluZGV4IiwiZGF0YUZpZWxkIiwiY29udGVudCIsImNlbGxUaXRsZSIsImNlbGxTdHlsZSIsImNlbGxBdHRycyIsImlzRnVuY3Rpb24iLCJvcmlnaW5GbiIsImNlbGxDbGFzc2VzIiwiY2xhc3NlcyIsInN0eWxlIiwidGl0bGUiLCJhbGlnbiIsInRleHRBbGlnbiIsImNsYXNzTmFtZSIsImVkaXRhYmxlQ2VsbCIsImNsaWNrTnVtIiwiY3JlYXRlQ2xpY2tFdmVudEhhbmRsZXIiLCJzZWxlY3RhYmxlIiwiZXhwYW5kYWJsZSIsIkRFTEFZX0ZPUl9EQkNMSUNLIiwiY2xpY2tGbiIsImV4cGFuZEJ5Q29sdW1uT25seSIsImNsaWNrVG9FeHBhbmQiLCJjbGlja1RvU2VsZWN0IiwiaXNFcXVhbCIsInNob3VsZFVwZGF0ZUJ5Q2VsbEVkaXRpbmciLCJzaG91bGRVcGRhdGVkQnlOb3JtYWxQcm9wcyIsInNob3VsZFVwZGF0ZUNoaWxkIiwic2hvdWxkVXBkYXRlQnlDb2x1bW5zRm9yU2ltcGxlQ2hlY2siLCJCb290c3RyYXBUYWJsZSIsImdldERhdGEiLCJ2aXNpYmxlUm93cyIsInZhbGlkYXRlUHJvcHMiLCJvbkRhdGFTaXplQ2hhbmdlIiwicGFnaW5hdGlvbiIsImRhdGFTaXplIiwibG9hZGluZyIsIm92ZXJsYXkiLCJMb2FkaW5nT3ZlcmxheSIsInJlbmRlclRhYmxlIiwidGFiSW5kZXhDZWxsIiwic3RyaXBlZCIsImhvdmVyIiwiYm9yZGVyZWQiLCJjb25kZW5zZWQiLCJub0RhdGFJbmRpY2F0aW9uIiwiY2FwdGlvbiIsInJvd1N0eWxlIiwicm93Q2xhc3NlcyIsIndyYXBwZXJDbGFzc2VzIiwicm93RXZlbnRzIiwiY2VsbEVkaXQiLCJmaWx0ZXJQb3NpdGlvbiIsInRhYmxlV3JhcHBlckNsYXNzIiwidGFibGVDbGFzcyIsImhhc0ZpbHRlcnMiLCJzb21lIiwiY29sIiwiZmlsdGVyUmVuZGVyZXIiLCJoYXNGb290ZXIiLCJoYXMiLCJ0YWJsZUNhcHRpb24iLCJoZWFkZXJDbGFzc2VzIiwiaGVhZGVyV3JhcHBlckNsYXNzZXMiLCJzb3J0RmllbGQiLCJzb3J0T3JkZXIiLCJvblNvcnQiLCJzb3J0Q2FyZXQiLCJvbkZpbHRlciIsImN1cnJGaWx0ZXJzIiwib25FeHRlcm5hbEZpbHRlciIsImZpbHRlcnNDbGFzc2VzIiwiYm9keUNsYXNzZXMiLCJpc0VtcHR5IiwidmlzaWJsZUNvbHVtblNpemUiLCJmb290ZXJDbGFzc2VzIiwiYm9vbCIsInJlbW90ZSIsIm9uZU9mVHlwZSIsInNoYXBlIiwib25lT2YiLCJoaWRlU2VsZWN0QWxsIiwibm9uU2VsZWN0YWJsZVN0eWxlIiwibm9uU2VsZWN0YWJsZUNsYXNzZXMiLCJiZ0NvbG9yIiwic2VsZWN0aW9uUmVuZGVyZXIiLCJzZWxlY3Rpb25IZWFkZXJSZW5kZXJlciIsImhlYWRlckNvbHVtblN0eWxlIiwic2VsZWN0Q29sdW1uU3R5bGUiLCJyZW5kZXJlciIsImV4cGFuZENvbHVtblJlbmRlcmVyIiwiZXhwYW5kSGVhZGVyQ29sdW1uUmVuZGVyZXIiLCJwYXJlbnRDbGFzc05hbWUiLCJkZWZhdWx0U29ydGVkIiwiYXJyYXlPZiIsIm9yZGVyIiwic29ydEZ1bmMiLCJkZWZhdWx0U29ydERpcmVjdGlvbiIsIm9uVGFibGVDaGFuZ2UiLCJzZWFyY2giLCJzZWFyY2hUZXh0Iiwic2VhcmNoQ29udGV4dCIsInNldERlcGVuZGVuY3lNb2R1bGVzIiwiZGVmYXVsdFByb3BzIiwibm9uRWRpdGFibGVSb3dzIiwiSGVhZGVyIiwiZ2xvYmFsU29ydENhcmV0IiwiU2VsZWN0aW9uSGVhZGVyQ2VsbENvbXAiLCJFeHBhbnNpb25IZWFkZXJDZWxsQ29tcCIsImN1cnJTb3J0IiwiaXNMYXN0U29ydGluZyIsIkhlYWRlckNlbGwiLCJzb3J0aW5nIiwidGV4dCIsImhlYWRlclRpdGxlIiwiaGVhZGVyQWxpZ24iLCJoZWFkZXJGb3JtYXR0ZXIiLCJoZWFkZXJFdmVudHMiLCJoZWFkZXJTdHlsZSIsImhlYWRlckF0dHJzIiwiaGVhZGVyU29ydGluZ0NsYXNzZXMiLCJoZWFkZXJTb3J0aW5nU3R5bGUiLCJzb3J0Q2FyZXRmdW5jIiwiZGVsZWdhdGVFdmVudHMiLCJkZWxlZ2F0ZSIsImN1c3RvbUF0dHJzIiwic29ydFN5bWJvbCIsImZpbHRlckVsbSIsImN1c3RvbUNsaWNrIiwib25DbGljayIsIm9uS2V5VXAiLCJvbkN1c3RvbUZpbHRlciIsInNvcnRFbGVtZW50IiwiZmlsdGVyRWxlbWVudCIsImlzRHVtbXlGaWVsZCIsImhpZGRlbiIsImZvcm1hdHRlciIsImZvcm1hdEV4dHJhRGF0YSIsImFueSIsImVkaXRvciIsImVkaXRDZWxsU3R5bGUiLCJlZGl0Q2VsbENsYXNzZXMiLCJlZGl0b3JTdHlsZSIsImVkaXRvckNsYXNzZXMiLCJlZGl0b3JSZW5kZXJlciIsInZhbGlkYXRvciIsImZpbHRlclZhbHVlIiwic2VhcmNoYWJsZSIsIm51bWJlciIsIlNvcnRTeW1ib2wiLCJTb3J0Q2FyZXQiLCJvcmRlckNsYXNzIiwiZHJvcHVwIiwiQ2hlY2tCb3giLCJpbmRldGVybWluYXRlIiwiaW5wdXQiLCJTZWxlY3Rpb25IZWFkZXJDZWxsIiwiaGFuZGxlQ2hlY2tCb3hDbGljayIsIkV4cGFuc2lvbkhlYWRlckNlbGwiLCJlZGl0Q2VsbCIsIm5ld1ZhbHVlIiwiY29tcGFyYXRvciIsImxvY2FsZUNvbXBhcmUiLCJzb3J0VmFsdWUiLCJfZGF0YSIsInZhbHVlQSIsInZhbHVlQiIsIm5leHRPcmRlciIsImN1cnJlbnRTb3J0Q29sdW1uIiwic29ydENvbHVtbiIsImRlZmF1bHRPcmRlciIsInR5cGVDb252ZXJ0IiwiU3RyaW5nIiwiTnVtYmVyIiwiRGF0ZSIsIkZpbHRlcnMiLCJmaWx0ZXJDb2x1bW5zIiwic2hvd0ZpbHRlcnNSb3ciLCJkaXNwbGF5IiwiRmlsdGVyc0NlbGwiLCJDYXB0aW9uIiwiY2FwdGlvblNpZGUiLCJCb2R5IiwiRWRpdGluZ0NlbGwiLCJjcmVhdGVFZGl0aW5nQ2VsbCIsIm9wdGlvbnMiLCJvblN0YXJ0RWRpdCIsIlJvd0NvbXBvbmVudCIsInNlbGVjdFJvd0VuYWJsZWQiLCJleHBhbmRSb3dFbmFibGVkIiwid2l0aFJvd0xldmVsQ2VsbEVkaXQiLCJpbmRpY2F0aW9uIiwiYWRkaXRpb25hbFJvd1Byb3BzIiwiYmFzZVJvd1Byb3BzIiwiU2ltcGxlUm93Iiwic2hvdWxkVXBkYXRlUm93Q29udGVudCIsInNob3VsZFJvd0NvbnRlbnRVcGRhdGUiLCJzaG91bGRVcGRhdGVkQnlTZWxmUHJvcHMiLCJ0ckF0dHJzIiwiQ2VsbCIsImNyZWF0ZUhhbmRsZUVkaXRpbmdDZWxsIiwib3JpZ2luRnVuYyIsIm9uRG91YmxlQ2xpY2siLCJSb3dBZ2dyZWdhdG9yIiwic2VsZWN0Q2VsbCIsImV4cGFuZENlbGwiLCJFeHBhbmRDZWxsIiwiaGFuZGxlQ2xpY2siLCJzdG9wUHJvcGFnYXRpb24iLCJTZWxlY3Rpb25DZWxsIiwiZGlzYWJsZWQiLCJpbnB1dFR5cGUiLCJSb3dTZWN0aW9uIiwiY29sU3BhbiIsInJlbmRlcldpdGhTZWxlY3Rpb24iLCJub3RTZWxlY3RhYmxlIiwic2VsZWN0ZWRTdHlsZSIsInNlbGVjdGVkQ2xhc3NlcyIsImJhY2tncm91bmRDb2xvciIsIm5vdFNlbGVjdGFibGVTdHlsZSIsIm5vdFNlbGVjdGFibGVDbGFzc2VzIiwid2l0aENvbnN1bWVyIiwiZGlzcGxheU5hbWUiLCJyZW5kZXJXaXRoRXhwYW5zaW9uIiwiRXhwYW5kUm93IiwiRm9vdGVyIiwiZm9vdGVyIiwiY29sdW1uRGF0YSIsInBsdWNrIiwiRm9vdGVyQ2VsbCIsImZvb3RlclRpdGxlIiwiZm9vdGVyQWxpZ24iLCJmb290ZXJGb3JtYXR0ZXIiLCJmb290ZXJFdmVudHMiLCJmb290ZXJTdHlsZSIsImZvb3RlckF0dHJzIiwiaXNTdHJpbmciLCJoaWRkZW5Sb3dzIiwiaW5jbHVkZVNlbGVjdENvbHVtbiIsImNvbHVtbkxlbiIsImNvbHVtblRvZ2dsZSIsInRvZ2dsZXMiLCJuYW1lIiwiYyIsIndpdGhDb250ZXh0IiwiRGF0YUNvbnRleHQiLCJyZWdpc3RlckV4cG9zZWRBUEkiLCJleHBvc2VkQVBJRW1pdHRlciIsIm9uIiwicGF5bG9hZCIsInRhYmxlIiwic2VsZWN0aW9uQ29udGV4dCIsImdldFNlbGVjdGVkIiwiZ2V0U2VhcmNoZWQiLCJmaWx0ZXJDb250ZXh0IiwiZ2V0RmlsdGVyZWQiLCJTb3J0Q29udGV4dCIsImlzUmVtb3RlU29ydCIsImhhbmRsZVJlbW90ZVNvcnRDaGFuZ2UiLCJDb2x1bW5NYW5hZ2VtZW50Q29udGV4dCIsIkNlbGxFZGl0Q29udGV4dCIsImlzUmVtb3RlQ2VsbEVkaXQiLCJoYW5kbGVSZW1vdGVDZWxsQ2hhbmdlIiwiRmlsdGVyQ29udGV4dCIsImlzUmVtb3RlRmlsdGVyaW5nIiwiaGFuZGxlUmVtb3RlRmlsdGVyQ2hhbmdlIiwiUGFnaW5hdGlvbkNvbnRleHQiLCJTZWFyY2hDb250ZXh0IiwiaXNSZW1vdGVTZWFyY2giLCJoYW5kbGVSZW1vdGVTZWFyY2hDaGFuZ2UiLCJzZXRQYWdpbmF0aW9uUmVtb3RlRW1pdHRlciIsInJlbW90ZUVtaXR0ZXIiLCJpc1JlbW90ZVBhZ2luYXRpb24iLCJoYW5kbGVSZW1vdGVQYWdlQ2hhbmdlIiwicm9vdFByb3BzIiwiZmlsdGVyUHJvcHMiLCJzZWFyY2hQcm9wcyIsInNvcnRQcm9wcyIsInBhZ2luYXRpb25Qcm9wcyIsImNvbHVtblRvZ2dsZVByb3BzIiwibiIsImJhc2UiLCJiYXNlUHJvcHMiLCJyb3dFeHBhbmRDb250ZXh0IiwicGFnaW5hdGlvbkNvbnRleHQiLCJzb3J0Q29udGV4dCIsImRhdGFDaGFuZ2VMaXN0ZW5lciIsImNlbGxFZGl0Q29udGV4dCIsInJlbmRlckJhc2UiLCJyZW5kZXJXaXRoQ29sdW1uTWFuYWdlbWVudEN0eCIsInJlbmRlcldpdGhTZWxlY3Rpb25DdHgiLCJyZW5kZXJXaXRoUm93RXhwYW5kQ3R4IiwicmVuZGVyV2l0aFBhZ2luYXRpb25DdHgiLCJyZW5kZXJXaXRoU29ydEN0eCIsInJlbmRlcldpdGhTZWFyY2hDdHgiLCJyZW5kZXJXaXRoRmlsdGVyQ3R4IiwicmVuZGVyV2l0aENlbGxFZGl0Q3R4IiwiRGF0YVByb3ZpZGVyIiwiQ29sdW1uTWFuYWdlbWVudFByb3ZpZGVyIiwidG9nZ2xlQ29sdW1uIiwiZGF0YU9wZXJhdG9yIiwiaGFuZGxlU29ydENoYW5nZSIsIlNvcnRQcm92aWRlciIsImluaXRTb3J0Iiwic29ydENvbHVtbnMiLCJoYW5kbGVTb3J0IiwiZ2V0TmV3ZXN0U3RhdGUiLCJwYWdlIiwic2l6ZVBlclBhZ2UiLCJmaWx0ZXJzIiwiY3VyclBhZ2UiLCJjdXJyU2l6ZVBlclBhZ2UiLCJuZXdTdGF0ZSIsInBhZ2VTdGFydEluZGV4Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsTztBQ1ZBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNB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Q0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw0QkFBNEI7O0FBRTVCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxvRUFBb0U7QUFDcEU7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1AsS0FBSztBQUNMOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxzQ0FBc0M7O0FBRXRDO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxpS0FBOEU7OztBQUc5RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixjQUFjLFVBQVUsSUFBSTtBQUNqRCxRQUFRO0FBQ1IsaUNBQWlDLGFBQWEsTUFBTSxFQUFFO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx3QkFBd0I7QUFDeEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxVQUFVO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBGQUEwRixhQUFhO0FBQ3ZHO0FBQ0E7O0FBRUE7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFFOzs7Ozs7QUNua0JBLGdEOzs7Ozs7O0FDQUE7QUFDQTtBQUNBLEc7Ozs7Ozs7Ozs7O0FDRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLFc7Ozs7Ozs7OztBQ2pCRDtBQUNBLDRIOzs7Ozs7Ozs7Ozs7Ozs7OztBQ0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ3VFOztBQUV2RTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSw0UUFBc0c7OztBQUd0RztBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxSEFBa0M7O0FBRWxDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLEtBQUs7QUFDdEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBLDBFOzs7Ozs7QUM5TEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxHQUFHO0FBQ0gsb0JBQW9CLFNBQVM7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7O0FDN1NBOzs7O0FBQ0E7Ozs7OztrQkFFZSxpRDs7Ozs7Ozs7Ozs7Ozs7O0FDQWY7Ozs7QUFDQTs7OztBQUNBOzs7O0FBRUE7Ozs7QUFDQTs7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QTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksOEJBQThCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzREFBc0Q7QUFDdEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEMsMEJBQTBCO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxxQkFBcUIsY0FBYztBQUNuQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLFlBQVk7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLGVBQWU7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxxQkFBcUIsZUFBZTtBQUNwQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLFlBQVk7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsZ0JBQWdCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLFlBQVk7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsWUFBWTtBQUNyRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLGdCQUFnQjtBQUN6QztBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsT0FBTztBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QyxZQUFZO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsWUFBWTtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EscURBQXFEO0FBQ3JEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsWUFBWTtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2RUFBNkU7QUFDN0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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SzJLLGFBQUwsR0FBcUIsc0JBQXJCO0FBQ0EsWUFBS0EsYUFBTCxDQUFtQnZCLEVBQW5CLENBQXNCLGtCQUF0QixFQUEwQyxNQUFLeUIsc0JBQS9DO0FBQ0EsWUFBS0YsYUFBTCxDQUFtQnZCLEVBQW5CLENBQXNCLG9CQUF0QixFQUE0QyxNQUFLd0Isa0JBQWpEO0FBSmlCO0FBS2xCOztBQVBVO0FBQUEsSUFDZ0IzWCxVQURoQjtBQUFBLEMiLCJmaWxlIjoicmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9kaXN0L3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZXh0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwicmVhY3RcIiksIHJlcXVpcmUoXCJyZWFjdC1kb21cIikpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW1wicmVhY3RcIiwgXCJyZWFjdC1kb21cIl0sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wiUmVhY3RCb290c3RyYXBUYWJsZTJcIl0gPSBmYWN0b3J5KHJlcXVpcmUoXCJyZWFjdFwiKSwgcmVxdWlyZShcInJlYWN0LWRvbVwiKSk7XG5cdGVsc2Vcblx0XHRyb290W1wiUmVhY3RCb290c3RyYXBUYWJsZTJcIl0gPSBmYWN0b3J5KHJvb3RbXCJSZWFjdFwiXSwgcm9vdFtcIlJlYWN0RE9NXCJdKTtcbn0pKHRoaXMsIGZ1bmN0aW9uKF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfMF9fLCBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFXzIwX18pIHtcbnJldHVybiBcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XG4gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbiBcdFx0XHRcdGdldDogZ2V0dGVyXG4gXHRcdFx0fSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMjYpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2svYm9vdHN0cmFwIGIyZDUxMTk0ZjliMDQ5NmJiNDg2IiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFXzBfXztcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyBleHRlcm5hbCB7XCJyb290XCI6XCJSZWFjdFwiLFwiY29tbW9uanMyXCI6XCJyZWFjdFwiLFwiY29tbW9uanNcIjpcInJlYWN0XCIsXCJhbWRcIjpcInJlYWN0XCJ9XG4vLyBtb2R1bGUgaWQgPSAwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgUmVhY3RJcyA9IHJlcXVpcmUoJ3JlYWN0LWlzJyk7XG5cbiAgLy8gQnkgZXhwbGljaXRseSB1c2luZyBgcHJvcC10eXBlc2AgeW91IGFyZSBvcHRpbmcgaW50byBuZXcgZGV2ZWxvcG1lbnQgYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgdmFyIHRocm93T25EaXJlY3RBY2Nlc3MgPSB0cnVlO1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMnKShSZWFjdElzLmlzRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcyk7XG59IGVsc2Uge1xuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBwcm9kdWN0aW9uIGJlaGF2aW9yLlxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMnKSgpO1xufVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSAxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIiwiLyogZXNsaW50IG5vLWVtcHR5OiAwICovXG4vKiBlc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246IDAgKi9cbi8qIGVzbGludCBwcmVmZXItcmVzdC1wYXJhbXM6IDAgKi9cbmltcG9ydCBfIGZyb20gJ3VuZGVyc2NvcmUnO1xuXG5mdW5jdGlvbiBzcGxpdE5lc3RlZChzdHIpIHtcbiAgcmV0dXJuIFtzdHJdXG4gICAgLmpvaW4oJy4nKVxuICAgIC5yZXBsYWNlKC9cXFsvZywgJy4nKVxuICAgIC5yZXBsYWNlKC9cXF0vZywgJycpXG4gICAgLnNwbGl0KCcuJyk7XG59XG5cbmZ1bmN0aW9uIGNvbnRhaW5zKGxpc3QsIHZhbHVlKSB7XG4gIGlmIChfLmluY2x1ZGVzKSB7XG4gICAgcmV0dXJuIF8uaW5jbHVkZXMobGlzdCwgdmFsdWUpO1xuICB9XG5cbiAgcmV0dXJuIGxpc3QuaW5kZXhPZih2YWx1ZSkgPiAtMTtcbn1cblxuZnVuY3Rpb24gZ2V0KHRhcmdldCwgZmllbGQpIHtcbiAgY29uc3QgZGlyZWN0R2V0ID0gdGFyZ2V0W2ZpZWxkXTtcbiAgaWYgKGRpcmVjdEdldCAhPT0gdW5kZWZpbmVkICYmIGRpcmVjdEdldCAhPT0gbnVsbCkge1xuICAgIHJldHVybiBkaXJlY3RHZXQ7XG4gIH1cblxuICBjb25zdCBwYXRoQXJyYXkgPSBzcGxpdE5lc3RlZChmaWVsZCk7XG4gIGxldCByZXN1bHQ7XG4gIHRyeSB7XG4gICAgcmVzdWx0ID0gcGF0aEFycmF5LnJlZHVjZSgoY3VyciwgcGF0aCkgPT4gY3VycltwYXRoXSwgdGFyZ2V0KTtcbiAgfSBjYXRjaCAoZSkge31cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gc2V0KHRhcmdldCwgZmllbGQsIHZhbHVlLCBzYWZlID0gZmFsc2UpIHtcbiAgY29uc3QgcGF0aEFycmF5ID0gc3BsaXROZXN0ZWQoZmllbGQpO1xuICBsZXQgbGV2ZWwgPSAwO1xuICBwYXRoQXJyYXkucmVkdWNlKChhLCBiKSA9PiB7XG4gICAgbGV2ZWwgKz0gMTtcbiAgICBpZiAodHlwZW9mIGFbYl0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAoIXNhZmUpIHRocm93IG5ldyBFcnJvcihgJHthfS4ke2J9IGlzIHVuZGVmaW5lZGApO1xuICAgICAgYVtiXSA9IHt9O1xuICAgICAgcmV0dXJuIGFbYl07XG4gICAgfVxuXG4gICAgaWYgKGxldmVsID09PSBwYXRoQXJyYXkubGVuZ3RoKSB7XG4gICAgICBhW2JdID0gdmFsdWU7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBhW2JdO1xuICB9LCB0YXJnZXQpO1xufVxuXG5mdW5jdGlvbiBpc0VtcHR5T2JqZWN0KG9iaikge1xuICBpZiAoIV8uaXNPYmplY3Qob2JqKSkgcmV0dXJuIGZhbHNlO1xuXG4gIGNvbnN0IGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXlzW2ldKSkgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGlzRGVmaW5lZCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJyAmJiB2YWx1ZSAhPT0gbnVsbDtcbn1cblxuZnVuY3Rpb24gc2xlZXAoZm4sIG1zKSB7XG4gIHJldHVybiBzZXRUaW1lb3V0KCgpID0+IGZuKCksIG1zKTtcbn1cblxuZnVuY3Rpb24gZGVib3VuY2UoZnVuYywgd2FpdCwgaW1tZWRpYXRlKSB7XG4gIGxldCB0aW1lb3V0O1xuXG4gIHJldHVybiAoKSA9PiB7XG4gICAgY29uc3QgbGF0ZXIgPSAoKSA9PiB7XG4gICAgICB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaWYgKCFpbW1lZGlhdGUpIHtcbiAgICAgICAgZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBjYWxsTm93ID0gaW1tZWRpYXRlICYmICF0aW1lb3V0O1xuXG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0IHx8IDApO1xuXG4gICAgaWYgKGNhbGxOb3cpIHtcbiAgICAgIGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IE9iamVjdC5hc3NpZ24oXywge1xuICBnZXQsXG4gIHNldCxcbiAgaXNEZWZpbmVkLFxuICBpc0VtcHR5T2JqZWN0LFxuICBzbGVlcCxcbiAgZGVib3VuY2UsXG4gIGNvbnRhaW5zXG59KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL3V0aWxzLmpzIiwiZXhwb3J0IGRlZmF1bHQge1xuICBTT1JUX0FTQzogJ2FzYycsXG4gIFNPUlRfREVTQzogJ2Rlc2MnLFxuICBST1dfU0VMRUNUX1NJTkdMRTogJ3JhZGlvJyxcbiAgUk9XX1NFTEVDVF9NVUxUSVBMRTogJ2NoZWNrYm94JyxcbiAgUk9XX1NFTEVDVF9ESVNBQkxFRDogJ1JPV19TRUxFQ1RfRElTQUJMRUQnLFxuICBDSEVDS0JPWF9TVEFUVVNfQ0hFQ0tFRDogJ2NoZWNrZWQnLFxuICBDSEVDS0JPWF9TVEFUVVNfSU5ERVRFUk1JTkFURTogJ2luZGV0ZXJtaW5hdGUnLFxuICBDSEVDS0JPWF9TVEFUVVNfVU5DSEVDS0VEOiAndW5jaGVja2VkJyxcbiAgSU5ESUNBVE9SX1BPU0lUSU9OX0xFRlQ6ICdsZWZ0JyxcbiAgSU5ESUNBVE9SX1BPU0lUSU9OX1JJR0hUOiAncmlnaHQnLFxuICBUWVBFX1NUUklORzogJ3N0cmluZycsXG4gIFRZUEVfTlVNQkVSOiAnbnVtYmVyJyxcbiAgVFlQRV9CT09MRUFOOiAnYm9vbCcsXG4gIFRZUEVfREFURTogJ2RhdGUnLFxuICBGSUxURVJTX1BPU0lUSU9OX0lOTElORTogJ2lubGluZScsXG4gIEZJTFRFUlNfUE9TSVRJT05fVE9QOiAndG9wJyxcbiAgRklMVEVSU19QT1NJVElPTl9CT1RUT006ICdib3R0b20nXG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9zcmMvY29uc3QuanMiLCIvKiFcbiAgQ29weXJpZ2h0IChjKSAyMDE2IEplZCBXYXRzb24uXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAoTUlUKSwgc2VlXG4gIGh0dHA6Ly9qZWR3YXRzb24uZ2l0aHViLmlvL2NsYXNzbmFtZXNcbiovXG4vKiBnbG9iYWwgZGVmaW5lICovXG5cbihmdW5jdGlvbiAoKSB7XG5cdCd1c2Ugc3RyaWN0JztcblxuXHR2YXIgaGFzT3duID0ge30uaGFzT3duUHJvcGVydHk7XG5cblx0ZnVuY3Rpb24gY2xhc3NOYW1lcyAoKSB7XG5cdFx0dmFyIGNsYXNzZXMgPSBbXTtcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgYXJnID0gYXJndW1lbnRzW2ldO1xuXHRcdFx0aWYgKCFhcmcpIGNvbnRpbnVlO1xuXG5cdFx0XHR2YXIgYXJnVHlwZSA9IHR5cGVvZiBhcmc7XG5cblx0XHRcdGlmIChhcmdUeXBlID09PSAnc3RyaW5nJyB8fCBhcmdUeXBlID09PSAnbnVtYmVyJykge1xuXHRcdFx0XHRjbGFzc2VzLnB1c2goYXJnKTtcblx0XHRcdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG5cdFx0XHRcdGNsYXNzZXMucHVzaChjbGFzc05hbWVzLmFwcGx5KG51bGwsIGFyZykpO1xuXHRcdFx0fSBlbHNlIGlmIChhcmdUeXBlID09PSAnb2JqZWN0Jykge1xuXHRcdFx0XHRmb3IgKHZhciBrZXkgaW4gYXJnKSB7XG5cdFx0XHRcdFx0aWYgKGhhc093bi5jYWxsKGFyZywga2V5KSAmJiBhcmdba2V5XSkge1xuXHRcdFx0XHRcdFx0Y2xhc3Nlcy5wdXNoKGtleSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNsYXNzZXMuam9pbignICcpO1xuXHR9XG5cblx0aWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBjbGFzc05hbWVzO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGRlZmluZS5hbWQgPT09ICdvYmplY3QnICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyByZWdpc3RlciBhcyAnY2xhc3NuYW1lcycsIGNvbnNpc3RlbnQgd2l0aCBucG0gcGFja2FnZSBuYW1lXG5cdFx0ZGVmaW5lKCdjbGFzc25hbWVzJywgW10sIGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiBjbGFzc05hbWVzO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHdpbmRvdy5jbGFzc05hbWVzID0gY2xhc3NOYW1lcztcblx0fVxufSgpKTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9pbmRleC5qc1xuLy8gbW9kdWxlIGlkID0gNFxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCBjb25zdCBCb290c3RyYXBDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dCh7XG4gIGJvb3RzdHJhcDQ6IGZhbHNlXG59KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL2NvbnRleHRzL2Jvb3RzdHJhcC5qcyIsImltcG9ydCBfIGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IG1hdGNoUm93ID0gKGtleUZpZWxkLCBpZCkgPT4gcm93ID0+IF8uZ2V0KHJvdywga2V5RmllbGQpID09PSBpZDtcblxuZXhwb3J0IGNvbnN0IGdldFJvd0J5Um93SWQgPSAoZGF0YSwga2V5RmllbGQsIGlkKSA9PiBkYXRhLmZpbmQobWF0Y2hSb3coa2V5RmllbGQsIGlkKSk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9zdG9yZS9yb3dzLmpzIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkge1xuICBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTtcbiAgdmFyIHRhcmdldCA9IHt9O1xuICB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG4gIHZhciBrZXksIGk7XG5cbiAgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBrZXkgPSBzb3VyY2VLZXlzW2ldO1xuICAgIGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7XG4gICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlLmpzXG4vLyBtb2R1bGUgaWQgPSA3XG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2luaGVyaXRzTG9vc2Uoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzLnByb3RvdHlwZSk7XG4gIHN1YkNsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IHN1YkNsYXNzO1xuICBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzO1xufVxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZS5qc1xuLy8gbW9kdWxlIGlkID0gOFxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSIsImltcG9ydCBfIGZyb20gJy4vdXRpbHMnO1xuXG5jb25zdCBldmVudHMgPSBbXG4gICdvbkNsaWNrJyxcbiAgJ29uRG91YmxlQ2xpY2snLFxuICAnb25Nb3VzZUVudGVyJyxcbiAgJ29uTW91c2VMZWF2ZScsXG4gICdvbkNvbnRleHRNZW51JyxcbiAgJ29uQXV4Q2xpY2snXG5dO1xuXG5leHBvcnQgZGVmYXVsdCBFeHRlbmRCYXNlID0+XG4gIGNsYXNzIENlbGxFdmVudERlbGVnYXRlciBleHRlbmRzIEV4dGVuZEJhc2Uge1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICBzdXBlcihwcm9wcyk7XG4gICAgICB0aGlzLmNyZWF0ZURlZmF1bHRFdmVudEhhbmRsZXIgPSB0aGlzLmNyZWF0ZURlZmF1bHRFdmVudEhhbmRsZXIuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBjcmVhdGVEZWZhdWx0RXZlbnRIYW5kbGVyKGNiKSB7XG4gICAgICByZXR1cm4gKGUpID0+IHtcbiAgICAgICAgY29uc3QgeyBjb2x1bW4sIGNvbHVtbkluZGV4LCBpbmRleCB9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgY2IoZSwgY29sdW1uLCB0eXBlb2YgY29sdW1uSW5kZXggIT09ICd1bmRlZmluZWQnID8gY29sdW1uSW5kZXggOiBpbmRleCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIGRlbGVnYXRlKGF0dHJzID0ge30pIHtcbiAgICAgIGNvbnN0IG5ld0F0dHJzID0geyAuLi5hdHRycyB9O1xuICAgICAgT2JqZWN0LmtleXMoYXR0cnMpLmZvckVhY2goKGF0dHIpID0+IHtcbiAgICAgICAgaWYgKF8uY29udGFpbnMoZXZlbnRzLCBhdHRyKSkge1xuICAgICAgICAgIG5ld0F0dHJzW2F0dHJdID0gdGhpcy5jcmVhdGVEZWZhdWx0RXZlbnRIYW5kbGVyKGF0dHJzW2F0dHJdKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3QXR0cnM7XG4gICAgfVxuICB9O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9zcmMvY2VsbC1ldmVudC1kZWxlZ2F0ZXIuanMiLCIvKiBlc2xpbnQgY2FtZWxjYXNlOiAwICovXG4vKiBlc2xpbnQgcmVhY3QvcHJvcC10eXBlczogMCAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgQ29uc3QgZnJvbSAnLi4vY29uc3QnO1xuaW1wb3J0IF8gZnJvbSAnLi4vdXRpbHMnO1xuXG5pbXBvcnQgZGF0YU9wZXJhdG9yIGZyb20gJy4uL3N0b3JlL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBnZXRTZWxlY3Rpb25TdW1tYXJ5IH0gZnJvbSAnLi4vc3RvcmUvc2VsZWN0aW9uJztcblxuY29uc3QgU2VsZWN0aW9uQ29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQoKTtcbmNsYXNzIFNlbGVjdGlvblByb3ZpZGVyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcbiAgICBkYXRhOiBQcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZCxcbiAgICBrZXlGaWVsZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkXG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnNlbGVjdGVkID0gcHJvcHMuc2VsZWN0Um93LnNlbGVjdGVkIHx8IFtdO1xuICB9XG5cbiAgLy8gZXhwb3NlZCBBUElcbiAgZ2V0U2VsZWN0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWQ7XG4gIH1cblxuICBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpIHtcbiAgICBpZiAobmV4dFByb3BzLnNlbGVjdFJvdykge1xuICAgICAgdGhpcy5zZWxlY3RlZCA9IG5leHRQcm9wcy5zZWxlY3RSb3cuc2VsZWN0ZWQgfHwgdGhpcy5zZWxlY3RlZDtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVSb3dTZWxlY3QgPSAocm93S2V5LCBjaGVja2VkLCByb3dJbmRleCwgZSkgPT4ge1xuICAgIGNvbnN0IHsgZGF0YSwga2V5RmllbGQsIHNlbGVjdFJvdzogeyBtb2RlLCBvblNlbGVjdCB9IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgUk9XX1NFTEVDVF9TSU5HTEUgfSA9IENvbnN0O1xuXG4gICAgbGV0IGN1cnJTZWxlY3RlZCA9IFsuLi50aGlzLnNlbGVjdGVkXTtcblxuICAgIGxldCByZXN1bHQgPSB0cnVlO1xuICAgIGlmIChvblNlbGVjdCkge1xuICAgICAgY29uc3Qgcm93ID0gZGF0YU9wZXJhdG9yLmdldFJvd0J5Um93SWQoZGF0YSwga2V5RmllbGQsIHJvd0tleSk7XG4gICAgICByZXN1bHQgPSBvblNlbGVjdChyb3csIGNoZWNrZWQsIHJvd0luZGV4LCBlKTtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0ID09PSB0cnVlIHx8IHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAobW9kZSA9PT0gUk9XX1NFTEVDVF9TSU5HTEUpIHsgLy8gd2hlbiBzZWxlY3QgbW9kZSBpcyByYWRpb1xuICAgICAgICBjdXJyU2VsZWN0ZWQgPSBbcm93S2V5XTtcbiAgICAgIH0gZWxzZSBpZiAoY2hlY2tlZCkgeyAvLyB3aGVuIHNlbGVjdCBtb2RlIGlzIGNoZWNrYm94XG4gICAgICAgIGN1cnJTZWxlY3RlZC5wdXNoKHJvd0tleSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjdXJyU2VsZWN0ZWQgPSBjdXJyU2VsZWN0ZWQuZmlsdGVyKHZhbHVlID0+IHZhbHVlICE9PSByb3dLZXkpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnNlbGVjdGVkID0gY3VyclNlbGVjdGVkO1xuICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcbiAgfVxuXG4gIGhhbmRsZUFsbFJvd3NTZWxlY3QgPSAoZSwgaXNVblNlbGVjdCkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGRhdGEsXG4gICAgICBrZXlGaWVsZCxcbiAgICAgIHNlbGVjdFJvdzoge1xuICAgICAgICBvblNlbGVjdEFsbCxcbiAgICAgICAgbm9uU2VsZWN0YWJsZVxuICAgICAgfVxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgc2VsZWN0ZWQgfSA9IHRoaXM7XG5cbiAgICBsZXQgY3VyclNlbGVjdGVkO1xuXG4gICAgaWYgKCFpc1VuU2VsZWN0KSB7XG4gICAgICBjdXJyU2VsZWN0ZWQgPSBzZWxlY3RlZC5jb25jYXQoZGF0YU9wZXJhdG9yLnNlbGVjdGFibGVLZXlzKGRhdGEsIGtleUZpZWxkLCBub25TZWxlY3RhYmxlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJTZWxlY3RlZCA9IHNlbGVjdGVkLmZpbHRlcihzID0+IHR5cGVvZiBkYXRhLmZpbmQoZCA9PiBfLmdldChkLCBrZXlGaWVsZCkgPT09IHMpID09PSAndW5kZWZpbmVkJyk7XG4gICAgfVxuXG4gICAgbGV0IHJlc3VsdDtcbiAgICBpZiAob25TZWxlY3RBbGwpIHtcbiAgICAgIHJlc3VsdCA9IG9uU2VsZWN0QWxsKFxuICAgICAgICAhaXNVblNlbGVjdCxcbiAgICAgICAgZGF0YU9wZXJhdG9yLmdldFNlbGVjdGVkUm93cyhcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIGtleUZpZWxkLFxuICAgICAgICAgIGlzVW5TZWxlY3QgPyBzZWxlY3RlZCA6IGN1cnJTZWxlY3RlZFxuICAgICAgICApLFxuICAgICAgICBlXG4gICAgICApO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0KSkge1xuICAgICAgICBjdXJyU2VsZWN0ZWQgPSByZXN1bHQ7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWQgPSBjdXJyU2VsZWN0ZWQ7XG4gICAgdGhpcy5mb3JjZVVwZGF0ZSgpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGFsbFJvd3NTZWxlY3RlZCxcbiAgICAgIGFsbFJvd3NOb3RTZWxlY3RlZFxuICAgIH0gPSBnZXRTZWxlY3Rpb25TdW1tYXJ5KFxuICAgICAgdGhpcy5wcm9wcy5kYXRhLFxuICAgICAgdGhpcy5wcm9wcy5rZXlGaWVsZCxcbiAgICAgIHRoaXMuc2VsZWN0ZWRcbiAgICApO1xuXG4gICAgbGV0IGNoZWNrZWRTdGF0dXM7XG5cbiAgICAvLyBjaGVja2JveCBzdGF0dXMgZGVwZW5kaW5nIG9uIHNlbGVjdGVkIHJvd3MgY291bnRzXG4gICAgaWYgKGFsbFJvd3NTZWxlY3RlZCkgY2hlY2tlZFN0YXR1cyA9IENvbnN0LkNIRUNLQk9YX1NUQVRVU19DSEVDS0VEO1xuICAgIGVsc2UgaWYgKGFsbFJvd3NOb3RTZWxlY3RlZCkgY2hlY2tlZFN0YXR1cyA9IENvbnN0LkNIRUNLQk9YX1NUQVRVU19VTkNIRUNLRUQ7XG4gICAgZWxzZSBjaGVja2VkU3RhdHVzID0gQ29uc3QuQ0hFQ0tCT1hfU1RBVFVTX0lOREVURVJNSU5BVEU7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFNlbGVjdGlvbkNvbnRleHQuUHJvdmlkZXJcbiAgICAgICAgdmFsdWU9eyB7XG4gICAgICAgICAgLi4udGhpcy5wcm9wcy5zZWxlY3RSb3csXG4gICAgICAgICAgc2VsZWN0ZWQ6IHRoaXMuc2VsZWN0ZWQsXG4gICAgICAgICAgb25Sb3dTZWxlY3Q6IHRoaXMuaGFuZGxlUm93U2VsZWN0LFxuICAgICAgICAgIG9uQWxsUm93c1NlbGVjdDogdGhpcy5oYW5kbGVBbGxSb3dzU2VsZWN0LFxuICAgICAgICAgIGFsbFJvd3NTZWxlY3RlZCxcbiAgICAgICAgICBhbGxSb3dzTm90U2VsZWN0ZWQsXG4gICAgICAgICAgY2hlY2tlZFN0YXR1c1xuICAgICAgICB9IH1cbiAgICAgID5cbiAgICAgICAgeyB0aGlzLnByb3BzLmNoaWxkcmVuIH1cbiAgICAgIDwvU2VsZWN0aW9uQ29udGV4dC5Qcm92aWRlcj5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgUHJvdmlkZXI6IFNlbGVjdGlvblByb3ZpZGVyLFxuICBDb25zdW1lcjogU2VsZWN0aW9uQ29udGV4dC5Db25zdW1lclxufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL2NvbnRleHRzL3NlbGVjdGlvbi1jb250ZXh0LmpzIiwiaW1wb3J0ICogYXMgcm93cyBmcm9tICcuL3Jvd3MnO1xuaW1wb3J0ICogYXMgc2VsZWN0aW9uIGZyb20gJy4vc2VsZWN0aW9uJztcbmltcG9ydCAqIGFzIGV4cGFuZCBmcm9tICcuL2V4cGFuZCc7XG5pbXBvcnQgKiBhcyBtdXRhdGUgZnJvbSAnLi9tdXRhdGUnO1xuaW1wb3J0ICogYXMgc29ydCBmcm9tICcuL3NvcnQnO1xuaW1wb3J0ICogYXMgdHlwZSBmcm9tICcuL3R5cGUnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIC4uLnJvd3MsXG4gIC4uLnNlbGVjdGlvbixcbiAgLi4uZXhwYW5kLFxuICAuLi5tdXRhdGUsXG4gIC4uLnNvcnQsXG4gIC4uLnR5cGVcbn07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9zdG9yZS9vcGVyYXRvcnMuanMiLCIvKiBlc2xpbnQgY2FtZWxjYXNlOiAwICovXG4vKiBlc2xpbnQgcmVhY3QvcHJvcC10eXBlczogMCAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgZGF0YU9wZXJhdG9yIGZyb20gJy4uL3N0b3JlL29wZXJhdG9ycyc7XG5pbXBvcnQgXyBmcm9tICcuLi91dGlscyc7XG5cbmNvbnN0IFJvd0V4cGFuZENvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0KCk7XG5cbmNsYXNzIFJvd0V4cGFuZFByb3ZpZGVyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcbiAgICBkYXRhOiBQcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZCxcbiAgICBrZXlGaWVsZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkXG4gIH07XG5cbiAgc3RhdGUgPSB7IGV4cGFuZGVkOiB0aGlzLnByb3BzLmV4cGFuZFJvdy5leHBhbmRlZCB8fCBbXSxcbiAgICBpc0Nsb3Npbmc6IHRoaXMucHJvcHMuZXhwYW5kUm93LmlzQ2xvc2luZyB8fCBbXSB9O1xuXG4gIG9uQ2xvc2VkID0gKGNsb3NlZFJvdykgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoeyBpc0Nsb3Npbmc6IHRoaXMuc3RhdGUuaXNDbG9zaW5nLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZSAhPT0gY2xvc2VkUm93KSB9KTtcbiAgfTtcblxuICBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpIHtcbiAgICBpZiAobmV4dFByb3BzLmV4cGFuZFJvdykge1xuICAgICAgbGV0IG5leHRFeHBhbmRlZCA9IFsuLi4obmV4dFByb3BzLmV4cGFuZFJvdy5leHBhbmRlZCB8fCB0aGlzLnN0YXRlLmV4cGFuZGVkKV07XG4gICAgICBjb25zdCB7IG5vbkV4cGFuZGFibGUgPSBbXSB9ID0gbmV4dFByb3BzLmV4cGFuZFJvdztcbiAgICAgIG5leHRFeHBhbmRlZCA9IG5leHRFeHBhbmRlZC5maWx0ZXIocm93SWQgPT4gIV8uY29udGFpbnMobm9uRXhwYW5kYWJsZSwgcm93SWQpKTtcbiAgICAgIGNvbnN0IGlzQ2xvc2luZyA9IHRoaXMuc3RhdGUuZXhwYW5kZWQucmVkdWNlKChhY2MsIGN1cikgPT4ge1xuICAgICAgICBpZiAoIV8uY29udGFpbnMobmV4dEV4cGFuZGVkLCBjdXIpKSB7XG4gICAgICAgICAgYWNjLnB1c2goY3VyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSwgW10pO1xuXG4gICAgICB0aGlzLnNldFN0YXRlKCgpID0+ICh7XG4gICAgICAgIGV4cGFuZGVkOiBuZXh0RXhwYW5kZWQsXG4gICAgICAgIGlzQ2xvc2luZ1xuICAgICAgfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFN0YXRlKCgpID0+ICh7XG4gICAgICAgIGV4cGFuZGVkOiB0aGlzLnN0YXRlLmV4cGFuZGVkXG4gICAgICB9KSk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlUm93RXhwYW5kID0gKHJvd0tleSwgZXhwYW5kZWQsIHJvd0luZGV4LCBlKSA9PiB7XG4gICAgY29uc3QgeyBkYXRhLCBrZXlGaWVsZCwgZXhwYW5kUm93OiB7IG9uRXhwYW5kLCBvbmx5T25lRXhwYW5kaW5nLCBub25FeHBhbmRhYmxlIH0gfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKG5vbkV4cGFuZGFibGUgJiYgXy5jb250YWlucyhub25FeHBhbmRhYmxlLCByb3dLZXkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGN1cnJFeHBhbmRlZCA9IFsuLi50aGlzLnN0YXRlLmV4cGFuZGVkXTtcbiAgICBsZXQgaXNDbG9zaW5nID0gWy4uLnRoaXMuc3RhdGUuaXNDbG9zaW5nXTtcblxuICAgIGlmIChleHBhbmRlZCkge1xuICAgICAgaWYgKG9ubHlPbmVFeHBhbmRpbmcpIHtcbiAgICAgICAgaXNDbG9zaW5nID0gaXNDbG9zaW5nLmNvbmNhdChjdXJyRXhwYW5kZWQpO1xuICAgICAgICBjdXJyRXhwYW5kZWQgPSBbcm93S2V5XTtcbiAgICAgIH0gZWxzZSBjdXJyRXhwYW5kZWQucHVzaChyb3dLZXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpc0Nsb3NpbmcucHVzaChyb3dLZXkpO1xuICAgICAgY3VyckV4cGFuZGVkID0gY3VyckV4cGFuZGVkLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZSAhPT0gcm93S2V5KTtcbiAgICB9XG5cbiAgICBpZiAob25FeHBhbmQpIHtcbiAgICAgIGNvbnN0IHJvdyA9IGRhdGFPcGVyYXRvci5nZXRSb3dCeVJvd0lkKGRhdGEsIGtleUZpZWxkLCByb3dLZXkpO1xuICAgICAgb25FeHBhbmQocm93LCBleHBhbmRlZCwgcm93SW5kZXgsIGUpO1xuICAgIH1cbiAgICB0aGlzLnNldFN0YXRlKCgpID0+ICh7IGV4cGFuZGVkOiBjdXJyRXhwYW5kZWQsIGlzQ2xvc2luZyB9KSk7XG4gIH07XG5cbiAgaGFuZGxlQWxsUm93RXhwYW5kID0gKGUsIGV4cGFuZEFsbCkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGRhdGEsXG4gICAgICBrZXlGaWVsZCxcbiAgICAgIGV4cGFuZFJvdzoge1xuICAgICAgICBvbkV4cGFuZEFsbCxcbiAgICAgICAgbm9uRXhwYW5kYWJsZVxuICAgICAgfVxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgZXhwYW5kZWQgfSA9IHRoaXMuc3RhdGU7XG5cbiAgICBsZXQgY3VyckV4cGFuZGVkO1xuXG4gICAgaWYgKGV4cGFuZEFsbCkge1xuICAgICAgY3VyckV4cGFuZGVkID0gZXhwYW5kZWQuY29uY2F0KGRhdGFPcGVyYXRvci5leHBhbmRhYmxlS2V5cyhkYXRhLCBrZXlGaWVsZCwgbm9uRXhwYW5kYWJsZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyRXhwYW5kZWQgPSBleHBhbmRlZC5maWx0ZXIocyA9PiB0eXBlb2YgZGF0YS5maW5kKGQgPT4gXy5nZXQoZCwga2V5RmllbGQpID09PSBzKSA9PT0gJ3VuZGVmaW5lZCcpO1xuICAgIH1cblxuICAgIGlmIChvbkV4cGFuZEFsbCkge1xuICAgICAgb25FeHBhbmRBbGwoZXhwYW5kQWxsLCBkYXRhT3BlcmF0b3IuZ2V0RXhwYW5kZWRSb3dzKGRhdGEsIGtleUZpZWxkLCBjdXJyRXhwYW5kZWQpLCBlKTtcbiAgICB9XG5cbiAgICB0aGlzLnNldFN0YXRlKCgpID0+ICh7IGV4cGFuZGVkOiBjdXJyRXhwYW5kZWQgfSkpO1xuICB9O1xuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IGRhdGEsIGtleUZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgIHJldHVybiAoXG4gICAgICA8Um93RXhwYW5kQ29udGV4dC5Qcm92aWRlclxuICAgICAgICB2YWx1ZT17IHtcbiAgICAgICAgICAuLi50aGlzLnByb3BzLmV4cGFuZFJvdyxcbiAgICAgICAgICBub25FeHBhbmRhYmxlOiB0aGlzLnByb3BzLmV4cGFuZFJvdy5ub25FeHBhbmRhYmxlLFxuICAgICAgICAgIGV4cGFuZGVkOiB0aGlzLnN0YXRlLmV4cGFuZGVkLFxuICAgICAgICAgIGlzQ2xvc2luZzogdGhpcy5zdGF0ZS5pc0Nsb3NpbmcsXG4gICAgICAgICAgb25DbG9zZWQ6IHRoaXMub25DbG9zZWQsXG4gICAgICAgICAgaXNBbnlFeHBhbmRzOiBkYXRhT3BlcmF0b3IuaXNBbnlFeHBhbmRzKGRhdGEsIGtleUZpZWxkLCB0aGlzLnN0YXRlLmV4cGFuZGVkKSxcbiAgICAgICAgICBvblJvd0V4cGFuZDogdGhpcy5oYW5kbGVSb3dFeHBhbmQsXG4gICAgICAgICAgb25BbGxSb3dFeHBhbmQ6IHRoaXMuaGFuZGxlQWxsUm93RXhwYW5kXG4gICAgICAgIH0gfVxuICAgICAgPlxuICAgICAgICB7IHRoaXMucHJvcHMuY2hpbGRyZW4gfVxuICAgICAgPC9Sb3dFeHBhbmRDb250ZXh0LlByb3ZpZGVyPlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBQcm92aWRlcjogUm93RXhwYW5kUHJvdmlkZXIsXG4gIENvbnN1bWVyOiBSb3dFeHBhbmRDb250ZXh0LkNvbnN1bWVyXG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9zcmMvY29udGV4dHMvcm93LWV4cGFuZC1jb250ZXh0LmpzIiwiaW1wb3J0IF8gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgZ2V0Um93QnlSb3dJZCB9IGZyb20gJy4vcm93cyc7XG5cbmV4cG9ydCBjb25zdCBnZXRTZWxlY3Rpb25TdW1tYXJ5ID0gKFxuICBkYXRhID0gW10sXG4gIGtleUZpZWxkLFxuICBzZWxlY3RlZCA9IFtdXG4pID0+IHtcbiAgbGV0IGFsbFJvd3NTZWxlY3RlZCA9IGRhdGEubGVuZ3RoID4gMDtcbiAgbGV0IGFsbFJvd3NOb3RTZWxlY3RlZCA9IHRydWU7XG5cbiAgY29uc3Qgcm93S2V5cyA9IGRhdGEubWFwKGQgPT4gXy5nZXQoZCwga2V5RmllbGQpKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dLZXlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgY29uc3QgY3VyciA9IHJvd0tleXNbaV07XG4gICAgaWYgKHR5cGVvZiBzZWxlY3RlZC5maW5kKHggPT4geCA9PT0gY3VycikgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBhbGxSb3dzU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgYWxsUm93c05vdFNlbGVjdGVkID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgYWxsUm93c1NlbGVjdGVkLFxuICAgIGFsbFJvd3NOb3RTZWxlY3RlZFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IHNlbGVjdGFibGVLZXlzID0gKGRhdGEgPSBbXSwga2V5RmllbGQsIHNraXBzID0gW10pID0+IHtcbiAgaWYgKHNraXBzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBkYXRhLm1hcChyb3cgPT4gXy5nZXQocm93LCBrZXlGaWVsZCkpO1xuICB9XG4gIHJldHVybiBkYXRhXG4gICAgLmZpbHRlcihyb3cgPT4gIV8uY29udGFpbnMoc2tpcHMsIF8uZ2V0KHJvdywga2V5RmllbGQpKSlcbiAgICAubWFwKHJvdyA9PiBfLmdldChyb3csIGtleUZpZWxkKSk7XG59O1xuXG5leHBvcnQgY29uc3QgdW5TZWxlY3RhYmxlS2V5cyA9IChzZWxlY3RlZCwgc2tpcHMgPSBbXSkgPT4ge1xuICBpZiAoc2tpcHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHJldHVybiBzZWxlY3RlZC5maWx0ZXIoeCA9PiBfLmNvbnRhaW5zKHNraXBzLCB4KSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U2VsZWN0ZWRSb3dzID0gKGRhdGEgPSBbXSwga2V5RmllbGQsIHNlbGVjdGVkKSA9PlxuICBzZWxlY3RlZC5tYXAoayA9PiBnZXRSb3dCeVJvd0lkKGRhdGEsIGtleUZpZWxkLCBrKSkuZmlsdGVyKHggPT4gISF4KTtcblxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9zcmMvc3RvcmUvc2VsZWN0aW9uLmpzIiwiLyogZXNsaW50IHJlYWN0L3JlcXVpcmUtZGVmYXVsdC1wcm9wczogMCAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5cbmltcG9ydCBDb25zdCBmcm9tICcuLi9jb25zdCc7XG5cbmNvbnN0IFJvd1RlbXBsYXRlID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICByZW5kZXJDb250ZW50LFxuICAgIHNlbGVjdFJvdyxcbiAgICBleHBhbmRSb3csXG4gICAgY2VsbEVsLFxuICAgIC4uLnJlc3RcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IGlzUmVuZGVyRnVuY3Rpb25Db2x1bW5JbkxlZnQgPSAoXG4gICAgcG9zaXRpb24gPSBDb25zdC5JTkRJQ0FUT1JfUE9TSVRJT05fTEVGVFxuICApID0+IHBvc2l0aW9uID09PSBDb25zdC5JTkRJQ0FUT1JfUE9TSVRJT05fTEVGVDtcblxuICBjb25zdCBjaGlsZHJlbnMgPSByZW5kZXJDb250ZW50KCkgfHwgW107XG5cbiAgaWYgKHNlbGVjdFJvdyAmJiBzZWxlY3RSb3cuaGlkZVNlbGVjdENvbHVtbiAhPT0gdHJ1ZSkge1xuICAgIGlmIChpc1JlbmRlckZ1bmN0aW9uQ29sdW1uSW5MZWZ0KHNlbGVjdFJvdy5zZWxlY3RDb2x1bW5Qb3NpdGlvbikpIHtcbiAgICAgIGNoaWxkcmVucy51bnNoaWZ0KFJlYWN0LmNyZWF0ZUVsZW1lbnQoY2VsbEVsLCB7IGtleTogJ3NlbGVjdGlvbicgfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGlsZHJlbnMucHVzaChSZWFjdC5jcmVhdGVFbGVtZW50KGNlbGxFbCwgeyBrZXk6ICdzZWxlY3Rpb24nIH0pKTtcbiAgICB9XG4gIH1cblxuICBpZiAoZXhwYW5kUm93LnNob3dFeHBhbmRDb2x1bW4pIHtcbiAgICBpZiAoaXNSZW5kZXJGdW5jdGlvbkNvbHVtbkluTGVmdChleHBhbmRSb3cuZXhwYW5kQ29sdW1uUG9zaXRpb24pKSB7XG4gICAgICBjaGlsZHJlbnMudW5zaGlmdChSZWFjdC5jcmVhdGVFbGVtZW50KGNlbGxFbCwgeyBrZXk6ICdleHBhbnNpb24nIH0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2hpbGRyZW5zLnB1c2goUmVhY3QuY3JlYXRlRWxlbWVudChjZWxsRWwsIHsga2V5OiAnZXhwYW5zaW9uJyB9KSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIDx0ciB7IC4uLnJlc3QgfT57IGNoaWxkcmVucyB9PC90cj47XG59O1xuXG5Sb3dUZW1wbGF0ZS5wcm9wVHlwZXMgPSB7XG4gIHJlbmRlckNvbnRlbnQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGNlbGxFbDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBzZWxlY3RSb3c6IFByb3BUeXBlcy5vYmplY3QsXG4gIGV4cGFuZFJvdzogUHJvcFR5cGVzLm9iamVjdFxufTtcblxuZXhwb3J0IGRlZmF1bHQgUm93VGVtcGxhdGU7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9yb3cvcm93LXRlbXBsYXRlLmpzIiwiLyogZXNsaW50IHJlYWN0L3Byb3AtdHlwZXM6IDAgKi9cbi8qIGVzbGludCByZWFjdC9uby1hcnJheS1pbmRleC1rZXk6IDAgKi9cbi8qIGVzbGludCBuby1wbHVzcGx1czogMCAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IF8gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IENlbGwgZnJvbSAnLi4vY2VsbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJvd1B1cmVDb250ZW50IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcykge1xuICAgIGlmICh0eXBlb2YgbmV4dFByb3BzLnNob3VsZFVwZGF0ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBuZXh0UHJvcHMuc2hvdWxkVXBkYXRlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICByb3csXG4gICAgICBrZXlGaWVsZCxcbiAgICAgIGNvbHVtbnMsXG4gICAgICByb3dJbmRleCxcbiAgICAgIGVkaXRhYmxlLFxuICAgICAgZWRpdGluZ1Jvd0lkeCxcbiAgICAgIGVkaXRpbmdDb2xJZHgsXG4gICAgICBvblN0YXJ0LFxuICAgICAgY2xpY2tUb0VkaXQsXG4gICAgICBkYmNsaWNrVG9FZGl0LFxuICAgICAgRWRpdGluZ0NlbGxDb21wb25lbnQsXG4gICAgICB0YWJJbmRleFN0YXJ0XG4gICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBsZXQgdGFiSW5kZXggPSB0YWJJbmRleFN0YXJ0O1xuXG4gICAgcmV0dXJuIGNvbHVtbnMubWFwKChjb2x1bW4sIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCB7IGRhdGFGaWVsZCB9ID0gY29sdW1uO1xuICAgICAgY29uc3QgY29udGVudCA9IF8uZ2V0KHJvdywgZGF0YUZpZWxkKTtcbiAgICAgIGlmIChyb3dJbmRleCA9PT0gZWRpdGluZ1Jvd0lkeCAmJiBpbmRleCA9PT0gZWRpdGluZ0NvbElkeCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxFZGl0aW5nQ2VsbENvbXBvbmVudFxuICAgICAgICAgICAga2V5PXsgYCR7Y29udGVudH0tJHtpbmRleH0tZWRpdGluZ2AgfVxuICAgICAgICAgICAgcm93PXsgcm93IH1cbiAgICAgICAgICAgIHJvd0luZGV4PXsgcm93SW5kZXggfVxuICAgICAgICAgICAgY29sdW1uPXsgY29sdW1uIH1cbiAgICAgICAgICAgIGNvbHVtbkluZGV4PXsgaW5kZXggfVxuICAgICAgICAgIC8+XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICAvLyByZW5kZXIgY2VsbFxuICAgICAgbGV0IGNlbGxUaXRsZTtcbiAgICAgIGxldCBjZWxsU3R5bGUgPSB7fTtcbiAgICAgIGxldCBjZWxsQXR0cnMgPSB7XG4gICAgICAgIC4uLl8uaXNGdW5jdGlvbihjb2x1bW4uYXR0cnMpXG4gICAgICAgICAgPyBjb2x1bW4uYXR0cnMoY29udGVudCwgcm93LCByb3dJbmRleCwgaW5kZXgpXG4gICAgICAgICAgOiBjb2x1bW4uYXR0cnNcbiAgICAgIH07XG5cbiAgICAgIGlmIChjb2x1bW4uZXZlbnRzKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50cyA9IE9iamVjdC5hc3NpZ24oe30sIGNvbHVtbi5ldmVudHMpO1xuICAgICAgICBPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LCBjb2x1bW4uZXZlbnRzKSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgY29uc3Qgb3JpZ2luRm4gPSBldmVudHNba2V5XTtcbiAgICAgICAgICBldmVudHNba2V5XSA9ICguLi5yZXN0KSA9PiBvcmlnaW5GbiguLi5yZXN0LCByb3csIHJvd0luZGV4KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNlbGxBdHRycyA9IHsgLi4uY2VsbEF0dHJzLCAuLi5ldmVudHMgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2VsbENsYXNzZXMgPSBfLmlzRnVuY3Rpb24oY29sdW1uLmNsYXNzZXMpXG4gICAgICAgID8gY29sdW1uLmNsYXNzZXMoY29udGVudCwgcm93LCByb3dJbmRleCwgaW5kZXgpXG4gICAgICAgIDogY29sdW1uLmNsYXNzZXM7XG5cbiAgICAgIGlmIChjb2x1bW4uc3R5bGUpIHtcbiAgICAgICAgY2VsbFN0eWxlID0gXy5pc0Z1bmN0aW9uKGNvbHVtbi5zdHlsZSlcbiAgICAgICAgICA/IGNvbHVtbi5zdHlsZShjb250ZW50LCByb3csIHJvd0luZGV4LCBpbmRleClcbiAgICAgICAgICA6IGNvbHVtbi5zdHlsZTtcbiAgICAgICAgY2VsbFN0eWxlID0gT2JqZWN0LmFzc2lnbih7fSwgY2VsbFN0eWxlKSB8fCB7fTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbHVtbi50aXRsZSkge1xuICAgICAgICBjZWxsVGl0bGUgPSBfLmlzRnVuY3Rpb24oY29sdW1uLnRpdGxlKVxuICAgICAgICAgID8gY29sdW1uLnRpdGxlKGNvbnRlbnQsIHJvdywgcm93SW5kZXgsIGluZGV4KVxuICAgICAgICAgIDogY29udGVudDtcbiAgICAgICAgY2VsbEF0dHJzLnRpdGxlID0gY2VsbFRpdGxlO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29sdW1uLmFsaWduKSB7XG4gICAgICAgIGNlbGxTdHlsZS50ZXh0QWxpZ24gPVxuICAgICAgICAgIF8uaXNGdW5jdGlvbihjb2x1bW4uYWxpZ24pXG4gICAgICAgICAgICA/IGNvbHVtbi5hbGlnbihjb250ZW50LCByb3csIHJvd0luZGV4LCBpbmRleClcbiAgICAgICAgICAgIDogY29sdW1uLmFsaWduO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2VsbENsYXNzZXMpIGNlbGxBdHRycy5jbGFzc05hbWUgPSBjZWxsQ2xhc3NlcztcbiAgICAgIGlmICghXy5pc0VtcHR5T2JqZWN0KGNlbGxTdHlsZSkpIGNlbGxBdHRycy5zdHlsZSA9IGNlbGxTdHlsZTtcblxuICAgICAgbGV0IGVkaXRhYmxlQ2VsbCA9IF8uaXNEZWZpbmVkKGNvbHVtbi5lZGl0YWJsZSkgPyBjb2x1bW4uZWRpdGFibGUgOiB0cnVlO1xuICAgICAgaWYgKGNvbHVtbi5kYXRhRmllbGQgPT09IGtleUZpZWxkIHx8ICFlZGl0YWJsZSkgZWRpdGFibGVDZWxsID0gZmFsc2U7XG4gICAgICBpZiAoXy5pc0Z1bmN0aW9uKGNvbHVtbi5lZGl0YWJsZSkpIHtcbiAgICAgICAgZWRpdGFibGVDZWxsID0gY29sdW1uLmVkaXRhYmxlKGNvbnRlbnQsIHJvdywgcm93SW5kZXgsIGluZGV4KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRhYkluZGV4U3RhcnQgIT09IC0xKSB7XG4gICAgICAgIGNlbGxBdHRycy50YWJJbmRleCA9IHRhYkluZGV4Kys7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxDZWxsXG4gICAgICAgICAga2V5PXsgYCR7Y29udGVudH0tJHtpbmRleH1gIH1cbiAgICAgICAgICByb3c9eyByb3cgfVxuICAgICAgICAgIGVkaXRhYmxlPXsgZWRpdGFibGVDZWxsIH1cbiAgICAgICAgICByb3dJbmRleD17IHJvd0luZGV4IH1cbiAgICAgICAgICBjb2x1bW5JbmRleD17IGluZGV4IH1cbiAgICAgICAgICBjb2x1bW49eyBjb2x1bW4gfVxuICAgICAgICAgIG9uU3RhcnQ9eyBvblN0YXJ0IH1cbiAgICAgICAgICBjbGlja1RvRWRpdD17IGNsaWNrVG9FZGl0IH1cbiAgICAgICAgICBkYmNsaWNrVG9FZGl0PXsgZGJjbGlja1RvRWRpdCB9XG4gICAgICAgICAgeyAuLi5jZWxsQXR0cnMgfVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9zcmMvcm93L3Jvdy1wdXJlLWNvbnRlbnQuanMiLCJpbXBvcnQgXyBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgQ29uc3QgZnJvbSAnLi4vY29uc3QnO1xuXG5jb25zdCBldmVudHMgPSBbXG4gICdvbkNsaWNrJyxcbiAgJ29uRG91YmxlQ2xpY2snLFxuICAnb25Nb3VzZUVudGVyJyxcbiAgJ29uTW91c2VMZWF2ZScsXG4gICdvbkNvbnRleHRNZW51JyxcbiAgJ29uQXV4Q2xpY2snXG5dO1xuXG5leHBvcnQgZGVmYXVsdCBFeHRlbmRCYXNlID0+XG4gIGNsYXNzIFJvd0V2ZW50RGVsZWdhdGVyIGV4dGVuZHMgRXh0ZW5kQmFzZSB7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgIHRoaXMuY2xpY2tOdW0gPSAwO1xuICAgICAgdGhpcy5jcmVhdGVEZWZhdWx0RXZlbnRIYW5kbGVyID0gdGhpcy5jcmVhdGVEZWZhdWx0RXZlbnRIYW5kbGVyLmJpbmQodGhpcyk7XG4gICAgICB0aGlzLmNyZWF0ZUNsaWNrRXZlbnRIYW5kbGVyID0gdGhpcy5jcmVhdGVDbGlja0V2ZW50SGFuZGxlci5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGNyZWF0ZUNsaWNrRXZlbnRIYW5kbGVyKGNiKSB7XG4gICAgICByZXR1cm4gKGUpID0+IHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIHJvdyxcbiAgICAgICAgICBzZWxlY3RlZCxcbiAgICAgICAgICBrZXlGaWVsZCxcbiAgICAgICAgICBzZWxlY3RhYmxlLFxuICAgICAgICAgIGV4cGFuZGFibGUsXG4gICAgICAgICAgcm93SW5kZXgsXG4gICAgICAgICAgZXhwYW5kZWQsXG4gICAgICAgICAgZXhwYW5kUm93LFxuICAgICAgICAgIHNlbGVjdFJvdyxcbiAgICAgICAgICBERUxBWV9GT1JfREJDTElDS1xuICAgICAgICB9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgY29uc3QgY2xpY2tGbiA9ICgpID0+IHtcbiAgICAgICAgICBpZiAoY2IpIHtcbiAgICAgICAgICAgIGNiKGUsIHJvdywgcm93SW5kZXgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBrZXkgPSBfLmdldChyb3csIGtleUZpZWxkKTtcbiAgICAgICAgICBpZiAoZXhwYW5kUm93ICYmIGV4cGFuZGFibGUgJiYgIWV4cGFuZFJvdy5leHBhbmRCeUNvbHVtbk9ubHkpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgKHNlbGVjdFJvdy5tb2RlICE9PSBDb25zdC5ST1dfU0VMRUNUX0RJU0FCTEVEICYmIHNlbGVjdFJvdy5jbGlja1RvRXhwYW5kKSB8fFxuICAgICAgICAgICAgICBzZWxlY3RSb3cubW9kZSA9PT0gQ29uc3QuUk9XX1NFTEVDVF9ESVNBQkxFRFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGV4cGFuZFJvdy5vblJvd0V4cGFuZChrZXksICFleHBhbmRlZCwgcm93SW5kZXgsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc2VsZWN0Um93LmNsaWNrVG9TZWxlY3QgJiYgc2VsZWN0YWJsZSkge1xuICAgICAgICAgICAgc2VsZWN0Um93Lm9uUm93U2VsZWN0KGtleSwgIXNlbGVjdGVkLCByb3dJbmRleCwgZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChERUxBWV9GT1JfREJDTElDSykge1xuICAgICAgICAgIHRoaXMuY2xpY2tOdW0gKz0gMTtcbiAgICAgICAgICBfLmRlYm91bmNlKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNsaWNrTnVtID09PSAxKSB7XG4gICAgICAgICAgICAgIGNsaWNrRm4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY2xpY2tOdW0gPSAwO1xuICAgICAgICAgIH0sIERFTEFZX0ZPUl9EQkNMSUNLKSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNsaWNrRm4oKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjcmVhdGVEZWZhdWx0RXZlbnRIYW5kbGVyKGNiKSB7XG4gICAgICByZXR1cm4gKGUpID0+IHtcbiAgICAgICAgY29uc3QgeyByb3csIHJvd0luZGV4IH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBjYihlLCByb3csIHJvd0luZGV4KTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZGVsZWdhdGUoYXR0cnMgPSB7fSkge1xuICAgICAgY29uc3QgbmV3QXR0cnMgPSB7IC4uLmF0dHJzIH07XG4gICAgICBPYmplY3Qua2V5cyhhdHRycykuZm9yRWFjaCgoYXR0cikgPT4ge1xuICAgICAgICBpZiAoXy5jb250YWlucyhldmVudHMsIGF0dHIpKSB7XG4gICAgICAgICAgbmV3QXR0cnNbYXR0cl0gPSB0aGlzLmNyZWF0ZURlZmF1bHRFdmVudEhhbmRsZXIoYXR0cnNbYXR0cl0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXdBdHRycztcbiAgICB9XG4gIH07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9yb3cvZXZlbnQtZGVsZWdhdGVyLmpzIiwiLyogZXNsaW50IHJlYWN0L3Byb3AtdHlwZXM6IDAgKi9cbmltcG9ydCBfIGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgRXh0ZW5kQmFzZSA9PlxuICBjbGFzcyBSb3dTaG91bGRVcGRhdGVyIGV4dGVuZHMgRXh0ZW5kQmFzZSB7XG4gICAgc2hvdWxkVXBkYXRlQnlDZWxsRWRpdGluZyhuZXh0UHJvcHMpIHtcbiAgICAgIGlmICghKHRoaXMucHJvcHMuY2xpY2tUb0VkaXQgfHwgdGhpcy5wcm9wcy5kYmNsaWNrVG9FZGl0KSkgcmV0dXJuIGZhbHNlO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgbmV4dFByb3BzLmVkaXRpbmdSb3dJZHggPT09IG5leHRQcm9wcy5yb3dJbmRleCB8fFxuICAgICAgICAodGhpcy5wcm9wcy5lZGl0aW5nUm93SWR4ID09PSBuZXh0UHJvcHMucm93SW5kZXggJiZcbiAgICAgICAgbmV4dFByb3BzLmVkaXRpbmdSb3dJZHggPT09IG51bGwpIHx8XG4gICAgICAgIHRoaXMucHJvcHMuZWRpdGluZ1Jvd0lkeCA9PT0gbmV4dFByb3BzLnJvd0luZGV4XG4gICAgICApO1xuICAgIH1cblxuICAgIHNob3VsZFVwZGF0ZWRCeVNlbGZQcm9wcyhuZXh0UHJvcHMpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMucHJvcHMuY2xhc3NOYW1lICE9PSBuZXh0UHJvcHMuY2xhc3NOYW1lIHx8XG4gICAgICAgICFfLmlzRXF1YWwodGhpcy5wcm9wcy5zdHlsZSwgbmV4dFByb3BzLnN0eWxlKSB8fFxuICAgICAgICAhXy5pc0VxdWFsKHRoaXMucHJvcHMuYXR0cnMsIG5leHRQcm9wcy5hdHRycylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gT25seSB1c2UgZm9yIHNpbXBsZS1yb3dcbiAgICBzaG91bGRVcGRhdGVCeUNvbHVtbnNGb3JTaW1wbGVDaGVjayhuZXh0UHJvcHMpIHtcbiAgICAgIGlmICh0aGlzLnByb3BzLmNvbHVtbnMubGVuZ3RoICE9PSBuZXh0UHJvcHMuY29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucHJvcHMuY29sdW1ucy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBpZiAoIV8uaXNFcXVhbCh0aGlzLnByb3BzLmNvbHVtbnNbaV0sIG5leHRQcm9wcy5jb2x1bW5zW2ldKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgc2hvdWxkVXBkYXRlZEJ5Tm9ybWFsUHJvcHMobmV4dFByb3BzKSB7XG4gICAgICBjb25zdCBzaG91bGRVcGRhdGUgPVxuICAgICAgICB0aGlzLnByb3BzLnJvd0luZGV4ICE9PSBuZXh0UHJvcHMucm93SW5kZXggfHxcbiAgICAgICAgdGhpcy5wcm9wcy5lZGl0YWJsZSAhPT0gbmV4dFByb3BzLmVkaXRhYmxlIHx8XG4gICAgICAgICFfLmlzRXF1YWwodGhpcy5wcm9wcy5yb3csIG5leHRQcm9wcy5yb3cpIHx8XG4gICAgICAgIHRoaXMucHJvcHMuY29sdW1ucy5sZW5ndGggIT09IG5leHRQcm9wcy5jb2x1bW5zLmxlbmd0aDtcblxuICAgICAgcmV0dXJuIHNob3VsZFVwZGF0ZTtcbiAgICB9XG5cbiAgICBzaG91bGRVcGRhdGVDaGlsZChuZXh0UHJvcHMpIHtcbiAgICAgIHJldHVybiB0aGlzLnNob3VsZFVwZGF0ZUJ5Q2VsbEVkaXRpbmcobmV4dFByb3BzKSB8fFxuICAgICAgICB0aGlzLnNob3VsZFVwZGF0ZWRCeU5vcm1hbFByb3BzKG5leHRQcm9wcyk7XG4gICAgfVxuXG4gICAgc2hvdWxkUm93Q29udGVudFVwZGF0ZShuZXh0UHJvcHMpIHtcbiAgICAgIHJldHVybiB0aGlzLnNob3VsZFVwZGF0ZUNoaWxkKG5leHRQcm9wcykgfHxcbiAgICAgICAgdGhpcy5zaG91bGRVcGRhdGVCeUNvbHVtbnNGb3JTaW1wbGVDaGVjayhuZXh0UHJvcHMpO1xuICAgIH1cbiAgfTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL3Jvdy9zaG91bGQtdXBkYXRlci5qcyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9leHRlbmRzKCkge1xuICBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldO1xuXG4gICAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH07XG5cbiAgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzLmpzXG4vLyBtb2R1bGUgaWQgPSAxOFxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSIsImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlXCI7XG5pbXBvcnQgKiBhcyBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgY29uZmlnIGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB7IHRpbWVvdXRzU2hhcGUgfSBmcm9tICcuL3V0aWxzL1Byb3BUeXBlcyc7XG5pbXBvcnQgVHJhbnNpdGlvbkdyb3VwQ29udGV4dCBmcm9tICcuL1RyYW5zaXRpb25Hcm91cENvbnRleHQnO1xuZXhwb3J0IHZhciBVTk1PVU5URUQgPSAndW5tb3VudGVkJztcbmV4cG9ydCB2YXIgRVhJVEVEID0gJ2V4aXRlZCc7XG5leHBvcnQgdmFyIEVOVEVSSU5HID0gJ2VudGVyaW5nJztcbmV4cG9ydCB2YXIgRU5URVJFRCA9ICdlbnRlcmVkJztcbmV4cG9ydCB2YXIgRVhJVElORyA9ICdleGl0aW5nJztcbi8qKlxuICogVGhlIFRyYW5zaXRpb24gY29tcG9uZW50IGxldHMgeW91IGRlc2NyaWJlIGEgdHJhbnNpdGlvbiBmcm9tIG9uZSBjb21wb25lbnRcbiAqIHN0YXRlIHRvIGFub3RoZXIgX292ZXIgdGltZV8gd2l0aCBhIHNpbXBsZSBkZWNsYXJhdGl2ZSBBUEkuIE1vc3QgY29tbW9ubHlcbiAqIGl0J3MgdXNlZCB0byBhbmltYXRlIHRoZSBtb3VudGluZyBhbmQgdW5tb3VudGluZyBvZiBhIGNvbXBvbmVudCwgYnV0IGNhbiBhbHNvXG4gKiBiZSB1c2VkIHRvIGRlc2NyaWJlIGluLXBsYWNlIHRyYW5zaXRpb24gc3RhdGVzIGFzIHdlbGwuXG4gKlxuICogLS0tXG4gKlxuICogKipOb3RlKio6IGBUcmFuc2l0aW9uYCBpcyBhIHBsYXRmb3JtLWFnbm9zdGljIGJhc2UgY29tcG9uZW50LiBJZiB5b3UncmUgdXNpbmdcbiAqIHRyYW5zaXRpb25zIGluIENTUywgeW91J2xsIHByb2JhYmx5IHdhbnQgdG8gdXNlXG4gKiBbYENTU1RyYW5zaXRpb25gXShodHRwczovL3JlYWN0Y29tbXVuaXR5Lm9yZy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2Nzcy10cmFuc2l0aW9uKVxuICogaW5zdGVhZC4gSXQgaW5oZXJpdHMgYWxsIHRoZSBmZWF0dXJlcyBvZiBgVHJhbnNpdGlvbmAsIGJ1dCBjb250YWluc1xuICogYWRkaXRpb25hbCBmZWF0dXJlcyBuZWNlc3NhcnkgdG8gcGxheSBuaWNlIHdpdGggQ1NTIHRyYW5zaXRpb25zIChoZW5jZSB0aGVcbiAqIG5hbWUgb2YgdGhlIGNvbXBvbmVudCkuXG4gKlxuICogLS0tXG4gKlxuICogQnkgZGVmYXVsdCB0aGUgYFRyYW5zaXRpb25gIGNvbXBvbmVudCBkb2VzIG5vdCBhbHRlciB0aGUgYmVoYXZpb3Igb2YgdGhlXG4gKiBjb21wb25lbnQgaXQgcmVuZGVycywgaXQgb25seSB0cmFja3MgXCJlbnRlclwiIGFuZCBcImV4aXRcIiBzdGF0ZXMgZm9yIHRoZVxuICogY29tcG9uZW50cy4gSXQncyB1cCB0byB5b3UgdG8gZ2l2ZSBtZWFuaW5nIGFuZCBlZmZlY3QgdG8gdGhvc2Ugc3RhdGVzLiBGb3JcbiAqIGV4YW1wbGUgd2UgY2FuIGFkZCBzdHlsZXMgdG8gYSBjb21wb25lbnQgd2hlbiBpdCBlbnRlcnMgb3IgZXhpdHM6XG4gKlxuICogYGBganN4XG4gKiBpbXBvcnQgeyBUcmFuc2l0aW9uIH0gZnJvbSAncmVhY3QtdHJhbnNpdGlvbi1ncm91cCc7XG4gKlxuICogY29uc3QgZHVyYXRpb24gPSAzMDA7XG4gKlxuICogY29uc3QgZGVmYXVsdFN0eWxlID0ge1xuICogICB0cmFuc2l0aW9uOiBgb3BhY2l0eSAke2R1cmF0aW9ufW1zIGVhc2UtaW4tb3V0YCxcbiAqICAgb3BhY2l0eTogMCxcbiAqIH1cbiAqXG4gKiBjb25zdCB0cmFuc2l0aW9uU3R5bGVzID0ge1xuICogICBlbnRlcmluZzogeyBvcGFjaXR5OiAxIH0sXG4gKiAgIGVudGVyZWQ6ICB7IG9wYWNpdHk6IDEgfSxcbiAqICAgZXhpdGluZzogIHsgb3BhY2l0eTogMCB9LFxuICogICBleGl0ZWQ6ICB7IG9wYWNpdHk6IDAgfSxcbiAqIH07XG4gKlxuICogY29uc3QgRmFkZSA9ICh7IGluOiBpblByb3AgfSkgPT4gKFxuICogICA8VHJhbnNpdGlvbiBpbj17aW5Qcm9wfSB0aW1lb3V0PXtkdXJhdGlvbn0+XG4gKiAgICAge3N0YXRlID0+IChcbiAqICAgICAgIDxkaXYgc3R5bGU9e3tcbiAqICAgICAgICAgLi4uZGVmYXVsdFN0eWxlLFxuICogICAgICAgICAuLi50cmFuc2l0aW9uU3R5bGVzW3N0YXRlXVxuICogICAgICAgfX0+XG4gKiAgICAgICAgIEknbSBhIGZhZGUgVHJhbnNpdGlvbiFcbiAqICAgICAgIDwvZGl2PlxuICogICAgICl9XG4gKiAgIDwvVHJhbnNpdGlvbj5cbiAqICk7XG4gKiBgYGBcbiAqXG4gKiBUaGVyZSBhcmUgNCBtYWluIHN0YXRlcyBhIFRyYW5zaXRpb24gY2FuIGJlIGluOlxuICogIC0gYCdlbnRlcmluZydgXG4gKiAgLSBgJ2VudGVyZWQnYFxuICogIC0gYCdleGl0aW5nJ2BcbiAqICAtIGAnZXhpdGVkJ2BcbiAqXG4gKiBUcmFuc2l0aW9uIHN0YXRlIGlzIHRvZ2dsZWQgdmlhIHRoZSBgaW5gIHByb3AuIFdoZW4gYHRydWVgIHRoZSBjb21wb25lbnRcbiAqIGJlZ2lucyB0aGUgXCJFbnRlclwiIHN0YWdlLiBEdXJpbmcgdGhpcyBzdGFnZSwgdGhlIGNvbXBvbmVudCB3aWxsIHNoaWZ0IGZyb21cbiAqIGl0cyBjdXJyZW50IHRyYW5zaXRpb24gc3RhdGUsIHRvIGAnZW50ZXJpbmcnYCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZVxuICogdHJhbnNpdGlvbiBhbmQgdGhlbiB0byB0aGUgYCdlbnRlcmVkJ2Agc3RhZ2Ugb25jZSBpdCdzIGNvbXBsZXRlLiBMZXQncyB0YWtlXG4gKiB0aGUgZm9sbG93aW5nIGV4YW1wbGUgKHdlJ2xsIHVzZSB0aGVcbiAqIFt1c2VTdGF0ZV0oaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL2hvb2tzLXJlZmVyZW5jZS5odG1sI3VzZXN0YXRlKSBob29rKTpcbiAqXG4gKiBgYGBqc3hcbiAqIGZ1bmN0aW9uIEFwcCgpIHtcbiAqICAgY29uc3QgW2luUHJvcCwgc2V0SW5Qcm9wXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAqICAgcmV0dXJuIChcbiAqICAgICA8ZGl2PlxuICogICAgICAgPFRyYW5zaXRpb24gaW49e2luUHJvcH0gdGltZW91dD17NTAwfT5cbiAqICAgICAgICAge3N0YXRlID0+IChcbiAqICAgICAgICAgICAvLyAuLi5cbiAqICAgICAgICAgKX1cbiAqICAgICAgIDwvVHJhbnNpdGlvbj5cbiAqICAgICAgIDxidXR0b24gb25DbGljaz17KCkgPT4gc2V0SW5Qcm9wKHRydWUpfT5cbiAqICAgICAgICAgQ2xpY2sgdG8gRW50ZXJcbiAqICAgICAgIDwvYnV0dG9uPlxuICogICAgIDwvZGl2PlxuICogICApO1xuICogfVxuICogYGBgXG4gKlxuICogV2hlbiB0aGUgYnV0dG9uIGlzIGNsaWNrZWQgdGhlIGNvbXBvbmVudCB3aWxsIHNoaWZ0IHRvIHRoZSBgJ2VudGVyaW5nJ2Agc3RhdGVcbiAqIGFuZCBzdGF5IHRoZXJlIGZvciA1MDBtcyAodGhlIHZhbHVlIG9mIGB0aW1lb3V0YCkgYmVmb3JlIGl0IGZpbmFsbHkgc3dpdGNoZXNcbiAqIHRvIGAnZW50ZXJlZCdgLlxuICpcbiAqIFdoZW4gYGluYCBpcyBgZmFsc2VgIHRoZSBzYW1lIHRoaW5nIGhhcHBlbnMgZXhjZXB0IHRoZSBzdGF0ZSBtb3ZlcyBmcm9tXG4gKiBgJ2V4aXRpbmcnYCB0byBgJ2V4aXRlZCdgLlxuICovXG5cbnZhciBUcmFuc2l0aW9uID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0c0xvb3NlKFRyYW5zaXRpb24sIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFRyYW5zaXRpb24ocHJvcHMsIGNvbnRleHQpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfdGhpcyA9IF9SZWFjdCRDb21wb25lbnQuY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCkgfHwgdGhpcztcbiAgICB2YXIgcGFyZW50R3JvdXAgPSBjb250ZXh0OyAvLyBJbiB0aGUgY29udGV4dCBvZiBhIFRyYW5zaXRpb25Hcm91cCBhbGwgZW50ZXJzIGFyZSByZWFsbHkgYXBwZWFyc1xuXG4gICAgdmFyIGFwcGVhciA9IHBhcmVudEdyb3VwICYmICFwYXJlbnRHcm91cC5pc01vdW50aW5nID8gcHJvcHMuZW50ZXIgOiBwcm9wcy5hcHBlYXI7XG4gICAgdmFyIGluaXRpYWxTdGF0dXM7XG4gICAgX3RoaXMuYXBwZWFyU3RhdHVzID0gbnVsbDtcblxuICAgIGlmIChwcm9wcy5pbikge1xuICAgICAgaWYgKGFwcGVhcikge1xuICAgICAgICBpbml0aWFsU3RhdHVzID0gRVhJVEVEO1xuICAgICAgICBfdGhpcy5hcHBlYXJTdGF0dXMgPSBFTlRFUklORztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluaXRpYWxTdGF0dXMgPSBFTlRFUkVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocHJvcHMudW5tb3VudE9uRXhpdCB8fCBwcm9wcy5tb3VudE9uRW50ZXIpIHtcbiAgICAgICAgaW5pdGlhbFN0YXR1cyA9IFVOTU9VTlRFRDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluaXRpYWxTdGF0dXMgPSBFWElURUQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBzdGF0dXM6IGluaXRpYWxTdGF0dXNcbiAgICB9O1xuICAgIF90aGlzLm5leHRDYWxsYmFjayA9IG51bGw7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgVHJhbnNpdGlvbi5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSBmdW5jdGlvbiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoX3JlZiwgcHJldlN0YXRlKSB7XG4gICAgdmFyIG5leHRJbiA9IF9yZWYuaW47XG5cbiAgICBpZiAobmV4dEluICYmIHByZXZTdGF0ZS5zdGF0dXMgPT09IFVOTU9VTlRFRCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzOiBFWElURURcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH07IC8vIGdldFNuYXBzaG90QmVmb3JlVXBkYXRlKHByZXZQcm9wcykge1xuICAvLyAgIGxldCBuZXh0U3RhdHVzID0gbnVsbFxuICAvLyAgIGlmIChwcmV2UHJvcHMgIT09IHRoaXMucHJvcHMpIHtcbiAgLy8gICAgIGNvbnN0IHsgc3RhdHVzIH0gPSB0aGlzLnN0YXRlXG4gIC8vICAgICBpZiAodGhpcy5wcm9wcy5pbikge1xuICAvLyAgICAgICBpZiAoc3RhdHVzICE9PSBFTlRFUklORyAmJiBzdGF0dXMgIT09IEVOVEVSRUQpIHtcbiAgLy8gICAgICAgICBuZXh0U3RhdHVzID0gRU5URVJJTkdcbiAgLy8gICAgICAgfVxuICAvLyAgICAgfSBlbHNlIHtcbiAgLy8gICAgICAgaWYgKHN0YXR1cyA9PT0gRU5URVJJTkcgfHwgc3RhdHVzID09PSBFTlRFUkVEKSB7XG4gIC8vICAgICAgICAgbmV4dFN0YXR1cyA9IEVYSVRJTkdcbiAgLy8gICAgICAgfVxuICAvLyAgICAgfVxuICAvLyAgIH1cbiAgLy8gICByZXR1cm4geyBuZXh0U3RhdHVzIH1cbiAgLy8gfVxuXG5cbiAgdmFyIF9wcm90byA9IFRyYW5zaXRpb24ucHJvdG90eXBlO1xuXG4gIF9wcm90by5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMudXBkYXRlU3RhdHVzKHRydWUsIHRoaXMuYXBwZWFyU3RhdHVzKTtcbiAgfTtcblxuICBfcHJvdG8uY29tcG9uZW50RGlkVXBkYXRlID0gZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgIHZhciBuZXh0U3RhdHVzID0gbnVsbDtcblxuICAgIGlmIChwcmV2UHJvcHMgIT09IHRoaXMucHJvcHMpIHtcbiAgICAgIHZhciBzdGF0dXMgPSB0aGlzLnN0YXRlLnN0YXR1cztcblxuICAgICAgaWYgKHRoaXMucHJvcHMuaW4pIHtcbiAgICAgICAgaWYgKHN0YXR1cyAhPT0gRU5URVJJTkcgJiYgc3RhdHVzICE9PSBFTlRFUkVEKSB7XG4gICAgICAgICAgbmV4dFN0YXR1cyA9IEVOVEVSSU5HO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoc3RhdHVzID09PSBFTlRFUklORyB8fCBzdGF0dXMgPT09IEVOVEVSRUQpIHtcbiAgICAgICAgICBuZXh0U3RhdHVzID0gRVhJVElORztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudXBkYXRlU3RhdHVzKGZhbHNlLCBuZXh0U3RhdHVzKTtcbiAgfTtcblxuICBfcHJvdG8uY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLmNhbmNlbE5leHRDYWxsYmFjaygpO1xuICB9O1xuXG4gIF9wcm90by5nZXRUaW1lb3V0cyA9IGZ1bmN0aW9uIGdldFRpbWVvdXRzKCkge1xuICAgIHZhciB0aW1lb3V0ID0gdGhpcy5wcm9wcy50aW1lb3V0O1xuICAgIHZhciBleGl0LCBlbnRlciwgYXBwZWFyO1xuICAgIGV4aXQgPSBlbnRlciA9IGFwcGVhciA9IHRpbWVvdXQ7XG5cbiAgICBpZiAodGltZW91dCAhPSBudWxsICYmIHR5cGVvZiB0aW1lb3V0ICE9PSAnbnVtYmVyJykge1xuICAgICAgZXhpdCA9IHRpbWVvdXQuZXhpdDtcbiAgICAgIGVudGVyID0gdGltZW91dC5lbnRlcjsgLy8gVE9ETzogcmVtb3ZlIGZhbGxiYWNrIGZvciBuZXh0IG1ham9yXG5cbiAgICAgIGFwcGVhciA9IHRpbWVvdXQuYXBwZWFyICE9PSB1bmRlZmluZWQgPyB0aW1lb3V0LmFwcGVhciA6IGVudGVyO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBleGl0OiBleGl0LFxuICAgICAgZW50ZXI6IGVudGVyLFxuICAgICAgYXBwZWFyOiBhcHBlYXJcbiAgICB9O1xuICB9O1xuXG4gIF9wcm90by51cGRhdGVTdGF0dXMgPSBmdW5jdGlvbiB1cGRhdGVTdGF0dXMobW91bnRpbmcsIG5leHRTdGF0dXMpIHtcbiAgICBpZiAobW91bnRpbmcgPT09IHZvaWQgMCkge1xuICAgICAgbW91bnRpbmcgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAobmV4dFN0YXR1cyAhPT0gbnVsbCkge1xuICAgICAgLy8gbmV4dFN0YXR1cyB3aWxsIGFsd2F5cyBiZSBFTlRFUklORyBvciBFWElUSU5HLlxuICAgICAgdGhpcy5jYW5jZWxOZXh0Q2FsbGJhY2soKTtcbiAgICAgIHZhciBub2RlID0gUmVhY3RET00uZmluZERPTU5vZGUodGhpcyk7XG5cbiAgICAgIGlmIChuZXh0U3RhdHVzID09PSBFTlRFUklORykge1xuICAgICAgICB0aGlzLnBlcmZvcm1FbnRlcihub2RlLCBtb3VudGluZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBlcmZvcm1FeGl0KG5vZGUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy51bm1vdW50T25FeGl0ICYmIHRoaXMuc3RhdGUuc3RhdHVzID09PSBFWElURUQpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBzdGF0dXM6IFVOTU9VTlRFRFxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5wZXJmb3JtRW50ZXIgPSBmdW5jdGlvbiBwZXJmb3JtRW50ZXIobm9kZSwgbW91bnRpbmcpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIHZhciBlbnRlciA9IHRoaXMucHJvcHMuZW50ZXI7XG4gICAgdmFyIGFwcGVhcmluZyA9IHRoaXMuY29udGV4dCA/IHRoaXMuY29udGV4dC5pc01vdW50aW5nIDogbW91bnRpbmc7XG4gICAgdmFyIHRpbWVvdXRzID0gdGhpcy5nZXRUaW1lb3V0cygpO1xuICAgIHZhciBlbnRlclRpbWVvdXQgPSBhcHBlYXJpbmcgPyB0aW1lb3V0cy5hcHBlYXIgOiB0aW1lb3V0cy5lbnRlcjsgLy8gbm8gZW50ZXIgYW5pbWF0aW9uIHNraXAgcmlnaHQgdG8gRU5URVJFRFxuICAgIC8vIGlmIHdlIGFyZSBtb3VudGluZyBhbmQgcnVubmluZyB0aGlzIGl0IG1lYW5zIGFwcGVhciBfbXVzdF8gYmUgc2V0XG5cbiAgICBpZiAoIW1vdW50aW5nICYmICFlbnRlciB8fCBjb25maWcuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuc2FmZVNldFN0YXRlKHtcbiAgICAgICAgc3RhdHVzOiBFTlRFUkVEXG4gICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMi5wcm9wcy5vbkVudGVyZWQobm9kZSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnByb3BzLm9uRW50ZXIobm9kZSwgYXBwZWFyaW5nKTtcbiAgICB0aGlzLnNhZmVTZXRTdGF0ZSh7XG4gICAgICBzdGF0dXM6IEVOVEVSSU5HXG4gICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMyLnByb3BzLm9uRW50ZXJpbmcobm9kZSwgYXBwZWFyaW5nKTtcblxuICAgICAgX3RoaXMyLm9uVHJhbnNpdGlvbkVuZChub2RlLCBlbnRlclRpbWVvdXQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMyLnNhZmVTZXRTdGF0ZSh7XG4gICAgICAgICAgc3RhdHVzOiBFTlRFUkVEXG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpczIucHJvcHMub25FbnRlcmVkKG5vZGUsIGFwcGVhcmluZyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLnBlcmZvcm1FeGl0ID0gZnVuY3Rpb24gcGVyZm9ybUV4aXQobm9kZSkge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgdmFyIGV4aXQgPSB0aGlzLnByb3BzLmV4aXQ7XG4gICAgdmFyIHRpbWVvdXRzID0gdGhpcy5nZXRUaW1lb3V0cygpOyAvLyBubyBleGl0IGFuaW1hdGlvbiBza2lwIHJpZ2h0IHRvIEVYSVRFRFxuXG4gICAgaWYgKCFleGl0IHx8IGNvbmZpZy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5zYWZlU2V0U3RhdGUoe1xuICAgICAgICBzdGF0dXM6IEVYSVRFRFxuICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczMucHJvcHMub25FeGl0ZWQobm9kZSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnByb3BzLm9uRXhpdChub2RlKTtcbiAgICB0aGlzLnNhZmVTZXRTdGF0ZSh7XG4gICAgICBzdGF0dXM6IEVYSVRJTkdcbiAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczMucHJvcHMub25FeGl0aW5nKG5vZGUpO1xuXG4gICAgICBfdGhpczMub25UcmFuc2l0aW9uRW5kKG5vZGUsIHRpbWVvdXRzLmV4aXQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMzLnNhZmVTZXRTdGF0ZSh7XG4gICAgICAgICAgc3RhdHVzOiBFWElURURcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzMy5wcm9wcy5vbkV4aXRlZChub2RlKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uY2FuY2VsTmV4dENhbGxiYWNrID0gZnVuY3Rpb24gY2FuY2VsTmV4dENhbGxiYWNrKCkge1xuICAgIGlmICh0aGlzLm5leHRDYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5uZXh0Q2FsbGJhY2suY2FuY2VsKCk7XG4gICAgICB0aGlzLm5leHRDYWxsYmFjayA9IG51bGw7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5zYWZlU2V0U3RhdGUgPSBmdW5jdGlvbiBzYWZlU2V0U3RhdGUobmV4dFN0YXRlLCBjYWxsYmFjaykge1xuICAgIC8vIFRoaXMgc2hvdWxkbid0IGJlIG5lY2Vzc2FyeSwgYnV0IHRoZXJlIGFyZSB3ZWlyZCByYWNlIGNvbmRpdGlvbnMgd2l0aFxuICAgIC8vIHNldFN0YXRlIGNhbGxiYWNrcyBhbmQgdW5tb3VudGluZyBpbiB0ZXN0aW5nLCBzbyBhbHdheXMgbWFrZSBzdXJlIHRoYXRcbiAgICAvLyB3ZSBjYW4gY2FuY2VsIGFueSBwZW5kaW5nIHNldFN0YXRlIGNhbGxiYWNrcyBhZnRlciB3ZSB1bm1vdW50LlxuICAgIGNhbGxiYWNrID0gdGhpcy5zZXROZXh0Q2FsbGJhY2soY2FsbGJhY2spO1xuICAgIHRoaXMuc2V0U3RhdGUobmV4dFN0YXRlLCBjYWxsYmFjayk7XG4gIH07XG5cbiAgX3Byb3RvLnNldE5leHRDYWxsYmFjayA9IGZ1bmN0aW9uIHNldE5leHRDYWxsYmFjayhjYWxsYmFjaykge1xuICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgdmFyIGFjdGl2ZSA9IHRydWU7XG5cbiAgICB0aGlzLm5leHRDYWxsYmFjayA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKGFjdGl2ZSkge1xuICAgICAgICBhY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgX3RoaXM0Lm5leHRDYWxsYmFjayA9IG51bGw7XG4gICAgICAgIGNhbGxiYWNrKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5uZXh0Q2FsbGJhY2suY2FuY2VsID0gZnVuY3Rpb24gKCkge1xuICAgICAgYWN0aXZlID0gZmFsc2U7XG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLm5leHRDYWxsYmFjaztcbiAgfTtcblxuICBfcHJvdG8ub25UcmFuc2l0aW9uRW5kID0gZnVuY3Rpb24gb25UcmFuc2l0aW9uRW5kKG5vZGUsIHRpbWVvdXQsIGhhbmRsZXIpIHtcbiAgICB0aGlzLnNldE5leHRDYWxsYmFjayhoYW5kbGVyKTtcbiAgICB2YXIgZG9lc05vdEhhdmVUaW1lb3V0T3JMaXN0ZW5lciA9IHRpbWVvdXQgPT0gbnVsbCAmJiAhdGhpcy5wcm9wcy5hZGRFbmRMaXN0ZW5lcjtcblxuICAgIGlmICghbm9kZSB8fCBkb2VzTm90SGF2ZVRpbWVvdXRPckxpc3RlbmVyKSB7XG4gICAgICBzZXRUaW1lb3V0KHRoaXMubmV4dENhbGxiYWNrLCAwKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wcm9wcy5hZGRFbmRMaXN0ZW5lcikge1xuICAgICAgdGhpcy5wcm9wcy5hZGRFbmRMaXN0ZW5lcihub2RlLCB0aGlzLm5leHRDYWxsYmFjayk7XG4gICAgfVxuXG4gICAgaWYgKHRpbWVvdXQgIT0gbnVsbCkge1xuICAgICAgc2V0VGltZW91dCh0aGlzLm5leHRDYWxsYmFjaywgdGltZW91dCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgdmFyIHN0YXR1cyA9IHRoaXMuc3RhdGUuc3RhdHVzO1xuXG4gICAgaWYgKHN0YXR1cyA9PT0gVU5NT1VOVEVEKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzLmNoaWxkcmVuLFxuICAgICAgICBjaGlsZFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3RoaXMkcHJvcHMsIFtcImNoaWxkcmVuXCJdKTsgLy8gZmlsdGVyIHByb3BzIGZvciBUcmFuc3RpdGlvblxuXG5cbiAgICBkZWxldGUgY2hpbGRQcm9wcy5pbjtcbiAgICBkZWxldGUgY2hpbGRQcm9wcy5tb3VudE9uRW50ZXI7XG4gICAgZGVsZXRlIGNoaWxkUHJvcHMudW5tb3VudE9uRXhpdDtcbiAgICBkZWxldGUgY2hpbGRQcm9wcy5hcHBlYXI7XG4gICAgZGVsZXRlIGNoaWxkUHJvcHMuZW50ZXI7XG4gICAgZGVsZXRlIGNoaWxkUHJvcHMuZXhpdDtcbiAgICBkZWxldGUgY2hpbGRQcm9wcy50aW1lb3V0O1xuICAgIGRlbGV0ZSBjaGlsZFByb3BzLmFkZEVuZExpc3RlbmVyO1xuICAgIGRlbGV0ZSBjaGlsZFByb3BzLm9uRW50ZXI7XG4gICAgZGVsZXRlIGNoaWxkUHJvcHMub25FbnRlcmluZztcbiAgICBkZWxldGUgY2hpbGRQcm9wcy5vbkVudGVyZWQ7XG4gICAgZGVsZXRlIGNoaWxkUHJvcHMub25FeGl0O1xuICAgIGRlbGV0ZSBjaGlsZFByb3BzLm9uRXhpdGluZztcbiAgICBkZWxldGUgY2hpbGRQcm9wcy5vbkV4aXRlZDtcblxuICAgIGlmICh0eXBlb2YgY2hpbGRyZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIGFsbG93cyBmb3IgbmVzdGVkIFRyYW5zaXRpb25zXG4gICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUcmFuc2l0aW9uR3JvdXBDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICAgIHZhbHVlOiBudWxsXG4gICAgICB9LCBjaGlsZHJlbihzdGF0dXMsIGNoaWxkUHJvcHMpKTtcbiAgICB9XG5cbiAgICB2YXIgY2hpbGQgPSBSZWFjdC5DaGlsZHJlbi5vbmx5KGNoaWxkcmVuKTtcbiAgICByZXR1cm4gKC8vIGFsbG93cyBmb3IgbmVzdGVkIFRyYW5zaXRpb25zXG4gICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zaXRpb25Hcm91cENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgIH0sIFJlYWN0LmNsb25lRWxlbWVudChjaGlsZCwgY2hpbGRQcm9wcykpXG4gICAgKTtcbiAgfTtcblxuICByZXR1cm4gVHJhbnNpdGlvbjtcbn0oUmVhY3QuQ29tcG9uZW50KTtcblxuVHJhbnNpdGlvbi5jb250ZXh0VHlwZSA9IFRyYW5zaXRpb25Hcm91cENvbnRleHQ7XG5UcmFuc2l0aW9uLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgLyoqXG4gICAqIEEgYGZ1bmN0aW9uYCBjaGlsZCBjYW4gYmUgdXNlZCBpbnN0ZWFkIG9mIGEgUmVhY3QgZWxlbWVudC4gVGhpcyBmdW5jdGlvbiBpc1xuICAgKiBjYWxsZWQgd2l0aCB0aGUgY3VycmVudCB0cmFuc2l0aW9uIHN0YXR1cyAoYCdlbnRlcmluZydgLCBgJ2VudGVyZWQnYCxcbiAgICogYCdleGl0aW5nJ2AsIGAnZXhpdGVkJ2ApLCB3aGljaCBjYW4gYmUgdXNlZCB0byBhcHBseSBjb250ZXh0XG4gICAqIHNwZWNpZmljIHByb3BzIHRvIGEgY29tcG9uZW50LlxuICAgKlxuICAgKiBgYGBqc3hcbiAgICogPFRyYW5zaXRpb24gaW49e3RoaXMuc3RhdGUuaW59IHRpbWVvdXQ9ezE1MH0+XG4gICAqICAge3N0YXRlID0+IChcbiAgICogICAgIDxNeUNvbXBvbmVudCBjbGFzc05hbWU9e2BmYWRlIGZhZGUtJHtzdGF0ZX1gfSAvPlxuICAgKiAgICl9XG4gICAqIDwvVHJhbnNpdGlvbj5cbiAgICogYGBgXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAqIFNob3cgdGhlIGNvbXBvbmVudDsgdHJpZ2dlcnMgdGhlIGVudGVyIG9yIGV4aXQgc3RhdGVzXG4gICAqL1xuICBpbjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQgdGhlIGNoaWxkIGNvbXBvbmVudCBpcyBtb3VudGVkIGltbWVkaWF0ZWx5IGFsb25nIHdpdGhcbiAgICogdGhlIHBhcmVudCBgVHJhbnNpdGlvbmAgY29tcG9uZW50LiBJZiB5b3Ugd2FudCB0byBcImxhenkgbW91bnRcIiB0aGUgY29tcG9uZW50IG9uIHRoZVxuICAgKiBmaXJzdCBgaW49e3RydWV9YCB5b3UgY2FuIHNldCBgbW91bnRPbkVudGVyYC4gQWZ0ZXIgdGhlIGZpcnN0IGVudGVyIHRyYW5zaXRpb24gdGhlIGNvbXBvbmVudCB3aWxsIHN0YXlcbiAgICogbW91bnRlZCwgZXZlbiBvbiBcImV4aXRlZFwiLCB1bmxlc3MgeW91IGFsc28gc3BlY2lmeSBgdW5tb3VudE9uRXhpdGAuXG4gICAqL1xuICBtb3VudE9uRW50ZXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IHRoZSBjaGlsZCBjb21wb25lbnQgc3RheXMgbW91bnRlZCBhZnRlciBpdCByZWFjaGVzIHRoZSBgJ2V4aXRlZCdgIHN0YXRlLlxuICAgKiBTZXQgYHVubW91bnRPbkV4aXRgIGlmIHlvdSdkIHByZWZlciB0byB1bm1vdW50IHRoZSBjb21wb25lbnQgYWZ0ZXIgaXQgZmluaXNoZXMgZXhpdGluZy5cbiAgICovXG4gIHVubW91bnRPbkV4aXQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBOb3JtYWxseSBhIGNvbXBvbmVudCBpcyBub3QgdHJhbnNpdGlvbmVkIGlmIGl0IGlzIHNob3duIHdoZW4gdGhlIGA8VHJhbnNpdGlvbj5gIGNvbXBvbmVudCBtb3VudHMuXG4gICAqIElmIHlvdSB3YW50IHRvIHRyYW5zaXRpb24gb24gdGhlIGZpcnN0IG1vdW50IHNldCBgYXBwZWFyYCB0byBgdHJ1ZWAsIGFuZCB0aGVcbiAgICogY29tcG9uZW50IHdpbGwgdHJhbnNpdGlvbiBpbiBhcyBzb29uIGFzIHRoZSBgPFRyYW5zaXRpb24+YCBtb3VudHMuXG4gICAqXG4gICAqID4gTm90ZTogdGhlcmUgYXJlIG5vIHNwZWNpZmljIFwiYXBwZWFyXCIgc3RhdGVzLiBgYXBwZWFyYCBvbmx5IGFkZHMgYW4gYWRkaXRpb25hbCBgZW50ZXJgIHRyYW5zaXRpb24uXG4gICAqL1xuICBhcHBlYXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBFbmFibGUgb3IgZGlzYWJsZSBlbnRlciB0cmFuc2l0aW9ucy5cbiAgICovXG4gIGVudGVyOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogRW5hYmxlIG9yIGRpc2FibGUgZXhpdCB0cmFuc2l0aW9ucy5cbiAgICovXG4gIGV4aXQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBUaGUgZHVyYXRpb24gb2YgdGhlIHRyYW5zaXRpb24sIGluIG1pbGxpc2Vjb25kcy5cbiAgICogUmVxdWlyZWQgdW5sZXNzIGBhZGRFbmRMaXN0ZW5lcmAgaXMgcHJvdmlkZWQuXG4gICAqXG4gICAqIFlvdSBtYXkgc3BlY2lmeSBhIHNpbmdsZSB0aW1lb3V0IGZvciBhbGwgdHJhbnNpdGlvbnM6XG4gICAqXG4gICAqIGBgYGpzeFxuICAgKiB0aW1lb3V0PXs1MDB9XG4gICAqIGBgYFxuICAgKlxuICAgKiBvciBpbmRpdmlkdWFsbHk6XG4gICAqXG4gICAqIGBgYGpzeFxuICAgKiB0aW1lb3V0PXt7XG4gICAqICBhcHBlYXI6IDUwMCxcbiAgICogIGVudGVyOiAzMDAsXG4gICAqICBleGl0OiA1MDAsXG4gICAqIH19XG4gICAqIGBgYFxuICAgKlxuICAgKiAtIGBhcHBlYXJgIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSBvZiBgZW50ZXJgXG4gICAqIC0gYGVudGVyYCBkZWZhdWx0cyB0byBgMGBcbiAgICogLSBgZXhpdGAgZGVmYXVsdHMgdG8gYDBgXG4gICAqXG4gICAqIEB0eXBlIHtudW1iZXIgfCB7IGVudGVyPzogbnVtYmVyLCBleGl0PzogbnVtYmVyLCBhcHBlYXI/OiBudW1iZXIgfX1cbiAgICovXG4gIHRpbWVvdXQ6IGZ1bmN0aW9uIHRpbWVvdXQocHJvcHMpIHtcbiAgICB2YXIgcHQgPSB0aW1lb3V0c1NoYXBlO1xuICAgIGlmICghcHJvcHMuYWRkRW5kTGlzdGVuZXIpIHB0ID0gcHQuaXNSZXF1aXJlZDtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHJldHVybiBwdC5hcHBseSh2b2lkIDAsIFtwcm9wc10uY29uY2F0KGFyZ3MpKTtcbiAgfSxcblxuICAvKipcbiAgICogQWRkIGEgY3VzdG9tIHRyYW5zaXRpb24gZW5kIHRyaWdnZXIuIENhbGxlZCB3aXRoIHRoZSB0cmFuc2l0aW9uaW5nXG4gICAqIERPTSBub2RlIGFuZCBhIGBkb25lYCBjYWxsYmFjay4gQWxsb3dzIGZvciBtb3JlIGZpbmUgZ3JhaW5lZCB0cmFuc2l0aW9uIGVuZFxuICAgKiBsb2dpYy4gKipOb3RlOioqIFRpbWVvdXRzIGFyZSBzdGlsbCB1c2VkIGFzIGEgZmFsbGJhY2sgaWYgcHJvdmlkZWQuXG4gICAqXG4gICAqIGBgYGpzeFxuICAgKiBhZGRFbmRMaXN0ZW5lcj17KG5vZGUsIGRvbmUpID0+IHtcbiAgICogICAvLyB1c2UgdGhlIGNzcyB0cmFuc2l0aW9uZW5kIGV2ZW50IHRvIG1hcmsgdGhlIGZpbmlzaCBvZiBhIHRyYW5zaXRpb25cbiAgICogICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCBkb25lLCBmYWxzZSk7XG4gICAqIH19XG4gICAqIGBgYFxuICAgKi9cbiAgYWRkRW5kTGlzdGVuZXI6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCBiZWZvcmUgdGhlIFwiZW50ZXJpbmdcIiBzdGF0dXMgaXMgYXBwbGllZC4gQW4gZXh0cmEgcGFyYW1ldGVyXG4gICAqIGBpc0FwcGVhcmluZ2AgaXMgc3VwcGxpZWQgdG8gaW5kaWNhdGUgaWYgdGhlIGVudGVyIHN0YWdlIGlzIG9jY3VycmluZyBvbiB0aGUgaW5pdGlhbCBtb3VudFxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCwgaXNBcHBlYXJpbmc6IGJvb2wpIC0+IHZvaWRcbiAgICovXG4gIG9uRW50ZXI6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCBhZnRlciB0aGUgXCJlbnRlcmluZ1wiIHN0YXR1cyBpcyBhcHBsaWVkLiBBbiBleHRyYSBwYXJhbWV0ZXJcbiAgICogYGlzQXBwZWFyaW5nYCBpcyBzdXBwbGllZCB0byBpbmRpY2F0ZSBpZiB0aGUgZW50ZXIgc3RhZ2UgaXMgb2NjdXJyaW5nIG9uIHRoZSBpbml0aWFsIG1vdW50XG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50LCBpc0FwcGVhcmluZzogYm9vbClcbiAgICovXG4gIG9uRW50ZXJpbmc6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCBhZnRlciB0aGUgXCJlbnRlcmVkXCIgc3RhdHVzIGlzIGFwcGxpZWQuIEFuIGV4dHJhIHBhcmFtZXRlclxuICAgKiBgaXNBcHBlYXJpbmdgIGlzIHN1cHBsaWVkIHRvIGluZGljYXRlIGlmIHRoZSBlbnRlciBzdGFnZSBpcyBvY2N1cnJpbmcgb24gdGhlIGluaXRpYWwgbW91bnRcbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQsIGlzQXBwZWFyaW5nOiBib29sKSAtPiB2b2lkXG4gICAqL1xuICBvbkVudGVyZWQ6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCBiZWZvcmUgdGhlIFwiZXhpdGluZ1wiIHN0YXR1cyBpcyBhcHBsaWVkLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCkgLT4gdm9pZFxuICAgKi9cbiAgb25FeGl0OiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgYWZ0ZXIgdGhlIFwiZXhpdGluZ1wiIHN0YXR1cyBpcyBhcHBsaWVkLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCkgLT4gdm9pZFxuICAgKi9cbiAgb25FeGl0aW5nOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgYWZ0ZXIgdGhlIFwiZXhpdGVkXCIgc3RhdHVzIGlzIGFwcGxpZWQuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50KSAtPiB2b2lkXG4gICAqL1xuICBvbkV4aXRlZDogUHJvcFR5cGVzLmZ1bmMgLy8gTmFtZSB0aGUgZnVuY3Rpb24gc28gaXQgaXMgY2xlYXJlciBpbiB0aGUgZG9jdW1lbnRhdGlvblxuXG59IDoge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5UcmFuc2l0aW9uLmRlZmF1bHRQcm9wcyA9IHtcbiAgaW46IGZhbHNlLFxuICBtb3VudE9uRW50ZXI6IGZhbHNlLFxuICB1bm1vdW50T25FeGl0OiBmYWxzZSxcbiAgYXBwZWFyOiBmYWxzZSxcbiAgZW50ZXI6IHRydWUsXG4gIGV4aXQ6IHRydWUsXG4gIG9uRW50ZXI6IG5vb3AsXG4gIG9uRW50ZXJpbmc6IG5vb3AsXG4gIG9uRW50ZXJlZDogbm9vcCxcbiAgb25FeGl0OiBub29wLFxuICBvbkV4aXRpbmc6IG5vb3AsXG4gIG9uRXhpdGVkOiBub29wXG59O1xuVHJhbnNpdGlvbi5VTk1PVU5URUQgPSAwO1xuVHJhbnNpdGlvbi5FWElURUQgPSAxO1xuVHJhbnNpdGlvbi5FTlRFUklORyA9IDI7XG5UcmFuc2l0aW9uLkVOVEVSRUQgPSAzO1xuVHJhbnNpdGlvbi5FWElUSU5HID0gNDtcbmV4cG9ydCBkZWZhdWx0IFRyYW5zaXRpb247XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9UcmFuc2l0aW9uLmpzXG4vLyBtb2R1bGUgaWQgPSAxOVxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV8yMF9fO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIHtcInJvb3RcIjpcIlJlYWN0RE9NXCIsXCJjb21tb25qczJcIjpcInJlYWN0LWRvbVwiLFwiY29tbW9uanNcIjpcInJlYWN0LWRvbVwiLFwiYW1kXCI6XCJyZWFjdC1kb21cIn1cbi8vIG1vZHVsZSBpZCA9IDIwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIiwiZXhwb3J0IGRlZmF1bHQge1xuICBkaXNhYmxlZDogZmFsc2Vcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9jb25maWcuanNcbi8vIG1vZHVsZSBpZCA9IDIxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIiwiaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmV4cG9ydCB2YXIgdGltZW91dHNTaGFwZSA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc2hhcGUoe1xuICBlbnRlcjogUHJvcFR5cGVzLm51bWJlcixcbiAgZXhpdDogUHJvcFR5cGVzLm51bWJlcixcbiAgYXBwZWFyOiBQcm9wVHlwZXMubnVtYmVyXG59KS5pc1JlcXVpcmVkXSkgOiBudWxsO1xuZXhwb3J0IHZhciBjbGFzc05hbWVzU2hhcGUgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLnNoYXBlKHtcbiAgZW50ZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGV4aXQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGFjdGl2ZTogUHJvcFR5cGVzLnN0cmluZ1xufSksIFByb3BUeXBlcy5zaGFwZSh7XG4gIGVudGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBlbnRlckRvbmU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGVudGVyQWN0aXZlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBleGl0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICBleGl0RG9uZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgZXhpdEFjdGl2ZTogUHJvcFR5cGVzLnN0cmluZ1xufSldKSA6IG51bGw7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS91dGlscy9Qcm9wVHlwZXMuanNcbi8vIG1vZHVsZSBpZCA9IDIyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCBkZWZhdWx0IFJlYWN0LmNyZWF0ZUNvbnRleHQobnVsbCk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9UcmFuc2l0aW9uR3JvdXBDb250ZXh0LmpzXG4vLyBtb2R1bGUgaWQgPSAyM1xuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSIsImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcbmltcG9ydCBfYXNzZXJ0VGhpc0luaXRpYWxpemVkIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWRcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFRyYW5zaXRpb25Hcm91cENvbnRleHQgZnJvbSAnLi9UcmFuc2l0aW9uR3JvdXBDb250ZXh0JztcbmltcG9ydCB7IGdldENoaWxkTWFwcGluZywgZ2V0SW5pdGlhbENoaWxkTWFwcGluZywgZ2V0TmV4dENoaWxkTWFwcGluZyB9IGZyb20gJy4vdXRpbHMvQ2hpbGRNYXBwaW5nJztcblxudmFyIHZhbHVlcyA9IE9iamVjdC52YWx1ZXMgfHwgZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5tYXAoZnVuY3Rpb24gKGspIHtcbiAgICByZXR1cm4gb2JqW2tdO1xuICB9KTtcbn07XG5cbnZhciBkZWZhdWx0UHJvcHMgPSB7XG4gIGNvbXBvbmVudDogJ2RpdicsXG4gIGNoaWxkRmFjdG9yeTogZnVuY3Rpb24gY2hpbGRGYWN0b3J5KGNoaWxkKSB7XG4gICAgcmV0dXJuIGNoaWxkO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgYDxUcmFuc2l0aW9uR3JvdXA+YCBjb21wb25lbnQgbWFuYWdlcyBhIHNldCBvZiB0cmFuc2l0aW9uIGNvbXBvbmVudHNcbiAgICogKGA8VHJhbnNpdGlvbj5gIGFuZCBgPENTU1RyYW5zaXRpb24+YCkgaW4gYSBsaXN0LiBMaWtlIHdpdGggdGhlIHRyYW5zaXRpb25cbiAgICogY29tcG9uZW50cywgYDxUcmFuc2l0aW9uR3JvdXA+YCBpcyBhIHN0YXRlIG1hY2hpbmUgZm9yIG1hbmFnaW5nIHRoZSBtb3VudGluZ1xuICAgKiBhbmQgdW5tb3VudGluZyBvZiBjb21wb25lbnRzIG92ZXIgdGltZS5cbiAgICpcbiAgICogQ29uc2lkZXIgdGhlIGV4YW1wbGUgYmVsb3cuIEFzIGl0ZW1zIGFyZSByZW1vdmVkIG9yIGFkZGVkIHRvIHRoZSBUb2RvTGlzdCB0aGVcbiAgICogYGluYCBwcm9wIGlzIHRvZ2dsZWQgYXV0b21hdGljYWxseSBieSB0aGUgYDxUcmFuc2l0aW9uR3JvdXA+YC5cbiAgICpcbiAgICogTm90ZSB0aGF0IGA8VHJhbnNpdGlvbkdyb3VwPmAgIGRvZXMgbm90IGRlZmluZSBhbnkgYW5pbWF0aW9uIGJlaGF2aW9yIVxuICAgKiBFeGFjdGx5IF9ob3dfIGEgbGlzdCBpdGVtIGFuaW1hdGVzIGlzIHVwIHRvIHRoZSBpbmRpdmlkdWFsIHRyYW5zaXRpb25cbiAgICogY29tcG9uZW50LiBUaGlzIG1lYW5zIHlvdSBjYW4gbWl4IGFuZCBtYXRjaCBhbmltYXRpb25zIGFjcm9zcyBkaWZmZXJlbnQgbGlzdFxuICAgKiBpdGVtcy5cbiAgICovXG5cbn07XG5cbnZhciBUcmFuc2l0aW9uR3JvdXAgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzTG9vc2UoVHJhbnNpdGlvbkdyb3VwLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBUcmFuc2l0aW9uR3JvdXAocHJvcHMsIGNvbnRleHQpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfdGhpcyA9IF9SZWFjdCRDb21wb25lbnQuY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCkgfHwgdGhpcztcblxuICAgIHZhciBoYW5kbGVFeGl0ZWQgPSBfdGhpcy5oYW5kbGVFeGl0ZWQuYmluZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSk7IC8vIEluaXRpYWwgY2hpbGRyZW4gc2hvdWxkIGFsbCBiZSBlbnRlcmluZywgZGVwZW5kZW50IG9uIGFwcGVhclxuXG5cbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGNvbnRleHRWYWx1ZToge1xuICAgICAgICBpc01vdW50aW5nOiB0cnVlXG4gICAgICB9LFxuICAgICAgaGFuZGxlRXhpdGVkOiBoYW5kbGVFeGl0ZWQsXG4gICAgICBmaXJzdFJlbmRlcjogdHJ1ZVxuICAgIH07XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFRyYW5zaXRpb25Hcm91cC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy5tb3VudGVkID0gdHJ1ZTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGNvbnRleHRWYWx1ZToge1xuICAgICAgICBpc01vdW50aW5nOiBmYWxzZVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHRoaXMubW91bnRlZCA9IGZhbHNlO1xuICB9O1xuXG4gIFRyYW5zaXRpb25Hcm91cC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSBmdW5jdGlvbiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMobmV4dFByb3BzLCBfcmVmKSB7XG4gICAgdmFyIHByZXZDaGlsZE1hcHBpbmcgPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgICBoYW5kbGVFeGl0ZWQgPSBfcmVmLmhhbmRsZUV4aXRlZCxcbiAgICAgICAgZmlyc3RSZW5kZXIgPSBfcmVmLmZpcnN0UmVuZGVyO1xuICAgIHJldHVybiB7XG4gICAgICBjaGlsZHJlbjogZmlyc3RSZW5kZXIgPyBnZXRJbml0aWFsQ2hpbGRNYXBwaW5nKG5leHRQcm9wcywgaGFuZGxlRXhpdGVkKSA6IGdldE5leHRDaGlsZE1hcHBpbmcobmV4dFByb3BzLCBwcmV2Q2hpbGRNYXBwaW5nLCBoYW5kbGVFeGl0ZWQpLFxuICAgICAgZmlyc3RSZW5kZXI6IGZhbHNlXG4gICAgfTtcbiAgfTtcblxuICBfcHJvdG8uaGFuZGxlRXhpdGVkID0gZnVuY3Rpb24gaGFuZGxlRXhpdGVkKGNoaWxkLCBub2RlKSB7XG4gICAgdmFyIGN1cnJlbnRDaGlsZE1hcHBpbmcgPSBnZXRDaGlsZE1hcHBpbmcodGhpcy5wcm9wcy5jaGlsZHJlbik7XG4gICAgaWYgKGNoaWxkLmtleSBpbiBjdXJyZW50Q2hpbGRNYXBwaW5nKSByZXR1cm47XG5cbiAgICBpZiAoY2hpbGQucHJvcHMub25FeGl0ZWQpIHtcbiAgICAgIGNoaWxkLnByb3BzLm9uRXhpdGVkKG5vZGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm1vdW50ZWQpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKHN0YXRlKSB7XG4gICAgICAgIHZhciBjaGlsZHJlbiA9IF9leHRlbmRzKHt9LCBzdGF0ZS5jaGlsZHJlbik7XG5cbiAgICAgICAgZGVsZXRlIGNoaWxkcmVuW2NoaWxkLmtleV07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBDb21wb25lbnQgPSBfdGhpcyRwcm9wcy5jb21wb25lbnQsXG4gICAgICAgIGNoaWxkRmFjdG9yeSA9IF90aGlzJHByb3BzLmNoaWxkRmFjdG9yeSxcbiAgICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfdGhpcyRwcm9wcywgW1wiY29tcG9uZW50XCIsIFwiY2hpbGRGYWN0b3J5XCJdKTtcblxuICAgIHZhciBjb250ZXh0VmFsdWUgPSB0aGlzLnN0YXRlLmNvbnRleHRWYWx1ZTtcbiAgICB2YXIgY2hpbGRyZW4gPSB2YWx1ZXModGhpcy5zdGF0ZS5jaGlsZHJlbikubWFwKGNoaWxkRmFjdG9yeSk7XG4gICAgZGVsZXRlIHByb3BzLmFwcGVhcjtcbiAgICBkZWxldGUgcHJvcHMuZW50ZXI7XG4gICAgZGVsZXRlIHByb3BzLmV4aXQ7XG5cbiAgICBpZiAoQ29tcG9uZW50ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUcmFuc2l0aW9uR3JvdXBDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICAgIHZhbHVlOiBjb250ZXh0VmFsdWVcbiAgICAgIH0sIGNoaWxkcmVuKTtcbiAgICB9XG5cbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUcmFuc2l0aW9uR3JvdXBDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICB2YWx1ZTogY29udGV4dFZhbHVlXG4gICAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChDb21wb25lbnQsIHByb3BzLCBjaGlsZHJlbikpO1xuICB9O1xuXG4gIHJldHVybiBUcmFuc2l0aW9uR3JvdXA7XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cblRyYW5zaXRpb25Hcm91cC5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIC8qKlxuICAgKiBgPFRyYW5zaXRpb25Hcm91cD5gIHJlbmRlcnMgYSBgPGRpdj5gIGJ5IGRlZmF1bHQuIFlvdSBjYW4gY2hhbmdlIHRoaXNcbiAgICogYmVoYXZpb3IgYnkgcHJvdmlkaW5nIGEgYGNvbXBvbmVudGAgcHJvcC5cbiAgICogSWYgeW91IHVzZSBSZWFjdCB2MTYrIGFuZCB3b3VsZCBsaWtlIHRvIGF2b2lkIGEgd3JhcHBpbmcgYDxkaXY+YCBlbGVtZW50XG4gICAqIHlvdSBjYW4gcGFzcyBpbiBgY29tcG9uZW50PXtudWxsfWAuIFRoaXMgaXMgdXNlZnVsIGlmIHRoZSB3cmFwcGluZyBkaXZcbiAgICogYm9ya3MgeW91ciBjc3Mgc3R5bGVzLlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgKiBBIHNldCBvZiBgPFRyYW5zaXRpb24+YCBjb21wb25lbnRzLCB0aGF0IGFyZSB0b2dnbGVkIGBpbmAgYW5kIG91dCBhcyB0aGV5XG4gICAqIGxlYXZlLiB0aGUgYDxUcmFuc2l0aW9uR3JvdXA+YCB3aWxsIGluamVjdCBzcGVjaWZpYyB0cmFuc2l0aW9uIHByb3BzLCBzb1xuICAgKiByZW1lbWJlciB0byBzcHJlYWQgdGhlbSB0aHJvdWdoIGlmIHlvdSBhcmUgd3JhcHBpbmcgdGhlIGA8VHJhbnNpdGlvbj5gIGFzXG4gICAqIHdpdGggb3VyIGA8RmFkZT5gIGV4YW1wbGUuXG4gICAqXG4gICAqIFdoaWxlIHRoaXMgY29tcG9uZW50IGlzIG1lYW50IGZvciBtdWx0aXBsZSBgVHJhbnNpdGlvbmAgb3IgYENTU1RyYW5zaXRpb25gXG4gICAqIGNoaWxkcmVuLCBzb21ldGltZXMgeW91IG1heSB3YW50IHRvIGhhdmUgYSBzaW5nbGUgdHJhbnNpdGlvbiBjaGlsZCB3aXRoXG4gICAqIGNvbnRlbnQgdGhhdCB5b3Ugd2FudCB0byBiZSB0cmFuc2l0aW9uZWQgb3V0IGFuZCBpbiB3aGVuIHlvdSBjaGFuZ2UgaXRcbiAgICogKGUuZy4gcm91dGVzLCBpbWFnZXMgZXRjLikgSW4gdGhhdCBjYXNlIHlvdSBjYW4gY2hhbmdlIHRoZSBga2V5YCBwcm9wIG9mXG4gICAqIHRoZSB0cmFuc2l0aW9uIGNoaWxkIGFzIHlvdSBjaGFuZ2UgaXRzIGNvbnRlbnQsIHRoaXMgd2lsbCBjYXVzZVxuICAgKiBgVHJhbnNpdGlvbkdyb3VwYCB0byB0cmFuc2l0aW9uIHRoZSBjaGlsZCBvdXQgYW5kIGJhY2sgaW4uXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAqIEEgY29udmVuaWVuY2UgcHJvcCB0aGF0IGVuYWJsZXMgb3IgZGlzYWJsZXMgYXBwZWFyIGFuaW1hdGlvbnNcbiAgICogZm9yIGFsbCBjaGlsZHJlbi4gTm90ZSB0aGF0IHNwZWNpZnlpbmcgdGhpcyB3aWxsIG92ZXJyaWRlIGFueSBkZWZhdWx0cyBzZXRcbiAgICogb24gaW5kaXZpZHVhbCBjaGlsZHJlbiBUcmFuc2l0aW9ucy5cbiAgICovXG4gIGFwcGVhcjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEEgY29udmVuaWVuY2UgcHJvcCB0aGF0IGVuYWJsZXMgb3IgZGlzYWJsZXMgZW50ZXIgYW5pbWF0aW9uc1xuICAgKiBmb3IgYWxsIGNoaWxkcmVuLiBOb3RlIHRoYXQgc3BlY2lmeWluZyB0aGlzIHdpbGwgb3ZlcnJpZGUgYW55IGRlZmF1bHRzIHNldFxuICAgKiBvbiBpbmRpdmlkdWFsIGNoaWxkcmVuIFRyYW5zaXRpb25zLlxuICAgKi9cbiAgZW50ZXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBBIGNvbnZlbmllbmNlIHByb3AgdGhhdCBlbmFibGVzIG9yIGRpc2FibGVzIGV4aXQgYW5pbWF0aW9uc1xuICAgKiBmb3IgYWxsIGNoaWxkcmVuLiBOb3RlIHRoYXQgc3BlY2lmeWluZyB0aGlzIHdpbGwgb3ZlcnJpZGUgYW55IGRlZmF1bHRzIHNldFxuICAgKiBvbiBpbmRpdmlkdWFsIGNoaWxkcmVuIFRyYW5zaXRpb25zLlxuICAgKi9cbiAgZXhpdDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFlvdSBtYXkgbmVlZCB0byBhcHBseSByZWFjdGl2ZSB1cGRhdGVzIHRvIGEgY2hpbGQgYXMgaXQgaXMgZXhpdGluZy5cbiAgICogVGhpcyBpcyBnZW5lcmFsbHkgZG9uZSBieSB1c2luZyBgY2xvbmVFbGVtZW50YCBob3dldmVyIGluIHRoZSBjYXNlIG9mIGFuIGV4aXRpbmdcbiAgICogY2hpbGQgdGhlIGVsZW1lbnQgaGFzIGFscmVhZHkgYmVlbiByZW1vdmVkIGFuZCBub3QgYWNjZXNzaWJsZSB0byB0aGUgY29uc3VtZXIuXG4gICAqXG4gICAqIElmIHlvdSBkbyBuZWVkIHRvIHVwZGF0ZSBhIGNoaWxkIGFzIGl0IGxlYXZlcyB5b3UgY2FuIHByb3ZpZGUgYSBgY2hpbGRGYWN0b3J5YFxuICAgKiB0byB3cmFwIGV2ZXJ5IGNoaWxkLCBldmVuIHRoZSBvbmVzIHRoYXQgYXJlIGxlYXZpbmcuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKGNoaWxkOiBSZWFjdEVsZW1lbnQpIC0+IFJlYWN0RWxlbWVudFxuICAgKi9cbiAgY2hpbGRGYWN0b3J5OiBQcm9wVHlwZXMuZnVuY1xufSA6IHt9O1xuVHJhbnNpdGlvbkdyb3VwLmRlZmF1bHRQcm9wcyA9IGRlZmF1bHRQcm9wcztcbmV4cG9ydCBkZWZhdWx0IFRyYW5zaXRpb25Hcm91cDtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL1RyYW5zaXRpb25Hcm91cC5qc1xuLy8gbW9kdWxlIGlkID0gMjRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEiLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkge1xuICB0aGlzLl9ldmVudHMgPSB0aGlzLl9ldmVudHMgfHwge307XG4gIHRoaXMuX21heExpc3RlbmVycyA9IHRoaXMuX21heExpc3RlbmVycyB8fCB1bmRlZmluZWQ7XG59XG5tb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjtcblxuLy8gQmFja3dhcmRzLWNvbXBhdCB3aXRoIG5vZGUgMC4xMC54XG5FdmVudEVtaXR0ZXIuRXZlbnRFbWl0dGVyID0gRXZlbnRFbWl0dGVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHMgPSB1bmRlZmluZWQ7XG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9tYXhMaXN0ZW5lcnMgPSB1bmRlZmluZWQ7XG5cbi8vIEJ5IGRlZmF1bHQgRXZlbnRFbWl0dGVycyB3aWxsIHByaW50IGEgd2FybmluZyBpZiBtb3JlIHRoYW4gMTAgbGlzdGVuZXJzIGFyZVxuLy8gYWRkZWQgdG8gaXQuIFRoaXMgaXMgYSB1c2VmdWwgZGVmYXVsdCB3aGljaCBoZWxwcyBmaW5kaW5nIG1lbW9yeSBsZWFrcy5cbkV2ZW50RW1pdHRlci5kZWZhdWx0TWF4TGlzdGVuZXJzID0gMTA7XG5cbi8vIE9idmlvdXNseSBub3QgYWxsIEVtaXR0ZXJzIHNob3VsZCBiZSBsaW1pdGVkIHRvIDEwLiBUaGlzIGZ1bmN0aW9uIGFsbG93c1xuLy8gdGhhdCB0byBiZSBpbmNyZWFzZWQuIFNldCB0byB6ZXJvIGZvciB1bmxpbWl0ZWQuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnNldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uKG4pIHtcbiAgaWYgKCFpc051bWJlcihuKSB8fCBuIDwgMCB8fCBpc05hTihuKSlcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ24gbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpO1xuICB0aGlzLl9tYXhMaXN0ZW5lcnMgPSBuO1xuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uKHR5cGUpIHtcbiAgdmFyIGVyLCBoYW5kbGVyLCBsZW4sIGFyZ3MsIGksIGxpc3RlbmVycztcblxuICBpZiAoIXRoaXMuX2V2ZW50cylcbiAgICB0aGlzLl9ldmVudHMgPSB7fTtcblxuICAvLyBJZiB0aGVyZSBpcyBubyAnZXJyb3InIGV2ZW50IGxpc3RlbmVyIHRoZW4gdGhyb3cuXG4gIGlmICh0eXBlID09PSAnZXJyb3InKSB7XG4gICAgaWYgKCF0aGlzLl9ldmVudHMuZXJyb3IgfHxcbiAgICAgICAgKGlzT2JqZWN0KHRoaXMuX2V2ZW50cy5lcnJvcikgJiYgIXRoaXMuX2V2ZW50cy5lcnJvci5sZW5ndGgpKSB7XG4gICAgICBlciA9IGFyZ3VtZW50c1sxXTtcbiAgICAgIGlmIChlciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIHRocm93IGVyOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVudFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQXQgbGVhc3QgZ2l2ZSBzb21lIGtpbmQgb2YgY29udGV4dCB0byB0aGUgdXNlclxuICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdVbmNhdWdodCwgdW5zcGVjaWZpZWQgXCJlcnJvclwiIGV2ZW50LiAoJyArIGVyICsgJyknKTtcbiAgICAgICAgZXJyLmNvbnRleHQgPSBlcjtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGhhbmRsZXIgPSB0aGlzLl9ldmVudHNbdHlwZV07XG5cbiAgaWYgKGlzVW5kZWZpbmVkKGhhbmRsZXIpKVxuICAgIHJldHVybiBmYWxzZTtcblxuICBpZiAoaXNGdW5jdGlvbihoYW5kbGVyKSkge1xuICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgLy8gZmFzdCBjYXNlc1xuICAgICAgY2FzZSAxOlxuICAgICAgICBoYW5kbGVyLmNhbGwodGhpcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyOlxuICAgICAgICBoYW5kbGVyLmNhbGwodGhpcywgYXJndW1lbnRzWzFdKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIGhhbmRsZXIuY2FsbCh0aGlzLCBhcmd1bWVudHNbMV0sIGFyZ3VtZW50c1syXSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgLy8gc2xvd2VyXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgaGFuZGxlci5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNPYmplY3QoaGFuZGxlcikpIHtcbiAgICBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICBsaXN0ZW5lcnMgPSBoYW5kbGVyLnNsaWNlKCk7XG4gICAgbGVuID0gbGlzdGVuZXJzLmxlbmd0aDtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspXG4gICAgICBsaXN0ZW5lcnNbaV0uYXBwbHkodGhpcywgYXJncyk7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBmdW5jdGlvbih0eXBlLCBsaXN0ZW5lcikge1xuICB2YXIgbTtcblxuICBpZiAoIWlzRnVuY3Rpb24obGlzdGVuZXIpKVxuICAgIHRocm93IFR5cGVFcnJvcignbGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMpXG4gICAgdGhpcy5fZXZlbnRzID0ge307XG5cbiAgLy8gVG8gYXZvaWQgcmVjdXJzaW9uIGluIHRoZSBjYXNlIHRoYXQgdHlwZSA9PT0gXCJuZXdMaXN0ZW5lclwiISBCZWZvcmVcbiAgLy8gYWRkaW5nIGl0IHRvIHRoZSBsaXN0ZW5lcnMsIGZpcnN0IGVtaXQgXCJuZXdMaXN0ZW5lclwiLlxuICBpZiAodGhpcy5fZXZlbnRzLm5ld0xpc3RlbmVyKVxuICAgIHRoaXMuZW1pdCgnbmV3TGlzdGVuZXInLCB0eXBlLFxuICAgICAgICAgICAgICBpc0Z1bmN0aW9uKGxpc3RlbmVyLmxpc3RlbmVyKSA/XG4gICAgICAgICAgICAgIGxpc3RlbmVyLmxpc3RlbmVyIDogbGlzdGVuZXIpO1xuXG4gIGlmICghdGhpcy5fZXZlbnRzW3R5cGVdKVxuICAgIC8vIE9wdGltaXplIHRoZSBjYXNlIG9mIG9uZSBsaXN0ZW5lci4gRG9uJ3QgbmVlZCB0aGUgZXh0cmEgYXJyYXkgb2JqZWN0LlxuICAgIHRoaXMuX2V2ZW50c1t0eXBlXSA9IGxpc3RlbmVyO1xuICBlbHNlIGlmIChpc09iamVjdCh0aGlzLl9ldmVudHNbdHlwZV0pKVxuICAgIC8vIElmIHdlJ3ZlIGFscmVhZHkgZ290IGFuIGFycmF5LCBqdXN0IGFwcGVuZC5cbiAgICB0aGlzLl9ldmVudHNbdHlwZV0ucHVzaChsaXN0ZW5lcik7XG4gIGVsc2VcbiAgICAvLyBBZGRpbmcgdGhlIHNlY29uZCBlbGVtZW50LCBuZWVkIHRvIGNoYW5nZSB0byBhcnJheS5cbiAgICB0aGlzLl9ldmVudHNbdHlwZV0gPSBbdGhpcy5fZXZlbnRzW3R5cGVdLCBsaXN0ZW5lcl07XG5cbiAgLy8gQ2hlY2sgZm9yIGxpc3RlbmVyIGxlYWtcbiAgaWYgKGlzT2JqZWN0KHRoaXMuX2V2ZW50c1t0eXBlXSkgJiYgIXRoaXMuX2V2ZW50c1t0eXBlXS53YXJuZWQpIHtcbiAgICBpZiAoIWlzVW5kZWZpbmVkKHRoaXMuX21heExpc3RlbmVycykpIHtcbiAgICAgIG0gPSB0aGlzLl9tYXhMaXN0ZW5lcnM7XG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSBFdmVudEVtaXR0ZXIuZGVmYXVsdE1heExpc3RlbmVycztcbiAgICB9XG5cbiAgICBpZiAobSAmJiBtID4gMCAmJiB0aGlzLl9ldmVudHNbdHlwZV0ubGVuZ3RoID4gbSkge1xuICAgICAgdGhpcy5fZXZlbnRzW3R5cGVdLndhcm5lZCA9IHRydWU7XG4gICAgICBjb25zb2xlLmVycm9yKCcobm9kZSkgd2FybmluZzogcG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSAnICtcbiAgICAgICAgICAgICAgICAgICAgJ2xlYWsgZGV0ZWN0ZWQuICVkIGxpc3RlbmVycyBhZGRlZC4gJyArXG4gICAgICAgICAgICAgICAgICAgICdVc2UgZW1pdHRlci5zZXRNYXhMaXN0ZW5lcnMoKSB0byBpbmNyZWFzZSBsaW1pdC4nLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHNbdHlwZV0ubGVuZ3RoKTtcbiAgICAgIGlmICh0eXBlb2YgY29uc29sZS50cmFjZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBub3Qgc3VwcG9ydGVkIGluIElFIDEwXG4gICAgICAgIGNvbnNvbGUudHJhY2UoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub24gPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbih0eXBlLCBsaXN0ZW5lcikge1xuICBpZiAoIWlzRnVuY3Rpb24obGlzdGVuZXIpKVxuICAgIHRocm93IFR5cGVFcnJvcignbGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cbiAgdmFyIGZpcmVkID0gZmFsc2U7XG5cbiAgZnVuY3Rpb24gZygpIHtcbiAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGcpO1xuXG4gICAgaWYgKCFmaXJlZCkge1xuICAgICAgZmlyZWQgPSB0cnVlO1xuICAgICAgbGlzdGVuZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gIH1cblxuICBnLmxpc3RlbmVyID0gbGlzdGVuZXI7XG4gIHRoaXMub24odHlwZSwgZyk7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBlbWl0cyBhICdyZW1vdmVMaXN0ZW5lcicgZXZlbnQgaWZmIHRoZSBsaXN0ZW5lciB3YXMgcmVtb3ZlZFxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lciA9IGZ1bmN0aW9uKHR5cGUsIGxpc3RlbmVyKSB7XG4gIHZhciBsaXN0LCBwb3NpdGlvbiwgbGVuZ3RoLCBpO1xuXG4gIGlmICghaXNGdW5jdGlvbihsaXN0ZW5lcikpXG4gICAgdGhyb3cgVHlwZUVycm9yKCdsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcblxuICBpZiAoIXRoaXMuX2V2ZW50cyB8fCAhdGhpcy5fZXZlbnRzW3R5cGVdKVxuICAgIHJldHVybiB0aGlzO1xuXG4gIGxpc3QgPSB0aGlzLl9ldmVudHNbdHlwZV07XG4gIGxlbmd0aCA9IGxpc3QubGVuZ3RoO1xuICBwb3NpdGlvbiA9IC0xO1xuXG4gIGlmIChsaXN0ID09PSBsaXN0ZW5lciB8fFxuICAgICAgKGlzRnVuY3Rpb24obGlzdC5saXN0ZW5lcikgJiYgbGlzdC5saXN0ZW5lciA9PT0gbGlzdGVuZXIpKSB7XG4gICAgZGVsZXRlIHRoaXMuX2V2ZW50c1t0eXBlXTtcbiAgICBpZiAodGhpcy5fZXZlbnRzLnJlbW92ZUxpc3RlbmVyKVxuICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIGxpc3RlbmVyKTtcblxuICB9IGVsc2UgaWYgKGlzT2JqZWN0KGxpc3QpKSB7XG4gICAgZm9yIChpID0gbGVuZ3RoOyBpLS0gPiAwOykge1xuICAgICAgaWYgKGxpc3RbaV0gPT09IGxpc3RlbmVyIHx8XG4gICAgICAgICAgKGxpc3RbaV0ubGlzdGVuZXIgJiYgbGlzdFtpXS5saXN0ZW5lciA9PT0gbGlzdGVuZXIpKSB7XG4gICAgICAgIHBvc2l0aW9uID0gaTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBvc2l0aW9uIDwgMClcbiAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgaWYgKGxpc3QubGVuZ3RoID09PSAxKSB7XG4gICAgICBsaXN0Lmxlbmd0aCA9IDA7XG4gICAgICBkZWxldGUgdGhpcy5fZXZlbnRzW3R5cGVdO1xuICAgIH0gZWxzZSB7XG4gICAgICBsaXN0LnNwbGljZShwb3NpdGlvbiwgMSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2V2ZW50cy5yZW1vdmVMaXN0ZW5lcilcbiAgICAgIHRoaXMuZW1pdCgncmVtb3ZlTGlzdGVuZXInLCB0eXBlLCBsaXN0ZW5lcik7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID0gZnVuY3Rpb24odHlwZSkge1xuICB2YXIga2V5LCBsaXN0ZW5lcnM7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMpXG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgLy8gbm90IGxpc3RlbmluZyBmb3IgcmVtb3ZlTGlzdGVuZXIsIG5vIG5lZWQgdG8gZW1pdFxuICBpZiAoIXRoaXMuX2V2ZW50cy5yZW1vdmVMaXN0ZW5lcikge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKVxuICAgICAgdGhpcy5fZXZlbnRzID0ge307XG4gICAgZWxzZSBpZiAodGhpcy5fZXZlbnRzW3R5cGVdKVxuICAgICAgZGVsZXRlIHRoaXMuX2V2ZW50c1t0eXBlXTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIGVtaXQgcmVtb3ZlTGlzdGVuZXIgZm9yIGFsbCBsaXN0ZW5lcnMgb24gYWxsIGV2ZW50c1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIGZvciAoa2V5IGluIHRoaXMuX2V2ZW50cykge1xuICAgICAgaWYgKGtleSA9PT0gJ3JlbW92ZUxpc3RlbmVyJykgY29udGludWU7XG4gICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhrZXkpO1xuICAgIH1cbiAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygncmVtb3ZlTGlzdGVuZXInKTtcbiAgICB0aGlzLl9ldmVudHMgPSB7fTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1t0eXBlXTtcblxuICBpZiAoaXNGdW5jdGlvbihsaXN0ZW5lcnMpKSB7XG4gICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnMpO1xuICB9IGVsc2UgaWYgKGxpc3RlbmVycykge1xuICAgIC8vIExJRk8gb3JkZXJcbiAgICB3aGlsZSAobGlzdGVuZXJzLmxlbmd0aClcbiAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXJzW2xpc3RlbmVycy5sZW5ndGggLSAxXSk7XG4gIH1cbiAgZGVsZXRlIHRoaXMuX2V2ZW50c1t0eXBlXTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24odHlwZSkge1xuICB2YXIgcmV0O1xuICBpZiAoIXRoaXMuX2V2ZW50cyB8fCAhdGhpcy5fZXZlbnRzW3R5cGVdKVxuICAgIHJldCA9IFtdO1xuICBlbHNlIGlmIChpc0Z1bmN0aW9uKHRoaXMuX2V2ZW50c1t0eXBlXSkpXG4gICAgcmV0ID0gW3RoaXMuX2V2ZW50c1t0eXBlXV07XG4gIGVsc2VcbiAgICByZXQgPSB0aGlzLl9ldmVudHNbdHlwZV0uc2xpY2UoKTtcbiAgcmV0dXJuIHJldDtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uKHR5cGUpIHtcbiAgaWYgKHRoaXMuX2V2ZW50cykge1xuICAgIHZhciBldmxpc3RlbmVyID0gdGhpcy5fZXZlbnRzW3R5cGVdO1xuXG4gICAgaWYgKGlzRnVuY3Rpb24oZXZsaXN0ZW5lcikpXG4gICAgICByZXR1cm4gMTtcbiAgICBlbHNlIGlmIChldmxpc3RlbmVyKVxuICAgICAgcmV0dXJuIGV2bGlzdGVuZXIubGVuZ3RoO1xuICB9XG4gIHJldHVybiAwO1xufTtcblxuRXZlbnRFbWl0dGVyLmxpc3RlbmVyQ291bnQgPSBmdW5jdGlvbihlbWl0dGVyLCB0eXBlKSB7XG4gIHJldHVybiBlbWl0dGVyLmxpc3RlbmVyQ291bnQodHlwZSk7XG59O1xuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuZnVuY3Rpb24gaXNOdW1iZXIoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnbnVtYmVyJztcbn1cblxuZnVuY3Rpb24gaXNPYmplY3QoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gYXJnID09PSB2b2lkIDA7XG59XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9ldmVudHMvZXZlbnRzLmpzXG4vLyBtb2R1bGUgaWQgPSAyNVxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSIsImltcG9ydCBCb290c3RyYXBUYWJsZSBmcm9tICcuL3NyYy9ib290c3RyYXAtdGFibGUnO1xuaW1wb3J0IHdpdGhDb250ZXh0IGZyb20gJy4vc3JjL2NvbnRleHRzJztcblxuZXhwb3J0IGRlZmF1bHQgd2l0aENvbnRleHQoQm9vdHN0cmFwVGFibGUpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9pbmRleC5qcyIsIi8qIGVzbGludCBjYW1lbGNhc2U6IDAgKi9cbi8qIGVzbGludCBhcnJvdy1ib2R5LXN0eWxlOiAwICovXG5cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNzIGZyb20gJ2NsYXNzbmFtZXMnO1xuXG5pbXBvcnQgSGVhZGVyIGZyb20gJy4vaGVhZGVyJztcbmltcG9ydCBGaWx0ZXJzIGZyb20gJy4vZmlsdGVycyc7XG5pbXBvcnQgQ2FwdGlvbiBmcm9tICcuL2NhcHRpb24nO1xuaW1wb3J0IEJvZHkgZnJvbSAnLi9ib2R5JztcbmltcG9ydCBGb290ZXIgZnJvbSAnLi9mb290ZXInO1xuaW1wb3J0IFByb3BzQmFzZVJlc29sdmVyIGZyb20gJy4vcHJvcHMtcmVzb2x2ZXInO1xuaW1wb3J0IENvbnN0IGZyb20gJy4vY29uc3QnO1xuaW1wb3J0IF8gZnJvbSAnLi91dGlscyc7XG5cbmNsYXNzIEJvb3RzdHJhcFRhYmxlIGV4dGVuZHMgUHJvcHNCYXNlUmVzb2x2ZXIoQ29tcG9uZW50KSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMudmFsaWRhdGVQcm9wcygpO1xuICB9XG5cbiAgVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzKSB7XG4gICAgaWYgKG5leHRQcm9wcy5vbkRhdGFTaXplQ2hhbmdlICYmICFuZXh0UHJvcHMucGFnaW5hdGlvbikge1xuICAgICAgaWYgKG5leHRQcm9wcy5kYXRhLmxlbmd0aCAhPT0gdGhpcy5wcm9wcy5kYXRhLmxlbmd0aCkge1xuICAgICAgICBuZXh0UHJvcHMub25EYXRhU2l6ZUNoYW5nZSh7IGRhdGFTaXplOiBuZXh0UHJvcHMuZGF0YS5sZW5ndGggfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gRXhwb3NlZCBBUElzXG4gIGdldERhdGEgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZVJvd3MoKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IGxvYWRpbmcsIG92ZXJsYXkgfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKG92ZXJsYXkpIHtcbiAgICAgIGNvbnN0IExvYWRpbmdPdmVybGF5ID0gb3ZlcmxheShsb2FkaW5nKTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxMb2FkaW5nT3ZlcmxheT5cbiAgICAgICAgICB7IHRoaXMucmVuZGVyVGFibGUoKSB9XG4gICAgICAgIDwvTG9hZGluZ092ZXJsYXk+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5yZW5kZXJUYWJsZSgpO1xuICB9XG5cbiAgcmVuZGVyVGFibGUoKSB7XG4gICAgY29uc3Qge1xuICAgICAgY29sdW1ucyxcbiAgICAgIGtleUZpZWxkLFxuICAgICAgdGFiSW5kZXhDZWxsLFxuICAgICAgaWQsXG4gICAgICBjbGFzc2VzLFxuICAgICAgYm9vdHN0cmFwNCxcbiAgICAgIHN0cmlwZWQsXG4gICAgICBob3ZlcixcbiAgICAgIGJvcmRlcmVkLFxuICAgICAgY29uZGVuc2VkLFxuICAgICAgbm9EYXRhSW5kaWNhdGlvbixcbiAgICAgIGNhcHRpb24sXG4gICAgICByb3dTdHlsZSxcbiAgICAgIHJvd0NsYXNzZXMsXG4gICAgICB3cmFwcGVyQ2xhc3NlcyxcbiAgICAgIHJvd0V2ZW50cyxcbiAgICAgIHNlbGVjdFJvdyxcbiAgICAgIGV4cGFuZFJvdyxcbiAgICAgIGNlbGxFZGl0LFxuICAgICAgZmlsdGVyUG9zaXRpb25cbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IHRhYmxlV3JhcHBlckNsYXNzID0gY3MoJ3JlYWN0LWJvb3RzdHJhcC10YWJsZScsIHdyYXBwZXJDbGFzc2VzKTtcblxuICAgIGNvbnN0IHRhYmxlQ2xhc3MgPSBjcygndGFibGUnLCB7XG4gICAgICAndGFibGUtc3RyaXBlZCc6IHN0cmlwZWQsXG4gICAgICAndGFibGUtaG92ZXInOiBob3ZlcixcbiAgICAgICd0YWJsZS1ib3JkZXJlZCc6IGJvcmRlcmVkLFxuICAgICAgW2Jvb3RzdHJhcDQgPyAndGFibGUtc20nIDogJ3RhYmxlLWNvbmRlbnNlZCddOiBjb25kZW5zZWRcbiAgICB9LCBjbGFzc2VzKTtcblxuICAgIGNvbnN0IGhhc0ZpbHRlcnMgPSBjb2x1bW5zLnNvbWUoY29sID0+IGNvbC5maWx0ZXIgfHwgY29sLmZpbHRlclJlbmRlcmVyKTtcblxuICAgIGNvbnN0IGhhc0Zvb3RlciA9IF8uZmlsdGVyKGNvbHVtbnMsIGNvbCA9PiBfLmhhcyhjb2wsICdmb290ZXInKSkubGVuZ3RoID4gMDtcblxuICAgIGNvbnN0IHRhYmxlQ2FwdGlvbiA9IChcbiAgICAgIGNhcHRpb24gJiYgPENhcHRpb24gYm9vdHN0cmFwND17IGJvb3RzdHJhcDQgfT57IGNhcHRpb24gfTwvQ2FwdGlvbj5cbiAgICApO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXsgdGFibGVXcmFwcGVyQ2xhc3MgfT5cbiAgICAgICAgPHRhYmxlIGlkPXsgaWQgfSBjbGFzc05hbWU9eyB0YWJsZUNsYXNzIH0+XG4gICAgICAgICAgeyB0YWJsZUNhcHRpb24gfVxuICAgICAgICAgIDxIZWFkZXJcbiAgICAgICAgICAgIGNvbHVtbnM9eyBjb2x1bW5zIH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17IHRoaXMucHJvcHMuaGVhZGVyQ2xhc3NlcyB9XG4gICAgICAgICAgICB3cmFwcGVyQ2xhc3Nlcz17IHRoaXMucHJvcHMuaGVhZGVyV3JhcHBlckNsYXNzZXMgfVxuICAgICAgICAgICAgc29ydEZpZWxkPXsgdGhpcy5wcm9wcy5zb3J0RmllbGQgfVxuICAgICAgICAgICAgc29ydE9yZGVyPXsgdGhpcy5wcm9wcy5zb3J0T3JkZXIgfVxuICAgICAgICAgICAgb25Tb3J0PXsgdGhpcy5wcm9wcy5vblNvcnQgfVxuICAgICAgICAgICAgZ2xvYmFsU29ydENhcmV0PXsgdGhpcy5wcm9wcy5zb3J0ICYmIHRoaXMucHJvcHMuc29ydC5zb3J0Q2FyZXQgfVxuICAgICAgICAgICAgb25GaWx0ZXI9eyB0aGlzLnByb3BzLm9uRmlsdGVyIH1cbiAgICAgICAgICAgIGN1cnJGaWx0ZXJzPXsgdGhpcy5wcm9wcy5jdXJyRmlsdGVycyB9XG4gICAgICAgICAgICBvbkV4dGVybmFsRmlsdGVyPXsgdGhpcy5wcm9wcy5vbkV4dGVybmFsRmlsdGVyIH1cbiAgICAgICAgICAgIHNlbGVjdFJvdz17IHNlbGVjdFJvdyB9XG4gICAgICAgICAgICBleHBhbmRSb3c9eyBleHBhbmRSb3cgfVxuICAgICAgICAgICAgZmlsdGVyUG9zaXRpb249eyBmaWx0ZXJQb3NpdGlvbiB9XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7aGFzRmlsdGVycyAmJiBmaWx0ZXJQb3NpdGlvbiAhPT0gQ29uc3QuRklMVEVSU19QT1NJVElPTl9JTkxJTkUgJiYgKFxuICAgICAgICAgICAgPEZpbHRlcnNcbiAgICAgICAgICAgICAgY29sdW1ucz17IGNvbHVtbnMgfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9eyB0aGlzLnByb3BzLmZpbHRlcnNDbGFzc2VzIH1cbiAgICAgICAgICAgICAgb25Tb3J0PXsgdGhpcy5wcm9wcy5vblNvcnQgfVxuICAgICAgICAgICAgICBvbkZpbHRlcj17IHRoaXMucHJvcHMub25GaWx0ZXIgfVxuICAgICAgICAgICAgICBjdXJyRmlsdGVycz17IHRoaXMucHJvcHMuY3VyckZpbHRlcnMgfVxuICAgICAgICAgICAgICBmaWx0ZXJQb3NpdGlvbj17IHRoaXMucHJvcHMuZmlsdGVyUG9zaXRpb24gfVxuICAgICAgICAgICAgICBvbkV4dGVybmFsRmlsdGVyPXsgdGhpcy5wcm9wcy5vbkV4dGVybmFsRmlsdGVyIH1cbiAgICAgICAgICAgICAgc2VsZWN0Um93PXsgc2VsZWN0Um93IH1cbiAgICAgICAgICAgICAgZXhwYW5kUm93PXsgZXhwYW5kUm93IH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgICA8Qm9keVxuICAgICAgICAgICAgY2xhc3NOYW1lPXsgdGhpcy5wcm9wcy5ib2R5Q2xhc3NlcyB9XG4gICAgICAgICAgICBkYXRhPXsgdGhpcy5nZXREYXRhKCkgfVxuICAgICAgICAgICAga2V5RmllbGQ9eyBrZXlGaWVsZCB9XG4gICAgICAgICAgICB0YWJJbmRleENlbGw9eyB0YWJJbmRleENlbGwgfVxuICAgICAgICAgICAgY29sdW1ucz17IGNvbHVtbnMgfVxuICAgICAgICAgICAgaXNFbXB0eT17IHRoaXMuaXNFbXB0eSgpIH1cbiAgICAgICAgICAgIHZpc2libGVDb2x1bW5TaXplPXsgdGhpcy52aXNpYmxlQ29sdW1uU2l6ZSgpIH1cbiAgICAgICAgICAgIG5vRGF0YUluZGljYXRpb249eyBub0RhdGFJbmRpY2F0aW9uIH1cbiAgICAgICAgICAgIGNlbGxFZGl0PXsgY2VsbEVkaXQgfVxuICAgICAgICAgICAgc2VsZWN0Um93PXsgc2VsZWN0Um93IH1cbiAgICAgICAgICAgIGV4cGFuZFJvdz17IGV4cGFuZFJvdyB9XG4gICAgICAgICAgICByb3dTdHlsZT17IHJvd1N0eWxlIH1cbiAgICAgICAgICAgIHJvd0NsYXNzZXM9eyByb3dDbGFzc2VzIH1cbiAgICAgICAgICAgIHJvd0V2ZW50cz17IHJvd0V2ZW50cyB9XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7aGFzRm9vdGVyICYmIChcbiAgICAgICAgICAgIDxGb290ZXJcbiAgICAgICAgICAgICAgZGF0YT17IHRoaXMuZ2V0RGF0YSgpIH1cbiAgICAgICAgICAgICAgY29sdW1ucz17IGNvbHVtbnMgfVxuICAgICAgICAgICAgICBzZWxlY3RSb3c9eyBzZWxlY3RSb3cgfVxuICAgICAgICAgICAgICBleHBhbmRSb3c9eyBleHBhbmRSb3cgfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9eyB0aGlzLnByb3BzLmZvb3RlckNsYXNzZXMgfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L3RhYmxlPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5Cb290c3RyYXBUYWJsZS5wcm9wVHlwZXMgPSB7XG4gIGtleUZpZWxkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGRhdGE6IFByb3BUeXBlcy5hcnJheS5pc1JlcXVpcmVkLFxuICBjb2x1bW5zOiBQcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZCxcbiAgYm9vdHN0cmFwNDogUHJvcFR5cGVzLmJvb2wsXG4gIHJlbW90ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmJvb2wsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgcGFnaW5hdGlvbjogUHJvcFR5cGVzLmJvb2xcbiAgfSldKSxcbiAgbm9EYXRhSW5kaWNhdGlvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm5vZGUsIFByb3BUeXBlcy5mdW5jXSksXG4gIHN0cmlwZWQ6IFByb3BUeXBlcy5ib29sLFxuICBib3JkZXJlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGhvdmVyOiBQcm9wVHlwZXMuYm9vbCxcbiAgdGFiSW5kZXhDZWxsOiBQcm9wVHlwZXMuYm9vbCxcbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGhlYWRlckNsYXNzZXM6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGJvZHlDbGFzc2VzOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB3cmFwcGVyQ2xhc3NlczogUHJvcFR5cGVzLnN0cmluZyxcbiAgaGVhZGVyV3JhcHBlckNsYXNzZXM6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNvbmRlbnNlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGNhcHRpb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1xuICAgIFByb3BUeXBlcy5ub2RlLFxuICAgIFByb3BUeXBlcy5zdHJpbmdcbiAgXSksXG4gIHBhZ2luYXRpb246IFByb3BUeXBlcy5vYmplY3QsXG4gIGZpbHRlcjogUHJvcFR5cGVzLm9iamVjdCxcbiAgY2VsbEVkaXQ6IFByb3BUeXBlcy5vYmplY3QsXG4gIHNlbGVjdFJvdzogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBtb2RlOiBQcm9wVHlwZXMub25lT2YoW1xuICAgICAgQ29uc3QuUk9XX1NFTEVDVF9TSU5HTEUsXG4gICAgICBDb25zdC5ST1dfU0VMRUNUX01VTFRJUExFLFxuICAgICAgQ29uc3QuUk9XX1NFTEVDVF9ESVNBQkxFRFxuICAgIF0pLmlzUmVxdWlyZWQsXG4gICAgY2xpY2tUb1NlbGVjdDogUHJvcFR5cGVzLmJvb2wsXG4gICAgY2xpY2tUb0V4cGFuZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgY2xpY2tUb0VkaXQ6IFByb3BUeXBlcy5ib29sLFxuICAgIGhpZGVTZWxlY3RBbGw6IFByb3BUeXBlcy5ib29sLFxuICAgIG9uU2VsZWN0OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvblNlbGVjdEFsbDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgc3R5bGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5mdW5jXSksXG4gICAgY2xhc3NlczogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgICBub25TZWxlY3RhYmxlOiBQcm9wVHlwZXMuYXJyYXksXG4gICAgbm9uU2VsZWN0YWJsZVN0eWxlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMuZnVuY10pLFxuICAgIG5vblNlbGVjdGFibGVDbGFzc2VzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMuZnVuY10pLFxuICAgIGJnQ29sb3I6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5mdW5jXSksXG4gICAgaGlkZVNlbGVjdENvbHVtbjogUHJvcFR5cGVzLmJvb2wsXG4gICAgc2VsZWN0aW9uUmVuZGVyZXI6IFByb3BUeXBlcy5mdW5jLFxuICAgIHNlbGVjdGlvbkhlYWRlclJlbmRlcmVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBoZWFkZXJDb2x1bW5TdHlsZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgICBzZWxlY3RDb2x1bW5TdHlsZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgICBzZWxlY3RDb2x1bW5Qb3NpdGlvbjogUHJvcFR5cGVzLm9uZU9mKFtcbiAgICAgIENvbnN0LklORElDQVRPUl9QT1NJVElPTl9MRUZULFxuICAgICAgQ29uc3QuSU5ESUNBVE9SX1BPU0lUSU9OX1JJR0hUXG4gICAgXSlcbiAgfSksXG4gIGV4cGFuZFJvdzogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICByZW5kZXJlcjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgZXhwYW5kZWQ6IFByb3BUeXBlcy5hcnJheSxcbiAgICBvbkV4cGFuZDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25FeHBhbmRBbGw6IFByb3BUeXBlcy5mdW5jLFxuICAgIG5vbkV4cGFuZGFibGU6IFByb3BUeXBlcy5hcnJheSxcbiAgICBzaG93RXhwYW5kQ29sdW1uOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBvbmx5T25lRXhwYW5kaW5nOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBleHBhbmRCeUNvbHVtbk9ubHk6IFByb3BUeXBlcy5ib29sLFxuICAgIGV4cGFuZENvbHVtblJlbmRlcmVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBleHBhbmRIZWFkZXJDb2x1bW5SZW5kZXJlcjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgZXhwYW5kQ29sdW1uUG9zaXRpb246IFByb3BUeXBlcy5vbmVPZihbXG4gICAgICBDb25zdC5JTkRJQ0FUT1JfUE9TSVRJT05fTEVGVCxcbiAgICAgIENvbnN0LklORElDQVRPUl9QT1NJVElPTl9SSUdIVFxuICAgIF0pLFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgICBwYXJlbnRDbGFzc05hbWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5mdW5jXSlcbiAgfSksXG4gIHJvd1N0eWxlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuZnVuY10pLFxuICByb3dFdmVudHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIHJvd0NsYXNzZXM6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5mdW5jXSksXG4gIGZpbHRlcnNDbGFzc2VzOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBmaWx0ZXJQb3NpdGlvbjogUHJvcFR5cGVzLm9uZU9mKFtcbiAgICBDb25zdC5GSUxURVJTX1BPU0lUSU9OX1RPUCxcbiAgICBDb25zdC5GSUxURVJTX1BPU0lUSU9OX0lOTElORSxcbiAgICBDb25zdC5GSUxURVJTX1BPU0lUSU9OX0JPVFRPTVxuICBdKSxcbiAgZm9vdGVyQ2xhc3NlczogUHJvcFR5cGVzLnN0cmluZyxcbiAgZGVmYXVsdFNvcnRlZDogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBkYXRhRmllbGQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBvcmRlcjogUHJvcFR5cGVzLm9uZU9mKFtDb25zdC5TT1JUX0RFU0MsIENvbnN0LlNPUlRfQVNDXSkuaXNSZXF1aXJlZFxuICB9KSksXG4gIHNvcnQ6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgZGF0YUZpZWxkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIG9yZGVyOiBQcm9wVHlwZXMub25lT2YoW0NvbnN0LlNPUlRfREVTQywgQ29uc3QuU09SVF9BU0NdKSxcbiAgICBzb3J0RnVuYzogUHJvcFR5cGVzLmZ1bmMsXG4gICAgc29ydENhcmV0OiBQcm9wVHlwZXMuZnVuY1xuICB9KSxcbiAgZGVmYXVsdFNvcnREaXJlY3Rpb246IFByb3BUeXBlcy5vbmVPZihbQ29uc3QuU09SVF9ERVNDLCBDb25zdC5TT1JUX0FTQ10pLFxuICBvdmVybGF5OiBQcm9wVHlwZXMuZnVuYyxcbiAgb25UYWJsZUNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uU29ydDogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uRmlsdGVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25FeHRlcm5hbEZpbHRlcjogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uRGF0YVNpemVDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvLyBJbmplY3QgZnJvbSB0b29sa2l0XG4gIHNlYXJjaDogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBzZWFyY2hUZXh0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHNlYXJjaENvbnRleHQ6IFByb3BUeXBlcy5mdW5jXG4gIH0pLFxuICBzZXREZXBlbmRlbmN5TW9kdWxlczogUHJvcFR5cGVzLmZ1bmNcbn07XG5cbkJvb3RzdHJhcFRhYmxlLmRlZmF1bHRQcm9wcyA9IHtcbiAgYm9vdHN0cmFwNDogZmFsc2UsXG4gIHJlbW90ZTogZmFsc2UsXG4gIHN0cmlwZWQ6IGZhbHNlLFxuICBib3JkZXJlZDogdHJ1ZSxcbiAgaG92ZXI6IGZhbHNlLFxuICBjb25kZW5zZWQ6IGZhbHNlLFxuICBub0RhdGFJbmRpY2F0aW9uOiBudWxsLFxuICBzZWxlY3RSb3c6IHtcbiAgICBtb2RlOiBDb25zdC5ST1dfU0VMRUNUX0RJU0FCTEVELFxuICAgIHNlbGVjdGVkOiBbXSxcbiAgICBoaWRlU2VsZWN0Q29sdW1uOiB0cnVlXG4gIH0sXG4gIGV4cGFuZFJvdzoge1xuICAgIHJlbmRlcmVyOiB1bmRlZmluZWQsXG4gICAgZXhwYW5kZWQ6IFtdLFxuICAgIG5vbkV4cGFuZGFibGU6IFtdXG4gIH0sXG4gIGNlbGxFZGl0OiB7XG4gICAgbW9kZTogbnVsbCxcbiAgICBub25FZGl0YWJsZVJvd3M6IFtdXG4gIH0sXG4gIGZpbHRlclBvc2l0aW9uOiBDb25zdC5GSUxURVJTX1BPU0lUSU9OX0lOTElORVxufTtcblxuZXhwb3J0IGRlZmF1bHQgQm9vdHN0cmFwVGFibGU7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9ib290c3RyYXAtdGFibGUuanMiLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gcmVxdWlyZSgnLi9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQnKTtcblxuZnVuY3Rpb24gZW1wdHlGdW5jdGlvbigpIHt9XG5mdW5jdGlvbiBlbXB0eUZ1bmN0aW9uV2l0aFJlc2V0KCkge31cbmVtcHR5RnVuY3Rpb25XaXRoUmVzZXQucmVzZXRXYXJuaW5nQ2FjaGUgPSBlbXB0eUZ1bmN0aW9uO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBzaGltKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4gICAgaWYgKHNlY3JldCA9PT0gUmVhY3RQcm9wVHlwZXNTZWNyZXQpIHtcbiAgICAgIC8vIEl0IGlzIHN0aWxsIHNhZmUgd2hlbiBjYWxsZWQgZnJvbSBSZWFjdC5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcihcbiAgICAgICdDYWxsaW5nIFByb3BUeXBlcyB2YWxpZGF0b3JzIGRpcmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnICtcbiAgICAgICdVc2UgUHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzKCkgdG8gY2FsbCB0aGVtLiAnICtcbiAgICAgICdSZWFkIG1vcmUgYXQgaHR0cDovL2ZiLm1lL3VzZS1jaGVjay1wcm9wLXR5cGVzJ1xuICAgICk7XG4gICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgdGhyb3cgZXJyO1xuICB9O1xuICBzaGltLmlzUmVxdWlyZWQgPSBzaGltO1xuICBmdW5jdGlvbiBnZXRTaGltKCkge1xuICAgIHJldHVybiBzaGltO1xuICB9O1xuICAvLyBJbXBvcnRhbnQhXG4gIC8vIEtlZXAgdGhpcyBsaXN0IGluIHN5bmMgd2l0aCBwcm9kdWN0aW9uIHZlcnNpb24gaW4gYC4vZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMuanNgLlxuICB2YXIgUmVhY3RQcm9wVHlwZXMgPSB7XG4gICAgYXJyYXk6IHNoaW0sXG4gICAgYm9vbDogc2hpbSxcbiAgICBmdW5jOiBzaGltLFxuICAgIG51bWJlcjogc2hpbSxcbiAgICBvYmplY3Q6IHNoaW0sXG4gICAgc3RyaW5nOiBzaGltLFxuICAgIHN5bWJvbDogc2hpbSxcblxuICAgIGFueTogc2hpbSxcbiAgICBhcnJheU9mOiBnZXRTaGltLFxuICAgIGVsZW1lbnQ6IHNoaW0sXG4gICAgZWxlbWVudFR5cGU6IHNoaW0sXG4gICAgaW5zdGFuY2VPZjogZ2V0U2hpbSxcbiAgICBub2RlOiBzaGltLFxuICAgIG9iamVjdE9mOiBnZXRTaGltLFxuICAgIG9uZU9mOiBnZXRTaGltLFxuICAgIG9uZU9mVHlwZTogZ2V0U2hpbSxcbiAgICBzaGFwZTogZ2V0U2hpbSxcbiAgICBleGFjdDogZ2V0U2hpbSxcblxuICAgIGNoZWNrUHJvcFR5cGVzOiBlbXB0eUZ1bmN0aW9uV2l0aFJlc2V0LFxuICAgIHJlc2V0V2FybmluZ0NhY2hlOiBlbXB0eUZ1bmN0aW9uXG4gIH07XG5cbiAgUmVhY3RQcm9wVHlwZXMuUHJvcFR5cGVzID0gUmVhY3RQcm9wVHlwZXM7XG5cbiAgcmV0dXJuIFJlYWN0UHJvcFR5cGVzO1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMuanNcbi8vIG1vZHVsZSBpZCA9IDI4XG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9ICdTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCc7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RQcm9wVHlwZXNTZWNyZXQ7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0LmpzXG4vLyBtb2R1bGUgaWQgPSAyOVxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSIsIi8qIGVzbGludCByZWFjdC9yZXF1aXJlLWRlZmF1bHQtcHJvcHM6IDAgKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG5pbXBvcnQgSGVhZGVyQ2VsbCBmcm9tICcuL2hlYWRlci1jZWxsJztcbmltcG9ydCBTZWxlY3Rpb25IZWFkZXJDZWxsIGZyb20gJy4vcm93LXNlbGVjdGlvbi9zZWxlY3Rpb24taGVhZGVyLWNlbGwnO1xuaW1wb3J0IEV4cGFuZEhlYWRlckNlbGwgZnJvbSAnLi9yb3ctZXhwYW5kL2V4cGFuZC1oZWFkZXItY2VsbCc7XG5pbXBvcnQgd2l0aEhlYWRlclNlbGVjdGlvbiBmcm9tICcuL3Jvdy1zZWxlY3Rpb24vc2VsZWN0aW9uLWhlYWRlci1jZWxsLWNvbnN1bWVyJztcbmltcG9ydCB3aXRoSGVhZGVyRXhwYW5zaW9uIGZyb20gJy4vcm93LWV4cGFuZC9leHBhbmQtaGVhZGVyLWNlbGwtY29uc3VtZXInO1xuaW1wb3J0IENvbnN0IGZyb20gJy4vY29uc3QnO1xuXG5jb25zdCBIZWFkZXIgPSAocHJvcHMpID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzTmFtZSxcbiAgICBjb2x1bW5zLFxuICAgIG9uU29ydCxcbiAgICBvbkZpbHRlcixcbiAgICBzb3J0RmllbGQsXG4gICAgc29ydE9yZGVyLFxuICAgIHNlbGVjdFJvdyxcbiAgICBleHBhbmRSb3csXG4gICAgY3VyckZpbHRlcnMsXG4gICAgb25FeHRlcm5hbEZpbHRlcixcbiAgICBmaWx0ZXJQb3NpdGlvbixcbiAgICBnbG9iYWxTb3J0Q2FyZXQsXG4gICAgd3JhcHBlckNsYXNzZXNcbiAgfSA9IHByb3BzO1xuXG4gIGxldCBTZWxlY3Rpb25IZWFkZXJDZWxsQ29tcCA9ICgpID0+IG51bGw7XG4gIGxldCBFeHBhbnNpb25IZWFkZXJDZWxsQ29tcCA9ICgpID0+IG51bGw7XG5cbiAgaWYgKGV4cGFuZFJvdy5zaG93RXhwYW5kQ29sdW1uKSB7XG4gICAgRXhwYW5zaW9uSGVhZGVyQ2VsbENvbXAgPSB3aXRoSGVhZGVyRXhwYW5zaW9uKEV4cGFuZEhlYWRlckNlbGwpO1xuICB9XG5cbiAgaWYgKHNlbGVjdFJvdykge1xuICAgIFNlbGVjdGlvbkhlYWRlckNlbGxDb21wID0gd2l0aEhlYWRlclNlbGVjdGlvbihTZWxlY3Rpb25IZWFkZXJDZWxsKTtcbiAgfVxuXG4gIGNvbnN0IGlzUmVuZGVyRnVuY3Rpb25Db2x1bW5JbkxlZnQgPSAoXG4gICAgcG9zaXRpb24gPSBDb25zdC5JTkRJQ0FUT1JfUE9TSVRJT05fTEVGVFxuICApID0+IHBvc2l0aW9uID09PSBDb25zdC5JTkRJQ0FUT1JfUE9TSVRJT05fTEVGVDtcblxuICBjb25zdCBjaGlsZHJlbnMgPSBbXG4gICAgY29sdW1ucy5tYXAoKGNvbHVtbiwgaSkgPT4ge1xuICAgICAgY29uc3QgY3VyclNvcnQgPSBjb2x1bW4uZGF0YUZpZWxkID09PSBzb3J0RmllbGQ7XG4gICAgICBjb25zdCBpc0xhc3RTb3J0aW5nID0gY29sdW1uLmRhdGFGaWVsZCA9PT0gc29ydEZpZWxkO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8SGVhZGVyQ2VsbFxuICAgICAgICAgIGluZGV4PXsgaSB9XG4gICAgICAgICAga2V5PXsgY29sdW1uLmRhdGFGaWVsZCB9XG4gICAgICAgICAgY29sdW1uPXsgY29sdW1uIH1cbiAgICAgICAgICBvblNvcnQ9eyBvblNvcnQgfVxuICAgICAgICAgIHNvcnRpbmc9eyBjdXJyU29ydCB9XG4gICAgICAgICAgc29ydE9yZGVyPXsgc29ydE9yZGVyIH1cbiAgICAgICAgICBnbG9iYWxTb3J0Q2FyZXQ9eyBnbG9iYWxTb3J0Q2FyZXQgfVxuICAgICAgICAgIGlzTGFzdFNvcnRpbmc9eyBpc0xhc3RTb3J0aW5nIH1cbiAgICAgICAgICBvbkZpbHRlcj17IG9uRmlsdGVyIH1cbiAgICAgICAgICBjdXJyRmlsdGVycz17IGN1cnJGaWx0ZXJzIH1cbiAgICAgICAgICBvbkV4dGVybmFsRmlsdGVyPXsgb25FeHRlcm5hbEZpbHRlciB9XG4gICAgICAgICAgZmlsdGVyUG9zaXRpb249eyBmaWx0ZXJQb3NpdGlvbiB9XG4gICAgICAgIC8+KTtcbiAgICB9KVxuICBdO1xuXG4gIGlmICghc2VsZWN0Um93LmhpZGVTZWxlY3RDb2x1bW4pIHtcbiAgICBpZiAoaXNSZW5kZXJGdW5jdGlvbkNvbHVtbkluTGVmdChzZWxlY3RSb3cuc2VsZWN0Q29sdW1uUG9zaXRpb24pKSB7XG4gICAgICBjaGlsZHJlbnMudW5zaGlmdCg8U2VsZWN0aW9uSGVhZGVyQ2VsbENvbXAga2V5PVwic2VsZWN0aW9uXCIgLz4pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGlsZHJlbnMucHVzaCg8U2VsZWN0aW9uSGVhZGVyQ2VsbENvbXAga2V5PVwic2VsZWN0aW9uXCIgLz4pO1xuICAgIH1cbiAgfVxuXG4gIGlmIChleHBhbmRSb3cuc2hvd0V4cGFuZENvbHVtbikge1xuICAgIGlmIChpc1JlbmRlckZ1bmN0aW9uQ29sdW1uSW5MZWZ0KGV4cGFuZFJvdy5leHBhbmRDb2x1bW5Qb3NpdGlvbikpIHtcbiAgICAgIGNoaWxkcmVucy51bnNoaWZ0KDxFeHBhbnNpb25IZWFkZXJDZWxsQ29tcCBrZXk9XCJleHBhbnNpb25cIiAvPik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNoaWxkcmVucy5wdXNoKDxFeHBhbnNpb25IZWFkZXJDZWxsQ29tcCBrZXk9XCJleHBhbnNpb25cIiAvPik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8dGhlYWQgY2xhc3NOYW1lPXsgd3JhcHBlckNsYXNzZXMgfT5cbiAgICAgIDx0ciBjbGFzc05hbWU9eyBjbGFzc05hbWUgfT5cbiAgICAgICAgeyBjaGlsZHJlbnMgfVxuICAgICAgPC90cj5cbiAgICA8L3RoZWFkPlxuICApO1xufTtcblxuSGVhZGVyLnByb3BUeXBlcyA9IHtcbiAgY29sdW1uczogUHJvcFR5cGVzLmFycmF5LmlzUmVxdWlyZWQsXG4gIG9uU29ydDogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uRmlsdGVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgc29ydEZpZWxkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzb3J0T3JkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNlbGVjdFJvdzogUHJvcFR5cGVzLm9iamVjdCxcbiAgY3VyckZpbHRlcnM6IFByb3BUeXBlcy5vYmplY3QsXG4gIG9uRXh0ZXJuYWxGaWx0ZXI6IFByb3BUeXBlcy5mdW5jLFxuICBnbG9iYWxTb3J0Q2FyZXQ6IFByb3BUeXBlcy5mdW5jLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHdyYXBwZXJDbGFzc2VzOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBleHBhbmRSb3c6IFByb3BUeXBlcy5vYmplY3QsXG4gIGZpbHRlclBvc2l0aW9uOiBQcm9wVHlwZXMub25lT2YoW1xuICAgIENvbnN0LkZJTFRFUlNfUE9TSVRJT05fVE9QLFxuICAgIENvbnN0LkZJTFRFUlNfUE9TSVRJT05fSU5MSU5FLFxuICAgIENvbnN0LkZJTFRFUlNfUE9TSVRJT05fQk9UVE9NXG4gIF0pXG59O1xuXG5leHBvcnQgZGVmYXVsdCBIZWFkZXI7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9oZWFkZXIuanMiLCIvKiBlc2xpbnQgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzOiAwICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuaW1wb3J0IENvbnN0IGZyb20gJy4vY29uc3QnO1xuaW1wb3J0IFNvcnRTeW1ib2wgZnJvbSAnLi9zb3J0L3N5bWJvbCc7XG5pbXBvcnQgU29ydENhcmV0IGZyb20gJy4vc29ydC9jYXJldCc7XG5pbXBvcnQgXyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBldmVudERlbGVnYXRlciBmcm9tICcuL2NlbGwtZXZlbnQtZGVsZWdhdGVyJztcblxuXG5jbGFzcyBIZWFkZXJDZWxsIGV4dGVuZHMgZXZlbnREZWxlZ2F0ZXIoUmVhY3QuQ29tcG9uZW50KSB7XG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBjb2x1bW4sXG4gICAgICBpbmRleCxcbiAgICAgIG9uU29ydCxcbiAgICAgIHNvcnRpbmcsXG4gICAgICBzb3J0T3JkZXIsXG4gICAgICBpc0xhc3RTb3J0aW5nLFxuICAgICAgb25GaWx0ZXIsXG4gICAgICBjdXJyRmlsdGVycyxcbiAgICAgIGZpbHRlclBvc2l0aW9uLFxuICAgICAgb25FeHRlcm5hbEZpbHRlcixcbiAgICAgIGdsb2JhbFNvcnRDYXJldFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3Qge1xuICAgICAgdGV4dCxcbiAgICAgIHNvcnQsXG4gICAgICBzb3J0Q2FyZXQsXG4gICAgICBmaWx0ZXIsXG4gICAgICBmaWx0ZXJSZW5kZXJlcixcbiAgICAgIGhlYWRlclRpdGxlLFxuICAgICAgaGVhZGVyQWxpZ24sXG4gICAgICBoZWFkZXJGb3JtYXR0ZXIsXG4gICAgICBoZWFkZXJFdmVudHMsXG4gICAgICBoZWFkZXJDbGFzc2VzLFxuICAgICAgaGVhZGVyU3R5bGUsXG4gICAgICBoZWFkZXJBdHRycyxcbiAgICAgIGhlYWRlclNvcnRpbmdDbGFzc2VzLFxuICAgICAgaGVhZGVyU29ydGluZ1N0eWxlXG4gICAgfSA9IGNvbHVtbjtcblxuICAgIGNvbnN0IHNvcnRDYXJldGZ1bmMgPSBzb3J0Q2FyZXQgfHwgZ2xvYmFsU29ydENhcmV0O1xuXG4gICAgY29uc3QgZGVsZWdhdGVFdmVudHMgPSB0aGlzLmRlbGVnYXRlKGhlYWRlckV2ZW50cyk7XG5cbiAgICBjb25zdCBjdXN0b21BdHRycyA9IF8uaXNGdW5jdGlvbihoZWFkZXJBdHRycylcbiAgICAgID8gaGVhZGVyQXR0cnMoY29sdW1uLCBpbmRleClcbiAgICAgIDogKGhlYWRlckF0dHJzIHx8IHt9KTtcblxuICAgIGNvbnN0IGNlbGxBdHRycyA9IHtcbiAgICAgIC4uLmN1c3RvbUF0dHJzLFxuICAgICAgLi4uZGVsZWdhdGVFdmVudHMsXG4gICAgICB0YWJJbmRleDogXy5pc0RlZmluZWQoY3VzdG9tQXR0cnMudGFiSW5kZXgpID8gY3VzdG9tQXR0cnMudGFiSW5kZXggOiAwXG4gICAgfTtcblxuICAgIGxldCBzb3J0U3ltYm9sO1xuICAgIGxldCBmaWx0ZXJFbG07XG4gICAgbGV0IGNlbGxTdHlsZSA9IHt9O1xuICAgIGxldCBjZWxsQ2xhc3NlcyA9IF8uaXNGdW5jdGlvbihoZWFkZXJDbGFzc2VzKSA/IGhlYWRlckNsYXNzZXMoY29sdW1uLCBpbmRleCkgOiBoZWFkZXJDbGFzc2VzO1xuXG4gICAgaWYgKGhlYWRlclN0eWxlKSB7XG4gICAgICBjZWxsU3R5bGUgPSBfLmlzRnVuY3Rpb24oaGVhZGVyU3R5bGUpID8gaGVhZGVyU3R5bGUoY29sdW1uLCBpbmRleCkgOiBoZWFkZXJTdHlsZTtcbiAgICAgIGNlbGxTdHlsZSA9IGNlbGxTdHlsZSA/IHsgLi4uY2VsbFN0eWxlIH0gOiBjZWxsU3R5bGU7XG4gICAgfVxuXG4gICAgaWYgKGhlYWRlclRpdGxlKSB7XG4gICAgICBjZWxsQXR0cnMudGl0bGUgPSBfLmlzRnVuY3Rpb24oaGVhZGVyVGl0bGUpID8gaGVhZGVyVGl0bGUoY29sdW1uLCBpbmRleCkgOiB0ZXh0O1xuICAgIH1cblxuICAgIGlmIChoZWFkZXJBbGlnbikge1xuICAgICAgY2VsbFN0eWxlLnRleHRBbGlnbiA9IF8uaXNGdW5jdGlvbihoZWFkZXJBbGlnbikgPyBoZWFkZXJBbGlnbihjb2x1bW4sIGluZGV4KSA6IGhlYWRlckFsaWduO1xuICAgIH1cblxuICAgIGlmIChzb3J0KSB7XG4gICAgICBjb25zdCBjdXN0b21DbGljayA9IGNlbGxBdHRycy5vbkNsaWNrO1xuICAgICAgY2VsbEF0dHJzWydhcmlhLWxhYmVsJ10gPSBzb3J0aW5nID8gYCR7dGV4dH0gc29ydCAke3NvcnRPcmRlcn1gIDogYCR7dGV4dH0gc29ydGFibGVgO1xuICAgICAgY2VsbEF0dHJzLm9uS2V5VXAgPSAoZSkgPT4ge1xuICAgICAgICBpZiAoZS5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgICAgICBvblNvcnQoY29sdW1uKTtcbiAgICAgICAgICBpZiAoXy5pc0Z1bmN0aW9uKGN1c3RvbUNsaWNrKSkgY3VzdG9tQ2xpY2soZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjZWxsQXR0cnMub25DbGljayA9IChlKSA9PiB7XG4gICAgICAgIG9uU29ydChjb2x1bW4pO1xuICAgICAgICBpZiAoXy5pc0Z1bmN0aW9uKGN1c3RvbUNsaWNrKSkgY3VzdG9tQ2xpY2soZSk7XG4gICAgICB9O1xuICAgICAgY2VsbEF0dHJzLmNsYXNzTmFtZSA9IGNzKGNlbGxBdHRycy5jbGFzc05hbWUsICdzb3J0YWJsZScpO1xuXG4gICAgICBpZiAoc29ydGluZykge1xuICAgICAgICBzb3J0U3ltYm9sID0gc29ydENhcmV0ZnVuYyA/XG4gICAgICAgICAgc29ydENhcmV0ZnVuYyhzb3J0T3JkZXIsIGNvbHVtbikgOlxuICAgICAgICAgIDxTb3J0Q2FyZXQgb3JkZXI9eyBzb3J0T3JkZXIgfSAvPjtcblxuICAgICAgICAvLyBhcHBlbmQgY3VzdG9taXplZCBjbGFzc2VzIG9yIHN0eWxlIGlmIHRhYmxlIHdhcyBzb3J0aW5nIGJhc2VkIG9uIHRoZSBjdXJyZW50IGNvbHVtbi5cbiAgICAgICAgY2VsbENsYXNzZXMgPSBjcyhcbiAgICAgICAgICBjZWxsQ2xhc3NlcyxcbiAgICAgICAgICBfLmlzRnVuY3Rpb24oaGVhZGVyU29ydGluZ0NsYXNzZXMpXG4gICAgICAgICAgICA/IGhlYWRlclNvcnRpbmdDbGFzc2VzKGNvbHVtbiwgc29ydE9yZGVyLCBpc0xhc3RTb3J0aW5nLCBpbmRleClcbiAgICAgICAgICAgIDogaGVhZGVyU29ydGluZ0NsYXNzZXNcbiAgICAgICAgKTtcblxuICAgICAgICBjZWxsU3R5bGUgPSB7XG4gICAgICAgICAgLi4uY2VsbFN0eWxlLFxuICAgICAgICAgIC4uLl8uaXNGdW5jdGlvbihoZWFkZXJTb3J0aW5nU3R5bGUpXG4gICAgICAgICAgICA/IGhlYWRlclNvcnRpbmdTdHlsZShjb2x1bW4sIHNvcnRPcmRlciwgaXNMYXN0U29ydGluZywgaW5kZXgpXG4gICAgICAgICAgICA6IGhlYWRlclNvcnRpbmdTdHlsZVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc29ydFN5bWJvbCA9IHNvcnRDYXJldGZ1bmMgPyBzb3J0Q2FyZXRmdW5jKHVuZGVmaW5lZCwgY29sdW1uKSA6IDxTb3J0U3ltYm9sIC8+O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjZWxsQ2xhc3NlcykgY2VsbEF0dHJzLmNsYXNzTmFtZSA9IGNzKGNlbGxBdHRycy5jbGFzc05hbWUsIGNlbGxDbGFzc2VzKTtcbiAgICBpZiAoIV8uaXNFbXB0eU9iamVjdChjZWxsU3R5bGUpKSBjZWxsQXR0cnMuc3R5bGUgPSBjZWxsU3R5bGU7XG5cbiAgICBpZiAoZmlsdGVyUG9zaXRpb24gPT09IENvbnN0LkZJTFRFUlNfUE9TSVRJT05fSU5MSU5FKSB7XG4gICAgICBpZiAoZmlsdGVyUmVuZGVyZXIpIHtcbiAgICAgICAgY29uc3Qgb25DdXN0b21GaWx0ZXIgPSBvbkV4dGVybmFsRmlsdGVyKGNvbHVtbiwgZmlsdGVyLnByb3BzLnR5cGUpO1xuICAgICAgICBmaWx0ZXJFbG0gPSBmaWx0ZXJSZW5kZXJlcihvbkN1c3RvbUZpbHRlciwgY29sdW1uKTtcbiAgICAgIH0gZWxzZSBpZiAoZmlsdGVyKSB7XG4gICAgICAgIGZpbHRlckVsbSA9IChcbiAgICAgICAgICA8ZmlsdGVyLkZpbHRlclxuICAgICAgICAgICAgeyAuLi5maWx0ZXIucHJvcHMgfVxuICAgICAgICAgICAgZmlsdGVyU3RhdGU9eyBjdXJyRmlsdGVyc1tjb2x1bW4uZGF0YUZpZWxkXSB9XG4gICAgICAgICAgICBvbkZpbHRlcj17IG9uRmlsdGVyIH1cbiAgICAgICAgICAgIGNvbHVtbj17IGNvbHVtbiB9XG4gICAgICAgICAgLz5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjaGlsZHJlbiA9IGhlYWRlckZvcm1hdHRlciA/XG4gICAgICBoZWFkZXJGb3JtYXR0ZXIoY29sdW1uLCBpbmRleCwgeyBzb3J0RWxlbWVudDogc29ydFN5bWJvbCwgZmlsdGVyRWxlbWVudDogZmlsdGVyRWxtIH0pIDpcbiAgICAgIHRleHQ7XG5cbiAgICBpZiAoaGVhZGVyRm9ybWF0dGVyKSB7XG4gICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudCgndGgnLCBjZWxsQXR0cnMsIGNoaWxkcmVuKTtcbiAgICB9XG5cbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudCgndGgnLCBjZWxsQXR0cnMsIGNoaWxkcmVuLCBzb3J0U3ltYm9sLCBmaWx0ZXJFbG0pO1xuICB9XG59XG5cbkhlYWRlckNlbGwucHJvcFR5cGVzID0ge1xuICBjb2x1bW46IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgZGF0YUZpZWxkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgdGV4dDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIHR5cGU6IFByb3BUeXBlcy5vbmVPZihbXG4gICAgICBDb25zdC5UWVBFX1NUUklORyxcbiAgICAgIENvbnN0LlRZUEVfTlVNQkVSLFxuICAgICAgQ29uc3QuVFlQRV9CT09MRUFOLFxuICAgICAgQ29uc3QuVFlQRV9EQVRFXG4gICAgXSksXG4gICAgaXNEdW1teUZpZWxkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBoaWRkZW46IFByb3BUeXBlcy5ib29sLFxuICAgIGhlYWRlckZvcm1hdHRlcjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgZm9ybWF0dGVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBmb3JtYXRFeHRyYURhdGE6IFByb3BUeXBlcy5hbnksXG4gICAgaGVhZGVyQ2xhc3NlczogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgICBjbGFzc2VzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMuZnVuY10pLFxuICAgIGhlYWRlclN0eWxlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuZnVuY10pLFxuICAgIHN0eWxlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuZnVuY10pLFxuICAgIGhlYWRlclRpdGxlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYm9vbCwgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgICB0aXRsZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmJvb2wsIFByb3BUeXBlcy5mdW5jXSksXG4gICAgaGVhZGVyRXZlbnRzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGV2ZW50czogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBoZWFkZXJBbGlnbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgICBhbGlnbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgICBoZWFkZXJBdHRyczogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgICBhdHRyczogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgICBzb3J0OiBQcm9wVHlwZXMuYm9vbCxcbiAgICBzb3J0RnVuYzogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25Tb3J0OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBlZGl0b3I6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgZWRpdGFibGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ib29sLCBQcm9wVHlwZXMuZnVuY10pLFxuICAgIGVkaXRDZWxsU3R5bGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5mdW5jXSksXG4gICAgZWRpdENlbGxDbGFzc2VzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMuZnVuY10pLFxuICAgIGVkaXRvclN0eWxlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuZnVuY10pLFxuICAgIGVkaXRvckNsYXNzZXM6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5mdW5jXSksXG4gICAgZWRpdG9yUmVuZGVyZXI6IFByb3BUeXBlcy5mdW5jLFxuICAgIHZhbGlkYXRvcjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgZmlsdGVyOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGZpbHRlclJlbmRlcmVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBmaWx0ZXJWYWx1ZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgc2VhcmNoYWJsZTogUHJvcFR5cGVzLmJvb2xcbiAgfSkuaXNSZXF1aXJlZCxcbiAgaW5kZXg6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgb25Tb3J0OiBQcm9wVHlwZXMuZnVuYyxcbiAgc29ydGluZzogUHJvcFR5cGVzLmJvb2wsXG4gIHNvcnRPcmRlcjogUHJvcFR5cGVzLm9uZU9mKFtDb25zdC5TT1JUX0FTQywgQ29uc3QuU09SVF9ERVNDXSksXG4gIHNvcnRDYXJldDogUHJvcFR5cGVzLmZ1bmMsXG4gIGlzTGFzdFNvcnRpbmc6IFByb3BUeXBlcy5ib29sLFxuICBvbkZpbHRlcjogUHJvcFR5cGVzLmZ1bmMsXG4gIGZpbHRlclBvc2l0aW9uOiBQcm9wVHlwZXMub25lT2YoW0NvbnN0LkZJTFRFUlNfUE9TSVRJT05fSU5MSU5FLFxuICAgIENvbnN0LkZJTFRFUlNfUE9TSVRJT05fQk9UVE9NLCBDb25zdC5GSUxURVJTX1BPU0lUSU9OX1RPUF0pLFxuICBjdXJyRmlsdGVyczogUHJvcFR5cGVzLm9iamVjdCxcbiAgb25FeHRlcm5hbEZpbHRlcjogUHJvcFR5cGVzLmZ1bmNcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEhlYWRlckNlbGw7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9oZWFkZXItY2VsbC5qcyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBCb290c3RyYXBDb250ZXh0IH0gZnJvbSAnLi4vY29udGV4dHMvYm9vdHN0cmFwJztcblxuY29uc3QgU29ydFN5bWJvbCA9ICgpID0+IChcbiAgPEJvb3RzdHJhcENvbnRleHQuQ29uc3VtZXI+XG4gICAge1xuICAgICAgKHsgYm9vdHN0cmFwNCB9KSA9PiAoYm9vdHN0cmFwNCA/IChcbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwib3JkZXItNFwiIC8+XG4gICAgICApIDogKFxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJvcmRlclwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImRyb3Bkb3duXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJjYXJldFwiIC8+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImRyb3B1cFwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiY2FyZXRcIiAvPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgKSlcbiAgICB9XG4gIDwvQm9vdHN0cmFwQ29udGV4dC5Db25zdW1lcj5cbik7XG5cbmV4cG9ydCBkZWZhdWx0IFNvcnRTeW1ib2w7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9zb3J0L3N5bWJvbC5qcyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY3MgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG5pbXBvcnQgQ29uc3QgZnJvbSAnLi4vY29uc3QnO1xuaW1wb3J0IHsgQm9vdHN0cmFwQ29udGV4dCB9IGZyb20gJy4uL2NvbnRleHRzL2Jvb3RzdHJhcCc7XG5cblxuY29uc3QgU29ydENhcmV0ID0gKHsgb3JkZXIgfSkgPT4ge1xuICBjb25zdCBvcmRlckNsYXNzID0gY3MoJ3JlYWN0LWJvb3RzdHJhcC10YWJsZS1zb3J0LW9yZGVyJywge1xuICAgIGRyb3B1cDogb3JkZXIgPT09IENvbnN0LlNPUlRfQVNDXG4gIH0pO1xuXG4gIHJldHVybiAoXG4gICAgPEJvb3RzdHJhcENvbnRleHQuQ29uc3VtZXI+XG4gICAgICB7XG4gICAgICAgICh7IGJvb3RzdHJhcDQgfSkgPT4gKGJvb3RzdHJhcDQgPyAoXG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXsgYGNhcmV0LTQtJHtvcmRlcn1gIH0gLz5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9eyBvcmRlckNsYXNzIH0+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJjYXJldFwiIC8+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICApKVxuICAgICAgfVxuICAgIDwvQm9vdHN0cmFwQ29udGV4dC5Db25zdW1lcj5cbiAgKTtcbn07XG5cblNvcnRDYXJldC5wcm9wVHlwZXMgPSB7XG4gIG9yZGVyOiBQcm9wVHlwZXMub25lT2YoW0NvbnN0LlNPUlRfQVNDLCBDb25zdC5TT1JUX0RFU0NdKS5pc1JlcXVpcmVkXG59O1xuXG5leHBvcnQgZGVmYXVsdCBTb3J0Q2FyZXQ7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9zb3J0L2NhcmV0LmpzIiwiLy8gICAgIFVuZGVyc2NvcmUuanMgMS45LjFcbi8vICAgICBodHRwOi8vdW5kZXJzY29yZWpzLm9yZ1xuLy8gICAgIChjKSAyMDA5LTIwMTggSmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIGFuZCBJbnZlc3RpZ2F0aXZlIFJlcG9ydGVycyAmIEVkaXRvcnNcbi8vICAgICBVbmRlcnNjb3JlIG1heSBiZSBmcmVlbHkgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuXG4oZnVuY3Rpb24oKSB7XG5cbiAgLy8gQmFzZWxpbmUgc2V0dXBcbiAgLy8gLS0tLS0tLS0tLS0tLS1cblxuICAvLyBFc3RhYmxpc2ggdGhlIHJvb3Qgb2JqZWN0LCBgd2luZG93YCAoYHNlbGZgKSBpbiB0aGUgYnJvd3NlciwgYGdsb2JhbGBcbiAgLy8gb24gdGhlIHNlcnZlciwgb3IgYHRoaXNgIGluIHNvbWUgdmlydHVhbCBtYWNoaW5lcy4gV2UgdXNlIGBzZWxmYFxuICAvLyBpbnN0ZWFkIG9mIGB3aW5kb3dgIGZvciBgV2ViV29ya2VyYCBzdXBwb3J0LlxuICB2YXIgcm9vdCA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYuc2VsZiA9PT0gc2VsZiAmJiBzZWxmIHx8XG4gICAgICAgICAgICB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbC5nbG9iYWwgPT09IGdsb2JhbCAmJiBnbG9iYWwgfHxcbiAgICAgICAgICAgIHRoaXMgfHxcbiAgICAgICAgICAgIHt9O1xuXG4gIC8vIFNhdmUgdGhlIHByZXZpb3VzIHZhbHVlIG9mIHRoZSBgX2AgdmFyaWFibGUuXG4gIHZhciBwcmV2aW91c1VuZGVyc2NvcmUgPSByb290Ll87XG5cbiAgLy8gU2F2ZSBieXRlcyBpbiB0aGUgbWluaWZpZWQgKGJ1dCBub3QgZ3ppcHBlZCkgdmVyc2lvbjpcbiAgdmFyIEFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGUsIE9ialByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcbiAgdmFyIFN5bWJvbFByb3RvID0gdHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgPyBTeW1ib2wucHJvdG90eXBlIDogbnVsbDtcblxuICAvLyBDcmVhdGUgcXVpY2sgcmVmZXJlbmNlIHZhcmlhYmxlcyBmb3Igc3BlZWQgYWNjZXNzIHRvIGNvcmUgcHJvdG90eXBlcy5cbiAgdmFyIHB1c2ggPSBBcnJheVByb3RvLnB1c2gsXG4gICAgICBzbGljZSA9IEFycmF5UHJvdG8uc2xpY2UsXG4gICAgICB0b1N0cmluZyA9IE9ialByb3RvLnRvU3RyaW5nLFxuICAgICAgaGFzT3duUHJvcGVydHkgPSBPYmpQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuICAvLyBBbGwgKipFQ01BU2NyaXB0IDUqKiBuYXRpdmUgZnVuY3Rpb24gaW1wbGVtZW50YXRpb25zIHRoYXQgd2UgaG9wZSB0byB1c2VcbiAgLy8gYXJlIGRlY2xhcmVkIGhlcmUuXG4gIHZhciBuYXRpdmVJc0FycmF5ID0gQXJyYXkuaXNBcnJheSxcbiAgICAgIG5hdGl2ZUtleXMgPSBPYmplY3Qua2V5cyxcbiAgICAgIG5hdGl2ZUNyZWF0ZSA9IE9iamVjdC5jcmVhdGU7XG5cbiAgLy8gTmFrZWQgZnVuY3Rpb24gcmVmZXJlbmNlIGZvciBzdXJyb2dhdGUtcHJvdG90eXBlLXN3YXBwaW5nLlxuICB2YXIgQ3RvciA9IGZ1bmN0aW9uKCl7fTtcblxuICAvLyBDcmVhdGUgYSBzYWZlIHJlZmVyZW5jZSB0byB0aGUgVW5kZXJzY29yZSBvYmplY3QgZm9yIHVzZSBiZWxvdy5cbiAgdmFyIF8gPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAob2JqIGluc3RhbmNlb2YgXykgcmV0dXJuIG9iajtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgXykpIHJldHVybiBuZXcgXyhvYmopO1xuICAgIHRoaXMuX3dyYXBwZWQgPSBvYmo7XG4gIH07XG5cbiAgLy8gRXhwb3J0IHRoZSBVbmRlcnNjb3JlIG9iamVjdCBmb3IgKipOb2RlLmpzKiosIHdpdGhcbiAgLy8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZm9yIHRoZWlyIG9sZCBtb2R1bGUgQVBJLiBJZiB3ZSdyZSBpblxuICAvLyB0aGUgYnJvd3NlciwgYWRkIGBfYCBhcyBhIGdsb2JhbCBvYmplY3QuXG4gIC8vIChgbm9kZVR5cGVgIGlzIGNoZWNrZWQgdG8gZW5zdXJlIHRoYXQgYG1vZHVsZWBcbiAgLy8gYW5kIGBleHBvcnRzYCBhcmUgbm90IEhUTUwgZWxlbWVudHMuKVxuICBpZiAodHlwZW9mIGV4cG9ydHMgIT0gJ3VuZGVmaW5lZCcgJiYgIWV4cG9ydHMubm9kZVR5cGUpIHtcbiAgICBpZiAodHlwZW9mIG1vZHVsZSAhPSAndW5kZWZpbmVkJyAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICBleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBfO1xuICAgIH1cbiAgICBleHBvcnRzLl8gPSBfO1xuICB9IGVsc2Uge1xuICAgIHJvb3QuXyA9IF87XG4gIH1cblxuICAvLyBDdXJyZW50IHZlcnNpb24uXG4gIF8uVkVSU0lPTiA9ICcxLjkuMSc7XG5cbiAgLy8gSW50ZXJuYWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIGVmZmljaWVudCAoZm9yIGN1cnJlbnQgZW5naW5lcykgdmVyc2lvblxuICAvLyBvZiB0aGUgcGFzc2VkLWluIGNhbGxiYWNrLCB0byBiZSByZXBlYXRlZGx5IGFwcGxpZWQgaW4gb3RoZXIgVW5kZXJzY29yZVxuICAvLyBmdW5jdGlvbnMuXG4gIHZhciBvcHRpbWl6ZUNiID0gZnVuY3Rpb24oZnVuYywgY29udGV4dCwgYXJnQ291bnQpIHtcbiAgICBpZiAoY29udGV4dCA9PT0gdm9pZCAwKSByZXR1cm4gZnVuYztcbiAgICBzd2l0Y2ggKGFyZ0NvdW50ID09IG51bGwgPyAzIDogYXJnQ291bnQpIHtcbiAgICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgdmFsdWUpO1xuICAgICAgfTtcbiAgICAgIC8vIFRoZSAyLWFyZ3VtZW50IGNhc2UgaXMgb21pdHRlZCBiZWNhdXNlIHdl4oCZcmUgbm90IHVzaW5nIGl0LlxuICAgICAgY2FzZSAzOiByZXR1cm4gZnVuY3Rpb24odmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKTtcbiAgICAgIH07XG4gICAgICBjYXNlIDQ6IHJldHVybiBmdW5jdGlvbihhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgYWNjdW11bGF0b3IsIHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbik7XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZnVuYy5hcHBseShjb250ZXh0LCBhcmd1bWVudHMpO1xuICAgIH07XG4gIH07XG5cbiAgdmFyIGJ1aWx0aW5JdGVyYXRlZTtcblxuICAvLyBBbiBpbnRlcm5hbCBmdW5jdGlvbiB0byBnZW5lcmF0ZSBjYWxsYmFja3MgdGhhdCBjYW4gYmUgYXBwbGllZCB0byBlYWNoXG4gIC8vIGVsZW1lbnQgaW4gYSBjb2xsZWN0aW9uLCByZXR1cm5pbmcgdGhlIGRlc2lyZWQgcmVzdWx0IOKAlCBlaXRoZXIgYGlkZW50aXR5YCxcbiAgLy8gYW4gYXJiaXRyYXJ5IGNhbGxiYWNrLCBhIHByb3BlcnR5IG1hdGNoZXIsIG9yIGEgcHJvcGVydHkgYWNjZXNzb3IuXG4gIHZhciBjYiA9IGZ1bmN0aW9uKHZhbHVlLCBjb250ZXh0LCBhcmdDb3VudCkge1xuICAgIGlmIChfLml0ZXJhdGVlICE9PSBidWlsdGluSXRlcmF0ZWUpIHJldHVybiBfLml0ZXJhdGVlKHZhbHVlLCBjb250ZXh0KTtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIF8uaWRlbnRpdHk7XG4gICAgaWYgKF8uaXNGdW5jdGlvbih2YWx1ZSkpIHJldHVybiBvcHRpbWl6ZUNiKHZhbHVlLCBjb250ZXh0LCBhcmdDb3VudCk7XG4gICAgaWYgKF8uaXNPYmplY3QodmFsdWUpICYmICFfLmlzQXJyYXkodmFsdWUpKSByZXR1cm4gXy5tYXRjaGVyKHZhbHVlKTtcbiAgICByZXR1cm4gXy5wcm9wZXJ0eSh2YWx1ZSk7XG4gIH07XG5cbiAgLy8gRXh0ZXJuYWwgd3JhcHBlciBmb3Igb3VyIGNhbGxiYWNrIGdlbmVyYXRvci4gVXNlcnMgbWF5IGN1c3RvbWl6ZVxuICAvLyBgXy5pdGVyYXRlZWAgaWYgdGhleSB3YW50IGFkZGl0aW9uYWwgcHJlZGljYXRlL2l0ZXJhdGVlIHNob3J0aGFuZCBzdHlsZXMuXG4gIC8vIFRoaXMgYWJzdHJhY3Rpb24gaGlkZXMgdGhlIGludGVybmFsLW9ubHkgYXJnQ291bnQgYXJndW1lbnQuXG4gIF8uaXRlcmF0ZWUgPSBidWlsdGluSXRlcmF0ZWUgPSBmdW5jdGlvbih2YWx1ZSwgY29udGV4dCkge1xuICAgIHJldHVybiBjYih2YWx1ZSwgY29udGV4dCwgSW5maW5pdHkpO1xuICB9O1xuXG4gIC8vIFNvbWUgZnVuY3Rpb25zIHRha2UgYSB2YXJpYWJsZSBudW1iZXIgb2YgYXJndW1lbnRzLCBvciBhIGZldyBleHBlY3RlZFxuICAvLyBhcmd1bWVudHMgYXQgdGhlIGJlZ2lubmluZyBhbmQgdGhlbiBhIHZhcmlhYmxlIG51bWJlciBvZiB2YWx1ZXMgdG8gb3BlcmF0ZVxuICAvLyBvbi4gVGhpcyBoZWxwZXIgYWNjdW11bGF0ZXMgYWxsIHJlbWFpbmluZyBhcmd1bWVudHMgcGFzdCB0aGUgZnVuY3Rpb27igJlzXG4gIC8vIGFyZ3VtZW50IGxlbmd0aCAob3IgYW4gZXhwbGljaXQgYHN0YXJ0SW5kZXhgKSwgaW50byBhbiBhcnJheSB0aGF0IGJlY29tZXNcbiAgLy8gdGhlIGxhc3QgYXJndW1lbnQuIFNpbWlsYXIgdG8gRVM24oCZcyBcInJlc3QgcGFyYW1ldGVyXCIuXG4gIHZhciByZXN0QXJndW1lbnRzID0gZnVuY3Rpb24oZnVuYywgc3RhcnRJbmRleCkge1xuICAgIHN0YXJ0SW5kZXggPSBzdGFydEluZGV4ID09IG51bGwgPyBmdW5jLmxlbmd0aCAtIDEgOiArc3RhcnRJbmRleDtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gTWF0aC5tYXgoYXJndW1lbnRzLmxlbmd0aCAtIHN0YXJ0SW5kZXgsIDApLFxuICAgICAgICAgIHJlc3QgPSBBcnJheShsZW5ndGgpLFxuICAgICAgICAgIGluZGV4ID0gMDtcbiAgICAgIGZvciAoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICByZXN0W2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleCArIHN0YXJ0SW5kZXhdO1xuICAgICAgfVxuICAgICAgc3dpdGNoIChzdGFydEluZGV4KSB7XG4gICAgICAgIGNhc2UgMDogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCByZXN0KTtcbiAgICAgICAgY2FzZSAxOiByZXR1cm4gZnVuYy5jYWxsKHRoaXMsIGFyZ3VtZW50c1swXSwgcmVzdCk7XG4gICAgICAgIGNhc2UgMjogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCBhcmd1bWVudHNbMF0sIGFyZ3VtZW50c1sxXSwgcmVzdCk7XG4gICAgICB9XG4gICAgICB2YXIgYXJncyA9IEFycmF5KHN0YXJ0SW5kZXggKyAxKTtcbiAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHN0YXJ0SW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgYXJnc1tpbmRleF0gPSBhcmd1bWVudHNbaW5kZXhdO1xuICAgICAgfVxuICAgICAgYXJnc1tzdGFydEluZGV4XSA9IHJlc3Q7XG4gICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIEFuIGludGVybmFsIGZ1bmN0aW9uIGZvciBjcmVhdGluZyBhIG5ldyBvYmplY3QgdGhhdCBpbmhlcml0cyBmcm9tIGFub3RoZXIuXG4gIHZhciBiYXNlQ3JlYXRlID0gZnVuY3Rpb24ocHJvdG90eXBlKSB7XG4gICAgaWYgKCFfLmlzT2JqZWN0KHByb3RvdHlwZSkpIHJldHVybiB7fTtcbiAgICBpZiAobmF0aXZlQ3JlYXRlKSByZXR1cm4gbmF0aXZlQ3JlYXRlKHByb3RvdHlwZSk7XG4gICAgQ3Rvci5wcm90b3R5cGUgPSBwcm90b3R5cGU7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBDdG9yO1xuICAgIEN0b3IucHJvdG90eXBlID0gbnVsbDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIHZhciBzaGFsbG93UHJvcGVydHkgPSBmdW5jdGlvbihrZXkpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gb2JqID09IG51bGwgPyB2b2lkIDAgOiBvYmpba2V5XTtcbiAgICB9O1xuICB9O1xuXG4gIHZhciBoYXMgPSBmdW5jdGlvbihvYmosIHBhdGgpIHtcbiAgICByZXR1cm4gb2JqICE9IG51bGwgJiYgaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHBhdGgpO1xuICB9XG5cbiAgdmFyIGRlZXBHZXQgPSBmdW5jdGlvbihvYmosIHBhdGgpIHtcbiAgICB2YXIgbGVuZ3RoID0gcGF0aC5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gdm9pZCAwO1xuICAgICAgb2JqID0gb2JqW3BhdGhbaV1dO1xuICAgIH1cbiAgICByZXR1cm4gbGVuZ3RoID8gb2JqIDogdm9pZCAwO1xuICB9O1xuXG4gIC8vIEhlbHBlciBmb3IgY29sbGVjdGlvbiBtZXRob2RzIHRvIGRldGVybWluZSB3aGV0aGVyIGEgY29sbGVjdGlvblxuICAvLyBzaG91bGQgYmUgaXRlcmF0ZWQgYXMgYW4gYXJyYXkgb3IgYXMgYW4gb2JqZWN0LlxuICAvLyBSZWxhdGVkOiBodHRwOi8vcGVvcGxlLm1vemlsbGEub3JnL35qb3JlbmRvcmZmL2VzNi1kcmFmdC5odG1sI3NlYy10b2xlbmd0aFxuICAvLyBBdm9pZHMgYSB2ZXJ5IG5hc3R5IGlPUyA4IEpJVCBidWcgb24gQVJNLTY0LiAjMjA5NFxuICB2YXIgTUFYX0FSUkFZX0lOREVYID0gTWF0aC5wb3coMiwgNTMpIC0gMTtcbiAgdmFyIGdldExlbmd0aCA9IHNoYWxsb3dQcm9wZXJ0eSgnbGVuZ3RoJyk7XG4gIHZhciBpc0FycmF5TGlrZSA9IGZ1bmN0aW9uKGNvbGxlY3Rpb24pIHtcbiAgICB2YXIgbGVuZ3RoID0gZ2V0TGVuZ3RoKGNvbGxlY3Rpb24pO1xuICAgIHJldHVybiB0eXBlb2YgbGVuZ3RoID09ICdudW1iZXInICYmIGxlbmd0aCA+PSAwICYmIGxlbmd0aCA8PSBNQVhfQVJSQVlfSU5ERVg7XG4gIH07XG5cbiAgLy8gQ29sbGVjdGlvbiBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBUaGUgY29ybmVyc3RvbmUsIGFuIGBlYWNoYCBpbXBsZW1lbnRhdGlvbiwgYWthIGBmb3JFYWNoYC5cbiAgLy8gSGFuZGxlcyByYXcgb2JqZWN0cyBpbiBhZGRpdGlvbiB0byBhcnJheS1saWtlcy4gVHJlYXRzIGFsbFxuICAvLyBzcGFyc2UgYXJyYXktbGlrZXMgYXMgaWYgdGhleSB3ZXJlIGRlbnNlLlxuICBfLmVhY2ggPSBfLmZvckVhY2ggPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBvcHRpbWl6ZUNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICB2YXIgaSwgbGVuZ3RoO1xuICAgIGlmIChpc0FycmF5TGlrZShvYmopKSB7XG4gICAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSBvYmoubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaXRlcmF0ZWUob2JqW2ldLCBpLCBvYmopO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIga2V5cyA9IF8ua2V5cyhvYmopO1xuICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBpdGVyYXRlZShvYmpba2V5c1tpXV0sIGtleXNbaV0sIG9iaik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH07XG5cbiAgLy8gUmV0dXJuIHRoZSByZXN1bHRzIG9mIGFwcGx5aW5nIHRoZSBpdGVyYXRlZSB0byBlYWNoIGVsZW1lbnQuXG4gIF8ubWFwID0gXy5jb2xsZWN0ID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHZhciBrZXlzID0gIWlzQXJyYXlMaWtlKG9iaikgJiYgXy5rZXlzKG9iaiksXG4gICAgICAgIGxlbmd0aCA9IChrZXlzIHx8IG9iaikubGVuZ3RoLFxuICAgICAgICByZXN1bHRzID0gQXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgY3VycmVudEtleSA9IGtleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAgcmVzdWx0c1tpbmRleF0gPSBpdGVyYXRlZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaik7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRzO1xuICB9O1xuXG4gIC8vIENyZWF0ZSBhIHJlZHVjaW5nIGZ1bmN0aW9uIGl0ZXJhdGluZyBsZWZ0IG9yIHJpZ2h0LlxuICB2YXIgY3JlYXRlUmVkdWNlID0gZnVuY3Rpb24oZGlyKSB7XG4gICAgLy8gV3JhcCBjb2RlIHRoYXQgcmVhc3NpZ25zIGFyZ3VtZW50IHZhcmlhYmxlcyBpbiBhIHNlcGFyYXRlIGZ1bmN0aW9uIHRoYW5cbiAgICAvLyB0aGUgb25lIHRoYXQgYWNjZXNzZXMgYGFyZ3VtZW50cy5sZW5ndGhgIHRvIGF2b2lkIGEgcGVyZiBoaXQuICgjMTk5MSlcbiAgICB2YXIgcmVkdWNlciA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIG1lbW8sIGluaXRpYWwpIHtcbiAgICAgIHZhciBrZXlzID0gIWlzQXJyYXlMaWtlKG9iaikgJiYgXy5rZXlzKG9iaiksXG4gICAgICAgICAgbGVuZ3RoID0gKGtleXMgfHwgb2JqKS5sZW5ndGgsXG4gICAgICAgICAgaW5kZXggPSBkaXIgPiAwID8gMCA6IGxlbmd0aCAtIDE7XG4gICAgICBpZiAoIWluaXRpYWwpIHtcbiAgICAgICAgbWVtbyA9IG9ialtrZXlzID8ga2V5c1tpbmRleF0gOiBpbmRleF07XG4gICAgICAgIGluZGV4ICs9IGRpcjtcbiAgICAgIH1cbiAgICAgIGZvciAoOyBpbmRleCA+PSAwICYmIGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSBkaXIpIHtcbiAgICAgICAgdmFyIGN1cnJlbnRLZXkgPSBrZXlzID8ga2V5c1tpbmRleF0gOiBpbmRleDtcbiAgICAgICAgbWVtbyA9IGl0ZXJhdGVlKG1lbW8sIG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtZW1vO1xuICAgIH07XG5cbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgbWVtbywgY29udGV4dCkge1xuICAgICAgdmFyIGluaXRpYWwgPSBhcmd1bWVudHMubGVuZ3RoID49IDM7XG4gICAgICByZXR1cm4gcmVkdWNlcihvYmosIG9wdGltaXplQ2IoaXRlcmF0ZWUsIGNvbnRleHQsIDQpLCBtZW1vLCBpbml0aWFsKTtcbiAgICB9O1xuICB9O1xuXG4gIC8vICoqUmVkdWNlKiogYnVpbGRzIHVwIGEgc2luZ2xlIHJlc3VsdCBmcm9tIGEgbGlzdCBvZiB2YWx1ZXMsIGFrYSBgaW5qZWN0YCxcbiAgLy8gb3IgYGZvbGRsYC5cbiAgXy5yZWR1Y2UgPSBfLmZvbGRsID0gXy5pbmplY3QgPSBjcmVhdGVSZWR1Y2UoMSk7XG5cbiAgLy8gVGhlIHJpZ2h0LWFzc29jaWF0aXZlIHZlcnNpb24gb2YgcmVkdWNlLCBhbHNvIGtub3duIGFzIGBmb2xkcmAuXG4gIF8ucmVkdWNlUmlnaHQgPSBfLmZvbGRyID0gY3JlYXRlUmVkdWNlKC0xKTtcblxuICAvLyBSZXR1cm4gdGhlIGZpcnN0IHZhbHVlIHdoaWNoIHBhc3NlcyBhIHRydXRoIHRlc3QuIEFsaWFzZWQgYXMgYGRldGVjdGAuXG4gIF8uZmluZCA9IF8uZGV0ZWN0ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIga2V5RmluZGVyID0gaXNBcnJheUxpa2Uob2JqKSA/IF8uZmluZEluZGV4IDogXy5maW5kS2V5O1xuICAgIHZhciBrZXkgPSBrZXlGaW5kZXIob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIGlmIChrZXkgIT09IHZvaWQgMCAmJiBrZXkgIT09IC0xKSByZXR1cm4gb2JqW2tleV07XG4gIH07XG5cbiAgLy8gUmV0dXJuIGFsbCB0aGUgZWxlbWVudHMgdGhhdCBwYXNzIGEgdHJ1dGggdGVzdC5cbiAgLy8gQWxpYXNlZCBhcyBgc2VsZWN0YC5cbiAgXy5maWx0ZXIgPSBfLnNlbGVjdCA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkge1xuICAgICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGxpc3QpKSByZXN1bHRzLnB1c2godmFsdWUpO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHRzO1xuICB9O1xuXG4gIC8vIFJldHVybiBhbGwgdGhlIGVsZW1lbnRzIGZvciB3aGljaCBhIHRydXRoIHRlc3QgZmFpbHMuXG4gIF8ucmVqZWN0ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gXy5maWx0ZXIob2JqLCBfLm5lZ2F0ZShjYihwcmVkaWNhdGUpKSwgY29udGV4dCk7XG4gIH07XG5cbiAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgYWxsIG9mIHRoZSBlbGVtZW50cyBtYXRjaCBhIHRydXRoIHRlc3QuXG4gIC8vIEFsaWFzZWQgYXMgYGFsbGAuXG4gIF8uZXZlcnkgPSBfLmFsbCA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICB2YXIga2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYmIF8ua2V5cyhvYmopLFxuICAgICAgICBsZW5ndGggPSAoa2V5cyB8fCBvYmopLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgY3VycmVudEtleSA9IGtleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAgaWYgKCFwcmVkaWNhdGUob2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIC8vIERldGVybWluZSBpZiBhdCBsZWFzdCBvbmUgZWxlbWVudCBpbiB0aGUgb2JqZWN0IG1hdGNoZXMgYSB0cnV0aCB0ZXN0LlxuICAvLyBBbGlhc2VkIGFzIGBhbnlgLlxuICBfLnNvbWUgPSBfLmFueSA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICB2YXIga2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYmIF8ua2V5cyhvYmopLFxuICAgICAgICBsZW5ndGggPSAoa2V5cyB8fCBvYmopLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgY3VycmVudEtleSA9IGtleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAgaWYgKHByZWRpY2F0ZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaikpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgLy8gRGV0ZXJtaW5lIGlmIHRoZSBhcnJheSBvciBvYmplY3QgY29udGFpbnMgYSBnaXZlbiBpdGVtICh1c2luZyBgPT09YCkuXG4gIC8vIEFsaWFzZWQgYXMgYGluY2x1ZGVzYCBhbmQgYGluY2x1ZGVgLlxuICBfLmNvbnRhaW5zID0gXy5pbmNsdWRlcyA9IF8uaW5jbHVkZSA9IGZ1bmN0aW9uKG9iaiwgaXRlbSwgZnJvbUluZGV4LCBndWFyZCkge1xuICAgIGlmICghaXNBcnJheUxpa2Uob2JqKSkgb2JqID0gXy52YWx1ZXMob2JqKTtcbiAgICBpZiAodHlwZW9mIGZyb21JbmRleCAhPSAnbnVtYmVyJyB8fCBndWFyZCkgZnJvbUluZGV4ID0gMDtcbiAgICByZXR1cm4gXy5pbmRleE9mKG9iaiwgaXRlbSwgZnJvbUluZGV4KSA+PSAwO1xuICB9O1xuXG4gIC8vIEludm9rZSBhIG1ldGhvZCAod2l0aCBhcmd1bWVudHMpIG9uIGV2ZXJ5IGl0ZW0gaW4gYSBjb2xsZWN0aW9uLlxuICBfLmludm9rZSA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24ob2JqLCBwYXRoLCBhcmdzKSB7XG4gICAgdmFyIGNvbnRleHRQYXRoLCBmdW5jO1xuICAgIGlmIChfLmlzRnVuY3Rpb24ocGF0aCkpIHtcbiAgICAgIGZ1bmMgPSBwYXRoO1xuICAgIH0gZWxzZSBpZiAoXy5pc0FycmF5KHBhdGgpKSB7XG4gICAgICBjb250ZXh0UGF0aCA9IHBhdGguc2xpY2UoMCwgLTEpO1xuICAgICAgcGF0aCA9IHBhdGhbcGF0aC5sZW5ndGggLSAxXTtcbiAgICB9XG4gICAgcmV0dXJuIF8ubWFwKG9iaiwgZnVuY3Rpb24oY29udGV4dCkge1xuICAgICAgdmFyIG1ldGhvZCA9IGZ1bmM7XG4gICAgICBpZiAoIW1ldGhvZCkge1xuICAgICAgICBpZiAoY29udGV4dFBhdGggJiYgY29udGV4dFBhdGgubGVuZ3RoKSB7XG4gICAgICAgICAgY29udGV4dCA9IGRlZXBHZXQoY29udGV4dCwgY29udGV4dFBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb250ZXh0ID09IG51bGwpIHJldHVybiB2b2lkIDA7XG4gICAgICAgIG1ldGhvZCA9IGNvbnRleHRbcGF0aF07XG4gICAgICB9XG4gICAgICByZXR1cm4gbWV0aG9kID09IG51bGwgPyBtZXRob2QgOiBtZXRob2QuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIENvbnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYG1hcGA6IGZldGNoaW5nIGEgcHJvcGVydHkuXG4gIF8ucGx1Y2sgPSBmdW5jdGlvbihvYmosIGtleSkge1xuICAgIHJldHVybiBfLm1hcChvYmosIF8ucHJvcGVydHkoa2V5KSk7XG4gIH07XG5cbiAgLy8gQ29udmVuaWVuY2UgdmVyc2lvbiBvZiBhIGNvbW1vbiB1c2UgY2FzZSBvZiBgZmlsdGVyYDogc2VsZWN0aW5nIG9ubHkgb2JqZWN0c1xuICAvLyBjb250YWluaW5nIHNwZWNpZmljIGBrZXk6dmFsdWVgIHBhaXJzLlxuICBfLndoZXJlID0gZnVuY3Rpb24ob2JqLCBhdHRycykge1xuICAgIHJldHVybiBfLmZpbHRlcihvYmosIF8ubWF0Y2hlcihhdHRycykpO1xuICB9O1xuXG4gIC8vIENvbnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYGZpbmRgOiBnZXR0aW5nIHRoZSBmaXJzdCBvYmplY3RcbiAgLy8gY29udGFpbmluZyBzcGVjaWZpYyBga2V5OnZhbHVlYCBwYWlycy5cbiAgXy5maW5kV2hlcmUgPSBmdW5jdGlvbihvYmosIGF0dHJzKSB7XG4gICAgcmV0dXJuIF8uZmluZChvYmosIF8ubWF0Y2hlcihhdHRycykpO1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgbWF4aW11bSBlbGVtZW50IChvciBlbGVtZW50LWJhc2VkIGNvbXB1dGF0aW9uKS5cbiAgXy5tYXggPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdCA9IC1JbmZpbml0eSwgbGFzdENvbXB1dGVkID0gLUluZmluaXR5LFxuICAgICAgICB2YWx1ZSwgY29tcHV0ZWQ7XG4gICAgaWYgKGl0ZXJhdGVlID09IG51bGwgfHwgdHlwZW9mIGl0ZXJhdGVlID09ICdudW1iZXInICYmIHR5cGVvZiBvYmpbMF0gIT0gJ29iamVjdCcgJiYgb2JqICE9IG51bGwpIHtcbiAgICAgIG9iaiA9IGlzQXJyYXlMaWtlKG9iaikgPyBvYmogOiBfLnZhbHVlcyhvYmopO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IG9iai5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICB2YWx1ZSA9IG9ialtpXTtcbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUgPiByZXN1bHQpIHtcbiAgICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHYsIGluZGV4LCBsaXN0KSB7XG4gICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUodiwgaW5kZXgsIGxpc3QpO1xuICAgICAgICBpZiAoY29tcHV0ZWQgPiBsYXN0Q29tcHV0ZWQgfHwgY29tcHV0ZWQgPT09IC1JbmZpbml0eSAmJiByZXN1bHQgPT09IC1JbmZpbml0eSkge1xuICAgICAgICAgIHJlc3VsdCA9IHY7XG4gICAgICAgICAgbGFzdENvbXB1dGVkID0gY29tcHV0ZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgbWluaW11bSBlbGVtZW50IChvciBlbGVtZW50LWJhc2VkIGNvbXB1dGF0aW9uKS5cbiAgXy5taW4gPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdCA9IEluZmluaXR5LCBsYXN0Q29tcHV0ZWQgPSBJbmZpbml0eSxcbiAgICAgICAgdmFsdWUsIGNvbXB1dGVkO1xuICAgIGlmIChpdGVyYXRlZSA9PSBudWxsIHx8IHR5cGVvZiBpdGVyYXRlZSA9PSAnbnVtYmVyJyAmJiB0eXBlb2Ygb2JqWzBdICE9ICdvYmplY3QnICYmIG9iaiAhPSBudWxsKSB7XG4gICAgICBvYmogPSBpc0FycmF5TGlrZShvYmopID8gb2JqIDogXy52YWx1ZXMob2JqKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBvYmoubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFsdWUgPSBvYmpbaV07XG4gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIHZhbHVlIDwgcmVzdWx0KSB7XG4gICAgICAgICAgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgICBfLmVhY2gob2JqLCBmdW5jdGlvbih2LCBpbmRleCwgbGlzdCkge1xuICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlKHYsIGluZGV4LCBsaXN0KTtcbiAgICAgICAgaWYgKGNvbXB1dGVkIDwgbGFzdENvbXB1dGVkIHx8IGNvbXB1dGVkID09PSBJbmZpbml0eSAmJiByZXN1bHQgPT09IEluZmluaXR5KSB7XG4gICAgICAgICAgcmVzdWx0ID0gdjtcbiAgICAgICAgICBsYXN0Q29tcHV0ZWQgPSBjb21wdXRlZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gU2h1ZmZsZSBhIGNvbGxlY3Rpb24uXG4gIF8uc2h1ZmZsZSA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBfLnNhbXBsZShvYmosIEluZmluaXR5KTtcbiAgfTtcblxuICAvLyBTYW1wbGUgKipuKiogcmFuZG9tIHZhbHVlcyBmcm9tIGEgY29sbGVjdGlvbiB1c2luZyB0aGUgbW9kZXJuIHZlcnNpb24gb2YgdGhlXG4gIC8vIFtGaXNoZXItWWF0ZXMgc2h1ZmZsZV0oaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GaXNoZXLigJNZYXRlc19zaHVmZmxlKS5cbiAgLy8gSWYgKipuKiogaXMgbm90IHNwZWNpZmllZCwgcmV0dXJucyBhIHNpbmdsZSByYW5kb20gZWxlbWVudC5cbiAgLy8gVGhlIGludGVybmFsIGBndWFyZGAgYXJndW1lbnQgYWxsb3dzIGl0IHRvIHdvcmsgd2l0aCBgbWFwYC5cbiAgXy5zYW1wbGUgPSBmdW5jdGlvbihvYmosIG4sIGd1YXJkKSB7XG4gICAgaWYgKG4gPT0gbnVsbCB8fCBndWFyZCkge1xuICAgICAgaWYgKCFpc0FycmF5TGlrZShvYmopKSBvYmogPSBfLnZhbHVlcyhvYmopO1xuICAgICAgcmV0dXJuIG9ialtfLnJhbmRvbShvYmoubGVuZ3RoIC0gMSldO1xuICAgIH1cbiAgICB2YXIgc2FtcGxlID0gaXNBcnJheUxpa2Uob2JqKSA/IF8uY2xvbmUob2JqKSA6IF8udmFsdWVzKG9iaik7XG4gICAgdmFyIGxlbmd0aCA9IGdldExlbmd0aChzYW1wbGUpO1xuICAgIG4gPSBNYXRoLm1heChNYXRoLm1pbihuLCBsZW5ndGgpLCAwKTtcbiAgICB2YXIgbGFzdCA9IGxlbmd0aCAtIDE7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IG47IGluZGV4KyspIHtcbiAgICAgIHZhciByYW5kID0gXy5yYW5kb20oaW5kZXgsIGxhc3QpO1xuICAgICAgdmFyIHRlbXAgPSBzYW1wbGVbaW5kZXhdO1xuICAgICAgc2FtcGxlW2luZGV4XSA9IHNhbXBsZVtyYW5kXTtcbiAgICAgIHNhbXBsZVtyYW5kXSA9IHRlbXA7XG4gICAgfVxuICAgIHJldHVybiBzYW1wbGUuc2xpY2UoMCwgbik7XG4gIH07XG5cbiAgLy8gU29ydCB0aGUgb2JqZWN0J3MgdmFsdWVzIGJ5IGEgY3JpdGVyaW9uIHByb2R1Y2VkIGJ5IGFuIGl0ZXJhdGVlLlxuICBfLnNvcnRCeSA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHJldHVybiBfLnBsdWNrKF8ubWFwKG9iaiwgZnVuY3Rpb24odmFsdWUsIGtleSwgbGlzdCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBpbmRleDogaW5kZXgrKyxcbiAgICAgICAgY3JpdGVyaWE6IGl0ZXJhdGVlKHZhbHVlLCBrZXksIGxpc3QpXG4gICAgICB9O1xuICAgIH0pLnNvcnQoZnVuY3Rpb24obGVmdCwgcmlnaHQpIHtcbiAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYTtcbiAgICAgIHZhciBiID0gcmlnaHQuY3JpdGVyaWE7XG4gICAgICBpZiAoYSAhPT0gYikge1xuICAgICAgICBpZiAoYSA+IGIgfHwgYSA9PT0gdm9pZCAwKSByZXR1cm4gMTtcbiAgICAgICAgaWYgKGEgPCBiIHx8IGIgPT09IHZvaWQgMCkgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxlZnQuaW5kZXggLSByaWdodC5pbmRleDtcbiAgICB9KSwgJ3ZhbHVlJyk7XG4gIH07XG5cbiAgLy8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gdXNlZCBmb3IgYWdncmVnYXRlIFwiZ3JvdXAgYnlcIiBvcGVyYXRpb25zLlxuICB2YXIgZ3JvdXAgPSBmdW5jdGlvbihiZWhhdmlvciwgcGFydGl0aW9uKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICAgIHZhciByZXN1bHQgPSBwYXJ0aXRpb24gPyBbW10sIFtdXSA6IHt9O1xuICAgICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgICBfLmVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHtcbiAgICAgICAgdmFyIGtleSA9IGl0ZXJhdGVlKHZhbHVlLCBpbmRleCwgb2JqKTtcbiAgICAgICAgYmVoYXZpb3IocmVzdWx0LCB2YWx1ZSwga2V5KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICB9O1xuXG4gIC8vIEdyb3VwcyB0aGUgb2JqZWN0J3MgdmFsdWVzIGJ5IGEgY3JpdGVyaW9uLiBQYXNzIGVpdGhlciBhIHN0cmluZyBhdHRyaWJ1dGVcbiAgLy8gdG8gZ3JvdXAgYnksIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBjcml0ZXJpb24uXG4gIF8uZ3JvdXBCeSA9IGdyb3VwKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgIGlmIChoYXMocmVzdWx0LCBrZXkpKSByZXN1bHRba2V5XS5wdXNoKHZhbHVlKTsgZWxzZSByZXN1bHRba2V5XSA9IFt2YWx1ZV07XG4gIH0pO1xuXG4gIC8vIEluZGV4ZXMgdGhlIG9iamVjdCdzIHZhbHVlcyBieSBhIGNyaXRlcmlvbiwgc2ltaWxhciB0byBgZ3JvdXBCeWAsIGJ1dCBmb3JcbiAgLy8gd2hlbiB5b3Uga25vdyB0aGF0IHlvdXIgaW5kZXggdmFsdWVzIHdpbGwgYmUgdW5pcXVlLlxuICBfLmluZGV4QnkgPSBncm91cChmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgICByZXN1bHRba2V5XSA9IHZhbHVlO1xuICB9KTtcblxuICAvLyBDb3VudHMgaW5zdGFuY2VzIG9mIGFuIG9iamVjdCB0aGF0IGdyb3VwIGJ5IGEgY2VydGFpbiBjcml0ZXJpb24uIFBhc3NcbiAgLy8gZWl0aGVyIGEgc3RyaW5nIGF0dHJpYnV0ZSB0byBjb3VudCBieSwgb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlXG4gIC8vIGNyaXRlcmlvbi5cbiAgXy5jb3VudEJ5ID0gZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gICAgaWYgKGhhcyhyZXN1bHQsIGtleSkpIHJlc3VsdFtrZXldKys7IGVsc2UgcmVzdWx0W2tleV0gPSAxO1xuICB9KTtcblxuICB2YXIgcmVTdHJTeW1ib2wgPSAvW15cXHVkODAwLVxcdWRmZmZdfFtcXHVkODAwLVxcdWRiZmZdW1xcdWRjMDAtXFx1ZGZmZl18W1xcdWQ4MDAtXFx1ZGZmZl0vZztcbiAgLy8gU2FmZWx5IGNyZWF0ZSBhIHJlYWwsIGxpdmUgYXJyYXkgZnJvbSBhbnl0aGluZyBpdGVyYWJsZS5cbiAgXy50b0FycmF5ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKCFvYmopIHJldHVybiBbXTtcbiAgICBpZiAoXy5pc0FycmF5KG9iaikpIHJldHVybiBzbGljZS5jYWxsKG9iaik7XG4gICAgaWYgKF8uaXNTdHJpbmcob2JqKSkge1xuICAgICAgLy8gS2VlcCBzdXJyb2dhdGUgcGFpciBjaGFyYWN0ZXJzIHRvZ2V0aGVyXG4gICAgICByZXR1cm4gb2JqLm1hdGNoKHJlU3RyU3ltYm9sKTtcbiAgICB9XG4gICAgaWYgKGlzQXJyYXlMaWtlKG9iaikpIHJldHVybiBfLm1hcChvYmosIF8uaWRlbnRpdHkpO1xuICAgIHJldHVybiBfLnZhbHVlcyhvYmopO1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIGFuIG9iamVjdC5cbiAgXy5zaXplID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gMDtcbiAgICByZXR1cm4gaXNBcnJheUxpa2Uob2JqKSA/IG9iai5sZW5ndGggOiBfLmtleXMob2JqKS5sZW5ndGg7XG4gIH07XG5cbiAgLy8gU3BsaXQgYSBjb2xsZWN0aW9uIGludG8gdHdvIGFycmF5czogb25lIHdob3NlIGVsZW1lbnRzIGFsbCBzYXRpc2Z5IHRoZSBnaXZlblxuICAvLyBwcmVkaWNhdGUsIGFuZCBvbmUgd2hvc2UgZWxlbWVudHMgYWxsIGRvIG5vdCBzYXRpc2Z5IHRoZSBwcmVkaWNhdGUuXG4gIF8ucGFydGl0aW9uID0gZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwgcGFzcykge1xuICAgIHJlc3VsdFtwYXNzID8gMCA6IDFdLnB1c2godmFsdWUpO1xuICB9LCB0cnVlKTtcblxuICAvLyBBcnJheSBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gR2V0IHRoZSBmaXJzdCBlbGVtZW50IG9mIGFuIGFycmF5LiBQYXNzaW5nICoqbioqIHdpbGwgcmV0dXJuIHRoZSBmaXJzdCBOXG4gIC8vIHZhbHVlcyBpbiB0aGUgYXJyYXkuIEFsaWFzZWQgYXMgYGhlYWRgIGFuZCBgdGFrZWAuIFRoZSAqKmd1YXJkKiogY2hlY2tcbiAgLy8gYWxsb3dzIGl0IHRvIHdvcmsgd2l0aCBgXy5tYXBgLlxuICBfLmZpcnN0ID0gXy5oZWFkID0gXy50YWtlID0gZnVuY3Rpb24oYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgaWYgKGFycmF5ID09IG51bGwgfHwgYXJyYXkubGVuZ3RoIDwgMSkgcmV0dXJuIG4gPT0gbnVsbCA/IHZvaWQgMCA6IFtdO1xuICAgIGlmIChuID09IG51bGwgfHwgZ3VhcmQpIHJldHVybiBhcnJheVswXTtcbiAgICByZXR1cm4gXy5pbml0aWFsKGFycmF5LCBhcnJheS5sZW5ndGggLSBuKTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGV2ZXJ5dGhpbmcgYnV0IHRoZSBsYXN0IGVudHJ5IG9mIHRoZSBhcnJheS4gRXNwZWNpYWxseSB1c2VmdWwgb25cbiAgLy8gdGhlIGFyZ3VtZW50cyBvYmplY3QuIFBhc3NpbmcgKipuKiogd2lsbCByZXR1cm4gYWxsIHRoZSB2YWx1ZXMgaW5cbiAgLy8gdGhlIGFycmF5LCBleGNsdWRpbmcgdGhlIGxhc3QgTi5cbiAgXy5pbml0aWFsID0gZnVuY3Rpb24oYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgcmV0dXJuIHNsaWNlLmNhbGwoYXJyYXksIDAsIE1hdGgubWF4KDAsIGFycmF5Lmxlbmd0aCAtIChuID09IG51bGwgfHwgZ3VhcmQgPyAxIDogbikpKTtcbiAgfTtcblxuICAvLyBHZXQgdGhlIGxhc3QgZWxlbWVudCBvZiBhbiBhcnJheS4gUGFzc2luZyAqKm4qKiB3aWxsIHJldHVybiB0aGUgbGFzdCBOXG4gIC8vIHZhbHVlcyBpbiB0aGUgYXJyYXkuXG4gIF8ubGFzdCA9IGZ1bmN0aW9uKGFycmF5LCBuLCBndWFyZCkge1xuICAgIGlmIChhcnJheSA9PSBudWxsIHx8IGFycmF5Lmxlbmd0aCA8IDEpIHJldHVybiBuID09IG51bGwgPyB2b2lkIDAgOiBbXTtcbiAgICBpZiAobiA9PSBudWxsIHx8IGd1YXJkKSByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMV07XG4gICAgcmV0dXJuIF8ucmVzdChhcnJheSwgTWF0aC5tYXgoMCwgYXJyYXkubGVuZ3RoIC0gbikpO1xuICB9O1xuXG4gIC8vIFJldHVybnMgZXZlcnl0aGluZyBidXQgdGhlIGZpcnN0IGVudHJ5IG9mIHRoZSBhcnJheS4gQWxpYXNlZCBhcyBgdGFpbGAgYW5kIGBkcm9wYC5cbiAgLy8gRXNwZWNpYWxseSB1c2VmdWwgb24gdGhlIGFyZ3VtZW50cyBvYmplY3QuIFBhc3NpbmcgYW4gKipuKiogd2lsbCByZXR1cm5cbiAgLy8gdGhlIHJlc3QgTiB2YWx1ZXMgaW4gdGhlIGFycmF5LlxuICBfLnJlc3QgPSBfLnRhaWwgPSBfLmRyb3AgPSBmdW5jdGlvbihhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICByZXR1cm4gc2xpY2UuY2FsbChhcnJheSwgbiA9PSBudWxsIHx8IGd1YXJkID8gMSA6IG4pO1xuICB9O1xuXG4gIC8vIFRyaW0gb3V0IGFsbCBmYWxzeSB2YWx1ZXMgZnJvbSBhbiBhcnJheS5cbiAgXy5jb21wYWN0ID0gZnVuY3Rpb24oYXJyYXkpIHtcbiAgICByZXR1cm4gXy5maWx0ZXIoYXJyYXksIEJvb2xlYW4pO1xuICB9O1xuXG4gIC8vIEludGVybmFsIGltcGxlbWVudGF0aW9uIG9mIGEgcmVjdXJzaXZlIGBmbGF0dGVuYCBmdW5jdGlvbi5cbiAgdmFyIGZsYXR0ZW4gPSBmdW5jdGlvbihpbnB1dCwgc2hhbGxvdywgc3RyaWN0LCBvdXRwdXQpIHtcbiAgICBvdXRwdXQgPSBvdXRwdXQgfHwgW107XG4gICAgdmFyIGlkeCA9IG91dHB1dC5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChpbnB1dCk7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHZhbHVlID0gaW5wdXRbaV07XG4gICAgICBpZiAoaXNBcnJheUxpa2UodmFsdWUpICYmIChfLmlzQXJyYXkodmFsdWUpIHx8IF8uaXNBcmd1bWVudHModmFsdWUpKSkge1xuICAgICAgICAvLyBGbGF0dGVuIGN1cnJlbnQgbGV2ZWwgb2YgYXJyYXkgb3IgYXJndW1lbnRzIG9iamVjdC5cbiAgICAgICAgaWYgKHNoYWxsb3cpIHtcbiAgICAgICAgICB2YXIgaiA9IDAsIGxlbiA9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgICB3aGlsZSAoaiA8IGxlbikgb3V0cHV0W2lkeCsrXSA9IHZhbHVlW2orK107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmxhdHRlbih2YWx1ZSwgc2hhbGxvdywgc3RyaWN0LCBvdXRwdXQpO1xuICAgICAgICAgIGlkeCA9IG91dHB1dC5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIXN0cmljdCkge1xuICAgICAgICBvdXRwdXRbaWR4KytdID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH07XG5cbiAgLy8gRmxhdHRlbiBvdXQgYW4gYXJyYXksIGVpdGhlciByZWN1cnNpdmVseSAoYnkgZGVmYXVsdCksIG9yIGp1c3Qgb25lIGxldmVsLlxuICBfLmZsYXR0ZW4gPSBmdW5jdGlvbihhcnJheSwgc2hhbGxvdykge1xuICAgIHJldHVybiBmbGF0dGVuKGFycmF5LCBzaGFsbG93LCBmYWxzZSk7XG4gIH07XG5cbiAgLy8gUmV0dXJuIGEgdmVyc2lvbiBvZiB0aGUgYXJyYXkgdGhhdCBkb2VzIG5vdCBjb250YWluIHRoZSBzcGVjaWZpZWQgdmFsdWUocykuXG4gIF8ud2l0aG91dCA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oYXJyYXksIG90aGVyQXJyYXlzKSB7XG4gICAgcmV0dXJuIF8uZGlmZmVyZW5jZShhcnJheSwgb3RoZXJBcnJheXMpO1xuICB9KTtcblxuICAvLyBQcm9kdWNlIGEgZHVwbGljYXRlLWZyZWUgdmVyc2lvbiBvZiB0aGUgYXJyYXkuIElmIHRoZSBhcnJheSBoYXMgYWxyZWFkeVxuICAvLyBiZWVuIHNvcnRlZCwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiB1c2luZyBhIGZhc3RlciBhbGdvcml0aG0uXG4gIC8vIFRoZSBmYXN0ZXIgYWxnb3JpdGhtIHdpbGwgbm90IHdvcmsgd2l0aCBhbiBpdGVyYXRlZSBpZiB0aGUgaXRlcmF0ZWVcbiAgLy8gaXMgbm90IGEgb25lLXRvLW9uZSBmdW5jdGlvbiwgc28gcHJvdmlkaW5nIGFuIGl0ZXJhdGVlIHdpbGwgZGlzYWJsZVxuICAvLyB0aGUgZmFzdGVyIGFsZ29yaXRobS5cbiAgLy8gQWxpYXNlZCBhcyBgdW5pcXVlYC5cbiAgXy51bmlxID0gXy51bmlxdWUgPSBmdW5jdGlvbihhcnJheSwgaXNTb3J0ZWQsIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaWYgKCFfLmlzQm9vbGVhbihpc1NvcnRlZCkpIHtcbiAgICAgIGNvbnRleHQgPSBpdGVyYXRlZTtcbiAgICAgIGl0ZXJhdGVlID0gaXNTb3J0ZWQ7XG4gICAgICBpc1NvcnRlZCA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoaXRlcmF0ZWUgIT0gbnVsbCkgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBzZWVuID0gW107XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChhcnJheSk7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHZhbHVlID0gYXJyYXlbaV0sXG4gICAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSA/IGl0ZXJhdGVlKHZhbHVlLCBpLCBhcnJheSkgOiB2YWx1ZTtcbiAgICAgIGlmIChpc1NvcnRlZCAmJiAhaXRlcmF0ZWUpIHtcbiAgICAgICAgaWYgKCFpIHx8IHNlZW4gIT09IGNvbXB1dGVkKSByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgIHNlZW4gPSBjb21wdXRlZDtcbiAgICAgIH0gZWxzZSBpZiAoaXRlcmF0ZWUpIHtcbiAgICAgICAgaWYgKCFfLmNvbnRhaW5zKHNlZW4sIGNvbXB1dGVkKSkge1xuICAgICAgICAgIHNlZW4ucHVzaChjb21wdXRlZCk7XG4gICAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFfLmNvbnRhaW5zKHJlc3VsdCwgdmFsdWUpKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBQcm9kdWNlIGFuIGFycmF5IHRoYXQgY29udGFpbnMgdGhlIHVuaW9uOiBlYWNoIGRpc3RpbmN0IGVsZW1lbnQgZnJvbSBhbGwgb2ZcbiAgLy8gdGhlIHBhc3NlZC1pbiBhcnJheXMuXG4gIF8udW5pb24gPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKGFycmF5cykge1xuICAgIHJldHVybiBfLnVuaXEoZmxhdHRlbihhcnJheXMsIHRydWUsIHRydWUpKTtcbiAgfSk7XG5cbiAgLy8gUHJvZHVjZSBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIGV2ZXJ5IGl0ZW0gc2hhcmVkIGJldHdlZW4gYWxsIHRoZVxuICAvLyBwYXNzZWQtaW4gYXJyYXlzLlxuICBfLmludGVyc2VjdGlvbiA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBhcmdzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGFycmF5KTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IGFycmF5W2ldO1xuICAgICAgaWYgKF8uY29udGFpbnMocmVzdWx0LCBpdGVtKSkgY29udGludWU7XG4gICAgICB2YXIgajtcbiAgICAgIGZvciAoaiA9IDE7IGogPCBhcmdzTGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYgKCFfLmNvbnRhaW5zKGFyZ3VtZW50c1tqXSwgaXRlbSkpIGJyZWFrO1xuICAgICAgfVxuICAgICAgaWYgKGogPT09IGFyZ3NMZW5ndGgpIHJlc3VsdC5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFRha2UgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBvbmUgYXJyYXkgYW5kIGEgbnVtYmVyIG9mIG90aGVyIGFycmF5cy5cbiAgLy8gT25seSB0aGUgZWxlbWVudHMgcHJlc2VudCBpbiBqdXN0IHRoZSBmaXJzdCBhcnJheSB3aWxsIHJlbWFpbi5cbiAgXy5kaWZmZXJlbmNlID0gcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihhcnJheSwgcmVzdCkge1xuICAgIHJlc3QgPSBmbGF0dGVuKHJlc3QsIHRydWUsIHRydWUpO1xuICAgIHJldHVybiBfLmZpbHRlcihhcnJheSwgZnVuY3Rpb24odmFsdWUpe1xuICAgICAgcmV0dXJuICFfLmNvbnRhaW5zKHJlc3QsIHZhbHVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gQ29tcGxlbWVudCBvZiBfLnppcC4gVW56aXAgYWNjZXB0cyBhbiBhcnJheSBvZiBhcnJheXMgYW5kIGdyb3Vwc1xuICAvLyBlYWNoIGFycmF5J3MgZWxlbWVudHMgb24gc2hhcmVkIGluZGljZXMuXG4gIF8udW56aXAgPSBmdW5jdGlvbihhcnJheSkge1xuICAgIHZhciBsZW5ndGggPSBhcnJheSAmJiBfLm1heChhcnJheSwgZ2V0TGVuZ3RoKS5sZW5ndGggfHwgMDtcbiAgICB2YXIgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHJlc3VsdFtpbmRleF0gPSBfLnBsdWNrKGFycmF5LCBpbmRleCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gWmlwIHRvZ2V0aGVyIG11bHRpcGxlIGxpc3RzIGludG8gYSBzaW5nbGUgYXJyYXkgLS0gZWxlbWVudHMgdGhhdCBzaGFyZVxuICAvLyBhbiBpbmRleCBnbyB0b2dldGhlci5cbiAgXy56aXAgPSByZXN0QXJndW1lbnRzKF8udW56aXApO1xuXG4gIC8vIENvbnZlcnRzIGxpc3RzIGludG8gb2JqZWN0cy4gUGFzcyBlaXRoZXIgYSBzaW5nbGUgYXJyYXkgb2YgYFtrZXksIHZhbHVlXWBcbiAgLy8gcGFpcnMsIG9yIHR3byBwYXJhbGxlbCBhcnJheXMgb2YgdGhlIHNhbWUgbGVuZ3RoIC0tIG9uZSBvZiBrZXlzLCBhbmQgb25lIG9mXG4gIC8vIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlcy4gUGFzc2luZyBieSBwYWlycyBpcyB0aGUgcmV2ZXJzZSBvZiBfLnBhaXJzLlxuICBfLm9iamVjdCA9IGZ1bmN0aW9uKGxpc3QsIHZhbHVlcykge1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGxpc3QpOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh2YWx1ZXMpIHtcbiAgICAgICAgcmVzdWx0W2xpc3RbaV1dID0gdmFsdWVzW2ldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0W2xpc3RbaV1bMF1dID0gbGlzdFtpXVsxXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBHZW5lcmF0b3IgZnVuY3Rpb24gdG8gY3JlYXRlIHRoZSBmaW5kSW5kZXggYW5kIGZpbmRMYXN0SW5kZXggZnVuY3Rpb25zLlxuICB2YXIgY3JlYXRlUHJlZGljYXRlSW5kZXhGaW5kZXIgPSBmdW5jdGlvbihkaXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oYXJyYXksIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICAgIHZhciBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpO1xuICAgICAgdmFyIGluZGV4ID0gZGlyID4gMCA/IDAgOiBsZW5ndGggLSAxO1xuICAgICAgZm9yICg7IGluZGV4ID49IDAgJiYgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IGRpcikge1xuICAgICAgICBpZiAocHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkgcmV0dXJuIGluZGV4O1xuICAgICAgfVxuICAgICAgcmV0dXJuIC0xO1xuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyB0aGUgZmlyc3QgaW5kZXggb24gYW4gYXJyYXktbGlrZSB0aGF0IHBhc3NlcyBhIHByZWRpY2F0ZSB0ZXN0LlxuICBfLmZpbmRJbmRleCA9IGNyZWF0ZVByZWRpY2F0ZUluZGV4RmluZGVyKDEpO1xuICBfLmZpbmRMYXN0SW5kZXggPSBjcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlcigtMSk7XG5cbiAgLy8gVXNlIGEgY29tcGFyYXRvciBmdW5jdGlvbiB0byBmaWd1cmUgb3V0IHRoZSBzbWFsbGVzdCBpbmRleCBhdCB3aGljaFxuICAvLyBhbiBvYmplY3Qgc2hvdWxkIGJlIGluc2VydGVkIHNvIGFzIHRvIG1haW50YWluIG9yZGVyLiBVc2VzIGJpbmFyeSBzZWFyY2guXG4gIF8uc29ydGVkSW5kZXggPSBmdW5jdGlvbihhcnJheSwgb2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQsIDEpO1xuICAgIHZhciB2YWx1ZSA9IGl0ZXJhdGVlKG9iaik7XG4gICAgdmFyIGxvdyA9IDAsIGhpZ2ggPSBnZXRMZW5ndGgoYXJyYXkpO1xuICAgIHdoaWxlIChsb3cgPCBoaWdoKSB7XG4gICAgICB2YXIgbWlkID0gTWF0aC5mbG9vcigobG93ICsgaGlnaCkgLyAyKTtcbiAgICAgIGlmIChpdGVyYXRlZShhcnJheVttaWRdKSA8IHZhbHVlKSBsb3cgPSBtaWQgKyAxOyBlbHNlIGhpZ2ggPSBtaWQ7XG4gICAgfVxuICAgIHJldHVybiBsb3c7XG4gIH07XG5cbiAgLy8gR2VuZXJhdG9yIGZ1bmN0aW9uIHRvIGNyZWF0ZSB0aGUgaW5kZXhPZiBhbmQgbGFzdEluZGV4T2YgZnVuY3Rpb25zLlxuICB2YXIgY3JlYXRlSW5kZXhGaW5kZXIgPSBmdW5jdGlvbihkaXIsIHByZWRpY2F0ZUZpbmQsIHNvcnRlZEluZGV4KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGFycmF5LCBpdGVtLCBpZHgpIHtcbiAgICAgIHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGFycmF5KTtcbiAgICAgIGlmICh0eXBlb2YgaWR4ID09ICdudW1iZXInKSB7XG4gICAgICAgIGlmIChkaXIgPiAwKSB7XG4gICAgICAgICAgaSA9IGlkeCA+PSAwID8gaWR4IDogTWF0aC5tYXgoaWR4ICsgbGVuZ3RoLCBpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZW5ndGggPSBpZHggPj0gMCA/IE1hdGgubWluKGlkeCArIDEsIGxlbmd0aCkgOiBpZHggKyBsZW5ndGggKyAxO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNvcnRlZEluZGV4ICYmIGlkeCAmJiBsZW5ndGgpIHtcbiAgICAgICAgaWR4ID0gc29ydGVkSW5kZXgoYXJyYXksIGl0ZW0pO1xuICAgICAgICByZXR1cm4gYXJyYXlbaWR4XSA9PT0gaXRlbSA/IGlkeCA6IC0xO1xuICAgICAgfVxuICAgICAgaWYgKGl0ZW0gIT09IGl0ZW0pIHtcbiAgICAgICAgaWR4ID0gcHJlZGljYXRlRmluZChzbGljZS5jYWxsKGFycmF5LCBpLCBsZW5ndGgpLCBfLmlzTmFOKTtcbiAgICAgICAgcmV0dXJuIGlkeCA+PSAwID8gaWR4ICsgaSA6IC0xO1xuICAgICAgfVxuICAgICAgZm9yIChpZHggPSBkaXIgPiAwID8gaSA6IGxlbmd0aCAtIDE7IGlkeCA+PSAwICYmIGlkeCA8IGxlbmd0aDsgaWR4ICs9IGRpcikge1xuICAgICAgICBpZiAoYXJyYXlbaWR4XSA9PT0gaXRlbSkgcmV0dXJuIGlkeDtcbiAgICAgIH1cbiAgICAgIHJldHVybiAtMTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgcG9zaXRpb24gb2YgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYW4gaXRlbSBpbiBhbiBhcnJheSxcbiAgLy8gb3IgLTEgaWYgdGhlIGl0ZW0gaXMgbm90IGluY2x1ZGVkIGluIHRoZSBhcnJheS5cbiAgLy8gSWYgdGhlIGFycmF5IGlzIGxhcmdlIGFuZCBhbHJlYWR5IGluIHNvcnQgb3JkZXIsIHBhc3MgYHRydWVgXG4gIC8vIGZvciAqKmlzU29ydGVkKiogdG8gdXNlIGJpbmFyeSBzZWFyY2guXG4gIF8uaW5kZXhPZiA9IGNyZWF0ZUluZGV4RmluZGVyKDEsIF8uZmluZEluZGV4LCBfLnNvcnRlZEluZGV4KTtcbiAgXy5sYXN0SW5kZXhPZiA9IGNyZWF0ZUluZGV4RmluZGVyKC0xLCBfLmZpbmRMYXN0SW5kZXgpO1xuXG4gIC8vIEdlbmVyYXRlIGFuIGludGVnZXIgQXJyYXkgY29udGFpbmluZyBhbiBhcml0aG1ldGljIHByb2dyZXNzaW9uLiBBIHBvcnQgb2ZcbiAgLy8gdGhlIG5hdGl2ZSBQeXRob24gYHJhbmdlKClgIGZ1bmN0aW9uLiBTZWVcbiAgLy8gW3RoZSBQeXRob24gZG9jdW1lbnRhdGlvbl0oaHR0cDovL2RvY3MucHl0aG9uLm9yZy9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI3JhbmdlKS5cbiAgXy5yYW5nZSA9IGZ1bmN0aW9uKHN0YXJ0LCBzdG9wLCBzdGVwKSB7XG4gICAgaWYgKHN0b3AgPT0gbnVsbCkge1xuICAgICAgc3RvcCA9IHN0YXJ0IHx8IDA7XG4gICAgICBzdGFydCA9IDA7XG4gICAgfVxuICAgIGlmICghc3RlcCkge1xuICAgICAgc3RlcCA9IHN0b3AgPCBzdGFydCA/IC0xIDogMTtcbiAgICB9XG5cbiAgICB2YXIgbGVuZ3RoID0gTWF0aC5tYXgoTWF0aC5jZWlsKChzdG9wIC0gc3RhcnQpIC8gc3RlcCksIDApO1xuICAgIHZhciByYW5nZSA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICBmb3IgKHZhciBpZHggPSAwOyBpZHggPCBsZW5ndGg7IGlkeCsrLCBzdGFydCArPSBzdGVwKSB7XG4gICAgICByYW5nZVtpZHhdID0gc3RhcnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJhbmdlO1xuICB9O1xuXG4gIC8vIENodW5rIGEgc2luZ2xlIGFycmF5IGludG8gbXVsdGlwbGUgYXJyYXlzLCBlYWNoIGNvbnRhaW5pbmcgYGNvdW50YCBvciBmZXdlclxuICAvLyBpdGVtcy5cbiAgXy5jaHVuayA9IGZ1bmN0aW9uKGFycmF5LCBjb3VudCkge1xuICAgIGlmIChjb3VudCA9PSBudWxsIHx8IGNvdW50IDwgMSkgcmV0dXJuIFtdO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIgaSA9IDAsIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgICB3aGlsZSAoaSA8IGxlbmd0aCkge1xuICAgICAgcmVzdWx0LnB1c2goc2xpY2UuY2FsbChhcnJheSwgaSwgaSArPSBjb3VudCkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIEZ1bmN0aW9uIChhaGVtKSBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGV4ZWN1dGUgYSBmdW5jdGlvbiBhcyBhIGNvbnN0cnVjdG9yXG4gIC8vIG9yIGEgbm9ybWFsIGZ1bmN0aW9uIHdpdGggdGhlIHByb3ZpZGVkIGFyZ3VtZW50cy5cbiAgdmFyIGV4ZWN1dGVCb3VuZCA9IGZ1bmN0aW9uKHNvdXJjZUZ1bmMsIGJvdW5kRnVuYywgY29udGV4dCwgY2FsbGluZ0NvbnRleHQsIGFyZ3MpIHtcbiAgICBpZiAoIShjYWxsaW5nQ29udGV4dCBpbnN0YW5jZW9mIGJvdW5kRnVuYykpIHJldHVybiBzb3VyY2VGdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgIHZhciBzZWxmID0gYmFzZUNyZWF0ZShzb3VyY2VGdW5jLnByb3RvdHlwZSk7XG4gICAgdmFyIHJlc3VsdCA9IHNvdXJjZUZ1bmMuYXBwbHkoc2VsZiwgYXJncyk7XG4gICAgaWYgKF8uaXNPYmplY3QocmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICByZXR1cm4gc2VsZjtcbiAgfTtcblxuICAvLyBDcmVhdGUgYSBmdW5jdGlvbiBib3VuZCB0byBhIGdpdmVuIG9iamVjdCAoYXNzaWduaW5nIGB0aGlzYCwgYW5kIGFyZ3VtZW50cyxcbiAgLy8gb3B0aW9uYWxseSkuIERlbGVnYXRlcyB0byAqKkVDTUFTY3JpcHQgNSoqJ3MgbmF0aXZlIGBGdW5jdGlvbi5iaW5kYCBpZlxuICAvLyBhdmFpbGFibGUuXG4gIF8uYmluZCA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oZnVuYywgY29udGV4dCwgYXJncykge1xuICAgIGlmICghXy5pc0Z1bmN0aW9uKGZ1bmMpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdCaW5kIG11c3QgYmUgY2FsbGVkIG9uIGEgZnVuY3Rpb24nKTtcbiAgICB2YXIgYm91bmQgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKGNhbGxBcmdzKSB7XG4gICAgICByZXR1cm4gZXhlY3V0ZUJvdW5kKGZ1bmMsIGJvdW5kLCBjb250ZXh0LCB0aGlzLCBhcmdzLmNvbmNhdChjYWxsQXJncykpO1xuICAgIH0pO1xuICAgIHJldHVybiBib3VuZDtcbiAgfSk7XG5cbiAgLy8gUGFydGlhbGx5IGFwcGx5IGEgZnVuY3Rpb24gYnkgY3JlYXRpbmcgYSB2ZXJzaW9uIHRoYXQgaGFzIGhhZCBzb21lIG9mIGl0c1xuICAvLyBhcmd1bWVudHMgcHJlLWZpbGxlZCwgd2l0aG91dCBjaGFuZ2luZyBpdHMgZHluYW1pYyBgdGhpc2AgY29udGV4dC4gXyBhY3RzXG4gIC8vIGFzIGEgcGxhY2Vob2xkZXIgYnkgZGVmYXVsdCwgYWxsb3dpbmcgYW55IGNvbWJpbmF0aW9uIG9mIGFyZ3VtZW50cyB0byBiZVxuICAvLyBwcmUtZmlsbGVkLiBTZXQgYF8ucGFydGlhbC5wbGFjZWhvbGRlcmAgZm9yIGEgY3VzdG9tIHBsYWNlaG9sZGVyIGFyZ3VtZW50LlxuICBfLnBhcnRpYWwgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKGZ1bmMsIGJvdW5kQXJncykge1xuICAgIHZhciBwbGFjZWhvbGRlciA9IF8ucGFydGlhbC5wbGFjZWhvbGRlcjtcbiAgICB2YXIgYm91bmQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBwb3NpdGlvbiA9IDAsIGxlbmd0aCA9IGJvdW5kQXJncy5sZW5ndGg7XG4gICAgICB2YXIgYXJncyA9IEFycmF5KGxlbmd0aCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGFyZ3NbaV0gPSBib3VuZEFyZ3NbaV0gPT09IHBsYWNlaG9sZGVyID8gYXJndW1lbnRzW3Bvc2l0aW9uKytdIDogYm91bmRBcmdzW2ldO1xuICAgICAgfVxuICAgICAgd2hpbGUgKHBvc2l0aW9uIDwgYXJndW1lbnRzLmxlbmd0aCkgYXJncy5wdXNoKGFyZ3VtZW50c1twb3NpdGlvbisrXSk7XG4gICAgICByZXR1cm4gZXhlY3V0ZUJvdW5kKGZ1bmMsIGJvdW5kLCB0aGlzLCB0aGlzLCBhcmdzKTtcbiAgICB9O1xuICAgIHJldHVybiBib3VuZDtcbiAgfSk7XG5cbiAgXy5wYXJ0aWFsLnBsYWNlaG9sZGVyID0gXztcblxuICAvLyBCaW5kIGEgbnVtYmVyIG9mIGFuIG9iamVjdCdzIG1ldGhvZHMgdG8gdGhhdCBvYmplY3QuIFJlbWFpbmluZyBhcmd1bWVudHNcbiAgLy8gYXJlIHRoZSBtZXRob2QgbmFtZXMgdG8gYmUgYm91bmQuIFVzZWZ1bCBmb3IgZW5zdXJpbmcgdGhhdCBhbGwgY2FsbGJhY2tzXG4gIC8vIGRlZmluZWQgb24gYW4gb2JqZWN0IGJlbG9uZyB0byBpdC5cbiAgXy5iaW5kQWxsID0gcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihvYmosIGtleXMpIHtcbiAgICBrZXlzID0gZmxhdHRlbihrZXlzLCBmYWxzZSwgZmFsc2UpO1xuICAgIHZhciBpbmRleCA9IGtleXMubGVuZ3RoO1xuICAgIGlmIChpbmRleCA8IDEpIHRocm93IG5ldyBFcnJvcignYmluZEFsbCBtdXN0IGJlIHBhc3NlZCBmdW5jdGlvbiBuYW1lcycpO1xuICAgIHdoaWxlIChpbmRleC0tKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpbmRleF07XG4gICAgICBvYmpba2V5XSA9IF8uYmluZChvYmpba2V5XSwgb2JqKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIE1lbW9pemUgYW4gZXhwZW5zaXZlIGZ1bmN0aW9uIGJ5IHN0b3JpbmcgaXRzIHJlc3VsdHMuXG4gIF8ubWVtb2l6ZSA9IGZ1bmN0aW9uKGZ1bmMsIGhhc2hlcikge1xuICAgIHZhciBtZW1vaXplID0gZnVuY3Rpb24oa2V5KSB7XG4gICAgICB2YXIgY2FjaGUgPSBtZW1vaXplLmNhY2hlO1xuICAgICAgdmFyIGFkZHJlc3MgPSAnJyArIChoYXNoZXIgPyBoYXNoZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IGtleSk7XG4gICAgICBpZiAoIWhhcyhjYWNoZSwgYWRkcmVzcykpIGNhY2hlW2FkZHJlc3NdID0gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgcmV0dXJuIGNhY2hlW2FkZHJlc3NdO1xuICAgIH07XG4gICAgbWVtb2l6ZS5jYWNoZSA9IHt9O1xuICAgIHJldHVybiBtZW1vaXplO1xuICB9O1xuXG4gIC8vIERlbGF5cyBhIGZ1bmN0aW9uIGZvciB0aGUgZ2l2ZW4gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcywgYW5kIHRoZW4gY2FsbHNcbiAgLy8gaXQgd2l0aCB0aGUgYXJndW1lbnRzIHN1cHBsaWVkLlxuICBfLmRlbGF5ID0gcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihmdW5jLCB3YWl0LCBhcmdzKSB7XG4gICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZnVuYy5hcHBseShudWxsLCBhcmdzKTtcbiAgICB9LCB3YWl0KTtcbiAgfSk7XG5cbiAgLy8gRGVmZXJzIGEgZnVuY3Rpb24sIHNjaGVkdWxpbmcgaXQgdG8gcnVuIGFmdGVyIHRoZSBjdXJyZW50IGNhbGwgc3RhY2sgaGFzXG4gIC8vIGNsZWFyZWQuXG4gIF8uZGVmZXIgPSBfLnBhcnRpYWwoXy5kZWxheSwgXywgMSk7XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uLCB0aGF0LCB3aGVuIGludm9rZWQsIHdpbGwgb25seSBiZSB0cmlnZ2VyZWQgYXQgbW9zdCBvbmNlXG4gIC8vIGR1cmluZyBhIGdpdmVuIHdpbmRvdyBvZiB0aW1lLiBOb3JtYWxseSwgdGhlIHRocm90dGxlZCBmdW5jdGlvbiB3aWxsIHJ1blxuICAvLyBhcyBtdWNoIGFzIGl0IGNhbiwgd2l0aG91dCBldmVyIGdvaW5nIG1vcmUgdGhhbiBvbmNlIHBlciBgd2FpdGAgZHVyYXRpb247XG4gIC8vIGJ1dCBpZiB5b3UnZCBsaWtlIHRvIGRpc2FibGUgdGhlIGV4ZWN1dGlvbiBvbiB0aGUgbGVhZGluZyBlZGdlLCBwYXNzXG4gIC8vIGB7bGVhZGluZzogZmFsc2V9YC4gVG8gZGlzYWJsZSBleGVjdXRpb24gb24gdGhlIHRyYWlsaW5nIGVkZ2UsIGRpdHRvLlxuICBfLnRocm90dGxlID0gZnVuY3Rpb24oZnVuYywgd2FpdCwgb3B0aW9ucykge1xuICAgIHZhciB0aW1lb3V0LCBjb250ZXh0LCBhcmdzLCByZXN1bHQ7XG4gICAgdmFyIHByZXZpb3VzID0gMDtcbiAgICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTtcblxuICAgIHZhciBsYXRlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgcHJldmlvdXMgPSBvcHRpb25zLmxlYWRpbmcgPT09IGZhbHNlID8gMCA6IF8ubm93KCk7XG4gICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICBpZiAoIXRpbWVvdXQpIGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAgICB9O1xuXG4gICAgdmFyIHRocm90dGxlZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIG5vdyA9IF8ubm93KCk7XG4gICAgICBpZiAoIXByZXZpb3VzICYmIG9wdGlvbnMubGVhZGluZyA9PT0gZmFsc2UpIHByZXZpb3VzID0gbm93O1xuICAgICAgdmFyIHJlbWFpbmluZyA9IHdhaXQgLSAobm93IC0gcHJldmlvdXMpO1xuICAgICAgY29udGV4dCA9IHRoaXM7XG4gICAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgaWYgKHJlbWFpbmluZyA8PSAwIHx8IHJlbWFpbmluZyA+IHdhaXQpIHtcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcHJldmlvdXMgPSBub3c7XG4gICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAgIGlmICghdGltZW91dCkgY29udGV4dCA9IGFyZ3MgPSBudWxsO1xuICAgICAgfSBlbHNlIGlmICghdGltZW91dCAmJiBvcHRpb25zLnRyYWlsaW5nICE9PSBmYWxzZSkge1xuICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgcmVtYWluaW5nKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIHRocm90dGxlZC5jYW5jZWwgPSBmdW5jdGlvbigpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgIHByZXZpb3VzID0gMDtcbiAgICAgIHRpbWVvdXQgPSBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgfTtcblxuICAgIHJldHVybiB0aHJvdHRsZWQ7XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uLCB0aGF0LCBhcyBsb25nIGFzIGl0IGNvbnRpbnVlcyB0byBiZSBpbnZva2VkLCB3aWxsIG5vdFxuICAvLyBiZSB0cmlnZ2VyZWQuIFRoZSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBhZnRlciBpdCBzdG9wcyBiZWluZyBjYWxsZWQgZm9yXG4gIC8vIE4gbWlsbGlzZWNvbmRzLiBJZiBgaW1tZWRpYXRlYCBpcyBwYXNzZWQsIHRyaWdnZXIgdGhlIGZ1bmN0aW9uIG9uIHRoZVxuICAvLyBsZWFkaW5nIGVkZ2UsIGluc3RlYWQgb2YgdGhlIHRyYWlsaW5nLlxuICBfLmRlYm91bmNlID0gZnVuY3Rpb24oZnVuYywgd2FpdCwgaW1tZWRpYXRlKSB7XG4gICAgdmFyIHRpbWVvdXQsIHJlc3VsdDtcblxuICAgIHZhciBsYXRlciA9IGZ1bmN0aW9uKGNvbnRleHQsIGFyZ3MpIHtcbiAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgaWYgKGFyZ3MpIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgfTtcblxuICAgIHZhciBkZWJvdW5jZWQgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKGFyZ3MpIHtcbiAgICAgIGlmICh0aW1lb3V0KSBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICBpZiAoaW1tZWRpYXRlKSB7XG4gICAgICAgIHZhciBjYWxsTm93ID0gIXRpbWVvdXQ7XG4gICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0KTtcbiAgICAgICAgaWYgKGNhbGxOb3cpIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aW1lb3V0ID0gXy5kZWxheShsYXRlciwgd2FpdCwgdGhpcywgYXJncyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG5cbiAgICBkZWJvdW5jZWQuY2FuY2VsID0gZnVuY3Rpb24oKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGRlYm91bmNlZDtcbiAgfTtcblxuICAvLyBSZXR1cm5zIHRoZSBmaXJzdCBmdW5jdGlvbiBwYXNzZWQgYXMgYW4gYXJndW1lbnQgdG8gdGhlIHNlY29uZCxcbiAgLy8gYWxsb3dpbmcgeW91IHRvIGFkanVzdCBhcmd1bWVudHMsIHJ1biBjb2RlIGJlZm9yZSBhbmQgYWZ0ZXIsIGFuZFxuICAvLyBjb25kaXRpb25hbGx5IGV4ZWN1dGUgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uLlxuICBfLndyYXAgPSBmdW5jdGlvbihmdW5jLCB3cmFwcGVyKSB7XG4gICAgcmV0dXJuIF8ucGFydGlhbCh3cmFwcGVyLCBmdW5jKTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgbmVnYXRlZCB2ZXJzaW9uIG9mIHRoZSBwYXNzZWQtaW4gcHJlZGljYXRlLlxuICBfLm5lZ2F0ZSA9IGZ1bmN0aW9uKHByZWRpY2F0ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiAhcHJlZGljYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBpcyB0aGUgY29tcG9zaXRpb24gb2YgYSBsaXN0IG9mIGZ1bmN0aW9ucywgZWFjaFxuICAvLyBjb25zdW1pbmcgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gdGhhdCBmb2xsb3dzLlxuICBfLmNvbXBvc2UgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICB2YXIgc3RhcnQgPSBhcmdzLmxlbmd0aCAtIDE7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGkgPSBzdGFydDtcbiAgICAgIHZhciByZXN1bHQgPSBhcmdzW3N0YXJ0XS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgd2hpbGUgKGktLSkgcmVzdWx0ID0gYXJnc1tpXS5jYWxsKHRoaXMsIHJlc3VsdCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBvbmx5IGJlIGV4ZWN1dGVkIG9uIGFuZCBhZnRlciB0aGUgTnRoIGNhbGwuXG4gIF8uYWZ0ZXIgPSBmdW5jdGlvbih0aW1lcywgZnVuYykge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIGlmICgtLXRpbWVzIDwgMSkge1xuICAgICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfVxuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBvbmx5IGJlIGV4ZWN1dGVkIHVwIHRvIChidXQgbm90IGluY2x1ZGluZykgdGhlIE50aCBjYWxsLlxuICBfLmJlZm9yZSA9IGZ1bmN0aW9uKHRpbWVzLCBmdW5jKSB7XG4gICAgdmFyIG1lbW87XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKC0tdGltZXMgPiAwKSB7XG4gICAgICAgIG1lbW8gPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9XG4gICAgICBpZiAodGltZXMgPD0gMSkgZnVuYyA9IG51bGw7XG4gICAgICByZXR1cm4gbWVtbztcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgYXQgbW9zdCBvbmUgdGltZSwgbm8gbWF0dGVyIGhvd1xuICAvLyBvZnRlbiB5b3UgY2FsbCBpdC4gVXNlZnVsIGZvciBsYXp5IGluaXRpYWxpemF0aW9uLlxuICBfLm9uY2UgPSBfLnBhcnRpYWwoXy5iZWZvcmUsIDIpO1xuXG4gIF8ucmVzdEFyZ3VtZW50cyA9IHJlc3RBcmd1bWVudHM7XG5cbiAgLy8gT2JqZWN0IEZ1bmN0aW9uc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gS2V5cyBpbiBJRSA8IDkgdGhhdCB3b24ndCBiZSBpdGVyYXRlZCBieSBgZm9yIGtleSBpbiAuLi5gIGFuZCB0aHVzIG1pc3NlZC5cbiAgdmFyIGhhc0VudW1CdWcgPSAhe3RvU3RyaW5nOiBudWxsfS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgndG9TdHJpbmcnKTtcbiAgdmFyIG5vbkVudW1lcmFibGVQcm9wcyA9IFsndmFsdWVPZicsICdpc1Byb3RvdHlwZU9mJywgJ3RvU3RyaW5nJyxcbiAgICAncHJvcGVydHlJc0VudW1lcmFibGUnLCAnaGFzT3duUHJvcGVydHknLCAndG9Mb2NhbGVTdHJpbmcnXTtcblxuICB2YXIgY29sbGVjdE5vbkVudW1Qcm9wcyA9IGZ1bmN0aW9uKG9iaiwga2V5cykge1xuICAgIHZhciBub25FbnVtSWR4ID0gbm9uRW51bWVyYWJsZVByb3BzLmxlbmd0aDtcbiAgICB2YXIgY29uc3RydWN0b3IgPSBvYmouY29uc3RydWN0b3I7XG4gICAgdmFyIHByb3RvID0gXy5pc0Z1bmN0aW9uKGNvbnN0cnVjdG9yKSAmJiBjb25zdHJ1Y3Rvci5wcm90b3R5cGUgfHwgT2JqUHJvdG87XG5cbiAgICAvLyBDb25zdHJ1Y3RvciBpcyBhIHNwZWNpYWwgY2FzZS5cbiAgICB2YXIgcHJvcCA9ICdjb25zdHJ1Y3Rvcic7XG4gICAgaWYgKGhhcyhvYmosIHByb3ApICYmICFfLmNvbnRhaW5zKGtleXMsIHByb3ApKSBrZXlzLnB1c2gocHJvcCk7XG5cbiAgICB3aGlsZSAobm9uRW51bUlkeC0tKSB7XG4gICAgICBwcm9wID0gbm9uRW51bWVyYWJsZVByb3BzW25vbkVudW1JZHhdO1xuICAgICAgaWYgKHByb3AgaW4gb2JqICYmIG9ialtwcm9wXSAhPT0gcHJvdG9bcHJvcF0gJiYgIV8uY29udGFpbnMoa2V5cywgcHJvcCkpIHtcbiAgICAgICAga2V5cy5wdXNoKHByb3ApO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvLyBSZXRyaWV2ZSB0aGUgbmFtZXMgb2YgYW4gb2JqZWN0J3Mgb3duIHByb3BlcnRpZXMuXG4gIC8vIERlbGVnYXRlcyB0byAqKkVDTUFTY3JpcHQgNSoqJ3MgbmF0aXZlIGBPYmplY3Qua2V5c2AuXG4gIF8ua2V5cyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmICghXy5pc09iamVjdChvYmopKSByZXR1cm4gW107XG4gICAgaWYgKG5hdGl2ZUtleXMpIHJldHVybiBuYXRpdmVLZXlzKG9iaik7XG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSBpZiAoaGFzKG9iaiwga2V5KSkga2V5cy5wdXNoKGtleSk7XG4gICAgLy8gQWhlbSwgSUUgPCA5LlxuICAgIGlmIChoYXNFbnVtQnVnKSBjb2xsZWN0Tm9uRW51bVByb3BzKG9iaiwga2V5cyk7XG4gICAgcmV0dXJuIGtleXM7XG4gIH07XG5cbiAgLy8gUmV0cmlldmUgYWxsIHRoZSBwcm9wZXJ0eSBuYW1lcyBvZiBhbiBvYmplY3QuXG4gIF8uYWxsS2V5cyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmICghXy5pc09iamVjdChvYmopKSByZXR1cm4gW107XG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSBrZXlzLnB1c2goa2V5KTtcbiAgICAvLyBBaGVtLCBJRSA8IDkuXG4gICAgaWYgKGhhc0VudW1CdWcpIGNvbGxlY3ROb25FbnVtUHJvcHMob2JqLCBrZXlzKTtcbiAgICByZXR1cm4ga2V5cztcbiAgfTtcblxuICAvLyBSZXRyaWV2ZSB0aGUgdmFsdWVzIG9mIGFuIG9iamVjdCdzIHByb3BlcnRpZXMuXG4gIF8udmFsdWVzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIGtleXMgPSBfLmtleXMob2JqKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIHZhbHVlcyA9IEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFsdWVzW2ldID0gb2JqW2tleXNbaV1dO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWVzO1xuICB9O1xuXG4gIC8vIFJldHVybnMgdGhlIHJlc3VsdHMgb2YgYXBwbHlpbmcgdGhlIGl0ZXJhdGVlIHRvIGVhY2ggZWxlbWVudCBvZiB0aGUgb2JqZWN0LlxuICAvLyBJbiBjb250cmFzdCB0byBfLm1hcCBpdCByZXR1cm5zIGFuIG9iamVjdC5cbiAgXy5tYXBPYmplY3QgPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgdmFyIGtleXMgPSBfLmtleXMob2JqKSxcbiAgICAgICAgbGVuZ3RoID0ga2V5cy5sZW5ndGgsXG4gICAgICAgIHJlc3VsdHMgPSB7fTtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgY3VycmVudEtleSA9IGtleXNbaW5kZXhdO1xuICAgICAgcmVzdWx0c1tjdXJyZW50S2V5XSA9IGl0ZXJhdGVlKG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH07XG5cbiAgLy8gQ29udmVydCBhbiBvYmplY3QgaW50byBhIGxpc3Qgb2YgYFtrZXksIHZhbHVlXWAgcGFpcnMuXG4gIC8vIFRoZSBvcHBvc2l0ZSBvZiBfLm9iamVjdC5cbiAgXy5wYWlycyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciBrZXlzID0gXy5rZXlzKG9iaik7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBwYWlycyA9IEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgcGFpcnNbaV0gPSBba2V5c1tpXSwgb2JqW2tleXNbaV1dXTtcbiAgICB9XG4gICAgcmV0dXJuIHBhaXJzO1xuICB9O1xuXG4gIC8vIEludmVydCB0aGUga2V5cyBhbmQgdmFsdWVzIG9mIGFuIG9iamVjdC4gVGhlIHZhbHVlcyBtdXN0IGJlIHNlcmlhbGl6YWJsZS5cbiAgXy5pbnZlcnQgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgdmFyIGtleXMgPSBfLmtleXMob2JqKTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgcmVzdWx0W29ialtrZXlzW2ldXV0gPSBrZXlzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFJldHVybiBhIHNvcnRlZCBsaXN0IG9mIHRoZSBmdW5jdGlvbiBuYW1lcyBhdmFpbGFibGUgb24gdGhlIG9iamVjdC5cbiAgLy8gQWxpYXNlZCBhcyBgbWV0aG9kc2AuXG4gIF8uZnVuY3Rpb25zID0gXy5tZXRob2RzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIG5hbWVzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgaWYgKF8uaXNGdW5jdGlvbihvYmpba2V5XSkpIG5hbWVzLnB1c2goa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIG5hbWVzLnNvcnQoKTtcbiAgfTtcblxuICAvLyBBbiBpbnRlcm5hbCBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgYXNzaWduZXIgZnVuY3Rpb25zLlxuICB2YXIgY3JlYXRlQXNzaWduZXIgPSBmdW5jdGlvbihrZXlzRnVuYywgZGVmYXVsdHMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgIGlmIChkZWZhdWx0cykgb2JqID0gT2JqZWN0KG9iaik7XG4gICAgICBpZiAobGVuZ3RoIDwgMiB8fCBvYmogPT0gbnVsbCkgcmV0dXJuIG9iajtcbiAgICAgIGZvciAodmFyIGluZGV4ID0gMTsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpbmRleF0sXG4gICAgICAgICAgICBrZXlzID0ga2V5c0Z1bmMoc291cmNlKSxcbiAgICAgICAgICAgIGwgPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICBpZiAoIWRlZmF1bHRzIHx8IG9ialtrZXldID09PSB2b2lkIDApIG9ialtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBvYmo7XG4gICAgfTtcbiAgfTtcblxuICAvLyBFeHRlbmQgYSBnaXZlbiBvYmplY3Qgd2l0aCBhbGwgdGhlIHByb3BlcnRpZXMgaW4gcGFzc2VkLWluIG9iamVjdChzKS5cbiAgXy5leHRlbmQgPSBjcmVhdGVBc3NpZ25lcihfLmFsbEtleXMpO1xuXG4gIC8vIEFzc2lnbnMgYSBnaXZlbiBvYmplY3Qgd2l0aCBhbGwgdGhlIG93biBwcm9wZXJ0aWVzIGluIHRoZSBwYXNzZWQtaW4gb2JqZWN0KHMpLlxuICAvLyAoaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2Fzc2lnbilcbiAgXy5leHRlbmRPd24gPSBfLmFzc2lnbiA9IGNyZWF0ZUFzc2lnbmVyKF8ua2V5cyk7XG5cbiAgLy8gUmV0dXJucyB0aGUgZmlyc3Qga2V5IG9uIGFuIG9iamVjdCB0aGF0IHBhc3NlcyBhIHByZWRpY2F0ZSB0ZXN0LlxuICBfLmZpbmRLZXkgPSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgdmFyIGtleXMgPSBfLmtleXMob2JqKSwga2V5O1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgaWYgKHByZWRpY2F0ZShvYmpba2V5XSwga2V5LCBvYmopKSByZXR1cm4ga2V5O1xuICAgIH1cbiAgfTtcblxuICAvLyBJbnRlcm5hbCBwaWNrIGhlbHBlciBmdW5jdGlvbiB0byBkZXRlcm1pbmUgaWYgYG9iamAgaGFzIGtleSBga2V5YC5cbiAgdmFyIGtleUluT2JqID0gZnVuY3Rpb24odmFsdWUsIGtleSwgb2JqKSB7XG4gICAgcmV0dXJuIGtleSBpbiBvYmo7XG4gIH07XG5cbiAgLy8gUmV0dXJuIGEgY29weSBvZiB0aGUgb2JqZWN0IG9ubHkgY29udGFpbmluZyB0aGUgd2hpdGVsaXN0ZWQgcHJvcGVydGllcy5cbiAgXy5waWNrID0gcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihvYmosIGtleXMpIHtcbiAgICB2YXIgcmVzdWx0ID0ge30sIGl0ZXJhdGVlID0ga2V5c1swXTtcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiByZXN1bHQ7XG4gICAgaWYgKF8uaXNGdW5jdGlvbihpdGVyYXRlZSkpIHtcbiAgICAgIGlmIChrZXlzLmxlbmd0aCA+IDEpIGl0ZXJhdGVlID0gb3B0aW1pemVDYihpdGVyYXRlZSwga2V5c1sxXSk7XG4gICAgICBrZXlzID0gXy5hbGxLZXlzKG9iaik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZXJhdGVlID0ga2V5SW5PYmo7XG4gICAgICBrZXlzID0gZmxhdHRlbihrZXlzLCBmYWxzZSwgZmFsc2UpO1xuICAgICAgb2JqID0gT2JqZWN0KG9iaik7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgIHZhciB2YWx1ZSA9IG9ialtrZXldO1xuICAgICAgaWYgKGl0ZXJhdGVlKHZhbHVlLCBrZXksIG9iaikpIHJlc3VsdFtrZXldID0gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0pO1xuXG4gIC8vIFJldHVybiBhIGNvcHkgb2YgdGhlIG9iamVjdCB3aXRob3V0IHRoZSBibGFja2xpc3RlZCBwcm9wZXJ0aWVzLlxuICBfLm9taXQgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKG9iaiwga2V5cykge1xuICAgIHZhciBpdGVyYXRlZSA9IGtleXNbMF0sIGNvbnRleHQ7XG4gICAgaWYgKF8uaXNGdW5jdGlvbihpdGVyYXRlZSkpIHtcbiAgICAgIGl0ZXJhdGVlID0gXy5uZWdhdGUoaXRlcmF0ZWUpO1xuICAgICAgaWYgKGtleXMubGVuZ3RoID4gMSkgY29udGV4dCA9IGtleXNbMV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGtleXMgPSBfLm1hcChmbGF0dGVuKGtleXMsIGZhbHNlLCBmYWxzZSksIFN0cmluZyk7XG4gICAgICBpdGVyYXRlZSA9IGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgcmV0dXJuICFfLmNvbnRhaW5zKGtleXMsIGtleSk7XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gXy5waWNrKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpO1xuICB9KTtcblxuICAvLyBGaWxsIGluIGEgZ2l2ZW4gb2JqZWN0IHdpdGggZGVmYXVsdCBwcm9wZXJ0aWVzLlxuICBfLmRlZmF1bHRzID0gY3JlYXRlQXNzaWduZXIoXy5hbGxLZXlzLCB0cnVlKTtcblxuICAvLyBDcmVhdGVzIGFuIG9iamVjdCB0aGF0IGluaGVyaXRzIGZyb20gdGhlIGdpdmVuIHByb3RvdHlwZSBvYmplY3QuXG4gIC8vIElmIGFkZGl0aW9uYWwgcHJvcGVydGllcyBhcmUgcHJvdmlkZWQgdGhlbiB0aGV5IHdpbGwgYmUgYWRkZWQgdG8gdGhlXG4gIC8vIGNyZWF0ZWQgb2JqZWN0LlxuICBfLmNyZWF0ZSA9IGZ1bmN0aW9uKHByb3RvdHlwZSwgcHJvcHMpIHtcbiAgICB2YXIgcmVzdWx0ID0gYmFzZUNyZWF0ZShwcm90b3R5cGUpO1xuICAgIGlmIChwcm9wcykgXy5leHRlbmRPd24ocmVzdWx0LCBwcm9wcyk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBDcmVhdGUgYSAoc2hhbGxvdy1jbG9uZWQpIGR1cGxpY2F0ZSBvZiBhbiBvYmplY3QuXG4gIF8uY2xvbmUgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAoIV8uaXNPYmplY3Qob2JqKSkgcmV0dXJuIG9iajtcbiAgICByZXR1cm4gXy5pc0FycmF5KG9iaikgPyBvYmouc2xpY2UoKSA6IF8uZXh0ZW5kKHt9LCBvYmopO1xuICB9O1xuXG4gIC8vIEludm9rZXMgaW50ZXJjZXB0b3Igd2l0aCB0aGUgb2JqLCBhbmQgdGhlbiByZXR1cm5zIG9iai5cbiAgLy8gVGhlIHByaW1hcnkgcHVycG9zZSBvZiB0aGlzIG1ldGhvZCBpcyB0byBcInRhcCBpbnRvXCIgYSBtZXRob2QgY2hhaW4sIGluXG4gIC8vIG9yZGVyIHRvIHBlcmZvcm0gb3BlcmF0aW9ucyBvbiBpbnRlcm1lZGlhdGUgcmVzdWx0cyB3aXRoaW4gdGhlIGNoYWluLlxuICBfLnRhcCA9IGZ1bmN0aW9uKG9iaiwgaW50ZXJjZXB0b3IpIHtcbiAgICBpbnRlcmNlcHRvcihvYmopO1xuICAgIHJldHVybiBvYmo7XG4gIH07XG5cbiAgLy8gUmV0dXJucyB3aGV0aGVyIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBzZXQgb2YgYGtleTp2YWx1ZWAgcGFpcnMuXG4gIF8uaXNNYXRjaCA9IGZ1bmN0aW9uKG9iamVjdCwgYXR0cnMpIHtcbiAgICB2YXIga2V5cyA9IF8ua2V5cyhhdHRycyksIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIGlmIChvYmplY3QgPT0gbnVsbCkgcmV0dXJuICFsZW5ndGg7XG4gICAgdmFyIG9iaiA9IE9iamVjdChvYmplY3QpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgaWYgKGF0dHJzW2tleV0gIT09IG9ialtrZXldIHx8ICEoa2V5IGluIG9iaikpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cblxuICAvLyBJbnRlcm5hbCByZWN1cnNpdmUgY29tcGFyaXNvbiBmdW5jdGlvbiBmb3IgYGlzRXF1YWxgLlxuICB2YXIgZXEsIGRlZXBFcTtcbiAgZXEgPSBmdW5jdGlvbihhLCBiLCBhU3RhY2ssIGJTdGFjaykge1xuICAgIC8vIElkZW50aWNhbCBvYmplY3RzIGFyZSBlcXVhbC4gYDAgPT09IC0wYCwgYnV0IHRoZXkgYXJlbid0IGlkZW50aWNhbC5cbiAgICAvLyBTZWUgdGhlIFtIYXJtb255IGBlZ2FsYCBwcm9wb3NhbF0oaHR0cDovL3dpa2kuZWNtYXNjcmlwdC5vcmcvZG9rdS5waHA/aWQ9aGFybW9ueTplZ2FsKS5cbiAgICBpZiAoYSA9PT0gYikgcmV0dXJuIGEgIT09IDAgfHwgMSAvIGEgPT09IDEgLyBiO1xuICAgIC8vIGBudWxsYCBvciBgdW5kZWZpbmVkYCBvbmx5IGVxdWFsIHRvIGl0c2VsZiAoc3RyaWN0IGNvbXBhcmlzb24pLlxuICAgIGlmIChhID09IG51bGwgfHwgYiA9PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gYE5hTmBzIGFyZSBlcXVpdmFsZW50LCBidXQgbm9uLXJlZmxleGl2ZS5cbiAgICBpZiAoYSAhPT0gYSkgcmV0dXJuIGIgIT09IGI7XG4gICAgLy8gRXhoYXVzdCBwcmltaXRpdmUgY2hlY2tzXG4gICAgdmFyIHR5cGUgPSB0eXBlb2YgYTtcbiAgICBpZiAodHlwZSAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgYiAhPSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBkZWVwRXEoYSwgYiwgYVN0YWNrLCBiU3RhY2spO1xuICB9O1xuXG4gIC8vIEludGVybmFsIHJlY3Vyc2l2ZSBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciBgaXNFcXVhbGAuXG4gIGRlZXBFcSA9IGZ1bmN0aW9uKGEsIGIsIGFTdGFjaywgYlN0YWNrKSB7XG4gICAgLy8gVW53cmFwIGFueSB3cmFwcGVkIG9iamVjdHMuXG4gICAgaWYgKGEgaW5zdGFuY2VvZiBfKSBhID0gYS5fd3JhcHBlZDtcbiAgICBpZiAoYiBpbnN0YW5jZW9mIF8pIGIgPSBiLl93cmFwcGVkO1xuICAgIC8vIENvbXBhcmUgYFtbQ2xhc3NdXWAgbmFtZXMuXG4gICAgdmFyIGNsYXNzTmFtZSA9IHRvU3RyaW5nLmNhbGwoYSk7XG4gICAgaWYgKGNsYXNzTmFtZSAhPT0gdG9TdHJpbmcuY2FsbChiKSkgcmV0dXJuIGZhbHNlO1xuICAgIHN3aXRjaCAoY2xhc3NOYW1lKSB7XG4gICAgICAvLyBTdHJpbmdzLCBudW1iZXJzLCByZWd1bGFyIGV4cHJlc3Npb25zLCBkYXRlcywgYW5kIGJvb2xlYW5zIGFyZSBjb21wYXJlZCBieSB2YWx1ZS5cbiAgICAgIGNhc2UgJ1tvYmplY3QgUmVnRXhwXSc6XG4gICAgICAvLyBSZWdFeHBzIGFyZSBjb2VyY2VkIHRvIHN0cmluZ3MgZm9yIGNvbXBhcmlzb24gKE5vdGU6ICcnICsgL2EvaSA9PT0gJy9hL2knKVxuICAgICAgY2FzZSAnW29iamVjdCBTdHJpbmddJzpcbiAgICAgICAgLy8gUHJpbWl0aXZlcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBvYmplY3Qgd3JhcHBlcnMgYXJlIGVxdWl2YWxlbnQ7IHRodXMsIGBcIjVcImAgaXNcbiAgICAgICAgLy8gZXF1aXZhbGVudCB0byBgbmV3IFN0cmluZyhcIjVcIilgLlxuICAgICAgICByZXR1cm4gJycgKyBhID09PSAnJyArIGI7XG4gICAgICBjYXNlICdbb2JqZWN0IE51bWJlcl0nOlxuICAgICAgICAvLyBgTmFOYHMgYXJlIGVxdWl2YWxlbnQsIGJ1dCBub24tcmVmbGV4aXZlLlxuICAgICAgICAvLyBPYmplY3QoTmFOKSBpcyBlcXVpdmFsZW50IHRvIE5hTi5cbiAgICAgICAgaWYgKCthICE9PSArYSkgcmV0dXJuICtiICE9PSArYjtcbiAgICAgICAgLy8gQW4gYGVnYWxgIGNvbXBhcmlzb24gaXMgcGVyZm9ybWVkIGZvciBvdGhlciBudW1lcmljIHZhbHVlcy5cbiAgICAgICAgcmV0dXJuICthID09PSAwID8gMSAvICthID09PSAxIC8gYiA6ICthID09PSArYjtcbiAgICAgIGNhc2UgJ1tvYmplY3QgRGF0ZV0nOlxuICAgICAgY2FzZSAnW29iamVjdCBCb29sZWFuXSc6XG4gICAgICAgIC8vIENvZXJjZSBkYXRlcyBhbmQgYm9vbGVhbnMgdG8gbnVtZXJpYyBwcmltaXRpdmUgdmFsdWVzLiBEYXRlcyBhcmUgY29tcGFyZWQgYnkgdGhlaXJcbiAgICAgICAgLy8gbWlsbGlzZWNvbmQgcmVwcmVzZW50YXRpb25zLiBOb3RlIHRoYXQgaW52YWxpZCBkYXRlcyB3aXRoIG1pbGxpc2Vjb25kIHJlcHJlc2VudGF0aW9uc1xuICAgICAgICAvLyBvZiBgTmFOYCBhcmUgbm90IGVxdWl2YWxlbnQuXG4gICAgICAgIHJldHVybiArYSA9PT0gK2I7XG4gICAgICBjYXNlICdbb2JqZWN0IFN5bWJvbF0nOlxuICAgICAgICByZXR1cm4gU3ltYm9sUHJvdG8udmFsdWVPZi5jYWxsKGEpID09PSBTeW1ib2xQcm90by52YWx1ZU9mLmNhbGwoYik7XG4gICAgfVxuXG4gICAgdmFyIGFyZUFycmF5cyA9IGNsYXNzTmFtZSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICBpZiAoIWFyZUFycmF5cykge1xuICAgICAgaWYgKHR5cGVvZiBhICE9ICdvYmplY3QnIHx8IHR5cGVvZiBiICE9ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIC8vIE9iamVjdHMgd2l0aCBkaWZmZXJlbnQgY29uc3RydWN0b3JzIGFyZSBub3QgZXF1aXZhbGVudCwgYnV0IGBPYmplY3RgcyBvciBgQXJyYXlgc1xuICAgICAgLy8gZnJvbSBkaWZmZXJlbnQgZnJhbWVzIGFyZS5cbiAgICAgIHZhciBhQ3RvciA9IGEuY29uc3RydWN0b3IsIGJDdG9yID0gYi5jb25zdHJ1Y3RvcjtcbiAgICAgIGlmIChhQ3RvciAhPT0gYkN0b3IgJiYgIShfLmlzRnVuY3Rpb24oYUN0b3IpICYmIGFDdG9yIGluc3RhbmNlb2YgYUN0b3IgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfLmlzRnVuY3Rpb24oYkN0b3IpICYmIGJDdG9yIGluc3RhbmNlb2YgYkN0b3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICYmICgnY29uc3RydWN0b3InIGluIGEgJiYgJ2NvbnN0cnVjdG9yJyBpbiBiKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIEFzc3VtZSBlcXVhbGl0eSBmb3IgY3ljbGljIHN0cnVjdHVyZXMuIFRoZSBhbGdvcml0aG0gZm9yIGRldGVjdGluZyBjeWNsaWNcbiAgICAvLyBzdHJ1Y3R1cmVzIGlzIGFkYXB0ZWQgZnJvbSBFUyA1LjEgc2VjdGlvbiAxNS4xMi4zLCBhYnN0cmFjdCBvcGVyYXRpb24gYEpPYC5cblxuICAgIC8vIEluaXRpYWxpemluZyBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgICAvLyBJdCdzIGRvbmUgaGVyZSBzaW5jZSB3ZSBvbmx5IG5lZWQgdGhlbSBmb3Igb2JqZWN0cyBhbmQgYXJyYXlzIGNvbXBhcmlzb24uXG4gICAgYVN0YWNrID0gYVN0YWNrIHx8IFtdO1xuICAgIGJTdGFjayA9IGJTdGFjayB8fCBbXTtcbiAgICB2YXIgbGVuZ3RoID0gYVN0YWNrLmxlbmd0aDtcbiAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgIC8vIExpbmVhciBzZWFyY2guIFBlcmZvcm1hbmNlIGlzIGludmVyc2VseSBwcm9wb3J0aW9uYWwgdG8gdGhlIG51bWJlciBvZlxuICAgICAgLy8gdW5pcXVlIG5lc3RlZCBzdHJ1Y3R1cmVzLlxuICAgICAgaWYgKGFTdGFja1tsZW5ndGhdID09PSBhKSByZXR1cm4gYlN0YWNrW2xlbmd0aF0gPT09IGI7XG4gICAgfVxuXG4gICAgLy8gQWRkIHRoZSBmaXJzdCBvYmplY3QgdG8gdGhlIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmplY3RzLlxuICAgIGFTdGFjay5wdXNoKGEpO1xuICAgIGJTdGFjay5wdXNoKGIpO1xuXG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIGFuZCBhcnJheXMuXG4gICAgaWYgKGFyZUFycmF5cykge1xuICAgICAgLy8gQ29tcGFyZSBhcnJheSBsZW5ndGhzIHRvIGRldGVybWluZSBpZiBhIGRlZXAgY29tcGFyaXNvbiBpcyBuZWNlc3NhcnkuXG4gICAgICBsZW5ndGggPSBhLmxlbmd0aDtcbiAgICAgIGlmIChsZW5ndGggIT09IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICAvLyBEZWVwIGNvbXBhcmUgdGhlIGNvbnRlbnRzLCBpZ25vcmluZyBub24tbnVtZXJpYyBwcm9wZXJ0aWVzLlxuICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgIGlmICghZXEoYVtsZW5ndGhdLCBiW2xlbmd0aF0sIGFTdGFjaywgYlN0YWNrKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBEZWVwIGNvbXBhcmUgb2JqZWN0cy5cbiAgICAgIHZhciBrZXlzID0gXy5rZXlzKGEpLCBrZXk7XG4gICAgICBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICAgIC8vIEVuc3VyZSB0aGF0IGJvdGggb2JqZWN0cyBjb250YWluIHRoZSBzYW1lIG51bWJlciBvZiBwcm9wZXJ0aWVzIGJlZm9yZSBjb21wYXJpbmcgZGVlcCBlcXVhbGl0eS5cbiAgICAgIGlmIChfLmtleXMoYikubGVuZ3RoICE9PSBsZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgICAvLyBEZWVwIGNvbXBhcmUgZWFjaCBtZW1iZXJcbiAgICAgICAga2V5ID0ga2V5c1tsZW5ndGhdO1xuICAgICAgICBpZiAoIShoYXMoYiwga2V5KSAmJiBlcShhW2tleV0sIGJba2V5XSwgYVN0YWNrLCBiU3RhY2spKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBSZW1vdmUgdGhlIGZpcnN0IG9iamVjdCBmcm9tIHRoZSBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgICBhU3RhY2sucG9wKCk7XG4gICAgYlN0YWNrLnBvcCgpO1xuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIC8vIFBlcmZvcm0gYSBkZWVwIGNvbXBhcmlzb24gdG8gY2hlY2sgaWYgdHdvIG9iamVjdHMgYXJlIGVxdWFsLlxuICBfLmlzRXF1YWwgPSBmdW5jdGlvbihhLCBiKSB7XG4gICAgcmV0dXJuIGVxKGEsIGIpO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gYXJyYXksIHN0cmluZywgb3Igb2JqZWN0IGVtcHR5P1xuICAvLyBBbiBcImVtcHR5XCIgb2JqZWN0IGhhcyBubyBlbnVtZXJhYmxlIG93bi1wcm9wZXJ0aWVzLlxuICBfLmlzRW1wdHkgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0FycmF5TGlrZShvYmopICYmIChfLmlzQXJyYXkob2JqKSB8fCBfLmlzU3RyaW5nKG9iaikgfHwgXy5pc0FyZ3VtZW50cyhvYmopKSkgcmV0dXJuIG9iai5sZW5ndGggPT09IDA7XG4gICAgcmV0dXJuIF8ua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVuIHZhbHVlIGEgRE9NIGVsZW1lbnQ/XG4gIF8uaXNFbGVtZW50ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuICEhKG9iaiAmJiBvYmoubm9kZVR5cGUgPT09IDEpO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgYW4gYXJyYXk/XG4gIC8vIERlbGVnYXRlcyB0byBFQ01BNSdzIG5hdGl2ZSBBcnJheS5pc0FycmF5XG4gIF8uaXNBcnJheSA9IG5hdGl2ZUlzQXJyYXkgfHwgZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIHRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVuIHZhcmlhYmxlIGFuIG9iamVjdD9cbiAgXy5pc09iamVjdCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciB0eXBlID0gdHlwZW9mIG9iajtcbiAgICByZXR1cm4gdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlID09PSAnb2JqZWN0JyAmJiAhIW9iajtcbiAgfTtcblxuICAvLyBBZGQgc29tZSBpc1R5cGUgbWV0aG9kczogaXNBcmd1bWVudHMsIGlzRnVuY3Rpb24sIGlzU3RyaW5nLCBpc051bWJlciwgaXNEYXRlLCBpc1JlZ0V4cCwgaXNFcnJvciwgaXNNYXAsIGlzV2Vha01hcCwgaXNTZXQsIGlzV2Vha1NldC5cbiAgXy5lYWNoKFsnQXJndW1lbnRzJywgJ0Z1bmN0aW9uJywgJ1N0cmluZycsICdOdW1iZXInLCAnRGF0ZScsICdSZWdFeHAnLCAnRXJyb3InLCAnU3ltYm9sJywgJ01hcCcsICdXZWFrTWFwJywgJ1NldCcsICdXZWFrU2V0J10sIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBfWydpcycgKyBuYW1lXSA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIHRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgJyArIG5hbWUgKyAnXSc7XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gRGVmaW5lIGEgZmFsbGJhY2sgdmVyc2lvbiBvZiB0aGUgbWV0aG9kIGluIGJyb3dzZXJzIChhaGVtLCBJRSA8IDkpLCB3aGVyZVxuICAvLyB0aGVyZSBpc24ndCBhbnkgaW5zcGVjdGFibGUgXCJBcmd1bWVudHNcIiB0eXBlLlxuICBpZiAoIV8uaXNBcmd1bWVudHMoYXJndW1lbnRzKSkge1xuICAgIF8uaXNBcmd1bWVudHMgPSBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBoYXMob2JqLCAnY2FsbGVlJyk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIE9wdGltaXplIGBpc0Z1bmN0aW9uYCBpZiBhcHByb3ByaWF0ZS4gV29yayBhcm91bmQgc29tZSB0eXBlb2YgYnVncyBpbiBvbGQgdjgsXG4gIC8vIElFIDExICgjMTYyMSksIFNhZmFyaSA4ICgjMTkyOSksIGFuZCBQaGFudG9tSlMgKCMyMjM2KS5cbiAgdmFyIG5vZGVsaXN0ID0gcm9vdC5kb2N1bWVudCAmJiByb290LmRvY3VtZW50LmNoaWxkTm9kZXM7XG4gIGlmICh0eXBlb2YgLy4vICE9ICdmdW5jdGlvbicgJiYgdHlwZW9mIEludDhBcnJheSAhPSAnb2JqZWN0JyAmJiB0eXBlb2Ygbm9kZWxpc3QgIT0gJ2Z1bmN0aW9uJykge1xuICAgIF8uaXNGdW5jdGlvbiA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIHR5cGVvZiBvYmogPT0gJ2Z1bmN0aW9uJyB8fCBmYWxzZTtcbiAgICB9O1xuICB9XG5cbiAgLy8gSXMgYSBnaXZlbiBvYmplY3QgYSBmaW5pdGUgbnVtYmVyP1xuICBfLmlzRmluaXRlID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuICFfLmlzU3ltYm9sKG9iaikgJiYgaXNGaW5pdGUob2JqKSAmJiAhaXNOYU4ocGFyc2VGbG9hdChvYmopKTtcbiAgfTtcblxuICAvLyBJcyB0aGUgZ2l2ZW4gdmFsdWUgYE5hTmA/XG4gIF8uaXNOYU4gPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gXy5pc051bWJlcihvYmopICYmIGlzTmFOKG9iaik7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBhIGJvb2xlYW4/XG4gIF8uaXNCb29sZWFuID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gdHJ1ZSB8fCBvYmogPT09IGZhbHNlIHx8IHRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQm9vbGVhbl0nO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgZXF1YWwgdG8gbnVsbD9cbiAgXy5pc051bGwgPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gb2JqID09PSBudWxsO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFyaWFibGUgdW5kZWZpbmVkP1xuICBfLmlzVW5kZWZpbmVkID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gdm9pZCAwO1xuICB9O1xuXG4gIC8vIFNob3J0Y3V0IGZ1bmN0aW9uIGZvciBjaGVja2luZyBpZiBhbiBvYmplY3QgaGFzIGEgZ2l2ZW4gcHJvcGVydHkgZGlyZWN0bHlcbiAgLy8gb24gaXRzZWxmIChpbiBvdGhlciB3b3Jkcywgbm90IG9uIGEgcHJvdG90eXBlKS5cbiAgXy5oYXMgPSBmdW5jdGlvbihvYmosIHBhdGgpIHtcbiAgICBpZiAoIV8uaXNBcnJheShwYXRoKSkge1xuICAgICAgcmV0dXJuIGhhcyhvYmosIHBhdGgpO1xuICAgIH1cbiAgICB2YXIgbGVuZ3RoID0gcGF0aC5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IHBhdGhbaV07XG4gICAgICBpZiAob2JqID09IG51bGwgfHwgIWhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIG9iaiA9IG9ialtrZXldO1xuICAgIH1cbiAgICByZXR1cm4gISFsZW5ndGg7XG4gIH07XG5cbiAgLy8gVXRpbGl0eSBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBSdW4gVW5kZXJzY29yZS5qcyBpbiAqbm9Db25mbGljdCogbW9kZSwgcmV0dXJuaW5nIHRoZSBgX2AgdmFyaWFibGUgdG8gaXRzXG4gIC8vIHByZXZpb3VzIG93bmVyLiBSZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBVbmRlcnNjb3JlIG9iamVjdC5cbiAgXy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24oKSB7XG4gICAgcm9vdC5fID0gcHJldmlvdXNVbmRlcnNjb3JlO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIC8vIEtlZXAgdGhlIGlkZW50aXR5IGZ1bmN0aW9uIGFyb3VuZCBmb3IgZGVmYXVsdCBpdGVyYXRlZXMuXG4gIF8uaWRlbnRpdHkgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfTtcblxuICAvLyBQcmVkaWNhdGUtZ2VuZXJhdGluZyBmdW5jdGlvbnMuIE9mdGVuIHVzZWZ1bCBvdXRzaWRlIG9mIFVuZGVyc2NvcmUuXG4gIF8uY29uc3RhbnQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9O1xuICB9O1xuXG4gIF8ubm9vcCA9IGZ1bmN0aW9uKCl7fTtcblxuICAvLyBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCwgd2hlbiBwYXNzZWQgYW4gb2JqZWN0LCB3aWxsIHRyYXZlcnNlIHRoYXQgb2JqZWN04oCZc1xuICAvLyBwcm9wZXJ0aWVzIGRvd24gdGhlIGdpdmVuIGBwYXRoYCwgc3BlY2lmaWVkIGFzIGFuIGFycmF5IG9mIGtleXMgb3IgaW5kZXhlcy5cbiAgXy5wcm9wZXJ0eSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgICBpZiAoIV8uaXNBcnJheShwYXRoKSkge1xuICAgICAgcmV0dXJuIHNoYWxsb3dQcm9wZXJ0eShwYXRoKTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIGRlZXBHZXQob2JqLCBwYXRoKTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIEdlbmVyYXRlcyBhIGZ1bmN0aW9uIGZvciBhIGdpdmVuIG9iamVjdCB0aGF0IHJldHVybnMgYSBnaXZlbiBwcm9wZXJ0eS5cbiAgXy5wcm9wZXJ0eU9mID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKG9iaiA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oKXt9O1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24ocGF0aCkge1xuICAgICAgcmV0dXJuICFfLmlzQXJyYXkocGF0aCkgPyBvYmpbcGF0aF0gOiBkZWVwR2V0KG9iaiwgcGF0aCk7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgcHJlZGljYXRlIGZvciBjaGVja2luZyB3aGV0aGVyIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBzZXQgb2ZcbiAgLy8gYGtleTp2YWx1ZWAgcGFpcnMuXG4gIF8ubWF0Y2hlciA9IF8ubWF0Y2hlcyA9IGZ1bmN0aW9uKGF0dHJzKSB7XG4gICAgYXR0cnMgPSBfLmV4dGVuZE93bih7fSwgYXR0cnMpO1xuICAgIHJldHVybiBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBfLmlzTWF0Y2gob2JqLCBhdHRycyk7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSdW4gYSBmdW5jdGlvbiAqKm4qKiB0aW1lcy5cbiAgXy50aW1lcyA9IGZ1bmN0aW9uKG4sIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIGFjY3VtID0gQXJyYXkoTWF0aC5tYXgoMCwgbikpO1xuICAgIGl0ZXJhdGVlID0gb3B0aW1pemVDYihpdGVyYXRlZSwgY29udGV4dCwgMSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIGFjY3VtW2ldID0gaXRlcmF0ZWUoaSk7XG4gICAgcmV0dXJuIGFjY3VtO1xuICB9O1xuXG4gIC8vIFJldHVybiBhIHJhbmRvbSBpbnRlZ2VyIGJldHdlZW4gbWluIGFuZCBtYXggKGluY2x1c2l2ZSkuXG4gIF8ucmFuZG9tID0gZnVuY3Rpb24obWluLCBtYXgpIHtcbiAgICBpZiAobWF4ID09IG51bGwpIHtcbiAgICAgIG1heCA9IG1pbjtcbiAgICAgIG1pbiA9IDA7XG4gICAgfVxuICAgIHJldHVybiBtaW4gKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluICsgMSkpO1xuICB9O1xuXG4gIC8vIEEgKHBvc3NpYmx5IGZhc3Rlcikgd2F5IHRvIGdldCB0aGUgY3VycmVudCB0aW1lc3RhbXAgYXMgYW4gaW50ZWdlci5cbiAgXy5ub3cgPSBEYXRlLm5vdyB8fCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gIH07XG5cbiAgLy8gTGlzdCBvZiBIVE1MIGVudGl0aWVzIGZvciBlc2NhcGluZy5cbiAgdmFyIGVzY2FwZU1hcCA9IHtcbiAgICAnJic6ICcmYW1wOycsXG4gICAgJzwnOiAnJmx0OycsXG4gICAgJz4nOiAnJmd0OycsXG4gICAgJ1wiJzogJyZxdW90OycsXG4gICAgXCInXCI6ICcmI3gyNzsnLFxuICAgICdgJzogJyYjeDYwOydcbiAgfTtcbiAgdmFyIHVuZXNjYXBlTWFwID0gXy5pbnZlcnQoZXNjYXBlTWFwKTtcblxuICAvLyBGdW5jdGlvbnMgZm9yIGVzY2FwaW5nIGFuZCB1bmVzY2FwaW5nIHN0cmluZ3MgdG8vZnJvbSBIVE1MIGludGVycG9sYXRpb24uXG4gIHZhciBjcmVhdGVFc2NhcGVyID0gZnVuY3Rpb24obWFwKSB7XG4gICAgdmFyIGVzY2FwZXIgPSBmdW5jdGlvbihtYXRjaCkge1xuICAgICAgcmV0dXJuIG1hcFttYXRjaF07XG4gICAgfTtcbiAgICAvLyBSZWdleGVzIGZvciBpZGVudGlmeWluZyBhIGtleSB0aGF0IG5lZWRzIHRvIGJlIGVzY2FwZWQuXG4gICAgdmFyIHNvdXJjZSA9ICcoPzonICsgXy5rZXlzKG1hcCkuam9pbignfCcpICsgJyknO1xuICAgIHZhciB0ZXN0UmVnZXhwID0gUmVnRXhwKHNvdXJjZSk7XG4gICAgdmFyIHJlcGxhY2VSZWdleHAgPSBSZWdFeHAoc291cmNlLCAnZycpO1xuICAgIHJldHVybiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgIHN0cmluZyA9IHN0cmluZyA9PSBudWxsID8gJycgOiAnJyArIHN0cmluZztcbiAgICAgIHJldHVybiB0ZXN0UmVnZXhwLnRlc3Qoc3RyaW5nKSA/IHN0cmluZy5yZXBsYWNlKHJlcGxhY2VSZWdleHAsIGVzY2FwZXIpIDogc3RyaW5nO1xuICAgIH07XG4gIH07XG4gIF8uZXNjYXBlID0gY3JlYXRlRXNjYXBlcihlc2NhcGVNYXApO1xuICBfLnVuZXNjYXBlID0gY3JlYXRlRXNjYXBlcih1bmVzY2FwZU1hcCk7XG5cbiAgLy8gVHJhdmVyc2VzIHRoZSBjaGlsZHJlbiBvZiBgb2JqYCBhbG9uZyBgcGF0aGAuIElmIGEgY2hpbGQgaXMgYSBmdW5jdGlvbiwgaXRcbiAgLy8gaXMgaW52b2tlZCB3aXRoIGl0cyBwYXJlbnQgYXMgY29udGV4dC4gUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGZpbmFsXG4gIC8vIGNoaWxkLCBvciBgZmFsbGJhY2tgIGlmIGFueSBjaGlsZCBpcyB1bmRlZmluZWQuXG4gIF8ucmVzdWx0ID0gZnVuY3Rpb24ob2JqLCBwYXRoLCBmYWxsYmFjaykge1xuICAgIGlmICghXy5pc0FycmF5KHBhdGgpKSBwYXRoID0gW3BhdGhdO1xuICAgIHZhciBsZW5ndGggPSBwYXRoLmxlbmd0aDtcbiAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgcmV0dXJuIF8uaXNGdW5jdGlvbihmYWxsYmFjaykgPyBmYWxsYmFjay5jYWxsKG9iaikgOiBmYWxsYmFjaztcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHByb3AgPSBvYmogPT0gbnVsbCA/IHZvaWQgMCA6IG9ialtwYXRoW2ldXTtcbiAgICAgIGlmIChwcm9wID09PSB2b2lkIDApIHtcbiAgICAgICAgcHJvcCA9IGZhbGxiYWNrO1xuICAgICAgICBpID0gbGVuZ3RoOyAvLyBFbnN1cmUgd2UgZG9uJ3QgY29udGludWUgaXRlcmF0aW5nLlxuICAgICAgfVxuICAgICAgb2JqID0gXy5pc0Z1bmN0aW9uKHByb3ApID8gcHJvcC5jYWxsKG9iaikgOiBwcm9wO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9O1xuXG4gIC8vIEdlbmVyYXRlIGEgdW5pcXVlIGludGVnZXIgaWQgKHVuaXF1ZSB3aXRoaW4gdGhlIGVudGlyZSBjbGllbnQgc2Vzc2lvbikuXG4gIC8vIFVzZWZ1bCBmb3IgdGVtcG9yYXJ5IERPTSBpZHMuXG4gIHZhciBpZENvdW50ZXIgPSAwO1xuICBfLnVuaXF1ZUlkID0gZnVuY3Rpb24ocHJlZml4KSB7XG4gICAgdmFyIGlkID0gKytpZENvdW50ZXIgKyAnJztcbiAgICByZXR1cm4gcHJlZml4ID8gcHJlZml4ICsgaWQgOiBpZDtcbiAgfTtcblxuICAvLyBCeSBkZWZhdWx0LCBVbmRlcnNjb3JlIHVzZXMgRVJCLXN0eWxlIHRlbXBsYXRlIGRlbGltaXRlcnMsIGNoYW5nZSB0aGVcbiAgLy8gZm9sbG93aW5nIHRlbXBsYXRlIHNldHRpbmdzIHRvIHVzZSBhbHRlcm5hdGl2ZSBkZWxpbWl0ZXJzLlxuICBfLnRlbXBsYXRlU2V0dGluZ3MgPSB7XG4gICAgZXZhbHVhdGU6IC88JShbXFxzXFxTXSs/KSU+L2csXG4gICAgaW50ZXJwb2xhdGU6IC88JT0oW1xcc1xcU10rPyklPi9nLFxuICAgIGVzY2FwZTogLzwlLShbXFxzXFxTXSs/KSU+L2dcbiAgfTtcblxuICAvLyBXaGVuIGN1c3RvbWl6aW5nIGB0ZW1wbGF0ZVNldHRpbmdzYCwgaWYgeW91IGRvbid0IHdhbnQgdG8gZGVmaW5lIGFuXG4gIC8vIGludGVycG9sYXRpb24sIGV2YWx1YXRpb24gb3IgZXNjYXBpbmcgcmVnZXgsIHdlIG5lZWQgb25lIHRoYXQgaXNcbiAgLy8gZ3VhcmFudGVlZCBub3QgdG8gbWF0Y2guXG4gIHZhciBub01hdGNoID0gLyguKV4vO1xuXG4gIC8vIENlcnRhaW4gY2hhcmFjdGVycyBuZWVkIHRvIGJlIGVzY2FwZWQgc28gdGhhdCB0aGV5IGNhbiBiZSBwdXQgaW50byBhXG4gIC8vIHN0cmluZyBsaXRlcmFsLlxuICB2YXIgZXNjYXBlcyA9IHtcbiAgICBcIidcIjogXCInXCIsXG4gICAgJ1xcXFwnOiAnXFxcXCcsXG4gICAgJ1xccic6ICdyJyxcbiAgICAnXFxuJzogJ24nLFxuICAgICdcXHUyMDI4JzogJ3UyMDI4JyxcbiAgICAnXFx1MjAyOSc6ICd1MjAyOSdcbiAgfTtcblxuICB2YXIgZXNjYXBlUmVnRXhwID0gL1xcXFx8J3xcXHJ8XFxufFxcdTIwMjh8XFx1MjAyOS9nO1xuXG4gIHZhciBlc2NhcGVDaGFyID0gZnVuY3Rpb24obWF0Y2gpIHtcbiAgICByZXR1cm4gJ1xcXFwnICsgZXNjYXBlc1ttYXRjaF07XG4gIH07XG5cbiAgLy8gSmF2YVNjcmlwdCBtaWNyby10ZW1wbGF0aW5nLCBzaW1pbGFyIHRvIEpvaG4gUmVzaWcncyBpbXBsZW1lbnRhdGlvbi5cbiAgLy8gVW5kZXJzY29yZSB0ZW1wbGF0aW5nIGhhbmRsZXMgYXJiaXRyYXJ5IGRlbGltaXRlcnMsIHByZXNlcnZlcyB3aGl0ZXNwYWNlLFxuICAvLyBhbmQgY29ycmVjdGx5IGVzY2FwZXMgcXVvdGVzIHdpdGhpbiBpbnRlcnBvbGF0ZWQgY29kZS5cbiAgLy8gTkI6IGBvbGRTZXR0aW5nc2Agb25seSBleGlzdHMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxuICBfLnRlbXBsYXRlID0gZnVuY3Rpb24odGV4dCwgc2V0dGluZ3MsIG9sZFNldHRpbmdzKSB7XG4gICAgaWYgKCFzZXR0aW5ncyAmJiBvbGRTZXR0aW5ncykgc2V0dGluZ3MgPSBvbGRTZXR0aW5ncztcbiAgICBzZXR0aW5ncyA9IF8uZGVmYXVsdHMoe30sIHNldHRpbmdzLCBfLnRlbXBsYXRlU2V0dGluZ3MpO1xuXG4gICAgLy8gQ29tYmluZSBkZWxpbWl0ZXJzIGludG8gb25lIHJlZ3VsYXIgZXhwcmVzc2lvbiB2aWEgYWx0ZXJuYXRpb24uXG4gICAgdmFyIG1hdGNoZXIgPSBSZWdFeHAoW1xuICAgICAgKHNldHRpbmdzLmVzY2FwZSB8fCBub01hdGNoKS5zb3VyY2UsXG4gICAgICAoc2V0dGluZ3MuaW50ZXJwb2xhdGUgfHwgbm9NYXRjaCkuc291cmNlLFxuICAgICAgKHNldHRpbmdzLmV2YWx1YXRlIHx8IG5vTWF0Y2gpLnNvdXJjZVxuICAgIF0uam9pbignfCcpICsgJ3wkJywgJ2cnKTtcblxuICAgIC8vIENvbXBpbGUgdGhlIHRlbXBsYXRlIHNvdXJjZSwgZXNjYXBpbmcgc3RyaW5nIGxpdGVyYWxzIGFwcHJvcHJpYXRlbHkuXG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgc291cmNlID0gXCJfX3ArPSdcIjtcbiAgICB0ZXh0LnJlcGxhY2UobWF0Y2hlciwgZnVuY3Rpb24obWF0Y2gsIGVzY2FwZSwgaW50ZXJwb2xhdGUsIGV2YWx1YXRlLCBvZmZzZXQpIHtcbiAgICAgIHNvdXJjZSArPSB0ZXh0LnNsaWNlKGluZGV4LCBvZmZzZXQpLnJlcGxhY2UoZXNjYXBlUmVnRXhwLCBlc2NhcGVDaGFyKTtcbiAgICAgIGluZGV4ID0gb2Zmc2V0ICsgbWF0Y2gubGVuZ3RoO1xuXG4gICAgICBpZiAoZXNjYXBlKSB7XG4gICAgICAgIHNvdXJjZSArPSBcIicrXFxuKChfX3Q9KFwiICsgZXNjYXBlICsgXCIpKT09bnVsbD8nJzpfLmVzY2FwZShfX3QpKStcXG4nXCI7XG4gICAgICB9IGVsc2UgaWYgKGludGVycG9sYXRlKSB7XG4gICAgICAgIHNvdXJjZSArPSBcIicrXFxuKChfX3Q9KFwiICsgaW50ZXJwb2xhdGUgKyBcIikpPT1udWxsPycnOl9fdCkrXFxuJ1wiO1xuICAgICAgfSBlbHNlIGlmIChldmFsdWF0ZSkge1xuICAgICAgICBzb3VyY2UgKz0gXCInO1xcblwiICsgZXZhbHVhdGUgKyBcIlxcbl9fcCs9J1wiO1xuICAgICAgfVxuXG4gICAgICAvLyBBZG9iZSBWTXMgbmVlZCB0aGUgbWF0Y2ggcmV0dXJuZWQgdG8gcHJvZHVjZSB0aGUgY29ycmVjdCBvZmZzZXQuXG4gICAgICByZXR1cm4gbWF0Y2g7XG4gICAgfSk7XG4gICAgc291cmNlICs9IFwiJztcXG5cIjtcblxuICAgIC8vIElmIGEgdmFyaWFibGUgaXMgbm90IHNwZWNpZmllZCwgcGxhY2UgZGF0YSB2YWx1ZXMgaW4gbG9jYWwgc2NvcGUuXG4gICAgaWYgKCFzZXR0aW5ncy52YXJpYWJsZSkgc291cmNlID0gJ3dpdGgob2JqfHx7fSl7XFxuJyArIHNvdXJjZSArICd9XFxuJztcblxuICAgIHNvdXJjZSA9IFwidmFyIF9fdCxfX3A9JycsX19qPUFycmF5LnByb3RvdHlwZS5qb2luLFwiICtcbiAgICAgIFwicHJpbnQ9ZnVuY3Rpb24oKXtfX3ArPV9fai5jYWxsKGFyZ3VtZW50cywnJyk7fTtcXG5cIiArXG4gICAgICBzb3VyY2UgKyAncmV0dXJuIF9fcDtcXG4nO1xuXG4gICAgdmFyIHJlbmRlcjtcbiAgICB0cnkge1xuICAgICAgcmVuZGVyID0gbmV3IEZ1bmN0aW9uKHNldHRpbmdzLnZhcmlhYmxlIHx8ICdvYmonLCAnXycsIHNvdXJjZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZS5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cblxuICAgIHZhciB0ZW1wbGF0ZSA9IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgIHJldHVybiByZW5kZXIuY2FsbCh0aGlzLCBkYXRhLCBfKTtcbiAgICB9O1xuXG4gICAgLy8gUHJvdmlkZSB0aGUgY29tcGlsZWQgc291cmNlIGFzIGEgY29udmVuaWVuY2UgZm9yIHByZWNvbXBpbGF0aW9uLlxuICAgIHZhciBhcmd1bWVudCA9IHNldHRpbmdzLnZhcmlhYmxlIHx8ICdvYmonO1xuICAgIHRlbXBsYXRlLnNvdXJjZSA9ICdmdW5jdGlvbignICsgYXJndW1lbnQgKyAnKXtcXG4nICsgc291cmNlICsgJ30nO1xuXG4gICAgcmV0dXJuIHRlbXBsYXRlO1xuICB9O1xuXG4gIC8vIEFkZCBhIFwiY2hhaW5cIiBmdW5jdGlvbi4gU3RhcnQgY2hhaW5pbmcgYSB3cmFwcGVkIFVuZGVyc2NvcmUgb2JqZWN0LlxuICBfLmNoYWluID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIGluc3RhbmNlID0gXyhvYmopO1xuICAgIGluc3RhbmNlLl9jaGFpbiA9IHRydWU7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9O1xuXG4gIC8vIE9PUFxuICAvLyAtLS0tLS0tLS0tLS0tLS1cbiAgLy8gSWYgVW5kZXJzY29yZSBpcyBjYWxsZWQgYXMgYSBmdW5jdGlvbiwgaXQgcmV0dXJucyBhIHdyYXBwZWQgb2JqZWN0IHRoYXRcbiAgLy8gY2FuIGJlIHVzZWQgT08tc3R5bGUuIFRoaXMgd3JhcHBlciBob2xkcyBhbHRlcmVkIHZlcnNpb25zIG9mIGFsbCB0aGVcbiAgLy8gdW5kZXJzY29yZSBmdW5jdGlvbnMuIFdyYXBwZWQgb2JqZWN0cyBtYXkgYmUgY2hhaW5lZC5cblxuICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY29udGludWUgY2hhaW5pbmcgaW50ZXJtZWRpYXRlIHJlc3VsdHMuXG4gIHZhciBjaGFpblJlc3VsdCA9IGZ1bmN0aW9uKGluc3RhbmNlLCBvYmopIHtcbiAgICByZXR1cm4gaW5zdGFuY2UuX2NoYWluID8gXyhvYmopLmNoYWluKCkgOiBvYmo7XG4gIH07XG5cbiAgLy8gQWRkIHlvdXIgb3duIGN1c3RvbSBmdW5jdGlvbnMgdG8gdGhlIFVuZGVyc2NvcmUgb2JqZWN0LlxuICBfLm1peGluID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgXy5lYWNoKF8uZnVuY3Rpb25zKG9iaiksIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgIHZhciBmdW5jID0gX1tuYW1lXSA9IG9ialtuYW1lXTtcbiAgICAgIF8ucHJvdG90eXBlW25hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBhcmdzID0gW3RoaXMuX3dyYXBwZWRdO1xuICAgICAgICBwdXNoLmFwcGx5KGFyZ3MsIGFyZ3VtZW50cyk7XG4gICAgICAgIHJldHVybiBjaGFpblJlc3VsdCh0aGlzLCBmdW5jLmFwcGx5KF8sIGFyZ3MpKTtcbiAgICAgIH07XG4gICAgfSk7XG4gICAgcmV0dXJuIF87XG4gIH07XG5cbiAgLy8gQWRkIGFsbCBvZiB0aGUgVW5kZXJzY29yZSBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIgb2JqZWN0LlxuICBfLm1peGluKF8pO1xuXG4gIC8vIEFkZCBhbGwgbXV0YXRvciBBcnJheSBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIuXG4gIF8uZWFjaChbJ3BvcCcsICdwdXNoJywgJ3JldmVyc2UnLCAnc2hpZnQnLCAnc29ydCcsICdzcGxpY2UnLCAndW5zaGlmdCddLCBmdW5jdGlvbihuYW1lKSB7XG4gICAgdmFyIG1ldGhvZCA9IEFycmF5UHJvdG9bbmFtZV07XG4gICAgXy5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBvYmogPSB0aGlzLl93cmFwcGVkO1xuICAgICAgbWV0aG9kLmFwcGx5KG9iaiwgYXJndW1lbnRzKTtcbiAgICAgIGlmICgobmFtZSA9PT0gJ3NoaWZ0JyB8fCBuYW1lID09PSAnc3BsaWNlJykgJiYgb2JqLmxlbmd0aCA9PT0gMCkgZGVsZXRlIG9ialswXTtcbiAgICAgIHJldHVybiBjaGFpblJlc3VsdCh0aGlzLCBvYmopO1xuICAgIH07XG4gIH0pO1xuXG4gIC8vIEFkZCBhbGwgYWNjZXNzb3IgQXJyYXkgZnVuY3Rpb25zIHRvIHRoZSB3cmFwcGVyLlxuICBfLmVhY2goWydjb25jYXQnLCAnam9pbicsICdzbGljZSddLCBmdW5jdGlvbihuYW1lKSB7XG4gICAgdmFyIG1ldGhvZCA9IEFycmF5UHJvdG9bbmFtZV07XG4gICAgXy5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBjaGFpblJlc3VsdCh0aGlzLCBtZXRob2QuYXBwbHkodGhpcy5fd3JhcHBlZCwgYXJndW1lbnRzKSk7XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gRXh0cmFjdHMgdGhlIHJlc3VsdCBmcm9tIGEgd3JhcHBlZCBhbmQgY2hhaW5lZCBvYmplY3QuXG4gIF8ucHJvdG90eXBlLnZhbHVlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dyYXBwZWQ7XG4gIH07XG5cbiAgLy8gUHJvdmlkZSB1bndyYXBwaW5nIHByb3h5IGZvciBzb21lIG1ldGhvZHMgdXNlZCBpbiBlbmdpbmUgb3BlcmF0aW9uc1xuICAvLyBzdWNoIGFzIGFyaXRobWV0aWMgYW5kIEpTT04gc3RyaW5naWZpY2F0aW9uLlxuICBfLnByb3RvdHlwZS52YWx1ZU9mID0gXy5wcm90b3R5cGUudG9KU09OID0gXy5wcm90b3R5cGUudmFsdWU7XG5cbiAgXy5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gU3RyaW5nKHRoaXMuX3dyYXBwZWQpO1xuICB9O1xuXG4gIC8vIEFNRCByZWdpc3RyYXRpb24gaGFwcGVucyBhdCB0aGUgZW5kIGZvciBjb21wYXRpYmlsaXR5IHdpdGggQU1EIGxvYWRlcnNcbiAgLy8gdGhhdCBtYXkgbm90IGVuZm9yY2UgbmV4dC10dXJuIHNlbWFudGljcyBvbiBtb2R1bGVzLiBFdmVuIHRob3VnaCBnZW5lcmFsXG4gIC8vIHByYWN0aWNlIGZvciBBTUQgcmVnaXN0cmF0aW9uIGlzIHRvIGJlIGFub255bW91cywgdW5kZXJzY29yZSByZWdpc3RlcnNcbiAgLy8gYXMgYSBuYW1lZCBtb2R1bGUgYmVjYXVzZSwgbGlrZSBqUXVlcnksIGl0IGlzIGEgYmFzZSBsaWJyYXJ5IHRoYXQgaXNcbiAgLy8gcG9wdWxhciBlbm91Z2ggdG8gYmUgYnVuZGxlZCBpbiBhIHRoaXJkIHBhcnR5IGxpYiwgYnV0IG5vdCBiZSBwYXJ0IG9mXG4gIC8vIGFuIEFNRCBsb2FkIHJlcXVlc3QuIFRob3NlIGNhc2VzIGNvdWxkIGdlbmVyYXRlIGFuIGVycm9yIHdoZW4gYW5cbiAgLy8gYW5vbnltb3VzIGRlZmluZSgpIGlzIGNhbGxlZCBvdXRzaWRlIG9mIGEgbG9hZGVyIHJlcXVlc3QuXG4gIGlmICh0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgIGRlZmluZSgndW5kZXJzY29yZScsIFtdLCBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBfO1xuICAgIH0pO1xuICB9XG59KCkpO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL3VuZGVyc2NvcmUuanNcbi8vIG1vZHVsZSBpZCA9IDM0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIiwidmFyIGc7XHJcblxyXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxyXG5nID0gKGZ1bmN0aW9uKCkge1xyXG5cdHJldHVybiB0aGlzO1xyXG59KSgpO1xyXG5cclxudHJ5IHtcclxuXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcclxuXHRnID0gZyB8fCBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCkgfHwgKDEsZXZhbCkoXCJ0aGlzXCIpO1xyXG59IGNhdGNoKGUpIHtcclxuXHQvLyBUaGlzIHdvcmtzIGlmIHRoZSB3aW5kb3cgcmVmZXJlbmNlIGlzIGF2YWlsYWJsZVxyXG5cdGlmKHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIpXHJcblx0XHRnID0gd2luZG93O1xyXG59XHJcblxyXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXHJcbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzXHJcbi8vIGVhc2llciB0byBoYW5kbGUgdGhpcyBjYXNlLiBpZighZ2xvYmFsKSB7IC4uLn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZztcclxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzXG4vLyBtb2R1bGUgaWQgPSAzNVxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24obW9kdWxlKSB7XHJcblx0aWYoIW1vZHVsZS53ZWJwYWNrUG9seWZpbGwpIHtcclxuXHRcdG1vZHVsZS5kZXByZWNhdGUgPSBmdW5jdGlvbigpIHt9O1xyXG5cdFx0bW9kdWxlLnBhdGhzID0gW107XHJcblx0XHQvLyBtb2R1bGUucGFyZW50ID0gdW5kZWZpbmVkIGJ5IGRlZmF1bHRcclxuXHRcdGlmKCFtb2R1bGUuY2hpbGRyZW4pIG1vZHVsZS5jaGlsZHJlbiA9IFtdO1xyXG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXCJsb2FkZWRcIiwge1xyXG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxyXG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdHJldHVybiBtb2R1bGUubDtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcImlkXCIsIHtcclxuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcclxuXHRcdFx0Z2V0OiBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRyZXR1cm4gbW9kdWxlLmk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0bW9kdWxlLndlYnBhY2tQb2x5ZmlsbCA9IDE7XHJcblx0fVxyXG5cdHJldHVybiBtb2R1bGU7XHJcbn07XHJcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vICh3ZWJwYWNrKS9idWlsZGluL21vZHVsZS5qc1xuLy8gbW9kdWxlIGlkID0gMzZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEiLCIvKiBlc2xpbnQgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzOiAwICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBDb25zdCBmcm9tICcuLi9jb25zdCc7XG5pbXBvcnQgeyBCb290c3RyYXBDb250ZXh0IH0gZnJvbSAnLi4vY29udGV4dHMvYm9vdHN0cmFwJztcbmltcG9ydCBfIGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IENoZWNrQm94ID0gKHsgY2xhc3NOYW1lLCBjaGVja2VkLCBpbmRldGVybWluYXRlIH0pID0+IChcbiAgPGlucHV0XG4gICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICBjaGVja2VkPXsgY2hlY2tlZCB9XG4gICAgY2xhc3NOYW1lPXsgY2xhc3NOYW1lIH1cbiAgICByZWY9eyAoaW5wdXQpID0+IHtcbiAgICAgIGlmIChpbnB1dCkgaW5wdXQuaW5kZXRlcm1pbmF0ZSA9IGluZGV0ZXJtaW5hdGU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICB9IH1cbiAgICBvbkNoYW5nZT17ICgpID0+IHt9IH1cbiAgLz5cbik7XG5cbkNoZWNrQm94LnByb3BUeXBlcyA9IHtcbiAgY2hlY2tlZDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgaW5kZXRlcm1pbmF0ZTogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nXG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZWxlY3Rpb25IZWFkZXJDZWxsIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICBtb2RlOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgY2hlY2tlZFN0YXR1czogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBvbkFsbFJvd3NTZWxlY3Q6IFByb3BUeXBlcy5mdW5jLFxuICAgIGhpZGVTZWxlY3RBbGw6IFByb3BUeXBlcy5ib29sLFxuICAgIHNlbGVjdGlvbkhlYWRlclJlbmRlcmVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBoZWFkZXJDb2x1bW5TdHlsZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmZ1bmNdKVxuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmhhbmRsZUNoZWNrQm94Q2xpY2sgPSB0aGlzLmhhbmRsZUNoZWNrQm94Q2xpY2suYmluZCh0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBhdm9pZCB1cGRhdGluZyBpZiBidXR0b24gaXNcbiAgICogMS4gcmFkaW9cbiAgICogMi4gc3RhdHVzIHdhcyBub3QgY2hhbmdlZC5cbiAgICovXG4gIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMpIHtcbiAgICBjb25zdCB7IFJPV19TRUxFQ1RfU0lOR0xFIH0gPSBDb25zdDtcbiAgICBjb25zdCB7IG1vZGUsIGNoZWNrZWRTdGF0dXMgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBpZiAobW9kZSA9PT0gUk9XX1NFTEVDVF9TSU5HTEUpIHJldHVybiBmYWxzZTtcblxuICAgIHJldHVybiBuZXh0UHJvcHMuY2hlY2tlZFN0YXR1cyAhPT0gY2hlY2tlZFN0YXR1cztcbiAgfVxuXG4gIGhhbmRsZUNoZWNrQm94Q2xpY2soZSkge1xuICAgIGNvbnN0IHsgb25BbGxSb3dzU2VsZWN0LCBjaGVja2VkU3RhdHVzIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGlzVW5TZWxlY3QgPVxuICAgICAgY2hlY2tlZFN0YXR1cyA9PT0gQ29uc3QuQ0hFQ0tCT1hfU1RBVFVTX0NIRUNLRUQgfHxcbiAgICAgIGNoZWNrZWRTdGF0dXMgPT09IENvbnN0LkNIRUNLQk9YX1NUQVRVU19JTkRFVEVSTUlOQVRFO1xuXG4gICAgb25BbGxSb3dzU2VsZWN0KGUsIGlzVW5TZWxlY3QpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIENIRUNLQk9YX1NUQVRVU19DSEVDS0VELCBDSEVDS0JPWF9TVEFUVVNfSU5ERVRFUk1JTkFURSwgUk9XX1NFTEVDVF9NVUxUSVBMRVxuICAgIH0gPSBDb25zdDtcblxuICAgIGNvbnN0IHtcbiAgICAgIG1vZGUsXG4gICAgICBjaGVja2VkU3RhdHVzLFxuICAgICAgc2VsZWN0aW9uSGVhZGVyUmVuZGVyZXIsXG4gICAgICBoaWRlU2VsZWN0QWxsLFxuICAgICAgaGVhZGVyQ29sdW1uU3R5bGVcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoaGlkZVNlbGVjdEFsbCkge1xuICAgICAgcmV0dXJuIDx0aCBkYXRhLXJvdy1zZWxlY3Rpb24gLz47XG4gICAgfVxuXG4gICAgY29uc3QgY2hlY2tlZCA9IGNoZWNrZWRTdGF0dXMgPT09IENIRUNLQk9YX1NUQVRVU19DSEVDS0VEO1xuXG4gICAgY29uc3QgaW5kZXRlcm1pbmF0ZSA9IGNoZWNrZWRTdGF0dXMgPT09IENIRUNLQk9YX1NUQVRVU19JTkRFVEVSTUlOQVRFO1xuXG4gICAgY29uc3QgYXR0cnMgPSB7fTtcbiAgICBsZXQgY29udGVudDtcbiAgICBpZiAoc2VsZWN0aW9uSGVhZGVyUmVuZGVyZXIgfHwgbW9kZSA9PT0gUk9XX1NFTEVDVF9NVUxUSVBMRSkge1xuICAgICAgYXR0cnMub25DbGljayA9IHRoaXMuaGFuZGxlQ2hlY2tCb3hDbGljaztcbiAgICB9XG5cbiAgICBhdHRycy5zdHlsZSA9IF8uaXNGdW5jdGlvbihoZWFkZXJDb2x1bW5TdHlsZSkgP1xuICAgICAgaGVhZGVyQ29sdW1uU3R5bGUoY2hlY2tlZFN0YXR1cykgOlxuICAgICAgaGVhZGVyQ29sdW1uU3R5bGU7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPEJvb3RzdHJhcENvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgIHtcbiAgICAgICAgICAoeyBib290c3RyYXA0IH0pID0+IHtcbiAgICAgICAgICAgIGlmIChzZWxlY3Rpb25IZWFkZXJSZW5kZXJlcikge1xuICAgICAgICAgICAgICBjb250ZW50ID0gc2VsZWN0aW9uSGVhZGVyUmVuZGVyZXIoe1xuICAgICAgICAgICAgICAgIG1vZGUsXG4gICAgICAgICAgICAgICAgY2hlY2tlZCxcbiAgICAgICAgICAgICAgICBpbmRldGVybWluYXRlXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtb2RlID09PSBST1dfU0VMRUNUX01VTFRJUExFKSB7XG4gICAgICAgICAgICAgIGNvbnRlbnQgPSAoXG4gICAgICAgICAgICAgICAgPENoZWNrQm94XG4gICAgICAgICAgICAgICAgICB7IC4uLnRoaXMucHJvcHMgfVxuICAgICAgICAgICAgICAgICAgY2hlY2tlZD17IGNoZWNrZWQgfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXsgYm9vdHN0cmFwNCA/ICdzZWxlY3Rpb24taW5wdXQtNCcgOiAnJyB9XG4gICAgICAgICAgICAgICAgICBpbmRldGVybWluYXRlPXsgaW5kZXRlcm1pbmF0ZSB9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDx0aCBjbGFzc05hbWU9XCJzZWxlY3Rpb24tY2VsbC1oZWFkZXJcIiBkYXRhLXJvdy1zZWxlY3Rpb24geyAuLi5hdHRycyB9PnsgY29udGVudCB9PC90aD5cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICA8L0Jvb3RzdHJhcENvbnRleHQuQ29uc3VtZXI+XG4gICAgKTtcbiAgfVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9zcmMvcm93LXNlbGVjdGlvbi9zZWxlY3Rpb24taGVhZGVyLWNlbGwuanMiLCIvKiBlc2xpbnQgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzOiAwICovXG4vKiBlc2xpbnQgbm8tbmVzdGVkLXRlcm5hcnk6IDAgKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFeHBhbnNpb25IZWFkZXJDZWxsIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICBpc0FueUV4cGFuZHM6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gICAgb25BbGxSb3dFeHBhbmQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgZXhwYW5kSGVhZGVyQ29sdW1uUmVuZGVyZXI6IFByb3BUeXBlcy5mdW5jXG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuaGFuZGxlQ2hlY2tCb3hDbGljayA9IHRoaXMuaGFuZGxlQ2hlY2tCb3hDbGljay5iaW5kKHRoaXMpO1xuICB9XG5cbiAgaGFuZGxlQ2hlY2tCb3hDbGljayhlKSB7XG4gICAgY29uc3QgeyBpc0FueUV4cGFuZHMsIG9uQWxsUm93RXhwYW5kIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgb25BbGxSb3dFeHBhbmQoZSwgIWlzQW55RXhwYW5kcyk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBpc0FueUV4cGFuZHMsIGV4cGFuZEhlYWRlckNvbHVtblJlbmRlcmVyIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGF0dHJzID0ge1xuICAgICAgb25DbGljazogdGhpcy5oYW5kbGVDaGVja0JveENsaWNrXG4gICAgfTtcblxuICAgIHJldHVybiAoXG4gICAgICA8dGggY2xhc3NOYW1lPVwiZXhwYW5kLWNlbGwtaGVhZGVyXCIgZGF0YS1yb3ctc2VsZWN0aW9uIHsgLi4uYXR0cnMgfT5cbiAgICAgICAge1xuICAgICAgICAgIGV4cGFuZEhlYWRlckNvbHVtblJlbmRlcmVyID9cbiAgICAgICAgICAgIGV4cGFuZEhlYWRlckNvbHVtblJlbmRlcmVyKHsgaXNBbnlFeHBhbmRzIH0pIDpcbiAgICAgICAgICAgIChpc0FueUV4cGFuZHMgPyAnKC0pJyA6ICcoKyknKVxuICAgICAgICB9XG4gICAgICA8L3RoPlxuICAgICk7XG4gIH1cbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL3Jvdy1leHBhbmQvZXhwYW5kLWhlYWRlci1jZWxsLmpzIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBTZWxlY3Rpb25Db250ZXh0IGZyb20gJy4uL2NvbnRleHRzL3NlbGVjdGlvbi1jb250ZXh0JztcblxuZXhwb3J0IGRlZmF1bHQgQ29tcG9uZW50ID0+ICgpID0+IChcbiAgPFNlbGVjdGlvbkNvbnRleHQuQ29uc3VtZXI+XG4gICAgeyBzZWxlY3RSb3cgPT4gPENvbXBvbmVudCB7IC4uLnNlbGVjdFJvdyB9IC8+IH1cbiAgPC9TZWxlY3Rpb25Db250ZXh0LkNvbnN1bWVyPlxuKTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL3Jvdy1zZWxlY3Rpb24vc2VsZWN0aW9uLWhlYWRlci1jZWxsLWNvbnN1bWVyLmpzIiwiaW1wb3J0IF8gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgZ2V0Um93QnlSb3dJZCB9IGZyb20gJy4vcm93cyc7XG5cbmV4cG9ydCBjb25zdCBpc0FueUV4cGFuZHMgPSAoXG4gIGRhdGEsXG4gIGtleUZpZWxkLFxuICBleHBhbmRlZCA9IFtdXG4pID0+IHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgY29uc3Qgcm93S2V5ID0gXy5nZXQoZGF0YVtpXSwga2V5RmllbGQpO1xuICAgIGlmICh0eXBlb2YgZXhwYW5kZWQuZmluZCh4ID0+IHggPT09IHJvd0tleSkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuZXhwb3J0IGNvbnN0IGV4cGFuZGFibGVLZXlzID0gKGRhdGEsIGtleUZpZWxkLCBza2lwcyA9IFtdKSA9PiB7XG4gIGlmIChza2lwcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZGF0YS5tYXAocm93ID0+IF8uZ2V0KHJvdywga2V5RmllbGQpKTtcbiAgfVxuICByZXR1cm4gZGF0YVxuICAgIC5maWx0ZXIocm93ID0+ICFfLmNvbnRhaW5zKHNraXBzLCBfLmdldChyb3csIGtleUZpZWxkKSkpXG4gICAgLm1hcChyb3cgPT4gXy5nZXQocm93LCBrZXlGaWVsZCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEV4cGFuZGVkUm93cyA9IChkYXRhLCBrZXlGaWVsZCwgZXhwYW5kZWQpID0+XG4gIGV4cGFuZGVkLm1hcChrID0+IGdldFJvd0J5Um93SWQoZGF0YSwga2V5RmllbGQsIGspKTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL3N0b3JlL2V4cGFuZC5qcyIsImltcG9ydCBfIGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IGdldFJvd0J5Um93SWQgfSBmcm9tICcuL3Jvd3MnO1xuXG5leHBvcnQgY29uc3QgZWRpdENlbGwgPSAoZGF0YSwga2V5RmllbGQsIHJvd0lkLCBkYXRhRmllbGQsIG5ld1ZhbHVlKSA9PiB7XG4gIGNvbnN0IHJvdyA9IGdldFJvd0J5Um93SWQoZGF0YSwga2V5RmllbGQsIHJvd0lkKTtcbiAgaWYgKHJvdykgXy5zZXQocm93LCBkYXRhRmllbGQsIG5ld1ZhbHVlKTtcbn07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9zdG9yZS9tdXRhdGUuanMiLCIvKiBlc2xpbnQgbm8tbmVzdGVkLXRlcm5hcnk6IDAgKi9cbi8qIGVzbGludCBuby1sb25lbHktaWY6IDAgKi9cbi8qIGVzbGludCBuby11bmRlcnNjb3JlLWRhbmdsZTogMCAqL1xuaW1wb3J0IF8gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IENvbnN0IGZyb20gJy4uL2NvbnN0JztcblxuZnVuY3Rpb24gY29tcGFyYXRvcihhLCBiKSB7XG4gIGxldCByZXN1bHQ7XG4gIGlmICh0eXBlb2YgYiA9PT0gJ3N0cmluZycpIHtcbiAgICByZXN1bHQgPSBiLmxvY2FsZUNvbXBhcmUoYSk7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gYSA+IGIgPyAtMSA6ICgoYSA8IGIpID8gMSA6IDApO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBjb25zdCBzb3J0ID0gKGRhdGEsIHNvcnRPcmRlciwgeyBkYXRhRmllbGQsIHNvcnRGdW5jLCBzb3J0VmFsdWUgfSkgPT4ge1xuICBjb25zdCBfZGF0YSA9IFsuLi5kYXRhXTtcbiAgX2RhdGEuc29ydCgoYSwgYikgPT4ge1xuICAgIGxldCByZXN1bHQ7XG4gICAgbGV0IHZhbHVlQSA9IF8uZ2V0KGEsIGRhdGFGaWVsZCk7XG4gICAgbGV0IHZhbHVlQiA9IF8uZ2V0KGIsIGRhdGFGaWVsZCk7XG4gICAgaWYgKHNvcnRWYWx1ZSkge1xuICAgICAgdmFsdWVBID0gc29ydFZhbHVlKHZhbHVlQSwgYSk7XG4gICAgICB2YWx1ZUIgPSBzb3J0VmFsdWUodmFsdWVCLCBiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWVBID0gXy5pc0RlZmluZWQodmFsdWVBKSA/IHZhbHVlQSA6ICcnO1xuICAgICAgdmFsdWVCID0gXy5pc0RlZmluZWQodmFsdWVCKSA/IHZhbHVlQiA6ICcnO1xuICAgIH1cblxuICAgIGlmIChzb3J0RnVuYykge1xuICAgICAgcmVzdWx0ID0gc29ydEZ1bmModmFsdWVBLCB2YWx1ZUIsIHNvcnRPcmRlciwgZGF0YUZpZWxkLCBhLCBiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHNvcnRPcmRlciA9PT0gQ29uc3QuU09SVF9ERVNDKSB7XG4gICAgICAgIHJlc3VsdCA9IGNvbXBhcmF0b3IodmFsdWVBLCB2YWx1ZUIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gY29tcGFyYXRvcih2YWx1ZUIsIHZhbHVlQSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0pO1xuICByZXR1cm4gX2RhdGE7XG59O1xuXG5leHBvcnQgY29uc3QgbmV4dE9yZGVyID0gKFxuICBjdXJyZW50U29ydENvbHVtbixcbiAgeyBzb3J0T3JkZXIsIHNvcnRDb2x1bW4gfSxcbiAgZGVmYXVsdE9yZGVyID0gQ29uc3QuU09SVF9ERVNDXG4pID0+IHtcbiAgaWYgKCFzb3J0Q29sdW1uIHx8IGN1cnJlbnRTb3J0Q29sdW1uLmRhdGFGaWVsZCAhPT0gc29ydENvbHVtbi5kYXRhRmllbGQpIHJldHVybiBkZWZhdWx0T3JkZXI7XG4gIHJldHVybiBzb3J0T3JkZXIgPT09IENvbnN0LlNPUlRfREVTQyA/IENvbnN0LlNPUlRfQVNDIDogQ29uc3QuU09SVF9ERVNDO1xufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL3N0b3JlL3NvcnQuanMiLCJpbXBvcnQgQ29uc3QgZnJvbSAnLi4vY29uc3QnO1xuXG5leHBvcnQgY29uc3QgdHlwZUNvbnZlcnQgPSAodHlwZSwgdmFsdWUpID0+IHtcbiAgaWYgKHR5cGUgPT09IENvbnN0LlRZUEVfU1RSSU5HKSB7XG4gICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gQ29uc3QuVFlQRV9OVU1CRVIpIHtcbiAgICByZXR1cm4gTnVtYmVyKHZhbHVlKTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSBDb25zdC5UWVBFX0JPT0xFQU4pIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlID09PSAndHJ1ZSc7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gQ29uc3QuVFlQRV9EQVRFKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlKTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59O1xuXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9zdG9yZS90eXBlLmpzIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBFeHBhbnNpb25Db250ZXh0IGZyb20gJy4uL2NvbnRleHRzL3Jvdy1leHBhbmQtY29udGV4dCc7XG5cbmV4cG9ydCBkZWZhdWx0IENvbXBvbmVudCA9PiAoKSA9PiAoXG4gIDxFeHBhbnNpb25Db250ZXh0LkNvbnN1bWVyPlxuICAgIHsgZXhwYW5kUm93ID0+IDxDb21wb25lbnQgeyAuLi5leHBhbmRSb3cgfSAvPiB9XG4gIDwvRXhwYW5zaW9uQ29udGV4dC5Db25zdW1lcj5cbik7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9yb3ctZXhwYW5kL2V4cGFuZC1oZWFkZXItY2VsbC1jb25zdW1lci5qcyIsIi8qIGVzbGludCByZWFjdC9yZXF1aXJlLWRlZmF1bHQtcHJvcHM6IDAgKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG5pbXBvcnQgRmlsdGVyc0NlbGwgZnJvbSAnLi9maWx0ZXJzLWNlbGwnO1xuaW1wb3J0IENvbnN0IGZyb20gJy4vY29uc3QnO1xuaW1wb3J0IFJvd1RlbXBsYXRlIGZyb20gJy4vcm93L3Jvdy10ZW1wbGF0ZSc7XG5cbmNvbnN0IEZpbHRlcnMgPSAocHJvcHMpID0+IHtcbiAgY29uc3Qge1xuICAgIGNvbHVtbnMsXG4gICAgb25GaWx0ZXIsXG4gICAgY3VyckZpbHRlcnMsXG4gICAgZmlsdGVyUG9zaXRpb24sXG4gICAgb25FeHRlcm5hbEZpbHRlcixcbiAgICBjbGFzc05hbWUsXG4gICAgc2VsZWN0Um93LFxuICAgIGV4cGFuZFJvd1xuICB9ID0gcHJvcHM7XG5cbiAgZnVuY3Rpb24gcmVuZGVyQ29udGVudCgpIHtcbiAgICBjb25zdCBmaWx0ZXJDb2x1bW5zID0gW107XG4gICAgbGV0IHNob3dGaWx0ZXJzUm93ID0gZmFsc2U7XG5cbiAgICBjb2x1bW5zLmZvckVhY2goKGNvbHVtbiwgaSkgPT4ge1xuICAgICAgZmlsdGVyQ29sdW1ucy5wdXNoKDxGaWx0ZXJzQ2VsbFxuICAgICAgICBpbmRleD17IGkgfVxuICAgICAgICBrZXk9eyBjb2x1bW4uZGF0YUZpZWxkIH1cbiAgICAgICAgY29sdW1uPXsgY29sdW1uIH1cbiAgICAgICAgY3VyckZpbHRlcnM9eyBjdXJyRmlsdGVycyB9XG4gICAgICAgIG9uRXh0ZXJuYWxGaWx0ZXI9eyBvbkV4dGVybmFsRmlsdGVyIH1cbiAgICAgICAgb25GaWx0ZXI9eyBvbkZpbHRlciB9XG4gICAgICAvPik7XG5cbiAgICAgIGlmIChjb2x1bW4uZmlsdGVyUmVuZGVyZXIgfHwgY29sdW1uLmZpbHRlcikge1xuICAgICAgICBpZiAoIXNob3dGaWx0ZXJzUm93KSB7XG4gICAgICAgICAgc2hvd0ZpbHRlcnNSb3cgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGZpbHRlckNvbHVtbnM7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDx0Ym9keVxuICAgICAgY2xhc3NOYW1lPXsgY2xhc3NOYW1lIH1cbiAgICAgIHN0eWxlPXsge1xuICAgICAgICBkaXNwbGF5OlxuICAgICAgICBmaWx0ZXJQb3NpdGlvbiA9PT0gQ29uc3QuRklMVEVSU19QT1NJVElPTl9UT1BcbiAgICAgICAgICA/ICd0YWJsZS1oZWFkZXItZ3JvdXAnXG4gICAgICAgICAgOiAndGFibGUtZm9vdGVyLWdyb3VwJ1xuICAgICAgfSB9XG4gICAgPlxuICAgICAgPFJvd1RlbXBsYXRlXG4gICAgICAgIHJlbmRlckNvbnRlbnQ9eyByZW5kZXJDb250ZW50IH1cbiAgICAgICAgc2VsZWN0Um93PXsgc2VsZWN0Um93IH1cbiAgICAgICAgZXhwYW5kUm93PXsgZXhwYW5kUm93IH1cbiAgICAgICAgY2VsbEVsPVwidGRcIlxuICAgICAgLz5cbiAgICA8L3Rib2R5PlxuICApO1xufTtcblxuRmlsdGVycy5wcm9wVHlwZXMgPSB7XG4gIGNvbHVtbnM6IFByb3BUeXBlcy5hcnJheS5pc1JlcXVpcmVkLFxuICBvbkZpbHRlcjogUHJvcFR5cGVzLmZ1bmMsXG4gIGZpbHRlclBvc2l0aW9uOiBQcm9wVHlwZXMub25lT2YoW1xuICAgIENvbnN0LkZJTFRFUlNfUE9TSVRJT05fVE9QLFxuICAgIENvbnN0LkZJTFRFUlNfUE9TSVRJT05fSU5MSU5FLFxuICAgIENvbnN0LkZJTFRFUlNfUE9TSVRJT05fQk9UVE9NXG4gIF0pLFxuICBjdXJyRmlsdGVyczogUHJvcFR5cGVzLm9iamVjdCxcbiAgb25FeHRlcm5hbEZpbHRlcjogUHJvcFR5cGVzLmZ1bmMsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2VsZWN0Um93OiBQcm9wVHlwZXMub2JqZWN0LFxuICBleHBhbmRSb3c6IFByb3BUeXBlcy5vYmplY3Rcbn07XG5cbkZpbHRlcnMuZGVmYXVsdFByb3BzID0ge1xuICBwb3NpdGlvbjogQ29uc3QuRklMVEVSU19QT1NJVElPTl9UT1Bcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEZpbHRlcnM7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9maWx0ZXJzLmpzIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgXyBmcm9tICcuL3V0aWxzJztcblxuY29uc3QgRmlsdGVyc0NlbGwgPSAocHJvcHMpID0+IHtcbiAgY29uc3Qge1xuICAgIGluZGV4LCBjb2x1bW4sIG9uRXh0ZXJuYWxGaWx0ZXIsXG4gICAgY3VyckZpbHRlcnMsIG9uRmlsdGVyXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgeyBmaWx0ZXJSZW5kZXJlciwgZmlsdGVyIH0gPSBjb2x1bW47XG4gIGxldCBmaWx0ZXJFbG07XG4gIGNvbnN0IGNlbGxBdHRycyA9IHt9O1xuICBjb25zdCBjZWxsU3R5bGUgPSB7fTtcbiAgY2VsbEF0dHJzLnN0eWxlID0gY2VsbFN0eWxlO1xuICBpZiAoY29sdW1uLmhlYWRlckFsaWduKSB7XG4gICAgY2VsbFN0eWxlLnRleHRBbGlnbiA9IF8uaXNGdW5jdGlvbihjb2x1bW4uaGVhZGVyQWxpZ24pXG4gICAgICA/IGNvbHVtbi5oZWFkZXJBbGlnbihjb2x1bW4sIGluZGV4KVxuICAgICAgOiBjb2x1bW4uaGVhZGVyQWxpZ247XG4gIH1cbiAgaWYgKGNvbHVtbi5maWx0ZXJSZW5kZXJlcikge1xuICAgIGNvbnN0IG9uQ3VzdG9tRmlsdGVyID0gb25FeHRlcm5hbEZpbHRlcihjb2x1bW4sIGZpbHRlci5wcm9wcy50eXBlKTtcbiAgICBmaWx0ZXJFbG0gPSBmaWx0ZXJSZW5kZXJlcihvbkN1c3RvbUZpbHRlciwgY29sdW1uKTtcbiAgfSBlbHNlIGlmIChmaWx0ZXIpIHtcbiAgICBmaWx0ZXJFbG0gPSAoXG4gICAgICA8ZmlsdGVyLkZpbHRlclxuICAgICAgICB7IC4uLmZpbHRlci5wcm9wcyB9XG4gICAgICAgIGZpbHRlclN0YXRlPXsgY3VyckZpbHRlcnNbY29sdW1uLmRhdGFGaWVsZF0gfVxuICAgICAgICBvbkZpbHRlcj17IG9uRmlsdGVyIH1cbiAgICAgICAgY29sdW1uPXsgY29sdW1uIH1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudCgndGgnLCBjZWxsQXR0cnMsIGZpbHRlckVsbSk7XG59O1xuXG5GaWx0ZXJzQ2VsbC5wcm9wVHlwZXMgPSB7XG4gIGluZGV4OiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gIGNvbHVtbjogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICBjdXJyRmlsdGVyczogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICBvbkZpbHRlcjogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uRXh0ZXJuYWxGaWx0ZXI6IFByb3BUeXBlcy5mdW5jXG59O1xuXG5GaWx0ZXJzQ2VsbC5kZWZhdWx0UHJvcHMgPSB7XG4gIG9uRmlsdGVyOiAoKSA9PiB7IH0sXG4gIG9uRXh0ZXJuYWxGaWx0ZXI6ICgpID0+IHsgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgRmlsdGVyc0NlbGw7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9maWx0ZXJzLWNlbGwuanMiLCIvKiBlc2xpbnQgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzOiAwICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuY29uc3QgQ2FwdGlvbiA9IChwcm9wcykgPT4ge1xuICBpZiAoIXByb3BzLmNoaWxkcmVuKSByZXR1cm4gbnVsbDtcblxuICBjb25zdCBjYXB0aW9uID0gcHJvcHMuYm9vdHN0cmFwNCA/IChcbiAgICA8Y2FwdGlvbiBzdHlsZT17IHsgY2FwdGlvblNpZGU6ICd0b3AnIH0gfT57cHJvcHMuY2hpbGRyZW59PC9jYXB0aW9uPlxuICApIDogKFxuICAgIDxjYXB0aW9uPntwcm9wcy5jaGlsZHJlbn08L2NhcHRpb24+XG4gICk7XG5cbiAgcmV0dXJuIGNhcHRpb247XG59O1xuXG5DYXB0aW9uLnByb3BUeXBlcyA9IHtcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5vbmVPZlR5cGUoW1xuICAgIFByb3BUeXBlcy5ub2RlLFxuICAgIFByb3BUeXBlcy5zdHJpbmdcbiAgXSksXG4gIGJvb3RzdHJhcDQ6IFByb3BUeXBlcy5ib29sXG59O1xuXG5leHBvcnQgZGVmYXVsdCBDYXB0aW9uO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9zcmMvY2FwdGlvbi5qcyIsIi8qIGVzbGludCByZWFjdC9wcm9wLXR5cGVzOiAwICovXG4vKiBlc2xpbnQgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzOiAwICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG5pbXBvcnQgXyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBTaW1wbGVSb3cgZnJvbSAnLi9yb3cvc2ltcGxlLXJvdyc7XG5pbXBvcnQgUm93QWdncmVnYXRvciBmcm9tICcuL3Jvdy9hZ2dyZWdhdGUtcm93JztcbmltcG9ydCBSb3dTZWN0aW9uIGZyb20gJy4vcm93L3Jvdy1zZWN0aW9uJztcbmltcG9ydCBDb25zdCBmcm9tICcuL2NvbnN0JztcbmltcG9ydCB3aXRoUm93U2VsZWN0aW9uIGZyb20gJy4vcm93LXNlbGVjdGlvbi9yb3ctY29uc3VtZXInO1xuaW1wb3J0IHdpdGhSb3dFeHBhbnNpb24gZnJvbSAnLi9yb3ctZXhwYW5kL3Jvdy1jb25zdW1lcic7XG5cbmNsYXNzIEJvZHkgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICBjb25zdCB7XG4gICAgICBrZXlGaWVsZCxcbiAgICAgIGNlbGxFZGl0LFxuICAgICAgc2VsZWN0Um93LFxuICAgICAgZXhwYW5kUm93XG4gICAgfSA9IHByb3BzO1xuXG4gICAgLy8gQ29uc3RydWN0IEVkaXRpbmcgQ2VsbCBDb21wb25lbnRcbiAgICBpZiAoY2VsbEVkaXQuY3JlYXRlQ29udGV4dCkge1xuICAgICAgdGhpcy5FZGl0aW5nQ2VsbCA9IGNlbGxFZGl0LmNyZWF0ZUVkaXRpbmdDZWxsKF8sIGNlbGxFZGl0Lm9wdGlvbnMub25TdGFydEVkaXQpO1xuICAgIH1cblxuICAgIC8vIENvbnN0cnVjdCBSb3cgQ29tcG9uZW50XG4gICAgbGV0IFJvd0NvbXBvbmVudCA9IFNpbXBsZVJvdztcbiAgICBjb25zdCBzZWxlY3RSb3dFbmFibGVkID0gc2VsZWN0Um93Lm1vZGUgIT09IENvbnN0LlJPV19TRUxFQ1RfRElTQUJMRUQ7XG4gICAgY29uc3QgZXhwYW5kUm93RW5hYmxlZCA9ICEhZXhwYW5kUm93LnJlbmRlcmVyO1xuXG4gICAgaWYgKGV4cGFuZFJvd0VuYWJsZWQpIHtcbiAgICAgIFJvd0NvbXBvbmVudCA9IHdpdGhSb3dFeHBhbnNpb24oUm93QWdncmVnYXRvcik7XG4gICAgfVxuXG4gICAgaWYgKHNlbGVjdFJvd0VuYWJsZWQpIHtcbiAgICAgIFJvd0NvbXBvbmVudCA9IHdpdGhSb3dTZWxlY3Rpb24oZXhwYW5kUm93RW5hYmxlZCA/IFJvd0NvbXBvbmVudCA6IFJvd0FnZ3JlZ2F0b3IpO1xuICAgIH1cblxuICAgIGlmIChjZWxsRWRpdC5jcmVhdGVDb250ZXh0KSB7XG4gICAgICBSb3dDb21wb25lbnQgPSBjZWxsRWRpdC53aXRoUm93TGV2ZWxDZWxsRWRpdChSb3dDb21wb25lbnQsIHNlbGVjdFJvd0VuYWJsZWQsIGtleUZpZWxkLCBfKTtcbiAgICB9XG4gICAgdGhpcy5Sb3dDb21wb25lbnQgPSBSb3dDb21wb25lbnQ7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgY29sdW1ucyxcbiAgICAgIGRhdGEsXG4gICAgICB0YWJJbmRleENlbGwsXG4gICAgICBrZXlGaWVsZCxcbiAgICAgIGlzRW1wdHksXG4gICAgICBub0RhdGFJbmRpY2F0aW9uLFxuICAgICAgdmlzaWJsZUNvbHVtblNpemUsXG4gICAgICBjZWxsRWRpdCxcbiAgICAgIHNlbGVjdFJvdyxcbiAgICAgIHJvd1N0eWxlLFxuICAgICAgcm93Q2xhc3NlcyxcbiAgICAgIHJvd0V2ZW50cyxcbiAgICAgIGV4cGFuZFJvdyxcbiAgICAgIGNsYXNzTmFtZVxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgbGV0IGNvbnRlbnQ7XG5cbiAgICBpZiAoaXNFbXB0eSkge1xuICAgICAgY29uc3QgaW5kaWNhdGlvbiA9IF8uaXNGdW5jdGlvbihub0RhdGFJbmRpY2F0aW9uKSA/IG5vRGF0YUluZGljYXRpb24oKSA6IG5vRGF0YUluZGljYXRpb247XG4gICAgICBpZiAoIWluZGljYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb250ZW50ID0gPFJvd1NlY3Rpb24gY29udGVudD17IGluZGljYXRpb24gfSBjb2xTcGFuPXsgdmlzaWJsZUNvbHVtblNpemUgfSAvPjtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc2VsZWN0Um93RW5hYmxlZCA9IHNlbGVjdFJvdy5tb2RlICE9PSBDb25zdC5ST1dfU0VMRUNUX0RJU0FCTEVEO1xuICAgICAgY29uc3QgZXhwYW5kUm93RW5hYmxlZCA9ICEhZXhwYW5kUm93LnJlbmRlcmVyO1xuXG4gICAgICBjb25zdCBhZGRpdGlvbmFsUm93UHJvcHMgPSB7fTtcblxuICAgICAgaWYgKGNlbGxFZGl0LmNyZWF0ZUNvbnRleHQpIHtcbiAgICAgICAgYWRkaXRpb25hbFJvd1Byb3BzLkVkaXRpbmdDZWxsQ29tcG9uZW50ID0gdGhpcy5FZGl0aW5nQ2VsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHNlbGVjdFJvd0VuYWJsZWQgfHwgZXhwYW5kUm93RW5hYmxlZCkge1xuICAgICAgICBhZGRpdGlvbmFsUm93UHJvcHMuZXhwYW5kUm93ID0gZXhwYW5kUm93O1xuICAgICAgICBhZGRpdGlvbmFsUm93UHJvcHMuc2VsZWN0Um93ID0gc2VsZWN0Um93O1xuICAgICAgfVxuXG4gICAgICBjb250ZW50ID0gZGF0YS5tYXAoKHJvdywgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3Qga2V5ID0gXy5nZXQocm93LCBrZXlGaWVsZCk7XG4gICAgICAgIGNvbnN0IGJhc2VSb3dQcm9wcyA9IHtcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgcm93LFxuICAgICAgICAgIHRhYkluZGV4Q2VsbCxcbiAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgIGtleUZpZWxkLFxuICAgICAgICAgIGNlbGxFZGl0LFxuICAgICAgICAgIHZhbHVlOiBrZXksXG4gICAgICAgICAgcm93SW5kZXg6IGluZGV4LFxuICAgICAgICAgIHZpc2libGVDb2x1bW5TaXplLFxuICAgICAgICAgIGF0dHJzOiByb3dFdmVudHMgfHwge30sXG4gICAgICAgICAgLi4uYWRkaXRpb25hbFJvd1Byb3BzXG4gICAgICAgIH07XG5cbiAgICAgICAgYmFzZVJvd1Byb3BzLnN0eWxlID0gXy5pc0Z1bmN0aW9uKHJvd1N0eWxlKSA/IHJvd1N0eWxlKHJvdywgaW5kZXgpIDogcm93U3R5bGU7XG4gICAgICAgIGJhc2VSb3dQcm9wcy5jbGFzc05hbWUgPSAoXy5pc0Z1bmN0aW9uKHJvd0NsYXNzZXMpID8gcm93Q2xhc3Nlcyhyb3csIGluZGV4KSA6IHJvd0NsYXNzZXMpO1xuXG4gICAgICAgIHJldHVybiA8dGhpcy5Sb3dDb21wb25lbnQgeyAuLi5iYXNlUm93UHJvcHMgfSAvPjtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8dGJvZHkgY2xhc3NOYW1lPXsgY2xhc3NOYW1lIH0+eyBjb250ZW50IH08L3Rib2R5PlxuICAgICk7XG4gIH1cbn1cblxuQm9keS5wcm9wVHlwZXMgPSB7XG4gIGtleUZpZWxkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGRhdGE6IFByb3BUeXBlcy5hcnJheS5pc1JlcXVpcmVkLFxuICBjb2x1bW5zOiBQcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZCxcbiAgc2VsZWN0Um93OiBQcm9wVHlwZXMub2JqZWN0XG59O1xuXG5leHBvcnQgZGVmYXVsdCBCb2R5O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9zcmMvYm9keS5qcyIsIi8qIGVzbGludCByZWFjdC9wcm9wLXR5cGVzOiAwICovXG4vKiBlc2xpbnQgcmVhY3Qvbm8tYXJyYXktaW5kZXgta2V5OiAwICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuaW1wb3J0IFJvd1B1cmVDb250ZW50IGZyb20gJy4vcm93LXB1cmUtY29udGVudCc7XG5pbXBvcnQgZXZlbnREZWxlZ2F0ZXIgZnJvbSAnLi9ldmVudC1kZWxlZ2F0ZXInO1xuaW1wb3J0IHNob3VsZFVwZGF0ZXIgZnJvbSAnLi9zaG91bGQtdXBkYXRlcic7XG5cbmNsYXNzIFNpbXBsZVJvdyBleHRlbmRzIHNob3VsZFVwZGF0ZXIoZXZlbnREZWxlZ2F0ZXIoQ29tcG9uZW50KSkge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnNob3VsZFVwZGF0ZVJvd0NvbnRlbnQgPSBmYWxzZTtcbiAgfVxuXG4gIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMpIHtcbiAgICB0aGlzLnNob3VsZFVwZGF0ZVJvd0NvbnRlbnQgPSBmYWxzZTtcbiAgICB0aGlzLnNob3VsZFVwZGF0ZVJvd0NvbnRlbnQgPSB0aGlzLnNob3VsZFJvd0NvbnRlbnRVcGRhdGUobmV4dFByb3BzKTtcbiAgICBpZiAodGhpcy5zaG91bGRVcGRhdGVSb3dDb250ZW50KSByZXR1cm4gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzLnNob3VsZFVwZGF0ZWRCeVNlbGZQcm9wcyhuZXh0UHJvcHMpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIHN0eWxlLFxuICAgICAgYXR0cnMsXG4gICAgICB2aXNpYmxlQ29sdW1uU2l6ZSxcbiAgICAgIHRhYkluZGV4Q2VsbCxcbiAgICAgIC4uLnJlc3RcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB0ckF0dHJzID0gdGhpcy5kZWxlZ2F0ZShhdHRycyk7XG4gICAgY29uc3QgdGFiSW5kZXhTdGFydCA9ICh0aGlzLnByb3BzLnJvd0luZGV4ICogdmlzaWJsZUNvbHVtblNpemUpICsgMTtcblxuICAgIHJldHVybiAoXG4gICAgICA8dHIgc3R5bGU9eyBzdHlsZSB9IGNsYXNzTmFtZT17IGNsYXNzTmFtZSB9IHsgLi4udHJBdHRycyB9PlxuICAgICAgICA8Um93UHVyZUNvbnRlbnRcbiAgICAgICAgICBzaG91bGRVcGRhdGU9eyB0aGlzLnNob3VsZFVwZGF0ZVJvd0NvbnRlbnQgfVxuICAgICAgICAgIHRhYkluZGV4U3RhcnQ9eyB0YWJJbmRleENlbGwgPyB0YWJJbmRleFN0YXJ0IDogLTEgfVxuICAgICAgICAgIHsgLi4ucmVzdCB9XG4gICAgICAgIC8+XG4gICAgICA8L3RyPlxuICAgICk7XG4gIH1cbn1cblxuU2ltcGxlUm93LnByb3BUeXBlcyA9IHtcbiAgcm93OiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gIHJvd0luZGV4OiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gIGNvbHVtbnM6IFByb3BUeXBlcy5hcnJheS5pc1JlcXVpcmVkLFxuICBzdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBhdHRyczogUHJvcFR5cGVzLm9iamVjdFxufTtcblxuU2ltcGxlUm93LmRlZmF1bHRQcm9wcyA9IHtcbiAgZWRpdGFibGU6IHRydWUsXG4gIHN0eWxlOiB7fSxcbiAgY2xhc3NOYW1lOiBudWxsLFxuICBhdHRyczoge31cbn07XG5cbmV4cG9ydCBkZWZhdWx0IFNpbXBsZVJvdztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL3Jvdy9zaW1wbGUtcm93LmpzIiwiLyogZXNsaW50IHJlYWN0L3Byb3AtdHlwZXM6IDAgKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG5pbXBvcnQgZXZlbnREZWxlZ2F0ZXIgZnJvbSAnLi9jZWxsLWV2ZW50LWRlbGVnYXRlcic7XG5pbXBvcnQgXyBmcm9tICcuL3V0aWxzJztcblxuY2xhc3MgQ2VsbCBleHRlbmRzIGV2ZW50RGVsZWdhdGVyKENvbXBvbmVudCkge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmNyZWF0ZUhhbmRsZUVkaXRpbmdDZWxsID0gdGhpcy5jcmVhdGVIYW5kbGVFZGl0aW5nQ2VsbC5iaW5kKHRoaXMpO1xuICB9XG5cbiAgc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcykge1xuICAgIGxldCBzaG91bGRVcGRhdGUgPSBmYWxzZTtcbiAgICBpZiAobmV4dFByb3BzLmNvbHVtbi5pc0R1bW15RmllbGQpIHtcbiAgICAgIHNob3VsZFVwZGF0ZSA9ICFfLmlzRXF1YWwodGhpcy5wcm9wcy5yb3csIG5leHRQcm9wcy5yb3cpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzaG91bGRVcGRhdGUgPVxuICAgICAgICBfLmdldCh0aGlzLnByb3BzLnJvdywgdGhpcy5wcm9wcy5jb2x1bW4uZGF0YUZpZWxkKVxuICAgICAgICAgICE9PSBfLmdldChuZXh0UHJvcHMucm93LCBuZXh0UHJvcHMuY29sdW1uLmRhdGFGaWVsZCk7XG4gICAgfVxuXG4gICAgaWYgKHNob3VsZFVwZGF0ZSkgcmV0dXJuIHRydWU7XG5cbiAgICAvLyBpZiAobmV4dFByb3BzLmZvcm1hdHRlcilcblxuICAgIHNob3VsZFVwZGF0ZSA9XG4gICAgICAobmV4dFByb3BzLmNvbHVtbi5mb3JtYXR0ZXIgPyAhXy5pc0VxdWFsKHRoaXMucHJvcHMucm93LCBuZXh0UHJvcHMucm93KSA6IGZhbHNlKSB8fFxuICAgICAgdGhpcy5wcm9wcy5jb2x1bW4uaGlkZGVuICE9PSBuZXh0UHJvcHMuY29sdW1uLmhpZGRlbiB8fFxuICAgICAgdGhpcy5wcm9wcy5jb2x1bW4uaXNEdW1teUZpZWxkICE9PSBuZXh0UHJvcHMuY29sdW1uLmlzRHVtbXlGaWVsZCB8fFxuICAgICAgdGhpcy5wcm9wcy5yb3dJbmRleCAhPT0gbmV4dFByb3BzLnJvd0luZGV4IHx8XG4gICAgICB0aGlzLnByb3BzLmNvbHVtbkluZGV4ICE9PSBuZXh0UHJvcHMuY29sdW1uSW5kZXggfHxcbiAgICAgIHRoaXMucHJvcHMuY2xhc3NOYW1lICE9PSBuZXh0UHJvcHMuY2xhc3NOYW1lIHx8XG4gICAgICB0aGlzLnByb3BzLnRpdGxlICE9PSBuZXh0UHJvcHMudGl0bGUgfHxcbiAgICAgIHRoaXMucHJvcHMuZWRpdGFibGUgIT09IG5leHRQcm9wcy5lZGl0YWJsZSB8fFxuICAgICAgdGhpcy5wcm9wcy5jbGlja1RvRWRpdCAhPT0gbmV4dFByb3BzLmNsaWNrVG9FZGl0IHx8XG4gICAgICB0aGlzLnByb3BzLmRiY2xpY2tUb0VkaXQgIT09IG5leHRQcm9wcy5kYmNsaWNrVG9FZGl0IHx8XG4gICAgICAhXy5pc0VxdWFsKHRoaXMucHJvcHMuc3R5bGUsIG5leHRQcm9wcy5zdHlsZSkgfHxcbiAgICAgICFfLmlzRXF1YWwodGhpcy5wcm9wcy5jb2x1bW4uZm9ybWF0RXh0cmFEYXRhLCBuZXh0UHJvcHMuY29sdW1uLmZvcm1hdEV4dHJhRGF0YSkgfHxcbiAgICAgICFfLmlzRXF1YWwodGhpcy5wcm9wcy5jb2x1bW4uZXZlbnRzLCBuZXh0UHJvcHMuY29sdW1uLmV2ZW50cykgfHxcbiAgICAgICFfLmlzRXF1YWwodGhpcy5wcm9wcy5jb2x1bW4uYXR0cnMsIG5leHRQcm9wcy5jb2x1bW4uYXR0cnMpIHx8XG4gICAgICB0aGlzLnByb3BzLnRhYkluZGV4ICE9PSBuZXh0UHJvcHMudGFiSW5kZXg7XG4gICAgcmV0dXJuIHNob3VsZFVwZGF0ZTtcbiAgfVxuXG4gIGNyZWF0ZUhhbmRsZUVkaXRpbmdDZWxsID0gb3JpZ2luRnVuYyA9PiAoZSkgPT4ge1xuICAgIGNvbnN0IHsgb25TdGFydCwgcm93SW5kZXgsIGNvbHVtbkluZGV4LCBjbGlja1RvRWRpdCwgZGJjbGlja1RvRWRpdCB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoKGNsaWNrVG9FZGl0IHx8IGRiY2xpY2tUb0VkaXQpICYmIF8uaXNGdW5jdGlvbihvcmlnaW5GdW5jKSkge1xuICAgICAgb3JpZ2luRnVuYyhlKTtcbiAgICB9XG4gICAgaWYgKG9uU3RhcnQpIHtcbiAgICAgIG9uU3RhcnQocm93SW5kZXgsIGNvbHVtbkluZGV4KTtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgcm93LFxuICAgICAgcm93SW5kZXgsXG4gICAgICBjb2x1bW4sXG4gICAgICBjb2x1bW5JbmRleCxcbiAgICAgIG9uU3RhcnQsXG4gICAgICBlZGl0YWJsZSxcbiAgICAgIGNsaWNrVG9FZGl0LFxuICAgICAgZGJjbGlja1RvRWRpdCxcbiAgICAgIC4uLnJlc3RcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7XG4gICAgICBkYXRhRmllbGQsXG4gICAgICBmb3JtYXR0ZXIsXG4gICAgICBmb3JtYXRFeHRyYURhdGFcbiAgICB9ID0gY29sdW1uO1xuICAgIGNvbnN0IGF0dHJzID0gdGhpcy5kZWxlZ2F0ZSh7IC4uLnJlc3QgfSk7XG4gICAgbGV0IGNvbnRlbnQgPSBjb2x1bW4uaXNEdW1teUZpZWxkID8gbnVsbCA6IF8uZ2V0KHJvdywgZGF0YUZpZWxkKTtcblxuICAgIGlmIChmb3JtYXR0ZXIpIHtcbiAgICAgIGNvbnRlbnQgPSBjb2x1bW4uZm9ybWF0dGVyKGNvbnRlbnQsIHJvdywgcm93SW5kZXgsIGZvcm1hdEV4dHJhRGF0YSk7XG4gICAgfVxuXG4gICAgaWYgKGNsaWNrVG9FZGl0ICYmIGVkaXRhYmxlKSB7XG4gICAgICBhdHRycy5vbkNsaWNrID0gdGhpcy5jcmVhdGVIYW5kbGVFZGl0aW5nQ2VsbChhdHRycy5vbkNsaWNrKTtcbiAgICB9IGVsc2UgaWYgKGRiY2xpY2tUb0VkaXQgJiYgZWRpdGFibGUpIHtcbiAgICAgIGF0dHJzLm9uRG91YmxlQ2xpY2sgPSB0aGlzLmNyZWF0ZUhhbmRsZUVkaXRpbmdDZWxsKGF0dHJzLm9uRG91YmxlQ2xpY2spO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8dGQgeyAuLi5hdHRycyB9PlxuICAgICAgICB7IHR5cGVvZiBjb250ZW50ID09PSAnYm9vbGVhbicgPyBgJHtjb250ZW50fWAgOiBjb250ZW50IH1cbiAgICAgIDwvdGQ+XG4gICAgKTtcbiAgfVxufVxuXG5DZWxsLnByb3BUeXBlcyA9IHtcbiAgcm93OiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gIHJvd0luZGV4OiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gIGNvbHVtbjogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICBjb2x1bW5JbmRleDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkXG59O1xuXG5leHBvcnQgZGVmYXVsdCBDZWxsO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9zcmMvY2VsbC5qcyIsIi8qIGVzbGludCBjbGFzcy1tZXRob2RzLXVzZS10aGlzOiAwICovXG4vKiBlc2xpbnQgcmVhY3QvcHJvcC10eXBlczogMCAqL1xuLyogZXNsaW50IG5vLXBsdXNwbHVzOiAwICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBfIGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCBFeHBhbmRDZWxsIGZyb20gJy4uL3Jvdy1leHBhbmQvZXhwYW5kLWNlbGwnO1xuaW1wb3J0IFNlbGVjdGlvbkNlbGwgZnJvbSAnLi4vcm93LXNlbGVjdGlvbi9zZWxlY3Rpb24tY2VsbCc7XG5pbXBvcnQgc2hvdWxkVXBkYXRlciBmcm9tICcuL3Nob3VsZC11cGRhdGVyJztcbmltcG9ydCBldmVudERlbGVnYXRlciBmcm9tICcuL2V2ZW50LWRlbGVnYXRlcic7XG5pbXBvcnQgUm93UHVyZUNvbnRlbnQgZnJvbSAnLi9yb3ctcHVyZS1jb250ZW50JztcbmltcG9ydCBDb25zdCBmcm9tICcuLi9jb25zdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJvd0FnZ3JlZ2F0b3IgZXh0ZW5kcyBzaG91bGRVcGRhdGVyKGV2ZW50RGVsZWdhdGVyKFJlYWN0LkNvbXBvbmVudCkpIHtcbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICBhdHRyczogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBzdHlsZTogUHJvcFR5cGVzLm9iamVjdFxuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICBhdHRyczoge30sXG4gICAgc3R5bGU6IHt9XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmNsaWNrTnVtID0gMDtcbiAgICB0aGlzLnNob3VsZFVwZGF0ZVJvd0NvbnRlbnQgPSBmYWxzZTtcbiAgICB0aGlzLmNyZWF0ZUNsaWNrRXZlbnRIYW5kbGVyID0gdGhpcy5jcmVhdGVDbGlja0V2ZW50SGFuZGxlci5iaW5kKHRoaXMpO1xuICB9XG5cbiAgc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcykge1xuICAgIGlmIChcbiAgICAgIHRoaXMucHJvcHMuc2VsZWN0ZWQgIT09IG5leHRQcm9wcy5zZWxlY3RlZCB8fFxuICAgICAgdGhpcy5wcm9wcy5leHBhbmRlZCAhPT0gbmV4dFByb3BzLmV4cGFuZGVkIHx8XG4gICAgICB0aGlzLnByb3BzLmV4cGFuZGFibGUgIT09IG5leHRQcm9wcy5leHBhbmRhYmxlIHx8XG4gICAgICB0aGlzLnByb3BzLnNlbGVjdGFibGUgIT09IG5leHRQcm9wcy5zZWxlY3RhYmxlIHx8XG4gICAgICB0aGlzLnByb3BzLnNlbGVjdFJvdy5oaWRlU2VsZWN0Q29sdW1uICE9PSBuZXh0UHJvcHMuc2VsZWN0Um93LmhpZGVTZWxlY3RDb2x1bW4gfHxcbiAgICAgIHRoaXMuc2hvdWxkVXBkYXRlZEJ5U2VsZlByb3BzKG5leHRQcm9wcylcbiAgICApIHtcbiAgICAgIHRoaXMuc2hvdWxkVXBkYXRlUm93Q29udGVudCA9IHRoaXMuc2hvdWxkUm93Q29udGVudFVwZGF0ZShuZXh0UHJvcHMpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHRoaXMuc2hvdWxkVXBkYXRlUm93Q29udGVudCA9IHRoaXMuc2hvdWxkUm93Q29udGVudFVwZGF0ZShuZXh0UHJvcHMpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2hvdWxkVXBkYXRlUm93Q29udGVudDtcbiAgfVxuXG4gIGlzUmVuZGVyRnVuY3Rpb25Db2x1bW5JbkxlZnQoXG4gICAgcG9zaXRpb24gPSBDb25zdC5JTkRJQ0FUT1JfUE9TSVRJT05fTEVGVFxuICApIHtcbiAgICByZXR1cm4gcG9zaXRpb24gPT09IENvbnN0LklORElDQVRPUl9QT1NJVElPTl9MRUZUO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHJvdyxcbiAgICAgIGNvbHVtbnMsXG4gICAgICBrZXlGaWVsZCxcbiAgICAgIHJvd0luZGV4LFxuICAgICAgc3R5bGUsXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBhdHRycyxcbiAgICAgIHNlbGVjdFJvdyxcbiAgICAgIGV4cGFuZFJvdyxcbiAgICAgIGV4cGFuZGVkLFxuICAgICAgZXhwYW5kYWJsZSxcbiAgICAgIHNlbGVjdGVkLFxuICAgICAgc2VsZWN0YWJsZSxcbiAgICAgIHZpc2libGVDb2x1bW5TaXplLFxuICAgICAgdGFiSW5kZXhDZWxsLFxuICAgICAgLi4ucmVzdFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGtleSA9IF8uZ2V0KHJvdywga2V5RmllbGQpO1xuICAgIGNvbnN0IHsgaGlkZVNlbGVjdENvbHVtbiwgc2VsZWN0Q29sdW1uUG9zaXRpb24sIGNsaWNrVG9TZWxlY3QgfSA9IHNlbGVjdFJvdztcbiAgICBjb25zdCB7IHNob3dFeHBhbmRDb2x1bW4sIGV4cGFuZENvbHVtblBvc2l0aW9uIH0gPSBleHBhbmRSb3c7XG5cbiAgICBjb25zdCBuZXdBdHRycyA9IHRoaXMuZGVsZWdhdGUoeyAuLi5hdHRycyB9KTtcbiAgICBpZiAoY2xpY2tUb1NlbGVjdCB8fCAhIWV4cGFuZFJvdy5yZW5kZXJlcikge1xuICAgICAgbmV3QXR0cnMub25DbGljayA9IHRoaXMuY3JlYXRlQ2xpY2tFdmVudEhhbmRsZXIobmV3QXR0cnMub25DbGljayk7XG4gICAgfVxuXG4gICAgbGV0IHRhYkluZGV4U3RhcnQgPSAocm93SW5kZXggKiB2aXNpYmxlQ29sdW1uU2l6ZSkgKyAxO1xuXG4gICAgY29uc3QgY2hpbGRyZW5zID0gWyhcbiAgICAgIDxSb3dQdXJlQ29udGVudFxuICAgICAgICBrZXk9XCJyb3dcIlxuICAgICAgICByb3c9eyByb3cgfVxuICAgICAgICBjb2x1bW5zPXsgY29sdW1ucyB9XG4gICAgICAgIGtleUZpZWxkPXsga2V5RmllbGQgfVxuICAgICAgICByb3dJbmRleD17IHJvd0luZGV4IH1cbiAgICAgICAgc2hvdWxkVXBkYXRlPXsgdGhpcy5zaG91bGRVcGRhdGVSb3dDb250ZW50IH1cbiAgICAgICAgdGFiSW5kZXhTdGFydD17IHRhYkluZGV4Q2VsbCA/IHRhYkluZGV4U3RhcnQgOiAtMSB9XG4gICAgICAgIHsgLi4ucmVzdCB9XG4gICAgICAvPlxuICAgICldO1xuXG4gICAgaWYgKCFoaWRlU2VsZWN0Q29sdW1uKSB7XG4gICAgICBjb25zdCBzZWxlY3RDZWxsID0gKFxuICAgICAgICA8U2VsZWN0aW9uQ2VsbFxuICAgICAgICAgIHsgLi4uc2VsZWN0Um93IH1cbiAgICAgICAgICBrZXk9XCJzZWxlY3Rpb24tY2VsbFwiXG4gICAgICAgICAgcm93S2V5PXsga2V5IH1cbiAgICAgICAgICByb3dJbmRleD17IHJvd0luZGV4IH1cbiAgICAgICAgICBzZWxlY3RlZD17IHNlbGVjdGVkIH1cbiAgICAgICAgICBkaXNhYmxlZD17ICFzZWxlY3RhYmxlIH1cbiAgICAgICAgICB0YWJJbmRleD17IHRhYkluZGV4Q2VsbCA/IHRhYkluZGV4U3RhcnQrKyA6IC0xIH1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgICBpZiAodGhpcy5pc1JlbmRlckZ1bmN0aW9uQ29sdW1uSW5MZWZ0KHNlbGVjdENvbHVtblBvc2l0aW9uKSkge1xuICAgICAgICBjaGlsZHJlbnMudW5zaGlmdChzZWxlY3RDZWxsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoaWxkcmVucy5wdXNoKHNlbGVjdENlbGwpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzaG93RXhwYW5kQ29sdW1uKSB7XG4gICAgICBjb25zdCBleHBhbmRDZWxsID0gKFxuICAgICAgICA8RXhwYW5kQ2VsbFxuICAgICAgICAgIHsgLi4uZXhwYW5kUm93IH1cbiAgICAgICAgICBrZXk9XCJleHBhbmQtY2VsbFwiXG4gICAgICAgICAgcm93S2V5PXsga2V5IH1cbiAgICAgICAgICByb3dJbmRleD17IHJvd0luZGV4IH1cbiAgICAgICAgICBleHBhbmRlZD17IGV4cGFuZGVkIH1cbiAgICAgICAgICBleHBhbmRhYmxlPXsgZXhwYW5kYWJsZSB9XG4gICAgICAgICAgdGFiSW5kZXg9eyB0YWJJbmRleENlbGwgPyB0YWJJbmRleFN0YXJ0KysgOiAtMSB9XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgICAgaWYgKHRoaXMuaXNSZW5kZXJGdW5jdGlvbkNvbHVtbkluTGVmdChleHBhbmRDb2x1bW5Qb3NpdGlvbikpIHtcbiAgICAgICAgY2hpbGRyZW5zLnVuc2hpZnQoZXhwYW5kQ2VsbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGlsZHJlbnMucHVzaChleHBhbmRDZWxsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPHRyXG4gICAgICAgIHN0eWxlPXsgc3R5bGUgfVxuICAgICAgICBjbGFzc05hbWU9eyBjbGFzc05hbWUgfVxuICAgICAgICB7IC4uLm5ld0F0dHJzIH1cbiAgICAgID5cbiAgICAgICAgeyBjaGlsZHJlbnMgfVxuICAgICAgPC90cj5cbiAgICApO1xuICB9XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9yb3cvYWdncmVnYXRlLXJvdy5qcyIsIi8qIGVzbGludFxuICByZWFjdC9yZXF1aXJlLWRlZmF1bHQtcHJvcHM6IDBcbiAganN4LWExMXkvbm8tbm9uaW50ZXJhY3RpdmUtZWxlbWVudC1pbnRlcmFjdGlvbnM6IDBcbiovXG4vKiBlc2xpbnQgbm8tbmVzdGVkLXRlcm5hcnk6IDAgKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFeHBhbmRDZWxsIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICByb3dLZXk6IFByb3BUeXBlcy5hbnksXG4gICAgZXhwYW5kZWQ6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gICAgZXhwYW5kYWJsZTogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgICBvblJvd0V4cGFuZDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBleHBhbmRDb2x1bW5SZW5kZXJlcjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgcm93SW5kZXg6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgdGFiSW5kZXg6IFByb3BUeXBlcy5udW1iZXJcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5oYW5kbGVDbGljayA9IHRoaXMuaGFuZGxlQ2xpY2suYmluZCh0aGlzKTtcbiAgfVxuXG4gIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMpIHtcbiAgICBjb25zdCBzaG91bGRVcGRhdGUgPVxuICAgICAgdGhpcy5wcm9wcy5yb3dJbmRleCAhPT0gbmV4dFByb3BzLnJvd0luZGV4IHx8XG4gICAgICB0aGlzLnByb3BzLmV4cGFuZGVkICE9PSBuZXh0UHJvcHMuZXhwYW5kZWQgfHxcbiAgICAgIHRoaXMucHJvcHMucm93S2V5ICE9PSBuZXh0UHJvcHMucm93S2V5IHx8XG4gICAgICB0aGlzLnByb3BzLnRhYkluZGV4ICE9PSBuZXh0UHJvcHMudGFiSW5kZXg7XG5cbiAgICByZXR1cm4gc2hvdWxkVXBkYXRlO1xuICB9XG5cbiAgaGFuZGxlQ2xpY2soZSkge1xuICAgIGNvbnN0IHsgcm93S2V5LCBleHBhbmRlZCwgb25Sb3dFeHBhbmQsIHJvd0luZGV4IH0gPSB0aGlzLnByb3BzO1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgb25Sb3dFeHBhbmQocm93S2V5LCAhZXhwYW5kZWQsIHJvd0luZGV4LCBlKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IGV4cGFuZGVkLCBleHBhbmRhYmxlLCBleHBhbmRDb2x1bW5SZW5kZXJlciwgdGFiSW5kZXgsIHJvd0tleSB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBhdHRycyA9IHt9O1xuICAgIGlmICh0YWJJbmRleCAhPT0gLTEpIGF0dHJzLnRhYkluZGV4ID0gdGFiSW5kZXg7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPHRkIGNsYXNzTmFtZT1cImV4cGFuZC1jZWxsXCIgb25DbGljaz17IHRoaXMuaGFuZGxlQ2xpY2sgfSB7IC4uLmF0dHJzIH0+XG4gICAgICAgIHtcbiAgICAgICAgICBleHBhbmRDb2x1bW5SZW5kZXJlciA/IGV4cGFuZENvbHVtblJlbmRlcmVyKHtcbiAgICAgICAgICAgIGV4cGFuZGFibGUsXG4gICAgICAgICAgICBleHBhbmRlZCxcbiAgICAgICAgICAgIHJvd0tleVxuICAgICAgICAgIH0pIDogKGV4cGFuZGFibGUgPyAoZXhwYW5kZWQgPyAnKC0pJyA6ICcoKyknKSA6ICcnKVxuICAgICAgICB9XG4gICAgICA8L3RkPlxuICAgICk7XG4gIH1cbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL3Jvdy1leHBhbmQvZXhwYW5kLWNlbGwuanMiLCIvKiBlc2xpbnRcbiAgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzOiAwXG4gIGpzeC1hMTF5L25vLW5vbmludGVyYWN0aXZlLWVsZW1lbnQtaW50ZXJhY3Rpb25zOiAwXG4qL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgQ29uc3QgZnJvbSAnLi4vY29uc3QnO1xuaW1wb3J0IF8gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgQm9vdHN0cmFwQ29udGV4dCB9IGZyb20gJy4uL2NvbnRleHRzL2Jvb3RzdHJhcCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlbGVjdGlvbkNlbGwgZXh0ZW5kcyBDb21wb25lbnQge1xuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIG1vZGU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICByb3dLZXk6IFByb3BUeXBlcy5hbnksXG4gICAgc2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIG9uUm93U2VsZWN0OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgcm93SW5kZXg6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgdGFiSW5kZXg6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgY2xpY2tUb1NlbGVjdDogUHJvcFR5cGVzLmJvb2wsXG4gICAgc2VsZWN0aW9uUmVuZGVyZXI6IFByb3BUeXBlcy5mdW5jLFxuICAgIHNlbGVjdENvbHVtblN0eWxlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuZnVuY10pXG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuaGFuZGxlQ2xpY2sgPSB0aGlzLmhhbmRsZUNsaWNrLmJpbmQodGhpcyk7XG4gIH1cblxuICBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzKSB7XG4gICAgY29uc3Qgc2hvdWxkVXBkYXRlID1cbiAgICAgIHRoaXMucHJvcHMucm93SW5kZXggIT09IG5leHRQcm9wcy5yb3dJbmRleCB8fFxuICAgICAgdGhpcy5wcm9wcy5zZWxlY3RlZCAhPT0gbmV4dFByb3BzLnNlbGVjdGVkIHx8XG4gICAgICB0aGlzLnByb3BzLmRpc2FibGVkICE9PSBuZXh0UHJvcHMuZGlzYWJsZWQgfHxcbiAgICAgIHRoaXMucHJvcHMucm93S2V5ICE9PSBuZXh0UHJvcHMucm93S2V5IHx8XG4gICAgICB0aGlzLnByb3BzLnRhYkluZGV4ICE9PSBuZXh0UHJvcHMudGFiSW5kZXggfHxcbiAgICAgIHRoaXMucHJvcHMuc2VsZWN0Q29sdW1uU3R5bGUgIT09IG5leHRQcm9wcy5zZWxlY3RDb2x1bW5TdHlsZTtcblxuICAgIHJldHVybiBzaG91bGRVcGRhdGU7XG4gIH1cblxuICBoYW5kbGVDbGljayhlKSB7XG4gICAgY29uc3Qge1xuICAgICAgbW9kZTogaW5wdXRUeXBlLFxuICAgICAgcm93S2V5LFxuICAgICAgc2VsZWN0ZWQsXG4gICAgICBvblJvd1NlbGVjdCxcbiAgICAgIGRpc2FibGVkLFxuICAgICAgcm93SW5kZXhcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmIChkaXNhYmxlZCkgcmV0dXJuO1xuXG4gICAgY29uc3QgY2hlY2tlZCA9IGlucHV0VHlwZSA9PT0gQ29uc3QuUk9XX1NFTEVDVF9TSU5HTEVcbiAgICAgID8gdHJ1ZVxuICAgICAgOiAhc2VsZWN0ZWQ7XG5cbiAgICBvblJvd1NlbGVjdChyb3dLZXksIGNoZWNrZWQsIHJvd0luZGV4LCBlKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICByb3dLZXksXG4gICAgICBtb2RlOiBpbnB1dFR5cGUsXG4gICAgICBzZWxlY3RlZCxcbiAgICAgIGRpc2FibGVkLFxuICAgICAgdGFiSW5kZXgsXG4gICAgICByb3dJbmRleCxcbiAgICAgIHNlbGVjdGlvblJlbmRlcmVyLFxuICAgICAgc2VsZWN0Q29sdW1uU3R5bGVcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IGF0dHJzID0ge307XG4gICAgaWYgKHRhYkluZGV4ICE9PSAtMSkgYXR0cnMudGFiSW5kZXggPSB0YWJJbmRleDtcblxuICAgIGF0dHJzLnN0eWxlID0gXy5pc0Z1bmN0aW9uKHNlbGVjdENvbHVtblN0eWxlKSA/XG4gICAgICBzZWxlY3RDb2x1bW5TdHlsZSh7XG4gICAgICAgIGNoZWNrZWQ6IHNlbGVjdGVkLFxuICAgICAgICBkaXNhYmxlZCxcbiAgICAgICAgcm93SW5kZXgsXG4gICAgICAgIHJvd0tleVxuICAgICAgfSkgOlxuICAgICAgc2VsZWN0Q29sdW1uU3R5bGU7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPEJvb3RzdHJhcENvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgIHtcbiAgICAgICAgICAoeyBib290c3RyYXA0IH0pID0+IChcbiAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJzZWxlY3Rpb24tY2VsbFwiIG9uQ2xpY2s9eyB0aGlzLmhhbmRsZUNsaWNrIH0geyAuLi5hdHRycyB9PlxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uUmVuZGVyZXIgPyBzZWxlY3Rpb25SZW5kZXJlcih7XG4gICAgICAgICAgICAgICAgICBtb2RlOiBpbnB1dFR5cGUsXG4gICAgICAgICAgICAgICAgICBjaGVja2VkOiBzZWxlY3RlZCxcbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkLFxuICAgICAgICAgICAgICAgICAgcm93SW5kZXgsXG4gICAgICAgICAgICAgICAgICByb3dLZXlcbiAgICAgICAgICAgICAgICB9KSA6IChcbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICB0eXBlPXsgaW5wdXRUeXBlIH1cbiAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17IHNlbGVjdGVkIH1cbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyBkaXNhYmxlZCB9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17IGJvb3RzdHJhcDQgPyAnc2VsZWN0aW9uLWlucHV0LTQnIDogJycgfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17ICgpID0+IHt9IH1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgPC9Cb290c3RyYXBDb250ZXh0LkNvbnN1bWVyPlxuICAgICk7XG4gIH1cbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL3Jvdy1zZWxlY3Rpb24vc2VsZWN0aW9uLWNlbGwuanMiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuY29uc3QgUm93U2VjdGlvbiA9ICh7IGNvbnRlbnQsIGNvbFNwYW4gfSkgPT4gKFxuICA8dHI+XG4gICAgPHRkXG4gICAgICBkYXRhLXRvZ2dsZT1cImNvbGxhcHNlXCJcbiAgICAgIGNvbFNwYW49eyBjb2xTcGFuIH1cbiAgICAgIGNsYXNzTmFtZT1cInJlYWN0LWJzLXRhYmxlLW5vLWRhdGFcIlxuICAgID5cbiAgICAgIHsgY29udGVudCB9XG4gICAgPC90ZD5cbiAgPC90cj5cbik7XG5cblJvd1NlY3Rpb24ucHJvcFR5cGVzID0ge1xuICBjb250ZW50OiBQcm9wVHlwZXMuYW55LFxuICBjb2xTcGFuOiBQcm9wVHlwZXMubnVtYmVyXG59O1xuXG5Sb3dTZWN0aW9uLmRlZmF1bHRQcm9wcyA9IHtcbiAgY29udGVudDogbnVsbCxcbiAgY29sU3BhbjogMVxufTtcblxuZXhwb3J0IGRlZmF1bHQgUm93U2VjdGlvbjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL3Jvdy9yb3ctc2VjdGlvbi5qcyIsIi8qIGVzbGludCByZWFjdC9wcm9wLXR5cGVzOiAwICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IF8gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IFNlbGVjdGlvbkNvbnRleHQgZnJvbSAnLi4vY29udGV4dHMvc2VsZWN0aW9uLWNvbnRleHQnO1xuXG5leHBvcnQgZGVmYXVsdCAoQ29tcG9uZW50KSA9PiB7XG4gIGNvbnN0IHJlbmRlcldpdGhTZWxlY3Rpb24gPSAocHJvcHMsIHNlbGVjdFJvdykgPT4ge1xuICAgIGNvbnN0IGtleSA9IHByb3BzLnZhbHVlO1xuICAgIGNvbnN0IHNlbGVjdGVkID0gXy5jb250YWlucyhzZWxlY3RSb3cuc2VsZWN0ZWQsIGtleSk7XG4gICAgY29uc3Qgc2VsZWN0YWJsZSA9ICFzZWxlY3RSb3cubm9uU2VsZWN0YWJsZSB8fCAhXy5jb250YWlucyhzZWxlY3RSb3cubm9uU2VsZWN0YWJsZSwga2V5KTtcbiAgICBjb25zdCBub3RTZWxlY3RhYmxlID0gXy5jb250YWlucyhzZWxlY3RSb3cubm9uU2VsZWN0YWJsZSwga2V5KTtcblxuICAgIGxldCB7XG4gICAgICBzdHlsZSxcbiAgICAgIGNsYXNzTmFtZVxuICAgIH0gPSBwcm9wcztcblxuICAgIGlmIChzZWxlY3RlZCkge1xuICAgICAgY29uc3Qgc2VsZWN0ZWRTdHlsZSA9IF8uaXNGdW5jdGlvbihzZWxlY3RSb3cuc3R5bGUpXG4gICAgICAgID8gc2VsZWN0Um93LnN0eWxlKHByb3BzLnJvdywgcHJvcHMucm93SW5kZXgpXG4gICAgICAgIDogc2VsZWN0Um93LnN0eWxlO1xuXG4gICAgICBjb25zdCBzZWxlY3RlZENsYXNzZXMgPSBfLmlzRnVuY3Rpb24oc2VsZWN0Um93LmNsYXNzZXMpXG4gICAgICAgID8gc2VsZWN0Um93LmNsYXNzZXMocHJvcHMucm93LCBwcm9wcy5yb3dJbmRleClcbiAgICAgICAgOiBzZWxlY3RSb3cuY2xhc3NlcztcblxuICAgICAgc3R5bGUgPSB7XG4gICAgICAgIC4uLnN0eWxlLFxuICAgICAgICAuLi5zZWxlY3RlZFN0eWxlXG4gICAgICB9O1xuICAgICAgY2xhc3NOYW1lID0gY3MoY2xhc3NOYW1lLCBzZWxlY3RlZENsYXNzZXMpIHx8IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKHNlbGVjdFJvdy5iZ0NvbG9yKSB7XG4gICAgICAgIHN0eWxlID0gc3R5bGUgfHwge307XG4gICAgICAgIHN0eWxlLmJhY2tncm91bmRDb2xvciA9IF8uaXNGdW5jdGlvbihzZWxlY3RSb3cuYmdDb2xvcilcbiAgICAgICAgICA/IHNlbGVjdFJvdy5iZ0NvbG9yKHByb3BzLnJvdywgcHJvcHMucm93SW5kZXgpXG4gICAgICAgICAgOiBzZWxlY3RSb3cuYmdDb2xvcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobm90U2VsZWN0YWJsZSkge1xuICAgICAgY29uc3Qgbm90U2VsZWN0YWJsZVN0eWxlID0gXy5pc0Z1bmN0aW9uKHNlbGVjdFJvdy5ub25TZWxlY3RhYmxlU3R5bGUpXG4gICAgICAgID8gc2VsZWN0Um93Lm5vblNlbGVjdGFibGVTdHlsZShwcm9wcy5yb3csIHByb3BzLnJvd0luZGV4KVxuICAgICAgICA6IHNlbGVjdFJvdy5ub25TZWxlY3RhYmxlU3R5bGU7XG5cbiAgICAgIGNvbnN0IG5vdFNlbGVjdGFibGVDbGFzc2VzID0gXy5pc0Z1bmN0aW9uKHNlbGVjdFJvdy5ub25TZWxlY3RhYmxlQ2xhc3NlcylcbiAgICAgICAgPyBzZWxlY3RSb3cubm9uU2VsZWN0YWJsZUNsYXNzZXMocHJvcHMucm93LCBwcm9wcy5yb3dJbmRleClcbiAgICAgICAgOiBzZWxlY3RSb3cubm9uU2VsZWN0YWJsZUNsYXNzZXM7XG5cbiAgICAgIHN0eWxlID0ge1xuICAgICAgICAuLi5zdHlsZSxcbiAgICAgICAgLi4ubm90U2VsZWN0YWJsZVN0eWxlXG4gICAgICB9O1xuICAgICAgY2xhc3NOYW1lID0gY3MoY2xhc3NOYW1lLCBub3RTZWxlY3RhYmxlQ2xhc3NlcykgfHwgdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8Q29tcG9uZW50XG4gICAgICAgIHsgLi4ucHJvcHMgfVxuICAgICAgICBzdHlsZT17IHN0eWxlIH1cbiAgICAgICAgY2xhc3NOYW1lPXsgY2xhc3NOYW1lIH1cbiAgICAgICAgc2VsZWN0Um93PXsgc2VsZWN0Um93IH1cbiAgICAgICAgc2VsZWN0ZWQ9eyBzZWxlY3RlZCB9XG4gICAgICAgIHNlbGVjdGFibGU9eyBzZWxlY3RhYmxlIH1cbiAgICAgIC8+XG4gICAgKTtcbiAgfTtcblxuICBmdW5jdGlvbiB3aXRoQ29uc3VtZXIocHJvcHMpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFNlbGVjdGlvbkNvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgIHsgc2VsZWN0Um93ID0+IHJlbmRlcldpdGhTZWxlY3Rpb24ocHJvcHMsIHNlbGVjdFJvdykgfVxuICAgICAgPC9TZWxlY3Rpb25Db250ZXh0LkNvbnN1bWVyPlxuICAgICk7XG4gIH1cblxuICB3aXRoQ29uc3VtZXIuZGlzcGxheU5hbWUgPSAnV2l0aFNlbGVjdGlvblJvd0NvbnN1bWVyJztcbiAgcmV0dXJuIHdpdGhDb25zdW1lcjtcbn07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9yb3ctc2VsZWN0aW9uL3Jvdy1jb25zdW1lci5qcyIsIi8qIGVzbGludCByZWFjdC9wcm9wLXR5cGVzOiAwICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IEV4cGFuZFJvdyBmcm9tICcuL2V4cGFuZC1yb3cnO1xuaW1wb3J0IF8gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IEV4cGFuc2lvbkNvbnRleHQgZnJvbSAnLi4vY29udGV4dHMvcm93LWV4cGFuZC1jb250ZXh0JztcblxuZXhwb3J0IGRlZmF1bHQgKENvbXBvbmVudCkgPT4ge1xuICBjb25zdCByZW5kZXJXaXRoRXhwYW5zaW9uID0gKHByb3BzLCBleHBhbmRSb3cpID0+IHtcbiAgICBsZXQgcGFyZW50Q2xhc3NOYW1lID0gJyc7XG4gICAgbGV0IGNsYXNzTmFtZSA9ICcnO1xuICAgIGNvbnN0IGtleSA9IHByb3BzLnZhbHVlO1xuXG4gICAgY29uc3QgZXhwYW5kZWQgPSBfLmNvbnRhaW5zKGV4cGFuZFJvdy5leHBhbmRlZCwga2V5KTtcbiAgICBjb25zdCBpc0Nsb3NpbmcgPSBfLmNvbnRhaW5zKGV4cGFuZFJvdy5pc0Nsb3NpbmcsIGtleSk7XG4gICAgY29uc3QgZXhwYW5kYWJsZSA9ICFleHBhbmRSb3cubm9uRXhwYW5kYWJsZSB8fCAhXy5jb250YWlucyhleHBhbmRSb3cubm9uRXhwYW5kYWJsZSwga2V5KTtcbiAgICBpZiAoZXhwYW5kZWQpIHtcbiAgICAgIHBhcmVudENsYXNzTmFtZSA9IF8uaXNGdW5jdGlvbihleHBhbmRSb3cucGFyZW50Q2xhc3NOYW1lKSA/XG4gICAgICAgIGV4cGFuZFJvdy5wYXJlbnRDbGFzc05hbWUoZXhwYW5kZWQsIHByb3BzLnJvdywgcHJvcHMucm93SW5kZXgpIDpcbiAgICAgICAgKGV4cGFuZFJvdy5wYXJlbnRDbGFzc05hbWUgfHwgJycpO1xuXG4gICAgICBjbGFzc05hbWUgPSBfLmlzRnVuY3Rpb24oZXhwYW5kUm93LmNsYXNzTmFtZSkgP1xuICAgICAgICBleHBhbmRSb3cuY2xhc3NOYW1lKGV4cGFuZGVkLCBwcm9wcy5yb3csIHByb3BzLnJvd0luZGV4KSA6XG4gICAgICAgIChleHBhbmRSb3cuY2xhc3NOYW1lIHx8ICcnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gW1xuICAgICAgPENvbXBvbmVudFxuICAgICAgICB7IC4uLnByb3BzIH1cbiAgICAgICAga2V5PXsga2V5IH1cbiAgICAgICAgZXhwYW5kZWQ9eyBleHBhbmRlZCB9XG4gICAgICAgIGV4cGFuZGFibGU9eyBleHBhbmRhYmxlIH1cbiAgICAgICAgZXhwYW5kUm93PXsgeyAuLi5leHBhbmRSb3cgfSB9XG4gICAgICAgIGNsYXNzTmFtZT17IGNzKHByb3BzLmNsYXNzTmFtZSwgcGFyZW50Q2xhc3NOYW1lKSB9XG4gICAgICAvPixcbiAgICAgIGV4cGFuZGVkIHx8IGlzQ2xvc2luZyA/IDxFeHBhbmRSb3dcbiAgICAgICAga2V5PXsgYCR7a2V5fS1leHBhbmRpbmdgIH1cbiAgICAgICAgY29sU3Bhbj17IHByb3BzLnZpc2libGVDb2x1bW5TaXplIH1cbiAgICAgICAgZXhwYW5kZWQ9eyBleHBhbmRlZCB9XG4gICAgICAgIG9uQ2xvc2VkPXsgKCkgPT4gZXhwYW5kUm93Lm9uQ2xvc2VkKGtleSkgfVxuICAgICAgICBjbGFzc05hbWU9eyBjbGFzc05hbWUgfVxuICAgICAgPlxuICAgICAgICB7IGV4cGFuZFJvdy5yZW5kZXJlcihwcm9wcy5yb3csIHByb3BzLnJvd0luZGV4KSB9XG4gICAgICA8L0V4cGFuZFJvdz4gOiBudWxsXG4gICAgXTtcbiAgfTtcbiAgcmV0dXJuIHByb3BzID0+IChcbiAgICA8RXhwYW5zaW9uQ29udGV4dC5Db25zdW1lcj5cbiAgICAgIHsgZXhwYW5kUm93ID0+IHJlbmRlcldpdGhFeHBhbnNpb24ocHJvcHMsIGV4cGFuZFJvdykgfVxuICAgIDwvRXhwYW5zaW9uQ29udGV4dC5Db25zdW1lcj5cbiAgKTtcbn07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9yb3ctZXhwYW5kL3Jvdy1jb25zdW1lci5qcyIsImltcG9ydCBjcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgQ1NTVHJhbnNpdGlvbiB9IGZyb20gJ3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAnO1xuXG5jb25zdCBFeHBhbmRSb3cgPSAoeyBjaGlsZHJlbiwgZXhwYW5kZWQsIG9uQ2xvc2VkLCBjbGFzc05hbWUsIC4uLnJlc3QgfSkgPT4gKFxuICA8dHI+XG4gICAgPHRkIGNsYXNzTmFtZT17IGNzKCdyZXNldC1leHBhbnNpb24tc3R5bGUnLCBjbGFzc05hbWUpIH0geyAuLi5yZXN0IH0+XG4gICAgICA8Q1NTVHJhbnNpdGlvblxuICAgICAgICBhcHBlYXJcbiAgICAgICAgaW49eyBleHBhbmRlZCB9XG4gICAgICAgIHRpbWVvdXQ9eyA0MDAgfVxuICAgICAgICBjbGFzc05hbWVzPVwicm93LWV4cGFuZC1zbGlkZVwiXG4gICAgICAgIG9uRXhpdGVkPXsgb25DbG9zZWQgfVxuICAgICAgPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicm93LWV4cGFuc2lvbi1zdHlsZVwiPlxuICAgICAgICAgICAgeyBjaGlsZHJlbiB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9DU1NUcmFuc2l0aW9uPlxuICAgIDwvdGQ+XG4gIDwvdHI+XG4pO1xuXG5FeHBhbmRSb3cucHJvcFR5cGVzID0ge1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIGV4cGFuZGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgb25DbG9zZWQ6IFByb3BUeXBlcy5mdW5jLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmdcbn07XG5cbkV4cGFuZFJvdy5kZWZhdWx0UHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBudWxsLFxuICBleHBhbmRlZDogZmFsc2UsXG4gIG9uQ2xvc2VkOiBudWxsLFxuICBjbGFzc05hbWU6ICcnXG59O1xuXG5leHBvcnQgZGVmYXVsdCBFeHBhbmRSb3c7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9yb3ctZXhwYW5kL2V4cGFuZC1yb3cuanMiLCJleHBvcnQgeyBkZWZhdWx0IGFzIENTU1RyYW5zaXRpb24gfSBmcm9tICcuL0NTU1RyYW5zaXRpb24nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBSZXBsYWNlVHJhbnNpdGlvbiB9IGZyb20gJy4vUmVwbGFjZVRyYW5zaXRpb24nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUcmFuc2l0aW9uR3JvdXAgfSBmcm9tICcuL1RyYW5zaXRpb25Hcm91cCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFRyYW5zaXRpb24gfSBmcm9tICcuL1RyYW5zaXRpb24nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjb25maWcgfSBmcm9tICcuL2NvbmZpZyc7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9pbmRleC5qc1xuLy8gbW9kdWxlIGlkID0gNThcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlXCI7XG5pbXBvcnQgKiBhcyBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgYWRkT25lQ2xhc3MgZnJvbSAnZG9tLWhlbHBlcnMvY2xhc3MvYWRkQ2xhc3MnO1xuaW1wb3J0IHJlbW92ZU9uZUNsYXNzIGZyb20gJ2RvbS1oZWxwZXJzL2NsYXNzL3JlbW92ZUNsYXNzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgVHJhbnNpdGlvbiBmcm9tICcuL1RyYW5zaXRpb24nO1xuaW1wb3J0IHsgY2xhc3NOYW1lc1NoYXBlIH0gZnJvbSAnLi91dGlscy9Qcm9wVHlwZXMnO1xuXG52YXIgX2FkZENsYXNzID0gZnVuY3Rpb24gYWRkQ2xhc3Mobm9kZSwgY2xhc3Nlcykge1xuICByZXR1cm4gbm9kZSAmJiBjbGFzc2VzICYmIGNsYXNzZXMuc3BsaXQoJyAnKS5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7XG4gICAgcmV0dXJuIGFkZE9uZUNsYXNzKG5vZGUsIGMpO1xuICB9KTtcbn07XG5cbnZhciByZW1vdmVDbGFzcyA9IGZ1bmN0aW9uIHJlbW92ZUNsYXNzKG5vZGUsIGNsYXNzZXMpIHtcbiAgcmV0dXJuIG5vZGUgJiYgY2xhc3NlcyAmJiBjbGFzc2VzLnNwbGl0KCcgJykuZm9yRWFjaChmdW5jdGlvbiAoYykge1xuICAgIHJldHVybiByZW1vdmVPbmVDbGFzcyhub2RlLCBjKTtcbiAgfSk7XG59O1xuLyoqXG4gKiBBIHRyYW5zaXRpb24gY29tcG9uZW50IGluc3BpcmVkIGJ5IHRoZSBleGNlbGxlbnRcbiAqIFtuZy1hbmltYXRlXShodHRwOi8vd3d3Lm5nYW5pbWF0ZS5vcmcvKSBsaWJyYXJ5LCB5b3Ugc2hvdWxkIHVzZSBpdCBpZiB5b3UncmVcbiAqIHVzaW5nIENTUyB0cmFuc2l0aW9ucyBvciBhbmltYXRpb25zLiBJdCdzIGJ1aWx0IHVwb24gdGhlXG4gKiBbYFRyYW5zaXRpb25gXShodHRwczovL3JlYWN0Y29tbXVuaXR5Lm9yZy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL3RyYW5zaXRpb24pXG4gKiBjb21wb25lbnQsIHNvIGl0IGluaGVyaXRzIGFsbCBvZiBpdHMgcHJvcHMuXG4gKlxuICogYENTU1RyYW5zaXRpb25gIGFwcGxpZXMgYSBwYWlyIG9mIGNsYXNzIG5hbWVzIGR1cmluZyB0aGUgYGFwcGVhcmAsIGBlbnRlcmAsXG4gKiBhbmQgYGV4aXRgIHN0YXRlcyBvZiB0aGUgdHJhbnNpdGlvbi4gVGhlIGZpcnN0IGNsYXNzIGlzIGFwcGxpZWQgYW5kIHRoZW4gYVxuICogc2Vjb25kIGAqLWFjdGl2ZWAgY2xhc3MgaW4gb3JkZXIgdG8gYWN0aXZhdGUgdGhlIENTUyB0cmFuc2l0aW9uLiBBZnRlciB0aGVcbiAqIHRyYW5zaXRpb24sIG1hdGNoaW5nIGAqLWRvbmVgIGNsYXNzIG5hbWVzIGFyZSBhcHBsaWVkIHRvIHBlcnNpc3QgdGhlXG4gKiB0cmFuc2l0aW9uIHN0YXRlLlxuICpcbiAqIGBgYGpzeFxuICogZnVuY3Rpb24gQXBwKCkge1xuICogICBjb25zdCBbaW5Qcm9wLCBzZXRJblByb3BdID0gdXNlU3RhdGUoZmFsc2UpO1xuICogICByZXR1cm4gKFxuICogICAgIDxkaXY+XG4gKiAgICAgICA8Q1NTVHJhbnNpdGlvbiBpbj17aW5Qcm9wfSB0aW1lb3V0PXsyMDB9IGNsYXNzTmFtZXM9XCJteS1ub2RlXCI+XG4gKiAgICAgICAgIDxkaXY+XG4gKiAgICAgICAgICAge1wiSSdsbCByZWNlaXZlIG15LW5vZGUtKiBjbGFzc2VzXCJ9XG4gKiAgICAgICAgIDwvZGl2PlxuICogICAgICAgPC9DU1NUcmFuc2l0aW9uPlxuICogICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17KCkgPT4gc2V0SW5Qcm9wKHRydWUpfT5cbiAqICAgICAgICAgQ2xpY2sgdG8gRW50ZXJcbiAqICAgICAgIDwvYnV0dG9uPlxuICogICAgIDwvZGl2PlxuICogICApO1xuICogfVxuICogYGBgXG4gKlxuICogV2hlbiB0aGUgYGluYCBwcm9wIGlzIHNldCB0byBgdHJ1ZWAsIHRoZSBjaGlsZCBjb21wb25lbnQgd2lsbCBmaXJzdCByZWNlaXZlXG4gKiB0aGUgY2xhc3MgYGV4YW1wbGUtZW50ZXJgLCB0aGVuIHRoZSBgZXhhbXBsZS1lbnRlci1hY3RpdmVgIHdpbGwgYmUgYWRkZWQgaW5cbiAqIHRoZSBuZXh0IHRpY2suIGBDU1NUcmFuc2l0aW9uYCBbZm9yY2VzIGFcbiAqIHJlZmxvd10oaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0anMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9ibG9iLzUwMDczMDNlNzI5YTc0YmU2NmEyMWMzZTIyMDVlNDkxNjgyMTUyNGIvc3JjL0NTU1RyYW5zaXRpb24uanMjTDIwOC1MMjE1KVxuICogYmV0d2VlbiBiZWZvcmUgYWRkaW5nIHRoZSBgZXhhbXBsZS1lbnRlci1hY3RpdmVgLiBUaGlzIGlzIGFuIGltcG9ydGFudCB0cmlja1xuICogYmVjYXVzZSBpdCBhbGxvd3MgdXMgdG8gdHJhbnNpdGlvbiBiZXR3ZWVuIGBleGFtcGxlLWVudGVyYCBhbmRcbiAqIGBleGFtcGxlLWVudGVyLWFjdGl2ZWAgZXZlbiB0aG91Z2ggdGhleSB3ZXJlIGFkZGVkIGltbWVkaWF0ZWx5IG9uZSBhZnRlclxuICogYW5vdGhlci4gTW9zdCBub3RhYmx5LCB0aGlzIGlzIHdoYXQgbWFrZXMgaXQgcG9zc2libGUgZm9yIHVzIHRvIGFuaW1hdGVcbiAqIF9hcHBlYXJhbmNlXy5cbiAqXG4gKiBgYGBjc3NcbiAqIC5teS1ub2RlLWVudGVyIHtcbiAqICAgb3BhY2l0eTogMDtcbiAqIH1cbiAqIC5teS1ub2RlLWVudGVyLWFjdGl2ZSB7XG4gKiAgIG9wYWNpdHk6IDE7XG4gKiAgIHRyYW5zaXRpb246IG9wYWNpdHkgMjAwbXM7XG4gKiB9XG4gKiAubXktbm9kZS1leGl0IHtcbiAqICAgb3BhY2l0eTogMTtcbiAqIH1cbiAqIC5teS1ub2RlLWV4aXQtYWN0aXZlIHtcbiAqICAgb3BhY2l0eTogMDtcbiAqICAgdHJhbnNpdGlvbjogb3BhY2l0eSAyMDBtcztcbiAqIH1cbiAqIGBgYFxuICpcbiAqIGAqLWFjdGl2ZWAgY2xhc3NlcyByZXByZXNlbnQgd2hpY2ggc3R5bGVzIHlvdSB3YW50IHRvIGFuaW1hdGUgKip0byoqLlxuICovXG5cblxudmFyIENTU1RyYW5zaXRpb24gPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzTG9vc2UoQ1NTVHJhbnNpdGlvbiwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gQ1NTVHJhbnNpdGlvbigpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfUmVhY3QkQ29tcG9uZW50LmNhbGwuYXBwbHkoX1JlYWN0JENvbXBvbmVudCwgW3RoaXNdLmNvbmNhdChhcmdzKSkgfHwgdGhpcztcbiAgICBfdGhpcy5hcHBsaWVkQ2xhc3NlcyA9IHtcbiAgICAgIGFwcGVhcjoge30sXG4gICAgICBlbnRlcjoge30sXG4gICAgICBleGl0OiB7fVxuICAgIH07XG5cbiAgICBfdGhpcy5vbkVudGVyID0gZnVuY3Rpb24gKG5vZGUsIGFwcGVhcmluZykge1xuICAgICAgX3RoaXMucmVtb3ZlQ2xhc3Nlcyhub2RlLCAnZXhpdCcpO1xuXG4gICAgICBfdGhpcy5hZGRDbGFzcyhub2RlLCBhcHBlYXJpbmcgPyAnYXBwZWFyJyA6ICdlbnRlcicsICdiYXNlJyk7XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkVudGVyKSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uRW50ZXIobm9kZSwgYXBwZWFyaW5nKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3RoaXMub25FbnRlcmluZyA9IGZ1bmN0aW9uIChub2RlLCBhcHBlYXJpbmcpIHtcbiAgICAgIHZhciB0eXBlID0gYXBwZWFyaW5nID8gJ2FwcGVhcicgOiAnZW50ZXInO1xuXG4gICAgICBfdGhpcy5hZGRDbGFzcyhub2RlLCB0eXBlLCAnYWN0aXZlJyk7XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkVudGVyaW5nKSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uRW50ZXJpbmcobm9kZSwgYXBwZWFyaW5nKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3RoaXMub25FbnRlcmVkID0gZnVuY3Rpb24gKG5vZGUsIGFwcGVhcmluZykge1xuICAgICAgdmFyIHR5cGUgPSBhcHBlYXJpbmcgPyAnYXBwZWFyJyA6ICdlbnRlcic7XG5cbiAgICAgIF90aGlzLnJlbW92ZUNsYXNzZXMobm9kZSwgdHlwZSk7XG5cbiAgICAgIF90aGlzLmFkZENsYXNzKG5vZGUsIHR5cGUsICdkb25lJyk7XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkVudGVyZWQpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25FbnRlcmVkKG5vZGUsIGFwcGVhcmluZyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF90aGlzLm9uRXhpdCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICBfdGhpcy5yZW1vdmVDbGFzc2VzKG5vZGUsICdhcHBlYXInKTtcblxuICAgICAgX3RoaXMucmVtb3ZlQ2xhc3Nlcyhub2RlLCAnZW50ZXInKTtcblxuICAgICAgX3RoaXMuYWRkQ2xhc3Mobm9kZSwgJ2V4aXQnLCAnYmFzZScpO1xuXG4gICAgICBpZiAoX3RoaXMucHJvcHMub25FeGl0KSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uRXhpdChub2RlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3RoaXMub25FeGl0aW5nID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIF90aGlzLmFkZENsYXNzKG5vZGUsICdleGl0JywgJ2FjdGl2ZScpO1xuXG4gICAgICBpZiAoX3RoaXMucHJvcHMub25FeGl0aW5nKSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uRXhpdGluZyhub2RlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3RoaXMub25FeGl0ZWQgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgX3RoaXMucmVtb3ZlQ2xhc3Nlcyhub2RlLCAnZXhpdCcpO1xuXG4gICAgICBfdGhpcy5hZGRDbGFzcyhub2RlLCAnZXhpdCcsICdkb25lJyk7XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkV4aXRlZCkge1xuICAgICAgICBfdGhpcy5wcm9wcy5vbkV4aXRlZChub2RlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3RoaXMuZ2V0Q2xhc3NOYW1lcyA9IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICB2YXIgY2xhc3NOYW1lcyA9IF90aGlzLnByb3BzLmNsYXNzTmFtZXM7XG4gICAgICB2YXIgaXNTdHJpbmdDbGFzc05hbWVzID0gdHlwZW9mIGNsYXNzTmFtZXMgPT09ICdzdHJpbmcnO1xuICAgICAgdmFyIHByZWZpeCA9IGlzU3RyaW5nQ2xhc3NOYW1lcyAmJiBjbGFzc05hbWVzID8gY2xhc3NOYW1lcyArIFwiLVwiIDogJyc7XG4gICAgICB2YXIgYmFzZUNsYXNzTmFtZSA9IGlzU3RyaW5nQ2xhc3NOYW1lcyA/IFwiXCIgKyBwcmVmaXggKyB0eXBlIDogY2xhc3NOYW1lc1t0eXBlXTtcbiAgICAgIHZhciBhY3RpdmVDbGFzc05hbWUgPSBpc1N0cmluZ0NsYXNzTmFtZXMgPyBiYXNlQ2xhc3NOYW1lICsgXCItYWN0aXZlXCIgOiBjbGFzc05hbWVzW3R5cGUgKyBcIkFjdGl2ZVwiXTtcbiAgICAgIHZhciBkb25lQ2xhc3NOYW1lID0gaXNTdHJpbmdDbGFzc05hbWVzID8gYmFzZUNsYXNzTmFtZSArIFwiLWRvbmVcIiA6IGNsYXNzTmFtZXNbdHlwZSArIFwiRG9uZVwiXTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJhc2VDbGFzc05hbWU6IGJhc2VDbGFzc05hbWUsXG4gICAgICAgIGFjdGl2ZUNsYXNzTmFtZTogYWN0aXZlQ2xhc3NOYW1lLFxuICAgICAgICBkb25lQ2xhc3NOYW1lOiBkb25lQ2xhc3NOYW1lXG4gICAgICB9O1xuICAgIH07XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gQ1NTVHJhbnNpdGlvbi5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmFkZENsYXNzID0gZnVuY3Rpb24gYWRkQ2xhc3Mobm9kZSwgdHlwZSwgcGhhc2UpIHtcbiAgICB2YXIgY2xhc3NOYW1lID0gdGhpcy5nZXRDbGFzc05hbWVzKHR5cGUpW3BoYXNlICsgXCJDbGFzc05hbWVcIl07XG5cbiAgICBpZiAodHlwZSA9PT0gJ2FwcGVhcicgJiYgcGhhc2UgPT09ICdkb25lJykge1xuICAgICAgY2xhc3NOYW1lICs9IFwiIFwiICsgdGhpcy5nZXRDbGFzc05hbWVzKCdlbnRlcicpLmRvbmVDbGFzc05hbWU7XG4gICAgfSAvLyBUaGlzIGlzIGZvciB0byBmb3JjZSBhIHJlcGFpbnQsXG4gICAgLy8gd2hpY2ggaXMgbmVjZXNzYXJ5IGluIG9yZGVyIHRvIHRyYW5zaXRpb24gc3R5bGVzIHdoZW4gYWRkaW5nIGEgY2xhc3MgbmFtZS5cblxuXG4gICAgaWYgKHBoYXNlID09PSAnYWN0aXZlJykge1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLWV4cHJlc3Npb25zICovXG4gICAgICBub2RlICYmIG5vZGUuc2Nyb2xsVG9wO1xuICAgIH1cblxuICAgIHRoaXMuYXBwbGllZENsYXNzZXNbdHlwZV1bcGhhc2VdID0gY2xhc3NOYW1lO1xuXG4gICAgX2FkZENsYXNzKG5vZGUsIGNsYXNzTmFtZSk7XG4gIH07XG5cbiAgX3Byb3RvLnJlbW92ZUNsYXNzZXMgPSBmdW5jdGlvbiByZW1vdmVDbGFzc2VzKG5vZGUsIHR5cGUpIHtcbiAgICB2YXIgX3RoaXMkYXBwbGllZENsYXNzZXMkID0gdGhpcy5hcHBsaWVkQ2xhc3Nlc1t0eXBlXSxcbiAgICAgICAgYmFzZUNsYXNzTmFtZSA9IF90aGlzJGFwcGxpZWRDbGFzc2VzJC5iYXNlLFxuICAgICAgICBhY3RpdmVDbGFzc05hbWUgPSBfdGhpcyRhcHBsaWVkQ2xhc3NlcyQuYWN0aXZlLFxuICAgICAgICBkb25lQ2xhc3NOYW1lID0gX3RoaXMkYXBwbGllZENsYXNzZXMkLmRvbmU7XG4gICAgdGhpcy5hcHBsaWVkQ2xhc3Nlc1t0eXBlXSA9IHt9O1xuXG4gICAgaWYgKGJhc2VDbGFzc05hbWUpIHtcbiAgICAgIHJlbW92ZUNsYXNzKG5vZGUsIGJhc2VDbGFzc05hbWUpO1xuICAgIH1cblxuICAgIGlmIChhY3RpdmVDbGFzc05hbWUpIHtcbiAgICAgIHJlbW92ZUNsYXNzKG5vZGUsIGFjdGl2ZUNsYXNzTmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKGRvbmVDbGFzc05hbWUpIHtcbiAgICAgIHJlbW92ZUNsYXNzKG5vZGUsIGRvbmVDbGFzc05hbWUpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIF8gPSBfdGhpcyRwcm9wcy5jbGFzc05hbWVzLFxuICAgICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF90aGlzJHByb3BzLCBbXCJjbGFzc05hbWVzXCJdKTtcblxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zaXRpb24sIF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgICAgb25FbnRlcjogdGhpcy5vbkVudGVyLFxuICAgICAgb25FbnRlcmVkOiB0aGlzLm9uRW50ZXJlZCxcbiAgICAgIG9uRW50ZXJpbmc6IHRoaXMub25FbnRlcmluZyxcbiAgICAgIG9uRXhpdDogdGhpcy5vbkV4aXQsXG4gICAgICBvbkV4aXRpbmc6IHRoaXMub25FeGl0aW5nLFxuICAgICAgb25FeGl0ZWQ6IHRoaXMub25FeGl0ZWRcbiAgICB9KSk7XG4gIH07XG5cbiAgcmV0dXJuIENTU1RyYW5zaXRpb247XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cbkNTU1RyYW5zaXRpb24uZGVmYXVsdFByb3BzID0ge1xuICBjbGFzc05hbWVzOiAnJ1xufTtcbkNTU1RyYW5zaXRpb24ucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gX2V4dGVuZHMoe30sIFRyYW5zaXRpb24ucHJvcFR5cGVzLCB7XG4gIC8qKlxuICAgKiBUaGUgYW5pbWF0aW9uIGNsYXNzTmFtZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50IGFzIGl0IGVudGVycywgZXhpdHMgb3JcbiAgICogaGFzIGZpbmlzaGVkIHRoZSB0cmFuc2l0aW9uLiBBIHNpbmdsZSBuYW1lIGNhbiBiZSBwcm92aWRlZCBhbmQgaXQgd2lsbCBiZVxuICAgKiBzdWZmaXhlZCBmb3IgZWFjaCBzdGFnZTogZS5nLlxuICAgKlxuICAgKiBgY2xhc3NOYW1lcz1cImZhZGVcImAgYXBwbGllcyBgZmFkZS1lbnRlcmAsIGBmYWRlLWVudGVyLWFjdGl2ZWAsXG4gICAqIGBmYWRlLWVudGVyLWRvbmVgLCBgZmFkZS1leGl0YCwgYGZhZGUtZXhpdC1hY3RpdmVgLCBgZmFkZS1leGl0LWRvbmVgLFxuICAgKiBgZmFkZS1hcHBlYXJgLCBgZmFkZS1hcHBlYXItYWN0aXZlYCwgYW5kIGBmYWRlLWFwcGVhci1kb25lYC5cbiAgICpcbiAgICogKipOb3RlKio6IGBmYWRlLWFwcGVhci1kb25lYCBhbmQgYGZhZGUtZW50ZXItZG9uZWAgd2lsbCBfYm90aF8gYmUgYXBwbGllZC5cbiAgICogVGhpcyBhbGxvd3MgeW91IHRvIGRlZmluZSBkaWZmZXJlbnQgYmVoYXZpb3IgZm9yIHdoZW4gYXBwZWFyaW5nIGlzIGRvbmUgYW5kXG4gICAqIHdoZW4gcmVndWxhciBlbnRlcmluZyBpcyBkb25lLCB1c2luZyBzZWxlY3RvcnMgbGlrZVxuICAgKiBgLmZhZGUtZW50ZXItZG9uZTpub3QoLmZhZGUtYXBwZWFyLWRvbmUpYC4gRm9yIGV4YW1wbGUsIHlvdSBjb3VsZCBhcHBseSBhblxuICAgKiBlcGljIGVudHJhbmNlIGFuaW1hdGlvbiB3aGVuIGVsZW1lbnQgZmlyc3QgYXBwZWFycyBpbiB0aGUgRE9NIHVzaW5nXG4gICAqIFtBbmltYXRlLmNzc10oaHR0cHM6Ly9kYW5lZGVuLmdpdGh1Yi5pby9hbmltYXRlLmNzcy8pLiBPdGhlcndpc2UgeW91IGNhblxuICAgKiBzaW1wbHkgdXNlIGBmYWRlLWVudGVyLWRvbmVgIGZvciBkZWZpbmluZyBib3RoIGNhc2VzLlxuICAgKlxuICAgKiBFYWNoIGluZGl2aWR1YWwgY2xhc3NOYW1lcyBjYW4gYWxzbyBiZSBzcGVjaWZpZWQgaW5kZXBlbmRlbnRseSBsaWtlOlxuICAgKlxuICAgKiBgYGBqc1xuICAgKiBjbGFzc05hbWVzPXt7XG4gICAqICBhcHBlYXI6ICdteS1hcHBlYXInLFxuICAgKiAgYXBwZWFyQWN0aXZlOiAnbXktYWN0aXZlLWFwcGVhcicsXG4gICAqICBhcHBlYXJEb25lOiAnbXktZG9uZS1hcHBlYXInLFxuICAgKiAgZW50ZXI6ICdteS1lbnRlcicsXG4gICAqICBlbnRlckFjdGl2ZTogJ215LWFjdGl2ZS1lbnRlcicsXG4gICAqICBlbnRlckRvbmU6ICdteS1kb25lLWVudGVyJyxcbiAgICogIGV4aXQ6ICdteS1leGl0JyxcbiAgICogIGV4aXRBY3RpdmU6ICdteS1hY3RpdmUtZXhpdCcsXG4gICAqICBleGl0RG9uZTogJ215LWRvbmUtZXhpdCcsXG4gICAqIH19XG4gICAqIGBgYFxuICAgKlxuICAgKiBJZiB5b3Ugd2FudCB0byBzZXQgdGhlc2UgY2xhc3NlcyB1c2luZyBDU1MgTW9kdWxlczpcbiAgICpcbiAgICogYGBganNcbiAgICogaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5jc3MnO1xuICAgKiBgYGBcbiAgICpcbiAgICogeW91IG1pZ2h0IHdhbnQgdG8gdXNlIGNhbWVsQ2FzZSBpbiB5b3VyIENTUyBmaWxlLCB0aGF0IHdheSBjb3VsZCBzaW1wbHlcbiAgICogc3ByZWFkIHRoZW0gaW5zdGVhZCBvZiBsaXN0aW5nIHRoZW0gb25lIGJ5IG9uZTpcbiAgICpcbiAgICogYGBganNcbiAgICogY2xhc3NOYW1lcz17eyAuLi5zdHlsZXMgfX1cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmcgfCB7XG4gICAqICBhcHBlYXI/OiBzdHJpbmcsXG4gICAqICBhcHBlYXJBY3RpdmU/OiBzdHJpbmcsXG4gICAqICBhcHBlYXJEb25lPzogc3RyaW5nLFxuICAgKiAgZW50ZXI/OiBzdHJpbmcsXG4gICAqICBlbnRlckFjdGl2ZT86IHN0cmluZyxcbiAgICogIGVudGVyRG9uZT86IHN0cmluZyxcbiAgICogIGV4aXQ/OiBzdHJpbmcsXG4gICAqICBleGl0QWN0aXZlPzogc3RyaW5nLFxuICAgKiAgZXhpdERvbmU/OiBzdHJpbmcsXG4gICAqIH19XG4gICAqL1xuICBjbGFzc05hbWVzOiBjbGFzc05hbWVzU2hhcGUsXG5cbiAgLyoqXG4gICAqIEEgYDxUcmFuc2l0aW9uPmAgY2FsbGJhY2sgZmlyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlICdlbnRlcicgb3IgJ2FwcGVhcicgY2xhc3MgaXNcbiAgICogYXBwbGllZC5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQsIGlzQXBwZWFyaW5nOiBib29sKVxuICAgKi9cbiAgb25FbnRlcjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIEEgYDxUcmFuc2l0aW9uPmAgY2FsbGJhY2sgZmlyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlICdlbnRlci1hY3RpdmUnIG9yXG4gICAqICdhcHBlYXItYWN0aXZlJyBjbGFzcyBpcyBhcHBsaWVkLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCwgaXNBcHBlYXJpbmc6IGJvb2wpXG4gICAqL1xuICBvbkVudGVyaW5nOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQSBgPFRyYW5zaXRpb24+YCBjYWxsYmFjayBmaXJlZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgJ2VudGVyJyBvclxuICAgKiAnYXBwZWFyJyBjbGFzc2VzIGFyZSAqKnJlbW92ZWQqKiBhbmQgdGhlIGBkb25lYCBjbGFzcyBpcyBhZGRlZCB0byB0aGUgRE9NIG5vZGUuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50LCBpc0FwcGVhcmluZzogYm9vbClcbiAgICovXG4gIG9uRW50ZXJlZDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIEEgYDxUcmFuc2l0aW9uPmAgY2FsbGJhY2sgZmlyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlICdleGl0JyBjbGFzcyBpc1xuICAgKiBhcHBsaWVkLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudClcbiAgICovXG4gIG9uRXhpdDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIEEgYDxUcmFuc2l0aW9uPmAgY2FsbGJhY2sgZmlyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlICdleGl0LWFjdGl2ZScgaXMgYXBwbGllZC5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQpXG4gICAqL1xuICBvbkV4aXRpbmc6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBBIGA8VHJhbnNpdGlvbj5gIGNhbGxiYWNrIGZpcmVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSAnZXhpdCcgY2xhc3Nlc1xuICAgKiBhcmUgKipyZW1vdmVkKiogYW5kIHRoZSBgZXhpdC1kb25lYCBjbGFzcyBpcyBhZGRlZCB0byB0aGUgRE9NIG5vZGUuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50KVxuICAgKi9cbiAgb25FeGl0ZWQ6IFByb3BUeXBlcy5mdW5jXG59KSA6IHt9O1xuZXhwb3J0IGRlZmF1bHQgQ1NTVHJhbnNpdGlvbjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL0NTU1RyYW5zaXRpb24uanNcbi8vIG1vZHVsZSBpZCA9IDU5XG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5kZWZhdWx0ID0gYWRkQ2xhc3M7XG5cbnZhciBfaGFzQ2xhc3MgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hhc0NsYXNzXCIpKTtcblxuZnVuY3Rpb24gYWRkQ2xhc3MoZWxlbWVudCwgY2xhc3NOYW1lKSB7XG4gIGlmIChlbGVtZW50LmNsYXNzTGlzdCkgZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSk7ZWxzZSBpZiAoISgwLCBfaGFzQ2xhc3MuZGVmYXVsdCkoZWxlbWVudCwgY2xhc3NOYW1lKSkgaWYgKHR5cGVvZiBlbGVtZW50LmNsYXNzTmFtZSA9PT0gJ3N0cmluZycpIGVsZW1lbnQuY2xhc3NOYW1lID0gZWxlbWVudC5jbGFzc05hbWUgKyAnICcgKyBjbGFzc05hbWU7ZWxzZSBlbGVtZW50LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAoZWxlbWVudC5jbGFzc05hbWUgJiYgZWxlbWVudC5jbGFzc05hbWUuYmFzZVZhbCB8fCAnJykgKyAnICcgKyBjbGFzc05hbWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbXCJkZWZhdWx0XCJdO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9ub2RlX21vZHVsZXMvZG9tLWhlbHBlcnMvY2xhc3MvYWRkQ2xhc3MuanNcbi8vIG1vZHVsZSBpZCA9IDYwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIiwiZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHtcbiAgICBcImRlZmF1bHRcIjogb2JqXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdDtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0LmpzXG4vLyBtb2R1bGUgaWQgPSA2MVxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5kZWZhdWx0ID0gaGFzQ2xhc3M7XG5cbmZ1bmN0aW9uIGhhc0NsYXNzKGVsZW1lbnQsIGNsYXNzTmFtZSkge1xuICBpZiAoZWxlbWVudC5jbGFzc0xpc3QpIHJldHVybiAhIWNsYXNzTmFtZSAmJiBlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpO2Vsc2UgcmV0dXJuIChcIiBcIiArIChlbGVtZW50LmNsYXNzTmFtZS5iYXNlVmFsIHx8IGVsZW1lbnQuY2xhc3NOYW1lKSArIFwiIFwiKS5pbmRleE9mKFwiIFwiICsgY2xhc3NOYW1lICsgXCIgXCIpICE9PSAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzW1wiZGVmYXVsdFwiXTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvbm9kZV9tb2R1bGVzL2RvbS1oZWxwZXJzL2NsYXNzL2hhc0NsYXNzLmpzXG4vLyBtb2R1bGUgaWQgPSA2MlxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSIsIid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gcmVwbGFjZUNsYXNzTmFtZShvcmlnQ2xhc3MsIGNsYXNzVG9SZW1vdmUpIHtcbiAgcmV0dXJuIG9yaWdDbGFzcy5yZXBsYWNlKG5ldyBSZWdFeHAoJyhefFxcXFxzKScgKyBjbGFzc1RvUmVtb3ZlICsgJyg/OlxcXFxzfCQpJywgJ2cnKSwgJyQxJykucmVwbGFjZSgvXFxzKy9nLCAnICcpLnJlcGxhY2UoL15cXHMqfFxccyokL2csICcnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiByZW1vdmVDbGFzcyhlbGVtZW50LCBjbGFzc05hbWUpIHtcbiAgaWYgKGVsZW1lbnQuY2xhc3NMaXN0KSBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lKTtlbHNlIGlmICh0eXBlb2YgZWxlbWVudC5jbGFzc05hbWUgPT09ICdzdHJpbmcnKSBlbGVtZW50LmNsYXNzTmFtZSA9IHJlcGxhY2VDbGFzc05hbWUoZWxlbWVudC5jbGFzc05hbWUsIGNsYXNzTmFtZSk7ZWxzZSBlbGVtZW50LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCByZXBsYWNlQ2xhc3NOYW1lKGVsZW1lbnQuY2xhc3NOYW1lICYmIGVsZW1lbnQuY2xhc3NOYW1lLmJhc2VWYWwgfHwgJycsIGNsYXNzTmFtZSkpO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvbm9kZV9tb2R1bGVzL2RvbS1oZWxwZXJzL2NsYXNzL3JlbW92ZUNsYXNzLmpzXG4vLyBtb2R1bGUgaWQgPSA2M1xuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSIsImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlXCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGZpbmRET01Ob2RlIH0gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCBUcmFuc2l0aW9uR3JvdXAgZnJvbSAnLi9UcmFuc2l0aW9uR3JvdXAnO1xuLyoqXG4gKiBUaGUgYDxSZXBsYWNlVHJhbnNpdGlvbj5gIGNvbXBvbmVudCBpcyBhIHNwZWNpYWxpemVkIGBUcmFuc2l0aW9uYCBjb21wb25lbnRcbiAqIHRoYXQgYW5pbWF0ZXMgYmV0d2VlbiB0d28gY2hpbGRyZW4uXG4gKlxuICogYGBganN4XG4gKiA8UmVwbGFjZVRyYW5zaXRpb24gaW4+XG4gKiAgIDxGYWRlPjxkaXY+SSBhcHBlYXIgZmlyc3Q8L2Rpdj48L0ZhZGU+XG4gKiAgIDxGYWRlPjxkaXY+SSByZXBsYWNlIHRoZSBhYm92ZTwvZGl2PjwvRmFkZT5cbiAqIDwvUmVwbGFjZVRyYW5zaXRpb24+XG4gKiBgYGBcbiAqL1xuXG52YXIgUmVwbGFjZVRyYW5zaXRpb24gPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzTG9vc2UoUmVwbGFjZVRyYW5zaXRpb24sIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFJlcGxhY2VUcmFuc2l0aW9uKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBfYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIF9hcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX1JlYWN0JENvbXBvbmVudC5jYWxsLmFwcGx5KF9SZWFjdCRDb21wb25lbnQsIFt0aGlzXS5jb25jYXQoX2FyZ3MpKSB8fCB0aGlzO1xuXG4gICAgX3RoaXMuaGFuZGxlRW50ZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgICAgYXJnc1tfa2V5Ml0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3RoaXMuaGFuZGxlTGlmZWN5Y2xlKCdvbkVudGVyJywgMCwgYXJncyk7XG4gICAgfTtcblxuICAgIF90aGlzLmhhbmRsZUVudGVyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjMgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4zKSwgX2tleTMgPSAwOyBfa2V5MyA8IF9sZW4zOyBfa2V5MysrKSB7XG4gICAgICAgIGFyZ3NbX2tleTNdID0gYXJndW1lbnRzW19rZXkzXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZUxpZmVjeWNsZSgnb25FbnRlcmluZycsIDAsIGFyZ3MpO1xuICAgIH07XG5cbiAgICBfdGhpcy5oYW5kbGVFbnRlcmVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjQgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW40KSwgX2tleTQgPSAwOyBfa2V5NCA8IF9sZW40OyBfa2V5NCsrKSB7XG4gICAgICAgIGFyZ3NbX2tleTRdID0gYXJndW1lbnRzW19rZXk0XTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZUxpZmVjeWNsZSgnb25FbnRlcmVkJywgMCwgYXJncyk7XG4gICAgfTtcblxuICAgIF90aGlzLmhhbmRsZUV4aXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuNSA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjUpLCBfa2V5NSA9IDA7IF9rZXk1IDwgX2xlbjU7IF9rZXk1KyspIHtcbiAgICAgICAgYXJnc1tfa2V5NV0gPSBhcmd1bWVudHNbX2tleTVdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3RoaXMuaGFuZGxlTGlmZWN5Y2xlKCdvbkV4aXQnLCAxLCBhcmdzKTtcbiAgICB9O1xuXG4gICAgX3RoaXMuaGFuZGxlRXhpdGluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW42ID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuNiksIF9rZXk2ID0gMDsgX2tleTYgPCBfbGVuNjsgX2tleTYrKykge1xuICAgICAgICBhcmdzW19rZXk2XSA9IGFyZ3VtZW50c1tfa2V5Nl07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfdGhpcy5oYW5kbGVMaWZlY3ljbGUoJ29uRXhpdGluZycsIDEsIGFyZ3MpO1xuICAgIH07XG5cbiAgICBfdGhpcy5oYW5kbGVFeGl0ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuNyA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjcpLCBfa2V5NyA9IDA7IF9rZXk3IDwgX2xlbjc7IF9rZXk3KyspIHtcbiAgICAgICAgYXJnc1tfa2V5N10gPSBhcmd1bWVudHNbX2tleTddO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3RoaXMuaGFuZGxlTGlmZWN5Y2xlKCdvbkV4aXRlZCcsIDEsIGFyZ3MpO1xuICAgIH07XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gUmVwbGFjZVRyYW5zaXRpb24ucHJvdG90eXBlO1xuXG4gIF9wcm90by5oYW5kbGVMaWZlY3ljbGUgPSBmdW5jdGlvbiBoYW5kbGVMaWZlY3ljbGUoaGFuZGxlciwgaWR4LCBvcmlnaW5hbEFyZ3MpIHtcbiAgICB2YXIgX2NoaWxkJHByb3BzO1xuXG4gICAgdmFyIGNoaWxkcmVuID0gdGhpcy5wcm9wcy5jaGlsZHJlbjtcbiAgICB2YXIgY2hpbGQgPSBSZWFjdC5DaGlsZHJlbi50b0FycmF5KGNoaWxkcmVuKVtpZHhdO1xuICAgIGlmIChjaGlsZC5wcm9wc1toYW5kbGVyXSkgKF9jaGlsZCRwcm9wcyA9IGNoaWxkLnByb3BzKVtoYW5kbGVyXS5hcHBseShfY2hpbGQkcHJvcHMsIG9yaWdpbmFsQXJncyk7XG4gICAgaWYgKHRoaXMucHJvcHNbaGFuZGxlcl0pIHRoaXMucHJvcHNbaGFuZGxlcl0oZmluZERPTU5vZGUodGhpcykpO1xuICB9O1xuXG4gIF9wcm90by5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wcy5jaGlsZHJlbixcbiAgICAgICAgaW5Qcm9wID0gX3RoaXMkcHJvcHMuaW4sXG4gICAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3RoaXMkcHJvcHMsIFtcImNoaWxkcmVuXCIsIFwiaW5cIl0pO1xuXG4gICAgdmFyIF9SZWFjdCRDaGlsZHJlbiR0b0FyciA9IFJlYWN0LkNoaWxkcmVuLnRvQXJyYXkoY2hpbGRyZW4pLFxuICAgICAgICBmaXJzdCA9IF9SZWFjdCRDaGlsZHJlbiR0b0FyclswXSxcbiAgICAgICAgc2Vjb25kID0gX1JlYWN0JENoaWxkcmVuJHRvQXJyWzFdO1xuXG4gICAgZGVsZXRlIHByb3BzLm9uRW50ZXI7XG4gICAgZGVsZXRlIHByb3BzLm9uRW50ZXJpbmc7XG4gICAgZGVsZXRlIHByb3BzLm9uRW50ZXJlZDtcbiAgICBkZWxldGUgcHJvcHMub25FeGl0O1xuICAgIGRlbGV0ZSBwcm9wcy5vbkV4aXRpbmc7XG4gICAgZGVsZXRlIHByb3BzLm9uRXhpdGVkO1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zaXRpb25Hcm91cCwgcHJvcHMsIGluUHJvcCA/IFJlYWN0LmNsb25lRWxlbWVudChmaXJzdCwge1xuICAgICAga2V5OiAnZmlyc3QnLFxuICAgICAgb25FbnRlcjogdGhpcy5oYW5kbGVFbnRlcixcbiAgICAgIG9uRW50ZXJpbmc6IHRoaXMuaGFuZGxlRW50ZXJpbmcsXG4gICAgICBvbkVudGVyZWQ6IHRoaXMuaGFuZGxlRW50ZXJlZFxuICAgIH0pIDogUmVhY3QuY2xvbmVFbGVtZW50KHNlY29uZCwge1xuICAgICAga2V5OiAnc2Vjb25kJyxcbiAgICAgIG9uRW50ZXI6IHRoaXMuaGFuZGxlRXhpdCxcbiAgICAgIG9uRW50ZXJpbmc6IHRoaXMuaGFuZGxlRXhpdGluZyxcbiAgICAgIG9uRW50ZXJlZDogdGhpcy5oYW5kbGVFeGl0ZWRcbiAgICB9KSk7XG4gIH07XG5cbiAgcmV0dXJuIFJlcGxhY2VUcmFuc2l0aW9uO1xufShSZWFjdC5Db21wb25lbnQpO1xuXG5SZXBsYWNlVHJhbnNpdGlvbi5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIGluOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBjaGlsZHJlbjogZnVuY3Rpb24gY2hpbGRyZW4ocHJvcHMsIHByb3BOYW1lKSB7XG4gICAgaWYgKFJlYWN0LkNoaWxkcmVuLmNvdW50KHByb3BzW3Byb3BOYW1lXSkgIT09IDIpIHJldHVybiBuZXcgRXJyb3IoXCJcXFwiXCIgKyBwcm9wTmFtZSArIFwiXFxcIiBtdXN0IGJlIGV4YWN0bHkgdHdvIHRyYW5zaXRpb24gY29tcG9uZW50cy5cIik7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn0gOiB7fTtcbmV4cG9ydCBkZWZhdWx0IFJlcGxhY2VUcmFuc2l0aW9uO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9lc20vUmVwbGFjZVRyYW5zaXRpb24uanNcbi8vIG1vZHVsZSBpZCA9IDY0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cblxuICByZXR1cm4gc2VsZjtcbn1cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qc1xuLy8gbW9kdWxlIGlkID0gNjVcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEiLCJpbXBvcnQgeyBDaGlsZHJlbiwgY2xvbmVFbGVtZW50LCBpc1ZhbGlkRWxlbWVudCB9IGZyb20gJ3JlYWN0Jztcbi8qKlxuICogR2l2ZW4gYHRoaXMucHJvcHMuY2hpbGRyZW5gLCByZXR1cm4gYW4gb2JqZWN0IG1hcHBpbmcga2V5IHRvIGNoaWxkLlxuICpcbiAqIEBwYXJhbSB7Kn0gY2hpbGRyZW4gYHRoaXMucHJvcHMuY2hpbGRyZW5gXG4gKiBAcmV0dXJuIHtvYmplY3R9IE1hcHBpbmcgb2Yga2V5IHRvIGNoaWxkXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENoaWxkTWFwcGluZyhjaGlsZHJlbiwgbWFwRm4pIHtcbiAgdmFyIG1hcHBlciA9IGZ1bmN0aW9uIG1hcHBlcihjaGlsZCkge1xuICAgIHJldHVybiBtYXBGbiAmJiBpc1ZhbGlkRWxlbWVudChjaGlsZCkgPyBtYXBGbihjaGlsZCkgOiBjaGlsZDtcbiAgfTtcblxuICB2YXIgcmVzdWx0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgaWYgKGNoaWxkcmVuKSBDaGlsZHJlbi5tYXAoY2hpbGRyZW4sIGZ1bmN0aW9uIChjKSB7XG4gICAgcmV0dXJuIGM7XG4gIH0pLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgLy8gcnVuIHRoZSBtYXAgZnVuY3Rpb24gaGVyZSBpbnN0ZWFkIHNvIHRoYXQgdGhlIGtleSBpcyB0aGUgY29tcHV0ZWQgb25lXG4gICAgcmVzdWx0W2NoaWxkLmtleV0gPSBtYXBwZXIoY2hpbGQpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogV2hlbiB5b3UncmUgYWRkaW5nIG9yIHJlbW92aW5nIGNoaWxkcmVuIHNvbWUgbWF5IGJlIGFkZGVkIG9yIHJlbW92ZWQgaW4gdGhlXG4gKiBzYW1lIHJlbmRlciBwYXNzLiBXZSB3YW50IHRvIHNob3cgKmJvdGgqIHNpbmNlIHdlIHdhbnQgdG8gc2ltdWx0YW5lb3VzbHlcbiAqIGFuaW1hdGUgZWxlbWVudHMgaW4gYW5kIG91dC4gVGhpcyBmdW5jdGlvbiB0YWtlcyBhIHByZXZpb3VzIHNldCBvZiBrZXlzXG4gKiBhbmQgYSBuZXcgc2V0IG9mIGtleXMgYW5kIG1lcmdlcyB0aGVtIHdpdGggaXRzIGJlc3QgZ3Vlc3Mgb2YgdGhlIGNvcnJlY3RcbiAqIG9yZGVyaW5nLiBJbiB0aGUgZnV0dXJlIHdlIG1heSBleHBvc2Ugc29tZSBvZiB0aGUgdXRpbGl0aWVzIGluXG4gKiBSZWFjdE11bHRpQ2hpbGQgdG8gbWFrZSB0aGlzIGVhc3ksIGJ1dCBmb3Igbm93IFJlYWN0IGl0c2VsZiBkb2VzIG5vdFxuICogZGlyZWN0bHkgaGF2ZSB0aGlzIGNvbmNlcHQgb2YgdGhlIHVuaW9uIG9mIHByZXZDaGlsZHJlbiBhbmQgbmV4dENoaWxkcmVuXG4gKiBzbyB3ZSBpbXBsZW1lbnQgaXQgaGVyZS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gcHJldiBwcmV2IGNoaWxkcmVuIGFzIHJldHVybmVkIGZyb21cbiAqIGBSZWFjdFRyYW5zaXRpb25DaGlsZE1hcHBpbmcuZ2V0Q2hpbGRNYXBwaW5nKClgLlxuICogQHBhcmFtIHtvYmplY3R9IG5leHQgbmV4dCBjaGlsZHJlbiBhcyByZXR1cm5lZCBmcm9tXG4gKiBgUmVhY3RUcmFuc2l0aW9uQ2hpbGRNYXBwaW5nLmdldENoaWxkTWFwcGluZygpYC5cbiAqIEByZXR1cm4ge29iamVjdH0gYSBrZXkgc2V0IHRoYXQgY29udGFpbnMgYWxsIGtleXMgaW4gYHByZXZgIGFuZCBhbGwga2V5c1xuICogaW4gYG5leHRgIGluIGEgcmVhc29uYWJsZSBvcmRlci5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VDaGlsZE1hcHBpbmdzKHByZXYsIG5leHQpIHtcbiAgcHJldiA9IHByZXYgfHwge307XG4gIG5leHQgPSBuZXh0IHx8IHt9O1xuXG4gIGZ1bmN0aW9uIGdldFZhbHVlRm9yS2V5KGtleSkge1xuICAgIHJldHVybiBrZXkgaW4gbmV4dCA/IG5leHRba2V5XSA6IHByZXZba2V5XTtcbiAgfSAvLyBGb3IgZWFjaCBrZXkgb2YgYG5leHRgLCB0aGUgbGlzdCBvZiBrZXlzIHRvIGluc2VydCBiZWZvcmUgdGhhdCBrZXkgaW5cbiAgLy8gdGhlIGNvbWJpbmVkIGxpc3RcblxuXG4gIHZhciBuZXh0S2V5c1BlbmRpbmcgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB2YXIgcGVuZGluZ0tleXMgPSBbXTtcblxuICBmb3IgKHZhciBwcmV2S2V5IGluIHByZXYpIHtcbiAgICBpZiAocHJldktleSBpbiBuZXh0KSB7XG4gICAgICBpZiAocGVuZGluZ0tleXMubGVuZ3RoKSB7XG4gICAgICAgIG5leHRLZXlzUGVuZGluZ1twcmV2S2V5XSA9IHBlbmRpbmdLZXlzO1xuICAgICAgICBwZW5kaW5nS2V5cyA9IFtdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZW5kaW5nS2V5cy5wdXNoKHByZXZLZXkpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBpO1xuICB2YXIgY2hpbGRNYXBwaW5nID0ge307XG5cbiAgZm9yICh2YXIgbmV4dEtleSBpbiBuZXh0KSB7XG4gICAgaWYgKG5leHRLZXlzUGVuZGluZ1tuZXh0S2V5XSkge1xuICAgICAgZm9yIChpID0gMDsgaSA8IG5leHRLZXlzUGVuZGluZ1tuZXh0S2V5XS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcGVuZGluZ05leHRLZXkgPSBuZXh0S2V5c1BlbmRpbmdbbmV4dEtleV1baV07XG4gICAgICAgIGNoaWxkTWFwcGluZ1tuZXh0S2V5c1BlbmRpbmdbbmV4dEtleV1baV1dID0gZ2V0VmFsdWVGb3JLZXkocGVuZGluZ05leHRLZXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNoaWxkTWFwcGluZ1tuZXh0S2V5XSA9IGdldFZhbHVlRm9yS2V5KG5leHRLZXkpO1xuICB9IC8vIEZpbmFsbHksIGFkZCB0aGUga2V5cyB3aGljaCBkaWRuJ3QgYXBwZWFyIGJlZm9yZSBhbnkga2V5IGluIGBuZXh0YFxuXG5cbiAgZm9yIChpID0gMDsgaSA8IHBlbmRpbmdLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgY2hpbGRNYXBwaW5nW3BlbmRpbmdLZXlzW2ldXSA9IGdldFZhbHVlRm9yS2V5KHBlbmRpbmdLZXlzW2ldKTtcbiAgfVxuXG4gIHJldHVybiBjaGlsZE1hcHBpbmc7XG59XG5cbmZ1bmN0aW9uIGdldFByb3AoY2hpbGQsIHByb3AsIHByb3BzKSB7XG4gIHJldHVybiBwcm9wc1twcm9wXSAhPSBudWxsID8gcHJvcHNbcHJvcF0gOiBjaGlsZC5wcm9wc1twcm9wXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEluaXRpYWxDaGlsZE1hcHBpbmcocHJvcHMsIG9uRXhpdGVkKSB7XG4gIHJldHVybiBnZXRDaGlsZE1hcHBpbmcocHJvcHMuY2hpbGRyZW4sIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIHJldHVybiBjbG9uZUVsZW1lbnQoY2hpbGQsIHtcbiAgICAgIG9uRXhpdGVkOiBvbkV4aXRlZC5iaW5kKG51bGwsIGNoaWxkKSxcbiAgICAgIGluOiB0cnVlLFxuICAgICAgYXBwZWFyOiBnZXRQcm9wKGNoaWxkLCAnYXBwZWFyJywgcHJvcHMpLFxuICAgICAgZW50ZXI6IGdldFByb3AoY2hpbGQsICdlbnRlcicsIHByb3BzKSxcbiAgICAgIGV4aXQ6IGdldFByb3AoY2hpbGQsICdleGl0JywgcHJvcHMpXG4gICAgfSk7XG4gIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldE5leHRDaGlsZE1hcHBpbmcobmV4dFByb3BzLCBwcmV2Q2hpbGRNYXBwaW5nLCBvbkV4aXRlZCkge1xuICB2YXIgbmV4dENoaWxkTWFwcGluZyA9IGdldENoaWxkTWFwcGluZyhuZXh0UHJvcHMuY2hpbGRyZW4pO1xuICB2YXIgY2hpbGRyZW4gPSBtZXJnZUNoaWxkTWFwcGluZ3MocHJldkNoaWxkTWFwcGluZywgbmV4dENoaWxkTWFwcGluZyk7XG4gIE9iamVjdC5rZXlzKGNoaWxkcmVuKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgY2hpbGQgPSBjaGlsZHJlbltrZXldO1xuICAgIGlmICghaXNWYWxpZEVsZW1lbnQoY2hpbGQpKSByZXR1cm47XG4gICAgdmFyIGhhc1ByZXYgPSBrZXkgaW4gcHJldkNoaWxkTWFwcGluZztcbiAgICB2YXIgaGFzTmV4dCA9IGtleSBpbiBuZXh0Q2hpbGRNYXBwaW5nO1xuICAgIHZhciBwcmV2Q2hpbGQgPSBwcmV2Q2hpbGRNYXBwaW5nW2tleV07XG4gICAgdmFyIGlzTGVhdmluZyA9IGlzVmFsaWRFbGVtZW50KHByZXZDaGlsZCkgJiYgIXByZXZDaGlsZC5wcm9wcy5pbjsgLy8gaXRlbSBpcyBuZXcgKGVudGVyaW5nKVxuXG4gICAgaWYgKGhhc05leHQgJiYgKCFoYXNQcmV2IHx8IGlzTGVhdmluZykpIHtcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdlbnRlcmluZycsIGtleSlcbiAgICAgIGNoaWxkcmVuW2tleV0gPSBjbG9uZUVsZW1lbnQoY2hpbGQsIHtcbiAgICAgICAgb25FeGl0ZWQ6IG9uRXhpdGVkLmJpbmQobnVsbCwgY2hpbGQpLFxuICAgICAgICBpbjogdHJ1ZSxcbiAgICAgICAgZXhpdDogZ2V0UHJvcChjaGlsZCwgJ2V4aXQnLCBuZXh0UHJvcHMpLFxuICAgICAgICBlbnRlcjogZ2V0UHJvcChjaGlsZCwgJ2VudGVyJywgbmV4dFByb3BzKVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICghaGFzTmV4dCAmJiBoYXNQcmV2ICYmICFpc0xlYXZpbmcpIHtcbiAgICAgIC8vIGl0ZW0gaXMgb2xkIChleGl0aW5nKVxuICAgICAgLy8gY29uc29sZS5sb2coJ2xlYXZpbmcnLCBrZXkpXG4gICAgICBjaGlsZHJlbltrZXldID0gY2xvbmVFbGVtZW50KGNoaWxkLCB7XG4gICAgICAgIGluOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChoYXNOZXh0ICYmIGhhc1ByZXYgJiYgaXNWYWxpZEVsZW1lbnQocHJldkNoaWxkKSkge1xuICAgICAgLy8gaXRlbSBoYXNuJ3QgY2hhbmdlZCB0cmFuc2l0aW9uIHN0YXRlc1xuICAgICAgLy8gY29weSBvdmVyIHRoZSBsYXN0IHRyYW5zaXRpb24gcHJvcHM7XG4gICAgICAvLyBjb25zb2xlLmxvZygndW5jaGFuZ2VkJywga2V5KVxuICAgICAgY2hpbGRyZW5ba2V5XSA9IGNsb25lRWxlbWVudChjaGlsZCwge1xuICAgICAgICBvbkV4aXRlZDogb25FeGl0ZWQuYmluZChudWxsLCBjaGlsZCksXG4gICAgICAgIGluOiBwcmV2Q2hpbGQucHJvcHMuaW4sXG4gICAgICAgIGV4aXQ6IGdldFByb3AoY2hpbGQsICdleGl0JywgbmV4dFByb3BzKSxcbiAgICAgICAgZW50ZXI6IGdldFByb3AoY2hpbGQsICdlbnRlcicsIG5leHRQcm9wcylcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBjaGlsZHJlbjtcbn1cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL3V0aWxzL0NoaWxkTWFwcGluZy5qc1xuLy8gbW9kdWxlIGlkID0gNjZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEiLCIvKiBlc2xpbnQgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzOiAwICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuaW1wb3J0IFJvd1RlbXBsYXRlIGZyb20gJy4vcm93L3Jvdy10ZW1wbGF0ZSc7XG5pbXBvcnQgRm9vdGVyQ2VsbCBmcm9tICcuL2Zvb3Rlci1jZWxsJztcbmltcG9ydCBfIGZyb20gJy4vdXRpbHMnO1xuXG5jb25zdCBGb290ZXIgPSAocHJvcHMpID0+IHtcbiAgY29uc3QgeyBkYXRhLCBjbGFzc05hbWUsIGNvbHVtbnMsIHNlbGVjdFJvdywgZXhwYW5kUm93IH0gPSBwcm9wcztcblxuICBmdW5jdGlvbiByZW5kZXJDb250ZW50KCkge1xuICAgIHJldHVybiBjb2x1bW5zLm1hcCgoY29sdW1uLCBpKSA9PiB7XG4gICAgICBpZiAoY29sdW1uLmZvb3RlciA9PT0gdW5kZWZpbmVkIHx8IGNvbHVtbi5mb290ZXIgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjb2x1bW5EYXRhID0gXy5wbHVjayhkYXRhLCBjb2x1bW4uZGF0YUZpZWxkKTtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPEZvb3RlckNlbGxcbiAgICAgICAgICBpbmRleD17IGkgfVxuICAgICAgICAgIGtleT17IGNvbHVtbi5kYXRhRmllbGQgfVxuICAgICAgICAgIGNvbHVtbj17IGNvbHVtbiB9XG4gICAgICAgICAgY29sdW1uRGF0YT17IGNvbHVtbkRhdGEgfVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPHRmb290PlxuICAgICAgPFJvd1RlbXBsYXRlXG4gICAgICAgIHJlbmRlckNvbnRlbnQ9eyByZW5kZXJDb250ZW50IH1cbiAgICAgICAgc2VsZWN0Um93PXsgc2VsZWN0Um93IH1cbiAgICAgICAgZXhwYW5kUm93PXsgZXhwYW5kUm93IH1cbiAgICAgICAgY2xhc3NOYW1lPXsgY2xhc3NOYW1lIH1cbiAgICAgICAgY2VsbEVsPVwidGhcIlxuICAgICAgLz5cbiAgICA8L3Rmb290PlxuICApO1xufTtcblxuRm9vdGVyLnByb3BUeXBlcyA9IHtcbiAgZGF0YTogUHJvcFR5cGVzLmFycmF5LFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNvbHVtbnM6IFByb3BUeXBlcy5hcnJheSxcbiAgc2VsZWN0Um93OiBQcm9wVHlwZXMub2JqZWN0LFxuICBleHBhbmRSb3c6IFByb3BUeXBlcy5vYmplY3Rcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEZvb3RlcjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL2Zvb3Rlci5qcyIsIi8qIGVzbGludCByZWFjdC9yZXF1aXJlLWRlZmF1bHQtcHJvcHM6IDAgKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY3MgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG5pbXBvcnQgXyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBldmVudERlbGVnYXRlciBmcm9tICcuL2NlbGwtZXZlbnQtZGVsZWdhdGVyJztcblxuY2xhc3MgRm9vdGVyQ2VsbCBleHRlbmRzIGV2ZW50RGVsZWdhdGVyKFJlYWN0LkNvbXBvbmVudCkge1xuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBpbmRleCwgY29sdW1uLCBjb2x1bW5EYXRhIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3Qge1xuICAgICAgZm9vdGVyLFxuICAgICAgZm9vdGVyVGl0bGUsXG4gICAgICBmb290ZXJBbGlnbixcbiAgICAgIGZvb3RlckZvcm1hdHRlcixcbiAgICAgIGZvb3RlckV2ZW50cyxcbiAgICAgIGZvb3RlckNsYXNzZXMsXG4gICAgICBmb290ZXJTdHlsZSxcbiAgICAgIGZvb3RlckF0dHJzXG4gICAgfSA9IGNvbHVtbjtcblxuICAgIGNvbnN0IGRlbGVnYXRlRXZlbnRzID0gdGhpcy5kZWxlZ2F0ZShmb290ZXJFdmVudHMpO1xuICAgIGNvbnN0IGNlbGxBdHRycyA9IHtcbiAgICAgIC4uLihfLmlzRnVuY3Rpb24oZm9vdGVyQXR0cnMpID8gZm9vdGVyQXR0cnMoY29sdW1uLCBpbmRleCkgOiBmb290ZXJBdHRycyksXG4gICAgICAuLi5kZWxlZ2F0ZUV2ZW50c1xuICAgIH07XG5cblxuICAgIGxldCB0ZXh0ID0gJyc7XG4gICAgaWYgKF8uaXNTdHJpbmcoZm9vdGVyKSkge1xuICAgICAgdGV4dCA9IGZvb3RlcjtcbiAgICB9IGVsc2UgaWYgKF8uaXNGdW5jdGlvbihmb290ZXIpKSB7XG4gICAgICB0ZXh0ID0gZm9vdGVyKGNvbHVtbkRhdGEsIGNvbHVtbiwgaW5kZXgpO1xuICAgIH1cblxuICAgIGxldCBjZWxsU3R5bGUgPSB7fTtcbiAgICBjb25zdCBjZWxsQ2xhc3NlcyA9IF8uaXNGdW5jdGlvbihmb290ZXJDbGFzc2VzKSA/IGZvb3RlckNsYXNzZXMoY29sdW1uLCBpbmRleCkgOiBmb290ZXJDbGFzc2VzO1xuXG4gICAgaWYgKGZvb3RlclN0eWxlKSB7XG4gICAgICBjZWxsU3R5bGUgPSBfLmlzRnVuY3Rpb24oZm9vdGVyU3R5bGUpID8gZm9vdGVyU3R5bGUoY29sdW1uLCBpbmRleCkgOiBmb290ZXJTdHlsZTtcbiAgICAgIGNlbGxTdHlsZSA9IGNlbGxTdHlsZSA/IHsgLi4uY2VsbFN0eWxlIH0gOiBjZWxsU3R5bGU7XG4gICAgfVxuXG4gICAgaWYgKGZvb3RlclRpdGxlKSB7XG4gICAgICBjZWxsQXR0cnMudGl0bGUgPSBfLmlzRnVuY3Rpb24oZm9vdGVyVGl0bGUpID8gZm9vdGVyVGl0bGUoY29sdW1uLCBpbmRleCkgOiB0ZXh0O1xuICAgIH1cblxuICAgIGlmIChmb290ZXJBbGlnbikge1xuICAgICAgY2VsbFN0eWxlLnRleHRBbGlnbiA9IF8uaXNGdW5jdGlvbihmb290ZXJBbGlnbikgPyBmb290ZXJBbGlnbihjb2x1bW4sIGluZGV4KSA6IGZvb3RlckFsaWduO1xuICAgIH1cblxuICAgIGlmIChjZWxsQ2xhc3NlcykgY2VsbEF0dHJzLmNsYXNzTmFtZSA9IGNzKGNlbGxBdHRycy5jbGFzc05hbWUsIGNlbGxDbGFzc2VzKTtcbiAgICBpZiAoIV8uaXNFbXB0eU9iamVjdChjZWxsU3R5bGUpKSBjZWxsQXR0cnMuc3R5bGUgPSBjZWxsU3R5bGU7XG5cbiAgICBjb25zdCBjaGlsZHJlbiA9IGZvb3RlckZvcm1hdHRlciA/IGZvb3RlckZvcm1hdHRlcihjb2x1bW4sIGluZGV4LCB7IHRleHQgfSkgOiB0ZXh0O1xuXG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoJ3RoJywgY2VsbEF0dHJzLCBjaGlsZHJlbik7XG4gIH1cbn1cblxuRm9vdGVyQ2VsbC5wcm9wVHlwZXMgPSB7XG4gIGNvbHVtbkRhdGE6IFByb3BUeXBlcy5hcnJheSxcbiAgaW5kZXg6IFByb3BUeXBlcy5udW1iZXIsXG4gIGNvbHVtbjogUHJvcFR5cGVzLm9iamVjdFxufTtcblxuZXhwb3J0IGRlZmF1bHQgRm9vdGVyQ2VsbDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL2Zvb3Rlci1jZWxsLmpzIiwiaW1wb3J0IF8gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IENvbHVtblJlc29sdmVyIGZyb20gJy4vY29sdW1uLXJlc29sdmVyJztcblxuZXhwb3J0IGRlZmF1bHQgRXh0ZW5kQmFzZSA9PlxuICBjbGFzcyBUYWJsZVJlc29sdmVyIGV4dGVuZHMgQ29sdW1uUmVzb2x2ZXIoRXh0ZW5kQmFzZSkge1xuICAgIHZhbGlkYXRlUHJvcHMoKSB7XG4gICAgICBjb25zdCB7IGtleUZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgICAgaWYgKCFrZXlGaWVsZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BsZWFzZSBzcGVjaWZ5IGEgZmllbGQgYXMga2V5IHZpYSBrZXlGaWVsZCcpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMudmlzaWJsZUNvbHVtblNpemUoZmFsc2UpIDw9IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyB2aXNpYmxlIGNvbHVtbnMgZGV0ZWN0ZWQnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpc0VtcHR5KCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcHMuZGF0YS5sZW5ndGggPT09IDA7XG4gICAgfVxuXG4gICAgdmlzaWJsZVJvd3MoKSB7XG4gICAgICBjb25zdCB7IGRhdGEsIGhpZGRlblJvd3MsIGtleUZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgICAgaWYgKCFoaWRkZW5Sb3dzIHx8IGhpZGRlblJvd3MubGVuZ3RoID09PSAwKSByZXR1cm4gZGF0YTtcbiAgICAgIHJldHVybiBkYXRhLmZpbHRlcigocm93KSA9PiB7XG4gICAgICAgIGNvbnN0IGtleSA9IF8uZ2V0KHJvdywga2V5RmllbGQpO1xuICAgICAgICByZXR1cm4gIV8uY29udGFpbnMoaGlkZGVuUm93cywga2V5KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL3Byb3BzLXJlc29sdmVyL2luZGV4LmpzIiwiZXhwb3J0IGRlZmF1bHQgRXh0ZW5kQmFzZSA9PlxuICBjbGFzcyBDb2x1bW5SZXNvbHZlciBleHRlbmRzIEV4dGVuZEJhc2Uge1xuICAgIHZpc2libGVDb2x1bW5TaXplKGluY2x1ZGVTZWxlY3RDb2x1bW4gPSB0cnVlKSB7XG4gICAgICBsZXQgY29sdW1uTGVuO1xuICAgICAgaWYgKHRoaXMucHJvcHMuY29sdW1uVG9nZ2xlICYmIHRoaXMucHJvcHMuY29sdW1uVG9nZ2xlLnRvZ2dsZXMpIHtcbiAgICAgICAgY29uc3QgY29sdW1ucyA9IHRoaXMucHJvcHMuY29sdW1uVG9nZ2xlLnRvZ2dsZXM7XG4gICAgICAgIGNvbHVtbkxlbiA9IE9iamVjdC5rZXlzKGNvbHVtbnMpLmZpbHRlcihuYW1lID0+IGNvbHVtbnNbbmFtZV0pLmxlbmd0aDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbHVtbkxlbiA9IHRoaXMucHJvcHMuY29sdW1ucy5maWx0ZXIoYyA9PiAhYy5oaWRkZW4pLmxlbmd0aDtcbiAgICAgIH1cbiAgICAgIGlmICghaW5jbHVkZVNlbGVjdENvbHVtbikgcmV0dXJuIGNvbHVtbkxlbjtcbiAgICAgIGlmICh0aGlzLnByb3BzLnNlbGVjdFJvdyAmJiAhdGhpcy5wcm9wcy5zZWxlY3RSb3cuaGlkZVNlbGVjdENvbHVtbikge1xuICAgICAgICBjb2x1bW5MZW4gKz0gMTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnByb3BzLmV4cGFuZFJvdyAmJiB0aGlzLnByb3BzLmV4cGFuZFJvdy5zaG93RXhwYW5kQ29sdW1uKSB7XG4gICAgICAgIGNvbHVtbkxlbiArPSAxO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbHVtbkxlbjtcbiAgICB9XG4gIH07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9wcm9wcy1yZXNvbHZlci9jb2x1bW4tcmVzb2x2ZXIuanMiLCIvKiBlc2xpbnQgY2FtZWxjYXNlOiAwICovXG4vKiBlc2xpbnQgbm8tcmV0dXJuLWFzc2lnbjogMCAqL1xuLyogZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOiAwICovXG4vKiBlc2xpbnQgY2xhc3MtbWV0aG9kcy11c2UtdGhpczogMCAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSAnZXZlbnRzJztcbmltcG9ydCBfIGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCBjcmVhdGVEYXRhQ29udGV4dCBmcm9tICcuL2RhdGEtY29udGV4dCc7XG5pbXBvcnQgY3JlYXRlQ29sdW1uTWd0Q29udGV4dCBmcm9tICcuL2NvbHVtbi1jb250ZXh0JztcbmltcG9ydCBjcmVhdGVTb3J0Q29udGV4dCBmcm9tICcuL3NvcnQtY29udGV4dCc7XG5pbXBvcnQgU2VsZWN0aW9uQ29udGV4dCBmcm9tICcuL3NlbGVjdGlvbi1jb250ZXh0JztcbmltcG9ydCBSb3dFeHBhbmRDb250ZXh0IGZyb20gJy4vcm93LWV4cGFuZC1jb250ZXh0JztcbmltcG9ydCByZW1vdGVSZXNvbHZlciBmcm9tICcuLi9wcm9wcy1yZXNvbHZlci9yZW1vdGUtcmVzb2x2ZXInO1xuaW1wb3J0IHsgQm9vdHN0cmFwQ29udGV4dCB9IGZyb20gJy4vYm9vdHN0cmFwJztcbmltcG9ydCBkYXRhT3BlcmF0b3IgZnJvbSAnLi4vc3RvcmUvb3BlcmF0b3JzJztcblxuY29uc3Qgd2l0aENvbnRleHQgPSBCYXNlID0+XG4gIGNsYXNzIEJvb3RzdHJhcFRhYmxlQ29udGFpbmVyIGV4dGVuZHMgcmVtb3RlUmVzb2x2ZXIoQ29tcG9uZW50KSB7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgIHRoaXMuRGF0YUNvbnRleHQgPSBjcmVhdGVEYXRhQ29udGV4dCgpO1xuXG4gICAgICBpZiAocHJvcHMucmVnaXN0ZXJFeHBvc2VkQVBJKSB7XG4gICAgICAgIGNvbnN0IGV4cG9zZWRBUElFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICBleHBvc2VkQVBJRW1pdHRlci5vbignZ2V0LnRhYmxlLmRhdGEnLCBwYXlsb2FkID0+IHBheWxvYWQucmVzdWx0ID0gdGhpcy50YWJsZS5nZXREYXRhKCkpO1xuICAgICAgICBleHBvc2VkQVBJRW1pdHRlci5vbignZ2V0LnNlbGVjdGVkLnJvd3MnLCBwYXlsb2FkID0+IHBheWxvYWQucmVzdWx0ID0gdGhpcy5zZWxlY3Rpb25Db250ZXh0LmdldFNlbGVjdGVkKCkpO1xuICAgICAgICBleHBvc2VkQVBJRW1pdHRlci5vbignZ2V0LmZpbHRlcmVkLnJvd3MnLCAocGF5bG9hZCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLnNlYXJjaENvbnRleHQpIHtcbiAgICAgICAgICAgIHBheWxvYWQucmVzdWx0ID0gdGhpcy5zZWFyY2hDb250ZXh0LmdldFNlYXJjaGVkKCk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmZpbHRlckNvbnRleHQpIHtcbiAgICAgICAgICAgIHBheWxvYWQucmVzdWx0ID0gdGhpcy5maWx0ZXJDb250ZXh0LmdldEZpbHRlcmVkKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBheWxvYWQucmVzdWx0ID0gdGhpcy50YWJsZS5nZXREYXRhKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcHJvcHMucmVnaXN0ZXJFeHBvc2VkQVBJKGV4cG9zZWRBUElFbWl0dGVyKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByb3BzLmNvbHVtbnMuZmlsdGVyKGNvbCA9PiBjb2wuc29ydCkubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLlNvcnRDb250ZXh0ID0gY3JlYXRlU29ydENvbnRleHQoXG4gICAgICAgICAgZGF0YU9wZXJhdG9yLCB0aGlzLmlzUmVtb3RlU29ydCwgdGhpcy5oYW5kbGVSZW1vdGVTb3J0Q2hhbmdlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBwcm9wcy5jb2x1bW5Ub2dnbGUgfHxcbiAgICAgICAgcHJvcHMuY29sdW1ucy5maWx0ZXIoY29sID0+IGNvbC5oaWRkZW4pLmxlbmd0aCA+IDBcbiAgICAgICkge1xuICAgICAgICB0aGlzLkNvbHVtbk1hbmFnZW1lbnRDb250ZXh0ID0gY3JlYXRlQ29sdW1uTWd0Q29udGV4dCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvcHMuc2VsZWN0Um93KSB7XG4gICAgICAgIHRoaXMuU2VsZWN0aW9uQ29udGV4dCA9IFNlbGVjdGlvbkNvbnRleHQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9wcy5leHBhbmRSb3cpIHtcbiAgICAgICAgdGhpcy5Sb3dFeHBhbmRDb250ZXh0ID0gUm93RXhwYW5kQ29udGV4dDtcbiAgICAgIH1cblxuICAgICAgaWYgKHByb3BzLmNlbGxFZGl0ICYmIHByb3BzLmNlbGxFZGl0LmNyZWF0ZUNvbnRleHQpIHtcbiAgICAgICAgdGhpcy5DZWxsRWRpdENvbnRleHQgPSBwcm9wcy5jZWxsRWRpdC5jcmVhdGVDb250ZXh0KFxuICAgICAgICAgIF8sIGRhdGFPcGVyYXRvciwgdGhpcy5pc1JlbW90ZUNlbGxFZGl0LCB0aGlzLmhhbmRsZVJlbW90ZUNlbGxDaGFuZ2UpO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvcHMuZmlsdGVyKSB7XG4gICAgICAgIHRoaXMuRmlsdGVyQ29udGV4dCA9IHByb3BzLmZpbHRlci5jcmVhdGVDb250ZXh0KFxuICAgICAgICAgIF8sIHRoaXMuaXNSZW1vdGVGaWx0ZXJpbmcsIHRoaXMuaGFuZGxlUmVtb3RlRmlsdGVyQ2hhbmdlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByb3BzLnBhZ2luYXRpb24pIHtcbiAgICAgICAgdGhpcy5QYWdpbmF0aW9uQ29udGV4dCA9IHByb3BzLnBhZ2luYXRpb24uY3JlYXRlQ29udGV4dCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvcHMuc2VhcmNoICYmIHByb3BzLnNlYXJjaC5zZWFyY2hDb250ZXh0KSB7XG4gICAgICAgIHRoaXMuU2VhcmNoQ29udGV4dCA9IHByb3BzLnNlYXJjaC5zZWFyY2hDb250ZXh0KFxuICAgICAgICAgIF8sIHRoaXMuaXNSZW1vdGVTZWFyY2gsIHRoaXMuaGFuZGxlUmVtb3RlU2VhcmNoQ2hhbmdlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByb3BzLnNldERlcGVuZGVuY3lNb2R1bGVzKSB7XG4gICAgICAgIHByb3BzLnNldERlcGVuZGVuY3lNb2R1bGVzKF8pO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvcHMuc2V0UGFnaW5hdGlvblJlbW90ZUVtaXR0ZXIpIHtcbiAgICAgICAgcHJvcHMuc2V0UGFnaW5hdGlvblJlbW90ZUVtaXR0ZXIodGhpcy5yZW1vdGVFbWl0dGVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpIHtcbiAgICAgIGlmIChuZXh0UHJvcHMuY29sdW1ucy5maWx0ZXIoY29sID0+IGNvbC5zb3J0KS5sZW5ndGggPD0gMCkge1xuICAgICAgICB0aGlzLlNvcnRDb250ZXh0ID0gbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuU29ydENvbnRleHQpIHtcbiAgICAgICAgdGhpcy5Tb3J0Q29udGV4dCA9IGNyZWF0ZVNvcnRDb250ZXh0KFxuICAgICAgICAgIGRhdGFPcGVyYXRvciwgdGhpcy5pc1JlbW90ZVNvcnQsIHRoaXMuaGFuZGxlUmVtb3RlU29ydENoYW5nZSk7XG4gICAgICB9XG4gICAgICBpZiAoIW5leHRQcm9wcy5wYWdpbmF0aW9uICYmIHRoaXMucHJvcHMucGFnaW5hdGlvbikge1xuICAgICAgICB0aGlzLlBhZ2luYXRpb25Db250ZXh0ID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmIChuZXh0UHJvcHMucGFnaW5hdGlvbiAmJiAhdGhpcy5wcm9wcy5wYWdpbmF0aW9uKSB7XG4gICAgICAgIHRoaXMuUGFnaW5hdGlvbkNvbnRleHQgPSBuZXh0UHJvcHMucGFnaW5hdGlvbi5jcmVhdGVDb250ZXh0KFxuICAgICAgICAgIHRoaXMuaXNSZW1vdGVQYWdpbmF0aW9uLCB0aGlzLmhhbmRsZVJlbW90ZVBhZ2VDaGFuZ2UpO1xuICAgICAgfVxuICAgICAgaWYgKCFuZXh0UHJvcHMuY2VsbEVkaXQgJiYgdGhpcy5wcm9wcy5jZWxsRWRpdCkge1xuICAgICAgICB0aGlzLkNlbGxFZGl0Q29udGV4dCA9IG51bGw7XG4gICAgICB9XG4gICAgICBpZiAobmV4dFByb3BzLmNlbGxFZGl0ICYmICF0aGlzLnByb3BzLmNlbGxFZGl0KSB7XG4gICAgICAgIHRoaXMuQ2VsbEVkaXRDb250ZXh0ID0gbmV4dFByb3BzLmNlbGxFZGl0LmNyZWF0ZUNvbnRleHQoXG4gICAgICAgICAgXywgZGF0YU9wZXJhdG9yLCB0aGlzLmlzUmVtb3RlQ2VsbEVkaXQsIHRoaXMuaGFuZGxlUmVtb3RlQ2VsbENoYW5nZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVuZGVyQmFzZSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHJvb3RQcm9wcyxcbiAgICAgICAgZmlsdGVyUHJvcHMsXG4gICAgICAgIHNlYXJjaFByb3BzLFxuICAgICAgICBzb3J0UHJvcHMsXG4gICAgICAgIHBhZ2luYXRpb25Qcm9wcyxcbiAgICAgICAgY29sdW1uVG9nZ2xlUHJvcHNcbiAgICAgICkgPT4gKFxuICAgICAgICA8QmFzZVxuICAgICAgICAgIHJlZj17IG4gPT4gdGhpcy50YWJsZSA9IG4gfVxuICAgICAgICAgIHsgLi4udGhpcy5wcm9wcyB9XG4gICAgICAgICAgeyAuLi5zb3J0UHJvcHMgfVxuICAgICAgICAgIHsgLi4uZmlsdGVyUHJvcHMgfVxuICAgICAgICAgIHsgLi4uc2VhcmNoUHJvcHMgfVxuICAgICAgICAgIHsgLi4ucGFnaW5hdGlvblByb3BzIH1cbiAgICAgICAgICB7IC4uLmNvbHVtblRvZ2dsZVByb3BzIH1cbiAgICAgICAgICBkYXRhPXsgcm9vdFByb3BzLmdldERhdGEoZmlsdGVyUHJvcHMsIHNlYXJjaFByb3BzLCBzb3J0UHJvcHMsIHBhZ2luYXRpb25Qcm9wcykgfVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZW5kZXJXaXRoQ29sdW1uTWFuYWdlbWVudEN0eChiYXNlLCBiYXNlUHJvcHMpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHJvb3RQcm9wcyxcbiAgICAgICAgZmlsdGVyUHJvcHMsXG4gICAgICAgIHNlYXJjaFByb3BzLFxuICAgICAgICBzb3J0UHJvcHMsXG4gICAgICAgIHBhZ2luYXRpb25Qcm9wc1xuICAgICAgKSA9PiAoXG4gICAgICAgIDx0aGlzLkNvbHVtbk1hbmFnZW1lbnRDb250ZXh0LlByb3ZpZGVyXG4gICAgICAgICAgeyAuLi5iYXNlUHJvcHMgfVxuICAgICAgICAgIHRvZ2dsZXM9eyB0aGlzLnByb3BzLmNvbHVtblRvZ2dsZSA/IHRoaXMucHJvcHMuY29sdW1uVG9nZ2xlLnRvZ2dsZXMgOiBudWxsIH1cbiAgICAgICAgPlxuICAgICAgICAgIDx0aGlzLkNvbHVtbk1hbmFnZW1lbnRDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjb2x1bW5Ub2dnbGVQcm9wcyA9PiBiYXNlKFxuICAgICAgICAgICAgICAgIHJvb3RQcm9wcyxcbiAgICAgICAgICAgICAgICBmaWx0ZXJQcm9wcyxcbiAgICAgICAgICAgICAgICBzZWFyY2hQcm9wcyxcbiAgICAgICAgICAgICAgICBzb3J0UHJvcHMsXG4gICAgICAgICAgICAgICAgcGFnaW5hdGlvblByb3BzLFxuICAgICAgICAgICAgICAgIGNvbHVtblRvZ2dsZVByb3BzXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3RoaXMuQ29sdW1uTWFuYWdlbWVudENvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgIDwvdGhpcy5Db2x1bW5NYW5hZ2VtZW50Q29udGV4dC5Qcm92aWRlcj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmVuZGVyV2l0aFNlbGVjdGlvbkN0eChiYXNlLCBiYXNlUHJvcHMpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHJvb3RQcm9wcyxcbiAgICAgICAgZmlsdGVyUHJvcHMsXG4gICAgICAgIHNlYXJjaFByb3BzLFxuICAgICAgICBzb3J0UHJvcHMsXG4gICAgICAgIHBhZ2luYXRpb25Qcm9wc1xuICAgICAgKSA9PiAoXG4gICAgICAgIDx0aGlzLlNlbGVjdGlvbkNvbnRleHQuUHJvdmlkZXJcbiAgICAgICAgICB7IC4uLmJhc2VQcm9wcyB9XG4gICAgICAgICAgcmVmPXsgbiA9PiB0aGlzLnNlbGVjdGlvbkNvbnRleHQgPSBuIH1cbiAgICAgICAgICBzZWxlY3RSb3c9eyB0aGlzLnByb3BzLnNlbGVjdFJvdyB9XG4gICAgICAgICAgZGF0YT17IHJvb3RQcm9wcy5nZXREYXRhKGZpbHRlclByb3BzLCBzZWFyY2hQcm9wcywgc29ydFByb3BzLCBwYWdpbmF0aW9uUHJvcHMpIH1cbiAgICAgICAgPlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJhc2UoXG4gICAgICAgICAgICAgIHJvb3RQcm9wcyxcbiAgICAgICAgICAgICAgZmlsdGVyUHJvcHMsXG4gICAgICAgICAgICAgIHNlYXJjaFByb3BzLFxuICAgICAgICAgICAgICBzb3J0UHJvcHMsXG4gICAgICAgICAgICAgIHBhZ2luYXRpb25Qcm9wc1xuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgPC90aGlzLlNlbGVjdGlvbkNvbnRleHQuUHJvdmlkZXI+XG4gICAgICApO1xuICAgIH1cblxuICAgIHJlbmRlcldpdGhSb3dFeHBhbmRDdHgoYmFzZSwgYmFzZVByb3BzKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICByb290UHJvcHMsXG4gICAgICAgIGZpbHRlclByb3BzLFxuICAgICAgICBzZWFyY2hQcm9wcyxcbiAgICAgICAgc29ydFByb3BzLFxuICAgICAgICBwYWdpbmF0aW9uUHJvcHNcbiAgICAgICkgPT4gKFxuICAgICAgICA8dGhpcy5Sb3dFeHBhbmRDb250ZXh0LlByb3ZpZGVyXG4gICAgICAgICAgeyAuLi5iYXNlUHJvcHMgfVxuICAgICAgICAgIHJlZj17IG4gPT4gdGhpcy5yb3dFeHBhbmRDb250ZXh0ID0gbiB9XG4gICAgICAgICAgZXhwYW5kUm93PXsgdGhpcy5wcm9wcy5leHBhbmRSb3cgfVxuICAgICAgICAgIGRhdGE9eyByb290UHJvcHMuZ2V0RGF0YShmaWx0ZXJQcm9wcywgc2VhcmNoUHJvcHMsIHNvcnRQcm9wcywgcGFnaW5hdGlvblByb3BzKSB9XG4gICAgICAgID5cbiAgICAgICAgICB7XG4gICAgICAgICAgICBiYXNlKFxuICAgICAgICAgICAgICByb290UHJvcHMsXG4gICAgICAgICAgICAgIGZpbHRlclByb3BzLFxuICAgICAgICAgICAgICBzZWFyY2hQcm9wcyxcbiAgICAgICAgICAgICAgc29ydFByb3BzLFxuICAgICAgICAgICAgICBwYWdpbmF0aW9uUHJvcHNcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG4gICAgICAgIDwvdGhpcy5Sb3dFeHBhbmRDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZW5kZXJXaXRoUGFnaW5hdGlvbkN0eChiYXNlKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICByb290UHJvcHMsXG4gICAgICAgIGZpbHRlclByb3BzLFxuICAgICAgICBzZWFyY2hQcm9wcyxcbiAgICAgICAgc29ydFByb3BzXG4gICAgICApID0+IChcbiAgICAgICAgPHRoaXMuUGFnaW5hdGlvbkNvbnRleHQuUHJvdmlkZXJcbiAgICAgICAgICByZWY9eyBuID0+IHRoaXMucGFnaW5hdGlvbkNvbnRleHQgPSBuIH1cbiAgICAgICAgICBwYWdpbmF0aW9uPXsgdGhpcy5wcm9wcy5wYWdpbmF0aW9uIH1cbiAgICAgICAgICBkYXRhPXsgcm9vdFByb3BzLmdldERhdGEoZmlsdGVyUHJvcHMsIHNlYXJjaFByb3BzLCBzb3J0UHJvcHMpIH1cbiAgICAgICAgICBib290c3RyYXA0PXsgdGhpcy5wcm9wcy5ib290c3RyYXA0IH1cbiAgICAgICAgICBpc1JlbW90ZVBhZ2luYXRpb249eyB0aGlzLmlzUmVtb3RlUGFnaW5hdGlvbiB9XG4gICAgICAgICAgcmVtb3RlRW1pdHRlcj17IHRoaXMucmVtb3RlRW1pdHRlciB9XG4gICAgICAgICAgb25EYXRhU2l6ZUNoYW5nZT17IHRoaXMucHJvcHMub25EYXRhU2l6ZUNoYW5nZSB9XG4gICAgICAgICAgdGFibGVJZD17IHRoaXMucHJvcHMuaWQgfVxuICAgICAgICA+XG4gICAgICAgICAgPHRoaXMuUGFnaW5hdGlvbkNvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHBhZ2luYXRpb25Qcm9wcyA9PiBiYXNlKFxuICAgICAgICAgICAgICAgIHJvb3RQcm9wcyxcbiAgICAgICAgICAgICAgICBmaWx0ZXJQcm9wcyxcbiAgICAgICAgICAgICAgICBzZWFyY2hQcm9wcyxcbiAgICAgICAgICAgICAgICBzb3J0UHJvcHMsXG4gICAgICAgICAgICAgICAgcGFnaW5hdGlvblByb3BzXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3RoaXMuUGFnaW5hdGlvbkNvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgIDwvdGhpcy5QYWdpbmF0aW9uQ29udGV4dC5Qcm92aWRlcj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmVuZGVyV2l0aFNvcnRDdHgoYmFzZSwgYmFzZVByb3BzKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICByb290UHJvcHMsXG4gICAgICAgIGZpbHRlclByb3BzLFxuICAgICAgICBzZWFyY2hQcm9wc1xuICAgICAgKSA9PiAoXG4gICAgICAgIDx0aGlzLlNvcnRDb250ZXh0LlByb3ZpZGVyXG4gICAgICAgICAgeyAuLi5iYXNlUHJvcHMgfVxuICAgICAgICAgIHJlZj17IG4gPT4gdGhpcy5zb3J0Q29udGV4dCA9IG4gfVxuICAgICAgICAgIGRlZmF1bHRTb3J0ZWQ9eyB0aGlzLnByb3BzLmRlZmF1bHRTb3J0ZWQgfVxuICAgICAgICAgIGRlZmF1bHRTb3J0RGlyZWN0aW9uPXsgdGhpcy5wcm9wcy5kZWZhdWx0U29ydERpcmVjdGlvbiB9XG4gICAgICAgICAgc29ydD17IHRoaXMucHJvcHMuc29ydCB9XG4gICAgICAgICAgZGF0YT17IHJvb3RQcm9wcy5nZXREYXRhKGZpbHRlclByb3BzLCBzZWFyY2hQcm9wcykgfVxuICAgICAgICA+XG4gICAgICAgICAgPHRoaXMuU29ydENvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHNvcnRQcm9wcyA9PiBiYXNlKFxuICAgICAgICAgICAgICAgIHJvb3RQcm9wcyxcbiAgICAgICAgICAgICAgICBmaWx0ZXJQcm9wcyxcbiAgICAgICAgICAgICAgICBzZWFyY2hQcm9wcyxcbiAgICAgICAgICAgICAgICBzb3J0UHJvcHMsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3RoaXMuU29ydENvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgIDwvdGhpcy5Tb3J0Q29udGV4dC5Qcm92aWRlcj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmVuZGVyV2l0aFNlYXJjaEN0eChiYXNlLCBiYXNlUHJvcHMpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHJvb3RQcm9wcyxcbiAgICAgICAgZmlsdGVyUHJvcHNcbiAgICAgICkgPT4gKFxuICAgICAgICA8dGhpcy5TZWFyY2hDb250ZXh0LlByb3ZpZGVyXG4gICAgICAgICAgeyAuLi5iYXNlUHJvcHMgfVxuICAgICAgICAgIHJlZj17IG4gPT4gdGhpcy5zZWFyY2hDb250ZXh0ID0gbiB9XG4gICAgICAgICAgZGF0YT17IHJvb3RQcm9wcy5nZXREYXRhKGZpbHRlclByb3BzKSB9XG4gICAgICAgICAgc2VhcmNoVGV4dD17IHRoaXMucHJvcHMuc2VhcmNoLnNlYXJjaFRleHQgfVxuICAgICAgICAgIGRhdGFDaGFuZ2VMaXN0ZW5lcj17IHRoaXMucHJvcHMuZGF0YUNoYW5nZUxpc3RlbmVyIH1cbiAgICAgICAgPlxuICAgICAgICAgIDx0aGlzLlNlYXJjaENvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHNlYXJjaFByb3BzID0+IGJhc2UoXG4gICAgICAgICAgICAgICAgcm9vdFByb3BzLFxuICAgICAgICAgICAgICAgIGZpbHRlclByb3BzLFxuICAgICAgICAgICAgICAgIHNlYXJjaFByb3BzXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3RoaXMuU2VhcmNoQ29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgPC90aGlzLlNlYXJjaENvbnRleHQuUHJvdmlkZXI+XG4gICAgICApO1xuICAgIH1cblxuICAgIHJlbmRlcldpdGhGaWx0ZXJDdHgoYmFzZSwgYmFzZVByb3BzKSB7XG4gICAgICByZXR1cm4gcm9vdFByb3BzID0+IChcbiAgICAgICAgPHRoaXMuRmlsdGVyQ29udGV4dC5Qcm92aWRlclxuICAgICAgICAgIHsgLi4uYmFzZVByb3BzIH1cbiAgICAgICAgICByZWY9eyBuID0+IHRoaXMuZmlsdGVyQ29udGV4dCA9IG4gfVxuICAgICAgICAgIGRhdGE9eyByb290UHJvcHMuZ2V0RGF0YSgpIH1cbiAgICAgICAgICBmaWx0ZXI9eyB0aGlzLnByb3BzLmZpbHRlci5vcHRpb25zIHx8IHt9IH1cbiAgICAgICAgICBkYXRhQ2hhbmdlTGlzdGVuZXI9eyB0aGlzLnByb3BzLmRhdGFDaGFuZ2VMaXN0ZW5lciB9XG4gICAgICAgID5cbiAgICAgICAgICA8dGhpcy5GaWx0ZXJDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBmaWx0ZXJQcm9wcyA9PiBiYXNlKFxuICAgICAgICAgICAgICAgIHJvb3RQcm9wcyxcbiAgICAgICAgICAgICAgICBmaWx0ZXJQcm9wc1xuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC90aGlzLkZpbHRlckNvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgIDwvdGhpcy5GaWx0ZXJDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZW5kZXJXaXRoQ2VsbEVkaXRDdHgoYmFzZSwgYmFzZVByb3BzKSB7XG4gICAgICByZXR1cm4gcm9vdFByb3BzID0+IChcbiAgICAgICAgPHRoaXMuQ2VsbEVkaXRDb250ZXh0LlByb3ZpZGVyXG4gICAgICAgICAgeyAuLi5iYXNlUHJvcHMgfVxuICAgICAgICAgIHJlZj17IG4gPT4gdGhpcy5jZWxsRWRpdENvbnRleHQgPSBuIH1cbiAgICAgICAgICBzZWxlY3RSb3c9eyB0aGlzLnByb3BzLnNlbGVjdFJvdyB9XG4gICAgICAgICAgY2VsbEVkaXQ9eyB0aGlzLnByb3BzLmNlbGxFZGl0IH1cbiAgICAgICAgICBkYXRhPXsgcm9vdFByb3BzLmdldERhdGEoKSB9XG4gICAgICAgID5cbiAgICAgICAgICB7IGJhc2Uocm9vdFByb3BzKSB9XG4gICAgICAgIDwvdGhpcy5DZWxsRWRpdENvbnRleHQuUHJvdmlkZXI+XG4gICAgICApO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgIGNvbnN0IHsga2V5RmllbGQsIGNvbHVtbnMsIGJvb3RzdHJhcDQgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCBiYXNlUHJvcHMgPSB7IGtleUZpZWxkLCBjb2x1bW5zIH07XG5cbiAgICAgIGxldCBiYXNlID0gdGhpcy5yZW5kZXJCYXNlKCk7XG5cbiAgICAgIGlmICh0aGlzLkNvbHVtbk1hbmFnZW1lbnRDb250ZXh0KSB7XG4gICAgICAgIGJhc2UgPSB0aGlzLnJlbmRlcldpdGhDb2x1bW5NYW5hZ2VtZW50Q3R4KGJhc2UsIGJhc2VQcm9wcyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLlNlbGVjdGlvbkNvbnRleHQpIHtcbiAgICAgICAgYmFzZSA9IHRoaXMucmVuZGVyV2l0aFNlbGVjdGlvbkN0eChiYXNlLCBiYXNlUHJvcHMpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5Sb3dFeHBhbmRDb250ZXh0KSB7XG4gICAgICAgIGJhc2UgPSB0aGlzLnJlbmRlcldpdGhSb3dFeHBhbmRDdHgoYmFzZSwgYmFzZVByb3BzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuUGFnaW5hdGlvbkNvbnRleHQpIHtcbiAgICAgICAgYmFzZSA9IHRoaXMucmVuZGVyV2l0aFBhZ2luYXRpb25DdHgoYmFzZSwgYmFzZVByb3BzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuU29ydENvbnRleHQpIHtcbiAgICAgICAgYmFzZSA9IHRoaXMucmVuZGVyV2l0aFNvcnRDdHgoYmFzZSwgYmFzZVByb3BzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuU2VhcmNoQ29udGV4dCkge1xuICAgICAgICBiYXNlID0gdGhpcy5yZW5kZXJXaXRoU2VhcmNoQ3R4KGJhc2UsIGJhc2VQcm9wcyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLkZpbHRlckNvbnRleHQpIHtcbiAgICAgICAgYmFzZSA9IHRoaXMucmVuZGVyV2l0aEZpbHRlckN0eChiYXNlLCBiYXNlUHJvcHMpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5DZWxsRWRpdENvbnRleHQpIHtcbiAgICAgICAgYmFzZSA9IHRoaXMucmVuZGVyV2l0aENlbGxFZGl0Q3R4KGJhc2UsIGJhc2VQcm9wcyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxCb290c3RyYXBDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXsgeyBib290c3RyYXA0IH0gfT5cbiAgICAgICAgICA8dGhpcy5EYXRhQ29udGV4dC5Qcm92aWRlclxuICAgICAgICAgICAgeyAuLi5iYXNlUHJvcHMgfVxuICAgICAgICAgICAgZGF0YT17IHRoaXMucHJvcHMuZGF0YSB9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHRoaXMuRGF0YUNvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBiYXNlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvdGhpcy5EYXRhQ29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgICA8L3RoaXMuRGF0YUNvbnRleHQuUHJvdmlkZXI+XG4gICAgICAgIDwvQm9vdHN0cmFwQ29udGV4dC5Qcm92aWRlcj5cbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoQ29udGV4dDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL2NvbnRleHRzL2luZGV4LmpzIiwiLyogZXNsaW50IGNhbWVsY2FzZTogMCAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5cbmV4cG9ydCBkZWZhdWx0ICgpID0+IHtcbiAgY29uc3QgRGF0YUNvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0KCk7XG5cbiAgY2xhc3MgRGF0YVByb3ZpZGVyIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgICAgZGF0YTogUHJvcFR5cGVzLmFycmF5LmlzUmVxdWlyZWQsXG4gICAgICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZFxuICAgIH1cblxuICAgIHN0YXRlID0geyBkYXRhOiB0aGlzLnByb3BzLmRhdGEgfTtcblxuICAgIGdldERhdGEgPSAoZmlsdGVyUHJvcHMsIHNlYXJjaFByb3BzLCBzb3J0UHJvcHMsIHBhZ2luYXRpb25Qcm9wcykgPT4ge1xuICAgICAgaWYgKHBhZ2luYXRpb25Qcm9wcykgcmV0dXJuIHBhZ2luYXRpb25Qcm9wcy5kYXRhO1xuICAgICAgZWxzZSBpZiAoc29ydFByb3BzKSByZXR1cm4gc29ydFByb3BzLmRhdGE7XG4gICAgICBlbHNlIGlmIChzZWFyY2hQcm9wcykgcmV0dXJuIHNlYXJjaFByb3BzLmRhdGE7XG4gICAgICBlbHNlIGlmIChmaWx0ZXJQcm9wcykgcmV0dXJuIGZpbHRlclByb3BzLmRhdGE7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5kYXRhO1xuICAgIH1cblxuICAgIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xuICAgICAgdGhpcy5zZXRTdGF0ZSgoKSA9PiAoeyBkYXRhOiBuZXh0UHJvcHMuZGF0YSB9KSk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPERhdGFDb250ZXh0LlByb3ZpZGVyXG4gICAgICAgICAgdmFsdWU9eyB7XG4gICAgICAgICAgICBkYXRhOiB0aGlzLnN0YXRlLmRhdGEsXG4gICAgICAgICAgICBnZXREYXRhOiB0aGlzLmdldERhdGFcbiAgICAgICAgICB9IH1cbiAgICAgICAgPlxuICAgICAgICAgIHsgdGhpcy5wcm9wcy5jaGlsZHJlbiB9XG4gICAgICAgIDwvRGF0YUNvbnRleHQuUHJvdmlkZXI+XG4gICAgICApO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIFByb3ZpZGVyOiBEYXRhUHJvdmlkZXIsXG4gICAgQ29uc3VtZXI6IERhdGFDb250ZXh0LkNvbnN1bWVyXG4gIH07XG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9zcmMvY29udGV4dHMvZGF0YS1jb250ZXh0LmpzIiwiLyogZXNsaW50IHJlYWN0L3Byb3AtdHlwZXM6IDAgKi9cbi8qIGVzbGludCByZWFjdC9wcmVmZXItc3RhdGVsZXNzLWZ1bmN0aW9uOiAwICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICBjb25zdCBDb2x1bW5NYW5hZ2VtZW50Q29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQoKTtcblxuICBjbGFzcyBDb2x1bW5NYW5hZ2VtZW50UHJvdmlkZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICAgIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgICBjb2x1bW5zOiBQcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZCxcbiAgICAgIHRvZ2dsZXM6IFByb3BUeXBlcy5vYmplY3RcbiAgICB9XG5cbiAgICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgICAgdG9nZ2xlczogbnVsbFxuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgIGxldCB0b2dnbGVDb2x1bW47XG4gICAgICBjb25zdCB7IGNvbHVtbnMsIHRvZ2dsZXMgfSA9IHRoaXMucHJvcHM7XG4gICAgICBpZiAodG9nZ2xlcykge1xuICAgICAgICB0b2dnbGVDb2x1bW4gPSBjb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gdG9nZ2xlc1tjb2x1bW4uZGF0YUZpZWxkXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0b2dnbGVDb2x1bW4gPSBjb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gIWNvbHVtbi5oaWRkZW4pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPENvbHVtbk1hbmFnZW1lbnRDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXsgeyBjb2x1bW5zOiB0b2dnbGVDb2x1bW4gfSB9PlxuICAgICAgICAgIHsgdGhpcy5wcm9wcy5jaGlsZHJlbiB9XG4gICAgICAgIDwvQ29sdW1uTWFuYWdlbWVudENvbnRleHQuUHJvdmlkZXI+XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgUHJvdmlkZXI6IENvbHVtbk1hbmFnZW1lbnRQcm92aWRlcixcbiAgICBDb25zdW1lcjogQ29sdW1uTWFuYWdlbWVudENvbnRleHQuQ29uc3VtZXJcbiAgfTtcbn07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9jb250ZXh0cy9jb2x1bW4tY29udGV4dC5qcyIsIi8qIGVzbGludCBjYW1lbGNhc2U6IDAgKi9cbi8qIGVzbGludCByZWFjdC9yZXF1aXJlLWRlZmF1bHQtcHJvcHM6IDAgKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IENvbnN0IGZyb20gJy4uL2NvbnN0JztcblxuZXhwb3J0IGRlZmF1bHQgKFxuICBkYXRhT3BlcmF0b3IsXG4gIGlzUmVtb3RlU29ydCxcbiAgaGFuZGxlU29ydENoYW5nZVxuKSA9PiB7XG4gIGNvbnN0IFNvcnRDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dCgpO1xuXG4gIGNsYXNzIFNvcnRQcm92aWRlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gICAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICAgIGRhdGE6IFByb3BUeXBlcy5hcnJheS5pc1JlcXVpcmVkLFxuICAgICAgY29sdW1uczogUHJvcFR5cGVzLmFycmF5LmlzUmVxdWlyZWQsXG4gICAgICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcbiAgICAgIGRlZmF1bHRTb3J0ZWQ6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICAgIGRhdGFGaWVsZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgICAgICBvcmRlcjogUHJvcFR5cGVzLm9uZU9mKFtDb25zdC5TT1JUX0RFU0MsIENvbnN0LlNPUlRfQVNDXSkuaXNSZXF1aXJlZFxuICAgICAgfSkpLFxuICAgICAgc29ydDogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgICAgZGF0YUZpZWxkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICBvcmRlcjogUHJvcFR5cGVzLm9uZU9mKFtDb25zdC5TT1JUX0RFU0MsIENvbnN0LlNPUlRfQVNDXSksXG4gICAgICAgIHNvcnRGdW5jOiBQcm9wVHlwZXMuZnVuY1xuICAgICAgfSksXG4gICAgICBkZWZhdWx0U29ydERpcmVjdGlvbjogUHJvcFR5cGVzLm9uZU9mKFtDb25zdC5TT1JUX0RFU0MsIENvbnN0LlNPUlRfQVNDXSlcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgbGV0IHNvcnRPcmRlcjtcbiAgICAgIGxldCBzb3J0Q29sdW1uO1xuICAgICAgY29uc3QgeyBkZWZhdWx0U29ydGVkLCBkZWZhdWx0U29ydERpcmVjdGlvbiwgc29ydCB9ID0gcHJvcHM7XG5cbiAgICAgIGlmIChkZWZhdWx0U29ydGVkICYmIGRlZmF1bHRTb3J0ZWQubGVuZ3RoID4gMCkge1xuICAgICAgICBzb3J0T3JkZXIgPSBkZWZhdWx0U29ydGVkWzBdLm9yZGVyIHx8IGRlZmF1bHRTb3J0RGlyZWN0aW9uO1xuICAgICAgICBzb3J0Q29sdW1uID0gdGhpcy5pbml0U29ydChkZWZhdWx0U29ydGVkWzBdLmRhdGFGaWVsZCwgc29ydE9yZGVyKTtcbiAgICAgIH0gZWxzZSBpZiAoc29ydCAmJiBzb3J0LmRhdGFGaWVsZCAmJiBzb3J0Lm9yZGVyKSB7XG4gICAgICAgIHNvcnRPcmRlciA9IHNvcnQub3JkZXI7XG4gICAgICAgIHNvcnRDb2x1bW4gPSB0aGlzLmluaXRTb3J0KHNvcnQuZGF0YUZpZWxkLCBzb3J0T3JkZXIpO1xuICAgICAgfVxuICAgICAgdGhpcy5zdGF0ZSA9IHsgc29ydE9yZGVyLCBzb3J0Q29sdW1uIH07XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBjb25zdCB7IHNvcnRPcmRlciwgc29ydENvbHVtbiB9ID0gdGhpcy5zdGF0ZTtcbiAgICAgIGlmIChpc1JlbW90ZVNvcnQoKSAmJiBzb3J0T3JkZXIgJiYgc29ydENvbHVtbikge1xuICAgICAgICBoYW5kbGVTb3J0Q2hhbmdlKHNvcnRDb2x1bW4uZGF0YUZpZWxkLCBzb3J0T3JkZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xuICAgICAgY29uc3QgeyBzb3J0LCBjb2x1bW5zIH0gPSBuZXh0UHJvcHM7XG4gICAgICBpZiAoc29ydCAmJiBzb3J0LmRhdGFGaWVsZCAmJiBzb3J0Lm9yZGVyKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIHNvcnRPcmRlcjogc29ydC5vcmRlcixcbiAgICAgICAgICBzb3J0Q29sdW1uOiBjb2x1bW5zLmZpbmQoY29sID0+IGNvbC5kYXRhRmllbGQgPT09IHNvcnQuZGF0YUZpZWxkKVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0U29ydChzb3J0RmllbGQsIHNvcnRPcmRlcikge1xuICAgICAgbGV0IHNvcnRDb2x1bW47XG4gICAgICBjb25zdCB7IGNvbHVtbnMgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCBzb3J0Q29sdW1ucyA9IGNvbHVtbnMuZmlsdGVyKGNvbCA9PiBjb2wuZGF0YUZpZWxkID09PSBzb3J0RmllbGQpO1xuICAgICAgaWYgKHNvcnRDb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgc29ydENvbHVtbiA9IHNvcnRDb2x1bW5zWzBdO1xuXG4gICAgICAgIGlmIChzb3J0Q29sdW1uLm9uU29ydCkge1xuICAgICAgICAgIHNvcnRDb2x1bW4ub25Tb3J0KHNvcnRGaWVsZCwgc29ydE9yZGVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHNvcnRDb2x1bW47XG4gICAgfVxuXG4gICAgaGFuZGxlU29ydCA9IChjb2x1bW4pID0+IHtcbiAgICAgIGNvbnN0IHNvcnRPcmRlciA9IGRhdGFPcGVyYXRvci5uZXh0T3JkZXIoY29sdW1uLCB0aGlzLnN0YXRlLCB0aGlzLnByb3BzLmRlZmF1bHRTb3J0RGlyZWN0aW9uKTtcblxuICAgICAgaWYgKGNvbHVtbi5vblNvcnQpIHtcbiAgICAgICAgY29sdW1uLm9uU29ydChjb2x1bW4uZGF0YUZpZWxkLCBzb3J0T3JkZXIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNSZW1vdGVTb3J0KCkpIHtcbiAgICAgICAgaGFuZGxlU29ydENoYW5nZShjb2x1bW4uZGF0YUZpZWxkLCBzb3J0T3JkZXIpO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRTdGF0ZSgoKSA9PiAoe1xuICAgICAgICBzb3J0T3JkZXIsXG4gICAgICAgIHNvcnRDb2x1bW46IGNvbHVtblxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgIGxldCB7IGRhdGEgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCB7IHNvcnQgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCB7IHNvcnRPcmRlciwgc29ydENvbHVtbiB9ID0gdGhpcy5zdGF0ZTtcbiAgICAgIGlmICghaXNSZW1vdGVTb3J0KCkgJiYgc29ydENvbHVtbikge1xuICAgICAgICBjb25zdCBzb3J0RnVuYyA9IHNvcnRDb2x1bW4uc29ydEZ1bmMgPyBzb3J0Q29sdW1uLnNvcnRGdW5jIDogKHNvcnQgJiYgc29ydC5zb3J0RnVuYyk7XG4gICAgICAgIGRhdGEgPSBkYXRhT3BlcmF0b3Iuc29ydChkYXRhLCBzb3J0T3JkZXIsIHsgLi4uc29ydENvbHVtbiwgc29ydEZ1bmMgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTb3J0Q29udGV4dC5Qcm92aWRlclxuICAgICAgICAgIHZhbHVlPXsge1xuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIHNvcnRPcmRlcixcbiAgICAgICAgICAgIG9uU29ydDogdGhpcy5oYW5kbGVTb3J0LFxuICAgICAgICAgICAgc29ydEZpZWxkOiBzb3J0Q29sdW1uID8gc29ydENvbHVtbi5kYXRhRmllbGQgOiBudWxsXG4gICAgICAgICAgfSB9XG4gICAgICAgID5cbiAgICAgICAgICB7IHRoaXMucHJvcHMuY2hpbGRyZW4gfVxuICAgICAgICA8L1NvcnRDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBQcm92aWRlcjogU29ydFByb3ZpZGVyLFxuICAgIENvbnN1bWVyOiBTb3J0Q29udGV4dC5Db25zdW1lclxuICB9O1xufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL2NvbnRleHRzL3NvcnQtY29udGV4dC5qcyIsImltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSAnZXZlbnRzJztcbmltcG9ydCBfIGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgRXh0ZW5kQmFzZSA9PlxuICBjbGFzcyBSZW1vdGVSZXNvbHZlciBleHRlbmRzIEV4dGVuZEJhc2Uge1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICBzdXBlcihwcm9wcyk7XG4gICAgICB0aGlzLnJlbW90ZUVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICB0aGlzLnJlbW90ZUVtaXR0ZXIub24oJ3BhZ2luYXRpb25DaGFuZ2UnLCB0aGlzLmhhbmRsZVJlbW90ZVBhZ2VDaGFuZ2UpO1xuICAgICAgdGhpcy5yZW1vdGVFbWl0dGVyLm9uKCdpc1JlbW90ZVBhZ2luYXRpb24nLCB0aGlzLmlzUmVtb3RlUGFnaW5hdGlvbik7XG4gICAgfVxuXG4gICAgZ2V0TmV3ZXN0U3RhdGUgPSAoc3RhdGUgPSB7fSkgPT4ge1xuICAgICAgbGV0IHNvcnRPcmRlcjtcbiAgICAgIGxldCBzb3J0RmllbGQ7XG4gICAgICBsZXQgcGFnZTtcbiAgICAgIGxldCBzaXplUGVyUGFnZTtcbiAgICAgIGxldCBzZWFyY2hUZXh0O1xuICAgICAgbGV0IGZpbHRlcnMgPSB7fTtcblxuICAgICAgaWYgKHRoaXMuc29ydENvbnRleHQpIHtcbiAgICAgICAgc29ydE9yZGVyID0gdGhpcy5zb3J0Q29udGV4dC5zdGF0ZS5zb3J0T3JkZXI7XG4gICAgICAgIHNvcnRGaWVsZCA9IHRoaXMuc29ydENvbnRleHQuc3RhdGUuc29ydENvbHVtbiA/XG4gICAgICAgICAgdGhpcy5zb3J0Q29udGV4dC5zdGF0ZS5zb3J0Q29sdW1uLmRhdGFGaWVsZCA6XG4gICAgICAgICAgbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZmlsdGVyQ29udGV4dCkge1xuICAgICAgICBmaWx0ZXJzID0gdGhpcy5maWx0ZXJDb250ZXh0LmN1cnJGaWx0ZXJzO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5wYWdpbmF0aW9uQ29udGV4dCkge1xuICAgICAgICBwYWdlID0gdGhpcy5wYWdpbmF0aW9uQ29udGV4dC5jdXJyUGFnZTtcbiAgICAgICAgc2l6ZVBlclBhZ2UgPSB0aGlzLnBhZ2luYXRpb25Db250ZXh0LmN1cnJTaXplUGVyUGFnZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuc2VhcmNoQ29udGV4dCkge1xuICAgICAgICBzZWFyY2hUZXh0ID0gdGhpcy5wcm9wcy5zZWFyY2guc2VhcmNoVGV4dDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc29ydE9yZGVyLFxuICAgICAgICBzb3J0RmllbGQsXG4gICAgICAgIGZpbHRlcnMsXG4gICAgICAgIHBhZ2UsXG4gICAgICAgIHNpemVQZXJQYWdlLFxuICAgICAgICBzZWFyY2hUZXh0LFxuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgZGF0YTogdGhpcy5wcm9wcy5kYXRhXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlzUmVtb3RlU2VhcmNoID0gKCkgPT4ge1xuICAgICAgY29uc3QgeyByZW1vdGUgfSA9IHRoaXMucHJvcHM7XG4gICAgICByZXR1cm4gcmVtb3RlID09PSB0cnVlIHx8IChfLmlzT2JqZWN0KHJlbW90ZSkgJiYgcmVtb3RlLnNlYXJjaCkgfHwgdGhpcy5pc1JlbW90ZVBhZ2luYXRpb24oKTtcbiAgICB9XG5cbiAgICBpc1JlbW90ZVBhZ2luYXRpb24gPSAoZSA9IHt9KSA9PiB7XG4gICAgICBjb25zdCB7IHJlbW90ZSB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGUucmVzdWx0ID0gKHJlbW90ZSA9PT0gdHJ1ZSB8fCAoXy5pc09iamVjdChyZW1vdGUpICYmIHJlbW90ZS5wYWdpbmF0aW9uKSk7XG4gICAgICByZXR1cm4gZS5yZXN1bHQ7XG4gICAgfVxuXG4gICAgaXNSZW1vdGVGaWx0ZXJpbmcgPSAoKSA9PiB7XG4gICAgICBjb25zdCB7IHJlbW90ZSB9ID0gdGhpcy5wcm9wcztcbiAgICAgIHJldHVybiByZW1vdGUgPT09IHRydWUgfHwgKF8uaXNPYmplY3QocmVtb3RlKSAmJiByZW1vdGUuZmlsdGVyKSB8fCB0aGlzLmlzUmVtb3RlUGFnaW5hdGlvbigpO1xuICAgIH1cblxuICAgIGlzUmVtb3RlU29ydCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHsgcmVtb3RlIH0gPSB0aGlzLnByb3BzO1xuICAgICAgcmV0dXJuIHJlbW90ZSA9PT0gdHJ1ZSB8fCAoXy5pc09iamVjdChyZW1vdGUpICYmIHJlbW90ZS5zb3J0KSB8fCB0aGlzLmlzUmVtb3RlUGFnaW5hdGlvbigpO1xuICAgIH1cblxuICAgIGlzUmVtb3RlQ2VsbEVkaXQgPSAoKSA9PiB7XG4gICAgICBjb25zdCB7IHJlbW90ZSB9ID0gdGhpcy5wcm9wcztcbiAgICAgIHJldHVybiByZW1vdGUgPT09IHRydWUgfHwgKF8uaXNPYmplY3QocmVtb3RlKSAmJiByZW1vdGUuY2VsbEVkaXQpO1xuICAgIH1cblxuICAgIGhhbmRsZVJlbW90ZVBhZ2VDaGFuZ2UgPSAocGFnZSwgc2l6ZVBlclBhZ2UpID0+IHtcbiAgICAgIHRoaXMucHJvcHMub25UYWJsZUNoYW5nZSgncGFnaW5hdGlvbicsIHRoaXMuZ2V0TmV3ZXN0U3RhdGUoeyBwYWdlLCBzaXplUGVyUGFnZSB9KSk7XG4gICAgfVxuXG4gICAgaGFuZGxlUmVtb3RlRmlsdGVyQ2hhbmdlID0gKGZpbHRlcnMpID0+IHtcbiAgICAgIGNvbnN0IG5ld1N0YXRlID0geyBmaWx0ZXJzIH07XG4gICAgICBpZiAodGhpcy5pc1JlbW90ZVBhZ2luYXRpb24oKSkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5wcm9wcy5wYWdpbmF0aW9uLm9wdGlvbnMgfHwge307XG4gICAgICAgIG5ld1N0YXRlLnBhZ2UgPSBfLmlzRGVmaW5lZChvcHRpb25zLnBhZ2VTdGFydEluZGV4KSA/IG9wdGlvbnMucGFnZVN0YXJ0SW5kZXggOiAxO1xuICAgICAgfVxuICAgICAgdGhpcy5wcm9wcy5vblRhYmxlQ2hhbmdlKCdmaWx0ZXInLCB0aGlzLmdldE5ld2VzdFN0YXRlKG5ld1N0YXRlKSk7XG4gICAgfVxuXG4gICAgaGFuZGxlUmVtb3RlU29ydENoYW5nZSA9IChzb3J0RmllbGQsIHNvcnRPcmRlcikgPT4ge1xuICAgICAgdGhpcy5wcm9wcy5vblRhYmxlQ2hhbmdlKCdzb3J0JywgdGhpcy5nZXROZXdlc3RTdGF0ZSh7IHNvcnRGaWVsZCwgc29ydE9yZGVyIH0pKTtcbiAgICB9XG5cbiAgICBoYW5kbGVSZW1vdGVDZWxsQ2hhbmdlID0gKHJvd0lkLCBkYXRhRmllbGQsIG5ld1ZhbHVlKSA9PiB7XG4gICAgICBjb25zdCBjZWxsRWRpdCA9IHsgcm93SWQsIGRhdGFGaWVsZCwgbmV3VmFsdWUgfTtcbiAgICAgIHRoaXMucHJvcHMub25UYWJsZUNoYW5nZSgnY2VsbEVkaXQnLCB0aGlzLmdldE5ld2VzdFN0YXRlKHsgY2VsbEVkaXQgfSkpO1xuICAgIH1cblxuICAgIGhhbmRsZVJlbW90ZVNlYXJjaENoYW5nZSA9IChzZWFyY2hUZXh0KSA9PiB7XG4gICAgICB0aGlzLnByb3BzLm9uVGFibGVDaGFuZ2UoJ3NlYXJjaCcsIHRoaXMuZ2V0TmV3ZXN0U3RhdGUoeyBzZWFyY2hUZXh0IH0pKTtcbiAgICB9XG4gIH07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9wcm9wcy1yZXNvbHZlci9yZW1vdGUtcmVzb2x2ZXIuanMiXSwic291cmNlUm9vdCI6IiJ9 -//# sourceMappingURL=react-bootstrap-table-next.js.map \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/dist/react-bootstrap-table-next.js.map b/global-scoreboard/dependencies/react-bootstrap-table-next/dist/react-bootstrap-table-next.js.map deleted file mode 100644 index b20e70fa..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/dist/react-bootstrap-table-next.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":[],"names":[],"mappings":"","file":"react-bootstrap-table2/dist/react-bootstrap-table-next.js","sourceRoot":""} \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/dist/react-bootstrap-table-next.min.js b/global-scoreboard/dependencies/react-bootstrap-table-next/dist/react-bootstrap-table-next.min.js deleted file mode 100644 index 59b5af4f..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/dist/react-bootstrap-table-next.min.js +++ /dev/null @@ -1,6 +0,0 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("react"),require("react-dom")):"function"==typeof define&&define.amd?define(["react","react-dom"],t):"object"==typeof exports?exports.ReactBootstrapTable2=t(require("react"),require("react-dom")):e.ReactBootstrapTable2=t(e.React,e.ReactDOM)}(this,function(e,t){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=26)}([function(t,n){t.exports=e},function(e,t,n){e.exports=n(28)()},function(e,t,n){"use strict";function r(e){return[e].join(".").replace(/\[/g,".").replace(/\]/g,"").split(".")}function o(e,t){return d.default.includes?d.default.includes(e,t):e.indexOf(t)>-1}function a(e,t){var n=e[t];if(void 0!==n&&null!==n)return n;var o=r(t),a=void 0;try{a=o.reduce(function(e,t){return e[t]},e)}catch(e){}return a}function i(e,t,n){var o=arguments.length>3&&void 0!==arguments[3]&&arguments[3],a=r(t),i=0;a.reduce(function(e,t){if(i+=1,void 0===e[t]){if(!o)throw new Error(e+"."+t+" is undefined");return e[t]={},e[t]}return i===a.length?(e[t]=n,n):e[t]},e)}function l(e){if(!d.default.isObject(e))return!1;for(var t=Object.prototype.hasOwnProperty,n=Object.keys(e),r=0;r=0||(o[n]=e[n]);return o}t.a=r},function(e,t,n){"use strict";function r(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}t.a=r},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var i=Object.assign||function(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:{},n=i({},t);return Object.keys(t).forEach(function(r){s.default.contains(c,r)&&(n[r]=e.createDefaultEventHandler(t[r]))}),n}}]),t}(e)}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],r=e.length>0,a=!0,i=e.map(function(e){return o.default.get(e,t)}),l=0;l0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];return 0===n.length?e.map(function(e){return o.default.get(e,t)}):e.filter(function(e){return!o.default.contains(n,o.default.get(e,t))}).map(function(e){return o.default.get(e,t)})},t.unSelectableKeys=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return 0===t.length?[]:e.filter(function(e){return o.default.contains(t,e)})},t.getSelectedRows=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1];return arguments[2].map(function(n){return(0,a.getRowByRowId)(e,t,n)}).filter(function(e){return!!e})}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t){var n={};for(var r in e)t.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}Object.defineProperty(t,"__esModule",{value:!0});var a=n(0),i=r(a),l=n(1),u=r(l),s=n(3),c=r(s),f=function(e){var t=e.renderContent,n=e.selectRow,r=e.expandRow,a=e.cellEl,l=o(e,["renderContent","selectRow","expandRow","cellEl"]),u=function(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:c.default.INDICATOR_POSITION_LEFT)===c.default.INDICATOR_POSITION_LEFT},s=t()||[];return n&&!0!==n.hideSelectColumn&&(u(n.selectColumnPosition)?s.unshift(i.default.createElement(a,{key:"selection"})):s.push(i.default.createElement(a,{key:"selection"}))),r.showExpandColumn&&(u(r.expandColumnPosition)?s.unshift(i.default.createElement(a,{key:"expansion"})):s.push(i.default.createElement(a,{key:"expansion"}))),i.default.createElement("tr",l,s)};f.propTypes={renderContent:u.default.func.isRequired,cellEl:u.default.string.isRequired,selectRow:u.default.object,expandRow:u.default.object},t.default=f},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var l=Object.assign||function(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:{},n=l({},t);return Object.keys(t).forEach(function(r){c.default.contains(p,r)&&(n[r]=e.createDefaultEventHandler(t[r]))}),n}}]),t}(e)}},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&this._events[e].length>o&&(this._events[e].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[e].length),"function"==typeof console.trace&&console.trace()),this},n.prototype.on=n.prototype.addListener,n.prototype.once=function(e,t){function n(){this.removeListener(e,n),o||(o=!0,t.apply(this,arguments))}if(!r(t))throw TypeError("listener must be a function");var o=!1;return n.listener=t,this.on(e,n),this},n.prototype.removeListener=function(e,t){var n,o,i,l;if(!r(t))throw TypeError("listener must be a function");if(!this._events||!this._events[e])return this;if(n=this._events[e],i=n.length,o=-1,n===t||r(n.listener)&&n.listener===t)delete this._events[e],this._events.removeListener&&this.emit("removeListener",e,t);else if(a(n)){for(l=i;l-- >0;)if(n[l]===t||n[l].listener&&n[l].listener===t){o=l;break}if(o<0)return this;1===n.length?(n.length=0,delete this._events[e]):n.splice(o,1),this._events.removeListener&&this.emit("removeListener",e,t)}return this},n.prototype.removeAllListeners=function(e){var t,n;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[e]&&delete this._events[e],this;if(0===arguments.length){for(t in this._events)"removeListener"!==t&&this.removeAllListeners(t);return this.removeAllListeners("removeListener"),this._events={},this}if(n=this._events[e],r(n))this.removeListener(e,n);else if(n)for(;n.length;)this.removeListener(e,n[n.length-1]);return delete this._events[e],this},n.prototype.listeners=function(e){return this._events&&this._events[e]?r(this._events[e])?[this._events[e]]:this._events[e].slice():[]},n.prototype.listenerCount=function(e){if(this._events){var t=this._events[e];if(r(t))return 1;if(t)return t.length}return 0},n.listenerCount=function(e,t){return e.listenerCount(t)}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=n(27),a=r(o),i=n(71),l=r(i);t.default=(0,l.default)(a.default)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function l(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var u=function(){function e(e,t){for(var n=0;n0,A=y&&c.default.createElement(E.default,{bootstrap4:l},y);return c.default.createElement("div",{className:k},c.default.createElement("table",{id:a,className:I},A,c.default.createElement(v.default,{columns:t,className:this.props.headerClasses,wrapperClasses:this.props.headerWrapperClasses,sortField:this.props.sortField,sortOrder:this.props.sortOrder,onSort:this.props.onSort,globalSortCaret:this.props.sort&&this.props.sort.sortCaret,onFilter:this.props.onFilter,currFilters:this.props.currFilters,onExternalFilter:this.props.onExternalFilter,selectRow:w,expandRow:S,filterPosition:T}),F&&T!==j.default.FILTERS_POSITION_INLINE&&c.default.createElement(m.default,{columns:t,className:this.props.filtersClasses,onSort:this.props.onSort,onFilter:this.props.onFilter,currFilters:this.props.currFilters,filterPosition:this.props.filterPosition,onExternalFilter:this.props.onExternalFilter,selectRow:w,expandRow:S}),c.default.createElement(_.default,{className:this.props.bodyClasses,data:this.getData(),keyField:n,tabIndexCell:r,columns:t,isEmpty:this.isEmpty(),visibleColumnSize:this.visibleColumnSize(),noDataIndication:p,cellEdit:R,selectRow:w,expandRow:S,rowStyle:b,rowClasses:g,rowEvents:x}),N&&c.default.createElement(C.default,{data:this.getData(),columns:t,selectRow:w,expandRow:S,className:this.props.footerClasses})))}}]),t}((0,S.default)(s.Component));k.propTypes={keyField:d.default.string.isRequired,data:d.default.array.isRequired,columns:d.default.array.isRequired,bootstrap4:d.default.bool,remote:d.default.oneOfType([d.default.bool,d.default.shape({pagination:d.default.bool})]),noDataIndication:d.default.oneOfType([d.default.node,d.default.func]),striped:d.default.bool,bordered:d.default.bool,hover:d.default.bool,tabIndexCell:d.default.bool,id:d.default.string,classes:d.default.string,headerClasses:d.default.string,bodyClasses:d.default.string,wrapperClasses:d.default.string,headerWrapperClasses:d.default.string,condensed:d.default.bool,caption:d.default.oneOfType([d.default.node,d.default.string]),pagination:d.default.object,filter:d.default.object,cellEdit:d.default.object,selectRow:d.default.shape({mode:d.default.oneOf([j.default.ROW_SELECT_SINGLE,j.default.ROW_SELECT_MULTIPLE,j.default.ROW_SELECT_DISABLED]).isRequired,clickToSelect:d.default.bool,clickToExpand:d.default.bool,clickToEdit:d.default.bool,hideSelectAll:d.default.bool,onSelect:d.default.func,onSelectAll:d.default.func,style:d.default.oneOfType([d.default.object,d.default.func]),classes:d.default.oneOfType([d.default.string,d.default.func]),nonSelectable:d.default.array,nonSelectableStyle:d.default.oneOfType([d.default.string,d.default.func]),nonSelectableClasses:d.default.oneOfType([d.default.string,d.default.func]),bgColor:d.default.oneOfType([d.default.string,d.default.func]),hideSelectColumn:d.default.bool,selectionRenderer:d.default.func,selectionHeaderRenderer:d.default.func,headerColumnStyle:d.default.oneOfType([d.default.object,d.default.func]),selectColumnStyle:d.default.oneOfType([d.default.object,d.default.func]),selectColumnPosition:d.default.oneOf([j.default.INDICATOR_POSITION_LEFT,j.default.INDICATOR_POSITION_RIGHT])}),expandRow:d.default.shape({renderer:d.default.func,expanded:d.default.array,onExpand:d.default.func,onExpandAll:d.default.func,nonExpandable:d.default.array,showExpandColumn:d.default.bool,onlyOneExpanding:d.default.bool,expandByColumnOnly:d.default.bool,expandColumnRenderer:d.default.func,expandHeaderColumnRenderer:d.default.func,expandColumnPosition:d.default.oneOf([j.default.INDICATOR_POSITION_LEFT,j.default.INDICATOR_POSITION_RIGHT]),className:d.default.oneOfType([d.default.string,d.default.func]),parentClassName:d.default.oneOfType([d.default.string,d.default.func])}),rowStyle:d.default.oneOfType([d.default.object,d.default.func]),rowEvents:d.default.object,rowClasses:d.default.oneOfType([d.default.string,d.default.func]),filtersClasses:d.default.string,filterPosition:d.default.oneOf([j.default.FILTERS_POSITION_TOP,j.default.FILTERS_POSITION_INLINE,j.default.FILTERS_POSITION_BOTTOM]),footerClasses:d.default.string,defaultSorted:d.default.arrayOf(d.default.shape({dataField:d.default.string.isRequired,order:d.default.oneOf([j.default.SORT_DESC,j.default.SORT_ASC]).isRequired})),sort:d.default.shape({dataField:d.default.string,order:d.default.oneOf([j.default.SORT_DESC,j.default.SORT_ASC]),sortFunc:d.default.func,sortCaret:d.default.func}),defaultSortDirection:d.default.oneOf([j.default.SORT_DESC,j.default.SORT_ASC]),overlay:d.default.func,onTableChange:d.default.func,onSort:d.default.func,onFilter:d.default.func,onExternalFilter:d.default.func,onDataSizeChange:d.default.func,search:d.default.shape({searchText:d.default.string,searchContext:d.default.func}),setDependencyModules:d.default.func},k.defaultProps={bootstrap4:!1,remote:!1,striped:!1,bordered:!0,hover:!1,condensed:!1,noDataIndication:null,selectRow:{mode:j.default.ROW_SELECT_DISABLED,selected:[],hideSelectColumn:!0},expandRow:{renderer:void 0,expanded:[],nonExpandable:[]},cellEdit:{mode:null,nonEditableRows:[]},filterPosition:j.default.FILTERS_POSITION_INLINE},t.default=k},function(e,t,n){"use strict";function r(){}function o(){}var a=n(29);o.resetWarningCache=r,e.exports=function(){function e(e,t,n,r,o,i){if(i!==a){var l=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw l.name="Invariant Violation",l}}function t(){return e}e.isRequired=e;var n={array:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:o,resetWarningCache:r};return n.PropTypes=n,n}},function(e,t,n){"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=n(0),a=r(o),i=n(1),l=r(i),u=n(31),s=r(u),c=n(37),f=r(c),d=n(38),p=r(d),h=n(39),y=r(h),v=n(44),b=r(v),m=n(3),g=r(m),E=function(e){var t=e.className,n=e.columns,r=e.onSort,o=e.onFilter,i=e.sortField,l=e.sortOrder,u=e.selectRow,c=e.expandRow,d=e.currFilters,h=e.onExternalFilter,v=e.filterPosition,m=e.globalSortCaret,E=e.wrapperClasses,O=function(){return null},_=function(){return null};c.showExpandColumn&&(_=(0,b.default)(p.default)),u&&(O=(0,y.default)(f.default));var x=function(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:g.default.INDICATOR_POSITION_LEFT)===g.default.INDICATOR_POSITION_LEFT},C=[n.map(function(e,t){var n=e.dataField===i,u=e.dataField===i;return a.default.createElement(s.default,{index:t,key:e.dataField,column:e,onSort:r,sorting:n,sortOrder:l,globalSortCaret:m,isLastSorting:u,onFilter:o,currFilters:d,onExternalFilter:h,filterPosition:v})})];return u.hideSelectColumn||(x(u.selectColumnPosition)?C.unshift(a.default.createElement(O,{key:"selection"})):C.push(a.default.createElement(O,{key:"selection"}))),c.showExpandColumn&&(x(c.expandColumnPosition)?C.unshift(a.default.createElement(_,{key:"expansion"})):C.push(a.default.createElement(_,{key:"expansion"}))),a.default.createElement("thead",{className:E},a.default.createElement("tr",{className:t},C))};E.propTypes={columns:l.default.array.isRequired,onSort:l.default.func,onFilter:l.default.func,sortField:l.default.string,sortOrder:l.default.string,selectRow:l.default.object,currFilters:l.default.object,onExternalFilter:l.default.func,globalSortCaret:l.default.func,className:l.default.string,wrapperClasses:l.default.string,expandRow:l.default.object,filterPosition:l.default.oneOf([g.default.FILTERS_POSITION_TOP,g.default.FILTERS_POSITION_INLINE,g.default.FILTERS_POSITION_BOTTOM])},t.default=E},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var l=Object.assign||function(e){for(var t=1;t=0&&t<=R};m.each=m.forEach=function(e,t,n){t=E(t,n);var r,o;if(T(e))for(r=0,o=e.length;r0?0:i-1;for(o||(r=t[a?a[l]:l],l+=e);l>=0&&l=3;return t(e,E(n,o,4),r,a)}};m.reduce=m.foldl=m.inject=P(1),m.reduceRight=m.foldr=P(-1),m.find=m.detect=function(e,t,n){var r=T(e)?m.findIndex:m.findKey,o=r(e,t,n);if(void 0!==o&&-1!==o)return e[o]},m.filter=m.select=function(e,t,n){var r=[];return t=O(t,n),m.each(e,function(e,n,o){t(e,n,o)&&r.push(e)}),r},m.reject=function(e,t,n){return m.filter(e,m.negate(O(t)),n)},m.every=m.all=function(e,t,n){t=O(t,n);for(var r=!T(e)&&m.keys(e),o=(r||e).length,a=0;a=0},m.invoke=_(function(e,t,n){var r,o;return m.isFunction(t)?o=t:m.isArray(t)&&(r=t.slice(0,-1),t=t[t.length-1]),m.map(e,function(e){var a=o;if(!a){if(r&&r.length&&(e=S(e,r)),null==e)return;a=e[t]}return null==a?a:a.apply(e,n)})}),m.pluck=function(e,t){return m.map(e,m.property(t))},m.where=function(e,t){return m.filter(e,m.matcher(t))},m.findWhere=function(e,t){return m.find(e,m.matcher(t))},m.max=function(e,t,n){var r,o,a=-1/0,i=-1/0;if(null==t||"number"==typeof t&&"object"!=typeof e[0]&&null!=e){e=T(e)?e:m.values(e);for(var l=0,u=e.length;la&&(a=r)}else t=O(t,n),m.each(e,function(e,n,r){((o=t(e,n,r))>i||o===-1/0&&a===-1/0)&&(a=e,i=o)});return a},m.min=function(e,t,n){var r,o,a=1/0,i=1/0;if(null==t||"number"==typeof t&&"object"!=typeof e[0]&&null!=e){e=T(e)?e:m.values(e);for(var l=0,u=e.length;lr||void 0===n)return 1;if(n0?0:o-1;a>=0&&a0?i=a>=0?a:Math.max(a+l,i):l=a>=0?Math.min(a+1,l):a+l+1;else if(n&&a&&l)return a=n(r,o),r[a]===o?a:-1;if(o!==o)return a=t(f.call(r,i,l),m.isNaN),a>=0?a+i:-1;for(a=e>0?i:l-1;a>=0&&at?(r&&(clearTimeout(r),r=null),l=s,i=e.apply(o,a),r||(o=a=null)):r||!1===n.trailing||(r=setTimeout(u,c)),i};return s.cancel=function(){clearTimeout(r),l=0,r=o=a=null},s},m.debounce=function(e,t,n){var r,o,a=function(t,n){r=null,n&&(o=e.apply(t,n))},i=_(function(i){if(r&&clearTimeout(r),n){var l=!r;r=setTimeout(a,t),l&&(o=e.apply(this,i))}else r=m.delay(a,t,this,i);return o});return i.cancel=function(){clearTimeout(r),r=null},i},m.wrap=function(e,t){return m.partial(t,e)},m.negate=function(e){return function(){return!e.apply(this,arguments)}},m.compose=function(){var e=arguments,t=e.length-1;return function(){for(var n=t,r=e[t].apply(this,arguments);n--;)r=e[n].call(this,r);return r}},m.after=function(e,t){return function(){if(--e<1)return t.apply(this,arguments)}},m.before=function(e,t){var n;return function(){return--e>0&&(n=t.apply(this,arguments)),e<=1&&(t=null),n}},m.once=m.partial(m.before,2),m.restArguments=_;var D=!{toString:null}.propertyIsEnumerable("toString"),L=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"],B=function(e,t){var n=L.length,r=e.constructor,o=m.isFunction(r)&&r.prototype||u,a="constructor";for(w(e,a)&&!m.contains(t,a)&&t.push(a);n--;)(a=L[n])in e&&e[a]!==o[a]&&!m.contains(t,a)&&t.push(a)};m.keys=function(e){if(!m.isObject(e))return[];if(y)return y(e);var t=[];for(var n in e)w(e,n)&&t.push(n);return D&&B(e,t),t},m.allKeys=function(e){if(!m.isObject(e))return[];var t=[];for(var n in e)t.push(n);return D&&B(e,t),t},m.values=function(e){for(var t=m.keys(e),n=t.length,r=Array(n),o=0;o1&&(r=E(r,t[1])),t=m.allKeys(e)):(r=q,t=F(t,!1,!1),e=Object(e));for(var o=0,a=t.length;o1&&(n=t[1])):(t=m.map(F(t,!1,!1),String),r=function(e,n){return!m.contains(t,n)}),m.pick(e,r,n)}),m.defaults=U(m.allKeys,!0),m.create=function(e,t){var n=x(e);return t&&m.extendOwn(n,t),n},m.clone=function(e){return m.isObject(e)?m.isArray(e)?e.slice():m.extend({},e):e},m.tap=function(e,t){return t(e),e},m.isMatch=function(e,t){var n=m.keys(t),r=n.length;if(null==e)return!r;for(var o=Object(e),a=0;a":">",'"':""","'":"'","`":"`"},V=m.invert(z),G=function(e){var t=function(t){return e[t]},n="(?:"+m.keys(e).join("|")+")",r=RegExp(n),o=RegExp(n,"g");return function(e){return e=null==e?"":""+e,r.test(e)?e.replace(o,t):e}};m.escape=G(z),m.unescape=G(V),m.result=function(e,t,n){m.isArray(t)||(t=[t]);var r=t.length;if(!r)return m.isFunction(n)?n.call(e):n;for(var o=0;o/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var X=/(.)^/,$={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},J=/\\|'|\r|\n|\u2028|\u2029/g,Q=function(e){return"\\"+$[e]};m.template=function(e,t,n){!t&&n&&(t=n),t=m.defaults({},t,m.templateSettings);var r=RegExp([(t.escape||X).source,(t.interpolate||X).source,(t.evaluate||X).source].join("|")+"|$","g"),o=0,a="__p+='";e.replace(r,function(t,n,r,i,l){return a+=e.slice(o,l).replace(J,Q),o=l+t.length,n?a+="'+\n((__t=("+n+"))==null?'':_.escape(__t))+\n'":r?a+="'+\n((__t=("+r+"))==null?'':__t)+\n'":i&&(a+="';\n"+i+"\n__p+='"),t}),a+="';\n",t.variable||(a="with(obj||{}){\n"+a+"}\n"),a="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+a+"return __p;\n";var i;try{i=new Function(t.variable||"obj","_",a)}catch(e){throw e.source=a,e}var l=function(e){return i.call(this,e,m)};return l.source="function("+(t.variable||"obj")+"){\n"+a+"}",l},m.chain=function(e){var t=m(e);return t._chain=!0,t};var Z=function(e,t){return e._chain?m(t).chain():t};m.mixin=function(e){return m.each(m.functions(e),function(t){var n=m[t]=e[t];m.prototype[t]=function(){var e=[this._wrapped];return c.apply(e,arguments),Z(this,n.apply(m,e))}}),m},m.mixin(m),m.each(["pop","push","reverse","shift","sort","splice","unshift"],function(e){var t=l[e];m.prototype[e]=function(){var n=this._wrapped;return t.apply(n,arguments),"shift"!==e&&"splice"!==e||0!==n.length||delete n[0],Z(this,n)}}),m.each(["concat","join","slice"],function(e){var t=l[e];m.prototype[e]=function(){return Z(this,t.apply(this._wrapped,arguments))}}),m.prototype.value=function(){return this._wrapped},m.prototype.valueOf=m.prototype.toJSON=m.prototype.value,m.prototype.toString=function(){return String(this._wrapped)},r=[],void 0!==(o=function(){return m}.apply(t,r))&&(n.exports=o)}()}).call(t,n(35),n(36)(e))},function(e,t){var n;n=function(){return this}();try{n=n||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(n=window)}e.exports=n},function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0}),t.CheckBox=void 0;var l=Object.assign||function(e){for(var t=1;t2&&void 0!==arguments[2]?arguments[2]:[],o=0;o2&&void 0!==arguments[2]?arguments[2]:[];return 0===n.length?e.map(function(e){return a.default.get(e,t)}):e.filter(function(e){return!a.default.contains(n,a.default.get(e,t))}).map(function(e){return a.default.get(e,t)})},t.getExpandedRows=function(e,t,n){return n.map(function(n){return(0,i.getRowByRowId)(e,t,n)})}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.editCell=void 0;var r=n(2),o=function(e){return e&&e.__esModule?e:{default:e}}(r),a=n(6);t.editCell=function(e,t,n,r,i){var l=(0,a.getRowByRowId)(e,t,n);l&&o.default.set(l,r,i)}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tt?-1:e2&&void 0!==arguments[2]?arguments[2]:s.default.SORT_DESC;return r&&e.dataField===r.dataField?n===s.default.SORT_DESC?s.default.SORT_ASC:s.default.SORT_DESC:o}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.typeConvert=void 0;var r=n(3),o=function(e){return e&&e.__esModule?e:{default:e}}(r);t.typeConvert=function(e,t){return e===o.default.TYPE_STRING?String(t):e===o.default.TYPE_NUMBER?Number(t):e===o.default.TYPE_BOOLEAN?"boolean"==typeof t?t:"true"===t:e===o.default.TYPE_DATE?new Date(t):t}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=n(0),a=r(o),i=n(12),l=r(i);t.default=function(e){return function(){return a.default.createElement(l.default.Consumer,null,function(t){return a.default.createElement(e,t)})}}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=n(0),a=r(o),i=n(1),l=r(i),u=n(46),s=r(u),c=n(3),f=r(c),d=n(14),p=r(d),h=function(e){function t(){var e=[],t=!1;return n.forEach(function(n,i){e.push(a.default.createElement(s.default,{index:i,key:n.dataField,column:n,currFilters:o,onExternalFilter:l,onFilter:r})),(n.filterRenderer||n.filter)&&(t||(t=!0))}),e}var n=e.columns,r=e.onFilter,o=e.currFilters,i=e.filterPosition,l=e.onExternalFilter,u=e.className,c=e.selectRow,d=e.expandRow;return a.default.createElement("tbody",{className:u,style:{display:i===f.default.FILTERS_POSITION_TOP?"table-header-group":"table-footer-group"}},a.default.createElement(p.default,{renderContent:t,selectRow:c,expandRow:d,cellEl:"td"}))};h.propTypes={columns:l.default.array.isRequired,onFilter:l.default.func,filterPosition:l.default.oneOf([f.default.FILTERS_POSITION_TOP,f.default.FILTERS_POSITION_INLINE,f.default.FILTERS_POSITION_BOTTOM]),currFilters:l.default.object,onExternalFilter:l.default.func,className:l.default.string,selectRow:l.default.object,expandRow:l.default.object},h.defaultProps={position:f.default.FILTERS_POSITION_TOP},t.default=h},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=Object.assign||function(e){for(var t=1;t=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function l(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var u=Object.assign||function(e){for(var t=1;t=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function l(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var u=Object.assign||function(e){for(var t=1;t=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function l(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var u=Object.assign||function(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:R.default.INDICATOR_POSITION_LEFT)===R.default.INDICATOR_POSITION_LEFT}},{key:"render",value:function(){var e=this.props,t=e.row,n=e.columns,r=e.keyField,a=e.rowIndex,i=e.style,l=e.className,s=e.attrs,c=e.selectRow,d=e.expandRow,p=e.expanded,h=e.expandable,v=e.selected,m=e.selectable,E=e.visibleColumnSize,O=e.tabIndexCell,_=o(e,["row","columns","keyField","rowIndex","style","className","attrs","selectRow","expandRow","expanded","expandable","selected","selectable","visibleColumnSize","tabIndexCell"]),x=y.default.get(t,r),C=c.hideSelectColumn,S=c.selectColumnPosition,R=c.clickToSelect,j=d.showExpandColumn,T=d.expandColumnPosition,P=this.delegate(u({},s));(R||d.renderer)&&(P.onClick=this.createClickEventHandler(P.onClick));var k=a*E+1,I=[f.default.createElement(w.default,u({key:"row",row:t,columns:n,keyField:r,rowIndex:a,shouldUpdate:this.shouldUpdateRowContent,tabIndexStart:O?k:-1},_))];if(!C){var F=f.default.createElement(g.default,u({},c,{key:"selection-cell",rowKey:x,rowIndex:a,selected:v,disabled:!m,tabIndex:O?k++:-1}));this.isRenderFunctionColumnInLeft(S)?I.unshift(F):I.push(F)}if(j){var N=f.default.createElement(b.default,u({},d,{key:"expand-cell",rowKey:x,rowIndex:a,expanded:p,expandable:h,tabIndex:O?k++:-1}));this.isRenderFunctionColumnInLeft(T)?I.unshift(N):I.push(N)}return f.default.createElement("tr",u({style:i,className:l},P),I)}}]),t}((0,O.default)((0,x.default)(f.default.Component)));j.propTypes={attrs:p.default.object,style:p.default.object},j.defaultProps={attrs:{},style:{}},t.default=j},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var l=Object.assign||function(e){for(var t=1;t=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}Object.defineProperty(t,"__esModule",{value:!0});var a=Object.assign||function(e){for(var t=1;t0&&void 0!==arguments[0])||arguments[0],t=void 0;if(this.props.columnToggle&&this.props.columnToggle.toggles){var n=this.props.columnToggle.toggles;t=Object.keys(n).filter(function(e){return n[e]}).length}else t=this.props.columns.filter(function(e){return!e.hidden}).length;return e?(this.props.selectRow&&!this.props.selectRow.hideSelectColumn&&(t+=1),this.props.expandRow&&this.props.expandRow.showExpandColumn&&(t+=1),t):t}}]),t}(e)}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var l=Object.assign||function(e){for(var t=1;t0&&(t.SortContext=(0,E.default)(T.default,t.isRemoteSort,t.handleRemoteSortChange)),(e.columnToggle||e.columns.filter(function(e){return e.hidden}).length>0)&&(t.ColumnManagementContext=(0,m.default)()),e.selectRow&&(t.SelectionContext=_.default),e.expandRow&&(t.RowExpandContext=C.default),e.cellEdit&&e.cellEdit.createContext&&(t.CellEditContext=e.cellEdit.createContext(h.default,T.default,t.isRemoteCellEdit,t.handleRemoteCellChange)),e.filter&&(t.FilterContext=e.filter.createContext(h.default,t.isRemoteFiltering,t.handleRemoteFilterChange)),e.pagination&&(t.PaginationContext=e.pagination.createContext()),e.search&&e.search.searchContext&&(t.SearchContext=e.search.searchContext(h.default,t.isRemoteSearch,t.handleRemoteSearchChange)),e.setDependencyModules&&e.setDependencyModules(h.default),e.setPaginationRemoteEmitter&&e.setPaginationRemoteEmitter(t.remoteEmitter),t}return i(n,t),u(n,[{key:"UNSAFE_componentWillReceiveProps",value:function(e){e.columns.filter(function(e){return e.sort}).length<=0?this.SortContext=null:this.SortContext||(this.SortContext=(0,E.default)(T.default,this.isRemoteSort,this.handleRemoteSortChange)),!e.pagination&&this.props.pagination&&(this.PaginationContext=null),e.pagination&&!this.props.pagination&&(this.PaginationContext=e.pagination.createContext(this.isRemotePagination,this.handleRemotePageChange)),!e.cellEdit&&this.props.cellEdit&&(this.CellEditContext=null),e.cellEdit&&!this.props.cellEdit&&(this.CellEditContext=e.cellEdit.createContext(h.default,T.default,this.isRemoteCellEdit,this.handleRemoteCellChange))}},{key:"renderBase",value:function(){var t=this;return function(n,r,o,a,i,u){return c.default.createElement(e,l({ref:function(e){return t.table=e}},t.props,a,r,o,i,u,{data:n.getData(r,o,a,i)}))}}},{key:"renderWithColumnManagementCtx",value:function(e,t){var n=this;return function(r,o,a,i,u){return c.default.createElement(n.ColumnManagementContext.Provider,l({},t,{toggles:n.props.columnToggle?n.props.columnToggle.toggles:null}),c.default.createElement(n.ColumnManagementContext.Consumer,null,function(t){return e(r,o,a,i,u,t)}))}}},{key:"renderWithSelectionCtx",value:function(e,t){var n=this;return function(r,o,a,i,u){return c.default.createElement(n.SelectionContext.Provider,l({},t,{ref:function(e){return n.selectionContext=e},selectRow:n.props.selectRow,data:r.getData(o,a,i,u)}),e(r,o,a,i,u))}}},{key:"renderWithRowExpandCtx",value:function(e,t){var n=this;return function(r,o,a,i,u){return c.default.createElement(n.RowExpandContext.Provider,l({},t,{ref:function(e){return n.rowExpandContext=e},expandRow:n.props.expandRow,data:r.getData(o,a,i,u)}),e(r,o,a,i,u))}}},{key:"renderWithPaginationCtx",value:function(e){var t=this;return function(n,r,o,a){return c.default.createElement(t.PaginationContext.Provider,{ref:function(e){return t.paginationContext=e},pagination:t.props.pagination,data:n.getData(r,o,a),bootstrap4:t.props.bootstrap4,isRemotePagination:t.isRemotePagination,remoteEmitter:t.remoteEmitter,onDataSizeChange:t.props.onDataSizeChange,tableId:t.props.id},c.default.createElement(t.PaginationContext.Consumer,null,function(t){return e(n,r,o,a,t)}))}}},{key:"renderWithSortCtx",value:function(e,t){var n=this;return function(r,o,a){return c.default.createElement(n.SortContext.Provider,l({},t,{ref:function(e){return n.sortContext=e},defaultSorted:n.props.defaultSorted,defaultSortDirection:n.props.defaultSortDirection,sort:n.props.sort,data:r.getData(o,a)}),c.default.createElement(n.SortContext.Consumer,null,function(t){return e(r,o,a,t)}))}}},{key:"renderWithSearchCtx",value:function(e,t){var n=this;return function(r,o){return c.default.createElement(n.SearchContext.Provider,l({},t,{ref:function(e){return n.searchContext=e},data:r.getData(o),searchText:n.props.search.searchText,dataChangeListener:n.props.dataChangeListener}),c.default.createElement(n.SearchContext.Consumer,null,function(t){return e(r,o,t)}))}}},{key:"renderWithFilterCtx",value:function(e,t){var n=this;return function(r){return c.default.createElement(n.FilterContext.Provider,l({},t,{ref:function(e){return n.filterContext=e},data:r.getData(),filter:n.props.filter.options||{},dataChangeListener:n.props.dataChangeListener}),c.default.createElement(n.FilterContext.Consumer,null,function(t){return e(r,t)}))}}},{key:"renderWithCellEditCtx",value:function(e,t){var n=this;return function(r){return c.default.createElement(n.CellEditContext.Provider,l({},t,{ref:function(e){return n.cellEditContext=e},selectRow:n.props.selectRow,cellEdit:n.props.cellEdit,data:r.getData()}),e(r))}}},{key:"render",value:function(){var e=this.props,t=e.keyField,n=e.columns,r=e.bootstrap4,o={keyField:t,columns:n},a=this.renderBase();return this.ColumnManagementContext&&(a=this.renderWithColumnManagementCtx(a,o)),this.SelectionContext&&(a=this.renderWithSelectionCtx(a,o)),this.RowExpandContext&&(a=this.renderWithRowExpandCtx(a,o)),this.PaginationContext&&(a=this.renderWithPaginationCtx(a,o)),this.SortContext&&(a=this.renderWithSortCtx(a,o)),this.SearchContext&&(a=this.renderWithSearchCtx(a,o)),this.FilterContext&&(a=this.renderWithFilterCtx(a,o)),this.CellEditContext&&(a=this.renderWithCellEditCtx(a,o)),c.default.createElement(R.BootstrapContext.Provider,{value:{bootstrap4:r}},c.default.createElement(this.DataContext.Provider,l({},o,{data:this.props.data}),c.default.createElement(this.DataContext.Consumer,null,a)))}}]),n}((0,S.default)(s.Component))};t.default=P},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var l=function(){function e(e,t){for(var n=0;n0?(n=i[0].order||l,r=t.initSort(i[0].dataField,n)):u&&u.dataField&&u.order&&(n=u.order,r=t.initSort(u.dataField,n)),t.state={sortOrder:n,sortColumn:r},t}return i(d,s),u(d,[{key:"componentDidMount",value:function(){var e=this.state,r=e.sortOrder,o=e.sortColumn;t()&&r&&o&&n(o.dataField,r)}},{key:"UNSAFE_componentWillReceiveProps",value:function(e){var t=e.sort,n=e.columns;t&&t.dataField&&t.order&&this.setState({sortOrder:t.order,sortColumn:n.find(function(e){return e.dataField===t.dataField})})}},{key:"initSort",value:function(e,t){var n=void 0,r=this.props.columns,o=r.filter(function(t){return t.dataField===e});return o.length>0&&(n=o[0],n.onSort&&n.onSort(e,t)),n}},{key:"render",value:function(){var n=this.props.data,o=this.props.sort,a=this.state,i=a.sortOrder,u=a.sortColumn;if(!t()&&u){var s=u.sortFunc?u.sortFunc:o&&o.sortFunc;n=e.sort(n,i,l({},u,{sortFunc:s}))}return c.default.createElement(r.Provider,{value:{data:n,sortOrder:i,onSort:this.handleSort,sortField:u?u.dataField:null}},this.props.children)}}]),d}(c.default.Component);s.propTypes={data:d.default.array.isRequired,columns:d.default.array.isRequired,children:d.default.node.isRequired,defaultSorted:d.default.arrayOf(d.default.shape({dataField:d.default.string.isRequired,order:d.default.oneOf([h.default.SORT_DESC,h.default.SORT_ASC]).isRequired})),sort:d.default.shape({dataField:d.default.string,order:d.default.oneOf([h.default.SORT_DESC,h.default.SORT_ASC]),sortFunc:d.default.func}),defaultSortDirection:d.default.oneOf([h.default.SORT_DESC,h.default.SORT_ASC])};var f=function(){var r=this;this.handleSort=function(o){var a=e.nextOrder(o,r.state,r.props.defaultSortDirection);o.onSort&&o.onSort(o.dataField,a),t()&&n(o.dataField,a),r.setState(function(){return{sortOrder:a,sortColumn:o}})}};return{Provider:s,Consumer:r.Consumer}}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var l=Object.assign||function(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:{},t=void 0,r=void 0,o=void 0,a=void 0,i=void 0,u={};return n.sortContext&&(t=n.sortContext.state.sortOrder,r=n.sortContext.state.sortColumn?n.sortContext.state.sortColumn.dataField:null),n.filterContext&&(u=n.filterContext.currFilters),n.paginationContext&&(o=n.paginationContext.currPage,a=n.paginationContext.currSizePerPage),n.searchContext&&(i=n.props.search.searchText),l({sortOrder:t,sortField:r,filters:u,page:o,sizePerPage:a,searchText:i},e,{data:n.props.data})},n.isRemoteSearch=function(){var e=n.props.remote;return!0===e||f.default.isObject(e)&&e.search||n.isRemotePagination()},n.isRemotePagination=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=n.props.remote;return e.result=!0===t||f.default.isObject(t)&&t.pagination,e.result},n.isRemoteFiltering=function(){var e=n.props.remote;return!0===e||f.default.isObject(e)&&e.filter||n.isRemotePagination()},n.isRemoteSort=function(){var e=n.props.remote;return!0===e||f.default.isObject(e)&&e.sort||n.isRemotePagination()},n.isRemoteCellEdit=function(){var e=n.props.remote;return!0===e||f.default.isObject(e)&&e.cellEdit},n.handleRemotePageChange=function(e,t){n.props.onTableChange("pagination",n.getNewestState({page:e,sizePerPage:t}))},n.handleRemoteFilterChange=function(e){var t={filters:e};if(n.isRemotePagination()){var r=n.props.pagination.options||{};t.page=f.default.isDefined(r.pageStartIndex)?r.pageStartIndex:1}n.props.onTableChange("filter",n.getNewestState(t))},n.handleRemoteSortChange=function(e,t){n.props.onTableChange("sort",n.getNewestState({sortField:e,sortOrder:t}))},n.handleRemoteCellChange=function(e,t,r){var o={rowId:e,dataField:t,newValue:r};n.props.onTableChange("cellEdit",n.getNewestState({cellEdit:o}))},n.handleRemoteSearchChange=function(e){n.props.onTableChange("search",n.getNewestState({searchText:e}))},n.remoteEmitter=new s.default,n.remoteEmitter.on("paginationChange",n.handleRemotePageChange),n.remoteEmitter.on("isRemotePagination",n.isRemotePagination),n}return i(t,e),t}(e)}}])}); \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/dist/react-bootstrap-table2.css b/global-scoreboard/dependencies/react-bootstrap-table-next/dist/react-bootstrap-table2.css deleted file mode 100644 index 56d8bda9..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/dist/react-bootstrap-table2.css +++ /dev/null @@ -1,129 +0,0 @@ -.react-bootstrap-table table { - table-layout: fixed; } - -.react-bootstrap-table th.sortable { - cursor: pointer; } - -.react-bootstrap-table th .order > .dropdown > .caret { - margin: 10px 0 10px 5px; - color: #cccccc; } - -.react-bootstrap-table th .order > .dropup > .caret { - margin: 10px 0; - color: #cccccc; } - -.react-bootstrap-table th > .react-bootstrap-table-sort-order > .caret { - margin: 10px 6.5px; } - -.react-bootstrap-table th .order-4:before { - margin-left: 3.5px; - content: "\2191"; - opacity: 0.4; } - -.react-bootstrap-table th .order-4:after { - content: "\2193"; - opacity: 0.4; } - -.react-bootstrap-table th .caret-4-asc:before { - margin-left: 3.5px; - content: "\2191"; } - -.react-bootstrap-table th .caret-4-asc:after { - content: "\2193"; - opacity: 0.4; } - -.react-bootstrap-table th .caret-4-desc:before { - margin-left: 3.5px; - content: "\2191"; - opacity: 0.4; } - -.react-bootstrap-table th .caret-4-desc:after { - content: "\2193"; } - -.react-bootstrap-table th[data-row-selection] { - width: 30px; } - -.react-bootstrap-table th > .selection-input-4, -.react-bootstrap-table td > .selection-input-4 { - margin: -4px; } - -.react-bootstrap-table td.react-bs-table-no-data { - text-align: center; } - -.react-bootstrap-table td.react-bootstrap-table-editing-cell .animated { - animation-fill-mode: both; } - -.react-bootstrap-table td.react-bootstrap-table-editing-cell .animated.bounceIn, -.react-bootstrap-table td.react-bootstrap-table-editing-cell .animated.bounceOut { - animation-duration: .75s; } - -.react-bootstrap-table td.react-bootstrap-table-editing-cell .animated.shake { - animation-duration: .3s; } - -@keyframes shake { - from, to { - transform: translate3d(0, 0, 0); } - 10%, 50%, 90% { - transform: translate3d(-10px, 0, 0); } - 30%, 70% { - transform: translate3d(10px, 0, 0); } } - -.react-bootstrap-table td.react-bootstrap-table-editing-cell .shake { - animation-name: shake; } - -@keyframes bounceIn { - from, 20%, 40%, 60%, 80%, to { - animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); } - 0% { - opacity: 0; - transform: scale3d(0.3, 0.3, 0.3); } - 20% { - transform: scale3d(1.1, 1.1, 1.1); } - 40% { - transform: scale3d(0.9, 0.9, 0.9); } - 60% { - opacity: 1; - transform: scale3d(1.03, 1.03, 1.03); } - 80% { - transform: scale3d(0.97, 0.97, 0.97); } - to { - opacity: 1; - transform: scale3d(1, 1, 1); } } - -.react-bootstrap-table td.react-bootstrap-table-editing-cell .bounceIn { - animation-name: bounceIn; } - -@keyframes bounceOut { - 20% { - transform: scale3d(0.9, 0.9, 0.9); } - 50%, 55% { - opacity: 1; - transform: scale3d(1.1, 1.1, 1.1); } - to { - opacity: 0; - transform: scale3d(0.3, 0.3, 0.3); } } - -.react-bootstrap-table td.react-bootstrap-table-editing-cell .bounceOut { - animation-name: bounceOut; } - -.react-bootstrap-table .reset-expansion-style { - padding: 0; } - -.react-bootstrap-table .row-expansion-style { - padding: 8px; } - -.react-bootstrap-table .row-expand-slide-appear { - max-height: 0; - overflow: hidden; } - -.react-bootstrap-table .row-expand-slide-appear-active { - max-height: 1000px; - transition: max-height 3s linear; } - -.react-bootstrap-table .row-expand-slide-exit { - max-height: 1000px; } - -.react-bootstrap-table .row-expand-slide-exit-active { - max-height: 0; - overflow: hidden; - transition: max-height 400ms cubic-bezier(0, 0.95, 0, 0.95); } diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/dist/react-bootstrap-table2.min.css b/global-scoreboard/dependencies/react-bootstrap-table-next/dist/react-bootstrap-table2.min.css deleted file mode 100644 index efd63a1c..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/dist/react-bootstrap-table2.min.css +++ /dev/null @@ -1 +0,0 @@ -.react-bootstrap-table table{table-layout:fixed}.react-bootstrap-table th.sortable{cursor:pointer}.react-bootstrap-table th .order>.dropdown>.caret{margin:10px 0 10px 5px;color:#ccc}.react-bootstrap-table th .order>.dropup>.caret{margin:10px 0;color:#ccc}.react-bootstrap-table th>.react-bootstrap-table-sort-order>.caret{margin:10px 6.5px}.react-bootstrap-table th .order-4:before{margin-left:3.5px;content:"\2191";opacity:.4}.react-bootstrap-table th .order-4:after{content:"\2193";opacity:.4}.react-bootstrap-table th .caret-4-asc:before{margin-left:3.5px;content:"\2191"}.react-bootstrap-table th .caret-4-asc:after{content:"\2193";opacity:.4}.react-bootstrap-table th .caret-4-desc:before{margin-left:3.5px;content:"\2191";opacity:.4}.react-bootstrap-table th .caret-4-desc:after{content:"\2193"}.react-bootstrap-table th[data-row-selection]{width:30px}.react-bootstrap-table td>.selection-input-4,.react-bootstrap-table th>.selection-input-4{margin:-4px}.react-bootstrap-table td.react-bs-table-no-data{text-align:center}.react-bootstrap-table td.react-bootstrap-table-editing-cell .animated{animation-fill-mode:both}.react-bootstrap-table td.react-bootstrap-table-editing-cell .animated.bounceIn,.react-bootstrap-table td.react-bootstrap-table-editing-cell .animated.bounceOut{animation-duration:.75s}.react-bootstrap-table td.react-bootstrap-table-editing-cell .animated.shake{animation-duration:.3s}@keyframes shake{from,to{transform:translate3d(0,0,0)}10%,50%,90%{transform:translate3d(-10px,0,0)}30%,70%{transform:translate3d(10px,0,0)}}.react-bootstrap-table td.react-bootstrap-table-editing-cell .shake{animation-name:shake}@keyframes bounceIn{20%,40%,60%,80%,from,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:scale3d(.3,.3,.3)}20%{transform:scale3d(1.1,1.1,1.1)}40%{transform:scale3d(.9,.9,.9)}60%{opacity:1;transform:scale3d(1.03,1.03,1.03)}80%{transform:scale3d(.97,.97,.97)}to{opacity:1;transform:scale3d(1,1,1)}}.react-bootstrap-table td.react-bootstrap-table-editing-cell .bounceIn{animation-name:bounceIn}@keyframes bounceOut{20%{transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;transform:scale3d(1.1,1.1,1.1)}to{opacity:0;transform:scale3d(.3,.3,.3)}}.react-bootstrap-table td.react-bootstrap-table-editing-cell .bounceOut{animation-name:bounceOut}.react-bootstrap-table .reset-expansion-style{padding:0}.react-bootstrap-table .row-expansion-style{padding:8px}.react-bootstrap-table .row-expand-slide-appear{max-height:0;overflow:hidden}.react-bootstrap-table .row-expand-slide-appear-active{max-height:1000px;transition:max-height 3s linear}.react-bootstrap-table .row-expand-slide-exit{max-height:1000px}.react-bootstrap-table .row-expand-slide-exit-active{max-height:0;overflow:hidden;transition:max-height .4s cubic-bezier(0,.95,0,.95)} \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/index.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/index.js deleted file mode 100644 index dffe24a2..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/index.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _bootstrapTable = require('./src/bootstrap-table'); - -var _bootstrapTable2 = _interopRequireDefault(_bootstrapTable); - -var _contexts = require('./src/contexts'); - -var _contexts2 = _interopRequireDefault(_contexts); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -exports.default = (0, _contexts2.default)(_bootstrapTable2.default); \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/body.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/body.js deleted file mode 100644 index db8506d9..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/body.js +++ /dev/null @@ -1,182 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = require('prop-types'); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _utils = require('./utils'); - -var _utils2 = _interopRequireDefault(_utils); - -var _simpleRow = require('./row/simple-row'); - -var _simpleRow2 = _interopRequireDefault(_simpleRow); - -var _aggregateRow = require('./row/aggregate-row'); - -var _aggregateRow2 = _interopRequireDefault(_aggregateRow); - -var _rowSection = require('./row/row-section'); - -var _rowSection2 = _interopRequireDefault(_rowSection); - -var _const = require('./const'); - -var _const2 = _interopRequireDefault(_const); - -var _rowConsumer = require('./row-selection/row-consumer'); - -var _rowConsumer2 = _interopRequireDefault(_rowConsumer); - -var _rowConsumer3 = require('./row-expand/row-consumer'); - -var _rowConsumer4 = _interopRequireDefault(_rowConsumer3); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint react/prop-types: 0 */ -/* eslint react/require-default-props: 0 */ - -var Body = function (_React$Component) { - _inherits(Body, _React$Component); - - function Body(props) { - _classCallCheck(this, Body); - - var _this = _possibleConstructorReturn(this, (Body.__proto__ || Object.getPrototypeOf(Body)).call(this, props)); - - var keyField = props.keyField, - cellEdit = props.cellEdit, - selectRow = props.selectRow, - expandRow = props.expandRow; - - // Construct Editing Cell Component - - if (cellEdit.createContext) { - _this.EditingCell = cellEdit.createEditingCell(_utils2.default, cellEdit.options.onStartEdit); - } - - // Construct Row Component - var RowComponent = _simpleRow2.default; - var selectRowEnabled = selectRow.mode !== _const2.default.ROW_SELECT_DISABLED; - var expandRowEnabled = !!expandRow.renderer; - - if (expandRowEnabled) { - RowComponent = (0, _rowConsumer4.default)(_aggregateRow2.default); - } - - if (selectRowEnabled) { - RowComponent = (0, _rowConsumer2.default)(expandRowEnabled ? RowComponent : _aggregateRow2.default); - } - - if (cellEdit.createContext) { - RowComponent = cellEdit.withRowLevelCellEdit(RowComponent, selectRowEnabled, keyField, _utils2.default); - } - _this.RowComponent = RowComponent; - return _this; - } - - _createClass(Body, [{ - key: 'render', - value: function render() { - var _this2 = this; - - var _props = this.props, - columns = _props.columns, - data = _props.data, - tabIndexCell = _props.tabIndexCell, - keyField = _props.keyField, - isEmpty = _props.isEmpty, - noDataIndication = _props.noDataIndication, - visibleColumnSize = _props.visibleColumnSize, - cellEdit = _props.cellEdit, - selectRow = _props.selectRow, - rowStyle = _props.rowStyle, - rowClasses = _props.rowClasses, - rowEvents = _props.rowEvents, - expandRow = _props.expandRow, - className = _props.className; - - - var content = void 0; - - if (isEmpty) { - var indication = _utils2.default.isFunction(noDataIndication) ? noDataIndication() : noDataIndication; - if (!indication) { - return null; - } - content = _react2.default.createElement(_rowSection2.default, { content: indication, colSpan: visibleColumnSize }); - } else { - var selectRowEnabled = selectRow.mode !== _const2.default.ROW_SELECT_DISABLED; - var expandRowEnabled = !!expandRow.renderer; - - var additionalRowProps = {}; - - if (cellEdit.createContext) { - additionalRowProps.EditingCellComponent = this.EditingCell; - } - - if (selectRowEnabled || expandRowEnabled) { - additionalRowProps.expandRow = expandRow; - additionalRowProps.selectRow = selectRow; - } - - content = data - .filter(row => row) - .map(function (row, index) { - var key = _utils2.default.get(row, keyField); - var baseRowProps = _extends({ - key: key, - row: row, - tabIndexCell: tabIndexCell, - columns: columns, - keyField: keyField, - cellEdit: cellEdit, - value: key, - rowIndex: index, - visibleColumnSize: visibleColumnSize, - attrs: rowEvents || {} - }, additionalRowProps); - - baseRowProps.style = _utils2.default.isFunction(rowStyle) ? rowStyle(row, index) : rowStyle; - baseRowProps.className = _utils2.default.isFunction(rowClasses) ? rowClasses(row, index) : rowClasses; - - return _react2.default.createElement(_this2.RowComponent, baseRowProps); - }); - } - - return _react2.default.createElement( - 'tbody', - { className: className }, - content - ); - } - }]); - - return Body; -}(_react2.default.Component); - -Body.propTypes = { - keyField: _propTypes2.default.string.isRequired, - data: _propTypes2.default.array.isRequired, - columns: _propTypes2.default.array.isRequired, - selectRow: _propTypes2.default.object -}; - -exports.default = Body; diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/bootstrap-table.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/bootstrap-table.js deleted file mode 100644 index 4bb7a5e8..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/bootstrap-table.js +++ /dev/null @@ -1,337 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = require('prop-types'); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _classnames = require('classnames'); - -var _classnames2 = _interopRequireDefault(_classnames); - -var _header = require('./header'); - -var _header2 = _interopRequireDefault(_header); - -var _filters = require('./filters'); - -var _filters2 = _interopRequireDefault(_filters); - -var _caption = require('./caption'); - -var _caption2 = _interopRequireDefault(_caption); - -var _body = require('./body'); - -var _body2 = _interopRequireDefault(_body); - -var _footer = require('./footer'); - -var _footer2 = _interopRequireDefault(_footer); - -var _propsResolver = require('./props-resolver'); - -var _propsResolver2 = _interopRequireDefault(_propsResolver); - -var _const = require('./const'); - -var _const2 = _interopRequireDefault(_const); - -var _utils = require('./utils'); - -var _utils2 = _interopRequireDefault(_utils); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint camelcase: 0 */ -/* eslint arrow-body-style: 0 */ - -var BootstrapTable = function (_PropsBaseResolver) { - _inherits(BootstrapTable, _PropsBaseResolver); - - function BootstrapTable(props) { - _classCallCheck(this, BootstrapTable); - - var _this = _possibleConstructorReturn(this, (BootstrapTable.__proto__ || Object.getPrototypeOf(BootstrapTable)).call(this, props)); - - _this.getData = function () { - return _this.visibleRows(); - }; - - _this.validateProps(); - return _this; - } - - _createClass(BootstrapTable, [{ - key: 'UNSAFE_componentWillReceiveProps', - value: function UNSAFE_componentWillReceiveProps(nextProps) { - if (nextProps.onDataSizeChange && !nextProps.pagination) { - if (nextProps.data.length !== this.props.data.length) { - nextProps.onDataSizeChange({ dataSize: nextProps.data.length }); - } - } - } - - // Exposed APIs - - }, { - key: 'render', - value: function render() { - var _props = this.props, - loading = _props.loading, - overlay = _props.overlay; - - if (overlay) { - var LoadingOverlay = overlay(loading); - return _react2.default.createElement( - LoadingOverlay, - null, - this.renderTable() - ); - } - return this.renderTable(); - } - }, { - key: 'renderTable', - value: function renderTable() { - var _props2 = this.props, - columns = _props2.columns, - keyField = _props2.keyField, - tabIndexCell = _props2.tabIndexCell, - id = _props2.id, - classes = _props2.classes, - bootstrap4 = _props2.bootstrap4, - striped = _props2.striped, - hover = _props2.hover, - bordered = _props2.bordered, - condensed = _props2.condensed, - noDataIndication = _props2.noDataIndication, - caption = _props2.caption, - rowStyle = _props2.rowStyle, - rowClasses = _props2.rowClasses, - wrapperClasses = _props2.wrapperClasses, - rowEvents = _props2.rowEvents, - selectRow = _props2.selectRow, - expandRow = _props2.expandRow, - cellEdit = _props2.cellEdit, - filterPosition = _props2.filterPosition; - - - var tableWrapperClass = (0, _classnames2.default)('react-bootstrap-table', wrapperClasses); - - var tableClass = (0, _classnames2.default)('table', _defineProperty({ - 'table-striped': striped, - 'table-hover': hover, - 'table-bordered': bordered - }, bootstrap4 ? 'table-sm' : 'table-condensed', condensed), classes); - - var hasFilters = columns.some(function (col) { - return col.filter || col.filterRenderer; - }); - - var hasFooter = _utils2.default.filter(columns, function (col) { - return _utils2.default.has(col, 'footer'); - }).length > 0; - - var tableCaption = caption && _react2.default.createElement( - _caption2.default, - { bootstrap4: bootstrap4 }, - caption - ); - - return _react2.default.createElement( - 'div', - { className: tableWrapperClass }, - _react2.default.createElement( - 'table', - { id: id, className: tableClass }, - tableCaption, - _react2.default.createElement(_header2.default, { - columns: columns, - className: this.props.headerClasses, - wrapperClasses: this.props.headerWrapperClasses, - sortField: this.props.sortField, - sortOrder: this.props.sortOrder, - onSort: this.props.onSort, - globalSortCaret: this.props.sort && this.props.sort.sortCaret, - onFilter: this.props.onFilter, - currFilters: this.props.currFilters, - onExternalFilter: this.props.onExternalFilter, - selectRow: selectRow, - expandRow: expandRow, - filterPosition: filterPosition - }), - hasFilters && filterPosition !== _const2.default.FILTERS_POSITION_INLINE && _react2.default.createElement(_filters2.default, { - columns: columns, - className: this.props.filtersClasses, - onSort: this.props.onSort, - onFilter: this.props.onFilter, - currFilters: this.props.currFilters, - filterPosition: this.props.filterPosition, - onExternalFilter: this.props.onExternalFilter, - selectRow: selectRow, - expandRow: expandRow - }), - _react2.default.createElement(_body2.default, { - className: this.props.bodyClasses, - data: this.getData(), - keyField: keyField, - tabIndexCell: tabIndexCell, - columns: columns, - isEmpty: this.isEmpty(), - visibleColumnSize: this.visibleColumnSize(), - noDataIndication: noDataIndication, - cellEdit: cellEdit, - selectRow: selectRow, - expandRow: expandRow, - rowStyle: rowStyle, - rowClasses: rowClasses, - rowEvents: rowEvents - }), - hasFooter && _react2.default.createElement(_footer2.default, { - data: this.getData(), - columns: columns, - selectRow: selectRow, - expandRow: expandRow, - className: this.props.footerClasses - }) - ) - ); - } - }]); - - return BootstrapTable; -}((0, _propsResolver2.default)(_react.Component)); - -BootstrapTable.propTypes = { - keyField: _propTypes2.default.string.isRequired, - data: _propTypes2.default.array.isRequired, - columns: _propTypes2.default.array.isRequired, - bootstrap4: _propTypes2.default.bool, - remote: _propTypes2.default.oneOfType([_propTypes2.default.bool, _propTypes2.default.shape({ - pagination: _propTypes2.default.bool - })]), - noDataIndication: _propTypes2.default.oneOfType([_propTypes2.default.node, _propTypes2.default.func]), - striped: _propTypes2.default.bool, - bordered: _propTypes2.default.bool, - hover: _propTypes2.default.bool, - tabIndexCell: _propTypes2.default.bool, - id: _propTypes2.default.string, - classes: _propTypes2.default.string, - headerClasses: _propTypes2.default.string, - bodyClasses: _propTypes2.default.string, - wrapperClasses: _propTypes2.default.string, - headerWrapperClasses: _propTypes2.default.string, - condensed: _propTypes2.default.bool, - caption: _propTypes2.default.oneOfType([_propTypes2.default.node, _propTypes2.default.string]), - pagination: _propTypes2.default.object, - filter: _propTypes2.default.object, - cellEdit: _propTypes2.default.object, - selectRow: _propTypes2.default.shape({ - mode: _propTypes2.default.oneOf([_const2.default.ROW_SELECT_SINGLE, _const2.default.ROW_SELECT_MULTIPLE, _const2.default.ROW_SELECT_DISABLED]).isRequired, - clickToSelect: _propTypes2.default.bool, - clickToExpand: _propTypes2.default.bool, - clickToEdit: _propTypes2.default.bool, - hideSelectAll: _propTypes2.default.bool, - onSelect: _propTypes2.default.func, - onSelectAll: _propTypes2.default.func, - style: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.func]), - classes: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.func]), - nonSelectable: _propTypes2.default.array, - nonSelectableStyle: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.func]), - nonSelectableClasses: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.func]), - bgColor: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.func]), - hideSelectColumn: _propTypes2.default.bool, - selectionRenderer: _propTypes2.default.func, - selectionHeaderRenderer: _propTypes2.default.func, - headerColumnStyle: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.func]), - selectColumnStyle: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.func]), - selectColumnPosition: _propTypes2.default.oneOf([_const2.default.INDICATOR_POSITION_LEFT, _const2.default.INDICATOR_POSITION_RIGHT]) - }), - expandRow: _propTypes2.default.shape({ - renderer: _propTypes2.default.func, - expanded: _propTypes2.default.array, - onExpand: _propTypes2.default.func, - onExpandAll: _propTypes2.default.func, - nonExpandable: _propTypes2.default.array, - showExpandColumn: _propTypes2.default.bool, - onlyOneExpanding: _propTypes2.default.bool, - expandByColumnOnly: _propTypes2.default.bool, - expandColumnRenderer: _propTypes2.default.func, - expandHeaderColumnRenderer: _propTypes2.default.func, - expandColumnPosition: _propTypes2.default.oneOf([_const2.default.INDICATOR_POSITION_LEFT, _const2.default.INDICATOR_POSITION_RIGHT]), - className: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.func]), - parentClassName: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.func]) - }), - rowStyle: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.func]), - rowEvents: _propTypes2.default.object, - rowClasses: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.func]), - filtersClasses: _propTypes2.default.string, - filterPosition: _propTypes2.default.oneOf([_const2.default.FILTERS_POSITION_TOP, _const2.default.FILTERS_POSITION_INLINE, _const2.default.FILTERS_POSITION_BOTTOM]), - footerClasses: _propTypes2.default.string, - defaultSorted: _propTypes2.default.arrayOf(_propTypes2.default.shape({ - dataField: _propTypes2.default.string.isRequired, - order: _propTypes2.default.oneOf([_const2.default.SORT_DESC, _const2.default.SORT_ASC]).isRequired - })), - sort: _propTypes2.default.shape({ - dataField: _propTypes2.default.string, - order: _propTypes2.default.oneOf([_const2.default.SORT_DESC, _const2.default.SORT_ASC]), - sortFunc: _propTypes2.default.func, - sortCaret: _propTypes2.default.func - }), - defaultSortDirection: _propTypes2.default.oneOf([_const2.default.SORT_DESC, _const2.default.SORT_ASC]), - overlay: _propTypes2.default.func, - onTableChange: _propTypes2.default.func, - onSort: _propTypes2.default.func, - onFilter: _propTypes2.default.func, - onExternalFilter: _propTypes2.default.func, - onDataSizeChange: _propTypes2.default.func, - // Inject from toolkit - search: _propTypes2.default.shape({ - searchText: _propTypes2.default.string, - searchContext: _propTypes2.default.func - }), - setDependencyModules: _propTypes2.default.func -}; - -BootstrapTable.defaultProps = { - bootstrap4: false, - remote: false, - striped: false, - bordered: true, - hover: false, - condensed: false, - noDataIndication: null, - selectRow: { - mode: _const2.default.ROW_SELECT_DISABLED, - selected: [], - hideSelectColumn: true - }, - expandRow: { - renderer: undefined, - expanded: [], - nonExpandable: [] - }, - cellEdit: { - mode: null, - nonEditableRows: [] - }, - filterPosition: _const2.default.FILTERS_POSITION_INLINE -}; - -exports.default = BootstrapTable; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/caption.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/caption.js deleted file mode 100644 index f0eab8b2..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/caption.js +++ /dev/null @@ -1,39 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = require('prop-types'); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/* eslint react/require-default-props: 0 */ -var Caption = function Caption(props) { - if (!props.children) return null; - - var caption = props.bootstrap4 ? _react2.default.createElement( - 'caption', - { style: { captionSide: 'top' } }, - props.children - ) : _react2.default.createElement( - 'caption', - null, - props.children - ); - - return caption; -}; - -Caption.propTypes = { - children: _propTypes2.default.oneOfType([_propTypes2.default.node, _propTypes2.default.string]), - bootstrap4: _propTypes2.default.bool -}; - -exports.default = Caption; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/cell-event-delegater.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/cell-event-delegater.js deleted file mode 100644 index e3633e1e..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/cell-event-delegater.js +++ /dev/null @@ -1,71 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _utils = require('./utils'); - -var _utils2 = _interopRequireDefault(_utils); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -var events = ['onClick', 'onDoubleClick', 'onMouseEnter', 'onMouseLeave', 'onContextMenu', 'onAuxClick']; - -exports.default = function (ExtendBase) { - return function (_ExtendBase) { - _inherits(CellEventDelegater, _ExtendBase); - - function CellEventDelegater(props) { - _classCallCheck(this, CellEventDelegater); - - var _this = _possibleConstructorReturn(this, (CellEventDelegater.__proto__ || Object.getPrototypeOf(CellEventDelegater)).call(this, props)); - - _this.createDefaultEventHandler = _this.createDefaultEventHandler.bind(_this); - return _this; - } - - _createClass(CellEventDelegater, [{ - key: 'createDefaultEventHandler', - value: function createDefaultEventHandler(cb) { - var _this2 = this; - - return function (e) { - var _props = _this2.props, - column = _props.column, - columnIndex = _props.columnIndex, - index = _props.index; - - cb(e, column, typeof columnIndex !== 'undefined' ? columnIndex : index); - }; - } - }, { - key: 'delegate', - value: function delegate() { - var _this3 = this; - - var attrs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - var newAttrs = _extends({}, attrs); - Object.keys(attrs).forEach(function (attr) { - if (_utils2.default.contains(events, attr)) { - newAttrs[attr] = _this3.createDefaultEventHandler(attrs[attr]); - } - }); - return newAttrs; - } - }]); - - return CellEventDelegater; - }(ExtendBase); -}; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/cell.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/cell.js deleted file mode 100644 index 4e9dfb21..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/cell.js +++ /dev/null @@ -1,134 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = require('prop-types'); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _cellEventDelegater = require('./cell-event-delegater'); - -var _cellEventDelegater2 = _interopRequireDefault(_cellEventDelegater); - -var _utils = require('./utils'); - -var _utils2 = _interopRequireDefault(_utils); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint react/prop-types: 0 */ - - -var Cell = function (_eventDelegater) { - _inherits(Cell, _eventDelegater); - - function Cell(props) { - _classCallCheck(this, Cell); - - var _this = _possibleConstructorReturn(this, (Cell.__proto__ || Object.getPrototypeOf(Cell)).call(this, props)); - - _this.createHandleEditingCell = function (originFunc) { - return function (e) { - var _this$props = _this.props, - onStart = _this$props.onStart, - rowIndex = _this$props.rowIndex, - columnIndex = _this$props.columnIndex, - clickToEdit = _this$props.clickToEdit, - dbclickToEdit = _this$props.dbclickToEdit; - - if ((clickToEdit || dbclickToEdit) && _utils2.default.isFunction(originFunc)) { - originFunc(e); - } - if (onStart) { - onStart(rowIndex, columnIndex); - } - }; - }; - - _this.createHandleEditingCell = _this.createHandleEditingCell.bind(_this); - return _this; - } - - _createClass(Cell, [{ - key: 'shouldComponentUpdate', - value: function shouldComponentUpdate(nextProps) { - var shouldUpdate = false; - if (nextProps.column.isDummyField) { - shouldUpdate = !_utils2.default.isEqual(this.props.row, nextProps.row); - } else { - shouldUpdate = _utils2.default.get(this.props.row, this.props.column.dataField) !== _utils2.default.get(nextProps.row, nextProps.column.dataField); - } - - if (shouldUpdate) return true; - - // if (nextProps.formatter) - - shouldUpdate = (nextProps.column.formatter ? !_utils2.default.isEqual(this.props.row, nextProps.row) : false) || this.props.column.hidden !== nextProps.column.hidden || this.props.column.isDummyField !== nextProps.column.isDummyField || this.props.rowIndex !== nextProps.rowIndex || this.props.columnIndex !== nextProps.columnIndex || this.props.className !== nextProps.className || this.props.title !== nextProps.title || this.props.editable !== nextProps.editable || this.props.clickToEdit !== nextProps.clickToEdit || this.props.dbclickToEdit !== nextProps.dbclickToEdit || !_utils2.default.isEqual(this.props.style, nextProps.style) || !_utils2.default.isEqual(this.props.column.formatExtraData, nextProps.column.formatExtraData) || !_utils2.default.isEqual(this.props.column.events, nextProps.column.events) || !_utils2.default.isEqual(this.props.column.attrs, nextProps.column.attrs) || this.props.tabIndex !== nextProps.tabIndex; - return shouldUpdate; - } - }, { - key: 'render', - value: function render() { - var _props = this.props, - row = _props.row, - rowIndex = _props.rowIndex, - column = _props.column, - columnIndex = _props.columnIndex, - onStart = _props.onStart, - editable = _props.editable, - clickToEdit = _props.clickToEdit, - dbclickToEdit = _props.dbclickToEdit, - rest = _objectWithoutProperties(_props, ['row', 'rowIndex', 'column', 'columnIndex', 'onStart', 'editable', 'clickToEdit', 'dbclickToEdit']); - - var dataField = column.dataField, - formatter = column.formatter, - formatExtraData = column.formatExtraData; - - var attrs = this.delegate(_extends({}, rest)); - var content = column.isDummyField ? null : _utils2.default.get(row, dataField); - - if (formatter) { - content = column.formatter(content, row, rowIndex, formatExtraData); - } - - if (clickToEdit && editable) { - attrs.onClick = this.createHandleEditingCell(attrs.onClick); - } else if (dbclickToEdit && editable) { - attrs.onDoubleClick = this.createHandleEditingCell(attrs.onDoubleClick); - } - - return _react2.default.createElement( - 'td', - attrs, - typeof content === 'boolean' ? '' + content : content - ); - } - }]); - - return Cell; -}((0, _cellEventDelegater2.default)(_react.Component)); - -Cell.propTypes = { - row: _propTypes2.default.object.isRequired, - rowIndex: _propTypes2.default.number.isRequired, - column: _propTypes2.default.object.isRequired, - columnIndex: _propTypes2.default.number.isRequired -}; - -exports.default = Cell; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/const.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/const.js deleted file mode 100644 index 5c184e54..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/const.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = { - SORT_ASC: 'asc', - SORT_DESC: 'desc', - ROW_SELECT_SINGLE: 'radio', - ROW_SELECT_MULTIPLE: 'checkbox', - ROW_SELECT_DISABLED: 'ROW_SELECT_DISABLED', - CHECKBOX_STATUS_CHECKED: 'checked', - CHECKBOX_STATUS_INDETERMINATE: 'indeterminate', - CHECKBOX_STATUS_UNCHECKED: 'unchecked', - INDICATOR_POSITION_LEFT: 'left', - INDICATOR_POSITION_RIGHT: 'right', - TYPE_STRING: 'string', - TYPE_NUMBER: 'number', - TYPE_BOOLEAN: 'bool', - TYPE_DATE: 'date', - FILTERS_POSITION_INLINE: 'inline', - FILTERS_POSITION_TOP: 'top', - FILTERS_POSITION_BOTTOM: 'bottom' -}; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/contexts/bootstrap.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/contexts/bootstrap.js deleted file mode 100644 index 3c8b79b8..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/contexts/bootstrap.js +++ /dev/null @@ -1,16 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.BootstrapContext = undefined; - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var BootstrapContext = exports.BootstrapContext = _react2.default.createContext({ - bootstrap4: false -}); \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/contexts/column-context.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/contexts/column-context.js deleted file mode 100644 index 487cef0d..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/contexts/column-context.js +++ /dev/null @@ -1,80 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = require('prop-types'); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint react/prop-types: 0 */ -/* eslint react/prefer-stateless-function: 0 */ - - -exports.default = function () { - var ColumnManagementContext = _react2.default.createContext(); - - var ColumnManagementProvider = function (_React$Component) { - _inherits(ColumnManagementProvider, _React$Component); - - function ColumnManagementProvider() { - _classCallCheck(this, ColumnManagementProvider); - - return _possibleConstructorReturn(this, (ColumnManagementProvider.__proto__ || Object.getPrototypeOf(ColumnManagementProvider)).apply(this, arguments)); - } - - _createClass(ColumnManagementProvider, [{ - key: 'render', - value: function render() { - var toggleColumn = void 0; - var _props = this.props, - columns = _props.columns, - toggles = _props.toggles; - - if (toggles) { - toggleColumn = columns.filter(function (column) { - return toggles[column.dataField]; - }); - } else { - toggleColumn = columns.filter(function (column) { - return !column.hidden; - }); - } - return _react2.default.createElement( - ColumnManagementContext.Provider, - { value: { columns: toggleColumn } }, - this.props.children - ); - } - }]); - - return ColumnManagementProvider; - }(_react2.default.Component); - - ColumnManagementProvider.propTypes = { - columns: _propTypes2.default.array.isRequired, - toggles: _propTypes2.default.object - }; - ColumnManagementProvider.defaultProps = { - toggles: null - }; - - - return { - Provider: ColumnManagementProvider, - Consumer: ColumnManagementContext.Consumer - }; -}; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/contexts/data-context.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/contexts/data-context.js deleted file mode 100644 index 4d87c4e4..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/contexts/data-context.js +++ /dev/null @@ -1,84 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = require('prop-types'); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint camelcase: 0 */ - - -exports.default = function () { - var DataContext = _react2.default.createContext(); - - var DataProvider = function (_Component) { - _inherits(DataProvider, _Component); - - function DataProvider() { - var _ref; - - var _temp, _this, _ret; - - _classCallCheck(this, DataProvider); - - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = DataProvider.__proto__ || Object.getPrototypeOf(DataProvider)).call.apply(_ref, [this].concat(args))), _this), _this.state = { data: _this.props.data }, _this.getData = function (filterProps, searchProps, sortProps, paginationProps) { - if (paginationProps) return paginationProps.data;else if (sortProps) return sortProps.data;else if (searchProps) return searchProps.data;else if (filterProps) return filterProps.data; - return _this.props.data; - }, _temp), _possibleConstructorReturn(_this, _ret); - } - - _createClass(DataProvider, [{ - key: 'UNSAFE_componentWillReceiveProps', - value: function UNSAFE_componentWillReceiveProps(nextProps) { - this.setState(function () { - return { data: nextProps.data }; - }); - } - }, { - key: 'render', - value: function render() { - return _react2.default.createElement( - DataContext.Provider, - { - value: { - data: this.state.data, - getData: this.getData - } - }, - this.props.children - ); - } - }]); - - return DataProvider; - }(_react.Component); - - DataProvider.propTypes = { - data: _propTypes2.default.array.isRequired, - children: _propTypes2.default.node.isRequired - }; - - return { - Provider: DataProvider, - Consumer: DataContext.Consumer - }; -}; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/contexts/index.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/contexts/index.js deleted file mode 100644 index c64e66de..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/contexts/index.js +++ /dev/null @@ -1,434 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _events = require('events'); - -var _events2 = _interopRequireDefault(_events); - -var _utils = require('../utils'); - -var _utils2 = _interopRequireDefault(_utils); - -var _dataContext = require('./data-context'); - -var _dataContext2 = _interopRequireDefault(_dataContext); - -var _columnContext = require('./column-context'); - -var _columnContext2 = _interopRequireDefault(_columnContext); - -var _sortContext = require('./sort-context'); - -var _sortContext2 = _interopRequireDefault(_sortContext); - -var _selectionContext = require('./selection-context'); - -var _selectionContext2 = _interopRequireDefault(_selectionContext); - -var _rowExpandContext = require('./row-expand-context'); - -var _rowExpandContext2 = _interopRequireDefault(_rowExpandContext); - -var _remoteResolver2 = require('../props-resolver/remote-resolver'); - -var _remoteResolver3 = _interopRequireDefault(_remoteResolver2); - -var _bootstrap = require('./bootstrap'); - -var _operators = require('../store/operators'); - -var _operators2 = _interopRequireDefault(_operators); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint camelcase: 0 */ -/* eslint no-return-assign: 0 */ -/* eslint no-param-reassign: 0 */ -/* eslint class-methods-use-this: 0 */ - - -var withContext = function withContext(Base) { - return function (_remoteResolver) { - _inherits(BootstrapTableContainer, _remoteResolver); - - function BootstrapTableContainer(props) { - _classCallCheck(this, BootstrapTableContainer); - - var _this = _possibleConstructorReturn(this, (BootstrapTableContainer.__proto__ || Object.getPrototypeOf(BootstrapTableContainer)).call(this, props)); - - _this.DataContext = (0, _dataContext2.default)(); - - if (props.registerExposedAPI) { - var exposedAPIEmitter = new _events2.default(); - exposedAPIEmitter.on('get.table.data', function (payload) { - return payload.result = _this.table.getData(); - }); - exposedAPIEmitter.on('get.selected.rows', function (payload) { - return payload.result = _this.selectionContext.getSelected(); - }); - exposedAPIEmitter.on('get.filtered.rows', function (payload) { - if (_this.searchContext) { - payload.result = _this.searchContext.getSearched(); - } else if (_this.filterContext) { - payload.result = _this.filterContext.getFiltered(); - } else { - payload.result = _this.table.getData(); - } - }); - props.registerExposedAPI(exposedAPIEmitter); - } - - if (props.columns.filter(function (col) { - return col.sort; - }).length > 0) { - _this.SortContext = (0, _sortContext2.default)(_operators2.default, _this.isRemoteSort, _this.handleRemoteSortChange); - } - - if (props.columnToggle || props.columns.filter(function (col) { - return col.hidden; - }).length > 0) { - _this.ColumnManagementContext = (0, _columnContext2.default)(); - } - - if (props.selectRow) { - _this.SelectionContext = _selectionContext2.default; - } - - if (props.expandRow) { - _this.RowExpandContext = _rowExpandContext2.default; - } - - if (props.cellEdit && props.cellEdit.createContext) { - _this.CellEditContext = props.cellEdit.createContext(_utils2.default, _operators2.default, _this.isRemoteCellEdit, _this.handleRemoteCellChange); - } - - if (props.filter) { - _this.FilterContext = props.filter.createContext(_utils2.default, _this.isRemoteFiltering, _this.handleRemoteFilterChange); - } - - if (props.pagination) { - _this.PaginationContext = props.pagination.createContext(); - } - - if (props.search && props.search.searchContext) { - _this.SearchContext = props.search.searchContext(_utils2.default, _this.isRemoteSearch, _this.handleRemoteSearchChange); - } - - if (props.setDependencyModules) { - props.setDependencyModules(_utils2.default); - } - - if (props.setPaginationRemoteEmitter) { - props.setPaginationRemoteEmitter(_this.remoteEmitter); - } - return _this; - } - - _createClass(BootstrapTableContainer, [{ - key: 'UNSAFE_componentWillReceiveProps', - value: function UNSAFE_componentWillReceiveProps(nextProps) { - if (nextProps.columns.filter(function (col) { - return col.sort; - }).length <= 0) { - this.SortContext = null; - } else if (!this.SortContext) { - this.SortContext = (0, _sortContext2.default)(_operators2.default, this.isRemoteSort, this.handleRemoteSortChange); - } - if (!nextProps.pagination && this.props.pagination) { - this.PaginationContext = null; - } - if (nextProps.pagination && !this.props.pagination) { - this.PaginationContext = nextProps.pagination.createContext(this.isRemotePagination, this.handleRemotePageChange); - } - if (!nextProps.cellEdit && this.props.cellEdit) { - this.CellEditContext = null; - } - if (nextProps.cellEdit && !this.props.cellEdit) { - this.CellEditContext = nextProps.cellEdit.createContext(_utils2.default, _operators2.default, this.isRemoteCellEdit, this.handleRemoteCellChange); - } - } - }, { - key: 'renderBase', - value: function renderBase() { - var _this2 = this; - - return function (rootProps, filterProps, searchProps, sortProps, paginationProps, columnToggleProps) { - return _react2.default.createElement(Base, _extends({ - ref: function ref(n) { - return _this2.table = n; - } - }, _this2.props, sortProps, filterProps, searchProps, paginationProps, columnToggleProps, { - data: rootProps.getData(filterProps, searchProps, sortProps, paginationProps) - })); - }; - } - }, { - key: 'renderWithColumnManagementCtx', - value: function renderWithColumnManagementCtx(base, baseProps) { - var _this3 = this; - - return function (rootProps, filterProps, searchProps, sortProps, paginationProps) { - return _react2.default.createElement( - _this3.ColumnManagementContext.Provider, - _extends({}, baseProps, { - toggles: _this3.props.columnToggle ? _this3.props.columnToggle.toggles : null - }), - _react2.default.createElement( - _this3.ColumnManagementContext.Consumer, - null, - function (columnToggleProps) { - return base(rootProps, filterProps, searchProps, sortProps, paginationProps, columnToggleProps); - } - ) - ); - }; - } - }, { - key: 'renderWithSelectionCtx', - value: function renderWithSelectionCtx(base, baseProps) { - var _this4 = this; - - return function (rootProps, filterProps, searchProps, sortProps, paginationProps) { - return _react2.default.createElement( - _this4.SelectionContext.Provider, - _extends({}, baseProps, { - ref: function ref(n) { - return _this4.selectionContext = n; - }, - selectRow: _this4.props.selectRow, - data: rootProps.getData(filterProps, searchProps, sortProps, paginationProps) - }), - base(rootProps, filterProps, searchProps, sortProps, paginationProps) - ); - }; - } - }, { - key: 'renderWithRowExpandCtx', - value: function renderWithRowExpandCtx(base, baseProps) { - var _this5 = this; - - return function (rootProps, filterProps, searchProps, sortProps, paginationProps) { - return _react2.default.createElement( - _this5.RowExpandContext.Provider, - _extends({}, baseProps, { - ref: function ref(n) { - return _this5.rowExpandContext = n; - }, - expandRow: _this5.props.expandRow, - data: rootProps.getData(filterProps, searchProps, sortProps, paginationProps) - }), - base(rootProps, filterProps, searchProps, sortProps, paginationProps) - ); - }; - } - }, { - key: 'renderWithPaginationCtx', - value: function renderWithPaginationCtx(base) { - var _this6 = this; - - return function (rootProps, filterProps, searchProps, sortProps) { - return _react2.default.createElement( - _this6.PaginationContext.Provider, - { - ref: function ref(n) { - return _this6.paginationContext = n; - }, - pagination: _this6.props.pagination, - data: rootProps.getData(filterProps, searchProps, sortProps), - bootstrap4: _this6.props.bootstrap4, - isRemotePagination: _this6.isRemotePagination, - remoteEmitter: _this6.remoteEmitter, - onDataSizeChange: _this6.props.onDataSizeChange, - tableId: _this6.props.id - }, - _react2.default.createElement( - _this6.PaginationContext.Consumer, - null, - function (paginationProps) { - return base(rootProps, filterProps, searchProps, sortProps, paginationProps); - } - ) - ); - }; - } - }, { - key: 'renderWithSortCtx', - value: function renderWithSortCtx(base, baseProps) { - var _this7 = this; - - return function (rootProps, filterProps, searchProps) { - return _react2.default.createElement( - _this7.SortContext.Provider, - _extends({}, baseProps, { - ref: function ref(n) { - return _this7.sortContext = n; - }, - defaultSorted: _this7.props.defaultSorted, - defaultSortDirection: _this7.props.defaultSortDirection, - sort: _this7.props.sort, - data: rootProps.getData(filterProps, searchProps) - }), - _react2.default.createElement( - _this7.SortContext.Consumer, - null, - function (sortProps) { - return base(rootProps, filterProps, searchProps, sortProps); - } - ) - ); - }; - } - }, { - key: 'renderWithSearchCtx', - value: function renderWithSearchCtx(base, baseProps) { - var _this8 = this; - - return function (rootProps, filterProps) { - return _react2.default.createElement( - _this8.SearchContext.Provider, - _extends({}, baseProps, { - ref: function ref(n) { - return _this8.searchContext = n; - }, - data: rootProps.getData(filterProps), - searchText: _this8.props.search.searchText, - dataChangeListener: _this8.props.dataChangeListener - }), - _react2.default.createElement( - _this8.SearchContext.Consumer, - null, - function (searchProps) { - return base(rootProps, filterProps, searchProps); - } - ) - ); - }; - } - }, { - key: 'renderWithFilterCtx', - value: function renderWithFilterCtx(base, baseProps) { - var _this9 = this; - - return function (rootProps) { - return _react2.default.createElement( - _this9.FilterContext.Provider, - _extends({}, baseProps, { - ref: function ref(n) { - return _this9.filterContext = n; - }, - data: rootProps.getData(), - filter: _this9.props.filter.options || {}, - dataChangeListener: _this9.props.dataChangeListener - }), - _react2.default.createElement( - _this9.FilterContext.Consumer, - null, - function (filterProps) { - return base(rootProps, filterProps); - } - ) - ); - }; - } - }, { - key: 'renderWithCellEditCtx', - value: function renderWithCellEditCtx(base, baseProps) { - var _this10 = this; - - return function (rootProps) { - return _react2.default.createElement( - _this10.CellEditContext.Provider, - _extends({}, baseProps, { - ref: function ref(n) { - return _this10.cellEditContext = n; - }, - selectRow: _this10.props.selectRow, - cellEdit: _this10.props.cellEdit, - data: rootProps.getData() - }), - base(rootProps) - ); - }; - } - }, { - key: 'render', - value: function render() { - var _props = this.props, - keyField = _props.keyField, - columns = _props.columns, - bootstrap4 = _props.bootstrap4; - - var baseProps = { keyField: keyField, columns: columns }; - - var base = this.renderBase(); - - if (this.ColumnManagementContext) { - base = this.renderWithColumnManagementCtx(base, baseProps); - } - - if (this.SelectionContext) { - base = this.renderWithSelectionCtx(base, baseProps); - } - - if (this.RowExpandContext) { - base = this.renderWithRowExpandCtx(base, baseProps); - } - - if (this.PaginationContext) { - base = this.renderWithPaginationCtx(base, baseProps); - } - - if (this.SortContext) { - base = this.renderWithSortCtx(base, baseProps); - } - - if (this.SearchContext) { - base = this.renderWithSearchCtx(base, baseProps); - } - - if (this.FilterContext) { - base = this.renderWithFilterCtx(base, baseProps); - } - - if (this.CellEditContext) { - base = this.renderWithCellEditCtx(base, baseProps); - } - - return _react2.default.createElement( - _bootstrap.BootstrapContext.Provider, - { value: { bootstrap4: bootstrap4 } }, - _react2.default.createElement( - this.DataContext.Provider, - _extends({}, baseProps, { - data: this.props.data - }), - _react2.default.createElement( - this.DataContext.Consumer, - null, - base - ) - ) - ); - } - }]); - - return BootstrapTableContainer; - }((0, _remoteResolver3.default)(_react.Component)); -}; - -exports.default = withContext; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/contexts/row-expand-context.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/contexts/row-expand-context.js deleted file mode 100644 index 41b79e16..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/contexts/row-expand-context.js +++ /dev/null @@ -1,197 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = require('prop-types'); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _operators = require('../store/operators'); - -var _operators2 = _interopRequireDefault(_operators); - -var _utils = require('../utils'); - -var _utils2 = _interopRequireDefault(_utils); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint camelcase: 0 */ -/* eslint react/prop-types: 0 */ - - -var RowExpandContext = _react2.default.createContext(); - -var RowExpandProvider = function (_React$Component) { - _inherits(RowExpandProvider, _React$Component); - - function RowExpandProvider() { - var _ref; - - var _temp, _this, _ret; - - _classCallCheck(this, RowExpandProvider); - - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = RowExpandProvider.__proto__ || Object.getPrototypeOf(RowExpandProvider)).call.apply(_ref, [this].concat(args))), _this), _this.state = { expanded: _this.props.expandRow.expanded || [], - isClosing: _this.props.expandRow.isClosing || [] }, _this.onClosed = function (closedRow) { - _this.setState({ isClosing: _this.state.isClosing.filter(function (value) { - return value !== closedRow; - }) }); - }, _this.handleRowExpand = function (rowKey, expanded, rowIndex, e) { - var _this$props = _this.props, - data = _this$props.data, - keyField = _this$props.keyField, - _this$props$expandRow = _this$props.expandRow, - onExpand = _this$props$expandRow.onExpand, - onlyOneExpanding = _this$props$expandRow.onlyOneExpanding, - nonExpandable = _this$props$expandRow.nonExpandable; - - if (nonExpandable && _utils2.default.contains(nonExpandable, rowKey)) { - return; - } - - var currExpanded = [].concat(_toConsumableArray(_this.state.expanded)); - var isClosing = [].concat(_toConsumableArray(_this.state.isClosing)); - - if (expanded) { - if (onlyOneExpanding) { - isClosing = isClosing.concat(currExpanded); - currExpanded = [rowKey]; - } else currExpanded.push(rowKey); - } else { - isClosing.push(rowKey); - currExpanded = currExpanded.filter(function (value) { - return value !== rowKey; - }); - } - - if (onExpand) { - var row = _operators2.default.getRowByRowId(data, keyField, rowKey); - onExpand(row, expanded, rowIndex, e); - } - _this.setState(function () { - return { expanded: currExpanded, isClosing: isClosing }; - }); - }, _this.handleAllRowExpand = function (e, expandAll) { - var _this$props2 = _this.props, - data = _this$props2.data, - keyField = _this$props2.keyField, - _this$props2$expandRo = _this$props2.expandRow, - onExpandAll = _this$props2$expandRo.onExpandAll, - nonExpandable = _this$props2$expandRo.nonExpandable; - var expanded = _this.state.expanded; - - - var currExpanded = void 0; - - if (expandAll) { - currExpanded = expanded.concat(_operators2.default.expandableKeys(data, keyField, nonExpandable)); - } else { - currExpanded = expanded.filter(function (s) { - return typeof data.find(function (d) { - return _utils2.default.get(d, keyField) === s; - }) === 'undefined'; - }); - } - - if (onExpandAll) { - onExpandAll(expandAll, _operators2.default.getExpandedRows(data, keyField, currExpanded), e); - } - - _this.setState(function () { - return { expanded: currExpanded }; - }); - }, _temp), _possibleConstructorReturn(_this, _ret); - } - - _createClass(RowExpandProvider, [{ - key: 'UNSAFE_componentWillReceiveProps', - value: function UNSAFE_componentWillReceiveProps(nextProps) { - var _this2 = this; - - if (nextProps.expandRow) { - var nextExpanded = [].concat(_toConsumableArray(nextProps.expandRow.expanded || this.state.expanded)); - var _nextProps$expandRow$ = nextProps.expandRow.nonExpandable, - nonExpandable = _nextProps$expandRow$ === undefined ? [] : _nextProps$expandRow$; - - nextExpanded = nextExpanded.filter(function (rowId) { - return !_utils2.default.contains(nonExpandable, rowId); - }); - var isClosing = this.state.expanded.reduce(function (acc, cur) { - if (!_utils2.default.contains(nextExpanded, cur)) { - acc.push(cur); - } - return acc; - }, []); - - this.setState(function () { - return { - expanded: nextExpanded, - isClosing: isClosing - }; - }); - } else { - this.setState(function () { - return { - expanded: _this2.state.expanded - }; - }); - } - } - }, { - key: 'render', - value: function render() { - var _props = this.props, - data = _props.data, - keyField = _props.keyField; - - return _react2.default.createElement( - RowExpandContext.Provider, - { - value: _extends({}, this.props.expandRow, { - nonExpandable: this.props.expandRow.nonExpandable, - expanded: this.state.expanded, - isClosing: this.state.isClosing, - onClosed: this.onClosed, - isAnyExpands: _operators2.default.isAnyExpands(data, keyField, this.state.expanded), - onRowExpand: this.handleRowExpand, - onAllRowExpand: this.handleAllRowExpand - }) - }, - this.props.children - ); - } - }]); - - return RowExpandProvider; -}(_react2.default.Component); - -RowExpandProvider.propTypes = { - children: _propTypes2.default.node.isRequired, - data: _propTypes2.default.array.isRequired, - keyField: _propTypes2.default.string.isRequired -}; -exports.default = { - Provider: RowExpandProvider, - Consumer: RowExpandContext.Consumer -}; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/contexts/selection-context.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/contexts/selection-context.js deleted file mode 100644 index e04a27fa..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/contexts/selection-context.js +++ /dev/null @@ -1,182 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = require('prop-types'); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _const = require('../const'); - -var _const2 = _interopRequireDefault(_const); - -var _utils = require('../utils'); - -var _utils2 = _interopRequireDefault(_utils); - -var _operators = require('../store/operators'); - -var _operators2 = _interopRequireDefault(_operators); - -var _selection = require('../store/selection'); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint camelcase: 0 */ -/* eslint react/prop-types: 0 */ - - -var SelectionContext = _react2.default.createContext(); - -var SelectionProvider = function (_React$Component) { - _inherits(SelectionProvider, _React$Component); - - function SelectionProvider(props) { - _classCallCheck(this, SelectionProvider); - - var _this = _possibleConstructorReturn(this, (SelectionProvider.__proto__ || Object.getPrototypeOf(SelectionProvider)).call(this, props)); - - _this.handleRowSelect = function (rowKey, checked, rowIndex, e) { - var _this$props = _this.props, - data = _this$props.data, - keyField = _this$props.keyField, - _this$props$selectRow = _this$props.selectRow, - mode = _this$props$selectRow.mode, - onSelect = _this$props$selectRow.onSelect; - var ROW_SELECT_SINGLE = _const2.default.ROW_SELECT_SINGLE; - - - var currSelected = [].concat(_toConsumableArray(_this.selected)); - - var result = true; - if (onSelect) { - var row = _operators2.default.getRowByRowId(data, keyField, rowKey); - result = onSelect(row, checked, rowIndex, e); - } - - if (result === true || result === undefined) { - if (mode === ROW_SELECT_SINGLE) { - // when select mode is radio - currSelected = [rowKey]; - } else if (checked) { - // when select mode is checkbox - currSelected.push(rowKey); - } else { - currSelected = currSelected.filter(function (value) { - return value !== rowKey; - }); - } - } - _this.selected = currSelected; - _this.forceUpdate(); - }; - - _this.handleAllRowsSelect = function (e, isUnSelect) { - var _this$props2 = _this.props, - data = _this$props2.data, - keyField = _this$props2.keyField, - _this$props2$selectRo = _this$props2.selectRow, - onSelectAll = _this$props2$selectRo.onSelectAll, - nonSelectable = _this$props2$selectRo.nonSelectable; - var selected = _this.selected; - - - var currSelected = void 0; - - if (!isUnSelect) { - currSelected = selected.concat(_operators2.default.selectableKeys(data, keyField, nonSelectable)); - } else { - currSelected = selected.filter(function (s) { - return typeof data.find(function (d) { - return _utils2.default.get(d, keyField) === s; - }) === 'undefined'; - }); - } - - var result = void 0; - if (onSelectAll) { - result = onSelectAll(!isUnSelect, _operators2.default.getSelectedRows(data, keyField, isUnSelect ? selected : currSelected), e); - if (Array.isArray(result)) { - currSelected = result; - } - } - _this.selected = currSelected; - _this.forceUpdate(); - }; - - _this.selected = props.selectRow.selected || []; - return _this; - } - - // exposed API - - - _createClass(SelectionProvider, [{ - key: 'getSelected', - value: function getSelected() { - return this.selected; - } - }, { - key: 'UNSAFE_componentWillReceiveProps', - value: function UNSAFE_componentWillReceiveProps(nextProps) { - if (nextProps.selectRow) { - this.selected = nextProps.selectRow.selected || this.selected; - } - } - }, { - key: 'render', - value: function render() { - var _getSelectionSummary = (0, _selection.getSelectionSummary)(this.props.data, this.props.keyField, this.selected), - allRowsSelected = _getSelectionSummary.allRowsSelected, - allRowsNotSelected = _getSelectionSummary.allRowsNotSelected; - - var checkedStatus = void 0; - - // checkbox status depending on selected rows counts - if (allRowsSelected) checkedStatus = _const2.default.CHECKBOX_STATUS_CHECKED;else if (allRowsNotSelected) checkedStatus = _const2.default.CHECKBOX_STATUS_UNCHECKED;else checkedStatus = _const2.default.CHECKBOX_STATUS_INDETERMINATE; - - return _react2.default.createElement( - SelectionContext.Provider, - { - value: _extends({}, this.props.selectRow, { - selected: this.selected, - onRowSelect: this.handleRowSelect, - onAllRowsSelect: this.handleAllRowsSelect, - allRowsSelected: allRowsSelected, - allRowsNotSelected: allRowsNotSelected, - checkedStatus: checkedStatus - }) - }, - this.props.children - ); - } - }]); - - return SelectionProvider; -}(_react2.default.Component); - -SelectionProvider.propTypes = { - children: _propTypes2.default.node.isRequired, - data: _propTypes2.default.array.isRequired, - keyField: _propTypes2.default.string.isRequired -}; -exports.default = { - Provider: SelectionProvider, - Consumer: SelectionContext.Consumer -}; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/contexts/sort-context.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/contexts/sort-context.js deleted file mode 100644 index 0962fd67..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/contexts/sort-context.js +++ /dev/null @@ -1,182 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = require('prop-types'); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _const = require('../const'); - -var _const2 = _interopRequireDefault(_const); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint camelcase: 0 */ -/* eslint react/require-default-props: 0 */ - - -exports.default = function (dataOperator, isRemoteSort, handleSortChange) { - var SortContext = _react2.default.createContext(); - - var SortProvider = function (_React$Component) { - _inherits(SortProvider, _React$Component); - - function SortProvider(props) { - _classCallCheck(this, SortProvider); - - var _this = _possibleConstructorReturn(this, (SortProvider.__proto__ || Object.getPrototypeOf(SortProvider)).call(this, props)); - - _initialiseProps.call(_this); - - var sortOrder = void 0; - var sortColumn = void 0; - var defaultSorted = props.defaultSorted, - defaultSortDirection = props.defaultSortDirection, - sort = props.sort; - - - if (defaultSorted && defaultSorted.length > 0) { - sortOrder = defaultSorted[0].order || defaultSortDirection; - sortColumn = _this.initSort(defaultSorted[0].dataField, sortOrder); - } else if (sort && sort.dataField && sort.order) { - sortOrder = sort.order; - sortColumn = _this.initSort(sort.dataField, sortOrder); - } - _this.state = { sortOrder: sortOrder, sortColumn: sortColumn }; - return _this; - } - - _createClass(SortProvider, [{ - key: 'componentDidMount', - value: function componentDidMount() { - var _state = this.state, - sortOrder = _state.sortOrder, - sortColumn = _state.sortColumn; - - if (isRemoteSort() && sortOrder && sortColumn) { - handleSortChange(sortColumn.dataField, sortOrder); - } - } - }, { - key: 'UNSAFE_componentWillReceiveProps', - value: function UNSAFE_componentWillReceiveProps(nextProps) { - var sort = nextProps.sort, - columns = nextProps.columns; - - if (sort && sort.dataField && sort.order) { - this.setState({ - sortOrder: sort.order, - sortColumn: columns.find(function (col) { - return col.dataField === sort.dataField; - }) - }); - } - } - }, { - key: 'initSort', - value: function initSort(sortField, sortOrder) { - var sortColumn = void 0; - var columns = this.props.columns; - - var sortColumns = columns.filter(function (col) { - return col.dataField === sortField; - }); - if (sortColumns.length > 0) { - sortColumn = sortColumns[0]; - - if (sortColumn.onSort) { - sortColumn.onSort(sortField, sortOrder); - } - } - return sortColumn; - } - }, { - key: 'render', - value: function render() { - var data = this.props.data; - var sort = this.props.sort; - var _state2 = this.state, - sortOrder = _state2.sortOrder, - sortColumn = _state2.sortColumn; - - if (!isRemoteSort() && sortColumn) { - var sortFunc = sortColumn.sortFunc ? sortColumn.sortFunc : sort && sort.sortFunc; - data = dataOperator.sort(data, sortOrder, _extends({}, sortColumn, { sortFunc: sortFunc })); - } - - return _react2.default.createElement( - SortContext.Provider, - { - value: { - data: data, - sortOrder: sortOrder, - onSort: this.handleSort, - sortField: sortColumn ? sortColumn.dataField : null - } - }, - this.props.children - ); - } - }]); - - return SortProvider; - }(_react2.default.Component); - - SortProvider.propTypes = { - data: _propTypes2.default.array.isRequired, - columns: _propTypes2.default.array.isRequired, - children: _propTypes2.default.node.isRequired, - defaultSorted: _propTypes2.default.arrayOf(_propTypes2.default.shape({ - dataField: _propTypes2.default.string.isRequired, - order: _propTypes2.default.oneOf([_const2.default.SORT_DESC, _const2.default.SORT_ASC]).isRequired - })), - sort: _propTypes2.default.shape({ - dataField: _propTypes2.default.string, - order: _propTypes2.default.oneOf([_const2.default.SORT_DESC, _const2.default.SORT_ASC]), - sortFunc: _propTypes2.default.func - }), - defaultSortDirection: _propTypes2.default.oneOf([_const2.default.SORT_DESC, _const2.default.SORT_ASC]) - }; - - var _initialiseProps = function _initialiseProps() { - var _this2 = this; - - this.handleSort = function (column) { - var sortOrder = dataOperator.nextOrder(column, _this2.state, _this2.props.defaultSortDirection); - - if (column.onSort) { - column.onSort(column.dataField, sortOrder); - } - - if (isRemoteSort()) { - handleSortChange(column.dataField, sortOrder); - } - _this2.setState(function () { - return { - sortOrder: sortOrder, - sortColumn: column - }; - }); - }; - }; - - return { - Provider: SortProvider, - Consumer: SortContext.Consumer - }; -}; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/filters-cell.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/filters-cell.js deleted file mode 100644 index c720f43a..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/filters-cell.js +++ /dev/null @@ -1,65 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = require('prop-types'); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _utils = require('./utils'); - -var _utils2 = _interopRequireDefault(_utils); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var FiltersCell = function FiltersCell(props) { - var index = props.index, - column = props.column, - onExternalFilter = props.onExternalFilter, - currFilters = props.currFilters, - onFilter = props.onFilter; - var filterRenderer = column.filterRenderer, - filter = column.filter; - - var filterElm = void 0; - var cellAttrs = {}; - var cellStyle = {}; - cellAttrs.style = cellStyle; - if (column.headerAlign) { - cellStyle.textAlign = _utils2.default.isFunction(column.headerAlign) ? column.headerAlign(column, index) : column.headerAlign; - } - if (column.filterRenderer) { - var onCustomFilter = onExternalFilter(column, filter.props.type); - filterElm = filterRenderer(onCustomFilter, column); - } else if (filter) { - filterElm = _react2.default.createElement(filter.Filter, _extends({}, filter.props, { - filterState: currFilters[column.dataField], - onFilter: onFilter, - column: column - })); - } - return _react2.default.createElement('th', cellAttrs, filterElm); -}; - -FiltersCell.propTypes = { - index: _propTypes2.default.number.isRequired, - column: _propTypes2.default.object.isRequired, - currFilters: _propTypes2.default.object.isRequired, - onFilter: _propTypes2.default.func, - onExternalFilter: _propTypes2.default.func -}; - -FiltersCell.defaultProps = { - onFilter: function onFilter() {}, - onExternalFilter: function onExternalFilter() {} -}; - -exports.default = FiltersCell; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/filters.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/filters.js deleted file mode 100644 index 7f2d4f7e..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/filters.js +++ /dev/null @@ -1,96 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = require('prop-types'); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _filtersCell = require('./filters-cell'); - -var _filtersCell2 = _interopRequireDefault(_filtersCell); - -var _const = require('./const'); - -var _const2 = _interopRequireDefault(_const); - -var _rowTemplate = require('./row/row-template'); - -var _rowTemplate2 = _interopRequireDefault(_rowTemplate); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var Filters = function Filters(props) { - var columns = props.columns, - onFilter = props.onFilter, - currFilters = props.currFilters, - filterPosition = props.filterPosition, - onExternalFilter = props.onExternalFilter, - className = props.className, - selectRow = props.selectRow, - expandRow = props.expandRow; - - - function renderContent() { - var filterColumns = []; - var showFiltersRow = false; - - columns.forEach(function (column, i) { - filterColumns.push(_react2.default.createElement(_filtersCell2.default, { - index: i, - key: column.dataField, - column: column, - currFilters: currFilters, - onExternalFilter: onExternalFilter, - onFilter: onFilter - })); - - if (column.filterRenderer || column.filter) { - if (!showFiltersRow) { - showFiltersRow = true; - } - } - }); - return filterColumns; - } - - return _react2.default.createElement( - 'tbody', - { - className: className, - style: { - display: filterPosition === _const2.default.FILTERS_POSITION_TOP ? 'table-header-group' : 'table-footer-group' - } - }, - _react2.default.createElement(_rowTemplate2.default, { - renderContent: renderContent, - selectRow: selectRow, - expandRow: expandRow, - cellEl: 'td' - }) - ); -}; /* eslint react/require-default-props: 0 */ - - -Filters.propTypes = { - columns: _propTypes2.default.array.isRequired, - onFilter: _propTypes2.default.func, - filterPosition: _propTypes2.default.oneOf([_const2.default.FILTERS_POSITION_TOP, _const2.default.FILTERS_POSITION_INLINE, _const2.default.FILTERS_POSITION_BOTTOM]), - currFilters: _propTypes2.default.object, - onExternalFilter: _propTypes2.default.func, - className: _propTypes2.default.string, - selectRow: _propTypes2.default.object, - expandRow: _propTypes2.default.object -}; - -Filters.defaultProps = { - position: _const2.default.FILTERS_POSITION_TOP -}; - -exports.default = Filters; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/footer-cell.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/footer-cell.js deleted file mode 100644 index 4a0b2c8e..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/footer-cell.js +++ /dev/null @@ -1,110 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _classnames = require('classnames'); - -var _classnames2 = _interopRequireDefault(_classnames); - -var _propTypes = require('prop-types'); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _utils = require('./utils'); - -var _utils2 = _interopRequireDefault(_utils); - -var _cellEventDelegater = require('./cell-event-delegater'); - -var _cellEventDelegater2 = _interopRequireDefault(_cellEventDelegater); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint react/require-default-props: 0 */ - - -var FooterCell = function (_eventDelegater) { - _inherits(FooterCell, _eventDelegater); - - function FooterCell() { - _classCallCheck(this, FooterCell); - - return _possibleConstructorReturn(this, (FooterCell.__proto__ || Object.getPrototypeOf(FooterCell)).apply(this, arguments)); - } - - _createClass(FooterCell, [{ - key: 'render', - value: function render() { - var _props = this.props, - index = _props.index, - column = _props.column, - columnData = _props.columnData; - var footer = column.footer, - footerTitle = column.footerTitle, - footerAlign = column.footerAlign, - footerFormatter = column.footerFormatter, - footerEvents = column.footerEvents, - footerClasses = column.footerClasses, - footerStyle = column.footerStyle, - footerAttrs = column.footerAttrs; - - - var delegateEvents = this.delegate(footerEvents); - var cellAttrs = _extends({}, _utils2.default.isFunction(footerAttrs) ? footerAttrs(column, index) : footerAttrs, delegateEvents); - - var text = ''; - if (_utils2.default.isString(footer)) { - text = footer; - } else if (_utils2.default.isFunction(footer)) { - text = footer(columnData, column, index); - } - - var cellStyle = {}; - var cellClasses = _utils2.default.isFunction(footerClasses) ? footerClasses(column, index) : footerClasses; - - if (footerStyle) { - cellStyle = _utils2.default.isFunction(footerStyle) ? footerStyle(column, index) : footerStyle; - cellStyle = cellStyle ? _extends({}, cellStyle) : cellStyle; - } - - if (footerTitle) { - cellAttrs.title = _utils2.default.isFunction(footerTitle) ? footerTitle(column, index) : text; - } - - if (footerAlign) { - cellStyle.textAlign = _utils2.default.isFunction(footerAlign) ? footerAlign(column, index) : footerAlign; - } - - if (cellClasses) cellAttrs.className = (0, _classnames2.default)(cellAttrs.className, cellClasses); - if (!_utils2.default.isEmptyObject(cellStyle)) cellAttrs.style = cellStyle; - - var children = footerFormatter ? footerFormatter(column, index, { text: text }) : text; - - return _react2.default.createElement('th', cellAttrs, children); - } - }]); - - return FooterCell; -}((0, _cellEventDelegater2.default)(_react2.default.Component)); - -FooterCell.propTypes = { - columnData: _propTypes2.default.array, - index: _propTypes2.default.number, - column: _propTypes2.default.object -}; - -exports.default = FooterCell; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/footer.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/footer.js deleted file mode 100644 index 21527378..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/footer.js +++ /dev/null @@ -1,76 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = require('prop-types'); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _rowTemplate = require('./row/row-template'); - -var _rowTemplate2 = _interopRequireDefault(_rowTemplate); - -var _footerCell = require('./footer-cell'); - -var _footerCell2 = _interopRequireDefault(_footerCell); - -var _utils = require('./utils'); - -var _utils2 = _interopRequireDefault(_utils); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var Footer = function Footer(props) { - var data = props.data, - className = props.className, - columns = props.columns, - selectRow = props.selectRow, - expandRow = props.expandRow; - - - function renderContent() { - return columns.map(function (column, i) { - if (column.footer === undefined || column.footer === null) { - return false; - } - - var columnData = _utils2.default.pluck(data, column.dataField); - - return _react2.default.createElement(_footerCell2.default, { - index: i, - key: column.dataField, - column: column, - columnData: columnData - }); - }); - } - - return _react2.default.createElement( - 'tfoot', - null, - _react2.default.createElement(_rowTemplate2.default, { - renderContent: renderContent, - selectRow: selectRow, - expandRow: expandRow, - className: className, - cellEl: 'th' - }) - ); -}; /* eslint react/require-default-props: 0 */ - - -Footer.propTypes = { - data: _propTypes2.default.array, - className: _propTypes2.default.string, - columns: _propTypes2.default.array, - selectRow: _propTypes2.default.object, - expandRow: _propTypes2.default.object -}; - -exports.default = Footer; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/header-cell.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/header-cell.js deleted file mode 100644 index 96b49a2a..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/header-cell.js +++ /dev/null @@ -1,226 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _classnames = require('classnames'); - -var _classnames2 = _interopRequireDefault(_classnames); - -var _propTypes = require('prop-types'); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _const = require('./const'); - -var _const2 = _interopRequireDefault(_const); - -var _symbol = require('./sort/symbol'); - -var _symbol2 = _interopRequireDefault(_symbol); - -var _caret = require('./sort/caret'); - -var _caret2 = _interopRequireDefault(_caret); - -var _utils = require('./utils'); - -var _utils2 = _interopRequireDefault(_utils); - -var _cellEventDelegater = require('./cell-event-delegater'); - -var _cellEventDelegater2 = _interopRequireDefault(_cellEventDelegater); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint react/require-default-props: 0 */ - - -var HeaderCell = function (_eventDelegater) { - _inherits(HeaderCell, _eventDelegater); - - function HeaderCell() { - _classCallCheck(this, HeaderCell); - - return _possibleConstructorReturn(this, (HeaderCell.__proto__ || Object.getPrototypeOf(HeaderCell)).apply(this, arguments)); - } - - _createClass(HeaderCell, [{ - key: 'render', - value: function render() { - var _props = this.props, - column = _props.column, - index = _props.index, - onSort = _props.onSort, - sorting = _props.sorting, - sortOrder = _props.sortOrder, - isLastSorting = _props.isLastSorting, - onFilter = _props.onFilter, - currFilters = _props.currFilters, - filterPosition = _props.filterPosition, - onExternalFilter = _props.onExternalFilter, - globalSortCaret = _props.globalSortCaret; - var text = column.text, - sort = column.sort, - sortCaret = column.sortCaret, - filter = column.filter, - filterRenderer = column.filterRenderer, - headerTitle = column.headerTitle, - headerAlign = column.headerAlign, - headerFormatter = column.headerFormatter, - headerEvents = column.headerEvents, - headerClasses = column.headerClasses, - headerStyle = column.headerStyle, - headerAttrs = column.headerAttrs, - headerSortingClasses = column.headerSortingClasses, - headerSortingStyle = column.headerSortingStyle; - - - var sortCaretfunc = sortCaret || globalSortCaret; - - var delegateEvents = this.delegate(headerEvents); - - var customAttrs = _utils2.default.isFunction(headerAttrs) ? headerAttrs(column, index) : headerAttrs || {}; - - var cellAttrs = _extends({}, customAttrs, delegateEvents, { - tabIndex: _utils2.default.isDefined(customAttrs.tabIndex) ? customAttrs.tabIndex : 0 - }); - - var sortSymbol = void 0; - var filterElm = void 0; - var cellStyle = {}; - var cellClasses = _utils2.default.isFunction(headerClasses) ? headerClasses(column, index) : headerClasses; - - if (headerStyle) { - cellStyle = _utils2.default.isFunction(headerStyle) ? headerStyle(column, index) : headerStyle; - cellStyle = cellStyle ? _extends({}, cellStyle) : cellStyle; - } - - if (headerTitle) { - cellAttrs.title = _utils2.default.isFunction(headerTitle) ? headerTitle(column, index) : text; - } - - if (headerAlign) { - cellStyle.textAlign = _utils2.default.isFunction(headerAlign) ? headerAlign(column, index) : headerAlign; - } - - if (sort) { - var customClick = cellAttrs.onClick; - cellAttrs['aria-label'] = sorting ? text + ' sort ' + sortOrder : text + ' sortable'; - cellAttrs.onKeyUp = function (e) { - if (e.key === 'Enter') { - onSort(column); - if (_utils2.default.isFunction(customClick)) customClick(e); - } - }; - cellAttrs.onClick = function (e) { - onSort(column); - if (_utils2.default.isFunction(customClick)) customClick(e); - }; - cellAttrs.className = (0, _classnames2.default)(cellAttrs.className, 'sortable'); - - if (sorting) { - sortSymbol = sortCaretfunc ? sortCaretfunc(sortOrder, column) : _react2.default.createElement(_caret2.default, { order: sortOrder }); - - // append customized classes or style if table was sorting based on the current column. - cellClasses = (0, _classnames2.default)(cellClasses, _utils2.default.isFunction(headerSortingClasses) ? headerSortingClasses(column, sortOrder, isLastSorting, index) : headerSortingClasses); - - cellStyle = _extends({}, cellStyle, _utils2.default.isFunction(headerSortingStyle) ? headerSortingStyle(column, sortOrder, isLastSorting, index) : headerSortingStyle); - } else { - sortSymbol = sortCaretfunc ? sortCaretfunc(undefined, column) : _react2.default.createElement(_symbol2.default, null); - } - } - - if (cellClasses) cellAttrs.className = (0, _classnames2.default)(cellAttrs.className, cellClasses); - if (!_utils2.default.isEmptyObject(cellStyle)) cellAttrs.style = cellStyle; - - if (filterPosition === _const2.default.FILTERS_POSITION_INLINE) { - if (filterRenderer) { - var onCustomFilter = onExternalFilter(column, filter.props.type); - filterElm = filterRenderer(onCustomFilter, column); - } else if (filter) { - filterElm = _react2.default.createElement(filter.Filter, _extends({}, filter.props, { - filterState: currFilters[column.dataField], - onFilter: onFilter, - column: column - })); - } - } - - var children = headerFormatter ? headerFormatter(column, index, { sortElement: sortSymbol, filterElement: filterElm }) : text; - - if (headerFormatter) { - return _react2.default.createElement('th', cellAttrs, children); - } - - return _react2.default.createElement('th', cellAttrs, children, sortSymbol, filterElm); - } - }]); - - return HeaderCell; -}((0, _cellEventDelegater2.default)(_react2.default.Component)); - -HeaderCell.propTypes = { - column: _propTypes2.default.shape({ - dataField: _propTypes2.default.string.isRequired, - text: _propTypes2.default.string.isRequired, - type: _propTypes2.default.oneOf([_const2.default.TYPE_STRING, _const2.default.TYPE_NUMBER, _const2.default.TYPE_BOOLEAN, _const2.default.TYPE_DATE]), - isDummyField: _propTypes2.default.bool, - hidden: _propTypes2.default.bool, - headerFormatter: _propTypes2.default.func, - formatter: _propTypes2.default.func, - formatExtraData: _propTypes2.default.any, - headerClasses: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.func]), - classes: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.func]), - headerStyle: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.func]), - style: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.func]), - headerTitle: _propTypes2.default.oneOfType([_propTypes2.default.bool, _propTypes2.default.func]), - title: _propTypes2.default.oneOfType([_propTypes2.default.bool, _propTypes2.default.func]), - headerEvents: _propTypes2.default.object, - events: _propTypes2.default.object, - headerAlign: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.func]), - align: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.func]), - headerAttrs: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.func]), - attrs: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.func]), - sort: _propTypes2.default.bool, - sortFunc: _propTypes2.default.func, - onSort: _propTypes2.default.func, - editor: _propTypes2.default.object, - editable: _propTypes2.default.oneOfType([_propTypes2.default.bool, _propTypes2.default.func]), - editCellStyle: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.func]), - editCellClasses: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.func]), - editorStyle: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.func]), - editorClasses: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.func]), - editorRenderer: _propTypes2.default.func, - validator: _propTypes2.default.func, - filter: _propTypes2.default.object, - filterRenderer: _propTypes2.default.func, - filterValue: _propTypes2.default.func, - searchable: _propTypes2.default.bool - }).isRequired, - index: _propTypes2.default.number.isRequired, - onSort: _propTypes2.default.func, - sorting: _propTypes2.default.bool, - sortOrder: _propTypes2.default.oneOf([_const2.default.SORT_ASC, _const2.default.SORT_DESC]), - sortCaret: _propTypes2.default.func, - isLastSorting: _propTypes2.default.bool, - onFilter: _propTypes2.default.func, - filterPosition: _propTypes2.default.oneOf([_const2.default.FILTERS_POSITION_INLINE, _const2.default.FILTERS_POSITION_BOTTOM, _const2.default.FILTERS_POSITION_TOP]), - currFilters: _propTypes2.default.object, - onExternalFilter: _propTypes2.default.func -}; - -exports.default = HeaderCell; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/header.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/header.js deleted file mode 100644 index 968a4357..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/header.js +++ /dev/null @@ -1,141 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = require('prop-types'); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _headerCell = require('./header-cell'); - -var _headerCell2 = _interopRequireDefault(_headerCell); - -var _selectionHeaderCell = require('./row-selection/selection-header-cell'); - -var _selectionHeaderCell2 = _interopRequireDefault(_selectionHeaderCell); - -var _expandHeaderCell = require('./row-expand/expand-header-cell'); - -var _expandHeaderCell2 = _interopRequireDefault(_expandHeaderCell); - -var _selectionHeaderCellConsumer = require('./row-selection/selection-header-cell-consumer'); - -var _selectionHeaderCellConsumer2 = _interopRequireDefault(_selectionHeaderCellConsumer); - -var _expandHeaderCellConsumer = require('./row-expand/expand-header-cell-consumer'); - -var _expandHeaderCellConsumer2 = _interopRequireDefault(_expandHeaderCellConsumer); - -var _const = require('./const'); - -var _const2 = _interopRequireDefault(_const); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/* eslint react/require-default-props: 0 */ -var Header = function Header(props) { - var className = props.className, - columns = props.columns, - onSort = props.onSort, - onFilter = props.onFilter, - sortField = props.sortField, - sortOrder = props.sortOrder, - selectRow = props.selectRow, - expandRow = props.expandRow, - currFilters = props.currFilters, - onExternalFilter = props.onExternalFilter, - filterPosition = props.filterPosition, - globalSortCaret = props.globalSortCaret, - wrapperClasses = props.wrapperClasses; - - - var SelectionHeaderCellComp = function SelectionHeaderCellComp() { - return null; - }; - var ExpansionHeaderCellComp = function ExpansionHeaderCellComp() { - return null; - }; - - if (expandRow.showExpandColumn) { - ExpansionHeaderCellComp = (0, _expandHeaderCellConsumer2.default)(_expandHeaderCell2.default); - } - - if (selectRow) { - SelectionHeaderCellComp = (0, _selectionHeaderCellConsumer2.default)(_selectionHeaderCell2.default); - } - - var isRenderFunctionColumnInLeft = function isRenderFunctionColumnInLeft() { - var position = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _const2.default.INDICATOR_POSITION_LEFT; - return position === _const2.default.INDICATOR_POSITION_LEFT; - }; - - var childrens = [columns.map(function (column, i) { - var currSort = column.dataField === sortField; - var isLastSorting = column.dataField === sortField; - - return _react2.default.createElement(_headerCell2.default, { - index: i, - key: column.dataField, - column: column, - onSort: onSort, - sorting: currSort, - sortOrder: sortOrder, - globalSortCaret: globalSortCaret, - isLastSorting: isLastSorting, - onFilter: onFilter, - currFilters: currFilters, - onExternalFilter: onExternalFilter, - filterPosition: filterPosition - }); - })]; - - if (!selectRow.hideSelectColumn) { - if (isRenderFunctionColumnInLeft(selectRow.selectColumnPosition)) { - childrens.unshift(_react2.default.createElement(SelectionHeaderCellComp, { key: 'selection' })); - } else { - childrens.push(_react2.default.createElement(SelectionHeaderCellComp, { key: 'selection' })); - } - } - - if (expandRow.showExpandColumn) { - if (isRenderFunctionColumnInLeft(expandRow.expandColumnPosition)) { - childrens.unshift(_react2.default.createElement(ExpansionHeaderCellComp, { key: 'expansion' })); - } else { - childrens.push(_react2.default.createElement(ExpansionHeaderCellComp, { key: 'expansion' })); - } - } - - return _react2.default.createElement( - 'thead', - { className: wrapperClasses }, - _react2.default.createElement( - 'tr', - { className: className }, - childrens - ) - ); -}; - -Header.propTypes = { - columns: _propTypes2.default.array.isRequired, - onSort: _propTypes2.default.func, - onFilter: _propTypes2.default.func, - sortField: _propTypes2.default.string, - sortOrder: _propTypes2.default.string, - selectRow: _propTypes2.default.object, - currFilters: _propTypes2.default.object, - onExternalFilter: _propTypes2.default.func, - globalSortCaret: _propTypes2.default.func, - className: _propTypes2.default.string, - wrapperClasses: _propTypes2.default.string, - expandRow: _propTypes2.default.object, - filterPosition: _propTypes2.default.oneOf([_const2.default.FILTERS_POSITION_TOP, _const2.default.FILTERS_POSITION_INLINE, _const2.default.FILTERS_POSITION_BOTTOM]) -}; - -exports.default = Header; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/props-resolver/column-resolver.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/props-resolver/column-resolver.js deleted file mode 100644 index 1df44367..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/props-resolver/column-resolver.js +++ /dev/null @@ -1,54 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -exports.default = function (ExtendBase) { - return function (_ExtendBase) { - _inherits(ColumnResolver, _ExtendBase); - - function ColumnResolver() { - _classCallCheck(this, ColumnResolver); - - return _possibleConstructorReturn(this, (ColumnResolver.__proto__ || Object.getPrototypeOf(ColumnResolver)).apply(this, arguments)); - } - - _createClass(ColumnResolver, [{ - key: "visibleColumnSize", - value: function visibleColumnSize() { - var includeSelectColumn = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; - - var columnLen = void 0; - if (this.props.columnToggle && this.props.columnToggle.toggles) { - var columns = this.props.columnToggle.toggles; - columnLen = Object.keys(columns).filter(function (name) { - return columns[name]; - }).length; - } else { - columnLen = this.props.columns.filter(function (c) { - return !c.hidden; - }).length; - } - if (!includeSelectColumn) return columnLen; - if (this.props.selectRow && !this.props.selectRow.hideSelectColumn) { - columnLen += 1; - } - if (this.props.expandRow && this.props.expandRow.showExpandColumn) { - columnLen += 1; - } - return columnLen; - } - }]); - - return ColumnResolver; - }(ExtendBase); -}; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/props-resolver/index.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/props-resolver/index.js deleted file mode 100644 index f04ae7f9..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/props-resolver/index.js +++ /dev/null @@ -1,70 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _utils = require('../utils'); - -var _utils2 = _interopRequireDefault(_utils); - -var _columnResolver = require('./column-resolver'); - -var _columnResolver2 = _interopRequireDefault(_columnResolver); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -exports.default = function (ExtendBase) { - return function (_ColumnResolver) { - _inherits(TableResolver, _ColumnResolver); - - function TableResolver() { - _classCallCheck(this, TableResolver); - - return _possibleConstructorReturn(this, (TableResolver.__proto__ || Object.getPrototypeOf(TableResolver)).apply(this, arguments)); - } - - _createClass(TableResolver, [{ - key: 'validateProps', - value: function validateProps() { - var keyField = this.props.keyField; - - if (!keyField) { - throw new Error('Please specify a field as key via keyField'); - } - if (this.visibleColumnSize(false) <= 0) { - throw new Error('No visible columns detected'); - } - } - }, { - key: 'isEmpty', - value: function isEmpty() { - return this.props.data.length === 0; - } - }, { - key: 'visibleRows', - value: function visibleRows() { - var _props = this.props, - data = _props.data, - hiddenRows = _props.hiddenRows, - keyField = _props.keyField; - - if (!hiddenRows || hiddenRows.length === 0) return data; - return data.filter(function (row) { - var key = _utils2.default.get(row, keyField); - return !_utils2.default.contains(hiddenRows, key); - }); - } - }]); - - return TableResolver; - }((0, _columnResolver2.default)(ExtendBase)); -}; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/props-resolver/remote-resolver.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/props-resolver/remote-resolver.js deleted file mode 100644 index d816b89b..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/props-resolver/remote-resolver.js +++ /dev/null @@ -1,140 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _events = require('events'); - -var _events2 = _interopRequireDefault(_events); - -var _utils = require('../utils'); - -var _utils2 = _interopRequireDefault(_utils); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -exports.default = function (ExtendBase) { - return function (_ExtendBase) { - _inherits(RemoteResolver, _ExtendBase); - - function RemoteResolver(props) { - _classCallCheck(this, RemoteResolver); - - var _this = _possibleConstructorReturn(this, (RemoteResolver.__proto__ || Object.getPrototypeOf(RemoteResolver)).call(this, props)); - - _this.getNewestState = function () { - var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - var sortOrder = void 0; - var sortField = void 0; - var page = void 0; - var sizePerPage = void 0; - var searchText = void 0; - var filters = {}; - - if (_this.sortContext) { - sortOrder = _this.sortContext.state.sortOrder; - sortField = _this.sortContext.state.sortColumn ? _this.sortContext.state.sortColumn.dataField : null; - } - - if (_this.filterContext) { - filters = _this.filterContext.currFilters; - } - - if (_this.paginationContext) { - page = _this.paginationContext.currPage; - sizePerPage = _this.paginationContext.currSizePerPage; - } - - if (_this.searchContext) { - searchText = _this.props.search.searchText; - } - - return _extends({ - sortOrder: sortOrder, - sortField: sortField, - filters: filters, - page: page, - sizePerPage: sizePerPage, - searchText: searchText - }, state, { - data: _this.props.data - }); - }; - - _this.isRemoteSearch = function () { - var remote = _this.props.remote; - - return remote === true || _utils2.default.isObject(remote) && remote.search || _this.isRemotePagination(); - }; - - _this.isRemotePagination = function () { - var e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - var remote = _this.props.remote; - - e.result = remote === true || _utils2.default.isObject(remote) && remote.pagination; - return e.result; - }; - - _this.isRemoteFiltering = function () { - var remote = _this.props.remote; - - return remote === true || _utils2.default.isObject(remote) && remote.filter || _this.isRemotePagination(); - }; - - _this.isRemoteSort = function () { - var remote = _this.props.remote; - - return remote === true || _utils2.default.isObject(remote) && remote.sort || _this.isRemotePagination(); - }; - - _this.isRemoteCellEdit = function () { - var remote = _this.props.remote; - - return remote === true || _utils2.default.isObject(remote) && remote.cellEdit; - }; - - _this.handleRemotePageChange = function (page, sizePerPage) { - _this.props.onTableChange('pagination', _this.getNewestState({ page: page, sizePerPage: sizePerPage })); - }; - - _this.handleRemoteFilterChange = function (filters) { - var newState = { filters: filters }; - if (_this.isRemotePagination()) { - var options = _this.props.pagination.options || {}; - newState.page = _utils2.default.isDefined(options.pageStartIndex) ? options.pageStartIndex : 1; - } - _this.props.onTableChange('filter', _this.getNewestState(newState)); - }; - - _this.handleRemoteSortChange = function (sortField, sortOrder) { - _this.props.onTableChange('sort', _this.getNewestState({ sortField: sortField, sortOrder: sortOrder })); - }; - - _this.handleRemoteCellChange = function (rowId, dataField, newValue) { - var cellEdit = { rowId: rowId, dataField: dataField, newValue: newValue }; - _this.props.onTableChange('cellEdit', _this.getNewestState({ cellEdit: cellEdit })); - }; - - _this.handleRemoteSearchChange = function (searchText) { - _this.props.onTableChange('search', _this.getNewestState({ searchText: searchText })); - }; - - _this.remoteEmitter = new _events2.default(); - _this.remoteEmitter.on('paginationChange', _this.handleRemotePageChange); - _this.remoteEmitter.on('isRemotePagination', _this.isRemotePagination); - return _this; - } - - return RemoteResolver; - }(ExtendBase); -}; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-expand/expand-cell.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-expand/expand-cell.js deleted file mode 100644 index 50de3d98..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-expand/expand-cell.js +++ /dev/null @@ -1,100 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = require('prop-types'); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint - react/require-default-props: 0 - jsx-a11y/no-noninteractive-element-interactions: 0 - */ -/* eslint no-nested-ternary: 0 */ - - -var ExpandCell = function (_Component) { - _inherits(ExpandCell, _Component); - - function ExpandCell() { - _classCallCheck(this, ExpandCell); - - var _this = _possibleConstructorReturn(this, (ExpandCell.__proto__ || Object.getPrototypeOf(ExpandCell)).call(this)); - - _this.handleClick = _this.handleClick.bind(_this); - return _this; - } - - _createClass(ExpandCell, [{ - key: 'shouldComponentUpdate', - value: function shouldComponentUpdate(nextProps) { - var shouldUpdate = this.props.rowIndex !== nextProps.rowIndex || this.props.expanded !== nextProps.expanded || this.props.rowKey !== nextProps.rowKey || this.props.tabIndex !== nextProps.tabIndex; - - return shouldUpdate; - } - }, { - key: 'handleClick', - value: function handleClick(e) { - var _props = this.props, - rowKey = _props.rowKey, - expanded = _props.expanded, - onRowExpand = _props.onRowExpand, - rowIndex = _props.rowIndex; - - e.stopPropagation(); - onRowExpand(rowKey, !expanded, rowIndex, e); - } - }, { - key: 'render', - value: function render() { - var _props2 = this.props, - expanded = _props2.expanded, - expandable = _props2.expandable, - expandColumnRenderer = _props2.expandColumnRenderer, - tabIndex = _props2.tabIndex, - rowKey = _props2.rowKey; - - var attrs = {}; - if (tabIndex !== -1) attrs.tabIndex = tabIndex; - - return _react2.default.createElement( - 'td', - _extends({ className: 'expand-cell', onClick: this.handleClick }, attrs), - expandColumnRenderer ? expandColumnRenderer({ - expandable: expandable, - expanded: expanded, - rowKey: rowKey - }) : expandable ? expanded ? '(-)' : '(+)' : '' - ); - } - }]); - - return ExpandCell; -}(_react.Component); - -ExpandCell.propTypes = { - rowKey: _propTypes2.default.any, - expanded: _propTypes2.default.bool.isRequired, - expandable: _propTypes2.default.bool.isRequired, - onRowExpand: _propTypes2.default.func.isRequired, - expandColumnRenderer: _propTypes2.default.func, - rowIndex: _propTypes2.default.number, - tabIndex: _propTypes2.default.number -}; -exports.default = ExpandCell; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-expand/expand-header-cell-consumer.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-expand/expand-header-cell-consumer.js deleted file mode 100644 index 53547795..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-expand/expand-header-cell-consumer.js +++ /dev/null @@ -1,27 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _rowExpandContext = require('../contexts/row-expand-context'); - -var _rowExpandContext2 = _interopRequireDefault(_rowExpandContext); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -exports.default = function (Component) { - return function () { - return _react2.default.createElement( - _rowExpandContext2.default.Consumer, - null, - function (expandRow) { - return _react2.default.createElement(Component, expandRow); - } - ); - }; -}; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-expand/expand-header-cell.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-expand/expand-header-cell.js deleted file mode 100644 index 9b8f186c..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-expand/expand-header-cell.js +++ /dev/null @@ -1,78 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = require('prop-types'); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint react/require-default-props: 0 */ -/* eslint no-nested-ternary: 0 */ - - -var ExpansionHeaderCell = function (_Component) { - _inherits(ExpansionHeaderCell, _Component); - - function ExpansionHeaderCell() { - _classCallCheck(this, ExpansionHeaderCell); - - var _this = _possibleConstructorReturn(this, (ExpansionHeaderCell.__proto__ || Object.getPrototypeOf(ExpansionHeaderCell)).call(this)); - - _this.handleCheckBoxClick = _this.handleCheckBoxClick.bind(_this); - return _this; - } - - _createClass(ExpansionHeaderCell, [{ - key: 'handleCheckBoxClick', - value: function handleCheckBoxClick(e) { - var _props = this.props, - isAnyExpands = _props.isAnyExpands, - onAllRowExpand = _props.onAllRowExpand; - - - onAllRowExpand(e, !isAnyExpands); - } - }, { - key: 'render', - value: function render() { - var _props2 = this.props, - isAnyExpands = _props2.isAnyExpands, - expandHeaderColumnRenderer = _props2.expandHeaderColumnRenderer; - - var attrs = { - onClick: this.handleCheckBoxClick - }; - - return _react2.default.createElement( - 'th', - _extends({ className: 'expand-cell-header', 'data-row-selection': true }, attrs), - expandHeaderColumnRenderer ? expandHeaderColumnRenderer({ isAnyExpands: isAnyExpands }) : isAnyExpands ? '(-)' : '(+)' - ); - } - }]); - - return ExpansionHeaderCell; -}(_react.Component); - -ExpansionHeaderCell.propTypes = { - isAnyExpands: _propTypes2.default.bool.isRequired, - onAllRowExpand: _propTypes2.default.func.isRequired, - expandHeaderColumnRenderer: _propTypes2.default.func -}; -exports.default = ExpansionHeaderCell; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-expand/expand-row.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-expand/expand-row.js deleted file mode 100644 index 51abdffa..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-expand/expand-row.js +++ /dev/null @@ -1,77 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _classnames = require('classnames'); - -var _classnames2 = _interopRequireDefault(_classnames); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = require('prop-types'); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _reactTransitionGroup = require('react-transition-group'); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } - -var ExpandRow = function ExpandRow(_ref) { - var children = _ref.children, - expanded = _ref.expanded, - onClosed = _ref.onClosed, - className = _ref.className, - rest = _objectWithoutProperties(_ref, ['children', 'expanded', 'onClosed', 'className']); - - return _react2.default.createElement( - 'tr', - null, - _react2.default.createElement( - 'td', - _extends({ className: (0, _classnames2.default)('reset-expansion-style', className) }, rest), - _react2.default.createElement( - _reactTransitionGroup.CSSTransition, - { - appear: true, - 'in': expanded, - timeout: 400, - classNames: 'row-expand-slide', - onExited: onClosed - }, - _react2.default.createElement( - 'div', - null, - _react2.default.createElement( - 'div', - { className: 'row-expansion-style' }, - children - ) - ) - ) - ) - ); -}; - -ExpandRow.propTypes = { - children: _propTypes2.default.node, - expanded: _propTypes2.default.bool, - onClosed: _propTypes2.default.func, - className: _propTypes2.default.string -}; - -ExpandRow.defaultProps = { - children: null, - expanded: false, - onClosed: null, - className: '' -}; - -exports.default = ExpandRow; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-expand/row-consumer.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-expand/row-consumer.js deleted file mode 100644 index 60f31436..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-expand/row-consumer.js +++ /dev/null @@ -1,76 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; /* eslint react/prop-types: 0 */ - - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _classnames = require('classnames'); - -var _classnames2 = _interopRequireDefault(_classnames); - -var _expandRow = require('./expand-row'); - -var _expandRow2 = _interopRequireDefault(_expandRow); - -var _utils = require('../utils'); - -var _utils2 = _interopRequireDefault(_utils); - -var _rowExpandContext = require('../contexts/row-expand-context'); - -var _rowExpandContext2 = _interopRequireDefault(_rowExpandContext); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -exports.default = function (Component) { - var renderWithExpansion = function renderWithExpansion(props, expandRow) { - var parentClassName = ''; - var className = ''; - var key = props.value; - - var expanded = _utils2.default.contains(expandRow.expanded, key); - var isClosing = _utils2.default.contains(expandRow.isClosing, key); - var expandable = !expandRow.nonExpandable || !_utils2.default.contains(expandRow.nonExpandable, key); - if (expanded) { - parentClassName = _utils2.default.isFunction(expandRow.parentClassName) ? expandRow.parentClassName(expanded, props.row, props.rowIndex) : expandRow.parentClassName || ''; - - className = _utils2.default.isFunction(expandRow.className) ? expandRow.className(expanded, props.row, props.rowIndex) : expandRow.className || ''; - } - - return [_react2.default.createElement(Component, _extends({}, props, { - key: key, - expanded: expanded, - expandable: expandable, - expandRow: _extends({}, expandRow), - className: (0, _classnames2.default)(props.className, parentClassName) - })), expanded || isClosing ? _react2.default.createElement( - _expandRow2.default, - { - key: key + '-expanding', - colSpan: props.visibleColumnSize, - expanded: expanded, - onClosed: function onClosed() { - return expandRow.onClosed(key); - }, - className: className - }, - expandRow.renderer(props.row, props.rowIndex) - ) : null]; - }; - return function (props) { - return _react2.default.createElement( - _rowExpandContext2.default.Consumer, - null, - function (expandRow) { - return renderWithExpansion(props, expandRow); - } - ); - }; -}; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-selection/row-consumer.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-selection/row-consumer.js deleted file mode 100644 index b2602c41..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-selection/row-consumer.js +++ /dev/null @@ -1,83 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; /* eslint react/prop-types: 0 */ - - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _classnames = require('classnames'); - -var _classnames2 = _interopRequireDefault(_classnames); - -var _utils = require('../utils'); - -var _utils2 = _interopRequireDefault(_utils); - -var _selectionContext = require('../contexts/selection-context'); - -var _selectionContext2 = _interopRequireDefault(_selectionContext); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -exports.default = function (Component) { - var renderWithSelection = function renderWithSelection(props, selectRow) { - var key = props.value; - var selected = _utils2.default.contains(selectRow.selected, key); - var selectable = !selectRow.nonSelectable || !_utils2.default.contains(selectRow.nonSelectable, key); - var notSelectable = _utils2.default.contains(selectRow.nonSelectable, key); - - var style = props.style, - className = props.className; - - - if (selected) { - var selectedStyle = _utils2.default.isFunction(selectRow.style) ? selectRow.style(props.row, props.rowIndex) : selectRow.style; - - var selectedClasses = _utils2.default.isFunction(selectRow.classes) ? selectRow.classes(props.row, props.rowIndex) : selectRow.classes; - - style = _extends({}, style, selectedStyle); - className = (0, _classnames2.default)(className, selectedClasses) || undefined; - - if (selectRow.bgColor) { - style = style || {}; - style.backgroundColor = _utils2.default.isFunction(selectRow.bgColor) ? selectRow.bgColor(props.row, props.rowIndex) : selectRow.bgColor; - } - } - - if (notSelectable) { - var notSelectableStyle = _utils2.default.isFunction(selectRow.nonSelectableStyle) ? selectRow.nonSelectableStyle(props.row, props.rowIndex) : selectRow.nonSelectableStyle; - - var notSelectableClasses = _utils2.default.isFunction(selectRow.nonSelectableClasses) ? selectRow.nonSelectableClasses(props.row, props.rowIndex) : selectRow.nonSelectableClasses; - - style = _extends({}, style, notSelectableStyle); - className = (0, _classnames2.default)(className, notSelectableClasses) || undefined; - } - - return _react2.default.createElement(Component, _extends({}, props, { - style: style, - className: className, - selectRow: selectRow, - selected: selected, - selectable: selectable - })); - }; - - function withConsumer(props) { - return _react2.default.createElement( - _selectionContext2.default.Consumer, - null, - function (selectRow) { - return renderWithSelection(props, selectRow); - } - ); - } - - withConsumer.displayName = 'WithSelectionRowConsumer'; - return withConsumer; -}; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-selection/selection-cell.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-selection/selection-cell.js deleted file mode 100644 index 7b3a3c40..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-selection/selection-cell.js +++ /dev/null @@ -1,146 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = require('prop-types'); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _const = require('../const'); - -var _const2 = _interopRequireDefault(_const); - -var _utils = require('../utils'); - -var _utils2 = _interopRequireDefault(_utils); - -var _bootstrap = require('../contexts/bootstrap'); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint - react/require-default-props: 0 - jsx-a11y/no-noninteractive-element-interactions: 0 - */ - - -var SelectionCell = function (_Component) { - _inherits(SelectionCell, _Component); - - function SelectionCell() { - _classCallCheck(this, SelectionCell); - - var _this = _possibleConstructorReturn(this, (SelectionCell.__proto__ || Object.getPrototypeOf(SelectionCell)).call(this)); - - _this.handleClick = _this.handleClick.bind(_this); - return _this; - } - - _createClass(SelectionCell, [{ - key: 'shouldComponentUpdate', - value: function shouldComponentUpdate(nextProps) { - var shouldUpdate = this.props.rowIndex !== nextProps.rowIndex || this.props.selected !== nextProps.selected || this.props.disabled !== nextProps.disabled || this.props.rowKey !== nextProps.rowKey || this.props.tabIndex !== nextProps.tabIndex || this.props.selectColumnStyle !== nextProps.selectColumnStyle; - - return shouldUpdate; - } - }, { - key: 'handleClick', - value: function handleClick(e) { - var _props = this.props, - inputType = _props.mode, - rowKey = _props.rowKey, - selected = _props.selected, - onRowSelect = _props.onRowSelect, - disabled = _props.disabled, - rowIndex = _props.rowIndex; - - e.stopPropagation(); - if (disabled) return; - - var checked = inputType === _const2.default.ROW_SELECT_SINGLE ? true : !selected; - - onRowSelect(rowKey, checked, rowIndex, e); - } - }, { - key: 'render', - value: function render() { - var _this2 = this; - - var _props2 = this.props, - rowKey = _props2.rowKey, - inputType = _props2.mode, - selected = _props2.selected, - disabled = _props2.disabled, - tabIndex = _props2.tabIndex, - rowIndex = _props2.rowIndex, - selectionRenderer = _props2.selectionRenderer, - selectColumnStyle = _props2.selectColumnStyle; - - - var attrs = {}; - if (tabIndex !== -1) attrs.tabIndex = tabIndex; - - attrs.style = _utils2.default.isFunction(selectColumnStyle) ? selectColumnStyle({ - checked: selected, - disabled: disabled, - rowIndex: rowIndex, - rowKey: rowKey - }) : selectColumnStyle; - - return _react2.default.createElement( - _bootstrap.BootstrapContext.Consumer, - null, - function (_ref) { - var bootstrap4 = _ref.bootstrap4; - return _react2.default.createElement( - 'td', - _extends({ className: 'selection-cell', onClick: _this2.handleClick }, attrs), - selectionRenderer ? selectionRenderer({ - mode: inputType, - checked: selected, - disabled: disabled, - rowIndex: rowIndex, - rowKey: rowKey - }) : _react2.default.createElement('input', { - type: inputType, - checked: selected, - disabled: disabled, - className: bootstrap4 ? 'selection-input-4' : '', - onChange: function onChange() {} - }) - ); - } - ); - } - }]); - - return SelectionCell; -}(_react.Component); - -SelectionCell.propTypes = { - mode: _propTypes2.default.string.isRequired, - rowKey: _propTypes2.default.any, - selected: _propTypes2.default.bool, - onRowSelect: _propTypes2.default.func, - disabled: _propTypes2.default.bool, - rowIndex: _propTypes2.default.number, - tabIndex: _propTypes2.default.number, - clickToSelect: _propTypes2.default.bool, - selectionRenderer: _propTypes2.default.func, - selectColumnStyle: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.func]) -}; -exports.default = SelectionCell; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-selection/selection-header-cell-consumer.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-selection/selection-header-cell-consumer.js deleted file mode 100644 index 214e2375..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-selection/selection-header-cell-consumer.js +++ /dev/null @@ -1,27 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _selectionContext = require('../contexts/selection-context'); - -var _selectionContext2 = _interopRequireDefault(_selectionContext); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -exports.default = function (Component) { - return function () { - return _react2.default.createElement( - _selectionContext2.default.Consumer, - null, - function (selectRow) { - return _react2.default.createElement(Component, selectRow); - } - ); - }; -}; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-selection/selection-header-cell.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-selection/selection-header-cell.js deleted file mode 100644 index fc670114..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-selection/selection-header-cell.js +++ /dev/null @@ -1,174 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.CheckBox = undefined; - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = require('prop-types'); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _const = require('../const'); - -var _const2 = _interopRequireDefault(_const); - -var _bootstrap = require('../contexts/bootstrap'); - -var _utils = require('../utils'); - -var _utils2 = _interopRequireDefault(_utils); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint react/require-default-props: 0 */ - - -var CheckBox = exports.CheckBox = function CheckBox(_ref) { - var className = _ref.className, - checked = _ref.checked, - indeterminate = _ref.indeterminate; - return _react2.default.createElement('input', { - type: 'checkbox', - checked: checked, - className: className, - ref: function ref(input) { - if (input) input.indeterminate = indeterminate; // eslint-disable-line no-param-reassign - }, - onChange: function onChange() {} - }); -}; - -CheckBox.propTypes = { - checked: _propTypes2.default.bool.isRequired, - indeterminate: _propTypes2.default.bool.isRequired, - className: _propTypes2.default.string -}; - -var SelectionHeaderCell = function (_Component) { - _inherits(SelectionHeaderCell, _Component); - - function SelectionHeaderCell() { - _classCallCheck(this, SelectionHeaderCell); - - var _this = _possibleConstructorReturn(this, (SelectionHeaderCell.__proto__ || Object.getPrototypeOf(SelectionHeaderCell)).call(this)); - - _this.handleCheckBoxClick = _this.handleCheckBoxClick.bind(_this); - return _this; - } - - /** - * avoid updating if button is - * 1. radio - * 2. status was not changed. - */ - - - _createClass(SelectionHeaderCell, [{ - key: 'shouldComponentUpdate', - value: function shouldComponentUpdate(nextProps) { - var ROW_SELECT_SINGLE = _const2.default.ROW_SELECT_SINGLE; - var _props = this.props, - mode = _props.mode, - checkedStatus = _props.checkedStatus; - - - if (mode === ROW_SELECT_SINGLE) return false; - - return nextProps.checkedStatus !== checkedStatus; - } - }, { - key: 'handleCheckBoxClick', - value: function handleCheckBoxClick(e) { - var _props2 = this.props, - onAllRowsSelect = _props2.onAllRowsSelect, - checkedStatus = _props2.checkedStatus; - - var isUnSelect = checkedStatus === _const2.default.CHECKBOX_STATUS_CHECKED || checkedStatus === _const2.default.CHECKBOX_STATUS_INDETERMINATE; - - onAllRowsSelect(e, isUnSelect); - } - }, { - key: 'render', - value: function render() { - var _this2 = this; - - var CHECKBOX_STATUS_CHECKED = _const2.default.CHECKBOX_STATUS_CHECKED, - CHECKBOX_STATUS_INDETERMINATE = _const2.default.CHECKBOX_STATUS_INDETERMINATE, - ROW_SELECT_MULTIPLE = _const2.default.ROW_SELECT_MULTIPLE; - var _props3 = this.props, - mode = _props3.mode, - checkedStatus = _props3.checkedStatus, - selectionHeaderRenderer = _props3.selectionHeaderRenderer, - hideSelectAll = _props3.hideSelectAll, - headerColumnStyle = _props3.headerColumnStyle; - - if (hideSelectAll) { - return _react2.default.createElement('th', { 'data-row-selection': true }); - } - - var checked = checkedStatus === CHECKBOX_STATUS_CHECKED; - - var indeterminate = checkedStatus === CHECKBOX_STATUS_INDETERMINATE; - - var attrs = {}; - var content = void 0; - if (selectionHeaderRenderer || mode === ROW_SELECT_MULTIPLE) { - attrs.onClick = this.handleCheckBoxClick; - } - - attrs.style = _utils2.default.isFunction(headerColumnStyle) ? headerColumnStyle(checkedStatus) : headerColumnStyle; - - return _react2.default.createElement( - _bootstrap.BootstrapContext.Consumer, - null, - function (_ref2) { - var bootstrap4 = _ref2.bootstrap4; - - if (selectionHeaderRenderer) { - content = selectionHeaderRenderer({ - mode: mode, - checked: checked, - indeterminate: indeterminate - }); - } else if (mode === ROW_SELECT_MULTIPLE) { - content = _react2.default.createElement(CheckBox, _extends({}, _this2.props, { - checked: checked, - className: bootstrap4 ? 'selection-input-4' : '', - indeterminate: indeterminate - })); - } - return _react2.default.createElement( - 'th', - _extends({ className: 'selection-cell-header', 'data-row-selection': true }, attrs), - content - ); - } - ); - } - }]); - - return SelectionHeaderCell; -}(_react.Component); - -SelectionHeaderCell.propTypes = { - mode: _propTypes2.default.string.isRequired, - checkedStatus: _propTypes2.default.string, - onAllRowsSelect: _propTypes2.default.func, - hideSelectAll: _propTypes2.default.bool, - selectionHeaderRenderer: _propTypes2.default.func, - headerColumnStyle: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.func]) -}; -exports.default = SelectionHeaderCell; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row/aggregate-row.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row/aggregate-row.js deleted file mode 100644 index 31123fc2..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row/aggregate-row.js +++ /dev/null @@ -1,192 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = require('prop-types'); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _utils = require('../utils'); - -var _utils2 = _interopRequireDefault(_utils); - -var _expandCell = require('../row-expand/expand-cell'); - -var _expandCell2 = _interopRequireDefault(_expandCell); - -var _selectionCell = require('../row-selection/selection-cell'); - -var _selectionCell2 = _interopRequireDefault(_selectionCell); - -var _shouldUpdater2 = require('./should-updater'); - -var _shouldUpdater3 = _interopRequireDefault(_shouldUpdater2); - -var _eventDelegater = require('./event-delegater'); - -var _eventDelegater2 = _interopRequireDefault(_eventDelegater); - -var _rowPureContent = require('./row-pure-content'); - -var _rowPureContent2 = _interopRequireDefault(_rowPureContent); - -var _const = require('../const'); - -var _const2 = _interopRequireDefault(_const); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint class-methods-use-this: 0 */ -/* eslint react/prop-types: 0 */ -/* eslint no-plusplus: 0 */ - - -var RowAggregator = function (_shouldUpdater) { - _inherits(RowAggregator, _shouldUpdater); - - function RowAggregator(props) { - _classCallCheck(this, RowAggregator); - - var _this = _possibleConstructorReturn(this, (RowAggregator.__proto__ || Object.getPrototypeOf(RowAggregator)).call(this, props)); - - _this.clickNum = 0; - _this.shouldUpdateRowContent = false; - _this.createClickEventHandler = _this.createClickEventHandler.bind(_this); - return _this; - } - - _createClass(RowAggregator, [{ - key: 'shouldComponentUpdate', - value: function shouldComponentUpdate(nextProps) { - if (this.props.selected !== nextProps.selected || this.props.expanded !== nextProps.expanded || this.props.expandable !== nextProps.expandable || this.props.selectable !== nextProps.selectable || this.props.selectRow.hideSelectColumn !== nextProps.selectRow.hideSelectColumn || this.shouldUpdatedBySelfProps(nextProps)) { - this.shouldUpdateRowContent = this.shouldRowContentUpdate(nextProps); - return true; - } - this.shouldUpdateRowContent = this.shouldRowContentUpdate(nextProps); - - return this.shouldUpdateRowContent; - } - }, { - key: 'isRenderFunctionColumnInLeft', - value: function isRenderFunctionColumnInLeft() { - var position = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _const2.default.INDICATOR_POSITION_LEFT; - - return position === _const2.default.INDICATOR_POSITION_LEFT; - } - }, { - key: 'render', - value: function render() { - var _props = this.props, - row = _props.row, - columns = _props.columns, - keyField = _props.keyField, - rowIndex = _props.rowIndex, - style = _props.style, - className = _props.className, - attrs = _props.attrs, - selectRow = _props.selectRow, - expandRow = _props.expandRow, - expanded = _props.expanded, - expandable = _props.expandable, - selected = _props.selected, - selectable = _props.selectable, - visibleColumnSize = _props.visibleColumnSize, - tabIndexCell = _props.tabIndexCell, - rest = _objectWithoutProperties(_props, ['row', 'columns', 'keyField', 'rowIndex', 'style', 'className', 'attrs', 'selectRow', 'expandRow', 'expanded', 'expandable', 'selected', 'selectable', 'visibleColumnSize', 'tabIndexCell']); - - var key = _utils2.default.get(row, keyField); - var hideSelectColumn = selectRow.hideSelectColumn, - selectColumnPosition = selectRow.selectColumnPosition, - clickToSelect = selectRow.clickToSelect; - var showExpandColumn = expandRow.showExpandColumn, - expandColumnPosition = expandRow.expandColumnPosition; - - - var newAttrs = this.delegate(_extends({}, attrs)); - if (clickToSelect || !!expandRow.renderer) { - newAttrs.onClick = this.createClickEventHandler(newAttrs.onClick); - } - - var tabIndexStart = rowIndex * visibleColumnSize + 1; - - var childrens = [_react2.default.createElement(_rowPureContent2.default, _extends({ - key: 'row', - row: row, - columns: columns, - keyField: keyField, - rowIndex: rowIndex, - shouldUpdate: this.shouldUpdateRowContent, - tabIndexStart: tabIndexCell ? tabIndexStart : -1 - }, rest))]; - - if (!hideSelectColumn) { - var selectCell = _react2.default.createElement(_selectionCell2.default, _extends({}, selectRow, { - key: 'selection-cell', - rowKey: key, - rowIndex: rowIndex, - selected: selected, - disabled: !selectable, - tabIndex: tabIndexCell ? tabIndexStart++ : -1 - })); - if (this.isRenderFunctionColumnInLeft(selectColumnPosition)) { - childrens.unshift(selectCell); - } else { - childrens.push(selectCell); - } - } - - if (showExpandColumn) { - var expandCell = _react2.default.createElement(_expandCell2.default, _extends({}, expandRow, { - key: 'expand-cell', - rowKey: key, - rowIndex: rowIndex, - expanded: expanded, - expandable: expandable, - tabIndex: tabIndexCell ? tabIndexStart++ : -1 - })); - if (this.isRenderFunctionColumnInLeft(expandColumnPosition)) { - childrens.unshift(expandCell); - } else { - childrens.push(expandCell); - } - } - - return _react2.default.createElement( - 'tr', - _extends({ - style: style, - className: className - }, newAttrs), - childrens - ); - } - }]); - - return RowAggregator; -}((0, _shouldUpdater3.default)((0, _eventDelegater2.default)(_react2.default.Component))); - -RowAggregator.propTypes = { - attrs: _propTypes2.default.object, - style: _propTypes2.default.object -}; -RowAggregator.defaultProps = { - attrs: {}, - style: {} -}; -exports.default = RowAggregator; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row/event-delegater.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row/event-delegater.js deleted file mode 100644 index bca381cb..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row/event-delegater.js +++ /dev/null @@ -1,122 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _utils = require('../utils'); - -var _utils2 = _interopRequireDefault(_utils); - -var _const = require('../const'); - -var _const2 = _interopRequireDefault(_const); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -var events = ['onClick', 'onDoubleClick', 'onMouseEnter', 'onMouseLeave', 'onContextMenu', 'onAuxClick']; - -exports.default = function (ExtendBase) { - return function (_ExtendBase) { - _inherits(RowEventDelegater, _ExtendBase); - - function RowEventDelegater(props) { - _classCallCheck(this, RowEventDelegater); - - var _this = _possibleConstructorReturn(this, (RowEventDelegater.__proto__ || Object.getPrototypeOf(RowEventDelegater)).call(this, props)); - - _this.clickNum = 0; - _this.createDefaultEventHandler = _this.createDefaultEventHandler.bind(_this); - _this.createClickEventHandler = _this.createClickEventHandler.bind(_this); - return _this; - } - - _createClass(RowEventDelegater, [{ - key: 'createClickEventHandler', - value: function createClickEventHandler(cb) { - var _this2 = this; - - return function (e) { - var _props = _this2.props, - row = _props.row, - selected = _props.selected, - keyField = _props.keyField, - selectable = _props.selectable, - expandable = _props.expandable, - rowIndex = _props.rowIndex, - expanded = _props.expanded, - expandRow = _props.expandRow, - selectRow = _props.selectRow, - DELAY_FOR_DBCLICK = _props.DELAY_FOR_DBCLICK; - - var clickFn = function clickFn() { - if (cb) { - cb(e, row, rowIndex); - } - var key = _utils2.default.get(row, keyField); - if (expandRow && expandable && !expandRow.expandByColumnOnly) { - if (selectRow.mode !== _const2.default.ROW_SELECT_DISABLED && selectRow.clickToExpand || selectRow.mode === _const2.default.ROW_SELECT_DISABLED) { - expandRow.onRowExpand(key, !expanded, rowIndex, e); - } - } - if (selectRow.clickToSelect && selectable) { - selectRow.onRowSelect(key, !selected, rowIndex, e); - } - }; - - if (DELAY_FOR_DBCLICK) { - _this2.clickNum += 1; - _utils2.default.debounce(function () { - if (_this2.clickNum === 1) { - clickFn(); - } - _this2.clickNum = 0; - }, DELAY_FOR_DBCLICK)(); - } else { - clickFn(); - } - }; - } - }, { - key: 'createDefaultEventHandler', - value: function createDefaultEventHandler(cb) { - var _this3 = this; - - return function (e) { - var _props2 = _this3.props, - row = _props2.row, - rowIndex = _props2.rowIndex; - - cb(e, row, rowIndex); - }; - } - }, { - key: 'delegate', - value: function delegate() { - var _this4 = this; - - var attrs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - var newAttrs = _extends({}, attrs); - Object.keys(attrs).forEach(function (attr) { - if (_utils2.default.contains(events, attr)) { - newAttrs[attr] = _this4.createDefaultEventHandler(attrs[attr]); - } - }); - return newAttrs; - } - }]); - - return RowEventDelegater; - }(ExtendBase); -}; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row/row-pure-content.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row/row-pure-content.js deleted file mode 100644 index 67dfeed9..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row/row-pure-content.js +++ /dev/null @@ -1,151 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _utils = require('../utils'); - -var _utils2 = _interopRequireDefault(_utils); - -var _cell = require('../cell'); - -var _cell2 = _interopRequireDefault(_cell); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint react/prop-types: 0 */ -/* eslint react/no-array-index-key: 0 */ -/* eslint no-plusplus: 0 */ - - -var RowPureContent = function (_React$Component) { - _inherits(RowPureContent, _React$Component); - - function RowPureContent() { - _classCallCheck(this, RowPureContent); - - return _possibleConstructorReturn(this, (RowPureContent.__proto__ || Object.getPrototypeOf(RowPureContent)).apply(this, arguments)); - } - - _createClass(RowPureContent, [{ - key: 'shouldComponentUpdate', - value: function shouldComponentUpdate(nextProps) { - if (typeof nextProps.shouldUpdate !== 'undefined') { - return nextProps.shouldUpdate; - } - return true; - } - }, { - key: 'render', - value: function render() { - var _props = this.props, - row = _props.row, - keyField = _props.keyField, - columns = _props.columns, - rowIndex = _props.rowIndex, - editable = _props.editable, - editingRowIdx = _props.editingRowIdx, - editingColIdx = _props.editingColIdx, - onStart = _props.onStart, - clickToEdit = _props.clickToEdit, - dbclickToEdit = _props.dbclickToEdit, - EditingCellComponent = _props.EditingCellComponent, - tabIndexStart = _props.tabIndexStart; - - - var tabIndex = tabIndexStart; - - return columns.map(function (column, index) { - var dataField = column.dataField; - - var content = _utils2.default.get(row, dataField); - if (rowIndex === editingRowIdx && index === editingColIdx) { - return _react2.default.createElement(EditingCellComponent, { - key: content + '-' + index + '-editing', - row: row, - rowIndex: rowIndex, - column: column, - columnIndex: index - }); - } - // render cell - var cellTitle = void 0; - var cellStyle = {}; - var cellAttrs = _extends({}, _utils2.default.isFunction(column.attrs) ? column.attrs(content, row, rowIndex, index) : column.attrs); - - if (column.events) { - var events = Object.assign({}, column.events); - Object.keys(Object.assign({}, column.events)).forEach(function (key) { - var originFn = events[key]; - events[key] = function () { - for (var _len = arguments.length, rest = Array(_len), _key = 0; _key < _len; _key++) { - rest[_key] = arguments[_key]; - } - - return originFn.apply(undefined, rest.concat([row, rowIndex])); - }; - }); - cellAttrs = _extends({}, cellAttrs, events); - } - - var cellClasses = _utils2.default.isFunction(column.classes) ? column.classes(content, row, rowIndex, index) : column.classes; - - if (column.style) { - cellStyle = _utils2.default.isFunction(column.style) ? column.style(content, row, rowIndex, index) : column.style; - cellStyle = Object.assign({}, cellStyle) || {}; - } - - if (column.title) { - cellTitle = _utils2.default.isFunction(column.title) ? column.title(content, row, rowIndex, index) : content; - cellAttrs.title = cellTitle; - } - - if (column.align) { - cellStyle.textAlign = _utils2.default.isFunction(column.align) ? column.align(content, row, rowIndex, index) : column.align; - } - - if (cellClasses) cellAttrs.className = cellClasses; - if (!_utils2.default.isEmptyObject(cellStyle)) cellAttrs.style = cellStyle; - - var editableCell = _utils2.default.isDefined(column.editable) ? column.editable : true; - if (column.dataField === keyField || !editable) editableCell = false; - if (_utils2.default.isFunction(column.editable)) { - editableCell = column.editable(content, row, rowIndex, index); - } - - if (tabIndexStart !== -1) { - cellAttrs.tabIndex = tabIndex++; - } - - return _react2.default.createElement(_cell2.default, _extends({ - key: content + '-' + index, - row: row, - editable: editableCell, - rowIndex: rowIndex, - columnIndex: index, - column: column, - onStart: onStart, - clickToEdit: clickToEdit, - dbclickToEdit: dbclickToEdit - }, cellAttrs)); - }); - } - }]); - - return RowPureContent; -}(_react2.default.Component); - -exports.default = RowPureContent; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row/row-section.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row/row-section.js deleted file mode 100644 index 8829787b..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row/row-section.js +++ /dev/null @@ -1,45 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = require('prop-types'); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var RowSection = function RowSection(_ref) { - var content = _ref.content, - colSpan = _ref.colSpan; - return _react2.default.createElement( - 'tr', - null, - _react2.default.createElement( - 'td', - { - 'data-toggle': 'collapse', - colSpan: colSpan, - className: 'react-bs-table-no-data' - }, - content - ) - ); -}; - -RowSection.propTypes = { - content: _propTypes2.default.any, - colSpan: _propTypes2.default.number -}; - -RowSection.defaultProps = { - content: null, - colSpan: 1 -}; - -exports.default = RowSection; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row/row-template.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row/row-template.js deleted file mode 100644 index 8a98a4a7..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row/row-template.js +++ /dev/null @@ -1,68 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = require('prop-types'); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _const = require('../const'); - -var _const2 = _interopRequireDefault(_const); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } /* eslint react/require-default-props: 0 */ - - -var RowTemplate = function RowTemplate(props) { - var renderContent = props.renderContent, - selectRow = props.selectRow, - expandRow = props.expandRow, - cellEl = props.cellEl, - rest = _objectWithoutProperties(props, ['renderContent', 'selectRow', 'expandRow', 'cellEl']); - - var isRenderFunctionColumnInLeft = function isRenderFunctionColumnInLeft() { - var position = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _const2.default.INDICATOR_POSITION_LEFT; - return position === _const2.default.INDICATOR_POSITION_LEFT; - }; - - var childrens = renderContent() || []; - - if (selectRow && selectRow.hideSelectColumn !== true) { - if (isRenderFunctionColumnInLeft(selectRow.selectColumnPosition)) { - childrens.unshift(_react2.default.createElement(cellEl, { key: 'selection' })); - } else { - childrens.push(_react2.default.createElement(cellEl, { key: 'selection' })); - } - } - - if (expandRow.showExpandColumn) { - if (isRenderFunctionColumnInLeft(expandRow.expandColumnPosition)) { - childrens.unshift(_react2.default.createElement(cellEl, { key: 'expansion' })); - } else { - childrens.push(_react2.default.createElement(cellEl, { key: 'expansion' })); - } - } - - return _react2.default.createElement( - 'tr', - rest, - childrens - ); -}; - -RowTemplate.propTypes = { - renderContent: _propTypes2.default.func.isRequired, - cellEl: _propTypes2.default.string.isRequired, - selectRow: _propTypes2.default.object, - expandRow: _propTypes2.default.object -}; - -exports.default = RowTemplate; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row/should-updater.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row/should-updater.js deleted file mode 100644 index e3bea072..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row/should-updater.js +++ /dev/null @@ -1,80 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _utils = require('../utils'); - -var _utils2 = _interopRequireDefault(_utils); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint react/prop-types: 0 */ - - -exports.default = function (ExtendBase) { - return function (_ExtendBase) { - _inherits(RowShouldUpdater, _ExtendBase); - - function RowShouldUpdater() { - _classCallCheck(this, RowShouldUpdater); - - return _possibleConstructorReturn(this, (RowShouldUpdater.__proto__ || Object.getPrototypeOf(RowShouldUpdater)).apply(this, arguments)); - } - - _createClass(RowShouldUpdater, [{ - key: 'shouldUpdateByCellEditing', - value: function shouldUpdateByCellEditing(nextProps) { - if (!(this.props.clickToEdit || this.props.dbclickToEdit)) return false; - return nextProps.editingRowIdx === nextProps.rowIndex || this.props.editingRowIdx === nextProps.rowIndex && nextProps.editingRowIdx === null || this.props.editingRowIdx === nextProps.rowIndex; - } - }, { - key: 'shouldUpdatedBySelfProps', - value: function shouldUpdatedBySelfProps(nextProps) { - return this.props.className !== nextProps.className || !_utils2.default.isEqual(this.props.style, nextProps.style) || !_utils2.default.isEqual(this.props.attrs, nextProps.attrs); - } - - // Only use for simple-row - - }, { - key: 'shouldUpdateByColumnsForSimpleCheck', - value: function shouldUpdateByColumnsForSimpleCheck(nextProps) { - if (this.props.columns.length !== nextProps.columns.length) { - return true; - } - for (var i = 0; i < this.props.columns.length; i += 1) { - if (!_utils2.default.isEqual(this.props.columns[i], nextProps.columns[i])) { - return true; - } - } - return false; - } - }, { - key: 'shouldUpdatedByNormalProps', - value: function shouldUpdatedByNormalProps(nextProps) { - var shouldUpdate = this.props.rowIndex !== nextProps.rowIndex || this.props.editable !== nextProps.editable || !_utils2.default.isEqual(this.props.row, nextProps.row) || this.props.columns.length !== nextProps.columns.length; - - return shouldUpdate; - } - }, { - key: 'shouldUpdateChild', - value: function shouldUpdateChild(nextProps) { - return this.shouldUpdateByCellEditing(nextProps) || this.shouldUpdatedByNormalProps(nextProps); - } - }, { - key: 'shouldRowContentUpdate', - value: function shouldRowContentUpdate(nextProps) { - return this.shouldUpdateChild(nextProps) || this.shouldUpdateByColumnsForSimpleCheck(nextProps); - } - }]); - - return RowShouldUpdater; - }(ExtendBase); -}; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row/simple-row.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row/simple-row.js deleted file mode 100644 index 6a37a7e2..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row/simple-row.js +++ /dev/null @@ -1,108 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = require('prop-types'); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _rowPureContent = require('./row-pure-content'); - -var _rowPureContent2 = _interopRequireDefault(_rowPureContent); - -var _eventDelegater = require('./event-delegater'); - -var _eventDelegater2 = _interopRequireDefault(_eventDelegater); - -var _shouldUpdater2 = require('./should-updater'); - -var _shouldUpdater3 = _interopRequireDefault(_shouldUpdater2); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint react/prop-types: 0 */ -/* eslint react/no-array-index-key: 0 */ - - -var SimpleRow = function (_shouldUpdater) { - _inherits(SimpleRow, _shouldUpdater); - - function SimpleRow(props) { - _classCallCheck(this, SimpleRow); - - var _this = _possibleConstructorReturn(this, (SimpleRow.__proto__ || Object.getPrototypeOf(SimpleRow)).call(this, props)); - - _this.shouldUpdateRowContent = false; - return _this; - } - - _createClass(SimpleRow, [{ - key: 'shouldComponentUpdate', - value: function shouldComponentUpdate(nextProps) { - this.shouldUpdateRowContent = false; - this.shouldUpdateRowContent = this.shouldRowContentUpdate(nextProps); - if (this.shouldUpdateRowContent) return true; - - return this.shouldUpdatedBySelfProps(nextProps); - } - }, { - key: 'render', - value: function render() { - var _props = this.props, - className = _props.className, - style = _props.style, - attrs = _props.attrs, - visibleColumnSize = _props.visibleColumnSize, - tabIndexCell = _props.tabIndexCell, - rest = _objectWithoutProperties(_props, ['className', 'style', 'attrs', 'visibleColumnSize', 'tabIndexCell']); - - var trAttrs = this.delegate(attrs); - var tabIndexStart = this.props.rowIndex * visibleColumnSize + 1; - - return _react2.default.createElement( - 'tr', - _extends({ style: style, className: className }, trAttrs), - _react2.default.createElement(_rowPureContent2.default, _extends({ - shouldUpdate: this.shouldUpdateRowContent, - tabIndexStart: tabIndexCell ? tabIndexStart : -1 - }, rest)) - ); - } - }]); - - return SimpleRow; -}((0, _shouldUpdater3.default)((0, _eventDelegater2.default)(_react.Component))); - -SimpleRow.propTypes = { - row: _propTypes2.default.object.isRequired, - rowIndex: _propTypes2.default.number.isRequired, - columns: _propTypes2.default.array.isRequired, - style: _propTypes2.default.object, - className: _propTypes2.default.string, - attrs: _propTypes2.default.object -}; - -SimpleRow.defaultProps = { - editable: true, - style: {}, - className: null, - attrs: {} -}; - -exports.default = SimpleRow; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/sort/caret.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/sort/caret.js deleted file mode 100644 index f27335e0..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/sort/caret.js +++ /dev/null @@ -1,52 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _classnames = require('classnames'); - -var _classnames2 = _interopRequireDefault(_classnames); - -var _propTypes = require('prop-types'); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _const = require('../const'); - -var _const2 = _interopRequireDefault(_const); - -var _bootstrap = require('../contexts/bootstrap'); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var SortCaret = function SortCaret(_ref) { - var order = _ref.order; - - var orderClass = (0, _classnames2.default)('react-bootstrap-table-sort-order', { - dropup: order === _const2.default.SORT_ASC - }); - - return _react2.default.createElement( - _bootstrap.BootstrapContext.Consumer, - null, - function (_ref2) { - var bootstrap4 = _ref2.bootstrap4; - return bootstrap4 ? _react2.default.createElement('span', { className: 'caret-4-' + order }) : _react2.default.createElement( - 'span', - { className: orderClass }, - _react2.default.createElement('span', { className: 'caret' }) - ); - } - ); -}; - -SortCaret.propTypes = { - order: _propTypes2.default.oneOf([_const2.default.SORT_ASC, _const2.default.SORT_DESC]).isRequired -}; - -exports.default = SortCaret; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/sort/symbol.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/sort/symbol.js deleted file mode 100644 index 96c7cc8f..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/sort/symbol.js +++ /dev/null @@ -1,39 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _bootstrap = require('../contexts/bootstrap'); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var SortSymbol = function SortSymbol() { - return _react2.default.createElement( - _bootstrap.BootstrapContext.Consumer, - null, - function (_ref) { - var bootstrap4 = _ref.bootstrap4; - return bootstrap4 ? _react2.default.createElement('span', { className: 'order-4' }) : _react2.default.createElement( - 'span', - { className: 'order' }, - _react2.default.createElement( - 'span', - { className: 'dropdown' }, - _react2.default.createElement('span', { className: 'caret' }) - ), - _react2.default.createElement( - 'span', - { className: 'dropup' }, - _react2.default.createElement('span', { className: 'caret' }) - ) - ); - } - ); -}; - -exports.default = SortSymbol; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/store/expand.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/store/expand.js deleted file mode 100644 index 6f7ccadc..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/store/expand.js +++ /dev/null @@ -1,59 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.getExpandedRows = exports.expandableKeys = exports.isAnyExpands = undefined; - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -var _utils = require('../utils'); - -var _utils2 = _interopRequireDefault(_utils); - -var _rows = require('./rows'); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var isAnyExpands = exports.isAnyExpands = function isAnyExpands(data, keyField) { - var expanded = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : []; - - var _loop = function _loop(i) { - var rowKey = _utils2.default.get(data[i], keyField); - if (typeof expanded.find(function (x) { - return x === rowKey; - }) !== 'undefined') { - return { - v: true - }; - } - }; - - for (var i = 0; i < data.length; i += 1) { - var _ret = _loop(i); - - if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v; - } - return false; -}; - -var expandableKeys = exports.expandableKeys = function expandableKeys(data, keyField) { - var skips = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : []; - - if (skips.length === 0) { - return data.map(function (row) { - return _utils2.default.get(row, keyField); - }); - } - return data.filter(function (row) { - return !_utils2.default.contains(skips, _utils2.default.get(row, keyField)); - }).map(function (row) { - return _utils2.default.get(row, keyField); - }); -}; - -var getExpandedRows = exports.getExpandedRows = function getExpandedRows(data, keyField, expanded) { - return expanded.map(function (k) { - return (0, _rows.getRowByRowId)(data, keyField, k); - }); -}; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/store/mutate.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/store/mutate.js deleted file mode 100644 index 685f2771..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/store/mutate.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.editCell = undefined; - -var _utils = require('../utils'); - -var _utils2 = _interopRequireDefault(_utils); - -var _rows = require('./rows'); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var editCell = exports.editCell = function editCell(data, keyField, rowId, dataField, newValue) { - var row = (0, _rows.getRowByRowId)(data, keyField, rowId); - if (row) _utils2.default.set(row, dataField, newValue); -}; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/store/operators.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/store/operators.js deleted file mode 100644 index b6609741..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/store/operators.js +++ /dev/null @@ -1,35 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _rows = require('./rows'); - -var rows = _interopRequireWildcard(_rows); - -var _selection = require('./selection'); - -var selection = _interopRequireWildcard(_selection); - -var _expand = require('./expand'); - -var expand = _interopRequireWildcard(_expand); - -var _mutate = require('./mutate'); - -var mutate = _interopRequireWildcard(_mutate); - -var _sort = require('./sort'); - -var sort = _interopRequireWildcard(_sort); - -var _type = require('./type'); - -var type = _interopRequireWildcard(_type); - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - -exports.default = _extends({}, rows, selection, expand, mutate, sort, type); \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/store/rows.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/store/rows.js deleted file mode 100644 index eca73dfb..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/store/rows.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.getRowByRowId = exports.matchRow = undefined; - -var _utils = require('../utils'); - -var _utils2 = _interopRequireDefault(_utils); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var matchRow = exports.matchRow = function matchRow(keyField, id) { - return function (row) { - return _utils2.default.get(row, keyField) === id; - }; -}; - -var getRowByRowId = exports.getRowByRowId = function getRowByRowId(data, keyField, id) { - return data.find(matchRow(keyField, id)); -}; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/store/selection.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/store/selection.js deleted file mode 100644 index 5cd75d07..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/store/selection.js +++ /dev/null @@ -1,85 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.getSelectedRows = exports.unSelectableKeys = exports.selectableKeys = exports.getSelectionSummary = undefined; - -var _utils = require('../utils'); - -var _utils2 = _interopRequireDefault(_utils); - -var _rows = require('./rows'); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var getSelectionSummary = exports.getSelectionSummary = function getSelectionSummary() { - var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; - var keyField = arguments[1]; - var selected = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : []; - - var allRowsSelected = data.length > 0; - var allRowsNotSelected = true; - - var rowKeys = data.map(function (d) { - return _utils2.default.get(d, keyField); - }); - - var _loop = function _loop(i) { - var curr = rowKeys[i]; - if (typeof selected.find(function (x) { - return x === curr; - }) === 'undefined') { - allRowsSelected = false; - } else { - allRowsNotSelected = false; - } - }; - - for (var i = 0; i < rowKeys.length; i += 1) { - _loop(i); - } - return { - allRowsSelected: allRowsSelected, - allRowsNotSelected: allRowsNotSelected - }; -}; - -var selectableKeys = exports.selectableKeys = function selectableKeys() { - var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; - var keyField = arguments[1]; - var skips = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : []; - - if (skips.length === 0) { - return data.map(function (row) { - return _utils2.default.get(row, keyField); - }); - } - return data.filter(function (row) { - return !_utils2.default.contains(skips, _utils2.default.get(row, keyField)); - }).map(function (row) { - return _utils2.default.get(row, keyField); - }); -}; - -var unSelectableKeys = exports.unSelectableKeys = function unSelectableKeys(selected) { - var skips = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; - - if (skips.length === 0) { - return []; - } - return selected.filter(function (x) { - return _utils2.default.contains(skips, x); - }); -}; - -var getSelectedRows = exports.getSelectedRows = function getSelectedRows() { - var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; - var keyField = arguments[1]; - var selected = arguments[2]; - return selected.map(function (k) { - return (0, _rows.getRowByRowId)(data, keyField, k); - }).filter(function (x) { - return !!x; - }); -}; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/store/sort.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/store/sort.js deleted file mode 100644 index cc3320a5..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/store/sort.js +++ /dev/null @@ -1,72 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.nextOrder = exports.sort = undefined; - -var _utils = require('../utils'); - -var _utils2 = _interopRequireDefault(_utils); - -var _const = require('../const'); - -var _const2 = _interopRequireDefault(_const); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } /* eslint no-nested-ternary: 0 */ -/* eslint no-lonely-if: 0 */ -/* eslint no-underscore-dangle: 0 */ - - -function comparator(a, b) { - var result = void 0; - if (typeof b === 'string') { - result = b.localeCompare(a); - } else { - result = a > b ? -1 : a < b ? 1 : 0; - } - return result; -} - -var sort = exports.sort = function sort(data, sortOrder, _ref) { - var dataField = _ref.dataField, - sortFunc = _ref.sortFunc, - sortValue = _ref.sortValue; - - var _data = [].concat(_toConsumableArray(data)); - _data.sort(function (a, b) { - var result = void 0; - var valueA = _utils2.default.get(a, dataField); - var valueB = _utils2.default.get(b, dataField); - if (sortValue) { - valueA = sortValue(valueA, a); - valueB = sortValue(valueB, b); - } else { - valueA = _utils2.default.isDefined(valueA) ? valueA : ''; - valueB = _utils2.default.isDefined(valueB) ? valueB : ''; - } - - if (sortFunc) { - result = sortFunc(valueA, valueB, sortOrder, dataField, a, b); - } else { - if (sortOrder === _const2.default.SORT_DESC) { - result = comparator(valueA, valueB); - } else { - result = comparator(valueB, valueA); - } - } - return result; - }); - return _data; -}; - -var nextOrder = exports.nextOrder = function nextOrder(currentSortColumn, _ref2) { - var sortOrder = _ref2.sortOrder, - sortColumn = _ref2.sortColumn; - var defaultOrder = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _const2.default.SORT_DESC; - - if (!sortColumn || currentSortColumn.dataField !== sortColumn.dataField) return defaultOrder; - return sortOrder === _const2.default.SORT_DESC ? _const2.default.SORT_ASC : _const2.default.SORT_DESC; -}; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/store/type.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/store/type.js deleted file mode 100644 index d547b2f2..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/store/type.js +++ /dev/null @@ -1,28 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.typeConvert = undefined; - -var _const = require('../const'); - -var _const2 = _interopRequireDefault(_const); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var typeConvert = exports.typeConvert = function typeConvert(type, value) { - if (type === _const2.default.TYPE_STRING) { - return String(value); - } else if (type === _const2.default.TYPE_NUMBER) { - return Number(value); - } else if (type === _const2.default.TYPE_BOOLEAN) { - if (typeof value === 'boolean') { - return value; - } - return value === 'true'; - } else if (type === _const2.default.TYPE_DATE) { - return new Date(value); - } - return value; -}; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/utils.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/utils.js deleted file mode 100644 index 809e628b..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/utils.js +++ /dev/null @@ -1,122 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _underscore = require('underscore'); - -var _underscore2 = _interopRequireDefault(_underscore); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function splitNested(str) { - return [str].join('.').replace(/\[/g, '.').replace(/\]/g, '').split('.'); -} /* eslint no-empty: 0 */ -/* eslint no-param-reassign: 0 */ -/* eslint prefer-rest-params: 0 */ - - -function contains(list, value) { - if (_underscore2.default.includes) { - return _underscore2.default.includes(list, value); - } - - return list.indexOf(value) > -1; -} - -function get(target, field) { - var directGet = target[field]; - if (directGet != null) { - return directGet; - } - - var pathArray = splitNested(field); - var result = void 0; - try { - result = pathArray.reduce(function (curr, path) { - return curr[path]; - }, target); - } catch (e) { } - return result; -} - -function set(target, field, value) { - var safe = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; - - var pathArray = splitNested(field); - var level = 0; - pathArray.reduce(function (a, b) { - level += 1; - if (typeof a[b] === 'undefined') { - if (!safe) throw new Error(a + '.' + b + ' is undefined'); - a[b] = {}; - return a[b]; - } - - if (level === pathArray.length) { - a[b] = value; - return value; - } - return a[b]; - }, target); -} - -function isEmptyObject(obj) { - if (!_underscore2.default.isObject(obj)) return false; - - var hasOwnProperty = Object.prototype.hasOwnProperty; - var keys = Object.keys(obj); - - for (var i = 0; i < keys.length; i += 1) { - if (hasOwnProperty.call(obj, keys[i])) return false; - } - - return true; -} - -function isDefined(value) { - return typeof value !== 'undefined' && value !== null; -} - -function sleep(fn, ms) { - return setTimeout(function () { - return fn(); - }, ms); -} - -function debounce(func, wait, immediate) { - var _this = this, - _arguments = arguments; - - var timeout = void 0; - - return function () { - var later = function later() { - timeout = null; - - if (!immediate) { - func.apply(_this, _arguments); - } - }; - - var callNow = immediate && !timeout; - - clearTimeout(timeout); - timeout = setTimeout(later, wait || 0); - - if (callNow) { - func.apply(_this, _arguments); - } - }; -} - -exports.default = Object.assign(_underscore2.default, { - get: get, - set: set, - isDefined: isDefined, - isEmptyObject: isEmptyObject, - sleep: sleep, - debounce: debounce, - contains: contains -}); diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/package.json b/global-scoreboard/dependencies/react-bootstrap-table-next/package.json deleted file mode 100644 index ee257beb..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/package.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "_from": "react-bootstrap-table-next@4.0.3", - "_id": "react-bootstrap-table-next@4.0.3", - "_inBundle": false, - "_integrity": "sha512-uKxC73qUdUfusRf2uzDfMiF9LvTG5vuhTZa0lbAgHWSLLLaKTsI0iHf1e4+c7gP71q8dFsp7StvkP65SxC1JRg==", - "_location": "/react-bootstrap-table-next", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "react-bootstrap-table-next@4.0.3", - "name": "react-bootstrap-table-next", - "escapedName": "react-bootstrap-table-next", - "rawSpec": "4.0.3", - "saveSpec": null, - "fetchSpec": "4.0.3" - }, - "_requiredBy": [ - "#USER", - "/" - ], - "_resolved": "https://registry.npmjs.org/react-bootstrap-table-next/-/react-bootstrap-table-next-4.0.3.tgz", - "_shasum": "b55873b01adfe22a7181904b784a9d24ac2822cf", - "_spec": "react-bootstrap-table-next@4.0.3", - "_where": "E:\\Users\\Avasam\\Documents\\Git\\speedrun.com_global_leaderboard_webapp\\global-scoreboard", - "author": { - "name": "AllenFang" - }, - "bugs": { - "url": "https://github.com/react-bootstrap-table/react-bootstrap-table2/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Allen Fang", - "email": "ayu780129@hotmail.com", - "url": "https://github.com/AllenFang" - }, - { - "name": "Chun-MingChen", - "email": "nick830314@gmail.com", - "url": "https://github.com/Chun-MingChen" - } - ], - "dependencies": { - "classnames": "^2.2.5", - "react-transition-group": "^4.2.0", - "underscore": "1.9.1" - }, - "deprecated": false, - "description": "Next generation of react-bootstrap-table", - "files": [ - "lib/", - "dist/" - ], - "homepage": "https://github.com/react-bootstrap-table/react-bootstrap-table2#readme", - "keywords": [ - "react", - "bootstrap", - "table", - "grid", - "react-component" - ], - "license": "MIT", - "main": "./lib/index.js", - "name": "react-bootstrap-table-next", - "peerDependencies": { - "classnames": "^2.2.5", - "prop-types": "^15.0.0", - "react": "^16.3.0", - "react-dom": "^16.3.0" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/react-bootstrap-table/react-bootstrap-table2.git" - }, - "tags": [ - "react" - ], - "version": "4.0.3" -} diff --git a/global-scoreboard/package-lock.json b/global-scoreboard/package-lock.json index 28632b2d..4c9359d5 100644 --- a/global-scoreboard/package-lock.json +++ b/global-scoreboard/package-lock.json @@ -13208,8 +13208,8 @@ } }, "react-bootstrap-table-next": { - "version": "file:dependencies/react-bootstrap-table-next", - "integrity": "sha512-uKxC73qUdUfusRf2uzDfMiF9LvTG5vuhTZa0lbAgHWSLLLaKTsI0iHf1e4+c7gP71q8dFsp7StvkP65SxC1JRg==", + "version": "github:Avasam/react-bootstrap-table2#552341ac2564c1c1df4c5f025dd6593586c307b2", + "from": "github:Avasam/react-bootstrap-table2#react-bootstrap-table2-fixes", "requires": { "classnames": "^2.2.5", "react-transition-group": "^4.2.0", diff --git a/global-scoreboard/package.json b/global-scoreboard/package.json index cce3f6e7..058f3ff7 100644 --- a/global-scoreboard/package.json +++ b/global-scoreboard/package.json @@ -25,7 +25,7 @@ "http-status-codes": "^2.1.4", "react": "^17.0.2", "react-bootstrap": "^1.6.0", - "react-bootstrap-table-next": "file:dependencies/react-bootstrap-table-next", + "react-bootstrap-table-next": "Avasam/react-bootstrap-table2#react-bootstrap-table2-fixes", "react-bootstrap-table2-filter": "^1.3.3", "react-bootstrap-table2-paginator": "^2.1.2", "react-bootstrap-table2-toolkit": "^2.1.3", From 4d4f5e69f120cd04ac8218dce632263e273a0549 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 21 May 2021 10:03:24 +0000 Subject: [PATCH 09/17] Update dependency @types/node to v14 --- global-scoreboard/package-lock.json | 9 +++++---- global-scoreboard/package.json | 2 +- tournament-scheduler/package-lock.json | 9 +++++---- tournament-scheduler/package.json | 2 +- 4 files changed, 12 insertions(+), 10 deletions(-) diff --git a/global-scoreboard/package-lock.json b/global-scoreboard/package-lock.json index 28632b2d..ba721c7a 100644 --- a/global-scoreboard/package-lock.json +++ b/global-scoreboard/package-lock.json @@ -2324,9 +2324,9 @@ "integrity": "sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==" }, "@types/node": { - "version": "13.13.52", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.52.tgz", - "integrity": "sha512-s3nugnZumCC//n4moGGe6tkNMyYEdaDBitVjwPxXmR5lnMG5dHePinH2EdxkG3Rh1ghFHHixAG4NJhpJW1rthQ==" + "version": "14.17.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.0.tgz", + "integrity": "sha512-w8VZUN/f7SSbvVReb9SWp6cJFevxb4/nkG65yLAya//98WgocKm5PLDAtSs5CtJJJM+kHmJjO/6mmYW4MHShZA==" }, "@types/normalize-package-data": { "version": "2.4.0", @@ -16705,7 +16705,8 @@ }, "ssri": { "version": "6.0.1", - "resolved": "", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", "requires": { "figgy-pudding": "^3.5.1" } diff --git a/global-scoreboard/package.json b/global-scoreboard/package.json index cce3f6e7..ac0fdd0d 100644 --- a/global-scoreboard/package.json +++ b/global-scoreboard/package.json @@ -35,7 +35,7 @@ }, "devDependencies": { "@types/jest": "^26.0.23", - "@types/node": "^13.13.52", + "@types/node": "^14.0.0", "@types/react": "^17.0.6", "@types/react-dom": "^17.0.5", "@typescript-eslint/eslint-plugin": "^4.24.0", diff --git a/tournament-scheduler/package-lock.json b/tournament-scheduler/package-lock.json index 39c92b61..a90f0eba 100644 --- a/tournament-scheduler/package-lock.json +++ b/tournament-scheduler/package-lock.json @@ -2362,9 +2362,9 @@ "integrity": "sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==" }, "@types/node": { - "version": "13.13.52", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.52.tgz", - "integrity": "sha512-s3nugnZumCC//n4moGGe6tkNMyYEdaDBitVjwPxXmR5lnMG5dHePinH2EdxkG3Rh1ghFHHixAG4NJhpJW1rthQ==" + "version": "14.17.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.0.tgz", + "integrity": "sha512-w8VZUN/f7SSbvVReb9SWp6cJFevxb4/nkG65yLAya//98WgocKm5PLDAtSs5CtJJJM+kHmJjO/6mmYW4MHShZA==" }, "@types/normalize-package-data": { "version": "2.4.0", @@ -16444,7 +16444,8 @@ }, "ssri": { "version": "6.0.1", - "resolved": "", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", "requires": { "figgy-pudding": "^3.5.1" } diff --git a/tournament-scheduler/package.json b/tournament-scheduler/package.json index c6e86155..ff84071e 100644 --- a/tournament-scheduler/package.json +++ b/tournament-scheduler/package.json @@ -32,7 +32,7 @@ }, "devDependencies": { "@types/jest": "^26.0.23", - "@types/node": "^13.13.52", + "@types/node": "^14.0.0", "@types/react": "^17.0.6", "@types/react-add-to-calendar": "^0.1.0", "@types/react-div-100vh": "^0.3.0", From b324de610a63e03f7e12eb43543ed1cdd2912860 Mon Sep 17 00:00:00 2001 From: Avasam Date: Sun, 23 May 2021 19:38:39 -0400 Subject: [PATCH 10/17] Moved react-bootstrap-table-next fixes to patch-package --- .eslintrc.json | 4 +- .../react-bootstrap-table-next/README.md | 43 - .../dist/react-bootstrap-table-next.js | 9345 ----------------- .../dist/react-bootstrap-table-next.js.map | 1 - .../dist/react-bootstrap-table-next.min.js | 6 - .../dist/react-bootstrap-table2.css | 129 - .../dist/react-bootstrap-table2.min.css | 1 - .../react-bootstrap-table-next/lib/index.js | 17 - .../lib/src/body.js | 182 - .../lib/src/bootstrap-table.js | 337 - .../lib/src/caption.js | 39 - .../lib/src/cell-event-delegater.js | 71 - .../lib/src/cell.js | 134 - .../lib/src/const.js | 24 - .../lib/src/contexts/bootstrap.js | 16 - .../lib/src/contexts/column-context.js | 80 - .../lib/src/contexts/data-context.js | 84 - .../lib/src/contexts/index.js | 434 - .../lib/src/contexts/row-expand-context.js | 197 - .../lib/src/contexts/selection-context.js | 182 - .../lib/src/contexts/sort-context.js | 182 - .../lib/src/filters-cell.js | 65 - .../lib/src/filters.js | 96 - .../lib/src/footer-cell.js | 110 - .../lib/src/footer.js | 76 - .../lib/src/header-cell.js | 226 - .../lib/src/header.js | 141 - .../lib/src/props-resolver/column-resolver.js | 54 - .../lib/src/props-resolver/index.js | 70 - .../lib/src/props-resolver/remote-resolver.js | 140 - .../lib/src/row-expand/expand-cell.js | 100 - .../row-expand/expand-header-cell-consumer.js | 27 - .../lib/src/row-expand/expand-header-cell.js | 78 - .../lib/src/row-expand/expand-row.js | 77 - .../lib/src/row-expand/row-consumer.js | 76 - .../lib/src/row-selection/row-consumer.js | 83 - .../lib/src/row-selection/selection-cell.js | 146 - .../selection-header-cell-consumer.js | 27 - .../row-selection/selection-header-cell.js | 174 - .../lib/src/row/aggregate-row.js | 192 - .../lib/src/row/event-delegater.js | 122 - .../lib/src/row/row-pure-content.js | 151 - .../lib/src/row/row-section.js | 45 - .../lib/src/row/row-template.js | 68 - .../lib/src/row/should-updater.js | 80 - .../lib/src/row/simple-row.js | 108 - .../lib/src/sort/caret.js | 52 - .../lib/src/sort/symbol.js | 39 - .../lib/src/store/expand.js | 59 - .../lib/src/store/mutate.js | 19 - .../lib/src/store/operators.js | 35 - .../lib/src/store/rows.js | 22 - .../lib/src/store/selection.js | 85 - .../lib/src/store/sort.js | 72 - .../lib/src/store/type.js | 28 - .../lib/src/utils.js | 122 - .../react-bootstrap-table-next/package.json | 81 - global-scoreboard/package-lock.json | 112 +- global-scoreboard/package.json | 6 +- .../react-bootstrap-table-next+4.0.3.patch | 59 + global-scoreboard/src/Dashboard/Dashboard.tsx | 91 +- .../src/Dashboard/Scoreboard.tsx | 2 +- .../src/GameSearch/GameSearch.tsx | 18 +- 63 files changed, 238 insertions(+), 14704 deletions(-) delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/README.md delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/dist/react-bootstrap-table-next.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/dist/react-bootstrap-table-next.js.map delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/dist/react-bootstrap-table-next.min.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/dist/react-bootstrap-table2.css delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/dist/react-bootstrap-table2.min.css delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/index.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/body.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/bootstrap-table.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/caption.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/cell-event-delegater.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/cell.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/const.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/contexts/bootstrap.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/contexts/column-context.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/contexts/data-context.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/contexts/index.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/contexts/row-expand-context.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/contexts/selection-context.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/contexts/sort-context.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/filters-cell.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/filters.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/footer-cell.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/footer.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/header-cell.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/header.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/props-resolver/column-resolver.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/props-resolver/index.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/props-resolver/remote-resolver.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-expand/expand-cell.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-expand/expand-header-cell-consumer.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-expand/expand-header-cell.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-expand/expand-row.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-expand/row-consumer.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-selection/row-consumer.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-selection/selection-cell.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-selection/selection-header-cell-consumer.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-selection/selection-header-cell.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row/aggregate-row.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row/event-delegater.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row/row-pure-content.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row/row-section.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row/row-template.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row/should-updater.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row/simple-row.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/sort/caret.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/sort/symbol.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/store/expand.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/store/mutate.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/store/operators.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/store/rows.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/store/selection.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/store/sort.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/store/type.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/utils.js delete mode 100644 global-scoreboard/dependencies/react-bootstrap-table-next/package.json create mode 100644 global-scoreboard/patches/react-bootstrap-table-next+4.0.3.patch diff --git a/.eslintrc.json b/.eslintrc.json index a786b829..115f2e3b 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -44,10 +44,8 @@ "overrides": [ { "files": [ - "*.config.js", - "*-test.js", + "*.js", "*.test.tsx", - "*.spec.js", "environment.*", "*.d.ts" ], diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/README.md b/global-scoreboard/dependencies/react-bootstrap-table-next/README.md deleted file mode 100644 index ebaa7934..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/README.md +++ /dev/null @@ -1,43 +0,0 @@ -# react-bootstrap-table-next -Next generation of [`react-bootstrap-table`](https://github.com/AllenFang/react-bootstrap-table) - -## Usage - -### Installation - -```sh -npm install react-bootstrap-table-next --save -``` - -### Include CSS - -> react-bootstrap-table2 need you to add bootstrap css in your application firstly. About bootstrap css, we only compatible with bootstrap 3 but will start to compatible for bootstrap 4 on v0.2.0 - -```js -// es5 -require('react-bootstrap-table-next/dist/react-bootstrap-table2.min.css'); - -// es6 -import 'react-bootstrap-table-next/dist/react-bootstrap-table2.min.css'; -``` - -### Your First Table - -```js -import BootstrapTable from 'react-bootstrap-table-next'; - -const products = [ ... ]; -const columns = [{ - dataField: 'id', - text: 'Product ID' -}, { - dataField: 'name', - text: 'Product Name' -}, { - dataField: 'price', - text: 'Product Price' -}]; - -export default () => - -``` \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/dist/react-bootstrap-table-next.js b/global-scoreboard/dependencies/react-bootstrap-table-next/dist/react-bootstrap-table-next.js deleted file mode 100644 index e2c407b9..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/dist/react-bootstrap-table-next.js +++ /dev/null @@ -1,9345 +0,0 @@ -(function webpackUniversalModuleDefinition(root, factory) { - if(typeof exports === 'object' && typeof module === 'object') - module.exports = factory(require("react"), require("react-dom")); - else if(typeof define === 'function' && define.amd) - define(["react", "react-dom"], factory); - else if(typeof exports === 'object') - exports["ReactBootstrapTable2"] = factory(require("react"), require("react-dom")); - else - root["ReactBootstrapTable2"] = factory(root["React"], root["ReactDOM"]); -})(this, function(__WEBPACK_EXTERNAL_MODULE_0__, __WEBPACK_EXTERNAL_MODULE_20__) { -return /******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // 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 = ""; -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 26); -/******/ }) -/************************************************************************/ -/******/ ([ -/* 0 */ -/***/ (function(module, exports) { - -module.exports = __WEBPACK_EXTERNAL_MODULE_0__; - -/***/ }), -/* 1 */ -/***/ (function(module, exports, __webpack_require__) { - -/** - * Copyright (c) 2013-present, Facebook, Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -if (false) { - var ReactIs = require('react-is'); - - // By explicitly using `prop-types` you are opting into new development behavior. - // http://fb.me/prop-types-in-prod - var throwOnDirectAccess = true; - module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess); -} else { - // By explicitly using `prop-types` you are opting into new production behavior. - // http://fb.me/prop-types-in-prod - module.exports = __webpack_require__(28)(); -} - - -/***/ }), -/* 2 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _underscore = __webpack_require__(34); - -var _underscore2 = _interopRequireDefault(_underscore); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function splitNested(str) { - return [str].join('.').replace(/\[/g, '.').replace(/\]/g, '').split('.'); -} /* eslint no-empty: 0 */ -/* eslint no-param-reassign: 0 */ -/* eslint prefer-rest-params: 0 */ - - -function contains(list, value) { - if (_underscore2.default.includes) { - return _underscore2.default.includes(list, value); - } - - return list.indexOf(value) > -1; -} - -function get(target, field) { - var directGet = target[field]; - if (directGet !== undefined && directGet !== null) { - return directGet; - } - - var pathArray = splitNested(field); - var result = void 0; - try { - result = pathArray.reduce(function (curr, path) { - return curr[path]; - }, target); - } catch (e) {} - return result; -} - -function set(target, field, value) { - var safe = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; - - var pathArray = splitNested(field); - var level = 0; - pathArray.reduce(function (a, b) { - level += 1; - if (typeof a[b] === 'undefined') { - if (!safe) throw new Error(a + '.' + b + ' is undefined'); - a[b] = {}; - return a[b]; - } - - if (level === pathArray.length) { - a[b] = value; - return value; - } - return a[b]; - }, target); -} - -function isEmptyObject(obj) { - if (!_underscore2.default.isObject(obj)) return false; - - var hasOwnProperty = Object.prototype.hasOwnProperty; - var keys = Object.keys(obj); - - for (var i = 0; i < keys.length; i += 1) { - if (hasOwnProperty.call(obj, keys[i])) return false; - } - - return true; -} - -function isDefined(value) { - return typeof value !== 'undefined' && value !== null; -} - -function sleep(fn, ms) { - return setTimeout(function () { - return fn(); - }, ms); -} - -function debounce(func, wait, immediate) { - var _this = this, - _arguments = arguments; - - var timeout = void 0; - - return function () { - var later = function later() { - timeout = null; - - if (!immediate) { - func.apply(_this, _arguments); - } - }; - - var callNow = immediate && !timeout; - - clearTimeout(timeout); - timeout = setTimeout(later, wait || 0); - - if (callNow) { - func.apply(_this, _arguments); - } - }; -} - -exports.default = Object.assign(_underscore2.default, { - get: get, - set: set, - isDefined: isDefined, - isEmptyObject: isEmptyObject, - sleep: sleep, - debounce: debounce, - contains: contains -}); - -/***/ }), -/* 3 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = { - SORT_ASC: 'asc', - SORT_DESC: 'desc', - ROW_SELECT_SINGLE: 'radio', - ROW_SELECT_MULTIPLE: 'checkbox', - ROW_SELECT_DISABLED: 'ROW_SELECT_DISABLED', - CHECKBOX_STATUS_CHECKED: 'checked', - CHECKBOX_STATUS_INDETERMINATE: 'indeterminate', - CHECKBOX_STATUS_UNCHECKED: 'unchecked', - INDICATOR_POSITION_LEFT: 'left', - INDICATOR_POSITION_RIGHT: 'right', - TYPE_STRING: 'string', - TYPE_NUMBER: 'number', - TYPE_BOOLEAN: 'bool', - TYPE_DATE: 'date', - FILTERS_POSITION_INLINE: 'inline', - FILTERS_POSITION_TOP: 'top', - FILTERS_POSITION_BOTTOM: 'bottom' -}; - -/***/ }), -/* 4 */ -/***/ (function(module, exports, __webpack_require__) { - -var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! - Copyright (c) 2016 Jed Watson. - Licensed under the MIT License (MIT), see - http://jedwatson.github.io/classnames -*/ -/* global define */ - -(function () { - 'use strict'; - - var hasOwn = {}.hasOwnProperty; - - function classNames () { - var classes = []; - - for (var i = 0; i < arguments.length; i++) { - var arg = arguments[i]; - if (!arg) continue; - - var argType = typeof arg; - - if (argType === 'string' || argType === 'number') { - classes.push(arg); - } else if (Array.isArray(arg)) { - classes.push(classNames.apply(null, arg)); - } else if (argType === 'object') { - for (var key in arg) { - if (hasOwn.call(arg, key) && arg[key]) { - classes.push(key); - } - } - } - } - - return classes.join(' '); - } - - if (typeof module !== 'undefined' && module.exports) { - module.exports = classNames; - } else if (true) { - // register as 'classnames', consistent with npm package name - !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function () { - return classNames; - }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), - __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - } else { - window.classNames = classNames; - } -}()); - - -/***/ }), -/* 5 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.BootstrapContext = undefined; - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var BootstrapContext = exports.BootstrapContext = _react2.default.createContext({ - bootstrap4: false -}); - -/***/ }), -/* 6 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.getRowByRowId = exports.matchRow = undefined; - -var _utils = __webpack_require__(2); - -var _utils2 = _interopRequireDefault(_utils); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var matchRow = exports.matchRow = function matchRow(keyField, id) { - return function (row) { - return _utils2.default.get(row, keyField) === id; - }; -}; - -var getRowByRowId = exports.getRowByRowId = function getRowByRowId(data, keyField, id) { - return data.find(matchRow(keyField, id)); -}; - -/***/ }), -/* 7 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["a"] = _objectWithoutPropertiesLoose; -function _objectWithoutPropertiesLoose(source, excluded) { - if (source == null) return {}; - var target = {}; - var sourceKeys = Object.keys(source); - var key, i; - - for (i = 0; i < sourceKeys.length; i++) { - key = sourceKeys[i]; - if (excluded.indexOf(key) >= 0) continue; - target[key] = source[key]; - } - - return target; -} - -/***/ }), -/* 8 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["a"] = _inheritsLoose; -function _inheritsLoose(subClass, superClass) { - subClass.prototype = Object.create(superClass.prototype); - subClass.prototype.constructor = subClass; - subClass.__proto__ = superClass; -} - -/***/ }), -/* 9 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _utils = __webpack_require__(2); - -var _utils2 = _interopRequireDefault(_utils); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -var events = ['onClick', 'onDoubleClick', 'onMouseEnter', 'onMouseLeave', 'onContextMenu', 'onAuxClick']; - -exports.default = function (ExtendBase) { - return function (_ExtendBase) { - _inherits(CellEventDelegater, _ExtendBase); - - function CellEventDelegater(props) { - _classCallCheck(this, CellEventDelegater); - - var _this = _possibleConstructorReturn(this, (CellEventDelegater.__proto__ || Object.getPrototypeOf(CellEventDelegater)).call(this, props)); - - _this.createDefaultEventHandler = _this.createDefaultEventHandler.bind(_this); - return _this; - } - - _createClass(CellEventDelegater, [{ - key: 'createDefaultEventHandler', - value: function createDefaultEventHandler(cb) { - var _this2 = this; - - return function (e) { - var _props = _this2.props, - column = _props.column, - columnIndex = _props.columnIndex, - index = _props.index; - - cb(e, column, typeof columnIndex !== 'undefined' ? columnIndex : index); - }; - } - }, { - key: 'delegate', - value: function delegate() { - var _this3 = this; - - var attrs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - var newAttrs = _extends({}, attrs); - Object.keys(attrs).forEach(function (attr) { - if (_utils2.default.contains(events, attr)) { - newAttrs[attr] = _this3.createDefaultEventHandler(attrs[attr]); - } - }); - return newAttrs; - } - }]); - - return CellEventDelegater; - }(ExtendBase); -}; - -/***/ }), -/* 10 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = __webpack_require__(1); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _const = __webpack_require__(3); - -var _const2 = _interopRequireDefault(_const); - -var _utils = __webpack_require__(2); - -var _utils2 = _interopRequireDefault(_utils); - -var _operators = __webpack_require__(11); - -var _operators2 = _interopRequireDefault(_operators); - -var _selection = __webpack_require__(13); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint camelcase: 0 */ -/* eslint react/prop-types: 0 */ - - -var SelectionContext = _react2.default.createContext(); - -var SelectionProvider = function (_React$Component) { - _inherits(SelectionProvider, _React$Component); - - function SelectionProvider(props) { - _classCallCheck(this, SelectionProvider); - - var _this = _possibleConstructorReturn(this, (SelectionProvider.__proto__ || Object.getPrototypeOf(SelectionProvider)).call(this, props)); - - _this.handleRowSelect = function (rowKey, checked, rowIndex, e) { - var _this$props = _this.props, - data = _this$props.data, - keyField = _this$props.keyField, - _this$props$selectRow = _this$props.selectRow, - mode = _this$props$selectRow.mode, - onSelect = _this$props$selectRow.onSelect; - var ROW_SELECT_SINGLE = _const2.default.ROW_SELECT_SINGLE; - - - var currSelected = [].concat(_toConsumableArray(_this.selected)); - - var result = true; - if (onSelect) { - var row = _operators2.default.getRowByRowId(data, keyField, rowKey); - result = onSelect(row, checked, rowIndex, e); - } - - if (result === true || result === undefined) { - if (mode === ROW_SELECT_SINGLE) { - // when select mode is radio - currSelected = [rowKey]; - } else if (checked) { - // when select mode is checkbox - currSelected.push(rowKey); - } else { - currSelected = currSelected.filter(function (value) { - return value !== rowKey; - }); - } - } - _this.selected = currSelected; - _this.forceUpdate(); - }; - - _this.handleAllRowsSelect = function (e, isUnSelect) { - var _this$props2 = _this.props, - data = _this$props2.data, - keyField = _this$props2.keyField, - _this$props2$selectRo = _this$props2.selectRow, - onSelectAll = _this$props2$selectRo.onSelectAll, - nonSelectable = _this$props2$selectRo.nonSelectable; - var selected = _this.selected; - - - var currSelected = void 0; - - if (!isUnSelect) { - currSelected = selected.concat(_operators2.default.selectableKeys(data, keyField, nonSelectable)); - } else { - currSelected = selected.filter(function (s) { - return typeof data.find(function (d) { - return _utils2.default.get(d, keyField) === s; - }) === 'undefined'; - }); - } - - var result = void 0; - if (onSelectAll) { - result = onSelectAll(!isUnSelect, _operators2.default.getSelectedRows(data, keyField, isUnSelect ? selected : currSelected), e); - if (Array.isArray(result)) { - currSelected = result; - } - } - _this.selected = currSelected; - _this.forceUpdate(); - }; - - _this.selected = props.selectRow.selected || []; - return _this; - } - - // exposed API - - - _createClass(SelectionProvider, [{ - key: 'getSelected', - value: function getSelected() { - return this.selected; - } - }, { - key: 'UNSAFE_componentWillReceiveProps', - value: function UNSAFE_componentWillReceiveProps(nextProps) { - if (nextProps.selectRow) { - this.selected = nextProps.selectRow.selected || this.selected; - } - } - }, { - key: 'render', - value: function render() { - var _getSelectionSummary = (0, _selection.getSelectionSummary)(this.props.data, this.props.keyField, this.selected), - allRowsSelected = _getSelectionSummary.allRowsSelected, - allRowsNotSelected = _getSelectionSummary.allRowsNotSelected; - - var checkedStatus = void 0; - - // checkbox status depending on selected rows counts - if (allRowsSelected) checkedStatus = _const2.default.CHECKBOX_STATUS_CHECKED;else if (allRowsNotSelected) checkedStatus = _const2.default.CHECKBOX_STATUS_UNCHECKED;else checkedStatus = _const2.default.CHECKBOX_STATUS_INDETERMINATE; - - return _react2.default.createElement( - SelectionContext.Provider, - { - value: _extends({}, this.props.selectRow, { - selected: this.selected, - onRowSelect: this.handleRowSelect, - onAllRowsSelect: this.handleAllRowsSelect, - allRowsSelected: allRowsSelected, - allRowsNotSelected: allRowsNotSelected, - checkedStatus: checkedStatus - }) - }, - this.props.children - ); - } - }]); - - return SelectionProvider; -}(_react2.default.Component); - -SelectionProvider.propTypes = { - children: _propTypes2.default.node.isRequired, - data: _propTypes2.default.array.isRequired, - keyField: _propTypes2.default.string.isRequired -}; -exports.default = { - Provider: SelectionProvider, - Consumer: SelectionContext.Consumer -}; - -/***/ }), -/* 11 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _rows = __webpack_require__(6); - -var rows = _interopRequireWildcard(_rows); - -var _selection = __webpack_require__(13); - -var selection = _interopRequireWildcard(_selection); - -var _expand = __webpack_require__(40); - -var expand = _interopRequireWildcard(_expand); - -var _mutate = __webpack_require__(41); - -var mutate = _interopRequireWildcard(_mutate); - -var _sort = __webpack_require__(42); - -var sort = _interopRequireWildcard(_sort); - -var _type = __webpack_require__(43); - -var type = _interopRequireWildcard(_type); - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - -exports.default = _extends({}, rows, selection, expand, mutate, sort, type); - -/***/ }), -/* 12 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = __webpack_require__(1); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _operators = __webpack_require__(11); - -var _operators2 = _interopRequireDefault(_operators); - -var _utils = __webpack_require__(2); - -var _utils2 = _interopRequireDefault(_utils); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint camelcase: 0 */ -/* eslint react/prop-types: 0 */ - - -var RowExpandContext = _react2.default.createContext(); - -var RowExpandProvider = function (_React$Component) { - _inherits(RowExpandProvider, _React$Component); - - function RowExpandProvider() { - var _ref; - - var _temp, _this, _ret; - - _classCallCheck(this, RowExpandProvider); - - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = RowExpandProvider.__proto__ || Object.getPrototypeOf(RowExpandProvider)).call.apply(_ref, [this].concat(args))), _this), _this.state = { expanded: _this.props.expandRow.expanded || [], - isClosing: _this.props.expandRow.isClosing || [] }, _this.onClosed = function (closedRow) { - _this.setState({ isClosing: _this.state.isClosing.filter(function (value) { - return value !== closedRow; - }) }); - }, _this.handleRowExpand = function (rowKey, expanded, rowIndex, e) { - var _this$props = _this.props, - data = _this$props.data, - keyField = _this$props.keyField, - _this$props$expandRow = _this$props.expandRow, - onExpand = _this$props$expandRow.onExpand, - onlyOneExpanding = _this$props$expandRow.onlyOneExpanding, - nonExpandable = _this$props$expandRow.nonExpandable; - - if (nonExpandable && _utils2.default.contains(nonExpandable, rowKey)) { - return; - } - - var currExpanded = [].concat(_toConsumableArray(_this.state.expanded)); - var isClosing = [].concat(_toConsumableArray(_this.state.isClosing)); - - if (expanded) { - if (onlyOneExpanding) { - isClosing = isClosing.concat(currExpanded); - currExpanded = [rowKey]; - } else currExpanded.push(rowKey); - } else { - isClosing.push(rowKey); - currExpanded = currExpanded.filter(function (value) { - return value !== rowKey; - }); - } - - if (onExpand) { - var row = _operators2.default.getRowByRowId(data, keyField, rowKey); - onExpand(row, expanded, rowIndex, e); - } - _this.setState(function () { - return { expanded: currExpanded, isClosing: isClosing }; - }); - }, _this.handleAllRowExpand = function (e, expandAll) { - var _this$props2 = _this.props, - data = _this$props2.data, - keyField = _this$props2.keyField, - _this$props2$expandRo = _this$props2.expandRow, - onExpandAll = _this$props2$expandRo.onExpandAll, - nonExpandable = _this$props2$expandRo.nonExpandable; - var expanded = _this.state.expanded; - - - var currExpanded = void 0; - - if (expandAll) { - currExpanded = expanded.concat(_operators2.default.expandableKeys(data, keyField, nonExpandable)); - } else { - currExpanded = expanded.filter(function (s) { - return typeof data.find(function (d) { - return _utils2.default.get(d, keyField) === s; - }) === 'undefined'; - }); - } - - if (onExpandAll) { - onExpandAll(expandAll, _operators2.default.getExpandedRows(data, keyField, currExpanded), e); - } - - _this.setState(function () { - return { expanded: currExpanded }; - }); - }, _temp), _possibleConstructorReturn(_this, _ret); - } - - _createClass(RowExpandProvider, [{ - key: 'UNSAFE_componentWillReceiveProps', - value: function UNSAFE_componentWillReceiveProps(nextProps) { - var _this2 = this; - - if (nextProps.expandRow) { - var nextExpanded = [].concat(_toConsumableArray(nextProps.expandRow.expanded || this.state.expanded)); - var _nextProps$expandRow$ = nextProps.expandRow.nonExpandable, - nonExpandable = _nextProps$expandRow$ === undefined ? [] : _nextProps$expandRow$; - - nextExpanded = nextExpanded.filter(function (rowId) { - return !_utils2.default.contains(nonExpandable, rowId); - }); - var isClosing = this.state.expanded.reduce(function (acc, cur) { - if (!_utils2.default.contains(nextExpanded, cur)) { - acc.push(cur); - } - return acc; - }, []); - - this.setState(function () { - return { - expanded: nextExpanded, - isClosing: isClosing - }; - }); - } else { - this.setState(function () { - return { - expanded: _this2.state.expanded - }; - }); - } - } - }, { - key: 'render', - value: function render() { - var _props = this.props, - data = _props.data, - keyField = _props.keyField; - - return _react2.default.createElement( - RowExpandContext.Provider, - { - value: _extends({}, this.props.expandRow, { - nonExpandable: this.props.expandRow.nonExpandable, - expanded: this.state.expanded, - isClosing: this.state.isClosing, - onClosed: this.onClosed, - isAnyExpands: _operators2.default.isAnyExpands(data, keyField, this.state.expanded), - onRowExpand: this.handleRowExpand, - onAllRowExpand: this.handleAllRowExpand - }) - }, - this.props.children - ); - } - }]); - - return RowExpandProvider; -}(_react2.default.Component); - -RowExpandProvider.propTypes = { - children: _propTypes2.default.node.isRequired, - data: _propTypes2.default.array.isRequired, - keyField: _propTypes2.default.string.isRequired -}; -exports.default = { - Provider: RowExpandProvider, - Consumer: RowExpandContext.Consumer -}; - -/***/ }), -/* 13 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.getSelectedRows = exports.unSelectableKeys = exports.selectableKeys = exports.getSelectionSummary = undefined; - -var _utils = __webpack_require__(2); - -var _utils2 = _interopRequireDefault(_utils); - -var _rows = __webpack_require__(6); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var getSelectionSummary = exports.getSelectionSummary = function getSelectionSummary() { - var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; - var keyField = arguments[1]; - var selected = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : []; - - var allRowsSelected = data.length > 0; - var allRowsNotSelected = true; - - var rowKeys = data.map(function (d) { - return _utils2.default.get(d, keyField); - }); - - var _loop = function _loop(i) { - var curr = rowKeys[i]; - if (typeof selected.find(function (x) { - return x === curr; - }) === 'undefined') { - allRowsSelected = false; - } else { - allRowsNotSelected = false; - } - }; - - for (var i = 0; i < rowKeys.length; i += 1) { - _loop(i); - } - return { - allRowsSelected: allRowsSelected, - allRowsNotSelected: allRowsNotSelected - }; -}; - -var selectableKeys = exports.selectableKeys = function selectableKeys() { - var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; - var keyField = arguments[1]; - var skips = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : []; - - if (skips.length === 0) { - return data.map(function (row) { - return _utils2.default.get(row, keyField); - }); - } - return data.filter(function (row) { - return !_utils2.default.contains(skips, _utils2.default.get(row, keyField)); - }).map(function (row) { - return _utils2.default.get(row, keyField); - }); -}; - -var unSelectableKeys = exports.unSelectableKeys = function unSelectableKeys(selected) { - var skips = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; - - if (skips.length === 0) { - return []; - } - return selected.filter(function (x) { - return _utils2.default.contains(skips, x); - }); -}; - -var getSelectedRows = exports.getSelectedRows = function getSelectedRows() { - var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; - var keyField = arguments[1]; - var selected = arguments[2]; - return selected.map(function (k) { - return (0, _rows.getRowByRowId)(data, keyField, k); - }).filter(function (x) { - return !!x; - }); -}; - -/***/ }), -/* 14 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = __webpack_require__(1); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _const = __webpack_require__(3); - -var _const2 = _interopRequireDefault(_const); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } /* eslint react/require-default-props: 0 */ - - -var RowTemplate = function RowTemplate(props) { - var renderContent = props.renderContent, - selectRow = props.selectRow, - expandRow = props.expandRow, - cellEl = props.cellEl, - rest = _objectWithoutProperties(props, ['renderContent', 'selectRow', 'expandRow', 'cellEl']); - - var isRenderFunctionColumnInLeft = function isRenderFunctionColumnInLeft() { - var position = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _const2.default.INDICATOR_POSITION_LEFT; - return position === _const2.default.INDICATOR_POSITION_LEFT; - }; - - var childrens = renderContent() || []; - - if (selectRow && selectRow.hideSelectColumn !== true) { - if (isRenderFunctionColumnInLeft(selectRow.selectColumnPosition)) { - childrens.unshift(_react2.default.createElement(cellEl, { key: 'selection' })); - } else { - childrens.push(_react2.default.createElement(cellEl, { key: 'selection' })); - } - } - - if (expandRow.showExpandColumn) { - if (isRenderFunctionColumnInLeft(expandRow.expandColumnPosition)) { - childrens.unshift(_react2.default.createElement(cellEl, { key: 'expansion' })); - } else { - childrens.push(_react2.default.createElement(cellEl, { key: 'expansion' })); - } - } - - return _react2.default.createElement( - 'tr', - rest, - childrens - ); -}; - -RowTemplate.propTypes = { - renderContent: _propTypes2.default.func.isRequired, - cellEl: _propTypes2.default.string.isRequired, - selectRow: _propTypes2.default.object, - expandRow: _propTypes2.default.object -}; - -exports.default = RowTemplate; - -/***/ }), -/* 15 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _utils = __webpack_require__(2); - -var _utils2 = _interopRequireDefault(_utils); - -var _cell = __webpack_require__(50); - -var _cell2 = _interopRequireDefault(_cell); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint react/prop-types: 0 */ -/* eslint react/no-array-index-key: 0 */ -/* eslint no-plusplus: 0 */ - - -var RowPureContent = function (_React$Component) { - _inherits(RowPureContent, _React$Component); - - function RowPureContent() { - _classCallCheck(this, RowPureContent); - - return _possibleConstructorReturn(this, (RowPureContent.__proto__ || Object.getPrototypeOf(RowPureContent)).apply(this, arguments)); - } - - _createClass(RowPureContent, [{ - key: 'shouldComponentUpdate', - value: function shouldComponentUpdate(nextProps) { - if (typeof nextProps.shouldUpdate !== 'undefined') { - return nextProps.shouldUpdate; - } - return true; - } - }, { - key: 'render', - value: function render() { - var _props = this.props, - row = _props.row, - keyField = _props.keyField, - columns = _props.columns, - rowIndex = _props.rowIndex, - editable = _props.editable, - editingRowIdx = _props.editingRowIdx, - editingColIdx = _props.editingColIdx, - onStart = _props.onStart, - clickToEdit = _props.clickToEdit, - dbclickToEdit = _props.dbclickToEdit, - EditingCellComponent = _props.EditingCellComponent, - tabIndexStart = _props.tabIndexStart; - - - var tabIndex = tabIndexStart; - - return columns.map(function (column, index) { - var dataField = column.dataField; - - var content = _utils2.default.get(row, dataField); - if (rowIndex === editingRowIdx && index === editingColIdx) { - return _react2.default.createElement(EditingCellComponent, { - key: content + '-' + index + '-editing', - row: row, - rowIndex: rowIndex, - column: column, - columnIndex: index - }); - } - // render cell - var cellTitle = void 0; - var cellStyle = {}; - var cellAttrs = _extends({}, _utils2.default.isFunction(column.attrs) ? column.attrs(content, row, rowIndex, index) : column.attrs); - - if (column.events) { - var events = Object.assign({}, column.events); - Object.keys(Object.assign({}, column.events)).forEach(function (key) { - var originFn = events[key]; - events[key] = function () { - for (var _len = arguments.length, rest = Array(_len), _key = 0; _key < _len; _key++) { - rest[_key] = arguments[_key]; - } - - return originFn.apply(undefined, rest.concat([row, rowIndex])); - }; - }); - cellAttrs = _extends({}, cellAttrs, events); - } - - var cellClasses = _utils2.default.isFunction(column.classes) ? column.classes(content, row, rowIndex, index) : column.classes; - - if (column.style) { - cellStyle = _utils2.default.isFunction(column.style) ? column.style(content, row, rowIndex, index) : column.style; - cellStyle = Object.assign({}, cellStyle) || {}; - } - - if (column.title) { - cellTitle = _utils2.default.isFunction(column.title) ? column.title(content, row, rowIndex, index) : content; - cellAttrs.title = cellTitle; - } - - if (column.align) { - cellStyle.textAlign = _utils2.default.isFunction(column.align) ? column.align(content, row, rowIndex, index) : column.align; - } - - if (cellClasses) cellAttrs.className = cellClasses; - if (!_utils2.default.isEmptyObject(cellStyle)) cellAttrs.style = cellStyle; - - var editableCell = _utils2.default.isDefined(column.editable) ? column.editable : true; - if (column.dataField === keyField || !editable) editableCell = false; - if (_utils2.default.isFunction(column.editable)) { - editableCell = column.editable(content, row, rowIndex, index); - } - - if (tabIndexStart !== -1) { - cellAttrs.tabIndex = tabIndex++; - } - - return _react2.default.createElement(_cell2.default, _extends({ - key: content + '-' + index, - row: row, - editable: editableCell, - rowIndex: rowIndex, - columnIndex: index, - column: column, - onStart: onStart, - clickToEdit: clickToEdit, - dbclickToEdit: dbclickToEdit - }, cellAttrs)); - }); - } - }]); - - return RowPureContent; -}(_react2.default.Component); - -exports.default = RowPureContent; - -/***/ }), -/* 16 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _utils = __webpack_require__(2); - -var _utils2 = _interopRequireDefault(_utils); - -var _const = __webpack_require__(3); - -var _const2 = _interopRequireDefault(_const); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -var events = ['onClick', 'onDoubleClick', 'onMouseEnter', 'onMouseLeave', 'onContextMenu', 'onAuxClick']; - -exports.default = function (ExtendBase) { - return function (_ExtendBase) { - _inherits(RowEventDelegater, _ExtendBase); - - function RowEventDelegater(props) { - _classCallCheck(this, RowEventDelegater); - - var _this = _possibleConstructorReturn(this, (RowEventDelegater.__proto__ || Object.getPrototypeOf(RowEventDelegater)).call(this, props)); - - _this.clickNum = 0; - _this.createDefaultEventHandler = _this.createDefaultEventHandler.bind(_this); - _this.createClickEventHandler = _this.createClickEventHandler.bind(_this); - return _this; - } - - _createClass(RowEventDelegater, [{ - key: 'createClickEventHandler', - value: function createClickEventHandler(cb) { - var _this2 = this; - - return function (e) { - var _props = _this2.props, - row = _props.row, - selected = _props.selected, - keyField = _props.keyField, - selectable = _props.selectable, - expandable = _props.expandable, - rowIndex = _props.rowIndex, - expanded = _props.expanded, - expandRow = _props.expandRow, - selectRow = _props.selectRow, - DELAY_FOR_DBCLICK = _props.DELAY_FOR_DBCLICK; - - var clickFn = function clickFn() { - if (cb) { - cb(e, row, rowIndex); - } - var key = _utils2.default.get(row, keyField); - if (expandRow && expandable && !expandRow.expandByColumnOnly) { - if (selectRow.mode !== _const2.default.ROW_SELECT_DISABLED && selectRow.clickToExpand || selectRow.mode === _const2.default.ROW_SELECT_DISABLED) { - expandRow.onRowExpand(key, !expanded, rowIndex, e); - } - } - if (selectRow.clickToSelect && selectable) { - selectRow.onRowSelect(key, !selected, rowIndex, e); - } - }; - - if (DELAY_FOR_DBCLICK) { - _this2.clickNum += 1; - _utils2.default.debounce(function () { - if (_this2.clickNum === 1) { - clickFn(); - } - _this2.clickNum = 0; - }, DELAY_FOR_DBCLICK)(); - } else { - clickFn(); - } - }; - } - }, { - key: 'createDefaultEventHandler', - value: function createDefaultEventHandler(cb) { - var _this3 = this; - - return function (e) { - var _props2 = _this3.props, - row = _props2.row, - rowIndex = _props2.rowIndex; - - cb(e, row, rowIndex); - }; - } - }, { - key: 'delegate', - value: function delegate() { - var _this4 = this; - - var attrs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - var newAttrs = _extends({}, attrs); - Object.keys(attrs).forEach(function (attr) { - if (_utils2.default.contains(events, attr)) { - newAttrs[attr] = _this4.createDefaultEventHandler(attrs[attr]); - } - }); - return newAttrs; - } - }]); - - return RowEventDelegater; - }(ExtendBase); -}; - -/***/ }), -/* 17 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _utils = __webpack_require__(2); - -var _utils2 = _interopRequireDefault(_utils); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint react/prop-types: 0 */ - - -exports.default = function (ExtendBase) { - return function (_ExtendBase) { - _inherits(RowShouldUpdater, _ExtendBase); - - function RowShouldUpdater() { - _classCallCheck(this, RowShouldUpdater); - - return _possibleConstructorReturn(this, (RowShouldUpdater.__proto__ || Object.getPrototypeOf(RowShouldUpdater)).apply(this, arguments)); - } - - _createClass(RowShouldUpdater, [{ - key: 'shouldUpdateByCellEditing', - value: function shouldUpdateByCellEditing(nextProps) { - if (!(this.props.clickToEdit || this.props.dbclickToEdit)) return false; - return nextProps.editingRowIdx === nextProps.rowIndex || this.props.editingRowIdx === nextProps.rowIndex && nextProps.editingRowIdx === null || this.props.editingRowIdx === nextProps.rowIndex; - } - }, { - key: 'shouldUpdatedBySelfProps', - value: function shouldUpdatedBySelfProps(nextProps) { - return this.props.className !== nextProps.className || !_utils2.default.isEqual(this.props.style, nextProps.style) || !_utils2.default.isEqual(this.props.attrs, nextProps.attrs); - } - - // Only use for simple-row - - }, { - key: 'shouldUpdateByColumnsForSimpleCheck', - value: function shouldUpdateByColumnsForSimpleCheck(nextProps) { - if (this.props.columns.length !== nextProps.columns.length) { - return true; - } - for (var i = 0; i < this.props.columns.length; i += 1) { - if (!_utils2.default.isEqual(this.props.columns[i], nextProps.columns[i])) { - return true; - } - } - return false; - } - }, { - key: 'shouldUpdatedByNormalProps', - value: function shouldUpdatedByNormalProps(nextProps) { - var shouldUpdate = this.props.rowIndex !== nextProps.rowIndex || this.props.editable !== nextProps.editable || !_utils2.default.isEqual(this.props.row, nextProps.row) || this.props.columns.length !== nextProps.columns.length; - - return shouldUpdate; - } - }, { - key: 'shouldUpdateChild', - value: function shouldUpdateChild(nextProps) { - return this.shouldUpdateByCellEditing(nextProps) || this.shouldUpdatedByNormalProps(nextProps); - } - }, { - key: 'shouldRowContentUpdate', - value: function shouldRowContentUpdate(nextProps) { - return this.shouldUpdateChild(nextProps) || this.shouldUpdateByColumnsForSimpleCheck(nextProps); - } - }]); - - return RowShouldUpdater; - }(ExtendBase); -}; - -/***/ }), -/* 18 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["a"] = _extends; -function _extends() { - _extends = Object.assign || function (target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - - for (var key in source) { - if (Object.prototype.hasOwnProperty.call(source, key)) { - target[key] = source[key]; - } - } - } - - return target; - }; - - return _extends.apply(this, arguments); -} - -/***/ }), -/* 19 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* unused harmony export UNMOUNTED */ -/* unused harmony export EXITED */ -/* unused harmony export ENTERING */ -/* unused harmony export ENTERED */ -/* unused harmony export EXITING */ -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__babel_runtime_helpers_esm_objectWithoutPropertiesLoose__ = __webpack_require__(7); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__babel_runtime_helpers_esm_inheritsLoose__ = __webpack_require__(8); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_prop_types__ = __webpack_require__(1); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_prop_types__); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_react__ = __webpack_require__(0); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_react__); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_react_dom__ = __webpack_require__(20); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_react_dom___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_react_dom__); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__config__ = __webpack_require__(21); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__utils_PropTypes__ = __webpack_require__(22); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__TransitionGroupContext__ = __webpack_require__(23); - - - - - - - - -var UNMOUNTED = 'unmounted'; -var EXITED = 'exited'; -var ENTERING = 'entering'; -var ENTERED = 'entered'; -var EXITING = 'exiting'; -/** - * The Transition component lets you describe a transition from one component - * state to another _over time_ with a simple declarative API. Most commonly - * it's used to animate the mounting and unmounting of a component, but can also - * be used to describe in-place transition states as well. - * - * --- - * - * **Note**: `Transition` is a platform-agnostic base component. If you're using - * transitions in CSS, you'll probably want to use - * [`CSSTransition`](https://reactcommunity.org/react-transition-group/css-transition) - * instead. It inherits all the features of `Transition`, but contains - * additional features necessary to play nice with CSS transitions (hence the - * name of the component). - * - * --- - * - * By default the `Transition` component does not alter the behavior of the - * component it renders, it only tracks "enter" and "exit" states for the - * components. It's up to you to give meaning and effect to those states. For - * example we can add styles to a component when it enters or exits: - * - * ```jsx - * import { Transition } from 'react-transition-group'; - * - * const duration = 300; - * - * const defaultStyle = { - * transition: `opacity ${duration}ms ease-in-out`, - * opacity: 0, - * } - * - * const transitionStyles = { - * entering: { opacity: 1 }, - * entered: { opacity: 1 }, - * exiting: { opacity: 0 }, - * exited: { opacity: 0 }, - * }; - * - * const Fade = ({ in: inProp }) => ( - * - * {state => ( - *
- * I'm a fade Transition! - *
- * )} - *
- * ); - * ``` - * - * There are 4 main states a Transition can be in: - * - `'entering'` - * - `'entered'` - * - `'exiting'` - * - `'exited'` - * - * Transition state is toggled via the `in` prop. When `true` the component - * begins the "Enter" stage. During this stage, the component will shift from - * its current transition state, to `'entering'` for the duration of the - * transition and then to the `'entered'` stage once it's complete. Let's take - * the following example (we'll use the - * [useState](https://reactjs.org/docs/hooks-reference.html#usestate) hook): - * - * ```jsx - * function App() { - * const [inProp, setInProp] = useState(false); - * return ( - *
- * - * {state => ( - * // ... - * )} - * - * - *
- * ); - * } - * ``` - * - * When the button is clicked the component will shift to the `'entering'` state - * and stay there for 500ms (the value of `timeout`) before it finally switches - * to `'entered'`. - * - * When `in` is `false` the same thing happens except the state moves from - * `'exiting'` to `'exited'`. - */ - -var Transition = -/*#__PURE__*/ -function (_React$Component) { - Object(__WEBPACK_IMPORTED_MODULE_1__babel_runtime_helpers_esm_inheritsLoose__["a" /* default */])(Transition, _React$Component); - - function Transition(props, context) { - var _this; - - _this = _React$Component.call(this, props, context) || this; - var parentGroup = context; // In the context of a TransitionGroup all enters are really appears - - var appear = parentGroup && !parentGroup.isMounting ? props.enter : props.appear; - var initialStatus; - _this.appearStatus = null; - - if (props.in) { - if (appear) { - initialStatus = EXITED; - _this.appearStatus = ENTERING; - } else { - initialStatus = ENTERED; - } - } else { - if (props.unmountOnExit || props.mountOnEnter) { - initialStatus = UNMOUNTED; - } else { - initialStatus = EXITED; - } - } - - _this.state = { - status: initialStatus - }; - _this.nextCallback = null; - return _this; - } - - Transition.getDerivedStateFromProps = function getDerivedStateFromProps(_ref, prevState) { - var nextIn = _ref.in; - - if (nextIn && prevState.status === UNMOUNTED) { - return { - status: EXITED - }; - } - - return null; - }; // getSnapshotBeforeUpdate(prevProps) { - // let nextStatus = null - // if (prevProps !== this.props) { - // const { status } = this.state - // if (this.props.in) { - // if (status !== ENTERING && status !== ENTERED) { - // nextStatus = ENTERING - // } - // } else { - // if (status === ENTERING || status === ENTERED) { - // nextStatus = EXITING - // } - // } - // } - // return { nextStatus } - // } - - - var _proto = Transition.prototype; - - _proto.componentDidMount = function componentDidMount() { - this.updateStatus(true, this.appearStatus); - }; - - _proto.componentDidUpdate = function componentDidUpdate(prevProps) { - var nextStatus = null; - - if (prevProps !== this.props) { - var status = this.state.status; - - if (this.props.in) { - if (status !== ENTERING && status !== ENTERED) { - nextStatus = ENTERING; - } - } else { - if (status === ENTERING || status === ENTERED) { - nextStatus = EXITING; - } - } - } - - this.updateStatus(false, nextStatus); - }; - - _proto.componentWillUnmount = function componentWillUnmount() { - this.cancelNextCallback(); - }; - - _proto.getTimeouts = function getTimeouts() { - var timeout = this.props.timeout; - var exit, enter, appear; - exit = enter = appear = timeout; - - if (timeout != null && typeof timeout !== 'number') { - exit = timeout.exit; - enter = timeout.enter; // TODO: remove fallback for next major - - appear = timeout.appear !== undefined ? timeout.appear : enter; - } - - return { - exit: exit, - enter: enter, - appear: appear - }; - }; - - _proto.updateStatus = function updateStatus(mounting, nextStatus) { - if (mounting === void 0) { - mounting = false; - } - - if (nextStatus !== null) { - // nextStatus will always be ENTERING or EXITING. - this.cancelNextCallback(); - var node = __WEBPACK_IMPORTED_MODULE_4_react_dom___default.a.findDOMNode(this); - - if (nextStatus === ENTERING) { - this.performEnter(node, mounting); - } else { - this.performExit(node); - } - } else if (this.props.unmountOnExit && this.state.status === EXITED) { - this.setState({ - status: UNMOUNTED - }); - } - }; - - _proto.performEnter = function performEnter(node, mounting) { - var _this2 = this; - - var enter = this.props.enter; - var appearing = this.context ? this.context.isMounting : mounting; - var timeouts = this.getTimeouts(); - var enterTimeout = appearing ? timeouts.appear : timeouts.enter; // no enter animation skip right to ENTERED - // if we are mounting and running this it means appear _must_ be set - - if (!mounting && !enter || __WEBPACK_IMPORTED_MODULE_5__config__["a" /* default */].disabled) { - this.safeSetState({ - status: ENTERED - }, function () { - _this2.props.onEntered(node); - }); - return; - } - - this.props.onEnter(node, appearing); - this.safeSetState({ - status: ENTERING - }, function () { - _this2.props.onEntering(node, appearing); - - _this2.onTransitionEnd(node, enterTimeout, function () { - _this2.safeSetState({ - status: ENTERED - }, function () { - _this2.props.onEntered(node, appearing); - }); - }); - }); - }; - - _proto.performExit = function performExit(node) { - var _this3 = this; - - var exit = this.props.exit; - var timeouts = this.getTimeouts(); // no exit animation skip right to EXITED - - if (!exit || __WEBPACK_IMPORTED_MODULE_5__config__["a" /* default */].disabled) { - this.safeSetState({ - status: EXITED - }, function () { - _this3.props.onExited(node); - }); - return; - } - - this.props.onExit(node); - this.safeSetState({ - status: EXITING - }, function () { - _this3.props.onExiting(node); - - _this3.onTransitionEnd(node, timeouts.exit, function () { - _this3.safeSetState({ - status: EXITED - }, function () { - _this3.props.onExited(node); - }); - }); - }); - }; - - _proto.cancelNextCallback = function cancelNextCallback() { - if (this.nextCallback !== null) { - this.nextCallback.cancel(); - this.nextCallback = null; - } - }; - - _proto.safeSetState = function safeSetState(nextState, callback) { - // This shouldn't be necessary, but there are weird race conditions with - // setState callbacks and unmounting in testing, so always make sure that - // we can cancel any pending setState callbacks after we unmount. - callback = this.setNextCallback(callback); - this.setState(nextState, callback); - }; - - _proto.setNextCallback = function setNextCallback(callback) { - var _this4 = this; - - var active = true; - - this.nextCallback = function (event) { - if (active) { - active = false; - _this4.nextCallback = null; - callback(event); - } - }; - - this.nextCallback.cancel = function () { - active = false; - }; - - return this.nextCallback; - }; - - _proto.onTransitionEnd = function onTransitionEnd(node, timeout, handler) { - this.setNextCallback(handler); - var doesNotHaveTimeoutOrListener = timeout == null && !this.props.addEndListener; - - if (!node || doesNotHaveTimeoutOrListener) { - setTimeout(this.nextCallback, 0); - return; - } - - if (this.props.addEndListener) { - this.props.addEndListener(node, this.nextCallback); - } - - if (timeout != null) { - setTimeout(this.nextCallback, timeout); - } - }; - - _proto.render = function render() { - var status = this.state.status; - - if (status === UNMOUNTED) { - return null; - } - - var _this$props = this.props, - children = _this$props.children, - childProps = Object(__WEBPACK_IMPORTED_MODULE_0__babel_runtime_helpers_esm_objectWithoutPropertiesLoose__["a" /* default */])(_this$props, ["children"]); // filter props for Transtition - - - delete childProps.in; - delete childProps.mountOnEnter; - delete childProps.unmountOnExit; - delete childProps.appear; - delete childProps.enter; - delete childProps.exit; - delete childProps.timeout; - delete childProps.addEndListener; - delete childProps.onEnter; - delete childProps.onEntering; - delete childProps.onEntered; - delete childProps.onExit; - delete childProps.onExiting; - delete childProps.onExited; - - if (typeof children === 'function') { - // allows for nested Transitions - return __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_7__TransitionGroupContext__["a" /* default */].Provider, { - value: null - }, children(status, childProps)); - } - - var child = __WEBPACK_IMPORTED_MODULE_3_react___default.a.Children.only(children); - return (// allows for nested Transitions - __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_7__TransitionGroupContext__["a" /* default */].Provider, { - value: null - }, __WEBPACK_IMPORTED_MODULE_3_react___default.a.cloneElement(child, childProps)) - ); - }; - - return Transition; -}(__WEBPACK_IMPORTED_MODULE_3_react___default.a.Component); - -Transition.contextType = __WEBPACK_IMPORTED_MODULE_7__TransitionGroupContext__["a" /* default */]; -Transition.propTypes = false ? { - /** - * A `function` child can be used instead of a React element. This function is - * called with the current transition status (`'entering'`, `'entered'`, - * `'exiting'`, `'exited'`), which can be used to apply context - * specific props to a component. - * - * ```jsx - * - * {state => ( - * - * )} - * - * ``` - */ - children: PropTypes.oneOfType([PropTypes.func.isRequired, PropTypes.element.isRequired]).isRequired, - - /** - * Show the component; triggers the enter or exit states - */ - in: PropTypes.bool, - - /** - * By default the child component is mounted immediately along with - * the parent `Transition` component. If you want to "lazy mount" the component on the - * first `in={true}` you can set `mountOnEnter`. After the first enter transition the component will stay - * mounted, even on "exited", unless you also specify `unmountOnExit`. - */ - mountOnEnter: PropTypes.bool, - - /** - * By default the child component stays mounted after it reaches the `'exited'` state. - * Set `unmountOnExit` if you'd prefer to unmount the component after it finishes exiting. - */ - unmountOnExit: PropTypes.bool, - - /** - * Normally a component is not transitioned if it is shown when the `` component mounts. - * If you want to transition on the first mount set `appear` to `true`, and the - * component will transition in as soon as the `` mounts. - * - * > Note: there are no specific "appear" states. `appear` only adds an additional `enter` transition. - */ - appear: PropTypes.bool, - - /** - * Enable or disable enter transitions. - */ - enter: PropTypes.bool, - - /** - * Enable or disable exit transitions. - */ - exit: PropTypes.bool, - - /** - * The duration of the transition, in milliseconds. - * Required unless `addEndListener` is provided. - * - * You may specify a single timeout for all transitions: - * - * ```jsx - * timeout={500} - * ``` - * - * or individually: - * - * ```jsx - * timeout={{ - * appear: 500, - * enter: 300, - * exit: 500, - * }} - * ``` - * - * - `appear` defaults to the value of `enter` - * - `enter` defaults to `0` - * - `exit` defaults to `0` - * - * @type {number | { enter?: number, exit?: number, appear?: number }} - */ - timeout: function timeout(props) { - var pt = timeoutsShape; - if (!props.addEndListener) pt = pt.isRequired; - - for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - args[_key - 1] = arguments[_key]; - } - - return pt.apply(void 0, [props].concat(args)); - }, - - /** - * Add a custom transition end trigger. Called with the transitioning - * DOM node and a `done` callback. Allows for more fine grained transition end - * logic. **Note:** Timeouts are still used as a fallback if provided. - * - * ```jsx - * addEndListener={(node, done) => { - * // use the css transitionend event to mark the finish of a transition - * node.addEventListener('transitionend', done, false); - * }} - * ``` - */ - addEndListener: PropTypes.func, - - /** - * Callback fired before the "entering" status is applied. An extra parameter - * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount - * - * @type Function(node: HtmlElement, isAppearing: bool) -> void - */ - onEnter: PropTypes.func, - - /** - * Callback fired after the "entering" status is applied. An extra parameter - * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount - * - * @type Function(node: HtmlElement, isAppearing: bool) - */ - onEntering: PropTypes.func, - - /** - * Callback fired after the "entered" status is applied. An extra parameter - * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount - * - * @type Function(node: HtmlElement, isAppearing: bool) -> void - */ - onEntered: PropTypes.func, - - /** - * Callback fired before the "exiting" status is applied. - * - * @type Function(node: HtmlElement) -> void - */ - onExit: PropTypes.func, - - /** - * Callback fired after the "exiting" status is applied. - * - * @type Function(node: HtmlElement) -> void - */ - onExiting: PropTypes.func, - - /** - * Callback fired after the "exited" status is applied. - * - * @type Function(node: HtmlElement) -> void - */ - onExited: PropTypes.func // Name the function so it is clearer in the documentation - -} : {}; - -function noop() {} - -Transition.defaultProps = { - in: false, - mountOnEnter: false, - unmountOnExit: false, - appear: false, - enter: true, - exit: true, - onEnter: noop, - onEntering: noop, - onEntered: noop, - onExit: noop, - onExiting: noop, - onExited: noop -}; -Transition.UNMOUNTED = 0; -Transition.EXITED = 1; -Transition.ENTERING = 2; -Transition.ENTERED = 3; -Transition.EXITING = 4; -/* harmony default export */ __webpack_exports__["a"] = (Transition); - -/***/ }), -/* 20 */ -/***/ (function(module, exports) { - -module.exports = __WEBPACK_EXTERNAL_MODULE_20__; - -/***/ }), -/* 21 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = ({ - disabled: false -}); - -/***/ }), -/* 22 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* unused harmony export timeoutsShape */ -/* unused harmony export classNamesShape */ -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_prop_types__ = __webpack_require__(1); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_prop_types__); - -var timeoutsShape = false ? PropTypes.oneOfType([PropTypes.number, PropTypes.shape({ - enter: PropTypes.number, - exit: PropTypes.number, - appear: PropTypes.number -}).isRequired]) : null; -var classNamesShape = false ? PropTypes.oneOfType([PropTypes.string, PropTypes.shape({ - enter: PropTypes.string, - exit: PropTypes.string, - active: PropTypes.string -}), PropTypes.shape({ - enter: PropTypes.string, - enterDone: PropTypes.string, - enterActive: PropTypes.string, - exit: PropTypes.string, - exitDone: PropTypes.string, - exitActive: PropTypes.string -})]) : null; - -/***/ }), -/* 23 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react__ = __webpack_require__(0); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_react__); - -/* harmony default export */ __webpack_exports__["a"] = (__WEBPACK_IMPORTED_MODULE_0_react___default.a.createContext(null)); - -/***/ }), -/* 24 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__babel_runtime_helpers_esm_objectWithoutPropertiesLoose__ = __webpack_require__(7); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__babel_runtime_helpers_esm_extends__ = __webpack_require__(18); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__babel_runtime_helpers_esm_inheritsLoose__ = __webpack_require__(8); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__babel_runtime_helpers_esm_assertThisInitialized__ = __webpack_require__(65); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_prop_types__ = __webpack_require__(1); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_prop_types__); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_react__ = __webpack_require__(0); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_react__); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__TransitionGroupContext__ = __webpack_require__(23); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__utils_ChildMapping__ = __webpack_require__(66); - - - - - - - - - -var values = Object.values || function (obj) { - return Object.keys(obj).map(function (k) { - return obj[k]; - }); -}; - -var defaultProps = { - component: 'div', - childFactory: function childFactory(child) { - return child; - } - /** - * The `` component manages a set of transition components - * (`` and ``) in a list. Like with the transition - * components, `` is a state machine for managing the mounting - * and unmounting of components over time. - * - * Consider the example below. As items are removed or added to the TodoList the - * `in` prop is toggled automatically by the ``. - * - * Note that `` does not define any animation behavior! - * Exactly _how_ a list item animates is up to the individual transition - * component. This means you can mix and match animations across different list - * items. - */ - -}; - -var TransitionGroup = -/*#__PURE__*/ -function (_React$Component) { - Object(__WEBPACK_IMPORTED_MODULE_2__babel_runtime_helpers_esm_inheritsLoose__["a" /* default */])(TransitionGroup, _React$Component); - - function TransitionGroup(props, context) { - var _this; - - _this = _React$Component.call(this, props, context) || this; - - var handleExited = _this.handleExited.bind(Object(__WEBPACK_IMPORTED_MODULE_3__babel_runtime_helpers_esm_assertThisInitialized__["a" /* default */])(Object(__WEBPACK_IMPORTED_MODULE_3__babel_runtime_helpers_esm_assertThisInitialized__["a" /* default */])(_this))); // Initial children should all be entering, dependent on appear - - - _this.state = { - contextValue: { - isMounting: true - }, - handleExited: handleExited, - firstRender: true - }; - return _this; - } - - var _proto = TransitionGroup.prototype; - - _proto.componentDidMount = function componentDidMount() { - this.mounted = true; - this.setState({ - contextValue: { - isMounting: false - } - }); - }; - - _proto.componentWillUnmount = function componentWillUnmount() { - this.mounted = false; - }; - - TransitionGroup.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, _ref) { - var prevChildMapping = _ref.children, - handleExited = _ref.handleExited, - firstRender = _ref.firstRender; - return { - children: firstRender ? Object(__WEBPACK_IMPORTED_MODULE_7__utils_ChildMapping__["b" /* getInitialChildMapping */])(nextProps, handleExited) : Object(__WEBPACK_IMPORTED_MODULE_7__utils_ChildMapping__["c" /* getNextChildMapping */])(nextProps, prevChildMapping, handleExited), - firstRender: false - }; - }; - - _proto.handleExited = function handleExited(child, node) { - var currentChildMapping = Object(__WEBPACK_IMPORTED_MODULE_7__utils_ChildMapping__["a" /* getChildMapping */])(this.props.children); - if (child.key in currentChildMapping) return; - - if (child.props.onExited) { - child.props.onExited(node); - } - - if (this.mounted) { - this.setState(function (state) { - var children = Object(__WEBPACK_IMPORTED_MODULE_1__babel_runtime_helpers_esm_extends__["a" /* default */])({}, state.children); - - delete children[child.key]; - return { - children: children - }; - }); - } - }; - - _proto.render = function render() { - var _this$props = this.props, - Component = _this$props.component, - childFactory = _this$props.childFactory, - props = Object(__WEBPACK_IMPORTED_MODULE_0__babel_runtime_helpers_esm_objectWithoutPropertiesLoose__["a" /* default */])(_this$props, ["component", "childFactory"]); - - var contextValue = this.state.contextValue; - var children = values(this.state.children).map(childFactory); - delete props.appear; - delete props.enter; - delete props.exit; - - if (Component === null) { - return __WEBPACK_IMPORTED_MODULE_5_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_6__TransitionGroupContext__["a" /* default */].Provider, { - value: contextValue - }, children); - } - - return __WEBPACK_IMPORTED_MODULE_5_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_6__TransitionGroupContext__["a" /* default */].Provider, { - value: contextValue - }, __WEBPACK_IMPORTED_MODULE_5_react___default.a.createElement(Component, props, children)); - }; - - return TransitionGroup; -}(__WEBPACK_IMPORTED_MODULE_5_react___default.a.Component); - -TransitionGroup.propTypes = false ? { - /** - * `` renders a `
` by default. You can change this - * behavior by providing a `component` prop. - * If you use React v16+ and would like to avoid a wrapping `
` element - * you can pass in `component={null}`. This is useful if the wrapping div - * borks your css styles. - */ - component: PropTypes.any, - - /** - * A set of `` components, that are toggled `in` and out as they - * leave. the `` will inject specific transition props, so - * remember to spread them through if you are wrapping the `` as - * with our `` example. - * - * While this component is meant for multiple `Transition` or `CSSTransition` - * children, sometimes you may want to have a single transition child with - * content that you want to be transitioned out and in when you change it - * (e.g. routes, images etc.) In that case you can change the `key` prop of - * the transition child as you change its content, this will cause - * `TransitionGroup` to transition the child out and back in. - */ - children: PropTypes.node, - - /** - * A convenience prop that enables or disables appear animations - * for all children. Note that specifying this will override any defaults set - * on individual children Transitions. - */ - appear: PropTypes.bool, - - /** - * A convenience prop that enables or disables enter animations - * for all children. Note that specifying this will override any defaults set - * on individual children Transitions. - */ - enter: PropTypes.bool, - - /** - * A convenience prop that enables or disables exit animations - * for all children. Note that specifying this will override any defaults set - * on individual children Transitions. - */ - exit: PropTypes.bool, - - /** - * You may need to apply reactive updates to a child as it is exiting. - * This is generally done by using `cloneElement` however in the case of an exiting - * child the element has already been removed and not accessible to the consumer. - * - * If you do need to update a child as it leaves you can provide a `childFactory` - * to wrap every child, even the ones that are leaving. - * - * @type Function(child: ReactElement) -> ReactElement - */ - childFactory: PropTypes.func -} : {}; -TransitionGroup.defaultProps = defaultProps; -/* harmony default export */ __webpack_exports__["a"] = (TransitionGroup); - -/***/ }), -/* 25 */ -/***/ (function(module, exports) { - -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -function EventEmitter() { - this._events = this._events || {}; - this._maxListeners = this._maxListeners || undefined; -} -module.exports = EventEmitter; - -// Backwards-compat with node 0.10.x -EventEmitter.EventEmitter = EventEmitter; - -EventEmitter.prototype._events = undefined; -EventEmitter.prototype._maxListeners = undefined; - -// By default EventEmitters will print a warning if more than 10 listeners are -// added to it. This is a useful default which helps finding memory leaks. -EventEmitter.defaultMaxListeners = 10; - -// Obviously not all Emitters should be limited to 10. This function allows -// that to be increased. Set to zero for unlimited. -EventEmitter.prototype.setMaxListeners = function(n) { - if (!isNumber(n) || n < 0 || isNaN(n)) - throw TypeError('n must be a positive number'); - this._maxListeners = n; - return this; -}; - -EventEmitter.prototype.emit = function(type) { - var er, handler, len, args, i, listeners; - - if (!this._events) - this._events = {}; - - // If there is no 'error' event listener then throw. - if (type === 'error') { - if (!this._events.error || - (isObject(this._events.error) && !this._events.error.length)) { - er = arguments[1]; - if (er instanceof Error) { - throw er; // Unhandled 'error' event - } else { - // At least give some kind of context to the user - var err = new Error('Uncaught, unspecified "error" event. (' + er + ')'); - err.context = er; - throw err; - } - } - } - - handler = this._events[type]; - - if (isUndefined(handler)) - return false; - - if (isFunction(handler)) { - switch (arguments.length) { - // fast cases - case 1: - handler.call(this); - break; - case 2: - handler.call(this, arguments[1]); - break; - case 3: - handler.call(this, arguments[1], arguments[2]); - break; - // slower - default: - args = Array.prototype.slice.call(arguments, 1); - handler.apply(this, args); - } - } else if (isObject(handler)) { - args = Array.prototype.slice.call(arguments, 1); - listeners = handler.slice(); - len = listeners.length; - for (i = 0; i < len; i++) - listeners[i].apply(this, args); - } - - return true; -}; - -EventEmitter.prototype.addListener = function(type, listener) { - var m; - - if (!isFunction(listener)) - throw TypeError('listener must be a function'); - - if (!this._events) - this._events = {}; - - // To avoid recursion in the case that type === "newListener"! Before - // adding it to the listeners, first emit "newListener". - if (this._events.newListener) - this.emit('newListener', type, - isFunction(listener.listener) ? - listener.listener : listener); - - if (!this._events[type]) - // Optimize the case of one listener. Don't need the extra array object. - this._events[type] = listener; - else if (isObject(this._events[type])) - // If we've already got an array, just append. - this._events[type].push(listener); - else - // Adding the second element, need to change to array. - this._events[type] = [this._events[type], listener]; - - // Check for listener leak - if (isObject(this._events[type]) && !this._events[type].warned) { - if (!isUndefined(this._maxListeners)) { - m = this._maxListeners; - } else { - m = EventEmitter.defaultMaxListeners; - } - - if (m && m > 0 && this._events[type].length > m) { - this._events[type].warned = true; - console.error('(node) warning: possible EventEmitter memory ' + - 'leak detected. %d listeners added. ' + - 'Use emitter.setMaxListeners() to increase limit.', - this._events[type].length); - if (typeof console.trace === 'function') { - // not supported in IE 10 - console.trace(); - } - } - } - - return this; -}; - -EventEmitter.prototype.on = EventEmitter.prototype.addListener; - -EventEmitter.prototype.once = function(type, listener) { - if (!isFunction(listener)) - throw TypeError('listener must be a function'); - - var fired = false; - - function g() { - this.removeListener(type, g); - - if (!fired) { - fired = true; - listener.apply(this, arguments); - } - } - - g.listener = listener; - this.on(type, g); - - return this; -}; - -// emits a 'removeListener' event iff the listener was removed -EventEmitter.prototype.removeListener = function(type, listener) { - var list, position, length, i; - - if (!isFunction(listener)) - throw TypeError('listener must be a function'); - - if (!this._events || !this._events[type]) - return this; - - list = this._events[type]; - length = list.length; - position = -1; - - if (list === listener || - (isFunction(list.listener) && list.listener === listener)) { - delete this._events[type]; - if (this._events.removeListener) - this.emit('removeListener', type, listener); - - } else if (isObject(list)) { - for (i = length; i-- > 0;) { - if (list[i] === listener || - (list[i].listener && list[i].listener === listener)) { - position = i; - break; - } - } - - if (position < 0) - return this; - - if (list.length === 1) { - list.length = 0; - delete this._events[type]; - } else { - list.splice(position, 1); - } - - if (this._events.removeListener) - this.emit('removeListener', type, listener); - } - - return this; -}; - -EventEmitter.prototype.removeAllListeners = function(type) { - var key, listeners; - - if (!this._events) - return this; - - // not listening for removeListener, no need to emit - if (!this._events.removeListener) { - if (arguments.length === 0) - this._events = {}; - else if (this._events[type]) - delete this._events[type]; - return this; - } - - // emit removeListener for all listeners on all events - if (arguments.length === 0) { - for (key in this._events) { - if (key === 'removeListener') continue; - this.removeAllListeners(key); - } - this.removeAllListeners('removeListener'); - this._events = {}; - return this; - } - - listeners = this._events[type]; - - if (isFunction(listeners)) { - this.removeListener(type, listeners); - } else if (listeners) { - // LIFO order - while (listeners.length) - this.removeListener(type, listeners[listeners.length - 1]); - } - delete this._events[type]; - - return this; -}; - -EventEmitter.prototype.listeners = function(type) { - var ret; - if (!this._events || !this._events[type]) - ret = []; - else if (isFunction(this._events[type])) - ret = [this._events[type]]; - else - ret = this._events[type].slice(); - return ret; -}; - -EventEmitter.prototype.listenerCount = function(type) { - if (this._events) { - var evlistener = this._events[type]; - - if (isFunction(evlistener)) - return 1; - else if (evlistener) - return evlistener.length; - } - return 0; -}; - -EventEmitter.listenerCount = function(emitter, type) { - return emitter.listenerCount(type); -}; - -function isFunction(arg) { - return typeof arg === 'function'; -} - -function isNumber(arg) { - return typeof arg === 'number'; -} - -function isObject(arg) { - return typeof arg === 'object' && arg !== null; -} - -function isUndefined(arg) { - return arg === void 0; -} - - -/***/ }), -/* 26 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _bootstrapTable = __webpack_require__(27); - -var _bootstrapTable2 = _interopRequireDefault(_bootstrapTable); - -var _contexts = __webpack_require__(71); - -var _contexts2 = _interopRequireDefault(_contexts); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -exports.default = (0, _contexts2.default)(_bootstrapTable2.default); - -/***/ }), -/* 27 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = __webpack_require__(1); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _classnames = __webpack_require__(4); - -var _classnames2 = _interopRequireDefault(_classnames); - -var _header = __webpack_require__(30); - -var _header2 = _interopRequireDefault(_header); - -var _filters = __webpack_require__(45); - -var _filters2 = _interopRequireDefault(_filters); - -var _caption = __webpack_require__(47); - -var _caption2 = _interopRequireDefault(_caption); - -var _body = __webpack_require__(48); - -var _body2 = _interopRequireDefault(_body); - -var _footer = __webpack_require__(67); - -var _footer2 = _interopRequireDefault(_footer); - -var _propsResolver = __webpack_require__(69); - -var _propsResolver2 = _interopRequireDefault(_propsResolver); - -var _const = __webpack_require__(3); - -var _const2 = _interopRequireDefault(_const); - -var _utils = __webpack_require__(2); - -var _utils2 = _interopRequireDefault(_utils); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint camelcase: 0 */ -/* eslint arrow-body-style: 0 */ - -var BootstrapTable = function (_PropsBaseResolver) { - _inherits(BootstrapTable, _PropsBaseResolver); - - function BootstrapTable(props) { - _classCallCheck(this, BootstrapTable); - - var _this = _possibleConstructorReturn(this, (BootstrapTable.__proto__ || Object.getPrototypeOf(BootstrapTable)).call(this, props)); - - _this.getData = function () { - return _this.visibleRows(); - }; - - _this.validateProps(); - return _this; - } - - _createClass(BootstrapTable, [{ - key: 'UNSAFE_componentWillReceiveProps', - value: function UNSAFE_componentWillReceiveProps(nextProps) { - if (nextProps.onDataSizeChange && !nextProps.pagination) { - if (nextProps.data.length !== this.props.data.length) { - nextProps.onDataSizeChange({ dataSize: nextProps.data.length }); - } - } - } - - // Exposed APIs - - }, { - key: 'render', - value: function render() { - var _props = this.props, - loading = _props.loading, - overlay = _props.overlay; - - if (overlay) { - var LoadingOverlay = overlay(loading); - return _react2.default.createElement( - LoadingOverlay, - null, - this.renderTable() - ); - } - return this.renderTable(); - } - }, { - key: 'renderTable', - value: function renderTable() { - var _props2 = this.props, - columns = _props2.columns, - keyField = _props2.keyField, - tabIndexCell = _props2.tabIndexCell, - id = _props2.id, - classes = _props2.classes, - bootstrap4 = _props2.bootstrap4, - striped = _props2.striped, - hover = _props2.hover, - bordered = _props2.bordered, - condensed = _props2.condensed, - noDataIndication = _props2.noDataIndication, - caption = _props2.caption, - rowStyle = _props2.rowStyle, - rowClasses = _props2.rowClasses, - wrapperClasses = _props2.wrapperClasses, - rowEvents = _props2.rowEvents, - selectRow = _props2.selectRow, - expandRow = _props2.expandRow, - cellEdit = _props2.cellEdit, - filterPosition = _props2.filterPosition; - - - var tableWrapperClass = (0, _classnames2.default)('react-bootstrap-table', wrapperClasses); - - var tableClass = (0, _classnames2.default)('table', _defineProperty({ - 'table-striped': striped, - 'table-hover': hover, - 'table-bordered': bordered - }, bootstrap4 ? 'table-sm' : 'table-condensed', condensed), classes); - - var hasFilters = columns.some(function (col) { - return col.filter || col.filterRenderer; - }); - - var hasFooter = _utils2.default.filter(columns, function (col) { - return _utils2.default.has(col, 'footer'); - }).length > 0; - - var tableCaption = caption && _react2.default.createElement( - _caption2.default, - { bootstrap4: bootstrap4 }, - caption - ); - - return _react2.default.createElement( - 'div', - { className: tableWrapperClass }, - _react2.default.createElement( - 'table', - { id: id, className: tableClass }, - tableCaption, - _react2.default.createElement(_header2.default, { - columns: columns, - className: this.props.headerClasses, - wrapperClasses: this.props.headerWrapperClasses, - sortField: this.props.sortField, - sortOrder: this.props.sortOrder, - onSort: this.props.onSort, - globalSortCaret: this.props.sort && this.props.sort.sortCaret, - onFilter: this.props.onFilter, - currFilters: this.props.currFilters, - onExternalFilter: this.props.onExternalFilter, - selectRow: selectRow, - expandRow: expandRow, - filterPosition: filterPosition - }), - hasFilters && filterPosition !== _const2.default.FILTERS_POSITION_INLINE && _react2.default.createElement(_filters2.default, { - columns: columns, - className: this.props.filtersClasses, - onSort: this.props.onSort, - onFilter: this.props.onFilter, - currFilters: this.props.currFilters, - filterPosition: this.props.filterPosition, - onExternalFilter: this.props.onExternalFilter, - selectRow: selectRow, - expandRow: expandRow - }), - _react2.default.createElement(_body2.default, { - className: this.props.bodyClasses, - data: this.getData(), - keyField: keyField, - tabIndexCell: tabIndexCell, - columns: columns, - isEmpty: this.isEmpty(), - visibleColumnSize: this.visibleColumnSize(), - noDataIndication: noDataIndication, - cellEdit: cellEdit, - selectRow: selectRow, - expandRow: expandRow, - rowStyle: rowStyle, - rowClasses: rowClasses, - rowEvents: rowEvents - }), - hasFooter && _react2.default.createElement(_footer2.default, { - data: this.getData(), - columns: columns, - selectRow: selectRow, - expandRow: expandRow, - className: this.props.footerClasses - }) - ) - ); - } - }]); - - return BootstrapTable; -}((0, _propsResolver2.default)(_react.Component)); - -BootstrapTable.propTypes = { - keyField: _propTypes2.default.string.isRequired, - data: _propTypes2.default.array.isRequired, - columns: _propTypes2.default.array.isRequired, - bootstrap4: _propTypes2.default.bool, - remote: _propTypes2.default.oneOfType([_propTypes2.default.bool, _propTypes2.default.shape({ - pagination: _propTypes2.default.bool - })]), - noDataIndication: _propTypes2.default.oneOfType([_propTypes2.default.node, _propTypes2.default.func]), - striped: _propTypes2.default.bool, - bordered: _propTypes2.default.bool, - hover: _propTypes2.default.bool, - tabIndexCell: _propTypes2.default.bool, - id: _propTypes2.default.string, - classes: _propTypes2.default.string, - headerClasses: _propTypes2.default.string, - bodyClasses: _propTypes2.default.string, - wrapperClasses: _propTypes2.default.string, - headerWrapperClasses: _propTypes2.default.string, - condensed: _propTypes2.default.bool, - caption: _propTypes2.default.oneOfType([_propTypes2.default.node, _propTypes2.default.string]), - pagination: _propTypes2.default.object, - filter: _propTypes2.default.object, - cellEdit: _propTypes2.default.object, - selectRow: _propTypes2.default.shape({ - mode: _propTypes2.default.oneOf([_const2.default.ROW_SELECT_SINGLE, _const2.default.ROW_SELECT_MULTIPLE, _const2.default.ROW_SELECT_DISABLED]).isRequired, - clickToSelect: _propTypes2.default.bool, - clickToExpand: _propTypes2.default.bool, - clickToEdit: _propTypes2.default.bool, - hideSelectAll: _propTypes2.default.bool, - onSelect: _propTypes2.default.func, - onSelectAll: _propTypes2.default.func, - style: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.func]), - classes: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.func]), - nonSelectable: _propTypes2.default.array, - nonSelectableStyle: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.func]), - nonSelectableClasses: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.func]), - bgColor: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.func]), - hideSelectColumn: _propTypes2.default.bool, - selectionRenderer: _propTypes2.default.func, - selectionHeaderRenderer: _propTypes2.default.func, - headerColumnStyle: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.func]), - selectColumnStyle: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.func]), - selectColumnPosition: _propTypes2.default.oneOf([_const2.default.INDICATOR_POSITION_LEFT, _const2.default.INDICATOR_POSITION_RIGHT]) - }), - expandRow: _propTypes2.default.shape({ - renderer: _propTypes2.default.func, - expanded: _propTypes2.default.array, - onExpand: _propTypes2.default.func, - onExpandAll: _propTypes2.default.func, - nonExpandable: _propTypes2.default.array, - showExpandColumn: _propTypes2.default.bool, - onlyOneExpanding: _propTypes2.default.bool, - expandByColumnOnly: _propTypes2.default.bool, - expandColumnRenderer: _propTypes2.default.func, - expandHeaderColumnRenderer: _propTypes2.default.func, - expandColumnPosition: _propTypes2.default.oneOf([_const2.default.INDICATOR_POSITION_LEFT, _const2.default.INDICATOR_POSITION_RIGHT]), - className: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.func]), - parentClassName: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.func]) - }), - rowStyle: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.func]), - rowEvents: _propTypes2.default.object, - rowClasses: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.func]), - filtersClasses: _propTypes2.default.string, - filterPosition: _propTypes2.default.oneOf([_const2.default.FILTERS_POSITION_TOP, _const2.default.FILTERS_POSITION_INLINE, _const2.default.FILTERS_POSITION_BOTTOM]), - footerClasses: _propTypes2.default.string, - defaultSorted: _propTypes2.default.arrayOf(_propTypes2.default.shape({ - dataField: _propTypes2.default.string.isRequired, - order: _propTypes2.default.oneOf([_const2.default.SORT_DESC, _const2.default.SORT_ASC]).isRequired - })), - sort: _propTypes2.default.shape({ - dataField: _propTypes2.default.string, - order: _propTypes2.default.oneOf([_const2.default.SORT_DESC, _const2.default.SORT_ASC]), - sortFunc: _propTypes2.default.func, - sortCaret: _propTypes2.default.func - }), - defaultSortDirection: _propTypes2.default.oneOf([_const2.default.SORT_DESC, _const2.default.SORT_ASC]), - overlay: _propTypes2.default.func, - onTableChange: _propTypes2.default.func, - onSort: _propTypes2.default.func, - onFilter: _propTypes2.default.func, - onExternalFilter: _propTypes2.default.func, - onDataSizeChange: _propTypes2.default.func, - // Inject from toolkit - search: _propTypes2.default.shape({ - searchText: _propTypes2.default.string, - searchContext: _propTypes2.default.func - }), - setDependencyModules: _propTypes2.default.func -}; - -BootstrapTable.defaultProps = { - bootstrap4: false, - remote: false, - striped: false, - bordered: true, - hover: false, - condensed: false, - noDataIndication: null, - selectRow: { - mode: _const2.default.ROW_SELECT_DISABLED, - selected: [], - hideSelectColumn: true - }, - expandRow: { - renderer: undefined, - expanded: [], - nonExpandable: [] - }, - cellEdit: { - mode: null, - nonEditableRows: [] - }, - filterPosition: _const2.default.FILTERS_POSITION_INLINE -}; - -exports.default = BootstrapTable; - -/***/ }), -/* 28 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (c) 2013-present, Facebook, Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - - - -var ReactPropTypesSecret = __webpack_require__(29); - -function emptyFunction() {} -function emptyFunctionWithReset() {} -emptyFunctionWithReset.resetWarningCache = emptyFunction; - -module.exports = function() { - function shim(props, propName, componentName, location, propFullName, secret) { - if (secret === ReactPropTypesSecret) { - // It is still safe when called from React. - return; - } - var err = new Error( - 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' + - 'Use PropTypes.checkPropTypes() to call them. ' + - 'Read more at http://fb.me/use-check-prop-types' - ); - err.name = 'Invariant Violation'; - throw err; - }; - shim.isRequired = shim; - function getShim() { - return shim; - }; - // Important! - // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`. - var ReactPropTypes = { - array: shim, - bool: shim, - func: shim, - number: shim, - object: shim, - string: shim, - symbol: shim, - - any: shim, - arrayOf: getShim, - element: shim, - elementType: shim, - instanceOf: getShim, - node: shim, - objectOf: getShim, - oneOf: getShim, - oneOfType: getShim, - shape: getShim, - exact: getShim, - - checkPropTypes: emptyFunctionWithReset, - resetWarningCache: emptyFunction - }; - - ReactPropTypes.PropTypes = ReactPropTypes; - - return ReactPropTypes; -}; - - -/***/ }), -/* 29 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (c) 2013-present, Facebook, Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - - - -var ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED'; - -module.exports = ReactPropTypesSecret; - - -/***/ }), -/* 30 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = __webpack_require__(1); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _headerCell = __webpack_require__(31); - -var _headerCell2 = _interopRequireDefault(_headerCell); - -var _selectionHeaderCell = __webpack_require__(37); - -var _selectionHeaderCell2 = _interopRequireDefault(_selectionHeaderCell); - -var _expandHeaderCell = __webpack_require__(38); - -var _expandHeaderCell2 = _interopRequireDefault(_expandHeaderCell); - -var _selectionHeaderCellConsumer = __webpack_require__(39); - -var _selectionHeaderCellConsumer2 = _interopRequireDefault(_selectionHeaderCellConsumer); - -var _expandHeaderCellConsumer = __webpack_require__(44); - -var _expandHeaderCellConsumer2 = _interopRequireDefault(_expandHeaderCellConsumer); - -var _const = __webpack_require__(3); - -var _const2 = _interopRequireDefault(_const); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/* eslint react/require-default-props: 0 */ -var Header = function Header(props) { - var className = props.className, - columns = props.columns, - onSort = props.onSort, - onFilter = props.onFilter, - sortField = props.sortField, - sortOrder = props.sortOrder, - selectRow = props.selectRow, - expandRow = props.expandRow, - currFilters = props.currFilters, - onExternalFilter = props.onExternalFilter, - filterPosition = props.filterPosition, - globalSortCaret = props.globalSortCaret, - wrapperClasses = props.wrapperClasses; - - - var SelectionHeaderCellComp = function SelectionHeaderCellComp() { - return null; - }; - var ExpansionHeaderCellComp = function ExpansionHeaderCellComp() { - return null; - }; - - if (expandRow.showExpandColumn) { - ExpansionHeaderCellComp = (0, _expandHeaderCellConsumer2.default)(_expandHeaderCell2.default); - } - - if (selectRow) { - SelectionHeaderCellComp = (0, _selectionHeaderCellConsumer2.default)(_selectionHeaderCell2.default); - } - - var isRenderFunctionColumnInLeft = function isRenderFunctionColumnInLeft() { - var position = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _const2.default.INDICATOR_POSITION_LEFT; - return position === _const2.default.INDICATOR_POSITION_LEFT; - }; - - var childrens = [columns.map(function (column, i) { - var currSort = column.dataField === sortField; - var isLastSorting = column.dataField === sortField; - - return _react2.default.createElement(_headerCell2.default, { - index: i, - key: column.dataField, - column: column, - onSort: onSort, - sorting: currSort, - sortOrder: sortOrder, - globalSortCaret: globalSortCaret, - isLastSorting: isLastSorting, - onFilter: onFilter, - currFilters: currFilters, - onExternalFilter: onExternalFilter, - filterPosition: filterPosition - }); - })]; - - if (!selectRow.hideSelectColumn) { - if (isRenderFunctionColumnInLeft(selectRow.selectColumnPosition)) { - childrens.unshift(_react2.default.createElement(SelectionHeaderCellComp, { key: 'selection' })); - } else { - childrens.push(_react2.default.createElement(SelectionHeaderCellComp, { key: 'selection' })); - } - } - - if (expandRow.showExpandColumn) { - if (isRenderFunctionColumnInLeft(expandRow.expandColumnPosition)) { - childrens.unshift(_react2.default.createElement(ExpansionHeaderCellComp, { key: 'expansion' })); - } else { - childrens.push(_react2.default.createElement(ExpansionHeaderCellComp, { key: 'expansion' })); - } - } - - return _react2.default.createElement( - 'thead', - { className: wrapperClasses }, - _react2.default.createElement( - 'tr', - { className: className }, - childrens - ) - ); -}; - -Header.propTypes = { - columns: _propTypes2.default.array.isRequired, - onSort: _propTypes2.default.func, - onFilter: _propTypes2.default.func, - sortField: _propTypes2.default.string, - sortOrder: _propTypes2.default.string, - selectRow: _propTypes2.default.object, - currFilters: _propTypes2.default.object, - onExternalFilter: _propTypes2.default.func, - globalSortCaret: _propTypes2.default.func, - className: _propTypes2.default.string, - wrapperClasses: _propTypes2.default.string, - expandRow: _propTypes2.default.object, - filterPosition: _propTypes2.default.oneOf([_const2.default.FILTERS_POSITION_TOP, _const2.default.FILTERS_POSITION_INLINE, _const2.default.FILTERS_POSITION_BOTTOM]) -}; - -exports.default = Header; - -/***/ }), -/* 31 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _classnames = __webpack_require__(4); - -var _classnames2 = _interopRequireDefault(_classnames); - -var _propTypes = __webpack_require__(1); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _const = __webpack_require__(3); - -var _const2 = _interopRequireDefault(_const); - -var _symbol = __webpack_require__(32); - -var _symbol2 = _interopRequireDefault(_symbol); - -var _caret = __webpack_require__(33); - -var _caret2 = _interopRequireDefault(_caret); - -var _utils = __webpack_require__(2); - -var _utils2 = _interopRequireDefault(_utils); - -var _cellEventDelegater = __webpack_require__(9); - -var _cellEventDelegater2 = _interopRequireDefault(_cellEventDelegater); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint react/require-default-props: 0 */ - - -var HeaderCell = function (_eventDelegater) { - _inherits(HeaderCell, _eventDelegater); - - function HeaderCell() { - _classCallCheck(this, HeaderCell); - - return _possibleConstructorReturn(this, (HeaderCell.__proto__ || Object.getPrototypeOf(HeaderCell)).apply(this, arguments)); - } - - _createClass(HeaderCell, [{ - key: 'render', - value: function render() { - var _props = this.props, - column = _props.column, - index = _props.index, - onSort = _props.onSort, - sorting = _props.sorting, - sortOrder = _props.sortOrder, - isLastSorting = _props.isLastSorting, - onFilter = _props.onFilter, - currFilters = _props.currFilters, - filterPosition = _props.filterPosition, - onExternalFilter = _props.onExternalFilter, - globalSortCaret = _props.globalSortCaret; - var text = column.text, - sort = column.sort, - sortCaret = column.sortCaret, - filter = column.filter, - filterRenderer = column.filterRenderer, - headerTitle = column.headerTitle, - headerAlign = column.headerAlign, - headerFormatter = column.headerFormatter, - headerEvents = column.headerEvents, - headerClasses = column.headerClasses, - headerStyle = column.headerStyle, - headerAttrs = column.headerAttrs, - headerSortingClasses = column.headerSortingClasses, - headerSortingStyle = column.headerSortingStyle; - - - var sortCaretfunc = sortCaret || globalSortCaret; - - var delegateEvents = this.delegate(headerEvents); - - var customAttrs = _utils2.default.isFunction(headerAttrs) ? headerAttrs(column, index) : headerAttrs || {}; - - var cellAttrs = _extends({}, customAttrs, delegateEvents, { - tabIndex: _utils2.default.isDefined(customAttrs.tabIndex) ? customAttrs.tabIndex : 0 - }); - - var sortSymbol = void 0; - var filterElm = void 0; - var cellStyle = {}; - var cellClasses = _utils2.default.isFunction(headerClasses) ? headerClasses(column, index) : headerClasses; - - if (headerStyle) { - cellStyle = _utils2.default.isFunction(headerStyle) ? headerStyle(column, index) : headerStyle; - cellStyle = cellStyle ? _extends({}, cellStyle) : cellStyle; - } - - if (headerTitle) { - cellAttrs.title = _utils2.default.isFunction(headerTitle) ? headerTitle(column, index) : text; - } - - if (headerAlign) { - cellStyle.textAlign = _utils2.default.isFunction(headerAlign) ? headerAlign(column, index) : headerAlign; - } - - if (sort) { - var customClick = cellAttrs.onClick; - cellAttrs['aria-label'] = sorting ? text + ' sort ' + sortOrder : text + ' sortable'; - cellAttrs.onKeyUp = function (e) { - if (e.key === 'Enter') { - onSort(column); - if (_utils2.default.isFunction(customClick)) customClick(e); - } - }; - cellAttrs.onClick = function (e) { - onSort(column); - if (_utils2.default.isFunction(customClick)) customClick(e); - }; - cellAttrs.className = (0, _classnames2.default)(cellAttrs.className, 'sortable'); - - if (sorting) { - sortSymbol = sortCaretfunc ? sortCaretfunc(sortOrder, column) : _react2.default.createElement(_caret2.default, { order: sortOrder }); - - // append customized classes or style if table was sorting based on the current column. - cellClasses = (0, _classnames2.default)(cellClasses, _utils2.default.isFunction(headerSortingClasses) ? headerSortingClasses(column, sortOrder, isLastSorting, index) : headerSortingClasses); - - cellStyle = _extends({}, cellStyle, _utils2.default.isFunction(headerSortingStyle) ? headerSortingStyle(column, sortOrder, isLastSorting, index) : headerSortingStyle); - } else { - sortSymbol = sortCaretfunc ? sortCaretfunc(undefined, column) : _react2.default.createElement(_symbol2.default, null); - } - } - - if (cellClasses) cellAttrs.className = (0, _classnames2.default)(cellAttrs.className, cellClasses); - if (!_utils2.default.isEmptyObject(cellStyle)) cellAttrs.style = cellStyle; - - if (filterPosition === _const2.default.FILTERS_POSITION_INLINE) { - if (filterRenderer) { - var onCustomFilter = onExternalFilter(column, filter.props.type); - filterElm = filterRenderer(onCustomFilter, column); - } else if (filter) { - filterElm = _react2.default.createElement(filter.Filter, _extends({}, filter.props, { - filterState: currFilters[column.dataField], - onFilter: onFilter, - column: column - })); - } - } - - var children = headerFormatter ? headerFormatter(column, index, { sortElement: sortSymbol, filterElement: filterElm }) : text; - - if (headerFormatter) { - return _react2.default.createElement('th', cellAttrs, children); - } - - return _react2.default.createElement('th', cellAttrs, children, sortSymbol, filterElm); - } - }]); - - return HeaderCell; -}((0, _cellEventDelegater2.default)(_react2.default.Component)); - -HeaderCell.propTypes = { - column: _propTypes2.default.shape({ - dataField: _propTypes2.default.string.isRequired, - text: _propTypes2.default.string.isRequired, - type: _propTypes2.default.oneOf([_const2.default.TYPE_STRING, _const2.default.TYPE_NUMBER, _const2.default.TYPE_BOOLEAN, _const2.default.TYPE_DATE]), - isDummyField: _propTypes2.default.bool, - hidden: _propTypes2.default.bool, - headerFormatter: _propTypes2.default.func, - formatter: _propTypes2.default.func, - formatExtraData: _propTypes2.default.any, - headerClasses: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.func]), - classes: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.func]), - headerStyle: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.func]), - style: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.func]), - headerTitle: _propTypes2.default.oneOfType([_propTypes2.default.bool, _propTypes2.default.func]), - title: _propTypes2.default.oneOfType([_propTypes2.default.bool, _propTypes2.default.func]), - headerEvents: _propTypes2.default.object, - events: _propTypes2.default.object, - headerAlign: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.func]), - align: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.func]), - headerAttrs: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.func]), - attrs: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.func]), - sort: _propTypes2.default.bool, - sortFunc: _propTypes2.default.func, - onSort: _propTypes2.default.func, - editor: _propTypes2.default.object, - editable: _propTypes2.default.oneOfType([_propTypes2.default.bool, _propTypes2.default.func]), - editCellStyle: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.func]), - editCellClasses: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.func]), - editorStyle: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.func]), - editorClasses: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.func]), - editorRenderer: _propTypes2.default.func, - validator: _propTypes2.default.func, - filter: _propTypes2.default.object, - filterRenderer: _propTypes2.default.func, - filterValue: _propTypes2.default.func, - searchable: _propTypes2.default.bool - }).isRequired, - index: _propTypes2.default.number.isRequired, - onSort: _propTypes2.default.func, - sorting: _propTypes2.default.bool, - sortOrder: _propTypes2.default.oneOf([_const2.default.SORT_ASC, _const2.default.SORT_DESC]), - sortCaret: _propTypes2.default.func, - isLastSorting: _propTypes2.default.bool, - onFilter: _propTypes2.default.func, - filterPosition: _propTypes2.default.oneOf([_const2.default.FILTERS_POSITION_INLINE, _const2.default.FILTERS_POSITION_BOTTOM, _const2.default.FILTERS_POSITION_TOP]), - currFilters: _propTypes2.default.object, - onExternalFilter: _propTypes2.default.func -}; - -exports.default = HeaderCell; - -/***/ }), -/* 32 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _bootstrap = __webpack_require__(5); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var SortSymbol = function SortSymbol() { - return _react2.default.createElement( - _bootstrap.BootstrapContext.Consumer, - null, - function (_ref) { - var bootstrap4 = _ref.bootstrap4; - return bootstrap4 ? _react2.default.createElement('span', { className: 'order-4' }) : _react2.default.createElement( - 'span', - { className: 'order' }, - _react2.default.createElement( - 'span', - { className: 'dropdown' }, - _react2.default.createElement('span', { className: 'caret' }) - ), - _react2.default.createElement( - 'span', - { className: 'dropup' }, - _react2.default.createElement('span', { className: 'caret' }) - ) - ); - } - ); -}; - -exports.default = SortSymbol; - -/***/ }), -/* 33 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _classnames = __webpack_require__(4); - -var _classnames2 = _interopRequireDefault(_classnames); - -var _propTypes = __webpack_require__(1); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _const = __webpack_require__(3); - -var _const2 = _interopRequireDefault(_const); - -var _bootstrap = __webpack_require__(5); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var SortCaret = function SortCaret(_ref) { - var order = _ref.order; - - var orderClass = (0, _classnames2.default)('react-bootstrap-table-sort-order', { - dropup: order === _const2.default.SORT_ASC - }); - - return _react2.default.createElement( - _bootstrap.BootstrapContext.Consumer, - null, - function (_ref2) { - var bootstrap4 = _ref2.bootstrap4; - return bootstrap4 ? _react2.default.createElement('span', { className: 'caret-4-' + order }) : _react2.default.createElement( - 'span', - { className: orderClass }, - _react2.default.createElement('span', { className: 'caret' }) - ); - } - ); -}; - -SortCaret.propTypes = { - order: _propTypes2.default.oneOf([_const2.default.SORT_ASC, _const2.default.SORT_DESC]).isRequired -}; - -exports.default = SortCaret; - -/***/ }), -/* 34 */ -/***/ (function(module, exports, __webpack_require__) { - -/* WEBPACK VAR INJECTION */(function(global, module) {var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// Underscore.js 1.9.1 -// http://underscorejs.org -// (c) 2009-2018 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. - -(function() { - - // Baseline setup - // -------------- - - // Establish the root object, `window` (`self`) in the browser, `global` - // on the server, or `this` in some virtual machines. We use `self` - // instead of `window` for `WebWorker` support. - var root = typeof self == 'object' && self.self === self && self || - typeof global == 'object' && global.global === global && global || - this || - {}; - - // Save the previous value of the `_` variable. - var previousUnderscore = root._; - - // Save bytes in the minified (but not gzipped) version: - var ArrayProto = Array.prototype, ObjProto = Object.prototype; - var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; - - // Create quick reference variables for speed access to core prototypes. - var push = ArrayProto.push, - slice = ArrayProto.slice, - toString = ObjProto.toString, - hasOwnProperty = ObjProto.hasOwnProperty; - - // All **ECMAScript 5** native function implementations that we hope to use - // are declared here. - var nativeIsArray = Array.isArray, - nativeKeys = Object.keys, - nativeCreate = Object.create; - - // Naked function reference for surrogate-prototype-swapping. - var Ctor = function(){}; - - // Create a safe reference to the Underscore object for use below. - var _ = function(obj) { - if (obj instanceof _) return obj; - if (!(this instanceof _)) return new _(obj); - this._wrapped = obj; - }; - - // Export the Underscore object for **Node.js**, with - // backwards-compatibility for their old module API. If we're in - // the browser, add `_` as a global object. - // (`nodeType` is checked to ensure that `module` - // and `exports` are not HTML elements.) - if (typeof exports != 'undefined' && !exports.nodeType) { - if (typeof module != 'undefined' && !module.nodeType && module.exports) { - exports = module.exports = _; - } - exports._ = _; - } else { - root._ = _; - } - - // Current version. - _.VERSION = '1.9.1'; - - // Internal function that returns an efficient (for current engines) version - // of the passed-in callback, to be repeatedly applied in other Underscore - // functions. - var optimizeCb = function(func, context, argCount) { - if (context === void 0) return func; - switch (argCount == null ? 3 : argCount) { - case 1: return function(value) { - return func.call(context, value); - }; - // The 2-argument case is omitted because we’re not using it. - case 3: return function(value, index, collection) { - return func.call(context, value, index, collection); - }; - case 4: return function(accumulator, value, index, collection) { - return func.call(context, accumulator, value, index, collection); - }; - } - return function() { - return func.apply(context, arguments); - }; - }; - - var builtinIteratee; - - // An internal function to generate callbacks that can be applied to each - // element in a collection, returning the desired result — either `identity`, - // an arbitrary callback, a property matcher, or a property accessor. - var cb = function(value, context, argCount) { - if (_.iteratee !== builtinIteratee) return _.iteratee(value, context); - if (value == null) return _.identity; - if (_.isFunction(value)) return optimizeCb(value, context, argCount); - if (_.isObject(value) && !_.isArray(value)) return _.matcher(value); - return _.property(value); - }; - - // External wrapper for our callback generator. Users may customize - // `_.iteratee` if they want additional predicate/iteratee shorthand styles. - // This abstraction hides the internal-only argCount argument. - _.iteratee = builtinIteratee = function(value, context) { - return cb(value, context, Infinity); - }; - - // Some functions take a variable number of arguments, or a few expected - // arguments at the beginning and then a variable number of values to operate - // on. This helper accumulates all remaining arguments past the function’s - // argument length (or an explicit `startIndex`), into an array that becomes - // the last argument. Similar to ES6’s "rest parameter". - var restArguments = function(func, startIndex) { - startIndex = startIndex == null ? func.length - 1 : +startIndex; - return function() { - var length = Math.max(arguments.length - startIndex, 0), - rest = Array(length), - index = 0; - for (; index < length; index++) { - rest[index] = arguments[index + startIndex]; - } - switch (startIndex) { - case 0: return func.call(this, rest); - case 1: return func.call(this, arguments[0], rest); - case 2: return func.call(this, arguments[0], arguments[1], rest); - } - var args = Array(startIndex + 1); - for (index = 0; index < startIndex; index++) { - args[index] = arguments[index]; - } - args[startIndex] = rest; - return func.apply(this, args); - }; - }; - - // An internal function for creating a new object that inherits from another. - var baseCreate = function(prototype) { - if (!_.isObject(prototype)) return {}; - if (nativeCreate) return nativeCreate(prototype); - Ctor.prototype = prototype; - var result = new Ctor; - Ctor.prototype = null; - return result; - }; - - var shallowProperty = function(key) { - return function(obj) { - return obj == null ? void 0 : obj[key]; - }; - }; - - var has = function(obj, path) { - return obj != null && hasOwnProperty.call(obj, path); - } - - var deepGet = function(obj, path) { - var length = path.length; - for (var i = 0; i < length; i++) { - if (obj == null) return void 0; - obj = obj[path[i]]; - } - return length ? obj : void 0; - }; - - // Helper for collection methods to determine whether a collection - // should be iterated as an array or as an object. - // Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength - // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094 - var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; - var getLength = shallowProperty('length'); - var isArrayLike = function(collection) { - var length = getLength(collection); - return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX; - }; - - // Collection Functions - // -------------------- - - // The cornerstone, an `each` implementation, aka `forEach`. - // Handles raw objects in addition to array-likes. Treats all - // sparse array-likes as if they were dense. - _.each = _.forEach = function(obj, iteratee, context) { - iteratee = optimizeCb(iteratee, context); - var i, length; - if (isArrayLike(obj)) { - for (i = 0, length = obj.length; i < length; i++) { - iteratee(obj[i], i, obj); - } - } else { - var keys = _.keys(obj); - for (i = 0, length = keys.length; i < length; i++) { - iteratee(obj[keys[i]], keys[i], obj); - } - } - return obj; - }; - - // Return the results of applying the iteratee to each element. - _.map = _.collect = function(obj, iteratee, context) { - iteratee = cb(iteratee, context); - var keys = !isArrayLike(obj) && _.keys(obj), - length = (keys || obj).length, - results = Array(length); - for (var index = 0; index < length; index++) { - var currentKey = keys ? keys[index] : index; - results[index] = iteratee(obj[currentKey], currentKey, obj); - } - return results; - }; - - // Create a reducing function iterating left or right. - var createReduce = function(dir) { - // Wrap code that reassigns argument variables in a separate function than - // the one that accesses `arguments.length` to avoid a perf hit. (#1991) - var reducer = function(obj, iteratee, memo, initial) { - var keys = !isArrayLike(obj) && _.keys(obj), - length = (keys || obj).length, - index = dir > 0 ? 0 : length - 1; - if (!initial) { - memo = obj[keys ? keys[index] : index]; - index += dir; - } - for (; index >= 0 && index < length; index += dir) { - var currentKey = keys ? keys[index] : index; - memo = iteratee(memo, obj[currentKey], currentKey, obj); - } - return memo; - }; - - return function(obj, iteratee, memo, context) { - var initial = arguments.length >= 3; - return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial); - }; - }; - - // **Reduce** builds up a single result from a list of values, aka `inject`, - // or `foldl`. - _.reduce = _.foldl = _.inject = createReduce(1); - - // The right-associative version of reduce, also known as `foldr`. - _.reduceRight = _.foldr = createReduce(-1); - - // Return the first value which passes a truth test. Aliased as `detect`. - _.find = _.detect = function(obj, predicate, context) { - var keyFinder = isArrayLike(obj) ? _.findIndex : _.findKey; - var key = keyFinder(obj, predicate, context); - if (key !== void 0 && key !== -1) return obj[key]; - }; - - // Return all the elements that pass a truth test. - // Aliased as `select`. - _.filter = _.select = function(obj, predicate, context) { - var results = []; - predicate = cb(predicate, context); - _.each(obj, function(value, index, list) { - if (predicate(value, index, list)) results.push(value); - }); - return results; - }; - - // Return all the elements for which a truth test fails. - _.reject = function(obj, predicate, context) { - return _.filter(obj, _.negate(cb(predicate)), context); - }; - - // Determine whether all of the elements match a truth test. - // Aliased as `all`. - _.every = _.all = function(obj, predicate, context) { - predicate = cb(predicate, context); - var keys = !isArrayLike(obj) && _.keys(obj), - length = (keys || obj).length; - for (var index = 0; index < length; index++) { - var currentKey = keys ? keys[index] : index; - if (!predicate(obj[currentKey], currentKey, obj)) return false; - } - return true; - }; - - // Determine if at least one element in the object matches a truth test. - // Aliased as `any`. - _.some = _.any = function(obj, predicate, context) { - predicate = cb(predicate, context); - var keys = !isArrayLike(obj) && _.keys(obj), - length = (keys || obj).length; - for (var index = 0; index < length; index++) { - var currentKey = keys ? keys[index] : index; - if (predicate(obj[currentKey], currentKey, obj)) return true; - } - return false; - }; - - // Determine if the array or object contains a given item (using `===`). - // Aliased as `includes` and `include`. - _.contains = _.includes = _.include = function(obj, item, fromIndex, guard) { - if (!isArrayLike(obj)) obj = _.values(obj); - if (typeof fromIndex != 'number' || guard) fromIndex = 0; - return _.indexOf(obj, item, fromIndex) >= 0; - }; - - // Invoke a method (with arguments) on every item in a collection. - _.invoke = restArguments(function(obj, path, args) { - var contextPath, func; - if (_.isFunction(path)) { - func = path; - } else if (_.isArray(path)) { - contextPath = path.slice(0, -1); - path = path[path.length - 1]; - } - return _.map(obj, function(context) { - var method = func; - if (!method) { - if (contextPath && contextPath.length) { - context = deepGet(context, contextPath); - } - if (context == null) return void 0; - method = context[path]; - } - return method == null ? method : method.apply(context, args); - }); - }); - - // Convenience version of a common use case of `map`: fetching a property. - _.pluck = function(obj, key) { - return _.map(obj, _.property(key)); - }; - - // Convenience version of a common use case of `filter`: selecting only objects - // containing specific `key:value` pairs. - _.where = function(obj, attrs) { - return _.filter(obj, _.matcher(attrs)); - }; - - // Convenience version of a common use case of `find`: getting the first object - // containing specific `key:value` pairs. - _.findWhere = function(obj, attrs) { - return _.find(obj, _.matcher(attrs)); - }; - - // Return the maximum element (or element-based computation). - _.max = function(obj, iteratee, context) { - var result = -Infinity, lastComputed = -Infinity, - value, computed; - if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) { - obj = isArrayLike(obj) ? obj : _.values(obj); - for (var i = 0, length = obj.length; i < length; i++) { - value = obj[i]; - if (value != null && value > result) { - result = value; - } - } - } else { - iteratee = cb(iteratee, context); - _.each(obj, function(v, index, list) { - computed = iteratee(v, index, list); - if (computed > lastComputed || computed === -Infinity && result === -Infinity) { - result = v; - lastComputed = computed; - } - }); - } - return result; - }; - - // Return the minimum element (or element-based computation). - _.min = function(obj, iteratee, context) { - var result = Infinity, lastComputed = Infinity, - value, computed; - if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) { - obj = isArrayLike(obj) ? obj : _.values(obj); - for (var i = 0, length = obj.length; i < length; i++) { - value = obj[i]; - if (value != null && value < result) { - result = value; - } - } - } else { - iteratee = cb(iteratee, context); - _.each(obj, function(v, index, list) { - computed = iteratee(v, index, list); - if (computed < lastComputed || computed === Infinity && result === Infinity) { - result = v; - lastComputed = computed; - } - }); - } - return result; - }; - - // Shuffle a collection. - _.shuffle = function(obj) { - return _.sample(obj, Infinity); - }; - - // Sample **n** random values from a collection using the modern version of the - // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle). - // If **n** is not specified, returns a single random element. - // The internal `guard` argument allows it to work with `map`. - _.sample = function(obj, n, guard) { - if (n == null || guard) { - if (!isArrayLike(obj)) obj = _.values(obj); - return obj[_.random(obj.length - 1)]; - } - var sample = isArrayLike(obj) ? _.clone(obj) : _.values(obj); - var length = getLength(sample); - n = Math.max(Math.min(n, length), 0); - var last = length - 1; - for (var index = 0; index < n; index++) { - var rand = _.random(index, last); - var temp = sample[index]; - sample[index] = sample[rand]; - sample[rand] = temp; - } - return sample.slice(0, n); - }; - - // Sort the object's values by a criterion produced by an iteratee. - _.sortBy = function(obj, iteratee, context) { - var index = 0; - iteratee = cb(iteratee, context); - return _.pluck(_.map(obj, function(value, key, list) { - return { - value: value, - index: index++, - criteria: iteratee(value, key, list) - }; - }).sort(function(left, right) { - var a = left.criteria; - var b = right.criteria; - if (a !== b) { - if (a > b || a === void 0) return 1; - if (a < b || b === void 0) return -1; - } - return left.index - right.index; - }), 'value'); - }; - - // An internal function used for aggregate "group by" operations. - var group = function(behavior, partition) { - return function(obj, iteratee, context) { - var result = partition ? [[], []] : {}; - iteratee = cb(iteratee, context); - _.each(obj, function(value, index) { - var key = iteratee(value, index, obj); - behavior(result, value, key); - }); - return result; - }; - }; - - // Groups the object's values by a criterion. Pass either a string attribute - // to group by, or a function that returns the criterion. - _.groupBy = group(function(result, value, key) { - if (has(result, key)) result[key].push(value); else result[key] = [value]; - }); - - // Indexes the object's values by a criterion, similar to `groupBy`, but for - // when you know that your index values will be unique. - _.indexBy = group(function(result, value, key) { - result[key] = value; - }); - - // Counts instances of an object that group by a certain criterion. Pass - // either a string attribute to count by, or a function that returns the - // criterion. - _.countBy = group(function(result, value, key) { - if (has(result, key)) result[key]++; else result[key] = 1; - }); - - var reStrSymbol = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g; - // Safely create a real, live array from anything iterable. - _.toArray = function(obj) { - if (!obj) return []; - if (_.isArray(obj)) return slice.call(obj); - if (_.isString(obj)) { - // Keep surrogate pair characters together - return obj.match(reStrSymbol); - } - if (isArrayLike(obj)) return _.map(obj, _.identity); - return _.values(obj); - }; - - // Return the number of elements in an object. - _.size = function(obj) { - if (obj == null) return 0; - return isArrayLike(obj) ? obj.length : _.keys(obj).length; - }; - - // Split a collection into two arrays: one whose elements all satisfy the given - // predicate, and one whose elements all do not satisfy the predicate. - _.partition = group(function(result, value, pass) { - result[pass ? 0 : 1].push(value); - }, true); - - // Array Functions - // --------------- - - // Get the first element of an array. Passing **n** will return the first N - // values in the array. Aliased as `head` and `take`. The **guard** check - // allows it to work with `_.map`. - _.first = _.head = _.take = function(array, n, guard) { - if (array == null || array.length < 1) return n == null ? void 0 : []; - if (n == null || guard) return array[0]; - return _.initial(array, array.length - n); - }; - - // Returns everything but the last entry of the array. Especially useful on - // the arguments object. Passing **n** will return all the values in - // the array, excluding the last N. - _.initial = function(array, n, guard) { - return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n))); - }; - - // Get the last element of an array. Passing **n** will return the last N - // values in the array. - _.last = function(array, n, guard) { - if (array == null || array.length < 1) return n == null ? void 0 : []; - if (n == null || guard) return array[array.length - 1]; - return _.rest(array, Math.max(0, array.length - n)); - }; - - // Returns everything but the first entry of the array. Aliased as `tail` and `drop`. - // Especially useful on the arguments object. Passing an **n** will return - // the rest N values in the array. - _.rest = _.tail = _.drop = function(array, n, guard) { - return slice.call(array, n == null || guard ? 1 : n); - }; - - // Trim out all falsy values from an array. - _.compact = function(array) { - return _.filter(array, Boolean); - }; - - // Internal implementation of a recursive `flatten` function. - var flatten = function(input, shallow, strict, output) { - output = output || []; - var idx = output.length; - for (var i = 0, length = getLength(input); i < length; i++) { - var value = input[i]; - if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) { - // Flatten current level of array or arguments object. - if (shallow) { - var j = 0, len = value.length; - while (j < len) output[idx++] = value[j++]; - } else { - flatten(value, shallow, strict, output); - idx = output.length; - } - } else if (!strict) { - output[idx++] = value; - } - } - return output; - }; - - // Flatten out an array, either recursively (by default), or just one level. - _.flatten = function(array, shallow) { - return flatten(array, shallow, false); - }; - - // Return a version of the array that does not contain the specified value(s). - _.without = restArguments(function(array, otherArrays) { - return _.difference(array, otherArrays); - }); - - // Produce a duplicate-free version of the array. If the array has already - // been sorted, you have the option of using a faster algorithm. - // The faster algorithm will not work with an iteratee if the iteratee - // is not a one-to-one function, so providing an iteratee will disable - // the faster algorithm. - // Aliased as `unique`. - _.uniq = _.unique = function(array, isSorted, iteratee, context) { - if (!_.isBoolean(isSorted)) { - context = iteratee; - iteratee = isSorted; - isSorted = false; - } - if (iteratee != null) iteratee = cb(iteratee, context); - var result = []; - var seen = []; - for (var i = 0, length = getLength(array); i < length; i++) { - var value = array[i], - computed = iteratee ? iteratee(value, i, array) : value; - if (isSorted && !iteratee) { - if (!i || seen !== computed) result.push(value); - seen = computed; - } else if (iteratee) { - if (!_.contains(seen, computed)) { - seen.push(computed); - result.push(value); - } - } else if (!_.contains(result, value)) { - result.push(value); - } - } - return result; - }; - - // Produce an array that contains the union: each distinct element from all of - // the passed-in arrays. - _.union = restArguments(function(arrays) { - return _.uniq(flatten(arrays, true, true)); - }); - - // Produce an array that contains every item shared between all the - // passed-in arrays. - _.intersection = function(array) { - var result = []; - var argsLength = arguments.length; - for (var i = 0, length = getLength(array); i < length; i++) { - var item = array[i]; - if (_.contains(result, item)) continue; - var j; - for (j = 1; j < argsLength; j++) { - if (!_.contains(arguments[j], item)) break; - } - if (j === argsLength) result.push(item); - } - return result; - }; - - // Take the difference between one array and a number of other arrays. - // Only the elements present in just the first array will remain. - _.difference = restArguments(function(array, rest) { - rest = flatten(rest, true, true); - return _.filter(array, function(value){ - return !_.contains(rest, value); - }); - }); - - // Complement of _.zip. Unzip accepts an array of arrays and groups - // each array's elements on shared indices. - _.unzip = function(array) { - var length = array && _.max(array, getLength).length || 0; - var result = Array(length); - - for (var index = 0; index < length; index++) { - result[index] = _.pluck(array, index); - } - return result; - }; - - // Zip together multiple lists into a single array -- elements that share - // an index go together. - _.zip = restArguments(_.unzip); - - // Converts lists into objects. Pass either a single array of `[key, value]` - // pairs, or two parallel arrays of the same length -- one of keys, and one of - // the corresponding values. Passing by pairs is the reverse of _.pairs. - _.object = function(list, values) { - var result = {}; - for (var i = 0, length = getLength(list); i < length; i++) { - if (values) { - result[list[i]] = values[i]; - } else { - result[list[i][0]] = list[i][1]; - } - } - return result; - }; - - // Generator function to create the findIndex and findLastIndex functions. - var createPredicateIndexFinder = function(dir) { - return function(array, predicate, context) { - predicate = cb(predicate, context); - var length = getLength(array); - var index = dir > 0 ? 0 : length - 1; - for (; index >= 0 && index < length; index += dir) { - if (predicate(array[index], index, array)) return index; - } - return -1; - }; - }; - - // Returns the first index on an array-like that passes a predicate test. - _.findIndex = createPredicateIndexFinder(1); - _.findLastIndex = createPredicateIndexFinder(-1); - - // Use a comparator function to figure out the smallest index at which - // an object should be inserted so as to maintain order. Uses binary search. - _.sortedIndex = function(array, obj, iteratee, context) { - iteratee = cb(iteratee, context, 1); - var value = iteratee(obj); - var low = 0, high = getLength(array); - while (low < high) { - var mid = Math.floor((low + high) / 2); - if (iteratee(array[mid]) < value) low = mid + 1; else high = mid; - } - return low; - }; - - // Generator function to create the indexOf and lastIndexOf functions. - var createIndexFinder = function(dir, predicateFind, sortedIndex) { - return function(array, item, idx) { - var i = 0, length = getLength(array); - if (typeof idx == 'number') { - if (dir > 0) { - i = idx >= 0 ? idx : Math.max(idx + length, i); - } else { - length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1; - } - } else if (sortedIndex && idx && length) { - idx = sortedIndex(array, item); - return array[idx] === item ? idx : -1; - } - if (item !== item) { - idx = predicateFind(slice.call(array, i, length), _.isNaN); - return idx >= 0 ? idx + i : -1; - } - for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) { - if (array[idx] === item) return idx; - } - return -1; - }; - }; - - // Return the position of the first occurrence of an item in an array, - // or -1 if the item is not included in the array. - // If the array is large and already in sort order, pass `true` - // for **isSorted** to use binary search. - _.indexOf = createIndexFinder(1, _.findIndex, _.sortedIndex); - _.lastIndexOf = createIndexFinder(-1, _.findLastIndex); - - // Generate an integer Array containing an arithmetic progression. A port of - // the native Python `range()` function. See - // [the Python documentation](http://docs.python.org/library/functions.html#range). - _.range = function(start, stop, step) { - if (stop == null) { - stop = start || 0; - start = 0; - } - if (!step) { - step = stop < start ? -1 : 1; - } - - var length = Math.max(Math.ceil((stop - start) / step), 0); - var range = Array(length); - - for (var idx = 0; idx < length; idx++, start += step) { - range[idx] = start; - } - - return range; - }; - - // Chunk a single array into multiple arrays, each containing `count` or fewer - // items. - _.chunk = function(array, count) { - if (count == null || count < 1) return []; - var result = []; - var i = 0, length = array.length; - while (i < length) { - result.push(slice.call(array, i, i += count)); - } - return result; - }; - - // Function (ahem) Functions - // ------------------ - - // Determines whether to execute a function as a constructor - // or a normal function with the provided arguments. - var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) { - if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args); - var self = baseCreate(sourceFunc.prototype); - var result = sourceFunc.apply(self, args); - if (_.isObject(result)) return result; - return self; - }; - - // Create a function bound to a given object (assigning `this`, and arguments, - // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if - // available. - _.bind = restArguments(function(func, context, args) { - if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function'); - var bound = restArguments(function(callArgs) { - return executeBound(func, bound, context, this, args.concat(callArgs)); - }); - return bound; - }); - - // Partially apply a function by creating a version that has had some of its - // arguments pre-filled, without changing its dynamic `this` context. _ acts - // as a placeholder by default, allowing any combination of arguments to be - // pre-filled. Set `_.partial.placeholder` for a custom placeholder argument. - _.partial = restArguments(function(func, boundArgs) { - var placeholder = _.partial.placeholder; - var bound = function() { - var position = 0, length = boundArgs.length; - var args = Array(length); - for (var i = 0; i < length; i++) { - args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i]; - } - while (position < arguments.length) args.push(arguments[position++]); - return executeBound(func, bound, this, this, args); - }; - return bound; - }); - - _.partial.placeholder = _; - - // Bind a number of an object's methods to that object. Remaining arguments - // are the method names to be bound. Useful for ensuring that all callbacks - // defined on an object belong to it. - _.bindAll = restArguments(function(obj, keys) { - keys = flatten(keys, false, false); - var index = keys.length; - if (index < 1) throw new Error('bindAll must be passed function names'); - while (index--) { - var key = keys[index]; - obj[key] = _.bind(obj[key], obj); - } - }); - - // Memoize an expensive function by storing its results. - _.memoize = function(func, hasher) { - var memoize = function(key) { - var cache = memoize.cache; - var address = '' + (hasher ? hasher.apply(this, arguments) : key); - if (!has(cache, address)) cache[address] = func.apply(this, arguments); - return cache[address]; - }; - memoize.cache = {}; - return memoize; - }; - - // Delays a function for the given number of milliseconds, and then calls - // it with the arguments supplied. - _.delay = restArguments(function(func, wait, args) { - return setTimeout(function() { - return func.apply(null, args); - }, wait); - }); - - // Defers a function, scheduling it to run after the current call stack has - // cleared. - _.defer = _.partial(_.delay, _, 1); - - // Returns a function, that, when invoked, will only be triggered at most once - // during a given window of time. Normally, the throttled function will run - // as much as it can, without ever going more than once per `wait` duration; - // but if you'd like to disable the execution on the leading edge, pass - // `{leading: false}`. To disable execution on the trailing edge, ditto. - _.throttle = function(func, wait, options) { - var timeout, context, args, result; - var previous = 0; - if (!options) options = {}; - - var later = function() { - previous = options.leading === false ? 0 : _.now(); - timeout = null; - result = func.apply(context, args); - if (!timeout) context = args = null; - }; - - var throttled = function() { - var now = _.now(); - if (!previous && options.leading === false) previous = now; - var remaining = wait - (now - previous); - context = this; - args = arguments; - if (remaining <= 0 || remaining > wait) { - if (timeout) { - clearTimeout(timeout); - timeout = null; - } - previous = now; - result = func.apply(context, args); - if (!timeout) context = args = null; - } else if (!timeout && options.trailing !== false) { - timeout = setTimeout(later, remaining); - } - return result; - }; - - throttled.cancel = function() { - clearTimeout(timeout); - previous = 0; - timeout = context = args = null; - }; - - return throttled; - }; - - // Returns a function, that, as long as it continues to be invoked, will not - // be triggered. The function will be called after it stops being called for - // N milliseconds. If `immediate` is passed, trigger the function on the - // leading edge, instead of the trailing. - _.debounce = function(func, wait, immediate) { - var timeout, result; - - var later = function(context, args) { - timeout = null; - if (args) result = func.apply(context, args); - }; - - var debounced = restArguments(function(args) { - if (timeout) clearTimeout(timeout); - if (immediate) { - var callNow = !timeout; - timeout = setTimeout(later, wait); - if (callNow) result = func.apply(this, args); - } else { - timeout = _.delay(later, wait, this, args); - } - - return result; - }); - - debounced.cancel = function() { - clearTimeout(timeout); - timeout = null; - }; - - return debounced; - }; - - // Returns the first function passed as an argument to the second, - // allowing you to adjust arguments, run code before and after, and - // conditionally execute the original function. - _.wrap = function(func, wrapper) { - return _.partial(wrapper, func); - }; - - // Returns a negated version of the passed-in predicate. - _.negate = function(predicate) { - return function() { - return !predicate.apply(this, arguments); - }; - }; - - // Returns a function that is the composition of a list of functions, each - // consuming the return value of the function that follows. - _.compose = function() { - var args = arguments; - var start = args.length - 1; - return function() { - var i = start; - var result = args[start].apply(this, arguments); - while (i--) result = args[i].call(this, result); - return result; - }; - }; - - // Returns a function that will only be executed on and after the Nth call. - _.after = function(times, func) { - return function() { - if (--times < 1) { - return func.apply(this, arguments); - } - }; - }; - - // Returns a function that will only be executed up to (but not including) the Nth call. - _.before = function(times, func) { - var memo; - return function() { - if (--times > 0) { - memo = func.apply(this, arguments); - } - if (times <= 1) func = null; - return memo; - }; - }; - - // Returns a function that will be executed at most one time, no matter how - // often you call it. Useful for lazy initialization. - _.once = _.partial(_.before, 2); - - _.restArguments = restArguments; - - // Object Functions - // ---------------- - - // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. - var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); - var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', - 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; - - var collectNonEnumProps = function(obj, keys) { - var nonEnumIdx = nonEnumerableProps.length; - var constructor = obj.constructor; - var proto = _.isFunction(constructor) && constructor.prototype || ObjProto; - - // Constructor is a special case. - var prop = 'constructor'; - if (has(obj, prop) && !_.contains(keys, prop)) keys.push(prop); - - while (nonEnumIdx--) { - prop = nonEnumerableProps[nonEnumIdx]; - if (prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) { - keys.push(prop); - } - } - }; - - // Retrieve the names of an object's own properties. - // Delegates to **ECMAScript 5**'s native `Object.keys`. - _.keys = function(obj) { - if (!_.isObject(obj)) return []; - if (nativeKeys) return nativeKeys(obj); - var keys = []; - for (var key in obj) if (has(obj, key)) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; - }; - - // Retrieve all the property names of an object. - _.allKeys = function(obj) { - if (!_.isObject(obj)) return []; - var keys = []; - for (var key in obj) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; - }; - - // Retrieve the values of an object's properties. - _.values = function(obj) { - var keys = _.keys(obj); - var length = keys.length; - var values = Array(length); - for (var i = 0; i < length; i++) { - values[i] = obj[keys[i]]; - } - return values; - }; - - // Returns the results of applying the iteratee to each element of the object. - // In contrast to _.map it returns an object. - _.mapObject = function(obj, iteratee, context) { - iteratee = cb(iteratee, context); - var keys = _.keys(obj), - length = keys.length, - results = {}; - for (var index = 0; index < length; index++) { - var currentKey = keys[index]; - results[currentKey] = iteratee(obj[currentKey], currentKey, obj); - } - return results; - }; - - // Convert an object into a list of `[key, value]` pairs. - // The opposite of _.object. - _.pairs = function(obj) { - var keys = _.keys(obj); - var length = keys.length; - var pairs = Array(length); - for (var i = 0; i < length; i++) { - pairs[i] = [keys[i], obj[keys[i]]]; - } - return pairs; - }; - - // Invert the keys and values of an object. The values must be serializable. - _.invert = function(obj) { - var result = {}; - var keys = _.keys(obj); - for (var i = 0, length = keys.length; i < length; i++) { - result[obj[keys[i]]] = keys[i]; - } - return result; - }; - - // Return a sorted list of the function names available on the object. - // Aliased as `methods`. - _.functions = _.methods = function(obj) { - var names = []; - for (var key in obj) { - if (_.isFunction(obj[key])) names.push(key); - } - return names.sort(); - }; - - // An internal function for creating assigner functions. - var createAssigner = function(keysFunc, defaults) { - return function(obj) { - var length = arguments.length; - if (defaults) obj = Object(obj); - if (length < 2 || obj == null) return obj; - for (var index = 1; index < length; index++) { - var source = arguments[index], - keys = keysFunc(source), - l = keys.length; - for (var i = 0; i < l; i++) { - var key = keys[i]; - if (!defaults || obj[key] === void 0) obj[key] = source[key]; - } - } - return obj; - }; - }; - - // Extend a given object with all the properties in passed-in object(s). - _.extend = createAssigner(_.allKeys); - - // Assigns a given object with all the own properties in the passed-in object(s). - // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) - _.extendOwn = _.assign = createAssigner(_.keys); - - // Returns the first key on an object that passes a predicate test. - _.findKey = function(obj, predicate, context) { - predicate = cb(predicate, context); - var keys = _.keys(obj), key; - for (var i = 0, length = keys.length; i < length; i++) { - key = keys[i]; - if (predicate(obj[key], key, obj)) return key; - } - }; - - // Internal pick helper function to determine if `obj` has key `key`. - var keyInObj = function(value, key, obj) { - return key in obj; - }; - - // Return a copy of the object only containing the whitelisted properties. - _.pick = restArguments(function(obj, keys) { - var result = {}, iteratee = keys[0]; - if (obj == null) return result; - if (_.isFunction(iteratee)) { - if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]); - keys = _.allKeys(obj); - } else { - iteratee = keyInObj; - keys = flatten(keys, false, false); - obj = Object(obj); - } - for (var i = 0, length = keys.length; i < length; i++) { - var key = keys[i]; - var value = obj[key]; - if (iteratee(value, key, obj)) result[key] = value; - } - return result; - }); - - // Return a copy of the object without the blacklisted properties. - _.omit = restArguments(function(obj, keys) { - var iteratee = keys[0], context; - if (_.isFunction(iteratee)) { - iteratee = _.negate(iteratee); - if (keys.length > 1) context = keys[1]; - } else { - keys = _.map(flatten(keys, false, false), String); - iteratee = function(value, key) { - return !_.contains(keys, key); - }; - } - return _.pick(obj, iteratee, context); - }); - - // Fill in a given object with default properties. - _.defaults = createAssigner(_.allKeys, true); - - // Creates an object that inherits from the given prototype object. - // If additional properties are provided then they will be added to the - // created object. - _.create = function(prototype, props) { - var result = baseCreate(prototype); - if (props) _.extendOwn(result, props); - return result; - }; - - // Create a (shallow-cloned) duplicate of an object. - _.clone = function(obj) { - if (!_.isObject(obj)) return obj; - return _.isArray(obj) ? obj.slice() : _.extend({}, obj); - }; - - // Invokes interceptor with the obj, and then returns obj. - // The primary purpose of this method is to "tap into" a method chain, in - // order to perform operations on intermediate results within the chain. - _.tap = function(obj, interceptor) { - interceptor(obj); - return obj; - }; - - // Returns whether an object has a given set of `key:value` pairs. - _.isMatch = function(object, attrs) { - var keys = _.keys(attrs), length = keys.length; - if (object == null) return !length; - var obj = Object(object); - for (var i = 0; i < length; i++) { - var key = keys[i]; - if (attrs[key] !== obj[key] || !(key in obj)) return false; - } - return true; - }; - - - // Internal recursive comparison function for `isEqual`. - var eq, deepEq; - eq = function(a, b, aStack, bStack) { - // Identical objects are equal. `0 === -0`, but they aren't identical. - // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal). - if (a === b) return a !== 0 || 1 / a === 1 / b; - // `null` or `undefined` only equal to itself (strict comparison). - if (a == null || b == null) return false; - // `NaN`s are equivalent, but non-reflexive. - if (a !== a) return b !== b; - // Exhaust primitive checks - var type = typeof a; - if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; - return deepEq(a, b, aStack, bStack); - }; - - // Internal recursive comparison function for `isEqual`. - deepEq = function(a, b, aStack, bStack) { - // Unwrap any wrapped objects. - if (a instanceof _) a = a._wrapped; - if (b instanceof _) b = b._wrapped; - // Compare `[[Class]]` names. - var className = toString.call(a); - if (className !== toString.call(b)) return false; - switch (className) { - // Strings, numbers, regular expressions, dates, and booleans are compared by value. - case '[object RegExp]': - // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') - case '[object String]': - // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is - // equivalent to `new String("5")`. - return '' + a === '' + b; - case '[object Number]': - // `NaN`s are equivalent, but non-reflexive. - // Object(NaN) is equivalent to NaN. - if (+a !== +a) return +b !== +b; - // An `egal` comparison is performed for other numeric values. - return +a === 0 ? 1 / +a === 1 / b : +a === +b; - case '[object Date]': - case '[object Boolean]': - // Coerce dates and booleans to numeric primitive values. Dates are compared by their - // millisecond representations. Note that invalid dates with millisecond representations - // of `NaN` are not equivalent. - return +a === +b; - case '[object Symbol]': - return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b); - } - - var areArrays = className === '[object Array]'; - if (!areArrays) { - if (typeof a != 'object' || typeof b != 'object') return false; - - // Objects with different constructors are not equivalent, but `Object`s or `Array`s - // from different frames are. - var aCtor = a.constructor, bCtor = b.constructor; - if (aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor && - _.isFunction(bCtor) && bCtor instanceof bCtor) - && ('constructor' in a && 'constructor' in b)) { - return false; - } - } - // Assume equality for cyclic structures. The algorithm for detecting cyclic - // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. - - // Initializing stack of traversed objects. - // It's done here since we only need them for objects and arrays comparison. - aStack = aStack || []; - bStack = bStack || []; - var length = aStack.length; - while (length--) { - // Linear search. Performance is inversely proportional to the number of - // unique nested structures. - if (aStack[length] === a) return bStack[length] === b; - } - - // Add the first object to the stack of traversed objects. - aStack.push(a); - bStack.push(b); - - // Recursively compare objects and arrays. - if (areArrays) { - // Compare array lengths to determine if a deep comparison is necessary. - length = a.length; - if (length !== b.length) return false; - // Deep compare the contents, ignoring non-numeric properties. - while (length--) { - if (!eq(a[length], b[length], aStack, bStack)) return false; - } - } else { - // Deep compare objects. - var keys = _.keys(a), key; - length = keys.length; - // Ensure that both objects contain the same number of properties before comparing deep equality. - if (_.keys(b).length !== length) return false; - while (length--) { - // Deep compare each member - key = keys[length]; - if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false; - } - } - // Remove the first object from the stack of traversed objects. - aStack.pop(); - bStack.pop(); - return true; - }; - - // Perform a deep comparison to check if two objects are equal. - _.isEqual = function(a, b) { - return eq(a, b); - }; - - // Is a given array, string, or object empty? - // An "empty" object has no enumerable own-properties. - _.isEmpty = function(obj) { - if (obj == null) return true; - if (isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0; - return _.keys(obj).length === 0; - }; - - // Is a given value a DOM element? - _.isElement = function(obj) { - return !!(obj && obj.nodeType === 1); - }; - - // Is a given value an array? - // Delegates to ECMA5's native Array.isArray - _.isArray = nativeIsArray || function(obj) { - return toString.call(obj) === '[object Array]'; - }; - - // Is a given variable an object? - _.isObject = function(obj) { - var type = typeof obj; - return type === 'function' || type === 'object' && !!obj; - }; - - // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError, isMap, isWeakMap, isSet, isWeakSet. - _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error', 'Symbol', 'Map', 'WeakMap', 'Set', 'WeakSet'], function(name) { - _['is' + name] = function(obj) { - return toString.call(obj) === '[object ' + name + ']'; - }; - }); - - // Define a fallback version of the method in browsers (ahem, IE < 9), where - // there isn't any inspectable "Arguments" type. - if (!_.isArguments(arguments)) { - _.isArguments = function(obj) { - return has(obj, 'callee'); - }; - } - - // Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8, - // IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). - var nodelist = root.document && root.document.childNodes; - if (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') { - _.isFunction = function(obj) { - return typeof obj == 'function' || false; - }; - } - - // Is a given object a finite number? - _.isFinite = function(obj) { - return !_.isSymbol(obj) && isFinite(obj) && !isNaN(parseFloat(obj)); - }; - - // Is the given value `NaN`? - _.isNaN = function(obj) { - return _.isNumber(obj) && isNaN(obj); - }; - - // Is a given value a boolean? - _.isBoolean = function(obj) { - return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; - }; - - // Is a given value equal to null? - _.isNull = function(obj) { - return obj === null; - }; - - // Is a given variable undefined? - _.isUndefined = function(obj) { - return obj === void 0; - }; - - // Shortcut function for checking if an object has a given property directly - // on itself (in other words, not on a prototype). - _.has = function(obj, path) { - if (!_.isArray(path)) { - return has(obj, path); - } - var length = path.length; - for (var i = 0; i < length; i++) { - var key = path[i]; - if (obj == null || !hasOwnProperty.call(obj, key)) { - return false; - } - obj = obj[key]; - } - return !!length; - }; - - // Utility Functions - // ----------------- - - // Run Underscore.js in *noConflict* mode, returning the `_` variable to its - // previous owner. Returns a reference to the Underscore object. - _.noConflict = function() { - root._ = previousUnderscore; - return this; - }; - - // Keep the identity function around for default iteratees. - _.identity = function(value) { - return value; - }; - - // Predicate-generating functions. Often useful outside of Underscore. - _.constant = function(value) { - return function() { - return value; - }; - }; - - _.noop = function(){}; - - // Creates a function that, when passed an object, will traverse that object’s - // properties down the given `path`, specified as an array of keys or indexes. - _.property = function(path) { - if (!_.isArray(path)) { - return shallowProperty(path); - } - return function(obj) { - return deepGet(obj, path); - }; - }; - - // Generates a function for a given object that returns a given property. - _.propertyOf = function(obj) { - if (obj == null) { - return function(){}; - } - return function(path) { - return !_.isArray(path) ? obj[path] : deepGet(obj, path); - }; - }; - - // Returns a predicate for checking whether an object has a given set of - // `key:value` pairs. - _.matcher = _.matches = function(attrs) { - attrs = _.extendOwn({}, attrs); - return function(obj) { - return _.isMatch(obj, attrs); - }; - }; - - // Run a function **n** times. - _.times = function(n, iteratee, context) { - var accum = Array(Math.max(0, n)); - iteratee = optimizeCb(iteratee, context, 1); - for (var i = 0; i < n; i++) accum[i] = iteratee(i); - return accum; - }; - - // Return a random integer between min and max (inclusive). - _.random = function(min, max) { - if (max == null) { - max = min; - min = 0; - } - return min + Math.floor(Math.random() * (max - min + 1)); - }; - - // A (possibly faster) way to get the current timestamp as an integer. - _.now = Date.now || function() { - return new Date().getTime(); - }; - - // List of HTML entities for escaping. - var escapeMap = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''', - '`': '`' - }; - var unescapeMap = _.invert(escapeMap); - - // Functions for escaping and unescaping strings to/from HTML interpolation. - var createEscaper = function(map) { - var escaper = function(match) { - return map[match]; - }; - // Regexes for identifying a key that needs to be escaped. - var source = '(?:' + _.keys(map).join('|') + ')'; - var testRegexp = RegExp(source); - var replaceRegexp = RegExp(source, 'g'); - return function(string) { - string = string == null ? '' : '' + string; - return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string; - }; - }; - _.escape = createEscaper(escapeMap); - _.unescape = createEscaper(unescapeMap); - - // Traverses the children of `obj` along `path`. If a child is a function, it - // is invoked with its parent as context. Returns the value of the final - // child, or `fallback` if any child is undefined. - _.result = function(obj, path, fallback) { - if (!_.isArray(path)) path = [path]; - var length = path.length; - if (!length) { - return _.isFunction(fallback) ? fallback.call(obj) : fallback; - } - for (var i = 0; i < length; i++) { - var prop = obj == null ? void 0 : obj[path[i]]; - if (prop === void 0) { - prop = fallback; - i = length; // Ensure we don't continue iterating. - } - obj = _.isFunction(prop) ? prop.call(obj) : prop; - } - return obj; - }; - - // Generate a unique integer id (unique within the entire client session). - // Useful for temporary DOM ids. - var idCounter = 0; - _.uniqueId = function(prefix) { - var id = ++idCounter + ''; - return prefix ? prefix + id : id; - }; - - // By default, Underscore uses ERB-style template delimiters, change the - // following template settings to use alternative delimiters. - _.templateSettings = { - evaluate: /<%([\s\S]+?)%>/g, - interpolate: /<%=([\s\S]+?)%>/g, - escape: /<%-([\s\S]+?)%>/g - }; - - // When customizing `templateSettings`, if you don't want to define an - // interpolation, evaluation or escaping regex, we need one that is - // guaranteed not to match. - var noMatch = /(.)^/; - - // Certain characters need to be escaped so that they can be put into a - // string literal. - var escapes = { - "'": "'", - '\\': '\\', - '\r': 'r', - '\n': 'n', - '\u2028': 'u2028', - '\u2029': 'u2029' - }; - - var escapeRegExp = /\\|'|\r|\n|\u2028|\u2029/g; - - var escapeChar = function(match) { - return '\\' + escapes[match]; - }; - - // JavaScript micro-templating, similar to John Resig's implementation. - // Underscore templating handles arbitrary delimiters, preserves whitespace, - // and correctly escapes quotes within interpolated code. - // NB: `oldSettings` only exists for backwards compatibility. - _.template = function(text, settings, oldSettings) { - if (!settings && oldSettings) settings = oldSettings; - settings = _.defaults({}, settings, _.templateSettings); - - // Combine delimiters into one regular expression via alternation. - var matcher = RegExp([ - (settings.escape || noMatch).source, - (settings.interpolate || noMatch).source, - (settings.evaluate || noMatch).source - ].join('|') + '|$', 'g'); - - // Compile the template source, escaping string literals appropriately. - var index = 0; - var source = "__p+='"; - text.replace(matcher, function(match, escape, interpolate, evaluate, offset) { - source += text.slice(index, offset).replace(escapeRegExp, escapeChar); - index = offset + match.length; - - if (escape) { - source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'"; - } else if (interpolate) { - source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'"; - } else if (evaluate) { - source += "';\n" + evaluate + "\n__p+='"; - } - - // Adobe VMs need the match returned to produce the correct offset. - return match; - }); - source += "';\n"; - - // If a variable is not specified, place data values in local scope. - if (!settings.variable) source = 'with(obj||{}){\n' + source + '}\n'; - - source = "var __t,__p='',__j=Array.prototype.join," + - "print=function(){__p+=__j.call(arguments,'');};\n" + - source + 'return __p;\n'; - - var render; - try { - render = new Function(settings.variable || 'obj', '_', source); - } catch (e) { - e.source = source; - throw e; - } - - var template = function(data) { - return render.call(this, data, _); - }; - - // Provide the compiled source as a convenience for precompilation. - var argument = settings.variable || 'obj'; - template.source = 'function(' + argument + '){\n' + source + '}'; - - return template; - }; - - // Add a "chain" function. Start chaining a wrapped Underscore object. - _.chain = function(obj) { - var instance = _(obj); - instance._chain = true; - return instance; - }; - - // OOP - // --------------- - // If Underscore is called as a function, it returns a wrapped object that - // can be used OO-style. This wrapper holds altered versions of all the - // underscore functions. Wrapped objects may be chained. - - // Helper function to continue chaining intermediate results. - var chainResult = function(instance, obj) { - return instance._chain ? _(obj).chain() : obj; - }; - - // Add your own custom functions to the Underscore object. - _.mixin = function(obj) { - _.each(_.functions(obj), function(name) { - var func = _[name] = obj[name]; - _.prototype[name] = function() { - var args = [this._wrapped]; - push.apply(args, arguments); - return chainResult(this, func.apply(_, args)); - }; - }); - return _; - }; - - // Add all of the Underscore functions to the wrapper object. - _.mixin(_); - - // Add all mutator Array functions to the wrapper. - _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { - var method = ArrayProto[name]; - _.prototype[name] = function() { - var obj = this._wrapped; - method.apply(obj, arguments); - if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0]; - return chainResult(this, obj); - }; - }); - - // Add all accessor Array functions to the wrapper. - _.each(['concat', 'join', 'slice'], function(name) { - var method = ArrayProto[name]; - _.prototype[name] = function() { - return chainResult(this, method.apply(this._wrapped, arguments)); - }; - }); - - // Extracts the result from a wrapped and chained object. - _.prototype.value = function() { - return this._wrapped; - }; - - // Provide unwrapping proxy for some methods used in engine operations - // such as arithmetic and JSON stringification. - _.prototype.valueOf = _.prototype.toJSON = _.prototype.value; - - _.prototype.toString = function() { - return String(this._wrapped); - }; - - // AMD registration happens at the end for compatibility with AMD loaders - // that may not enforce next-turn semantics on modules. Even though general - // practice for AMD registration is to be anonymous, underscore registers - // as a named module because, like jQuery, it is a base library that is - // popular enough to be bundled in a third party lib, but not be part of - // an AMD load request. Those cases could generate an error when an - // anonymous define() is called outside of a loader request. - if (true) { - !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function() { - return _; - }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), - __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - } -}()); - -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(35), __webpack_require__(36)(module))) - -/***/ }), -/* 35 */ -/***/ (function(module, exports) { - -var g; - -// This works in non-strict mode -g = (function() { - return this; -})(); - -try { - // This works if eval is allowed (see CSP) - g = g || Function("return this")() || (1,eval)("this"); -} catch(e) { - // This works if the window reference is available - if(typeof window === "object") - g = window; -} - -// g can still be undefined, but nothing to do about it... -// We return undefined, instead of nothing here, so it's -// easier to handle this case. if(!global) { ...} - -module.exports = g; - - -/***/ }), -/* 36 */ -/***/ (function(module, exports) { - -module.exports = function(module) { - if(!module.webpackPolyfill) { - module.deprecate = function() {}; - module.paths = []; - // module.parent = undefined by default - if(!module.children) module.children = []; - Object.defineProperty(module, "loaded", { - enumerable: true, - get: function() { - return module.l; - } - }); - Object.defineProperty(module, "id", { - enumerable: true, - get: function() { - return module.i; - } - }); - module.webpackPolyfill = 1; - } - return module; -}; - - -/***/ }), -/* 37 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.CheckBox = undefined; - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = __webpack_require__(1); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _const = __webpack_require__(3); - -var _const2 = _interopRequireDefault(_const); - -var _bootstrap = __webpack_require__(5); - -var _utils = __webpack_require__(2); - -var _utils2 = _interopRequireDefault(_utils); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint react/require-default-props: 0 */ - - -var CheckBox = exports.CheckBox = function CheckBox(_ref) { - var className = _ref.className, - checked = _ref.checked, - indeterminate = _ref.indeterminate; - return _react2.default.createElement('input', { - type: 'checkbox', - checked: checked, - className: className, - ref: function ref(input) { - if (input) input.indeterminate = indeterminate; // eslint-disable-line no-param-reassign - }, - onChange: function onChange() {} - }); -}; - -CheckBox.propTypes = { - checked: _propTypes2.default.bool.isRequired, - indeterminate: _propTypes2.default.bool.isRequired, - className: _propTypes2.default.string -}; - -var SelectionHeaderCell = function (_Component) { - _inherits(SelectionHeaderCell, _Component); - - function SelectionHeaderCell() { - _classCallCheck(this, SelectionHeaderCell); - - var _this = _possibleConstructorReturn(this, (SelectionHeaderCell.__proto__ || Object.getPrototypeOf(SelectionHeaderCell)).call(this)); - - _this.handleCheckBoxClick = _this.handleCheckBoxClick.bind(_this); - return _this; - } - - /** - * avoid updating if button is - * 1. radio - * 2. status was not changed. - */ - - - _createClass(SelectionHeaderCell, [{ - key: 'shouldComponentUpdate', - value: function shouldComponentUpdate(nextProps) { - var ROW_SELECT_SINGLE = _const2.default.ROW_SELECT_SINGLE; - var _props = this.props, - mode = _props.mode, - checkedStatus = _props.checkedStatus; - - - if (mode === ROW_SELECT_SINGLE) return false; - - return nextProps.checkedStatus !== checkedStatus; - } - }, { - key: 'handleCheckBoxClick', - value: function handleCheckBoxClick(e) { - var _props2 = this.props, - onAllRowsSelect = _props2.onAllRowsSelect, - checkedStatus = _props2.checkedStatus; - - var isUnSelect = checkedStatus === _const2.default.CHECKBOX_STATUS_CHECKED || checkedStatus === _const2.default.CHECKBOX_STATUS_INDETERMINATE; - - onAllRowsSelect(e, isUnSelect); - } - }, { - key: 'render', - value: function render() { - var _this2 = this; - - var CHECKBOX_STATUS_CHECKED = _const2.default.CHECKBOX_STATUS_CHECKED, - CHECKBOX_STATUS_INDETERMINATE = _const2.default.CHECKBOX_STATUS_INDETERMINATE, - ROW_SELECT_MULTIPLE = _const2.default.ROW_SELECT_MULTIPLE; - var _props3 = this.props, - mode = _props3.mode, - checkedStatus = _props3.checkedStatus, - selectionHeaderRenderer = _props3.selectionHeaderRenderer, - hideSelectAll = _props3.hideSelectAll, - headerColumnStyle = _props3.headerColumnStyle; - - if (hideSelectAll) { - return _react2.default.createElement('th', { 'data-row-selection': true }); - } - - var checked = checkedStatus === CHECKBOX_STATUS_CHECKED; - - var indeterminate = checkedStatus === CHECKBOX_STATUS_INDETERMINATE; - - var attrs = {}; - var content = void 0; - if (selectionHeaderRenderer || mode === ROW_SELECT_MULTIPLE) { - attrs.onClick = this.handleCheckBoxClick; - } - - attrs.style = _utils2.default.isFunction(headerColumnStyle) ? headerColumnStyle(checkedStatus) : headerColumnStyle; - - return _react2.default.createElement( - _bootstrap.BootstrapContext.Consumer, - null, - function (_ref2) { - var bootstrap4 = _ref2.bootstrap4; - - if (selectionHeaderRenderer) { - content = selectionHeaderRenderer({ - mode: mode, - checked: checked, - indeterminate: indeterminate - }); - } else if (mode === ROW_SELECT_MULTIPLE) { - content = _react2.default.createElement(CheckBox, _extends({}, _this2.props, { - checked: checked, - className: bootstrap4 ? 'selection-input-4' : '', - indeterminate: indeterminate - })); - } - return _react2.default.createElement( - 'th', - _extends({ className: 'selection-cell-header', 'data-row-selection': true }, attrs), - content - ); - } - ); - } - }]); - - return SelectionHeaderCell; -}(_react.Component); - -SelectionHeaderCell.propTypes = { - mode: _propTypes2.default.string.isRequired, - checkedStatus: _propTypes2.default.string, - onAllRowsSelect: _propTypes2.default.func, - hideSelectAll: _propTypes2.default.bool, - selectionHeaderRenderer: _propTypes2.default.func, - headerColumnStyle: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.func]) -}; -exports.default = SelectionHeaderCell; - -/***/ }), -/* 38 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = __webpack_require__(1); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint react/require-default-props: 0 */ -/* eslint no-nested-ternary: 0 */ - - -var ExpansionHeaderCell = function (_Component) { - _inherits(ExpansionHeaderCell, _Component); - - function ExpansionHeaderCell() { - _classCallCheck(this, ExpansionHeaderCell); - - var _this = _possibleConstructorReturn(this, (ExpansionHeaderCell.__proto__ || Object.getPrototypeOf(ExpansionHeaderCell)).call(this)); - - _this.handleCheckBoxClick = _this.handleCheckBoxClick.bind(_this); - return _this; - } - - _createClass(ExpansionHeaderCell, [{ - key: 'handleCheckBoxClick', - value: function handleCheckBoxClick(e) { - var _props = this.props, - isAnyExpands = _props.isAnyExpands, - onAllRowExpand = _props.onAllRowExpand; - - - onAllRowExpand(e, !isAnyExpands); - } - }, { - key: 'render', - value: function render() { - var _props2 = this.props, - isAnyExpands = _props2.isAnyExpands, - expandHeaderColumnRenderer = _props2.expandHeaderColumnRenderer; - - var attrs = { - onClick: this.handleCheckBoxClick - }; - - return _react2.default.createElement( - 'th', - _extends({ className: 'expand-cell-header', 'data-row-selection': true }, attrs), - expandHeaderColumnRenderer ? expandHeaderColumnRenderer({ isAnyExpands: isAnyExpands }) : isAnyExpands ? '(-)' : '(+)' - ); - } - }]); - - return ExpansionHeaderCell; -}(_react.Component); - -ExpansionHeaderCell.propTypes = { - isAnyExpands: _propTypes2.default.bool.isRequired, - onAllRowExpand: _propTypes2.default.func.isRequired, - expandHeaderColumnRenderer: _propTypes2.default.func -}; -exports.default = ExpansionHeaderCell; - -/***/ }), -/* 39 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _selectionContext = __webpack_require__(10); - -var _selectionContext2 = _interopRequireDefault(_selectionContext); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -exports.default = function (Component) { - return function () { - return _react2.default.createElement( - _selectionContext2.default.Consumer, - null, - function (selectRow) { - return _react2.default.createElement(Component, selectRow); - } - ); - }; -}; - -/***/ }), -/* 40 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.getExpandedRows = exports.expandableKeys = exports.isAnyExpands = undefined; - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -var _utils = __webpack_require__(2); - -var _utils2 = _interopRequireDefault(_utils); - -var _rows = __webpack_require__(6); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var isAnyExpands = exports.isAnyExpands = function isAnyExpands(data, keyField) { - var expanded = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : []; - - var _loop = function _loop(i) { - var rowKey = _utils2.default.get(data[i], keyField); - if (typeof expanded.find(function (x) { - return x === rowKey; - }) !== 'undefined') { - return { - v: true - }; - } - }; - - for (var i = 0; i < data.length; i += 1) { - var _ret = _loop(i); - - if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v; - } - return false; -}; - -var expandableKeys = exports.expandableKeys = function expandableKeys(data, keyField) { - var skips = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : []; - - if (skips.length === 0) { - return data.map(function (row) { - return _utils2.default.get(row, keyField); - }); - } - return data.filter(function (row) { - return !_utils2.default.contains(skips, _utils2.default.get(row, keyField)); - }).map(function (row) { - return _utils2.default.get(row, keyField); - }); -}; - -var getExpandedRows = exports.getExpandedRows = function getExpandedRows(data, keyField, expanded) { - return expanded.map(function (k) { - return (0, _rows.getRowByRowId)(data, keyField, k); - }); -}; - -/***/ }), -/* 41 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.editCell = undefined; - -var _utils = __webpack_require__(2); - -var _utils2 = _interopRequireDefault(_utils); - -var _rows = __webpack_require__(6); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var editCell = exports.editCell = function editCell(data, keyField, rowId, dataField, newValue) { - var row = (0, _rows.getRowByRowId)(data, keyField, rowId); - if (row) _utils2.default.set(row, dataField, newValue); -}; - -/***/ }), -/* 42 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.nextOrder = exports.sort = undefined; - -var _utils = __webpack_require__(2); - -var _utils2 = _interopRequireDefault(_utils); - -var _const = __webpack_require__(3); - -var _const2 = _interopRequireDefault(_const); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } /* eslint no-nested-ternary: 0 */ -/* eslint no-lonely-if: 0 */ -/* eslint no-underscore-dangle: 0 */ - - -function comparator(a, b) { - var result = void 0; - if (typeof b === 'string') { - result = b.localeCompare(a); - } else { - result = a > b ? -1 : a < b ? 1 : 0; - } - return result; -} - -var sort = exports.sort = function sort(data, sortOrder, _ref) { - var dataField = _ref.dataField, - sortFunc = _ref.sortFunc, - sortValue = _ref.sortValue; - - var _data = [].concat(_toConsumableArray(data)); - _data.sort(function (a, b) { - var result = void 0; - var valueA = _utils2.default.get(a, dataField); - var valueB = _utils2.default.get(b, dataField); - if (sortValue) { - valueA = sortValue(valueA, a); - valueB = sortValue(valueB, b); - } else { - valueA = _utils2.default.isDefined(valueA) ? valueA : ''; - valueB = _utils2.default.isDefined(valueB) ? valueB : ''; - } - - if (sortFunc) { - result = sortFunc(valueA, valueB, sortOrder, dataField, a, b); - } else { - if (sortOrder === _const2.default.SORT_DESC) { - result = comparator(valueA, valueB); - } else { - result = comparator(valueB, valueA); - } - } - return result; - }); - return _data; -}; - -var nextOrder = exports.nextOrder = function nextOrder(currentSortColumn, _ref2) { - var sortOrder = _ref2.sortOrder, - sortColumn = _ref2.sortColumn; - var defaultOrder = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _const2.default.SORT_DESC; - - if (!sortColumn || currentSortColumn.dataField !== sortColumn.dataField) return defaultOrder; - return sortOrder === _const2.default.SORT_DESC ? _const2.default.SORT_ASC : _const2.default.SORT_DESC; -}; - -/***/ }), -/* 43 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.typeConvert = undefined; - -var _const = __webpack_require__(3); - -var _const2 = _interopRequireDefault(_const); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var typeConvert = exports.typeConvert = function typeConvert(type, value) { - if (type === _const2.default.TYPE_STRING) { - return String(value); - } else if (type === _const2.default.TYPE_NUMBER) { - return Number(value); - } else if (type === _const2.default.TYPE_BOOLEAN) { - if (typeof value === 'boolean') { - return value; - } - return value === 'true'; - } else if (type === _const2.default.TYPE_DATE) { - return new Date(value); - } - return value; -}; - -/***/ }), -/* 44 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _rowExpandContext = __webpack_require__(12); - -var _rowExpandContext2 = _interopRequireDefault(_rowExpandContext); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -exports.default = function (Component) { - return function () { - return _react2.default.createElement( - _rowExpandContext2.default.Consumer, - null, - function (expandRow) { - return _react2.default.createElement(Component, expandRow); - } - ); - }; -}; - -/***/ }), -/* 45 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = __webpack_require__(1); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _filtersCell = __webpack_require__(46); - -var _filtersCell2 = _interopRequireDefault(_filtersCell); - -var _const = __webpack_require__(3); - -var _const2 = _interopRequireDefault(_const); - -var _rowTemplate = __webpack_require__(14); - -var _rowTemplate2 = _interopRequireDefault(_rowTemplate); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var Filters = function Filters(props) { - var columns = props.columns, - onFilter = props.onFilter, - currFilters = props.currFilters, - filterPosition = props.filterPosition, - onExternalFilter = props.onExternalFilter, - className = props.className, - selectRow = props.selectRow, - expandRow = props.expandRow; - - - function renderContent() { - var filterColumns = []; - var showFiltersRow = false; - - columns.forEach(function (column, i) { - filterColumns.push(_react2.default.createElement(_filtersCell2.default, { - index: i, - key: column.dataField, - column: column, - currFilters: currFilters, - onExternalFilter: onExternalFilter, - onFilter: onFilter - })); - - if (column.filterRenderer || column.filter) { - if (!showFiltersRow) { - showFiltersRow = true; - } - } - }); - return filterColumns; - } - - return _react2.default.createElement( - 'tbody', - { - className: className, - style: { - display: filterPosition === _const2.default.FILTERS_POSITION_TOP ? 'table-header-group' : 'table-footer-group' - } - }, - _react2.default.createElement(_rowTemplate2.default, { - renderContent: renderContent, - selectRow: selectRow, - expandRow: expandRow, - cellEl: 'td' - }) - ); -}; /* eslint react/require-default-props: 0 */ - - -Filters.propTypes = { - columns: _propTypes2.default.array.isRequired, - onFilter: _propTypes2.default.func, - filterPosition: _propTypes2.default.oneOf([_const2.default.FILTERS_POSITION_TOP, _const2.default.FILTERS_POSITION_INLINE, _const2.default.FILTERS_POSITION_BOTTOM]), - currFilters: _propTypes2.default.object, - onExternalFilter: _propTypes2.default.func, - className: _propTypes2.default.string, - selectRow: _propTypes2.default.object, - expandRow: _propTypes2.default.object -}; - -Filters.defaultProps = { - position: _const2.default.FILTERS_POSITION_TOP -}; - -exports.default = Filters; - -/***/ }), -/* 46 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = __webpack_require__(1); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _utils = __webpack_require__(2); - -var _utils2 = _interopRequireDefault(_utils); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var FiltersCell = function FiltersCell(props) { - var index = props.index, - column = props.column, - onExternalFilter = props.onExternalFilter, - currFilters = props.currFilters, - onFilter = props.onFilter; - var filterRenderer = column.filterRenderer, - filter = column.filter; - - var filterElm = void 0; - var cellAttrs = {}; - var cellStyle = {}; - cellAttrs.style = cellStyle; - if (column.headerAlign) { - cellStyle.textAlign = _utils2.default.isFunction(column.headerAlign) ? column.headerAlign(column, index) : column.headerAlign; - } - if (column.filterRenderer) { - var onCustomFilter = onExternalFilter(column, filter.props.type); - filterElm = filterRenderer(onCustomFilter, column); - } else if (filter) { - filterElm = _react2.default.createElement(filter.Filter, _extends({}, filter.props, { - filterState: currFilters[column.dataField], - onFilter: onFilter, - column: column - })); - } - return _react2.default.createElement('th', cellAttrs, filterElm); -}; - -FiltersCell.propTypes = { - index: _propTypes2.default.number.isRequired, - column: _propTypes2.default.object.isRequired, - currFilters: _propTypes2.default.object.isRequired, - onFilter: _propTypes2.default.func, - onExternalFilter: _propTypes2.default.func -}; - -FiltersCell.defaultProps = { - onFilter: function onFilter() {}, - onExternalFilter: function onExternalFilter() {} -}; - -exports.default = FiltersCell; - -/***/ }), -/* 47 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = __webpack_require__(1); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/* eslint react/require-default-props: 0 */ -var Caption = function Caption(props) { - if (!props.children) return null; - - var caption = props.bootstrap4 ? _react2.default.createElement( - 'caption', - { style: { captionSide: 'top' } }, - props.children - ) : _react2.default.createElement( - 'caption', - null, - props.children - ); - - return caption; -}; - -Caption.propTypes = { - children: _propTypes2.default.oneOfType([_propTypes2.default.node, _propTypes2.default.string]), - bootstrap4: _propTypes2.default.bool -}; - -exports.default = Caption; - -/***/ }), -/* 48 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = __webpack_require__(1); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _utils = __webpack_require__(2); - -var _utils2 = _interopRequireDefault(_utils); - -var _simpleRow = __webpack_require__(49); - -var _simpleRow2 = _interopRequireDefault(_simpleRow); - -var _aggregateRow = __webpack_require__(51); - -var _aggregateRow2 = _interopRequireDefault(_aggregateRow); - -var _rowSection = __webpack_require__(54); - -var _rowSection2 = _interopRequireDefault(_rowSection); - -var _const = __webpack_require__(3); - -var _const2 = _interopRequireDefault(_const); - -var _rowConsumer = __webpack_require__(55); - -var _rowConsumer2 = _interopRequireDefault(_rowConsumer); - -var _rowConsumer3 = __webpack_require__(56); - -var _rowConsumer4 = _interopRequireDefault(_rowConsumer3); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint react/prop-types: 0 */ -/* eslint react/require-default-props: 0 */ - -var Body = function (_React$Component) { - _inherits(Body, _React$Component); - - function Body(props) { - _classCallCheck(this, Body); - - var _this = _possibleConstructorReturn(this, (Body.__proto__ || Object.getPrototypeOf(Body)).call(this, props)); - - var keyField = props.keyField, - cellEdit = props.cellEdit, - selectRow = props.selectRow, - expandRow = props.expandRow; - - // Construct Editing Cell Component - - if (cellEdit.createContext) { - _this.EditingCell = cellEdit.createEditingCell(_utils2.default, cellEdit.options.onStartEdit); - } - - // Construct Row Component - var RowComponent = _simpleRow2.default; - var selectRowEnabled = selectRow.mode !== _const2.default.ROW_SELECT_DISABLED; - var expandRowEnabled = !!expandRow.renderer; - - if (expandRowEnabled) { - RowComponent = (0, _rowConsumer4.default)(_aggregateRow2.default); - } - - if (selectRowEnabled) { - RowComponent = (0, _rowConsumer2.default)(expandRowEnabled ? RowComponent : _aggregateRow2.default); - } - - if (cellEdit.createContext) { - RowComponent = cellEdit.withRowLevelCellEdit(RowComponent, selectRowEnabled, keyField, _utils2.default); - } - _this.RowComponent = RowComponent; - return _this; - } - - _createClass(Body, [{ - key: 'render', - value: function render() { - var _this2 = this; - - var _props = this.props, - columns = _props.columns, - data = _props.data, - tabIndexCell = _props.tabIndexCell, - keyField = _props.keyField, - isEmpty = _props.isEmpty, - noDataIndication = _props.noDataIndication, - visibleColumnSize = _props.visibleColumnSize, - cellEdit = _props.cellEdit, - selectRow = _props.selectRow, - rowStyle = _props.rowStyle, - rowClasses = _props.rowClasses, - rowEvents = _props.rowEvents, - expandRow = _props.expandRow, - className = _props.className; - - - var content = void 0; - - if (isEmpty) { - var indication = _utils2.default.isFunction(noDataIndication) ? noDataIndication() : noDataIndication; - if (!indication) { - return null; - } - content = _react2.default.createElement(_rowSection2.default, { content: indication, colSpan: visibleColumnSize }); - } else { - var selectRowEnabled = selectRow.mode !== _const2.default.ROW_SELECT_DISABLED; - var expandRowEnabled = !!expandRow.renderer; - - var additionalRowProps = {}; - - if (cellEdit.createContext) { - additionalRowProps.EditingCellComponent = this.EditingCell; - } - - if (selectRowEnabled || expandRowEnabled) { - additionalRowProps.expandRow = expandRow; - additionalRowProps.selectRow = selectRow; - } - - content = data.map(function (row, index) { - var key = _utils2.default.get(row, keyField); - var baseRowProps = _extends({ - key: key, - row: row, - tabIndexCell: tabIndexCell, - columns: columns, - keyField: keyField, - cellEdit: cellEdit, - value: key, - rowIndex: index, - visibleColumnSize: visibleColumnSize, - attrs: rowEvents || {} - }, additionalRowProps); - - baseRowProps.style = _utils2.default.isFunction(rowStyle) ? rowStyle(row, index) : rowStyle; - baseRowProps.className = _utils2.default.isFunction(rowClasses) ? rowClasses(row, index) : rowClasses; - - return _react2.default.createElement(_this2.RowComponent, baseRowProps); - }); - } - - return _react2.default.createElement( - 'tbody', - { className: className }, - content - ); - } - }]); - - return Body; -}(_react2.default.Component); - -Body.propTypes = { - keyField: _propTypes2.default.string.isRequired, - data: _propTypes2.default.array.isRequired, - columns: _propTypes2.default.array.isRequired, - selectRow: _propTypes2.default.object -}; - -exports.default = Body; - -/***/ }), -/* 49 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = __webpack_require__(1); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _rowPureContent = __webpack_require__(15); - -var _rowPureContent2 = _interopRequireDefault(_rowPureContent); - -var _eventDelegater = __webpack_require__(16); - -var _eventDelegater2 = _interopRequireDefault(_eventDelegater); - -var _shouldUpdater2 = __webpack_require__(17); - -var _shouldUpdater3 = _interopRequireDefault(_shouldUpdater2); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint react/prop-types: 0 */ -/* eslint react/no-array-index-key: 0 */ - - -var SimpleRow = function (_shouldUpdater) { - _inherits(SimpleRow, _shouldUpdater); - - function SimpleRow(props) { - _classCallCheck(this, SimpleRow); - - var _this = _possibleConstructorReturn(this, (SimpleRow.__proto__ || Object.getPrototypeOf(SimpleRow)).call(this, props)); - - _this.shouldUpdateRowContent = false; - return _this; - } - - _createClass(SimpleRow, [{ - key: 'shouldComponentUpdate', - value: function shouldComponentUpdate(nextProps) { - this.shouldUpdateRowContent = false; - this.shouldUpdateRowContent = this.shouldRowContentUpdate(nextProps); - if (this.shouldUpdateRowContent) return true; - - return this.shouldUpdatedBySelfProps(nextProps); - } - }, { - key: 'render', - value: function render() { - var _props = this.props, - className = _props.className, - style = _props.style, - attrs = _props.attrs, - visibleColumnSize = _props.visibleColumnSize, - tabIndexCell = _props.tabIndexCell, - rest = _objectWithoutProperties(_props, ['className', 'style', 'attrs', 'visibleColumnSize', 'tabIndexCell']); - - var trAttrs = this.delegate(attrs); - var tabIndexStart = this.props.rowIndex * visibleColumnSize + 1; - - return _react2.default.createElement( - 'tr', - _extends({ style: style, className: className }, trAttrs), - _react2.default.createElement(_rowPureContent2.default, _extends({ - shouldUpdate: this.shouldUpdateRowContent, - tabIndexStart: tabIndexCell ? tabIndexStart : -1 - }, rest)) - ); - } - }]); - - return SimpleRow; -}((0, _shouldUpdater3.default)((0, _eventDelegater2.default)(_react.Component))); - -SimpleRow.propTypes = { - row: _propTypes2.default.object.isRequired, - rowIndex: _propTypes2.default.number.isRequired, - columns: _propTypes2.default.array.isRequired, - style: _propTypes2.default.object, - className: _propTypes2.default.string, - attrs: _propTypes2.default.object -}; - -SimpleRow.defaultProps = { - editable: true, - style: {}, - className: null, - attrs: {} -}; - -exports.default = SimpleRow; - -/***/ }), -/* 50 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = __webpack_require__(1); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _cellEventDelegater = __webpack_require__(9); - -var _cellEventDelegater2 = _interopRequireDefault(_cellEventDelegater); - -var _utils = __webpack_require__(2); - -var _utils2 = _interopRequireDefault(_utils); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint react/prop-types: 0 */ - - -var Cell = function (_eventDelegater) { - _inherits(Cell, _eventDelegater); - - function Cell(props) { - _classCallCheck(this, Cell); - - var _this = _possibleConstructorReturn(this, (Cell.__proto__ || Object.getPrototypeOf(Cell)).call(this, props)); - - _this.createHandleEditingCell = function (originFunc) { - return function (e) { - var _this$props = _this.props, - onStart = _this$props.onStart, - rowIndex = _this$props.rowIndex, - columnIndex = _this$props.columnIndex, - clickToEdit = _this$props.clickToEdit, - dbclickToEdit = _this$props.dbclickToEdit; - - if ((clickToEdit || dbclickToEdit) && _utils2.default.isFunction(originFunc)) { - originFunc(e); - } - if (onStart) { - onStart(rowIndex, columnIndex); - } - }; - }; - - _this.createHandleEditingCell = _this.createHandleEditingCell.bind(_this); - return _this; - } - - _createClass(Cell, [{ - key: 'shouldComponentUpdate', - value: function shouldComponentUpdate(nextProps) { - var shouldUpdate = false; - if (nextProps.column.isDummyField) { - shouldUpdate = !_utils2.default.isEqual(this.props.row, nextProps.row); - } else { - shouldUpdate = _utils2.default.get(this.props.row, this.props.column.dataField) !== _utils2.default.get(nextProps.row, nextProps.column.dataField); - } - - if (shouldUpdate) return true; - - // if (nextProps.formatter) - - shouldUpdate = (nextProps.column.formatter ? !_utils2.default.isEqual(this.props.row, nextProps.row) : false) || this.props.column.hidden !== nextProps.column.hidden || this.props.column.isDummyField !== nextProps.column.isDummyField || this.props.rowIndex !== nextProps.rowIndex || this.props.columnIndex !== nextProps.columnIndex || this.props.className !== nextProps.className || this.props.title !== nextProps.title || this.props.editable !== nextProps.editable || this.props.clickToEdit !== nextProps.clickToEdit || this.props.dbclickToEdit !== nextProps.dbclickToEdit || !_utils2.default.isEqual(this.props.style, nextProps.style) || !_utils2.default.isEqual(this.props.column.formatExtraData, nextProps.column.formatExtraData) || !_utils2.default.isEqual(this.props.column.events, nextProps.column.events) || !_utils2.default.isEqual(this.props.column.attrs, nextProps.column.attrs) || this.props.tabIndex !== nextProps.tabIndex; - return shouldUpdate; - } - }, { - key: 'render', - value: function render() { - var _props = this.props, - row = _props.row, - rowIndex = _props.rowIndex, - column = _props.column, - columnIndex = _props.columnIndex, - onStart = _props.onStart, - editable = _props.editable, - clickToEdit = _props.clickToEdit, - dbclickToEdit = _props.dbclickToEdit, - rest = _objectWithoutProperties(_props, ['row', 'rowIndex', 'column', 'columnIndex', 'onStart', 'editable', 'clickToEdit', 'dbclickToEdit']); - - var dataField = column.dataField, - formatter = column.formatter, - formatExtraData = column.formatExtraData; - - var attrs = this.delegate(_extends({}, rest)); - var content = column.isDummyField ? null : _utils2.default.get(row, dataField); - - if (formatter) { - content = column.formatter(content, row, rowIndex, formatExtraData); - } - - if (clickToEdit && editable) { - attrs.onClick = this.createHandleEditingCell(attrs.onClick); - } else if (dbclickToEdit && editable) { - attrs.onDoubleClick = this.createHandleEditingCell(attrs.onDoubleClick); - } - - return _react2.default.createElement( - 'td', - attrs, - typeof content === 'boolean' ? '' + content : content - ); - } - }]); - - return Cell; -}((0, _cellEventDelegater2.default)(_react.Component)); - -Cell.propTypes = { - row: _propTypes2.default.object.isRequired, - rowIndex: _propTypes2.default.number.isRequired, - column: _propTypes2.default.object.isRequired, - columnIndex: _propTypes2.default.number.isRequired -}; - -exports.default = Cell; - -/***/ }), -/* 51 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = __webpack_require__(1); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _utils = __webpack_require__(2); - -var _utils2 = _interopRequireDefault(_utils); - -var _expandCell = __webpack_require__(52); - -var _expandCell2 = _interopRequireDefault(_expandCell); - -var _selectionCell = __webpack_require__(53); - -var _selectionCell2 = _interopRequireDefault(_selectionCell); - -var _shouldUpdater2 = __webpack_require__(17); - -var _shouldUpdater3 = _interopRequireDefault(_shouldUpdater2); - -var _eventDelegater = __webpack_require__(16); - -var _eventDelegater2 = _interopRequireDefault(_eventDelegater); - -var _rowPureContent = __webpack_require__(15); - -var _rowPureContent2 = _interopRequireDefault(_rowPureContent); - -var _const = __webpack_require__(3); - -var _const2 = _interopRequireDefault(_const); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint class-methods-use-this: 0 */ -/* eslint react/prop-types: 0 */ -/* eslint no-plusplus: 0 */ - - -var RowAggregator = function (_shouldUpdater) { - _inherits(RowAggregator, _shouldUpdater); - - function RowAggregator(props) { - _classCallCheck(this, RowAggregator); - - var _this = _possibleConstructorReturn(this, (RowAggregator.__proto__ || Object.getPrototypeOf(RowAggregator)).call(this, props)); - - _this.clickNum = 0; - _this.shouldUpdateRowContent = false; - _this.createClickEventHandler = _this.createClickEventHandler.bind(_this); - return _this; - } - - _createClass(RowAggregator, [{ - key: 'shouldComponentUpdate', - value: function shouldComponentUpdate(nextProps) { - if (this.props.selected !== nextProps.selected || this.props.expanded !== nextProps.expanded || this.props.expandable !== nextProps.expandable || this.props.selectable !== nextProps.selectable || this.props.selectRow.hideSelectColumn !== nextProps.selectRow.hideSelectColumn || this.shouldUpdatedBySelfProps(nextProps)) { - this.shouldUpdateRowContent = this.shouldRowContentUpdate(nextProps); - return true; - } - this.shouldUpdateRowContent = this.shouldRowContentUpdate(nextProps); - - return this.shouldUpdateRowContent; - } - }, { - key: 'isRenderFunctionColumnInLeft', - value: function isRenderFunctionColumnInLeft() { - var position = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _const2.default.INDICATOR_POSITION_LEFT; - - return position === _const2.default.INDICATOR_POSITION_LEFT; - } - }, { - key: 'render', - value: function render() { - var _props = this.props, - row = _props.row, - columns = _props.columns, - keyField = _props.keyField, - rowIndex = _props.rowIndex, - style = _props.style, - className = _props.className, - attrs = _props.attrs, - selectRow = _props.selectRow, - expandRow = _props.expandRow, - expanded = _props.expanded, - expandable = _props.expandable, - selected = _props.selected, - selectable = _props.selectable, - visibleColumnSize = _props.visibleColumnSize, - tabIndexCell = _props.tabIndexCell, - rest = _objectWithoutProperties(_props, ['row', 'columns', 'keyField', 'rowIndex', 'style', 'className', 'attrs', 'selectRow', 'expandRow', 'expanded', 'expandable', 'selected', 'selectable', 'visibleColumnSize', 'tabIndexCell']); - - var key = _utils2.default.get(row, keyField); - var hideSelectColumn = selectRow.hideSelectColumn, - selectColumnPosition = selectRow.selectColumnPosition, - clickToSelect = selectRow.clickToSelect; - var showExpandColumn = expandRow.showExpandColumn, - expandColumnPosition = expandRow.expandColumnPosition; - - - var newAttrs = this.delegate(_extends({}, attrs)); - if (clickToSelect || !!expandRow.renderer) { - newAttrs.onClick = this.createClickEventHandler(newAttrs.onClick); - } - - var tabIndexStart = rowIndex * visibleColumnSize + 1; - - var childrens = [_react2.default.createElement(_rowPureContent2.default, _extends({ - key: 'row', - row: row, - columns: columns, - keyField: keyField, - rowIndex: rowIndex, - shouldUpdate: this.shouldUpdateRowContent, - tabIndexStart: tabIndexCell ? tabIndexStart : -1 - }, rest))]; - - if (!hideSelectColumn) { - var selectCell = _react2.default.createElement(_selectionCell2.default, _extends({}, selectRow, { - key: 'selection-cell', - rowKey: key, - rowIndex: rowIndex, - selected: selected, - disabled: !selectable, - tabIndex: tabIndexCell ? tabIndexStart++ : -1 - })); - if (this.isRenderFunctionColumnInLeft(selectColumnPosition)) { - childrens.unshift(selectCell); - } else { - childrens.push(selectCell); - } - } - - if (showExpandColumn) { - var expandCell = _react2.default.createElement(_expandCell2.default, _extends({}, expandRow, { - key: 'expand-cell', - rowKey: key, - rowIndex: rowIndex, - expanded: expanded, - expandable: expandable, - tabIndex: tabIndexCell ? tabIndexStart++ : -1 - })); - if (this.isRenderFunctionColumnInLeft(expandColumnPosition)) { - childrens.unshift(expandCell); - } else { - childrens.push(expandCell); - } - } - - return _react2.default.createElement( - 'tr', - _extends({ - style: style, - className: className - }, newAttrs), - childrens - ); - } - }]); - - return RowAggregator; -}((0, _shouldUpdater3.default)((0, _eventDelegater2.default)(_react2.default.Component))); - -RowAggregator.propTypes = { - attrs: _propTypes2.default.object, - style: _propTypes2.default.object -}; -RowAggregator.defaultProps = { - attrs: {}, - style: {} -}; -exports.default = RowAggregator; - -/***/ }), -/* 52 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = __webpack_require__(1); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint - react/require-default-props: 0 - jsx-a11y/no-noninteractive-element-interactions: 0 - */ -/* eslint no-nested-ternary: 0 */ - - -var ExpandCell = function (_Component) { - _inherits(ExpandCell, _Component); - - function ExpandCell() { - _classCallCheck(this, ExpandCell); - - var _this = _possibleConstructorReturn(this, (ExpandCell.__proto__ || Object.getPrototypeOf(ExpandCell)).call(this)); - - _this.handleClick = _this.handleClick.bind(_this); - return _this; - } - - _createClass(ExpandCell, [{ - key: 'shouldComponentUpdate', - value: function shouldComponentUpdate(nextProps) { - var shouldUpdate = this.props.rowIndex !== nextProps.rowIndex || this.props.expanded !== nextProps.expanded || this.props.rowKey !== nextProps.rowKey || this.props.tabIndex !== nextProps.tabIndex; - - return shouldUpdate; - } - }, { - key: 'handleClick', - value: function handleClick(e) { - var _props = this.props, - rowKey = _props.rowKey, - expanded = _props.expanded, - onRowExpand = _props.onRowExpand, - rowIndex = _props.rowIndex; - - e.stopPropagation(); - onRowExpand(rowKey, !expanded, rowIndex, e); - } - }, { - key: 'render', - value: function render() { - var _props2 = this.props, - expanded = _props2.expanded, - expandable = _props2.expandable, - expandColumnRenderer = _props2.expandColumnRenderer, - tabIndex = _props2.tabIndex, - rowKey = _props2.rowKey; - - var attrs = {}; - if (tabIndex !== -1) attrs.tabIndex = tabIndex; - - return _react2.default.createElement( - 'td', - _extends({ className: 'expand-cell', onClick: this.handleClick }, attrs), - expandColumnRenderer ? expandColumnRenderer({ - expandable: expandable, - expanded: expanded, - rowKey: rowKey - }) : expandable ? expanded ? '(-)' : '(+)' : '' - ); - } - }]); - - return ExpandCell; -}(_react.Component); - -ExpandCell.propTypes = { - rowKey: _propTypes2.default.any, - expanded: _propTypes2.default.bool.isRequired, - expandable: _propTypes2.default.bool.isRequired, - onRowExpand: _propTypes2.default.func.isRequired, - expandColumnRenderer: _propTypes2.default.func, - rowIndex: _propTypes2.default.number, - tabIndex: _propTypes2.default.number -}; -exports.default = ExpandCell; - -/***/ }), -/* 53 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = __webpack_require__(1); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _const = __webpack_require__(3); - -var _const2 = _interopRequireDefault(_const); - -var _utils = __webpack_require__(2); - -var _utils2 = _interopRequireDefault(_utils); - -var _bootstrap = __webpack_require__(5); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint - react/require-default-props: 0 - jsx-a11y/no-noninteractive-element-interactions: 0 - */ - - -var SelectionCell = function (_Component) { - _inherits(SelectionCell, _Component); - - function SelectionCell() { - _classCallCheck(this, SelectionCell); - - var _this = _possibleConstructorReturn(this, (SelectionCell.__proto__ || Object.getPrototypeOf(SelectionCell)).call(this)); - - _this.handleClick = _this.handleClick.bind(_this); - return _this; - } - - _createClass(SelectionCell, [{ - key: 'shouldComponentUpdate', - value: function shouldComponentUpdate(nextProps) { - var shouldUpdate = this.props.rowIndex !== nextProps.rowIndex || this.props.selected !== nextProps.selected || this.props.disabled !== nextProps.disabled || this.props.rowKey !== nextProps.rowKey || this.props.tabIndex !== nextProps.tabIndex || this.props.selectColumnStyle !== nextProps.selectColumnStyle; - - return shouldUpdate; - } - }, { - key: 'handleClick', - value: function handleClick(e) { - var _props = this.props, - inputType = _props.mode, - rowKey = _props.rowKey, - selected = _props.selected, - onRowSelect = _props.onRowSelect, - disabled = _props.disabled, - rowIndex = _props.rowIndex; - - e.stopPropagation(); - if (disabled) return; - - var checked = inputType === _const2.default.ROW_SELECT_SINGLE ? true : !selected; - - onRowSelect(rowKey, checked, rowIndex, e); - } - }, { - key: 'render', - value: function render() { - var _this2 = this; - - var _props2 = this.props, - rowKey = _props2.rowKey, - inputType = _props2.mode, - selected = _props2.selected, - disabled = _props2.disabled, - tabIndex = _props2.tabIndex, - rowIndex = _props2.rowIndex, - selectionRenderer = _props2.selectionRenderer, - selectColumnStyle = _props2.selectColumnStyle; - - - var attrs = {}; - if (tabIndex !== -1) attrs.tabIndex = tabIndex; - - attrs.style = _utils2.default.isFunction(selectColumnStyle) ? selectColumnStyle({ - checked: selected, - disabled: disabled, - rowIndex: rowIndex, - rowKey: rowKey - }) : selectColumnStyle; - - return _react2.default.createElement( - _bootstrap.BootstrapContext.Consumer, - null, - function (_ref) { - var bootstrap4 = _ref.bootstrap4; - return _react2.default.createElement( - 'td', - _extends({ className: 'selection-cell', onClick: _this2.handleClick }, attrs), - selectionRenderer ? selectionRenderer({ - mode: inputType, - checked: selected, - disabled: disabled, - rowIndex: rowIndex, - rowKey: rowKey - }) : _react2.default.createElement('input', { - type: inputType, - checked: selected, - disabled: disabled, - className: bootstrap4 ? 'selection-input-4' : '', - onChange: function onChange() {} - }) - ); - } - ); - } - }]); - - return SelectionCell; -}(_react.Component); - -SelectionCell.propTypes = { - mode: _propTypes2.default.string.isRequired, - rowKey: _propTypes2.default.any, - selected: _propTypes2.default.bool, - onRowSelect: _propTypes2.default.func, - disabled: _propTypes2.default.bool, - rowIndex: _propTypes2.default.number, - tabIndex: _propTypes2.default.number, - clickToSelect: _propTypes2.default.bool, - selectionRenderer: _propTypes2.default.func, - selectColumnStyle: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.func]) -}; -exports.default = SelectionCell; - -/***/ }), -/* 54 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = __webpack_require__(1); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var RowSection = function RowSection(_ref) { - var content = _ref.content, - colSpan = _ref.colSpan; - return _react2.default.createElement( - 'tr', - null, - _react2.default.createElement( - 'td', - { - 'data-toggle': 'collapse', - colSpan: colSpan, - className: 'react-bs-table-no-data' - }, - content - ) - ); -}; - -RowSection.propTypes = { - content: _propTypes2.default.any, - colSpan: _propTypes2.default.number -}; - -RowSection.defaultProps = { - content: null, - colSpan: 1 -}; - -exports.default = RowSection; - -/***/ }), -/* 55 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; /* eslint react/prop-types: 0 */ - - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _classnames = __webpack_require__(4); - -var _classnames2 = _interopRequireDefault(_classnames); - -var _utils = __webpack_require__(2); - -var _utils2 = _interopRequireDefault(_utils); - -var _selectionContext = __webpack_require__(10); - -var _selectionContext2 = _interopRequireDefault(_selectionContext); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -exports.default = function (Component) { - var renderWithSelection = function renderWithSelection(props, selectRow) { - var key = props.value; - var selected = _utils2.default.contains(selectRow.selected, key); - var selectable = !selectRow.nonSelectable || !_utils2.default.contains(selectRow.nonSelectable, key); - var notSelectable = _utils2.default.contains(selectRow.nonSelectable, key); - - var style = props.style, - className = props.className; - - - if (selected) { - var selectedStyle = _utils2.default.isFunction(selectRow.style) ? selectRow.style(props.row, props.rowIndex) : selectRow.style; - - var selectedClasses = _utils2.default.isFunction(selectRow.classes) ? selectRow.classes(props.row, props.rowIndex) : selectRow.classes; - - style = _extends({}, style, selectedStyle); - className = (0, _classnames2.default)(className, selectedClasses) || undefined; - - if (selectRow.bgColor) { - style = style || {}; - style.backgroundColor = _utils2.default.isFunction(selectRow.bgColor) ? selectRow.bgColor(props.row, props.rowIndex) : selectRow.bgColor; - } - } - - if (notSelectable) { - var notSelectableStyle = _utils2.default.isFunction(selectRow.nonSelectableStyle) ? selectRow.nonSelectableStyle(props.row, props.rowIndex) : selectRow.nonSelectableStyle; - - var notSelectableClasses = _utils2.default.isFunction(selectRow.nonSelectableClasses) ? selectRow.nonSelectableClasses(props.row, props.rowIndex) : selectRow.nonSelectableClasses; - - style = _extends({}, style, notSelectableStyle); - className = (0, _classnames2.default)(className, notSelectableClasses) || undefined; - } - - return _react2.default.createElement(Component, _extends({}, props, { - style: style, - className: className, - selectRow: selectRow, - selected: selected, - selectable: selectable - })); - }; - - function withConsumer(props) { - return _react2.default.createElement( - _selectionContext2.default.Consumer, - null, - function (selectRow) { - return renderWithSelection(props, selectRow); - } - ); - } - - withConsumer.displayName = 'WithSelectionRowConsumer'; - return withConsumer; -}; - -/***/ }), -/* 56 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; /* eslint react/prop-types: 0 */ - - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _classnames = __webpack_require__(4); - -var _classnames2 = _interopRequireDefault(_classnames); - -var _expandRow = __webpack_require__(57); - -var _expandRow2 = _interopRequireDefault(_expandRow); - -var _utils = __webpack_require__(2); - -var _utils2 = _interopRequireDefault(_utils); - -var _rowExpandContext = __webpack_require__(12); - -var _rowExpandContext2 = _interopRequireDefault(_rowExpandContext); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -exports.default = function (Component) { - var renderWithExpansion = function renderWithExpansion(props, expandRow) { - var parentClassName = ''; - var className = ''; - var key = props.value; - - var expanded = _utils2.default.contains(expandRow.expanded, key); - var isClosing = _utils2.default.contains(expandRow.isClosing, key); - var expandable = !expandRow.nonExpandable || !_utils2.default.contains(expandRow.nonExpandable, key); - if (expanded) { - parentClassName = _utils2.default.isFunction(expandRow.parentClassName) ? expandRow.parentClassName(expanded, props.row, props.rowIndex) : expandRow.parentClassName || ''; - - className = _utils2.default.isFunction(expandRow.className) ? expandRow.className(expanded, props.row, props.rowIndex) : expandRow.className || ''; - } - - return [_react2.default.createElement(Component, _extends({}, props, { - key: key, - expanded: expanded, - expandable: expandable, - expandRow: _extends({}, expandRow), - className: (0, _classnames2.default)(props.className, parentClassName) - })), expanded || isClosing ? _react2.default.createElement( - _expandRow2.default, - { - key: key + '-expanding', - colSpan: props.visibleColumnSize, - expanded: expanded, - onClosed: function onClosed() { - return expandRow.onClosed(key); - }, - className: className - }, - expandRow.renderer(props.row, props.rowIndex) - ) : null]; - }; - return function (props) { - return _react2.default.createElement( - _rowExpandContext2.default.Consumer, - null, - function (expandRow) { - return renderWithExpansion(props, expandRow); - } - ); - }; -}; - -/***/ }), -/* 57 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _classnames = __webpack_require__(4); - -var _classnames2 = _interopRequireDefault(_classnames); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = __webpack_require__(1); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _reactTransitionGroup = __webpack_require__(58); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } - -var ExpandRow = function ExpandRow(_ref) { - var children = _ref.children, - expanded = _ref.expanded, - onClosed = _ref.onClosed, - className = _ref.className, - rest = _objectWithoutProperties(_ref, ['children', 'expanded', 'onClosed', 'className']); - - return _react2.default.createElement( - 'tr', - null, - _react2.default.createElement( - 'td', - _extends({ className: (0, _classnames2.default)('reset-expansion-style', className) }, rest), - _react2.default.createElement( - _reactTransitionGroup.CSSTransition, - { - appear: true, - 'in': expanded, - timeout: 400, - classNames: 'row-expand-slide', - onExited: onClosed - }, - _react2.default.createElement( - 'div', - null, - _react2.default.createElement( - 'div', - { className: 'row-expansion-style' }, - children - ) - ) - ) - ) - ); -}; - -ExpandRow.propTypes = { - children: _propTypes2.default.node, - expanded: _propTypes2.default.bool, - onClosed: _propTypes2.default.func, - className: _propTypes2.default.string -}; - -ExpandRow.defaultProps = { - children: null, - expanded: false, - onClosed: null, - className: '' -}; - -exports.default = ExpandRow; - -/***/ }), -/* 58 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__CSSTransition__ = __webpack_require__(59); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "CSSTransition", function() { return __WEBPACK_IMPORTED_MODULE_0__CSSTransition__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__ReplaceTransition__ = __webpack_require__(64); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "ReplaceTransition", function() { return __WEBPACK_IMPORTED_MODULE_1__ReplaceTransition__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__TransitionGroup__ = __webpack_require__(24); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "TransitionGroup", function() { return __WEBPACK_IMPORTED_MODULE_2__TransitionGroup__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__Transition__ = __webpack_require__(19); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Transition", function() { return __WEBPACK_IMPORTED_MODULE_3__Transition__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__config__ = __webpack_require__(21); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "config", function() { return __WEBPACK_IMPORTED_MODULE_4__config__["a"]; }); - - - - - - -/***/ }), -/* 59 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__babel_runtime_helpers_esm_extends__ = __webpack_require__(18); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__babel_runtime_helpers_esm_objectWithoutPropertiesLoose__ = __webpack_require__(7); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__babel_runtime_helpers_esm_inheritsLoose__ = __webpack_require__(8); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_prop_types__ = __webpack_require__(1); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_prop_types__); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_dom_helpers_class_addClass__ = __webpack_require__(60); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_dom_helpers_class_addClass___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_dom_helpers_class_addClass__); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_dom_helpers_class_removeClass__ = __webpack_require__(63); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_dom_helpers_class_removeClass___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_dom_helpers_class_removeClass__); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_react__ = __webpack_require__(0); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6_react__); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__Transition__ = __webpack_require__(19); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__utils_PropTypes__ = __webpack_require__(22); - - - - - - - - - - -var _addClass = function addClass(node, classes) { - return node && classes && classes.split(' ').forEach(function (c) { - return __WEBPACK_IMPORTED_MODULE_4_dom_helpers_class_addClass___default()(node, c); - }); -}; - -var removeClass = function removeClass(node, classes) { - return node && classes && classes.split(' ').forEach(function (c) { - return __WEBPACK_IMPORTED_MODULE_5_dom_helpers_class_removeClass___default()(node, c); - }); -}; -/** - * A transition component inspired by the excellent - * [ng-animate](http://www.nganimate.org/) library, you should use it if you're - * using CSS transitions or animations. It's built upon the - * [`Transition`](https://reactcommunity.org/react-transition-group/transition) - * component, so it inherits all of its props. - * - * `CSSTransition` applies a pair of class names during the `appear`, `enter`, - * and `exit` states of the transition. The first class is applied and then a - * second `*-active` class in order to activate the CSS transition. After the - * transition, matching `*-done` class names are applied to persist the - * transition state. - * - * ```jsx - * function App() { - * const [inProp, setInProp] = useState(false); - * return ( - *
- * - *
- * {"I'll receive my-node-* classes"} - *
- *
- * - *
- * ); - * } - * ``` - * - * When the `in` prop is set to `true`, the child component will first receive - * the class `example-enter`, then the `example-enter-active` will be added in - * the next tick. `CSSTransition` [forces a - * reflow](https://github.com/reactjs/react-transition-group/blob/5007303e729a74be66a21c3e2205e4916821524b/src/CSSTransition.js#L208-L215) - * between before adding the `example-enter-active`. This is an important trick - * because it allows us to transition between `example-enter` and - * `example-enter-active` even though they were added immediately one after - * another. Most notably, this is what makes it possible for us to animate - * _appearance_. - * - * ```css - * .my-node-enter { - * opacity: 0; - * } - * .my-node-enter-active { - * opacity: 1; - * transition: opacity 200ms; - * } - * .my-node-exit { - * opacity: 1; - * } - * .my-node-exit-active { - * opacity: 0; - * transition: opacity 200ms; - * } - * ``` - * - * `*-active` classes represent which styles you want to animate **to**. - */ - - -var CSSTransition = -/*#__PURE__*/ -function (_React$Component) { - Object(__WEBPACK_IMPORTED_MODULE_2__babel_runtime_helpers_esm_inheritsLoose__["a" /* default */])(CSSTransition, _React$Component); - - function CSSTransition() { - var _this; - - for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this; - _this.appliedClasses = { - appear: {}, - enter: {}, - exit: {} - }; - - _this.onEnter = function (node, appearing) { - _this.removeClasses(node, 'exit'); - - _this.addClass(node, appearing ? 'appear' : 'enter', 'base'); - - if (_this.props.onEnter) { - _this.props.onEnter(node, appearing); - } - }; - - _this.onEntering = function (node, appearing) { - var type = appearing ? 'appear' : 'enter'; - - _this.addClass(node, type, 'active'); - - if (_this.props.onEntering) { - _this.props.onEntering(node, appearing); - } - }; - - _this.onEntered = function (node, appearing) { - var type = appearing ? 'appear' : 'enter'; - - _this.removeClasses(node, type); - - _this.addClass(node, type, 'done'); - - if (_this.props.onEntered) { - _this.props.onEntered(node, appearing); - } - }; - - _this.onExit = function (node) { - _this.removeClasses(node, 'appear'); - - _this.removeClasses(node, 'enter'); - - _this.addClass(node, 'exit', 'base'); - - if (_this.props.onExit) { - _this.props.onExit(node); - } - }; - - _this.onExiting = function (node) { - _this.addClass(node, 'exit', 'active'); - - if (_this.props.onExiting) { - _this.props.onExiting(node); - } - }; - - _this.onExited = function (node) { - _this.removeClasses(node, 'exit'); - - _this.addClass(node, 'exit', 'done'); - - if (_this.props.onExited) { - _this.props.onExited(node); - } - }; - - _this.getClassNames = function (type) { - var classNames = _this.props.classNames; - var isStringClassNames = typeof classNames === 'string'; - var prefix = isStringClassNames && classNames ? classNames + "-" : ''; - var baseClassName = isStringClassNames ? "" + prefix + type : classNames[type]; - var activeClassName = isStringClassNames ? baseClassName + "-active" : classNames[type + "Active"]; - var doneClassName = isStringClassNames ? baseClassName + "-done" : classNames[type + "Done"]; - return { - baseClassName: baseClassName, - activeClassName: activeClassName, - doneClassName: doneClassName - }; - }; - - return _this; - } - - var _proto = CSSTransition.prototype; - - _proto.addClass = function addClass(node, type, phase) { - var className = this.getClassNames(type)[phase + "ClassName"]; - - if (type === 'appear' && phase === 'done') { - className += " " + this.getClassNames('enter').doneClassName; - } // This is for to force a repaint, - // which is necessary in order to transition styles when adding a class name. - - - if (phase === 'active') { - /* eslint-disable no-unused-expressions */ - node && node.scrollTop; - } - - this.appliedClasses[type][phase] = className; - - _addClass(node, className); - }; - - _proto.removeClasses = function removeClasses(node, type) { - var _this$appliedClasses$ = this.appliedClasses[type], - baseClassName = _this$appliedClasses$.base, - activeClassName = _this$appliedClasses$.active, - doneClassName = _this$appliedClasses$.done; - this.appliedClasses[type] = {}; - - if (baseClassName) { - removeClass(node, baseClassName); - } - - if (activeClassName) { - removeClass(node, activeClassName); - } - - if (doneClassName) { - removeClass(node, doneClassName); - } - }; - - _proto.render = function render() { - var _this$props = this.props, - _ = _this$props.classNames, - props = Object(__WEBPACK_IMPORTED_MODULE_1__babel_runtime_helpers_esm_objectWithoutPropertiesLoose__["a" /* default */])(_this$props, ["classNames"]); - - return __WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_7__Transition__["a" /* default */], Object(__WEBPACK_IMPORTED_MODULE_0__babel_runtime_helpers_esm_extends__["a" /* default */])({}, props, { - onEnter: this.onEnter, - onEntered: this.onEntered, - onEntering: this.onEntering, - onExit: this.onExit, - onExiting: this.onExiting, - onExited: this.onExited - })); - }; - - return CSSTransition; -}(__WEBPACK_IMPORTED_MODULE_6_react___default.a.Component); - -CSSTransition.defaultProps = { - classNames: '' -}; -CSSTransition.propTypes = false ? _extends({}, Transition.propTypes, { - /** - * The animation classNames applied to the component as it enters, exits or - * has finished the transition. A single name can be provided and it will be - * suffixed for each stage: e.g. - * - * `classNames="fade"` applies `fade-enter`, `fade-enter-active`, - * `fade-enter-done`, `fade-exit`, `fade-exit-active`, `fade-exit-done`, - * `fade-appear`, `fade-appear-active`, and `fade-appear-done`. - * - * **Note**: `fade-appear-done` and `fade-enter-done` will _both_ be applied. - * This allows you to define different behavior for when appearing is done and - * when regular entering is done, using selectors like - * `.fade-enter-done:not(.fade-appear-done)`. For example, you could apply an - * epic entrance animation when element first appears in the DOM using - * [Animate.css](https://daneden.github.io/animate.css/). Otherwise you can - * simply use `fade-enter-done` for defining both cases. - * - * Each individual classNames can also be specified independently like: - * - * ```js - * classNames={{ - * appear: 'my-appear', - * appearActive: 'my-active-appear', - * appearDone: 'my-done-appear', - * enter: 'my-enter', - * enterActive: 'my-active-enter', - * enterDone: 'my-done-enter', - * exit: 'my-exit', - * exitActive: 'my-active-exit', - * exitDone: 'my-done-exit', - * }} - * ``` - * - * If you want to set these classes using CSS Modules: - * - * ```js - * import styles from './styles.css'; - * ``` - * - * you might want to use camelCase in your CSS file, that way could simply - * spread them instead of listing them one by one: - * - * ```js - * classNames={{ ...styles }} - * ``` - * - * @type {string | { - * appear?: string, - * appearActive?: string, - * appearDone?: string, - * enter?: string, - * enterActive?: string, - * enterDone?: string, - * exit?: string, - * exitActive?: string, - * exitDone?: string, - * }} - */ - classNames: classNamesShape, - - /** - * A `` callback fired immediately after the 'enter' or 'appear' class is - * applied. - * - * @type Function(node: HtmlElement, isAppearing: bool) - */ - onEnter: PropTypes.func, - - /** - * A `` callback fired immediately after the 'enter-active' or - * 'appear-active' class is applied. - * - * @type Function(node: HtmlElement, isAppearing: bool) - */ - onEntering: PropTypes.func, - - /** - * A `` callback fired immediately after the 'enter' or - * 'appear' classes are **removed** and the `done` class is added to the DOM node. - * - * @type Function(node: HtmlElement, isAppearing: bool) - */ - onEntered: PropTypes.func, - - /** - * A `` callback fired immediately after the 'exit' class is - * applied. - * - * @type Function(node: HtmlElement) - */ - onExit: PropTypes.func, - - /** - * A `` callback fired immediately after the 'exit-active' is applied. - * - * @type Function(node: HtmlElement) - */ - onExiting: PropTypes.func, - - /** - * A `` callback fired immediately after the 'exit' classes - * are **removed** and the `exit-done` class is added to the DOM node. - * - * @type Function(node: HtmlElement) - */ - onExited: PropTypes.func -}) : {}; -/* harmony default export */ __webpack_exports__["a"] = (CSSTransition); - -/***/ }), -/* 60 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _interopRequireDefault = __webpack_require__(61); - -exports.__esModule = true; -exports.default = addClass; - -var _hasClass = _interopRequireDefault(__webpack_require__(62)); - -function addClass(element, className) { - if (element.classList) element.classList.add(className);else if (!(0, _hasClass.default)(element, className)) if (typeof element.className === 'string') element.className = element.className + ' ' + className;else element.setAttribute('class', (element.className && element.className.baseVal || '') + ' ' + className); -} - -module.exports = exports["default"]; - -/***/ }), -/* 61 */ -/***/ (function(module, exports) { - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - "default": obj - }; -} - -module.exports = _interopRequireDefault; - -/***/ }), -/* 62 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; -exports.default = hasClass; - -function hasClass(element, className) { - if (element.classList) return !!className && element.classList.contains(className);else return (" " + (element.className.baseVal || element.className) + " ").indexOf(" " + className + " ") !== -1; -} - -module.exports = exports["default"]; - -/***/ }), -/* 63 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -function replaceClassName(origClass, classToRemove) { - return origClass.replace(new RegExp('(^|\\s)' + classToRemove + '(?:\\s|$)', 'g'), '$1').replace(/\s+/g, ' ').replace(/^\s*|\s*$/g, ''); -} - -module.exports = function removeClass(element, className) { - if (element.classList) element.classList.remove(className);else if (typeof element.className === 'string') element.className = replaceClassName(element.className, className);else element.setAttribute('class', replaceClassName(element.className && element.className.baseVal || '', className)); -}; - -/***/ }), -/* 64 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__babel_runtime_helpers_esm_objectWithoutPropertiesLoose__ = __webpack_require__(7); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__babel_runtime_helpers_esm_inheritsLoose__ = __webpack_require__(8); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_prop_types__ = __webpack_require__(1); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_prop_types__); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_react__ = __webpack_require__(0); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_react__); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_react_dom__ = __webpack_require__(20); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_react_dom___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_react_dom__); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__TransitionGroup__ = __webpack_require__(24); - - - - - - -/** - * The `` component is a specialized `Transition` component - * that animates between two children. - * - * ```jsx - * - *
I appear first
- *
I replace the above
- *
- * ``` - */ - -var ReplaceTransition = -/*#__PURE__*/ -function (_React$Component) { - Object(__WEBPACK_IMPORTED_MODULE_1__babel_runtime_helpers_esm_inheritsLoose__["a" /* default */])(ReplaceTransition, _React$Component); - - function ReplaceTransition() { - var _this; - - for (var _len = arguments.length, _args = new Array(_len), _key = 0; _key < _len; _key++) { - _args[_key] = arguments[_key]; - } - - _this = _React$Component.call.apply(_React$Component, [this].concat(_args)) || this; - - _this.handleEnter = function () { - for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { - args[_key2] = arguments[_key2]; - } - - return _this.handleLifecycle('onEnter', 0, args); - }; - - _this.handleEntering = function () { - for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { - args[_key3] = arguments[_key3]; - } - - return _this.handleLifecycle('onEntering', 0, args); - }; - - _this.handleEntered = function () { - for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { - args[_key4] = arguments[_key4]; - } - - return _this.handleLifecycle('onEntered', 0, args); - }; - - _this.handleExit = function () { - for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) { - args[_key5] = arguments[_key5]; - } - - return _this.handleLifecycle('onExit', 1, args); - }; - - _this.handleExiting = function () { - for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) { - args[_key6] = arguments[_key6]; - } - - return _this.handleLifecycle('onExiting', 1, args); - }; - - _this.handleExited = function () { - for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) { - args[_key7] = arguments[_key7]; - } - - return _this.handleLifecycle('onExited', 1, args); - }; - - return _this; - } - - var _proto = ReplaceTransition.prototype; - - _proto.handleLifecycle = function handleLifecycle(handler, idx, originalArgs) { - var _child$props; - - var children = this.props.children; - var child = __WEBPACK_IMPORTED_MODULE_3_react___default.a.Children.toArray(children)[idx]; - if (child.props[handler]) (_child$props = child.props)[handler].apply(_child$props, originalArgs); - if (this.props[handler]) this.props[handler](Object(__WEBPACK_IMPORTED_MODULE_4_react_dom__["findDOMNode"])(this)); - }; - - _proto.render = function render() { - var _this$props = this.props, - children = _this$props.children, - inProp = _this$props.in, - props = Object(__WEBPACK_IMPORTED_MODULE_0__babel_runtime_helpers_esm_objectWithoutPropertiesLoose__["a" /* default */])(_this$props, ["children", "in"]); - - var _React$Children$toArr = __WEBPACK_IMPORTED_MODULE_3_react___default.a.Children.toArray(children), - first = _React$Children$toArr[0], - second = _React$Children$toArr[1]; - - delete props.onEnter; - delete props.onEntering; - delete props.onEntered; - delete props.onExit; - delete props.onExiting; - delete props.onExited; - return __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_5__TransitionGroup__["a" /* default */], props, inProp ? __WEBPACK_IMPORTED_MODULE_3_react___default.a.cloneElement(first, { - key: 'first', - onEnter: this.handleEnter, - onEntering: this.handleEntering, - onEntered: this.handleEntered - }) : __WEBPACK_IMPORTED_MODULE_3_react___default.a.cloneElement(second, { - key: 'second', - onEnter: this.handleExit, - onEntering: this.handleExiting, - onEntered: this.handleExited - })); - }; - - return ReplaceTransition; -}(__WEBPACK_IMPORTED_MODULE_3_react___default.a.Component); - -ReplaceTransition.propTypes = false ? { - in: PropTypes.bool.isRequired, - children: function children(props, propName) { - if (React.Children.count(props[propName]) !== 2) return new Error("\"" + propName + "\" must be exactly two transition components."); - return null; - } -} : {}; -/* harmony default export */ __webpack_exports__["a"] = (ReplaceTransition); - -/***/ }), -/* 65 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["a"] = _assertThisInitialized; -function _assertThisInitialized(self) { - if (self === void 0) { - throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); - } - - return self; -} - -/***/ }), -/* 66 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["a"] = getChildMapping; -/* unused harmony export mergeChildMappings */ -/* harmony export (immutable) */ __webpack_exports__["b"] = getInitialChildMapping; -/* harmony export (immutable) */ __webpack_exports__["c"] = getNextChildMapping; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react__ = __webpack_require__(0); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_react__); - -/** - * Given `this.props.children`, return an object mapping key to child. - * - * @param {*} children `this.props.children` - * @return {object} Mapping of key to child - */ - -function getChildMapping(children, mapFn) { - var mapper = function mapper(child) { - return mapFn && Object(__WEBPACK_IMPORTED_MODULE_0_react__["isValidElement"])(child) ? mapFn(child) : child; - }; - - var result = Object.create(null); - if (children) __WEBPACK_IMPORTED_MODULE_0_react__["Children"].map(children, function (c) { - return c; - }).forEach(function (child) { - // run the map function here instead so that the key is the computed one - result[child.key] = mapper(child); - }); - return result; -} -/** - * When you're adding or removing children some may be added or removed in the - * same render pass. We want to show *both* since we want to simultaneously - * animate elements in and out. This function takes a previous set of keys - * and a new set of keys and merges them with its best guess of the correct - * ordering. In the future we may expose some of the utilities in - * ReactMultiChild to make this easy, but for now React itself does not - * directly have this concept of the union of prevChildren and nextChildren - * so we implement it here. - * - * @param {object} prev prev children as returned from - * `ReactTransitionChildMapping.getChildMapping()`. - * @param {object} next next children as returned from - * `ReactTransitionChildMapping.getChildMapping()`. - * @return {object} a key set that contains all keys in `prev` and all keys - * in `next` in a reasonable order. - */ - -function mergeChildMappings(prev, next) { - prev = prev || {}; - next = next || {}; - - function getValueForKey(key) { - return key in next ? next[key] : prev[key]; - } // For each key of `next`, the list of keys to insert before that key in - // the combined list - - - var nextKeysPending = Object.create(null); - var pendingKeys = []; - - for (var prevKey in prev) { - if (prevKey in next) { - if (pendingKeys.length) { - nextKeysPending[prevKey] = pendingKeys; - pendingKeys = []; - } - } else { - pendingKeys.push(prevKey); - } - } - - var i; - var childMapping = {}; - - for (var nextKey in next) { - if (nextKeysPending[nextKey]) { - for (i = 0; i < nextKeysPending[nextKey].length; i++) { - var pendingNextKey = nextKeysPending[nextKey][i]; - childMapping[nextKeysPending[nextKey][i]] = getValueForKey(pendingNextKey); - } - } - - childMapping[nextKey] = getValueForKey(nextKey); - } // Finally, add the keys which didn't appear before any key in `next` - - - for (i = 0; i < pendingKeys.length; i++) { - childMapping[pendingKeys[i]] = getValueForKey(pendingKeys[i]); - } - - return childMapping; -} - -function getProp(child, prop, props) { - return props[prop] != null ? props[prop] : child.props[prop]; -} - -function getInitialChildMapping(props, onExited) { - return getChildMapping(props.children, function (child) { - return Object(__WEBPACK_IMPORTED_MODULE_0_react__["cloneElement"])(child, { - onExited: onExited.bind(null, child), - in: true, - appear: getProp(child, 'appear', props), - enter: getProp(child, 'enter', props), - exit: getProp(child, 'exit', props) - }); - }); -} -function getNextChildMapping(nextProps, prevChildMapping, onExited) { - var nextChildMapping = getChildMapping(nextProps.children); - var children = mergeChildMappings(prevChildMapping, nextChildMapping); - Object.keys(children).forEach(function (key) { - var child = children[key]; - if (!Object(__WEBPACK_IMPORTED_MODULE_0_react__["isValidElement"])(child)) return; - var hasPrev = key in prevChildMapping; - var hasNext = key in nextChildMapping; - var prevChild = prevChildMapping[key]; - var isLeaving = Object(__WEBPACK_IMPORTED_MODULE_0_react__["isValidElement"])(prevChild) && !prevChild.props.in; // item is new (entering) - - if (hasNext && (!hasPrev || isLeaving)) { - // console.log('entering', key) - children[key] = Object(__WEBPACK_IMPORTED_MODULE_0_react__["cloneElement"])(child, { - onExited: onExited.bind(null, child), - in: true, - exit: getProp(child, 'exit', nextProps), - enter: getProp(child, 'enter', nextProps) - }); - } else if (!hasNext && hasPrev && !isLeaving) { - // item is old (exiting) - // console.log('leaving', key) - children[key] = Object(__WEBPACK_IMPORTED_MODULE_0_react__["cloneElement"])(child, { - in: false - }); - } else if (hasNext && hasPrev && Object(__WEBPACK_IMPORTED_MODULE_0_react__["isValidElement"])(prevChild)) { - // item hasn't changed transition states - // copy over the last transition props; - // console.log('unchanged', key) - children[key] = Object(__WEBPACK_IMPORTED_MODULE_0_react__["cloneElement"])(child, { - onExited: onExited.bind(null, child), - in: prevChild.props.in, - exit: getProp(child, 'exit', nextProps), - enter: getProp(child, 'enter', nextProps) - }); - } - }); - return children; -} - -/***/ }), -/* 67 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = __webpack_require__(1); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _rowTemplate = __webpack_require__(14); - -var _rowTemplate2 = _interopRequireDefault(_rowTemplate); - -var _footerCell = __webpack_require__(68); - -var _footerCell2 = _interopRequireDefault(_footerCell); - -var _utils = __webpack_require__(2); - -var _utils2 = _interopRequireDefault(_utils); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var Footer = function Footer(props) { - var data = props.data, - className = props.className, - columns = props.columns, - selectRow = props.selectRow, - expandRow = props.expandRow; - - - function renderContent() { - return columns.map(function (column, i) { - if (column.footer === undefined || column.footer === null) { - return false; - } - - var columnData = _utils2.default.pluck(data, column.dataField); - - return _react2.default.createElement(_footerCell2.default, { - index: i, - key: column.dataField, - column: column, - columnData: columnData - }); - }); - } - - return _react2.default.createElement( - 'tfoot', - null, - _react2.default.createElement(_rowTemplate2.default, { - renderContent: renderContent, - selectRow: selectRow, - expandRow: expandRow, - className: className, - cellEl: 'th' - }) - ); -}; /* eslint react/require-default-props: 0 */ - - -Footer.propTypes = { - data: _propTypes2.default.array, - className: _propTypes2.default.string, - columns: _propTypes2.default.array, - selectRow: _propTypes2.default.object, - expandRow: _propTypes2.default.object -}; - -exports.default = Footer; - -/***/ }), -/* 68 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _classnames = __webpack_require__(4); - -var _classnames2 = _interopRequireDefault(_classnames); - -var _propTypes = __webpack_require__(1); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _utils = __webpack_require__(2); - -var _utils2 = _interopRequireDefault(_utils); - -var _cellEventDelegater = __webpack_require__(9); - -var _cellEventDelegater2 = _interopRequireDefault(_cellEventDelegater); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint react/require-default-props: 0 */ - - -var FooterCell = function (_eventDelegater) { - _inherits(FooterCell, _eventDelegater); - - function FooterCell() { - _classCallCheck(this, FooterCell); - - return _possibleConstructorReturn(this, (FooterCell.__proto__ || Object.getPrototypeOf(FooterCell)).apply(this, arguments)); - } - - _createClass(FooterCell, [{ - key: 'render', - value: function render() { - var _props = this.props, - index = _props.index, - column = _props.column, - columnData = _props.columnData; - var footer = column.footer, - footerTitle = column.footerTitle, - footerAlign = column.footerAlign, - footerFormatter = column.footerFormatter, - footerEvents = column.footerEvents, - footerClasses = column.footerClasses, - footerStyle = column.footerStyle, - footerAttrs = column.footerAttrs; - - - var delegateEvents = this.delegate(footerEvents); - var cellAttrs = _extends({}, _utils2.default.isFunction(footerAttrs) ? footerAttrs(column, index) : footerAttrs, delegateEvents); - - var text = ''; - if (_utils2.default.isString(footer)) { - text = footer; - } else if (_utils2.default.isFunction(footer)) { - text = footer(columnData, column, index); - } - - var cellStyle = {}; - var cellClasses = _utils2.default.isFunction(footerClasses) ? footerClasses(column, index) : footerClasses; - - if (footerStyle) { - cellStyle = _utils2.default.isFunction(footerStyle) ? footerStyle(column, index) : footerStyle; - cellStyle = cellStyle ? _extends({}, cellStyle) : cellStyle; - } - - if (footerTitle) { - cellAttrs.title = _utils2.default.isFunction(footerTitle) ? footerTitle(column, index) : text; - } - - if (footerAlign) { - cellStyle.textAlign = _utils2.default.isFunction(footerAlign) ? footerAlign(column, index) : footerAlign; - } - - if (cellClasses) cellAttrs.className = (0, _classnames2.default)(cellAttrs.className, cellClasses); - if (!_utils2.default.isEmptyObject(cellStyle)) cellAttrs.style = cellStyle; - - var children = footerFormatter ? footerFormatter(column, index, { text: text }) : text; - - return _react2.default.createElement('th', cellAttrs, children); - } - }]); - - return FooterCell; -}((0, _cellEventDelegater2.default)(_react2.default.Component)); - -FooterCell.propTypes = { - columnData: _propTypes2.default.array, - index: _propTypes2.default.number, - column: _propTypes2.default.object -}; - -exports.default = FooterCell; - -/***/ }), -/* 69 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _utils = __webpack_require__(2); - -var _utils2 = _interopRequireDefault(_utils); - -var _columnResolver = __webpack_require__(70); - -var _columnResolver2 = _interopRequireDefault(_columnResolver); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -exports.default = function (ExtendBase) { - return function (_ColumnResolver) { - _inherits(TableResolver, _ColumnResolver); - - function TableResolver() { - _classCallCheck(this, TableResolver); - - return _possibleConstructorReturn(this, (TableResolver.__proto__ || Object.getPrototypeOf(TableResolver)).apply(this, arguments)); - } - - _createClass(TableResolver, [{ - key: 'validateProps', - value: function validateProps() { - var keyField = this.props.keyField; - - if (!keyField) { - throw new Error('Please specify a field as key via keyField'); - } - if (this.visibleColumnSize(false) <= 0) { - throw new Error('No visible columns detected'); - } - } - }, { - key: 'isEmpty', - value: function isEmpty() { - return this.props.data.length === 0; - } - }, { - key: 'visibleRows', - value: function visibleRows() { - var _props = this.props, - data = _props.data, - hiddenRows = _props.hiddenRows, - keyField = _props.keyField; - - if (!hiddenRows || hiddenRows.length === 0) return data; - return data.filter(function (row) { - var key = _utils2.default.get(row, keyField); - return !_utils2.default.contains(hiddenRows, key); - }); - } - }]); - - return TableResolver; - }((0, _columnResolver2.default)(ExtendBase)); -}; - -/***/ }), -/* 70 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -exports.default = function (ExtendBase) { - return function (_ExtendBase) { - _inherits(ColumnResolver, _ExtendBase); - - function ColumnResolver() { - _classCallCheck(this, ColumnResolver); - - return _possibleConstructorReturn(this, (ColumnResolver.__proto__ || Object.getPrototypeOf(ColumnResolver)).apply(this, arguments)); - } - - _createClass(ColumnResolver, [{ - key: "visibleColumnSize", - value: function visibleColumnSize() { - var includeSelectColumn = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; - - var columnLen = void 0; - if (this.props.columnToggle && this.props.columnToggle.toggles) { - var columns = this.props.columnToggle.toggles; - columnLen = Object.keys(columns).filter(function (name) { - return columns[name]; - }).length; - } else { - columnLen = this.props.columns.filter(function (c) { - return !c.hidden; - }).length; - } - if (!includeSelectColumn) return columnLen; - if (this.props.selectRow && !this.props.selectRow.hideSelectColumn) { - columnLen += 1; - } - if (this.props.expandRow && this.props.expandRow.showExpandColumn) { - columnLen += 1; - } - return columnLen; - } - }]); - - return ColumnResolver; - }(ExtendBase); -}; - -/***/ }), -/* 71 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _events = __webpack_require__(25); - -var _events2 = _interopRequireDefault(_events); - -var _utils = __webpack_require__(2); - -var _utils2 = _interopRequireDefault(_utils); - -var _dataContext = __webpack_require__(72); - -var _dataContext2 = _interopRequireDefault(_dataContext); - -var _columnContext = __webpack_require__(73); - -var _columnContext2 = _interopRequireDefault(_columnContext); - -var _sortContext = __webpack_require__(74); - -var _sortContext2 = _interopRequireDefault(_sortContext); - -var _selectionContext = __webpack_require__(10); - -var _selectionContext2 = _interopRequireDefault(_selectionContext); - -var _rowExpandContext = __webpack_require__(12); - -var _rowExpandContext2 = _interopRequireDefault(_rowExpandContext); - -var _remoteResolver2 = __webpack_require__(75); - -var _remoteResolver3 = _interopRequireDefault(_remoteResolver2); - -var _bootstrap = __webpack_require__(5); - -var _operators = __webpack_require__(11); - -var _operators2 = _interopRequireDefault(_operators); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint camelcase: 0 */ -/* eslint no-return-assign: 0 */ -/* eslint no-param-reassign: 0 */ -/* eslint class-methods-use-this: 0 */ - - -var withContext = function withContext(Base) { - return function (_remoteResolver) { - _inherits(BootstrapTableContainer, _remoteResolver); - - function BootstrapTableContainer(props) { - _classCallCheck(this, BootstrapTableContainer); - - var _this = _possibleConstructorReturn(this, (BootstrapTableContainer.__proto__ || Object.getPrototypeOf(BootstrapTableContainer)).call(this, props)); - - _this.DataContext = (0, _dataContext2.default)(); - - if (props.registerExposedAPI) { - var exposedAPIEmitter = new _events2.default(); - exposedAPIEmitter.on('get.table.data', function (payload) { - return payload.result = _this.table.getData(); - }); - exposedAPIEmitter.on('get.selected.rows', function (payload) { - return payload.result = _this.selectionContext.getSelected(); - }); - exposedAPIEmitter.on('get.filtered.rows', function (payload) { - if (_this.searchContext) { - payload.result = _this.searchContext.getSearched(); - } else if (_this.filterContext) { - payload.result = _this.filterContext.getFiltered(); - } else { - payload.result = _this.table.getData(); - } - }); - props.registerExposedAPI(exposedAPIEmitter); - } - - if (props.columns.filter(function (col) { - return col.sort; - }).length > 0) { - _this.SortContext = (0, _sortContext2.default)(_operators2.default, _this.isRemoteSort, _this.handleRemoteSortChange); - } - - if (props.columnToggle || props.columns.filter(function (col) { - return col.hidden; - }).length > 0) { - _this.ColumnManagementContext = (0, _columnContext2.default)(); - } - - if (props.selectRow) { - _this.SelectionContext = _selectionContext2.default; - } - - if (props.expandRow) { - _this.RowExpandContext = _rowExpandContext2.default; - } - - if (props.cellEdit && props.cellEdit.createContext) { - _this.CellEditContext = props.cellEdit.createContext(_utils2.default, _operators2.default, _this.isRemoteCellEdit, _this.handleRemoteCellChange); - } - - if (props.filter) { - _this.FilterContext = props.filter.createContext(_utils2.default, _this.isRemoteFiltering, _this.handleRemoteFilterChange); - } - - if (props.pagination) { - _this.PaginationContext = props.pagination.createContext(); - } - - if (props.search && props.search.searchContext) { - _this.SearchContext = props.search.searchContext(_utils2.default, _this.isRemoteSearch, _this.handleRemoteSearchChange); - } - - if (props.setDependencyModules) { - props.setDependencyModules(_utils2.default); - } - - if (props.setPaginationRemoteEmitter) { - props.setPaginationRemoteEmitter(_this.remoteEmitter); - } - return _this; - } - - _createClass(BootstrapTableContainer, [{ - key: 'UNSAFE_componentWillReceiveProps', - value: function UNSAFE_componentWillReceiveProps(nextProps) { - if (nextProps.columns.filter(function (col) { - return col.sort; - }).length <= 0) { - this.SortContext = null; - } else if (!this.SortContext) { - this.SortContext = (0, _sortContext2.default)(_operators2.default, this.isRemoteSort, this.handleRemoteSortChange); - } - if (!nextProps.pagination && this.props.pagination) { - this.PaginationContext = null; - } - if (nextProps.pagination && !this.props.pagination) { - this.PaginationContext = nextProps.pagination.createContext(this.isRemotePagination, this.handleRemotePageChange); - } - if (!nextProps.cellEdit && this.props.cellEdit) { - this.CellEditContext = null; - } - if (nextProps.cellEdit && !this.props.cellEdit) { - this.CellEditContext = nextProps.cellEdit.createContext(_utils2.default, _operators2.default, this.isRemoteCellEdit, this.handleRemoteCellChange); - } - } - }, { - key: 'renderBase', - value: function renderBase() { - var _this2 = this; - - return function (rootProps, filterProps, searchProps, sortProps, paginationProps, columnToggleProps) { - return _react2.default.createElement(Base, _extends({ - ref: function ref(n) { - return _this2.table = n; - } - }, _this2.props, sortProps, filterProps, searchProps, paginationProps, columnToggleProps, { - data: rootProps.getData(filterProps, searchProps, sortProps, paginationProps) - })); - }; - } - }, { - key: 'renderWithColumnManagementCtx', - value: function renderWithColumnManagementCtx(base, baseProps) { - var _this3 = this; - - return function (rootProps, filterProps, searchProps, sortProps, paginationProps) { - return _react2.default.createElement( - _this3.ColumnManagementContext.Provider, - _extends({}, baseProps, { - toggles: _this3.props.columnToggle ? _this3.props.columnToggle.toggles : null - }), - _react2.default.createElement( - _this3.ColumnManagementContext.Consumer, - null, - function (columnToggleProps) { - return base(rootProps, filterProps, searchProps, sortProps, paginationProps, columnToggleProps); - } - ) - ); - }; - } - }, { - key: 'renderWithSelectionCtx', - value: function renderWithSelectionCtx(base, baseProps) { - var _this4 = this; - - return function (rootProps, filterProps, searchProps, sortProps, paginationProps) { - return _react2.default.createElement( - _this4.SelectionContext.Provider, - _extends({}, baseProps, { - ref: function ref(n) { - return _this4.selectionContext = n; - }, - selectRow: _this4.props.selectRow, - data: rootProps.getData(filterProps, searchProps, sortProps, paginationProps) - }), - base(rootProps, filterProps, searchProps, sortProps, paginationProps) - ); - }; - } - }, { - key: 'renderWithRowExpandCtx', - value: function renderWithRowExpandCtx(base, baseProps) { - var _this5 = this; - - return function (rootProps, filterProps, searchProps, sortProps, paginationProps) { - return _react2.default.createElement( - _this5.RowExpandContext.Provider, - _extends({}, baseProps, { - ref: function ref(n) { - return _this5.rowExpandContext = n; - }, - expandRow: _this5.props.expandRow, - data: rootProps.getData(filterProps, searchProps, sortProps, paginationProps) - }), - base(rootProps, filterProps, searchProps, sortProps, paginationProps) - ); - }; - } - }, { - key: 'renderWithPaginationCtx', - value: function renderWithPaginationCtx(base) { - var _this6 = this; - - return function (rootProps, filterProps, searchProps, sortProps) { - return _react2.default.createElement( - _this6.PaginationContext.Provider, - { - ref: function ref(n) { - return _this6.paginationContext = n; - }, - pagination: _this6.props.pagination, - data: rootProps.getData(filterProps, searchProps, sortProps), - bootstrap4: _this6.props.bootstrap4, - isRemotePagination: _this6.isRemotePagination, - remoteEmitter: _this6.remoteEmitter, - onDataSizeChange: _this6.props.onDataSizeChange, - tableId: _this6.props.id - }, - _react2.default.createElement( - _this6.PaginationContext.Consumer, - null, - function (paginationProps) { - return base(rootProps, filterProps, searchProps, sortProps, paginationProps); - } - ) - ); - }; - } - }, { - key: 'renderWithSortCtx', - value: function renderWithSortCtx(base, baseProps) { - var _this7 = this; - - return function (rootProps, filterProps, searchProps) { - return _react2.default.createElement( - _this7.SortContext.Provider, - _extends({}, baseProps, { - ref: function ref(n) { - return _this7.sortContext = n; - }, - defaultSorted: _this7.props.defaultSorted, - defaultSortDirection: _this7.props.defaultSortDirection, - sort: _this7.props.sort, - data: rootProps.getData(filterProps, searchProps) - }), - _react2.default.createElement( - _this7.SortContext.Consumer, - null, - function (sortProps) { - return base(rootProps, filterProps, searchProps, sortProps); - } - ) - ); - }; - } - }, { - key: 'renderWithSearchCtx', - value: function renderWithSearchCtx(base, baseProps) { - var _this8 = this; - - return function (rootProps, filterProps) { - return _react2.default.createElement( - _this8.SearchContext.Provider, - _extends({}, baseProps, { - ref: function ref(n) { - return _this8.searchContext = n; - }, - data: rootProps.getData(filterProps), - searchText: _this8.props.search.searchText, - dataChangeListener: _this8.props.dataChangeListener - }), - _react2.default.createElement( - _this8.SearchContext.Consumer, - null, - function (searchProps) { - return base(rootProps, filterProps, searchProps); - } - ) - ); - }; - } - }, { - key: 'renderWithFilterCtx', - value: function renderWithFilterCtx(base, baseProps) { - var _this9 = this; - - return function (rootProps) { - return _react2.default.createElement( - _this9.FilterContext.Provider, - _extends({}, baseProps, { - ref: function ref(n) { - return _this9.filterContext = n; - }, - data: rootProps.getData(), - filter: _this9.props.filter.options || {}, - dataChangeListener: _this9.props.dataChangeListener - }), - _react2.default.createElement( - _this9.FilterContext.Consumer, - null, - function (filterProps) { - return base(rootProps, filterProps); - } - ) - ); - }; - } - }, { - key: 'renderWithCellEditCtx', - value: function renderWithCellEditCtx(base, baseProps) { - var _this10 = this; - - return function (rootProps) { - return _react2.default.createElement( - _this10.CellEditContext.Provider, - _extends({}, baseProps, { - ref: function ref(n) { - return _this10.cellEditContext = n; - }, - selectRow: _this10.props.selectRow, - cellEdit: _this10.props.cellEdit, - data: rootProps.getData() - }), - base(rootProps) - ); - }; - } - }, { - key: 'render', - value: function render() { - var _props = this.props, - keyField = _props.keyField, - columns = _props.columns, - bootstrap4 = _props.bootstrap4; - - var baseProps = { keyField: keyField, columns: columns }; - - var base = this.renderBase(); - - if (this.ColumnManagementContext) { - base = this.renderWithColumnManagementCtx(base, baseProps); - } - - if (this.SelectionContext) { - base = this.renderWithSelectionCtx(base, baseProps); - } - - if (this.RowExpandContext) { - base = this.renderWithRowExpandCtx(base, baseProps); - } - - if (this.PaginationContext) { - base = this.renderWithPaginationCtx(base, baseProps); - } - - if (this.SortContext) { - base = this.renderWithSortCtx(base, baseProps); - } - - if (this.SearchContext) { - base = this.renderWithSearchCtx(base, baseProps); - } - - if (this.FilterContext) { - base = this.renderWithFilterCtx(base, baseProps); - } - - if (this.CellEditContext) { - base = this.renderWithCellEditCtx(base, baseProps); - } - - return _react2.default.createElement( - _bootstrap.BootstrapContext.Provider, - { value: { bootstrap4: bootstrap4 } }, - _react2.default.createElement( - this.DataContext.Provider, - _extends({}, baseProps, { - data: this.props.data - }), - _react2.default.createElement( - this.DataContext.Consumer, - null, - base - ) - ) - ); - } - }]); - - return BootstrapTableContainer; - }((0, _remoteResolver3.default)(_react.Component)); -}; - -exports.default = withContext; - -/***/ }), -/* 72 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = __webpack_require__(1); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint camelcase: 0 */ - - -exports.default = function () { - var DataContext = _react2.default.createContext(); - - var DataProvider = function (_Component) { - _inherits(DataProvider, _Component); - - function DataProvider() { - var _ref; - - var _temp, _this, _ret; - - _classCallCheck(this, DataProvider); - - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = DataProvider.__proto__ || Object.getPrototypeOf(DataProvider)).call.apply(_ref, [this].concat(args))), _this), _this.state = { data: _this.props.data }, _this.getData = function (filterProps, searchProps, sortProps, paginationProps) { - if (paginationProps) return paginationProps.data;else if (sortProps) return sortProps.data;else if (searchProps) return searchProps.data;else if (filterProps) return filterProps.data; - return _this.props.data; - }, _temp), _possibleConstructorReturn(_this, _ret); - } - - _createClass(DataProvider, [{ - key: 'UNSAFE_componentWillReceiveProps', - value: function UNSAFE_componentWillReceiveProps(nextProps) { - this.setState(function () { - return { data: nextProps.data }; - }); - } - }, { - key: 'render', - value: function render() { - return _react2.default.createElement( - DataContext.Provider, - { - value: { - data: this.state.data, - getData: this.getData - } - }, - this.props.children - ); - } - }]); - - return DataProvider; - }(_react.Component); - - DataProvider.propTypes = { - data: _propTypes2.default.array.isRequired, - children: _propTypes2.default.node.isRequired - }; - - return { - Provider: DataProvider, - Consumer: DataContext.Consumer - }; -}; - -/***/ }), -/* 73 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = __webpack_require__(1); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint react/prop-types: 0 */ -/* eslint react/prefer-stateless-function: 0 */ - - -exports.default = function () { - var ColumnManagementContext = _react2.default.createContext(); - - var ColumnManagementProvider = function (_React$Component) { - _inherits(ColumnManagementProvider, _React$Component); - - function ColumnManagementProvider() { - _classCallCheck(this, ColumnManagementProvider); - - return _possibleConstructorReturn(this, (ColumnManagementProvider.__proto__ || Object.getPrototypeOf(ColumnManagementProvider)).apply(this, arguments)); - } - - _createClass(ColumnManagementProvider, [{ - key: 'render', - value: function render() { - var toggleColumn = void 0; - var _props = this.props, - columns = _props.columns, - toggles = _props.toggles; - - if (toggles) { - toggleColumn = columns.filter(function (column) { - return toggles[column.dataField]; - }); - } else { - toggleColumn = columns.filter(function (column) { - return !column.hidden; - }); - } - return _react2.default.createElement( - ColumnManagementContext.Provider, - { value: { columns: toggleColumn } }, - this.props.children - ); - } - }]); - - return ColumnManagementProvider; - }(_react2.default.Component); - - ColumnManagementProvider.propTypes = { - columns: _propTypes2.default.array.isRequired, - toggles: _propTypes2.default.object - }; - ColumnManagementProvider.defaultProps = { - toggles: null - }; - - - return { - Provider: ColumnManagementProvider, - Consumer: ColumnManagementContext.Consumer - }; -}; - -/***/ }), -/* 74 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = __webpack_require__(1); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _const = __webpack_require__(3); - -var _const2 = _interopRequireDefault(_const); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint camelcase: 0 */ -/* eslint react/require-default-props: 0 */ - - -exports.default = function (dataOperator, isRemoteSort, handleSortChange) { - var SortContext = _react2.default.createContext(); - - var SortProvider = function (_React$Component) { - _inherits(SortProvider, _React$Component); - - function SortProvider(props) { - _classCallCheck(this, SortProvider); - - var _this = _possibleConstructorReturn(this, (SortProvider.__proto__ || Object.getPrototypeOf(SortProvider)).call(this, props)); - - _initialiseProps.call(_this); - - var sortOrder = void 0; - var sortColumn = void 0; - var defaultSorted = props.defaultSorted, - defaultSortDirection = props.defaultSortDirection, - sort = props.sort; - - - if (defaultSorted && defaultSorted.length > 0) { - sortOrder = defaultSorted[0].order || defaultSortDirection; - sortColumn = _this.initSort(defaultSorted[0].dataField, sortOrder); - } else if (sort && sort.dataField && sort.order) { - sortOrder = sort.order; - sortColumn = _this.initSort(sort.dataField, sortOrder); - } - _this.state = { sortOrder: sortOrder, sortColumn: sortColumn }; - return _this; - } - - _createClass(SortProvider, [{ - key: 'componentDidMount', - value: function componentDidMount() { - var _state = this.state, - sortOrder = _state.sortOrder, - sortColumn = _state.sortColumn; - - if (isRemoteSort() && sortOrder && sortColumn) { - handleSortChange(sortColumn.dataField, sortOrder); - } - } - }, { - key: 'UNSAFE_componentWillReceiveProps', - value: function UNSAFE_componentWillReceiveProps(nextProps) { - var sort = nextProps.sort, - columns = nextProps.columns; - - if (sort && sort.dataField && sort.order) { - this.setState({ - sortOrder: sort.order, - sortColumn: columns.find(function (col) { - return col.dataField === sort.dataField; - }) - }); - } - } - }, { - key: 'initSort', - value: function initSort(sortField, sortOrder) { - var sortColumn = void 0; - var columns = this.props.columns; - - var sortColumns = columns.filter(function (col) { - return col.dataField === sortField; - }); - if (sortColumns.length > 0) { - sortColumn = sortColumns[0]; - - if (sortColumn.onSort) { - sortColumn.onSort(sortField, sortOrder); - } - } - return sortColumn; - } - }, { - key: 'render', - value: function render() { - var data = this.props.data; - var sort = this.props.sort; - var _state2 = this.state, - sortOrder = _state2.sortOrder, - sortColumn = _state2.sortColumn; - - if (!isRemoteSort() && sortColumn) { - var sortFunc = sortColumn.sortFunc ? sortColumn.sortFunc : sort && sort.sortFunc; - data = dataOperator.sort(data, sortOrder, _extends({}, sortColumn, { sortFunc: sortFunc })); - } - - return _react2.default.createElement( - SortContext.Provider, - { - value: { - data: data, - sortOrder: sortOrder, - onSort: this.handleSort, - sortField: sortColumn ? sortColumn.dataField : null - } - }, - this.props.children - ); - } - }]); - - return SortProvider; - }(_react2.default.Component); - - SortProvider.propTypes = { - data: _propTypes2.default.array.isRequired, - columns: _propTypes2.default.array.isRequired, - children: _propTypes2.default.node.isRequired, - defaultSorted: _propTypes2.default.arrayOf(_propTypes2.default.shape({ - dataField: _propTypes2.default.string.isRequired, - order: _propTypes2.default.oneOf([_const2.default.SORT_DESC, _const2.default.SORT_ASC]).isRequired - })), - sort: _propTypes2.default.shape({ - dataField: _propTypes2.default.string, - order: _propTypes2.default.oneOf([_const2.default.SORT_DESC, _const2.default.SORT_ASC]), - sortFunc: _propTypes2.default.func - }), - defaultSortDirection: _propTypes2.default.oneOf([_const2.default.SORT_DESC, _const2.default.SORT_ASC]) - }; - - var _initialiseProps = function _initialiseProps() { - var _this2 = this; - - this.handleSort = function (column) { - var sortOrder = dataOperator.nextOrder(column, _this2.state, _this2.props.defaultSortDirection); - - if (column.onSort) { - column.onSort(column.dataField, sortOrder); - } - - if (isRemoteSort()) { - handleSortChange(column.dataField, sortOrder); - } - _this2.setState(function () { - return { - sortOrder: sortOrder, - sortColumn: column - }; - }); - }; - }; - - return { - Provider: SortProvider, - Consumer: SortContext.Consumer - }; -}; - -/***/ }), -/* 75 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _events = __webpack_require__(25); - -var _events2 = _interopRequireDefault(_events); - -var _utils = __webpack_require__(2); - -var _utils2 = _interopRequireDefault(_utils); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -exports.default = function (ExtendBase) { - return function (_ExtendBase) { - _inherits(RemoteResolver, _ExtendBase); - - function RemoteResolver(props) { - _classCallCheck(this, RemoteResolver); - - var _this = _possibleConstructorReturn(this, (RemoteResolver.__proto__ || Object.getPrototypeOf(RemoteResolver)).call(this, props)); - - _this.getNewestState = function () { - var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - var sortOrder = void 0; - var sortField = void 0; - var page = void 0; - var sizePerPage = void 0; - var searchText = void 0; - var filters = {}; - - if (_this.sortContext) { - sortOrder = _this.sortContext.state.sortOrder; - sortField = _this.sortContext.state.sortColumn ? _this.sortContext.state.sortColumn.dataField : null; - } - - if (_this.filterContext) { - filters = _this.filterContext.currFilters; - } - - if (_this.paginationContext) { - page = _this.paginationContext.currPage; - sizePerPage = _this.paginationContext.currSizePerPage; - } - - if (_this.searchContext) { - searchText = _this.props.search.searchText; - } - - return _extends({ - sortOrder: sortOrder, - sortField: sortField, - filters: filters, - page: page, - sizePerPage: sizePerPage, - searchText: searchText - }, state, { - data: _this.props.data - }); - }; - - _this.isRemoteSearch = function () { - var remote = _this.props.remote; - - return remote === true || _utils2.default.isObject(remote) && remote.search || _this.isRemotePagination(); - }; - - _this.isRemotePagination = function () { - var e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - var remote = _this.props.remote; - - e.result = remote === true || _utils2.default.isObject(remote) && remote.pagination; - return e.result; - }; - - _this.isRemoteFiltering = function () { - var remote = _this.props.remote; - - return remote === true || _utils2.default.isObject(remote) && remote.filter || _this.isRemotePagination(); - }; - - _this.isRemoteSort = function () { - var remote = _this.props.remote; - - return remote === true || _utils2.default.isObject(remote) && remote.sort || _this.isRemotePagination(); - }; - - _this.isRemoteCellEdit = function () { - var remote = _this.props.remote; - - return remote === true || _utils2.default.isObject(remote) && remote.cellEdit; - }; - - _this.handleRemotePageChange = function (page, sizePerPage) { - _this.props.onTableChange('pagination', _this.getNewestState({ page: page, sizePerPage: sizePerPage })); - }; - - _this.handleRemoteFilterChange = function (filters) { - var newState = { filters: filters }; - if (_this.isRemotePagination()) { - var options = _this.props.pagination.options || {}; - newState.page = _utils2.default.isDefined(options.pageStartIndex) ? options.pageStartIndex : 1; - } - _this.props.onTableChange('filter', _this.getNewestState(newState)); - }; - - _this.handleRemoteSortChange = function (sortField, sortOrder) { - _this.props.onTableChange('sort', _this.getNewestState({ sortField: sortField, sortOrder: sortOrder })); - }; - - _this.handleRemoteCellChange = function (rowId, dataField, newValue) { - var cellEdit = { rowId: rowId, dataField: dataField, newValue: newValue }; - _this.props.onTableChange('cellEdit', _this.getNewestState({ cellEdit: cellEdit })); - }; - - _this.handleRemoteSearchChange = function (searchText) { - _this.props.onTableChange('search', _this.getNewestState({ searchText: searchText })); - }; - - _this.remoteEmitter = new _events2.default(); - _this.remoteEmitter.on('paginationChange', _this.handleRemotePageChange); - _this.remoteEmitter.on('isRemotePagination', _this.isRemotePagination); - return _this; - } - - return RemoteResolver; - }(ExtendBase); -}; - -/***/ }) -/******/ ]); -}); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCBiMmQ1MTE5NGY5YjA0OTZiYjQ4NiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwge1wicm9vdFwiOlwiUmVhY3RcIixcImNvbW1vbmpzMlwiOlwicmVhY3RcIixcImNvbW1vbmpzXCI6XCJyZWFjdFwiLFwiYW1kXCI6XCJyZWFjdFwifSIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL3V0aWxzLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL2NvbnN0LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9zcmMvY29udGV4dHMvYm9vdHN0cmFwLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL3N0b3JlL3Jvd3MuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZS5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL2NlbGwtZXZlbnQtZGVsZWdhdGVyLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL2NvbnRleHRzL3NlbGVjdGlvbi1jb250ZXh0LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL3N0b3JlL29wZXJhdG9ycy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9jb250ZXh0cy9yb3ctZXhwYW5kLWNvbnRleHQuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9zcmMvc3RvcmUvc2VsZWN0aW9uLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL3Jvdy9yb3ctdGVtcGxhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9zcmMvcm93L3Jvdy1wdXJlLWNvbnRlbnQuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9zcmMvcm93L2V2ZW50LWRlbGVnYXRlci5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9yb3cvc2hvdWxkLXVwZGF0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9UcmFuc2l0aW9uLmpzIiwid2VicGFjazovLy9leHRlcm5hbCB7XCJyb290XCI6XCJSZWFjdERPTVwiLFwiY29tbW9uanMyXCI6XCJyZWFjdC1kb21cIixcImNvbW1vbmpzXCI6XCJyZWFjdC1kb21cIixcImFtZFwiOlwicmVhY3QtZG9tXCJ9Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL2NvbmZpZy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS91dGlscy9Qcm9wVHlwZXMuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9lc20vVHJhbnNpdGlvbkdyb3VwQ29udGV4dC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9UcmFuc2l0aW9uR3JvdXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2V2ZW50cy9ldmVudHMuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9ib290c3RyYXAtdGFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9zcmMvaGVhZGVyLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL2hlYWRlci1jZWxsLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL3NvcnQvc3ltYm9sLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL3NvcnQvY2FyZXQuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS91bmRlcnNjb3JlLmpzIiwid2VicGFjazovLy8od2VicGFjaykvYnVpbGRpbi9nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL21vZHVsZS5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9yb3ctc2VsZWN0aW9uL3NlbGVjdGlvbi1oZWFkZXItY2VsbC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9yb3ctZXhwYW5kL2V4cGFuZC1oZWFkZXItY2VsbC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9yb3ctc2VsZWN0aW9uL3NlbGVjdGlvbi1oZWFkZXItY2VsbC1jb25zdW1lci5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9zdG9yZS9leHBhbmQuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9zcmMvc3RvcmUvbXV0YXRlLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL3N0b3JlL3NvcnQuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9zcmMvc3RvcmUvdHlwZS5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9yb3ctZXhwYW5kL2V4cGFuZC1oZWFkZXItY2VsbC1jb25zdW1lci5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9maWx0ZXJzLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL2ZpbHRlcnMtY2VsbC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9jYXB0aW9uLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL2JvZHkuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9zcmMvcm93L3NpbXBsZS1yb3cuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9zcmMvY2VsbC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9yb3cvYWdncmVnYXRlLXJvdy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9yb3ctZXhwYW5kL2V4cGFuZC1jZWxsLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL3Jvdy1zZWxlY3Rpb24vc2VsZWN0aW9uLWNlbGwuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9zcmMvcm93L3Jvdy1zZWN0aW9uLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL3Jvdy1zZWxlY3Rpb24vcm93LWNvbnN1bWVyLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL3Jvdy1leHBhbmQvcm93LWNvbnN1bWVyLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL3Jvdy1leHBhbmQvZXhwYW5kLXJvdy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9DU1NUcmFuc2l0aW9uLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvbm9kZV9tb2R1bGVzL2RvbS1oZWxwZXJzL2NsYXNzL2FkZENsYXNzLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvbm9kZV9tb2R1bGVzL2RvbS1oZWxwZXJzL2NsYXNzL2hhc0NsYXNzLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvbm9kZV9tb2R1bGVzL2RvbS1oZWxwZXJzL2NsYXNzL3JlbW92ZUNsYXNzLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL1JlcGxhY2VUcmFuc2l0aW9uLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS91dGlscy9DaGlsZE1hcHBpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9zcmMvZm9vdGVyLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL2Zvb3Rlci1jZWxsLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL3Byb3BzLXJlc29sdmVyL2luZGV4LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL3Byb3BzLXJlc29sdmVyL2NvbHVtbi1yZXNvbHZlci5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9jb250ZXh0cy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9jb250ZXh0cy9kYXRhLWNvbnRleHQuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9zcmMvY29udGV4dHMvY29sdW1uLWNvbnRleHQuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9zcmMvY29udGV4dHMvc29ydC1jb250ZXh0LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL3Byb3BzLXJlc29sdmVyL3JlbW90ZS1yZXNvbHZlci5qcyJdLCJuYW1lcyI6WyJzcGxpdE5lc3RlZCIsInN0ciIsImpvaW4iLCJyZXBsYWNlIiwic3BsaXQiLCJjb250YWlucyIsImxpc3QiLCJ2YWx1ZSIsImluY2x1ZGVzIiwiaW5kZXhPZiIsImdldCIsInRhcmdldCIsImZpZWxkIiwiZGlyZWN0R2V0IiwidW5kZWZpbmVkIiwicGF0aEFycmF5IiwicmVzdWx0IiwicmVkdWNlIiwiY3VyciIsInBhdGgiLCJlIiwic2V0Iiwic2FmZSIsImxldmVsIiwiYSIsImIiLCJFcnJvciIsImxlbmd0aCIsImlzRW1wdHlPYmplY3QiLCJvYmoiLCJpc09iamVjdCIsImhhc093blByb3BlcnR5IiwiT2JqZWN0IiwicHJvdG90eXBlIiwia2V5cyIsImkiLCJjYWxsIiwiaXNEZWZpbmVkIiwic2xlZXAiLCJmbiIsIm1zIiwic2V0VGltZW91dCIsImRlYm91bmNlIiwiZnVuYyIsIndhaXQiLCJpbW1lZGlhdGUiLCJ0aW1lb3V0IiwibGF0ZXIiLCJhcHBseSIsImNhbGxOb3ciLCJjbGVhclRpbWVvdXQiLCJhc3NpZ24iLCJTT1JUX0FTQyIsIlNPUlRfREVTQyIsIlJPV19TRUxFQ1RfU0lOR0xFIiwiUk9XX1NFTEVDVF9NVUxUSVBMRSIsIlJPV19TRUxFQ1RfRElTQUJMRUQiLCJDSEVDS0JPWF9TVEFUVVNfQ0hFQ0tFRCIsIkNIRUNLQk9YX1NUQVRVU19JTkRFVEVSTUlOQVRFIiwiQ0hFQ0tCT1hfU1RBVFVTX1VOQ0hFQ0tFRCIsIklORElDQVRPUl9QT1NJVElPTl9MRUZUIiwiSU5ESUNBVE9SX1BPU0lUSU9OX1JJR0hUIiwiVFlQRV9TVFJJTkciLCJUWVBFX05VTUJFUiIsIlRZUEVfQk9PTEVBTiIsIlRZUEVfREFURSIsIkZJTFRFUlNfUE9TSVRJT05fSU5MSU5FIiwiRklMVEVSU19QT1NJVElPTl9UT1AiLCJGSUxURVJTX1BPU0lUSU9OX0JPVFRPTSIsIkJvb3RzdHJhcENvbnRleHQiLCJjcmVhdGVDb250ZXh0IiwiYm9vdHN0cmFwNCIsIm1hdGNoUm93Iiwia2V5RmllbGQiLCJpZCIsInJvdyIsImdldFJvd0J5Um93SWQiLCJkYXRhIiwiZmluZCIsImV2ZW50cyIsInByb3BzIiwiY3JlYXRlRGVmYXVsdEV2ZW50SGFuZGxlciIsImJpbmQiLCJjYiIsImNvbHVtbiIsImNvbHVtbkluZGV4IiwiaW5kZXgiLCJhdHRycyIsIm5ld0F0dHJzIiwiZm9yRWFjaCIsImF0dHIiLCJFeHRlbmRCYXNlIiwiU2VsZWN0aW9uQ29udGV4dCIsIlNlbGVjdGlvblByb3ZpZGVyIiwiaGFuZGxlUm93U2VsZWN0Iiwicm93S2V5IiwiY2hlY2tlZCIsInJvd0luZGV4Iiwic2VsZWN0Um93IiwibW9kZSIsIm9uU2VsZWN0IiwiY3VyclNlbGVjdGVkIiwic2VsZWN0ZWQiLCJwdXNoIiwiZmlsdGVyIiwiZm9yY2VVcGRhdGUiLCJoYW5kbGVBbGxSb3dzU2VsZWN0IiwiaXNVblNlbGVjdCIsIm9uU2VsZWN0QWxsIiwibm9uU2VsZWN0YWJsZSIsImNvbmNhdCIsInNlbGVjdGFibGVLZXlzIiwiZCIsInMiLCJnZXRTZWxlY3RlZFJvd3MiLCJBcnJheSIsImlzQXJyYXkiLCJuZXh0UHJvcHMiLCJhbGxSb3dzU2VsZWN0ZWQiLCJhbGxSb3dzTm90U2VsZWN0ZWQiLCJjaGVja2VkU3RhdHVzIiwib25Sb3dTZWxlY3QiLCJvbkFsbFJvd3NTZWxlY3QiLCJjaGlsZHJlbiIsIkNvbXBvbmVudCIsInByb3BUeXBlcyIsIm5vZGUiLCJpc1JlcXVpcmVkIiwiYXJyYXkiLCJzdHJpbmciLCJQcm92aWRlciIsIkNvbnN1bWVyIiwicm93cyIsInNlbGVjdGlvbiIsImV4cGFuZCIsIm11dGF0ZSIsInNvcnQiLCJ0eXBlIiwiUm93RXhwYW5kQ29udGV4dCIsIlJvd0V4cGFuZFByb3ZpZGVyIiwic3RhdGUiLCJleHBhbmRlZCIsImV4cGFuZFJvdyIsImlzQ2xvc2luZyIsIm9uQ2xvc2VkIiwiY2xvc2VkUm93Iiwic2V0U3RhdGUiLCJoYW5kbGVSb3dFeHBhbmQiLCJvbkV4cGFuZCIsIm9ubHlPbmVFeHBhbmRpbmciLCJub25FeHBhbmRhYmxlIiwiY3VyckV4cGFuZGVkIiwiaGFuZGxlQWxsUm93RXhwYW5kIiwiZXhwYW5kQWxsIiwib25FeHBhbmRBbGwiLCJleHBhbmRhYmxlS2V5cyIsImdldEV4cGFuZGVkUm93cyIsIm5leHRFeHBhbmRlZCIsInJvd0lkIiwiYWNjIiwiY3VyIiwiaXNBbnlFeHBhbmRzIiwib25Sb3dFeHBhbmQiLCJvbkFsbFJvd0V4cGFuZCIsImdldFNlbGVjdGlvblN1bW1hcnkiLCJyb3dLZXlzIiwibWFwIiwieCIsInNraXBzIiwidW5TZWxlY3RhYmxlS2V5cyIsImsiLCJSb3dUZW1wbGF0ZSIsInJlbmRlckNvbnRlbnQiLCJjZWxsRWwiLCJyZXN0IiwiaXNSZW5kZXJGdW5jdGlvbkNvbHVtbkluTGVmdCIsInBvc2l0aW9uIiwiY2hpbGRyZW5zIiwiaGlkZVNlbGVjdENvbHVtbiIsInNlbGVjdENvbHVtblBvc2l0aW9uIiwidW5zaGlmdCIsImNyZWF0ZUVsZW1lbnQiLCJrZXkiLCJzaG93RXhwYW5kQ29sdW1uIiwiZXhwYW5kQ29sdW1uUG9zaXRpb24iLCJvYmplY3QiLCJSb3dQdXJlQ29udGVudCIsInNob3VsZFVwZGF0ZSIsImNvbHVtbnMiLCJlZGl0YWJsZSIsImVkaXRpbmdSb3dJZHgiLCJlZGl0aW5nQ29sSWR4Iiwib25TdGFydCIsImNsaWNrVG9FZGl0IiwiZGJjbGlja1RvRWRpdCIsIkVkaXRpbmdDZWxsQ29tcG9uZW50IiwidGFiSW5kZXhTdGFydCIsInRhYkluZGV4IiwiZGF0YUZpZWxkIiwiY29udGVudCIsImNlbGxUaXRsZSIsImNlbGxTdHlsZSIsImNlbGxBdHRycyIsImlzRnVuY3Rpb24iLCJvcmlnaW5GbiIsImNlbGxDbGFzc2VzIiwiY2xhc3NlcyIsInN0eWxlIiwidGl0bGUiLCJhbGlnbiIsInRleHRBbGlnbiIsImNsYXNzTmFtZSIsImVkaXRhYmxlQ2VsbCIsImNsaWNrTnVtIiwiY3JlYXRlQ2xpY2tFdmVudEhhbmRsZXIiLCJzZWxlY3RhYmxlIiwiZXhwYW5kYWJsZSIsIkRFTEFZX0ZPUl9EQkNMSUNLIiwiY2xpY2tGbiIsImV4cGFuZEJ5Q29sdW1uT25seSIsImNsaWNrVG9FeHBhbmQiLCJjbGlja1RvU2VsZWN0IiwiaXNFcXVhbCIsInNob3VsZFVwZGF0ZUJ5Q2VsbEVkaXRpbmciLCJzaG91bGRVcGRhdGVkQnlOb3JtYWxQcm9wcyIsInNob3VsZFVwZGF0ZUNoaWxkIiwic2hvdWxkVXBkYXRlQnlDb2x1bW5zRm9yU2ltcGxlQ2hlY2siLCJCb290c3RyYXBUYWJsZSIsImdldERhdGEiLCJ2aXNpYmxlUm93cyIsInZhbGlkYXRlUHJvcHMiLCJvbkRhdGFTaXplQ2hhbmdlIiwicGFnaW5hdGlvbiIsImRhdGFTaXplIiwibG9hZGluZyIsIm92ZXJsYXkiLCJMb2FkaW5nT3ZlcmxheSIsInJlbmRlclRhYmxlIiwidGFiSW5kZXhDZWxsIiwic3RyaXBlZCIsImhvdmVyIiwiYm9yZGVyZWQiLCJjb25kZW5zZWQiLCJub0RhdGFJbmRpY2F0aW9uIiwiY2FwdGlvbiIsInJvd1N0eWxlIiwicm93Q2xhc3NlcyIsIndyYXBwZXJDbGFzc2VzIiwicm93RXZlbnRzIiwiY2VsbEVkaXQiLCJmaWx0ZXJQb3NpdGlvbiIsInRhYmxlV3JhcHBlckNsYXNzIiwidGFibGVDbGFzcyIsImhhc0ZpbHRlcnMiLCJzb21lIiwiY29sIiwiZmlsdGVyUmVuZGVyZXIiLCJoYXNGb290ZXIiLCJoYXMiLCJ0YWJsZUNhcHRpb24iLCJoZWFkZXJDbGFzc2VzIiwiaGVhZGVyV3JhcHBlckNsYXNzZXMiLCJzb3J0RmllbGQiLCJzb3J0T3JkZXIiLCJvblNvcnQiLCJzb3J0Q2FyZXQiLCJvbkZpbHRlciIsImN1cnJGaWx0ZXJzIiwib25FeHRlcm5hbEZpbHRlciIsImZpbHRlcnNDbGFzc2VzIiwiYm9keUNsYXNzZXMiLCJpc0VtcHR5IiwidmlzaWJsZUNvbHVtblNpemUiLCJmb290ZXJDbGFzc2VzIiwiYm9vbCIsInJlbW90ZSIsIm9uZU9mVHlwZSIsInNoYXBlIiwib25lT2YiLCJoaWRlU2VsZWN0QWxsIiwibm9uU2VsZWN0YWJsZVN0eWxlIiwibm9uU2VsZWN0YWJsZUNsYXNzZXMiLCJiZ0NvbG9yIiwic2VsZWN0aW9uUmVuZGVyZXIiLCJzZWxlY3Rpb25IZWFkZXJSZW5kZXJlciIsImhlYWRlckNvbHVtblN0eWxlIiwic2VsZWN0Q29sdW1uU3R5bGUiLCJyZW5kZXJlciIsImV4cGFuZENvbHVtblJlbmRlcmVyIiwiZXhwYW5kSGVhZGVyQ29sdW1uUmVuZGVyZXIiLCJwYXJlbnRDbGFzc05hbWUiLCJkZWZhdWx0U29ydGVkIiwiYXJyYXlPZiIsIm9yZGVyIiwic29ydEZ1bmMiLCJkZWZhdWx0U29ydERpcmVjdGlvbiIsIm9uVGFibGVDaGFuZ2UiLCJzZWFyY2giLCJzZWFyY2hUZXh0Iiwic2VhcmNoQ29udGV4dCIsInNldERlcGVuZGVuY3lNb2R1bGVzIiwiZGVmYXVsdFByb3BzIiwibm9uRWRpdGFibGVSb3dzIiwiSGVhZGVyIiwiZ2xvYmFsU29ydENhcmV0IiwiU2VsZWN0aW9uSGVhZGVyQ2VsbENvbXAiLCJFeHBhbnNpb25IZWFkZXJDZWxsQ29tcCIsImN1cnJTb3J0IiwiaXNMYXN0U29ydGluZyIsIkhlYWRlckNlbGwiLCJzb3J0aW5nIiwidGV4dCIsImhlYWRlclRpdGxlIiwiaGVhZGVyQWxpZ24iLCJoZWFkZXJGb3JtYXR0ZXIiLCJoZWFkZXJFdmVudHMiLCJoZWFkZXJTdHlsZSIsImhlYWRlckF0dHJzIiwiaGVhZGVyU29ydGluZ0NsYXNzZXMiLCJoZWFkZXJTb3J0aW5nU3R5bGUiLCJzb3J0Q2FyZXRmdW5jIiwiZGVsZWdhdGVFdmVudHMiLCJkZWxlZ2F0ZSIsImN1c3RvbUF0dHJzIiwic29ydFN5bWJvbCIsImZpbHRlckVsbSIsImN1c3RvbUNsaWNrIiwib25DbGljayIsIm9uS2V5VXAiLCJvbkN1c3RvbUZpbHRlciIsInNvcnRFbGVtZW50IiwiZmlsdGVyRWxlbWVudCIsImlzRHVtbXlGaWVsZCIsImhpZGRlbiIsImZvcm1hdHRlciIsImZvcm1hdEV4dHJhRGF0YSIsImFueSIsImVkaXRvciIsImVkaXRDZWxsU3R5bGUiLCJlZGl0Q2VsbENsYXNzZXMiLCJlZGl0b3JTdHlsZSIsImVkaXRvckNsYXNzZXMiLCJlZGl0b3JSZW5kZXJlciIsInZhbGlkYXRvciIsImZpbHRlclZhbHVlIiwic2VhcmNoYWJsZSIsIm51bWJlciIsIlNvcnRTeW1ib2wiLCJTb3J0Q2FyZXQiLCJvcmRlckNsYXNzIiwiZHJvcHVwIiwiQ2hlY2tCb3giLCJpbmRldGVybWluYXRlIiwiaW5wdXQiLCJTZWxlY3Rpb25IZWFkZXJDZWxsIiwiaGFuZGxlQ2hlY2tCb3hDbGljayIsIkV4cGFuc2lvbkhlYWRlckNlbGwiLCJlZGl0Q2VsbCIsIm5ld1ZhbHVlIiwiY29tcGFyYXRvciIsImxvY2FsZUNvbXBhcmUiLCJzb3J0VmFsdWUiLCJfZGF0YSIsInZhbHVlQSIsInZhbHVlQiIsIm5leHRPcmRlciIsImN1cnJlbnRTb3J0Q29sdW1uIiwic29ydENvbHVtbiIsImRlZmF1bHRPcmRlciIsInR5cGVDb252ZXJ0IiwiU3RyaW5nIiwiTnVtYmVyIiwiRGF0ZSIsIkZpbHRlcnMiLCJmaWx0ZXJDb2x1bW5zIiwic2hvd0ZpbHRlcnNSb3ciLCJkaXNwbGF5IiwiRmlsdGVyc0NlbGwiLCJDYXB0aW9uIiwiY2FwdGlvblNpZGUiLCJCb2R5IiwiRWRpdGluZ0NlbGwiLCJjcmVhdGVFZGl0aW5nQ2VsbCIsIm9wdGlvbnMiLCJvblN0YXJ0RWRpdCIsIlJvd0NvbXBvbmVudCIsInNlbGVjdFJvd0VuYWJsZWQiLCJleHBhbmRSb3dFbmFibGVkIiwid2l0aFJvd0xldmVsQ2VsbEVkaXQiLCJpbmRpY2F0aW9uIiwiYWRkaXRpb25hbFJvd1Byb3BzIiwiYmFzZVJvd1Byb3BzIiwiU2ltcGxlUm93Iiwic2hvdWxkVXBkYXRlUm93Q29udGVudCIsInNob3VsZFJvd0NvbnRlbnRVcGRhdGUiLCJzaG91bGRVcGRhdGVkQnlTZWxmUHJvcHMiLCJ0ckF0dHJzIiwiQ2VsbCIsImNyZWF0ZUhhbmRsZUVkaXRpbmdDZWxsIiwib3JpZ2luRnVuYyIsIm9uRG91YmxlQ2xpY2siLCJSb3dBZ2dyZWdhdG9yIiwic2VsZWN0Q2VsbCIsImV4cGFuZENlbGwiLCJFeHBhbmRDZWxsIiwiaGFuZGxlQ2xpY2siLCJzdG9wUHJvcGFnYXRpb24iLCJTZWxlY3Rpb25DZWxsIiwiZGlzYWJsZWQiLCJpbnB1dFR5cGUiLCJSb3dTZWN0aW9uIiwiY29sU3BhbiIsInJlbmRlcldpdGhTZWxlY3Rpb24iLCJub3RTZWxlY3RhYmxlIiwic2VsZWN0ZWRTdHlsZSIsInNlbGVjdGVkQ2xhc3NlcyIsImJhY2tncm91bmRDb2xvciIsIm5vdFNlbGVjdGFibGVTdHlsZSIsIm5vdFNlbGVjdGFibGVDbGFzc2VzIiwid2l0aENvbnN1bWVyIiwiZGlzcGxheU5hbWUiLCJyZW5kZXJXaXRoRXhwYW5zaW9uIiwiRXhwYW5kUm93IiwiRm9vdGVyIiwiZm9vdGVyIiwiY29sdW1uRGF0YSIsInBsdWNrIiwiRm9vdGVyQ2VsbCIsImZvb3RlclRpdGxlIiwiZm9vdGVyQWxpZ24iLCJmb290ZXJGb3JtYXR0ZXIiLCJmb290ZXJFdmVudHMiLCJmb290ZXJTdHlsZSIsImZvb3RlckF0dHJzIiwiaXNTdHJpbmciLCJoaWRkZW5Sb3dzIiwiaW5jbHVkZVNlbGVjdENvbHVtbiIsImNvbHVtbkxlbiIsImNvbHVtblRvZ2dsZSIsInRvZ2dsZXMiLCJuYW1lIiwiYyIsIndpdGhDb250ZXh0IiwiRGF0YUNvbnRleHQiLCJyZWdpc3RlckV4cG9zZWRBUEkiLCJleHBvc2VkQVBJRW1pdHRlciIsIm9uIiwicGF5bG9hZCIsInRhYmxlIiwic2VsZWN0aW9uQ29udGV4dCIsImdldFNlbGVjdGVkIiwiZ2V0U2VhcmNoZWQiLCJmaWx0ZXJDb250ZXh0IiwiZ2V0RmlsdGVyZWQiLCJTb3J0Q29udGV4dCIsImlzUmVtb3RlU29ydCIsImhhbmRsZVJlbW90ZVNvcnRDaGFuZ2UiLCJDb2x1bW5NYW5hZ2VtZW50Q29udGV4dCIsIkNlbGxFZGl0Q29udGV4dCIsImlzUmVtb3RlQ2VsbEVkaXQiLCJoYW5kbGVSZW1vdGVDZWxsQ2hhbmdlIiwiRmlsdGVyQ29udGV4dCIsImlzUmVtb3RlRmlsdGVyaW5nIiwiaGFuZGxlUmVtb3RlRmlsdGVyQ2hhbmdlIiwiUGFnaW5hdGlvbkNvbnRleHQiLCJTZWFyY2hDb250ZXh0IiwiaXNSZW1vdGVTZWFyY2giLCJoYW5kbGVSZW1vdGVTZWFyY2hDaGFuZ2UiLCJzZXRQYWdpbmF0aW9uUmVtb3RlRW1pdHRlciIsInJlbW90ZUVtaXR0ZXIiLCJpc1JlbW90ZVBhZ2luYXRpb24iLCJoYW5kbGVSZW1vdGVQYWdlQ2hhbmdlIiwicm9vdFByb3BzIiwiZmlsdGVyUHJvcHMiLCJzZWFyY2hQcm9wcyIsInNvcnRQcm9wcyIsInBhZ2luYXRpb25Qcm9wcyIsImNvbHVtblRvZ2dsZVByb3BzIiwibiIsImJhc2UiLCJiYXNlUHJvcHMiLCJyb3dFeHBhbmRDb250ZXh0IiwicGFnaW5hdGlvbkNvbnRleHQiLCJzb3J0Q29udGV4dCIsImRhdGFDaGFuZ2VMaXN0ZW5lciIsImNlbGxFZGl0Q29udGV4dCIsInJlbmRlckJhc2UiLCJyZW5kZXJXaXRoQ29sdW1uTWFuYWdlbWVudEN0eCIsInJlbmRlcldpdGhTZWxlY3Rpb25DdHgiLCJyZW5kZXJXaXRoUm93RXhwYW5kQ3R4IiwicmVuZGVyV2l0aFBhZ2luYXRpb25DdHgiLCJyZW5kZXJXaXRoU29ydEN0eCIsInJlbmRlcldpdGhTZWFyY2hDdHgiLCJyZW5kZXJXaXRoRmlsdGVyQ3R4IiwicmVuZGVyV2l0aENlbGxFZGl0Q3R4IiwiRGF0YVByb3ZpZGVyIiwiQ29sdW1uTWFuYWdlbWVudFByb3ZpZGVyIiwidG9nZ2xlQ29sdW1uIiwiZGF0YU9wZXJhdG9yIiwiaGFuZGxlU29ydENoYW5nZSIsIlNvcnRQcm92aWRlciIsImluaXRTb3J0Iiwic29ydENvbHVtbnMiLCJoYW5kbGVTb3J0IiwiZ2V0TmV3ZXN0U3RhdGUiLCJwYWdlIiwic2l6ZVBlclBhZ2UiLCJmaWx0ZXJzIiwiY3VyclBhZ2UiLCJjdXJyU2l6ZVBlclBhZ2UiLCJuZXdTdGF0ZSIsInBhZ2VTdGFydEluZGV4Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsTztBQ1ZBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNB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Q0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw0QkFBNEI7O0FBRTVCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxvRUFBb0U7QUFDcEU7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1AsS0FBSztBQUNMOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxzQ0FBc0M7O0FBRXRDO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxpS0FBOEU7OztBQUc5RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixjQUFjLFVBQVUsSUFBSTtBQUNqRCxRQUFRO0FBQ1IsaUNBQWlDLGFBQWEsTUFBTSxFQUFFO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx3QkFBd0I7QUFDeEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxVQUFVO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBGQUEwRixhQUFhO0FBQ3ZHO0FBQ0E7O0FBRUE7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFFOzs7Ozs7QUNua0JBLGdEOzs7Ozs7O0FDQUE7QUFDQTtBQUNBLEc7Ozs7Ozs7Ozs7O0FDRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLFc7Ozs7Ozs7OztBQ2pCRDtBQUNBLDRIOzs7Ozs7Ozs7Ozs7Ozs7OztBQ0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ3VFOztBQUV2RTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSw0UUFBc0c7OztBQUd0RztBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxSEFBa0M7O0FBRWxDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLEtBQUs7QUFDdEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBLDBFOzs7Ozs7QUM5TEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxHQUFHO0FBQ0gsb0JBQW9CLFNBQVM7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7O0FDN1NBOzs7O0FBQ0E7Ozs7OztrQkFFZSxpRDs7Ozs7Ozs7Ozs7Ozs7O0FDQWY7Ozs7QUFDQTs7OztBQUNBOzs7O0FBRUE7Ozs7QUFDQTs7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QTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksOEJBQThCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzREFBc0Q7QUFDdEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEMsMEJBQTBCO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxxQkFBcUIsY0FBYztBQUNuQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLFlBQVk7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLGVBQWU7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxxQkFBcUIsZUFBZTtBQUNwQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLFlBQVk7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsZ0JBQWdCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLFlBQVk7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsWUFBWTtBQUNyRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLGdCQUFnQjtBQUN6QztBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsT0FBTztBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QyxZQUFZO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsWUFBWTtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EscURBQXFEO0FBQ3JEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsWUFBWTtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2RUFBNkU7QUFDN0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLFlBQVk7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixPQUFPO0FBQzFCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZUFBZTtBQUNmLGNBQWM7QUFDZCxjQUFjO0FBQ2QsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsWUFBWTtBQUMvQjtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCOztBQUU1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPO0FBQ1AscUJBQXFCO0FBQ3JCOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsaUJBQWlCOztBQUVqQjtBQUNBLGtEQUFrRCxFQUFFLGlCQUFpQjs7QUFFckU7QUFDQSx3QkFBd0IsOEJBQThCO0FBQ3RELDJCQUEyQjs7QUFFM0I7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGtEQUFrRCxpQkFBaUI7O0FBRW5FO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFBQTtBQUNMO0FBQ0EsQ0FBQzs7Ozs7Ozs7QUMzcEREOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw0Q0FBNEM7O0FBRTVDOzs7Ozs7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3BCQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7QUFDQTs7Ozs7Ozs7OzsrZUFMQTs7O0FBT08sSUFBTUcsOEJBQVcsU0FBWEEsUUFBVztBQUFBLE1BQUc1SSxTQUFILFFBQUdBLFNBQUg7QUFBQSxNQUFjbkgsT0FBZCxRQUFjQSxPQUFkO0FBQUEsTUFBdUJnUSxhQUF2QixRQUF1QkEsYUFBdkI7QUFBQSxTQUN0QjtBQUNFLFVBQUssVUFEUDtBQUVFLGFBQVVoUSxPQUZaO0FBR0UsZUFBWW1ILFNBSGQ7QUFJRSxTQUFNLGFBQUM4SSxLQUFELEVBQVc7QUFDZixVQUFJQSxLQUFKLEVBQVdBLE1BQU1ELGFBQU4sR0FBc0JBLGFBQXRCLENBREksQ0FDaUM7QUFDakQsS0FOSDtBQU9FLGNBQVcsb0JBQU0sQ0FBRTtBQVByQixJQURzQjtBQUFBLENBQWpCOztBQVlQRCxTQUFTbE8sU0FBVCxHQUFxQjtBQUNuQjdCLFdBQVMsb0JBQVVrTCxJQUFWLENBQWVuSixVQURMO0FBRW5CaU8saUJBQWUsb0JBQVU5RSxJQUFWLENBQWVuSixVQUZYO0FBR25Cb0YsYUFBVyxvQkFBVWxGO0FBSEYsQ0FBckI7O0lBTXFCaU8sbUI7OztBQVVuQixpQ0FBYztBQUFBOztBQUFBOztBQUVaLFVBQUtDLG1CQUFMLEdBQTJCLE1BQUtBLG1CQUFMLENBQXlCalIsSUFBekIsT0FBM0I7QUFGWTtBQUdiOztBQUVEOzs7Ozs7Ozs7MENBS3NCbUMsUyxFQUFXO0FBQUEsVUFDdkIvRCxpQkFEdUIsbUJBQ3ZCQSxpQkFEdUI7QUFBQSxtQkFFQyxLQUFLMEIsS0FGTjtBQUFBLFVBRXZCbUIsSUFGdUIsVUFFdkJBLElBRnVCO0FBQUEsVUFFakJxQixhQUZpQixVQUVqQkEsYUFGaUI7OztBQUkvQixVQUFJckIsU0FBUzdDLGlCQUFiLEVBQWdDLE9BQU8sS0FBUDs7QUFFaEMsYUFBTytELFVBQVVHLGFBQVYsS0FBNEJBLGFBQW5DO0FBQ0Q7Ozt3Q0FFbUJwRyxDLEVBQUc7QUFBQSxvQkFDc0IsS0FBSzRELEtBRDNCO0FBQUEsVUFDYjBDLGVBRGEsV0FDYkEsZUFEYTtBQUFBLFVBQ0lGLGFBREosV0FDSUEsYUFESjs7QUFFckIsVUFBTWIsYUFDSmEsa0JBQWtCLGdCQUFNL0QsdUJBQXhCLElBQ0ErRCxrQkFBa0IsZ0JBQU05RCw2QkFGMUI7O0FBSUFnRSxzQkFBZ0J0RyxDQUFoQixFQUFtQnVGLFVBQW5CO0FBQ0Q7Ozs2QkFFUTtBQUFBOztBQUFBLFVBRUxsRCx1QkFGSyxtQkFFTEEsdUJBRks7QUFBQSxVQUVvQkMsNkJBRnBCLG1CQUVvQkEsNkJBRnBCO0FBQUEsVUFFbURILG1CQUZuRCxtQkFFbURBLG1CQUZuRDtBQUFBLG9CQVdILEtBQUt5QixLQVhGO0FBQUEsVUFNTG1CLElBTkssV0FNTEEsSUFOSztBQUFBLFVBT0xxQixhQVBLLFdBT0xBLGFBUEs7QUFBQSxVQVFMb0ssdUJBUkssV0FRTEEsdUJBUks7QUFBQSxVQVNMTCxhQVRLLFdBU0xBLGFBVEs7QUFBQSxVQVVMTSxpQkFWSyxXQVVMQSxpQkFWSzs7QUFZUCxVQUFJTixhQUFKLEVBQW1CO0FBQ2pCLGVBQU8sc0NBQUksMEJBQUosR0FBUDtBQUNEOztBQUVELFVBQU12TCxVQUFVd0Isa0JBQWtCL0QsdUJBQWxDOztBQUVBLFVBQU11UyxnQkFBZ0J4TyxrQkFBa0I5RCw2QkFBeEM7O0FBRUEsVUFBTTZCLFFBQVEsRUFBZDtBQUNBLFVBQUlnSCxnQkFBSjtBQUNBLFVBQUlxRiwyQkFBMkJ6TCxTQUFTNUMsbUJBQXhDLEVBQTZEO0FBQzNEZ0MsY0FBTWdQLE9BQU4sR0FBZ0IsS0FBSzRCLG1CQUFyQjtBQUNEOztBQUVENVEsWUFBTXdILEtBQU4sR0FBYyxnQkFBRUosVUFBRixDQUFha0YsaUJBQWIsSUFDWkEsa0JBQWtCckssYUFBbEIsQ0FEWSxHQUVacUssaUJBRkY7O0FBSUEsYUFDRTtBQUFBLG9DQUFrQixRQUFsQjtBQUFBO0FBRUkseUJBQW9CO0FBQUEsY0FBakJ0TixVQUFpQixTQUFqQkEsVUFBaUI7O0FBQ2xCLGNBQUlxTix1QkFBSixFQUE2QjtBQUMzQnJGLHNCQUFVcUYsd0JBQXdCO0FBQ2hDekwsd0JBRGdDO0FBRWhDSCw4QkFGZ0M7QUFHaENnUTtBQUhnQyxhQUF4QixDQUFWO0FBS0QsV0FORCxNQU1PLElBQUk3UCxTQUFTNUMsbUJBQWIsRUFBa0M7QUFDdkNnSixzQkFDRSw4QkFBQyxRQUFELGVBQ08sT0FBS3ZILEtBRFo7QUFFRSx1QkFBVWdCLE9BRlo7QUFHRSx5QkFBWXpCLGFBQWEsbUJBQWIsR0FBbUMsRUFIakQ7QUFJRSw2QkFBZ0J5UjtBQUpsQixlQURGO0FBUUQ7QUFDRCxpQkFDRTtBQUFBO0FBQUEsdUJBQUksV0FBVSx1QkFBZCxFQUFzQywwQkFBdEMsSUFBOER6USxLQUE5RDtBQUF3RWdIO0FBQXhFLFdBREY7QUFHRDtBQXRCTCxPQURGO0FBMkJEOzs7Ozs7QUEvRmtCMkosbUIsQ0FDWnJPLFMsR0FBWTtBQUNqQjFCLFFBQU0sb0JBQVU4QixNQUFWLENBQWlCRixVQUROO0FBRWpCUCxpQkFBZSxvQkFBVVMsTUFGUjtBQUdqQlAsbUJBQWlCLG9CQUFVL0UsSUFIVjtBQUlqQjRPLGlCQUFlLG9CQUFVTCxJQUpSO0FBS2pCVSwyQkFBeUIsb0JBQVVqUCxJQUxsQjtBQU1qQmtQLHFCQUFtQixvQkFBVVQsU0FBVixDQUFvQixDQUFDLG9CQUFVM0YsTUFBWCxFQUFtQixvQkFBVTlJLElBQTdCLENBQXBCO0FBTkYsQztrQkFEQXVULG1COzs7Ozs7Ozs7Ozs7Ozs7OztBQ3ZCckI7Ozs7QUFDQTs7Ozs7Ozs7OzsrZUFIQTtBQUNBOzs7SUFJcUJFLG1COzs7QUFPbkIsaUNBQWM7QUFBQTs7QUFBQTs7QUFFWixVQUFLRCxtQkFBTCxHQUEyQixNQUFLQSxtQkFBTCxDQUF5QmpSLElBQXpCLE9BQTNCO0FBRlk7QUFHYjs7Ozt3Q0FFbUI5RCxDLEVBQUc7QUFBQSxtQkFDb0IsS0FBSzRELEtBRHpCO0FBQUEsVUFDYmlGLFlBRGEsVUFDYkEsWUFEYTtBQUFBLFVBQ0NFLGNBREQsVUFDQ0EsY0FERDs7O0FBR3JCQSxxQkFBZS9JLENBQWYsRUFBa0IsQ0FBQzZJLFlBQW5CO0FBQ0Q7Ozs2QkFFUTtBQUFBLG9CQUM4QyxLQUFLakYsS0FEbkQ7QUFBQSxVQUNDaUYsWUFERCxXQUNDQSxZQUREO0FBQUEsVUFDZWdJLDBCQURmLFdBQ2VBLDBCQURmOztBQUVQLFVBQU0xTSxRQUFRO0FBQ1pnUCxpQkFBUyxLQUFLNEI7QUFERixPQUFkOztBQUlBLGFBQ0U7QUFBQTtBQUFBLG1CQUFJLFdBQVUsb0JBQWQsRUFBbUMsMEJBQW5DLElBQTJENVEsS0FBM0Q7QUFFSTBNLHFDQUNFQSwyQkFBMkIsRUFBRWhJLDBCQUFGLEVBQTNCLENBREYsR0FFR0EsZUFBZSxLQUFmLEdBQXVCO0FBSjlCLE9BREY7QUFTRDs7Ozs7O0FBakNrQm1NLG1CLENBQ1p2TyxTLEdBQVk7QUFDakJvQyxnQkFBYyxvQkFBVWlILElBQVYsQ0FBZW5KLFVBRFo7QUFFakJvQyxrQkFBZ0Isb0JBQVV4SCxJQUFWLENBQWVvRixVQUZkO0FBR2pCa0ssOEJBQTRCLG9CQUFVdFA7QUFIckIsQztrQkFEQXlULG1COzs7Ozs7Ozs7Ozs7O0FDTHJCOzs7O0FBQ0E7Ozs7OztrQkFFZTtBQUFBLFNBQWE7QUFBQSxXQUMxQjtBQUFBLGlDQUFrQixRQUFsQjtBQUFBO0FBQ0k7QUFBQSxlQUFhLDhCQUFDLFNBQUQsRUFBZ0JsUSxTQUFoQixDQUFiO0FBQUE7QUFESixLQUQwQjtBQUFBLEdBQWI7QUFBQSxDOzs7Ozs7Ozs7Ozs7Ozs7O0FDSGY7Ozs7QUFDQTs7OztBQUVPLElBQU0rRCxzQ0FBZSxTQUFmQSxZQUFlLENBQzFCcEYsSUFEMEIsRUFFMUJKLFFBRjBCLEVBSXZCO0FBQUEsTUFESG9FLFFBQ0csdUVBRFEsRUFDUjs7QUFBQSw2QkFDTTFHLENBRE47QUFFRCxRQUFNNEQsU0FBUyxnQkFBRXJGLEdBQUYsQ0FBTW1FLEtBQUsxQyxDQUFMLENBQU4sRUFBZXNDLFFBQWYsQ0FBZjtBQUNBLFFBQUksT0FBT29FLFNBQVMvRCxJQUFULENBQWM7QUFBQSxhQUFLeUYsTUFBTXhFLE1BQVg7QUFBQSxLQUFkLENBQVAsS0FBNEMsV0FBaEQsRUFBNkQ7QUFDM0Q7QUFBQSxXQUFPO0FBQVA7QUFDRDtBQUxBOztBQUNILE9BQUssSUFBSTVELElBQUksQ0FBYixFQUFnQkEsSUFBSTBDLEtBQUtsRCxNQUF6QixFQUFpQ1EsS0FBSyxDQUF0QyxFQUF5QztBQUFBLHFCQUFoQ0EsQ0FBZ0M7O0FBQUE7QUFLeEM7QUFDRCxTQUFPLEtBQVA7QUFDRCxDQVpNOztBQWNBLElBQU13SCwwQ0FBaUIsU0FBakJBLGNBQWlCLENBQUM5RSxJQUFELEVBQU9KLFFBQVAsRUFBZ0M7QUFBQSxNQUFmK0YsS0FBZSx1RUFBUCxFQUFPOztBQUM1RCxNQUFJQSxNQUFNN0ksTUFBTixLQUFpQixDQUFyQixFQUF3QjtBQUN0QixXQUFPa0QsS0FBS3lGLEdBQUwsQ0FBUztBQUFBLGFBQU8sZ0JBQUU1SixHQUFGLENBQU1pRSxHQUFOLEVBQVdGLFFBQVgsQ0FBUDtBQUFBLEtBQVQsQ0FBUDtBQUNEO0FBQ0QsU0FBT0ksS0FDSjJCLE1BREksQ0FDRztBQUFBLFdBQU8sQ0FBQyxnQkFBRW5HLFFBQUYsQ0FBV21LLEtBQVgsRUFBa0IsZ0JBQUU5SixHQUFGLENBQU1pRSxHQUFOLEVBQVdGLFFBQVgsQ0FBbEIsQ0FBUjtBQUFBLEdBREgsRUFFSjZGLEdBRkksQ0FFQTtBQUFBLFdBQU8sZ0JBQUU1SixHQUFGLENBQU1pRSxHQUFOLEVBQVdGLFFBQVgsQ0FBUDtBQUFBLEdBRkEsQ0FBUDtBQUdELENBUE07O0FBU0EsSUFBTW1GLDRDQUFrQixTQUFsQkEsZUFBa0IsQ0FBQy9FLElBQUQsRUFBT0osUUFBUCxFQUFpQm9FLFFBQWpCO0FBQUEsU0FDN0JBLFNBQVN5QixHQUFULENBQWE7QUFBQSxXQUFLLHlCQUFjekYsSUFBZCxFQUFvQkosUUFBcEIsRUFBOEJpRyxDQUE5QixDQUFMO0FBQUEsR0FBYixDQUQ2QjtBQUFBLENBQXhCLEM7Ozs7Ozs7Ozs7Ozs7O0FDMUJQOzs7O0FBQ0E7Ozs7QUFFTyxJQUFNMkwsOEJBQVcsU0FBWEEsUUFBVyxDQUFDeFIsSUFBRCxFQUFPSixRQUFQLEVBQWlCcUYsS0FBakIsRUFBd0J3QyxTQUF4QixFQUFtQ2dLLFFBQW5DLEVBQWdEO0FBQ3RFLE1BQU0zUixNQUFNLHlCQUFjRSxJQUFkLEVBQW9CSixRQUFwQixFQUE4QnFGLEtBQTlCLENBQVo7QUFDQSxNQUFJbkYsR0FBSixFQUFTLGdCQUFFdEQsR0FBRixDQUFNc0QsR0FBTixFQUFXMkgsU0FBWCxFQUFzQmdLLFFBQXRCO0FBQ1YsQ0FITSxDOzs7Ozs7Ozs7Ozs7OztBQ0FQOzs7O0FBQ0E7Ozs7OztvTUFKQTtBQUNBO0FBQ0E7OztBQUlBLFNBQVNDLFVBQVQsQ0FBb0IvVSxDQUFwQixFQUF1QkMsQ0FBdkIsRUFBMEI7QUFDeEIsTUFBSVQsZUFBSjtBQUNBLE1BQUksT0FBT1MsQ0FBUCxLQUFhLFFBQWpCLEVBQTJCO0FBQ3pCVCxhQUFTUyxFQUFFK1UsYUFBRixDQUFnQmhWLENBQWhCLENBQVQ7QUFDRCxHQUZELE1BRU87QUFDTFIsYUFBU1EsSUFBSUMsQ0FBSixHQUFRLENBQUMsQ0FBVCxHQUFlRCxJQUFJQyxDQUFMLEdBQVUsQ0FBVixHQUFjLENBQXJDO0FBQ0Q7QUFDRCxTQUFPVCxNQUFQO0FBQ0Q7O0FBRU0sSUFBTXdILHNCQUFPLFNBQVBBLElBQU8sQ0FBQzNELElBQUQsRUFBTzBMLFNBQVAsUUFBeUQ7QUFBQSxNQUFyQ2pFLFNBQXFDLFFBQXJDQSxTQUFxQztBQUFBLE1BQTFCZ0csUUFBMEIsUUFBMUJBLFFBQTBCO0FBQUEsTUFBaEJtRSxTQUFnQixRQUFoQkEsU0FBZ0I7O0FBQzNFLE1BQU1DLHFDQUFZN1IsSUFBWixFQUFOO0FBQ0E2UixRQUFNbE8sSUFBTixDQUFXLFVBQUNoSCxDQUFELEVBQUlDLENBQUosRUFBVTtBQUNuQixRQUFJVCxlQUFKO0FBQ0EsUUFBSTJWLFNBQVMsZ0JBQUVqVyxHQUFGLENBQU1jLENBQU4sRUFBUzhLLFNBQVQsQ0FBYjtBQUNBLFFBQUlzSyxTQUFTLGdCQUFFbFcsR0FBRixDQUFNZSxDQUFOLEVBQVM2SyxTQUFULENBQWI7QUFDQSxRQUFJbUssU0FBSixFQUFlO0FBQ2JFLGVBQVNGLFVBQVVFLE1BQVYsRUFBa0JuVixDQUFsQixDQUFUO0FBQ0FvVixlQUFTSCxVQUFVRyxNQUFWLEVBQWtCblYsQ0FBbEIsQ0FBVDtBQUNELEtBSEQsTUFHTztBQUNMa1YsZUFBUyxnQkFBRXRVLFNBQUYsQ0FBWXNVLE1BQVosSUFBc0JBLE1BQXRCLEdBQStCLEVBQXhDO0FBQ0FDLGVBQVMsZ0JBQUV2VSxTQUFGLENBQVl1VSxNQUFaLElBQXNCQSxNQUF0QixHQUErQixFQUF4QztBQUNEOztBQUVELFFBQUl0RSxRQUFKLEVBQWM7QUFDWnRSLGVBQVNzUixTQUFTcUUsTUFBVCxFQUFpQkMsTUFBakIsRUFBeUJyRyxTQUF6QixFQUFvQ2pFLFNBQXBDLEVBQStDOUssQ0FBL0MsRUFBa0RDLENBQWxELENBQVQ7QUFDRCxLQUZELE1BRU87QUFDTCxVQUFJOE8sY0FBYyxnQkFBTWxOLFNBQXhCLEVBQW1DO0FBQ2pDckMsaUJBQVN1VixXQUFXSSxNQUFYLEVBQW1CQyxNQUFuQixDQUFUO0FBQ0QsT0FGRCxNQUVPO0FBQ0w1VixpQkFBU3VWLFdBQVdLLE1BQVgsRUFBbUJELE1BQW5CLENBQVQ7QUFDRDtBQUNGO0FBQ0QsV0FBTzNWLE1BQVA7QUFDRCxHQXRCRDtBQXVCQSxTQUFPMFYsS0FBUDtBQUNELENBMUJNOztBQTRCQSxJQUFNRyxnQ0FBWSxTQUFaQSxTQUFZLENBQ3ZCQyxpQkFEdUIsU0FJcEI7QUFBQSxNQUZEdkcsU0FFQyxTQUZEQSxTQUVDO0FBQUEsTUFGVXdHLFVBRVYsU0FGVUEsVUFFVjtBQUFBLE1BREhDLFlBQ0csdUVBRFksZ0JBQU0zVCxTQUNsQjs7QUFDSCxNQUFJLENBQUMwVCxVQUFELElBQWVELGtCQUFrQnhLLFNBQWxCLEtBQWdDeUssV0FBV3pLLFNBQTlELEVBQXlFLE9BQU8wSyxZQUFQO0FBQ3pFLFNBQU96RyxjQUFjLGdCQUFNbE4sU0FBcEIsR0FBZ0MsZ0JBQU1ELFFBQXRDLEdBQWlELGdCQUFNQyxTQUE5RDtBQUNELENBUE0sQzs7Ozs7Ozs7Ozs7Ozs7QUM1Q1A7Ozs7OztBQUVPLElBQU00VCxvQ0FBYyxTQUFkQSxXQUFjLENBQUN4TyxJQUFELEVBQU9sSSxLQUFQLEVBQWlCO0FBQzFDLE1BQUlrSSxTQUFTLGdCQUFNM0UsV0FBbkIsRUFBZ0M7QUFDOUIsV0FBT29ULE9BQU8zVyxLQUFQLENBQVA7QUFDRCxHQUZELE1BRU8sSUFBSWtJLFNBQVMsZ0JBQU0xRSxXQUFuQixFQUFnQztBQUNyQyxXQUFPb1QsT0FBTzVXLEtBQVAsQ0FBUDtBQUNELEdBRk0sTUFFQSxJQUFJa0ksU0FBUyxnQkFBTXpFLFlBQW5CLEVBQWlDO0FBQ3RDLFFBQUksT0FBT3pELEtBQVAsS0FBaUIsU0FBckIsRUFBZ0M7QUFDOUIsYUFBT0EsS0FBUDtBQUNEO0FBQ0QsV0FBT0EsVUFBVSxNQUFqQjtBQUNELEdBTE0sTUFLQSxJQUFJa0ksU0FBUyxnQkFBTXhFLFNBQW5CLEVBQThCO0FBQ25DLFdBQU8sSUFBSW1ULElBQUosQ0FBUzdXLEtBQVQsQ0FBUDtBQUNEO0FBQ0QsU0FBT0EsS0FBUDtBQUNELENBZE0sQzs7Ozs7Ozs7Ozs7OztBQ0ZQOzs7O0FBQ0E7Ozs7OztrQkFFZTtBQUFBLFNBQWE7QUFBQSxXQUMxQjtBQUFBLGlDQUFrQixRQUFsQjtBQUFBO0FBQ0k7QUFBQSxlQUFhLDhCQUFDLFNBQUQsRUFBZ0J1SSxTQUFoQixDQUFiO0FBQUE7QUFESixLQUQwQjtBQUFBLEdBQWI7QUFBQSxDOzs7Ozs7Ozs7Ozs7O0FDRmY7Ozs7QUFDQTs7OztBQUVBOzs7O0FBQ0E7Ozs7QUFDQTs7Ozs7O0FBRUEsSUFBTXVPLFVBQVUsU0FBVkEsT0FBVSxDQUFDclMsS0FBRCxFQUFXO0FBQUEsTUFFdkI0RyxPQUZ1QixHQVVyQjVHLEtBVnFCLENBRXZCNEcsT0FGdUI7QUFBQSxNQUd2QjhFLFFBSHVCLEdBVXJCMUwsS0FWcUIsQ0FHdkIwTCxRQUh1QjtBQUFBLE1BSXZCQyxXQUp1QixHQVVyQjNMLEtBVnFCLENBSXZCMkwsV0FKdUI7QUFBQSxNQUt2QmpCLGNBTHVCLEdBVXJCMUssS0FWcUIsQ0FLdkIwSyxjQUx1QjtBQUFBLE1BTXZCa0IsZ0JBTnVCLEdBVXJCNUwsS0FWcUIsQ0FNdkI0TCxnQkFOdUI7QUFBQSxNQU92QnpELFNBUHVCLEdBVXJCbkksS0FWcUIsQ0FPdkJtSSxTQVB1QjtBQUFBLE1BUXZCakgsU0FSdUIsR0FVckJsQixLQVZxQixDQVF2QmtCLFNBUnVCO0FBQUEsTUFTdkI0QyxTQVR1QixHQVVyQjlELEtBVnFCLENBU3ZCOEQsU0FUdUI7OztBQVl6QixXQUFTOEIsYUFBVCxHQUF5QjtBQUN2QixRQUFNME0sZ0JBQWdCLEVBQXRCO0FBQ0EsUUFBSUMsaUJBQWlCLEtBQXJCOztBQUVBM0wsWUFBUW5HLE9BQVIsQ0FBZ0IsVUFBQ0wsTUFBRCxFQUFTakQsQ0FBVCxFQUFlO0FBQzdCbVYsb0JBQWMvUSxJQUFkLENBQW1CO0FBQ2pCLGVBQVFwRSxDQURTO0FBRWpCLGFBQU1pRCxPQUFPa0gsU0FGSTtBQUdqQixnQkFBU2xILE1BSFE7QUFJakIscUJBQWN1TCxXQUpHO0FBS2pCLDBCQUFtQkMsZ0JBTEY7QUFNakIsa0JBQVdGO0FBTk0sUUFBbkI7O0FBU0EsVUFBSXRMLE9BQU80SyxjQUFQLElBQXlCNUssT0FBT29CLE1BQXBDLEVBQTRDO0FBQzFDLFlBQUksQ0FBQytRLGNBQUwsRUFBcUI7QUFDbkJBLDJCQUFpQixJQUFqQjtBQUNEO0FBQ0Y7QUFDRixLQWZEO0FBZ0JBLFdBQU9ELGFBQVA7QUFDRDs7QUFFRCxTQUNFO0FBQUE7QUFBQTtBQUNFLGlCQUFZbkssU0FEZDtBQUVFLGFBQVE7QUFDTnFLLGlCQUNBOUgsbUJBQW1CLGdCQUFNdkwsb0JBQXpCLEdBQ0ksb0JBREosR0FFSTtBQUpFO0FBRlY7QUFTRTtBQUNFLHFCQUFnQnlHLGFBRGxCO0FBRUUsaUJBQVkxRSxTQUZkO0FBR0UsaUJBQVk0QyxTQUhkO0FBSUUsY0FBTztBQUpUO0FBVEYsR0FERjtBQWtCRCxDQXJERCxDLENBUkE7OztBQStEQXVPLFFBQVF4UCxTQUFSLEdBQW9CO0FBQ2xCK0QsV0FBUyxvQkFBVTVELEtBQVYsQ0FBZ0JELFVBRFA7QUFFbEIySSxZQUFVLG9CQUFVL04sSUFGRjtBQUdsQitNLGtCQUFnQixvQkFBVTRCLEtBQVYsQ0FBZ0IsQ0FDOUIsZ0JBQU1uTixvQkFEd0IsRUFFOUIsZ0JBQU1ELHVCQUZ3QixFQUc5QixnQkFBTUUsdUJBSHdCLENBQWhCLENBSEU7QUFRbEJ1TSxlQUFhLG9CQUFVbEYsTUFSTDtBQVNsQm1GLG9CQUFrQixvQkFBVWpPLElBVFY7QUFVbEJ3SyxhQUFXLG9CQUFVbEYsTUFWSDtBQVdsQi9CLGFBQVcsb0JBQVV1RixNQVhIO0FBWWxCM0MsYUFBVyxvQkFBVTJDO0FBWkgsQ0FBcEI7O0FBZUE0TCxRQUFReEUsWUFBUixHQUF1QjtBQUNyQjdILFlBQVUsZ0JBQU03RztBQURLLENBQXZCOztrQkFJZWtULE87Ozs7Ozs7Ozs7Ozs7OztBQ2xGZjs7OztBQUNBOzs7O0FBQ0E7Ozs7OztBQUVBLElBQU1JLGNBQWMsU0FBZEEsV0FBYyxDQUFDelMsS0FBRCxFQUFXO0FBQUEsTUFFM0JNLEtBRjJCLEdBSXpCTixLQUp5QixDQUUzQk0sS0FGMkI7QUFBQSxNQUVwQkYsTUFGb0IsR0FJekJKLEtBSnlCLENBRXBCSSxNQUZvQjtBQUFBLE1BRVp3TCxnQkFGWSxHQUl6QjVMLEtBSnlCLENBRVo0TCxnQkFGWTtBQUFBLE1BRzNCRCxXQUgyQixHQUl6QjNMLEtBSnlCLENBRzNCMkwsV0FIMkI7QUFBQSxNQUdkRCxRQUhjLEdBSXpCMUwsS0FKeUIsQ0FHZDBMLFFBSGM7QUFBQSxNQUtyQlYsY0FMcUIsR0FLTTVLLE1BTE4sQ0FLckI0SyxjQUxxQjtBQUFBLE1BS0x4SixNQUxLLEdBS01wQixNQUxOLENBS0xvQixNQUxLOztBQU03QixNQUFJNk4sa0JBQUo7QUFDQSxNQUFNM0gsWUFBWSxFQUFsQjtBQUNBLE1BQU1ELFlBQVksRUFBbEI7QUFDQUMsWUFBVUssS0FBVixHQUFrQk4sU0FBbEI7QUFDQSxNQUFJckgsT0FBT3FPLFdBQVgsRUFBd0I7QUFDdEJoSCxjQUFVUyxTQUFWLEdBQXNCLGdCQUFFUCxVQUFGLENBQWF2SCxPQUFPcU8sV0FBcEIsSUFDbEJyTyxPQUFPcU8sV0FBUCxDQUFtQnJPLE1BQW5CLEVBQTJCRSxLQUEzQixDQURrQixHQUVsQkYsT0FBT3FPLFdBRlg7QUFHRDtBQUNELE1BQUlyTyxPQUFPNEssY0FBWCxFQUEyQjtBQUN6QixRQUFNeUUsaUJBQWlCN0QsaUJBQWlCeEwsTUFBakIsRUFBeUJvQixPQUFPeEIsS0FBUCxDQUFheUQsSUFBdEMsQ0FBdkI7QUFDQTRMLGdCQUFZckUsZUFBZXlFLGNBQWYsRUFBK0JyUCxNQUEvQixDQUFaO0FBQ0QsR0FIRCxNQUdPLElBQUlvQixNQUFKLEVBQVk7QUFDakI2TixnQkFDRSw4QkFBQyxNQUFELENBQVEsTUFBUixlQUNPN04sT0FBT3hCLEtBRGQ7QUFFRSxtQkFBYzJMLFlBQVl2TCxPQUFPa0gsU0FBbkIsQ0FGaEI7QUFHRSxnQkFBV29FLFFBSGI7QUFJRSxjQUFTdEw7QUFKWCxPQURGO0FBUUQ7QUFDRCxTQUFPLGdCQUFNaUcsYUFBTixDQUFvQixJQUFwQixFQUEwQnFCLFNBQTFCLEVBQXFDMkgsU0FBckMsQ0FBUDtBQUNELENBN0JEOztBQStCQW9ELFlBQVk1UCxTQUFaLEdBQXdCO0FBQ3RCdkMsU0FBTyxvQkFBVW9RLE1BQVYsQ0FBaUIzTixVQURGO0FBRXRCM0MsVUFBUSxvQkFBVXFHLE1BQVYsQ0FBaUIxRCxVQUZIO0FBR3RCNEksZUFBYSxvQkFBVWxGLE1BQVYsQ0FBaUIxRCxVQUhSO0FBSXRCMkksWUFBVSxvQkFBVS9OLElBSkU7QUFLdEJpTyxvQkFBa0Isb0JBQVVqTztBQUxOLENBQXhCOztBQVFBOFUsWUFBWTVFLFlBQVosR0FBMkI7QUFDekJuQyxZQUFVLG9CQUFNLENBQUcsQ0FETTtBQUV6QkUsb0JBQWtCLDRCQUFNLENBQUc7QUFGRixDQUEzQjs7a0JBS2U2RyxXOzs7Ozs7Ozs7Ozs7O0FDL0NmOzs7O0FBQ0E7Ozs7OztBQUZBO0FBSUEsSUFBTUMsVUFBVSxTQUFWQSxPQUFVLENBQUMxUyxLQUFELEVBQVc7QUFDekIsTUFBSSxDQUFDQSxNQUFNMkMsUUFBWCxFQUFxQixPQUFPLElBQVA7O0FBRXJCLE1BQU15SCxVQUFVcEssTUFBTVQsVUFBTixHQUNkO0FBQUE7QUFBQSxNQUFTLE9BQVEsRUFBRW9ULGFBQWEsS0FBZixFQUFqQjtBQUEyQzNTLFVBQU0yQztBQUFqRCxHQURjLEdBR2Q7QUFBQTtBQUFBO0FBQVUzQyxVQUFNMkM7QUFBaEIsR0FIRjs7QUFNQSxTQUFPeUgsT0FBUDtBQUNELENBVkQ7O0FBWUFzSSxRQUFRN1AsU0FBUixHQUFvQjtBQUNsQkYsWUFBVSxvQkFBVXlKLFNBQVYsQ0FBb0IsQ0FDNUIsb0JBQVV0SixJQURrQixFQUU1QixvQkFBVUcsTUFGa0IsQ0FBcEIsQ0FEUTtBQUtsQjFELGNBQVksb0JBQVUyTTtBQUxKLENBQXBCOztrQkFRZXdHLE87Ozs7Ozs7Ozs7Ozs7Ozs7O0FDckJmOzs7O0FBQ0E7Ozs7QUFFQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7Ozs7Ozs7OzsrZUFaQTtBQUNBOztJQWFNRSxJOzs7QUFDSixnQkFBWTVTLEtBQVosRUFBbUI7QUFBQTs7QUFBQSw0R0FDWEEsS0FEVzs7QUFBQSxRQUdmUCxRQUhlLEdBT2JPLEtBUGEsQ0FHZlAsUUFIZTtBQUFBLFFBSWZnTCxRQUplLEdBT2J6SyxLQVBhLENBSWZ5SyxRQUplO0FBQUEsUUFLZnZKLFNBTGUsR0FPYmxCLEtBUGEsQ0FLZmtCLFNBTGU7QUFBQSxRQU1mNEMsU0FOZSxHQU9iOUQsS0FQYSxDQU1mOEQsU0FOZTs7QUFTakI7O0FBQ0EsUUFBSTJHLFNBQVNuTCxhQUFiLEVBQTRCO0FBQzFCLFlBQUt1VCxXQUFMLEdBQW1CcEksU0FBU3FJLGlCQUFULGtCQUE4QnJJLFNBQVNzSSxPQUFULENBQWlCQyxXQUEvQyxDQUFuQjtBQUNEOztBQUVEO0FBQ0EsUUFBSUMsa0NBQUo7QUFDQSxRQUFNQyxtQkFBbUJoUyxVQUFVQyxJQUFWLEtBQW1CLGdCQUFNM0MsbUJBQWxEO0FBQ0EsUUFBTTJVLG1CQUFtQixDQUFDLENBQUNyUCxVQUFVaUosUUFBckM7O0FBRUEsUUFBSW9HLGdCQUFKLEVBQXNCO0FBQ3BCRixxQkFBZSxrREFBZjtBQUNEOztBQUVELFFBQUlDLGdCQUFKLEVBQXNCO0FBQ3BCRCxxQkFBZSwyQkFBaUJFLG1CQUFtQkYsWUFBbkIseUJBQWpCLENBQWY7QUFDRDs7QUFFRCxRQUFJeEksU0FBU25MLGFBQWIsRUFBNEI7QUFDMUIyVCxxQkFBZXhJLFNBQVMySSxvQkFBVCxDQUE4QkgsWUFBOUIsRUFBNENDLGdCQUE1QyxFQUE4RHpULFFBQTlELGtCQUFmO0FBQ0Q7QUFDRCxVQUFLd1QsWUFBTCxHQUFvQkEsWUFBcEI7QUE5QmlCO0FBK0JsQjs7Ozs2QkFFUTtBQUFBOztBQUFBLG1CQWdCSCxLQUFLalQsS0FoQkY7QUFBQSxVQUVMNEcsT0FGSyxVQUVMQSxPQUZLO0FBQUEsVUFHTC9HLElBSEssVUFHTEEsSUFISztBQUFBLFVBSUxpSyxZQUpLLFVBSUxBLFlBSks7QUFBQSxVQUtMckssUUFMSyxVQUtMQSxRQUxLO0FBQUEsVUFNTHNNLE9BTkssVUFNTEEsT0FOSztBQUFBLFVBT0w1QixnQkFQSyxVQU9MQSxnQkFQSztBQUFBLFVBUUw2QixpQkFSSyxVQVFMQSxpQkFSSztBQUFBLFVBU0x2QixRQVRLLFVBU0xBLFFBVEs7QUFBQSxVQVVMdkosU0FWSyxVQVVMQSxTQVZLO0FBQUEsVUFXTG1KLFFBWEssVUFXTEEsUUFYSztBQUFBLFVBWUxDLFVBWkssVUFZTEEsVUFaSztBQUFBLFVBYUxFLFNBYkssVUFhTEEsU0FiSztBQUFBLFVBY0wxRyxTQWRLLFVBY0xBLFNBZEs7QUFBQSxVQWVMcUUsU0FmSyxVQWVMQSxTQWZLOzs7QUFrQlAsVUFBSVosZ0JBQUo7O0FBRUEsVUFBSXdFLE9BQUosRUFBYTtBQUNYLFlBQU1zSCxhQUFhLGdCQUFFMUwsVUFBRixDQUFhd0MsZ0JBQWIsSUFBaUNBLGtCQUFqQyxHQUFzREEsZ0JBQXpFO0FBQ0EsWUFBSSxDQUFDa0osVUFBTCxFQUFpQjtBQUNmLGlCQUFPLElBQVA7QUFDRDtBQUNEOUwsa0JBQVUsc0RBQVksU0FBVThMLFVBQXRCLEVBQW1DLFNBQVVySCxpQkFBN0MsR0FBVjtBQUNELE9BTkQsTUFNTztBQUNMLFlBQU1rSCxtQkFBbUJoUyxVQUFVQyxJQUFWLEtBQW1CLGdCQUFNM0MsbUJBQWxEO0FBQ0EsWUFBTTJVLG1CQUFtQixDQUFDLENBQUNyUCxVQUFVaUosUUFBckM7O0FBRUEsWUFBTXVHLHFCQUFxQixFQUEzQjs7QUFFQSxZQUFJN0ksU0FBU25MLGFBQWIsRUFBNEI7QUFDMUJnVSw2QkFBbUJuTSxvQkFBbkIsR0FBMEMsS0FBSzBMLFdBQS9DO0FBQ0Q7O0FBRUQsWUFBSUssb0JBQW9CQyxnQkFBeEIsRUFBMEM7QUFDeENHLDZCQUFtQnhQLFNBQW5CLEdBQStCQSxTQUEvQjtBQUNBd1AsNkJBQW1CcFMsU0FBbkIsR0FBK0JBLFNBQS9CO0FBQ0Q7O0FBRURxRyxrQkFBVTFILEtBQUt5RixHQUFMLENBQVMsVUFBQzNGLEdBQUQsRUFBTVcsS0FBTixFQUFnQjtBQUNqQyxjQUFNZ0csTUFBTSxnQkFBRTVLLEdBQUYsQ0FBTWlFLEdBQU4sRUFBV0YsUUFBWCxDQUFaO0FBQ0EsY0FBTThUO0FBQ0pqTixvQkFESTtBQUVKM0csb0JBRkk7QUFHSm1LLHNDQUhJO0FBSUpsRCw0QkFKSTtBQUtKbkgsOEJBTEk7QUFNSmdMLDhCQU5JO0FBT0psUCxtQkFBTytLLEdBUEg7QUFRSnJGLHNCQUFVWCxLQVJOO0FBU0owTCxnREFUSTtBQVVKekwsbUJBQU9pSyxhQUFhO0FBVmhCLGFBV0Q4SSxrQkFYQyxDQUFOOztBQWNBQyx1QkFBYXhMLEtBQWIsR0FBcUIsZ0JBQUVKLFVBQUYsQ0FBYTBDLFFBQWIsSUFBeUJBLFNBQVMxSyxHQUFULEVBQWNXLEtBQWQsQ0FBekIsR0FBZ0QrSixRQUFyRTtBQUNBa0osdUJBQWFwTCxTQUFiLEdBQTBCLGdCQUFFUixVQUFGLENBQWEyQyxVQUFiLElBQTJCQSxXQUFXM0ssR0FBWCxFQUFnQlcsS0FBaEIsQ0FBM0IsR0FBb0RnSyxVQUE5RTs7QUFFQSxpQkFBTyxxQ0FBTSxZQUFOLEVBQXdCaUosWUFBeEIsQ0FBUDtBQUNELFNBcEJTLENBQVY7QUFxQkQ7O0FBRUQsYUFDRTtBQUFBO0FBQUEsVUFBTyxXQUFZcEwsU0FBbkI7QUFBaUNaO0FBQWpDLE9BREY7QUFHRDs7OztFQXJHZ0IsZ0JBQU0zRSxTOztBQXdHekJnUSxLQUFLL1AsU0FBTCxHQUFpQjtBQUNmcEQsWUFBVSxvQkFBVXdELE1BQVYsQ0FBaUJGLFVBRFo7QUFFZmxELFFBQU0sb0JBQVVtRCxLQUFWLENBQWdCRCxVQUZQO0FBR2Y2RCxXQUFTLG9CQUFVNUQsS0FBVixDQUFnQkQsVUFIVjtBQUlmN0IsYUFBVyxvQkFBVXVGO0FBSk4sQ0FBakI7O2tCQU9lbU0sSTs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMzSGY7Ozs7QUFDQTs7OztBQUVBOzs7O0FBQ0E7Ozs7QUFDQTs7Ozs7Ozs7Ozs7OytlQVBBO0FBQ0E7OztJQVFNWSxTOzs7QUFDSixxQkFBWXhULEtBQVosRUFBbUI7QUFBQTs7QUFBQSxzSEFDWEEsS0FEVzs7QUFFakIsVUFBS3lULHNCQUFMLEdBQThCLEtBQTlCO0FBRmlCO0FBR2xCOzs7OzBDQUVxQnBSLFMsRUFBVztBQUMvQixXQUFLb1Isc0JBQUwsR0FBOEIsS0FBOUI7QUFDQSxXQUFLQSxzQkFBTCxHQUE4QixLQUFLQyxzQkFBTCxDQUE0QnJSLFNBQTVCLENBQTlCO0FBQ0EsVUFBSSxLQUFLb1Isc0JBQVQsRUFBaUMsT0FBTyxJQUFQOztBQUVqQyxhQUFPLEtBQUtFLHdCQUFMLENBQThCdFIsU0FBOUIsQ0FBUDtBQUNEOzs7NkJBRVE7QUFBQSxtQkFRSCxLQUFLckMsS0FSRjtBQUFBLFVBRUxtSSxTQUZLLFVBRUxBLFNBRks7QUFBQSxVQUdMSixLQUhLLFVBR0xBLEtBSEs7QUFBQSxVQUlMeEgsS0FKSyxVQUlMQSxLQUpLO0FBQUEsVUFLTHlMLGlCQUxLLFVBS0xBLGlCQUxLO0FBQUEsVUFNTGxDLFlBTkssVUFNTEEsWUFOSztBQUFBLFVBT0ZoRSxJQVBFOztBQVNQLFVBQU04TixVQUFVLEtBQUsxRSxRQUFMLENBQWMzTyxLQUFkLENBQWhCO0FBQ0EsVUFBTTZHLGdCQUFpQixLQUFLcEgsS0FBTCxDQUFXaUIsUUFBWCxHQUFzQitLLGlCQUF2QixHQUE0QyxDQUFsRTs7QUFFQSxhQUNFO0FBQUE7QUFBQSxtQkFBSSxPQUFRakUsS0FBWixFQUFvQixXQUFZSSxTQUFoQyxJQUFpRHlMLE9BQWpEO0FBQ0U7QUFDRSx3QkFBZSxLQUFLSCxzQkFEdEI7QUFFRSx5QkFBZ0IzSixlQUFlMUMsYUFBZixHQUErQixDQUFDO0FBRmxELFdBR090QixJQUhQO0FBREYsT0FERjtBQVNEOzs7O0VBbkNxQiw2QkFBYywrQ0FBZCxDOztBQXNDeEIwTixVQUFVM1EsU0FBVixHQUFzQjtBQUNwQmxELE9BQUssb0JBQVU4RyxNQUFWLENBQWlCMUQsVUFERjtBQUVwQjlCLFlBQVUsb0JBQVV5UCxNQUFWLENBQWlCM04sVUFGUDtBQUdwQjZELFdBQVMsb0JBQVU1RCxLQUFWLENBQWdCRCxVQUhMO0FBSXBCZ0YsU0FBTyxvQkFBVXRCLE1BSkc7QUFLcEIwQixhQUFXLG9CQUFVbEYsTUFMRDtBQU1wQjFDLFNBQU8sb0JBQVVrRztBQU5HLENBQXRCOztBQVNBK00sVUFBVTNGLFlBQVYsR0FBeUI7QUFDdkJoSCxZQUFVLElBRGE7QUFFdkJrQixTQUFPLEVBRmdCO0FBR3ZCSSxhQUFXLElBSFk7QUFJdkI1SCxTQUFPO0FBSmdCLENBQXpCOztrQkFPZWlULFM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDOURmOzs7O0FBQ0E7Ozs7QUFFQTs7OztBQUNBOzs7Ozs7Ozs7Ozs7K2VBTEE7OztJQU9NSyxJOzs7QUFDSixnQkFBWTdULEtBQVosRUFBbUI7QUFBQTs7QUFBQSw0R0FDWEEsS0FEVzs7QUFBQSxVQXNDbkI4VCx1QkF0Q21CLEdBc0NPO0FBQUEsYUFBYyxVQUFDMVgsQ0FBRCxFQUFPO0FBQUEsMEJBQzBCLE1BQUs0RCxLQUQvQjtBQUFBLFlBQ3JDZ0gsT0FEcUMsZUFDckNBLE9BRHFDO0FBQUEsWUFDNUIvRixRQUQ0QixlQUM1QkEsUUFENEI7QUFBQSxZQUNsQlosV0FEa0IsZUFDbEJBLFdBRGtCO0FBQUEsWUFDTDRHLFdBREssZUFDTEEsV0FESztBQUFBLFlBQ1FDLGFBRFIsZUFDUUEsYUFEUjs7QUFFN0MsWUFBSSxDQUFDRCxlQUFlQyxhQUFoQixLQUFrQyxnQkFBRVMsVUFBRixDQUFhb00sVUFBYixDQUF0QyxFQUFnRTtBQUM5REEscUJBQVczWCxDQUFYO0FBQ0Q7QUFDRCxZQUFJNEssT0FBSixFQUFhO0FBQ1hBLGtCQUFRL0YsUUFBUixFQUFrQlosV0FBbEI7QUFDRDtBQUNGLE9BUnlCO0FBQUEsS0F0Q1A7O0FBRWpCLFVBQUt5VCx1QkFBTCxHQUErQixNQUFLQSx1QkFBTCxDQUE2QjVULElBQTdCLE9BQS9CO0FBRmlCO0FBR2xCOzs7OzBDQUVxQm1DLFMsRUFBVztBQUMvQixVQUFJc0UsZUFBZSxLQUFuQjtBQUNBLFVBQUl0RSxVQUFVakMsTUFBVixDQUFpQndQLFlBQXJCLEVBQW1DO0FBQ2pDakosdUJBQWUsQ0FBQyxnQkFBRW1DLE9BQUYsQ0FBVSxLQUFLOUksS0FBTCxDQUFXTCxHQUFyQixFQUEwQjBDLFVBQVUxQyxHQUFwQyxDQUFoQjtBQUNELE9BRkQsTUFFTztBQUNMZ0gsdUJBQ0UsZ0JBQUVqTCxHQUFGLENBQU0sS0FBS3NFLEtBQUwsQ0FBV0wsR0FBakIsRUFBc0IsS0FBS0ssS0FBTCxDQUFXSSxNQUFYLENBQWtCa0gsU0FBeEMsTUFDTSxnQkFBRTVMLEdBQUYsQ0FBTTJHLFVBQVUxQyxHQUFoQixFQUFxQjBDLFVBQVVqQyxNQUFWLENBQWlCa0gsU0FBdEMsQ0FGUjtBQUdEOztBQUVELFVBQUlYLFlBQUosRUFBa0IsT0FBTyxJQUFQOztBQUVsQjs7QUFFQUEscUJBQ0UsQ0FBQ3RFLFVBQVVqQyxNQUFWLENBQWlCMFAsU0FBakIsR0FBNkIsQ0FBQyxnQkFBRWhILE9BQUYsQ0FBVSxLQUFLOUksS0FBTCxDQUFXTCxHQUFyQixFQUEwQjBDLFVBQVUxQyxHQUFwQyxDQUE5QixHQUF5RSxLQUExRSxLQUNBLEtBQUtLLEtBQUwsQ0FBV0ksTUFBWCxDQUFrQnlQLE1BQWxCLEtBQTZCeE4sVUFBVWpDLE1BQVYsQ0FBaUJ5UCxNQUQ5QyxJQUVBLEtBQUs3UCxLQUFMLENBQVdJLE1BQVgsQ0FBa0J3UCxZQUFsQixLQUFtQ3ZOLFVBQVVqQyxNQUFWLENBQWlCd1AsWUFGcEQsSUFHQSxLQUFLNVAsS0FBTCxDQUFXaUIsUUFBWCxLQUF3Qm9CLFVBQVVwQixRQUhsQyxJQUlBLEtBQUtqQixLQUFMLENBQVdLLFdBQVgsS0FBMkJnQyxVQUFVaEMsV0FKckMsSUFLQSxLQUFLTCxLQUFMLENBQVdtSSxTQUFYLEtBQXlCOUYsVUFBVThGLFNBTG5DLElBTUEsS0FBS25JLEtBQUwsQ0FBV2dJLEtBQVgsS0FBcUIzRixVQUFVMkYsS0FOL0IsSUFPQSxLQUFLaEksS0FBTCxDQUFXNkcsUUFBWCxLQUF3QnhFLFVBQVV3RSxRQVBsQyxJQVFBLEtBQUs3RyxLQUFMLENBQVdpSCxXQUFYLEtBQTJCNUUsVUFBVTRFLFdBUnJDLElBU0EsS0FBS2pILEtBQUwsQ0FBV2tILGFBQVgsS0FBNkI3RSxVQUFVNkUsYUFUdkMsSUFVQSxDQUFDLGdCQUFFNEIsT0FBRixDQUFVLEtBQUs5SSxLQUFMLENBQVcrSCxLQUFyQixFQUE0QjFGLFVBQVUwRixLQUF0QyxDQVZELElBV0EsQ0FBQyxnQkFBRWUsT0FBRixDQUFVLEtBQUs5SSxLQUFMLENBQVdJLE1BQVgsQ0FBa0IyUCxlQUE1QixFQUE2QzFOLFVBQVVqQyxNQUFWLENBQWlCMlAsZUFBOUQsQ0FYRCxJQVlBLENBQUMsZ0JBQUVqSCxPQUFGLENBQVUsS0FBSzlJLEtBQUwsQ0FBV0ksTUFBWCxDQUFrQkwsTUFBNUIsRUFBb0NzQyxVQUFVakMsTUFBVixDQUFpQkwsTUFBckQsQ0FaRCxJQWFBLENBQUMsZ0JBQUUrSSxPQUFGLENBQVUsS0FBSzlJLEtBQUwsQ0FBV0ksTUFBWCxDQUFrQkcsS0FBNUIsRUFBbUM4QixVQUFVakMsTUFBVixDQUFpQkcsS0FBcEQsQ0FiRCxJQWNBLEtBQUtQLEtBQUwsQ0FBV3FILFFBQVgsS0FBd0JoRixVQUFVZ0YsUUFmcEM7QUFnQkEsYUFBT1YsWUFBUDtBQUNEOzs7NkJBWVE7QUFBQSxtQkFXSCxLQUFLM0csS0FYRjtBQUFBLFVBRUxMLEdBRkssVUFFTEEsR0FGSztBQUFBLFVBR0xzQixRQUhLLFVBR0xBLFFBSEs7QUFBQSxVQUlMYixNQUpLLFVBSUxBLE1BSks7QUFBQSxVQUtMQyxXQUxLLFVBS0xBLFdBTEs7QUFBQSxVQU1MMkcsT0FOSyxVQU1MQSxPQU5LO0FBQUEsVUFPTEgsUUFQSyxVQU9MQSxRQVBLO0FBQUEsVUFRTEksV0FSSyxVQVFMQSxXQVJLO0FBQUEsVUFTTEMsYUFUSyxVQVNMQSxhQVRLO0FBQUEsVUFVRnBCLElBVkU7O0FBQUEsVUFhTHdCLFNBYkssR0FnQkhsSCxNQWhCRyxDQWFMa0gsU0FiSztBQUFBLFVBY0x3SSxTQWRLLEdBZ0JIMVAsTUFoQkcsQ0FjTDBQLFNBZEs7QUFBQSxVQWVMQyxlQWZLLEdBZ0JIM1AsTUFoQkcsQ0FlTDJQLGVBZks7O0FBaUJQLFVBQU14UCxRQUFRLEtBQUsyTyxRQUFMLGNBQW1CcEosSUFBbkIsRUFBZDtBQUNBLFVBQUl5QixVQUFVbkgsT0FBT3dQLFlBQVAsR0FBc0IsSUFBdEIsR0FBNkIsZ0JBQUVsVSxHQUFGLENBQU1pRSxHQUFOLEVBQVcySCxTQUFYLENBQTNDOztBQUVBLFVBQUl3SSxTQUFKLEVBQWU7QUFDYnZJLGtCQUFVbkgsT0FBTzBQLFNBQVAsQ0FBaUJ2SSxPQUFqQixFQUEwQjVILEdBQTFCLEVBQStCc0IsUUFBL0IsRUFBeUM4TyxlQUF6QyxDQUFWO0FBQ0Q7O0FBRUQsVUFBSTlJLGVBQWVKLFFBQW5CLEVBQTZCO0FBQzNCdEcsY0FBTWdQLE9BQU4sR0FBZ0IsS0FBS3VFLHVCQUFMLENBQTZCdlQsTUFBTWdQLE9BQW5DLENBQWhCO0FBQ0QsT0FGRCxNQUVPLElBQUlySSxpQkFBaUJMLFFBQXJCLEVBQStCO0FBQ3BDdEcsY0FBTXlULGFBQU4sR0FBc0IsS0FBS0YsdUJBQUwsQ0FBNkJ2VCxNQUFNeVQsYUFBbkMsQ0FBdEI7QUFDRDs7QUFFRCxhQUNFO0FBQUE7QUFBU3pULGFBQVQ7QUFDSSxlQUFPZ0gsT0FBUCxLQUFtQixTQUFuQixRQUFrQ0EsT0FBbEMsR0FBOENBO0FBRGxELE9BREY7QUFLRDs7OztFQXBGZ0IsbUQ7O0FBdUZuQnNNLEtBQUtoUixTQUFMLEdBQWlCO0FBQ2ZsRCxPQUFLLG9CQUFVOEcsTUFBVixDQUFpQjFELFVBRFA7QUFFZjlCLFlBQVUsb0JBQVV5UCxNQUFWLENBQWlCM04sVUFGWjtBQUdmM0MsVUFBUSxvQkFBVXFHLE1BQVYsQ0FBaUIxRCxVQUhWO0FBSWYxQyxlQUFhLG9CQUFVcVEsTUFBVixDQUFpQjNOO0FBSmYsQ0FBakI7O2tCQU9lOFEsSTs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNsR2Y7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7Ozs7Ozs7Ozs7K2VBWEE7QUFDQTtBQUNBOzs7SUFXcUJJLGE7OztBQVduQix5QkFBWWpVLEtBQVosRUFBbUI7QUFBQTs7QUFBQSw4SEFDWEEsS0FEVzs7QUFFakIsVUFBS3FJLFFBQUwsR0FBZ0IsQ0FBaEI7QUFDQSxVQUFLb0wsc0JBQUwsR0FBOEIsS0FBOUI7QUFDQSxVQUFLbkwsdUJBQUwsR0FBK0IsTUFBS0EsdUJBQUwsQ0FBNkJwSSxJQUE3QixPQUEvQjtBQUppQjtBQUtsQjs7OzswQ0FFcUJtQyxTLEVBQVc7QUFDL0IsVUFDRSxLQUFLckMsS0FBTCxDQUFXc0IsUUFBWCxLQUF3QmUsVUFBVWYsUUFBbEMsSUFDQSxLQUFLdEIsS0FBTCxDQUFXNkQsUUFBWCxLQUF3QnhCLFVBQVV3QixRQURsQyxJQUVBLEtBQUs3RCxLQUFMLENBQVd3SSxVQUFYLEtBQTBCbkcsVUFBVW1HLFVBRnBDLElBR0EsS0FBS3hJLEtBQUwsQ0FBV3VJLFVBQVgsS0FBMEJsRyxVQUFVa0csVUFIcEMsSUFJQSxLQUFLdkksS0FBTCxDQUFXa0IsU0FBWCxDQUFxQmdGLGdCQUFyQixLQUEwQzdELFVBQVVuQixTQUFWLENBQW9CZ0YsZ0JBSjlELElBS0EsS0FBS3lOLHdCQUFMLENBQThCdFIsU0FBOUIsQ0FORixFQU9FO0FBQ0EsYUFBS29SLHNCQUFMLEdBQThCLEtBQUtDLHNCQUFMLENBQTRCclIsU0FBNUIsQ0FBOUI7QUFDQSxlQUFPLElBQVA7QUFDRDtBQUNELFdBQUtvUixzQkFBTCxHQUE4QixLQUFLQyxzQkFBTCxDQUE0QnJSLFNBQTVCLENBQTlCOztBQUVBLGFBQU8sS0FBS29SLHNCQUFaO0FBQ0Q7OzttREFJQztBQUFBLFVBREF6TixRQUNBLHVFQURXLGdCQUFNcEgsdUJBQ2pCOztBQUNBLGFBQU9vSCxhQUFhLGdCQUFNcEgsdUJBQTFCO0FBQ0Q7Ozs2QkFFUTtBQUFBLG1CQWtCSCxLQUFLb0IsS0FsQkY7QUFBQSxVQUVMTCxHQUZLLFVBRUxBLEdBRks7QUFBQSxVQUdMaUgsT0FISyxVQUdMQSxPQUhLO0FBQUEsVUFJTG5ILFFBSkssVUFJTEEsUUFKSztBQUFBLFVBS0x3QixRQUxLLFVBS0xBLFFBTEs7QUFBQSxVQU1MOEcsS0FOSyxVQU1MQSxLQU5LO0FBQUEsVUFPTEksU0FQSyxVQU9MQSxTQVBLO0FBQUEsVUFRTDVILEtBUkssVUFRTEEsS0FSSztBQUFBLFVBU0xXLFNBVEssVUFTTEEsU0FUSztBQUFBLFVBVUw0QyxTQVZLLFVBVUxBLFNBVks7QUFBQSxVQVdMRCxRQVhLLFVBV0xBLFFBWEs7QUFBQSxVQVlMMkUsVUFaSyxVQVlMQSxVQVpLO0FBQUEsVUFhTGxILFFBYkssVUFhTEEsUUFiSztBQUFBLFVBY0xpSCxVQWRLLFVBY0xBLFVBZEs7QUFBQSxVQWVMeUQsaUJBZkssVUFlTEEsaUJBZks7QUFBQSxVQWdCTGxDLFlBaEJLLFVBZ0JMQSxZQWhCSztBQUFBLFVBaUJGaEUsSUFqQkU7O0FBbUJQLFVBQU1RLE1BQU0sZ0JBQUU1SyxHQUFGLENBQU1pRSxHQUFOLEVBQVdGLFFBQVgsQ0FBWjtBQW5CTyxVQW9CQ3lHLGdCQXBCRCxHQW9CMkRoRixTQXBCM0QsQ0FvQkNnRixnQkFwQkQ7QUFBQSxVQW9CbUJDLG9CQXBCbkIsR0FvQjJEakYsU0FwQjNELENBb0JtQmlGLG9CQXBCbkI7QUFBQSxVQW9CeUMwQyxhQXBCekMsR0FvQjJEM0gsU0FwQjNELENBb0J5QzJILGFBcEJ6QztBQUFBLFVBcUJDdEMsZ0JBckJELEdBcUI0Q3pDLFNBckI1QyxDQXFCQ3lDLGdCQXJCRDtBQUFBLFVBcUJtQkMsb0JBckJuQixHQXFCNEMxQyxTQXJCNUMsQ0FxQm1CMEMsb0JBckJuQjs7O0FBdUJQLFVBQU1oRyxXQUFXLEtBQUswTyxRQUFMLGNBQW1CM08sS0FBbkIsRUFBakI7QUFDQSxVQUFJc0ksaUJBQWlCLENBQUMsQ0FBQy9FLFVBQVVpSixRQUFqQyxFQUEyQztBQUN6Q3ZNLGlCQUFTK08sT0FBVCxHQUFtQixLQUFLakgsdUJBQUwsQ0FBNkI5SCxTQUFTK08sT0FBdEMsQ0FBbkI7QUFDRDs7QUFFRCxVQUFJbkksZ0JBQWlCbkcsV0FBVytLLGlCQUFaLEdBQWlDLENBQXJEOztBQUVBLFVBQU0vRixZQUFZLENBQ2hCO0FBQ0UsYUFBSSxLQUROO0FBRUUsYUFBTXRHLEdBRlI7QUFHRSxpQkFBVWlILE9BSFo7QUFJRSxrQkFBV25ILFFBSmI7QUFLRSxrQkFBV3dCLFFBTGI7QUFNRSxzQkFBZSxLQUFLd1Msc0JBTnRCO0FBT0UsdUJBQWdCM0osZUFBZTFDLGFBQWYsR0FBK0IsQ0FBQztBQVBsRCxTQVFPdEIsSUFSUCxFQURnQixDQUFsQjs7QUFhQSxVQUFJLENBQUNJLGdCQUFMLEVBQXVCO0FBQ3JCLFlBQU1nTyxhQUNKLG9FQUNPaFQsU0FEUDtBQUVFLGVBQUksZ0JBRk47QUFHRSxrQkFBU29GLEdBSFg7QUFJRSxvQkFBV3JGLFFBSmI7QUFLRSxvQkFBV0ssUUFMYjtBQU1FLG9CQUFXLENBQUNpSCxVQU5kO0FBT0Usb0JBQVd1QixlQUFlMUMsZUFBZixHQUFpQyxDQUFDO0FBUC9DLFdBREY7QUFXQSxZQUFJLEtBQUtyQiw0QkFBTCxDQUFrQ0ksb0JBQWxDLENBQUosRUFBNkQ7QUFDM0RGLG9CQUFVRyxPQUFWLENBQWtCOE4sVUFBbEI7QUFDRCxTQUZELE1BRU87QUFDTGpPLG9CQUFVMUUsSUFBVixDQUFlMlMsVUFBZjtBQUNEO0FBQ0Y7O0FBRUQsVUFBSTNOLGdCQUFKLEVBQXNCO0FBQ3BCLFlBQU00TixhQUNKLGlFQUNPclEsU0FEUDtBQUVFLGVBQUksYUFGTjtBQUdFLGtCQUFTd0MsR0FIWDtBQUlFLG9CQUFXckYsUUFKYjtBQUtFLG9CQUFXNEMsUUFMYjtBQU1FLHNCQUFhMkUsVUFOZjtBQU9FLG9CQUFXc0IsZUFBZTFDLGVBQWYsR0FBaUMsQ0FBQztBQVAvQyxXQURGO0FBV0EsWUFBSSxLQUFLckIsNEJBQUwsQ0FBa0NTLG9CQUFsQyxDQUFKLEVBQTZEO0FBQzNEUCxvQkFBVUcsT0FBVixDQUFrQitOLFVBQWxCO0FBQ0QsU0FGRCxNQUVPO0FBQ0xsTyxvQkFBVTFFLElBQVYsQ0FBZTRTLFVBQWY7QUFDRDtBQUNGOztBQUVELGFBQ0U7QUFBQTtBQUFBO0FBQ0UsaUJBQVFwTSxLQURWO0FBRUUscUJBQVlJO0FBRmQsV0FHTzNILFFBSFA7QUFLSXlGO0FBTEosT0FERjtBQVNEOzs7O0VBbkl3Qyw2QkFBYyw4QkFBZSxnQkFBTXJELFNBQXJCLENBQWQsQzs7QUFBdEJxUixhLENBQ1pwUixTLEdBQVk7QUFDakJ0QyxTQUFPLG9CQUFVa0csTUFEQTtBQUVqQnNCLFNBQU8sb0JBQVV0QjtBQUZBLEM7QUFEQXdOLGEsQ0FNWnBHLFksR0FBZTtBQUNwQnROLFNBQU8sRUFEYTtBQUVwQndILFNBQU87QUFGYSxDO2tCQU5Ia00sYTs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNSckI7Ozs7QUFDQTs7Ozs7Ozs7OzsrZUFOQTs7OztBQUlBOzs7SUFJcUJHLFU7OztBQVduQix3QkFBYztBQUFBOztBQUFBOztBQUVaLFVBQUtDLFdBQUwsR0FBbUIsTUFBS0EsV0FBTCxDQUFpQm5VLElBQWpCLE9BQW5CO0FBRlk7QUFHYjs7OzswQ0FFcUJtQyxTLEVBQVc7QUFDL0IsVUFBTXNFLGVBQ0osS0FBSzNHLEtBQUwsQ0FBV2lCLFFBQVgsS0FBd0JvQixVQUFVcEIsUUFBbEMsSUFDQSxLQUFLakIsS0FBTCxDQUFXNkQsUUFBWCxLQUF3QnhCLFVBQVV3QixRQURsQyxJQUVBLEtBQUs3RCxLQUFMLENBQVdlLE1BQVgsS0FBc0JzQixVQUFVdEIsTUFGaEMsSUFHQSxLQUFLZixLQUFMLENBQVdxSCxRQUFYLEtBQXdCaEYsVUFBVWdGLFFBSnBDOztBQU1BLGFBQU9WLFlBQVA7QUFDRDs7O2dDQUVXdkssQyxFQUFHO0FBQUEsbUJBQ3VDLEtBQUs0RCxLQUQ1QztBQUFBLFVBQ0xlLE1BREssVUFDTEEsTUFESztBQUFBLFVBQ0c4QyxRQURILFVBQ0dBLFFBREg7QUFBQSxVQUNhcUIsV0FEYixVQUNhQSxXQURiO0FBQUEsVUFDMEJqRSxRQUQxQixVQUMwQkEsUUFEMUI7O0FBRWI3RSxRQUFFa1ksZUFBRjtBQUNBcFAsa0JBQVluRSxNQUFaLEVBQW9CLENBQUM4QyxRQUFyQixFQUErQjVDLFFBQS9CLEVBQXlDN0UsQ0FBekM7QUFDRDs7OzZCQUVRO0FBQUEsb0JBQ2tFLEtBQUs0RCxLQUR2RTtBQUFBLFVBQ0M2RCxRQURELFdBQ0NBLFFBREQ7QUFBQSxVQUNXMkUsVUFEWCxXQUNXQSxVQURYO0FBQUEsVUFDdUJ3RSxvQkFEdkIsV0FDdUJBLG9CQUR2QjtBQUFBLFVBQzZDM0YsUUFEN0MsV0FDNkNBLFFBRDdDO0FBQUEsVUFDdUR0RyxNQUR2RCxXQUN1REEsTUFEdkQ7O0FBRVAsVUFBTVIsUUFBUSxFQUFkO0FBQ0EsVUFBSThHLGFBQWEsQ0FBQyxDQUFsQixFQUFxQjlHLE1BQU04RyxRQUFOLEdBQWlCQSxRQUFqQjs7QUFFckIsYUFDRTtBQUFBO0FBQUEsbUJBQUksV0FBVSxhQUFkLEVBQTRCLFNBQVUsS0FBS2dOLFdBQTNDLElBQThEOVQsS0FBOUQ7QUFFSXlNLCtCQUF1QkEscUJBQXFCO0FBQzFDeEUsZ0NBRDBDO0FBRTFDM0UsNEJBRjBDO0FBRzFDOUM7QUFIMEMsU0FBckIsQ0FBdkIsR0FJTXlILGFBQWMzRSxXQUFXLEtBQVgsR0FBbUIsS0FBakMsR0FBMEM7QUFOcEQsT0FERjtBQVdEOzs7Ozs7QUFoRGtCdVEsVSxDQUNadlIsUyxHQUFZO0FBQ2pCOUIsVUFBUSxvQkFBVWlQLEdBREQ7QUFFakJuTSxZQUFVLG9CQUFVcUksSUFBVixDQUFlbkosVUFGUjtBQUdqQnlGLGNBQVksb0JBQVUwRCxJQUFWLENBQWVuSixVQUhWO0FBSWpCbUMsZUFBYSxvQkFBVXZILElBQVYsQ0FBZW9GLFVBSlg7QUFLakJpSyx3QkFBc0Isb0JBQVVyUCxJQUxmO0FBTWpCc0QsWUFBVSxvQkFBVXlQLE1BTkg7QUFPakJySixZQUFVLG9CQUFVcUo7QUFQSCxDO2tCQURBMEQsVTs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNKckI7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7Ozs7Ozs7K2VBUkE7Ozs7OztJQVVxQkcsYTs7O0FBY25CLDJCQUFjO0FBQUE7O0FBQUE7O0FBRVosVUFBS0YsV0FBTCxHQUFtQixNQUFLQSxXQUFMLENBQWlCblUsSUFBakIsT0FBbkI7QUFGWTtBQUdiOzs7OzBDQUVxQm1DLFMsRUFBVztBQUMvQixVQUFNc0UsZUFDSixLQUFLM0csS0FBTCxDQUFXaUIsUUFBWCxLQUF3Qm9CLFVBQVVwQixRQUFsQyxJQUNBLEtBQUtqQixLQUFMLENBQVdzQixRQUFYLEtBQXdCZSxVQUFVZixRQURsQyxJQUVBLEtBQUt0QixLQUFMLENBQVd3VSxRQUFYLEtBQXdCblMsVUFBVW1TLFFBRmxDLElBR0EsS0FBS3hVLEtBQUwsQ0FBV2UsTUFBWCxLQUFzQnNCLFVBQVV0QixNQUhoQyxJQUlBLEtBQUtmLEtBQUwsQ0FBV3FILFFBQVgsS0FBd0JoRixVQUFVZ0YsUUFKbEMsSUFLQSxLQUFLckgsS0FBTCxDQUFXOE0saUJBQVgsS0FBaUN6SyxVQUFVeUssaUJBTjdDOztBQVFBLGFBQU9uRyxZQUFQO0FBQ0Q7OztnQ0FFV3ZLLEMsRUFBRztBQUFBLG1CQVFULEtBQUs0RCxLQVJJO0FBQUEsVUFFTHlVLFNBRkssVUFFWHRULElBRlc7QUFBQSxVQUdYSixNQUhXLFVBR1hBLE1BSFc7QUFBQSxVQUlYTyxRQUpXLFVBSVhBLFFBSlc7QUFBQSxVQUtYbUIsV0FMVyxVQUtYQSxXQUxXO0FBQUEsVUFNWCtSLFFBTlcsVUFNWEEsUUFOVztBQUFBLFVBT1h2VCxRQVBXLFVBT1hBLFFBUFc7O0FBU2I3RSxRQUFFa1ksZUFBRjtBQUNBLFVBQUlFLFFBQUosRUFBYzs7QUFFZCxVQUFNeFQsVUFBVXlULGNBQWMsZ0JBQU1uVyxpQkFBcEIsR0FDWixJQURZLEdBRVosQ0FBQ2dELFFBRkw7O0FBSUFtQixrQkFBWTFCLE1BQVosRUFBb0JDLE9BQXBCLEVBQTZCQyxRQUE3QixFQUF1QzdFLENBQXZDO0FBQ0Q7Ozs2QkFFUTtBQUFBOztBQUFBLG9CQVVILEtBQUs0RCxLQVZGO0FBQUEsVUFFTGUsTUFGSyxXQUVMQSxNQUZLO0FBQUEsVUFHQzBULFNBSEQsV0FHTHRULElBSEs7QUFBQSxVQUlMRyxRQUpLLFdBSUxBLFFBSks7QUFBQSxVQUtMa1QsUUFMSyxXQUtMQSxRQUxLO0FBQUEsVUFNTG5OLFFBTkssV0FNTEEsUUFOSztBQUFBLFVBT0xwRyxRQVBLLFdBT0xBLFFBUEs7QUFBQSxVQVFMMEwsaUJBUkssV0FRTEEsaUJBUks7QUFBQSxVQVNMRyxpQkFUSyxXQVNMQSxpQkFUSzs7O0FBWVAsVUFBTXZNLFFBQVEsRUFBZDtBQUNBLFVBQUk4RyxhQUFhLENBQUMsQ0FBbEIsRUFBcUI5RyxNQUFNOEcsUUFBTixHQUFpQkEsUUFBakI7O0FBRXJCOUcsWUFBTXdILEtBQU4sR0FBYyxnQkFBRUosVUFBRixDQUFhbUYsaUJBQWIsSUFDWkEsa0JBQWtCO0FBQ2hCOUwsaUJBQVNNLFFBRE87QUFFaEJrVCwwQkFGZ0I7QUFHaEJ2VCwwQkFIZ0I7QUFJaEJGO0FBSmdCLE9BQWxCLENBRFksR0FPWitMLGlCQVBGOztBQVNBLGFBQ0U7QUFBQSxvQ0FBa0IsUUFBbEI7QUFBQTtBQUVJO0FBQUEsY0FBR3ZOLFVBQUgsUUFBR0EsVUFBSDtBQUFBLGlCQUNFO0FBQUE7QUFBQSx1QkFBSSxXQUFVLGdCQUFkLEVBQStCLFNBQVUsT0FBSzhVLFdBQTlDLElBQWlFOVQsS0FBakU7QUFFSW9NLGdDQUFvQkEsa0JBQWtCO0FBQ3BDeEwsb0JBQU1zVCxTQUQ4QjtBQUVwQ3pULHVCQUFTTSxRQUYyQjtBQUdwQ2tULGdDQUhvQztBQUlwQ3ZULGdDQUpvQztBQUtwQ0Y7QUFMb0MsYUFBbEIsQ0FBcEIsR0FPRTtBQUNFLG9CQUFPMFQsU0FEVDtBQUVFLHVCQUFVblQsUUFGWjtBQUdFLHdCQUFXa1QsUUFIYjtBQUlFLHlCQUFZalYsYUFBYSxtQkFBYixHQUFtQyxFQUpqRDtBQUtFLHdCQUFXLG9CQUFNLENBQUU7QUFMckI7QUFUTixXQURGO0FBQUE7QUFGSixPQURGO0FBMkJEOzs7Ozs7QUFyR2tCZ1YsYSxDQUNaMVIsUyxHQUFZO0FBQ2pCMUIsUUFBTSxvQkFBVThCLE1BQVYsQ0FBaUJGLFVBRE47QUFFakJoQyxVQUFRLG9CQUFVaVAsR0FGRDtBQUdqQjFPLFlBQVUsb0JBQVU0SyxJQUhIO0FBSWpCekosZUFBYSxvQkFBVTlFLElBSk47QUFLakI2VyxZQUFVLG9CQUFVdEksSUFMSDtBQU1qQmpMLFlBQVUsb0JBQVV5UCxNQU5IO0FBT2pCckosWUFBVSxvQkFBVXFKLE1BUEg7QUFRakI3SCxpQkFBZSxvQkFBVXFELElBUlI7QUFTakJTLHFCQUFtQixvQkFBVWhQLElBVFo7QUFVakJtUCxxQkFBbUIsb0JBQVVWLFNBQVYsQ0FBb0IsQ0FBQyxvQkFBVTNGLE1BQVgsRUFBbUIsb0JBQVU5SSxJQUE3QixDQUFwQjtBQVZGLEM7a0JBREE0VyxhOzs7Ozs7Ozs7Ozs7O0FDVnJCOzs7O0FBQ0E7Ozs7OztBQUVBLElBQU1HLGFBQWEsU0FBYkEsVUFBYTtBQUFBLE1BQUduTixPQUFILFFBQUdBLE9BQUg7QUFBQSxNQUFZb04sT0FBWixRQUFZQSxPQUFaO0FBQUEsU0FDakI7QUFBQTtBQUFBO0FBQ0U7QUFBQTtBQUFBO0FBQ0UsdUJBQVksVUFEZDtBQUVFLGlCQUFVQSxPQUZaO0FBR0UsbUJBQVU7QUFIWjtBQUtJcE47QUFMSjtBQURGLEdBRGlCO0FBQUEsQ0FBbkI7O0FBWUFtTixXQUFXN1IsU0FBWCxHQUF1QjtBQUNyQjBFLFdBQVMsb0JBQVV5SSxHQURFO0FBRXJCMkUsV0FBUyxvQkFBVWpFO0FBRkUsQ0FBdkI7O0FBS0FnRSxXQUFXN0csWUFBWCxHQUEwQjtBQUN4QnRHLFdBQVMsSUFEZTtBQUV4Qm9OLFdBQVM7QUFGZSxDQUExQjs7a0JBS2VELFU7Ozs7Ozs7Ozs7Ozs7a1FDekJmOzs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7Ozs7O2tCQUVlLFVBQUM5UixTQUFELEVBQWU7QUFDNUIsTUFBTWdTLHNCQUFzQixTQUF0QkEsbUJBQXNCLENBQUM1VSxLQUFELEVBQVFrQixTQUFSLEVBQXNCO0FBQ2hELFFBQU1vRixNQUFNdEcsTUFBTXpFLEtBQWxCO0FBQ0EsUUFBTStGLFdBQVcsZ0JBQUVqRyxRQUFGLENBQVc2RixVQUFVSSxRQUFyQixFQUErQmdGLEdBQS9CLENBQWpCO0FBQ0EsUUFBTWlDLGFBQWEsQ0FBQ3JILFVBQVVXLGFBQVgsSUFBNEIsQ0FBQyxnQkFBRXhHLFFBQUYsQ0FBVzZGLFVBQVVXLGFBQXJCLEVBQW9DeUUsR0FBcEMsQ0FBaEQ7QUFDQSxRQUFNdU8sZ0JBQWdCLGdCQUFFeFosUUFBRixDQUFXNkYsVUFBVVcsYUFBckIsRUFBb0N5RSxHQUFwQyxDQUF0Qjs7QUFKZ0QsUUFPOUN5QixLQVA4QyxHQVM1Qy9ILEtBVDRDLENBTzlDK0gsS0FQOEM7QUFBQSxRQVE5Q0ksU0FSOEMsR0FTNUNuSSxLQVQ0QyxDQVE5Q21JLFNBUjhDOzs7QUFXaEQsUUFBSTdHLFFBQUosRUFBYztBQUNaLFVBQU13VCxnQkFBZ0IsZ0JBQUVuTixVQUFGLENBQWF6RyxVQUFVNkcsS0FBdkIsSUFDbEI3RyxVQUFVNkcsS0FBVixDQUFnQi9ILE1BQU1MLEdBQXRCLEVBQTJCSyxNQUFNaUIsUUFBakMsQ0FEa0IsR0FFbEJDLFVBQVU2RyxLQUZkOztBQUlBLFVBQU1nTixrQkFBa0IsZ0JBQUVwTixVQUFGLENBQWF6RyxVQUFVNEcsT0FBdkIsSUFDcEI1RyxVQUFVNEcsT0FBVixDQUFrQjlILE1BQU1MLEdBQXhCLEVBQTZCSyxNQUFNaUIsUUFBbkMsQ0FEb0IsR0FFcEJDLFVBQVU0RyxPQUZkOztBQUlBQywyQkFDS0EsS0FETCxFQUVLK00sYUFGTDtBQUlBM00sa0JBQVksMEJBQUdBLFNBQUgsRUFBYzRNLGVBQWQsS0FBa0NqWixTQUE5Qzs7QUFFQSxVQUFJb0YsVUFBVXdMLE9BQWQsRUFBdUI7QUFDckIzRSxnQkFBUUEsU0FBUyxFQUFqQjtBQUNBQSxjQUFNaU4sZUFBTixHQUF3QixnQkFBRXJOLFVBQUYsQ0FBYXpHLFVBQVV3TCxPQUF2QixJQUNwQnhMLFVBQVV3TCxPQUFWLENBQWtCMU0sTUFBTUwsR0FBeEIsRUFBNkJLLE1BQU1pQixRQUFuQyxDQURvQixHQUVwQkMsVUFBVXdMLE9BRmQ7QUFHRDtBQUNGOztBQUVELFFBQUltSSxhQUFKLEVBQW1CO0FBQ2pCLFVBQU1JLHFCQUFxQixnQkFBRXROLFVBQUYsQ0FBYXpHLFVBQVVzTCxrQkFBdkIsSUFDdkJ0TCxVQUFVc0wsa0JBQVYsQ0FBNkJ4TSxNQUFNTCxHQUFuQyxFQUF3Q0ssTUFBTWlCLFFBQTlDLENBRHVCLEdBRXZCQyxVQUFVc0wsa0JBRmQ7O0FBSUEsVUFBTTBJLHVCQUF1QixnQkFBRXZOLFVBQUYsQ0FBYXpHLFVBQVV1TCxvQkFBdkIsSUFDekJ2TCxVQUFVdUwsb0JBQVYsQ0FBK0J6TSxNQUFNTCxHQUFyQyxFQUEwQ0ssTUFBTWlCLFFBQWhELENBRHlCLEdBRXpCQyxVQUFVdUwsb0JBRmQ7O0FBSUExRSwyQkFDS0EsS0FETCxFQUVLa04sa0JBRkw7QUFJQTlNLGtCQUFZLDBCQUFHQSxTQUFILEVBQWMrTSxvQkFBZCxLQUF1Q3BaLFNBQW5EO0FBQ0Q7O0FBRUQsV0FDRSw4QkFBQyxTQUFELGVBQ09rRSxLQURQO0FBRUUsYUFBUStILEtBRlY7QUFHRSxpQkFBWUksU0FIZDtBQUlFLGlCQUFZakgsU0FKZDtBQUtFLGdCQUFXSSxRQUxiO0FBTUUsa0JBQWFpSDtBQU5mLE9BREY7QUFVRCxHQTVERDs7QUE4REEsV0FBUzRNLFlBQVQsQ0FBc0JuVixLQUF0QixFQUE2QjtBQUMzQixXQUNFO0FBQUEsaUNBQWtCLFFBQWxCO0FBQUE7QUFDSTtBQUFBLGVBQWE0VSxvQkFBb0I1VSxLQUFwQixFQUEyQmtCLFNBQTNCLENBQWI7QUFBQTtBQURKLEtBREY7QUFLRDs7QUFFRGlVLGVBQWFDLFdBQWIsR0FBMkIsMEJBQTNCO0FBQ0EsU0FBT0QsWUFBUDtBQUNELEM7Ozs7Ozs7Ozs7Ozs7a1FDL0VEOzs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7Ozs7a0JBRWUsVUFBQ3ZTLFNBQUQsRUFBZTtBQUM1QixNQUFNeVMsc0JBQXNCLFNBQXRCQSxtQkFBc0IsQ0FBQ3JWLEtBQUQsRUFBUThELFNBQVIsRUFBc0I7QUFDaEQsUUFBSW9KLGtCQUFrQixFQUF0QjtBQUNBLFFBQUkvRSxZQUFZLEVBQWhCO0FBQ0EsUUFBTTdCLE1BQU10RyxNQUFNekUsS0FBbEI7O0FBRUEsUUFBTXNJLFdBQVcsZ0JBQUV4SSxRQUFGLENBQVd5SSxVQUFVRCxRQUFyQixFQUErQnlDLEdBQS9CLENBQWpCO0FBQ0EsUUFBTXZDLFlBQVksZ0JBQUUxSSxRQUFGLENBQVd5SSxVQUFVQyxTQUFyQixFQUFnQ3VDLEdBQWhDLENBQWxCO0FBQ0EsUUFBTWtDLGFBQWEsQ0FBQzFFLFVBQVVRLGFBQVgsSUFBNEIsQ0FBQyxnQkFBRWpKLFFBQUYsQ0FBV3lJLFVBQVVRLGFBQXJCLEVBQW9DZ0MsR0FBcEMsQ0FBaEQ7QUFDQSxRQUFJekMsUUFBSixFQUFjO0FBQ1pxSix3QkFBa0IsZ0JBQUV2RixVQUFGLENBQWE3RCxVQUFVb0osZUFBdkIsSUFDaEJwSixVQUFVb0osZUFBVixDQUEwQnJKLFFBQTFCLEVBQW9DN0QsTUFBTUwsR0FBMUMsRUFBK0NLLE1BQU1pQixRQUFyRCxDQURnQixHQUVmNkMsVUFBVW9KLGVBQVYsSUFBNkIsRUFGaEM7O0FBSUEvRSxrQkFBWSxnQkFBRVIsVUFBRixDQUFhN0QsVUFBVXFFLFNBQXZCLElBQ1ZyRSxVQUFVcUUsU0FBVixDQUFvQnRFLFFBQXBCLEVBQThCN0QsTUFBTUwsR0FBcEMsRUFBeUNLLE1BQU1pQixRQUEvQyxDQURVLEdBRVQ2QyxVQUFVcUUsU0FBVixJQUF1QixFQUYxQjtBQUdEOztBQUVELFdBQU8sQ0FDTCw4QkFBQyxTQUFELGVBQ09uSSxLQURQO0FBRUUsV0FBTXNHLEdBRlI7QUFHRSxnQkFBV3pDLFFBSGI7QUFJRSxrQkFBYTJFLFVBSmY7QUFLRSw4QkFBaUIxRSxTQUFqQixDQUxGO0FBTUUsaUJBQVksMEJBQUc5RCxNQUFNbUksU0FBVCxFQUFvQitFLGVBQXBCO0FBTmQsT0FESyxFQVNMckosWUFBWUUsU0FBWixHQUF3QjtBQUFBO0FBQUE7QUFDdEIsYUFBU3VDLEdBQVQsZUFEc0I7QUFFdEIsaUJBQVV0RyxNQUFNZ00saUJBRk07QUFHdEIsa0JBQVduSSxRQUhXO0FBSXRCLGtCQUFXO0FBQUEsaUJBQU1DLFVBQVVFLFFBQVYsQ0FBbUJzQyxHQUFuQixDQUFOO0FBQUEsU0FKVztBQUt0QixtQkFBWTZCO0FBTFU7QUFPcEJyRSxnQkFBVWlKLFFBQVYsQ0FBbUIvTSxNQUFNTCxHQUF6QixFQUE4QkssTUFBTWlCLFFBQXBDO0FBUG9CLEtBQXhCLEdBUWUsSUFqQlYsQ0FBUDtBQW1CRCxHQXJDRDtBQXNDQSxTQUFPO0FBQUEsV0FDTDtBQUFBLGlDQUFrQixRQUFsQjtBQUFBO0FBQ0k7QUFBQSxlQUFhb1Usb0JBQW9CclYsS0FBcEIsRUFBMkI4RCxTQUEzQixDQUFiO0FBQUE7QUFESixLQURLO0FBQUEsR0FBUDtBQUtELEM7Ozs7Ozs7Ozs7Ozs7OztBQ25ERDs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7Ozs7O0FBRUEsSUFBTXdSLFlBQVksU0FBWkEsU0FBWTtBQUFBLE1BQUczUyxRQUFILFFBQUdBLFFBQUg7QUFBQSxNQUFha0IsUUFBYixRQUFhQSxRQUFiO0FBQUEsTUFBdUJHLFFBQXZCLFFBQXVCQSxRQUF2QjtBQUFBLE1BQWlDbUUsU0FBakMsUUFBaUNBLFNBQWpDO0FBQUEsTUFBK0NyQyxJQUEvQzs7QUFBQSxTQUNoQjtBQUFBO0FBQUE7QUFDRTtBQUFBO0FBQUEsaUJBQUksV0FBWSwwQkFBRyx1QkFBSCxFQUE0QnFDLFNBQTVCLENBQWhCLElBQThEckMsSUFBOUQ7QUFDRTtBQUFBO0FBQUE7QUFDRSxzQkFERjtBQUVFLGdCQUFLakMsUUFGUDtBQUdFLG1CQUFVLEdBSFo7QUFJRSxzQkFBVyxrQkFKYjtBQUtFLG9CQUFXRztBQUxiO0FBT0U7QUFBQTtBQUFBO0FBQ0U7QUFBQTtBQUFBLGNBQUssV0FBVSxxQkFBZjtBQUNJckI7QUFESjtBQURGO0FBUEY7QUFERjtBQURGLEdBRGdCO0FBQUEsQ0FBbEI7O0FBb0JBMlMsVUFBVXpTLFNBQVYsR0FBc0I7QUFDcEJGLFlBQVUsb0JBQVVHLElBREE7QUFFcEJlLFlBQVUsb0JBQVVxSSxJQUZBO0FBR3BCbEksWUFBVSxvQkFBVXJHLElBSEE7QUFJcEJ3SyxhQUFXLG9CQUFVbEY7QUFKRCxDQUF0Qjs7QUFPQXFTLFVBQVV6SCxZQUFWLEdBQXlCO0FBQ3ZCbEwsWUFBVSxJQURhO0FBRXZCa0IsWUFBVSxLQUZhO0FBR3ZCRyxZQUFVLElBSGE7QUFJdkJtRSxhQUFXO0FBSlksQ0FBekI7O2tCQU9lbU4sUzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDdkNvQjtBQUNJO0FBQ0Y7QUFDTDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDSGhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDMEI7O0FBRTFCO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsT0FBTyxVQUFVLElBQUk7QUFDakQ7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLHdDQUF3QyxzQkFBc0I7QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHVFQUF1RSxhQUFhO0FBQ3BGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQixlQUFlO0FBQ2Y7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtT0FBc0Q7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSw4Q0FBNkU7QUFDN0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELHdFOzs7Ozs7O0FDL1ZBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSwwREFBMEQseUpBQXlKO0FBQ25OOztBQUVBLG9DOzs7Ozs7QUNiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHdDOzs7Ozs7O0FDTkE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLHFGQUFxRjtBQUNyRjs7QUFFQSxvQzs7Ozs7OztBQ1RBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDZEQUE2RCxtSEFBbUg7QUFDaEwsRTs7Ozs7Ozs7Ozs7Ozs7OztBQ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ3NCO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHdFQUF3RSxhQUFhO0FBQ3JGO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSw0RUFBNEUsZUFBZTtBQUMzRjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSw0RUFBNEUsZUFBZTtBQUMzRjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSw0RUFBNEUsZUFBZTtBQUMzRjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSw0RUFBNEUsZUFBZTtBQUMzRjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSw0RUFBNEUsZUFBZTtBQUMzRjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSw0RUFBNEUsZUFBZTtBQUMzRjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELDRFOzs7Ozs7OztBQ3JJQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEM7Ozs7Ozs7Ozs7Ozs7QUNOaUQ7QUFDakQ7QUFDQTtBQUNBO0FBQ0EsV0FBVyxFQUFFO0FBQ2IsWUFBWSxPQUFPO0FBQ25COztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsaUJBQWlCLHFDQUFxQztBQUN0RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7OztBQUdILGFBQWEsd0JBQXdCO0FBQ3JDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvSEFBcUU7O0FBRXJFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEdBQUc7QUFDSDtBQUNBLEM7Ozs7Ozs7Ozs7Ozs7QUMxSUE7Ozs7QUFDQTs7OztBQUVBOzs7O0FBQ0E7Ozs7QUFDQTs7Ozs7O0FBRUEsSUFBTUMsU0FBUyxTQUFUQSxNQUFTLENBQUN2VixLQUFELEVBQVc7QUFBQSxNQUNoQkgsSUFEZ0IsR0FDbUNHLEtBRG5DLENBQ2hCSCxJQURnQjtBQUFBLE1BQ1ZzSSxTQURVLEdBQ21DbkksS0FEbkMsQ0FDVm1JLFNBRFU7QUFBQSxNQUNDdkIsT0FERCxHQUNtQzVHLEtBRG5DLENBQ0M0RyxPQUREO0FBQUEsTUFDVTFGLFNBRFYsR0FDbUNsQixLQURuQyxDQUNVa0IsU0FEVjtBQUFBLE1BQ3FCNEMsU0FEckIsR0FDbUM5RCxLQURuQyxDQUNxQjhELFNBRHJCOzs7QUFHeEIsV0FBUzhCLGFBQVQsR0FBeUI7QUFDdkIsV0FBT2dCLFFBQVF0QixHQUFSLENBQVksVUFBQ2xGLE1BQUQsRUFBU2pELENBQVQsRUFBZTtBQUNoQyxVQUFJaUQsT0FBT29WLE1BQVAsS0FBa0IxWixTQUFsQixJQUErQnNFLE9BQU9vVixNQUFQLEtBQWtCLElBQXJELEVBQTJEO0FBQ3pELGVBQU8sS0FBUDtBQUNEOztBQUVELFVBQU1DLGFBQWEsZ0JBQUVDLEtBQUYsQ0FBUTdWLElBQVIsRUFBY08sT0FBT2tILFNBQXJCLENBQW5COztBQUVBLGFBQ0U7QUFDRSxlQUFRbkssQ0FEVjtBQUVFLGFBQU1pRCxPQUFPa0gsU0FGZjtBQUdFLGdCQUFTbEgsTUFIWDtBQUlFLG9CQUFhcVY7QUFKZixRQURGO0FBUUQsS0FmTSxDQUFQO0FBZ0JEOztBQUVELFNBQ0U7QUFBQTtBQUFBO0FBQ0U7QUFDRSxxQkFBZ0I3UCxhQURsQjtBQUVFLGlCQUFZMUUsU0FGZDtBQUdFLGlCQUFZNEMsU0FIZDtBQUlFLGlCQUFZcUUsU0FKZDtBQUtFLGNBQU87QUFMVDtBQURGLEdBREY7QUFXRCxDQWpDRCxDLENBUkE7OztBQTJDQW9OLE9BQU8xUyxTQUFQLEdBQW1CO0FBQ2pCaEQsUUFBTSxvQkFBVW1ELEtBREM7QUFFakJtRixhQUFXLG9CQUFVbEYsTUFGSjtBQUdqQjJELFdBQVMsb0JBQVU1RCxLQUhGO0FBSWpCOUIsYUFBVyxvQkFBVXVGLE1BSko7QUFLakIzQyxhQUFXLG9CQUFVMkM7QUFMSixDQUFuQjs7a0JBUWU4TyxNOzs7Ozs7Ozs7Ozs7Ozs7OztBQ2xEZjs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFFQTs7OztBQUNBOzs7Ozs7Ozs7OytlQU5BOzs7SUFRTUksVTs7Ozs7Ozs7Ozs7NkJBQ0s7QUFBQSxtQkFDK0IsS0FBSzNWLEtBRHBDO0FBQUEsVUFDQ00sS0FERCxVQUNDQSxLQUREO0FBQUEsVUFDUUYsTUFEUixVQUNRQSxNQURSO0FBQUEsVUFDZ0JxVixVQURoQixVQUNnQkEsVUFEaEI7QUFBQSxVQUlMRCxNQUpLLEdBWUhwVixNQVpHLENBSUxvVixNQUpLO0FBQUEsVUFLTEksV0FMSyxHQVlIeFYsTUFaRyxDQUtMd1YsV0FMSztBQUFBLFVBTUxDLFdBTkssR0FZSHpWLE1BWkcsQ0FNTHlWLFdBTks7QUFBQSxVQU9MQyxlQVBLLEdBWUgxVixNQVpHLENBT0wwVixlQVBLO0FBQUEsVUFRTEMsWUFSSyxHQVlIM1YsTUFaRyxDQVFMMlYsWUFSSztBQUFBLFVBU0w5SixhQVRLLEdBWUg3TCxNQVpHLENBU0w2TCxhQVRLO0FBQUEsVUFVTCtKLFdBVkssR0FZSDVWLE1BWkcsQ0FVTDRWLFdBVks7QUFBQSxVQVdMQyxXQVhLLEdBWUg3VixNQVpHLENBV0w2VixXQVhLOzs7QUFjUCxVQUFNaEgsaUJBQWlCLEtBQUtDLFFBQUwsQ0FBYzZHLFlBQWQsQ0FBdkI7QUFDQSxVQUFNck8seUJBQ0EsZ0JBQUVDLFVBQUYsQ0FBYXNPLFdBQWIsSUFBNEJBLFlBQVk3VixNQUFaLEVBQW9CRSxLQUFwQixDQUE1QixHQUF5RDJWLFdBRHpELEVBRURoSCxjQUZDLENBQU47O0FBTUEsVUFBSVYsT0FBTyxFQUFYO0FBQ0EsVUFBSSxnQkFBRTJILFFBQUYsQ0FBV1YsTUFBWCxDQUFKLEVBQXdCO0FBQ3RCakgsZUFBT2lILE1BQVA7QUFDRCxPQUZELE1BRU8sSUFBSSxnQkFBRTdOLFVBQUYsQ0FBYTZOLE1BQWIsQ0FBSixFQUEwQjtBQUMvQmpILGVBQU9pSCxPQUFPQyxVQUFQLEVBQW1CclYsTUFBbkIsRUFBMkJFLEtBQTNCLENBQVA7QUFDRDs7QUFFRCxVQUFJbUgsWUFBWSxFQUFoQjtBQUNBLFVBQU1JLGNBQWMsZ0JBQUVGLFVBQUYsQ0FBYXNFLGFBQWIsSUFBOEJBLGNBQWM3TCxNQUFkLEVBQXNCRSxLQUF0QixDQUE5QixHQUE2RDJMLGFBQWpGOztBQUVBLFVBQUkrSixXQUFKLEVBQWlCO0FBQ2Z2TyxvQkFBWSxnQkFBRUUsVUFBRixDQUFhcU8sV0FBYixJQUE0QkEsWUFBWTVWLE1BQVosRUFBb0JFLEtBQXBCLENBQTVCLEdBQXlEMFYsV0FBckU7QUFDQXZPLG9CQUFZQSx5QkFBaUJBLFNBQWpCLElBQStCQSxTQUEzQztBQUNEOztBQUVELFVBQUltTyxXQUFKLEVBQWlCO0FBQ2ZsTyxrQkFBVU0sS0FBVixHQUFrQixnQkFBRUwsVUFBRixDQUFhaU8sV0FBYixJQUE0QkEsWUFBWXhWLE1BQVosRUFBb0JFLEtBQXBCLENBQTVCLEdBQXlEaU8sSUFBM0U7QUFDRDs7QUFFRCxVQUFJc0gsV0FBSixFQUFpQjtBQUNmcE8sa0JBQVVTLFNBQVYsR0FBc0IsZ0JBQUVQLFVBQUYsQ0FBYWtPLFdBQWIsSUFBNEJBLFlBQVl6VixNQUFaLEVBQW9CRSxLQUFwQixDQUE1QixHQUF5RHVWLFdBQS9FO0FBQ0Q7O0FBRUQsVUFBSWhPLFdBQUosRUFBaUJILFVBQVVTLFNBQVYsR0FBc0IsMEJBQUdULFVBQVVTLFNBQWIsRUFBd0JOLFdBQXhCLENBQXRCO0FBQ2pCLFVBQUksQ0FBQyxnQkFBRWpMLGFBQUYsQ0FBZ0I2SyxTQUFoQixDQUFMLEVBQWlDQyxVQUFVSyxLQUFWLEdBQWtCTixTQUFsQjs7QUFFakMsVUFBTTlFLFdBQVdtVCxrQkFBa0JBLGdCQUFnQjFWLE1BQWhCLEVBQXdCRSxLQUF4QixFQUErQixFQUFFaU8sVUFBRixFQUEvQixDQUFsQixHQUE2REEsSUFBOUU7O0FBRUEsYUFBTyxnQkFBTWxJLGFBQU4sQ0FBb0IsSUFBcEIsRUFBMEJxQixTQUExQixFQUFxQy9FLFFBQXJDLENBQVA7QUFDRDs7OztFQW5Ec0Isa0NBQWUsZ0JBQU1DLFNBQXJCLEM7O0FBc0R6QitTLFdBQVc5UyxTQUFYLEdBQXVCO0FBQ3JCNFMsY0FBWSxvQkFBVXpTLEtBREQ7QUFFckIxQyxTQUFPLG9CQUFVb1EsTUFGSTtBQUdyQnRRLFVBQVEsb0JBQVVxRztBQUhHLENBQXZCOztrQkFNZWtQLFU7Ozs7Ozs7Ozs7Ozs7OztBQ3BFZjs7OztBQUNBOzs7Ozs7Ozs7Ozs7a0JBRWU7QUFBQTtBQUFBOztBQUFBO0FBQUE7O0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUEsc0NBRUs7QUFBQSxZQUNObFcsUUFETSxHQUNPLEtBQUtPLEtBRFosQ0FDTlAsUUFETTs7QUFFZCxZQUFJLENBQUNBLFFBQUwsRUFBZTtBQUNiLGdCQUFNLElBQUkvQyxLQUFKLENBQVUsNENBQVYsQ0FBTjtBQUNEO0FBQ0QsWUFBSSxLQUFLc1AsaUJBQUwsQ0FBdUIsS0FBdkIsS0FBaUMsQ0FBckMsRUFBd0M7QUFDdEMsZ0JBQU0sSUFBSXRQLEtBQUosQ0FBVSw2QkFBVixDQUFOO0FBQ0Q7QUFDRjtBQVZVO0FBQUE7QUFBQSxnQ0FZRDtBQUNSLGVBQU8sS0FBS3NELEtBQUwsQ0FBV0gsSUFBWCxDQUFnQmxELE1BQWhCLEtBQTJCLENBQWxDO0FBQ0Q7QUFkVTtBQUFBO0FBQUEsb0NBZ0JHO0FBQUEscUJBQzJCLEtBQUtxRCxLQURoQztBQUFBLFlBQ0pILElBREksVUFDSkEsSUFESTtBQUFBLFlBQ0VzVyxVQURGLFVBQ0VBLFVBREY7QUFBQSxZQUNjMVcsUUFEZCxVQUNjQSxRQURkOztBQUVaLFlBQUksQ0FBQzBXLFVBQUQsSUFBZUEsV0FBV3haLE1BQVgsS0FBc0IsQ0FBekMsRUFBNEMsT0FBT2tELElBQVA7QUFDNUMsZUFBT0EsS0FBSzJCLE1BQUwsQ0FBWSxVQUFDN0IsR0FBRCxFQUFTO0FBQzFCLGNBQU0yRyxNQUFNLGdCQUFFNUssR0FBRixDQUFNaUUsR0FBTixFQUFXRixRQUFYLENBQVo7QUFDQSxpQkFBTyxDQUFDLGdCQUFFcEUsUUFBRixDQUFXOGEsVUFBWCxFQUF1QjdQLEdBQXZCLENBQVI7QUFDRCxTQUhNLENBQVA7QUFJRDtBQXZCVTs7QUFBQTtBQUFBLElBQ2UsOEJBQWUzRixVQUFmLENBRGY7QUFBQSxDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7a0JDSEE7QUFBQTtBQUFBOztBQUFBO0FBQUE7O0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUEsMENBRW1DO0FBQUEsWUFBNUJ5VixtQkFBNEIsdUVBQU4sSUFBTTs7QUFDNUMsWUFBSUMsa0JBQUo7QUFDQSxZQUFJLEtBQUtyVyxLQUFMLENBQVdzVyxZQUFYLElBQTJCLEtBQUt0VyxLQUFMLENBQVdzVyxZQUFYLENBQXdCQyxPQUF2RCxFQUFnRTtBQUM5RCxjQUFNM1AsVUFBVSxLQUFLNUcsS0FBTCxDQUFXc1csWUFBWCxDQUF3QkMsT0FBeEM7QUFDQUYsc0JBQVlyWixPQUFPRSxJQUFQLENBQVkwSixPQUFaLEVBQXFCcEYsTUFBckIsQ0FBNEI7QUFBQSxtQkFBUW9GLFFBQVE0UCxJQUFSLENBQVI7QUFBQSxXQUE1QixFQUFtRDdaLE1BQS9EO0FBQ0QsU0FIRCxNQUdPO0FBQ0wwWixzQkFBWSxLQUFLclcsS0FBTCxDQUFXNEcsT0FBWCxDQUFtQnBGLE1BQW5CLENBQTBCO0FBQUEsbUJBQUssQ0FBQ2lWLEVBQUU1RyxNQUFSO0FBQUEsV0FBMUIsRUFBMENsVCxNQUF0RDtBQUNEO0FBQ0QsWUFBSSxDQUFDeVosbUJBQUwsRUFBMEIsT0FBT0MsU0FBUDtBQUMxQixZQUFJLEtBQUtyVyxLQUFMLENBQVdrQixTQUFYLElBQXdCLENBQUMsS0FBS2xCLEtBQUwsQ0FBV2tCLFNBQVgsQ0FBcUJnRixnQkFBbEQsRUFBb0U7QUFDbEVtUSx1QkFBYSxDQUFiO0FBQ0Q7QUFDRCxZQUFJLEtBQUtyVyxLQUFMLENBQVc4RCxTQUFYLElBQXdCLEtBQUs5RCxLQUFMLENBQVc4RCxTQUFYLENBQXFCeUMsZ0JBQWpELEVBQW1FO0FBQ2pFOFAsdUJBQWEsQ0FBYjtBQUNEO0FBQ0QsZUFBT0EsU0FBUDtBQUNEO0FBbEJVOztBQUFBO0FBQUEsSUFDZ0IxVixVQURoQjtBQUFBLEM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDSWY7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7O0FBQ0E7Ozs7Ozs7Ozs7K2VBZEE7QUFDQTtBQUNBO0FBQ0E7OztBQWFBLElBQU0rVixjQUFjLFNBQWRBLFdBQWM7QUFBQTtBQUFBOztBQUVoQixxQ0FBWTFXLEtBQVosRUFBbUI7QUFBQTs7QUFBQSxvSkFDWEEsS0FEVzs7QUFFakIsWUFBSzJXLFdBQUwsR0FBbUIsNEJBQW5COztBQUVBLFVBQUkzVyxNQUFNNFcsa0JBQVYsRUFBOEI7QUFDNUIsWUFBTUMsb0JBQW9CLHNCQUExQjtBQUNBQSwwQkFBa0JDLEVBQWxCLENBQXFCLGdCQUFyQixFQUF1QztBQUFBLGlCQUFXQyxRQUFRL2EsTUFBUixHQUFpQixNQUFLZ2IsS0FBTCxDQUFXNU4sT0FBWCxFQUE1QjtBQUFBLFNBQXZDO0FBQ0F5TiwwQkFBa0JDLEVBQWxCLENBQXFCLG1CQUFyQixFQUEwQztBQUFBLGlCQUFXQyxRQUFRL2EsTUFBUixHQUFpQixNQUFLaWIsZ0JBQUwsQ0FBc0JDLFdBQXRCLEVBQTVCO0FBQUEsU0FBMUM7QUFDQUwsMEJBQWtCQyxFQUFsQixDQUFxQixtQkFBckIsRUFBMEMsVUFBQ0MsT0FBRCxFQUFhO0FBQ3JELGNBQUksTUFBS3BKLGFBQVQsRUFBd0I7QUFDdEJvSixvQkFBUS9hLE1BQVIsR0FBaUIsTUFBSzJSLGFBQUwsQ0FBbUJ3SixXQUFuQixFQUFqQjtBQUNELFdBRkQsTUFFTyxJQUFJLE1BQUtDLGFBQVQsRUFBd0I7QUFDN0JMLG9CQUFRL2EsTUFBUixHQUFpQixNQUFLb2IsYUFBTCxDQUFtQkMsV0FBbkIsRUFBakI7QUFDRCxXQUZNLE1BRUE7QUFDTE4sb0JBQVEvYSxNQUFSLEdBQWlCLE1BQUtnYixLQUFMLENBQVc1TixPQUFYLEVBQWpCO0FBQ0Q7QUFDRixTQVJEO0FBU0FwSixjQUFNNFcsa0JBQU4sQ0FBeUJDLGlCQUF6QjtBQUNEOztBQUVELFVBQUk3VyxNQUFNNEcsT0FBTixDQUFjcEYsTUFBZCxDQUFxQjtBQUFBLGVBQU91SixJQUFJdkgsSUFBWDtBQUFBLE9BQXJCLEVBQXNDN0csTUFBdEMsR0FBK0MsQ0FBbkQsRUFBc0Q7QUFDcEQsY0FBSzJhLFdBQUwsR0FBbUIsZ0RBQ0gsTUFBS0MsWUFERixFQUNnQixNQUFLQyxzQkFEckIsQ0FBbkI7QUFFRDs7QUFFRCxVQUNFeFgsTUFBTXNXLFlBQU4sSUFDQXRXLE1BQU00RyxPQUFOLENBQWNwRixNQUFkLENBQXFCO0FBQUEsZUFBT3VKLElBQUk4RSxNQUFYO0FBQUEsT0FBckIsRUFBd0NsVCxNQUF4QyxHQUFpRCxDQUZuRCxFQUdFO0FBQ0EsY0FBSzhhLHVCQUFMLEdBQStCLDhCQUEvQjtBQUNEOztBQUVELFVBQUl6WCxNQUFNa0IsU0FBVixFQUFxQjtBQUNuQixjQUFLTixnQkFBTDtBQUNEOztBQUVELFVBQUlaLE1BQU04RCxTQUFWLEVBQXFCO0FBQ25CLGNBQUtKLGdCQUFMO0FBQ0Q7O0FBRUQsVUFBSTFELE1BQU15SyxRQUFOLElBQWtCekssTUFBTXlLLFFBQU4sQ0FBZW5MLGFBQXJDLEVBQW9EO0FBQ2xELGNBQUtvWSxlQUFMLEdBQXVCMVgsTUFBTXlLLFFBQU4sQ0FBZW5MLGFBQWYsdUNBQ0osTUFBS3FZLGdCQURELEVBQ21CLE1BQUtDLHNCQUR4QixDQUF2QjtBQUVEOztBQUVELFVBQUk1WCxNQUFNd0IsTUFBVixFQUFrQjtBQUNoQixjQUFLcVcsYUFBTCxHQUFxQjdYLE1BQU13QixNQUFOLENBQWFsQyxhQUFiLGtCQUNoQixNQUFLd1ksaUJBRFcsRUFDUSxNQUFLQyx3QkFEYixDQUFyQjtBQUVEOztBQUVELFVBQUkvWCxNQUFNd0osVUFBVixFQUFzQjtBQUNwQixjQUFLd08saUJBQUwsR0FBeUJoWSxNQUFNd0osVUFBTixDQUFpQmxLLGFBQWpCLEVBQXpCO0FBQ0Q7O0FBRUQsVUFBSVUsTUFBTXlOLE1BQU4sSUFBZ0J6TixNQUFNeU4sTUFBTixDQUFhRSxhQUFqQyxFQUFnRDtBQUM5QyxjQUFLc0ssYUFBTCxHQUFxQmpZLE1BQU15TixNQUFOLENBQWFFLGFBQWIsa0JBQ2hCLE1BQUt1SyxjQURXLEVBQ0ssTUFBS0Msd0JBRFYsQ0FBckI7QUFFRDs7QUFFRCxVQUFJblksTUFBTTROLG9CQUFWLEVBQWdDO0FBQzlCNU4sY0FBTTROLG9CQUFOO0FBQ0Q7O0FBRUQsVUFBSTVOLE1BQU1vWSwwQkFBVixFQUFzQztBQUNwQ3BZLGNBQU1vWSwwQkFBTixDQUFpQyxNQUFLQyxhQUF0QztBQUNEO0FBakVnQjtBQWtFbEI7O0FBcEVlO0FBQUE7QUFBQSx1REFzRWlCaFcsU0F0RWpCLEVBc0U0QjtBQUMxQyxZQUFJQSxVQUFVdUUsT0FBVixDQUFrQnBGLE1BQWxCLENBQXlCO0FBQUEsaUJBQU91SixJQUFJdkgsSUFBWDtBQUFBLFNBQXpCLEVBQTBDN0csTUFBMUMsSUFBb0QsQ0FBeEQsRUFBMkQ7QUFDekQsZUFBSzJhLFdBQUwsR0FBbUIsSUFBbkI7QUFDRCxTQUZELE1BRU8sSUFBSSxDQUFDLEtBQUtBLFdBQVYsRUFBdUI7QUFDNUIsZUFBS0EsV0FBTCxHQUFtQixnREFDSCxLQUFLQyxZQURGLEVBQ2dCLEtBQUtDLHNCQURyQixDQUFuQjtBQUVEO0FBQ0QsWUFBSSxDQUFDblYsVUFBVW1ILFVBQVgsSUFBeUIsS0FBS3hKLEtBQUwsQ0FBV3dKLFVBQXhDLEVBQW9EO0FBQ2xELGVBQUt3TyxpQkFBTCxHQUF5QixJQUF6QjtBQUNEO0FBQ0QsWUFBSTNWLFVBQVVtSCxVQUFWLElBQXdCLENBQUMsS0FBS3hKLEtBQUwsQ0FBV3dKLFVBQXhDLEVBQW9EO0FBQ2xELGVBQUt3TyxpQkFBTCxHQUF5QjNWLFVBQVVtSCxVQUFWLENBQXFCbEssYUFBckIsQ0FDdkIsS0FBS2daLGtCQURrQixFQUNFLEtBQUtDLHNCQURQLENBQXpCO0FBRUQ7QUFDRCxZQUFJLENBQUNsVyxVQUFVb0ksUUFBWCxJQUF1QixLQUFLekssS0FBTCxDQUFXeUssUUFBdEMsRUFBZ0Q7QUFDOUMsZUFBS2lOLGVBQUwsR0FBdUIsSUFBdkI7QUFDRDtBQUNELFlBQUlyVixVQUFVb0ksUUFBVixJQUFzQixDQUFDLEtBQUt6SyxLQUFMLENBQVd5SyxRQUF0QyxFQUFnRDtBQUM5QyxlQUFLaU4sZUFBTCxHQUF1QnJWLFVBQVVvSSxRQUFWLENBQW1CbkwsYUFBbkIsdUNBQ0osS0FBS3FZLGdCQURELEVBQ21CLEtBQUtDLHNCQUR4QixDQUF2QjtBQUVEO0FBQ0Y7QUEzRmU7QUFBQTtBQUFBLG1DQTZGSDtBQUFBOztBQUNYLGVBQU8sVUFDTFksU0FESyxFQUVMQyxXQUZLLEVBR0xDLFdBSEssRUFJTEMsU0FKSyxFQUtMQyxlQUxLLEVBTUxDLGlCQU5LO0FBQUEsaUJBUUwsOEJBQUMsSUFBRDtBQUNFLGlCQUFNO0FBQUEscUJBQUssT0FBSzdCLEtBQUwsR0FBYThCLENBQWxCO0FBQUE7QUFEUixhQUVPLE9BQUs5WSxLQUZaLEVBR08yWSxTQUhQLEVBSU9GLFdBSlAsRUFLT0MsV0FMUCxFQU1PRSxlQU5QLEVBT09DLGlCQVBQO0FBUUUsa0JBQU9MLFVBQVVwUCxPQUFWLENBQWtCcVAsV0FBbEIsRUFBK0JDLFdBQS9CLEVBQTRDQyxTQUE1QyxFQUF1REMsZUFBdkQ7QUFSVCxhQVJLO0FBQUEsU0FBUDtBQW1CRDtBQWpIZTtBQUFBO0FBQUEsb0RBbUhjRyxJQW5IZCxFQW1Ib0JDLFNBbkhwQixFQW1IK0I7QUFBQTs7QUFDN0MsZUFBTyxVQUNMUixTQURLLEVBRUxDLFdBRkssRUFHTEMsV0FISyxFQUlMQyxTQUpLLEVBS0xDLGVBTEs7QUFBQSxpQkFPTDtBQUFBLG1CQUFNLHVCQUFOLENBQThCLFFBQTlCO0FBQUEseUJBQ09JLFNBRFA7QUFFRSx1QkFBVSxPQUFLaFosS0FBTCxDQUFXc1csWUFBWCxHQUEwQixPQUFLdFcsS0FBTCxDQUFXc1csWUFBWCxDQUF3QkMsT0FBbEQsR0FBNEQ7QUFGeEU7QUFJRTtBQUFBLHFCQUFNLHVCQUFOLENBQThCLFFBQTlCO0FBQUE7QUFFSTtBQUFBLHVCQUFxQndDLEtBQ25CUCxTQURtQixFQUVuQkMsV0FGbUIsRUFHbkJDLFdBSG1CLEVBSW5CQyxTQUptQixFQUtuQkMsZUFMbUIsRUFNbkJDLGlCQU5tQixDQUFyQjtBQUFBO0FBRko7QUFKRixXQVBLO0FBQUEsU0FBUDtBQXlCRDtBQTdJZTtBQUFBO0FBQUEsNkNBK0lPRSxJQS9JUCxFQStJYUMsU0EvSWIsRUErSXdCO0FBQUE7O0FBQ3RDLGVBQU8sVUFDTFIsU0FESyxFQUVMQyxXQUZLLEVBR0xDLFdBSEssRUFJTEMsU0FKSyxFQUtMQyxlQUxLO0FBQUEsaUJBT0w7QUFBQSxtQkFBTSxnQkFBTixDQUF1QixRQUF2QjtBQUFBLHlCQUNPSSxTQURQO0FBRUUsbUJBQU07QUFBQSx1QkFBSyxPQUFLL0IsZ0JBQUwsR0FBd0I2QixDQUE3QjtBQUFBLGVBRlI7QUFHRSx5QkFBWSxPQUFLOVksS0FBTCxDQUFXa0IsU0FIekI7QUFJRSxvQkFBT3NYLFVBQVVwUCxPQUFWLENBQWtCcVAsV0FBbEIsRUFBK0JDLFdBQS9CLEVBQTRDQyxTQUE1QyxFQUF1REMsZUFBdkQ7QUFKVDtBQU9JRyxpQkFDRVAsU0FERixFQUVFQyxXQUZGLEVBR0VDLFdBSEYsRUFJRUMsU0FKRixFQUtFQyxlQUxGO0FBUEosV0FQSztBQUFBLFNBQVA7QUF3QkQ7QUF4S2U7QUFBQTtBQUFBLDZDQTBLT0csSUExS1AsRUEwS2FDLFNBMUtiLEVBMEt3QjtBQUFBOztBQUN0QyxlQUFPLFVBQ0xSLFNBREssRUFFTEMsV0FGSyxFQUdMQyxXQUhLLEVBSUxDLFNBSkssRUFLTEMsZUFMSztBQUFBLGlCQU9MO0FBQUEsbUJBQU0sZ0JBQU4sQ0FBdUIsUUFBdkI7QUFBQSx5QkFDT0ksU0FEUDtBQUVFLG1CQUFNO0FBQUEsdUJBQUssT0FBS0MsZ0JBQUwsR0FBd0JILENBQTdCO0FBQUEsZUFGUjtBQUdFLHlCQUFZLE9BQUs5WSxLQUFMLENBQVc4RCxTQUh6QjtBQUlFLG9CQUFPMFUsVUFBVXBQLE9BQVYsQ0FBa0JxUCxXQUFsQixFQUErQkMsV0FBL0IsRUFBNENDLFNBQTVDLEVBQXVEQyxlQUF2RDtBQUpUO0FBT0lHLGlCQUNFUCxTQURGLEVBRUVDLFdBRkYsRUFHRUMsV0FIRixFQUlFQyxTQUpGLEVBS0VDLGVBTEY7QUFQSixXQVBLO0FBQUEsU0FBUDtBQXdCRDtBQW5NZTtBQUFBO0FBQUEsOENBcU1RRyxJQXJNUixFQXFNYztBQUFBOztBQUM1QixlQUFPLFVBQ0xQLFNBREssRUFFTEMsV0FGSyxFQUdMQyxXQUhLLEVBSUxDLFNBSks7QUFBQSxpQkFNTDtBQUFBLG1CQUFNLGlCQUFOLENBQXdCLFFBQXhCO0FBQUE7QUFDRSxtQkFBTTtBQUFBLHVCQUFLLE9BQUtPLGlCQUFMLEdBQXlCSixDQUE5QjtBQUFBLGVBRFI7QUFFRSwwQkFBYSxPQUFLOVksS0FBTCxDQUFXd0osVUFGMUI7QUFHRSxvQkFBT2dQLFVBQVVwUCxPQUFWLENBQWtCcVAsV0FBbEIsRUFBK0JDLFdBQS9CLEVBQTRDQyxTQUE1QyxDQUhUO0FBSUUsMEJBQWEsT0FBSzNZLEtBQUwsQ0FBV1QsVUFKMUI7QUFLRSxrQ0FBcUIsT0FBSytZLGtCQUw1QjtBQU1FLDZCQUFnQixPQUFLRCxhQU52QjtBQU9FLGdDQUFtQixPQUFLclksS0FBTCxDQUFXdUosZ0JBUGhDO0FBUUUsdUJBQVUsT0FBS3ZKLEtBQUwsQ0FBV047QUFSdkI7QUFVRTtBQUFBLHFCQUFNLGlCQUFOLENBQXdCLFFBQXhCO0FBQUE7QUFFSTtBQUFBLHVCQUFtQnFaLEtBQ2pCUCxTQURpQixFQUVqQkMsV0FGaUIsRUFHakJDLFdBSGlCLEVBSWpCQyxTQUppQixFQUtqQkMsZUFMaUIsQ0FBbkI7QUFBQTtBQUZKO0FBVkYsV0FOSztBQUFBLFNBQVA7QUE2QkQ7QUFuT2U7QUFBQTtBQUFBLHdDQXFPRUcsSUFyT0YsRUFxT1FDLFNBck9SLEVBcU9tQjtBQUFBOztBQUNqQyxlQUFPLFVBQ0xSLFNBREssRUFFTEMsV0FGSyxFQUdMQyxXQUhLO0FBQUEsaUJBS0w7QUFBQSxtQkFBTSxXQUFOLENBQWtCLFFBQWxCO0FBQUEseUJBQ09NLFNBRFA7QUFFRSxtQkFBTTtBQUFBLHVCQUFLLE9BQUtHLFdBQUwsR0FBbUJMLENBQXhCO0FBQUEsZUFGUjtBQUdFLDZCQUFnQixPQUFLOVksS0FBTCxDQUFXbU4sYUFIN0I7QUFJRSxvQ0FBdUIsT0FBS25OLEtBQUwsQ0FBV3VOLG9CQUpwQztBQUtFLG9CQUFPLE9BQUt2TixLQUFMLENBQVd3RCxJQUxwQjtBQU1FLG9CQUFPZ1YsVUFBVXBQLE9BQVYsQ0FBa0JxUCxXQUFsQixFQUErQkMsV0FBL0I7QUFOVDtBQVFFO0FBQUEscUJBQU0sV0FBTixDQUFrQixRQUFsQjtBQUFBO0FBRUk7QUFBQSx1QkFBYUssS0FDWFAsU0FEVyxFQUVYQyxXQUZXLEVBR1hDLFdBSFcsRUFJWEMsU0FKVyxDQUFiO0FBQUE7QUFGSjtBQVJGLFdBTEs7QUFBQSxTQUFQO0FBeUJEO0FBL1BlO0FBQUE7QUFBQSwwQ0FpUUlJLElBalFKLEVBaVFVQyxTQWpRVixFQWlRcUI7QUFBQTs7QUFDbkMsZUFBTyxVQUNMUixTQURLLEVBRUxDLFdBRks7QUFBQSxpQkFJTDtBQUFBLG1CQUFNLGFBQU4sQ0FBb0IsUUFBcEI7QUFBQSx5QkFDT08sU0FEUDtBQUVFLG1CQUFNO0FBQUEsdUJBQUssT0FBS3JMLGFBQUwsR0FBcUJtTCxDQUExQjtBQUFBLGVBRlI7QUFHRSxvQkFBT04sVUFBVXBQLE9BQVYsQ0FBa0JxUCxXQUFsQixDQUhUO0FBSUUsMEJBQWEsT0FBS3pZLEtBQUwsQ0FBV3lOLE1BQVgsQ0FBa0JDLFVBSmpDO0FBS0Usa0NBQXFCLE9BQUsxTixLQUFMLENBQVdvWjtBQUxsQztBQU9FO0FBQUEscUJBQU0sYUFBTixDQUFvQixRQUFwQjtBQUFBO0FBRUk7QUFBQSx1QkFBZUwsS0FDYlAsU0FEYSxFQUViQyxXQUZhLEVBR2JDLFdBSGEsQ0FBZjtBQUFBO0FBRko7QUFQRixXQUpLO0FBQUEsU0FBUDtBQXNCRDtBQXhSZTtBQUFBO0FBQUEsMENBMFJJSyxJQTFSSixFQTBSVUMsU0ExUlYsRUEwUnFCO0FBQUE7O0FBQ25DLGVBQU87QUFBQSxpQkFDTDtBQUFBLG1CQUFNLGFBQU4sQ0FBb0IsUUFBcEI7QUFBQSx5QkFDT0EsU0FEUDtBQUVFLG1CQUFNO0FBQUEsdUJBQUssT0FBSzVCLGFBQUwsR0FBcUIwQixDQUExQjtBQUFBLGVBRlI7QUFHRSxvQkFBT04sVUFBVXBQLE9BQVYsRUFIVDtBQUlFLHNCQUFTLE9BQUtwSixLQUFMLENBQVd3QixNQUFYLENBQWtCdVIsT0FBbEIsSUFBNkIsRUFKeEM7QUFLRSxrQ0FBcUIsT0FBSy9TLEtBQUwsQ0FBV29aO0FBTGxDO0FBT0U7QUFBQSxxQkFBTSxhQUFOLENBQW9CLFFBQXBCO0FBQUE7QUFFSTtBQUFBLHVCQUFlTCxLQUNiUCxTQURhLEVBRWJDLFdBRmEsQ0FBZjtBQUFBO0FBRko7QUFQRixXQURLO0FBQUEsU0FBUDtBQWtCRDtBQTdTZTtBQUFBO0FBQUEsNENBK1NNTSxJQS9TTixFQStTWUMsU0EvU1osRUErU3VCO0FBQUE7O0FBQ3JDLGVBQU87QUFBQSxpQkFDTDtBQUFBLG9CQUFNLGVBQU4sQ0FBc0IsUUFBdEI7QUFBQSx5QkFDT0EsU0FEUDtBQUVFLG1CQUFNO0FBQUEsdUJBQUssUUFBS0ssZUFBTCxHQUF1QlAsQ0FBNUI7QUFBQSxlQUZSO0FBR0UseUJBQVksUUFBSzlZLEtBQUwsQ0FBV2tCLFNBSHpCO0FBSUUsd0JBQVcsUUFBS2xCLEtBQUwsQ0FBV3lLLFFBSnhCO0FBS0Usb0JBQU8rTixVQUFVcFAsT0FBVjtBQUxUO0FBT0kyUCxpQkFBS1AsU0FBTDtBQVBKLFdBREs7QUFBQSxTQUFQO0FBV0Q7QUEzVGU7QUFBQTtBQUFBLCtCQTZUUDtBQUFBLHFCQUNtQyxLQUFLeFksS0FEeEM7QUFBQSxZQUNDUCxRQURELFVBQ0NBLFFBREQ7QUFBQSxZQUNXbUgsT0FEWCxVQUNXQSxPQURYO0FBQUEsWUFDb0JySCxVQURwQixVQUNvQkEsVUFEcEI7O0FBRVAsWUFBTXlaLFlBQVksRUFBRXZaLGtCQUFGLEVBQVltSCxnQkFBWixFQUFsQjs7QUFFQSxZQUFJbVMsT0FBTyxLQUFLTyxVQUFMLEVBQVg7O0FBRUEsWUFBSSxLQUFLN0IsdUJBQVQsRUFBa0M7QUFDaENzQixpQkFBTyxLQUFLUSw2QkFBTCxDQUFtQ1IsSUFBbkMsRUFBeUNDLFNBQXpDLENBQVA7QUFDRDs7QUFFRCxZQUFJLEtBQUtwWSxnQkFBVCxFQUEyQjtBQUN6Qm1ZLGlCQUFPLEtBQUtTLHNCQUFMLENBQTRCVCxJQUE1QixFQUFrQ0MsU0FBbEMsQ0FBUDtBQUNEOztBQUVELFlBQUksS0FBS3RWLGdCQUFULEVBQTJCO0FBQ3pCcVYsaUJBQU8sS0FBS1Usc0JBQUwsQ0FBNEJWLElBQTVCLEVBQWtDQyxTQUFsQyxDQUFQO0FBQ0Q7O0FBRUQsWUFBSSxLQUFLaEIsaUJBQVQsRUFBNEI7QUFDMUJlLGlCQUFPLEtBQUtXLHVCQUFMLENBQTZCWCxJQUE3QixFQUFtQ0MsU0FBbkMsQ0FBUDtBQUNEOztBQUVELFlBQUksS0FBSzFCLFdBQVQsRUFBc0I7QUFDcEJ5QixpQkFBTyxLQUFLWSxpQkFBTCxDQUF1QlosSUFBdkIsRUFBNkJDLFNBQTdCLENBQVA7QUFDRDs7QUFFRCxZQUFJLEtBQUtmLGFBQVQsRUFBd0I7QUFDdEJjLGlCQUFPLEtBQUthLG1CQUFMLENBQXlCYixJQUF6QixFQUErQkMsU0FBL0IsQ0FBUDtBQUNEOztBQUVELFlBQUksS0FBS25CLGFBQVQsRUFBd0I7QUFDdEJrQixpQkFBTyxLQUFLYyxtQkFBTCxDQUF5QmQsSUFBekIsRUFBK0JDLFNBQS9CLENBQVA7QUFDRDs7QUFFRCxZQUFJLEtBQUt0QixlQUFULEVBQTBCO0FBQ3hCcUIsaUJBQU8sS0FBS2UscUJBQUwsQ0FBMkJmLElBQTNCLEVBQWlDQyxTQUFqQyxDQUFQO0FBQ0Q7O0FBRUQsZUFDRTtBQUFBLHNDQUFrQixRQUFsQjtBQUFBLFlBQTJCLE9BQVEsRUFBRXpaLHNCQUFGLEVBQW5DO0FBQ0U7QUFBQSxpQkFBTSxXQUFOLENBQWtCLFFBQWxCO0FBQUEseUJBQ095WixTQURQO0FBRUUsb0JBQU8sS0FBS2haLEtBQUwsQ0FBV0g7QUFGcEI7QUFJRTtBQUFBLG1CQUFNLFdBQU4sQ0FBa0IsUUFBbEI7QUFBQTtBQUVJa1o7QUFGSjtBQUpGO0FBREYsU0FERjtBQWNEO0FBalhlOztBQUFBO0FBQUEsSUFDb0IsK0NBRHBCO0FBQUEsQ0FBcEI7O2tCQW9YZXJDLFc7Ozs7Ozs7Ozs7Ozs7OztBQ25ZZjs7OztBQUNBOzs7Ozs7Ozs7OytlQUZBOzs7a0JBSWUsWUFBTTtBQUNuQixNQUFNQyxjQUFjLGdCQUFNclgsYUFBTixFQUFwQjs7QUFEbUIsTUFHYnlhLFlBSGE7QUFBQTs7QUFBQTtBQUFBOztBQUFBOztBQUFBOztBQUFBO0FBQUE7QUFBQTs7QUFBQSxvTUFTakJuVyxLQVRpQixHQVNULEVBQUUvRCxNQUFNLE1BQUtHLEtBQUwsQ0FBV0gsSUFBbkIsRUFUUyxRQVdqQnVKLE9BWGlCLEdBV1AsVUFBQ3FQLFdBQUQsRUFBY0MsV0FBZCxFQUEyQkMsU0FBM0IsRUFBc0NDLGVBQXRDLEVBQTBEO0FBQ2xFLFlBQUlBLGVBQUosRUFBcUIsT0FBT0EsZ0JBQWdCL1ksSUFBdkIsQ0FBckIsS0FDSyxJQUFJOFksU0FBSixFQUFlLE9BQU9BLFVBQVU5WSxJQUFqQixDQUFmLEtBQ0EsSUFBSTZZLFdBQUosRUFBaUIsT0FBT0EsWUFBWTdZLElBQW5CLENBQWpCLEtBQ0EsSUFBSTRZLFdBQUosRUFBaUIsT0FBT0EsWUFBWTVZLElBQW5CO0FBQ3RCLGVBQU8sTUFBS0csS0FBTCxDQUFXSCxJQUFsQjtBQUNELE9BakJnQjtBQUFBOztBQUFBO0FBQUE7QUFBQSx1REFtQmdCd0MsU0FuQmhCLEVBbUIyQjtBQUMxQyxhQUFLNkIsUUFBTCxDQUFjO0FBQUEsaUJBQU8sRUFBRXJFLE1BQU13QyxVQUFVeEMsSUFBbEIsRUFBUDtBQUFBLFNBQWQ7QUFDRDtBQXJCZ0I7QUFBQTtBQUFBLCtCQXVCUjtBQUNQLGVBQ0U7QUFBQyxxQkFBRCxDQUFhLFFBQWI7QUFBQTtBQUNFLG1CQUFRO0FBQ05BLG9CQUFNLEtBQUsrRCxLQUFMLENBQVcvRCxJQURYO0FBRU51Six1QkFBUyxLQUFLQTtBQUZSO0FBRFY7QUFNSSxlQUFLcEosS0FBTCxDQUFXMkM7QUFOZixTQURGO0FBVUQ7QUFsQ2dCOztBQUFBO0FBQUE7O0FBR2JvWCxjQUhhLENBSVZsWCxTQUpVLEdBSUU7QUFDakJoRCxVQUFNLG9CQUFVbUQsS0FBVixDQUFnQkQsVUFETDtBQUVqQkosY0FBVSxvQkFBVUcsSUFBVixDQUFlQztBQUZSLEdBSkY7O0FBb0NuQixTQUFPO0FBQ0xHLGNBQVU2VyxZQURMO0FBRUw1VyxjQUFVd1QsWUFBWXhUO0FBRmpCLEdBQVA7QUFJRCxDOzs7Ozs7Ozs7Ozs7Ozs7QUMxQ0Q7Ozs7QUFDQTs7Ozs7Ozs7OzsrZUFIQTtBQUNBOzs7a0JBSWUsWUFBTTtBQUNuQixNQUFNc1UsMEJBQTBCLGdCQUFNblksYUFBTixFQUFoQzs7QUFEbUIsTUFHYjBhLHdCQUhhO0FBQUE7O0FBQUE7QUFBQTs7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQSwrQkFhUjtBQUNQLFlBQUlDLHFCQUFKO0FBRE8scUJBRXNCLEtBQUtqYSxLQUYzQjtBQUFBLFlBRUM0RyxPQUZELFVBRUNBLE9BRkQ7QUFBQSxZQUVVMlAsT0FGVixVQUVVQSxPQUZWOztBQUdQLFlBQUlBLE9BQUosRUFBYTtBQUNYMEQseUJBQWVyVCxRQUFRcEYsTUFBUixDQUFlO0FBQUEsbUJBQVUrVSxRQUFRblcsT0FBT2tILFNBQWYsQ0FBVjtBQUFBLFdBQWYsQ0FBZjtBQUNELFNBRkQsTUFFTztBQUNMMlMseUJBQWVyVCxRQUFRcEYsTUFBUixDQUFlO0FBQUEsbUJBQVUsQ0FBQ3BCLE9BQU95UCxNQUFsQjtBQUFBLFdBQWYsQ0FBZjtBQUNEO0FBQ0QsZUFDRTtBQUFDLGlDQUFELENBQXlCLFFBQXpCO0FBQUEsWUFBa0MsT0FBUSxFQUFFakosU0FBU3FULFlBQVgsRUFBMUM7QUFDSSxlQUFLamEsS0FBTCxDQUFXMkM7QUFEZixTQURGO0FBS0Q7QUExQmdCOztBQUFBO0FBQUEsSUFHb0IsZ0JBQU1DLFNBSDFCOztBQUdib1gsMEJBSGEsQ0FJVm5YLFNBSlUsR0FJRTtBQUNqQitELGFBQVMsb0JBQVU1RCxLQUFWLENBQWdCRCxVQURSO0FBRWpCd1QsYUFBUyxvQkFBVTlQO0FBRkYsR0FKRjtBQUdidVQsMEJBSGEsQ0FTVm5NLFlBVFUsR0FTSztBQUNwQjBJLGFBQVM7QUFEVyxHQVRMOzs7QUE2Qm5CLFNBQU87QUFDTHJULGNBQVU4Vyx3QkFETDtBQUVMN1csY0FBVXNVLHdCQUF3QnRVO0FBRjdCLEdBQVA7QUFJRCxDOzs7Ozs7Ozs7Ozs7Ozs7OztBQ3BDRDs7OztBQUNBOzs7O0FBQ0E7Ozs7Ozs7Ozs7K2VBSkE7QUFDQTs7O2tCQUtlLFVBQ2IrVyxZQURhLEVBRWIzQyxZQUZhLEVBR2I0QyxnQkFIYSxFQUlWO0FBQ0gsTUFBTTdDLGNBQWMsZ0JBQU1oWSxhQUFOLEVBQXBCOztBQURHLE1BR0c4YSxZQUhIO0FBQUE7O0FBb0JELDBCQUFZcGEsS0FBWixFQUFtQjtBQUFBOztBQUFBLDhIQUNYQSxLQURXOztBQUFBOztBQUVqQixVQUFJdUwsa0JBQUo7QUFDQSxVQUFJd0csbUJBQUo7QUFIaUIsVUFJVDVFLGFBSlMsR0FJcUNuTixLQUpyQyxDQUlUbU4sYUFKUztBQUFBLFVBSU1JLG9CQUpOLEdBSXFDdk4sS0FKckMsQ0FJTXVOLG9CQUpOO0FBQUEsVUFJNEIvSixJQUo1QixHQUlxQ3hELEtBSnJDLENBSTRCd0QsSUFKNUI7OztBQU1qQixVQUFJMkosaUJBQWlCQSxjQUFjeFEsTUFBZCxHQUF1QixDQUE1QyxFQUErQztBQUM3QzRPLG9CQUFZNEIsY0FBYyxDQUFkLEVBQWlCRSxLQUFqQixJQUEwQkUsb0JBQXRDO0FBQ0F3RSxxQkFBYSxNQUFLc0ksUUFBTCxDQUFjbE4sY0FBYyxDQUFkLEVBQWlCN0YsU0FBL0IsRUFBMENpRSxTQUExQyxDQUFiO0FBQ0QsT0FIRCxNQUdPLElBQUkvSCxRQUFRQSxLQUFLOEQsU0FBYixJQUEwQjlELEtBQUs2SixLQUFuQyxFQUEwQztBQUMvQzlCLG9CQUFZL0gsS0FBSzZKLEtBQWpCO0FBQ0EwRSxxQkFBYSxNQUFLc0ksUUFBTCxDQUFjN1csS0FBSzhELFNBQW5CLEVBQThCaUUsU0FBOUIsQ0FBYjtBQUNEO0FBQ0QsWUFBSzNILEtBQUwsR0FBYSxFQUFFMkgsb0JBQUYsRUFBYXdHLHNCQUFiLEVBQWI7QUFiaUI7QUFjbEI7O0FBbENBO0FBQUE7QUFBQSwwQ0FvQ21CO0FBQUEscUJBQ2dCLEtBQUtuTyxLQURyQjtBQUFBLFlBQ1YySCxTQURVLFVBQ1ZBLFNBRFU7QUFBQSxZQUNDd0csVUFERCxVQUNDQSxVQUREOztBQUVsQixZQUFJd0Ysa0JBQWtCaE0sU0FBbEIsSUFBK0J3RyxVQUFuQyxFQUErQztBQUM3Q29JLDJCQUFpQnBJLFdBQVd6SyxTQUE1QixFQUF1Q2lFLFNBQXZDO0FBQ0Q7QUFDRjtBQXpDQTtBQUFBO0FBQUEsdURBMkNnQ2xKLFNBM0NoQyxFQTJDMkM7QUFBQSxZQUNsQ21CLElBRGtDLEdBQ2hCbkIsU0FEZ0IsQ0FDbENtQixJQURrQztBQUFBLFlBQzVCb0QsT0FENEIsR0FDaEJ2RSxTQURnQixDQUM1QnVFLE9BRDRCOztBQUUxQyxZQUFJcEQsUUFBUUEsS0FBSzhELFNBQWIsSUFBMEI5RCxLQUFLNkosS0FBbkMsRUFBMEM7QUFDeEMsZUFBS25KLFFBQUwsQ0FBYztBQUNacUgsdUJBQVcvSCxLQUFLNkosS0FESjtBQUVaMEUsd0JBQVluTCxRQUFROUcsSUFBUixDQUFhO0FBQUEscUJBQU9pTCxJQUFJekQsU0FBSixLQUFrQjlELEtBQUs4RCxTQUE5QjtBQUFBLGFBQWI7QUFGQSxXQUFkO0FBSUQ7QUFDRjtBQW5EQTtBQUFBO0FBQUEsK0JBcURRZ0UsU0FyRFIsRUFxRG1CQyxTQXJEbkIsRUFxRDhCO0FBQzdCLFlBQUl3RyxtQkFBSjtBQUQ2QixZQUVyQm5MLE9BRnFCLEdBRVQsS0FBSzVHLEtBRkksQ0FFckI0RyxPQUZxQjs7QUFHN0IsWUFBTTBULGNBQWMxVCxRQUFRcEYsTUFBUixDQUFlO0FBQUEsaUJBQU91SixJQUFJekQsU0FBSixLQUFrQmdFLFNBQXpCO0FBQUEsU0FBZixDQUFwQjtBQUNBLFlBQUlnUCxZQUFZM2QsTUFBWixHQUFxQixDQUF6QixFQUE0QjtBQUMxQm9WLHVCQUFhdUksWUFBWSxDQUFaLENBQWI7O0FBRUEsY0FBSXZJLFdBQVd2RyxNQUFmLEVBQXVCO0FBQ3JCdUcsdUJBQVd2RyxNQUFYLENBQWtCRixTQUFsQixFQUE2QkMsU0FBN0I7QUFDRDtBQUNGO0FBQ0QsZUFBT3dHLFVBQVA7QUFDRDtBQWpFQTtBQUFBO0FBQUEsK0JBbUZRO0FBQUEsWUFDRGxTLElBREMsR0FDUSxLQUFLRyxLQURiLENBQ0RILElBREM7QUFBQSxZQUVDMkQsSUFGRCxHQUVVLEtBQUt4RCxLQUZmLENBRUN3RCxJQUZEO0FBQUEsc0JBRzJCLEtBQUtJLEtBSGhDO0FBQUEsWUFHQzJILFNBSEQsV0FHQ0EsU0FIRDtBQUFBLFlBR1l3RyxVQUhaLFdBR1lBLFVBSFo7O0FBSVAsWUFBSSxDQUFDd0YsY0FBRCxJQUFtQnhGLFVBQXZCLEVBQW1DO0FBQ2pDLGNBQU16RSxXQUFXeUUsV0FBV3pFLFFBQVgsR0FBc0J5RSxXQUFXekUsUUFBakMsR0FBNkM5SixRQUFRQSxLQUFLOEosUUFBM0U7QUFDQXpOLGlCQUFPcWEsYUFBYTFXLElBQWIsQ0FBa0IzRCxJQUFsQixFQUF3QjBMLFNBQXhCLGVBQXdDd0csVUFBeEMsSUFBb0R6RSxrQkFBcEQsSUFBUDtBQUNEOztBQUVELGVBQ0U7QUFBQyxxQkFBRCxDQUFhLFFBQWI7QUFBQTtBQUNFLG1CQUFRO0FBQ056Tix3QkFETTtBQUVOMEwsa0NBRk07QUFHTkMsc0JBQVEsS0FBSytPLFVBSFA7QUFJTmpQLHlCQUFXeUcsYUFBYUEsV0FBV3pLLFNBQXhCLEdBQW9DO0FBSnpDO0FBRFY7QUFRSSxlQUFLdEgsS0FBTCxDQUFXMkM7QUFSZixTQURGO0FBWUQ7QUF4R0E7O0FBQUE7QUFBQSxJQUd3QixnQkFBTUMsU0FIOUI7O0FBR0d3WCxjQUhILENBSU12WCxTQUpOLEdBSWtCO0FBQ2pCaEQsVUFBTSxvQkFBVW1ELEtBQVYsQ0FBZ0JELFVBREw7QUFFakI2RCxhQUFTLG9CQUFVNUQsS0FBVixDQUFnQkQsVUFGUjtBQUdqQkosY0FBVSxvQkFBVUcsSUFBVixDQUFlQyxVQUhSO0FBSWpCb0ssbUJBQWUsb0JBQVVDLE9BQVYsQ0FBa0Isb0JBQVVmLEtBQVYsQ0FBZ0I7QUFDL0MvRSxpQkFBVyxvQkFBVXJFLE1BQVYsQ0FBaUJGLFVBRG1CO0FBRS9Dc0ssYUFBTyxvQkFBVWYsS0FBVixDQUFnQixDQUFDLGdCQUFNak8sU0FBUCxFQUFrQixnQkFBTUQsUUFBeEIsQ0FBaEIsRUFBbUQyRTtBQUZYLEtBQWhCLENBQWxCLENBSkU7QUFRakJTLFVBQU0sb0JBQVU2SSxLQUFWLENBQWdCO0FBQ3BCL0UsaUJBQVcsb0JBQVVyRSxNQUREO0FBRXBCb0ssYUFBTyxvQkFBVWYsS0FBVixDQUFnQixDQUFDLGdCQUFNak8sU0FBUCxFQUFrQixnQkFBTUQsUUFBeEIsQ0FBaEIsQ0FGYTtBQUdwQmtQLGdCQUFVLG9CQUFVM1A7QUFIQSxLQUFoQixDQVJXO0FBYWpCNFAsMEJBQXNCLG9CQUFVakIsS0FBVixDQUFnQixDQUFDLGdCQUFNak8sU0FBUCxFQUFrQixnQkFBTUQsUUFBeEIsQ0FBaEI7QUFiTCxHQUpsQjs7QUFBQTtBQUFBOztBQUFBLFNBbUVEbWMsVUFuRUMsR0FtRVksVUFBQ25hLE1BQUQsRUFBWTtBQUN2QixVQUFNbUwsWUFBWTJPLGFBQWFySSxTQUFiLENBQXVCelIsTUFBdkIsRUFBK0IsT0FBS3dELEtBQXBDLEVBQTJDLE9BQUs1RCxLQUFMLENBQVd1TixvQkFBdEQsQ0FBbEI7O0FBRUEsVUFBSW5OLE9BQU9vTCxNQUFYLEVBQW1CO0FBQ2pCcEwsZUFBT29MLE1BQVAsQ0FBY3BMLE9BQU9rSCxTQUFyQixFQUFnQ2lFLFNBQWhDO0FBQ0Q7O0FBRUQsVUFBSWdNLGNBQUosRUFBb0I7QUFDbEI0Qyx5QkFBaUIvWixPQUFPa0gsU0FBeEIsRUFBbUNpRSxTQUFuQztBQUNEO0FBQ0QsYUFBS3JILFFBQUwsQ0FBYztBQUFBLGVBQU87QUFDbkJxSCw4QkFEbUI7QUFFbkJ3RyxzQkFBWTNSO0FBRk8sU0FBUDtBQUFBLE9BQWQ7QUFJRCxLQWpGQTtBQUFBOztBQTBHSCxTQUFPO0FBQ0w4QyxjQUFVa1gsWUFETDtBQUVMalgsY0FBVW1VLFlBQVluVTtBQUZqQixHQUFQO0FBSUQsQzs7Ozs7Ozs7Ozs7Ozs7O0FDeEhEOzs7O0FBQ0E7Ozs7Ozs7Ozs7OztrQkFFZTtBQUFBO0FBQUE7O0FBRVgsNEJBQVluRCxLQUFaLEVBQW1CO0FBQUE7O0FBQUEsa0lBQ1hBLEtBRFc7O0FBQUEsWUFPbkJ3YSxjQVBtQixHQU9GLFlBQWdCO0FBQUEsWUFBZjVXLEtBQWUsdUVBQVAsRUFBTzs7QUFDL0IsWUFBSTJILGtCQUFKO0FBQ0EsWUFBSUQsa0JBQUo7QUFDQSxZQUFJbVAsYUFBSjtBQUNBLFlBQUlDLG9CQUFKO0FBQ0EsWUFBSWhOLG1CQUFKO0FBQ0EsWUFBSWlOLFVBQVUsRUFBZDs7QUFFQSxZQUFJLE1BQUt4QixXQUFULEVBQXNCO0FBQ3BCNU4sc0JBQVksTUFBSzROLFdBQUwsQ0FBaUJ2VixLQUFqQixDQUF1QjJILFNBQW5DO0FBQ0FELHNCQUFZLE1BQUs2TixXQUFMLENBQWlCdlYsS0FBakIsQ0FBdUJtTyxVQUF2QixHQUNWLE1BQUtvSCxXQUFMLENBQWlCdlYsS0FBakIsQ0FBdUJtTyxVQUF2QixDQUFrQ3pLLFNBRHhCLEdBRVYsSUFGRjtBQUdEOztBQUVELFlBQUksTUFBSzhQLGFBQVQsRUFBd0I7QUFDdEJ1RCxvQkFBVSxNQUFLdkQsYUFBTCxDQUFtQnpMLFdBQTdCO0FBQ0Q7O0FBRUQsWUFBSSxNQUFLdU4saUJBQVQsRUFBNEI7QUFDMUJ1QixpQkFBTyxNQUFLdkIsaUJBQUwsQ0FBdUIwQixRQUE5QjtBQUNBRix3QkFBYyxNQUFLeEIsaUJBQUwsQ0FBdUIyQixlQUFyQztBQUNEOztBQUVELFlBQUksTUFBS2xOLGFBQVQsRUFBd0I7QUFDdEJELHVCQUFhLE1BQUsxTixLQUFMLENBQVd5TixNQUFYLENBQWtCQyxVQUEvQjtBQUNEOztBQUVEO0FBQ0VuQyw4QkFERjtBQUVFRCw4QkFGRjtBQUdFcVAsMEJBSEY7QUFJRUYsb0JBSkY7QUFLRUMsa0NBTEY7QUFNRWhOO0FBTkYsV0FPSzlKLEtBUEw7QUFRRS9ELGdCQUFNLE1BQUtHLEtBQUwsQ0FBV0g7QUFSbkI7QUFVRCxPQTdDa0I7O0FBQUEsWUErQ25CcVksY0EvQ21CLEdBK0NGLFlBQU07QUFBQSxZQUNiL0wsTUFEYSxHQUNGLE1BQUtuTSxLQURILENBQ2JtTSxNQURhOztBQUVyQixlQUFPQSxXQUFXLElBQVgsSUFBb0IsZ0JBQUVyUCxRQUFGLENBQVdxUCxNQUFYLEtBQXNCQSxPQUFPc0IsTUFBakQsSUFBNEQsTUFBSzZLLGtCQUFMLEVBQW5FO0FBQ0QsT0FsRGtCOztBQUFBLFlBb0RuQkEsa0JBcERtQixHQW9ERSxZQUFZO0FBQUEsWUFBWGxjLENBQVcsdUVBQVAsRUFBTztBQUFBLFlBQ3ZCK1AsTUFEdUIsR0FDWixNQUFLbk0sS0FETyxDQUN2Qm1NLE1BRHVCOztBQUUvQi9QLFVBQUVKLE1BQUYsR0FBWW1RLFdBQVcsSUFBWCxJQUFvQixnQkFBRXJQLFFBQUYsQ0FBV3FQLE1BQVgsS0FBc0JBLE9BQU8zQyxVQUE3RDtBQUNBLGVBQU9wTixFQUFFSixNQUFUO0FBQ0QsT0F4RGtCOztBQUFBLFlBMERuQjhiLGlCQTFEbUIsR0EwREMsWUFBTTtBQUFBLFlBQ2hCM0wsTUFEZ0IsR0FDTCxNQUFLbk0sS0FEQSxDQUNoQm1NLE1BRGdCOztBQUV4QixlQUFPQSxXQUFXLElBQVgsSUFBb0IsZ0JBQUVyUCxRQUFGLENBQVdxUCxNQUFYLEtBQXNCQSxPQUFPM0ssTUFBakQsSUFBNEQsTUFBSzhXLGtCQUFMLEVBQW5FO0FBQ0QsT0E3RGtCOztBQUFBLFlBK0RuQmYsWUEvRG1CLEdBK0RKLFlBQU07QUFBQSxZQUNYcEwsTUFEVyxHQUNBLE1BQUtuTSxLQURMLENBQ1htTSxNQURXOztBQUVuQixlQUFPQSxXQUFXLElBQVgsSUFBb0IsZ0JBQUVyUCxRQUFGLENBQVdxUCxNQUFYLEtBQXNCQSxPQUFPM0ksSUFBakQsSUFBMEQsTUFBSzhVLGtCQUFMLEVBQWpFO0FBQ0QsT0FsRWtCOztBQUFBLFlBb0VuQlgsZ0JBcEVtQixHQW9FQSxZQUFNO0FBQUEsWUFDZnhMLE1BRGUsR0FDSixNQUFLbk0sS0FERCxDQUNmbU0sTUFEZTs7QUFFdkIsZUFBT0EsV0FBVyxJQUFYLElBQW9CLGdCQUFFclAsUUFBRixDQUFXcVAsTUFBWCxLQUFzQkEsT0FBTzFCLFFBQXhEO0FBQ0QsT0F2RWtCOztBQUFBLFlBeUVuQjhOLHNCQXpFbUIsR0F5RU0sVUFBQ2tDLElBQUQsRUFBT0MsV0FBUCxFQUF1QjtBQUM5QyxjQUFLMWEsS0FBTCxDQUFXd04sYUFBWCxDQUF5QixZQUF6QixFQUF1QyxNQUFLZ04sY0FBTCxDQUFvQixFQUFFQyxVQUFGLEVBQVFDLHdCQUFSLEVBQXBCLENBQXZDO0FBQ0QsT0EzRWtCOztBQUFBLFlBNkVuQjNDLHdCQTdFbUIsR0E2RVEsVUFBQzRDLE9BQUQsRUFBYTtBQUN0QyxZQUFNRyxXQUFXLEVBQUVILGdCQUFGLEVBQWpCO0FBQ0EsWUFBSSxNQUFLckMsa0JBQUwsRUFBSixFQUErQjtBQUM3QixjQUFNdkYsVUFBVSxNQUFLL1MsS0FBTCxDQUFXd0osVUFBWCxDQUFzQnVKLE9BQXRCLElBQWlDLEVBQWpEO0FBQ0ErSCxtQkFBU0wsSUFBVCxHQUFnQixnQkFBRXBkLFNBQUYsQ0FBWTBWLFFBQVFnSSxjQUFwQixJQUFzQ2hJLFFBQVFnSSxjQUE5QyxHQUErRCxDQUEvRTtBQUNEO0FBQ0QsY0FBSy9hLEtBQUwsQ0FBV3dOLGFBQVgsQ0FBeUIsUUFBekIsRUFBbUMsTUFBS2dOLGNBQUwsQ0FBb0JNLFFBQXBCLENBQW5DO0FBQ0QsT0FwRmtCOztBQUFBLFlBc0ZuQnRELHNCQXRGbUIsR0FzRk0sVUFBQ2xNLFNBQUQsRUFBWUMsU0FBWixFQUEwQjtBQUNqRCxjQUFLdkwsS0FBTCxDQUFXd04sYUFBWCxDQUF5QixNQUF6QixFQUFpQyxNQUFLZ04sY0FBTCxDQUFvQixFQUFFbFAsb0JBQUYsRUFBYUMsb0JBQWIsRUFBcEIsQ0FBakM7QUFDRCxPQXhGa0I7O0FBQUEsWUEwRm5CcU0sc0JBMUZtQixHQTBGTSxVQUFDOVMsS0FBRCxFQUFRd0MsU0FBUixFQUFtQmdLLFFBQW5CLEVBQWdDO0FBQ3ZELFlBQU03RyxXQUFXLEVBQUUzRixZQUFGLEVBQVN3QyxvQkFBVCxFQUFvQmdLLGtCQUFwQixFQUFqQjtBQUNBLGNBQUt0UixLQUFMLENBQVd3TixhQUFYLENBQXlCLFVBQXpCLEVBQXFDLE1BQUtnTixjQUFMLENBQW9CLEVBQUUvUCxrQkFBRixFQUFwQixDQUFyQztBQUNELE9BN0ZrQjs7QUFBQSxZQStGbkIwTix3QkEvRm1CLEdBK0ZRLFVBQUN6SyxVQUFELEVBQWdCO0FBQ3pDLGNBQUsxTixLQUFMLENBQVd3TixhQUFYLENBQXlCLFFBQXpCLEVBQW1DLE1BQUtnTixjQUFMLENBQW9CLEVBQUU5TSxzQkFBRixFQUFwQixDQUFuQztBQUNELE9BakdrQjs7QUFFakIsWUFBSzJLLGFBQUwsR0FBcUIsc0JBQXJCO0FBQ0EsWUFBS0EsYUFBTCxDQUFtQnZCLEVBQW5CLENBQXNCLGtCQUF0QixFQUEwQyxNQUFLeUIsc0JBQS9DO0FBQ0EsWUFBS0YsYUFBTCxDQUFtQnZCLEVBQW5CLENBQXNCLG9CQUF0QixFQUE0QyxNQUFLd0Isa0JBQWpEO0FBSmlCO0FBS2xCOztBQVBVO0FBQUEsSUFDZ0IzWCxVQURoQjtBQUFBLEMiLCJmaWxlIjoicmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9kaXN0L3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZXh0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwicmVhY3RcIiksIHJlcXVpcmUoXCJyZWFjdC1kb21cIikpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW1wicmVhY3RcIiwgXCJyZWFjdC1kb21cIl0sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wiUmVhY3RCb290c3RyYXBUYWJsZTJcIl0gPSBmYWN0b3J5KHJlcXVpcmUoXCJyZWFjdFwiKSwgcmVxdWlyZShcInJlYWN0LWRvbVwiKSk7XG5cdGVsc2Vcblx0XHRyb290W1wiUmVhY3RCb290c3RyYXBUYWJsZTJcIl0gPSBmYWN0b3J5KHJvb3RbXCJSZWFjdFwiXSwgcm9vdFtcIlJlYWN0RE9NXCJdKTtcbn0pKHRoaXMsIGZ1bmN0aW9uKF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfMF9fLCBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFXzIwX18pIHtcbnJldHVybiBcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XG4gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbiBcdFx0XHRcdGdldDogZ2V0dGVyXG4gXHRcdFx0fSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMjYpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2svYm9vdHN0cmFwIGIyZDUxMTk0ZjliMDQ5NmJiNDg2IiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFXzBfXztcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyBleHRlcm5hbCB7XCJyb290XCI6XCJSZWFjdFwiLFwiY29tbW9uanMyXCI6XCJyZWFjdFwiLFwiY29tbW9uanNcIjpcInJlYWN0XCIsXCJhbWRcIjpcInJlYWN0XCJ9XG4vLyBtb2R1bGUgaWQgPSAwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgUmVhY3RJcyA9IHJlcXVpcmUoJ3JlYWN0LWlzJyk7XG5cbiAgLy8gQnkgZXhwbGljaXRseSB1c2luZyBgcHJvcC10eXBlc2AgeW91IGFyZSBvcHRpbmcgaW50byBuZXcgZGV2ZWxvcG1lbnQgYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgdmFyIHRocm93T25EaXJlY3RBY2Nlc3MgPSB0cnVlO1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMnKShSZWFjdElzLmlzRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcyk7XG59IGVsc2Uge1xuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBwcm9kdWN0aW9uIGJlaGF2aW9yLlxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMnKSgpO1xufVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSAxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIiwiLyogZXNsaW50IG5vLWVtcHR5OiAwICovXG4vKiBlc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246IDAgKi9cbi8qIGVzbGludCBwcmVmZXItcmVzdC1wYXJhbXM6IDAgKi9cbmltcG9ydCBfIGZyb20gJ3VuZGVyc2NvcmUnO1xuXG5mdW5jdGlvbiBzcGxpdE5lc3RlZChzdHIpIHtcbiAgcmV0dXJuIFtzdHJdXG4gICAgLmpvaW4oJy4nKVxuICAgIC5yZXBsYWNlKC9cXFsvZywgJy4nKVxuICAgIC5yZXBsYWNlKC9cXF0vZywgJycpXG4gICAgLnNwbGl0KCcuJyk7XG59XG5cbmZ1bmN0aW9uIGNvbnRhaW5zKGxpc3QsIHZhbHVlKSB7XG4gIGlmIChfLmluY2x1ZGVzKSB7XG4gICAgcmV0dXJuIF8uaW5jbHVkZXMobGlzdCwgdmFsdWUpO1xuICB9XG5cbiAgcmV0dXJuIGxpc3QuaW5kZXhPZih2YWx1ZSkgPiAtMTtcbn1cblxuZnVuY3Rpb24gZ2V0KHRhcmdldCwgZmllbGQpIHtcbiAgY29uc3QgZGlyZWN0R2V0ID0gdGFyZ2V0W2ZpZWxkXTtcbiAgaWYgKGRpcmVjdEdldCAhPT0gdW5kZWZpbmVkICYmIGRpcmVjdEdldCAhPT0gbnVsbCkge1xuICAgIHJldHVybiBkaXJlY3RHZXQ7XG4gIH1cblxuICBjb25zdCBwYXRoQXJyYXkgPSBzcGxpdE5lc3RlZChmaWVsZCk7XG4gIGxldCByZXN1bHQ7XG4gIHRyeSB7XG4gICAgcmVzdWx0ID0gcGF0aEFycmF5LnJlZHVjZSgoY3VyciwgcGF0aCkgPT4gY3VycltwYXRoXSwgdGFyZ2V0KTtcbiAgfSBjYXRjaCAoZSkge31cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gc2V0KHRhcmdldCwgZmllbGQsIHZhbHVlLCBzYWZlID0gZmFsc2UpIHtcbiAgY29uc3QgcGF0aEFycmF5ID0gc3BsaXROZXN0ZWQoZmllbGQpO1xuICBsZXQgbGV2ZWwgPSAwO1xuICBwYXRoQXJyYXkucmVkdWNlKChhLCBiKSA9PiB7XG4gICAgbGV2ZWwgKz0gMTtcbiAgICBpZiAodHlwZW9mIGFbYl0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAoIXNhZmUpIHRocm93IG5ldyBFcnJvcihgJHthfS4ke2J9IGlzIHVuZGVmaW5lZGApO1xuICAgICAgYVtiXSA9IHt9O1xuICAgICAgcmV0dXJuIGFbYl07XG4gICAgfVxuXG4gICAgaWYgKGxldmVsID09PSBwYXRoQXJyYXkubGVuZ3RoKSB7XG4gICAgICBhW2JdID0gdmFsdWU7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBhW2JdO1xuICB9LCB0YXJnZXQpO1xufVxuXG5mdW5jdGlvbiBpc0VtcHR5T2JqZWN0KG9iaikge1xuICBpZiAoIV8uaXNPYmplY3Qob2JqKSkgcmV0dXJuIGZhbHNlO1xuXG4gIGNvbnN0IGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXlzW2ldKSkgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGlzRGVmaW5lZCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJyAmJiB2YWx1ZSAhPT0gbnVsbDtcbn1cblxuZnVuY3Rpb24gc2xlZXAoZm4sIG1zKSB7XG4gIHJldHVybiBzZXRUaW1lb3V0KCgpID0+IGZuKCksIG1zKTtcbn1cblxuZnVuY3Rpb24gZGVib3VuY2UoZnVuYywgd2FpdCwgaW1tZWRpYXRlKSB7XG4gIGxldCB0aW1lb3V0O1xuXG4gIHJldHVybiAoKSA9PiB7XG4gICAgY29uc3QgbGF0ZXIgPSAoKSA9PiB7XG4gICAgICB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaWYgKCFpbW1lZGlhdGUpIHtcbiAgICAgICAgZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBjYWxsTm93ID0gaW1tZWRpYXRlICYmICF0aW1lb3V0O1xuXG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0IHx8IDApO1xuXG4gICAgaWYgKGNhbGxOb3cpIHtcbiAgICAgIGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IE9iamVjdC5hc3NpZ24oXywge1xuICBnZXQsXG4gIHNldCxcbiAgaXNEZWZpbmVkLFxuICBpc0VtcHR5T2JqZWN0LFxuICBzbGVlcCxcbiAgZGVib3VuY2UsXG4gIGNvbnRhaW5zXG59KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL3V0aWxzLmpzIiwiZXhwb3J0IGRlZmF1bHQge1xuICBTT1JUX0FTQzogJ2FzYycsXG4gIFNPUlRfREVTQzogJ2Rlc2MnLFxuICBST1dfU0VMRUNUX1NJTkdMRTogJ3JhZGlvJyxcbiAgUk9XX1NFTEVDVF9NVUxUSVBMRTogJ2NoZWNrYm94JyxcbiAgUk9XX1NFTEVDVF9ESVNBQkxFRDogJ1JPV19TRUxFQ1RfRElTQUJMRUQnLFxuICBDSEVDS0JPWF9TVEFUVVNfQ0hFQ0tFRDogJ2NoZWNrZWQnLFxuICBDSEVDS0JPWF9TVEFUVVNfSU5ERVRFUk1JTkFURTogJ2luZGV0ZXJtaW5hdGUnLFxuICBDSEVDS0JPWF9TVEFUVVNfVU5DSEVDS0VEOiAndW5jaGVja2VkJyxcbiAgSU5ESUNBVE9SX1BPU0lUSU9OX0xFRlQ6ICdsZWZ0JyxcbiAgSU5ESUNBVE9SX1BPU0lUSU9OX1JJR0hUOiAncmlnaHQnLFxuICBUWVBFX1NUUklORzogJ3N0cmluZycsXG4gIFRZUEVfTlVNQkVSOiAnbnVtYmVyJyxcbiAgVFlQRV9CT09MRUFOOiAnYm9vbCcsXG4gIFRZUEVfREFURTogJ2RhdGUnLFxuICBGSUxURVJTX1BPU0lUSU9OX0lOTElORTogJ2lubGluZScsXG4gIEZJTFRFUlNfUE9TSVRJT05fVE9QOiAndG9wJyxcbiAgRklMVEVSU19QT1NJVElPTl9CT1RUT006ICdib3R0b20nXG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9zcmMvY29uc3QuanMiLCIvKiFcbiAgQ29weXJpZ2h0IChjKSAyMDE2IEplZCBXYXRzb24uXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAoTUlUKSwgc2VlXG4gIGh0dHA6Ly9qZWR3YXRzb24uZ2l0aHViLmlvL2NsYXNzbmFtZXNcbiovXG4vKiBnbG9iYWwgZGVmaW5lICovXG5cbihmdW5jdGlvbiAoKSB7XG5cdCd1c2Ugc3RyaWN0JztcblxuXHR2YXIgaGFzT3duID0ge30uaGFzT3duUHJvcGVydHk7XG5cblx0ZnVuY3Rpb24gY2xhc3NOYW1lcyAoKSB7XG5cdFx0dmFyIGNsYXNzZXMgPSBbXTtcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgYXJnID0gYXJndW1lbnRzW2ldO1xuXHRcdFx0aWYgKCFhcmcpIGNvbnRpbnVlO1xuXG5cdFx0XHR2YXIgYXJnVHlwZSA9IHR5cGVvZiBhcmc7XG5cblx0XHRcdGlmIChhcmdUeXBlID09PSAnc3RyaW5nJyB8fCBhcmdUeXBlID09PSAnbnVtYmVyJykge1xuXHRcdFx0XHRjbGFzc2VzLnB1c2goYXJnKTtcblx0XHRcdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG5cdFx0XHRcdGNsYXNzZXMucHVzaChjbGFzc05hbWVzLmFwcGx5KG51bGwsIGFyZykpO1xuXHRcdFx0fSBlbHNlIGlmIChhcmdUeXBlID09PSAnb2JqZWN0Jykge1xuXHRcdFx0XHRmb3IgKHZhciBrZXkgaW4gYXJnKSB7XG5cdFx0XHRcdFx0aWYgKGhhc093bi5jYWxsKGFyZywga2V5KSAmJiBhcmdba2V5XSkge1xuXHRcdFx0XHRcdFx0Y2xhc3Nlcy5wdXNoKGtleSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNsYXNzZXMuam9pbignICcpO1xuXHR9XG5cblx0aWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBjbGFzc05hbWVzO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGRlZmluZS5hbWQgPT09ICdvYmplY3QnICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyByZWdpc3RlciBhcyAnY2xhc3NuYW1lcycsIGNvbnNpc3RlbnQgd2l0aCBucG0gcGFja2FnZSBuYW1lXG5cdFx0ZGVmaW5lKCdjbGFzc25hbWVzJywgW10sIGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiBjbGFzc05hbWVzO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHdpbmRvdy5jbGFzc05hbWVzID0gY2xhc3NOYW1lcztcblx0fVxufSgpKTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9pbmRleC5qc1xuLy8gbW9kdWxlIGlkID0gNFxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCBjb25zdCBCb290c3RyYXBDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dCh7XG4gIGJvb3RzdHJhcDQ6IGZhbHNlXG59KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL2NvbnRleHRzL2Jvb3RzdHJhcC5qcyIsImltcG9ydCBfIGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IG1hdGNoUm93ID0gKGtleUZpZWxkLCBpZCkgPT4gcm93ID0+IF8uZ2V0KHJvdywga2V5RmllbGQpID09PSBpZDtcblxuZXhwb3J0IGNvbnN0IGdldFJvd0J5Um93SWQgPSAoZGF0YSwga2V5RmllbGQsIGlkKSA9PiBkYXRhLmZpbmQobWF0Y2hSb3coa2V5RmllbGQsIGlkKSk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9zdG9yZS9yb3dzLmpzIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkge1xuICBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTtcbiAgdmFyIHRhcmdldCA9IHt9O1xuICB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG4gIHZhciBrZXksIGk7XG5cbiAgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBrZXkgPSBzb3VyY2VLZXlzW2ldO1xuICAgIGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7XG4gICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlLmpzXG4vLyBtb2R1bGUgaWQgPSA3XG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2luaGVyaXRzTG9vc2Uoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzLnByb3RvdHlwZSk7XG4gIHN1YkNsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IHN1YkNsYXNzO1xuICBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzO1xufVxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZS5qc1xuLy8gbW9kdWxlIGlkID0gOFxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSIsImltcG9ydCBfIGZyb20gJy4vdXRpbHMnO1xuXG5jb25zdCBldmVudHMgPSBbXG4gICdvbkNsaWNrJyxcbiAgJ29uRG91YmxlQ2xpY2snLFxuICAnb25Nb3VzZUVudGVyJyxcbiAgJ29uTW91c2VMZWF2ZScsXG4gICdvbkNvbnRleHRNZW51JyxcbiAgJ29uQXV4Q2xpY2snXG5dO1xuXG5leHBvcnQgZGVmYXVsdCBFeHRlbmRCYXNlID0+XG4gIGNsYXNzIENlbGxFdmVudERlbGVnYXRlciBleHRlbmRzIEV4dGVuZEJhc2Uge1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICBzdXBlcihwcm9wcyk7XG4gICAgICB0aGlzLmNyZWF0ZURlZmF1bHRFdmVudEhhbmRsZXIgPSB0aGlzLmNyZWF0ZURlZmF1bHRFdmVudEhhbmRsZXIuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBjcmVhdGVEZWZhdWx0RXZlbnRIYW5kbGVyKGNiKSB7XG4gICAgICByZXR1cm4gKGUpID0+IHtcbiAgICAgICAgY29uc3QgeyBjb2x1bW4sIGNvbHVtbkluZGV4LCBpbmRleCB9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgY2IoZSwgY29sdW1uLCB0eXBlb2YgY29sdW1uSW5kZXggIT09ICd1bmRlZmluZWQnID8gY29sdW1uSW5kZXggOiBpbmRleCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIGRlbGVnYXRlKGF0dHJzID0ge30pIHtcbiAgICAgIGNvbnN0IG5ld0F0dHJzID0geyAuLi5hdHRycyB9O1xuICAgICAgT2JqZWN0LmtleXMoYXR0cnMpLmZvckVhY2goKGF0dHIpID0+IHtcbiAgICAgICAgaWYgKF8uY29udGFpbnMoZXZlbnRzLCBhdHRyKSkge1xuICAgICAgICAgIG5ld0F0dHJzW2F0dHJdID0gdGhpcy5jcmVhdGVEZWZhdWx0RXZlbnRIYW5kbGVyKGF0dHJzW2F0dHJdKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3QXR0cnM7XG4gICAgfVxuICB9O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9zcmMvY2VsbC1ldmVudC1kZWxlZ2F0ZXIuanMiLCIvKiBlc2xpbnQgY2FtZWxjYXNlOiAwICovXG4vKiBlc2xpbnQgcmVhY3QvcHJvcC10eXBlczogMCAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgQ29uc3QgZnJvbSAnLi4vY29uc3QnO1xuaW1wb3J0IF8gZnJvbSAnLi4vdXRpbHMnO1xuXG5pbXBvcnQgZGF0YU9wZXJhdG9yIGZyb20gJy4uL3N0b3JlL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBnZXRTZWxlY3Rpb25TdW1tYXJ5IH0gZnJvbSAnLi4vc3RvcmUvc2VsZWN0aW9uJztcblxuY29uc3QgU2VsZWN0aW9uQ29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQoKTtcbmNsYXNzIFNlbGVjdGlvblByb3ZpZGVyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcbiAgICBkYXRhOiBQcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZCxcbiAgICBrZXlGaWVsZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkXG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnNlbGVjdGVkID0gcHJvcHMuc2VsZWN0Um93LnNlbGVjdGVkIHx8IFtdO1xuICB9XG5cbiAgLy8gZXhwb3NlZCBBUElcbiAgZ2V0U2VsZWN0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWQ7XG4gIH1cblxuICBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpIHtcbiAgICBpZiAobmV4dFByb3BzLnNlbGVjdFJvdykge1xuICAgICAgdGhpcy5zZWxlY3RlZCA9IG5leHRQcm9wcy5zZWxlY3RSb3cuc2VsZWN0ZWQgfHwgdGhpcy5zZWxlY3RlZDtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVSb3dTZWxlY3QgPSAocm93S2V5LCBjaGVja2VkLCByb3dJbmRleCwgZSkgPT4ge1xuICAgIGNvbnN0IHsgZGF0YSwga2V5RmllbGQsIHNlbGVjdFJvdzogeyBtb2RlLCBvblNlbGVjdCB9IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgUk9XX1NFTEVDVF9TSU5HTEUgfSA9IENvbnN0O1xuXG4gICAgbGV0IGN1cnJTZWxlY3RlZCA9IFsuLi50aGlzLnNlbGVjdGVkXTtcblxuICAgIGxldCByZXN1bHQgPSB0cnVlO1xuICAgIGlmIChvblNlbGVjdCkge1xuICAgICAgY29uc3Qgcm93ID0gZGF0YU9wZXJhdG9yLmdldFJvd0J5Um93SWQoZGF0YSwga2V5RmllbGQsIHJvd0tleSk7XG4gICAgICByZXN1bHQgPSBvblNlbGVjdChyb3csIGNoZWNrZWQsIHJvd0luZGV4LCBlKTtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0ID09PSB0cnVlIHx8IHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAobW9kZSA9PT0gUk9XX1NFTEVDVF9TSU5HTEUpIHsgLy8gd2hlbiBzZWxlY3QgbW9kZSBpcyByYWRpb1xuICAgICAgICBjdXJyU2VsZWN0ZWQgPSBbcm93S2V5XTtcbiAgICAgIH0gZWxzZSBpZiAoY2hlY2tlZCkgeyAvLyB3aGVuIHNlbGVjdCBtb2RlIGlzIGNoZWNrYm94XG4gICAgICAgIGN1cnJTZWxlY3RlZC5wdXNoKHJvd0tleSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjdXJyU2VsZWN0ZWQgPSBjdXJyU2VsZWN0ZWQuZmlsdGVyKHZhbHVlID0+IHZhbHVlICE9PSByb3dLZXkpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnNlbGVjdGVkID0gY3VyclNlbGVjdGVkO1xuICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcbiAgfVxuXG4gIGhhbmRsZUFsbFJvd3NTZWxlY3QgPSAoZSwgaXNVblNlbGVjdCkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGRhdGEsXG4gICAgICBrZXlGaWVsZCxcbiAgICAgIHNlbGVjdFJvdzoge1xuICAgICAgICBvblNlbGVjdEFsbCxcbiAgICAgICAgbm9uU2VsZWN0YWJsZVxuICAgICAgfVxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgc2VsZWN0ZWQgfSA9IHRoaXM7XG5cbiAgICBsZXQgY3VyclNlbGVjdGVkO1xuXG4gICAgaWYgKCFpc1VuU2VsZWN0KSB7XG4gICAgICBjdXJyU2VsZWN0ZWQgPSBzZWxlY3RlZC5jb25jYXQoZGF0YU9wZXJhdG9yLnNlbGVjdGFibGVLZXlzKGRhdGEsIGtleUZpZWxkLCBub25TZWxlY3RhYmxlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJTZWxlY3RlZCA9IHNlbGVjdGVkLmZpbHRlcihzID0+IHR5cGVvZiBkYXRhLmZpbmQoZCA9PiBfLmdldChkLCBrZXlGaWVsZCkgPT09IHMpID09PSAndW5kZWZpbmVkJyk7XG4gICAgfVxuXG4gICAgbGV0IHJlc3VsdDtcbiAgICBpZiAob25TZWxlY3RBbGwpIHtcbiAgICAgIHJlc3VsdCA9IG9uU2VsZWN0QWxsKFxuICAgICAgICAhaXNVblNlbGVjdCxcbiAgICAgICAgZGF0YU9wZXJhdG9yLmdldFNlbGVjdGVkUm93cyhcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIGtleUZpZWxkLFxuICAgICAgICAgIGlzVW5TZWxlY3QgPyBzZWxlY3RlZCA6IGN1cnJTZWxlY3RlZFxuICAgICAgICApLFxuICAgICAgICBlXG4gICAgICApO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0KSkge1xuICAgICAgICBjdXJyU2VsZWN0ZWQgPSByZXN1bHQ7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWQgPSBjdXJyU2VsZWN0ZWQ7XG4gICAgdGhpcy5mb3JjZVVwZGF0ZSgpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGFsbFJvd3NTZWxlY3RlZCxcbiAgICAgIGFsbFJvd3NOb3RTZWxlY3RlZFxuICAgIH0gPSBnZXRTZWxlY3Rpb25TdW1tYXJ5KFxuICAgICAgdGhpcy5wcm9wcy5kYXRhLFxuICAgICAgdGhpcy5wcm9wcy5rZXlGaWVsZCxcbiAgICAgIHRoaXMuc2VsZWN0ZWRcbiAgICApO1xuXG4gICAgbGV0IGNoZWNrZWRTdGF0dXM7XG5cbiAgICAvLyBjaGVja2JveCBzdGF0dXMgZGVwZW5kaW5nIG9uIHNlbGVjdGVkIHJvd3MgY291bnRzXG4gICAgaWYgKGFsbFJvd3NTZWxlY3RlZCkgY2hlY2tlZFN0YXR1cyA9IENvbnN0LkNIRUNLQk9YX1NUQVRVU19DSEVDS0VEO1xuICAgIGVsc2UgaWYgKGFsbFJvd3NOb3RTZWxlY3RlZCkgY2hlY2tlZFN0YXR1cyA9IENvbnN0LkNIRUNLQk9YX1NUQVRVU19VTkNIRUNLRUQ7XG4gICAgZWxzZSBjaGVja2VkU3RhdHVzID0gQ29uc3QuQ0hFQ0tCT1hfU1RBVFVTX0lOREVURVJNSU5BVEU7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFNlbGVjdGlvbkNvbnRleHQuUHJvdmlkZXJcbiAgICAgICAgdmFsdWU9eyB7XG4gICAgICAgICAgLi4udGhpcy5wcm9wcy5zZWxlY3RSb3csXG4gICAgICAgICAgc2VsZWN0ZWQ6IHRoaXMuc2VsZWN0ZWQsXG4gICAgICAgICAgb25Sb3dTZWxlY3Q6IHRoaXMuaGFuZGxlUm93U2VsZWN0LFxuICAgICAgICAgIG9uQWxsUm93c1NlbGVjdDogdGhpcy5oYW5kbGVBbGxSb3dzU2VsZWN0LFxuICAgICAgICAgIGFsbFJvd3NTZWxlY3RlZCxcbiAgICAgICAgICBhbGxSb3dzTm90U2VsZWN0ZWQsXG4gICAgICAgICAgY2hlY2tlZFN0YXR1c1xuICAgICAgICB9IH1cbiAgICAgID5cbiAgICAgICAgeyB0aGlzLnByb3BzLmNoaWxkcmVuIH1cbiAgICAgIDwvU2VsZWN0aW9uQ29udGV4dC5Qcm92aWRlcj5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgUHJvdmlkZXI6IFNlbGVjdGlvblByb3ZpZGVyLFxuICBDb25zdW1lcjogU2VsZWN0aW9uQ29udGV4dC5Db25zdW1lclxufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL2NvbnRleHRzL3NlbGVjdGlvbi1jb250ZXh0LmpzIiwiaW1wb3J0ICogYXMgcm93cyBmcm9tICcuL3Jvd3MnO1xuaW1wb3J0ICogYXMgc2VsZWN0aW9uIGZyb20gJy4vc2VsZWN0aW9uJztcbmltcG9ydCAqIGFzIGV4cGFuZCBmcm9tICcuL2V4cGFuZCc7XG5pbXBvcnQgKiBhcyBtdXRhdGUgZnJvbSAnLi9tdXRhdGUnO1xuaW1wb3J0ICogYXMgc29ydCBmcm9tICcuL3NvcnQnO1xuaW1wb3J0ICogYXMgdHlwZSBmcm9tICcuL3R5cGUnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIC4uLnJvd3MsXG4gIC4uLnNlbGVjdGlvbixcbiAgLi4uZXhwYW5kLFxuICAuLi5tdXRhdGUsXG4gIC4uLnNvcnQsXG4gIC4uLnR5cGVcbn07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9zdG9yZS9vcGVyYXRvcnMuanMiLCIvKiBlc2xpbnQgY2FtZWxjYXNlOiAwICovXG4vKiBlc2xpbnQgcmVhY3QvcHJvcC10eXBlczogMCAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgZGF0YU9wZXJhdG9yIGZyb20gJy4uL3N0b3JlL29wZXJhdG9ycyc7XG5pbXBvcnQgXyBmcm9tICcuLi91dGlscyc7XG5cbmNvbnN0IFJvd0V4cGFuZENvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0KCk7XG5cbmNsYXNzIFJvd0V4cGFuZFByb3ZpZGVyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcbiAgICBkYXRhOiBQcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZCxcbiAgICBrZXlGaWVsZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkXG4gIH07XG5cbiAgc3RhdGUgPSB7IGV4cGFuZGVkOiB0aGlzLnByb3BzLmV4cGFuZFJvdy5leHBhbmRlZCB8fCBbXSxcbiAgICBpc0Nsb3Npbmc6IHRoaXMucHJvcHMuZXhwYW5kUm93LmlzQ2xvc2luZyB8fCBbXSB9O1xuXG4gIG9uQ2xvc2VkID0gKGNsb3NlZFJvdykgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoeyBpc0Nsb3Npbmc6IHRoaXMuc3RhdGUuaXNDbG9zaW5nLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZSAhPT0gY2xvc2VkUm93KSB9KTtcbiAgfTtcblxuICBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpIHtcbiAgICBpZiAobmV4dFByb3BzLmV4cGFuZFJvdykge1xuICAgICAgbGV0IG5leHRFeHBhbmRlZCA9IFsuLi4obmV4dFByb3BzLmV4cGFuZFJvdy5leHBhbmRlZCB8fCB0aGlzLnN0YXRlLmV4cGFuZGVkKV07XG4gICAgICBjb25zdCB7IG5vbkV4cGFuZGFibGUgPSBbXSB9ID0gbmV4dFByb3BzLmV4cGFuZFJvdztcbiAgICAgIG5leHRFeHBhbmRlZCA9IG5leHRFeHBhbmRlZC5maWx0ZXIocm93SWQgPT4gIV8uY29udGFpbnMobm9uRXhwYW5kYWJsZSwgcm93SWQpKTtcbiAgICAgIGNvbnN0IGlzQ2xvc2luZyA9IHRoaXMuc3RhdGUuZXhwYW5kZWQucmVkdWNlKChhY2MsIGN1cikgPT4ge1xuICAgICAgICBpZiAoIV8uY29udGFpbnMobmV4dEV4cGFuZGVkLCBjdXIpKSB7XG4gICAgICAgICAgYWNjLnB1c2goY3VyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSwgW10pO1xuXG4gICAgICB0aGlzLnNldFN0YXRlKCgpID0+ICh7XG4gICAgICAgIGV4cGFuZGVkOiBuZXh0RXhwYW5kZWQsXG4gICAgICAgIGlzQ2xvc2luZ1xuICAgICAgfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFN0YXRlKCgpID0+ICh7XG4gICAgICAgIGV4cGFuZGVkOiB0aGlzLnN0YXRlLmV4cGFuZGVkXG4gICAgICB9KSk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlUm93RXhwYW5kID0gKHJvd0tleSwgZXhwYW5kZWQsIHJvd0luZGV4LCBlKSA9PiB7XG4gICAgY29uc3QgeyBkYXRhLCBrZXlGaWVsZCwgZXhwYW5kUm93OiB7IG9uRXhwYW5kLCBvbmx5T25lRXhwYW5kaW5nLCBub25FeHBhbmRhYmxlIH0gfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKG5vbkV4cGFuZGFibGUgJiYgXy5jb250YWlucyhub25FeHBhbmRhYmxlLCByb3dLZXkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGN1cnJFeHBhbmRlZCA9IFsuLi50aGlzLnN0YXRlLmV4cGFuZGVkXTtcbiAgICBsZXQgaXNDbG9zaW5nID0gWy4uLnRoaXMuc3RhdGUuaXNDbG9zaW5nXTtcblxuICAgIGlmIChleHBhbmRlZCkge1xuICAgICAgaWYgKG9ubHlPbmVFeHBhbmRpbmcpIHtcbiAgICAgICAgaXNDbG9zaW5nID0gaXNDbG9zaW5nLmNvbmNhdChjdXJyRXhwYW5kZWQpO1xuICAgICAgICBjdXJyRXhwYW5kZWQgPSBbcm93S2V5XTtcbiAgICAgIH0gZWxzZSBjdXJyRXhwYW5kZWQucHVzaChyb3dLZXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpc0Nsb3NpbmcucHVzaChyb3dLZXkpO1xuICAgICAgY3VyckV4cGFuZGVkID0gY3VyckV4cGFuZGVkLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZSAhPT0gcm93S2V5KTtcbiAgICB9XG5cbiAgICBpZiAob25FeHBhbmQpIHtcbiAgICAgIGNvbnN0IHJvdyA9IGRhdGFPcGVyYXRvci5nZXRSb3dCeVJvd0lkKGRhdGEsIGtleUZpZWxkLCByb3dLZXkpO1xuICAgICAgb25FeHBhbmQocm93LCBleHBhbmRlZCwgcm93SW5kZXgsIGUpO1xuICAgIH1cbiAgICB0aGlzLnNldFN0YXRlKCgpID0+ICh7IGV4cGFuZGVkOiBjdXJyRXhwYW5kZWQsIGlzQ2xvc2luZyB9KSk7XG4gIH07XG5cbiAgaGFuZGxlQWxsUm93RXhwYW5kID0gKGUsIGV4cGFuZEFsbCkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGRhdGEsXG4gICAgICBrZXlGaWVsZCxcbiAgICAgIGV4cGFuZFJvdzoge1xuICAgICAgICBvbkV4cGFuZEFsbCxcbiAgICAgICAgbm9uRXhwYW5kYWJsZVxuICAgICAgfVxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgZXhwYW5kZWQgfSA9IHRoaXMuc3RhdGU7XG5cbiAgICBsZXQgY3VyckV4cGFuZGVkO1xuXG4gICAgaWYgKGV4cGFuZEFsbCkge1xuICAgICAgY3VyckV4cGFuZGVkID0gZXhwYW5kZWQuY29uY2F0KGRhdGFPcGVyYXRvci5leHBhbmRhYmxlS2V5cyhkYXRhLCBrZXlGaWVsZCwgbm9uRXhwYW5kYWJsZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyRXhwYW5kZWQgPSBleHBhbmRlZC5maWx0ZXIocyA9PiB0eXBlb2YgZGF0YS5maW5kKGQgPT4gXy5nZXQoZCwga2V5RmllbGQpID09PSBzKSA9PT0gJ3VuZGVmaW5lZCcpO1xuICAgIH1cblxuICAgIGlmIChvbkV4cGFuZEFsbCkge1xuICAgICAgb25FeHBhbmRBbGwoZXhwYW5kQWxsLCBkYXRhT3BlcmF0b3IuZ2V0RXhwYW5kZWRSb3dzKGRhdGEsIGtleUZpZWxkLCBjdXJyRXhwYW5kZWQpLCBlKTtcbiAgICB9XG5cbiAgICB0aGlzLnNldFN0YXRlKCgpID0+ICh7IGV4cGFuZGVkOiBjdXJyRXhwYW5kZWQgfSkpO1xuICB9O1xuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IGRhdGEsIGtleUZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgIHJldHVybiAoXG4gICAgICA8Um93RXhwYW5kQ29udGV4dC5Qcm92aWRlclxuICAgICAgICB2YWx1ZT17IHtcbiAgICAgICAgICAuLi50aGlzLnByb3BzLmV4cGFuZFJvdyxcbiAgICAgICAgICBub25FeHBhbmRhYmxlOiB0aGlzLnByb3BzLmV4cGFuZFJvdy5ub25FeHBhbmRhYmxlLFxuICAgICAgICAgIGV4cGFuZGVkOiB0aGlzLnN0YXRlLmV4cGFuZGVkLFxuICAgICAgICAgIGlzQ2xvc2luZzogdGhpcy5zdGF0ZS5pc0Nsb3NpbmcsXG4gICAgICAgICAgb25DbG9zZWQ6IHRoaXMub25DbG9zZWQsXG4gICAgICAgICAgaXNBbnlFeHBhbmRzOiBkYXRhT3BlcmF0b3IuaXNBbnlFeHBhbmRzKGRhdGEsIGtleUZpZWxkLCB0aGlzLnN0YXRlLmV4cGFuZGVkKSxcbiAgICAgICAgICBvblJvd0V4cGFuZDogdGhpcy5oYW5kbGVSb3dFeHBhbmQsXG4gICAgICAgICAgb25BbGxSb3dFeHBhbmQ6IHRoaXMuaGFuZGxlQWxsUm93RXhwYW5kXG4gICAgICAgIH0gfVxuICAgICAgPlxuICAgICAgICB7IHRoaXMucHJvcHMuY2hpbGRyZW4gfVxuICAgICAgPC9Sb3dFeHBhbmRDb250ZXh0LlByb3ZpZGVyPlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBQcm92aWRlcjogUm93RXhwYW5kUHJvdmlkZXIsXG4gIENvbnN1bWVyOiBSb3dFeHBhbmRDb250ZXh0LkNvbnN1bWVyXG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9zcmMvY29udGV4dHMvcm93LWV4cGFuZC1jb250ZXh0LmpzIiwiaW1wb3J0IF8gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgZ2V0Um93QnlSb3dJZCB9IGZyb20gJy4vcm93cyc7XG5cbmV4cG9ydCBjb25zdCBnZXRTZWxlY3Rpb25TdW1tYXJ5ID0gKFxuICBkYXRhID0gW10sXG4gIGtleUZpZWxkLFxuICBzZWxlY3RlZCA9IFtdXG4pID0+IHtcbiAgbGV0IGFsbFJvd3NTZWxlY3RlZCA9IGRhdGEubGVuZ3RoID4gMDtcbiAgbGV0IGFsbFJvd3NOb3RTZWxlY3RlZCA9IHRydWU7XG5cbiAgY29uc3Qgcm93S2V5cyA9IGRhdGEubWFwKGQgPT4gXy5nZXQoZCwga2V5RmllbGQpKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dLZXlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgY29uc3QgY3VyciA9IHJvd0tleXNbaV07XG4gICAgaWYgKHR5cGVvZiBzZWxlY3RlZC5maW5kKHggPT4geCA9PT0gY3VycikgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBhbGxSb3dzU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgYWxsUm93c05vdFNlbGVjdGVkID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgYWxsUm93c1NlbGVjdGVkLFxuICAgIGFsbFJvd3NOb3RTZWxlY3RlZFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IHNlbGVjdGFibGVLZXlzID0gKGRhdGEgPSBbXSwga2V5RmllbGQsIHNraXBzID0gW10pID0+IHtcbiAgaWYgKHNraXBzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBkYXRhLm1hcChyb3cgPT4gXy5nZXQocm93LCBrZXlGaWVsZCkpO1xuICB9XG4gIHJldHVybiBkYXRhXG4gICAgLmZpbHRlcihyb3cgPT4gIV8uY29udGFpbnMoc2tpcHMsIF8uZ2V0KHJvdywga2V5RmllbGQpKSlcbiAgICAubWFwKHJvdyA9PiBfLmdldChyb3csIGtleUZpZWxkKSk7XG59O1xuXG5leHBvcnQgY29uc3QgdW5TZWxlY3RhYmxlS2V5cyA9IChzZWxlY3RlZCwgc2tpcHMgPSBbXSkgPT4ge1xuICBpZiAoc2tpcHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHJldHVybiBzZWxlY3RlZC5maWx0ZXIoeCA9PiBfLmNvbnRhaW5zKHNraXBzLCB4KSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U2VsZWN0ZWRSb3dzID0gKGRhdGEgPSBbXSwga2V5RmllbGQsIHNlbGVjdGVkKSA9PlxuICBzZWxlY3RlZC5tYXAoayA9PiBnZXRSb3dCeVJvd0lkKGRhdGEsIGtleUZpZWxkLCBrKSkuZmlsdGVyKHggPT4gISF4KTtcblxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9zcmMvc3RvcmUvc2VsZWN0aW9uLmpzIiwiLyogZXNsaW50IHJlYWN0L3JlcXVpcmUtZGVmYXVsdC1wcm9wczogMCAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5cbmltcG9ydCBDb25zdCBmcm9tICcuLi9jb25zdCc7XG5cbmNvbnN0IFJvd1RlbXBsYXRlID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICByZW5kZXJDb250ZW50LFxuICAgIHNlbGVjdFJvdyxcbiAgICBleHBhbmRSb3csXG4gICAgY2VsbEVsLFxuICAgIC4uLnJlc3RcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IGlzUmVuZGVyRnVuY3Rpb25Db2x1bW5JbkxlZnQgPSAoXG4gICAgcG9zaXRpb24gPSBDb25zdC5JTkRJQ0FUT1JfUE9TSVRJT05fTEVGVFxuICApID0+IHBvc2l0aW9uID09PSBDb25zdC5JTkRJQ0FUT1JfUE9TSVRJT05fTEVGVDtcblxuICBjb25zdCBjaGlsZHJlbnMgPSByZW5kZXJDb250ZW50KCkgfHwgW107XG5cbiAgaWYgKHNlbGVjdFJvdyAmJiBzZWxlY3RSb3cuaGlkZVNlbGVjdENvbHVtbiAhPT0gdHJ1ZSkge1xuICAgIGlmIChpc1JlbmRlckZ1bmN0aW9uQ29sdW1uSW5MZWZ0KHNlbGVjdFJvdy5zZWxlY3RDb2x1bW5Qb3NpdGlvbikpIHtcbiAgICAgIGNoaWxkcmVucy51bnNoaWZ0KFJlYWN0LmNyZWF0ZUVsZW1lbnQoY2VsbEVsLCB7IGtleTogJ3NlbGVjdGlvbicgfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGlsZHJlbnMucHVzaChSZWFjdC5jcmVhdGVFbGVtZW50KGNlbGxFbCwgeyBrZXk6ICdzZWxlY3Rpb24nIH0pKTtcbiAgICB9XG4gIH1cblxuICBpZiAoZXhwYW5kUm93LnNob3dFeHBhbmRDb2x1bW4pIHtcbiAgICBpZiAoaXNSZW5kZXJGdW5jdGlvbkNvbHVtbkluTGVmdChleHBhbmRSb3cuZXhwYW5kQ29sdW1uUG9zaXRpb24pKSB7XG4gICAgICBjaGlsZHJlbnMudW5zaGlmdChSZWFjdC5jcmVhdGVFbGVtZW50KGNlbGxFbCwgeyBrZXk6ICdleHBhbnNpb24nIH0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2hpbGRyZW5zLnB1c2goUmVhY3QuY3JlYXRlRWxlbWVudChjZWxsRWwsIHsga2V5OiAnZXhwYW5zaW9uJyB9KSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIDx0ciB7IC4uLnJlc3QgfT57IGNoaWxkcmVucyB9PC90cj47XG59O1xuXG5Sb3dUZW1wbGF0ZS5wcm9wVHlwZXMgPSB7XG4gIHJlbmRlckNvbnRlbnQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGNlbGxFbDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBzZWxlY3RSb3c6IFByb3BUeXBlcy5vYmplY3QsXG4gIGV4cGFuZFJvdzogUHJvcFR5cGVzLm9iamVjdFxufTtcblxuZXhwb3J0IGRlZmF1bHQgUm93VGVtcGxhdGU7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9yb3cvcm93LXRlbXBsYXRlLmpzIiwiLyogZXNsaW50IHJlYWN0L3Byb3AtdHlwZXM6IDAgKi9cbi8qIGVzbGludCByZWFjdC9uby1hcnJheS1pbmRleC1rZXk6IDAgKi9cbi8qIGVzbGludCBuby1wbHVzcGx1czogMCAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IF8gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IENlbGwgZnJvbSAnLi4vY2VsbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJvd1B1cmVDb250ZW50IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcykge1xuICAgIGlmICh0eXBlb2YgbmV4dFByb3BzLnNob3VsZFVwZGF0ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBuZXh0UHJvcHMuc2hvdWxkVXBkYXRlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICByb3csXG4gICAgICBrZXlGaWVsZCxcbiAgICAgIGNvbHVtbnMsXG4gICAgICByb3dJbmRleCxcbiAgICAgIGVkaXRhYmxlLFxuICAgICAgZWRpdGluZ1Jvd0lkeCxcbiAgICAgIGVkaXRpbmdDb2xJZHgsXG4gICAgICBvblN0YXJ0LFxuICAgICAgY2xpY2tUb0VkaXQsXG4gICAgICBkYmNsaWNrVG9FZGl0LFxuICAgICAgRWRpdGluZ0NlbGxDb21wb25lbnQsXG4gICAgICB0YWJJbmRleFN0YXJ0XG4gICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBsZXQgdGFiSW5kZXggPSB0YWJJbmRleFN0YXJ0O1xuXG4gICAgcmV0dXJuIGNvbHVtbnMubWFwKChjb2x1bW4sIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCB7IGRhdGFGaWVsZCB9ID0gY29sdW1uO1xuICAgICAgY29uc3QgY29udGVudCA9IF8uZ2V0KHJvdywgZGF0YUZpZWxkKTtcbiAgICAgIGlmIChyb3dJbmRleCA9PT0gZWRpdGluZ1Jvd0lkeCAmJiBpbmRleCA9PT0gZWRpdGluZ0NvbElkeCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxFZGl0aW5nQ2VsbENvbXBvbmVudFxuICAgICAgICAgICAga2V5PXsgYCR7Y29udGVudH0tJHtpbmRleH0tZWRpdGluZ2AgfVxuICAgICAgICAgICAgcm93PXsgcm93IH1cbiAgICAgICAgICAgIHJvd0luZGV4PXsgcm93SW5kZXggfVxuICAgICAgICAgICAgY29sdW1uPXsgY29sdW1uIH1cbiAgICAgICAgICAgIGNvbHVtbkluZGV4PXsgaW5kZXggfVxuICAgICAgICAgIC8+XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICAvLyByZW5kZXIgY2VsbFxuICAgICAgbGV0IGNlbGxUaXRsZTtcbiAgICAgIGxldCBjZWxsU3R5bGUgPSB7fTtcbiAgICAgIGxldCBjZWxsQXR0cnMgPSB7XG4gICAgICAgIC4uLl8uaXNGdW5jdGlvbihjb2x1bW4uYXR0cnMpXG4gICAgICAgICAgPyBjb2x1bW4uYXR0cnMoY29udGVudCwgcm93LCByb3dJbmRleCwgaW5kZXgpXG4gICAgICAgICAgOiBjb2x1bW4uYXR0cnNcbiAgICAgIH07XG5cbiAgICAgIGlmIChjb2x1bW4uZXZlbnRzKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50cyA9IE9iamVjdC5hc3NpZ24oe30sIGNvbHVtbi5ldmVudHMpO1xuICAgICAgICBPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LCBjb2x1bW4uZXZlbnRzKSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgY29uc3Qgb3JpZ2luRm4gPSBldmVudHNba2V5XTtcbiAgICAgICAgICBldmVudHNba2V5XSA9ICguLi5yZXN0KSA9PiBvcmlnaW5GbiguLi5yZXN0LCByb3csIHJvd0luZGV4KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNlbGxBdHRycyA9IHsgLi4uY2VsbEF0dHJzLCAuLi5ldmVudHMgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2VsbENsYXNzZXMgPSBfLmlzRnVuY3Rpb24oY29sdW1uLmNsYXNzZXMpXG4gICAgICAgID8gY29sdW1uLmNsYXNzZXMoY29udGVudCwgcm93LCByb3dJbmRleCwgaW5kZXgpXG4gICAgICAgIDogY29sdW1uLmNsYXNzZXM7XG5cbiAgICAgIGlmIChjb2x1bW4uc3R5bGUpIHtcbiAgICAgICAgY2VsbFN0eWxlID0gXy5pc0Z1bmN0aW9uKGNvbHVtbi5zdHlsZSlcbiAgICAgICAgICA/IGNvbHVtbi5zdHlsZShjb250ZW50LCByb3csIHJvd0luZGV4LCBpbmRleClcbiAgICAgICAgICA6IGNvbHVtbi5zdHlsZTtcbiAgICAgICAgY2VsbFN0eWxlID0gT2JqZWN0LmFzc2lnbih7fSwgY2VsbFN0eWxlKSB8fCB7fTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbHVtbi50aXRsZSkge1xuICAgICAgICBjZWxsVGl0bGUgPSBfLmlzRnVuY3Rpb24oY29sdW1uLnRpdGxlKVxuICAgICAgICAgID8gY29sdW1uLnRpdGxlKGNvbnRlbnQsIHJvdywgcm93SW5kZXgsIGluZGV4KVxuICAgICAgICAgIDogY29udGVudDtcbiAgICAgICAgY2VsbEF0dHJzLnRpdGxlID0gY2VsbFRpdGxlO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29sdW1uLmFsaWduKSB7XG4gICAgICAgIGNlbGxTdHlsZS50ZXh0QWxpZ24gPVxuICAgICAgICAgIF8uaXNGdW5jdGlvbihjb2x1bW4uYWxpZ24pXG4gICAgICAgICAgICA/IGNvbHVtbi5hbGlnbihjb250ZW50LCByb3csIHJvd0luZGV4LCBpbmRleClcbiAgICAgICAgICAgIDogY29sdW1uLmFsaWduO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2VsbENsYXNzZXMpIGNlbGxBdHRycy5jbGFzc05hbWUgPSBjZWxsQ2xhc3NlcztcbiAgICAgIGlmICghXy5pc0VtcHR5T2JqZWN0KGNlbGxTdHlsZSkpIGNlbGxBdHRycy5zdHlsZSA9IGNlbGxTdHlsZTtcblxuICAgICAgbGV0IGVkaXRhYmxlQ2VsbCA9IF8uaXNEZWZpbmVkKGNvbHVtbi5lZGl0YWJsZSkgPyBjb2x1bW4uZWRpdGFibGUgOiB0cnVlO1xuICAgICAgaWYgKGNvbHVtbi5kYXRhRmllbGQgPT09IGtleUZpZWxkIHx8ICFlZGl0YWJsZSkgZWRpdGFibGVDZWxsID0gZmFsc2U7XG4gICAgICBpZiAoXy5pc0Z1bmN0aW9uKGNvbHVtbi5lZGl0YWJsZSkpIHtcbiAgICAgICAgZWRpdGFibGVDZWxsID0gY29sdW1uLmVkaXRhYmxlKGNvbnRlbnQsIHJvdywgcm93SW5kZXgsIGluZGV4KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRhYkluZGV4U3RhcnQgIT09IC0xKSB7XG4gICAgICAgIGNlbGxBdHRycy50YWJJbmRleCA9IHRhYkluZGV4Kys7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxDZWxsXG4gICAgICAgICAga2V5PXsgYCR7Y29udGVudH0tJHtpbmRleH1gIH1cbiAgICAgICAgICByb3c9eyByb3cgfVxuICAgICAgICAgIGVkaXRhYmxlPXsgZWRpdGFibGVDZWxsIH1cbiAgICAgICAgICByb3dJbmRleD17IHJvd0luZGV4IH1cbiAgICAgICAgICBjb2x1bW5JbmRleD17IGluZGV4IH1cbiAgICAgICAgICBjb2x1bW49eyBjb2x1bW4gfVxuICAgICAgICAgIG9uU3RhcnQ9eyBvblN0YXJ0IH1cbiAgICAgICAgICBjbGlja1RvRWRpdD17IGNsaWNrVG9FZGl0IH1cbiAgICAgICAgICBkYmNsaWNrVG9FZGl0PXsgZGJjbGlja1RvRWRpdCB9XG4gICAgICAgICAgeyAuLi5jZWxsQXR0cnMgfVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9zcmMvcm93L3Jvdy1wdXJlLWNvbnRlbnQuanMiLCJpbXBvcnQgXyBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgQ29uc3QgZnJvbSAnLi4vY29uc3QnO1xuXG5jb25zdCBldmVudHMgPSBbXG4gICdvbkNsaWNrJyxcbiAgJ29uRG91YmxlQ2xpY2snLFxuICAnb25Nb3VzZUVudGVyJyxcbiAgJ29uTW91c2VMZWF2ZScsXG4gICdvbkNvbnRleHRNZW51JyxcbiAgJ29uQXV4Q2xpY2snXG5dO1xuXG5leHBvcnQgZGVmYXVsdCBFeHRlbmRCYXNlID0+XG4gIGNsYXNzIFJvd0V2ZW50RGVsZWdhdGVyIGV4dGVuZHMgRXh0ZW5kQmFzZSB7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgIHRoaXMuY2xpY2tOdW0gPSAwO1xuICAgICAgdGhpcy5jcmVhdGVEZWZhdWx0RXZlbnRIYW5kbGVyID0gdGhpcy5jcmVhdGVEZWZhdWx0RXZlbnRIYW5kbGVyLmJpbmQodGhpcyk7XG4gICAgICB0aGlzLmNyZWF0ZUNsaWNrRXZlbnRIYW5kbGVyID0gdGhpcy5jcmVhdGVDbGlja0V2ZW50SGFuZGxlci5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGNyZWF0ZUNsaWNrRXZlbnRIYW5kbGVyKGNiKSB7XG4gICAgICByZXR1cm4gKGUpID0+IHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIHJvdyxcbiAgICAgICAgICBzZWxlY3RlZCxcbiAgICAgICAgICBrZXlGaWVsZCxcbiAgICAgICAgICBzZWxlY3RhYmxlLFxuICAgICAgICAgIGV4cGFuZGFibGUsXG4gICAgICAgICAgcm93SW5kZXgsXG4gICAgICAgICAgZXhwYW5kZWQsXG4gICAgICAgICAgZXhwYW5kUm93LFxuICAgICAgICAgIHNlbGVjdFJvdyxcbiAgICAgICAgICBERUxBWV9GT1JfREJDTElDS1xuICAgICAgICB9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgY29uc3QgY2xpY2tGbiA9ICgpID0+IHtcbiAgICAgICAgICBpZiAoY2IpIHtcbiAgICAgICAgICAgIGNiKGUsIHJvdywgcm93SW5kZXgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBrZXkgPSBfLmdldChyb3csIGtleUZpZWxkKTtcbiAgICAgICAgICBpZiAoZXhwYW5kUm93ICYmIGV4cGFuZGFibGUgJiYgIWV4cGFuZFJvdy5leHBhbmRCeUNvbHVtbk9ubHkpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgKHNlbGVjdFJvdy5tb2RlICE9PSBDb25zdC5ST1dfU0VMRUNUX0RJU0FCTEVEICYmIHNlbGVjdFJvdy5jbGlja1RvRXhwYW5kKSB8fFxuICAgICAgICAgICAgICBzZWxlY3RSb3cubW9kZSA9PT0gQ29uc3QuUk9XX1NFTEVDVF9ESVNBQkxFRFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGV4cGFuZFJvdy5vblJvd0V4cGFuZChrZXksICFleHBhbmRlZCwgcm93SW5kZXgsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc2VsZWN0Um93LmNsaWNrVG9TZWxlY3QgJiYgc2VsZWN0YWJsZSkge1xuICAgICAgICAgICAgc2VsZWN0Um93Lm9uUm93U2VsZWN0KGtleSwgIXNlbGVjdGVkLCByb3dJbmRleCwgZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChERUxBWV9GT1JfREJDTElDSykge1xuICAgICAgICAgIHRoaXMuY2xpY2tOdW0gKz0gMTtcbiAgICAgICAgICBfLmRlYm91bmNlKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNsaWNrTnVtID09PSAxKSB7XG4gICAgICAgICAgICAgIGNsaWNrRm4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY2xpY2tOdW0gPSAwO1xuICAgICAgICAgIH0sIERFTEFZX0ZPUl9EQkNMSUNLKSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNsaWNrRm4oKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjcmVhdGVEZWZhdWx0RXZlbnRIYW5kbGVyKGNiKSB7XG4gICAgICByZXR1cm4gKGUpID0+IHtcbiAgICAgICAgY29uc3QgeyByb3csIHJvd0luZGV4IH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBjYihlLCByb3csIHJvd0luZGV4KTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZGVsZWdhdGUoYXR0cnMgPSB7fSkge1xuICAgICAgY29uc3QgbmV3QXR0cnMgPSB7IC4uLmF0dHJzIH07XG4gICAgICBPYmplY3Qua2V5cyhhdHRycykuZm9yRWFjaCgoYXR0cikgPT4ge1xuICAgICAgICBpZiAoXy5jb250YWlucyhldmVudHMsIGF0dHIpKSB7XG4gICAgICAgICAgbmV3QXR0cnNbYXR0cl0gPSB0aGlzLmNyZWF0ZURlZmF1bHRFdmVudEhhbmRsZXIoYXR0cnNbYXR0cl0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXdBdHRycztcbiAgICB9XG4gIH07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9yb3cvZXZlbnQtZGVsZWdhdGVyLmpzIiwiLyogZXNsaW50IHJlYWN0L3Byb3AtdHlwZXM6IDAgKi9cbmltcG9ydCBfIGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgRXh0ZW5kQmFzZSA9PlxuICBjbGFzcyBSb3dTaG91bGRVcGRhdGVyIGV4dGVuZHMgRXh0ZW5kQmFzZSB7XG4gICAgc2hvdWxkVXBkYXRlQnlDZWxsRWRpdGluZyhuZXh0UHJvcHMpIHtcbiAgICAgIGlmICghKHRoaXMucHJvcHMuY2xpY2tUb0VkaXQgfHwgdGhpcy5wcm9wcy5kYmNsaWNrVG9FZGl0KSkgcmV0dXJuIGZhbHNlO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgbmV4dFByb3BzLmVkaXRpbmdSb3dJZHggPT09IG5leHRQcm9wcy5yb3dJbmRleCB8fFxuICAgICAgICAodGhpcy5wcm9wcy5lZGl0aW5nUm93SWR4ID09PSBuZXh0UHJvcHMucm93SW5kZXggJiZcbiAgICAgICAgbmV4dFByb3BzLmVkaXRpbmdSb3dJZHggPT09IG51bGwpIHx8XG4gICAgICAgIHRoaXMucHJvcHMuZWRpdGluZ1Jvd0lkeCA9PT0gbmV4dFByb3BzLnJvd0luZGV4XG4gICAgICApO1xuICAgIH1cblxuICAgIHNob3VsZFVwZGF0ZWRCeVNlbGZQcm9wcyhuZXh0UHJvcHMpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMucHJvcHMuY2xhc3NOYW1lICE9PSBuZXh0UHJvcHMuY2xhc3NOYW1lIHx8XG4gICAgICAgICFfLmlzRXF1YWwodGhpcy5wcm9wcy5zdHlsZSwgbmV4dFByb3BzLnN0eWxlKSB8fFxuICAgICAgICAhXy5pc0VxdWFsKHRoaXMucHJvcHMuYXR0cnMsIG5leHRQcm9wcy5hdHRycylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gT25seSB1c2UgZm9yIHNpbXBsZS1yb3dcbiAgICBzaG91bGRVcGRhdGVCeUNvbHVtbnNGb3JTaW1wbGVDaGVjayhuZXh0UHJvcHMpIHtcbiAgICAgIGlmICh0aGlzLnByb3BzLmNvbHVtbnMubGVuZ3RoICE9PSBuZXh0UHJvcHMuY29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucHJvcHMuY29sdW1ucy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBpZiAoIV8uaXNFcXVhbCh0aGlzLnByb3BzLmNvbHVtbnNbaV0sIG5leHRQcm9wcy5jb2x1bW5zW2ldKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgc2hvdWxkVXBkYXRlZEJ5Tm9ybWFsUHJvcHMobmV4dFByb3BzKSB7XG4gICAgICBjb25zdCBzaG91bGRVcGRhdGUgPVxuICAgICAgICB0aGlzLnByb3BzLnJvd0luZGV4ICE9PSBuZXh0UHJvcHMucm93SW5kZXggfHxcbiAgICAgICAgdGhpcy5wcm9wcy5lZGl0YWJsZSAhPT0gbmV4dFByb3BzLmVkaXRhYmxlIHx8XG4gICAgICAgICFfLmlzRXF1YWwodGhpcy5wcm9wcy5yb3csIG5leHRQcm9wcy5yb3cpIHx8XG4gICAgICAgIHRoaXMucHJvcHMuY29sdW1ucy5sZW5ndGggIT09IG5leHRQcm9wcy5jb2x1bW5zLmxlbmd0aDtcblxuICAgICAgcmV0dXJuIHNob3VsZFVwZGF0ZTtcbiAgICB9XG5cbiAgICBzaG91bGRVcGRhdGVDaGlsZChuZXh0UHJvcHMpIHtcbiAgICAgIHJldHVybiB0aGlzLnNob3VsZFVwZGF0ZUJ5Q2VsbEVkaXRpbmcobmV4dFByb3BzKSB8fFxuICAgICAgICB0aGlzLnNob3VsZFVwZGF0ZWRCeU5vcm1hbFByb3BzKG5leHRQcm9wcyk7XG4gICAgfVxuXG4gICAgc2hvdWxkUm93Q29udGVudFVwZGF0ZShuZXh0UHJvcHMpIHtcbiAgICAgIHJldHVybiB0aGlzLnNob3VsZFVwZGF0ZUNoaWxkKG5leHRQcm9wcykgfHxcbiAgICAgICAgdGhpcy5zaG91bGRVcGRhdGVCeUNvbHVtbnNGb3JTaW1wbGVDaGVjayhuZXh0UHJvcHMpO1xuICAgIH1cbiAgfTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL3Jvdy9zaG91bGQtdXBkYXRlci5qcyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9leHRlbmRzKCkge1xuICBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldO1xuXG4gICAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH07XG5cbiAgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzLmpzXG4vLyBtb2R1bGUgaWQgPSAxOFxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSIsImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlXCI7XG5pbXBvcnQgKiBhcyBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgY29uZmlnIGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB7IHRpbWVvdXRzU2hhcGUgfSBmcm9tICcuL3V0aWxzL1Byb3BUeXBlcyc7XG5pbXBvcnQgVHJhbnNpdGlvbkdyb3VwQ29udGV4dCBmcm9tICcuL1RyYW5zaXRpb25Hcm91cENvbnRleHQnO1xuZXhwb3J0IHZhciBVTk1PVU5URUQgPSAndW5tb3VudGVkJztcbmV4cG9ydCB2YXIgRVhJVEVEID0gJ2V4aXRlZCc7XG5leHBvcnQgdmFyIEVOVEVSSU5HID0gJ2VudGVyaW5nJztcbmV4cG9ydCB2YXIgRU5URVJFRCA9ICdlbnRlcmVkJztcbmV4cG9ydCB2YXIgRVhJVElORyA9ICdleGl0aW5nJztcbi8qKlxuICogVGhlIFRyYW5zaXRpb24gY29tcG9uZW50IGxldHMgeW91IGRlc2NyaWJlIGEgdHJhbnNpdGlvbiBmcm9tIG9uZSBjb21wb25lbnRcbiAqIHN0YXRlIHRvIGFub3RoZXIgX292ZXIgdGltZV8gd2l0aCBhIHNpbXBsZSBkZWNsYXJhdGl2ZSBBUEkuIE1vc3QgY29tbW9ubHlcbiAqIGl0J3MgdXNlZCB0byBhbmltYXRlIHRoZSBtb3VudGluZyBhbmQgdW5tb3VudGluZyBvZiBhIGNvbXBvbmVudCwgYnV0IGNhbiBhbHNvXG4gKiBiZSB1c2VkIHRvIGRlc2NyaWJlIGluLXBsYWNlIHRyYW5zaXRpb24gc3RhdGVzIGFzIHdlbGwuXG4gKlxuICogLS0tXG4gKlxuICogKipOb3RlKio6IGBUcmFuc2l0aW9uYCBpcyBhIHBsYXRmb3JtLWFnbm9zdGljIGJhc2UgY29tcG9uZW50LiBJZiB5b3UncmUgdXNpbmdcbiAqIHRyYW5zaXRpb25zIGluIENTUywgeW91J2xsIHByb2JhYmx5IHdhbnQgdG8gdXNlXG4gKiBbYENTU1RyYW5zaXRpb25gXShodHRwczovL3JlYWN0Y29tbXVuaXR5Lm9yZy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2Nzcy10cmFuc2l0aW9uKVxuICogaW5zdGVhZC4gSXQgaW5oZXJpdHMgYWxsIHRoZSBmZWF0dXJlcyBvZiBgVHJhbnNpdGlvbmAsIGJ1dCBjb250YWluc1xuICogYWRkaXRpb25hbCBmZWF0dXJlcyBuZWNlc3NhcnkgdG8gcGxheSBuaWNlIHdpdGggQ1NTIHRyYW5zaXRpb25zIChoZW5jZSB0aGVcbiAqIG5hbWUgb2YgdGhlIGNvbXBvbmVudCkuXG4gKlxuICogLS0tXG4gKlxuICogQnkgZGVmYXVsdCB0aGUgYFRyYW5zaXRpb25gIGNvbXBvbmVudCBkb2VzIG5vdCBhbHRlciB0aGUgYmVoYXZpb3Igb2YgdGhlXG4gKiBjb21wb25lbnQgaXQgcmVuZGVycywgaXQgb25seSB0cmFja3MgXCJlbnRlclwiIGFuZCBcImV4aXRcIiBzdGF0ZXMgZm9yIHRoZVxuICogY29tcG9uZW50cy4gSXQncyB1cCB0byB5b3UgdG8gZ2l2ZSBtZWFuaW5nIGFuZCBlZmZlY3QgdG8gdGhvc2Ugc3RhdGVzLiBGb3JcbiAqIGV4YW1wbGUgd2UgY2FuIGFkZCBzdHlsZXMgdG8gYSBjb21wb25lbnQgd2hlbiBpdCBlbnRlcnMgb3IgZXhpdHM6XG4gKlxuICogYGBganN4XG4gKiBpbXBvcnQgeyBUcmFuc2l0aW9uIH0gZnJvbSAncmVhY3QtdHJhbnNpdGlvbi1ncm91cCc7XG4gKlxuICogY29uc3QgZHVyYXRpb24gPSAzMDA7XG4gKlxuICogY29uc3QgZGVmYXVsdFN0eWxlID0ge1xuICogICB0cmFuc2l0aW9uOiBgb3BhY2l0eSAke2R1cmF0aW9ufW1zIGVhc2UtaW4tb3V0YCxcbiAqICAgb3BhY2l0eTogMCxcbiAqIH1cbiAqXG4gKiBjb25zdCB0cmFuc2l0aW9uU3R5bGVzID0ge1xuICogICBlbnRlcmluZzogeyBvcGFjaXR5OiAxIH0sXG4gKiAgIGVudGVyZWQ6ICB7IG9wYWNpdHk6IDEgfSxcbiAqICAgZXhpdGluZzogIHsgb3BhY2l0eTogMCB9LFxuICogICBleGl0ZWQ6ICB7IG9wYWNpdHk6IDAgfSxcbiAqIH07XG4gKlxuICogY29uc3QgRmFkZSA9ICh7IGluOiBpblByb3AgfSkgPT4gKFxuICogICA8VHJhbnNpdGlvbiBpbj17aW5Qcm9wfSB0aW1lb3V0PXtkdXJhdGlvbn0+XG4gKiAgICAge3N0YXRlID0+IChcbiAqICAgICAgIDxkaXYgc3R5bGU9e3tcbiAqICAgICAgICAgLi4uZGVmYXVsdFN0eWxlLFxuICogICAgICAgICAuLi50cmFuc2l0aW9uU3R5bGVzW3N0YXRlXVxuICogICAgICAgfX0+XG4gKiAgICAgICAgIEknbSBhIGZhZGUgVHJhbnNpdGlvbiFcbiAqICAgICAgIDwvZGl2PlxuICogICAgICl9XG4gKiAgIDwvVHJhbnNpdGlvbj5cbiAqICk7XG4gKiBgYGBcbiAqXG4gKiBUaGVyZSBhcmUgNCBtYWluIHN0YXRlcyBhIFRyYW5zaXRpb24gY2FuIGJlIGluOlxuICogIC0gYCdlbnRlcmluZydgXG4gKiAgLSBgJ2VudGVyZWQnYFxuICogIC0gYCdleGl0aW5nJ2BcbiAqICAtIGAnZXhpdGVkJ2BcbiAqXG4gKiBUcmFuc2l0aW9uIHN0YXRlIGlzIHRvZ2dsZWQgdmlhIHRoZSBgaW5gIHByb3AuIFdoZW4gYHRydWVgIHRoZSBjb21wb25lbnRcbiAqIGJlZ2lucyB0aGUgXCJFbnRlclwiIHN0YWdlLiBEdXJpbmcgdGhpcyBzdGFnZSwgdGhlIGNvbXBvbmVudCB3aWxsIHNoaWZ0IGZyb21cbiAqIGl0cyBjdXJyZW50IHRyYW5zaXRpb24gc3RhdGUsIHRvIGAnZW50ZXJpbmcnYCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZVxuICogdHJhbnNpdGlvbiBhbmQgdGhlbiB0byB0aGUgYCdlbnRlcmVkJ2Agc3RhZ2Ugb25jZSBpdCdzIGNvbXBsZXRlLiBMZXQncyB0YWtlXG4gKiB0aGUgZm9sbG93aW5nIGV4YW1wbGUgKHdlJ2xsIHVzZSB0aGVcbiAqIFt1c2VTdGF0ZV0oaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL2hvb2tzLXJlZmVyZW5jZS5odG1sI3VzZXN0YXRlKSBob29rKTpcbiAqXG4gKiBgYGBqc3hcbiAqIGZ1bmN0aW9uIEFwcCgpIHtcbiAqICAgY29uc3QgW2luUHJvcCwgc2V0SW5Qcm9wXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAqICAgcmV0dXJuIChcbiAqICAgICA8ZGl2PlxuICogICAgICAgPFRyYW5zaXRpb24gaW49e2luUHJvcH0gdGltZW91dD17NTAwfT5cbiAqICAgICAgICAge3N0YXRlID0+IChcbiAqICAgICAgICAgICAvLyAuLi5cbiAqICAgICAgICAgKX1cbiAqICAgICAgIDwvVHJhbnNpdGlvbj5cbiAqICAgICAgIDxidXR0b24gb25DbGljaz17KCkgPT4gc2V0SW5Qcm9wKHRydWUpfT5cbiAqICAgICAgICAgQ2xpY2sgdG8gRW50ZXJcbiAqICAgICAgIDwvYnV0dG9uPlxuICogICAgIDwvZGl2PlxuICogICApO1xuICogfVxuICogYGBgXG4gKlxuICogV2hlbiB0aGUgYnV0dG9uIGlzIGNsaWNrZWQgdGhlIGNvbXBvbmVudCB3aWxsIHNoaWZ0IHRvIHRoZSBgJ2VudGVyaW5nJ2Agc3RhdGVcbiAqIGFuZCBzdGF5IHRoZXJlIGZvciA1MDBtcyAodGhlIHZhbHVlIG9mIGB0aW1lb3V0YCkgYmVmb3JlIGl0IGZpbmFsbHkgc3dpdGNoZXNcbiAqIHRvIGAnZW50ZXJlZCdgLlxuICpcbiAqIFdoZW4gYGluYCBpcyBgZmFsc2VgIHRoZSBzYW1lIHRoaW5nIGhhcHBlbnMgZXhjZXB0IHRoZSBzdGF0ZSBtb3ZlcyBmcm9tXG4gKiBgJ2V4aXRpbmcnYCB0byBgJ2V4aXRlZCdgLlxuICovXG5cbnZhciBUcmFuc2l0aW9uID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0c0xvb3NlKFRyYW5zaXRpb24sIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFRyYW5zaXRpb24ocHJvcHMsIGNvbnRleHQpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfdGhpcyA9IF9SZWFjdCRDb21wb25lbnQuY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCkgfHwgdGhpcztcbiAgICB2YXIgcGFyZW50R3JvdXAgPSBjb250ZXh0OyAvLyBJbiB0aGUgY29udGV4dCBvZiBhIFRyYW5zaXRpb25Hcm91cCBhbGwgZW50ZXJzIGFyZSByZWFsbHkgYXBwZWFyc1xuXG4gICAgdmFyIGFwcGVhciA9IHBhcmVudEdyb3VwICYmICFwYXJlbnRHcm91cC5pc01vdW50aW5nID8gcHJvcHMuZW50ZXIgOiBwcm9wcy5hcHBlYXI7XG4gICAgdmFyIGluaXRpYWxTdGF0dXM7XG4gICAgX3RoaXMuYXBwZWFyU3RhdHVzID0gbnVsbDtcblxuICAgIGlmIChwcm9wcy5pbikge1xuICAgICAgaWYgKGFwcGVhcikge1xuICAgICAgICBpbml0aWFsU3RhdHVzID0gRVhJVEVEO1xuICAgICAgICBfdGhpcy5hcHBlYXJTdGF0dXMgPSBFTlRFUklORztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluaXRpYWxTdGF0dXMgPSBFTlRFUkVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocHJvcHMudW5tb3VudE9uRXhpdCB8fCBwcm9wcy5tb3VudE9uRW50ZXIpIHtcbiAgICAgICAgaW5pdGlhbFN0YXR1cyA9IFVOTU9VTlRFRDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluaXRpYWxTdGF0dXMgPSBFWElURUQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBzdGF0dXM6IGluaXRpYWxTdGF0dXNcbiAgICB9O1xuICAgIF90aGlzLm5leHRDYWxsYmFjayA9IG51bGw7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgVHJhbnNpdGlvbi5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSBmdW5jdGlvbiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoX3JlZiwgcHJldlN0YXRlKSB7XG4gICAgdmFyIG5leHRJbiA9IF9yZWYuaW47XG5cbiAgICBpZiAobmV4dEluICYmIHByZXZTdGF0ZS5zdGF0dXMgPT09IFVOTU9VTlRFRCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzOiBFWElURURcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH07IC8vIGdldFNuYXBzaG90QmVmb3JlVXBkYXRlKHByZXZQcm9wcykge1xuICAvLyAgIGxldCBuZXh0U3RhdHVzID0gbnVsbFxuICAvLyAgIGlmIChwcmV2UHJvcHMgIT09IHRoaXMucHJvcHMpIHtcbiAgLy8gICAgIGNvbnN0IHsgc3RhdHVzIH0gPSB0aGlzLnN0YXRlXG4gIC8vICAgICBpZiAodGhpcy5wcm9wcy5pbikge1xuICAvLyAgICAgICBpZiAoc3RhdHVzICE9PSBFTlRFUklORyAmJiBzdGF0dXMgIT09IEVOVEVSRUQpIHtcbiAgLy8gICAgICAgICBuZXh0U3RhdHVzID0gRU5URVJJTkdcbiAgLy8gICAgICAgfVxuICAvLyAgICAgfSBlbHNlIHtcbiAgLy8gICAgICAgaWYgKHN0YXR1cyA9PT0gRU5URVJJTkcgfHwgc3RhdHVzID09PSBFTlRFUkVEKSB7XG4gIC8vICAgICAgICAgbmV4dFN0YXR1cyA9IEVYSVRJTkdcbiAgLy8gICAgICAgfVxuICAvLyAgICAgfVxuICAvLyAgIH1cbiAgLy8gICByZXR1cm4geyBuZXh0U3RhdHVzIH1cbiAgLy8gfVxuXG5cbiAgdmFyIF9wcm90byA9IFRyYW5zaXRpb24ucHJvdG90eXBlO1xuXG4gIF9wcm90by5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMudXBkYXRlU3RhdHVzKHRydWUsIHRoaXMuYXBwZWFyU3RhdHVzKTtcbiAgfTtcblxuICBfcHJvdG8uY29tcG9uZW50RGlkVXBkYXRlID0gZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgIHZhciBuZXh0U3RhdHVzID0gbnVsbDtcblxuICAgIGlmIChwcmV2UHJvcHMgIT09IHRoaXMucHJvcHMpIHtcbiAgICAgIHZhciBzdGF0dXMgPSB0aGlzLnN0YXRlLnN0YXR1cztcblxuICAgICAgaWYgKHRoaXMucHJvcHMuaW4pIHtcbiAgICAgICAgaWYgKHN0YXR1cyAhPT0gRU5URVJJTkcgJiYgc3RhdHVzICE9PSBFTlRFUkVEKSB7XG4gICAgICAgICAgbmV4dFN0YXR1cyA9IEVOVEVSSU5HO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoc3RhdHVzID09PSBFTlRFUklORyB8fCBzdGF0dXMgPT09IEVOVEVSRUQpIHtcbiAgICAgICAgICBuZXh0U3RhdHVzID0gRVhJVElORztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudXBkYXRlU3RhdHVzKGZhbHNlLCBuZXh0U3RhdHVzKTtcbiAgfTtcblxuICBfcHJvdG8uY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLmNhbmNlbE5leHRDYWxsYmFjaygpO1xuICB9O1xuXG4gIF9wcm90by5nZXRUaW1lb3V0cyA9IGZ1bmN0aW9uIGdldFRpbWVvdXRzKCkge1xuICAgIHZhciB0aW1lb3V0ID0gdGhpcy5wcm9wcy50aW1lb3V0O1xuICAgIHZhciBleGl0LCBlbnRlciwgYXBwZWFyO1xuICAgIGV4aXQgPSBlbnRlciA9IGFwcGVhciA9IHRpbWVvdXQ7XG5cbiAgICBpZiAodGltZW91dCAhPSBudWxsICYmIHR5cGVvZiB0aW1lb3V0ICE9PSAnbnVtYmVyJykge1xuICAgICAgZXhpdCA9IHRpbWVvdXQuZXhpdDtcbiAgICAgIGVudGVyID0gdGltZW91dC5lbnRlcjsgLy8gVE9ETzogcmVtb3ZlIGZhbGxiYWNrIGZvciBuZXh0IG1ham9yXG5cbiAgICAgIGFwcGVhciA9IHRpbWVvdXQuYXBwZWFyICE9PSB1bmRlZmluZWQgPyB0aW1lb3V0LmFwcGVhciA6IGVudGVyO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBleGl0OiBleGl0LFxuICAgICAgZW50ZXI6IGVudGVyLFxuICAgICAgYXBwZWFyOiBhcHBlYXJcbiAgICB9O1xuICB9O1xuXG4gIF9wcm90by51cGRhdGVTdGF0dXMgPSBmdW5jdGlvbiB1cGRhdGVTdGF0dXMobW91bnRpbmcsIG5leHRTdGF0dXMpIHtcbiAgICBpZiAobW91bnRpbmcgPT09IHZvaWQgMCkge1xuICAgICAgbW91bnRpbmcgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAobmV4dFN0YXR1cyAhPT0gbnVsbCkge1xuICAgICAgLy8gbmV4dFN0YXR1cyB3aWxsIGFsd2F5cyBiZSBFTlRFUklORyBvciBFWElUSU5HLlxuICAgICAgdGhpcy5jYW5jZWxOZXh0Q2FsbGJhY2soKTtcbiAgICAgIHZhciBub2RlID0gUmVhY3RET00uZmluZERPTU5vZGUodGhpcyk7XG5cbiAgICAgIGlmIChuZXh0U3RhdHVzID09PSBFTlRFUklORykge1xuICAgICAgICB0aGlzLnBlcmZvcm1FbnRlcihub2RlLCBtb3VudGluZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBlcmZvcm1FeGl0KG5vZGUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy51bm1vdW50T25FeGl0ICYmIHRoaXMuc3RhdGUuc3RhdHVzID09PSBFWElURUQpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBzdGF0dXM6IFVOTU9VTlRFRFxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5wZXJmb3JtRW50ZXIgPSBmdW5jdGlvbiBwZXJmb3JtRW50ZXIobm9kZSwgbW91bnRpbmcpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIHZhciBlbnRlciA9IHRoaXMucHJvcHMuZW50ZXI7XG4gICAgdmFyIGFwcGVhcmluZyA9IHRoaXMuY29udGV4dCA/IHRoaXMuY29udGV4dC5pc01vdW50aW5nIDogbW91bnRpbmc7XG4gICAgdmFyIHRpbWVvdXRzID0gdGhpcy5nZXRUaW1lb3V0cygpO1xuICAgIHZhciBlbnRlclRpbWVvdXQgPSBhcHBlYXJpbmcgPyB0aW1lb3V0cy5hcHBlYXIgOiB0aW1lb3V0cy5lbnRlcjsgLy8gbm8gZW50ZXIgYW5pbWF0aW9uIHNraXAgcmlnaHQgdG8gRU5URVJFRFxuICAgIC8vIGlmIHdlIGFyZSBtb3VudGluZyBhbmQgcnVubmluZyB0aGlzIGl0IG1lYW5zIGFwcGVhciBfbXVzdF8gYmUgc2V0XG5cbiAgICBpZiAoIW1vdW50aW5nICYmICFlbnRlciB8fCBjb25maWcuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuc2FmZVNldFN0YXRlKHtcbiAgICAgICAgc3RhdHVzOiBFTlRFUkVEXG4gICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMi5wcm9wcy5vbkVudGVyZWQobm9kZSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnByb3BzLm9uRW50ZXIobm9kZSwgYXBwZWFyaW5nKTtcbiAgICB0aGlzLnNhZmVTZXRTdGF0ZSh7XG4gICAgICBzdGF0dXM6IEVOVEVSSU5HXG4gICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMyLnByb3BzLm9uRW50ZXJpbmcobm9kZSwgYXBwZWFyaW5nKTtcblxuICAgICAgX3RoaXMyLm9uVHJhbnNpdGlvbkVuZChub2RlLCBlbnRlclRpbWVvdXQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMyLnNhZmVTZXRTdGF0ZSh7XG4gICAgICAgICAgc3RhdHVzOiBFTlRFUkVEXG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpczIucHJvcHMub25FbnRlcmVkKG5vZGUsIGFwcGVhcmluZyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLnBlcmZvcm1FeGl0ID0gZnVuY3Rpb24gcGVyZm9ybUV4aXQobm9kZSkge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgdmFyIGV4aXQgPSB0aGlzLnByb3BzLmV4aXQ7XG4gICAgdmFyIHRpbWVvdXRzID0gdGhpcy5nZXRUaW1lb3V0cygpOyAvLyBubyBleGl0IGFuaW1hdGlvbiBza2lwIHJpZ2h0IHRvIEVYSVRFRFxuXG4gICAgaWYgKCFleGl0IHx8IGNvbmZpZy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5zYWZlU2V0U3RhdGUoe1xuICAgICAgICBzdGF0dXM6IEVYSVRFRFxuICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczMucHJvcHMub25FeGl0ZWQobm9kZSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnByb3BzLm9uRXhpdChub2RlKTtcbiAgICB0aGlzLnNhZmVTZXRTdGF0ZSh7XG4gICAgICBzdGF0dXM6IEVYSVRJTkdcbiAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczMucHJvcHMub25FeGl0aW5nKG5vZGUpO1xuXG4gICAgICBfdGhpczMub25UcmFuc2l0aW9uRW5kKG5vZGUsIHRpbWVvdXRzLmV4aXQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMzLnNhZmVTZXRTdGF0ZSh7XG4gICAgICAgICAgc3RhdHVzOiBFWElURURcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzMy5wcm9wcy5vbkV4aXRlZChub2RlKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uY2FuY2VsTmV4dENhbGxiYWNrID0gZnVuY3Rpb24gY2FuY2VsTmV4dENhbGxiYWNrKCkge1xuICAgIGlmICh0aGlzLm5leHRDYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5uZXh0Q2FsbGJhY2suY2FuY2VsKCk7XG4gICAgICB0aGlzLm5leHRDYWxsYmFjayA9IG51bGw7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5zYWZlU2V0U3RhdGUgPSBmdW5jdGlvbiBzYWZlU2V0U3RhdGUobmV4dFN0YXRlLCBjYWxsYmFjaykge1xuICAgIC8vIFRoaXMgc2hvdWxkbid0IGJlIG5lY2Vzc2FyeSwgYnV0IHRoZXJlIGFyZSB3ZWlyZCByYWNlIGNvbmRpdGlvbnMgd2l0aFxuICAgIC8vIHNldFN0YXRlIGNhbGxiYWNrcyBhbmQgdW5tb3VudGluZyBpbiB0ZXN0aW5nLCBzbyBhbHdheXMgbWFrZSBzdXJlIHRoYXRcbiAgICAvLyB3ZSBjYW4gY2FuY2VsIGFueSBwZW5kaW5nIHNldFN0YXRlIGNhbGxiYWNrcyBhZnRlciB3ZSB1bm1vdW50LlxuICAgIGNhbGxiYWNrID0gdGhpcy5zZXROZXh0Q2FsbGJhY2soY2FsbGJhY2spO1xuICAgIHRoaXMuc2V0U3RhdGUobmV4dFN0YXRlLCBjYWxsYmFjayk7XG4gIH07XG5cbiAgX3Byb3RvLnNldE5leHRDYWxsYmFjayA9IGZ1bmN0aW9uIHNldE5leHRDYWxsYmFjayhjYWxsYmFjaykge1xuICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgdmFyIGFjdGl2ZSA9IHRydWU7XG5cbiAgICB0aGlzLm5leHRDYWxsYmFjayA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKGFjdGl2ZSkge1xuICAgICAgICBhY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgX3RoaXM0Lm5leHRDYWxsYmFjayA9IG51bGw7XG4gICAgICAgIGNhbGxiYWNrKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5uZXh0Q2FsbGJhY2suY2FuY2VsID0gZnVuY3Rpb24gKCkge1xuICAgICAgYWN0aXZlID0gZmFsc2U7XG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLm5leHRDYWxsYmFjaztcbiAgfTtcblxuICBfcHJvdG8ub25UcmFuc2l0aW9uRW5kID0gZnVuY3Rpb24gb25UcmFuc2l0aW9uRW5kKG5vZGUsIHRpbWVvdXQsIGhhbmRsZXIpIHtcbiAgICB0aGlzLnNldE5leHRDYWxsYmFjayhoYW5kbGVyKTtcbiAgICB2YXIgZG9lc05vdEhhdmVUaW1lb3V0T3JMaXN0ZW5lciA9IHRpbWVvdXQgPT0gbnVsbCAmJiAhdGhpcy5wcm9wcy5hZGRFbmRMaXN0ZW5lcjtcblxuICAgIGlmICghbm9kZSB8fCBkb2VzTm90SGF2ZVRpbWVvdXRPckxpc3RlbmVyKSB7XG4gICAgICBzZXRUaW1lb3V0KHRoaXMubmV4dENhbGxiYWNrLCAwKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wcm9wcy5hZGRFbmRMaXN0ZW5lcikge1xuICAgICAgdGhpcy5wcm9wcy5hZGRFbmRMaXN0ZW5lcihub2RlLCB0aGlzLm5leHRDYWxsYmFjayk7XG4gICAgfVxuXG4gICAgaWYgKHRpbWVvdXQgIT0gbnVsbCkge1xuICAgICAgc2V0VGltZW91dCh0aGlzLm5leHRDYWxsYmFjaywgdGltZW91dCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgdmFyIHN0YXR1cyA9IHRoaXMuc3RhdGUuc3RhdHVzO1xuXG4gICAgaWYgKHN0YXR1cyA9PT0gVU5NT1VOVEVEKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzLmNoaWxkcmVuLFxuICAgICAgICBjaGlsZFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3RoaXMkcHJvcHMsIFtcImNoaWxkcmVuXCJdKTsgLy8gZmlsdGVyIHByb3BzIGZvciBUcmFuc3RpdGlvblxuXG5cbiAgICBkZWxldGUgY2hpbGRQcm9wcy5pbjtcbiAgICBkZWxldGUgY2hpbGRQcm9wcy5tb3VudE9uRW50ZXI7XG4gICAgZGVsZXRlIGNoaWxkUHJvcHMudW5tb3VudE9uRXhpdDtcbiAgICBkZWxldGUgY2hpbGRQcm9wcy5hcHBlYXI7XG4gICAgZGVsZXRlIGNoaWxkUHJvcHMuZW50ZXI7XG4gICAgZGVsZXRlIGNoaWxkUHJvcHMuZXhpdDtcbiAgICBkZWxldGUgY2hpbGRQcm9wcy50aW1lb3V0O1xuICAgIGRlbGV0ZSBjaGlsZFByb3BzLmFkZEVuZExpc3RlbmVyO1xuICAgIGRlbGV0ZSBjaGlsZFByb3BzLm9uRW50ZXI7XG4gICAgZGVsZXRlIGNoaWxkUHJvcHMub25FbnRlcmluZztcbiAgICBkZWxldGUgY2hpbGRQcm9wcy5vbkVudGVyZWQ7XG4gICAgZGVsZXRlIGNoaWxkUHJvcHMub25FeGl0O1xuICAgIGRlbGV0ZSBjaGlsZFByb3BzLm9uRXhpdGluZztcbiAgICBkZWxldGUgY2hpbGRQcm9wcy5vbkV4aXRlZDtcblxuICAgIGlmICh0eXBlb2YgY2hpbGRyZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIGFsbG93cyBmb3IgbmVzdGVkIFRyYW5zaXRpb25zXG4gICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUcmFuc2l0aW9uR3JvdXBDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICAgIHZhbHVlOiBudWxsXG4gICAgICB9LCBjaGlsZHJlbihzdGF0dXMsIGNoaWxkUHJvcHMpKTtcbiAgICB9XG5cbiAgICB2YXIgY2hpbGQgPSBSZWFjdC5DaGlsZHJlbi5vbmx5KGNoaWxkcmVuKTtcbiAgICByZXR1cm4gKC8vIGFsbG93cyBmb3IgbmVzdGVkIFRyYW5zaXRpb25zXG4gICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zaXRpb25Hcm91cENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgIH0sIFJlYWN0LmNsb25lRWxlbWVudChjaGlsZCwgY2hpbGRQcm9wcykpXG4gICAgKTtcbiAgfTtcblxuICByZXR1cm4gVHJhbnNpdGlvbjtcbn0oUmVhY3QuQ29tcG9uZW50KTtcblxuVHJhbnNpdGlvbi5jb250ZXh0VHlwZSA9IFRyYW5zaXRpb25Hcm91cENvbnRleHQ7XG5UcmFuc2l0aW9uLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgLyoqXG4gICAqIEEgYGZ1bmN0aW9uYCBjaGlsZCBjYW4gYmUgdXNlZCBpbnN0ZWFkIG9mIGEgUmVhY3QgZWxlbWVudC4gVGhpcyBmdW5jdGlvbiBpc1xuICAgKiBjYWxsZWQgd2l0aCB0aGUgY3VycmVudCB0cmFuc2l0aW9uIHN0YXR1cyAoYCdlbnRlcmluZydgLCBgJ2VudGVyZWQnYCxcbiAgICogYCdleGl0aW5nJ2AsIGAnZXhpdGVkJ2ApLCB3aGljaCBjYW4gYmUgdXNlZCB0byBhcHBseSBjb250ZXh0XG4gICAqIHNwZWNpZmljIHByb3BzIHRvIGEgY29tcG9uZW50LlxuICAgKlxuICAgKiBgYGBqc3hcbiAgICogPFRyYW5zaXRpb24gaW49e3RoaXMuc3RhdGUuaW59IHRpbWVvdXQ9ezE1MH0+XG4gICAqICAge3N0YXRlID0+IChcbiAgICogICAgIDxNeUNvbXBvbmVudCBjbGFzc05hbWU9e2BmYWRlIGZhZGUtJHtzdGF0ZX1gfSAvPlxuICAgKiAgICl9XG4gICAqIDwvVHJhbnNpdGlvbj5cbiAgICogYGBgXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAqIFNob3cgdGhlIGNvbXBvbmVudDsgdHJpZ2dlcnMgdGhlIGVudGVyIG9yIGV4aXQgc3RhdGVzXG4gICAqL1xuICBpbjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQgdGhlIGNoaWxkIGNvbXBvbmVudCBpcyBtb3VudGVkIGltbWVkaWF0ZWx5IGFsb25nIHdpdGhcbiAgICogdGhlIHBhcmVudCBgVHJhbnNpdGlvbmAgY29tcG9uZW50LiBJZiB5b3Ugd2FudCB0byBcImxhenkgbW91bnRcIiB0aGUgY29tcG9uZW50IG9uIHRoZVxuICAgKiBmaXJzdCBgaW49e3RydWV9YCB5b3UgY2FuIHNldCBgbW91bnRPbkVudGVyYC4gQWZ0ZXIgdGhlIGZpcnN0IGVudGVyIHRyYW5zaXRpb24gdGhlIGNvbXBvbmVudCB3aWxsIHN0YXlcbiAgICogbW91bnRlZCwgZXZlbiBvbiBcImV4aXRlZFwiLCB1bmxlc3MgeW91IGFsc28gc3BlY2lmeSBgdW5tb3VudE9uRXhpdGAuXG4gICAqL1xuICBtb3VudE9uRW50ZXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IHRoZSBjaGlsZCBjb21wb25lbnQgc3RheXMgbW91bnRlZCBhZnRlciBpdCByZWFjaGVzIHRoZSBgJ2V4aXRlZCdgIHN0YXRlLlxuICAgKiBTZXQgYHVubW91bnRPbkV4aXRgIGlmIHlvdSdkIHByZWZlciB0byB1bm1vdW50IHRoZSBjb21wb25lbnQgYWZ0ZXIgaXQgZmluaXNoZXMgZXhpdGluZy5cbiAgICovXG4gIHVubW91bnRPbkV4aXQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBOb3JtYWxseSBhIGNvbXBvbmVudCBpcyBub3QgdHJhbnNpdGlvbmVkIGlmIGl0IGlzIHNob3duIHdoZW4gdGhlIGA8VHJhbnNpdGlvbj5gIGNvbXBvbmVudCBtb3VudHMuXG4gICAqIElmIHlvdSB3YW50IHRvIHRyYW5zaXRpb24gb24gdGhlIGZpcnN0IG1vdW50IHNldCBgYXBwZWFyYCB0byBgdHJ1ZWAsIGFuZCB0aGVcbiAgICogY29tcG9uZW50IHdpbGwgdHJhbnNpdGlvbiBpbiBhcyBzb29uIGFzIHRoZSBgPFRyYW5zaXRpb24+YCBtb3VudHMuXG4gICAqXG4gICAqID4gTm90ZTogdGhlcmUgYXJlIG5vIHNwZWNpZmljIFwiYXBwZWFyXCIgc3RhdGVzLiBgYXBwZWFyYCBvbmx5IGFkZHMgYW4gYWRkaXRpb25hbCBgZW50ZXJgIHRyYW5zaXRpb24uXG4gICAqL1xuICBhcHBlYXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBFbmFibGUgb3IgZGlzYWJsZSBlbnRlciB0cmFuc2l0aW9ucy5cbiAgICovXG4gIGVudGVyOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogRW5hYmxlIG9yIGRpc2FibGUgZXhpdCB0cmFuc2l0aW9ucy5cbiAgICovXG4gIGV4aXQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBUaGUgZHVyYXRpb24gb2YgdGhlIHRyYW5zaXRpb24sIGluIG1pbGxpc2Vjb25kcy5cbiAgICogUmVxdWlyZWQgdW5sZXNzIGBhZGRFbmRMaXN0ZW5lcmAgaXMgcHJvdmlkZWQuXG4gICAqXG4gICAqIFlvdSBtYXkgc3BlY2lmeSBhIHNpbmdsZSB0aW1lb3V0IGZvciBhbGwgdHJhbnNpdGlvbnM6XG4gICAqXG4gICAqIGBgYGpzeFxuICAgKiB0aW1lb3V0PXs1MDB9XG4gICAqIGBgYFxuICAgKlxuICAgKiBvciBpbmRpdmlkdWFsbHk6XG4gICAqXG4gICAqIGBgYGpzeFxuICAgKiB0aW1lb3V0PXt7XG4gICAqICBhcHBlYXI6IDUwMCxcbiAgICogIGVudGVyOiAzMDAsXG4gICAqICBleGl0OiA1MDAsXG4gICAqIH19XG4gICAqIGBgYFxuICAgKlxuICAgKiAtIGBhcHBlYXJgIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSBvZiBgZW50ZXJgXG4gICAqIC0gYGVudGVyYCBkZWZhdWx0cyB0byBgMGBcbiAgICogLSBgZXhpdGAgZGVmYXVsdHMgdG8gYDBgXG4gICAqXG4gICAqIEB0eXBlIHtudW1iZXIgfCB7IGVudGVyPzogbnVtYmVyLCBleGl0PzogbnVtYmVyLCBhcHBlYXI/OiBudW1iZXIgfX1cbiAgICovXG4gIHRpbWVvdXQ6IGZ1bmN0aW9uIHRpbWVvdXQocHJvcHMpIHtcbiAgICB2YXIgcHQgPSB0aW1lb3V0c1NoYXBlO1xuICAgIGlmICghcHJvcHMuYWRkRW5kTGlzdGVuZXIpIHB0ID0gcHQuaXNSZXF1aXJlZDtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHJldHVybiBwdC5hcHBseSh2b2lkIDAsIFtwcm9wc10uY29uY2F0KGFyZ3MpKTtcbiAgfSxcblxuICAvKipcbiAgICogQWRkIGEgY3VzdG9tIHRyYW5zaXRpb24gZW5kIHRyaWdnZXIuIENhbGxlZCB3aXRoIHRoZSB0cmFuc2l0aW9uaW5nXG4gICAqIERPTSBub2RlIGFuZCBhIGBkb25lYCBjYWxsYmFjay4gQWxsb3dzIGZvciBtb3JlIGZpbmUgZ3JhaW5lZCB0cmFuc2l0aW9uIGVuZFxuICAgKiBsb2dpYy4gKipOb3RlOioqIFRpbWVvdXRzIGFyZSBzdGlsbCB1c2VkIGFzIGEgZmFsbGJhY2sgaWYgcHJvdmlkZWQuXG4gICAqXG4gICAqIGBgYGpzeFxuICAgKiBhZGRFbmRMaXN0ZW5lcj17KG5vZGUsIGRvbmUpID0+IHtcbiAgICogICAvLyB1c2UgdGhlIGNzcyB0cmFuc2l0aW9uZW5kIGV2ZW50IHRvIG1hcmsgdGhlIGZpbmlzaCBvZiBhIHRyYW5zaXRpb25cbiAgICogICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCBkb25lLCBmYWxzZSk7XG4gICAqIH19XG4gICAqIGBgYFxuICAgKi9cbiAgYWRkRW5kTGlzdGVuZXI6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCBiZWZvcmUgdGhlIFwiZW50ZXJpbmdcIiBzdGF0dXMgaXMgYXBwbGllZC4gQW4gZXh0cmEgcGFyYW1ldGVyXG4gICAqIGBpc0FwcGVhcmluZ2AgaXMgc3VwcGxpZWQgdG8gaW5kaWNhdGUgaWYgdGhlIGVudGVyIHN0YWdlIGlzIG9jY3VycmluZyBvbiB0aGUgaW5pdGlhbCBtb3VudFxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCwgaXNBcHBlYXJpbmc6IGJvb2wpIC0+IHZvaWRcbiAgICovXG4gIG9uRW50ZXI6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCBhZnRlciB0aGUgXCJlbnRlcmluZ1wiIHN0YXR1cyBpcyBhcHBsaWVkLiBBbiBleHRyYSBwYXJhbWV0ZXJcbiAgICogYGlzQXBwZWFyaW5nYCBpcyBzdXBwbGllZCB0byBpbmRpY2F0ZSBpZiB0aGUgZW50ZXIgc3RhZ2UgaXMgb2NjdXJyaW5nIG9uIHRoZSBpbml0aWFsIG1vdW50XG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50LCBpc0FwcGVhcmluZzogYm9vbClcbiAgICovXG4gIG9uRW50ZXJpbmc6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCBhZnRlciB0aGUgXCJlbnRlcmVkXCIgc3RhdHVzIGlzIGFwcGxpZWQuIEFuIGV4dHJhIHBhcmFtZXRlclxuICAgKiBgaXNBcHBlYXJpbmdgIGlzIHN1cHBsaWVkIHRvIGluZGljYXRlIGlmIHRoZSBlbnRlciBzdGFnZSBpcyBvY2N1cnJpbmcgb24gdGhlIGluaXRpYWwgbW91bnRcbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQsIGlzQXBwZWFyaW5nOiBib29sKSAtPiB2b2lkXG4gICAqL1xuICBvbkVudGVyZWQ6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCBiZWZvcmUgdGhlIFwiZXhpdGluZ1wiIHN0YXR1cyBpcyBhcHBsaWVkLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCkgLT4gdm9pZFxuICAgKi9cbiAgb25FeGl0OiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgYWZ0ZXIgdGhlIFwiZXhpdGluZ1wiIHN0YXR1cyBpcyBhcHBsaWVkLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCkgLT4gdm9pZFxuICAgKi9cbiAgb25FeGl0aW5nOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgYWZ0ZXIgdGhlIFwiZXhpdGVkXCIgc3RhdHVzIGlzIGFwcGxpZWQuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50KSAtPiB2b2lkXG4gICAqL1xuICBvbkV4aXRlZDogUHJvcFR5cGVzLmZ1bmMgLy8gTmFtZSB0aGUgZnVuY3Rpb24gc28gaXQgaXMgY2xlYXJlciBpbiB0aGUgZG9jdW1lbnRhdGlvblxuXG59IDoge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5UcmFuc2l0aW9uLmRlZmF1bHRQcm9wcyA9IHtcbiAgaW46IGZhbHNlLFxuICBtb3VudE9uRW50ZXI6IGZhbHNlLFxuICB1bm1vdW50T25FeGl0OiBmYWxzZSxcbiAgYXBwZWFyOiBmYWxzZSxcbiAgZW50ZXI6IHRydWUsXG4gIGV4aXQ6IHRydWUsXG4gIG9uRW50ZXI6IG5vb3AsXG4gIG9uRW50ZXJpbmc6IG5vb3AsXG4gIG9uRW50ZXJlZDogbm9vcCxcbiAgb25FeGl0OiBub29wLFxuICBvbkV4aXRpbmc6IG5vb3AsXG4gIG9uRXhpdGVkOiBub29wXG59O1xuVHJhbnNpdGlvbi5VTk1PVU5URUQgPSAwO1xuVHJhbnNpdGlvbi5FWElURUQgPSAxO1xuVHJhbnNpdGlvbi5FTlRFUklORyA9IDI7XG5UcmFuc2l0aW9uLkVOVEVSRUQgPSAzO1xuVHJhbnNpdGlvbi5FWElUSU5HID0gNDtcbmV4cG9ydCBkZWZhdWx0IFRyYW5zaXRpb247XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9UcmFuc2l0aW9uLmpzXG4vLyBtb2R1bGUgaWQgPSAxOVxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV8yMF9fO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIHtcInJvb3RcIjpcIlJlYWN0RE9NXCIsXCJjb21tb25qczJcIjpcInJlYWN0LWRvbVwiLFwiY29tbW9uanNcIjpcInJlYWN0LWRvbVwiLFwiYW1kXCI6XCJyZWFjdC1kb21cIn1cbi8vIG1vZHVsZSBpZCA9IDIwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIiwiZXhwb3J0IGRlZmF1bHQge1xuICBkaXNhYmxlZDogZmFsc2Vcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9jb25maWcuanNcbi8vIG1vZHVsZSBpZCA9IDIxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIiwiaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmV4cG9ydCB2YXIgdGltZW91dHNTaGFwZSA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc2hhcGUoe1xuICBlbnRlcjogUHJvcFR5cGVzLm51bWJlcixcbiAgZXhpdDogUHJvcFR5cGVzLm51bWJlcixcbiAgYXBwZWFyOiBQcm9wVHlwZXMubnVtYmVyXG59KS5pc1JlcXVpcmVkXSkgOiBudWxsO1xuZXhwb3J0IHZhciBjbGFzc05hbWVzU2hhcGUgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLnNoYXBlKHtcbiAgZW50ZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGV4aXQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGFjdGl2ZTogUHJvcFR5cGVzLnN0cmluZ1xufSksIFByb3BUeXBlcy5zaGFwZSh7XG4gIGVudGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBlbnRlckRvbmU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGVudGVyQWN0aXZlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBleGl0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICBleGl0RG9uZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgZXhpdEFjdGl2ZTogUHJvcFR5cGVzLnN0cmluZ1xufSldKSA6IG51bGw7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS91dGlscy9Qcm9wVHlwZXMuanNcbi8vIG1vZHVsZSBpZCA9IDIyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCBkZWZhdWx0IFJlYWN0LmNyZWF0ZUNvbnRleHQobnVsbCk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9UcmFuc2l0aW9uR3JvdXBDb250ZXh0LmpzXG4vLyBtb2R1bGUgaWQgPSAyM1xuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSIsImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcbmltcG9ydCBfYXNzZXJ0VGhpc0luaXRpYWxpemVkIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWRcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFRyYW5zaXRpb25Hcm91cENvbnRleHQgZnJvbSAnLi9UcmFuc2l0aW9uR3JvdXBDb250ZXh0JztcbmltcG9ydCB7IGdldENoaWxkTWFwcGluZywgZ2V0SW5pdGlhbENoaWxkTWFwcGluZywgZ2V0TmV4dENoaWxkTWFwcGluZyB9IGZyb20gJy4vdXRpbHMvQ2hpbGRNYXBwaW5nJztcblxudmFyIHZhbHVlcyA9IE9iamVjdC52YWx1ZXMgfHwgZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5tYXAoZnVuY3Rpb24gKGspIHtcbiAgICByZXR1cm4gb2JqW2tdO1xuICB9KTtcbn07XG5cbnZhciBkZWZhdWx0UHJvcHMgPSB7XG4gIGNvbXBvbmVudDogJ2RpdicsXG4gIGNoaWxkRmFjdG9yeTogZnVuY3Rpb24gY2hpbGRGYWN0b3J5KGNoaWxkKSB7XG4gICAgcmV0dXJuIGNoaWxkO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgYDxUcmFuc2l0aW9uR3JvdXA+YCBjb21wb25lbnQgbWFuYWdlcyBhIHNldCBvZiB0cmFuc2l0aW9uIGNvbXBvbmVudHNcbiAgICogKGA8VHJhbnNpdGlvbj5gIGFuZCBgPENTU1RyYW5zaXRpb24+YCkgaW4gYSBsaXN0LiBMaWtlIHdpdGggdGhlIHRyYW5zaXRpb25cbiAgICogY29tcG9uZW50cywgYDxUcmFuc2l0aW9uR3JvdXA+YCBpcyBhIHN0YXRlIG1hY2hpbmUgZm9yIG1hbmFnaW5nIHRoZSBtb3VudGluZ1xuICAgKiBhbmQgdW5tb3VudGluZyBvZiBjb21wb25lbnRzIG92ZXIgdGltZS5cbiAgICpcbiAgICogQ29uc2lkZXIgdGhlIGV4YW1wbGUgYmVsb3cuIEFzIGl0ZW1zIGFyZSByZW1vdmVkIG9yIGFkZGVkIHRvIHRoZSBUb2RvTGlzdCB0aGVcbiAgICogYGluYCBwcm9wIGlzIHRvZ2dsZWQgYXV0b21hdGljYWxseSBieSB0aGUgYDxUcmFuc2l0aW9uR3JvdXA+YC5cbiAgICpcbiAgICogTm90ZSB0aGF0IGA8VHJhbnNpdGlvbkdyb3VwPmAgIGRvZXMgbm90IGRlZmluZSBhbnkgYW5pbWF0aW9uIGJlaGF2aW9yIVxuICAgKiBFeGFjdGx5IF9ob3dfIGEgbGlzdCBpdGVtIGFuaW1hdGVzIGlzIHVwIHRvIHRoZSBpbmRpdmlkdWFsIHRyYW5zaXRpb25cbiAgICogY29tcG9uZW50LiBUaGlzIG1lYW5zIHlvdSBjYW4gbWl4IGFuZCBtYXRjaCBhbmltYXRpb25zIGFjcm9zcyBkaWZmZXJlbnQgbGlzdFxuICAgKiBpdGVtcy5cbiAgICovXG5cbn07XG5cbnZhciBUcmFuc2l0aW9uR3JvdXAgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzTG9vc2UoVHJhbnNpdGlvbkdyb3VwLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBUcmFuc2l0aW9uR3JvdXAocHJvcHMsIGNvbnRleHQpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfdGhpcyA9IF9SZWFjdCRDb21wb25lbnQuY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCkgfHwgdGhpcztcblxuICAgIHZhciBoYW5kbGVFeGl0ZWQgPSBfdGhpcy5oYW5kbGVFeGl0ZWQuYmluZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSk7IC8vIEluaXRpYWwgY2hpbGRyZW4gc2hvdWxkIGFsbCBiZSBlbnRlcmluZywgZGVwZW5kZW50IG9uIGFwcGVhclxuXG5cbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGNvbnRleHRWYWx1ZToge1xuICAgICAgICBpc01vdW50aW5nOiB0cnVlXG4gICAgICB9LFxuICAgICAgaGFuZGxlRXhpdGVkOiBoYW5kbGVFeGl0ZWQsXG4gICAgICBmaXJzdFJlbmRlcjogdHJ1ZVxuICAgIH07XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFRyYW5zaXRpb25Hcm91cC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy5tb3VudGVkID0gdHJ1ZTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGNvbnRleHRWYWx1ZToge1xuICAgICAgICBpc01vdW50aW5nOiBmYWxzZVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHRoaXMubW91bnRlZCA9IGZhbHNlO1xuICB9O1xuXG4gIFRyYW5zaXRpb25Hcm91cC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSBmdW5jdGlvbiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMobmV4dFByb3BzLCBfcmVmKSB7XG4gICAgdmFyIHByZXZDaGlsZE1hcHBpbmcgPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgICBoYW5kbGVFeGl0ZWQgPSBfcmVmLmhhbmRsZUV4aXRlZCxcbiAgICAgICAgZmlyc3RSZW5kZXIgPSBfcmVmLmZpcnN0UmVuZGVyO1xuICAgIHJldHVybiB7XG4gICAgICBjaGlsZHJlbjogZmlyc3RSZW5kZXIgPyBnZXRJbml0aWFsQ2hpbGRNYXBwaW5nKG5leHRQcm9wcywgaGFuZGxlRXhpdGVkKSA6IGdldE5leHRDaGlsZE1hcHBpbmcobmV4dFByb3BzLCBwcmV2Q2hpbGRNYXBwaW5nLCBoYW5kbGVFeGl0ZWQpLFxuICAgICAgZmlyc3RSZW5kZXI6IGZhbHNlXG4gICAgfTtcbiAgfTtcblxuICBfcHJvdG8uaGFuZGxlRXhpdGVkID0gZnVuY3Rpb24gaGFuZGxlRXhpdGVkKGNoaWxkLCBub2RlKSB7XG4gICAgdmFyIGN1cnJlbnRDaGlsZE1hcHBpbmcgPSBnZXRDaGlsZE1hcHBpbmcodGhpcy5wcm9wcy5jaGlsZHJlbik7XG4gICAgaWYgKGNoaWxkLmtleSBpbiBjdXJyZW50Q2hpbGRNYXBwaW5nKSByZXR1cm47XG5cbiAgICBpZiAoY2hpbGQucHJvcHMub25FeGl0ZWQpIHtcbiAgICAgIGNoaWxkLnByb3BzLm9uRXhpdGVkKG5vZGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm1vdW50ZWQpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKHN0YXRlKSB7XG4gICAgICAgIHZhciBjaGlsZHJlbiA9IF9leHRlbmRzKHt9LCBzdGF0ZS5jaGlsZHJlbik7XG5cbiAgICAgICAgZGVsZXRlIGNoaWxkcmVuW2NoaWxkLmtleV07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBDb21wb25lbnQgPSBfdGhpcyRwcm9wcy5jb21wb25lbnQsXG4gICAgICAgIGNoaWxkRmFjdG9yeSA9IF90aGlzJHByb3BzLmNoaWxkRmFjdG9yeSxcbiAgICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfdGhpcyRwcm9wcywgW1wiY29tcG9uZW50XCIsIFwiY2hpbGRGYWN0b3J5XCJdKTtcblxuICAgIHZhciBjb250ZXh0VmFsdWUgPSB0aGlzLnN0YXRlLmNvbnRleHRWYWx1ZTtcbiAgICB2YXIgY2hpbGRyZW4gPSB2YWx1ZXModGhpcy5zdGF0ZS5jaGlsZHJlbikubWFwKGNoaWxkRmFjdG9yeSk7XG4gICAgZGVsZXRlIHByb3BzLmFwcGVhcjtcbiAgICBkZWxldGUgcHJvcHMuZW50ZXI7XG4gICAgZGVsZXRlIHByb3BzLmV4aXQ7XG5cbiAgICBpZiAoQ29tcG9uZW50ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUcmFuc2l0aW9uR3JvdXBDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICAgIHZhbHVlOiBjb250ZXh0VmFsdWVcbiAgICAgIH0sIGNoaWxkcmVuKTtcbiAgICB9XG5cbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUcmFuc2l0aW9uR3JvdXBDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICB2YWx1ZTogY29udGV4dFZhbHVlXG4gICAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChDb21wb25lbnQsIHByb3BzLCBjaGlsZHJlbikpO1xuICB9O1xuXG4gIHJldHVybiBUcmFuc2l0aW9uR3JvdXA7XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cblRyYW5zaXRpb25Hcm91cC5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIC8qKlxuICAgKiBgPFRyYW5zaXRpb25Hcm91cD5gIHJlbmRlcnMgYSBgPGRpdj5gIGJ5IGRlZmF1bHQuIFlvdSBjYW4gY2hhbmdlIHRoaXNcbiAgICogYmVoYXZpb3IgYnkgcHJvdmlkaW5nIGEgYGNvbXBvbmVudGAgcHJvcC5cbiAgICogSWYgeW91IHVzZSBSZWFjdCB2MTYrIGFuZCB3b3VsZCBsaWtlIHRvIGF2b2lkIGEgd3JhcHBpbmcgYDxkaXY+YCBlbGVtZW50XG4gICAqIHlvdSBjYW4gcGFzcyBpbiBgY29tcG9uZW50PXtudWxsfWAuIFRoaXMgaXMgdXNlZnVsIGlmIHRoZSB3cmFwcGluZyBkaXZcbiAgICogYm9ya3MgeW91ciBjc3Mgc3R5bGVzLlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgKiBBIHNldCBvZiBgPFRyYW5zaXRpb24+YCBjb21wb25lbnRzLCB0aGF0IGFyZSB0b2dnbGVkIGBpbmAgYW5kIG91dCBhcyB0aGV5XG4gICAqIGxlYXZlLiB0aGUgYDxUcmFuc2l0aW9uR3JvdXA+YCB3aWxsIGluamVjdCBzcGVjaWZpYyB0cmFuc2l0aW9uIHByb3BzLCBzb1xuICAgKiByZW1lbWJlciB0byBzcHJlYWQgdGhlbSB0aHJvdWdoIGlmIHlvdSBhcmUgd3JhcHBpbmcgdGhlIGA8VHJhbnNpdGlvbj5gIGFzXG4gICAqIHdpdGggb3VyIGA8RmFkZT5gIGV4YW1wbGUuXG4gICAqXG4gICAqIFdoaWxlIHRoaXMgY29tcG9uZW50IGlzIG1lYW50IGZvciBtdWx0aXBsZSBgVHJhbnNpdGlvbmAgb3IgYENTU1RyYW5zaXRpb25gXG4gICAqIGNoaWxkcmVuLCBzb21ldGltZXMgeW91IG1heSB3YW50IHRvIGhhdmUgYSBzaW5nbGUgdHJhbnNpdGlvbiBjaGlsZCB3aXRoXG4gICAqIGNvbnRlbnQgdGhhdCB5b3Ugd2FudCB0byBiZSB0cmFuc2l0aW9uZWQgb3V0IGFuZCBpbiB3aGVuIHlvdSBjaGFuZ2UgaXRcbiAgICogKGUuZy4gcm91dGVzLCBpbWFnZXMgZXRjLikgSW4gdGhhdCBjYXNlIHlvdSBjYW4gY2hhbmdlIHRoZSBga2V5YCBwcm9wIG9mXG4gICAqIHRoZSB0cmFuc2l0aW9uIGNoaWxkIGFzIHlvdSBjaGFuZ2UgaXRzIGNvbnRlbnQsIHRoaXMgd2lsbCBjYXVzZVxuICAgKiBgVHJhbnNpdGlvbkdyb3VwYCB0byB0cmFuc2l0aW9uIHRoZSBjaGlsZCBvdXQgYW5kIGJhY2sgaW4uXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAqIEEgY29udmVuaWVuY2UgcHJvcCB0aGF0IGVuYWJsZXMgb3IgZGlzYWJsZXMgYXBwZWFyIGFuaW1hdGlvbnNcbiAgICogZm9yIGFsbCBjaGlsZHJlbi4gTm90ZSB0aGF0IHNwZWNpZnlpbmcgdGhpcyB3aWxsIG92ZXJyaWRlIGFueSBkZWZhdWx0cyBzZXRcbiAgICogb24gaW5kaXZpZHVhbCBjaGlsZHJlbiBUcmFuc2l0aW9ucy5cbiAgICovXG4gIGFwcGVhcjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEEgY29udmVuaWVuY2UgcHJvcCB0aGF0IGVuYWJsZXMgb3IgZGlzYWJsZXMgZW50ZXIgYW5pbWF0aW9uc1xuICAgKiBmb3IgYWxsIGNoaWxkcmVuLiBOb3RlIHRoYXQgc3BlY2lmeWluZyB0aGlzIHdpbGwgb3ZlcnJpZGUgYW55IGRlZmF1bHRzIHNldFxuICAgKiBvbiBpbmRpdmlkdWFsIGNoaWxkcmVuIFRyYW5zaXRpb25zLlxuICAgKi9cbiAgZW50ZXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBBIGNvbnZlbmllbmNlIHByb3AgdGhhdCBlbmFibGVzIG9yIGRpc2FibGVzIGV4aXQgYW5pbWF0aW9uc1xuICAgKiBmb3IgYWxsIGNoaWxkcmVuLiBOb3RlIHRoYXQgc3BlY2lmeWluZyB0aGlzIHdpbGwgb3ZlcnJpZGUgYW55IGRlZmF1bHRzIHNldFxuICAgKiBvbiBpbmRpdmlkdWFsIGNoaWxkcmVuIFRyYW5zaXRpb25zLlxuICAgKi9cbiAgZXhpdDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFlvdSBtYXkgbmVlZCB0byBhcHBseSByZWFjdGl2ZSB1cGRhdGVzIHRvIGEgY2hpbGQgYXMgaXQgaXMgZXhpdGluZy5cbiAgICogVGhpcyBpcyBnZW5lcmFsbHkgZG9uZSBieSB1c2luZyBgY2xvbmVFbGVtZW50YCBob3dldmVyIGluIHRoZSBjYXNlIG9mIGFuIGV4aXRpbmdcbiAgICogY2hpbGQgdGhlIGVsZW1lbnQgaGFzIGFscmVhZHkgYmVlbiByZW1vdmVkIGFuZCBub3QgYWNjZXNzaWJsZSB0byB0aGUgY29uc3VtZXIuXG4gICAqXG4gICAqIElmIHlvdSBkbyBuZWVkIHRvIHVwZGF0ZSBhIGNoaWxkIGFzIGl0IGxlYXZlcyB5b3UgY2FuIHByb3ZpZGUgYSBgY2hpbGRGYWN0b3J5YFxuICAgKiB0byB3cmFwIGV2ZXJ5IGNoaWxkLCBldmVuIHRoZSBvbmVzIHRoYXQgYXJlIGxlYXZpbmcuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKGNoaWxkOiBSZWFjdEVsZW1lbnQpIC0+IFJlYWN0RWxlbWVudFxuICAgKi9cbiAgY2hpbGRGYWN0b3J5OiBQcm9wVHlwZXMuZnVuY1xufSA6IHt9O1xuVHJhbnNpdGlvbkdyb3VwLmRlZmF1bHRQcm9wcyA9IGRlZmF1bHRQcm9wcztcbmV4cG9ydCBkZWZhdWx0IFRyYW5zaXRpb25Hcm91cDtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL1RyYW5zaXRpb25Hcm91cC5qc1xuLy8gbW9kdWxlIGlkID0gMjRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEiLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkge1xuICB0aGlzLl9ldmVudHMgPSB0aGlzLl9ldmVudHMgfHwge307XG4gIHRoaXMuX21heExpc3RlbmVycyA9IHRoaXMuX21heExpc3RlbmVycyB8fCB1bmRlZmluZWQ7XG59XG5tb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjtcblxuLy8gQmFja3dhcmRzLWNvbXBhdCB3aXRoIG5vZGUgMC4xMC54XG5FdmVudEVtaXR0ZXIuRXZlbnRFbWl0dGVyID0gRXZlbnRFbWl0dGVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHMgPSB1bmRlZmluZWQ7XG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9tYXhMaXN0ZW5lcnMgPSB1bmRlZmluZWQ7XG5cbi8vIEJ5IGRlZmF1bHQgRXZlbnRFbWl0dGVycyB3aWxsIHByaW50IGEgd2FybmluZyBpZiBtb3JlIHRoYW4gMTAgbGlzdGVuZXJzIGFyZVxuLy8gYWRkZWQgdG8gaXQuIFRoaXMgaXMgYSB1c2VmdWwgZGVmYXVsdCB3aGljaCBoZWxwcyBmaW5kaW5nIG1lbW9yeSBsZWFrcy5cbkV2ZW50RW1pdHRlci5kZWZhdWx0TWF4TGlzdGVuZXJzID0gMTA7XG5cbi8vIE9idmlvdXNseSBub3QgYWxsIEVtaXR0ZXJzIHNob3VsZCBiZSBsaW1pdGVkIHRvIDEwLiBUaGlzIGZ1bmN0aW9uIGFsbG93c1xuLy8gdGhhdCB0byBiZSBpbmNyZWFzZWQuIFNldCB0byB6ZXJvIGZvciB1bmxpbWl0ZWQuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnNldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uKG4pIHtcbiAgaWYgKCFpc051bWJlcihuKSB8fCBuIDwgMCB8fCBpc05hTihuKSlcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ24gbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpO1xuICB0aGlzLl9tYXhMaXN0ZW5lcnMgPSBuO1xuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uKHR5cGUpIHtcbiAgdmFyIGVyLCBoYW5kbGVyLCBsZW4sIGFyZ3MsIGksIGxpc3RlbmVycztcblxuICBpZiAoIXRoaXMuX2V2ZW50cylcbiAgICB0aGlzLl9ldmVudHMgPSB7fTtcblxuICAvLyBJZiB0aGVyZSBpcyBubyAnZXJyb3InIGV2ZW50IGxpc3RlbmVyIHRoZW4gdGhyb3cuXG4gIGlmICh0eXBlID09PSAnZXJyb3InKSB7XG4gICAgaWYgKCF0aGlzLl9ldmVudHMuZXJyb3IgfHxcbiAgICAgICAgKGlzT2JqZWN0KHRoaXMuX2V2ZW50cy5lcnJvcikgJiYgIXRoaXMuX2V2ZW50cy5lcnJvci5sZW5ndGgpKSB7XG4gICAgICBlciA9IGFyZ3VtZW50c1sxXTtcbiAgICAgIGlmIChlciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIHRocm93IGVyOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVudFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQXQgbGVhc3QgZ2l2ZSBzb21lIGtpbmQgb2YgY29udGV4dCB0byB0aGUgdXNlclxuICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdVbmNhdWdodCwgdW5zcGVjaWZpZWQgXCJlcnJvclwiIGV2ZW50LiAoJyArIGVyICsgJyknKTtcbiAgICAgICAgZXJyLmNvbnRleHQgPSBlcjtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGhhbmRsZXIgPSB0aGlzLl9ldmVudHNbdHlwZV07XG5cbiAgaWYgKGlzVW5kZWZpbmVkKGhhbmRsZXIpKVxuICAgIHJldHVybiBmYWxzZTtcblxuICBpZiAoaXNGdW5jdGlvbihoYW5kbGVyKSkge1xuICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgLy8gZmFzdCBjYXNlc1xuICAgICAgY2FzZSAxOlxuICAgICAgICBoYW5kbGVyLmNhbGwodGhpcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyOlxuICAgICAgICBoYW5kbGVyLmNhbGwodGhpcywgYXJndW1lbnRzWzFdKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIGhhbmRsZXIuY2FsbCh0aGlzLCBhcmd1bWVudHNbMV0sIGFyZ3VtZW50c1syXSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgLy8gc2xvd2VyXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgaGFuZGxlci5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNPYmplY3QoaGFuZGxlcikpIHtcbiAgICBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICBsaXN0ZW5lcnMgPSBoYW5kbGVyLnNsaWNlKCk7XG4gICAgbGVuID0gbGlzdGVuZXJzLmxlbmd0aDtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspXG4gICAgICBsaXN0ZW5lcnNbaV0uYXBwbHkodGhpcywgYXJncyk7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBmdW5jdGlvbih0eXBlLCBsaXN0ZW5lcikge1xuICB2YXIgbTtcblxuICBpZiAoIWlzRnVuY3Rpb24obGlzdGVuZXIpKVxuICAgIHRocm93IFR5cGVFcnJvcignbGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMpXG4gICAgdGhpcy5fZXZlbnRzID0ge307XG5cbiAgLy8gVG8gYXZvaWQgcmVjdXJzaW9uIGluIHRoZSBjYXNlIHRoYXQgdHlwZSA9PT0gXCJuZXdMaXN0ZW5lclwiISBCZWZvcmVcbiAgLy8gYWRkaW5nIGl0IHRvIHRoZSBsaXN0ZW5lcnMsIGZpcnN0IGVtaXQgXCJuZXdMaXN0ZW5lclwiLlxuICBpZiAodGhpcy5fZXZlbnRzLm5ld0xpc3RlbmVyKVxuICAgIHRoaXMuZW1pdCgnbmV3TGlzdGVuZXInLCB0eXBlLFxuICAgICAgICAgICAgICBpc0Z1bmN0aW9uKGxpc3RlbmVyLmxpc3RlbmVyKSA/XG4gICAgICAgICAgICAgIGxpc3RlbmVyLmxpc3RlbmVyIDogbGlzdGVuZXIpO1xuXG4gIGlmICghdGhpcy5fZXZlbnRzW3R5cGVdKVxuICAgIC8vIE9wdGltaXplIHRoZSBjYXNlIG9mIG9uZSBsaXN0ZW5lci4gRG9uJ3QgbmVlZCB0aGUgZXh0cmEgYXJyYXkgb2JqZWN0LlxuICAgIHRoaXMuX2V2ZW50c1t0eXBlXSA9IGxpc3RlbmVyO1xuICBlbHNlIGlmIChpc09iamVjdCh0aGlzLl9ldmVudHNbdHlwZV0pKVxuICAgIC8vIElmIHdlJ3ZlIGFscmVhZHkgZ290IGFuIGFycmF5LCBqdXN0IGFwcGVuZC5cbiAgICB0aGlzLl9ldmVudHNbdHlwZV0ucHVzaChsaXN0ZW5lcik7XG4gIGVsc2VcbiAgICAvLyBBZGRpbmcgdGhlIHNlY29uZCBlbGVtZW50LCBuZWVkIHRvIGNoYW5nZSB0byBhcnJheS5cbiAgICB0aGlzLl9ldmVudHNbdHlwZV0gPSBbdGhpcy5fZXZlbnRzW3R5cGVdLCBsaXN0ZW5lcl07XG5cbiAgLy8gQ2hlY2sgZm9yIGxpc3RlbmVyIGxlYWtcbiAgaWYgKGlzT2JqZWN0KHRoaXMuX2V2ZW50c1t0eXBlXSkgJiYgIXRoaXMuX2V2ZW50c1t0eXBlXS53YXJuZWQpIHtcbiAgICBpZiAoIWlzVW5kZWZpbmVkKHRoaXMuX21heExpc3RlbmVycykpIHtcbiAgICAgIG0gPSB0aGlzLl9tYXhMaXN0ZW5lcnM7XG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSBFdmVudEVtaXR0ZXIuZGVmYXVsdE1heExpc3RlbmVycztcbiAgICB9XG5cbiAgICBpZiAobSAmJiBtID4gMCAmJiB0aGlzLl9ldmVudHNbdHlwZV0ubGVuZ3RoID4gbSkge1xuICAgICAgdGhpcy5fZXZlbnRzW3R5cGVdLndhcm5lZCA9IHRydWU7XG4gICAgICBjb25zb2xlLmVycm9yKCcobm9kZSkgd2FybmluZzogcG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSAnICtcbiAgICAgICAgICAgICAgICAgICAgJ2xlYWsgZGV0ZWN0ZWQuICVkIGxpc3RlbmVycyBhZGRlZC4gJyArXG4gICAgICAgICAgICAgICAgICAgICdVc2UgZW1pdHRlci5zZXRNYXhMaXN0ZW5lcnMoKSB0byBpbmNyZWFzZSBsaW1pdC4nLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHNbdHlwZV0ubGVuZ3RoKTtcbiAgICAgIGlmICh0eXBlb2YgY29uc29sZS50cmFjZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBub3Qgc3VwcG9ydGVkIGluIElFIDEwXG4gICAgICAgIGNvbnNvbGUudHJhY2UoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub24gPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbih0eXBlLCBsaXN0ZW5lcikge1xuICBpZiAoIWlzRnVuY3Rpb24obGlzdGVuZXIpKVxuICAgIHRocm93IFR5cGVFcnJvcignbGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cbiAgdmFyIGZpcmVkID0gZmFsc2U7XG5cbiAgZnVuY3Rpb24gZygpIHtcbiAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGcpO1xuXG4gICAgaWYgKCFmaXJlZCkge1xuICAgICAgZmlyZWQgPSB0cnVlO1xuICAgICAgbGlzdGVuZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gIH1cblxuICBnLmxpc3RlbmVyID0gbGlzdGVuZXI7XG4gIHRoaXMub24odHlwZSwgZyk7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBlbWl0cyBhICdyZW1vdmVMaXN0ZW5lcicgZXZlbnQgaWZmIHRoZSBsaXN0ZW5lciB3YXMgcmVtb3ZlZFxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lciA9IGZ1bmN0aW9uKHR5cGUsIGxpc3RlbmVyKSB7XG4gIHZhciBsaXN0LCBwb3NpdGlvbiwgbGVuZ3RoLCBpO1xuXG4gIGlmICghaXNGdW5jdGlvbihsaXN0ZW5lcikpXG4gICAgdGhyb3cgVHlwZUVycm9yKCdsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcblxuICBpZiAoIXRoaXMuX2V2ZW50cyB8fCAhdGhpcy5fZXZlbnRzW3R5cGVdKVxuICAgIHJldHVybiB0aGlzO1xuXG4gIGxpc3QgPSB0aGlzLl9ldmVudHNbdHlwZV07XG4gIGxlbmd0aCA9IGxpc3QubGVuZ3RoO1xuICBwb3NpdGlvbiA9IC0xO1xuXG4gIGlmIChsaXN0ID09PSBsaXN0ZW5lciB8fFxuICAgICAgKGlzRnVuY3Rpb24obGlzdC5saXN0ZW5lcikgJiYgbGlzdC5saXN0ZW5lciA9PT0gbGlzdGVuZXIpKSB7XG4gICAgZGVsZXRlIHRoaXMuX2V2ZW50c1t0eXBlXTtcbiAgICBpZiAodGhpcy5fZXZlbnRzLnJlbW92ZUxpc3RlbmVyKVxuICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIGxpc3RlbmVyKTtcblxuICB9IGVsc2UgaWYgKGlzT2JqZWN0KGxpc3QpKSB7XG4gICAgZm9yIChpID0gbGVuZ3RoOyBpLS0gPiAwOykge1xuICAgICAgaWYgKGxpc3RbaV0gPT09IGxpc3RlbmVyIHx8XG4gICAgICAgICAgKGxpc3RbaV0ubGlzdGVuZXIgJiYgbGlzdFtpXS5saXN0ZW5lciA9PT0gbGlzdGVuZXIpKSB7XG4gICAgICAgIHBvc2l0aW9uID0gaTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBvc2l0aW9uIDwgMClcbiAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgaWYgKGxpc3QubGVuZ3RoID09PSAxKSB7XG4gICAgICBsaXN0Lmxlbmd0aCA9IDA7XG4gICAgICBkZWxldGUgdGhpcy5fZXZlbnRzW3R5cGVdO1xuICAgIH0gZWxzZSB7XG4gICAgICBsaXN0LnNwbGljZShwb3NpdGlvbiwgMSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2V2ZW50cy5yZW1vdmVMaXN0ZW5lcilcbiAgICAgIHRoaXMuZW1pdCgncmVtb3ZlTGlzdGVuZXInLCB0eXBlLCBsaXN0ZW5lcik7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID0gZnVuY3Rpb24odHlwZSkge1xuICB2YXIga2V5LCBsaXN0ZW5lcnM7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMpXG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgLy8gbm90IGxpc3RlbmluZyBmb3IgcmVtb3ZlTGlzdGVuZXIsIG5vIG5lZWQgdG8gZW1pdFxuICBpZiAoIXRoaXMuX2V2ZW50cy5yZW1vdmVMaXN0ZW5lcikge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKVxuICAgICAgdGhpcy5fZXZlbnRzID0ge307XG4gICAgZWxzZSBpZiAodGhpcy5fZXZlbnRzW3R5cGVdKVxuICAgICAgZGVsZXRlIHRoaXMuX2V2ZW50c1t0eXBlXTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIGVtaXQgcmVtb3ZlTGlzdGVuZXIgZm9yIGFsbCBsaXN0ZW5lcnMgb24gYWxsIGV2ZW50c1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIGZvciAoa2V5IGluIHRoaXMuX2V2ZW50cykge1xuICAgICAgaWYgKGtleSA9PT0gJ3JlbW92ZUxpc3RlbmVyJykgY29udGludWU7XG4gICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhrZXkpO1xuICAgIH1cbiAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygncmVtb3ZlTGlzdGVuZXInKTtcbiAgICB0aGlzLl9ldmVudHMgPSB7fTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1t0eXBlXTtcblxuICBpZiAoaXNGdW5jdGlvbihsaXN0ZW5lcnMpKSB7XG4gICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnMpO1xuICB9IGVsc2UgaWYgKGxpc3RlbmVycykge1xuICAgIC8vIExJRk8gb3JkZXJcbiAgICB3aGlsZSAobGlzdGVuZXJzLmxlbmd0aClcbiAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXJzW2xpc3RlbmVycy5sZW5ndGggLSAxXSk7XG4gIH1cbiAgZGVsZXRlIHRoaXMuX2V2ZW50c1t0eXBlXTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24odHlwZSkge1xuICB2YXIgcmV0O1xuICBpZiAoIXRoaXMuX2V2ZW50cyB8fCAhdGhpcy5fZXZlbnRzW3R5cGVdKVxuICAgIHJldCA9IFtdO1xuICBlbHNlIGlmIChpc0Z1bmN0aW9uKHRoaXMuX2V2ZW50c1t0eXBlXSkpXG4gICAgcmV0ID0gW3RoaXMuX2V2ZW50c1t0eXBlXV07XG4gIGVsc2VcbiAgICByZXQgPSB0aGlzLl9ldmVudHNbdHlwZV0uc2xpY2UoKTtcbiAgcmV0dXJuIHJldDtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uKHR5cGUpIHtcbiAgaWYgKHRoaXMuX2V2ZW50cykge1xuICAgIHZhciBldmxpc3RlbmVyID0gdGhpcy5fZXZlbnRzW3R5cGVdO1xuXG4gICAgaWYgKGlzRnVuY3Rpb24oZXZsaXN0ZW5lcikpXG4gICAgICByZXR1cm4gMTtcbiAgICBlbHNlIGlmIChldmxpc3RlbmVyKVxuICAgICAgcmV0dXJuIGV2bGlzdGVuZXIubGVuZ3RoO1xuICB9XG4gIHJldHVybiAwO1xufTtcblxuRXZlbnRFbWl0dGVyLmxpc3RlbmVyQ291bnQgPSBmdW5jdGlvbihlbWl0dGVyLCB0eXBlKSB7XG4gIHJldHVybiBlbWl0dGVyLmxpc3RlbmVyQ291bnQodHlwZSk7XG59O1xuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuZnVuY3Rpb24gaXNOdW1iZXIoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnbnVtYmVyJztcbn1cblxuZnVuY3Rpb24gaXNPYmplY3QoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gYXJnID09PSB2b2lkIDA7XG59XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9ldmVudHMvZXZlbnRzLmpzXG4vLyBtb2R1bGUgaWQgPSAyNVxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSIsImltcG9ydCBCb290c3RyYXBUYWJsZSBmcm9tICcuL3NyYy9ib290c3RyYXAtdGFibGUnO1xuaW1wb3J0IHdpdGhDb250ZXh0IGZyb20gJy4vc3JjL2NvbnRleHRzJztcblxuZXhwb3J0IGRlZmF1bHQgd2l0aENvbnRleHQoQm9vdHN0cmFwVGFibGUpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9pbmRleC5qcyIsIi8qIGVzbGludCBjYW1lbGNhc2U6IDAgKi9cbi8qIGVzbGludCBhcnJvdy1ib2R5LXN0eWxlOiAwICovXG5cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNzIGZyb20gJ2NsYXNzbmFtZXMnO1xuXG5pbXBvcnQgSGVhZGVyIGZyb20gJy4vaGVhZGVyJztcbmltcG9ydCBGaWx0ZXJzIGZyb20gJy4vZmlsdGVycyc7XG5pbXBvcnQgQ2FwdGlvbiBmcm9tICcuL2NhcHRpb24nO1xuaW1wb3J0IEJvZHkgZnJvbSAnLi9ib2R5JztcbmltcG9ydCBGb290ZXIgZnJvbSAnLi9mb290ZXInO1xuaW1wb3J0IFByb3BzQmFzZVJlc29sdmVyIGZyb20gJy4vcHJvcHMtcmVzb2x2ZXInO1xuaW1wb3J0IENvbnN0IGZyb20gJy4vY29uc3QnO1xuaW1wb3J0IF8gZnJvbSAnLi91dGlscyc7XG5cbmNsYXNzIEJvb3RzdHJhcFRhYmxlIGV4dGVuZHMgUHJvcHNCYXNlUmVzb2x2ZXIoQ29tcG9uZW50KSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMudmFsaWRhdGVQcm9wcygpO1xuICB9XG5cbiAgVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzKSB7XG4gICAgaWYgKG5leHRQcm9wcy5vbkRhdGFTaXplQ2hhbmdlICYmICFuZXh0UHJvcHMucGFnaW5hdGlvbikge1xuICAgICAgaWYgKG5leHRQcm9wcy5kYXRhLmxlbmd0aCAhPT0gdGhpcy5wcm9wcy5kYXRhLmxlbmd0aCkge1xuICAgICAgICBuZXh0UHJvcHMub25EYXRhU2l6ZUNoYW5nZSh7IGRhdGFTaXplOiBuZXh0UHJvcHMuZGF0YS5sZW5ndGggfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gRXhwb3NlZCBBUElzXG4gIGdldERhdGEgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZVJvd3MoKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IGxvYWRpbmcsIG92ZXJsYXkgfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKG92ZXJsYXkpIHtcbiAgICAgIGNvbnN0IExvYWRpbmdPdmVybGF5ID0gb3ZlcmxheShsb2FkaW5nKTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxMb2FkaW5nT3ZlcmxheT5cbiAgICAgICAgICB7IHRoaXMucmVuZGVyVGFibGUoKSB9XG4gICAgICAgIDwvTG9hZGluZ092ZXJsYXk+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5yZW5kZXJUYWJsZSgpO1xuICB9XG5cbiAgcmVuZGVyVGFibGUoKSB7XG4gICAgY29uc3Qge1xuICAgICAgY29sdW1ucyxcbiAgICAgIGtleUZpZWxkLFxuICAgICAgdGFiSW5kZXhDZWxsLFxuICAgICAgaWQsXG4gICAgICBjbGFzc2VzLFxuICAgICAgYm9vdHN0cmFwNCxcbiAgICAgIHN0cmlwZWQsXG4gICAgICBob3ZlcixcbiAgICAgIGJvcmRlcmVkLFxuICAgICAgY29uZGVuc2VkLFxuICAgICAgbm9EYXRhSW5kaWNhdGlvbixcbiAgICAgIGNhcHRpb24sXG4gICAgICByb3dTdHlsZSxcbiAgICAgIHJvd0NsYXNzZXMsXG4gICAgICB3cmFwcGVyQ2xhc3NlcyxcbiAgICAgIHJvd0V2ZW50cyxcbiAgICAgIHNlbGVjdFJvdyxcbiAgICAgIGV4cGFuZFJvdyxcbiAgICAgIGNlbGxFZGl0LFxuICAgICAgZmlsdGVyUG9zaXRpb25cbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IHRhYmxlV3JhcHBlckNsYXNzID0gY3MoJ3JlYWN0LWJvb3RzdHJhcC10YWJsZScsIHdyYXBwZXJDbGFzc2VzKTtcblxuICAgIGNvbnN0IHRhYmxlQ2xhc3MgPSBjcygndGFibGUnLCB7XG4gICAgICAndGFibGUtc3RyaXBlZCc6IHN0cmlwZWQsXG4gICAgICAndGFibGUtaG92ZXInOiBob3ZlcixcbiAgICAgICd0YWJsZS1ib3JkZXJlZCc6IGJvcmRlcmVkLFxuICAgICAgW2Jvb3RzdHJhcDQgPyAndGFibGUtc20nIDogJ3RhYmxlLWNvbmRlbnNlZCddOiBjb25kZW5zZWRcbiAgICB9LCBjbGFzc2VzKTtcblxuICAgIGNvbnN0IGhhc0ZpbHRlcnMgPSBjb2x1bW5zLnNvbWUoY29sID0+IGNvbC5maWx0ZXIgfHwgY29sLmZpbHRlclJlbmRlcmVyKTtcblxuICAgIGNvbnN0IGhhc0Zvb3RlciA9IF8uZmlsdGVyKGNvbHVtbnMsIGNvbCA9PiBfLmhhcyhjb2wsICdmb290ZXInKSkubGVuZ3RoID4gMDtcblxuICAgIGNvbnN0IHRhYmxlQ2FwdGlvbiA9IChcbiAgICAgIGNhcHRpb24gJiYgPENhcHRpb24gYm9vdHN0cmFwND17IGJvb3RzdHJhcDQgfT57IGNhcHRpb24gfTwvQ2FwdGlvbj5cbiAgICApO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXsgdGFibGVXcmFwcGVyQ2xhc3MgfT5cbiAgICAgICAgPHRhYmxlIGlkPXsgaWQgfSBjbGFzc05hbWU9eyB0YWJsZUNsYXNzIH0+XG4gICAgICAgICAgeyB0YWJsZUNhcHRpb24gfVxuICAgICAgICAgIDxIZWFkZXJcbiAgICAgICAgICAgIGNvbHVtbnM9eyBjb2x1bW5zIH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17IHRoaXMucHJvcHMuaGVhZGVyQ2xhc3NlcyB9XG4gICAgICAgICAgICB3cmFwcGVyQ2xhc3Nlcz17IHRoaXMucHJvcHMuaGVhZGVyV3JhcHBlckNsYXNzZXMgfVxuICAgICAgICAgICAgc29ydEZpZWxkPXsgdGhpcy5wcm9wcy5zb3J0RmllbGQgfVxuICAgICAgICAgICAgc29ydE9yZGVyPXsgdGhpcy5wcm9wcy5zb3J0T3JkZXIgfVxuICAgICAgICAgICAgb25Tb3J0PXsgdGhpcy5wcm9wcy5vblNvcnQgfVxuICAgICAgICAgICAgZ2xvYmFsU29ydENhcmV0PXsgdGhpcy5wcm9wcy5zb3J0ICYmIHRoaXMucHJvcHMuc29ydC5zb3J0Q2FyZXQgfVxuICAgICAgICAgICAgb25GaWx0ZXI9eyB0aGlzLnByb3BzLm9uRmlsdGVyIH1cbiAgICAgICAgICAgIGN1cnJGaWx0ZXJzPXsgdGhpcy5wcm9wcy5jdXJyRmlsdGVycyB9XG4gICAgICAgICAgICBvbkV4dGVybmFsRmlsdGVyPXsgdGhpcy5wcm9wcy5vbkV4dGVybmFsRmlsdGVyIH1cbiAgICAgICAgICAgIHNlbGVjdFJvdz17IHNlbGVjdFJvdyB9XG4gICAgICAgICAgICBleHBhbmRSb3c9eyBleHBhbmRSb3cgfVxuICAgICAgICAgICAgZmlsdGVyUG9zaXRpb249eyBmaWx0ZXJQb3NpdGlvbiB9XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7aGFzRmlsdGVycyAmJiBmaWx0ZXJQb3NpdGlvbiAhPT0gQ29uc3QuRklMVEVSU19QT1NJVElPTl9JTkxJTkUgJiYgKFxuICAgICAgICAgICAgPEZpbHRlcnNcbiAgICAgICAgICAgICAgY29sdW1ucz17IGNvbHVtbnMgfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9eyB0aGlzLnByb3BzLmZpbHRlcnNDbGFzc2VzIH1cbiAgICAgICAgICAgICAgb25Tb3J0PXsgdGhpcy5wcm9wcy5vblNvcnQgfVxuICAgICAgICAgICAgICBvbkZpbHRlcj17IHRoaXMucHJvcHMub25GaWx0ZXIgfVxuICAgICAgICAgICAgICBjdXJyRmlsdGVycz17IHRoaXMucHJvcHMuY3VyckZpbHRlcnMgfVxuICAgICAgICAgICAgICBmaWx0ZXJQb3NpdGlvbj17IHRoaXMucHJvcHMuZmlsdGVyUG9zaXRpb24gfVxuICAgICAgICAgICAgICBvbkV4dGVybmFsRmlsdGVyPXsgdGhpcy5wcm9wcy5vbkV4dGVybmFsRmlsdGVyIH1cbiAgICAgICAgICAgICAgc2VsZWN0Um93PXsgc2VsZWN0Um93IH1cbiAgICAgICAgICAgICAgZXhwYW5kUm93PXsgZXhwYW5kUm93IH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgICA8Qm9keVxuICAgICAgICAgICAgY2xhc3NOYW1lPXsgdGhpcy5wcm9wcy5ib2R5Q2xhc3NlcyB9XG4gICAgICAgICAgICBkYXRhPXsgdGhpcy5nZXREYXRhKCkgfVxuICAgICAgICAgICAga2V5RmllbGQ9eyBrZXlGaWVsZCB9XG4gICAgICAgICAgICB0YWJJbmRleENlbGw9eyB0YWJJbmRleENlbGwgfVxuICAgICAgICAgICAgY29sdW1ucz17IGNvbHVtbnMgfVxuICAgICAgICAgICAgaXNFbXB0eT17IHRoaXMuaXNFbXB0eSgpIH1cbiAgICAgICAgICAgIHZpc2libGVDb2x1bW5TaXplPXsgdGhpcy52aXNpYmxlQ29sdW1uU2l6ZSgpIH1cbiAgICAgICAgICAgIG5vRGF0YUluZGljYXRpb249eyBub0RhdGFJbmRpY2F0aW9uIH1cbiAgICAgICAgICAgIGNlbGxFZGl0PXsgY2VsbEVkaXQgfVxuICAgICAgICAgICAgc2VsZWN0Um93PXsgc2VsZWN0Um93IH1cbiAgICAgICAgICAgIGV4cGFuZFJvdz17IGV4cGFuZFJvdyB9XG4gICAgICAgICAgICByb3dTdHlsZT17IHJvd1N0eWxlIH1cbiAgICAgICAgICAgIHJvd0NsYXNzZXM9eyByb3dDbGFzc2VzIH1cbiAgICAgICAgICAgIHJvd0V2ZW50cz17IHJvd0V2ZW50cyB9XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7aGFzRm9vdGVyICYmIChcbiAgICAgICAgICAgIDxGb290ZXJcbiAgICAgICAgICAgICAgZGF0YT17IHRoaXMuZ2V0RGF0YSgpIH1cbiAgICAgICAgICAgICAgY29sdW1ucz17IGNvbHVtbnMgfVxuICAgICAgICAgICAgICBzZWxlY3RSb3c9eyBzZWxlY3RSb3cgfVxuICAgICAgICAgICAgICBleHBhbmRSb3c9eyBleHBhbmRSb3cgfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9eyB0aGlzLnByb3BzLmZvb3RlckNsYXNzZXMgfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L3RhYmxlPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5Cb290c3RyYXBUYWJsZS5wcm9wVHlwZXMgPSB7XG4gIGtleUZpZWxkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGRhdGE6IFByb3BUeXBlcy5hcnJheS5pc1JlcXVpcmVkLFxuICBjb2x1bW5zOiBQcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZCxcbiAgYm9vdHN0cmFwNDogUHJvcFR5cGVzLmJvb2wsXG4gIHJlbW90ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmJvb2wsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgcGFnaW5hdGlvbjogUHJvcFR5cGVzLmJvb2xcbiAgfSldKSxcbiAgbm9EYXRhSW5kaWNhdGlvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm5vZGUsIFByb3BUeXBlcy5mdW5jXSksXG4gIHN0cmlwZWQ6IFByb3BUeXBlcy5ib29sLFxuICBib3JkZXJlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGhvdmVyOiBQcm9wVHlwZXMuYm9vbCxcbiAgdGFiSW5kZXhDZWxsOiBQcm9wVHlwZXMuYm9vbCxcbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGhlYWRlckNsYXNzZXM6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGJvZHlDbGFzc2VzOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB3cmFwcGVyQ2xhc3NlczogUHJvcFR5cGVzLnN0cmluZyxcbiAgaGVhZGVyV3JhcHBlckNsYXNzZXM6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNvbmRlbnNlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGNhcHRpb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1xuICAgIFByb3BUeXBlcy5ub2RlLFxuICAgIFByb3BUeXBlcy5zdHJpbmdcbiAgXSksXG4gIHBhZ2luYXRpb246IFByb3BUeXBlcy5vYmplY3QsXG4gIGZpbHRlcjogUHJvcFR5cGVzLm9iamVjdCxcbiAgY2VsbEVkaXQ6IFByb3BUeXBlcy5vYmplY3QsXG4gIHNlbGVjdFJvdzogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBtb2RlOiBQcm9wVHlwZXMub25lT2YoW1xuICAgICAgQ29uc3QuUk9XX1NFTEVDVF9TSU5HTEUsXG4gICAgICBDb25zdC5ST1dfU0VMRUNUX01VTFRJUExFLFxuICAgICAgQ29uc3QuUk9XX1NFTEVDVF9ESVNBQkxFRFxuICAgIF0pLmlzUmVxdWlyZWQsXG4gICAgY2xpY2tUb1NlbGVjdDogUHJvcFR5cGVzLmJvb2wsXG4gICAgY2xpY2tUb0V4cGFuZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgY2xpY2tUb0VkaXQ6IFByb3BUeXBlcy5ib29sLFxuICAgIGhpZGVTZWxlY3RBbGw6IFByb3BUeXBlcy5ib29sLFxuICAgIG9uU2VsZWN0OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvblNlbGVjdEFsbDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgc3R5bGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5mdW5jXSksXG4gICAgY2xhc3NlczogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgICBub25TZWxlY3RhYmxlOiBQcm9wVHlwZXMuYXJyYXksXG4gICAgbm9uU2VsZWN0YWJsZVN0eWxlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMuZnVuY10pLFxuICAgIG5vblNlbGVjdGFibGVDbGFzc2VzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMuZnVuY10pLFxuICAgIGJnQ29sb3I6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5mdW5jXSksXG4gICAgaGlkZVNlbGVjdENvbHVtbjogUHJvcFR5cGVzLmJvb2wsXG4gICAgc2VsZWN0aW9uUmVuZGVyZXI6IFByb3BUeXBlcy5mdW5jLFxuICAgIHNlbGVjdGlvbkhlYWRlclJlbmRlcmVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBoZWFkZXJDb2x1bW5TdHlsZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgICBzZWxlY3RDb2x1bW5TdHlsZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgICBzZWxlY3RDb2x1bW5Qb3NpdGlvbjogUHJvcFR5cGVzLm9uZU9mKFtcbiAgICAgIENvbnN0LklORElDQVRPUl9QT1NJVElPTl9MRUZULFxuICAgICAgQ29uc3QuSU5ESUNBVE9SX1BPU0lUSU9OX1JJR0hUXG4gICAgXSlcbiAgfSksXG4gIGV4cGFuZFJvdzogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICByZW5kZXJlcjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgZXhwYW5kZWQ6IFByb3BUeXBlcy5hcnJheSxcbiAgICBvbkV4cGFuZDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25FeHBhbmRBbGw6IFByb3BUeXBlcy5mdW5jLFxuICAgIG5vbkV4cGFuZGFibGU6IFByb3BUeXBlcy5hcnJheSxcbiAgICBzaG93RXhwYW5kQ29sdW1uOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBvbmx5T25lRXhwYW5kaW5nOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBleHBhbmRCeUNvbHVtbk9ubHk6IFByb3BUeXBlcy5ib29sLFxuICAgIGV4cGFuZENvbHVtblJlbmRlcmVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBleHBhbmRIZWFkZXJDb2x1bW5SZW5kZXJlcjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgZXhwYW5kQ29sdW1uUG9zaXRpb246IFByb3BUeXBlcy5vbmVPZihbXG4gICAgICBDb25zdC5JTkRJQ0FUT1JfUE9TSVRJT05fTEVGVCxcbiAgICAgIENvbnN0LklORElDQVRPUl9QT1NJVElPTl9SSUdIVFxuICAgIF0pLFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgICBwYXJlbnRDbGFzc05hbWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5mdW5jXSlcbiAgfSksXG4gIHJvd1N0eWxlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuZnVuY10pLFxuICByb3dFdmVudHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIHJvd0NsYXNzZXM6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5mdW5jXSksXG4gIGZpbHRlcnNDbGFzc2VzOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBmaWx0ZXJQb3NpdGlvbjogUHJvcFR5cGVzLm9uZU9mKFtcbiAgICBDb25zdC5GSUxURVJTX1BPU0lUSU9OX1RPUCxcbiAgICBDb25zdC5GSUxURVJTX1BPU0lUSU9OX0lOTElORSxcbiAgICBDb25zdC5GSUxURVJTX1BPU0lUSU9OX0JPVFRPTVxuICBdKSxcbiAgZm9vdGVyQ2xhc3NlczogUHJvcFR5cGVzLnN0cmluZyxcbiAgZGVmYXVsdFNvcnRlZDogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBkYXRhRmllbGQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBvcmRlcjogUHJvcFR5cGVzLm9uZU9mKFtDb25zdC5TT1JUX0RFU0MsIENvbnN0LlNPUlRfQVNDXSkuaXNSZXF1aXJlZFxuICB9KSksXG4gIHNvcnQ6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgZGF0YUZpZWxkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIG9yZGVyOiBQcm9wVHlwZXMub25lT2YoW0NvbnN0LlNPUlRfREVTQywgQ29uc3QuU09SVF9BU0NdKSxcbiAgICBzb3J0RnVuYzogUHJvcFR5cGVzLmZ1bmMsXG4gICAgc29ydENhcmV0OiBQcm9wVHlwZXMuZnVuY1xuICB9KSxcbiAgZGVmYXVsdFNvcnREaXJlY3Rpb246IFByb3BUeXBlcy5vbmVPZihbQ29uc3QuU09SVF9ERVNDLCBDb25zdC5TT1JUX0FTQ10pLFxuICBvdmVybGF5OiBQcm9wVHlwZXMuZnVuYyxcbiAgb25UYWJsZUNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uU29ydDogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uRmlsdGVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25FeHRlcm5hbEZpbHRlcjogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uRGF0YVNpemVDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvLyBJbmplY3QgZnJvbSB0b29sa2l0XG4gIHNlYXJjaDogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBzZWFyY2hUZXh0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHNlYXJjaENvbnRleHQ6IFByb3BUeXBlcy5mdW5jXG4gIH0pLFxuICBzZXREZXBlbmRlbmN5TW9kdWxlczogUHJvcFR5cGVzLmZ1bmNcbn07XG5cbkJvb3RzdHJhcFRhYmxlLmRlZmF1bHRQcm9wcyA9IHtcbiAgYm9vdHN0cmFwNDogZmFsc2UsXG4gIHJlbW90ZTogZmFsc2UsXG4gIHN0cmlwZWQ6IGZhbHNlLFxuICBib3JkZXJlZDogdHJ1ZSxcbiAgaG92ZXI6IGZhbHNlLFxuICBjb25kZW5zZWQ6IGZhbHNlLFxuICBub0RhdGFJbmRpY2F0aW9uOiBudWxsLFxuICBzZWxlY3RSb3c6IHtcbiAgICBtb2RlOiBDb25zdC5ST1dfU0VMRUNUX0RJU0FCTEVELFxuICAgIHNlbGVjdGVkOiBbXSxcbiAgICBoaWRlU2VsZWN0Q29sdW1uOiB0cnVlXG4gIH0sXG4gIGV4cGFuZFJvdzoge1xuICAgIHJlbmRlcmVyOiB1bmRlZmluZWQsXG4gICAgZXhwYW5kZWQ6IFtdLFxuICAgIG5vbkV4cGFuZGFibGU6IFtdXG4gIH0sXG4gIGNlbGxFZGl0OiB7XG4gICAgbW9kZTogbnVsbCxcbiAgICBub25FZGl0YWJsZVJvd3M6IFtdXG4gIH0sXG4gIGZpbHRlclBvc2l0aW9uOiBDb25zdC5GSUxURVJTX1BPU0lUSU9OX0lOTElORVxufTtcblxuZXhwb3J0IGRlZmF1bHQgQm9vdHN0cmFwVGFibGU7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9ib290c3RyYXAtdGFibGUuanMiLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gcmVxdWlyZSgnLi9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQnKTtcblxuZnVuY3Rpb24gZW1wdHlGdW5jdGlvbigpIHt9XG5mdW5jdGlvbiBlbXB0eUZ1bmN0aW9uV2l0aFJlc2V0KCkge31cbmVtcHR5RnVuY3Rpb25XaXRoUmVzZXQucmVzZXRXYXJuaW5nQ2FjaGUgPSBlbXB0eUZ1bmN0aW9uO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBzaGltKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4gICAgaWYgKHNlY3JldCA9PT0gUmVhY3RQcm9wVHlwZXNTZWNyZXQpIHtcbiAgICAgIC8vIEl0IGlzIHN0aWxsIHNhZmUgd2hlbiBjYWxsZWQgZnJvbSBSZWFjdC5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcihcbiAgICAgICdDYWxsaW5nIFByb3BUeXBlcyB2YWxpZGF0b3JzIGRpcmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnICtcbiAgICAgICdVc2UgUHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzKCkgdG8gY2FsbCB0aGVtLiAnICtcbiAgICAgICdSZWFkIG1vcmUgYXQgaHR0cDovL2ZiLm1lL3VzZS1jaGVjay1wcm9wLXR5cGVzJ1xuICAgICk7XG4gICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgdGhyb3cgZXJyO1xuICB9O1xuICBzaGltLmlzUmVxdWlyZWQgPSBzaGltO1xuICBmdW5jdGlvbiBnZXRTaGltKCkge1xuICAgIHJldHVybiBzaGltO1xuICB9O1xuICAvLyBJbXBvcnRhbnQhXG4gIC8vIEtlZXAgdGhpcyBsaXN0IGluIHN5bmMgd2l0aCBwcm9kdWN0aW9uIHZlcnNpb24gaW4gYC4vZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMuanNgLlxuICB2YXIgUmVhY3RQcm9wVHlwZXMgPSB7XG4gICAgYXJyYXk6IHNoaW0sXG4gICAgYm9vbDogc2hpbSxcbiAgICBmdW5jOiBzaGltLFxuICAgIG51bWJlcjogc2hpbSxcbiAgICBvYmplY3Q6IHNoaW0sXG4gICAgc3RyaW5nOiBzaGltLFxuICAgIHN5bWJvbDogc2hpbSxcblxuICAgIGFueTogc2hpbSxcbiAgICBhcnJheU9mOiBnZXRTaGltLFxuICAgIGVsZW1lbnQ6IHNoaW0sXG4gICAgZWxlbWVudFR5cGU6IHNoaW0sXG4gICAgaW5zdGFuY2VPZjogZ2V0U2hpbSxcbiAgICBub2RlOiBzaGltLFxuICAgIG9iamVjdE9mOiBnZXRTaGltLFxuICAgIG9uZU9mOiBnZXRTaGltLFxuICAgIG9uZU9mVHlwZTogZ2V0U2hpbSxcbiAgICBzaGFwZTogZ2V0U2hpbSxcbiAgICBleGFjdDogZ2V0U2hpbSxcblxuICAgIGNoZWNrUHJvcFR5cGVzOiBlbXB0eUZ1bmN0aW9uV2l0aFJlc2V0LFxuICAgIHJlc2V0V2FybmluZ0NhY2hlOiBlbXB0eUZ1bmN0aW9uXG4gIH07XG5cbiAgUmVhY3RQcm9wVHlwZXMuUHJvcFR5cGVzID0gUmVhY3RQcm9wVHlwZXM7XG5cbiAgcmV0dXJuIFJlYWN0UHJvcFR5cGVzO1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMuanNcbi8vIG1vZHVsZSBpZCA9IDI4XG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9ICdTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCc7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RQcm9wVHlwZXNTZWNyZXQ7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0LmpzXG4vLyBtb2R1bGUgaWQgPSAyOVxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSIsIi8qIGVzbGludCByZWFjdC9yZXF1aXJlLWRlZmF1bHQtcHJvcHM6IDAgKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG5pbXBvcnQgSGVhZGVyQ2VsbCBmcm9tICcuL2hlYWRlci1jZWxsJztcbmltcG9ydCBTZWxlY3Rpb25IZWFkZXJDZWxsIGZyb20gJy4vcm93LXNlbGVjdGlvbi9zZWxlY3Rpb24taGVhZGVyLWNlbGwnO1xuaW1wb3J0IEV4cGFuZEhlYWRlckNlbGwgZnJvbSAnLi9yb3ctZXhwYW5kL2V4cGFuZC1oZWFkZXItY2VsbCc7XG5pbXBvcnQgd2l0aEhlYWRlclNlbGVjdGlvbiBmcm9tICcuL3Jvdy1zZWxlY3Rpb24vc2VsZWN0aW9uLWhlYWRlci1jZWxsLWNvbnN1bWVyJztcbmltcG9ydCB3aXRoSGVhZGVyRXhwYW5zaW9uIGZyb20gJy4vcm93LWV4cGFuZC9leHBhbmQtaGVhZGVyLWNlbGwtY29uc3VtZXInO1xuaW1wb3J0IENvbnN0IGZyb20gJy4vY29uc3QnO1xuXG5jb25zdCBIZWFkZXIgPSAocHJvcHMpID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzTmFtZSxcbiAgICBjb2x1bW5zLFxuICAgIG9uU29ydCxcbiAgICBvbkZpbHRlcixcbiAgICBzb3J0RmllbGQsXG4gICAgc29ydE9yZGVyLFxuICAgIHNlbGVjdFJvdyxcbiAgICBleHBhbmRSb3csXG4gICAgY3VyckZpbHRlcnMsXG4gICAgb25FeHRlcm5hbEZpbHRlcixcbiAgICBmaWx0ZXJQb3NpdGlvbixcbiAgICBnbG9iYWxTb3J0Q2FyZXQsXG4gICAgd3JhcHBlckNsYXNzZXNcbiAgfSA9IHByb3BzO1xuXG4gIGxldCBTZWxlY3Rpb25IZWFkZXJDZWxsQ29tcCA9ICgpID0+IG51bGw7XG4gIGxldCBFeHBhbnNpb25IZWFkZXJDZWxsQ29tcCA9ICgpID0+IG51bGw7XG5cbiAgaWYgKGV4cGFuZFJvdy5zaG93RXhwYW5kQ29sdW1uKSB7XG4gICAgRXhwYW5zaW9uSGVhZGVyQ2VsbENvbXAgPSB3aXRoSGVhZGVyRXhwYW5zaW9uKEV4cGFuZEhlYWRlckNlbGwpO1xuICB9XG5cbiAgaWYgKHNlbGVjdFJvdykge1xuICAgIFNlbGVjdGlvbkhlYWRlckNlbGxDb21wID0gd2l0aEhlYWRlclNlbGVjdGlvbihTZWxlY3Rpb25IZWFkZXJDZWxsKTtcbiAgfVxuXG4gIGNvbnN0IGlzUmVuZGVyRnVuY3Rpb25Db2x1bW5JbkxlZnQgPSAoXG4gICAgcG9zaXRpb24gPSBDb25zdC5JTkRJQ0FUT1JfUE9TSVRJT05fTEVGVFxuICApID0+IHBvc2l0aW9uID09PSBDb25zdC5JTkRJQ0FUT1JfUE9TSVRJT05fTEVGVDtcblxuICBjb25zdCBjaGlsZHJlbnMgPSBbXG4gICAgY29sdW1ucy5tYXAoKGNvbHVtbiwgaSkgPT4ge1xuICAgICAgY29uc3QgY3VyclNvcnQgPSBjb2x1bW4uZGF0YUZpZWxkID09PSBzb3J0RmllbGQ7XG4gICAgICBjb25zdCBpc0xhc3RTb3J0aW5nID0gY29sdW1uLmRhdGFGaWVsZCA9PT0gc29ydEZpZWxkO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8SGVhZGVyQ2VsbFxuICAgICAgICAgIGluZGV4PXsgaSB9XG4gICAgICAgICAga2V5PXsgY29sdW1uLmRhdGFGaWVsZCB9XG4gICAgICAgICAgY29sdW1uPXsgY29sdW1uIH1cbiAgICAgICAgICBvblNvcnQ9eyBvblNvcnQgfVxuICAgICAgICAgIHNvcnRpbmc9eyBjdXJyU29ydCB9XG4gICAgICAgICAgc29ydE9yZGVyPXsgc29ydE9yZGVyIH1cbiAgICAgICAgICBnbG9iYWxTb3J0Q2FyZXQ9eyBnbG9iYWxTb3J0Q2FyZXQgfVxuICAgICAgICAgIGlzTGFzdFNvcnRpbmc9eyBpc0xhc3RTb3J0aW5nIH1cbiAgICAgICAgICBvbkZpbHRlcj17IG9uRmlsdGVyIH1cbiAgICAgICAgICBjdXJyRmlsdGVycz17IGN1cnJGaWx0ZXJzIH1cbiAgICAgICAgICBvbkV4dGVybmFsRmlsdGVyPXsgb25FeHRlcm5hbEZpbHRlciB9XG4gICAgICAgICAgZmlsdGVyUG9zaXRpb249eyBmaWx0ZXJQb3NpdGlvbiB9XG4gICAgICAgIC8+KTtcbiAgICB9KVxuICBdO1xuXG4gIGlmICghc2VsZWN0Um93LmhpZGVTZWxlY3RDb2x1bW4pIHtcbiAgICBpZiAoaXNSZW5kZXJGdW5jdGlvbkNvbHVtbkluTGVmdChzZWxlY3RSb3cuc2VsZWN0Q29sdW1uUG9zaXRpb24pKSB7XG4gICAgICBjaGlsZHJlbnMudW5zaGlmdCg8U2VsZWN0aW9uSGVhZGVyQ2VsbENvbXAga2V5PVwic2VsZWN0aW9uXCIgLz4pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGlsZHJlbnMucHVzaCg8U2VsZWN0aW9uSGVhZGVyQ2VsbENvbXAga2V5PVwic2VsZWN0aW9uXCIgLz4pO1xuICAgIH1cbiAgfVxuXG4gIGlmIChleHBhbmRSb3cuc2hvd0V4cGFuZENvbHVtbikge1xuICAgIGlmIChpc1JlbmRlckZ1bmN0aW9uQ29sdW1uSW5MZWZ0KGV4cGFuZFJvdy5leHBhbmRDb2x1bW5Qb3NpdGlvbikpIHtcbiAgICAgIGNoaWxkcmVucy51bnNoaWZ0KDxFeHBhbnNpb25IZWFkZXJDZWxsQ29tcCBrZXk9XCJleHBhbnNpb25cIiAvPik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNoaWxkcmVucy5wdXNoKDxFeHBhbnNpb25IZWFkZXJDZWxsQ29tcCBrZXk9XCJleHBhbnNpb25cIiAvPik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8dGhlYWQgY2xhc3NOYW1lPXsgd3JhcHBlckNsYXNzZXMgfT5cbiAgICAgIDx0ciBjbGFzc05hbWU9eyBjbGFzc05hbWUgfT5cbiAgICAgICAgeyBjaGlsZHJlbnMgfVxuICAgICAgPC90cj5cbiAgICA8L3RoZWFkPlxuICApO1xufTtcblxuSGVhZGVyLnByb3BUeXBlcyA9IHtcbiAgY29sdW1uczogUHJvcFR5cGVzLmFycmF5LmlzUmVxdWlyZWQsXG4gIG9uU29ydDogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uRmlsdGVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgc29ydEZpZWxkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzb3J0T3JkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNlbGVjdFJvdzogUHJvcFR5cGVzLm9iamVjdCxcbiAgY3VyckZpbHRlcnM6IFByb3BUeXBlcy5vYmplY3QsXG4gIG9uRXh0ZXJuYWxGaWx0ZXI6IFByb3BUeXBlcy5mdW5jLFxuICBnbG9iYWxTb3J0Q2FyZXQ6IFByb3BUeXBlcy5mdW5jLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHdyYXBwZXJDbGFzc2VzOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBleHBhbmRSb3c6IFByb3BUeXBlcy5vYmplY3QsXG4gIGZpbHRlclBvc2l0aW9uOiBQcm9wVHlwZXMub25lT2YoW1xuICAgIENvbnN0LkZJTFRFUlNfUE9TSVRJT05fVE9QLFxuICAgIENvbnN0LkZJTFRFUlNfUE9TSVRJT05fSU5MSU5FLFxuICAgIENvbnN0LkZJTFRFUlNfUE9TSVRJT05fQk9UVE9NXG4gIF0pXG59O1xuXG5leHBvcnQgZGVmYXVsdCBIZWFkZXI7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9oZWFkZXIuanMiLCIvKiBlc2xpbnQgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzOiAwICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuaW1wb3J0IENvbnN0IGZyb20gJy4vY29uc3QnO1xuaW1wb3J0IFNvcnRTeW1ib2wgZnJvbSAnLi9zb3J0L3N5bWJvbCc7XG5pbXBvcnQgU29ydENhcmV0IGZyb20gJy4vc29ydC9jYXJldCc7XG5pbXBvcnQgXyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBldmVudERlbGVnYXRlciBmcm9tICcuL2NlbGwtZXZlbnQtZGVsZWdhdGVyJztcblxuXG5jbGFzcyBIZWFkZXJDZWxsIGV4dGVuZHMgZXZlbnREZWxlZ2F0ZXIoUmVhY3QuQ29tcG9uZW50KSB7XG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBjb2x1bW4sXG4gICAgICBpbmRleCxcbiAgICAgIG9uU29ydCxcbiAgICAgIHNvcnRpbmcsXG4gICAgICBzb3J0T3JkZXIsXG4gICAgICBpc0xhc3RTb3J0aW5nLFxuICAgICAgb25GaWx0ZXIsXG4gICAgICBjdXJyRmlsdGVycyxcbiAgICAgIGZpbHRlclBvc2l0aW9uLFxuICAgICAgb25FeHRlcm5hbEZpbHRlcixcbiAgICAgIGdsb2JhbFNvcnRDYXJldFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3Qge1xuICAgICAgdGV4dCxcbiAgICAgIHNvcnQsXG4gICAgICBzb3J0Q2FyZXQsXG4gICAgICBmaWx0ZXIsXG4gICAgICBmaWx0ZXJSZW5kZXJlcixcbiAgICAgIGhlYWRlclRpdGxlLFxuICAgICAgaGVhZGVyQWxpZ24sXG4gICAgICBoZWFkZXJGb3JtYXR0ZXIsXG4gICAgICBoZWFkZXJFdmVudHMsXG4gICAgICBoZWFkZXJDbGFzc2VzLFxuICAgICAgaGVhZGVyU3R5bGUsXG4gICAgICBoZWFkZXJBdHRycyxcbiAgICAgIGhlYWRlclNvcnRpbmdDbGFzc2VzLFxuICAgICAgaGVhZGVyU29ydGluZ1N0eWxlXG4gICAgfSA9IGNvbHVtbjtcblxuICAgIGNvbnN0IHNvcnRDYXJldGZ1bmMgPSBzb3J0Q2FyZXQgfHwgZ2xvYmFsU29ydENhcmV0O1xuXG4gICAgY29uc3QgZGVsZWdhdGVFdmVudHMgPSB0aGlzLmRlbGVnYXRlKGhlYWRlckV2ZW50cyk7XG5cbiAgICBjb25zdCBjdXN0b21BdHRycyA9IF8uaXNGdW5jdGlvbihoZWFkZXJBdHRycylcbiAgICAgID8gaGVhZGVyQXR0cnMoY29sdW1uLCBpbmRleClcbiAgICAgIDogKGhlYWRlckF0dHJzIHx8IHt9KTtcblxuICAgIGNvbnN0IGNlbGxBdHRycyA9IHtcbiAgICAgIC4uLmN1c3RvbUF0dHJzLFxuICAgICAgLi4uZGVsZWdhdGVFdmVudHMsXG4gICAgICB0YWJJbmRleDogXy5pc0RlZmluZWQoY3VzdG9tQXR0cnMudGFiSW5kZXgpID8gY3VzdG9tQXR0cnMudGFiSW5kZXggOiAwXG4gICAgfTtcblxuICAgIGxldCBzb3J0U3ltYm9sO1xuICAgIGxldCBmaWx0ZXJFbG07XG4gICAgbGV0IGNlbGxTdHlsZSA9IHt9O1xuICAgIGxldCBjZWxsQ2xhc3NlcyA9IF8uaXNGdW5jdGlvbihoZWFkZXJDbGFzc2VzKSA/IGhlYWRlckNsYXNzZXMoY29sdW1uLCBpbmRleCkgOiBoZWFkZXJDbGFzc2VzO1xuXG4gICAgaWYgKGhlYWRlclN0eWxlKSB7XG4gICAgICBjZWxsU3R5bGUgPSBfLmlzRnVuY3Rpb24oaGVhZGVyU3R5bGUpID8gaGVhZGVyU3R5bGUoY29sdW1uLCBpbmRleCkgOiBoZWFkZXJTdHlsZTtcbiAgICAgIGNlbGxTdHlsZSA9IGNlbGxTdHlsZSA/IHsgLi4uY2VsbFN0eWxlIH0gOiBjZWxsU3R5bGU7XG4gICAgfVxuXG4gICAgaWYgKGhlYWRlclRpdGxlKSB7XG4gICAgICBjZWxsQXR0cnMudGl0bGUgPSBfLmlzRnVuY3Rpb24oaGVhZGVyVGl0bGUpID8gaGVhZGVyVGl0bGUoY29sdW1uLCBpbmRleCkgOiB0ZXh0O1xuICAgIH1cblxuICAgIGlmIChoZWFkZXJBbGlnbikge1xuICAgICAgY2VsbFN0eWxlLnRleHRBbGlnbiA9IF8uaXNGdW5jdGlvbihoZWFkZXJBbGlnbikgPyBoZWFkZXJBbGlnbihjb2x1bW4sIGluZGV4KSA6IGhlYWRlckFsaWduO1xuICAgIH1cblxuICAgIGlmIChzb3J0KSB7XG4gICAgICBjb25zdCBjdXN0b21DbGljayA9IGNlbGxBdHRycy5vbkNsaWNrO1xuICAgICAgY2VsbEF0dHJzWydhcmlhLWxhYmVsJ10gPSBzb3J0aW5nID8gYCR7dGV4dH0gc29ydCAke3NvcnRPcmRlcn1gIDogYCR7dGV4dH0gc29ydGFibGVgO1xuICAgICAgY2VsbEF0dHJzLm9uS2V5VXAgPSAoZSkgPT4ge1xuICAgICAgICBpZiAoZS5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgICAgICBvblNvcnQoY29sdW1uKTtcbiAgICAgICAgICBpZiAoXy5pc0Z1bmN0aW9uKGN1c3RvbUNsaWNrKSkgY3VzdG9tQ2xpY2soZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjZWxsQXR0cnMub25DbGljayA9IChlKSA9PiB7XG4gICAgICAgIG9uU29ydChjb2x1bW4pO1xuICAgICAgICBpZiAoXy5pc0Z1bmN0aW9uKGN1c3RvbUNsaWNrKSkgY3VzdG9tQ2xpY2soZSk7XG4gICAgICB9O1xuICAgICAgY2VsbEF0dHJzLmNsYXNzTmFtZSA9IGNzKGNlbGxBdHRycy5jbGFzc05hbWUsICdzb3J0YWJsZScpO1xuXG4gICAgICBpZiAoc29ydGluZykge1xuICAgICAgICBzb3J0U3ltYm9sID0gc29ydENhcmV0ZnVuYyA/XG4gICAgICAgICAgc29ydENhcmV0ZnVuYyhzb3J0T3JkZXIsIGNvbHVtbikgOlxuICAgICAgICAgIDxTb3J0Q2FyZXQgb3JkZXI9eyBzb3J0T3JkZXIgfSAvPjtcblxuICAgICAgICAvLyBhcHBlbmQgY3VzdG9taXplZCBjbGFzc2VzIG9yIHN0eWxlIGlmIHRhYmxlIHdhcyBzb3J0aW5nIGJhc2VkIG9uIHRoZSBjdXJyZW50IGNvbHVtbi5cbiAgICAgICAgY2VsbENsYXNzZXMgPSBjcyhcbiAgICAgICAgICBjZWxsQ2xhc3NlcyxcbiAgICAgICAgICBfLmlzRnVuY3Rpb24oaGVhZGVyU29ydGluZ0NsYXNzZXMpXG4gICAgICAgICAgICA/IGhlYWRlclNvcnRpbmdDbGFzc2VzKGNvbHVtbiwgc29ydE9yZGVyLCBpc0xhc3RTb3J0aW5nLCBpbmRleClcbiAgICAgICAgICAgIDogaGVhZGVyU29ydGluZ0NsYXNzZXNcbiAgICAgICAgKTtcblxuICAgICAgICBjZWxsU3R5bGUgPSB7XG4gICAgICAgICAgLi4uY2VsbFN0eWxlLFxuICAgICAgICAgIC4uLl8uaXNGdW5jdGlvbihoZWFkZXJTb3J0aW5nU3R5bGUpXG4gICAgICAgICAgICA/IGhlYWRlclNvcnRpbmdTdHlsZShjb2x1bW4sIHNvcnRPcmRlciwgaXNMYXN0U29ydGluZywgaW5kZXgpXG4gICAgICAgICAgICA6IGhlYWRlclNvcnRpbmdTdHlsZVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc29ydFN5bWJvbCA9IHNvcnRDYXJldGZ1bmMgPyBzb3J0Q2FyZXRmdW5jKHVuZGVmaW5lZCwgY29sdW1uKSA6IDxTb3J0U3ltYm9sIC8+O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjZWxsQ2xhc3NlcykgY2VsbEF0dHJzLmNsYXNzTmFtZSA9IGNzKGNlbGxBdHRycy5jbGFzc05hbWUsIGNlbGxDbGFzc2VzKTtcbiAgICBpZiAoIV8uaXNFbXB0eU9iamVjdChjZWxsU3R5bGUpKSBjZWxsQXR0cnMuc3R5bGUgPSBjZWxsU3R5bGU7XG5cbiAgICBpZiAoZmlsdGVyUG9zaXRpb24gPT09IENvbnN0LkZJTFRFUlNfUE9TSVRJT05fSU5MSU5FKSB7XG4gICAgICBpZiAoZmlsdGVyUmVuZGVyZXIpIHtcbiAgICAgICAgY29uc3Qgb25DdXN0b21GaWx0ZXIgPSBvbkV4dGVybmFsRmlsdGVyKGNvbHVtbiwgZmlsdGVyLnByb3BzLnR5cGUpO1xuICAgICAgICBmaWx0ZXJFbG0gPSBmaWx0ZXJSZW5kZXJlcihvbkN1c3RvbUZpbHRlciwgY29sdW1uKTtcbiAgICAgIH0gZWxzZSBpZiAoZmlsdGVyKSB7XG4gICAgICAgIGZpbHRlckVsbSA9IChcbiAgICAgICAgICA8ZmlsdGVyLkZpbHRlclxuICAgICAgICAgICAgeyAuLi5maWx0ZXIucHJvcHMgfVxuICAgICAgICAgICAgZmlsdGVyU3RhdGU9eyBjdXJyRmlsdGVyc1tjb2x1bW4uZGF0YUZpZWxkXSB9XG4gICAgICAgICAgICBvbkZpbHRlcj17IG9uRmlsdGVyIH1cbiAgICAgICAgICAgIGNvbHVtbj17IGNvbHVtbiB9XG4gICAgICAgICAgLz5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjaGlsZHJlbiA9IGhlYWRlckZvcm1hdHRlciA/XG4gICAgICBoZWFkZXJGb3JtYXR0ZXIoY29sdW1uLCBpbmRleCwgeyBzb3J0RWxlbWVudDogc29ydFN5bWJvbCwgZmlsdGVyRWxlbWVudDogZmlsdGVyRWxtIH0pIDpcbiAgICAgIHRleHQ7XG5cbiAgICBpZiAoaGVhZGVyRm9ybWF0dGVyKSB7XG4gICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudCgndGgnLCBjZWxsQXR0cnMsIGNoaWxkcmVuKTtcbiAgICB9XG5cbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudCgndGgnLCBjZWxsQXR0cnMsIGNoaWxkcmVuLCBzb3J0U3ltYm9sLCBmaWx0ZXJFbG0pO1xuICB9XG59XG5cbkhlYWRlckNlbGwucHJvcFR5cGVzID0ge1xuICBjb2x1bW46IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgZGF0YUZpZWxkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgdGV4dDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIHR5cGU6IFByb3BUeXBlcy5vbmVPZihbXG4gICAgICBDb25zdC5UWVBFX1NUUklORyxcbiAgICAgIENvbnN0LlRZUEVfTlVNQkVSLFxuICAgICAgQ29uc3QuVFlQRV9CT09MRUFOLFxuICAgICAgQ29uc3QuVFlQRV9EQVRFXG4gICAgXSksXG4gICAgaXNEdW1teUZpZWxkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBoaWRkZW46IFByb3BUeXBlcy5ib29sLFxuICAgIGhlYWRlckZvcm1hdHRlcjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgZm9ybWF0dGVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBmb3JtYXRFeHRyYURhdGE6IFByb3BUeXBlcy5hbnksXG4gICAgaGVhZGVyQ2xhc3NlczogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgICBjbGFzc2VzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMuZnVuY10pLFxuICAgIGhlYWRlclN0eWxlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuZnVuY10pLFxuICAgIHN0eWxlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuZnVuY10pLFxuICAgIGhlYWRlclRpdGxlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYm9vbCwgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgICB0aXRsZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmJvb2wsIFByb3BUeXBlcy5mdW5jXSksXG4gICAgaGVhZGVyRXZlbnRzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGV2ZW50czogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBoZWFkZXJBbGlnbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgICBhbGlnbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgICBoZWFkZXJBdHRyczogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgICBhdHRyczogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgICBzb3J0OiBQcm9wVHlwZXMuYm9vbCxcbiAgICBzb3J0RnVuYzogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25Tb3J0OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBlZGl0b3I6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgZWRpdGFibGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ib29sLCBQcm9wVHlwZXMuZnVuY10pLFxuICAgIGVkaXRDZWxsU3R5bGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5mdW5jXSksXG4gICAgZWRpdENlbGxDbGFzc2VzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMuZnVuY10pLFxuICAgIGVkaXRvclN0eWxlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuZnVuY10pLFxuICAgIGVkaXRvckNsYXNzZXM6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5mdW5jXSksXG4gICAgZWRpdG9yUmVuZGVyZXI6IFByb3BUeXBlcy5mdW5jLFxuICAgIHZhbGlkYXRvcjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgZmlsdGVyOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGZpbHRlclJlbmRlcmVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBmaWx0ZXJWYWx1ZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgc2VhcmNoYWJsZTogUHJvcFR5cGVzLmJvb2xcbiAgfSkuaXNSZXF1aXJlZCxcbiAgaW5kZXg6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgb25Tb3J0OiBQcm9wVHlwZXMuZnVuYyxcbiAgc29ydGluZzogUHJvcFR5cGVzLmJvb2wsXG4gIHNvcnRPcmRlcjogUHJvcFR5cGVzLm9uZU9mKFtDb25zdC5TT1JUX0FTQywgQ29uc3QuU09SVF9ERVNDXSksXG4gIHNvcnRDYXJldDogUHJvcFR5cGVzLmZ1bmMsXG4gIGlzTGFzdFNvcnRpbmc6IFByb3BUeXBlcy5ib29sLFxuICBvbkZpbHRlcjogUHJvcFR5cGVzLmZ1bmMsXG4gIGZpbHRlclBvc2l0aW9uOiBQcm9wVHlwZXMub25lT2YoW0NvbnN0LkZJTFRFUlNfUE9TSVRJT05fSU5MSU5FLFxuICAgIENvbnN0LkZJTFRFUlNfUE9TSVRJT05fQk9UVE9NLCBDb25zdC5GSUxURVJTX1BPU0lUSU9OX1RPUF0pLFxuICBjdXJyRmlsdGVyczogUHJvcFR5cGVzLm9iamVjdCxcbiAgb25FeHRlcm5hbEZpbHRlcjogUHJvcFR5cGVzLmZ1bmNcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEhlYWRlckNlbGw7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9oZWFkZXItY2VsbC5qcyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBCb290c3RyYXBDb250ZXh0IH0gZnJvbSAnLi4vY29udGV4dHMvYm9vdHN0cmFwJztcblxuY29uc3QgU29ydFN5bWJvbCA9ICgpID0+IChcbiAgPEJvb3RzdHJhcENvbnRleHQuQ29uc3VtZXI+XG4gICAge1xuICAgICAgKHsgYm9vdHN0cmFwNCB9KSA9PiAoYm9vdHN0cmFwNCA/IChcbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwib3JkZXItNFwiIC8+XG4gICAgICApIDogKFxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJvcmRlclwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImRyb3Bkb3duXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJjYXJldFwiIC8+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImRyb3B1cFwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiY2FyZXRcIiAvPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgKSlcbiAgICB9XG4gIDwvQm9vdHN0cmFwQ29udGV4dC5Db25zdW1lcj5cbik7XG5cbmV4cG9ydCBkZWZhdWx0IFNvcnRTeW1ib2w7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9zb3J0L3N5bWJvbC5qcyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY3MgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG5pbXBvcnQgQ29uc3QgZnJvbSAnLi4vY29uc3QnO1xuaW1wb3J0IHsgQm9vdHN0cmFwQ29udGV4dCB9IGZyb20gJy4uL2NvbnRleHRzL2Jvb3RzdHJhcCc7XG5cblxuY29uc3QgU29ydENhcmV0ID0gKHsgb3JkZXIgfSkgPT4ge1xuICBjb25zdCBvcmRlckNsYXNzID0gY3MoJ3JlYWN0LWJvb3RzdHJhcC10YWJsZS1zb3J0LW9yZGVyJywge1xuICAgIGRyb3B1cDogb3JkZXIgPT09IENvbnN0LlNPUlRfQVNDXG4gIH0pO1xuXG4gIHJldHVybiAoXG4gICAgPEJvb3RzdHJhcENvbnRleHQuQ29uc3VtZXI+XG4gICAgICB7XG4gICAgICAgICh7IGJvb3RzdHJhcDQgfSkgPT4gKGJvb3RzdHJhcDQgPyAoXG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXsgYGNhcmV0LTQtJHtvcmRlcn1gIH0gLz5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9eyBvcmRlckNsYXNzIH0+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJjYXJldFwiIC8+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICApKVxuICAgICAgfVxuICAgIDwvQm9vdHN0cmFwQ29udGV4dC5Db25zdW1lcj5cbiAgKTtcbn07XG5cblNvcnRDYXJldC5wcm9wVHlwZXMgPSB7XG4gIG9yZGVyOiBQcm9wVHlwZXMub25lT2YoW0NvbnN0LlNPUlRfQVNDLCBDb25zdC5TT1JUX0RFU0NdKS5pc1JlcXVpcmVkXG59O1xuXG5leHBvcnQgZGVmYXVsdCBTb3J0Q2FyZXQ7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9zb3J0L2NhcmV0LmpzIiwiLy8gICAgIFVuZGVyc2NvcmUuanMgMS45LjFcbi8vICAgICBodHRwOi8vdW5kZXJzY29yZWpzLm9yZ1xuLy8gICAgIChjKSAyMDA5LTIwMTggSmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIGFuZCBJbnZlc3RpZ2F0aXZlIFJlcG9ydGVycyAmIEVkaXRvcnNcbi8vICAgICBVbmRlcnNjb3JlIG1heSBiZSBmcmVlbHkgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuXG4oZnVuY3Rpb24oKSB7XG5cbiAgLy8gQmFzZWxpbmUgc2V0dXBcbiAgLy8gLS0tLS0tLS0tLS0tLS1cblxuICAvLyBFc3RhYmxpc2ggdGhlIHJvb3Qgb2JqZWN0LCBgd2luZG93YCAoYHNlbGZgKSBpbiB0aGUgYnJvd3NlciwgYGdsb2JhbGBcbiAgLy8gb24gdGhlIHNlcnZlciwgb3IgYHRoaXNgIGluIHNvbWUgdmlydHVhbCBtYWNoaW5lcy4gV2UgdXNlIGBzZWxmYFxuICAvLyBpbnN0ZWFkIG9mIGB3aW5kb3dgIGZvciBgV2ViV29ya2VyYCBzdXBwb3J0LlxuICB2YXIgcm9vdCA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYuc2VsZiA9PT0gc2VsZiAmJiBzZWxmIHx8XG4gICAgICAgICAgICB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbC5nbG9iYWwgPT09IGdsb2JhbCAmJiBnbG9iYWwgfHxcbiAgICAgICAgICAgIHRoaXMgfHxcbiAgICAgICAgICAgIHt9O1xuXG4gIC8vIFNhdmUgdGhlIHByZXZpb3VzIHZhbHVlIG9mIHRoZSBgX2AgdmFyaWFibGUuXG4gIHZhciBwcmV2aW91c1VuZGVyc2NvcmUgPSByb290Ll87XG5cbiAgLy8gU2F2ZSBieXRlcyBpbiB0aGUgbWluaWZpZWQgKGJ1dCBub3QgZ3ppcHBlZCkgdmVyc2lvbjpcbiAgdmFyIEFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGUsIE9ialByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcbiAgdmFyIFN5bWJvbFByb3RvID0gdHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgPyBTeW1ib2wucHJvdG90eXBlIDogbnVsbDtcblxuICAvLyBDcmVhdGUgcXVpY2sgcmVmZXJlbmNlIHZhcmlhYmxlcyBmb3Igc3BlZWQgYWNjZXNzIHRvIGNvcmUgcHJvdG90eXBlcy5cbiAgdmFyIHB1c2ggPSBBcnJheVByb3RvLnB1c2gsXG4gICAgICBzbGljZSA9IEFycmF5UHJvdG8uc2xpY2UsXG4gICAgICB0b1N0cmluZyA9IE9ialByb3RvLnRvU3RyaW5nLFxuICAgICAgaGFzT3duUHJvcGVydHkgPSBPYmpQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuICAvLyBBbGwgKipFQ01BU2NyaXB0IDUqKiBuYXRpdmUgZnVuY3Rpb24gaW1wbGVtZW50YXRpb25zIHRoYXQgd2UgaG9wZSB0byB1c2VcbiAgLy8gYXJlIGRlY2xhcmVkIGhlcmUuXG4gIHZhciBuYXRpdmVJc0FycmF5ID0gQXJyYXkuaXNBcnJheSxcbiAgICAgIG5hdGl2ZUtleXMgPSBPYmplY3Qua2V5cyxcbiAgICAgIG5hdGl2ZUNyZWF0ZSA9IE9iamVjdC5jcmVhdGU7XG5cbiAgLy8gTmFrZWQgZnVuY3Rpb24gcmVmZXJlbmNlIGZvciBzdXJyb2dhdGUtcHJvdG90eXBlLXN3YXBwaW5nLlxuICB2YXIgQ3RvciA9IGZ1bmN0aW9uKCl7fTtcblxuICAvLyBDcmVhdGUgYSBzYWZlIHJlZmVyZW5jZSB0byB0aGUgVW5kZXJzY29yZSBvYmplY3QgZm9yIHVzZSBiZWxvdy5cbiAgdmFyIF8gPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAob2JqIGluc3RhbmNlb2YgXykgcmV0dXJuIG9iajtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgXykpIHJldHVybiBuZXcgXyhvYmopO1xuICAgIHRoaXMuX3dyYXBwZWQgPSBvYmo7XG4gIH07XG5cbiAgLy8gRXhwb3J0IHRoZSBVbmRlcnNjb3JlIG9iamVjdCBmb3IgKipOb2RlLmpzKiosIHdpdGhcbiAgLy8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZm9yIHRoZWlyIG9sZCBtb2R1bGUgQVBJLiBJZiB3ZSdyZSBpblxuICAvLyB0aGUgYnJvd3NlciwgYWRkIGBfYCBhcyBhIGdsb2JhbCBvYmplY3QuXG4gIC8vIChgbm9kZVR5cGVgIGlzIGNoZWNrZWQgdG8gZW5zdXJlIHRoYXQgYG1vZHVsZWBcbiAgLy8gYW5kIGBleHBvcnRzYCBhcmUgbm90IEhUTUwgZWxlbWVudHMuKVxuICBpZiAodHlwZW9mIGV4cG9ydHMgIT0gJ3VuZGVmaW5lZCcgJiYgIWV4cG9ydHMubm9kZVR5cGUpIHtcbiAgICBpZiAodHlwZW9mIG1vZHVsZSAhPSAndW5kZWZpbmVkJyAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICBleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBfO1xuICAgIH1cbiAgICBleHBvcnRzLl8gPSBfO1xuICB9IGVsc2Uge1xuICAgIHJvb3QuXyA9IF87XG4gIH1cblxuICAvLyBDdXJyZW50IHZlcnNpb24uXG4gIF8uVkVSU0lPTiA9ICcxLjkuMSc7XG5cbiAgLy8gSW50ZXJuYWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIGVmZmljaWVudCAoZm9yIGN1cnJlbnQgZW5naW5lcykgdmVyc2lvblxuICAvLyBvZiB0aGUgcGFzc2VkLWluIGNhbGxiYWNrLCB0byBiZSByZXBlYXRlZGx5IGFwcGxpZWQgaW4gb3RoZXIgVW5kZXJzY29yZVxuICAvLyBmdW5jdGlvbnMuXG4gIHZhciBvcHRpbWl6ZUNiID0gZnVuY3Rpb24oZnVuYywgY29udGV4dCwgYXJnQ291bnQpIHtcbiAgICBpZiAoY29udGV4dCA9PT0gdm9pZCAwKSByZXR1cm4gZnVuYztcbiAgICBzd2l0Y2ggKGFyZ0NvdW50ID09IG51bGwgPyAzIDogYXJnQ291bnQpIHtcbiAgICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgdmFsdWUpO1xuICAgICAgfTtcbiAgICAgIC8vIFRoZSAyLWFyZ3VtZW50IGNhc2UgaXMgb21pdHRlZCBiZWNhdXNlIHdl4oCZcmUgbm90IHVzaW5nIGl0LlxuICAgICAgY2FzZSAzOiByZXR1cm4gZnVuY3Rpb24odmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKTtcbiAgICAgIH07XG4gICAgICBjYXNlIDQ6IHJldHVybiBmdW5jdGlvbihhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgYWNjdW11bGF0b3IsIHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbik7XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZnVuYy5hcHBseShjb250ZXh0LCBhcmd1bWVudHMpO1xuICAgIH07XG4gIH07XG5cbiAgdmFyIGJ1aWx0aW5JdGVyYXRlZTtcblxuICAvLyBBbiBpbnRlcm5hbCBmdW5jdGlvbiB0byBnZW5lcmF0ZSBjYWxsYmFja3MgdGhhdCBjYW4gYmUgYXBwbGllZCB0byBlYWNoXG4gIC8vIGVsZW1lbnQgaW4gYSBjb2xsZWN0aW9uLCByZXR1cm5pbmcgdGhlIGRlc2lyZWQgcmVzdWx0IOKAlCBlaXRoZXIgYGlkZW50aXR5YCxcbiAgLy8gYW4gYXJiaXRyYXJ5IGNhbGxiYWNrLCBhIHByb3BlcnR5IG1hdGNoZXIsIG9yIGEgcHJvcGVydHkgYWNjZXNzb3IuXG4gIHZhciBjYiA9IGZ1bmN0aW9uKHZhbHVlLCBjb250ZXh0LCBhcmdDb3VudCkge1xuICAgIGlmIChfLml0ZXJhdGVlICE9PSBidWlsdGluSXRlcmF0ZWUpIHJldHVybiBfLml0ZXJhdGVlKHZhbHVlLCBjb250ZXh0KTtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIF8uaWRlbnRpdHk7XG4gICAgaWYgKF8uaXNGdW5jdGlvbih2YWx1ZSkpIHJldHVybiBvcHRpbWl6ZUNiKHZhbHVlLCBjb250ZXh0LCBhcmdDb3VudCk7XG4gICAgaWYgKF8uaXNPYmplY3QodmFsdWUpICYmICFfLmlzQXJyYXkodmFsdWUpKSByZXR1cm4gXy5tYXRjaGVyKHZhbHVlKTtcbiAgICByZXR1cm4gXy5wcm9wZXJ0eSh2YWx1ZSk7XG4gIH07XG5cbiAgLy8gRXh0ZXJuYWwgd3JhcHBlciBmb3Igb3VyIGNhbGxiYWNrIGdlbmVyYXRvci4gVXNlcnMgbWF5IGN1c3RvbWl6ZVxuICAvLyBgXy5pdGVyYXRlZWAgaWYgdGhleSB3YW50IGFkZGl0aW9uYWwgcHJlZGljYXRlL2l0ZXJhdGVlIHNob3J0aGFuZCBzdHlsZXMuXG4gIC8vIFRoaXMgYWJzdHJhY3Rpb24gaGlkZXMgdGhlIGludGVybmFsLW9ubHkgYXJnQ291bnQgYXJndW1lbnQuXG4gIF8uaXRlcmF0ZWUgPSBidWlsdGluSXRlcmF0ZWUgPSBmdW5jdGlvbih2YWx1ZSwgY29udGV4dCkge1xuICAgIHJldHVybiBjYih2YWx1ZSwgY29udGV4dCwgSW5maW5pdHkpO1xuICB9O1xuXG4gIC8vIFNvbWUgZnVuY3Rpb25zIHRha2UgYSB2YXJpYWJsZSBudW1iZXIgb2YgYXJndW1lbnRzLCBvciBhIGZldyBleHBlY3RlZFxuICAvLyBhcmd1bWVudHMgYXQgdGhlIGJlZ2lubmluZyBhbmQgdGhlbiBhIHZhcmlhYmxlIG51bWJlciBvZiB2YWx1ZXMgdG8gb3BlcmF0ZVxuICAvLyBvbi4gVGhpcyBoZWxwZXIgYWNjdW11bGF0ZXMgYWxsIHJlbWFpbmluZyBhcmd1bWVudHMgcGFzdCB0aGUgZnVuY3Rpb27igJlzXG4gIC8vIGFyZ3VtZW50IGxlbmd0aCAob3IgYW4gZXhwbGljaXQgYHN0YXJ0SW5kZXhgKSwgaW50byBhbiBhcnJheSB0aGF0IGJlY29tZXNcbiAgLy8gdGhlIGxhc3QgYXJndW1lbnQuIFNpbWlsYXIgdG8gRVM24oCZcyBcInJlc3QgcGFyYW1ldGVyXCIuXG4gIHZhciByZXN0QXJndW1lbnRzID0gZnVuY3Rpb24oZnVuYywgc3RhcnRJbmRleCkge1xuICAgIHN0YXJ0SW5kZXggPSBzdGFydEluZGV4ID09IG51bGwgPyBmdW5jLmxlbmd0aCAtIDEgOiArc3RhcnRJbmRleDtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gTWF0aC5tYXgoYXJndW1lbnRzLmxlbmd0aCAtIHN0YXJ0SW5kZXgsIDApLFxuICAgICAgICAgIHJlc3QgPSBBcnJheShsZW5ndGgpLFxuICAgICAgICAgIGluZGV4ID0gMDtcbiAgICAgIGZvciAoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICByZXN0W2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleCArIHN0YXJ0SW5kZXhdO1xuICAgICAgfVxuICAgICAgc3dpdGNoIChzdGFydEluZGV4KSB7XG4gICAgICAgIGNhc2UgMDogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCByZXN0KTtcbiAgICAgICAgY2FzZSAxOiByZXR1cm4gZnVuYy5jYWxsKHRoaXMsIGFyZ3VtZW50c1swXSwgcmVzdCk7XG4gICAgICAgIGNhc2UgMjogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCBhcmd1bWVudHNbMF0sIGFyZ3VtZW50c1sxXSwgcmVzdCk7XG4gICAgICB9XG4gICAgICB2YXIgYXJncyA9IEFycmF5KHN0YXJ0SW5kZXggKyAxKTtcbiAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHN0YXJ0SW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgYXJnc1tpbmRleF0gPSBhcmd1bWVudHNbaW5kZXhdO1xuICAgICAgfVxuICAgICAgYXJnc1tzdGFydEluZGV4XSA9IHJlc3Q7XG4gICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIEFuIGludGVybmFsIGZ1bmN0aW9uIGZvciBjcmVhdGluZyBhIG5ldyBvYmplY3QgdGhhdCBpbmhlcml0cyBmcm9tIGFub3RoZXIuXG4gIHZhciBiYXNlQ3JlYXRlID0gZnVuY3Rpb24ocHJvdG90eXBlKSB7XG4gICAgaWYgKCFfLmlzT2JqZWN0KHByb3RvdHlwZSkpIHJldHVybiB7fTtcbiAgICBpZiAobmF0aXZlQ3JlYXRlKSByZXR1cm4gbmF0aXZlQ3JlYXRlKHByb3RvdHlwZSk7XG4gICAgQ3Rvci5wcm90b3R5cGUgPSBwcm90b3R5cGU7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBDdG9yO1xuICAgIEN0b3IucHJvdG90eXBlID0gbnVsbDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIHZhciBzaGFsbG93UHJvcGVydHkgPSBmdW5jdGlvbihrZXkpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gb2JqID09IG51bGwgPyB2b2lkIDAgOiBvYmpba2V5XTtcbiAgICB9O1xuICB9O1xuXG4gIHZhciBoYXMgPSBmdW5jdGlvbihvYmosIHBhdGgpIHtcbiAgICByZXR1cm4gb2JqICE9IG51bGwgJiYgaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHBhdGgpO1xuICB9XG5cbiAgdmFyIGRlZXBHZXQgPSBmdW5jdGlvbihvYmosIHBhdGgpIHtcbiAgICB2YXIgbGVuZ3RoID0gcGF0aC5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gdm9pZCAwO1xuICAgICAgb2JqID0gb2JqW3BhdGhbaV1dO1xuICAgIH1cbiAgICByZXR1cm4gbGVuZ3RoID8gb2JqIDogdm9pZCAwO1xuICB9O1xuXG4gIC8vIEhlbHBlciBmb3IgY29sbGVjdGlvbiBtZXRob2RzIHRvIGRldGVybWluZSB3aGV0aGVyIGEgY29sbGVjdGlvblxuICAvLyBzaG91bGQgYmUgaXRlcmF0ZWQgYXMgYW4gYXJyYXkgb3IgYXMgYW4gb2JqZWN0LlxuICAvLyBSZWxhdGVkOiBodHRwOi8vcGVvcGxlLm1vemlsbGEub3JnL35qb3JlbmRvcmZmL2VzNi1kcmFmdC5odG1sI3NlYy10b2xlbmd0aFxuICAvLyBBdm9pZHMgYSB2ZXJ5IG5hc3R5IGlPUyA4IEpJVCBidWcgb24gQVJNLTY0LiAjMjA5NFxuICB2YXIgTUFYX0FSUkFZX0lOREVYID0gTWF0aC5wb3coMiwgNTMpIC0gMTtcbiAgdmFyIGdldExlbmd0aCA9IHNoYWxsb3dQcm9wZXJ0eSgnbGVuZ3RoJyk7XG4gIHZhciBpc0FycmF5TGlrZSA9IGZ1bmN0aW9uKGNvbGxlY3Rpb24pIHtcbiAgICB2YXIgbGVuZ3RoID0gZ2V0TGVuZ3RoKGNvbGxlY3Rpb24pO1xuICAgIHJldHVybiB0eXBlb2YgbGVuZ3RoID09ICdudW1iZXInICYmIGxlbmd0aCA+PSAwICYmIGxlbmd0aCA8PSBNQVhfQVJSQVlfSU5ERVg7XG4gIH07XG5cbiAgLy8gQ29sbGVjdGlvbiBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBUaGUgY29ybmVyc3RvbmUsIGFuIGBlYWNoYCBpbXBsZW1lbnRhdGlvbiwgYWthIGBmb3JFYWNoYC5cbiAgLy8gSGFuZGxlcyByYXcgb2JqZWN0cyBpbiBhZGRpdGlvbiB0byBhcnJheS1saWtlcy4gVHJlYXRzIGFsbFxuICAvLyBzcGFyc2UgYXJyYXktbGlrZXMgYXMgaWYgdGhleSB3ZXJlIGRlbnNlLlxuICBfLmVhY2ggPSBfLmZvckVhY2ggPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBvcHRpbWl6ZUNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICB2YXIgaSwgbGVuZ3RoO1xuICAgIGlmIChpc0FycmF5TGlrZShvYmopKSB7XG4gICAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSBvYmoubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaXRlcmF0ZWUob2JqW2ldLCBpLCBvYmopO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIga2V5cyA9IF8ua2V5cyhvYmopO1xuICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBpdGVyYXRlZShvYmpba2V5c1tpXV0sIGtleXNbaV0sIG9iaik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH07XG5cbiAgLy8gUmV0dXJuIHRoZSByZXN1bHRzIG9mIGFwcGx5aW5nIHRoZSBpdGVyYXRlZSB0byBlYWNoIGVsZW1lbnQuXG4gIF8ubWFwID0gXy5jb2xsZWN0ID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHZhciBrZXlzID0gIWlzQXJyYXlMaWtlKG9iaikgJiYgXy5rZXlzKG9iaiksXG4gICAgICAgIGxlbmd0aCA9IChrZXlzIHx8IG9iaikubGVuZ3RoLFxuICAgICAgICByZXN1bHRzID0gQXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgY3VycmVudEtleSA9IGtleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAgcmVzdWx0c1tpbmRleF0gPSBpdGVyYXRlZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaik7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRzO1xuICB9O1xuXG4gIC8vIENyZWF0ZSBhIHJlZHVjaW5nIGZ1bmN0aW9uIGl0ZXJhdGluZyBsZWZ0IG9yIHJpZ2h0LlxuICB2YXIgY3JlYXRlUmVkdWNlID0gZnVuY3Rpb24oZGlyKSB7XG4gICAgLy8gV3JhcCBjb2RlIHRoYXQgcmVhc3NpZ25zIGFyZ3VtZW50IHZhcmlhYmxlcyBpbiBhIHNlcGFyYXRlIGZ1bmN0aW9uIHRoYW5cbiAgICAvLyB0aGUgb25lIHRoYXQgYWNjZXNzZXMgYGFyZ3VtZW50cy5sZW5ndGhgIHRvIGF2b2lkIGEgcGVyZiBoaXQuICgjMTk5MSlcbiAgICB2YXIgcmVkdWNlciA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIG1lbW8sIGluaXRpYWwpIHtcbiAgICAgIHZhciBrZXlzID0gIWlzQXJyYXlMaWtlKG9iaikgJiYgXy5rZXlzKG9iaiksXG4gICAgICAgICAgbGVuZ3RoID0gKGtleXMgfHwgb2JqKS5sZW5ndGgsXG4gICAgICAgICAgaW5kZXggPSBkaXIgPiAwID8gMCA6IGxlbmd0aCAtIDE7XG4gICAgICBpZiAoIWluaXRpYWwpIHtcbiAgICAgICAgbWVtbyA9IG9ialtrZXlzID8ga2V5c1tpbmRleF0gOiBpbmRleF07XG4gICAgICAgIGluZGV4ICs9IGRpcjtcbiAgICAgIH1cbiAgICAgIGZvciAoOyBpbmRleCA+PSAwICYmIGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSBkaXIpIHtcbiAgICAgICAgdmFyIGN1cnJlbnRLZXkgPSBrZXlzID8ga2V5c1tpbmRleF0gOiBpbmRleDtcbiAgICAgICAgbWVtbyA9IGl0ZXJhdGVlKG1lbW8sIG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtZW1vO1xuICAgIH07XG5cbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgbWVtbywgY29udGV4dCkge1xuICAgICAgdmFyIGluaXRpYWwgPSBhcmd1bWVudHMubGVuZ3RoID49IDM7XG4gICAgICByZXR1cm4gcmVkdWNlcihvYmosIG9wdGltaXplQ2IoaXRlcmF0ZWUsIGNvbnRleHQsIDQpLCBtZW1vLCBpbml0aWFsKTtcbiAgICB9O1xuICB9O1xuXG4gIC8vICoqUmVkdWNlKiogYnVpbGRzIHVwIGEgc2luZ2xlIHJlc3VsdCBmcm9tIGEgbGlzdCBvZiB2YWx1ZXMsIGFrYSBgaW5qZWN0YCxcbiAgLy8gb3IgYGZvbGRsYC5cbiAgXy5yZWR1Y2UgPSBfLmZvbGRsID0gXy5pbmplY3QgPSBjcmVhdGVSZWR1Y2UoMSk7XG5cbiAgLy8gVGhlIHJpZ2h0LWFzc29jaWF0aXZlIHZlcnNpb24gb2YgcmVkdWNlLCBhbHNvIGtub3duIGFzIGBmb2xkcmAuXG4gIF8ucmVkdWNlUmlnaHQgPSBfLmZvbGRyID0gY3JlYXRlUmVkdWNlKC0xKTtcblxuICAvLyBSZXR1cm4gdGhlIGZpcnN0IHZhbHVlIHdoaWNoIHBhc3NlcyBhIHRydXRoIHRlc3QuIEFsaWFzZWQgYXMgYGRldGVjdGAuXG4gIF8uZmluZCA9IF8uZGV0ZWN0ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIga2V5RmluZGVyID0gaXNBcnJheUxpa2Uob2JqKSA/IF8uZmluZEluZGV4IDogXy5maW5kS2V5O1xuICAgIHZhciBrZXkgPSBrZXlGaW5kZXIob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIGlmIChrZXkgIT09IHZvaWQgMCAmJiBrZXkgIT09IC0xKSByZXR1cm4gb2JqW2tleV07XG4gIH07XG5cbiAgLy8gUmV0dXJuIGFsbCB0aGUgZWxlbWVudHMgdGhhdCBwYXNzIGEgdHJ1dGggdGVzdC5cbiAgLy8gQWxpYXNlZCBhcyBgc2VsZWN0YC5cbiAgXy5maWx0ZXIgPSBfLnNlbGVjdCA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkge1xuICAgICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGxpc3QpKSByZXN1bHRzLnB1c2godmFsdWUpO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHRzO1xuICB9O1xuXG4gIC8vIFJldHVybiBhbGwgdGhlIGVsZW1lbnRzIGZvciB3aGljaCBhIHRydXRoIHRlc3QgZmFpbHMuXG4gIF8ucmVqZWN0ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gXy5maWx0ZXIob2JqLCBfLm5lZ2F0ZShjYihwcmVkaWNhdGUpKSwgY29udGV4dCk7XG4gIH07XG5cbiAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgYWxsIG9mIHRoZSBlbGVtZW50cyBtYXRjaCBhIHRydXRoIHRlc3QuXG4gIC8vIEFsaWFzZWQgYXMgYGFsbGAuXG4gIF8uZXZlcnkgPSBfLmFsbCA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICB2YXIga2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYmIF8ua2V5cyhvYmopLFxuICAgICAgICBsZW5ndGggPSAoa2V5cyB8fCBvYmopLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgY3VycmVudEtleSA9IGtleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAgaWYgKCFwcmVkaWNhdGUob2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIC8vIERldGVybWluZSBpZiBhdCBsZWFzdCBvbmUgZWxlbWVudCBpbiB0aGUgb2JqZWN0IG1hdGNoZXMgYSB0cnV0aCB0ZXN0LlxuICAvLyBBbGlhc2VkIGFzIGBhbnlgLlxuICBfLnNvbWUgPSBfLmFueSA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICB2YXIga2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYmIF8ua2V5cyhvYmopLFxuICAgICAgICBsZW5ndGggPSAoa2V5cyB8fCBvYmopLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgY3VycmVudEtleSA9IGtleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAgaWYgKHByZWRpY2F0ZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaikpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgLy8gRGV0ZXJtaW5lIGlmIHRoZSBhcnJheSBvciBvYmplY3QgY29udGFpbnMgYSBnaXZlbiBpdGVtICh1c2luZyBgPT09YCkuXG4gIC8vIEFsaWFzZWQgYXMgYGluY2x1ZGVzYCBhbmQgYGluY2x1ZGVgLlxuICBfLmNvbnRhaW5zID0gXy5pbmNsdWRlcyA9IF8uaW5jbHVkZSA9IGZ1bmN0aW9uKG9iaiwgaXRlbSwgZnJvbUluZGV4LCBndWFyZCkge1xuICAgIGlmICghaXNBcnJheUxpa2Uob2JqKSkgb2JqID0gXy52YWx1ZXMob2JqKTtcbiAgICBpZiAodHlwZW9mIGZyb21JbmRleCAhPSAnbnVtYmVyJyB8fCBndWFyZCkgZnJvbUluZGV4ID0gMDtcbiAgICByZXR1cm4gXy5pbmRleE9mKG9iaiwgaXRlbSwgZnJvbUluZGV4KSA+PSAwO1xuICB9O1xuXG4gIC8vIEludm9rZSBhIG1ldGhvZCAod2l0aCBhcmd1bWVudHMpIG9uIGV2ZXJ5IGl0ZW0gaW4gYSBjb2xsZWN0aW9uLlxuICBfLmludm9rZSA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24ob2JqLCBwYXRoLCBhcmdzKSB7XG4gICAgdmFyIGNvbnRleHRQYXRoLCBmdW5jO1xuICAgIGlmIChfLmlzRnVuY3Rpb24ocGF0aCkpIHtcbiAgICAgIGZ1bmMgPSBwYXRoO1xuICAgIH0gZWxzZSBpZiAoXy5pc0FycmF5KHBhdGgpKSB7XG4gICAgICBjb250ZXh0UGF0aCA9IHBhdGguc2xpY2UoMCwgLTEpO1xuICAgICAgcGF0aCA9IHBhdGhbcGF0aC5sZW5ndGggLSAxXTtcbiAgICB9XG4gICAgcmV0dXJuIF8ubWFwKG9iaiwgZnVuY3Rpb24oY29udGV4dCkge1xuICAgICAgdmFyIG1ldGhvZCA9IGZ1bmM7XG4gICAgICBpZiAoIW1ldGhvZCkge1xuICAgICAgICBpZiAoY29udGV4dFBhdGggJiYgY29udGV4dFBhdGgubGVuZ3RoKSB7XG4gICAgICAgICAgY29udGV4dCA9IGRlZXBHZXQoY29udGV4dCwgY29udGV4dFBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb250ZXh0ID09IG51bGwpIHJldHVybiB2b2lkIDA7XG4gICAgICAgIG1ldGhvZCA9IGNvbnRleHRbcGF0aF07XG4gICAgICB9XG4gICAgICByZXR1cm4gbWV0aG9kID09IG51bGwgPyBtZXRob2QgOiBtZXRob2QuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIENvbnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYG1hcGA6IGZldGNoaW5nIGEgcHJvcGVydHkuXG4gIF8ucGx1Y2sgPSBmdW5jdGlvbihvYmosIGtleSkge1xuICAgIHJldHVybiBfLm1hcChvYmosIF8ucHJvcGVydHkoa2V5KSk7XG4gIH07XG5cbiAgLy8gQ29udmVuaWVuY2UgdmVyc2lvbiBvZiBhIGNvbW1vbiB1c2UgY2FzZSBvZiBgZmlsdGVyYDogc2VsZWN0aW5nIG9ubHkgb2JqZWN0c1xuICAvLyBjb250YWluaW5nIHNwZWNpZmljIGBrZXk6dmFsdWVgIHBhaXJzLlxuICBfLndoZXJlID0gZnVuY3Rpb24ob2JqLCBhdHRycykge1xuICAgIHJldHVybiBfLmZpbHRlcihvYmosIF8ubWF0Y2hlcihhdHRycykpO1xuICB9O1xuXG4gIC8vIENvbnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYGZpbmRgOiBnZXR0aW5nIHRoZSBmaXJzdCBvYmplY3RcbiAgLy8gY29udGFpbmluZyBzcGVjaWZpYyBga2V5OnZhbHVlYCBwYWlycy5cbiAgXy5maW5kV2hlcmUgPSBmdW5jdGlvbihvYmosIGF0dHJzKSB7XG4gICAgcmV0dXJuIF8uZmluZChvYmosIF8ubWF0Y2hlcihhdHRycykpO1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgbWF4aW11bSBlbGVtZW50IChvciBlbGVtZW50LWJhc2VkIGNvbXB1dGF0aW9uKS5cbiAgXy5tYXggPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdCA9IC1JbmZpbml0eSwgbGFzdENvbXB1dGVkID0gLUluZmluaXR5LFxuICAgICAgICB2YWx1ZSwgY29tcHV0ZWQ7XG4gICAgaWYgKGl0ZXJhdGVlID09IG51bGwgfHwgdHlwZW9mIGl0ZXJhdGVlID09ICdudW1iZXInICYmIHR5cGVvZiBvYmpbMF0gIT0gJ29iamVjdCcgJiYgb2JqICE9IG51bGwpIHtcbiAgICAgIG9iaiA9IGlzQXJyYXlMaWtlKG9iaikgPyBvYmogOiBfLnZhbHVlcyhvYmopO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IG9iai5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICB2YWx1ZSA9IG9ialtpXTtcbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUgPiByZXN1bHQpIHtcbiAgICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHYsIGluZGV4LCBsaXN0KSB7XG4gICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUodiwgaW5kZXgsIGxpc3QpO1xuICAgICAgICBpZiAoY29tcHV0ZWQgPiBsYXN0Q29tcHV0ZWQgfHwgY29tcHV0ZWQgPT09IC1JbmZpbml0eSAmJiByZXN1bHQgPT09IC1JbmZpbml0eSkge1xuICAgICAgICAgIHJlc3VsdCA9IHY7XG4gICAgICAgICAgbGFzdENvbXB1dGVkID0gY29tcHV0ZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgbWluaW11bSBlbGVtZW50IChvciBlbGVtZW50LWJhc2VkIGNvbXB1dGF0aW9uKS5cbiAgXy5taW4gPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdCA9IEluZmluaXR5LCBsYXN0Q29tcHV0ZWQgPSBJbmZpbml0eSxcbiAgICAgICAgdmFsdWUsIGNvbXB1dGVkO1xuICAgIGlmIChpdGVyYXRlZSA9PSBudWxsIHx8IHR5cGVvZiBpdGVyYXRlZSA9PSAnbnVtYmVyJyAmJiB0eXBlb2Ygb2JqWzBdICE9ICdvYmplY3QnICYmIG9iaiAhPSBudWxsKSB7XG4gICAgICBvYmogPSBpc0FycmF5TGlrZShvYmopID8gb2JqIDogXy52YWx1ZXMob2JqKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBvYmoubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFsdWUgPSBvYmpbaV07XG4gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIHZhbHVlIDwgcmVzdWx0KSB7XG4gICAgICAgICAgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgICBfLmVhY2gob2JqLCBmdW5jdGlvbih2LCBpbmRleCwgbGlzdCkge1xuICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlKHYsIGluZGV4LCBsaXN0KTtcbiAgICAgICAgaWYgKGNvbXB1dGVkIDwgbGFzdENvbXB1dGVkIHx8IGNvbXB1dGVkID09PSBJbmZpbml0eSAmJiByZXN1bHQgPT09IEluZmluaXR5KSB7XG4gICAgICAgICAgcmVzdWx0ID0gdjtcbiAgICAgICAgICBsYXN0Q29tcHV0ZWQgPSBjb21wdXRlZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gU2h1ZmZsZSBhIGNvbGxlY3Rpb24uXG4gIF8uc2h1ZmZsZSA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBfLnNhbXBsZShvYmosIEluZmluaXR5KTtcbiAgfTtcblxuICAvLyBTYW1wbGUgKipuKiogcmFuZG9tIHZhbHVlcyBmcm9tIGEgY29sbGVjdGlvbiB1c2luZyB0aGUgbW9kZXJuIHZlcnNpb24gb2YgdGhlXG4gIC8vIFtGaXNoZXItWWF0ZXMgc2h1ZmZsZV0oaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GaXNoZXLigJNZYXRlc19zaHVmZmxlKS5cbiAgLy8gSWYgKipuKiogaXMgbm90IHNwZWNpZmllZCwgcmV0dXJucyBhIHNpbmdsZSByYW5kb20gZWxlbWVudC5cbiAgLy8gVGhlIGludGVybmFsIGBndWFyZGAgYXJndW1lbnQgYWxsb3dzIGl0IHRvIHdvcmsgd2l0aCBgbWFwYC5cbiAgXy5zYW1wbGUgPSBmdW5jdGlvbihvYmosIG4sIGd1YXJkKSB7XG4gICAgaWYgKG4gPT0gbnVsbCB8fCBndWFyZCkge1xuICAgICAgaWYgKCFpc0FycmF5TGlrZShvYmopKSBvYmogPSBfLnZhbHVlcyhvYmopO1xuICAgICAgcmV0dXJuIG9ialtfLnJhbmRvbShvYmoubGVuZ3RoIC0gMSldO1xuICAgIH1cbiAgICB2YXIgc2FtcGxlID0gaXNBcnJheUxpa2Uob2JqKSA/IF8uY2xvbmUob2JqKSA6IF8udmFsdWVzKG9iaik7XG4gICAgdmFyIGxlbmd0aCA9IGdldExlbmd0aChzYW1wbGUpO1xuICAgIG4gPSBNYXRoLm1heChNYXRoLm1pbihuLCBsZW5ndGgpLCAwKTtcbiAgICB2YXIgbGFzdCA9IGxlbmd0aCAtIDE7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IG47IGluZGV4KyspIHtcbiAgICAgIHZhciByYW5kID0gXy5yYW5kb20oaW5kZXgsIGxhc3QpO1xuICAgICAgdmFyIHRlbXAgPSBzYW1wbGVbaW5kZXhdO1xuICAgICAgc2FtcGxlW2luZGV4XSA9IHNhbXBsZVtyYW5kXTtcbiAgICAgIHNhbXBsZVtyYW5kXSA9IHRlbXA7XG4gICAgfVxuICAgIHJldHVybiBzYW1wbGUuc2xpY2UoMCwgbik7XG4gIH07XG5cbiAgLy8gU29ydCB0aGUgb2JqZWN0J3MgdmFsdWVzIGJ5IGEgY3JpdGVyaW9uIHByb2R1Y2VkIGJ5IGFuIGl0ZXJhdGVlLlxuICBfLnNvcnRCeSA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHJldHVybiBfLnBsdWNrKF8ubWFwKG9iaiwgZnVuY3Rpb24odmFsdWUsIGtleSwgbGlzdCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBpbmRleDogaW5kZXgrKyxcbiAgICAgICAgY3JpdGVyaWE6IGl0ZXJhdGVlKHZhbHVlLCBrZXksIGxpc3QpXG4gICAgICB9O1xuICAgIH0pLnNvcnQoZnVuY3Rpb24obGVmdCwgcmlnaHQpIHtcbiAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYTtcbiAgICAgIHZhciBiID0gcmlnaHQuY3JpdGVyaWE7XG4gICAgICBpZiAoYSAhPT0gYikge1xuICAgICAgICBpZiAoYSA+IGIgfHwgYSA9PT0gdm9pZCAwKSByZXR1cm4gMTtcbiAgICAgICAgaWYgKGEgPCBiIHx8IGIgPT09IHZvaWQgMCkgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxlZnQuaW5kZXggLSByaWdodC5pbmRleDtcbiAgICB9KSwgJ3ZhbHVlJyk7XG4gIH07XG5cbiAgLy8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gdXNlZCBmb3IgYWdncmVnYXRlIFwiZ3JvdXAgYnlcIiBvcGVyYXRpb25zLlxuICB2YXIgZ3JvdXAgPSBmdW5jdGlvbihiZWhhdmlvciwgcGFydGl0aW9uKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICAgIHZhciByZXN1bHQgPSBwYXJ0aXRpb24gPyBbW10sIFtdXSA6IHt9O1xuICAgICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgICBfLmVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHtcbiAgICAgICAgdmFyIGtleSA9IGl0ZXJhdGVlKHZhbHVlLCBpbmRleCwgb2JqKTtcbiAgICAgICAgYmVoYXZpb3IocmVzdWx0LCB2YWx1ZSwga2V5KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICB9O1xuXG4gIC8vIEdyb3VwcyB0aGUgb2JqZWN0J3MgdmFsdWVzIGJ5IGEgY3JpdGVyaW9uLiBQYXNzIGVpdGhlciBhIHN0cmluZyBhdHRyaWJ1dGVcbiAgLy8gdG8gZ3JvdXAgYnksIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBjcml0ZXJpb24uXG4gIF8uZ3JvdXBCeSA9IGdyb3VwKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgIGlmIChoYXMocmVzdWx0LCBrZXkpKSByZXN1bHRba2V5XS5wdXNoKHZhbHVlKTsgZWxzZSByZXN1bHRba2V5XSA9IFt2YWx1ZV07XG4gIH0pO1xuXG4gIC8vIEluZGV4ZXMgdGhlIG9iamVjdCdzIHZhbHVlcyBieSBhIGNyaXRlcmlvbiwgc2ltaWxhciB0byBgZ3JvdXBCeWAsIGJ1dCBmb3JcbiAgLy8gd2hlbiB5b3Uga25vdyB0aGF0IHlvdXIgaW5kZXggdmFsdWVzIHdpbGwgYmUgdW5pcXVlLlxuICBfLmluZGV4QnkgPSBncm91cChmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgICByZXN1bHRba2V5XSA9IHZhbHVlO1xuICB9KTtcblxuICAvLyBDb3VudHMgaW5zdGFuY2VzIG9mIGFuIG9iamVjdCB0aGF0IGdyb3VwIGJ5IGEgY2VydGFpbiBjcml0ZXJpb24uIFBhc3NcbiAgLy8gZWl0aGVyIGEgc3RyaW5nIGF0dHJpYnV0ZSB0byBjb3VudCBieSwgb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlXG4gIC8vIGNyaXRlcmlvbi5cbiAgXy5jb3VudEJ5ID0gZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gICAgaWYgKGhhcyhyZXN1bHQsIGtleSkpIHJlc3VsdFtrZXldKys7IGVsc2UgcmVzdWx0W2tleV0gPSAxO1xuICB9KTtcblxuICB2YXIgcmVTdHJTeW1ib2wgPSAvW15cXHVkODAwLVxcdWRmZmZdfFtcXHVkODAwLVxcdWRiZmZdW1xcdWRjMDAtXFx1ZGZmZl18W1xcdWQ4MDAtXFx1ZGZmZl0vZztcbiAgLy8gU2FmZWx5IGNyZWF0ZSBhIHJlYWwsIGxpdmUgYXJyYXkgZnJvbSBhbnl0aGluZyBpdGVyYWJsZS5cbiAgXy50b0FycmF5ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKCFvYmopIHJldHVybiBbXTtcbiAgICBpZiAoXy5pc0FycmF5KG9iaikpIHJldHVybiBzbGljZS5jYWxsKG9iaik7XG4gICAgaWYgKF8uaXNTdHJpbmcob2JqKSkge1xuICAgICAgLy8gS2VlcCBzdXJyb2dhdGUgcGFpciBjaGFyYWN0ZXJzIHRvZ2V0aGVyXG4gICAgICByZXR1cm4gb2JqLm1hdGNoKHJlU3RyU3ltYm9sKTtcbiAgICB9XG4gICAgaWYgKGlzQXJyYXlMaWtlKG9iaikpIHJldHVybiBfLm1hcChvYmosIF8uaWRlbnRpdHkpO1xuICAgIHJldHVybiBfLnZhbHVlcyhvYmopO1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIGFuIG9iamVjdC5cbiAgXy5zaXplID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gMDtcbiAgICByZXR1cm4gaXNBcnJheUxpa2Uob2JqKSA/IG9iai5sZW5ndGggOiBfLmtleXMob2JqKS5sZW5ndGg7XG4gIH07XG5cbiAgLy8gU3BsaXQgYSBjb2xsZWN0aW9uIGludG8gdHdvIGFycmF5czogb25lIHdob3NlIGVsZW1lbnRzIGFsbCBzYXRpc2Z5IHRoZSBnaXZlblxuICAvLyBwcmVkaWNhdGUsIGFuZCBvbmUgd2hvc2UgZWxlbWVudHMgYWxsIGRvIG5vdCBzYXRpc2Z5IHRoZSBwcmVkaWNhdGUuXG4gIF8ucGFydGl0aW9uID0gZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwgcGFzcykge1xuICAgIHJlc3VsdFtwYXNzID8gMCA6IDFdLnB1c2godmFsdWUpO1xuICB9LCB0cnVlKTtcblxuICAvLyBBcnJheSBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gR2V0IHRoZSBmaXJzdCBlbGVtZW50IG9mIGFuIGFycmF5LiBQYXNzaW5nICoqbioqIHdpbGwgcmV0dXJuIHRoZSBmaXJzdCBOXG4gIC8vIHZhbHVlcyBpbiB0aGUgYXJyYXkuIEFsaWFzZWQgYXMgYGhlYWRgIGFuZCBgdGFrZWAuIFRoZSAqKmd1YXJkKiogY2hlY2tcbiAgLy8gYWxsb3dzIGl0IHRvIHdvcmsgd2l0aCBgXy5tYXBgLlxuICBfLmZpcnN0ID0gXy5oZWFkID0gXy50YWtlID0gZnVuY3Rpb24oYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgaWYgKGFycmF5ID09IG51bGwgfHwgYXJyYXkubGVuZ3RoIDwgMSkgcmV0dXJuIG4gPT0gbnVsbCA/IHZvaWQgMCA6IFtdO1xuICAgIGlmIChuID09IG51bGwgfHwgZ3VhcmQpIHJldHVybiBhcnJheVswXTtcbiAgICByZXR1cm4gXy5pbml0aWFsKGFycmF5LCBhcnJheS5sZW5ndGggLSBuKTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGV2ZXJ5dGhpbmcgYnV0IHRoZSBsYXN0IGVudHJ5IG9mIHRoZSBhcnJheS4gRXNwZWNpYWxseSB1c2VmdWwgb25cbiAgLy8gdGhlIGFyZ3VtZW50cyBvYmplY3QuIFBhc3NpbmcgKipuKiogd2lsbCByZXR1cm4gYWxsIHRoZSB2YWx1ZXMgaW5cbiAgLy8gdGhlIGFycmF5LCBleGNsdWRpbmcgdGhlIGxhc3QgTi5cbiAgXy5pbml0aWFsID0gZnVuY3Rpb24oYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgcmV0dXJuIHNsaWNlLmNhbGwoYXJyYXksIDAsIE1hdGgubWF4KDAsIGFycmF5Lmxlbmd0aCAtIChuID09IG51bGwgfHwgZ3VhcmQgPyAxIDogbikpKTtcbiAgfTtcblxuICAvLyBHZXQgdGhlIGxhc3QgZWxlbWVudCBvZiBhbiBhcnJheS4gUGFzc2luZyAqKm4qKiB3aWxsIHJldHVybiB0aGUgbGFzdCBOXG4gIC8vIHZhbHVlcyBpbiB0aGUgYXJyYXkuXG4gIF8ubGFzdCA9IGZ1bmN0aW9uKGFycmF5LCBuLCBndWFyZCkge1xuICAgIGlmIChhcnJheSA9PSBudWxsIHx8IGFycmF5Lmxlbmd0aCA8IDEpIHJldHVybiBuID09IG51bGwgPyB2b2lkIDAgOiBbXTtcbiAgICBpZiAobiA9PSBudWxsIHx8IGd1YXJkKSByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMV07XG4gICAgcmV0dXJuIF8ucmVzdChhcnJheSwgTWF0aC5tYXgoMCwgYXJyYXkubGVuZ3RoIC0gbikpO1xuICB9O1xuXG4gIC8vIFJldHVybnMgZXZlcnl0aGluZyBidXQgdGhlIGZpcnN0IGVudHJ5IG9mIHRoZSBhcnJheS4gQWxpYXNlZCBhcyBgdGFpbGAgYW5kIGBkcm9wYC5cbiAgLy8gRXNwZWNpYWxseSB1c2VmdWwgb24gdGhlIGFyZ3VtZW50cyBvYmplY3QuIFBhc3NpbmcgYW4gKipuKiogd2lsbCByZXR1cm5cbiAgLy8gdGhlIHJlc3QgTiB2YWx1ZXMgaW4gdGhlIGFycmF5LlxuICBfLnJlc3QgPSBfLnRhaWwgPSBfLmRyb3AgPSBmdW5jdGlvbihhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICByZXR1cm4gc2xpY2UuY2FsbChhcnJheSwgbiA9PSBudWxsIHx8IGd1YXJkID8gMSA6IG4pO1xuICB9O1xuXG4gIC8vIFRyaW0gb3V0IGFsbCBmYWxzeSB2YWx1ZXMgZnJvbSBhbiBhcnJheS5cbiAgXy5jb21wYWN0ID0gZnVuY3Rpb24oYXJyYXkpIHtcbiAgICByZXR1cm4gXy5maWx0ZXIoYXJyYXksIEJvb2xlYW4pO1xuICB9O1xuXG4gIC8vIEludGVybmFsIGltcGxlbWVudGF0aW9uIG9mIGEgcmVjdXJzaXZlIGBmbGF0dGVuYCBmdW5jdGlvbi5cbiAgdmFyIGZsYXR0ZW4gPSBmdW5jdGlvbihpbnB1dCwgc2hhbGxvdywgc3RyaWN0LCBvdXRwdXQpIHtcbiAgICBvdXRwdXQgPSBvdXRwdXQgfHwgW107XG4gICAgdmFyIGlkeCA9IG91dHB1dC5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChpbnB1dCk7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHZhbHVlID0gaW5wdXRbaV07XG4gICAgICBpZiAoaXNBcnJheUxpa2UodmFsdWUpICYmIChfLmlzQXJyYXkodmFsdWUpIHx8IF8uaXNBcmd1bWVudHModmFsdWUpKSkge1xuICAgICAgICAvLyBGbGF0dGVuIGN1cnJlbnQgbGV2ZWwgb2YgYXJyYXkgb3IgYXJndW1lbnRzIG9iamVjdC5cbiAgICAgICAgaWYgKHNoYWxsb3cpIHtcbiAgICAgICAgICB2YXIgaiA9IDAsIGxlbiA9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgICB3aGlsZSAoaiA8IGxlbikgb3V0cHV0W2lkeCsrXSA9IHZhbHVlW2orK107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmxhdHRlbih2YWx1ZSwgc2hhbGxvdywgc3RyaWN0LCBvdXRwdXQpO1xuICAgICAgICAgIGlkeCA9IG91dHB1dC5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIXN0cmljdCkge1xuICAgICAgICBvdXRwdXRbaWR4KytdID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH07XG5cbiAgLy8gRmxhdHRlbiBvdXQgYW4gYXJyYXksIGVpdGhlciByZWN1cnNpdmVseSAoYnkgZGVmYXVsdCksIG9yIGp1c3Qgb25lIGxldmVsLlxuICBfLmZsYXR0ZW4gPSBmdW5jdGlvbihhcnJheSwgc2hhbGxvdykge1xuICAgIHJldHVybiBmbGF0dGVuKGFycmF5LCBzaGFsbG93LCBmYWxzZSk7XG4gIH07XG5cbiAgLy8gUmV0dXJuIGEgdmVyc2lvbiBvZiB0aGUgYXJyYXkgdGhhdCBkb2VzIG5vdCBjb250YWluIHRoZSBzcGVjaWZpZWQgdmFsdWUocykuXG4gIF8ud2l0aG91dCA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oYXJyYXksIG90aGVyQXJyYXlzKSB7XG4gICAgcmV0dXJuIF8uZGlmZmVyZW5jZShhcnJheSwgb3RoZXJBcnJheXMpO1xuICB9KTtcblxuICAvLyBQcm9kdWNlIGEgZHVwbGljYXRlLWZyZWUgdmVyc2lvbiBvZiB0aGUgYXJyYXkuIElmIHRoZSBhcnJheSBoYXMgYWxyZWFkeVxuICAvLyBiZWVuIHNvcnRlZCwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiB1c2luZyBhIGZhc3RlciBhbGdvcml0aG0uXG4gIC8vIFRoZSBmYXN0ZXIgYWxnb3JpdGhtIHdpbGwgbm90IHdvcmsgd2l0aCBhbiBpdGVyYXRlZSBpZiB0aGUgaXRlcmF0ZWVcbiAgLy8gaXMgbm90IGEgb25lLXRvLW9uZSBmdW5jdGlvbiwgc28gcHJvdmlkaW5nIGFuIGl0ZXJhdGVlIHdpbGwgZGlzYWJsZVxuICAvLyB0aGUgZmFzdGVyIGFsZ29yaXRobS5cbiAgLy8gQWxpYXNlZCBhcyBgdW5pcXVlYC5cbiAgXy51bmlxID0gXy51bmlxdWUgPSBmdW5jdGlvbihhcnJheSwgaXNTb3J0ZWQsIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaWYgKCFfLmlzQm9vbGVhbihpc1NvcnRlZCkpIHtcbiAgICAgIGNvbnRleHQgPSBpdGVyYXRlZTtcbiAgICAgIGl0ZXJhdGVlID0gaXNTb3J0ZWQ7XG4gICAgICBpc1NvcnRlZCA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoaXRlcmF0ZWUgIT0gbnVsbCkgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBzZWVuID0gW107XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChhcnJheSk7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHZhbHVlID0gYXJyYXlbaV0sXG4gICAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSA/IGl0ZXJhdGVlKHZhbHVlLCBpLCBhcnJheSkgOiB2YWx1ZTtcbiAgICAgIGlmIChpc1NvcnRlZCAmJiAhaXRlcmF0ZWUpIHtcbiAgICAgICAgaWYgKCFpIHx8IHNlZW4gIT09IGNvbXB1dGVkKSByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgIHNlZW4gPSBjb21wdXRlZDtcbiAgICAgIH0gZWxzZSBpZiAoaXRlcmF0ZWUpIHtcbiAgICAgICAgaWYgKCFfLmNvbnRhaW5zKHNlZW4sIGNvbXB1dGVkKSkge1xuICAgICAgICAgIHNlZW4ucHVzaChjb21wdXRlZCk7XG4gICAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFfLmNvbnRhaW5zKHJlc3VsdCwgdmFsdWUpKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBQcm9kdWNlIGFuIGFycmF5IHRoYXQgY29udGFpbnMgdGhlIHVuaW9uOiBlYWNoIGRpc3RpbmN0IGVsZW1lbnQgZnJvbSBhbGwgb2ZcbiAgLy8gdGhlIHBhc3NlZC1pbiBhcnJheXMuXG4gIF8udW5pb24gPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKGFycmF5cykge1xuICAgIHJldHVybiBfLnVuaXEoZmxhdHRlbihhcnJheXMsIHRydWUsIHRydWUpKTtcbiAgfSk7XG5cbiAgLy8gUHJvZHVjZSBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIGV2ZXJ5IGl0ZW0gc2hhcmVkIGJldHdlZW4gYWxsIHRoZVxuICAvLyBwYXNzZWQtaW4gYXJyYXlzLlxuICBfLmludGVyc2VjdGlvbiA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBhcmdzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGFycmF5KTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IGFycmF5W2ldO1xuICAgICAgaWYgKF8uY29udGFpbnMocmVzdWx0LCBpdGVtKSkgY29udGludWU7XG4gICAgICB2YXIgajtcbiAgICAgIGZvciAoaiA9IDE7IGogPCBhcmdzTGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYgKCFfLmNvbnRhaW5zKGFyZ3VtZW50c1tqXSwgaXRlbSkpIGJyZWFrO1xuICAgICAgfVxuICAgICAgaWYgKGogPT09IGFyZ3NMZW5ndGgpIHJlc3VsdC5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFRha2UgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBvbmUgYXJyYXkgYW5kIGEgbnVtYmVyIG9mIG90aGVyIGFycmF5cy5cbiAgLy8gT25seSB0aGUgZWxlbWVudHMgcHJlc2VudCBpbiBqdXN0IHRoZSBmaXJzdCBhcnJheSB3aWxsIHJlbWFpbi5cbiAgXy5kaWZmZXJlbmNlID0gcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihhcnJheSwgcmVzdCkge1xuICAgIHJlc3QgPSBmbGF0dGVuKHJlc3QsIHRydWUsIHRydWUpO1xuICAgIHJldHVybiBfLmZpbHRlcihhcnJheSwgZnVuY3Rpb24odmFsdWUpe1xuICAgICAgcmV0dXJuICFfLmNvbnRhaW5zKHJlc3QsIHZhbHVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gQ29tcGxlbWVudCBvZiBfLnppcC4gVW56aXAgYWNjZXB0cyBhbiBhcnJheSBvZiBhcnJheXMgYW5kIGdyb3Vwc1xuICAvLyBlYWNoIGFycmF5J3MgZWxlbWVudHMgb24gc2hhcmVkIGluZGljZXMuXG4gIF8udW56aXAgPSBmdW5jdGlvbihhcnJheSkge1xuICAgIHZhciBsZW5ndGggPSBhcnJheSAmJiBfLm1heChhcnJheSwgZ2V0TGVuZ3RoKS5sZW5ndGggfHwgMDtcbiAgICB2YXIgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHJlc3VsdFtpbmRleF0gPSBfLnBsdWNrKGFycmF5LCBpbmRleCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gWmlwIHRvZ2V0aGVyIG11bHRpcGxlIGxpc3RzIGludG8gYSBzaW5nbGUgYXJyYXkgLS0gZWxlbWVudHMgdGhhdCBzaGFyZVxuICAvLyBhbiBpbmRleCBnbyB0b2dldGhlci5cbiAgXy56aXAgPSByZXN0QXJndW1lbnRzKF8udW56aXApO1xuXG4gIC8vIENvbnZlcnRzIGxpc3RzIGludG8gb2JqZWN0cy4gUGFzcyBlaXRoZXIgYSBzaW5nbGUgYXJyYXkgb2YgYFtrZXksIHZhbHVlXWBcbiAgLy8gcGFpcnMsIG9yIHR3byBwYXJhbGxlbCBhcnJheXMgb2YgdGhlIHNhbWUgbGVuZ3RoIC0tIG9uZSBvZiBrZXlzLCBhbmQgb25lIG9mXG4gIC8vIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlcy4gUGFzc2luZyBieSBwYWlycyBpcyB0aGUgcmV2ZXJzZSBvZiBfLnBhaXJzLlxuICBfLm9iamVjdCA9IGZ1bmN0aW9uKGxpc3QsIHZhbHVlcykge1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGxpc3QpOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh2YWx1ZXMpIHtcbiAgICAgICAgcmVzdWx0W2xpc3RbaV1dID0gdmFsdWVzW2ldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0W2xpc3RbaV1bMF1dID0gbGlzdFtpXVsxXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBHZW5lcmF0b3IgZnVuY3Rpb24gdG8gY3JlYXRlIHRoZSBmaW5kSW5kZXggYW5kIGZpbmRMYXN0SW5kZXggZnVuY3Rpb25zLlxuICB2YXIgY3JlYXRlUHJlZGljYXRlSW5kZXhGaW5kZXIgPSBmdW5jdGlvbihkaXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oYXJyYXksIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICAgIHZhciBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpO1xuICAgICAgdmFyIGluZGV4ID0gZGlyID4gMCA/IDAgOiBsZW5ndGggLSAxO1xuICAgICAgZm9yICg7IGluZGV4ID49IDAgJiYgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IGRpcikge1xuICAgICAgICBpZiAocHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkgcmV0dXJuIGluZGV4O1xuICAgICAgfVxuICAgICAgcmV0dXJuIC0xO1xuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyB0aGUgZmlyc3QgaW5kZXggb24gYW4gYXJyYXktbGlrZSB0aGF0IHBhc3NlcyBhIHByZWRpY2F0ZSB0ZXN0LlxuICBfLmZpbmRJbmRleCA9IGNyZWF0ZVByZWRpY2F0ZUluZGV4RmluZGVyKDEpO1xuICBfLmZpbmRMYXN0SW5kZXggPSBjcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlcigtMSk7XG5cbiAgLy8gVXNlIGEgY29tcGFyYXRvciBmdW5jdGlvbiB0byBmaWd1cmUgb3V0IHRoZSBzbWFsbGVzdCBpbmRleCBhdCB3aGljaFxuICAvLyBhbiBvYmplY3Qgc2hvdWxkIGJlIGluc2VydGVkIHNvIGFzIHRvIG1haW50YWluIG9yZGVyLiBVc2VzIGJpbmFyeSBzZWFyY2guXG4gIF8uc29ydGVkSW5kZXggPSBmdW5jdGlvbihhcnJheSwgb2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQsIDEpO1xuICAgIHZhciB2YWx1ZSA9IGl0ZXJhdGVlKG9iaik7XG4gICAgdmFyIGxvdyA9IDAsIGhpZ2ggPSBnZXRMZW5ndGgoYXJyYXkpO1xuICAgIHdoaWxlIChsb3cgPCBoaWdoKSB7XG4gICAgICB2YXIgbWlkID0gTWF0aC5mbG9vcigobG93ICsgaGlnaCkgLyAyKTtcbiAgICAgIGlmIChpdGVyYXRlZShhcnJheVttaWRdKSA8IHZhbHVlKSBsb3cgPSBtaWQgKyAxOyBlbHNlIGhpZ2ggPSBtaWQ7XG4gICAgfVxuICAgIHJldHVybiBsb3c7XG4gIH07XG5cbiAgLy8gR2VuZXJhdG9yIGZ1bmN0aW9uIHRvIGNyZWF0ZSB0aGUgaW5kZXhPZiBhbmQgbGFzdEluZGV4T2YgZnVuY3Rpb25zLlxuICB2YXIgY3JlYXRlSW5kZXhGaW5kZXIgPSBmdW5jdGlvbihkaXIsIHByZWRpY2F0ZUZpbmQsIHNvcnRlZEluZGV4KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGFycmF5LCBpdGVtLCBpZHgpIHtcbiAgICAgIHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGFycmF5KTtcbiAgICAgIGlmICh0eXBlb2YgaWR4ID09ICdudW1iZXInKSB7XG4gICAgICAgIGlmIChkaXIgPiAwKSB7XG4gICAgICAgICAgaSA9IGlkeCA+PSAwID8gaWR4IDogTWF0aC5tYXgoaWR4ICsgbGVuZ3RoLCBpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZW5ndGggPSBpZHggPj0gMCA/IE1hdGgubWluKGlkeCArIDEsIGxlbmd0aCkgOiBpZHggKyBsZW5ndGggKyAxO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNvcnRlZEluZGV4ICYmIGlkeCAmJiBsZW5ndGgpIHtcbiAgICAgICAgaWR4ID0gc29ydGVkSW5kZXgoYXJyYXksIGl0ZW0pO1xuICAgICAgICByZXR1cm4gYXJyYXlbaWR4XSA9PT0gaXRlbSA/IGlkeCA6IC0xO1xuICAgICAgfVxuICAgICAgaWYgKGl0ZW0gIT09IGl0ZW0pIHtcbiAgICAgICAgaWR4ID0gcHJlZGljYXRlRmluZChzbGljZS5jYWxsKGFycmF5LCBpLCBsZW5ndGgpLCBfLmlzTmFOKTtcbiAgICAgICAgcmV0dXJuIGlkeCA+PSAwID8gaWR4ICsgaSA6IC0xO1xuICAgICAgfVxuICAgICAgZm9yIChpZHggPSBkaXIgPiAwID8gaSA6IGxlbmd0aCAtIDE7IGlkeCA+PSAwICYmIGlkeCA8IGxlbmd0aDsgaWR4ICs9IGRpcikge1xuICAgICAgICBpZiAoYXJyYXlbaWR4XSA9PT0gaXRlbSkgcmV0dXJuIGlkeDtcbiAgICAgIH1cbiAgICAgIHJldHVybiAtMTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgcG9zaXRpb24gb2YgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYW4gaXRlbSBpbiBhbiBhcnJheSxcbiAgLy8gb3IgLTEgaWYgdGhlIGl0ZW0gaXMgbm90IGluY2x1ZGVkIGluIHRoZSBhcnJheS5cbiAgLy8gSWYgdGhlIGFycmF5IGlzIGxhcmdlIGFuZCBhbHJlYWR5IGluIHNvcnQgb3JkZXIsIHBhc3MgYHRydWVgXG4gIC8vIGZvciAqKmlzU29ydGVkKiogdG8gdXNlIGJpbmFyeSBzZWFyY2guXG4gIF8uaW5kZXhPZiA9IGNyZWF0ZUluZGV4RmluZGVyKDEsIF8uZmluZEluZGV4LCBfLnNvcnRlZEluZGV4KTtcbiAgXy5sYXN0SW5kZXhPZiA9IGNyZWF0ZUluZGV4RmluZGVyKC0xLCBfLmZpbmRMYXN0SW5kZXgpO1xuXG4gIC8vIEdlbmVyYXRlIGFuIGludGVnZXIgQXJyYXkgY29udGFpbmluZyBhbiBhcml0aG1ldGljIHByb2dyZXNzaW9uLiBBIHBvcnQgb2ZcbiAgLy8gdGhlIG5hdGl2ZSBQeXRob24gYHJhbmdlKClgIGZ1bmN0aW9uLiBTZWVcbiAgLy8gW3RoZSBQeXRob24gZG9jdW1lbnRhdGlvbl0oaHR0cDovL2RvY3MucHl0aG9uLm9yZy9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI3JhbmdlKS5cbiAgXy5yYW5nZSA9IGZ1bmN0aW9uKHN0YXJ0LCBzdG9wLCBzdGVwKSB7XG4gICAgaWYgKHN0b3AgPT0gbnVsbCkge1xuICAgICAgc3RvcCA9IHN0YXJ0IHx8IDA7XG4gICAgICBzdGFydCA9IDA7XG4gICAgfVxuICAgIGlmICghc3RlcCkge1xuICAgICAgc3RlcCA9IHN0b3AgPCBzdGFydCA/IC0xIDogMTtcbiAgICB9XG5cbiAgICB2YXIgbGVuZ3RoID0gTWF0aC5tYXgoTWF0aC5jZWlsKChzdG9wIC0gc3RhcnQpIC8gc3RlcCksIDApO1xuICAgIHZhciByYW5nZSA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICBmb3IgKHZhciBpZHggPSAwOyBpZHggPCBsZW5ndGg7IGlkeCsrLCBzdGFydCArPSBzdGVwKSB7XG4gICAgICByYW5nZVtpZHhdID0gc3RhcnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJhbmdlO1xuICB9O1xuXG4gIC8vIENodW5rIGEgc2luZ2xlIGFycmF5IGludG8gbXVsdGlwbGUgYXJyYXlzLCBlYWNoIGNvbnRhaW5pbmcgYGNvdW50YCBvciBmZXdlclxuICAvLyBpdGVtcy5cbiAgXy5jaHVuayA9IGZ1bmN0aW9uKGFycmF5LCBjb3VudCkge1xuICAgIGlmIChjb3VudCA9PSBudWxsIHx8IGNvdW50IDwgMSkgcmV0dXJuIFtdO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIgaSA9IDAsIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgICB3aGlsZSAoaSA8IGxlbmd0aCkge1xuICAgICAgcmVzdWx0LnB1c2goc2xpY2UuY2FsbChhcnJheSwgaSwgaSArPSBjb3VudCkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIEZ1bmN0aW9uIChhaGVtKSBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGV4ZWN1dGUgYSBmdW5jdGlvbiBhcyBhIGNvbnN0cnVjdG9yXG4gIC8vIG9yIGEgbm9ybWFsIGZ1bmN0aW9uIHdpdGggdGhlIHByb3ZpZGVkIGFyZ3VtZW50cy5cbiAgdmFyIGV4ZWN1dGVCb3VuZCA9IGZ1bmN0aW9uKHNvdXJjZUZ1bmMsIGJvdW5kRnVuYywgY29udGV4dCwgY2FsbGluZ0NvbnRleHQsIGFyZ3MpIHtcbiAgICBpZiAoIShjYWxsaW5nQ29udGV4dCBpbnN0YW5jZW9mIGJvdW5kRnVuYykpIHJldHVybiBzb3VyY2VGdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgIHZhciBzZWxmID0gYmFzZUNyZWF0ZShzb3VyY2VGdW5jLnByb3RvdHlwZSk7XG4gICAgdmFyIHJlc3VsdCA9IHNvdXJjZUZ1bmMuYXBwbHkoc2VsZiwgYXJncyk7XG4gICAgaWYgKF8uaXNPYmplY3QocmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICByZXR1cm4gc2VsZjtcbiAgfTtcblxuICAvLyBDcmVhdGUgYSBmdW5jdGlvbiBib3VuZCB0byBhIGdpdmVuIG9iamVjdCAoYXNzaWduaW5nIGB0aGlzYCwgYW5kIGFyZ3VtZW50cyxcbiAgLy8gb3B0aW9uYWxseSkuIERlbGVnYXRlcyB0byAqKkVDTUFTY3JpcHQgNSoqJ3MgbmF0aXZlIGBGdW5jdGlvbi5iaW5kYCBpZlxuICAvLyBhdmFpbGFibGUuXG4gIF8uYmluZCA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oZnVuYywgY29udGV4dCwgYXJncykge1xuICAgIGlmICghXy5pc0Z1bmN0aW9uKGZ1bmMpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdCaW5kIG11c3QgYmUgY2FsbGVkIG9uIGEgZnVuY3Rpb24nKTtcbiAgICB2YXIgYm91bmQgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKGNhbGxBcmdzKSB7XG4gICAgICByZXR1cm4gZXhlY3V0ZUJvdW5kKGZ1bmMsIGJvdW5kLCBjb250ZXh0LCB0aGlzLCBhcmdzLmNvbmNhdChjYWxsQXJncykpO1xuICAgIH0pO1xuICAgIHJldHVybiBib3VuZDtcbiAgfSk7XG5cbiAgLy8gUGFydGlhbGx5IGFwcGx5IGEgZnVuY3Rpb24gYnkgY3JlYXRpbmcgYSB2ZXJzaW9uIHRoYXQgaGFzIGhhZCBzb21lIG9mIGl0c1xuICAvLyBhcmd1bWVudHMgcHJlLWZpbGxlZCwgd2l0aG91dCBjaGFuZ2luZyBpdHMgZHluYW1pYyBgdGhpc2AgY29udGV4dC4gXyBhY3RzXG4gIC8vIGFzIGEgcGxhY2Vob2xkZXIgYnkgZGVmYXVsdCwgYWxsb3dpbmcgYW55IGNvbWJpbmF0aW9uIG9mIGFyZ3VtZW50cyB0byBiZVxuICAvLyBwcmUtZmlsbGVkLiBTZXQgYF8ucGFydGlhbC5wbGFjZWhvbGRlcmAgZm9yIGEgY3VzdG9tIHBsYWNlaG9sZGVyIGFyZ3VtZW50LlxuICBfLnBhcnRpYWwgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKGZ1bmMsIGJvdW5kQXJncykge1xuICAgIHZhciBwbGFjZWhvbGRlciA9IF8ucGFydGlhbC5wbGFjZWhvbGRlcjtcbiAgICB2YXIgYm91bmQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBwb3NpdGlvbiA9IDAsIGxlbmd0aCA9IGJvdW5kQXJncy5sZW5ndGg7XG4gICAgICB2YXIgYXJncyA9IEFycmF5KGxlbmd0aCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGFyZ3NbaV0gPSBib3VuZEFyZ3NbaV0gPT09IHBsYWNlaG9sZGVyID8gYXJndW1lbnRzW3Bvc2l0aW9uKytdIDogYm91bmRBcmdzW2ldO1xuICAgICAgfVxuICAgICAgd2hpbGUgKHBvc2l0aW9uIDwgYXJndW1lbnRzLmxlbmd0aCkgYXJncy5wdXNoKGFyZ3VtZW50c1twb3NpdGlvbisrXSk7XG4gICAgICByZXR1cm4gZXhlY3V0ZUJvdW5kKGZ1bmMsIGJvdW5kLCB0aGlzLCB0aGlzLCBhcmdzKTtcbiAgICB9O1xuICAgIHJldHVybiBib3VuZDtcbiAgfSk7XG5cbiAgXy5wYXJ0aWFsLnBsYWNlaG9sZGVyID0gXztcblxuICAvLyBCaW5kIGEgbnVtYmVyIG9mIGFuIG9iamVjdCdzIG1ldGhvZHMgdG8gdGhhdCBvYmplY3QuIFJlbWFpbmluZyBhcmd1bWVudHNcbiAgLy8gYXJlIHRoZSBtZXRob2QgbmFtZXMgdG8gYmUgYm91bmQuIFVzZWZ1bCBmb3IgZW5zdXJpbmcgdGhhdCBhbGwgY2FsbGJhY2tzXG4gIC8vIGRlZmluZWQgb24gYW4gb2JqZWN0IGJlbG9uZyB0byBpdC5cbiAgXy5iaW5kQWxsID0gcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihvYmosIGtleXMpIHtcbiAgICBrZXlzID0gZmxhdHRlbihrZXlzLCBmYWxzZSwgZmFsc2UpO1xuICAgIHZhciBpbmRleCA9IGtleXMubGVuZ3RoO1xuICAgIGlmIChpbmRleCA8IDEpIHRocm93IG5ldyBFcnJvcignYmluZEFsbCBtdXN0IGJlIHBhc3NlZCBmdW5jdGlvbiBuYW1lcycpO1xuICAgIHdoaWxlIChpbmRleC0tKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpbmRleF07XG4gICAgICBvYmpba2V5XSA9IF8uYmluZChvYmpba2V5XSwgb2JqKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIE1lbW9pemUgYW4gZXhwZW5zaXZlIGZ1bmN0aW9uIGJ5IHN0b3JpbmcgaXRzIHJlc3VsdHMuXG4gIF8ubWVtb2l6ZSA9IGZ1bmN0aW9uKGZ1bmMsIGhhc2hlcikge1xuICAgIHZhciBtZW1vaXplID0gZnVuY3Rpb24oa2V5KSB7XG4gICAgICB2YXIgY2FjaGUgPSBtZW1vaXplLmNhY2hlO1xuICAgICAgdmFyIGFkZHJlc3MgPSAnJyArIChoYXNoZXIgPyBoYXNoZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IGtleSk7XG4gICAgICBpZiAoIWhhcyhjYWNoZSwgYWRkcmVzcykpIGNhY2hlW2FkZHJlc3NdID0gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgcmV0dXJuIGNhY2hlW2FkZHJlc3NdO1xuICAgIH07XG4gICAgbWVtb2l6ZS5jYWNoZSA9IHt9O1xuICAgIHJldHVybiBtZW1vaXplO1xuICB9O1xuXG4gIC8vIERlbGF5cyBhIGZ1bmN0aW9uIGZvciB0aGUgZ2l2ZW4gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcywgYW5kIHRoZW4gY2FsbHNcbiAgLy8gaXQgd2l0aCB0aGUgYXJndW1lbnRzIHN1cHBsaWVkLlxuICBfLmRlbGF5ID0gcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihmdW5jLCB3YWl0LCBhcmdzKSB7XG4gICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZnVuYy5hcHBseShudWxsLCBhcmdzKTtcbiAgICB9LCB3YWl0KTtcbiAgfSk7XG5cbiAgLy8gRGVmZXJzIGEgZnVuY3Rpb24sIHNjaGVkdWxpbmcgaXQgdG8gcnVuIGFmdGVyIHRoZSBjdXJyZW50IGNhbGwgc3RhY2sgaGFzXG4gIC8vIGNsZWFyZWQuXG4gIF8uZGVmZXIgPSBfLnBhcnRpYWwoXy5kZWxheSwgXywgMSk7XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uLCB0aGF0LCB3aGVuIGludm9rZWQsIHdpbGwgb25seSBiZSB0cmlnZ2VyZWQgYXQgbW9zdCBvbmNlXG4gIC8vIGR1cmluZyBhIGdpdmVuIHdpbmRvdyBvZiB0aW1lLiBOb3JtYWxseSwgdGhlIHRocm90dGxlZCBmdW5jdGlvbiB3aWxsIHJ1blxuICAvLyBhcyBtdWNoIGFzIGl0IGNhbiwgd2l0aG91dCBldmVyIGdvaW5nIG1vcmUgdGhhbiBvbmNlIHBlciBgd2FpdGAgZHVyYXRpb247XG4gIC8vIGJ1dCBpZiB5b3UnZCBsaWtlIHRvIGRpc2FibGUgdGhlIGV4ZWN1dGlvbiBvbiB0aGUgbGVhZGluZyBlZGdlLCBwYXNzXG4gIC8vIGB7bGVhZGluZzogZmFsc2V9YC4gVG8gZGlzYWJsZSBleGVjdXRpb24gb24gdGhlIHRyYWlsaW5nIGVkZ2UsIGRpdHRvLlxuICBfLnRocm90dGxlID0gZnVuY3Rpb24oZnVuYywgd2FpdCwgb3B0aW9ucykge1xuICAgIHZhciB0aW1lb3V0LCBjb250ZXh0LCBhcmdzLCByZXN1bHQ7XG4gICAgdmFyIHByZXZpb3VzID0gMDtcbiAgICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTtcblxuICAgIHZhciBsYXRlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgcHJldmlvdXMgPSBvcHRpb25zLmxlYWRpbmcgPT09IGZhbHNlID8gMCA6IF8ubm93KCk7XG4gICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICBpZiAoIXRpbWVvdXQpIGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAgICB9O1xuXG4gICAgdmFyIHRocm90dGxlZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIG5vdyA9IF8ubm93KCk7XG4gICAgICBpZiAoIXByZXZpb3VzICYmIG9wdGlvbnMubGVhZGluZyA9PT0gZmFsc2UpIHByZXZpb3VzID0gbm93O1xuICAgICAgdmFyIHJlbWFpbmluZyA9IHdhaXQgLSAobm93IC0gcHJldmlvdXMpO1xuICAgICAgY29udGV4dCA9IHRoaXM7XG4gICAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgaWYgKHJlbWFpbmluZyA8PSAwIHx8IHJlbWFpbmluZyA+IHdhaXQpIHtcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcHJldmlvdXMgPSBub3c7XG4gICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAgIGlmICghdGltZW91dCkgY29udGV4dCA9IGFyZ3MgPSBudWxsO1xuICAgICAgfSBlbHNlIGlmICghdGltZW91dCAmJiBvcHRpb25zLnRyYWlsaW5nICE9PSBmYWxzZSkge1xuICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgcmVtYWluaW5nKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIHRocm90dGxlZC5jYW5jZWwgPSBmdW5jdGlvbigpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgIHByZXZpb3VzID0gMDtcbiAgICAgIHRpbWVvdXQgPSBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgfTtcblxuICAgIHJldHVybiB0aHJvdHRsZWQ7XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uLCB0aGF0LCBhcyBsb25nIGFzIGl0IGNvbnRpbnVlcyB0byBiZSBpbnZva2VkLCB3aWxsIG5vdFxuICAvLyBiZSB0cmlnZ2VyZWQuIFRoZSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBhZnRlciBpdCBzdG9wcyBiZWluZyBjYWxsZWQgZm9yXG4gIC8vIE4gbWlsbGlzZWNvbmRzLiBJZiBgaW1tZWRpYXRlYCBpcyBwYXNzZWQsIHRyaWdnZXIgdGhlIGZ1bmN0aW9uIG9uIHRoZVxuICAvLyBsZWFkaW5nIGVkZ2UsIGluc3RlYWQgb2YgdGhlIHRyYWlsaW5nLlxuICBfLmRlYm91bmNlID0gZnVuY3Rpb24oZnVuYywgd2FpdCwgaW1tZWRpYXRlKSB7XG4gICAgdmFyIHRpbWVvdXQsIHJlc3VsdDtcblxuICAgIHZhciBsYXRlciA9IGZ1bmN0aW9uKGNvbnRleHQsIGFyZ3MpIHtcbiAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgaWYgKGFyZ3MpIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgfTtcblxuICAgIHZhciBkZWJvdW5jZWQgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKGFyZ3MpIHtcbiAgICAgIGlmICh0aW1lb3V0KSBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICBpZiAoaW1tZWRpYXRlKSB7XG4gICAgICAgIHZhciBjYWxsTm93ID0gIXRpbWVvdXQ7XG4gICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0KTtcbiAgICAgICAgaWYgKGNhbGxOb3cpIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aW1lb3V0ID0gXy5kZWxheShsYXRlciwgd2FpdCwgdGhpcywgYXJncyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG5cbiAgICBkZWJvdW5jZWQuY2FuY2VsID0gZnVuY3Rpb24oKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGRlYm91bmNlZDtcbiAgfTtcblxuICAvLyBSZXR1cm5zIHRoZSBmaXJzdCBmdW5jdGlvbiBwYXNzZWQgYXMgYW4gYXJndW1lbnQgdG8gdGhlIHNlY29uZCxcbiAgLy8gYWxsb3dpbmcgeW91IHRvIGFkanVzdCBhcmd1bWVudHMsIHJ1biBjb2RlIGJlZm9yZSBhbmQgYWZ0ZXIsIGFuZFxuICAvLyBjb25kaXRpb25hbGx5IGV4ZWN1dGUgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uLlxuICBfLndyYXAgPSBmdW5jdGlvbihmdW5jLCB3cmFwcGVyKSB7XG4gICAgcmV0dXJuIF8ucGFydGlhbCh3cmFwcGVyLCBmdW5jKTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgbmVnYXRlZCB2ZXJzaW9uIG9mIHRoZSBwYXNzZWQtaW4gcHJlZGljYXRlLlxuICBfLm5lZ2F0ZSA9IGZ1bmN0aW9uKHByZWRpY2F0ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiAhcHJlZGljYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBpcyB0aGUgY29tcG9zaXRpb24gb2YgYSBsaXN0IG9mIGZ1bmN0aW9ucywgZWFjaFxuICAvLyBjb25zdW1pbmcgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gdGhhdCBmb2xsb3dzLlxuICBfLmNvbXBvc2UgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICB2YXIgc3RhcnQgPSBhcmdzLmxlbmd0aCAtIDE7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGkgPSBzdGFydDtcbiAgICAgIHZhciByZXN1bHQgPSBhcmdzW3N0YXJ0XS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgd2hpbGUgKGktLSkgcmVzdWx0ID0gYXJnc1tpXS5jYWxsKHRoaXMsIHJlc3VsdCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBvbmx5IGJlIGV4ZWN1dGVkIG9uIGFuZCBhZnRlciB0aGUgTnRoIGNhbGwuXG4gIF8uYWZ0ZXIgPSBmdW5jdGlvbih0aW1lcywgZnVuYykge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIGlmICgtLXRpbWVzIDwgMSkge1xuICAgICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfVxuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBvbmx5IGJlIGV4ZWN1dGVkIHVwIHRvIChidXQgbm90IGluY2x1ZGluZykgdGhlIE50aCBjYWxsLlxuICBfLmJlZm9yZSA9IGZ1bmN0aW9uKHRpbWVzLCBmdW5jKSB7XG4gICAgdmFyIG1lbW87XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKC0tdGltZXMgPiAwKSB7XG4gICAgICAgIG1lbW8gPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9XG4gICAgICBpZiAodGltZXMgPD0gMSkgZnVuYyA9IG51bGw7XG4gICAgICByZXR1cm4gbWVtbztcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgYXQgbW9zdCBvbmUgdGltZSwgbm8gbWF0dGVyIGhvd1xuICAvLyBvZnRlbiB5b3UgY2FsbCBpdC4gVXNlZnVsIGZvciBsYXp5IGluaXRpYWxpemF0aW9uLlxuICBfLm9uY2UgPSBfLnBhcnRpYWwoXy5iZWZvcmUsIDIpO1xuXG4gIF8ucmVzdEFyZ3VtZW50cyA9IHJlc3RBcmd1bWVudHM7XG5cbiAgLy8gT2JqZWN0IEZ1bmN0aW9uc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gS2V5cyBpbiBJRSA8IDkgdGhhdCB3b24ndCBiZSBpdGVyYXRlZCBieSBgZm9yIGtleSBpbiAuLi5gIGFuZCB0aHVzIG1pc3NlZC5cbiAgdmFyIGhhc0VudW1CdWcgPSAhe3RvU3RyaW5nOiBudWxsfS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgndG9TdHJpbmcnKTtcbiAgdmFyIG5vbkVudW1lcmFibGVQcm9wcyA9IFsndmFsdWVPZicsICdpc1Byb3RvdHlwZU9mJywgJ3RvU3RyaW5nJyxcbiAgICAncHJvcGVydHlJc0VudW1lcmFibGUnLCAnaGFzT3duUHJvcGVydHknLCAndG9Mb2NhbGVTdHJpbmcnXTtcblxuICB2YXIgY29sbGVjdE5vbkVudW1Qcm9wcyA9IGZ1bmN0aW9uKG9iaiwga2V5cykge1xuICAgIHZhciBub25FbnVtSWR4ID0gbm9uRW51bWVyYWJsZVByb3BzLmxlbmd0aDtcbiAgICB2YXIgY29uc3RydWN0b3IgPSBvYmouY29uc3RydWN0b3I7XG4gICAgdmFyIHByb3RvID0gXy5pc0Z1bmN0aW9uKGNvbnN0cnVjdG9yKSAmJiBjb25zdHJ1Y3Rvci5wcm90b3R5cGUgfHwgT2JqUHJvdG87XG5cbiAgICAvLyBDb25zdHJ1Y3RvciBpcyBhIHNwZWNpYWwgY2FzZS5cbiAgICB2YXIgcHJvcCA9ICdjb25zdHJ1Y3Rvcic7XG4gICAgaWYgKGhhcyhvYmosIHByb3ApICYmICFfLmNvbnRhaW5zKGtleXMsIHByb3ApKSBrZXlzLnB1c2gocHJvcCk7XG5cbiAgICB3aGlsZSAobm9uRW51bUlkeC0tKSB7XG4gICAgICBwcm9wID0gbm9uRW51bWVyYWJsZVByb3BzW25vbkVudW1JZHhdO1xuICAgICAgaWYgKHByb3AgaW4gb2JqICYmIG9ialtwcm9wXSAhPT0gcHJvdG9bcHJvcF0gJiYgIV8uY29udGFpbnMoa2V5cywgcHJvcCkpIHtcbiAgICAgICAga2V5cy5wdXNoKHByb3ApO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvLyBSZXRyaWV2ZSB0aGUgbmFtZXMgb2YgYW4gb2JqZWN0J3Mgb3duIHByb3BlcnRpZXMuXG4gIC8vIERlbGVnYXRlcyB0byAqKkVDTUFTY3JpcHQgNSoqJ3MgbmF0aXZlIGBPYmplY3Qua2V5c2AuXG4gIF8ua2V5cyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmICghXy5pc09iamVjdChvYmopKSByZXR1cm4gW107XG4gICAgaWYgKG5hdGl2ZUtleXMpIHJldHVybiBuYXRpdmVLZXlzKG9iaik7XG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSBpZiAoaGFzKG9iaiwga2V5KSkga2V5cy5wdXNoKGtleSk7XG4gICAgLy8gQWhlbSwgSUUgPCA5LlxuICAgIGlmIChoYXNFbnVtQnVnKSBjb2xsZWN0Tm9uRW51bVByb3BzKG9iaiwga2V5cyk7XG4gICAgcmV0dXJuIGtleXM7XG4gIH07XG5cbiAgLy8gUmV0cmlldmUgYWxsIHRoZSBwcm9wZXJ0eSBuYW1lcyBvZiBhbiBvYmplY3QuXG4gIF8uYWxsS2V5cyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmICghXy5pc09iamVjdChvYmopKSByZXR1cm4gW107XG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSBrZXlzLnB1c2goa2V5KTtcbiAgICAvLyBBaGVtLCBJRSA8IDkuXG4gICAgaWYgKGhhc0VudW1CdWcpIGNvbGxlY3ROb25FbnVtUHJvcHMob2JqLCBrZXlzKTtcbiAgICByZXR1cm4ga2V5cztcbiAgfTtcblxuICAvLyBSZXRyaWV2ZSB0aGUgdmFsdWVzIG9mIGFuIG9iamVjdCdzIHByb3BlcnRpZXMuXG4gIF8udmFsdWVzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIGtleXMgPSBfLmtleXMob2JqKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIHZhbHVlcyA9IEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFsdWVzW2ldID0gb2JqW2tleXNbaV1dO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWVzO1xuICB9O1xuXG4gIC8vIFJldHVybnMgdGhlIHJlc3VsdHMgb2YgYXBwbHlpbmcgdGhlIGl0ZXJhdGVlIHRvIGVhY2ggZWxlbWVudCBvZiB0aGUgb2JqZWN0LlxuICAvLyBJbiBjb250cmFzdCB0byBfLm1hcCBpdCByZXR1cm5zIGFuIG9iamVjdC5cbiAgXy5tYXBPYmplY3QgPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgdmFyIGtleXMgPSBfLmtleXMob2JqKSxcbiAgICAgICAgbGVuZ3RoID0ga2V5cy5sZW5ndGgsXG4gICAgICAgIHJlc3VsdHMgPSB7fTtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgY3VycmVudEtleSA9IGtleXNbaW5kZXhdO1xuICAgICAgcmVzdWx0c1tjdXJyZW50S2V5XSA9IGl0ZXJhdGVlKG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH07XG5cbiAgLy8gQ29udmVydCBhbiBvYmplY3QgaW50byBhIGxpc3Qgb2YgYFtrZXksIHZhbHVlXWAgcGFpcnMuXG4gIC8vIFRoZSBvcHBvc2l0ZSBvZiBfLm9iamVjdC5cbiAgXy5wYWlycyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciBrZXlzID0gXy5rZXlzKG9iaik7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBwYWlycyA9IEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgcGFpcnNbaV0gPSBba2V5c1tpXSwgb2JqW2tleXNbaV1dXTtcbiAgICB9XG4gICAgcmV0dXJuIHBhaXJzO1xuICB9O1xuXG4gIC8vIEludmVydCB0aGUga2V5cyBhbmQgdmFsdWVzIG9mIGFuIG9iamVjdC4gVGhlIHZhbHVlcyBtdXN0IGJlIHNlcmlhbGl6YWJsZS5cbiAgXy5pbnZlcnQgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgdmFyIGtleXMgPSBfLmtleXMob2JqKTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgcmVzdWx0W29ialtrZXlzW2ldXV0gPSBrZXlzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFJldHVybiBhIHNvcnRlZCBsaXN0IG9mIHRoZSBmdW5jdGlvbiBuYW1lcyBhdmFpbGFibGUgb24gdGhlIG9iamVjdC5cbiAgLy8gQWxpYXNlZCBhcyBgbWV0aG9kc2AuXG4gIF8uZnVuY3Rpb25zID0gXy5tZXRob2RzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIG5hbWVzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgaWYgKF8uaXNGdW5jdGlvbihvYmpba2V5XSkpIG5hbWVzLnB1c2goa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIG5hbWVzLnNvcnQoKTtcbiAgfTtcblxuICAvLyBBbiBpbnRlcm5hbCBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgYXNzaWduZXIgZnVuY3Rpb25zLlxuICB2YXIgY3JlYXRlQXNzaWduZXIgPSBmdW5jdGlvbihrZXlzRnVuYywgZGVmYXVsdHMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgIGlmIChkZWZhdWx0cykgb2JqID0gT2JqZWN0KG9iaik7XG4gICAgICBpZiAobGVuZ3RoIDwgMiB8fCBvYmogPT0gbnVsbCkgcmV0dXJuIG9iajtcbiAgICAgIGZvciAodmFyIGluZGV4ID0gMTsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpbmRleF0sXG4gICAgICAgICAgICBrZXlzID0ga2V5c0Z1bmMoc291cmNlKSxcbiAgICAgICAgICAgIGwgPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICBpZiAoIWRlZmF1bHRzIHx8IG9ialtrZXldID09PSB2b2lkIDApIG9ialtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBvYmo7XG4gICAgfTtcbiAgfTtcblxuICAvLyBFeHRlbmQgYSBnaXZlbiBvYmplY3Qgd2l0aCBhbGwgdGhlIHByb3BlcnRpZXMgaW4gcGFzc2VkLWluIG9iamVjdChzKS5cbiAgXy5leHRlbmQgPSBjcmVhdGVBc3NpZ25lcihfLmFsbEtleXMpO1xuXG4gIC8vIEFzc2lnbnMgYSBnaXZlbiBvYmplY3Qgd2l0aCBhbGwgdGhlIG93biBwcm9wZXJ0aWVzIGluIHRoZSBwYXNzZWQtaW4gb2JqZWN0KHMpLlxuICAvLyAoaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2Fzc2lnbilcbiAgXy5leHRlbmRPd24gPSBfLmFzc2lnbiA9IGNyZWF0ZUFzc2lnbmVyKF8ua2V5cyk7XG5cbiAgLy8gUmV0dXJucyB0aGUgZmlyc3Qga2V5IG9uIGFuIG9iamVjdCB0aGF0IHBhc3NlcyBhIHByZWRpY2F0ZSB0ZXN0LlxuICBfLmZpbmRLZXkgPSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgdmFyIGtleXMgPSBfLmtleXMob2JqKSwga2V5O1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgaWYgKHByZWRpY2F0ZShvYmpba2V5XSwga2V5LCBvYmopKSByZXR1cm4ga2V5O1xuICAgIH1cbiAgfTtcblxuICAvLyBJbnRlcm5hbCBwaWNrIGhlbHBlciBmdW5jdGlvbiB0byBkZXRlcm1pbmUgaWYgYG9iamAgaGFzIGtleSBga2V5YC5cbiAgdmFyIGtleUluT2JqID0gZnVuY3Rpb24odmFsdWUsIGtleSwgb2JqKSB7XG4gICAgcmV0dXJuIGtleSBpbiBvYmo7XG4gIH07XG5cbiAgLy8gUmV0dXJuIGEgY29weSBvZiB0aGUgb2JqZWN0IG9ubHkgY29udGFpbmluZyB0aGUgd2hpdGVsaXN0ZWQgcHJvcGVydGllcy5cbiAgXy5waWNrID0gcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihvYmosIGtleXMpIHtcbiAgICB2YXIgcmVzdWx0ID0ge30sIGl0ZXJhdGVlID0ga2V5c1swXTtcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiByZXN1bHQ7XG4gICAgaWYgKF8uaXNGdW5jdGlvbihpdGVyYXRlZSkpIHtcbiAgICAgIGlmIChrZXlzLmxlbmd0aCA+IDEpIGl0ZXJhdGVlID0gb3B0aW1pemVDYihpdGVyYXRlZSwga2V5c1sxXSk7XG4gICAgICBrZXlzID0gXy5hbGxLZXlzKG9iaik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZXJhdGVlID0ga2V5SW5PYmo7XG4gICAgICBrZXlzID0gZmxhdHRlbihrZXlzLCBmYWxzZSwgZmFsc2UpO1xuICAgICAgb2JqID0gT2JqZWN0KG9iaik7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgIHZhciB2YWx1ZSA9IG9ialtrZXldO1xuICAgICAgaWYgKGl0ZXJhdGVlKHZhbHVlLCBrZXksIG9iaikpIHJlc3VsdFtrZXldID0gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0pO1xuXG4gIC8vIFJldHVybiBhIGNvcHkgb2YgdGhlIG9iamVjdCB3aXRob3V0IHRoZSBibGFja2xpc3RlZCBwcm9wZXJ0aWVzLlxuICBfLm9taXQgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKG9iaiwga2V5cykge1xuICAgIHZhciBpdGVyYXRlZSA9IGtleXNbMF0sIGNvbnRleHQ7XG4gICAgaWYgKF8uaXNGdW5jdGlvbihpdGVyYXRlZSkpIHtcbiAgICAgIGl0ZXJhdGVlID0gXy5uZWdhdGUoaXRlcmF0ZWUpO1xuICAgICAgaWYgKGtleXMubGVuZ3RoID4gMSkgY29udGV4dCA9IGtleXNbMV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGtleXMgPSBfLm1hcChmbGF0dGVuKGtleXMsIGZhbHNlLCBmYWxzZSksIFN0cmluZyk7XG4gICAgICBpdGVyYXRlZSA9IGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgcmV0dXJuICFfLmNvbnRhaW5zKGtleXMsIGtleSk7XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gXy5waWNrKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpO1xuICB9KTtcblxuICAvLyBGaWxsIGluIGEgZ2l2ZW4gb2JqZWN0IHdpdGggZGVmYXVsdCBwcm9wZXJ0aWVzLlxuICBfLmRlZmF1bHRzID0gY3JlYXRlQXNzaWduZXIoXy5hbGxLZXlzLCB0cnVlKTtcblxuICAvLyBDcmVhdGVzIGFuIG9iamVjdCB0aGF0IGluaGVyaXRzIGZyb20gdGhlIGdpdmVuIHByb3RvdHlwZSBvYmplY3QuXG4gIC8vIElmIGFkZGl0aW9uYWwgcHJvcGVydGllcyBhcmUgcHJvdmlkZWQgdGhlbiB0aGV5IHdpbGwgYmUgYWRkZWQgdG8gdGhlXG4gIC8vIGNyZWF0ZWQgb2JqZWN0LlxuICBfLmNyZWF0ZSA9IGZ1bmN0aW9uKHByb3RvdHlwZSwgcHJvcHMpIHtcbiAgICB2YXIgcmVzdWx0ID0gYmFzZUNyZWF0ZShwcm90b3R5cGUpO1xuICAgIGlmIChwcm9wcykgXy5leHRlbmRPd24ocmVzdWx0LCBwcm9wcyk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBDcmVhdGUgYSAoc2hhbGxvdy1jbG9uZWQpIGR1cGxpY2F0ZSBvZiBhbiBvYmplY3QuXG4gIF8uY2xvbmUgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAoIV8uaXNPYmplY3Qob2JqKSkgcmV0dXJuIG9iajtcbiAgICByZXR1cm4gXy5pc0FycmF5KG9iaikgPyBvYmouc2xpY2UoKSA6IF8uZXh0ZW5kKHt9LCBvYmopO1xuICB9O1xuXG4gIC8vIEludm9rZXMgaW50ZXJjZXB0b3Igd2l0aCB0aGUgb2JqLCBhbmQgdGhlbiByZXR1cm5zIG9iai5cbiAgLy8gVGhlIHByaW1hcnkgcHVycG9zZSBvZiB0aGlzIG1ldGhvZCBpcyB0byBcInRhcCBpbnRvXCIgYSBtZXRob2QgY2hhaW4sIGluXG4gIC8vIG9yZGVyIHRvIHBlcmZvcm0gb3BlcmF0aW9ucyBvbiBpbnRlcm1lZGlhdGUgcmVzdWx0cyB3aXRoaW4gdGhlIGNoYWluLlxuICBfLnRhcCA9IGZ1bmN0aW9uKG9iaiwgaW50ZXJjZXB0b3IpIHtcbiAgICBpbnRlcmNlcHRvcihvYmopO1xuICAgIHJldHVybiBvYmo7XG4gIH07XG5cbiAgLy8gUmV0dXJucyB3aGV0aGVyIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBzZXQgb2YgYGtleTp2YWx1ZWAgcGFpcnMuXG4gIF8uaXNNYXRjaCA9IGZ1bmN0aW9uKG9iamVjdCwgYXR0cnMpIHtcbiAgICB2YXIga2V5cyA9IF8ua2V5cyhhdHRycyksIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIGlmIChvYmplY3QgPT0gbnVsbCkgcmV0dXJuICFsZW5ndGg7XG4gICAgdmFyIG9iaiA9IE9iamVjdChvYmplY3QpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgaWYgKGF0dHJzW2tleV0gIT09IG9ialtrZXldIHx8ICEoa2V5IGluIG9iaikpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cblxuICAvLyBJbnRlcm5hbCByZWN1cnNpdmUgY29tcGFyaXNvbiBmdW5jdGlvbiBmb3IgYGlzRXF1YWxgLlxuICB2YXIgZXEsIGRlZXBFcTtcbiAgZXEgPSBmdW5jdGlvbihhLCBiLCBhU3RhY2ssIGJTdGFjaykge1xuICAgIC8vIElkZW50aWNhbCBvYmplY3RzIGFyZSBlcXVhbC4gYDAgPT09IC0wYCwgYnV0IHRoZXkgYXJlbid0IGlkZW50aWNhbC5cbiAgICAvLyBTZWUgdGhlIFtIYXJtb255IGBlZ2FsYCBwcm9wb3NhbF0oaHR0cDovL3dpa2kuZWNtYXNjcmlwdC5vcmcvZG9rdS5waHA/aWQ9aGFybW9ueTplZ2FsKS5cbiAgICBpZiAoYSA9PT0gYikgcmV0dXJuIGEgIT09IDAgfHwgMSAvIGEgPT09IDEgLyBiO1xuICAgIC8vIGBudWxsYCBvciBgdW5kZWZpbmVkYCBvbmx5IGVxdWFsIHRvIGl0c2VsZiAoc3RyaWN0IGNvbXBhcmlzb24pLlxuICAgIGlmIChhID09IG51bGwgfHwgYiA9PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gYE5hTmBzIGFyZSBlcXVpdmFsZW50LCBidXQgbm9uLXJlZmxleGl2ZS5cbiAgICBpZiAoYSAhPT0gYSkgcmV0dXJuIGIgIT09IGI7XG4gICAgLy8gRXhoYXVzdCBwcmltaXRpdmUgY2hlY2tzXG4gICAgdmFyIHR5cGUgPSB0eXBlb2YgYTtcbiAgICBpZiAodHlwZSAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgYiAhPSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBkZWVwRXEoYSwgYiwgYVN0YWNrLCBiU3RhY2spO1xuICB9O1xuXG4gIC8vIEludGVybmFsIHJlY3Vyc2l2ZSBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciBgaXNFcXVhbGAuXG4gIGRlZXBFcSA9IGZ1bmN0aW9uKGEsIGIsIGFTdGFjaywgYlN0YWNrKSB7XG4gICAgLy8gVW53cmFwIGFueSB3cmFwcGVkIG9iamVjdHMuXG4gICAgaWYgKGEgaW5zdGFuY2VvZiBfKSBhID0gYS5fd3JhcHBlZDtcbiAgICBpZiAoYiBpbnN0YW5jZW9mIF8pIGIgPSBiLl93cmFwcGVkO1xuICAgIC8vIENvbXBhcmUgYFtbQ2xhc3NdXWAgbmFtZXMuXG4gICAgdmFyIGNsYXNzTmFtZSA9IHRvU3RyaW5nLmNhbGwoYSk7XG4gICAgaWYgKGNsYXNzTmFtZSAhPT0gdG9TdHJpbmcuY2FsbChiKSkgcmV0dXJuIGZhbHNlO1xuICAgIHN3aXRjaCAoY2xhc3NOYW1lKSB7XG4gICAgICAvLyBTdHJpbmdzLCBudW1iZXJzLCByZWd1bGFyIGV4cHJlc3Npb25zLCBkYXRlcywgYW5kIGJvb2xlYW5zIGFyZSBjb21wYXJlZCBieSB2YWx1ZS5cbiAgICAgIGNhc2UgJ1tvYmplY3QgUmVnRXhwXSc6XG4gICAgICAvLyBSZWdFeHBzIGFyZSBjb2VyY2VkIHRvIHN0cmluZ3MgZm9yIGNvbXBhcmlzb24gKE5vdGU6ICcnICsgL2EvaSA9PT0gJy9hL2knKVxuICAgICAgY2FzZSAnW29iamVjdCBTdHJpbmddJzpcbiAgICAgICAgLy8gUHJpbWl0aXZlcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBvYmplY3Qgd3JhcHBlcnMgYXJlIGVxdWl2YWxlbnQ7IHRodXMsIGBcIjVcImAgaXNcbiAgICAgICAgLy8gZXF1aXZhbGVudCB0byBgbmV3IFN0cmluZyhcIjVcIilgLlxuICAgICAgICByZXR1cm4gJycgKyBhID09PSAnJyArIGI7XG4gICAgICBjYXNlICdbb2JqZWN0IE51bWJlcl0nOlxuICAgICAgICAvLyBgTmFOYHMgYXJlIGVxdWl2YWxlbnQsIGJ1dCBub24tcmVmbGV4aXZlLlxuICAgICAgICAvLyBPYmplY3QoTmFOKSBpcyBlcXVpdmFsZW50IHRvIE5hTi5cbiAgICAgICAgaWYgKCthICE9PSArYSkgcmV0dXJuICtiICE9PSArYjtcbiAgICAgICAgLy8gQW4gYGVnYWxgIGNvbXBhcmlzb24gaXMgcGVyZm9ybWVkIGZvciBvdGhlciBudW1lcmljIHZhbHVlcy5cbiAgICAgICAgcmV0dXJuICthID09PSAwID8gMSAvICthID09PSAxIC8gYiA6ICthID09PSArYjtcbiAgICAgIGNhc2UgJ1tvYmplY3QgRGF0ZV0nOlxuICAgICAgY2FzZSAnW29iamVjdCBCb29sZWFuXSc6XG4gICAgICAgIC8vIENvZXJjZSBkYXRlcyBhbmQgYm9vbGVhbnMgdG8gbnVtZXJpYyBwcmltaXRpdmUgdmFsdWVzLiBEYXRlcyBhcmUgY29tcGFyZWQgYnkgdGhlaXJcbiAgICAgICAgLy8gbWlsbGlzZWNvbmQgcmVwcmVzZW50YXRpb25zLiBOb3RlIHRoYXQgaW52YWxpZCBkYXRlcyB3aXRoIG1pbGxpc2Vjb25kIHJlcHJlc2VudGF0aW9uc1xuICAgICAgICAvLyBvZiBgTmFOYCBhcmUgbm90IGVxdWl2YWxlbnQuXG4gICAgICAgIHJldHVybiArYSA9PT0gK2I7XG4gICAgICBjYXNlICdbb2JqZWN0IFN5bWJvbF0nOlxuICAgICAgICByZXR1cm4gU3ltYm9sUHJvdG8udmFsdWVPZi5jYWxsKGEpID09PSBTeW1ib2xQcm90by52YWx1ZU9mLmNhbGwoYik7XG4gICAgfVxuXG4gICAgdmFyIGFyZUFycmF5cyA9IGNsYXNzTmFtZSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICBpZiAoIWFyZUFycmF5cykge1xuICAgICAgaWYgKHR5cGVvZiBhICE9ICdvYmplY3QnIHx8IHR5cGVvZiBiICE9ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIC8vIE9iamVjdHMgd2l0aCBkaWZmZXJlbnQgY29uc3RydWN0b3JzIGFyZSBub3QgZXF1aXZhbGVudCwgYnV0IGBPYmplY3RgcyBvciBgQXJyYXlgc1xuICAgICAgLy8gZnJvbSBkaWZmZXJlbnQgZnJhbWVzIGFyZS5cbiAgICAgIHZhciBhQ3RvciA9IGEuY29uc3RydWN0b3IsIGJDdG9yID0gYi5jb25zdHJ1Y3RvcjtcbiAgICAgIGlmIChhQ3RvciAhPT0gYkN0b3IgJiYgIShfLmlzRnVuY3Rpb24oYUN0b3IpICYmIGFDdG9yIGluc3RhbmNlb2YgYUN0b3IgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfLmlzRnVuY3Rpb24oYkN0b3IpICYmIGJDdG9yIGluc3RhbmNlb2YgYkN0b3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICYmICgnY29uc3RydWN0b3InIGluIGEgJiYgJ2NvbnN0cnVjdG9yJyBpbiBiKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIEFzc3VtZSBlcXVhbGl0eSBmb3IgY3ljbGljIHN0cnVjdHVyZXMuIFRoZSBhbGdvcml0aG0gZm9yIGRldGVjdGluZyBjeWNsaWNcbiAgICAvLyBzdHJ1Y3R1cmVzIGlzIGFkYXB0ZWQgZnJvbSBFUyA1LjEgc2VjdGlvbiAxNS4xMi4zLCBhYnN0cmFjdCBvcGVyYXRpb24gYEpPYC5cblxuICAgIC8vIEluaXRpYWxpemluZyBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgICAvLyBJdCdzIGRvbmUgaGVyZSBzaW5jZSB3ZSBvbmx5IG5lZWQgdGhlbSBmb3Igb2JqZWN0cyBhbmQgYXJyYXlzIGNvbXBhcmlzb24uXG4gICAgYVN0YWNrID0gYVN0YWNrIHx8IFtdO1xuICAgIGJTdGFjayA9IGJTdGFjayB8fCBbXTtcbiAgICB2YXIgbGVuZ3RoID0gYVN0YWNrLmxlbmd0aDtcbiAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgIC8vIExpbmVhciBzZWFyY2guIFBlcmZvcm1hbmNlIGlzIGludmVyc2VseSBwcm9wb3J0aW9uYWwgdG8gdGhlIG51bWJlciBvZlxuICAgICAgLy8gdW5pcXVlIG5lc3RlZCBzdHJ1Y3R1cmVzLlxuICAgICAgaWYgKGFTdGFja1tsZW5ndGhdID09PSBhKSByZXR1cm4gYlN0YWNrW2xlbmd0aF0gPT09IGI7XG4gICAgfVxuXG4gICAgLy8gQWRkIHRoZSBmaXJzdCBvYmplY3QgdG8gdGhlIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmplY3RzLlxuICAgIGFTdGFjay5wdXNoKGEpO1xuICAgIGJTdGFjay5wdXNoKGIpO1xuXG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIGFuZCBhcnJheXMuXG4gICAgaWYgKGFyZUFycmF5cykge1xuICAgICAgLy8gQ29tcGFyZSBhcnJheSBsZW5ndGhzIHRvIGRldGVybWluZSBpZiBhIGRlZXAgY29tcGFyaXNvbiBpcyBuZWNlc3NhcnkuXG4gICAgICBsZW5ndGggPSBhLmxlbmd0aDtcbiAgICAgIGlmIChsZW5ndGggIT09IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICAvLyBEZWVwIGNvbXBhcmUgdGhlIGNvbnRlbnRzLCBpZ25vcmluZyBub24tbnVtZXJpYyBwcm9wZXJ0aWVzLlxuICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgIGlmICghZXEoYVtsZW5ndGhdLCBiW2xlbmd0aF0sIGFTdGFjaywgYlN0YWNrKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBEZWVwIGNvbXBhcmUgb2JqZWN0cy5cbiAgICAgIHZhciBrZXlzID0gXy5rZXlzKGEpLCBrZXk7XG4gICAgICBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICAgIC8vIEVuc3VyZSB0aGF0IGJvdGggb2JqZWN0cyBjb250YWluIHRoZSBzYW1lIG51bWJlciBvZiBwcm9wZXJ0aWVzIGJlZm9yZSBjb21wYXJpbmcgZGVlcCBlcXVhbGl0eS5cbiAgICAgIGlmIChfLmtleXMoYikubGVuZ3RoICE9PSBsZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgICAvLyBEZWVwIGNvbXBhcmUgZWFjaCBtZW1iZXJcbiAgICAgICAga2V5ID0ga2V5c1tsZW5ndGhdO1xuICAgICAgICBpZiAoIShoYXMoYiwga2V5KSAmJiBlcShhW2tleV0sIGJba2V5XSwgYVN0YWNrLCBiU3RhY2spKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBSZW1vdmUgdGhlIGZpcnN0IG9iamVjdCBmcm9tIHRoZSBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgICBhU3RhY2sucG9wKCk7XG4gICAgYlN0YWNrLnBvcCgpO1xuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIC8vIFBlcmZvcm0gYSBkZWVwIGNvbXBhcmlzb24gdG8gY2hlY2sgaWYgdHdvIG9iamVjdHMgYXJlIGVxdWFsLlxuICBfLmlzRXF1YWwgPSBmdW5jdGlvbihhLCBiKSB7XG4gICAgcmV0dXJuIGVxKGEsIGIpO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gYXJyYXksIHN0cmluZywgb3Igb2JqZWN0IGVtcHR5P1xuICAvLyBBbiBcImVtcHR5XCIgb2JqZWN0IGhhcyBubyBlbnVtZXJhYmxlIG93bi1wcm9wZXJ0aWVzLlxuICBfLmlzRW1wdHkgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0FycmF5TGlrZShvYmopICYmIChfLmlzQXJyYXkob2JqKSB8fCBfLmlzU3RyaW5nKG9iaikgfHwgXy5pc0FyZ3VtZW50cyhvYmopKSkgcmV0dXJuIG9iai5sZW5ndGggPT09IDA7XG4gICAgcmV0dXJuIF8ua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVuIHZhbHVlIGEgRE9NIGVsZW1lbnQ/XG4gIF8uaXNFbGVtZW50ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuICEhKG9iaiAmJiBvYmoubm9kZVR5cGUgPT09IDEpO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgYW4gYXJyYXk/XG4gIC8vIERlbGVnYXRlcyB0byBFQ01BNSdzIG5hdGl2ZSBBcnJheS5pc0FycmF5XG4gIF8uaXNBcnJheSA9IG5hdGl2ZUlzQXJyYXkgfHwgZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIHRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVuIHZhcmlhYmxlIGFuIG9iamVjdD9cbiAgXy5pc09iamVjdCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciB0eXBlID0gdHlwZW9mIG9iajtcbiAgICByZXR1cm4gdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlID09PSAnb2JqZWN0JyAmJiAhIW9iajtcbiAgfTtcblxuICAvLyBBZGQgc29tZSBpc1R5cGUgbWV0aG9kczogaXNBcmd1bWVudHMsIGlzRnVuY3Rpb24sIGlzU3RyaW5nLCBpc051bWJlciwgaXNEYXRlLCBpc1JlZ0V4cCwgaXNFcnJvciwgaXNNYXAsIGlzV2Vha01hcCwgaXNTZXQsIGlzV2Vha1NldC5cbiAgXy5lYWNoKFsnQXJndW1lbnRzJywgJ0Z1bmN0aW9uJywgJ1N0cmluZycsICdOdW1iZXInLCAnRGF0ZScsICdSZWdFeHAnLCAnRXJyb3InLCAnU3ltYm9sJywgJ01hcCcsICdXZWFrTWFwJywgJ1NldCcsICdXZWFrU2V0J10sIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBfWydpcycgKyBuYW1lXSA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIHRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgJyArIG5hbWUgKyAnXSc7XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gRGVmaW5lIGEgZmFsbGJhY2sgdmVyc2lvbiBvZiB0aGUgbWV0aG9kIGluIGJyb3dzZXJzIChhaGVtLCBJRSA8IDkpLCB3aGVyZVxuICAvLyB0aGVyZSBpc24ndCBhbnkgaW5zcGVjdGFibGUgXCJBcmd1bWVudHNcIiB0eXBlLlxuICBpZiAoIV8uaXNBcmd1bWVudHMoYXJndW1lbnRzKSkge1xuICAgIF8uaXNBcmd1bWVudHMgPSBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBoYXMob2JqLCAnY2FsbGVlJyk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIE9wdGltaXplIGBpc0Z1bmN0aW9uYCBpZiBhcHByb3ByaWF0ZS4gV29yayBhcm91bmQgc29tZSB0eXBlb2YgYnVncyBpbiBvbGQgdjgsXG4gIC8vIElFIDExICgjMTYyMSksIFNhZmFyaSA4ICgjMTkyOSksIGFuZCBQaGFudG9tSlMgKCMyMjM2KS5cbiAgdmFyIG5vZGVsaXN0ID0gcm9vdC5kb2N1bWVudCAmJiByb290LmRvY3VtZW50LmNoaWxkTm9kZXM7XG4gIGlmICh0eXBlb2YgLy4vICE9ICdmdW5jdGlvbicgJiYgdHlwZW9mIEludDhBcnJheSAhPSAnb2JqZWN0JyAmJiB0eXBlb2Ygbm9kZWxpc3QgIT0gJ2Z1bmN0aW9uJykge1xuICAgIF8uaXNGdW5jdGlvbiA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIHR5cGVvZiBvYmogPT0gJ2Z1bmN0aW9uJyB8fCBmYWxzZTtcbiAgICB9O1xuICB9XG5cbiAgLy8gSXMgYSBnaXZlbiBvYmplY3QgYSBmaW5pdGUgbnVtYmVyP1xuICBfLmlzRmluaXRlID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuICFfLmlzU3ltYm9sKG9iaikgJiYgaXNGaW5pdGUob2JqKSAmJiAhaXNOYU4ocGFyc2VGbG9hdChvYmopKTtcbiAgfTtcblxuICAvLyBJcyB0aGUgZ2l2ZW4gdmFsdWUgYE5hTmA/XG4gIF8uaXNOYU4gPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gXy5pc051bWJlcihvYmopICYmIGlzTmFOKG9iaik7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBhIGJvb2xlYW4/XG4gIF8uaXNCb29sZWFuID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gdHJ1ZSB8fCBvYmogPT09IGZhbHNlIHx8IHRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQm9vbGVhbl0nO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgZXF1YWwgdG8gbnVsbD9cbiAgXy5pc051bGwgPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gb2JqID09PSBudWxsO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFyaWFibGUgdW5kZWZpbmVkP1xuICBfLmlzVW5kZWZpbmVkID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gdm9pZCAwO1xuICB9O1xuXG4gIC8vIFNob3J0Y3V0IGZ1bmN0aW9uIGZvciBjaGVja2luZyBpZiBhbiBvYmplY3QgaGFzIGEgZ2l2ZW4gcHJvcGVydHkgZGlyZWN0bHlcbiAgLy8gb24gaXRzZWxmIChpbiBvdGhlciB3b3Jkcywgbm90IG9uIGEgcHJvdG90eXBlKS5cbiAgXy5oYXMgPSBmdW5jdGlvbihvYmosIHBhdGgpIHtcbiAgICBpZiAoIV8uaXNBcnJheShwYXRoKSkge1xuICAgICAgcmV0dXJuIGhhcyhvYmosIHBhdGgpO1xuICAgIH1cbiAgICB2YXIgbGVuZ3RoID0gcGF0aC5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IHBhdGhbaV07XG4gICAgICBpZiAob2JqID09IG51bGwgfHwgIWhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIG9iaiA9IG9ialtrZXldO1xuICAgIH1cbiAgICByZXR1cm4gISFsZW5ndGg7XG4gIH07XG5cbiAgLy8gVXRpbGl0eSBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBSdW4gVW5kZXJzY29yZS5qcyBpbiAqbm9Db25mbGljdCogbW9kZSwgcmV0dXJuaW5nIHRoZSBgX2AgdmFyaWFibGUgdG8gaXRzXG4gIC8vIHByZXZpb3VzIG93bmVyLiBSZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBVbmRlcnNjb3JlIG9iamVjdC5cbiAgXy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24oKSB7XG4gICAgcm9vdC5fID0gcHJldmlvdXNVbmRlcnNjb3JlO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIC8vIEtlZXAgdGhlIGlkZW50aXR5IGZ1bmN0aW9uIGFyb3VuZCBmb3IgZGVmYXVsdCBpdGVyYXRlZXMuXG4gIF8uaWRlbnRpdHkgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfTtcblxuICAvLyBQcmVkaWNhdGUtZ2VuZXJhdGluZyBmdW5jdGlvbnMuIE9mdGVuIHVzZWZ1bCBvdXRzaWRlIG9mIFVuZGVyc2NvcmUuXG4gIF8uY29uc3RhbnQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9O1xuICB9O1xuXG4gIF8ubm9vcCA9IGZ1bmN0aW9uKCl7fTtcblxuICAvLyBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCwgd2hlbiBwYXNzZWQgYW4gb2JqZWN0LCB3aWxsIHRyYXZlcnNlIHRoYXQgb2JqZWN04oCZc1xuICAvLyBwcm9wZXJ0aWVzIGRvd24gdGhlIGdpdmVuIGBwYXRoYCwgc3BlY2lmaWVkIGFzIGFuIGFycmF5IG9mIGtleXMgb3IgaW5kZXhlcy5cbiAgXy5wcm9wZXJ0eSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgICBpZiAoIV8uaXNBcnJheShwYXRoKSkge1xuICAgICAgcmV0dXJuIHNoYWxsb3dQcm9wZXJ0eShwYXRoKTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIGRlZXBHZXQob2JqLCBwYXRoKTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIEdlbmVyYXRlcyBhIGZ1bmN0aW9uIGZvciBhIGdpdmVuIG9iamVjdCB0aGF0IHJldHVybnMgYSBnaXZlbiBwcm9wZXJ0eS5cbiAgXy5wcm9wZXJ0eU9mID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKG9iaiA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oKXt9O1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24ocGF0aCkge1xuICAgICAgcmV0dXJuICFfLmlzQXJyYXkocGF0aCkgPyBvYmpbcGF0aF0gOiBkZWVwR2V0KG9iaiwgcGF0aCk7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgcHJlZGljYXRlIGZvciBjaGVja2luZyB3aGV0aGVyIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBzZXQgb2ZcbiAgLy8gYGtleTp2YWx1ZWAgcGFpcnMuXG4gIF8ubWF0Y2hlciA9IF8ubWF0Y2hlcyA9IGZ1bmN0aW9uKGF0dHJzKSB7XG4gICAgYXR0cnMgPSBfLmV4dGVuZE93bih7fSwgYXR0cnMpO1xuICAgIHJldHVybiBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBfLmlzTWF0Y2gob2JqLCBhdHRycyk7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSdW4gYSBmdW5jdGlvbiAqKm4qKiB0aW1lcy5cbiAgXy50aW1lcyA9IGZ1bmN0aW9uKG4sIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIGFjY3VtID0gQXJyYXkoTWF0aC5tYXgoMCwgbikpO1xuICAgIGl0ZXJhdGVlID0gb3B0aW1pemVDYihpdGVyYXRlZSwgY29udGV4dCwgMSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIGFjY3VtW2ldID0gaXRlcmF0ZWUoaSk7XG4gICAgcmV0dXJuIGFjY3VtO1xuICB9O1xuXG4gIC8vIFJldHVybiBhIHJhbmRvbSBpbnRlZ2VyIGJldHdlZW4gbWluIGFuZCBtYXggKGluY2x1c2l2ZSkuXG4gIF8ucmFuZG9tID0gZnVuY3Rpb24obWluLCBtYXgpIHtcbiAgICBpZiAobWF4ID09IG51bGwpIHtcbiAgICAgIG1heCA9IG1pbjtcbiAgICAgIG1pbiA9IDA7XG4gICAgfVxuICAgIHJldHVybiBtaW4gKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluICsgMSkpO1xuICB9O1xuXG4gIC8vIEEgKHBvc3NpYmx5IGZhc3Rlcikgd2F5IHRvIGdldCB0aGUgY3VycmVudCB0aW1lc3RhbXAgYXMgYW4gaW50ZWdlci5cbiAgXy5ub3cgPSBEYXRlLm5vdyB8fCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gIH07XG5cbiAgLy8gTGlzdCBvZiBIVE1MIGVudGl0aWVzIGZvciBlc2NhcGluZy5cbiAgdmFyIGVzY2FwZU1hcCA9IHtcbiAgICAnJic6ICcmYW1wOycsXG4gICAgJzwnOiAnJmx0OycsXG4gICAgJz4nOiAnJmd0OycsXG4gICAgJ1wiJzogJyZxdW90OycsXG4gICAgXCInXCI6ICcmI3gyNzsnLFxuICAgICdgJzogJyYjeDYwOydcbiAgfTtcbiAgdmFyIHVuZXNjYXBlTWFwID0gXy5pbnZlcnQoZXNjYXBlTWFwKTtcblxuICAvLyBGdW5jdGlvbnMgZm9yIGVzY2FwaW5nIGFuZCB1bmVzY2FwaW5nIHN0cmluZ3MgdG8vZnJvbSBIVE1MIGludGVycG9sYXRpb24uXG4gIHZhciBjcmVhdGVFc2NhcGVyID0gZnVuY3Rpb24obWFwKSB7XG4gICAgdmFyIGVzY2FwZXIgPSBmdW5jdGlvbihtYXRjaCkge1xuICAgICAgcmV0dXJuIG1hcFttYXRjaF07XG4gICAgfTtcbiAgICAvLyBSZWdleGVzIGZvciBpZGVudGlmeWluZyBhIGtleSB0aGF0IG5lZWRzIHRvIGJlIGVzY2FwZWQuXG4gICAgdmFyIHNvdXJjZSA9ICcoPzonICsgXy5rZXlzKG1hcCkuam9pbignfCcpICsgJyknO1xuICAgIHZhciB0ZXN0UmVnZXhwID0gUmVnRXhwKHNvdXJjZSk7XG4gICAgdmFyIHJlcGxhY2VSZWdleHAgPSBSZWdFeHAoc291cmNlLCAnZycpO1xuICAgIHJldHVybiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgIHN0cmluZyA9IHN0cmluZyA9PSBudWxsID8gJycgOiAnJyArIHN0cmluZztcbiAgICAgIHJldHVybiB0ZXN0UmVnZXhwLnRlc3Qoc3RyaW5nKSA/IHN0cmluZy5yZXBsYWNlKHJlcGxhY2VSZWdleHAsIGVzY2FwZXIpIDogc3RyaW5nO1xuICAgIH07XG4gIH07XG4gIF8uZXNjYXBlID0gY3JlYXRlRXNjYXBlcihlc2NhcGVNYXApO1xuICBfLnVuZXNjYXBlID0gY3JlYXRlRXNjYXBlcih1bmVzY2FwZU1hcCk7XG5cbiAgLy8gVHJhdmVyc2VzIHRoZSBjaGlsZHJlbiBvZiBgb2JqYCBhbG9uZyBgcGF0aGAuIElmIGEgY2hpbGQgaXMgYSBmdW5jdGlvbiwgaXRcbiAgLy8gaXMgaW52b2tlZCB3aXRoIGl0cyBwYXJlbnQgYXMgY29udGV4dC4gUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGZpbmFsXG4gIC8vIGNoaWxkLCBvciBgZmFsbGJhY2tgIGlmIGFueSBjaGlsZCBpcyB1bmRlZmluZWQuXG4gIF8ucmVzdWx0ID0gZnVuY3Rpb24ob2JqLCBwYXRoLCBmYWxsYmFjaykge1xuICAgIGlmICghXy5pc0FycmF5KHBhdGgpKSBwYXRoID0gW3BhdGhdO1xuICAgIHZhciBsZW5ndGggPSBwYXRoLmxlbmd0aDtcbiAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgcmV0dXJuIF8uaXNGdW5jdGlvbihmYWxsYmFjaykgPyBmYWxsYmFjay5jYWxsKG9iaikgOiBmYWxsYmFjaztcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHByb3AgPSBvYmogPT0gbnVsbCA/IHZvaWQgMCA6IG9ialtwYXRoW2ldXTtcbiAgICAgIGlmIChwcm9wID09PSB2b2lkIDApIHtcbiAgICAgICAgcHJvcCA9IGZhbGxiYWNrO1xuICAgICAgICBpID0gbGVuZ3RoOyAvLyBFbnN1cmUgd2UgZG9uJ3QgY29udGludWUgaXRlcmF0aW5nLlxuICAgICAgfVxuICAgICAgb2JqID0gXy5pc0Z1bmN0aW9uKHByb3ApID8gcHJvcC5jYWxsKG9iaikgOiBwcm9wO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9O1xuXG4gIC8vIEdlbmVyYXRlIGEgdW5pcXVlIGludGVnZXIgaWQgKHVuaXF1ZSB3aXRoaW4gdGhlIGVudGlyZSBjbGllbnQgc2Vzc2lvbikuXG4gIC8vIFVzZWZ1bCBmb3IgdGVtcG9yYXJ5IERPTSBpZHMuXG4gIHZhciBpZENvdW50ZXIgPSAwO1xuICBfLnVuaXF1ZUlkID0gZnVuY3Rpb24ocHJlZml4KSB7XG4gICAgdmFyIGlkID0gKytpZENvdW50ZXIgKyAnJztcbiAgICByZXR1cm4gcHJlZml4ID8gcHJlZml4ICsgaWQgOiBpZDtcbiAgfTtcblxuICAvLyBCeSBkZWZhdWx0LCBVbmRlcnNjb3JlIHVzZXMgRVJCLXN0eWxlIHRlbXBsYXRlIGRlbGltaXRlcnMsIGNoYW5nZSB0aGVcbiAgLy8gZm9sbG93aW5nIHRlbXBsYXRlIHNldHRpbmdzIHRvIHVzZSBhbHRlcm5hdGl2ZSBkZWxpbWl0ZXJzLlxuICBfLnRlbXBsYXRlU2V0dGluZ3MgPSB7XG4gICAgZXZhbHVhdGU6IC88JShbXFxzXFxTXSs/KSU+L2csXG4gICAgaW50ZXJwb2xhdGU6IC88JT0oW1xcc1xcU10rPyklPi9nLFxuICAgIGVzY2FwZTogLzwlLShbXFxzXFxTXSs/KSU+L2dcbiAgfTtcblxuICAvLyBXaGVuIGN1c3RvbWl6aW5nIGB0ZW1wbGF0ZVNldHRpbmdzYCwgaWYgeW91IGRvbid0IHdhbnQgdG8gZGVmaW5lIGFuXG4gIC8vIGludGVycG9sYXRpb24sIGV2YWx1YXRpb24gb3IgZXNjYXBpbmcgcmVnZXgsIHdlIG5lZWQgb25lIHRoYXQgaXNcbiAgLy8gZ3VhcmFudGVlZCBub3QgdG8gbWF0Y2guXG4gIHZhciBub01hdGNoID0gLyguKV4vO1xuXG4gIC8vIENlcnRhaW4gY2hhcmFjdGVycyBuZWVkIHRvIGJlIGVzY2FwZWQgc28gdGhhdCB0aGV5IGNhbiBiZSBwdXQgaW50byBhXG4gIC8vIHN0cmluZyBsaXRlcmFsLlxuICB2YXIgZXNjYXBlcyA9IHtcbiAgICBcIidcIjogXCInXCIsXG4gICAgJ1xcXFwnOiAnXFxcXCcsXG4gICAgJ1xccic6ICdyJyxcbiAgICAnXFxuJzogJ24nLFxuICAgICdcXHUyMDI4JzogJ3UyMDI4JyxcbiAgICAnXFx1MjAyOSc6ICd1MjAyOSdcbiAgfTtcblxuICB2YXIgZXNjYXBlUmVnRXhwID0gL1xcXFx8J3xcXHJ8XFxufFxcdTIwMjh8XFx1MjAyOS9nO1xuXG4gIHZhciBlc2NhcGVDaGFyID0gZnVuY3Rpb24obWF0Y2gpIHtcbiAgICByZXR1cm4gJ1xcXFwnICsgZXNjYXBlc1ttYXRjaF07XG4gIH07XG5cbiAgLy8gSmF2YVNjcmlwdCBtaWNyby10ZW1wbGF0aW5nLCBzaW1pbGFyIHRvIEpvaG4gUmVzaWcncyBpbXBsZW1lbnRhdGlvbi5cbiAgLy8gVW5kZXJzY29yZSB0ZW1wbGF0aW5nIGhhbmRsZXMgYXJiaXRyYXJ5IGRlbGltaXRlcnMsIHByZXNlcnZlcyB3aGl0ZXNwYWNlLFxuICAvLyBhbmQgY29ycmVjdGx5IGVzY2FwZXMgcXVvdGVzIHdpdGhpbiBpbnRlcnBvbGF0ZWQgY29kZS5cbiAgLy8gTkI6IGBvbGRTZXR0aW5nc2Agb25seSBleGlzdHMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxuICBfLnRlbXBsYXRlID0gZnVuY3Rpb24odGV4dCwgc2V0dGluZ3MsIG9sZFNldHRpbmdzKSB7XG4gICAgaWYgKCFzZXR0aW5ncyAmJiBvbGRTZXR0aW5ncykgc2V0dGluZ3MgPSBvbGRTZXR0aW5ncztcbiAgICBzZXR0aW5ncyA9IF8uZGVmYXVsdHMoe30sIHNldHRpbmdzLCBfLnRlbXBsYXRlU2V0dGluZ3MpO1xuXG4gICAgLy8gQ29tYmluZSBkZWxpbWl0ZXJzIGludG8gb25lIHJlZ3VsYXIgZXhwcmVzc2lvbiB2aWEgYWx0ZXJuYXRpb24uXG4gICAgdmFyIG1hdGNoZXIgPSBSZWdFeHAoW1xuICAgICAgKHNldHRpbmdzLmVzY2FwZSB8fCBub01hdGNoKS5zb3VyY2UsXG4gICAgICAoc2V0dGluZ3MuaW50ZXJwb2xhdGUgfHwgbm9NYXRjaCkuc291cmNlLFxuICAgICAgKHNldHRpbmdzLmV2YWx1YXRlIHx8IG5vTWF0Y2gpLnNvdXJjZVxuICAgIF0uam9pbignfCcpICsgJ3wkJywgJ2cnKTtcblxuICAgIC8vIENvbXBpbGUgdGhlIHRlbXBsYXRlIHNvdXJjZSwgZXNjYXBpbmcgc3RyaW5nIGxpdGVyYWxzIGFwcHJvcHJpYXRlbHkuXG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgc291cmNlID0gXCJfX3ArPSdcIjtcbiAgICB0ZXh0LnJlcGxhY2UobWF0Y2hlciwgZnVuY3Rpb24obWF0Y2gsIGVzY2FwZSwgaW50ZXJwb2xhdGUsIGV2YWx1YXRlLCBvZmZzZXQpIHtcbiAgICAgIHNvdXJjZSArPSB0ZXh0LnNsaWNlKGluZGV4LCBvZmZzZXQpLnJlcGxhY2UoZXNjYXBlUmVnRXhwLCBlc2NhcGVDaGFyKTtcbiAgICAgIGluZGV4ID0gb2Zmc2V0ICsgbWF0Y2gubGVuZ3RoO1xuXG4gICAgICBpZiAoZXNjYXBlKSB7XG4gICAgICAgIHNvdXJjZSArPSBcIicrXFxuKChfX3Q9KFwiICsgZXNjYXBlICsgXCIpKT09bnVsbD8nJzpfLmVzY2FwZShfX3QpKStcXG4nXCI7XG4gICAgICB9IGVsc2UgaWYgKGludGVycG9sYXRlKSB7XG4gICAgICAgIHNvdXJjZSArPSBcIicrXFxuKChfX3Q9KFwiICsgaW50ZXJwb2xhdGUgKyBcIikpPT1udWxsPycnOl9fdCkrXFxuJ1wiO1xuICAgICAgfSBlbHNlIGlmIChldmFsdWF0ZSkge1xuICAgICAgICBzb3VyY2UgKz0gXCInO1xcblwiICsgZXZhbHVhdGUgKyBcIlxcbl9fcCs9J1wiO1xuICAgICAgfVxuXG4gICAgICAvLyBBZG9iZSBWTXMgbmVlZCB0aGUgbWF0Y2ggcmV0dXJuZWQgdG8gcHJvZHVjZSB0aGUgY29ycmVjdCBvZmZzZXQuXG4gICAgICByZXR1cm4gbWF0Y2g7XG4gICAgfSk7XG4gICAgc291cmNlICs9IFwiJztcXG5cIjtcblxuICAgIC8vIElmIGEgdmFyaWFibGUgaXMgbm90IHNwZWNpZmllZCwgcGxhY2UgZGF0YSB2YWx1ZXMgaW4gbG9jYWwgc2NvcGUuXG4gICAgaWYgKCFzZXR0aW5ncy52YXJpYWJsZSkgc291cmNlID0gJ3dpdGgob2JqfHx7fSl7XFxuJyArIHNvdXJjZSArICd9XFxuJztcblxuICAgIHNvdXJjZSA9IFwidmFyIF9fdCxfX3A9JycsX19qPUFycmF5LnByb3RvdHlwZS5qb2luLFwiICtcbiAgICAgIFwicHJpbnQ9ZnVuY3Rpb24oKXtfX3ArPV9fai5jYWxsKGFyZ3VtZW50cywnJyk7fTtcXG5cIiArXG4gICAgICBzb3VyY2UgKyAncmV0dXJuIF9fcDtcXG4nO1xuXG4gICAgdmFyIHJlbmRlcjtcbiAgICB0cnkge1xuICAgICAgcmVuZGVyID0gbmV3IEZ1bmN0aW9uKHNldHRpbmdzLnZhcmlhYmxlIHx8ICdvYmonLCAnXycsIHNvdXJjZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZS5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cblxuICAgIHZhciB0ZW1wbGF0ZSA9IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgIHJldHVybiByZW5kZXIuY2FsbCh0aGlzLCBkYXRhLCBfKTtcbiAgICB9O1xuXG4gICAgLy8gUHJvdmlkZSB0aGUgY29tcGlsZWQgc291cmNlIGFzIGEgY29udmVuaWVuY2UgZm9yIHByZWNvbXBpbGF0aW9uLlxuICAgIHZhciBhcmd1bWVudCA9IHNldHRpbmdzLnZhcmlhYmxlIHx8ICdvYmonO1xuICAgIHRlbXBsYXRlLnNvdXJjZSA9ICdmdW5jdGlvbignICsgYXJndW1lbnQgKyAnKXtcXG4nICsgc291cmNlICsgJ30nO1xuXG4gICAgcmV0dXJuIHRlbXBsYXRlO1xuICB9O1xuXG4gIC8vIEFkZCBhIFwiY2hhaW5cIiBmdW5jdGlvbi4gU3RhcnQgY2hhaW5pbmcgYSB3cmFwcGVkIFVuZGVyc2NvcmUgb2JqZWN0LlxuICBfLmNoYWluID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIGluc3RhbmNlID0gXyhvYmopO1xuICAgIGluc3RhbmNlLl9jaGFpbiA9IHRydWU7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9O1xuXG4gIC8vIE9PUFxuICAvLyAtLS0tLS0tLS0tLS0tLS1cbiAgLy8gSWYgVW5kZXJzY29yZSBpcyBjYWxsZWQgYXMgYSBmdW5jdGlvbiwgaXQgcmV0dXJucyBhIHdyYXBwZWQgb2JqZWN0IHRoYXRcbiAgLy8gY2FuIGJlIHVzZWQgT08tc3R5bGUuIFRoaXMgd3JhcHBlciBob2xkcyBhbHRlcmVkIHZlcnNpb25zIG9mIGFsbCB0aGVcbiAgLy8gdW5kZXJzY29yZSBmdW5jdGlvbnMuIFdyYXBwZWQgb2JqZWN0cyBtYXkgYmUgY2hhaW5lZC5cblxuICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY29udGludWUgY2hhaW5pbmcgaW50ZXJtZWRpYXRlIHJlc3VsdHMuXG4gIHZhciBjaGFpblJlc3VsdCA9IGZ1bmN0aW9uKGluc3RhbmNlLCBvYmopIHtcbiAgICByZXR1cm4gaW5zdGFuY2UuX2NoYWluID8gXyhvYmopLmNoYWluKCkgOiBvYmo7XG4gIH07XG5cbiAgLy8gQWRkIHlvdXIgb3duIGN1c3RvbSBmdW5jdGlvbnMgdG8gdGhlIFVuZGVyc2NvcmUgb2JqZWN0LlxuICBfLm1peGluID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgXy5lYWNoKF8uZnVuY3Rpb25zKG9iaiksIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgIHZhciBmdW5jID0gX1tuYW1lXSA9IG9ialtuYW1lXTtcbiAgICAgIF8ucHJvdG90eXBlW25hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBhcmdzID0gW3RoaXMuX3dyYXBwZWRdO1xuICAgICAgICBwdXNoLmFwcGx5KGFyZ3MsIGFyZ3VtZW50cyk7XG4gICAgICAgIHJldHVybiBjaGFpblJlc3VsdCh0aGlzLCBmdW5jLmFwcGx5KF8sIGFyZ3MpKTtcbiAgICAgIH07XG4gICAgfSk7XG4gICAgcmV0dXJuIF87XG4gIH07XG5cbiAgLy8gQWRkIGFsbCBvZiB0aGUgVW5kZXJzY29yZSBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIgb2JqZWN0LlxuICBfLm1peGluKF8pO1xuXG4gIC8vIEFkZCBhbGwgbXV0YXRvciBBcnJheSBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIuXG4gIF8uZWFjaChbJ3BvcCcsICdwdXNoJywgJ3JldmVyc2UnLCAnc2hpZnQnLCAnc29ydCcsICdzcGxpY2UnLCAndW5zaGlmdCddLCBmdW5jdGlvbihuYW1lKSB7XG4gICAgdmFyIG1ldGhvZCA9IEFycmF5UHJvdG9bbmFtZV07XG4gICAgXy5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBvYmogPSB0aGlzLl93cmFwcGVkO1xuICAgICAgbWV0aG9kLmFwcGx5KG9iaiwgYXJndW1lbnRzKTtcbiAgICAgIGlmICgobmFtZSA9PT0gJ3NoaWZ0JyB8fCBuYW1lID09PSAnc3BsaWNlJykgJiYgb2JqLmxlbmd0aCA9PT0gMCkgZGVsZXRlIG9ialswXTtcbiAgICAgIHJldHVybiBjaGFpblJlc3VsdCh0aGlzLCBvYmopO1xuICAgIH07XG4gIH0pO1xuXG4gIC8vIEFkZCBhbGwgYWNjZXNzb3IgQXJyYXkgZnVuY3Rpb25zIHRvIHRoZSB3cmFwcGVyLlxuICBfLmVhY2goWydjb25jYXQnLCAnam9pbicsICdzbGljZSddLCBmdW5jdGlvbihuYW1lKSB7XG4gICAgdmFyIG1ldGhvZCA9IEFycmF5UHJvdG9bbmFtZV07XG4gICAgXy5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBjaGFpblJlc3VsdCh0aGlzLCBtZXRob2QuYXBwbHkodGhpcy5fd3JhcHBlZCwgYXJndW1lbnRzKSk7XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gRXh0cmFjdHMgdGhlIHJlc3VsdCBmcm9tIGEgd3JhcHBlZCBhbmQgY2hhaW5lZCBvYmplY3QuXG4gIF8ucHJvdG90eXBlLnZhbHVlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dyYXBwZWQ7XG4gIH07XG5cbiAgLy8gUHJvdmlkZSB1bndyYXBwaW5nIHByb3h5IGZvciBzb21lIG1ldGhvZHMgdXNlZCBpbiBlbmdpbmUgb3BlcmF0aW9uc1xuICAvLyBzdWNoIGFzIGFyaXRobWV0aWMgYW5kIEpTT04gc3RyaW5naWZpY2F0aW9uLlxuICBfLnByb3RvdHlwZS52YWx1ZU9mID0gXy5wcm90b3R5cGUudG9KU09OID0gXy5wcm90b3R5cGUudmFsdWU7XG5cbiAgXy5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gU3RyaW5nKHRoaXMuX3dyYXBwZWQpO1xuICB9O1xuXG4gIC8vIEFNRCByZWdpc3RyYXRpb24gaGFwcGVucyBhdCB0aGUgZW5kIGZvciBjb21wYXRpYmlsaXR5IHdpdGggQU1EIGxvYWRlcnNcbiAgLy8gdGhhdCBtYXkgbm90IGVuZm9yY2UgbmV4dC10dXJuIHNlbWFudGljcyBvbiBtb2R1bGVzLiBFdmVuIHRob3VnaCBnZW5lcmFsXG4gIC8vIHByYWN0aWNlIGZvciBBTUQgcmVnaXN0cmF0aW9uIGlzIHRvIGJlIGFub255bW91cywgdW5kZXJzY29yZSByZWdpc3RlcnNcbiAgLy8gYXMgYSBuYW1lZCBtb2R1bGUgYmVjYXVzZSwgbGlrZSBqUXVlcnksIGl0IGlzIGEgYmFzZSBsaWJyYXJ5IHRoYXQgaXNcbiAgLy8gcG9wdWxhciBlbm91Z2ggdG8gYmUgYnVuZGxlZCBpbiBhIHRoaXJkIHBhcnR5IGxpYiwgYnV0IG5vdCBiZSBwYXJ0IG9mXG4gIC8vIGFuIEFNRCBsb2FkIHJlcXVlc3QuIFRob3NlIGNhc2VzIGNvdWxkIGdlbmVyYXRlIGFuIGVycm9yIHdoZW4gYW5cbiAgLy8gYW5vbnltb3VzIGRlZmluZSgpIGlzIGNhbGxlZCBvdXRzaWRlIG9mIGEgbG9hZGVyIHJlcXVlc3QuXG4gIGlmICh0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgIGRlZmluZSgndW5kZXJzY29yZScsIFtdLCBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBfO1xuICAgIH0pO1xuICB9XG59KCkpO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL3VuZGVyc2NvcmUuanNcbi8vIG1vZHVsZSBpZCA9IDM0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIiwidmFyIGc7XHJcblxyXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxyXG5nID0gKGZ1bmN0aW9uKCkge1xyXG5cdHJldHVybiB0aGlzO1xyXG59KSgpO1xyXG5cclxudHJ5IHtcclxuXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcclxuXHRnID0gZyB8fCBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCkgfHwgKDEsZXZhbCkoXCJ0aGlzXCIpO1xyXG59IGNhdGNoKGUpIHtcclxuXHQvLyBUaGlzIHdvcmtzIGlmIHRoZSB3aW5kb3cgcmVmZXJlbmNlIGlzIGF2YWlsYWJsZVxyXG5cdGlmKHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIpXHJcblx0XHRnID0gd2luZG93O1xyXG59XHJcblxyXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXHJcbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzXHJcbi8vIGVhc2llciB0byBoYW5kbGUgdGhpcyBjYXNlLiBpZighZ2xvYmFsKSB7IC4uLn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZztcclxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzXG4vLyBtb2R1bGUgaWQgPSAzNVxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24obW9kdWxlKSB7XHJcblx0aWYoIW1vZHVsZS53ZWJwYWNrUG9seWZpbGwpIHtcclxuXHRcdG1vZHVsZS5kZXByZWNhdGUgPSBmdW5jdGlvbigpIHt9O1xyXG5cdFx0bW9kdWxlLnBhdGhzID0gW107XHJcblx0XHQvLyBtb2R1bGUucGFyZW50ID0gdW5kZWZpbmVkIGJ5IGRlZmF1bHRcclxuXHRcdGlmKCFtb2R1bGUuY2hpbGRyZW4pIG1vZHVsZS5jaGlsZHJlbiA9IFtdO1xyXG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXCJsb2FkZWRcIiwge1xyXG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxyXG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdHJldHVybiBtb2R1bGUubDtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcImlkXCIsIHtcclxuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcclxuXHRcdFx0Z2V0OiBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRyZXR1cm4gbW9kdWxlLmk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0bW9kdWxlLndlYnBhY2tQb2x5ZmlsbCA9IDE7XHJcblx0fVxyXG5cdHJldHVybiBtb2R1bGU7XHJcbn07XHJcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vICh3ZWJwYWNrKS9idWlsZGluL21vZHVsZS5qc1xuLy8gbW9kdWxlIGlkID0gMzZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEiLCIvKiBlc2xpbnQgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzOiAwICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBDb25zdCBmcm9tICcuLi9jb25zdCc7XG5pbXBvcnQgeyBCb290c3RyYXBDb250ZXh0IH0gZnJvbSAnLi4vY29udGV4dHMvYm9vdHN0cmFwJztcbmltcG9ydCBfIGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IENoZWNrQm94ID0gKHsgY2xhc3NOYW1lLCBjaGVja2VkLCBpbmRldGVybWluYXRlIH0pID0+IChcbiAgPGlucHV0XG4gICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICBjaGVja2VkPXsgY2hlY2tlZCB9XG4gICAgY2xhc3NOYW1lPXsgY2xhc3NOYW1lIH1cbiAgICByZWY9eyAoaW5wdXQpID0+IHtcbiAgICAgIGlmIChpbnB1dCkgaW5wdXQuaW5kZXRlcm1pbmF0ZSA9IGluZGV0ZXJtaW5hdGU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICB9IH1cbiAgICBvbkNoYW5nZT17ICgpID0+IHt9IH1cbiAgLz5cbik7XG5cbkNoZWNrQm94LnByb3BUeXBlcyA9IHtcbiAgY2hlY2tlZDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgaW5kZXRlcm1pbmF0ZTogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nXG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZWxlY3Rpb25IZWFkZXJDZWxsIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICBtb2RlOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgY2hlY2tlZFN0YXR1czogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBvbkFsbFJvd3NTZWxlY3Q6IFByb3BUeXBlcy5mdW5jLFxuICAgIGhpZGVTZWxlY3RBbGw6IFByb3BUeXBlcy5ib29sLFxuICAgIHNlbGVjdGlvbkhlYWRlclJlbmRlcmVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBoZWFkZXJDb2x1bW5TdHlsZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmZ1bmNdKVxuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmhhbmRsZUNoZWNrQm94Q2xpY2sgPSB0aGlzLmhhbmRsZUNoZWNrQm94Q2xpY2suYmluZCh0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBhdm9pZCB1cGRhdGluZyBpZiBidXR0b24gaXNcbiAgICogMS4gcmFkaW9cbiAgICogMi4gc3RhdHVzIHdhcyBub3QgY2hhbmdlZC5cbiAgICovXG4gIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMpIHtcbiAgICBjb25zdCB7IFJPV19TRUxFQ1RfU0lOR0xFIH0gPSBDb25zdDtcbiAgICBjb25zdCB7IG1vZGUsIGNoZWNrZWRTdGF0dXMgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBpZiAobW9kZSA9PT0gUk9XX1NFTEVDVF9TSU5HTEUpIHJldHVybiBmYWxzZTtcblxuICAgIHJldHVybiBuZXh0UHJvcHMuY2hlY2tlZFN0YXR1cyAhPT0gY2hlY2tlZFN0YXR1cztcbiAgfVxuXG4gIGhhbmRsZUNoZWNrQm94Q2xpY2soZSkge1xuICAgIGNvbnN0IHsgb25BbGxSb3dzU2VsZWN0LCBjaGVja2VkU3RhdHVzIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGlzVW5TZWxlY3QgPVxuICAgICAgY2hlY2tlZFN0YXR1cyA9PT0gQ29uc3QuQ0hFQ0tCT1hfU1RBVFVTX0NIRUNLRUQgfHxcbiAgICAgIGNoZWNrZWRTdGF0dXMgPT09IENvbnN0LkNIRUNLQk9YX1NUQVRVU19JTkRFVEVSTUlOQVRFO1xuXG4gICAgb25BbGxSb3dzU2VsZWN0KGUsIGlzVW5TZWxlY3QpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIENIRUNLQk9YX1NUQVRVU19DSEVDS0VELCBDSEVDS0JPWF9TVEFUVVNfSU5ERVRFUk1JTkFURSwgUk9XX1NFTEVDVF9NVUxUSVBMRVxuICAgIH0gPSBDb25zdDtcblxuICAgIGNvbnN0IHtcbiAgICAgIG1vZGUsXG4gICAgICBjaGVja2VkU3RhdHVzLFxuICAgICAgc2VsZWN0aW9uSGVhZGVyUmVuZGVyZXIsXG4gICAgICBoaWRlU2VsZWN0QWxsLFxuICAgICAgaGVhZGVyQ29sdW1uU3R5bGVcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoaGlkZVNlbGVjdEFsbCkge1xuICAgICAgcmV0dXJuIDx0aCBkYXRhLXJvdy1zZWxlY3Rpb24gLz47XG4gICAgfVxuXG4gICAgY29uc3QgY2hlY2tlZCA9IGNoZWNrZWRTdGF0dXMgPT09IENIRUNLQk9YX1NUQVRVU19DSEVDS0VEO1xuXG4gICAgY29uc3QgaW5kZXRlcm1pbmF0ZSA9IGNoZWNrZWRTdGF0dXMgPT09IENIRUNLQk9YX1NUQVRVU19JTkRFVEVSTUlOQVRFO1xuXG4gICAgY29uc3QgYXR0cnMgPSB7fTtcbiAgICBsZXQgY29udGVudDtcbiAgICBpZiAoc2VsZWN0aW9uSGVhZGVyUmVuZGVyZXIgfHwgbW9kZSA9PT0gUk9XX1NFTEVDVF9NVUxUSVBMRSkge1xuICAgICAgYXR0cnMub25DbGljayA9IHRoaXMuaGFuZGxlQ2hlY2tCb3hDbGljaztcbiAgICB9XG5cbiAgICBhdHRycy5zdHlsZSA9IF8uaXNGdW5jdGlvbihoZWFkZXJDb2x1bW5TdHlsZSkgP1xuICAgICAgaGVhZGVyQ29sdW1uU3R5bGUoY2hlY2tlZFN0YXR1cykgOlxuICAgICAgaGVhZGVyQ29sdW1uU3R5bGU7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPEJvb3RzdHJhcENvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgIHtcbiAgICAgICAgICAoeyBib290c3RyYXA0IH0pID0+IHtcbiAgICAgICAgICAgIGlmIChzZWxlY3Rpb25IZWFkZXJSZW5kZXJlcikge1xuICAgICAgICAgICAgICBjb250ZW50ID0gc2VsZWN0aW9uSGVhZGVyUmVuZGVyZXIoe1xuICAgICAgICAgICAgICAgIG1vZGUsXG4gICAgICAgICAgICAgICAgY2hlY2tlZCxcbiAgICAgICAgICAgICAgICBpbmRldGVybWluYXRlXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtb2RlID09PSBST1dfU0VMRUNUX01VTFRJUExFKSB7XG4gICAgICAgICAgICAgIGNvbnRlbnQgPSAoXG4gICAgICAgICAgICAgICAgPENoZWNrQm94XG4gICAgICAgICAgICAgICAgICB7IC4uLnRoaXMucHJvcHMgfVxuICAgICAgICAgICAgICAgICAgY2hlY2tlZD17IGNoZWNrZWQgfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXsgYm9vdHN0cmFwNCA/ICdzZWxlY3Rpb24taW5wdXQtNCcgOiAnJyB9XG4gICAgICAgICAgICAgICAgICBpbmRldGVybWluYXRlPXsgaW5kZXRlcm1pbmF0ZSB9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDx0aCBjbGFzc05hbWU9XCJzZWxlY3Rpb24tY2VsbC1oZWFkZXJcIiBkYXRhLXJvdy1zZWxlY3Rpb24geyAuLi5hdHRycyB9PnsgY29udGVudCB9PC90aD5cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICA8L0Jvb3RzdHJhcENvbnRleHQuQ29uc3VtZXI+XG4gICAgKTtcbiAgfVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9zcmMvcm93LXNlbGVjdGlvbi9zZWxlY3Rpb24taGVhZGVyLWNlbGwuanMiLCIvKiBlc2xpbnQgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzOiAwICovXG4vKiBlc2xpbnQgbm8tbmVzdGVkLXRlcm5hcnk6IDAgKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFeHBhbnNpb25IZWFkZXJDZWxsIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICBpc0FueUV4cGFuZHM6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gICAgb25BbGxSb3dFeHBhbmQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgZXhwYW5kSGVhZGVyQ29sdW1uUmVuZGVyZXI6IFByb3BUeXBlcy5mdW5jXG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuaGFuZGxlQ2hlY2tCb3hDbGljayA9IHRoaXMuaGFuZGxlQ2hlY2tCb3hDbGljay5iaW5kKHRoaXMpO1xuICB9XG5cbiAgaGFuZGxlQ2hlY2tCb3hDbGljayhlKSB7XG4gICAgY29uc3QgeyBpc0FueUV4cGFuZHMsIG9uQWxsUm93RXhwYW5kIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgb25BbGxSb3dFeHBhbmQoZSwgIWlzQW55RXhwYW5kcyk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBpc0FueUV4cGFuZHMsIGV4cGFuZEhlYWRlckNvbHVtblJlbmRlcmVyIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGF0dHJzID0ge1xuICAgICAgb25DbGljazogdGhpcy5oYW5kbGVDaGVja0JveENsaWNrXG4gICAgfTtcblxuICAgIHJldHVybiAoXG4gICAgICA8dGggY2xhc3NOYW1lPVwiZXhwYW5kLWNlbGwtaGVhZGVyXCIgZGF0YS1yb3ctc2VsZWN0aW9uIHsgLi4uYXR0cnMgfT5cbiAgICAgICAge1xuICAgICAgICAgIGV4cGFuZEhlYWRlckNvbHVtblJlbmRlcmVyID9cbiAgICAgICAgICAgIGV4cGFuZEhlYWRlckNvbHVtblJlbmRlcmVyKHsgaXNBbnlFeHBhbmRzIH0pIDpcbiAgICAgICAgICAgIChpc0FueUV4cGFuZHMgPyAnKC0pJyA6ICcoKyknKVxuICAgICAgICB9XG4gICAgICA8L3RoPlxuICAgICk7XG4gIH1cbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL3Jvdy1leHBhbmQvZXhwYW5kLWhlYWRlci1jZWxsLmpzIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBTZWxlY3Rpb25Db250ZXh0IGZyb20gJy4uL2NvbnRleHRzL3NlbGVjdGlvbi1jb250ZXh0JztcblxuZXhwb3J0IGRlZmF1bHQgQ29tcG9uZW50ID0+ICgpID0+IChcbiAgPFNlbGVjdGlvbkNvbnRleHQuQ29uc3VtZXI+XG4gICAgeyBzZWxlY3RSb3cgPT4gPENvbXBvbmVudCB7IC4uLnNlbGVjdFJvdyB9IC8+IH1cbiAgPC9TZWxlY3Rpb25Db250ZXh0LkNvbnN1bWVyPlxuKTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL3Jvdy1zZWxlY3Rpb24vc2VsZWN0aW9uLWhlYWRlci1jZWxsLWNvbnN1bWVyLmpzIiwiaW1wb3J0IF8gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgZ2V0Um93QnlSb3dJZCB9IGZyb20gJy4vcm93cyc7XG5cbmV4cG9ydCBjb25zdCBpc0FueUV4cGFuZHMgPSAoXG4gIGRhdGEsXG4gIGtleUZpZWxkLFxuICBleHBhbmRlZCA9IFtdXG4pID0+IHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgY29uc3Qgcm93S2V5ID0gXy5nZXQoZGF0YVtpXSwga2V5RmllbGQpO1xuICAgIGlmICh0eXBlb2YgZXhwYW5kZWQuZmluZCh4ID0+IHggPT09IHJvd0tleSkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuZXhwb3J0IGNvbnN0IGV4cGFuZGFibGVLZXlzID0gKGRhdGEsIGtleUZpZWxkLCBza2lwcyA9IFtdKSA9PiB7XG4gIGlmIChza2lwcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZGF0YS5tYXAocm93ID0+IF8uZ2V0KHJvdywga2V5RmllbGQpKTtcbiAgfVxuICByZXR1cm4gZGF0YVxuICAgIC5maWx0ZXIocm93ID0+ICFfLmNvbnRhaW5zKHNraXBzLCBfLmdldChyb3csIGtleUZpZWxkKSkpXG4gICAgLm1hcChyb3cgPT4gXy5nZXQocm93LCBrZXlGaWVsZCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEV4cGFuZGVkUm93cyA9IChkYXRhLCBrZXlGaWVsZCwgZXhwYW5kZWQpID0+XG4gIGV4cGFuZGVkLm1hcChrID0+IGdldFJvd0J5Um93SWQoZGF0YSwga2V5RmllbGQsIGspKTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL3N0b3JlL2V4cGFuZC5qcyIsImltcG9ydCBfIGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IGdldFJvd0J5Um93SWQgfSBmcm9tICcuL3Jvd3MnO1xuXG5leHBvcnQgY29uc3QgZWRpdENlbGwgPSAoZGF0YSwga2V5RmllbGQsIHJvd0lkLCBkYXRhRmllbGQsIG5ld1ZhbHVlKSA9PiB7XG4gIGNvbnN0IHJvdyA9IGdldFJvd0J5Um93SWQoZGF0YSwga2V5RmllbGQsIHJvd0lkKTtcbiAgaWYgKHJvdykgXy5zZXQocm93LCBkYXRhRmllbGQsIG5ld1ZhbHVlKTtcbn07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9zdG9yZS9tdXRhdGUuanMiLCIvKiBlc2xpbnQgbm8tbmVzdGVkLXRlcm5hcnk6IDAgKi9cbi8qIGVzbGludCBuby1sb25lbHktaWY6IDAgKi9cbi8qIGVzbGludCBuby11bmRlcnNjb3JlLWRhbmdsZTogMCAqL1xuaW1wb3J0IF8gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IENvbnN0IGZyb20gJy4uL2NvbnN0JztcblxuZnVuY3Rpb24gY29tcGFyYXRvcihhLCBiKSB7XG4gIGxldCByZXN1bHQ7XG4gIGlmICh0eXBlb2YgYiA9PT0gJ3N0cmluZycpIHtcbiAgICByZXN1bHQgPSBiLmxvY2FsZUNvbXBhcmUoYSk7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gYSA+IGIgPyAtMSA6ICgoYSA8IGIpID8gMSA6IDApO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBjb25zdCBzb3J0ID0gKGRhdGEsIHNvcnRPcmRlciwgeyBkYXRhRmllbGQsIHNvcnRGdW5jLCBzb3J0VmFsdWUgfSkgPT4ge1xuICBjb25zdCBfZGF0YSA9IFsuLi5kYXRhXTtcbiAgX2RhdGEuc29ydCgoYSwgYikgPT4ge1xuICAgIGxldCByZXN1bHQ7XG4gICAgbGV0IHZhbHVlQSA9IF8uZ2V0KGEsIGRhdGFGaWVsZCk7XG4gICAgbGV0IHZhbHVlQiA9IF8uZ2V0KGIsIGRhdGFGaWVsZCk7XG4gICAgaWYgKHNvcnRWYWx1ZSkge1xuICAgICAgdmFsdWVBID0gc29ydFZhbHVlKHZhbHVlQSwgYSk7XG4gICAgICB2YWx1ZUIgPSBzb3J0VmFsdWUodmFsdWVCLCBiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWVBID0gXy5pc0RlZmluZWQodmFsdWVBKSA/IHZhbHVlQSA6ICcnO1xuICAgICAgdmFsdWVCID0gXy5pc0RlZmluZWQodmFsdWVCKSA/IHZhbHVlQiA6ICcnO1xuICAgIH1cblxuICAgIGlmIChzb3J0RnVuYykge1xuICAgICAgcmVzdWx0ID0gc29ydEZ1bmModmFsdWVBLCB2YWx1ZUIsIHNvcnRPcmRlciwgZGF0YUZpZWxkLCBhLCBiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHNvcnRPcmRlciA9PT0gQ29uc3QuU09SVF9ERVNDKSB7XG4gICAgICAgIHJlc3VsdCA9IGNvbXBhcmF0b3IodmFsdWVBLCB2YWx1ZUIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gY29tcGFyYXRvcih2YWx1ZUIsIHZhbHVlQSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0pO1xuICByZXR1cm4gX2RhdGE7XG59O1xuXG5leHBvcnQgY29uc3QgbmV4dE9yZGVyID0gKFxuICBjdXJyZW50U29ydENvbHVtbixcbiAgeyBzb3J0T3JkZXIsIHNvcnRDb2x1bW4gfSxcbiAgZGVmYXVsdE9yZGVyID0gQ29uc3QuU09SVF9ERVNDXG4pID0+IHtcbiAgaWYgKCFzb3J0Q29sdW1uIHx8IGN1cnJlbnRTb3J0Q29sdW1uLmRhdGFGaWVsZCAhPT0gc29ydENvbHVtbi5kYXRhRmllbGQpIHJldHVybiBkZWZhdWx0T3JkZXI7XG4gIHJldHVybiBzb3J0T3JkZXIgPT09IENvbnN0LlNPUlRfREVTQyA/IENvbnN0LlNPUlRfQVNDIDogQ29uc3QuU09SVF9ERVNDO1xufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL3N0b3JlL3NvcnQuanMiLCJpbXBvcnQgQ29uc3QgZnJvbSAnLi4vY29uc3QnO1xuXG5leHBvcnQgY29uc3QgdHlwZUNvbnZlcnQgPSAodHlwZSwgdmFsdWUpID0+IHtcbiAgaWYgKHR5cGUgPT09IENvbnN0LlRZUEVfU1RSSU5HKSB7XG4gICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gQ29uc3QuVFlQRV9OVU1CRVIpIHtcbiAgICByZXR1cm4gTnVtYmVyKHZhbHVlKTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSBDb25zdC5UWVBFX0JPT0xFQU4pIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlID09PSAndHJ1ZSc7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gQ29uc3QuVFlQRV9EQVRFKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlKTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59O1xuXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9zdG9yZS90eXBlLmpzIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBFeHBhbnNpb25Db250ZXh0IGZyb20gJy4uL2NvbnRleHRzL3Jvdy1leHBhbmQtY29udGV4dCc7XG5cbmV4cG9ydCBkZWZhdWx0IENvbXBvbmVudCA9PiAoKSA9PiAoXG4gIDxFeHBhbnNpb25Db250ZXh0LkNvbnN1bWVyPlxuICAgIHsgZXhwYW5kUm93ID0+IDxDb21wb25lbnQgeyAuLi5leHBhbmRSb3cgfSAvPiB9XG4gIDwvRXhwYW5zaW9uQ29udGV4dC5Db25zdW1lcj5cbik7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9yb3ctZXhwYW5kL2V4cGFuZC1oZWFkZXItY2VsbC1jb25zdW1lci5qcyIsIi8qIGVzbGludCByZWFjdC9yZXF1aXJlLWRlZmF1bHQtcHJvcHM6IDAgKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG5pbXBvcnQgRmlsdGVyc0NlbGwgZnJvbSAnLi9maWx0ZXJzLWNlbGwnO1xuaW1wb3J0IENvbnN0IGZyb20gJy4vY29uc3QnO1xuaW1wb3J0IFJvd1RlbXBsYXRlIGZyb20gJy4vcm93L3Jvdy10ZW1wbGF0ZSc7XG5cbmNvbnN0IEZpbHRlcnMgPSAocHJvcHMpID0+IHtcbiAgY29uc3Qge1xuICAgIGNvbHVtbnMsXG4gICAgb25GaWx0ZXIsXG4gICAgY3VyckZpbHRlcnMsXG4gICAgZmlsdGVyUG9zaXRpb24sXG4gICAgb25FeHRlcm5hbEZpbHRlcixcbiAgICBjbGFzc05hbWUsXG4gICAgc2VsZWN0Um93LFxuICAgIGV4cGFuZFJvd1xuICB9ID0gcHJvcHM7XG5cbiAgZnVuY3Rpb24gcmVuZGVyQ29udGVudCgpIHtcbiAgICBjb25zdCBmaWx0ZXJDb2x1bW5zID0gW107XG4gICAgbGV0IHNob3dGaWx0ZXJzUm93ID0gZmFsc2U7XG5cbiAgICBjb2x1bW5zLmZvckVhY2goKGNvbHVtbiwgaSkgPT4ge1xuICAgICAgZmlsdGVyQ29sdW1ucy5wdXNoKDxGaWx0ZXJzQ2VsbFxuICAgICAgICBpbmRleD17IGkgfVxuICAgICAgICBrZXk9eyBjb2x1bW4uZGF0YUZpZWxkIH1cbiAgICAgICAgY29sdW1uPXsgY29sdW1uIH1cbiAgICAgICAgY3VyckZpbHRlcnM9eyBjdXJyRmlsdGVycyB9XG4gICAgICAgIG9uRXh0ZXJuYWxGaWx0ZXI9eyBvbkV4dGVybmFsRmlsdGVyIH1cbiAgICAgICAgb25GaWx0ZXI9eyBvbkZpbHRlciB9XG4gICAgICAvPik7XG5cbiAgICAgIGlmIChjb2x1bW4uZmlsdGVyUmVuZGVyZXIgfHwgY29sdW1uLmZpbHRlcikge1xuICAgICAgICBpZiAoIXNob3dGaWx0ZXJzUm93KSB7XG4gICAgICAgICAgc2hvd0ZpbHRlcnNSb3cgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGZpbHRlckNvbHVtbnM7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDx0Ym9keVxuICAgICAgY2xhc3NOYW1lPXsgY2xhc3NOYW1lIH1cbiAgICAgIHN0eWxlPXsge1xuICAgICAgICBkaXNwbGF5OlxuICAgICAgICBmaWx0ZXJQb3NpdGlvbiA9PT0gQ29uc3QuRklMVEVSU19QT1NJVElPTl9UT1BcbiAgICAgICAgICA/ICd0YWJsZS1oZWFkZXItZ3JvdXAnXG4gICAgICAgICAgOiAndGFibGUtZm9vdGVyLWdyb3VwJ1xuICAgICAgfSB9XG4gICAgPlxuICAgICAgPFJvd1RlbXBsYXRlXG4gICAgICAgIHJlbmRlckNvbnRlbnQ9eyByZW5kZXJDb250ZW50IH1cbiAgICAgICAgc2VsZWN0Um93PXsgc2VsZWN0Um93IH1cbiAgICAgICAgZXhwYW5kUm93PXsgZXhwYW5kUm93IH1cbiAgICAgICAgY2VsbEVsPVwidGRcIlxuICAgICAgLz5cbiAgICA8L3Rib2R5PlxuICApO1xufTtcblxuRmlsdGVycy5wcm9wVHlwZXMgPSB7XG4gIGNvbHVtbnM6IFByb3BUeXBlcy5hcnJheS5pc1JlcXVpcmVkLFxuICBvbkZpbHRlcjogUHJvcFR5cGVzLmZ1bmMsXG4gIGZpbHRlclBvc2l0aW9uOiBQcm9wVHlwZXMub25lT2YoW1xuICAgIENvbnN0LkZJTFRFUlNfUE9TSVRJT05fVE9QLFxuICAgIENvbnN0LkZJTFRFUlNfUE9TSVRJT05fSU5MSU5FLFxuICAgIENvbnN0LkZJTFRFUlNfUE9TSVRJT05fQk9UVE9NXG4gIF0pLFxuICBjdXJyRmlsdGVyczogUHJvcFR5cGVzLm9iamVjdCxcbiAgb25FeHRlcm5hbEZpbHRlcjogUHJvcFR5cGVzLmZ1bmMsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2VsZWN0Um93OiBQcm9wVHlwZXMub2JqZWN0LFxuICBleHBhbmRSb3c6IFByb3BUeXBlcy5vYmplY3Rcbn07XG5cbkZpbHRlcnMuZGVmYXVsdFByb3BzID0ge1xuICBwb3NpdGlvbjogQ29uc3QuRklMVEVSU19QT1NJVElPTl9UT1Bcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEZpbHRlcnM7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9maWx0ZXJzLmpzIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgXyBmcm9tICcuL3V0aWxzJztcblxuY29uc3QgRmlsdGVyc0NlbGwgPSAocHJvcHMpID0+IHtcbiAgY29uc3Qge1xuICAgIGluZGV4LCBjb2x1bW4sIG9uRXh0ZXJuYWxGaWx0ZXIsXG4gICAgY3VyckZpbHRlcnMsIG9uRmlsdGVyXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgeyBmaWx0ZXJSZW5kZXJlciwgZmlsdGVyIH0gPSBjb2x1bW47XG4gIGxldCBmaWx0ZXJFbG07XG4gIGNvbnN0IGNlbGxBdHRycyA9IHt9O1xuICBjb25zdCBjZWxsU3R5bGUgPSB7fTtcbiAgY2VsbEF0dHJzLnN0eWxlID0gY2VsbFN0eWxlO1xuICBpZiAoY29sdW1uLmhlYWRlckFsaWduKSB7XG4gICAgY2VsbFN0eWxlLnRleHRBbGlnbiA9IF8uaXNGdW5jdGlvbihjb2x1bW4uaGVhZGVyQWxpZ24pXG4gICAgICA/IGNvbHVtbi5oZWFkZXJBbGlnbihjb2x1bW4sIGluZGV4KVxuICAgICAgOiBjb2x1bW4uaGVhZGVyQWxpZ247XG4gIH1cbiAgaWYgKGNvbHVtbi5maWx0ZXJSZW5kZXJlcikge1xuICAgIGNvbnN0IG9uQ3VzdG9tRmlsdGVyID0gb25FeHRlcm5hbEZpbHRlcihjb2x1bW4sIGZpbHRlci5wcm9wcy50eXBlKTtcbiAgICBmaWx0ZXJFbG0gPSBmaWx0ZXJSZW5kZXJlcihvbkN1c3RvbUZpbHRlciwgY29sdW1uKTtcbiAgfSBlbHNlIGlmIChmaWx0ZXIpIHtcbiAgICBmaWx0ZXJFbG0gPSAoXG4gICAgICA8ZmlsdGVyLkZpbHRlclxuICAgICAgICB7IC4uLmZpbHRlci5wcm9wcyB9XG4gICAgICAgIGZpbHRlclN0YXRlPXsgY3VyckZpbHRlcnNbY29sdW1uLmRhdGFGaWVsZF0gfVxuICAgICAgICBvbkZpbHRlcj17IG9uRmlsdGVyIH1cbiAgICAgICAgY29sdW1uPXsgY29sdW1uIH1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudCgndGgnLCBjZWxsQXR0cnMsIGZpbHRlckVsbSk7XG59O1xuXG5GaWx0ZXJzQ2VsbC5wcm9wVHlwZXMgPSB7XG4gIGluZGV4OiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gIGNvbHVtbjogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICBjdXJyRmlsdGVyczogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICBvbkZpbHRlcjogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uRXh0ZXJuYWxGaWx0ZXI6IFByb3BUeXBlcy5mdW5jXG59O1xuXG5GaWx0ZXJzQ2VsbC5kZWZhdWx0UHJvcHMgPSB7XG4gIG9uRmlsdGVyOiAoKSA9PiB7IH0sXG4gIG9uRXh0ZXJuYWxGaWx0ZXI6ICgpID0+IHsgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgRmlsdGVyc0NlbGw7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9maWx0ZXJzLWNlbGwuanMiLCIvKiBlc2xpbnQgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzOiAwICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuY29uc3QgQ2FwdGlvbiA9IChwcm9wcykgPT4ge1xuICBpZiAoIXByb3BzLmNoaWxkcmVuKSByZXR1cm4gbnVsbDtcblxuICBjb25zdCBjYXB0aW9uID0gcHJvcHMuYm9vdHN0cmFwNCA/IChcbiAgICA8Y2FwdGlvbiBzdHlsZT17IHsgY2FwdGlvblNpZGU6ICd0b3AnIH0gfT57cHJvcHMuY2hpbGRyZW59PC9jYXB0aW9uPlxuICApIDogKFxuICAgIDxjYXB0aW9uPntwcm9wcy5jaGlsZHJlbn08L2NhcHRpb24+XG4gICk7XG5cbiAgcmV0dXJuIGNhcHRpb247XG59O1xuXG5DYXB0aW9uLnByb3BUeXBlcyA9IHtcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5vbmVPZlR5cGUoW1xuICAgIFByb3BUeXBlcy5ub2RlLFxuICAgIFByb3BUeXBlcy5zdHJpbmdcbiAgXSksXG4gIGJvb3RzdHJhcDQ6IFByb3BUeXBlcy5ib29sXG59O1xuXG5leHBvcnQgZGVmYXVsdCBDYXB0aW9uO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9zcmMvY2FwdGlvbi5qcyIsIi8qIGVzbGludCByZWFjdC9wcm9wLXR5cGVzOiAwICovXG4vKiBlc2xpbnQgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzOiAwICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG5pbXBvcnQgXyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBTaW1wbGVSb3cgZnJvbSAnLi9yb3cvc2ltcGxlLXJvdyc7XG5pbXBvcnQgUm93QWdncmVnYXRvciBmcm9tICcuL3Jvdy9hZ2dyZWdhdGUtcm93JztcbmltcG9ydCBSb3dTZWN0aW9uIGZyb20gJy4vcm93L3Jvdy1zZWN0aW9uJztcbmltcG9ydCBDb25zdCBmcm9tICcuL2NvbnN0JztcbmltcG9ydCB3aXRoUm93U2VsZWN0aW9uIGZyb20gJy4vcm93LXNlbGVjdGlvbi9yb3ctY29uc3VtZXInO1xuaW1wb3J0IHdpdGhSb3dFeHBhbnNpb24gZnJvbSAnLi9yb3ctZXhwYW5kL3Jvdy1jb25zdW1lcic7XG5cbmNsYXNzIEJvZHkgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICBjb25zdCB7XG4gICAgICBrZXlGaWVsZCxcbiAgICAgIGNlbGxFZGl0LFxuICAgICAgc2VsZWN0Um93LFxuICAgICAgZXhwYW5kUm93XG4gICAgfSA9IHByb3BzO1xuXG4gICAgLy8gQ29uc3RydWN0IEVkaXRpbmcgQ2VsbCBDb21wb25lbnRcbiAgICBpZiAoY2VsbEVkaXQuY3JlYXRlQ29udGV4dCkge1xuICAgICAgdGhpcy5FZGl0aW5nQ2VsbCA9IGNlbGxFZGl0LmNyZWF0ZUVkaXRpbmdDZWxsKF8sIGNlbGxFZGl0Lm9wdGlvbnMub25TdGFydEVkaXQpO1xuICAgIH1cblxuICAgIC8vIENvbnN0cnVjdCBSb3cgQ29tcG9uZW50XG4gICAgbGV0IFJvd0NvbXBvbmVudCA9IFNpbXBsZVJvdztcbiAgICBjb25zdCBzZWxlY3RSb3dFbmFibGVkID0gc2VsZWN0Um93Lm1vZGUgIT09IENvbnN0LlJPV19TRUxFQ1RfRElTQUJMRUQ7XG4gICAgY29uc3QgZXhwYW5kUm93RW5hYmxlZCA9ICEhZXhwYW5kUm93LnJlbmRlcmVyO1xuXG4gICAgaWYgKGV4cGFuZFJvd0VuYWJsZWQpIHtcbiAgICAgIFJvd0NvbXBvbmVudCA9IHdpdGhSb3dFeHBhbnNpb24oUm93QWdncmVnYXRvcik7XG4gICAgfVxuXG4gICAgaWYgKHNlbGVjdFJvd0VuYWJsZWQpIHtcbiAgICAgIFJvd0NvbXBvbmVudCA9IHdpdGhSb3dTZWxlY3Rpb24oZXhwYW5kUm93RW5hYmxlZCA/IFJvd0NvbXBvbmVudCA6IFJvd0FnZ3JlZ2F0b3IpO1xuICAgIH1cblxuICAgIGlmIChjZWxsRWRpdC5jcmVhdGVDb250ZXh0KSB7XG4gICAgICBSb3dDb21wb25lbnQgPSBjZWxsRWRpdC53aXRoUm93TGV2ZWxDZWxsRWRpdChSb3dDb21wb25lbnQsIHNlbGVjdFJvd0VuYWJsZWQsIGtleUZpZWxkLCBfKTtcbiAgICB9XG4gICAgdGhpcy5Sb3dDb21wb25lbnQgPSBSb3dDb21wb25lbnQ7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgY29sdW1ucyxcbiAgICAgIGRhdGEsXG4gICAgICB0YWJJbmRleENlbGwsXG4gICAgICBrZXlGaWVsZCxcbiAgICAgIGlzRW1wdHksXG4gICAgICBub0RhdGFJbmRpY2F0aW9uLFxuICAgICAgdmlzaWJsZUNvbHVtblNpemUsXG4gICAgICBjZWxsRWRpdCxcbiAgICAgIHNlbGVjdFJvdyxcbiAgICAgIHJvd1N0eWxlLFxuICAgICAgcm93Q2xhc3NlcyxcbiAgICAgIHJvd0V2ZW50cyxcbiAgICAgIGV4cGFuZFJvdyxcbiAgICAgIGNsYXNzTmFtZVxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgbGV0IGNvbnRlbnQ7XG5cbiAgICBpZiAoaXNFbXB0eSkge1xuICAgICAgY29uc3QgaW5kaWNhdGlvbiA9IF8uaXNGdW5jdGlvbihub0RhdGFJbmRpY2F0aW9uKSA/IG5vRGF0YUluZGljYXRpb24oKSA6IG5vRGF0YUluZGljYXRpb247XG4gICAgICBpZiAoIWluZGljYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb250ZW50ID0gPFJvd1NlY3Rpb24gY29udGVudD17IGluZGljYXRpb24gfSBjb2xTcGFuPXsgdmlzaWJsZUNvbHVtblNpemUgfSAvPjtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc2VsZWN0Um93RW5hYmxlZCA9IHNlbGVjdFJvdy5tb2RlICE9PSBDb25zdC5ST1dfU0VMRUNUX0RJU0FCTEVEO1xuICAgICAgY29uc3QgZXhwYW5kUm93RW5hYmxlZCA9ICEhZXhwYW5kUm93LnJlbmRlcmVyO1xuXG4gICAgICBjb25zdCBhZGRpdGlvbmFsUm93UHJvcHMgPSB7fTtcblxuICAgICAgaWYgKGNlbGxFZGl0LmNyZWF0ZUNvbnRleHQpIHtcbiAgICAgICAgYWRkaXRpb25hbFJvd1Byb3BzLkVkaXRpbmdDZWxsQ29tcG9uZW50ID0gdGhpcy5FZGl0aW5nQ2VsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHNlbGVjdFJvd0VuYWJsZWQgfHwgZXhwYW5kUm93RW5hYmxlZCkge1xuICAgICAgICBhZGRpdGlvbmFsUm93UHJvcHMuZXhwYW5kUm93ID0gZXhwYW5kUm93O1xuICAgICAgICBhZGRpdGlvbmFsUm93UHJvcHMuc2VsZWN0Um93ID0gc2VsZWN0Um93O1xuICAgICAgfVxuXG4gICAgICBjb250ZW50ID0gZGF0YS5tYXAoKHJvdywgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3Qga2V5ID0gXy5nZXQocm93LCBrZXlGaWVsZCk7XG4gICAgICAgIGNvbnN0IGJhc2VSb3dQcm9wcyA9IHtcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgcm93LFxuICAgICAgICAgIHRhYkluZGV4Q2VsbCxcbiAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgIGtleUZpZWxkLFxuICAgICAgICAgIGNlbGxFZGl0LFxuICAgICAgICAgIHZhbHVlOiBrZXksXG4gICAgICAgICAgcm93SW5kZXg6IGluZGV4LFxuICAgICAgICAgIHZpc2libGVDb2x1bW5TaXplLFxuICAgICAgICAgIGF0dHJzOiByb3dFdmVudHMgfHwge30sXG4gICAgICAgICAgLi4uYWRkaXRpb25hbFJvd1Byb3BzXG4gICAgICAgIH07XG5cbiAgICAgICAgYmFzZVJvd1Byb3BzLnN0eWxlID0gXy5pc0Z1bmN0aW9uKHJvd1N0eWxlKSA/IHJvd1N0eWxlKHJvdywgaW5kZXgpIDogcm93U3R5bGU7XG4gICAgICAgIGJhc2VSb3dQcm9wcy5jbGFzc05hbWUgPSAoXy5pc0Z1bmN0aW9uKHJvd0NsYXNzZXMpID8gcm93Q2xhc3Nlcyhyb3csIGluZGV4KSA6IHJvd0NsYXNzZXMpO1xuXG4gICAgICAgIHJldHVybiA8dGhpcy5Sb3dDb21wb25lbnQgeyAuLi5iYXNlUm93UHJvcHMgfSAvPjtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8dGJvZHkgY2xhc3NOYW1lPXsgY2xhc3NOYW1lIH0+eyBjb250ZW50IH08L3Rib2R5PlxuICAgICk7XG4gIH1cbn1cblxuQm9keS5wcm9wVHlwZXMgPSB7XG4gIGtleUZpZWxkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGRhdGE6IFByb3BUeXBlcy5hcnJheS5pc1JlcXVpcmVkLFxuICBjb2x1bW5zOiBQcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZCxcbiAgc2VsZWN0Um93OiBQcm9wVHlwZXMub2JqZWN0XG59O1xuXG5leHBvcnQgZGVmYXVsdCBCb2R5O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9zcmMvYm9keS5qcyIsIi8qIGVzbGludCByZWFjdC9wcm9wLXR5cGVzOiAwICovXG4vKiBlc2xpbnQgcmVhY3Qvbm8tYXJyYXktaW5kZXgta2V5OiAwICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuaW1wb3J0IFJvd1B1cmVDb250ZW50IGZyb20gJy4vcm93LXB1cmUtY29udGVudCc7XG5pbXBvcnQgZXZlbnREZWxlZ2F0ZXIgZnJvbSAnLi9ldmVudC1kZWxlZ2F0ZXInO1xuaW1wb3J0IHNob3VsZFVwZGF0ZXIgZnJvbSAnLi9zaG91bGQtdXBkYXRlcic7XG5cbmNsYXNzIFNpbXBsZVJvdyBleHRlbmRzIHNob3VsZFVwZGF0ZXIoZXZlbnREZWxlZ2F0ZXIoQ29tcG9uZW50KSkge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnNob3VsZFVwZGF0ZVJvd0NvbnRlbnQgPSBmYWxzZTtcbiAgfVxuXG4gIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMpIHtcbiAgICB0aGlzLnNob3VsZFVwZGF0ZVJvd0NvbnRlbnQgPSBmYWxzZTtcbiAgICB0aGlzLnNob3VsZFVwZGF0ZVJvd0NvbnRlbnQgPSB0aGlzLnNob3VsZFJvd0NvbnRlbnRVcGRhdGUobmV4dFByb3BzKTtcbiAgICBpZiAodGhpcy5zaG91bGRVcGRhdGVSb3dDb250ZW50KSByZXR1cm4gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzLnNob3VsZFVwZGF0ZWRCeVNlbGZQcm9wcyhuZXh0UHJvcHMpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIHN0eWxlLFxuICAgICAgYXR0cnMsXG4gICAgICB2aXNpYmxlQ29sdW1uU2l6ZSxcbiAgICAgIHRhYkluZGV4Q2VsbCxcbiAgICAgIC4uLnJlc3RcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB0ckF0dHJzID0gdGhpcy5kZWxlZ2F0ZShhdHRycyk7XG4gICAgY29uc3QgdGFiSW5kZXhTdGFydCA9ICh0aGlzLnByb3BzLnJvd0luZGV4ICogdmlzaWJsZUNvbHVtblNpemUpICsgMTtcblxuICAgIHJldHVybiAoXG4gICAgICA8dHIgc3R5bGU9eyBzdHlsZSB9IGNsYXNzTmFtZT17IGNsYXNzTmFtZSB9IHsgLi4udHJBdHRycyB9PlxuICAgICAgICA8Um93UHVyZUNvbnRlbnRcbiAgICAgICAgICBzaG91bGRVcGRhdGU9eyB0aGlzLnNob3VsZFVwZGF0ZVJvd0NvbnRlbnQgfVxuICAgICAgICAgIHRhYkluZGV4U3RhcnQ9eyB0YWJJbmRleENlbGwgPyB0YWJJbmRleFN0YXJ0IDogLTEgfVxuICAgICAgICAgIHsgLi4ucmVzdCB9XG4gICAgICAgIC8+XG4gICAgICA8L3RyPlxuICAgICk7XG4gIH1cbn1cblxuU2ltcGxlUm93LnByb3BUeXBlcyA9IHtcbiAgcm93OiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gIHJvd0luZGV4OiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gIGNvbHVtbnM6IFByb3BUeXBlcy5hcnJheS5pc1JlcXVpcmVkLFxuICBzdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBhdHRyczogUHJvcFR5cGVzLm9iamVjdFxufTtcblxuU2ltcGxlUm93LmRlZmF1bHRQcm9wcyA9IHtcbiAgZWRpdGFibGU6IHRydWUsXG4gIHN0eWxlOiB7fSxcbiAgY2xhc3NOYW1lOiBudWxsLFxuICBhdHRyczoge31cbn07XG5cbmV4cG9ydCBkZWZhdWx0IFNpbXBsZVJvdztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL3Jvdy9zaW1wbGUtcm93LmpzIiwiLyogZXNsaW50IHJlYWN0L3Byb3AtdHlwZXM6IDAgKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG5pbXBvcnQgZXZlbnREZWxlZ2F0ZXIgZnJvbSAnLi9jZWxsLWV2ZW50LWRlbGVnYXRlcic7XG5pbXBvcnQgXyBmcm9tICcuL3V0aWxzJztcblxuY2xhc3MgQ2VsbCBleHRlbmRzIGV2ZW50RGVsZWdhdGVyKENvbXBvbmVudCkge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmNyZWF0ZUhhbmRsZUVkaXRpbmdDZWxsID0gdGhpcy5jcmVhdGVIYW5kbGVFZGl0aW5nQ2VsbC5iaW5kKHRoaXMpO1xuICB9XG5cbiAgc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcykge1xuICAgIGxldCBzaG91bGRVcGRhdGUgPSBmYWxzZTtcbiAgICBpZiAobmV4dFByb3BzLmNvbHVtbi5pc0R1bW15RmllbGQpIHtcbiAgICAgIHNob3VsZFVwZGF0ZSA9ICFfLmlzRXF1YWwodGhpcy5wcm9wcy5yb3csIG5leHRQcm9wcy5yb3cpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzaG91bGRVcGRhdGUgPVxuICAgICAgICBfLmdldCh0aGlzLnByb3BzLnJvdywgdGhpcy5wcm9wcy5jb2x1bW4uZGF0YUZpZWxkKVxuICAgICAgICAgICE9PSBfLmdldChuZXh0UHJvcHMucm93LCBuZXh0UHJvcHMuY29sdW1uLmRhdGFGaWVsZCk7XG4gICAgfVxuXG4gICAgaWYgKHNob3VsZFVwZGF0ZSkgcmV0dXJuIHRydWU7XG5cbiAgICAvLyBpZiAobmV4dFByb3BzLmZvcm1hdHRlcilcblxuICAgIHNob3VsZFVwZGF0ZSA9XG4gICAgICAobmV4dFByb3BzLmNvbHVtbi5mb3JtYXR0ZXIgPyAhXy5pc0VxdWFsKHRoaXMucHJvcHMucm93LCBuZXh0UHJvcHMucm93KSA6IGZhbHNlKSB8fFxuICAgICAgdGhpcy5wcm9wcy5jb2x1bW4uaGlkZGVuICE9PSBuZXh0UHJvcHMuY29sdW1uLmhpZGRlbiB8fFxuICAgICAgdGhpcy5wcm9wcy5jb2x1bW4uaXNEdW1teUZpZWxkICE9PSBuZXh0UHJvcHMuY29sdW1uLmlzRHVtbXlGaWVsZCB8fFxuICAgICAgdGhpcy5wcm9wcy5yb3dJbmRleCAhPT0gbmV4dFByb3BzLnJvd0luZGV4IHx8XG4gICAgICB0aGlzLnByb3BzLmNvbHVtbkluZGV4ICE9PSBuZXh0UHJvcHMuY29sdW1uSW5kZXggfHxcbiAgICAgIHRoaXMucHJvcHMuY2xhc3NOYW1lICE9PSBuZXh0UHJvcHMuY2xhc3NOYW1lIHx8XG4gICAgICB0aGlzLnByb3BzLnRpdGxlICE9PSBuZXh0UHJvcHMudGl0bGUgfHxcbiAgICAgIHRoaXMucHJvcHMuZWRpdGFibGUgIT09IG5leHRQcm9wcy5lZGl0YWJsZSB8fFxuICAgICAgdGhpcy5wcm9wcy5jbGlja1RvRWRpdCAhPT0gbmV4dFByb3BzLmNsaWNrVG9FZGl0IHx8XG4gICAgICB0aGlzLnByb3BzLmRiY2xpY2tUb0VkaXQgIT09IG5leHRQcm9wcy5kYmNsaWNrVG9FZGl0IHx8XG4gICAgICAhXy5pc0VxdWFsKHRoaXMucHJvcHMuc3R5bGUsIG5leHRQcm9wcy5zdHlsZSkgfHxcbiAgICAgICFfLmlzRXF1YWwodGhpcy5wcm9wcy5jb2x1bW4uZm9ybWF0RXh0cmFEYXRhLCBuZXh0UHJvcHMuY29sdW1uLmZvcm1hdEV4dHJhRGF0YSkgfHxcbiAgICAgICFfLmlzRXF1YWwodGhpcy5wcm9wcy5jb2x1bW4uZXZlbnRzLCBuZXh0UHJvcHMuY29sdW1uLmV2ZW50cykgfHxcbiAgICAgICFfLmlzRXF1YWwodGhpcy5wcm9wcy5jb2x1bW4uYXR0cnMsIG5leHRQcm9wcy5jb2x1bW4uYXR0cnMpIHx8XG4gICAgICB0aGlzLnByb3BzLnRhYkluZGV4ICE9PSBuZXh0UHJvcHMudGFiSW5kZXg7XG4gICAgcmV0dXJuIHNob3VsZFVwZGF0ZTtcbiAgfVxuXG4gIGNyZWF0ZUhhbmRsZUVkaXRpbmdDZWxsID0gb3JpZ2luRnVuYyA9PiAoZSkgPT4ge1xuICAgIGNvbnN0IHsgb25TdGFydCwgcm93SW5kZXgsIGNvbHVtbkluZGV4LCBjbGlja1RvRWRpdCwgZGJjbGlja1RvRWRpdCB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoKGNsaWNrVG9FZGl0IHx8IGRiY2xpY2tUb0VkaXQpICYmIF8uaXNGdW5jdGlvbihvcmlnaW5GdW5jKSkge1xuICAgICAgb3JpZ2luRnVuYyhlKTtcbiAgICB9XG4gICAgaWYgKG9uU3RhcnQpIHtcbiAgICAgIG9uU3RhcnQocm93SW5kZXgsIGNvbHVtbkluZGV4KTtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgcm93LFxuICAgICAgcm93SW5kZXgsXG4gICAgICBjb2x1bW4sXG4gICAgICBjb2x1bW5JbmRleCxcbiAgICAgIG9uU3RhcnQsXG4gICAgICBlZGl0YWJsZSxcbiAgICAgIGNsaWNrVG9FZGl0LFxuICAgICAgZGJjbGlja1RvRWRpdCxcbiAgICAgIC4uLnJlc3RcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7XG4gICAgICBkYXRhRmllbGQsXG4gICAgICBmb3JtYXR0ZXIsXG4gICAgICBmb3JtYXRFeHRyYURhdGFcbiAgICB9ID0gY29sdW1uO1xuICAgIGNvbnN0IGF0dHJzID0gdGhpcy5kZWxlZ2F0ZSh7IC4uLnJlc3QgfSk7XG4gICAgbGV0IGNvbnRlbnQgPSBjb2x1bW4uaXNEdW1teUZpZWxkID8gbnVsbCA6IF8uZ2V0KHJvdywgZGF0YUZpZWxkKTtcblxuICAgIGlmIChmb3JtYXR0ZXIpIHtcbiAgICAgIGNvbnRlbnQgPSBjb2x1bW4uZm9ybWF0dGVyKGNvbnRlbnQsIHJvdywgcm93SW5kZXgsIGZvcm1hdEV4dHJhRGF0YSk7XG4gICAgfVxuXG4gICAgaWYgKGNsaWNrVG9FZGl0ICYmIGVkaXRhYmxlKSB7XG4gICAgICBhdHRycy5vbkNsaWNrID0gdGhpcy5jcmVhdGVIYW5kbGVFZGl0aW5nQ2VsbChhdHRycy5vbkNsaWNrKTtcbiAgICB9IGVsc2UgaWYgKGRiY2xpY2tUb0VkaXQgJiYgZWRpdGFibGUpIHtcbiAgICAgIGF0dHJzLm9uRG91YmxlQ2xpY2sgPSB0aGlzLmNyZWF0ZUhhbmRsZUVkaXRpbmdDZWxsKGF0dHJzLm9uRG91YmxlQ2xpY2spO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8dGQgeyAuLi5hdHRycyB9PlxuICAgICAgICB7IHR5cGVvZiBjb250ZW50ID09PSAnYm9vbGVhbicgPyBgJHtjb250ZW50fWAgOiBjb250ZW50IH1cbiAgICAgIDwvdGQ+XG4gICAgKTtcbiAgfVxufVxuXG5DZWxsLnByb3BUeXBlcyA9IHtcbiAgcm93OiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gIHJvd0luZGV4OiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gIGNvbHVtbjogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICBjb2x1bW5JbmRleDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkXG59O1xuXG5leHBvcnQgZGVmYXVsdCBDZWxsO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9zcmMvY2VsbC5qcyIsIi8qIGVzbGludCBjbGFzcy1tZXRob2RzLXVzZS10aGlzOiAwICovXG4vKiBlc2xpbnQgcmVhY3QvcHJvcC10eXBlczogMCAqL1xuLyogZXNsaW50IG5vLXBsdXNwbHVzOiAwICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBfIGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCBFeHBhbmRDZWxsIGZyb20gJy4uL3Jvdy1leHBhbmQvZXhwYW5kLWNlbGwnO1xuaW1wb3J0IFNlbGVjdGlvbkNlbGwgZnJvbSAnLi4vcm93LXNlbGVjdGlvbi9zZWxlY3Rpb24tY2VsbCc7XG5pbXBvcnQgc2hvdWxkVXBkYXRlciBmcm9tICcuL3Nob3VsZC11cGRhdGVyJztcbmltcG9ydCBldmVudERlbGVnYXRlciBmcm9tICcuL2V2ZW50LWRlbGVnYXRlcic7XG5pbXBvcnQgUm93UHVyZUNvbnRlbnQgZnJvbSAnLi9yb3ctcHVyZS1jb250ZW50JztcbmltcG9ydCBDb25zdCBmcm9tICcuLi9jb25zdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJvd0FnZ3JlZ2F0b3IgZXh0ZW5kcyBzaG91bGRVcGRhdGVyKGV2ZW50RGVsZWdhdGVyKFJlYWN0LkNvbXBvbmVudCkpIHtcbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICBhdHRyczogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBzdHlsZTogUHJvcFR5cGVzLm9iamVjdFxuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICBhdHRyczoge30sXG4gICAgc3R5bGU6IHt9XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmNsaWNrTnVtID0gMDtcbiAgICB0aGlzLnNob3VsZFVwZGF0ZVJvd0NvbnRlbnQgPSBmYWxzZTtcbiAgICB0aGlzLmNyZWF0ZUNsaWNrRXZlbnRIYW5kbGVyID0gdGhpcy5jcmVhdGVDbGlja0V2ZW50SGFuZGxlci5iaW5kKHRoaXMpO1xuICB9XG5cbiAgc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcykge1xuICAgIGlmIChcbiAgICAgIHRoaXMucHJvcHMuc2VsZWN0ZWQgIT09IG5leHRQcm9wcy5zZWxlY3RlZCB8fFxuICAgICAgdGhpcy5wcm9wcy5leHBhbmRlZCAhPT0gbmV4dFByb3BzLmV4cGFuZGVkIHx8XG4gICAgICB0aGlzLnByb3BzLmV4cGFuZGFibGUgIT09IG5leHRQcm9wcy5leHBhbmRhYmxlIHx8XG4gICAgICB0aGlzLnByb3BzLnNlbGVjdGFibGUgIT09IG5leHRQcm9wcy5zZWxlY3RhYmxlIHx8XG4gICAgICB0aGlzLnByb3BzLnNlbGVjdFJvdy5oaWRlU2VsZWN0Q29sdW1uICE9PSBuZXh0UHJvcHMuc2VsZWN0Um93LmhpZGVTZWxlY3RDb2x1bW4gfHxcbiAgICAgIHRoaXMuc2hvdWxkVXBkYXRlZEJ5U2VsZlByb3BzKG5leHRQcm9wcylcbiAgICApIHtcbiAgICAgIHRoaXMuc2hvdWxkVXBkYXRlUm93Q29udGVudCA9IHRoaXMuc2hvdWxkUm93Q29udGVudFVwZGF0ZShuZXh0UHJvcHMpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHRoaXMuc2hvdWxkVXBkYXRlUm93Q29udGVudCA9IHRoaXMuc2hvdWxkUm93Q29udGVudFVwZGF0ZShuZXh0UHJvcHMpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2hvdWxkVXBkYXRlUm93Q29udGVudDtcbiAgfVxuXG4gIGlzUmVuZGVyRnVuY3Rpb25Db2x1bW5JbkxlZnQoXG4gICAgcG9zaXRpb24gPSBDb25zdC5JTkRJQ0FUT1JfUE9TSVRJT05fTEVGVFxuICApIHtcbiAgICByZXR1cm4gcG9zaXRpb24gPT09IENvbnN0LklORElDQVRPUl9QT1NJVElPTl9MRUZUO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHJvdyxcbiAgICAgIGNvbHVtbnMsXG4gICAgICBrZXlGaWVsZCxcbiAgICAgIHJvd0luZGV4LFxuICAgICAgc3R5bGUsXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBhdHRycyxcbiAgICAgIHNlbGVjdFJvdyxcbiAgICAgIGV4cGFuZFJvdyxcbiAgICAgIGV4cGFuZGVkLFxuICAgICAgZXhwYW5kYWJsZSxcbiAgICAgIHNlbGVjdGVkLFxuICAgICAgc2VsZWN0YWJsZSxcbiAgICAgIHZpc2libGVDb2x1bW5TaXplLFxuICAgICAgdGFiSW5kZXhDZWxsLFxuICAgICAgLi4ucmVzdFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGtleSA9IF8uZ2V0KHJvdywga2V5RmllbGQpO1xuICAgIGNvbnN0IHsgaGlkZVNlbGVjdENvbHVtbiwgc2VsZWN0Q29sdW1uUG9zaXRpb24sIGNsaWNrVG9TZWxlY3QgfSA9IHNlbGVjdFJvdztcbiAgICBjb25zdCB7IHNob3dFeHBhbmRDb2x1bW4sIGV4cGFuZENvbHVtblBvc2l0aW9uIH0gPSBleHBhbmRSb3c7XG5cbiAgICBjb25zdCBuZXdBdHRycyA9IHRoaXMuZGVsZWdhdGUoeyAuLi5hdHRycyB9KTtcbiAgICBpZiAoY2xpY2tUb1NlbGVjdCB8fCAhIWV4cGFuZFJvdy5yZW5kZXJlcikge1xuICAgICAgbmV3QXR0cnMub25DbGljayA9IHRoaXMuY3JlYXRlQ2xpY2tFdmVudEhhbmRsZXIobmV3QXR0cnMub25DbGljayk7XG4gICAgfVxuXG4gICAgbGV0IHRhYkluZGV4U3RhcnQgPSAocm93SW5kZXggKiB2aXNpYmxlQ29sdW1uU2l6ZSkgKyAxO1xuXG4gICAgY29uc3QgY2hpbGRyZW5zID0gWyhcbiAgICAgIDxSb3dQdXJlQ29udGVudFxuICAgICAgICBrZXk9XCJyb3dcIlxuICAgICAgICByb3c9eyByb3cgfVxuICAgICAgICBjb2x1bW5zPXsgY29sdW1ucyB9XG4gICAgICAgIGtleUZpZWxkPXsga2V5RmllbGQgfVxuICAgICAgICByb3dJbmRleD17IHJvd0luZGV4IH1cbiAgICAgICAgc2hvdWxkVXBkYXRlPXsgdGhpcy5zaG91bGRVcGRhdGVSb3dDb250ZW50IH1cbiAgICAgICAgdGFiSW5kZXhTdGFydD17IHRhYkluZGV4Q2VsbCA/IHRhYkluZGV4U3RhcnQgOiAtMSB9XG4gICAgICAgIHsgLi4ucmVzdCB9XG4gICAgICAvPlxuICAgICldO1xuXG4gICAgaWYgKCFoaWRlU2VsZWN0Q29sdW1uKSB7XG4gICAgICBjb25zdCBzZWxlY3RDZWxsID0gKFxuICAgICAgICA8U2VsZWN0aW9uQ2VsbFxuICAgICAgICAgIHsgLi4uc2VsZWN0Um93IH1cbiAgICAgICAgICBrZXk9XCJzZWxlY3Rpb24tY2VsbFwiXG4gICAgICAgICAgcm93S2V5PXsga2V5IH1cbiAgICAgICAgICByb3dJbmRleD17IHJvd0luZGV4IH1cbiAgICAgICAgICBzZWxlY3RlZD17IHNlbGVjdGVkIH1cbiAgICAgICAgICBkaXNhYmxlZD17ICFzZWxlY3RhYmxlIH1cbiAgICAgICAgICB0YWJJbmRleD17IHRhYkluZGV4Q2VsbCA/IHRhYkluZGV4U3RhcnQrKyA6IC0xIH1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgICBpZiAodGhpcy5pc1JlbmRlckZ1bmN0aW9uQ29sdW1uSW5MZWZ0KHNlbGVjdENvbHVtblBvc2l0aW9uKSkge1xuICAgICAgICBjaGlsZHJlbnMudW5zaGlmdChzZWxlY3RDZWxsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoaWxkcmVucy5wdXNoKHNlbGVjdENlbGwpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzaG93RXhwYW5kQ29sdW1uKSB7XG4gICAgICBjb25zdCBleHBhbmRDZWxsID0gKFxuICAgICAgICA8RXhwYW5kQ2VsbFxuICAgICAgICAgIHsgLi4uZXhwYW5kUm93IH1cbiAgICAgICAgICBrZXk9XCJleHBhbmQtY2VsbFwiXG4gICAgICAgICAgcm93S2V5PXsga2V5IH1cbiAgICAgICAgICByb3dJbmRleD17IHJvd0luZGV4IH1cbiAgICAgICAgICBleHBhbmRlZD17IGV4cGFuZGVkIH1cbiAgICAgICAgICBleHBhbmRhYmxlPXsgZXhwYW5kYWJsZSB9XG4gICAgICAgICAgdGFiSW5kZXg9eyB0YWJJbmRleENlbGwgPyB0YWJJbmRleFN0YXJ0KysgOiAtMSB9XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgICAgaWYgKHRoaXMuaXNSZW5kZXJGdW5jdGlvbkNvbHVtbkluTGVmdChleHBhbmRDb2x1bW5Qb3NpdGlvbikpIHtcbiAgICAgICAgY2hpbGRyZW5zLnVuc2hpZnQoZXhwYW5kQ2VsbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGlsZHJlbnMucHVzaChleHBhbmRDZWxsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPHRyXG4gICAgICAgIHN0eWxlPXsgc3R5bGUgfVxuICAgICAgICBjbGFzc05hbWU9eyBjbGFzc05hbWUgfVxuICAgICAgICB7IC4uLm5ld0F0dHJzIH1cbiAgICAgID5cbiAgICAgICAgeyBjaGlsZHJlbnMgfVxuICAgICAgPC90cj5cbiAgICApO1xuICB9XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9yb3cvYWdncmVnYXRlLXJvdy5qcyIsIi8qIGVzbGludFxuICByZWFjdC9yZXF1aXJlLWRlZmF1bHQtcHJvcHM6IDBcbiAganN4LWExMXkvbm8tbm9uaW50ZXJhY3RpdmUtZWxlbWVudC1pbnRlcmFjdGlvbnM6IDBcbiovXG4vKiBlc2xpbnQgbm8tbmVzdGVkLXRlcm5hcnk6IDAgKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFeHBhbmRDZWxsIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICByb3dLZXk6IFByb3BUeXBlcy5hbnksXG4gICAgZXhwYW5kZWQ6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gICAgZXhwYW5kYWJsZTogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgICBvblJvd0V4cGFuZDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBleHBhbmRDb2x1bW5SZW5kZXJlcjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgcm93SW5kZXg6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgdGFiSW5kZXg6IFByb3BUeXBlcy5udW1iZXJcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5oYW5kbGVDbGljayA9IHRoaXMuaGFuZGxlQ2xpY2suYmluZCh0aGlzKTtcbiAgfVxuXG4gIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMpIHtcbiAgICBjb25zdCBzaG91bGRVcGRhdGUgPVxuICAgICAgdGhpcy5wcm9wcy5yb3dJbmRleCAhPT0gbmV4dFByb3BzLnJvd0luZGV4IHx8XG4gICAgICB0aGlzLnByb3BzLmV4cGFuZGVkICE9PSBuZXh0UHJvcHMuZXhwYW5kZWQgfHxcbiAgICAgIHRoaXMucHJvcHMucm93S2V5ICE9PSBuZXh0UHJvcHMucm93S2V5IHx8XG4gICAgICB0aGlzLnByb3BzLnRhYkluZGV4ICE9PSBuZXh0UHJvcHMudGFiSW5kZXg7XG5cbiAgICByZXR1cm4gc2hvdWxkVXBkYXRlO1xuICB9XG5cbiAgaGFuZGxlQ2xpY2soZSkge1xuICAgIGNvbnN0IHsgcm93S2V5LCBleHBhbmRlZCwgb25Sb3dFeHBhbmQsIHJvd0luZGV4IH0gPSB0aGlzLnByb3BzO1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgb25Sb3dFeHBhbmQocm93S2V5LCAhZXhwYW5kZWQsIHJvd0luZGV4LCBlKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IGV4cGFuZGVkLCBleHBhbmRhYmxlLCBleHBhbmRDb2x1bW5SZW5kZXJlciwgdGFiSW5kZXgsIHJvd0tleSB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBhdHRycyA9IHt9O1xuICAgIGlmICh0YWJJbmRleCAhPT0gLTEpIGF0dHJzLnRhYkluZGV4ID0gdGFiSW5kZXg7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPHRkIGNsYXNzTmFtZT1cImV4cGFuZC1jZWxsXCIgb25DbGljaz17IHRoaXMuaGFuZGxlQ2xpY2sgfSB7IC4uLmF0dHJzIH0+XG4gICAgICAgIHtcbiAgICAgICAgICBleHBhbmRDb2x1bW5SZW5kZXJlciA/IGV4cGFuZENvbHVtblJlbmRlcmVyKHtcbiAgICAgICAgICAgIGV4cGFuZGFibGUsXG4gICAgICAgICAgICBleHBhbmRlZCxcbiAgICAgICAgICAgIHJvd0tleVxuICAgICAgICAgIH0pIDogKGV4cGFuZGFibGUgPyAoZXhwYW5kZWQgPyAnKC0pJyA6ICcoKyknKSA6ICcnKVxuICAgICAgICB9XG4gICAgICA8L3RkPlxuICAgICk7XG4gIH1cbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL3Jvdy1leHBhbmQvZXhwYW5kLWNlbGwuanMiLCIvKiBlc2xpbnRcbiAgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzOiAwXG4gIGpzeC1hMTF5L25vLW5vbmludGVyYWN0aXZlLWVsZW1lbnQtaW50ZXJhY3Rpb25zOiAwXG4qL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgQ29uc3QgZnJvbSAnLi4vY29uc3QnO1xuaW1wb3J0IF8gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgQm9vdHN0cmFwQ29udGV4dCB9IGZyb20gJy4uL2NvbnRleHRzL2Jvb3RzdHJhcCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlbGVjdGlvbkNlbGwgZXh0ZW5kcyBDb21wb25lbnQge1xuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIG1vZGU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICByb3dLZXk6IFByb3BUeXBlcy5hbnksXG4gICAgc2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIG9uUm93U2VsZWN0OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgcm93SW5kZXg6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgdGFiSW5kZXg6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgY2xpY2tUb1NlbGVjdDogUHJvcFR5cGVzLmJvb2wsXG4gICAgc2VsZWN0aW9uUmVuZGVyZXI6IFByb3BUeXBlcy5mdW5jLFxuICAgIHNlbGVjdENvbHVtblN0eWxlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuZnVuY10pXG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuaGFuZGxlQ2xpY2sgPSB0aGlzLmhhbmRsZUNsaWNrLmJpbmQodGhpcyk7XG4gIH1cblxuICBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzKSB7XG4gICAgY29uc3Qgc2hvdWxkVXBkYXRlID1cbiAgICAgIHRoaXMucHJvcHMucm93SW5kZXggIT09IG5leHRQcm9wcy5yb3dJbmRleCB8fFxuICAgICAgdGhpcy5wcm9wcy5zZWxlY3RlZCAhPT0gbmV4dFByb3BzLnNlbGVjdGVkIHx8XG4gICAgICB0aGlzLnByb3BzLmRpc2FibGVkICE9PSBuZXh0UHJvcHMuZGlzYWJsZWQgfHxcbiAgICAgIHRoaXMucHJvcHMucm93S2V5ICE9PSBuZXh0UHJvcHMucm93S2V5IHx8XG4gICAgICB0aGlzLnByb3BzLnRhYkluZGV4ICE9PSBuZXh0UHJvcHMudGFiSW5kZXggfHxcbiAgICAgIHRoaXMucHJvcHMuc2VsZWN0Q29sdW1uU3R5bGUgIT09IG5leHRQcm9wcy5zZWxlY3RDb2x1bW5TdHlsZTtcblxuICAgIHJldHVybiBzaG91bGRVcGRhdGU7XG4gIH1cblxuICBoYW5kbGVDbGljayhlKSB7XG4gICAgY29uc3Qge1xuICAgICAgbW9kZTogaW5wdXRUeXBlLFxuICAgICAgcm93S2V5LFxuICAgICAgc2VsZWN0ZWQsXG4gICAgICBvblJvd1NlbGVjdCxcbiAgICAgIGRpc2FibGVkLFxuICAgICAgcm93SW5kZXhcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmIChkaXNhYmxlZCkgcmV0dXJuO1xuXG4gICAgY29uc3QgY2hlY2tlZCA9IGlucHV0VHlwZSA9PT0gQ29uc3QuUk9XX1NFTEVDVF9TSU5HTEVcbiAgICAgID8gdHJ1ZVxuICAgICAgOiAhc2VsZWN0ZWQ7XG5cbiAgICBvblJvd1NlbGVjdChyb3dLZXksIGNoZWNrZWQsIHJvd0luZGV4LCBlKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICByb3dLZXksXG4gICAgICBtb2RlOiBpbnB1dFR5cGUsXG4gICAgICBzZWxlY3RlZCxcbiAgICAgIGRpc2FibGVkLFxuICAgICAgdGFiSW5kZXgsXG4gICAgICByb3dJbmRleCxcbiAgICAgIHNlbGVjdGlvblJlbmRlcmVyLFxuICAgICAgc2VsZWN0Q29sdW1uU3R5bGVcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IGF0dHJzID0ge307XG4gICAgaWYgKHRhYkluZGV4ICE9PSAtMSkgYXR0cnMudGFiSW5kZXggPSB0YWJJbmRleDtcblxuICAgIGF0dHJzLnN0eWxlID0gXy5pc0Z1bmN0aW9uKHNlbGVjdENvbHVtblN0eWxlKSA/XG4gICAgICBzZWxlY3RDb2x1bW5TdHlsZSh7XG4gICAgICAgIGNoZWNrZWQ6IHNlbGVjdGVkLFxuICAgICAgICBkaXNhYmxlZCxcbiAgICAgICAgcm93SW5kZXgsXG4gICAgICAgIHJvd0tleVxuICAgICAgfSkgOlxuICAgICAgc2VsZWN0Q29sdW1uU3R5bGU7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPEJvb3RzdHJhcENvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgIHtcbiAgICAgICAgICAoeyBib290c3RyYXA0IH0pID0+IChcbiAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJzZWxlY3Rpb24tY2VsbFwiIG9uQ2xpY2s9eyB0aGlzLmhhbmRsZUNsaWNrIH0geyAuLi5hdHRycyB9PlxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uUmVuZGVyZXIgPyBzZWxlY3Rpb25SZW5kZXJlcih7XG4gICAgICAgICAgICAgICAgICBtb2RlOiBpbnB1dFR5cGUsXG4gICAgICAgICAgICAgICAgICBjaGVja2VkOiBzZWxlY3RlZCxcbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkLFxuICAgICAgICAgICAgICAgICAgcm93SW5kZXgsXG4gICAgICAgICAgICAgICAgICByb3dLZXlcbiAgICAgICAgICAgICAgICB9KSA6IChcbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICB0eXBlPXsgaW5wdXRUeXBlIH1cbiAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17IHNlbGVjdGVkIH1cbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyBkaXNhYmxlZCB9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17IGJvb3RzdHJhcDQgPyAnc2VsZWN0aW9uLWlucHV0LTQnIDogJycgfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17ICgpID0+IHt9IH1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgPC9Cb290c3RyYXBDb250ZXh0LkNvbnN1bWVyPlxuICAgICk7XG4gIH1cbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL3Jvdy1zZWxlY3Rpb24vc2VsZWN0aW9uLWNlbGwuanMiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuY29uc3QgUm93U2VjdGlvbiA9ICh7IGNvbnRlbnQsIGNvbFNwYW4gfSkgPT4gKFxuICA8dHI+XG4gICAgPHRkXG4gICAgICBkYXRhLXRvZ2dsZT1cImNvbGxhcHNlXCJcbiAgICAgIGNvbFNwYW49eyBjb2xTcGFuIH1cbiAgICAgIGNsYXNzTmFtZT1cInJlYWN0LWJzLXRhYmxlLW5vLWRhdGFcIlxuICAgID5cbiAgICAgIHsgY29udGVudCB9XG4gICAgPC90ZD5cbiAgPC90cj5cbik7XG5cblJvd1NlY3Rpb24ucHJvcFR5cGVzID0ge1xuICBjb250ZW50OiBQcm9wVHlwZXMuYW55LFxuICBjb2xTcGFuOiBQcm9wVHlwZXMubnVtYmVyXG59O1xuXG5Sb3dTZWN0aW9uLmRlZmF1bHRQcm9wcyA9IHtcbiAgY29udGVudDogbnVsbCxcbiAgY29sU3BhbjogMVxufTtcblxuZXhwb3J0IGRlZmF1bHQgUm93U2VjdGlvbjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL3Jvdy9yb3ctc2VjdGlvbi5qcyIsIi8qIGVzbGludCByZWFjdC9wcm9wLXR5cGVzOiAwICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IF8gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IFNlbGVjdGlvbkNvbnRleHQgZnJvbSAnLi4vY29udGV4dHMvc2VsZWN0aW9uLWNvbnRleHQnO1xuXG5leHBvcnQgZGVmYXVsdCAoQ29tcG9uZW50KSA9PiB7XG4gIGNvbnN0IHJlbmRlcldpdGhTZWxlY3Rpb24gPSAocHJvcHMsIHNlbGVjdFJvdykgPT4ge1xuICAgIGNvbnN0IGtleSA9IHByb3BzLnZhbHVlO1xuICAgIGNvbnN0IHNlbGVjdGVkID0gXy5jb250YWlucyhzZWxlY3RSb3cuc2VsZWN0ZWQsIGtleSk7XG4gICAgY29uc3Qgc2VsZWN0YWJsZSA9ICFzZWxlY3RSb3cubm9uU2VsZWN0YWJsZSB8fCAhXy5jb250YWlucyhzZWxlY3RSb3cubm9uU2VsZWN0YWJsZSwga2V5KTtcbiAgICBjb25zdCBub3RTZWxlY3RhYmxlID0gXy5jb250YWlucyhzZWxlY3RSb3cubm9uU2VsZWN0YWJsZSwga2V5KTtcblxuICAgIGxldCB7XG4gICAgICBzdHlsZSxcbiAgICAgIGNsYXNzTmFtZVxuICAgIH0gPSBwcm9wcztcblxuICAgIGlmIChzZWxlY3RlZCkge1xuICAgICAgY29uc3Qgc2VsZWN0ZWRTdHlsZSA9IF8uaXNGdW5jdGlvbihzZWxlY3RSb3cuc3R5bGUpXG4gICAgICAgID8gc2VsZWN0Um93LnN0eWxlKHByb3BzLnJvdywgcHJvcHMucm93SW5kZXgpXG4gICAgICAgIDogc2VsZWN0Um93LnN0eWxlO1xuXG4gICAgICBjb25zdCBzZWxlY3RlZENsYXNzZXMgPSBfLmlzRnVuY3Rpb24oc2VsZWN0Um93LmNsYXNzZXMpXG4gICAgICAgID8gc2VsZWN0Um93LmNsYXNzZXMocHJvcHMucm93LCBwcm9wcy5yb3dJbmRleClcbiAgICAgICAgOiBzZWxlY3RSb3cuY2xhc3NlcztcblxuICAgICAgc3R5bGUgPSB7XG4gICAgICAgIC4uLnN0eWxlLFxuICAgICAgICAuLi5zZWxlY3RlZFN0eWxlXG4gICAgICB9O1xuICAgICAgY2xhc3NOYW1lID0gY3MoY2xhc3NOYW1lLCBzZWxlY3RlZENsYXNzZXMpIHx8IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKHNlbGVjdFJvdy5iZ0NvbG9yKSB7XG4gICAgICAgIHN0eWxlID0gc3R5bGUgfHwge307XG4gICAgICAgIHN0eWxlLmJhY2tncm91bmRDb2xvciA9IF8uaXNGdW5jdGlvbihzZWxlY3RSb3cuYmdDb2xvcilcbiAgICAgICAgICA/IHNlbGVjdFJvdy5iZ0NvbG9yKHByb3BzLnJvdywgcHJvcHMucm93SW5kZXgpXG4gICAgICAgICAgOiBzZWxlY3RSb3cuYmdDb2xvcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobm90U2VsZWN0YWJsZSkge1xuICAgICAgY29uc3Qgbm90U2VsZWN0YWJsZVN0eWxlID0gXy5pc0Z1bmN0aW9uKHNlbGVjdFJvdy5ub25TZWxlY3RhYmxlU3R5bGUpXG4gICAgICAgID8gc2VsZWN0Um93Lm5vblNlbGVjdGFibGVTdHlsZShwcm9wcy5yb3csIHByb3BzLnJvd0luZGV4KVxuICAgICAgICA6IHNlbGVjdFJvdy5ub25TZWxlY3RhYmxlU3R5bGU7XG5cbiAgICAgIGNvbnN0IG5vdFNlbGVjdGFibGVDbGFzc2VzID0gXy5pc0Z1bmN0aW9uKHNlbGVjdFJvdy5ub25TZWxlY3RhYmxlQ2xhc3NlcylcbiAgICAgICAgPyBzZWxlY3RSb3cubm9uU2VsZWN0YWJsZUNsYXNzZXMocHJvcHMucm93LCBwcm9wcy5yb3dJbmRleClcbiAgICAgICAgOiBzZWxlY3RSb3cubm9uU2VsZWN0YWJsZUNsYXNzZXM7XG5cbiAgICAgIHN0eWxlID0ge1xuICAgICAgICAuLi5zdHlsZSxcbiAgICAgICAgLi4ubm90U2VsZWN0YWJsZVN0eWxlXG4gICAgICB9O1xuICAgICAgY2xhc3NOYW1lID0gY3MoY2xhc3NOYW1lLCBub3RTZWxlY3RhYmxlQ2xhc3NlcykgfHwgdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8Q29tcG9uZW50XG4gICAgICAgIHsgLi4ucHJvcHMgfVxuICAgICAgICBzdHlsZT17IHN0eWxlIH1cbiAgICAgICAgY2xhc3NOYW1lPXsgY2xhc3NOYW1lIH1cbiAgICAgICAgc2VsZWN0Um93PXsgc2VsZWN0Um93IH1cbiAgICAgICAgc2VsZWN0ZWQ9eyBzZWxlY3RlZCB9XG4gICAgICAgIHNlbGVjdGFibGU9eyBzZWxlY3RhYmxlIH1cbiAgICAgIC8+XG4gICAgKTtcbiAgfTtcblxuICBmdW5jdGlvbiB3aXRoQ29uc3VtZXIocHJvcHMpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFNlbGVjdGlvbkNvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgIHsgc2VsZWN0Um93ID0+IHJlbmRlcldpdGhTZWxlY3Rpb24ocHJvcHMsIHNlbGVjdFJvdykgfVxuICAgICAgPC9TZWxlY3Rpb25Db250ZXh0LkNvbnN1bWVyPlxuICAgICk7XG4gIH1cblxuICB3aXRoQ29uc3VtZXIuZGlzcGxheU5hbWUgPSAnV2l0aFNlbGVjdGlvblJvd0NvbnN1bWVyJztcbiAgcmV0dXJuIHdpdGhDb25zdW1lcjtcbn07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9yb3ctc2VsZWN0aW9uL3Jvdy1jb25zdW1lci5qcyIsIi8qIGVzbGludCByZWFjdC9wcm9wLXR5cGVzOiAwICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IEV4cGFuZFJvdyBmcm9tICcuL2V4cGFuZC1yb3cnO1xuaW1wb3J0IF8gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IEV4cGFuc2lvbkNvbnRleHQgZnJvbSAnLi4vY29udGV4dHMvcm93LWV4cGFuZC1jb250ZXh0JztcblxuZXhwb3J0IGRlZmF1bHQgKENvbXBvbmVudCkgPT4ge1xuICBjb25zdCByZW5kZXJXaXRoRXhwYW5zaW9uID0gKHByb3BzLCBleHBhbmRSb3cpID0+IHtcbiAgICBsZXQgcGFyZW50Q2xhc3NOYW1lID0gJyc7XG4gICAgbGV0IGNsYXNzTmFtZSA9ICcnO1xuICAgIGNvbnN0IGtleSA9IHByb3BzLnZhbHVlO1xuXG4gICAgY29uc3QgZXhwYW5kZWQgPSBfLmNvbnRhaW5zKGV4cGFuZFJvdy5leHBhbmRlZCwga2V5KTtcbiAgICBjb25zdCBpc0Nsb3NpbmcgPSBfLmNvbnRhaW5zKGV4cGFuZFJvdy5pc0Nsb3NpbmcsIGtleSk7XG4gICAgY29uc3QgZXhwYW5kYWJsZSA9ICFleHBhbmRSb3cubm9uRXhwYW5kYWJsZSB8fCAhXy5jb250YWlucyhleHBhbmRSb3cubm9uRXhwYW5kYWJsZSwga2V5KTtcbiAgICBpZiAoZXhwYW5kZWQpIHtcbiAgICAgIHBhcmVudENsYXNzTmFtZSA9IF8uaXNGdW5jdGlvbihleHBhbmRSb3cucGFyZW50Q2xhc3NOYW1lKSA/XG4gICAgICAgIGV4cGFuZFJvdy5wYXJlbnRDbGFzc05hbWUoZXhwYW5kZWQsIHByb3BzLnJvdywgcHJvcHMucm93SW5kZXgpIDpcbiAgICAgICAgKGV4cGFuZFJvdy5wYXJlbnRDbGFzc05hbWUgfHwgJycpO1xuXG4gICAgICBjbGFzc05hbWUgPSBfLmlzRnVuY3Rpb24oZXhwYW5kUm93LmNsYXNzTmFtZSkgP1xuICAgICAgICBleHBhbmRSb3cuY2xhc3NOYW1lKGV4cGFuZGVkLCBwcm9wcy5yb3csIHByb3BzLnJvd0luZGV4KSA6XG4gICAgICAgIChleHBhbmRSb3cuY2xhc3NOYW1lIHx8ICcnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gW1xuICAgICAgPENvbXBvbmVudFxuICAgICAgICB7IC4uLnByb3BzIH1cbiAgICAgICAga2V5PXsga2V5IH1cbiAgICAgICAgZXhwYW5kZWQ9eyBleHBhbmRlZCB9XG4gICAgICAgIGV4cGFuZGFibGU9eyBleHBhbmRhYmxlIH1cbiAgICAgICAgZXhwYW5kUm93PXsgeyAuLi5leHBhbmRSb3cgfSB9XG4gICAgICAgIGNsYXNzTmFtZT17IGNzKHByb3BzLmNsYXNzTmFtZSwgcGFyZW50Q2xhc3NOYW1lKSB9XG4gICAgICAvPixcbiAgICAgIGV4cGFuZGVkIHx8IGlzQ2xvc2luZyA/IDxFeHBhbmRSb3dcbiAgICAgICAga2V5PXsgYCR7a2V5fS1leHBhbmRpbmdgIH1cbiAgICAgICAgY29sU3Bhbj17IHByb3BzLnZpc2libGVDb2x1bW5TaXplIH1cbiAgICAgICAgZXhwYW5kZWQ9eyBleHBhbmRlZCB9XG4gICAgICAgIG9uQ2xvc2VkPXsgKCkgPT4gZXhwYW5kUm93Lm9uQ2xvc2VkKGtleSkgfVxuICAgICAgICBjbGFzc05hbWU9eyBjbGFzc05hbWUgfVxuICAgICAgPlxuICAgICAgICB7IGV4cGFuZFJvdy5yZW5kZXJlcihwcm9wcy5yb3csIHByb3BzLnJvd0luZGV4KSB9XG4gICAgICA8L0V4cGFuZFJvdz4gOiBudWxsXG4gICAgXTtcbiAgfTtcbiAgcmV0dXJuIHByb3BzID0+IChcbiAgICA8RXhwYW5zaW9uQ29udGV4dC5Db25zdW1lcj5cbiAgICAgIHsgZXhwYW5kUm93ID0+IHJlbmRlcldpdGhFeHBhbnNpb24ocHJvcHMsIGV4cGFuZFJvdykgfVxuICAgIDwvRXhwYW5zaW9uQ29udGV4dC5Db25zdW1lcj5cbiAgKTtcbn07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9yb3ctZXhwYW5kL3Jvdy1jb25zdW1lci5qcyIsImltcG9ydCBjcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgQ1NTVHJhbnNpdGlvbiB9IGZyb20gJ3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAnO1xuXG5jb25zdCBFeHBhbmRSb3cgPSAoeyBjaGlsZHJlbiwgZXhwYW5kZWQsIG9uQ2xvc2VkLCBjbGFzc05hbWUsIC4uLnJlc3QgfSkgPT4gKFxuICA8dHI+XG4gICAgPHRkIGNsYXNzTmFtZT17IGNzKCdyZXNldC1leHBhbnNpb24tc3R5bGUnLCBjbGFzc05hbWUpIH0geyAuLi5yZXN0IH0+XG4gICAgICA8Q1NTVHJhbnNpdGlvblxuICAgICAgICBhcHBlYXJcbiAgICAgICAgaW49eyBleHBhbmRlZCB9XG4gICAgICAgIHRpbWVvdXQ9eyA0MDAgfVxuICAgICAgICBjbGFzc05hbWVzPVwicm93LWV4cGFuZC1zbGlkZVwiXG4gICAgICAgIG9uRXhpdGVkPXsgb25DbG9zZWQgfVxuICAgICAgPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicm93LWV4cGFuc2lvbi1zdHlsZVwiPlxuICAgICAgICAgICAgeyBjaGlsZHJlbiB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9DU1NUcmFuc2l0aW9uPlxuICAgIDwvdGQ+XG4gIDwvdHI+XG4pO1xuXG5FeHBhbmRSb3cucHJvcFR5cGVzID0ge1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIGV4cGFuZGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgb25DbG9zZWQ6IFByb3BUeXBlcy5mdW5jLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmdcbn07XG5cbkV4cGFuZFJvdy5kZWZhdWx0UHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBudWxsLFxuICBleHBhbmRlZDogZmFsc2UsXG4gIG9uQ2xvc2VkOiBudWxsLFxuICBjbGFzc05hbWU6ICcnXG59O1xuXG5leHBvcnQgZGVmYXVsdCBFeHBhbmRSb3c7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9yb3ctZXhwYW5kL2V4cGFuZC1yb3cuanMiLCJleHBvcnQgeyBkZWZhdWx0IGFzIENTU1RyYW5zaXRpb24gfSBmcm9tICcuL0NTU1RyYW5zaXRpb24nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBSZXBsYWNlVHJhbnNpdGlvbiB9IGZyb20gJy4vUmVwbGFjZVRyYW5zaXRpb24nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUcmFuc2l0aW9uR3JvdXAgfSBmcm9tICcuL1RyYW5zaXRpb25Hcm91cCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFRyYW5zaXRpb24gfSBmcm9tICcuL1RyYW5zaXRpb24nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjb25maWcgfSBmcm9tICcuL2NvbmZpZyc7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9pbmRleC5qc1xuLy8gbW9kdWxlIGlkID0gNThcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlXCI7XG5pbXBvcnQgKiBhcyBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgYWRkT25lQ2xhc3MgZnJvbSAnZG9tLWhlbHBlcnMvY2xhc3MvYWRkQ2xhc3MnO1xuaW1wb3J0IHJlbW92ZU9uZUNsYXNzIGZyb20gJ2RvbS1oZWxwZXJzL2NsYXNzL3JlbW92ZUNsYXNzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgVHJhbnNpdGlvbiBmcm9tICcuL1RyYW5zaXRpb24nO1xuaW1wb3J0IHsgY2xhc3NOYW1lc1NoYXBlIH0gZnJvbSAnLi91dGlscy9Qcm9wVHlwZXMnO1xuXG52YXIgX2FkZENsYXNzID0gZnVuY3Rpb24gYWRkQ2xhc3Mobm9kZSwgY2xhc3Nlcykge1xuICByZXR1cm4gbm9kZSAmJiBjbGFzc2VzICYmIGNsYXNzZXMuc3BsaXQoJyAnKS5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7XG4gICAgcmV0dXJuIGFkZE9uZUNsYXNzKG5vZGUsIGMpO1xuICB9KTtcbn07XG5cbnZhciByZW1vdmVDbGFzcyA9IGZ1bmN0aW9uIHJlbW92ZUNsYXNzKG5vZGUsIGNsYXNzZXMpIHtcbiAgcmV0dXJuIG5vZGUgJiYgY2xhc3NlcyAmJiBjbGFzc2VzLnNwbGl0KCcgJykuZm9yRWFjaChmdW5jdGlvbiAoYykge1xuICAgIHJldHVybiByZW1vdmVPbmVDbGFzcyhub2RlLCBjKTtcbiAgfSk7XG59O1xuLyoqXG4gKiBBIHRyYW5zaXRpb24gY29tcG9uZW50IGluc3BpcmVkIGJ5IHRoZSBleGNlbGxlbnRcbiAqIFtuZy1hbmltYXRlXShodHRwOi8vd3d3Lm5nYW5pbWF0ZS5vcmcvKSBsaWJyYXJ5LCB5b3Ugc2hvdWxkIHVzZSBpdCBpZiB5b3UncmVcbiAqIHVzaW5nIENTUyB0cmFuc2l0aW9ucyBvciBhbmltYXRpb25zLiBJdCdzIGJ1aWx0IHVwb24gdGhlXG4gKiBbYFRyYW5zaXRpb25gXShodHRwczovL3JlYWN0Y29tbXVuaXR5Lm9yZy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL3RyYW5zaXRpb24pXG4gKiBjb21wb25lbnQsIHNvIGl0IGluaGVyaXRzIGFsbCBvZiBpdHMgcHJvcHMuXG4gKlxuICogYENTU1RyYW5zaXRpb25gIGFwcGxpZXMgYSBwYWlyIG9mIGNsYXNzIG5hbWVzIGR1cmluZyB0aGUgYGFwcGVhcmAsIGBlbnRlcmAsXG4gKiBhbmQgYGV4aXRgIHN0YXRlcyBvZiB0aGUgdHJhbnNpdGlvbi4gVGhlIGZpcnN0IGNsYXNzIGlzIGFwcGxpZWQgYW5kIHRoZW4gYVxuICogc2Vjb25kIGAqLWFjdGl2ZWAgY2xhc3MgaW4gb3JkZXIgdG8gYWN0aXZhdGUgdGhlIENTUyB0cmFuc2l0aW9uLiBBZnRlciB0aGVcbiAqIHRyYW5zaXRpb24sIG1hdGNoaW5nIGAqLWRvbmVgIGNsYXNzIG5hbWVzIGFyZSBhcHBsaWVkIHRvIHBlcnNpc3QgdGhlXG4gKiB0cmFuc2l0aW9uIHN0YXRlLlxuICpcbiAqIGBgYGpzeFxuICogZnVuY3Rpb24gQXBwKCkge1xuICogICBjb25zdCBbaW5Qcm9wLCBzZXRJblByb3BdID0gdXNlU3RhdGUoZmFsc2UpO1xuICogICByZXR1cm4gKFxuICogICAgIDxkaXY+XG4gKiAgICAgICA8Q1NTVHJhbnNpdGlvbiBpbj17aW5Qcm9wfSB0aW1lb3V0PXsyMDB9IGNsYXNzTmFtZXM9XCJteS1ub2RlXCI+XG4gKiAgICAgICAgIDxkaXY+XG4gKiAgICAgICAgICAge1wiSSdsbCByZWNlaXZlIG15LW5vZGUtKiBjbGFzc2VzXCJ9XG4gKiAgICAgICAgIDwvZGl2PlxuICogICAgICAgPC9DU1NUcmFuc2l0aW9uPlxuICogICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17KCkgPT4gc2V0SW5Qcm9wKHRydWUpfT5cbiAqICAgICAgICAgQ2xpY2sgdG8gRW50ZXJcbiAqICAgICAgIDwvYnV0dG9uPlxuICogICAgIDwvZGl2PlxuICogICApO1xuICogfVxuICogYGBgXG4gKlxuICogV2hlbiB0aGUgYGluYCBwcm9wIGlzIHNldCB0byBgdHJ1ZWAsIHRoZSBjaGlsZCBjb21wb25lbnQgd2lsbCBmaXJzdCByZWNlaXZlXG4gKiB0aGUgY2xhc3MgYGV4YW1wbGUtZW50ZXJgLCB0aGVuIHRoZSBgZXhhbXBsZS1lbnRlci1hY3RpdmVgIHdpbGwgYmUgYWRkZWQgaW5cbiAqIHRoZSBuZXh0IHRpY2suIGBDU1NUcmFuc2l0aW9uYCBbZm9yY2VzIGFcbiAqIHJlZmxvd10oaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0anMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9ibG9iLzUwMDczMDNlNzI5YTc0YmU2NmEyMWMzZTIyMDVlNDkxNjgyMTUyNGIvc3JjL0NTU1RyYW5zaXRpb24uanMjTDIwOC1MMjE1KVxuICogYmV0d2VlbiBiZWZvcmUgYWRkaW5nIHRoZSBgZXhhbXBsZS1lbnRlci1hY3RpdmVgLiBUaGlzIGlzIGFuIGltcG9ydGFudCB0cmlja1xuICogYmVjYXVzZSBpdCBhbGxvd3MgdXMgdG8gdHJhbnNpdGlvbiBiZXR3ZWVuIGBleGFtcGxlLWVudGVyYCBhbmRcbiAqIGBleGFtcGxlLWVudGVyLWFjdGl2ZWAgZXZlbiB0aG91Z2ggdGhleSB3ZXJlIGFkZGVkIGltbWVkaWF0ZWx5IG9uZSBhZnRlclxuICogYW5vdGhlci4gTW9zdCBub3RhYmx5LCB0aGlzIGlzIHdoYXQgbWFrZXMgaXQgcG9zc2libGUgZm9yIHVzIHRvIGFuaW1hdGVcbiAqIF9hcHBlYXJhbmNlXy5cbiAqXG4gKiBgYGBjc3NcbiAqIC5teS1ub2RlLWVudGVyIHtcbiAqICAgb3BhY2l0eTogMDtcbiAqIH1cbiAqIC5teS1ub2RlLWVudGVyLWFjdGl2ZSB7XG4gKiAgIG9wYWNpdHk6IDE7XG4gKiAgIHRyYW5zaXRpb246IG9wYWNpdHkgMjAwbXM7XG4gKiB9XG4gKiAubXktbm9kZS1leGl0IHtcbiAqICAgb3BhY2l0eTogMTtcbiAqIH1cbiAqIC5teS1ub2RlLWV4aXQtYWN0aXZlIHtcbiAqICAgb3BhY2l0eTogMDtcbiAqICAgdHJhbnNpdGlvbjogb3BhY2l0eSAyMDBtcztcbiAqIH1cbiAqIGBgYFxuICpcbiAqIGAqLWFjdGl2ZWAgY2xhc3NlcyByZXByZXNlbnQgd2hpY2ggc3R5bGVzIHlvdSB3YW50IHRvIGFuaW1hdGUgKip0byoqLlxuICovXG5cblxudmFyIENTU1RyYW5zaXRpb24gPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzTG9vc2UoQ1NTVHJhbnNpdGlvbiwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gQ1NTVHJhbnNpdGlvbigpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfUmVhY3QkQ29tcG9uZW50LmNhbGwuYXBwbHkoX1JlYWN0JENvbXBvbmVudCwgW3RoaXNdLmNvbmNhdChhcmdzKSkgfHwgdGhpcztcbiAgICBfdGhpcy5hcHBsaWVkQ2xhc3NlcyA9IHtcbiAgICAgIGFwcGVhcjoge30sXG4gICAgICBlbnRlcjoge30sXG4gICAgICBleGl0OiB7fVxuICAgIH07XG5cbiAgICBfdGhpcy5vbkVudGVyID0gZnVuY3Rpb24gKG5vZGUsIGFwcGVhcmluZykge1xuICAgICAgX3RoaXMucmVtb3ZlQ2xhc3Nlcyhub2RlLCAnZXhpdCcpO1xuXG4gICAgICBfdGhpcy5hZGRDbGFzcyhub2RlLCBhcHBlYXJpbmcgPyAnYXBwZWFyJyA6ICdlbnRlcicsICdiYXNlJyk7XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkVudGVyKSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uRW50ZXIobm9kZSwgYXBwZWFyaW5nKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3RoaXMub25FbnRlcmluZyA9IGZ1bmN0aW9uIChub2RlLCBhcHBlYXJpbmcpIHtcbiAgICAgIHZhciB0eXBlID0gYXBwZWFyaW5nID8gJ2FwcGVhcicgOiAnZW50ZXInO1xuXG4gICAgICBfdGhpcy5hZGRDbGFzcyhub2RlLCB0eXBlLCAnYWN0aXZlJyk7XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkVudGVyaW5nKSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uRW50ZXJpbmcobm9kZSwgYXBwZWFyaW5nKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3RoaXMub25FbnRlcmVkID0gZnVuY3Rpb24gKG5vZGUsIGFwcGVhcmluZykge1xuICAgICAgdmFyIHR5cGUgPSBhcHBlYXJpbmcgPyAnYXBwZWFyJyA6ICdlbnRlcic7XG5cbiAgICAgIF90aGlzLnJlbW92ZUNsYXNzZXMobm9kZSwgdHlwZSk7XG5cbiAgICAgIF90aGlzLmFkZENsYXNzKG5vZGUsIHR5cGUsICdkb25lJyk7XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkVudGVyZWQpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25FbnRlcmVkKG5vZGUsIGFwcGVhcmluZyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF90aGlzLm9uRXhpdCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICBfdGhpcy5yZW1vdmVDbGFzc2VzKG5vZGUsICdhcHBlYXInKTtcblxuICAgICAgX3RoaXMucmVtb3ZlQ2xhc3Nlcyhub2RlLCAnZW50ZXInKTtcblxuICAgICAgX3RoaXMuYWRkQ2xhc3Mobm9kZSwgJ2V4aXQnLCAnYmFzZScpO1xuXG4gICAgICBpZiAoX3RoaXMucHJvcHMub25FeGl0KSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uRXhpdChub2RlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3RoaXMub25FeGl0aW5nID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIF90aGlzLmFkZENsYXNzKG5vZGUsICdleGl0JywgJ2FjdGl2ZScpO1xuXG4gICAgICBpZiAoX3RoaXMucHJvcHMub25FeGl0aW5nKSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uRXhpdGluZyhub2RlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3RoaXMub25FeGl0ZWQgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgX3RoaXMucmVtb3ZlQ2xhc3Nlcyhub2RlLCAnZXhpdCcpO1xuXG4gICAgICBfdGhpcy5hZGRDbGFzcyhub2RlLCAnZXhpdCcsICdkb25lJyk7XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkV4aXRlZCkge1xuICAgICAgICBfdGhpcy5wcm9wcy5vbkV4aXRlZChub2RlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3RoaXMuZ2V0Q2xhc3NOYW1lcyA9IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICB2YXIgY2xhc3NOYW1lcyA9IF90aGlzLnByb3BzLmNsYXNzTmFtZXM7XG4gICAgICB2YXIgaXNTdHJpbmdDbGFzc05hbWVzID0gdHlwZW9mIGNsYXNzTmFtZXMgPT09ICdzdHJpbmcnO1xuICAgICAgdmFyIHByZWZpeCA9IGlzU3RyaW5nQ2xhc3NOYW1lcyAmJiBjbGFzc05hbWVzID8gY2xhc3NOYW1lcyArIFwiLVwiIDogJyc7XG4gICAgICB2YXIgYmFzZUNsYXNzTmFtZSA9IGlzU3RyaW5nQ2xhc3NOYW1lcyA/IFwiXCIgKyBwcmVmaXggKyB0eXBlIDogY2xhc3NOYW1lc1t0eXBlXTtcbiAgICAgIHZhciBhY3RpdmVDbGFzc05hbWUgPSBpc1N0cmluZ0NsYXNzTmFtZXMgPyBiYXNlQ2xhc3NOYW1lICsgXCItYWN0aXZlXCIgOiBjbGFzc05hbWVzW3R5cGUgKyBcIkFjdGl2ZVwiXTtcbiAgICAgIHZhciBkb25lQ2xhc3NOYW1lID0gaXNTdHJpbmdDbGFzc05hbWVzID8gYmFzZUNsYXNzTmFtZSArIFwiLWRvbmVcIiA6IGNsYXNzTmFtZXNbdHlwZSArIFwiRG9uZVwiXTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJhc2VDbGFzc05hbWU6IGJhc2VDbGFzc05hbWUsXG4gICAgICAgIGFjdGl2ZUNsYXNzTmFtZTogYWN0aXZlQ2xhc3NOYW1lLFxuICAgICAgICBkb25lQ2xhc3NOYW1lOiBkb25lQ2xhc3NOYW1lXG4gICAgICB9O1xuICAgIH07XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gQ1NTVHJhbnNpdGlvbi5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmFkZENsYXNzID0gZnVuY3Rpb24gYWRkQ2xhc3Mobm9kZSwgdHlwZSwgcGhhc2UpIHtcbiAgICB2YXIgY2xhc3NOYW1lID0gdGhpcy5nZXRDbGFzc05hbWVzKHR5cGUpW3BoYXNlICsgXCJDbGFzc05hbWVcIl07XG5cbiAgICBpZiAodHlwZSA9PT0gJ2FwcGVhcicgJiYgcGhhc2UgPT09ICdkb25lJykge1xuICAgICAgY2xhc3NOYW1lICs9IFwiIFwiICsgdGhpcy5nZXRDbGFzc05hbWVzKCdlbnRlcicpLmRvbmVDbGFzc05hbWU7XG4gICAgfSAvLyBUaGlzIGlzIGZvciB0byBmb3JjZSBhIHJlcGFpbnQsXG4gICAgLy8gd2hpY2ggaXMgbmVjZXNzYXJ5IGluIG9yZGVyIHRvIHRyYW5zaXRpb24gc3R5bGVzIHdoZW4gYWRkaW5nIGEgY2xhc3MgbmFtZS5cblxuXG4gICAgaWYgKHBoYXNlID09PSAnYWN0aXZlJykge1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLWV4cHJlc3Npb25zICovXG4gICAgICBub2RlICYmIG5vZGUuc2Nyb2xsVG9wO1xuICAgIH1cblxuICAgIHRoaXMuYXBwbGllZENsYXNzZXNbdHlwZV1bcGhhc2VdID0gY2xhc3NOYW1lO1xuXG4gICAgX2FkZENsYXNzKG5vZGUsIGNsYXNzTmFtZSk7XG4gIH07XG5cbiAgX3Byb3RvLnJlbW92ZUNsYXNzZXMgPSBmdW5jdGlvbiByZW1vdmVDbGFzc2VzKG5vZGUsIHR5cGUpIHtcbiAgICB2YXIgX3RoaXMkYXBwbGllZENsYXNzZXMkID0gdGhpcy5hcHBsaWVkQ2xhc3Nlc1t0eXBlXSxcbiAgICAgICAgYmFzZUNsYXNzTmFtZSA9IF90aGlzJGFwcGxpZWRDbGFzc2VzJC5iYXNlLFxuICAgICAgICBhY3RpdmVDbGFzc05hbWUgPSBfdGhpcyRhcHBsaWVkQ2xhc3NlcyQuYWN0aXZlLFxuICAgICAgICBkb25lQ2xhc3NOYW1lID0gX3RoaXMkYXBwbGllZENsYXNzZXMkLmRvbmU7XG4gICAgdGhpcy5hcHBsaWVkQ2xhc3Nlc1t0eXBlXSA9IHt9O1xuXG4gICAgaWYgKGJhc2VDbGFzc05hbWUpIHtcbiAgICAgIHJlbW92ZUNsYXNzKG5vZGUsIGJhc2VDbGFzc05hbWUpO1xuICAgIH1cblxuICAgIGlmIChhY3RpdmVDbGFzc05hbWUpIHtcbiAgICAgIHJlbW92ZUNsYXNzKG5vZGUsIGFjdGl2ZUNsYXNzTmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKGRvbmVDbGFzc05hbWUpIHtcbiAgICAgIHJlbW92ZUNsYXNzKG5vZGUsIGRvbmVDbGFzc05hbWUpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIF8gPSBfdGhpcyRwcm9wcy5jbGFzc05hbWVzLFxuICAgICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF90aGlzJHByb3BzLCBbXCJjbGFzc05hbWVzXCJdKTtcblxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zaXRpb24sIF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgICAgb25FbnRlcjogdGhpcy5vbkVudGVyLFxuICAgICAgb25FbnRlcmVkOiB0aGlzLm9uRW50ZXJlZCxcbiAgICAgIG9uRW50ZXJpbmc6IHRoaXMub25FbnRlcmluZyxcbiAgICAgIG9uRXhpdDogdGhpcy5vbkV4aXQsXG4gICAgICBvbkV4aXRpbmc6IHRoaXMub25FeGl0aW5nLFxuICAgICAgb25FeGl0ZWQ6IHRoaXMub25FeGl0ZWRcbiAgICB9KSk7XG4gIH07XG5cbiAgcmV0dXJuIENTU1RyYW5zaXRpb247XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cbkNTU1RyYW5zaXRpb24uZGVmYXVsdFByb3BzID0ge1xuICBjbGFzc05hbWVzOiAnJ1xufTtcbkNTU1RyYW5zaXRpb24ucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gX2V4dGVuZHMoe30sIFRyYW5zaXRpb24ucHJvcFR5cGVzLCB7XG4gIC8qKlxuICAgKiBUaGUgYW5pbWF0aW9uIGNsYXNzTmFtZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50IGFzIGl0IGVudGVycywgZXhpdHMgb3JcbiAgICogaGFzIGZpbmlzaGVkIHRoZSB0cmFuc2l0aW9uLiBBIHNpbmdsZSBuYW1lIGNhbiBiZSBwcm92aWRlZCBhbmQgaXQgd2lsbCBiZVxuICAgKiBzdWZmaXhlZCBmb3IgZWFjaCBzdGFnZTogZS5nLlxuICAgKlxuICAgKiBgY2xhc3NOYW1lcz1cImZhZGVcImAgYXBwbGllcyBgZmFkZS1lbnRlcmAsIGBmYWRlLWVudGVyLWFjdGl2ZWAsXG4gICAqIGBmYWRlLWVudGVyLWRvbmVgLCBgZmFkZS1leGl0YCwgYGZhZGUtZXhpdC1hY3RpdmVgLCBgZmFkZS1leGl0LWRvbmVgLFxuICAgKiBgZmFkZS1hcHBlYXJgLCBgZmFkZS1hcHBlYXItYWN0aXZlYCwgYW5kIGBmYWRlLWFwcGVhci1kb25lYC5cbiAgICpcbiAgICogKipOb3RlKio6IGBmYWRlLWFwcGVhci1kb25lYCBhbmQgYGZhZGUtZW50ZXItZG9uZWAgd2lsbCBfYm90aF8gYmUgYXBwbGllZC5cbiAgICogVGhpcyBhbGxvd3MgeW91IHRvIGRlZmluZSBkaWZmZXJlbnQgYmVoYXZpb3IgZm9yIHdoZW4gYXBwZWFyaW5nIGlzIGRvbmUgYW5kXG4gICAqIHdoZW4gcmVndWxhciBlbnRlcmluZyBpcyBkb25lLCB1c2luZyBzZWxlY3RvcnMgbGlrZVxuICAgKiBgLmZhZGUtZW50ZXItZG9uZTpub3QoLmZhZGUtYXBwZWFyLWRvbmUpYC4gRm9yIGV4YW1wbGUsIHlvdSBjb3VsZCBhcHBseSBhblxuICAgKiBlcGljIGVudHJhbmNlIGFuaW1hdGlvbiB3aGVuIGVsZW1lbnQgZmlyc3QgYXBwZWFycyBpbiB0aGUgRE9NIHVzaW5nXG4gICAqIFtBbmltYXRlLmNzc10oaHR0cHM6Ly9kYW5lZGVuLmdpdGh1Yi5pby9hbmltYXRlLmNzcy8pLiBPdGhlcndpc2UgeW91IGNhblxuICAgKiBzaW1wbHkgdXNlIGBmYWRlLWVudGVyLWRvbmVgIGZvciBkZWZpbmluZyBib3RoIGNhc2VzLlxuICAgKlxuICAgKiBFYWNoIGluZGl2aWR1YWwgY2xhc3NOYW1lcyBjYW4gYWxzbyBiZSBzcGVjaWZpZWQgaW5kZXBlbmRlbnRseSBsaWtlOlxuICAgKlxuICAgKiBgYGBqc1xuICAgKiBjbGFzc05hbWVzPXt7XG4gICAqICBhcHBlYXI6ICdteS1hcHBlYXInLFxuICAgKiAgYXBwZWFyQWN0aXZlOiAnbXktYWN0aXZlLWFwcGVhcicsXG4gICAqICBhcHBlYXJEb25lOiAnbXktZG9uZS1hcHBlYXInLFxuICAgKiAgZW50ZXI6ICdteS1lbnRlcicsXG4gICAqICBlbnRlckFjdGl2ZTogJ215LWFjdGl2ZS1lbnRlcicsXG4gICAqICBlbnRlckRvbmU6ICdteS1kb25lLWVudGVyJyxcbiAgICogIGV4aXQ6ICdteS1leGl0JyxcbiAgICogIGV4aXRBY3RpdmU6ICdteS1hY3RpdmUtZXhpdCcsXG4gICAqICBleGl0RG9uZTogJ215LWRvbmUtZXhpdCcsXG4gICAqIH19XG4gICAqIGBgYFxuICAgKlxuICAgKiBJZiB5b3Ugd2FudCB0byBzZXQgdGhlc2UgY2xhc3NlcyB1c2luZyBDU1MgTW9kdWxlczpcbiAgICpcbiAgICogYGBganNcbiAgICogaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5jc3MnO1xuICAgKiBgYGBcbiAgICpcbiAgICogeW91IG1pZ2h0IHdhbnQgdG8gdXNlIGNhbWVsQ2FzZSBpbiB5b3VyIENTUyBmaWxlLCB0aGF0IHdheSBjb3VsZCBzaW1wbHlcbiAgICogc3ByZWFkIHRoZW0gaW5zdGVhZCBvZiBsaXN0aW5nIHRoZW0gb25lIGJ5IG9uZTpcbiAgICpcbiAgICogYGBganNcbiAgICogY2xhc3NOYW1lcz17eyAuLi5zdHlsZXMgfX1cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmcgfCB7XG4gICAqICBhcHBlYXI/OiBzdHJpbmcsXG4gICAqICBhcHBlYXJBY3RpdmU/OiBzdHJpbmcsXG4gICAqICBhcHBlYXJEb25lPzogc3RyaW5nLFxuICAgKiAgZW50ZXI/OiBzdHJpbmcsXG4gICAqICBlbnRlckFjdGl2ZT86IHN0cmluZyxcbiAgICogIGVudGVyRG9uZT86IHN0cmluZyxcbiAgICogIGV4aXQ/OiBzdHJpbmcsXG4gICAqICBleGl0QWN0aXZlPzogc3RyaW5nLFxuICAgKiAgZXhpdERvbmU/OiBzdHJpbmcsXG4gICAqIH19XG4gICAqL1xuICBjbGFzc05hbWVzOiBjbGFzc05hbWVzU2hhcGUsXG5cbiAgLyoqXG4gICAqIEEgYDxUcmFuc2l0aW9uPmAgY2FsbGJhY2sgZmlyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlICdlbnRlcicgb3IgJ2FwcGVhcicgY2xhc3MgaXNcbiAgICogYXBwbGllZC5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQsIGlzQXBwZWFyaW5nOiBib29sKVxuICAgKi9cbiAgb25FbnRlcjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIEEgYDxUcmFuc2l0aW9uPmAgY2FsbGJhY2sgZmlyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlICdlbnRlci1hY3RpdmUnIG9yXG4gICAqICdhcHBlYXItYWN0aXZlJyBjbGFzcyBpcyBhcHBsaWVkLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCwgaXNBcHBlYXJpbmc6IGJvb2wpXG4gICAqL1xuICBvbkVudGVyaW5nOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQSBgPFRyYW5zaXRpb24+YCBjYWxsYmFjayBmaXJlZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgJ2VudGVyJyBvclxuICAgKiAnYXBwZWFyJyBjbGFzc2VzIGFyZSAqKnJlbW92ZWQqKiBhbmQgdGhlIGBkb25lYCBjbGFzcyBpcyBhZGRlZCB0byB0aGUgRE9NIG5vZGUuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50LCBpc0FwcGVhcmluZzogYm9vbClcbiAgICovXG4gIG9uRW50ZXJlZDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIEEgYDxUcmFuc2l0aW9uPmAgY2FsbGJhY2sgZmlyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlICdleGl0JyBjbGFzcyBpc1xuICAgKiBhcHBsaWVkLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudClcbiAgICovXG4gIG9uRXhpdDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIEEgYDxUcmFuc2l0aW9uPmAgY2FsbGJhY2sgZmlyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlICdleGl0LWFjdGl2ZScgaXMgYXBwbGllZC5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQpXG4gICAqL1xuICBvbkV4aXRpbmc6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBBIGA8VHJhbnNpdGlvbj5gIGNhbGxiYWNrIGZpcmVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSAnZXhpdCcgY2xhc3Nlc1xuICAgKiBhcmUgKipyZW1vdmVkKiogYW5kIHRoZSBgZXhpdC1kb25lYCBjbGFzcyBpcyBhZGRlZCB0byB0aGUgRE9NIG5vZGUuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50KVxuICAgKi9cbiAgb25FeGl0ZWQ6IFByb3BUeXBlcy5mdW5jXG59KSA6IHt9O1xuZXhwb3J0IGRlZmF1bHQgQ1NTVHJhbnNpdGlvbjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL0NTU1RyYW5zaXRpb24uanNcbi8vIG1vZHVsZSBpZCA9IDU5XG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5kZWZhdWx0ID0gYWRkQ2xhc3M7XG5cbnZhciBfaGFzQ2xhc3MgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hhc0NsYXNzXCIpKTtcblxuZnVuY3Rpb24gYWRkQ2xhc3MoZWxlbWVudCwgY2xhc3NOYW1lKSB7XG4gIGlmIChlbGVtZW50LmNsYXNzTGlzdCkgZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSk7ZWxzZSBpZiAoISgwLCBfaGFzQ2xhc3MuZGVmYXVsdCkoZWxlbWVudCwgY2xhc3NOYW1lKSkgaWYgKHR5cGVvZiBlbGVtZW50LmNsYXNzTmFtZSA9PT0gJ3N0cmluZycpIGVsZW1lbnQuY2xhc3NOYW1lID0gZWxlbWVudC5jbGFzc05hbWUgKyAnICcgKyBjbGFzc05hbWU7ZWxzZSBlbGVtZW50LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAoZWxlbWVudC5jbGFzc05hbWUgJiYgZWxlbWVudC5jbGFzc05hbWUuYmFzZVZhbCB8fCAnJykgKyAnICcgKyBjbGFzc05hbWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbXCJkZWZhdWx0XCJdO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9ub2RlX21vZHVsZXMvZG9tLWhlbHBlcnMvY2xhc3MvYWRkQ2xhc3MuanNcbi8vIG1vZHVsZSBpZCA9IDYwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIiwiZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHtcbiAgICBcImRlZmF1bHRcIjogb2JqXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdDtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0LmpzXG4vLyBtb2R1bGUgaWQgPSA2MVxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5kZWZhdWx0ID0gaGFzQ2xhc3M7XG5cbmZ1bmN0aW9uIGhhc0NsYXNzKGVsZW1lbnQsIGNsYXNzTmFtZSkge1xuICBpZiAoZWxlbWVudC5jbGFzc0xpc3QpIHJldHVybiAhIWNsYXNzTmFtZSAmJiBlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpO2Vsc2UgcmV0dXJuIChcIiBcIiArIChlbGVtZW50LmNsYXNzTmFtZS5iYXNlVmFsIHx8IGVsZW1lbnQuY2xhc3NOYW1lKSArIFwiIFwiKS5pbmRleE9mKFwiIFwiICsgY2xhc3NOYW1lICsgXCIgXCIpICE9PSAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzW1wiZGVmYXVsdFwiXTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvbm9kZV9tb2R1bGVzL2RvbS1oZWxwZXJzL2NsYXNzL2hhc0NsYXNzLmpzXG4vLyBtb2R1bGUgaWQgPSA2MlxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSIsIid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gcmVwbGFjZUNsYXNzTmFtZShvcmlnQ2xhc3MsIGNsYXNzVG9SZW1vdmUpIHtcbiAgcmV0dXJuIG9yaWdDbGFzcy5yZXBsYWNlKG5ldyBSZWdFeHAoJyhefFxcXFxzKScgKyBjbGFzc1RvUmVtb3ZlICsgJyg/OlxcXFxzfCQpJywgJ2cnKSwgJyQxJykucmVwbGFjZSgvXFxzKy9nLCAnICcpLnJlcGxhY2UoL15cXHMqfFxccyokL2csICcnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiByZW1vdmVDbGFzcyhlbGVtZW50LCBjbGFzc05hbWUpIHtcbiAgaWYgKGVsZW1lbnQuY2xhc3NMaXN0KSBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lKTtlbHNlIGlmICh0eXBlb2YgZWxlbWVudC5jbGFzc05hbWUgPT09ICdzdHJpbmcnKSBlbGVtZW50LmNsYXNzTmFtZSA9IHJlcGxhY2VDbGFzc05hbWUoZWxlbWVudC5jbGFzc05hbWUsIGNsYXNzTmFtZSk7ZWxzZSBlbGVtZW50LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCByZXBsYWNlQ2xhc3NOYW1lKGVsZW1lbnQuY2xhc3NOYW1lICYmIGVsZW1lbnQuY2xhc3NOYW1lLmJhc2VWYWwgfHwgJycsIGNsYXNzTmFtZSkpO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvbm9kZV9tb2R1bGVzL2RvbS1oZWxwZXJzL2NsYXNzL3JlbW92ZUNsYXNzLmpzXG4vLyBtb2R1bGUgaWQgPSA2M1xuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSIsImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlXCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGZpbmRET01Ob2RlIH0gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCBUcmFuc2l0aW9uR3JvdXAgZnJvbSAnLi9UcmFuc2l0aW9uR3JvdXAnO1xuLyoqXG4gKiBUaGUgYDxSZXBsYWNlVHJhbnNpdGlvbj5gIGNvbXBvbmVudCBpcyBhIHNwZWNpYWxpemVkIGBUcmFuc2l0aW9uYCBjb21wb25lbnRcbiAqIHRoYXQgYW5pbWF0ZXMgYmV0d2VlbiB0d28gY2hpbGRyZW4uXG4gKlxuICogYGBganN4XG4gKiA8UmVwbGFjZVRyYW5zaXRpb24gaW4+XG4gKiAgIDxGYWRlPjxkaXY+SSBhcHBlYXIgZmlyc3Q8L2Rpdj48L0ZhZGU+XG4gKiAgIDxGYWRlPjxkaXY+SSByZXBsYWNlIHRoZSBhYm92ZTwvZGl2PjwvRmFkZT5cbiAqIDwvUmVwbGFjZVRyYW5zaXRpb24+XG4gKiBgYGBcbiAqL1xuXG52YXIgUmVwbGFjZVRyYW5zaXRpb24gPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzTG9vc2UoUmVwbGFjZVRyYW5zaXRpb24sIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFJlcGxhY2VUcmFuc2l0aW9uKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBfYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIF9hcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX1JlYWN0JENvbXBvbmVudC5jYWxsLmFwcGx5KF9SZWFjdCRDb21wb25lbnQsIFt0aGlzXS5jb25jYXQoX2FyZ3MpKSB8fCB0aGlzO1xuXG4gICAgX3RoaXMuaGFuZGxlRW50ZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgICAgYXJnc1tfa2V5Ml0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3RoaXMuaGFuZGxlTGlmZWN5Y2xlKCdvbkVudGVyJywgMCwgYXJncyk7XG4gICAgfTtcblxuICAgIF90aGlzLmhhbmRsZUVudGVyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjMgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4zKSwgX2tleTMgPSAwOyBfa2V5MyA8IF9sZW4zOyBfa2V5MysrKSB7XG4gICAgICAgIGFyZ3NbX2tleTNdID0gYXJndW1lbnRzW19rZXkzXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZUxpZmVjeWNsZSgnb25FbnRlcmluZycsIDAsIGFyZ3MpO1xuICAgIH07XG5cbiAgICBfdGhpcy5oYW5kbGVFbnRlcmVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjQgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW40KSwgX2tleTQgPSAwOyBfa2V5NCA8IF9sZW40OyBfa2V5NCsrKSB7XG4gICAgICAgIGFyZ3NbX2tleTRdID0gYXJndW1lbnRzW19rZXk0XTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZUxpZmVjeWNsZSgnb25FbnRlcmVkJywgMCwgYXJncyk7XG4gICAgfTtcblxuICAgIF90aGlzLmhhbmRsZUV4aXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuNSA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjUpLCBfa2V5NSA9IDA7IF9rZXk1IDwgX2xlbjU7IF9rZXk1KyspIHtcbiAgICAgICAgYXJnc1tfa2V5NV0gPSBhcmd1bWVudHNbX2tleTVdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3RoaXMuaGFuZGxlTGlmZWN5Y2xlKCdvbkV4aXQnLCAxLCBhcmdzKTtcbiAgICB9O1xuXG4gICAgX3RoaXMuaGFuZGxlRXhpdGluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW42ID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuNiksIF9rZXk2ID0gMDsgX2tleTYgPCBfbGVuNjsgX2tleTYrKykge1xuICAgICAgICBhcmdzW19rZXk2XSA9IGFyZ3VtZW50c1tfa2V5Nl07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfdGhpcy5oYW5kbGVMaWZlY3ljbGUoJ29uRXhpdGluZycsIDEsIGFyZ3MpO1xuICAgIH07XG5cbiAgICBfdGhpcy5oYW5kbGVFeGl0ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuNyA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjcpLCBfa2V5NyA9IDA7IF9rZXk3IDwgX2xlbjc7IF9rZXk3KyspIHtcbiAgICAgICAgYXJnc1tfa2V5N10gPSBhcmd1bWVudHNbX2tleTddO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3RoaXMuaGFuZGxlTGlmZWN5Y2xlKCdvbkV4aXRlZCcsIDEsIGFyZ3MpO1xuICAgIH07XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gUmVwbGFjZVRyYW5zaXRpb24ucHJvdG90eXBlO1xuXG4gIF9wcm90by5oYW5kbGVMaWZlY3ljbGUgPSBmdW5jdGlvbiBoYW5kbGVMaWZlY3ljbGUoaGFuZGxlciwgaWR4LCBvcmlnaW5hbEFyZ3MpIHtcbiAgICB2YXIgX2NoaWxkJHByb3BzO1xuXG4gICAgdmFyIGNoaWxkcmVuID0gdGhpcy5wcm9wcy5jaGlsZHJlbjtcbiAgICB2YXIgY2hpbGQgPSBSZWFjdC5DaGlsZHJlbi50b0FycmF5KGNoaWxkcmVuKVtpZHhdO1xuICAgIGlmIChjaGlsZC5wcm9wc1toYW5kbGVyXSkgKF9jaGlsZCRwcm9wcyA9IGNoaWxkLnByb3BzKVtoYW5kbGVyXS5hcHBseShfY2hpbGQkcHJvcHMsIG9yaWdpbmFsQXJncyk7XG4gICAgaWYgKHRoaXMucHJvcHNbaGFuZGxlcl0pIHRoaXMucHJvcHNbaGFuZGxlcl0oZmluZERPTU5vZGUodGhpcykpO1xuICB9O1xuXG4gIF9wcm90by5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wcy5jaGlsZHJlbixcbiAgICAgICAgaW5Qcm9wID0gX3RoaXMkcHJvcHMuaW4sXG4gICAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3RoaXMkcHJvcHMsIFtcImNoaWxkcmVuXCIsIFwiaW5cIl0pO1xuXG4gICAgdmFyIF9SZWFjdCRDaGlsZHJlbiR0b0FyciA9IFJlYWN0LkNoaWxkcmVuLnRvQXJyYXkoY2hpbGRyZW4pLFxuICAgICAgICBmaXJzdCA9IF9SZWFjdCRDaGlsZHJlbiR0b0FyclswXSxcbiAgICAgICAgc2Vjb25kID0gX1JlYWN0JENoaWxkcmVuJHRvQXJyWzFdO1xuXG4gICAgZGVsZXRlIHByb3BzLm9uRW50ZXI7XG4gICAgZGVsZXRlIHByb3BzLm9uRW50ZXJpbmc7XG4gICAgZGVsZXRlIHByb3BzLm9uRW50ZXJlZDtcbiAgICBkZWxldGUgcHJvcHMub25FeGl0O1xuICAgIGRlbGV0ZSBwcm9wcy5vbkV4aXRpbmc7XG4gICAgZGVsZXRlIHByb3BzLm9uRXhpdGVkO1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zaXRpb25Hcm91cCwgcHJvcHMsIGluUHJvcCA/IFJlYWN0LmNsb25lRWxlbWVudChmaXJzdCwge1xuICAgICAga2V5OiAnZmlyc3QnLFxuICAgICAgb25FbnRlcjogdGhpcy5oYW5kbGVFbnRlcixcbiAgICAgIG9uRW50ZXJpbmc6IHRoaXMuaGFuZGxlRW50ZXJpbmcsXG4gICAgICBvbkVudGVyZWQ6IHRoaXMuaGFuZGxlRW50ZXJlZFxuICAgIH0pIDogUmVhY3QuY2xvbmVFbGVtZW50KHNlY29uZCwge1xuICAgICAga2V5OiAnc2Vjb25kJyxcbiAgICAgIG9uRW50ZXI6IHRoaXMuaGFuZGxlRXhpdCxcbiAgICAgIG9uRW50ZXJpbmc6IHRoaXMuaGFuZGxlRXhpdGluZyxcbiAgICAgIG9uRW50ZXJlZDogdGhpcy5oYW5kbGVFeGl0ZWRcbiAgICB9KSk7XG4gIH07XG5cbiAgcmV0dXJuIFJlcGxhY2VUcmFuc2l0aW9uO1xufShSZWFjdC5Db21wb25lbnQpO1xuXG5SZXBsYWNlVHJhbnNpdGlvbi5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIGluOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBjaGlsZHJlbjogZnVuY3Rpb24gY2hpbGRyZW4ocHJvcHMsIHByb3BOYW1lKSB7XG4gICAgaWYgKFJlYWN0LkNoaWxkcmVuLmNvdW50KHByb3BzW3Byb3BOYW1lXSkgIT09IDIpIHJldHVybiBuZXcgRXJyb3IoXCJcXFwiXCIgKyBwcm9wTmFtZSArIFwiXFxcIiBtdXN0IGJlIGV4YWN0bHkgdHdvIHRyYW5zaXRpb24gY29tcG9uZW50cy5cIik7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn0gOiB7fTtcbmV4cG9ydCBkZWZhdWx0IFJlcGxhY2VUcmFuc2l0aW9uO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9lc20vUmVwbGFjZVRyYW5zaXRpb24uanNcbi8vIG1vZHVsZSBpZCA9IDY0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cblxuICByZXR1cm4gc2VsZjtcbn1cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qc1xuLy8gbW9kdWxlIGlkID0gNjVcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEiLCJpbXBvcnQgeyBDaGlsZHJlbiwgY2xvbmVFbGVtZW50LCBpc1ZhbGlkRWxlbWVudCB9IGZyb20gJ3JlYWN0Jztcbi8qKlxuICogR2l2ZW4gYHRoaXMucHJvcHMuY2hpbGRyZW5gLCByZXR1cm4gYW4gb2JqZWN0IG1hcHBpbmcga2V5IHRvIGNoaWxkLlxuICpcbiAqIEBwYXJhbSB7Kn0gY2hpbGRyZW4gYHRoaXMucHJvcHMuY2hpbGRyZW5gXG4gKiBAcmV0dXJuIHtvYmplY3R9IE1hcHBpbmcgb2Yga2V5IHRvIGNoaWxkXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENoaWxkTWFwcGluZyhjaGlsZHJlbiwgbWFwRm4pIHtcbiAgdmFyIG1hcHBlciA9IGZ1bmN0aW9uIG1hcHBlcihjaGlsZCkge1xuICAgIHJldHVybiBtYXBGbiAmJiBpc1ZhbGlkRWxlbWVudChjaGlsZCkgPyBtYXBGbihjaGlsZCkgOiBjaGlsZDtcbiAgfTtcblxuICB2YXIgcmVzdWx0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgaWYgKGNoaWxkcmVuKSBDaGlsZHJlbi5tYXAoY2hpbGRyZW4sIGZ1bmN0aW9uIChjKSB7XG4gICAgcmV0dXJuIGM7XG4gIH0pLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgLy8gcnVuIHRoZSBtYXAgZnVuY3Rpb24gaGVyZSBpbnN0ZWFkIHNvIHRoYXQgdGhlIGtleSBpcyB0aGUgY29tcHV0ZWQgb25lXG4gICAgcmVzdWx0W2NoaWxkLmtleV0gPSBtYXBwZXIoY2hpbGQpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogV2hlbiB5b3UncmUgYWRkaW5nIG9yIHJlbW92aW5nIGNoaWxkcmVuIHNvbWUgbWF5IGJlIGFkZGVkIG9yIHJlbW92ZWQgaW4gdGhlXG4gKiBzYW1lIHJlbmRlciBwYXNzLiBXZSB3YW50IHRvIHNob3cgKmJvdGgqIHNpbmNlIHdlIHdhbnQgdG8gc2ltdWx0YW5lb3VzbHlcbiAqIGFuaW1hdGUgZWxlbWVudHMgaW4gYW5kIG91dC4gVGhpcyBmdW5jdGlvbiB0YWtlcyBhIHByZXZpb3VzIHNldCBvZiBrZXlzXG4gKiBhbmQgYSBuZXcgc2V0IG9mIGtleXMgYW5kIG1lcmdlcyB0aGVtIHdpdGggaXRzIGJlc3QgZ3Vlc3Mgb2YgdGhlIGNvcnJlY3RcbiAqIG9yZGVyaW5nLiBJbiB0aGUgZnV0dXJlIHdlIG1heSBleHBvc2Ugc29tZSBvZiB0aGUgdXRpbGl0aWVzIGluXG4gKiBSZWFjdE11bHRpQ2hpbGQgdG8gbWFrZSB0aGlzIGVhc3ksIGJ1dCBmb3Igbm93IFJlYWN0IGl0c2VsZiBkb2VzIG5vdFxuICogZGlyZWN0bHkgaGF2ZSB0aGlzIGNvbmNlcHQgb2YgdGhlIHVuaW9uIG9mIHByZXZDaGlsZHJlbiBhbmQgbmV4dENoaWxkcmVuXG4gKiBzbyB3ZSBpbXBsZW1lbnQgaXQgaGVyZS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gcHJldiBwcmV2IGNoaWxkcmVuIGFzIHJldHVybmVkIGZyb21cbiAqIGBSZWFjdFRyYW5zaXRpb25DaGlsZE1hcHBpbmcuZ2V0Q2hpbGRNYXBwaW5nKClgLlxuICogQHBhcmFtIHtvYmplY3R9IG5leHQgbmV4dCBjaGlsZHJlbiBhcyByZXR1cm5lZCBmcm9tXG4gKiBgUmVhY3RUcmFuc2l0aW9uQ2hpbGRNYXBwaW5nLmdldENoaWxkTWFwcGluZygpYC5cbiAqIEByZXR1cm4ge29iamVjdH0gYSBrZXkgc2V0IHRoYXQgY29udGFpbnMgYWxsIGtleXMgaW4gYHByZXZgIGFuZCBhbGwga2V5c1xuICogaW4gYG5leHRgIGluIGEgcmVhc29uYWJsZSBvcmRlci5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VDaGlsZE1hcHBpbmdzKHByZXYsIG5leHQpIHtcbiAgcHJldiA9IHByZXYgfHwge307XG4gIG5leHQgPSBuZXh0IHx8IHt9O1xuXG4gIGZ1bmN0aW9uIGdldFZhbHVlRm9yS2V5KGtleSkge1xuICAgIHJldHVybiBrZXkgaW4gbmV4dCA/IG5leHRba2V5XSA6IHByZXZba2V5XTtcbiAgfSAvLyBGb3IgZWFjaCBrZXkgb2YgYG5leHRgLCB0aGUgbGlzdCBvZiBrZXlzIHRvIGluc2VydCBiZWZvcmUgdGhhdCBrZXkgaW5cbiAgLy8gdGhlIGNvbWJpbmVkIGxpc3RcblxuXG4gIHZhciBuZXh0S2V5c1BlbmRpbmcgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB2YXIgcGVuZGluZ0tleXMgPSBbXTtcblxuICBmb3IgKHZhciBwcmV2S2V5IGluIHByZXYpIHtcbiAgICBpZiAocHJldktleSBpbiBuZXh0KSB7XG4gICAgICBpZiAocGVuZGluZ0tleXMubGVuZ3RoKSB7XG4gICAgICAgIG5leHRLZXlzUGVuZGluZ1twcmV2S2V5XSA9IHBlbmRpbmdLZXlzO1xuICAgICAgICBwZW5kaW5nS2V5cyA9IFtdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZW5kaW5nS2V5cy5wdXNoKHByZXZLZXkpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBpO1xuICB2YXIgY2hpbGRNYXBwaW5nID0ge307XG5cbiAgZm9yICh2YXIgbmV4dEtleSBpbiBuZXh0KSB7XG4gICAgaWYgKG5leHRLZXlzUGVuZGluZ1tuZXh0S2V5XSkge1xuICAgICAgZm9yIChpID0gMDsgaSA8IG5leHRLZXlzUGVuZGluZ1tuZXh0S2V5XS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcGVuZGluZ05leHRLZXkgPSBuZXh0S2V5c1BlbmRpbmdbbmV4dEtleV1baV07XG4gICAgICAgIGNoaWxkTWFwcGluZ1tuZXh0S2V5c1BlbmRpbmdbbmV4dEtleV1baV1dID0gZ2V0VmFsdWVGb3JLZXkocGVuZGluZ05leHRLZXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNoaWxkTWFwcGluZ1tuZXh0S2V5XSA9IGdldFZhbHVlRm9yS2V5KG5leHRLZXkpO1xuICB9IC8vIEZpbmFsbHksIGFkZCB0aGUga2V5cyB3aGljaCBkaWRuJ3QgYXBwZWFyIGJlZm9yZSBhbnkga2V5IGluIGBuZXh0YFxuXG5cbiAgZm9yIChpID0gMDsgaSA8IHBlbmRpbmdLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgY2hpbGRNYXBwaW5nW3BlbmRpbmdLZXlzW2ldXSA9IGdldFZhbHVlRm9yS2V5KHBlbmRpbmdLZXlzW2ldKTtcbiAgfVxuXG4gIHJldHVybiBjaGlsZE1hcHBpbmc7XG59XG5cbmZ1bmN0aW9uIGdldFByb3AoY2hpbGQsIHByb3AsIHByb3BzKSB7XG4gIHJldHVybiBwcm9wc1twcm9wXSAhPSBudWxsID8gcHJvcHNbcHJvcF0gOiBjaGlsZC5wcm9wc1twcm9wXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEluaXRpYWxDaGlsZE1hcHBpbmcocHJvcHMsIG9uRXhpdGVkKSB7XG4gIHJldHVybiBnZXRDaGlsZE1hcHBpbmcocHJvcHMuY2hpbGRyZW4sIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIHJldHVybiBjbG9uZUVsZW1lbnQoY2hpbGQsIHtcbiAgICAgIG9uRXhpdGVkOiBvbkV4aXRlZC5iaW5kKG51bGwsIGNoaWxkKSxcbiAgICAgIGluOiB0cnVlLFxuICAgICAgYXBwZWFyOiBnZXRQcm9wKGNoaWxkLCAnYXBwZWFyJywgcHJvcHMpLFxuICAgICAgZW50ZXI6IGdldFByb3AoY2hpbGQsICdlbnRlcicsIHByb3BzKSxcbiAgICAgIGV4aXQ6IGdldFByb3AoY2hpbGQsICdleGl0JywgcHJvcHMpXG4gICAgfSk7XG4gIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldE5leHRDaGlsZE1hcHBpbmcobmV4dFByb3BzLCBwcmV2Q2hpbGRNYXBwaW5nLCBvbkV4aXRlZCkge1xuICB2YXIgbmV4dENoaWxkTWFwcGluZyA9IGdldENoaWxkTWFwcGluZyhuZXh0UHJvcHMuY2hpbGRyZW4pO1xuICB2YXIgY2hpbGRyZW4gPSBtZXJnZUNoaWxkTWFwcGluZ3MocHJldkNoaWxkTWFwcGluZywgbmV4dENoaWxkTWFwcGluZyk7XG4gIE9iamVjdC5rZXlzKGNoaWxkcmVuKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgY2hpbGQgPSBjaGlsZHJlbltrZXldO1xuICAgIGlmICghaXNWYWxpZEVsZW1lbnQoY2hpbGQpKSByZXR1cm47XG4gICAgdmFyIGhhc1ByZXYgPSBrZXkgaW4gcHJldkNoaWxkTWFwcGluZztcbiAgICB2YXIgaGFzTmV4dCA9IGtleSBpbiBuZXh0Q2hpbGRNYXBwaW5nO1xuICAgIHZhciBwcmV2Q2hpbGQgPSBwcmV2Q2hpbGRNYXBwaW5nW2tleV07XG4gICAgdmFyIGlzTGVhdmluZyA9IGlzVmFsaWRFbGVtZW50KHByZXZDaGlsZCkgJiYgIXByZXZDaGlsZC5wcm9wcy5pbjsgLy8gaXRlbSBpcyBuZXcgKGVudGVyaW5nKVxuXG4gICAgaWYgKGhhc05leHQgJiYgKCFoYXNQcmV2IHx8IGlzTGVhdmluZykpIHtcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdlbnRlcmluZycsIGtleSlcbiAgICAgIGNoaWxkcmVuW2tleV0gPSBjbG9uZUVsZW1lbnQoY2hpbGQsIHtcbiAgICAgICAgb25FeGl0ZWQ6IG9uRXhpdGVkLmJpbmQobnVsbCwgY2hpbGQpLFxuICAgICAgICBpbjogdHJ1ZSxcbiAgICAgICAgZXhpdDogZ2V0UHJvcChjaGlsZCwgJ2V4aXQnLCBuZXh0UHJvcHMpLFxuICAgICAgICBlbnRlcjogZ2V0UHJvcChjaGlsZCwgJ2VudGVyJywgbmV4dFByb3BzKVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICghaGFzTmV4dCAmJiBoYXNQcmV2ICYmICFpc0xlYXZpbmcpIHtcbiAgICAgIC8vIGl0ZW0gaXMgb2xkIChleGl0aW5nKVxuICAgICAgLy8gY29uc29sZS5sb2coJ2xlYXZpbmcnLCBrZXkpXG4gICAgICBjaGlsZHJlbltrZXldID0gY2xvbmVFbGVtZW50KGNoaWxkLCB7XG4gICAgICAgIGluOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChoYXNOZXh0ICYmIGhhc1ByZXYgJiYgaXNWYWxpZEVsZW1lbnQocHJldkNoaWxkKSkge1xuICAgICAgLy8gaXRlbSBoYXNuJ3QgY2hhbmdlZCB0cmFuc2l0aW9uIHN0YXRlc1xuICAgICAgLy8gY29weSBvdmVyIHRoZSBsYXN0IHRyYW5zaXRpb24gcHJvcHM7XG4gICAgICAvLyBjb25zb2xlLmxvZygndW5jaGFuZ2VkJywga2V5KVxuICAgICAgY2hpbGRyZW5ba2V5XSA9IGNsb25lRWxlbWVudChjaGlsZCwge1xuICAgICAgICBvbkV4aXRlZDogb25FeGl0ZWQuYmluZChudWxsLCBjaGlsZCksXG4gICAgICAgIGluOiBwcmV2Q2hpbGQucHJvcHMuaW4sXG4gICAgICAgIGV4aXQ6IGdldFByb3AoY2hpbGQsICdleGl0JywgbmV4dFByb3BzKSxcbiAgICAgICAgZW50ZXI6IGdldFByb3AoY2hpbGQsICdlbnRlcicsIG5leHRQcm9wcylcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBjaGlsZHJlbjtcbn1cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL3V0aWxzL0NoaWxkTWFwcGluZy5qc1xuLy8gbW9kdWxlIGlkID0gNjZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEiLCIvKiBlc2xpbnQgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzOiAwICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuaW1wb3J0IFJvd1RlbXBsYXRlIGZyb20gJy4vcm93L3Jvdy10ZW1wbGF0ZSc7XG5pbXBvcnQgRm9vdGVyQ2VsbCBmcm9tICcuL2Zvb3Rlci1jZWxsJztcbmltcG9ydCBfIGZyb20gJy4vdXRpbHMnO1xuXG5jb25zdCBGb290ZXIgPSAocHJvcHMpID0+IHtcbiAgY29uc3QgeyBkYXRhLCBjbGFzc05hbWUsIGNvbHVtbnMsIHNlbGVjdFJvdywgZXhwYW5kUm93IH0gPSBwcm9wcztcblxuICBmdW5jdGlvbiByZW5kZXJDb250ZW50KCkge1xuICAgIHJldHVybiBjb2x1bW5zLm1hcCgoY29sdW1uLCBpKSA9PiB7XG4gICAgICBpZiAoY29sdW1uLmZvb3RlciA9PT0gdW5kZWZpbmVkIHx8IGNvbHVtbi5mb290ZXIgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjb2x1bW5EYXRhID0gXy5wbHVjayhkYXRhLCBjb2x1bW4uZGF0YUZpZWxkKTtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPEZvb3RlckNlbGxcbiAgICAgICAgICBpbmRleD17IGkgfVxuICAgICAgICAgIGtleT17IGNvbHVtbi5kYXRhRmllbGQgfVxuICAgICAgICAgIGNvbHVtbj17IGNvbHVtbiB9XG4gICAgICAgICAgY29sdW1uRGF0YT17IGNvbHVtbkRhdGEgfVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPHRmb290PlxuICAgICAgPFJvd1RlbXBsYXRlXG4gICAgICAgIHJlbmRlckNvbnRlbnQ9eyByZW5kZXJDb250ZW50IH1cbiAgICAgICAgc2VsZWN0Um93PXsgc2VsZWN0Um93IH1cbiAgICAgICAgZXhwYW5kUm93PXsgZXhwYW5kUm93IH1cbiAgICAgICAgY2xhc3NOYW1lPXsgY2xhc3NOYW1lIH1cbiAgICAgICAgY2VsbEVsPVwidGhcIlxuICAgICAgLz5cbiAgICA8L3Rmb290PlxuICApO1xufTtcblxuRm9vdGVyLnByb3BUeXBlcyA9IHtcbiAgZGF0YTogUHJvcFR5cGVzLmFycmF5LFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNvbHVtbnM6IFByb3BUeXBlcy5hcnJheSxcbiAgc2VsZWN0Um93OiBQcm9wVHlwZXMub2JqZWN0LFxuICBleHBhbmRSb3c6IFByb3BUeXBlcy5vYmplY3Rcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEZvb3RlcjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL2Zvb3Rlci5qcyIsIi8qIGVzbGludCByZWFjdC9yZXF1aXJlLWRlZmF1bHQtcHJvcHM6IDAgKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY3MgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG5pbXBvcnQgXyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBldmVudERlbGVnYXRlciBmcm9tICcuL2NlbGwtZXZlbnQtZGVsZWdhdGVyJztcblxuY2xhc3MgRm9vdGVyQ2VsbCBleHRlbmRzIGV2ZW50RGVsZWdhdGVyKFJlYWN0LkNvbXBvbmVudCkge1xuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBpbmRleCwgY29sdW1uLCBjb2x1bW5EYXRhIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3Qge1xuICAgICAgZm9vdGVyLFxuICAgICAgZm9vdGVyVGl0bGUsXG4gICAgICBmb290ZXJBbGlnbixcbiAgICAgIGZvb3RlckZvcm1hdHRlcixcbiAgICAgIGZvb3RlckV2ZW50cyxcbiAgICAgIGZvb3RlckNsYXNzZXMsXG4gICAgICBmb290ZXJTdHlsZSxcbiAgICAgIGZvb3RlckF0dHJzXG4gICAgfSA9IGNvbHVtbjtcblxuICAgIGNvbnN0IGRlbGVnYXRlRXZlbnRzID0gdGhpcy5kZWxlZ2F0ZShmb290ZXJFdmVudHMpO1xuICAgIGNvbnN0IGNlbGxBdHRycyA9IHtcbiAgICAgIC4uLihfLmlzRnVuY3Rpb24oZm9vdGVyQXR0cnMpID8gZm9vdGVyQXR0cnMoY29sdW1uLCBpbmRleCkgOiBmb290ZXJBdHRycyksXG4gICAgICAuLi5kZWxlZ2F0ZUV2ZW50c1xuICAgIH07XG5cblxuICAgIGxldCB0ZXh0ID0gJyc7XG4gICAgaWYgKF8uaXNTdHJpbmcoZm9vdGVyKSkge1xuICAgICAgdGV4dCA9IGZvb3RlcjtcbiAgICB9IGVsc2UgaWYgKF8uaXNGdW5jdGlvbihmb290ZXIpKSB7XG4gICAgICB0ZXh0ID0gZm9vdGVyKGNvbHVtbkRhdGEsIGNvbHVtbiwgaW5kZXgpO1xuICAgIH1cblxuICAgIGxldCBjZWxsU3R5bGUgPSB7fTtcbiAgICBjb25zdCBjZWxsQ2xhc3NlcyA9IF8uaXNGdW5jdGlvbihmb290ZXJDbGFzc2VzKSA/IGZvb3RlckNsYXNzZXMoY29sdW1uLCBpbmRleCkgOiBmb290ZXJDbGFzc2VzO1xuXG4gICAgaWYgKGZvb3RlclN0eWxlKSB7XG4gICAgICBjZWxsU3R5bGUgPSBfLmlzRnVuY3Rpb24oZm9vdGVyU3R5bGUpID8gZm9vdGVyU3R5bGUoY29sdW1uLCBpbmRleCkgOiBmb290ZXJTdHlsZTtcbiAgICAgIGNlbGxTdHlsZSA9IGNlbGxTdHlsZSA/IHsgLi4uY2VsbFN0eWxlIH0gOiBjZWxsU3R5bGU7XG4gICAgfVxuXG4gICAgaWYgKGZvb3RlclRpdGxlKSB7XG4gICAgICBjZWxsQXR0cnMudGl0bGUgPSBfLmlzRnVuY3Rpb24oZm9vdGVyVGl0bGUpID8gZm9vdGVyVGl0bGUoY29sdW1uLCBpbmRleCkgOiB0ZXh0O1xuICAgIH1cblxuICAgIGlmIChmb290ZXJBbGlnbikge1xuICAgICAgY2VsbFN0eWxlLnRleHRBbGlnbiA9IF8uaXNGdW5jdGlvbihmb290ZXJBbGlnbikgPyBmb290ZXJBbGlnbihjb2x1bW4sIGluZGV4KSA6IGZvb3RlckFsaWduO1xuICAgIH1cblxuICAgIGlmIChjZWxsQ2xhc3NlcykgY2VsbEF0dHJzLmNsYXNzTmFtZSA9IGNzKGNlbGxBdHRycy5jbGFzc05hbWUsIGNlbGxDbGFzc2VzKTtcbiAgICBpZiAoIV8uaXNFbXB0eU9iamVjdChjZWxsU3R5bGUpKSBjZWxsQXR0cnMuc3R5bGUgPSBjZWxsU3R5bGU7XG5cbiAgICBjb25zdCBjaGlsZHJlbiA9IGZvb3RlckZvcm1hdHRlciA/IGZvb3RlckZvcm1hdHRlcihjb2x1bW4sIGluZGV4LCB7IHRleHQgfSkgOiB0ZXh0O1xuXG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoJ3RoJywgY2VsbEF0dHJzLCBjaGlsZHJlbik7XG4gIH1cbn1cblxuRm9vdGVyQ2VsbC5wcm9wVHlwZXMgPSB7XG4gIGNvbHVtbkRhdGE6IFByb3BUeXBlcy5hcnJheSxcbiAgaW5kZXg6IFByb3BUeXBlcy5udW1iZXIsXG4gIGNvbHVtbjogUHJvcFR5cGVzLm9iamVjdFxufTtcblxuZXhwb3J0IGRlZmF1bHQgRm9vdGVyQ2VsbDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL2Zvb3Rlci1jZWxsLmpzIiwiaW1wb3J0IF8gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IENvbHVtblJlc29sdmVyIGZyb20gJy4vY29sdW1uLXJlc29sdmVyJztcblxuZXhwb3J0IGRlZmF1bHQgRXh0ZW5kQmFzZSA9PlxuICBjbGFzcyBUYWJsZVJlc29sdmVyIGV4dGVuZHMgQ29sdW1uUmVzb2x2ZXIoRXh0ZW5kQmFzZSkge1xuICAgIHZhbGlkYXRlUHJvcHMoKSB7XG4gICAgICBjb25zdCB7IGtleUZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgICAgaWYgKCFrZXlGaWVsZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BsZWFzZSBzcGVjaWZ5IGEgZmllbGQgYXMga2V5IHZpYSBrZXlGaWVsZCcpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMudmlzaWJsZUNvbHVtblNpemUoZmFsc2UpIDw9IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyB2aXNpYmxlIGNvbHVtbnMgZGV0ZWN0ZWQnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpc0VtcHR5KCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcHMuZGF0YS5sZW5ndGggPT09IDA7XG4gICAgfVxuXG4gICAgdmlzaWJsZVJvd3MoKSB7XG4gICAgICBjb25zdCB7IGRhdGEsIGhpZGRlblJvd3MsIGtleUZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgICAgaWYgKCFoaWRkZW5Sb3dzIHx8IGhpZGRlblJvd3MubGVuZ3RoID09PSAwKSByZXR1cm4gZGF0YTtcbiAgICAgIHJldHVybiBkYXRhLmZpbHRlcigocm93KSA9PiB7XG4gICAgICAgIGNvbnN0IGtleSA9IF8uZ2V0KHJvdywga2V5RmllbGQpO1xuICAgICAgICByZXR1cm4gIV8uY29udGFpbnMoaGlkZGVuUm93cywga2V5KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL3Byb3BzLXJlc29sdmVyL2luZGV4LmpzIiwiZXhwb3J0IGRlZmF1bHQgRXh0ZW5kQmFzZSA9PlxuICBjbGFzcyBDb2x1bW5SZXNvbHZlciBleHRlbmRzIEV4dGVuZEJhc2Uge1xuICAgIHZpc2libGVDb2x1bW5TaXplKGluY2x1ZGVTZWxlY3RDb2x1bW4gPSB0cnVlKSB7XG4gICAgICBsZXQgY29sdW1uTGVuO1xuICAgICAgaWYgKHRoaXMucHJvcHMuY29sdW1uVG9nZ2xlICYmIHRoaXMucHJvcHMuY29sdW1uVG9nZ2xlLnRvZ2dsZXMpIHtcbiAgICAgICAgY29uc3QgY29sdW1ucyA9IHRoaXMucHJvcHMuY29sdW1uVG9nZ2xlLnRvZ2dsZXM7XG4gICAgICAgIGNvbHVtbkxlbiA9IE9iamVjdC5rZXlzKGNvbHVtbnMpLmZpbHRlcihuYW1lID0+IGNvbHVtbnNbbmFtZV0pLmxlbmd0aDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbHVtbkxlbiA9IHRoaXMucHJvcHMuY29sdW1ucy5maWx0ZXIoYyA9PiAhYy5oaWRkZW4pLmxlbmd0aDtcbiAgICAgIH1cbiAgICAgIGlmICghaW5jbHVkZVNlbGVjdENvbHVtbikgcmV0dXJuIGNvbHVtbkxlbjtcbiAgICAgIGlmICh0aGlzLnByb3BzLnNlbGVjdFJvdyAmJiAhdGhpcy5wcm9wcy5zZWxlY3RSb3cuaGlkZVNlbGVjdENvbHVtbikge1xuICAgICAgICBjb2x1bW5MZW4gKz0gMTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnByb3BzLmV4cGFuZFJvdyAmJiB0aGlzLnByb3BzLmV4cGFuZFJvdy5zaG93RXhwYW5kQ29sdW1uKSB7XG4gICAgICAgIGNvbHVtbkxlbiArPSAxO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbHVtbkxlbjtcbiAgICB9XG4gIH07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9wcm9wcy1yZXNvbHZlci9jb2x1bW4tcmVzb2x2ZXIuanMiLCIvKiBlc2xpbnQgY2FtZWxjYXNlOiAwICovXG4vKiBlc2xpbnQgbm8tcmV0dXJuLWFzc2lnbjogMCAqL1xuLyogZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOiAwICovXG4vKiBlc2xpbnQgY2xhc3MtbWV0aG9kcy11c2UtdGhpczogMCAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSAnZXZlbnRzJztcbmltcG9ydCBfIGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCBjcmVhdGVEYXRhQ29udGV4dCBmcm9tICcuL2RhdGEtY29udGV4dCc7XG5pbXBvcnQgY3JlYXRlQ29sdW1uTWd0Q29udGV4dCBmcm9tICcuL2NvbHVtbi1jb250ZXh0JztcbmltcG9ydCBjcmVhdGVTb3J0Q29udGV4dCBmcm9tICcuL3NvcnQtY29udGV4dCc7XG5pbXBvcnQgU2VsZWN0aW9uQ29udGV4dCBmcm9tICcuL3NlbGVjdGlvbi1jb250ZXh0JztcbmltcG9ydCBSb3dFeHBhbmRDb250ZXh0IGZyb20gJy4vcm93LWV4cGFuZC1jb250ZXh0JztcbmltcG9ydCByZW1vdGVSZXNvbHZlciBmcm9tICcuLi9wcm9wcy1yZXNvbHZlci9yZW1vdGUtcmVzb2x2ZXInO1xuaW1wb3J0IHsgQm9vdHN0cmFwQ29udGV4dCB9IGZyb20gJy4vYm9vdHN0cmFwJztcbmltcG9ydCBkYXRhT3BlcmF0b3IgZnJvbSAnLi4vc3RvcmUvb3BlcmF0b3JzJztcblxuY29uc3Qgd2l0aENvbnRleHQgPSBCYXNlID0+XG4gIGNsYXNzIEJvb3RzdHJhcFRhYmxlQ29udGFpbmVyIGV4dGVuZHMgcmVtb3RlUmVzb2x2ZXIoQ29tcG9uZW50KSB7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgIHRoaXMuRGF0YUNvbnRleHQgPSBjcmVhdGVEYXRhQ29udGV4dCgpO1xuXG4gICAgICBpZiAocHJvcHMucmVnaXN0ZXJFeHBvc2VkQVBJKSB7XG4gICAgICAgIGNvbnN0IGV4cG9zZWRBUElFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICBleHBvc2VkQVBJRW1pdHRlci5vbignZ2V0LnRhYmxlLmRhdGEnLCBwYXlsb2FkID0+IHBheWxvYWQucmVzdWx0ID0gdGhpcy50YWJsZS5nZXREYXRhKCkpO1xuICAgICAgICBleHBvc2VkQVBJRW1pdHRlci5vbignZ2V0LnNlbGVjdGVkLnJvd3MnLCBwYXlsb2FkID0+IHBheWxvYWQucmVzdWx0ID0gdGhpcy5zZWxlY3Rpb25Db250ZXh0LmdldFNlbGVjdGVkKCkpO1xuICAgICAgICBleHBvc2VkQVBJRW1pdHRlci5vbignZ2V0LmZpbHRlcmVkLnJvd3MnLCAocGF5bG9hZCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLnNlYXJjaENvbnRleHQpIHtcbiAgICAgICAgICAgIHBheWxvYWQucmVzdWx0ID0gdGhpcy5zZWFyY2hDb250ZXh0LmdldFNlYXJjaGVkKCk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmZpbHRlckNvbnRleHQpIHtcbiAgICAgICAgICAgIHBheWxvYWQucmVzdWx0ID0gdGhpcy5maWx0ZXJDb250ZXh0LmdldEZpbHRlcmVkKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBheWxvYWQucmVzdWx0ID0gdGhpcy50YWJsZS5nZXREYXRhKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcHJvcHMucmVnaXN0ZXJFeHBvc2VkQVBJKGV4cG9zZWRBUElFbWl0dGVyKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByb3BzLmNvbHVtbnMuZmlsdGVyKGNvbCA9PiBjb2wuc29ydCkubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLlNvcnRDb250ZXh0ID0gY3JlYXRlU29ydENvbnRleHQoXG4gICAgICAgICAgZGF0YU9wZXJhdG9yLCB0aGlzLmlzUmVtb3RlU29ydCwgdGhpcy5oYW5kbGVSZW1vdGVTb3J0Q2hhbmdlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBwcm9wcy5jb2x1bW5Ub2dnbGUgfHxcbiAgICAgICAgcHJvcHMuY29sdW1ucy5maWx0ZXIoY29sID0+IGNvbC5oaWRkZW4pLmxlbmd0aCA+IDBcbiAgICAgICkge1xuICAgICAgICB0aGlzLkNvbHVtbk1hbmFnZW1lbnRDb250ZXh0ID0gY3JlYXRlQ29sdW1uTWd0Q29udGV4dCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvcHMuc2VsZWN0Um93KSB7XG4gICAgICAgIHRoaXMuU2VsZWN0aW9uQ29udGV4dCA9IFNlbGVjdGlvbkNvbnRleHQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9wcy5leHBhbmRSb3cpIHtcbiAgICAgICAgdGhpcy5Sb3dFeHBhbmRDb250ZXh0ID0gUm93RXhwYW5kQ29udGV4dDtcbiAgICAgIH1cblxuICAgICAgaWYgKHByb3BzLmNlbGxFZGl0ICYmIHByb3BzLmNlbGxFZGl0LmNyZWF0ZUNvbnRleHQpIHtcbiAgICAgICAgdGhpcy5DZWxsRWRpdENvbnRleHQgPSBwcm9wcy5jZWxsRWRpdC5jcmVhdGVDb250ZXh0KFxuICAgICAgICAgIF8sIGRhdGFPcGVyYXRvciwgdGhpcy5pc1JlbW90ZUNlbGxFZGl0LCB0aGlzLmhhbmRsZVJlbW90ZUNlbGxDaGFuZ2UpO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvcHMuZmlsdGVyKSB7XG4gICAgICAgIHRoaXMuRmlsdGVyQ29udGV4dCA9IHByb3BzLmZpbHRlci5jcmVhdGVDb250ZXh0KFxuICAgICAgICAgIF8sIHRoaXMuaXNSZW1vdGVGaWx0ZXJpbmcsIHRoaXMuaGFuZGxlUmVtb3RlRmlsdGVyQ2hhbmdlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByb3BzLnBhZ2luYXRpb24pIHtcbiAgICAgICAgdGhpcy5QYWdpbmF0aW9uQ29udGV4dCA9IHByb3BzLnBhZ2luYXRpb24uY3JlYXRlQ29udGV4dCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvcHMuc2VhcmNoICYmIHByb3BzLnNlYXJjaC5zZWFyY2hDb250ZXh0KSB7XG4gICAgICAgIHRoaXMuU2VhcmNoQ29udGV4dCA9IHByb3BzLnNlYXJjaC5zZWFyY2hDb250ZXh0KFxuICAgICAgICAgIF8sIHRoaXMuaXNSZW1vdGVTZWFyY2gsIHRoaXMuaGFuZGxlUmVtb3RlU2VhcmNoQ2hhbmdlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByb3BzLnNldERlcGVuZGVuY3lNb2R1bGVzKSB7XG4gICAgICAgIHByb3BzLnNldERlcGVuZGVuY3lNb2R1bGVzKF8pO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvcHMuc2V0UGFnaW5hdGlvblJlbW90ZUVtaXR0ZXIpIHtcbiAgICAgICAgcHJvcHMuc2V0UGFnaW5hdGlvblJlbW90ZUVtaXR0ZXIodGhpcy5yZW1vdGVFbWl0dGVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpIHtcbiAgICAgIGlmIChuZXh0UHJvcHMuY29sdW1ucy5maWx0ZXIoY29sID0+IGNvbC5zb3J0KS5sZW5ndGggPD0gMCkge1xuICAgICAgICB0aGlzLlNvcnRDb250ZXh0ID0gbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuU29ydENvbnRleHQpIHtcbiAgICAgICAgdGhpcy5Tb3J0Q29udGV4dCA9IGNyZWF0ZVNvcnRDb250ZXh0KFxuICAgICAgICAgIGRhdGFPcGVyYXRvciwgdGhpcy5pc1JlbW90ZVNvcnQsIHRoaXMuaGFuZGxlUmVtb3RlU29ydENoYW5nZSk7XG4gICAgICB9XG4gICAgICBpZiAoIW5leHRQcm9wcy5wYWdpbmF0aW9uICYmIHRoaXMucHJvcHMucGFnaW5hdGlvbikge1xuICAgICAgICB0aGlzLlBhZ2luYXRpb25Db250ZXh0ID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmIChuZXh0UHJvcHMucGFnaW5hdGlvbiAmJiAhdGhpcy5wcm9wcy5wYWdpbmF0aW9uKSB7XG4gICAgICAgIHRoaXMuUGFnaW5hdGlvbkNvbnRleHQgPSBuZXh0UHJvcHMucGFnaW5hdGlvbi5jcmVhdGVDb250ZXh0KFxuICAgICAgICAgIHRoaXMuaXNSZW1vdGVQYWdpbmF0aW9uLCB0aGlzLmhhbmRsZVJlbW90ZVBhZ2VDaGFuZ2UpO1xuICAgICAgfVxuICAgICAgaWYgKCFuZXh0UHJvcHMuY2VsbEVkaXQgJiYgdGhpcy5wcm9wcy5jZWxsRWRpdCkge1xuICAgICAgICB0aGlzLkNlbGxFZGl0Q29udGV4dCA9IG51bGw7XG4gICAgICB9XG4gICAgICBpZiAobmV4dFByb3BzLmNlbGxFZGl0ICYmICF0aGlzLnByb3BzLmNlbGxFZGl0KSB7XG4gICAgICAgIHRoaXMuQ2VsbEVkaXRDb250ZXh0ID0gbmV4dFByb3BzLmNlbGxFZGl0LmNyZWF0ZUNvbnRleHQoXG4gICAgICAgICAgXywgZGF0YU9wZXJhdG9yLCB0aGlzLmlzUmVtb3RlQ2VsbEVkaXQsIHRoaXMuaGFuZGxlUmVtb3RlQ2VsbENoYW5nZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVuZGVyQmFzZSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHJvb3RQcm9wcyxcbiAgICAgICAgZmlsdGVyUHJvcHMsXG4gICAgICAgIHNlYXJjaFByb3BzLFxuICAgICAgICBzb3J0UHJvcHMsXG4gICAgICAgIHBhZ2luYXRpb25Qcm9wcyxcbiAgICAgICAgY29sdW1uVG9nZ2xlUHJvcHNcbiAgICAgICkgPT4gKFxuICAgICAgICA8QmFzZVxuICAgICAgICAgIHJlZj17IG4gPT4gdGhpcy50YWJsZSA9IG4gfVxuICAgICAgICAgIHsgLi4udGhpcy5wcm9wcyB9XG4gICAgICAgICAgeyAuLi5zb3J0UHJvcHMgfVxuICAgICAgICAgIHsgLi4uZmlsdGVyUHJvcHMgfVxuICAgICAgICAgIHsgLi4uc2VhcmNoUHJvcHMgfVxuICAgICAgICAgIHsgLi4ucGFnaW5hdGlvblByb3BzIH1cbiAgICAgICAgICB7IC4uLmNvbHVtblRvZ2dsZVByb3BzIH1cbiAgICAgICAgICBkYXRhPXsgcm9vdFByb3BzLmdldERhdGEoZmlsdGVyUHJvcHMsIHNlYXJjaFByb3BzLCBzb3J0UHJvcHMsIHBhZ2luYXRpb25Qcm9wcykgfVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZW5kZXJXaXRoQ29sdW1uTWFuYWdlbWVudEN0eChiYXNlLCBiYXNlUHJvcHMpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHJvb3RQcm9wcyxcbiAgICAgICAgZmlsdGVyUHJvcHMsXG4gICAgICAgIHNlYXJjaFByb3BzLFxuICAgICAgICBzb3J0UHJvcHMsXG4gICAgICAgIHBhZ2luYXRpb25Qcm9wc1xuICAgICAgKSA9PiAoXG4gICAgICAgIDx0aGlzLkNvbHVtbk1hbmFnZW1lbnRDb250ZXh0LlByb3ZpZGVyXG4gICAgICAgICAgeyAuLi5iYXNlUHJvcHMgfVxuICAgICAgICAgIHRvZ2dsZXM9eyB0aGlzLnByb3BzLmNvbHVtblRvZ2dsZSA/IHRoaXMucHJvcHMuY29sdW1uVG9nZ2xlLnRvZ2dsZXMgOiBudWxsIH1cbiAgICAgICAgPlxuICAgICAgICAgIDx0aGlzLkNvbHVtbk1hbmFnZW1lbnRDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjb2x1bW5Ub2dnbGVQcm9wcyA9PiBiYXNlKFxuICAgICAgICAgICAgICAgIHJvb3RQcm9wcyxcbiAgICAgICAgICAgICAgICBmaWx0ZXJQcm9wcyxcbiAgICAgICAgICAgICAgICBzZWFyY2hQcm9wcyxcbiAgICAgICAgICAgICAgICBzb3J0UHJvcHMsXG4gICAgICAgICAgICAgICAgcGFnaW5hdGlvblByb3BzLFxuICAgICAgICAgICAgICAgIGNvbHVtblRvZ2dsZVByb3BzXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3RoaXMuQ29sdW1uTWFuYWdlbWVudENvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgIDwvdGhpcy5Db2x1bW5NYW5hZ2VtZW50Q29udGV4dC5Qcm92aWRlcj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmVuZGVyV2l0aFNlbGVjdGlvbkN0eChiYXNlLCBiYXNlUHJvcHMpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHJvb3RQcm9wcyxcbiAgICAgICAgZmlsdGVyUHJvcHMsXG4gICAgICAgIHNlYXJjaFByb3BzLFxuICAgICAgICBzb3J0UHJvcHMsXG4gICAgICAgIHBhZ2luYXRpb25Qcm9wc1xuICAgICAgKSA9PiAoXG4gICAgICAgIDx0aGlzLlNlbGVjdGlvbkNvbnRleHQuUHJvdmlkZXJcbiAgICAgICAgICB7IC4uLmJhc2VQcm9wcyB9XG4gICAgICAgICAgcmVmPXsgbiA9PiB0aGlzLnNlbGVjdGlvbkNvbnRleHQgPSBuIH1cbiAgICAgICAgICBzZWxlY3RSb3c9eyB0aGlzLnByb3BzLnNlbGVjdFJvdyB9XG4gICAgICAgICAgZGF0YT17IHJvb3RQcm9wcy5nZXREYXRhKGZpbHRlclByb3BzLCBzZWFyY2hQcm9wcywgc29ydFByb3BzLCBwYWdpbmF0aW9uUHJvcHMpIH1cbiAgICAgICAgPlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJhc2UoXG4gICAgICAgICAgICAgIHJvb3RQcm9wcyxcbiAgICAgICAgICAgICAgZmlsdGVyUHJvcHMsXG4gICAgICAgICAgICAgIHNlYXJjaFByb3BzLFxuICAgICAgICAgICAgICBzb3J0UHJvcHMsXG4gICAgICAgICAgICAgIHBhZ2luYXRpb25Qcm9wc1xuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgPC90aGlzLlNlbGVjdGlvbkNvbnRleHQuUHJvdmlkZXI+XG4gICAgICApO1xuICAgIH1cblxuICAgIHJlbmRlcldpdGhSb3dFeHBhbmRDdHgoYmFzZSwgYmFzZVByb3BzKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICByb290UHJvcHMsXG4gICAgICAgIGZpbHRlclByb3BzLFxuICAgICAgICBzZWFyY2hQcm9wcyxcbiAgICAgICAgc29ydFByb3BzLFxuICAgICAgICBwYWdpbmF0aW9uUHJvcHNcbiAgICAgICkgPT4gKFxuICAgICAgICA8dGhpcy5Sb3dFeHBhbmRDb250ZXh0LlByb3ZpZGVyXG4gICAgICAgICAgeyAuLi5iYXNlUHJvcHMgfVxuICAgICAgICAgIHJlZj17IG4gPT4gdGhpcy5yb3dFeHBhbmRDb250ZXh0ID0gbiB9XG4gICAgICAgICAgZXhwYW5kUm93PXsgdGhpcy5wcm9wcy5leHBhbmRSb3cgfVxuICAgICAgICAgIGRhdGE9eyByb290UHJvcHMuZ2V0RGF0YShmaWx0ZXJQcm9wcywgc2VhcmNoUHJvcHMsIHNvcnRQcm9wcywgcGFnaW5hdGlvblByb3BzKSB9XG4gICAgICAgID5cbiAgICAgICAgICB7XG4gICAgICAgICAgICBiYXNlKFxuICAgICAgICAgICAgICByb290UHJvcHMsXG4gICAgICAgICAgICAgIGZpbHRlclByb3BzLFxuICAgICAgICAgICAgICBzZWFyY2hQcm9wcyxcbiAgICAgICAgICAgICAgc29ydFByb3BzLFxuICAgICAgICAgICAgICBwYWdpbmF0aW9uUHJvcHNcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG4gICAgICAgIDwvdGhpcy5Sb3dFeHBhbmRDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZW5kZXJXaXRoUGFnaW5hdGlvbkN0eChiYXNlKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICByb290UHJvcHMsXG4gICAgICAgIGZpbHRlclByb3BzLFxuICAgICAgICBzZWFyY2hQcm9wcyxcbiAgICAgICAgc29ydFByb3BzXG4gICAgICApID0+IChcbiAgICAgICAgPHRoaXMuUGFnaW5hdGlvbkNvbnRleHQuUHJvdmlkZXJcbiAgICAgICAgICByZWY9eyBuID0+IHRoaXMucGFnaW5hdGlvbkNvbnRleHQgPSBuIH1cbiAgICAgICAgICBwYWdpbmF0aW9uPXsgdGhpcy5wcm9wcy5wYWdpbmF0aW9uIH1cbiAgICAgICAgICBkYXRhPXsgcm9vdFByb3BzLmdldERhdGEoZmlsdGVyUHJvcHMsIHNlYXJjaFByb3BzLCBzb3J0UHJvcHMpIH1cbiAgICAgICAgICBib290c3RyYXA0PXsgdGhpcy5wcm9wcy5ib290c3RyYXA0IH1cbiAgICAgICAgICBpc1JlbW90ZVBhZ2luYXRpb249eyB0aGlzLmlzUmVtb3RlUGFnaW5hdGlvbiB9XG4gICAgICAgICAgcmVtb3RlRW1pdHRlcj17IHRoaXMucmVtb3RlRW1pdHRlciB9XG4gICAgICAgICAgb25EYXRhU2l6ZUNoYW5nZT17IHRoaXMucHJvcHMub25EYXRhU2l6ZUNoYW5nZSB9XG4gICAgICAgICAgdGFibGVJZD17IHRoaXMucHJvcHMuaWQgfVxuICAgICAgICA+XG4gICAgICAgICAgPHRoaXMuUGFnaW5hdGlvbkNvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHBhZ2luYXRpb25Qcm9wcyA9PiBiYXNlKFxuICAgICAgICAgICAgICAgIHJvb3RQcm9wcyxcbiAgICAgICAgICAgICAgICBmaWx0ZXJQcm9wcyxcbiAgICAgICAgICAgICAgICBzZWFyY2hQcm9wcyxcbiAgICAgICAgICAgICAgICBzb3J0UHJvcHMsXG4gICAgICAgICAgICAgICAgcGFnaW5hdGlvblByb3BzXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3RoaXMuUGFnaW5hdGlvbkNvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgIDwvdGhpcy5QYWdpbmF0aW9uQ29udGV4dC5Qcm92aWRlcj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmVuZGVyV2l0aFNvcnRDdHgoYmFzZSwgYmFzZVByb3BzKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICByb290UHJvcHMsXG4gICAgICAgIGZpbHRlclByb3BzLFxuICAgICAgICBzZWFyY2hQcm9wc1xuICAgICAgKSA9PiAoXG4gICAgICAgIDx0aGlzLlNvcnRDb250ZXh0LlByb3ZpZGVyXG4gICAgICAgICAgeyAuLi5iYXNlUHJvcHMgfVxuICAgICAgICAgIHJlZj17IG4gPT4gdGhpcy5zb3J0Q29udGV4dCA9IG4gfVxuICAgICAgICAgIGRlZmF1bHRTb3J0ZWQ9eyB0aGlzLnByb3BzLmRlZmF1bHRTb3J0ZWQgfVxuICAgICAgICAgIGRlZmF1bHRTb3J0RGlyZWN0aW9uPXsgdGhpcy5wcm9wcy5kZWZhdWx0U29ydERpcmVjdGlvbiB9XG4gICAgICAgICAgc29ydD17IHRoaXMucHJvcHMuc29ydCB9XG4gICAgICAgICAgZGF0YT17IHJvb3RQcm9wcy5nZXREYXRhKGZpbHRlclByb3BzLCBzZWFyY2hQcm9wcykgfVxuICAgICAgICA+XG4gICAgICAgICAgPHRoaXMuU29ydENvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHNvcnRQcm9wcyA9PiBiYXNlKFxuICAgICAgICAgICAgICAgIHJvb3RQcm9wcyxcbiAgICAgICAgICAgICAgICBmaWx0ZXJQcm9wcyxcbiAgICAgICAgICAgICAgICBzZWFyY2hQcm9wcyxcbiAgICAgICAgICAgICAgICBzb3J0UHJvcHMsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3RoaXMuU29ydENvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgIDwvdGhpcy5Tb3J0Q29udGV4dC5Qcm92aWRlcj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmVuZGVyV2l0aFNlYXJjaEN0eChiYXNlLCBiYXNlUHJvcHMpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHJvb3RQcm9wcyxcbiAgICAgICAgZmlsdGVyUHJvcHNcbiAgICAgICkgPT4gKFxuICAgICAgICA8dGhpcy5TZWFyY2hDb250ZXh0LlByb3ZpZGVyXG4gICAgICAgICAgeyAuLi5iYXNlUHJvcHMgfVxuICAgICAgICAgIHJlZj17IG4gPT4gdGhpcy5zZWFyY2hDb250ZXh0ID0gbiB9XG4gICAgICAgICAgZGF0YT17IHJvb3RQcm9wcy5nZXREYXRhKGZpbHRlclByb3BzKSB9XG4gICAgICAgICAgc2VhcmNoVGV4dD17IHRoaXMucHJvcHMuc2VhcmNoLnNlYXJjaFRleHQgfVxuICAgICAgICAgIGRhdGFDaGFuZ2VMaXN0ZW5lcj17IHRoaXMucHJvcHMuZGF0YUNoYW5nZUxpc3RlbmVyIH1cbiAgICAgICAgPlxuICAgICAgICAgIDx0aGlzLlNlYXJjaENvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHNlYXJjaFByb3BzID0+IGJhc2UoXG4gICAgICAgICAgICAgICAgcm9vdFByb3BzLFxuICAgICAgICAgICAgICAgIGZpbHRlclByb3BzLFxuICAgICAgICAgICAgICAgIHNlYXJjaFByb3BzXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3RoaXMuU2VhcmNoQ29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgPC90aGlzLlNlYXJjaENvbnRleHQuUHJvdmlkZXI+XG4gICAgICApO1xuICAgIH1cblxuICAgIHJlbmRlcldpdGhGaWx0ZXJDdHgoYmFzZSwgYmFzZVByb3BzKSB7XG4gICAgICByZXR1cm4gcm9vdFByb3BzID0+IChcbiAgICAgICAgPHRoaXMuRmlsdGVyQ29udGV4dC5Qcm92aWRlclxuICAgICAgICAgIHsgLi4uYmFzZVByb3BzIH1cbiAgICAgICAgICByZWY9eyBuID0+IHRoaXMuZmlsdGVyQ29udGV4dCA9IG4gfVxuICAgICAgICAgIGRhdGE9eyByb290UHJvcHMuZ2V0RGF0YSgpIH1cbiAgICAgICAgICBmaWx0ZXI9eyB0aGlzLnByb3BzLmZpbHRlci5vcHRpb25zIHx8IHt9IH1cbiAgICAgICAgICBkYXRhQ2hhbmdlTGlzdGVuZXI9eyB0aGlzLnByb3BzLmRhdGFDaGFuZ2VMaXN0ZW5lciB9XG4gICAgICAgID5cbiAgICAgICAgICA8dGhpcy5GaWx0ZXJDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBmaWx0ZXJQcm9wcyA9PiBiYXNlKFxuICAgICAgICAgICAgICAgIHJvb3RQcm9wcyxcbiAgICAgICAgICAgICAgICBmaWx0ZXJQcm9wc1xuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC90aGlzLkZpbHRlckNvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgIDwvdGhpcy5GaWx0ZXJDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZW5kZXJXaXRoQ2VsbEVkaXRDdHgoYmFzZSwgYmFzZVByb3BzKSB7XG4gICAgICByZXR1cm4gcm9vdFByb3BzID0+IChcbiAgICAgICAgPHRoaXMuQ2VsbEVkaXRDb250ZXh0LlByb3ZpZGVyXG4gICAgICAgICAgeyAuLi5iYXNlUHJvcHMgfVxuICAgICAgICAgIHJlZj17IG4gPT4gdGhpcy5jZWxsRWRpdENvbnRleHQgPSBuIH1cbiAgICAgICAgICBzZWxlY3RSb3c9eyB0aGlzLnByb3BzLnNlbGVjdFJvdyB9XG4gICAgICAgICAgY2VsbEVkaXQ9eyB0aGlzLnByb3BzLmNlbGxFZGl0IH1cbiAgICAgICAgICBkYXRhPXsgcm9vdFByb3BzLmdldERhdGEoKSB9XG4gICAgICAgID5cbiAgICAgICAgICB7IGJhc2Uocm9vdFByb3BzKSB9XG4gICAgICAgIDwvdGhpcy5DZWxsRWRpdENvbnRleHQuUHJvdmlkZXI+XG4gICAgICApO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgIGNvbnN0IHsga2V5RmllbGQsIGNvbHVtbnMsIGJvb3RzdHJhcDQgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCBiYXNlUHJvcHMgPSB7IGtleUZpZWxkLCBjb2x1bW5zIH07XG5cbiAgICAgIGxldCBiYXNlID0gdGhpcy5yZW5kZXJCYXNlKCk7XG5cbiAgICAgIGlmICh0aGlzLkNvbHVtbk1hbmFnZW1lbnRDb250ZXh0KSB7XG4gICAgICAgIGJhc2UgPSB0aGlzLnJlbmRlcldpdGhDb2x1bW5NYW5hZ2VtZW50Q3R4KGJhc2UsIGJhc2VQcm9wcyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLlNlbGVjdGlvbkNvbnRleHQpIHtcbiAgICAgICAgYmFzZSA9IHRoaXMucmVuZGVyV2l0aFNlbGVjdGlvbkN0eChiYXNlLCBiYXNlUHJvcHMpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5Sb3dFeHBhbmRDb250ZXh0KSB7XG4gICAgICAgIGJhc2UgPSB0aGlzLnJlbmRlcldpdGhSb3dFeHBhbmRDdHgoYmFzZSwgYmFzZVByb3BzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuUGFnaW5hdGlvbkNvbnRleHQpIHtcbiAgICAgICAgYmFzZSA9IHRoaXMucmVuZGVyV2l0aFBhZ2luYXRpb25DdHgoYmFzZSwgYmFzZVByb3BzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuU29ydENvbnRleHQpIHtcbiAgICAgICAgYmFzZSA9IHRoaXMucmVuZGVyV2l0aFNvcnRDdHgoYmFzZSwgYmFzZVByb3BzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuU2VhcmNoQ29udGV4dCkge1xuICAgICAgICBiYXNlID0gdGhpcy5yZW5kZXJXaXRoU2VhcmNoQ3R4KGJhc2UsIGJhc2VQcm9wcyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLkZpbHRlckNvbnRleHQpIHtcbiAgICAgICAgYmFzZSA9IHRoaXMucmVuZGVyV2l0aEZpbHRlckN0eChiYXNlLCBiYXNlUHJvcHMpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5DZWxsRWRpdENvbnRleHQpIHtcbiAgICAgICAgYmFzZSA9IHRoaXMucmVuZGVyV2l0aENlbGxFZGl0Q3R4KGJhc2UsIGJhc2VQcm9wcyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxCb290c3RyYXBDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXsgeyBib290c3RyYXA0IH0gfT5cbiAgICAgICAgICA8dGhpcy5EYXRhQ29udGV4dC5Qcm92aWRlclxuICAgICAgICAgICAgeyAuLi5iYXNlUHJvcHMgfVxuICAgICAgICAgICAgZGF0YT17IHRoaXMucHJvcHMuZGF0YSB9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHRoaXMuRGF0YUNvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBiYXNlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvdGhpcy5EYXRhQ29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgICA8L3RoaXMuRGF0YUNvbnRleHQuUHJvdmlkZXI+XG4gICAgICAgIDwvQm9vdHN0cmFwQ29udGV4dC5Qcm92aWRlcj5cbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoQ29udGV4dDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL2NvbnRleHRzL2luZGV4LmpzIiwiLyogZXNsaW50IGNhbWVsY2FzZTogMCAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5cbmV4cG9ydCBkZWZhdWx0ICgpID0+IHtcbiAgY29uc3QgRGF0YUNvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0KCk7XG5cbiAgY2xhc3MgRGF0YVByb3ZpZGVyIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgICAgZGF0YTogUHJvcFR5cGVzLmFycmF5LmlzUmVxdWlyZWQsXG4gICAgICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZFxuICAgIH1cblxuICAgIHN0YXRlID0geyBkYXRhOiB0aGlzLnByb3BzLmRhdGEgfTtcblxuICAgIGdldERhdGEgPSAoZmlsdGVyUHJvcHMsIHNlYXJjaFByb3BzLCBzb3J0UHJvcHMsIHBhZ2luYXRpb25Qcm9wcykgPT4ge1xuICAgICAgaWYgKHBhZ2luYXRpb25Qcm9wcykgcmV0dXJuIHBhZ2luYXRpb25Qcm9wcy5kYXRhO1xuICAgICAgZWxzZSBpZiAoc29ydFByb3BzKSByZXR1cm4gc29ydFByb3BzLmRhdGE7XG4gICAgICBlbHNlIGlmIChzZWFyY2hQcm9wcykgcmV0dXJuIHNlYXJjaFByb3BzLmRhdGE7XG4gICAgICBlbHNlIGlmIChmaWx0ZXJQcm9wcykgcmV0dXJuIGZpbHRlclByb3BzLmRhdGE7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5kYXRhO1xuICAgIH1cblxuICAgIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xuICAgICAgdGhpcy5zZXRTdGF0ZSgoKSA9PiAoeyBkYXRhOiBuZXh0UHJvcHMuZGF0YSB9KSk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPERhdGFDb250ZXh0LlByb3ZpZGVyXG4gICAgICAgICAgdmFsdWU9eyB7XG4gICAgICAgICAgICBkYXRhOiB0aGlzLnN0YXRlLmRhdGEsXG4gICAgICAgICAgICBnZXREYXRhOiB0aGlzLmdldERhdGFcbiAgICAgICAgICB9IH1cbiAgICAgICAgPlxuICAgICAgICAgIHsgdGhpcy5wcm9wcy5jaGlsZHJlbiB9XG4gICAgICAgIDwvRGF0YUNvbnRleHQuUHJvdmlkZXI+XG4gICAgICApO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIFByb3ZpZGVyOiBEYXRhUHJvdmlkZXIsXG4gICAgQ29uc3VtZXI6IERhdGFDb250ZXh0LkNvbnN1bWVyXG4gIH07XG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9zcmMvY29udGV4dHMvZGF0YS1jb250ZXh0LmpzIiwiLyogZXNsaW50IHJlYWN0L3Byb3AtdHlwZXM6IDAgKi9cbi8qIGVzbGludCByZWFjdC9wcmVmZXItc3RhdGVsZXNzLWZ1bmN0aW9uOiAwICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICBjb25zdCBDb2x1bW5NYW5hZ2VtZW50Q29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQoKTtcblxuICBjbGFzcyBDb2x1bW5NYW5hZ2VtZW50UHJvdmlkZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICAgIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgICBjb2x1bW5zOiBQcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZCxcbiAgICAgIHRvZ2dsZXM6IFByb3BUeXBlcy5vYmplY3RcbiAgICB9XG5cbiAgICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgICAgdG9nZ2xlczogbnVsbFxuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgIGxldCB0b2dnbGVDb2x1bW47XG4gICAgICBjb25zdCB7IGNvbHVtbnMsIHRvZ2dsZXMgfSA9IHRoaXMucHJvcHM7XG4gICAgICBpZiAodG9nZ2xlcykge1xuICAgICAgICB0b2dnbGVDb2x1bW4gPSBjb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gdG9nZ2xlc1tjb2x1bW4uZGF0YUZpZWxkXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0b2dnbGVDb2x1bW4gPSBjb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gIWNvbHVtbi5oaWRkZW4pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPENvbHVtbk1hbmFnZW1lbnRDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXsgeyBjb2x1bW5zOiB0b2dnbGVDb2x1bW4gfSB9PlxuICAgICAgICAgIHsgdGhpcy5wcm9wcy5jaGlsZHJlbiB9XG4gICAgICAgIDwvQ29sdW1uTWFuYWdlbWVudENvbnRleHQuUHJvdmlkZXI+XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgUHJvdmlkZXI6IENvbHVtbk1hbmFnZW1lbnRQcm92aWRlcixcbiAgICBDb25zdW1lcjogQ29sdW1uTWFuYWdlbWVudENvbnRleHQuQ29uc3VtZXJcbiAgfTtcbn07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9jb250ZXh0cy9jb2x1bW4tY29udGV4dC5qcyIsIi8qIGVzbGludCBjYW1lbGNhc2U6IDAgKi9cbi8qIGVzbGludCByZWFjdC9yZXF1aXJlLWRlZmF1bHQtcHJvcHM6IDAgKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IENvbnN0IGZyb20gJy4uL2NvbnN0JztcblxuZXhwb3J0IGRlZmF1bHQgKFxuICBkYXRhT3BlcmF0b3IsXG4gIGlzUmVtb3RlU29ydCxcbiAgaGFuZGxlU29ydENoYW5nZVxuKSA9PiB7XG4gIGNvbnN0IFNvcnRDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dCgpO1xuXG4gIGNsYXNzIFNvcnRQcm92aWRlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gICAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICAgIGRhdGE6IFByb3BUeXBlcy5hcnJheS5pc1JlcXVpcmVkLFxuICAgICAgY29sdW1uczogUHJvcFR5cGVzLmFycmF5LmlzUmVxdWlyZWQsXG4gICAgICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcbiAgICAgIGRlZmF1bHRTb3J0ZWQ6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICAgIGRhdGFGaWVsZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgICAgICBvcmRlcjogUHJvcFR5cGVzLm9uZU9mKFtDb25zdC5TT1JUX0RFU0MsIENvbnN0LlNPUlRfQVNDXSkuaXNSZXF1aXJlZFxuICAgICAgfSkpLFxuICAgICAgc29ydDogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgICAgZGF0YUZpZWxkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICBvcmRlcjogUHJvcFR5cGVzLm9uZU9mKFtDb25zdC5TT1JUX0RFU0MsIENvbnN0LlNPUlRfQVNDXSksXG4gICAgICAgIHNvcnRGdW5jOiBQcm9wVHlwZXMuZnVuY1xuICAgICAgfSksXG4gICAgICBkZWZhdWx0U29ydERpcmVjdGlvbjogUHJvcFR5cGVzLm9uZU9mKFtDb25zdC5TT1JUX0RFU0MsIENvbnN0LlNPUlRfQVNDXSlcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgbGV0IHNvcnRPcmRlcjtcbiAgICAgIGxldCBzb3J0Q29sdW1uO1xuICAgICAgY29uc3QgeyBkZWZhdWx0U29ydGVkLCBkZWZhdWx0U29ydERpcmVjdGlvbiwgc29ydCB9ID0gcHJvcHM7XG5cbiAgICAgIGlmIChkZWZhdWx0U29ydGVkICYmIGRlZmF1bHRTb3J0ZWQubGVuZ3RoID4gMCkge1xuICAgICAgICBzb3J0T3JkZXIgPSBkZWZhdWx0U29ydGVkWzBdLm9yZGVyIHx8IGRlZmF1bHRTb3J0RGlyZWN0aW9uO1xuICAgICAgICBzb3J0Q29sdW1uID0gdGhpcy5pbml0U29ydChkZWZhdWx0U29ydGVkWzBdLmRhdGFGaWVsZCwgc29ydE9yZGVyKTtcbiAgICAgIH0gZWxzZSBpZiAoc29ydCAmJiBzb3J0LmRhdGFGaWVsZCAmJiBzb3J0Lm9yZGVyKSB7XG4gICAgICAgIHNvcnRPcmRlciA9IHNvcnQub3JkZXI7XG4gICAgICAgIHNvcnRDb2x1bW4gPSB0aGlzLmluaXRTb3J0KHNvcnQuZGF0YUZpZWxkLCBzb3J0T3JkZXIpO1xuICAgICAgfVxuICAgICAgdGhpcy5zdGF0ZSA9IHsgc29ydE9yZGVyLCBzb3J0Q29sdW1uIH07XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBjb25zdCB7IHNvcnRPcmRlciwgc29ydENvbHVtbiB9ID0gdGhpcy5zdGF0ZTtcbiAgICAgIGlmIChpc1JlbW90ZVNvcnQoKSAmJiBzb3J0T3JkZXIgJiYgc29ydENvbHVtbikge1xuICAgICAgICBoYW5kbGVTb3J0Q2hhbmdlKHNvcnRDb2x1bW4uZGF0YUZpZWxkLCBzb3J0T3JkZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xuICAgICAgY29uc3QgeyBzb3J0LCBjb2x1bW5zIH0gPSBuZXh0UHJvcHM7XG4gICAgICBpZiAoc29ydCAmJiBzb3J0LmRhdGFGaWVsZCAmJiBzb3J0Lm9yZGVyKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIHNvcnRPcmRlcjogc29ydC5vcmRlcixcbiAgICAgICAgICBzb3J0Q29sdW1uOiBjb2x1bW5zLmZpbmQoY29sID0+IGNvbC5kYXRhRmllbGQgPT09IHNvcnQuZGF0YUZpZWxkKVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0U29ydChzb3J0RmllbGQsIHNvcnRPcmRlcikge1xuICAgICAgbGV0IHNvcnRDb2x1bW47XG4gICAgICBjb25zdCB7IGNvbHVtbnMgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCBzb3J0Q29sdW1ucyA9IGNvbHVtbnMuZmlsdGVyKGNvbCA9PiBjb2wuZGF0YUZpZWxkID09PSBzb3J0RmllbGQpO1xuICAgICAgaWYgKHNvcnRDb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgc29ydENvbHVtbiA9IHNvcnRDb2x1bW5zWzBdO1xuXG4gICAgICAgIGlmIChzb3J0Q29sdW1uLm9uU29ydCkge1xuICAgICAgICAgIHNvcnRDb2x1bW4ub25Tb3J0KHNvcnRGaWVsZCwgc29ydE9yZGVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHNvcnRDb2x1bW47XG4gICAgfVxuXG4gICAgaGFuZGxlU29ydCA9IChjb2x1bW4pID0+IHtcbiAgICAgIGNvbnN0IHNvcnRPcmRlciA9IGRhdGFPcGVyYXRvci5uZXh0T3JkZXIoY29sdW1uLCB0aGlzLnN0YXRlLCB0aGlzLnByb3BzLmRlZmF1bHRTb3J0RGlyZWN0aW9uKTtcblxuICAgICAgaWYgKGNvbHVtbi5vblNvcnQpIHtcbiAgICAgICAgY29sdW1uLm9uU29ydChjb2x1bW4uZGF0YUZpZWxkLCBzb3J0T3JkZXIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNSZW1vdGVTb3J0KCkpIHtcbiAgICAgICAgaGFuZGxlU29ydENoYW5nZShjb2x1bW4uZGF0YUZpZWxkLCBzb3J0T3JkZXIpO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRTdGF0ZSgoKSA9PiAoe1xuICAgICAgICBzb3J0T3JkZXIsXG4gICAgICAgIHNvcnRDb2x1bW46IGNvbHVtblxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgIGxldCB7IGRhdGEgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCB7IHNvcnQgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCB7IHNvcnRPcmRlciwgc29ydENvbHVtbiB9ID0gdGhpcy5zdGF0ZTtcbiAgICAgIGlmICghaXNSZW1vdGVTb3J0KCkgJiYgc29ydENvbHVtbikge1xuICAgICAgICBjb25zdCBzb3J0RnVuYyA9IHNvcnRDb2x1bW4uc29ydEZ1bmMgPyBzb3J0Q29sdW1uLnNvcnRGdW5jIDogKHNvcnQgJiYgc29ydC5zb3J0RnVuYyk7XG4gICAgICAgIGRhdGEgPSBkYXRhT3BlcmF0b3Iuc29ydChkYXRhLCBzb3J0T3JkZXIsIHsgLi4uc29ydENvbHVtbiwgc29ydEZ1bmMgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTb3J0Q29udGV4dC5Qcm92aWRlclxuICAgICAgICAgIHZhbHVlPXsge1xuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIHNvcnRPcmRlcixcbiAgICAgICAgICAgIG9uU29ydDogdGhpcy5oYW5kbGVTb3J0LFxuICAgICAgICAgICAgc29ydEZpZWxkOiBzb3J0Q29sdW1uID8gc29ydENvbHVtbi5kYXRhRmllbGQgOiBudWxsXG4gICAgICAgICAgfSB9XG4gICAgICAgID5cbiAgICAgICAgICB7IHRoaXMucHJvcHMuY2hpbGRyZW4gfVxuICAgICAgICA8L1NvcnRDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBQcm92aWRlcjogU29ydFByb3ZpZGVyLFxuICAgIENvbnN1bWVyOiBTb3J0Q29udGV4dC5Db25zdW1lclxuICB9O1xufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvc3JjL2NvbnRleHRzL3NvcnQtY29udGV4dC5qcyIsImltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSAnZXZlbnRzJztcbmltcG9ydCBfIGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgRXh0ZW5kQmFzZSA9PlxuICBjbGFzcyBSZW1vdGVSZXNvbHZlciBleHRlbmRzIEV4dGVuZEJhc2Uge1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICBzdXBlcihwcm9wcyk7XG4gICAgICB0aGlzLnJlbW90ZUVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICB0aGlzLnJlbW90ZUVtaXR0ZXIub24oJ3BhZ2luYXRpb25DaGFuZ2UnLCB0aGlzLmhhbmRsZVJlbW90ZVBhZ2VDaGFuZ2UpO1xuICAgICAgdGhpcy5yZW1vdGVFbWl0dGVyLm9uKCdpc1JlbW90ZVBhZ2luYXRpb24nLCB0aGlzLmlzUmVtb3RlUGFnaW5hdGlvbik7XG4gICAgfVxuXG4gICAgZ2V0TmV3ZXN0U3RhdGUgPSAoc3RhdGUgPSB7fSkgPT4ge1xuICAgICAgbGV0IHNvcnRPcmRlcjtcbiAgICAgIGxldCBzb3J0RmllbGQ7XG4gICAgICBsZXQgcGFnZTtcbiAgICAgIGxldCBzaXplUGVyUGFnZTtcbiAgICAgIGxldCBzZWFyY2hUZXh0O1xuICAgICAgbGV0IGZpbHRlcnMgPSB7fTtcblxuICAgICAgaWYgKHRoaXMuc29ydENvbnRleHQpIHtcbiAgICAgICAgc29ydE9yZGVyID0gdGhpcy5zb3J0Q29udGV4dC5zdGF0ZS5zb3J0T3JkZXI7XG4gICAgICAgIHNvcnRGaWVsZCA9IHRoaXMuc29ydENvbnRleHQuc3RhdGUuc29ydENvbHVtbiA/XG4gICAgICAgICAgdGhpcy5zb3J0Q29udGV4dC5zdGF0ZS5zb3J0Q29sdW1uLmRhdGFGaWVsZCA6XG4gICAgICAgICAgbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZmlsdGVyQ29udGV4dCkge1xuICAgICAgICBmaWx0ZXJzID0gdGhpcy5maWx0ZXJDb250ZXh0LmN1cnJGaWx0ZXJzO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5wYWdpbmF0aW9uQ29udGV4dCkge1xuICAgICAgICBwYWdlID0gdGhpcy5wYWdpbmF0aW9uQ29udGV4dC5jdXJyUGFnZTtcbiAgICAgICAgc2l6ZVBlclBhZ2UgPSB0aGlzLnBhZ2luYXRpb25Db250ZXh0LmN1cnJTaXplUGVyUGFnZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuc2VhcmNoQ29udGV4dCkge1xuICAgICAgICBzZWFyY2hUZXh0ID0gdGhpcy5wcm9wcy5zZWFyY2guc2VhcmNoVGV4dDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc29ydE9yZGVyLFxuICAgICAgICBzb3J0RmllbGQsXG4gICAgICAgIGZpbHRlcnMsXG4gICAgICAgIHBhZ2UsXG4gICAgICAgIHNpemVQZXJQYWdlLFxuICAgICAgICBzZWFyY2hUZXh0LFxuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgZGF0YTogdGhpcy5wcm9wcy5kYXRhXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlzUmVtb3RlU2VhcmNoID0gKCkgPT4ge1xuICAgICAgY29uc3QgeyByZW1vdGUgfSA9IHRoaXMucHJvcHM7XG4gICAgICByZXR1cm4gcmVtb3RlID09PSB0cnVlIHx8IChfLmlzT2JqZWN0KHJlbW90ZSkgJiYgcmVtb3RlLnNlYXJjaCkgfHwgdGhpcy5pc1JlbW90ZVBhZ2luYXRpb24oKTtcbiAgICB9XG5cbiAgICBpc1JlbW90ZVBhZ2luYXRpb24gPSAoZSA9IHt9KSA9PiB7XG4gICAgICBjb25zdCB7IHJlbW90ZSB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGUucmVzdWx0ID0gKHJlbW90ZSA9PT0gdHJ1ZSB8fCAoXy5pc09iamVjdChyZW1vdGUpICYmIHJlbW90ZS5wYWdpbmF0aW9uKSk7XG4gICAgICByZXR1cm4gZS5yZXN1bHQ7XG4gICAgfVxuXG4gICAgaXNSZW1vdGVGaWx0ZXJpbmcgPSAoKSA9PiB7XG4gICAgICBjb25zdCB7IHJlbW90ZSB9ID0gdGhpcy5wcm9wcztcbiAgICAgIHJldHVybiByZW1vdGUgPT09IHRydWUgfHwgKF8uaXNPYmplY3QocmVtb3RlKSAmJiByZW1vdGUuZmlsdGVyKSB8fCB0aGlzLmlzUmVtb3RlUGFnaW5hdGlvbigpO1xuICAgIH1cblxuICAgIGlzUmVtb3RlU29ydCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHsgcmVtb3RlIH0gPSB0aGlzLnByb3BzO1xuICAgICAgcmV0dXJuIHJlbW90ZSA9PT0gdHJ1ZSB8fCAoXy5pc09iamVjdChyZW1vdGUpICYmIHJlbW90ZS5zb3J0KSB8fCB0aGlzLmlzUmVtb3RlUGFnaW5hdGlvbigpO1xuICAgIH1cblxuICAgIGlzUmVtb3RlQ2VsbEVkaXQgPSAoKSA9PiB7XG4gICAgICBjb25zdCB7IHJlbW90ZSB9ID0gdGhpcy5wcm9wcztcbiAgICAgIHJldHVybiByZW1vdGUgPT09IHRydWUgfHwgKF8uaXNPYmplY3QocmVtb3RlKSAmJiByZW1vdGUuY2VsbEVkaXQpO1xuICAgIH1cblxuICAgIGhhbmRsZVJlbW90ZVBhZ2VDaGFuZ2UgPSAocGFnZSwgc2l6ZVBlclBhZ2UpID0+IHtcbiAgICAgIHRoaXMucHJvcHMub25UYWJsZUNoYW5nZSgncGFnaW5hdGlvbicsIHRoaXMuZ2V0TmV3ZXN0U3RhdGUoeyBwYWdlLCBzaXplUGVyUGFnZSB9KSk7XG4gICAgfVxuXG4gICAgaGFuZGxlUmVtb3RlRmlsdGVyQ2hhbmdlID0gKGZpbHRlcnMpID0+IHtcbiAgICAgIGNvbnN0IG5ld1N0YXRlID0geyBmaWx0ZXJzIH07XG4gICAgICBpZiAodGhpcy5pc1JlbW90ZVBhZ2luYXRpb24oKSkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5wcm9wcy5wYWdpbmF0aW9uLm9wdGlvbnMgfHwge307XG4gICAgICAgIG5ld1N0YXRlLnBhZ2UgPSBfLmlzRGVmaW5lZChvcHRpb25zLnBhZ2VTdGFydEluZGV4KSA/IG9wdGlvbnMucGFnZVN0YXJ0SW5kZXggOiAxO1xuICAgICAgfVxuICAgICAgdGhpcy5wcm9wcy5vblRhYmxlQ2hhbmdlKCdmaWx0ZXInLCB0aGlzLmdldE5ld2VzdFN0YXRlKG5ld1N0YXRlKSk7XG4gICAgfVxuXG4gICAgaGFuZGxlUmVtb3RlU29ydENoYW5nZSA9IChzb3J0RmllbGQsIHNvcnRPcmRlcikgPT4ge1xuICAgICAgdGhpcy5wcm9wcy5vblRhYmxlQ2hhbmdlKCdzb3J0JywgdGhpcy5nZXROZXdlc3RTdGF0ZSh7IHNvcnRGaWVsZCwgc29ydE9yZGVyIH0pKTtcbiAgICB9XG5cbiAgICBoYW5kbGVSZW1vdGVDZWxsQ2hhbmdlID0gKHJvd0lkLCBkYXRhRmllbGQsIG5ld1ZhbHVlKSA9PiB7XG4gICAgICBjb25zdCBjZWxsRWRpdCA9IHsgcm93SWQsIGRhdGFGaWVsZCwgbmV3VmFsdWUgfTtcbiAgICAgIHRoaXMucHJvcHMub25UYWJsZUNoYW5nZSgnY2VsbEVkaXQnLCB0aGlzLmdldE5ld2VzdFN0YXRlKHsgY2VsbEVkaXQgfSkpO1xuICAgIH1cblxuICAgIGhhbmRsZVJlbW90ZVNlYXJjaENoYW5nZSA9IChzZWFyY2hUZXh0KSA9PiB7XG4gICAgICB0aGlzLnByb3BzLm9uVGFibGVDaGFuZ2UoJ3NlYXJjaCcsIHRoaXMuZ2V0TmV3ZXN0U3RhdGUoeyBzZWFyY2hUZXh0IH0pKTtcbiAgICB9XG4gIH07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUyL3NyYy9wcm9wcy1yZXNvbHZlci9yZW1vdGUtcmVzb2x2ZXIuanMiXSwic291cmNlUm9vdCI6IiJ9 -//# sourceMappingURL=react-bootstrap-table-next.js.map \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/dist/react-bootstrap-table-next.js.map b/global-scoreboard/dependencies/react-bootstrap-table-next/dist/react-bootstrap-table-next.js.map deleted file mode 100644 index b20e70fa..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/dist/react-bootstrap-table-next.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":[],"names":[],"mappings":"","file":"react-bootstrap-table2/dist/react-bootstrap-table-next.js","sourceRoot":""} \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/dist/react-bootstrap-table-next.min.js b/global-scoreboard/dependencies/react-bootstrap-table-next/dist/react-bootstrap-table-next.min.js deleted file mode 100644 index 59b5af4f..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/dist/react-bootstrap-table-next.min.js +++ /dev/null @@ -1,6 +0,0 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("react"),require("react-dom")):"function"==typeof define&&define.amd?define(["react","react-dom"],t):"object"==typeof exports?exports.ReactBootstrapTable2=t(require("react"),require("react-dom")):e.ReactBootstrapTable2=t(e.React,e.ReactDOM)}(this,function(e,t){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=26)}([function(t,n){t.exports=e},function(e,t,n){e.exports=n(28)()},function(e,t,n){"use strict";function r(e){return[e].join(".").replace(/\[/g,".").replace(/\]/g,"").split(".")}function o(e,t){return d.default.includes?d.default.includes(e,t):e.indexOf(t)>-1}function a(e,t){var n=e[t];if(void 0!==n&&null!==n)return n;var o=r(t),a=void 0;try{a=o.reduce(function(e,t){return e[t]},e)}catch(e){}return a}function i(e,t,n){var o=arguments.length>3&&void 0!==arguments[3]&&arguments[3],a=r(t),i=0;a.reduce(function(e,t){if(i+=1,void 0===e[t]){if(!o)throw new Error(e+"."+t+" is undefined");return e[t]={},e[t]}return i===a.length?(e[t]=n,n):e[t]},e)}function l(e){if(!d.default.isObject(e))return!1;for(var t=Object.prototype.hasOwnProperty,n=Object.keys(e),r=0;r=0||(o[n]=e[n]);return o}t.a=r},function(e,t,n){"use strict";function r(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}t.a=r},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var i=Object.assign||function(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:{},n=i({},t);return Object.keys(t).forEach(function(r){s.default.contains(c,r)&&(n[r]=e.createDefaultEventHandler(t[r]))}),n}}]),t}(e)}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],r=e.length>0,a=!0,i=e.map(function(e){return o.default.get(e,t)}),l=0;l0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];return 0===n.length?e.map(function(e){return o.default.get(e,t)}):e.filter(function(e){return!o.default.contains(n,o.default.get(e,t))}).map(function(e){return o.default.get(e,t)})},t.unSelectableKeys=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return 0===t.length?[]:e.filter(function(e){return o.default.contains(t,e)})},t.getSelectedRows=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1];return arguments[2].map(function(n){return(0,a.getRowByRowId)(e,t,n)}).filter(function(e){return!!e})}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t){var n={};for(var r in e)t.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}Object.defineProperty(t,"__esModule",{value:!0});var a=n(0),i=r(a),l=n(1),u=r(l),s=n(3),c=r(s),f=function(e){var t=e.renderContent,n=e.selectRow,r=e.expandRow,a=e.cellEl,l=o(e,["renderContent","selectRow","expandRow","cellEl"]),u=function(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:c.default.INDICATOR_POSITION_LEFT)===c.default.INDICATOR_POSITION_LEFT},s=t()||[];return n&&!0!==n.hideSelectColumn&&(u(n.selectColumnPosition)?s.unshift(i.default.createElement(a,{key:"selection"})):s.push(i.default.createElement(a,{key:"selection"}))),r.showExpandColumn&&(u(r.expandColumnPosition)?s.unshift(i.default.createElement(a,{key:"expansion"})):s.push(i.default.createElement(a,{key:"expansion"}))),i.default.createElement("tr",l,s)};f.propTypes={renderContent:u.default.func.isRequired,cellEl:u.default.string.isRequired,selectRow:u.default.object,expandRow:u.default.object},t.default=f},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var l=Object.assign||function(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:{},n=l({},t);return Object.keys(t).forEach(function(r){c.default.contains(p,r)&&(n[r]=e.createDefaultEventHandler(t[r]))}),n}}]),t}(e)}},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&this._events[e].length>o&&(this._events[e].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[e].length),"function"==typeof console.trace&&console.trace()),this},n.prototype.on=n.prototype.addListener,n.prototype.once=function(e,t){function n(){this.removeListener(e,n),o||(o=!0,t.apply(this,arguments))}if(!r(t))throw TypeError("listener must be a function");var o=!1;return n.listener=t,this.on(e,n),this},n.prototype.removeListener=function(e,t){var n,o,i,l;if(!r(t))throw TypeError("listener must be a function");if(!this._events||!this._events[e])return this;if(n=this._events[e],i=n.length,o=-1,n===t||r(n.listener)&&n.listener===t)delete this._events[e],this._events.removeListener&&this.emit("removeListener",e,t);else if(a(n)){for(l=i;l-- >0;)if(n[l]===t||n[l].listener&&n[l].listener===t){o=l;break}if(o<0)return this;1===n.length?(n.length=0,delete this._events[e]):n.splice(o,1),this._events.removeListener&&this.emit("removeListener",e,t)}return this},n.prototype.removeAllListeners=function(e){var t,n;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[e]&&delete this._events[e],this;if(0===arguments.length){for(t in this._events)"removeListener"!==t&&this.removeAllListeners(t);return this.removeAllListeners("removeListener"),this._events={},this}if(n=this._events[e],r(n))this.removeListener(e,n);else if(n)for(;n.length;)this.removeListener(e,n[n.length-1]);return delete this._events[e],this},n.prototype.listeners=function(e){return this._events&&this._events[e]?r(this._events[e])?[this._events[e]]:this._events[e].slice():[]},n.prototype.listenerCount=function(e){if(this._events){var t=this._events[e];if(r(t))return 1;if(t)return t.length}return 0},n.listenerCount=function(e,t){return e.listenerCount(t)}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=n(27),a=r(o),i=n(71),l=r(i);t.default=(0,l.default)(a.default)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function l(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var u=function(){function e(e,t){for(var n=0;n0,A=y&&c.default.createElement(E.default,{bootstrap4:l},y);return c.default.createElement("div",{className:k},c.default.createElement("table",{id:a,className:I},A,c.default.createElement(v.default,{columns:t,className:this.props.headerClasses,wrapperClasses:this.props.headerWrapperClasses,sortField:this.props.sortField,sortOrder:this.props.sortOrder,onSort:this.props.onSort,globalSortCaret:this.props.sort&&this.props.sort.sortCaret,onFilter:this.props.onFilter,currFilters:this.props.currFilters,onExternalFilter:this.props.onExternalFilter,selectRow:w,expandRow:S,filterPosition:T}),F&&T!==j.default.FILTERS_POSITION_INLINE&&c.default.createElement(m.default,{columns:t,className:this.props.filtersClasses,onSort:this.props.onSort,onFilter:this.props.onFilter,currFilters:this.props.currFilters,filterPosition:this.props.filterPosition,onExternalFilter:this.props.onExternalFilter,selectRow:w,expandRow:S}),c.default.createElement(_.default,{className:this.props.bodyClasses,data:this.getData(),keyField:n,tabIndexCell:r,columns:t,isEmpty:this.isEmpty(),visibleColumnSize:this.visibleColumnSize(),noDataIndication:p,cellEdit:R,selectRow:w,expandRow:S,rowStyle:b,rowClasses:g,rowEvents:x}),N&&c.default.createElement(C.default,{data:this.getData(),columns:t,selectRow:w,expandRow:S,className:this.props.footerClasses})))}}]),t}((0,S.default)(s.Component));k.propTypes={keyField:d.default.string.isRequired,data:d.default.array.isRequired,columns:d.default.array.isRequired,bootstrap4:d.default.bool,remote:d.default.oneOfType([d.default.bool,d.default.shape({pagination:d.default.bool})]),noDataIndication:d.default.oneOfType([d.default.node,d.default.func]),striped:d.default.bool,bordered:d.default.bool,hover:d.default.bool,tabIndexCell:d.default.bool,id:d.default.string,classes:d.default.string,headerClasses:d.default.string,bodyClasses:d.default.string,wrapperClasses:d.default.string,headerWrapperClasses:d.default.string,condensed:d.default.bool,caption:d.default.oneOfType([d.default.node,d.default.string]),pagination:d.default.object,filter:d.default.object,cellEdit:d.default.object,selectRow:d.default.shape({mode:d.default.oneOf([j.default.ROW_SELECT_SINGLE,j.default.ROW_SELECT_MULTIPLE,j.default.ROW_SELECT_DISABLED]).isRequired,clickToSelect:d.default.bool,clickToExpand:d.default.bool,clickToEdit:d.default.bool,hideSelectAll:d.default.bool,onSelect:d.default.func,onSelectAll:d.default.func,style:d.default.oneOfType([d.default.object,d.default.func]),classes:d.default.oneOfType([d.default.string,d.default.func]),nonSelectable:d.default.array,nonSelectableStyle:d.default.oneOfType([d.default.string,d.default.func]),nonSelectableClasses:d.default.oneOfType([d.default.string,d.default.func]),bgColor:d.default.oneOfType([d.default.string,d.default.func]),hideSelectColumn:d.default.bool,selectionRenderer:d.default.func,selectionHeaderRenderer:d.default.func,headerColumnStyle:d.default.oneOfType([d.default.object,d.default.func]),selectColumnStyle:d.default.oneOfType([d.default.object,d.default.func]),selectColumnPosition:d.default.oneOf([j.default.INDICATOR_POSITION_LEFT,j.default.INDICATOR_POSITION_RIGHT])}),expandRow:d.default.shape({renderer:d.default.func,expanded:d.default.array,onExpand:d.default.func,onExpandAll:d.default.func,nonExpandable:d.default.array,showExpandColumn:d.default.bool,onlyOneExpanding:d.default.bool,expandByColumnOnly:d.default.bool,expandColumnRenderer:d.default.func,expandHeaderColumnRenderer:d.default.func,expandColumnPosition:d.default.oneOf([j.default.INDICATOR_POSITION_LEFT,j.default.INDICATOR_POSITION_RIGHT]),className:d.default.oneOfType([d.default.string,d.default.func]),parentClassName:d.default.oneOfType([d.default.string,d.default.func])}),rowStyle:d.default.oneOfType([d.default.object,d.default.func]),rowEvents:d.default.object,rowClasses:d.default.oneOfType([d.default.string,d.default.func]),filtersClasses:d.default.string,filterPosition:d.default.oneOf([j.default.FILTERS_POSITION_TOP,j.default.FILTERS_POSITION_INLINE,j.default.FILTERS_POSITION_BOTTOM]),footerClasses:d.default.string,defaultSorted:d.default.arrayOf(d.default.shape({dataField:d.default.string.isRequired,order:d.default.oneOf([j.default.SORT_DESC,j.default.SORT_ASC]).isRequired})),sort:d.default.shape({dataField:d.default.string,order:d.default.oneOf([j.default.SORT_DESC,j.default.SORT_ASC]),sortFunc:d.default.func,sortCaret:d.default.func}),defaultSortDirection:d.default.oneOf([j.default.SORT_DESC,j.default.SORT_ASC]),overlay:d.default.func,onTableChange:d.default.func,onSort:d.default.func,onFilter:d.default.func,onExternalFilter:d.default.func,onDataSizeChange:d.default.func,search:d.default.shape({searchText:d.default.string,searchContext:d.default.func}),setDependencyModules:d.default.func},k.defaultProps={bootstrap4:!1,remote:!1,striped:!1,bordered:!0,hover:!1,condensed:!1,noDataIndication:null,selectRow:{mode:j.default.ROW_SELECT_DISABLED,selected:[],hideSelectColumn:!0},expandRow:{renderer:void 0,expanded:[],nonExpandable:[]},cellEdit:{mode:null,nonEditableRows:[]},filterPosition:j.default.FILTERS_POSITION_INLINE},t.default=k},function(e,t,n){"use strict";function r(){}function o(){}var a=n(29);o.resetWarningCache=r,e.exports=function(){function e(e,t,n,r,o,i){if(i!==a){var l=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw l.name="Invariant Violation",l}}function t(){return e}e.isRequired=e;var n={array:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:o,resetWarningCache:r};return n.PropTypes=n,n}},function(e,t,n){"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=n(0),a=r(o),i=n(1),l=r(i),u=n(31),s=r(u),c=n(37),f=r(c),d=n(38),p=r(d),h=n(39),y=r(h),v=n(44),b=r(v),m=n(3),g=r(m),E=function(e){var t=e.className,n=e.columns,r=e.onSort,o=e.onFilter,i=e.sortField,l=e.sortOrder,u=e.selectRow,c=e.expandRow,d=e.currFilters,h=e.onExternalFilter,v=e.filterPosition,m=e.globalSortCaret,E=e.wrapperClasses,O=function(){return null},_=function(){return null};c.showExpandColumn&&(_=(0,b.default)(p.default)),u&&(O=(0,y.default)(f.default));var x=function(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:g.default.INDICATOR_POSITION_LEFT)===g.default.INDICATOR_POSITION_LEFT},C=[n.map(function(e,t){var n=e.dataField===i,u=e.dataField===i;return a.default.createElement(s.default,{index:t,key:e.dataField,column:e,onSort:r,sorting:n,sortOrder:l,globalSortCaret:m,isLastSorting:u,onFilter:o,currFilters:d,onExternalFilter:h,filterPosition:v})})];return u.hideSelectColumn||(x(u.selectColumnPosition)?C.unshift(a.default.createElement(O,{key:"selection"})):C.push(a.default.createElement(O,{key:"selection"}))),c.showExpandColumn&&(x(c.expandColumnPosition)?C.unshift(a.default.createElement(_,{key:"expansion"})):C.push(a.default.createElement(_,{key:"expansion"}))),a.default.createElement("thead",{className:E},a.default.createElement("tr",{className:t},C))};E.propTypes={columns:l.default.array.isRequired,onSort:l.default.func,onFilter:l.default.func,sortField:l.default.string,sortOrder:l.default.string,selectRow:l.default.object,currFilters:l.default.object,onExternalFilter:l.default.func,globalSortCaret:l.default.func,className:l.default.string,wrapperClasses:l.default.string,expandRow:l.default.object,filterPosition:l.default.oneOf([g.default.FILTERS_POSITION_TOP,g.default.FILTERS_POSITION_INLINE,g.default.FILTERS_POSITION_BOTTOM])},t.default=E},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var l=Object.assign||function(e){for(var t=1;t=0&&t<=R};m.each=m.forEach=function(e,t,n){t=E(t,n);var r,o;if(T(e))for(r=0,o=e.length;r0?0:i-1;for(o||(r=t[a?a[l]:l],l+=e);l>=0&&l=3;return t(e,E(n,o,4),r,a)}};m.reduce=m.foldl=m.inject=P(1),m.reduceRight=m.foldr=P(-1),m.find=m.detect=function(e,t,n){var r=T(e)?m.findIndex:m.findKey,o=r(e,t,n);if(void 0!==o&&-1!==o)return e[o]},m.filter=m.select=function(e,t,n){var r=[];return t=O(t,n),m.each(e,function(e,n,o){t(e,n,o)&&r.push(e)}),r},m.reject=function(e,t,n){return m.filter(e,m.negate(O(t)),n)},m.every=m.all=function(e,t,n){t=O(t,n);for(var r=!T(e)&&m.keys(e),o=(r||e).length,a=0;a=0},m.invoke=_(function(e,t,n){var r,o;return m.isFunction(t)?o=t:m.isArray(t)&&(r=t.slice(0,-1),t=t[t.length-1]),m.map(e,function(e){var a=o;if(!a){if(r&&r.length&&(e=S(e,r)),null==e)return;a=e[t]}return null==a?a:a.apply(e,n)})}),m.pluck=function(e,t){return m.map(e,m.property(t))},m.where=function(e,t){return m.filter(e,m.matcher(t))},m.findWhere=function(e,t){return m.find(e,m.matcher(t))},m.max=function(e,t,n){var r,o,a=-1/0,i=-1/0;if(null==t||"number"==typeof t&&"object"!=typeof e[0]&&null!=e){e=T(e)?e:m.values(e);for(var l=0,u=e.length;la&&(a=r)}else t=O(t,n),m.each(e,function(e,n,r){((o=t(e,n,r))>i||o===-1/0&&a===-1/0)&&(a=e,i=o)});return a},m.min=function(e,t,n){var r,o,a=1/0,i=1/0;if(null==t||"number"==typeof t&&"object"!=typeof e[0]&&null!=e){e=T(e)?e:m.values(e);for(var l=0,u=e.length;lr||void 0===n)return 1;if(n0?0:o-1;a>=0&&a0?i=a>=0?a:Math.max(a+l,i):l=a>=0?Math.min(a+1,l):a+l+1;else if(n&&a&&l)return a=n(r,o),r[a]===o?a:-1;if(o!==o)return a=t(f.call(r,i,l),m.isNaN),a>=0?a+i:-1;for(a=e>0?i:l-1;a>=0&&at?(r&&(clearTimeout(r),r=null),l=s,i=e.apply(o,a),r||(o=a=null)):r||!1===n.trailing||(r=setTimeout(u,c)),i};return s.cancel=function(){clearTimeout(r),l=0,r=o=a=null},s},m.debounce=function(e,t,n){var r,o,a=function(t,n){r=null,n&&(o=e.apply(t,n))},i=_(function(i){if(r&&clearTimeout(r),n){var l=!r;r=setTimeout(a,t),l&&(o=e.apply(this,i))}else r=m.delay(a,t,this,i);return o});return i.cancel=function(){clearTimeout(r),r=null},i},m.wrap=function(e,t){return m.partial(t,e)},m.negate=function(e){return function(){return!e.apply(this,arguments)}},m.compose=function(){var e=arguments,t=e.length-1;return function(){for(var n=t,r=e[t].apply(this,arguments);n--;)r=e[n].call(this,r);return r}},m.after=function(e,t){return function(){if(--e<1)return t.apply(this,arguments)}},m.before=function(e,t){var n;return function(){return--e>0&&(n=t.apply(this,arguments)),e<=1&&(t=null),n}},m.once=m.partial(m.before,2),m.restArguments=_;var D=!{toString:null}.propertyIsEnumerable("toString"),L=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"],B=function(e,t){var n=L.length,r=e.constructor,o=m.isFunction(r)&&r.prototype||u,a="constructor";for(w(e,a)&&!m.contains(t,a)&&t.push(a);n--;)(a=L[n])in e&&e[a]!==o[a]&&!m.contains(t,a)&&t.push(a)};m.keys=function(e){if(!m.isObject(e))return[];if(y)return y(e);var t=[];for(var n in e)w(e,n)&&t.push(n);return D&&B(e,t),t},m.allKeys=function(e){if(!m.isObject(e))return[];var t=[];for(var n in e)t.push(n);return D&&B(e,t),t},m.values=function(e){for(var t=m.keys(e),n=t.length,r=Array(n),o=0;o1&&(r=E(r,t[1])),t=m.allKeys(e)):(r=q,t=F(t,!1,!1),e=Object(e));for(var o=0,a=t.length;o1&&(n=t[1])):(t=m.map(F(t,!1,!1),String),r=function(e,n){return!m.contains(t,n)}),m.pick(e,r,n)}),m.defaults=U(m.allKeys,!0),m.create=function(e,t){var n=x(e);return t&&m.extendOwn(n,t),n},m.clone=function(e){return m.isObject(e)?m.isArray(e)?e.slice():m.extend({},e):e},m.tap=function(e,t){return t(e),e},m.isMatch=function(e,t){var n=m.keys(t),r=n.length;if(null==e)return!r;for(var o=Object(e),a=0;a":">",'"':""","'":"'","`":"`"},V=m.invert(z),G=function(e){var t=function(t){return e[t]},n="(?:"+m.keys(e).join("|")+")",r=RegExp(n),o=RegExp(n,"g");return function(e){return e=null==e?"":""+e,r.test(e)?e.replace(o,t):e}};m.escape=G(z),m.unescape=G(V),m.result=function(e,t,n){m.isArray(t)||(t=[t]);var r=t.length;if(!r)return m.isFunction(n)?n.call(e):n;for(var o=0;o/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var X=/(.)^/,$={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},J=/\\|'|\r|\n|\u2028|\u2029/g,Q=function(e){return"\\"+$[e]};m.template=function(e,t,n){!t&&n&&(t=n),t=m.defaults({},t,m.templateSettings);var r=RegExp([(t.escape||X).source,(t.interpolate||X).source,(t.evaluate||X).source].join("|")+"|$","g"),o=0,a="__p+='";e.replace(r,function(t,n,r,i,l){return a+=e.slice(o,l).replace(J,Q),o=l+t.length,n?a+="'+\n((__t=("+n+"))==null?'':_.escape(__t))+\n'":r?a+="'+\n((__t=("+r+"))==null?'':__t)+\n'":i&&(a+="';\n"+i+"\n__p+='"),t}),a+="';\n",t.variable||(a="with(obj||{}){\n"+a+"}\n"),a="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+a+"return __p;\n";var i;try{i=new Function(t.variable||"obj","_",a)}catch(e){throw e.source=a,e}var l=function(e){return i.call(this,e,m)};return l.source="function("+(t.variable||"obj")+"){\n"+a+"}",l},m.chain=function(e){var t=m(e);return t._chain=!0,t};var Z=function(e,t){return e._chain?m(t).chain():t};m.mixin=function(e){return m.each(m.functions(e),function(t){var n=m[t]=e[t];m.prototype[t]=function(){var e=[this._wrapped];return c.apply(e,arguments),Z(this,n.apply(m,e))}}),m},m.mixin(m),m.each(["pop","push","reverse","shift","sort","splice","unshift"],function(e){var t=l[e];m.prototype[e]=function(){var n=this._wrapped;return t.apply(n,arguments),"shift"!==e&&"splice"!==e||0!==n.length||delete n[0],Z(this,n)}}),m.each(["concat","join","slice"],function(e){var t=l[e];m.prototype[e]=function(){return Z(this,t.apply(this._wrapped,arguments))}}),m.prototype.value=function(){return this._wrapped},m.prototype.valueOf=m.prototype.toJSON=m.prototype.value,m.prototype.toString=function(){return String(this._wrapped)},r=[],void 0!==(o=function(){return m}.apply(t,r))&&(n.exports=o)}()}).call(t,n(35),n(36)(e))},function(e,t){var n;n=function(){return this}();try{n=n||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(n=window)}e.exports=n},function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0}),t.CheckBox=void 0;var l=Object.assign||function(e){for(var t=1;t2&&void 0!==arguments[2]?arguments[2]:[],o=0;o2&&void 0!==arguments[2]?arguments[2]:[];return 0===n.length?e.map(function(e){return a.default.get(e,t)}):e.filter(function(e){return!a.default.contains(n,a.default.get(e,t))}).map(function(e){return a.default.get(e,t)})},t.getExpandedRows=function(e,t,n){return n.map(function(n){return(0,i.getRowByRowId)(e,t,n)})}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.editCell=void 0;var r=n(2),o=function(e){return e&&e.__esModule?e:{default:e}}(r),a=n(6);t.editCell=function(e,t,n,r,i){var l=(0,a.getRowByRowId)(e,t,n);l&&o.default.set(l,r,i)}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tt?-1:e2&&void 0!==arguments[2]?arguments[2]:s.default.SORT_DESC;return r&&e.dataField===r.dataField?n===s.default.SORT_DESC?s.default.SORT_ASC:s.default.SORT_DESC:o}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.typeConvert=void 0;var r=n(3),o=function(e){return e&&e.__esModule?e:{default:e}}(r);t.typeConvert=function(e,t){return e===o.default.TYPE_STRING?String(t):e===o.default.TYPE_NUMBER?Number(t):e===o.default.TYPE_BOOLEAN?"boolean"==typeof t?t:"true"===t:e===o.default.TYPE_DATE?new Date(t):t}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=n(0),a=r(o),i=n(12),l=r(i);t.default=function(e){return function(){return a.default.createElement(l.default.Consumer,null,function(t){return a.default.createElement(e,t)})}}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=n(0),a=r(o),i=n(1),l=r(i),u=n(46),s=r(u),c=n(3),f=r(c),d=n(14),p=r(d),h=function(e){function t(){var e=[],t=!1;return n.forEach(function(n,i){e.push(a.default.createElement(s.default,{index:i,key:n.dataField,column:n,currFilters:o,onExternalFilter:l,onFilter:r})),(n.filterRenderer||n.filter)&&(t||(t=!0))}),e}var n=e.columns,r=e.onFilter,o=e.currFilters,i=e.filterPosition,l=e.onExternalFilter,u=e.className,c=e.selectRow,d=e.expandRow;return a.default.createElement("tbody",{className:u,style:{display:i===f.default.FILTERS_POSITION_TOP?"table-header-group":"table-footer-group"}},a.default.createElement(p.default,{renderContent:t,selectRow:c,expandRow:d,cellEl:"td"}))};h.propTypes={columns:l.default.array.isRequired,onFilter:l.default.func,filterPosition:l.default.oneOf([f.default.FILTERS_POSITION_TOP,f.default.FILTERS_POSITION_INLINE,f.default.FILTERS_POSITION_BOTTOM]),currFilters:l.default.object,onExternalFilter:l.default.func,className:l.default.string,selectRow:l.default.object,expandRow:l.default.object},h.defaultProps={position:f.default.FILTERS_POSITION_TOP},t.default=h},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=Object.assign||function(e){for(var t=1;t=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function l(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var u=Object.assign||function(e){for(var t=1;t=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function l(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var u=Object.assign||function(e){for(var t=1;t=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function l(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var u=Object.assign||function(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:R.default.INDICATOR_POSITION_LEFT)===R.default.INDICATOR_POSITION_LEFT}},{key:"render",value:function(){var e=this.props,t=e.row,n=e.columns,r=e.keyField,a=e.rowIndex,i=e.style,l=e.className,s=e.attrs,c=e.selectRow,d=e.expandRow,p=e.expanded,h=e.expandable,v=e.selected,m=e.selectable,E=e.visibleColumnSize,O=e.tabIndexCell,_=o(e,["row","columns","keyField","rowIndex","style","className","attrs","selectRow","expandRow","expanded","expandable","selected","selectable","visibleColumnSize","tabIndexCell"]),x=y.default.get(t,r),C=c.hideSelectColumn,S=c.selectColumnPosition,R=c.clickToSelect,j=d.showExpandColumn,T=d.expandColumnPosition,P=this.delegate(u({},s));(R||d.renderer)&&(P.onClick=this.createClickEventHandler(P.onClick));var k=a*E+1,I=[f.default.createElement(w.default,u({key:"row",row:t,columns:n,keyField:r,rowIndex:a,shouldUpdate:this.shouldUpdateRowContent,tabIndexStart:O?k:-1},_))];if(!C){var F=f.default.createElement(g.default,u({},c,{key:"selection-cell",rowKey:x,rowIndex:a,selected:v,disabled:!m,tabIndex:O?k++:-1}));this.isRenderFunctionColumnInLeft(S)?I.unshift(F):I.push(F)}if(j){var N=f.default.createElement(b.default,u({},d,{key:"expand-cell",rowKey:x,rowIndex:a,expanded:p,expandable:h,tabIndex:O?k++:-1}));this.isRenderFunctionColumnInLeft(T)?I.unshift(N):I.push(N)}return f.default.createElement("tr",u({style:i,className:l},P),I)}}]),t}((0,O.default)((0,x.default)(f.default.Component)));j.propTypes={attrs:p.default.object,style:p.default.object},j.defaultProps={attrs:{},style:{}},t.default=j},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var l=Object.assign||function(e){for(var t=1;t=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}Object.defineProperty(t,"__esModule",{value:!0});var a=Object.assign||function(e){for(var t=1;t0&&void 0!==arguments[0])||arguments[0],t=void 0;if(this.props.columnToggle&&this.props.columnToggle.toggles){var n=this.props.columnToggle.toggles;t=Object.keys(n).filter(function(e){return n[e]}).length}else t=this.props.columns.filter(function(e){return!e.hidden}).length;return e?(this.props.selectRow&&!this.props.selectRow.hideSelectColumn&&(t+=1),this.props.expandRow&&this.props.expandRow.showExpandColumn&&(t+=1),t):t}}]),t}(e)}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var l=Object.assign||function(e){for(var t=1;t0&&(t.SortContext=(0,E.default)(T.default,t.isRemoteSort,t.handleRemoteSortChange)),(e.columnToggle||e.columns.filter(function(e){return e.hidden}).length>0)&&(t.ColumnManagementContext=(0,m.default)()),e.selectRow&&(t.SelectionContext=_.default),e.expandRow&&(t.RowExpandContext=C.default),e.cellEdit&&e.cellEdit.createContext&&(t.CellEditContext=e.cellEdit.createContext(h.default,T.default,t.isRemoteCellEdit,t.handleRemoteCellChange)),e.filter&&(t.FilterContext=e.filter.createContext(h.default,t.isRemoteFiltering,t.handleRemoteFilterChange)),e.pagination&&(t.PaginationContext=e.pagination.createContext()),e.search&&e.search.searchContext&&(t.SearchContext=e.search.searchContext(h.default,t.isRemoteSearch,t.handleRemoteSearchChange)),e.setDependencyModules&&e.setDependencyModules(h.default),e.setPaginationRemoteEmitter&&e.setPaginationRemoteEmitter(t.remoteEmitter),t}return i(n,t),u(n,[{key:"UNSAFE_componentWillReceiveProps",value:function(e){e.columns.filter(function(e){return e.sort}).length<=0?this.SortContext=null:this.SortContext||(this.SortContext=(0,E.default)(T.default,this.isRemoteSort,this.handleRemoteSortChange)),!e.pagination&&this.props.pagination&&(this.PaginationContext=null),e.pagination&&!this.props.pagination&&(this.PaginationContext=e.pagination.createContext(this.isRemotePagination,this.handleRemotePageChange)),!e.cellEdit&&this.props.cellEdit&&(this.CellEditContext=null),e.cellEdit&&!this.props.cellEdit&&(this.CellEditContext=e.cellEdit.createContext(h.default,T.default,this.isRemoteCellEdit,this.handleRemoteCellChange))}},{key:"renderBase",value:function(){var t=this;return function(n,r,o,a,i,u){return c.default.createElement(e,l({ref:function(e){return t.table=e}},t.props,a,r,o,i,u,{data:n.getData(r,o,a,i)}))}}},{key:"renderWithColumnManagementCtx",value:function(e,t){var n=this;return function(r,o,a,i,u){return c.default.createElement(n.ColumnManagementContext.Provider,l({},t,{toggles:n.props.columnToggle?n.props.columnToggle.toggles:null}),c.default.createElement(n.ColumnManagementContext.Consumer,null,function(t){return e(r,o,a,i,u,t)}))}}},{key:"renderWithSelectionCtx",value:function(e,t){var n=this;return function(r,o,a,i,u){return c.default.createElement(n.SelectionContext.Provider,l({},t,{ref:function(e){return n.selectionContext=e},selectRow:n.props.selectRow,data:r.getData(o,a,i,u)}),e(r,o,a,i,u))}}},{key:"renderWithRowExpandCtx",value:function(e,t){var n=this;return function(r,o,a,i,u){return c.default.createElement(n.RowExpandContext.Provider,l({},t,{ref:function(e){return n.rowExpandContext=e},expandRow:n.props.expandRow,data:r.getData(o,a,i,u)}),e(r,o,a,i,u))}}},{key:"renderWithPaginationCtx",value:function(e){var t=this;return function(n,r,o,a){return c.default.createElement(t.PaginationContext.Provider,{ref:function(e){return t.paginationContext=e},pagination:t.props.pagination,data:n.getData(r,o,a),bootstrap4:t.props.bootstrap4,isRemotePagination:t.isRemotePagination,remoteEmitter:t.remoteEmitter,onDataSizeChange:t.props.onDataSizeChange,tableId:t.props.id},c.default.createElement(t.PaginationContext.Consumer,null,function(t){return e(n,r,o,a,t)}))}}},{key:"renderWithSortCtx",value:function(e,t){var n=this;return function(r,o,a){return c.default.createElement(n.SortContext.Provider,l({},t,{ref:function(e){return n.sortContext=e},defaultSorted:n.props.defaultSorted,defaultSortDirection:n.props.defaultSortDirection,sort:n.props.sort,data:r.getData(o,a)}),c.default.createElement(n.SortContext.Consumer,null,function(t){return e(r,o,a,t)}))}}},{key:"renderWithSearchCtx",value:function(e,t){var n=this;return function(r,o){return c.default.createElement(n.SearchContext.Provider,l({},t,{ref:function(e){return n.searchContext=e},data:r.getData(o),searchText:n.props.search.searchText,dataChangeListener:n.props.dataChangeListener}),c.default.createElement(n.SearchContext.Consumer,null,function(t){return e(r,o,t)}))}}},{key:"renderWithFilterCtx",value:function(e,t){var n=this;return function(r){return c.default.createElement(n.FilterContext.Provider,l({},t,{ref:function(e){return n.filterContext=e},data:r.getData(),filter:n.props.filter.options||{},dataChangeListener:n.props.dataChangeListener}),c.default.createElement(n.FilterContext.Consumer,null,function(t){return e(r,t)}))}}},{key:"renderWithCellEditCtx",value:function(e,t){var n=this;return function(r){return c.default.createElement(n.CellEditContext.Provider,l({},t,{ref:function(e){return n.cellEditContext=e},selectRow:n.props.selectRow,cellEdit:n.props.cellEdit,data:r.getData()}),e(r))}}},{key:"render",value:function(){var e=this.props,t=e.keyField,n=e.columns,r=e.bootstrap4,o={keyField:t,columns:n},a=this.renderBase();return this.ColumnManagementContext&&(a=this.renderWithColumnManagementCtx(a,o)),this.SelectionContext&&(a=this.renderWithSelectionCtx(a,o)),this.RowExpandContext&&(a=this.renderWithRowExpandCtx(a,o)),this.PaginationContext&&(a=this.renderWithPaginationCtx(a,o)),this.SortContext&&(a=this.renderWithSortCtx(a,o)),this.SearchContext&&(a=this.renderWithSearchCtx(a,o)),this.FilterContext&&(a=this.renderWithFilterCtx(a,o)),this.CellEditContext&&(a=this.renderWithCellEditCtx(a,o)),c.default.createElement(R.BootstrapContext.Provider,{value:{bootstrap4:r}},c.default.createElement(this.DataContext.Provider,l({},o,{data:this.props.data}),c.default.createElement(this.DataContext.Consumer,null,a)))}}]),n}((0,S.default)(s.Component))};t.default=P},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var l=function(){function e(e,t){for(var n=0;n0?(n=i[0].order||l,r=t.initSort(i[0].dataField,n)):u&&u.dataField&&u.order&&(n=u.order,r=t.initSort(u.dataField,n)),t.state={sortOrder:n,sortColumn:r},t}return i(d,s),u(d,[{key:"componentDidMount",value:function(){var e=this.state,r=e.sortOrder,o=e.sortColumn;t()&&r&&o&&n(o.dataField,r)}},{key:"UNSAFE_componentWillReceiveProps",value:function(e){var t=e.sort,n=e.columns;t&&t.dataField&&t.order&&this.setState({sortOrder:t.order,sortColumn:n.find(function(e){return e.dataField===t.dataField})})}},{key:"initSort",value:function(e,t){var n=void 0,r=this.props.columns,o=r.filter(function(t){return t.dataField===e});return o.length>0&&(n=o[0],n.onSort&&n.onSort(e,t)),n}},{key:"render",value:function(){var n=this.props.data,o=this.props.sort,a=this.state,i=a.sortOrder,u=a.sortColumn;if(!t()&&u){var s=u.sortFunc?u.sortFunc:o&&o.sortFunc;n=e.sort(n,i,l({},u,{sortFunc:s}))}return c.default.createElement(r.Provider,{value:{data:n,sortOrder:i,onSort:this.handleSort,sortField:u?u.dataField:null}},this.props.children)}}]),d}(c.default.Component);s.propTypes={data:d.default.array.isRequired,columns:d.default.array.isRequired,children:d.default.node.isRequired,defaultSorted:d.default.arrayOf(d.default.shape({dataField:d.default.string.isRequired,order:d.default.oneOf([h.default.SORT_DESC,h.default.SORT_ASC]).isRequired})),sort:d.default.shape({dataField:d.default.string,order:d.default.oneOf([h.default.SORT_DESC,h.default.SORT_ASC]),sortFunc:d.default.func}),defaultSortDirection:d.default.oneOf([h.default.SORT_DESC,h.default.SORT_ASC])};var f=function(){var r=this;this.handleSort=function(o){var a=e.nextOrder(o,r.state,r.props.defaultSortDirection);o.onSort&&o.onSort(o.dataField,a),t()&&n(o.dataField,a),r.setState(function(){return{sortOrder:a,sortColumn:o}})}};return{Provider:s,Consumer:r.Consumer}}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var l=Object.assign||function(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:{},t=void 0,r=void 0,o=void 0,a=void 0,i=void 0,u={};return n.sortContext&&(t=n.sortContext.state.sortOrder,r=n.sortContext.state.sortColumn?n.sortContext.state.sortColumn.dataField:null),n.filterContext&&(u=n.filterContext.currFilters),n.paginationContext&&(o=n.paginationContext.currPage,a=n.paginationContext.currSizePerPage),n.searchContext&&(i=n.props.search.searchText),l({sortOrder:t,sortField:r,filters:u,page:o,sizePerPage:a,searchText:i},e,{data:n.props.data})},n.isRemoteSearch=function(){var e=n.props.remote;return!0===e||f.default.isObject(e)&&e.search||n.isRemotePagination()},n.isRemotePagination=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=n.props.remote;return e.result=!0===t||f.default.isObject(t)&&t.pagination,e.result},n.isRemoteFiltering=function(){var e=n.props.remote;return!0===e||f.default.isObject(e)&&e.filter||n.isRemotePagination()},n.isRemoteSort=function(){var e=n.props.remote;return!0===e||f.default.isObject(e)&&e.sort||n.isRemotePagination()},n.isRemoteCellEdit=function(){var e=n.props.remote;return!0===e||f.default.isObject(e)&&e.cellEdit},n.handleRemotePageChange=function(e,t){n.props.onTableChange("pagination",n.getNewestState({page:e,sizePerPage:t}))},n.handleRemoteFilterChange=function(e){var t={filters:e};if(n.isRemotePagination()){var r=n.props.pagination.options||{};t.page=f.default.isDefined(r.pageStartIndex)?r.pageStartIndex:1}n.props.onTableChange("filter",n.getNewestState(t))},n.handleRemoteSortChange=function(e,t){n.props.onTableChange("sort",n.getNewestState({sortField:e,sortOrder:t}))},n.handleRemoteCellChange=function(e,t,r){var o={rowId:e,dataField:t,newValue:r};n.props.onTableChange("cellEdit",n.getNewestState({cellEdit:o}))},n.handleRemoteSearchChange=function(e){n.props.onTableChange("search",n.getNewestState({searchText:e}))},n.remoteEmitter=new s.default,n.remoteEmitter.on("paginationChange",n.handleRemotePageChange),n.remoteEmitter.on("isRemotePagination",n.isRemotePagination),n}return i(t,e),t}(e)}}])}); \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/dist/react-bootstrap-table2.css b/global-scoreboard/dependencies/react-bootstrap-table-next/dist/react-bootstrap-table2.css deleted file mode 100644 index 56d8bda9..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/dist/react-bootstrap-table2.css +++ /dev/null @@ -1,129 +0,0 @@ -.react-bootstrap-table table { - table-layout: fixed; } - -.react-bootstrap-table th.sortable { - cursor: pointer; } - -.react-bootstrap-table th .order > .dropdown > .caret { - margin: 10px 0 10px 5px; - color: #cccccc; } - -.react-bootstrap-table th .order > .dropup > .caret { - margin: 10px 0; - color: #cccccc; } - -.react-bootstrap-table th > .react-bootstrap-table-sort-order > .caret { - margin: 10px 6.5px; } - -.react-bootstrap-table th .order-4:before { - margin-left: 3.5px; - content: "\2191"; - opacity: 0.4; } - -.react-bootstrap-table th .order-4:after { - content: "\2193"; - opacity: 0.4; } - -.react-bootstrap-table th .caret-4-asc:before { - margin-left: 3.5px; - content: "\2191"; } - -.react-bootstrap-table th .caret-4-asc:after { - content: "\2193"; - opacity: 0.4; } - -.react-bootstrap-table th .caret-4-desc:before { - margin-left: 3.5px; - content: "\2191"; - opacity: 0.4; } - -.react-bootstrap-table th .caret-4-desc:after { - content: "\2193"; } - -.react-bootstrap-table th[data-row-selection] { - width: 30px; } - -.react-bootstrap-table th > .selection-input-4, -.react-bootstrap-table td > .selection-input-4 { - margin: -4px; } - -.react-bootstrap-table td.react-bs-table-no-data { - text-align: center; } - -.react-bootstrap-table td.react-bootstrap-table-editing-cell .animated { - animation-fill-mode: both; } - -.react-bootstrap-table td.react-bootstrap-table-editing-cell .animated.bounceIn, -.react-bootstrap-table td.react-bootstrap-table-editing-cell .animated.bounceOut { - animation-duration: .75s; } - -.react-bootstrap-table td.react-bootstrap-table-editing-cell .animated.shake { - animation-duration: .3s; } - -@keyframes shake { - from, to { - transform: translate3d(0, 0, 0); } - 10%, 50%, 90% { - transform: translate3d(-10px, 0, 0); } - 30%, 70% { - transform: translate3d(10px, 0, 0); } } - -.react-bootstrap-table td.react-bootstrap-table-editing-cell .shake { - animation-name: shake; } - -@keyframes bounceIn { - from, 20%, 40%, 60%, 80%, to { - animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); } - 0% { - opacity: 0; - transform: scale3d(0.3, 0.3, 0.3); } - 20% { - transform: scale3d(1.1, 1.1, 1.1); } - 40% { - transform: scale3d(0.9, 0.9, 0.9); } - 60% { - opacity: 1; - transform: scale3d(1.03, 1.03, 1.03); } - 80% { - transform: scale3d(0.97, 0.97, 0.97); } - to { - opacity: 1; - transform: scale3d(1, 1, 1); } } - -.react-bootstrap-table td.react-bootstrap-table-editing-cell .bounceIn { - animation-name: bounceIn; } - -@keyframes bounceOut { - 20% { - transform: scale3d(0.9, 0.9, 0.9); } - 50%, 55% { - opacity: 1; - transform: scale3d(1.1, 1.1, 1.1); } - to { - opacity: 0; - transform: scale3d(0.3, 0.3, 0.3); } } - -.react-bootstrap-table td.react-bootstrap-table-editing-cell .bounceOut { - animation-name: bounceOut; } - -.react-bootstrap-table .reset-expansion-style { - padding: 0; } - -.react-bootstrap-table .row-expansion-style { - padding: 8px; } - -.react-bootstrap-table .row-expand-slide-appear { - max-height: 0; - overflow: hidden; } - -.react-bootstrap-table .row-expand-slide-appear-active { - max-height: 1000px; - transition: max-height 3s linear; } - -.react-bootstrap-table .row-expand-slide-exit { - max-height: 1000px; } - -.react-bootstrap-table .row-expand-slide-exit-active { - max-height: 0; - overflow: hidden; - transition: max-height 400ms cubic-bezier(0, 0.95, 0, 0.95); } diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/dist/react-bootstrap-table2.min.css b/global-scoreboard/dependencies/react-bootstrap-table-next/dist/react-bootstrap-table2.min.css deleted file mode 100644 index efd63a1c..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/dist/react-bootstrap-table2.min.css +++ /dev/null @@ -1 +0,0 @@ -.react-bootstrap-table table{table-layout:fixed}.react-bootstrap-table th.sortable{cursor:pointer}.react-bootstrap-table th .order>.dropdown>.caret{margin:10px 0 10px 5px;color:#ccc}.react-bootstrap-table th .order>.dropup>.caret{margin:10px 0;color:#ccc}.react-bootstrap-table th>.react-bootstrap-table-sort-order>.caret{margin:10px 6.5px}.react-bootstrap-table th .order-4:before{margin-left:3.5px;content:"\2191";opacity:.4}.react-bootstrap-table th .order-4:after{content:"\2193";opacity:.4}.react-bootstrap-table th .caret-4-asc:before{margin-left:3.5px;content:"\2191"}.react-bootstrap-table th .caret-4-asc:after{content:"\2193";opacity:.4}.react-bootstrap-table th .caret-4-desc:before{margin-left:3.5px;content:"\2191";opacity:.4}.react-bootstrap-table th .caret-4-desc:after{content:"\2193"}.react-bootstrap-table th[data-row-selection]{width:30px}.react-bootstrap-table td>.selection-input-4,.react-bootstrap-table th>.selection-input-4{margin:-4px}.react-bootstrap-table td.react-bs-table-no-data{text-align:center}.react-bootstrap-table td.react-bootstrap-table-editing-cell .animated{animation-fill-mode:both}.react-bootstrap-table td.react-bootstrap-table-editing-cell .animated.bounceIn,.react-bootstrap-table td.react-bootstrap-table-editing-cell .animated.bounceOut{animation-duration:.75s}.react-bootstrap-table td.react-bootstrap-table-editing-cell .animated.shake{animation-duration:.3s}@keyframes shake{from,to{transform:translate3d(0,0,0)}10%,50%,90%{transform:translate3d(-10px,0,0)}30%,70%{transform:translate3d(10px,0,0)}}.react-bootstrap-table td.react-bootstrap-table-editing-cell .shake{animation-name:shake}@keyframes bounceIn{20%,40%,60%,80%,from,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:scale3d(.3,.3,.3)}20%{transform:scale3d(1.1,1.1,1.1)}40%{transform:scale3d(.9,.9,.9)}60%{opacity:1;transform:scale3d(1.03,1.03,1.03)}80%{transform:scale3d(.97,.97,.97)}to{opacity:1;transform:scale3d(1,1,1)}}.react-bootstrap-table td.react-bootstrap-table-editing-cell .bounceIn{animation-name:bounceIn}@keyframes bounceOut{20%{transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;transform:scale3d(1.1,1.1,1.1)}to{opacity:0;transform:scale3d(.3,.3,.3)}}.react-bootstrap-table td.react-bootstrap-table-editing-cell .bounceOut{animation-name:bounceOut}.react-bootstrap-table .reset-expansion-style{padding:0}.react-bootstrap-table .row-expansion-style{padding:8px}.react-bootstrap-table .row-expand-slide-appear{max-height:0;overflow:hidden}.react-bootstrap-table .row-expand-slide-appear-active{max-height:1000px;transition:max-height 3s linear}.react-bootstrap-table .row-expand-slide-exit{max-height:1000px}.react-bootstrap-table .row-expand-slide-exit-active{max-height:0;overflow:hidden;transition:max-height .4s cubic-bezier(0,.95,0,.95)} \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/index.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/index.js deleted file mode 100644 index dffe24a2..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/index.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _bootstrapTable = require('./src/bootstrap-table'); - -var _bootstrapTable2 = _interopRequireDefault(_bootstrapTable); - -var _contexts = require('./src/contexts'); - -var _contexts2 = _interopRequireDefault(_contexts); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -exports.default = (0, _contexts2.default)(_bootstrapTable2.default); \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/body.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/body.js deleted file mode 100644 index db8506d9..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/body.js +++ /dev/null @@ -1,182 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = require('prop-types'); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _utils = require('./utils'); - -var _utils2 = _interopRequireDefault(_utils); - -var _simpleRow = require('./row/simple-row'); - -var _simpleRow2 = _interopRequireDefault(_simpleRow); - -var _aggregateRow = require('./row/aggregate-row'); - -var _aggregateRow2 = _interopRequireDefault(_aggregateRow); - -var _rowSection = require('./row/row-section'); - -var _rowSection2 = _interopRequireDefault(_rowSection); - -var _const = require('./const'); - -var _const2 = _interopRequireDefault(_const); - -var _rowConsumer = require('./row-selection/row-consumer'); - -var _rowConsumer2 = _interopRequireDefault(_rowConsumer); - -var _rowConsumer3 = require('./row-expand/row-consumer'); - -var _rowConsumer4 = _interopRequireDefault(_rowConsumer3); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint react/prop-types: 0 */ -/* eslint react/require-default-props: 0 */ - -var Body = function (_React$Component) { - _inherits(Body, _React$Component); - - function Body(props) { - _classCallCheck(this, Body); - - var _this = _possibleConstructorReturn(this, (Body.__proto__ || Object.getPrototypeOf(Body)).call(this, props)); - - var keyField = props.keyField, - cellEdit = props.cellEdit, - selectRow = props.selectRow, - expandRow = props.expandRow; - - // Construct Editing Cell Component - - if (cellEdit.createContext) { - _this.EditingCell = cellEdit.createEditingCell(_utils2.default, cellEdit.options.onStartEdit); - } - - // Construct Row Component - var RowComponent = _simpleRow2.default; - var selectRowEnabled = selectRow.mode !== _const2.default.ROW_SELECT_DISABLED; - var expandRowEnabled = !!expandRow.renderer; - - if (expandRowEnabled) { - RowComponent = (0, _rowConsumer4.default)(_aggregateRow2.default); - } - - if (selectRowEnabled) { - RowComponent = (0, _rowConsumer2.default)(expandRowEnabled ? RowComponent : _aggregateRow2.default); - } - - if (cellEdit.createContext) { - RowComponent = cellEdit.withRowLevelCellEdit(RowComponent, selectRowEnabled, keyField, _utils2.default); - } - _this.RowComponent = RowComponent; - return _this; - } - - _createClass(Body, [{ - key: 'render', - value: function render() { - var _this2 = this; - - var _props = this.props, - columns = _props.columns, - data = _props.data, - tabIndexCell = _props.tabIndexCell, - keyField = _props.keyField, - isEmpty = _props.isEmpty, - noDataIndication = _props.noDataIndication, - visibleColumnSize = _props.visibleColumnSize, - cellEdit = _props.cellEdit, - selectRow = _props.selectRow, - rowStyle = _props.rowStyle, - rowClasses = _props.rowClasses, - rowEvents = _props.rowEvents, - expandRow = _props.expandRow, - className = _props.className; - - - var content = void 0; - - if (isEmpty) { - var indication = _utils2.default.isFunction(noDataIndication) ? noDataIndication() : noDataIndication; - if (!indication) { - return null; - } - content = _react2.default.createElement(_rowSection2.default, { content: indication, colSpan: visibleColumnSize }); - } else { - var selectRowEnabled = selectRow.mode !== _const2.default.ROW_SELECT_DISABLED; - var expandRowEnabled = !!expandRow.renderer; - - var additionalRowProps = {}; - - if (cellEdit.createContext) { - additionalRowProps.EditingCellComponent = this.EditingCell; - } - - if (selectRowEnabled || expandRowEnabled) { - additionalRowProps.expandRow = expandRow; - additionalRowProps.selectRow = selectRow; - } - - content = data - .filter(row => row) - .map(function (row, index) { - var key = _utils2.default.get(row, keyField); - var baseRowProps = _extends({ - key: key, - row: row, - tabIndexCell: tabIndexCell, - columns: columns, - keyField: keyField, - cellEdit: cellEdit, - value: key, - rowIndex: index, - visibleColumnSize: visibleColumnSize, - attrs: rowEvents || {} - }, additionalRowProps); - - baseRowProps.style = _utils2.default.isFunction(rowStyle) ? rowStyle(row, index) : rowStyle; - baseRowProps.className = _utils2.default.isFunction(rowClasses) ? rowClasses(row, index) : rowClasses; - - return _react2.default.createElement(_this2.RowComponent, baseRowProps); - }); - } - - return _react2.default.createElement( - 'tbody', - { className: className }, - content - ); - } - }]); - - return Body; -}(_react2.default.Component); - -Body.propTypes = { - keyField: _propTypes2.default.string.isRequired, - data: _propTypes2.default.array.isRequired, - columns: _propTypes2.default.array.isRequired, - selectRow: _propTypes2.default.object -}; - -exports.default = Body; diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/bootstrap-table.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/bootstrap-table.js deleted file mode 100644 index 4bb7a5e8..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/bootstrap-table.js +++ /dev/null @@ -1,337 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = require('prop-types'); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _classnames = require('classnames'); - -var _classnames2 = _interopRequireDefault(_classnames); - -var _header = require('./header'); - -var _header2 = _interopRequireDefault(_header); - -var _filters = require('./filters'); - -var _filters2 = _interopRequireDefault(_filters); - -var _caption = require('./caption'); - -var _caption2 = _interopRequireDefault(_caption); - -var _body = require('./body'); - -var _body2 = _interopRequireDefault(_body); - -var _footer = require('./footer'); - -var _footer2 = _interopRequireDefault(_footer); - -var _propsResolver = require('./props-resolver'); - -var _propsResolver2 = _interopRequireDefault(_propsResolver); - -var _const = require('./const'); - -var _const2 = _interopRequireDefault(_const); - -var _utils = require('./utils'); - -var _utils2 = _interopRequireDefault(_utils); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint camelcase: 0 */ -/* eslint arrow-body-style: 0 */ - -var BootstrapTable = function (_PropsBaseResolver) { - _inherits(BootstrapTable, _PropsBaseResolver); - - function BootstrapTable(props) { - _classCallCheck(this, BootstrapTable); - - var _this = _possibleConstructorReturn(this, (BootstrapTable.__proto__ || Object.getPrototypeOf(BootstrapTable)).call(this, props)); - - _this.getData = function () { - return _this.visibleRows(); - }; - - _this.validateProps(); - return _this; - } - - _createClass(BootstrapTable, [{ - key: 'UNSAFE_componentWillReceiveProps', - value: function UNSAFE_componentWillReceiveProps(nextProps) { - if (nextProps.onDataSizeChange && !nextProps.pagination) { - if (nextProps.data.length !== this.props.data.length) { - nextProps.onDataSizeChange({ dataSize: nextProps.data.length }); - } - } - } - - // Exposed APIs - - }, { - key: 'render', - value: function render() { - var _props = this.props, - loading = _props.loading, - overlay = _props.overlay; - - if (overlay) { - var LoadingOverlay = overlay(loading); - return _react2.default.createElement( - LoadingOverlay, - null, - this.renderTable() - ); - } - return this.renderTable(); - } - }, { - key: 'renderTable', - value: function renderTable() { - var _props2 = this.props, - columns = _props2.columns, - keyField = _props2.keyField, - tabIndexCell = _props2.tabIndexCell, - id = _props2.id, - classes = _props2.classes, - bootstrap4 = _props2.bootstrap4, - striped = _props2.striped, - hover = _props2.hover, - bordered = _props2.bordered, - condensed = _props2.condensed, - noDataIndication = _props2.noDataIndication, - caption = _props2.caption, - rowStyle = _props2.rowStyle, - rowClasses = _props2.rowClasses, - wrapperClasses = _props2.wrapperClasses, - rowEvents = _props2.rowEvents, - selectRow = _props2.selectRow, - expandRow = _props2.expandRow, - cellEdit = _props2.cellEdit, - filterPosition = _props2.filterPosition; - - - var tableWrapperClass = (0, _classnames2.default)('react-bootstrap-table', wrapperClasses); - - var tableClass = (0, _classnames2.default)('table', _defineProperty({ - 'table-striped': striped, - 'table-hover': hover, - 'table-bordered': bordered - }, bootstrap4 ? 'table-sm' : 'table-condensed', condensed), classes); - - var hasFilters = columns.some(function (col) { - return col.filter || col.filterRenderer; - }); - - var hasFooter = _utils2.default.filter(columns, function (col) { - return _utils2.default.has(col, 'footer'); - }).length > 0; - - var tableCaption = caption && _react2.default.createElement( - _caption2.default, - { bootstrap4: bootstrap4 }, - caption - ); - - return _react2.default.createElement( - 'div', - { className: tableWrapperClass }, - _react2.default.createElement( - 'table', - { id: id, className: tableClass }, - tableCaption, - _react2.default.createElement(_header2.default, { - columns: columns, - className: this.props.headerClasses, - wrapperClasses: this.props.headerWrapperClasses, - sortField: this.props.sortField, - sortOrder: this.props.sortOrder, - onSort: this.props.onSort, - globalSortCaret: this.props.sort && this.props.sort.sortCaret, - onFilter: this.props.onFilter, - currFilters: this.props.currFilters, - onExternalFilter: this.props.onExternalFilter, - selectRow: selectRow, - expandRow: expandRow, - filterPosition: filterPosition - }), - hasFilters && filterPosition !== _const2.default.FILTERS_POSITION_INLINE && _react2.default.createElement(_filters2.default, { - columns: columns, - className: this.props.filtersClasses, - onSort: this.props.onSort, - onFilter: this.props.onFilter, - currFilters: this.props.currFilters, - filterPosition: this.props.filterPosition, - onExternalFilter: this.props.onExternalFilter, - selectRow: selectRow, - expandRow: expandRow - }), - _react2.default.createElement(_body2.default, { - className: this.props.bodyClasses, - data: this.getData(), - keyField: keyField, - tabIndexCell: tabIndexCell, - columns: columns, - isEmpty: this.isEmpty(), - visibleColumnSize: this.visibleColumnSize(), - noDataIndication: noDataIndication, - cellEdit: cellEdit, - selectRow: selectRow, - expandRow: expandRow, - rowStyle: rowStyle, - rowClasses: rowClasses, - rowEvents: rowEvents - }), - hasFooter && _react2.default.createElement(_footer2.default, { - data: this.getData(), - columns: columns, - selectRow: selectRow, - expandRow: expandRow, - className: this.props.footerClasses - }) - ) - ); - } - }]); - - return BootstrapTable; -}((0, _propsResolver2.default)(_react.Component)); - -BootstrapTable.propTypes = { - keyField: _propTypes2.default.string.isRequired, - data: _propTypes2.default.array.isRequired, - columns: _propTypes2.default.array.isRequired, - bootstrap4: _propTypes2.default.bool, - remote: _propTypes2.default.oneOfType([_propTypes2.default.bool, _propTypes2.default.shape({ - pagination: _propTypes2.default.bool - })]), - noDataIndication: _propTypes2.default.oneOfType([_propTypes2.default.node, _propTypes2.default.func]), - striped: _propTypes2.default.bool, - bordered: _propTypes2.default.bool, - hover: _propTypes2.default.bool, - tabIndexCell: _propTypes2.default.bool, - id: _propTypes2.default.string, - classes: _propTypes2.default.string, - headerClasses: _propTypes2.default.string, - bodyClasses: _propTypes2.default.string, - wrapperClasses: _propTypes2.default.string, - headerWrapperClasses: _propTypes2.default.string, - condensed: _propTypes2.default.bool, - caption: _propTypes2.default.oneOfType([_propTypes2.default.node, _propTypes2.default.string]), - pagination: _propTypes2.default.object, - filter: _propTypes2.default.object, - cellEdit: _propTypes2.default.object, - selectRow: _propTypes2.default.shape({ - mode: _propTypes2.default.oneOf([_const2.default.ROW_SELECT_SINGLE, _const2.default.ROW_SELECT_MULTIPLE, _const2.default.ROW_SELECT_DISABLED]).isRequired, - clickToSelect: _propTypes2.default.bool, - clickToExpand: _propTypes2.default.bool, - clickToEdit: _propTypes2.default.bool, - hideSelectAll: _propTypes2.default.bool, - onSelect: _propTypes2.default.func, - onSelectAll: _propTypes2.default.func, - style: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.func]), - classes: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.func]), - nonSelectable: _propTypes2.default.array, - nonSelectableStyle: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.func]), - nonSelectableClasses: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.func]), - bgColor: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.func]), - hideSelectColumn: _propTypes2.default.bool, - selectionRenderer: _propTypes2.default.func, - selectionHeaderRenderer: _propTypes2.default.func, - headerColumnStyle: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.func]), - selectColumnStyle: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.func]), - selectColumnPosition: _propTypes2.default.oneOf([_const2.default.INDICATOR_POSITION_LEFT, _const2.default.INDICATOR_POSITION_RIGHT]) - }), - expandRow: _propTypes2.default.shape({ - renderer: _propTypes2.default.func, - expanded: _propTypes2.default.array, - onExpand: _propTypes2.default.func, - onExpandAll: _propTypes2.default.func, - nonExpandable: _propTypes2.default.array, - showExpandColumn: _propTypes2.default.bool, - onlyOneExpanding: _propTypes2.default.bool, - expandByColumnOnly: _propTypes2.default.bool, - expandColumnRenderer: _propTypes2.default.func, - expandHeaderColumnRenderer: _propTypes2.default.func, - expandColumnPosition: _propTypes2.default.oneOf([_const2.default.INDICATOR_POSITION_LEFT, _const2.default.INDICATOR_POSITION_RIGHT]), - className: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.func]), - parentClassName: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.func]) - }), - rowStyle: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.func]), - rowEvents: _propTypes2.default.object, - rowClasses: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.func]), - filtersClasses: _propTypes2.default.string, - filterPosition: _propTypes2.default.oneOf([_const2.default.FILTERS_POSITION_TOP, _const2.default.FILTERS_POSITION_INLINE, _const2.default.FILTERS_POSITION_BOTTOM]), - footerClasses: _propTypes2.default.string, - defaultSorted: _propTypes2.default.arrayOf(_propTypes2.default.shape({ - dataField: _propTypes2.default.string.isRequired, - order: _propTypes2.default.oneOf([_const2.default.SORT_DESC, _const2.default.SORT_ASC]).isRequired - })), - sort: _propTypes2.default.shape({ - dataField: _propTypes2.default.string, - order: _propTypes2.default.oneOf([_const2.default.SORT_DESC, _const2.default.SORT_ASC]), - sortFunc: _propTypes2.default.func, - sortCaret: _propTypes2.default.func - }), - defaultSortDirection: _propTypes2.default.oneOf([_const2.default.SORT_DESC, _const2.default.SORT_ASC]), - overlay: _propTypes2.default.func, - onTableChange: _propTypes2.default.func, - onSort: _propTypes2.default.func, - onFilter: _propTypes2.default.func, - onExternalFilter: _propTypes2.default.func, - onDataSizeChange: _propTypes2.default.func, - // Inject from toolkit - search: _propTypes2.default.shape({ - searchText: _propTypes2.default.string, - searchContext: _propTypes2.default.func - }), - setDependencyModules: _propTypes2.default.func -}; - -BootstrapTable.defaultProps = { - bootstrap4: false, - remote: false, - striped: false, - bordered: true, - hover: false, - condensed: false, - noDataIndication: null, - selectRow: { - mode: _const2.default.ROW_SELECT_DISABLED, - selected: [], - hideSelectColumn: true - }, - expandRow: { - renderer: undefined, - expanded: [], - nonExpandable: [] - }, - cellEdit: { - mode: null, - nonEditableRows: [] - }, - filterPosition: _const2.default.FILTERS_POSITION_INLINE -}; - -exports.default = BootstrapTable; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/caption.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/caption.js deleted file mode 100644 index f0eab8b2..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/caption.js +++ /dev/null @@ -1,39 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = require('prop-types'); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/* eslint react/require-default-props: 0 */ -var Caption = function Caption(props) { - if (!props.children) return null; - - var caption = props.bootstrap4 ? _react2.default.createElement( - 'caption', - { style: { captionSide: 'top' } }, - props.children - ) : _react2.default.createElement( - 'caption', - null, - props.children - ); - - return caption; -}; - -Caption.propTypes = { - children: _propTypes2.default.oneOfType([_propTypes2.default.node, _propTypes2.default.string]), - bootstrap4: _propTypes2.default.bool -}; - -exports.default = Caption; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/cell-event-delegater.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/cell-event-delegater.js deleted file mode 100644 index e3633e1e..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/cell-event-delegater.js +++ /dev/null @@ -1,71 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _utils = require('./utils'); - -var _utils2 = _interopRequireDefault(_utils); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -var events = ['onClick', 'onDoubleClick', 'onMouseEnter', 'onMouseLeave', 'onContextMenu', 'onAuxClick']; - -exports.default = function (ExtendBase) { - return function (_ExtendBase) { - _inherits(CellEventDelegater, _ExtendBase); - - function CellEventDelegater(props) { - _classCallCheck(this, CellEventDelegater); - - var _this = _possibleConstructorReturn(this, (CellEventDelegater.__proto__ || Object.getPrototypeOf(CellEventDelegater)).call(this, props)); - - _this.createDefaultEventHandler = _this.createDefaultEventHandler.bind(_this); - return _this; - } - - _createClass(CellEventDelegater, [{ - key: 'createDefaultEventHandler', - value: function createDefaultEventHandler(cb) { - var _this2 = this; - - return function (e) { - var _props = _this2.props, - column = _props.column, - columnIndex = _props.columnIndex, - index = _props.index; - - cb(e, column, typeof columnIndex !== 'undefined' ? columnIndex : index); - }; - } - }, { - key: 'delegate', - value: function delegate() { - var _this3 = this; - - var attrs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - var newAttrs = _extends({}, attrs); - Object.keys(attrs).forEach(function (attr) { - if (_utils2.default.contains(events, attr)) { - newAttrs[attr] = _this3.createDefaultEventHandler(attrs[attr]); - } - }); - return newAttrs; - } - }]); - - return CellEventDelegater; - }(ExtendBase); -}; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/cell.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/cell.js deleted file mode 100644 index 4e9dfb21..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/cell.js +++ /dev/null @@ -1,134 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = require('prop-types'); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _cellEventDelegater = require('./cell-event-delegater'); - -var _cellEventDelegater2 = _interopRequireDefault(_cellEventDelegater); - -var _utils = require('./utils'); - -var _utils2 = _interopRequireDefault(_utils); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint react/prop-types: 0 */ - - -var Cell = function (_eventDelegater) { - _inherits(Cell, _eventDelegater); - - function Cell(props) { - _classCallCheck(this, Cell); - - var _this = _possibleConstructorReturn(this, (Cell.__proto__ || Object.getPrototypeOf(Cell)).call(this, props)); - - _this.createHandleEditingCell = function (originFunc) { - return function (e) { - var _this$props = _this.props, - onStart = _this$props.onStart, - rowIndex = _this$props.rowIndex, - columnIndex = _this$props.columnIndex, - clickToEdit = _this$props.clickToEdit, - dbclickToEdit = _this$props.dbclickToEdit; - - if ((clickToEdit || dbclickToEdit) && _utils2.default.isFunction(originFunc)) { - originFunc(e); - } - if (onStart) { - onStart(rowIndex, columnIndex); - } - }; - }; - - _this.createHandleEditingCell = _this.createHandleEditingCell.bind(_this); - return _this; - } - - _createClass(Cell, [{ - key: 'shouldComponentUpdate', - value: function shouldComponentUpdate(nextProps) { - var shouldUpdate = false; - if (nextProps.column.isDummyField) { - shouldUpdate = !_utils2.default.isEqual(this.props.row, nextProps.row); - } else { - shouldUpdate = _utils2.default.get(this.props.row, this.props.column.dataField) !== _utils2.default.get(nextProps.row, nextProps.column.dataField); - } - - if (shouldUpdate) return true; - - // if (nextProps.formatter) - - shouldUpdate = (nextProps.column.formatter ? !_utils2.default.isEqual(this.props.row, nextProps.row) : false) || this.props.column.hidden !== nextProps.column.hidden || this.props.column.isDummyField !== nextProps.column.isDummyField || this.props.rowIndex !== nextProps.rowIndex || this.props.columnIndex !== nextProps.columnIndex || this.props.className !== nextProps.className || this.props.title !== nextProps.title || this.props.editable !== nextProps.editable || this.props.clickToEdit !== nextProps.clickToEdit || this.props.dbclickToEdit !== nextProps.dbclickToEdit || !_utils2.default.isEqual(this.props.style, nextProps.style) || !_utils2.default.isEqual(this.props.column.formatExtraData, nextProps.column.formatExtraData) || !_utils2.default.isEqual(this.props.column.events, nextProps.column.events) || !_utils2.default.isEqual(this.props.column.attrs, nextProps.column.attrs) || this.props.tabIndex !== nextProps.tabIndex; - return shouldUpdate; - } - }, { - key: 'render', - value: function render() { - var _props = this.props, - row = _props.row, - rowIndex = _props.rowIndex, - column = _props.column, - columnIndex = _props.columnIndex, - onStart = _props.onStart, - editable = _props.editable, - clickToEdit = _props.clickToEdit, - dbclickToEdit = _props.dbclickToEdit, - rest = _objectWithoutProperties(_props, ['row', 'rowIndex', 'column', 'columnIndex', 'onStart', 'editable', 'clickToEdit', 'dbclickToEdit']); - - var dataField = column.dataField, - formatter = column.formatter, - formatExtraData = column.formatExtraData; - - var attrs = this.delegate(_extends({}, rest)); - var content = column.isDummyField ? null : _utils2.default.get(row, dataField); - - if (formatter) { - content = column.formatter(content, row, rowIndex, formatExtraData); - } - - if (clickToEdit && editable) { - attrs.onClick = this.createHandleEditingCell(attrs.onClick); - } else if (dbclickToEdit && editable) { - attrs.onDoubleClick = this.createHandleEditingCell(attrs.onDoubleClick); - } - - return _react2.default.createElement( - 'td', - attrs, - typeof content === 'boolean' ? '' + content : content - ); - } - }]); - - return Cell; -}((0, _cellEventDelegater2.default)(_react.Component)); - -Cell.propTypes = { - row: _propTypes2.default.object.isRequired, - rowIndex: _propTypes2.default.number.isRequired, - column: _propTypes2.default.object.isRequired, - columnIndex: _propTypes2.default.number.isRequired -}; - -exports.default = Cell; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/const.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/const.js deleted file mode 100644 index 5c184e54..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/const.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = { - SORT_ASC: 'asc', - SORT_DESC: 'desc', - ROW_SELECT_SINGLE: 'radio', - ROW_SELECT_MULTIPLE: 'checkbox', - ROW_SELECT_DISABLED: 'ROW_SELECT_DISABLED', - CHECKBOX_STATUS_CHECKED: 'checked', - CHECKBOX_STATUS_INDETERMINATE: 'indeterminate', - CHECKBOX_STATUS_UNCHECKED: 'unchecked', - INDICATOR_POSITION_LEFT: 'left', - INDICATOR_POSITION_RIGHT: 'right', - TYPE_STRING: 'string', - TYPE_NUMBER: 'number', - TYPE_BOOLEAN: 'bool', - TYPE_DATE: 'date', - FILTERS_POSITION_INLINE: 'inline', - FILTERS_POSITION_TOP: 'top', - FILTERS_POSITION_BOTTOM: 'bottom' -}; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/contexts/bootstrap.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/contexts/bootstrap.js deleted file mode 100644 index 3c8b79b8..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/contexts/bootstrap.js +++ /dev/null @@ -1,16 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.BootstrapContext = undefined; - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var BootstrapContext = exports.BootstrapContext = _react2.default.createContext({ - bootstrap4: false -}); \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/contexts/column-context.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/contexts/column-context.js deleted file mode 100644 index 487cef0d..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/contexts/column-context.js +++ /dev/null @@ -1,80 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = require('prop-types'); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint react/prop-types: 0 */ -/* eslint react/prefer-stateless-function: 0 */ - - -exports.default = function () { - var ColumnManagementContext = _react2.default.createContext(); - - var ColumnManagementProvider = function (_React$Component) { - _inherits(ColumnManagementProvider, _React$Component); - - function ColumnManagementProvider() { - _classCallCheck(this, ColumnManagementProvider); - - return _possibleConstructorReturn(this, (ColumnManagementProvider.__proto__ || Object.getPrototypeOf(ColumnManagementProvider)).apply(this, arguments)); - } - - _createClass(ColumnManagementProvider, [{ - key: 'render', - value: function render() { - var toggleColumn = void 0; - var _props = this.props, - columns = _props.columns, - toggles = _props.toggles; - - if (toggles) { - toggleColumn = columns.filter(function (column) { - return toggles[column.dataField]; - }); - } else { - toggleColumn = columns.filter(function (column) { - return !column.hidden; - }); - } - return _react2.default.createElement( - ColumnManagementContext.Provider, - { value: { columns: toggleColumn } }, - this.props.children - ); - } - }]); - - return ColumnManagementProvider; - }(_react2.default.Component); - - ColumnManagementProvider.propTypes = { - columns: _propTypes2.default.array.isRequired, - toggles: _propTypes2.default.object - }; - ColumnManagementProvider.defaultProps = { - toggles: null - }; - - - return { - Provider: ColumnManagementProvider, - Consumer: ColumnManagementContext.Consumer - }; -}; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/contexts/data-context.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/contexts/data-context.js deleted file mode 100644 index 4d87c4e4..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/contexts/data-context.js +++ /dev/null @@ -1,84 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = require('prop-types'); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint camelcase: 0 */ - - -exports.default = function () { - var DataContext = _react2.default.createContext(); - - var DataProvider = function (_Component) { - _inherits(DataProvider, _Component); - - function DataProvider() { - var _ref; - - var _temp, _this, _ret; - - _classCallCheck(this, DataProvider); - - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = DataProvider.__proto__ || Object.getPrototypeOf(DataProvider)).call.apply(_ref, [this].concat(args))), _this), _this.state = { data: _this.props.data }, _this.getData = function (filterProps, searchProps, sortProps, paginationProps) { - if (paginationProps) return paginationProps.data;else if (sortProps) return sortProps.data;else if (searchProps) return searchProps.data;else if (filterProps) return filterProps.data; - return _this.props.data; - }, _temp), _possibleConstructorReturn(_this, _ret); - } - - _createClass(DataProvider, [{ - key: 'UNSAFE_componentWillReceiveProps', - value: function UNSAFE_componentWillReceiveProps(nextProps) { - this.setState(function () { - return { data: nextProps.data }; - }); - } - }, { - key: 'render', - value: function render() { - return _react2.default.createElement( - DataContext.Provider, - { - value: { - data: this.state.data, - getData: this.getData - } - }, - this.props.children - ); - } - }]); - - return DataProvider; - }(_react.Component); - - DataProvider.propTypes = { - data: _propTypes2.default.array.isRequired, - children: _propTypes2.default.node.isRequired - }; - - return { - Provider: DataProvider, - Consumer: DataContext.Consumer - }; -}; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/contexts/index.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/contexts/index.js deleted file mode 100644 index c64e66de..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/contexts/index.js +++ /dev/null @@ -1,434 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _events = require('events'); - -var _events2 = _interopRequireDefault(_events); - -var _utils = require('../utils'); - -var _utils2 = _interopRequireDefault(_utils); - -var _dataContext = require('./data-context'); - -var _dataContext2 = _interopRequireDefault(_dataContext); - -var _columnContext = require('./column-context'); - -var _columnContext2 = _interopRequireDefault(_columnContext); - -var _sortContext = require('./sort-context'); - -var _sortContext2 = _interopRequireDefault(_sortContext); - -var _selectionContext = require('./selection-context'); - -var _selectionContext2 = _interopRequireDefault(_selectionContext); - -var _rowExpandContext = require('./row-expand-context'); - -var _rowExpandContext2 = _interopRequireDefault(_rowExpandContext); - -var _remoteResolver2 = require('../props-resolver/remote-resolver'); - -var _remoteResolver3 = _interopRequireDefault(_remoteResolver2); - -var _bootstrap = require('./bootstrap'); - -var _operators = require('../store/operators'); - -var _operators2 = _interopRequireDefault(_operators); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint camelcase: 0 */ -/* eslint no-return-assign: 0 */ -/* eslint no-param-reassign: 0 */ -/* eslint class-methods-use-this: 0 */ - - -var withContext = function withContext(Base) { - return function (_remoteResolver) { - _inherits(BootstrapTableContainer, _remoteResolver); - - function BootstrapTableContainer(props) { - _classCallCheck(this, BootstrapTableContainer); - - var _this = _possibleConstructorReturn(this, (BootstrapTableContainer.__proto__ || Object.getPrototypeOf(BootstrapTableContainer)).call(this, props)); - - _this.DataContext = (0, _dataContext2.default)(); - - if (props.registerExposedAPI) { - var exposedAPIEmitter = new _events2.default(); - exposedAPIEmitter.on('get.table.data', function (payload) { - return payload.result = _this.table.getData(); - }); - exposedAPIEmitter.on('get.selected.rows', function (payload) { - return payload.result = _this.selectionContext.getSelected(); - }); - exposedAPIEmitter.on('get.filtered.rows', function (payload) { - if (_this.searchContext) { - payload.result = _this.searchContext.getSearched(); - } else if (_this.filterContext) { - payload.result = _this.filterContext.getFiltered(); - } else { - payload.result = _this.table.getData(); - } - }); - props.registerExposedAPI(exposedAPIEmitter); - } - - if (props.columns.filter(function (col) { - return col.sort; - }).length > 0) { - _this.SortContext = (0, _sortContext2.default)(_operators2.default, _this.isRemoteSort, _this.handleRemoteSortChange); - } - - if (props.columnToggle || props.columns.filter(function (col) { - return col.hidden; - }).length > 0) { - _this.ColumnManagementContext = (0, _columnContext2.default)(); - } - - if (props.selectRow) { - _this.SelectionContext = _selectionContext2.default; - } - - if (props.expandRow) { - _this.RowExpandContext = _rowExpandContext2.default; - } - - if (props.cellEdit && props.cellEdit.createContext) { - _this.CellEditContext = props.cellEdit.createContext(_utils2.default, _operators2.default, _this.isRemoteCellEdit, _this.handleRemoteCellChange); - } - - if (props.filter) { - _this.FilterContext = props.filter.createContext(_utils2.default, _this.isRemoteFiltering, _this.handleRemoteFilterChange); - } - - if (props.pagination) { - _this.PaginationContext = props.pagination.createContext(); - } - - if (props.search && props.search.searchContext) { - _this.SearchContext = props.search.searchContext(_utils2.default, _this.isRemoteSearch, _this.handleRemoteSearchChange); - } - - if (props.setDependencyModules) { - props.setDependencyModules(_utils2.default); - } - - if (props.setPaginationRemoteEmitter) { - props.setPaginationRemoteEmitter(_this.remoteEmitter); - } - return _this; - } - - _createClass(BootstrapTableContainer, [{ - key: 'UNSAFE_componentWillReceiveProps', - value: function UNSAFE_componentWillReceiveProps(nextProps) { - if (nextProps.columns.filter(function (col) { - return col.sort; - }).length <= 0) { - this.SortContext = null; - } else if (!this.SortContext) { - this.SortContext = (0, _sortContext2.default)(_operators2.default, this.isRemoteSort, this.handleRemoteSortChange); - } - if (!nextProps.pagination && this.props.pagination) { - this.PaginationContext = null; - } - if (nextProps.pagination && !this.props.pagination) { - this.PaginationContext = nextProps.pagination.createContext(this.isRemotePagination, this.handleRemotePageChange); - } - if (!nextProps.cellEdit && this.props.cellEdit) { - this.CellEditContext = null; - } - if (nextProps.cellEdit && !this.props.cellEdit) { - this.CellEditContext = nextProps.cellEdit.createContext(_utils2.default, _operators2.default, this.isRemoteCellEdit, this.handleRemoteCellChange); - } - } - }, { - key: 'renderBase', - value: function renderBase() { - var _this2 = this; - - return function (rootProps, filterProps, searchProps, sortProps, paginationProps, columnToggleProps) { - return _react2.default.createElement(Base, _extends({ - ref: function ref(n) { - return _this2.table = n; - } - }, _this2.props, sortProps, filterProps, searchProps, paginationProps, columnToggleProps, { - data: rootProps.getData(filterProps, searchProps, sortProps, paginationProps) - })); - }; - } - }, { - key: 'renderWithColumnManagementCtx', - value: function renderWithColumnManagementCtx(base, baseProps) { - var _this3 = this; - - return function (rootProps, filterProps, searchProps, sortProps, paginationProps) { - return _react2.default.createElement( - _this3.ColumnManagementContext.Provider, - _extends({}, baseProps, { - toggles: _this3.props.columnToggle ? _this3.props.columnToggle.toggles : null - }), - _react2.default.createElement( - _this3.ColumnManagementContext.Consumer, - null, - function (columnToggleProps) { - return base(rootProps, filterProps, searchProps, sortProps, paginationProps, columnToggleProps); - } - ) - ); - }; - } - }, { - key: 'renderWithSelectionCtx', - value: function renderWithSelectionCtx(base, baseProps) { - var _this4 = this; - - return function (rootProps, filterProps, searchProps, sortProps, paginationProps) { - return _react2.default.createElement( - _this4.SelectionContext.Provider, - _extends({}, baseProps, { - ref: function ref(n) { - return _this4.selectionContext = n; - }, - selectRow: _this4.props.selectRow, - data: rootProps.getData(filterProps, searchProps, sortProps, paginationProps) - }), - base(rootProps, filterProps, searchProps, sortProps, paginationProps) - ); - }; - } - }, { - key: 'renderWithRowExpandCtx', - value: function renderWithRowExpandCtx(base, baseProps) { - var _this5 = this; - - return function (rootProps, filterProps, searchProps, sortProps, paginationProps) { - return _react2.default.createElement( - _this5.RowExpandContext.Provider, - _extends({}, baseProps, { - ref: function ref(n) { - return _this5.rowExpandContext = n; - }, - expandRow: _this5.props.expandRow, - data: rootProps.getData(filterProps, searchProps, sortProps, paginationProps) - }), - base(rootProps, filterProps, searchProps, sortProps, paginationProps) - ); - }; - } - }, { - key: 'renderWithPaginationCtx', - value: function renderWithPaginationCtx(base) { - var _this6 = this; - - return function (rootProps, filterProps, searchProps, sortProps) { - return _react2.default.createElement( - _this6.PaginationContext.Provider, - { - ref: function ref(n) { - return _this6.paginationContext = n; - }, - pagination: _this6.props.pagination, - data: rootProps.getData(filterProps, searchProps, sortProps), - bootstrap4: _this6.props.bootstrap4, - isRemotePagination: _this6.isRemotePagination, - remoteEmitter: _this6.remoteEmitter, - onDataSizeChange: _this6.props.onDataSizeChange, - tableId: _this6.props.id - }, - _react2.default.createElement( - _this6.PaginationContext.Consumer, - null, - function (paginationProps) { - return base(rootProps, filterProps, searchProps, sortProps, paginationProps); - } - ) - ); - }; - } - }, { - key: 'renderWithSortCtx', - value: function renderWithSortCtx(base, baseProps) { - var _this7 = this; - - return function (rootProps, filterProps, searchProps) { - return _react2.default.createElement( - _this7.SortContext.Provider, - _extends({}, baseProps, { - ref: function ref(n) { - return _this7.sortContext = n; - }, - defaultSorted: _this7.props.defaultSorted, - defaultSortDirection: _this7.props.defaultSortDirection, - sort: _this7.props.sort, - data: rootProps.getData(filterProps, searchProps) - }), - _react2.default.createElement( - _this7.SortContext.Consumer, - null, - function (sortProps) { - return base(rootProps, filterProps, searchProps, sortProps); - } - ) - ); - }; - } - }, { - key: 'renderWithSearchCtx', - value: function renderWithSearchCtx(base, baseProps) { - var _this8 = this; - - return function (rootProps, filterProps) { - return _react2.default.createElement( - _this8.SearchContext.Provider, - _extends({}, baseProps, { - ref: function ref(n) { - return _this8.searchContext = n; - }, - data: rootProps.getData(filterProps), - searchText: _this8.props.search.searchText, - dataChangeListener: _this8.props.dataChangeListener - }), - _react2.default.createElement( - _this8.SearchContext.Consumer, - null, - function (searchProps) { - return base(rootProps, filterProps, searchProps); - } - ) - ); - }; - } - }, { - key: 'renderWithFilterCtx', - value: function renderWithFilterCtx(base, baseProps) { - var _this9 = this; - - return function (rootProps) { - return _react2.default.createElement( - _this9.FilterContext.Provider, - _extends({}, baseProps, { - ref: function ref(n) { - return _this9.filterContext = n; - }, - data: rootProps.getData(), - filter: _this9.props.filter.options || {}, - dataChangeListener: _this9.props.dataChangeListener - }), - _react2.default.createElement( - _this9.FilterContext.Consumer, - null, - function (filterProps) { - return base(rootProps, filterProps); - } - ) - ); - }; - } - }, { - key: 'renderWithCellEditCtx', - value: function renderWithCellEditCtx(base, baseProps) { - var _this10 = this; - - return function (rootProps) { - return _react2.default.createElement( - _this10.CellEditContext.Provider, - _extends({}, baseProps, { - ref: function ref(n) { - return _this10.cellEditContext = n; - }, - selectRow: _this10.props.selectRow, - cellEdit: _this10.props.cellEdit, - data: rootProps.getData() - }), - base(rootProps) - ); - }; - } - }, { - key: 'render', - value: function render() { - var _props = this.props, - keyField = _props.keyField, - columns = _props.columns, - bootstrap4 = _props.bootstrap4; - - var baseProps = { keyField: keyField, columns: columns }; - - var base = this.renderBase(); - - if (this.ColumnManagementContext) { - base = this.renderWithColumnManagementCtx(base, baseProps); - } - - if (this.SelectionContext) { - base = this.renderWithSelectionCtx(base, baseProps); - } - - if (this.RowExpandContext) { - base = this.renderWithRowExpandCtx(base, baseProps); - } - - if (this.PaginationContext) { - base = this.renderWithPaginationCtx(base, baseProps); - } - - if (this.SortContext) { - base = this.renderWithSortCtx(base, baseProps); - } - - if (this.SearchContext) { - base = this.renderWithSearchCtx(base, baseProps); - } - - if (this.FilterContext) { - base = this.renderWithFilterCtx(base, baseProps); - } - - if (this.CellEditContext) { - base = this.renderWithCellEditCtx(base, baseProps); - } - - return _react2.default.createElement( - _bootstrap.BootstrapContext.Provider, - { value: { bootstrap4: bootstrap4 } }, - _react2.default.createElement( - this.DataContext.Provider, - _extends({}, baseProps, { - data: this.props.data - }), - _react2.default.createElement( - this.DataContext.Consumer, - null, - base - ) - ) - ); - } - }]); - - return BootstrapTableContainer; - }((0, _remoteResolver3.default)(_react.Component)); -}; - -exports.default = withContext; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/contexts/row-expand-context.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/contexts/row-expand-context.js deleted file mode 100644 index 41b79e16..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/contexts/row-expand-context.js +++ /dev/null @@ -1,197 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = require('prop-types'); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _operators = require('../store/operators'); - -var _operators2 = _interopRequireDefault(_operators); - -var _utils = require('../utils'); - -var _utils2 = _interopRequireDefault(_utils); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint camelcase: 0 */ -/* eslint react/prop-types: 0 */ - - -var RowExpandContext = _react2.default.createContext(); - -var RowExpandProvider = function (_React$Component) { - _inherits(RowExpandProvider, _React$Component); - - function RowExpandProvider() { - var _ref; - - var _temp, _this, _ret; - - _classCallCheck(this, RowExpandProvider); - - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = RowExpandProvider.__proto__ || Object.getPrototypeOf(RowExpandProvider)).call.apply(_ref, [this].concat(args))), _this), _this.state = { expanded: _this.props.expandRow.expanded || [], - isClosing: _this.props.expandRow.isClosing || [] }, _this.onClosed = function (closedRow) { - _this.setState({ isClosing: _this.state.isClosing.filter(function (value) { - return value !== closedRow; - }) }); - }, _this.handleRowExpand = function (rowKey, expanded, rowIndex, e) { - var _this$props = _this.props, - data = _this$props.data, - keyField = _this$props.keyField, - _this$props$expandRow = _this$props.expandRow, - onExpand = _this$props$expandRow.onExpand, - onlyOneExpanding = _this$props$expandRow.onlyOneExpanding, - nonExpandable = _this$props$expandRow.nonExpandable; - - if (nonExpandable && _utils2.default.contains(nonExpandable, rowKey)) { - return; - } - - var currExpanded = [].concat(_toConsumableArray(_this.state.expanded)); - var isClosing = [].concat(_toConsumableArray(_this.state.isClosing)); - - if (expanded) { - if (onlyOneExpanding) { - isClosing = isClosing.concat(currExpanded); - currExpanded = [rowKey]; - } else currExpanded.push(rowKey); - } else { - isClosing.push(rowKey); - currExpanded = currExpanded.filter(function (value) { - return value !== rowKey; - }); - } - - if (onExpand) { - var row = _operators2.default.getRowByRowId(data, keyField, rowKey); - onExpand(row, expanded, rowIndex, e); - } - _this.setState(function () { - return { expanded: currExpanded, isClosing: isClosing }; - }); - }, _this.handleAllRowExpand = function (e, expandAll) { - var _this$props2 = _this.props, - data = _this$props2.data, - keyField = _this$props2.keyField, - _this$props2$expandRo = _this$props2.expandRow, - onExpandAll = _this$props2$expandRo.onExpandAll, - nonExpandable = _this$props2$expandRo.nonExpandable; - var expanded = _this.state.expanded; - - - var currExpanded = void 0; - - if (expandAll) { - currExpanded = expanded.concat(_operators2.default.expandableKeys(data, keyField, nonExpandable)); - } else { - currExpanded = expanded.filter(function (s) { - return typeof data.find(function (d) { - return _utils2.default.get(d, keyField) === s; - }) === 'undefined'; - }); - } - - if (onExpandAll) { - onExpandAll(expandAll, _operators2.default.getExpandedRows(data, keyField, currExpanded), e); - } - - _this.setState(function () { - return { expanded: currExpanded }; - }); - }, _temp), _possibleConstructorReturn(_this, _ret); - } - - _createClass(RowExpandProvider, [{ - key: 'UNSAFE_componentWillReceiveProps', - value: function UNSAFE_componentWillReceiveProps(nextProps) { - var _this2 = this; - - if (nextProps.expandRow) { - var nextExpanded = [].concat(_toConsumableArray(nextProps.expandRow.expanded || this.state.expanded)); - var _nextProps$expandRow$ = nextProps.expandRow.nonExpandable, - nonExpandable = _nextProps$expandRow$ === undefined ? [] : _nextProps$expandRow$; - - nextExpanded = nextExpanded.filter(function (rowId) { - return !_utils2.default.contains(nonExpandable, rowId); - }); - var isClosing = this.state.expanded.reduce(function (acc, cur) { - if (!_utils2.default.contains(nextExpanded, cur)) { - acc.push(cur); - } - return acc; - }, []); - - this.setState(function () { - return { - expanded: nextExpanded, - isClosing: isClosing - }; - }); - } else { - this.setState(function () { - return { - expanded: _this2.state.expanded - }; - }); - } - } - }, { - key: 'render', - value: function render() { - var _props = this.props, - data = _props.data, - keyField = _props.keyField; - - return _react2.default.createElement( - RowExpandContext.Provider, - { - value: _extends({}, this.props.expandRow, { - nonExpandable: this.props.expandRow.nonExpandable, - expanded: this.state.expanded, - isClosing: this.state.isClosing, - onClosed: this.onClosed, - isAnyExpands: _operators2.default.isAnyExpands(data, keyField, this.state.expanded), - onRowExpand: this.handleRowExpand, - onAllRowExpand: this.handleAllRowExpand - }) - }, - this.props.children - ); - } - }]); - - return RowExpandProvider; -}(_react2.default.Component); - -RowExpandProvider.propTypes = { - children: _propTypes2.default.node.isRequired, - data: _propTypes2.default.array.isRequired, - keyField: _propTypes2.default.string.isRequired -}; -exports.default = { - Provider: RowExpandProvider, - Consumer: RowExpandContext.Consumer -}; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/contexts/selection-context.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/contexts/selection-context.js deleted file mode 100644 index e04a27fa..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/contexts/selection-context.js +++ /dev/null @@ -1,182 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = require('prop-types'); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _const = require('../const'); - -var _const2 = _interopRequireDefault(_const); - -var _utils = require('../utils'); - -var _utils2 = _interopRequireDefault(_utils); - -var _operators = require('../store/operators'); - -var _operators2 = _interopRequireDefault(_operators); - -var _selection = require('../store/selection'); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint camelcase: 0 */ -/* eslint react/prop-types: 0 */ - - -var SelectionContext = _react2.default.createContext(); - -var SelectionProvider = function (_React$Component) { - _inherits(SelectionProvider, _React$Component); - - function SelectionProvider(props) { - _classCallCheck(this, SelectionProvider); - - var _this = _possibleConstructorReturn(this, (SelectionProvider.__proto__ || Object.getPrototypeOf(SelectionProvider)).call(this, props)); - - _this.handleRowSelect = function (rowKey, checked, rowIndex, e) { - var _this$props = _this.props, - data = _this$props.data, - keyField = _this$props.keyField, - _this$props$selectRow = _this$props.selectRow, - mode = _this$props$selectRow.mode, - onSelect = _this$props$selectRow.onSelect; - var ROW_SELECT_SINGLE = _const2.default.ROW_SELECT_SINGLE; - - - var currSelected = [].concat(_toConsumableArray(_this.selected)); - - var result = true; - if (onSelect) { - var row = _operators2.default.getRowByRowId(data, keyField, rowKey); - result = onSelect(row, checked, rowIndex, e); - } - - if (result === true || result === undefined) { - if (mode === ROW_SELECT_SINGLE) { - // when select mode is radio - currSelected = [rowKey]; - } else if (checked) { - // when select mode is checkbox - currSelected.push(rowKey); - } else { - currSelected = currSelected.filter(function (value) { - return value !== rowKey; - }); - } - } - _this.selected = currSelected; - _this.forceUpdate(); - }; - - _this.handleAllRowsSelect = function (e, isUnSelect) { - var _this$props2 = _this.props, - data = _this$props2.data, - keyField = _this$props2.keyField, - _this$props2$selectRo = _this$props2.selectRow, - onSelectAll = _this$props2$selectRo.onSelectAll, - nonSelectable = _this$props2$selectRo.nonSelectable; - var selected = _this.selected; - - - var currSelected = void 0; - - if (!isUnSelect) { - currSelected = selected.concat(_operators2.default.selectableKeys(data, keyField, nonSelectable)); - } else { - currSelected = selected.filter(function (s) { - return typeof data.find(function (d) { - return _utils2.default.get(d, keyField) === s; - }) === 'undefined'; - }); - } - - var result = void 0; - if (onSelectAll) { - result = onSelectAll(!isUnSelect, _operators2.default.getSelectedRows(data, keyField, isUnSelect ? selected : currSelected), e); - if (Array.isArray(result)) { - currSelected = result; - } - } - _this.selected = currSelected; - _this.forceUpdate(); - }; - - _this.selected = props.selectRow.selected || []; - return _this; - } - - // exposed API - - - _createClass(SelectionProvider, [{ - key: 'getSelected', - value: function getSelected() { - return this.selected; - } - }, { - key: 'UNSAFE_componentWillReceiveProps', - value: function UNSAFE_componentWillReceiveProps(nextProps) { - if (nextProps.selectRow) { - this.selected = nextProps.selectRow.selected || this.selected; - } - } - }, { - key: 'render', - value: function render() { - var _getSelectionSummary = (0, _selection.getSelectionSummary)(this.props.data, this.props.keyField, this.selected), - allRowsSelected = _getSelectionSummary.allRowsSelected, - allRowsNotSelected = _getSelectionSummary.allRowsNotSelected; - - var checkedStatus = void 0; - - // checkbox status depending on selected rows counts - if (allRowsSelected) checkedStatus = _const2.default.CHECKBOX_STATUS_CHECKED;else if (allRowsNotSelected) checkedStatus = _const2.default.CHECKBOX_STATUS_UNCHECKED;else checkedStatus = _const2.default.CHECKBOX_STATUS_INDETERMINATE; - - return _react2.default.createElement( - SelectionContext.Provider, - { - value: _extends({}, this.props.selectRow, { - selected: this.selected, - onRowSelect: this.handleRowSelect, - onAllRowsSelect: this.handleAllRowsSelect, - allRowsSelected: allRowsSelected, - allRowsNotSelected: allRowsNotSelected, - checkedStatus: checkedStatus - }) - }, - this.props.children - ); - } - }]); - - return SelectionProvider; -}(_react2.default.Component); - -SelectionProvider.propTypes = { - children: _propTypes2.default.node.isRequired, - data: _propTypes2.default.array.isRequired, - keyField: _propTypes2.default.string.isRequired -}; -exports.default = { - Provider: SelectionProvider, - Consumer: SelectionContext.Consumer -}; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/contexts/sort-context.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/contexts/sort-context.js deleted file mode 100644 index 0962fd67..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/contexts/sort-context.js +++ /dev/null @@ -1,182 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = require('prop-types'); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _const = require('../const'); - -var _const2 = _interopRequireDefault(_const); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint camelcase: 0 */ -/* eslint react/require-default-props: 0 */ - - -exports.default = function (dataOperator, isRemoteSort, handleSortChange) { - var SortContext = _react2.default.createContext(); - - var SortProvider = function (_React$Component) { - _inherits(SortProvider, _React$Component); - - function SortProvider(props) { - _classCallCheck(this, SortProvider); - - var _this = _possibleConstructorReturn(this, (SortProvider.__proto__ || Object.getPrototypeOf(SortProvider)).call(this, props)); - - _initialiseProps.call(_this); - - var sortOrder = void 0; - var sortColumn = void 0; - var defaultSorted = props.defaultSorted, - defaultSortDirection = props.defaultSortDirection, - sort = props.sort; - - - if (defaultSorted && defaultSorted.length > 0) { - sortOrder = defaultSorted[0].order || defaultSortDirection; - sortColumn = _this.initSort(defaultSorted[0].dataField, sortOrder); - } else if (sort && sort.dataField && sort.order) { - sortOrder = sort.order; - sortColumn = _this.initSort(sort.dataField, sortOrder); - } - _this.state = { sortOrder: sortOrder, sortColumn: sortColumn }; - return _this; - } - - _createClass(SortProvider, [{ - key: 'componentDidMount', - value: function componentDidMount() { - var _state = this.state, - sortOrder = _state.sortOrder, - sortColumn = _state.sortColumn; - - if (isRemoteSort() && sortOrder && sortColumn) { - handleSortChange(sortColumn.dataField, sortOrder); - } - } - }, { - key: 'UNSAFE_componentWillReceiveProps', - value: function UNSAFE_componentWillReceiveProps(nextProps) { - var sort = nextProps.sort, - columns = nextProps.columns; - - if (sort && sort.dataField && sort.order) { - this.setState({ - sortOrder: sort.order, - sortColumn: columns.find(function (col) { - return col.dataField === sort.dataField; - }) - }); - } - } - }, { - key: 'initSort', - value: function initSort(sortField, sortOrder) { - var sortColumn = void 0; - var columns = this.props.columns; - - var sortColumns = columns.filter(function (col) { - return col.dataField === sortField; - }); - if (sortColumns.length > 0) { - sortColumn = sortColumns[0]; - - if (sortColumn.onSort) { - sortColumn.onSort(sortField, sortOrder); - } - } - return sortColumn; - } - }, { - key: 'render', - value: function render() { - var data = this.props.data; - var sort = this.props.sort; - var _state2 = this.state, - sortOrder = _state2.sortOrder, - sortColumn = _state2.sortColumn; - - if (!isRemoteSort() && sortColumn) { - var sortFunc = sortColumn.sortFunc ? sortColumn.sortFunc : sort && sort.sortFunc; - data = dataOperator.sort(data, sortOrder, _extends({}, sortColumn, { sortFunc: sortFunc })); - } - - return _react2.default.createElement( - SortContext.Provider, - { - value: { - data: data, - sortOrder: sortOrder, - onSort: this.handleSort, - sortField: sortColumn ? sortColumn.dataField : null - } - }, - this.props.children - ); - } - }]); - - return SortProvider; - }(_react2.default.Component); - - SortProvider.propTypes = { - data: _propTypes2.default.array.isRequired, - columns: _propTypes2.default.array.isRequired, - children: _propTypes2.default.node.isRequired, - defaultSorted: _propTypes2.default.arrayOf(_propTypes2.default.shape({ - dataField: _propTypes2.default.string.isRequired, - order: _propTypes2.default.oneOf([_const2.default.SORT_DESC, _const2.default.SORT_ASC]).isRequired - })), - sort: _propTypes2.default.shape({ - dataField: _propTypes2.default.string, - order: _propTypes2.default.oneOf([_const2.default.SORT_DESC, _const2.default.SORT_ASC]), - sortFunc: _propTypes2.default.func - }), - defaultSortDirection: _propTypes2.default.oneOf([_const2.default.SORT_DESC, _const2.default.SORT_ASC]) - }; - - var _initialiseProps = function _initialiseProps() { - var _this2 = this; - - this.handleSort = function (column) { - var sortOrder = dataOperator.nextOrder(column, _this2.state, _this2.props.defaultSortDirection); - - if (column.onSort) { - column.onSort(column.dataField, sortOrder); - } - - if (isRemoteSort()) { - handleSortChange(column.dataField, sortOrder); - } - _this2.setState(function () { - return { - sortOrder: sortOrder, - sortColumn: column - }; - }); - }; - }; - - return { - Provider: SortProvider, - Consumer: SortContext.Consumer - }; -}; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/filters-cell.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/filters-cell.js deleted file mode 100644 index c720f43a..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/filters-cell.js +++ /dev/null @@ -1,65 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = require('prop-types'); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _utils = require('./utils'); - -var _utils2 = _interopRequireDefault(_utils); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var FiltersCell = function FiltersCell(props) { - var index = props.index, - column = props.column, - onExternalFilter = props.onExternalFilter, - currFilters = props.currFilters, - onFilter = props.onFilter; - var filterRenderer = column.filterRenderer, - filter = column.filter; - - var filterElm = void 0; - var cellAttrs = {}; - var cellStyle = {}; - cellAttrs.style = cellStyle; - if (column.headerAlign) { - cellStyle.textAlign = _utils2.default.isFunction(column.headerAlign) ? column.headerAlign(column, index) : column.headerAlign; - } - if (column.filterRenderer) { - var onCustomFilter = onExternalFilter(column, filter.props.type); - filterElm = filterRenderer(onCustomFilter, column); - } else if (filter) { - filterElm = _react2.default.createElement(filter.Filter, _extends({}, filter.props, { - filterState: currFilters[column.dataField], - onFilter: onFilter, - column: column - })); - } - return _react2.default.createElement('th', cellAttrs, filterElm); -}; - -FiltersCell.propTypes = { - index: _propTypes2.default.number.isRequired, - column: _propTypes2.default.object.isRequired, - currFilters: _propTypes2.default.object.isRequired, - onFilter: _propTypes2.default.func, - onExternalFilter: _propTypes2.default.func -}; - -FiltersCell.defaultProps = { - onFilter: function onFilter() {}, - onExternalFilter: function onExternalFilter() {} -}; - -exports.default = FiltersCell; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/filters.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/filters.js deleted file mode 100644 index 7f2d4f7e..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/filters.js +++ /dev/null @@ -1,96 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = require('prop-types'); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _filtersCell = require('./filters-cell'); - -var _filtersCell2 = _interopRequireDefault(_filtersCell); - -var _const = require('./const'); - -var _const2 = _interopRequireDefault(_const); - -var _rowTemplate = require('./row/row-template'); - -var _rowTemplate2 = _interopRequireDefault(_rowTemplate); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var Filters = function Filters(props) { - var columns = props.columns, - onFilter = props.onFilter, - currFilters = props.currFilters, - filterPosition = props.filterPosition, - onExternalFilter = props.onExternalFilter, - className = props.className, - selectRow = props.selectRow, - expandRow = props.expandRow; - - - function renderContent() { - var filterColumns = []; - var showFiltersRow = false; - - columns.forEach(function (column, i) { - filterColumns.push(_react2.default.createElement(_filtersCell2.default, { - index: i, - key: column.dataField, - column: column, - currFilters: currFilters, - onExternalFilter: onExternalFilter, - onFilter: onFilter - })); - - if (column.filterRenderer || column.filter) { - if (!showFiltersRow) { - showFiltersRow = true; - } - } - }); - return filterColumns; - } - - return _react2.default.createElement( - 'tbody', - { - className: className, - style: { - display: filterPosition === _const2.default.FILTERS_POSITION_TOP ? 'table-header-group' : 'table-footer-group' - } - }, - _react2.default.createElement(_rowTemplate2.default, { - renderContent: renderContent, - selectRow: selectRow, - expandRow: expandRow, - cellEl: 'td' - }) - ); -}; /* eslint react/require-default-props: 0 */ - - -Filters.propTypes = { - columns: _propTypes2.default.array.isRequired, - onFilter: _propTypes2.default.func, - filterPosition: _propTypes2.default.oneOf([_const2.default.FILTERS_POSITION_TOP, _const2.default.FILTERS_POSITION_INLINE, _const2.default.FILTERS_POSITION_BOTTOM]), - currFilters: _propTypes2.default.object, - onExternalFilter: _propTypes2.default.func, - className: _propTypes2.default.string, - selectRow: _propTypes2.default.object, - expandRow: _propTypes2.default.object -}; - -Filters.defaultProps = { - position: _const2.default.FILTERS_POSITION_TOP -}; - -exports.default = Filters; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/footer-cell.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/footer-cell.js deleted file mode 100644 index 4a0b2c8e..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/footer-cell.js +++ /dev/null @@ -1,110 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _classnames = require('classnames'); - -var _classnames2 = _interopRequireDefault(_classnames); - -var _propTypes = require('prop-types'); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _utils = require('./utils'); - -var _utils2 = _interopRequireDefault(_utils); - -var _cellEventDelegater = require('./cell-event-delegater'); - -var _cellEventDelegater2 = _interopRequireDefault(_cellEventDelegater); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint react/require-default-props: 0 */ - - -var FooterCell = function (_eventDelegater) { - _inherits(FooterCell, _eventDelegater); - - function FooterCell() { - _classCallCheck(this, FooterCell); - - return _possibleConstructorReturn(this, (FooterCell.__proto__ || Object.getPrototypeOf(FooterCell)).apply(this, arguments)); - } - - _createClass(FooterCell, [{ - key: 'render', - value: function render() { - var _props = this.props, - index = _props.index, - column = _props.column, - columnData = _props.columnData; - var footer = column.footer, - footerTitle = column.footerTitle, - footerAlign = column.footerAlign, - footerFormatter = column.footerFormatter, - footerEvents = column.footerEvents, - footerClasses = column.footerClasses, - footerStyle = column.footerStyle, - footerAttrs = column.footerAttrs; - - - var delegateEvents = this.delegate(footerEvents); - var cellAttrs = _extends({}, _utils2.default.isFunction(footerAttrs) ? footerAttrs(column, index) : footerAttrs, delegateEvents); - - var text = ''; - if (_utils2.default.isString(footer)) { - text = footer; - } else if (_utils2.default.isFunction(footer)) { - text = footer(columnData, column, index); - } - - var cellStyle = {}; - var cellClasses = _utils2.default.isFunction(footerClasses) ? footerClasses(column, index) : footerClasses; - - if (footerStyle) { - cellStyle = _utils2.default.isFunction(footerStyle) ? footerStyle(column, index) : footerStyle; - cellStyle = cellStyle ? _extends({}, cellStyle) : cellStyle; - } - - if (footerTitle) { - cellAttrs.title = _utils2.default.isFunction(footerTitle) ? footerTitle(column, index) : text; - } - - if (footerAlign) { - cellStyle.textAlign = _utils2.default.isFunction(footerAlign) ? footerAlign(column, index) : footerAlign; - } - - if (cellClasses) cellAttrs.className = (0, _classnames2.default)(cellAttrs.className, cellClasses); - if (!_utils2.default.isEmptyObject(cellStyle)) cellAttrs.style = cellStyle; - - var children = footerFormatter ? footerFormatter(column, index, { text: text }) : text; - - return _react2.default.createElement('th', cellAttrs, children); - } - }]); - - return FooterCell; -}((0, _cellEventDelegater2.default)(_react2.default.Component)); - -FooterCell.propTypes = { - columnData: _propTypes2.default.array, - index: _propTypes2.default.number, - column: _propTypes2.default.object -}; - -exports.default = FooterCell; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/footer.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/footer.js deleted file mode 100644 index 21527378..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/footer.js +++ /dev/null @@ -1,76 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = require('prop-types'); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _rowTemplate = require('./row/row-template'); - -var _rowTemplate2 = _interopRequireDefault(_rowTemplate); - -var _footerCell = require('./footer-cell'); - -var _footerCell2 = _interopRequireDefault(_footerCell); - -var _utils = require('./utils'); - -var _utils2 = _interopRequireDefault(_utils); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var Footer = function Footer(props) { - var data = props.data, - className = props.className, - columns = props.columns, - selectRow = props.selectRow, - expandRow = props.expandRow; - - - function renderContent() { - return columns.map(function (column, i) { - if (column.footer === undefined || column.footer === null) { - return false; - } - - var columnData = _utils2.default.pluck(data, column.dataField); - - return _react2.default.createElement(_footerCell2.default, { - index: i, - key: column.dataField, - column: column, - columnData: columnData - }); - }); - } - - return _react2.default.createElement( - 'tfoot', - null, - _react2.default.createElement(_rowTemplate2.default, { - renderContent: renderContent, - selectRow: selectRow, - expandRow: expandRow, - className: className, - cellEl: 'th' - }) - ); -}; /* eslint react/require-default-props: 0 */ - - -Footer.propTypes = { - data: _propTypes2.default.array, - className: _propTypes2.default.string, - columns: _propTypes2.default.array, - selectRow: _propTypes2.default.object, - expandRow: _propTypes2.default.object -}; - -exports.default = Footer; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/header-cell.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/header-cell.js deleted file mode 100644 index 96b49a2a..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/header-cell.js +++ /dev/null @@ -1,226 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _classnames = require('classnames'); - -var _classnames2 = _interopRequireDefault(_classnames); - -var _propTypes = require('prop-types'); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _const = require('./const'); - -var _const2 = _interopRequireDefault(_const); - -var _symbol = require('./sort/symbol'); - -var _symbol2 = _interopRequireDefault(_symbol); - -var _caret = require('./sort/caret'); - -var _caret2 = _interopRequireDefault(_caret); - -var _utils = require('./utils'); - -var _utils2 = _interopRequireDefault(_utils); - -var _cellEventDelegater = require('./cell-event-delegater'); - -var _cellEventDelegater2 = _interopRequireDefault(_cellEventDelegater); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint react/require-default-props: 0 */ - - -var HeaderCell = function (_eventDelegater) { - _inherits(HeaderCell, _eventDelegater); - - function HeaderCell() { - _classCallCheck(this, HeaderCell); - - return _possibleConstructorReturn(this, (HeaderCell.__proto__ || Object.getPrototypeOf(HeaderCell)).apply(this, arguments)); - } - - _createClass(HeaderCell, [{ - key: 'render', - value: function render() { - var _props = this.props, - column = _props.column, - index = _props.index, - onSort = _props.onSort, - sorting = _props.sorting, - sortOrder = _props.sortOrder, - isLastSorting = _props.isLastSorting, - onFilter = _props.onFilter, - currFilters = _props.currFilters, - filterPosition = _props.filterPosition, - onExternalFilter = _props.onExternalFilter, - globalSortCaret = _props.globalSortCaret; - var text = column.text, - sort = column.sort, - sortCaret = column.sortCaret, - filter = column.filter, - filterRenderer = column.filterRenderer, - headerTitle = column.headerTitle, - headerAlign = column.headerAlign, - headerFormatter = column.headerFormatter, - headerEvents = column.headerEvents, - headerClasses = column.headerClasses, - headerStyle = column.headerStyle, - headerAttrs = column.headerAttrs, - headerSortingClasses = column.headerSortingClasses, - headerSortingStyle = column.headerSortingStyle; - - - var sortCaretfunc = sortCaret || globalSortCaret; - - var delegateEvents = this.delegate(headerEvents); - - var customAttrs = _utils2.default.isFunction(headerAttrs) ? headerAttrs(column, index) : headerAttrs || {}; - - var cellAttrs = _extends({}, customAttrs, delegateEvents, { - tabIndex: _utils2.default.isDefined(customAttrs.tabIndex) ? customAttrs.tabIndex : 0 - }); - - var sortSymbol = void 0; - var filterElm = void 0; - var cellStyle = {}; - var cellClasses = _utils2.default.isFunction(headerClasses) ? headerClasses(column, index) : headerClasses; - - if (headerStyle) { - cellStyle = _utils2.default.isFunction(headerStyle) ? headerStyle(column, index) : headerStyle; - cellStyle = cellStyle ? _extends({}, cellStyle) : cellStyle; - } - - if (headerTitle) { - cellAttrs.title = _utils2.default.isFunction(headerTitle) ? headerTitle(column, index) : text; - } - - if (headerAlign) { - cellStyle.textAlign = _utils2.default.isFunction(headerAlign) ? headerAlign(column, index) : headerAlign; - } - - if (sort) { - var customClick = cellAttrs.onClick; - cellAttrs['aria-label'] = sorting ? text + ' sort ' + sortOrder : text + ' sortable'; - cellAttrs.onKeyUp = function (e) { - if (e.key === 'Enter') { - onSort(column); - if (_utils2.default.isFunction(customClick)) customClick(e); - } - }; - cellAttrs.onClick = function (e) { - onSort(column); - if (_utils2.default.isFunction(customClick)) customClick(e); - }; - cellAttrs.className = (0, _classnames2.default)(cellAttrs.className, 'sortable'); - - if (sorting) { - sortSymbol = sortCaretfunc ? sortCaretfunc(sortOrder, column) : _react2.default.createElement(_caret2.default, { order: sortOrder }); - - // append customized classes or style if table was sorting based on the current column. - cellClasses = (0, _classnames2.default)(cellClasses, _utils2.default.isFunction(headerSortingClasses) ? headerSortingClasses(column, sortOrder, isLastSorting, index) : headerSortingClasses); - - cellStyle = _extends({}, cellStyle, _utils2.default.isFunction(headerSortingStyle) ? headerSortingStyle(column, sortOrder, isLastSorting, index) : headerSortingStyle); - } else { - sortSymbol = sortCaretfunc ? sortCaretfunc(undefined, column) : _react2.default.createElement(_symbol2.default, null); - } - } - - if (cellClasses) cellAttrs.className = (0, _classnames2.default)(cellAttrs.className, cellClasses); - if (!_utils2.default.isEmptyObject(cellStyle)) cellAttrs.style = cellStyle; - - if (filterPosition === _const2.default.FILTERS_POSITION_INLINE) { - if (filterRenderer) { - var onCustomFilter = onExternalFilter(column, filter.props.type); - filterElm = filterRenderer(onCustomFilter, column); - } else if (filter) { - filterElm = _react2.default.createElement(filter.Filter, _extends({}, filter.props, { - filterState: currFilters[column.dataField], - onFilter: onFilter, - column: column - })); - } - } - - var children = headerFormatter ? headerFormatter(column, index, { sortElement: sortSymbol, filterElement: filterElm }) : text; - - if (headerFormatter) { - return _react2.default.createElement('th', cellAttrs, children); - } - - return _react2.default.createElement('th', cellAttrs, children, sortSymbol, filterElm); - } - }]); - - return HeaderCell; -}((0, _cellEventDelegater2.default)(_react2.default.Component)); - -HeaderCell.propTypes = { - column: _propTypes2.default.shape({ - dataField: _propTypes2.default.string.isRequired, - text: _propTypes2.default.string.isRequired, - type: _propTypes2.default.oneOf([_const2.default.TYPE_STRING, _const2.default.TYPE_NUMBER, _const2.default.TYPE_BOOLEAN, _const2.default.TYPE_DATE]), - isDummyField: _propTypes2.default.bool, - hidden: _propTypes2.default.bool, - headerFormatter: _propTypes2.default.func, - formatter: _propTypes2.default.func, - formatExtraData: _propTypes2.default.any, - headerClasses: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.func]), - classes: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.func]), - headerStyle: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.func]), - style: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.func]), - headerTitle: _propTypes2.default.oneOfType([_propTypes2.default.bool, _propTypes2.default.func]), - title: _propTypes2.default.oneOfType([_propTypes2.default.bool, _propTypes2.default.func]), - headerEvents: _propTypes2.default.object, - events: _propTypes2.default.object, - headerAlign: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.func]), - align: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.func]), - headerAttrs: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.func]), - attrs: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.func]), - sort: _propTypes2.default.bool, - sortFunc: _propTypes2.default.func, - onSort: _propTypes2.default.func, - editor: _propTypes2.default.object, - editable: _propTypes2.default.oneOfType([_propTypes2.default.bool, _propTypes2.default.func]), - editCellStyle: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.func]), - editCellClasses: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.func]), - editorStyle: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.func]), - editorClasses: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.func]), - editorRenderer: _propTypes2.default.func, - validator: _propTypes2.default.func, - filter: _propTypes2.default.object, - filterRenderer: _propTypes2.default.func, - filterValue: _propTypes2.default.func, - searchable: _propTypes2.default.bool - }).isRequired, - index: _propTypes2.default.number.isRequired, - onSort: _propTypes2.default.func, - sorting: _propTypes2.default.bool, - sortOrder: _propTypes2.default.oneOf([_const2.default.SORT_ASC, _const2.default.SORT_DESC]), - sortCaret: _propTypes2.default.func, - isLastSorting: _propTypes2.default.bool, - onFilter: _propTypes2.default.func, - filterPosition: _propTypes2.default.oneOf([_const2.default.FILTERS_POSITION_INLINE, _const2.default.FILTERS_POSITION_BOTTOM, _const2.default.FILTERS_POSITION_TOP]), - currFilters: _propTypes2.default.object, - onExternalFilter: _propTypes2.default.func -}; - -exports.default = HeaderCell; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/header.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/header.js deleted file mode 100644 index 968a4357..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/header.js +++ /dev/null @@ -1,141 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = require('prop-types'); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _headerCell = require('./header-cell'); - -var _headerCell2 = _interopRequireDefault(_headerCell); - -var _selectionHeaderCell = require('./row-selection/selection-header-cell'); - -var _selectionHeaderCell2 = _interopRequireDefault(_selectionHeaderCell); - -var _expandHeaderCell = require('./row-expand/expand-header-cell'); - -var _expandHeaderCell2 = _interopRequireDefault(_expandHeaderCell); - -var _selectionHeaderCellConsumer = require('./row-selection/selection-header-cell-consumer'); - -var _selectionHeaderCellConsumer2 = _interopRequireDefault(_selectionHeaderCellConsumer); - -var _expandHeaderCellConsumer = require('./row-expand/expand-header-cell-consumer'); - -var _expandHeaderCellConsumer2 = _interopRequireDefault(_expandHeaderCellConsumer); - -var _const = require('./const'); - -var _const2 = _interopRequireDefault(_const); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/* eslint react/require-default-props: 0 */ -var Header = function Header(props) { - var className = props.className, - columns = props.columns, - onSort = props.onSort, - onFilter = props.onFilter, - sortField = props.sortField, - sortOrder = props.sortOrder, - selectRow = props.selectRow, - expandRow = props.expandRow, - currFilters = props.currFilters, - onExternalFilter = props.onExternalFilter, - filterPosition = props.filterPosition, - globalSortCaret = props.globalSortCaret, - wrapperClasses = props.wrapperClasses; - - - var SelectionHeaderCellComp = function SelectionHeaderCellComp() { - return null; - }; - var ExpansionHeaderCellComp = function ExpansionHeaderCellComp() { - return null; - }; - - if (expandRow.showExpandColumn) { - ExpansionHeaderCellComp = (0, _expandHeaderCellConsumer2.default)(_expandHeaderCell2.default); - } - - if (selectRow) { - SelectionHeaderCellComp = (0, _selectionHeaderCellConsumer2.default)(_selectionHeaderCell2.default); - } - - var isRenderFunctionColumnInLeft = function isRenderFunctionColumnInLeft() { - var position = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _const2.default.INDICATOR_POSITION_LEFT; - return position === _const2.default.INDICATOR_POSITION_LEFT; - }; - - var childrens = [columns.map(function (column, i) { - var currSort = column.dataField === sortField; - var isLastSorting = column.dataField === sortField; - - return _react2.default.createElement(_headerCell2.default, { - index: i, - key: column.dataField, - column: column, - onSort: onSort, - sorting: currSort, - sortOrder: sortOrder, - globalSortCaret: globalSortCaret, - isLastSorting: isLastSorting, - onFilter: onFilter, - currFilters: currFilters, - onExternalFilter: onExternalFilter, - filterPosition: filterPosition - }); - })]; - - if (!selectRow.hideSelectColumn) { - if (isRenderFunctionColumnInLeft(selectRow.selectColumnPosition)) { - childrens.unshift(_react2.default.createElement(SelectionHeaderCellComp, { key: 'selection' })); - } else { - childrens.push(_react2.default.createElement(SelectionHeaderCellComp, { key: 'selection' })); - } - } - - if (expandRow.showExpandColumn) { - if (isRenderFunctionColumnInLeft(expandRow.expandColumnPosition)) { - childrens.unshift(_react2.default.createElement(ExpansionHeaderCellComp, { key: 'expansion' })); - } else { - childrens.push(_react2.default.createElement(ExpansionHeaderCellComp, { key: 'expansion' })); - } - } - - return _react2.default.createElement( - 'thead', - { className: wrapperClasses }, - _react2.default.createElement( - 'tr', - { className: className }, - childrens - ) - ); -}; - -Header.propTypes = { - columns: _propTypes2.default.array.isRequired, - onSort: _propTypes2.default.func, - onFilter: _propTypes2.default.func, - sortField: _propTypes2.default.string, - sortOrder: _propTypes2.default.string, - selectRow: _propTypes2.default.object, - currFilters: _propTypes2.default.object, - onExternalFilter: _propTypes2.default.func, - globalSortCaret: _propTypes2.default.func, - className: _propTypes2.default.string, - wrapperClasses: _propTypes2.default.string, - expandRow: _propTypes2.default.object, - filterPosition: _propTypes2.default.oneOf([_const2.default.FILTERS_POSITION_TOP, _const2.default.FILTERS_POSITION_INLINE, _const2.default.FILTERS_POSITION_BOTTOM]) -}; - -exports.default = Header; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/props-resolver/column-resolver.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/props-resolver/column-resolver.js deleted file mode 100644 index 1df44367..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/props-resolver/column-resolver.js +++ /dev/null @@ -1,54 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -exports.default = function (ExtendBase) { - return function (_ExtendBase) { - _inherits(ColumnResolver, _ExtendBase); - - function ColumnResolver() { - _classCallCheck(this, ColumnResolver); - - return _possibleConstructorReturn(this, (ColumnResolver.__proto__ || Object.getPrototypeOf(ColumnResolver)).apply(this, arguments)); - } - - _createClass(ColumnResolver, [{ - key: "visibleColumnSize", - value: function visibleColumnSize() { - var includeSelectColumn = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; - - var columnLen = void 0; - if (this.props.columnToggle && this.props.columnToggle.toggles) { - var columns = this.props.columnToggle.toggles; - columnLen = Object.keys(columns).filter(function (name) { - return columns[name]; - }).length; - } else { - columnLen = this.props.columns.filter(function (c) { - return !c.hidden; - }).length; - } - if (!includeSelectColumn) return columnLen; - if (this.props.selectRow && !this.props.selectRow.hideSelectColumn) { - columnLen += 1; - } - if (this.props.expandRow && this.props.expandRow.showExpandColumn) { - columnLen += 1; - } - return columnLen; - } - }]); - - return ColumnResolver; - }(ExtendBase); -}; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/props-resolver/index.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/props-resolver/index.js deleted file mode 100644 index f04ae7f9..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/props-resolver/index.js +++ /dev/null @@ -1,70 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _utils = require('../utils'); - -var _utils2 = _interopRequireDefault(_utils); - -var _columnResolver = require('./column-resolver'); - -var _columnResolver2 = _interopRequireDefault(_columnResolver); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -exports.default = function (ExtendBase) { - return function (_ColumnResolver) { - _inherits(TableResolver, _ColumnResolver); - - function TableResolver() { - _classCallCheck(this, TableResolver); - - return _possibleConstructorReturn(this, (TableResolver.__proto__ || Object.getPrototypeOf(TableResolver)).apply(this, arguments)); - } - - _createClass(TableResolver, [{ - key: 'validateProps', - value: function validateProps() { - var keyField = this.props.keyField; - - if (!keyField) { - throw new Error('Please specify a field as key via keyField'); - } - if (this.visibleColumnSize(false) <= 0) { - throw new Error('No visible columns detected'); - } - } - }, { - key: 'isEmpty', - value: function isEmpty() { - return this.props.data.length === 0; - } - }, { - key: 'visibleRows', - value: function visibleRows() { - var _props = this.props, - data = _props.data, - hiddenRows = _props.hiddenRows, - keyField = _props.keyField; - - if (!hiddenRows || hiddenRows.length === 0) return data; - return data.filter(function (row) { - var key = _utils2.default.get(row, keyField); - return !_utils2.default.contains(hiddenRows, key); - }); - } - }]); - - return TableResolver; - }((0, _columnResolver2.default)(ExtendBase)); -}; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/props-resolver/remote-resolver.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/props-resolver/remote-resolver.js deleted file mode 100644 index d816b89b..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/props-resolver/remote-resolver.js +++ /dev/null @@ -1,140 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _events = require('events'); - -var _events2 = _interopRequireDefault(_events); - -var _utils = require('../utils'); - -var _utils2 = _interopRequireDefault(_utils); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -exports.default = function (ExtendBase) { - return function (_ExtendBase) { - _inherits(RemoteResolver, _ExtendBase); - - function RemoteResolver(props) { - _classCallCheck(this, RemoteResolver); - - var _this = _possibleConstructorReturn(this, (RemoteResolver.__proto__ || Object.getPrototypeOf(RemoteResolver)).call(this, props)); - - _this.getNewestState = function () { - var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - var sortOrder = void 0; - var sortField = void 0; - var page = void 0; - var sizePerPage = void 0; - var searchText = void 0; - var filters = {}; - - if (_this.sortContext) { - sortOrder = _this.sortContext.state.sortOrder; - sortField = _this.sortContext.state.sortColumn ? _this.sortContext.state.sortColumn.dataField : null; - } - - if (_this.filterContext) { - filters = _this.filterContext.currFilters; - } - - if (_this.paginationContext) { - page = _this.paginationContext.currPage; - sizePerPage = _this.paginationContext.currSizePerPage; - } - - if (_this.searchContext) { - searchText = _this.props.search.searchText; - } - - return _extends({ - sortOrder: sortOrder, - sortField: sortField, - filters: filters, - page: page, - sizePerPage: sizePerPage, - searchText: searchText - }, state, { - data: _this.props.data - }); - }; - - _this.isRemoteSearch = function () { - var remote = _this.props.remote; - - return remote === true || _utils2.default.isObject(remote) && remote.search || _this.isRemotePagination(); - }; - - _this.isRemotePagination = function () { - var e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - var remote = _this.props.remote; - - e.result = remote === true || _utils2.default.isObject(remote) && remote.pagination; - return e.result; - }; - - _this.isRemoteFiltering = function () { - var remote = _this.props.remote; - - return remote === true || _utils2.default.isObject(remote) && remote.filter || _this.isRemotePagination(); - }; - - _this.isRemoteSort = function () { - var remote = _this.props.remote; - - return remote === true || _utils2.default.isObject(remote) && remote.sort || _this.isRemotePagination(); - }; - - _this.isRemoteCellEdit = function () { - var remote = _this.props.remote; - - return remote === true || _utils2.default.isObject(remote) && remote.cellEdit; - }; - - _this.handleRemotePageChange = function (page, sizePerPage) { - _this.props.onTableChange('pagination', _this.getNewestState({ page: page, sizePerPage: sizePerPage })); - }; - - _this.handleRemoteFilterChange = function (filters) { - var newState = { filters: filters }; - if (_this.isRemotePagination()) { - var options = _this.props.pagination.options || {}; - newState.page = _utils2.default.isDefined(options.pageStartIndex) ? options.pageStartIndex : 1; - } - _this.props.onTableChange('filter', _this.getNewestState(newState)); - }; - - _this.handleRemoteSortChange = function (sortField, sortOrder) { - _this.props.onTableChange('sort', _this.getNewestState({ sortField: sortField, sortOrder: sortOrder })); - }; - - _this.handleRemoteCellChange = function (rowId, dataField, newValue) { - var cellEdit = { rowId: rowId, dataField: dataField, newValue: newValue }; - _this.props.onTableChange('cellEdit', _this.getNewestState({ cellEdit: cellEdit })); - }; - - _this.handleRemoteSearchChange = function (searchText) { - _this.props.onTableChange('search', _this.getNewestState({ searchText: searchText })); - }; - - _this.remoteEmitter = new _events2.default(); - _this.remoteEmitter.on('paginationChange', _this.handleRemotePageChange); - _this.remoteEmitter.on('isRemotePagination', _this.isRemotePagination); - return _this; - } - - return RemoteResolver; - }(ExtendBase); -}; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-expand/expand-cell.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-expand/expand-cell.js deleted file mode 100644 index 50de3d98..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-expand/expand-cell.js +++ /dev/null @@ -1,100 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = require('prop-types'); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint - react/require-default-props: 0 - jsx-a11y/no-noninteractive-element-interactions: 0 - */ -/* eslint no-nested-ternary: 0 */ - - -var ExpandCell = function (_Component) { - _inherits(ExpandCell, _Component); - - function ExpandCell() { - _classCallCheck(this, ExpandCell); - - var _this = _possibleConstructorReturn(this, (ExpandCell.__proto__ || Object.getPrototypeOf(ExpandCell)).call(this)); - - _this.handleClick = _this.handleClick.bind(_this); - return _this; - } - - _createClass(ExpandCell, [{ - key: 'shouldComponentUpdate', - value: function shouldComponentUpdate(nextProps) { - var shouldUpdate = this.props.rowIndex !== nextProps.rowIndex || this.props.expanded !== nextProps.expanded || this.props.rowKey !== nextProps.rowKey || this.props.tabIndex !== nextProps.tabIndex; - - return shouldUpdate; - } - }, { - key: 'handleClick', - value: function handleClick(e) { - var _props = this.props, - rowKey = _props.rowKey, - expanded = _props.expanded, - onRowExpand = _props.onRowExpand, - rowIndex = _props.rowIndex; - - e.stopPropagation(); - onRowExpand(rowKey, !expanded, rowIndex, e); - } - }, { - key: 'render', - value: function render() { - var _props2 = this.props, - expanded = _props2.expanded, - expandable = _props2.expandable, - expandColumnRenderer = _props2.expandColumnRenderer, - tabIndex = _props2.tabIndex, - rowKey = _props2.rowKey; - - var attrs = {}; - if (tabIndex !== -1) attrs.tabIndex = tabIndex; - - return _react2.default.createElement( - 'td', - _extends({ className: 'expand-cell', onClick: this.handleClick }, attrs), - expandColumnRenderer ? expandColumnRenderer({ - expandable: expandable, - expanded: expanded, - rowKey: rowKey - }) : expandable ? expanded ? '(-)' : '(+)' : '' - ); - } - }]); - - return ExpandCell; -}(_react.Component); - -ExpandCell.propTypes = { - rowKey: _propTypes2.default.any, - expanded: _propTypes2.default.bool.isRequired, - expandable: _propTypes2.default.bool.isRequired, - onRowExpand: _propTypes2.default.func.isRequired, - expandColumnRenderer: _propTypes2.default.func, - rowIndex: _propTypes2.default.number, - tabIndex: _propTypes2.default.number -}; -exports.default = ExpandCell; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-expand/expand-header-cell-consumer.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-expand/expand-header-cell-consumer.js deleted file mode 100644 index 53547795..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-expand/expand-header-cell-consumer.js +++ /dev/null @@ -1,27 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _rowExpandContext = require('../contexts/row-expand-context'); - -var _rowExpandContext2 = _interopRequireDefault(_rowExpandContext); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -exports.default = function (Component) { - return function () { - return _react2.default.createElement( - _rowExpandContext2.default.Consumer, - null, - function (expandRow) { - return _react2.default.createElement(Component, expandRow); - } - ); - }; -}; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-expand/expand-header-cell.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-expand/expand-header-cell.js deleted file mode 100644 index 9b8f186c..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-expand/expand-header-cell.js +++ /dev/null @@ -1,78 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = require('prop-types'); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint react/require-default-props: 0 */ -/* eslint no-nested-ternary: 0 */ - - -var ExpansionHeaderCell = function (_Component) { - _inherits(ExpansionHeaderCell, _Component); - - function ExpansionHeaderCell() { - _classCallCheck(this, ExpansionHeaderCell); - - var _this = _possibleConstructorReturn(this, (ExpansionHeaderCell.__proto__ || Object.getPrototypeOf(ExpansionHeaderCell)).call(this)); - - _this.handleCheckBoxClick = _this.handleCheckBoxClick.bind(_this); - return _this; - } - - _createClass(ExpansionHeaderCell, [{ - key: 'handleCheckBoxClick', - value: function handleCheckBoxClick(e) { - var _props = this.props, - isAnyExpands = _props.isAnyExpands, - onAllRowExpand = _props.onAllRowExpand; - - - onAllRowExpand(e, !isAnyExpands); - } - }, { - key: 'render', - value: function render() { - var _props2 = this.props, - isAnyExpands = _props2.isAnyExpands, - expandHeaderColumnRenderer = _props2.expandHeaderColumnRenderer; - - var attrs = { - onClick: this.handleCheckBoxClick - }; - - return _react2.default.createElement( - 'th', - _extends({ className: 'expand-cell-header', 'data-row-selection': true }, attrs), - expandHeaderColumnRenderer ? expandHeaderColumnRenderer({ isAnyExpands: isAnyExpands }) : isAnyExpands ? '(-)' : '(+)' - ); - } - }]); - - return ExpansionHeaderCell; -}(_react.Component); - -ExpansionHeaderCell.propTypes = { - isAnyExpands: _propTypes2.default.bool.isRequired, - onAllRowExpand: _propTypes2.default.func.isRequired, - expandHeaderColumnRenderer: _propTypes2.default.func -}; -exports.default = ExpansionHeaderCell; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-expand/expand-row.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-expand/expand-row.js deleted file mode 100644 index 51abdffa..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-expand/expand-row.js +++ /dev/null @@ -1,77 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _classnames = require('classnames'); - -var _classnames2 = _interopRequireDefault(_classnames); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = require('prop-types'); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _reactTransitionGroup = require('react-transition-group'); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } - -var ExpandRow = function ExpandRow(_ref) { - var children = _ref.children, - expanded = _ref.expanded, - onClosed = _ref.onClosed, - className = _ref.className, - rest = _objectWithoutProperties(_ref, ['children', 'expanded', 'onClosed', 'className']); - - return _react2.default.createElement( - 'tr', - null, - _react2.default.createElement( - 'td', - _extends({ className: (0, _classnames2.default)('reset-expansion-style', className) }, rest), - _react2.default.createElement( - _reactTransitionGroup.CSSTransition, - { - appear: true, - 'in': expanded, - timeout: 400, - classNames: 'row-expand-slide', - onExited: onClosed - }, - _react2.default.createElement( - 'div', - null, - _react2.default.createElement( - 'div', - { className: 'row-expansion-style' }, - children - ) - ) - ) - ) - ); -}; - -ExpandRow.propTypes = { - children: _propTypes2.default.node, - expanded: _propTypes2.default.bool, - onClosed: _propTypes2.default.func, - className: _propTypes2.default.string -}; - -ExpandRow.defaultProps = { - children: null, - expanded: false, - onClosed: null, - className: '' -}; - -exports.default = ExpandRow; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-expand/row-consumer.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-expand/row-consumer.js deleted file mode 100644 index 60f31436..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-expand/row-consumer.js +++ /dev/null @@ -1,76 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; /* eslint react/prop-types: 0 */ - - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _classnames = require('classnames'); - -var _classnames2 = _interopRequireDefault(_classnames); - -var _expandRow = require('./expand-row'); - -var _expandRow2 = _interopRequireDefault(_expandRow); - -var _utils = require('../utils'); - -var _utils2 = _interopRequireDefault(_utils); - -var _rowExpandContext = require('../contexts/row-expand-context'); - -var _rowExpandContext2 = _interopRequireDefault(_rowExpandContext); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -exports.default = function (Component) { - var renderWithExpansion = function renderWithExpansion(props, expandRow) { - var parentClassName = ''; - var className = ''; - var key = props.value; - - var expanded = _utils2.default.contains(expandRow.expanded, key); - var isClosing = _utils2.default.contains(expandRow.isClosing, key); - var expandable = !expandRow.nonExpandable || !_utils2.default.contains(expandRow.nonExpandable, key); - if (expanded) { - parentClassName = _utils2.default.isFunction(expandRow.parentClassName) ? expandRow.parentClassName(expanded, props.row, props.rowIndex) : expandRow.parentClassName || ''; - - className = _utils2.default.isFunction(expandRow.className) ? expandRow.className(expanded, props.row, props.rowIndex) : expandRow.className || ''; - } - - return [_react2.default.createElement(Component, _extends({}, props, { - key: key, - expanded: expanded, - expandable: expandable, - expandRow: _extends({}, expandRow), - className: (0, _classnames2.default)(props.className, parentClassName) - })), expanded || isClosing ? _react2.default.createElement( - _expandRow2.default, - { - key: key + '-expanding', - colSpan: props.visibleColumnSize, - expanded: expanded, - onClosed: function onClosed() { - return expandRow.onClosed(key); - }, - className: className - }, - expandRow.renderer(props.row, props.rowIndex) - ) : null]; - }; - return function (props) { - return _react2.default.createElement( - _rowExpandContext2.default.Consumer, - null, - function (expandRow) { - return renderWithExpansion(props, expandRow); - } - ); - }; -}; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-selection/row-consumer.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-selection/row-consumer.js deleted file mode 100644 index b2602c41..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-selection/row-consumer.js +++ /dev/null @@ -1,83 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; /* eslint react/prop-types: 0 */ - - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _classnames = require('classnames'); - -var _classnames2 = _interopRequireDefault(_classnames); - -var _utils = require('../utils'); - -var _utils2 = _interopRequireDefault(_utils); - -var _selectionContext = require('../contexts/selection-context'); - -var _selectionContext2 = _interopRequireDefault(_selectionContext); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -exports.default = function (Component) { - var renderWithSelection = function renderWithSelection(props, selectRow) { - var key = props.value; - var selected = _utils2.default.contains(selectRow.selected, key); - var selectable = !selectRow.nonSelectable || !_utils2.default.contains(selectRow.nonSelectable, key); - var notSelectable = _utils2.default.contains(selectRow.nonSelectable, key); - - var style = props.style, - className = props.className; - - - if (selected) { - var selectedStyle = _utils2.default.isFunction(selectRow.style) ? selectRow.style(props.row, props.rowIndex) : selectRow.style; - - var selectedClasses = _utils2.default.isFunction(selectRow.classes) ? selectRow.classes(props.row, props.rowIndex) : selectRow.classes; - - style = _extends({}, style, selectedStyle); - className = (0, _classnames2.default)(className, selectedClasses) || undefined; - - if (selectRow.bgColor) { - style = style || {}; - style.backgroundColor = _utils2.default.isFunction(selectRow.bgColor) ? selectRow.bgColor(props.row, props.rowIndex) : selectRow.bgColor; - } - } - - if (notSelectable) { - var notSelectableStyle = _utils2.default.isFunction(selectRow.nonSelectableStyle) ? selectRow.nonSelectableStyle(props.row, props.rowIndex) : selectRow.nonSelectableStyle; - - var notSelectableClasses = _utils2.default.isFunction(selectRow.nonSelectableClasses) ? selectRow.nonSelectableClasses(props.row, props.rowIndex) : selectRow.nonSelectableClasses; - - style = _extends({}, style, notSelectableStyle); - className = (0, _classnames2.default)(className, notSelectableClasses) || undefined; - } - - return _react2.default.createElement(Component, _extends({}, props, { - style: style, - className: className, - selectRow: selectRow, - selected: selected, - selectable: selectable - })); - }; - - function withConsumer(props) { - return _react2.default.createElement( - _selectionContext2.default.Consumer, - null, - function (selectRow) { - return renderWithSelection(props, selectRow); - } - ); - } - - withConsumer.displayName = 'WithSelectionRowConsumer'; - return withConsumer; -}; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-selection/selection-cell.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-selection/selection-cell.js deleted file mode 100644 index 7b3a3c40..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-selection/selection-cell.js +++ /dev/null @@ -1,146 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = require('prop-types'); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _const = require('../const'); - -var _const2 = _interopRequireDefault(_const); - -var _utils = require('../utils'); - -var _utils2 = _interopRequireDefault(_utils); - -var _bootstrap = require('../contexts/bootstrap'); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint - react/require-default-props: 0 - jsx-a11y/no-noninteractive-element-interactions: 0 - */ - - -var SelectionCell = function (_Component) { - _inherits(SelectionCell, _Component); - - function SelectionCell() { - _classCallCheck(this, SelectionCell); - - var _this = _possibleConstructorReturn(this, (SelectionCell.__proto__ || Object.getPrototypeOf(SelectionCell)).call(this)); - - _this.handleClick = _this.handleClick.bind(_this); - return _this; - } - - _createClass(SelectionCell, [{ - key: 'shouldComponentUpdate', - value: function shouldComponentUpdate(nextProps) { - var shouldUpdate = this.props.rowIndex !== nextProps.rowIndex || this.props.selected !== nextProps.selected || this.props.disabled !== nextProps.disabled || this.props.rowKey !== nextProps.rowKey || this.props.tabIndex !== nextProps.tabIndex || this.props.selectColumnStyle !== nextProps.selectColumnStyle; - - return shouldUpdate; - } - }, { - key: 'handleClick', - value: function handleClick(e) { - var _props = this.props, - inputType = _props.mode, - rowKey = _props.rowKey, - selected = _props.selected, - onRowSelect = _props.onRowSelect, - disabled = _props.disabled, - rowIndex = _props.rowIndex; - - e.stopPropagation(); - if (disabled) return; - - var checked = inputType === _const2.default.ROW_SELECT_SINGLE ? true : !selected; - - onRowSelect(rowKey, checked, rowIndex, e); - } - }, { - key: 'render', - value: function render() { - var _this2 = this; - - var _props2 = this.props, - rowKey = _props2.rowKey, - inputType = _props2.mode, - selected = _props2.selected, - disabled = _props2.disabled, - tabIndex = _props2.tabIndex, - rowIndex = _props2.rowIndex, - selectionRenderer = _props2.selectionRenderer, - selectColumnStyle = _props2.selectColumnStyle; - - - var attrs = {}; - if (tabIndex !== -1) attrs.tabIndex = tabIndex; - - attrs.style = _utils2.default.isFunction(selectColumnStyle) ? selectColumnStyle({ - checked: selected, - disabled: disabled, - rowIndex: rowIndex, - rowKey: rowKey - }) : selectColumnStyle; - - return _react2.default.createElement( - _bootstrap.BootstrapContext.Consumer, - null, - function (_ref) { - var bootstrap4 = _ref.bootstrap4; - return _react2.default.createElement( - 'td', - _extends({ className: 'selection-cell', onClick: _this2.handleClick }, attrs), - selectionRenderer ? selectionRenderer({ - mode: inputType, - checked: selected, - disabled: disabled, - rowIndex: rowIndex, - rowKey: rowKey - }) : _react2.default.createElement('input', { - type: inputType, - checked: selected, - disabled: disabled, - className: bootstrap4 ? 'selection-input-4' : '', - onChange: function onChange() {} - }) - ); - } - ); - } - }]); - - return SelectionCell; -}(_react.Component); - -SelectionCell.propTypes = { - mode: _propTypes2.default.string.isRequired, - rowKey: _propTypes2.default.any, - selected: _propTypes2.default.bool, - onRowSelect: _propTypes2.default.func, - disabled: _propTypes2.default.bool, - rowIndex: _propTypes2.default.number, - tabIndex: _propTypes2.default.number, - clickToSelect: _propTypes2.default.bool, - selectionRenderer: _propTypes2.default.func, - selectColumnStyle: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.func]) -}; -exports.default = SelectionCell; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-selection/selection-header-cell-consumer.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-selection/selection-header-cell-consumer.js deleted file mode 100644 index 214e2375..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-selection/selection-header-cell-consumer.js +++ /dev/null @@ -1,27 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _selectionContext = require('../contexts/selection-context'); - -var _selectionContext2 = _interopRequireDefault(_selectionContext); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -exports.default = function (Component) { - return function () { - return _react2.default.createElement( - _selectionContext2.default.Consumer, - null, - function (selectRow) { - return _react2.default.createElement(Component, selectRow); - } - ); - }; -}; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-selection/selection-header-cell.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-selection/selection-header-cell.js deleted file mode 100644 index fc670114..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row-selection/selection-header-cell.js +++ /dev/null @@ -1,174 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.CheckBox = undefined; - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = require('prop-types'); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _const = require('../const'); - -var _const2 = _interopRequireDefault(_const); - -var _bootstrap = require('../contexts/bootstrap'); - -var _utils = require('../utils'); - -var _utils2 = _interopRequireDefault(_utils); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint react/require-default-props: 0 */ - - -var CheckBox = exports.CheckBox = function CheckBox(_ref) { - var className = _ref.className, - checked = _ref.checked, - indeterminate = _ref.indeterminate; - return _react2.default.createElement('input', { - type: 'checkbox', - checked: checked, - className: className, - ref: function ref(input) { - if (input) input.indeterminate = indeterminate; // eslint-disable-line no-param-reassign - }, - onChange: function onChange() {} - }); -}; - -CheckBox.propTypes = { - checked: _propTypes2.default.bool.isRequired, - indeterminate: _propTypes2.default.bool.isRequired, - className: _propTypes2.default.string -}; - -var SelectionHeaderCell = function (_Component) { - _inherits(SelectionHeaderCell, _Component); - - function SelectionHeaderCell() { - _classCallCheck(this, SelectionHeaderCell); - - var _this = _possibleConstructorReturn(this, (SelectionHeaderCell.__proto__ || Object.getPrototypeOf(SelectionHeaderCell)).call(this)); - - _this.handleCheckBoxClick = _this.handleCheckBoxClick.bind(_this); - return _this; - } - - /** - * avoid updating if button is - * 1. radio - * 2. status was not changed. - */ - - - _createClass(SelectionHeaderCell, [{ - key: 'shouldComponentUpdate', - value: function shouldComponentUpdate(nextProps) { - var ROW_SELECT_SINGLE = _const2.default.ROW_SELECT_SINGLE; - var _props = this.props, - mode = _props.mode, - checkedStatus = _props.checkedStatus; - - - if (mode === ROW_SELECT_SINGLE) return false; - - return nextProps.checkedStatus !== checkedStatus; - } - }, { - key: 'handleCheckBoxClick', - value: function handleCheckBoxClick(e) { - var _props2 = this.props, - onAllRowsSelect = _props2.onAllRowsSelect, - checkedStatus = _props2.checkedStatus; - - var isUnSelect = checkedStatus === _const2.default.CHECKBOX_STATUS_CHECKED || checkedStatus === _const2.default.CHECKBOX_STATUS_INDETERMINATE; - - onAllRowsSelect(e, isUnSelect); - } - }, { - key: 'render', - value: function render() { - var _this2 = this; - - var CHECKBOX_STATUS_CHECKED = _const2.default.CHECKBOX_STATUS_CHECKED, - CHECKBOX_STATUS_INDETERMINATE = _const2.default.CHECKBOX_STATUS_INDETERMINATE, - ROW_SELECT_MULTIPLE = _const2.default.ROW_SELECT_MULTIPLE; - var _props3 = this.props, - mode = _props3.mode, - checkedStatus = _props3.checkedStatus, - selectionHeaderRenderer = _props3.selectionHeaderRenderer, - hideSelectAll = _props3.hideSelectAll, - headerColumnStyle = _props3.headerColumnStyle; - - if (hideSelectAll) { - return _react2.default.createElement('th', { 'data-row-selection': true }); - } - - var checked = checkedStatus === CHECKBOX_STATUS_CHECKED; - - var indeterminate = checkedStatus === CHECKBOX_STATUS_INDETERMINATE; - - var attrs = {}; - var content = void 0; - if (selectionHeaderRenderer || mode === ROW_SELECT_MULTIPLE) { - attrs.onClick = this.handleCheckBoxClick; - } - - attrs.style = _utils2.default.isFunction(headerColumnStyle) ? headerColumnStyle(checkedStatus) : headerColumnStyle; - - return _react2.default.createElement( - _bootstrap.BootstrapContext.Consumer, - null, - function (_ref2) { - var bootstrap4 = _ref2.bootstrap4; - - if (selectionHeaderRenderer) { - content = selectionHeaderRenderer({ - mode: mode, - checked: checked, - indeterminate: indeterminate - }); - } else if (mode === ROW_SELECT_MULTIPLE) { - content = _react2.default.createElement(CheckBox, _extends({}, _this2.props, { - checked: checked, - className: bootstrap4 ? 'selection-input-4' : '', - indeterminate: indeterminate - })); - } - return _react2.default.createElement( - 'th', - _extends({ className: 'selection-cell-header', 'data-row-selection': true }, attrs), - content - ); - } - ); - } - }]); - - return SelectionHeaderCell; -}(_react.Component); - -SelectionHeaderCell.propTypes = { - mode: _propTypes2.default.string.isRequired, - checkedStatus: _propTypes2.default.string, - onAllRowsSelect: _propTypes2.default.func, - hideSelectAll: _propTypes2.default.bool, - selectionHeaderRenderer: _propTypes2.default.func, - headerColumnStyle: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.func]) -}; -exports.default = SelectionHeaderCell; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row/aggregate-row.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row/aggregate-row.js deleted file mode 100644 index 31123fc2..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row/aggregate-row.js +++ /dev/null @@ -1,192 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = require('prop-types'); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _utils = require('../utils'); - -var _utils2 = _interopRequireDefault(_utils); - -var _expandCell = require('../row-expand/expand-cell'); - -var _expandCell2 = _interopRequireDefault(_expandCell); - -var _selectionCell = require('../row-selection/selection-cell'); - -var _selectionCell2 = _interopRequireDefault(_selectionCell); - -var _shouldUpdater2 = require('./should-updater'); - -var _shouldUpdater3 = _interopRequireDefault(_shouldUpdater2); - -var _eventDelegater = require('./event-delegater'); - -var _eventDelegater2 = _interopRequireDefault(_eventDelegater); - -var _rowPureContent = require('./row-pure-content'); - -var _rowPureContent2 = _interopRequireDefault(_rowPureContent); - -var _const = require('../const'); - -var _const2 = _interopRequireDefault(_const); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint class-methods-use-this: 0 */ -/* eslint react/prop-types: 0 */ -/* eslint no-plusplus: 0 */ - - -var RowAggregator = function (_shouldUpdater) { - _inherits(RowAggregator, _shouldUpdater); - - function RowAggregator(props) { - _classCallCheck(this, RowAggregator); - - var _this = _possibleConstructorReturn(this, (RowAggregator.__proto__ || Object.getPrototypeOf(RowAggregator)).call(this, props)); - - _this.clickNum = 0; - _this.shouldUpdateRowContent = false; - _this.createClickEventHandler = _this.createClickEventHandler.bind(_this); - return _this; - } - - _createClass(RowAggregator, [{ - key: 'shouldComponentUpdate', - value: function shouldComponentUpdate(nextProps) { - if (this.props.selected !== nextProps.selected || this.props.expanded !== nextProps.expanded || this.props.expandable !== nextProps.expandable || this.props.selectable !== nextProps.selectable || this.props.selectRow.hideSelectColumn !== nextProps.selectRow.hideSelectColumn || this.shouldUpdatedBySelfProps(nextProps)) { - this.shouldUpdateRowContent = this.shouldRowContentUpdate(nextProps); - return true; - } - this.shouldUpdateRowContent = this.shouldRowContentUpdate(nextProps); - - return this.shouldUpdateRowContent; - } - }, { - key: 'isRenderFunctionColumnInLeft', - value: function isRenderFunctionColumnInLeft() { - var position = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _const2.default.INDICATOR_POSITION_LEFT; - - return position === _const2.default.INDICATOR_POSITION_LEFT; - } - }, { - key: 'render', - value: function render() { - var _props = this.props, - row = _props.row, - columns = _props.columns, - keyField = _props.keyField, - rowIndex = _props.rowIndex, - style = _props.style, - className = _props.className, - attrs = _props.attrs, - selectRow = _props.selectRow, - expandRow = _props.expandRow, - expanded = _props.expanded, - expandable = _props.expandable, - selected = _props.selected, - selectable = _props.selectable, - visibleColumnSize = _props.visibleColumnSize, - tabIndexCell = _props.tabIndexCell, - rest = _objectWithoutProperties(_props, ['row', 'columns', 'keyField', 'rowIndex', 'style', 'className', 'attrs', 'selectRow', 'expandRow', 'expanded', 'expandable', 'selected', 'selectable', 'visibleColumnSize', 'tabIndexCell']); - - var key = _utils2.default.get(row, keyField); - var hideSelectColumn = selectRow.hideSelectColumn, - selectColumnPosition = selectRow.selectColumnPosition, - clickToSelect = selectRow.clickToSelect; - var showExpandColumn = expandRow.showExpandColumn, - expandColumnPosition = expandRow.expandColumnPosition; - - - var newAttrs = this.delegate(_extends({}, attrs)); - if (clickToSelect || !!expandRow.renderer) { - newAttrs.onClick = this.createClickEventHandler(newAttrs.onClick); - } - - var tabIndexStart = rowIndex * visibleColumnSize + 1; - - var childrens = [_react2.default.createElement(_rowPureContent2.default, _extends({ - key: 'row', - row: row, - columns: columns, - keyField: keyField, - rowIndex: rowIndex, - shouldUpdate: this.shouldUpdateRowContent, - tabIndexStart: tabIndexCell ? tabIndexStart : -1 - }, rest))]; - - if (!hideSelectColumn) { - var selectCell = _react2.default.createElement(_selectionCell2.default, _extends({}, selectRow, { - key: 'selection-cell', - rowKey: key, - rowIndex: rowIndex, - selected: selected, - disabled: !selectable, - tabIndex: tabIndexCell ? tabIndexStart++ : -1 - })); - if (this.isRenderFunctionColumnInLeft(selectColumnPosition)) { - childrens.unshift(selectCell); - } else { - childrens.push(selectCell); - } - } - - if (showExpandColumn) { - var expandCell = _react2.default.createElement(_expandCell2.default, _extends({}, expandRow, { - key: 'expand-cell', - rowKey: key, - rowIndex: rowIndex, - expanded: expanded, - expandable: expandable, - tabIndex: tabIndexCell ? tabIndexStart++ : -1 - })); - if (this.isRenderFunctionColumnInLeft(expandColumnPosition)) { - childrens.unshift(expandCell); - } else { - childrens.push(expandCell); - } - } - - return _react2.default.createElement( - 'tr', - _extends({ - style: style, - className: className - }, newAttrs), - childrens - ); - } - }]); - - return RowAggregator; -}((0, _shouldUpdater3.default)((0, _eventDelegater2.default)(_react2.default.Component))); - -RowAggregator.propTypes = { - attrs: _propTypes2.default.object, - style: _propTypes2.default.object -}; -RowAggregator.defaultProps = { - attrs: {}, - style: {} -}; -exports.default = RowAggregator; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row/event-delegater.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row/event-delegater.js deleted file mode 100644 index bca381cb..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row/event-delegater.js +++ /dev/null @@ -1,122 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _utils = require('../utils'); - -var _utils2 = _interopRequireDefault(_utils); - -var _const = require('../const'); - -var _const2 = _interopRequireDefault(_const); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -var events = ['onClick', 'onDoubleClick', 'onMouseEnter', 'onMouseLeave', 'onContextMenu', 'onAuxClick']; - -exports.default = function (ExtendBase) { - return function (_ExtendBase) { - _inherits(RowEventDelegater, _ExtendBase); - - function RowEventDelegater(props) { - _classCallCheck(this, RowEventDelegater); - - var _this = _possibleConstructorReturn(this, (RowEventDelegater.__proto__ || Object.getPrototypeOf(RowEventDelegater)).call(this, props)); - - _this.clickNum = 0; - _this.createDefaultEventHandler = _this.createDefaultEventHandler.bind(_this); - _this.createClickEventHandler = _this.createClickEventHandler.bind(_this); - return _this; - } - - _createClass(RowEventDelegater, [{ - key: 'createClickEventHandler', - value: function createClickEventHandler(cb) { - var _this2 = this; - - return function (e) { - var _props = _this2.props, - row = _props.row, - selected = _props.selected, - keyField = _props.keyField, - selectable = _props.selectable, - expandable = _props.expandable, - rowIndex = _props.rowIndex, - expanded = _props.expanded, - expandRow = _props.expandRow, - selectRow = _props.selectRow, - DELAY_FOR_DBCLICK = _props.DELAY_FOR_DBCLICK; - - var clickFn = function clickFn() { - if (cb) { - cb(e, row, rowIndex); - } - var key = _utils2.default.get(row, keyField); - if (expandRow && expandable && !expandRow.expandByColumnOnly) { - if (selectRow.mode !== _const2.default.ROW_SELECT_DISABLED && selectRow.clickToExpand || selectRow.mode === _const2.default.ROW_SELECT_DISABLED) { - expandRow.onRowExpand(key, !expanded, rowIndex, e); - } - } - if (selectRow.clickToSelect && selectable) { - selectRow.onRowSelect(key, !selected, rowIndex, e); - } - }; - - if (DELAY_FOR_DBCLICK) { - _this2.clickNum += 1; - _utils2.default.debounce(function () { - if (_this2.clickNum === 1) { - clickFn(); - } - _this2.clickNum = 0; - }, DELAY_FOR_DBCLICK)(); - } else { - clickFn(); - } - }; - } - }, { - key: 'createDefaultEventHandler', - value: function createDefaultEventHandler(cb) { - var _this3 = this; - - return function (e) { - var _props2 = _this3.props, - row = _props2.row, - rowIndex = _props2.rowIndex; - - cb(e, row, rowIndex); - }; - } - }, { - key: 'delegate', - value: function delegate() { - var _this4 = this; - - var attrs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - var newAttrs = _extends({}, attrs); - Object.keys(attrs).forEach(function (attr) { - if (_utils2.default.contains(events, attr)) { - newAttrs[attr] = _this4.createDefaultEventHandler(attrs[attr]); - } - }); - return newAttrs; - } - }]); - - return RowEventDelegater; - }(ExtendBase); -}; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row/row-pure-content.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row/row-pure-content.js deleted file mode 100644 index 67dfeed9..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row/row-pure-content.js +++ /dev/null @@ -1,151 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _utils = require('../utils'); - -var _utils2 = _interopRequireDefault(_utils); - -var _cell = require('../cell'); - -var _cell2 = _interopRequireDefault(_cell); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint react/prop-types: 0 */ -/* eslint react/no-array-index-key: 0 */ -/* eslint no-plusplus: 0 */ - - -var RowPureContent = function (_React$Component) { - _inherits(RowPureContent, _React$Component); - - function RowPureContent() { - _classCallCheck(this, RowPureContent); - - return _possibleConstructorReturn(this, (RowPureContent.__proto__ || Object.getPrototypeOf(RowPureContent)).apply(this, arguments)); - } - - _createClass(RowPureContent, [{ - key: 'shouldComponentUpdate', - value: function shouldComponentUpdate(nextProps) { - if (typeof nextProps.shouldUpdate !== 'undefined') { - return nextProps.shouldUpdate; - } - return true; - } - }, { - key: 'render', - value: function render() { - var _props = this.props, - row = _props.row, - keyField = _props.keyField, - columns = _props.columns, - rowIndex = _props.rowIndex, - editable = _props.editable, - editingRowIdx = _props.editingRowIdx, - editingColIdx = _props.editingColIdx, - onStart = _props.onStart, - clickToEdit = _props.clickToEdit, - dbclickToEdit = _props.dbclickToEdit, - EditingCellComponent = _props.EditingCellComponent, - tabIndexStart = _props.tabIndexStart; - - - var tabIndex = tabIndexStart; - - return columns.map(function (column, index) { - var dataField = column.dataField; - - var content = _utils2.default.get(row, dataField); - if (rowIndex === editingRowIdx && index === editingColIdx) { - return _react2.default.createElement(EditingCellComponent, { - key: content + '-' + index + '-editing', - row: row, - rowIndex: rowIndex, - column: column, - columnIndex: index - }); - } - // render cell - var cellTitle = void 0; - var cellStyle = {}; - var cellAttrs = _extends({}, _utils2.default.isFunction(column.attrs) ? column.attrs(content, row, rowIndex, index) : column.attrs); - - if (column.events) { - var events = Object.assign({}, column.events); - Object.keys(Object.assign({}, column.events)).forEach(function (key) { - var originFn = events[key]; - events[key] = function () { - for (var _len = arguments.length, rest = Array(_len), _key = 0; _key < _len; _key++) { - rest[_key] = arguments[_key]; - } - - return originFn.apply(undefined, rest.concat([row, rowIndex])); - }; - }); - cellAttrs = _extends({}, cellAttrs, events); - } - - var cellClasses = _utils2.default.isFunction(column.classes) ? column.classes(content, row, rowIndex, index) : column.classes; - - if (column.style) { - cellStyle = _utils2.default.isFunction(column.style) ? column.style(content, row, rowIndex, index) : column.style; - cellStyle = Object.assign({}, cellStyle) || {}; - } - - if (column.title) { - cellTitle = _utils2.default.isFunction(column.title) ? column.title(content, row, rowIndex, index) : content; - cellAttrs.title = cellTitle; - } - - if (column.align) { - cellStyle.textAlign = _utils2.default.isFunction(column.align) ? column.align(content, row, rowIndex, index) : column.align; - } - - if (cellClasses) cellAttrs.className = cellClasses; - if (!_utils2.default.isEmptyObject(cellStyle)) cellAttrs.style = cellStyle; - - var editableCell = _utils2.default.isDefined(column.editable) ? column.editable : true; - if (column.dataField === keyField || !editable) editableCell = false; - if (_utils2.default.isFunction(column.editable)) { - editableCell = column.editable(content, row, rowIndex, index); - } - - if (tabIndexStart !== -1) { - cellAttrs.tabIndex = tabIndex++; - } - - return _react2.default.createElement(_cell2.default, _extends({ - key: content + '-' + index, - row: row, - editable: editableCell, - rowIndex: rowIndex, - columnIndex: index, - column: column, - onStart: onStart, - clickToEdit: clickToEdit, - dbclickToEdit: dbclickToEdit - }, cellAttrs)); - }); - } - }]); - - return RowPureContent; -}(_react2.default.Component); - -exports.default = RowPureContent; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row/row-section.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row/row-section.js deleted file mode 100644 index 8829787b..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row/row-section.js +++ /dev/null @@ -1,45 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = require('prop-types'); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var RowSection = function RowSection(_ref) { - var content = _ref.content, - colSpan = _ref.colSpan; - return _react2.default.createElement( - 'tr', - null, - _react2.default.createElement( - 'td', - { - 'data-toggle': 'collapse', - colSpan: colSpan, - className: 'react-bs-table-no-data' - }, - content - ) - ); -}; - -RowSection.propTypes = { - content: _propTypes2.default.any, - colSpan: _propTypes2.default.number -}; - -RowSection.defaultProps = { - content: null, - colSpan: 1 -}; - -exports.default = RowSection; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row/row-template.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row/row-template.js deleted file mode 100644 index 8a98a4a7..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row/row-template.js +++ /dev/null @@ -1,68 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = require('prop-types'); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _const = require('../const'); - -var _const2 = _interopRequireDefault(_const); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } /* eslint react/require-default-props: 0 */ - - -var RowTemplate = function RowTemplate(props) { - var renderContent = props.renderContent, - selectRow = props.selectRow, - expandRow = props.expandRow, - cellEl = props.cellEl, - rest = _objectWithoutProperties(props, ['renderContent', 'selectRow', 'expandRow', 'cellEl']); - - var isRenderFunctionColumnInLeft = function isRenderFunctionColumnInLeft() { - var position = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _const2.default.INDICATOR_POSITION_LEFT; - return position === _const2.default.INDICATOR_POSITION_LEFT; - }; - - var childrens = renderContent() || []; - - if (selectRow && selectRow.hideSelectColumn !== true) { - if (isRenderFunctionColumnInLeft(selectRow.selectColumnPosition)) { - childrens.unshift(_react2.default.createElement(cellEl, { key: 'selection' })); - } else { - childrens.push(_react2.default.createElement(cellEl, { key: 'selection' })); - } - } - - if (expandRow.showExpandColumn) { - if (isRenderFunctionColumnInLeft(expandRow.expandColumnPosition)) { - childrens.unshift(_react2.default.createElement(cellEl, { key: 'expansion' })); - } else { - childrens.push(_react2.default.createElement(cellEl, { key: 'expansion' })); - } - } - - return _react2.default.createElement( - 'tr', - rest, - childrens - ); -}; - -RowTemplate.propTypes = { - renderContent: _propTypes2.default.func.isRequired, - cellEl: _propTypes2.default.string.isRequired, - selectRow: _propTypes2.default.object, - expandRow: _propTypes2.default.object -}; - -exports.default = RowTemplate; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row/should-updater.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row/should-updater.js deleted file mode 100644 index e3bea072..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row/should-updater.js +++ /dev/null @@ -1,80 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _utils = require('../utils'); - -var _utils2 = _interopRequireDefault(_utils); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint react/prop-types: 0 */ - - -exports.default = function (ExtendBase) { - return function (_ExtendBase) { - _inherits(RowShouldUpdater, _ExtendBase); - - function RowShouldUpdater() { - _classCallCheck(this, RowShouldUpdater); - - return _possibleConstructorReturn(this, (RowShouldUpdater.__proto__ || Object.getPrototypeOf(RowShouldUpdater)).apply(this, arguments)); - } - - _createClass(RowShouldUpdater, [{ - key: 'shouldUpdateByCellEditing', - value: function shouldUpdateByCellEditing(nextProps) { - if (!(this.props.clickToEdit || this.props.dbclickToEdit)) return false; - return nextProps.editingRowIdx === nextProps.rowIndex || this.props.editingRowIdx === nextProps.rowIndex && nextProps.editingRowIdx === null || this.props.editingRowIdx === nextProps.rowIndex; - } - }, { - key: 'shouldUpdatedBySelfProps', - value: function shouldUpdatedBySelfProps(nextProps) { - return this.props.className !== nextProps.className || !_utils2.default.isEqual(this.props.style, nextProps.style) || !_utils2.default.isEqual(this.props.attrs, nextProps.attrs); - } - - // Only use for simple-row - - }, { - key: 'shouldUpdateByColumnsForSimpleCheck', - value: function shouldUpdateByColumnsForSimpleCheck(nextProps) { - if (this.props.columns.length !== nextProps.columns.length) { - return true; - } - for (var i = 0; i < this.props.columns.length; i += 1) { - if (!_utils2.default.isEqual(this.props.columns[i], nextProps.columns[i])) { - return true; - } - } - return false; - } - }, { - key: 'shouldUpdatedByNormalProps', - value: function shouldUpdatedByNormalProps(nextProps) { - var shouldUpdate = this.props.rowIndex !== nextProps.rowIndex || this.props.editable !== nextProps.editable || !_utils2.default.isEqual(this.props.row, nextProps.row) || this.props.columns.length !== nextProps.columns.length; - - return shouldUpdate; - } - }, { - key: 'shouldUpdateChild', - value: function shouldUpdateChild(nextProps) { - return this.shouldUpdateByCellEditing(nextProps) || this.shouldUpdatedByNormalProps(nextProps); - } - }, { - key: 'shouldRowContentUpdate', - value: function shouldRowContentUpdate(nextProps) { - return this.shouldUpdateChild(nextProps) || this.shouldUpdateByColumnsForSimpleCheck(nextProps); - } - }]); - - return RowShouldUpdater; - }(ExtendBase); -}; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row/simple-row.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row/simple-row.js deleted file mode 100644 index 6a37a7e2..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/row/simple-row.js +++ /dev/null @@ -1,108 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = require('prop-types'); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _rowPureContent = require('./row-pure-content'); - -var _rowPureContent2 = _interopRequireDefault(_rowPureContent); - -var _eventDelegater = require('./event-delegater'); - -var _eventDelegater2 = _interopRequireDefault(_eventDelegater); - -var _shouldUpdater2 = require('./should-updater'); - -var _shouldUpdater3 = _interopRequireDefault(_shouldUpdater2); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint react/prop-types: 0 */ -/* eslint react/no-array-index-key: 0 */ - - -var SimpleRow = function (_shouldUpdater) { - _inherits(SimpleRow, _shouldUpdater); - - function SimpleRow(props) { - _classCallCheck(this, SimpleRow); - - var _this = _possibleConstructorReturn(this, (SimpleRow.__proto__ || Object.getPrototypeOf(SimpleRow)).call(this, props)); - - _this.shouldUpdateRowContent = false; - return _this; - } - - _createClass(SimpleRow, [{ - key: 'shouldComponentUpdate', - value: function shouldComponentUpdate(nextProps) { - this.shouldUpdateRowContent = false; - this.shouldUpdateRowContent = this.shouldRowContentUpdate(nextProps); - if (this.shouldUpdateRowContent) return true; - - return this.shouldUpdatedBySelfProps(nextProps); - } - }, { - key: 'render', - value: function render() { - var _props = this.props, - className = _props.className, - style = _props.style, - attrs = _props.attrs, - visibleColumnSize = _props.visibleColumnSize, - tabIndexCell = _props.tabIndexCell, - rest = _objectWithoutProperties(_props, ['className', 'style', 'attrs', 'visibleColumnSize', 'tabIndexCell']); - - var trAttrs = this.delegate(attrs); - var tabIndexStart = this.props.rowIndex * visibleColumnSize + 1; - - return _react2.default.createElement( - 'tr', - _extends({ style: style, className: className }, trAttrs), - _react2.default.createElement(_rowPureContent2.default, _extends({ - shouldUpdate: this.shouldUpdateRowContent, - tabIndexStart: tabIndexCell ? tabIndexStart : -1 - }, rest)) - ); - } - }]); - - return SimpleRow; -}((0, _shouldUpdater3.default)((0, _eventDelegater2.default)(_react.Component))); - -SimpleRow.propTypes = { - row: _propTypes2.default.object.isRequired, - rowIndex: _propTypes2.default.number.isRequired, - columns: _propTypes2.default.array.isRequired, - style: _propTypes2.default.object, - className: _propTypes2.default.string, - attrs: _propTypes2.default.object -}; - -SimpleRow.defaultProps = { - editable: true, - style: {}, - className: null, - attrs: {} -}; - -exports.default = SimpleRow; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/sort/caret.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/sort/caret.js deleted file mode 100644 index f27335e0..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/sort/caret.js +++ /dev/null @@ -1,52 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _classnames = require('classnames'); - -var _classnames2 = _interopRequireDefault(_classnames); - -var _propTypes = require('prop-types'); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _const = require('../const'); - -var _const2 = _interopRequireDefault(_const); - -var _bootstrap = require('../contexts/bootstrap'); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var SortCaret = function SortCaret(_ref) { - var order = _ref.order; - - var orderClass = (0, _classnames2.default)('react-bootstrap-table-sort-order', { - dropup: order === _const2.default.SORT_ASC - }); - - return _react2.default.createElement( - _bootstrap.BootstrapContext.Consumer, - null, - function (_ref2) { - var bootstrap4 = _ref2.bootstrap4; - return bootstrap4 ? _react2.default.createElement('span', { className: 'caret-4-' + order }) : _react2.default.createElement( - 'span', - { className: orderClass }, - _react2.default.createElement('span', { className: 'caret' }) - ); - } - ); -}; - -SortCaret.propTypes = { - order: _propTypes2.default.oneOf([_const2.default.SORT_ASC, _const2.default.SORT_DESC]).isRequired -}; - -exports.default = SortCaret; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/sort/symbol.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/sort/symbol.js deleted file mode 100644 index 96c7cc8f..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/sort/symbol.js +++ /dev/null @@ -1,39 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _bootstrap = require('../contexts/bootstrap'); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var SortSymbol = function SortSymbol() { - return _react2.default.createElement( - _bootstrap.BootstrapContext.Consumer, - null, - function (_ref) { - var bootstrap4 = _ref.bootstrap4; - return bootstrap4 ? _react2.default.createElement('span', { className: 'order-4' }) : _react2.default.createElement( - 'span', - { className: 'order' }, - _react2.default.createElement( - 'span', - { className: 'dropdown' }, - _react2.default.createElement('span', { className: 'caret' }) - ), - _react2.default.createElement( - 'span', - { className: 'dropup' }, - _react2.default.createElement('span', { className: 'caret' }) - ) - ); - } - ); -}; - -exports.default = SortSymbol; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/store/expand.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/store/expand.js deleted file mode 100644 index 6f7ccadc..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/store/expand.js +++ /dev/null @@ -1,59 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.getExpandedRows = exports.expandableKeys = exports.isAnyExpands = undefined; - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -var _utils = require('../utils'); - -var _utils2 = _interopRequireDefault(_utils); - -var _rows = require('./rows'); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var isAnyExpands = exports.isAnyExpands = function isAnyExpands(data, keyField) { - var expanded = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : []; - - var _loop = function _loop(i) { - var rowKey = _utils2.default.get(data[i], keyField); - if (typeof expanded.find(function (x) { - return x === rowKey; - }) !== 'undefined') { - return { - v: true - }; - } - }; - - for (var i = 0; i < data.length; i += 1) { - var _ret = _loop(i); - - if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v; - } - return false; -}; - -var expandableKeys = exports.expandableKeys = function expandableKeys(data, keyField) { - var skips = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : []; - - if (skips.length === 0) { - return data.map(function (row) { - return _utils2.default.get(row, keyField); - }); - } - return data.filter(function (row) { - return !_utils2.default.contains(skips, _utils2.default.get(row, keyField)); - }).map(function (row) { - return _utils2.default.get(row, keyField); - }); -}; - -var getExpandedRows = exports.getExpandedRows = function getExpandedRows(data, keyField, expanded) { - return expanded.map(function (k) { - return (0, _rows.getRowByRowId)(data, keyField, k); - }); -}; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/store/mutate.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/store/mutate.js deleted file mode 100644 index 685f2771..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/store/mutate.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.editCell = undefined; - -var _utils = require('../utils'); - -var _utils2 = _interopRequireDefault(_utils); - -var _rows = require('./rows'); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var editCell = exports.editCell = function editCell(data, keyField, rowId, dataField, newValue) { - var row = (0, _rows.getRowByRowId)(data, keyField, rowId); - if (row) _utils2.default.set(row, dataField, newValue); -}; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/store/operators.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/store/operators.js deleted file mode 100644 index b6609741..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/store/operators.js +++ /dev/null @@ -1,35 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _rows = require('./rows'); - -var rows = _interopRequireWildcard(_rows); - -var _selection = require('./selection'); - -var selection = _interopRequireWildcard(_selection); - -var _expand = require('./expand'); - -var expand = _interopRequireWildcard(_expand); - -var _mutate = require('./mutate'); - -var mutate = _interopRequireWildcard(_mutate); - -var _sort = require('./sort'); - -var sort = _interopRequireWildcard(_sort); - -var _type = require('./type'); - -var type = _interopRequireWildcard(_type); - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - -exports.default = _extends({}, rows, selection, expand, mutate, sort, type); \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/store/rows.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/store/rows.js deleted file mode 100644 index eca73dfb..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/store/rows.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.getRowByRowId = exports.matchRow = undefined; - -var _utils = require('../utils'); - -var _utils2 = _interopRequireDefault(_utils); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var matchRow = exports.matchRow = function matchRow(keyField, id) { - return function (row) { - return _utils2.default.get(row, keyField) === id; - }; -}; - -var getRowByRowId = exports.getRowByRowId = function getRowByRowId(data, keyField, id) { - return data.find(matchRow(keyField, id)); -}; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/store/selection.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/store/selection.js deleted file mode 100644 index 5cd75d07..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/store/selection.js +++ /dev/null @@ -1,85 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.getSelectedRows = exports.unSelectableKeys = exports.selectableKeys = exports.getSelectionSummary = undefined; - -var _utils = require('../utils'); - -var _utils2 = _interopRequireDefault(_utils); - -var _rows = require('./rows'); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var getSelectionSummary = exports.getSelectionSummary = function getSelectionSummary() { - var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; - var keyField = arguments[1]; - var selected = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : []; - - var allRowsSelected = data.length > 0; - var allRowsNotSelected = true; - - var rowKeys = data.map(function (d) { - return _utils2.default.get(d, keyField); - }); - - var _loop = function _loop(i) { - var curr = rowKeys[i]; - if (typeof selected.find(function (x) { - return x === curr; - }) === 'undefined') { - allRowsSelected = false; - } else { - allRowsNotSelected = false; - } - }; - - for (var i = 0; i < rowKeys.length; i += 1) { - _loop(i); - } - return { - allRowsSelected: allRowsSelected, - allRowsNotSelected: allRowsNotSelected - }; -}; - -var selectableKeys = exports.selectableKeys = function selectableKeys() { - var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; - var keyField = arguments[1]; - var skips = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : []; - - if (skips.length === 0) { - return data.map(function (row) { - return _utils2.default.get(row, keyField); - }); - } - return data.filter(function (row) { - return !_utils2.default.contains(skips, _utils2.default.get(row, keyField)); - }).map(function (row) { - return _utils2.default.get(row, keyField); - }); -}; - -var unSelectableKeys = exports.unSelectableKeys = function unSelectableKeys(selected) { - var skips = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; - - if (skips.length === 0) { - return []; - } - return selected.filter(function (x) { - return _utils2.default.contains(skips, x); - }); -}; - -var getSelectedRows = exports.getSelectedRows = function getSelectedRows() { - var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; - var keyField = arguments[1]; - var selected = arguments[2]; - return selected.map(function (k) { - return (0, _rows.getRowByRowId)(data, keyField, k); - }).filter(function (x) { - return !!x; - }); -}; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/store/sort.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/store/sort.js deleted file mode 100644 index cc3320a5..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/store/sort.js +++ /dev/null @@ -1,72 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.nextOrder = exports.sort = undefined; - -var _utils = require('../utils'); - -var _utils2 = _interopRequireDefault(_utils); - -var _const = require('../const'); - -var _const2 = _interopRequireDefault(_const); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } /* eslint no-nested-ternary: 0 */ -/* eslint no-lonely-if: 0 */ -/* eslint no-underscore-dangle: 0 */ - - -function comparator(a, b) { - var result = void 0; - if (typeof b === 'string') { - result = b.localeCompare(a); - } else { - result = a > b ? -1 : a < b ? 1 : 0; - } - return result; -} - -var sort = exports.sort = function sort(data, sortOrder, _ref) { - var dataField = _ref.dataField, - sortFunc = _ref.sortFunc, - sortValue = _ref.sortValue; - - var _data = [].concat(_toConsumableArray(data)); - _data.sort(function (a, b) { - var result = void 0; - var valueA = _utils2.default.get(a, dataField); - var valueB = _utils2.default.get(b, dataField); - if (sortValue) { - valueA = sortValue(valueA, a); - valueB = sortValue(valueB, b); - } else { - valueA = _utils2.default.isDefined(valueA) ? valueA : ''; - valueB = _utils2.default.isDefined(valueB) ? valueB : ''; - } - - if (sortFunc) { - result = sortFunc(valueA, valueB, sortOrder, dataField, a, b); - } else { - if (sortOrder === _const2.default.SORT_DESC) { - result = comparator(valueA, valueB); - } else { - result = comparator(valueB, valueA); - } - } - return result; - }); - return _data; -}; - -var nextOrder = exports.nextOrder = function nextOrder(currentSortColumn, _ref2) { - var sortOrder = _ref2.sortOrder, - sortColumn = _ref2.sortColumn; - var defaultOrder = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _const2.default.SORT_DESC; - - if (!sortColumn || currentSortColumn.dataField !== sortColumn.dataField) return defaultOrder; - return sortOrder === _const2.default.SORT_DESC ? _const2.default.SORT_ASC : _const2.default.SORT_DESC; -}; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/store/type.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/store/type.js deleted file mode 100644 index d547b2f2..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/store/type.js +++ /dev/null @@ -1,28 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.typeConvert = undefined; - -var _const = require('../const'); - -var _const2 = _interopRequireDefault(_const); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var typeConvert = exports.typeConvert = function typeConvert(type, value) { - if (type === _const2.default.TYPE_STRING) { - return String(value); - } else if (type === _const2.default.TYPE_NUMBER) { - return Number(value); - } else if (type === _const2.default.TYPE_BOOLEAN) { - if (typeof value === 'boolean') { - return value; - } - return value === 'true'; - } else if (type === _const2.default.TYPE_DATE) { - return new Date(value); - } - return value; -}; \ No newline at end of file diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/utils.js b/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/utils.js deleted file mode 100644 index 809e628b..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/lib/src/utils.js +++ /dev/null @@ -1,122 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _underscore = require('underscore'); - -var _underscore2 = _interopRequireDefault(_underscore); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function splitNested(str) { - return [str].join('.').replace(/\[/g, '.').replace(/\]/g, '').split('.'); -} /* eslint no-empty: 0 */ -/* eslint no-param-reassign: 0 */ -/* eslint prefer-rest-params: 0 */ - - -function contains(list, value) { - if (_underscore2.default.includes) { - return _underscore2.default.includes(list, value); - } - - return list.indexOf(value) > -1; -} - -function get(target, field) { - var directGet = target[field]; - if (directGet != null) { - return directGet; - } - - var pathArray = splitNested(field); - var result = void 0; - try { - result = pathArray.reduce(function (curr, path) { - return curr[path]; - }, target); - } catch (e) { } - return result; -} - -function set(target, field, value) { - var safe = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; - - var pathArray = splitNested(field); - var level = 0; - pathArray.reduce(function (a, b) { - level += 1; - if (typeof a[b] === 'undefined') { - if (!safe) throw new Error(a + '.' + b + ' is undefined'); - a[b] = {}; - return a[b]; - } - - if (level === pathArray.length) { - a[b] = value; - return value; - } - return a[b]; - }, target); -} - -function isEmptyObject(obj) { - if (!_underscore2.default.isObject(obj)) return false; - - var hasOwnProperty = Object.prototype.hasOwnProperty; - var keys = Object.keys(obj); - - for (var i = 0; i < keys.length; i += 1) { - if (hasOwnProperty.call(obj, keys[i])) return false; - } - - return true; -} - -function isDefined(value) { - return typeof value !== 'undefined' && value !== null; -} - -function sleep(fn, ms) { - return setTimeout(function () { - return fn(); - }, ms); -} - -function debounce(func, wait, immediate) { - var _this = this, - _arguments = arguments; - - var timeout = void 0; - - return function () { - var later = function later() { - timeout = null; - - if (!immediate) { - func.apply(_this, _arguments); - } - }; - - var callNow = immediate && !timeout; - - clearTimeout(timeout); - timeout = setTimeout(later, wait || 0); - - if (callNow) { - func.apply(_this, _arguments); - } - }; -} - -exports.default = Object.assign(_underscore2.default, { - get: get, - set: set, - isDefined: isDefined, - isEmptyObject: isEmptyObject, - sleep: sleep, - debounce: debounce, - contains: contains -}); diff --git a/global-scoreboard/dependencies/react-bootstrap-table-next/package.json b/global-scoreboard/dependencies/react-bootstrap-table-next/package.json deleted file mode 100644 index ee257beb..00000000 --- a/global-scoreboard/dependencies/react-bootstrap-table-next/package.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "_from": "react-bootstrap-table-next@4.0.3", - "_id": "react-bootstrap-table-next@4.0.3", - "_inBundle": false, - "_integrity": "sha512-uKxC73qUdUfusRf2uzDfMiF9LvTG5vuhTZa0lbAgHWSLLLaKTsI0iHf1e4+c7gP71q8dFsp7StvkP65SxC1JRg==", - "_location": "/react-bootstrap-table-next", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "react-bootstrap-table-next@4.0.3", - "name": "react-bootstrap-table-next", - "escapedName": "react-bootstrap-table-next", - "rawSpec": "4.0.3", - "saveSpec": null, - "fetchSpec": "4.0.3" - }, - "_requiredBy": [ - "#USER", - "/" - ], - "_resolved": "https://registry.npmjs.org/react-bootstrap-table-next/-/react-bootstrap-table-next-4.0.3.tgz", - "_shasum": "b55873b01adfe22a7181904b784a9d24ac2822cf", - "_spec": "react-bootstrap-table-next@4.0.3", - "_where": "E:\\Users\\Avasam\\Documents\\Git\\speedrun.com_global_leaderboard_webapp\\global-scoreboard", - "author": { - "name": "AllenFang" - }, - "bugs": { - "url": "https://github.com/react-bootstrap-table/react-bootstrap-table2/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Allen Fang", - "email": "ayu780129@hotmail.com", - "url": "https://github.com/AllenFang" - }, - { - "name": "Chun-MingChen", - "email": "nick830314@gmail.com", - "url": "https://github.com/Chun-MingChen" - } - ], - "dependencies": { - "classnames": "^2.2.5", - "react-transition-group": "^4.2.0", - "underscore": "1.9.1" - }, - "deprecated": false, - "description": "Next generation of react-bootstrap-table", - "files": [ - "lib/", - "dist/" - ], - "homepage": "https://github.com/react-bootstrap-table/react-bootstrap-table2#readme", - "keywords": [ - "react", - "bootstrap", - "table", - "grid", - "react-component" - ], - "license": "MIT", - "main": "./lib/index.js", - "name": "react-bootstrap-table-next", - "peerDependencies": { - "classnames": "^2.2.5", - "prop-types": "^15.0.0", - "react": "^16.3.0", - "react-dom": "^16.3.0" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/react-bootstrap-table/react-bootstrap-table2.git" - }, - "tags": [ - "react" - ], - "version": "4.0.3" -} diff --git a/global-scoreboard/package-lock.json b/global-scoreboard/package-lock.json index 28632b2d..f351b777 100644 --- a/global-scoreboard/package-lock.json +++ b/global-scoreboard/package-lock.json @@ -2812,6 +2812,12 @@ "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" }, + "@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true + }, "abab": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", @@ -7154,6 +7160,15 @@ "path-exists": "^4.0.0" } }, + "find-yarn-workspace-root": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", + "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", + "dev": true, + "requires": { + "micromatch": "^4.0.2" + } + }, "flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", @@ -10286,6 +10301,15 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" }, + "klaw-sync": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", + "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11" + } + }, "kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", @@ -11484,6 +11508,12 @@ "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" }, + "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=", + "dev": true + }, "p-each-series": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", @@ -11648,6 +11678,76 @@ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" }, + "patch-package": { + "version": "6.4.7", + "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-6.4.7.tgz", + "integrity": "sha512-S0vh/ZEafZ17hbhgqdnpunKDfzHQibQizx9g8yEf5dcVk3KOflOfdufRXQX8CSEkyOQwuM/bNz1GwKvFj54kaQ==", + "dev": true, + "requires": { + "@yarnpkg/lockfile": "^1.1.0", + "chalk": "^2.4.2", + "cross-spawn": "^6.0.5", + "find-yarn-workspace-root": "^2.0.0", + "fs-extra": "^7.0.1", + "is-ci": "^2.0.0", + "klaw-sync": "^6.0.0", + "minimist": "^1.2.0", + "open": "^7.4.2", + "rimraf": "^2.6.3", + "semver": "^5.6.0", + "slash": "^2.0.0", + "tmp": "^0.0.33" + }, + "dependencies": { + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "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" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + } + } + }, "path-browserify": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", @@ -13208,7 +13308,8 @@ } }, "react-bootstrap-table-next": { - "version": "file:dependencies/react-bootstrap-table-next", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/react-bootstrap-table-next/-/react-bootstrap-table-next-4.0.3.tgz", "integrity": "sha512-uKxC73qUdUfusRf2uzDfMiF9LvTG5vuhTZa0lbAgHWSLLLaKTsI0iHf1e4+c7gP71q8dFsp7StvkP65SxC1JRg==", "requires": { "classnames": "^2.2.5", @@ -15593,6 +15694,15 @@ "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=" }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, "tmpl": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", diff --git a/global-scoreboard/package.json b/global-scoreboard/package.json index cce3f6e7..a1a935d7 100644 --- a/global-scoreboard/package.json +++ b/global-scoreboard/package.json @@ -11,7 +11,8 @@ "lint": "eslint src/**", "lint:fix": "npm run lint -- --fix", "test": "react-scripts test", - "eject": "react-scripts eject" + "eject": "react-scripts eject", + "postinstall": "patch-package" }, "//": { "react-bootstrap-table-next": "^4.0.3" @@ -25,7 +26,7 @@ "http-status-codes": "^2.1.4", "react": "^17.0.2", "react-bootstrap": "^1.6.0", - "react-bootstrap-table-next": "file:dependencies/react-bootstrap-table-next", + "react-bootstrap-table-next": "^4.0.3", "react-bootstrap-table2-filter": "^1.3.3", "react-bootstrap-table2-paginator": "^2.1.2", "react-bootstrap-table2-toolkit": "^2.1.3", @@ -49,6 +50,7 @@ "eslint-plugin-sonarjs": "^0.7.0", "eslint-plugin-switch-case": "^1.1.2", "eslint-plugin-unicorn": "^32.0.1", + "patch-package": "^6.4.7", "typescript": "^4.2.4" }, "eslintConfig": { diff --git a/global-scoreboard/patches/react-bootstrap-table-next+4.0.3.patch b/global-scoreboard/patches/react-bootstrap-table-next+4.0.3.patch new file mode 100644 index 00000000..4c797d72 --- /dev/null +++ b/global-scoreboard/patches/react-bootstrap-table-next+4.0.3.patch @@ -0,0 +1,59 @@ +diff --git a/node_modules/react-bootstrap-table-next/lib/src/body.js b/node_modules/react-bootstrap-table-next/lib/src/body.js +index ab2ea0c..0789828 100644 +--- a/node_modules/react-bootstrap-table-next/lib/src/body.js ++++ b/node_modules/react-bootstrap-table-next/lib/src/body.js +@@ -137,7 +137,7 @@ var Body = function (_React$Component) { + additionalRowProps.selectRow = selectRow; + } + +- content = data.map(function (row, index) { ++ content = data.filter(row => row).map(function (row, index) { + var key = _utils2.default.get(row, keyField); + var baseRowProps = _extends({ + key: key, +diff --git a/node_modules/react-bootstrap-table-next/lib/src/store/sort.js b/node_modules/react-bootstrap-table-next/lib/src/store/sort.js +index cc3320a..7d5edbc 100644 +--- a/node_modules/react-bootstrap-table-next/lib/src/store/sort.js ++++ b/node_modules/react-bootstrap-table-next/lib/src/store/sort.js +@@ -20,14 +20,13 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr + /* eslint no-underscore-dangle: 0 */ + + ++const collator = new Intl.Collator(); + function comparator(a, b) { +- var result = void 0; + if (typeof b === 'string') { +- result = b.localeCompare(a); ++ return collator.compare(a, b); + } else { +- result = a > b ? -1 : a < b ? 1 : 0; ++ return a > b ? -1 : a < b ? 1 : 0; + } +- return result; + } + + var sort = exports.sort = function sort(data, sortOrder, _ref) { +diff --git a/node_modules/react-bootstrap-table-next/lib/src/utils.js b/node_modules/react-bootstrap-table-next/lib/src/utils.js +index 5271e86..ef1f22a 100644 +--- a/node_modules/react-bootstrap-table-next/lib/src/utils.js ++++ b/node_modules/react-bootstrap-table-next/lib/src/utils.js +@@ -11,7 +11,7 @@ var _underscore2 = _interopRequireDefault(_underscore); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + + function splitNested(str) { +- return [str].join('.').replace(/\[/g, '.').replace(/\]/g, '').split('.'); ++ return str.replace(']', '').split(/\[\./); + } /* eslint no-empty: 0 */ + /* eslint no-param-reassign: 0 */ + /* eslint prefer-rest-params: 0 */ +@@ -68,8 +68,8 @@ function isEmptyObject(obj) { + var hasOwnProperty = Object.prototype.hasOwnProperty; + var keys = Object.keys(obj); + +- for (var i = 0; i < keys.length; i += 1) { +- if (hasOwnProperty.call(obj, keys[i])) return false; ++ for (var key of keys) { ++ if (hasOwnProperty.call(obj, key)) return false; + } + + return true; diff --git a/global-scoreboard/src/Dashboard/Dashboard.tsx b/global-scoreboard/src/Dashboard/Dashboard.tsx index ca0372d6..19cbb7d5 100644 --- a/global-scoreboard/src/Dashboard/Dashboard.tsx +++ b/global-scoreboard/src/Dashboard/Dashboard.tsx @@ -153,51 +153,58 @@ const Dashboard = (props: DashboardProps) => { setAlertVariant('danger') if (err instanceof Error) { setAlertMessage(`${err.name}: ${err.message}`) - } else if (err.status === StatusCodes.IM_A_TEAPOT) { - setAlertVariant('warning') - setAlertMessage(
-

You know the drill...

-

- -
- speedrun.com -

-

Oops! The site's under a lot of pressure right now. Please try again in a minute.

- Kappa -
) - } else if (err.status === StatusCodes.GATEWAY_TIMEOUT) { - setAlertVariant('warning') - setAlertMessage(`Error ${StatusCodes.GATEWAY_TIMEOUT}: ${ReasonPhrases.GATEWAY_TIMEOUT}. The webworker probably timed out, ` + - 'which can happen if updating takes more than 5 minutes. ' + - 'Please try again as next attempt should take less time since ' + - 'all calls to speedrun.com are cached for a day or until server restart.') - } else if (err.status === StatusCodes.CONFLICT) { - void err.text().then(errorString => { + } else switch (err.status) { + case StatusCodes.IM_A_TEAPOT: setAlertVariant('warning') - switch (errorString) { - case 'current_user': - setAlertMessage('It seems you are already updating a runner. Please try again in 5 minutes.') - break - case 'name_or_id': - setAlertMessage('It seems that runner is already being updated (possibly by someone else). Please try again in 5 minutes.') - break - default: + setAlertMessage(
+

You know the drill...

+

+ +
+ speedrun.com +

+

Oops! The site's under a lot of pressure right now. Please try again in a minute.

+ Kappa +
) + + break + case StatusCodes.GATEWAY_TIMEOUT: + setAlertVariant('warning') + setAlertMessage(`Error ${StatusCodes.GATEWAY_TIMEOUT}: ${ReasonPhrases.GATEWAY_TIMEOUT}. The webworker probably timed out, ` + + 'which can happen if updating takes more than 5 minutes. ' + + 'Please try again as next attempt should take less time since ' + + 'all calls to speedrun.com are cached for a day or until server restart.') + + break + case StatusCodes.CONFLICT: + void err.text().then(errorString => { + setAlertVariant('warning') + switch (errorString) { + case 'current_user': + setAlertMessage('It seems you are already updating a runner. Please try again in 5 minutes.') + break + case 'name_or_id': + setAlertMessage('It seems that runner is already being updated (possibly by someone else). Please try again in 5 minutes.') + break + default: + setAlertMessage(errorString) + } + }) + + break + default: + void err.text().then(errorString => { + try { + const result = JSON.parse(errorString) as UpdateRunnerResult + setAlertVariant(result.state ?? 'danger') + setAlertMessage(result.message) + if (err.status === StatusCodes.BAD_REQUEST && result.score < 1) { + setPlayersState(playersState.filter(player => player.userId !== result.userId)) + } + } catch { setAlertMessage(errorString) - } - }) - } else { - void err.text().then(errorString => { - try { - const result = JSON.parse(errorString) as UpdateRunnerResult - setAlertVariant(result.state ?? 'danger') - setAlertMessage(result.message) - if (err.status === StatusCodes.BAD_REQUEST && result.score < 1) { - setPlayersState(playersState.filter(player => player.userId !== result.userId)) } - } catch { - setAlertMessage(errorString) - } - }) + }) } }) .finally(() => setUpdateStartTime(null)) diff --git a/global-scoreboard/src/Dashboard/Scoreboard.tsx b/global-scoreboard/src/Dashboard/Scoreboard.tsx index 0a82b42d..f1ed2589 100644 --- a/global-scoreboard/src/Dashboard/Scoreboard.tsx +++ b/global-scoreboard/src/Dashboard/Scoreboard.tsx @@ -39,7 +39,7 @@ type FormatExtraDataProps = { handleOnBefriend: (friendId: string) => void } -const dateFormat = { year: 'numeric', month: 'long', day: 'numeric' } +const dateFormat: Intl.DateTimeFormatOptions = { year: 'numeric', month: 'long', day: 'numeric' } const nameFormatter = (_cell: unknown, row: Player | undefined, _rowIndex: number, formatExtraData?: FormatExtraDataProps) => row && diff --git a/global-scoreboard/src/GameSearch/GameSearch.tsx b/global-scoreboard/src/GameSearch/GameSearch.tsx index 5ce43f5b..a1858798 100644 --- a/global-scoreboard/src/GameSearch/GameSearch.tsx +++ b/global-scoreboard/src/GameSearch/GameSearch.tsx @@ -205,6 +205,14 @@ const fetchValueNamesForRun = async (runId: string) => { }) } +type LocalStorageItem = Record | unknown[] | string + +const getLocalStorageItem = function (key: string, fallback: T) { + const item = localStorage.getItem(key) + if (item != null && item.constructor === fallback.constructor) return JSON.parse(item) as T + return fallback +} + const GameSearch = () => { const [gameValues, setGameValues] = useState([]) const [platforms, setPlatforms] = useState() @@ -215,11 +223,11 @@ const GameSearch = () => { const [maxTimeText, setMaxTimeText] = useState('') useEffect(() => { - setGameMap(JSON.parse(localStorage.getItem('games') ?? '{}')) - setCategoryMap(JSON.parse(localStorage.getItem('categories') ?? '{}')) - doPlatformSelection(JSON.parse(localStorage.getItem('selectedPlatforms') ?? '[]')) - doMinTimeChange(JSON.parse(localStorage.getItem('selectedMinTime') ?? '""')) - doMaxTimeChange(JSON.parse(localStorage.getItem('selectedMaxTime') ?? '""')) + setGameMap(getLocalStorageItem('games', {})) + setCategoryMap(getLocalStorageItem('categories', {})) + doPlatformSelection(getLocalStorageItem('selectedPlatforms', [])) + doMinTimeChange(getLocalStorageItem('selectedMinTime', '')) + doMaxTimeChange(getLocalStorageItem('selectedMaxTime', '')) void getAllGameValues().then(setGameValues) void getAllPlatforms().then(setPlatforms) }, []) From 49efebc4277c4b215fe23a1c81721a7ea9480cd3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 May 2021 14:43:53 +0000 Subject: [PATCH 11/17] Bump @types/node from 14.17.0 to 15.6.0 in /global-scoreboard Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 14.17.0 to 15.6.0. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) Signed-off-by: dependabot[bot] --- global-scoreboard/package-lock.json | 6 +++--- global-scoreboard/package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/global-scoreboard/package-lock.json b/global-scoreboard/package-lock.json index aeb8842a..3574e3b4 100644 --- a/global-scoreboard/package-lock.json +++ b/global-scoreboard/package-lock.json @@ -2324,9 +2324,9 @@ "integrity": "sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==" }, "@types/node": { - "version": "14.17.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.0.tgz", - "integrity": "sha512-w8VZUN/f7SSbvVReb9SWp6cJFevxb4/nkG65yLAya//98WgocKm5PLDAtSs5CtJJJM+kHmJjO/6mmYW4MHShZA==" + "version": "15.6.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.6.0.tgz", + "integrity": "sha512-gCYSfQpy+LYhOFTKAeE8BkyGqaxmlFxe+n4DKM6DR0wzw/HISUE/hAmkC/KT8Sw5PCJblqg062b3z9gucv3k0A==" }, "@types/normalize-package-data": { "version": "2.4.0", diff --git a/global-scoreboard/package.json b/global-scoreboard/package.json index 85043eaf..ae8ada5c 100644 --- a/global-scoreboard/package.json +++ b/global-scoreboard/package.json @@ -36,7 +36,7 @@ }, "devDependencies": { "@types/jest": "^26.0.23", - "@types/node": "^14.0.0", + "@types/node": "^15.6.0", "@types/react": "^17.0.6", "@types/react-dom": "^17.0.5", "@typescript-eslint/eslint-plugin": "^4.24.0", From 7d4056a5c38f03f8d6e21b058e94eac3538b2685 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 May 2021 14:43:57 +0000 Subject: [PATCH 12/17] Bump @types/node from 14.17.0 to 15.6.0 in /tournament-scheduler Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 14.17.0 to 15.6.0. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) Signed-off-by: dependabot[bot] --- tournament-scheduler/package-lock.json | 6 +++--- tournament-scheduler/package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tournament-scheduler/package-lock.json b/tournament-scheduler/package-lock.json index 8b887f57..b2be2f2d 100644 --- a/tournament-scheduler/package-lock.json +++ b/tournament-scheduler/package-lock.json @@ -2367,9 +2367,9 @@ "integrity": "sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==" }, "@types/node": { - "version": "14.17.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.0.tgz", - "integrity": "sha512-w8VZUN/f7SSbvVReb9SWp6cJFevxb4/nkG65yLAya//98WgocKm5PLDAtSs5CtJJJM+kHmJjO/6mmYW4MHShZA==" + "version": "15.6.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.6.0.tgz", + "integrity": "sha512-gCYSfQpy+LYhOFTKAeE8BkyGqaxmlFxe+n4DKM6DR0wzw/HISUE/hAmkC/KT8Sw5PCJblqg062b3z9gucv3k0A==" }, "@types/normalize-package-data": { "version": "2.4.0", diff --git a/tournament-scheduler/package.json b/tournament-scheduler/package.json index f4708058..078a7029 100644 --- a/tournament-scheduler/package.json +++ b/tournament-scheduler/package.json @@ -32,7 +32,7 @@ }, "devDependencies": { "@types/jest": "^26.0.23", - "@types/node": "^14.0.0", + "@types/node": "^15.6.0", "@types/react": "^17.0.6", "@types/react-add-to-calendar": "^0.1.0", "@types/react-div-100vh": "^0.3.0", From 8be8da32071551291b93eb9d64f59f2f1e06bb07 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 May 2021 14:44:32 +0000 Subject: [PATCH 13/17] Bump @types/react-div-100vh from 0.3.0 to 0.4.0 in /tournament-scheduler Bumps [@types/react-div-100vh](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react-div-100vh) from 0.3.0 to 0.4.0. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react-div-100vh) Signed-off-by: dependabot[bot] --- tournament-scheduler/package-lock.json | 8 ++++---- tournament-scheduler/package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/tournament-scheduler/package-lock.json b/tournament-scheduler/package-lock.json index 8b887f57..e2835da5 100644 --- a/tournament-scheduler/package-lock.json +++ b/tournament-scheduler/package-lock.json @@ -2423,12 +2423,12 @@ } }, "@types/react-div-100vh": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@types/react-div-100vh/-/react-div-100vh-0.3.0.tgz", - "integrity": "sha512-ooouxtvbj+mP/OmdAh91+huVECechS2Svb55zTWMaRPXIG4XXL4+TESR7navmm6kvlnZRhDNb7/2qUOTrQm17g==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@types/react-div-100vh/-/react-div-100vh-0.4.0.tgz", + "integrity": "sha512-mkgDNAqtgoKnTu58DBKT+/AbVxEN1cqc+pNqTKvwPduxgE9WiAVKs4k1wGJ95oJzWX/apnwGM99A560B6c01xw==", "dev": true, "requires": { - "@types/react": "*" + "react-div-100vh": "*" } }, "@types/react-dom": { diff --git a/tournament-scheduler/package.json b/tournament-scheduler/package.json index f4708058..7ba183ff 100644 --- a/tournament-scheduler/package.json +++ b/tournament-scheduler/package.json @@ -35,7 +35,7 @@ "@types/node": "^14.0.0", "@types/react": "^17.0.6", "@types/react-add-to-calendar": "^0.1.0", - "@types/react-div-100vh": "^0.3.0", + "@types/react-div-100vh": "^0.4.0", "@types/react-dom": "^17.0.5", "@types/react-text-mask": "^5.4.7", "@typescript-eslint/eslint-plugin": "^4.24.0", From eaa00fe9761bdcf387260014a6a504152315bf88 Mon Sep 17 00:00:00 2001 From: Avasam Date: Tue, 1 Jun 2021 02:10:00 -0400 Subject: [PATCH 14/17] Updated libraries and linting --- .eslintrc.json | 16 +- .vscode/extensions.json | 1 + .vscode/settings.json | 37 +- README.md | 2 +- flask_app.py | 1 - global-scoreboard/.eslintignore | 1 - global-scoreboard/package-lock.json | 469 ++++++++++----- global-scoreboard/package.json | 28 +- .../react-bootstrap-table-next+4.0.3.patch | 8 +- global-scoreboard/src/Dashboard/Dashboard.tsx | 13 +- .../src/Dashboard/Scoreboard.tsx | 9 +- .../src/GameSearch/GameSearch.tsx | 78 +-- .../src/GameSearch/ScoreDropCalculator.tsx | 12 +- global-scoreboard/src/index.tsx | 4 +- .../src/react-bootstrap-table-next.d.ts | 9 +- global-scoreboard/src/utils/Time.ts | 8 +- tournament-scheduler/.eslintignore | 1 - tournament-scheduler/package-lock.json | 535 ++++++++++++++---- tournament-scheduler/package.json | 24 +- tournament-scheduler/src/App.tsx | 2 +- .../src/LoginForm/LoginForm.tsx | 10 +- .../ScheduleWizard/RegistrationList.tsx | 5 +- .../ScheduleRegistration.tsx | 24 +- tournament-scheduler/src/index.tsx | 4 +- 24 files changed, 934 insertions(+), 367 deletions(-) delete mode 100644 global-scoreboard/.eslintignore delete mode 100644 tournament-scheduler/.eslintignore diff --git a/.eslintrc.json b/.eslintrc.json index 115f2e3b..6ff5e3ff 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -18,14 +18,12 @@ "plugin:switch-case/recommended", "plugin:unicorn/recommended" ], - "parser": "@typescript-eslint/parser", "parserOptions": { "ecmaVersion": 2021, "sourceType": "module", "ecmaFeatures": { "jsx": true - }, - "project": "./tsconfig.json" + } }, "settings": { "react": { @@ -178,7 +176,8 @@ "objects": "always-multiline", "imports": "always-multiline", "exports": "always-multiline", - "functions": "only-multiline" + "functions": "only-multiline", + "enums": "always-multiline" } ], "@typescript-eslint/consistent-type-definitions": [ @@ -371,6 +370,15 @@ "error", "prefer-single" ], + "max-len": [ + "error", + { + "code": 120, + "tabWidth": 2, + "ignoreComments": false, + "ignorePattern": "^import .*?$" + } + ], // These rule does not correctly treat react's function components. See https://github.com/SonarSource/SonarJS/issues/2238 // Max very high as most of the react code lives in functions. "max-lines": [ diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 797d284f..1462433b 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -8,6 +8,7 @@ "davidanson.vscode-markdownlint", "eamodio.gitlens", "meganrogge.template-string-converter", + "shardulm94.trailing-spaces", "hookyqr.minify" ], "unwantedRecommendations": [ diff --git a/.vscode/settings.json b/.vscode/settings.json index 70f601c3..4b929779 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -17,10 +17,11 @@ "[python]": { "editor.tabSize": 4, }, - "[py]": { - "editor.tabSize": 4, - }, "editor.formatOnSave": true, + // For node_modules + "[javascript]": { + "editor.formatOnSave": false, + }, "javascript.preferences.quoteStyle": "single", "typescript.preferences.quoteStyle": "single", "html.format.wrapAttributes": "force-expand-multiline", @@ -30,7 +31,7 @@ "source.fixAll.markdownlint": true }, "python.linting.pylintEnabled": false, - "//": "Using flake8 as other linters are incomplete or have false positives with Requests", + // "Using flake8 as other linters are incomplete or have false positives with Requests", "python.linting.flake8Enabled": true, "python.linting.enabled": true, "python.linting.pycodestyleEnabled": false, @@ -53,6 +54,32 @@ "mode": "auto" } ], + // Copy those over to your user settings + "sonarlint.rules": { + "python:S1192": { + "level": "off" + }, + "python:S3776": { + "level": "off" + }, + "python:S107": { + "level": "off" + }, + "typescript:S3735": { + "level": "off" + }, + "typescript:S3358": { + "level": "off" + }, + "typescript:S3776": { + "level": "off" + } + }, "files.insertFinalNewline": true, - "python.pythonPath": "", + "trailing-spaces.deleteModifiedLinesOnly": true, + "trailing-spaces.includeEmptyLines": true, + "trailing-spaces.trimOnSave": true, + "trailing-spaces.syntaxIgnore": [ + "markdown" + ], } diff --git a/README.md b/README.md index 558fcf91..146af7f3 100644 --- a/README.md +++ b/README.md @@ -56,7 +56,7 @@ Note: The soft cutoff works great on games such as Barney. But is too punishing Get yourself a [MySQL server](https://dev.mysql.com/downloads/mysql/) (PythonAnywhere uses version 5.6.40) Install [Python](https://www.python.org/downloads/) 3.7+ Install PIP (this should come bundled with python 3.4+) -Run this command through the python interpreter (or prepend with `py -m` in a terminal): `pip install flask flask_cors flask_sqlalchemy sqlalchemy httplib2 simplejson mysql-connector requests pyjwt` +Run this command in a terminal: `pip3 install flask flask_cors flask_sqlalchemy sqlalchemy httplib2 simplejson mysql-connector requests pyjwt` Copy `configs.template.py` as `configs.py` and update the file as needed. If needed, copy `.env.development` as `.env.development.local` and update the file. diff --git a/flask_app.py b/flask_app.py index d9782a7d..42d44970 100644 --- a/flask_app.py +++ b/flask_app.py @@ -20,7 +20,6 @@ # # Contact: # samuel.06@hotmail.com -# api.core_api import api as core_api ########################################################################## from api.core_api import api as core_api from api.game_search_api import api as game_search_api diff --git a/global-scoreboard/.eslintignore b/global-scoreboard/.eslintignore deleted file mode 100644 index b3a52671..00000000 --- a/global-scoreboard/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -*.css diff --git a/global-scoreboard/package-lock.json b/global-scoreboard/package-lock.json index 3574e3b4..7e493d10 100644 --- a/global-scoreboard/package-lock.json +++ b/global-scoreboard/package-lock.json @@ -2324,9 +2324,9 @@ "integrity": "sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==" }, "@types/node": { - "version": "15.6.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-15.6.0.tgz", - "integrity": "sha512-gCYSfQpy+LYhOFTKAeE8BkyGqaxmlFxe+n4DKM6DR0wzw/HISUE/hAmkC/KT8Sw5PCJblqg062b3z9gucv3k0A==" + "version": "15.6.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.6.1.tgz", + "integrity": "sha512-7EIraBEyRHEe7CH+Fm1XvgqU6uwZN8Q7jppJGcqjROMT29qhAuuOxYB1uEY5UMYQKEmA5D+5tBnhdaPXSsLONA==" }, "@types/normalize-package-data": { "version": "2.4.0", @@ -2354,9 +2354,9 @@ "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==" }, "@types/react": { - "version": "17.0.6", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.6.tgz", - "integrity": "sha512-u/TtPoF/hrvb63LdukET6ncaplYsvCvmkceasx8oG84/ZCsoLxz9Z/raPBP4lTAiWW1Jb889Y9svHmv8R26dWw==", + "version": "17.0.8", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.8.tgz", + "integrity": "sha512-3sx4c0PbXujrYAKwXxNONXUtRp9C+hE2di0IuxFyf5BELD+B+AXL8G7QrmSKhVwKZDbv0igiAjQAMhXj8Yg3aw==", "requires": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -2479,69 +2479,111 @@ "integrity": "sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==" }, "@typescript-eslint/eslint-plugin": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.24.0.tgz", - "integrity": "sha512-qbCgkPM7DWTsYQGjx9RTuQGswi+bEt0isqDBeo+CKV0953zqI0Tp7CZ7Fi9ipgFA6mcQqF4NOVNwS/f2r6xShw==", + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.26.0.tgz", + "integrity": "sha512-yA7IWp+5Qqf+TLbd8b35ySFOFzUfL7i+4If50EqvjT6w35X8Lv0eBHb6rATeWmucks37w+zV+tWnOXI9JlG6Eg==", "requires": { - "@typescript-eslint/experimental-utils": "4.24.0", - "@typescript-eslint/scope-manager": "4.24.0", - "debug": "^4.1.1", + "@typescript-eslint/experimental-utils": "4.26.0", + "@typescript-eslint/scope-manager": "4.26.0", + "debug": "^4.3.1", "functional-red-black-tree": "^1.0.1", - "lodash": "^4.17.15", - "regexpp": "^3.0.0", - "semver": "^7.3.2", - "tsutils": "^3.17.1" + "lodash": "^4.17.21", + "regexpp": "^3.1.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" }, "dependencies": { + "@types/json-schema": { + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", + "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==" + }, "@typescript-eslint/experimental-utils": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.24.0.tgz", - "integrity": "sha512-IwTT2VNDKH1h8RZseMH4CcYBz6lTvRoOLDuuqNZZoThvfHEhOiZPQCow+5El3PtyxJ1iDr6UXZwYtE3yZQjhcw==", + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.26.0.tgz", + "integrity": "sha512-TH2FO2rdDm7AWfAVRB5RSlbUhWxGVuxPNzGT7W65zVfl8H/WeXTk1e69IrcEVsBslrQSTDKQSaJD89hwKrhdkw==", "requires": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/scope-manager": "4.24.0", - "@typescript-eslint/types": "4.24.0", - "@typescript-eslint/typescript-estree": "4.24.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" + "@types/json-schema": "^7.0.7", + "@typescript-eslint/scope-manager": "4.26.0", + "@typescript-eslint/types": "4.26.0", + "@typescript-eslint/typescript-estree": "4.26.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" } }, "@typescript-eslint/scope-manager": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.24.0.tgz", - "integrity": "sha512-9+WYJGDnuC9VtYLqBhcSuM7du75fyCS/ypC8c5g7Sdw7pGL4NDTbeH38eJPfzIydCHZDoOgjloxSAA3+4l/zsA==", + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.26.0.tgz", + "integrity": "sha512-G6xB6mMo4xVxwMt5lEsNTz3x4qGDt0NSGmTBNBPJxNsrTXJSm21c6raeYroS2OwQsOyIXqKZv266L/Gln1BWqg==", "requires": { - "@typescript-eslint/types": "4.24.0", - "@typescript-eslint/visitor-keys": "4.24.0" + "@typescript-eslint/types": "4.26.0", + "@typescript-eslint/visitor-keys": "4.26.0" } }, "@typescript-eslint/types": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.24.0.tgz", - "integrity": "sha512-tkZUBgDQKdvfs8L47LaqxojKDE+mIUmOzdz7r+u+U54l3GDkTpEbQ1Jp3cNqqAU9vMUCBA1fitsIhm7yN0vx9Q==" + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.26.0.tgz", + "integrity": "sha512-rADNgXl1kS/EKnDr3G+m7fB9yeJNnR9kF7xMiXL6mSIWpr3Wg5MhxyfEXy/IlYthsqwBqHOr22boFbf/u6O88A==" }, "@typescript-eslint/typescript-estree": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.24.0.tgz", - "integrity": "sha512-kBDitL/by/HK7g8CYLT7aKpAwlR8doshfWz8d71j97n5kUa5caHWvY0RvEUEanL/EqBJoANev8Xc/mQ6LLwXGA==", - "requires": { - "@typescript-eslint/types": "4.24.0", - "@typescript-eslint/visitor-keys": "4.24.0", - "debug": "^4.1.1", - "globby": "^11.0.1", + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.26.0.tgz", + "integrity": "sha512-GHUgahPcm9GfBuy3TzdsizCcPjKOAauG9xkz9TR8kOdssz2Iz9jRCSQm6+aVFa23d5NcSpo1GdHGSQKe0tlcbg==", + "requires": { + "@typescript-eslint/types": "4.26.0", + "@typescript-eslint/visitor-keys": "4.26.0", + "debug": "^4.3.1", + "globby": "^11.0.3", "is-glob": "^4.0.1", - "semver": "^7.3.2", - "tsutils": "^3.17.1" + "semver": "^7.3.5", + "tsutils": "^3.21.0" } }, "@typescript-eslint/visitor-keys": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.24.0.tgz", - "integrity": "sha512-4ox1sjmGHIxjEDBnMCtWFFhErXtKA1Ec0sBpuz0fqf3P+g3JFGyTxxbF06byw0FRsPnnbq44cKivH7Ks1/0s6g==", + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.26.0.tgz", + "integrity": "sha512-cw4j8lH38V1ycGBbF+aFiLUls9Z0Bw8QschP3mkth50BbWzgFS33ISIgBzUMuQ2IdahoEv/rXstr8Zhlz4B1Zg==", "requires": { - "@typescript-eslint/types": "4.24.0", + "@typescript-eslint/types": "4.26.0", "eslint-visitor-keys": "^2.0.0" } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "requires": { + "eslint-visitor-keys": "^2.0.0" + } + }, + "globby": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz", + "integrity": "sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==", + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "requires": { + "tslib": "^1.8.1" + } } } }, @@ -2559,52 +2601,81 @@ } }, "@typescript-eslint/parser": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.24.0.tgz", - "integrity": "sha512-dj1ZIh/4QKeECLb2f/QjRwMmDArcwc2WorWPRlB8UNTZlY1KpTVsbX7e3ZZdphfRw29aTFUSNuGB8w9X5sS97w==", - "requires": { - "@typescript-eslint/scope-manager": "4.24.0", - "@typescript-eslint/types": "4.24.0", - "@typescript-eslint/typescript-estree": "4.24.0", - "debug": "^4.1.1" + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.26.0.tgz", + "integrity": "sha512-b4jekVJG9FfmjUfmM4VoOItQhPlnt6MPOBUL0AQbiTmm+SSpSdhHYlwayOm4IW9KLI/4/cRKtQCmDl1oE2OlPg==", + "requires": { + "@typescript-eslint/scope-manager": "4.26.0", + "@typescript-eslint/types": "4.26.0", + "@typescript-eslint/typescript-estree": "4.26.0", + "debug": "^4.3.1" }, "dependencies": { "@typescript-eslint/scope-manager": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.24.0.tgz", - "integrity": "sha512-9+WYJGDnuC9VtYLqBhcSuM7du75fyCS/ypC8c5g7Sdw7pGL4NDTbeH38eJPfzIydCHZDoOgjloxSAA3+4l/zsA==", + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.26.0.tgz", + "integrity": "sha512-G6xB6mMo4xVxwMt5lEsNTz3x4qGDt0NSGmTBNBPJxNsrTXJSm21c6raeYroS2OwQsOyIXqKZv266L/Gln1BWqg==", "requires": { - "@typescript-eslint/types": "4.24.0", - "@typescript-eslint/visitor-keys": "4.24.0" + "@typescript-eslint/types": "4.26.0", + "@typescript-eslint/visitor-keys": "4.26.0" } }, "@typescript-eslint/types": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.24.0.tgz", - "integrity": "sha512-tkZUBgDQKdvfs8L47LaqxojKDE+mIUmOzdz7r+u+U54l3GDkTpEbQ1Jp3cNqqAU9vMUCBA1fitsIhm7yN0vx9Q==" + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.26.0.tgz", + "integrity": "sha512-rADNgXl1kS/EKnDr3G+m7fB9yeJNnR9kF7xMiXL6mSIWpr3Wg5MhxyfEXy/IlYthsqwBqHOr22boFbf/u6O88A==" }, "@typescript-eslint/typescript-estree": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.24.0.tgz", - "integrity": "sha512-kBDitL/by/HK7g8CYLT7aKpAwlR8doshfWz8d71j97n5kUa5caHWvY0RvEUEanL/EqBJoANev8Xc/mQ6LLwXGA==", - "requires": { - "@typescript-eslint/types": "4.24.0", - "@typescript-eslint/visitor-keys": "4.24.0", - "debug": "^4.1.1", - "globby": "^11.0.1", + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.26.0.tgz", + "integrity": "sha512-GHUgahPcm9GfBuy3TzdsizCcPjKOAauG9xkz9TR8kOdssz2Iz9jRCSQm6+aVFa23d5NcSpo1GdHGSQKe0tlcbg==", + "requires": { + "@typescript-eslint/types": "4.26.0", + "@typescript-eslint/visitor-keys": "4.26.0", + "debug": "^4.3.1", + "globby": "^11.0.3", "is-glob": "^4.0.1", - "semver": "^7.3.2", - "tsutils": "^3.17.1" + "semver": "^7.3.5", + "tsutils": "^3.21.0" } }, "@typescript-eslint/visitor-keys": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.24.0.tgz", - "integrity": "sha512-4ox1sjmGHIxjEDBnMCtWFFhErXtKA1Ec0sBpuz0fqf3P+g3JFGyTxxbF06byw0FRsPnnbq44cKivH7Ks1/0s6g==", + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.26.0.tgz", + "integrity": "sha512-cw4j8lH38V1ycGBbF+aFiLUls9Z0Bw8QschP3mkth50BbWzgFS33ISIgBzUMuQ2IdahoEv/rXstr8Zhlz4B1Zg==", "requires": { - "@typescript-eslint/types": "4.24.0", + "@typescript-eslint/types": "4.26.0", "eslint-visitor-keys": "^2.0.0" } + }, + "globby": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz", + "integrity": "sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==", + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "requires": { + "tslib": "^1.8.1" + } } } }, @@ -3922,15 +3993,37 @@ } }, "browserslist": { - "version": "4.16.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.3.tgz", - "integrity": "sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw==", + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", "requires": { - "caniuse-lite": "^1.0.30001181", - "colorette": "^1.2.1", - "electron-to-chromium": "^1.3.649", + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", "escalade": "^3.1.1", - "node-releases": "^1.1.70" + "node-releases": "^1.1.71" + }, + "dependencies": { + "caniuse-lite": { + "version": "1.0.30001232", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001232.tgz", + "integrity": "sha512-e4Gyp7P8vqC2qV2iHA+cJNf/yqUKOShXQOJHQt81OHxlIZl/j/j3soEA0adAQi8CPUQgvOdDENyQ5kd6a6mNSg==" + }, + "colorette": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==" + }, + "electron-to-chromium": { + "version": "1.3.743", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.743.tgz", + "integrity": "sha512-K2wXfo9iZQzNJNx67+Pld0DRF+9bYinj62gXCdgPhcu1vidwVuLPHQPPFnCdO55njWigXXpfBiT90jGUPbw8Zg==" + }, + "node-releases": { + "version": "1.1.72", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.72.tgz", + "integrity": "sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==" + } } }, "bser": { @@ -5240,9 +5333,9 @@ "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=" }, "dns-packet": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", - "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", + "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", "requires": { "ip": "^1.1.0", "safe-buffer": "^5.0.1" @@ -6085,9 +6178,9 @@ "dev": true }, "eslint-plugin-react": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.23.2.tgz", - "integrity": "sha512-AfjgFQB+nYszudkxRkTFu0UR1zEQig0ArVMPloKhxwlwkzaw/fBiH0QWcBBhZONlXqQC51+nfqFrkn4EzHcGBw==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.24.0.tgz", + "integrity": "sha512-KJJIx2SYx7PBx3ONe/mEeMz4YE0Lcr7feJTCMyyKb/341NcjuAgim3Acgan89GfPv7nxXK2+0slu0CWXYM4x+Q==", "requires": { "array-includes": "^3.1.3", "array.prototype.flatmap": "^1.2.4", @@ -6095,12 +6188,12 @@ "has": "^1.0.3", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.0.4", - "object.entries": "^1.1.3", + "object.entries": "^1.1.4", "object.fromentries": "^2.0.4", - "object.values": "^1.1.3", + "object.values": "^1.1.4", "prop-types": "^15.7.2", "resolve": "^2.0.0-next.3", - "string.prototype.matchall": "^4.0.4" + "string.prototype.matchall": "^4.0.5" }, "dependencies": { "array-includes": { @@ -6133,9 +6226,9 @@ } }, "es-abstract": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", - "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", + "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", "requires": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", @@ -6145,20 +6238,25 @@ "has-symbols": "^1.0.2", "is-callable": "^1.2.3", "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.2", - "is-string": "^1.0.5", - "object-inspect": "^1.9.0", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.10.3", "object-keys": "^1.1.1", "object.assign": "^4.1.2", "string.prototype.trimend": "^1.0.4", "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.0" + "unbox-primitive": "^1.0.1" }, "dependencies": { "has-symbols": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" + }, + "is-string": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", + "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==" } } }, @@ -6193,15 +6291,29 @@ } } }, + "object-inspect": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", + "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==" + }, + "object.entries": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.4.tgz", + "integrity": "sha512-h4LWKWE+wKQGhtMjZEBud7uLGhqyLwj8fpHOarZhD2uY3C9cRtk57VQ89ke3moByLXMedqs3XCHzyb4AmA2DjA==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.2" + } + }, "object.values": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.3.tgz", - "integrity": "sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz", + "integrity": "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==", "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has": "^1.0.3" + "es-abstract": "^1.18.2" } }, "resolve": { @@ -6230,6 +6342,24 @@ "call-bind": "^1.0.2", "define-properties": "^1.1.3" } + }, + "unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "requires": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + }, + "dependencies": { + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" + } + } } } }, @@ -11230,9 +11360,9 @@ } }, "es-abstract": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", - "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", + "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", "requires": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", @@ -11242,14 +11372,14 @@ "has-symbols": "^1.0.2", "is-callable": "^1.2.3", "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.2", - "is-string": "^1.0.5", - "object-inspect": "^1.9.0", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.10.3", "object-keys": "^1.1.1", "object.assign": "^4.1.2", "string.prototype.trimend": "^1.0.4", "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.0" + "unbox-primitive": "^1.0.1" }, "dependencies": { "get-intrinsic": { @@ -11283,6 +11413,16 @@ "has-symbols": "^1.0.2" } }, + "is-string": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", + "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==" + }, + "object-inspect": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", + "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==" + }, "string.prototype.trimend": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", @@ -11300,6 +11440,17 @@ "call-bind": "^1.0.2", "define-properties": "^1.1.3" } + }, + "unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "requires": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + } } } }, @@ -15130,14 +15281,15 @@ } }, "string.prototype.matchall": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.4.tgz", - "integrity": "sha512-pknFIWVachNcyqRfaQSeu/FUfpvJTe4uskUSZ9Wc1RijsPuzbZ8TyYT8WCNnntCjUEqQ3vUHMAfVj2+wLAisPQ==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.5.tgz", + "integrity": "sha512-Z5ZaXO0svs0M2xd/6By3qpeKpLKd9mO4v4q3oMEQrk8Ck4xOD5d5XeBOOjGrmVZZ/AHB1S0CgG4N5r1G9N3E2Q==", "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has-symbols": "^1.0.1", + "es-abstract": "^1.18.2", + "get-intrinsic": "^1.1.1", + "has-symbols": "^1.0.2", "internal-slot": "^1.0.3", "regexp.prototype.flags": "^1.3.1", "side-channel": "^1.0.4" @@ -15153,9 +15305,9 @@ } }, "es-abstract": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", - "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", + "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", "requires": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", @@ -15165,33 +15317,31 @@ "has-symbols": "^1.0.2", "is-callable": "^1.2.3", "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.2", - "is-string": "^1.0.5", - "object-inspect": "^1.9.0", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.10.3", "object-keys": "^1.1.1", "object.assign": "^4.1.2", "string.prototype.trimend": "^1.0.4", "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.0" - }, - "dependencies": { - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" - } + "unbox-primitive": "^1.0.1" + } + }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" } }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" + }, "is-callable": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", @@ -15204,15 +15354,18 @@ "requires": { "call-bind": "^1.0.2", "has-symbols": "^1.0.2" - }, - "dependencies": { - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" - } } }, + "is-string": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", + "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==" + }, + "object-inspect": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", + "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==" + }, "regexp.prototype.flags": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", @@ -15239,6 +15392,17 @@ "call-bind": "^1.0.2", "define-properties": "^1.1.3" } + }, + "unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "requires": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + } } } }, @@ -15893,9 +16057,9 @@ } }, "typescript": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.4.tgz", - "integrity": "sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.2.tgz", + "integrity": "sha512-zZ4hShnmnoVnAHpVHWpTcxdv7dWP60S2FsydQLV8V5PbS3FifjWFFRiHSWpDJahly88PRyV5teTSLoq4eG7mKw==", "dev": true }, "unbox-primitive": { @@ -16815,8 +16979,7 @@ }, "ssri": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "resolved": "", "requires": { "figgy-pudding": "^3.5.1" } diff --git a/global-scoreboard/package.json b/global-scoreboard/package.json index ae8ada5c..67e3b2d5 100644 --- a/global-scoreboard/package.json +++ b/global-scoreboard/package.json @@ -5,18 +5,16 @@ "private": true, "scripts": { "start": "react-scripts start", - "build:dev": "set REACT_APP_BASE_URL=https://AvasamDev.pythonanywhere.com&& npm run build:prod", - "build:prod": "react-scripts build && npm run compress-build-folder", + "build:dev": "set REACT_APP_BASE_URL=https://AvasamDev.pythonanywhere.com& npm run build:prod", + "build:prod": "react-scripts build & npm run compress-build-folder", "compress-build-folder": "powershell Compress-Archive -Update -Path .\\build\\ -CompressionLevel Optimal -DestinationPath ..\\global-scoreboard-build.zip", - "lint": "eslint src/**", + "lint": "eslint src/ --ext .ts,.tsx --ignore-path ../.gitignore", "lint:fix": "npm run lint -- --fix", + "upgrade": "npx npm-check-updates -u -x bootstrap & npm i & npm audit fix", "test": "react-scripts test", "eject": "react-scripts eject", "postinstall": "patch-package" }, - "//": { - "react-bootstrap-table-next": "^4.0.3" - }, "dependencies": { "@fortawesome/fontawesome-svg-core": "^1.2.35", "@fortawesome/free-regular-svg-icons": "^5.15.3", @@ -36,28 +34,32 @@ }, "devDependencies": { "@types/jest": "^26.0.23", - "@types/node": "^15.6.0", - "@types/react": "^17.0.6", + "@types/node": "^15.6.1", + "@types/react": "^17.0.8", "@types/react-dom": "^17.0.5", - "@typescript-eslint/eslint-plugin": "^4.24.0", - "@typescript-eslint/parser": "^4.24.0", + "@typescript-eslint/eslint-plugin": "^4.26.0", + "@typescript-eslint/parser": "^4.26.0", "eslint-plugin-extra-rules": "0.0.0-development", "eslint-plugin-jsx-a11y": "^6.4.1", "eslint-plugin-prefer-arrow": "^1.2.3", - "eslint-plugin-react": "^7.23.2", + "eslint-plugin-react": "^7.24.0", "eslint-plugin-react-hooks": "^4.2.0", "eslint-plugin-simple-import-sort": "^7.0.0", "eslint-plugin-sonarjs": "^0.7.0", "eslint-plugin-switch-case": "^1.1.2", "eslint-plugin-unicorn": "^32.0.1", "patch-package": "^6.4.7", - "typescript": "^4.2.4" + "typescript": "^4.3.2" }, "eslintConfig": { "extends": [ "../.eslintrc.json", "react-app" - ] + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "project": "./tsconfig.json" + } }, "browserslist": { "production": [ diff --git a/global-scoreboard/patches/react-bootstrap-table-next+4.0.3.patch b/global-scoreboard/patches/react-bootstrap-table-next+4.0.3.patch index 4c797d72..9017de82 100644 --- a/global-scoreboard/patches/react-bootstrap-table-next+4.0.3.patch +++ b/global-scoreboard/patches/react-bootstrap-table-next+4.0.3.patch @@ -1,18 +1,18 @@ diff --git a/node_modules/react-bootstrap-table-next/lib/src/body.js b/node_modules/react-bootstrap-table-next/lib/src/body.js -index ab2ea0c..0789828 100644 +index ab2ea0c..141cb99 100644 --- a/node_modules/react-bootstrap-table-next/lib/src/body.js +++ b/node_modules/react-bootstrap-table-next/lib/src/body.js @@ -137,7 +137,7 @@ var Body = function (_React$Component) { additionalRowProps.selectRow = selectRow; } - + - content = data.map(function (row, index) { + content = data.filter(row => row).map(function (row, index) { var key = _utils2.default.get(row, keyField); var baseRowProps = _extends({ key: key, diff --git a/node_modules/react-bootstrap-table-next/lib/src/store/sort.js b/node_modules/react-bootstrap-table-next/lib/src/store/sort.js -index cc3320a..7d5edbc 100644 +index cc3320a..8e205bb 100644 --- a/node_modules/react-bootstrap-table-next/lib/src/store/sort.js +++ b/node_modules/react-bootstrap-table-next/lib/src/store/sort.js @@ -20,14 +20,13 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr @@ -34,7 +34,7 @@ index cc3320a..7d5edbc 100644 var sort = exports.sort = function sort(data, sortOrder, _ref) { diff --git a/node_modules/react-bootstrap-table-next/lib/src/utils.js b/node_modules/react-bootstrap-table-next/lib/src/utils.js -index 5271e86..ef1f22a 100644 +index 5271e86..973ac11 100644 --- a/node_modules/react-bootstrap-table-next/lib/src/utils.js +++ b/node_modules/react-bootstrap-table-next/lib/src/utils.js @@ -11,7 +11,7 @@ var _underscore2 = _interopRequireDefault(_underscore); diff --git a/global-scoreboard/src/Dashboard/Dashboard.tsx b/global-scoreboard/src/Dashboard/Dashboard.tsx index 19cbb7d5..9668de95 100644 --- a/global-scoreboard/src/Dashboard/Dashboard.tsx +++ b/global-scoreboard/src/Dashboard/Dashboard.tsx @@ -97,12 +97,14 @@ const Dashboard = (props: DashboardProps) => { const handleOnUpdateRunner = (runnerNameOrId: string) => { setAlertVariant('info') - setAlertMessage(`Updating "${runnerNameOrId}". This may take up to 5 minutes, depending on the amount of runs to analyse. Please Wait...`) + setAlertMessage(`Updating "${runnerNameOrId}". This may take up to 5 minutes, ` + + 'depending on the amount of runs to analyse. Please Wait...') if (window.process.env.REACT_APP_BYPASS_UPDATE_RESTRICTIONS !== 'true' && !validateRunnerNotRecentlyUpdated(runnerNameOrId, playersState)) { setAlertVariant('warning') const cantUpdateTime = Configs.lastUpdatedDays[0] - setAlertMessage(`Runner ${runnerNameOrId} has already been updated in the past ${cantUpdateTime} day${cantUpdateTime === 1 ? '' : 's'}`) + setAlertMessage(`Runner ${runnerNameOrId} has already been updated in the past ` + + `${cantUpdateTime} day${cantUpdateTime === 1 ? '' : 's'}`) return } setUpdateStartTime(Date.now()) @@ -170,8 +172,8 @@ const Dashboard = (props: DashboardProps) => { break case StatusCodes.GATEWAY_TIMEOUT: setAlertVariant('warning') - setAlertMessage(`Error ${StatusCodes.GATEWAY_TIMEOUT}: ${ReasonPhrases.GATEWAY_TIMEOUT}. The webworker probably timed out, ` + - 'which can happen if updating takes more than 5 minutes. ' + + setAlertMessage(`Error ${StatusCodes.GATEWAY_TIMEOUT}: ${ReasonPhrases.GATEWAY_TIMEOUT}. ` + + 'The webworker probably timed out, which can happen if updating takes more than 5 minutes. ' + 'Please try again as next attempt should take less time since ' + 'all calls to speedrun.com are cached for a day or until server restart.') @@ -184,7 +186,8 @@ const Dashboard = (props: DashboardProps) => { setAlertMessage('It seems you are already updating a runner. Please try again in 5 minutes.') break case 'name_or_id': - setAlertMessage('It seems that runner is already being updated (possibly by someone else). Please try again in 5 minutes.') + setAlertMessage('It seems this runner is already being updated (possibly by someone else). ' + + 'Please try again in 5 minutes.') break default: setAlertMessage(errorString) diff --git a/global-scoreboard/src/Dashboard/Scoreboard.tsx b/global-scoreboard/src/Dashboard/Scoreboard.tsx index f1ed2589..db6703ba 100644 --- a/global-scoreboard/src/Dashboard/Scoreboard.tsx +++ b/global-scoreboard/src/Dashboard/Scoreboard.tsx @@ -4,7 +4,7 @@ import './Scoreboard.css' import type { Component, MutableRefObject } from 'react' import { forwardRef, useRef, useState } from 'react' import { Spinner } from 'react-bootstrap' -import type { Column } from 'react-bootstrap-table-next' +import type { Column, ColumnFormatter } from 'react-bootstrap-table-next' import BootstrapTable from 'react-bootstrap-table-next' import paginationFactory, { PaginationListStandalone, PaginationProvider, PaginationTotalStandalone, SizePerPageDropdownStandalone } from 'react-bootstrap-table2-paginator' import type { SearchProps, ToolkitProviderProps } from 'react-bootstrap-table2-toolkit' @@ -41,7 +41,7 @@ type FormatExtraDataProps = { const dateFormat: Intl.DateTimeFormatOptions = { year: 'numeric', month: 'long', day: 'numeric' } -const nameFormatter = (_cell: unknown, row: Player | undefined, _rowIndex: number, formatExtraData?: FormatExtraDataProps) => +const nameFormatter: ColumnFormatter = (_cell, row, _rowIndex, formatExtraData) => row && formatExtraData && {sortCaret(getSortOrder())} -const scoreFormatter = (_cell: unknown, row: Player | undefined) => +// eslint-disable-next-line prefer-arrow/prefer-arrow-functions +const scoreFormatter: ColumnFormatter = (_cell, row) => row && @@ -85,7 +86,7 @@ const columns: Column[] = [ { dataField: 'lastUpdate', text: 'Last Updated', - formatter: (cell: Date | undefined) => cell?.toLocaleDateString('en-us', dateFormat), + formatter: (cell => cell?.toLocaleDateString('en-us', dateFormat)) as ColumnFormatter, classes: columnClass, searchable: false, sort: true, diff --git a/global-scoreboard/src/GameSearch/GameSearch.tsx b/global-scoreboard/src/GameSearch/GameSearch.tsx index a1858798..235ab260 100644 --- a/global-scoreboard/src/GameSearch/GameSearch.tsx +++ b/global-scoreboard/src/GameSearch/GameSearch.tsx @@ -7,7 +7,7 @@ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' import type { ChangeEventHandler, Dispatch, SetStateAction } from 'react' import { useEffect, useState } from 'react' import { Container, FormControl, InputGroup, Spinner } from 'react-bootstrap' -import type { Column } from 'react-bootstrap-table-next' +import type { Column, ColumnFormatter } from 'react-bootstrap-table-next' import BootstrapTable from 'react-bootstrap-table-next' import filterFactory, { Comparator, multiSelectFilter, numberFilter } from 'react-bootstrap-table2-filter' import paginationFactory, { PaginationListStandalone, PaginationProvider, PaginationTotalStandalone, SizePerPageDropdownStandalone } from 'react-bootstrap-table2-paginator' @@ -63,27 +63,30 @@ let platformFilter: SelectFilterFunction let minTimeFilter: NumberFilterFunction let maxTimeFilter: NumberFilterFunction -const runIdFormatter = (_cell: unknown, row: GameValueRow | undefined, _rowIndex: number, formatExtraData?: FormatExtraDataProps) => { - if (!row || !formatExtraData) return '' - if (!formatExtraData.gameMap[row.gameId] || !formatExtraData.categoryMap[row.categoryId]) { - void fetchValueNamesForRun(row.runId) - .then(results => { - if (!results) return - const [game, category] = results - formatExtraData.setGameMap(previousGames => { - const newGames = { ...previousGames, ...game } - localStorage.setItem('games', JSON.stringify(newGames)) - return newGames +const runIdFormatter: ColumnFormatter = + (_cell, row, _rowIndex, formatExtraData) => { + if (!row || !formatExtraData) return '' + if (!formatExtraData.gameMap[row.gameId] || !formatExtraData.categoryMap[row.categoryId]) { + void fetchValueNamesForRun(row.runId) + .then(results => { + if (!results) return + const [game, category] = results + formatExtraData.setGameMap(previousGames => { + const newGames = { ...previousGames, ...game } + localStorage.setItem('games', JSON.stringify(newGames)) + return newGames + }) + formatExtraData.setCategoryMap(previousCategories => { + const newCategories = { ...previousCategories, ...category } + localStorage.setItem('categories', JSON.stringify(newCategories)) + return newCategories + }) }) - formatExtraData.setCategoryMap(previousCategories => { - const newCategories = { ...previousCategories, ...category } - localStorage.setItem('categories', JSON.stringify(newCategories)) - return newCategories - }) - }) + } + return + + } - return -} const columns: Column[] = [ { @@ -95,29 +98,32 @@ const columns: Column[] = [ { dataField: 'gameId', text: 'Game', - formatter: (_, row: GameValueRow | undefined, __, formatExtraData?: FormatExtraDataProps) => + formatter: ((_, row, __, formatExtraData) => (row && formatExtraData && formatExtraData.gameMap[row.gameId]) || - row?.gameId, + row?.gameId + ) as ColumnFormatter, }, { dataField: 'categoryId', text: 'Category', - formatter: (_, row: GameValueRow | undefined, __, formatExtraData?: FormatExtraDataProps) => + formatter: ((_, row, __, formatExtraData) => (row && formatExtraData && formatExtraData.categoryMap[row.categoryId]) || - row?.categoryId, + row?.categoryId + ) as ColumnFormatter, }, { dataField: 'platformId', text: 'Platform', - formatter: (_, row: GameValueRow | undefined, __, formatExtraData?: FormatExtraDataProps) => + formatter: ((_, row, __, formatExtraData) => (row?.platformId && formatExtraData && formatExtraData.platforms[row.platformId]) || - '-', + '-' + ) as ColumnFormatter, filter: multiSelectFilter({ options: {}, getFilter: filter => platformFilter = filter, @@ -129,9 +135,10 @@ const columns: Column[] = [ text: 'WR Time', searchable: false, sort: true, - formatter: (_, row: GameValueRow | undefined) => + formatter: ((_, row) => row && - secondsToTimeString(row.wrTime), + secondsToTimeString(row.wrTime) + ) as ColumnFormatter, filter: numberFilter({ getFilter: filter => maxTimeFilter = filter, style: { 'display': 'none' }, @@ -142,9 +149,10 @@ const columns: Column[] = [ text: 'WR Points/Time', searchable: false, sort: true, - formatter: (_, row: GameValueRow | undefined) => + formatter: ((_, row) => row && - `${math.perSecondToPerMinute(row.wrPointsPerSecond)} pt/m`, + `${math.perSecondToPerMinute(row.wrPointsPerSecond)} pt/m` + ) as ColumnFormatter, }, { dataField: 'wrPoints', @@ -157,18 +165,20 @@ const columns: Column[] = [ text: 'WR Points/Avg Time', searchable: false, sort: true, - formatter: (_, row: GameValueRow | undefined) => + formatter: ((_, row) => row && - `${math.perSecondToPerMinute(row.meanPointsPerSecond)} pt/m`, + `${math.perSecondToPerMinute(row.meanPointsPerSecond)} pt/m` + ) as ColumnFormatter, }, { dataField: 'meanTime', text: 'Avg Time', searchable: false, sort: true, - formatter: (_, row: GameValueRow | undefined) => + formatter: ((_, row) => row && - secondsToTimeString(row.meanTime), + secondsToTimeString(row.meanTime) + ) as ColumnFormatter, filter: numberFilter({ getFilter: filter => minTimeFilter = filter, style: { 'display': 'none' }, diff --git a/global-scoreboard/src/GameSearch/ScoreDropCalculator.tsx b/global-scoreboard/src/GameSearch/ScoreDropCalculator.tsx index b2bca313..df1170cb 100644 --- a/global-scoreboard/src/GameSearch/ScoreDropCalculator.tsx +++ b/global-scoreboard/src/GameSearch/ScoreDropCalculator.tsx @@ -82,6 +82,7 @@ const ScoreDropCalculator = () => { getLeaderboardRuns(run.game, run.category, filterSubCatVariables(run.values, subCategories)).then(records => { /* eslint-disable extra-rules/no-commented-out-code */ /* eslint-disable id-length */ + /* eslint-disable max-len */ /* eslint-disable @typescript-eslint/no-magic-numbers */ const primaryTimes = records .slice(0, Math.floor(records.length * 0.95)) @@ -133,6 +134,7 @@ const ScoreDropCalculator = () => { /* eslint-enable extra-rules/no-commented-out-code */ /* eslint-enable id-length */ + /* eslint-enable max-len */ /* eslint-enable @typescript-eslint/no-magic-numbers */ }))) .catch(() => setRequiredTime(Number.NaN)) @@ -143,7 +145,9 @@ const ScoreDropCalculator = () => { return
) => event.preventDefault()}> - Enter a run's ID to calculate the required time, for a new player, to drop the score value of said run: + + Enter a run's ID to calculate the required time, for a new player, to drop the score value of said run: + { {secondsToTimeString(requiredTime)} or less. } : - The required time to reduce the points of the run '{calculatedRunId}' could not be calculated. - Either because the leaderboard has less than 4 runners, it is an individual level, or something just went wrong. + The required time to reduce the points of the run + '{calculatedRunId}' could not be calculated. + Either because the leaderboard has less than 4 runners, + it is an individual level, or something just went wrong. )}
diff --git a/global-scoreboard/src/index.tsx b/global-scoreboard/src/index.tsx index b8577566..80c50e4a 100644 --- a/global-scoreboard/src/index.tsx +++ b/global-scoreboard/src/index.tsx @@ -14,7 +14,9 @@ if ((process.env.REACT_APP_BASE_URL?.includes('127.0.0.1') || process.env.REACT_ window.location.hostname !== '127.0.0.1' ) { window.process.env.REACT_APP_BASE_URL = `${window.location.protocol}//${window.location.hostname}:5000` - console.info(`REACT_APP_BASE_URL was changed from ${process.env.REACT_APP_BASE_URL} to ${window.process.env.REACT_APP_BASE_URL}`) + console.info('REACT_APP_BASE_URL was changed ' + + `from ${process.env.REACT_APP_BASE_URL} ` + + `to ${window.process.env.REACT_APP_BASE_URL}`) } ReactDOM.render(, document.getElementById('root')) diff --git a/global-scoreboard/src/react-bootstrap-table-next.d.ts b/global-scoreboard/src/react-bootstrap-table-next.d.ts index dd75f68c..af092f46 100644 --- a/global-scoreboard/src/react-bootstrap-table-next.d.ts +++ b/global-scoreboard/src/react-bootstrap-table-next.d.ts @@ -10,6 +10,7 @@ /* eslint-disable unicorn/no-static-only-class */ /* eslint-disable unicorn/prevent-abbreviations */ /* eslint-disable extra-rules/no-commented-out-code */ +/* eslint-disable max-len */ // Origin: https://gitlab.com/fluidattacks/integrates/-/blob/master/integrates/front/src/typings/react-bootstrap-table-2/index.d.ts // Modified: @@ -42,6 +43,7 @@ // - Pagination is a React Component // - Added SelectFilterFunction and getFilter to SelectFilterProps // - Shorthand method signature is forbidden. Use a function property instead.eslint@typescript-eslint/method-signature-style +// - Added ColumnFormatter type alias type RowFieldValue = ReactText | Date | TODO type TODO = any @@ -174,7 +176,7 @@ interface ComparatorTypes { } // eslint-disable-next-line no-shadow declare enum PredefinedComparatorTypes { - LIKE = 'LIKE', EQ = '=', NE = '!=', GT = '>', GE = '>=', LT = '<', LE = '<=' + LIKE = 'LIKE', EQ = '=', NE = '!=', GT = '>', GE = '>=', LT = '<', LE = '<=', } type PredefinedComparators = typeof PredefinedComparatorTypes // EDITOR @@ -201,7 +203,7 @@ interface ExpandRowOptions { showExpandColumn?: boolean } declare module 'react-bootstrap-table-next' { - import type { ReactElement, FC } from 'react' + import type { FC, ReactElement, ReactNode } from 'react' import { Component } from 'react' export default class BootstrapTable extends Component { table: { @@ -263,6 +265,7 @@ declare module 'react-bootstrap-table-next' { selectRow?: SelectRowOptions expandRow?: ExpandRowOptions } + export type ColumnFormatter = (cell: T | undefined, row: T | undefined, rowIndex: number, formatExtraData: F | undefined) => ReactNode export interface Column { align?: string dataField: string @@ -275,7 +278,7 @@ declare module 'react-bootstrap-table-next' { searchable?: boolean filter?: FC formatExtraData?: TODO - formatter?: (cell: TODO, row: TODO, rowIndex: number, formatExtraData: any) => ReactNode + formatter?: ColumnFormatter headerFormatter?: (column: Column, colIndex: number, components: any) => ReactNode headerStyle?: (colum: TODO, colIndex: number) => any sortFunc?: (a: T, b: T, order: SortOrder, rowA: Row, rowB: Row) => number diff --git a/global-scoreboard/src/utils/Time.ts b/global-scoreboard/src/utils/Time.ts index 953b13f2..f827ef2a 100644 --- a/global-scoreboard/src/utils/Time.ts +++ b/global-scoreboard/src/utils/Time.ts @@ -1,11 +1,11 @@ import math from './Math' export const secondsToTimeString = (totalSeconds: number) => { - const hours = Math.trunc(totalSeconds / math.SECONDS_IN_HOUR) + const hours = Math.trunc(totalSeconds / math.SECONDS_IN_HOUR).toString().padStart(2, '0') totalSeconds %= math.SECONDS_IN_HOUR - const minutes = Math.trunc(totalSeconds / math.SECONDS_IN_MINUTE) - const seconds = Math.trunc(totalSeconds % math.SECONDS_IN_MINUTE) - return `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}` + const minutes = Math.trunc(totalSeconds / math.SECONDS_IN_MINUTE).toString().padStart(2, '0') + const seconds = Math.trunc(totalSeconds % math.SECONDS_IN_MINUTE).toString().padStart(2, '0') + return `${hours}:${minutes}:${seconds}` } export const timeStringToSeconds = (timeString: string) => { diff --git a/tournament-scheduler/.eslintignore b/tournament-scheduler/.eslintignore deleted file mode 100644 index b3a52671..00000000 --- a/tournament-scheduler/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -*.css diff --git a/tournament-scheduler/package-lock.json b/tournament-scheduler/package-lock.json index b1f634a8..8f2b63ea 100644 --- a/tournament-scheduler/package-lock.json +++ b/tournament-scheduler/package-lock.json @@ -2367,9 +2367,9 @@ "integrity": "sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==" }, "@types/node": { - "version": "15.6.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-15.6.0.tgz", - "integrity": "sha512-gCYSfQpy+LYhOFTKAeE8BkyGqaxmlFxe+n4DKM6DR0wzw/HISUE/hAmkC/KT8Sw5PCJblqg062b3z9gucv3k0A==" + "version": "15.6.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.6.1.tgz", + "integrity": "sha512-7EIraBEyRHEe7CH+Fm1XvgqU6uwZN8Q7jppJGcqjROMT29qhAuuOxYB1uEY5UMYQKEmA5D+5tBnhdaPXSsLONA==" }, "@types/normalize-package-data": { "version": "2.4.0", @@ -2397,9 +2397,9 @@ "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==" }, "@types/react": { - "version": "17.0.6", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.6.tgz", - "integrity": "sha512-u/TtPoF/hrvb63LdukET6ncaplYsvCvmkceasx8oG84/ZCsoLxz9Z/raPBP4lTAiWW1Jb889Y9svHmv8R26dWw==", + "version": "17.0.8", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.8.tgz", + "integrity": "sha512-3sx4c0PbXujrYAKwXxNONXUtRp9C+hE2di0IuxFyf5BELD+B+AXL8G7QrmSKhVwKZDbv0igiAjQAMhXj8Yg3aw==", "requires": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -2559,69 +2559,106 @@ "integrity": "sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==" }, "@typescript-eslint/eslint-plugin": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.24.0.tgz", - "integrity": "sha512-qbCgkPM7DWTsYQGjx9RTuQGswi+bEt0isqDBeo+CKV0953zqI0Tp7CZ7Fi9ipgFA6mcQqF4NOVNwS/f2r6xShw==", + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.26.0.tgz", + "integrity": "sha512-yA7IWp+5Qqf+TLbd8b35ySFOFzUfL7i+4If50EqvjT6w35X8Lv0eBHb6rATeWmucks37w+zV+tWnOXI9JlG6Eg==", "requires": { - "@typescript-eslint/experimental-utils": "4.24.0", - "@typescript-eslint/scope-manager": "4.24.0", - "debug": "^4.1.1", + "@typescript-eslint/experimental-utils": "4.26.0", + "@typescript-eslint/scope-manager": "4.26.0", + "debug": "^4.3.1", "functional-red-black-tree": "^1.0.1", - "lodash": "^4.17.15", - "regexpp": "^3.0.0", - "semver": "^7.3.2", - "tsutils": "^3.17.1" + "lodash": "^4.17.21", + "regexpp": "^3.1.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" }, "dependencies": { "@typescript-eslint/experimental-utils": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.24.0.tgz", - "integrity": "sha512-IwTT2VNDKH1h8RZseMH4CcYBz6lTvRoOLDuuqNZZoThvfHEhOiZPQCow+5El3PtyxJ1iDr6UXZwYtE3yZQjhcw==", + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.26.0.tgz", + "integrity": "sha512-TH2FO2rdDm7AWfAVRB5RSlbUhWxGVuxPNzGT7W65zVfl8H/WeXTk1e69IrcEVsBslrQSTDKQSaJD89hwKrhdkw==", "requires": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/scope-manager": "4.24.0", - "@typescript-eslint/types": "4.24.0", - "@typescript-eslint/typescript-estree": "4.24.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" + "@types/json-schema": "^7.0.7", + "@typescript-eslint/scope-manager": "4.26.0", + "@typescript-eslint/types": "4.26.0", + "@typescript-eslint/typescript-estree": "4.26.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" } }, "@typescript-eslint/scope-manager": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.24.0.tgz", - "integrity": "sha512-9+WYJGDnuC9VtYLqBhcSuM7du75fyCS/ypC8c5g7Sdw7pGL4NDTbeH38eJPfzIydCHZDoOgjloxSAA3+4l/zsA==", + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.26.0.tgz", + "integrity": "sha512-G6xB6mMo4xVxwMt5lEsNTz3x4qGDt0NSGmTBNBPJxNsrTXJSm21c6raeYroS2OwQsOyIXqKZv266L/Gln1BWqg==", "requires": { - "@typescript-eslint/types": "4.24.0", - "@typescript-eslint/visitor-keys": "4.24.0" + "@typescript-eslint/types": "4.26.0", + "@typescript-eslint/visitor-keys": "4.26.0" } }, "@typescript-eslint/types": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.24.0.tgz", - "integrity": "sha512-tkZUBgDQKdvfs8L47LaqxojKDE+mIUmOzdz7r+u+U54l3GDkTpEbQ1Jp3cNqqAU9vMUCBA1fitsIhm7yN0vx9Q==" + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.26.0.tgz", + "integrity": "sha512-rADNgXl1kS/EKnDr3G+m7fB9yeJNnR9kF7xMiXL6mSIWpr3Wg5MhxyfEXy/IlYthsqwBqHOr22boFbf/u6O88A==" }, "@typescript-eslint/typescript-estree": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.24.0.tgz", - "integrity": "sha512-kBDitL/by/HK7g8CYLT7aKpAwlR8doshfWz8d71j97n5kUa5caHWvY0RvEUEanL/EqBJoANev8Xc/mQ6LLwXGA==", - "requires": { - "@typescript-eslint/types": "4.24.0", - "@typescript-eslint/visitor-keys": "4.24.0", - "debug": "^4.1.1", - "globby": "^11.0.1", + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.26.0.tgz", + "integrity": "sha512-GHUgahPcm9GfBuy3TzdsizCcPjKOAauG9xkz9TR8kOdssz2Iz9jRCSQm6+aVFa23d5NcSpo1GdHGSQKe0tlcbg==", + "requires": { + "@typescript-eslint/types": "4.26.0", + "@typescript-eslint/visitor-keys": "4.26.0", + "debug": "^4.3.1", + "globby": "^11.0.3", "is-glob": "^4.0.1", - "semver": "^7.3.2", - "tsutils": "^3.17.1" + "semver": "^7.3.5", + "tsutils": "^3.21.0" } }, "@typescript-eslint/visitor-keys": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.24.0.tgz", - "integrity": "sha512-4ox1sjmGHIxjEDBnMCtWFFhErXtKA1Ec0sBpuz0fqf3P+g3JFGyTxxbF06byw0FRsPnnbq44cKivH7Ks1/0s6g==", + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.26.0.tgz", + "integrity": "sha512-cw4j8lH38V1ycGBbF+aFiLUls9Z0Bw8QschP3mkth50BbWzgFS33ISIgBzUMuQ2IdahoEv/rXstr8Zhlz4B1Zg==", "requires": { - "@typescript-eslint/types": "4.24.0", + "@typescript-eslint/types": "4.26.0", "eslint-visitor-keys": "^2.0.0" } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "requires": { + "eslint-visitor-keys": "^2.0.0" + } + }, + "globby": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz", + "integrity": "sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==", + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "requires": { + "tslib": "^1.8.1" + } } } }, @@ -2639,52 +2676,81 @@ } }, "@typescript-eslint/parser": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.24.0.tgz", - "integrity": "sha512-dj1ZIh/4QKeECLb2f/QjRwMmDArcwc2WorWPRlB8UNTZlY1KpTVsbX7e3ZZdphfRw29aTFUSNuGB8w9X5sS97w==", - "requires": { - "@typescript-eslint/scope-manager": "4.24.0", - "@typescript-eslint/types": "4.24.0", - "@typescript-eslint/typescript-estree": "4.24.0", - "debug": "^4.1.1" + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.26.0.tgz", + "integrity": "sha512-b4jekVJG9FfmjUfmM4VoOItQhPlnt6MPOBUL0AQbiTmm+SSpSdhHYlwayOm4IW9KLI/4/cRKtQCmDl1oE2OlPg==", + "requires": { + "@typescript-eslint/scope-manager": "4.26.0", + "@typescript-eslint/types": "4.26.0", + "@typescript-eslint/typescript-estree": "4.26.0", + "debug": "^4.3.1" }, "dependencies": { "@typescript-eslint/scope-manager": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.24.0.tgz", - "integrity": "sha512-9+WYJGDnuC9VtYLqBhcSuM7du75fyCS/ypC8c5g7Sdw7pGL4NDTbeH38eJPfzIydCHZDoOgjloxSAA3+4l/zsA==", + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.26.0.tgz", + "integrity": "sha512-G6xB6mMo4xVxwMt5lEsNTz3x4qGDt0NSGmTBNBPJxNsrTXJSm21c6raeYroS2OwQsOyIXqKZv266L/Gln1BWqg==", "requires": { - "@typescript-eslint/types": "4.24.0", - "@typescript-eslint/visitor-keys": "4.24.0" + "@typescript-eslint/types": "4.26.0", + "@typescript-eslint/visitor-keys": "4.26.0" } }, "@typescript-eslint/types": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.24.0.tgz", - "integrity": "sha512-tkZUBgDQKdvfs8L47LaqxojKDE+mIUmOzdz7r+u+U54l3GDkTpEbQ1Jp3cNqqAU9vMUCBA1fitsIhm7yN0vx9Q==" + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.26.0.tgz", + "integrity": "sha512-rADNgXl1kS/EKnDr3G+m7fB9yeJNnR9kF7xMiXL6mSIWpr3Wg5MhxyfEXy/IlYthsqwBqHOr22boFbf/u6O88A==" }, "@typescript-eslint/typescript-estree": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.24.0.tgz", - "integrity": "sha512-kBDitL/by/HK7g8CYLT7aKpAwlR8doshfWz8d71j97n5kUa5caHWvY0RvEUEanL/EqBJoANev8Xc/mQ6LLwXGA==", - "requires": { - "@typescript-eslint/types": "4.24.0", - "@typescript-eslint/visitor-keys": "4.24.0", - "debug": "^4.1.1", - "globby": "^11.0.1", + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.26.0.tgz", + "integrity": "sha512-GHUgahPcm9GfBuy3TzdsizCcPjKOAauG9xkz9TR8kOdssz2Iz9jRCSQm6+aVFa23d5NcSpo1GdHGSQKe0tlcbg==", + "requires": { + "@typescript-eslint/types": "4.26.0", + "@typescript-eslint/visitor-keys": "4.26.0", + "debug": "^4.3.1", + "globby": "^11.0.3", "is-glob": "^4.0.1", - "semver": "^7.3.2", - "tsutils": "^3.17.1" + "semver": "^7.3.5", + "tsutils": "^3.21.0" } }, "@typescript-eslint/visitor-keys": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.24.0.tgz", - "integrity": "sha512-4ox1sjmGHIxjEDBnMCtWFFhErXtKA1Ec0sBpuz0fqf3P+g3JFGyTxxbF06byw0FRsPnnbq44cKivH7Ks1/0s6g==", + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.26.0.tgz", + "integrity": "sha512-cw4j8lH38V1ycGBbF+aFiLUls9Z0Bw8QschP3mkth50BbWzgFS33ISIgBzUMuQ2IdahoEv/rXstr8Zhlz4B1Zg==", "requires": { - "@typescript-eslint/types": "4.24.0", + "@typescript-eslint/types": "4.26.0", "eslint-visitor-keys": "^2.0.0" } + }, + "globby": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz", + "integrity": "sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==", + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "requires": { + "tslib": "^1.8.1" + } } } }, @@ -3991,15 +4057,37 @@ } }, "browserslist": { - "version": "4.16.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.3.tgz", - "integrity": "sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw==", + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", "requires": { - "caniuse-lite": "^1.0.30001181", - "colorette": "^1.2.1", - "electron-to-chromium": "^1.3.649", + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", "escalade": "^3.1.1", - "node-releases": "^1.1.70" + "node-releases": "^1.1.71" + }, + "dependencies": { + "caniuse-lite": { + "version": "1.0.30001232", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001232.tgz", + "integrity": "sha512-e4Gyp7P8vqC2qV2iHA+cJNf/yqUKOShXQOJHQt81OHxlIZl/j/j3soEA0adAQi8CPUQgvOdDENyQ5kd6a6mNSg==" + }, + "colorette": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==" + }, + "electron-to-chromium": { + "version": "1.3.743", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.743.tgz", + "integrity": "sha512-K2wXfo9iZQzNJNx67+Pld0DRF+9bYinj62gXCdgPhcu1vidwVuLPHQPPFnCdO55njWigXXpfBiT90jGUPbw8Zg==" + }, + "node-releases": { + "version": "1.1.72", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.72.tgz", + "integrity": "sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==" + } } }, "bser": { @@ -5318,9 +5406,9 @@ "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=" }, "dns-packet": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", - "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", + "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", "requires": { "ip": "^1.1.0", "safe-buffer": "^5.0.1" @@ -6172,9 +6260,9 @@ "dev": true }, "eslint-plugin-react": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.23.2.tgz", - "integrity": "sha512-AfjgFQB+nYszudkxRkTFu0UR1zEQig0ArVMPloKhxwlwkzaw/fBiH0QWcBBhZONlXqQC51+nfqFrkn4EzHcGBw==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.24.0.tgz", + "integrity": "sha512-KJJIx2SYx7PBx3ONe/mEeMz4YE0Lcr7feJTCMyyKb/341NcjuAgim3Acgan89GfPv7nxXK2+0slu0CWXYM4x+Q==", "requires": { "array-includes": "^3.1.3", "array.prototype.flatmap": "^1.2.4", @@ -6182,12 +6270,12 @@ "has": "^1.0.3", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.0.4", - "object.entries": "^1.1.3", + "object.entries": "^1.1.4", "object.fromentries": "^2.0.4", - "object.values": "^1.1.3", + "object.values": "^1.1.4", "prop-types": "^15.7.2", "resolve": "^2.0.0-next.3", - "string.prototype.matchall": "^4.0.4" + "string.prototype.matchall": "^4.0.5" }, "dependencies": { "array-includes": { @@ -6220,15 +6308,120 @@ "has-symbols": "^1.0.1" } }, - "object.values": { + "is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==" + }, + "is-regex": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.3.tgz", - "integrity": "sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw==", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", + "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", + "requires": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.2" + }, + "dependencies": { + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" + } + } + }, + "object-inspect": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", + "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==" + }, + "object.entries": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.4.tgz", + "integrity": "sha512-h4LWKWE+wKQGhtMjZEBud7uLGhqyLwj8fpHOarZhD2uY3C9cRtk57VQ89ke3moByLXMedqs3XCHzyb4AmA2DjA==", "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has": "^1.0.3" + "es-abstract": "^1.18.2" + }, + "dependencies": { + "es-abstract": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", + "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.10.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + } + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" + }, + "is-string": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", + "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==" + } + } + }, + "object.values": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz", + "integrity": "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.2" + }, + "dependencies": { + "es-abstract": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", + "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.10.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + } + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" + }, + "is-string": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", + "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==" + } } }, "resolve": { @@ -6239,6 +6432,42 @@ "is-core-module": "^2.2.0", "path-parse": "^1.0.6" } + }, + "string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "requires": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + }, + "dependencies": { + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" + } + } } } }, @@ -14888,17 +15117,111 @@ } }, "string.prototype.matchall": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.4.tgz", - "integrity": "sha512-pknFIWVachNcyqRfaQSeu/FUfpvJTe4uskUSZ9Wc1RijsPuzbZ8TyYT8WCNnntCjUEqQ3vUHMAfVj2+wLAisPQ==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.5.tgz", + "integrity": "sha512-Z5ZaXO0svs0M2xd/6By3qpeKpLKd9mO4v4q3oMEQrk8Ck4xOD5d5XeBOOjGrmVZZ/AHB1S0CgG4N5r1G9N3E2Q==", "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has-symbols": "^1.0.1", + "es-abstract": "^1.18.2", + "get-intrinsic": "^1.1.1", + "has-symbols": "^1.0.2", "internal-slot": "^1.0.3", "regexp.prototype.flags": "^1.3.1", "side-channel": "^1.0.4" + }, + "dependencies": { + "es-abstract": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", + "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.10.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + } + }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" + }, + "is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==" + }, + "is-regex": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", + "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", + "requires": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.2" + } + }, + "is-string": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", + "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==" + }, + "object-inspect": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", + "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==" + }, + "string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "requires": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + } + } } }, "string.prototype.trimend": { @@ -15553,9 +15876,9 @@ } }, "typescript": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.4.tgz", - "integrity": "sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.2.tgz", + "integrity": "sha512-zZ4hShnmnoVnAHpVHWpTcxdv7dWP60S2FsydQLV8V5PbS3FifjWFFRiHSWpDJahly88PRyV5teTSLoq4eG7mKw==", "dev": true }, "unbox-primitive": { diff --git a/tournament-scheduler/package.json b/tournament-scheduler/package.json index 11c8a0b4..ed5fa626 100644 --- a/tournament-scheduler/package.json +++ b/tournament-scheduler/package.json @@ -8,14 +8,12 @@ "build:dev": "set REACT_APP_BASE_URL=https://AvasamDev.pythonanywhere.com&& npm run build:prod", "build:prod": "react-scripts build && npm run compress-build-folder", "compress-build-folder": "powershell Compress-Archive -Update -Path .\\build\\ -CompressionLevel Optimal -DestinationPath ..\\tournament-scheduler-build.zip", - "lint": "eslint src/**", + "lint": "eslint src/ --ext .ts,.tsx --ignore-path ../.gitignore", "lint:fix": "npm run lint -- --fix", + "upgrade": "npx npm-check-updates -u -x @date-io/moment & npm i & npm audit fix", "test": "react-scripts test", "eject": "react-scripts eject" }, - "//": { - "react-add-to-calendar": "Fixed Outlook dates" - }, "dependencies": { "@culturehq/add-to-calendar": "^1.1.2", "@date-io/moment": "^1.3.13", @@ -32,30 +30,34 @@ }, "devDependencies": { "@types/jest": "^26.0.23", - "@types/node": "^15.6.0", - "@types/react": "^17.0.6", + "@types/node": "^15.6.1", + "@types/react": "^17.0.8", "@types/react-add-to-calendar": "^0.1.0", "@types/react-div-100vh": "^0.4.0", "@types/react-dom": "^17.0.5", "@types/react-text-mask": "^5.4.7", - "@typescript-eslint/eslint-plugin": "^4.24.0", - "@typescript-eslint/parser": "^4.24.0", + "@typescript-eslint/eslint-plugin": "^4.26.0", + "@typescript-eslint/parser": "^4.26.0", "eslint-plugin-extra-rules": "0.0.0-development", "eslint-plugin-jsx-a11y": "^6.4.1", "eslint-plugin-prefer-arrow": "^1.2.3", - "eslint-plugin-react": "^7.23.2", + "eslint-plugin-react": "^7.24.0", "eslint-plugin-react-hooks": "^4.2.0", "eslint-plugin-simple-import-sort": "^7.0.0", "eslint-plugin-sonarjs": "^0.7.0", "eslint-plugin-switch-case": "^1.1.2", "eslint-plugin-unicorn": "^32.0.1", - "typescript": "^4.2.4" + "typescript": "^4.3.2" }, "eslintConfig": { "extends": [ "../.eslintrc.json", "react-app" - ] + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "project": "./tsconfig.json" + } }, "browserslist": { "production": [ diff --git a/tournament-scheduler/src/App.tsx b/tournament-scheduler/src/App.tsx index 194af506..bc899fe8 100644 --- a/tournament-scheduler/src/App.tsx +++ b/tournament-scheduler/src/App.tsx @@ -32,7 +32,7 @@ const logout = (setCurrentUser: (user: null) => void) => { const App: FC = () => { const [currentUser, setCurrentUser] = useState() const viewScheduleIdFromUrl = new URLSearchParams(window.location.search).get('view') - const [viewScheduleId] = useState((viewScheduleIdFromUrl && Number.parseInt(viewScheduleIdFromUrl)) || null) + const [viewScheduleId] = useState((viewScheduleIdFromUrl && Number.parseInt(viewScheduleIdFromUrl)) || null) // Take registrationLink from the URL if present, // otherwise from the localStorage if there are no other searchParam diff --git a/tournament-scheduler/src/LoginForm/LoginForm.tsx b/tournament-scheduler/src/LoginForm/LoginForm.tsx index 60307aec..f5e8c554 100644 --- a/tournament-scheduler/src/LoginForm/LoginForm.tsx +++ b/tournament-scheduler/src/LoginForm/LoginForm.tsx @@ -58,15 +58,17 @@ const LoginForm: FC = (props: loginFormProps) => { onClick={() => login(srcApiKeyInput, props.onLogin)} >Access my schedules - If you don't trust the above link because SRC's api portal looks sketchy, you can also access your api key through + If you don't trust the above link because SRC's api portal looks sketchy, + you can also access your api key through

By using your key, it's possible to authenticate you to speedrun.com without ever asking for a password! -
If something ever goes wrong or you believe someone is abusing your key, you can change it easily at any time. -
Once logged in, you can manage your schedules, which includes creating, modifying and sharing them! -

+
+ If something ever goes wrong, or you believe someone is abusing your key, you can change it easily at any time. +
+ Once logged in, you can manage your schedules, which includes creating, modifying and sharing them!

} diff --git a/tournament-scheduler/src/ScheduleManagement/ScheduleWizard/RegistrationList.tsx b/tournament-scheduler/src/ScheduleManagement/ScheduleWizard/RegistrationList.tsx index d026a696..82bd6d42 100644 --- a/tournament-scheduler/src/ScheduleManagement/ScheduleWizard/RegistrationList.tsx +++ b/tournament-scheduler/src/ScheduleManagement/ScheduleWizard/RegistrationList.tsx @@ -67,7 +67,10 @@ const RegistrationList: FC = (props: RegistrationListProp Are you sure that you want to delete entry #{props.index + 1} of this time slot forever? This action will take effect immediatly and is irreversible. - Make sure you have noticed the participants as you will not be able to retrieve this entry after this point! + + Make sure you have notified the participants, + as you will not be able to retrieve this entry after this point! + diff --git a/tournament-scheduler/src/ScheduleRegistration/ScheduleRegistration.tsx b/tournament-scheduler/src/ScheduleRegistration/ScheduleRegistration.tsx index f9899868..fa0dd58c 100644 --- a/tournament-scheduler/src/ScheduleRegistration/ScheduleRegistration.tsx +++ b/tournament-scheduler/src/ScheduleRegistration/ScheduleRegistration.tsx @@ -45,7 +45,8 @@ const ScheduleRegistration: FC = (props: ScheduleRegi const checkFormValidity = () => { const participantCount = selectedTimeSlot?.participantsPerEntry const actualParticipants = participants.slice(0, participantCount) - const valid = actualParticipants.length === participantCount && actualParticipants.every(participant => !!participant) + const valid = actualParticipants.length === participantCount && + actualParticipants.every(participant => !!participant) setFormValidity(valid) } @@ -72,7 +73,8 @@ const ScheduleRegistration: FC = (props: ScheduleRegi }, [props.registrationLink]) const selectTimeSlot: SelectInputProps['onChange'] = event => { - setSelectedTimeSlot(scheduleState?.timeSlots.find(timeSlot => timeSlot.id === Number.parseInt(event.target.value as string))) + const eventValue = Number.parseInt(event.target.value as string) + setSelectedTimeSlot(scheduleState?.timeSlots.find(timeSlot => timeSlot.id === eventValue)) setErrorMessage('') } @@ -83,7 +85,11 @@ const ScheduleRegistration: FC = (props: ScheduleRegi const sendRegistrationForm = () => { if (!selectedTimeSlot) return - postRegistration(selectedTimeSlot.id, participants.slice(0, selectedTimeSlot.participantsPerEntry), registrationKeyState) + postRegistration( + selectedTimeSlot.id, + participants.slice(0, selectedTimeSlot.participantsPerEntry), + registrationKeyState + ) .then(() => { localStorage.removeItem('register') window.location.href = `${window.location.pathname}?view=${scheduleState?.id}` @@ -110,7 +116,9 @@ const ScheduleRegistration: FC = (props: ScheduleRegi return {!scheduleState - ? scheduleState === null &&
Sorry. `{props.registrationLink}` does not lead to an existing registration form.
+ ? scheduleState === null &&
+ Sorry. `{props.registrationLink}` does not lead to an existing registration form. +
: @@ -122,7 +130,9 @@ const ScheduleRegistration: FC = (props: ScheduleRegi {!scheduleState.active ?

Sorry. This schedule is currently inactive and registration is closed.
: scheduleState.deadline && scheduleState.deadline < new Date() - ?

Sorry. Registrations for this schedule are over (Deadline: {fancyFormat(scheduleState.deadline)}).
+ ?
+
Sorry. Registrations for this schedule are over (Deadline: {fancyFormat(scheduleState.deadline)}). +
: {scheduleState.deadline &&

{ `Registration deadline: ${fancyFormat(scheduleState.deadline) @@ -173,7 +183,9 @@ const ScheduleRegistration: FC = (props: ScheduleRegi (_, index) => 1 ? ` ${index + 1}` : ''}'s name`} + label={ + `Participant${selectedTimeSlot.participantsPerEntry > 1 ? ` ${index + 1}` : ''}'s name` + } onChange={event => handleParticipantChange(index, event.target.value)} /> )} diff --git a/tournament-scheduler/src/index.tsx b/tournament-scheduler/src/index.tsx index b8577566..80c50e4a 100644 --- a/tournament-scheduler/src/index.tsx +++ b/tournament-scheduler/src/index.tsx @@ -14,7 +14,9 @@ if ((process.env.REACT_APP_BASE_URL?.includes('127.0.0.1') || process.env.REACT_ window.location.hostname !== '127.0.0.1' ) { window.process.env.REACT_APP_BASE_URL = `${window.location.protocol}//${window.location.hostname}:5000` - console.info(`REACT_APP_BASE_URL was changed from ${process.env.REACT_APP_BASE_URL} to ${window.process.env.REACT_APP_BASE_URL}`) + console.info('REACT_APP_BASE_URL was changed ' + + `from ${process.env.REACT_APP_BASE_URL} ` + + `to ${window.process.env.REACT_APP_BASE_URL}`) } ReactDOM.render(, document.getElementById('root')) From 99e593140cd6ad042b4b14bbbedb3e01f53878fb Mon Sep 17 00:00:00 2001 From: Avasam Date: Wed, 2 Jun 2021 01:20:32 -0400 Subject: [PATCH 15/17] Added region code support - Extended countryCode field in DB - Get region code first, fallback to country code - Add an endpoint to get users filtered by region (for NoReset) - Removed Japanese name support as it's now always null - Ensured if a flag doesn't exist for a region, that it would fallback to showing the parent region's flag - Fixed country code not being set for new users - This also lays the logical foundations for #146 --- .eslintrc.json | 12 +++++++ .../2020-04-10-Added-country-code.sql | 2 +- ...020-05-11-Fixed-country-code-too-small.sql | 2 +- .../2020-05-12-Added-score-details.sql | 2 +- .../2021-01-03-Added-deadline-to-schedule.sql | 2 +- .../2021-03-25-Nullable-deadlines.sql | 2 +- .../2021-06-01-Added_Region_Code_support.sql | 3 ++ README.md | 4 +-- api/global_scoreboard_api.py | 6 +++- configs.template.py | 2 +- .../TableElements/PlayerNameCell.tsx | 10 ++++++ models/core_models.py | 33 +++++++++++++++++-- services/user_updater.py | 10 +++--- services/user_updater_helpers.py | 1 + 14 files changed, 76 insertions(+), 15 deletions(-) create mode 100644 Changescripts/2021-06-01-Added_Region_Code_support.sql diff --git a/.eslintrc.json b/.eslintrc.json index 6ff5e3ff..1ef99d23 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -249,6 +249,12 @@ } ], "@typescript-eslint/no-type-alias": "off", + // Note: These 2 drown TS2304 and actually make the errors harder to understand. + // See: https://github.com/typescript-eslint/typescript-eslint/issues/2665 + // There's nothing we can do until a pedantic any check in TypeScript is added + // Eg.: https://github.com/microsoft/TypeScript/issues/40174 + "@typescript-eslint/no-unsafe-call": "off", + "@typescript-eslint/no-unsafe-assignment": "off", "@typescript-eslint/no-unused-vars": [ "error", { @@ -413,6 +419,12 @@ "no-dupe-else-if": "error", "no-inner-declarations": "error", "no-lonely-if": "error", + "no-multiple-empty-lines": [ + "error", + { + "max": 1 + } + ], "no-unneeded-ternary": "error", "no-warning-comments": [ "warn", diff --git a/Changescripts/2020-04-10-Added-country-code.sql b/Changescripts/2020-04-10-Added-country-code.sql index c05dad76..ce8632da 100644 --- a/Changescripts/2020-04-10-Added-country-code.sql +++ b/Changescripts/2020-04-10-Added-country-code.sql @@ -1,2 +1,2 @@ -ALTER TABLE `player` +ALTER TABLE `player` ADD COLUMN `country_code` VARCHAR(6) NULL AFTER `name`; diff --git a/Changescripts/2020-05-11-Fixed-country-code-too-small.sql b/Changescripts/2020-05-11-Fixed-country-code-too-small.sql index 742146b4..0ac6cdc9 100644 --- a/Changescripts/2020-05-11-Fixed-country-code-too-small.sql +++ b/Changescripts/2020-05-11-Fixed-country-code-too-small.sql @@ -1,2 +1,2 @@ -ALTER TABLE `player` +ALTER TABLE `player` MODIFY COLUMN `country_code` VARCHAR(6) NULL; diff --git a/Changescripts/2020-05-12-Added-score-details.sql b/Changescripts/2020-05-12-Added-score-details.sql index 6c78f32a..db4f4366 100644 --- a/Changescripts/2020-05-12-Added-score-details.sql +++ b/Changescripts/2020-05-12-Added-score-details.sql @@ -1,2 +1,2 @@ -ALTER TABLE `player` +ALTER TABLE `player` ADD COLUMN `score_details` LONGTEXT NULL AFTER `score`; diff --git a/Changescripts/2021-01-03-Added-deadline-to-schedule.sql b/Changescripts/2021-01-03-Added-deadline-to-schedule.sql index 1ca4274c..f984ff2c 100644 --- a/Changescripts/2021-01-03-Added-deadline-to-schedule.sql +++ b/Changescripts/2021-01-03-Added-deadline-to-schedule.sql @@ -1,2 +1,2 @@ -ALTER TABLE `schedule` +ALTER TABLE `schedule` ADD COLUMN `deadline` DATETIME NULL AFTER `is_active`; diff --git a/Changescripts/2021-03-25-Nullable-deadlines.sql b/Changescripts/2021-03-25-Nullable-deadlines.sql index c371af41..b71a9fd8 100644 --- a/Changescripts/2021-03-25-Nullable-deadlines.sql +++ b/Changescripts/2021-03-25-Nullable-deadlines.sql @@ -1,2 +1,2 @@ -ALTER TABLE `schedule` +ALTER TABLE `schedule` CHANGE COLUMN `deadline` `deadline` DATETIME NULL ; diff --git a/Changescripts/2021-06-01-Added_Region_Code_support.sql b/Changescripts/2021-06-01-Added_Region_Code_support.sql new file mode 100644 index 00000000..496b5c61 --- /dev/null +++ b/Changescripts/2021-06-01-Added_Region_Code_support.sql @@ -0,0 +1,3 @@ +-- The biggest region code I found so far was "us/co/coloradosprings" at 21 +ALTER TABLE `player` +CHANGE COLUMN `country_code` `country_code` VARCHAR(24) NULL DEFAULT NULL; diff --git a/README.md b/README.md index 146af7f3..71580e9c 100644 --- a/README.md +++ b/README.md @@ -53,8 +53,8 @@ Note: The soft cutoff works great on games such as Barney. But is too punishing ## Dev environment setup -Get yourself a [MySQL server](https://dev.mysql.com/downloads/mysql/) (PythonAnywhere uses version 5.6.40) -Install [Python](https://www.python.org/downloads/) 3.7+ +Get yourself a [MySQL server](https://dev.mysql.com/downloads/mysql/) (as of 2021/06/01, PythonAnywhere uses version 5.7.27) +Install [Python](https://www.python.org/downloads/) 3.7 or 3.8 (but not 3.9 !) Install PIP (this should come bundled with python 3.4+) Run this command in a terminal: `pip3 install flask flask_cors flask_sqlalchemy sqlalchemy httplib2 simplejson mysql-connector requests pyjwt` Copy `configs.template.py` as `configs.py` and update the file as needed. diff --git a/api/global_scoreboard_api.py b/api/global_scoreboard_api.py index 69b0637a..063f7f95 100644 --- a/api/global_scoreboard_api.py +++ b/api/global_scoreboard_api.py @@ -18,7 +18,11 @@ @api.route('/players', methods=('GET',)) def get_all_players(): - return jsonify(map_to_dto(Player.get_all())) + country_code_str: Optional[str] = request.args.get('region') + if country_code_str is None: + return jsonify(map_to_dto(Player.get_all())) + country_codes = list(set(country_code_str.split(','))) + return jsonify(Player.get_by_country_code(country_codes)), 200, {'Access-Control-Allow-Origin': '*'} @api.route('/players//score-details', methods=('GET',)) diff --git a/configs.template.py b/configs.template.py index 1a2e3b9b..ecece8f1 100644 --- a/configs.template.py +++ b/configs.template.py @@ -21,5 +21,5 @@ sql_connector: str = "mysqlconnector" sql_username: str = "admin" sql_password: str = "admin" -sql_hostname: str = "localhost:3356" +sql_hostname: str = "localhost:3306" sql_database_name: str = "speedrun_global_scoreboard" diff --git a/global-scoreboard/src/Dashboard/TableElements/PlayerNameCell.tsx b/global-scoreboard/src/Dashboard/TableElements/PlayerNameCell.tsx index 3badbb92..0d4114b2 100644 --- a/global-scoreboard/src/Dashboard/TableElements/PlayerNameCell.tsx +++ b/global-scoreboard/src/Dashboard/TableElements/PlayerNameCell.tsx @@ -11,6 +11,15 @@ type PlayerNameCellProps = { handleOnBefriend: (friendId: string) => void } +const backupFlag = (element: HTMLImageElement) => { + const backupSrc = element.src.replace(/\/[a-z]+?\.png/, '.png') + if (backupSrc.endsWith('flags.png')) { + element.removeAttribute('src') + } else { + element.src = backupSrc + } +} + const PlayerNameCell = (props: PlayerNameCellProps) => alt='' className='flagicon' src={`https://www.speedrun.com/images/flags/${props.player.countryCode}.png`} + onError={err => backupFlag(err.currentTarget)} />}{props.player.name} { !props.isCurrentUser && diff --git a/models/core_models.py b/models/core_models.py index 659a6c6a..55ccdd4d 100644 --- a/models/core_models.py +++ b/models/core_models.py @@ -1,7 +1,7 @@ from __future__ import annotations from datetime import datetime from flask_sqlalchemy import SQLAlchemy -from sqlalchemy import orm, text +from sqlalchemy import or_, orm, text from typing import cast, Dict, List, Optional, Tuple, Union from services.utils import get_file, SpeedrunComError, UserUpdaterError import sys @@ -30,7 +30,8 @@ class Player(db.Model): user_id: str = db.Column(db.String(8), primary_key=True) name: str = db.Column(db.String(32), nullable=False) - country_code: Optional[str] = db.Column(db.String(5)) + # The biggest region code I found so far was "us/co/coloradosprings" at 21 + country_code: Optional[str] = db.Column(db.String(24)) score: int = db.Column(db.Integer, nullable=False) score_details: str = db.Column(db.String()) last_update: Optional[datetime] = db.Column(db.DateTime()) @@ -89,19 +90,40 @@ def get_all(): last_update=player[4], rank=player[5]) for player in db.engine.execute(sql).fetchall()] + @staticmethod + def get_by_country_code(country_codes: List[str]): + def to_filtered_dto(player: Player) -> dict[str, Union[str, datetime, None]]: + return { + 'userId': player.user_id, + 'name': player.name, + 'countryCode': player.country_code, + 'lastUpdate': player.last_update, + } + + country_code_queries = [y for x in [( + Player.country_code == country_code, + Player.country_code.like(f'{country_code}/%') + ) for country_code in country_codes] + for y in x] + + return [to_filtered_dto(player) for player in Player.query.filter(or_(*country_code_queries)).all()] + @staticmethod def create(user_id: str, name: str, **kwargs: Union[Optional[str], float, datetime]) -> Player: """ kwargs: + - country_code: str - score: int - last_update: Union[datetime, str] """ + country_code = kwargs.get('country_code', None) score = kwargs.get('score', 0) last_update = kwargs.get('last_update', None) player = Player( user_id=user_id, name=name, + country_code=country_code, score=score, last_update=last_update) db.session.add(player) @@ -110,6 +132,13 @@ def create(user_id: str, name: str, **kwargs: Union[Optional[str], float, dateti return player def update(self, **kwargs: Union[Optional[str], float, datetime]) -> Player: + """ + kwargs: + - name: str + - country_code: str + - score: int + - last_update: Union[datetime, str] + """ player = Player \ .query \ .filter(Player.user_id == self.user_id) \ diff --git a/services/user_updater.py b/services/user_updater.py index 6f58e5a6..8ad9a66c 100644 --- a/services/user_updater.py +++ b/services/user_updater.py @@ -113,11 +113,13 @@ def __set_user_code_and_name(user: User) -> None: user._id = infos["data"]["id"] location = infos["data"]["location"] - user._country_code = location["country"]["code"] if location else None + if location is not None: + country = location["country"] + region = location["region"] + user._country_code = region["code"] if region else country["code"] + else: + user._country_code = None user._name = infos["data"]["names"].get("international") - japanese_name = infos["data"]["names"].get("japanese") - if japanese_name: - user._name += f" ({japanese_name})" if infos["data"]["role"] == "banned": user._banned = True user._points = 0 diff --git a/services/user_updater_helpers.py b/services/user_updater_helpers.py index 889af650..4a06c291 100644 --- a/services/user_updater_helpers.py +++ b/services/user_updater_helpers.py @@ -216,6 +216,7 @@ def update_runner_in_database(player: Player, user: User): else: text_output = f"{user} found. Updated their entry." result_state = "success" + print(user._country_code) player.update(name=user._name, country_code=user._country_code, score=floor(user._points), From 5aa80b1f9e1af2307e8f37a57f1edb06f00e8115 Mon Sep 17 00:00:00 2001 From: Avasam Date: Wed, 2 Jun 2021 01:31:20 -0400 Subject: [PATCH 16/17] hotfix lint to build --- .../src/Dashboard/TableElements/PaginationProps.tsx | 1 - global-scoreboard/src/GameSearch/ScoreDropCalculator.tsx | 3 --- global-scoreboard/src/models/Configs.ts | 1 - global-scoreboard/src/models/SrcResponse.ts | 1 - tournament-scheduler/src/App.test.tsx | 1 - .../src/ScheduleManagement/ScheduleWizard/RegistrationList.tsx | 1 - tournament-scheduler/src/ScheduleViewer/ScheduleViewer.tsx | 1 - 7 files changed, 9 deletions(-) diff --git a/global-scoreboard/src/Dashboard/TableElements/PaginationProps.tsx b/global-scoreboard/src/Dashboard/TableElements/PaginationProps.tsx index 3f8ea903..e82c3832 100644 --- a/global-scoreboard/src/Dashboard/TableElements/PaginationProps.tsx +++ b/global-scoreboard/src/Dashboard/TableElements/PaginationProps.tsx @@ -29,7 +29,6 @@ const sizePerPageRenderer: PaginationProps['sizePerPageRenderer'] = ({ {' entries'} - const defaultPaginationOptions: PaginationProps = { custom: true, showTotal: true, diff --git a/global-scoreboard/src/GameSearch/ScoreDropCalculator.tsx b/global-scoreboard/src/GameSearch/ScoreDropCalculator.tsx index df1170cb..4236c095 100644 --- a/global-scoreboard/src/GameSearch/ScoreDropCalculator.tsx +++ b/global-scoreboard/src/GameSearch/ScoreDropCalculator.tsx @@ -10,7 +10,6 @@ import { secondsToTimeString } from '../utils/Time' // eslint-disable-next-line @typescript-eslint/no-magic-numbers const TIME_BONUS_DIVISOR = math.SECONDS_IN_HOUR * 12 // 12h (1/2 day) for +100% - // eslint-disable-next-line unicorn/prevent-abbreviations const addVarToValuesKeys = (values: SrcRun['data']['values']) => { const newDict: SrcRun['data']['values'] = {} @@ -29,7 +28,6 @@ const filterSubCatVariables = (variables: SrcRun['data']['values'], subCategorie return newVariables } - const getRunDetails = (runId: string) => apiGet( `https://www.speedrun.com/api/v1/runs/${runId}`, @@ -141,7 +139,6 @@ const ScoreDropCalculator = () => { .finally(() => setUpdating(false)) } - return
) => event.preventDefault()}> diff --git a/global-scoreboard/src/models/Configs.ts b/global-scoreboard/src/models/Configs.ts index 3200f341..e80eb8da 100644 --- a/global-scoreboard/src/models/Configs.ts +++ b/global-scoreboard/src/models/Configs.ts @@ -13,5 +13,4 @@ const Configs: (ServerConfigs & { setConfigs: (configs: ServerConfigs) => void } }, } - export default Configs diff --git a/global-scoreboard/src/models/SrcResponse.ts b/global-scoreboard/src/models/SrcResponse.ts index 6f1baa09..c102db73 100644 --- a/global-scoreboard/src/models/SrcResponse.ts +++ b/global-scoreboard/src/models/SrcResponse.ts @@ -14,7 +14,6 @@ export type SrcCategory = { } } - export type EmbeddedSrcRun = { data: { game: SrcGame diff --git a/tournament-scheduler/src/App.test.tsx b/tournament-scheduler/src/App.test.tsx index 9bfcab76..d8e9f122 100644 --- a/tournament-scheduler/src/App.test.tsx +++ b/tournament-scheduler/src/App.test.tsx @@ -2,7 +2,6 @@ import ReactDOM from 'react-dom' import App from './App' - it('renders without crashing', () => { const div = document.createElement('div') ReactDOM.render(, div) diff --git a/tournament-scheduler/src/ScheduleManagement/ScheduleWizard/RegistrationList.tsx b/tournament-scheduler/src/ScheduleManagement/ScheduleWizard/RegistrationList.tsx index 82bd6d42..c573a956 100644 --- a/tournament-scheduler/src/ScheduleManagement/ScheduleWizard/RegistrationList.tsx +++ b/tournament-scheduler/src/ScheduleManagement/ScheduleWizard/RegistrationList.tsx @@ -6,7 +6,6 @@ import { useState } from 'react' import type { RegistrationProxy } from '../../models/Registration' import type Registration from '../../models/Registration' - type RegistrationListProps = { registration: RegistrationProxy index: number diff --git a/tournament-scheduler/src/ScheduleViewer/ScheduleViewer.tsx b/tournament-scheduler/src/ScheduleViewer/ScheduleViewer.tsx index 2859c2f3..afd6612f 100644 --- a/tournament-scheduler/src/ScheduleViewer/ScheduleViewer.tsx +++ b/tournament-scheduler/src/ScheduleViewer/ScheduleViewer.tsx @@ -85,7 +85,6 @@ const buildCalendarEventDescription = (timeSlot: TimeSlot, schedule: Schedule) = return `${title}
${url}

${players}` } - const ScheduleViewer: FC = (props: ScheduleRegistrationProps) => { const [scheduleState, setScheduleState] = useState() const classes = useStyles() From 0059fb8be6bd31aa5e841d1c65088c22e22584c9 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 2 Jun 2021 10:11:43 +0000 Subject: [PATCH 17/17] Update dependency eslint-plugin-unicorn to v33 Added new rule to .eslintrc.json --- .eslintrc.json | 1 + global-scoreboard/package-lock.json | 64 ++++++++++++++------------ global-scoreboard/package.json | 2 +- tournament-scheduler/package-lock.json | 61 ++++++++++++------------ tournament-scheduler/package.json | 2 +- 5 files changed, 69 insertions(+), 61 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index 1ef99d23..ad3a780b 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -119,6 +119,7 @@ ], "unicorn/numeric-separators-style": "error", "unicorn/prefer-add-event-listener": "error", + "unicorn/prefer-object-has-own": "error", "unicorn/prefer-query-selector": 0, "unicorn/prefer-text-content": "error", "unicorn/prevent-abbreviations": [ diff --git a/global-scoreboard/package-lock.json b/global-scoreboard/package-lock.json index 7e493d10..4082e528 100644 --- a/global-scoreboard/package-lock.json +++ b/global-scoreboard/package-lock.json @@ -48,9 +48,9 @@ } }, "@babel/eslint-parser": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.14.3.tgz", - "integrity": "sha512-IfJXKEVRV/Gisvgmih/+05gkBzzg4Dy0gcxkZ84iFiLK8+O+fI1HLnGJv3UrUMPpsMmmThNa69v+UnF80XP+kA==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.14.4.tgz", + "integrity": "sha512-7CTckFLPBGEfCKqlrnJq2PIId3UmJ5hW+D4dsv/VvuA5DapgqyZFCttq+8oeRIJMZQizFIe5gel3xm2SbrqlYA==", "dev": true, "requires": { "eslint-scope": "^5.1.0", @@ -6446,15 +6446,15 @@ } }, "eslint-plugin-unicorn": { - "version": "32.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-32.0.1.tgz", - "integrity": "sha512-LaZ9utnXtOJjnoDkpm+nQsONUUmyRR0WD6PGROSdQRRW3LRmgK/ZP8wxjW+Ai+2uolKTtuJzLx2mvbIeIoLqpg==", + "version": "33.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-33.0.0.tgz", + "integrity": "sha512-aPoAsI41ShB1H8EHU2rPb0iBymp1fUUpC/J8fIwofXz9ENH9nc4JU2b5wA9YKdrIeMvsSnSRg3pfzRr69Z9+Dw==", "dev": true, "requires": { "ci-info": "^3.1.1", "clean-regexp": "^1.0.0", "eslint-template-visitor": "^2.3.2", - "eslint-utils": "^2.1.0", + "eslint-utils": "^3.0.0", "import-modules": "^2.1.0", "is-builtin-module": "^3.1.0", "lodash": "^4.17.21", @@ -6467,16 +6467,19 @@ }, "dependencies": { "ci-info": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.1.1.tgz", - "integrity": "sha512-kdRWLBIJwdsYJWYJFtAFFYxybguqeF91qpZaggjG5Nf8QKdizFG2hjqvaTXbxFIcYbSaD74KpAXv6BSm17DHEQ==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.2.0.tgz", + "integrity": "sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A==", "dev": true }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + } }, "read-pkg": { "version": "5.2.0", @@ -6561,9 +6564,9 @@ } }, "@babel/compat-data": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.0.tgz", - "integrity": "sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.4.tgz", + "integrity": "sha512-i2wXrWQNkH6JplJQGn3Rd2I4Pij8GdHkXwHMxm+zV5YG/Jci+bCNrWZEWC4o+umiDkRrRs4dVzH3X4GP7vyjQQ==", "dev": true }, "@babel/core": { @@ -6601,14 +6604,14 @@ } }, "@babel/helper-compilation-targets": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz", - "integrity": "sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.4.tgz", + "integrity": "sha512-JgdzOYZ/qGaKTVkn5qEDV/SXAh8KcyUVkCoSWGN8T3bwrgd6m+/dJa2kVGi6RJYJgEYPBdZ84BZp9dUjNWkBaA==", "dev": true, "requires": { - "@babel/compat-data": "^7.13.15", + "@babel/compat-data": "^7.14.4", "@babel/helper-validator-option": "^7.12.17", - "browserslist": "^4.14.5", + "browserslist": "^4.16.6", "semver": "^6.3.0" } }, @@ -6686,9 +6689,9 @@ } }, "@babel/parser": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.3.tgz", - "integrity": "sha512-7MpZDIfI7sUC5zWo2+foJ50CSI5lcqDehZ0lVgIhSi4bFEk94fLAKlF3Q0nzSQQ+ca0lm+O6G9ztKVBeu8PMRQ==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.4.tgz", + "integrity": "sha512-ArliyUsWDUqEGfWcmzpGUzNfLxTdTp6WU4IuP6QFSp9gGfWS6boxFCkJSJ/L4+RG8z/FnIU3WxCk6hPL9SSWeA==", "dev": true }, "@babel/traverse": { @@ -6708,9 +6711,9 @@ } }, "@babel/types": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.2.tgz", - "integrity": "sha512-SdjAG/3DikRHpUOjxZgnkbR11xUlyDMUFJdvnIgZEE16mqmY0BINMmc4//JMJglEmn6i7sq6p+mGrFWyZ98EEw==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.4.tgz", + "integrity": "sha512-lCj4aIs0xUefJFQnwwQv2Bxg7Omd6bgquZ6LGC+gGMh6/s5qDVfjuCMlDmYQ15SLsWHd9n+X3E75lKIhl5Lkiw==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.14.0", @@ -16979,7 +16982,8 @@ }, "ssri": { "version": "6.0.1", - "resolved": "", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", "requires": { "figgy-pudding": "^3.5.1" } diff --git a/global-scoreboard/package.json b/global-scoreboard/package.json index 67e3b2d5..1e4182f7 100644 --- a/global-scoreboard/package.json +++ b/global-scoreboard/package.json @@ -47,7 +47,7 @@ "eslint-plugin-simple-import-sort": "^7.0.0", "eslint-plugin-sonarjs": "^0.7.0", "eslint-plugin-switch-case": "^1.1.2", - "eslint-plugin-unicorn": "^32.0.1", + "eslint-plugin-unicorn": "^33.0.0", "patch-package": "^6.4.7", "typescript": "^4.3.2" }, diff --git a/tournament-scheduler/package-lock.json b/tournament-scheduler/package-lock.json index 8f2b63ea..fca5ebf3 100644 --- a/tournament-scheduler/package-lock.json +++ b/tournament-scheduler/package-lock.json @@ -48,9 +48,9 @@ } }, "@babel/eslint-parser": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.14.3.tgz", - "integrity": "sha512-IfJXKEVRV/Gisvgmih/+05gkBzzg4Dy0gcxkZ84iFiLK8+O+fI1HLnGJv3UrUMPpsMmmThNa69v+UnF80XP+kA==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.14.4.tgz", + "integrity": "sha512-7CTckFLPBGEfCKqlrnJq2PIId3UmJ5hW+D4dsv/VvuA5DapgqyZFCttq+8oeRIJMZQizFIe5gel3xm2SbrqlYA==", "dev": true, "requires": { "eslint-scope": "^5.1.0", @@ -6554,15 +6554,15 @@ } }, "eslint-plugin-unicorn": { - "version": "32.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-32.0.1.tgz", - "integrity": "sha512-LaZ9utnXtOJjnoDkpm+nQsONUUmyRR0WD6PGROSdQRRW3LRmgK/ZP8wxjW+Ai+2uolKTtuJzLx2mvbIeIoLqpg==", + "version": "33.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-33.0.0.tgz", + "integrity": "sha512-aPoAsI41ShB1H8EHU2rPb0iBymp1fUUpC/J8fIwofXz9ENH9nc4JU2b5wA9YKdrIeMvsSnSRg3pfzRr69Z9+Dw==", "dev": true, "requires": { "ci-info": "^3.1.1", "clean-regexp": "^1.0.0", "eslint-template-visitor": "^2.3.2", - "eslint-utils": "^2.1.0", + "eslint-utils": "^3.0.0", "import-modules": "^2.1.0", "is-builtin-module": "^3.1.0", "lodash": "^4.17.21", @@ -6575,16 +6575,19 @@ }, "dependencies": { "ci-info": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.1.1.tgz", - "integrity": "sha512-kdRWLBIJwdsYJWYJFtAFFYxybguqeF91qpZaggjG5Nf8QKdizFG2hjqvaTXbxFIcYbSaD74KpAXv6BSm17DHEQ==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.2.0.tgz", + "integrity": "sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A==", "dev": true }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + } }, "read-pkg": { "version": "5.2.0", @@ -6669,9 +6672,9 @@ } }, "@babel/compat-data": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.0.tgz", - "integrity": "sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.4.tgz", + "integrity": "sha512-i2wXrWQNkH6JplJQGn3Rd2I4Pij8GdHkXwHMxm+zV5YG/Jci+bCNrWZEWC4o+umiDkRrRs4dVzH3X4GP7vyjQQ==", "dev": true }, "@babel/core": { @@ -6709,14 +6712,14 @@ } }, "@babel/helper-compilation-targets": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz", - "integrity": "sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.4.tgz", + "integrity": "sha512-JgdzOYZ/qGaKTVkn5qEDV/SXAh8KcyUVkCoSWGN8T3bwrgd6m+/dJa2kVGi6RJYJgEYPBdZ84BZp9dUjNWkBaA==", "dev": true, "requires": { - "@babel/compat-data": "^7.13.15", + "@babel/compat-data": "^7.14.4", "@babel/helper-validator-option": "^7.12.17", - "browserslist": "^4.14.5", + "browserslist": "^4.16.6", "semver": "^6.3.0" } }, @@ -6794,9 +6797,9 @@ } }, "@babel/parser": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.3.tgz", - "integrity": "sha512-7MpZDIfI7sUC5zWo2+foJ50CSI5lcqDehZ0lVgIhSi4bFEk94fLAKlF3Q0nzSQQ+ca0lm+O6G9ztKVBeu8PMRQ==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.4.tgz", + "integrity": "sha512-ArliyUsWDUqEGfWcmzpGUzNfLxTdTp6WU4IuP6QFSp9gGfWS6boxFCkJSJ/L4+RG8z/FnIU3WxCk6hPL9SSWeA==", "dev": true }, "@babel/traverse": { @@ -6816,9 +6819,9 @@ } }, "@babel/types": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.2.tgz", - "integrity": "sha512-SdjAG/3DikRHpUOjxZgnkbR11xUlyDMUFJdvnIgZEE16mqmY0BINMmc4//JMJglEmn6i7sq6p+mGrFWyZ98EEw==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.4.tgz", + "integrity": "sha512-lCj4aIs0xUefJFQnwwQv2Bxg7Omd6bgquZ6LGC+gGMh6/s5qDVfjuCMlDmYQ15SLsWHd9n+X3E75lKIhl5Lkiw==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.14.0", diff --git a/tournament-scheduler/package.json b/tournament-scheduler/package.json index ed5fa626..ad4cdeef 100644 --- a/tournament-scheduler/package.json +++ b/tournament-scheduler/package.json @@ -46,7 +46,7 @@ "eslint-plugin-simple-import-sort": "^7.0.0", "eslint-plugin-sonarjs": "^0.7.0", "eslint-plugin-switch-case": "^1.1.2", - "eslint-plugin-unicorn": "^32.0.1", + "eslint-plugin-unicorn": "^33.0.0", "typescript": "^4.3.2" }, "eslintConfig": {