zater-docx-pdf2
Version:
ZAter doc2pdf
221 lines (189 loc) • 26.2 kB
JavaScript
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
var _ErrorDocxPdf = require('../lib/ErrorDocxPdf');
var _ErrorDocxPdf2 = _interopRequireDefault(_ErrorDocxPdf);
var _path = require('path');
var _path2 = _interopRequireDefault(_path);
var _date = require('../lib/date');
var _date2 = _interopRequireDefault(_date);
var _base64IMGtoBuffer = require('../lib/base64IMGtoBuffer');
var _base64IMGtoBuffer2 = _interopRequireDefault(_base64IMGtoBuffer);
var _ContractDecorator = require('../decorators/ContractDecorator');
var _ContractDecorator2 = _interopRequireDefault(_ContractDecorator);
var _nodeFetch = require('node-fetch');
var _nodeFetch2 = _interopRequireDefault(_nodeFetch);
var _moment = require('moment');
var _moment2 = _interopRequireDefault(_moment);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }
const numeroPorExtenso = require('numero-por-extenso');
const CPF = require('cpf');
class Contract extends _ContractDecorator2.default {
constructor(Docx, DigitalData, S3Storage, PdfGenerator) {
super();
this.Storage = S3Storage;
this.Docx = Docx;
this.PdfGenerator = PdfGenerator;
this.setDigitalData(DigitalData);
}
setConfig(config) {
this.config = config;
this.Storage = this.Storage(config);
}
makeCPF(data) {
return _asyncToGenerator(function* () {
const cotacao = yield (0, _nodeFetch2.default)('https://www.btcbuyshop.com/api/crawlers/icoinomia').then(function (res) {
return res.json();
}).then(function (json) {
return json.response.clean.replace(/[\D]+/g, '');
}).then(function (value) {
return parseInt(value);
}).then(function (value) {
return (value / 100).toFixed(2);
});
const val = numeroPorExtenso.porExtenso(parseFloat(cotacao), numeroPorExtenso.estilo.monetario);
const amountMoney = `${cotacao} (${val})`;
// const {year, month, day} = dateFormat.datePTBR();
const contract = _extends({
investmentId: data.id,
penaltyPorcent: data.penaltyPorcent || 0,
clientName: data.clientName || 'Daniel Silva Miranda',
managerName: data.managerName || 'Daniel Silva Miranda',
penaltyAdv: data.penaltyAdv || 0,
contractNumber: data.contractNumber || 'Exemplo',
contractEnd: data.contractEnd || '00/00/0000',
contractTaxe: data.contractTaxe || 0,
amountCrypt: data.amountCrypt || 0,
contractPorcent: data.contractPorcent || 0,
bankName: data.bank.name || 'BTC Banco',
bankTitular: data.bank.userName || 'BTC Banco',
bankAgency: data.bank.agency || '0000',
bankAccount: data.bank.account || '0000-00',
bankCode: data.bank.code || '0000-00',
// eslint-disable-next-line
image: (0, _base64IMGtoBuffer2.default)(data.image),
amountMoney
}, (0, _date2.default)(), {
date: (0, _moment2.default)(new Date()).format("DD/MM/YYYY"),
cnpjResume: ' ',
clientResume: `${data.clientName}, natural de ${data.clientNationality}, ${data.clientCivilState},
${data.clientOccupation},
portador do RG nº ${data.clientRG},inscrito no CPF sob o nº ${CPF.format(data.clientCPF)}, residente e
domiciliado a
${data.clientStreet}
${data.clientComplement || ' '}, CEP ${data.clientCEP}, ${data.clientCity} ${data.clientState}` || ' '
});
return contract;
})();
}
makeCNPJ(data) {
return _extends({}, this.makeCPF(data), {
cnpjResume: `, pessoa jurídica de direito privado, inscrita no CNPJ nº ${data.clientCNPJ}, com sede na
${data.companyStreet}
${data.companyComplement}, CEP ${data.companyCEP}, ${data.companyCity} ${data.companyState}`
});
}
make(userId, dataContract, config) {
var _this = this;
return _asyncToGenerator(function* () {
try {
yield _this.setConfig(config.aws);
yield _this.setType(config.contract);
dataContract.contractNumber = yield _this.generatorLast();
if (_this.config === undefined) throw new _ErrorDocxPdf2.default('Configuração não inicializada');
let data;
//let file;
if (dataContract.clientCNPJ !== undefined) {
data = yield _this.makeCNPJ(dataContract);
//file = path.resolve(__dirname, './../../assets/docEx.docx');
} else {
data = yield _this.makeCPF(dataContract);
//file = path.resolve(__dirname, './../../assets/docEx.docx');
}
yield _this.PdfGenerator.generate(data, userId);
return Promise.resolve(_this.Storage.setBucket(config.bucket)).then(function () {
return _this.Storage.setDestinationDir('contracts');
})
//.then(() => this.Docx.makeContract(file, data))
//.then(() => this.PdfGenerator.generate(data))
// .then(res => Buffer.from(res, 'base64'))
// .then(res => this.Storage.setFileBuffer({ data: res, type: 'pdf' }))
.then(function () {
return _this.Storage.setFile('./' + userId + ".pdf");
}).then(function () {
return _this.Storage.upload();
}).then(function (res) {
return JSON.stringify(res);
}).then(function (res) {
return JSON.parse(res);
}).then(function (res) {
return Promise.resolve(data).then(function (result) {
return _extends({}, result, {
contractUrl: res.Location,
status: 'Ativo'
});
});
}).then(function (res) {
return _this.save(userId, res);
}).catch(function (e) {
throw e;
});
} catch (e) {
return Promise.reject(e);
}
})();
}
insertSignature(userId, dataContract, config) {
var _this2 = this;
return _asyncToGenerator(function* () {
try {
yield _this2.setConfig(config.aws);
yield _this2.setType(config.contract);
if (_this2.config === undefined) throw new _ErrorDocxPdf2.default('Configuração não inicializada');
//let file;
// if (dataContract.clientCNPJ !== undefined) {
// file = path.resolve(__dirname, './../../assets/docEx.docx');
// } else {
// file = path.resolve(__dirname, './../../assets/docEx.docx');
// }
const data = _this2.makeDocument(dataContract);
yield _this2.PdfGenerator.generate(data, userId);
return Promise.resolve(_this2.Storage.setBucket(config.bucket)).then(function () {
return _this2.Storage.setDestinationDir('contracts');
})
//.then(() => this.Docx.makeContract(file, dataContract.data))
//.then(res => Buffer.from(res, 'base64'))
//.then(res => this.Storage.setFileBuffer({ data: res, type: 'docx' }))
.then(function () {
return _this2.Storage.setFile('./' + userId + ".pdf");
}).then(function () {
return _this2.Storage.upload();
}).then(function (res) {
dataContract.data.contractUrl = res.Location;
dataContract.data.status = 'Assinado';
return dataContract;
}).then(function (res) {
return _this2.update(res);
}).catch(function (e) {
throw e;
});
} catch (e) {
return Promise.reject(e);
}
})();
}
makeDocument(dataContract) {
var _this3 = this;
return _asyncToGenerator(function* () {
if (dataContract.clientCNPJ !== undefined) {
return yield _this3.makeCNPJ(dataContract);
//file = path.resolve(__dirname, './../../assets/docEx.docx');
} else {
return yield _this3.makeCPF(dataContract);
//file = path.resolve(__dirname, './../../assets/docEx.docx');
}
})();
}
}
module.exports = (Docx, DigitalData, Storage, PdfGenerator) => new Contract(Docx, DigitalData, Storage, PdfGenerator);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kb21haW4vQ29udHJhY3QuanMiXSwibmFtZXMiOlsibnVtZXJvUG9yRXh0ZW5zbyIsInJlcXVpcmUiLCJDUEYiLCJDb250cmFjdCIsIkNvbnRyYWN0RGVjb3JhdG9yIiwiY29uc3RydWN0b3IiLCJEb2N4IiwiRGlnaXRhbERhdGEiLCJTM1N0b3JhZ2UiLCJQZGZHZW5lcmF0b3IiLCJTdG9yYWdlIiwic2V0RGlnaXRhbERhdGEiLCJzZXRDb25maWciLCJjb25maWciLCJtYWtlQ1BGIiwiZGF0YSIsImNvdGFjYW8iLCJ0aGVuIiwicmVzIiwianNvbiIsInJlc3BvbnNlIiwiY2xlYW4iLCJyZXBsYWNlIiwicGFyc2VJbnQiLCJ2YWx1ZSIsInRvRml4ZWQiLCJ2YWwiLCJwb3JFeHRlbnNvIiwicGFyc2VGbG9hdCIsImVzdGlsbyIsIm1vbmV0YXJpbyIsImFtb3VudE1vbmV5IiwiY29udHJhY3QiLCJpbnZlc3RtZW50SWQiLCJpZCIsInBlbmFsdHlQb3JjZW50IiwiY2xpZW50TmFtZSIsIm1hbmFnZXJOYW1lIiwicGVuYWx0eUFkdiIsImNvbnRyYWN0TnVtYmVyIiwiY29udHJhY3RFbmQiLCJjb250cmFjdFRheGUiLCJhbW91bnRDcnlwdCIsImNvbnRyYWN0UG9yY2VudCIsImJhbmtOYW1lIiwiYmFuayIsIm5hbWUiLCJiYW5rVGl0dWxhciIsInVzZXJOYW1lIiwiYmFua0FnZW5jeSIsImFnZW5jeSIsImJhbmtBY2NvdW50IiwiYWNjb3VudCIsImJhbmtDb2RlIiwiY29kZSIsImltYWdlIiwiZGF0ZSIsIkRhdGUiLCJmb3JtYXQiLCJjbnBqUmVzdW1lIiwiY2xpZW50UmVzdW1lIiwiY2xpZW50TmF0aW9uYWxpdHkiLCJjbGllbnRDaXZpbFN0YXRlIiwiY2xpZW50T2NjdXBhdGlvbiIsImNsaWVudFJHIiwiY2xpZW50Q1BGIiwiY2xpZW50U3RyZWV0IiwiY2xpZW50Q29tcGxlbWVudCIsImNsaWVudENFUCIsImNsaWVudENpdHkiLCJjbGllbnRTdGF0ZSIsIm1ha2VDTlBKIiwiY2xpZW50Q05QSiIsImNvbXBhbnlTdHJlZXQiLCJjb21wYW55Q29tcGxlbWVudCIsImNvbXBhbnlDRVAiLCJjb21wYW55Q2l0eSIsImNvbXBhbnlTdGF0ZSIsIm1ha2UiLCJ1c2VySWQiLCJkYXRhQ29udHJhY3QiLCJhd3MiLCJzZXRUeXBlIiwiZ2VuZXJhdG9yTGFzdCIsInVuZGVmaW5lZCIsIkVycm9yRG9jeFBkZiIsImdlbmVyYXRlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJzZXRCdWNrZXQiLCJidWNrZXQiLCJzZXREZXN0aW5hdGlvbkRpciIsInNldEZpbGUiLCJ1cGxvYWQiLCJKU09OIiwic3RyaW5naWZ5IiwicGFyc2UiLCJyZXN1bHQiLCJjb250cmFjdFVybCIsIkxvY2F0aW9uIiwic3RhdHVzIiwic2F2ZSIsImNhdGNoIiwiZSIsInJlamVjdCIsImluc2VydFNpZ25hdHVyZSIsIm1ha2VEb2N1bWVudCIsInVwZGF0ZSIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiI7Ozs7QUFBQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7Ozs7Ozs7QUFFQSxNQUFNQSxtQkFBbUJDLFFBQVEsb0JBQVIsQ0FBekI7QUFDQSxNQUFNQyxNQUFNRCxRQUFRLEtBQVIsQ0FBWjs7QUFFQSxNQUFNRSxRQUFOLFNBQXVCQywyQkFBdkIsQ0FBeUM7QUFDdkNDLGNBQVlDLElBQVosRUFBa0JDLFdBQWxCLEVBQStCQyxTQUEvQixFQUEwQ0MsWUFBMUMsRUFBd0Q7QUFDdEQ7QUFDQSxTQUFLQyxPQUFMLEdBQWVGLFNBQWY7QUFDQSxTQUFLRixJQUFMLEdBQVlBLElBQVo7QUFDQSxTQUFLRyxZQUFMLEdBQW9CQSxZQUFwQjtBQUNBLFNBQUtFLGNBQUwsQ0FBb0JKLFdBQXBCO0FBQ0Q7O0FBRURLLFlBQVVDLE1BQVYsRUFBa0I7QUFDaEIsU0FBS0EsTUFBTCxHQUFjQSxNQUFkO0FBQ0EsU0FBS0gsT0FBTCxHQUFlLEtBQUtBLE9B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QWhDLEVBQTJDO0FBQ3pDLGVBQU8sTUFBTSxPQUFLYixRQUFMLENBQWNTLFlBQWQsQ0FBYjtBQUNBO0FBQ0QsT0FIRCxNQUdPO0FBQ0wsZUFBTyxNQUFNLE9BQUtsRSxPQUFMLENBQWFrRSxZQUFiLENBQWI7QUFDQTtBQUNEO0FBUDZCO0FBUS9CO0FBbkpzQzs7QUFzSnpDNEIsT0FBT0MsT0FBUCxHQUFpQixDQUFDdkcsSUFBRCxFQUFPQyxXQUFQLEVBQW9CRyxPQUFwQixFQUE2QkQsWUFBN0IsS0FBOEMsSUFBSU4sUUFBSixDQUFhRyxJQUFiLEVBQW1CQyxXQUFuQixFQUFnQ0csT0FBaEMsRUFBeUNELFlBQXpDLENBQS9EIiwiZmlsZSI6IkNvbnRyYWN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEVycm9yRG9jeFBkZiBmcm9tICcuLi9saWIvRXJyb3JEb2N4UGRmJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IGRhdGVGb3JtYXQgZnJvbSAnLi4vbGliL2RhdGUnO1xuaW1wb3J0IGJhc2U2NElNR0J1ZmZlciBmcm9tICcuLi9saWIvYmFzZTY0SU1HdG9CdWZmZXInO1xuaW1wb3J0IENvbnRyYWN0RGVjb3JhdG9yIGZyb20gJy4uL2RlY29yYXRvcnMvQ29udHJhY3REZWNvcmF0b3InO1xuaW1wb3J0IGZldGNoIGZyb20gJ25vZGUtZmV0Y2gnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuXG5jb25zdCBudW1lcm9Qb3JFeHRlbnNvID0gcmVxdWlyZSgnbnVtZXJvLXBvci1leHRlbnNvJyk7XG5jb25zdCBDUEYgPSByZXF1aXJlKCdjcGYnKTtcblxuY2xhc3MgQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdERlY29yYXRvciB7XG4gIGNvbnN0cnVjdG9yKERvY3gsIERpZ2l0YWxEYXRhLCBTM1N0b3JhZ2UsIFBkZkdlbmVyYXRvcikge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5TdG9yYWdlID0gUzNTdG9yYWdlO1xuICAgIHRoaXMuRG9jeCA9IERvY3g7XG4gICAgdGhpcy5QZGZHZW5lcmF0b3IgPSBQZGZHZW5lcmF0b3I7XG4gICAgdGhpcy5zZXREaWdpdGFsRGF0YShEaWdpdGFsRGF0YSk7XG4gIH1cblxuICBzZXRDb25maWcoY29uZmlnKSB7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgdGhpcy5TdG9yYWdlID0gdGhpcy5TdG9yYWdlKGNvbmZpZyk7XG4gIH1cblxuXG4gIGFzeW5jIG1ha2VDUEYoZGF0YSkge1xuICAgIGNvbnN0IGNvdGFjYW8gPSBhd2FpdCBmZXRjaCgnaHR0cHM6Ly93d3cuYnRjYnV5c2hvcC5jb20vYXBpL2NyYXdsZXJzL2ljb2lub21pYScpXG4gICAgICAudGhlbihyZXMgPT4gcmVzLmpzb24oKSlcbiAgICAgIC50aGVuKGpzb24gPT4ganNvbi5yZXNwb25zZS5jbGVhbi5yZXBsYWNlKC9bXFxEXSsvZywgJycpKVxuICAgICAgLnRoZW4odmFsdWUgPT4gcGFyc2VJbnQodmFsdWUpKVxuICAgICAgLnRoZW4odmFsdWUgPT4gKHZhbHVlIC8gMTAwKS50b0ZpeGVkKDIpKTtcblxuICAgIGNvbnN0IHZhbCA9IG51bWVyb1BvckV4dGVuc28ucG9yRXh0ZW5zbyhwYXJzZUZsb2F0KGNvdGFjYW8pLCBudW1lcm9Qb3JFeHRlbnNvLmVzdGlsby5tb25ldGFyaW8pO1xuICAgIGNvbnN0IGFtb3VudE1vbmV5ID0gYCR7Y290YWNhb30gKCR7dmFsfSlgO1xuICAgIC8vIGNvbnN0IHt5ZWFyLCBtb250aCwgZGF5fSA9IGRhdGVGb3JtYXQuZGF0ZVBUQlIoKTtcbiAgICBjb25zdCBjb250cmFjdCA9IHtcbiAgICAgIGludmVzdG1lbnRJZDogZGF0YS5pZCxcbiAgICAgIHBlbmFsdHlQb3JjZW50OiBkYXRhLnBlbmFsdHlQb3JjZW50IHx8IDAsXG4gICAgICBjbGllbnROYW1lOiBkYXRhLmNsaWVudE5hbWUgfHwgJ0RhbmllbCBTaWx2YSBNaXJhbmRhJyxcbiAgICAgIG1hbmFnZXJOYW1lOiBkYXRhLm1hbmFnZXJOYW1lIHx8ICdEYW5pZWwgU2lsdmEgTWlyYW5kYScsXG4gICAgICBwZW5hbHR5QWR2OiBkYXRhLnBlbmFsdHlBZHYgfHwgMCxcbiAgICAgIGNvbnRyYWN0TnVtYmVyOiBkYXRhLmNvbnRyYWN0TnVtYmVyIHx8ICdFeGVtcGxvJyxcbiAgICAgIGNvbnRyYWN0RW5kOiBkYXRhLmNvbnRyYWN0RW5kIHx8ICcwMC8wMC8wMDAwJyxcbiAgICAgIGNvbnRyYWN0VGF4ZTogZGF0YS5jb250cmFjdFRheGUgfHwgMCxcbiAgICAgIGFtb3VudENyeXB0OiBkYXRhLmFtb3VudENyeXB0IHx8IDAsXG4gICAgICBjb250cmFjdFBvcmNlbnQ6IGRhdGEuY29udHJhY3RQb3JjZW50IHx8IDAsXG4gICAgICBiYW5rTmFtZTogZGF0YS5iYW5rLm5hbWUgfHwgJ0JUQyBCYW5jbycsXG4gICAgICBiYW5rVGl0dWxhcjogZGF0YS5iYW5rLnVzZXJOYW1lIHx8ICdCVEMgQmFuY28nLFxuICAgICAgYmFua0FnZW5jeTogZGF0YS5iYW5rLmFnZW5jeSB8fCAnMDAwMCcsXG4gICAgICBiYW5rQWNjb3VudDogZGF0YS5iYW5rLmFjY291bnQgfHwgJzAwMDAtMDAnLFxuICAgICAgYmFua0NvZGU6IGRhdGEuYmFuay5jb2RlIHx8ICcwMDAwLTAwJyxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgaW1hZ2U6IGJhc2U2NElNR0J1ZmZlcihkYXRhLmltYWdlKSxcbiAgICAgIGFtb3VudE1vbmV5LFxuICAgICAgLi4uZGF0ZUZvcm1hdCgpLFxuICAgICAgZGF0ZTogbW9tZW50KG5ldyBEYXRlKCkpLmZvcm1hdChcIkREL01NL1lZWVlcIiksXG4gICAgICBjbnBqUmVzdW1lOiAnICcsXG4gICAgICBjbGllbnRSZXN1bWU6IGAke2RhdGEuY2xpZW50TmFtZX0sIG5hdHVyYWwgZGUgJHtkYXRhLmNsaWVudE5hdGlvbmFsaXR5fSwgJHtkYXRhLmNsaWVudENpdmlsU3RhdGV9LCBcbiAgICAgICR7ZGF0YS5jbGllbnRPY2N1cGF0aW9ufSxcbiAgICAgIHBvcnRhZG9yIGRvIFJHIG7CuiAke2RhdGEuY2xpZW50Ukd9LGluc2NyaXRvIG5vIENQRiBzb2IgbyBuwrogICR7Q1BGLmZvcm1hdChkYXRhLmNsaWVudENQRil9LCByZXNpZGVudGUgZSBcbiAgICAgIGRvbWljaWxpYWRvIGFcbiAgICAgICR7ZGF0YS5jbGllbnRTdHJlZXR9XG4gICAgICAke2RhdGEuY2xpZW50Q29tcGxlbWVudCB8fCAnICd9LCBDRVAgJHtkYXRhLmNsaWVudENFUH0sICR7ZGF0YS5jbGllbnRDaXR5fSAke2RhdGEuY2xpZW50U3RhdGV9YCB8fCAnICcsXG4gICAgfTtcbiAgICByZXR1cm4gY29udHJhY3Q7XG4gIH1cblxuICBtYWtlQ05QSihkYXRhKSB7XG4gICAgcmV0dXJuICh7XG4gICAgICAuLi50aGlzLm1ha2VDUEYoZGF0YSksXG4gICAgICBjbnBqUmVzdW1lOiBgLCBwZXNzb2EganVyw61kaWNhIGRlIGRpcmVpdG8gcHJpdmFkbywgaW5zY3JpdGEgbm8gQ05QSiBuwrogJHtkYXRhLmNsaWVudENOUEp9LCBjb20gc2VkZSBuYVxuICAgICAgJHtkYXRhLmNvbXBhbnlTdHJlZXR9XG4gICAgICAke2RhdGEuY29tcGFueUNvbXBsZW1lbnR9LCBDRVAgJHtkYXRhLmNvbXBhbnlDRVB9LCAke2RhdGEuY29tcGFueUNpdHl9ICR7ZGF0YS5jb21wYW55U3RhdGV9YCxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIG1ha2UodXNlcklkLCBkYXRhQ29udHJhY3QsIGNvbmZpZykge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnNldENvbmZpZyhjb25maWcuYXdzKTtcbiAgICAgIGF3YWl0IHRoaXMuc2V0VHlwZShjb25maWcuY29udHJhY3QpO1xuICAgICAgZGF0YUNvbnRyYWN0LmNvbnRyYWN0TnVtYmVyID0gYXdhaXQgdGhpcy5nZW5lcmF0b3JMYXN0KCk7XG4gICAgICBpZiAodGhpcy5jb25maWcgPT09IHVuZGVmaW5lZCkgdGhyb3cgbmV3IEVycm9yRG9jeFBkZignQ29uZmlndXJhw6fDo28gbsOjbyBpbmljaWFsaXphZGEnKTtcbiAgICAgIGxldCBkYXRhO1xuICAgICAgLy9sZXQgZmlsZTtcblxuICAgICAgaWYgKGRhdGFDb250cmFjdC5jbGllbnRDTlBKICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZGF0YSA9IGF3YWl0IHRoaXMubWFrZUNOUEooZGF0YUNvbnRyYWN0KTtcbiAgICAgICAgLy9maWxlID0gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4vLi4vLi4vYXNzZXRzL2RvY0V4LmRvY3gnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRhdGEgPSBhd2FpdCB0aGlzLm1ha2VDUEYoZGF0YUNvbnRyYWN0KTtcbiAgICAgICAgLy9maWxlID0gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4vLi4vLi4vYXNzZXRzL2RvY0V4LmRvY3gnKTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5QZGZHZW5lcmF0b3IuZ2VuZXJhdGUoZGF0YSwgdXNlcklkKTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5TdG9yYWdlLnNldEJ1Y2tldChjb25maWcuYnVja2V0KSlcbiAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5TdG9yYWdlLnNldERlc3RpbmF0aW9uRGlyKCdjb250cmFjdHMnKSlcbiAgICAgICAgLy8udGhlbigoKSA9PiB0aGlzLkRvY3gubWFrZUNvbnRyYWN0KGZpbGUsIGRhdGEpKVxuICAgICAgICAvLy50aGVuKCgpID0+IHRoaXMuUGRmR2VuZXJhdG9yLmdlbmVyYXRlKGRhdGEpKVxuICAgICAgICAvLyAudGhlbihyZXMgPT4gQnVmZmVyLmZyb20ocmVzLCAnYmFzZTY0JykpXG4gICAgICAgIC8vIC50aGVuKHJlcyA9PiB0aGlzLlN0b3JhZ2Uuc2V0RmlsZUJ1ZmZlcih7IGRhdGE6IHJlcywgdHlwZTogJ3BkZicgfSkpXG4gICAgICAgIC50aGVuKCgpID0+IHRoaXMuU3RvcmFnZS5zZXRGaWxlKCcuLycgKyB1c2VySWQgKyBcIi5wZGZcIikpXG4gICAgICAgIC50aGVuKCgpID0+IHRoaXMuU3RvcmFnZS51cGxvYWQoKSlcbiAgICAgICAgLnRoZW4ocmVzID0+IEpTT04uc3RyaW5naWZ5KHJlcykpXG4gICAgICAgIC50aGVuKHJlcyA9PiBKU09OLnBhcnNlKHJlcykpXG4gICAgICAgIC50aGVuKHJlcyA9PiBQcm9taXNlLnJlc29sdmUoZGF0YSlcbiAgICAgICAgICAudGhlbihyZXN1bHQgPT4gKHtcbiAgICAgICAgICAgIC4uLnJlc3VsdCxcbiAgICAgICAgICAgIGNvbnRyYWN0VXJsOiByZXMuTG9jYXRpb24sXG4gICAgICAgICAgICBzdGF0dXM6ICdBdGl2bydcbiAgICAgICAgICB9KSkpXG4gICAgICAgIC50aGVuKHJlcyA9PiB0aGlzLnNhdmUodXNlcklkLCByZXMpKVxuICAgICAgICAuY2F0Y2goKGUpID0+IHsgdGhyb3cgZTsgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGUpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGluc2VydFNpZ25hdHVyZSh1c2VySWQsIGRhdGFDb250cmFjdCwgY29uZmlnKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuc2V0Q29uZmlnKGNvbmZpZy5hd3MpO1xuICAgICAgYXdhaXQgdGhpcy5zZXRUeXBlKGNvbmZpZy5jb250cmFjdCk7XG4gICAgICBpZiAodGhpcy5jb25maWcgPT09IHVuZGVmaW5lZCkgdGhyb3cgbmV3IEVycm9yRG9jeFBkZignQ29uZmlndXJhw6fDo28gbsOjbyBpbmljaWFsaXphZGEnKTtcbiAgICAgIC8vbGV0IGZpbGU7XG4gICAgICAvLyBpZiAoZGF0YUNvbnRyYWN0LmNsaWVudENOUEogIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gICBmaWxlID0gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4vLi4vLi4vYXNzZXRzL2RvY0V4LmRvY3gnKTtcbiAgICAgIC8vIH0gZWxzZSB7XG4gICAgICAvLyAgIGZpbGUgPSBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnLi8uLi8uLi9hc3NldHMvZG9jRXguZG9jeCcpO1xuICAgICAgLy8gfVxuICAgICAgY29uc3QgZGF0YSA9IHRoaXMubWFrZURvY3VtZW50KGRhdGFDb250cmFjdCk7XG4gICAgICBhd2FpdCB0aGlzLlBkZkdlbmVyYXRvci5nZW5lcmF0ZShkYXRhLCB1c2VySWQpO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLlN0b3JhZ2Uuc2V0QnVja2V0KGNvbmZpZy5idWNrZXQpKVxuICAgICAgICAudGhlbigoKSA9PiB0aGlzLlN0b3JhZ2Uuc2V0RGVzdGluYXRpb25EaXIoJ2NvbnRyYWN0cycpKVxuICAgICAgICAvLy50aGVuKCgpID0+IHRoaXMuRG9jeC5tYWtlQ29udHJhY3QoZmlsZSwgZGF0YUNvbnRyYWN0LmRhdGEpKVxuICAgICAgICAvLy50aGVuKHJlcyA9PiBCdWZmZXIuZnJvbShyZXMsICdiYXNlNjQnKSlcbiAgICAgICAgLy8udGhlbihyZXMgPT4gdGhpcy5TdG9yYWdlLnNldEZpbGVCdWZmZXIoeyBkYXRhOiByZXMsIHR5cGU6ICdkb2N4JyB9KSlcbiAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5TdG9yYWdlLnNldEZpbGUoJy4vJyArIHVzZXJJZCArIFwiLnBkZlwiKSlcbiAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5TdG9yYWdlLnVwbG9hZCgpKVxuICAgICAgICAudGhlbigocmVzKSA9PiB7XG4gICAgICAgICAgZGF0YUNvbnRyYWN0LmRhdGEuY29udHJhY3RVcmwgPSByZXMuTG9jYXRpb247XG4gICAgICAgICAgZGF0YUNvbnRyYWN0LmRhdGEuc3RhdHVzID0gJ0Fzc2luYWRvJztcbiAgICAgICAgICByZXR1cm4gZGF0YUNvbnRyYWN0O1xuICAgICAgICB9KVxuICAgICAgICAudGhlbihyZXMgPT4gdGhpcy51cGRhdGUocmVzKSlcbiAgICAgICAgLmNhdGNoKChlKSA9PiB7IHRocm93IGU7IH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBtYWtlRG9jdW1lbnQoZGF0YUNvbnRyYWN0KXtcbiAgICBpZiAoZGF0YUNvbnRyYWN0LmNsaWVudENOUEogIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMubWFrZUNOUEooZGF0YUNvbnRyYWN0KTtcbiAgICAgIC8vZmlsZSA9IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuLy4uLy4uL2Fzc2V0cy9kb2NFeC5kb2N4Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLm1ha2VDUEYoZGF0YUNvbnRyYWN0KTtcbiAgICAgIC8vZmlsZSA9IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuLy4uLy4uL2Fzc2V0cy9kb2NFeC5kb2N4Jyk7XG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gKERvY3gsIERpZ2l0YWxEYXRhLCBTdG9yYWdlLCBQZGZHZW5lcmF0b3IpID0+IG5ldyBDb250cmFjdChEb2N4LCBEaWdpdGFsRGF0YSwgU3RvcmFnZSwgUGRmR2VuZXJhdG9yKTtcbiJdfQ==
;