israeli-bank-scrapers 5.2.3 → 5.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.
@@ -1,32 +1,7 @@
1
- import { type Transaction } from '../transactions';
2
- import { BaseScraperWithBrowser, type PossibleLoginResults } from './base-scraper-with-browser';
3
- type ScraperSpecificCredentials = {
4
- username: string;
5
- password: string;
6
- };
7
- declare class OtsarHahayalScraper extends BaseScraperWithBrowser<ScraperSpecificCredentials> {
8
- getLoginOptions(credentials: ScraperSpecificCredentials): {
9
- loginUrl: string;
10
- fields: {
11
- selector: string;
12
- value: string;
13
- }[];
14
- submitButtonSelector: () => Promise<void>;
15
- postAction: () => Promise<void>;
16
- possibleResults: PossibleLoginResults;
17
- };
18
- fetchData(): Promise<{
19
- success: boolean;
20
- accounts: {
21
- accountNumber: string;
22
- summary: {
23
- balance: number;
24
- creditLimit: number;
25
- creditUtilization: number;
26
- balanceCurrency: string;
27
- };
28
- txns: Transaction[];
29
- }[];
30
- }>;
1
+ import BeinleumiGroupBaseScraper from './base-beinleumi-group';
2
+ declare class OtsarHahayalScraper extends BeinleumiGroupBaseScraper {
3
+ BASE_URL: string;
4
+ LOGIN_URL: string;
5
+ TRANSACTIONS_URL: string;
31
6
  }
32
7
  export default OtsarHahayalScraper;
@@ -4,191 +4,19 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
- require("core-js/modules/es.symbol.description.js");
8
7
  require("core-js/modules/es.array.iterator.js");
9
- require("core-js/modules/es.promise.js");
10
- require("core-js/modules/es.regexp.constructor.js");
11
- require("core-js/modules/es.regexp.exec.js");
12
- require("core-js/modules/es.string.replace.js");
13
- var _moment = _interopRequireDefault(require("moment"));
14
- var _constants = require("../constants");
15
- var _elementsInteractions = require("../helpers/elements-interactions");
16
- var _navigation = require("../helpers/navigation");
17
- var _waiting = require("../helpers/waiting");
18
- var _transactions = require("../transactions");
19
- var _baseScraperWithBrowser = require("./base-scraper-with-browser");
8
+ var _baseBeinleumiGroup = _interopRequireDefault(require("./base-beinleumi-group"));
20
9
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
21
- const BASE_URL = 'https://online.bankotsar.co.il';
22
- const LONG_DATE_FORMAT = 'DD/MM/YYYY';
23
- const DATE_FORMAT = 'DD/MM/YY';
24
- function getPossibleLoginResults(page) {
25
- const urls = {};
26
- urls[_baseScraperWithBrowser.LoginResults.Success] = [new RegExp(`^${BASE_URL.replace('.', '\\.')}/wps/myportal/FibiMenu/Online`)];
27
- urls[_baseScraperWithBrowser.LoginResults.InvalidPassword] = [() => (0, _elementsInteractions.elementPresentOnPage)(page, '#validationMsg')];
28
- // TODO: support change password
29
- /* urls[LOGIN_RESULT.CHANGE_PASSWORD] = [``]; */
30
- return urls;
31
- }
32
- function getTransactionsUrl() {
33
- return `${BASE_URL}/wps/myportal/FibiMenu/Online/OnAccountMngment/OnBalanceTrans/PrivateAccountFlow`;
34
- }
35
- function createLoginFields(credentials) {
36
- return [{
37
- selector: '#username',
38
- value: credentials.username
39
- }, {
40
- selector: '#password',
41
- value: credentials.password
42
- }];
43
- }
44
- function getAmountData(amountStr, hasCurrency = false) {
45
- const amountStrCln = amountStr.replace(',', '');
46
- let currency = null;
47
- let amount = null;
48
- if (!hasCurrency) {
49
- amount = parseFloat(amountStrCln);
50
- currency = _constants.SHEKEL_CURRENCY;
51
- } else if (amountStrCln.includes(_constants.SHEKEL_CURRENCY_SYMBOL)) {
52
- amount = parseFloat(amountStrCln.replace(_constants.SHEKEL_CURRENCY_SYMBOL, ''));
53
- currency = _constants.SHEKEL_CURRENCY;
54
- } else {
55
- const parts = amountStrCln.split(' ');
56
- amount = parseFloat(parts[0]);
57
- [, currency] = parts;
58
- }
59
- return {
60
- amount,
61
- currency
62
- };
63
- }
64
- function convertTransactions(txns) {
65
- return txns.map(txn => {
66
- const dateFormat = txn.date.length === 8 ? DATE_FORMAT : txn.date.length === 10 ? LONG_DATE_FORMAT : null;
67
- if (!dateFormat) {
68
- throw new Error('invalid date format');
69
- }
70
- const txnDate = (0, _moment.default)(txn.date, dateFormat).toISOString();
71
- const credit = getAmountData(txn.credit || '').amount;
72
- const debit = getAmountData(txn.debit || '').amount;
73
- const amount = (Number.isNaN(credit) ? 0 : credit) - (Number.isNaN(debit) ? 0 : debit);
74
- const result = {
75
- type: _transactions.TransactionTypes.Normal,
76
- status: _transactions.TransactionStatuses.Completed,
77
- identifier: txn.reference ? parseInt(txn.reference, 10) : undefined,
78
- date: txnDate,
79
- processedDate: txnDate,
80
- originalAmount: amount,
81
- originalCurrency: _constants.SHEKEL_CURRENCY,
82
- chargedAmount: amount,
83
- description: txn.description || '',
84
- memo: ''
85
- };
86
- return result;
87
- });
88
- }
89
- async function parseTransactionPage(page) {
90
- const tdsValues = await (0, _elementsInteractions.pageEvalAll)(page, '#dataTable077 tbody tr', [], trs => {
91
- return trs.map(el => ({
92
- date: el.querySelector('.date').innerText,
93
- // reference and description have vice-versa class name
94
- description: el.querySelector('.reference').innerText,
95
- reference: el.querySelector('.details').innerText,
96
- credit: el.querySelector('.credit').innerText,
97
- debit: el.querySelector('.debit').innerText,
98
- balance: el.querySelector('.balance').innerText
99
- }));
100
- });
101
- return tdsValues;
102
- }
103
- async function getAccountSummary(page) {
104
- const balanceElm = await page.$('.current_balance');
105
- const balanceInnerTextElm = await balanceElm.getProperty('innerText');
106
- const balanceText = await balanceInnerTextElm.jsonValue();
107
- const balanceValue = getAmountData(balanceText, true);
108
- // TODO: Find the credit field in bank website (could see it in my account)
109
- return {
110
- balance: Number.isNaN(balanceValue.amount) ? 0 : balanceValue.amount,
111
- creditLimit: 0.0,
112
- creditUtilization: 0.0,
113
- balanceCurrency: balanceValue.currency
114
- };
115
- }
116
- async function fetchTransactionsForAccount(page, startDate) {
117
- const summary = await getAccountSummary(page);
118
- await (0, _elementsInteractions.waitUntilElementFound)(page, 'input#fromDate');
119
- // Get account number
120
- const branchNum = await page.$eval('.branch_num', span => {
121
- return span.innerText;
122
- });
123
- const accountNmbr = await page.$eval('.acc_num', span => {
124
- return span.innerText;
125
- });
126
- const accountNumber = `14-${branchNum}-${accountNmbr}`;
127
- // Search for relavant transaction from startDate
128
- await (0, _elementsInteractions.clickButton)(page, '#tabHeader4');
129
- await (0, _elementsInteractions.fillInput)(page, 'input#fromDate', startDate.format('DD/MM/YYYY'));
130
- await (0, _elementsInteractions.clickButton)(page, '#fibi_tab_dates .fibi_btn:nth-child(2)');
131
- await (0, _navigation.waitForNavigation)(page);
132
- await (0, _elementsInteractions.waitUntilElementFound)(page, 'table#dataTable077, #NO_DATA077');
133
- let hasNextPage = true;
134
- let txns = [];
135
- const noTransactionElm = await page.$('#NO_DATA077');
136
- if (noTransactionElm == null) {
137
- // Scape transactions (this maybe spanned on multiple pages)
138
- while (hasNextPage) {
139
- const pageTxns = await parseTransactionPage(page);
140
- txns = txns.concat(pageTxns);
141
- const button = await page.$('#Npage');
142
- hasNextPage = false;
143
- if (button != null) {
144
- hasNextPage = true;
145
- }
146
- if (hasNextPage) {
147
- await (0, _elementsInteractions.clickButton)(page, '#Npage');
148
- await (0, _navigation.waitForNavigation)(page);
149
- await (0, _elementsInteractions.waitUntilElementFound)(page, 'table#dataTable077');
150
- }
151
- }
152
- }
153
- return {
154
- accountNumber,
155
- summary,
156
- txns: convertTransactions(txns.slice(1)) // Remove first line which is "opening balance"
157
- };
158
- }
159
- async function fetchTransactions(page, startDate) {
160
- // TODO need to extend to support multiple accounts and foreign accounts
161
- return [await fetchTransactionsForAccount(page, startDate)];
162
- }
163
- async function waitForPostLogin(page) {
164
- // TODO check for condition to provide new password
165
- return Promise.race([(0, _elementsInteractions.waitUntilElementFound)(page, 'div.lotusFrame', true), (0, _elementsInteractions.waitUntilElementFound)(page, '#validationMsg')]);
166
- }
167
- class OtsarHahayalScraper extends _baseScraperWithBrowser.BaseScraperWithBrowser {
168
- getLoginOptions(credentials) {
169
- return {
170
- loginUrl: `${BASE_URL}/MatafLoginService/MatafLoginServlet?bankId=OTSARPRTAL&site=Private&KODSAFA=HE`,
171
- fields: createLoginFields(credentials),
172
- submitButtonSelector: async () => {
173
- await (0, _waiting.sleep)(1000);
174
- await (0, _elementsInteractions.clickButton)(this.page, '#continueBtn');
175
- },
176
- postAction: async () => waitForPostLogin(this.page),
177
- possibleResults: getPossibleLoginResults(this.page)
178
- };
179
- }
180
- async fetchData() {
181
- const defaultStartMoment = (0, _moment.default)().subtract(1, 'years').add(1, 'day');
182
- const startDate = this.options.startDate || defaultStartMoment.toDate();
183
- const startMoment = _moment.default.max(defaultStartMoment, (0, _moment.default)(startDate));
184
- const url = getTransactionsUrl();
185
- await this.navigateTo(url);
186
- const accounts = await fetchTransactions(this.page, startMoment);
187
- return {
188
- success: true,
189
- accounts
190
- };
10
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
11
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
12
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
13
+ class OtsarHahayalScraper extends _baseBeinleumiGroup.default {
14
+ constructor(...args) {
15
+ super(...args);
16
+ _defineProperty(this, "BASE_URL", 'https://online.bankotsar.co.il');
17
+ _defineProperty(this, "LOGIN_URL", `${this.BASE_URL}/MatafLoginService/MatafLoginServlet?bankId=OTSARPRTAL&site=Private&KODSAFA=HE`);
18
+ _defineProperty(this, "TRANSACTIONS_URL", `${this.BASE_URL}/wps/myportal/FibiMenu/Online/OnAccountMngment/OnBalanceTrans/PrivateAccountFlow`);
191
19
  }
192
20
  }
193
21
  var _default = exports.default = OtsarHahayalScraper;
194
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbW9tZW50IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfY29uc3RhbnRzIiwiX2VsZW1lbnRzSW50ZXJhY3Rpb25zIiwiX25hdmlnYXRpb24iLCJfd2FpdGluZyIsIl90cmFuc2FjdGlvbnMiLCJfYmFzZVNjcmFwZXJXaXRoQnJvd3NlciIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIkJBU0VfVVJMIiwiTE9OR19EQVRFX0ZPUk1BVCIsIkRBVEVfRk9STUFUIiwiZ2V0UG9zc2libGVMb2dpblJlc3VsdHMiLCJwYWdlIiwidXJscyIsIkxvZ2luUmVzdWx0cyIsIlN1Y2Nlc3MiLCJSZWdFeHAiLCJyZXBsYWNlIiwiSW52YWxpZFBhc3N3b3JkIiwiZWxlbWVudFByZXNlbnRPblBhZ2UiLCJnZXRUcmFuc2FjdGlvbnNVcmwiLCJjcmVhdGVMb2dpbkZpZWxkcyIsImNyZWRlbnRpYWxzIiwic2VsZWN0b3IiLCJ2YWx1ZSIsInVzZXJuYW1lIiwicGFzc3dvcmQiLCJnZXRBbW91bnREYXRhIiwiYW1vdW50U3RyIiwiaGFzQ3VycmVuY3kiLCJhbW91bnRTdHJDbG4iLCJjdXJyZW5jeSIsImFtb3VudCIsInBhcnNlRmxvYXQiLCJTSEVLRUxfQ1VSUkVOQ1kiLCJpbmNsdWRlcyIsIlNIRUtFTF9DVVJSRU5DWV9TWU1CT0wiLCJwYXJ0cyIsInNwbGl0IiwiY29udmVydFRyYW5zYWN0aW9ucyIsInR4bnMiLCJtYXAiLCJ0eG4iLCJkYXRlRm9ybWF0IiwiZGF0ZSIsImxlbmd0aCIsIkVycm9yIiwidHhuRGF0ZSIsIm1vbWVudCIsInRvSVNPU3RyaW5nIiwiY3JlZGl0IiwiZGViaXQiLCJOdW1iZXIiLCJpc05hTiIsInJlc3VsdCIsInR5cGUiLCJUcmFuc2FjdGlvblR5cGVzIiwiTm9ybWFsIiwic3RhdHVzIiwiVHJhbnNhY3Rpb25TdGF0dXNlcyIsIkNvbXBsZXRlZCIsImlkZW50aWZpZXIiLCJyZWZlcmVuY2UiLCJwYXJzZUludCIsInVuZGVmaW5lZCIsInByb2Nlc3NlZERhdGUiLCJvcmlnaW5hbEFtb3VudCIsIm9yaWdpbmFsQ3VycmVuY3kiLCJjaGFyZ2VkQW1vdW50IiwiZGVzY3JpcHRpb24iLCJtZW1vIiwicGFyc2VUcmFuc2FjdGlvblBhZ2UiLCJ0ZHNWYWx1ZXMiLCJwYWdlRXZhbEFsbCIsInRycyIsImVsIiwicXVlcnlTZWxlY3RvciIsImlubmVyVGV4dCIsImJhbGFuY2UiLCJnZXRBY2NvdW50U3VtbWFyeSIsImJhbGFuY2VFbG0iLCIkIiwiYmFsYW5jZUlubmVyVGV4dEVsbSIsImdldFByb3BlcnR5IiwiYmFsYW5jZVRleHQiLCJqc29uVmFsdWUiLCJiYWxhbmNlVmFsdWUiLCJjcmVkaXRMaW1pdCIsImNyZWRpdFV0aWxpemF0aW9uIiwiYmFsYW5jZUN1cnJlbmN5IiwiZmV0Y2hUcmFuc2FjdGlvbnNGb3JBY2NvdW50Iiwic3RhcnREYXRlIiwic3VtbWFyeSIsIndhaXRVbnRpbEVsZW1lbnRGb3VuZCIsImJyYW5jaE51bSIsIiRldmFsIiwic3BhbiIsImFjY291bnRObWJyIiwiYWNjb3VudE51bWJlciIsImNsaWNrQnV0dG9uIiwiZmlsbElucHV0IiwiZm9ybWF0Iiwid2FpdEZvck5hdmlnYXRpb24iLCJoYXNOZXh0UGFnZSIsIm5vVHJhbnNhY3Rpb25FbG0iLCJwYWdlVHhucyIsImNvbmNhdCIsImJ1dHRvbiIsInNsaWNlIiwiZmV0Y2hUcmFuc2FjdGlvbnMiLCJ3YWl0Rm9yUG9zdExvZ2luIiwiUHJvbWlzZSIsInJhY2UiLCJPdHNhckhhaGF5YWxTY3JhcGVyIiwiQmFzZVNjcmFwZXJXaXRoQnJvd3NlciIsImdldExvZ2luT3B0aW9ucyIsImxvZ2luVXJsIiwiZmllbGRzIiwic3VibWl0QnV0dG9uU2VsZWN0b3IiLCJzbGVlcCIsInBvc3RBY3Rpb24iLCJwb3NzaWJsZVJlc3VsdHMiLCJmZXRjaERhdGEiLCJkZWZhdWx0U3RhcnRNb21lbnQiLCJzdWJ0cmFjdCIsImFkZCIsIm9wdGlvbnMiLCJ0b0RhdGUiLCJzdGFydE1vbWVudCIsIm1heCIsInVybCIsIm5hdmlnYXRlVG8iLCJhY2NvdW50cyIsInN1Y2Nlc3MiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NyYXBlcnMvb3RzYXItaGFoYXlhbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9tZW50LCB7IHR5cGUgTW9tZW50IH0gZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IHR5cGUgUGFnZSB9IGZyb20gJ3B1cHBldGVlcic7XG5pbXBvcnQgeyBTSEVLRUxfQ1VSUkVOQ1ksIFNIRUtFTF9DVVJSRU5DWV9TWU1CT0wgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgY2xpY2tCdXR0b24sXG4gIGVsZW1lbnRQcmVzZW50T25QYWdlLFxuICBmaWxsSW5wdXQsXG4gIHBhZ2VFdmFsQWxsLFxuICB3YWl0VW50aWxFbGVtZW50Rm91bmQsXG59IGZyb20gJy4uL2hlbHBlcnMvZWxlbWVudHMtaW50ZXJhY3Rpb25zJztcbmltcG9ydCB7IHdhaXRGb3JOYXZpZ2F0aW9uIH0gZnJvbSAnLi4vaGVscGVycy9uYXZpZ2F0aW9uJztcbmltcG9ydCB7IHNsZWVwIH0gZnJvbSAnLi4vaGVscGVycy93YWl0aW5nJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uU3RhdHVzZXMsIFRyYW5zYWN0aW9uVHlwZXMsIHR5cGUgVHJhbnNhY3Rpb24gfSBmcm9tICcuLi90cmFuc2FjdGlvbnMnO1xuaW1wb3J0IHsgQmFzZVNjcmFwZXJXaXRoQnJvd3NlciwgTG9naW5SZXN1bHRzLCB0eXBlIFBvc3NpYmxlTG9naW5SZXN1bHRzIH0gZnJvbSAnLi9iYXNlLXNjcmFwZXItd2l0aC1icm93c2VyJztcblxuY29uc3QgQkFTRV9VUkwgPSAnaHR0cHM6Ly9vbmxpbmUuYmFua290c2FyLmNvLmlsJztcbmNvbnN0IExPTkdfREFURV9GT1JNQVQgPSAnREQvTU0vWVlZWSc7XG5jb25zdCBEQVRFX0ZPUk1BVCA9ICdERC9NTS9ZWSc7XG5cbmludGVyZmFjZSBTY3JhcGVkVHJhbnNhY3Rpb24ge1xuICBiYWxhbmNlPzogc3RyaW5nO1xuICBkZWJpdD86IHN0cmluZztcbiAgY3JlZGl0Pzogc3RyaW5nO1xuICBtZW1vPzogc3RyaW5nO1xuICBzdGF0dXM/OiBzdHJpbmc7XG4gIHJlZmVyZW5jZT86IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGRhdGU6IHN0cmluZztcbn1cblxuZnVuY3Rpb24gZ2V0UG9zc2libGVMb2dpblJlc3VsdHMocGFnZTogUGFnZSkge1xuICBjb25zdCB1cmxzOiBQb3NzaWJsZUxvZ2luUmVzdWx0cyA9IHt9O1xuICB1cmxzW0xvZ2luUmVzdWx0cy5TdWNjZXNzXSA9IFtuZXcgUmVnRXhwKGBeJHtCQVNFX1VSTC5yZXBsYWNlKCcuJywgJ1xcXFwuJyl9L3dwcy9teXBvcnRhbC9GaWJpTWVudS9PbmxpbmVgKV07XG4gIHVybHNbTG9naW5SZXN1bHRzLkludmFsaWRQYXNzd29yZF0gPSBbKCkgPT4gZWxlbWVudFByZXNlbnRPblBhZ2UocGFnZSwgJyN2YWxpZGF0aW9uTXNnJyldO1xuICAvLyBUT0RPOiBzdXBwb3J0IGNoYW5nZSBwYXNzd29yZFxuICAvKiB1cmxzW0xPR0lOX1JFU1VMVC5DSEFOR0VfUEFTU1dPUkRdID0gW2BgXTsgKi9cbiAgcmV0dXJuIHVybHM7XG59XG5cbmZ1bmN0aW9uIGdldFRyYW5zYWN0aW9uc1VybCgpIHtcbiAgcmV0dXJuIGAke0JBU0VfVVJMfS93cHMvbXlwb3J0YWwvRmliaU1lbnUvT25saW5lL09uQWNjb3VudE1uZ21lbnQvT25CYWxhbmNlVHJhbnMvUHJpdmF0ZUFjY291bnRGbG93YDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTG9naW5GaWVsZHMoY3JlZGVudGlhbHM6IFNjcmFwZXJTcGVjaWZpY0NyZWRlbnRpYWxzKSB7XG4gIHJldHVybiBbXG4gICAgeyBzZWxlY3RvcjogJyN1c2VybmFtZScsIHZhbHVlOiBjcmVkZW50aWFscy51c2VybmFtZSB9LFxuICAgIHsgc2VsZWN0b3I6ICcjcGFzc3dvcmQnLCB2YWx1ZTogY3JlZGVudGlhbHMucGFzc3dvcmQgfSxcbiAgXTtcbn1cblxuZnVuY3Rpb24gZ2V0QW1vdW50RGF0YShhbW91bnRTdHI6IHN0cmluZywgaGFzQ3VycmVuY3kgPSBmYWxzZSkge1xuICBjb25zdCBhbW91bnRTdHJDbG4gPSBhbW91bnRTdHIucmVwbGFjZSgnLCcsICcnKTtcbiAgbGV0IGN1cnJlbmN5OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgbGV0IGFtb3VudDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIGlmICghaGFzQ3VycmVuY3kpIHtcbiAgICBhbW91bnQgPSBwYXJzZUZsb2F0KGFtb3VudFN0ckNsbik7XG4gICAgY3VycmVuY3kgPSBTSEVLRUxfQ1VSUkVOQ1k7XG4gIH0gZWxzZSBpZiAoYW1vdW50U3RyQ2xuLmluY2x1ZGVzKFNIRUtFTF9DVVJSRU5DWV9TWU1CT0wpKSB7XG4gICAgYW1vdW50ID0gcGFyc2VGbG9hdChhbW91bnRTdHJDbG4ucmVwbGFjZShTSEVLRUxfQ1VSUkVOQ1lfU1lNQk9MLCAnJykpO1xuICAgIGN1cnJlbmN5ID0gU0hFS0VMX0NVUlJFTkNZO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHBhcnRzID0gYW1vdW50U3RyQ2xuLnNwbGl0KCcgJyk7XG4gICAgYW1vdW50ID0gcGFyc2VGbG9hdChwYXJ0c1swXSk7XG4gICAgWywgY3VycmVuY3ldID0gcGFydHM7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGFtb3VudCxcbiAgICBjdXJyZW5jeSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29udmVydFRyYW5zYWN0aW9ucyh0eG5zOiBTY3JhcGVkVHJhbnNhY3Rpb25bXSk6IFRyYW5zYWN0aW9uW10ge1xuICByZXR1cm4gdHhucy5tYXAoKHR4bikgPT4ge1xuICAgIGNvbnN0IGRhdGVGb3JtYXQgPVxuICAgICAgICB0eG4uZGF0ZS5sZW5ndGggPT09IDggP1xuICAgICAgICAgIERBVEVfRk9STUFUIDpcbiAgICAgICAgICB0eG4uZGF0ZS5sZW5ndGggPT09IDEwID9cbiAgICAgICAgICAgIExPTkdfREFURV9GT1JNQVQgOlxuICAgICAgICAgICAgbnVsbDtcbiAgICBpZiAoIWRhdGVGb3JtYXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBkYXRlIGZvcm1hdCcpO1xuICAgIH1cbiAgICBjb25zdCB0eG5EYXRlID0gbW9tZW50KHR4bi5kYXRlLCBkYXRlRm9ybWF0KS50b0lTT1N0cmluZygpO1xuICAgIGNvbnN0IGNyZWRpdCA9IGdldEFtb3VudERhdGEodHhuLmNyZWRpdCB8fCAnJykuYW1vdW50O1xuICAgIGNvbnN0IGRlYml0ID0gZ2V0QW1vdW50RGF0YSh0eG4uZGViaXQgfHwgJycpLmFtb3VudDtcbiAgICBjb25zdCBhbW91bnQgPSAoTnVtYmVyLmlzTmFOKGNyZWRpdCkgPyAwIDogY3JlZGl0KSAtIChOdW1iZXIuaXNOYU4oZGViaXQpID8gMCA6IGRlYml0KTtcblxuICAgIGNvbnN0IHJlc3VsdDogVHJhbnNhY3Rpb24gPSB7XG4gICAgICB0eXBlOiBUcmFuc2FjdGlvblR5cGVzLk5vcm1hbCxcbiAgICAgIHN0YXR1czogVHJhbnNhY3Rpb25TdGF0dXNlcy5Db21wbGV0ZWQsXG4gICAgICBpZGVudGlmaWVyOiB0eG4ucmVmZXJlbmNlID8gcGFyc2VJbnQodHhuLnJlZmVyZW5jZSwgMTApIDogdW5kZWZpbmVkLFxuICAgICAgZGF0ZTogdHhuRGF0ZSxcbiAgICAgIHByb2Nlc3NlZERhdGU6IHR4bkRhdGUsXG4gICAgICBvcmlnaW5hbEFtb3VudDogYW1vdW50LFxuICAgICAgb3JpZ2luYWxDdXJyZW5jeTogU0hFS0VMX0NVUlJFTkNZLFxuICAgICAgY2hhcmdlZEFtb3VudDogYW1vdW50LFxuICAgICAgZGVzY3JpcHRpb246IHR4bi5kZXNjcmlwdGlvbiB8fCAnJyxcbiAgICAgIG1lbW86ICcnLFxuICAgIH07XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcGFyc2VUcmFuc2FjdGlvblBhZ2UocGFnZTogUGFnZSk6IFByb21pc2U8U2NyYXBlZFRyYW5zYWN0aW9uW10+IHtcbiAgY29uc3QgdGRzVmFsdWVzID0gYXdhaXQgcGFnZUV2YWxBbGwocGFnZSwgJyNkYXRhVGFibGUwNzcgdGJvZHkgdHInLCBbXSwgKHRycykgPT4ge1xuICAgIHJldHVybiAodHJzKS5tYXAoKGVsKSA9PiAoe1xuICAgICAgZGF0ZTogKGVsLnF1ZXJ5U2VsZWN0b3IoJy5kYXRlJykgYXMgSFRNTEVsZW1lbnQpLmlubmVyVGV4dCxcbiAgICAgIC8vIHJlZmVyZW5jZSBhbmQgZGVzY3JpcHRpb24gaGF2ZSB2aWNlLXZlcnNhIGNsYXNzIG5hbWVcbiAgICAgIGRlc2NyaXB0aW9uOiAoZWwucXVlcnlTZWxlY3RvcignLnJlZmVyZW5jZScpIGFzIEhUTUxFbGVtZW50KS5pbm5lclRleHQsXG4gICAgICByZWZlcmVuY2U6IChlbC5xdWVyeVNlbGVjdG9yKCcuZGV0YWlscycpIGFzIEhUTUxFbGVtZW50KS5pbm5lclRleHQsXG4gICAgICBjcmVkaXQ6IChlbC5xdWVyeVNlbGVjdG9yKCcuY3JlZGl0JykgYXMgSFRNTEVsZW1lbnQpLmlubmVyVGV4dCxcbiAgICAgIGRlYml0OiAoZWwucXVlcnlTZWxlY3RvcignLmRlYml0JykgYXMgSFRNTEVsZW1lbnQpLmlubmVyVGV4dCxcbiAgICAgIGJhbGFuY2U6IChlbC5xdWVyeVNlbGVjdG9yKCcuYmFsYW5jZScpIGFzIEhUTUxFbGVtZW50KS5pbm5lclRleHQsXG4gICAgfSkpO1xuICB9KTtcblxuICByZXR1cm4gdGRzVmFsdWVzO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRBY2NvdW50U3VtbWFyeShwYWdlOiBQYWdlKSB7XG4gIGNvbnN0IGJhbGFuY2VFbG0gPSBhd2FpdCBwYWdlLiQoJy5jdXJyZW50X2JhbGFuY2UnKTtcbiAgY29uc3QgYmFsYW5jZUlubmVyVGV4dEVsbSA9IGF3YWl0IGJhbGFuY2VFbG0hLmdldFByb3BlcnR5KCdpbm5lclRleHQnKTtcbiAgY29uc3QgYmFsYW5jZVRleHQgPSBhd2FpdCBiYWxhbmNlSW5uZXJUZXh0RWxtLmpzb25WYWx1ZSgpO1xuICBjb25zdCBiYWxhbmNlVmFsdWUgPSBnZXRBbW91bnREYXRhKGJhbGFuY2VUZXh0IGFzIHN0cmluZywgdHJ1ZSk7XG4gIC8vIFRPRE86IEZpbmQgdGhlIGNyZWRpdCBmaWVsZCBpbiBiYW5rIHdlYnNpdGUgKGNvdWxkIHNlZSBpdCBpbiBteSBhY2NvdW50KVxuICByZXR1cm4ge1xuICAgIGJhbGFuY2U6IE51bWJlci5pc05hTihiYWxhbmNlVmFsdWUuYW1vdW50KSA/IDAgOiBiYWxhbmNlVmFsdWUuYW1vdW50LFxuICAgIGNyZWRpdExpbWl0OiAwLjAsXG4gICAgY3JlZGl0VXRpbGl6YXRpb246IDAuMCxcbiAgICBiYWxhbmNlQ3VycmVuY3k6IGJhbGFuY2VWYWx1ZS5jdXJyZW5jeSxcbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmV0Y2hUcmFuc2FjdGlvbnNGb3JBY2NvdW50KHBhZ2U6IFBhZ2UsIHN0YXJ0RGF0ZTogTW9tZW50KSB7XG4gIGNvbnN0IHN1bW1hcnkgPSBhd2FpdCBnZXRBY2NvdW50U3VtbWFyeShwYWdlKTtcbiAgYXdhaXQgd2FpdFVudGlsRWxlbWVudEZvdW5kKHBhZ2UsICdpbnB1dCNmcm9tRGF0ZScpO1xuICAvLyBHZXQgYWNjb3VudCBudW1iZXJcbiAgY29uc3QgYnJhbmNoTnVtID0gYXdhaXQgcGFnZS4kZXZhbCgnLmJyYW5jaF9udW0nLCAoc3BhbikgPT4ge1xuICAgIHJldHVybiAoc3BhbiBhcyBIVE1MRWxlbWVudCkuaW5uZXJUZXh0O1xuICB9KTtcblxuICBjb25zdCBhY2NvdW50Tm1iciA9IGF3YWl0IHBhZ2UuJGV2YWwoJy5hY2NfbnVtJywgKHNwYW4pID0+IHtcbiAgICByZXR1cm4gKHNwYW4gYXMgSFRNTEVsZW1lbnQpLmlubmVyVGV4dDtcbiAgfSk7XG4gIGNvbnN0IGFjY291bnROdW1iZXIgPSBgMTQtJHticmFuY2hOdW19LSR7YWNjb3VudE5tYnJ9YDtcbiAgLy8gU2VhcmNoIGZvciByZWxhdmFudCB0cmFuc2FjdGlvbiBmcm9tIHN0YXJ0RGF0ZVxuICBhd2FpdCBjbGlja0J1dHRvbihwYWdlLCAnI3RhYkhlYWRlcjQnKTtcbiAgYXdhaXQgZmlsbElucHV0KFxuICAgIHBhZ2UsXG4gICAgJ2lucHV0I2Zyb21EYXRlJyxcbiAgICBzdGFydERhdGUuZm9ybWF0KCdERC9NTS9ZWVlZJyksXG4gICk7XG5cbiAgYXdhaXQgY2xpY2tCdXR0b24ocGFnZSwgJyNmaWJpX3RhYl9kYXRlcyAuZmliaV9idG46bnRoLWNoaWxkKDIpJyk7XG4gIGF3YWl0IHdhaXRGb3JOYXZpZ2F0aW9uKHBhZ2UpO1xuICBhd2FpdCB3YWl0VW50aWxFbGVtZW50Rm91bmQocGFnZSwgJ3RhYmxlI2RhdGFUYWJsZTA3NywgI05PX0RBVEEwNzcnKTtcbiAgbGV0IGhhc05leHRQYWdlID0gdHJ1ZTtcbiAgbGV0IHR4bnM6IFNjcmFwZWRUcmFuc2FjdGlvbltdID0gW107XG5cbiAgY29uc3Qgbm9UcmFuc2FjdGlvbkVsbSA9IGF3YWl0IHBhZ2UuJCgnI05PX0RBVEEwNzcnKTtcbiAgaWYgKG5vVHJhbnNhY3Rpb25FbG0gPT0gbnVsbCkge1xuICAgIC8vIFNjYXBlIHRyYW5zYWN0aW9ucyAodGhpcyBtYXliZSBzcGFubmVkIG9uIG11bHRpcGxlIHBhZ2VzKVxuICAgIHdoaWxlIChoYXNOZXh0UGFnZSkge1xuICAgICAgY29uc3QgcGFnZVR4bnMgPSBhd2FpdCBwYXJzZVRyYW5zYWN0aW9uUGFnZShwYWdlKTtcbiAgICAgIHR4bnMgPSB0eG5zLmNvbmNhdChwYWdlVHhucyk7XG4gICAgICBjb25zdCBidXR0b24gPSBhd2FpdCBwYWdlLiQoJyNOcGFnZScpO1xuICAgICAgaGFzTmV4dFBhZ2UgPSBmYWxzZTtcbiAgICAgIGlmIChidXR0b24gIT0gbnVsbCkge1xuICAgICAgICBoYXNOZXh0UGFnZSA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoaGFzTmV4dFBhZ2UpIHtcbiAgICAgICAgYXdhaXQgY2xpY2tCdXR0b24ocGFnZSwgJyNOcGFnZScpO1xuICAgICAgICBhd2FpdCB3YWl0Rm9yTmF2aWdhdGlvbihwYWdlKTtcbiAgICAgICAgYXdhaXQgd2FpdFVudGlsRWxlbWVudEZvdW5kKHBhZ2UsICd0YWJsZSNkYXRhVGFibGUwNzcnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGFjY291bnROdW1iZXIsXG4gICAgc3VtbWFyeSxcbiAgICB0eG5zOiBjb252ZXJ0VHJhbnNhY3Rpb25zKHR4bnMuc2xpY2UoMSkpLCAvLyBSZW1vdmUgZmlyc3QgbGluZSB3aGljaCBpcyBcIm9wZW5pbmcgYmFsYW5jZVwiXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoVHJhbnNhY3Rpb25zKHBhZ2U6IFBhZ2UsIHN0YXJ0RGF0ZTogTW9tZW50KSB7XG4gIC8vIFRPRE8gbmVlZCB0byBleHRlbmQgdG8gc3VwcG9ydCBtdWx0aXBsZSBhY2NvdW50cyBhbmQgZm9yZWlnbiBhY2NvdW50c1xuICByZXR1cm4gW2F3YWl0IGZldGNoVHJhbnNhY3Rpb25zRm9yQWNjb3VudChwYWdlLCBzdGFydERhdGUpXTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gd2FpdEZvclBvc3RMb2dpbihwYWdlOiBQYWdlKSB7XG4gIC8vIFRPRE8gY2hlY2sgZm9yIGNvbmRpdGlvbiB0byBwcm92aWRlIG5ldyBwYXNzd29yZFxuICByZXR1cm4gUHJvbWlzZS5yYWNlKFtcbiAgICB3YWl0VW50aWxFbGVtZW50Rm91bmQocGFnZSwgJ2Rpdi5sb3R1c0ZyYW1lJywgdHJ1ZSksXG4gICAgd2FpdFVudGlsRWxlbWVudEZvdW5kKHBhZ2UsICcjdmFsaWRhdGlvbk1zZycpLFxuICBdKTtcbn1cblxudHlwZSBTY3JhcGVyU3BlY2lmaWNDcmVkZW50aWFscyA9IHsgdXNlcm5hbWU6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZyB9O1xuXG5jbGFzcyBPdHNhckhhaGF5YWxTY3JhcGVyIGV4dGVuZHMgQmFzZVNjcmFwZXJXaXRoQnJvd3NlcjxTY3JhcGVyU3BlY2lmaWNDcmVkZW50aWFscz4ge1xuICBnZXRMb2dpbk9wdGlvbnMoY3JlZGVudGlhbHM6IFNjcmFwZXJTcGVjaWZpY0NyZWRlbnRpYWxzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxvZ2luVXJsOiBgJHtCQVNFX1VSTH0vTWF0YWZMb2dpblNlcnZpY2UvTWF0YWZMb2dpblNlcnZsZXQ/YmFua0lkPU9UU0FSUFJUQUwmc2l0ZT1Qcml2YXRlJktPRFNBRkE9SEVgLFxuICAgICAgZmllbGRzOiBjcmVhdGVMb2dpbkZpZWxkcyhjcmVkZW50aWFscyksXG4gICAgICBzdWJtaXRCdXR0b25TZWxlY3RvcjogYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCBzbGVlcCgxMDAwKTtcbiAgICAgICAgYXdhaXQgY2xpY2tCdXR0b24odGhpcy5wYWdlLCAnI2NvbnRpbnVlQnRuJyk7XG4gICAgICB9LFxuICAgICAgcG9zdEFjdGlvbjogYXN5bmMgKCkgPT4gd2FpdEZvclBvc3RMb2dpbih0aGlzLnBhZ2UpLFxuICAgICAgcG9zc2libGVSZXN1bHRzOiBnZXRQb3NzaWJsZUxvZ2luUmVzdWx0cyh0aGlzLnBhZ2UpLFxuICAgIH07XG4gIH1cblxuICBhc3luYyBmZXRjaERhdGEoKSB7XG4gICAgY29uc3QgZGVmYXVsdFN0YXJ0TW9tZW50ID0gbW9tZW50KCkuc3VidHJhY3QoMSwgJ3llYXJzJykuYWRkKDEsICdkYXknKTtcbiAgICBjb25zdCBzdGFydERhdGUgPSB0aGlzLm9wdGlvbnMuc3RhcnREYXRlIHx8IGRlZmF1bHRTdGFydE1vbWVudC50b0RhdGUoKTtcbiAgICBjb25zdCBzdGFydE1vbWVudCA9IG1vbWVudC5tYXgoZGVmYXVsdFN0YXJ0TW9tZW50LCBtb21lbnQoc3RhcnREYXRlKSk7XG5cbiAgICBjb25zdCB1cmwgPSBnZXRUcmFuc2FjdGlvbnNVcmwoKTtcbiAgICBhd2FpdCB0aGlzLm5hdmlnYXRlVG8odXJsKTtcblxuICAgIGNvbnN0IGFjY291bnRzID0gYXdhaXQgZmV0Y2hUcmFuc2FjdGlvbnModGhpcy5wYWdlLCBzdGFydE1vbWVudCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgIGFjY291bnRzLFxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgT3RzYXJIYWhheWFsU2NyYXBlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsSUFBQUEsT0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUMsVUFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUscUJBQUEsR0FBQUYsT0FBQTtBQU9BLElBQUFHLFdBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLFFBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLGFBQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLHVCQUFBLEdBQUFOLE9BQUE7QUFBOEcsU0FBQUQsdUJBQUFRLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxLQUFBRSxPQUFBLEVBQUFGLENBQUE7QUFFOUcsTUFBTUcsUUFBUSxHQUFHLGdDQUFnQztBQUNqRCxNQUFNQyxnQkFBZ0IsR0FBRyxZQUFZO0FBQ3JDLE1BQU1DLFdBQVcsR0FBRyxVQUFVO0FBYTlCLFNBQVNDLHVCQUF1QkEsQ0FBQ0MsSUFBVSxFQUFFO0VBQzNDLE1BQU1DLElBQTBCLEdBQUcsQ0FBQyxDQUFDO0VBQ3JDQSxJQUFJLENBQUNDLG9DQUFZLENBQUNDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSUMsTUFBTSxDQUFDLElBQUlSLFFBQVEsQ0FBQ1MsT0FBTyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztFQUMxR0osSUFBSSxDQUFDQyxvQ0FBWSxDQUFDSSxlQUFlLENBQUMsR0FBRyxDQUFDLE1BQU0sSUFBQUMsMENBQW9CLEVBQUNQLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0VBQ3pGO0VBQ0E7RUFDQSxPQUFPQyxJQUFJO0FBQ2I7QUFFQSxT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
22
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYmFzZUJlaW5sZXVtaUdyb3VwIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJfZGVmaW5lUHJvcGVydHkiLCJyIiwidCIsIl90b1Byb3BlcnR5S2V5IiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsImkiLCJfdG9QcmltaXRpdmUiLCJTeW1ib2wiLCJ0b1ByaW1pdGl2ZSIsImNhbGwiLCJUeXBlRXJyb3IiLCJTdHJpbmciLCJOdW1iZXIiLCJPdHNhckhhaGF5YWxTY3JhcGVyIiwiQmVpbmxldW1pR3JvdXBCYXNlU2NyYXBlciIsImNvbnN0cnVjdG9yIiwiYXJncyIsIkJBU0VfVVJMIiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjcmFwZXJzL290c2FyLWhhaGF5YWwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJlaW5sZXVtaUdyb3VwQmFzZVNjcmFwZXIgZnJvbSAnLi9iYXNlLWJlaW5sZXVtaS1ncm91cCc7XG5cbmNsYXNzIE90c2FySGFoYXlhbFNjcmFwZXIgZXh0ZW5kcyBCZWlubGV1bWlHcm91cEJhc2VTY3JhcGVyIHtcbiAgQkFTRV9VUkwgPSAnaHR0cHM6Ly9vbmxpbmUuYmFua290c2FyLmNvLmlsJztcblxuICBMT0dJTl9VUkwgPSBgJHt0aGlzLkJBU0VfVVJMfS9NYXRhZkxvZ2luU2VydmljZS9NYXRhZkxvZ2luU2VydmxldD9iYW5rSWQ9T1RTQVJQUlRBTCZzaXRlPVByaXZhdGUmS09EU0FGQT1IRWA7XG5cbiAgVFJBTlNBQ1RJT05TX1VSTCA9IGAke3RoaXMuQkFTRV9VUkx9L3dwcy9teXBvcnRhbC9GaWJpTWVudS9PbmxpbmUvT25BY2NvdW50TW5nbWVudC9PbkJhbGFuY2VUcmFucy9Qcml2YXRlQWNjb3VudEZsb3dgO1xufVxuXG5leHBvcnQgZGVmYXVsdCBPdHNhckhhaGF5YWxTY3JhcGVyOyJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLElBQUFBLG1CQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFBK0QsU0FBQUQsdUJBQUFFLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxLQUFBRSxPQUFBLEVBQUFGLENBQUE7QUFBQSxTQUFBRyxnQkFBQUgsQ0FBQSxFQUFBSSxDQUFBLEVBQUFDLENBQUEsWUFBQUQsQ0FBQSxHQUFBRSxjQUFBLENBQUFGLENBQUEsTUFBQUosQ0FBQSxHQUFBTyxNQUFBLENBQUFDLGNBQUEsQ0FBQVIsQ0FBQSxFQUFBSSxDQUFBLElBQUFLLEtBQUEsRUFBQUosQ0FBQSxFQUFBSyxVQUFBLE1BQUFDLFlBQUEsTUFBQUMsUUFBQSxVQUFBWixDQUFBLENBQUFJLENBQUEsSUFBQUMsQ0FBQSxFQUFBTCxDQUFBO0FBQUEsU0FBQU0sZUFBQUQsQ0FBQSxRQUFBUSxDQUFBLEdBQUFDLFlBQUEsQ0FBQVQsQ0FBQSx1Q0FBQVEsQ0FBQSxHQUFBQSxDQUFBLEdBQUFBLENBQUE7QUFBQSxTQUFBQyxhQUFBVCxDQUFBLEVBQUFELENBQUEsMkJBQUFDLENBQUEsS0FBQUEsQ0FBQSxTQUFBQSxDQUFBLE1BQUFMLENBQUEsR0FBQUssQ0FBQSxDQUFBVSxNQUFBLENBQUFDLFdBQUEsa0JBQUFoQixDQUFBLFFBQUFhLENBQUEsR0FBQWIsQ0FBQSxDQUFBaUIsSUFBQSxDQUFBWixDQUFBLEVBQUFELENBQUEsdUNBQUFTLENBQUEsU0FBQUEsQ0FBQSxZQUFBSyxTQUFBLHlFQUFBZCxDQUFBLEdBQUFlLE1BQUEsR0FBQUMsTUFBQSxFQUFBZixDQUFBO0FBRS9ELE1BQU1nQixtQkFBbUIsU0FBU0MsMkJBQXlCLENBQUM7RUFBQUMsWUFBQSxHQUFBQyxJQUFBO0lBQUEsU0FBQUEsSUFBQTtJQUFBckIsZUFBQSxtQkFDL0MsZ0NBQWdDO0lBQUFBLGVBQUEsb0JBRS9CLEdBQUcsSUFBSSxDQUFDc0IsUUFBUSxnRkFBZ0Y7SUFBQXRCLGVBQUEsMkJBRXpGLEdBQUcsSUFBSSxDQUFDc0IsUUFBUSxrRkFBa0Y7RUFBQTtBQUN2SDtBQUFDLElBQUFDLFFBQUEsR0FBQUMsT0FBQSxDQUFBekIsT0FBQSxHQUVjbUIsbUJBQW1CIiwiaWdub3JlTGlzdCI6W119
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "israeli-bank-scrapers",
3
- "version": "5.2.3",
3
+ "version": "5.4.0",
4
4
  "private": false,
5
5
  "description": "Provide scrapers for all major Israeli banks and credit card companies",
6
6
  "engines": {