{"version":3,"names":[],"mappings":"","sources":["profissionais.js"],"sourcesContent":["(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i\\n\\t\\t
\\n\\t\\t\\t
\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t

{{ isEnglish ? 'Search Professionals' : 'Buscar Profissionais' }}

\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t

{{ isEnglish ? 'Professionals' : 'Profissionais' }}

\\n\\t\\t\\t\\t
\\n\\t\\t\\t
\\n
\\n
\\n
\\n \\n {{ letra }} ·\\n \\n
\\n

\\n\\t\\t\\t\\t\\t\\t{{ isEnglish ? 'See all' : 'Ver Todos' }}\\n\\t\\t\\t\\t\\t

\\n
\\n
\\n \\n \\n \\t\\n \\n \\n
\\n
\\n
\\n \\n \",\n methods: {\n onChangeArea: function onChangeArea(e) {\n Vue.set(this.filtros, \"area\", null);\n Vue.set(this.filtros, \"setor\", null);\n Vue.set(this.filtros, \"desk\", null);\n\n var val = e.target.value;\n var target = e.target.options[e.target.options.selectedIndex].getAttribute(\"rel\");\n Vue.set(this.filtros, target, val);\n },\n persistSearch: function persistSearch() {\n var _this = this;\n\n Object.keys(this.filtros).map(function (filtro) {\n var value = _this.getHashParam(filtro);\n value = value ? decodeURIComponent(value) : null;\n\n Vue.set(_this.filtros, filtro, value);\n });\n\n return new Promise(function (resolve) {\n Vue.nextTick(resolve);\n });\n },\n getHashParam: function getHashParam(name) {\n if (name) {\n var hash = window.location.hash.substr(1);\n\n var result = hash.split(\"&\").reduce(function (result, item) {\n var parts = item.split(\"=\");\n result[parts[0]] = parts[1];\n return result;\n }, {});\n\n return result[name];\n }\n },\n doSearch: function doSearch(isDisp, isFirst) {\n var query = [];\n var paramURL = [];\n if (this.filtros.keywords) {\n query.push(\"(Title:\\\"\" + this.filtros.keywords + \"*\\\" OR bicharaNomeComp:\\\"*\" + this.filtros.keywords + \"*\\\" OR bicharaFullName:\\\"*\" + this.filtros.keywords + \"*\\\")\");\n paramURL.push(\"keywords=\" + this.filtros.keywords);\n\n // desativado por solicitação de Bruna Benigno em 15/05.\n //OR bicharaAuxAtuacao:\"*${this.filtros.keywords}*\" OR bicharaAuxIdioma:\"*${this.filtros.keywords}*\" OR bicharaEmail:\"*${this.filtros.keywords}*\" OR bicharaAuxTipoProfSeoURL:\"*${this.filtros.keywords}*\")\n }\n\n if (this.filtros.escritorio) {\n query.push(\"bicharaUnidadeSeoURL:'\" + this.filtros.escritorio + \"'\");\n paramURL.push(\"escritorio=\" + this.filtros.escritorio);\n }\n\n if (this.filtros.area) {\n // verificação para retornar apenas === empresarial ao consultar por área\n if (this.filtros.area == \"empresarial\") {\n query.push(\"bicharaAuxAtuacaoSeoURL:*empresarial* AND NOT bicharaAuxAtuacaoSeoURL:*penal*\");\n } else {\n query.push(\"bicharaAuxAtuacaoSeoURL:*\" + this.filtros.area + \"*\");\n }\n\n paramURL.push(\"area=\" + this.filtros.area);\n }\n\n if (this.filtros.posicao) {\n query.push(\"bicharaAuxTipoProfSeoURL:'\" + this.filtros.posicao + \"'\");\n paramURL.push(\"posicao=\" + this.filtros.posicao);\n }\n\n if (this.filtros.letra) {\n query.push(\"bicharaPL:'\" + this.filtros.letra + \"'\");\n paramURL.push(\"letra=\" + this.filtros.letra);\n }\n\n query = query.join(\" AND \");\n paramURL = paramURL.join(\"&\");\n\n this.$emit(\"change-query\", query);\n // verificando se está na disp, e redirecionando pra pagina de busca de profissionais\n if (isDisp && !isFirst) {\n window.location.href = _spPageContextInfo.siteAbsoluteUrl + \"/profissionais#\" + paramURL;\n } else {\n window.location.hash = paramURL;\n }\n window.location.hash = paramURL;\n },\n clearSearch: function clearSearch() {\n this.filtros = Object.keys(this.filtros).reduce(function (acc, key) {\n acc[key] = null;\n return acc;\n }, {});\n\n this.doSearch(this.isDisp);\n this.scrollToResults();\n },\n getEscritorios: function getEscritorios() {\n var _this2 = this;\n\n var web = new $pnp.Web(_spPageContextInfo.siteAbsoluteUrl);\n return web.getList(this.escritoriosURL).items.select(\"*\").orderBy(\"Ordem\", true).top(100).get().then(function (results) {\n Vue.set(_this2, \"escritorios\", results);\n });\n },\n getAreas: function getAreas() {\n var _this3 = this;\n\n var web = new $pnp.Web(_spPageContextInfo.siteAbsoluteUrl);\n return web.getList(this.areasURL).items.filter(\"Title ne 'Com\\xE9rcio Internacional' and FiltrarPesquisa eq 'Sim' and Ativo eq 1\").select(\"*\").orderBy(\"Title\", true).top(100).get().then(function (results) {\n results = results.filter(function (item) {\n if (!item.ItemPaiId) {\n _this3.areas.push(item);\n }\n });\n });\n },\n getTipoProfissional: function getTipoProfissional(consultor) {\n var _this4 = this;\n\n var web = new $pnp.Web(_spPageContextInfo.siteAbsoluteUrl);\n var filter = [\"Title ne 'Profissional'\"];\n if (consultor.length == 0) {\n filter = filter + \" and Title ne 'Consultor'\";\n }\n\n return web.getList(this.tipoProfissionaisUrl).items.select(\"*\").filter(filter).orderBy(\"Title\", true).top(100).get().then(function (results) {\n Vue.set(_this4, \"tipoProfissionais\", results);\n });\n },\n chekcProfissionalConsultor: function chekcProfissionalConsultor() {\n var _this5 = this;\n\n return $pnp.sp.web.getList(_spPageContextInfo.webServerRelativeUrl + \"lists/Profissionais\").items.select(\"AuxTipoProfissional/Title\").filter(\"AuxTipoProfissional/Title eq 'Consultor'\").expand(\"AuxTipoProfissional\").top(100).get().then(function (profConsultor) {\n _this5.getTipoProfissional(profConsultor);\n });\n },\n filterLetter: function filterLetter(currentLetra) {\n this.filtros.letra = currentLetra;\n if (currentLetra) this.doSearch(this.isDisp);\n this.scrollToResults();\n },\n scrollToResults: function scrollToResults() {\n if (this.isMobile) {\n $(\"html, body\").animate({\n scrollTop: $(\".profissionais-list\").offset().top - 80\n }, 1000);\n }\n }\n },\n created: function created() {\n this.persistSearch().then(this.doSearch.bind(this, this.isDisp, true));\n this.getEscritorios();\n this.getAreas();\n this.chekcProfissionalConsultor();\n }\n});\n\n},{\"../../mixins/pnp-mixin\":4,\"../../mixins/sp-mixin\":5,\"../../mixins/translate\":6}],2:[function(require,module,exports){\n\"use strict\";\n\nrequire(\"../../mixins/translate\");\nrequire(\"../../components/pagination\");\nrequire(\"./inputs-busca-profissionais\");\n\nVue.component(\"profissionais\", {\n mixins: [translateMixin],\n data: function data() {\n return {\n resultsProfissionais: [],\n itemsPerPage: this.verifyPage ? 8 : 10,\n currentPage: 0,\n lastQuery: null,\n showLoading: false,\n isMobile: window.innerWidth <= 996,\n hashParam: window.location.hash.substr(1) ? true : false\n };\n },\n\n props: {\n showSearch: {\n default: true\n }\n },\n template: \"\\n
\\n \\n
\\n \\n \\n \\n
\\n
\\n \",\n methods: {\n onClickPageNum: function onClickPageNum(currentPage) {\n this.currentPage = currentPage;\n this.doSearch(this.lastQuery, true);\n if (this.isMobile) {\n $(\"html, body\").animate({\n scrollTop: $(\".target\").offset().top\n }, 1000);\n }\n },\n doSearch: function doSearch() {\n var _this = this;\n\n var query = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n var isPagination = arguments[1];\n\n if (!isPagination) {\n this.currentPage = 0;\n }\n\n // verificando se existe parametro na url, se sim,\n\n Vue.set(this, \"resultsProfissionais\", {});\n this.showLoading = true;\n var searchProps = [\"bicharaAuxTipoProfOrdem\", \"bicharaNomeComp\", \"bicharaAuxAtuacao\", \"bicharaAuxAtuacaoSeoURL\", \"bicharaAuxAtuacaoEN\", \"bicharaAuxTipoProf\", \"bicharaAuxTipoProfSeoURL\", \"bicharaAuxTipoProfEN\", \"bicharaEmail\", \"bicharaFoto\", \"bicharaTelComercial\", \"bicharaUnidade\", \"bicharaUnidadeSeoURL\", \"bicharaSeoURL\", \"bicharaProfAtivo\", \"bicharaAuxIdioma\", \"bicharaAuxIdiomaEN\", \"bicharaTags\", \"bicharaLista\", \"bicharaFullName\", \"Path\"];\n\n this.lastQuery = query;\n var sortList = [{\n Property: \"bicharaNomeComp\",\n Direction: 0\n }];\n\n var filtroBusca = [\"bicharaProfAtivo:true AND bicharaLista:\\\"Curr\\xEDculo Profissional\\\" AND path:\\\"\" + _spPageContextInfo.webAbsoluteUrl + \"\\\"\"];\n // if(query){\n // if(query.match(/Title:/i)){\n // filtroBusca = [`bicharaProfAtivo:true AND bicharaLista:\"Currículo Profissional\" AND path:\"${_spPageContextInfo.webAbsoluteUrl}\"`];\n // console.log(this.filtroBusca)\n // }\n // }\n\n // if(this.areaBusca){\n // filtroBusca.push(`bicharaAuxAtuacaoSeoURL:\"${this.areaBusca}\"`);\n // }\n\n // if(this.keywordsBusca){\n // debugger\n // if(query.match(/Title/i)){\n // query = '';\n // }\n // filtroBusca.push(`bicharaNomeComp:\"*${this.keywordsBusca}*\"`)\n // }\n\n //this.lastQuery = filtroBusca.join(' AND ');\n\n return $pnp.sp.search({\n Querytext: \"\" + filtroBusca.join(\" AND \") + (query ? \" AND \" + query : \"\"),\n RowLimit: this.itemsPerPage,\n EnableInterleaving: true,\n SourceId: \"6e7e4c4a-3dc4-49eb-9838-8c8a90a3d11d\",\n SelectProperties: searchProps,\n StartRow: this.itemsPerPage * this.currentPage,\n QueryTemplatePropertiesUrl: \"spfile://webroot/queryparametertemplate.xml\", // para funcionar anonimo\n SortList: sortList,\n TrimDuplicates: true\n }).then(function (results) {\n Vue.set(_this, \"resultsProfissionais\", results);\n _this.$emit(\"loaded-profissionais\", _this.resultsProfissionais.PrimarySearchResults.length > 0);\n _this.showLoading = false;\n }).catch(this.threatError);\n },\n resetPage: function resetPage() {\n this.currentPage = 0;\n this.doSearch(this.lastQuery, true);\n },\n getAvatar: function getAvatar(img) {\n if (img) {\n return img.split('src=\"')[1].split('\"')[0] + \"?RenditionID=18\";\n } else {\n return _spPageContextInfo.webAbsoluteUrl + \"/style library/images/empty-picture.jpg\";\n }\n },\n getDispURL: function getDispURL(seoURL) {\n //return `${_spPageContextInfo.webServerRelativeUrl}paginas/detalhe-profissional.aspx?adv=${seoURL}`\n // aplicação para link de url minificado (descomentar apos o Jonas implementar o back-end)\n return _spPageContextInfo.webServerRelativeUrl + \"profissional/\" + seoURL;\n },\n threatError: function threatError() {\n return swal({\n type: \"error\",\n text: \"Erro ao obter dados\",\n title: \"Oops!\"\n });\n },\n verifyPage: function verifyPage() {\n if (!_spPageContextInfo.serverRequestPath.match(/busca.aspx/g)) {\n return true;\n }\n },\n showUnidade: function showUnidade(dados) {\n return dados.replace(/;/gi, \", \");\n }\n },\n created: function created() {\n if (this.showSearch && !this.hashParam) {\n this.doSearch();\n }\n }\n});\n\nif (window.location.href.match(/profissionais/i)) {\n var app = new Vue({\n el: \"#profissionais\",\n template: \"\"\n });\n}\n\n},{\"../../components/pagination\":3,\"../../mixins/translate\":6,\"./inputs-busca-profissionais\":1}],3:[function(require,module,exports){\n'use strict';\n\nrequire('../mixins/translate');\n(function (Vue, R) {\n 'use strict';\n\n Vue.component('pagination', {\n mixins: [translateMixin],\n methods: {\n navPage: function navPage(next) {\n var nextPageNum = this.activePage + (next ? 1 : -1);\n this.onChange(nextPageNum);\n },\n filterVisible: function filterVisible() {\n var start = this.activePage - Math.ceil(this.visiblePages / 2) > 0 ? this.activePage - Math.ceil(this.visiblePages / 2) : 0,\n end = start + this.visiblePages > this.pagesNum ? this.pagesNum : start + this.visiblePages;\n\n return this.range(start, end);\n },\n range: function range(start, end) {\n return R.range(start, end);\n },\n onChange: function onChange(pageNum) {\n if (pageNum < 0) {\n pageNum = 0;\n } else if (pageNum >= this.totalItems) {\n pageNum = this.totalItems - 1;\n }\n this.$emit('page-changed', pageNum);\n }\n },\n data: function data() {\n var _data = {\n selected: undefined\n };\n return _data;\n },\n computed: {\n pagesNum: function pagesNum() {\n return Math.ceil(this.totalItems / this.itemsPerPage);\n }\n },\n props: {\n itemsPerPage: { type: [Number], default: 10, required: true },\n totalItems: { type: [Number], required: true },\n activePage: { type: [Number], default: 0, required: true },\n visiblePages: { type: [Number], default: 15 }\n },\n template: '\\n '\n });\n})(Vue, R);\n\n},{\"../mixins/translate\":6}],4:[function(require,module,exports){\n'use strict';\n\nwindow.pnpMixin = function ($pnp) {\n\tvar pnpMixin = {\n\t\tmethods: {\n\t\t\tgetCurrentUser: function getCurrentUser() {\n\t\t\t\treturn $pnp.sp.web.siteUsers.getById(_spPageContextInfo.userId).expand('groups').get();\n\t\t\t},\n\t\t\tisUserMemberOf: function isUserMemberOf(groupName, groups) {\n\t\t\t\treturn [].concat(groups).some(function (group) {\n\t\t\t\t\treturn group.Title === groupName;\n\t\t\t\t});\n\t\t\t},\n\t\t\tgetRelativeUrl: function getRelativeUrl(link) {\n\t\t\t\treturn $pnp.util.makeUrlAbsolute(link).replace(location.protocol + '//' + location.hostname, '');\n\t\t\t},\n\t\t\ttruncateString: function truncateString(str, length) {\n\t\t\t\treturn !str ? \"\" : str.length > length ? str.substring(0, length - 3) + '...' : str;\n\t\t\t},\n\t\t\tgetPicture: function getPicture(user) {\n\t\t\t\treturn _spPageContextInfo.webAbsoluteUrl + '/_layouts/15/userphoto.aspx?size=L&username=' + user + '';\n\t\t\t},\n\t\t\tgetList: function getList(settings) {\n\t\t\t\tvar request = $pnp.sp.web.getList(settings.listUrl).items;\n\t\t\t\tsettings.select ? request.select(settings.select) : null;\n\t\t\t\tsettings.orderBy ? request.orderBy(settings.orderBy, settings.orderByAsc) : null;\n\t\t\t\tsettings.filter ? request.filter(settings.filter) : null;\n\t\t\t\tsettings.expand ? request.expand(settings.expand) : null;\n\t\t\t\tsettings.top ? request.expand(settings.top) : null;\n\n\t\t\t\treturn request.get();\n\t\t\t},\n\t\t\tthreatError: function threatError(err, msg) {\n\t\t\t\treturn swal({\n\t\t\t\t\ttype: 'error',\n\t\t\t\t\ttext: err + ' - ' + msg,\n\t\t\t\t\ttitle: 'Oops!'\n\t\t\t\t});\n\t\t\t},\n\t\t\tclearFilename: function clearFilename(filename) {\n\t\t\t\treturn (filename || '').replace(/[/\\\\?%*:|\"<>]/g, '-');\n\t\t\t},\n\t\t\texportPDF: function exportPDF(item) {\n\t\t\t\tvar _qry = \"\";\n\t\t\t\t_qry = \"p=\" + item.Id;\n\t\t\t\tvar title = \"&title=\" + this.clearFilename(item.FullName);\n\n\t\t\t\tvar urlFav = \"/_layouts/15/SX.WebSite.Juridicos.SP2013.Downloader/PDFDownloader.ashx?\" + _qry + \"&lcid=\" + CurrentLanguageDecimal + title + '&la=Premios&ff=Profissionais';\n\t\t\t\twindow.location.href = _spPageContextInfo.webAbsoluteUrl + urlFav;\n\t\t\t}\n\t\t}\n\t};\n\treturn pnpMixin;\n}($pnp);\n\n},{}],5:[function(require,module,exports){\n'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nrequire('../mixins/translate');\nmodule.exports = {\n mixins: [translateMixin],\n methods: {\n clone: function clone(obj) {\n if (null == obj || \"object\" != (typeof obj === 'undefined' ? 'undefined' : _typeof(obj))) return obj;\n return JSON.parse(JSON.stringify(obj));\n },\n getEmptyItem: function getEmptyItem(listFields) {\n return this.clone(listFields);\n },\n validateRequiredField: function validateRequiredField(fields) {\n return !Object.keys(fields).some(function (key) {\n return !fields[key].Value && fields[key].Required;\n });\n },\n getInvalidFields: function getInvalidFields(fields) {\n var _this = this;\n\n var msgsErro = [];\n var msgObrigatorio = false;\n\n fields = Object.keys(fields).filter(function (key) {\n var field = fields[key];\n if (field.InternalName === 'Email' && field.Value) {\n var emailValido = _this.validateEmail(field.Value);\n if (!emailValido) {\n msgsErro.push('O e-mail \"' + field.Value + '\" \\xE9 inv\\xE1lido');\n }\n return !emailValido;\n } else if (field.Required) {\n var validation = false;\n if (field.TypeAsString === 'LookupMulti') {\n validation = !(field.Value || []).length;\n } else {\n validation = !field.Value;\n }\n if (validation && msgObrigatorio == false) {\n msgObrigatorio = true;\n //msgsErro.push(`O campo ${field.Title} é obrigatório`)\n msgsErro.push('' + (_this.isEnglish ? 'Fill in the required fields' : 'Preencha os campos obrigatórios'));\n }\n return validation;\n }\n });\n if (msgObrigatorio >= 1) {\n //alert('Preencha os campos obrigatórios'); \n\n }\n return {\n msgsErro: msgsErro,\n fields: fields\n };\n },\n validateEmail: function validateEmail() {\n var email = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n\n var usuario = email.substring(0, email.indexOf(\"@\"));\n var dominio = email.substring(email.indexOf(\"@\") + 1, email.length);\n\n if (usuario.length >= 1 && dominio.length >= 3 && usuario.search(\"@\") == -1 && dominio.search(\"@\") == -1 && usuario.search(\" \") == -1 && dominio.search(\" \") == -1 && dominio.search(\".\") != -1 && dominio.indexOf(\".\") >= 1 && dominio.lastIndexOf(\".\") < dominio.length - 1) {\n return true;\n } else {\n return false;\n }\n }\n },\n data: function data() {\n return {\n letrasAlfabeto: ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']\n };\n }\n};\n\n},{\"../mixins/translate\":6}],6:[function(require,module,exports){\n\"use strict\";\n\nwindow.translateMixin = {\n methods: {\n changeLanguage: function changeLanguage(value) {\n if (CurrentLanguageDecimal == value) {\n return null;\n }\n\n var today = new Date();\n var oneYear = new Date(today.getTime() + 365 * 24 * 60 * 60 * 1000);\n var url = window.location.href;\n document.cookie = \"lcid=\" + value + \";path=/;expires=\" + oneYear.toGMTString();\n location.href = url;\n location.reload();\n }\n },\n data: function data() {\n return {\n isEnglish: CurrentLanguageDecimal == 1033,\n currentLang: CurrentLanguageDecimal\n };\n }\n};\n\n},{}]},{},[2])\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJzcmMvanMvY29tcG9uZW50cy9wYWdpbmFzL2lucHV0cy1idXNjYS1wcm9maXNzaW9uYWlzLmpzIiwic3JjL2pzL2NvbXBvbmVudHMvcGFnaW5hcy9wcm9maXNzaW9uYWlzLmpzIiwic3JjL2pzL2NvbXBvbmVudHMvcGFnaW5hdGlvbi5qcyIsInNyYy9qcy9taXhpbnMvcG5wLW1peGluLmpzIiwic3JjL2pzL21peGlucy9zcC1taXhpbi5qcyIsInNyYy9qcy9taXhpbnMvdHJhbnNsYXRlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7QUNBQSxRQUFRLHdCQUFSO0FBQ0EsUUFBUSx3QkFBUjtBQUNBLElBQUksVUFBVSxRQUFRLHVCQUFSLENBQWQ7QUFDQSxJQUFJLFNBQUosK0JBQTRDO0FBQzFDLFVBQVEsQ0FBQyxjQUFELEVBQWlCLFFBQWpCLEVBQTJCLE9BQTNCLENBRGtDO0FBRTFDLE1BRjBDLGtCQUVuQztBQUNMLFdBQU87QUFDTCxtQkFBYSxFQURSO0FBRUwsYUFBTyxFQUZGO0FBR0wsc0JBQ0UsbUJBQW1CLHFCQUFuQixHQUEyQyxpQkFKeEM7QUFLTCxnQkFDRSxtQkFBbUIscUJBQW5CLEdBQTJDLHFCQU54QztBQU9MLDRCQUNFLG1CQUFtQixxQkFBbkIsR0FBMkMsNEJBUnhDO0FBU0wseUJBQW1CLEVBVGQ7QUFVTCxjQUFRLG1CQUFtQixpQkFBbkIsQ0FBcUMsS0FBckMsQ0FDTix1QkFETSxJQUdKLElBSEksR0FJSixLQWRDO0FBZUwsZUFBUztBQUNQLG9CQUFZLElBREw7QUFFUCxjQUFNLElBRkM7QUFHUCxpQkFBUyxJQUhGO0FBSVAsZUFBTyxJQUpBO0FBS1Asc0JBQWMsSUFMUDtBQU1QLGtCQUFVO0FBTkgsT0FmSjtBQXVCTCxtQkFBYSxJQXZCUjtBQXdCTCxnQkFBVSxPQUFPLFVBQVAsR0FBb0I7QUF4QnpCLEtBQVA7QUEwQkQsR0E3QnlDOztBQThCMUMs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dGVudCI6WyIoZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsbix0KXtmdW5jdGlvbiBvKGksZil7aWYoIW5baV0pe2lmKCFlW2ldKXt2YXIgYz1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFmJiZjKXJldHVybiBjKGksITApO2lmKHUpcmV0dXJuIHUoaSwhMCk7dmFyIGE9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitpK1wiJ1wiKTt0aHJvdyBhLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsYX12YXIgcD1uW2ldPXtleHBvcnRzOnt9fTtlW2ldWzBdLmNhbGwocC5leHBvcnRzLGZ1bmN0aW9uKHIpe3ZhciBuPWVbaV1bMV1bcl07cmV0dXJuIG8obnx8cil9LHAscC5leHBvcnRzLHIsZSxuLHQpfXJldHVybiBuW2ldLmV4cG9ydHN9Zm9yKHZhciB1PVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsaT0wO2k8dC5sZW5ndGg7aSsrKW8odFtpXSk7cmV0dXJuIG99cmV0dXJuIHJ9KSgpIiwicmVxdWlyZShcIi4uLy4uL21peGlucy90cmFuc2xhdGVcIik7XHJcbnJlcXVpcmUoXCIuLi8uLi9taXhpbnMvcG5wLW1peGluXCIpO1xyXG52YXIgc3BNaXhpbiA9IHJlcXVpcmUoXCIuLi8uLi9taXhpbnMvc3AtbWl4aW5cIik7XHJcblZ1ZS5jb21wb25lbnQoYGlucHV0cy1idXNjYS1wcm9maXNzaW9uYWlzYCwge1xyXG4gIG1peGluczogW3RyYW5zbGF0ZU1peGluLCBwbnBNaXhpbiwgc3BNaXhpbl0sXHJcbiAgZGF0YSgpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGVzY3JpdG9yaW9zOiBbXSxcclxuICAgICAgYXJlYXM6IFtdLFxyXG4gICAgICBlc2NyaXRvcmlvc1VSTDpcclxuICAgICAgICBfc3BQYWdlQ29udGV4dEluZm8uc2l0ZVNlcnZlclJlbGF0aXZlVXJsICsgXCJsaXN0cy91bmlkYWRlcy9cIixcclxuICAgICAgYXJlYXNVUkw6XHJcbiAgICAgICAgX3NwUGFnZUNvbnRleHRJbmZvLnNpdGVTZXJ2ZXJSZWxhdGl2ZVVybCArIFwibGlzdHMvQXJlYXNBdHVhY2FvL1wiLFxyXG4gICAgICB0aXBvUHJvZmlzc2lvbmFpc1VybDpcclxuICAgICAgICBfc3BQYWdlQ29udGV4dEluZm8uc2l0ZVNlcnZlclJlbGF0aXZlVXJsICsgXCJsaXN0cy9BdXhUaXBvUHJvZmlzc2lvbmFsL1wiLFxyXG4gICAgICB0aXBvUHJvZmlzc2lvbmFpczogW10sXHJcbiAgICAgIGlzRGlzcDogX3NwUGFnZUNvbnRleHRJbmZvLnNlcnZlclJlcXVlc3RQYXRoLm1hdGNoKFxyXG4gICAgICAgIC9kZXRhbGhlLXByb2Zpc3Npb25hbC9pXHJcbiAgICAgIClcclxuICAgICAgICA/IHRydWVcclxuICAgICAgICA6IGZhbHNlLFxyXG4gICAgICBmaWx0cm9zOiB7XHJcbiAgICAgICAgZXNjcml0b3JpbzogbnVsbCxcclxuICAgICAgICBhcmVhOiBudWxsLFxyXG4gICAgICAgIHBvc2ljYW86IG51bGwsXHJcbiAgICAgICAgbGV0cmE6IG51bGwsXHJcbiAgICAgICAgcHJvZmlzc2lvbmFsOiBudWxsLFxyXG4gICAgICAgIGtleXdvcmRzOiBudWxsLFxyXG4gICAgICB9LFxyXG4gICAgICBpc0NvbnN1bHRvcjogbnVsbCxcclxuICAgICAgaXNNb2JpbGU6IHdpbmRvdy5pbm5lcldpZHRoIDwgOTk2LFxyXG4gICAgfTtcclxuICB9LFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8ZGl2IGNsYXNzPVwicm93IHB5LTUgYmctYW1hcmVsYWRvIG10LW40IHNlY3Rpb24tYnVzY2EtaW5wdXRzXCI+XHJcblx0XHQ8ZGl2IGNsYXNzPVwiY29udGFpbmVyIHJvdyBteC1hdXRvXCI+XHJcblx0XHRcdDxkaXYgY2xhc3M9XCJjb2wtc20tM1wiPlxyXG5cdFx0XHRcdDxkaXYgdi1pZj1cImlzRGlzcFwiPlxyXG5cdFx0XHRcdFx0PGgzIGNsYXNzPVwidGV4dC1zZWNvbmRhcnkgYm9yZGVyLXJpZ2h0IG10LTQgcHQtMyBwYi0zXCI+e3sgaXNFbmdsaXNoID8gJ1NlYXJjaCBQcm9mZXNzaW9uYWxzJyA6ICdCdXNjYXIgUHJvZmlzc2lvbmFpcycgfX08L2gzPlxyXG5cdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdDxkaXYgdi1lbHNlPlxyXG5cdFx0XHRcdFx0PGgyIGNsYXNzPVwidGV4dC1zZWNvbmRhcnkgbXQtNCB0aXRsZS1zZWFyY2gtcHJvZmlzc2lvbmFpc3dcIj57eyBpc0VuZ2xpc2ggPyAnUHJvZmVzc2lvbmFscycgOiAnUHJvZmlzc2lvbmFpcycgfX08L2gyPlxyXG5cdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHQ8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS05IGNvbC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMTAgY29sLTEyIHJvdyBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQteGwtYmV0d2VlbiBwLTIgcGwtc20tMiBtLTAgYWxmYWJldG9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdi1mb3I9XCJsZXRyYSBpbiBsZXRyYXNBbGZhYmV0b1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6XCIgQGNsaWNrPVwiZmlsdGVyTGV0dGVyKGxldHJhKVwiIDpjbGFzcz1cImxldHJhID09IGZpbHRyb3MubGV0cmEgPyAnYWN0aXZlJyA6ICcnXCIgOnRpdGxlPVwibGV0cmFcIiBjbGFzcz1cInRleHQtbXV0ZWRcIiA+e3sgbGV0cmEgfX0gJm1pZGRvdDs8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8cCA6Y2xhc3M9XCJpc01vYmlsZSA/ICdjb2wtMTIgdGV4dC1yaWdodCcgOiAnJ1wiPlxyXG5cdFx0XHRcdFx0XHQ8YSBocmVmPVwiamF2YXNjcmlwdDpcIiBjbGFzcz1cImNvbC1sZy0yIGNvbC0xMiB0ZXh0LWNlbnRlciBmb250LWl0YWxpYyB0ZXh0LXNlY29uZGFyeSBmb250LXdlaWdodC1ib2xkXCIgQGNsaWNrPVwiY2xlYXJTZWFyY2goKVwiPnt7IGlzRW5nbGlzaCA/ICdTZWUgYWxsJyA6ICdWZXIgVG9kb3MnIH19PC9hPlxyXG5cdFx0XHRcdFx0PC9wPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiY29sLWxnLTMgbXgtbGctMiBteC1tZC0yIGNvbC0xMiBtYi0yIG1iLWxnLTAgYm9yZGVyIGJvcmRlci1ncmV5aXNoIGJvcmRhLWNvclwiIHR5cGU9XCJ0ZXh0XCIgOnBsYWNlaG9sZGVyPVwiIWlzRW5nbGlzaCA/ICdCdXNjYXInIDogJ1NlYXJjaCdcIiB2LW1vZGVsPVwiZmlsdHJvcy5rZXl3b3Jkc1wiICBAa2V5cHJlc3MuZW50ZXIucHJldmVudD1cImRvU2VhcmNoKGlzRGlzcCwwKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJjb2wtbGctMyBteC1sZy0yIG14LW1kLTIgY29sLTEyIG1iLTIgbWItbGctMCBwbC0yIHRleHQtbXV0ZWQgIGJvcmRlciBib3JkZXItZ3JleWlzaCBib3JkYS1jb3JcIiB2LW1vZGVsPVwiZmlsdHJvcy5hcmVhXCIgQGNoYW5nZT1cIm9uQ2hhbmdlQXJlYVwiIEBrZXlwcmVzcy5lbnRlci5wcmV2ZW50PVwiZG9TZWFyY2goaXNEaXNwLDApXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gY2xhc3M9XCJmb250LXdlaWdodC1ib2xkXCIgOnZhbHVlPVwibnVsbFwiPnt7IWlzRW5nbGlzaCA/ICfDgXJlYXMnIDogJ1ByYWN0aWNlIGFyZWEnfX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiA6dmFsdWU9XCJpdGVtLlNlb1VSTFwiIHJlbD1cImFyZWFcIiB2LWZvcj1cIml0ZW0gaW4gYXJlYXNcIj57eyAhaXNFbmdsaXNoID8gaXRlbS5UaXRsZSA6IChpdGVtLlRpdGxlRU4gfHwgaXRlbS5UaXRsZSkgfX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiY29sLWxnLTIgbXgtbGctMiBteC1tZC0yIGNvbC0xMiBtYi0yIG1iLWxnLTAgcGwtMiB0ZXh0LW11dGVkIGJvcmRlciBib3JkZXItZ3JleWlzaCBib3JkYS1jb3JcIiB2LW1vZGVsPVwiZmlsdHJvcy5wb3NpY2FvXCIgQGtleXByZXNzLmVudGVyLnByZXZlbnQ9XCJkb1NlYXJjaChpc0Rpc3AsIDApXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gOnZhbHVlPVwibnVsbFwiPnt7IGlzRW5nbGlzaCA/ICdQb3NpdGlvbicgOiAnUG9zacOnw6NvJyB9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIDp2YWx1ZT1cIml0ZW0uU2VvVVJMXCIgdi1mb3I9XCJpdGVtIGluIHRpcG9Qcm9maXNzaW9uYWlzXCI+e3sgIWlzRW5nbGlzaCA/IGl0ZW0uVGl0bGUgOiAoaXRlbS5UaXRsZUVOIHx8IGl0ZW0uVGl0bGUpIH19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+IFx0XHJcbiAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImNvbC1sZy0yIG14LWxnLTIgbXgtbWQtMiBjb2wtMTIgbWItMiBtYi1sZy0wIHBsLTIgdGV4dC1tdXRlZCBib3JkZXIgYm9yZGVyLWdyZXlpc2ggYm9yZGEtY29yXCIgdi1tb2RlbD1cImZpbHRyb3MuZXNjcml0b3Jpb1wiIEBrZXlwcmVzcy5lbnRlci5wcmV2ZW50PVwiZG9TZWFyY2goaXNEaXNwLCAwKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIDp2YWx1ZT1cIm51bGxcIj57eyAhaXNFbmdsaXNoID8gJ0VzY3JpdMOzcmlvcycgOiAnT2ZmaWNlcycgfX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiA6dmFsdWU9XCJpdGVtLlNlb1VSTFwiIHYtZm9yPVwiaXRlbSBpbiBlc2NyaXRvcmlvc1wiPnt7IGl0ZW0uVGl0bGUgfX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBAY2xpY2s9XCJkb1NlYXJjaChpc0Rpc3AsIDApXCIgY2xhc3M9XCJcIiBzdHlsZT1cImZvbnQtc2l6ZTogMWVtO1wiPjxpIGNsYXNzPVwiZmEgZmEtc2VhcmNoIG14LWF1dG8gbWwtbGctMFwiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgYCxcclxuICBtZXRob2RzOiB7XHJcbiAgICBvbkNoYW5nZUFyZWEoZSkge1xyXG4gICAgICBWdWUuc2V0KHRoaXMuZmlsdHJvcywgXCJhcmVhXCIsIG51bGwpO1xyXG4gICAgICBWdWUuc2V0KHRoaXMuZmlsdHJvcywgXCJzZXRvclwiLCBudWxsKTtcclxuICAgICAgVnVlLnNldCh0aGlzLmZpbHRyb3MsIFwiZGVza1wiLCBudWxsKTtcclxuXHJcbiAgICAgIHZhciB2YWwgPSBlLnRhcmdldC52YWx1ZTtcclxuICAgICAgdmFyIHRhcmdldCA9XHJcbiAgICAgICAgZS50YXJnZXQub3B0aW9uc1tlLnRhcmdldC5vcHRpb25zLnNlbGVjdGVkSW5kZXhdLmdldEF0dHJpYnV0ZShcInJlbFwiKTtcclxuICAgICAgVnVlLnNldCh0aGlzLmZpbHRyb3MsIHRhcmdldCwgdmFsKTtcclxuICAgIH0sXHJcbiAgICBwZXJzaXN0U2VhcmNoKCkge1xyXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLmZpbHRyb3MpLm1hcCgoZmlsdHJvKSA9PiB7XHJcbiAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5nZXRIYXNoUGFyYW0oZmlsdHJvKTtcclxuICAgICAgICB2YWx1ZSA9IHZhbHVlID8gZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlKSA6IG51bGw7XHJcblxyXG4gICAgICAgIFZ1ZS5zZXQodGhpcy5maWx0cm9zLCBmaWx0cm8sIHZhbHVlKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICBWdWUubmV4dFRpY2socmVzb2x2ZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSxcclxuICAgIGdldEhhc2hQYXJhbShuYW1lKSB7XHJcbiAgICAgIGlmIChuYW1lKSB7XHJcbiAgICAgICAgdmFyIGhhc2ggPSB3aW5kb3cubG9jYXRpb24uaGFzaC5zdWJzdHIoMSk7XHJcblxyXG4gICAgICAgIHZhciByZXN1bHQgPSBoYXNoLnNwbGl0KFwiJlwiKS5yZWR1Y2UoZnVuY3Rpb24gKHJlc3VsdCwgaXRlbSkge1xyXG4gICAgICAgICAgdmFyIHBhcnRzID0gaXRlbS5zcGxpdChcIj1cIik7XHJcbiAgICAgICAgICByZXN1bHRbcGFydHNbMF1dID0gcGFydHNbMV07XHJcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH0sIHt9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdFtuYW1lXTtcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIGRvU2VhcmNoKGlzRGlzcCwgaXNGaXJzdCkge1xyXG4gICAgICB2YXIgcXVlcnkgPSBbXTtcclxuICAgICAgdmFyIHBhcmFtVVJMID0gW107XHJcbiAgICAgIGlmICh0aGlzLmZpbHRyb3Mua2V5d29yZHMpIHtcclxuICAgICAgICBxdWVyeS5wdXNoKFxyXG4gICAgICAgICAgYChUaXRsZTpcIiR7dGhpcy5maWx0cm9zLmtleXdvcmRzfSpcIiBPUiBiaWNoYXJhTm9tZUNvbXA6XCIqJHt0aGlzLmZpbHRyb3Mua2V5d29yZHN9KlwiIE9SIGJpY2hhcmFGdWxsTmFtZTpcIioke3RoaXMuZmlsdHJvcy5rZXl3b3Jkc30qXCIpYFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcGFyYW1VUkwucHVzaChga2V5d29yZHM9JHt0aGlzLmZpbHRyb3Mua2V5d29yZHN9YCk7XHJcblxyXG4gICAgICAgIC8vIGRlc2F0aXZhZG8gcG9yIHNvbGljaXRhw6fDo28gZGUgQnJ1bmEgQmVuaWdubyBlbSAxNS8wNS5cclxuICAgICAgICAvL09SIGJpY2hhcmFBdXhBdHVhY2FvOlwiKiR7dGhpcy5maWx0cm9zLmtleXdvcmRzfSpcIiBPUiBiaWNoYXJhQXV4SWRpb21hOlwiKiR7dGhpcy5maWx0cm9zLmtleXdvcmRzfSpcIiBPUiBiaWNoYXJhRW1haWw6XCIqJHt0aGlzLmZpbHRyb3Mua2V5d29yZHN9KlwiIE9SIGJpY2hhcmFBdXhUaXBvUHJvZlNlb1VSTDpcIioke3RoaXMuZmlsdHJvcy5rZXl3b3Jkc30qXCIpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLmZpbHRyb3MuZXNjcml0b3Jpbykge1xyXG4gICAgICAgIHF1ZXJ5LnB1c2goYGJpY2hhcmFVbmlkYWRlU2VvVVJMOicke3RoaXMuZmlsdHJvcy5lc2NyaXRvcmlvfSdgKTtcclxuICAgICAgICBwYXJhbVVSTC5wdXNoKGBlc2NyaXRvcmlvPSR7dGhpcy5maWx0cm9zLmVzY3JpdG9yaW99YCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLmZpbHRyb3MuYXJlYSkge1xyXG4gICAgICAgIC8vIHZlcmlmaWNhw6fDo28gcGFyYSByZXRvcm5hciBhcGVuYXMgPT09IGVtcHJlc2FyaWFsIGFvIGNvbnN1bHRhciBwb3Igw6FyZWFcclxuICAgICAgICBpZiAodGhpcy5maWx0cm9zLmFyZWEgPT0gXCJlbXByZXNhcmlhbFwiKSB7XHJcbiAgICAgICAgICBxdWVyeS5wdXNoKFxyXG4gICAgICAgICAgICBgYmljaGFyYUF1eEF0dWFjYW9TZW9VUkw6KmVtcHJlc2FyaWFsKiBBTkQgTk9UIGJpY2hhcmFBdXhBdHVhY2FvU2VvVVJMOipwZW5hbCpgXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBxdWVyeS5wdXNoKGBiaWNoYXJhQXV4QXR1YWNhb1Nlb1VSTDoqJHt0aGlzLmZpbHRyb3MuYXJlYX0qYCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwYXJhbVVSTC5wdXNoKGBhcmVhPSR7dGhpcy5maWx0cm9zLmFyZWF9YCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLmZpbHRyb3MucG9zaWNhbykge1xyXG4gICAgICAgIHF1ZXJ5LnB1c2goYGJpY2hhcmFBdXhUaXBvUHJvZlNlb1VSTDonJHt0aGlzLmZpbHRyb3MucG9zaWNhb30nYCk7XHJcbiAgICAgICAgcGFyYW1VUkwucHVzaChgcG9zaWNhbz0ke3RoaXMuZmlsdHJvcy5wb3NpY2FvfWApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5maWx0cm9zLmxldHJhKSB7XHJcbiAgICAgICAgcXVlcnkucHVzaChgYmljaGFyYVBMOicke3RoaXMuZmlsdHJvcy5sZXRyYX0nYCk7XHJcbiAgICAgICAgcGFyYW1VUkwucHVzaChgbGV0cmE9JHt0aGlzLmZpbHRyb3MubGV0cmF9YCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHF1ZXJ5ID0gcXVlcnkuam9pbihcIiBBTkQgXCIpO1xyXG4gICAgICBwYXJhbVVSTCA9IHBhcmFtVVJMLmpvaW4oXCImXCIpO1xyXG5cclxuICAgICAgdGhpcy4kZW1pdChcImNoYW5nZS1xdWVyeVwiLCBxdWVyeSk7XHJcbiAgICAgIC8vIHZlcmlmaWNhbmRvIHNlIGVzdMOhIG5hIGRpc3AsIGUgcmVkaXJlY2lvbmFuZG8gcHJhIHBhZ2luYSBkZSBidXNjYSBkZSBwcm9maXNzaW9uYWlzXHJcbiAgICAgIGlmIChpc0Rpc3AgJiYgIWlzRmlyc3QpIHtcclxuICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IGAke19zcFBhZ2VDb250ZXh0SW5mby5zaXRlQWJzb2x1dGVVcmx9L3Byb2Zpc3Npb25haXMjJHtwYXJhbVVSTH1gO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5oYXNoID0gcGFyYW1VUkw7XHJcbiAgICAgIH1cclxuICAgICAgd2luZG93LmxvY2F0aW9uLmhhc2ggPSBwYXJhbVVSTDtcclxuICAgIH0sXHJcbiAgICBjbGVhclNlYXJjaCgpIHtcclxuICAgICAgdGhpcy5maWx0cm9zID0gT2JqZWN0LmtleXModGhpcy5maWx0cm9zKS5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XHJcbiAgICAgICAgYWNjW2tleV0gPSBudWxsO1xyXG4gICAgICAgIHJldHVybiBhY2M7XHJcbiAgICAgIH0sIHt9KTtcclxuXHJcbiAgICAgIHRoaXMuZG9TZWFyY2godGhpcy5pc0Rpc3ApO1xyXG4gICAgICB0aGlzLnNjcm9sbFRvUmVzdWx0cygpO1xyXG4gICAgfSxcclxuICAgIGdldEVzY3JpdG9yaW9zKCkge1xyXG4gICAgICB2YXIgd2ViID0gbmV3ICRwbnAuV2ViKF9zcFBhZ2VDb250ZXh0SW5mby5zaXRlQWJzb2x1dGVVcmwpO1xyXG4gICAgICByZXR1cm4gd2ViXHJcbiAgICAgICAgLmdldExpc3QodGhpcy5lc2NyaXRvcmlvc1VSTClcclxuICAgICAgICAuaXRlbXMuc2VsZWN0KFwiKlwiKVxyXG4gICAgICAgIC5vcmRlckJ5KFwiT3JkZW1cIiwgdHJ1ZSlcclxuICAgICAgICAudG9wKDEwMClcclxuICAgICAgICAuZ2V0KClcclxuICAgICAgICAudGhlbigocmVzdWx0cykgPT4ge1xyXG4gICAgICAgICAgVnVlLnNldCh0aGlzLCBcImVzY3JpdG9yaW9zXCIsIHJlc3VsdHMpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSxcclxuICAgIGdldEFyZWFzKCkge1xyXG4gICAgICB2YXIgd2ViID0gbmV3ICRwbnAuV2ViKF9zcFBhZ2VDb250ZXh0SW5mby5zaXRlQWJzb2x1dGVVcmwpO1xyXG4gICAgICByZXR1cm4gd2ViXHJcbiAgICAgICAgLmdldExpc3QodGhpcy5hcmVhc1VSTClcclxuICAgICAgICAuaXRlbXMuZmlsdGVyKFxyXG4gICAgICAgICAgYFRpdGxlIG5lICdDb23DqXJjaW8gSW50ZXJuYWNpb25hbCcgYW5kIEZpbHRyYXJQZXNxdWlzYSBlcSAnU2ltJyBhbmQgQXRpdm8gZXEgMWBcclxuICAgICAgICApXHJcbiAgICAgICAgLnNlbGVjdChcIipcIilcclxuICAgICAgICAub3JkZXJCeShcIlRpdGxlXCIsIHRydWUpXHJcbiAgICAgICAgLnRvcCgxMDApXHJcbiAgICAgICAgLmdldCgpXHJcbiAgICAgICAgLnRoZW4oKHJlc3VsdHMpID0+IHtcclxuICAgICAgICAgIHJlc3VsdHMgPSByZXN1bHRzLmZpbHRlcigoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIWl0ZW0uSXRlbVBhaUlkKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5hcmVhcy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH0sXHJcbiAgICBnZXRUaXBvUHJvZmlzc2lvbmFsKGNvbnN1bHRvcikge1xyXG4gICAgICB2YXIgd2ViID0gbmV3ICRwbnAuV2ViKF9zcFBhZ2VDb250ZXh0SW5mby5zaXRlQWJzb2x1dGVVcmwpO1xyXG4gICAgICB2YXIgZmlsdGVyID0gW2BUaXRsZSBuZSAnUHJvZmlzc2lvbmFsJ2BdO1xyXG4gICAgICBpZiAoY29uc3VsdG9yLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgZmlsdGVyID0gYCR7ZmlsdGVyfSBhbmQgVGl0bGUgbmUgJ0NvbnN1bHRvcidgO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gd2ViXHJcbiAgICAgICAgLmdldExpc3QodGhpcy50aXBvUHJvZmlzc2lvbmFpc1VybClcclxuICAgICAgICAuaXRlbXMuc2VsZWN0KFwiKlwiKVxyXG4gICAgICAgIC5maWx0ZXIoZmlsdGVyKVxyXG4gICAgICAgIC5vcmRlckJ5KFwiVGl0bGVcIiwgdHJ1ZSlcclxuICAgICAgICAudG9wKDEwMClcclxuICAgICAgICAuZ2V0KClcclxuICAgICAgICAudGhlbigocmVzdWx0cykgPT4ge1xyXG4gICAgICAgICAgVnVlLnNldCh0aGlzLCBcInRpcG9Qcm9maXNzaW9uYWlzXCIsIHJlc3VsdHMpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSxcclxuICAgIGNoZWtjUHJvZmlzc2lvbmFsQ29uc3VsdG9yKCkge1xyXG4gICAgICByZXR1cm4gJHBucC5zcC53ZWJcclxuICAgICAgICAuZ2V0TGlzdChcclxuICAgICAgICAgIGAke19zcFBhZ2VDb250ZXh0SW5mby53ZWJTZXJ2ZXJSZWxhdGl2ZVVybH1saXN0cy9Qcm9maXNzaW9uYWlzYFxyXG4gICAgICAgIClcclxuICAgICAgICAuaXRlbXMuc2VsZWN0KGBBdXhUaXBvUHJvZmlzc2lvbmFsL1RpdGxlYClcclxuICAgICAgICAuZmlsdGVyKGBBdXhUaXBvUHJvZmlzc2lvbmFsL1RpdGxlIGVxICdDb25zdWx0b3InYClcclxuICAgICAgICAuZXhwYW5kKGBBdXhUaXBvUHJvZmlzc2lvbmFsYClcclxuICAgICAgICAudG9wKDEwMClcclxuICAgICAgICAuZ2V0KClcclxuICAgICAgICAudGhlbigocHJvZkNvbnN1bHRvcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5nZXRUaXBvUHJvZmlzc2lvbmFsKHByb2ZDb25zdWx0b3IpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSxcclxuICAgIGZpbHRlckxldHRlcihjdXJyZW50TGV0cmEpIHtcclxuICAgICAgdGhpcy5maWx0cm9zLmxldHJhID0gY3VycmVudExldHJhO1xyXG4gICAgICBpZiAoY3VycmVudExldHJhKSB0aGlzLmRvU2VhcmNoKHRoaXMuaXNEaXNwKTtcclxuICAgICAgdGhpcy5zY3JvbGxUb1Jlc3VsdHMoKTtcclxuICAgIH0sXHJcbiAgICBzY3JvbGxUb1Jlc3VsdHMoKSB7XHJcbiAgICAgIGlmICh0aGlzLmlzTW9iaWxlKSB7XHJcbiAgICAgICAgJChcImh0bWwsIGJvZHlcIikuYW5pbWF0ZShcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgc2Nyb2xsVG9wOiAkKFwiLnByb2Zpc3Npb25haXMtbGlzdFwiKS5vZmZzZXQoKS50b3AgLSA4MCxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICAxMDAwXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSxcclxuICB9LFxyXG4gIGNyZWF0ZWQoKSB7XHJcbiAgICB0aGlzLnBlcnNpc3RTZWFyY2goKS50aGVuKHRoaXMuZG9TZWFyY2guYmluZCh0aGlzLCB0aGlzLmlzRGlzcCwgdHJ1ZSkpO1xyXG4gICAgdGhpcy5nZXRFc2NyaXRvcmlvcygpO1xyXG4gICAgdGhpcy5nZXRBcmVhcygpO1xyXG4gICAgdGhpcy5jaGVrY1Byb2Zpc3Npb25hbENvbnN1bHRvcigpO1xyXG4gIH0sXHJcbn0pO1xyXG4iLCJyZXF1aXJlKFwiLi4vLi4vbWl4aW5zL3RyYW5zbGF0ZVwiKTtcclxucmVxdWlyZShcIi4uLy4uL2NvbXBvbmVudHMvcGFnaW5hdGlvblwiKTtcclxucmVxdWlyZShcIi4vaW5wdXRzLWJ1c2NhLXByb2Zpc3Npb25haXNcIik7XHJcblxyXG5WdWUuY29tcG9uZW50KGBwcm9maXNzaW9uYWlzYCwge1xyXG4gIG1peGluczogW3RyYW5zbGF0ZU1peGluXSxcclxuICBkYXRhKCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcmVzdWx0c1Byb2Zpc3Npb25haXM6IFtdLFxyXG4gICAgICBpdGVtc1BlclBhZ2U6IHRoaXMudmVyaWZ5UGFnZSA/IDggOiAxMCxcclxuICAgICAgY3VycmVudFBhZ2U6IDAsXHJcbiAgICAgIGxhc3RRdWVyeTogbnVsbCxcclxuICAgICAgc2hvd0xvYWRpbmc6IGZhbHNlLFxyXG4gICAgICBpc01vYmlsZTogd2luZG93LmlubmVyV2lkdGggPD0gOTk2LFxyXG4gICAgICBoYXNoUGFyYW06IHdpbmRvdy5sb2NhdGlvbi5oYXNoLnN1YnN0cigxKSA/IHRydWUgOiBmYWxzZSxcclxuICAgIH07XHJcbiAgfSxcclxuICBwcm9wczoge1xyXG4gICAgc2hvd1NlYXJjaDoge1xyXG4gICAgICBkZWZhdWx0OiB0cnVlLFxyXG4gICAgfSxcclxuICB9LFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8ZGl2IGlkPVwicHJvZmlzc2lvbmFpc1wiPlxyXG4gICAgICAgIDxpbnB1dHMtYnVzY2EtcHJvZmlzc2lvbmFpcyBAcmVzZXQtcGFnZT1cInJlc2V0UGFnZSgpXCIgQGNoYW5nZS1xdWVyeT1cImRvU2VhcmNoXCIgdi1zaG93PVwidmVyaWZ5UGFnZSgpXCIgLz5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZmlzc2lvbmFpcy1saXN0IG10LTVcIj4gICBcclxuICAgICAgICAgICAgPHRlbXBsYXRlIHYtaWY9XCJzaG93TG9hZGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm14LWF1dG8gdGV4dC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Bpbm5lci1ib3JkZXIgdGV4dC1zZWNvbmRhcnlcIiByb2xlPVwic3RhdHVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPkxvYWRpbmcuLi48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtdC0zXCI+e3sgaXNFbmdsaXNoID8gJ0xvYWRpbmcgcHJvZmVzc2lvbmFscywgcGxlYXNlIHdhaXQuLi4nIDogJ0xvY2FsaXphbmRvIHByb2Zpc3Npb25haXMsIHBvciBmYXZvciBhZ3VhcmRlLi4uJyB9fTwvcD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PiBcclxuICAgICAgICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPHRlbXBsYXRlIHYtZWxzZS1pZj1cIiFyZXN1bHRzUHJvZmlzc2lvbmFpcy5Ub3RhbFJvd3NcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteC1hdXRvIHRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGgyIGNsYXNzPVwiZGlzcGxheS0zXCI+PGkgY2xhc3M9XCJmYXIgZmEtZnJvd24gdGV4dC1zZWNvbmRhcnlcIj48L2k+PC9oMj5cclxuICAgICAgICAgICAgICAgICAgICA8cD57eyBpc0VuZ2xpc2ggPyAnTm8gcmVzdWx0cyBmb3VuZC4nIDogJ05lbmh1bSByZXN1bHRhZG8gZW5jb250cmFkby4nIH19PC9wPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LWVsc2U+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTYgY29sLTEyIG1iLTRcIiB2LWZvcj1cImNvbGFiIGluIHJlc3VsdHNQcm9maXNzaW9uYWlzLlByaW1hcnlTZWFyY2hSZXN1bHRzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyIGJvcmRlci1ncmV5aXNoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBmb3RvIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTQgcGwtMSBtdC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSA6aHJlZj1cImdldERpc3BVUkwoY29sYWIuYmljaGFyYVNlb1VSTClcIiA6dGl0bGU9XCInVmlzaXRhciBvIHBlcmZpbCBkZSAnICsgY29sYWIuYmljaGFyYU5vbWVDb21wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cInNvbWJyYS1zbSB3LTEwMFwiIDpzcmM9XCJnZXRBdmF0YXIoY29sYWIuYmljaGFyYUZvdG8pXCIgOmFsdD1cImNvbGFiLmJpY2hhcmFOb21lQ29tcFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGRhZG9zIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTggcGwtMiBwbC1zbS0zIHByLTIgcHItc20tMCBtdC0yIHBiLTMgaW5mb3MtY29udGF0b1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgOmhyZWY9XCJnZXREaXNwVVJMKGNvbGFiLmJpY2hhcmFTZW9VUkwpXCIgOnRpdGxlPVwiJ1Zpc2l0YXIgbyBwZXJmaWwgZGUnICsgY29sYWIuYmljaGFyYU5vbWVDb21wXCIgY2xhc3M9XCJsaW5rLW5vbWUtcHJvZlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cInRleHQtc2Vjb25kYXJ5IGZvbnQtd2VpZ2h0LWJvbGQgbWItMiBtdC0yXCI+e3sgY29sYWIuYmljaGFyYU5vbWVDb21wIH19PC9oNT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNiBjbGFzcz1cInRleHQtZGFyayBtYi0zXCIgdi1pZj1cImNvbGFiLmJpY2hhcmFBdXhBdHVhY2FvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+e3sgaXNFbmdsaXNoID8gY29sYWIuYmljaGFyYUF1eFRpcG9Qcm9mRU4gOiBjb2xhYi5iaWNoYXJhQXV4VGlwb1Byb2YgfX08L2I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW11dGVkXCI+IC0ge3sgaXNFbmdsaXNoID8gY29sYWIuYmljaGFyYUF1eEF0dWFjYW9FTi5yZXBsYWNlKC87L2dpLCAnIHwgJykgOiBjb2xhYi5iaWNoYXJhQXV4QXR1YWNhby5yZXBsYWNlKC87L2dpLCAnIHwgJykgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g2PiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LWlmPVwiIWlzTW9iaWxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGhyIGNsYXNzPVwiYm9yZGVyLXRvcCBib3JkZXItZ3JleWlzaCBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWRhcmsgbWItMVwiIHYtaWY9XCJjb2xhYi5iaWNoYXJhRW1haWxcIj48aSBjbGFzcz1cImZhIGZhLWVudmVsb3BlIHRleHQtc2Vjb25kYXJ5XCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSA6aHJlZj1cIidtYWlsdG86JysgY29sYWIuYmljaGFyYUVtYWlsXCIgdGl0bGU9XCJFbnZpYXIgZS1tYWlsXCI+e3sgY29sYWIuYmljaGFyYUVtYWlsIH19PC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJjb2wtMTIgbWItMCBpZGlvbWFzXCIgdi1pZj1cImNvbGFiLmJpY2hhcmFBdXhJZGlvbWFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWNvbW1lbnQtYWx0IHRleHQtc2Vjb25kYXJ5XCI+PC9pPiB7eyBpc0VuZ2xpc2ggPyBzaG93VW5pZGFkZShjb2xhYi5iaWNoYXJhQXV4SWRpb21hRU4pIDogc2hvd1VuaWRhZGUoY29sYWIuYmljaGFyYUF1eElkaW9tYSkgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImNvbC0xMiBtYi0wXCIgdi1pZj1cImNvbGFiLmJpY2hhcmFVbmlkYWRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLW1hcC1tYXJrZXItYWx0IHRleHQtc2Vjb25kYXJ5XCI+PC9pPiB7eyBzaG93VW5pZGFkZShjb2xhYi5iaWNoYXJhVW5pZGFkZSkgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIHYtaWY9XCJpc01vYmlsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG0tMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBwLTIgaW5mb3MtY29udGF0b1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxociBjbGFzcz1cImJvcmRlci10b3AgYm9yZGVyLWdyZXlpc2ggbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1kYXJrIG1iLTFcIiB2LWlmPVwiY29sYWIuYmljaGFyYUVtYWlsXCI+PGkgY2xhc3M9XCJmYSBmYS1lbnZlbG9wZSB0ZXh0LXNlY29uZGFyeVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgOmhyZWY9XCInbWFpbHRvOicrIGNvbGFiLmJpY2hhcmFFbWFpbFwiIHRpdGxlPVwiRW52aWFyIGUtbWFpbFwiPnt7IGNvbGFiLmJpY2hhcmFFbWFpbCB9fTwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiY29sLTEyIG1iLTAgaWRpb21hc1wiIHYtaWY9XCJjb2xhYi5iaWNoYXJhQXV4SWRpb21hXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1jb21tZW50LWFsdCB0ZXh0LXNlY29uZGFyeVwiPjwvaT4ge3sgaXNFbmdsaXNoID8gIHNob3dVbmlkYWRlKGNvbGFiLmJpY2hhcmFBdXhJZGlvbWFFTikgOiBzaG93VW5pZGFkZShjb2xhYi5iaWNoYXJhQXV4SWRpb21hKSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiY29sLW1kLTYgbWItMFwiIHYtaWY9XCJjb2xhYi5iaWNoYXJhVW5pZGFkZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1tYXAtbWFya2VyLWFsdCB0ZXh0LXNlY29uZGFyeVwiPjwvaT4ge3sgc2hvd1VuaWRhZGUoY29sYWIuYmljaGFyYVVuaWRhZGUpIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYWdpbmF0aW9uIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2LWlmPVwicmVzdWx0c1Byb2Zpc3Npb25haXMuVG90YWxSb3dzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgOml0ZW1zLXBlci1wYWdlPVwiaXRlbXNQZXJQYWdlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgOnRvdGFsLWl0ZW1zPVwicmVzdWx0c1Byb2Zpc3Npb25haXMuVG90YWxSb3dzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgOmFjdGl2ZS1wYWdlPVwiY3VycmVudFBhZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6dmlzaWJsZS1wYWdlcz1cIjZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBAcGFnZS1jaGFuZ2VkPVwib25DbGlja1BhZ2VOdW1cIlxyXG4gICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgYCxcclxuICBtZXRob2RzOiB7XHJcbiAgICBvbkNsaWNrUGFnZU51bShjdXJyZW50UGFnZSkge1xyXG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gY3VycmVudFBhZ2U7XHJcbiAgICAgIHRoaXMuZG9TZWFyY2godGhpcy5sYXN0UXVlcnksIHRydWUpO1xyXG4gICAgICBpZiAodGhpcy5pc01vYmlsZSkge1xyXG4gICAgICAgICQoXCJodG1sLCBib2R5XCIpLmFuaW1hdGUoXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHNjcm9sbFRvcDogJChcIi50YXJnZXRcIikub2Zmc2V0KCkudG9wLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIDEwMDBcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgZG9TZWFyY2gocXVlcnkgPSBudWxsLCBpc1BhZ2luYXRpb24pIHtcclxuICAgICAgaWYgKCFpc1BhZ2luYXRpb24pIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gMDtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gdmVyaWZpY2FuZG8gc2UgZXhpc3RlIHBhcmFtZXRybyBuYSB1cmwsIHNlIHNpbSxcclxuXHJcbiAgICAgIFZ1ZS5zZXQodGhpcywgXCJyZXN1bHRzUHJvZmlzc2lvbmFpc1wiLCB7fSk7XHJcbiAgICAgIHRoaXMuc2hvd0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgICB2YXIgc2VhcmNoUHJvcHMgPSBbXHJcbiAgICAgICAgXCJiaWNoYXJhQXV4VGlwb1Byb2ZPcmRlbVwiLFxyXG4gICAgICAgIFwiYmljaGFyYU5vbWVDb21wXCIsXHJcbiAgICAgICAgXCJiaWNoYXJhQXV4QXR1YWNhb1wiLFxyXG4gICAgICAgIFwiYmljaGFyYUF1eEF0dWFjYW9TZW9VUkxcIixcclxuICAgICAgICBcImJpY2hhcmFBdXhBdHVhY2FvRU5cIixcclxuICAgICAgICBcImJpY2hhcmFBdXhUaXBvUHJvZlwiLFxyXG4gICAgICAgIFwiYmljaGFyYUF1eFRpcG9Qcm9mU2VvVVJMXCIsXHJcbiAgICAgICAgXCJiaWNoYXJhQXV4VGlwb1Byb2ZFTlwiLFxyXG4gICAgICAgIFwiYmljaGFyYUVtYWlsXCIsXHJcbiAgICAgICAgXCJiaWNoYXJhRm90b1wiLFxyXG4gICAgICAgIFwiYmljaGFyYVRlbENvbWVyY2lhbFwiLFxyXG4gICAgICAgIFwiYmljaGFyYVVuaWRhZGVcIixcclxuICAgICAgICBcImJpY2hhcmFVbmlkYWRlU2VvVVJMXCIsXHJcbiAgICAgICAgXCJiaWNoYXJhU2VvVVJMXCIsXHJcbiAgICAgICAgXCJiaWNoYXJhUHJvZkF0aXZvXCIsXHJcbiAgICAgICAgXCJiaWNoYXJhQXV4SWRpb21hXCIsXHJcbiAgICAgICAgXCJiaWNoYXJhQXV4SWRpb21hRU5cIixcclxuICAgICAgICBcImJpY2hhcmFUYWdzXCIsXHJcbiAgICAgICAgXCJiaWNoYXJhTGlzdGFcIixcclxuICAgICAgICBcImJpY2hhcmFGdWxsTmFtZVwiLFxyXG4gICAgICAgIFwiUGF0aFwiLFxyXG4gICAgICBdO1xyXG5cclxuICAgICAgdGhpcy5sYXN0UXVlcnkgPSBxdWVyeTtcclxuICAgICAgdmFyIHNvcnRMaXN0ID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIFByb3BlcnR5OiBcImJpY2hhcmFOb21lQ29tcFwiLFxyXG4gICAgICAgICAgRGlyZWN0aW9uOiAwLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIF07XHJcblxyXG4gICAgICB2YXIgZmlsdHJvQnVzY2EgPSBbXHJcbiAgICAgICAgYGJpY2hhcmFQcm9mQXRpdm86dHJ1ZSBBTkQgYmljaGFyYUxpc3RhOlwiQ3VycsOtY3VsbyBQcm9maXNzaW9uYWxcIiBBTkQgcGF0aDpcIiR7X3NwUGFnZUNvbnRleHRJbmZvLndlYkFic29sdXRlVXJsfVwiYCxcclxuICAgICAgXTtcclxuICAgICAgLy8gaWYocXVlcnkpe1xyXG4gICAgICAvLyAgICAgaWYocXVlcnkubWF0Y2goL1RpdGxlOi9pKSl7XHJcbiAgICAgIC8vICAgICAgICAgZmlsdHJvQnVzY2EgPSBbYGJpY2hhcmFQcm9mQXRpdm86dHJ1ZSBBTkQgYmljaGFyYUxpc3RhOlwiQ3VycsOtY3VsbyBQcm9maXNzaW9uYWxcIiBBTkQgcGF0aDpcIiR7X3NwUGFnZUNvbnRleHRJbmZvLndlYkFic29sdXRlVXJsfVwiYF07XHJcbiAgICAgIC8vICAgICAgICAgY29uc29sZS5sb2codGhpcy5maWx0cm9CdXNjYSlcclxuICAgICAgLy8gICAgIH1cclxuICAgICAgLy8gfVxyXG5cclxuICAgICAgLy8gaWYodGhpcy5hcmVhQnVzY2Epe1xyXG4gICAgICAvLyAgICAgZmlsdHJvQnVzY2EucHVzaChgYmljaGFyYUF1eEF0dWFjYW9TZW9VUkw6XCIke3RoaXMuYXJlYUJ1c2NhfVwiYCk7XHJcbiAgICAgIC8vIH1cclxuXHJcbiAgICAgIC8vIGlmKHRoaXMua2V5d29yZHNCdXNjYSl7XHJcbiAgICAgIC8vICAgICBkZWJ1Z2dlclxyXG4gICAgICAvLyAgICAgaWYocXVlcnkubWF0Y2goL1RpdGxlL2kpKXtcclxuICAgICAgLy8gICAgICAgICBxdWVyeSA9ICcnO1xyXG4gICAgICAvLyAgICAgfVxyXG4gICAgICAvLyAgICAgZmlsdHJvQnVzY2EucHVzaChgYmljaGFyYU5vbWVDb21wOlwiKiR7dGhpcy5rZXl3b3Jkc0J1c2NhfSpcImApXHJcbiAgICAgIC8vIH1cclxuXHJcbiAgICAgIC8vdGhpcy5sYXN0UXVlcnkgPSBmaWx0cm9CdXNjYS5qb2luKCcgQU5EICcpO1xyXG5cclxuICAgICAgcmV0dXJuICRwbnAuc3BcclxuICAgICAgICAuc2VhcmNoKHtcclxuICAgICAgICAgIFF1ZXJ5dGV4dDogYCR7ZmlsdHJvQnVzY2Euam9pbihcIiBBTkQgXCIpfSR7XHJcbiAgICAgICAgICAgIHF1ZXJ5ID8gXCIgQU5EIFwiICsgcXVlcnkgOiBcIlwiXHJcbiAgICAgICAgICB9YCxcclxuICAgICAgICAgIFJvd0xpbWl0OiB0aGlzLml0ZW1zUGVyUGFnZSxcclxuICAgICAgICAgIEVuYWJsZUludGVybGVhdmluZzogdHJ1ZSxcclxuICAgICAgICAgIFNvdXJjZUlkOiBcIjZlN2U0YzRhLTNkYzQtNDllYi05ODM4LThjOGE5MGEzZDExZFwiLFxyXG4gICAgICAgICAgU2VsZWN0UHJvcGVydGllczogc2VhcmNoUHJvcHMsXHJcbiAgICAgICAgICBTdGFydFJvdzogdGhpcy5pdGVtc1BlclBhZ2UgKiB0aGlzLmN1cnJlbnRQYWdlLFxyXG4gICAgICAgICAgUXVlcnlUZW1wbGF0ZVByb3BlcnRpZXNVcmw6XHJcbiAgICAgICAgICAgIFwic3BmaWxlOi8vd2Vicm9vdC9xdWVyeXBhcmFtZXRlcnRlbXBsYXRlLnhtbFwiLCAvLyBwYXJhIGZ1bmNpb25hciBhbm9uaW1vXHJcbiAgICAgICAgICBTb3J0TGlzdDogc29ydExpc3QsXHJcbiAgICAgICAgICBUcmltRHVwbGljYXRlczogdHJ1ZSxcclxuICAgICAgICB9KVxyXG4gICAgICAgIC50aGVuKChyZXN1bHRzKSA9PiB7XHJcbiAgICAgICAgICBWdWUuc2V0KHRoaXMsIFwicmVzdWx0c1Byb2Zpc3Npb25haXNcIiwgcmVzdWx0cyk7XHJcbiAgICAgICAgICB0aGlzLiRlbWl0KFxyXG4gICAgICAgICAgICBcImxvYWRlZC1wcm9maXNzaW9uYWlzXCIsXHJcbiAgICAgICAgICAgIHRoaXMucmVzdWx0c1Byb2Zpc3Npb25haXMuUHJpbWFyeVNlYXJjaFJlc3VsdHMubGVuZ3RoID4gMFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMuc2hvd0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5jYXRjaCh0aGlzLnRocmVhdEVycm9yKTtcclxuICAgIH0sXHJcbiAgICByZXNldFBhZ2UoKSB7XHJcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSAwO1xyXG4gICAgICB0aGlzLmRvU2VhcmNoKHRoaXMubGFzdFF1ZXJ5LCB0cnVlKTtcclxuICAgIH0sXHJcbiAgICBnZXRBdmF0YXIoaW1nKSB7XHJcbiAgICAgIGlmIChpbWcpIHtcclxuICAgICAgICByZXR1cm4gaW1nLnNwbGl0KCdzcmM9XCInKVsxXS5zcGxpdCgnXCInKVswXSArIGA/UmVuZGl0aW9uSUQ9MThgO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBgJHtfc3BQYWdlQ29udGV4dEluZm8ud2ViQWJzb2x1dGVVcmx9L3N0eWxlIGxpYnJhcnkvaW1hZ2VzL2VtcHR5LXBpY3R1cmUuanBnYDtcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIGdldERpc3BVUkwoc2VvVVJMKSB7XHJcbiAgICAgIC8vcmV0dXJuIGAke19zcFBhZ2VDb250ZXh0SW5mby53ZWJTZXJ2ZXJSZWxhdGl2ZVVybH1wYWdpbmFzL2RldGFsaGUtcHJvZmlzc2lvbmFsLmFzcHg/YWR2PSR7c2VvVVJMfWBcclxuICAgICAgLy8gYXBsaWNhw6fDo28gcGFyYSBsaW5rIGRlIHVybCBtaW5pZmljYWRvIChkZXNjb21lbnRhciBhcG9zIG8gSm9uYXMgaW1wbGVtZW50YXIgbyBiYWNrLWVuZClcclxuICAgICAgcmV0dXJuIGAke19zcFBhZ2VDb250ZXh0SW5mby53ZWJTZXJ2ZXJSZWxhdGl2ZVVybH1wcm9maXNzaW9uYWwvJHtzZW9VUkx9YDtcclxuICAgIH0sXHJcbiAgICB0aHJlYXRFcnJvcigpIHtcclxuICAgICAgcmV0dXJuIHN3YWwoe1xyXG4gICAgICAgIHR5cGU6IGBlcnJvcmAsXHJcbiAgICAgICAgdGV4dDogXCJFcnJvIGFvIG9idGVyIGRhZG9zXCIsXHJcbiAgICAgICAgdGl0bGU6IGBPb3BzIWAsXHJcbiAgICAgIH0pO1xyXG4gICAgfSxcclxuICAgIHZlcmlmeVBhZ2UoKSB7XHJcbiAgICAgIGlmICghX3NwUGFnZUNvbnRleHRJbmZvLnNlcnZlclJlcXVlc3RQYXRoLm1hdGNoKC9idXNjYS5hc3B4L2cpKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICBzaG93VW5pZGFkZShkYWRvcykge1xyXG4gICAgICByZXR1cm4gZGFkb3MucmVwbGFjZSgvOy9naSwgXCIsIFwiKTtcclxuICAgIH0sXHJcbiAgfSxcclxuICBjcmVhdGVkKCkge1xyXG4gICAgaWYgKHRoaXMuc2hvd1NlYXJjaCAmJiAhdGhpcy5oYXNoUGFyYW0pIHtcclxuICAgICAgdGhpcy5kb1NlYXJjaCgpO1xyXG4gICAgfVxyXG4gIH0sXHJcbn0pO1xyXG5cclxuaWYgKHdpbmRvdy5sb2NhdGlvbi5ocmVmLm1hdGNoKC9wcm9maXNzaW9uYWlzL2kpKSB7XHJcbiAgdmFyIGFwcCA9IG5ldyBWdWUoe1xyXG4gICAgZWw6IGAjcHJvZmlzc2lvbmFpc2AsXHJcbiAgICB0ZW1wbGF0ZTogYDxwcm9maXNzaW9uYWlzIC8+YCxcclxuICB9KTtcclxufVxyXG4iLCJyZXF1aXJlKCcuLi9taXhpbnMvdHJhbnNsYXRlJyk7XHJcbihmdW5jdGlvbihWdWUsIFIpIHtcclxuICAgICd1c2Ugc3RyaWN0JztcclxuICAgIFZ1ZS5jb21wb25lbnQoJ3BhZ2luYXRpb24nLCB7XHJcbiAgICAgICAgbWl4aW5zOiBbdHJhbnNsYXRlTWl4aW5dLFxyXG4gICAgICAgIG1ldGhvZHM6IHtcclxuICAgICAgICAgICAgbmF2UGFnZTogZnVuY3Rpb24obmV4dCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIG5leHRQYWdlTnVtID0gdGhpcy5hY3RpdmVQYWdlICsgKG5leHQgPyAxIDogLTEpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZShuZXh0UGFnZU51bSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGZpbHRlclZpc2libGU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5hY3RpdmVQYWdlIC0gTWF0aC5jZWlsKHRoaXMudmlzaWJsZVBhZ2VzIC8gMikgPiAwID8gdGhpcy5hY3RpdmVQYWdlIC0gTWF0aC5jZWlsKHRoaXMudmlzaWJsZVBhZ2VzIC8gMikgOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIGVuZCA9IHN0YXJ0ICsgdGhpcy52aXNpYmxlUGFnZXMgPiB0aGlzLnBhZ2VzTnVtID8gdGhpcy5wYWdlc051bSA6IHN0YXJ0ICsgdGhpcy52aXNpYmxlUGFnZXM7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmFuZ2Uoc3RhcnQsIGVuZCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHJhbmdlOiBmdW5jdGlvbihzdGFydCwgZW5kKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUi5yYW5nZShzdGFydCwgZW5kKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgb25DaGFuZ2U6IGZ1bmN0aW9uKHBhZ2VOdW0pIHtcclxuICAgICAgICAgICAgICAgIGlmIChwYWdlTnVtIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhZ2VOdW0gPSAwO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYWdlTnVtID49IHRoaXMudG90YWxJdGVtcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhZ2VOdW0gPSB0aGlzLnRvdGFsSXRlbXMgLSAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy4kZW1pdCgncGFnZS1jaGFuZ2VkJywgcGFnZU51bSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGRhdGE6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICB2YXIgX2RhdGEgPSB7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZDogdW5kZWZpbmVkXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHJldHVybiBfZGF0YTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNvbXB1dGVkOiB7XHJcbiAgICAgICAgICAgIHBhZ2VzTnVtOiBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLmNlaWwodGhpcy50b3RhbEl0ZW1zIC8gdGhpcy5pdGVtc1BlclBhZ2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBwcm9wczoge1xyXG4gICAgICAgICAgICBpdGVtc1BlclBhZ2U6IHsgdHlwZTogW051bWJlcl0sIGRlZmF1bHQ6IDEwLCByZXF1aXJlZDogdHJ1ZSB9LFxyXG4gICAgICAgICAgICB0b3RhbEl0ZW1zOiB7IHR5cGU6IFtOdW1iZXJdLCByZXF1aXJlZDogdHJ1ZSB9LFxyXG4gICAgICAgICAgICBhY3RpdmVQYWdlOiB7IHR5cGU6IFtOdW1iZXJdLCBkZWZhdWx0OiAwLCByZXF1aXJlZDogdHJ1ZSB9LFxyXG4gICAgICAgICAgICB2aXNpYmxlUGFnZXM6IHsgdHlwZTogW051bWJlcl0sIGRlZmF1bHQ6IDE1IH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHRlbXBsYXRlOiBgXHJcbiAgICAgICAgPG5hdiBhcmlhLWxhYmVsPVwiLi4uXCIgY2xhc3M9XCJ3LTEwMCBkLWJsb2NrXCI+XHJcbiAgICAgICAgICAgIDx1bCB2LWlmPVwicGFnZXNOdW0gJmd0OyAwXCIgY2xhc3M9XCJwYWdpbmF0aW9uIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICAgICAgICAgIDwhLS0gXHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJwYWdlLWl0ZW1cIiB0aXRsZT1cIlByaW1laXJhIHDDoWdpbmFcIiB2LWJpbmQ6Y2xhc3M9XCJ7IGRpc2FibGVkOiBhY3RpdmVQYWdlID09IDAgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwicGFnZS1saW5rXCIgaHJlZj1cImphdmFzY3JpcHQ6XCIgYXJpYS1sYWJlbD1cIlByZXZpb3VzXCIgdi1vbjpjbGljaz1cIm9uQ2hhbmdlKDApXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZsYXF1bzsmbGFxdW87PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAtLT5cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicGFnZS1pdGVtXCIgOnRpdGxlPVwiaXNFbmdsaXNoID8gJ1ByZXZpb3VzIFBhZ2UnIDogJ1DDoWdpbmEgQW50ZXJpb3InXCIgdi1iaW5kOmNsYXNzPVwieyBkaXNhYmxlZDogYWN0aXZlUGFnZSA9PSAwIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cInBhZ2UtbGlua1wiIGhyZWY9XCJqYXZhc2NyaXB0OlwiIGFyaWEtbGFiZWw9XCJQcmV2aW91c1wiIHYtb246Y2xpY2s9XCJuYXZQYWdlKGZhbHNlKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1sb25nLWFycm93LWFsdC1sZWZ0XCI+PC9pPnt7IGlzRW5nbGlzaCA/ICdQcmV2aW91cyBQYWdlJyA6ICdQw6FnaW5hIEFudGVyaW9yJyB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLVxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicGFnZS1pdGVtXCIgdi1mb3I9XCJuIGluIGZpbHRlclZpc2libGUoKVwiIHYtYmluZDpjbGFzcz1cInsgYWN0aXZlOiBhY3RpdmVQYWdlID09IG4gfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwicGFnZS1saW5rXCIgdi1vbjpjbGljaz1cIm9uQ2hhbmdlKG4pXCIgaHJlZj1cImphdmFzY3JpcHQ6XCI+IHt7IG4gKyAxIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gdi1pZj1cImFjdGl2ZVBhZ2UgPT0gIG5cIiBjbGFzcz1cInNyLW9ubHlcIj48L3NwYW4+IDwvYT5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAtLT5cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicGFnZS1pdGVtXCIgOnRpdGxlPVwiaXNFbmdsaXNoID8gJ05leHQgUGFnZScgOiAnUHLDs3hpbWEgUMOhZ2luYSdcIiB2LWJpbmQ6Y2xhc3M9XCJ7IGRpc2FibGVkOiBhY3RpdmVQYWdlICsgMSA9PSBwYWdlc051bSB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJwYWdlLWxpbmtcIiBocmVmPVwiamF2YXNjcmlwdDpcIiBhcmlhLWxhYmVsPVwiTmV4dFwiIHYtb246Y2xpY2s9XCJuYXZQYWdlKHRydWUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGlzRW5nbGlzaCA/ICdOZXh0IFBhZ2UnIDogJ1Byw7N4aW1hIFDDoWdpbmEnIH19IDxpIGNsYXNzPVwiZmFzIGZhLWxvbmctYXJyb3ctYWx0LXJpZ2h0XCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLVxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicGFnZS1pdGVtXCIgdGl0bGU9XCLDmmx0aW1hIFDDoWdpbmFcIiB2LWJpbmQ6Y2xhc3M9XCJ7IGRpc2FibGVkOiBhY3RpdmVQYWdlICsgMSA9PSBwYWdlc051bSB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJwYWdlLWxpbmtcIiBocmVmPVwiamF2YXNjcmlwdDpcIiBhcmlhLWxhYmVsPVwiTmV4dFwiIHYtb246Y2xpY2s9XCJvbkNoYW5nZShwYWdlc051bS0xKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4mcmFxdW87JnJhcXVvOzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgLS0+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9uYXY+YFxyXG4gICAgfSk7XHJcbn0pKFZ1ZSwgUik7Iiwid2luZG93LnBucE1peGluID0gZnVuY3Rpb24gKCRwbnApIHtcclxuXHR2YXIgcG5wTWl4aW4gPSB7XHJcblx0XHRtZXRob2RzOiB7XHJcblx0XHRcdGdldEN1cnJlbnRVc2VyOiBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0cmV0dXJuICRwbnAuc3Aud2ViLnNpdGVVc2Vycy5nZXRCeUlkKF9zcFBhZ2VDb250ZXh0SW5mby51c2VySWQpLmV4cGFuZCgnZ3JvdXBzJykuZ2V0KCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdGlzVXNlck1lbWJlck9mOiBmdW5jdGlvbiAoZ3JvdXBOYW1lLCBncm91cHMpIHtcclxuXHRcdFx0XHRyZXR1cm4gW10uY29uY2F0KGdyb3Vwcykuc29tZShmdW5jdGlvbiAoZ3JvdXApIHtcclxuXHRcdFx0XHRcdHJldHVybiBncm91cC5UaXRsZSA9PT0gZ3JvdXBOYW1lO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRnZXRSZWxhdGl2ZVVybDogZnVuY3Rpb24gKGxpbmspIHtcclxuXHRcdFx0XHRyZXR1cm4gJHBucC51dGlsLm1ha2VVcmxBYnNvbHV0ZShsaW5rKS5yZXBsYWNlKGxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArIGxvY2F0aW9uLmhvc3RuYW1lLCAnJylcclxuXHRcdFx0fSxcclxuXHRcdFx0dHJ1bmNhdGVTdHJpbmc6IGZ1bmN0aW9uIChzdHIsIGxlbmd0aCkge1xyXG5cdFx0XHRcdHJldHVybiAhc3RyID8gXCJcIiA6IHN0ci5sZW5ndGggPiBsZW5ndGggPyBzdHIuc3Vic3RyaW5nKDAsIGxlbmd0aCAtIDMpICsgJy4uLicgOiBzdHJcclxuXHRcdFx0fSxcclxuXHRcdFx0Z2V0UGljdHVyZTogZnVuY3Rpb24gKHVzZXIpIHtcclxuXHRcdFx0XHRyZXR1cm4gX3NwUGFnZUNvbnRleHRJbmZvLndlYkFic29sdXRlVXJsICsgJy9fbGF5b3V0cy8xNS91c2VycGhvdG8uYXNweD9zaXplPUwmdXNlcm5hbWU9JyArIHVzZXIgKyAnJ1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRnZXRMaXN0OiBmdW5jdGlvbiAoc2V0dGluZ3MpIHtcclxuXHRcdFx0XHR2YXIgcmVxdWVzdCA9ICRwbnAuc3Aud2ViLmdldExpc3Qoc2V0dGluZ3MubGlzdFVybCkuaXRlbXNcclxuXHRcdFx0XHRzZXR0aW5ncy5zZWxlY3QgPyByZXF1ZXN0LnNlbGVjdChzZXR0aW5ncy5zZWxlY3QpIDogbnVsbFxyXG5cdFx0XHRcdHNldHRpbmdzLm9yZGVyQnkgPyByZXF1ZXN0Lm9yZGVyQnkoc2V0dGluZ3Mub3JkZXJCeSwgc2V0dGluZ3Mub3JkZXJCeUFzYykgOiBudWxsXHJcblx0XHRcdFx0c2V0dGluZ3MuZmlsdGVyID8gcmVxdWVzdC5maWx0ZXIoc2V0dGluZ3MuZmlsdGVyKSA6IG51bGxcclxuXHRcdFx0XHRzZXR0aW5ncy5leHBhbmQgPyByZXF1ZXN0LmV4cGFuZChzZXR0aW5ncy5leHBhbmQpIDogbnVsbFxyXG5cdFx0XHRcdHNldHRpbmdzLnRvcCA/IHJlcXVlc3QuZXhwYW5kKHNldHRpbmdzLnRvcCkgOiBudWxsXHJcblxyXG5cdFx0XHRcdHJldHVybiByZXF1ZXN0LmdldCgpXHJcblx0XHRcdH0sXHJcblx0XHRcdHRocmVhdEVycm9yKGVyciwgbXNnKSB7XHJcblx0XHRcdFx0cmV0dXJuIHN3YWwoe1xyXG5cdFx0XHRcdFx0dHlwZTogYGVycm9yYCxcclxuXHRcdFx0XHRcdHRleHQ6IGVyciArICcgLSAnICsgbXNnLFxyXG5cdFx0XHRcdFx0dGl0bGU6IGBPb3BzIWBcclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRjbGVhckZpbGVuYW1lKGZpbGVuYW1lKSB7XHJcblx0XHRcdFx0cmV0dXJuIChmaWxlbmFtZSB8fCAnJykucmVwbGFjZSgvWy9cXFxcPyUqOnxcIjw+XS9nLCAnLScpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRleHBvcnRQREYoaXRlbSkge1xyXG5cdFx0XHRcdHZhciBfcXJ5ID0gXCJcIjtcclxuXHRcdFx0XHRfcXJ5ID0gXCJwPVwiICsgaXRlbS5JZDtcclxuXHRcdFx0XHR2YXIgdGl0bGUgPSBcIiZ0aXRsZT1cIiArIHRoaXMuY2xlYXJGaWxlbmFtZShpdGVtLkZ1bGxOYW1lKTtcclxuXHJcblx0XHRcdFx0dmFyIHVybEZhdiA9IFwiL19sYXlvdXRzLzE1L1NYLldlYlNpdGUuSnVyaWRpY29zLlNQMjAxMy5Eb3dubG9hZGVyL1BERkRvd25sb2FkZXIuYXNoeD9cIiArIF9xcnkgKyBcIiZsY2lkPVwiICsgQ3VycmVudExhbmd1YWdlRGVjaW1hbCArIHRpdGxlICsgJyZsYT1QcmVtaW9zJmZmPVByb2Zpc3Npb25haXMnO1xyXG5cdFx0XHRcdHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gX3NwUGFnZUNvbnRleHRJbmZvLndlYkFic29sdXRlVXJsICsgdXJsRmF2O1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cdHJldHVybiBwbnBNaXhpbjtcclxufSgkcG5wKVxyXG4iLCJyZXF1aXJlKGAuLi9taXhpbnMvdHJhbnNsYXRlYCk7XHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG4gICAgbWl4aW5zOiBbdHJhbnNsYXRlTWl4aW5dLFxyXG4gICAgbWV0aG9kczoge1xyXG4gICAgICAgIGNsb25lKG9iaikge1xyXG4gICAgICAgICAgICBpZiAobnVsbCA9PSBvYmogfHwgXCJvYmplY3RcIiAhPSB0eXBlb2Ygb2JqKSByZXR1cm4gb2JqO1xyXG4gICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvYmopKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGdldEVtcHR5SXRlbShsaXN0RmllbGRzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb25lKGxpc3RGaWVsZHMpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdmFsaWRhdGVSZXF1aXJlZEZpZWxkKGZpZWxkcykge1xyXG4gICAgICAgICAgICByZXR1cm4gIU9iamVjdC5rZXlzKGZpZWxkcykuc29tZSgoa2V5KSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gIWZpZWxkc1trZXldLlZhbHVlICYmIGZpZWxkc1trZXldLlJlcXVpcmVkO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZ2V0SW52YWxpZEZpZWxkcyhmaWVsZHMpIHtcclxuICAgICAgICAgICAgbGV0IG1zZ3NFcnJvID0gW107XHJcbiAgICAgICAgICAgIGxldCBtc2dPYnJpZ2F0b3JpbyA9IGZhbHNlO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgZmllbGRzID0gT2JqZWN0LmtleXMoZmllbGRzKS5maWx0ZXIoKGtleSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdmFyIGZpZWxkID0gZmllbGRzW2tleV07XHJcbiAgICAgICAgICAgICAgICBpZiAoZmllbGQuSW50ZXJuYWxOYW1lID09PSAnRW1haWwnICYmIGZpZWxkLlZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGVtYWlsVmFsaWRvID0gdGhpcy52YWxpZGF0ZUVtYWlsKGZpZWxkLlZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICBpZighZW1haWxWYWxpZG8pe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtc2dzRXJyby5wdXNoKGBPIGUtbWFpbCBcIiR7ZmllbGQuVmFsdWV9XCIgw6kgaW52w6FsaWRvYClcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFlbWFpbFZhbGlkbztcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZmllbGQuUmVxdWlyZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgdmFsaWRhdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC5UeXBlQXNTdHJpbmcgPT09ICdMb29rdXBNdWx0aScpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbiA9ICEoZmllbGQuVmFsdWUgfHwgW10pLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uID0gIWZpZWxkLlZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmKHZhbGlkYXRpb24gJiYgbXNnT2JyaWdhdG9yaW8gPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbXNnT2JyaWdhdG9yaW8gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL21zZ3NFcnJvLnB1c2goYE8gY2FtcG8gJHtmaWVsZC5UaXRsZX0gw6kgb2JyaWdhdMOzcmlvYClcclxuICAgICAgICAgICAgICAgICAgICAgICAgbXNnc0Vycm8ucHVzaChgJHt0aGlzLmlzRW5nbGlzaCA/ICdGaWxsIGluIHRoZSByZXF1aXJlZCBmaWVsZHMnIDogJ1ByZWVuY2hhIG9zIGNhbXBvcyBvYnJpZ2F0w7NyaW9zJ31gKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGlvbjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgaWYgKG1zZ09icmlnYXRvcmlvID49IDEpIHtcclxuICAgICAgICAgICAgICAgIC8vYWxlcnQoJ1ByZWVuY2hhIG9zIGNhbXBvcyBvYnJpZ2F0w7NyaW9zJyk7ICAgICBcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgbXNnc0Vycm8sXHJcbiAgICAgICAgICAgICAgICBmaWVsZHNcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdmFsaWRhdGVFbWFpbChlbWFpbCA9ICcnKSB7XHJcbiAgICAgICAgICAgIGxldCB1c3VhcmlvID0gZW1haWwuc3Vic3RyaW5nKDAsIGVtYWlsLmluZGV4T2YoXCJAXCIpKTtcclxuICAgICAgICAgICAgbGV0IGRvbWluaW8gPSBlbWFpbC5zdWJzdHJpbmcoZW1haWwuaW5kZXhPZihcIkBcIikgKyAxLCBlbWFpbC5sZW5ndGgpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCh1c3VhcmlvLmxlbmd0aCA+PSAxKSAmJlxyXG4gICAgICAgICAgICAgICAgKGRvbWluaW8ubGVuZ3RoID49IDMpICYmXHJcbiAgICAgICAgICAgICAgICAodXN1YXJpby5zZWFyY2goXCJAXCIpID09IC0xKSAmJlxyXG4gICAgICAgICAgICAgICAgKGRvbWluaW8uc2VhcmNoKFwiQFwiKSA9PSAtMSkgJiZcclxuICAgICAgICAgICAgICAgICh1c3VhcmlvLnNlYXJjaChcIiBcIikgPT0gLTEpICYmXHJcbiAgICAgICAgICAgICAgICAoZG9taW5pby5zZWFyY2goXCIgXCIpID09IC0xKSAmJlxyXG4gICAgICAgICAgICAgICAgKGRvbWluaW8uc2VhcmNoKFwiLlwiKSAhPSAtMSkgJiZcclxuICAgICAgICAgICAgICAgIChkb21pbmlvLmluZGV4T2YoXCIuXCIpID49IDEpICYmXHJcbiAgICAgICAgICAgICAgICAoZG9taW5pby5sYXN0SW5kZXhPZihcIi5cIikgPCBkb21pbmlvLmxlbmd0aCAtIDEpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBkYXRhKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGxldHJhc0FsZmFiZXRvOiBbJ0EnLCAnQicsICdDJywgJ0QnLCAnRScsICdGJywgJ0cnLCAnSCcsICdJJywgJ0onLCAnSycsICdMJywgJ00nLCAnTicsICdPJywgJ1AnLCAnUScsICdSJywgJ1MnLCAnVCcsICdVJywgJ1YnLCAnVycsICdYJywgJ1knLCAnWiddLFxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbn0iLCJ3aW5kb3cudHJhbnNsYXRlTWl4aW4gPSB7XHJcbiAgICBtZXRob2RzOiB7XHJcbiAgICAgICAgY2hhbmdlTGFuZ3VhZ2UodmFsdWUpIHtcclxuICAgICAgICAgICAgaWYgKEN1cnJlbnRMYW5ndWFnZURlY2ltYWwgPT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgdG9kYXkgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgICB2YXIgb25lWWVhciA9IG5ldyBEYXRlKHRvZGF5LmdldFRpbWUoKSArIDM2NSAqIDI0ICogNjAgKiA2MCAqIDEwMDApO1xyXG4gICAgICAgICAgICB2YXIgdXJsID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmNvb2tpZSA9IFwibGNpZD1cIiArIHZhbHVlICsgXCI7cGF0aD0vO2V4cGlyZXM9XCIgKyBvbmVZZWFyLnRvR01UU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIGxvY2F0aW9uLmhyZWYgPSB1cmw7XHJcbiAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBkYXRhKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGlzRW5nbGlzaDogQ3VycmVudExhbmd1YWdlRGVjaW1hbCA9PSAxMDMzLFxyXG4gICAgICAgICAgICBjdXJyZW50TGFuZzogQ3VycmVudExhbmd1YWdlRGVjaW1hbFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn0iXX0=\n"],"file":"profissionais.js"}