@tomerh2001/israeli-bank-scrapers 6.3.12 → 6.4.0

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.
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.default = void 0;
7
7
  var _moment = _interopRequireDefault(require("moment"));
8
8
  var _uuid = require("uuid");
9
+ var _constants = require("../constants");
9
10
  var _debug = require("../helpers/debug");
10
11
  var _fetch = require("../helpers/fetch");
11
12
  var _navigation = require("../helpers/navigation");
@@ -52,7 +53,7 @@ function convertTransactions(txns) {
52
53
  date: (0, _moment.default)(txn.eventDate, DATE_FORMAT).toISOString(),
53
54
  processedDate: (0, _moment.default)(txn.valueDate, DATE_FORMAT).toISOString(),
54
55
  originalAmount: isOutbound ? -txn.eventAmount : txn.eventAmount,
55
- originalCurrency: 'ILS',
56
+ originalCurrency: _constants.SHEKEL_CURRENCY,
56
57
  chargedAmount: isOutbound ? -txn.eventAmount : txn.eventAmount,
57
58
  description: txn.activityDescription || '',
58
59
  status: txn.serialNumber === 0 ? _transactions.TransactionStatuses.Pending : _transactions.TransactionStatuses.Completed,
@@ -61,6 +62,31 @@ function convertTransactions(txns) {
61
62
  return result;
62
63
  });
63
64
  }
65
+ function convertForexTransactions(txns, currency) {
66
+ return txns.map(txn => {
67
+ const isOutbound = txn.eventActivityTypeCode === 2;
68
+ const dateStr = txn.executingDate.toString(); // Date transaction was executed
69
+ const valueDateStr = txn.valueDate.toString(); // Date value was actually added to account
70
+
71
+ let memo = '';
72
+ if (txn.eventDetails) {
73
+ memo = txn.eventDetails;
74
+ }
75
+ const result = {
76
+ type: _transactions.TransactionTypes.Normal,
77
+ identifier: txn.referenceNumber || txn.recordSerialNumber,
78
+ date: (0, _moment.default)(valueDateStr, DATE_FORMAT).toISOString(),
79
+ processedDate: (0, _moment.default)(dateStr, DATE_FORMAT).toISOString(),
80
+ originalAmount: isOutbound ? -txn.eventAmount : txn.eventAmount,
81
+ originalCurrency: currency,
82
+ chargedAmount: isOutbound ? -txn.eventAmount : txn.eventAmount,
83
+ description: txn.activityDescription || '',
84
+ status: _transactions.TransactionStatuses.Completed,
85
+ memo
86
+ };
87
+ return result;
88
+ });
89
+ }
64
90
  async function getRestContext(page) {
65
91
  await (0, _waiting.waitUntil)(() => {
66
92
  return page.evaluate(() => !!window.bnhpApp);
@@ -121,6 +147,256 @@ async function getAccountBalance(apiSiteUrl, page, accountNumber) {
121
147
  const balanceAndCreditLimit = await (0, _fetch.fetchGetWithinPage)(page, balanceAndCreditLimitUrl);
122
148
  return balanceAndCreditLimit?.currentBalance;
123
149
  }
150
+ async function getForexAccounts(baseUrl, page, accountNumber, startDate, endDate) {
151
+ debug('========== FETCHING FOREX ACCOUNTS ==========');
152
+ debug('Account: %s, Date range: %s to %s', accountNumber, startDate, endDate);
153
+ const accounts = [];
154
+ const currency = {
155
+ code: 19,
156
+ swift: _constants.SHEKEL_CURRENCY
157
+ };
158
+ try {
159
+ const detailedAccountTypeCode = 142; // For foreign currency accounts
160
+ const forexUrl = `${baseUrl}/ServerServices/foreign-currency/transactions?accountId=${accountNumber}&type=business&retrievalStartDate=${startDate}&retrievalEndDate=${endDate}&currencyCodeList=${currency.code}&detailedAccountTypeCodeList=${detailedAccountTypeCode}&view=details&lang=he`;
161
+ debug('Trying forex %s', forexUrl);
162
+ const forexData = await (0, _fetch.fetchGetWithinPage)(page, forexUrl, true); // ignoreErrors = true
163
+
164
+ if (forexData && forexData.balancesAndLimitsDataList && forexData.balancesAndLimitsDataList.length > 0) {
165
+ debug('✓ Found forex data');
166
+ for (const currencyData of forexData.balancesAndLimitsDataList) {
167
+ const currencySwiftCode = currencyData.currencySwiftCode || currency.swift;
168
+ const transactionCount = currencyData.transactions?.length || 0;
169
+
170
+ // Get balance from the most recent transaction's currentBalance field
171
+ // If no transactions, fall back to currencyData.currentBalance
172
+ let balance = currencyData.currentBalance;
173
+ if (transactionCount > 0 && currencyData.transactions) {
174
+ balance = currencyData.transactions[0].currentBalance;
175
+ debug(' - Using balance from most recent transaction: %s', balance);
176
+ }
177
+ debug(' - Currency: %s, Balance: %s, Transactions: %d', currencySwiftCode, balance, transactionCount);
178
+
179
+ // Log transaction dates for debugging
180
+ if (transactionCount > 0) {
181
+ const txnDates = currencyData.transactions?.map(t => t.executingDate).join(', ') || '';
182
+ debug(' Transaction dates: %s', txnDates);
183
+ }
184
+
185
+ // Only add if there's actually a balance or transactions
186
+ if (balance !== 0 || transactionCount > 0) {
187
+ const txns = convertForexTransactions(currencyData.transactions || [], currencySwiftCode);
188
+ const forexAccountNumber = `${accountNumber}-${currencySwiftCode}`;
189
+ accounts.push({
190
+ accountNumber: forexAccountNumber,
191
+ balance,
192
+ currency: currencySwiftCode,
193
+ txns
194
+ });
195
+ debug(' ✓ Added forex account: %s with %d transactions', forexAccountNumber, txns.length);
196
+ } else {
197
+ debug(' - Skipping %s (zero balance and no transactions)', currencySwiftCode);
198
+ }
199
+ }
200
+ } else {
201
+ debug(' - No forex data found');
202
+ }
203
+ } catch (error) {
204
+ debug(' - Error fetching forex: %s', error);
205
+ // Continue trying other currencies
206
+ }
207
+ debug('Returning %d forex accounts', accounts.length);
208
+ return accounts;
209
+ }
210
+ async function getSavingsAccounts(baseUrl, page, accountNumber) {
211
+ const savingsUrl = `${baseUrl}/ServerServices/deposits-and-savings/deposits?accountId=${accountNumber}&view=details&lang=he`;
212
+ const savingsData = await (0, _fetch.fetchGetWithinPage)(page, savingsUrl);
213
+ if (!savingsData || !savingsData.depositsWrapperData || savingsData.depositsWrapperData.length === 0) {
214
+ debug('No savings accounts found for account %s', accountNumber);
215
+ return [];
216
+ }
217
+ const accounts = [];
218
+ for (const wrapper of savingsData.depositsWrapperData) {
219
+ // Create a separate account for each individual deposit
220
+ for (const deposit of wrapper.data) {
221
+ const balance = deposit.revaluedTotalAmount || deposit.principalAmount;
222
+ const savingsAccountNumber = `${accountNumber}-${deposit.depositSerialId}`;
223
+ accounts.push({
224
+ accountNumber: savingsAccountNumber,
225
+ savingsAccount: true,
226
+ balance,
227
+ txns: [] // Savings accounts typically don't have transaction history in the same way
228
+ });
229
+ debug('Added savings account %s with balance %s', savingsAccountNumber, balance);
230
+ }
231
+ }
232
+ return accounts;
233
+ }
234
+ async function getInvestmentAccounts(baseUrl, page, account) {
235
+ debug('========== FETCHING INVESTMENT ACCOUNTS ==========');
236
+ const accounts = [];
237
+ const accountNumber = `${account.branchNumber}-${account.accountNumber}`; // Don't include bankNumber here because investment API doesn't use it
238
+
239
+ // Set up request interception to capture session headers
240
+ let capturedSession = null;
241
+ let capturedCsession = null;
242
+ const requestHandler = request => {
243
+ try {
244
+ const headers = request.headers();
245
+ if (headers.session && !capturedSession) {
246
+ capturedSession = headers.session;
247
+ debug(' - Captured session from network request');
248
+ }
249
+ if (headers.csession && !capturedCsession) {
250
+ capturedCsession = headers.csession;
251
+ debug(' - Captured csession from network request');
252
+ }
253
+ request.continue();
254
+ } catch (e) {
255
+ debug(' - Error in request handler: %s', e);
256
+ // Try to continue anyway
257
+ try {
258
+ request.continue();
259
+ } catch (continueError) {
260
+ // Ignore if already handled
261
+ }
262
+ }
263
+ };
264
+ try {
265
+ // Navigate to mytrade section to establish session
266
+ const mytradeUrl = `${baseUrl}/mytrade/app`;
267
+ debug('Navigating to mytrade section: %s', mytradeUrl);
268
+ await page.setRequestInterception(true);
269
+ page.on('request', requestHandler);
270
+
271
+ // Try to navigate, but if it fails (e.g., MyTrade not enabled), clean up and return empty
272
+ try {
273
+ await page.goto(mytradeUrl, {
274
+ waitUntil: 'networkidle2',
275
+ timeout: 60000
276
+ });
277
+ // Wait longer for the page to fully load and establish session
278
+ await new Promise(resolve => setTimeout(resolve, 5000));
279
+ } catch (navError) {
280
+ debug(' - Navigation to MyTrade failed (likely not enabled): %s', navError);
281
+ // Clean up request interception
282
+ page.off('request', requestHandler);
283
+ await page.setRequestInterception(false);
284
+ debug('Returning 0 investment accounts (MyTrade not accessible)');
285
+ return accounts;
286
+ }
287
+
288
+ // Now turn off request interception before we make API calls
289
+ page.off('request', requestHandler);
290
+ await page.setRequestInterception(false);
291
+ debug('Mytrade page loaded, session established');
292
+ const fields = 'EngName,EngSymbol,HebName,HebSymbol,Symbol,ExpirationDate,ItemType,StockType,IsEtf,IsForeign,CurrencyCode,Exchange,CreationEquityNum,EquityType,ContractType,AllowedOrderDirection,EquitySubType';
293
+ const investmentUrl = `${baseUrl}/ServerServices/mytrade/api/v2/json2/account/view?account=${accountNumber}&fields=${fields}`;
294
+ debug('Trying investment account URL: %s', investmentUrl);
295
+
296
+ // Get XSRF token and session data from cookies
297
+ const cookies = await page.cookies();
298
+ const XSRFCookie = cookies.find(cookie => cookie.name === 'XSRF-TOKEN');
299
+
300
+ // Use captured session or fallback to generated ones
301
+ const sessionId = capturedSession || (0, _uuid.v4)();
302
+ const csession = capturedCsession || Math.random().toString();
303
+ const headers = {
304
+ 'Content-Type': 'application/json; charset=utf-8',
305
+ csession,
306
+ session: sessionId,
307
+ Referer: mytradeUrl
308
+ };
309
+ if (XSRFCookie != null) {
310
+ headers['X-XSRF-TOKEN'] = XSRFCookie.value;
311
+ debug(' - Using XSRF token: %s', XSRFCookie.value.substring(0, 10) + '...');
312
+ }
313
+ debug(' - Request headers: csession=%s, session=%s', csession, sessionId);
314
+ const investmentData = await (0, _fetch.fetchPostWithinPage)(page, investmentUrl, {}, headers);
315
+ debug(' - Response received: %s', investmentData ? 'YES' : 'NO');
316
+ if (investmentData) {
317
+ debug(' - Response has View: %s', investmentData.View ? 'YES' : 'NO');
318
+ debug(' - Response has View.Account: %s', investmentData.View?.Account ? 'YES' : 'NO');
319
+ }
320
+ if (investmentData?.View?.Account) {
321
+ debug('✓ Found investment account data');
322
+ const accountData = investmentData.View.Account;
323
+ const balance = accountData.OnlineValue || 0;
324
+ const currency = accountData.CurrencyCode || _constants.SHEKEL_CURRENCY;
325
+
326
+ // Get securities from the balance array
327
+ const securities = [];
328
+ const balances = accountData.AccountPosition?.Balance || [];
329
+ const metaSecurities = investmentData.View.Meta?.Security || [];
330
+
331
+ // Create a map of security metadata for easy lookup
332
+ const metaMap = new Map();
333
+ for (const meta of metaSecurities) {
334
+ metaMap.set(meta['-Key'], meta);
335
+ }
336
+ for (const securityBalance of balances) {
337
+ const meta = metaMap.get(securityBalance.EquityNumber);
338
+ securities.push({
339
+ name: meta?.EngName || '',
340
+ symbol: meta?.EngSymbol || '',
341
+ volume: securityBalance.OnlineNV,
342
+ value: securityBalance.OnlineVL,
343
+ currency: securityBalance.CurrencyCode || meta?.CurrencyCode || _constants.SHEKEL_CURRENCY,
344
+ changePercentage: securityBalance.BaseRateChangePercentage,
345
+ profitLoss: securityBalance.ProfitLoss
346
+ });
347
+ }
348
+ debug(' - Balance: %s %s, Securities: %d', balance, currency, securities.length);
349
+ if (balance !== 0 || securities.length > 0) {
350
+ const investmentAccountNumber = `${account.bankNumber}-${account.branchNumber}-${account.accountNumber}-investment`;
351
+ accounts.push({
352
+ accountNumber: investmentAccountNumber,
353
+ balance,
354
+ currency,
355
+ savingsAccount: true,
356
+ txns: [],
357
+ securities
358
+ });
359
+ debug(' ✓ Added investment account: %s with %d securities', investmentAccountNumber, securities.length);
360
+ } else {
361
+ debug(' - Skipping (zero balance and no securities)');
362
+ }
363
+ } else {
364
+ debug(' - No investment account data found');
365
+ }
366
+ } catch (error) {
367
+ debug(' - Error fetching investment account: %s', error);
368
+ // Log more details about the error
369
+ if (error instanceof Error) {
370
+ debug(' Error message: %s', error.message);
371
+ debug(' Error stack: %s', error.stack);
372
+ }
373
+ } finally {
374
+ // Clean up request interception (in case it wasn't already done)
375
+ try {
376
+ page.off('request', requestHandler);
377
+ await page.setRequestInterception(false);
378
+ } catch (e) {
379
+ // Ignore cleanup errors
380
+ }
381
+
382
+ // Navigate back to the main homepage to restore the session for subsequent scraping
383
+ try {
384
+ const homepageUrl = `${baseUrl}/ng-portals/rb/he/homepage`;
385
+ debug('Navigating back to homepage: %s', homepageUrl);
386
+ await page.goto(homepageUrl, {
387
+ waitUntil: 'networkidle2',
388
+ timeout: 30000
389
+ });
390
+ await new Promise(resolve => setTimeout(resolve, 2000));
391
+ debug('Homepage restored');
392
+ } catch (navError) {
393
+ debug(' - Failed to navigate back to homepage: %s', navError);
394
+ // Continue anyway, the outer try-catch in fetchAccountData will handle it
395
+ }
396
+ }
397
+ debug('Returning %d investment accounts', accounts.length);
398
+ return accounts;
399
+ }
124
400
  async function fetchAccountData(page, baseUrl, options) {
125
401
  const restContext = await getRestContext(page);
126
402
  const apiSiteUrl = `${baseUrl}/${restContext}`;
@@ -146,12 +422,47 @@ async function fetchAccountData(page, baseUrl, options) {
146
422
  } else {
147
423
  debug('Skipping balance for a closed account, balance will be undefined');
148
424
  }
149
- const txns = await getAccountTransactions(baseUrl, apiSiteUrl, page, accountNumber, startDateStr, endDateStr, additionalTransactionInformation);
425
+ let txns = [];
426
+ try {
427
+ txns = await getAccountTransactions(baseUrl, apiSiteUrl, page, accountNumber, startDateStr, endDateStr, additionalTransactionInformation);
428
+ } catch (error) {
429
+ debug('Error fetching transactions for %s (possibly closed account): %s', accountNumber, error);
430
+ // Continue with empty transactions
431
+ }
432
+
433
+ // Add regular checking account
150
434
  accounts.push({
151
435
  accountNumber,
152
436
  balance,
153
437
  txns
154
438
  });
439
+
440
+ // Fetch forex accounts for this account number
441
+ try {
442
+ const forexAccounts = await getForexAccounts(baseUrl, page, accountNumber, startDateStr, endDateStr);
443
+ accounts.push(...forexAccounts);
444
+ debug('Added %d forex accounts to results', forexAccounts.length);
445
+ } catch (error) {
446
+ debug('Error fetching forex accounts for %s: %s', accountNumber, error);
447
+ }
448
+
449
+ // Fetch savings accounts for this account number
450
+ try {
451
+ const savingsAccounts = await getSavingsAccounts(baseUrl, page, accountNumber);
452
+ accounts.push(...savingsAccounts);
453
+ debug('Added %d savings accounts to results', savingsAccounts.length);
454
+ } catch (error) {
455
+ debug('Error fetching savings accounts for %s: %s', accountNumber, error);
456
+ }
457
+
458
+ // Fetch investment accounts for this account number
459
+ try {
460
+ const investmentAccounts = await getInvestmentAccounts(baseUrl, page, account);
461
+ accounts.push(...investmentAccounts);
462
+ debug('Added %d investment accounts to results', investmentAccounts.length);
463
+ } catch (error) {
464
+ debug('Error fetching investment accounts for %s: %s', accountNumber, error);
465
+ }
155
466
  }
156
467
  const accountData = {
157
468
  success: true,
@@ -195,4 +506,4 @@ class HapoalimScraper extends _baseScraperWithBrowser.BaseScraperWithBrowser {
195
506
  }
196
507
  }
197
508
  var _default = exports.default = HapoalimScraper;
198
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbW9tZW50IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfdXVpZCIsIl9kZWJ1ZyIsIl9mZXRjaCIsIl9uYXZpZ2F0aW9uIiwiX3dhaXRpbmciLCJfdHJhbnNhY3Rpb25zIiwiX2Jhc2VTY3JhcGVyV2l0aEJyb3dzZXIiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJkZWJ1ZyIsImdldERlYnVnIiwiREFURV9GT1JNQVQiLCJjb252ZXJ0VHJhbnNhY3Rpb25zIiwidHhucyIsIm1hcCIsInR4biIsImlzT3V0Ym91bmQiLCJldmVudEFjdGl2aXR5VHlwZUNvZGUiLCJtZW1vIiwiYmVuZWZpY2lhcnlEZXRhaWxzRGF0YSIsInBhcnR5SGVhZGxpbmUiLCJwYXJ0eU5hbWUiLCJtZXNzYWdlSGVhZGxpbmUiLCJtZXNzYWdlRGV0YWlsIiwibWVtb0xpbmVzIiwicHVzaCIsImxlbmd0aCIsImpvaW4iLCJyZXN1bHQiLCJ0eXBlIiwiVHJhbnNhY3Rpb25UeXBlcyIsIk5vcm1hbCIsImlkZW50aWZpZXIiLCJyZWZlcmVuY2VOdW1iZXIiLCJkYXRlIiwibW9tZW50IiwiZXZlbnREYXRlIiwidG9JU09TdHJpbmciLCJwcm9jZXNzZWREYXRlIiwidmFsdWVEYXRlIiwib3JpZ2luYWxBbW91bnQiLCJldmVudEFtb3VudCIsIm9yaWdpbmFsQ3VycmVuY3kiLCJjaGFyZ2VkQW1vdW50IiwiZGVzY3JpcHRpb24iLCJhY3Rpdml0eURlc2NyaXB0aW9uIiwic3RhdHVzIiwic2VyaWFsTnVtYmVyIiwiVHJhbnNhY3Rpb25TdGF0dXNlcyIsIlBlbmRpbmciLCJDb21wbGV0ZWQiLCJnZXRSZXN0Q29udGV4dCIsInBhZ2UiLCJ3YWl0VW50aWwiLCJldmFsdWF0ZSIsIndpbmRvdyIsImJuaHBBcHAiLCJyZXN0Q29udGV4dCIsInNsaWNlIiwiZmV0Y2hQb2FsaW1YU1JGV2l0aGluUGFnZSIsInVybCIsInBhZ2VVdWlkIiwiY29va2llcyIsIlhTUkZDb29raWUiLCJmaW5kIiwiY29va2llIiwibmFtZSIsImhlYWRlcnMiLCJ2YWx1ZSIsInV1aWQiLCJ1dWlkNCIsImZldGNoUG9zdFdpdGhpblBhZ2UiLCJnZXRFeHRyYVNjcmFwIiwidHhuc1Jlc3VsdCIsImJhc2VVcmwiLCJhY2NvdW50TnVtYmVyIiwicHJvbWlzZXMiLCJ0cmFuc2FjdGlvbnMiLCJ0cmFuc2FjdGlvbiIsInBmbURldGFpbHMiLCJleHRyYVRyYW5zYWN0aW9uRGV0YWlscyIsImZldGNoR2V0V2l0aGluUGFnZSIsInRyYW5zYWN0aW9uTnVtYmVyIiwicmVzIiwiUHJvbWlzZSIsImFsbCIsImdldEFjY291bnRUcmFuc2FjdGlvbnMiLCJhcGlTaXRlVXJsIiwic3RhcnREYXRlIiwiZW5kRGF0ZSIsImFkZGl0aW9uYWxUcmFuc2FjdGlvbkluZm9ybWF0aW9uIiwidHhuc1VybCIsImZpbmFsUmVzdWx0IiwiZ2V0QWNjb3VudEJhbGFuY2UiLCJiYWxhbmNlQW5kQ3JlZGl0TGltaXRVcmwiLCJiYWxhbmNlQW5kQ3JlZGl0TGltaXQiLCJjdXJyZW50QmFsYW5jZSIsImZldGNoQWNjb3VudERhdGEiLCJvcHRpb25zIiwiYWNjb3VudERhdGFVcmwiLCJhY2NvdW50c0luZm8iLCJkZWZhdWx0U3RhcnRNb21lbnQiLCJzdWJ0cmFjdCIsImFkZCIsInRvRGF0ZSIsInN0YXJ0TW9tZW50IiwibWF4Iiwic3RhcnREYXRlU3RyIiwiZm9ybWF0IiwiZW5kRGF0ZVN0ciIsImFjY291bnRzIiwiYWNjb3VudCIsImJhbGFuY2UiLCJiYW5rTnVtYmVyIiwiYnJhbmNoTnVtYmVyIiwiaXNBY3RpdmVBY2NvdW50IiwiYWNjb3VudENsb3NpbmdSZWFzb25Db2RlIiwiYWNjb3VudERhdGEiLCJzdWNjZXNzIiwiZ2V0UG9zc2libGVMb2dpblJlc3VsdHMiLCJ1cmxzIiwiTG9naW5SZXN1bHRzIiwiU3VjY2VzcyIsIkludmFsaWRQYXNzd29yZCIsIkNoYW5nZVBhc3N3b3JkIiwiY3JlYXRlTG9naW5GaWVsZHMiLCJjcmVkZW50aWFscyIsInNlbGVjdG9yIiwidXNlckNvZGUiLCJwYXNzd29yZCIsIkhhcG9hbGltU2NyYXBlciIsIkJhc2VTY3JhcGVyV2l0aEJyb3dzZXIiLCJnZXRMb2dpbk9wdGlvbnMiLCJsb2dpblVybCIsImZpZWxkcyIsInN1Ym1pdEJ1dHRvblNlbGVjdG9yIiwicG9zdEFjdGlvbiIsIndhaXRGb3JSZWRpcmVjdCIsInBvc3NpYmxlUmVzdWx0cyIsImZldGNoRGF0YSIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JhcGVycy9oYXBvYWxpbS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyB0eXBlIFBhZ2UgfSBmcm9tICdwdXBwZXRlZXInO1xuaW1wb3J0IHsgdjQgYXMgdXVpZDQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IGdldERlYnVnIH0gZnJvbSAnLi4vaGVscGVycy9kZWJ1Zyc7XG5pbXBvcnQgeyBmZXRjaEdldFdpdGhpblBhZ2UsIGZldGNoUG9zdFdpdGhpblBhZ2UgfSBmcm9tICcuLi9oZWxwZXJzL2ZldGNoJztcbmltcG9ydCB7IHdhaXRGb3JSZWRpcmVjdCB9IGZyb20gJy4uL2hlbHBlcnMvbmF2aWdhdGlvbic7XG5pbXBvcnQgeyB3YWl0VW50aWwgfSBmcm9tICcuLi9oZWxwZXJzL3dhaXRpbmcnO1xuaW1wb3J0IHsgdHlwZSBUcmFuc2FjdGlvbiwgVHJhbnNhY3Rpb25TdGF0dXNlcywgVHJhbnNhY3Rpb25UeXBlcywgdHlwZSBUcmFuc2FjdGlvbnNBY2NvdW50IH0gZnJvbSAnLi4vdHJhbnNhY3Rpb25zJztcbmltcG9ydCB7IEJhc2VTY3JhcGVyV2l0aEJyb3dzZXIsIExvZ2luUmVzdWx0cywgdHlwZSBQb3NzaWJsZUxvZ2luUmVzdWx0cyB9IGZyb20gJy4vYmFzZS1zY3JhcGVyLXdpdGgtYnJvd3Nlcic7XG5pbXBvcnQgeyB0eXBlIFNjcmFwZXJPcHRpb25zIH0gZnJvbSAnLi9pbnRlcmZhY2UnO1xuXG5jb25zdCBkZWJ1ZyA9IGdldERlYnVnKCdoYXBvYWxpbScpO1xuXG5jb25zdCBEQVRFX0ZPUk1BVCA9ICdZWVlZTU1ERCc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbmFtZXNwYWNlXG5kZWNsYXJlIG5hbWVzcGFjZSB3aW5kb3cge1xuICBjb25zdCBibmhwQXBwOiBhbnk7XG59XG5cbmludGVyZmFjZSBTY3JhcGVkVHJhbnNhY3Rpb24ge1xuICBzZXJpYWxOdW1iZXI/OiBudW1iZXI7XG4gIGFjdGl2aXR5RGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGV2ZW50QW1vdW50OiBudW1iZXI7XG4gIHZhbHVlRGF0ZT86IHN0cmluZztcbiAgZXZlbnREYXRlPzogc3RyaW5nO1xuICByZWZlcmVuY2VOdW1iZXI/OiBudW1iZXI7XG4gIFNjcmFwZWRUcmFuc2FjdGlvbj86IHN0cmluZztcbiAgZXZlbnRBY3Rpdml0eVR5cGVDb2RlOiBudW1iZXI7XG4gIGN1cnJlbnRCYWxhbmNlOiBudW1iZXI7XG4gIHBmbURldGFpbHM6IHN0cmluZztcbiAgYmVuZWZpY2lhcnlEZXRhaWxzRGF0YT86IHtcbiAgICBwYXJ0eUhlYWRsaW5lPzogc3RyaW5nO1xuICAgIHBhcnR5TmFtZT86IHN0cmluZztcbiAgICBtZXNzYWdlSGVhZGxpbmU/OiBzdHJpbmc7XG4gICAgbWVzc2FnZURldGFpbD86IHN0cmluZztcbiAgfTtcbn1cblxuaW50ZXJmYWNlIFNjcmFwZWRQZm1UcmFuc2FjdGlvbiB7XG4gIHRyYW5zYWN0aW9uTnVtYmVyOiBudW1iZXI7XG59XG5cbnR5cGUgRmV0Y2hlZEFjY291bnREYXRhID0ge1xuICBiYW5rTnVtYmVyOiBzdHJpbmc7XG4gIGFjY291bnROdW1iZXI6IHN0cmluZztcbiAgYnJhbmNoTnVtYmVyOiBzdHJpbmc7XG4gIGFjY291bnRDbG9zaW5nUmVhc29uQ29kZTogbnVtYmVyO1xufVtdO1xuXG50eXBlIEZldGNoZWRBY2NvdW50VHJhbnNhY3Rpb25zRGF0YSA9IHtcbiAgdHJhbnNhY3Rpb25zOiBTY3JhcGVkVHJhbnNhY3Rpb25bXTtcbn07XG5cbnR5cGUgQmFsYW5jZUFuZENyZWRpdExpbWl0ID0ge1xuICBjcmVkaXRMaW1pdEFtb3VudDogbnVtYmVyO1xuICBjcmVkaXRMaW1pdERlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGNyZWRpdExpbWl0VXRpbGl6YXRpb25BbW91bnQ6IG51bWJlcjtcbiAgY3JlZGl0TGltaXRVdGlsaXphdGlvbkV4aXN0YW5jZUNvZGU6IG51bWJlcjtcbiAgY3JlZGl0TGltaXRVdGlsaXphdGlvblBlcmNlbnQ6IG51bWJlcjtcbiAgY3VycmVudEFjY291bnRMaW1pdHNBbW91bnQ6IG51bWJlcjtcbiAgY3VycmVudEJhbGFuY2U6IG51bWJlcjtcbiAgd2l0aGRyYXdhbEJhbGFuY2U6IG51bWJlcjtcbn07XG5cbmZ1bmN0aW9uIGNvbnZlcnRUcmFuc2FjdGlvbnModHhuczogU2NyYXBlZFRyYW5zYWN0aW9uW10pOiBUcmFuc2FjdGlvbltdIHtcbiAgcmV0dXJuIHR4bnMubWFwKHR4biA9PiB7XG4gICAgY29uc3QgaXNPdXRib3VuZCA9IHR4bi5ldmVudEFjdGl2aXR5VHlwZUNvZGUgPT09IDI7XG5cbiAgICBsZXQgbWVtbyA9ICcnO1xuICAgIGlmICh0eG4uYmVuZWZpY2lhcnlEZXRhaWxzRGF0YSkge1xuICAgICAgY29uc3QgeyBwYXJ0eUhlYWRsaW5lLCBwYXJ0eU5hbWUsIG1lc3NhZ2VIZWFkbGluZSwgbWVzc2FnZURldGFpbCB9ID0gdHhuLmJlbmVmaWNpYXJ5RGV0YWlsc0RhdGE7XG4gICAgICBjb25zdCBtZW1vTGluZXM6IHN0cmluZ1tdID0gW107XG4gICAgICBpZiAocGFydHlIZWFkbGluZSkge1xuICAgICAgICBtZW1vTGluZXMucHVzaChwYXJ0eUhlYWRsaW5lKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHBhcnR5TmFtZSkge1xuICAgICAgICBtZW1vTGluZXMucHVzaChgJHtwYXJ0eU5hbWV9LmApO1xuICAgICAgfVxuXG4gICAgICBpZiAobWVzc2FnZUhlYWRsaW5lKSB7XG4gICAgICAgIG1lbW9MaW5lcy5wdXNoKG1lc3NhZ2VIZWFkbGluZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChtZXNzYWdlRGV0YWlsKSB7XG4gICAgICAgIG1lbW9MaW5lcy5wdXNoKGAke21lc3NhZ2VEZXRhaWx9LmApO1xuICAgICAgfVxuXG4gICAgICBpZiAobWVtb0xpbmVzLmxlbmd0aCkge1xuICAgICAgICBtZW1vID0gbWVtb0xpbmVzLmpvaW4oJyAnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQ6IFRyYW5zYWN0aW9uID0ge1xuICAgICAgdHlwZTogVHJhbnNhY3Rpb25UeXBlcy5Ob3JtYWwsXG4gICAgICBpZGVudGlmaWVyOiB0eG4ucmVmZXJlbmNlTnVtYmVyLFxuICAgICAgZGF0ZTogbW9tZW50KHR4bi5ldmVudERhdGUsIERBVEVfRk9STUFUKS50b0lTT1N0cmluZygpLFxuICAgICAgcHJvY2Vzc2VkRGF0ZTogbW9tZW50KHR4bi52YWx1ZURhdGUsIERBVEVfRk9STUFUKS50b0lTT1N0cmluZygpLFxuICAgICAgb3JpZ2luYWxBbW91bnQ6IGlzT3V0Ym91bmQgPyAtdHhuLmV2ZW50QW1vdW50IDogdHhuLmV2ZW50QW1vdW50LFxuICAgICAgb3JpZ2luYWxDdXJyZW5jeTogJ0lMUycsXG4gICAgICBjaGFyZ2VkQW1vdW50OiBpc091dGJvdW5kID8gLXR4bi5ldmVudEFtb3VudCA6IHR4bi5ldmVudEFtb3VudCxcbiAgICAgIGRlc2NyaXB0aW9uOiB0eG4uYWN0aXZpdHlEZXNjcmlwdGlvbiB8fCAnJyxcbiAgICAgIHN0YXR1czogdHhuLnNlcmlhbE51bWJlciA9PT0gMCA/IFRyYW5zYWN0aW9uU3RhdHVzZXMuUGVuZGluZyA6IFRyYW5zYWN0aW9uU3RhdHVzZXMuQ29tcGxldGVkLFxuICAgICAgbWVtbyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFJlc3RDb250ZXh0KHBhZ2U6IFBhZ2UpIHtcbiAgYXdhaXQgd2FpdFVudGlsKCgpID0+IHtcbiAgICByZXR1cm4gcGFnZS5ldmFsdWF0ZSgoKSA9PiAhIXdpbmRvdy5ibmhwQXBwKTtcbiAgfSwgJ3dhaXRpbmcgZm9yIGFwcCBkYXRhIGxvYWQnKTtcblxuICBjb25zdCByZXN1bHQgPSBhd2FpdCBwYWdlLmV2YWx1YXRlKCgpID0+IHtcbiAgICByZXR1cm4gd2luZG93LmJuaHBBcHAucmVzdENvbnRleHQ7XG4gIH0pO1xuXG4gIHJldHVybiByZXN1bHQuc2xpY2UoMSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoUG9hbGltWFNSRldpdGhpblBhZ2UoXG4gIHBhZ2U6IFBhZ2UsXG4gIHVybDogc3RyaW5nLFxuICBwYWdlVXVpZDogc3RyaW5nLFxuKTogUHJvbWlzZTxGZXRjaGVkQWNjb3VudFRyYW5zYWN0aW9uc0RhdGEgfCBudWxsPiB7XG4gIGNvbnN0IGNvb2tpZXMgPSBhd2FpdCBwYWdlLmNvb2tpZXMoKTtcbiAgY29uc3QgWFNSRkNvb2tpZSA9IGNvb2tpZXMuZmluZChjb29raWUgPT4gY29va2llLm5hbWUgPT09ICdYU1JGLVRPS0VOJyk7XG4gIGNvbnN0IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgaWYgKFhTUkZDb29raWUgIT0gbnVsbCkge1xuICAgIGhlYWRlcnNbJ1gtWFNSRi1UT0tFTiddID0gWFNSRkNvb2tpZS52YWx1ZTtcbiAgfVxuICBoZWFkZXJzLnBhZ2VVdWlkID0gcGFnZVV1aWQ7XG4gIGhlYWRlcnMudXVpZCA9IHV1aWQ0KCk7XG4gIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL2pzb247Y2hhcnNldD1VVEYtOCc7XG4gIHJldHVybiBmZXRjaFBvc3RXaXRoaW5QYWdlPEZldGNoZWRBY2NvdW50VHJhbnNhY3Rpb25zRGF0YT4ocGFnZSwgdXJsLCBbXSwgaGVhZGVycyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEV4dHJhU2NyYXAoXG4gIHR4bnNSZXN1bHQ6IEZldGNoZWRBY2NvdW50VHJhbnNhY3Rpb25zRGF0YSxcbiAgYmFzZVVybDogc3RyaW5nLFxuICBwYWdlOiBQYWdlLFxuICBhY2NvdW50TnVtYmVyOiBzdHJpbmcsXG4pOiBQcm9taXNlPEZldGNoZWRBY2NvdW50VHJhbnNhY3Rpb25zRGF0YT4ge1xuICBjb25zdCBwcm9taXNlcyA9IHR4bnNSZXN1bHQudHJhbnNhY3Rpb25zLm1hcChhc3luYyAodHJhbnNhY3Rpb246IFNjcmFwZWRUcmFuc2FjdGlvbik6IFByb21pc2U8U2NyYXBlZFRyYW5zYWN0aW9uPiA9PiB7XG4gICAgY29uc3QgeyBwZm1EZXRhaWxzLCBzZXJpYWxOdW1iZXIgfSA9IHRyYW5zYWN0aW9uO1xuICAgIGlmIChzZXJpYWxOdW1iZXIgIT09IDApIHtcbiAgICAgIGNvbnN0IHVybCA9IGAke2Jhc2VVcmx9JHtwZm1EZXRhaWxzfSZhY2NvdW50SWQ9JHthY2NvdW50TnVtYmVyfSZsYW5nPWhlYDtcbiAgICAgIGNvbnN0IGV4dHJhVHJhbnNhY3Rpb25EZXRhaWxzID0gKGF3YWl0IGZldGNoR2V0V2l0aGluUGFnZTxTY3JhcGVkUGZtVHJhbnNhY3Rpb25bXT4ocGFnZSwgdXJsKSkgfHwgW107XG4gICAgICBpZiAoZXh0cmFUcmFuc2FjdGlvbkRldGFpbHMgJiYgZXh0cmFUcmFuc2FjdGlvbkRldGFpbHMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHsgdHJhbnNhY3Rpb25OdW1iZXIgfSA9IGV4dHJhVHJhbnNhY3Rpb25EZXRhaWxzWzBdO1xuICAgICAgICBpZiAodHJhbnNhY3Rpb25OdW1iZXIpIHtcbiAgICAgICAgICByZXR1cm4geyAuLi50cmFuc2FjdGlvbiwgcmVmZXJlbmNlTnVtYmVyOiB0cmFuc2FjdGlvbk51bWJlciB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cmFuc2FjdGlvbjtcbiAgfSk7XG4gIGNvbnN0IHJlcyA9IGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcbiAgcmV0dXJuIHsgdHJhbnNhY3Rpb25zOiByZXMgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0QWNjb3VudFRyYW5zYWN0aW9ucyhcbiAgYmFzZVVybDogc3RyaW5nLFxuICBhcGlTaXRlVXJsOiBzdHJpbmcsXG4gIHBhZ2U6IFBhZ2UsXG4gIGFjY291bnROdW1iZXI6IHN0cmluZyxcbiAgc3RhcnREYXRlOiBzdHJpbmcsXG4gIGVuZERhdGU6IHN0cmluZyxcbiAgYWRkaXRpb25hbFRyYW5zYWN0aW9uSW5mb3JtYXRpb24gPSBmYWxzZSxcbikge1xuICBjb25zdCB0eG5zVXJsID0gYCR7YXBpU2l0ZVVybH0vY3VycmVudC1hY2NvdW50L3RyYW5zYWN0aW9ucz9hY2NvdW50SWQ9JHthY2NvdW50TnVtYmVyfSZudW1JdGVtc1BlclBhZ2U9MTAwMCZyZXRyaWV2YWxFbmREYXRlPSR7ZW5kRGF0ZX0mcmV0cmlldmFsU3RhcnREYXRlPSR7c3RhcnREYXRlfSZzb3J0Q29kZT0xYDtcbiAgY29uc3QgdHhuc1Jlc3VsdCA9IGF3YWl0IGZldGNoUG9hbGltWFNSRldpdGhpblBhZ2UocGFnZSwgdHhuc1VybCwgJy9jdXJyZW50LWFjY291bnQvdHJhbnNhY3Rpb25zJyk7XG5cbiAgY29uc3QgZmluYWxSZXN1bHQgPVxuICAgIGFkZGl0aW9uYWxUcmFuc2FjdGlvbkluZm9ybWF0aW9uICYmIHR4bnNSZXN1bHQ/LnRyYW5zYWN0aW9ucy5sZW5ndGhcbiAgICAgID8gYXdhaXQgZ2V0RXh0cmFTY3JhcCh0eG5zUmVzdWx0LCBiYXNlVXJsLCBwYWdlLCBhY2NvdW50TnVtYmVyKVxuICAgICAgOiB0eG5zUmVzdWx0O1xuXG4gIHJldHVybiBjb252ZXJ0VHJhbnNhY3Rpb25zKGZpbmFsUmVzdWx0Py50cmFuc2FjdGlvbnMgPz8gW10pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRBY2NvdW50QmFsYW5jZShhcGlTaXRlVXJsOiBzdHJpbmcsIHBhZ2U6IFBhZ2UsIGFjY291bnROdW1iZXI6IHN0cmluZykge1xuICBjb25zdCBiYWxhbmNlQW5kQ3JlZGl0TGltaXRVcmwgPSBgJHthcGlTaXRlVXJsfS9jdXJyZW50LWFjY291bnQvY29tcG9zaXRlL2JhbGFuY2VBbmRDcmVkaXRMaW1pdD9hY2NvdW50SWQ9JHthY2NvdW50TnVtYmVyfSZ2aWV3PWRldGFpbHMmbGFuZz1oZWA7XG4gIGNvbnN0IGJhbGFuY2VBbmRDcmVkaXRMaW1pdCA9IGF3YWl0IGZldGNoR2V0V2l0aGluUGFnZTxCYWxhbmNlQW5kQ3JlZGl0TGltaXQ+KHBhZ2UsIGJhbGFuY2VBbmRDcmVkaXRMaW1pdFVybCk7XG5cbiAgcmV0dXJuIGJhbGFuY2VBbmRDcmVkaXRMaW1pdD8uY3VycmVudEJhbGFuY2U7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoQWNjb3VudERhdGEocGFnZTogUGFnZSwgYmFzZVVybDogc3RyaW5nLCBvcHRpb25zOiBTY3JhcGVyT3B0aW9ucykge1xuICBjb25zdCByZXN0Q29udGV4dCA9IGF3YWl0IGdldFJlc3RDb250ZXh0KHBhZ2UpO1xuICBjb25zdCBhcGlTaXRlVXJsID0gYCR7YmFzZVVybH0vJHtyZXN0Q29udGV4dH1gO1xuICBjb25zdCBhY2NvdW50RGF0YVVybCA9IGAke2Jhc2VVcmx9L1NlcnZlclNlcnZpY2VzL2dlbmVyYWwvYWNjb3VudHNgO1xuXG4gIGRlYnVnKCdmZXRjaGluZyBhY2NvdW50cyBkYXRhJyk7XG4gIGNvbnN0IGFjY291bnRzSW5mbyA9IChhd2FpdCBmZXRjaEdldFdpdGhpblBhZ2U8RmV0Y2hlZEFjY291bnREYXRhPihwYWdlLCBhY2NvdW50RGF0YVVybCkpIHx8IFtdO1xuICBkZWJ1ZygnZ290ICVkIGFjY291bnRzLCBmZXRjaGluZyB0eG5zIGFuZCBiYWxhbmNlJywgYWNjb3VudHNJbmZvLmxlbmd0aCk7XG5cbiAgY29uc3QgZGVmYXVsdFN0YXJ0TW9tZW50ID0gbW9tZW50KCkuc3VidHJhY3QoMSwgJ3llYXJzJykuYWRkKDEsICdkYXknKTtcbiAgY29uc3Qgc3RhcnREYXRlID0gb3B0aW9ucy5zdGFydERhdGUgfHwgZGVmYXVsdFN0YXJ0TW9tZW50LnRvRGF0ZSgpO1xuICBjb25zdCBzdGFydE1vbWVudCA9IG1vbWVudC5tYXgoZGVmYXVsdFN0YXJ0TW9tZW50LCBtb21lbnQoc3RhcnREYXRlKSk7XG4gIGNvbnN0IHsgYWRkaXRpb25hbFRyYW5zYWN0aW9uSW5mb3JtYXRpb24gfSA9IG9wdGlvbnM7XG5cbiAgY29uc3Qgc3RhcnREYXRlU3RyID0gc3RhcnRNb21lbnQuZm9ybWF0KERBVEVfRk9STUFUKTtcbiAgY29uc3QgZW5kRGF0ZVN0ciA9IG1vbWVudCgpLmZvcm1hdChEQVRFX0ZPUk1BVCk7XG5cbiAgY29uc3QgYWNjb3VudHM6IFRyYW5zYWN0aW9uc0FjY291bnRbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgYWNjb3VudCBvZiBhY2NvdW50c0luZm8pIHtcbiAgICBsZXQgYmFsYW5jZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IGFjY291bnROdW1iZXIgPSBgJHthY2NvdW50LmJhbmtOdW1iZXJ9LSR7YWNjb3VudC5icmFuY2hOdW1iZXJ9LSR7YWNjb3VudC5hY2NvdW50TnVtYmVyfWA7XG5cbiAgICBjb25zdCBpc0FjdGl2ZUFjY291bnQgPSBhY2NvdW50LmFjY291bnRDbG9zaW5nUmVhc29uQ29kZSA9PT0gMDtcbiAgICBpZiAoaXNBY3RpdmVBY2NvdW50KSB7XG4gICAgICBiYWxhbmNlID0gYXdhaXQgZ2V0QWNjb3VudEJhbGFuY2UoYXBpU2l0ZVVybCwgcGFnZSwgYWNjb3VudE51bWJlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlYnVnKCdTa2lwcGluZyBiYWxhbmNlIGZvciBhIGNsb3NlZCBhY2NvdW50LCBiYWxhbmNlIHdpbGwgYmUgdW5kZWZpbmVkJyk7XG4gICAgfVxuXG4gICAgY29uc3QgdHhucyA9IGF3YWl0IGdldEFjY291bnRUcmFuc2FjdGlvbnMoXG4gICAgICBiYXNlVXJsLFxuICAgICAgYXBpU2l0ZVVybCxcbiAgICAgIHBhZ2UsXG4gICAgICBhY2NvdW50TnVtYmVyLFxuICAgICAgc3RhcnREYXRlU3RyLFxuICAgICAgZW5kRGF0ZVN0cixcbiAgICAgIGFkZGl0aW9uYWxUcmFuc2FjdGlvbkluZm9ybWF0aW9uLFxuICAgICk7XG5cbiAgICBhY2NvdW50cy5wdXNoKHtcbiAgICAgIGFjY291bnROdW1iZXIsXG4gICAgICBiYWxhbmNlLFxuICAgICAgdHhucyxcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IGFjY291bnREYXRhID0ge1xuICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgYWNjb3VudHMsXG4gIH07XG4gIGRlYnVnKCdmZXRjaGluZyBlbmRlZCcpO1xuICByZXR1cm4gYWNjb3VudERhdGE7XG59XG5cbmZ1bmN0aW9uIGdldFBvc3NpYmxlTG9naW5SZXN1bHRzKGJhc2VVcmw6IHN0cmluZykge1xuICBjb25zdCB1cmxzOiBQb3NzaWJsZUxvZ2luUmVzdWx0cyA9IHt9O1xuICB1cmxzW0xvZ2luUmVzdWx0cy5TdWNjZXNzXSA9IFtcbiAgICBgJHtiYXNlVXJsfS9wb3J0YWxzZXJ2ZXIvSG9tZVBhZ2VgLFxuICAgIGAke2Jhc2VVcmx9L25nLXBvcnRhbHMtYnQvcmIvaGUvaG9tZXBhZ2VgLFxuICAgIGAke2Jhc2VVcmx9L25nLXBvcnRhbHMvcmIvaGUvaG9tZXBhZ2VgLFxuICBdO1xuICB1cmxzW0xvZ2luUmVzdWx0cy5JbnZhbGlkUGFzc3dvcmRdID0gW1xuICAgIGAke2Jhc2VVcmx9L0FVVEhFTlRJQ0FURS9MT0dPTj9mbG93PUFVVEhFTlRJQ0FURSZzdGF0ZT1MT0dPTiZlcnJvcmNvZGU9MS42JmNhbGxtZT1mYWxzZWAsXG4gIF07XG4gIHVybHNbTG9naW5SZXN1bHRzLkNoYW5nZVBhc3N3b3JkXSA9IFtcbiAgICBgJHtiYXNlVXJsfS9NQ1AvU1RBUlQ/Zmxvdz1NQ1Amc3RhdGU9U1RBUlQmZXhwaXJlZERhdGU9bnVsbGAsXG4gICAgL1xcL0FCT1VUVE9FWFBJUkVcXC9TVEFSVC9pLFxuICBdO1xuICByZXR1cm4gdXJscztcbn1cblxuZnVuY3Rpb24gY3JlYXRlTG9naW5GaWVsZHMoY3JlZGVudGlhbHM6IFNjcmFwZXJTcGVjaWZpY0NyZWRlbnRpYWxzKSB7XG4gIHJldHVybiBbXG4gICAgeyBzZWxlY3RvcjogJyN1c2VyQ29kZScsIHZhbHVlOiBjcmVkZW50aWFscy51c2VyQ29kZSB9LFxuICAgIHsgc2VsZWN0b3I6ICcjcGFzc3dvcmQnLCB2YWx1ZTogY3JlZGVudGlhbHMucGFzc3dvcmQgfSxcbiAgXTtcbn1cblxudHlwZSBTY3JhcGVyU3BlY2lmaWNDcmVkZW50aWFscyA9IHsgdXNlckNvZGU6IHN0cmluZzsgcGFzc3dvcmQ6IHN0cmluZyB9O1xuXG5jbGFzcyBIYXBvYWxpbVNjcmFwZXIgZXh0ZW5kcyBCYXNlU2NyYXBlcldpdGhCcm93c2VyPFNjcmFwZXJTcGVjaWZpY0NyZWRlbnRpYWxzPiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjbGFzcy1tZXRob2RzLXVzZS10aGlzXG4gIGdldCBiYXNlVXJsKCkge1xuICAgIHJldHVybiAnaHR0cHM6Ly9sb2dpbi5iYW5raGFwb2FsaW0uY28uaWwnO1xuICB9XG5cbiAgZ2V0TG9naW5PcHRpb25zKGNyZWRlbnRpYWxzOiBTY3JhcGVyU3BlY2lmaWNDcmVkZW50aWFscykge1xuICAgIHJldHVybiB7XG4gICAgICBsb2dpblVybDogYCR7dGhpcy5iYXNlVXJsfS9jZ2ktYmluL3BvYWx3d3djP3JlcU5hbWU9Z2V0TG9nb25QYWdlYCxcbiAgICAgIGZpZWxkczogY3JlYXRlTG9naW5GaWVsZHMoY3JlZGVudGlhbHMpLFxuICAgICAgc3VibWl0QnV0dG9uU2VsZWN0b3I6ICcubG9naW4tYnRuJyxcbiAgICAgIHBvc3RBY3Rpb246IGFzeW5jICgpID0+IHdhaXRGb3JSZWRpcmVjdCh0aGlzLnBhZ2UpLFxuICAgICAgcG9zc2libGVSZXN1bHRzOiBnZXRQb3NzaWJsZUxvZ2luUmVzdWx0cyh0aGlzLmJhc2VVcmwpLFxuICAgIH07XG4gIH1cblxuICBhc3luYyBmZXRjaERhdGEoKSB7XG4gICAgcmV0dXJuIGZldGNoQWNjb3VudERhdGEodGhpcy5wYWdlLCB0aGlzLmJhc2VVcmwsIHRoaXMub3B0aW9ucyk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSGFwb2FsaW1TY3JhcGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFBQyxLQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxNQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxNQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxXQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxRQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxhQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyx1QkFBQSxHQUFBUCxPQUFBO0FBQThHLFNBQUFELHVCQUFBUyxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBRzlHLE1BQU1HLEtBQUssR0FBRyxJQUFBQyxlQUFRLEVBQUMsVUFBVSxDQUFDO0FBRWxDLE1BQU1DLFdBQVcsR0FBRyxVQUFVOztBQUU5Qjs7QUFrREEsU0FBU0MsbUJBQW1CQSxDQUFDQyxJQUEwQixFQUFpQjtFQUN0RSxPQUFPQSxJQUFJLENBQUNDLEdBQUcsQ0FBQ0MsR0FBRyxJQUFJO0lBQ3JCLE1BQU1DLFVBQVUsR0FBR0QsR0FBRyxDQUFDRSxxQkFBcUIsS0FBSyxDQUFDO0lBRWxELElBQUlDLElBQUksR0FBRyxFQUFFO0lBQ2IsSUFBSUgsR0FBRyxDQUFDSSxzQkFBc0IsRUFBRTtNQUM5QixNQUFNO1FBQUVDLGFBQWE7UUFBRUMsU0FBUztRQUFFQyxlQUFlO1FBQUVDO01BQWMsQ0FBQyxHQUFHUixHQUFHLENBQUNJLHNCQUFzQjtNQUMvRixNQUFNSyxTQUFtQixHQUFHLEVBQUU7TUFDOUIsSUFBSUosYUFBYSxFQUFFO1FBQ2pCSSxTQUFTLENBQUNDLElB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
509
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbW9tZW50IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfdXVpZCIsIl9jb25zdGFudHMiLCJfZGVidWciLCJfZmV0Y2giLCJfbmF2aWdhdGlvbiIsIl93YWl0aW5nIiwiX3RyYW5zYWN0aW9ucyIsIl9iYXNlU2NyYXBlcldpdGhCcm93c2VyIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiZGVidWciLCJnZXREZWJ1ZyIsIkRBVEVfRk9STUFUIiwiY29udmVydFRyYW5zYWN0aW9ucyIsInR4bnMiLCJtYXAiLCJ0eG4iLCJpc091dGJvdW5kIiwiZXZlbnRBY3Rpdml0eVR5cGVDb2RlIiwibWVtbyIsImJlbmVmaWNpYXJ5RGV0YWlsc0RhdGEiLCJwYXJ0eUhlYWRsaW5lIiwicGFydHlOYW1lIiwibWVzc2FnZUhlYWRsaW5lIiwibWVzc2FnZURldGFpbCIsIm1lbW9MaW5lcyIsInB1c2giLCJsZW5ndGgiLCJqb2luIiwicmVzdWx0IiwidHlwZSIsIlRyYW5zYWN0aW9uVHlwZXMiLCJOb3JtYWwiLCJpZGVudGlmaWVyIiwicmVmZXJlbmNlTnVtYmVyIiwiZGF0ZSIsIm1vbWVudCIsImV2ZW50RGF0ZSIsInRvSVNPU3RyaW5nIiwicHJvY2Vzc2VkRGF0ZSIsInZhbHVlRGF0ZSIsIm9yaWdpbmFsQW1vdW50IiwiZXZlbnRBbW91bnQiLCJvcmlnaW5hbEN1cnJlbmN5IiwiU0hFS0VMX0NVUlJFTkNZIiwiY2hhcmdlZEFtb3VudCIsImRlc2NyaXB0aW9uIiwiYWN0aXZpdHlEZXNjcmlwdGlvbiIsInN0YXR1cyIsInNlcmlhbE51bWJlciIsIlRyYW5zYWN0aW9uU3RhdHVzZXMiLCJQZW5kaW5nIiwiQ29tcGxldGVkIiwiY29udmVydEZvcmV4VHJhbnNhY3Rpb25zIiwiY3VycmVuY3kiLCJkYXRlU3RyIiwiZXhlY3V0aW5nRGF0ZSIsInRvU3RyaW5nIiwidmFsdWVEYXRlU3RyIiwiZXZlbnREZXRhaWxzIiwicmVjb3JkU2VyaWFsTnVtYmVyIiwiZ2V0UmVzdENvbnRleHQiLCJwYWdlIiwid2FpdFVudGlsIiwiZXZhbHVhdGUiLCJ3aW5kb3ciLCJibmhwQXBwIiwicmVzdENvbnRleHQiLCJzbGljZSIsImZldGNoUG9hbGltWFNSRldpdGhpblBhZ2UiLCJ1cmwiLCJwYWdlVXVpZCIsImNvb2tpZXMiLCJYU1JGQ29va2llIiwiZmluZCIsImNvb2tpZSIsIm5hbWUiLCJoZWFkZXJzIiwidmFsdWUiLCJ1dWlkIiwidXVpZDQiLCJmZXRjaFBvc3RXaXRoaW5QYWdlIiwiZ2V0RXh0cmFTY3JhcCIsInR4bnNSZXN1bHQiLCJiYXNlVXJsIiwiYWNjb3VudE51bWJlciIsInByb21pc2VzIiwidHJhbnNhY3Rpb25zIiwidHJhbnNhY3Rpb24iLCJwZm1EZXRhaWxzIiwiZXh0cmFUcmFuc2FjdGlvbkRldGFpbHMiLCJmZXRjaEdldFdpdGhpblBhZ2UiLCJ0cmFuc2FjdGlvbk51bWJlciIsInJlcyIsIlByb21pc2UiLCJhbGwiLCJnZXRBY2NvdW50VHJhbnNhY3Rpb25zIiwiYXBpU2l0ZVVybCIsInN0YXJ0RGF0ZSIsImVuZERhdGUiLCJhZGRpdGlvbmFsVHJhbnNhY3Rpb25JbmZvcm1hdGlvbiIsInR4bnNVcmwiLCJmaW5hbFJlc3VsdCIsImdldEFjY291bnRCYWxhbmNlIiwiYmFsYW5jZUFuZENyZWRpdExpbWl0VXJsIiwiYmFsYW5jZUFuZENyZWRpdExpbWl0IiwiY3VycmVudEJhbGFuY2UiLCJnZXRGb3JleEFjY291bnRzIiwiYWNjb3VudHMiLCJjb2RlIiwic3dpZnQiLCJkZXRhaWxlZEFjY291bnRUeXBlQ29kZSIsImZvcmV4VXJsIiwiZm9yZXhEYXRhIiwiYmFsYW5jZXNBbmRMaW1pdHNEYXRhTGlzdCIsImN1cnJlbmN5RGF0YSIsImN1cnJlbmN5U3dpZnRDb2RlIiwidHJhbnNhY3Rpb25Db3VudCIsImJhbGFuY2UiLCJ0eG5EYXRlcyIsInQiLCJmb3JleEFjY291bnROdW1iZXIiLCJlcnJvciIsImdldFNhdmluZ3NBY2NvdW50cyIsInNhdmluZ3NVcmwiLCJzYXZpbmdzRGF0YSIsImRlcG9zaXRzV3JhcHBlckRhdGEiLCJ3cmFwcGVyIiwiZGVwb3NpdCIsImRhdGEiLCJyZXZhbHVlZFRvdGFsQW1vdW50IiwicHJpbmNpcGFsQW1vdW50Iiwic2F2aW5nc0FjY291bnROdW1iZXIiLCJkZXBvc2l0U2VyaWFsSWQiLCJzYXZpbmdzQWNjb3VudCIsImdldEludmVzdG1lbnRBY2NvdW50cyIsImFjY291bnQiLCJicmFuY2hOdW1iZXIiLCJjYXB0dXJlZFNlc3Npb24iLCJjYXB0dXJlZENzZXNzaW9uIiwicmVxdWVzdEhhbmRsZXIiLCJyZXF1ZXN0Iiwic2Vzc2lvbiIsImNzZXNzaW9uIiwiY29udGludWUiLCJjb250aW51ZUVycm9yIiwibXl0cmFkZVVybCIsInNldFJlcXVlc3RJbnRlcmNlcHRpb24iLCJvbiIsImdvdG8iLCJ0aW1lb3V0IiwicmVzb2x2ZSIsInNldFRpbWVvdXQiLCJuYXZFcnJvciIsIm9mZiIsImZpZWxkcyIsImludmVzdG1lbnRVcmwiLCJzZXNzaW9uSWQiLCJNYXRoIiwicmFuZG9tIiwiUmVmZXJlciIsInN1YnN0cmluZyIsImludmVzdG1lbnREYXRhIiwiVmlldyIsIkFjY291bnQiLCJhY2NvdW50RGF0YSIsIk9ubGluZVZhbHVlIiwiQ3VycmVuY3lDb2RlIiwic2VjdXJpdGllcyIsImJhbGFuY2VzIiwiQWNjb3VudFBvc2l0aW9uIiwiQmFsYW5jZSIsIm1ldGFTZWN1cml0aWVzIiwiTWV0YSIsIlNlY3VyaXR5IiwibWV0YU1hcCIsIk1hcCIsIm1ldGEiLCJzZXQiLCJzZWN1cml0eUJhbGFuY2UiLCJnZXQiLCJFcXVpdHlOdW1iZXIiLCJFbmdOYW1lIiwic3ltYm9sIiwiRW5nU3ltYm9sIiwidm9sdW1lIiwiT25saW5lTlYiLCJPbmxpbmVWTCIsImNoYW5nZVBlcmNlbnRhZ2UiLCJCYXNlUmF0ZUNoYW5nZVBlcmNlbnRhZ2UiLCJwcm9maXRMb3NzIiwiUHJvZml0TG9zcyIsImludmVzdG1lbnRBY2NvdW50TnVtYmVyIiwiYmFua051bWJlciIsIkVycm9yIiwibWVzc2FnZSIsInN0YWNrIiwiaG9tZXBhZ2VVcmwiLCJmZXRjaEFjY291bnREYXRhIiwib3B0aW9ucyIsImFjY291bnREYXRhVXJsIiwiYWNjb3VudHNJbmZvIiwiZGVmYXVsdFN0YXJ0TW9tZW50Iiwic3VidHJhY3QiLCJhZGQiLCJ0b0RhdGUiLCJzdGFydE1vbWVudCIsIm1heCIsInN0YXJ0RGF0ZVN0ciIsImZvcm1hdCIsImVuZERhdGVTdHIiLCJpc0FjdGl2ZUFjY291bnQiLCJhY2NvdW50Q2xvc2luZ1JlYXNvbkNvZGUiLCJmb3JleEFjY291bnRzIiwic2F2aW5nc0FjY291bnRzIiwiaW52ZXN0bWVudEFjY291bnRzIiwic3VjY2VzcyIsImdldFBvc3NpYmxlTG9naW5SZXN1bHRzIiwidXJscyIsIkxvZ2luUmVzdWx0cyIsIlN1Y2Nlc3MiLCJJbnZhbGlkUGFzc3dvcmQiLCJDaGFuZ2VQYXNzd29yZCIsImNyZWF0ZUxvZ2luRmllbGRzIiwiY3JlZGVudGlhbHMiLCJzZWxlY3RvciIsInVzZXJDb2RlIiwicGFzc3dvcmQiLCJIYXBvYWxpbVNjcmFwZXIiLCJCYXNlU2NyYXBlcldpdGhCcm93c2VyIiwiZ2V0TG9naW5PcHRpb25zIiwibG9naW5VcmwiLCJzdWJtaXRCdXR0b25TZWxlY3RvciIsInBvc3RBY3Rpb24iLCJ3YWl0Rm9yUmVkaXJlY3QiLCJwb3NzaWJsZVJlc3VsdHMiLCJmZXRjaERhdGEiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NyYXBlcnMvaGFwb2FsaW0udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgdHlwZSBQYWdlIH0gZnJvbSAncHVwcGV0ZWVyJztcbmltcG9ydCB7IHY0IGFzIHV1aWQ0IH0gZnJvbSAndXVpZCc7XG5pbXBvcnQgeyBTSEVLRUxfQ1VSUkVOQ1kgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgZ2V0RGVidWcgfSBmcm9tICcuLi9oZWxwZXJzL2RlYnVnJztcbmltcG9ydCB7IGZldGNoR2V0V2l0aGluUGFnZSwgZmV0Y2hQb3N0V2l0aGluUGFnZSB9IGZyb20gJy4uL2hlbHBlcnMvZmV0Y2gnO1xuaW1wb3J0IHsgd2FpdEZvclJlZGlyZWN0IH0gZnJvbSAnLi4vaGVscGVycy9uYXZpZ2F0aW9uJztcbmltcG9ydCB7IHdhaXRVbnRpbCB9IGZyb20gJy4uL2hlbHBlcnMvd2FpdGluZyc7XG5pbXBvcnQge1xuICB0eXBlIFRyYW5zYWN0aW9uLFxuICBUcmFuc2FjdGlvblN0YXR1c2VzLFxuICBUcmFuc2FjdGlvblR5cGVzLFxuICB0eXBlIFRyYW5zYWN0aW9uc0FjY291bnQsXG4gIHR5cGUgU2VjdXJpdHksXG59IGZyb20gJy4uL3RyYW5zYWN0aW9ucyc7XG5pbXBvcnQgeyBCYXNlU2NyYXBlcldpdGhCcm93c2VyLCBMb2dpblJlc3VsdHMsIHR5cGUgUG9zc2libGVMb2dpblJlc3VsdHMgfSBmcm9tICcuL2Jhc2Utc2NyYXBlci13aXRoLWJyb3dzZXInO1xuaW1wb3J0IHsgdHlwZSBTY3JhcGVyT3B0aW9ucyB9IGZyb20gJy4vaW50ZXJmYWNlJztcblxuY29uc3QgZGVidWcgPSBnZXREZWJ1ZygnaGFwb2FsaW0nKTtcblxuY29uc3QgREFURV9GT1JNQVQgPSAnWVlZWU1NREQnO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5hbWVzcGFjZVxuZGVjbGFyZSBuYW1lc3BhY2Ugd2luZG93IHtcbiAgY29uc3QgYm5ocEFwcDogYW55O1xufVxuXG5pbnRlcmZhY2UgU2NyYXBlZFRyYW5zYWN0aW9uIHtcbiAgc2VyaWFsTnVtYmVyPzogbnVtYmVyO1xuICBhY3Rpdml0eURlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBldmVudEFtb3VudDogbnVtYmVyO1xuICB2YWx1ZURhdGU/OiBzdHJpbmc7XG4gIGV2ZW50RGF0ZT86IHN0cmluZztcbiAgcmVmZXJlbmNlTnVtYmVyPzogbnVtYmVyO1xuICBTY3JhcGVkVHJhbnNhY3Rpb24/OiBzdHJpbmc7XG4gIGV2ZW50QWN0aXZpdHlUeXBlQ29kZTogbnVtYmVyO1xuICBjdXJyZW50QmFsYW5jZTogbnVtYmVyO1xuICBwZm1EZXRhaWxzOiBzdHJpbmc7XG4gIGJlbmVmaWNpYXJ5RGV0YWlsc0RhdGE/OiB7XG4gICAgcGFydHlIZWFkbGluZT86IHN0cmluZztcbiAgICBwYXJ0eU5hbWU/OiBzdHJpbmc7XG4gICAgbWVzc2FnZUhlYWRsaW5lPzogc3RyaW5nO1xuICAgIG1lc3NhZ2VEZXRhaWw/OiBzdHJpbmc7XG4gIH07XG59XG5cbmludGVyZmFjZSBTY3JhcGVkUGZtVHJhbnNhY3Rpb24ge1xuICB0cmFuc2FjdGlvbk51bWJlcjogbnVtYmVyO1xufVxuXG50eXBlIEZldGNoZWRBY2NvdW50RGF0YSA9IHtcbiAgYmFua051bWJlcjogc3RyaW5nO1xuICBhY2NvdW50TnVtYmVyOiBzdHJpbmc7XG4gIGJyYW5jaE51bWJlcjogc3RyaW5nO1xuICBhY2NvdW50Q2xvc2luZ1JlYXNvbkNvZGU6IG51bWJlcjtcbn1bXTtcblxudHlwZSBGZXRjaGVkQWNjb3VudFRyYW5zYWN0aW9uc0RhdGEgPSB7XG4gIHRyYW5zYWN0aW9uczogU2NyYXBlZFRyYW5zYWN0aW9uW107XG59O1xuXG50eXBlIEJhbGFuY2VBbmRDcmVkaXRMaW1pdCA9IHtcbiAgY3JlZGl0TGltaXRBbW91bnQ6IG51bWJlcjtcbiAgY3JlZGl0TGltaXREZXNjcmlwdGlvbjogc3RyaW5nO1xuICBjcmVkaXRMaW1pdFV0aWxpemF0aW9uQW1vdW50OiBudW1iZXI7XG4gIGNyZWRpdExpbWl0VXRpbGl6YXRpb25FeGlzdGFuY2VDb2RlOiBudW1iZXI7XG4gIGNyZWRpdExpbWl0VXRpbGl6YXRpb25QZXJjZW50OiBudW1iZXI7XG4gIGN1cnJlbnRBY2NvdW50TGltaXRzQW1vdW50OiBudW1iZXI7XG4gIGN1cnJlbnRCYWxhbmNlOiBudW1iZXI7XG4gIHdpdGhkcmF3YWxCYWxhbmNlOiBudW1iZXI7XG59O1xuXG5pbnRlcmZhY2UgRm9yZXhUcmFuc2FjdGlvbiB7XG4gIGV4ZWN1dGluZ0RhdGU6IG51bWJlcjtcbiAgdmFsdWVEYXRlOiBudW1iZXI7XG4gIGFjdGl2aXR5RGVzY3JpcHRpb246IHN0cmluZztcbiAgZXZlbnRBbW91bnQ6IG51bWJlcjtcbiAgY3VycmVudEJhbGFuY2U6IG51bWJlcjtcbiAgcmVmZXJlbmNlTnVtYmVyPzogbnVtYmVyO1xuICBldmVudERldGFpbHM/OiBzdHJpbmc7XG4gIGV2ZW50QWN0aXZpdHlUeXBlQ29kZTogbnVtYmVyO1xuICBjdXJyZW5jeVN3aWZ0Q29kZTogc3RyaW5nO1xuICByZWNvcmRTZXJpYWxOdW1iZXI/OiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBGb3JleEN1cnJlbmN5RGF0YSB7XG4gIGN1cnJlbmN5Q29kZTogbnVtYmVyO1xuICBjdXJyZW5jeVN3aWZ0Q29kZTogc3RyaW5nO1xuICBjdXJyZW5jeVN3aWZ0RGVzY3JpcHRpb246IHN0cmluZztcbiAgY3VycmVudEJhbGFuY2U6IG51bWJlcjtcbiAgdHJhbnNhY3Rpb25zOiBGb3JleFRyYW5zYWN0aW9uW107XG4gIGRldGFpbGVkQWNjb3VudFR5cGVDb2RlOiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBGb3JleEFjY291bnREYXRhIHtcbiAgYmFsYW5jZXNBbmRMaW1pdHNEYXRhTGlzdDogRm9yZXhDdXJyZW5jeURhdGFbXTtcbn1cblxuaW50ZXJmYWNlIFNhdmluZ3NEZXBvc2l0IHtcbiAgcHJpbmNpcGFsQW1vdW50OiBudW1iZXI7XG4gIHJldmFsdWVkVG90YWxBbW91bnQ6IG51bWJlcjtcbiAgZGVwb3NpdFNlcmlhbElkOiBudW1iZXI7XG4gIHByb2R1Y3RGcmVlVGV4dD86IHN0cmluZztcbiAgc2hvcnRQcm9kdWN0TmFtZT86IHN0cmluZztcbiAgZm9ybWF0dGVkQWdyZWVtZW50T3BlbmluZ0RhdGU/OiBzdHJpbmc7XG4gIGZvcm1hdHRlZEVuZEV4aXREYXRlPzogc3RyaW5nO1xuICBub21pbmFsSW50ZXJlc3Q/OiBudW1iZXI7XG4gIGRldGFpbGVkQWNjb3VudFR5cGVDb2RlOiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBTYXZpbmdzV3JhcHBlciB7XG4gIGRhdGE6IFNhdmluZ3NEZXBvc2l0W107XG4gIGFtb3VudDogbnVtYmVyO1xuICByZXZhbHVhdGVkQW1vdW50OiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBTYXZpbmdzQWNjb3VudERhdGEge1xuICBkZXBvc2l0c1dyYXBwZXJEYXRhOiBTYXZpbmdzV3JhcHBlcltdO1xufVxuXG5pbnRlcmZhY2UgSW52ZXN0bWVudFNlY3VyaXR5QmFsYW5jZSB7XG4gIEVxdWl0eU51bWJlcjogc3RyaW5nO1xuICBCYXNlUmF0ZT86IG51bWJlcjtcbiAgTGFzdFJhdGU/OiBudW1iZXI7XG4gIEJhc2VSYXRlQ2hhbmdlUGVyY2VudGFnZT86IG51bWJlcjtcbiAgT25saW5lTlY6IG51bWJlcjtcbiAgT25saW5lVkw6IG51bWJlcjtcbiAgT25saW5lTmlzVkw/OiBudW1iZXI7XG4gIFByb2ZpdExvc3M/OiBudW1iZXI7XG4gIEN1cnJlbmN5Q29kZT86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEludmVzdG1lbnRTZWN1cml0eU1ldGEge1xuICAnLUtleSc6IHN0cmluZztcbiAgRW5nTmFtZT86IHN0cmluZztcbiAgRW5nU3ltYm9sPzogc3RyaW5nO1xuICBIZWJOYW1lPzogc3RyaW5nO1xuICBIZWJTeW1ib2w/OiBzdHJpbmc7XG4gIFN5bWJvbD86IHN0cmluZztcbiAgSXRlbVR5cGU/OiBzdHJpbmc7XG4gIFN0b2NrVHlwZT86IHN0cmluZztcbiAgSXNGb3JlaWduPzogYm9vbGVhbjtcbiAgQ3VycmVuY3lDb2RlPzogc3RyaW5nO1xuICBFeGNoYW5nZT86IHN0cmluZztcbiAgRXF1aXR5VHlwZT86IG51bWJlcjtcbiAgRXF1aXR5U3ViVHlwZT86IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIEludmVzdG1lbnRBY2NvdW50RGF0YSB7XG4gIFZpZXc/OiB7XG4gICAgQWNjb3VudD86IHtcbiAgICAgIE9ubGluZVZhbHVlPzogbnVtYmVyO1xuICAgICAgT25saW5lQ2FzaD86IG51bWJlcjtcbiAgICAgIEN1cnJlbmN5Q29kZT86IHN0cmluZztcbiAgICAgIEFjY291bnRQb3NpdGlvbj86IHtcbiAgICAgICAgQmFsYW5jZT86IEludmVzdG1lbnRTZWN1cml0eUJhbGFuY2VbXTtcbiAgICAgIH07XG4gICAgfTtcbiAgICBNZXRhPzoge1xuICAgICAgU2VjdXJpdHk/OiBJbnZlc3RtZW50U2VjdXJpdHlNZXRhW107XG4gICAgfTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29udmVydFRyYW5zYWN0aW9ucyh0eG5zOiBTY3JhcGVkVHJhbnNhY3Rpb25bXSk6IFRyYW5zYWN0aW9uW10ge1xuICByZXR1cm4gdHhucy5tYXAodHhuID0+IHtcbiAgICBjb25zdCBpc091dGJvdW5kID0gdHhuLmV2ZW50QWN0aXZpdHlUeXBlQ29kZSA9PT0gMjtcblxuICAgIGxldCBtZW1vID0gJyc7XG4gICAgaWYgKHR4bi5iZW5lZmljaWFyeURldGFpbHNEYXRhKSB7XG4gICAgICBjb25zdCB7IHBhcnR5SGVhZGxpbmUsIHBhcnR5TmFtZSwgbWVzc2FnZUhlYWRsaW5lLCBtZXNzYWdlRGV0YWlsIH0gPSB0eG4uYmVuZWZpY2lhcnlEZXRhaWxzRGF0YTtcbiAgICAgIGNvbnN0IG1lbW9MaW5lczogc3RyaW5nW10gPSBbXTtcbiAgICAgIGlmIChwYXJ0eUhlYWRsaW5lKSB7XG4gICAgICAgIG1lbW9MaW5lcy5wdXNoKHBhcnR5SGVhZGxpbmUpO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFydHlOYW1lKSB7XG4gICAgICAgIG1lbW9MaW5lcy5wdXNoKGAke3BhcnR5TmFtZX0uYCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChtZXNzYWdlSGVhZGxpbmUpIHtcbiAgICAgICAgbWVtb0xpbmVzLnB1c2gobWVzc2FnZUhlYWRsaW5lKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG1lc3NhZ2VEZXRhaWwpIHtcbiAgICAgICAgbWVtb0xpbmVzLnB1c2goYCR7bWVzc2FnZURldGFpbH0uYCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChtZW1vTGluZXMubGVuZ3RoKSB7XG4gICAgICAgIG1lbW8gPSBtZW1vTGluZXMuam9pbignICcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdDogVHJhbnNhY3Rpb24gPSB7XG4gICAgICB0eXBlOiBUcmFuc2FjdGlvblR5cGVzLk5vcm1hbCxcbiAgICAgIGlkZW50aWZpZXI6IHR4bi5yZWZlcmVuY2VOdW1iZXIsXG4gICAgICBkYXRlOiBtb21lbnQodHhuLmV2ZW50RGF0ZSwgREFURV9GT1JNQVQpLnRvSVNPU3RyaW5nKCksXG4gICAgICBwcm9jZXNzZWREYXRlOiBtb21lbnQodHhuLnZhbHVlRGF0ZSwgREFURV9GT1JNQVQpLnRvSVNPU3RyaW5nKCksXG4gICAgICBvcmlnaW5hbEFtb3VudDogaXNPdXRib3VuZCA/IC10eG4uZXZlbnRBbW91bnQgOiB0eG4uZXZlbnRBbW91bnQsXG4gICAgICBvcmlnaW5hbEN1cnJlbmN5OiBTSEVLRUxfQ1VSUkVOQ1ksXG4gICAgICBjaGFyZ2VkQW1vdW50OiBpc091dGJvdW5kID8gLXR4bi5ldmVudEFtb3VudCA6IHR4bi5ldmVudEFtb3VudCxcbiAgICAgIGRlc2NyaXB0aW9uOiB0eG4uYWN0aXZpdHlEZXNjcmlwdGlvbiB8fCAnJyxcbiAgICAgIHN0YXR1czogdHhuLnNlcmlhbE51bWJlciA9PT0gMCA/IFRyYW5zYWN0aW9uU3RhdHVzZXMuUGVuZGluZyA6IFRyYW5zYWN0aW9uU3RhdHVzZXMuQ29tcGxldGVkLFxuICAgICAgbWVtbyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRGb3JleFRyYW5zYWN0aW9ucyh0eG5zOiBGb3JleFRyYW5zYWN0aW9uW10sIGN1cnJlbmN5OiBzdHJpbmcpOiBUcmFuc2FjdGlvbltdIHtcbiAgcmV0dXJuIHR4bnMubWFwKHR4biA9PiB7XG4gICAgY29uc3QgaXNPdXRib3VuZCA9IHR4bi5ldmVudEFjdGl2aXR5VHlwZUNvZGUgPT09IDI7XG4gICAgY29uc3QgZGF0ZVN0ciA9IHR4bi5leGVjdXRpbmdEYXRlLnRvU3RyaW5nKCk7IC8vIERhdGUgdHJhbnNhY3Rpb24gd2FzIGV4ZWN1dGVkXG4gICAgY29uc3QgdmFsdWVEYXRlU3RyID0gdHhuLnZhbHVlRGF0ZS50b1N0cmluZygpOyAvLyBEYXRlIHZhbHVlIHdhcyBhY3R1YWxseSBhZGRlZCB0byBhY2NvdW50XG5cbiAgICBsZXQgbWVtbyA9ICcnO1xuICAgIGlmICh0eG4uZXZlbnREZXRhaWxzKSB7XG4gICAgICBtZW1vID0gdHhuLmV2ZW50RGV0YWlscztcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQ6IFRyYW5zYWN0aW9uID0ge1xuICAgICAgdHlwZTogVHJhbnNhY3Rpb25UeXBlcy5Ob3JtYWwsXG4gICAgICBpZGVudGlmaWVyOiB0eG4ucmVmZXJlbmNlTnVtYmVyIHx8IHR4bi5yZWNvcmRTZXJpYWxOdW1iZXIsXG4gICAgICBkYXRlOiBtb21lbnQodmFsdWVEYXRlU3RyLCBEQVRFX0ZPUk1BVCkudG9JU09TdHJpbmcoKSxcbiAgICAgIHByb2Nlc3NlZERhdGU6IG1vbWVudChkYXRlU3RyLCBEQVRFX0ZPUk1BVCkudG9JU09TdHJpbmcoKSxcbiAgICAgIG9yaWdpbmFsQW1vdW50OiBpc091dGJvdW5kID8gLXR4bi5ldmVudEFtb3VudCA6IHR4bi5ldmVudEFtb3VudCxcbiAgICAgIG9yaWdpbmFsQ3VycmVuY3k6IGN1cnJlbmN5LFxuICAgICAgY2hhcmdlZEFtb3VudDogaXNPdXRib3VuZCA/IC10eG4uZXZlbnRBbW91bnQgOiB0eG4uZXZlbnRBbW91bnQsXG4gICAgICBkZXNjcmlwdGlvbjogdHhuLmFjdGl2aXR5RGVzY3JpcHRpb24gfHwgJycsXG4gICAgICBzdGF0dXM6IFRyYW5zYWN0aW9uU3RhdHVzZXMuQ29tcGxldGVkLFxuICAgICAgbWVtbyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFJlc3RDb250ZXh0KHBhZ2U6IFBhZ2UpIHtcbiAgYXdhaXQgd2FpdFVudGlsKCgpID0+IHtcbiAgICByZXR1cm4gcGFnZS5ldmFsdWF0ZSgoKSA9PiAhIXdpbmRvdy5ibmhwQXBwKTtcbiAgfSwgJ3dhaXRpbmcgZm9yIGFwcCBkYXRhIGxvYWQnKTtcblxuICBjb25zdCByZXN1bHQgPSBhd2FpdCBwYWdlLmV2YWx1YXRlKCgpID0+IHtcbiAgICByZXR1cm4gd2luZG93LmJuaHBBcHAucmVzdENvbnRleHQ7XG4gIH0pO1xuXG4gIHJldHVybiByZXN1bHQuc2xpY2UoMSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoUG9hbGltWFNSRldpdGhpblBhZ2UoXG4gIHBhZ2U6IFBhZ2UsXG4gIHVybDogc3RyaW5nLFxuICBwYWdlVXVpZDogc3RyaW5nLFxuKTogUHJvbWlzZTxGZXRjaGVkQWNjb3VudFRyYW5zYWN0aW9uc0RhdGEgfCBudWxsPiB7XG4gIGNvbnN0IGNvb2tpZXMgPSBhd2FpdCBwYWdlLmNvb2tpZXMoKTtcbiAgY29uc3QgWFNSRkNvb2tpZSA9IGNvb2tpZXMuZmluZChjb29raWUgPT4gY29va2llLm5hbWUgPT09ICdYU1JGLVRPS0VOJyk7XG4gIGNvbnN0IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgaWYgKFhTUkZDb29raWUgIT0gbnVsbCkge1xuICAgIGhlYWRlcnNbJ1gtWFNSRi1UT0tFTiddID0gWFNSRkNvb2tpZS52YWx1ZTtcbiAgfVxuICBoZWFkZXJzLnBhZ2VVdWlkID0gcGFnZVV1aWQ7XG4gIGhlYWRlcnMudXVpZCA9IHV1aWQ0KCk7XG4gIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL2pzb247Y2hhcnNldD1VVEYtOCc7XG4gIHJldHVybiBmZXRjaFBvc3RXaXRoaW5QYWdlPEZldGNoZWRBY2NvdW50VHJhbnNhY3Rpb25zRGF0YT4ocGFnZSwgdXJsLCBbXSwgaGVhZGVycyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEV4dHJhU2NyYXAoXG4gIHR4bnNSZXN1bHQ6IEZldGNoZWRBY2NvdW50VHJhbnNhY3Rpb25zRGF0YSxcbiAgYmFzZVVybDogc3RyaW5nLFxuICBwYWdlOiBQYWdlLFxuICBhY2NvdW50TnVtYmVyOiBzdHJpbmcsXG4pOiBQcm9taXNlPEZldGNoZWRBY2NvdW50VHJhbnNhY3Rpb25zRGF0YT4ge1xuICBjb25zdCBwcm9taXNlcyA9IHR4bnNSZXN1bHQudHJhbnNhY3Rpb25zLm1hcChhc3luYyAodHJhbnNhY3Rpb246IFNjcmFwZWRUcmFuc2FjdGlvbik6IFByb21pc2U8U2NyYXBlZFRyYW5zYWN0aW9uPiA9PiB7XG4gICAgY29uc3QgeyBwZm1EZXRhaWxzLCBzZXJpYWxOdW1iZXIgfSA9IHRyYW5zYWN0aW9uO1xuICAgIGlmIChzZXJpYWxOdW1iZXIgIT09IDApIHtcbiAgICAgIGNvbnN0IHVybCA9IGAke2Jhc2VVcmx9JHtwZm1EZXRhaWxzfSZhY2NvdW50SWQ9JHthY2NvdW50TnVtYmVyfSZsYW5nPWhlYDtcbiAgICAgIGNvbnN0IGV4dHJhVHJhbnNhY3Rpb25EZXRhaWxzID0gKGF3YWl0IGZldGNoR2V0V2l0aGluUGFnZTxTY3JhcGVkUGZtVHJhbnNhY3Rpb25bXT4ocGFnZSwgdXJsKSkgfHwgW107XG4gICAgICBpZiAoZXh0cmFUcmFuc2FjdGlvbkRldGFpbHMgJiYgZXh0cmFUcmFuc2FjdGlvbkRldGFpbHMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHsgdHJhbnNhY3Rpb25OdW1iZXIgfSA9IGV4dHJhVHJhbnNhY3Rpb25EZXRhaWxzWzBdO1xuICAgICAgICBpZiAodHJhbnNhY3Rpb25OdW1iZXIpIHtcbiAgICAgICAgICByZXR1cm4geyAuLi50cmFuc2FjdGlvbiwgcmVmZXJlbmNlTnVtYmVyOiB0cmFuc2FjdGlvbk51bWJlciB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cmFuc2FjdGlvbjtcbiAgfSk7XG4gIGNvbnN0IHJlcyA9IGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcbiAgcmV0dXJuIHsgdHJhbnNhY3Rpb25zOiByZXMgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0QWNjb3VudFRyYW5zYWN0aW9ucyhcbiAgYmFzZVVybDogc3RyaW5nLFxuICBhcGlTaXRlVXJsOiBzdHJpbmcsXG4gIHBhZ2U6IFBhZ2UsXG4gIGFjY291bnROdW1iZXI6IHN0cmluZyxcbiAgc3RhcnREYXRlOiBzdHJpbmcsXG4gIGVuZERhdGU6IHN0cmluZyxcbiAgYWRkaXRpb25hbFRyYW5zYWN0aW9uSW5mb3JtYXRpb24gPSBmYWxzZSxcbikge1xuICBjb25zdCB0eG5zVXJsID0gYCR7YXBpU2l0ZVVybH0vY3VycmVudC1hY2NvdW50L3RyYW5zYWN0aW9ucz9hY2NvdW50SWQ9JHthY2NvdW50TnVtYmVyfSZudW1JdGVtc1BlclBhZ2U9MTAwMCZyZXRyaWV2YWxFbmREYXRlPSR7ZW5kRGF0ZX0mcmV0cmlldmFsU3RhcnREYXRlPSR7c3RhcnREYXRlfSZzb3J0Q29kZT0xYDtcbiAgY29uc3QgdHhuc1Jlc3VsdCA9IGF3YWl0IGZldGNoUG9hbGltWFNSRldpdGhpblBhZ2UocGFnZSwgdHhuc1VybCwgJy9jdXJyZW50LWFjY291bnQvdHJhbnNhY3Rpb25zJyk7XG5cbiAgY29uc3QgZmluYWxSZXN1bHQgPVxuICAgIGFkZGl0aW9uYWxUcmFuc2FjdGlvbkluZm9ybWF0aW9uICYmIHR4bnNSZXN1bHQ/LnRyYW5zYWN0aW9ucy5sZW5ndGhcbiAgICAgID8gYXdhaXQgZ2V0RXh0cmFTY3JhcCh0eG5zUmVzdWx0LCBiYXNlVXJsLCBwYWdlLCBhY2NvdW50TnVtYmVyKVxuICAgICAgOiB0eG5zUmVzdWx0O1xuXG4gIHJldHVybiBjb252ZXJ0VHJhbnNhY3Rpb25zKGZpbmFsUmVzdWx0Py50cmFuc2FjdGlvbnMgPz8gW10pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRBY2NvdW50QmFsYW5jZShhcGlTaXRlVXJsOiBzdHJpbmcsIHBhZ2U6IFBhZ2UsIGFjY291bnROdW1iZXI6IHN0cmluZykge1xuICBjb25zdCBiYWxhbmNlQW5kQ3JlZGl0TGltaXRVcmwgPSBgJHthcGlTaXRlVXJsfS9jdXJyZW50LWFjY291bnQvY29tcG9zaXRlL2JhbGFuY2VBbmRDcmVkaXRMaW1pdD9hY2NvdW50SWQ9JHthY2NvdW50TnVtYmVyfSZ2aWV3PWRldGFpbHMmbGFuZz1oZWA7XG4gIGNvbnN0IGJhbGFuY2VBbmRDcmVkaXRMaW1pdCA9IGF3YWl0IGZldGNoR2V0V2l0aGluUGFnZTxCYWxhbmNlQW5kQ3JlZGl0TGltaXQ+KHBhZ2UsIGJhbGFuY2VBbmRDcmVkaXRMaW1pdFVybCk7XG5cbiAgcmV0dXJuIGJhbGFuY2VBbmRDcmVkaXRMaW1pdD8uY3VycmVudEJhbGFuY2U7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEZvcmV4QWNjb3VudHMoXG4gIGJhc2VVcmw6IHN0cmluZyxcbiAgcGFnZTogUGFnZSxcbiAgYWNjb3VudE51bWJlcjogc3RyaW5nLFxuICBzdGFydERhdGU6IHN0cmluZyxcbiAgZW5kRGF0ZTogc3RyaW5nLFxuKTogUHJvbWlzZTxUcmFuc2FjdGlvbnNBY2NvdW50W10+IHtcbiAgZGVidWcoJz09PT09PT09PT0gRkVUQ0hJTkcgRk9SRVggQUNDT1VOVFMgPT09PT09PT09PScpO1xuICBkZWJ1ZygnQWNjb3VudDogJXMsIERhdGUgcmFuZ2U6ICVzIHRvICVzJywgYWNjb3VudE51bWJlciwgc3RhcnREYXRlLCBlbmREYXRlKTtcblxuICBjb25zdCBhY2NvdW50czogVHJhbnNhY3Rpb25zQWNjb3VudFtdID0gW107XG5cbiAgY29uc3QgY3VycmVuY3kgPSB7IGNvZGU6IDE5LCBzd2lmdDogU0hFS0VMX0NVUlJFTkNZIH07XG4gIHRyeSB7XG4gICAgY29uc3QgZGV0YWlsZWRBY2NvdW50VHlwZUNvZGUgPSAxNDI7IC8vIEZvciBmb3JlaWduIGN1cnJlbmN5IGFjY291bnRzXG4gICAgY29uc3QgZm9yZXhVcmwgPSBgJHtiYXNlVXJsfS9TZXJ2ZXJTZXJ2aWNlcy9mb3JlaWduLWN1cnJlbmN5L3RyYW5zYWN0aW9ucz9hY2NvdW50SWQ9JHthY2NvdW50TnVtYmVyfSZ0eXBlPWJ1c2luZXNzJnJldHJpZXZhbFN0YXJ0RGF0ZT0ke3N0YXJ0RGF0ZX0mcmV0cmlldmFsRW5kRGF0ZT0ke2VuZERhdGV9JmN1cnJlbmN5Q29kZUxpc3Q9JHtjdXJyZW5jeS5jb2RlfSZkZXRhaWxlZEFjY291bnRUeXBlQ29kZUxpc3Q9JHtkZXRhaWxlZEFjY291bnRUeXBlQ29kZX0mdmlldz1kZXRhaWxzJmxhbmc9aGVgO1xuICAgIGRlYnVnKCdUcnlpbmcgZm9yZXggJXMnLCBmb3JleFVybCk7XG5cbiAgICBjb25zdCBmb3JleERhdGEgPSBhd2FpdCBmZXRjaEdldFdpdGhpblBhZ2U8Rm9yZXhBY2NvdW50RGF0YT4ocGFnZSwgZm9yZXhVcmwsIHRydWUpOyAvLyBpZ25vcmVFcnJvcnMgPSB0cnVlXG5cbiAgICBpZiAoZm9yZXhEYXRhICYmIGZvcmV4RGF0YS5iYWxhbmNlc0FuZExpbWl0c0RhdGFMaXN0ICYmIGZvcmV4RGF0YS5iYWxhbmNlc0FuZExpbWl0c0RhdGFMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgIGRlYnVnKCfinJMgRm91bmQgZm9yZXggZGF0YScpO1xuXG4gICAgICBmb3IgKGNvbnN0IGN1cnJlbmN5RGF0YSBvZiBmb3JleERhdGEuYmFsYW5jZXNBbmRMaW1pdHNEYXRhTGlzdCkge1xuICAgICAgICBjb25zdCBjdXJyZW5jeVN3aWZ0Q29kZSA9IGN1cnJlbmN5RGF0YS5jdXJyZW5jeVN3aWZ0Q29kZSB8fCBjdXJyZW5jeS5zd2lmdDtcbiAgICAgICAgY29uc3QgdHJhbnNhY3Rpb25Db3VudCA9IGN1cnJlbmN5RGF0YS50cmFuc2FjdGlvbnM/Lmxlbmd0aCB8fCAwO1xuXG4gICAgICAgIC8vIEdldCBiYWxhbmNlIGZyb20gdGhlIG1vc3QgcmVjZW50IHRyYW5zYWN0aW9uJ3MgY3VycmVudEJhbGFuY2UgZmllbGRcbiAgICAgICAgLy8gSWYgbm8gdHJhbnNhY3Rpb25zLCBmYWxsIGJhY2sgdG8gY3VycmVuY3lEYXRhLmN1cnJlbnRCYWxhbmNlXG4gICAgICAgIGxldCBiYWxhbmNlID0gY3VycmVuY3lEYXRhLmN1cnJlbnRCYWxhbmNlO1xuICAgICAgICBpZiAodHJhbnNhY3Rpb25Db3VudCA+IDAgJiYgY3VycmVuY3lEYXRhLnRyYW5zYWN0aW9ucykge1xuICAgICAgICAgIGJhbGFuY2UgPSBjdXJyZW5jeURhdGEudHJhbnNhY3Rpb25zWzBdLmN1cnJlbnRCYWxhbmNlO1xuICAgICAgICAgIGRlYnVnKCcgIC0gVXNpbmcgYmFsYW5jZSBmcm9tIG1vc3QgcmVjZW50IHRyYW5zYWN0aW9uOiAlcycsIGJhbGFuY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVidWcoJyAgLSBDdXJyZW5jeTogJXMsIEJhbGFuY2U6ICVzLCBUcmFuc2FjdGlvbnM6ICVkJywgY3VycmVuY3lTd2lmdENvZGUsIGJhbGFuY2UsIHRyYW5zYWN0aW9uQ291bnQpO1xuXG4gICAgICAgIC8vIExvZyB0cmFuc2FjdGlvbiBkYXRlcyBmb3IgZGVidWdnaW5nXG4gICAgICAgIGlmICh0cmFuc2FjdGlvbkNvdW50ID4gMCkge1xuICAgICAgICAgIGNvbnN0IHR4bkRhdGVzID0gY3VycmVuY3lEYXRhLnRyYW5zYWN0aW9ucz8ubWFwKHQgPT4gdC5leGVjdXRpbmdEYXRlKS5qb2luKCcsICcpIHx8ICcnO1xuICAgICAgICAgIGRlYnVnKCcgICAgVHJhbnNhY3Rpb24gZGF0ZXM6ICVzJywgdHhuRGF0ZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT25seSBhZGQgaWYgdGhlcmUncyBhY3R1YWxseSBhIGJhbGFuY2Ugb3IgdHJhbnNhY3Rpb25zXG4gICAgICAgIGlmIChiYWxhbmNlICE9PSAwIHx8IHRyYW5zYWN0aW9uQ291bnQgPiAwKSB7XG4gICAgICAgICAgY29uc3QgdHhucyA9IGNvbnZlcnRGb3JleFRyYW5zYWN0aW9ucyhjdXJyZW5jeURhdGEudHJhbnNhY3Rpb25zIHx8IFtdLCBjdXJyZW5jeVN3aWZ0Q29kZSk7XG4gICAgICAgICAgY29uc3QgZm9yZXhBY2NvdW50TnVtYmVyID0gYCR7YWNjb3VudE51bWJlcn0tJHtjdXJyZW5jeVN3aWZ0Q29kZX1gO1xuXG4gICAgICAgICAgYWNjb3VudHMucHVzaCh7XG4gICAgICAgICAgICBhY2NvdW50TnVtYmVyOiBmb3JleEFjY291bnROdW1iZXIsXG4gICAgICAgICAgICBiYWxhbmNlLFxuICAgICAgICAgICAgY3VycmVuY3k6IGN1cnJlbmN5U3dpZnRDb2RlLFxuICAgICAgICAgICAgdHhucyxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGRlYnVnKCcgIOKckyBBZGRlZCBmb3JleCBhY2NvdW50OiAlcyB3aXRoICVkIHRyYW5zYWN0aW9ucycsIGZvcmV4QWNjb3VudE51bWJlciwgdHhucy5sZW5ndGgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlYnVnKCcgIC0gU2tpcHBpbmcgJXMgKHplcm8gYmFsYW5jZSBhbmQgbm8gdHJhbnNhY3Rpb25zKScsIGN1cnJlbmN5U3dpZnRDb2RlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBkZWJ1ZygnICAtIE5vIGZvcmV4IGRhdGEgZm91bmQnKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgZGVidWcoJyAgLSBFcnJvciBmZXRjaGluZyBmb3JleDogJXMnLCBlcnJvcik7XG4gICAgLy8gQ29udGludWUgdHJ5aW5nIG90aGVyIGN1cnJlbmNpZXNcbiAgfVxuXG4gIGRlYnVnKCdSZXR1cm5pbmcgJWQgZm9yZXggYWNjb3VudHMnLCBhY2NvdW50cy5sZW5ndGgpO1xuICByZXR1cm4gYWNjb3VudHM7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFNhdmluZ3NBY2NvdW50cyhiYXNlVXJsOiBzdHJpbmcsIHBhZ2U6IFBhZ2UsIGFjY291bnROdW1iZXI6IHN0cmluZyk6IFByb21pc2U8VHJhbnNhY3Rpb25zQWNjb3VudFtdPiB7XG4gIGNvbnN0IHNhdmluZ3NVcmwgPSBgJHtiYXNlVXJsfS9TZXJ2ZXJTZXJ2aWNlcy9kZXBvc2l0cy1hbmQtc2F2aW5ncy9kZXBvc2l0cz9hY2NvdW50SWQ9JHthY2NvdW50TnVtYmVyfSZ2aWV3PWRldGFpbHMmbGFuZz1oZWA7XG4gIGNvbnN0IHNhdmluZ3NEYXRhID0gYXdhaXQgZmV0Y2hHZXRXaXRoaW5QYWdlPFNhdmluZ3NBY2NvdW50RGF0YT4ocGFnZSwgc2F2aW5nc1VybCk7XG5cbiAgaWYgKCFzYXZpbmdzRGF0YSB8fCAhc2F2aW5nc0RhdGEuZGVwb3NpdHNXcmFwcGVyRGF0YSB8fCBzYXZpbmdzRGF0YS5kZXBvc2l0c1dyYXBwZXJEYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgIGRlYnVnKCdObyBzYXZpbmdzIGFjY291bnRzIGZvdW5kIGZvciBhY2NvdW50ICVzJywgYWNjb3VudE51bWJlcik7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgYWNjb3VudHM6IFRyYW5zYWN0aW9uc0FjY291bnRbXSA9IFtdO1xuXG4gIGZvciAoY29uc3Qgd3JhcHBlciBvZiBzYXZpbmdzRGF0YS5kZXBvc2l0c1dyYXBwZXJEYXRhKSB7XG4gICAgLy8gQ3JlYXRlIGEgc2VwYXJhdGUgYWNjb3VudCBmb3IgZWFjaCBpbmRpdmlkdWFsIGRlcG9zaXRcbiAgICBmb3IgKGNvbnN0IGRlcG9zaXQgb2Ygd3JhcHBlci5kYXRhKSB7XG4gICAgICBjb25zdCBiYWxhbmNlID0gZGVwb3NpdC5yZXZhbHVlZFRvdGFsQW1vdW50IHx8IGRlcG9zaXQucHJpbmNpcGFsQW1vdW50O1xuICAgICAgY29uc3Qgc2F2aW5nc0FjY291bnROdW1iZXIgPSBgJHthY2NvdW50TnVtYmVyfS0ke2RlcG9zaXQuZGVwb3NpdFNlcmlhbElkfWA7XG5cbiAgICAgIGFjY291bnRzLnB1c2goe1xuICAgICAgICBhY2NvdW50TnVtYmVyOiBzYXZpbmdzQWNjb3VudE51bWJlcixcbiAgICAgICAgc2F2aW5nc0FjY291bnQ6IHRydWUsXG4gICAgICAgIGJhbGFuY2UsXG4gICAgICAgIHR4bnM6IFtdLCAvLyBTYXZpbmdzIGFjY291bnRzIHR5cGljYWxseSBkb24ndCBoYXZlIHRyYW5zYWN0aW9uIGhpc3RvcnkgaW4gdGhlIHNhbWUgd2F5XG4gICAgICB9KTtcblxuICAgICAgZGVidWcoJ0FkZGVkIHNhdmluZ3MgYWNjb3VudCAlcyB3aXRoIGJhbGFuY2UgJXMnLCBzYXZpbmdzQWNjb3VudE51bWJlciwgYmFsYW5jZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFjY291bnRzO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRJbnZlc3RtZW50QWNjb3VudHMoXG4gIGJhc2VVcmw6IHN0cmluZyxcbiAgcGFnZTogUGFnZSxcbiAgYWNjb3VudDogeyBiYW5rTnVtYmVyOiBzdHJpbmc7IGJyYW5jaE51bWJlcjogc3RyaW5nOyBhY2NvdW50TnVtYmVyOiBzdHJpbmcgfSxcbik6IFByb21pc2U8VHJhbnNhY3Rpb25zQWNjb3VudFtdPiB7XG4gIGRlYnVnKCc9PT09PT09PT09IEZFVENISU5HIElOVkVTVE1FTlQgQUNDT1VOVFMgPT09PT09PT09PScpO1xuICBjb25zdCBhY2NvdW50czogVHJhbnNhY3Rpb25zQWNjb3VudFtdID0gW107XG4gIGNvbnN0IGFjY291bnROdW1iZXIgPSBgJHthY2NvdW50LmJyYW5jaE51bWJlcn0tJHthY2NvdW50LmFjY291bnROdW1iZXJ9YDsgLy8gRG9uJ3QgaW5jbHVkZSBiYW5rTnVtYmVyIGhlcmUgYmVjYXVzZSBpbnZlc3RtZW50IEFQSSBkb2Vzbid0IHVzZSBpdFxuXG4gIC8vIFNldCB1cCByZXF1ZXN0IGludGVyY2VwdGlvbiB0byBjYXB0dXJlIHNlc3Npb24gaGVhZGVyc1xuICBsZXQgY2FwdHVyZWRTZXNzaW9uOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgbGV0IGNhcHR1cmVkQ3Nlc3Npb246IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0IHJlcXVlc3RIYW5kbGVyID0gKHJlcXVlc3Q6IGFueSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBoZWFkZXJzID0gcmVxdWVzdC5oZWFkZXJzKCk7XG4gICAgICBpZiAoaGVhZGVycy5zZXNzaW9uICYmICFjYXB0dXJlZFNlc3Npb24pIHtcbiAgICAgICAgY2FwdHVyZWRTZXNzaW9uID0gaGVhZGVycy5zZXNzaW9uO1xuICAgICAgICBkZWJ1ZygnICAtIENhcHR1cmVkIHNlc3Npb24gZnJvbSBuZXR3b3JrIHJlcXVlc3QnKTtcbiAgICAgIH1cbiAgICAgIGlmIChoZWFkZXJzLmNzZXNzaW9uICYmICFjYXB0dXJlZENzZXNzaW9uKSB7XG4gICAgICAgIGNhcHR1cmVkQ3Nlc3Npb24gPSBoZWFkZXJzLmNzZXNzaW9uO1xuICAgICAgICBkZWJ1ZygnICAtIENhcHR1cmVkIGNzZXNzaW9uIGZyb20gbmV0d29yayByZXF1ZXN0Jyk7XG4gICAgICB9XG4gICAgICByZXF1ZXN0LmNvbnRpbnVlKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZGVidWcoJyAgLSBFcnJvciBpbiByZXF1ZXN0IGhhbmRsZXI6ICVzJywgZSk7XG4gICAgICAvLyBUcnkgdG8gY29udGludWUgYW55d2F5XG4gICAgICB0cnkge1xuICAgICAgICByZXF1ZXN0LmNvbnRpbnVlKCk7XG4gICAgICB9IGNhdGNoIChjb250aW51ZUVycm9yKSB7XG4gICAgICAgIC8vIElnbm9yZSBpZiBhbHJlYWR5IGhhbmRsZWRcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgdHJ5IHtcbiAgICAvLyBOYXZpZ2F0ZSB0byBteXRyYWRlIHNlY3Rpb24gdG8gZXN0YWJsaXNoIHNlc3Npb25cbiAgICBjb25zdCBteXRyYWRlVXJsID0gYCR7YmFzZVVybH0vbXl0cmFkZS9hcHBgO1xuICAgIGRlYnVnKCdOYXZpZ2F0aW5nIHRvIG15dHJhZGUgc2VjdGlvbjogJXMnLCBteXRyYWRlVXJsKTtcblxuICAgIGF3YWl0IHBhZ2Uuc2V0UmVxdWVzdEludGVyY2VwdGlvbih0cnVlKTtcbiAgICBwYWdlLm9uKCdyZXF1ZXN0JywgcmVxdWVzdEhhbmRsZXIpO1xuXG4gICAgLy8gVHJ5IHRvIG5hdmlnYXRlLCBidXQgaWYgaXQgZmFpbHMgKGUuZy4sIE15VHJhZGUgbm90IGVuYWJsZWQpLCBjbGVhbiB1cCBhbmQgcmV0dXJuIGVtcHR5XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHBhZ2UuZ290byhteXRyYWRlVXJsLCB7IHdhaXRVbnRpbDogJ25ldHdvcmtpZGxlMicsIHRpbWVvdXQ6IDYwMDAwIH0pO1xuICAgICAgLy8gV2FpdCBsb25nZXIgZm9yIHRoZSBwYWdlIHRvIGZ1bGx5IGxvYWQgYW5kIGVzdGFibGlzaCBzZXNzaW9uXG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgNTAwMCkpO1xuICAgIH0gY2F0Y2ggKG5hdkVycm9yKSB7XG4gICAgICBkZWJ1ZygnICAtIE5hdmlnYXRpb24gdG8gTXlUcmFkZSBmYWlsZWQgKGxpa2VseSBub3QgZW5hYmxlZCk6ICVzJywgbmF2RXJyb3IpO1xuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdCBpbnRlcmNlcHRpb25cbiAgICAgIHBhZ2Uub2ZmKCdyZXF1ZXN0JywgcmVxdWVzdEhhbmRsZXIpO1xuICAgICAgYXdhaXQgcGFnZS5zZXRSZXF1ZXN0SW50ZXJjZXB0aW9uKGZhbHNlKTtcbiAgICAgIGRlYnVnKCdSZXR1cm5pbmcgMCBpbnZlc3RtZW50IGFjY291bnRzIChNeVRyYWRlIG5vdCBhY2Nlc3NpYmxlKScpO1xuICAgICAgcmV0dXJuIGFjY291bnRzO1xuICAgIH1cblxuICAgIC8vIE5vdyB0dXJuIG9mZiByZXF1ZXN0IGludGVyY2VwdGlvbiBiZWZvcmUgd2UgbWFrZSBBUEkgY2FsbHNcbiAgICBwYWdlLm9mZigncmVxdWVzdCcsIHJlcXVlc3RIYW5kbGVyKTtcbiAgICBhd2FpdCBwYWdlLnNldFJlcXVlc3RJbnRlcmNlcHRpb24oZmFsc2UpO1xuXG4gICAgZGVidWcoJ015dHJhZGUgcGFnZSBsb2FkZWQsIHNlc3Npb24gZXN0YWJsaXNoZWQnKTtcblxuICAgIGNvbnN0IGZpZWxkcyA9XG4gICAgICAnRW5nTmFtZSxFbmdTeW1ib2wsSGViTmFtZSxIZWJTeW1ib2wsU3ltYm9sLEV4cGlyYXRpb25EYXRlLEl0ZW1UeXBlLFN0b2NrVHlwZSxJc0V0ZixJc0ZvcmVpZ24sQ3VycmVuY3lDb2RlLEV4Y2hhbmdlLENyZWF0aW9uRXF1aXR5TnVtLEVxdWl0eVR5cGUsQ29udHJhY3RUeXBlLEFsbG93ZWRPcmRlckRpcmVjdGlvbixFcXVpdHlTdWJUeXBlJztcbiAgICBjb25zdCBpbnZlc3RtZW50VXJsID0gYCR7YmFzZVVybH0vU2VydmVyU2VydmljZXMvbXl0cmFkZS9hcGkvdjIvanNvbjIvYWNjb3VudC92aWV3P2FjY291bnQ9JHthY2NvdW50TnVtYmVyfSZmaWVsZHM9JHtmaWVsZHN9YDtcbiAgICBkZWJ1ZygnVHJ5aW5nIGludmVzdG1lbnQgYWNjb3VudCBVUkw6ICVzJywgaW52ZXN0bWVudFVybCk7XG5cbiAgICAvLyBHZXQgWFNSRiB0b2tlbiBhbmQgc2Vzc2lvbiBkYXRhIGZyb20gY29va2llc1xuICAgIGNvbnN0IGNvb2tpZXMgPSBhd2FpdCBwYWdlLmNvb2tpZXMoKTtcbiAgICBjb25zdCBYU1JGQ29va2llID0gY29va2llcy5maW5kKGNvb2tpZSA9PiBjb29raWUubmFtZSA9PT0gJ1hTUkYtVE9LRU4nKTtcblxuICAgIC8vIFVzZSBjYXB0dXJlZCBzZXNzaW9uIG9yIGZhbGxiYWNrIHRvIGdlbmVyYXRlZCBvbmVzXG4gICAgY29uc3Qgc2Vzc2lvbklkID0gY2FwdHVyZWRTZXNzaW9uIHx8IHV1aWQ0KCk7XG4gICAgY29uc3QgY3Nlc3Npb24gPSBjYXB0dXJlZENzZXNzaW9uIHx8IE1hdGgucmFuZG9tKCkudG9TdHJpbmcoKTtcblxuICAgIGNvbnN0IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgnLFxuICAgICAgY3Nlc3Npb24sXG4gICAgICBzZXNzaW9uOiBzZXNzaW9uSWQsXG4gICAgICBSZWZlcmVyOiBteXRyYWRlVXJsLFxuICAgIH07XG4gICAgaWYgKFhTUkZDb29raWUgIT0gbnVsbCkge1xuICAgICAgaGVhZGVyc1snWC1YU1JGLVRPS0VOJ10gPSBYU1JGQ29va2llLnZhbHVlO1xuICAgICAgZGVidWcoJyAgLSBVc2luZyBYU1JGIHRva2VuOiAlcycsIFhTUkZDb29raWUudmFsdWUuc3Vic3RyaW5nKDAsIDEwKSArICcuLi4nKTtcbiAgICB9XG5cbiAgICBkZWJ1ZygnICAtIFJlcXVlc3QgaGVhZGVyczogY3Nlc3Npb249JXMsIHNlc3Npb249JXMnLCBjc2Vzc2lvbiwgc2Vzc2lvbklkKTtcblxuICAgIGNvbnN0IGludmVzdG1lbnREYXRhID0gYXdhaXQgZmV0Y2hQb3N0V2l0aGluUGFnZTxJbnZlc3RtZW50QWNjb3VudERhdGE+KHBhZ2UsIGludmVzdG1lbnRVcmwsIHt9LCBoZWFkZXJzKTtcblxuICAgIGRlYnVnKCcgIC0gUmVzcG9uc2UgcmVjZWl2ZWQ6ICVzJywgaW52ZXN0bWVudERhdGEgPyAnWUVTJyA6ICdOTycpO1xuICAgIGlmIChpbnZlc3RtZW50RGF0YSkge1xuICAgICAgZGVidWcoJyAgLSBSZXNwb25zZSBoYXMgVmlldzogJXMnLCBpbnZlc3RtZW50RGF0YS5WaWV3ID8gJ1lFUycgOiAnTk8nKTtcbiAgICAgIGRlYnVnKCcgIC0gUmVzcG9uc2UgaGFzIFZpZXcuQWNjb3VudDogJXMnLCBpbnZlc3RtZW50RGF0YS5WaWV3Py5BY2NvdW50ID8gJ1lFUycgOiAnTk8nKTtcbiAgICB9XG5cbiAgICBpZiAoaW52ZXN0bWVudERhdGE/LlZpZXc/LkFjY291bnQpIHtcbiAgICAgIGRlYnVnKCfinJMgRm91bmQgaW52ZXN0bWVudCBhY2NvdW50IGRhdGEnKTtcblxuICAgICAgY29uc3QgYWNjb3VudERhdGEgPSBpbnZlc3RtZW50RGF0YS5WaWV3LkFjY291bnQ7XG4gICAgICBjb25zdCBiYWxhbmNlID0gYWNjb3VudERhdGEuT25saW5lVmFsdWUgfHwgMDtcbiAgICAgIGNvbnN0IGN1cnJlbmN5ID0gYWNjb3VudERhdGEuQ3VycmVuY3lDb2RlIHx8IFNIRUtFTF9DVVJSRU5DWTtcblxuICAgICAgLy8gR2V0IHNlY3VyaXRpZXMgZnJvbSB0aGUgYmFsYW5jZSBhcnJheVxuICAgICAgY29uc3Qgc2VjdXJpdGllczogU2VjdXJpdHlbXSA9IFtdO1xuICAgICAgY29uc3QgYmFsYW5jZXMgPSBhY2NvdW50RGF0YS5BY2NvdW50UG9zaXRpb24/LkJhbGFuY2UgfHwgW107XG4gICAgICBjb25zdCBtZXRhU2VjdXJpdGllcyA9IGludmVzdG1lbnREYXRhLlZpZXcuTWV0YT8uU2VjdXJpdHkgfHwgW107XG5cbiAgICAgIC8vIENyZWF0ZSBhIG1hcCBvZiBzZWN1cml0eSBtZXRhZGF0YSBmb3IgZWFzeSBsb29rdXBcbiAgICAgIGNvbnN0IG1ldGFNYXAgPSBuZXcgTWFwPHN0cmluZywgSW52ZXN0bWVudFNlY3VyaXR5TWV0YT4oKTtcbiAgICAgIGZvciAoY29uc3QgbWV0YSBvZiBtZXRhU2VjdXJpdGllcykge1xuICAgICAgICBtZXRhTWFwLnNldChtZXRhWyctS2V5J10sIG1ldGEpO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IHNlY3VyaXR5QmFsYW5jZSBvZiBiYWxhbmNlcykge1xuICAgICAgICBjb25zdCBtZXRhID0gbWV0YU1hcC5nZXQoc2VjdXJpdHlCYWxhbmNlLkVxdWl0eU51bWJlcik7XG5cbiAgICAgICAgc2VjdXJpdGllcy5wdXNoKHtcbiAgICAgICAgICBuYW1lOiBtZXRhPy5FbmdOYW1lIHx8ICcnLFxuICAgICAgICAgIHN5bWJvbDogbWV0YT8uRW5nU3ltYm9sIHx8ICcnLFxuICAgICAgICAgIHZvbHVtZTogc2VjdXJpdHlCYWxhbmNlLk9ubGluZU5WLFxuICAgICAgICAgIHZhbHVlOiBzZWN1cml0eUJhbGFuY2UuT25saW5lVkwsXG4gICAgICAgICAgY3VycmVuY3k6IHNlY3VyaXR5QmFsYW5jZS5DdXJyZW5jeUNvZGUgfHwgbWV0YT8uQ3VycmVuY3lDb2RlIHx8IFNIRUtFTF9DVVJSRU5DWSxcbiAgICAgICAgICBjaGFuZ2VQZXJjZW50YWdlOiBzZWN1cml0eUJhbGFuY2UuQmFzZVJhdGVDaGFuZ2VQZXJjZW50YWdlLFxuICAgICAgICAgIHByb2ZpdExvc3M6IHNlY3VyaXR5QmFsYW5jZS5Qcm9maXRMb3NzLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgZGVidWcoJyAgLSBCYWxhbmNlOiAlcyAlcywgU2VjdXJpdGllczogJWQnLCBiYWxhbmNlLCBjdXJyZW5jeSwgc2VjdXJpdGllcy5sZW5ndGgpO1xuXG4gICAgICBpZiAoYmFsYW5jZSAhPT0gMCB8fCBzZWN1cml0aWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgaW52ZXN0bWVudEFjY291bnROdW1iZXIgPSBgJHthY2NvdW50LmJhbmtOdW1iZXJ9LSR7YWNjb3VudC5icmFuY2hOdW1iZXJ9LSR7YWNjb3VudC5hY2NvdW50TnVtYmVyfS1pbnZlc3RtZW50YDtcbiAgICAgICAgYWNjb3VudHMucHVzaCh7XG4gICAgICAgICAgYWNjb3VudE51bWJlcjogaW52ZXN0bWVudEFjY291bnROdW1iZXIsXG4gICAgICAgICAgYmFsYW5jZSxcbiAgICAgICAgICBjdXJyZW5jeSxcbiAgICAgICAgICBzYXZpbmdzQWNjb3VudDogdHJ1ZSxcbiAgICAgICAgICB0eG5zOiBbXSxcbiAgICAgICAgICBzZWN1cml0aWVzLFxuICAgICAgICB9KTtcblxuICAgICAgICBkZWJ1ZygnICDinJMgQWRkZWQgaW52ZXN0bWVudCBhY2NvdW50OiAlcyB3aXRoICVkIHNlY3VyaXRpZXMnLCBpbnZlc3RtZW50QWNjb3VudE51bWJlciwgc2VjdXJpdGllcy5sZW5ndGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVidWcoJyAgLSBTa2lwcGluZyAoemVybyBiYWxhbmNlIGFuZCBubyBzZWN1cml0aWVzKScpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBkZWJ1ZygnICAtIE5vIGludmVzdG1lbnQgYWNjb3VudCBkYXRhIGZvdW5kJyk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGRlYnVnKCcgIC0gRXJyb3IgZmV0Y2hpbmcgaW52ZXN0bWVudCBhY2NvdW50OiAlcycsIGVycm9yKTtcbiAgICAvLyBMb2cgbW9yZSBkZXRhaWxzIGFib3V0IHRoZSBlcnJvclxuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICBkZWJ1ZygnICAgIEVycm9yIG1lc3NhZ2U6ICVzJywgZXJyb3IubWVzc2FnZSk7XG4gICAgICBkZWJ1ZygnICAgIEVycm9yIHN0YWNrOiAlcycsIGVycm9yLnN0YWNrKTtcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgLy8gQ2xlYW4gdXAgcmVxdWVzdCBpbnRlcmNlcHRpb24gKGluIGNhc2UgaXQgd2Fzbid0IGFscmVhZHkgZG9uZSlcbiAgICB0cnkge1xuICAgICAgcGFnZS5vZmYoJ3JlcXVlc3QnLCByZXF1ZXN0SGFuZGxlcik7XG4gICAgICBhd2FpdCBwYWdlLnNldFJlcXVlc3RJbnRlcmNlcHRpb24oZmFsc2UpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIElnbm9yZSBjbGVhbnVwIGVycm9yc1xuICAgIH1cblxuICAgIC8vIE5hdmlnYXRlIGJhY2sgdG8gdGhlIG1haW4gaG9tZXBhZ2UgdG8gcmVzdG9yZSB0aGUgc2Vzc2lvbiBmb3Igc3Vic2VxdWVudCBzY3JhcGluZ1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBob21lcGFnZVVybCA9IGAke2Jhc2VVcmx9L25nLXBvcnRhbHMvcmIvaGUvaG9tZXBhZ2VgO1xuICAgICAgZGVidWcoJ05hdmlnYXRpbmcgYmFjayB0byBob21lcGFnZTogJXMnLCBob21lcGFnZVVybCk7XG4gICAgICBhd2FpdCBwYWdlLmdvdG8oaG9tZXBhZ2VVcmwsIHsgd2FpdFVudGlsOiAnbmV0d29ya2lkbGUyJywgdGltZW91dDogMzAwMDAgfSk7XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMjAwMCkpO1xuICAgICAgZGVidWcoJ0hvbWVwYWdlIHJlc3RvcmVkJyk7XG4gICAgfSBjYXRjaCAobmF2RXJyb3IpIHtcbiAgICAgIGRlYnVnKCcgIC0gRmFpbGVkIHRvIG5hdmlnYXRlIGJhY2sgdG8gaG9tZXBhZ2U6ICVzJywgbmF2RXJyb3IpO1xuICAgICAgLy8gQ29udGludWUgYW55d2F5LCB0aGUgb3V0ZXIgdHJ5LWNhdGNoIGluIGZldGNoQWNjb3VudERhdGEgd2lsbCBoYW5kbGUgaXRcbiAgICB9XG4gIH1cblxuICBkZWJ1ZygnUmV0dXJuaW5nICVkIGludmVzdG1lbnQgYWNjb3VudHMnLCBhY2NvdW50cy5sZW5ndGgpO1xuICByZXR1cm4gYWNjb3VudHM7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoQWNjb3VudERhdGEocGFnZTogUGFnZSwgYmFzZVVybDogc3RyaW5nLCBvcHRpb25zOiBTY3JhcGVyT3B0aW9ucykge1xuICBjb25zdCByZXN0Q29udGV4dCA9IGF3YWl0IGdldFJlc3RDb250ZXh0KHBhZ2UpO1xuICBjb25zdCBhcGlTaXRlVXJsID0gYCR7YmFzZVVybH0vJHtyZXN0Q29udGV4dH1gO1xuICBjb25zdCBhY2NvdW50RGF0YVVybCA9IGAke2Jhc2VVcmx9L1NlcnZlclNlcnZpY2VzL2dlbmVyYWwvYWNjb3VudHNgO1xuXG4gIGRlYnVnKCdmZXRjaGluZyBhY2NvdW50cyBkYXRhJyk7XG4gIGNvbnN0IGFjY291bnRzSW5mbyA9IChhd2FpdCBmZXRjaEdldFdpdGhpblBhZ2U8RmV0Y2hlZEFjY291bnREYXRhPihwYWdlLCBhY2NvdW50RGF0YVVybCkpIHx8IFtdO1xuICBkZWJ1ZygnZ290ICVkIGFjY291bnRzLCBmZXRjaGluZyB0eG5zIGFuZCBiYWxhbmNlJywgYWNjb3VudHNJbmZvLmxlbmd0aCk7XG5cbiAgY29uc3QgZGVmYXVsdFN0YXJ0TW9tZW50ID0gbW9tZW50KCkuc3VidHJhY3QoMSwgJ3llYXJzJykuYWRkKDEsICdkYXknKTtcbiAgY29uc3Qgc3RhcnREYXRlID0gb3B0aW9ucy5zdGFydERhdGUgfHwgZGVmYXVsdFN0YXJ0TW9tZW50LnRvRGF0ZSgpO1xuICBjb25zdCBzdGFydE1vbWVudCA9IG1vbWVudC5tYXgoZGVmYXVsdFN0YXJ0TW9tZW50LCBtb21lbnQoc3RhcnREYXRlKSk7XG4gIGNvbnN0IHsgYWRkaXRpb25hbFRyYW5zYWN0aW9uSW5mb3JtYXRpb24gfSA9IG9wdGlvbnM7XG5cbiAgY29uc3Qgc3RhcnREYXRlU3RyID0gc3RhcnRNb21lbnQuZm9ybWF0KERBVEVfRk9STUFUKTtcbiAgY29uc3QgZW5kRGF0ZVN0ciA9IG1vbWVudCgpLmZvcm1hdChEQVRFX0ZPUk1BVCk7XG5cbiAgY29uc3QgYWNjb3VudHM6IFRyYW5zYWN0aW9uc0FjY291bnRbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgYWNjb3VudCBvZiBhY2NvdW50c0luZm8pIHtcbiAgICBsZXQgYmFsYW5jZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IGFjY291bnROdW1iZXIgPSBgJHthY2NvdW50LmJhbmtOdW1iZXJ9LSR7YWNjb3VudC5icmFuY2hOdW1iZXJ9LSR7YWNjb3VudC5hY2NvdW50TnVtYmVyfWA7XG5cbiAgICBjb25zdCBpc0FjdGl2ZUFjY291bnQgPSBhY2NvdW50LmFjY291bnRDbG9zaW5nUmVhc29uQ29kZSA9PT0gMDtcbiAgICBpZiAoaXNBY3RpdmVBY2NvdW50KSB7XG4gICAgICBiYWxhbmNlID0gYXdhaXQgZ2V0QWNjb3VudEJhbGFuY2UoYXBpU2l0ZVVybCwgcGFnZSwgYWNjb3VudE51bWJlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlYnVnKCdTa2lwcGluZyBiYWxhbmNlIGZvciBhIGNsb3NlZCBhY2NvdW50LCBiYWxhbmNlIHdpbGwgYmUgdW5kZWZpbmVkJyk7XG4gICAgfVxuXG4gICAgbGV0IHR4bnM6IFRyYW5zYWN0aW9uW10gPSBbXTtcbiAgICB0cnkge1xuICAgICAgdHhucyA9IGF3YWl0IGdldEFjY291bnRUcmFuc2FjdGlvbnMoXG4gICAgICAgIGJhc2VVcmwsXG4gICAgICAgIGFwaVNpdGVVcmwsXG4gICAgICAgIHBhZ2UsXG4gICAgICAgIGFjY291bnROdW1iZXIsXG4gICAgICAgIHN0YXJ0RGF0ZVN0cixcbiAgICAgICAgZW5kRGF0ZVN0cixcbiAgICAgICAgYWRkaXRpb25hbFRyYW5zYWN0aW9uSW5mb3JtYXRpb24sXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBkZWJ1ZygnRXJyb3IgZmV0Y2hpbmcgdHJhbnNhY3Rpb25zIGZvciAlcyAocG9zc2libHkgY2xvc2VkIGFjY291bnQpOiAlcycsIGFjY291bnROdW1iZXIsIGVycm9yKTtcbiAgICAgIC8vIENvbnRpbnVlIHdpdGggZW1wdHkgdHJhbnNhY3Rpb25zXG4gICAgfVxuXG4gICAgLy8gQWRkIHJlZ3VsYXIgY2hlY2tpbmcgYWNjb3VudFxuICAgIGFjY291bnRzLnB1c2goe1xuICAgICAgYWNjb3VudE51bWJlcixcbiAgICAgIGJhbGFuY2UsXG4gICAgICB0eG5zLFxuICAgIH0pO1xuXG4gICAgLy8gRmV0Y2ggZm9yZXggYWNjb3VudHMgZm9yIHRoaXMgYWNjb3VudCBudW1iZXJcbiAgICB0cnkge1xuICAgICAgY29uc3QgZm9yZXhBY2NvdW50cyA9IGF3YWl0IGdldEZvcmV4QWNjb3VudHMoYmFzZVVybCwgcGFnZSwgYWNjb3VudE51bWJlciwgc3RhcnREYXRlU3RyLCBlbmREYXRlU3RyKTtcbiAgICAgIGFjY291bnRzLnB1c2goLi4uZm9yZXhBY2NvdW50cyk7XG4gICAgICBkZWJ1ZygnQWRkZWQgJWQgZm9yZXggYWNjb3VudHMgdG8gcmVzdWx0cycsIGZvcmV4QWNjb3VudHMubGVuZ3RoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZGVidWcoJ0Vycm9yIGZldGNoaW5nIGZvcmV4IGFjY291bnRzIGZvciAlczogJXMnLCBhY2NvdW50TnVtYmVyLCBlcnJvcik7XG4gICAgfVxuXG4gICAgLy8gRmV0Y2ggc2F2aW5ncyBhY2NvdW50cyBmb3IgdGhpcyBhY2NvdW50IG51bWJlclxuICAgIHRyeSB7XG4gICAgICBjb25zdCBzYXZpbmdzQWNjb3VudHMgPSBhd2FpdCBnZXRTYXZpbmdzQWNjb3VudHMoYmFzZVVybCwgcGFnZSwgYWNjb3VudE51bWJlcik7XG4gICAgICBhY2NvdW50cy5wdXNoKC4uLnNhdmluZ3NBY2NvdW50cyk7XG4gICAgICBkZWJ1ZygnQWRkZWQgJWQgc2F2aW5ncyBhY2NvdW50cyB0byByZXN1bHRzJywgc2F2aW5nc0FjY291bnRzLmxlbmd0aCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGRlYnVnKCdFcnJvciBmZXRjaGluZyBzYXZpbmdzIGFjY291bnRzIGZvciAlczogJXMnLCBhY2NvdW50TnVtYmVyLCBlcnJvcik7XG4gICAgfVxuXG4gICAgLy8gRmV0Y2ggaW52ZXN0bWVudCBhY2NvdW50cyBmb3IgdGhpcyBhY2NvdW50IG51bWJlclxuICAgIHRyeSB7XG4gICAgICBjb25zdCBpbnZlc3RtZW50QWNjb3VudHMgPSBhd2FpdCBnZXRJbnZlc3RtZW50QWNjb3VudHMoYmFzZVVybCwgcGFnZSwgYWNjb3VudCk7XG4gICAgICBhY2NvdW50cy5wdXNoKC4uLmludmVzdG1lbnRBY2NvdW50cyk7XG4gICAgICBkZWJ1ZygnQWRkZWQgJWQgaW52ZXN0bWVudCBhY2NvdW50cyB0byByZXN1bHRzJywgaW52ZXN0bWVudEFjY291bnRzLmxlbmd0aCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGRlYnVnKCdFcnJvciBmZXRjaGluZyBpbnZlc3RtZW50IGFjY291bnRzIGZvciAlczogJXMnLCBhY2NvdW50TnVtYmVyLCBlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgYWNjb3VudERhdGEgPSB7XG4gICAgc3VjY2VzczogdHJ1ZSxcbiAgICBhY2NvdW50cyxcbiAgfTtcbiAgZGVidWcoJ2ZldGNoaW5nIGVuZGVkJyk7XG4gIHJldHVybiBhY2NvdW50RGF0YTtcbn1cblxuZnVuY3Rpb24gZ2V0UG9zc2libGVMb2dpblJlc3VsdHMoYmFzZVVybDogc3RyaW5nKSB7XG4gIGNvbnN0IHVybHM6IFBvc3NpYmxlTG9naW5SZXN1bHRzID0ge307XG4gIHVybHNbTG9naW5SZXN1bHRzLlN1Y2Nlc3NdID0gW1xuICAgIGAke2Jhc2VVcmx9L3BvcnRhbHNlcnZlci9Ib21lUGFnZWAsXG4gICAgYCR7YmFzZVVybH0vbmctcG9ydGFscy1idC9yYi9oZS9ob21lcGFnZWAsXG4gICAgYCR7YmFzZVVybH0vbmctcG9ydGFscy9yYi9oZS9ob21lcGFnZWAsXG4gIF07XG4gIHVybHNbTG9naW5SZXN1bHRzLkludmFsaWRQYXNzd29yZF0gPSBbXG4gICAgYCR7YmFzZVVybH0vQVVUSEVOVElDQVRFL0xPR09OP2Zsb3c9QVVUSEVOVElDQVRFJnN0YXRlPUxPR09OJmVycm9yY29kZT0xLjYmY2FsbG1lPWZhbHNlYCxcbiAgXTtcbiAgdXJsc1tMb2dpblJlc3VsdHMuQ2hhbmdlUGFzc3dvcmRdID0gW1xuICAgIGAke2Jhc2VVcmx9L01DUC9TVEFSVD9mbG93PU1DUCZzdGF0ZT1TVEFSVCZleHBpcmVkRGF0ZT1udWxsYCxcbiAgICAvXFwvQUJPVVRUT0VYUElSRVxcL1NUQVJUL2ksXG4gIF07XG4gIHJldHVybiB1cmxzO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVMb2dpbkZpZWxkcyhjcmVkZW50aWFsczogU2NyYXBlclNwZWNpZmljQ3JlZGVudGlhbHMpIHtcbiAgcmV0dXJuIFtcbiAgICB7IHNlbGVjdG9yOiAnI3VzZXJDb2RlJywgdmFsdWU6IGNyZWRlbnRpYWxzLnVzZXJDb2RlIH0sXG4gICAgeyBzZWxlY3RvcjogJyNwYXNzd29yZCcsIHZhbHVlOiBjcmVkZW50aWFscy5wYXNzd29yZCB9LFxuICBdO1xufVxuXG50eXBlIFNjcmFwZXJTcGVjaWZpY0NyZWRlbnRpYWxzID0geyB1c2VyQ29kZTogc3RyaW5nOyBwYXNzd29yZDogc3RyaW5nIH07XG5cbmNsYXNzIEhhcG9hbGltU2NyYXBlciBleHRlbmRzIEJhc2VTY3JhcGVyV2l0aEJyb3dzZXI8U2NyYXBlclNwZWNpZmljQ3JlZGVudGlhbHM+IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXNcbiAgZ2V0IGJhc2VVcmwoKSB7XG4gICAgcmV0dXJuICdodHRwczovL2xvZ2luLmJhbmtoYXBvYWxpbS5jby5pbCc7XG4gIH1cblxuICBnZXRMb2dpbk9wdGlvbnMoY3JlZGVudGlhbHM6IFNjcmFwZXJTcGVjaWZpY0NyZWRlbnRpYWxzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxvZ2luVXJsOiBgJHt0aGlzLmJhc2VVcmx9L2NnaS1iaW4vcG9hbHd3d2M/cmVxTmFtZT1nZXRMb2dvblBhZ2VgLFxuICAgICAgZmllbGRzOiBjcmVhdGVMb2dpbkZpZWxkcyhjcmVkZW50aWFscyksXG4gICAgICBzdWJtaXRCdXR0b25TZWxlY3RvcjogJy5sb2dpbi1idG4nLFxuICAgICAgcG9zdEFjdGlvbjogYXN5bmMgKCkgPT4gd2FpdEZvclJlZGlyZWN0KHRoaXMucGFnZSksXG4gICAgICBwb3NzaWJsZVJlc3VsdHM6IGdldFBvc3NpYmxlTG9naW5SZXN1bHRzKHRoaXMuYmFzZVVybCksXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGZldGNoRGF0YSgpIHtcbiAgICByZXR1cm4gZmV0Y2hBY2NvdW50RGF0YSh0aGlzLnBhZ2UsIHRoaXMuYmFzZVVybCwgdGhpcy5vcHRpb25zKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBIYXBvYWxpbVNjcmFwZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUVBLElBQUFDLEtBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLFVBQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLE1BQUEsR0FB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
@@ -1,7 +1,10 @@
1
1
  export interface TransactionsAccount {
2
2
  accountNumber: string;
3
3
  balance?: number;
4
+ currency?: string;
5
+ savingsAccount?: boolean;
4
6
  txns: Transaction[];
7
+ securities?: Security[];
5
8
  }
6
9
  export declare enum TransactionTypes {
7
10
  Normal = "normal",
@@ -45,3 +48,12 @@ export interface Transaction {
45
48
  installments?: TransactionInstallments;
46
49
  category?: string;
47
50
  }
51
+ export interface Security {
52
+ name?: string;
53
+ symbol: string;
54
+ volume: number;
55
+ value: number;
56
+ currency?: string;
57
+ changePercentage?: number;
58
+ profitLoss?: number;
59
+ }
@@ -14,4 +14,4 @@ let TransactionStatuses = exports.TransactionStatuses = /*#__PURE__*/function (T
14
14
  TransactionStatuses["Pending"] = "pending";
15
15
  return TransactionStatuses;
16
16
  }({});
17
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUcmFuc2FjdGlvblR5cGVzIiwiZXhwb3J0cyIsIlRyYW5zYWN0aW9uU3RhdHVzZXMiXSwic291cmNlcyI6WyIuLi9zcmMvdHJhbnNhY3Rpb25zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgVHJhbnNhY3Rpb25zQWNjb3VudCB7XG4gIGFjY291bnROdW1iZXI6IHN0cmluZztcbiAgYmFsYW5jZT86IG51bWJlcjtcbiAgdHhuczogVHJhbnNhY3Rpb25bXTtcbn1cblxuZXhwb3J0IGVudW0gVHJhbnNhY3Rpb25UeXBlcyB7XG4gIE5vcm1hbCA9ICdub3JtYWwnLFxuICBJbnN0YWxsbWVudHMgPSAnaW5zdGFsbG1lbnRzJyxcbn1cblxuZXhwb3J0IGVudW0gVHJhbnNhY3Rpb25TdGF0dXNlcyB7XG4gIENvbXBsZXRlZCA9ICdjb21wbGV0ZWQnLFxuICBQZW5kaW5nID0gJ3BlbmRpbmcnLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zYWN0aW9uSW5zdGFsbG1lbnRzIHtcbiAgLyoqXG4gICAqIHRoZSBjdXJyZW50IGluc3RhbGxtZW50IG51bWJlclxuICAgKi9cbiAgbnVtYmVyOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIHRoZSB0b3RhbCBudW1iZXIgb2YgaW5zdGFsbG1lbnRzXG4gICAqL1xuICB0b3RhbDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zYWN0aW9uIHtcbiAgdHlwZTogVHJhbnNhY3Rpb25UeXBlcztcbiAgLyoqXG4gICAqIHNvbWV0aW1lcyBjYWxsZWQgQXNtYWNodGFcbiAgICovXG4gIGlkZW50aWZpZXI/OiBzdHJpbmcgfCBudW1iZXI7XG4gIC8qKlxuICAgKiBJU08gZGF0ZSBzdHJpbmdcbiAgICovXG4gIGRhdGU6IHN0cmluZztcbiAgLyoqXG4gICAqIElTTyBkYXRlIHN0cmluZ1xuICAgKi9cbiAgcHJvY2Vzc2VkRGF0ZTogc3RyaW5nO1xuICBvcmlnaW5hbEFtb3VudDogbnVtYmVyO1xuICBvcmlnaW5hbEN1cnJlbmN5OiBzdHJpbmc7XG4gIGNoYXJnZWRBbW91bnQ6IG51bWJlcjtcbiAgY2hhcmdlZEN1cnJlbmN5Pzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBtZW1vPzogc3RyaW5nO1xuICBzdGF0dXM6IFRyYW5zYWN0aW9uU3RhdHVzZXM7XG4gIGluc3RhbGxtZW50cz86IFRyYW5zYWN0aW9uSW5zdGFsbG1lbnRzO1xuICBjYXRlZ29yeT86IHN0cmluZztcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0lBTVlBLGdCQUFnQixHQUFBQyxPQUFBLENBQUFELGdCQUFBLDBCQUFoQkEsZ0JBQWdCO0VBQWhCQSxnQkFBZ0I7RUFBaEJBLGdCQUFnQjtFQUFBLE9BQWhCQSxnQkFBZ0I7QUFBQTtBQUFBLElBS2hCRSxtQkFBbUIsR0FBQUQsT0FBQSxDQUFBQyxtQkFBQSwwQkFBbkJBLG1CQUFtQjtFQUFuQkEsbUJBQW1CO0VBQW5CQSxtQkFBbUI7RUFBQSxPQUFuQkEsbUJBQW1CO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
17
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUcmFuc2FjdGlvblR5cGVzIiwiZXhwb3J0cyIsIlRyYW5zYWN0aW9uU3RhdHVzZXMiXSwic291cmNlcyI6WyIuLi9zcmMvdHJhbnNhY3Rpb25zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgVHJhbnNhY3Rpb25zQWNjb3VudCB7XG4gIGFjY291bnROdW1iZXI6IHN0cmluZztcbiAgYmFsYW5jZT86IG51bWJlcjtcbiAgY3VycmVuY3k/OiBzdHJpbmc7XG4gIHNhdmluZ3NBY2NvdW50PzogYm9vbGVhbjtcbiAgdHhuczogVHJhbnNhY3Rpb25bXTtcbiAgc2VjdXJpdGllcz86IFNlY3VyaXR5W107XG59XG5cbmV4cG9ydCBlbnVtIFRyYW5zYWN0aW9uVHlwZXMge1xuICBOb3JtYWwgPSAnbm9ybWFsJyxcbiAgSW5zdGFsbG1lbnRzID0gJ2luc3RhbGxtZW50cycsXG59XG5cbmV4cG9ydCBlbnVtIFRyYW5zYWN0aW9uU3RhdHVzZXMge1xuICBDb21wbGV0ZWQgPSAnY29tcGxldGVkJyxcbiAgUGVuZGluZyA9ICdwZW5kaW5nJyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2FjdGlvbkluc3RhbGxtZW50cyB7XG4gIC8qKlxuICAgKiB0aGUgY3VycmVudCBpbnN0YWxsbWVudCBudW1iZXJcbiAgICovXG4gIG51bWJlcjogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiB0aGUgdG90YWwgbnVtYmVyIG9mIGluc3RhbGxtZW50c1xuICAgKi9cbiAgdG90YWw6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2FjdGlvbiB7XG4gIHR5cGU6IFRyYW5zYWN0aW9uVHlwZXM7XG4gIC8qKlxuICAgKiBzb21ldGltZXMgY2FsbGVkIEFzbWFjaHRhXG4gICAqL1xuICBpZGVudGlmaWVyPzogc3RyaW5nIHwgbnVtYmVyO1xuICAvKipcbiAgICogSVNPIGRhdGUgc3RyaW5nXG4gICAqL1xuICBkYXRlOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBJU08gZGF0ZSBzdHJpbmdcbiAgICovXG4gIHByb2Nlc3NlZERhdGU6IHN0cmluZztcbiAgb3JpZ2luYWxBbW91bnQ6IG51bWJlcjtcbiAgb3JpZ2luYWxDdXJyZW5jeTogc3RyaW5nO1xuICBjaGFyZ2VkQW1vdW50OiBudW1iZXI7XG4gIGNoYXJnZWRDdXJyZW5jeT86IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgbWVtbz86IHN0cmluZztcbiAgc3RhdHVzOiBUcmFuc2FjdGlvblN0YXR1c2VzO1xuICBpbnN0YWxsbWVudHM/OiBUcmFuc2FjdGlvbkluc3RhbGxtZW50cztcbiAgY2F0ZWdvcnk/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VjdXJpdHkge1xuICBuYW1lPzogc3RyaW5nO1xuICBzeW1ib2w6IHN0cmluZztcbiAgdm9sdW1lOiBudW1iZXI7XG4gIHZhbHVlOiBudW1iZXI7XG4gIGN1cnJlbmN5Pzogc3RyaW5nO1xuICBjaGFuZ2VQZXJjZW50YWdlPzogbnVtYmVyO1xuICBwcm9maXRMb3NzPzogbnVtYmVyO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7SUFTWUEsZ0JBQWdCLEdBQUFDLE9BQUEsQ0FBQUQsZ0JBQUEsMEJBQWhCQSxnQkFBZ0I7RUFBaEJBLGdCQUFnQjtFQUFoQkEsZ0JBQWdCO0VBQUEsT0FBaEJBLGdCQUFnQjtBQUFBO0FBQUEsSUFLaEJFLG1CQUFtQixHQUFBRCxPQUFBLENBQUFDLG1CQUFBLDBCQUFuQkEsbUJBQW1CO0VBQW5CQSxtQkFBbUI7RUFBbkJBLG1CQUFtQjtFQUFBLE9BQW5CQSxtQkFBbUI7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tomerh2001/israeli-bank-scrapers",
3
- "version": "6.3.12",
3
+ "version": "6.4.0",
4
4
  "private": false,
5
5
  "description": "Provide scrapers for all major Israeli banks and credit card companies",
6
6
  "engines": {