israeli-bank-scrapers
Version:
Provide scrapers for all major Israeli banks and credit card companies
124 lines (123 loc) • 22.2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _moment = _interopRequireDefault(require("moment"));
var _elementsInteractions = require("../helpers/elements-interactions");
var _fetch = require("../helpers/fetch");
var _navigation = require("../helpers/navigation");
var _transactions = require("../helpers/transactions");
var _transactions2 = require("../transactions");
var _baseScraperWithBrowser = require("./base-scraper-with-browser");
var _errors = require("./errors");
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
const BASE_URL = 'https://start.telebank.co.il';
const DATE_FORMAT = 'YYYYMMDD';
function convertTransactions(txns, txnStatus, options) {
if (!txns) {
return [];
}
return txns.map(txn => {
const result = {
type: _transactions2.TransactionTypes.Normal,
identifier: txn.OperationNumber,
date: (0, _moment.default)(txn.OperationDate, DATE_FORMAT).toISOString(),
processedDate: (0, _moment.default)(txn.ValueDate, DATE_FORMAT).toISOString(),
originalAmount: txn.OperationAmount,
originalCurrency: 'ILS',
chargedAmount: txn.OperationAmount,
description: txn.OperationDescriptionToDisplay,
status: txnStatus
};
if (options?.includeRawTransaction) {
result.rawTransaction = (0, _transactions.getRawTransaction)(txn);
}
return result;
});
}
async function fetchAccountData(page, options) {
const apiSiteUrl = `${BASE_URL}/Titan/gatewayAPI`;
const accountDataUrl = `${apiSiteUrl}/userAccountsData`;
const accountInfo = await (0, _fetch.fetchGetWithinPage)(page, accountDataUrl);
if (!accountInfo) {
return {
success: false,
errorType: _errors.ScraperErrorTypes.Generic,
errorMessage: 'failed to get account data'
};
}
const defaultStartMoment = (0, _moment.default)().subtract(1, 'years').add(2, 'day');
const startDate = options.startDate || defaultStartMoment.toDate();
const startMoment = _moment.default.max(defaultStartMoment, (0, _moment.default)(startDate));
const startDateStr = startMoment.format(DATE_FORMAT);
const accounts = accountInfo.UserAccountsData.UserAccounts.map(acc => acc.NewAccountInfo.AccountID);
const accountsData = [];
for (const accountNumber of accounts) {
const txnsUrl = `${apiSiteUrl}/lastTransactions/${accountNumber}/Date?IsCategoryDescCode=True&IsTransactionDetails=True&IsEventNames=True&IsFutureTransactionFlag=True&FromDate=${startDateStr}`;
const txnsResult = await (0, _fetch.fetchGetWithinPage)(page, txnsUrl);
if (!txnsResult || txnsResult.Error || !txnsResult.CurrentAccountLastTransactions) {
return {
success: false,
errorType: _errors.ScraperErrorTypes.Generic,
errorMessage: txnsResult && txnsResult.Error ? txnsResult.Error.MsgText : 'unknown error'
};
}
const accountCompletedTxns = convertTransactions(txnsResult.CurrentAccountLastTransactions.OperationEntry, _transactions2.TransactionStatuses.Completed, options);
const rawFutureTxns = txnsResult.CurrentAccountLastTransactions.FutureTransactionsBlock?.FutureTransactionEntry ?? [];
const accountPendingTxns = convertTransactions(rawFutureTxns, _transactions2.TransactionStatuses.Pending, options);
accountsData.push({
accountNumber,
balance: txnsResult.CurrentAccountLastTransactions.CurrentAccountInfo.AccountBalance,
txns: [...accountCompletedTxns, ...accountPendingTxns]
});
}
const accountData = {
success: true,
accounts: accountsData
};
return accountData;
}
async function navigateOrErrorLabel(page) {
try {
await (0, _navigation.waitForNavigation)(page);
} catch (e) {
await (0, _elementsInteractions.waitUntilElementFound)(page, '#general-error', false, 100);
}
}
function getPossibleLoginResults() {
const urls = {};
urls[_baseScraperWithBrowser.LoginResults.Success] = [`${BASE_URL}/apollo/retail/#/MY_ACCOUNT_HOMEPAGE`, `${BASE_URL}/apollo/retail2/#/MY_ACCOUNT_HOMEPAGE`, `${BASE_URL}/apollo/retail2/`, `${BASE_URL}/apollo/retail3/#/MY_ACCOUNT_HOMEPAGE`, `${BASE_URL}/apollo/retail3/`];
urls[_baseScraperWithBrowser.LoginResults.InvalidPassword] = [`${BASE_URL}/apollo/core/templates/lobby/masterPage.html#/LOGIN_PAGE`];
urls[_baseScraperWithBrowser.LoginResults.ChangePassword] = [`${BASE_URL}/apollo/core/templates/lobby/masterPage.html#/PWD_RENEW`];
return urls;
}
function createLoginFields(credentials) {
return [{
selector: '#tzId',
value: credentials.id
}, {
selector: '#tzPassword',
value: credentials.password
}, {
selector: '#aidnum',
value: credentials.num
}];
}
class DiscountScraper extends _baseScraperWithBrowser.BaseScraperWithBrowser {
getLoginOptions(credentials) {
return {
loginUrl: `${BASE_URL}/login/#/LOGIN_PAGE`,
checkReadiness: async () => (0, _elementsInteractions.waitUntilElementFound)(this.page, '#tzId'),
fields: createLoginFields(credentials),
submitButtonSelector: '.sendBtn',
postAction: async () => navigateOrErrorLabel(this.page),
possibleResults: getPossibleLoginResults()
};
}
async fetchData() {
return fetchAccountData(this.page, this.options);
}
}
var _default = exports.default = DiscountScraper;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbW9tZW50IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfZWxlbWVudHNJbnRlcmFjdGlvbnMiLCJfZmV0Y2giLCJfbmF2aWdhdGlvbiIsIl90cmFuc2FjdGlvbnMiLCJfdHJhbnNhY3Rpb25zMiIsIl9iYXNlU2NyYXBlcldpdGhCcm93c2VyIiwiX2Vycm9ycyIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIkJBU0VfVVJMIiwiREFURV9GT1JNQVQiLCJjb252ZXJ0VHJhbnNhY3Rpb25zIiwidHhucyIsInR4blN0YXR1cyIsIm9wdGlvbnMiLCJtYXAiLCJ0eG4iLCJyZXN1bHQiLCJ0eXBlIiwiVHJhbnNhY3Rpb25UeXBlcyIsIk5vcm1hbCIsImlkZW50aWZpZXIiLCJPcGVyYXRpb25OdW1iZXIiLCJkYXRlIiwibW9tZW50IiwiT3BlcmF0aW9uRGF0ZSIsInRvSVNPU3RyaW5nIiwicHJvY2Vzc2VkRGF0ZSIsIlZhbHVlRGF0ZSIsIm9yaWdpbmFsQW1vdW50IiwiT3BlcmF0aW9uQW1vdW50Iiwib3JpZ2luYWxDdXJyZW5jeSIsImNoYXJnZWRBbW91bnQiLCJkZXNjcmlwdGlvbiIsIk9wZXJhdGlvbkRlc2NyaXB0aW9uVG9EaXNwbGF5Iiwic3RhdHVzIiwiaW5jbHVkZVJhd1RyYW5zYWN0aW9uIiwicmF3VHJhbnNhY3Rpb24iLCJnZXRSYXdUcmFuc2FjdGlvbiIsImZldGNoQWNjb3VudERhdGEiLCJwYWdlIiwiYXBpU2l0ZVVybCIsImFjY291bnREYXRhVXJsIiwiYWNjb3VudEluZm8iLCJmZXRjaEdldFdpdGhpblBhZ2UiLCJzdWNjZXNzIiwiZXJyb3JUeXBlIiwiU2NyYXBlckVycm9yVHlwZXMiLCJHZW5lcmljIiwiZXJyb3JNZXNzYWdlIiwiZGVmYXVsdFN0YXJ0TW9tZW50Iiwic3VidHJhY3QiLCJhZGQiLCJzdGFydERhdGUiLCJ0b0RhdGUiLCJzdGFydE1vbWVudCIsIm1heCIsInN0YXJ0RGF0ZVN0ciIsImZvcm1hdCIsImFjY291bnRzIiwiVXNlckFjY291bnRzRGF0YSIsIlVzZXJBY2NvdW50cyIsImFjYyIsIk5ld0FjY291bnRJbmZvIiwiQWNjb3VudElEIiwiYWNjb3VudHNEYXRhIiwiYWNjb3VudE51bWJlciIsInR4bnNVcmwiLCJ0eG5zUmVzdWx0IiwiRXJyb3IiLCJDdXJyZW50QWNjb3VudExhc3RUcmFuc2FjdGlvbnMiLCJNc2dUZXh0IiwiYWNjb3VudENvbXBsZXRlZFR4bnMiLCJPcGVyYXRpb25FbnRyeSIsIlRyYW5zYWN0aW9uU3RhdHVzZXMiLCJDb21wbGV0ZWQiLCJyYXdGdXR1cmVUeG5zIiwiRnV0dXJlVHJhbnNhY3Rpb25zQmxvY2siLCJGdXR1cmVUcmFuc2FjdGlvbkVudHJ5IiwiYWNjb3VudFBlbmRpbmdUeG5zIiwiUGVuZGluZyIsInB1c2giLCJiYWxhbmNlIiwiQ3VycmVudEFjY291bnRJbmZvIiwiQWNjb3VudEJhbGFuY2UiLCJhY2NvdW50RGF0YSIsIm5hdmlnYXRlT3JFcnJvckxhYmVsIiwid2FpdEZvck5hdmlnYXRpb24iLCJ3YWl0VW50aWxFbGVtZW50Rm91bmQiLCJnZXRQb3NzaWJsZUxvZ2luUmVzdWx0cyIsInVybHMiLCJMb2dpblJlc3VsdHMiLCJTdWNjZXNzIiwiSW52YWxpZFBhc3N3b3JkIiwiQ2hhbmdlUGFzc3dvcmQiLCJjcmVhdGVMb2dpbkZpZWxkcyIsImNyZWRlbnRpYWxzIiwic2VsZWN0b3IiLCJ2YWx1ZSIsImlkIiwicGFzc3dvcmQiLCJudW0iLCJEaXNjb3VudFNjcmFwZXIiLCJCYXNlU2NyYXBlcldpdGhCcm93c2VyIiwiZ2V0TG9naW5PcHRpb25zIiwibG9naW5VcmwiLCJjaGVja1JlYWRpbmVzcyIsImZpZWxkcyIsInN1Ym1pdEJ1dHRvblNlbGVjdG9yIiwicG9zdEFjdGlvbiIsInBvc3NpYmxlUmVzdWx0cyIsImZldGNoRGF0YSIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JhcGVycy9kaXNjb3VudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyB0eXBlIFBhZ2UgfSBmcm9tICdwdXBwZXRlZXInO1xuaW1wb3J0IHsgd2FpdFVudGlsRWxlbWVudEZvdW5kIH0gZnJvbSAnLi4vaGVscGVycy9lbGVtZW50cy1pbnRlcmFjdGlvbnMnO1xuaW1wb3J0IHsgZmV0Y2hHZXRXaXRoaW5QYWdlIH0gZnJvbSAnLi4vaGVscGVycy9mZXRjaCc7XG5pbXBvcnQgeyB3YWl0Rm9yTmF2aWdhdGlvbiB9IGZyb20gJy4uL2hlbHBlcnMvbmF2aWdhdGlvbic7XG5pbXBvcnQgeyBnZXRSYXdUcmFuc2FjdGlvbiB9IGZyb20gJy4uL2hlbHBlcnMvdHJhbnNhY3Rpb25zJztcbmltcG9ydCB7IHR5cGUgVHJhbnNhY3Rpb24sIFRyYW5zYWN0aW9uU3RhdHVzZXMsIFRyYW5zYWN0aW9uVHlwZXMgfSBmcm9tICcuLi90cmFuc2FjdGlvbnMnO1xuaW1wb3J0IHsgQmFzZVNjcmFwZXJXaXRoQnJvd3NlciwgTG9naW5SZXN1bHRzLCB0eXBlIFBvc3NpYmxlTG9naW5SZXN1bHRzIH0gZnJvbSAnLi9iYXNlLXNjcmFwZXItd2l0aC1icm93c2VyJztcbmltcG9ydCB7IFNjcmFwZXJFcnJvclR5cGVzIH0gZnJvbSAnLi9lcnJvcnMnO1xuaW1wb3J0IHsgdHlwZSBTY3JhcGVyT3B0aW9ucywgdHlwZSBTY3JhcGVyU2NyYXBpbmdSZXN1bHQgfSBmcm9tICcuL2ludGVyZmFjZSc7XG5cbmNvbnN0IEJBU0VfVVJMID0gJ2h0dHBzOi8vc3RhcnQudGVsZWJhbmsuY28uaWwnO1xuY29uc3QgREFURV9GT1JNQVQgPSAnWVlZWU1NREQnO1xuXG5pbnRlcmZhY2UgU2NyYXBlZFRyYW5zYWN0aW9uIHtcbiAgT3BlcmF0aW9uTnVtYmVyOiBudW1iZXI7XG4gIE9wZXJhdGlvbkRhdGU6IHN0cmluZztcbiAgVmFsdWVEYXRlOiBzdHJpbmc7XG4gIE9wZXJhdGlvbkFtb3VudDogbnVtYmVyO1xuICBPcGVyYXRpb25EZXNjcmlwdGlvblRvRGlzcGxheTogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgQ3VycmVudEFjY291bnRJbmZvIHtcbiAgQWNjb3VudEJhbGFuY2U6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIFNjcmFwZWRBY2NvdW50RGF0YSB7XG4gIFVzZXJBY2NvdW50c0RhdGE6IHtcbiAgICBEZWZhdWx0QWNjb3VudE51bWJlcjogc3RyaW5nO1xuICAgIFVzZXJBY2NvdW50czogQXJyYXk8e1xuICAgICAgTmV3QWNjb3VudEluZm86IHtcbiAgICAgICAgQWNjb3VudElEOiBzdHJpbmc7XG4gICAgICB9O1xuICAgIH0+O1xuICB9O1xufVxuXG5pbnRlcmZhY2UgU2NyYXBlZFRyYW5zYWN0aW9uRGF0YSB7XG4gIEVycm9yPzogeyBNc2dUZXh0OiBzdHJpbmcgfTtcbiAgQ3VycmVudEFjY291bnRMYXN0VHJhbnNhY3Rpb25zPzoge1xuICAgIE9wZXJhdGlvbkVudHJ5OiBTY3JhcGVkVHJhbnNhY3Rpb25bXTtcbiAgICBDdXJyZW50QWNjb3VudEluZm86IEN1cnJlbnRBY2NvdW50SW5mbztcbiAgICBGdXR1cmVUcmFuc2FjdGlvbnNCbG9jaz86IHtcbiAgICAgIEZ1dHVyZVRyYW5zYWN0aW9uRW50cnk6IFNjcmFwZWRUcmFuc2FjdGlvbltdO1xuICAgIH07XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRUcmFuc2FjdGlvbnMoXG4gIHR4bnM6IFNjcmFwZWRUcmFuc2FjdGlvbltdLFxuICB0eG5TdGF0dXM6IFRyYW5zYWN0aW9uU3RhdHVzZXMsXG4gIG9wdGlvbnM/OiBTY3JhcGVyT3B0aW9ucyxcbik6IFRyYW5zYWN0aW9uW10ge1xuICBpZiAoIXR4bnMpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgcmV0dXJuIHR4bnMubWFwKHR4biA9PiB7XG4gICAgY29uc3QgcmVzdWx0OiBUcmFuc2FjdGlvbiA9IHtcbiAgICAgIHR5cGU6IFRyYW5zYWN0aW9uVHlwZXMuTm9ybWFsLFxuICAgICAgaWRlbnRpZmllcjogdHhuLk9wZXJhdGlvbk51bWJlcixcbiAgICAgIGRhdGU6IG1vbWVudCh0eG4uT3BlcmF0aW9uRGF0ZSwgREFURV9GT1JNQVQpLnRvSVNPU3RyaW5nKCksXG4gICAgICBwcm9jZXNzZWREYXRlOiBtb21lbnQodHhuLlZhbHVlRGF0ZSwgREFURV9GT1JNQVQpLnRvSVNPU3RyaW5nKCksXG4gICAgICBvcmlnaW5hbEFtb3VudDogdHhuLk9wZXJhdGlvbkFtb3VudCxcbiAgICAgIG9yaWdpbmFsQ3VycmVuY3k6ICdJTFMnLFxuICAgICAgY2hhcmdlZEFtb3VudDogdHhuLk9wZXJhdGlvbkFtb3VudCxcbiAgICAgIGRlc2NyaXB0aW9uOiB0eG4uT3BlcmF0aW9uRGVzY3JpcHRpb25Ub0Rpc3BsYXksXG4gICAgICBzdGF0dXM6IHR4blN0YXR1cyxcbiAgICB9O1xuXG4gICAgaWYgKG9wdGlvbnM/LmluY2x1ZGVSYXdUcmFuc2FjdGlvbikge1xuICAgICAgcmVzdWx0LnJhd1RyYW5zYWN0aW9uID0gZ2V0UmF3VHJhbnNhY3Rpb24odHhuKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmV0Y2hBY2NvdW50RGF0YShwYWdlOiBQYWdlLCBvcHRpb25zOiBTY3JhcGVyT3B0aW9ucyk6IFByb21pc2U8U2NyYXBlclNjcmFwaW5nUmVzdWx0PiB7XG4gIGNvbnN0IGFwaVNpdGVVcmwgPSBgJHtCQVNFX1VSTH0vVGl0YW4vZ2F0ZXdheUFQSWA7XG5cbiAgY29uc3QgYWNjb3VudERhdGFVcmwgPSBgJHthcGlTaXRlVXJsfS91c2VyQWNjb3VudHNEYXRhYDtcbiAgY29uc3QgYWNjb3VudEluZm8gPSBhd2FpdCBmZXRjaEdldFdpdGhpblBhZ2U8U2NyYXBlZEFjY291bnREYXRhPihwYWdlLCBhY2NvdW50RGF0YVVybCk7XG5cbiAgaWYgKCFhY2NvdW50SW5mbykge1xuICAgIHJldHVybiB7XG4gICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgIGVycm9yVHlwZTogU2NyYXBlckVycm9yVHlwZXMuR2VuZXJpYyxcbiAgICAgIGVycm9yTWVzc2FnZTogJ2ZhaWxlZCB0byBnZXQgYWNjb3VudCBkYXRhJyxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgZGVmYXVsdFN0YXJ0TW9tZW50ID0gbW9tZW50KCkuc3VidHJhY3QoMSwgJ3llYXJzJykuYWRkKDIsICdkYXknKTtcbiAgY29uc3Qgc3RhcnREYXRlID0gb3B0aW9ucy5zdGFydERhdGUgfHwgZGVmYXVsdFN0YXJ0TW9tZW50LnRvRGF0ZSgpO1xuICBjb25zdCBzdGFydE1vbWVudCA9IG1vbWVudC5tYXgoZGVmYXVsdFN0YXJ0TW9tZW50LCBtb21lbnQoc3RhcnREYXRlKSk7XG5cbiAgY29uc3Qgc3RhcnREYXRlU3RyID0gc3RhcnRNb21lbnQuZm9ybWF0KERBVEVfRk9STUFUKTtcblxuICBjb25zdCBhY2NvdW50czogc3RyaW5nW10gPSBhY2NvdW50SW5mby5Vc2VyQWNjb3VudHNEYXRhLlVzZXJBY2NvdW50cy5tYXAoYWNjID0+IGFjYy5OZXdBY2NvdW50SW5mby5BY2NvdW50SUQpO1xuICBjb25zdCBhY2NvdW50c0RhdGE6IEFycmF5PHsgYWNjb3VudE51bWJlcjogc3RyaW5nOyBiYWxhbmNlOiBudW1iZXI7IHR4bnM6IFRyYW5zYWN0aW9uW10gfT4gPSBbXTtcblxuICBmb3IgKGNvbnN0IGFjY291bnROdW1iZXIgb2YgYWNjb3VudHMpIHtcbiAgICBjb25zdCB0eG5zVXJsID0gYCR7YXBpU2l0ZVVybH0vbGFzdFRyYW5zYWN0aW9ucy8ke2FjY291bnROdW1iZXJ9L0RhdGU/SXNDYXRlZ29yeURlc2NDb2RlPVRydWUmSXNUcmFuc2FjdGlvbkRldGFpbHM9VHJ1ZSZJc0V2ZW50TmFtZXM9VHJ1ZSZJc0Z1dHVyZVRyYW5zYWN0aW9uRmxhZz1UcnVlJkZyb21EYXRlPSR7c3RhcnREYXRlU3RyfWA7XG4gICAgY29uc3QgdHhuc1Jlc3VsdCA9IGF3YWl0IGZldGNoR2V0V2l0aGluUGFnZTxTY3JhcGVkVHJhbnNhY3Rpb25EYXRhPihwYWdlLCB0eG5zVXJsKTtcbiAgICBpZiAoIXR4bnNSZXN1bHQgfHwgdHhuc1Jlc3VsdC5FcnJvciB8fCAhdHhuc1Jlc3VsdC5DdXJyZW50QWNjb3VudExhc3RUcmFuc2FjdGlvbnMpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICBlcnJvclR5cGU6IFNjcmFwZXJFcnJvclR5cGVzLkdlbmVyaWMsXG4gICAgICAgIGVycm9yTWVzc2FnZTogdHhuc1Jlc3VsdCAmJiB0eG5zUmVzdWx0LkVycm9yID8gdHhuc1Jlc3VsdC5FcnJvci5Nc2dUZXh0IDogJ3Vua25vd24gZXJyb3InLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBhY2NvdW50Q29tcGxldGVkVHhucyA9IGNvbnZlcnRUcmFuc2FjdGlvbnMoXG4gICAgICB0eG5zUmVzdWx0LkN1cnJlbnRBY2NvdW50TGFzdFRyYW5zYWN0aW9ucy5PcGVyYXRpb25FbnRyeSxcbiAgICAgIFRyYW5zYWN0aW9uU3RhdHVzZXMuQ29tcGxldGVkLFxuICAgICAgb3B0aW9ucyxcbiAgICApO1xuICAgIGNvbnN0IHJhd0Z1dHVyZVR4bnMgPVxuICAgICAgdHhuc1Jlc3VsdC5DdXJyZW50QWNjb3VudExhc3RUcmFuc2FjdGlvbnMuRnV0dXJlVHJhbnNhY3Rpb25zQmxvY2s/LkZ1dHVyZVRyYW5zYWN0aW9uRW50cnkgPz8gW107XG4gICAgY29uc3QgYWNjb3VudFBlbmRpbmdUeG5zID0gY29udmVydFRyYW5zYWN0aW9ucyhyYXdGdXR1cmVUeG5zLCBUcmFuc2FjdGlvblN0YXR1c2VzLlBlbmRpbmcsIG9wdGlvbnMpO1xuXG4gICAgYWNjb3VudHNEYXRhLnB1c2goe1xuICAgICAgYWNjb3VudE51bWJlcixcbiAgICAgIGJhbGFuY2U6IHR4bnNSZXN1bHQuQ3VycmVudEFjY291bnRMYXN0VHJhbnNhY3Rpb25zLkN1cnJlbnRBY2NvdW50SW5mby5BY2NvdW50QmFsYW5jZSxcbiAgICAgIHR4bnM6IFsuLi5hY2NvdW50Q29tcGxldGVkVHhucywgLi4uYWNjb3VudFBlbmRpbmdUeG5zXSxcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IGFjY291bnREYXRhID0ge1xuICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgYWNjb3VudHM6IGFjY291bnRzRGF0YSxcbiAgfTtcblxuICByZXR1cm4gYWNjb3VudERhdGE7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIG5hdmlnYXRlT3JFcnJvckxhYmVsKHBhZ2U6IFBhZ2UpIHtcbiAgdHJ5IHtcbiAgICBhd2FpdCB3YWl0Rm9yTmF2aWdhdGlvbihwYWdlKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGF3YWl0IHdhaXRVbnRpbEVsZW1lbnRGb3VuZChwYWdlLCAnI2dlbmVyYWwtZXJyb3InLCBmYWxzZSwgMTAwKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRQb3NzaWJsZUxvZ2luUmVzdWx0cygpOiBQb3NzaWJsZUxvZ2luUmVzdWx0cyB7XG4gIGNvbnN0IHVybHM6IFBvc3NpYmxlTG9naW5SZXN1bHRzID0ge307XG4gIHVybHNbTG9naW5SZXN1bHRzLlN1Y2Nlc3NdID0gW1xuICAgIGAke0JBU0VfVVJMfS9hcG9sbG8vcmV0YWlsLyMvTVlfQUNDT1VOVF9IT01FUEFHRWAsXG4gICAgYCR7QkFTRV9VUkx9L2Fwb2xsby9yZXRhaWwyLyMvTVlfQUNDT1VOVF9IT01FUEFHRWAsXG4gICAgYCR7QkFTRV9VUkx9L2Fwb2xsby9yZXRhaWwyL2AsXG4gICAgYCR7QkFTRV9VUkx9L2Fwb2xsby9yZXRhaWwzLyMvTVlfQUNDT1VOVF9IT01FUEFHRWAsXG4gICAgYCR7QkFTRV9VUkx9L2Fwb2xsby9yZXRhaWwzL2AsXG4gIF07XG4gIHVybHNbTG9naW5SZXN1bHRzLkludmFsaWRQYXNzd29yZF0gPSBbYCR7QkFTRV9VUkx9L2Fwb2xsby9jb3JlL3RlbXBsYXRlcy9sb2JieS9tYXN0ZXJQYWdlLmh0bWwjL0xPR0lOX1BBR0VgXTtcbiAgdXJsc1tMb2dpblJlc3VsdHMuQ2hhbmdlUGFzc3dvcmRdID0gW2Ake0JBU0VfVVJMfS9hcG9sbG8vY29yZS90ZW1wbGF0ZXMvbG9iYnkvbWFzdGVyUGFnZS5odG1sIy9QV0RfUkVORVdgXTtcbiAgcmV0dXJuIHVybHM7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUxvZ2luRmllbGRzKGNyZWRlbnRpYWxzOiBTY3JhcGVyU3BlY2lmaWNDcmVkZW50aWFscykge1xuICByZXR1cm4gW1xuICAgIHsgc2VsZWN0b3I6ICcjdHpJZCcsIHZhbHVlOiBjcmVkZW50aWFscy5pZCB9LFxuICAgIHsgc2VsZWN0b3I6ICcjdHpQYXNzd29yZCcsIHZhbHVlOiBjcmVkZW50aWFscy5wYXNzd29yZCB9LFxuICAgIHsgc2VsZWN0b3I6ICcjYWlkbnVtJywgdmFsdWU6IGNyZWRlbnRpYWxzLm51bSB9LFxuICBdO1xufVxuXG50eXBlIFNjcmFwZXJTcGVjaWZpY0NyZWRlbnRpYWxzID0geyBpZDogc3RyaW5nOyBwYXNzd29yZDogc3RyaW5nOyBudW06IHN0cmluZyB9O1xuXG5jbGFzcyBEaXNjb3VudFNjcmFwZXIgZXh0ZW5kcyBCYXNlU2NyYXBlcldpdGhCcm93c2VyPFNjcmFwZXJTcGVjaWZpY0NyZWRlbnRpYWxzPiB7XG4gIGdldExvZ2luT3B0aW9ucyhjcmVkZW50aWFsczogU2NyYXBlclNwZWNpZmljQ3JlZGVudGlhbHMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbG9naW5Vcmw6IGAke0JBU0VfVVJMfS9sb2dpbi8jL0xPR0lOX1BBR0VgLFxuICAgICAgY2hlY2tSZWFkaW5lc3M6IGFzeW5jICgpID0+IHdhaXRVbnRpbEVsZW1lbnRGb3VuZCh0aGlzLnBhZ2UsICcjdHpJZCcpLFxuICAgICAgZmllbGRzOiBjcmVhdGVMb2dpbkZpZWxkcyhjcmVkZW50aWFscyksXG4gICAgICBzdWJtaXRCdXR0b25TZWxlY3RvcjogJy5zZW5kQnRuJyxcbiAgICAgIHBvc3RBY3Rpb246IGFzeW5jICgpID0+IG5hdmlnYXRlT3JFcnJvckxhYmVsKHRoaXMucGFnZSksXG4gICAgICBwb3NzaWJsZVJlc3VsdHM6IGdldFBvc3NpYmxlTG9naW5SZXN1bHRzKCksXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGZldGNoRGF0YSgpIHtcbiAgICByZXR1cm4gZmV0Y2hBY2NvdW50RGF0YSh0aGlzLnBhZ2UsIHRoaXMub3B0aW9ucyk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRGlzY291bnRTY3JhcGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFBQyxxQkFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsTUFBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsV0FBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksYUFBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssY0FBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sdUJBQUEsR0FBQU4sT0FBQTtBQUNBLElBQUFPLE9BQUEsR0FBQVAsT0FBQTtBQUE2QyxTQUFBRCx1QkFBQVMsQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQUc3QyxNQUFNRyxRQUFRLEdBQUcsOEJBQThCO0FBQy9DLE1BQU1DLFdBQVcsR0FBRyxVQUFVO0FBb0M5QixTQUFTQyxtQkFBbUJBLENBQzFCQyxJQUEwQixFQUMxQkMsU0FBOEIsRUFDOUJDLE9BQXdCLEVBQ1Q7RUFDZixJQUFJLENBQUNGLElBQUksRUFBRTtJQUNULE9BQU8sRUFBRTtFQUNYO0VBQ0EsT0FBT0EsSUFBSSxDQUFDRyxHQUFHLENBQUNDLEdBQUcsSUFBSTtJQUNyQixNQUFNQyxNQUFtQixHQUFHO01BQzFCQyxJQUFJLEVBQUVDLCtCQUFnQixDQUFDQyxNQUFNO01BQzdCQyxVQUFVLEVBQUVMLEdBQUcsQ0FBQ00sZUFBZTtNQUMvQkMsSUFBSSxFQUFFLElBQUFDLGVBQU0sRUFBQ1IsR0FBRyxDQUFDUyxhQUFhLEVBQUVmLFdBQVcsQ0FBQyxDQUFDZ0IsV0FBVyxDQUFDLENBQUM7TUFDMURDLGFBQWEsRUFBRSxJQUFBSCxlQUFNLEVBQUNSLEdBQUcsQ0FBQ1ksU0FBUyxFQUFFbEIsV0FBVyxDQUFDLENBQUNnQixXQUFXLENBQUMsQ0FBQztNQUMvREcsY0FBYyxFQUFFYixHQUFHLENBQUNjLGVBQWU7TUFDbkNDLGdCQUFnQixFQUFFLEtBQUs7TUFDdkJDLGFBQWEsRUFBRWhCLEdBQUcsQ0FBQ2MsZUFBZTtNQUNsQ0csV0FBVyxFQUFFakIsR0FBRyxDQUFDa0IsNkJBQTZCO01BQzlDQyxNQUFNLEVBQUV0QjtJQUNWLENBQUM7SUFFRCxJQUFJQyxPQUFPLEVBQUVzQixxQkFBcUIsRUFBRTtNQUNsQ25CLE1BQU0sQ0FBQ29CLGNBQWMsR0FBRyxJQUFBQywrQkFBaUIsRUFBQ3RCLEdBQUcsQ0FBQztJQUNoRDtJQUVBLE9BQU9DLE1BQU07RUFDZixDQUFDLENBQUM7QUFDSjtBQUVBLGVBQWVzQixnQkFBZ0JBLENBQUNDLElBQVUsRUFBRTFCLE9BQXVCLEVBQWtDO0VBQ25HLE1BQU0yQixVQUFVLEdBQUcsR0FBR2hDLFFBQVEsbUJBQW1CO0VBRWpELE1BQU1pQyxjQUFjLEdBQUcsR0FBR0QsVUFBVSxtQkFBbUI7RUFDdkQsTUFBTUUsV0FBVyxHQUFHLE1BQU0sSUFBQUMseUJBQWtCLEVBQXFCSixJQUFJLEVBQUVFLGNBQWMsQ0FBQztFQUV0RixJQUFJLENBQUNDLFdBQVcsRUFBRTtJQUNoQixPQUFPO01BQ0xFLE9BQU8sRUFBRSxLQUFLO01BQ2RDLFNBQVMsRUFBRUMseUJBQWlCLENBQUNDLE9BQU87TUFDcENDLFlBQVksRUFBRTtJQUNoQixDQUFDO0VBQ0g7RUFFQSxNQUFNQyxrQkFBa0IsR0FBRyxJQUFBMUIsZUFBTSxFQUFDLENBQUMsQ0FBQzJCLFFBQVEsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUNDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDO0VBQ3RFLE1BQU1DLFNBQVMsR0FBR3ZDLE9BQU8sQ0FBQ3VDLFNBQVMsSUFBSUgsa0JBQWtCLENBQUNJLE1BQU0sQ0FBQyxDQUFDO0VBQ2xFLE1BQU1DLFdBQVcsR0FBRy9CLGVBQU0sQ0FBQ2dDLEdBQUcsQ0FBQ04sa0JBQWtCLEVBQUUsSUFBQTFCLGVBQU0sRUFBQzZCLFNBQVMsQ0FBQyxDQUFDO0VBRXJFLE1BQU1JLFlBQVksR0FBR0YsV0FBVyxDQUFDRyxNQUFNLENBQUNoRCxXQUFXLENBQUM7RUFFcEQsTUFBTWlELFFBQWtCLEdBQUdoQixXQUFXLENBQUNpQixnQkFBZ0IsQ0FBQ0MsWUFBWSxDQUFDOUMsR0FBRyxDQUFDK0MsR0FBRyxJQUFJQSxHQUFHLENBQUNDLGNBQWMsQ0FBQ0MsU0FBUyxDQUFDO0VBQzdHLE1BQU1DLFlBQW9GLEdBQUcsRUFBRTtFQUUvRixLQUFLLE1BQU1DLGFBQWEsSUFBSVAsUUFBUSxFQUFFO0lBQ3BDLE1BQU1RLE9BQU8sR0FBRyxHQUFHMUIsVUFBVSxxQkFBcUJ5QixhQUFhLG1IQUFtSFQsWUFBWSxFQUFFO0lBQ2hNLE1BQU1XLFVBQVUsR0FBRyxNQUFNLElBQUF4Qix5QkFBa0IsRUFBeUJKLElBQUksRUFBRTJCLE9BQU8sQ0FBQztJQUNsRixJQUFJLENBQUNDLFVBQVUsSUFBSUEsVUFBVSxDQUFDQyxLQUFLLElBQUksQ0FBQ0QsVUFBVSxDQUFDRSw4QkFBOEIsRUFBRTtNQUNqRixPQUFPO1FBQ0x6QixPQUFPLEVBQUUsS0FBSztRQUNkQyxTQUFTLEVBQUVDLHlCQUFpQixDQUFDQyxPQUFPO1FBQ3BDQyxZQUFZLEVBQUVtQixVQUFVLElBQUlBLFVBQVUsQ0FBQ0MsS0FBSyxHQUFHRCxVQUFVLENBQUNDLEtBQUssQ0FBQ0UsT0FBTyxHQUFHO01BQzVFLENBQUM7SUFDSDtJQUVBLE1BQU1DLG9CQUFvQixHQUFHN0QsbUJBQW1CLENBQzlDeUQsVUFBVSxDQUFDRSw4QkFBOEIsQ0FBQ0csY0FBYyxFQUN4REMsa0NBQW1CLENBQUNDLFNBQVMsRUFDN0I3RCxPQUNGLENBQUM7SUFDRCxNQUFNOEQsYUFBYSxHQUNqQlIsVUFBVSxDQUFDRSw4QkFBOEIsQ0FBQ08sdUJBQXVCLEVBQUVDLHNCQUFzQixJQUFJLEVBQUU7SUFDakcsTUFBTUMsa0JBQWtCLEdBQUdwRSxtQkFBbUIsQ0FBQ2lFLGFBQWEsRUFBRUYsa0NBQW1CLENBQUNNLE9BQU8sRUFBRWxFLE9BQU8sQ0FBQztJQUVuR21ELFlBQVksQ0FBQ2dCLElBQUksQ0FBQztNQUNoQmYsYUFBYTtNQUNiZ0IsT0FBTyxFQUFFZCxVQUFVLENBQUNFLDhCQUE4QixDQUFDYSxrQkFBa0IsQ0FBQ0MsY0FBYztNQUNwRnhFLElBQUksRUFBRSxDQUFDLEdBQUc0RCxvQkFBb0IsRUFBRSxHQUFHTyxrQkFBa0I7SUFDdkQsQ0FBQyxDQUFDO0VBQ0o7RUFFQSxNQUFNTSxXQUFXLEdBQUc7SUFDbEJ4QyxPQUFPLEVBQUUsSUFBSTtJQUNiYyxRQUFRLEVBQUVNO0VBQ1osQ0FBQztFQUVELE9BQU9vQixXQUFXO0FBQ3BCO0FBRUEsZUFBZUMsb0JBQW9CQSxDQUFDOUMsSUFBVSxFQUFFO0VBQzlDLElBQUk7SUFDRixNQUFNLElBQUErQyw2QkFBaUIsRUFBQy9DLElBQUksQ0FBQztFQUMvQixDQUFDLENBQUMsT0FBT2xDLENBQUMsRUFBRTtJQUNWLE1BQU0sSUFBQWtGLDJDQUFxQixFQUFDaEQsSUFBSSxFQUFFLGdCQUFnQixFQUFFLEtBQUssRUFBRSxHQUFHLENBQUM7RUFDakU7QUFDRjtBQUVBLFNBQVNpRCx1QkFBdUJBLENBQUEsRUFBeUI7RUFDdkQsTUFBTUMsSUFBMEIsR0FBRyxDQUFDLENBQUM7RUFDckNBLElBQUksQ0FBQ0Msb0NBQVksQ0FBQ0MsT0FBTyxDQUFDLEdBQUcsQ0FDM0IsR0FBR25GLFFBQVEsc0NBQXNDLEVBQ2pELEdBQUdBLFFBQVEsdUNBQXVDLEVBQ2xELEdBQUdBLFFBQVEsa0JBQWtCLEVBQzdCLEdBQUdBLFFBQVEsdUNBQXVDLEVBQ2xELEdBQUdBLFFBQVEsa0JBQWtCLENBQzlCO0VBQ0RpRixJQUFJLENBQUNDLG9DQUFZLENBQUNFLGVBQWUsQ0FBQyxHQUFHLENBQUMsR0FBR3BGLFFBQVEsMERBQTBELENBQUM7RUFDNUdpRixJQUFJLENBQUNDLG9DQUFZLENBQUNHLGNBQWMsQ0FBQyxHQUFHLENBQUMsR0FBR3JGLFFBQVEseURBQXlELENBQUM7RUFDMUcsT0FBT2lGLElBQUk7QUFDYjtBQUVBLFNBQVNLLGlCQUFpQkEsQ0FBQ0MsV0FBdUMsRUFBRTtFQUNsRSxPQUFPLENBQ0w7SUFBRUMsUUFBUSxFQUFFLE9BQU87SUFBRUMsS0FBSyxFQUFFRixXQUFXLENBQUNHO0VBQUcsQ0FBQyxFQUM1QztJQUFFRixRQUFRLEVBQUUsYUFBYTtJQUFFQyxLQUFLLEVBQUVGLFdBQVcsQ0FBQ0k7RUFBUyxDQUFDLEVBQ3hEO0lBQUVILFFBQVEsRUFBRSxTQUFTO0lBQUVDLEtBQUssRUFBRUYsV0FBVyxDQUFDSztFQUFJLENBQUMsQ0FDaEQ7QUFDSDtBQUlBLE1BQU1DLGVBQWUsU0FBU0MsOENBQXNCLENBQTZCO0VBQy9FQyxlQUFlQSxDQUFDUixXQUF1QyxFQUFFO0lBQ3ZELE9BQU87TUFDTFMsUUFBUSxFQUFFLEdBQUdoRyxRQUFRLHFCQUFxQjtNQUMxQ2lHLGNBQWMsRUFBRSxNQUFBQSxDQUFBLEtBQVksSUFBQWxCLDJDQUFxQixFQUFDLElBQUksQ0FBQ2hELElBQUksRUFBRSxPQUFPLENBQUM7TUFDckVtRSxNQUFNLEVBQUVaLGlCQUFpQixDQUFDQyxXQUFXLENBQUM7TUFDdENZLG9CQUFvQixFQUFFLFVBQVU7TUFDaENDLFVBQVUsRUFBRSxNQUFBQSxDQUFBLEtBQVl2QixvQkFBb0IsQ0FBQyxJQUFJLENBQUM5QyxJQUFJLENBQUM7TUFDdkRzRSxlQUFlLEVBQUVyQix1QkFBdUIsQ0FBQztJQUMzQyxDQUFDO0VBQ0g7RUFFQSxNQUFNc0IsU0FBU0EsQ0FBQSxFQUFHO0lBQ2hCLE9BQU94RSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUNDLElBQUksRUFBRSxJQUFJLENBQUMxQixPQUFPLENBQUM7RUFDbEQ7QUFDRjtBQUFDLElBQUFrRyxRQUFBLEdBQUFDLE9BQUEsQ0FBQXpHLE9BQUEsR0FFYzhGLGVBQWUiLCJpZ25vcmVMaXN0IjpbXX0=