@datagrok/eda 1.1.9 → 1.1.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintignore +1 -0
- package/.eslintrc.json +45 -0
- package/CHANGELOG.md +21 -13
- package/README.md +2 -0
- package/dist/100.js +2 -2
- package/dist/42.js +2 -0
- package/dist/729.js +1 -1
- package/dist/935.js +3 -0
- package/dist/package-test.js +2 -2
- package/dist/package.js +2 -2
- package/package.json +7 -3
- package/src/data-generators.ts +13 -13
- package/src/eda-tools.ts +42 -42
- package/src/eda-ui.ts +65 -58
- package/src/missing-values-imputation/knn-imputer.ts +468 -0
- package/src/missing-values-imputation/ui-constants.ts +64 -0
- package/src/missing-values-imputation/ui.ts +246 -0
- package/src/package-test.ts +2 -2
- package/src/package.ts +61 -60
- package/src/stat-tools.ts +72 -61
- package/src/svm.ts +144 -151
- package/src/utils.ts +13 -17
- package/src/workers/tsne-worker.ts +6 -6
- package/src/workers/umap-worker.ts +3 -3
- package/dist/943.js +0 -3
- /package/dist/{943.js.LICENSE.txt → 935.js.LICENSE.txt} +0 -0
package/.eslintignore
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
src/**/*.d.ts*
|
package/.eslintrc.json
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"env": {
|
|
3
|
+
"browser": true,
|
|
4
|
+
"es2022": true
|
|
5
|
+
},
|
|
6
|
+
"extends": [
|
|
7
|
+
"google"
|
|
8
|
+
],
|
|
9
|
+
"parser": "@typescript-eslint/parser",
|
|
10
|
+
"parserOptions": {
|
|
11
|
+
"ecmaVersion": 12,
|
|
12
|
+
"sourceType": "module"
|
|
13
|
+
},
|
|
14
|
+
"plugins": [
|
|
15
|
+
"@typescript-eslint"
|
|
16
|
+
],
|
|
17
|
+
"rules": {
|
|
18
|
+
"no-unused-vars": "off",
|
|
19
|
+
"@typescript-eslint/no-unused-vars": ["warn", { "varsIgnorePattern": "^(_|ui$|grok$|DG$)", "argsIgnorePattern": "^_"}],
|
|
20
|
+
"indent": [
|
|
21
|
+
"error",
|
|
22
|
+
2
|
|
23
|
+
],
|
|
24
|
+
"max-len": [
|
|
25
|
+
"error",
|
|
26
|
+
120
|
|
27
|
+
],
|
|
28
|
+
"require-jsdoc": "off",
|
|
29
|
+
"valid-jsdoc": "off",
|
|
30
|
+
"spaced-comment": "off",
|
|
31
|
+
"linebreak-style": "off",
|
|
32
|
+
"curly": [
|
|
33
|
+
"error",
|
|
34
|
+
"multi-or-nest"
|
|
35
|
+
],
|
|
36
|
+
"brace-style": [
|
|
37
|
+
"error",
|
|
38
|
+
"1tbs",
|
|
39
|
+
{
|
|
40
|
+
"allowSingleLine": true
|
|
41
|
+
}
|
|
42
|
+
],
|
|
43
|
+
"block-spacing": 2
|
|
44
|
+
}
|
|
45
|
+
}
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,25 @@
|
|
|
1
1
|
# EDA changelog
|
|
2
2
|
|
|
3
|
+
## 1.1.11 (2023-12-28)
|
|
4
|
+
|
|
5
|
+
Add missing values imputation using the KNN method.
|
|
6
|
+
|
|
7
|
+
## 1.1.10 (2023-12-28)
|
|
8
|
+
|
|
9
|
+
Add option to pass random seed to dimensionality reduction methods. This allows to reproduce results of dimensionality reduction.
|
|
10
|
+
|
|
11
|
+
## 1.1.9 (2023-12-22)
|
|
12
|
+
|
|
13
|
+
Improvements to multi column dimensionality reduction.
|
|
14
|
+
|
|
15
|
+
## 1.1.8 (2023-12-18)
|
|
16
|
+
|
|
17
|
+
Removed separate methods of dimensionality reduction and substituted with a single method `Dimensionality Reduction` (see Top Menu > ML > Dimensionality Reduction) that supports t-SNE and UMAP. The method allows to use multiple columns (like number, string, Molecule, Macromolecule, etc.) as features with different distance functions. The method also allows to cluster resulting embeddings using DBSCAN algorithm and color resulting scatterplot according to clusters.
|
|
18
|
+
|
|
19
|
+
## 1.1.7 (2023-12-14)
|
|
20
|
+
|
|
21
|
+
Add DBSCAN clustering to Top Menu > ML > Cluster > DBSCAN.
|
|
22
|
+
|
|
3
23
|
## 1.1.6 (2023-10-31)
|
|
4
24
|
|
|
5
25
|
Methods descriptions are updated.
|
|
@@ -10,18 +30,10 @@ Anova top-menu item is improved.
|
|
|
10
30
|
|
|
11
31
|
## 1.1.4 (2023-10-11)
|
|
12
32
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
### Features
|
|
16
|
-
|
|
17
|
-
* One-way ANOVA (see Top Menu > ML > Analysis of Variances (ANOVA)...)
|
|
33
|
+
Add one-way ANOVA (see Top Menu > ML > Analysis of Variances (ANOVA)...)
|
|
18
34
|
|
|
19
35
|
## 1.1.3 (2023-08-24)
|
|
20
36
|
|
|
21
|
-
This release is centered around enhancing user-friendliness and addressing concerns.
|
|
22
|
-
|
|
23
|
-
### Features
|
|
24
|
-
|
|
25
37
|
* The method PCA is replaced to Top Menu > ML > Dimensionality Reduction
|
|
26
38
|
* The method UMPA is added (see Top Menu > ML > Dimensionality Reduction)
|
|
27
39
|
* The method t-SNE is added (see Top Menu > ML > Dimensionality Reduction)
|
|
@@ -29,9 +41,5 @@ This release is centered around enhancing user-friendliness and addressing conce
|
|
|
29
41
|
|
|
30
42
|
## 1.1.2 (2023-07-27)
|
|
31
43
|
|
|
32
|
-
This release focuses on improving usability.
|
|
33
|
-
|
|
34
|
-
### Features
|
|
35
|
-
|
|
36
44
|
* Move Multivariate Analysis using partial least squares (PLS) regression to Top Menu | ML
|
|
37
45
|
* In PLS and PCA, just numerical columns can be selected as features
|
package/README.md
CHANGED
|
@@ -13,3 +13,5 @@ EDA is a [package](https://datagrok.ai/help/develop/#packages) for the [Datagrok
|
|
|
13
13
|
* Least-squares support vector machine ([LS-SVM](https://en.wikipedia.org/wiki/Least-squares_support_vector_machine))
|
|
14
14
|
* Analysis of variances (ANOVA)
|
|
15
15
|
* One-way ANOVA ([link](https://en.wikipedia.org/wiki/One-way_analysis_of_variance))
|
|
16
|
+
* Missing data imputation
|
|
17
|
+
* k-nearest neighbors method ([KNN](https://en.wikipedia.org/wiki/K-nearest_neighbors_algorithm))
|
package/dist/100.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var eda;(()=>{"use strict";var e,r,t={7100:(e,r,t)=>{var a
|
|
2
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTAwLmpzIiwibWFwcGluZ3MiOiIrQkFBSUEsRUNBQUMsRSxrQkNBRyxJQUFJLEVBQ0FDLEtBR1IsSUFBK0IsRUFBNkIsQ0FBQyxJQUZ0QixVQUFJLFlBQzFDQSxFQUFzQyxVQUFJLFlDRnZDLE1BQU1DLEVBQVNDLEdBQU1BLFEsd0JDRTVCQyxVQUFhQyxJQUNULE1BQU0sT0FBRUMsRUFBTSxPQUFFQyxFQUFNLFNBQUVDLEVBQVEsU0FBRUMsRUFBUSxXQUFFQyxFQUFVLEtBQUVDLEdBQVNOLEVBQU1PLEtBQ2pFQSxFQUFPLENBQUMsRUFDZCxJQUdJLElBQUlDLEVBQUlMLEVBQ0pNLEVBQUlMLEVBQ0pNLEVBQU0sRUFDTkMsRUFBTyxFQUNQQyxFQUFPQyxPQUFPQyxVQUNsQixJQUFJLFFBQWlCWixHQUNqQixJQUFLLElBQUlNLEVBQUksRUFBR0EsRUFBSVAsRUFBT2MsU0FBVVAsRUFDN0JYLEVBQU1JLEVBQU9PLE1BRWpCUCxFQUFPTyxHQUFLLElBQUksSUFBU1AsRUFBT08sR0FBR1EsTUFBT2YsRUFBT08sR0FBR1MsVUFHNUQsTUFBTUMsRUFBUyxJQUFJQyxhQUFhZCxHQUMxQmUsRUFBYSxJQUFJLEtBQVFsQixHQUFRbUIsV0FBV2YsR0FDbEQsS0FBT0ksRUFBTUwsR0FBWSxDQUNyQixNQUFNaUIsRUFBU3pCLEVBQU1JLEVBQU9PLEtBQVFYLEVBQU1JLEVBQU9RLElBQ1YsRUFBbkNXLEVBQVduQixFQUFPTyxHQUFJUCxFQUFPUSxJQUNqQ1MsRUFBT1IsR0FBT1ksRUFDVkEsRUFBUVgsSUFDUkEsRUFBT1csR0FDUEEsRUFBUVYsSUFDUkEsRUFBT1UsR0FDWFosSUFDQUQsSUFDSUEsSUFBTVIsRUFBT2MsU0FDYlAsSUFDQUMsRUFBSUQsRUFBSSxFQUVoQixDQUNBRCxFQUFLZ0IsbUJBQXFCTCxFQUMxQlgsRUFBS2lCLElBQU1iLEVBQ1hKLEVBQUtrQixJQUFNYixDQUNmLENBQ0EsTUFBT2MsR0FDSG5CLEVBQUtvQixNQUFRRCxDQUNqQixDQUNBRSxZQUFZckIsRUFBSyxDLEdDNUNqQnNCLEVBQTJCLENBQUMsRUFHaEMsU0FBU0MsRUFBb0JDLEdBRTVCLElBQUlDLEVBQWVILEVBQXlCRSxHQUM1QyxRQUFxQkUsSUFBakJELEVBQ0gsT0FBT0EsRUFBYUUsUUFHckIsSUFBSUMsRUFBU04sRUFBeUJFLEdBQVksQ0FHakRHLFFBQVMsQ0FBQyxHQU9YLE9BSEFFLEVBQW9CTCxHQUFVSSxFQUFRQSxFQUFPRCxRQUFTSixHQUcvQ0ssRUFBT0QsT0FDZixDQUdBSixFQUFvQk8sRUFBSUQsRUFHeEJOLEVBQW9CaEMsRUFBSSxLQUd2QixJQUFJd0MsRUFBc0JSLEVBQW9CUyxPQUFFTixFQUFXLENBQUMsSUFBSSxNQUFNLElBQU9ILEVBQW9CLFFBRWpHLE9BRHNCQSxFQUFvQlMsRUFBRUQsRUFDbEIsRUxqQ3ZCNUMsRUFBVyxHQUNmb0MsRUFBb0JTLEVBQUksQ0FBQ0MsRUFBUUMsRUFBVUMsRUFBSUMsS0FDOUMsSUFBR0YsRUFBSCxDQU1BLElBQUlHLEVBQWVDLElBQ25CLElBQVNyQyxFQUFJLEVBQUdBLEVBQUlkLEVBQVNxQixPQUFRUCxJQUFLLENBR3pDLElBRkEsSUFBS2lDLEVBQVVDLEVBQUlDLEdBQVlqRCxFQUFTYyxHQUNwQ3NDLEdBQVksRUFDUHJDLEVBQUksRUFBR0EsRUFBSWdDLEVBQVMxQixPQUFRTixNQUNwQixFQUFYa0MsR0FBc0JDLEdBQWdCRCxJQUFhSSxPQUFPQyxLQUFLbEIsRUFBb0JTLEdBQUdVLE9BQU9DLEdBQVNwQixFQUFvQlMsRUFBRVcsR0FBS1QsRUFBU2hDLE1BQzlJZ0MsRUFBU1UsT0FBTzFDLElBQUssSUFFckJxQyxHQUFZLEVBQ1RILEVBQVdDLElBQWNBLEVBQWVELElBRzdDLEdBQUdHLEVBQVcsQ0FDYnBELEVBQVN5RCxPQUFPM0MsSUFBSyxHQUNyQixJQUFJNEMsRUFBSVYsU0FDRVQsSUFBTm1CLElBQWlCWixFQUFTWSxFQUMvQixDQUNELENBQ0EsT0FBT1osQ0FuQlAsQ0FKQ0csRUFBV0EsR0FBWSxFQUN2QixJQUFJLElBQUluQyxFQUFJZCxFQUFTcUIsT0FBUVAsRUFBSSxHQUFLZCxFQUFTYyxFQUFJLEdBQUcsR0FBS21DLEVBQVVuQyxJQUFLZCxFQUFTYyxHQUFLZCxFQUFTYyxFQUFJLEdBQ3JHZCxFQUFTYyxHQUFLLENBQUNpQyxFQUFVQyxFQUFJQyxFQXFCakIsRU16QmRiLEVBQW9CdUIsRUFBSSxDQUFDbkIsRUFBU29CLEtBQ2pDLElBQUksSUFBSUosS0FBT0ksRUFDWHhCLEVBQW9CeUIsRUFBRUQsRUFBWUosS0FBU3BCLEVBQW9CeUIsRUFBRXJCLEVBQVNnQixJQUM1RUgsT0FBT1MsZUFBZXRCLEVBQVNnQixFQUFLLENBQUVPLFlBQVksRUFBTUMsSUFBS0osRUFBV0osSUFFMUUsRUNORHBCLEVBQW9CNkIsRUFBSSxDQUFDLEVBR3pCN0IsRUFBb0JKLEVBQUtrQyxHQUNqQkMsUUFBUUMsSUFBSWYsT0FBT0MsS0FBS2xCLEVBQW9CNkIsR0FBR0ksUUFBTyxDQUFDQyxFQUFVZCxLQUN2RXBCLEVBQW9CNkIsRUFBRVQsR0FBS1UsRUFBU0ksR0FDN0JBLElBQ0wsS0NOSmxDLEVBQW9CbUMsRUFBS0wsR0FFWkEsRUFBVSxNQ0h2QjlCLEVBQW9Cb0MsRUFBSSxXQUN2QixHQUEwQixpQkFBZkMsV0FBeUIsT0FBT0EsV0FDM0MsSUFDQyxPQUFPQyxNQUFRLElBQUlDLFNBQVMsY0FBYixFQUNoQixDQUFFLE1BQU8zQyxHQUNSLEdBQXNCLGlCQUFYNEMsT0FBcUIsT0FBT0EsTUFDeEMsQ0FDQSxDQVB1QixHQ0F4QnhDLEVBQW9CeUIsRUFBSSxDQUFDZ0IsRUFBS0MsSUFBVXpCLE9BQU8wQixVQUFVQyxlQUFlQyxLQUFLSixFQUFLQyxHLE1DQWxGLElBQUlJLEVBQ0E5QyxFQUFvQm9DLEVBQUVXLGdCQUFlRCxFQUFZOUMsRUFBb0JvQyxFQUFFWSxTQUFXLElBQ3RGLElBQUlDLEVBQVdqRCxFQUFvQm9DLEVBQUVhLFNBQ3JDLElBQUtILEdBQWFHLElBQ2JBLEVBQVNDLGdCQUNaSixFQUFZRyxFQUFTQyxjQUFjQyxNQUMvQkwsR0FBVyxDQUNmLElBQUlNLEVBQVVILEVBQVNJLHFCQUFxQixVQUM1QyxHQUFHRCxFQUFRbkUsT0FFVixJQURBLElBQUlQLEVBQUkwRSxFQUFRbkUsT0FBUyxFQUNsQlAsR0FBSyxJQUFNb0UsR0FBV0EsRUFBWU0sRUFBUTFFLEtBQUt5RSxHQUV4RCxDQUlELElBQUtMLEVBQVcsTUFBTSxJQUFJUSxNQUFNLHlEQUNoQ1IsRUFBWUEsRUFBVVMsUUFBUSxPQUFRLElBQUlBLFFBQVEsUUFBUyxJQUFJQSxRQUFRLFlBQWEsS0FDcEZ2RCxFQUFvQndELEVBQUlWLEMsV0NkeEIsSUFBSVcsRUFBa0IsQ0FDckIsSUFBSyxHQWdCTnpELEVBQW9CNkIsRUFBRW5ELEVBQUksQ0FBQ29ELEVBQVNJLEtBRS9CdUIsRUFBZ0IzQixJQUVsQmlCLGNBQWMvQyxFQUFvQndELEVBQUl4RCxFQUFvQm1DLEVBQUVMLEdBRTlELEVBR0QsSUFBSTRCLEVBQXFCQyxLQUFzQixnQkFBSUEsS0FBc0IsaUJBQUssR0FDMUVDLEVBQTZCRixFQUFtQkcsS0FBS0MsS0FBS0osR0FDOURBLEVBQW1CRyxLQXZCQ3BGLElBQ25CLElBQUtrQyxFQUFVb0QsRUFBYUMsR0FBV3ZGLEVBQ3ZDLElBQUksSUFBSXdCLEtBQVk4RCxFQUNoQi9ELEVBQW9CeUIsRUFBRXNDLEVBQWE5RCxLQUNyQ0QsRUFBb0JPLEVBQUVOLEdBQVk4RCxFQUFZOUQsSUFJaEQsSUFERytELEdBQVNBLEVBQVFoRSxHQUNkVyxFQUFTMUIsUUFDZHdFLEVBQWdCOUMsRUFBU3NELE9BQVMsRUFDbkNMLEVBQTJCbkYsRUFBSyxDLEtYbkI3QlosRUFBT21DLEVBQW9CaEMsRUFDL0JnQyxFQUFvQmhDLEVBQUksSUFDaEIrRCxRQUFRQyxJQUFJLENBQ2xCaEMsRUFBb0JKLEVBQUUsS0FDdEJJLEVBQW9CSixFQUFFLE9BQ3BCc0UsS0FBS3JHLEdZSlQsSUFBSTJDLEVBQXNCUixFQUFvQmhDLEkiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ydW50aW1lL2NodW5rIGxvYWRlZCIsIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ydW50aW1lL3N0YXJ0dXAgY2h1bmsgZGVwZW5kZW5jaWVzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21sL3NyYy9kaXN0YW5jZS1tYXRyaXgvdHlwZXMuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWwvc3JjL2Rpc3RhbmNlLW1hdHJpeC91dGlscy5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tbC9zcmMvZGlzdGFuY2UtbWF0cml4L2Rpc3RhbmNlLW1hdHJpeC13b3JrZXIuanMiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL2VkYS93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svcnVudGltZS9lbnN1cmUgY2h1bmsiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svcnVudGltZS9nZXQgamF2YXNjcmlwdCBjaHVuayBmaWxlbmFtZSIsIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ydW50aW1lL2dsb2JhbCIsIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ydW50aW1lL3B1YmxpY1BhdGgiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svcnVudGltZS9pbXBvcnRTY3JpcHRzIGNodW5rIGxvYWRpbmciLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svc3RhcnR1cCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZGVmZXJyZWQgPSBbXTtcbl9fd2VicGFja19yZXF1aXJlX18uTyA9IChyZXN1bHQsIGNodW5rSWRzLCBmbiwgcHJpb3JpdHkpID0+IHtcblx0aWYoY2h1bmtJZHMpIHtcblx0XHRwcmlvcml0eSA9IHByaW9yaXR5IHx8IDA7XG5cdFx0Zm9yKHZhciBpID0gZGVmZXJyZWQubGVuZ3RoOyBpID4gMCAmJiBkZWZlcnJlZFtpIC0gMV1bMl0gPiBwcmlvcml0eTsgaS0tKSBkZWZlcnJlZFtpXSA9IGRlZmVycmVkW2kgLSAxXTtcblx0XHRkZWZlcnJlZFtpXSA9IFtjaHVua0lkcywgZm4sIHByaW9yaXR5XTtcblx0XHRyZXR1cm47XG5cdH1cblx0dmFyIG5vdEZ1bGZpbGxlZCA9IEluZmluaXR5O1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IGRlZmVycmVkLmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIFtjaHVua0lkcywgZm4sIHByaW9yaXR5XSA9IGRlZmVycmVkW2ldO1xuXHRcdHZhciBmdWxmaWxsZWQgPSB0cnVlO1xuXHRcdGZvciAodmFyIGogPSAwOyBqIDwgY2h1bmtJZHMubGVuZ3RoOyBqKyspIHtcblx0XHRcdGlmICgocHJpb3JpdHkgJiAxID09PSAwIHx8IG5vdEZ1bGZpbGxlZCA+PSBwcmlvcml0eSkgJiYgT2JqZWN0LmtleXMoX193ZWJwYWNrX3JlcXVpcmVfXy5PKS5ldmVyeSgoa2V5KSA9PiAoX193ZWJwYWNrX3JlcXVpcmVfXy5PW2tleV0oY2h1bmtJZHNbal0pKSkpIHtcblx0XHRcdFx0Y2h1bmtJZHMuc3BsaWNlKGotLSwgMSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmdWxmaWxsZWQgPSBmYWxzZTtcblx0XHRcdFx0aWYocHJpb3JpdHkgPCBub3RGdWxmaWxsZWQpIG5vdEZ1bGZpbGxlZCA9IHByaW9yaXR5O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZihmdWxmaWxsZWQpIHtcblx0XHRcdGRlZmVycmVkLnNwbGljZShpLS0sIDEpXG5cdFx0XHR2YXIgciA9IGZuKCk7XG5cdFx0XHRpZiAociAhPT0gdW5kZWZpbmVkKSByZXN1bHQgPSByO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gcmVzdWx0O1xufTsiLCJ2YXIgbmV4dCA9IF9fd2VicGFja19yZXF1aXJlX18ueDtcbl9fd2VicGFja19yZXF1aXJlX18ueCA9ICgpID0+IHtcblx0cmV0dXJuIFByb21pc2UuYWxsKFtcblx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmUoNDgzKSxcblx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmUoMzYxKVxuXHRdKS50aGVuKG5leHQpO1xufTsiLCJleHBvcnQgdmFyIERpc3RhbmNlQWdncmVnYXRpb25NZXRob2RzO1xuKGZ1bmN0aW9uIChEaXN0YW5jZUFnZ3JlZ2F0aW9uTWV0aG9kcykge1xuICAgIERpc3RhbmNlQWdncmVnYXRpb25NZXRob2RzW1wiRVVDTElERUFOXCJdID0gXCJFVUNMSURFQU5cIjtcbiAgICBEaXN0YW5jZUFnZ3JlZ2F0aW9uTWV0aG9kc1tcIk1BTkhBVFRBTlwiXSA9IFwiTUFOSEFUVEFOXCI7XG59KShEaXN0YW5jZUFnZ3JlZ2F0aW9uTWV0aG9kcyB8fCAoRGlzdGFuY2VBZ2dyZWdhdGlvbk1ldGhvZHMgPSB7fSkpO1xuO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pZEhsd1pYTXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lKMGVYQmxjeTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pUVVGQlFTeE5RVUZOTEVOQlFVNHNTVUZCV1N3d1FrRkhWRHRCUVVoSUxGZEJRVmtzTUVKQlFUQkNPMGxCUTJ4RExIRkVRVUYxUWl4RFFVRkJPMGxCUTNaQ0xIRkVRVUYxUWl4RFFVRkJPMEZCUTNwQ0xFTkJRVU1zUlVGSVV5d3dRa0ZCTUVJc1MwRkJNVUlzTUVKQlFUQkNMRkZCUjI1RE8wRkJRVUVzUTBGQlF5SXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbVY0Y0c5eWRDQmxiblZ0SUVScGMzUmhibU5sUVdkbmNtVm5ZWFJwYjI1TlpYUm9iMlJ6SUh0Y2JpQWdJQ0JGVlVOTVNVUkZRVTRnUFNBblJWVkRURWxFUlVGT0p5eGNiaUFnSUNCTlFVNUlRVlJVUVU0Z1BTQW5UVUZPU0VGVVZFRk9KeXhjYmlBZ2ZUdGNibHh1Wlhod2IzSjBJSFI1Y0dVZ1JHbHpkR0Z1WTJWQloyZHlaV2RoZEdsdmJrMWxkR2h2WkNBOUlHdGxlVzltSUhSNWNHVnZaaUJFYVhOMFlXNWpaVUZuWjNKbFoyRjBhVzl1VFdWMGFHOWtjenRjYmlKZGZRPT0iLCJpbXBvcnQgeyBEaXN0YW5jZUFnZ3JlZ2F0aW9uTWV0aG9kcyB9IGZyb20gJy4vdHlwZXMnO1xuZXhwb3J0IGNvbnN0IGlzTmlsID0gKHgpID0+IHggPT09IG51bGwgfHwgeCA9PT0gdW5kZWZpbmVkO1xuZXhwb3J0IGZ1bmN0aW9uIGluc2VydFNtYWxsZXIoZGlzdGFuY2VzQXIsIGluZGV4ZXMsIG51bSwgaW5kZXgpIHtcbiAgICBpZiAobnVtID4gZGlzdGFuY2VzQXJbZGlzdGFuY2VzQXIubGVuZ3RoIC0gMV0pXG4gICAgICAgIHJldHVybjtcbiAgICBjb25zdCBuZXdQb3NpdGlvbiA9IGRpc3RhbmNlc0FyLmZpbmRJbmRleCgodikgPT4gbnVtIDwgdik7XG4gICAgZGlzdGFuY2VzQXIucG9wKCk7XG4gICAgZGlzdGFuY2VzQXIuc3BsaWNlKG5ld1Bvc2l0aW9uLCAwLCBudW0pO1xuICAgIGluZGV4ZXMucG9wKCk7XG4gICAgaW5kZXhlcy5zcGxpY2UobmV3UG9zaXRpb24sIDAsIGluZGV4KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRMYXJnZXIoZGlzdGFuY2VzQXIsIGluZGV4ZXMsIG51bSwgaW5kZXgpIHtcbiAgICBpZiAobnVtIDwgZGlzdGFuY2VzQXJbZGlzdGFuY2VzQXIubGVuZ3RoIC0gMV0pXG4gICAgICAgIHJldHVybjtcbiAgICBjb25zdCBuZXdQb3NpdGlvbiA9IGRpc3RhbmNlc0FyLmZpbmRJbmRleCgodikgPT4gbnVtID4gdik7XG4gICAgZGlzdGFuY2VzQXIucG9wKCk7XG4gICAgZGlzdGFuY2VzQXIuc3BsaWNlKG5ld1Bvc2l0aW9uLCAwLCBudW0pO1xuICAgIGluZGV4ZXMucG9wKCk7XG4gICAgaW5kZXhlcy5zcGxpY2UobmV3UG9zaXRpb24sIDAsIGluZGV4KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRBZ2dyZWdhdGlvbkZ1bmN0aW9uKGFnZ3JlZ2F0aW9uTWV0aG9kLCB3ZWlnaHRzKSB7XG4gICAgc3dpdGNoIChhZ2dyZWdhdGlvbk1ldGhvZCkge1xuICAgICAgICBjYXNlIERpc3RhbmNlQWdncmVnYXRpb25NZXRob2RzLk1BTkhBVFRBTjpcbiAgICAgICAgICAgIHJldHVybiAodnMpID0+IHZzLnJlZHVjZSgoYWNjLCB2YWwsIGlkeCkgPT4gYWNjICsgdmFsICogd2VpZ2h0c1tpZHhdLCAwKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiAodnMpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBldWNsaWRlYW5cbiAgICAgICAgICAgICAgICBjb25zdCBzdW0gPSB2cy5yZWR1Y2UoKGFjYywgdmFsLCBpZHgpID0+IGFjYyArICh2YWwgKiB3ZWlnaHRzW2lkeF0pICoqIDIsIDApO1xuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLnNxcnQoc3VtKTtcbiAgICAgICAgICAgIH07XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pZFhScGJITXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lKMWRHbHNjeTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pUVVGQlFTeFBRVUZQTEVWQlFUUkNMREJDUVVFd1FpeEZRVUZETEUxQlFVMHNVMEZCVXl4RFFVRkRPMEZCUlRsRkxFMUJRVTBzUTBGQlF5eE5RVUZOTEV0QlFVc3NSMEZCUnl4RFFVRkRMRU5CUVUwc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eExRVUZMTEVsQlFVa3NTVUZCU1N4RFFVRkRMRXRCUVVzc1UwRkJVeXhEUVVGRE8wRkJSUzlFTEUxQlFVMHNWVUZCVlN4aFFVRmhMRU5CUVVNc1YwRkJjVUlzUlVGQlJTeFBRVUZwUWl4RlFVRkZMRWRCUVZjc1JVRkJSU3hMUVVGaE8wbEJRMmhITEVsQlFVa3NSMEZCUnl4SFFVRkhMRmRCUVZjc1EwRkJReXhYUVVGWExFTkJRVU1zVFVGQlRTeEhRVUZETEVOQlFVTXNRMEZCUXp0UlFVTjZReXhQUVVGUE8wbEJSVlFzVFVGQlRTeFhRVUZYTEVkQlFVY3NWMEZCVnl4RFFVRkRMRk5CUVZNc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTXNSMEZCUnl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJRekZFTEZkQlFWY3NRMEZCUXl4SFFVRkhMRVZCUVVVc1EwRkJRenRKUVVOc1FpeFhRVUZYTEVOQlFVTXNUVUZCVFN4RFFVRkRMRmRCUVZjc1JVRkJSU3hEUVVGRExFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTTdTVUZEZUVNc1QwRkJUeXhEUVVGRExFZEJRVWNzUlVGQlJTeERRVUZETzBsQlEyUXNUMEZCVHl4RFFVRkRMRTFCUVUwc1EwRkJReXhYUVVGWExFVkJRVVVzUTBGQlF5eEZRVUZGTEV0QlFVc3NRMEZCUXl4RFFVRkRPMEZCUTNoRExFTkJRVU03UVVGRlJDeE5RVUZOTEZWQlFWVXNXVUZCV1N4RFFVRkRMRmRCUVhGQ0xFVkJRVVVzVDBGQmFVSXNSVUZCUlN4SFFVRlhMRVZCUVVVc1MwRkJZVHRKUVVNdlJpeEpRVUZKTEVkQlFVY3NSMEZCUnl4WFFVRlhMRU5CUVVNc1YwRkJWeXhEUVVGRExFMUJRVTBzUjBGQlF5eERRVUZETEVOQlFVTTdVVUZEZWtNc1QwRkJUenRKUVVWVUxFMUJRVTBzVjBGQlZ5eEhRVUZITEZkQlFWY3NRMEZCUXl4VFFVRlRMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzUlVGQlJTeERRVUZETEVkQlFVY3NSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJRenRKUVVNeFJDeFhRVUZYTEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNN1NVRkRiRUlzVjBGQlZ5eERRVUZETEUxQlFVMHNRMEZCUXl4WFFVRlhMRVZCUVVVc1EwRkJReXhGUVVGRkxFZEJRVWNzUTBGQlF5eERRVUZETzBsQlEzaERMRTlCUVU4c1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF6dEpRVU5rTEU5QlFVOHNRMEZCUXl4TlFVRk5MRU5CUVVNc1YwRkJWeXhGUVVGRkxFTkJRVU1zUlVGQlJTeExRVUZMTEVOQlFVTXNRMEZCUXp0QlFVTjRReXhEUVVGRE8wRkJSVVFzVFVGQlRTeFZRVUZWTEhOQ1FVRnpRaXhEUVVOd1F5eHBRa0ZCTkVNc1JVRkJSU3hQUVVGcFFqdEpRVVV2UkN4UlFVRlJMR2xDUVVGcFFpeEZRVUZGTzFGQlEzcENMRXRCUVVzc01FSkJRVEJDTEVOQlFVTXNVMEZCVXp0WlFVTjJReXhQUVVGUExFTkJRVU1zUlVGQldTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVkQlFVY3NSVUZCUlN4SFFVRkhMRVZCUVVVc1JVRkJSU3hEUVVGRExFZEJRVWNzUjBGQlJ5eEhRVUZITEVkQlFVY3NUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEzSkdPMWxCUTBVc1QwRkJUeXhEUVVGRExFVkJRVmtzUlVGQlJTeEZRVUZGTzJkQ1FVTjBRaXhaUVVGWk8yZENRVU5hTEUxQlFVMHNSMEZCUnl4SFFVRkhMRVZCUVVVc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eEhRVUZITEVWQlFVVXNSMEZCUnl4RlFVRkZMRWRCUVVjc1JVRkJSU3hGUVVGRkxFTkJRVU1zUjBGQlJ5eEhRVUZITEVOQlFVTXNSMEZCUnl4SFFVRkhMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJRenRuUWtGRE4wVXNUMEZCVHl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFsQlEzaENMRU5CUVVNc1EwRkJRenRMUVVOTU8wRkJRMGdzUTBGQlF5SXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbWx0Y0c5eWRDQjdSR2x6ZEdGdVkyVkJaMmR5WldkaGRHbHZiazFsZEdodlpDd2dSR2x6ZEdGdVkyVkJaMmR5WldkaGRHbHZiazFsZEdodlpITjlJR1p5YjIwZ0p5NHZkSGx3WlhNbk8xeHVYRzVsZUhCdmNuUWdZMjl1YzNRZ2FYTk9hV3dnUFNBb2VEb2dZVzU1S1NBOVBpQjRJRDA5UFNCdWRXeHNJSHg4SUhnZ1BUMDlJSFZ1WkdWbWFXNWxaRHRjYmx4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdsdWMyVnlkRk50WVd4c1pYSW9aR2x6ZEdGdVkyVnpRWEk2SUc1MWJXSmxjbHRkTENCcGJtUmxlR1Z6T2lCdWRXMWlaWEpiWFN3Z2JuVnRPaUJ1ZFcxaVpYSXNJR2x1WkdWNE9pQnVkVzFpWlhJcElIdGNiaUFnYVdZZ0tHNTFiU0ErSUdScGMzUmhibU5sYzBGeVcyUnBjM1JoYm1ObGMwRnlMbXhsYm1kMGFDMHhYU2xjYmlBZ0lDQnlaWFIxY200N1hHNWNiaUFnWTI5dWMzUWdibVYzVUc5emFYUnBiMjRnUFNCa2FYTjBZVzVqWlhOQmNpNW1hVzVrU1c1a1pYZ29LSFlwSUQwK0lHNTFiU0E4SUhZcE8xeHVJQ0JrYVhOMFlXNWpaWE5CY2k1d2IzQW9LVHRjYmlBZ1pHbHpkR0Z1WTJWelFYSXVjM0JzYVdObEtHNWxkMUJ2YzJsMGFXOXVMQ0F3TENCdWRXMHBPMXh1SUNCcGJtUmxlR1Z6TG5CdmNDZ3BPMXh1SUNCcGJtUmxlR1Z6TG5Od2JHbGpaU2h1WlhkUWIzTnBkR2x2Yml3Z01Dd2dhVzVrWlhncE8xeHVmVnh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnYVc1elpYSjBUR0Z5WjJWeUtHUnBjM1JoYm1ObGMwRnlPaUJ1ZFcxaVpYSmJYU3dnYVc1a1pYaGxjem9nYm5WdFltVnlXMTBzSUc1MWJUb2diblZ0WW1WeUxDQnBibVJsZURvZ2JuVnRZbVZ5S1NCN1hHNGdJR2xtSUNodWRXMGdQQ0JrYVhOMFlXNWpaWE5CY2x0a2FYTjBZVzVqWlhOQmNpNXNaVzVuZEdndE1WMHBYRzRnSUNBZ2NtVjBkWEp1TzF4dVhHNGdJR052Ym5OMElHNWxkMUJ2YzJsMGFXOXVJRDBnWkdsemRHRnVZMlZ6UVhJdVptbHVaRWx1WkdWNEtDaDJLU0E5UGlCdWRXMGdQaUIyS1R0Y2JpQWdaR2x6ZEdGdVkyVnpRWEl1Y0c5d0tDazdYRzRnSUdScGMzUmhibU5sYzBGeUxuTndiR2xqWlNodVpYZFFiM05wZEdsdmJpd2dNQ3dnYm5WdEtUdGNiaUFnYVc1a1pYaGxjeTV3YjNBb0tUdGNiaUFnYVc1a1pYaGxjeTV6Y0d4cFkyVW9ibVYzVUc5emFYUnBiMjRzSURBc0lHbHVaR1Y0S1R0Y2JuMWNibHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJR2RsZEVGblozSmxaMkYwYVc5dVJuVnVZM1JwYjI0b1hHNGdJR0ZuWjNKbFoyRjBhVzl1VFdWMGFHOWtPaUJFYVhOMFlXNWpaVUZuWjNKbFoyRjBhVzl1VFdWMGFHOWtMQ0IzWldsbmFIUnpPaUJ1ZFcxaVpYSmJYVnh1S1RvZ0tIWmhiSFZsY3pvZ2JuVnRZbVZ5VzEwcElEMCtJRzUxYldKbGNpQjdYRzRnSUhOM2FYUmphQ0FvWVdkbmNtVm5ZWFJwYjI1TlpYUm9iMlFwSUh0Y2JpQWdJQ0JqWVhObElFUnBjM1JoYm1ObFFXZG5jbVZuWVhScGIyNU5aWFJvYjJSekxrMUJUa2hCVkZSQlRqcGNiaUFnSUNBZ0lISmxkSFZ5YmlBb2RuTTZJRzUxYldKbGNsdGRLU0E5UGlCMmN5NXlaV1IxWTJVb0tHRmpZeXdnZG1Gc0xDQnBaSGdwSUQwK0lHRmpZeUFySUhaaGJDQXFJSGRsYVdkb2RITmJhV1I0WFN3Z01DazdYRzRnSUNBZ1pHVm1ZWFZzZERwY2JpQWdJQ0FnSUhKbGRIVnliaUFvZG5NNklHNTFiV0psY2x0ZEtTQTlQaUI3WEc0Z0lDQWdJQ0FnSUM4dklHVjFZMnhwWkdWaGJseHVJQ0FnSUNBZ0lDQmpiMjV6ZENCemRXMGdQU0IyY3k1eVpXUjFZMlVvS0dGall5d2dkbUZzTENCcFpIZ3BJRDArSUdGall5QXJJQ2gyWVd3Z0tpQjNaV2xuYUhSelcybGtlRjBwSUNvcUlESXNJREFwTzF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnVFdGMGFDNXpjWEowS0hOMWJTazdYRzRnSUNBZ0lDQjlPMXh1SUNCOVhHNTlYRzRpWFgwPSIsImltcG9ydCB7IGlzTmlsIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBNZWFzdXJlLCBpc0JpdEFycmF5TWV0cmljIH0gZnJvbSAnLi4vdHlwZWQtbWV0cmljcyc7XG5pbXBvcnQgQml0QXJyYXkgZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvYml0LWFycmF5Jztcbm9ubWVzc2FnZSA9IChldmVudCkgPT4ge1xuICAgIGNvbnN0IHsgdmFsdWVzLCBmbk5hbWUsIHN0YXJ0Um93LCBzdGFydENvbCwgY2h1bmNrU2l6ZSwgb3B0cyB9ID0gZXZlbnQuZGF0YTtcbiAgICBjb25zdCBkYXRhID0ge307XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gaWYgKHN0YXJ0Um93ICE9IC0xKVxuICAgICAgICAvLyAgIHRocm93IG5ldyBFcnJvcignRXJyb3IgaW4gZGlzdGFuY2UgbWF0cml4IHdvcmtlcicpOyAvLyBUT0RPOiByZW1vdmUgdGhpcyBsaW5lXG4gICAgICAgIGxldCBpID0gc3RhcnRSb3c7XG4gICAgICAgIGxldCBqID0gc3RhcnRDb2w7XG4gICAgICAgIGxldCBjbnQgPSAwO1xuICAgICAgICBsZXQgbG1pbiA9IDA7XG4gICAgICAgIGxldCBsbWF4ID0gTnVtYmVyLk1JTl9WQUxVRTtcbiAgICAgICAgaWYgKGlzQml0QXJyYXlNZXRyaWMoZm5OYW1lKSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNOaWwodmFsdWVzW2ldKSlcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgdmFsdWVzW2ldID0gbmV3IEJpdEFycmF5KHZhbHVlc1tpXS5fZGF0YSwgdmFsdWVzW2ldLl9sZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJldFZhbCA9IG5ldyBGbG9hdDMyQXJyYXkoY2h1bmNrU2l6ZSk7XG4gICAgICAgIGNvbnN0IGRpc3RhbmNlRm4gPSBuZXcgTWVhc3VyZShmbk5hbWUpLmdldE1lYXN1cmUob3B0cyk7XG4gICAgICAgIHdoaWxlIChjbnQgPCBjaHVuY2tTaXplKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9ICFpc05pbCh2YWx1ZXNbaV0pICYmICFpc05pbCh2YWx1ZXNbal0pID9cbiAgICAgICAgICAgICAgICBkaXN0YW5jZUZuKHZhbHVlc1tpXSwgdmFsdWVzW2pdKSA6IDE7XG4gICAgICAgICAgICByZXRWYWxbY250XSA9IHZhbHVlO1xuICAgICAgICAgICAgaWYgKHZhbHVlIDwgbG1pbilcbiAgICAgICAgICAgICAgICBsbWluID0gdmFsdWU7XG4gICAgICAgICAgICBpZiAodmFsdWUgPiBsbWF4KVxuICAgICAgICAgICAgICAgIGxtYXggPSB2YWx1ZTtcbiAgICAgICAgICAgIGNudCsrO1xuICAgICAgICAgICAgaisrO1xuICAgICAgICAgICAgaWYgKGogPT09IHZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgaiA9IGkgKyAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGRhdGEuZGlzdGFuY2VNYXRyaXhEYXRhID0gcmV0VmFsO1xuICAgICAgICBkYXRhLm1pbiA9IGxtaW47XG4gICAgICAgIGRhdGEubWF4ID0gbG1heDtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgZGF0YS5lcnJvciA9IGU7XG4gICAgfVxuICAgIHBvc3RNZXNzYWdlKGRhdGEpO1xufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVpHbHpkR0Z1WTJVdGJXRjBjbWw0TFhkdmNtdGxjaTVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYkltUnBjM1JoYm1ObExXMWhkSEpwZUMxM2IzSnJaWEl1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWtGQlFVRXNUMEZCVHl4RlFVRkRMRXRCUVVzc1JVRkJReXhOUVVGTkxGTkJRVk1zUTBGQlF6dEJRVU01UWl4UFFVRlBMRVZCUVVNc1QwRkJUeXhGUVVGRkxHZENRVUZuUWl4RlFVRkRMRTFCUVUwc2EwSkJRV3RDTEVOQlFVTTdRVUZETTBRc1QwRkJUeXhSUVVGUkxFMUJRVTBzZVVOQlFYbERMRU5CUVVNN1FVRkZMMFFzVTBGQlV5eEhRVUZITEVOQlFVTXNTMEZCU3l4RlFVRkZMRVZCUVVVN1NVRkRjRUlzVFVGQlRTeEZRVUZETEUxQlFVMHNSVUZCUlN4TlFVRk5MRVZCUVVVc1VVRkJVU3hGUVVGRkxGRkJRVkVzUlVGQlJTeFZRVUZWTEVWQlFVVXNTVUZCU1N4RlFVRkRMRWRCUVVjc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF6dEpRVU14UlN4TlFVRk5MRWxCUVVrc1IwRkJhMFlzUlVGQlJTeERRVUZETzBsQlF5OUdMRWxCUVVrN1VVRkRSaXh6UWtGQmMwSTdVVUZEZEVJc2EwWkJRV3RHTzFGQlEyeEdMRWxCUVVrc1EwRkJReXhIUVVGSExGRkJRVkVzUTBGQlF6dFJRVU5xUWl4SlFVRkpMRU5CUVVNc1IwRkJSeXhSUVVGUkxFTkJRVU03VVVGRGFrSXNTVUZCU1N4SFFVRkhMRWRCUVVjc1EwRkJReXhEUVVGRE8xRkJRMW9zU1VGQlNTeEpRVUZKTEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUTJJc1NVRkJTU3hKUVVGSkxFZEJRVWNzVFVGQlRTeERRVUZETEZOQlFWTXNRMEZCUXp0UlFVTTFRaXhKUVVGSkxHZENRVUZuUWl4RFFVRkRMRTFCUVUwc1EwRkJReXhGUVVGRk8xbEJRelZDTEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eE5RVUZOTEVOQlFVTXNUVUZCVFN4RlFVRkZMRVZCUVVVc1EwRkJReXhGUVVGRk8yZENRVU4wUXl4SlFVRkpMRXRCUVVzc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdiMEpCUVVVc1UwRkJVenRuUWtGREwwSXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFbEJRVWtzVVVGQlVTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhMUVVGTExFVkJRVVVzVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8yRkJRemxFTzFOQlEwWTdVVUZGUkN4TlFVRk5MRTFCUVUwc1IwRkJSeXhKUVVGSkxGbEJRVmtzUTBGQlF5eFZRVUZWTEVOQlFVTXNRMEZCUXp0UlFVTTFReXhOUVVGTkxGVkJRVlVzUjBGQlJ5eEpRVUZKTEU5QlFVOHNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhWUVVGVkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdVVUZEZUVRc1QwRkJUeXhIUVVGSExFZEJRVWNzVlVGQlZTeEZRVUZGTzFsQlEzWkNMRTFCUVUwc1MwRkJTeXhIUVVGSExFTkJRVU1zUzBGQlN5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03WjBKQlEzQkVMRlZCUVZVc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0WlFVTjJReXhOUVVGTkxFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NTMEZCU3l4RFFVRkRPMWxCUTNCQ0xFbEJRVWtzUzBGQlN5eEhRVUZITEVsQlFVazdaMEpCUTJRc1NVRkJTU3hIUVVGSExFdEJRVXNzUTBGQlF6dFpRVU5tTEVsQlFVa3NTMEZCU3l4SFFVRkhMRWxCUVVrN1owSkJRMlFzU1VGQlNTeEhRVUZITEV0QlFVc3NRMEZCUXp0WlFVTm1MRWRCUVVjc1JVRkJSU3hEUVVGRE8xbEJRMDRzUTBGQlF5eEZRVUZGTEVOQlFVTTdXVUZEU2l4SlFVRkpMRU5CUVVNc1MwRkJTeXhOUVVGTkxFTkJRVU1zVFVGQlRTeEZRVUZGTzJkQ1FVTjJRaXhEUVVGRExFVkJRVVVzUTBGQlF6dG5Ra0ZEU2l4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dGhRVU5ZTzFOQlEwWTdVVUZEUkN4SlFVRkpMRU5CUVVNc2EwSkJRV3RDTEVkQlFVY3NUVUZCVFN4RFFVRkRPMUZCUTJwRExFbEJRVWtzUTBGQlF5eEhRVUZITEVkQlFVY3NTVUZCU1N4RFFVRkRPMUZCUTJoQ0xFbEJRVWtzUTBGQlF5eEhRVUZITEVkQlFVY3NTVUZCU1N4RFFVRkRPMHRCUTJwQ08wbEJRVU1zVDBGQlR5eERRVUZETEVWQlFVVTdVVUZEVml4SlFVRkpMRU5CUVVNc1MwRkJTeXhIUVVGSExFTkJRVU1zUTBGQlF6dExRVU5vUWp0SlFVTkVMRmRCUVZjc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dEJRVU53UWl4RFFVRkRMRU5CUVVNaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SnBiWEJ2Y25RZ2UybHpUbWxzZlNCbWNtOXRJQ2N1TDNWMGFXeHpKenRjYm1sdGNHOXlkQ0I3VFdWaGMzVnlaU3dnYVhOQ2FYUkJjbkpoZVUxbGRISnBZMzBnWm5KdmJTQW5MaTR2ZEhsd1pXUXRiV1YwY21samN5YzdYRzVwYlhCdmNuUWdRbWwwUVhKeVlYa2dabkp2YlNBblFHUmhkR0ZuY205ckxXeHBZbkpoY21sbGN5OTFkR2xzY3k5emNtTXZZbWwwTFdGeWNtRjVKenRjYmx4dWIyNXRaWE56WVdkbElEMGdLR1YyWlc1MEtTQTlQaUI3WEc0Z0lHTnZibk4wSUh0MllXeDFaWE1zSUdadVRtRnRaU3dnYzNSaGNuUlNiM2NzSUhOMFlYSjBRMjlzTENCamFIVnVZMnRUYVhwbExDQnZjSFJ6ZlNBOUlHVjJaVzUwTG1SaGRHRTdYRzRnSUdOdmJuTjBJR1JoZEdFNklIc2daWEp5YjNJL09pQmhibmtzSUdScGMzUmhibU5sVFdGMGNtbDRSR0YwWVQ4NklFWnNiMkYwTXpKQmNuSmhlU3dnYldsdVB6b2diblZ0WW1WeUxDQnRZWGcvT2lCdWRXMWlaWEo5SUQwZ2UzMDdYRzRnSUhSeWVTQjdYRzRnSUNBZ0x5OGdhV1lnS0hOMFlYSjBVbTkzSUNFOUlDMHhLVnh1SUNBZ0lDOHZJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLQ2RGY25KdmNpQnBiaUJrYVhOMFlXNWpaU0J0WVhSeWFYZ2dkMjl5YTJWeUp5azdJQzh2SUZSUFJFODZJSEpsYlc5MlpTQjBhR2x6SUd4cGJtVmNiaUFnSUNCc1pYUWdhU0E5SUhOMFlYSjBVbTkzTzF4dUlDQWdJR3hsZENCcUlEMGdjM1JoY25SRGIydzdYRzRnSUNBZ2JHVjBJR051ZENBOUlEQTdYRzRnSUNBZ2JHVjBJR3h0YVc0Z1BTQXdPMXh1SUNBZ0lHeGxkQ0JzYldGNElEMGdUblZ0WW1WeUxrMUpUbDlXUVV4VlJUdGNiaUFnSUNCcFppQW9hWE5DYVhSQmNuSmhlVTFsZEhKcFl5aG1iazVoYldVcEtTQjdYRzRnSUNBZ0lDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJSFpoYkhWbGN5NXNaVzVuZEdnN0lDc3JhU2tnZTF4dUlDQWdJQ0FnSUNCcFppQW9hWE5PYVd3b2RtRnNkV1Z6VzJsZEtTa2dZMjl1ZEdsdWRXVTdYRzRnSUNBZ0lDQWdJSFpoYkhWbGMxdHBYU0E5SUc1bGR5QkNhWFJCY25KaGVTaDJZV3gxWlhOYmFWMHVYMlJoZEdFc0lIWmhiSFZsYzF0cFhTNWZiR1Z1WjNSb0tUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNWNiaUFnSUNCamIyNXpkQ0J5WlhSV1lXd2dQU0J1WlhjZ1JteHZZWFF6TWtGeWNtRjVLR05vZFc1amExTnBlbVVwTzF4dUlDQWdJR052Ym5OMElHUnBjM1JoYm1ObFJtNGdQU0J1WlhjZ1RXVmhjM1Z5WlNobWJrNWhiV1VwTG1kbGRFMWxZWE4xY21Vb2IzQjBjeWs3WEc0Z0lDQWdkMmhwYkdVZ0tHTnVkQ0E4SUdOb2RXNWphMU5wZW1VcElIdGNiaUFnSUNBZ0lHTnZibk4wSUhaaGJIVmxJRDBnSVdselRtbHNLSFpoYkhWbGMxdHBYU2tnSmlZZ0lXbHpUbWxzS0haaGJIVmxjMXRxWFNrZ1AxeHVJQ0FnSUNBZ0lDQmthWE4wWVc1alpVWnVLSFpoYkhWbGMxdHBYU3dnZG1Gc2RXVnpXMnBkS1NBNklERTdYRzRnSUNBZ0lDQnlaWFJXWVd4YlkyNTBYU0E5SUhaaGJIVmxPMXh1SUNBZ0lDQWdhV1lnS0haaGJIVmxJRHdnYkcxcGJpbGNiaUFnSUNBZ0lDQWdiRzFwYmlBOUlIWmhiSFZsTzF4dUlDQWdJQ0FnYVdZZ0tIWmhiSFZsSUQ0Z2JHMWhlQ2xjYmlBZ0lDQWdJQ0FnYkcxaGVDQTlJSFpoYkhWbE8xeHVJQ0FnSUNBZ1kyNTBLeXM3WEc0Z0lDQWdJQ0JxS3lzN1hHNGdJQ0FnSUNCcFppQW9haUE5UFQwZ2RtRnNkV1Z6TG14bGJtZDBhQ2tnZTF4dUlDQWdJQ0FnSUNCcEt5czdYRzRnSUNBZ0lDQWdJR29nUFNCcElDc2dNVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzRnSUNBZ1pHRjBZUzVrYVhOMFlXNWpaVTFoZEhKcGVFUmhkR0VnUFNCeVpYUldZV3c3WEc0Z0lDQWdaR0YwWVM1dGFXNGdQU0JzYldsdU8xeHVJQ0FnSUdSaGRHRXViV0Y0SUQwZ2JHMWhlRHRjYmlBZ2ZTQmpZWFJqYUNBb1pTa2dlMXh1SUNBZ0lHUmhkR0V1WlhKeWIzSWdQU0JsTzF4dUlDQjlYRzRnSUhCdmMzUk5aWE56WVdkbEtHUmhkR0VwTzF4dWZUdGNiaUpkZlE9PSIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4vLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuX193ZWJwYWNrX3JlcXVpcmVfXy5tID0gX193ZWJwYWNrX21vZHVsZXNfXztcblxuLy8gdGhlIHN0YXJ0dXAgZnVuY3Rpb25cbl9fd2VicGFja19yZXF1aXJlX18ueCA9ICgpID0+IHtcblx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG5cdC8vIFRoaXMgZW50cnkgbW9kdWxlIGRlcGVuZHMgb24gb3RoZXIgbG9hZGVkIGNodW5rcyBhbmQgZXhlY3V0aW9uIG5lZWQgdG8gYmUgZGVsYXllZFxuXHR2YXIgX193ZWJwYWNrX2V4cG9ydHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18uTyh1bmRlZmluZWQsIFs0ODMsMzYxXSwgKCkgPT4gKF9fd2VicGFja19yZXF1aXJlX18oNzEwMCkpKVxuXHRfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXy5PKF9fd2VicGFja19leHBvcnRzX18pO1xuXHRyZXR1cm4gX193ZWJwYWNrX2V4cG9ydHNfXztcbn07XG5cbiIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18uZiA9IHt9O1xuLy8gVGhpcyBmaWxlIGNvbnRhaW5zIG9ubHkgdGhlIGVudHJ5IGNodW5rLlxuLy8gVGhlIGNodW5rIGxvYWRpbmcgZnVuY3Rpb24gZm9yIGFkZGl0aW9uYWwgY2h1bmtzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmUgPSAoY2h1bmtJZCkgPT4ge1xuXHRyZXR1cm4gUHJvbWlzZS5hbGwoT2JqZWN0LmtleXMoX193ZWJwYWNrX3JlcXVpcmVfXy5mKS5yZWR1Y2UoKHByb21pc2VzLCBrZXkpID0+IHtcblx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmZba2V5XShjaHVua0lkLCBwcm9taXNlcyk7XG5cdFx0cmV0dXJuIHByb21pc2VzO1xuXHR9LCBbXSkpO1xufTsiLCIvLyBUaGlzIGZ1bmN0aW9uIGFsbG93IHRvIHJlZmVyZW5jZSBhc3luYyBjaHVua3MgYW5kIHNpYmxpbmcgY2h1bmtzIGZvciB0aGUgZW50cnlwb2ludFxuX193ZWJwYWNrX3JlcXVpcmVfXy51ID0gKGNodW5rSWQpID0+IHtcblx0Ly8gcmV0dXJuIHVybCBmb3IgZmlsZW5hbWVzIGJhc2VkIG9uIHRlbXBsYXRlXG5cdHJldHVybiBcIlwiICsgY2h1bmtJZCArIFwiLmpzXCI7XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18uZyA9IChmdW5jdGlvbigpIHtcblx0aWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSAnb2JqZWN0JykgcmV0dXJuIGdsb2JhbFRoaXM7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIHRoaXMgfHwgbmV3IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcpIHJldHVybiB3aW5kb3c7XG5cdH1cbn0pKCk7IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsInZhciBzY3JpcHRVcmw7XG5pZiAoX193ZWJwYWNrX3JlcXVpcmVfXy5nLmltcG9ydFNjcmlwdHMpIHNjcmlwdFVybCA9IF9fd2VicGFja19yZXF1aXJlX18uZy5sb2NhdGlvbiArIFwiXCI7XG52YXIgZG9jdW1lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmcuZG9jdW1lbnQ7XG5pZiAoIXNjcmlwdFVybCAmJiBkb2N1bWVudCkge1xuXHRpZiAoZG9jdW1lbnQuY3VycmVudFNjcmlwdClcblx0XHRzY3JpcHRVcmwgPSBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYztcblx0aWYgKCFzY3JpcHRVcmwpIHtcblx0XHR2YXIgc2NyaXB0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwic2NyaXB0XCIpO1xuXHRcdGlmKHNjcmlwdHMubGVuZ3RoKSB7XG5cdFx0XHR2YXIgaSA9IHNjcmlwdHMubGVuZ3RoIC0gMTtcblx0XHRcdHdoaWxlIChpID4gLTEgJiYgIXNjcmlwdFVybCkgc2NyaXB0VXJsID0gc2NyaXB0c1tpLS1dLnNyYztcblx0XHR9XG5cdH1cbn1cbi8vIFdoZW4gc3VwcG9ydGluZyBicm93c2VycyB3aGVyZSBhbiBhdXRvbWF0aWMgcHVibGljUGF0aCBpcyBub3Qgc3VwcG9ydGVkIHlvdSBtdXN0IHNwZWNpZnkgYW4gb3V0cHV0LnB1YmxpY1BhdGggbWFudWFsbHkgdmlhIGNvbmZpZ3VyYXRpb25cbi8vIG9yIHBhc3MgYW4gZW1wdHkgc3RyaW5nIChcIlwiKSBhbmQgc2V0IHRoZSBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyB2YXJpYWJsZSBmcm9tIHlvdXIgY29kZSB0byB1c2UgeW91ciBvd24gbG9naWMuXG5pZiAoIXNjcmlwdFVybCkgdGhyb3cgbmV3IEVycm9yKFwiQXV0b21hdGljIHB1YmxpY1BhdGggaXMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGJyb3dzZXJcIik7XG5zY3JpcHRVcmwgPSBzY3JpcHRVcmwucmVwbGFjZSgvIy4qJC8sIFwiXCIpLnJlcGxhY2UoL1xcPy4qJC8sIFwiXCIpLnJlcGxhY2UoL1xcL1teXFwvXSskLywgXCIvXCIpO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5wID0gc2NyaXB0VXJsOyIsIi8vIG5vIGJhc2VVUklcblxuLy8gb2JqZWN0IHRvIHN0b3JlIGxvYWRlZCBjaHVua3Ncbi8vIFwiMVwiIG1lYW5zIFwiYWxyZWFkeSBsb2FkZWRcIlxudmFyIGluc3RhbGxlZENodW5rcyA9IHtcblx0MTAwOiAxXG59O1xuXG4vLyBpbXBvcnRTY3JpcHRzIGNodW5rIGxvYWRpbmdcbnZhciBpbnN0YWxsQ2h1bmsgPSAoZGF0YSkgPT4ge1xuXHR2YXIgW2NodW5rSWRzLCBtb3JlTW9kdWxlcywgcnVudGltZV0gPSBkYXRhO1xuXHRmb3IodmFyIG1vZHVsZUlkIGluIG1vcmVNb2R1bGVzKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1vcmVNb2R1bGVzLCBtb2R1bGVJZCkpIHtcblx0XHRcdF9fd2VicGFja19yZXF1aXJlX18ubVttb2R1bGVJZF0gPSBtb3JlTW9kdWxlc1ttb2R1bGVJZF07XG5cdFx0fVxuXHR9XG5cdGlmKHJ1bnRpbWUpIHJ1bnRpbWUoX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cdHdoaWxlKGNodW5rSWRzLmxlbmd0aClcblx0XHRpbnN0YWxsZWRDaHVua3NbY2h1bmtJZHMucG9wKCldID0gMTtcblx0cGFyZW50Q2h1bmtMb2FkaW5nRnVuY3Rpb24oZGF0YSk7XG59O1xuX193ZWJwYWNrX3JlcXVpcmVfXy5mLmkgPSAoY2h1bmtJZCwgcHJvbWlzZXMpID0+IHtcblx0Ly8gXCIxXCIgaXMgdGhlIHNpZ25hbCBmb3IgXCJhbHJlYWR5IGxvYWRlZFwiXG5cdGlmKCFpbnN0YWxsZWRDaHVua3NbY2h1bmtJZF0pIHtcblx0XHRpZih0cnVlKSB7IC8vIGFsbCBjaHVua3MgaGF2ZSBKU1xuXHRcdFx0aW1wb3J0U2NyaXB0cyhfX3dlYnBhY2tfcmVxdWlyZV9fLnAgKyBfX3dlYnBhY2tfcmVxdWlyZV9fLnUoY2h1bmtJZCkpO1xuXHRcdH1cblx0fVxufTtcblxudmFyIGNodW5rTG9hZGluZ0dsb2JhbCA9IHNlbGZbXCJ3ZWJwYWNrQ2h1bmtlZGFcIl0gPSBzZWxmW1wid2VicGFja0NodW5rZWRhXCJdIHx8IFtdO1xudmFyIHBhcmVudENodW5rTG9hZGluZ0Z1bmN0aW9uID0gY2h1bmtMb2FkaW5nR2xvYmFsLnB1c2guYmluZChjaHVua0xvYWRpbmdHbG9iYWwpO1xuY2h1bmtMb2FkaW5nR2xvYmFsLnB1c2ggPSBpbnN0YWxsQ2h1bms7XG5cbi8vIG5vIEhNUlxuXG4vLyBubyBITVIgbWFuaWZlc3QiLCIvLyBydW4gc3RhcnR1cFxudmFyIF9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fLngoKTtcbiJdLCJuYW1lcyI6WyJkZWZlcnJlZCIsIm5leHQiLCJEaXN0YW5jZUFnZ3JlZ2F0aW9uTWV0aG9kcyIsImlzTmlsIiwieCIsIm9ubWVzc2FnZSIsImV2ZW50IiwidmFsdWVzIiwiZm5OYW1lIiwic3RhcnRSb3ciLCJzdGFydENvbCIsImNodW5ja1NpemUiLCJvcHRzIiwiZGF0YSIsImkiLCJqIiwiY250IiwibG1pbiIsImxtYXgiLCJOdW1iZXIiLCJNSU5fVkFMVUUiLCJsZW5ndGgiLCJfZGF0YSIsIl9sZW5ndGgiLCJyZXRWYWwiLCJGbG9hdDMyQXJyYXkiLCJkaXN0YW5jZUZuIiwiZ2V0TWVhc3VyZSIsInZhbHVlIiwiZGlzdGFuY2VNYXRyaXhEYXRhIiwibWluIiwibWF4IiwiZSIsImVycm9yIiwicG9zdE1lc3NhZ2UiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJ1bmRlZmluZWQiLCJleHBvcnRzIiwibW9kdWxlIiwiX193ZWJwYWNrX21vZHVsZXNfXyIsIm0iLCJfX3dlYnBhY2tfZXhwb3J0c19fIiwiTyIsInJlc3VsdCIsImNodW5rSWRzIiwiZm4iLCJwcmlvcml0eSIsIm5vdEZ1bGZpbGxlZCIsIkluZmluaXR5IiwiZnVsZmlsbGVkIiwiT2JqZWN0Iiwia2V5cyIsImV2ZXJ5Iiwia2V5Iiwic3BsaWNlIiwiciIsImQiLCJkZWZpbml0aW9uIiwibyIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsImYiLCJjaHVua0lkIiwiUHJvbWlzZSIsImFsbCIsInJlZHVjZSIsInByb21pc2VzIiwidSIsImciLCJnbG9iYWxUaGlzIiwidGhpcyIsIkZ1bmN0aW9uIiwid2luZG93Iiwib2JqIiwicHJvcCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsInNjcmlwdFVybCIsImltcG9ydFNjcmlwdHMiLCJsb2NhdGlvbiIsImRvY3VtZW50IiwiY3VycmVudFNjcmlwdCIsInNyYyIsInNjcmlwdHMiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsIkVycm9yIiwicmVwbGFjZSIsInAiLCJpbnN0YWxsZWRDaHVua3MiLCJjaHVua0xvYWRpbmdHbG9iYWwiLCJzZWxmIiwicGFyZW50Q2h1bmtMb2FkaW5nRnVuY3Rpb24iLCJwdXNoIiwiYmluZCIsIm1vcmVNb2R1bGVzIiwicnVudGltZSIsInBvcCIsInRoZW4iXSwic291cmNlUm9vdCI6IiJ9
|
|
1
|
+
var eda;(()=>{"use strict";var e,r,t={7100:(e,r,t)=>{var a;!function(e){e.EUCLIDEAN="EUCLIDEAN",e.MANHATTAN="MANHATTAN"}(a||(a={}));const n=e=>null==e;var o=t(6361),i=t(9657);onmessage=e=>{const{values:r,fnNames:t,startRow:s,startCol:c,chunckSize:l,opts:u,weights:p,aggregationMethod:f}=e.data,h={};try{let e=s,g=c,v=0,d=0,m=Number.MIN_VALUE;const w=function(e,r){return e===a.MANHATTAN?e=>e.reduce(((e,t,a)=>e+t*r[a]),0):e=>{const t=e.reduce(((e,t,a)=>e+(t*r[a])**2),0);return Math.sqrt(t)}}(f,p);r.forEach(((e,a)=>{if((0,o.sQ)(t[a]))for(let t=0;t<e.length;++t)n(e[t])||(r[a][t]=new i.Z(r[a][t]._data,r[a][t]._length))}));const b=new Array(t.length).fill(null).map(((e,r)=>new o.UH(t[r]).getMeasure(u[r]))),A=new Float32Array(l);for(;v<l;){const t=b.map(((t,a)=>n(r[a][e])||n(r[a][g])?1:t(r[a][e],r[a][g]))),a=1===t.length?t[0]:w(t);A[v]=a,a<d&&(d=a),a>m&&(m=a),v++,g++,g===r[0].length&&(e++,g=e+1)}h.distanceMatrixData=A,h.min=d,h.max=m}catch(e){h.error=e}postMessage(h)}}},a={};function n(e){var r=a[e];if(void 0!==r)return r.exports;var o=a[e]={exports:{}};return t[e](o,o.exports,n),o.exports}n.m=t,n.x=()=>{var e=n.O(void 0,[483,361],(()=>n(7100)));return n.O(e)},e=[],n.O=(r,t,a,o)=>{if(!t){var i=1/0;for(u=0;u<e.length;u++){for(var[t,a,o]=e[u],s=!0,c=0;c<t.length;c++)(!1&o||i>=o)&&Object.keys(n.O).every((e=>n.O[e](t[c])))?t.splice(c--,1):(s=!1,o<i&&(i=o));if(s){e.splice(u--,1);var l=a();void 0!==l&&(r=l)}}return r}o=o||0;for(var u=e.length;u>0&&e[u-1][2]>o;u--)e[u]=e[u-1];e[u]=[t,a,o]},n.d=(e,r)=>{for(var t in r)n.o(r,t)&&!n.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},n.f={},n.e=e=>Promise.all(Object.keys(n.f).reduce(((r,t)=>(n.f[t](e,r),r)),[])),n.u=e=>e+".js",n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),(()=>{var e;n.g.importScripts&&(e=n.g.location+"");var r=n.g.document;if(!e&&r&&(r.currentScript&&(e=r.currentScript.src),!e)){var t=r.getElementsByTagName("script");if(t.length)for(var a=t.length-1;a>-1&&!e;)e=t[a--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),n.p=e})(),(()=>{var e={100:1};n.f.i=(r,t)=>{e[r]||importScripts(n.p+n.u(r))};var r=self.webpackChunkeda=self.webpackChunkeda||[],t=r.push.bind(r);r.push=r=>{var[a,o,i]=r;for(var s in o)n.o(o,s)&&(n.m[s]=o[s]);for(i&&i(n);a.length;)e[a.pop()]=1;t(r)}})(),r=n.x,n.x=()=>Promise.all([n.e(483),n.e(361)]).then(r);var o=n.x();eda=o})();
|
|
2
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LEVBQW9CNEIsRUFBRXhFLEVBQUksQ0FBQ3lFLEVBQVNHLEtBRS9CdUIsRUFBZ0IxQixJQUVsQmdCLGNBQWM3QyxFQUFvQnNELEVBQUl0RCxFQUFvQmlDLEVBQUVKLEdBRTlELEVBR0QsSUFBSTJCLEVBQXFCQyxLQUFzQixnQkFBSUEsS0FBc0IsaUJBQUssR0FDMUVDLEVBQTZCRixFQUFtQkcsS0FBS0MsS0FBS0osR0FDOURBLEVBQW1CRyxLQXZCQ3hHLElBQ25CLElBQUt3RCxFQUFVa0QsRUFBYUMsR0FBVzNHLEVBQ3ZDLElBQUksSUFBSThDLEtBQVk0RCxFQUNoQjdELEVBQW9Cd0IsRUFBRXFDLEVBQWE1RCxLQUNyQ0QsRUFBb0JPLEVBQUVOLEdBQVk0RCxFQUFZNUQsSUFJaEQsSUFERzZELEdBQVNBLEVBQVE5RCxHQUNkVyxFQUFTakMsUUFDZDZFLEVBQWdCNUMsRUFBU29ELE9BQVMsRUFDbkNMLEVBQTJCdkcsRUFBSyxDLEtYbkI3QmQsRUFBTzJELEVBQW9CeEQsRUFDL0J3RCxFQUFvQnhELEVBQUksSUFDaEJzRixRQUFRQyxJQUFJLENBQ2xCL0IsRUFBb0JKLEVBQUUsS0FDdEJJLEVBQW9CSixFQUFFLE9BQ3BCb0UsS0FBSzNILEdZSlQsSUFBSW1FLEVBQXNCUixFQUFvQnhELEkiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ydW50aW1lL2NodW5rIGxvYWRlZCIsIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ydW50aW1lL3N0YXJ0dXAgY2h1bmsgZGVwZW5kZW5jaWVzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21sL3NyYy9kaXN0YW5jZS1tYXRyaXgvdHlwZXMuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWwvc3JjL2Rpc3RhbmNlLW1hdHJpeC91dGlscy5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tbC9zcmMvZGlzdGFuY2UtbWF0cml4L2Rpc3RhbmNlLW1hdHJpeC13b3JrZXIuanMiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL2VkYS93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svcnVudGltZS9lbnN1cmUgY2h1bmsiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svcnVudGltZS9nZXQgamF2YXNjcmlwdCBjaHVuayBmaWxlbmFtZSIsIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ydW50aW1lL2dsb2JhbCIsIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ydW50aW1lL3B1YmxpY1BhdGgiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svcnVudGltZS9pbXBvcnRTY3JpcHRzIGNodW5rIGxvYWRpbmciLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svc3RhcnR1cCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZGVmZXJyZWQgPSBbXTtcbl9fd2VicGFja19yZXF1aXJlX18uTyA9IChyZXN1bHQsIGNodW5rSWRzLCBmbiwgcHJpb3JpdHkpID0+IHtcblx0aWYoY2h1bmtJZHMpIHtcblx0XHRwcmlvcml0eSA9IHByaW9yaXR5IHx8IDA7XG5cdFx0Zm9yKHZhciBpID0gZGVmZXJyZWQubGVuZ3RoOyBpID4gMCAmJiBkZWZlcnJlZFtpIC0gMV1bMl0gPiBwcmlvcml0eTsgaS0tKSBkZWZlcnJlZFtpXSA9IGRlZmVycmVkW2kgLSAxXTtcblx0XHRkZWZlcnJlZFtpXSA9IFtjaHVua0lkcywgZm4sIHByaW9yaXR5XTtcblx0XHRyZXR1cm47XG5cdH1cblx0dmFyIG5vdEZ1bGZpbGxlZCA9IEluZmluaXR5O1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IGRlZmVycmVkLmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIFtjaHVua0lkcywgZm4sIHByaW9yaXR5XSA9IGRlZmVycmVkW2ldO1xuXHRcdHZhciBmdWxmaWxsZWQgPSB0cnVlO1xuXHRcdGZvciAodmFyIGogPSAwOyBqIDwgY2h1bmtJZHMubGVuZ3RoOyBqKyspIHtcblx0XHRcdGlmICgocHJpb3JpdHkgJiAxID09PSAwIHx8IG5vdEZ1bGZpbGxlZCA+PSBwcmlvcml0eSkgJiYgT2JqZWN0LmtleXMoX193ZWJwYWNrX3JlcXVpcmVfXy5PKS5ldmVyeSgoa2V5KSA9PiAoX193ZWJwYWNrX3JlcXVpcmVfXy5PW2tleV0oY2h1bmtJZHNbal0pKSkpIHtcblx0XHRcdFx0Y2h1bmtJZHMuc3BsaWNlKGotLSwgMSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmdWxmaWxsZWQgPSBmYWxzZTtcblx0XHRcdFx0aWYocHJpb3JpdHkgPCBub3RGdWxmaWxsZWQpIG5vdEZ1bGZpbGxlZCA9IHByaW9yaXR5O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZihmdWxmaWxsZWQpIHtcblx0XHRcdGRlZmVycmVkLnNwbGljZShpLS0sIDEpXG5cdFx0XHR2YXIgciA9IGZuKCk7XG5cdFx0XHRpZiAociAhPT0gdW5kZWZpbmVkKSByZXN1bHQgPSByO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gcmVzdWx0O1xufTsiLCJ2YXIgbmV4dCA9IF9fd2VicGFja19yZXF1aXJlX18ueDtcbl9fd2VicGFja19yZXF1aXJlX18ueCA9ICgpID0+IHtcblx0cmV0dXJuIFByb21pc2UuYWxsKFtcblx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmUoNDgzKSxcblx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmUoMzYxKVxuXHRdKS50aGVuKG5leHQpO1xufTsiLCJleHBvcnQgdmFyIERpc3RhbmNlQWdncmVnYXRpb25NZXRob2RzO1xuKGZ1bmN0aW9uIChEaXN0YW5jZUFnZ3JlZ2F0aW9uTWV0aG9kcykge1xuICAgIERpc3RhbmNlQWdncmVnYXRpb25NZXRob2RzW1wiRVVDTElERUFOXCJdID0gXCJFVUNMSURFQU5cIjtcbiAgICBEaXN0YW5jZUFnZ3JlZ2F0aW9uTWV0aG9kc1tcIk1BTkhBVFRBTlwiXSA9IFwiTUFOSEFUVEFOXCI7XG59KShEaXN0YW5jZUFnZ3JlZ2F0aW9uTWV0aG9kcyB8fCAoRGlzdGFuY2VBZ2dyZWdhdGlvbk1ldGhvZHMgPSB7fSkpO1xuO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pZEhsd1pYTXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lKMGVYQmxjeTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pUVVGQlFTeE5RVUZOTEVOQlFVNHNTVUZCV1N3d1FrRkhWRHRCUVVoSUxGZEJRVmtzTUVKQlFUQkNPMGxCUTJ4RExIRkVRVUYxUWl4RFFVRkJPMGxCUTNaQ0xIRkVRVUYxUWl4RFFVRkJPMEZCUTNwQ0xFTkJRVU1zUlVGSVV5d3dRa0ZCTUVJc1MwRkJNVUlzTUVKQlFUQkNMRkZCUjI1RE8wRkJRVUVzUTBGQlF5SXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbVY0Y0c5eWRDQmxiblZ0SUVScGMzUmhibU5sUVdkbmNtVm5ZWFJwYjI1TlpYUm9iMlJ6SUh0Y2JpQWdJQ0JGVlVOTVNVUkZRVTRnUFNBblJWVkRURWxFUlVGT0p5eGNiaUFnSUNCTlFVNUlRVlJVUVU0Z1BTQW5UVUZPU0VGVVZFRk9KeXhjYmlBZ2ZUdGNibHh1Wlhod2IzSjBJSFI1Y0dVZ1JHbHpkR0Z1WTJWQloyZHlaV2RoZEdsdmJrMWxkR2h2WkNBOUlHdGxlVzltSUhSNWNHVnZaaUJFYVhOMFlXNWpaVUZuWjNKbFoyRjBhVzl1VFdWMGFHOWtjenRjYmlKZGZRPT0iLCJpbXBvcnQgeyBEaXN0YW5jZUFnZ3JlZ2F0aW9uTWV0aG9kcyB9IGZyb20gJy4vdHlwZXMnO1xuZXhwb3J0IGNvbnN0IGlzTmlsID0gKHgpID0+IHggPT09IG51bGwgfHwgeCA9PT0gdW5kZWZpbmVkO1xuZXhwb3J0IGZ1bmN0aW9uIGluc2VydFNtYWxsZXIoZGlzdGFuY2VzQXIsIGluZGV4ZXMsIG51bSwgaW5kZXgpIHtcbiAgICBpZiAobnVtID4gZGlzdGFuY2VzQXJbZGlzdGFuY2VzQXIubGVuZ3RoIC0gMV0pXG4gICAgICAgIHJldHVybjtcbiAgICBjb25zdCBuZXdQb3NpdGlvbiA9IGRpc3RhbmNlc0FyLmZpbmRJbmRleCgodikgPT4gbnVtIDwgdik7XG4gICAgZGlzdGFuY2VzQXIucG9wKCk7XG4gICAgZGlzdGFuY2VzQXIuc3BsaWNlKG5ld1Bvc2l0aW9uLCAwLCBudW0pO1xuICAgIGluZGV4ZXMucG9wKCk7XG4gICAgaW5kZXhlcy5zcGxpY2UobmV3UG9zaXRpb24sIDAsIGluZGV4KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRMYXJnZXIoZGlzdGFuY2VzQXIsIGluZGV4ZXMsIG51bSwgaW5kZXgpIHtcbiAgICBpZiAobnVtIDwgZGlzdGFuY2VzQXJbZGlzdGFuY2VzQXIubGVuZ3RoIC0gMV0pXG4gICAgICAgIHJldHVybjtcbiAgICBjb25zdCBuZXdQb3NpdGlvbiA9IGRpc3RhbmNlc0FyLmZpbmRJbmRleCgodikgPT4gbnVtID4gdik7XG4gICAgZGlzdGFuY2VzQXIucG9wKCk7XG4gICAgZGlzdGFuY2VzQXIuc3BsaWNlKG5ld1Bvc2l0aW9uLCAwLCBudW0pO1xuICAgIGluZGV4ZXMucG9wKCk7XG4gICAgaW5kZXhlcy5zcGxpY2UobmV3UG9zaXRpb24sIDAsIGluZGV4KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRBZ2dyZWdhdGlvbkZ1bmN0aW9uKGFnZ3JlZ2F0aW9uTWV0aG9kLCB3ZWlnaHRzKSB7XG4gICAgc3dpdGNoIChhZ2dyZWdhdGlvbk1ldGhvZCkge1xuICAgICAgICBjYXNlIERpc3RhbmNlQWdncmVnYXRpb25NZXRob2RzLk1BTkhBVFRBTjpcbiAgICAgICAgICAgIHJldHVybiAodnMpID0+IHZzLnJlZHVjZSgoYWNjLCB2YWwsIGlkeCkgPT4gYWNjICsgdmFsICogd2VpZ2h0c1tpZHhdLCAwKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiAodnMpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBldWNsaWRlYW5cbiAgICAgICAgICAgICAgICBjb25zdCBzdW0gPSB2cy5yZWR1Y2UoKGFjYywgdmFsLCBpZHgpID0+IGFjYyArICh2YWwgKiB3ZWlnaHRzW2lkeF0pICoqIDIsIDApO1xuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLnNxcnQoc3VtKTtcbiAgICAgICAgICAgIH07XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pZFhScGJITXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lKMWRHbHNjeTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pUVVGQlFTeFBRVUZQTEVWQlFUUkNMREJDUVVFd1FpeEZRVUZETEUxQlFVMHNVMEZCVXl4RFFVRkRPMEZCUlRsRkxFMUJRVTBzUTBGQlF5eE5RVUZOTEV0QlFVc3NSMEZCUnl4RFFVRkRMRU5CUVUwc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eExRVUZMTEVsQlFVa3NTVUZCU1N4RFFVRkRMRXRCUVVzc1UwRkJVeXhEUVVGRE8wRkJSUzlFTEUxQlFVMHNWVUZCVlN4aFFVRmhMRU5CUVVNc1YwRkJjVUlzUlVGQlJTeFBRVUZwUWl4RlFVRkZMRWRCUVZjc1JVRkJSU3hMUVVGaE8wbEJRMmhITEVsQlFVa3NSMEZCUnl4SFFVRkhMRmRCUVZjc1EwRkJReXhYUVVGWExFTkJRVU1zVFVGQlRTeEhRVUZETEVOQlFVTXNRMEZCUXp0UlFVTjZReXhQUVVGUE8wbEJSVlFzVFVGQlRTeFhRVUZYTEVkQlFVY3NWMEZCVnl4RFFVRkRMRk5CUVZNc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTXNSMEZCUnl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJRekZFTEZkQlFWY3NRMEZCUXl4SFFVRkhMRVZCUVVVc1EwRkJRenRKUVVOc1FpeFhRVUZYTEVOQlFVTXNUVUZCVFN4RFFVRkRMRmRCUVZjc1JVRkJSU3hEUVVGRExFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTTdTVUZEZUVNc1QwRkJUeXhEUVVGRExFZEJRVWNzUlVGQlJTeERRVUZETzBsQlEyUXNUMEZCVHl4RFFVRkRMRTFCUVUwc1EwRkJReXhYUVVGWExFVkJRVVVzUTBGQlF5eEZRVUZGTEV0QlFVc3NRMEZCUXl4RFFVRkRPMEZCUTNoRExFTkJRVU03UVVGRlJDeE5RVUZOTEZWQlFWVXNXVUZCV1N4RFFVRkRMRmRCUVhGQ0xFVkJRVVVzVDBGQmFVSXNSVUZCUlN4SFFVRlhMRVZCUVVVc1MwRkJZVHRKUVVNdlJpeEpRVUZKTEVkQlFVY3NSMEZCUnl4WFFVRlhMRU5CUVVNc1YwRkJWeXhEUVVGRExFMUJRVTBzUjBGQlF5eERRVUZETEVOQlFVTTdVVUZEZWtNc1QwRkJUenRKUVVWVUxFMUJRVTBzVjBGQlZ5eEhRVUZITEZkQlFWY3NRMEZCUXl4VFFVRlRMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzUlVGQlJTeERRVUZETEVkQlFVY3NSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJRenRKUVVNeFJDeFhRVUZYTEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNN1NVRkRiRUlzVjBGQlZ5eERRVUZETEUxQlFVMHNRMEZCUXl4WFFVRlhMRVZCUVVVc1EwRkJReXhGUVVGRkxFZEJRVWNzUTBGQlF5eERRVUZETzBsQlEzaERMRTlCUVU4c1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF6dEpRVU5rTEU5QlFVOHNRMEZCUXl4TlFVRk5MRU5CUVVNc1YwRkJWeXhGUVVGRkxFTkJRVU1zUlVGQlJTeExRVUZMTEVOQlFVTXNRMEZCUXp0QlFVTjRReXhEUVVGRE8wRkJSVVFzVFVGQlRTeFZRVUZWTEhOQ1FVRnpRaXhEUVVOd1F5eHBRa0ZCTkVNc1JVRkJSU3hQUVVGcFFqdEpRVVV2UkN4UlFVRlJMR2xDUVVGcFFpeEZRVUZGTzFGQlEzcENMRXRCUVVzc01FSkJRVEJDTEVOQlFVTXNVMEZCVXp0WlFVTjJReXhQUVVGUExFTkJRVU1zUlVGQldTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVkQlFVY3NSVUZCUlN4SFFVRkhMRVZCUVVVc1JVRkJSU3hEUVVGRExFZEJRVWNzUjBGQlJ5eEhRVUZITEVkQlFVY3NUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEzSkdPMWxCUTBVc1QwRkJUeXhEUVVGRExFVkJRVmtzUlVGQlJTeEZRVUZGTzJkQ1FVTjBRaXhaUVVGWk8yZENRVU5hTEUxQlFVMHNSMEZCUnl4SFFVRkhMRVZCUVVVc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eEhRVUZITEVWQlFVVXNSMEZCUnl4RlFVRkZMRWRCUVVjc1JVRkJSU3hGUVVGRkxFTkJRVU1zUjBGQlJ5eEhRVUZITEVOQlFVTXNSMEZCUnl4SFFVRkhMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJRenRuUWtGRE4wVXNUMEZCVHl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFsQlEzaENMRU5CUVVNc1EwRkJRenRMUVVOTU8wRkJRMGdzUTBGQlF5SXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbWx0Y0c5eWRDQjdSR2x6ZEdGdVkyVkJaMmR5WldkaGRHbHZiazFsZEdodlpDd2dSR2x6ZEdGdVkyVkJaMmR5WldkaGRHbHZiazFsZEdodlpITjlJR1p5YjIwZ0p5NHZkSGx3WlhNbk8xeHVYRzVsZUhCdmNuUWdZMjl1YzNRZ2FYTk9hV3dnUFNBb2VEb2dZVzU1S1NBOVBpQjRJRDA5UFNCdWRXeHNJSHg4SUhnZ1BUMDlJSFZ1WkdWbWFXNWxaRHRjYmx4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdsdWMyVnlkRk50WVd4c1pYSW9aR2x6ZEdGdVkyVnpRWEk2SUc1MWJXSmxjbHRkTENCcGJtUmxlR1Z6T2lCdWRXMWlaWEpiWFN3Z2JuVnRPaUJ1ZFcxaVpYSXNJR2x1WkdWNE9pQnVkVzFpWlhJcElIdGNiaUFnYVdZZ0tHNTFiU0ErSUdScGMzUmhibU5sYzBGeVcyUnBjM1JoYm1ObGMwRnlMbXhsYm1kMGFDMHhYU2xjYmlBZ0lDQnlaWFIxY200N1hHNWNiaUFnWTI5dWMzUWdibVYzVUc5emFYUnBiMjRnUFNCa2FYTjBZVzVqWlhOQmNpNW1hVzVrU1c1a1pYZ29LSFlwSUQwK0lHNTFiU0E4SUhZcE8xeHVJQ0JrYVhOMFlXNWpaWE5CY2k1d2IzQW9LVHRjYmlBZ1pHbHpkR0Z1WTJWelFYSXVjM0JzYVdObEtHNWxkMUJ2YzJsMGFXOXVMQ0F3TENCdWRXMHBPMXh1SUNCcGJtUmxlR1Z6TG5CdmNDZ3BPMXh1SUNCcGJtUmxlR1Z6TG5Od2JHbGpaU2h1WlhkUWIzTnBkR2x2Yml3Z01Dd2dhVzVrWlhncE8xeHVmVnh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnYVc1elpYSjBUR0Z5WjJWeUtHUnBjM1JoYm1ObGMwRnlPaUJ1ZFcxaVpYSmJYU3dnYVc1a1pYaGxjem9nYm5WdFltVnlXMTBzSUc1MWJUb2diblZ0WW1WeUxDQnBibVJsZURvZ2JuVnRZbVZ5S1NCN1hHNGdJR2xtSUNodWRXMGdQQ0JrYVhOMFlXNWpaWE5CY2x0a2FYTjBZVzVqWlhOQmNpNXNaVzVuZEdndE1WMHBYRzRnSUNBZ2NtVjBkWEp1TzF4dVhHNGdJR052Ym5OMElHNWxkMUJ2YzJsMGFXOXVJRDBnWkdsemRHRnVZMlZ6UVhJdVptbHVaRWx1WkdWNEtDaDJLU0E5UGlCdWRXMGdQaUIyS1R0Y2JpQWdaR2x6ZEdGdVkyVnpRWEl1Y0c5d0tDazdYRzRnSUdScGMzUmhibU5sYzBGeUxuTndiR2xqWlNodVpYZFFiM05wZEdsdmJpd2dNQ3dnYm5WdEtUdGNiaUFnYVc1a1pYaGxjeTV3YjNBb0tUdGNiaUFnYVc1a1pYaGxjeTV6Y0d4cFkyVW9ibVYzVUc5emFYUnBiMjRzSURBc0lHbHVaR1Y0S1R0Y2JuMWNibHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJR2RsZEVGblozSmxaMkYwYVc5dVJuVnVZM1JwYjI0b1hHNGdJR0ZuWjNKbFoyRjBhVzl1VFdWMGFHOWtPaUJFYVhOMFlXNWpaVUZuWjNKbFoyRjBhVzl1VFdWMGFHOWtMQ0IzWldsbmFIUnpPaUJ1ZFcxaVpYSmJYVnh1S1RvZ0tIWmhiSFZsY3pvZ2JuVnRZbVZ5VzEwcElEMCtJRzUxYldKbGNpQjdYRzRnSUhOM2FYUmphQ0FvWVdkbmNtVm5ZWFJwYjI1TlpYUm9iMlFwSUh0Y2JpQWdJQ0JqWVhObElFUnBjM1JoYm1ObFFXZG5jbVZuWVhScGIyNU5aWFJvYjJSekxrMUJUa2hCVkZSQlRqcGNiaUFnSUNBZ0lISmxkSFZ5YmlBb2RuTTZJRzUxYldKbGNsdGRLU0E5UGlCMmN5NXlaV1IxWTJVb0tHRmpZeXdnZG1Gc0xDQnBaSGdwSUQwK0lHRmpZeUFySUhaaGJDQXFJSGRsYVdkb2RITmJhV1I0WFN3Z01DazdYRzRnSUNBZ1pHVm1ZWFZzZERwY2JpQWdJQ0FnSUhKbGRIVnliaUFvZG5NNklHNTFiV0psY2x0ZEtTQTlQaUI3WEc0Z0lDQWdJQ0FnSUM4dklHVjFZMnhwWkdWaGJseHVJQ0FnSUNBZ0lDQmpiMjV6ZENCemRXMGdQU0IyY3k1eVpXUjFZMlVvS0dGall5d2dkbUZzTENCcFpIZ3BJRDArSUdGall5QXJJQ2gyWVd3Z0tpQjNaV2xuYUhSelcybGtlRjBwSUNvcUlESXNJREFwTzF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnVFdGMGFDNXpjWEowS0hOMWJTazdYRzRnSUNBZ0lDQjlPMXh1SUNCOVhHNTlYRzRpWFgwPSIsImltcG9ydCB7IGdldEFnZ3JlZ2F0aW9uRnVuY3Rpb24sIGlzTmlsIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBNZWFzdXJlLCBpc0JpdEFycmF5TWV0cmljIH0gZnJvbSAnLi4vdHlwZWQtbWV0cmljcyc7XG5pbXBvcnQgQml0QXJyYXkgZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvYml0LWFycmF5Jztcbm9ubWVzc2FnZSA9IChldmVudCkgPT4ge1xuICAgIGNvbnN0IHsgdmFsdWVzLCBmbk5hbWVzLCBzdGFydFJvdywgc3RhcnRDb2wsIGNodW5ja1NpemUsIG9wdHMsIHdlaWdodHMsIGFnZ3JlZ2F0aW9uTWV0aG9kIH0gPSBldmVudC5kYXRhO1xuICAgIGNvbnN0IGRhdGEgPSB7fTtcbiAgICB0cnkge1xuICAgICAgICAvLyBpZiAoc3RhcnRSb3cgIT0gLTEpXG4gICAgICAgIC8vICAgdGhyb3cgbmV3IEVycm9yKCdFcnJvciBpbiBkaXN0YW5jZSBtYXRyaXggd29ya2VyJyk7IC8vIFRPRE86IHJlbW92ZSB0aGlzIGxpbmVcbiAgICAgICAgbGV0IGkgPSBzdGFydFJvdztcbiAgICAgICAgbGV0IGogPSBzdGFydENvbDtcbiAgICAgICAgbGV0IGNudCA9IDA7XG4gICAgICAgIGxldCBsbWluID0gMDtcbiAgICAgICAgbGV0IGxtYXggPSBOdW1iZXIuTUlOX1ZBTFVFO1xuICAgICAgICBjb25zdCBhZ2dyZWdhdGUgPSBnZXRBZ2dyZWdhdGlvbkZ1bmN0aW9uKGFnZ3JlZ2F0aW9uTWV0aG9kLCB3ZWlnaHRzKTtcbiAgICAgICAgdmFsdWVzLmZvckVhY2goKHYsIGNvbElkeCkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzQml0QXJyYXlNZXRyaWMoZm5OYW1lc1tjb2xJZHhdKSkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IG1pID0gMDsgbWkgPCB2Lmxlbmd0aDsgKyttaSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNOaWwodlttaV0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlc1tjb2xJZHhdW21pXSA9IG5ldyBCaXRBcnJheSh2YWx1ZXNbY29sSWR4XVttaV0uX2RhdGEsIHZhbHVlc1tjb2xJZHhdW21pXS5fbGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBkaXN0YW5jZUZucyA9IG5ldyBBcnJheShmbk5hbWVzLmxlbmd0aClcbiAgICAgICAgICAgIC5maWxsKG51bGwpXG4gICAgICAgICAgICAubWFwKChfLCBkaSkgPT4gbmV3IE1lYXN1cmUoZm5OYW1lc1tkaV0pLmdldE1lYXN1cmUob3B0c1tkaV0pKTtcbiAgICAgICAgY29uc3QgcmV0VmFsID0gbmV3IEZsb2F0MzJBcnJheShjaHVuY2tTaXplKTtcbiAgICAgICAgd2hpbGUgKGNudCA8IGNodW5ja1NpemUpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpc3RhbmNlVmFsdWVzID0gZGlzdGFuY2VGbnMubWFwKChmbiwgaWR4KSA9PiAhaXNOaWwodmFsdWVzW2lkeF1baV0pICYmICFpc05pbCh2YWx1ZXNbaWR4XVtqXSkgP1xuICAgICAgICAgICAgICAgIGZuKHZhbHVlc1tpZHhdW2ldLCB2YWx1ZXNbaWR4XVtqXSkgOiAxKTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZGlzdGFuY2VWYWx1ZXMubGVuZ3RoID09PSAxID8gZGlzdGFuY2VWYWx1ZXNbMF0gOiBhZ2dyZWdhdGUoZGlzdGFuY2VWYWx1ZXMpO1xuICAgICAgICAgICAgcmV0VmFsW2NudF0gPSB2YWx1ZTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSA8IGxtaW4pXG4gICAgICAgICAgICAgICAgbG1pbiA9IHZhbHVlO1xuICAgICAgICAgICAgaWYgKHZhbHVlID4gbG1heClcbiAgICAgICAgICAgICAgICBsbWF4ID0gdmFsdWU7XG4gICAgICAgICAgICBjbnQrKztcbiAgICAgICAgICAgIGorKztcbiAgICAgICAgICAgIGlmIChqID09PSB2YWx1ZXNbMF0ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIGogPSBpICsgMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBkYXRhLmRpc3RhbmNlTWF0cml4RGF0YSA9IHJldFZhbDtcbiAgICAgICAgZGF0YS5taW4gPSBsbWluO1xuICAgICAgICBkYXRhLm1heCA9IGxtYXg7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGRhdGEuZXJyb3IgPSBlO1xuICAgIH1cbiAgICBwb3N0TWVzc2FnZShkYXRhKTtcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2laR2x6ZEdGdVkyVXRiV0YwY21sNExYZHZjbXRsY2k1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJbVJwYzNSaGJtTmxMVzFoZEhKcGVDMTNiM0pyWlhJdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklrRkJRVUVzVDBGQlR5eEZRVUZETEhOQ1FVRnpRaXhGUVVGRkxFdEJRVXNzUlVGQlF5eE5RVUZOTEZOQlFWTXNRMEZCUXp0QlFVTjBSQ3hQUVVGUExFVkJRV1VzVDBGQlR5eEZRVUZGTEdkQ1FVRm5RaXhGUVVGRExFMUJRVTBzYTBKQlFXdENMRU5CUVVNN1FVRkRla1VzVDBGQlR5eFJRVUZSTEUxQlFVMHNlVU5CUVhsRExFTkJRVU03UVVGSEwwUXNVMEZCVXl4SFFVRkhMRU5CUVVNc1MwRkJTeXhGUVVGRkxFVkJRVVU3U1VGRGNFSXNUVUZCVFN4RlFVRkRMRTFCUVUwc1JVRkJSU3hQUVVGUExFVkJRVVVzVVVGQlVTeEZRVUZGTEZGQlFWRXNSVUZCUlN4VlFVRlZMRVZCUVVVc1NVRkJTU3hGUVVGRkxFOUJRVThzUlVGQlJTeHBRa0ZCYVVJc1JVRkJReXhIUVVkeVJpeExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRPMGxCUTJZc1RVRkJUU3hKUVVGSkxFZEJRV3RHTEVWQlFVVXNRMEZCUXp0SlFVTXZSaXhKUVVGSk8xRkJRMFlzYzBKQlFYTkNPMUZCUTNSQ0xHdEdRVUZyUmp0UlFVTnNSaXhKUVVGSkxFTkJRVU1zUjBGQlJ5eFJRVUZSTEVOQlFVTTdVVUZEYWtJc1NVRkJTU3hEUVVGRExFZEJRVWNzVVVGQlVTeERRVUZETzFGQlEycENMRWxCUVVrc1IwRkJSeXhIUVVGSExFTkJRVU1zUTBGQlF6dFJRVU5hTEVsQlFVa3NTVUZCU1N4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVOaUxFbEJRVWtzU1VGQlNTeEhRVUZITEUxQlFVMHNRMEZCUXl4VFFVRlRMRU5CUVVNN1VVRkROVUlzVFVGQlRTeFRRVUZUTEVkQlFVY3NjMEpCUVhOQ0xFTkJRVU1zYVVKQlFXbENMRVZCUVVVc1QwRkJUeXhEUVVGRExFTkJRVU03VVVGRGNrVXNUVUZCVFN4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeE5RVUZOTEVWQlFVVXNSVUZCUlR0WlFVTXpRaXhKUVVGSkxHZENRVUZuUWl4RFFVRkRMRTlCUVU4c1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eEZRVUZGTzJkQ1FVTnlReXhMUVVGTExFbEJRVWtzUlVGQlJTeEhRVUZITEVOQlFVTXNSVUZCUlN4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRExFMUJRVTBzUlVGQlJTeEZRVUZGTEVWQlFVVXNSVUZCUlR0dlFrRkRjRU1zU1VGQlNTeExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRE8zZENRVUZGTEZOQlFWTTdiMEpCUXpOQ0xFMUJRVTBzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhKUVVGSkxGRkJRVkVzUTBGQlF5eE5RVUZOTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUzBGQlN5eEZRVUZGTEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0cFFrRkRla1k3WVVGRFJqdFJRVU5JTEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTBnc1RVRkJUU3hYUVVGWExFZEJRVWNzU1VGQlNTeExRVUZMTEVOQlFVTXNUMEZCVHl4RFFVRkRMRTFCUVUwc1EwRkJRenRoUVVNeFF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRPMkZCUTFZc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVWQlFVVXNSVUZCUlN4RlFVRkZMRU5CUVVNc1NVRkJTU3hQUVVGUExFTkJRVU1zVDBGQlR5eERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1ZVRkJWU3hEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRha1VzVFVGQlRTeE5RVUZOTEVkQlFVY3NTVUZCU1N4WlFVRlpMRU5CUVVNc1ZVRkJWU3hEUVVGRExFTkJRVU03VVVGRE5VTXNUMEZCVHl4SFFVRkhMRWRCUVVjc1ZVRkJWU3hGUVVGRk8xbEJRM1pDTEUxQlFVMHNZMEZCWXl4SFFVRkhMRmRCUVZjc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eEZRVUZGTEVWQlFVVXNSMEZCUnl4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExFdEJRVXNzUTBGQlF5eE5RVUZOTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TlFVRk5MRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMmRDUVVOd1J5eEZRVUZGTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEUxQlFVMHNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRaUVVNeFF5eE5RVUZOTEV0QlFVc3NSMEZCUnl4alFVRmpMRU5CUVVNc1RVRkJUU3hMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNZMEZCWXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eFRRVUZUTEVOQlFVTXNZMEZCWXl4RFFVRkRMRU5CUVVNN1dVRkRNVVlzVFVGQlRTeERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRXRCUVVzc1EwRkJRenRaUVVOd1FpeEpRVUZKTEV0QlFVc3NSMEZCUnl4SlFVRkpPMmRDUVVOa0xFbEJRVWtzUjBGQlJ5eExRVUZMTEVOQlFVTTdXVUZEWml4SlFVRkpMRXRCUVVzc1IwRkJSeXhKUVVGSk8yZENRVU5rTEVsQlFVa3NSMEZCUnl4TFFVRkxMRU5CUVVNN1dVRkRaaXhIUVVGSExFVkJRVVVzUTBGQlF6dFpRVU5PTEVOQlFVTXNSVUZCUlN4RFFVRkRPMWxCUTBvc1NVRkJTU3hEUVVGRExFdEJRVXNzVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRTFCUVUwc1JVRkJSVHRuUWtGRE1VSXNRMEZCUXl4RlFVRkZMRU5CUVVNN1owSkJRMG9zUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1lVRkRXRHRUUVVOR08xRkJRMFFzU1VGQlNTeERRVUZETEd0Q1FVRnJRaXhIUVVGSExFMUJRVTBzUTBGQlF6dFJRVU5xUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhIUVVGSExFbEJRVWtzUTBGQlF6dFJRVU5vUWl4SlFVRkpMRU5CUVVNc1IwRkJSeXhIUVVGSExFbEJRVWtzUTBGQlF6dExRVU5xUWp0SlFVRkRMRTlCUVU4c1EwRkJReXhGUVVGRk8xRkJRMVlzU1VGQlNTeERRVUZETEV0QlFVc3NSMEZCUnl4RFFVRkRMRU5CUVVNN1MwRkRhRUk3U1VGRFJDeFhRVUZYTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1FVRkRjRUlzUTBGQlF5eERRVUZESWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUh0blpYUkJaMmR5WldkaGRHbHZia1oxYm1OMGFXOXVMQ0JwYzA1cGJIMGdabkp2YlNBbkxpOTFkR2xzY3ljN1hHNXBiWEJ2Y25RZ2UwdHViM2R1VFdWMGNtbGpjeXdnVFdWaGMzVnlaU3dnYVhOQ2FYUkJjbkpoZVUxbGRISnBZMzBnWm5KdmJTQW5MaTR2ZEhsd1pXUXRiV1YwY21samN5YzdYRzVwYlhCdmNuUWdRbWwwUVhKeVlYa2dabkp2YlNBblFHUmhkR0ZuY205ckxXeHBZbkpoY21sbGN5OTFkR2xzY3k5emNtTXZZbWwwTFdGeWNtRjVKenRjYm1sdGNHOXlkQ0I3UkdsemRHRnVZMlZCWjJkeVpXZGhkR2x2YmsxbGRHaHZaSDBnWm5KdmJTQW5MaTkwZVhCbGN5YzdYRzVjYm05dWJXVnpjMkZuWlNBOUlDaGxkbVZ1ZENrZ1BUNGdlMXh1SUNCamIyNXpkQ0I3ZG1Gc2RXVnpMQ0JtYms1aGJXVnpMQ0J6ZEdGeWRGSnZkeXdnYzNSaGNuUkRiMndzSUdOb2RXNWphMU5wZW1Vc0lHOXdkSE1zSUhkbGFXZG9kSE1zSUdGblozSmxaMkYwYVc5dVRXVjBhRzlrZlRvZ2UxeHVJQ0FnSUhaaGJIVmxjem9nWVc1NVcxMWJYU3dnWm01T1lXMWxjem9nUzI1dmQyNU5aWFJ5YVdOelcxMHNJSE4wWVhKMFVtOTNPaUJ1ZFcxaVpYSXNJSE4wWVhKMFEyOXNPaUJ1ZFcxaVpYSXNJR05vZFc1amExTnBlbVU2SUc1MWJXSmxjaXhjYmlBZ0lDQnZjSFJ6T2lCN1cxODZJSE4wY21sdVoxMDZJR0Z1ZVgxYlhTd2dkMlZwWjJoMGN6b2diblZ0WW1WeVcxMHNJR0ZuWjNKbFoyRjBhVzl1VFdWMGFHOWtPaUJFYVhOMFlXNWpaVUZuWjNKbFoyRjBhVzl1VFdWMGFHOWtMRnh1SUNCOUlEMGdaWFpsYm5RdVpHRjBZVHRjYmlBZ1kyOXVjM1FnWkdGMFlUb2dleUJsY25KdmNqODZJR0Z1ZVN3Z1pHbHpkR0Z1WTJWTllYUnlhWGhFWVhSaFB6b2dSbXh2WVhRek1rRnljbUY1TENCdGFXNC9PaUJ1ZFcxaVpYSXNJRzFoZUQ4NklHNTFiV0psY24wZ1BTQjdmVHRjYmlBZ2RISjVJSHRjYmlBZ0lDQXZMeUJwWmlBb2MzUmhjblJTYjNjZ0lUMGdMVEVwWEc0Z0lDQWdMeThnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvSjBWeWNtOXlJR2x1SUdScGMzUmhibU5sSUcxaGRISnBlQ0IzYjNKclpYSW5LVHNnTHk4Z1ZFOUVUem9nY21WdGIzWmxJSFJvYVhNZ2JHbHVaVnh1SUNBZ0lHeGxkQ0JwSUQwZ2MzUmhjblJTYjNjN1hHNGdJQ0FnYkdWMElHb2dQU0J6ZEdGeWRFTnZiRHRjYmlBZ0lDQnNaWFFnWTI1MElEMGdNRHRjYmlBZ0lDQnNaWFFnYkcxcGJpQTlJREE3WEc0Z0lDQWdiR1YwSUd4dFlYZ2dQU0JPZFcxaVpYSXVUVWxPWDFaQlRGVkZPMXh1SUNBZ0lHTnZibk4wSUdGblozSmxaMkYwWlNBOUlHZGxkRUZuWjNKbFoyRjBhVzl1Um5WdVkzUnBiMjRvWVdkbmNtVm5ZWFJwYjI1TlpYUm9iMlFzSUhkbGFXZG9kSE1wTzF4dUlDQWdJSFpoYkhWbGN5NW1iM0pGWVdOb0tDaDJMQ0JqYjJ4SlpIZ3BJRDArSUh0Y2JpQWdJQ0FnSUdsbUlDaHBjMEpwZEVGeWNtRjVUV1YwY21saktHWnVUbUZ0WlhOYlkyOXNTV1I0WFNrcElIdGNiaUFnSUNBZ0lDQWdabTl5SUNoc1pYUWdiV2tnUFNBd095QnRhU0E4SUhZdWJHVnVaM1JvT3lBcksyMXBLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLR2x6VG1sc0tIWmJiV2xkS1NrZ1kyOXVkR2x1ZFdVN1hHNGdJQ0FnSUNBZ0lDQWdkbUZzZFdWelcyTnZiRWxrZUYxYmJXbGRJRDBnYm1WM0lFSnBkRUZ5Y21GNUtIWmhiSFZsYzF0amIyeEpaSGhkVzIxcFhTNWZaR0YwWVN3Z2RtRnNkV1Z6VzJOdmJFbGtlRjFiYldsZExsOXNaVzVuZEdncE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZTazdYRzRnSUNBZ1kyOXVjM1FnWkdsemRHRnVZMlZHYm5NZ1BTQnVaWGNnUVhKeVlYa29abTVPWVcxbGN5NXNaVzVuZEdncFhHNGdJQ0FnSUNBdVptbHNiQ2h1ZFd4c0tWeHVJQ0FnSUNBZ0xtMWhjQ2dvWHl3Z1pHa3BJRDArSUc1bGR5Qk5aV0Z6ZFhKbEtHWnVUbUZ0WlhOYlpHbGRLUzVuWlhSTlpXRnpkWEpsS0c5d2RITmJaR2xkS1NrN1hHNGdJQ0FnWTI5dWMzUWdjbVYwVm1Gc0lEMGdibVYzSUVac2IyRjBNekpCY25KaGVTaGphSFZ1WTJ0VGFYcGxLVHRjYmlBZ0lDQjNhR2xzWlNBb1kyNTBJRHdnWTJoMWJtTnJVMmw2WlNrZ2UxeHVJQ0FnSUNBZ1kyOXVjM1FnWkdsemRHRnVZMlZXWVd4MVpYTWdQU0JrYVhOMFlXNWpaVVp1Y3k1dFlYQW9LR1p1TENCcFpIZ3BJRDArSUNGcGMwNXBiQ2gyWVd4MVpYTmJhV1I0WFZ0cFhTa2dKaVlnSVdselRtbHNLSFpoYkhWbGMxdHBaSGhkVzJwZEtTQS9YRzRnSUNBZ0lDQWdJR1p1S0haaGJIVmxjMXRwWkhoZFcybGRMQ0IyWVd4MVpYTmJhV1I0WFZ0cVhTa2dPaUF4S1R0Y2JpQWdJQ0FnSUdOdmJuTjBJSFpoYkhWbElEMGdaR2x6ZEdGdVkyVldZV3gxWlhNdWJHVnVaM1JvSUQwOVBTQXhJRDhnWkdsemRHRnVZMlZXWVd4MVpYTmJNRjBnT2lCaFoyZHlaV2RoZEdVb1pHbHpkR0Z1WTJWV1lXeDFaWE1wTzF4dUlDQWdJQ0FnY21WMFZtRnNXMk51ZEYwZ1BTQjJZV3gxWlR0Y2JpQWdJQ0FnSUdsbUlDaDJZV3gxWlNBOElHeHRhVzRwWEc0Z0lDQWdJQ0FnSUd4dGFXNGdQU0IyWVd4MVpUdGNiaUFnSUNBZ0lHbG1JQ2gyWVd4MVpTQStJR3h0WVhncFhHNGdJQ0FnSUNBZ0lHeHRZWGdnUFNCMllXeDFaVHRjYmlBZ0lDQWdJR051ZENzck8xeHVJQ0FnSUNBZ2Fpc3JPMXh1SUNBZ0lDQWdhV1lnS0dvZ1BUMDlJSFpoYkhWbGMxc3dYUzVzWlc1bmRHZ3BJSHRjYmlBZ0lDQWdJQ0FnYVNzck8xeHVJQ0FnSUNBZ0lDQnFJRDBnYVNBcklERTdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0FnSUdSaGRHRXVaR2x6ZEdGdVkyVk5ZWFJ5YVhoRVlYUmhJRDBnY21WMFZtRnNPMXh1SUNBZ0lHUmhkR0V1YldsdUlEMGdiRzFwYmp0Y2JpQWdJQ0JrWVhSaExtMWhlQ0E5SUd4dFlYZzdYRzRnSUgwZ1kyRjBZMmdnS0dVcElIdGNiaUFnSUNCa1lYUmhMbVZ5Y205eUlEMGdaVHRjYmlBZ2ZWeHVJQ0J3YjNOMFRXVnpjMkZuWlNoa1lYUmhLVHRjYm4wN1hHNGlYWDA9IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbi8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBfX3dlYnBhY2tfbW9kdWxlc19fO1xuXG4vLyB0aGUgc3RhcnR1cCBmdW5jdGlvblxuX193ZWJwYWNrX3JlcXVpcmVfXy54ID0gKCkgPT4ge1xuXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcblx0Ly8gVGhpcyBlbnRyeSBtb2R1bGUgZGVwZW5kcyBvbiBvdGhlciBsb2FkZWQgY2h1bmtzIGFuZCBleGVjdXRpb24gbmVlZCB0byBiZSBkZWxheWVkXG5cdHZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXy5PKHVuZGVmaW5lZCwgWzQ4MywzNjFdLCAoKSA9PiAoX193ZWJwYWNrX3JlcXVpcmVfXyg3MTAwKSkpXG5cdF9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fLk8oX193ZWJwYWNrX2V4cG9ydHNfXyk7XG5cdHJldHVybiBfX3dlYnBhY2tfZXhwb3J0c19fO1xufTtcblxuIiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5mID0ge307XG4vLyBUaGlzIGZpbGUgY29udGFpbnMgb25seSB0aGUgZW50cnkgY2h1bmsuXG4vLyBUaGUgY2h1bmsgbG9hZGluZyBmdW5jdGlvbiBmb3IgYWRkaXRpb25hbCBjaHVua3Ncbl9fd2VicGFja19yZXF1aXJlX18uZSA9IChjaHVua0lkKSA9PiB7XG5cdHJldHVybiBQcm9taXNlLmFsbChPYmplY3Qua2V5cyhfX3dlYnBhY2tfcmVxdWlyZV9fLmYpLnJlZHVjZSgocHJvbWlzZXMsIGtleSkgPT4ge1xuXHRcdF9fd2VicGFja19yZXF1aXJlX18uZltrZXldKGNodW5rSWQsIHByb21pc2VzKTtcblx0XHRyZXR1cm4gcHJvbWlzZXM7XG5cdH0sIFtdKSk7XG59OyIsIi8vIFRoaXMgZnVuY3Rpb24gYWxsb3cgdG8gcmVmZXJlbmNlIGFzeW5jIGNodW5rcyBhbmQgc2libGluZyBjaHVua3MgZm9yIHRoZSBlbnRyeXBvaW50XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnUgPSAoY2h1bmtJZCkgPT4ge1xuXHQvLyByZXR1cm4gdXJsIGZvciBmaWxlbmFtZXMgYmFzZWQgb24gdGVtcGxhdGVcblx0cmV0dXJuIFwiXCIgKyBjaHVua0lkICsgXCIuanNcIjtcbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5nID0gKGZ1bmN0aW9uKCkge1xuXHRpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09ICdvYmplY3QnKSByZXR1cm4gZ2xvYmFsVGhpcztcblx0dHJ5IHtcblx0XHRyZXR1cm4gdGhpcyB8fCBuZXcgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JykgcmV0dXJuIHdpbmRvdztcblx0fVxufSkoKTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwidmFyIHNjcmlwdFVybDtcbmlmIChfX3dlYnBhY2tfcmVxdWlyZV9fLmcuaW1wb3J0U2NyaXB0cykgc2NyaXB0VXJsID0gX193ZWJwYWNrX3JlcXVpcmVfXy5nLmxvY2F0aW9uICsgXCJcIjtcbnZhciBkb2N1bWVudCA9IF9fd2VicGFja19yZXF1aXJlX18uZy5kb2N1bWVudDtcbmlmICghc2NyaXB0VXJsICYmIGRvY3VtZW50KSB7XG5cdGlmIChkb2N1bWVudC5jdXJyZW50U2NyaXB0KVxuXHRcdHNjcmlwdFVybCA9IGRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjO1xuXHRpZiAoIXNjcmlwdFVybCkge1xuXHRcdHZhciBzY3JpcHRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJzY3JpcHRcIik7XG5cdFx0aWYoc2NyaXB0cy5sZW5ndGgpIHtcblx0XHRcdHZhciBpID0gc2NyaXB0cy5sZW5ndGggLSAxO1xuXHRcdFx0d2hpbGUgKGkgPiAtMSAmJiAhc2NyaXB0VXJsKSBzY3JpcHRVcmwgPSBzY3JpcHRzW2ktLV0uc3JjO1xuXHRcdH1cblx0fVxufVxuLy8gV2hlbiBzdXBwb3J0aW5nIGJyb3dzZXJzIHdoZXJlIGFuIGF1dG9tYXRpYyBwdWJsaWNQYXRoIGlzIG5vdCBzdXBwb3J0ZWQgeW91IG11c3Qgc3BlY2lmeSBhbiBvdXRwdXQucHVibGljUGF0aCBtYW51YWxseSB2aWEgY29uZmlndXJhdGlvblxuLy8gb3IgcGFzcyBhbiBlbXB0eSBzdHJpbmcgKFwiXCIpIGFuZCBzZXQgdGhlIF9fd2VicGFja19wdWJsaWNfcGF0aF9fIHZhcmlhYmxlIGZyb20geW91ciBjb2RlIHRvIHVzZSB5b3VyIG93biBsb2dpYy5cbmlmICghc2NyaXB0VXJsKSB0aHJvdyBuZXcgRXJyb3IoXCJBdXRvbWF0aWMgcHVibGljUGF0aCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3NlclwiKTtcbnNjcmlwdFVybCA9IHNjcmlwdFVybC5yZXBsYWNlKC8jLiokLywgXCJcIikucmVwbGFjZSgvXFw/LiokLywgXCJcIikucmVwbGFjZSgvXFwvW15cXC9dKyQvLCBcIi9cIik7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBzY3JpcHRVcmw7IiwiLy8gbm8gYmFzZVVSSVxuXG4vLyBvYmplY3QgdG8gc3RvcmUgbG9hZGVkIGNodW5rc1xuLy8gXCIxXCIgbWVhbnMgXCJhbHJlYWR5IGxvYWRlZFwiXG52YXIgaW5zdGFsbGVkQ2h1bmtzID0ge1xuXHQxMDA6IDFcbn07XG5cbi8vIGltcG9ydFNjcmlwdHMgY2h1bmsgbG9hZGluZ1xudmFyIGluc3RhbGxDaHVuayA9IChkYXRhKSA9PiB7XG5cdHZhciBbY2h1bmtJZHMsIG1vcmVNb2R1bGVzLCBydW50aW1lXSA9IGRhdGE7XG5cdGZvcih2YXIgbW9kdWxlSWQgaW4gbW9yZU1vZHVsZXMpIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8obW9yZU1vZHVsZXMsIG1vZHVsZUlkKSkge1xuXHRcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tW21vZHVsZUlkXSA9IG1vcmVNb2R1bGVzW21vZHVsZUlkXTtcblx0XHR9XG5cdH1cblx0aWYocnVudGltZSkgcnVudGltZShfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblx0d2hpbGUoY2h1bmtJZHMubGVuZ3RoKVxuXHRcdGluc3RhbGxlZENodW5rc1tjaHVua0lkcy5wb3AoKV0gPSAxO1xuXHRwYXJlbnRDaHVua0xvYWRpbmdGdW5jdGlvbihkYXRhKTtcbn07XG5fX3dlYnBhY2tfcmVxdWlyZV9fLmYuaSA9IChjaHVua0lkLCBwcm9taXNlcykgPT4ge1xuXHQvLyBcIjFcIiBpcyB0aGUgc2lnbmFsIGZvciBcImFscmVhZHkgbG9hZGVkXCJcblx0aWYoIWluc3RhbGxlZENodW5rc1tjaHVua0lkXSkge1xuXHRcdGlmKHRydWUpIHsgLy8gYWxsIGNodW5rcyBoYXZlIEpTXG5cdFx0XHRpbXBvcnRTY3JpcHRzKF9fd2VicGFja19yZXF1aXJlX18ucCArIF9fd2VicGFja19yZXF1aXJlX18udShjaHVua0lkKSk7XG5cdFx0fVxuXHR9XG59O1xuXG52YXIgY2h1bmtMb2FkaW5nR2xvYmFsID0gc2VsZltcIndlYnBhY2tDaHVua2VkYVwiXSA9IHNlbGZbXCJ3ZWJwYWNrQ2h1bmtlZGFcIl0gfHwgW107XG52YXIgcGFyZW50Q2h1bmtMb2FkaW5nRnVuY3Rpb24gPSBjaHVua0xvYWRpbmdHbG9iYWwucHVzaC5iaW5kKGNodW5rTG9hZGluZ0dsb2JhbCk7XG5jaHVua0xvYWRpbmdHbG9iYWwucHVzaCA9IGluc3RhbGxDaHVuaztcblxuLy8gbm8gSE1SXG5cbi8vIG5vIEhNUiBtYW5pZmVzdCIsIi8vIHJ1biBzdGFydHVwXG52YXIgX193ZWJwYWNrX2V4cG9ydHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18ueCgpO1xuIl0sIm5hbWVzIjpbImRlZmVycmVkIiwibmV4dCIsIkRpc3RhbmNlQWdncmVnYXRpb25NZXRob2RzIiwiaXNOaWwiLCJ4Iiwib25tZXNzYWdlIiwiZXZlbnQiLCJ2YWx1ZXMiLCJmbk5hbWVzIiwic3RhcnRSb3ciLCJzdGFydENvbCIsImNodW5ja1NpemUiLCJvcHRzIiwid2VpZ2h0cyIsImFnZ3JlZ2F0aW9uTWV0aG9kIiwiZGF0YSIsImkiLCJqIiwiY250IiwibG1pbiIsImxtYXgiLCJOdW1iZXIiLCJNSU5fVkFMVUUiLCJhZ2dyZWdhdGUiLCJNQU5IQVRUQU4iLCJ2cyIsInJlZHVjZSIsImFjYyIsInZhbCIsImlkeCIsInN1bSIsIk1hdGgiLCJzcXJ0IiwiZ2V0QWdncmVnYXRpb25GdW5jdGlvbiIsImZvckVhY2giLCJ2IiwiY29sSWR4IiwibWkiLCJsZW5ndGgiLCJfZGF0YSIsIl9sZW5ndGgiLCJkaXN0YW5jZUZucyIsIkFycmF5IiwiZmlsbCIsIm1hcCIsIl8iLCJkaSIsImdldE1lYXN1cmUiLCJyZXRWYWwiLCJGbG9hdDMyQXJyYXkiLCJkaXN0YW5jZVZhbHVlcyIsImZuIiwidmFsdWUiLCJkaXN0YW5jZU1hdHJpeERhdGEiLCJtaW4iLCJtYXgiLCJlIiwiZXJyb3IiLCJwb3N0TWVzc2FnZSIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsInVuZGVmaW5lZCIsImV4cG9ydHMiLCJtb2R1bGUiLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwibSIsIl9fd2VicGFja19leHBvcnRzX18iLCJPIiwicmVzdWx0IiwiY2h1bmtJZHMiLCJwcmlvcml0eSIsIm5vdEZ1bGZpbGxlZCIsIkluZmluaXR5IiwiZnVsZmlsbGVkIiwiT2JqZWN0Iiwia2V5cyIsImV2ZXJ5Iiwia2V5Iiwic3BsaWNlIiwiciIsImQiLCJkZWZpbml0aW9uIiwibyIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsImYiLCJjaHVua0lkIiwiUHJvbWlzZSIsImFsbCIsInByb21pc2VzIiwidSIsImciLCJnbG9iYWxUaGlzIiwidGhpcyIsIkZ1bmN0aW9uIiwid2luZG93Iiwib2JqIiwicHJvcCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsInNjcmlwdFVybCIsImltcG9ydFNjcmlwdHMiLCJsb2NhdGlvbiIsImRvY3VtZW50IiwiY3VycmVudFNjcmlwdCIsInNyYyIsInNjcmlwdHMiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsIkVycm9yIiwicmVwbGFjZSIsInAiLCJpbnN0YWxsZWRDaHVua3MiLCJjaHVua0xvYWRpbmdHbG9iYWwiLCJzZWxmIiwicGFyZW50Q2h1bmtMb2FkaW5nRnVuY3Rpb24iLCJwdXNoIiwiYmluZCIsIm1vcmVNb2R1bGVzIiwicnVudGltZSIsInBvcCIsInRoZW4iXSwic291cmNlUm9vdCI6IiJ9
|
package/dist/42.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var eda;(()=>{var r,e,t={5042:()=>{}},o={};function a(r){var e=o[r];if(void 0!==e)return e.exports;var n=o[r]={id:r,loaded:!1,exports:{}};return t[r].call(n.exports,n,n.exports,a),n.loaded=!0,n.exports}a.m=t,a.x=()=>{var r=a.O(void 0,[483,352,935],(()=>a(7935)));return a.O(r)},a.amdD=function(){throw new Error("define cannot be used indirect")},a.amdO={},r=[],a.O=(e,t,o,n)=>{if(!t){var i=1/0;for(s=0;s<r.length;s++){for(var[t,o,n]=r[s],c=!0,l=0;l<t.length;l++)(!1&n||i>=n)&&Object.keys(a.O).every((r=>a.O[r](t[l])))?t.splice(l--,1):(c=!1,n<i&&(i=n));if(c){r.splice(s--,1);var p=o();void 0!==p&&(e=p)}}return e}n=n||0;for(var s=r.length;s>0&&r[s-1][2]>n;s--)r[s]=r[s-1];r[s]=[t,o,n]},a.n=r=>{var e=r&&r.__esModule?()=>r.default:()=>r;return a.d(e,{a:e}),e},a.d=(r,e)=>{for(var t in e)a.o(e,t)&&!a.o(r,t)&&Object.defineProperty(r,t,{enumerable:!0,get:e[t]})},a.f={},a.e=r=>Promise.all(Object.keys(a.f).reduce(((e,t)=>(a.f[t](r,e),e)),[])),a.u=r=>r+".js",a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(r){if("object"==typeof window)return window}}(),a.o=(r,e)=>Object.prototype.hasOwnProperty.call(r,e),a.nmd=r=>(r.paths=[],r.children||(r.children=[]),r),(()=>{var r;a.g.importScripts&&(r=a.g.location+"");var e=a.g.document;if(!r&&e&&(e.currentScript&&(r=e.currentScript.src),!r)){var t=e.getElementsByTagName("script");if(t.length)for(var o=t.length-1;o>-1&&!r;)r=t[o--].src}if(!r)throw new Error("Automatic publicPath is not supported in this browser");r=r.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),a.p=r})(),(()=>{a.b=self.location+"";var r={42:1};a.f.i=(e,t)=>{r[e]||importScripts(a.p+a.u(e))};var e=self.webpackChunkeda=self.webpackChunkeda||[],t=e.push.bind(e);e.push=e=>{var[o,n,i]=e;for(var c in n)a.o(n,c)&&(a.m[c]=n[c]);for(i&&i(a);o.length;)r[o.pop()]=1;t(e)}})(),e=a.x,a.x=()=>Promise.all([483,352,935].map(a.e,a)).then(e);var n=a.x();eda=n})();
|
|
2
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QSxFQUFtQkUsS0F2QkNFLElBQ25CLElBQUs5RCxFQUFVK0QsRUFBYUMsR0FBV0YsRUFDdkMsSUFBSSxJQUFJL0UsS0FBWWdGLEVBQ2hCakYsRUFBb0J1QyxFQUFFMEMsRUFBYWhGLEtBQ3JDRCxFQUFvQlUsRUFBRVQsR0FBWWdGLEVBQVloRixJQUloRCxJQURHaUYsR0FBU0EsRUFBUWxGLEdBQ2RrQixFQUFTTSxRQUNkbUQsRUFBZ0J6RCxFQUFTaUUsT0FBUyxFQUNuQ04sRUFBMkJHLEVBQUssQyxLWm5CN0JsRixFQUFPRSxFQUFvQlcsRUFDL0JYLEVBQW9CVyxFQUFJLElBQ2hCbUMsUUFBUUMsSUFBSSxDQUFDLElBQUksSUFBSSxLQUFLcUMsSUFBSXBGLEVBQW9CNEMsRUFBRzVDLElBQXNCcUYsS0FBS3ZGLEdhRHhGLElBQUljLEVBQXNCWixFQUFvQlcsSSIsInNvdXJjZXMiOlsid2VicGFjazovL2VkYS93ZWJwYWNrL3J1bnRpbWUvY2h1bmsgbG9hZGVkIiwid2VicGFjazovL2VkYS93ZWJwYWNrL3J1bnRpbWUvc3RhcnR1cCBjaHVuayBkZXBlbmRlbmNpZXMiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL2VkYS93ZWJwYWNrL3J1bnRpbWUvYW1kIGRlZmluZSIsIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ydW50aW1lL2FtZCBvcHRpb25zIiwid2VicGFjazovL2VkYS93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL2VkYS93ZWJwYWNrL3J1bnRpbWUvZW5zdXJlIGNodW5rIiwid2VicGFjazovL2VkYS93ZWJwYWNrL3J1bnRpbWUvZ2V0IGphdmFzY3JpcHQgY2h1bmsgZmlsZW5hbWUiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svcnVudGltZS9nbG9iYWwiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svcnVudGltZS9ub2RlIG1vZHVsZSBkZWNvcmF0b3IiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svcnVudGltZS9wdWJsaWNQYXRoIiwid2VicGFjazovL2VkYS93ZWJwYWNrL3J1bnRpbWUvaW1wb3J0U2NyaXB0cyBjaHVuayBsb2FkaW5nIiwid2VicGFjazovL2VkYS93ZWJwYWNrL3N0YXJ0dXAiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGRlZmVycmVkID0gW107XG5fX3dlYnBhY2tfcmVxdWlyZV9fLk8gPSAocmVzdWx0LCBjaHVua0lkcywgZm4sIHByaW9yaXR5KSA9PiB7XG5cdGlmKGNodW5rSWRzKSB7XG5cdFx0cHJpb3JpdHkgPSBwcmlvcml0eSB8fCAwO1xuXHRcdGZvcih2YXIgaSA9IGRlZmVycmVkLmxlbmd0aDsgaSA+IDAgJiYgZGVmZXJyZWRbaSAtIDFdWzJdID4gcHJpb3JpdHk7IGktLSkgZGVmZXJyZWRbaV0gPSBkZWZlcnJlZFtpIC0gMV07XG5cdFx0ZGVmZXJyZWRbaV0gPSBbY2h1bmtJZHMsIGZuLCBwcmlvcml0eV07XG5cdFx0cmV0dXJuO1xuXHR9XG5cdHZhciBub3RGdWxmaWxsZWQgPSBJbmZpbml0eTtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBkZWZlcnJlZC5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBbY2h1bmtJZHMsIGZuLCBwcmlvcml0eV0gPSBkZWZlcnJlZFtpXTtcblx0XHR2YXIgZnVsZmlsbGVkID0gdHJ1ZTtcblx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGNodW5rSWRzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRpZiAoKHByaW9yaXR5ICYgMSA9PT0gMCB8fCBub3RGdWxmaWxsZWQgPj0gcHJpb3JpdHkpICYmIE9iamVjdC5rZXlzKF9fd2VicGFja19yZXF1aXJlX18uTykuZXZlcnkoKGtleSkgPT4gKF9fd2VicGFja19yZXF1aXJlX18uT1trZXldKGNodW5rSWRzW2pdKSkpKSB7XG5cdFx0XHRcdGNodW5rSWRzLnNwbGljZShqLS0sIDEpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZnVsZmlsbGVkID0gZmFsc2U7XG5cdFx0XHRcdGlmKHByaW9yaXR5IDwgbm90RnVsZmlsbGVkKSBub3RGdWxmaWxsZWQgPSBwcmlvcml0eTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYoZnVsZmlsbGVkKSB7XG5cdFx0XHRkZWZlcnJlZC5zcGxpY2UoaS0tLCAxKVxuXHRcdFx0dmFyIHIgPSBmbigpO1xuXHRcdFx0aWYgKHIgIT09IHVuZGVmaW5lZCkgcmVzdWx0ID0gcjtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHJlc3VsdDtcbn07IiwidmFyIG5leHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLng7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnggPSAoKSA9PiB7XG5cdHJldHVybiBQcm9taXNlLmFsbChbNDgzLDM1Miw5MzVdLm1hcChfX3dlYnBhY2tfcmVxdWlyZV9fLmUsIF9fd2VicGFja19yZXF1aXJlX18pKS50aGVuKG5leHQpO1xufTsiLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdGlkOiBtb2R1bGVJZCxcblx0XHRsb2FkZWQ6IGZhbHNlLFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcblx0bW9kdWxlLmxvYWRlZCA9IHRydWU7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4vLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuX193ZWJwYWNrX3JlcXVpcmVfXy5tID0gX193ZWJwYWNrX21vZHVsZXNfXztcblxuLy8gdGhlIHN0YXJ0dXAgZnVuY3Rpb25cbl9fd2VicGFja19yZXF1aXJlX18ueCA9ICgpID0+IHtcblx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG5cdC8vIFRoaXMgZW50cnkgbW9kdWxlIGRlcGVuZHMgb24gb3RoZXIgbG9hZGVkIGNodW5rcyBhbmQgZXhlY3V0aW9uIG5lZWQgdG8gYmUgZGVsYXllZFxuXHR2YXIgX193ZWJwYWNrX2V4cG9ydHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18uTyh1bmRlZmluZWQsIFs0ODMsMzUyLDkzNV0sICgpID0+IChfX3dlYnBhY2tfcmVxdWlyZV9fKDc5MzUpKSlcblx0X193ZWJwYWNrX2V4cG9ydHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18uTyhfX3dlYnBhY2tfZXhwb3J0c19fKTtcblx0cmV0dXJuIF9fd2VicGFja19leHBvcnRzX187XG59O1xuXG4iLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmFtZEQgPSBmdW5jdGlvbiAoKSB7XG5cdHRocm93IG5ldyBFcnJvcignZGVmaW5lIGNhbm5vdCBiZSB1c2VkIGluZGlyZWN0Jyk7XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18uYW1kTyA9IHt9OyIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuXHRcdCgpID0+IChtb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5mID0ge307XG4vLyBUaGlzIGZpbGUgY29udGFpbnMgb25seSB0aGUgZW50cnkgY2h1bmsuXG4vLyBUaGUgY2h1bmsgbG9hZGluZyBmdW5jdGlvbiBmb3IgYWRkaXRpb25hbCBjaHVua3Ncbl9fd2VicGFja19yZXF1aXJlX18uZSA9IChjaHVua0lkKSA9PiB7XG5cdHJldHVybiBQcm9taXNlLmFsbChPYmplY3Qua2V5cyhfX3dlYnBhY2tfcmVxdWlyZV9fLmYpLnJlZHVjZSgocHJvbWlzZXMsIGtleSkgPT4ge1xuXHRcdF9fd2VicGFja19yZXF1aXJlX18uZltrZXldKGNodW5rSWQsIHByb21pc2VzKTtcblx0XHRyZXR1cm4gcHJvbWlzZXM7XG5cdH0sIFtdKSk7XG59OyIsIi8vIFRoaXMgZnVuY3Rpb24gYWxsb3cgdG8gcmVmZXJlbmNlIGFzeW5jIGNodW5rcyBhbmQgc2libGluZyBjaHVua3MgZm9yIHRoZSBlbnRyeXBvaW50XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnUgPSAoY2h1bmtJZCkgPT4ge1xuXHQvLyByZXR1cm4gdXJsIGZvciBmaWxlbmFtZXMgYmFzZWQgb24gdGVtcGxhdGVcblx0cmV0dXJuIFwiXCIgKyBjaHVua0lkICsgXCIuanNcIjtcbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5nID0gKGZ1bmN0aW9uKCkge1xuXHRpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09ICdvYmplY3QnKSByZXR1cm4gZ2xvYmFsVGhpcztcblx0dHJ5IHtcblx0XHRyZXR1cm4gdGhpcyB8fCBuZXcgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JykgcmV0dXJuIHdpbmRvdztcblx0fVxufSkoKTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwiX193ZWJwYWNrX3JlcXVpcmVfXy5ubWQgPSAobW9kdWxlKSA9PiB7XG5cdG1vZHVsZS5wYXRocyA9IFtdO1xuXHRpZiAoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XG5cdHJldHVybiBtb2R1bGU7XG59OyIsInZhciBzY3JpcHRVcmw7XG5pZiAoX193ZWJwYWNrX3JlcXVpcmVfXy5nLmltcG9ydFNjcmlwdHMpIHNjcmlwdFVybCA9IF9fd2VicGFja19yZXF1aXJlX18uZy5sb2NhdGlvbiArIFwiXCI7XG52YXIgZG9jdW1lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmcuZG9jdW1lbnQ7XG5pZiAoIXNjcmlwdFVybCAmJiBkb2N1bWVudCkge1xuXHRpZiAoZG9jdW1lbnQuY3VycmVudFNjcmlwdClcblx0XHRzY3JpcHRVcmwgPSBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYztcblx0aWYgKCFzY3JpcHRVcmwpIHtcblx0XHR2YXIgc2NyaXB0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwic2NyaXB0XCIpO1xuXHRcdGlmKHNjcmlwdHMubGVuZ3RoKSB7XG5cdFx0XHR2YXIgaSA9IHNjcmlwdHMubGVuZ3RoIC0gMTtcblx0XHRcdHdoaWxlIChpID4gLTEgJiYgIXNjcmlwdFVybCkgc2NyaXB0VXJsID0gc2NyaXB0c1tpLS1dLnNyYztcblx0XHR9XG5cdH1cbn1cbi8vIFdoZW4gc3VwcG9ydGluZyBicm93c2VycyB3aGVyZSBhbiBhdXRvbWF0aWMgcHVibGljUGF0aCBpcyBub3Qgc3VwcG9ydGVkIHlvdSBtdXN0IHNwZWNpZnkgYW4gb3V0cHV0LnB1YmxpY1BhdGggbWFudWFsbHkgdmlhIGNvbmZpZ3VyYXRpb25cbi8vIG9yIHBhc3MgYW4gZW1wdHkgc3RyaW5nIChcIlwiKSBhbmQgc2V0IHRoZSBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyB2YXJpYWJsZSBmcm9tIHlvdXIgY29kZSB0byB1c2UgeW91ciBvd24gbG9naWMuXG5pZiAoIXNjcmlwdFVybCkgdGhyb3cgbmV3IEVycm9yKFwiQXV0b21hdGljIHB1YmxpY1BhdGggaXMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGJyb3dzZXJcIik7XG5zY3JpcHRVcmwgPSBzY3JpcHRVcmwucmVwbGFjZSgvIy4qJC8sIFwiXCIpLnJlcGxhY2UoL1xcPy4qJC8sIFwiXCIpLnJlcGxhY2UoL1xcL1teXFwvXSskLywgXCIvXCIpO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5wID0gc2NyaXB0VXJsOyIsIl9fd2VicGFja19yZXF1aXJlX18uYiA9IHNlbGYubG9jYXRpb24gKyBcIlwiO1xuXG4vLyBvYmplY3QgdG8gc3RvcmUgbG9hZGVkIGNodW5rc1xuLy8gXCIxXCIgbWVhbnMgXCJhbHJlYWR5IGxvYWRlZFwiXG52YXIgaW5zdGFsbGVkQ2h1bmtzID0ge1xuXHQ0MjogMVxufTtcblxuLy8gaW1wb3J0U2NyaXB0cyBjaHVuayBsb2FkaW5nXG52YXIgaW5zdGFsbENodW5rID0gKGRhdGEpID0+IHtcblx0dmFyIFtjaHVua0lkcywgbW9yZU1vZHVsZXMsIHJ1bnRpbWVdID0gZGF0YTtcblx0Zm9yKHZhciBtb2R1bGVJZCBpbiBtb3JlTW9kdWxlcykge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhtb3JlTW9kdWxlcywgbW9kdWxlSWQpKSB7XG5cdFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLm1bbW9kdWxlSWRdID0gbW9yZU1vZHVsZXNbbW9kdWxlSWRdO1xuXHRcdH1cblx0fVxuXHRpZihydW50aW1lKSBydW50aW1lKF9fd2VicGFja19yZXF1aXJlX18pO1xuXHR3aGlsZShjaHVua0lkcy5sZW5ndGgpXG5cdFx0aW5zdGFsbGVkQ2h1bmtzW2NodW5rSWRzLnBvcCgpXSA9IDE7XG5cdHBhcmVudENodW5rTG9hZGluZ0Z1bmN0aW9uKGRhdGEpO1xufTtcbl9fd2VicGFja19yZXF1aXJlX18uZi5pID0gKGNodW5rSWQsIHByb21pc2VzKSA9PiB7XG5cdC8vIFwiMVwiIGlzIHRoZSBzaWduYWwgZm9yIFwiYWxyZWFkeSBsb2FkZWRcIlxuXHRpZighaW5zdGFsbGVkQ2h1bmtzW2NodW5rSWRdKSB7XG5cdFx0aWYodHJ1ZSkgeyAvLyBhbGwgY2h1bmtzIGhhdmUgSlNcblx0XHRcdGltcG9ydFNjcmlwdHMoX193ZWJwYWNrX3JlcXVpcmVfXy5wICsgX193ZWJwYWNrX3JlcXVpcmVfXy51KGNodW5rSWQpKTtcblx0XHR9XG5cdH1cbn07XG5cbnZhciBjaHVua0xvYWRpbmdHbG9iYWwgPSBzZWxmW1wid2VicGFja0NodW5rZWRhXCJdID0gc2VsZltcIndlYnBhY2tDaHVua2VkYVwiXSB8fCBbXTtcbnZhciBwYXJlbnRDaHVua0xvYWRpbmdGdW5jdGlvbiA9IGNodW5rTG9hZGluZ0dsb2JhbC5wdXNoLmJpbmQoY2h1bmtMb2FkaW5nR2xvYmFsKTtcbmNodW5rTG9hZGluZ0dsb2JhbC5wdXNoID0gaW5zdGFsbENodW5rO1xuXG4vLyBubyBITVJcblxuLy8gbm8gSE1SIG1hbmlmZXN0IiwiLy8gcnVuIHN0YXJ0dXBcbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXy54KCk7XG4iXSwibmFtZXMiOlsiZGVmZXJyZWQiLCJuZXh0IiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiY2FjaGVkTW9kdWxlIiwidW5kZWZpbmVkIiwiZXhwb3J0cyIsIm1vZHVsZSIsImlkIiwibG9hZGVkIiwiX193ZWJwYWNrX21vZHVsZXNfXyIsImNhbGwiLCJtIiwieCIsIl9fd2VicGFja19leHBvcnRzX18iLCJPIiwiYW1kRCIsIkVycm9yIiwiYW1kTyIsInJlc3VsdCIsImNodW5rSWRzIiwiZm4iLCJwcmlvcml0eSIsIm5vdEZ1bGZpbGxlZCIsIkluZmluaXR5IiwiaSIsImxlbmd0aCIsImZ1bGZpbGxlZCIsImoiLCJPYmplY3QiLCJrZXlzIiwiZXZlcnkiLCJrZXkiLCJzcGxpY2UiLCJyIiwibiIsImdldHRlciIsIl9fZXNNb2R1bGUiLCJkIiwiYSIsImRlZmluaXRpb24iLCJvIiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiZiIsImUiLCJjaHVua0lkIiwiUHJvbWlzZSIsImFsbCIsInJlZHVjZSIsInByb21pc2VzIiwidSIsImciLCJnbG9iYWxUaGlzIiwidGhpcyIsIkZ1bmN0aW9uIiwid2luZG93Iiwib2JqIiwicHJvcCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5Iiwibm1kIiwicGF0aHMiLCJjaGlsZHJlbiIsInNjcmlwdFVybCIsImltcG9ydFNjcmlwdHMiLCJsb2NhdGlvbiIsImRvY3VtZW50IiwiY3VycmVudFNjcmlwdCIsInNyYyIsInNjcmlwdHMiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsInJlcGxhY2UiLCJwIiwiYiIsInNlbGYiLCJpbnN0YWxsZWRDaHVua3MiLCJjaHVua0xvYWRpbmdHbG9iYWwiLCJwYXJlbnRDaHVua0xvYWRpbmdGdW5jdGlvbiIsInB1c2giLCJiaW5kIiwiZGF0YSIsIm1vcmVNb2R1bGVzIiwicnVudGltZSIsInBvcCIsIm1hcCIsInRoZW4iXSwic291cmNlUm9vdCI6IiJ9
|
package/dist/729.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
var eda;(()=>{"use strict";var t,s,e={7659:(t,s,e)=>{s.Z=void 0;var i=e(6215);Object.defineProperty(s,"Z",{enumerable:!0,get:function(){return i.TSNE}})},6215:(t,s)=>{Object.defineProperty(s,"__esModule",{value:!0}),s.TSNE=void 0,s.TSNE=class{constructor(t){this.returnV=!1,this.vValue=0,this.iter=0,t=t||{},this.perplexity=this.getopt(t,"perplexity",30),this.dim=this.getopt(t,"dim",2),this.epsilon=this.getopt(t,"epsilon",10)}assert(t,s){if(!t)throw s||"Assertion failed"}getopt(t,s,e){return t.hasOwnProperty(s)?t[s]:e}gaussRandom(){if(this.returnV)return this.returnV=!1,this.vValue;const t=2*Math.random()-1,s=2*Math.random()-1,e=t*t+s*s;if(0===e||e>1)return this.gaussRandom();const i=Math.sqrt(-2*Math.log(e)/e);return this.vValue=s*i,this.returnV=!0,t*i}randn(t,s){return t+this.gaussRandom()*s}zeros(t){if(void 0===t||isNaN(t))return[];if("undefined"==typeof ArrayBuffer){const s=new Array(t);for(let e=0;e<t;e++)s[e]=0;return s}return new Float64Array(t)}randn2d(t,s,e){const i=void 0!==e,o=[];for(let r=0;r<t;r++){const t=[];for(let o=0;o<s;o++)i?t.push(e):t.push(this.randn(0,1e-4));o.push(t)}return o}L2(t,s){const e=t.length;let i=0;for(let o=0;o<e;o++){const e=t[o],r=s[o];i+=(e-r)*(e-r)}return i}xtod(t){const s=t.length,e=this.zeros(s*s);for(let i=0;i<s;i++)for(let o=i+1;o<s;o++){const r=this.L2(t[i],t[o]);e[i*s+o]=r,e[o*s+i]=r}return e}d2p(t,s,e){const i=Math.sqrt(t.length),o=Math.floor(i);this.assert(o===i,"D should have square number of elements.");const r=Math.log(s),n=this.zeros(o*o),h=this.zeros(o);for(let s=0;s<o;s++){let i=-1/0,a=1/0,l=1,c=!1;const d=50;let u=0;for(;!c;){let n=0;for(let e=0;e<o;e++){let i=Math.exp(-t[s*o+e]*l);s===e&&(i=0),h[e]=i,n+=i}let f=0;for(let t=0;t<o;t++){let s;s=0===n?0:h[t]/n,h[t]=s,s>1e-7&&(f-=s*Math.log(s))}f>r?(i=l,a===1/0?l*=2:l=(l+a)/2):(a=l,i===-1/0?l/=2:l=(l+i)/2),u++,Math.abs(f-r)<e&&(c=!0),u>=d&&(c=!0)}for(let t=0;t<o;t++)n[s*o+t]=h[t]}const a=this.zeros(o*o),l=2*o;for(let t=0;t<o;t++)for(let s=0;s<o;s++)a[t*o+s]=Math.max((n[t*o+s]+n[s*o+t])/l,1e-100);return a}sign(t){return t>0?1:t<0?-1:0}initDataRaw(t){const s=t.length,e=t[0].length;this.assert(s>0," X is empty? You must have some data!"),this.assert(e>0," X[0] is empty? Where is the data?");const i=this.xtod(t);this.P=this.d2p(i,this.perplexity,1e-4),this.N=s,this.initSolution()}initDataDist(t){const s=t.length;this.assert(s>0," X is empty? You must have some data!");const e=this.zeros(s*s);for(let i=0;i<s;i++)for(let o=i+1;o<s;o++){const r=t[i][o];e[i*s+o]=r,e[o*s+i]=r}this.P=this.d2p(e,this.perplexity,1e-4),this.N=s,this.initSolution()}initSolution(){this.Y=this.randn2d(this.N,this.dim),this.gains=this.randn2d(this.N,this.dim,1),this.ystep=this.randn2d(this.N,this.dim,0),this.iter=0}getSolution(){return this.Y}step(){this.iter+=1;const t=this.N,s=this.costGrad(this.Y),e=s.cost,i=s.grad,o=this.zeros(this.dim);for(let s=0;s<t;s++)for(let t=0;t<this.dim;t++){const e=i[s][t],r=this.ystep[s][t],n=this.gains[s][t];let h=this.sign(e)===this.sign(r)?.8*n:n+.2;h<.01&&(h=.01),this.gains[s][t]=h;const a=(this.iter<250?.5:.8)*r-this.epsilon*h*i[s][t];this.ystep[s][t]=a,this.Y[s][t]+=a,o[t]+=this.Y[s][t]}for(let s=0;s<t;s++)for(let e=0;e<this.dim;e++)this.Y[s][e]-=o[e]/t;return e}debugGrad(){const t=this.N,s=this.costGrad(this.Y),e=(s.cost,s.grad),i=1e-5;for(let s=0;s<t;s++)for(let t=0;t<this.dim;t++){const o=this.Y[s][t];this.Y[s][t]=o+i;const r=this.costGrad(this.Y);this.Y[s][t]=o-i;const n=this.costGrad(this.Y),h=e[s][t],a=(r.cost-n.cost)/(2*i);console.log(s+","+t+": gradcheck analytic: "+h+" vs. numerical: "+a),this.Y[s][t]=o}}costGrad(t){const s=this.N,e=this.dim,i=this.P,o=this.iter<100?4:1,r=this.zeros(s*s);let n=0;for(let i=0;i<s;i++)for(let o=i+1;o<s;o++){let h=0;for(let s=0;s<e;s++){const e=t[i][s]-t[o][s];h+=e*e}const a=1/(1+h);r[i*s+o]=a,r[o*s+i]=a,n+=2*a}const h=s*s,a=this.zeros(h);for(let t=0;t<h;t++)a[t]=Math.max(r[t]/n,1e-100);let l=0;const c=[];for(let n=0;n<s;n++){const h=new Array(e);for(let t=0;t<e;t++)h[t]=0;for(let c=0;c<s;c++){l+=-i[n*s+c]*Math.log(a[n*s+c]);const d=4*(o*i[n*s+c]-a[n*s+c])*r[n*s+c];for(let s=0;s<e;s++)h[s]+=d*(t[n][s]-t[c][s])}c.push(h)}return{cost:l,grad:c}}}}},i={};t=function t(s){var o=i[s];if(void 0!==o)return o.exports;var r=i[s]={exports:{}};return e[s](r,r.exports,t),r.exports}(7659),s=function(t,s,e,i){return new(e||(e=Promise))((function(o,r){function n(t){try{a(i.next(t))}catch(t){r(t)}}function h(t){try{a(i.throw(t))}catch(t){r(t)}}function a(t){var s;t.done?o(t.value):(s=t.value,s instanceof e?s:new e((function(t){t(s)}))).then(n,h)}a((i=i.apply(t,s||[])).next())}))},onmessage=function(e){return s(this,void 0,void 0,(function*(){const s=new t.Z({epsilon:e.data.options.learningRate,perplexity:e.data.options.perplexity,dim:e.data.options.components});s.initDataRaw(e.data.data);const i=e.data.options.iterations;for(let t=0;t<i;++t)s.step();postMessage({embeddings:s.getSolution()})}))},eda={}})();
|
|
2
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUMxRixTQUFTaUMsRUFBU3BJLEdBQVMsSUFBTXVGLEVBQUt1QyxFQUFpQixNQUFFOUgsR0FBUyxDQUFFLE1BQU9tRyxHQUFLOEIsRUFBTzlCLEVBQUksQ0FBRSxDQUM3RixTQUFTWixFQUFLOEMsR0FKbEIsSUFBZXJJLEVBSWFxSSxFQUFPbEUsS0FBTzZELEVBQVFLLEVBQU9ySSxRQUoxQ0EsRUFJeURxSSxFQUFPckksTUFKaERBLGFBQWlCNkQsRUFBSTdELEVBQVEsSUFBSTZELEdBQUUsU0FBVW1FLEdBQVdBLEVBQVFoSSxFQUFRLEtBSWpCc0ksS0FBS0osRUFBV0UsRUFBVyxDQUM3RzdDLEdBQU11QyxFQUFZQSxFQUFVUyxNQUFNWCxFQUFTQyxHQUFjLEtBQUtNLE9BQ2xFLEdBQ0osRUFFQUssVUFBWSxTQUFVQyxHQUNsQixPQUFPakosRUFBVVcsVUFBTSxPQUFRLEdBQVEsWUFDbkMsTUFBTXVJLEVBQU8sSUFBSSxJQUFLLENBQ2xCaEksUUFBUytILEVBQUlFLEtBQUtDLFFBQVFDLGFBQzFCdEksV0FBWWtJLEVBQUlFLEtBQUtDLFFBQVFySSxXQUM3QkUsSUFBS2dJLEVBQUlFLEtBQUtDLFFBQVFFLGFBRTFCSixFQUFLM0QsWUFBWTBELEVBQUlFLEtBQUtBLE1BQzFCLE1BQU1JLEVBQVlOLEVBQUlFLEtBQUtDLFFBQVFJLFdBQ25DLElBQUssSUFBSTdHLEVBQUksRUFBR0EsRUFBSTRHLElBQWE1RyxFQUM3QnVHLEVBQUtuRCxPQUNUMEQsWUFBWSxDQUFFLFdBQWNQLEVBQUtwRCxlQUNyQyxHQUNKLEUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9lZGEvLi9zcmMvd29ya2Vycy90c25lLXdvcmtlci50cyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGtlY2tlbHQvdHNuZS9saWIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BrZWNrZWx0L3RzbmUvbGliL3RzbmUuanMiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svYm9vdHN0cmFwIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFdvcmtlciBmb3IgdGhlIG1ldGhvZCB0LVNORVxudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5pbXBvcnQgeyBUU05FIH0gZnJvbSAnQGtlY2tlbHQvdHNuZSc7XG5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAoZXZ0KSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgdHNuZSA9IG5ldyBUU05FKHtcbiAgICAgICAgICAgIGVwc2lsb246IGV2dC5kYXRhLm9wdGlvbnMubGVhcm5pbmdSYXRlLFxuICAgICAgICAgICAgcGVycGxleGl0eTogZXZ0LmRhdGEub3B0aW9ucy5wZXJwbGV4aXR5LFxuICAgICAgICAgICAgZGltOiBldnQuZGF0YS5vcHRpb25zLmNvbXBvbmVudHNcbiAgICAgICAgfSk7XG4gICAgICAgIHRzbmUuaW5pdERhdGFSYXcoZXZ0LmRhdGEuZGF0YSk7XG4gICAgICAgIGNvbnN0IGl0ZXJDb3VudCA9IGV2dC5kYXRhLm9wdGlvbnMuaXRlcmF0aW9ucztcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVyQ291bnQ7ICsraSlcbiAgICAgICAgICAgIHRzbmUuc3RlcCgpO1xuICAgICAgICBwb3N0TWVzc2FnZSh7ICdlbWJlZGRpbmdzJzogdHNuZS5nZXRTb2x1dGlvbigpIH0pO1xuICAgIH0pO1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5UU05FID0gdm9pZCAwO1xudmFyIHRzbmVfMSA9IHJlcXVpcmUoXCIuL3RzbmVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJUU05FXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0c25lXzEuVFNORTsgfSB9KTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5UU05FID0gdm9pZCAwO1xuY2xhc3MgVFNORSB7XG4gICAgY29uc3RydWN0b3Iob3B0KSB7XG4gICAgICAgIC8vIHJldHVybiAwIG1lYW4gdW5pdCBzdGFuZGFyZCBkZXZpYXRpb24gcmFuZG9tIG51bWJlclxuICAgICAgICB0aGlzLnJldHVyblYgPSBmYWxzZTtcbiAgICAgICAgdGhpcy52VmFsdWUgPSAwLjA7XG4gICAgICAgIHRoaXMuaXRlciA9IDA7XG4gICAgICAgIG9wdCA9IG9wdCB8fCB7fTtcbiAgICAgICAgdGhpcy5wZXJwbGV4aXR5ID0gdGhpcy5nZXRvcHQob3B0LCAncGVycGxleGl0eScsIDMwKTsgLy8gZWZmZWN0aXZlIG51bWJlciBvZiBuZWFyZXN0IG5laWdoYm9yc1xuICAgICAgICB0aGlzLmRpbSA9IHRoaXMuZ2V0b3B0KG9wdCwgJ2RpbScsIDIpOyAvLyBieSBkZWZhdWx0IDItRCB0U05FXG4gICAgICAgIHRoaXMuZXBzaWxvbiA9IHRoaXMuZ2V0b3B0KG9wdCwgJ2Vwc2lsb24nLCAxMCk7IC8vIGxlYXJuaW5nIHJhdGVcbiAgICB9XG4gICAgYXNzZXJ0KGNvbmRpdGlvbiwgbWVzc2FnZSkge1xuICAgICAgICBpZiAoIWNvbmRpdGlvbikge1xuICAgICAgICAgICAgdGhyb3cgbWVzc2FnZSB8fCAnQXNzZXJ0aW9uIGZhaWxlZCc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gc3ludGF4IHN1Z2FyXG4gICAgZ2V0b3B0KG9wdCwgZmllbGQsIGRlZmF1bHR2YWwpIHtcbiAgICAgICAgaWYgKG9wdC5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpIHtcbiAgICAgICAgICAgIHJldHVybiBvcHRbZmllbGRdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHR2YWw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2F1c3NSYW5kb20oKSB7XG4gICAgICAgIGlmICh0aGlzLnJldHVyblYpIHtcbiAgICAgICAgICAgIHRoaXMucmV0dXJuViA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudlZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHUgPSAyICogTWF0aC5yYW5kb20oKSAtIDE7XG4gICAgICAgIGNvbnN0IHYgPSAyICogTWF0aC5yYW5kb20oKSAtIDE7XG4gICAgICAgIGNvbnN0IHIgPSB1ICogdSArIHYgKiB2O1xuICAgICAgICBpZiAociA9PT0gMCB8fCByID4gMSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2F1c3NSYW5kb20oKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjID0gTWF0aC5zcXJ0KC0yICogTWF0aC5sb2cocikgLyByKTtcbiAgICAgICAgdGhpcy52VmFsdWUgPSB2ICogYzsgLy8gY2FjaGUgdGhpcyBmb3IgbmV4dCBmdW5jdGlvbiBjYWxsIGZvciBlZmZpY2llbmN5XG4gICAgICAgIHRoaXMucmV0dXJuViA9IHRydWU7XG4gICAgICAgIHJldHVybiB1ICogYztcbiAgICB9XG4gICAgLy8gcmV0dXJuIHJhbmRvbSBub3JtYWwgbnVtYmVyXG4gICAgcmFuZG4obXUsIHN0ZCkgeyByZXR1cm4gbXUgKyB0aGlzLmdhdXNzUmFuZG9tKCkgKiBzdGQ7IH1cbiAgICAvLyB1dGlsaXRpdHkgdGhhdCBjcmVhdGVzIGNvbnRpZ3VvdXMgdmVjdG9yIG9mIHplcm9zIG9mIHNpemUgblxuICAgIHplcm9zKG4pIHtcbiAgICAgICAgaWYgKHR5cGVvZiAobikgPT09ICd1bmRlZmluZWQnIHx8IGlzTmFOKG4pKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBBcnJheUJ1ZmZlciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIC8vIGxhY2tpbmcgYnJvd3NlciBzdXBwb3J0XG4gICAgICAgICAgICBjb25zdCBhcnIgPSBuZXcgQXJyYXkobik7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgICAgIGFycltpXSA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYXJyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDY0QXJyYXkobik7IC8vIHR5cGVkIGFycmF5cyBhcmUgZmFzdGVyXG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gdXRpbGl0eSB0aGF0IHJldHVybnMgMmQgYXJyYXkgZmlsbGVkIHdpdGggcmFuZG9tIG51bWJlcnNcbiAgICAvLyBvciB3aXRoIHZhbHVlIHMsIGlmIHByb3ZpZGVkXG4gICAgcmFuZG4yZChuLCBkLCBzKSB7XG4gICAgICAgIGNvbnN0IHVzZXMgPSB0eXBlb2YgcyAhPT0gJ3VuZGVmaW5lZCc7XG4gICAgICAgIGNvbnN0IHggPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHhoZXJlID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGQ7IGorKykge1xuICAgICAgICAgICAgICAgIGlmICh1c2VzKSB7XG4gICAgICAgICAgICAgICAgICAgIHhoZXJlLnB1c2gocyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB4aGVyZS5wdXNoKHRoaXMucmFuZG4oMC4wLCAxZS00KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeC5wdXNoKHhoZXJlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geDtcbiAgICB9XG4gICAgLy8gY29tcHV0ZSBMMiBkaXN0YW5jZSBiZXR3ZWVuIHR3byB2ZWN0b3JzXG4gICAgTDIoeDEsIHgyKSB7XG4gICAgICAgIGNvbnN0IEQgPSB4MS5sZW5ndGg7XG4gICAgICAgIGxldCBkID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBEOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHgxaSA9IHgxW2ldO1xuICAgICAgICAgICAgY29uc3QgeDJpID0geDJbaV07XG4gICAgICAgICAgICBkICs9ICh4MWkgLSB4MmkpICogKHgxaSAtIHgyaSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGQ7XG4gICAgfVxuICAgIC8vIGNvbXB1dGUgcGFpcndpc2UgZGlzdGFuY2UgaW4gYWxsIHZlY3RvcnMgaW4gWFxuICAgIHh0b2QoWCkge1xuICAgICAgICBjb25zdCBOID0gWC5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGRpc3QgPSB0aGlzLnplcm9zKE4gKiBOKTsgLy8gYWxsb2NhdGUgY29udGlndW91cyBhcnJheVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IE47IGkrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgTjsgaisrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZCA9IHRoaXMuTDIoWFtpXSwgWFtqXSk7XG4gICAgICAgICAgICAgICAgZGlzdFtpICogTiArIGpdID0gZDtcbiAgICAgICAgICAgICAgICBkaXN0W2ogKiBOICsgaV0gPSBkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkaXN0O1xuICAgIH1cbiAgICAvLyBjb21wdXRlIChwX3tpfGp9ICsgcF97anxpfSkvKDJuKVxuICAgIGQycChELCBwZXJwbGV4aXR5LCB0b2wpIHtcbiAgICAgICAgY29uc3QgbmYgPSBNYXRoLnNxcnQoRC5sZW5ndGgpOyAvLyB0aGlzIGJldHRlciBiZSBhbiBpbnRlZ2VyXG4gICAgICAgIGNvbnN0IG4gPSBNYXRoLmZsb29yKG5mKTtcbiAgICAgICAgdGhpcy5hc3NlcnQobiA9PT0gbmYsICdEIHNob3VsZCBoYXZlIHNxdWFyZSBudW1iZXIgb2YgZWxlbWVudHMuJyk7XG4gICAgICAgIGNvbnN0IGhUYXJnZXQgPSBNYXRoLmxvZyhwZXJwbGV4aXR5KTsgLy8gdGFyZ2V0IGVudHJvcHkgb2YgZGlzdHJpYnV0aW9uXG4gICAgICAgIGNvbnN0IFAgPSB0aGlzLnplcm9zKG4gKiBuKTsgLy8gdGVtcG9yYXJ5IHByb2JhYmlsaXR5IG1hdHJpeFxuICAgICAgICBjb25zdCBwcm93ID0gdGhpcy56ZXJvcyhuKTsgLy8gYSB0ZW1wb3Jhcnkgc3RvcmFnZSBjb21wYXJ0bWVudFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgbGV0IGJldGFtaW4gPSAtSW5maW5pdHk7XG4gICAgICAgICAgICBsZXQgYmV0YW1heCA9IEluZmluaXR5O1xuICAgICAgICAgICAgbGV0IGJldGEgPSAxOyAvLyBpbml0aWFsIHZhbHVlIG9mIHByZWNpc2lvblxuICAgICAgICAgICAgbGV0IGRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IG1heHRyaWVzID0gNTA7XG4gICAgICAgICAgICAvLyBwZXJmb3JtIGJpbmFyeSBzZWFyY2ggdG8gZmluZCBhIHN1aXRhYmxlIHByZWNpc2lvbiBiZXRhXG4gICAgICAgICAgICAvLyBzbyB0aGF0IHRoZSBlbnRyb3B5IG9mIHRoZSBkaXN0cmlidXRpb24gaXMgYXBwcm9wcmlhdGVcbiAgICAgICAgICAgIGxldCBudW0gPSAwO1xuICAgICAgICAgICAgd2hpbGUgKCFkb25lKSB7XG4gICAgICAgICAgICAgICAgLy9kZWJ1Z2dlcjtcbiAgICAgICAgICAgICAgICAvLyBjb21wdXRlIGVudHJvcHkgYW5kIGtlcm5lbCByb3cgd2l0aCBiZXRhIHByZWNpc2lvblxuICAgICAgICAgICAgICAgIGxldCBwc3VtID0gMC4wO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbjsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwaiA9IE1hdGguZXhwKC1EW2kgKiBuICsgal0gKiBiZXRhKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IGopIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBqID0gMDtcbiAgICAgICAgICAgICAgICAgICAgfSAvLyB3ZSBkb250IGNhcmUgYWJvdXQgZGlhZ29uYWxzXG4gICAgICAgICAgICAgICAgICAgIHByb3dbal0gPSBwajtcbiAgICAgICAgICAgICAgICAgICAgcHN1bSArPSBwajtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gbm9ybWFsaXplIHAgYW5kIGNvbXB1dGUgZW50cm9weVxuICAgICAgICAgICAgICAgIGxldCBuSGVyZSA9IDAuMDtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG47IGorKykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcGo7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwc3VtID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwaiA9IDA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwaiA9IHByb3dbal0gLyBwc3VtO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHByb3dbal0gPSBwajtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBqID4gMWUtNykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbkhlcmUgLT0gcGogKiBNYXRoLmxvZyhwaik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gYWRqdXN0IGJldGEgYmFzZWQgb24gcmVzdWx0XG4gICAgICAgICAgICAgICAgaWYgKG5IZXJlID4gaFRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBlbnRyb3B5IHdhcyB0b28gaGlnaCAoZGlzdHJpYnV0aW9uIHRvbyBkaWZmdXNlKVxuICAgICAgICAgICAgICAgICAgICAvLyBzbyB3ZSBuZWVkIHRvIGluY3JlYXNlIHRoZSBwcmVjaXNpb24gZm9yIG1vcmUgcGVha3kgZGlzdHJpYnV0aW9uXG4gICAgICAgICAgICAgICAgICAgIGJldGFtaW4gPSBiZXRhOyAvLyBtb3ZlIHVwIHRoZSBib3VuZHNcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJldGFtYXggPT09IEluZmluaXR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBiZXRhID0gYmV0YSAqIDI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBiZXRhID0gKGJldGEgKyBiZXRhbWF4KSAvIDI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnZlcnNlIGNhc2UuIG1ha2UgZGlzdHJ1YnRpb24gbGVzcyBwZWFreVxuICAgICAgICAgICAgICAgICAgICBiZXRhbWF4ID0gYmV0YTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJldGFtaW4gPT09IC1JbmZpbml0eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYmV0YSA9IGJldGEgLyAyO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYmV0YSA9IChiZXRhICsgYmV0YW1pbikgLyAyO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIHN0b3BwaW5nIGNvbmRpdGlvbnM6IHRvbyBtYW55IHRyaWVzIG9yIGdvdCBhIGdvb2QgcHJlY2lzaW9uXG4gICAgICAgICAgICAgICAgbnVtKys7XG4gICAgICAgICAgICAgICAgaWYgKE1hdGguYWJzKG5IZXJlIC0gaFRhcmdldCkgPCB0b2wpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChudW0gPj0gbWF4dHJpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ2RhdGEgcG9pbnQgJyArIGkgKyAnIGdldHMgcHJlY2lzaW9uICcgKyBiZXRhICsgJyBhZnRlciAnICsgbnVtICsgJyBiaW5hcnkgc2VhcmNoIHN0ZXBzLicpO1xuICAgICAgICAgICAgLy8gY29weSBvdmVyIHRoZSBmaW5hbCBwcm93IHRvIFAgYXQgcm93IGlcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbjsgaisrKSB7XG4gICAgICAgICAgICAgICAgUFtpICogbiArIGpdID0gcHJvd1tqXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBlbmQgbG9vcCBvdmVyIGV4YW1wbGVzIGlcbiAgICAgICAgLy8gc3ltbWV0cml6ZSBQIGFuZCBub3JtYWxpemUgaXQgdG8gc3VtIHRvIDEgb3ZlciBhbGwgaWpcbiAgICAgICAgY29uc3QgcE91dCA9IHRoaXMuemVyb3MobiAqIG4pO1xuICAgICAgICBjb25zdCBOMiA9IG4gKiAyO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBuOyBqKyspIHtcbiAgICAgICAgICAgICAgICBwT3V0W2kgKiBuICsgal0gPSBNYXRoLm1heCgoUFtpICogbiArIGpdICsgUFtqICogbiArIGldKSAvIE4yLCAxZS0xMDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwT3V0O1xuICAgIH1cbiAgICAvLyBoZWxwZXIgZnVuY3Rpb25cbiAgICBzaWduKHgpIHsgcmV0dXJuIHggPiAwID8gMSA6IHggPCAwID8gLTEgOiAwOyB9XG4gICAgLy8gdGhpcyBmdW5jdGlvbiB0YWtlcyBhIHNldCBvZiBoaWdoLWRpbWVuc2lvbmFsIHBvaW50c1xuICAgIC8vIGFuZCBjcmVhdGVzIG1hdHJpeCBQIGZyb20gdGhlbSB1c2luZyBnYXVzc2lhbiBrZXJuZWxcbiAgICBpbml0RGF0YVJhdyhYKSB7XG4gICAgICAgIGNvbnN0IE4gPSBYLmxlbmd0aDtcbiAgICAgICAgY29uc3QgRCA9IFhbMF0ubGVuZ3RoO1xuICAgICAgICB0aGlzLmFzc2VydChOID4gMCwgJyBYIGlzIGVtcHR5PyBZb3UgbXVzdCBoYXZlIHNvbWUgZGF0YSEnKTtcbiAgICAgICAgdGhpcy5hc3NlcnQoRCA+IDAsICcgWFswXSBpcyBlbXB0eT8gV2hlcmUgaXMgdGhlIGRhdGE/Jyk7XG4gICAgICAgIGNvbnN0IGRpc3RzID0gdGhpcy54dG9kKFgpOyAvLyBjb252ZXJ0IFggdG8gZGlzdGFuY2VzIHVzaW5nIGdhdXNzaWFuIGtlcm5lbFxuICAgICAgICB0aGlzLlAgPSB0aGlzLmQycChkaXN0cywgdGhpcy5wZXJwbGV4aXR5LCAxZS00KTsgLy8gYXR0YWNoIHRvIG9iamVjdFxuICAgICAgICB0aGlzLk4gPSBOOyAvLyBiYWNrIHVwIHRoZSBzaXplIG9mIHRoZSBkYXRhc2V0XG4gICAgICAgIHRoaXMuaW5pdFNvbHV0aW9uKCk7IC8vIHJlZnJlc2ggdGhpc1xuICAgIH1cbiAgICAvLyB0aGlzIGZ1bmN0aW9uIHRha2VzIGEgZ2l2ZW4gZGlzdGFuY2UgbWF0cml4IGFuZCBjcmVhdGVzXG4gICAgLy8gbWF0cml4IFAgZnJvbSB0aGVtLlxuICAgIC8vIEQgaXMgYXNzdW1lZCB0byBiZSBwcm92aWRlZCBhcyBhIGxpc3Qgb2YgbGlzdHMsIGFuZCBzaG91bGQgYmUgc3ltbWV0cmljXG4gICAgaW5pdERhdGFEaXN0KEQpIHtcbiAgICAgICAgY29uc3QgTiA9IEQubGVuZ3RoO1xuICAgICAgICB0aGlzLmFzc2VydChOID4gMCwgJyBYIGlzIGVtcHR5PyBZb3UgbXVzdCBoYXZlIHNvbWUgZGF0YSEnKTtcbiAgICAgICAgLy8gY29udmVydCBEIHRvIGEgKGZhc3QpIHR5cGVkIGFycmF5IHZlcnNpb25cbiAgICAgICAgY29uc3QgZGlzdHMgPSB0aGlzLnplcm9zKE4gKiBOKTsgLy8gYWxsb2NhdGUgY29udGlndW91cyBhcnJheVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IE47IGkrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgTjsgaisrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZCA9IERbaV1bal07XG4gICAgICAgICAgICAgICAgZGlzdHNbaSAqIE4gKyBqXSA9IGQ7XG4gICAgICAgICAgICAgICAgZGlzdHNbaiAqIE4gKyBpXSA9IGQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5QID0gdGhpcy5kMnAoZGlzdHMsIHRoaXMucGVycGxleGl0eSwgMWUtNCk7XG4gICAgICAgIHRoaXMuTiA9IE47XG4gICAgICAgIHRoaXMuaW5pdFNvbHV0aW9uKCk7IC8vIHJlZnJlc2ggdGhpc1xuICAgIH1cbiAgICAvLyAocmUpaW5pdGlhbGl6ZXMgdGhlIHNvbHV0aW9uIHRvIHJhbmRvbVxuICAgIGluaXRTb2x1dGlvbigpIHtcbiAgICAgICAgLy8gZ2VuZXJhdGUgcmFuZG9tIHNvbHV0aW9uIHRvIHQtU05FXG4gICAgICAgIHRoaXMuWSA9IHRoaXMucmFuZG4yZCh0aGlzLk4sIHRoaXMuZGltKTsgLy8gdGhlIHNvbHV0aW9uXG4gICAgICAgIHRoaXMuZ2FpbnMgPSB0aGlzLnJhbmRuMmQodGhpcy5OLCB0aGlzLmRpbSwgMS4wKTsgLy8gc3RlcCBnYWlucyB0byBhY2NlbGVyYXRlIHByb2dyZXNzIGluIHVuY2hhbmdpbmcgZGlyZWN0aW9uc1xuICAgICAgICB0aGlzLnlzdGVwID0gdGhpcy5yYW5kbjJkKHRoaXMuTiwgdGhpcy5kaW0sIDAuMCk7IC8vIG1vbWVudHVtIGFjY3VtdWxhdG9yXG4gICAgICAgIHRoaXMuaXRlciA9IDA7XG4gICAgfVxuICAgIC8vIHJldHVybiBwb2ludGVyIHRvIGN1cnJlbnQgc29sdXRpb25cbiAgICBnZXRTb2x1dGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuWTtcbiAgICB9XG4gICAgLy8gcGVyZm9ybSBhIHNpbmdsZSBzdGVwIG9mIG9wdGltaXphdGlvbiB0byBpbXByb3ZlIHRoZSBlbWJlZGRpbmdcbiAgICBzdGVwKCkge1xuICAgICAgICB0aGlzLml0ZXIgKz0gMTtcbiAgICAgICAgY29uc3QgTiA9IHRoaXMuTjtcbiAgICAgICAgY29uc3QgY2cgPSB0aGlzLmNvc3RHcmFkKHRoaXMuWSk7IC8vIGV2YWx1YXRlIGdyYWRpZW50XG4gICAgICAgIGNvbnN0IGNvc3QgPSBjZy5jb3N0O1xuICAgICAgICBjb25zdCBncmFkID0gY2cuZ3JhZDtcbiAgICAgICAgLy8gcGVyZm9ybSBncmFkaWVudCBzdGVwXG4gICAgICAgIGNvbnN0IHltZWFuID0gdGhpcy56ZXJvcyh0aGlzLmRpbSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTjsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBkID0gMDsgZCA8IHRoaXMuZGltOyBkKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBnaWQgPSBncmFkW2ldW2RdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNpZCA9IHRoaXMueXN0ZXBbaV1bZF07XG4gICAgICAgICAgICAgICAgY29uc3QgZ2FpbmlkID0gdGhpcy5nYWluc1tpXVtkXTtcbiAgICAgICAgICAgICAgICAvLyBjb21wdXRlIGdhaW4gdXBkYXRlXG4gICAgICAgICAgICAgICAgbGV0IG5ld2dhaW4gPSB0aGlzLnNpZ24oZ2lkKSA9PT0gdGhpcy5zaWduKHNpZCkgPyBnYWluaWQgKiAwLjggOiBnYWluaWQgKyAwLjI7XG4gICAgICAgICAgICAgICAgaWYgKG5ld2dhaW4gPCAwLjAxKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld2dhaW4gPSAwLjAxO1xuICAgICAgICAgICAgICAgIH0gLy8gY2xhbXBcbiAgICAgICAgICAgICAgICB0aGlzLmdhaW5zW2ldW2RdID0gbmV3Z2FpbjsgLy8gc3RvcmUgZm9yIG5leHQgdHVyblxuICAgICAgICAgICAgICAgIC8vIGNvbXB1dGUgbW9tZW50dW0gc3RlcCBkaXJlY3Rpb25cbiAgICAgICAgICAgICAgICBjb25zdCBtb212YWwgPSB0aGlzLml0ZXIgPCAyNTAgPyAwLjUgOiAwLjg7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3c2lkID0gbW9tdmFsICogc2lkIC0gdGhpcy5lcHNpbG9uICogbmV3Z2FpbiAqIGdyYWRbaV1bZF07XG4gICAgICAgICAgICAgICAgdGhpcy55c3RlcFtpXVtkXSA9IG5ld3NpZDsgLy8gcmVtZW1iZXIgdGhlIHN0ZXAgd2UgdG9va1xuICAgICAgICAgICAgICAgIC8vIHN0ZXAhXG4gICAgICAgICAgICAgICAgdGhpcy5ZW2ldW2RdICs9IG5ld3NpZDtcbiAgICAgICAgICAgICAgICB5bWVhbltkXSArPSB0aGlzLllbaV1bZF07IC8vIGFjY3VtdWxhdGUgbWVhbiBzbyB0aGF0IHdlIGNhbiBjZW50ZXIgbGF0ZXJcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyByZXByb2plY3QgWSB0byBiZSB6ZXJvIG1lYW5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBOOyBpKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGQgPSAwOyBkIDwgdGhpcy5kaW07IGQrKykge1xuICAgICAgICAgICAgICAgIHRoaXMuWVtpXVtkXSAtPSB5bWVhbltkXSAvIE47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy9pZih0aGlzLml0ZXIlMTAwPT09MCkgY29uc29sZS5sb2coJ2l0ZXIgJyArIHRoaXMuaXRlciArICcsIGNvc3Q6ICcgKyBjb3N0KTtcbiAgICAgICAgcmV0dXJuIGNvc3Q7IC8vIHJldHVybiBjdXJyZW50IGNvc3RcbiAgICB9XG4gICAgLy8gZm9yIGRlYnVnZ2luZzogZ3JhZGllbnQgY2hlY2tcbiAgICBkZWJ1Z0dyYWQoKSB7XG4gICAgICAgIGNvbnN0IE4gPSB0aGlzLk47XG4gICAgICAgIGNvbnN0IGNnID0gdGhpcy5jb3N0R3JhZCh0aGlzLlkpOyAvLyBldmFsdWF0ZSBncmFkaWVudFxuICAgICAgICBjb25zdCBjb3N0ID0gY2cuY29zdDtcbiAgICAgICAgY29uc3QgZ3JhZCA9IGNnLmdyYWQ7XG4gICAgICAgIGNvbnN0IGUgPSAxZS01O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IE47IGkrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgZCA9IDA7IGQgPCB0aGlzLmRpbTsgZCsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeW9sZCA9IHRoaXMuWVtpXVtkXTtcbiAgICAgICAgICAgICAgICB0aGlzLllbaV1bZF0gPSB5b2xkICsgZTtcbiAgICAgICAgICAgICAgICBjb25zdCBjZzAgPSB0aGlzLmNvc3RHcmFkKHRoaXMuWSk7XG4gICAgICAgICAgICAgICAgdGhpcy5ZW2ldW2RdID0geW9sZCAtIGU7XG4gICAgICAgICAgICAgICAgY29uc3QgY2cxID0gdGhpcy5jb3N0R3JhZCh0aGlzLlkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFuYWx5dGljID0gZ3JhZFtpXVtkXTtcbiAgICAgICAgICAgICAgICBjb25zdCBudW1lcmljYWwgPSAoY2cwLmNvc3QgLSBjZzEuY29zdCkgLyAoMiAqIGUpO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGkgKyAnLCcgKyBkICsgJzogZ3JhZGNoZWNrIGFuYWx5dGljOiAnICsgYW5hbHl0aWMgKyAnIHZzLiBudW1lcmljYWw6ICcgKyBudW1lcmljYWwpO1xuICAgICAgICAgICAgICAgIHRoaXMuWVtpXVtkXSA9IHlvbGQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gcmV0dXJuIGNvc3QgYW5kIGdyYWRpZW50LCBnaXZlbiBhbiBhcnJhbmdlbWVudFxuICAgIGNvc3RHcmFkKFkpIHtcbiAgICAgICAgY29uc3QgTiA9IHRoaXMuTjtcbiAgICAgICAgY29uc3QgZGltID0gdGhpcy5kaW07IC8vIGRpbSBvZiBvdXRwdXQgc3BhY2VcbiAgICAgICAgY29uc3QgUCA9IHRoaXMuUDtcbiAgICAgICAgY29uc3QgcG11bCA9IHRoaXMuaXRlciA8IDEwMCA/IDQgOiAxOyAvLyB0cmljayB0aGF0IGhlbHBzIHdpdGggbG9jYWwgb3B0aW1hXG4gICAgICAgIC8vIGNvbXB1dGUgY3VycmVudCBRIGRpc3RyaWJ1dGlvbiwgdW5ub3JtYWxpemVkIGZpcnN0XG4gICAgICAgIGNvbnN0IHF1QXJyID0gdGhpcy56ZXJvcyhOICogTik7XG4gICAgICAgIGxldCBxc3VtID0gMC4wO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IE47IGkrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgTjsgaisrKSB7XG4gICAgICAgICAgICAgICAgbGV0IGRzdW0gPSAwLjA7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgZCA9IDA7IGQgPCBkaW07IGQrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkaGVyZSA9IFlbaV1bZF0gLSBZW2pdW2RdO1xuICAgICAgICAgICAgICAgICAgICBkc3VtICs9IGRoZXJlICogZGhlcmU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHF1ID0gMS4wIC8gKDEuMCArIGRzdW0pOyAvLyBTdHVkZW50IHQtZGlzdHJpYnV0aW9uXG4gICAgICAgICAgICAgICAgcXVBcnJbaSAqIE4gKyBqXSA9IHF1O1xuICAgICAgICAgICAgICAgIHF1QXJyW2ogKiBOICsgaV0gPSBxdTtcbiAgICAgICAgICAgICAgICBxc3VtICs9IDIgKiBxdTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBub3JtYWxpemUgUSBkaXN0cmlidXRpb24gdG8gc3VtIHRvIDFcbiAgICAgICAgY29uc3QgTk4gPSBOICogTjtcbiAgICAgICAgY29uc3QgUSA9IHRoaXMuemVyb3MoTk4pO1xuICAgICAgICBmb3IgKGxldCBxID0gMDsgcSA8IE5OOyBxKyspIHtcbiAgICAgICAgICAgIFFbcV0gPSBNYXRoLm1heChxdUFycltxXSAvIHFzdW0sIDFlLTEwMCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGNvc3QgPSAwLjA7XG4gICAgICAgIGNvbnN0IGdyYWQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBOOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGdzdW0gPSBuZXcgQXJyYXkoZGltKTsgLy8gaW5pdCBncmFkIGZvciBwb2ludCBpXG4gICAgICAgICAgICBmb3IgKGxldCBkID0gMDsgZCA8IGRpbTsgZCsrKSB7XG4gICAgICAgICAgICAgICAgZ3N1bVtkXSA9IDAuMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgTjsgaisrKSB7XG4gICAgICAgICAgICAgICAgY29zdCArPSAtUFtpICogTiArIGpdICogTWF0aC5sb2coUVtpICogTiArIGpdKTsgLy8gYWNjdW11bGF0ZSBjb3N0ICh0aGUgbm9uLWNvbnN0YW50IHBvcnRpb24gYXQgbGVhc3QuLi4pXG4gICAgICAgICAgICAgICAgY29uc3QgcHJlbXVsdCA9IDQgKiAocG11bCAqIFBbaSAqIE4gKyBqXSAtIFFbaSAqIE4gKyBqXSkgKiBxdUFycltpICogTiArIGpdO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGQgPSAwOyBkIDwgZGltOyBkKyspIHtcbiAgICAgICAgICAgICAgICAgICAgZ3N1bVtkXSArPSBwcmVtdWx0ICogKFlbaV1bZF0gLSBZW2pdW2RdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBncmFkLnB1c2goZ3N1bSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgY29zdCwgZ3JhZCB9O1xuICAgIH1cbn1cbmV4cG9ydHMuVFNORSA9IFRTTkU7XG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIl0sIm5hbWVzIjpbIl9fYXdhaXRlciIsImV4cG9ydHMiLCJ0c25lXzEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiLCJUU05FIiwidmFsdWUiLCJjb25zdHJ1Y3RvciIsIm9wdCIsInRoaXMiLCJyZXR1cm5WIiwidlZhbHVlIiwiaXRlciIsInBlcnBsZXhpdHkiLCJnZXRvcHQiLCJkaW0iLCJlcHNpbG9uIiwiYXNzZXJ0IiwiY29uZGl0aW9uIiwibWVzc2FnZSIsImZpZWxkIiwiZGVmYXVsdHZhbCIsImhhc093blByb3BlcnR5IiwiZ2F1c3NSYW5kb20iLCJ1IiwiTWF0aCIsInJhbmRvbSIsInYiLCJyIiwiYyIsInNxcnQiLCJsb2ciLCJyYW5kbiIsIm11Iiwic3RkIiwiemVyb3MiLCJuIiwiaXNOYU4iLCJBcnJheUJ1ZmZlciIsImFyciIsIkFycmF5IiwiaSIsIkZsb2F0NjRBcnJheSIsInJhbmRuMmQiLCJkIiwicyIsInVzZXMiLCJ4IiwieGhlcmUiLCJqIiwicHVzaCIsIkwyIiwieDEiLCJ4MiIsIkQiLCJsZW5ndGgiLCJ4MWkiLCJ4MmkiLCJ4dG9kIiwiWCIsIk4iLCJkaXN0IiwiZDJwIiwidG9sIiwibmYiLCJmbG9vciIsImhUYXJnZXQiLCJQIiwicHJvdyIsImJldGFtaW4iLCJiZXRhbWF4IiwiSW5maW5pdHkiLCJiZXRhIiwiZG9uZSIsIm1heHRyaWVzIiwibnVtIiwicHN1bSIsInBqIiwiZXhwIiwibkhlcmUiLCJhYnMiLCJwT3V0IiwiTjIiLCJtYXgiLCJzaWduIiwiaW5pdERhdGFSYXciLCJkaXN0cyIsImluaXRTb2x1dGlvbiIsImluaXREYXRhRGlzdCIsIlkiLCJnYWlucyIsInlzdGVwIiwiZ2V0U29sdXRpb24iLCJzdGVwIiwiY2ciLCJjb3N0R3JhZCIsImNvc3QiLCJncmFkIiwieW1lYW4iLCJnaWQiLCJzaWQiLCJnYWluaWQiLCJuZXdnYWluIiwibmV3c2lkIiwiZGVidWdHcmFkIiwiZSIsInlvbGQiLCJjZzAiLCJjZzEiLCJhbmFseXRpYyIsIm51bWVyaWNhbCIsImNvbnNvbGUiLCJwbXVsIiwicXVBcnIiLCJxc3VtIiwiZHN1bSIsImRoZXJlIiwicXUiLCJOTiIsIlEiLCJxIiwiZ3N1bSIsInByZW11bHQiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJ1bmRlZmluZWQiLCJtb2R1bGUiLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwidGhpc0FyZyIsIl9hcmd1bWVudHMiLCJnZW5lcmF0b3IiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImZ1bGZpbGxlZCIsIm5leHQiLCJyZWplY3RlZCIsInJlc3VsdCIsInRoZW4iLCJhcHBseSIsIm9ubWVzc2FnZSIsImV2dCIsInRzbmUiLCJkYXRhIiwib3B0aW9ucyIsImxlYXJuaW5nUmF0ZSIsImNvbXBvbmVudHMiLCJpdGVyQ291bnQiLCJpdGVyYXRpb25zIiwicG9zdE1lc3NhZ2UiXSwic291cmNlUm9vdCI6IiJ9
|
|
2
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUMxRixTQUFTaUMsRUFBU3BJLEdBQVMsSUFBTXVGLEVBQUt1QyxFQUFpQixNQUFFOUgsR0FBUyxDQUFFLE1BQU9tRyxHQUFLOEIsRUFBTzlCLEVBQUksQ0FBRSxDQUM3RixTQUFTWixFQUFLOEMsR0FKbEIsSUFBZXJJLEVBSWFxSSxFQUFPbEUsS0FBTzZELEVBQVFLLEVBQU9ySSxRQUoxQ0EsRUFJeURxSSxFQUFPckksTUFKaERBLGFBQWlCNkQsRUFBSTdELEVBQVEsSUFBSTZELEdBQUUsU0FBVW1FLEdBQVdBLEVBQVFoSSxFQUFRLEtBSWpCc0ksS0FBS0osRUFBV0UsRUFBVyxDQUM3RzdDLEdBQU11QyxFQUFZQSxFQUFVUyxNQUFNWCxFQUFTQyxHQUFjLEtBQUtNLE9BQ2xFLEdBQ0osRUFFQUssVUFBWSxTQUFVQyxHQUNsQixPQUFPakosRUFBVVcsVUFBTSxPQUFRLEdBQVEsWUFDbkMsTUFBTXVJLEVBQU8sSUFBSSxJQUFLLENBQ2xCaEksUUFBUytILEVBQUlFLEtBQUtDLFFBQVFDLGFBQzFCdEksV0FBWWtJLEVBQUlFLEtBQUtDLFFBQVFySSxXQUM3QkUsSUFBS2dJLEVBQUlFLEtBQUtDLFFBQVFFLGFBRTFCSixFQUFLM0QsWUFBWTBELEVBQUlFLEtBQUtBLE1BQzFCLE1BQU1JLEVBQVlOLEVBQUlFLEtBQUtDLFFBQVFJLFdBQ25DLElBQUssSUFBSTdHLEVBQUksRUFBR0EsRUFBSTRHLElBQWE1RyxFQUM3QnVHLEVBQUtuRCxPQUNUMEQsWUFBWSxDQUFFLFdBQWNQLEVBQUtwRCxlQUNyQyxHQUNKLEUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9lZGEvLi9zcmMvd29ya2Vycy90c25lLXdvcmtlci50cyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGtlY2tlbHQvdHNuZS9saWIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BrZWNrZWx0L3RzbmUvbGliL3RzbmUuanMiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svYm9vdHN0cmFwIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFdvcmtlciBmb3IgdGhlIG1ldGhvZCB0LVNORVxudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5pbXBvcnQgeyBUU05FIH0gZnJvbSAnQGtlY2tlbHQvdHNuZSc7XG5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAoZXZ0KSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgdHNuZSA9IG5ldyBUU05FKHtcbiAgICAgICAgICAgIGVwc2lsb246IGV2dC5kYXRhLm9wdGlvbnMubGVhcm5pbmdSYXRlLFxuICAgICAgICAgICAgcGVycGxleGl0eTogZXZ0LmRhdGEub3B0aW9ucy5wZXJwbGV4aXR5LFxuICAgICAgICAgICAgZGltOiBldnQuZGF0YS5vcHRpb25zLmNvbXBvbmVudHMsXG4gICAgICAgIH0pO1xuICAgICAgICB0c25lLmluaXREYXRhUmF3KGV2dC5kYXRhLmRhdGEpO1xuICAgICAgICBjb25zdCBpdGVyQ291bnQgPSBldnQuZGF0YS5vcHRpb25zLml0ZXJhdGlvbnM7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlckNvdW50OyArK2kpXG4gICAgICAgICAgICB0c25lLnN0ZXAoKTtcbiAgICAgICAgcG9zdE1lc3NhZ2UoeyAnZW1iZWRkaW5ncyc6IHRzbmUuZ2V0U29sdXRpb24oKSB9KTtcbiAgICB9KTtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVFNORSA9IHZvaWQgMDtcbnZhciB0c25lXzEgPSByZXF1aXJlKFwiLi90c25lXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVFNORVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHNuZV8xLlRTTkU7IH0gfSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVFNORSA9IHZvaWQgMDtcbmNsYXNzIFRTTkUge1xuICAgIGNvbnN0cnVjdG9yKG9wdCkge1xuICAgICAgICAvLyByZXR1cm4gMCBtZWFuIHVuaXQgc3RhbmRhcmQgZGV2aWF0aW9uIHJhbmRvbSBudW1iZXJcbiAgICAgICAgdGhpcy5yZXR1cm5WID0gZmFsc2U7XG4gICAgICAgIHRoaXMudlZhbHVlID0gMC4wO1xuICAgICAgICB0aGlzLml0ZXIgPSAwO1xuICAgICAgICBvcHQgPSBvcHQgfHwge307XG4gICAgICAgIHRoaXMucGVycGxleGl0eSA9IHRoaXMuZ2V0b3B0KG9wdCwgJ3BlcnBsZXhpdHknLCAzMCk7IC8vIGVmZmVjdGl2ZSBudW1iZXIgb2YgbmVhcmVzdCBuZWlnaGJvcnNcbiAgICAgICAgdGhpcy5kaW0gPSB0aGlzLmdldG9wdChvcHQsICdkaW0nLCAyKTsgLy8gYnkgZGVmYXVsdCAyLUQgdFNORVxuICAgICAgICB0aGlzLmVwc2lsb24gPSB0aGlzLmdldG9wdChvcHQsICdlcHNpbG9uJywgMTApOyAvLyBsZWFybmluZyByYXRlXG4gICAgfVxuICAgIGFzc2VydChjb25kaXRpb24sIG1lc3NhZ2UpIHtcbiAgICAgICAgaWYgKCFjb25kaXRpb24pIHtcbiAgICAgICAgICAgIHRocm93IG1lc3NhZ2UgfHwgJ0Fzc2VydGlvbiBmYWlsZWQnO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIHN5bnRheCBzdWdhclxuICAgIGdldG9wdChvcHQsIGZpZWxkLCBkZWZhdWx0dmFsKSB7XG4gICAgICAgIGlmIChvcHQuaGFzT3duUHJvcGVydHkoZmllbGQpKSB7XG4gICAgICAgICAgICByZXR1cm4gb3B0W2ZpZWxkXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBkZWZhdWx0dmFsO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdhdXNzUmFuZG9tKCkge1xuICAgICAgICBpZiAodGhpcy5yZXR1cm5WKSB7XG4gICAgICAgICAgICB0aGlzLnJldHVyblYgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1ID0gMiAqIE1hdGgucmFuZG9tKCkgLSAxO1xuICAgICAgICBjb25zdCB2ID0gMiAqIE1hdGgucmFuZG9tKCkgLSAxO1xuICAgICAgICBjb25zdCByID0gdSAqIHUgKyB2ICogdjtcbiAgICAgICAgaWYgKHIgPT09IDAgfHwgciA+IDEpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdhdXNzUmFuZG9tKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYyA9IE1hdGguc3FydCgtMiAqIE1hdGgubG9nKHIpIC8gcik7XG4gICAgICAgIHRoaXMudlZhbHVlID0gdiAqIGM7IC8vIGNhY2hlIHRoaXMgZm9yIG5leHQgZnVuY3Rpb24gY2FsbCBmb3IgZWZmaWNpZW5jeVxuICAgICAgICB0aGlzLnJldHVyblYgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdSAqIGM7XG4gICAgfVxuICAgIC8vIHJldHVybiByYW5kb20gbm9ybWFsIG51bWJlclxuICAgIHJhbmRuKG11LCBzdGQpIHsgcmV0dXJuIG11ICsgdGhpcy5nYXVzc1JhbmRvbSgpICogc3RkOyB9XG4gICAgLy8gdXRpbGl0aXR5IHRoYXQgY3JlYXRlcyBjb250aWd1b3VzIHZlY3RvciBvZiB6ZXJvcyBvZiBzaXplIG5cbiAgICB6ZXJvcyhuKSB7XG4gICAgICAgIGlmICh0eXBlb2YgKG4pID09PSAndW5kZWZpbmVkJyB8fCBpc05hTihuKSkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgQXJyYXlCdWZmZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAvLyBsYWNraW5nIGJyb3dzZXIgc3VwcG9ydFxuICAgICAgICAgICAgY29uc3QgYXJyID0gbmV3IEFycmF5KG4pO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBhcnJbaV0gPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFycjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRmxvYXQ2NEFycmF5KG4pOyAvLyB0eXBlZCBhcnJheXMgYXJlIGZhc3RlclxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIHV0aWxpdHkgdGhhdCByZXR1cm5zIDJkIGFycmF5IGZpbGxlZCB3aXRoIHJhbmRvbSBudW1iZXJzXG4gICAgLy8gb3Igd2l0aCB2YWx1ZSBzLCBpZiBwcm92aWRlZFxuICAgIHJhbmRuMmQobiwgZCwgcykge1xuICAgICAgICBjb25zdCB1c2VzID0gdHlwZW9mIHMgIT09ICd1bmRlZmluZWQnO1xuICAgICAgICBjb25zdCB4ID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCB4aGVyZSA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBkOyBqKyspIHtcbiAgICAgICAgICAgICAgICBpZiAodXNlcykge1xuICAgICAgICAgICAgICAgICAgICB4aGVyZS5wdXNoKHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgeGhlcmUucHVzaCh0aGlzLnJhbmRuKDAuMCwgMWUtNCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHgucHVzaCh4aGVyZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHg7XG4gICAgfVxuICAgIC8vIGNvbXB1dGUgTDIgZGlzdGFuY2UgYmV0d2VlbiB0d28gdmVjdG9yc1xuICAgIEwyKHgxLCB4Mikge1xuICAgICAgICBjb25zdCBEID0geDEubGVuZ3RoO1xuICAgICAgICBsZXQgZCA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgRDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCB4MWkgPSB4MVtpXTtcbiAgICAgICAgICAgIGNvbnN0IHgyaSA9IHgyW2ldO1xuICAgICAgICAgICAgZCArPSAoeDFpIC0geDJpKSAqICh4MWkgLSB4MmkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkO1xuICAgIH1cbiAgICAvLyBjb21wdXRlIHBhaXJ3aXNlIGRpc3RhbmNlIGluIGFsbCB2ZWN0b3JzIGluIFhcbiAgICB4dG9kKFgpIHtcbiAgICAgICAgY29uc3QgTiA9IFgubGVuZ3RoO1xuICAgICAgICBjb25zdCBkaXN0ID0gdGhpcy56ZXJvcyhOICogTik7IC8vIGFsbG9jYXRlIGNvbnRpZ3VvdXMgYXJyYXlcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBOOyBpKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IE47IGorKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGQgPSB0aGlzLkwyKFhbaV0sIFhbal0pO1xuICAgICAgICAgICAgICAgIGRpc3RbaSAqIE4gKyBqXSA9IGQ7XG4gICAgICAgICAgICAgICAgZGlzdFtqICogTiArIGldID0gZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGlzdDtcbiAgICB9XG4gICAgLy8gY29tcHV0ZSAocF97aXxqfSArIHBfe2p8aX0pLygybilcbiAgICBkMnAoRCwgcGVycGxleGl0eSwgdG9sKSB7XG4gICAgICAgIGNvbnN0IG5mID0gTWF0aC5zcXJ0KEQubGVuZ3RoKTsgLy8gdGhpcyBiZXR0ZXIgYmUgYW4gaW50ZWdlclxuICAgICAgICBjb25zdCBuID0gTWF0aC5mbG9vcihuZik7XG4gICAgICAgIHRoaXMuYXNzZXJ0KG4gPT09IG5mLCAnRCBzaG91bGQgaGF2ZSBzcXVhcmUgbnVtYmVyIG9mIGVsZW1lbnRzLicpO1xuICAgICAgICBjb25zdCBoVGFyZ2V0ID0gTWF0aC5sb2cocGVycGxleGl0eSk7IC8vIHRhcmdldCBlbnRyb3B5IG9mIGRpc3RyaWJ1dGlvblxuICAgICAgICBjb25zdCBQID0gdGhpcy56ZXJvcyhuICogbik7IC8vIHRlbXBvcmFyeSBwcm9iYWJpbGl0eSBtYXRyaXhcbiAgICAgICAgY29uc3QgcHJvdyA9IHRoaXMuemVyb3Mobik7IC8vIGEgdGVtcG9yYXJ5IHN0b3JhZ2UgY29tcGFydG1lbnRcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBiZXRhbWluID0gLUluZmluaXR5O1xuICAgICAgICAgICAgbGV0IGJldGFtYXggPSBJbmZpbml0eTtcbiAgICAgICAgICAgIGxldCBiZXRhID0gMTsgLy8gaW5pdGlhbCB2YWx1ZSBvZiBwcmVjaXNpb25cbiAgICAgICAgICAgIGxldCBkb25lID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBtYXh0cmllcyA9IDUwO1xuICAgICAgICAgICAgLy8gcGVyZm9ybSBiaW5hcnkgc2VhcmNoIHRvIGZpbmQgYSBzdWl0YWJsZSBwcmVjaXNpb24gYmV0YVxuICAgICAgICAgICAgLy8gc28gdGhhdCB0aGUgZW50cm9weSBvZiB0aGUgZGlzdHJpYnV0aW9uIGlzIGFwcHJvcHJpYXRlXG4gICAgICAgICAgICBsZXQgbnVtID0gMDtcbiAgICAgICAgICAgIHdoaWxlICghZG9uZSkge1xuICAgICAgICAgICAgICAgIC8vZGVidWdnZXI7XG4gICAgICAgICAgICAgICAgLy8gY29tcHV0ZSBlbnRyb3B5IGFuZCBrZXJuZWwgcm93IHdpdGggYmV0YSBwcmVjaXNpb25cbiAgICAgICAgICAgICAgICBsZXQgcHN1bSA9IDAuMDtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG47IGorKykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcGogPSBNYXRoLmV4cCgtRFtpICogbiArIGpdICogYmV0YSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpID09PSBqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwaiA9IDA7XG4gICAgICAgICAgICAgICAgICAgIH0gLy8gd2UgZG9udCBjYXJlIGFib3V0IGRpYWdvbmFsc1xuICAgICAgICAgICAgICAgICAgICBwcm93W2pdID0gcGo7XG4gICAgICAgICAgICAgICAgICAgIHBzdW0gKz0gcGo7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIG5vcm1hbGl6ZSBwIGFuZCBjb21wdXRlIGVudHJvcHlcbiAgICAgICAgICAgICAgICBsZXQgbkhlcmUgPSAwLjA7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBuOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBqO1xuICAgICAgICAgICAgICAgICAgICBpZiAocHN1bSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGogPSAwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGogPSBwcm93W2pdIC8gcHN1bTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBwcm93W2pdID0gcGo7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwaiA+IDFlLTcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5IZXJlIC09IHBqICogTWF0aC5sb2cocGopO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGFkanVzdCBiZXRhIGJhc2VkIG9uIHJlc3VsdFxuICAgICAgICAgICAgICAgIGlmIChuSGVyZSA+IGhUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZW50cm9weSB3YXMgdG9vIGhpZ2ggKGRpc3RyaWJ1dGlvbiB0b28gZGlmZnVzZSlcbiAgICAgICAgICAgICAgICAgICAgLy8gc28gd2UgbmVlZCB0byBpbmNyZWFzZSB0aGUgcHJlY2lzaW9uIGZvciBtb3JlIHBlYWt5IGRpc3RyaWJ1dGlvblxuICAgICAgICAgICAgICAgICAgICBiZXRhbWluID0gYmV0YTsgLy8gbW92ZSB1cCB0aGUgYm91bmRzXG4gICAgICAgICAgICAgICAgICAgIGlmIChiZXRhbWF4ID09PSBJbmZpbml0eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYmV0YSA9IGJldGEgKiAyO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYmV0YSA9IChiZXRhICsgYmV0YW1heCkgLyAyO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBjb252ZXJzZSBjYXNlLiBtYWtlIGRpc3RydWJ0aW9uIGxlc3MgcGVha3lcbiAgICAgICAgICAgICAgICAgICAgYmV0YW1heCA9IGJldGE7XG4gICAgICAgICAgICAgICAgICAgIGlmIChiZXRhbWluID09PSAtSW5maW5pdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJldGEgPSBiZXRhIC8gMjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJldGEgPSAoYmV0YSArIGJldGFtaW4pIC8gMjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBzdG9wcGluZyBjb25kaXRpb25zOiB0b28gbWFueSB0cmllcyBvciBnb3QgYSBnb29kIHByZWNpc2lvblxuICAgICAgICAgICAgICAgIG51bSsrO1xuICAgICAgICAgICAgICAgIGlmIChNYXRoLmFicyhuSGVyZSAtIGhUYXJnZXQpIDwgdG9sKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobnVtID49IG1heHRyaWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdkYXRhIHBvaW50ICcgKyBpICsgJyBnZXRzIHByZWNpc2lvbiAnICsgYmV0YSArICcgYWZ0ZXIgJyArIG51bSArICcgYmluYXJ5IHNlYXJjaCBzdGVwcy4nKTtcbiAgICAgICAgICAgIC8vIGNvcHkgb3ZlciB0aGUgZmluYWwgcHJvdyB0byBQIGF0IHJvdyBpXG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG47IGorKykge1xuICAgICAgICAgICAgICAgIFBbaSAqIG4gKyBqXSA9IHByb3dbal07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gLy8gZW5kIGxvb3Agb3ZlciBleGFtcGxlcyBpXG4gICAgICAgIC8vIHN5bW1ldHJpemUgUCBhbmQgbm9ybWFsaXplIGl0IHRvIHN1bSB0byAxIG92ZXIgYWxsIGlqXG4gICAgICAgIGNvbnN0IHBPdXQgPSB0aGlzLnplcm9zKG4gKiBuKTtcbiAgICAgICAgY29uc3QgTjIgPSBuICogMjtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbjsgaisrKSB7XG4gICAgICAgICAgICAgICAgcE91dFtpICogbiArIGpdID0gTWF0aC5tYXgoKFBbaSAqIG4gKyBqXSArIFBbaiAqIG4gKyBpXSkgLyBOMiwgMWUtMTAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcE91dDtcbiAgICB9XG4gICAgLy8gaGVscGVyIGZ1bmN0aW9uXG4gICAgc2lnbih4KSB7IHJldHVybiB4ID4gMCA/IDEgOiB4IDwgMCA/IC0xIDogMDsgfVxuICAgIC8vIHRoaXMgZnVuY3Rpb24gdGFrZXMgYSBzZXQgb2YgaGlnaC1kaW1lbnNpb25hbCBwb2ludHNcbiAgICAvLyBhbmQgY3JlYXRlcyBtYXRyaXggUCBmcm9tIHRoZW0gdXNpbmcgZ2F1c3NpYW4ga2VybmVsXG4gICAgaW5pdERhdGFSYXcoWCkge1xuICAgICAgICBjb25zdCBOID0gWC5sZW5ndGg7XG4gICAgICAgIGNvbnN0IEQgPSBYWzBdLmxlbmd0aDtcbiAgICAgICAgdGhpcy5hc3NlcnQoTiA+IDAsICcgWCBpcyBlbXB0eT8gWW91IG11c3QgaGF2ZSBzb21lIGRhdGEhJyk7XG4gICAgICAgIHRoaXMuYXNzZXJ0KEQgPiAwLCAnIFhbMF0gaXMgZW1wdHk/IFdoZXJlIGlzIHRoZSBkYXRhPycpO1xuICAgICAgICBjb25zdCBkaXN0cyA9IHRoaXMueHRvZChYKTsgLy8gY29udmVydCBYIHRvIGRpc3RhbmNlcyB1c2luZyBnYXVzc2lhbiBrZXJuZWxcbiAgICAgICAgdGhpcy5QID0gdGhpcy5kMnAoZGlzdHMsIHRoaXMucGVycGxleGl0eSwgMWUtNCk7IC8vIGF0dGFjaCB0byBvYmplY3RcbiAgICAgICAgdGhpcy5OID0gTjsgLy8gYmFjayB1cCB0aGUgc2l6ZSBvZiB0aGUgZGF0YXNldFxuICAgICAgICB0aGlzLmluaXRTb2x1dGlvbigpOyAvLyByZWZyZXNoIHRoaXNcbiAgICB9XG4gICAgLy8gdGhpcyBmdW5jdGlvbiB0YWtlcyBhIGdpdmVuIGRpc3RhbmNlIG1hdHJpeCBhbmQgY3JlYXRlc1xuICAgIC8vIG1hdHJpeCBQIGZyb20gdGhlbS5cbiAgICAvLyBEIGlzIGFzc3VtZWQgdG8gYmUgcHJvdmlkZWQgYXMgYSBsaXN0IG9mIGxpc3RzLCBhbmQgc2hvdWxkIGJlIHN5bW1ldHJpY1xuICAgIGluaXREYXRhRGlzdChEKSB7XG4gICAgICAgIGNvbnN0IE4gPSBELmxlbmd0aDtcbiAgICAgICAgdGhpcy5hc3NlcnQoTiA+IDAsICcgWCBpcyBlbXB0eT8gWW91IG11c3QgaGF2ZSBzb21lIGRhdGEhJyk7XG4gICAgICAgIC8vIGNvbnZlcnQgRCB0byBhIChmYXN0KSB0eXBlZCBhcnJheSB2ZXJzaW9uXG4gICAgICAgIGNvbnN0IGRpc3RzID0gdGhpcy56ZXJvcyhOICogTik7IC8vIGFsbG9jYXRlIGNvbnRpZ3VvdXMgYXJyYXlcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBOOyBpKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IE47IGorKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGQgPSBEW2ldW2pdO1xuICAgICAgICAgICAgICAgIGRpc3RzW2kgKiBOICsgal0gPSBkO1xuICAgICAgICAgICAgICAgIGRpc3RzW2ogKiBOICsgaV0gPSBkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuUCA9IHRoaXMuZDJwKGRpc3RzLCB0aGlzLnBlcnBsZXhpdHksIDFlLTQpO1xuICAgICAgICB0aGlzLk4gPSBOO1xuICAgICAgICB0aGlzLmluaXRTb2x1dGlvbigpOyAvLyByZWZyZXNoIHRoaXNcbiAgICB9XG4gICAgLy8gKHJlKWluaXRpYWxpemVzIHRoZSBzb2x1dGlvbiB0byByYW5kb21cbiAgICBpbml0U29sdXRpb24oKSB7XG4gICAgICAgIC8vIGdlbmVyYXRlIHJhbmRvbSBzb2x1dGlvbiB0byB0LVNORVxuICAgICAgICB0aGlzLlkgPSB0aGlzLnJhbmRuMmQodGhpcy5OLCB0aGlzLmRpbSk7IC8vIHRoZSBzb2x1dGlvblxuICAgICAgICB0aGlzLmdhaW5zID0gdGhpcy5yYW5kbjJkKHRoaXMuTiwgdGhpcy5kaW0sIDEuMCk7IC8vIHN0ZXAgZ2FpbnMgdG8gYWNjZWxlcmF0ZSBwcm9ncmVzcyBpbiB1bmNoYW5naW5nIGRpcmVjdGlvbnNcbiAgICAgICAgdGhpcy55c3RlcCA9IHRoaXMucmFuZG4yZCh0aGlzLk4sIHRoaXMuZGltLCAwLjApOyAvLyBtb21lbnR1bSBhY2N1bXVsYXRvclxuICAgICAgICB0aGlzLml0ZXIgPSAwO1xuICAgIH1cbiAgICAvLyByZXR1cm4gcG9pbnRlciB0byBjdXJyZW50IHNvbHV0aW9uXG4gICAgZ2V0U29sdXRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLlk7XG4gICAgfVxuICAgIC8vIHBlcmZvcm0gYSBzaW5nbGUgc3RlcCBvZiBvcHRpbWl6YXRpb24gdG8gaW1wcm92ZSB0aGUgZW1iZWRkaW5nXG4gICAgc3RlcCgpIHtcbiAgICAgICAgdGhpcy5pdGVyICs9IDE7XG4gICAgICAgIGNvbnN0IE4gPSB0aGlzLk47XG4gICAgICAgIGNvbnN0IGNnID0gdGhpcy5jb3N0R3JhZCh0aGlzLlkpOyAvLyBldmFsdWF0ZSBncmFkaWVudFxuICAgICAgICBjb25zdCBjb3N0ID0gY2cuY29zdDtcbiAgICAgICAgY29uc3QgZ3JhZCA9IGNnLmdyYWQ7XG4gICAgICAgIC8vIHBlcmZvcm0gZ3JhZGllbnQgc3RlcFxuICAgICAgICBjb25zdCB5bWVhbiA9IHRoaXMuemVyb3ModGhpcy5kaW0pO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IE47IGkrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgZCA9IDA7IGQgPCB0aGlzLmRpbTsgZCsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ2lkID0gZ3JhZFtpXVtkXTtcbiAgICAgICAgICAgICAgICBjb25zdCBzaWQgPSB0aGlzLnlzdGVwW2ldW2RdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGdhaW5pZCA9IHRoaXMuZ2FpbnNbaV1bZF07XG4gICAgICAgICAgICAgICAgLy8gY29tcHV0ZSBnYWluIHVwZGF0ZVxuICAgICAgICAgICAgICAgIGxldCBuZXdnYWluID0gdGhpcy5zaWduKGdpZCkgPT09IHRoaXMuc2lnbihzaWQpID8gZ2FpbmlkICogMC44IDogZ2FpbmlkICsgMC4yO1xuICAgICAgICAgICAgICAgIGlmIChuZXdnYWluIDwgMC4wMSkge1xuICAgICAgICAgICAgICAgICAgICBuZXdnYWluID0gMC4wMTtcbiAgICAgICAgICAgICAgICB9IC8vIGNsYW1wXG4gICAgICAgICAgICAgICAgdGhpcy5nYWluc1tpXVtkXSA9IG5ld2dhaW47IC8vIHN0b3JlIGZvciBuZXh0IHR1cm5cbiAgICAgICAgICAgICAgICAvLyBjb21wdXRlIG1vbWVudHVtIHN0ZXAgZGlyZWN0aW9uXG4gICAgICAgICAgICAgICAgY29uc3QgbW9tdmFsID0gdGhpcy5pdGVyIDwgMjUwID8gMC41IDogMC44O1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld3NpZCA9IG1vbXZhbCAqIHNpZCAtIHRoaXMuZXBzaWxvbiAqIG5ld2dhaW4gKiBncmFkW2ldW2RdO1xuICAgICAgICAgICAgICAgIHRoaXMueXN0ZXBbaV1bZF0gPSBuZXdzaWQ7IC8vIHJlbWVtYmVyIHRoZSBzdGVwIHdlIHRvb2tcbiAgICAgICAgICAgICAgICAvLyBzdGVwIVxuICAgICAgICAgICAgICAgIHRoaXMuWVtpXVtkXSArPSBuZXdzaWQ7XG4gICAgICAgICAgICAgICAgeW1lYW5bZF0gKz0gdGhpcy5ZW2ldW2RdOyAvLyBhY2N1bXVsYXRlIG1lYW4gc28gdGhhdCB3ZSBjYW4gY2VudGVyIGxhdGVyXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVwcm9qZWN0IFkgdG8gYmUgemVybyBtZWFuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTjsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBkID0gMDsgZCA8IHRoaXMuZGltOyBkKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLllbaV1bZF0gLT0geW1lYW5bZF0gLyBOO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vaWYodGhpcy5pdGVyJTEwMD09PTApIGNvbnNvbGUubG9nKCdpdGVyICcgKyB0aGlzLml0ZXIgKyAnLCBjb3N0OiAnICsgY29zdCk7XG4gICAgICAgIHJldHVybiBjb3N0OyAvLyByZXR1cm4gY3VycmVudCBjb3N0XG4gICAgfVxuICAgIC8vIGZvciBkZWJ1Z2dpbmc6IGdyYWRpZW50IGNoZWNrXG4gICAgZGVidWdHcmFkKCkge1xuICAgICAgICBjb25zdCBOID0gdGhpcy5OO1xuICAgICAgICBjb25zdCBjZyA9IHRoaXMuY29zdEdyYWQodGhpcy5ZKTsgLy8gZXZhbHVhdGUgZ3JhZGllbnRcbiAgICAgICAgY29uc3QgY29zdCA9IGNnLmNvc3Q7XG4gICAgICAgIGNvbnN0IGdyYWQgPSBjZy5ncmFkO1xuICAgICAgICBjb25zdCBlID0gMWUtNTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBOOyBpKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGQgPSAwOyBkIDwgdGhpcy5kaW07IGQrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHlvbGQgPSB0aGlzLllbaV1bZF07XG4gICAgICAgICAgICAgICAgdGhpcy5ZW2ldW2RdID0geW9sZCArIGU7XG4gICAgICAgICAgICAgICAgY29uc3QgY2cwID0gdGhpcy5jb3N0R3JhZCh0aGlzLlkpO1xuICAgICAgICAgICAgICAgIHRoaXMuWVtpXVtkXSA9IHlvbGQgLSBlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNnMSA9IHRoaXMuY29zdEdyYWQodGhpcy5ZKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhbmFseXRpYyA9IGdyYWRbaV1bZF07XG4gICAgICAgICAgICAgICAgY29uc3QgbnVtZXJpY2FsID0gKGNnMC5jb3N0IC0gY2cxLmNvc3QpIC8gKDIgKiBlKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhpICsgJywnICsgZCArICc6IGdyYWRjaGVjayBhbmFseXRpYzogJyArIGFuYWx5dGljICsgJyB2cy4gbnVtZXJpY2FsOiAnICsgbnVtZXJpY2FsKTtcbiAgICAgICAgICAgICAgICB0aGlzLllbaV1bZF0gPSB5b2xkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIHJldHVybiBjb3N0IGFuZCBncmFkaWVudCwgZ2l2ZW4gYW4gYXJyYW5nZW1lbnRcbiAgICBjb3N0R3JhZChZKSB7XG4gICAgICAgIGNvbnN0IE4gPSB0aGlzLk47XG4gICAgICAgIGNvbnN0IGRpbSA9IHRoaXMuZGltOyAvLyBkaW0gb2Ygb3V0cHV0IHNwYWNlXG4gICAgICAgIGNvbnN0IFAgPSB0aGlzLlA7XG4gICAgICAgIGNvbnN0IHBtdWwgPSB0aGlzLml0ZXIgPCAxMDAgPyA0IDogMTsgLy8gdHJpY2sgdGhhdCBoZWxwcyB3aXRoIGxvY2FsIG9wdGltYVxuICAgICAgICAvLyBjb21wdXRlIGN1cnJlbnQgUSBkaXN0cmlidXRpb24sIHVubm9ybWFsaXplZCBmaXJzdFxuICAgICAgICBjb25zdCBxdUFyciA9IHRoaXMuemVyb3MoTiAqIE4pO1xuICAgICAgICBsZXQgcXN1bSA9IDAuMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBOOyBpKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IE47IGorKykge1xuICAgICAgICAgICAgICAgIGxldCBkc3VtID0gMC4wO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGQgPSAwOyBkIDwgZGltOyBkKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGhlcmUgPSBZW2ldW2RdIC0gWVtqXVtkXTtcbiAgICAgICAgICAgICAgICAgICAgZHN1bSArPSBkaGVyZSAqIGRoZXJlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBxdSA9IDEuMCAvICgxLjAgKyBkc3VtKTsgLy8gU3R1ZGVudCB0LWRpc3RyaWJ1dGlvblxuICAgICAgICAgICAgICAgIHF1QXJyW2kgKiBOICsgal0gPSBxdTtcbiAgICAgICAgICAgICAgICBxdUFycltqICogTiArIGldID0gcXU7XG4gICAgICAgICAgICAgICAgcXN1bSArPSAyICogcXU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gbm9ybWFsaXplIFEgZGlzdHJpYnV0aW9uIHRvIHN1bSB0byAxXG4gICAgICAgIGNvbnN0IE5OID0gTiAqIE47XG4gICAgICAgIGNvbnN0IFEgPSB0aGlzLnplcm9zKE5OKTtcbiAgICAgICAgZm9yIChsZXQgcSA9IDA7IHEgPCBOTjsgcSsrKSB7XG4gICAgICAgICAgICBRW3FdID0gTWF0aC5tYXgocXVBcnJbcV0gLyBxc3VtLCAxZS0xMDApO1xuICAgICAgICB9XG4gICAgICAgIGxldCBjb3N0ID0gMC4wO1xuICAgICAgICBjb25zdCBncmFkID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTjsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBnc3VtID0gbmV3IEFycmF5KGRpbSk7IC8vIGluaXQgZ3JhZCBmb3IgcG9pbnQgaVxuICAgICAgICAgICAgZm9yIChsZXQgZCA9IDA7IGQgPCBkaW07IGQrKykge1xuICAgICAgICAgICAgICAgIGdzdW1bZF0gPSAwLjA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IE47IGorKykge1xuICAgICAgICAgICAgICAgIGNvc3QgKz0gLVBbaSAqIE4gKyBqXSAqIE1hdGgubG9nKFFbaSAqIE4gKyBqXSk7IC8vIGFjY3VtdWxhdGUgY29zdCAodGhlIG5vbi1jb25zdGFudCBwb3J0aW9uIGF0IGxlYXN0Li4uKVxuICAgICAgICAgICAgICAgIGNvbnN0IHByZW11bHQgPSA0ICogKHBtdWwgKiBQW2kgKiBOICsgal0gLSBRW2kgKiBOICsgal0pICogcXVBcnJbaSAqIE4gKyBqXTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBkID0gMDsgZCA8IGRpbTsgZCsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGdzdW1bZF0gKz0gcHJlbXVsdCAqIChZW2ldW2RdIC0gWVtqXVtkXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ3JhZC5wdXNoKGdzdW0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGNvc3QsIGdyYWQgfTtcbiAgICB9XG59XG5leHBvcnRzLlRTTkUgPSBUU05FO1xuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiJdLCJuYW1lcyI6WyJfX2F3YWl0ZXIiLCJleHBvcnRzIiwidHNuZV8xIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiVFNORSIsInZhbHVlIiwiY29uc3RydWN0b3IiLCJvcHQiLCJ0aGlzIiwicmV0dXJuViIsInZWYWx1ZSIsIml0ZXIiLCJwZXJwbGV4aXR5IiwiZ2V0b3B0IiwiZGltIiwiZXBzaWxvbiIsImFzc2VydCIsImNvbmRpdGlvbiIsIm1lc3NhZ2UiLCJmaWVsZCIsImRlZmF1bHR2YWwiLCJoYXNPd25Qcm9wZXJ0eSIsImdhdXNzUmFuZG9tIiwidSIsIk1hdGgiLCJyYW5kb20iLCJ2IiwiciIsImMiLCJzcXJ0IiwibG9nIiwicmFuZG4iLCJtdSIsInN0ZCIsInplcm9zIiwibiIsImlzTmFOIiwiQXJyYXlCdWZmZXIiLCJhcnIiLCJBcnJheSIsImkiLCJGbG9hdDY0QXJyYXkiLCJyYW5kbjJkIiwiZCIsInMiLCJ1c2VzIiwieCIsInhoZXJlIiwiaiIsInB1c2giLCJMMiIsIngxIiwieDIiLCJEIiwibGVuZ3RoIiwieDFpIiwieDJpIiwieHRvZCIsIlgiLCJOIiwiZGlzdCIsImQycCIsInRvbCIsIm5mIiwiZmxvb3IiLCJoVGFyZ2V0IiwiUCIsInByb3ciLCJiZXRhbWluIiwiYmV0YW1heCIsIkluZmluaXR5IiwiYmV0YSIsImRvbmUiLCJtYXh0cmllcyIsIm51bSIsInBzdW0iLCJwaiIsImV4cCIsIm5IZXJlIiwiYWJzIiwicE91dCIsIk4yIiwibWF4Iiwic2lnbiIsImluaXREYXRhUmF3IiwiZGlzdHMiLCJpbml0U29sdXRpb24iLCJpbml0RGF0YURpc3QiLCJZIiwiZ2FpbnMiLCJ5c3RlcCIsImdldFNvbHV0aW9uIiwic3RlcCIsImNnIiwiY29zdEdyYWQiLCJjb3N0IiwiZ3JhZCIsInltZWFuIiwiZ2lkIiwic2lkIiwiZ2FpbmlkIiwibmV3Z2FpbiIsIm5ld3NpZCIsImRlYnVnR3JhZCIsImUiLCJ5b2xkIiwiY2cwIiwiY2cxIiwiYW5hbHl0aWMiLCJudW1lcmljYWwiLCJjb25zb2xlIiwicG11bCIsInF1QXJyIiwicXN1bSIsImRzdW0iLCJkaGVyZSIsInF1IiwiTk4iLCJRIiwicSIsImdzdW0iLCJwcmVtdWx0IiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiY2FjaGVkTW9kdWxlIiwidW5kZWZpbmVkIiwibW9kdWxlIiwiX193ZWJwYWNrX21vZHVsZXNfXyIsInRoaXNBcmciLCJfYXJndW1lbnRzIiwiZ2VuZXJhdG9yIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJuZXh0IiwicmVqZWN0ZWQiLCJyZXN1bHQiLCJ0aGVuIiwiYXBwbHkiLCJvbm1lc3NhZ2UiLCJldnQiLCJ0c25lIiwiZGF0YSIsIm9wdGlvbnMiLCJsZWFybmluZ1JhdGUiLCJjb21wb25lbnRzIiwiaXRlckNvdW50IiwiaXRlcmF0aW9ucyIsInBvc3RNZXNzYWdlIl0sInNvdXJjZVJvb3QiOiIifQ==
|