zater-docx-pdf2
Version:
ZAter doc2pdf
205 lines (175 loc) • 25 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 = _path2.default.resolve(__dirname, './../../assets/docEx.docx');
} else {
file = _path2.default.resolve(__dirname, './../../assets/docEx.docx');
}
return Promise.resolve(_this2.Storage.setBucket(config.bucket)).then(function () {
return _this2.Storage.setDestinationDir('contracts');
}).then(function () {
return _this2.Docx.makeContract(file, dataContract.data);
}).then(function (res) {
return Buffer.from(res, 'base64');
}).then(function (res) {
return _this2.Storage.setFileBuffer({ data: res, type: 'docx' });
}).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);
}
})();
}
}
module.exports = (Docx, DigitalData, Storage, PdfGenerator) => new Contract(Docx, DigitalData, Storage, PdfGenerator);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kb21haW4vQ29udHJhY3QuanMiXSwibmFtZXMiOlsibnVtZXJvUG9yRXh0ZW5zbyIsInJlcXVpcmUiLCJDUEYiLCJDb250cmFjdCIsIkNvbnRyYWN0RGVjb3JhdG9yIiwiY29uc3RydWN0b3IiLCJEb2N4IiwiRGlnaXRhbERhdGEiLCJTM1N0b3JhZ2UiLCJQZGZHZW5lcmF0b3IiLCJTdG9yYWdlIiwic2V0RGlnaXRhbERhdGEiLCJzZXRDb25maWciLCJjb25maWciLCJtYWtlQ1BGIiwiZGF0YSIsImNvdGFjYW8iLCJ0aGVuIiwicmVzIiwianNvbiIsInJlc3BvbnNlIiwiY2xlYW4iLCJyZXBsYWNlIiwicGFyc2VJbnQiLCJ2YWx1ZSIsInRvRml4ZWQiLCJ2YWwiLCJwb3JFeHRlbnNvIiwicGFyc2VGbG9hdCIsImVzdGlsbyIsIm1vbmV0YXJpbyIsImFtb3VudE1vbmV5IiwiY29udHJhY3QiLCJpbnZlc3RtZW50SWQiLCJpZCIsInBlbmFsdHlQb3JjZW50IiwiY2xpZW50TmFtZSIsIm1hbmFnZXJOYW1lIiwicGVuYWx0eUFkdiIsImNvbnRyYWN0TnVtYmVyIiwiY29udHJhY3RFbmQiLCJjb250cmFjdFRheGUiLCJhbW91bnRDcnlwdCIsImNvbnRyYWN0UG9yY2VudCIsImJhbmtOYW1lIiwiYmFuayIsIm5hbWUiLCJiYW5rVGl0dWxhciIsInVzZXJOYW1lIiwiYmFua0FnZW5jeSIsImFnZW5jeSIsImJhbmtBY2NvdW50IiwiYWNjb3VudCIsImJhbmtDb2RlIiwiY29kZSIsImltYWdlIiwiZGF0ZSIsIkRhdGUiLCJmb3JtYXQiLCJjbnBqUmVzdW1lIiwiY2xpZW50UmVzdW1lIiwiY2xpZW50TmF0aW9uYWxpdHkiLCJjbGllbnRDaXZpbFN0YXRlIiwiY2xpZW50T2NjdXBhdGlvbiIsImNsaWVudFJHIiwiY2xpZW50Q1BGIiwiY2xpZW50U3RyZWV0IiwiY2xpZW50Q29tcGxlbWVudCIsImNsaWVudENFUCIsImNsaWVudENpdHkiLCJjbGllbnRTdGF0ZSIsIm1ha2VDTlBKIiwiY2xpZW50Q05QSiIsImNvbXBhbnlTdHJlZXQiLCJjb21wYW55Q29tcGxlbWVudCIsImNvbXBhbnlDRVAiLCJjb21wYW55Q2l0eSIsImNvbXBhbnlTdGF0ZSIsIm1ha2UiLCJ1c2VySWQiLCJkYXRhQ29udHJhY3QiLCJhd3MiLCJzZXRUeXBlIiwiZ2VuZXJhdG9yTGFzdCIsInVuZGVmaW5lZCIsIkVycm9yRG9jeFBkZiIsImdlbmVyYXRlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJzZXRCdWNrZXQiLCJidWNrZXQiLCJzZXREZXN0aW5hdGlvbkRpciIsInNldEZpbGUiLCJ1cGxvYWQiLCJKU09OIiwic3RyaW5naWZ5IiwicGFyc2UiLCJyZXN1bHQiLCJjb250cmFjdFVybCIsIkxvY2F0aW9uIiwic3RhdHVzIiwic2F2ZSIsImNhdGNoIiwiZSIsInJlamVjdCIsImluc2VydFNpZ25hdHVyZSIsImZpbGUiLCJwYXRoIiwiX19kaXJuYW1lIiwibWFrZUNvbnRyYWN0IiwiQnVmZmVyIiwiZnJvbSIsInNldEZpbGVCdWZmZXIiLCJ0eXBlIiwidXBkYXRlIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6Ijs7OztBQUFBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7Ozs7OztBQUVBLE1BQU1BLG1CQUFtQkMsUUFBUSxvQkFBUixDQUF6QjtBQUNBLE1BQU1DLE1BQU1ELFFBQVEsS0FBUixDQUFaOztBQUVBLE1BQU1FLFFBQU4sU0FBdUJDLDJCQUF2QixDQUF5QztBQUN2Q0MsY0FBWUMsSUFBWixFQUFrQkMsV0FBbEIsRUFBK0JDLFNBQS9CLEVBQTBDQyxZQUExQyxFQUF3RDtBQUN0RDtBQUNBLFNBQUtDLE9BQUwsR0FBZUYsU0FBZjtBQUNBLFNBQUtGLElBQUwsR0FBWUEsSUFBWjtBQUNBLFNBQUtHLFlBQUwsR0FBb0JBLFlBQXBCO0FBQ0EsU0FBS0UsY0FBTCxDQUFvQkosV0FBcEI7QUFDRDs7QUFFREssWUFBVUMsTUFB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QVdDO0FBQUEsaUJBQU8sT0FBS2lHLE1BQUwsQ0FBWWhHLEdBQVosQ0FBUDtBQUFBLFNBWEQsRUFZSm9GLEtBWkksQ0FZRSxVQUFDQyxDQUFELEVBQU87QUFBRSxnQkFBTUEsQ0FBTjtBQUFVLFNBWnJCLENBQVA7QUFhRCxPQXZCRCxDQXVCRSxPQUFPQSxDQUFQLEVBQVU7QUFDVixlQUFPaEIsUUFBUWlCLE1BQVIsQ0FBZUQsQ0FBZixDQUFQO0FBQ0Q7QUExQmlEO0FBMkJuRDtBQXRJc0M7O0FBeUl6Q1ksT0FBT0MsT0FBUCxHQUFpQixDQUFDOUcsSUFBRCxFQUFPQyxXQUFQLEVBQW9CRyxPQUFwQixFQUE2QkQsWUFBN0IsS0FBOEMsSUFBSU4sUUFBSixDQUFhRyxJQUFiLEVBQW1CQyxXQUFuQixFQUFnQ0csT0FBaEMsRUFBeUNELFlBQXpDLENBQS9EIiwiZmlsZSI6IkNvbnRyYWN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEVycm9yRG9jeFBkZiBmcm9tICcuLi9saWIvRXJyb3JEb2N4UGRmJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IGRhdGVGb3JtYXQgZnJvbSAnLi4vbGliL2RhdGUnO1xuaW1wb3J0IGJhc2U2NElNR0J1ZmZlciBmcm9tICcuLi9saWIvYmFzZTY0SU1HdG9CdWZmZXInO1xuaW1wb3J0IENvbnRyYWN0RGVjb3JhdG9yIGZyb20gJy4uL2RlY29yYXRvcnMvQ29udHJhY3REZWNvcmF0b3InO1xuaW1wb3J0IGZldGNoIGZyb20gJ25vZGUtZmV0Y2gnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuXG5jb25zdCBudW1lcm9Qb3JFeHRlbnNvID0gcmVxdWlyZSgnbnVtZXJvLXBvci1leHRlbnNvJyk7XG5jb25zdCBDUEYgPSByZXF1aXJlKCdjcGYnKTtcblxuY2xhc3MgQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdERlY29yYXRvciB7XG4gIGNvbnN0cnVjdG9yKERvY3gsIERpZ2l0YWxEYXRhLCBTM1N0b3JhZ2UsIFBkZkdlbmVyYXRvcikge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5TdG9yYWdlID0gUzNTdG9yYWdlO1xuICAgIHRoaXMuRG9jeCA9IERvY3g7XG4gICAgdGhpcy5QZGZHZW5lcmF0b3IgPSBQZGZHZW5lcmF0b3I7XG4gICAgdGhpcy5zZXREaWdpdGFsRGF0YShEaWdpdGFsRGF0YSk7XG4gIH1cblxuICBzZXRDb25maWcoY29uZmlnKSB7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgdGhpcy5TdG9yYWdlID0gdGhpcy5TdG9yYWdlKGNvbmZpZyk7XG4gIH1cblxuXG4gIGFzeW5jIG1ha2VDUEYoZGF0YSkge1xuICAgIGNvbnN0IGNvdGFjYW8gPSBhd2FpdCBmZXRjaCgnaHR0cHM6Ly93d3cuYnRjYnV5c2hvcC5jb20vYXBpL2NyYXdsZXJzL2ljb2lub21pYScpXG4gICAgICAudGhlbihyZXMgPT4gcmVzLmpzb24oKSlcbiAgICAgIC50aGVuKGpzb24gPT4ganNvbi5yZXNwb25zZS5jbGVhbi5yZXBsYWNlKC9bXFxEXSsvZywgJycpKVxuICAgICAgLnRoZW4odmFsdWUgPT4gcGFyc2VJbnQodmFsdWUpKVxuICAgICAgLnRoZW4odmFsdWUgPT4gKHZhbHVlIC8gMTAwKS50b0ZpeGVkKDIpKTtcblxuICAgIGNvbnN0IHZhbCA9IG51bWVyb1BvckV4dGVuc28ucG9yRXh0ZW5zbyhwYXJzZUZsb2F0KGNvdGFjYW8pLCBudW1lcm9Qb3JFeHRlbnNvLmVzdGlsby5tb25ldGFyaW8pO1xuICAgIGNvbnN0IGFtb3VudE1vbmV5ID0gYCR7Y290YWNhb30gKCR7dmFsfSlgO1xuICAgIC8vIGNvbnN0IHt5ZWFyLCBtb250aCwgZGF5fSA9IGRhdGVGb3JtYXQuZGF0ZVBUQlIoKTtcbiAgICBjb25zdCBjb250cmFjdCA9IHtcbiAgICAgIGludmVzdG1lbnRJZDogZGF0YS5pZCxcbiAgICAgIHBlbmFsdHlQb3JjZW50OiBkYXRhLnBlbmFsdHlQb3JjZW50IHx8IDAsXG4gICAgICBjbGllbnROYW1lOiBkYXRhLmNsaWVudE5hbWUgfHwgJ0RhbmllbCBTaWx2YSBNaXJhbmRhJyxcbiAgICAgIG1hbmFnZXJOYW1lOiBkYXRhLm1hbmFnZXJOYW1lIHx8ICdEYW5pZWwgU2lsdmEgTWlyYW5kYScsXG4gICAgICBwZW5hbHR5QWR2OiBkYXRhLnBlbmFsdHlBZHYgfHwgMCxcbiAgICAgIGNvbnRyYWN0TnVtYmVyOiBkYXRhLmNvbnRyYWN0TnVtYmVyIHx8ICdFeGVtcGxvJyxcbiAgICAgIGNvbnRyYWN0RW5kOiBkYXRhLmNvbnRyYWN0RW5kIHx8ICcwMC8wMC8wMDAwJyxcbiAgICAgIGNvbnRyYWN0VGF4ZTogZGF0YS5jb250cmFjdFRheGUgfHwgMCxcbiAgICAgIGFtb3VudENyeXB0OiBkYXRhLmFtb3VudENyeXB0IHx8IDAsXG4gICAgICBjb250cmFjdFBvcmNlbnQ6IGRhdGEuY29udHJhY3RQb3JjZW50IHx8IDAsXG4gICAgICBiYW5rTmFtZTogZGF0YS5iYW5rLm5hbWUgfHwgJ0JUQyBCYW5jbycsXG4gICAgICBiYW5rVGl0dWxhcjogZGF0YS5iYW5rLnVzZXJOYW1lIHx8ICdCVEMgQmFuY28nLFxuICAgICAgYmFua0FnZW5jeTogZGF0YS5iYW5rLmFnZW5jeSB8fCAnMDAwMCcsXG4gICAgICBiYW5rQWNjb3VudDogZGF0YS5iYW5rLmFjY291bnQgfHwgJzAwMDAtMDAnLFxuICAgICAgYmFua0NvZGU6IGRhdGEuYmFuay5jb2RlIHx8ICcwMDAwLTAwJyxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgaW1hZ2U6IGJhc2U2NElNR0J1ZmZlcihkYXRhLmltYWdlKSxcbiAgICAgIGFtb3VudE1vbmV5LFxuICAgICAgLi4uZGF0ZUZvcm1hdCgpLFxuICAgICAgZGF0ZTogbW9tZW50KG5ldyBEYXRlKCkpLmZvcm1hdChcIkREL01NL1lZWVlcIiksXG4gICAgICBjbnBqUmVzdW1lOiAnICcsXG4gICAgICBjbGllbnRSZXN1bWU6IGAke2RhdGEuY2xpZW50TmFtZX0sIG5hdHVyYWwgZGUgJHtkYXRhLmNsaWVudE5hdGlvbmFsaXR5fSwgJHtkYXRhLmNsaWVudENpdmlsU3RhdGV9LCBcbiAgICAgICR7ZGF0YS5jbGllbnRPY2N1cGF0aW9ufSxcbiAgICAgIHBvcnRhZG9yIGRvIFJHIG7CuiAke2RhdGEuY2xpZW50Ukd9LGluc2NyaXRvIG5vIENQRiBzb2IgbyBuwrogICR7Q1BGLmZvcm1hdChkYXRhLmNsaWVudENQRil9LCByZXNpZGVudGUgZSBcbiAgICAgIGRvbWljaWxpYWRvIGFcbiAgICAgICR7ZGF0YS5jbGllbnRTdHJlZXR9XG4gICAgICAke2RhdGEuY2xpZW50Q29tcGxlbWVudCB8fCAnICd9LCBDRVAgJHtkYXRhLmNsaWVudENFUH0sICR7ZGF0YS5jbGllbnRDaXR5fSAke2RhdGEuY2xpZW50U3RhdGV9YCB8fCAnICcsXG4gICAgfTtcbiAgICByZXR1cm4gY29udHJhY3Q7XG4gIH1cblxuICBtYWtlQ05QSihkYXRhKSB7XG4gICAgcmV0dXJuICh7XG4gICAgICAuLi50aGlzLm1ha2VDUEYoZGF0YSksXG4gICAgICBjbnBqUmVzdW1lOiBgLCBwZXNzb2EganVyw61kaWNhIGRlIGRpcmVpdG8gcHJpdmFkbywgaW5zY3JpdGEgbm8gQ05QSiBuwrogJHtkYXRhLmNsaWVudENOUEp9LCBjb20gc2VkZSBuYVxuICAgICAgJHtkYXRhLmNvbXBhbnlTdHJlZXR9XG4gICAgICAke2RhdGEuY29tcGFueUNvbXBsZW1lbnR9LCBDRVAgJHtkYXRhLmNvbXBhbnlDRVB9LCAke2RhdGEuY29tcGFueUNpdHl9ICR7ZGF0YS5jb21wYW55U3RhdGV9YCxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIG1ha2UodXNlcklkLCBkYXRhQ29udHJhY3QsIGNvbmZpZykge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnNldENvbmZpZyhjb25maWcuYXdzKTtcbiAgICAgIGF3YWl0IHRoaXMuc2V0VHlwZShjb25maWcuY29udHJhY3QpO1xuICAgICAgZGF0YUNvbnRyYWN0LmNvbnRyYWN0TnVtYmVyID0gYXdhaXQgdGhpcy5nZW5lcmF0b3JMYXN0KCk7XG4gICAgICBpZiAodGhpcy5jb25maWcgPT09IHVuZGVmaW5lZCkgdGhyb3cgbmV3IEVycm9yRG9jeFBkZignQ29uZmlndXJhw6fDo28gbsOjbyBpbmljaWFsaXphZGEnKTtcbiAgICAgIGxldCBkYXRhO1xuICAgICAgLy9sZXQgZmlsZTtcblxuICAgICAgaWYgKGRhdGFDb250cmFjdC5jbGllbnRDTlBKICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZGF0YSA9IGF3YWl0IHRoaXMubWFrZUNOUEooZGF0YUNvbnRyYWN0KTtcbiAgICAgICAgLy9maWxlID0gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4vLi4vLi4vYXNzZXRzL2RvY0V4LmRvY3gnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRhdGEgPSBhd2FpdCB0aGlzLm1ha2VDUEYoZGF0YUNvbnRyYWN0KTtcbiAgICAgICAgLy9maWxlID0gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4vLi4vLi4vYXNzZXRzL2RvY0V4LmRvY3gnKTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5QZGZHZW5lcmF0b3IuZ2VuZXJhdGUoZGF0YSwgdXNlcklkKTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5TdG9yYWdlLnNldEJ1Y2tldChjb25maWcuYnVja2V0KSlcbiAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5TdG9yYWdlLnNldERlc3RpbmF0aW9uRGlyKCdjb250cmFjdHMnKSlcbiAgICAgICAgLy8udGhlbigoKSA9PiB0aGlzLkRvY3gubWFrZUNvbnRyYWN0KGZpbGUsIGRhdGEpKVxuICAgICAgICAvLy50aGVuKCgpID0+IHRoaXMuUGRmR2VuZXJhdG9yLmdlbmVyYXRlKGRhdGEpKVxuICAgICAgICAvLyAudGhlbihyZXMgPT4gQnVmZmVyLmZyb20ocmVzLCAnYmFzZTY0JykpXG4gICAgICAgIC8vIC50aGVuKHJlcyA9PiB0aGlzLlN0b3JhZ2Uuc2V0RmlsZUJ1ZmZlcih7IGRhdGE6IHJlcywgdHlwZTogJ3BkZicgfSkpXG4gICAgICAgIC50aGVuKCgpID0+IHRoaXMuU3RvcmFnZS5zZXRGaWxlKCcuLycgKyB1c2VySWQgKyBcIi5wZGZcIikpXG4gICAgICAgIC50aGVuKCgpID0+IHRoaXMuU3RvcmFnZS51cGxvYWQoKSlcbiAgICAgICAgLnRoZW4ocmVzID0+IEpTT04uc3RyaW5naWZ5KHJlcykpXG4gICAgICAgIC50aGVuKHJlcyA9PiBKU09OLnBhcnNlKHJlcykpXG4gICAgICAgIC50aGVuKHJlcyA9PiBQcm9taXNlLnJlc29sdmUoZGF0YSlcbiAgICAgICAgICAudGhlbihyZXN1bHQgPT4gKHtcbiAgICAgICAgICAgIC4uLnJlc3VsdCxcbiAgICAgICAgICAgIGNvbnRyYWN0VXJsOiByZXMuTG9jYXRpb24sXG4gICAgICAgICAgICBzdGF0dXM6ICdBdGl2bydcbiAgICAgICAgICB9KSkpXG4gICAgICAgIC50aGVuKHJlcyA9PiB0aGlzLnNhdmUodXNlcklkLCByZXMpKVxuICAgICAgICAuY2F0Y2goKGUpID0+IHsgdGhyb3cgZTsgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGUpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGluc2VydFNpZ25hdHVyZSh1c2VySWQsIGRhdGFDb250cmFjdCwgY29uZmlnKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuc2V0Q29uZmlnKGNvbmZpZy5hd3MpO1xuICAgICAgYXdhaXQgdGhpcy5zZXRUeXBlKGNvbmZpZy5jb250cmFjdCk7XG4gICAgICBpZiAodGhpcy5jb25maWcgPT09IHVuZGVmaW5lZCkgdGhyb3cgbmV3IEVycm9yRG9jeFBkZignQ29uZmlndXJhw6fDo28gbsOjbyBpbmljaWFsaXphZGEnKTtcbiAgICAgIGxldCBmaWxlO1xuICAgICAgaWYgKGRhdGFDb250cmFjdC5jbGllbnRDTlBKICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZmlsZSA9IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuLy4uLy4uL2Fzc2V0cy9kb2NFeC5kb2N4Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaWxlID0gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4vLi4vLi4vYXNzZXRzL2RvY0V4LmRvY3gnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5TdG9yYWdlLnNldEJ1Y2tldChjb25maWcuYnVja2V0KSlcbiAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5TdG9yYWdlLnNldERlc3RpbmF0aW9uRGlyKCdjb250cmFjdHMnKSlcbiAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5Eb2N4Lm1ha2VDb250cmFjdChmaWxlLCBkYXRhQ29udHJhY3QuZGF0YSkpXG4gICAgICAgIC50aGVuKHJlcyA9PiBCdWZmZXIuZnJvbShyZXMsICdiYXNlNjQnKSlcbiAgICAgICAgLnRoZW4ocmVzID0+IHRoaXMuU3RvcmFnZS5zZXRGaWxlQnVmZmVyKHsgZGF0YTogcmVzLCB0eXBlOiAnZG9jeCcgfSkpXG4gICAgICAgIC50aGVuKCgpID0+IHRoaXMuU3RvcmFnZS51cGxvYWQoKSlcbiAgICAgICAgLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICAgIGRhdGFDb250cmFjdC5kYXRhLmNvbnRyYWN0VXJsID0gcmVzLkxvY2F0aW9uO1xuICAgICAgICAgIGRhdGFDb250cmFjdC5kYXRhLnN0YXR1cyA9ICdBc3NpbmFkbyc7XG4gICAgICAgICAgcmV0dXJuIGRhdGFDb250cmFjdDtcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4ocmVzID0+IHRoaXMudXBkYXRlKHJlcykpXG4gICAgICAgIC5jYXRjaCgoZSkgPT4geyB0aHJvdyBlOyB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7XG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gKERvY3gsIERpZ2l0YWxEYXRhLCBTdG9yYWdlLCBQZGZHZW5lcmF0b3IpID0+IG5ldyBDb250cmFjdChEb2N4LCBEaWdpdGFsRGF0YSwgU3RvcmFnZSwgUGRmR2VuZXJhdG9yKTtcbiJdfQ==