webseite-grav/plugins/git-sync/js/app.js

196 lines
75 KiB
JavaScript

/*
* ATTENTION: An "eval-source-map" devtool has been used.
* This devtool is neither made for production nor for readable output files.
* It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
* or disable the default devtool with "devtool: false".
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
*/
/******/ (() => { // webpackBootstrap
/******/ "use strict";
/******/ var __webpack_modules__ = ({
/***/ 849:
/***/ ((__unused_webpack_module, __unused_webpack___webpack_exports__, __webpack_require__) => {
eval("\n;// CONCATENATED MODULE: external \"GitSync\"\nconst external_GitSync_namespaceObject = GitSync;\nvar external_GitSync_default = /*#__PURE__*/__webpack_require__.n(external_GitSync_namespaceObject);\n// EXTERNAL MODULE: external \"jQuery\"\nvar external_jQuery_ = __webpack_require__(609);\nvar external_jQuery_default = /*#__PURE__*/__webpack_require__.n(external_jQuery_);\n// EXTERNAL MODULE: ../../../grav/grav-plugin-admin/themes/grav/node_modules/toastr/toastr.js\nvar toastr = __webpack_require__(860);\nvar toastr_default = /*#__PURE__*/__webpack_require__.n(toastr);\n;// CONCATENATED MODULE: ../../../grav/grav-plugin-admin/themes/grav/app/utils/toastr.js\n\n(toastr_default()).options.positionClass = 'toast-top-right';\n(toastr_default()).options.preventDuplicates = true;\n/* harmony default export */ const utils_toastr = ((toastr_default()));\n;// CONCATENATED MODULE: ../../../grav/grav-plugin-admin/themes/grav/app/utils/offline.js\n\n\nvar offlineElement = external_jQuery_default()('#offline-status');\nexternal_jQuery_default()(window).on('offline', function () {\n offlineElement.slideDown();\n});\nexternal_jQuery_default()(window).on('online', function () {\n offlineElement.slideUp();\n});\nexternal_jQuery_default()(document).ready(function () {\n if (!offline) {\n offlineElement.slideDown();\n }\n}); // assume online if can't check\n\n/* harmony default export */ const offline = (typeof __webpack_require__.g.navigator.onLine !== 'undefined' ? __webpack_require__.g.navigator.onLine : true);\n;// CONCATENATED MODULE: external \"GravAdmin\"\nconst external_GravAdmin_namespaceObject = GravAdmin;\n// EXTERNAL MODULE: ../../../grav/grav-plugin-admin/themes/grav/node_modules/mout/string/trim.js\nvar trim = __webpack_require__(284);\nvar trim_default = /*#__PURE__*/__webpack_require__.n(trim);\n;// CONCATENATED MODULE: ../../../grav/grav-plugin-admin/themes/grav/app/utils/response.js\n\n\n\n\n\nvar UNLOADING = false;\n\nvar error = function error(response) {\n var error = new Error(response.statusText || response || '');\n error.response = response;\n return error;\n};\n\nfunction parseStatus(response) {\n return response;\n /* Whoops can handle JSON responses so we don't need this for now.\n if (response.status >= 200 && response.status < 300) {\n return response;\n } else {\n throw error(response);\n }\n */\n}\nfunction parseJSON(response) {\n return response.text().then(function (text) {\n var parsed = text;\n\n try {\n parsed = JSON.parse(text);\n } catch (error) {\n var content = document.createElement('div');\n content.innerHTML = text;\n var the_error = new Error();\n the_error.stack = trim_default()(content.innerText);\n throw the_error;\n }\n\n return parsed;\n });\n}\nfunction userFeedback(response) {\n if (UNLOADING) {\n return true;\n }\n\n var status = response.status || (response.error ? 'error' : '');\n var message = response.message || (response.error ? response.error.message : null);\n var settings = response.toastr || null;\n var backup;\n\n switch (status) {\n case 'unauthenticated':\n document.location.href = external_GravAdmin_namespaceObject.config.base_url_relative;\n throw error('Logged out');\n\n case 'unauthorized':\n status = 'error';\n message = message || 'Unauthorized.';\n break;\n\n case 'error':\n status = 'error';\n message = message || 'Unknown error.';\n break;\n\n case 'success':\n status = 'success';\n message = message || '';\n break;\n\n default:\n status = 'error';\n message = message || 'Invalid AJAX response.';\n break;\n }\n\n if (settings) {\n backup = Object.assign({}, utils_toastr.options);\n Object.keys(settings).forEach(function (key) {\n utils_toastr.options[key] = settings[key];\n });\n }\n\n if (message && (offline || !offline && status !== 'error')) {\n utils_toastr[status === 'success' ? 'success' : 'error'](message);\n }\n\n if (settings) {\n utils_toastr.options = backup;\n }\n\n return response;\n}\nfunction userFeedbackError(error) {\n if (UNLOADING) {\n return true;\n }\n\n var stack = error.stack ? \"<pre><code>\".concat(error.stack, \"</code></pre>\") : '';\n utils_toastr.error(\"Fetch Failed: <br /> \".concat(error.message, \" \").concat(stack));\n console.error(\"\".concat(error.message, \" at \").concat(error.stack));\n}\nexternal_jQuery_default()(__webpack_require__.g).on('beforeunload._ajax', function () {\n UNLOADING = true;\n});\n;// CONCATENATED MODULE: ../../../grav/grav-plugin-admin/themes/grav/app/utils/request.js\n\n\nvar raw;\n\nvar request = function request(url) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var callback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () {\n return true;\n };\n\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n\n if (options.method && options.method === 'post') {\n var data = new FormData();\n options.body = Object.assign({\n 'admin-nonce': external_GravAdmin_namespaceObject.config.admin_nonce\n }, options.body || {});\n Object.keys(options.body).map(function (key) {\n return data.append(key, options.body[key]);\n });\n options.body = data;\n }\n\n options = Object.assign({\n credentials: 'same-origin',\n headers: {\n 'Accept': 'application/json'\n }\n }, options);\n return fetch(url, options).then(function (response) {\n raw = response;\n return response;\n }).then(parseStatus).then(parseJSON).then(userFeedback).then(function (response) {\n return callback(response, raw);\n })[\"catch\"](userFeedbackError);\n};\n\n/* harmony default export */ const utils_request = (request);\n// EXTERNAL MODULE: ./node_modules/whatwg-fetch/fetch.js\nvar whatwg_fetch_fetch = __webpack_require__(147);\n;// CONCATENATED MODULE: ./app/wizard/index.js\n\n\n\n\n\n\nvar WIZARD = external_jQuery_default()('[data-remodal-id=\"wizard\"]');\nvar RESET_LOCAL = external_jQuery_default()('[data-remodal-id=\"reset-local\"]');\nvar SERVICES = {\n 'github': 'github.com',\n 'bitbucket': 'bitbucket.org',\n 'gitlab': 'gitlab.com',\n 'allothers': 'allothers.repo'\n};\nvar BRANCHES = {\n 'github': 'main',\n 'bitbucket': 'master',\n 'gitlab': 'master',\n 'allothers': 'master'\n};\nvar TEMPLATES = {\n REPO_URL: 'https://{placeholder}/getgrav/grav.git'\n};\n\nvar openWizard = function openWizard() {\n var modal = WIZARD.remodal({\n closeOnConfirm: false\n });\n var previous = WIZARD.find('[data-gitsync-action=\"previous\"]');\n var next = WIZARD.find('[data-gitsync-action=\"next\"]');\n var save = WIZARD.find('[data-gitsync-action=\"save\"]');\n STEP = 0;\n WIZARD.find(\"form > [class^=step-]:not(.step-\".concat(STEP, \") > .panel\")).hide().removeClass('hidden');\n WIZARD.find(\"form > [class=\\\"step-\".concat(STEP, \"\\\"] > .panel\")).show();\n next.removeClass('hidden');\n previous.addClass('hidden');\n save.addClass('hidden');\n var webhook = external_jQuery_default()('[name=\"data[webhook]\"]').val();\n var webhook_secret = external_jQuery_default()('[name=\"data[webhook_secret]\"]').val();\n external_jQuery_default()('[name=\"gitsync[repository]\"]').trigger('change');\n external_jQuery_default()('[name=\"gitsync[webhook]\"]').val(webhook);\n external_jQuery_default()('[name=\"gitsync[webhook_secret]\"]').val(webhook_secret);\n external_jQuery_default()('.gitsync-webhook').text(webhook);\n modal.open();\n};\n\nvar disableButton = function disableButton(next) {\n next.attr('disabled', 'disabled').addClass('hint--top');\n};\n\nvar enableButton = function enableButton(next) {\n next.attr('disabled', null).removeClass('hint--top');\n};\n\nvar STEP = 0;\nvar STEPS = 0;\nvar SERVICE = null;\nexternal_jQuery_default()(document).on('closed', WIZARD, function (e) {\n STEP = 0;\n});\nexternal_jQuery_default()(document).on('click', '[data-gitsync-useraction]', function (event) {\n event.preventDefault();\n var target = external_jQuery_default()(event.target).closest('[data-gitsync-useraction]');\n var action = target.data('gitsyncUseraction');\n var URI = \"\".concat(external_GravAdmin_namespaceObject.config.current_url, \".json\");\n\n switch (action) {\n case 'wizard':\n openWizard();\n break;\n\n case 'sync':\n var relativeURI = target.data('gitsync-uri');\n target.find('i').removeClass('fa-cloud fa-git').addClass('fa-circle-o-notch fa-spin');\n utils_request(relativeURI || URI, {\n method: 'post',\n body: {\n task: 'synchronize'\n }\n }, function () {\n target.find('i').removeClass('fa-circle-o-notch fa-spin').addClass(relativeURI ? 'fa-git' : 'fa-cloud');\n });\n break;\n\n case 'reset':\n var modal = RESET_LOCAL.remodal({\n closeOnConfirm: false\n });\n modal.open();\n\n if (!RESET_LOCAL.data('_reset_event_set_')) {\n RESET_LOCAL.find('[data-gitsync-action=\"reset-local\"]').one('click', function () {\n modal.close();\n RESET_LOCAL.data('_reset_event_set_', true);\n target.find('i').removeClass('fa-history').addClass('fa-circle-o-notch fa-spin');\n utils_request(URI, {\n method: 'post',\n body: {\n task: 'resetlocal'\n }\n }, function () {\n RESET_LOCAL.data('_reset_event_set_', false);\n target.find('i').removeClass('fa-circle-o-notch fa-spin').addClass('fa-history');\n });\n });\n }\n\n break;\n }\n});\nexternal_jQuery_default()(document).on('click', '[data-gitsync-action]', function (event) {\n event.preventDefault();\n var target = external_jQuery_default()(event.target).closest('[data-gitsync-action]');\n var previous = WIZARD.find('[data-gitsync-action=\"previous\"]');\n var next = WIZARD.find('[data-gitsync-action=\"next\"]');\n var save = WIZARD.find('[data-gitsync-action=\"save\"]');\n var action = target.data('gitsyncAction');\n var user = external_jQuery_default()('[name=\"gitsync[repo_user]\"]').val();\n var noUser = external_jQuery_default()('[name=\"gitsync[no_user]\"]').is(':checked');\n var password = external_jQuery_default()('[name=\"gitsync[repo_password]\"]').val();\n var repository = external_jQuery_default()('[name=\"gitsync[repo_url]\"]').val();\n var branch = external_jQuery_default()('[name=\"gitsync[branch]\"]').val();\n var webhook = external_jQuery_default()('[name=\"gitsync[webhook]\"]').val();\n var webhook_enabled = external_jQuery_default()('[name=\"gitsync[webhook_enabled]\"]').is(':checked');\n var webhook_secret = external_jQuery_default()('[name=\"gitsync[webhook_secret]\"]').val();\n\n if (target.attr('disabled')) {\n return;\n }\n\n var error = [];\n\n if (!user && !noUser) {\n error.push('Username is missing.');\n }\n /*\n if (!password) {\n error.push('Password is missing.');\n }\n */\n\n\n if (!repository) {\n error.push('Repository is missing.');\n }\n\n if (['save', 'test'].includes(action)) {\n target.find('.fa').removeClass(action === 'test' ? 'fa-plug' : 'fa-check').addClass('fa-spin fa-circle-o-notch');\n\n if (error.length) {\n utils_toastr.error(error.join('<br />'));\n target.find('.fa').removeClass('fa-spin fa-circle-o-notch').addClass(action === 'test' ? 'fa-plug' : 'fa-check');\n return false;\n }\n }\n\n if (action === 'save') {\n var folders = external_jQuery_default()('[name=\"gitsync[folders]\"]:checked').map(function (i, item) {\n return item.value;\n });\n external_jQuery_default()('[name=\"data[repository]\"]').val(repository);\n external_jQuery_default()('[name=\"data[no_user]\"]').val(noUser ? '1' : '0');\n external_jQuery_default()('[name=\"data[user]\"]').val(user);\n external_jQuery_default()('[name=\"data[password]\"]').val(password);\n external_jQuery_default()('[name=\"data[branch]\"]').val(branch);\n external_jQuery_default()('[name=\"data[remote][branch]\"]').val(branch);\n external_jQuery_default()('[name=\"data[webhook]\"]').val(webhook);\n external_jQuery_default()(\"[name=\\\"data[webhook_enabled]\\\"][value=\\\"\".concat(webhook_enabled ? 1 : 0, \"\\\"]\")).prop('checked', true);\n external_jQuery_default()('[name=\"data[webhook_secret]\"]').val(webhook_secret);\n var dataFolders = external_jQuery_default()('[name=\"data[folders][]\"]');\n\n if (dataFolders && dataFolders[0] && dataFolders[0].selectize) {\n dataFolders[0].selectize.setValue(folders.toArray());\n }\n\n external_jQuery_default()('[name=\"task\"][value=\"save\"]').trigger('click');\n return false;\n }\n\n if (action === 'test') {\n var URI = \"\".concat(external_GravAdmin_namespaceObject.config.current_url, \".json\");\n var test = __webpack_require__.g.btoa(JSON.stringify({\n user: noUser ? '' : user,\n password: password,\n repository: repository,\n branch: branch\n }));\n utils_request(URI, {\n method: 'post',\n body: {\n test: test,\n task: 'testConnection'\n }\n });\n target.find('.fa').removeClass('fa-spin fa-circle-o-notch').addClass('fa-plug');\n return false;\n }\n\n WIZARD.find(\".step-\".concat(STEP, \" > .panel\")).slideUp();\n STEP += action === 'next' ? +1 : -1;\n WIZARD.find(\".step-\".concat(STEP, \" > .panel\")).slideDown();\n save.addClass('hidden');\n\n if (action === 'next') {\n previous.removeClass('hidden');\n }\n\n if (STEP <= 0) {\n previous.addClass('hidden');\n enableButton(next);\n }\n\n if (STEP > 0) {\n next.removeClass('hidden');\n }\n\n if (STEP === 1) {\n var selectedRepo = external_jQuery_default()('[name=\"gitsync[repository]\"]:checked');\n\n if (!selectedRepo.length) {\n disableButton(next);\n } else {\n enableButton(next);\n }\n }\n\n if (STEP === 2) {\n var repoURL = external_jQuery_default()('[name=\"gitsync[repo_url]\"]').val();\n\n if (!repoURL.length || !branch) {\n disableButton(next);\n } else {\n enableButton(next);\n }\n }\n\n if (STEP === STEPS) {\n next.addClass('hidden');\n previous.removeClass('hidden');\n save.removeClass('hidden');\n }\n});\nexternal_jQuery_default()(document).on('input', '[name=\"gitsync[no_user]\"]', function (event) {\n var target = external_jQuery_default()(event.currentTarget);\n var user = external_jQuery_default()('[name=\"gitsync[repo_user]\"]');\n\n if (target.is(':checked')) {\n user.val('').prop('disabled', 'disabled').attr('placeholder', '<username not required>');\n } else {\n user.prop('disabled', null).attr('placeholder', 'Username, not email');\n }\n});\nexternal_jQuery_default()(document).on('change', '[name=\"gitsync[repository]\"]', function () {\n enableButton(WIZARD.find('[data-gitsync-action=\"next\"]'));\n});\nexternal_jQuery_default()(document).on('input', '[name=\"gitsync[repo_url]\"]', function (event) {\n var target = external_jQuery_default()(event.currentTarget);\n var value = target.val();\n var next = WIZARD.find('[data-gitsync-action=\"next\"]');\n\n if (value.length) {\n enableButton(next);\n } else {\n disableButton(next);\n }\n});\nexternal_jQuery_default()(document).on('keyup', '[data-gitsync-uribase] [name=\"gitsync[webhook]\"]', function (event) {\n var target = external_jQuery_default()(event.currentTarget);\n var value = target.val();\n external_jQuery_default()('.gitsync-webhook').text(value);\n});\nexternal_jQuery_default()(document).on('keyup', '[data-gitsync-uribase] [name=\"gitsync[webhook_secret]\"]', function (event) {\n external_jQuery_default()('[data-gitsync-uribase] [name=\"gitsync[webhook_enabled]\"]').trigger('change');\n});\nexternal_jQuery_default()(document).on('change', '[data-gitsync-uribase] [name=\"gitsync[webhook_enabled]\"]', function (event) {\n var target = external_jQuery_default()(event.currentTarget);\n var checked = target.is(':checked');\n var secret = external_jQuery_default()('[name=\"gitsync[webhook_secret]\"]').val();\n target.closest('.webhook-secret-wrapper').find('label:last-child')[checked ? 'removeClass' : 'addClass']('hidden');\n external_jQuery_default()('.gitsync-webhook-secret').html(!checked || !secret.length ? '<em>leave empty</em>' : \"<code>\".concat(secret, \"</code>\"));\n});\nexternal_jQuery_default()(document).on('change', '[name=\"gitsync[repository]\"]', function (event) {\n var target = external_jQuery_default()(event.target);\n\n if (!target.is(':checked')) {\n return;\n }\n\n SERVICE = target.val();\n Object.keys(SERVICES).forEach(function (service) {\n WIZARD.find(\".hidden-step-\".concat(service))[service === SERVICE ? 'removeClass' : 'addClass']('hidden');\n\n if (service === SERVICE) {\n WIZARD.find('.webhook-secret-wrapper')[service === 'bitbucket' ? 'addClass' : 'removeClass']('hidden');\n WIZARD.find('input[name=\"gitsync[repo_url]\"][placeholder]').attr('placeholder', TEMPLATES.REPO_URL.replace(/\\{placeholder\\}/, SERVICES[service])).end().find('input[name=\"gitsync[branch]\"]').attr('placeholder', BRANCHES[service]).val(BRANCHES[service]);\n }\n });\n});\nexternal_jQuery_default()(document).on('click', '[data-access-tokens-details]', function (event) {\n event.preventDefault();\n var button = external_jQuery_default()(event.currentTarget);\n var panel = button.closest('.access-tokens').find('.access-tokens-details');\n panel.slideToggle(250, function () {\n var isVisible = panel.is(':visible');\n var icon = button.find('.fa');\n icon.removeClass('fa-chevron-down fa-chevron-up').addClass(\"fa-chevron-\".concat(isVisible ? 'up' : 'down'));\n });\n});\n\nvar showNotices = function showNotices(element) {\n var target = external_jQuery_default()(element);\n var selection = target.val().replace(/\\//g, '-');\n var column = target.closest('.columns').find('.column:last');\n column.find('[class*=\"description-\"]').addClass('hidden');\n column.find(\".description-\".concat(selection)).removeClass('hidden').hide().fadeIn({\n duration: 250\n });\n};\n\nexternal_jQuery_default()(document).on('input', '[data-remodal-id=\"wizard\"] .step-4 input[type=\"checkbox\"]', function (event) {\n var target = external_jQuery_default()(event.currentTarget);\n\n if (!target.is(':checked')) {\n return;\n }\n\n showNotices(target);\n});\nexternal_jQuery_default()(document).on('mouseenter', '[data-remodal-id=\"wizard\"] .step-4 .info-desc', function (event) {\n var target = external_jQuery_default()(event.currentTarget).siblings('input[type=\"checkbox\"]');\n showNotices(target);\n});\nexternal_jQuery_default()(document).on('mouseleave', '[data-remodal-id=\"wizard\"] .step-4 label', function (event) {\n var target = external_jQuery_default()(event.currentTarget);\n var container = target.closest('.columns');\n var column = container.find('.column:last-child');\n column.find('[class*=\"description-\"]').addClass('hidden');\n});\nexternal_jQuery_default()(document).on('mouseleave', '[data-remodal-id=\"wizard\"] .columns .column:first-child', function (event) {\n var target = external_jQuery_default()(event.currentTarget);\n var column = target.siblings('.column');\n column.find('[class*=\"description-\"]').addClass('hidden');\n});\nexternal_jQuery_default()(document).ready(function () {\n STEPS = WIZARD.find('[class^=\"step-\"]').length - 1;\n WIZARD.wrapInner('<form></form>');\n RESET_LOCAL.wrapInner('<form></form>');\n\n if (WIZARD.length && ((external_GitSync_default()).first_time || !(external_GitSync_default()).git_installed)) {\n openWizard();\n }\n});\n/* harmony default export */ const wizard = ((/* unused pure expression or super */ null && (Settings)));\n;// CONCATENATED MODULE: ./app/main.js\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly90cmlsYnktZ3Jhdi1wbHVnaW4tZ2l0c3luYy9leHRlcm5hbCBcIkdpdFN5bmNcIj9jNTkxIiwid2VicGFjazovL3RyaWxieS1ncmF2LXBsdWdpbi1naXRzeW5jLy4uL2dyYXYvZ3Jhdi1wbHVnaW4tYWRtaW4vdGhlbWVzL2dyYXYvYXBwL3V0aWxzL3RvYXN0ci5qcz8zMTZmIiwid2VicGFjazovL3RyaWxieS1ncmF2LXBsdWdpbi1naXRzeW5jLy4uL2dyYXYvZ3Jhdi1wbHVnaW4tYWRtaW4vdGhlbWVzL2dyYXYvYXBwL3V0aWxzL29mZmxpbmUuanM/YmNkYyIsIndlYnBhY2s6Ly90cmlsYnktZ3Jhdi1wbHVnaW4tZ2l0c3luYy9leHRlcm5hbCBcIkdyYXZBZG1pblwiP2M2ZWIiLCJ3ZWJwYWNrOi8vdHJpbGJ5LWdyYXYtcGx1Z2luLWdpdHN5bmMvLi4vZ3Jhdi9ncmF2LXBsdWdpbi1hZG1pbi90aGVtZXMvZ3Jhdi9hcHAvdXRpbHMvcmVzcG9uc2UuanM/MWRmYSIsIndlYnBhY2s6Ly90cmlsYnktZ3Jhdi1wbHVnaW4tZ2l0c3luYy8uLi9ncmF2L2dyYXYtcGx1Z2luLWFkbWluL3RoZW1lcy9ncmF2L2FwcC91dGlscy9yZXF1ZXN0LmpzPzhiZDEiLCJ3ZWJwYWNrOi8vdHJpbGJ5LWdyYXYtcGx1Z2luLWdpdHN5bmMvLi9hcHAvd2l6YXJkL2luZGV4LmpzP2JjYjciXSwibmFtZXMiOlsidG9hc3RyIiwib2ZmbGluZUVsZW1lbnQiLCIkIiwid2luZG93Iiwib24iLCJzbGlkZURvd24iLCJzbGlkZVVwIiwiZG9jdW1lbnQiLCJyZWFkeSIsImlzT25saW5lIiwiZ2xvYmFsIiwibmF2aWdhdG9yIiwib25MaW5lIiwiVU5MT0FESU5HIiwiZXJyb3IiLCJyZXNwb25zZSIsIkVycm9yIiwic3RhdHVzVGV4dCIsInBhcnNlU3RhdHVzIiwicGFyc2VKU09OIiwidGV4dCIsInRoZW4iLCJwYXJzZWQiLCJKU09OIiwicGFyc2UiLCJjb250ZW50IiwiY3JlYXRlRWxlbWVudCIsImlubmVySFRNTCIsInRoZV9lcnJvciIsInN0YWNrIiwidHJpbSIsImlubmVyVGV4dCIsInVzZXJGZWVkYmFjayIsInN0YXR1cyIsIm1lc3NhZ2UiLCJzZXR0aW5ncyIsImJhY2t1cCIsImxvY2F0aW9uIiwiaHJlZiIsImNvbmZpZyIsIk9iamVjdCIsImFzc2lnbiIsImtleXMiLCJmb3JFYWNoIiwia2V5IiwidXNlckZlZWRiYWNrRXJyb3IiLCJjb25zb2xlIiwicmF3IiwicmVxdWVzdCIsInVybCIsIm9wdGlvbnMiLCJjYWxsYmFjayIsIm1ldGhvZCIsImRhdGEiLCJGb3JtRGF0YSIsImJvZHkiLCJhZG1pbl9ub25jZSIsIm1hcCIsImFwcGVuZCIsImNyZWRlbnRpYWxzIiwiaGVhZGVycyIsImZldGNoIiwiV0laQVJEIiwiUkVTRVRfTE9DQUwiLCJTRVJWSUNFUyIsIkJSQU5DSEVTIiwiVEVNUExBVEVTIiwiUkVQT19VUkwiLCJvcGVuV2l6YXJkIiwibW9kYWwiLCJyZW1vZGFsIiwiY2xvc2VPbkNvbmZpcm0iLCJwcmV2aW91cyIsImZpbmQiLCJuZXh0Iiwic2F2ZSIsIlNURVAiLCJoaWRlIiwicmVtb3ZlQ2xhc3MiLCJzaG93IiwiYWRkQ2xhc3MiLCJ3ZWJob29rIiwidmFsIiwid2ViaG9va19zZWNyZXQiLCJ0cmlnZ2VyIiwib3BlbiIsImRpc2FibGVCdXR0b24iLCJhdHRyIiwiZW5hYmxlQnV0dG9uIiwiU1RFUFMiLCJTRVJWSUNFIiwiZSIsImV2ZW50IiwicHJldmVudERlZmF1bHQiLCJ0YXJnZXQiLCJjbG9zZXN0IiwiYWN0aW9uIiwiVVJJIiwicmVsYXRpdmVVUkkiLCJ0YXNrIiwib25lIiwiY2xvc2UiLCJ1c2VyIiwibm9Vc2VyIiwiaXMiLCJwYXNzd29yZCIsInJlcG9zaXRvcnkiLCJicmFuY2giLCJ3ZWJob29rX2VuYWJsZWQiLCJwdXNoIiwiaW5jbHVkZXMiLCJsZW5ndGgiLCJqb2luIiwiZm9sZGVycyIsImkiLCJpdGVtIiwidmFsdWUiLCJwcm9wIiwiZGF0YUZvbGRlcnMiLCJzZWxlY3RpemUiLCJzZXRWYWx1ZSIsInRvQXJyYXkiLCJ0ZXN0IiwiYnRvYSIsInN0cmluZ2lmeSIsInNlbGVjdGVkUmVwbyIsInJlcG9VUkwiLCJjdXJyZW50VGFyZ2V0IiwiY2hlY2tlZCIsInNlY3JldCIsImh0bWwiLCJzZXJ2aWNlIiwicmVwbGFjZSIsImVuZCIsImJ1dHRvbiIsInBhbmVsIiwic2xpZGVUb2dnbGUiLCJpc1Zpc2libGUiLCJpY29uIiwic2hvd05vdGljZXMiLCJlbGVtZW50Iiwic2VsZWN0aW9uIiwiY29sdW1uIiwiZmFkZUluIiwiZHVyYXRpb24iLCJzaWJsaW5ncyIsImNvbnRhaW5lciIsIndyYXBJbm5lciIsIlNldHRpbmdzIl0sIm1hcHBpbmdzIjoiOztBQUFBLE1BQU0sZ0NBQTRCLFc7Ozs7Ozs7OztBQ0FsQztBQUVBQSx3Q0FBQSxHQUErQixpQkFBL0I7QUFDQUEsNENBQUEsR0FBbUMsSUFBbkM7QUFFQSxtREFBZUEsa0JBQWYsRTs7QUNMQTtBQUNBO0FBRUEsSUFBTUMsY0FBYyxHQUFHQyx5QkFBQyxDQUFDLGlCQUFELENBQXhCO0FBRUFBLHlCQUFDLENBQUNDLE1BQUQsQ0FBRCxDQUFVQyxFQUFWLENBQWEsU0FBYixFQUF3QixZQUFNO0FBQzFCSCxnQkFBYyxDQUFDSSxTQUFmO0FBQ0gsQ0FGRDtBQUlBSCx5QkFBQyxDQUFDQyxNQUFELENBQUQsQ0FBVUMsRUFBVixDQUFhLFFBQWIsRUFBdUIsWUFBTTtBQUN6QkgsZ0JBQWMsQ0FBQ0ssT0FBZjtBQUNILENBRkQ7QUFJQUoseUJBQUMsQ0FBQ0ssUUFBRCxDQUFELENBQVlDLEtBQVosQ0FBa0IsWUFBTTtBQUNwQixNQUFJLENBQUNDLE9BQUwsRUFBZTtBQUNYUixrQkFBYyxDQUFDSSxTQUFmO0FBQ0g7QUFDSixDQUpELEUsQ0FNQTs7QUFDQSw4Q0FBZSxPQUFPSyxxQkFBTSxDQUFDQyxTQUFQLENBQWlCQyxNQUF4QixLQUFtQyxXQUFuQyxHQUFpREYscUJBQU0sQ0FBQ0MsU0FBUCxDQUFpQkMsTUFBbEUs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LENBQUMwRixLQUFLLENBQUNtQyxhQUFQLENBQWhCO0FBQ0EsTUFBTW1CLFNBQVMsR0FBR3BELE1BQU0sQ0FBQ0MsT0FBUCxDQUFlLFVBQWYsQ0FBbEI7QUFDQSxNQUFNK0MsTUFBTSxHQUFHSSxTQUFTLENBQUN6RSxJQUFWLENBQWUsb0JBQWYsQ0FBZjtBQUVBcUUsUUFBTSxDQUFDckUsSUFBUCxDQUFZLHlCQUFaLEVBQXVDTyxRQUF2QyxDQUFnRCxRQUFoRDtBQUNILENBTkQ7QUFRQTlFLHlCQUFDLENBQUNLLFFBQUQsQ0FBRCxDQUFZSCxFQUFaLENBQWUsWUFBZixFQUE2Qix5REFBN0IsRUFBd0YsVUFBQ3dGLEtBQUQsRUFBVztBQUMvRixNQUFNRSxNQUFNLEdBQUc1Rix5QkFBQyxDQUFDMEYsS0FBSyxDQUFDbUMsYUFBUCxDQUFoQjtBQUNBLE1BQU1lLE1BQU0sR0FBR2hELE1BQU0sQ0FBQ21ELFFBQVAsQ0FBZ0IsU0FBaEIsQ0FBZjtBQUVBSCxRQUFNLENBQUNyRSxJQUFQLENBQVkseUJBQVosRUFBdUNPLFFBQXZDLENBQWdELFFBQWhEO0FBQ0gsQ0FMRDtBQU9BOUUseUJBQUMsQ0FBQ0ssUUFBRCxDQUFELENBQVlDLEtBQVosQ0FBa0IsWUFBTTtBQUNwQmlGLE9BQUssR0FBRzNCLE1BQU0sQ0FBQ1csSUFBUCxDQUFZLGtCQUFaLEVBQWdDc0MsTUFBaEMsR0FBeUMsQ0FBakQ7QUFDQWpELFFBQU0sQ0FBQ3FGLFNBQVAsQ0FBaUIsZUFBakI7QUFDQXBGLGFBQVcsQ0FBQ29GLFNBQVosQ0FBc0IsZUFBdEI7O0FBRUEsTUFBSXJGLE1BQU0sQ0FBQ2lELE1BQVAsS0FBa0JxQyx1Q0FBQSxJQUF1QixDQUFDQSwwQ0FBMUMsQ0FBSixFQUF1RTtBQUNuRWhGLGNBQVU7QUFDYjtBQUNKLENBUkQ7QUFVQSw2Q0FBZWdGLHdEQUFmLEkiLCJmaWxlIjoiODQ5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IEdpdFN5bmM7IiwiaW1wb3J0IHRvYXN0ciBmcm9tICd0b2FzdHInO1xuXG50b2FzdHIub3B0aW9ucy5wb3NpdGlvbkNsYXNzID0gJ3RvYXN0LXRvcC1yaWdodCc7XG50b2FzdHIub3B0aW9ucy5wcmV2ZW50RHVwbGljYXRlcyA9IHRydWU7XG5cbmV4cG9ydCBkZWZhdWx0IHRvYXN0cjtcbiIsImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5pbXBvcnQgaXNPbmxpbmUgZnJvbSAnLi4vdXRpbHMvb2ZmbGluZSc7XG5cbmNvbnN0IG9mZmxpbmVFbGVtZW50ID0gJCgnI29mZmxpbmUtc3RhdHVzJyk7XG5cbiQod2luZG93KS5vbignb2ZmbGluZScsICgpID0+IHtcbiAgICBvZmZsaW5lRWxlbWVudC5zbGlkZURvd24oKTtcbn0pO1xuXG4kKHdpbmRvdykub24oJ29ubGluZScsICgpID0+IHtcbiAgICBvZmZsaW5lRWxlbWVudC5zbGlkZVVwKCk7XG59KTtcblxuJChkb2N1bWVudCkucmVhZHkoKCkgPT4ge1xuICAgIGlmICghaXNPbmxpbmUpIHtcbiAgICAgICAgb2ZmbGluZUVsZW1lbnQuc2xpZGVEb3duKCk7XG4gICAgfVxufSk7XG5cbi8vIGFzc3VtZSBvbmxpbmUgaWYgY2FuJ3QgY2hlY2tcbmV4cG9ydCBkZWZhdWx0IHR5cGVvZiBnbG9iYWwubmF2aWdhdG9yLm9uTGluZSAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWwubmF2aWdhdG9yLm9uTGluZSA6IHRydWU7XG4iLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gR3JhdkFkbWluOyIsImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5pbXBvcnQgdG9hc3RyIGZyb20gJy4vdG9hc3RyJztcbmltcG9ydCBpc09ubGluZSBmcm9tICcuL29mZmxpbmUnO1xuaW1wb3J0IHsgY29uZmlnIH0gZnJvbSAnZ3Jhdi1jb25maWcnO1xuaW1wb3J0IHRyaW0gZnJvbSAnbW91dC9zdHJpbmcvdHJpbSc7XG5cbmxldCBVTkxPQURJTkcgPSBmYWxzZTtcbmxldCBlcnJvciA9IGZ1bmN0aW9uKHJlc3BvbnNlKSB7XG4gICAgbGV0IGVycm9yID0gbmV3IEVycm9yKHJlc3BvbnNlLnN0YXR1c1RleHQgfHwgcmVzcG9uc2UgfHwgJycpO1xuICAgIGVycm9yLnJlc3BvbnNlID0gcmVzcG9uc2U7XG5cbiAgICByZXR1cm4gZXJyb3I7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTdGF0dXMocmVzcG9uc2UpIHtcbiAgICByZXR1cm4gcmVzcG9uc2U7XG5cbiAgICAvKiBXaG9vcHMgY2FuIGhhbmRsZSBKU09OIHJlc3BvbnNlcyBzbyB3ZSBkb24ndCBuZWVkIHRoaXMgZm9yIG5vdy5cbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA+PSAyMDAgJiYgcmVzcG9uc2Uuc3RhdHVzIDwgMzAwKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcihyZXNwb25zZSk7XG4gICAgICAgIH1cbiAgICAqL1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VKU09OKHJlc3BvbnNlKSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLnRleHQoKS50aGVuKCh0ZXh0KSA9PiB7XG4gICAgICAgIGxldCBwYXJzZWQgPSB0ZXh0O1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcGFyc2VkID0gSlNPTi5wYXJzZSh0ZXh0KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGxldCBjb250ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBjb250ZW50LmlubmVySFRNTCA9IHRleHQ7XG5cbiAgICAgICAgICAgIGxldCB0aGVfZXJyb3IgPSBuZXcgRXJyb3IoKTtcbiAgICAgICAgICAgIHRoZV9lcnJvci5zdGFjayA9IHRyaW0oY29udGVudC5pbm5lclRleHQpO1xuXG4gICAgICAgICAgICB0aHJvdyB0aGVfZXJyb3I7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcGFyc2VkO1xuICAgIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlckZlZWRiYWNrKHJlc3BvbnNlKSB7XG4gICAgaWYgKFVOTE9BRElORykgeyByZXR1cm4gdHJ1ZTsgfVxuXG4gICAgbGV0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cyB8fCAocmVzcG9uc2UuZXJyb3IgPyAnZXJyb3InIDogJycpO1xuICAgIGxldCBtZXNzYWdlID0gcmVzcG9uc2UubWVzc2FnZSB8fCAocmVzcG9uc2UuZXJyb3IgPyByZXNwb25zZS5lcnJvci5tZXNzYWdlIDogbnVsbCk7XG4gICAgbGV0IHNldHRpbmdzID0gcmVzcG9uc2UudG9hc3RyIHx8IG51bGw7XG4gICAgbGV0IGJhY2t1cDtcblxuICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICAgIGNhc2UgJ3VuYXV0aGVudGljYXRlZCc6XG4gICAgICAgICAgICBkb2N1bWVudC5sb2NhdGlvbi5ocmVmID0gY29uZmlnLmJhc2VfdXJsX3JlbGF0aXZlO1xuICAgICAgICAgICAgdGhyb3cgZXJyb3IoJ0xvZ2dlZCBvdXQnKTtcbiAgICAgICAgY2FzZSAndW5hdXRob3JpemVkJzpcbiAgICAgICAgICAgIHN0YXR1cyA9ICdlcnJvcic7XG4gICAgICAgICAgICBtZXNzYWdlID0gbWVzc2FnZSB8fCAnVW5hdXRob3JpemVkLic7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZXJyb3InOlxuICAgICAgICAgICAgc3RhdHVzID0gJ2Vycm9yJztcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdVbmtub3duIGVycm9yLic7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnc3VjY2Vzcyc6XG4gICAgICAgICAgICBzdGF0dXMgPSAnc3VjY2Vzcyc7XG4gICAgICAgICAgICBtZXNzYWdlID0gbWVzc2FnZSB8fCAnJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgc3RhdHVzID0gJ2Vycm9yJztcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdJbnZhbGlkIEFKQVggcmVzcG9uc2UuJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChzZXR0aW5ncykge1xuICAgICAgICBiYWNrdXAgPSBPYmplY3QuYXNzaWduKHt9LCB0b2FzdHIub3B0aW9ucyk7XG4gICAgICAgIE9iamVjdC5rZXlzKHNldHRpbmdzKS5mb3JFYWNoKChrZXkpID0+IHsgdG9hc3RyLm9wdGlvbnNba2V5XSA9IHNldHRpbmdzW2tleV07IH0pO1xuICAgIH1cblxuICAgIGlmIChtZXNzYWdlICYmIChpc09ubGluZSB8fCAoIWlzT25saW5lICYmIHN0YXR1cyAhPT0gJ2Vycm9yJykpKSB7XG4gICAgICAgIHRvYXN0cltzdGF0dXMgPT09ICdzdWNjZXNzJyA/ICdzdWNjZXNzJyA6ICdlcnJvciddKG1lc3NhZ2UpO1xuICAgIH1cblxuICAgIGlmIChzZXR0aW5ncykge1xuICAgICAgICB0b2FzdHIub3B0aW9ucyA9IGJhY2t1cDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzcG9uc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VyRmVlZGJhY2tFcnJvcihlcnJvcikge1xuICAgIGlmIChVTkxPQURJTkcpIHsgcmV0dXJuIHRydWU7IH1cbiAgICBsZXQgc3RhY2sgPSBlcnJvci5zdGFjayA/IGA8cHJlPjxjb2RlPiR7ZXJyb3Iuc3RhY2t9PC9jb2RlPjwvcHJlPmAgOiAnJztcbiAgICB0b2FzdHIuZXJyb3IoYEZldGNoIEZhaWxlZDogPGJyIC8+ICR7ZXJyb3IubWVzc2FnZX0gJHtzdGFja31gKTtcbiAgICBjb25zb2xlLmVycm9yKGAke2Vycm9yLm1lc3NhZ2V9IGF0ICR7ZXJyb3Iuc3RhY2t9YCk7XG59XG5cbiQoZ2xvYmFsKS5vbignYmVmb3JldW5sb2FkLl9hamF4JywgKCkgPT4ge1xuICAgIFVOTE9BRElORyA9IHRydWU7XG59KTtcbiIsImltcG9ydCB7IHBhcnNlU3RhdHVzLCBwYXJzZUpTT04sIHVzZXJGZWVkYmFjaywgdXNlckZlZWRiYWNrRXJyb3IgfSBmcm9tICcuL3Jlc3BvbnNlJztcbmltcG9ydCB7IGNvbmZpZyB9IGZyb20gJ2dyYXYtY29uZmlnJztcblxubGV0IHJhdztcbmxldCByZXF1ZXN0ID0gZnVuY3Rpb24odXJsLCBvcHRpb25zID0ge30sIGNhbGxiYWNrID0gKCkgPT4gdHJ1ZSkge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjYWxsYmFjayA9IG9wdGlvbnM7XG4gICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5tZXRob2QgJiYgb3B0aW9ucy5tZXRob2QgPT09ICdwb3N0Jykge1xuICAgICAgICBsZXQgZGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuXG4gICAgICAgIG9wdGlvbnMuYm9keSA9IE9iamVjdC5hc3NpZ24oeyAnYWRtaW4tbm9uY2UnOiBjb25maWcuYWRtaW5fbm9uY2UgfSwgb3B0aW9ucy5ib2R5IHx8IHt9KTtcbiAgICAgICAgT2JqZWN0LmtleXMob3B0aW9ucy5ib2R5KS5tYXAoKGtleSkgPT4gZGF0YS5hcHBlbmQoa2V5LCBvcHRpb25zLmJvZHlba2V5XSkpO1xuICAgICAgICBvcHRpb25zLmJvZHkgPSBkYXRhO1xuICAgIH1cblxuICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgY3JlZGVudGlhbHM6ICdzYW1lLW9yaWdpbicsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgfVxuICAgIH0sIG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIGZldGNoKHVybCwgb3B0aW9ucylcbiAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICByYXcgPSByZXNwb25zZTtcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4ocGFyc2VTdGF0dXMpXG4gICAgICAgIC50aGVuKHBhcnNlSlNPTilcbiAgICAgICAgLnRoZW4odXNlckZlZWRiYWNrKVxuICAgICAgICAudGhlbigocmVzcG9uc2UpID0+IGNhbGxiYWNrKHJlc3BvbnNlLCByYXcpKVxuICAgICAgICAuY2F0Y2godXNlckZlZWRiYWNrRXJyb3IpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgcmVxdWVzdDtcbiIsImltcG9ydCBTZXR0aW5ncyBmcm9tICdnaXQtc3luYyc7XG5pbXBvcnQgcmVxdWVzdCBmcm9tICdhZG1pbi91dGlscy9yZXF1ZXN0JztcbmltcG9ydCB0b2FzdHIgZnJvbSAnYWRtaW4vdXRpbHMvdG9hc3RyJztcbmltcG9ydCB7IGNvbmZpZyB9IGZyb20gJ2dyYXYtY29uZmlnJztcbmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5pbXBvcnQgJ3doYXR3Zy1mZXRjaCc7XG5cbmNvbnN0IFdJWkFSRCA9ICQoJ1tkYXRhLXJlbW9kYWwtaWQ9XCJ3aXphcmRcIl0nKTtcbmNvbnN0IFJFU0VUX0xPQ0FMID0gJCgnW2RhdGEtcmVtb2RhbC1pZD1cInJlc2V0LWxvY2FsXCJdJyk7XG5jb25zdCBTRVJWSUNFUyA9IHsgJ2dpdGh1Yic6ICdnaXRodWIuY29tJywgJ2JpdGJ1Y2tldCc6ICdiaXRidWNrZXQub3JnJywgJ2dpdGxhYic6ICdnaXRsYWIuY29tJywgJ2FsbG90aGVycyc6ICdhbGxvdGhlcnMucmVwbycgfTtcbmNvbnN0IEJSQU5DSEVTID0geyAnZ2l0aHViJzogJ21haW4nLCAnYml0YnVja2V0JzogJ21hc3RlcicsICdnaXRsYWInOiAnbWFzdGVyJywgJ2FsbG90aGVycyc6ICdtYXN0ZXInIH07XG5jb25zdCBURU1QTEFURVMgPSB7XG4gICAgUkVQT19VUkw6ICdodHRwczovL3twbGFjZWhvbGRlcn0vZ2V0Z3Jhdi9ncmF2LmdpdCdcbn07XG5cbmNvbnN0IG9wZW5XaXphcmQgPSAoKSA9PiB7XG4gICAgY29uc3QgbW9kYWwgPSBXSVpBUkQucmVtb2RhbCh7IGNsb3NlT25Db25maXJtOiBmYWxzZSB9KTtcbiAgICBjb25zdCBwcmV2aW91cyA9IFdJWkFSRC5maW5kKCdbZGF0YS1naXRzeW5jLWFjdGlvbj1cInByZXZpb3VzXCJdJyk7XG4gICAgY29uc3QgbmV4dCA9IFdJWkFSRC5maW5kKCdbZGF0YS1naXRzeW5jLWFjdGlvbj1cIm5leHRcIl0nKTtcbiAgICBjb25zdCBzYXZlID0gV0laQVJELmZpbmQoJ1tkYXRhLWdpdHN5bmMtYWN0aW9uPVwic2F2ZVwiXScpO1xuXG4gICAgU1RFUCA9IDA7XG5cbiAgICBXSVpBUkQuZmluZChgZm9ybSA+IFtjbGFzc149c3RlcC1dOm5vdCguc3RlcC0ke1NURVB9KSA+IC5wYW5lbGApLmhpZGUoKS5yZW1vdmVDbGFzcygnaGlkZGVuJyk7XG4gICAgV0laQVJELmZpbmQoYGZvcm0gPiBbY2xhc3M9XCJzdGVwLSR7U1RFUH1cIl0gPiAucGFuZWxgKS5zaG93KCk7XG5cbiAgICBuZXh0LnJlbW92ZUNsYXNzKCdoaWRkZW4nKTtcbiAgICBwcmV2aW91cy5hZGRDbGFzcygnaGlkZGVuJyk7XG4gICAgc2F2ZS5hZGRDbGFzcygnaGlkZGVuJyk7XG5cbiAgICBjb25zdCB3ZWJob29rID0gJCgnW25hbWU9XCJkYXRhW3dlYmhvb2tdXCJdJykudmFsKCk7XG4gICAgY29uc3Qgd2ViaG9va19zZWNyZXQgPSAkKCdbbmFtZT1cImRhdGFbd2ViaG9va19zZWNyZXRdXCJdJykudmFsKCk7XG4gICAgJCgnW25hbWU9XCJnaXRzeW5jW3JlcG9zaXRvcnldXCJdJykudHJpZ2dlcignY2hhbmdlJyk7XG4gICAgJCgnW25hbWU9XCJnaXRzeW5jW3dlYmhvb2tdXCJdJykudmFsKHdlYmhvb2spO1xuICAgICQoJ1tuYW1lPVwiZ2l0c3luY1t3ZWJob29rX3NlY3JldF1cIl0nKS52YWwod2ViaG9va19zZWNyZXQpO1xuICAgICQoJy5naXRzeW5jLXdlYmhvb2snKS50ZXh0KHdlYmhvb2spO1xuXG4gICAgbW9kYWwub3BlbigpO1xufTtcblxuY29uc3QgZGlzYWJsZUJ1dHRvbiA9IChuZXh0KSA9PiB7XG4gICAgbmV4dFxuICAgICAgICAuYXR0cignZGlzYWJsZWQnLCAnZGlzYWJsZWQnKVxuICAgICAgICAuYWRkQ2xhc3MoJ2hpbnQtLXRvcCcpO1xufTtcblxuY29uc3QgZW5hYmxlQnV0dG9uID0gKG5leHQpID0+IHtcbiAgICBuZXh0XG4gICAgICAgIC5hdHRyKCdkaXNhYmxlZCcsIG51bGwpXG4gICAgICAgIC5yZW1vdmVDbGFzcygnaGludC0tdG9wJyk7XG59O1xuXG5sZXQgU1RFUCA9IDA7XG5sZXQgU1RFUFMgPSAwO1xubGV0IFNFUlZJQ0UgPSBudWxsO1xuXG4kKGRvY3VtZW50KS5vbignY2xvc2VkJywgV0laQVJELCBmdW5jdGlvbihlKSB7XG4gICAgU1RFUCA9IDA7XG59KTtcblxuJChkb2N1bWVudCkub24oJ2NsaWNrJywgJ1tkYXRhLWdpdHN5bmMtdXNlcmFjdGlvbl0nLCAoZXZlbnQpID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHRhcmdldCA9ICQoZXZlbnQudGFyZ2V0KS5jbG9zZXN0KCdbZGF0YS1naXRzeW5jLXVzZXJhY3Rpb25dJyk7XG4gICAgY29uc3QgYWN0aW9uID0gdGFyZ2V0LmRhdGEoJ2dpdHN5bmNVc2VyYWN0aW9uJyk7XG4gICAgY29uc3QgVVJJID0gYCR7Y29uZmlnLmN1cnJlbnRfdXJsfS5qc29uYDtcblxuICAgIHN3aXRjaCAoYWN0aW9uKSB7XG4gICAgICAgIGNhc2UgJ3dpemFyZCc6XG4gICAgICAgICAgICBvcGVuV2l6YXJkKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnc3luYyc6XG4gICAgICAgICAgICBjb25zdCByZWxhdGl2ZVVSSSA9IHRhcmdldC5kYXRhKCdnaXRzeW5jLXVyaScpO1xuICAgICAgICAgICAgdGFyZ2V0LmZpbmQoJ2knKS5yZW1vdmVDbGFzcygnZmEtY2xvdWQgZmEtZ2l0JykuYWRkQ2xhc3MoJ2ZhLWNpcmNsZS1vLW5vdGNoIGZhLXNwaW4nKTtcblxuICAgICAgICAgICAgcmVxdWVzdChyZWxhdGl2ZVVSSSB8fCBVUkksIHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICAgICAgICAgICAgICBib2R5OiB7IHRhc2s6ICdzeW5jaHJvbml6ZScgfVxuICAgICAgICAgICAgfSwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRhcmdldC5maW5kKCdpJykucmVtb3ZlQ2xhc3MoJ2ZhLWNpcmNsZS1vLW5vdGNoIGZhLXNwaW4nKS5hZGRDbGFzcyhyZWxhdGl2ZVVSSSA/ICdmYS1naXQnIDogJ2ZhLWNsb3VkJyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdyZXNldCc6XG4gICAgICAgICAgICBjb25zdCBtb2RhbCA9IFJFU0VUX0xPQ0FMLnJlbW9kYWwoeyBjbG9zZU9uQ29uZmlybTogZmFsc2UgfSk7XG4gICAgICAgICAgICBtb2RhbC5vcGVuKCk7XG5cbiAgICAgICAgICAgIGlmICghUkVTRVRfTE9DQUwuZGF0YSgnX3Jlc2V0X2V2ZW50X3NldF8nKSkge1xuICAgICAgICAgICAgICAgIFJFU0VUX0xPQ0FMLmZpbmQoJ1tkYXRhLWdpdHN5bmMtYWN0aW9uPVwicmVzZXQtbG9jYWxcIl0nKS5vbmUoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBtb2RhbC5jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICBSRVNFVF9MT0NBTC5kYXRhKCdfcmVzZXRfZXZlbnRfc2V0XycsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXQuZmluZCgnaScpLnJlbW92ZUNsYXNzKCdmYS1oaXN0b3J5JykuYWRkQ2xhc3MoJ2ZhLWNpcmNsZS1vLW5vdGNoIGZhLXNwaW4nKTtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdChVUkksIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgICAgICAgICAgICAgICAgICAgICAgYm9keTogeyB0YXNrOiAncmVzZXRsb2NhbCcgfVxuICAgICAgICAgICAgICAgICAgICB9LCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBSRVNFVF9MT0NBTC5kYXRhKCdfcmVzZXRfZXZlbnRfc2V0XycsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC5maW5kKCdpJykucmVtb3ZlQ2xhc3MoJ2ZhLWNpcmNsZS1vLW5vdGNoIGZhLXNwaW4nKS5hZGRDbGFzcygnZmEtaGlzdG9yeScpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbn0pO1xuXG4kKGRvY3VtZW50KS5vbignY2xpY2snLCAnW2RhdGEtZ2l0c3luYy1hY3Rpb25dJywgKGV2ZW50KSA9PiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIGNvbnN0IHRhcmdldCA9ICQoZXZlbnQudGFyZ2V0KS5jbG9zZXN0KCdbZGF0YS1naXRzeW5jLWFjdGlvbl0nKTtcbiAgICBjb25zdCBwcmV2aW91cyA9IFdJWkFSRC5maW5kKCdbZGF0YS1naXRzeW5jLWFjdGlvbj1cInByZXZpb3VzXCJdJyk7XG4gICAgY29uc3QgbmV4dCA9IFdJWkFSRC5maW5kKCdbZGF0YS1naXRzeW5jLWFjdGlvbj1cIm5leHRcIl0nKTtcbiAgICBjb25zdCBzYXZlID0gV0laQVJELmZpbmQoJ1tkYXRhLWdpdHN5bmMtYWN0aW9uPVwic2F2ZVwiXScpO1xuICAgIGNvbnN0IGFjdGlvbiA9IHRhcmdldC5kYXRhKCdnaXRzeW5jQWN0aW9uJyk7XG4gICAgY29uc3QgdXNlciA9ICQoJ1tuYW1lPVwiZ2l0c3luY1tyZXBvX3VzZXJdXCJdJykudmFsKCk7XG4gICAgY29uc3Qgbm9Vc2VyID0gJCgnW25hbWU9XCJnaXRzeW5jW25vX3VzZXJdXCJdJykuaXMoJzpjaGVja2VkJyk7XG4gICAgY29uc3QgcGFzc3dvcmQgPSAkKCdbbmFtZT1cImdpdHN5bmNbcmVwb19wYXNzd29yZF1cIl0nKS52YWwoKTtcbiAgICBjb25zdCByZXBvc2l0b3J5ID0gJCgnW25hbWU9XCJnaXRzeW5jW3JlcG9fdXJsXVwiXScpLnZhbCgpO1xuICAgIGNvbnN0IGJyYW5jaCA9ICQoJ1tuYW1lPVwiZ2l0c3luY1ticmFuY2hdXCJdJykudmFsKCk7XG4gICAgY29uc3Qgd2ViaG9vayA9ICQoJ1tuYW1lPVwiZ2l0c3luY1t3ZWJob29rXVwiXScpLnZhbCgpO1xuICAgIGNvbnN0IHdlYmhvb2tfZW5hYmxlZCA9ICQoJ1tuYW1lPVwiZ2l0c3luY1t3ZWJob29rX2VuYWJsZWRdXCJdJykuaXMoJzpjaGVja2VkJyk7XG4gICAgY29uc3Qgd2ViaG9va19zZWNyZXQgPSAkKCdbbmFtZT1cImdpdHN5bmNbd2ViaG9va19zZWNyZXRdXCJdJykudmFsKCk7XG5cbiAgICBpZiAodGFyZ2V0LmF0dHIoJ2Rpc2FibGVkJykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBlcnJvciA9IFtdO1xuXG4gICAgaWYgKCF1c2VyICYmICFub1VzZXIpIHtcbiAgICAgICAgZXJyb3IucHVzaCgnVXNlcm5hbWUgaXMgbWlzc2luZy4nKTtcbiAgICB9XG4gICAgLypcbiAgICBpZiAoIXBhc3N3b3JkKSB7XG4gICAgICAgIGVycm9yLnB1c2goJ1Bhc3N3b3JkIGlzIG1pc3NpbmcuJyk7XG4gICAgfVxuICAgICovXG4gICAgaWYgKCFyZXBvc2l0b3J5KSB7XG4gICAgICAgIGVycm9yLnB1c2goJ1JlcG9zaXRvcnkgaXMgbWlzc2luZy4nKTtcbiAgICB9XG5cbiAgICBpZiAoWydzYXZlJywgJ3Rlc3QnXS5pbmNsdWRlcyhhY3Rpb24pKSB7XG4gICAgICAgIHRhcmdldC5maW5kKCcuZmEnKS5yZW1vdmVDbGFzcyhhY3Rpb24gPT09ICd0ZXN0JyA/ICdmYS1wbHVnJyA6ICdmYS1jaGVjaycpLmFkZENsYXNzKCdmYS1zcGluIGZhLWNpcmNsZS1vLW5vdGNoJyk7XG5cbiAgICAgICAgaWYgKGVycm9yLmxlbmd0aCkge1xuICAgICAgICAgICAgdG9hc3RyLmVycm9yKGVycm9yLmpvaW4oJzxiciAvPicpKTtcbiAgICAgICAgICAgIHRhcmdldC5maW5kKCcuZmEnKS5yZW1vdmVDbGFzcygnZmEtc3BpbiBmYS1jaXJjbGUtby1ub3RjaCcpLmFkZENsYXNzKGFjdGlvbiA9PT0gJ3Rlc3QnID8gJ2ZhLXBsdWcnIDogJ2ZhLWNoZWNrJyk7XG5cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhY3Rpb24gPT09ICdzYXZlJykge1xuICAgICAgICBjb25zdCBmb2xkZXJzID0gJCgnW25hbWU9XCJnaXRzeW5jW2ZvbGRlcnNdXCJdOmNoZWNrZWQnKS5tYXAoKGksIGl0ZW0pID0+IGl0ZW0udmFsdWUpO1xuICAgICAgICAkKCdbbmFtZT1cImRhdGFbcmVwb3NpdG9yeV1cIl0nKS52YWwocmVwb3NpdG9yeSk7XG4gICAgICAgICQoJ1tuYW1lPVwiZGF0YVtub191c2VyXVwiXScpLnZhbChub1VzZXIgPyAnMScgOiAnMCcpO1xuICAgICAgICAkKCdbbmFtZT1cImRhdGFbdXNlcl1cIl0nKS52YWwodXNlcik7XG4gICAgICAgICQoJ1tuYW1lPVwiZGF0YVtwYXNzd29yZF1cIl0nKS52YWwocGFzc3dvcmQpO1xuICAgICAgICAkKCdbbmFtZT1cImRhdGFbYnJhbmNoXVwiXScpLnZhbChicmFuY2gpO1xuICAgICAgICAkKCdbbmFtZT1cImRhdGFbcmVtb3RlXVticmFuY2hdXCJdJykudmFsKGJyYW5jaCk7XG4gICAgICAgICQoJ1tuYW1lPVwiZGF0YVt3ZWJob29rXVwiXScpLnZhbCh3ZWJob29rKTtcbiAgICAgICAgJChgW25hbWU9XCJkYXRhW3dlYmhvb2tfZW5hYmxlZF1cIl1bdmFsdWU9XCIke3dlYmhvb2tfZW5hYmxlZCA/IDEgOiAwfVwiXWApLnByb3AoJ2NoZWNrZWQnLCB0cnVlKTtcbiAgICAgICAgJCgnW25hbWU9XCJkYXRhW3dlYmhvb2tfc2VjcmV0XVwiXScpLnZhbCh3ZWJob29rX3NlY3JldCk7XG5cbiAgICAgICAgY29uc3QgZGF0YUZvbGRlcnMgPSAkKCdbbmFtZT1cImRhdGFbZm9sZGVyc11bXVwiXScpO1xuICAgICAgICBpZiAoZGF0YUZvbGRlcnMgJiYgZGF0YUZvbGRlcnNbMF0gJiYgZGF0YUZvbGRlcnNbMF0uc2VsZWN0aXplKSB7XG4gICAgICAgICAgICBkYXRhRm9sZGVyc1swXS5zZWxlY3RpemUuc2V0VmFsdWUoZm9sZGVycy50b0FycmF5KCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgJCgnW25hbWU9XCJ0YXNrXCJdW3ZhbHVlPVwic2F2ZVwiXScpLnRyaWdnZXIoJ2NsaWNrJyk7XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChhY3Rpb24gPT09ICd0ZXN0Jykge1xuICAgICAgICBjb25zdCBVUkkgPSBgJHtjb25maWcuY3VycmVudF91cmx9Lmpzb25gO1xuICAgICAgICBjb25zdCB0ZXN0ID0gZ2xvYmFsLmJ0b2EoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgdXNlcjogbm9Vc2VyID8gJycgOiB1c2VyLFxuICAgICAgICAgICAgcGFzc3dvcmQsXG4gICAgICAgICAgICByZXBvc2l0b3J5LFxuICAgICAgICAgICAgYnJhbmNoXG4gICAgICAgIH0pKTtcblxuICAgICAgICByZXF1ZXN0KFVSSSwge1xuICAgICAgICAgICAgbWV0aG9kOiAncG9zdCcsXG4gICAgICAgICAgICBib2R5OiB7IHRlc3QsIHRhc2s6ICd0ZXN0Q29ubmVjdGlvbicgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0YXJnZXQuZmluZCgnLmZhJykucmVtb3ZlQ2xhc3MoJ2ZhLXNwaW4gZmEtY2lyY2xlLW8tbm90Y2gnKS5hZGRDbGFzcygnZmEtcGx1ZycpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgV0laQVJELmZpbmQoYC5zdGVwLSR7U1RFUH0gPiAucGFuZWxgKS5zbGlkZVVwKCk7XG4gICAgU1RFUCArPSBhY3Rpb24gPT09ICduZXh0JyA/ICsxIDogLTE7XG4gICAgV0laQVJELmZpbmQoYC5zdGVwLSR7U1RFUH0gPiAucGFuZWxgKS5zbGlkZURvd24oKTtcblxuICAgIHNhdmUuYWRkQ2xhc3MoJ2hpZGRlbicpO1xuXG4gICAgaWYgKGFjdGlvbiA9PT0gJ25leHQnKSB7XG4gICAgICAgIHByZXZpb3VzLnJlbW92ZUNsYXNzKCdoaWRkZW4nKTtcbiAgICB9XG5cbiAgICBpZiAoU1RFUCA8PSAwKSB7XG4gICAgICAgIHByZXZpb3VzLmFkZENsYXNzKCdoaWRkZW4nKTtcbiAgICAgICAgZW5hYmxlQnV0dG9uKG5leHQpO1xuICAgIH1cblxuICAgIGlmIChTVEVQID4gMCkge1xuICAgICAgICBuZXh0LnJlbW92ZUNsYXNzKCdoaWRkZW4nKTtcbiAgICB9XG5cbiAgICBpZiAoU1RFUCA9PT0gMSkge1xuICAgICAgICBjb25zdCBzZWxlY3RlZFJlcG8gPSAkKCdbbmFtZT1cImdpdHN5bmNbcmVwb3NpdG9yeV1cIl06Y2hlY2tlZCcpO1xuICAgICAgICBpZiAoIXNlbGVjdGVkUmVwby5sZW5ndGgpIHtcbiAgICAgICAgICAgIGRpc2FibGVCdXR0b24obmV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlbmFibGVCdXR0b24obmV4dCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoU1RFUCA9PT0gMikge1xuICAgICAgICBjb25zdCByZXBvVVJMID0gJCgnW25hbWU9XCJnaXRzeW5jW3JlcG9fdXJsXVwiXScpLnZhbCgpO1xuICAgICAgICBpZiAoIXJlcG9VUkwubGVuZ3RoIHx8ICFicmFuY2gpIHtcbiAgICAgICAgICAgIGRpc2FibGVCdXR0b24obmV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlbmFibGVCdXR0b24obmV4dCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoU1RFUCA9PT0gU1RFUFMpIHtcbiAgICAgICAgbmV4dC5hZGRDbGFzcygnaGlkZGVuJyk7XG4gICAgICAgIHByZXZpb3VzLnJlbW92ZUNsYXNzKCdoaWRkZW4nKTtcbiAgICAgICAgc2F2ZS5yZW1vdmVDbGFzcygnaGlkZGVuJyk7XG4gICAgfVxufSk7XG5cbiQoZG9jdW1lbnQpLm9uKCdpbnB1dCcsICdbbmFtZT1cImdpdHN5bmNbbm9fdXNlcl1cIl0nLCAoZXZlbnQpID0+IHtcbiAgICBjb25zdCB0YXJnZXQgPSAkKGV2ZW50LmN1cnJlbnRUYXJnZXQpO1xuICAgIGNvbnN0IHVzZXIgPSAkKCdbbmFtZT1cImdpdHN5bmNbcmVwb191c2VyXVwiXScpO1xuICAgIGlmICh0YXJnZXQuaXMoJzpjaGVja2VkJykpIHtcbiAgICAgICAgdXNlclxuICAgICAgICAgICAgLnZhbCgnJylcbiAgICAgICAgICAgIC5wcm9wKCdkaXNhYmxlZCcsICdkaXNhYmxlZCcpXG4gICAgICAgICAgICAuYXR0cigncGxhY2Vob2xkZXInLCAnPHVzZXJuYW1lIG5vdCByZXF1aXJlZD4nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB1c2VyXG4gICAgICAgICAgICAucHJvcCgnZGlzYWJsZWQnLCBudWxsKVxuICAgICAgICAgICAgLmF0dHIoJ3BsYWNlaG9sZGVyJywgJ1VzZXJuYW1lLCBub3QgZW1haWwnKTtcbiAgICB9XG59KTtcbiQoZG9jdW1lbnQpLm9uKCdjaGFuZ2UnLCAnW25hbWU9XCJnaXRzeW5jW3JlcG9zaXRvcnldXCJdJywgKCkgPT4ge1xuICAgIGVuYWJsZUJ1dHRvbihXSVpBUkQuZmluZCgnW2RhdGEtZ2l0c3luYy1hY3Rpb249XCJuZXh0XCJdJykpO1xufSk7XG5cbiQoZG9jdW1lbnQpLm9uKCdpbnB1dCcsICdbbmFtZT1cImdpdHN5bmNbcmVwb191cmxdXCJdJywgKGV2ZW50KSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0ID0gJChldmVudC5jdXJyZW50VGFyZ2V0KTtcbiAgICBjb25zdCB2YWx1ZSA9IHRhcmdldC52YWwoKTtcbiAgICBjb25zdCBuZXh0ID0gV0laQVJELmZpbmQoJ1tkYXRhLWdpdHN5bmMtYWN0aW9uPVwibmV4dFwiXScpO1xuXG4gICAgaWYgKHZhbHVlLmxlbmd0aCkge1xuICAgICAgICBlbmFibGVCdXR0b24obmV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZGlzYWJsZUJ1dHRvbihuZXh0KTtcbiAgICB9XG59KTtcblxuJChkb2N1bWVudCkub24oJ2tleXVwJywgJ1tkYXRhLWdpdHN5bmMtdXJpYmFzZV0gW25hbWU9XCJnaXRzeW5jW3dlYmhvb2tdXCJdJywgKGV2ZW50KSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0ID0gJChldmVudC5jdXJyZW50VGFyZ2V0KTtcbiAgICBjb25zdCB2YWx1ZSA9IHRhcmdldC52YWwoKTtcbiAgICAkKCcuZ2l0c3luYy13ZWJob29rJykudGV4dCh2YWx1ZSk7XG59KTtcblxuJChkb2N1bWVudCkub24oJ2tleXVwJywgJ1tkYXRhLWdpdHN5bmMtdXJpYmFzZV0gW25hbWU9XCJnaXRzeW5jW3dlYmhvb2tfc2VjcmV0XVwiXScsIChldmVudCkgPT4ge1xuICAgICQoJ1tkYXRhLWdpdHN5bmMtdXJpYmFzZV0gW25hbWU9XCJnaXRzeW5jW3dlYmhvb2tfZW5hYmxlZF1cIl0nKS50cmlnZ2VyKCdjaGFuZ2UnKTtcbn0pO1xuXG4kKGRvY3VtZW50KS5vbignY2hhbmdlJywgJ1tkYXRhLWdpdHN5bmMtdXJpYmFzZV0gW25hbWU9XCJnaXRzeW5jW3dlYmhvb2tfZW5hYmxlZF1cIl0nLCAoZXZlbnQpID0+IHtcbiAgICBjb25zdCB0YXJnZXQgPSAkKGV2ZW50LmN1cnJlbnRUYXJnZXQpO1xuICAgIGNvbnN0IGNoZWNrZWQgPSB0YXJnZXQuaXMoJzpjaGVja2VkJyk7XG4gICAgY29uc3Qgc2VjcmV0ID0gJCgnW25hbWU9XCJnaXRzeW5jW3dlYmhvb2tfc2VjcmV0XVwiXScpLnZhbCgpO1xuICAgIHRhcmdldC5jbG9zZXN0KCcud2ViaG9vay1zZWNyZXQtd3JhcHBlcicpLmZpbmQoJ2xhYmVsOmxhc3QtY2hpbGQnKVtjaGVja2VkID8gJ3JlbW92ZUNsYXNzJyA6ICdhZGRDbGFzcyddKCdoaWRkZW4nKTtcbiAgICAkKCcuZ2l0c3luYy13ZWJob29rLXNlY3JldCcpLmh0bWwoIWNoZWNrZWQgfHwgIXNlY3JldC5sZW5ndGggPyAnPGVtPmxlYXZlIGVtcHR5PC9lbT4nIDogYDxjb2RlPiR7c2VjcmV0fTwvY29kZT5gKTtcbn0pO1xuXG4kKGRvY3VtZW50KS5vbignY2hhbmdlJywgJ1tuYW1lPVwiZ2l0c3luY1tyZXBvc2l0b3J5XVwiXScsIChldmVudCkgPT4ge1xuICAgIGNvbnN0IHRhcmdldCA9ICQoZXZlbnQudGFyZ2V0KTtcbiAgICBpZiAoIXRhcmdldC5pcygnOmNoZWNrZWQnKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgU0VSVklDRSA9IHRhcmdldC52YWwoKTtcblxuICAgIE9iamVjdC5rZXlzKFNFUlZJQ0VTKS5mb3JFYWNoKChzZXJ2aWNlKSA9PiB7XG4gICAgICAgIFdJWkFSRC5maW5kKGAuaGlkZGVuLXN0ZXAtJHtzZXJ2aWNlfWApW3NlcnZpY2UgPT09IFNFUlZJQ0UgPyAncmVtb3ZlQ2xhc3MnIDogJ2FkZENsYXNzJ10oJ2hpZGRlbicpO1xuICAgICAgICBpZiAoc2VydmljZSA9PT0gU0VSVklDRSkge1xuICAgICAgICAgICAgV0laQVJELmZpbmQoJy53ZWJob29rLXNlY3JldC13cmFwcGVyJylbc2VydmljZSA9PT0gJ2JpdGJ1Y2tldCcgPyAnYWRkQ2xhc3MnIDogJ3JlbW92ZUNsYXNzJ10oJ2hpZGRlbicpO1xuICAgICAgICAgICAgV0laQVJEXG4gICAgICAgICAgICAgICAgLmZpbmQoJ2lucHV0W25hbWU9XCJnaXRzeW5jW3JlcG9fdXJsXVwiXVtwbGFjZWhvbGRlcl0nKVxuICAgICAgICAgICAgICAgIC5hdHRyKCdwbGFjZWhvbGRlcicsIFRFTVBMQVRFUy5SRVBPX1VSTC5yZXBsYWNlKC9cXHtwbGFjZWhvbGRlclxcfS8sIFNFUlZJQ0VTW3NlcnZpY2VdKSlcbiAgICAgICAgICAgICAgICAuZW5kKClcbiAgICAgICAgICAgICAgICAuZmluZCgnaW5wdXRbbmFtZT1cImdpdHN5bmNbYnJhbmNoXVwiXScpXG4gICAgICAgICAgICAgICAgLmF0dHIoJ3BsYWNlaG9sZGVyJywgQlJBTkNIRVNbc2VydmljZV0pXG4gICAgICAgICAgICAgICAgLnZhbChCUkFOQ0hFU1tzZXJ2aWNlXSk7XG4gICAgICAgIH1cbiAgICB9KTtcblxufSk7XG5cbiQoZG9jdW1lbnQpLm9uKCdjbGljaycsICdbZGF0YS1hY2Nlc3MtdG9rZW5zLWRldGFpbHNdJywgKGV2ZW50KSA9PiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIGNvbnN0IGJ1dHRvbiA9ICQoZXZlbnQuY3VycmVudFRhcmdldCk7XG4gICAgY29uc3QgcGFuZWwgPSBidXR0b24uY2xvc2VzdCgnLmFjY2Vzcy10b2tlbnMnKS5maW5kKCcuYWNjZXNzLXRva2Vucy1kZXRhaWxzJyk7XG5cbiAgICBwYW5lbC5zbGlkZVRvZ2dsZSgyNTAsICgpID0+IHtcbiAgICAgICAgY29uc3QgaXNWaXNpYmxlID0gcGFuZWwuaXMoJzp2aXNpYmxlJyk7XG4gICAgICAgIGNvbnN0IGljb24gPSBidXR0b24uZmluZCgnLmZhJyk7XG5cbiAgICAgICAgaWNvbi5yZW1vdmVDbGFzcygnZmEtY2hldnJvbi1kb3duIGZhLWNoZXZyb24tdXAnKS5hZGRDbGFzcyhgZmEtY2hldnJvbi0ke2lzVmlzaWJsZSA/ICd1cCcgOiAnZG93bid9YCk7XG4gICAgfSk7XG59KTtcblxuY29uc3Qgc2hvd05vdGljZXMgPSAoZWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IHRhcmdldCA9ICQoZWxlbWVudCk7XG5cbiAgICBjb25zdCBzZWxlY3Rpb24gPSB0YXJnZXQudmFsKCkucmVwbGFjZSgvXFwvL2csICctJyk7XG4gICAgY29uc3QgY29sdW1uID0gdGFyZ2V0LmNsb3Nlc3QoJy5jb2x1bW5zJykuZmluZCgnLmNvbHVtbjpsYXN0Jyk7XG5cbiAgICBjb2x1bW4uZmluZCgnW2NsYXNzKj1cImRlc2NyaXB0aW9uLVwiXScpLmFkZENsYXNzKCdoaWRkZW4nKTtcbiAgICBjb2x1bW4uZmluZChgLmRlc2NyaXB0aW9uLSR7c2VsZWN0aW9ufWApLnJlbW92ZUNsYXNzKCdoaWRkZW4nKS5oaWRlKCkuZmFkZUluKHtcbiAgICAgICAgZHVyYXRpb246IDI1MFxuICAgIH0pO1xufTtcblxuJChkb2N1bWVudCkub24oJ2lucHV0JywgJ1tkYXRhLXJlbW9kYWwtaWQ9XCJ3aXphcmRcIl0gLnN0ZXAtNCBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0nLCAoZXZlbnQpID0+IHtcbiAgICBjb25zdCB0YXJnZXQgPSAkKGV2ZW50LmN1cnJlbnRUYXJnZXQpO1xuICAgIGlmICghdGFyZ2V0LmlzKCc6Y2hlY2tlZCcpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzaG93Tm90aWNlcyh0YXJnZXQpO1xufSk7XG5cbiQoZG9jdW1lbnQpLm9uKCdtb3VzZWVudGVyJywgJ1tkYXRhLXJlbW9kYWwtaWQ9XCJ3aXphcmRcIl0gLnN0ZXAtNCAuaW5mby1kZXNjJywgKGV2ZW50KSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0ID0gJChldmVudC5jdXJyZW50VGFyZ2V0KS5zaWJsaW5ncygnaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdJyk7XG4gICAgc2hvd05vdGljZXModGFyZ2V0KTtcbn0pO1xuXG4kKGRvY3VtZW50KS5vbignbW91c2VsZWF2ZScsICdbZGF0YS1yZW1vZGFsLWlkPVwid2l6YXJkXCJdIC5zdGVwLTQgbGFiZWwnLCAoZXZlbnQpID0+IHtcbiAgICBjb25zdCB0YXJnZXQgPSAkKGV2ZW50LmN1cnJlbnRUYXJnZXQpO1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRhcmdldC5jbG9zZXN0KCcuY29sdW1ucycpO1xuICAgIGNvbnN0IGNvbHVtbiA9IGNvbnRhaW5lci5maW5kKCcuY29sdW1uOmxhc3QtY2hpbGQnKTtcblxuICAgIGNvbHVtbi5maW5kKCdbY2xhc3MqPVwiZGVzY3JpcHRpb24tXCJdJykuYWRkQ2xhc3MoJ2hpZGRlbicpO1xufSk7XG5cbiQoZG9jdW1lbnQpLm9uKCdtb3VzZWxlYXZlJywgJ1tkYXRhLXJlbW9kYWwtaWQ9XCJ3aXphcmRcIl0gLmNvbHVtbnMgLmNvbHVtbjpmaXJzdC1jaGlsZCcsIChldmVudCkgPT4ge1xuICAgIGNvbnN0IHRhcmdldCA9ICQoZXZlbnQuY3VycmVudFRhcmdldCk7XG4gICAgY29uc3QgY29sdW1uID0gdGFyZ2V0LnNpYmxpbmdzKCcuY29sdW1uJyk7XG5cbiAgICBjb2x1bW4uZmluZCgnW2NsYXNzKj1cImRlc2NyaXB0aW9uLVwiXScpLmFkZENsYXNzKCdoaWRkZW4nKTtcbn0pO1xuXG4kKGRvY3VtZW50KS5yZWFkeSgoKSA9PiB7XG4gICAgU1RFUFMgPSBXSVpBUkQuZmluZCgnW2NsYXNzXj1cInN0ZXAtXCJdJykubGVuZ3RoIC0gMTtcbiAgICBXSVpBUkQud3JhcElubmVyKCc8Zm9ybT48L2Zvcm0+Jyk7XG4gICAgUkVTRVRfTE9DQUwud3JhcElubmVyKCc8Zm9ybT48L2Zvcm0+Jyk7XG5cbiAgICBpZiAoV0laQVJELmxlbmd0aCAmJiAoU2V0dGluZ3MuZmlyc3RfdGltZSB8fCAhU2V0dGluZ3MuZ2l0X2luc3RhbGxlZCkpIHtcbiAgICAgICAgb3BlbldpemFyZCgpO1xuICAgIH1cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBTZXR0aW5ncztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///849\n");
/***/ }),
/***/ 609:
/***/ ((module) => {
module.exports = jQuery;
/***/ })
/******/ });
/************************************************************************/
/******/ // The module cache
/******/ var __webpack_module_cache__ = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/ // Check if module is in cache
/******/ var cachedModule = __webpack_module_cache__[moduleId];
/******/ if (cachedModule !== undefined) {
/******/ return cachedModule.exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = __webpack_module_cache__[moduleId] = {
/******/ // no module.id needed
/******/ // no module.loaded needed
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = __webpack_modules__;
/******/
/************************************************************************/
/******/ /* webpack/runtime/amd define */
/******/ (() => {
/******/ __webpack_require__.amdD = function () {
/******/ throw new Error('define cannot be used indirect');
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/chunk loaded */
/******/ (() => {
/******/ var deferred = [];
/******/ __webpack_require__.O = (result, chunkIds, fn, priority) => {
/******/ if(chunkIds) {
/******/ priority = priority || 0;
/******/ for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];
/******/ deferred[i] = [chunkIds, fn, priority];
/******/ return;
/******/ }
/******/ var notFulfilled = Infinity;
/******/ for (var i = 0; i < deferred.length; i++) {
/******/ var [chunkIds, fn, priority] = deferred[i];
/******/ var fulfilled = true;
/******/ for (var j = 0; j < chunkIds.length; j++) {
/******/ if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {
/******/ chunkIds.splice(j--, 1);
/******/ } else {
/******/ fulfilled = false;
/******/ if(priority < notFulfilled) notFulfilled = priority;
/******/ }
/******/ }
/******/ if(fulfilled) {
/******/ deferred.splice(i--, 1)
/******/ result = fn();
/******/ }
/******/ }
/******/ return result;
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/compat get default export */
/******/ (() => {
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = (module) => {
/******/ var getter = module && module.__esModule ?
/******/ () => (module['default']) :
/******/ () => (module);
/******/ __webpack_require__.d(getter, { a: getter });
/******/ return getter;
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/define property getters */
/******/ (() => {
/******/ // define getter functions for harmony exports
/******/ __webpack_require__.d = (exports, definition) => {
/******/ for(var key in definition) {
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ }
/******/ }
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/global */
/******/ (() => {
/******/ __webpack_require__.g = (function() {
/******/ if (typeof globalThis === 'object') return globalThis;
/******/ try {
/******/ return this || new Function('return this')();
/******/ } catch (e) {
/******/ if (typeof window === 'object') return window;
/******/ }
/******/ })();
/******/ })();
/******/
/******/ /* webpack/runtime/hasOwnProperty shorthand */
/******/ (() => {
/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
/******/ })();
/******/
/******/ /* webpack/runtime/jsonp chunk loading */
/******/ (() => {
/******/ // no baseURI
/******/
/******/ // object to store loaded and loading chunks
/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched
/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded
/******/ var installedChunks = {
/******/ 143: 0
/******/ };
/******/
/******/ // no chunk on demand loading
/******/
/******/ // no prefetching
/******/
/******/ // no preloaded
/******/
/******/ // no HMR
/******/
/******/ // no HMR manifest
/******/
/******/ __webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);
/******/
/******/ // install a JSONP callback for chunk loading
/******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => {
/******/ var [chunkIds, moreModules, runtime] = data;
/******/ // add "moreModules" to the modules object,
/******/ // then flag all "chunkIds" as loaded and fire callback
/******/ var moduleId, chunkId, i = 0;
/******/ for(moduleId in moreModules) {
/******/ if(__webpack_require__.o(moreModules, moduleId)) {
/******/ __webpack_require__.m[moduleId] = moreModules[moduleId];
/******/ }
/******/ }
/******/ if(runtime) runtime(__webpack_require__);
/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data);
/******/ for(;i < chunkIds.length; i++) {
/******/ chunkId = chunkIds[i];
/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {
/******/ installedChunks[chunkId][0]();
/******/ }
/******/ installedChunks[chunkIds[i]] = 0;
/******/ }
/******/ __webpack_require__.O();
/******/ }
/******/
/******/ var chunkLoadingGlobal = self["webpackChunktrilby_grav_plugin_gitsync"] = self["webpackChunktrilby_grav_plugin_gitsync"] || [];
/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));
/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));
/******/ })();
/******/
/************************************************************************/
/******/
/******/ // startup
/******/ // Load entry module and return exports
/******/ // This entry module depends on other loaded chunks and execution need to be delayed
/******/ var __webpack_exports__ = __webpack_require__.O(undefined, [736], () => (__webpack_require__(849)))
/******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__);
/******/
/******/ })()
;