@bitgo-beta/statics 15.1.1-beta.138 → 15.1.1-beta.1380

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.
Files changed (105) hide show
  1. package/dist/src/account.d.ts +897 -73
  2. package/dist/src/account.d.ts.map +1 -1
  3. package/dist/src/account.js +1407 -149
  4. package/dist/src/ada.d.ts.map +1 -1
  5. package/dist/src/ada.js +7 -3
  6. package/dist/src/allCoinsAndTokens.d.ts +2 -0
  7. package/dist/src/allCoinsAndTokens.d.ts.map +1 -0
  8. package/dist/src/allCoinsAndTokens.js +948 -0
  9. package/dist/src/avaxp.d.ts.map +1 -1
  10. package/dist/src/avaxp.js +8 -3
  11. package/dist/src/base.d.ts +1932 -48
  12. package/dist/src/base.d.ts.map +1 -1
  13. package/dist/src/base.js +2013 -58
  14. package/dist/src/canton.d.ts +34 -0
  15. package/dist/src/canton.d.ts.map +1 -0
  16. package/dist/src/canton.js +51 -0
  17. package/dist/src/coinFeatures.d.ts +108 -0
  18. package/dist/src/coinFeatures.d.ts.map +1 -0
  19. package/dist/src/coinFeatures.js +674 -0
  20. package/dist/src/coins/adaTokens.d.ts +2 -0
  21. package/dist/src/coins/adaTokens.d.ts.map +1 -0
  22. package/dist/src/coins/adaTokens.js +17 -0
  23. package/dist/src/coins/avaxTokens.d.ts +2 -0
  24. package/dist/src/coins/avaxTokens.d.ts.map +1 -0
  25. package/dist/src/coins/avaxTokens.js +125 -0
  26. package/dist/src/coins/botOfcTokens.d.ts +2 -0
  27. package/dist/src/coins/botOfcTokens.d.ts.map +1 -0
  28. package/dist/src/coins/botOfcTokens.js +5 -0
  29. package/dist/src/coins/botTokens.d.ts +3 -0
  30. package/dist/src/coins/botTokens.d.ts.map +1 -0
  31. package/dist/src/coins/botTokens.js +43 -0
  32. package/dist/src/coins/bscTokens.d.ts +2 -0
  33. package/dist/src/coins/bscTokens.d.ts.map +1 -0
  34. package/dist/src/coins/bscTokens.js +187 -0
  35. package/dist/src/coins/cosmosTokens.d.ts +2 -0
  36. package/dist/src/coins/cosmosTokens.d.ts.map +1 -0
  37. package/dist/src/coins/cosmosTokens.js +12 -0
  38. package/dist/src/coins/erc20Coins.d.ts +2 -0
  39. package/dist/src/coins/erc20Coins.d.ts.map +1 -0
  40. package/dist/src/coins/erc20Coins.js +1934 -0
  41. package/dist/src/coins/jettonTokens.d.ts +2 -0
  42. package/dist/src/coins/jettonTokens.d.ts.map +1 -0
  43. package/dist/src/coins/jettonTokens.js +13 -0
  44. package/dist/src/coins/nep141Tokens.d.ts +2 -0
  45. package/dist/src/coins/nep141Tokens.d.ts.map +1 -0
  46. package/dist/src/coins/nep141Tokens.js +16 -0
  47. package/dist/src/coins/ofcCoins.d.ts +2 -0
  48. package/dist/src/coins/ofcCoins.d.ts.map +1 -0
  49. package/dist/src/coins/ofcCoins.js +782 -0
  50. package/dist/src/coins/ofcErc20Coins.d.ts +3 -0
  51. package/dist/src/coins/ofcErc20Coins.d.ts.map +1 -0
  52. package/dist/src/coins/ofcErc20Coins.js +1589 -0
  53. package/dist/src/coins/polygonTokens.d.ts +2 -0
  54. package/dist/src/coins/polygonTokens.d.ts.map +1 -0
  55. package/dist/src/coins/polygonTokens.js +157 -0
  56. package/dist/src/coins/polyxTokens.d.ts +2 -0
  57. package/dist/src/coins/polyxTokens.d.ts.map +1 -0
  58. package/dist/src/coins/polyxTokens.js +21 -0
  59. package/dist/src/coins/sip10Tokens.d.ts +2 -0
  60. package/dist/src/coins/sip10Tokens.d.ts.map +1 -0
  61. package/dist/src/coins/sip10Tokens.js +25 -0
  62. package/dist/src/coins/solTokens.d.ts +3 -0
  63. package/dist/src/coins/solTokens.d.ts.map +1 -0
  64. package/dist/src/coins/solTokens.js +421 -0
  65. package/dist/src/coins/vetTokens.d.ts +2 -0
  66. package/dist/src/coins/vetTokens.d.ts.map +1 -0
  67. package/dist/src/coins/vetTokens.js +11 -0
  68. package/dist/src/coins.d.ts +11 -1
  69. package/dist/src/coins.d.ts.map +1 -1
  70. package/dist/src/coins.js +334 -1622
  71. package/dist/src/constants.d.ts +1 -0
  72. package/dist/src/constants.d.ts.map +1 -1
  73. package/dist/src/constants.js +3 -2
  74. package/dist/src/flrp.d.ts +40 -0
  75. package/dist/src/flrp.d.ts.map +1 -0
  76. package/dist/src/flrp.js +65 -0
  77. package/dist/src/index.d.ts +3 -1
  78. package/dist/src/index.d.ts.map +1 -1
  79. package/dist/src/index.js +26 -3
  80. package/dist/src/lightning.d.ts +43 -0
  81. package/dist/src/lightning.d.ts.map +1 -0
  82. package/dist/src/lightning.js +60 -0
  83. package/dist/src/map.d.ts +10 -0
  84. package/dist/src/map.d.ts.map +1 -1
  85. package/dist/src/map.js +144 -17
  86. package/dist/src/networkFeatureMapForTokens.d.ts +3 -0
  87. package/dist/src/networkFeatureMapForTokens.d.ts.map +1 -0
  88. package/dist/src/networkFeatureMapForTokens.js +31 -0
  89. package/dist/src/networks.d.ts +1224 -15
  90. package/dist/src/networks.d.ts.map +1 -1
  91. package/dist/src/networks.js +1546 -84
  92. package/dist/src/ofc.d.ts +597 -3
  93. package/dist/src/ofc.d.ts.map +1 -1
  94. package/dist/src/ofc.js +1419 -28
  95. package/dist/src/tokenConfig.d.ts +268 -14
  96. package/dist/src/tokenConfig.d.ts.map +1 -1
  97. package/dist/src/tokenConfig.js +998 -244
  98. package/dist/src/utxo.d.ts +3 -1
  99. package/dist/src/utxo.d.ts.map +1 -1
  100. package/dist/src/utxo.js +84 -3
  101. package/dist/tsconfig.tsbuildinfo +1 -1
  102. package/package.json +6 -3
  103. package/.mocharc.js +0 -10
  104. package/.prettierignore +0 -2
  105. package/CHANGELOG.md +0 -838
@@ -1,313 +1,961 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.testnetTokens = exports.mainnetTokens = exports.tokens = exports.formattedAlgoTokens = exports.ethGasConfigs = void 0;
3
+ exports.testnetTokens = exports.mainnetTokens = exports.formattedAlgoTokens = exports.tokens = exports.getFormattedTokens = exports.getFormattedAlgoTokens = exports.ethGasConfigs = void 0;
4
+ exports.getFormattedTokenConfigForCoin = getFormattedTokenConfigForCoin;
4
5
  const account_1 = require("./account");
5
6
  const base_1 = require("./base");
6
7
  const coins_1 = require("./coins");
7
8
  const networks_1 = require("./networks");
8
9
  const ofc_1 = require("./ofc");
10
+ function getErc20TokenConfig(coin) {
11
+ let baseCoin;
12
+ switch (coin.network.name) {
13
+ case networks_1.Networks.main.ethereum.name:
14
+ baseCoin = 'eth';
15
+ break;
16
+ case networks_1.Networks.test.kovan.name:
17
+ baseCoin = 'teth';
18
+ break;
19
+ case networks_1.Networks.test.goerli.name:
20
+ baseCoin = 'gteth';
21
+ break;
22
+ case networks_1.Networks.test.holesky.name:
23
+ case networks_1.Networks.test.hoodi.name:
24
+ baseCoin = 'hteth';
25
+ break;
26
+ default:
27
+ throw new Error(`Erc20 token ${coin.name} has an unsupported network`);
28
+ }
29
+ return {
30
+ type: coin.name,
31
+ coin: baseCoin,
32
+ network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
33
+ name: coin.fullName,
34
+ tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
35
+ decimalPlaces: coin.decimalPlaces,
36
+ };
37
+ }
9
38
  // Get the list of ERC-20 tokens from statics and format it properly
10
- const formattedErc20Tokens = coins_1.coins.reduce((acc, coin) => {
39
+ const getFormattedErc20Tokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
11
40
  if (coin instanceof account_1.Erc20Coin) {
12
- let baseCoin;
13
- switch (coin.network) {
14
- case networks_1.Networks.main.ethereum:
15
- baseCoin = 'eth';
16
- break;
17
- case networks_1.Networks.test.kovan:
18
- baseCoin = 'teth';
19
- break;
20
- case networks_1.Networks.test.goerli:
21
- baseCoin = 'gteth';
22
- break;
23
- default:
24
- throw new Error(`Erc20 token ${coin.name} has an unsupported network`);
25
- }
26
- acc.push({
27
- type: coin.name,
28
- coin: baseCoin,
29
- network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
30
- name: coin.fullName,
31
- tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
32
- decimalPlaces: coin.decimalPlaces,
33
- });
41
+ acc.push(getErc20TokenConfig(coin));
34
42
  }
35
43
  return acc;
36
44
  }, []);
37
45
  exports.ethGasConfigs = {
38
- minimumGasPrice: 1000000000,
39
- defaultGasPrice: 20000000000,
40
- maximumGasPrice: 2500000000000,
41
- defaultGasLimit: 500000,
42
- defaultGasLimitTokenSend: 1000000,
43
- minimumGasLimit: 30000,
46
+ minimumGasPrice: 1000000000, // minimum gas price a user can provide (1 Gwei)
47
+ defaultGasPrice: 20000000000, // default gas price if estimation fails (20 Gwei)
48
+ maximumGasPrice: 2500000000000, // minimum gas price a user can provide (2500 Gwei)
49
+ defaultGasLimit: 500000, // Default gas limit we set for contract send
50
+ defaultGasLimitTokenSend: 1000000, // Default gas limit we set for token send
51
+ minimumGasLimit: 30000, // minimum gas limit a user can set for a send
44
52
  maximumGasLimit: 20000000, // Customers cannot set gas limits beyond this amount
53
+ newEthLikeCoinsMinGasLimit: 400000, // minimum gas limit a user can set for a send for eth like coins like arbitrum, optimism, etc
54
+ opethGasL1Fees: 1000000000000000, // Buffer for opeth L1 gas fees
45
55
  };
56
+ function getStellarTokenConfig(coin) {
57
+ return {
58
+ type: coin.name,
59
+ coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'xlm' : 'txlm',
60
+ network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
61
+ name: coin.fullName,
62
+ decimalPlaces: coin.decimalPlaces,
63
+ };
64
+ }
46
65
  // Get the list of Stellar tokens from statics and format it properly
47
- const formattedStellarTokens = coins_1.coins.reduce((acc, coin) => {
66
+ const getFormattedStellarTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
48
67
  if (coin instanceof account_1.StellarCoin) {
49
- acc.push({
50
- type: coin.name,
51
- coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'xlm' : 'txlm',
52
- network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
53
- name: coin.fullName,
54
- decimalPlaces: coin.decimalPlaces,
55
- });
68
+ acc.push(getStellarTokenConfig(coin));
56
69
  }
57
70
  return acc;
58
71
  }, []);
72
+ function getOfcTokenConfig(coin) {
73
+ return {
74
+ type: coin.name,
75
+ coin: 'ofc',
76
+ backingCoin: coin.asset,
77
+ name: coin.fullName,
78
+ decimalPlaces: coin.decimalPlaces,
79
+ isFiat: coin.kind === base_1.CoinKind.FIAT,
80
+ };
81
+ }
59
82
  // Get the list of OFC tokens from statics and format it properly
60
- const formattedOfcCoins = coins_1.coins.reduce((acc, coin) => {
83
+ const getFormattedOfcCoins = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
61
84
  if (coin instanceof ofc_1.OfcCoin) {
62
- acc.push({
63
- type: coin.name,
64
- coin: 'ofc',
65
- backingCoin: coin.asset,
66
- name: coin.fullName,
67
- decimalPlaces: coin.decimalPlaces,
68
- isFiat: coin.kind === base_1.CoinKind.FIAT,
69
- });
85
+ acc.push(getOfcTokenConfig(coin));
70
86
  }
71
87
  return acc;
72
88
  }, []);
73
- const formattedCeloTokens = coins_1.coins.reduce((acc, coin) => {
89
+ function getCeloTokenConfig(coin) {
90
+ return {
91
+ type: coin.name,
92
+ coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'celo' : 'tcelo',
93
+ network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
94
+ name: coin.fullName,
95
+ tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
96
+ decimalPlaces: coin.decimalPlaces,
97
+ };
98
+ }
99
+ const getFormattedCeloTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
74
100
  if (coin instanceof account_1.CeloCoin) {
75
- acc.push({
76
- type: coin.name,
77
- coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'celo' : 'tcelo',
78
- network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
79
- name: coin.fullName,
80
- tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
81
- decimalPlaces: coin.decimalPlaces,
82
- });
101
+ acc.push(getCeloTokenConfig(coin));
83
102
  }
84
103
  return acc;
85
104
  }, []);
86
- const formattedBscTokens = coins_1.coins.reduce((acc, coin) => {
105
+ function getBscTokenConfig(coin) {
106
+ return {
107
+ type: coin.name,
108
+ coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'bsc' : 'tbsc',
109
+ network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
110
+ name: coin.fullName,
111
+ tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
112
+ decimalPlaces: coin.decimalPlaces,
113
+ };
114
+ }
115
+ const getFormattedBscTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
87
116
  if (coin instanceof account_1.BscCoin) {
88
- acc.push({
89
- type: coin.name,
90
- coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'bsc' : 'tbsc',
91
- network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
92
- name: coin.fullName,
93
- tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
94
- decimalPlaces: coin.decimalPlaces,
95
- });
117
+ acc.push(getBscTokenConfig(coin));
96
118
  }
97
119
  return acc;
98
120
  }, []);
99
- const formattedEosTokens = coins_1.coins.reduce((acc, coin) => {
121
+ function getEosTokenConfig(coin) {
122
+ return {
123
+ type: coin.name,
124
+ coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'eos' : 'teos',
125
+ network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
126
+ name: coin.fullName,
127
+ tokenContractAddress: coin.contractName.toString().toLowerCase(),
128
+ decimalPlaces: coin.decimalPlaces,
129
+ contractName: coin.contractName,
130
+ contractAddress: coin.contractAddress,
131
+ };
132
+ }
133
+ const getFormattedEosTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
100
134
  if (coin instanceof account_1.EosCoin) {
101
- acc.push({
102
- type: coin.name,
103
- coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'eos' : 'teos',
104
- network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
105
- name: coin.fullName,
106
- tokenContractAddress: coin.contractName.toString().toLowerCase(),
107
- decimalPlaces: coin.decimalPlaces,
108
- });
135
+ acc.push(getEosTokenConfig(coin));
109
136
  }
110
137
  return acc;
111
138
  }, []);
112
- const formattedAvaxCTokens = coins_1.coins.reduce((acc, coin) => {
139
+ function getAvaxCTokenConfig(coin) {
140
+ return {
141
+ type: coin.name,
142
+ coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'avaxc' : 'tavaxc',
143
+ network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
144
+ name: coin.fullName,
145
+ tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
146
+ decimalPlaces: coin.decimalPlaces,
147
+ };
148
+ }
149
+ const getFormattedAvaxCTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
113
150
  if (coin instanceof account_1.AvaxERC20Token) {
114
- acc.push({
115
- type: coin.name,
116
- coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'avaxc' : 'tavaxc',
117
- network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
118
- name: coin.fullName,
119
- tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
120
- decimalPlaces: coin.decimalPlaces,
121
- });
151
+ acc.push(getAvaxCTokenConfig(coin));
122
152
  }
123
153
  return acc;
124
154
  }, []);
125
- const formattedPolygonTokens = coins_1.coins.reduce((acc, coin) => {
155
+ function getPolygonTokenConfig(coin) {
156
+ return {
157
+ type: coin.name,
158
+ coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'polygon' : 'tpolygon',
159
+ network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
160
+ name: coin.fullName,
161
+ tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
162
+ decimalPlaces: coin.decimalPlaces,
163
+ };
164
+ }
165
+ const getFormattedPolygonTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
126
166
  if (coin instanceof account_1.PolygonERC20Token ||
127
167
  ((coin instanceof account_1.Erc721Coin || coin instanceof account_1.Erc1155Coin) && coin.family === base_1.CoinFamily.POLYGON)) {
128
- acc.push({
129
- type: coin.name,
130
- coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'polygon' : 'tpolygon',
131
- network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
132
- name: coin.fullName,
133
- tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
134
- decimalPlaces: coin.decimalPlaces,
135
- });
168
+ acc.push(getPolygonTokenConfig(coin));
169
+ }
170
+ return acc;
171
+ }, []);
172
+ function getSoneiumTokenConfig(coin) {
173
+ return {
174
+ type: coin.name,
175
+ coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'soneium' : 'tsoneium',
176
+ network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
177
+ name: coin.fullName,
178
+ tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
179
+ decimalPlaces: coin.decimalPlaces,
180
+ };
181
+ }
182
+ const getFormattedSoneiumTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
183
+ if ((coin instanceof account_1.Erc721Coin || coin instanceof account_1.Erc1155Coin) && coin.family === base_1.CoinFamily.SONEIUM) {
184
+ acc.push(getSoneiumTokenConfig(coin));
185
+ }
186
+ return acc;
187
+ }, []);
188
+ function getErc721TokenConfig(coin) {
189
+ return {
190
+ type: coin.name,
191
+ coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'eth' : 'hteth',
192
+ network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
193
+ name: coin.fullName,
194
+ tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
195
+ decimalPlaces: coin.decimalPlaces,
196
+ };
197
+ }
198
+ const getFormattedErc721Tokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
199
+ if (coin instanceof account_1.Erc721Coin && coin.family === base_1.CoinFamily.ETH) {
200
+ acc.push(getErc721TokenConfig(coin));
201
+ }
202
+ return acc;
203
+ }, []);
204
+ function getArbethTokenConfig(coin) {
205
+ return {
206
+ type: coin.name,
207
+ coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'arbeth' : 'tarbeth',
208
+ network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
209
+ name: coin.fullName,
210
+ tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
211
+ decimalPlaces: coin.decimalPlaces,
212
+ };
213
+ }
214
+ const getFormattedArbethTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
215
+ if (coin instanceof account_1.ArbethERC20Token) {
216
+ acc.push(getArbethTokenConfig(coin));
217
+ }
218
+ return acc;
219
+ }, []);
220
+ function getOpethTokenConfig(coin) {
221
+ return {
222
+ type: coin.name,
223
+ coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'opeth' : 'topeth',
224
+ network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
225
+ name: coin.fullName,
226
+ tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
227
+ decimalPlaces: coin.decimalPlaces,
228
+ };
229
+ }
230
+ const getFormattedOpethTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
231
+ if (coin instanceof account_1.OpethERC20Token) {
232
+ acc.push(getOpethTokenConfig(coin));
233
+ }
234
+ return acc;
235
+ }, []);
236
+ function getBaseethTokenConfig(coin) {
237
+ return {
238
+ type: coin.name,
239
+ coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'baseeth' : 'tbaseeth',
240
+ network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
241
+ name: coin.fullName,
242
+ tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
243
+ decimalPlaces: coin.decimalPlaces,
244
+ };
245
+ }
246
+ const getFormattedBaseethTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
247
+ if (coin instanceof account_1.EthLikeERC20Token && (coin.name.includes('baseeth:') || coin.name.includes('tbaseeth:'))) {
248
+ acc.push(getBaseethTokenConfig(coin));
249
+ }
250
+ return acc;
251
+ }, []);
252
+ function getOgTokenConfig(coin) {
253
+ return {
254
+ type: coin.name,
255
+ coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'og' : 'tog',
256
+ network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
257
+ name: coin.fullName,
258
+ tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
259
+ decimalPlaces: coin.decimalPlaces,
260
+ };
261
+ }
262
+ const getFormattedOgTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
263
+ if (coin instanceof account_1.EthLikeERC20Token && (coin.name.includes('og:') || coin.name.includes('tog:'))) {
264
+ acc.push(getOgTokenConfig(coin));
265
+ }
266
+ return acc;
267
+ }, []);
268
+ function getSeievmTokenConfig(coin) {
269
+ return {
270
+ type: coin.name,
271
+ coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'seievm' : 'tseievm',
272
+ network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
273
+ name: coin.fullName,
274
+ tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
275
+ decimalPlaces: coin.decimalPlaces,
276
+ };
277
+ }
278
+ const getFormattedSeievmTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
279
+ if (coin instanceof account_1.EthLikeERC20Token && (coin.name.includes('seievm:') || coin.name.includes('tseievm:'))) {
280
+ acc.push(getSeievmTokenConfig(coin));
281
+ }
282
+ return acc;
283
+ }, []);
284
+ function getMonadTokenConfig(coin) {
285
+ return {
286
+ type: coin.name,
287
+ coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'mon' : 'tmon',
288
+ network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
289
+ name: coin.fullName,
290
+ tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
291
+ decimalPlaces: coin.decimalPlaces,
292
+ };
293
+ }
294
+ const getFormattedMonadTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
295
+ if (coin instanceof account_1.EthLikeERC20Token && (coin.name.includes('mon:') || coin.name.includes('tmon:'))) {
296
+ acc.push(getMonadTokenConfig(coin));
297
+ }
298
+ return acc;
299
+ }, []);
300
+ function getXdcTokenConfig(coin) {
301
+ return {
302
+ type: coin.name,
303
+ coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'xdc' : 'txdc',
304
+ network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
305
+ name: coin.fullName,
306
+ tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
307
+ decimalPlaces: coin.decimalPlaces,
308
+ };
309
+ }
310
+ const getFormattedXdcTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
311
+ if (coin instanceof account_1.EthLikeERC20Token && (coin.name.includes('xdc:') || coin.name.includes('txdc:'))) {
312
+ acc.push(getXdcTokenConfig(coin));
313
+ }
314
+ return acc;
315
+ }, []);
316
+ function getFlowTokenConfig(coin) {
317
+ return {
318
+ type: coin.name,
319
+ coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'flow' : 'tflow',
320
+ network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
321
+ name: coin.fullName,
322
+ tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
323
+ decimalPlaces: coin.decimalPlaces,
324
+ };
325
+ }
326
+ const getFormattedFlowTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
327
+ if (coin instanceof account_1.EthLikeERC20Token && (coin.name.includes('flow:') || coin.name.includes('tflow:'))) {
328
+ acc.push(getFlowTokenConfig(coin));
329
+ }
330
+ return acc;
331
+ }, []);
332
+ function getLineaethTokenConfig(coin) {
333
+ return {
334
+ type: coin.name,
335
+ coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'lineaeth' : 'tlineaeth',
336
+ network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
337
+ name: coin.fullName,
338
+ tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
339
+ decimalPlaces: coin.decimalPlaces,
340
+ };
341
+ }
342
+ const getFormattedLineaethTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
343
+ if (coin instanceof account_1.EthLikeERC20Token && (coin.name.includes('lineaeth:') || coin.name.includes('tlineaeth:'))) {
344
+ acc.push(getLineaethTokenConfig(coin));
345
+ }
346
+ return acc;
347
+ }, []);
348
+ function getZkethTokenConfig(coin) {
349
+ return {
350
+ type: coin.name,
351
+ coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'zketh' : 'tzketh',
352
+ network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
353
+ name: coin.fullName,
354
+ tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
355
+ decimalPlaces: coin.decimalPlaces,
356
+ };
357
+ }
358
+ const getFormattedZkethTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
359
+ if (coin instanceof account_1.ZkethERC20Token) {
360
+ acc.push(getZkethTokenConfig(coin));
361
+ }
362
+ return acc;
363
+ }, []);
364
+ function getBeraTokenConfig(coin) {
365
+ return {
366
+ type: coin.name,
367
+ coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'bera' : 'tbera',
368
+ network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
369
+ name: coin.fullName,
370
+ tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
371
+ decimalPlaces: coin.decimalPlaces,
372
+ };
373
+ }
374
+ const getFormattedBeraTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
375
+ if (coin instanceof account_1.BeraERC20Token) {
376
+ acc.push(getBeraTokenConfig(coin));
377
+ }
378
+ return acc;
379
+ }, []);
380
+ function getCoredaoTokenConfig(coin) {
381
+ return {
382
+ type: coin.name,
383
+ coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'coredao' : 'tcoredao',
384
+ network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
385
+ name: coin.fullName,
386
+ tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
387
+ decimalPlaces: coin.decimalPlaces,
388
+ };
389
+ }
390
+ const getFormattedCoredaoTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
391
+ if (coin instanceof account_1.CoredaoERC20Token) {
392
+ acc.push(getCoredaoTokenConfig(coin));
393
+ }
394
+ return acc;
395
+ }, []);
396
+ function getWorldTokenConfig(coin) {
397
+ return {
398
+ type: coin.name,
399
+ coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'world' : 'tworld',
400
+ network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
401
+ name: coin.fullName,
402
+ tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
403
+ decimalPlaces: coin.decimalPlaces,
404
+ };
405
+ }
406
+ const getFormattedWorldTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
407
+ if (coin instanceof account_1.WorldERC20Token) {
408
+ acc.push(getWorldTokenConfig(coin));
136
409
  }
137
410
  return acc;
138
411
  }, []);
139
- const formattedSolTokens = coins_1.coins.reduce((acc, coin) => {
412
+ function getFlrTokenConfig(coin) {
413
+ return {
414
+ type: coin.name,
415
+ coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'flr' : 'tflr',
416
+ network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
417
+ name: coin.fullName,
418
+ tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
419
+ decimalPlaces: coin.decimalPlaces,
420
+ };
421
+ }
422
+ const getFormattedFlrTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
423
+ if (coin instanceof account_1.FlrERC20Token) {
424
+ acc.push(getFlrTokenConfig(coin));
425
+ }
426
+ return acc;
427
+ }, []);
428
+ function getSolTokenConfig(coin) {
429
+ return {
430
+ type: coin.name,
431
+ coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'sol' : 'tsol',
432
+ network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
433
+ name: coin.fullName,
434
+ tokenAddress: coin.tokenAddress,
435
+ decimalPlaces: coin.decimalPlaces,
436
+ contractAddress: coin.contractAddress,
437
+ };
438
+ }
439
+ const getFormattedSolTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
140
440
  if (coin instanceof account_1.SolCoin) {
141
- acc.push({
142
- type: coin.name,
143
- coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'sol' : 'tsol',
144
- network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
145
- name: coin.fullName,
146
- tokenAddress: coin.tokenAddress,
147
- decimalPlaces: coin.decimalPlaces,
148
- });
441
+ acc.push(getSolTokenConfig(coin));
149
442
  }
150
443
  return acc;
151
444
  }, []);
152
- exports.formattedAlgoTokens = coins_1.coins.reduce((acc, coin) => {
445
+ function getAlgoTokenConfig(coin) {
446
+ return {
447
+ type: coin.name,
448
+ coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'algo' : 'talgo',
449
+ alias: coin.alias,
450
+ network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
451
+ name: coin.fullName,
452
+ decimalPlaces: coin.decimalPlaces,
453
+ };
454
+ }
455
+ const getFormattedAlgoTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
153
456
  if (coin instanceof account_1.AlgoCoin) {
154
- acc.push({
155
- type: coin.name,
156
- coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'algo' : 'talgo',
157
- alias: coin.alias,
158
- network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
159
- name: coin.fullName,
160
- decimalPlaces: coin.decimalPlaces,
161
- });
457
+ acc.push(getAlgoTokenConfig(coin));
162
458
  }
163
459
  return acc;
164
460
  }, []);
165
- const formattedHbarTokens = coins_1.coins.reduce((acc, coin) => {
461
+ exports.getFormattedAlgoTokens = getFormattedAlgoTokens;
462
+ function getHbarTokenConfig(coin) {
463
+ return {
464
+ type: coin.name,
465
+ coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'hbar' : 'thbar',
466
+ network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
467
+ name: coin.fullName,
468
+ decimalPlaces: coin.decimalPlaces,
469
+ nodeAccountId: coin.nodeAccountId,
470
+ tokenId: coin.tokenId,
471
+ contractAddress: coin.contractAddress,
472
+ };
473
+ }
474
+ const getFormattedHbarTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
166
475
  if (coin instanceof account_1.HederaToken) {
167
- acc.push({
168
- type: coin.name,
169
- coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'hbar' : 'thbar',
170
- network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
171
- name: coin.fullName,
172
- decimalPlaces: coin.decimalPlaces,
173
- });
476
+ acc.push(getHbarTokenConfig(coin));
174
477
  }
175
478
  return acc;
176
479
  }, []);
177
- const formattedAdaTokens = coins_1.coins.reduce((acc, coin) => {
178
- if (coin instanceof account_1.AdaCoin) {
179
- acc.push({
180
- type: coin.name,
181
- coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'ada' : 'tada',
182
- network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
183
- name: coin.fullName,
184
- policyId: coin.policyId,
185
- assetName: coin.assetName,
186
- decimalPlaces: coin.decimalPlaces,
187
- });
480
+ function getAdaTokenConfig(coin) {
481
+ return {
482
+ type: coin.name,
483
+ coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'ada' : 'tada',
484
+ network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
485
+ name: coin.fullName,
486
+ policyId: coin.policyId,
487
+ assetName: coin.assetName,
488
+ decimalPlaces: coin.decimalPlaces,
489
+ contractAddress: coin.contractAddress,
490
+ };
491
+ }
492
+ const getFormattedAdaTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
493
+ if (coin instanceof account_1.AdaToken) {
494
+ acc.push(getAdaTokenConfig(coin));
188
495
  }
189
496
  return acc;
190
497
  }, []);
191
- const formattedTrxTokens = coins_1.coins.reduce((acc, coin) => {
498
+ function getTrxTokenConfig(coin) {
499
+ return {
500
+ type: coin.name,
501
+ coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'trx' : 'ttrx',
502
+ network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
503
+ name: coin.fullName,
504
+ tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
505
+ decimalPlaces: coin.decimalPlaces,
506
+ };
507
+ }
508
+ const getFormattedTrxTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
192
509
  if (coin instanceof account_1.TronErc20Coin) {
193
- acc.push({
194
- type: coin.name,
195
- coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'trx' : 'ttrx',
196
- network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
197
- name: coin.fullName,
198
- tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
199
- decimalPlaces: coin.decimalPlaces,
200
- });
510
+ acc.push(getTrxTokenConfig(coin));
201
511
  }
202
512
  return acc;
203
513
  }, []);
204
- const formattedXrpTokens = coins_1.coins.reduce((acc, coin) => {
514
+ function getXrpTokenConfig(coin) {
515
+ return {
516
+ type: coin.name,
517
+ coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'xrp' : 'txrp',
518
+ network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
519
+ name: coin.fullName,
520
+ decimalPlaces: coin.decimalPlaces,
521
+ issuerAddress: coin.issuerAddress,
522
+ currencyCode: coin.currencyCode,
523
+ domain: coin.domain,
524
+ contractAddress: coin.contractAddress,
525
+ };
526
+ }
527
+ const getFormattedXrpTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
205
528
  if (coin instanceof account_1.XrpCoin) {
206
- acc.push({
207
- type: coin.name,
208
- coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'xrp' : 'txrp',
209
- network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
210
- name: coin.fullName,
211
- decimalPlaces: coin.decimalPlaces,
212
- issuerAddress: coin.issuerAddress,
213
- currencyCode: coin.currencyCode,
214
- domain: coin.domain,
215
- });
216
- }
217
- return acc;
218
- }, []);
219
- exports.tokens = {
220
- // network name for production environments
221
- bitcoin: {
222
- eth: {
223
- tokens: formattedErc20Tokens.filter((token) => token.network === 'Mainnet'),
224
- },
225
- xlm: {
226
- tokens: formattedStellarTokens.filter((token) => token.network === 'Mainnet'),
227
- },
228
- algo: {
229
- tokens: exports.formattedAlgoTokens.filter((token) => token.network === 'Mainnet'),
230
- },
231
- ofc: {
232
- tokens: formattedOfcCoins.filter((token) => coins_1.coins.get(token.type).network.type === networks_1.NetworkType.MAINNET),
233
- },
234
- celo: {
235
- tokens: formattedCeloTokens.filter((token) => token.network === 'Mainnet'),
236
- },
237
- bsc: {
238
- tokens: formattedBscTokens.filter((token) => token.network === 'Mainnet'),
239
- },
240
- eos: {
241
- tokens: formattedEosTokens.filter((token) => token.network === 'Mainnet'),
242
- },
243
- avaxc: {
244
- tokens: formattedAvaxCTokens.filter((token) => token.network === 'Mainnet'),
245
- },
246
- polygon: {
247
- tokens: formattedPolygonTokens.filter((token) => token.network === 'Mainnet'),
248
- },
249
- sol: {
250
- tokens: formattedSolTokens.filter((token) => token.network === 'Mainnet'),
251
- },
252
- hbar: {
253
- tokens: formattedHbarTokens.filter((token) => token.network === 'Mainnet'),
254
- },
255
- ada: {
256
- tokens: formattedAdaTokens.filter((token) => token.network === 'Mainnet'),
257
- },
258
- trx: {
259
- tokens: formattedTrxTokens.filter((token) => token.network === 'Mainnet'),
260
- },
261
- xrp: {
262
- tokens: formattedXrpTokens.filter((token) => token.network === 'Mainnet'),
263
- },
264
- },
265
- // network name for test environments
266
- testnet: {
267
- eth: {
268
- tokens: formattedErc20Tokens.filter((token) => token.network === 'Testnet'),
269
- },
270
- xlm: {
271
- tokens: formattedStellarTokens.filter((token) => token.network === 'Testnet'),
272
- },
273
- algo: {
274
- tokens: exports.formattedAlgoTokens.filter((token) => token.network === 'Testnet'),
275
- },
276
- ofc: {
277
- tokens: formattedOfcCoins.filter((token) => coins_1.coins.get(token.type).network.type === networks_1.NetworkType.TESTNET),
278
- },
279
- celo: {
280
- tokens: formattedCeloTokens.filter((token) => token.network === 'Testnet'),
281
- },
282
- bsc: {
283
- tokens: formattedBscTokens.filter((token) => token.network === 'Testnet'),
284
- },
285
- eos: {
286
- tokens: formattedEosTokens.filter((token) => token.network === 'Testnet'),
287
- },
288
- avaxc: {
289
- tokens: formattedAvaxCTokens.filter((token) => token.network === 'Testnet'),
290
- },
291
- polygon: {
292
- tokens: formattedPolygonTokens.filter((token) => token.network === 'Testnet'),
293
- },
294
- sol: {
295
- tokens: formattedSolTokens.filter((token) => token.network === 'Testnet'),
296
- },
297
- hbar: {
298
- tokens: formattedHbarTokens.filter((token) => token.network === 'Testnet'),
299
- },
300
- ada: {
301
- tokens: formattedAdaTokens.filter((token) => token.network === 'Testnet'),
302
- },
303
- trx: {
304
- tokens: formattedTrxTokens.filter((token) => token.network === 'Testnet'),
529
+ acc.push(getXrpTokenConfig(coin));
530
+ }
531
+ return acc;
532
+ }, []);
533
+ function getSuiTokenConfig(coin) {
534
+ return {
535
+ type: coin.name,
536
+ coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'sui' : 'tsui',
537
+ network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
538
+ name: coin.fullName,
539
+ decimalPlaces: coin.decimalPlaces,
540
+ packageId: coin.packageId,
541
+ module: coin.module,
542
+ symbol: coin.symbol,
543
+ contractAddress: coin.contractAddress,
544
+ };
545
+ }
546
+ const getFormattedSuiTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
547
+ if (coin instanceof account_1.SuiCoin) {
548
+ acc.push(getSuiTokenConfig(coin));
549
+ }
550
+ return acc;
551
+ }, []);
552
+ function getTaoTokenConfig(coin) {
553
+ return {
554
+ type: coin.name,
555
+ coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'tao' : 'ttao',
556
+ network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
557
+ name: coin.fullName,
558
+ decimalPlaces: coin.decimalPlaces,
559
+ subnetId: coin.subnetId,
560
+ };
561
+ }
562
+ const getFormattedTaoTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
563
+ if (coin instanceof account_1.TaoCoin) {
564
+ acc.push(getTaoTokenConfig(coin));
565
+ }
566
+ return acc;
567
+ }, []);
568
+ function getPolyxTokenConfig(coin) {
569
+ return {
570
+ type: coin.name,
571
+ coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'polyx' : 'tpolyx',
572
+ network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
573
+ name: coin.fullName,
574
+ decimalPlaces: coin.decimalPlaces,
575
+ ticker: coin.ticker,
576
+ assetId: coin.assetId,
577
+ };
578
+ }
579
+ const getFormattedPolyxTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
580
+ if (coin instanceof account_1.PolyxCoin) {
581
+ acc.push(getPolyxTokenConfig(coin));
582
+ }
583
+ return acc;
584
+ }, []);
585
+ function getAptTokenConfig(coin) {
586
+ return {
587
+ type: coin.name,
588
+ coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'apt' : 'tapt',
589
+ network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
590
+ name: coin.fullName,
591
+ assetId: coin.assetId,
592
+ decimalPlaces: coin.decimalPlaces,
593
+ };
594
+ }
595
+ const getFormattedAptTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
596
+ if (coin instanceof account_1.AptCoin) {
597
+ acc.push(getAptTokenConfig(coin));
598
+ }
599
+ return acc;
600
+ }, []);
601
+ function getAptNFTCollectionConfig(coin) {
602
+ return {
603
+ type: coin.name,
604
+ coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'apt' : 'tapt',
605
+ network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
606
+ name: coin.fullName,
607
+ nftCollectionId: coin.nftCollectionId,
608
+ decimalPlaces: coin.decimalPlaces,
609
+ };
610
+ }
611
+ function getVetNFTCollectionConfig(coin) {
612
+ return {
613
+ type: coin.name,
614
+ coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'vet' : 'tvet',
615
+ network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
616
+ name: coin.fullName,
617
+ nftCollectionId: coin.nftCollectionId,
618
+ decimalPlaces: coin.decimalPlaces,
619
+ };
620
+ }
621
+ const getFormattedAptNFTCollections = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
622
+ if (coin instanceof account_1.AptNFTCollection) {
623
+ acc.push(getAptNFTCollectionConfig(coin));
624
+ }
625
+ return acc;
626
+ }, []);
627
+ const getFormattedVetNFTCollections = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
628
+ if (coin instanceof account_1.VetNFTCollection) {
629
+ acc.push(getVetNFTCollectionConfig(coin));
630
+ }
631
+ return acc;
632
+ }, []);
633
+ function getSip10TokenConfig(coin) {
634
+ return {
635
+ type: coin.name,
636
+ coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'stx' : 'tstx',
637
+ network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
638
+ name: coin.fullName,
639
+ assetId: coin.assetId,
640
+ decimalPlaces: coin.decimalPlaces,
641
+ };
642
+ }
643
+ const getFormattedSip10Tokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
644
+ if (coin instanceof account_1.Sip10Token) {
645
+ acc.push(getSip10TokenConfig(coin));
646
+ }
647
+ return acc;
648
+ }, []);
649
+ function getNep141TokenConfig(coin) {
650
+ return {
651
+ type: coin.name,
652
+ coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'near' : 'tnear',
653
+ network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
654
+ name: coin.fullName,
655
+ contractAddress: coin.contractAddress,
656
+ storageDepositAmount: coin.storageDepositAmount,
657
+ decimalPlaces: coin.decimalPlaces,
658
+ };
659
+ }
660
+ const getFormattedNep141Tokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
661
+ if (coin instanceof account_1.Nep141Token) {
662
+ acc.push(getNep141TokenConfig(coin));
663
+ }
664
+ return acc;
665
+ }, []);
666
+ function getVetTokenConfig(coin) {
667
+ return {
668
+ type: coin.name,
669
+ coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'vet' : 'tvet',
670
+ network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
671
+ name: coin.fullName,
672
+ contractAddress: coin.contractAddress,
673
+ decimalPlaces: coin.decimalPlaces,
674
+ };
675
+ }
676
+ const getFormattedVetTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
677
+ if (coin instanceof account_1.VetToken) {
678
+ acc.push(getVetTokenConfig(coin));
679
+ }
680
+ return acc;
681
+ }, []);
682
+ const getFormattedCosmosChainTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
683
+ if (coin instanceof account_1.CosmosChainToken) {
684
+ acc.push(getCosmosTokenConfig(coin));
685
+ }
686
+ return acc;
687
+ }, []);
688
+ function getCosmosTokenConfig(coin) {
689
+ return {
690
+ type: coin.name,
691
+ coin: coin.name.split(':')[0].toLowerCase(),
692
+ network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
693
+ name: coin.fullName,
694
+ denom: coin.denom,
695
+ decimalPlaces: coin.decimalPlaces,
696
+ };
697
+ }
698
+ function getJettonTokenConfig(coin) {
699
+ return {
700
+ type: coin.name,
701
+ coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'ton' : 'tton',
702
+ network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
703
+ name: coin.fullName,
704
+ contractAddress: coin.contractAddress,
705
+ decimalPlaces: coin.decimalPlaces,
706
+ };
707
+ }
708
+ const getFormattedJettonTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
709
+ if (coin instanceof account_1.JettonToken) {
710
+ acc.push(getJettonTokenConfig(coin));
711
+ }
712
+ return acc;
713
+ }, []);
714
+ const getFormattedTokens = (coinMap = coins_1.coins) => {
715
+ const formattedAptNFTCollections = getFormattedAptNFTCollections(coinMap);
716
+ const formattedVetNFTCollections = getFormattedVetNFTCollections(coinMap);
717
+ return {
718
+ bitcoin: {
719
+ eth: {
720
+ tokens: getFormattedErc20Tokens(coinMap).filter((token) => token.network === 'Mainnet'),
721
+ nfts: getFormattedErc721Tokens(coinMap).filter((token) => token.network === 'Mainnet'),
722
+ },
723
+ xlm: {
724
+ tokens: getFormattedStellarTokens(coinMap).filter((token) => token.network === 'Mainnet'),
725
+ },
726
+ algo: {
727
+ tokens: (0, exports.getFormattedAlgoTokens)(coinMap).filter((token) => token.network === 'Mainnet'),
728
+ },
729
+ ofc: {
730
+ tokens: getFormattedOfcCoins(coinMap).filter((token) => coinMap.get(token.type).network.type === networks_1.NetworkType.MAINNET),
731
+ },
732
+ celo: {
733
+ tokens: getFormattedCeloTokens(coinMap).filter((token) => token.network === 'Mainnet'),
734
+ },
735
+ bsc: {
736
+ tokens: getFormattedBscTokens(coinMap).filter((token) => token.network === 'Mainnet'),
737
+ },
738
+ eos: {
739
+ tokens: getFormattedEosTokens(coinMap).filter((token) => token.network === 'Mainnet'),
740
+ },
741
+ avaxc: {
742
+ tokens: getFormattedAvaxCTokens(coinMap).filter((token) => token.network === 'Mainnet'),
743
+ },
744
+ polygon: {
745
+ tokens: getFormattedPolygonTokens(coinMap).filter((token) => token.network === 'Mainnet'),
746
+ },
747
+ soneium: {
748
+ tokens: getFormattedSoneiumTokens(coinMap).filter((token) => token.network === 'Mainnet'),
749
+ },
750
+ arbeth: {
751
+ tokens: getFormattedArbethTokens(coinMap).filter((token) => token.network === 'Mainnet'),
752
+ },
753
+ opeth: {
754
+ tokens: getFormattedOpethTokens(coinMap).filter((token) => token.network === 'Mainnet'),
755
+ },
756
+ baseeth: {
757
+ tokens: getFormattedBaseethTokens(coinMap).filter((token) => token.network === 'Mainnet'),
758
+ },
759
+ og: {
760
+ tokens: getFormattedOgTokens(coinMap).filter((token) => token.network === 'Mainnet'),
761
+ },
762
+ flow: {
763
+ tokens: getFormattedFlowTokens(coinMap).filter((token) => token.network === 'Mainnet'),
764
+ },
765
+ mon: {
766
+ tokens: getFormattedMonadTokens(coinMap).filter((token) => token.network === 'Mainnet'),
767
+ },
768
+ xdc: {
769
+ tokens: getFormattedXdcTokens(coinMap).filter((token) => token.network === 'Mainnet'),
770
+ },
771
+ lineaeth: {
772
+ tokens: getFormattedLineaethTokens(coinMap).filter((token) => token.network === 'Mainnet'),
773
+ },
774
+ seievm: {
775
+ tokens: getFormattedSeievmTokens(coinMap).filter((token) => token.network === 'Mainnet'),
776
+ },
777
+ zketh: {
778
+ tokens: getFormattedZkethTokens(coinMap).filter((token) => token.network === 'Mainnet'),
779
+ },
780
+ sol: {
781
+ tokens: getFormattedSolTokens(coinMap).filter((token) => token.network === 'Mainnet'),
782
+ },
783
+ hbar: {
784
+ tokens: getFormattedHbarTokens(coinMap).filter((token) => token.network === 'Mainnet'),
785
+ },
786
+ ada: {
787
+ tokens: getFormattedAdaTokens(coinMap).filter((token) => token.network === 'Mainnet'),
788
+ },
789
+ trx: {
790
+ tokens: getFormattedTrxTokens(coinMap).filter((token) => token.network === 'Mainnet'),
791
+ },
792
+ xrp: {
793
+ tokens: getFormattedXrpTokens(coinMap).filter((token) => token.network === 'Mainnet'),
794
+ },
795
+ sui: {
796
+ tokens: getFormattedSuiTokens(coinMap).filter((token) => token.network === 'Mainnet'),
797
+ },
798
+ tao: {
799
+ tokens: getFormattedTaoTokens(coinMap).filter((token) => token.network === 'Mainnet'),
800
+ },
801
+ polyx: {
802
+ tokens: getFormattedPolyxTokens(coinMap).filter((token) => token.network === 'Mainnet'),
803
+ },
804
+ bera: {
805
+ tokens: getFormattedBeraTokens(coinMap).filter((token) => token.network === 'Mainnet'),
806
+ },
807
+ coredao: {
808
+ tokens: getFormattedCoredaoTokens(coinMap).filter((token) => token.network === 'Mainnet'),
809
+ },
810
+ world: {
811
+ tokens: getFormattedWorldTokens(coinMap).filter((token) => token.network === 'Mainnet'),
812
+ },
813
+ flr: {
814
+ tokens: getFormattedFlrTokens(coinMap).filter((token) => token.network === 'Mainnet'),
815
+ },
816
+ apt: {
817
+ tokens: getFormattedAptTokens(coinMap).filter((token) => token.network === 'Mainnet'),
818
+ nftCollections: formattedAptNFTCollections.filter((nftCollection) => nftCollection.network === 'Mainnet'),
819
+ },
820
+ stx: {
821
+ tokens: getFormattedSip10Tokens(coinMap).filter((token) => token.network === 'Mainnet'),
822
+ },
823
+ near: {
824
+ tokens: getFormattedNep141Tokens(coinMap).filter((token) => token.network === 'Mainnet'),
825
+ },
826
+ vet: {
827
+ tokens: getFormattedVetTokens(coinMap).filter((token) => token.network === 'Mainnet'),
828
+ nftCollections: formattedVetNFTCollections.filter((nftCollection) => nftCollection.network === 'Mainnet'),
829
+ },
830
+ cosmos: {
831
+ tokens: getFormattedCosmosChainTokens(coinMap).filter((token) => token.network === 'Mainnet'),
832
+ },
833
+ ton: {
834
+ tokens: getFormattedJettonTokens(coinMap).filter((token) => token.network === 'Mainnet'),
835
+ },
305
836
  },
306
- xrp: {
307
- tokens: formattedXrpTokens.filter((token) => token.network === 'Testnet'),
837
+ testnet: {
838
+ eth: {
839
+ tokens: getFormattedErc20Tokens(coinMap).filter((token) => token.network === 'Testnet'),
840
+ nfts: getFormattedErc721Tokens(coinMap).filter((token) => token.network === 'Testnet'),
841
+ },
842
+ xlm: {
843
+ tokens: getFormattedStellarTokens(coinMap).filter((token) => token.network === 'Testnet'),
844
+ },
845
+ algo: {
846
+ tokens: (0, exports.getFormattedAlgoTokens)(coinMap).filter((token) => token.network === 'Testnet'),
847
+ },
848
+ ofc: {
849
+ tokens: getFormattedOfcCoins(coinMap).filter((token) => coinMap.get(token.type).network.type === networks_1.NetworkType.TESTNET),
850
+ },
851
+ celo: {
852
+ tokens: getFormattedCeloTokens(coinMap).filter((token) => token.network === 'Testnet'),
853
+ },
854
+ bsc: {
855
+ tokens: getFormattedBscTokens(coinMap).filter((token) => token.network === 'Testnet'),
856
+ },
857
+ eos: {
858
+ tokens: getFormattedEosTokens(coinMap).filter((token) => token.network === 'Testnet'),
859
+ },
860
+ avaxc: {
861
+ tokens: getFormattedAvaxCTokens(coinMap).filter((token) => token.network === 'Testnet'),
862
+ },
863
+ polygon: {
864
+ tokens: getFormattedPolygonTokens(coinMap).filter((token) => token.network === 'Testnet'),
865
+ },
866
+ soneium: {
867
+ tokens: getFormattedSoneiumTokens(coinMap).filter((token) => token.network === 'Testnet'),
868
+ },
869
+ arbeth: {
870
+ tokens: getFormattedArbethTokens(coinMap).filter((token) => token.network === 'Testnet'),
871
+ },
872
+ opeth: {
873
+ tokens: getFormattedOpethTokens(coinMap).filter((token) => token.network === 'Testnet'),
874
+ },
875
+ baseeth: {
876
+ tokens: getFormattedBaseethTokens(coinMap).filter((token) => token.network === 'Testnet'),
877
+ },
878
+ og: {
879
+ tokens: getFormattedOgTokens(coinMap).filter((token) => token.network === 'Testnet'),
880
+ },
881
+ flow: {
882
+ tokens: getFormattedFlowTokens(coinMap).filter((token) => token.network === 'Testnet'),
883
+ },
884
+ mon: {
885
+ tokens: getFormattedMonadTokens(coinMap).filter((token) => token.network === 'Testnet'),
886
+ },
887
+ xdc: {
888
+ tokens: getFormattedXdcTokens(coinMap).filter((token) => token.network === 'Testnet'),
889
+ },
890
+ lineaeth: {
891
+ tokens: getFormattedLineaethTokens(coinMap).filter((token) => token.network === 'Testnet'),
892
+ },
893
+ seievm: {
894
+ tokens: getFormattedSeievmTokens(coinMap).filter((token) => token.network === 'Testnet'),
895
+ },
896
+ zketh: {
897
+ tokens: getFormattedZkethTokens(coinMap).filter((token) => token.network === 'Testnet'),
898
+ },
899
+ sol: {
900
+ tokens: getFormattedSolTokens(coinMap).filter((token) => token.network === 'Testnet'),
901
+ },
902
+ hbar: {
903
+ tokens: getFormattedHbarTokens(coinMap).filter((token) => token.network === 'Testnet'),
904
+ },
905
+ ada: {
906
+ tokens: getFormattedAdaTokens(coinMap).filter((token) => token.network === 'Testnet'),
907
+ },
908
+ trx: {
909
+ tokens: getFormattedTrxTokens(coinMap).filter((token) => token.network === 'Testnet'),
910
+ },
911
+ xrp: {
912
+ tokens: getFormattedXrpTokens(coinMap).filter((token) => token.network === 'Testnet'),
913
+ },
914
+ sui: {
915
+ tokens: getFormattedSuiTokens(coinMap).filter((token) => token.network === 'Testnet'),
916
+ },
917
+ tao: {
918
+ tokens: getFormattedTaoTokens(coinMap).filter((token) => token.network === 'Testnet'),
919
+ },
920
+ polyx: {
921
+ tokens: getFormattedPolyxTokens(coinMap).filter((token) => token.network === 'Testnet'),
922
+ },
923
+ bera: {
924
+ tokens: getFormattedBeraTokens(coinMap).filter((token) => token.network === 'Testnet'),
925
+ },
926
+ apt: {
927
+ tokens: getFormattedAptTokens(coinMap).filter((token) => token.network === 'Testnet'),
928
+ nftCollections: formattedAptNFTCollections.filter((nftCollection) => nftCollection.network === 'Testnet'),
929
+ },
930
+ stx: {
931
+ tokens: getFormattedSip10Tokens(coinMap).filter((token) => token.network === 'Testnet'),
932
+ },
933
+ coredao: {
934
+ tokens: getFormattedCoredaoTokens(coinMap).filter((token) => token.network === 'Testnet'),
935
+ },
936
+ world: {
937
+ tokens: getFormattedWorldTokens(coinMap).filter((token) => token.network === 'Testnet'),
938
+ },
939
+ flr: {
940
+ tokens: getFormattedFlrTokens(coinMap).filter((token) => token.network === 'Testnet'),
941
+ },
942
+ near: {
943
+ tokens: getFormattedNep141Tokens(coinMap).filter((token) => token.network === 'Testnet'),
944
+ },
945
+ vet: {
946
+ tokens: getFormattedVetTokens(coinMap).filter((token) => token.network === 'Testnet'),
947
+ nftCollections: formattedVetNFTCollections.filter((nftCollection) => nftCollection.network === 'Testnet'),
948
+ },
949
+ cosmos: {
950
+ tokens: getFormattedCosmosChainTokens(coinMap).filter((token) => token.network === 'Testnet'),
951
+ },
952
+ ton: {
953
+ tokens: getFormattedJettonTokens(coinMap).filter((token) => token.network === 'Testnet'),
954
+ },
308
955
  },
309
- },
956
+ };
310
957
  };
958
+ exports.getFormattedTokens = getFormattedTokens;
311
959
  /**
312
960
  * Verify mainnet or testnet tokens
313
961
  * @param tokens
@@ -327,10 +975,116 @@ const verifyTokens = function (tokens) {
327
975
  });
328
976
  return verifiedTokens;
329
977
  };
978
+ exports.tokens = (0, exports.getFormattedTokens)();
979
+ exports.formattedAlgoTokens = (0, exports.getFormattedAlgoTokens)();
330
980
  const mainnetErc20Tokens = verifyTokens(exports.tokens.bitcoin.eth.tokens);
981
+ const mainnetErc721Tokens = verifyTokens(exports.tokens.bitcoin.eth.nfts);
331
982
  const mainnetStellarTokens = verifyTokens(exports.tokens.bitcoin.xlm.tokens);
332
- exports.mainnetTokens = { ...mainnetErc20Tokens, ...mainnetStellarTokens };
983
+ exports.mainnetTokens = { ...mainnetErc20Tokens, ...mainnetErc721Tokens, ...mainnetStellarTokens };
333
984
  const testnetErc20Tokens = verifyTokens(exports.tokens.testnet.eth.tokens);
985
+ const testnetErc721Tokens = verifyTokens(exports.tokens.testnet.eth.nfts);
334
986
  const testnetStellarTokens = verifyTokens(exports.tokens.testnet.xlm.tokens);
335
- exports.testnetTokens = { ...testnetErc20Tokens, ...testnetStellarTokens };
336
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5Db25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdG9rZW5Db25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsdUNBZ0JtQjtBQUNuQixpQ0FBOEM7QUFDOUMsbUNBQWdDO0FBQ2hDLHlDQUFtRDtBQUNuRCwrQkFBZ0M7QUE4SWhDLG9FQUFvRTtBQUNwRSxNQUFNLG9CQUFvQixHQUFHLGFBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUF1QixFQUFFLElBQUksRUFBRSxFQUFFO0lBQzFFLElBQUksSUFBSSxZQUFZLG1CQUFTLEVBQUU7UUFDN0IsSUFBSSxRQUFnQixDQUFDO1FBQ3JCLFFBQVEsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNwQixLQUFLLG1CQUFRLENBQUMsSUFBSSxDQUFDLFFBQVE7Z0JBQ3pCLFFBQVEsR0FBRyxLQUFLLENBQUM7Z0JBQ2pCLE1BQU07WUFDUixLQUFLLG1CQUFRLENBQUMsSUFBSSxDQUFDLEtBQUs7Z0JBQ3RCLFFBQVEsR0FBRyxNQUFNLENBQUM7Z0JBQ2xCLE1BQU07WUFDUixLQUFLLG1CQUFRLENBQUMsSUFBSSxDQUFDLE1BQU07Z0JBQ3ZCLFFBQVEsR0FBRyxPQUFPLENBQUM7Z0JBQ25CLE1BQU07WUFDUjtnQkFDRSxNQUFNLElBQUksS0FBSyxDQUFDLGVBQWUsSUFBSSxDQUFDLElBQUksNkJBQTZCLENBQUMsQ0FBQztTQUMxRTtRQUVELEdBQUcsQ0FBQyxJQUFJLENBQUM7WUFDUCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZixJQUFJLEVBQUUsUUFBUTtZQUNkLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxzQkFBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTO1lBQzFFLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUTtZQUNuQixvQkFBb0IsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFD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LFFBQUEsYUFBYSxHQUFHLEVBQUUsR0FBRyxrQkFBa0IsRUFBRSxHQUFHLG9CQUFvQixFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBFcmMyMENvaW4sXG4gIFN0ZWxsYXJDb2luLFxuICBDZWxvQ29pbixcbiAgRW9zQ29pbixcbiAgQXZheEVSQzIwVG9rZW4sXG4gIEFsZ29Db2luLFxuICBTb2xDb2luLFxuICBIZWRlcmFUb2tlbixcbiAgUG9seWdvbkVSQzIwVG9rZW4sXG4gIEJzY0NvaW4sXG4gIEFkYUNvaW4sXG4gIEVyYzcyMUNvaW4sXG4gIEVyYzExNTVDb2luLFxuICBUcm9uRXJjMjBDb2luLFxuICBYcnBDb2luLFxufSBmcm9tICcuL2FjY291bnQnO1xuaW1wb3J0IHsgQ29pbkZhbWlseSwgQ29pbktpbmQgfSBmcm9tICcuL2Jhc2UnO1xuaW1wb3J0IHsgY29pbnMgfSBmcm9tICcuL2NvaW5zJztcbmltcG9ydCB7IE5ldHdvcmtzLCBOZXR3b3JrVHlwZSB9IGZyb20gJy4vbmV0d29ya3MnO1xuaW1wb3J0IHsgT2ZjQ29pbiB9IGZyb20gJy4vb2ZjJztcblxuZXhwb3J0IGludGVyZmFjZSBCYXNlVG9rZW5Db25maWcge1xuICBjb2luOiBzdHJpbmc7XG4gIGRlY2ltYWxQbGFjZXM6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZU5ldHdvcmtDb25maWcgZXh0ZW5kcyBCYXNlVG9rZW5Db25maWcge1xuICBuZXR3b3JrOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZUNvbnRyYWN0QWRkcmVzc0NvbmZpZyBleHRlbmRzIEJhc2VOZXR3b3JrQ29uZmlnIHtcbiAgdG9rZW5Db250cmFjdEFkZHJlc3M6IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgQXZheGNUb2tlbkNvbmZpZyA9IEJhc2VDb250cmFjdEFkZHJlc3NDb25maWc7XG5leHBvcnQgdHlwZSBDZWxvVG9rZW5Db25maWcgPSBCYXNlQ29udHJhY3RBZGRyZXNzQ29uZmlnO1xuZXhwb3J0IHR5cGUgRXRoTGlrZVRva2VuQ29uZmlnID0gQmFzZUNvbnRyYWN0QWRkcmVzc0NvbmZpZztcbmV4cG9ydCB0eXBlIEVvc1Rva2VuQ29uZmlnID0gQmFzZUNvbnRyYWN0QWRkcmVzc0NvbmZpZztcbmV4cG9ydCB0eXBlIEVyYzIwVG9rZW5Db25maWcgPSBCYXNlQ29udHJhY3RBZGRyZXNzQ29uZmlnO1xuZXhwb3J0IHR5cGUgVHJ4VG9rZW5Db25maWcgPSBCYXNlQ29udHJhY3RBZGRyZXNzQ29uZmlnO1xuZXhwb3J0IHR5cGUgU3RlbGxhclRva2VuQ29uZmlnID0gQmFzZU5ldHdvcmtDb25maWc7XG5cbmV4cG9ydCB0eXBlIFNvbFRva2VuQ29uZmlnID0gQmFzZU5ldHdvcmtDb25maWcgJiB7XG4gIHRva2VuQWRkcmVzczogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgQWRhVG9rZW5Db25maWcgPSBCYXNlTmV0d29ya0NvbmZpZyAmIHtcbiAgcG9saWN5SWQ6IHN0cmluZztcbiAgYXNzZXROYW1lOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBBbGdvVG9rZW5Db25maWcgPSBCYXNlTmV0d29ya0NvbmZpZyAmIHtcbiAgYWxpYXM/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBPZmNUb2tlbkNvbmZpZyA9IEJhc2VUb2tlbkNvbmZpZyAmIHtcbiAgYmFja2luZ0NvaW46IHN0cmluZztcbiAgaXNGaWF0OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgSGJhclRva2VuQ29uZmlnID0gQmFzZU5ldHdvcmtDb25maWc7XG5cbmV4cG9ydCB0eXBlIFhycFRva2VuQ29uZmlnID0gQmFzZU5ldHdvcmtDb25maWcgJiB7XG4gIGlzc3VlckFkZHJlc3M6IHN0cmluZztcbiAgY3VycmVuY3lDb2RlOiBzdHJpbmc7XG4gIGRvbWFpbj86IHN0cmluZztcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG9rZW5zIHtcbiAgYml0Y29pbjoge1xuICAgIGV0aDoge1xuICAgICAgdG9rZW5zOiBFcmMyMFRva2VuQ29uZmlnW107XG4gICAgfTtcbiAgICB4bG06IHtcbiAgICAgIHRva2VuczogU3RlbGxhclRva2VuQ29uZmlnW107XG4gICAgfTtcbiAgICBhbGdvOiB7XG4gICAgICB0b2tlbnM6IEFsZ29Ub2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgb2ZjOiB7XG4gICAgICB0b2tlbnM6IE9mY1Rva2VuQ29uZmlnW107XG4gICAgfTtcbiAgICBjZWxvOiB7XG4gICAgICB0b2tlbnM6IENlbG9Ub2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgZW9zOiB7XG4gICAgICB0b2tlbnM6IEVvc1Rva2VuQ29uZmlnW107XG4gICAgfTtcbiAgICBhdmF4Yzoge1xuICAgICAgdG9rZW5zOiBBdmF4Y1Rva2VuQ29uZmlnW107XG4gICAgfTtcbiAgICBwb2x5Z29uOiB7XG4gICAgICB0b2tlbnM6IEV0aExpa2VUb2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgYnNjOiB7XG4gICAgICB0b2tlbnM6IEV0aExpa2VUb2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgc29sOiB7XG4gICAgICB0b2tlbnM6IFNvbFRva2VuQ29uZmlnW107XG4gICAgfTtcbiAgICBoYmFyOiB7XG4gICAgICB0b2tlbnM6IEhiYXJUb2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgYWRhOiB7XG4gICAgICB0b2tlbnM6IEFkYVRva2VuQ29uZmlnW107XG4gICAgfTtcbiAgICB0cng6IHtcbiAgICAgIHRva2VuczogVHJ4VG9rZW5Db25maWdbXTtcbiAgICB9O1xuICAgIHhycDoge1xuICAgICAgdG9rZW5zOiBYcnBUb2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gIH07XG4gIHRlc3RuZXQ6IHtcbiAgICBldGg6IHtcbiAgICAgIHRva2VuczogRXJjMjBUb2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgeGxtOiB7XG4gICAgICB0b2tlbnM6IFN0ZWxsYXJUb2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgYWxnbzoge1xuICAgICAgdG9rZW5zOiBBbGdvVG9rZW5Db25maWdbXTtcbiAgICB9O1xuICAgIG9mYzoge1xuICAgICAgdG9rZW5zOiBPZmNUb2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgY2Vsbzoge1xuICAgICAgdG9rZW5zOiBDZWxvVG9rZW5Db25maWdbXTtcbiAgICB9O1xuICAgIGJzYzoge1xuICAgICAgdG9rZW5zOiBFdGhMaWtlVG9rZW5Db25maWdbXTtcbiAgICB9O1xuICAgIGVvczoge1xuICAgICAgdG9rZW5zOiBFb3NUb2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgYXZheGM6IHtcbiAgICAgIHRva2VuczogQXZheGNUb2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgcG9seWdvbjoge1xuICAgICAgdG9rZW5zOiBFdGhMaWtlVG9rZW5Db25maWdbXTtcbiAgICB9O1xuICAgIHNvbDoge1xuICAgICAgdG9rZW5zOiBTb2xUb2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgaGJhcjoge1xuICAgICAgdG9rZW5zOiBIYmFyVG9rZW5Db25maWdbXTtcbiAgICB9O1xuICAgIGFkYToge1xuICAgICAgdG9rZW5zOiBBZGFUb2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgdHJ4OiB7XG4gICAgICB0b2tlbnM6IFRyeFRva2VuQ29uZmlnW107XG4gICAgfTtcbiAgICB4cnA6IHtcbiAgICAgIHRva2VuczogWHJwVG9rZW5Db25maWdbXTtcbiAgICB9O1xuICB9O1xufVxuXG4vLyBHZXQgdGhlIGxpc3Qgb2YgRVJDLTIwIHRva2VucyBmcm9tIHN0YXRpY3MgYW5kIGZvcm1hdCBpdCBwcm9wZXJseVxuY29uc3QgZm9ybWF0dGVkRXJjMjBUb2tlbnMgPSBjb2lucy5yZWR1Y2UoKGFjYzogRXJjMjBUb2tlbkNvbmZpZ1tdLCBjb2luKSA9PiB7XG4gIGlmIChjb2luIGluc3RhbmNlb2YgRXJjMjBDb2luKSB7XG4gICAgbGV0IGJhc2VDb2luOiBzdHJpbmc7XG4gICAgc3dpdGNoIChjb2luLm5ldHdvcmspIHtcbiAgICAgIGNhc2UgTmV0d29ya3MubWFpbi5ldGhlcmV1bTpcbiAgICAgICAgYmFzZUNvaW4gPSAnZXRoJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIE5ldHdvcmtzLnRlc3Qua292YW46XG4gICAgICAgIGJhc2VDb2luID0gJ3RldGgnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgTmV0d29ya3MudGVzdC5nb2VybGk6XG4gICAgICAgIGJhc2VDb2luID0gJ2d0ZXRoJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEVyYzIwIHRva2VuICR7Y29pbi5uYW1lfSBoYXMgYW4gdW5zdXBwb3J0ZWQgbmV0d29ya2ApO1xuICAgIH1cblxuICAgIGFjYy5wdXNoKHtcbiAgICAgIHR5cGU6IGNvaW4ubmFtZSxcbiAgICAgIGNvaW46IGJhc2VDb2luLFxuICAgICAgbmV0d29yazogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnTWFpbm5ldCcgOiAnVGVzdG5ldCcsXG4gICAgICBuYW1lOiBjb2luLmZ1bGxOYW1lLFxuICAgICAgdG9rZW5Db250cmFjdEFkZHJlc3M6IGNvaW4uY29udHJhY3RBZGRyZXNzLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSxcbiAgICAgIGRlY2ltYWxQbGFjZXM6IGNvaW4uZGVjaW1hbFBsYWNlcyxcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gYWNjO1xufSwgW10pO1xuXG5leHBvcnQgY29uc3QgZXRoR2FzQ29uZmlncyA9IHtcbiAgbWluaW11bUdhc1ByaWNlOiAxMDAwMDAwMDAwLCAvLyBtaW5pbXVtIGdhcyBwcmljZSBhIHVzZXIgY2FuIHByb3ZpZGUgKDEgR3dlaSlcbiAgZGVmYXVsdEdhc1ByaWNlOiAyMDAwMDAwMDAwMCwgLy8gZGVmYXVsdCBnYXMgcHJpY2UgaWYgZXN0aW1hdGlvbiBmYWlscyAoMjAgR3dlaSlcbiAgbWF4aW11bUdhc1ByaWNlOiAyNTAwMDAwMDAwMDAwLCAvLyBtaW5pbXVtIGdhcyBwcmljZSBhIHVzZXIgY2FuIHByb3ZpZGUgKDI1MDAgR3dlaSlcbiAgZGVmYXVsdEdhc0xpbWl0OiA1MDAwMDAsIC8vIERlZmF1bHQgZ2FzIGxpbWl0IHdlIHNldCBmb3IgY29udHJhY3Qgc2VuZFxuICBkZWZhdWx0R2FzTGltaXRUb2tlblNlbmQ6IDEwMDAwMDAsIC8vIERlZmF1bHQgZ2FzIGxpbWl0IHdlIHNldCBmb3IgdG9rZW4gc2VuZFxuICBtaW5pbXVtR2FzTGltaXQ6IDMwMDAwLCAvLyBtaW5pbXVtIGdhcyBsaW1pdCBhIHVzZXIgY2FuIHNldCBmb3IgYSBzZW5kXG4gIG1heGltdW1HYXNMaW1pdDogMjAwMDAwMDAsIC8vIEN1c3RvbWVycyBjYW5ub3Qgc2V0IGdhcyBsaW1pdHMgYmV5b25kIHRoaXMgYW1vdW50XG59O1xuLy8gR2V0IHRoZSBsaXN0IG9mIFN0ZWxsYXIgdG9rZW5zIGZyb20gc3RhdGljcyBhbmQgZm9ybWF0IGl0IHByb3Blcmx5XG5jb25zdCBmb3JtYXR0ZWRTdGVsbGFyVG9rZW5zID0gY29pbnMucmVkdWNlKChhY2M6IFN0ZWxsYXJUb2tlbkNvbmZpZ1tdLCBjb2luKSA9PiB7XG4gIGlmIChjb2luIGluc3RhbmNlb2YgU3RlbGxhckNvaW4pIHtcbiAgICBhY2MucHVzaCh7XG4gICAgICB0eXBlOiBjb2luLm5hbWUsXG4gICAgICBjb2luOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICd4bG0nIDogJ3R4bG0nLFxuICAgICAgbmV0d29yazogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnTWFpbm5ldCcgOiAnVGVzdG5ldCcsXG4gICAgICBuYW1lOiBjb2luLmZ1bGxOYW1lLFxuICAgICAgZGVjaW1hbFBsYWNlczogY29pbi5kZWNpbWFsUGxhY2VzLFxuICAgIH0pO1xuICB9XG4gIHJldHVybiBhY2M7XG59LCBbXSk7XG5cbi8vIEdldCB0aGUgbGlzdCBvZiBPRkMgdG9rZW5zIGZyb20gc3RhdGljcyBhbmQgZm9ybWF0IGl0IHByb3Blcmx5XG5jb25zdCBmb3JtYXR0ZWRPZmNDb2lucyA9IGNvaW5zLnJlZHVjZSgoYWNjOiBPZmNUb2tlbkNvbmZpZ1tdLCBjb2luKSA9PiB7XG4gIGlmIChjb2luIGluc3RhbmNlb2YgT2ZjQ29pbikge1xuICAgIGFjYy5wdXNoKHtcbiAgICAgIHR5cGU6IGNvaW4ubmFtZSxcbiAgICAgIGNvaW46ICdvZmMnLFxuICAgICAgYmFja2luZ0NvaW46IGNvaW4uYXNzZXQsXG4gICAgICBuYW1lOiBjb2luLmZ1bGxOYW1lLFxuICAgICAgZGVjaW1hbFBsYWNlczogY29pbi5kZWNpbWFsUGxhY2VzLFxuICAgICAgaXNGaWF0OiBjb2luLmtpbmQgPT09IENvaW5LaW5kLkZJQVQsXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGFjYztcbn0sIFtdKTtcblxuY29uc3QgZm9ybWF0dGVkQ2Vsb1Rva2VucyA9IGNvaW5zLnJlZHVjZSgoYWNjOiBDZWxvVG9rZW5Db25maWdbXSwgY29pbikgPT4ge1xuICBpZiAoY29pbiBpbnN0YW5jZW9mIENlbG9Db2luKSB7XG4gICAgYWNjLnB1c2goe1xuICAgICAgdHlwZTogY29pbi5uYW1lLFxuICAgICAgY29pbjogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnY2VsbycgOiAndGNlbG8nLFxuICAgICAgbmV0d29yazogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnTWFpbm5ldCcgOiAnVGVzdG5ldCcsXG4gICAgICBuYW1lOiBjb2luLmZ1bGxOYW1lLFxuICAgICAgdG9rZW5Db250cmFjdEFkZHJlc3M6IGNvaW4uY29udHJhY3RBZGRyZXNzLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSxcbiAgICAgIGRlY2ltYWxQbGFjZXM6IGNvaW4uZGVjaW1hbFBsYWNlcyxcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gYWNjO1xufSwgW10pO1xuXG5jb25zdCBmb3JtYXR0ZWRCc2NUb2tlbnMgPSBjb2lucy5yZWR1Y2UoKGFjYzogRXRoTGlrZVRva2VuQ29uZmlnW10sIGNvaW4pID0+IHtcbiAgaWYgKGNvaW4gaW5zdGFuY2VvZiBCc2NDb2luKSB7XG4gICAgYWNjLnB1c2goe1xuICAgICAgdHlwZTogY29pbi5uYW1lLFxuICAgICAgY29pbjogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnYnNjJyA6ICd0YnNjJyxcbiAgICAgIG5ldHdvcms6IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ01haW5uZXQnIDogJ1Rlc3RuZXQnLFxuICAgICAgbmFtZTogY29pbi5mdWxsTmFtZSxcbiAgICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiBjb2luLmNvbnRyYWN0QWRkcmVzcy50b1N0cmluZygpLnRvTG93ZXJDYXNlKCksXG4gICAgICBkZWNpbWFsUGxhY2VzOiBjb2luLmRlY2ltYWxQbGFjZXMsXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGFjYztcbn0sIFtdKTtcblxuY29uc3QgZm9ybWF0dGVkRW9zVG9rZW5zID0gY29pbnMucmVkdWNlKChhY2M6IEVvc1Rva2VuQ29uZmlnW10sIGNvaW4pID0+IHtcbiAgaWYgKGNvaW4gaW5zdGFuY2VvZiBFb3NDb2luKSB7XG4gICAgYWNjLnB1c2goe1xuICAgICAgdHlwZTogY29pbi5uYW1lLFxuICAgICAgY29pbjogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnZW9zJyA6ICd0ZW9zJyxcbiAgICAgIG5ldHdvcms6IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ01haW5uZXQnIDogJ1Rlc3RuZXQnLFxuICAgICAgbmFtZTogY29pbi5mdWxsTmFtZSxcbiAgICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiBjb2luLmNvbnRyYWN0TmFtZS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCksXG4gICAgICBkZWNpbWFsUGxhY2VzOiBjb2luLmRlY2ltYWxQbGFjZXMsXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGFjYztcbn0sIFtdKTtcblxuY29uc3QgZm9ybWF0dGVkQXZheENUb2tlbnMgPSBjb2lucy5yZWR1Y2UoKGFjYzogQXZheGNUb2tlbkNvbmZpZ1tdLCBjb2luKSA9PiB7XG4gIGlmIChjb2luIGluc3RhbmNlb2YgQXZheEVSQzIwVG9rZW4pIHtcbiAgICBhY2MucHVzaCh7XG4gICAgICB0eXBlOiBjb2luLm5hbWUsXG4gICAgICBjb2luOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdhdmF4YycgOiAndGF2YXhjJyxcbiAgICAgIG5ldHdvcms6IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ01haW5uZXQnIDogJ1Rlc3RuZXQnLFxuICAgICAgbmFtZTogY29pbi5mdWxsTmFtZSxcbiAgICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiBjb2luLmNvbnRyYWN0QWRkcmVzcy50b1N0cmluZygpLnRvTG93ZXJDYXNlKCksXG4gICAgICBkZWNpbWFsUGxhY2VzOiBjb2luLmRlY2ltYWxQbGFjZXMsXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGFjYztcbn0sIFtdKTtcblxuY29uc3QgZm9ybWF0dGVkUG9seWdvblRva2VucyA9IGNvaW5zLnJlZHVjZSgoYWNjOiBFdGhMaWtlVG9rZW5Db25maWdbXSwgY29pbikgPT4ge1xuICBpZiAoXG4gICAgY29pbiBpbnN0YW5jZW9mIFBvbHlnb25FUkMyMFRva2VuIHx8XG4gICAgKChjb2luIGluc3RhbmNlb2YgRXJjNzIxQ29pbiB8fCBjb2luIGluc3RhbmNlb2YgRXJjMTE1NUNvaW4pICYmIGNvaW4uZmFtaWx5ID09PSBDb2luRmFtaWx5LlBPTFlHT04pXG4gICkge1xuICAgIGFjYy5wdXNoKHtcbiAgICAgIHR5cGU6IGNvaW4ubmFtZSxcbiAgICAgIGNvaW46IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ3BvbHlnb24nIDogJ3Rwb2x5Z29uJyxcbiAgICAgIG5ldHdvcms6IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ01haW5uZXQnIDogJ1Rlc3RuZXQnLFxuICAgICAgbmFtZTogY29pbi5mdWxsTmFtZSxcbiAgICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiBjb2luLmNvbnRyYWN0QWRkcmVzcy50b1N0cmluZygpLnRvTG93ZXJDYXNlKCksXG4gICAgICBkZWNpbWFsUGxhY2VzOiBjb2luLmRlY2ltYWxQbGFjZXMsXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGFjYztcbn0sIFtdKTtcblxuY29uc3QgZm9ybWF0dGVkU29sVG9rZW5zID0gY29pbnMucmVkdWNlKChhY2M6IFNvbFRva2VuQ29uZmlnW10sIGNvaW4pID0+IHtcbiAgaWYgKGNvaW4gaW5zdGFuY2VvZiBTb2xDb2luKSB7XG4gICAgYWNjLnB1c2goe1xuICAgICAgdHlwZTogY29pbi5uYW1lLFxuICAgICAgY29pbjogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnc29sJyA6ICd0c29sJyxcbiAgICAgIG5ldHdvcms6IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ01haW5uZXQnIDogJ1Rlc3RuZXQnLFxuICAgICAgbmFtZTogY29pbi5mdWxsTmFtZSxcbiAgICAgIHRva2VuQWRkcmVzczogY29pbi50b2tlbkFkZHJlc3MsXG4gICAgICBkZWNpbWFsUGxhY2VzOiBjb2luLmRlY2ltYWxQbGFjZXMsXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGFjYztcbn0sIFtdKTtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdHRlZEFsZ29Ub2tlbnMgPSBjb2lucy5yZWR1Y2UoKGFjYzogQWxnb1Rva2VuQ29uZmlnW10sIGNvaW4pID0+IHtcbiAgaWYgKGNvaW4gaW5zdGFuY2VvZiBBbGdvQ29pbikge1xuICAgIGFjYy5wdXNoKHtcbiAgICAgIHR5cGU6IGNvaW4ubmFtZSxcbiAgICAgIGNvaW46IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ2FsZ28nIDogJ3RhbGdvJyxcbiAgICAgIGFsaWFzOiBjb2luLmFsaWFzLFxuICAgICAgbmV0d29yazogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnTWFpbm5ldCcgOiAnVGVzdG5ldCcsXG4gICAgICBuYW1lOiBjb2luLmZ1bGxOYW1lLFxuICAgICAgZGVjaW1hbFBsYWNlczogY29pbi5kZWNpbWFsUGxhY2VzLFxuICAgIH0pO1xuICB9XG4gIHJldHVybiBhY2M7XG59LCBbXSk7XG5cbmNvbnN0IGZvcm1hdHRlZEhiYXJUb2tlbnMgPSBjb2lucy5yZWR1Y2UoKGFjYzogSGJhclRva2VuQ29uZmlnW10sIGNvaW4pID0+IHtcbiAgaWYgKGNvaW4gaW5zdGFuY2VvZiBIZWRlcmFUb2tlbikge1xuICAgIGFjYy5wdXNoKHtcbiAgICAgIHR5cGU6IGNvaW4ubmFtZSxcbiAgICAgIGNvaW46IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ2hiYXInIDogJ3RoYmFyJyxcbiAgICAgIG5ldHdvcms6IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ01haW5uZXQnIDogJ1Rlc3RuZXQnLFxuICAgICAgbmFtZTogY29pbi5mdWxsTmFtZSxcbiAgICAgIGRlY2ltYWxQbGFjZXM6IGNvaW4uZGVjaW1hbFBsYWNlcyxcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gYWNjO1xufSwgW10pO1xuXG5jb25zdCBmb3JtYXR0ZWRBZGFUb2tlbnMgPSBjb2lucy5yZWR1Y2UoKGFjYzogQWRhVG9rZW5Db25maWdbXSwgY29pbikgPT4ge1xuICBpZiAoY29pbiBpbnN0YW5jZW9mIEFkYUNvaW4pIHtcbiAgICBhY2MucHVzaCh7XG4gICAgICB0eXBlOiBjb2luLm5hbWUsXG4gICAgICBjb2luOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdhZGEnIDogJ3RhZGEnLFxuICAgICAgbmV0d29yazogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnTWFpbm5ldCcgOiAnVGVzdG5ldCcsXG4gICAgICBuYW1lOiBjb2luLmZ1bGxOYW1lLFxuICAgICAgcG9saWN5SWQ6IGNvaW4ucG9saWN5SWQsXG4gICAgICBhc3NldE5hbWU6IGNvaW4uYXNzZXROYW1lLFxuICAgICAgZGVjaW1hbFBsYWNlczogY29pbi5kZWNpbWFsUGxhY2VzLFxuICAgIH0pO1xuICB9XG4gIHJldHVybiBhY2M7XG59LCBbXSk7XG5cbmNvbnN0IGZvcm1hdHRlZFRyeFRva2VucyA9IGNvaW5zLnJlZHVjZSgoYWNjOiBUcnhUb2tlbkNvbmZpZ1tdLCBjb2luKSA9PiB7XG4gIGlmIChjb2luIGluc3RhbmNlb2YgVHJvbkVyYzIwQ29pbikge1xuICAgIGFjYy5wdXNoKHtcbiAgICAgIHR5cGU6IGNvaW4ubmFtZSxcbiAgICAgIGNvaW46IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ3RyeCcgOiAndHRyeCcsXG4gICAgICBuZXR3b3JrOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdNYWlubmV0JyA6ICdUZXN0bmV0JyxcbiAgICAgIG5hbWU6IGNvaW4uZnVsbE5hbWUsXG4gICAgICB0b2tlbkNvbnRyYWN0QWRkcmVzczogY29pbi5jb250cmFjdEFkZHJlc3MudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLFxuICAgICAgZGVjaW1hbFBsYWNlczogY29pbi5kZWNpbWFsUGxhY2VzLFxuICAgIH0pO1xuICB9XG4gIHJldHVybiBhY2M7XG59LCBbXSk7XG5cbmNvbnN0IGZvcm1hdHRlZFhycFRva2VucyA9IGNvaW5zLnJlZHVjZSgoYWNjOiBYcnBUb2tlbkNvbmZpZ1tdLCBjb2luKSA9PiB7XG4gIGlmIChjb2luIGluc3RhbmNlb2YgWHJwQ29pbikge1xuICAgIGFjYy5wdXNoKHtcbiAgICAgIHR5cGU6IGNvaW4ubmFtZSxcbiAgICAgIGNvaW46IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ3hycCcgOiAndHhycCcsXG4gICAgICBuZXR3b3JrOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdNYWlubmV0JyA6ICdUZXN0bmV0JyxcbiAgICAgIG5hbWU6IGNvaW4uZnVsbE5hbWUsXG4gICAgICBkZWNpbWFsUGxhY2VzOiBjb2luLmRlY2ltYWxQbGFjZXMsXG4gICAgICBpc3N1ZXJBZGRyZXNzOiBjb2luLmlzc3VlckFkZHJlc3MsXG4gICAgICBjdXJyZW5jeUNvZGU6IGNvaW4uY3VycmVuY3lDb2RlLFxuICAgICAgZG9tYWluOiBjb2luLmRvbWFpbixcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gYWNjO1xufSwgW10pO1xuXG5leHBvcnQgY29uc3QgdG9rZW5zOiBUb2tlbnMgPSB7XG4gIC8vIG5ldHdvcmsgbmFtZSBmb3IgcHJvZHVjdGlvbiBlbnZpcm9ubWVudHNcbiAgYml0Y29pbjoge1xuICAgIGV0aDoge1xuICAgICAgdG9rZW5zOiBmb3JtYXR0ZWRFcmMyMFRva2Vucy5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSAnTWFpbm5ldCcpLFxuICAgIH0sXG4gICAgeGxtOiB7XG4gICAgICB0b2tlbnM6IGZvcm1hdHRlZFN0ZWxsYXJUb2tlbnMuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmV0d29yayA9PT0gJ01haW5uZXQnKSxcbiAgICB9LFxuICAgIGFsZ286IHtcbiAgICAgIHRva2VuczogZm9ybWF0dGVkQWxnb1Rva2Vucy5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSAnTWFpbm5ldCcpLFxuICAgIH0sXG4gICAgb2ZjOiB7XG4gICAgICB0b2tlbnM6IGZvcm1hdHRlZE9mY0NvaW5zLmZpbHRlcigodG9rZW4pID0+IGNvaW5zLmdldCh0b2tlbi50eXBlKS5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQpLFxuICAgIH0sXG4gICAgY2Vsbzoge1xuICAgICAgdG9rZW5zOiBmb3JtYXR0ZWRDZWxvVG9rZW5zLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdNYWlubmV0JyksXG4gICAgfSxcbiAgICBic2M6IHtcbiAgICAgIHRva2VuczogZm9ybWF0dGVkQnNjVG9rZW5zLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdNYWlubmV0JyksXG4gICAgfSxcbiAgICBlb3M6IHtcbiAgICAgIHRva2VuczogZm9ybWF0dGVkRW9zVG9rZW5zLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdNYWlubmV0JyksXG4gICAgfSxcbiAgICBhdmF4Yzoge1xuICAgICAgdG9rZW5zOiBmb3JtYXR0ZWRBdmF4Q1Rva2Vucy5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSAnTWFpbm5ldCcpLFxuICAgIH0sXG4gICAgcG9seWdvbjoge1xuICAgICAgdG9rZW5zOiBmb3JtYXR0ZWRQb2x5Z29uVG9rZW5zLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdNYWlubmV0JyksXG4gICAgfSxcbiAgICBzb2w6IHtcbiAgICAgIHRva2VuczogZm9ybWF0dGVkU29sVG9rZW5zLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdNYWlubmV0JyksXG4gICAgfSxcbiAgICBoYmFyOiB7XG4gICAgICB0b2tlbnM6IGZvcm1hdHRlZEhiYXJUb2tlbnMuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmV0d29yayA9PT0gJ01haW5uZXQnKSxcbiAgICB9LFxuICAgIGFkYToge1xuICAgICAgdG9rZW5zOiBmb3JtYXR0ZWRBZGFUb2tlbnMuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmV0d29yayA9PT0gJ01haW5uZXQnKSxcbiAgICB9LFxuICAgIHRyeDoge1xuICAgICAgdG9rZW5zOiBmb3JtYXR0ZWRUcnhUb2tlbnMuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmV0d29yayA9PT0gJ01haW5uZXQnKSxcbiAgICB9LFxuICAgIHhycDoge1xuICAgICAgdG9rZW5zOiBmb3JtYXR0ZWRYcnBUb2tlbnMuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmV0d29yayA9PT0gJ01haW5uZXQnKSxcbiAgICB9LFxuICB9LFxuICAvLyBuZXR3b3JrIG5hbWUgZm9yIHRlc3QgZW52aXJvbm1lbnRzXG4gIHRlc3RuZXQ6IHtcbiAgICBldGg6IHtcbiAgICAgIHRva2VuczogZm9ybWF0dGVkRXJjMjBUb2tlbnMuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmV0d29yayA9PT0gJ1Rlc3RuZXQnKSxcbiAgICB9LFxuICAgIHhsbToge1xuICAgICAgdG9rZW5zOiBmb3JtYXR0ZWRTdGVsbGFyVG9rZW5zLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdUZXN0bmV0JyksXG4gICAgfSxcbiAgICBhbGdvOiB7XG4gICAgICB0b2tlbnM6IGZvcm1hdHRlZEFsZ29Ub2tlbnMuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmV0d29yayA9PT0gJ1Rlc3RuZXQnKSxcbiAgICB9LFxuICAgIG9mYzoge1xuICAgICAgdG9rZW5zOiBmb3JtYXR0ZWRPZmNDb2lucy5maWx0ZXIoKHRva2VuKSA9PiBjb2lucy5nZXQodG9rZW4udHlwZSkubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5URVNUTkVUKSxcbiAgICB9LFxuICAgIGNlbG86IHtcbiAgICAgIHRva2VuczogZm9ybWF0dGVkQ2Vsb1Rva2Vucy5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSAnVGVzdG5ldCcpLFxuICAgIH0sXG4gICAgYnNjOiB7XG4gICAgICB0b2tlbnM6IGZvcm1hdHRlZEJzY1Rva2Vucy5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSAnVGVzdG5ldCcpLFxuICAgIH0sXG4gICAgZW9zOiB7XG4gICAgICB0b2tlbnM6IGZvcm1hdHRlZEVvc1Rva2Vucy5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSAnVGVzdG5ldCcpLFxuICAgIH0sXG4gICAgYXZheGM6IHtcbiAgICAgIHRva2VuczogZm9ybWF0dGVkQXZheENUb2tlbnMuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmV0d29yayA9PT0gJ1Rlc3RuZXQnKSxcbiAgICB9LFxuICAgIHBvbHlnb246IHtcbiAgICAgIHRva2VuczogZm9ybWF0dGVkUG9seWdvblRva2Vucy5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSAnVGVzdG5ldCcpLFxuICAgIH0sXG4gICAgc29sOiB7XG4gICAgICB0b2tlbnM6IGZvcm1hdHRlZFNvbFRva2Vucy5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSAnVGVzdG5ldCcpLFxuICAgIH0sXG4gICAgaGJhcjoge1xuICAgICAgdG9rZW5zOiBmb3JtYXR0ZWRIYmFyVG9rZW5zLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdUZXN0bmV0JyksXG4gICAgfSxcbiAgICBhZGE6IHtcbiAgICAgIHRva2VuczogZm9ybWF0dGVkQWRhVG9rZW5zLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdUZXN0bmV0JyksXG4gICAgfSxcbiAgICB0cng6IHtcbiAgICAgIHRva2VuczogZm9ybWF0dGVkVHJ4VG9rZW5zLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdUZXN0bmV0JyksXG4gICAgfSxcbiAgICB4cnA6IHtcbiAgICAgIHRva2VuczogZm9ybWF0dGVkWHJwVG9rZW5zLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdUZXN0bmV0JyksXG4gICAgfSxcbiAgfSxcbn07XG5cbi8qKlxuICogVmVyaWZ5IG1haW5uZXQgb3IgdGVzdG5ldCB0b2tlbnNcbiAqIEBwYXJhbSB0b2tlbnNcbiAqL1xuY29uc3QgdmVyaWZ5VG9rZW5zID0gZnVuY3Rpb24gKHRva2VuczogQmFzZVRva2VuQ29uZmlnW10pIHtcbiAgY29uc3QgdmVyaWZpZWRUb2tlbnM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG4gIHRva2Vucy5mb3JFYWNoKCh0b2tlbikgPT4ge1xuICAgIGlmICh2ZXJpZmllZFRva2Vuc1t0b2tlbi50eXBlXSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd0b2tlbiA6ICcgKyB0b2tlbi50eXBlICsgJyBkdXBsaWNhdGVkLicpO1xuICAgIH1cbiAgICB2ZXJpZmllZFRva2Vuc1t0b2tlbi50eXBlXSA9IHRydWU7XG5cbiAgICBpZiAoXG4gICAgICAodG9rZW4gYXMgQmFzZUNvbnRyYWN0QWRkcmVzc0NvbmZpZykudG9rZW5Db250cmFjdEFkZHJlc3MgJiZcbiAgICAgICh0b2tlbiBhcyBCYXNlQ29udHJhY3RBZGRyZXNzQ29uZmlnKS50b2tlbkNvbnRyYWN0QWRkcmVzcyAhPT1cbiAgICAgICAgKHRva2VuIGFzIEJhc2VDb250cmFjdEFkZHJlc3NDb25maWcpLnRva2VuQ29udHJhY3RBZGRyZXNzLnRvTG9jYWxlTG93ZXJDYXNlKClcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ3Rva2VuIGNvbnRyYWN0OiAnICsgdG9rZW4udHlwZSArICcgaXMgbm90IGFsbCBsb3dlciBjYXNlOiAnICsgKHRva2VuIGFzIEJhc2VDb250cmFjdEFkZHJlc3NDb25maWcpXG4gICAgICApO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHZlcmlmaWVkVG9rZW5zO1xufTtcblxuY29uc3QgbWFpbm5ldEVyYzIwVG9rZW5zID0gdmVyaWZ5VG9rZW5zKHRva2Vucy5iaXRjb2luLmV0aC50b2tlbnMpO1xuY29uc3QgbWFpbm5ldFN0ZWxsYXJUb2tlbnMgPSB2ZXJpZnlUb2tlbnModG9rZW5zLmJpdGNvaW4ueGxtLnRva2Vucyk7XG5leHBvcnQgY29uc3QgbWFpbm5ldFRva2VucyA9IHsgLi4ubWFpbm5ldEVyYzIwVG9rZW5zLCAuLi5tYWlubmV0U3RlbGxhclRva2VucyB9O1xuXG5jb25zdCB0ZXN0bmV0RXJjMjBUb2tlbnMgPSB2ZXJpZnlUb2tlbnModG9rZW5zLnRlc3RuZXQuZXRoLnRva2Vucyk7XG5jb25zdCB0ZXN0bmV0U3RlbGxhclRva2VucyA9IHZlcmlmeVRva2Vucyh0b2tlbnMudGVzdG5ldC54bG0udG9rZW5zKTtcbmV4cG9ydCBjb25zdCB0ZXN0bmV0VG9rZW5zID0geyAuLi50ZXN0bmV0RXJjMjBUb2tlbnMsIC4uLnRlc3RuZXRTdGVsbGFyVG9rZW5zIH07XG4iXX0=
987
+ exports.testnetTokens = { ...testnetErc20Tokens, ...testnetErc721Tokens, ...testnetStellarTokens };
988
+ /**
989
+ * Get formatted token configuration for a single coin
990
+ * @param coin - Static Base coin instance
991
+ * @returns The formatted token configuration for the coin, or undefined if not supported
992
+ */
993
+ function getFormattedTokenConfigForCoin(coin) {
994
+ if (coin instanceof account_1.Erc20Coin) {
995
+ return getErc20TokenConfig(coin);
996
+ }
997
+ else if (coin instanceof account_1.StellarCoin) {
998
+ return getStellarTokenConfig(coin);
999
+ }
1000
+ else if (coin instanceof ofc_1.OfcCoin) {
1001
+ return getOfcTokenConfig(coin);
1002
+ }
1003
+ else if (coin instanceof account_1.CeloCoin) {
1004
+ return getCeloTokenConfig(coin);
1005
+ }
1006
+ else if (coin instanceof account_1.BscCoin) {
1007
+ return getBscTokenConfig(coin);
1008
+ }
1009
+ else if (coin instanceof account_1.EosCoin) {
1010
+ return getEosTokenConfig(coin);
1011
+ }
1012
+ else if (coin instanceof account_1.AvaxERC20Token) {
1013
+ return getAvaxCTokenConfig(coin);
1014
+ }
1015
+ else if (coin instanceof account_1.PolygonERC20Token ||
1016
+ ((coin instanceof account_1.Erc721Coin || coin instanceof account_1.Erc1155Coin) && coin.family === base_1.CoinFamily.POLYGON)) {
1017
+ return getPolygonTokenConfig(coin);
1018
+ }
1019
+ else if ((coin instanceof account_1.Erc721Coin || coin instanceof account_1.Erc1155Coin) && coin.family === base_1.CoinFamily.SONEIUM) {
1020
+ return getSoneiumTokenConfig(coin);
1021
+ }
1022
+ else if (coin instanceof account_1.Erc721Coin && coin.family === base_1.CoinFamily.ETH) {
1023
+ return getErc721TokenConfig(coin);
1024
+ }
1025
+ else if (coin instanceof account_1.ArbethERC20Token) {
1026
+ return getArbethTokenConfig(coin);
1027
+ }
1028
+ else if (coin instanceof account_1.OpethERC20Token) {
1029
+ return getOpethTokenConfig(coin);
1030
+ }
1031
+ else if (coin instanceof account_1.ZkethERC20Token) {
1032
+ return getZkethTokenConfig(coin);
1033
+ }
1034
+ else if (coin instanceof account_1.SolCoin) {
1035
+ return getSolTokenConfig(coin);
1036
+ }
1037
+ else if (coin instanceof account_1.HederaToken) {
1038
+ return getHbarTokenConfig(coin);
1039
+ }
1040
+ else if (coin instanceof account_1.AdaToken) {
1041
+ return getAdaTokenConfig(coin);
1042
+ }
1043
+ else if (coin instanceof account_1.TronErc20Coin) {
1044
+ return getTrxTokenConfig(coin);
1045
+ }
1046
+ else if (coin instanceof account_1.XrpCoin) {
1047
+ return getXrpTokenConfig(coin);
1048
+ }
1049
+ else if (coin instanceof account_1.SuiCoin) {
1050
+ return getSuiTokenConfig(coin);
1051
+ }
1052
+ else if (coin instanceof account_1.TaoCoin) {
1053
+ return getTaoTokenConfig(coin);
1054
+ }
1055
+ else if (coin instanceof account_1.PolyxCoin) {
1056
+ return getPolyxTokenConfig(coin);
1057
+ }
1058
+ else if (coin instanceof account_1.AptCoin) {
1059
+ return getAptTokenConfig(coin);
1060
+ }
1061
+ else if (coin instanceof account_1.AptNFTCollection) {
1062
+ return getAptNFTCollectionConfig(coin);
1063
+ }
1064
+ else if (coin instanceof account_1.Sip10Token) {
1065
+ return getSip10TokenConfig(coin);
1066
+ }
1067
+ else if (coin instanceof account_1.Nep141Token) {
1068
+ return getNep141TokenConfig(coin);
1069
+ }
1070
+ else if (coin instanceof account_1.CosmosChainToken) {
1071
+ return getCosmosTokenConfig(coin);
1072
+ }
1073
+ else if (coin instanceof account_1.VetToken) {
1074
+ return getVetTokenConfig(coin);
1075
+ }
1076
+ else if (coin instanceof account_1.VetNFTCollection) {
1077
+ return getVetNFTCollectionConfig(coin);
1078
+ }
1079
+ else if (coin instanceof account_1.CoredaoERC20Token) {
1080
+ return getCoredaoTokenConfig(coin);
1081
+ }
1082
+ else if (coin instanceof account_1.JettonToken) {
1083
+ return getJettonTokenConfig(coin);
1084
+ }
1085
+ else if (coin instanceof account_1.FlrERC20Token) {
1086
+ return getFlrTokenConfig(coin);
1087
+ }
1088
+ return undefined;
1089
+ }
1090
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5Db25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdG9rZW5Db25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBc2hEQSx3RUFvRUM7QUExbERELHVDQW1DbUI7QUFDbkIsaUNBQXdEO0FBQ3hELG1DQUFnQztBQUNoQyx5Q0FBbUQ7QUFDbkQsK0JBQWdDO0FBdWFoQyxTQUFTLG1CQUFtQixDQUFDLElBQWU7SUFDMUMsSUFBSSxRQUFnQixDQUFDO0lBQ3JCLFFBQVEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMxQixLQUFLLG1CQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJO1lBQzlCLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDakIsTUFBTTtRQUNSLEtBQUssbUJBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUk7WUFDM0IsUUFBUSxHQUFHLE1BQU0sQ0FBQztZQUNsQixNQUFNO1FBQ1IsS0FBSyxtQkFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSTtZQUM1QixRQUFRLEdBQUcsT0FBTyxDQUFDO1lBQ25CLE1BQU07UUFDUixLQUFLLG1CQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDaEMsS0FBSyxtQkFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSTtZQUMzQixRQUFRLEdBQUcsT0FBTyxDQUFDO1lBQ25CLE1BQU07UUFDUjtZQUNFLE1BQU0sSUFBSSxLQUFLLENBQUMsZUFBZSxJQUFJLENBQUMsSUFBSSw2QkFBNkIsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFDRCxPQUFPO1FBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1FBQ2YsSUFBSSxFQUFFLFFBQVE7UUFDZCxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssc0JBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMs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TUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQzthQUN2RjtZQUNELEdBQUcsRUFBRTtnQkFDSCxNQUFNLEVBQUUscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQzthQUN0RjtZQUNELEdBQUcsRUFBRTtnQkFDSCxNQUFNLEVBQUUscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQzthQUN0RjtZQUNELEtBQUssRUFBRTtnQkFDTCxNQUFNLEVBQUUsdUJBQXVCLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQzthQUN4RjtZQUNELE9BQU8sRUFBRTtnQkFDUCxNQUFNLEVBQUUseUJBQXlCLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQzthQUMxRjtZQUNELE9BQU8sRUFBRTtnQkFDUCxNQUFNLEVBQUUseUJBQXlCLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQzthQUMxRjtZQUNELE1BQU0sRUFBRTtnQkFDTixNQUFNLEVBQUUsd0JBQXdCLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQzthQUN6RjtZQUNELEtBQUssRUFBRTtnQkFDTCxNQUFNLEVBQUUsdUJBQXVCLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQzthQUN4RjtZQUNELE9BQU8sRUFBRTtnQkFDUCxNQUFNLEVBQUUseUJBQXlCLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQzthQUMxRjtZQUNELEVBQUUsRUFBRTtnQkFDRixNQUFNLEVBQUUsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQzthQUNyRjtZQUNELElBQUksRUFBRTtnQkFDSixNQUFNLEVBQUUsc0JBQXNCLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQzthQUN2RjtZQUNELEdBQUcsRUFBRTtnQkFDSCxNQUFNLEVBQUUsdUJBQXVCLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQzthQUN4RjtZQUNELEdBQUcsRUFBRTtnQkFDSCxNQUFNLEVBQUUscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQzthQUN0RjtZQUNELFFBQVEsRUFBRTtnQkFDUixNQUFNLEVBQUUsMEJBQTBCLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQzthQUMzRjtZQUNELE1BQU0sRUFBRTtnQkFDTixNQUFNLEVBQUUsd0JBQXdCLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQzthQUN6RjtZQUNELEtBQUssRUFBRTtnQkFDTCxNQUFNLEVBQUUsdUJBQXVCLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQzthQUN4RjtZQUNELEdBQUcsRUFBRTtnQkFDSCxNQUFNLEVBQUUscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQzthQUN0RjtZQUNELElBQUksRUFBRTtnQkFDSixNQUFNLEVBQUUsc0JBQXNCLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQzthQUN2RjtZQUNELEdBQUcsRUFBRTtnQkFDSCxNQUFNLEVBQUUscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQzthQUN0RjtZQUNELEdBQUcsRUFBRTtnQkFDSCxNQUFNLEVBQUUscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQzthQUN0RjtZQUNELEdBQUcsRUFBRTtnQkFDSCxNQUFNLEVBQUUscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQzthQUN0RjtZQUNELEdBQUcsRUFBRTtnQkFDSCxNQUFNLEVBQUUscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQzthQUN0RjtZQUNELEdBQUcsRUFBRTtnQkFDSCxNQUFNLEVBQUUscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQzthQUN0RjtZQUNELEtBQUssRUFBRTtnQkFDTCxNQUFNLEVBQUUsdUJBQXVCLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQzthQUN4RjtZQUNELElBQUksRUFBRTtnQkFDSixNQUFNLEVBQUUsc0JBQXNCLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQzthQUN2RjtZQUNELE9BQU8sRUFBRTtnQkFDUCxNQUFNLEVBQUUseUJBQXlCLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQzthQUMxRjtZQUNELEtBQUssRUFBRTtnQkFDTCxNQUFNLEVBQUUsdUJBQXVCLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQzthQUN4RjtZQUNELEdBQUcsRUFBRTtnQkFDSCxNQUFNLEVBQUUscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQzthQUN0RjtZQUNELEdBQUcsRUFBRTtnQkFDSCxNQUFNLEVBQUUscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQztnQkFDckYsY0FBYyxFQUFFLDBCQUEwQixDQUFDLE1BQU0sQ0FDL0MsQ0FBQyxhQUFxQyxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FDL0U7YUFDRjtZQUNELEdBQUcsRUFBRTtnQkFDSCxNQUFNLEVBQUUsdUJBQXVCLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQzthQUN4RjtZQUNELElBQUksRUFBRTtnQkFDSixNQUFNLEVBQUUsd0JBQXdCLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQzthQUN6RjtZQUNELEdBQUcsRUFBRTtnQkFDSCxNQUFNLEVBQUUscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQztnQkFDckYsY0FBYyxFQUFFLDBCQUEwQixDQUFDLE1BQU0sQ0FDL0MsQ0FBQyxhQUFxQyxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FDL0U7YUFDRjtZQUNELE1BQU0sRUFBRTtnQkFDTixNQUFNLEVBQUUsNkJBQTZCLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQzthQUM5RjtZQUNELEdBQUcsRUFBRTtnQkFDSCxNQUFNLEVBQUUsd0JBQXdCLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQzthQUN6RjtTQUNGO1FBQ0QsT0FBTyxFQUFFO1lBQ1AsR0FBRyxFQUFFO2dCQUNILE1BQU0sRUFBRSx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDO2dCQUN2RixJQUFJLEVBQUUsd0JBQXdCLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQzthQUN2RjtZQUNELEdBQUcsRUFBRTtnQkFDSCxNQUFNLEVBQUUseUJBQXlCLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQzthQUMxRjtZQUNELElBQUksRUFBRTtnQkFDSixNQUFNLEVBQUUsSUFBQSw4QkFBc0IsRUFBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDO2FBQ3ZGO1lBQ0QsR0FBRyxFQUFFO2dCQUNILE1BQU0sRUFBRSxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQzFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLHNCQUFXLENBQUMsT0FBTyxDQUN4RTthQUNGO1lBQ0QsSUFBSSxFQUFFO2dCQUNKLE1BQU0sRUFBRSxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDO2FBQ3ZGO1lBQ0QsR0FBRyxFQUFFO2dCQUNILE1BQU0sRUFBRSxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDO2FBQ3RGO1lBQ0QsR0FBRyxFQUFFO2dCQUNILE1BQU0sRUFBRSxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDO2FBQ3RGO1lBQ0QsS0FBSyxFQUFFO2dCQUNMLE1BQU0sRUFBRSx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDO2FBQ3hGO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLE1BQU0sRUFBRSx5QkFBeUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDO2FBQzFGO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLE1BQU0sRUFBRSx5QkFBeUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDO2FBQzFGO1lBQ0QsTUFBTSxFQUFFO2dCQUNOLE1BQU0sRUFBRSx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDO2FBQ3pGO1lBQ0QsS0FBSyxFQUFFO2dCQUNMLE1BQU0sRUFBRSx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDO2FBQ3hGO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLE1BQU0sRUFBRSx5QkFBeUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDO2FBQzFGO1lBQ0QsRUFBRSxFQUFFO2dCQUNGLE1BQU0sRUFBRSxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDO2FBQ3JGO1lBQ0QsSUFBSSxFQUFFO2dCQUNKLE1BQU0sRUFBRSxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDO2FBQ3ZGO1lBQ0QsR0FBRyxFQUFFO2dCQUNILE1BQU0sRUFBRSx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDO2FBQ3hGO1lBQ0QsR0FBRyxFQUFFO2dCQUNILE1BQU0sRUFBRSxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDO2FBQ3RGO1lBQ0QsUUFBUSxFQUFFO2dCQUNSLE1BQU0sRUFBRSwwQkFBMEIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDO2FBQzNGO1lBQ0QsTUFBTSxFQUFFO2dCQUNOLE1BQU0sRUFBRSx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDO2FBQ3pGO1lBQ0QsS0FBSyxFQUFFO2dCQUNMLE1BQU0sRUFBRSx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDO2FBQ3hGO1lBQ0QsR0FBRyxFQUFFO2dCQUNILE1BQU0sRUFBRSxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDO2FBQ3RGO1lBQ0QsSUFBSSxFQUFFO2dCQUNKLE1BQU0sRUFBRSxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDO2FBQ3ZGO1lBQ0QsR0FBRyxFQUFFO2dCQUNILE1BQU0sRUFBRSxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDO2FBQ3RGO1lBQ0QsR0FBRyxFQUFFO2dCQUNILE1BQU0sRUFBRSxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDO2FBQ3RGO1lBQ0QsR0FBRyxFQUFFO2dCQUNILE1BQU0sRUFBRSxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDO2FBQ3RGO1lBQ0QsR0FBRyxFQUFFO2dCQUNILE1BQU0sRUFBRSxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDO2FBQ3RGO1lBQ0QsR0FBRyxFQUFFO2dCQUNILE1BQU0sRUFBRSxxQkFB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QUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BDLENBQUM7U0FBTSxJQUFJLElBQUksWUFBWSwwQkFBZ0IsRUFBRSxDQUFDO1FBQzVDLE9BQU8sb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEMsQ0FBQztTQUFNLElBQUksSUFBSSxZQUFZLGtCQUFRLEVBQUUsQ0FBQztRQUNwQyxPQUFPLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pDLENBQUM7U0FBTSxJQUFJLElBQUksWUFBWSwwQkFBZ0IsRUFBRSxDQUFDO1FBQzVDLE9BQU8seUJBQXlCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekMsQ0FBQztTQUFNLElBQUksSUFBSSxZQUFZLDJCQUFpQixFQUFFLENBQUM7UUFDN0MsT0FBTyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyQyxDQUFDO1NBQU0sSUFBSSxJQUFJLFlBQVkscUJBQVcsRUFBRSxDQUFDO1FBQ3ZDLE9BQU8sb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEMsQ0FBQztTQUFNLElBQUksSUFBSSxZQUFZLHVCQUFhLEVBQUUsQ0FBQztRQUN6QyxPQUFPLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWxnb0NvaW4sXG4gIEFwdENvaW4sXG4gIEFwdE5GVENvbGxlY3Rpb24sXG4gIEFyYmV0aEVSQzIwVG9rZW4sXG4gIEF2YXhFUkMyMFRva2VuLFxuICBCZXJhRVJDMjBUb2tlbixcbiAgQnNjQ29pbixcbiAgQ2Vsb0NvaW4sXG4gIENvcmVkYW9FUkMyMFRva2VuLFxuICBDb3Ntb3NDaGFpblRva2VuLFxuICBFb3NDb2luLFxuICBFcmMxMTU1Q29pbixcbiAgRXJjMjBDb2luLFxuICBFcmM3MjFDb2luLFxuICBFdGhMaWtlRVJDMjBUb2tlbixcbiAgRmxyRVJDMjBUb2tlbixcbiAgSGVkZXJhVG9rZW4sXG4gIE5lcDE0MVRva2VuLFxuICBPcGV0aEVSQzIwVG9rZW4sXG4gIFBvbHlnb25FUkMyMFRva2VuLFxuICBTaXAxMFRva2VuLFxuICBTb2xDb2luLFxuICBTdGVsbGFyQ29pbixcbiAgU3VpQ29pbixcbiAgVGFvQ29pbixcbiAgUG9seXhDb2luLFxuICBUcm9uRXJjMjBDb2luLFxuICBWZXRUb2tlbixcbiAgV29ybGRFUkMyMFRva2VuLFxuICBYcnBDb2luLFxuICBaa2V0aEVSQzIwVG9rZW4sXG4gIFZldE5GVENvbGxlY3Rpb24sXG4gIEFkYVRva2VuLFxuICBKZXR0b25Ub2tlbixcbn0gZnJvbSAnLi9hY2NvdW50JztcbmltcG9ydCB7IENvaW5GYW1pbHksIENvaW5LaW5kLCBCYXNlQ29pbiB9IGZyb20gJy4vYmFzZSc7XG5pbXBvcnQgeyBjb2lucyB9IGZyb20gJy4vY29pbnMnO1xuaW1wb3J0IHsgTmV0d29ya3MsIE5ldHdvcmtUeXBlIH0gZnJvbSAnLi9uZXR3b3Jrcyc7XG5pbXBvcnQgeyBPZmNDb2luIH0gZnJvbSAnLi9vZmMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VUb2tlbkNvbmZpZyB7XG4gIGNvaW46IHN0cmluZztcbiAgZGVjaW1hbFBsYWNlczogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCYXNlTmV0d29ya0NvbmZpZyBleHRlbmRzIEJhc2VUb2tlbkNvbmZpZyB7XG4gIG5ldHdvcms6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCYXNlQ29udHJhY3RBZGRyZXNzQ29uZmlnIGV4dGVuZHMgQmFzZU5ldHdvcmtDb25maWcge1xuICB0b2tlbkNvbnRyYWN0QWRkcmVzczogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBBdmF4Y1Rva2VuQ29uZmlnID0gQmFzZUNvbnRyYWN0QWRkcmVzc0NvbmZpZztcbmV4cG9ydCB0eXBlIENlbG9Ub2tlbkNvbmZpZyA9IEJhc2VDb250cmFjdEFkZHJlc3NDb25maWc7XG5leHBvcnQgdHlwZSBFdGhMaWtlVG9rZW5Db25maWcgPSBCYXNlQ29udHJhY3RBZGRyZXNzQ29uZmlnO1xuZXhwb3J0IHR5cGUgRW9zVG9rZW5Db25maWcgPSBCYXNlQ29udHJhY3RBZGRyZXNzQ29uZmlnICYge1xuICBjb250cmFjdE5hbWU6IHN0cmluZztcbiAgY29udHJhY3RBZGRyZXNzOiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgRXJjMjBUb2tlbkNvbmZpZyA9IEJhc2VDb250cmFjdEFkZHJlc3NDb25maWc7XG5leHBvcnQgdHlwZSBUcnhUb2tlbkNvbmZpZyA9IEJhc2VDb250cmFjdEFkZHJlc3NDb25maWc7XG5leHBvcnQgdHlwZSBTdGVsbGFyVG9rZW5Db25maWcgPSBCYXNlTmV0d29ya0NvbmZpZztcblxuZXhwb3J0IHR5cGUgU29sVG9rZW5Db25maWcgPSBCYXNlTmV0d29ya0NvbmZpZyAmIHtcbiAgdG9rZW5BZGRyZXNzOiBzdHJpbmc7XG4gIGNvbnRyYWN0QWRkcmVzczogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgQWRhVG9rZW5Db25maWcgPSBCYXNlTmV0d29ya0NvbmZpZyAmIHtcbiAgcG9saWN5SWQ6IHN0cmluZztcbiAgYXNzZXROYW1lOiBzdHJpbmc7XG4gIGNvbnRyYWN0QWRkcmVzczogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgQWxnb1Rva2VuQ29uZmlnID0gQmFzZU5ldHdvcmtDb25maWcgJiB7XG4gIGFsaWFzPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgT2ZjVG9rZW5Db25maWcgPSBCYXNlVG9rZW5Db25maWcgJiB7XG4gIGJhY2tpbmdDb2luOiBzdHJpbmc7XG4gIGlzRmlhdDogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIEhiYXJUb2tlbkNvbmZpZyA9IEJhc2VOZXR3b3JrQ29uZmlnICYge1xuICBub2RlQWNjb3VudElkOiBzdHJpbmc7XG4gIHRva2VuSWQ6IHN0cmluZztcbiAgY29udHJhY3RBZGRyZXNzOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBYcnBUb2tlbkNvbmZpZyA9IEJhc2VOZXR3b3JrQ29uZmlnICYge1xuICBpc3N1ZXJBZGRyZXNzOiBzdHJpbmc7XG4gIGN1cnJlbmN5Q29kZTogc3RyaW5nO1xuICBkb21haW4/OiBzdHJpbmc7XG4gIGNvbnRyYWN0QWRkcmVzczogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgU3VpVG9rZW5Db25maWcgPSBCYXNlTmV0d29ya0NvbmZpZyAmIHtcbiAgcGFja2FnZUlkOiBzdHJpbmc7XG4gIG1vZHVsZTogc3RyaW5nO1xuICBzeW1ib2w6IHN0cmluZztcbiAgY29udHJhY3RBZGRyZXNzOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBBcHRUb2tlbkNvbmZpZyA9IEJhc2VOZXR3b3JrQ29uZmlnICYge1xuICBhc3NldElkOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBBcHRORlRDb2xsZWN0aW9uQ29uZmlnID0gQmFzZU5ldHdvcmtDb25maWcgJiB7XG4gIG5mdENvbGxlY3Rpb25JZDogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgU2lwMTBUb2tlbkNvbmZpZyA9IEJhc2VOZXR3b3JrQ29uZmlnICYge1xuICBhc3NldElkOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBUYW9Ub2tlbkNvbmZpZyA9IEJhc2VOZXR3b3JrQ29uZmlnICYge1xuICBzdWJuZXRJZDogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgUG9seXhUb2tlbkNvbmZpZyA9IEJhc2VOZXR3b3JrQ29uZmlnICYge1xuICB0aWNrZXI6IHN0cmluZztcbiAgYXNzZXRJZDogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgTmVwMTQxVG9rZW5Db25maWcgPSBCYXNlTmV0d29ya0NvbmZpZyAmIHtcbiAgY29udHJhY3RBZGRyZXNzOiBzdHJpbmc7XG4gIHN0b3JhZ2VEZXBvc2l0QW1vdW50OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBWZXRUb2tlbkNvbmZpZyA9IEJhc2VOZXR3b3JrQ29uZmlnICYge1xuICBjb250cmFjdEFkZHJlc3M6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFZldE5GVENvbGxlY3Rpb25Db25maWcgPSBCYXNlTmV0d29ya0NvbmZpZyAmIHtcbiAgbmZ0Q29sbGVjdGlvbklkOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBDb3Ntb3NUb2tlbkNvbmZpZyA9IEJhc2VOZXR3b3JrQ29uZmlnICYge1xuICBkZW5vbTogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgSmV0dG9uVG9rZW5Db25maWcgPSBCYXNlTmV0d29ya0NvbmZpZyAmIHtcbiAgY29udHJhY3RBZGRyZXNzOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBUb2tlbkNvbmZpZyA9XG4gIHwgRXJjMjBUb2tlbkNvbmZpZ1xuICB8IFN0ZWxsYXJUb2tlbkNvbmZpZ1xuICB8IE9mY1Rva2VuQ29uZmlnXG4gIHwgQ2Vsb1Rva2VuQ29uZmlnXG4gIHwgRXRoTGlrZVRva2VuQ29uZmlnXG4gIHwgRW9zVG9rZW5Db25maWdcbiAgfCBBdmF4Y1Rva2VuQ29uZmlnXG4gIHwgU29sVG9rZW5Db25maWdcbiAgfCBIYmFyVG9rZW5Db25maWdcbiAgfCBBZGFUb2tlbkNvbmZpZ1xuICB8IEFsZ29Ub2tlbkNvbmZpZ1xuICB8IFRyeFRva2VuQ29uZmlnXG4gIHwgWHJwVG9rZW5Db25maWdcbiAgfCBTdWlUb2tlbkNvbmZpZ1xuICB8IEFwdFRva2VuQ29uZmlnXG4gIHwgQXB0TkZUQ29sbGVjdGlvbkNvbmZpZ1xuICB8IFNpcDEwVG9rZW5Db25maWdcbiAgfCBOZXAxNDFUb2tlbkNvbmZpZ1xuICB8IENvc21vc1Rva2VuQ29uZmlnXG4gIHwgVmV0VG9rZW5Db25maWdcbiAgfCBWZXRORlRDb2xsZWN0aW9uQ29uZmlnXG4gIHwgVGFvVG9rZW5Db25maWdcbiAgfCBQb2x5eFRva2VuQ29uZmlnXG4gIHwgSmV0dG9uVG9rZW5Db25maWc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG9rZW5zIHtcbiAgYml0Y29pbjoge1xuICAgIGV0aDoge1xuICAgICAgdG9rZW5zOiBFcmMyMFRva2VuQ29uZmlnW107XG4gICAgICBuZnRzOiBFdGhMaWtlVG9rZW5Db25maWdbXTtcbiAgICB9O1xuICAgIHhsbToge1xuICAgICAgdG9rZW5zOiBTdGVsbGFyVG9rZW5Db25maWdbXTtcbiAgICB9O1xuICAgIGFsZ286IHtcbiAgICAgIHRva2VuczogQWxnb1Rva2VuQ29uZmlnW107XG4gICAgfTtcbiAgICBvZmM6IHtcbiAgICAgIHRva2VuczogT2ZjVG9rZW5Db25maWdbXTtcbiAgICB9O1xuICAgIGNlbG86IHtcbiAgICAgIHRva2VuczogQ2Vsb1Rva2VuQ29uZmlnW107XG4gICAgfTtcbiAgICBlb3M6IHtcbiAgICAgIHRva2VuczogRW9zVG9rZW5Db25maWdbXTtcbiAgICB9O1xuICAgIGF2YXhjOiB7XG4gICAgICB0b2tlbnM6IEF2YXhjVG9rZW5Db25maWdbXTtcbiAgICB9O1xuICAgIHBvbHlnb246IHtcbiAgICAgIHRva2VuczogRXRoTGlrZVRva2VuQ29uZmlnW107XG4gICAgfTtcbiAgICBzb25laXVtOiB7XG4gICAgICB0b2tlbnM6IEV0aExpa2VUb2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgYnNjOiB7XG4gICAgICB0b2tlbnM6IEV0aExpa2VUb2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgYXJiZXRoOiB7XG4gICAgICB0b2tlbnM6IEV0aExpa2VUb2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgb3BldGg6IHtcbiAgICAgIHRva2VuczogRXRoTGlrZVRva2VuQ29uZmlnW107XG4gICAgfTtcbiAgICBiYXNlZXRoOiB7XG4gICAgICB0b2tlbnM6IEV0aExpa2VUb2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgb2c6IHtcbiAgICAgIHRva2VuczogRXRoTGlrZVRva2VuQ29uZmlnW107XG4gICAgfTtcbiAgICBmbG93OiB7XG4gICAgICB0b2tlbnM6IEV0aExpa2VUb2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgbGluZWFldGg6IHtcbiAgICAgIHRva2VuczogRXRoTGlrZVRva2VuQ29uZmlnW107XG4gICAgfTtcbiAgICBzZWlldm06IHtcbiAgICAgIHRva2VuczogRXRoTGlrZVRva2VuQ29uZmlnW107XG4gICAgfTtcbiAgICBjb3JlZGFvOiB7XG4gICAgICB0b2tlbnM6IEV0aExpa2VUb2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgd29ybGQ6IHtcbiAgICAgIHRva2VuczogRXRoTGlrZVRva2VuQ29uZmlnW107XG4gICAgfTtcbiAgICBmbHI6IHtcbiAgICAgIHRva2VuczogRXRoTGlrZVRva2VuQ29uZmlnW107XG4gICAgfTtcbiAgICBzb2w6IHtcbiAgICAgIHRva2VuczogU29sVG9rZW5Db25maWdbXTtcbiAgICB9O1xuICAgIGhiYXI6IHtcbiAgICAgIHRva2VuczogSGJhclRva2VuQ29uZmlnW107XG4gICAgfTtcbiAgICBhZGE6IHtcbiAgICAgIHRva2VuczogQWRhVG9rZW5Db25maWdbXTtcbiAgICB9O1xuICAgIHRyeDoge1xuICAgICAgdG9rZW5zOiBUcnhUb2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgeHJwOiB7XG4gICAgICB0b2tlbnM6IFhycFRva2VuQ29uZmlnW107XG4gICAgfTtcbiAgICB6a2V0aDoge1xuICAgICAgdG9rZW5zOiBFdGhMaWtlVG9rZW5Db25maWdbXTtcbiAgICB9O1xuICAgIHN1aToge1xuICAgICAgdG9rZW5zOiBTdWlUb2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgdGFvOiB7XG4gICAgICB0b2tlbnM6IFRhb1Rva2VuQ29uZmlnW107XG4gICAgfTtcbiAgICBwb2x5eDoge1xuICAgICAgdG9rZW5zOiBQb2x5eFRva2VuQ29uZmlnW107XG4gICAgfTtcbiAgICBiZXJhOiB7XG4gICAgICB0b2tlbnM6IEV0aExpa2VUb2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgbW9uOiB7XG4gICAgICB0b2tlbnM6IEV0aExpa2VUb2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgeGRjOiB7XG4gICAgICB0b2tlbnM6IEV0aExpa2VUb2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgYXB0OiB7XG4gICAgICB0b2tlbnM6IEFwdFRva2VuQ29uZmlnW107XG4gICAgICBuZnRDb2xsZWN0aW9uczogQXB0TkZUQ29sbGVjdGlvbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgc3R4OiB7XG4gICAgICB0b2tlbnM6IFNpcDEwVG9rZW5Db25maWdbXTtcbiAgICB9O1xuICAgIG5lYXI6IHtcbiAgICAgIHRva2VuczogTmVwMTQxVG9rZW5Db25maWdbXTtcbiAgICB9O1xuICAgIHZldDoge1xuICAgICAgdG9rZW5zOiBWZXRUb2tlbkNvbmZpZ1tdO1xuICAgICAgbmZ0Q29sbGVjdGlvbnM6IFZldE5GVENvbGxlY3Rpb25Db25maWdbXTtcbiAgICB9O1xuICAgIGNvc21vczoge1xuICAgICAgdG9rZW5zOiBDb3Ntb3NUb2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgdG9uOiB7XG4gICAgICB0b2tlbnM6IEpldHRvblRva2VuQ29uZmlnW107XG4gICAgfTtcbiAgfTtcbiAgdGVzdG5ldDoge1xuICAgIGV0aDoge1xuICAgICAgdG9rZW5zOiBFcmMyMFRva2VuQ29uZmlnW107XG4gICAgICBuZnRzOiBFdGhMaWtlVG9rZW5Db25maWdbXTtcbiAgICB9O1xuICAgIHhsbToge1xuICAgICAgdG9rZW5zOiBTdGVsbGFyVG9rZW5Db25maWdbXTtcbiAgICB9O1xuICAgIGFsZ286IHtcbiAgICAgIHRva2VuczogQWxnb1Rva2VuQ29uZmlnW107XG4gICAgfTtcbiAgICBvZmM6IHtcbiAgICAgIHRva2VuczogT2ZjVG9rZW5Db25maWdbXTtcbiAgICB9O1xuICAgIGNlbG86IHtcbiAgICAgIHRva2VuczogQ2Vsb1Rva2VuQ29uZmlnW107XG4gICAgfTtcbiAgICBic2M6IHtcbiAgICAgIHRva2VuczogRXRoTGlrZVRva2VuQ29uZmlnW107XG4gICAgfTtcbiAgICBtb246IHtcbiAgICAgIHRva2VuczogRXRoTGlrZVRva2VuQ29uZmlnW107XG4gICAgfTtcbiAgICB4ZGM6IHtcbiAgICAgIHRva2VuczogRXRoTGlrZVRva2VuQ29uZmlnW107XG4gICAgfTtcbiAgICBlb3M6IHtcbiAgICAgIHRva2VuczogRW9zVG9rZW5Db25maWdbXTtcbiAgICB9O1xuICAgIGF2YXhjOiB7XG4gICAgICB0b2tlbnM6IEF2YXhjVG9rZW5Db25maWdbXTtcbiAgICB9O1xuICAgIHBvbHlnb246IHtcbiAgICAgIHRva2VuczogRXRoTGlrZVRva2VuQ29uZmlnW107XG4gICAgfTtcbiAgICBzb25laXVtOiB7XG4gICAgICB0b2tlbnM6IEV0aExpa2VUb2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgYXJiZXRoOiB7XG4gICAgICB0b2tlbnM6IEV0aExpa2VUb2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgb3BldGg6IHtcbiAgICAgIHRva2VuczogRXRoTGlrZVRva2VuQ29uZmlnW107XG4gICAgfTtcbiAgICBiYXNlZXRoOiB7XG4gICAgICB0b2tlbnM6IEV0aExpa2VUb2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgb2c6IHtcbiAgICAgIHRva2VuczogRXRoTGlrZVRva2VuQ29uZmlnW107XG4gICAgfTtcbiAgICBmbG93OiB7XG4gICAgICB0b2tlbnM6IEV0aExpa2VUb2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgbGluZWFldGg6IHtcbiAgICAgIHRva2VuczogRXRoTGlrZVRva2VuQ29uZmlnW107XG4gICAgfTtcbiAgICBzZWlldm06IHtcbiAgICAgIHRva2VuczogRXRoTGlrZVRva2VuQ29uZmlnW107XG4gICAgfTtcbiAgICBzb2w6IHtcbiAgICAgIHRva2VuczogU29sVG9rZW5Db25maWdbXTtcbiAgICB9O1xuICAgIGhiYXI6IHtcbiAgICAgIHRva2VuczogSGJhclRva2VuQ29uZmlnW107XG4gICAgfTtcbiAgICBhZGE6IHtcbiAgICAgIHRva2VuczogQWRhVG9rZW5Db25maWdbXTtcbiAgICB9O1xuICAgIHRyeDoge1xuICAgICAgdG9rZW5zOiBUcnhUb2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgeHJwOiB7XG4gICAgICB0b2tlbnM6IFhycFRva2VuQ29uZmlnW107XG4gICAgfTtcbiAgICB6a2V0aDoge1xuICAgICAgdG9rZW5zOiBFdGhMaWtlVG9rZW5Db25maWdbXTtcbiAgICB9O1xuICAgIHN1aToge1xuICAgICAgdG9rZW5zOiBTdWlUb2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgdGFvOiB7XG4gICAgICB0b2tlbnM6IFRhb1Rva2VuQ29uZmlnW107XG4gICAgfTtcbiAgICBwb2x5eDoge1xuICAgICAgdG9rZW5zOiBQb2x5eFRva2VuQ29uZmlnW107XG4gICAgfTtcbiAgICBiZXJhOiB7XG4gICAgICB0b2tlbnM6IEV0aExpa2VUb2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgY29yZWRhbzoge1xuICAgICAgdG9rZW5zOiBFdGhMaWtlVG9rZW5Db25maWdbXTtcbiAgICB9O1xuICAgIHdvcmxkOiB7XG4gICAgICB0b2tlbnM6IEV0aExpa2VUb2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgZmxyOiB7XG4gICAgICB0b2tlbnM6IEV0aExpa2VUb2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgYXB0OiB7XG4gICAgICB0b2tlbnM6IEFwdFRva2VuQ29uZmlnW107XG4gICAgICBuZnRDb2xsZWN0aW9uczogQXB0TkZUQ29sbGVjdGlvbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgc3R4OiB7XG4gICAgICB0b2tlbnM6IFNpcDEwVG9rZW5Db25maWdbXTtcbiAgICB9O1xuICAgIG5lYXI6IHtcbiAgICAgIHRva2VuczogTmVwMTQxVG9rZW5Db25maWdbXTtcbiAgICB9O1xuICAgIHZldDoge1xuICAgICAgdG9rZW5zOiBWZXRUb2tlbkNvbmZpZ1tdO1xuICAgICAgbmZ0Q29sbGVjdGlvbnM6IFZldE5GVENvbGxlY3Rpb25Db25maWdbXTtcbiAgICB9O1xuICAgIGNvc21vczoge1xuICAgICAgdG9rZW5zOiBDb3Ntb3NUb2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgdG9uOiB7XG4gICAgICB0b2tlbnM6IEpldHRvblRva2VuQ29uZmlnW107XG4gICAgfTtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBbXNUb2tlbkNvbmZpZyB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgZnVsbE5hbWU6IHN0cmluZztcbiAgZmFtaWx5OiBzdHJpbmc7XG4gIGRlY2ltYWxQbGFjZXM6IG51bWJlcjtcbiAgYXNzZXQ6IHN0cmluZztcbiAgZmVhdHVyZXM/OiBzdHJpbmdbXTtcbiAgcHJlZml4Pzogc3RyaW5nO1xuICBzdWZmaXg/OiBzdHJpbmc7XG4gIG5ldHdvcms/OiB1bmtub3duO1xuICBwcmltYXJ5S2V5Q3VydmU/OiBzdHJpbmc7XG4gIGNvbnRyYWN0QWRkcmVzcz86IHN0cmluZztcbiAgdG9rZW5BZGRyZXNzPzogc3RyaW5nO1xuICBuZnRDb2xsZWN0aW9uSWQ/OiBzdHJpbmc7XG4gIGFsaWFzPzogc3RyaW5nO1xuICBjb250cmFjdE5hbWU/OiBzdHJpbmc7XG4gIHRva2VuSWQ/OiBzdHJpbmc7XG4gIHBhY2thZ2VJZD86IHN0cmluZztcbiAgbW9kdWxlPzogc3RyaW5nO1xuICBzeW1ib2w/OiBzdHJpbmc7XG4gIGlzc3VlckFkZHJlc3M/OiBzdHJpbmc7XG4gIGN1cnJlY255Y29kZT86IHN0cmluZztcbiAgZG9tYWluPzogc3RyaW5nO1xuICBhc3NldElkPzogc3RyaW5nO1xuICBkZW5vbT86IHN0cmluZztcbiAgaXNUb2tlbjogYm9vbGVhbjtcbiAgYmFzZVVuaXQ/OiBzdHJpbmc7XG4gIGtpbmQ/OiBzdHJpbmc7XG4gIHN1Ym5ldElkPzogc3RyaW5nO1xuICB0aWNrZXI/OiBzdHJpbmc7XG4gIHByb2dyYW1JZD86IHN0cmluZztcbiAgYWRkcmVzc0NvaW4/OiBzdHJpbmc7XG4gIGFzc2V0TmFtZT86IHN0cmluZztcbiAgcG9saWN5SWQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJpbW1lZEFtc05ldHdvcmtDb25maWcge1xuICBuYW1lOiBzdHJpbmc7XG59XG5leHBvcnQgaW50ZXJmYWNlIFRyaW1tZWRBbXNUb2tlbkNvbmZpZyBleHRlbmRzIE9taXQ8QW1zVG9rZW5Db25maWcsICdmZWF0dXJlcycgfCAnbmV0d29yayc+IHtcbiAgbmV0d29yazogVHJpbW1lZEFtc05ldHdvcmtDb25maWc7XG4gIGV4Y2x1ZGVkRmVhdHVyZXM/OiBzdHJpbmdbXTtcbiAgYWRkaXRpb25hbEZlYXR1cmVzPzogc3RyaW5nW107XG59XG5cbmZ1bmN0aW9uIGdldEVyYzIwVG9rZW5Db25maWcoY29pbjogRXJjMjBDb2luKTogRXJjMjBUb2tlbkNvbmZpZyB7XG4gIGxldCBiYXNlQ29pbjogc3RyaW5nO1xuICBzd2l0Y2ggKGNvaW4ubmV0d29yay5uYW1lKSB7XG4gICAgY2FzZSBOZXR3b3Jrcy5tYWluLmV0aGVyZXVtLm5hbWU6XG4gICAgICBiYXNlQ29pbiA9ICdldGgnO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBOZXR3b3Jrcy50ZXN0LmtvdmFuLm5hbWU6XG4gICAgICBiYXNlQ29pbiA9ICd0ZXRoJztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgTmV0d29ya3MudGVzdC5nb2VybGkubmFtZTpcbiAgICAgIGJhc2VDb2luID0gJ2d0ZXRoJztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgTmV0d29ya3MudGVzdC5ob2xlc2t5Lm5hbWU6XG4gICAgY2FzZSBOZXR3b3Jrcy50ZXN0Lmhvb2RpLm5hbWU6XG4gICAgICBiYXNlQ29pbiA9ICdodGV0aCc7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcmMyMCB0b2tlbiAke2NvaW4ubmFtZX0gaGFzIGFuIHVuc3VwcG9ydGVkIG5ldHdvcmtgKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHR5cGU6IGNvaW4ubmFtZSxcbiAgICBjb2luOiBiYXNlQ29pbixcbiAgICBuZXR3b3JrOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdNYWlubmV0JyA6ICdUZXN0bmV0JyxcbiAgICBuYW1lOiBjb2luLmZ1bGxOYW1lLFxuICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiBjb2luLmNvbnRyYWN0QWRkcmVzcy50b1N0cmluZygpLnRvTG93ZXJDYXNlKCksXG4gICAgZGVjaW1hbFBsYWNlczogY29pbi5kZWNpbWFsUGxhY2VzLFxuICB9O1xufVxuXG4vLyBHZXQgdGhlIGxpc3Qgb2YgRVJDLTIwIHRva2VucyBmcm9tIHN0YXRpY3MgYW5kIGZvcm1hdCBpdCBwcm9wZXJseVxuY29uc3QgZ2V0Rm9ybWF0dGVkRXJjMjBUb2tlbnMgPSAoY3VzdG9tQ29pbk1hcCA9IGNvaW5zKSA9PlxuICBjdXN0b21Db2luTWFwLnJlZHVjZSgoYWNjOiBFcmMyMFRva2VuQ29uZmlnW10sIGNvaW4pID0+IHtcbiAgICBpZiAoY29pbiBpbnN0YW5jZW9mIEVyYzIwQ29pbikge1xuICAgICAgYWNjLnB1c2goZ2V0RXJjMjBUb2tlbkNvbmZpZyhjb2luKSk7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIFtdKTtcblxuZXhwb3J0IGNvbnN0IGV0aEdhc0NvbmZpZ3MgPSB7XG4gIG1pbmltdW1HYXNQcmljZTogMTAwMDAwMDAwMCwgLy8gbWluaW11bSBnYXMgcHJpY2UgYSB1c2VyIGNhbiBwcm92aWRlICgxIEd3ZWkpXG4gIGRlZmF1bHRHYXNQcmljZTogMjAwMDAwMDAwMDAsIC8vIGRlZmF1bHQgZ2FzIHByaWNlIGlmIGVzdGltYXRpb24gZmFpbHMgKDIwIEd3ZWkpXG4gIG1heGltdW1HYXNQcmljZTogMjUwMDAwMDAwMDAwMCwgLy8gbWluaW11bSBnYXMgcHJpY2UgYSB1c2VyIGNhbiBwcm92aWRlICgyNTAwIEd3ZWkpXG4gIGRlZmF1bHRHYXNMaW1pdDogNTAwMDAwLCAvLyBEZWZhdWx0IGdhcyBsaW1pdCB3ZSBzZXQgZm9yIGNvbnRyYWN0IHNlbmRcbiAgZGVmYXVsdEdhc0xpbWl0VG9rZW5TZW5kOiAxMDAwMDAwLCAvLyBEZWZhdWx0IGdhcyBsaW1pdCB3ZSBzZXQgZm9yIHRva2VuIHNlbmRcbiAgbWluaW11bUdhc0xpbWl0OiAzMDAwMCwgLy8gbWluaW11bSBnYXMgbGltaXQgYSB1c2VyIGNhbiBzZXQgZm9yIGEgc2VuZFxuICBtYXhpbXVtR2FzTGltaXQ6IDIwMDAwMDAwLCAvLyBDdXN0b21lcnMgY2Fubm90IHNldCBnYXMgbGltaXRzIGJleW9uZCB0aGlzIGFtb3VudFxuICBuZXdFdGhMaWtlQ29pbnNNaW5HYXNMaW1pdDogNDAwMDAwLCAvLyBtaW5pbXVtIGdhcyBsaW1pdCBhIHVzZXIgY2FuIHNldCBmb3IgYSBzZW5kIGZvciBldGggbGlrZSBjb2lucyBsaWtlIGFyYml0cnVtLCBvcHRpbWlzbSwgZXRjXG4gIG9wZXRoR2FzTDFGZWVzOiAxMDAwMDAwMDAwMDAwMDAwLCAvLyBCdWZmZXIgZm9yIG9wZXRoIEwxIGdhcyBmZWVzXG59O1xuXG5mdW5jdGlvbiBnZXRTdGVsbGFyVG9rZW5Db25maWcoY29pbjogU3RlbGxhckNvaW4pOiBTdGVsbGFyVG9rZW5Db25maWcge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGNvaW4ubmFtZSxcbiAgICBjb2luOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICd4bG0nIDogJ3R4bG0nLFxuICAgIG5ldHdvcms6IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ01haW5uZXQnIDogJ1Rlc3RuZXQnLFxuICAgIG5hbWU6IGNvaW4uZnVsbE5hbWUsXG4gICAgZGVjaW1hbFBsYWNlczogY29pbi5kZWNpbWFsUGxhY2VzLFxuICB9O1xufVxuLy8gR2V0IHRoZSBsaXN0IG9mIFN0ZWxsYXIgdG9rZW5zIGZyb20gc3RhdGljcyBhbmQgZm9ybWF0IGl0IHByb3Blcmx5XG5jb25zdCBnZXRGb3JtYXR0ZWRTdGVsbGFyVG9rZW5zID0gKGN1c3RvbUNvaW5NYXAgPSBjb2lucykgPT5cbiAgY3VzdG9tQ29pbk1hcC5yZWR1Y2UoKGFjYzogU3RlbGxhclRva2VuQ29uZmlnW10sIGNvaW4pID0+IHtcbiAgICBpZiAoY29pbiBpbnN0YW5jZW9mIFN0ZWxsYXJDb2luKSB7XG4gICAgICBhY2MucHVzaChnZXRTdGVsbGFyVG9rZW5Db25maWcoY29pbikpO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCBbXSk7XG5cbmZ1bmN0aW9uIGdldE9mY1Rva2VuQ29uZmlnKGNvaW46IE9mY0NvaW4pOiBPZmNUb2tlbkNvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogY29pbi5uYW1lLFxuICAgIGNvaW46ICdvZmMnLFxuICAgIGJhY2tpbmdDb2luOiBjb2luLmFzc2V0LFxuICAgIG5hbWU6IGNvaW4uZnVsbE5hbWUsXG4gICAgZGVjaW1hbFBsYWNlczogY29pbi5kZWNpbWFsUGxhY2VzLFxuICAgIGlzRmlhdDogY29pbi5raW5kID09PSBDb2luS2luZC5GSUFULFxuICB9O1xufVxuLy8gR2V0IHRoZSBsaXN0IG9mIE9GQyB0b2tlbnMgZnJvbSBzdGF0aWNzIGFuZCBmb3JtYXQgaXQgcHJvcGVybHlcbmNvbnN0IGdldEZvcm1hdHRlZE9mY0NvaW5zID0gKGN1c3RvbUNvaW5NYXAgPSBjb2lucykgPT5cbiAgY3VzdG9tQ29pbk1hcC5yZWR1Y2UoKGFjYzogT2ZjVG9rZW5Db25maWdbXSwgY29pbikgPT4ge1xuICAgIGlmIChjb2luIGluc3RhbmNlb2YgT2ZjQ29pbikge1xuICAgICAgYWNjLnB1c2goZ2V0T2ZjVG9rZW5Db25maWcoY29pbikpO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCBbXSk7XG5cbmZ1bmN0aW9uIGdldENlbG9Ub2tlbkNvbmZpZyhjb2luOiBDZWxvQ29pbik6IENlbG9Ub2tlbkNvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogY29pbi5uYW1lLFxuICAgIGNvaW46IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ2NlbG8nIDogJ3RjZWxvJyxcbiAgICBuZXR3b3JrOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdNYWlubmV0JyA6ICdUZXN0bmV0JyxcbiAgICBuYW1lOiBjb2luLmZ1bGxOYW1lLFxuICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiBjb2luLmNvbnRyYWN0QWRkcmVzcy50b1N0cmluZygpLnRvTG93ZXJDYXNlKCksXG4gICAgZGVjaW1hbFBsYWNlczogY29pbi5kZWNpbWFsUGxhY2VzLFxuICB9O1xufVxuY29uc3QgZ2V0Rm9ybWF0dGVkQ2Vsb1Rva2VucyA9IChjdXN0b21Db2luTWFwID0gY29pbnMpID0+XG4gIGN1c3RvbUNvaW5NYXAucmVkdWNlKChhY2M6IENlbG9Ub2tlbkNvbmZpZ1tdLCBjb2luKSA9PiB7XG4gICAgaWYgKGNvaW4gaW5zdGFuY2VvZiBDZWxvQ29pbikge1xuICAgICAgYWNjLnB1c2goZ2V0Q2Vsb1Rva2VuQ29uZmlnKGNvaW4pKTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwgW10pO1xuXG5mdW5jdGlvbiBnZXRCc2NUb2tlbkNvbmZpZyhjb2luOiBCc2NDb2luKTogRXRoTGlrZVRva2VuQ29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBjb2luLm5hbWUsXG4gICAgY29pbjogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnYnNjJyA6ICd0YnNjJyxcbiAgICBuZXR3b3JrOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdNYWlubmV0JyA6ICdUZXN0bmV0JyxcbiAgICBuYW1lOiBjb2luLmZ1bGxOYW1lLFxuICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiBjb2luLmNvbnRyYWN0QWRkcmVzcy50b1N0cmluZygpLnRvTG93ZXJDYXNlKCksXG4gICAgZGVjaW1hbFBsYWNlczogY29pbi5kZWNpbWFsUGxhY2VzLFxuICB9O1xufVxuY29uc3QgZ2V0Rm9ybWF0dGVkQnNjVG9rZW5zID0gKGN1c3RvbUNvaW5NYXAgPSBjb2lucykgPT5cbiAgY3VzdG9tQ29pbk1hcC5yZWR1Y2UoKGFjYzogRXRoTGlrZVRva2VuQ29uZmlnW10sIGNvaW4pID0+IHtcbiAgICBpZiAoY29pbiBpbnN0YW5jZW9mIEJzY0NvaW4pIHtcbiAgICAgIGFjYy5wdXNoKGdldEJzY1Rva2VuQ29uZmlnKGNvaW4pKTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwgW10pO1xuXG5mdW5jdGlvbiBnZXRFb3NUb2tlbkNvbmZpZyhjb2luOiBFb3NDb2luKTogRW9zVG9rZW5Db25maWcge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGNvaW4ubmFtZSxcbiAgICBjb2luOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdlb3MnIDogJ3Rlb3MnLFxuICAgIG5ldHdvcms6IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ01haW5uZXQnIDogJ1Rlc3RuZXQnLFxuICAgIG5hbWU6IGNvaW4uZnVsbE5hbWUsXG4gICAgdG9rZW5Db250cmFjdEFkZHJlc3M6IGNvaW4uY29udHJhY3ROYW1lLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSxcbiAgICBkZWNpbWFsUGxhY2VzOiBjb2luLmRlY2ltYWxQbGFjZXMsXG4gICAgY29udHJhY3ROYW1lOiBjb2luLmNvbnRyYWN0TmFtZSxcbiAgICBjb250cmFjdEFkZHJlc3M6IGNvaW4uY29udHJhY3RBZGRyZXNzLFxuICB9O1xufVxuY29uc3QgZ2V0Rm9ybWF0dGVkRW9zVG9rZW5zID0gKGN1c3RvbUNvaW5NYXAgPSBjb2lucykgPT5cbiAgY3VzdG9tQ29pbk1hcC5yZWR1Y2UoKGFjYzogRW9zVG9rZW5Db25maWdbXSwgY29pbikgPT4ge1xuICAgIGlmIChjb2luIGluc3RhbmNlb2YgRW9zQ29pbikge1xuICAgICAgYWNjLnB1c2goZ2V0RW9zVG9rZW5Db25maWcoY29pbikpO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCBbXSk7XG5cbmZ1bmN0aW9uIGdldEF2YXhDVG9rZW5Db25maWcoY29pbjogQXZheEVSQzIwVG9rZW4pOiBBdmF4Y1Rva2VuQ29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBjb2luLm5hbWUsXG4gICAgY29pbjogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnYXZheGMnIDogJ3RhdmF4YycsXG4gICAgbmV0d29yazogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnTWFpbm5ldCcgOiAnVGVzdG5ldCcsXG4gICAgbmFtZTogY29pbi5mdWxsTmFtZSxcbiAgICB0b2tlbkNvbnRyYWN0QWRkcmVzczogY29pbi5jb250cmFjdEFkZHJlc3MudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLFxuICAgIGRlY2ltYWxQbGFjZXM6IGNvaW4uZGVjaW1hbFBsYWNlcyxcbiAgfTtcbn1cbmNvbnN0IGdldEZvcm1hdHRlZEF2YXhDVG9rZW5zID0gKGN1c3RvbUNvaW5NYXAgPSBjb2lucykgPT5cbiAgY3VzdG9tQ29pbk1hcC5yZWR1Y2UoKGFjYzogQXZheGNUb2tlbkNvbmZpZ1tdLCBjb2luKSA9PiB7XG4gICAgaWYgKGNvaW4gaW5zdGFuY2VvZiBBdmF4RVJDMjBUb2tlbikge1xuICAgICAgYWNjLnB1c2goZ2V0QXZheENUb2tlbkNvbmZpZyhjb2luKSk7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIFtdKTtcblxuZnVuY3Rpb24gZ2V0UG9seWdvblRva2VuQ29uZmlnKGNvaW46IFBvbHlnb25FUkMyMFRva2VuIHwgRXJjNzIxQ29pbiB8IEVyYzExNTVDb2luKTogRXRoTGlrZVRva2VuQ29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBjb2luLm5hbWUsXG4gICAgY29pbjogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAncG9seWdvbicgOiAndHBvbHlnb24nLFxuICAgIG5ldHdvcms6IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ01haW5uZXQnIDogJ1Rlc3RuZXQnLFxuICAgIG5hbWU6IGNvaW4uZnVsbE5hbWUsXG4gICAgdG9rZW5Db250cmFjdEFkZHJlc3M6IGNvaW4uY29udHJhY3RBZGRyZXNzLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSxcbiAgICBkZWNpbWFsUGxhY2VzOiBjb2luLmRlY2ltYWxQbGFjZXMsXG4gIH07XG59XG5jb25zdCBnZXRGb3JtYXR0ZWRQb2x5Z29uVG9rZW5zID0gKGN1c3RvbUNvaW5NYXAgPSBjb2lucykgPT5cbiAgY3VzdG9tQ29pbk1hcC5yZWR1Y2UoKGFjYzogRXRoTGlrZVRva2VuQ29uZmlnW10sIGNvaW4pID0+IHtcbiAgICBpZiAoXG4gICAgICBjb2luIGluc3RhbmNlb2YgUG9seWdvbkVSQzIwVG9rZW4gfHxcbiAgICAgICgoY29pbiBpbnN0YW5jZW9mIEVyYzcyMUNvaW4gfHwgY29pbiBpbnN0YW5jZW9mIEVyYzExNTVDb2luKSAmJiBjb2luLmZhbWlseSA9PT0gQ29pbkZhbWlseS5QT0xZR09OKVxuICAgICkge1xuICAgICAgYWNjLnB1c2goZ2V0UG9seWdvblRva2VuQ29uZmlnKGNvaW4pKTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwgW10pO1xuXG5mdW5jdGlvbiBnZXRTb25laXVtVG9rZW5Db25maWcoY29pbjogRXJjNzIxQ29pbiB8IEVyYzExNTVDb2luKTogRXRoTGlrZVRva2VuQ29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBjb2luLm5hbWUsXG4gICAgY29pbjogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnc29uZWl1bScgOiAndHNvbmVpdW0nLFxuICAgIG5ldHdvcms6IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ01haW5uZXQnIDogJ1Rlc3RuZXQnLFxuICAgIG5hbWU6IGNvaW4uZnVsbE5hbWUsXG4gICAgdG9rZW5Db250cmFjdEFkZHJlc3M6IGNvaW4uY29udHJhY3RBZGRyZXNzLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSxcbiAgICBkZWNpbWFsUGxhY2VzOiBjb2luLmRlY2ltYWxQbGFjZXMsXG4gIH07XG59XG5jb25zdCBnZXRGb3JtYXR0ZWRTb25laXVtVG9rZW5zID0gKGN1c3RvbUNvaW5NYXAgPSBjb2lucykgPT5cbiAgY3VzdG9tQ29pbk1hcC5yZWR1Y2UoKGFjYzogRXRoTGlrZVRva2VuQ29uZmlnW10sIGNvaW4pID0+IHtcbiAgICBpZiAoKGNvaW4gaW5zdGFuY2VvZiBFcmM3MjFDb2luIHx8IGNvaW4gaW5zdGFuY2VvZiBFcmMxMTU1Q29pbikgJiYgY29pbi5mYW1pbHkgPT09IENvaW5GYW1pbHkuU09ORUlVTSkge1xuICAgICAgYWNjLnB1c2goZ2V0U29uZWl1bVRva2VuQ29uZmlnKGNvaW4pKTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwgW10pO1xuXG5mdW5jdGlvbiBnZXRFcmM3MjFUb2tlbkNvbmZpZyhjb2luOiBFcmM3MjFDb2luKTogRXRoTGlrZVRva2VuQ29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBjb2luLm5hbWUsXG4gICAgY29pbjogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnZXRoJyA6ICdodGV0aCcsXG4gICAgbmV0d29yazogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnTWFpbm5ldCcgOiAnVGVzdG5ldCcsXG4gICAgbmFtZTogY29pbi5mdWxsTmFtZSxcbiAgICB0b2tlbkNvbnRyYWN0QWRkcmVzczogY29pbi5jb250cmFjdEFkZHJlc3MudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLFxuICAgIGRlY2ltYWxQbGFjZXM6IGNvaW4uZGVjaW1hbFBsYWNlcyxcbiAgfTtcbn1cbmNvbnN0IGdldEZvcm1hdHRlZEVyYzcyMVRva2VucyA9IChjdXN0b21Db2luTWFwID0gY29pbnMpID0+XG4gIGN1c3RvbUNvaW5NYXAucmVkdWNlKChhY2M6IEV0aExpa2VUb2tlbkNvbmZpZ1tdLCBjb2luKSA9PiB7XG4gICAgaWYgKGNvaW4gaW5zdGFuY2VvZiBFcmM3MjFDb2luICYmIGNvaW4uZmFtaWx5ID09PSBDb2luRmFtaWx5LkVUSCkge1xuICAgICAgYWNjLnB1c2goZ2V0RXJjNzIxVG9rZW5Db25maWcoY29pbikpO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCBbXSk7XG5cbmZ1bmN0aW9uIGdldEFyYmV0aFRva2VuQ29uZmlnKGNvaW46IEFyYmV0aEVSQzIwVG9rZW4pOiBFdGhMaWtlVG9rZW5Db25maWcge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGNvaW4ubmFtZSxcbiAgICBjb2luOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdhcmJldGgnIDogJ3RhcmJldGgnLFxuICAgIG5ldHdvcms6IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ01haW5uZXQnIDogJ1Rlc3RuZXQnLFxuICAgIG5hbWU6IGNvaW4uZnVsbE5hbWUsXG4gICAgdG9rZW5Db250cmFjdEFkZHJlc3M6IGNvaW4uY29udHJhY3RBZGRyZXNzLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSxcbiAgICBkZWNpbWFsUGxhY2VzOiBjb2luLmRlY2ltYWxQbGFjZXMsXG4gIH07XG59XG5jb25zdCBnZXRGb3JtYXR0ZWRBcmJldGhUb2tlbnMgPSAoY3VzdG9tQ29pbk1hcCA9IGNvaW5zKSA9PlxuICBjdXN0b21Db2luTWFwLnJlZHVjZSgoYWNjOiBFdGhMaWtlVG9rZW5Db25maWdbXSwgY29pbikgPT4ge1xuICAgIGlmIChjb2luIGluc3RhbmNlb2YgQXJiZXRoRVJDMjBUb2tlbikge1xuICAgICAgYWNjLnB1c2goZ2V0QXJiZXRoVG9rZW5Db25maWcoY29pbikpO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCBbXSk7XG5cbmZ1bmN0aW9uIGdldE9wZXRoVG9rZW5Db25maWcoY29pbjogT3BldGhFUkMyMFRva2VuKTogRXRoTGlrZVRva2VuQ29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBjb2luLm5hbWUsXG4gICAgY29pbjogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnb3BldGgnIDogJ3RvcGV0aCcsXG4gICAgbmV0d29yazogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnTWFpbm5ldCcgOiAnVGVzdG5ldCcsXG4gICAgbmFtZTogY29pbi5mdWxsTmFtZSxcbiAgICB0b2tlbkNvbnRyYWN0QWRkcmVzczogY29pbi5jb250cmFjdEFkZHJlc3MudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLFxuICAgIGRlY2ltYWxQbGFjZXM6IGNvaW4uZGVjaW1hbFBsYWNlcyxcbiAgfTtcbn1cbmNvbnN0IGdldEZvcm1hdHRlZE9wZXRoVG9rZW5zID0gKGN1c3RvbUNvaW5NYXAgPSBjb2lucykgPT5cbiAgY3VzdG9tQ29pbk1hcC5yZWR1Y2UoKGFjYzogRXRoTGlrZVRva2VuQ29uZmlnW10sIGNvaW4pID0+IHtcbiAgICBpZiAoY29pbiBpbnN0YW5jZW9mIE9wZXRoRVJDMjBUb2tlbikge1xuICAgICAgYWNjLnB1c2goZ2V0T3BldGhUb2tlbkNvbmZpZyhjb2luKSk7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIFtdKTtcblxuZnVuY3Rpb24gZ2V0QmFzZWV0aFRva2VuQ29uZmlnKGNvaW46IEV0aExpa2VFUkMyMFRva2VuKTogRXRoTGlrZVRva2VuQ29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBjb2luLm5hbWUsXG4gICAgY29pbjogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnYmFzZWV0aCcgOiAndGJhc2VldGgnLFxuICAgIG5ldHdvcms6IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ01haW5uZXQnIDogJ1Rlc3RuZXQnLFxuICAgIG5hbWU6IGNvaW4uZnVsbE5hbWUsXG4gICAgdG9rZW5Db250cmFjdEFkZHJlc3M6IGNvaW4uY29udHJhY3RBZGRyZXNzLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSxcbiAgICBkZWNpbWFsUGxhY2VzOiBjb2luLmRlY2ltYWxQbGFjZXMsXG4gIH07XG59XG5jb25zdCBnZXRGb3JtYXR0ZWRCYXNlZXRoVG9rZW5zID0gKGN1c3RvbUNvaW5NYXAgPSBjb2lucykgPT5cbiAgY3VzdG9tQ29pbk1hcC5yZWR1Y2UoKGFjYzogRXRoTGlrZVRva2VuQ29uZmlnW10sIGNvaW4pID0+IHtcbiAgICBpZiAoY29pbiBpbnN0YW5jZW9mIEV0aExpa2VFUkMyMFRva2VuICYmIChjb2luLm5hbWUuaW5jbHVkZXMoJ2Jhc2VldGg6JykgfHwgY29pbi5uYW1lLmluY2x1ZGVzKCd0YmFzZWV0aDonKSkpIHtcbiAgICAgIGFjYy5wdXNoKGdldEJhc2VldGhUb2tlbkNvbmZpZyhjb2luKSk7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIFtdKTtcblxuZnVuY3Rpb24gZ2V0T2dUb2tlbkNvbmZpZyhjb2luOiBFdGhMaWtlRVJDMjBUb2tlbik6IEV0aExpa2VUb2tlbkNvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogY29pbi5uYW1lLFxuICAgIGNvaW46IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ29nJyA6ICd0b2cnLFxuICAgIG5ldHdvcms6IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ01haW5uZXQnIDogJ1Rlc3RuZXQnLFxuICAgIG5hbWU6IGNvaW4uZnVsbE5hbWUsXG4gICAgdG9rZW5Db250cmFjdEFkZHJlc3M6IGNvaW4uY29udHJhY3RBZGRyZXNzLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSxcbiAgICBkZWNpbWFsUGxhY2VzOiBjb2luLmRlY2ltYWxQbGFjZXMsXG4gIH07XG59XG5jb25zdCBnZXRGb3JtYXR0ZWRPZ1Rva2VucyA9IChjdXN0b21Db2luTWFwID0gY29pbnMpID0+XG4gIGN1c3RvbUNvaW5NYXAucmVkdWNlKChhY2M6IEV0aExpa2VUb2tlbkNvbmZpZ1tdLCBjb2luKSA9PiB7XG4gICAgaWYgKGNvaW4gaW5zdGFuY2VvZiBFdGhMaWtlRVJDMjBUb2tlbiAmJiAoY29pbi5uYW1lLmluY2x1ZGVzKCdvZzonKSB8fCBjb2luLm5hbWUuaW5jbHVkZXMoJ3RvZzonKSkpIHtcbiAgICAgIGFjYy5wdXNoKGdldE9nVG9rZW5Db25maWcoY29pbikpO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCBbXSk7XG5cbmZ1bmN0aW9uIGdldFNlaWV2bVRva2VuQ29uZmlnKGNvaW46IEV0aExpa2VFUkMyMFRva2VuKTogRXRoTGlrZVRva2VuQ29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBjb2luLm5hbWUsXG4gICAgY29pbjogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnc2VpZXZtJyA6ICd0c2VpZXZtJyxcbiAgICBuZXR3b3JrOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdNYWlubmV0JyA6ICdUZXN0bmV0JyxcbiAgICBuYW1lOiBjb2luLmZ1bGxOYW1lLFxuICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiBjb2luLmNvbnRyYWN0QWRkcmVzcy50b1N0cmluZygpLnRvTG93ZXJDYXNlKCksXG4gICAgZGVjaW1hbFBsYWNlczogY29pbi5kZWNpbWFsUGxhY2VzLFxuICB9O1xufVxuY29uc3QgZ2V0Rm9ybWF0dGVkU2VpZXZtVG9rZW5zID0gKGN1c3RvbUNvaW5NYXAgPSBjb2lucykgPT5cbiAgY3VzdG9tQ29pbk1hcC5yZWR1Y2UoKGFjYzogRXRoTGlrZVRva2VuQ29uZmlnW10sIGNvaW4pID0+IHtcbiAgICBpZiAoY29pbiBpbnN0YW5jZW9mIEV0aExpa2VFUkMyMFRva2VuICYmIChjb2luLm5hbWUuaW5jbHVkZXMoJ3NlaWV2bTonKSB8fCBjb2luLm5hbWUuaW5jbHVkZXMoJ3RzZWlldm06JykpKSB7XG4gICAgICBhY2MucHVzaChnZXRTZWlldm1Ub2tlbkNvbmZpZyhjb2luKSk7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIFtdKTtcblxuZnVuY3Rpb24gZ2V0TW9uYWRUb2tlbkNvbmZpZyhjb2luOiBFdGhMaWtlRVJDMjBUb2tlbik6IEV0aExpa2VUb2tlbkNvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogY29pbi5uYW1lLFxuICAgIGNvaW46IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ21vbicgOiAndG1vbicsXG4gICAgbmV0d29yazogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnTWFpbm5ldCcgOiAnVGVzdG5ldCcsXG4gICAgbmFtZTogY29pbi5mdWxsTmFtZSxcbiAgICB0b2tlbkNvbnRyYWN0QWRkcmVzczogY29pbi5jb250cmFjdEFkZHJlc3MudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLFxuICAgIGRlY2ltYWxQbGFjZXM6IGNvaW4uZGVjaW1hbFBsYWNlcyxcbiAgfTtcbn1cbmNvbnN0IGdldEZvcm1hdHRlZE1vbmFkVG9rZW5zID0gKGN1c3RvbUNvaW5NYXAgPSBjb2lucykgPT5cbiAgY3VzdG9tQ29pbk1hcC5yZWR1Y2UoKGFjYzogRXRoTGlrZVRva2VuQ29uZmlnW10sIGNvaW4pID0+IHtcbiAgICBpZiAoY29pbiBpbnN0YW5jZW9mIEV0aExpa2VFUkMyMFRva2VuICYmIChjb2luLm5hbWUuaW5jbHVkZXMoJ21vbjonKSB8fCBjb2luLm5hbWUuaW5jbHVkZXMoJ3Rtb246JykpKSB7XG4gICAgICBhY2MucHVzaChnZXRNb25hZFRva2VuQ29uZmlnKGNvaW4pKTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwgW10pO1xuXG5mdW5jdGlvbiBnZXRYZGNUb2tlbkNvbmZpZyhjb2luOiBFdGhMaWtlRVJDMjBUb2tlbik6IEV0aExpa2VUb2tlbkNvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogY29pbi5uYW1lLFxuICAgIGNvaW46IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ3hkYycgOiAndHhkYycsXG4gICAgbmV0d29yazogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnTWFpbm5ldCcgOiAnVGVzdG5ldCcsXG4gICAgbmFtZTogY29pbi5mdWxsTmFtZSxcbiAgICB0b2tlbkNvbnRyYWN0QWRkcmVzczogY29pbi5jb250cmFjdEFkZHJlc3MudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLFxuICAgIGRlY2ltYWxQbGFjZXM6IGNvaW4uZGVjaW1hbFBsYWNlcyxcbiAgfTtcbn1cblxuY29uc3QgZ2V0Rm9ybWF0dGVkWGRjVG9rZW5zID0gKGN1c3RvbUNvaW5NYXAgPSBjb2lucykgPT5cbiAgY3VzdG9tQ29pbk1hcC5yZWR1Y2UoKGFjYzogRXRoTGlrZVRva2VuQ29uZmlnW10sIGNvaW4pID0+IHtcbiAgICBpZiAoY29pbiBpbnN0YW5jZW9mIEV0aExpa2VFUkMyMFRva2VuICYmIChjb2luLm5hbWUuaW5jbHVkZXMoJ3hkYzonKSB8fCBjb2luLm5hbWUuaW5jbHVkZXMoJ3R4ZGM6JykpKSB7XG4gICAgICBhY2MucHVzaChnZXRYZGNUb2tlbkNvbmZpZyhjb2luKSk7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIFtdKTtcblxuZnVuY3Rpb24gZ2V0Rmxvd1Rva2VuQ29uZmlnKGNvaW46IEV0aExpa2VFUkMyMFRva2VuKTogRXRoTGlrZVRva2VuQ29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBjb2luLm5hbWUsXG4gICAgY29pbjogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnZmxvdycgOiAndGZsb3cnLFxuICAgIG5ldHdvcms6IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ01haW5uZXQnIDogJ1Rlc3RuZXQnLFxuICAgIG5hbWU6IGNvaW4uZnVsbE5hbWUsXG4gICAgdG9rZW5Db250cmFjdEFkZHJlc3M6IGNvaW4uY29udHJhY3RBZGRyZXNzLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSxcbiAgICBkZWNpbWFsUGxhY2VzOiBjb2luLmRlY2ltYWxQbGFjZXMsXG4gIH07XG59XG5jb25zdCBnZXRGb3JtYXR0ZWRGbG93VG9rZW5zID0gKGN1c3RvbUNvaW5NYXAgPSBjb2lucykgPT5cbiAgY3VzdG9tQ29pbk1hcC5yZWR1Y2UoKGFjYzogRXRoTGlrZVRva2VuQ29uZmlnW10sIGNvaW4pID0+IHtcbiAgICBpZiAoY29pbiBpbnN0YW5jZW9mIEV0aExpa2VFUkMyMFRva2VuICYmIChjb2luLm5hbWUuaW5jbHVkZXMoJ2Zsb3c6JykgfHwgY29pbi5uYW1lLmluY2x1ZGVzKCd0ZmxvdzonKSkpIHtcbiAgICAgIGFjYy5wdXNoKGdldEZsb3dUb2tlbkNvbmZpZyhjb2luKSk7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIFtdKTtcblxuZnVuY3Rpb24gZ2V0TGluZWFldGhUb2tlbkNvbmZpZyhjb2luOiBFdGhMaWtlRVJDMjBUb2tlbik6IEV0aExpa2VUb2tlbkNvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogY29pbi5uYW1lLFxuICAgIGNvaW46IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ2xpbmVhZXRoJyA6ICd0bGluZWFldGgnLFxuICAgIG5ldHdvcms6IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ01haW5uZXQnIDogJ1Rlc3RuZXQnLFxuICAgIG5hbWU6IGNvaW4uZnVsbE5hbWUsXG4gICAgdG9rZW5Db250cmFjdEFkZHJlc3M6IGNvaW4uY29udHJhY3RBZGRyZXNzLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSxcbiAgICBkZWNpbWFsUGxhY2VzOiBjb2luLmRlY2ltYWxQbGFjZXMsXG4gIH07XG59XG5jb25zdCBnZXRGb3JtYXR0ZWRMaW5lYWV0aFRva2VucyA9IChjdXN0b21Db2luTWFwID0gY29pbnMpID0+XG4gIGN1c3RvbUNvaW5NYXAucmVkdWNlKChhY2M6IEV0aExpa2VUb2tlbkNvbmZpZ1tdLCBjb2luKSA9PiB7XG4gICAgaWYgKGNvaW4gaW5zdGFuY2VvZiBFdGhMaWtlRVJDMjBUb2tlbiAmJiAoY29pbi5uYW1lLmluY2x1ZGVzKCdsaW5lYWV0aDonKSB8fCBjb2luLm5hbWUuaW5jbHVkZXMoJ3RsaW5lYWV0aDonKSkpIHtcbiAgICAgIGFjYy5wdXNoKGdldExpbmVhZXRoVG9rZW5Db25maWcoY29pbikpO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCBbXSk7XG5cbmZ1bmN0aW9uIGdldFprZXRoVG9rZW5Db25maWcoY29pbjogWmtldGhFUkMyMFRva2VuKTogRXRoTGlrZVRva2VuQ29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBjb2luLm5hbWUsXG4gICAgY29pbjogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnemtldGgnIDogJ3R6a2V0aCcsXG4gICAgbmV0d29yazogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnTWFpbm5ldCcgOiAnVGVzdG5ldCcsXG4gICAgbmFtZTogY29pbi5mdWxsTmFtZSxcbiAgICB0b2tlbkNvbnRyYWN0QWRkcmVzczogY29pbi5jb250cmFjdEFkZHJlc3MudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLFxuICAgIGRlY2ltYWxQbGFjZXM6IGNvaW4uZGVjaW1hbFBsYWNlcyxcbiAgfTtcbn1cbmNvbnN0IGdldEZvcm1hdHRlZFprZXRoVG9rZW5zID0gKGN1c3RvbUNvaW5NYXAgPSBjb2lucykgPT5cbiAgY3VzdG9tQ29pbk1hcC5yZWR1Y2UoKGFjYzogRXRoTGlrZVRva2VuQ29uZmlnW10sIGNvaW4pID0+IHtcbiAgICBpZiAoY29pbiBpbnN0YW5jZW9mIFprZXRoRVJDMjBUb2tlbikge1xuICAgICAgYWNjLnB1c2goZ2V0WmtldGhUb2tlbkNvbmZpZyhjb2luKSk7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIFtdKTtcblxuZnVuY3Rpb24gZ2V0QmVyYVRva2VuQ29uZmlnKGNvaW46IEJlcmFFUkMyMFRva2VuKTogRXRoTGlrZVRva2VuQ29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBjb2luLm5hbWUsXG4gICAgY29pbjogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnYmVyYScgOiAndGJlcmEnLFxuICAgIG5ldHdvcms6IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ01haW5uZXQnIDogJ1Rlc3RuZXQnLFxuICAgIG5hbWU6IGNvaW4uZnVsbE5hbWUsXG4gICAgdG9rZW5Db250cmFjdEFkZHJlc3M6IGNvaW4uY29udHJhY3RBZGRyZXNzLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSxcbiAgICBkZWNpbWFsUGxhY2VzOiBjb2luLmRlY2ltYWxQbGFjZXMsXG4gIH07XG59XG5jb25zdCBnZXRGb3JtYXR0ZWRCZXJhVG9rZW5zID0gKGN1c3RvbUNvaW5NYXAgPSBjb2lucykgPT5cbiAgY3VzdG9tQ29pbk1hcC5yZWR1Y2UoKGFjYzogRXRoTGlrZVRva2VuQ29uZmlnW10sIGNvaW4pID0+IHtcbiAgICBpZiAoY29pbiBpbnN0YW5jZW9mIEJlcmFFUkMyMFRva2VuKSB7XG4gICAgICBhY2MucHVzaChnZXRCZXJhVG9rZW5Db25maWcoY29pbikpO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCBbXSk7XG5cbmZ1bmN0aW9uIGdldENvcmVkYW9Ub2tlbkNvbmZpZyhjb2luOiBDb3JlZGFvRVJDMjBUb2tlbik6IEV0aExpa2VUb2tlbkNvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogY29pbi5uYW1lLFxuICAgIGNvaW46IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ2NvcmVkYW8nIDogJ3Rjb3JlZGFvJyxcbiAgICBuZXR3b3JrOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdNYWlubmV0JyA6ICdUZXN0bmV0JyxcbiAgICBuYW1lOiBjb2luLmZ1bGxOYW1lLFxuICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiBjb2luLmNvbnRyYWN0QWRkcmVzcy50b1N0cmluZygpLnRvTG93ZXJDYXNlKCksXG4gICAgZGVjaW1hbFBsYWNlczogY29pbi5kZWNpbWFsUGxhY2VzLFxuICB9O1xufVxuY29uc3QgZ2V0Rm9ybWF0dGVkQ29yZWRhb1Rva2VucyA9IChjdXN0b21Db2luTWFwID0gY29pbnMpID0+XG4gIGN1c3RvbUNvaW5NYXAucmVkdWNlKChhY2M6IEV0aExpa2VUb2tlbkNvbmZpZ1tdLCBjb2luKSA9PiB7XG4gICAgaWYgKGNvaW4gaW5zdGFuY2VvZiBDb3JlZGFvRVJDMjBUb2tlbikge1xuICAgICAgYWNjLnB1c2goZ2V0Q29yZWRhb1Rva2VuQ29uZmlnKGNvaW4pKTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwgW10pO1xuXG5mdW5jdGlvbiBnZXRXb3JsZFRva2VuQ29uZmlnKGNvaW46IFdvcmxkRVJDMjBUb2tlbik6IEV0aExpa2VUb2tlbkNvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogY29pbi5uYW1lLFxuICAgIGNvaW46IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ3dvcmxkJyA6ICd0d29ybGQnLFxuICAgIG5ldHdvcms6IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ01haW5uZXQnIDogJ1Rlc3RuZXQnLFxuICAgIG5hbWU6IGNvaW4uZnVsbE5hbWUsXG4gICAgdG9rZW5Db250cmFjdEFkZHJlc3M6IGNvaW4uY29udHJhY3RBZGRyZXNzLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSxcbiAgICBkZWNpbWFsUGxhY2VzOiBjb2luLmRlY2ltYWxQbGFjZXMsXG4gIH07XG59XG5jb25zdCBnZXRGb3JtYXR0ZWRXb3JsZFRva2VucyA9IChjdXN0b21Db2luTWFwID0gY29pbnMpID0+XG4gIGN1c3RvbUNvaW5NYXAucmVkdWNlKChhY2M6IEV0aExpa2VUb2tlbkNvbmZpZ1tdLCBjb2luKSA9PiB7XG4gICAgaWYgKGNvaW4gaW5zdGFuY2VvZiBXb3JsZEVSQzIwVG9rZW4pIHtcbiAgICAgIGFjYy5wdXNoKGdldFdvcmxkVG9rZW5Db25maWcoY29pbikpO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCBbXSk7XG5cbmZ1bmN0aW9uIGdldEZsclRva2VuQ29uZmlnKGNvaW46IEZsckVSQzIwVG9rZW4pOiBFdGhMaWtlVG9rZW5Db25maWcge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGNvaW4ubmFtZSxcbiAgICBjb2luOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdmbHInIDogJ3RmbHInLFxuICAgIG5ldHdvcms6IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ01haW5uZXQnIDogJ1Rlc3RuZXQnLFxuICAgIG5hbWU6IGNvaW4uZnVsbE5hbWUsXG4gICAgdG9rZW5Db250cmFjdEFkZHJlc3M6IGNvaW4uY29udHJhY3RBZGRyZXNzLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSxcbiAgICBkZWNpbWFsUGxhY2VzOiBjb2luLmRlY2ltYWxQbGFjZXMsXG4gIH07XG59XG5jb25zdCBnZXRGb3JtYXR0ZWRGbHJUb2tlbnMgPSAoY3VzdG9tQ29pbk1hcCA9IGNvaW5zKSA9PlxuICBjdXN0b21Db2luTWFwLnJlZHVjZSgoYWNjOiBFdGhMaWtlVG9rZW5Db25maWdbXSwgY29pbikgPT4ge1xuICAgIGlmIChjb2luIGluc3RhbmNlb2YgRmxyRVJDMjBUb2tlbikge1xuICAgICAgYWNjLnB1c2goZ2V0RmxyVG9rZW5Db25maWcoY29pbikpO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCBbXSk7XG5cbmZ1bmN0aW9uIGdldFNvbFRva2VuQ29uZmlnKGNvaW46IFNvbENvaW4pOiBTb2xUb2tlbkNvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogY29pbi5uYW1lLFxuICAgIGNvaW46IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ3NvbCcgOiAndHNvbCcsXG4gICAgbmV0d29yazogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnTWFpbm5ldCcgOiAnVGVzdG5ldCcsXG4gICAgbmFtZTogY29pbi5mdWxsTmFtZSxcbiAgICB0b2tlbkFkZHJlc3M6IGNvaW4udG9rZW5BZGRyZXNzLFxuICAgIGRlY2ltYWxQbGFjZXM6IGNvaW4uZGVjaW1hbFBsYWNlcyxcbiAgICBjb250cmFjdEFkZHJlc3M6IGNvaW4uY29udHJhY3RBZGRyZXNzLFxuICB9O1xufVxuY29uc3QgZ2V0Rm9ybWF0dGVkU29sVG9rZW5zID0gKGN1c3RvbUNvaW5NYXAgPSBjb2lucykgPT5cbiAgY3VzdG9tQ29pbk1hcC5yZWR1Y2UoKGFjYzogU29sVG9rZW5Db25maWdbXSwgY29pbikgPT4ge1xuICAgIGlmIChjb2luIGluc3RhbmNlb2YgU29sQ29pbikge1xuICAgICAgYWNjLnB1c2goZ2V0U29sVG9rZW5Db25maWcoY29pbikpO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCBbXSk7XG5cbmZ1bmN0aW9uIGdldEFsZ29Ub2tlbkNvbmZpZyhjb2luOiBBbGdvQ29pbik6IEFsZ29Ub2tlbkNvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogY29pbi5uYW1lLFxuICAgIGNvaW46IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ2FsZ28nIDogJ3RhbGdvJyxcbiAgICBhbGlhczogY29pbi5hbGlhcyxcbiAgICBuZXR3b3JrOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdNYWlubmV0JyA6ICdUZXN0bmV0JyxcbiAgICBuYW1lOiBjb2luLmZ1bGxOYW1lLFxuICAgIGRlY2ltYWxQbGFjZXM6IGNvaW4uZGVjaW1hbFBsYWNlcyxcbiAgfTtcbn1cbmV4cG9ydCBjb25zdCBnZXRGb3JtYXR0ZWRBbGdvVG9rZW5zID0gKGN1c3RvbUNvaW5NYXAgPSBjb2lucykgPT5cbiAgY3VzdG9tQ29pbk1hcC5yZWR1Y2UoKGFjYzogQWxnb1Rva2VuQ29uZmlnW10sIGNvaW4pID0+IHtcbiAgICBpZiAoY29pbiBpbnN0YW5jZW9mIEFsZ29Db2luKSB7XG4gICAgICBhY2MucHVzaChnZXRBbGdvVG9rZW5Db25maWcoY29pbikpO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCBbXSk7XG5cbmZ1bmN0aW9uIGdldEhiYXJUb2tlbkNvbmZpZyhjb2luOiBIZWRlcmFUb2tlbik6IEhiYXJUb2tlbkNvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogY29pbi5uYW1lLFxuICAgIGNvaW46IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ2hiYXInIDogJ3RoYmFyJyxcbiAgICBuZXR3b3JrOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdNYWlubmV0JyA6ICdUZXN0bmV0JyxcbiAgICBuYW1lOiBjb2luLmZ1bGxOYW1lLFxuICAgIGRlY2ltYWxQbGFjZXM6IGNvaW4uZGVjaW1hbFBsYWNlcyxcbiAgICBub2RlQWNjb3VudElkOiBjb2luLm5vZGVBY2NvdW50SWQsXG4gICAgdG9rZW5JZDogY29pbi50b2tlbklkLFxuICAgIGNvbnRyYWN0QWRkcmVzczogY29pbi5jb250cmFjdEFkZHJlc3MsXG4gIH07XG59XG5jb25zdCBnZXRGb3JtYXR0ZWRIYmFyVG9rZW5zID0gKGN1c3RvbUNvaW5NYXAgPSBjb2lucykgPT5cbiAgY3VzdG9tQ29pbk1hcC5yZWR1Y2UoKGFjYzogSGJhclRva2VuQ29uZmlnW10sIGNvaW4pID0+IHtcbiAgICBpZiAoY29pbiBpbnN0YW5jZW9mIEhlZGVyYVRva2VuKSB7XG4gICAgICBhY2MucHVzaChnZXRIYmFyVG9rZW5Db25maWcoY29pbikpO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCBbXSk7XG5cbmZ1bmN0aW9uIGdldEFkYVRva2VuQ29uZmlnKGNvaW46IEFkYVRva2VuKTogQWRhVG9rZW5Db25maWcge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGNvaW4ubmFtZSxcbiAgICBjb2luOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdhZGEnIDogJ3RhZGEnLFxuICAgIG5ldHdvcms6IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ01haW5uZXQnIDogJ1Rlc3RuZXQnLFxuICAgIG5hbWU6IGNvaW4uZnVsbE5hbWUsXG4gICAgcG9saWN5SWQ6IGNvaW4ucG9saWN5SWQsXG4gICAgYXNzZXROYW1lOiBjb2luLmFzc2V0TmFtZSxcbiAgICBkZWNpbWFsUGxhY2VzOiBjb2luLmRlY2ltYWxQbGFjZXMsXG4gICAgY29udHJhY3RBZGRyZXNzOiBjb2luLmNvbnRyYWN0QWRkcmVzcyxcbiAgfTtcbn1cbmNvbnN0IGdldEZvcm1hdHRlZEFkYVRva2VucyA9IChjdXN0b21Db2luTWFwID0gY29pbnMpID0+XG4gIGN1c3RvbUNvaW5NYXAucmVkdWNlKChhY2M6IEFkYVRva2VuQ29uZmlnW10sIGNvaW4pID0+IHtcbiAgICBpZiAoY29pbiBpbnN0YW5jZW9mIEFkYVRva2VuKSB7XG4gICAgICBhY2MucHVzaChnZXRBZGFUb2tlbkNvbmZpZyhjb2luKSk7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIFtdKTtcblxuZnVuY3Rpb24gZ2V0VHJ4VG9rZW5Db25maWcoY29pbjogVHJvbkVyYzIwQ29pbik6IFRyeFRva2VuQ29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBjb2luLm5hbWUsXG4gICAgY29pbjogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAndHJ4JyA6ICd0dHJ4JyxcbiAgICBuZXR3b3JrOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdNYWlubmV0JyA6ICdUZXN0bmV0JyxcbiAgICBuYW1lOiBjb2luLmZ1bGxOYW1lLFxuICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiBjb2luLmNvbnRyYWN0QWRkcmVzcy50b1N0cmluZygpLnRvTG93ZXJDYXNlKCksXG4gICAgZGVjaW1hbFBsYWNlczogY29pbi5kZWNpbWFsUGxhY2VzLFxuICB9O1xufVxuY29uc3QgZ2V0Rm9ybWF0dGVkVHJ4VG9rZW5zID0gKGN1c3RvbUNvaW5NYXAgPSBjb2lucykgPT5cbiAgY3VzdG9tQ29pbk1hcC5yZWR1Y2UoKGFjYzogVHJ4VG9rZW5Db25maWdbXSwgY29pbikgPT4ge1xuICAgIGlmIChjb2luIGluc3RhbmNlb2YgVHJvbkVyYzIwQ29pbikge1xuICAgICAgYWNjLnB1c2goZ2V0VHJ4VG9rZW5Db25maWcoY29pbikpO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCBbXSk7XG5cbmZ1bmN0aW9uIGdldFhycFRva2VuQ29uZmlnKGNvaW46IFhycENvaW4pOiBYcnBUb2tlbkNvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogY29pbi5uYW1lLFxuICAgIGNvaW46IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ3hycCcgOiAndHhycCcsXG4gICAgbmV0d29yazogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnTWFpbm5ldCcgOiAnVGVzdG5ldCcsXG4gICAgbmFtZTogY29pbi5mdWxsTmFtZSxcbiAgICBkZWNpbWFsUGxhY2VzOiBjb2luLmRlY2ltYWxQbGFjZXMsXG4gICAgaXNzdWVyQWRkcmVzczogY29pbi5pc3N1ZXJBZGRyZXNzLFxuICAgIGN1cnJlbmN5Q29kZTogY29pbi5jdXJyZW5jeUNvZGUsXG4gICAgZG9tYWluOiBjb2luLmRvbWFpbixcbiAgICBjb250cmFjdEFkZHJlc3M6IGNvaW4uY29udHJhY3RBZGRyZXNzLFxuICB9O1xufVxuY29uc3QgZ2V0Rm9ybWF0dGVkWHJwVG9rZW5zID0gKGN1c3RvbUNvaW5NYXAgPSBjb2lucykgPT5cbiAgY3VzdG9tQ29pbk1hcC5yZWR1Y2UoKGFjYzogWHJwVG9rZW5Db25maWdbXSwgY29pbikgPT4ge1xuICAgIGlmIChjb2luIGluc3RhbmNlb2YgWHJwQ29pbikge1xuICAgICAgYWNjLnB1c2goZ2V0WHJwVG9rZW5Db25maWcoY29pbikpO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCBbXSk7XG5cbmZ1bmN0aW9uIGdldFN1aVRva2VuQ29uZmlnKGNvaW46IFN1aUNvaW4pOiBTdWlUb2tlbkNvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogY29pbi5uYW1lLFxuICAgIGNvaW46IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ3N1aScgOiAndHN1aScsXG4gICAgbmV0d29yazogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnTWFpbm5ldCcgOiAnVGVzdG5ldCcsXG4gICAgbmFtZTogY29pbi5mdWxsTmFtZSxcbiAgICBkZWNpbWFsUGxhY2VzOiBjb2luLmRlY2ltYWxQbGFjZXMsXG4gICAgcGFja2FnZUlkOiBjb2luLnBhY2thZ2VJZCxcbiAgICBtb2R1bGU6IGNvaW4ubW9kdWxlLFxuICAgIHN5bWJvbDogY29pbi5zeW1ib2wsXG4gICAgY29udHJhY3RBZGRyZXNzOiBjb2luLmNvbnRyYWN0QWRkcmVzcyxcbiAgfTtcbn1cbmNvbnN0IGdldEZvcm1hdHRlZFN1aVRva2VucyA9IChjdXN0b21Db2luTWFwID0gY29pbnMpID0+XG4gIGN1c3RvbUNvaW5NYXAucmVkdWNlKChhY2M6IFN1aVRva2VuQ29uZmlnW10sIGNvaW4pID0+IHtcbiAgICBpZiAoY29pbiBpbnN0YW5jZW9mIFN1aUNvaW4pIHtcbiAgICAgIGFjYy5wdXNoKGdldFN1aVRva2VuQ29uZmlnKGNvaW4pKTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwgW10pO1xuXG5mdW5jdGlvbiBnZXRUYW9Ub2tlbkNvbmZpZyhjb2luOiBUYW9Db2luKTogVGFvVG9rZW5Db25maWcge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGNvaW4ubmFtZSxcbiAgICBjb2luOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICd0YW8nIDogJ3R0YW8nLFxuICAgIG5ldHdvcms6IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ01haW5uZXQnIDogJ1Rlc3RuZXQnLFxuICAgIG5hbWU6IGNvaW4uZnVsbE5hbWUsXG4gICAgZGVjaW1hbFBsYWNlczogY29pbi5kZWNpbWFsUGxhY2VzLFxuICAgIHN1Ym5ldElkOiBjb2luLnN1Ym5ldElkLFxuICB9O1xufVxuY29uc3QgZ2V0Rm9ybWF0dGVkVGFvVG9rZW5zID0gKGN1c3RvbUNvaW5NYXAgPSBjb2lucykgPT5cbiAgY3VzdG9tQ29pbk1hcC5yZWR1Y2UoKGFjYzogVGFvVG9rZW5Db25maWdbXSwgY29pbikgPT4ge1xuICAgIGlmIChjb2luIGluc3RhbmNlb2YgVGFvQ29pbikge1xuICAgICAgYWNjLnB1c2goZ2V0VGFvVG9rZW5Db25maWcoY29pbikpO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCBbXSk7XG5cbmZ1bmN0aW9uIGdldFBvbHl4VG9rZW5Db25maWcoY29pbjogUG9seXhDb2luKTogUG9seXhUb2tlbkNvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogY29pbi5uYW1lLFxuICAgIGNvaW46IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ3BvbHl4JyA6ICd0cG9seXgnLFxuICAgIG5ldHdvcms6IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ01haW5uZXQnIDogJ1Rlc3RuZXQnLFxuICAgIG5hbWU6IGNvaW4uZnVsbE5hbWUsXG4gICAgZGVjaW1hbFBsYWNlczogY29pbi5kZWNpbWFsUGxhY2VzLFxuICAgIHRpY2tlcjogY29pbi50aWNrZXIsXG4gICAgYXNzZXRJZDogY29pbi5hc3NldElkLFxuICB9O1xufVxuY29uc3QgZ2V0Rm9ybWF0dGVkUG9seXhUb2tlbnMgPSAoY3VzdG9tQ29pbk1hcCA9IGNvaW5zKSA9PlxuICBjdXN0b21Db2luTWFwLnJlZHVjZSgoYWNjOiBQb2x5eFRva2VuQ29uZmlnW10sIGNvaW4pID0+IHtcbiAgICBpZiAoY29pbiBpbnN0YW5jZW9mIFBvbHl4Q29pbikge1xuICAgICAgYWNjLnB1c2goZ2V0UG9seXhUb2tlbkNvbmZpZyhjb2luKSk7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIFtdKTtcblxuZnVuY3Rpb24gZ2V0QXB0VG9rZW5Db25maWcoY29pbjogQXB0Q29pbik6IEFwdFRva2VuQ29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBjb2luLm5hbWUsXG4gICAgY29pbjogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnYXB0JyA6ICd0YXB0JyxcbiAgICBuZXR3b3JrOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdNYWlubmV0JyA6ICdUZXN0bmV0JyxcbiAgICBuYW1lOiBjb2luLmZ1bGxOYW1lLFxuICAgIGFzc2V0SWQ6IGNvaW4uYXNzZXRJZCxcbiAgICBkZWNpbWFsUGxhY2VzOiBjb2luLmRlY2ltYWxQbGFjZXMsXG4gIH07XG59XG5jb25zdCBnZXRGb3JtYXR0ZWRBcHRUb2tlbnMgPSAoY3VzdG9tQ29pbk1hcCA9IGNvaW5zKSA9PlxuICBjdXN0b21Db2luTWFwLnJlZHVjZSgoYWNjOiBBcHRUb2tlbkNvbmZpZ1tdLCBjb2luKSA9PiB7XG4gICAgaWYgKGNvaW4gaW5zdGFuY2VvZiBBcHRDb2luKSB7XG4gICAgICBhY2MucHVzaChnZXRBcHRUb2tlbkNvbmZpZyhjb2luKSk7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIFtdKTtcblxuZnVuY3Rpb24gZ2V0QXB0TkZUQ29sbGVjdGlvbkNvbmZpZyhjb2luOiBBcHRORlRDb2xsZWN0aW9uKTogQXB0TkZUQ29sbGVjdGlvbkNvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogY29pbi5uYW1lLFxuICAgIGNvaW46IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ2FwdCcgOiAndGFwdCcsXG4gICAgbmV0d29yazogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnTWFpbm5ldCcgOiAnVGVzdG5ldCcsXG4gICAgbmFtZTogY29pbi5mdWxsTmFtZSxcbiAgICBuZnRDb2xsZWN0aW9uSWQ6IGNvaW4ubmZ0Q29sbGVjdGlvbklkLFxuICAgIGRlY2ltYWxQbGFjZXM6IGNvaW4uZGVjaW1hbFBsYWNlcyxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0VmV0TkZUQ29sbGVjdGlvbkNvbmZpZyhjb2luOiBWZXRORlRDb2xsZWN0aW9uKTogVmV0TkZUQ29sbGVjdGlvbkNvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogY29pbi5uYW1lLFxuICAgIGNvaW46IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ3ZldCcgOiAndHZldCcsXG4gICAgbmV0d29yazogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnTWFpbm5ldCcgOiAnVGVzdG5ldCcsXG4gICAgbmFtZTogY29pbi5mdWxsTmFtZSxcbiAgICBuZnRDb2xsZWN0aW9uSWQ6IGNvaW4ubmZ0Q29sbGVjdGlvbklkLFxuICAgIGRlY2ltYWxQbGFjZXM6IGNvaW4uZGVjaW1hbFBsYWNlcyxcbiAgfTtcbn1cbmNvbnN0IGdldEZvcm1hdHRlZEFwdE5GVENvbGxlY3Rpb25zID0gKGN1c3RvbUNvaW5NYXAgPSBjb2lucykgPT5cbiAgY3VzdG9tQ29pbk1hcC5yZWR1Y2UoKGFjYzogQXB0TkZUQ29sbGVjdGlvbkNvbmZpZ1tdLCBjb2luKSA9PiB7XG4gICAgaWYgKGNvaW4gaW5zdGFuY2VvZiBBcHRORlRDb2xsZWN0aW9uKSB7XG4gICAgICBhY2MucHVzaChnZXRBcHRORlRDb2xsZWN0aW9uQ29uZmlnKGNvaW4pKTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwgW10pO1xuXG5jb25zdCBnZXRGb3JtYXR0ZWRWZXRORlRDb2xsZWN0aW9ucyA9IChjdXN0b21Db2luTWFwID0gY29pbnMpID0+XG4gIGN1c3RvbUNvaW5NYXAucmVkdWNlKChhY2M6IFZldE5GVENvbGxlY3Rpb25Db25maWdbXSwgY29pbikgPT4ge1xuICAgIGlmIChjb2luIGluc3RhbmNlb2YgVmV0TkZUQ29sbGVjdGlvbikge1xuICAgICAgYWNjLnB1c2goZ2V0VmV0TkZUQ29sbGVjdGlvbkNvbmZpZyhjb2luKSk7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIFtdKTtcblxuZnVuY3Rpb24gZ2V0U2lwMTBUb2tlbkNvbmZpZyhjb2luOiBTaXAxMFRva2VuKTogU2lwMTBUb2tlbkNvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogY29pbi5uYW1lLFxuICAgIGNvaW46IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ3N0eCcgOiAndHN0eCcsXG4gICAgbmV0d29yazogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnTWFpbm5ldCcgOiAnVGVzdG5ldCcsXG4gICAgbmFtZTogY29pbi5mdWxsTmFtZSxcbiAgICBhc3NldElkOiBjb2luLmFzc2V0SWQsXG4gICAgZGVjaW1hbFBsYWNlczogY29pbi5kZWNpbWFsUGxhY2VzLFxuICB9O1xufVxuY29uc3QgZ2V0Rm9ybWF0dGVkU2lwMTBUb2tlbnMgPSAoY3VzdG9tQ29pbk1hcCA9IGNvaW5zKSA9PlxuICBjdXN0b21Db2luTWFwLnJlZHVjZSgoYWNjOiBTaXAxMFRva2VuQ29uZmlnW10sIGNvaW4pID0+IHtcbiAgICBpZiAoY29pbiBpbnN0YW5jZW9mIFNpcDEwVG9rZW4pIHtcbiAgICAgIGFjYy5wdXNoKGdldFNpcDEwVG9rZW5Db25maWcoY29pbikpO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCBbXSk7XG5cbmZ1bmN0aW9uIGdldE5lcDE0MVRva2VuQ29uZmlnKGNvaW46IE5lcDE0MVRva2VuKTogTmVwMTQxVG9rZW5Db25maWcge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGNvaW4ubmFtZSxcbiAgICBjb2luOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICduZWFyJyA6ICd0bmVhcicsXG4gICAgbmV0d29yazogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnTWFpbm5ldCcgOiAnVGVzdG5ldCcsXG4gICAgbmFtZTogY29pbi5mdWxsTmFtZSxcbiAgICBjb250cmFjdEFkZHJlc3M6IGNvaW4uY29udHJhY3RBZGRyZXNzLFxuICAgIHN0b3JhZ2VEZXBvc2l0QW1vdW50OiBjb2luLnN0b3JhZ2VEZXBvc2l0QW1vdW50LFxuICAgIGRlY2ltYWxQbGFjZXM6IGNvaW4uZGVjaW1hbFBsYWNlcyxcbiAgfTtcbn1cbmNvbnN0IGdldEZvcm1hdHRlZE5lcDE0MVRva2VucyA9IChjdXN0b21Db2luTWFwID0gY29pbnMpID0+XG4gIGN1c3RvbUNvaW5NYXAucmVkdWNlKChhY2M6IE5lcDE0MVRva2VuQ29uZmlnW10sIGNvaW4pID0+IHtcbiAgICBpZiAoY29pbiBpbnN0YW5jZW9mIE5lcDE0MVRva2VuKSB7XG4gICAgICBhY2MucHVzaChnZXROZXAxNDFUb2tlbkNvbmZpZyhjb2luKSk7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIFtdKTtcblxuZnVuY3Rpb24gZ2V0VmV0VG9rZW5Db25maWcoY29pbjogVmV0VG9rZW4pOiBWZXRUb2tlbkNvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogY29pbi5uYW1lLFxuICAgIGNvaW46IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ3ZldCcgOiAndHZldCcsXG4gICAgbmV0d29yazogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnTWFpbm5ldCcgOiAnVGVzdG5ldCcsXG4gICAgbmFtZTogY29pbi5mdWxsTmFtZSxcbiAgICBjb250cmFjdEFkZHJlc3M6IGNvaW4uY29udHJhY3RBZGRyZXNzLFxuICAgIGRlY2ltYWxQbGFjZXM6IGNvaW4uZGVjaW1hbFBsYWNlcyxcbiAgfTtcbn1cblxuY29uc3QgZ2V0Rm9ybWF0dGVkVmV0VG9rZW5zID0gKGN1c3RvbUNvaW5NYXAgPSBjb2lucykgPT5cbiAgY3VzdG9tQ29pbk1hcC5yZWR1Y2UoKGFjYzogVmV0VG9rZW5Db25maWdbXSwgY29pbikgPT4ge1xuICAgIGlmIChjb2luIGluc3RhbmNlb2YgVmV0VG9rZW4pIHtcbiAgICAgIGFjYy5wdXNoKGdldFZldFRva2VuQ29uZmlnKGNvaW4pKTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwgW10pO1xuXG5jb25zdCBnZXRGb3JtYXR0ZWRDb3Ntb3NDaGFpblRva2VucyA9IChjdXN0b21Db2luTWFwID0gY29pbnMpID0+XG4gIGN1c3RvbUNvaW5NYXAucmVkdWNlKChhY2M6IENvc21vc1Rva2VuQ29uZmlnW10sIGNvaW4pID0+IHtcbiAgICBpZiAoY29pbiBpbnN0YW5jZW9mIENvc21vc0NoYWluVG9rZW4pIHtcbiAgICAgIGFjYy5wdXNoKGdldENvc21vc1Rva2VuQ29uZmlnKGNvaW4pKTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwgW10pO1xuXG5mdW5jdGlvbiBnZXRDb3Ntb3NUb2tlbkNvbmZpZyhjb2luOiBDb3Ntb3NDaGFpblRva2VuKTogQ29zbW9zVG9rZW5Db25maWcge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGNvaW4ubmFtZSxcbiAgICBjb2luOiBjb2luLm5hbWUuc3BsaXQoJzonKVswXS50b0xvd2VyQ2FzZSgpLFxuICAgIG5ldHdvcms6IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ01haW5uZXQnIDogJ1Rlc3RuZXQnLFxuICAgIG5hbWU6IGNvaW4uZnVsbE5hbWUsXG4gICAgZGVub206IGNvaW4uZGVub20sXG4gICAgZGVjaW1hbFBsYWNlczogY29pbi5kZWNpbWFsUGxhY2VzLFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRKZXR0b25Ub2tlbkNvbmZpZyhjb2luOiBKZXR0b25Ub2tlbik6IEpldHRvblRva2VuQ29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBjb2luLm5hbWUsXG4gICAgY29pbjogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAndG9uJyA6ICd0dG9uJyxcbiAgICBuZXR3b3JrOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdNYWlubmV0JyA6ICdUZXN0bmV0JyxcbiAgICBuYW1lOiBjb2luLmZ1bGxOYW1lLFxuICAgIGNvbnRyYWN0QWRkcmVzczogY29pbi5jb250cmFjdEFkZHJlc3MsXG4gICAgZGVjaW1hbFBsYWNlczogY29pbi5kZWNpbWFsUGxhY2VzLFxuICB9O1xufVxuXG5jb25zdCBnZXRGb3JtYXR0ZWRKZXR0b25Ub2tlbnMgPSAoY3VzdG9tQ29pbk1hcCA9IGNvaW5zKSA9PlxuICBjdXN0b21Db2luTWFwLnJlZHVjZSgoYWNjOiBKZXR0b25Ub2tlbkNvbmZpZ1tdLCBjb2luKSA9PiB7XG4gICAgaWYgKGNvaW4gaW5zdGFuY2VvZiBKZXR0b25Ub2tlbikge1xuICAgICAgYWNjLnB1c2goZ2V0SmV0dG9uVG9rZW5Db25maWcoY29pbikpO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCBbXSk7XG5cbmV4cG9ydCBjb25zdCBnZXRGb3JtYXR0ZWRUb2tlbnMgPSAoY29pbk1hcCA9IGNvaW5zKTogVG9rZW5zID0+IHtcbiAgY29uc3QgZm9ybWF0dGVkQXB0TkZUQ29sbGVjdGlvbnMgPSBnZXRGb3JtYXR0ZWRBcHRORlRDb2xsZWN0aW9ucyhjb2luTWFwKTtcbiAgY29uc3QgZm9ybWF0dGVkVmV0TkZUQ29sbGVjdGlvbnMgPSBnZXRGb3JtYXR0ZWRWZXRORlRDb2xsZWN0aW9ucyhjb2luTWFwKTtcbiAgcmV0dXJuIHtcbiAgICBiaXRjb2luOiB7XG4gICAgICBldGg6IHtcbiAgICAgICAgdG9rZW5zOiBnZXRGb3JtYXR0ZWRFcmMyMFRva2Vucyhjb2luTWFwKS5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSAnTWFpbm5ldCcpLFxuICAgICAgICBuZnRzOiBnZXRGb3JtYXR0ZWRFcmM3MjFUb2tlbnMoY29pbk1hcCkuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmV0d29yayA9PT0gJ01haW5uZXQnKSxcbiAgICAgIH0sXG4gICAgICB4bG06IHtcbiAgICAgICAgdG9rZW5zOiBnZXRGb3JtYXR0ZWRTdGVsbGFyVG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdNYWlubmV0JyksXG4gICAgICB9LFxuICAgICAgYWxnbzoge1xuICAgICAgICB0b2tlbnM6IGdldEZvcm1hdHRlZEFsZ29Ub2tlbnMoY29pbk1hcCkuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmV0d29yayA9PT0gJ01haW5uZXQnKSxcbiAgICAgIH0sXG4gICAgICBvZmM6IHtcbiAgICAgICAgdG9rZW5zOiBnZXRGb3JtYXR0ZWRPZmNDb2lucyhjb2luTWFwKS5maWx0ZXIoXG4gICAgICAgICAgKHRva2VuKSA9PiBjb2luTWFwLmdldCh0b2tlbi50eXBlKS5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVRcbiAgICAgICAgKSxcbiAgICAgIH0sXG4gICAgICBjZWxvOiB7XG4gICAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkQ2Vsb1Rva2Vucyhjb2luTWFwKS5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSAnTWFpbm5ldCcpLFxuICAgICAgfSxcbiAgICAgIGJzYzoge1xuICAgICAgICB0b2tlbnM6IGdldEZvcm1hdHRlZEJzY1Rva2Vucyhjb2luTWFwKS5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSAnTWFpbm5ldCcpLFxuICAgICAgfSxcbiAgICAgIGVvczoge1xuICAgICAgICB0b2tlbnM6IGdldEZvcm1hdHRlZEVvc1Rva2Vucyhjb2luTWFwKS5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSAnTWFpbm5ldCcpLFxuICAgICAgfSxcbiAgICAgIGF2YXhjOiB7XG4gICAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkQXZheENUb2tlbnMoY29pbk1hcCkuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmV0d29yayA9PT0gJ01haW5uZXQnKSxcbiAgICAgIH0sXG4gICAgICBwb2x5Z29uOiB7XG4gICAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkUG9seWdvblRva2Vucyhjb2luTWFwKS5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSAnTWFpbm5ldCcpLFxuICAgICAgfSxcbiAgICAgIHNvbmVpdW06IHtcbiAgICAgICAgdG9rZW5zOiBnZXRGb3JtYXR0ZWRTb25laXVtVG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdNYWlubmV0JyksXG4gICAgICB9LFxuICAgICAgYXJiZXRoOiB7XG4gICAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkQXJiZXRoVG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdNYWlubmV0JyksXG4gICAgICB9LFxuICAgICAgb3BldGg6IHtcbiAgICAgICAgdG9rZW5zOiBnZXRGb3JtYXR0ZWRPcGV0aFRva2Vucyhjb2luTWFwKS5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSAnTWFpbm5ldCcpLFxuICAgICAgfSxcbiAgICAgIGJhc2VldGg6IHtcbiAgICAgICAgdG9rZW5zOiBnZXRGb3JtYXR0ZWRCYXNlZXRoVG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdNYWlubmV0JyksXG4gICAgICB9LFxuICAgICAgb2c6IHtcbiAgICAgICAgdG9rZW5zOiBnZXRGb3JtYXR0ZWRPZ1Rva2Vucyhjb2luTWFwKS5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSAnTWFpbm5ldCcpLFxuICAgICAgfSxcbiAgICAgIGZsb3c6IHtcbiAgICAgICAgdG9rZW5zOiBnZXRGb3JtYXR0ZWRGbG93VG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdNYWlubmV0JyksXG4gICAgICB9LFxuICAgICAgbW9uOiB7XG4gICAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkTW9uYWRUb2tlbnMoY29pbk1hcCkuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmV0d29yayA9PT0gJ01haW5uZXQnKSxcbiAgICAgIH0sXG4gICAgICB4ZGM6IHtcbiAgICAgICAgdG9rZW5zOiBnZXRGb3JtYXR0ZWRYZGNUb2tlbnMoY29pbk1hcCkuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmV0d29yayA9PT0gJ01haW5uZXQnKSxcbiAgICAgIH0sXG4gICAgICBsaW5lYWV0aDoge1xuICAgICAgICB0b2tlbnM6IGdldEZvcm1hdHRlZExpbmVhZXRoVG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdNYWlubmV0JyksXG4gICAgICB9LFxuICAgICAgc2VpZXZtOiB7XG4gICAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkU2VpZXZtVG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdNYWlubmV0JyksXG4gICAgICB9LFxuICAgICAgemtldGg6IHtcbiAgICAgICAgdG9rZW5zOiBnZXRGb3JtYXR0ZWRaa2V0aFRva2Vucyhjb2luTWFwKS5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSAnTWFpbm5ldCcpLFxuICAgICAgfSxcbiAgICAgIHNvbDoge1xuICAgICAgICB0b2tlbnM6IGdldEZvcm1hdHRlZFNvbFRva2Vucyhjb2luTWFwKS5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSAnTWFpbm5ldCcpLFxuICAgICAgfSxcbiAgICAgIGhiYXI6IHtcbiAgICAgICAgdG9rZW5zOiBnZXRGb3JtYXR0ZWRIYmFyVG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdNYWlubmV0JyksXG4gICAgICB9LFxuICAgICAgYWRhOiB7XG4gICAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkQWRhVG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdNYWlubmV0JyksXG4gICAgICB9LFxuICAgICAgdHJ4OiB7XG4gICAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkVHJ4VG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdNYWlubmV0JyksXG4gICAgICB9LFxuICAgICAgeHJwOiB7XG4gICAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkWHJwVG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdNYWlubmV0JyksXG4gICAgICB9LFxuICAgICAgc3VpOiB7XG4gICAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkU3VpVG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdNYWlubmV0JyksXG4gICAgICB9LFxuICAgICAgdGFvOiB7XG4gICAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkVGFvVG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdNYWlubmV0JyksXG4gICAgICB9LFxuICAgICAgcG9seXg6IHtcbiAgICAgICAgdG9rZW5zOiBnZXRGb3JtYXR0ZWRQb2x5eFRva2Vucyhjb2luTWFwKS5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSAnTWFpbm5ldCcpLFxuICAgICAgfSxcbiAgICAgIGJlcmE6IHtcbiAgICAgICAgdG9rZW5zOiBnZXRGb3JtYXR0ZWRCZXJhVG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdNYWlubmV0JyksXG4gICAgICB9LFxuICAgICAgY29yZWRhbzoge1xuICAgICAgICB0b2tlbnM6IGdldEZvcm1hdHRlZENvcmVkYW9Ub2tlbnMoY29pbk1hcCkuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmV0d29yayA9PT0gJ01haW5uZXQnKSxcbiAgICAgIH0sXG4gICAgICB3b3JsZDoge1xuICAgICAgICB0b2tlbnM6IGdldEZvcm1hdHRlZFdvcmxkVG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdNYWlubmV0JyksXG4gICAgICB9LFxuICAgICAgZmxyOiB7XG4gICAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkRmxyVG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdNYWlubmV0JyksXG4gICAgICB9LFxuICAgICAgYXB0OiB7XG4gICAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkQXB0VG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdNYWlubmV0JyksXG4gICAgICAgIG5mdENvbGxlY3Rpb25zOiBmb3JtYXR0ZWRBcHRORlRDb2xsZWN0aW9ucy5maWx0ZXIoXG4gICAgICAgICAgKG5mdENvbGxlY3Rpb246IEFwdE5GVENvbGxlY3Rpb25Db25maWcpID0+IG5mdENvbGxlY3Rpb24ubmV0d29yayA9PT0gJ01haW5uZXQnXG4gICAgICAgICksXG4gICAgICB9LFxuICAgICAgc3R4OiB7XG4gICAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkU2lwMTBUb2tlbnMoY29pbk1hcCkuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmV0d29yayA9PT0gJ01haW5uZXQnKSxcbiAgICAgIH0sXG4gICAgICBuZWFyOiB7XG4gICAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkTmVwMTQxVG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdNYWlubmV0JyksXG4gICAgICB9LFxuICAgICAgdmV0OiB7XG4gICAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkVmV0VG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdNYWlubmV0JyksXG4gICAgICAgIG5mdENvbGxlY3Rpb25zOiBmb3JtYXR0ZWRWZXRORlRDb2xsZWN0aW9ucy5maWx0ZXIoXG4gICAgICAgICAgKG5mdENvbGxlY3Rpb246IFZldE5GVENvbGxlY3Rpb25Db25maWcpID0+IG5mdENvbGxlY3Rpb24ubmV0d29yayA9PT0gJ01haW5uZXQnXG4gICAgICAgICksXG4gICAgICB9LFxuICAgICAgY29zbW9zOiB7XG4gICAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkQ29zbW9zQ2hhaW5Ub2tlbnMoY29pbk1hcCkuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmV0d29yayA9PT0gJ01haW5uZXQnKSxcbiAgICAgIH0sXG4gICAgICB0b246IHtcbiAgICAgICAgdG9rZW5zOiBnZXRGb3JtYXR0ZWRKZXR0b25Ub2tlbnMoY29pbk1hcCkuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmV0d29yayA9PT0gJ01haW5uZXQnKSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICB0ZXN0bmV0OiB7XG4gICAgICBldGg6IHtcbiAgICAgICAgdG9rZW5zOiBnZXRGb3JtYXR0ZWRFcmMyMFRva2Vucyhjb2luTWFwKS5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSAnVGVzdG5ldCcpLFxuICAgICAgICBuZnRzOiBnZXRGb3JtYXR0ZWRFcmM3MjFUb2tlbnMoY29pbk1hcCkuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmV0d29yayA9PT0gJ1Rlc3RuZXQnKSxcbiAgICAgIH0sXG4gICAgICB4bG06IHtcbiAgICAgICAgdG9rZW5zOiBnZXRGb3JtYXR0ZWRTdGVsbGFyVG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdUZXN0bmV0JyksXG4gICAgICB9LFxuICAgICAgYWxnbzoge1xuICAgICAgICB0b2tlbnM6IGdldEZvcm1hdHRlZEFsZ29Ub2tlbnMoY29pbk1hcCkuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmV0d29yayA9PT0gJ1Rlc3RuZXQnKSxcbiAgICAgIH0sXG4gICAgICBvZmM6IHtcbiAgICAgICAgdG9rZW5zOiBnZXRGb3JtYXR0ZWRPZmNDb2lucyhjb2luTWFwKS5maWx0ZXIoXG4gICAgICAgICAgKHRva2VuKSA9PiBjb2luTWFwLmdldCh0b2tlbi50eXBlKS5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLlRFU1RORVRcbiAgICAgICAgKSxcbiAgICAgIH0sXG4gICAgICBjZWxvOiB7XG4gICAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkQ2Vsb1Rva2Vucyhjb2luTWFwKS5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSAnVGVzdG5ldCcpLFxuICAgICAgfSxcbiAgICAgIGJzYzoge1xuICAgICAgICB0b2tlbnM6IGdldEZvcm1hdHRlZEJzY1Rva2Vucyhjb2luTWFwKS5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSAnVGVzdG5ldCcpLFxuICAgICAgfSxcbiAgICAgIGVvczoge1xuICAgICAgICB0b2tlbnM6IGdldEZvcm1hdHRlZEVvc1Rva2Vucyhjb2luTWFwKS5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSAnVGVzdG5ldCcpLFxuICAgICAgfSxcbiAgICAgIGF2YXhjOiB7XG4gICAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkQXZheENUb2tlbnMoY29pbk1hcCkuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmV0d29yayA9PT0gJ1Rlc3RuZXQnKSxcbiAgICAgIH0sXG4gICAgICBwb2x5Z29uOiB7XG4gICAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkUG9seWdvblRva2Vucyhjb2luTWFwKS5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSAnVGVzdG5ldCcpLFxuICAgICAgfSxcbiAgICAgIHNvbmVpdW06IHtcbiAgICAgICAgdG9rZW5zOiBnZXRGb3JtYXR0ZWRTb25laXVtVG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdUZXN0bmV0JyksXG4gICAgICB9LFxuICAgICAgYXJiZXRoOiB7XG4gICAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkQXJiZXRoVG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdUZXN0bmV0JyksXG4gICAgICB9LFxuICAgICAgb3BldGg6IHtcbiAgICAgICAgdG9rZW5zOiBnZXRGb3JtYXR0ZWRPcGV0aFRva2Vucyhjb2luTWFwKS5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSAnVGVzdG5ldCcpLFxuICAgICAgfSxcbiAgICAgIGJhc2VldGg6IHtcbiAgICAgICAgdG9rZW5zOiBnZXRGb3JtYXR0ZWRCYXNlZXRoVG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdUZXN0bmV0JyksXG4gICAgICB9LFxuICAgICAgb2c6IHtcbiAgICAgICAgdG9rZW5zOiBnZXRGb3JtYXR0ZWRPZ1Rva2Vucyhjb2luTWFwKS5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSAnVGVzdG5ldCcpLFxuICAgICAgfSxcbiAgICAgIGZsb3c6IHtcbiAgICAgICAgdG9rZW5zOiBnZXRGb3JtYXR0ZWRGbG93VG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdUZXN0bmV0JyksXG4gICAgICB9LFxuICAgICAgbW9uOiB7XG4gICAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkTW9uYWRUb2tlbnMoY29pbk1hcCkuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmV0d29yayA9PT0gJ1Rlc3RuZXQnKSxcbiAgICAgIH0sXG4gICAgICB4ZGM6IHtcbiAgICAgICAgdG9rZW5zOiBnZXRGb3JtYXR0ZWRYZGNUb2tlbnMoY29pbk1hcCkuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmV0d29yayA9PT0gJ1Rlc3RuZXQnKSxcbiAgICAgIH0sXG4gICAgICBsaW5lYWV0aDoge1xuICAgICAgICB0b2tlbnM6IGdldEZvcm1hdHRlZExpbmVhZXRoVG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdUZXN0bmV0JyksXG4gICAgICB9LFxuICAgICAgc2VpZXZtOiB7XG4gICAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkU2VpZXZtVG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdUZXN0bmV0JyksXG4gICAgICB9LFxuICAgICAgemtldGg6IHtcbiAgICAgICAgdG9rZW5zOiBnZXRGb3JtYXR0ZWRaa2V0aFRva2Vucyhjb2luTWFwKS5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSAnVGVzdG5ldCcpLFxuICAgICAgfSxcbiAgICAgIHNvbDoge1xuICAgICAgICB0b2tlbnM6IGdldEZvcm1hdHRlZFNvbFRva2Vucyhjb2luTWFwKS5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSAnVGVzdG5ldCcpLFxuICAgICAgfSxcbiAgICAgIGhiYXI6IHtcbiAgICAgICAgdG9rZW5zOiBnZXRGb3JtYXR0ZWRIYmFyVG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdUZXN0bmV0JyksXG4gICAgICB9LFxuICAgICAgYWRhOiB7XG4gICAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkQWRhVG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdUZXN0bmV0JyksXG4gICAgICB9LFxuICAgICAgdHJ4OiB7XG4gICAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkVHJ4VG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdUZXN0bmV0JyksXG4gICAgICB9LFxuICAgICAgeHJwOiB7XG4gICAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkWHJwVG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdUZXN0bmV0JyksXG4gICAgICB9LFxuICAgICAgc3VpOiB7XG4gICAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkU3VpVG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdUZXN0bmV0JyksXG4gICAgICB9LFxuICAgICAgdGFvOiB7XG4gICAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkVGFvVG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdUZXN0bmV0JyksXG4gICAgICB9LFxuICAgICAgcG9seXg6IHtcbiAgICAgICAgdG9rZW5zOiBnZXRGb3JtYXR0ZWRQb2x5eFRva2Vucyhjb2luTWFwKS5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSAnVGVzdG5ldCcpLFxuICAgICAgfSxcbiAgICAgIGJlcmE6IHtcbiAgICAgICAgdG9rZW5zOiBnZXRGb3JtYXR0ZWRCZXJhVG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdUZXN0bmV0JyksXG4gICAgICB9LFxuICAgICAgYXB0OiB7XG4gICAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkQXB0VG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdUZXN0bmV0JyksXG4gICAgICAgIG5mdENvbGxlY3Rpb25zOiBmb3JtYXR0ZWRBcHRORlRDb2xsZWN0aW9ucy5maWx0ZXIoXG4gICAgICAgICAgKG5mdENvbGxlY3Rpb246IEFwdE5GVENvbGxlY3Rpb25Db25maWcpID0+IG5mdENvbGxlY3Rpb24ubmV0d29yayA9PT0gJ1Rlc3RuZXQnXG4gICAgICAgICksXG4gICAgICB9LFxuICAgICAgc3R4OiB7XG4gICAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkU2lwMTBUb2tlbnMoY29pbk1hcCkuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmV0d29yayA9PT0gJ1Rlc3RuZXQnKSxcbiAgICAgIH0sXG4gICAgICBjb3JlZGFvOiB7XG4gICAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkQ29yZWRhb1Rva2Vucyhjb2luTWFwKS5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSAnVGVzdG5ldCcpLFxuICAgICAgfSxcbiAgICAgIHdvcmxkOiB7XG4gICAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkV29ybGRUb2tlbnMoY29pbk1hcCkuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmV0d29yayA9PT0gJ1Rlc3RuZXQnKSxcbiAgICAgIH0sXG4gICAgICBmbHI6IHtcbiAgICAgICAgdG9rZW5zOiBnZXRGb3JtYXR0ZWRGbHJUb2tlbnMoY29pbk1hcCkuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmV0d29yayA9PT0gJ1Rlc3RuZXQnKSxcbiAgICAgIH0sXG4gICAgICBuZWFyOiB7XG4gICAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkTmVwMTQxVG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdUZXN0bmV0JyksXG4gICAgICB9LFxuICAgICAgdmV0OiB7XG4gICAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkVmV0VG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdUZXN0bmV0JyksXG4gICAgICAgIG5mdENvbGxlY3Rpb25zOiBmb3JtYXR0ZWRWZXRORlRDb2xsZWN0aW9ucy5maWx0ZXIoXG4gICAgICAgICAgKG5mdENvbGxlY3Rpb246IFZldE5GVENvbGxlY3Rpb25Db25maWcpID0+IG5mdENvbGxlY3Rpb24ubmV0d29yayA9PT0gJ1Rlc3RuZXQnXG4gICAgICAgICksXG4gICAgICB9LFxuICAgICAgY29zbW9zOiB7XG4gICAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkQ29zbW9zQ2hhaW5Ub2tlbnMoY29pbk1hcCkuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmV0d29yayA9PT0gJ1Rlc3RuZXQnKSxcbiAgICAgIH0sXG4gICAgICB0b246IHtcbiAgICAgICAgdG9rZW5zOiBnZXRGb3JtYXR0ZWRKZXR0b25Ub2tlbnMoY29pbk1hcCkuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmV0d29yayA9PT0gJ1Rlc3RuZXQnKSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcbn07XG5cbi8qKlxuICogVmVyaWZ5IG1haW5uZXQgb3IgdGVzdG5ldCB0b2tlbnNcbiAqIEBwYXJhbSB0b2tlbnNcbiAqL1xuY29uc3QgdmVyaWZ5VG9rZW5zID0gZnVuY3Rpb24gKHRva2VuczogQmFzZVRva2VuQ29uZmlnW10pIHtcbiAgY29uc3QgdmVyaWZpZWRUb2tlbnM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG4gIHRva2Vucy5mb3JFYWNoKCh0b2tlbikgPT4ge1xuICAgIGlmICh2ZXJpZmllZFRva2Vuc1t0b2tlbi50eXBlXSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd0b2tlbiA6ICcgKyB0b2tlbi50eXBlICsgJyBkdXBsaWNhdGVkLicpO1xuICAgIH1cbiAgICB2ZXJpZmllZFRva2Vuc1t0b2tlbi50eXBlXSA9IHRydWU7XG5cbiAgICBpZiAoXG4gICAgICAodG9rZW4gYXMgQmFzZUNvbnRyYWN0QWRkcmVzc0NvbmZpZykudG9rZW5Db250cmFjdEFkZHJlc3MgJiZcbiAgICAgICh0b2tlbiBhcyBCYXNlQ29udHJhY3RBZGRyZXNzQ29uZmlnKS50b2tlbkNvbnRyYWN0QWRkcmVzcyAhPT1cbiAgICAgICAgKHRva2VuIGFzIEJhc2VDb250cmFjdEFkZHJlc3NDb25maWcpLnRva2VuQ29udHJhY3RBZGRyZXNzLnRvTG9jYWxlTG93ZXJDYXNlKClcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ3Rva2VuIGNvbnRyYWN0OiAnICsgdG9rZW4udHlwZSArICcgaXMgbm90IGFsbCBsb3dlciBjYXNlOiAnICsgKHRva2VuIGFzIEJhc2VDb250cmFjdEFkZHJlc3NDb25maWcpXG4gICAgICApO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHZlcmlmaWVkVG9rZW5zO1xufTtcblxuZXhwb3J0IGNvbnN0IHRva2VucyA9IGdldEZvcm1hdHRlZFRva2VucygpO1xuXG5leHBvcnQgY29uc3QgZm9ybWF0dGVkQWxnb1Rva2VucyA9IGdldEZvcm1hdHRlZEFsZ29Ub2tlbnMoKTtcblxuY29uc3QgbWFpbm5ldEVyYzIwVG9rZW5zID0gdmVyaWZ5VG9rZW5zKHRva2Vucy5iaXRjb2luLmV0aC50b2tlbnMpO1xuY29uc3QgbWFpbm5ldEVyYzcyMVRva2VucyA9IHZlcmlmeVRva2Vucyh0b2tlbnMuYml0Y29pbi5ldGgubmZ0cyk7XG5jb25zdCBtYWlubmV0U3RlbGxhclRva2VucyA9IHZlcmlmeVRva2Vucyh0b2tlbnMuYml0Y29pbi54bG0udG9rZW5zKTtcbmV4cG9ydCBjb25zdCBtYWlubmV0VG9rZW5zID0geyAuLi5tYWlubmV0RXJjMjBUb2tlbnMsIC4uLm1haW5uZXRFcmM3MjFUb2tlbnMsIC4uLm1haW5uZXRTdGVsbGFyVG9rZW5zIH07XG5cbmNvbnN0IHRlc3RuZXRFcmMyMFRva2VucyA9IHZlcmlmeVRva2Vucyh0b2tlbnMudGVzdG5ldC5ldGgudG9rZW5zKTtcbmNvbnN0IHRlc3RuZXRFcmM3MjFUb2tlbnMgPSB2ZXJpZnlUb2tlbnModG9rZW5zLnRlc3RuZXQuZXRoLm5mdHMpO1xuY29uc3QgdGVzdG5ldFN0ZWxsYXJUb2tlbnMgPSB2ZXJpZnlUb2tlbnModG9rZW5zLnRlc3RuZXQueGxtLnRva2Vucyk7XG5leHBvcnQgY29uc3QgdGVzdG5ldFRva2VucyA9IHsgLi4udGVzdG5ldEVyYzIwVG9rZW5zLCAuLi50ZXN0bmV0RXJjNzIxVG9rZW5zLCAuLi50ZXN0bmV0U3RlbGxhclRva2VucyB9O1xuXG4vKipcbiAqIEdldCBmb3JtYXR0ZWQgdG9rZW4gY29uZmlndXJhdGlvbiBmb3IgYSBzaW5nbGUgY29pblxuICogQHBhcmFtIGNvaW4gLSBTdGF0aWMgQmFzZSBjb2luIGluc3RhbmNlXG4gKiBAcmV0dXJucyBUaGUgZm9ybWF0dGVkIHRva2VuIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBjb2luLCBvciB1bmRlZmluZWQgaWYgbm90IHN1cHBvcnRlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybWF0dGVkVG9rZW5Db25maWdGb3JDb2luKGNvaW46IFJlYWRvbmx5PEJhc2VDb2luPik6IFRva2VuQ29uZmlnIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGNvaW4gaW5zdGFuY2VvZiBFcmMyMENvaW4pIHtcbiAgICByZXR1cm4gZ2V0RXJjMjBUb2tlbkNvbmZpZyhjb2luKTtcbiAgfSBlbHNlIGlmIChjb2luIGluc3RhbmNlb2YgU3RlbGxhckNvaW4pIHtcbiAgICByZXR1cm4gZ2V0U3RlbGxhclRva2VuQ29uZmlnKGNvaW4pO1xuICB9IGVsc2UgaWYgKGNvaW4gaW5zdGFuY2VvZiBPZmNDb2luKSB7XG4gICAgcmV0dXJuIGdldE9mY1Rva2VuQ29uZmlnKGNvaW4pO1xuICB9IGVsc2UgaWYgKGNvaW4gaW5zdGFuY2VvZiBDZWxvQ29pbikge1xuICAgIHJldHVybiBnZXRDZWxvVG9rZW5Db25maWcoY29pbik7XG4gIH0gZWxzZSBpZiAoY29pbiBpbnN0YW5jZW9mIEJzY0NvaW4pIHtcbiAgICByZXR1cm4gZ2V0QnNjVG9rZW5Db25maWcoY29pbik7XG4gIH0gZWxzZSBpZiAoY29pbiBpbnN0YW5jZW9mIEVvc0NvaW4pIHtcbiAgICByZXR1cm4gZ2V0RW9zVG9rZW5Db25maWcoY29pbik7XG4gIH0gZWxzZSBpZiAoY29pbiBpbnN0YW5jZW9mIEF2YXhFUkMyMFRva2VuKSB7XG4gICAgcmV0dXJuIGdldEF2YXhDVG9rZW5Db25maWcoY29pbik7XG4gIH0gZWxzZSBpZiAoXG4gICAgY29pbiBpbnN0YW5jZW9mIFBvbHlnb25FUkMyMFRva2VuIHx8XG4gICAgKChjb2luIGluc3RhbmNlb2YgRXJjNzIxQ29pbiB8fCBjb2luIGluc3RhbmNlb2YgRXJjMTE1NUNvaW4pICYmIGNvaW4uZmFtaWx5ID09PSBDb2luRmFtaWx5LlBPTFlHT04pXG4gICkge1xuICAgIHJldHVybiBnZXRQb2x5Z29uVG9rZW5Db25maWcoY29pbik7XG4gIH0gZWxzZSBpZiAoKGNvaW4gaW5zdGFuY2VvZiBFcmM3MjFDb2luIHx8IGNvaW4gaW5zdGFuY2VvZiBFcmMxMTU1Q29pbikgJiYgY29pbi5mYW1pbHkgPT09IENvaW5GYW1pbHkuU09ORUlVTSkge1xuICAgIHJldHVybiBnZXRTb25laXVtVG9rZW5Db25maWcoY29pbik7XG4gIH0gZWxzZSBpZiAoY29pbiBpbnN0YW5jZW9mIEVyYzcyMUNvaW4gJiYgY29pbi5mYW1pbHkgPT09IENvaW5GYW1pbHkuRVRIKSB7XG4gICAgcmV0dXJuIGdldEVyYzcyMVRva2VuQ29uZmlnKGNvaW4pO1xuICB9IGVsc2UgaWYgKGNvaW4gaW5zdGFuY2VvZiBBcmJldGhFUkMyMFRva2VuKSB7XG4gICAgcmV0dXJuIGdldEFyYmV0aFRva2VuQ29uZmlnKGNvaW4pO1xuICB9IGVsc2UgaWYgKGNvaW4gaW5zdGFuY2VvZiBPcGV0aEVSQzIwVG9rZW4pIHtcbiAgICByZXR1cm4gZ2V0T3BldGhUb2tlbkNvbmZpZyhjb2luKTtcbiAgfSBlbHNlIGlmIChjb2luIGluc3RhbmNlb2YgWmtldGhFUkMyMFRva2VuKSB7XG4gICAgcmV0dXJuIGdldFprZXRoVG9rZW5Db25maWcoY29pbik7XG4gIH0gZWxzZSBpZiAoY29pbiBpbnN0YW5jZW9mIFNvbENvaW4pIHtcbiAgICByZXR1cm4gZ2V0U29sVG9rZW5Db25maWcoY29pbik7XG4gIH0gZWxzZSBpZiAoY29pbiBpbnN0YW5jZW9mIEhlZGVyYVRva2VuKSB7XG4gICAgcmV0dXJuIGdldEhiYXJUb2tlbkNvbmZpZyhjb2luKTtcbiAgfSBlbHNlIGlmIChjb2luIGluc3RhbmNlb2YgQWRhVG9rZW4pIHtcbiAgICByZXR1cm4gZ2V0QWRhVG9rZW5Db25maWcoY29pbik7XG4gIH0gZWxzZSBpZiAoY29pbiBpbnN0YW5jZW9mIFRyb25FcmMyMENvaW4pIHtcbiAgICByZXR1cm4gZ2V0VHJ4VG9rZW5Db25maWcoY29pbik7XG4gIH0gZWxzZSBpZiAoY29pbiBpbnN0YW5jZW9mIFhycENvaW4pIHtcbiAgICByZXR1cm4gZ2V0WHJwVG9rZW5Db25maWcoY29pbik7XG4gIH0gZWxzZSBpZiAoY29pbiBpbnN0YW5jZW9mIFN1aUNvaW4pIHtcbiAgICByZXR1cm4gZ2V0U3VpVG9rZW5Db25maWcoY29pbik7XG4gIH0gZWxzZSBpZiAoY29pbiBpbnN0YW5jZW9mIFRhb0NvaW4pIHtcbiAgICByZXR1cm4gZ2V0VGFvVG9rZW5Db25maWcoY29pbik7XG4gIH0gZWxzZSBpZiAoY29pbiBpbnN0YW5jZW9mIFBvbHl4Q29pbikge1xuICAgIHJldHVybiBnZXRQb2x5eFRva2VuQ29uZmlnKGNvaW4pO1xuICB9IGVsc2UgaWYgKGNvaW4gaW5zdGFuY2VvZiBBcHRDb2luKSB7XG4gICAgcmV0dXJuIGdldEFwdFRva2VuQ29uZmlnKGNvaW4pO1xuICB9IGVsc2UgaWYgKGNvaW4gaW5zdGFuY2VvZiBBcHRORlRDb2xsZWN0aW9uKSB7XG4gICAgcmV0dXJuIGdldEFwdE5GVENvbGxlY3Rpb25Db25maWcoY29pbik7XG4gIH0gZWxzZSBpZiAoY29pbiBpbnN0YW5jZW9mIFNpcDEwVG9rZW4pIHtcbiAgICByZXR1cm4gZ2V0U2lwMTBUb2tlbkNvbmZpZyhjb2luKTtcbiAgfSBlbHNlIGlmIChjb2luIGluc3RhbmNlb2YgTmVwMTQxVG9rZW4pIHtcbiAgICByZXR1cm4gZ2V0TmVwMTQxVG9rZW5Db25maWcoY29pbik7XG4gIH0gZWxzZSBpZiAoY29pbiBpbnN0YW5jZW9mIENvc21vc0NoYWluVG9rZW4pIHtcbiAgICByZXR1cm4gZ2V0Q29zbW9zVG9rZW5Db25maWcoY29pbik7XG4gIH0gZWxzZSBpZiAoY29pbiBpbnN0YW5jZW9mIFZldFRva2VuKSB7XG4gICAgcmV0dXJuIGdldFZldFRva2VuQ29uZmlnKGNvaW4pO1xuICB9IGVsc2UgaWYgKGNvaW4gaW5zdGFuY2VvZiBWZXRORlRDb2xsZWN0aW9uKSB7XG4gICAgcmV0dXJuIGdldFZldE5GVENvbGxlY3Rpb25Db25maWcoY29pbik7XG4gIH0gZWxzZSBpZiAoY29pbiBpbnN0YW5jZW9mIENvcmVkYW9FUkMyMFRva2VuKSB7XG4gICAgcmV0dXJuIGdldENvcmVkYW9Ub2tlbkNvbmZpZyhjb2luKTtcbiAgfSBlbHNlIGlmIChjb2luIGluc3RhbmNlb2YgSmV0dG9uVG9rZW4pIHtcbiAgICByZXR1cm4gZ2V0SmV0dG9uVG9rZW5Db25maWcoY29pbik7XG4gIH0gZWxzZSBpZiAoY29pbiBpbnN0YW5jZW9mIEZsckVSQzIwVG9rZW4pIHtcbiAgICByZXR1cm4gZ2V0RmxyVG9rZW5Db25maWcoY29pbik7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbiJdfQ==