UNPKG

zater-docx-pdf2

Version:
426 lines (394 loc) 56.9 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); 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 fs = require('fs'); const pdf = require('dynamic-html-pdf'); const bufferConverter = require('arraybuffer-to-string'); const path = require('path'); const ContractType = require('../../domain/ContractTypeEnum'); const Signatures = require('../../domain/Signature'); class PdfGenerator { constructor(type) { this.type = type; } generate(contract, file_name, insertSignature) { var _this = this; return _asyncToGenerator(function* () { _this.type = contract.type; let resol = contract; resol.image = 'data:image/png;base64,' + bufferConverter(resol.image, 'base64'); if (insertSignature) { resol = yield _this.makeSignatures(resol); } //adding this property to get "base directory to the header images" resol.basePath = path.join('file:///', __dirname, '../../../assets/'); return new Promise(function (resolve, reject) { try { let html = ''; if (_this.type == ContractType.MUTUO_TRADING) html = fs.readFileSync(path.join(__dirname, '../../../assets/MutuoComTrading.html'), 'utf8'); if (_this.type == ContractType.MUTUO_SEM_TRADING) html = fs.readFileSync(path.join(__dirname, '../../../assets/MutuoSemTrading.html'), 'utf8'); if (_this.type == ContractType.MUTUO_LE_REVE) html = fs.readFileSync(path.join(__dirname, '../../../assets/MutuoComProduto.html'), 'utf8'); if (_this.type == ContractType.MUTUO_TRADING_LXC) html = fs.readFileSync(path.join(__dirname, '../../../assets/MutuoComTradingLXC.html'), 'utf8'); if (_this.type == ContractType.MUTUO_SEM_TRADING_LXC) html = fs.readFileSync(path.join(__dirname, '../../../assets/MutuoSemTradingLXC.html'), 'utf8'); if (_this.type == ContractType.MUTUO_COMBO_LXC) html = fs.readFileSync(path.join(__dirname, '../../../assets/MutuoComboLXC.html'), 'utf8'); const footer = _this.buildFooter(); const options = { format: 'Letter', base: path.join('file:///', __dirname, '../../../assets/'), header: { contents: "", //header height: "35mm" }, footer: { "contents": footer } }; const document = { type: 'file', // 'file' or 'buffer' template: html, context: { contract: resol }, path: './' + file_name + '.pdf' // it is not required if type is buffer }; //Promise.resolve(pdf.create(document, options)).then(res => console.log(res)); resolve(pdf.create(document, options)); } catch (err) { reject(err); } }); })(); } makeSignatures(contract) { var _this2 = this; return _asyncToGenerator(function* () { contract.vpSignature = Signatures.HELOISA; contract.comercialSignature = Signatures.JAIME; const firstSignature = yield _this2.randomizeSignature(); let secondSignature = yield _this2.randomizeSignature(); while (firstSignature === secondSignature) { secondSignature = yield _this2.randomizeSignature(); } contract.firstRandomSignature = firstSignature; contract.secondRandomSignature = secondSignature; return contract; })(); } randomizeSignature() { return _asyncToGenerator(function* () { const testimonials = Object.keys(Signatures).filter(function (key) { if (Signatures[key] !== Signatures.HELOISA && Signatures[key] !== Signatures.JAIME) return Signatures[key]; }); return Signatures[testimonials[Object.keys(testimonials)[Math.floor(Math.random() * Object.keys(testimonials).length)]]]; })(); } buildFooter() { if (this.type == 1) { return ` <p class="c3"> <span class="c4 c8">Alameda Doutor Carlos de Carvalho n. 417 &ndash; 30&ordm; andar. Conjunto 3001 &nbsp;| &nbsp;Bairro Centro &nbsp;| &nbsp;CEP 80410-180 &nbsp;| &nbsp;Curitiba . Paran&aacute;</span> </p> <p class="c3"> <span class="c4 c8">Telefone +55 41 3123-9192</span> </p> <p class="c3"> <span class="c8 c14"></span> <table class="c21"> <tbody> <tr class="c45"> <td class="c35" colspan="1" rowspan="1"> <p class="c6"> <span class="c4 c0">Mutuo Com Trading versão 5.0</span> </p> </td> <td class="c62" colspan="1" rowspan="1"> <p class="c3"> <span class="c0 c40">P&aacute;gina {{page}} </span> <span class="c0 c40">&nbsp;de {{pages}} </span> </p> </td> <td class="c51" colspan="1" rowspan="1"> <p class="c3 c16"> <span class="c4 c0"></span> </p> </td> <td class="c64" colspan="1" rowspan="1"> <p class="c3"> <span class="c4 c0">Dr. Ismair Junior Couto</span> </p> <p class="c3"> <span class="c4 c0">Diretor Jur&iacute;dico</span> </p> <p class="c3"> <span class="c4 c0">OAB/PR 49001</span> </p> </td> </tr> </tbody> </table> </p> <a id="t.082bc7f9bd17458e7662efd45871e7b72a4a82ff"></a> <a id="t.6"></a> <p class="c3 c16"> <span class="c14 c8"></span> </p>`; } else if (this.type == 2) { return ` <p class="c3"> <span class="c4 c8">Alameda Doutor Carlos de Carvalho n. 417 &ndash; 30&ordm; andar. Conjunto 3001 &nbsp;| &nbsp;Bairro Centro &nbsp;| &nbsp;CEP 80410-180 &nbsp;| &nbsp;Curitiba . Paran&aacute;</span> </p> <p class="c3"> <span class="c4 c8">Telefone +55 41 3123-9192</span> </p> <p class="c3"> <span class="c8 c14"></span> <table class="c21"> <tbody> <tr class="c45"> <td class="c35" colspan="1" rowspan="1"> <p class="c6"> <span class="c4 c0">Mutuo Sem Trading versão 5.0</span> </p> </td> <td class="c62" colspan="1" rowspan="1"> <p class="c3"> <span class="c0 c40">P&aacute;gina {{page}} </span> <span class="c0 c40">&nbsp;de {{pages}} </span> </p> </td> <td class="c51" colspan="1" rowspan="1"> <p class="c3 c16"> <span class="c4 c0"></span> </p> </td> <td class="c64" colspan="1" rowspan="1"> <p class="c3"> <span class="c4 c0">Dr. Ismair Junior Couto</span> </p> <p class="c3"> <span class="c4 c0">Diretor Jur&iacute;dico</span> </p> <p class="c3"> <span class="c4 c0">OAB/PR 49001</span> </p> </td> </tr> </tbody> </table> </p> <a id="t.082bc7f9bd17458e7662efd45871e7b72a4a82ff"></a> <a id="t.6"></a> <p class="c3 c16"> <span class="c14 c8"></span> </p>`; } else if (this.type == 3) { return ` <p class="c3"> <span class="c4 c8">Alameda Doutor Carlos de Carvalho n. 417 &ndash; 30&ordm; andar. Conjunto 3001 &nbsp;| &nbsp;Bairro Centro &nbsp;| &nbsp;CEP 80410-180 &nbsp;| &nbsp;Curitiba . Paran&aacute;</span> </p> <p class="c3"> <span class="c4 c8">Telefone +55 41 3123-9192</span> </p> <p class="c3"> <span class="c8 c14"></span> <table class="c21"> <tbody> <tr class="c45"> <td class="c35" colspan="1" rowspan="1"> <p class="c3"> <span class="c0 c40">Produto</span> <span class="c0 c40">Mútuo LeRêve</span> </p> </td> <td class="c62" colspan="1" rowspan="1"> <p class="c3"> <span class="c0 c40">P&aacute;gina {{page}} </span> <span class="c0 c40">&nbsp;de {{pages}} </span> </p> </td> <td class="c51" colspan="1" rowspan="1"> <p class="c3"> <span class="c4 c0">Vers&atilde;o</span> </p> <p class="c3"> <span class="c4 c0">1.4</span> </p> </td> <td class="c64" colspan="1" rowspan="1"> <p class="c3"> <span class="c4 c0">Dr. Ismair Junior Couto</span> </p> <p class="c3"> <span class="c4 c0">Diretor Jur&iacute;dico</span> </p> <p class="c3"> <span class="c4 c0">OAB/PR 49001</span> </p> </td> </tr> </tbody> </table> </p> <a id="t.082bc7f9bd17458e7662efd45871e7b72a4a82ff"></a> <a id="t.6"></a> <p class="c3 c16"> <span class="c14 c8"></span> </p>`; } else if (this.type == 4) { return ` <p class="c3"> <span class="c4 c8">Alameda Doutor Carlos de Carvalho n. 417 &ndash; 30&ordm; andar. Conjunto 3001 &nbsp;| &nbsp;Bairro Centro &nbsp;| &nbsp;CEP 80410-180 &nbsp;| &nbsp;Curitiba . Paran&aacute;</span> </p> <p class="c3"> <span class="c4 c8">Telefone +55 41 3123-9192</span> </p> <p class="c3"> <span class="c8 c14"></span> <table class="c21"> <tbody> <tr class="c45"> <td class="c35" colspan="1" rowspan="1"> <p class="c6"> <span class="c4 c0">Mútuo LXC Com Trading versão 5.0</span> </p> </td> <td class="c62" colspan="1" rowspan="1"> <p class="c3"> <span class="c0 c40">P&aacute;gina {{page}} </span> <span class="c0 c40">&nbsp;de {{pages}} </span> </p> </td> <td class="c51" colspan="1" rowspan="1"> <p class="c3 c16"> <span class="c4 c0"></span> </p> </td> <td class="c64" colspan="1" rowspan="1"> <p class="c3"> <span class="c4 c0">Dr. Ismair Junior Couto</span> </p> <p class="c3"> <span class="c4 c0">Diretor Jur&iacute;dico</span> </p> <p class="c3"> <span class="c4 c0">OAB/PR 49001</span> </p> </td> </tr> </tbody> </table> </p> <a id="t.082bc7f9bd17458e7662efd45871e7b72a4a82ff"></a> <a id="t.6"></a> <p class="c3 c16"> <span class="c14 c8"></span> </p>`; } else if (this.type == 5) { return ` <p class="c3"> <span class="c4 c8">Alameda Doutor Carlos de Carvalho n. 417 &ndash; 30&ordm; andar. Conjunto 3001 &nbsp;| &nbsp;Bairro Centro &nbsp;| &nbsp;CEP 80410-180 &nbsp;| &nbsp;Curitiba . Paran&aacute;</span> </p> <p class="c2"> <span class="c18 c5 c8">Telefone +55 41 3123-9192</span> </p> <p class="c2 c3"> <span class="c18 c5 c53"></span> </p> <a id="t.d52fbb6362b5826fe79fb1784747727bdf6992f8"></a> <a id="t.6"></a> <table class="c22"> <tbody> <tr class="c21"> <td class="c39" colspan="1" rowspan="1"> <p class="c7"> <span class="c18 c0 c8">Mútuo LXC Sem Trading versão 5.0</span> </p> </td> <td class="c54" colspan="1" rowspan="1"> <p class="c2"> <span class="c0 c26">P&aacute;gina {{page}} </span> <span class="c0 c26">&nbsp;de {{pages}} </span> </p> </td> <td class="c10" colspan="1" rowspan="1"> <p class="c2 c3"> <span class="c18 c0 c8"></span> </p> </td> <td class="c47" colspan="1" rowspan="1"> <p class="c2"> <span class="c18 c0 c8">Dr. Ismair Junior Couto</span> </p> <p class="c2"> <span class="c18 c0 c8">Diretor Jur&iacute;dico</span> </p> <p class="c2"> <span class="c18 c0 c8">OAB/PR 49001</span> </p> </td> </tr> </tbody> </table> <p class="c2 c3"> <span class="c18 c5 c53"></span> </p> `; } else if (this.type == 6) { return ` <p class="c9 c6"><span class="c14"></span></p> <a id="t.f3938e79502005adf94a4e51215e89fb827a9929"></a><a id="t.5"></a> <table class="doStyle53"> <tbody> <tr class="doStyle5"> <td class="doStyle45" colspan="3" rowspan="1"> <p class="c0 c6"><span class="doStyle25 doStyle8 doStyle18"></span></p> </td> <td class="doStyle68" colspan="2" rowspan="1"> <p class="c0 c6"><span class="doStyle25 doStyle8 doStyle18"></span></p> </td> <td class="doStyle61" colspan="1" rowspan="1"> <p class="c0 c6"><span class="doStyle25 doStyle8 doStyle18"></span></p> </td> <td class="doStyle62" colspan="2" rowspan="1"> <p class="c0 c6"><span class="doStyle25 doStyle8 doStyle18"></span></p> </td> </tr> <tr class="doStyle5"> <td class="doStyle13" colspan="1" rowspan="1"> <p class="c0"><span class="doStyle7">Produto</span></p> <p class="c0"><span class="doStyle25 doStyle8 doStyle18">LXCombo</span></p> </td> <td class="doStyle69" colspan="1" rowspan="1"> <p class="c0"><span class="doStyle7">Vers&atilde;o</span></p> <p class="c0"><span class="doStyle25 doStyle8 doStyle18">1.0</span></p> </td> <td class="doStyle64" colspan="2" rowspan="1"> <p class="c0"><span class="doStyle7">Atualiza&ccedil;&atilde;o</span></p> <p class="c0"><span class="doStyle25 doStyle8 doStyle18">01/02/2019</span></p> </td> <td class="doStyle75" colspan="3" rowspan="1"> <p class="c0"><span class="doStyle25 doStyle8 doStyle18">Alameda Doutor Carlos de Carvalho n. 431 - 10&ordm; andar &nbsp;| &nbsp;Bairro Centro &nbsp;</span></p> <p class="c0"><span class="doStyle25 doStyle8 doStyle18">CEP 80410-180 . Curitiba . Paran&aacute; &nbsp;| &nbsp;+55 41 3123-9192 &ndash; www.btc-banco.com</span></p> </td> <td class="doStyle78" colspan="1" rowspan="1"> <p class="c0"> <span class="doStyle25 doStyle8 doStyle18">P&aacute;gina {{page}} </span> <span class="doStyle25 doStyle8 doStyle18">&nbsp;de {{pages}} </span> </p> </td> </tr> </tbody> </table> `; } } } exports.default = type => new PdfGenerator(type); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9pbmZyYXN0cnVjdHVyZS9wcm92aWRlcnMvUGRmR2VuZXJhdG9yLmpzIl0sIm5hbWVzIjpbImZzIiwicmVxdWlyZSIsInBkZiIsImJ1ZmZlckNvbnZlcnRlciIsInBhdGgiLCJDb250cmFjdFR5cGUiLCJTaWduYXR1cmVzIiwiUGRmR2VuZXJhdG9yIiwiY29uc3RydWN0b3IiLCJ0eXBlIiwiZ2VuZXJhdGUiLCJjb250cmFjdCIsImZpbGVfbmFtZSIsImluc2VydFNpZ25hdHVyZSIsInJlc29sIiwiaW1hZ2UiLCJtYWtlU2lnbmF0dXJlcyIsImJhc2VQYXRoIiwiam9pbiIsIl9fZGlybmFtZSIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiaHRtbCIsIk1VVFVPX1RSQURJTkciLCJyZWFkRmlsZVN5bmMiLCJNVVRVT19TRU1fVFJBRElORyIsIk1VVFVPX0xFX1JFVkUiLCJNVVRVT19UUkFESU5HX0xYQyIsIk1VVFVPX1NFTV9UUkFESU5HX0xYQyIsIk1VVFVPX0NPTUJPX0xYQyIsImZvb3RlciIsImJ1aWxkRm9vdGVyIiwib3B0aW9ucyIsImZvcm1hdCIsImJhc2UiLCJoZWFkZXIiLCJjb250ZW50cyIsImhlaWdodCIsImRvY3VtZW50IiwidGVtcGxhdGUiLCJjb250ZXh0IiwiY3JlYXRlIiwiZXJyIiwidnBTaWduYXR1cmUiLCJIRUxPSVNBIiwiY29tZXJjaWFsU2lnbmF0dXJlIiwiSkFJTUUiLCJmaXJzdFNpZ25hdHVyZSIsInJhbmRvbWl6ZVNpZ25hdHVyZSIsInNlY29uZFNpZ25hdHVyZSIsImZpcnN0UmFuZG9tU2lnbmF0dXJlIiwic2Vjb25kUmFuZG9tU2lnbmF0dXJlIiwidGVzdGltb25pYWxzIiwiT2JqZWN0Iiwia2V5cyIsImZpbHRlciIsImtleSIsIk1hdGgiLCJmbG9vciIsInJhbmRvbSIsImxlbmd0aCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSxNQUFNQSxLQUFLQyxRQUFRLElBQVIsQ0FBWDtBQUNB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OlsiY29uc3QgZnMgPSByZXF1aXJlKCdmcycpO1xuY29uc3QgcGRmID0gcmVxdWlyZSgnZHluYW1pYy1odG1sLXBkZicpO1xuY29uc3QgYnVmZmVyQ29udmVydGVyID0gcmVxdWlyZSgnYXJyYXlidWZmZXItdG8tc3RyaW5nJyk7XG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuY29uc3QgQ29udHJhY3RUeXBlID0gcmVxdWlyZSgnLi4vLi4vZG9tYWluL0NvbnRyYWN0VHlwZUVudW0nKTtcbmNvbnN0IFNpZ25hdHVyZXMgPSByZXF1aXJlKCcuLi8uLi9kb21haW4vU2lnbmF0dXJlJyk7XG5cbmNsYXNzIFBkZkdlbmVyYXRvciB7XG4gICAgY29uc3RydWN0b3IodHlwZSkge1xuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIH1cblxuICAgIGFzeW5jIGdlbmVyYXRlKGNvbnRyYWN0LCBmaWxlX25hbWUsIGluc2VydFNpZ25hdHVyZSkge1xuICAgICAgICB0aGlzLnR5cGUgPSBjb250cmFjdC50eXBlXG4gICAgICAgIGxldCByZXNvbCA9IGNvbnRyYWN0XG4gICAgICAgIFxuICAgICAgICByZXNvbC5pbWFnZSA9ICdkYXRhOmltYWdlL3BuZztiYXNlNjQsJyArIGJ1ZmZlckNvbnZlcnRlcihyZXNvbC5pbWFnZSwgJ2Jhc2U2NCcpO1xuICAgICAgICBcbiAgICAgICAgaWYgKGluc2VydFNpZ25hdHVyZSl7XG4gICAgICAgICAgICByZXNvbCA9IGF3YWl0IHRoaXMubWFrZVNpZ25hdHVyZXMocmVzb2wpO1xuICAgICAgICB9XG4gICAgICAgIC8vYWRkaW5nIHRoaXMgcHJvcGVydHkgdG8gZ2V0IFwiYmFzZSBkaXJlY3RvcnkgdG8gdGhlIGhlYWRlciBpbWFnZXNcIiBcbiAgICAgICAgcmVzb2wuYmFzZVBhdGggPSBwYXRoLmpvaW4oJ2ZpbGU6Ly8vJywgX19kaXJuYW1lLCAnLi4vLi4vLi4vYXNzZXRzLycpO1xuXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGxldCBodG1sID0gJyc7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudHlwZSA9PSBDb250cmFjdFR5cGUuTVVUVU9fVFJBRElORylcbiAgICAgICAgICAgICAgICAgICAgaHRtbCA9IGZzLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vLi4vLi4vYXNzZXRzL011dHVvQ29tVHJhZGluZy5odG1sJyksICd1dGY4Jyk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy50eXBlID09IENvbnRyYWN0VHlwZS5NVVRVT19TRU1fVFJBRElORylcbiAgICAgICAgICAgICAgICAgICAgaHRtbCA9IGZzLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vLi4vLi4vYXNzZXRzL011dHVvU2VtVHJhZGluZy5odG1sJyksICd1dGY4Jyk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy50eXBlID09IENvbnRyYWN0VHlwZS5NVVRVT19MRV9SRVZFKVxuICAgICAgICAgICAgICAgICAgICBodG1sID0gZnMucmVhZEZpbGVTeW5jKHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi8uLi8uLi9hc3NldHMvTXV0dW9Db21Qcm9kdXRvLmh0bWwnKSwgJ3V0ZjgnKTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT0gQ29udHJhY3RUeXBlLk1VVFVPX1RSQURJTkdfTFhDKVxuICAgICAgICAgICAgICAgICAgICBodG1sID0gZnMucmVhZEZpbGVTeW5jKHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi8uLi8uLi9hc3NldHMvTXV0dW9Db21UcmFkaW5nTFhDLmh0bWwnKSwgJ3V0ZjgnKTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT0gQ29udHJhY3RUeXBlLk1VVFVPX1NFTV9UUkFESU5HX0xYQylcbiAgICAgICAgICAgICAgICAgICAgaHRtbCA9IGZzLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vLi4vLi4vYXNzZXRzL011dHVvU2VtVHJhZGluZ0xYQy5odG1sJyksICd1dGY4Jyk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy50eXBlID09IENvbnRyYWN0VHlwZS5NVVRVT19DT01CT19MWEMpXG4gICAgICAgICAgICAgICAgICAgIGh0bWwgPSBmcy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKF9fZGlybmFtZSwgJy4uLy4uLy4uL2Fzc2V0cy9NdXR1b0NvbWJvTFhDLmh0bWwnKSwgJ3V0ZjgnKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGZvb3RlciA9IHRoaXMuYnVpbGRGb290ZXIoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6ICdMZXR0ZXInLFxuICAgICAgICAgICAgICAgICAgICBiYXNlOiBwYXRoLmpvaW4oJ2ZpbGU6Ly8vJywgX19kaXJuYW1lLCAnLi4vLi4vLi4vYXNzZXRzLycpLFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzOiBcIlwiLC8vaGVhZGVyXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IFwiMzVtbVwiXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGZvb3Rlcjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJjb250ZW50c1wiOiBmb290ZXJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudCA9IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2ZpbGUnLCAvLyAnZmlsZScgb3IgJ2J1ZmZlcidcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGU6IGh0bWwsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyYWN0OiByZXNvbFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBwYXRoOiAnLi8nICsgZmlsZV9uYW1lICsgJy5wZGYnICAvLyBpdCBpcyBub3QgcmVxdWlyZWQgaWYgdHlwZSBpcyBidWZmZXJcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLy9Qcm9taXNlLnJlc29sdmUocGRmLmNyZWF0ZShkb2N1bWVudCwgb3B0aW9ucykpLnRoZW4ocmVzID0+IGNvbnNvbGUubG9nKHJlcykpO1xuICAgICAgICAgICAgICAgIFxuXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShwZGYuY3JlYXRlKGRvY3VtZW50LCBvcHRpb25zKSk7XG5cbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBtYWtlU2lnbmF0dXJlcyhjb250cmFjdCkge1xuICAgICAgICBjb250cmFjdC52cFNpZ25hdHVyZSA9IFNpZ25hdHVyZXMuSEVMT0lTQTtcbiAgICAgICAgY29udHJhY3QuY29tZXJjaWFsU2lnbmF0dXJlID0gU2lnbmF0dXJlcy5KQUlNRTtcbiAgICAgICAgY29uc3QgZmlyc3RTaWduYXR1cmUgPSBhd2FpdCB0aGlzLnJhbmRvbWl6ZVNpZ25hdHVyZSgpO1xuICAgICAgICBsZXQgc2Vjb25kU2lnbmF0dXJlID0gYXdhaXQgdGhpcy5yYW5kb21pemVTaWduYXR1cmUoKTtcbiAgICAgICAgd2hpbGUgKGZpcnN0U2lnbmF0dXJlID09PSBzZWNvbmRTaWduYXR1cmUpIHtcbiAgICAgICAgICAgIHNlY29uZFNpZ25hdHVyZSA9IGF3YWl0IHRoaXMucmFuZG9taXplU2lnbmF0dXJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29udHJhY3QuZmlyc3RSYW5kb21TaWduYXR1cmUgPSBmaXJzdFNpZ25hdHVyZTtcbiAgICAgICAgY29udHJhY3Quc2Vjb25kUmFuZG9tU2lnbmF0dXJlID0gc2Vjb25kU2lnbmF0dXJlO1xuICAgICAgICByZXR1cm4gY29udHJhY3Q7XG4gICAgfVxuXG4gICAgYXN5bmMgcmFuZG9taXplU2lnbmF0dXJlKCkge1xuICAgICAgICBjb25zdCB0ZXN0aW1vbmlhbHMgPSBPYmplY3Qua2V5cyhTaWduYXR1cmVzKS5maWx0ZXIoZnVuY3Rpb24oa2V5KSB7XG4gICAgICAgICAgICBpZiAoU2lnbmF0dXJlc1trZXldICE9PSBTaWduYXR1cmVzLkhFTE9JU0EgJiYgU2lnbmF0dXJlc1trZXldICE9PSBTaWduYXR1cmVzLkpBSU1FKVxuICAgICAgICAgICAgICByZXR1cm4gU2lnbmF0dXJlc1trZXldO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBTaWduYXR1cmVzW3Rlc3RpbW9uaWFsc1tPYmplY3Qua2V5cyh0ZXN0aW1vbmlhbHMpW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIE9iamVjdC5rZXlzKHRlc3RpbW9uaWFscykubGVuZ3RoKV1dXTtcbiAgICB9XG5cbiAgICBidWlsZEZvb3RlcigpIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PSAxKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gYFxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiYzNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjNCBjOFwiPkFsYW1lZGEgRG91dG9yIENhcmxvcyBkZSBDYXJ2YWxobyBuLiA0MTcgJm5kYXNoOyAzMCZvcmRtOyBhbmRhci4gQ29uanVudG8gMzAwMSAmbmJzcDt8ICZuYnNwO0JhaXJybyBDZW50cm8gJm5ic3A7fFxuICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7Q0VQIDgwNDEwLTE4MCAmbmJzcDt8ICZuYnNwO0N1cml0aWJhIC4gUGFyYW4mYWFjdXRlOzwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJjM1wiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImM0IGM4XCI+VGVsZWZvbmUgKzU1IDQxIDMxMjMtOTE5Mjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJjM1wiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImM4IGMxNFwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwiYzIxXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJjNDVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImMzNVwiIGNvbHNwYW49XCIxXCIgcm93c3Bhbj1cIjFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImM2XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYzQgYzBcIj5NdXR1byBDb20gVHJhZGluZyB2ZXJzw6NvIDUuMDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYzYyXCIgY29sc3Bhbj1cIjFcIiByb3dzcGFuPVwiMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiYzNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjMCBjNDBcIj5QJmFhY3V0ZTtnaW5hIHt7cGFnZX19IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjMCBjNDBcIj4mbmJzcDtkZSB7e3BhZ2VzfX0gPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJjNTFcIiBjb2xzcGFuPVwiMVwiIHJvd3NwYW49XCIxXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJjMyBjMTZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjNCBjMFwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYzY0XCIgY29sc3Bhbj1cIjFcIiByb3dzcGFuPVwiMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiYzNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjNCBjMFwiPkRyLiBJc21haXIgSnVuaW9yIENvdXRvPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImMzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYzQgYzBcIj5EaXJldG9yIEp1ciZpYWN1dGU7ZGljbzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJjM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImM0IGMwXCI+T0FCL1BSIDQ5MDAxPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgIDxhIGlkPVwidC4wODJiYzdmOWJkMTc0NThlNzY2MmVmZDQ1ODcxZTdiNzJhNGE4MmZmXCI+PC9hPlxuICAgICAgICAgICAgICAgIDxhIGlkPVwidC42XCI+PC9hPlxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImMzIGMxNlwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImMxNCBjOFwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3A+YDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT0gMilcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgIDxwIGNsYXNzPVwiYzNcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImM0IGM4XCI+QWxhbWVkYSBEb3V0b3IgQ2FybG9zIGRlIENhcnZhbGhvIG4uIDQxNyAmbmRhc2g7IDMwJm9yZG07IGFuZGFyLiBDb25qdW50byAzMDAxICZuYnNwO3wgJm5ic3A7QmFpcnJvIENlbnRybyAmbmJzcDt8XG4gICAgICAgICAgICAgICAgICAgICZuYnNwO0NFUCA4MDQxMC0xODAgJm5ic3A7fCAmbmJzcDtDdXJpdGliYSAuIFBhcmFuJmFhY3V0ZTs8L3NwYW4+XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8cCBjbGFzcz1cImMzXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjNCBjOFwiPlRlbGVmb25lICs1NSA0MSAzMTIzLTkxOTI8L3NwYW4+XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIDxwIGNsYXNzPVwiYzNcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImM4IGMxNFwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJjMjFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJjNDVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYzM1XCIgY29sc3Bhbj1cIjFcIiByb3dzcGFuPVwiMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJjNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYzQgYzBcIj5NdXR1byBTZW0gVHJhZGluZyB2ZXJzw6NvIDUuMDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYzYyXCIgY29sc3Bhbj1cIjFcIiByb3dzcGFuPVwiMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJjM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYzAgYzQwXCI+UCZhYWN1dGU7Z2luYSB7e3BhZ2V9fSA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjMCBjNDBcIj4mbmJzcDtkZSB7e3BhZ2VzfX0gPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJjNTFcIiBjb2xzcGFuPVwiMVwiIHJvd3NwYW49XCIxXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImMzIGMxNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYzQgYzBcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImM2NFwiIGNvbHNwYW49XCIxXCIgcm93c3Bhbj1cIjFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiYzNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImM0IGMwXCI+RHIuIElzbWFpciBKdW5pb3IgQ291dG88L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImMzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjNCBjMFwiPkRpcmV0b3IgSnVyJmlhY3V0ZTtkaWNvPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJjM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYzQgYzBcIj5PQUIvUFIgNDkwMDE8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8YSBpZD1cInQuMDgyYmM3ZjliZDE3NDU4ZTc2NjJlZmQ0NTg3MWU3YjcyYTRhODJmZlwiPjwvYT5cbiAgICAgICAgICAgIDxhIGlkPVwidC42XCI+PC9hPlxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgPHAgY2xhc3M9XCJjMyBjMTZcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImMxNCBjOFwiPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvcD5gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PSAzKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gYFxuICAgICAgICAgICAgPHAgY2xhc3M9XCJjM1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYzQgYzhcIj5BbGFtZWRhIERvdXRvciBDYXJsb3MgZGUgQ2FydmFsaG8gbi4gNDE3ICZuZGFzaDsgMzAmb3JkbTsgYW5kYXIuIENvbmp1bnRvIDMwMDEgJm5ic3A7fCAmbmJzcDtCYWlycm8gQ2VudHJvICZuYnNwO3xcbiAgICAgICAgICAgICAgICAgICAgJm5ic3A7Q0VQIDgwNDEwLTE4MCAmbmJzcDt8ICZuYnNwO0N1cml0aWJhIC4gUGFyYW4mYWFjdXRlOzwvc3Bhbj5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwiYzNcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImM0IGM4XCI+VGVsZWZvbmUgKzU1IDQxIDMxMjMtOTE5Mjwvc3Bhbj5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgPHAgY2xhc3M9XCJjM1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYzggYzE0XCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cImMyMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cImM0NVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJjMzVcIiBjb2xzcGFuPVwiMVwiIHJvd3NwYW49XCIxXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImMzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjMCBjNDBcIj5Qcm9kdXRvPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYzAgYzQwXCI+TcO6dHVvICBMZVLDqnZlPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJjNjJcIiBjb2xzcGFuPVwiMVwiIHJvd3NwYW49XCIxXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImMzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjMCBjNDBcIj5QJmFhY3V0ZTtnaW5hIHt7cGFnZX19IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImMwIGM0MFwiPiZuYnNwO2RlIHt7cGFnZXN9fSA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImM1MVwiIGNvbHNwYW49XCIxXCIgcm93c3Bhbj1cIjFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiYzNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImM0IGMwXCI+VmVycyZhdGlsZGU7bzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiYzNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImM0IGMwXCI+MS40PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJjNjRcIiBjb2xzcGFuPVwiMVwiIHJvd3NwYW49XCIxXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImMzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjNCBjMFwiPkRyLiBJc21haXIgSnVuaW9yIENvdXRvPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJjM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYzQgYzBcIj5EaXJldG9yIEp1ciZpYWN1dGU7ZGljbzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiYzNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImM0IGMwXCI+T0FCL1BSIDQ5MDAxPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPGEgaWQ9XCJ0LjA4MmJjN2Y5YmQxNzQ1OGU3NjYyZWZkNDU4NzFlN2I3MmE0YTgyZmZcIj48L2E+XG4gICAgICAgICAgICA8YSBpZD1cInQuNlwiPjwvYT5cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIDxwIGNsYXNzPVwiYzMgYzE2XCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjMTQgYzhcIj48L3NwYW4+XG4gICAgICAgICAgICA8L3A+YDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT0gNClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImMzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYzQgYzhcIj5BbGFtZWRhIERvdXRvciBDYXJsb3MgZGUgQ2FydmFsaG8gbi4gNDE3ICZuZGFzaDsgMzAmb3JkbTsgYW5kYXIuIENvbmp1bnRvIDMwMDEgJm5ic3A7fCAmbmJzcDtCYWlycm8gQ2VudHJvICZuYnNwO3xcbiAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO0NFUCA4MDQxMC0xODAgJm5ic3A7fCAmbmJzcDtDdXJpdGliYSAuIFBhcmFuJmFhY3V0ZTs8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiYzNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjNCBjOFwiPlRlbGVmb25lICs1NSA0MSAzMTIzLTkxOTI8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiYzNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjOCBjMTRcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cImMyMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwiYzQ1XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJjMzVcIiBjb2xzcGFuPVwiMVwiIHJvd3NwYW49XCIxXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJjNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImM0IGMwXCI+TcO6dHVvIExYQyBDb20gVHJhZGluZyB2ZXJzw6NvIDUuMDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYzYyXCIgY29sc3Bhbj1cIjFcIiByb3dzcGFuPVwiMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiYzNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjMCBjNDBcIj5QJmFhY3V0ZTtnaW5hIHt7cGFnZX19IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjMCBjNDBcIj4mbmJzcDtkZSB7e3BhZ2VzfX0gPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJjNTFcIiBjb2xzcGFuPVwiMVwiIHJvd3NwYW49XCIxXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJjMyBjMTZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjNCBjMFwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYzY0XCIgY29sc3Bhbj1cIjFcIiByb3dzcGFuPVwiMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiYzNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjNCBjMFwiPkRyLiBJc21haXIgSnVuaW9yIENvdXRvPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImMzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYzQgYzBcIj5EaXJldG9yIEp1ciZpYWN1dGU7ZGljbzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJjM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImM0IGMwXCI+T0FCL1BSIDQ5MDAxPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgIDxhIGlkPVwidC4wODJiYzdmOWJkMTc0NThlNzY2MmVmZDQ1ODcxZTdiNzJhNGE4MmZmXCI+PC9hPlxuICAgICAgICAgICAgICAgIDxhIGlkPVwidC42XCI+PC9hPlxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImMzIGMxNlwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImMxNCBjOFwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3A+YDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT0gNSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIGAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImMzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYzQgYzhcIj5BbGFtZWRhIERvdXRvciBDYXJsb3MgZGUgQ2FydmFsaG8gbi4gNDE3ICZuZGFzaDsgMzAmb3JkbTsgYW5kYXIuIENvbmp1bnRvIDMwMDEgJm5ic3A7fCAmbmJzcDtCYWlycm8gQ2VudHJvICZuYnNwO3xcbiAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO0NFUCA4MDQxMC0xODAgJm5ic3A7fCAmbmJzcDtDdXJpdGliYSAuIFBhcmFuJmFhY3V0ZTs8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiYzJcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjMTggYzUgYzhcIj5UZWxlZm9uZSArNTUgNDEgMzEyMy05MTkyPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImMyIGMzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYzE4IGM1IGM1M1wiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgPGEgaWQ9XCJ0LmQ1MmZiYjYzNjJiNTgyNmZlNzlmYjE3ODQ3NDc3MjdiZGY2OTkyZjhcIj48L2E+XG4gICAgICAgICAgICAgICAgPGEgaWQ9XCJ0LjZcIj48L2E+XG4gICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwiYzIyXCI+XG4gICAgICAgICAgICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cImMyMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImMzOVwiIGNvbHNwYW49XCIxXCIgcm93c3Bhbj1cIjFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJjN1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY