diff --git a/src/OrchardCore.Modules/OrchardCore.Admin/Views/AdminDashboard.cshtml b/src/OrchardCore.Modules/OrchardCore.Admin/Views/AdminDashboard.cshtml index 67f130f0553..42d94a884af 100644 --- a/src/OrchardCore.Modules/OrchardCore.Admin/Views/AdminDashboard.cshtml +++ b/src/OrchardCore.Modules/OrchardCore.Admin/Views/AdminDashboard.cshtml @@ -1,4 +1,4 @@

@T["Welcome to Orchard Core"]

-

@T["Feel free to browse the menu and discover all its possibilities."]

+

@T["Feel free to browse the menu and discover all its possibilities."]

diff --git a/src/OrchardCore.Modules/OrchardCore.Media/wwwroot/Scripts/media.js b/src/OrchardCore.Modules/OrchardCore.Media/wwwroot/Scripts/media.js index 6e2bd34e102..f30b7944c1d 100644 --- a/src/OrchardCore.Modules/OrchardCore.Media/wwwroot/Scripts/media.js +++ b/src/OrchardCore.Modules/OrchardCore.Media/wwwroot/Scripts/media.js @@ -2484,166 +2484,6 @@ Vue.component('sortIndicator', { } } }); -// component -Vue.component('upload', { - template: '\ -
\ - \ -

{{ model.name }}

\ -
\ - \ - Error: {{ model.errorMessage }} \ -
\ -
\ - ', - props: { - model: Object, - uploadInputId: String - }, - mounted: function mounted() { - var _self$uploadInputId; - var self = this; - var uploadInput = document.getElementById((_self$uploadInputId = self.uploadInputId) !== null && _self$uploadInputId !== void 0 ? _self$uploadInputId : 'fileupload'); - $(uploadInput).bind('fileuploadprogress', function (e, data) { - if (data.files[0].name !== self.model.name) { - return; - } - self.model.percentage = parseInt(data.loaded / data.total * 100, 10); - }); - $(uploadInput).bind('fileuploaddone', function (e, data) { - if (data.files[0].name !== self.model.name) { - return; - } - if (data.result.files[0].error) { - self.handleFailure(data.files[0].name, data.result.files[0].error); - } else { - bus.$emit('removalRequest', self.model); - } - }); - $(uploadInput).bind('fileuploadfail', function (e, data) { - if (data.files[0].name !== self.model.name) { - return; - } - self.handleFailure(data.files[0].name, $('#t-error').val()); - }); - }, - methods: { - handleFailure: function handleFailure(fileName, message) { - if (fileName !== this.model.name) { - return; - } - this.model.errorMessage = message; - bus.$emit('ErrorOnUpload', this.model); - }, - dismissWarning: function dismissWarning() { - bus.$emit('removalRequest', this.model); - } - } -}); -// component -Vue.component('uploadList', { - template: '\ -
\ -
\ - {{ T.uploads }} \ - (Pending: {{ pendingCount }}) \ - ( {{ T.errors }}: {{ errorCount }} / {{ T.clearErrors }} ) \ -
\ -
\ - \ -
\ -
\ - \ -
\ -
\ -
\ -
\ -
\ - \ -
\ -
\ -
\ - ', - data: function data() { - return { - files: [], - T: {}, - expanded: false, - pendingCount: 0, - errorCount: 0 - }; - }, - props: { - uploadInputId: String - }, - created: function created() { - var self = this; - // retrieving localized strings from view - self.T.uploads = $('#t-uploads').val(); - self.T.errors = $('#t-errors').val(); - self.T.clearErrors = $('#t-clear-errors').val(); - }, - computed: { - fileCount: function fileCount() { - return this.files.length; - } - }, - mounted: function mounted() { - var _self$uploadInputId; - var self = this; - var uploadInput = document.getElementById((_self$uploadInputId = self.uploadInputId) !== null && _self$uploadInputId !== void 0 ? _self$uploadInputId : 'fileupload'); - $(uploadInput).bind('fileuploadadd', function (e, data) { - if (!data.files) { - return; - } - data.files.forEach(function (newFile) { - var alreadyInList = self.files.some(function (f) { - return f.name == newFile.name; - }); - if (!alreadyInList) { - self.files.push({ - name: newFile.name, - percentage: 0, - errorMessage: '' - }); - } else { - console.error('A file with the same name is already on the queue:' + newFile.name); - } - }); - }); - bus.$on('removalRequest', function (fileUpload) { - self.files.forEach(function (item, index, array) { - if (item.name == fileUpload.name) { - array.splice(index, 1); - } - }); - }); - bus.$on('ErrorOnUpload', function (fileUpload) { - self.updateCount(); - }); - }, - methods: { - updateCount: function updateCount() { - this.errorCount = this.files.filter(function (item) { - return item.errorMessage != ''; - }).length; - this.pendingCount = this.files.length - this.errorCount; - if (this.files.length < 1) { - this.expanded = false; - } - }, - clearErrors: function clearErrors() { - this.files = this.files.filter(function (item) { - return item.errorMessage == ''; - }); - } - }, - watch: { - files: function files() { - this.updateCount(); - } - } -}); function initializeAttachedMediaField(el, idOfUploadButton, uploadAction, mediaItemUrl, allowMultiple, allowMediaText, allowAnchors, tempUploadFolder, maxUploadChunkSize) { var target = $(document.getElementById($(el).data('for'))); var initialPaths = target.data("init"); @@ -3359,4 +3199,164 @@ Vue.component('mediaFieldThumbsContainer', { } } }); -//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5maWxldXBsb2FkLmpzIiwianF1ZXJ5LmlmcmFtZS10cmFuc3BvcnQuanMiLCJoZWxwZXJzLmpzIiwiTWVkaWFBcHAvYXBwLmpzIiwiTWVkaWFBcHAvZmlsZXVwbG9hZC5qcyIsIk1lZGlhQXBwL2ZvbGRlckNvbXBvbmVudC5qcyIsIk1lZGlhQXBwL21lZGlhSXRlbXNHcmlkQ29tcG9uZW50LmpzIiwiTWVkaWFBcHAvbWVkaWFJdGVtc1RhYmxlQ29tcG9uZW50LmpzIiwiTWVkaWFBcHAvcGFnZXJDb21wb25lbnQuanMiLCJNZWRpYUFwcC9zb3J0SW5kaWNhdG9yQ29tcG9uZW50LmpzIiwiU2hhcmVkL3VwbG9hZENvbXBvbmVudC5qcyIsIlNoYXJlZC91cGxvYWRMaXN0Q29tcG9uZW50LmpzIiwiTWVkaWFGaWVsZC9hdHRhY2hlZE1lZGlhRmllbGQuanMiLCJNZWRpYUZpZWxkL21lZGlhZmllbGQuanMiLCJNZWRpYUZpZWxkL21lZGlhZmllbGRzQXBwc0FycmF5LmpzIiwiTWVkaWFGaWVsZC9tZWRpYUZpZWxkVGh1bWJzQ29udGFpbmVyLmpzIl0sIm5hbWVzIjpbImZhY3RvcnkiLCJkZWZpbmUiLCJhbWQiLCJleHBvcnRzIiwiX3R5cGVvZiIsInJlcXVpcmUiLCJ3aW5kb3ciLCJqUXVlcnkiLCIkIiwic3VwcG9ydCIsImZpbGVJbnB1dCIsIlJlZ0V4cCIsInRlc3QiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJwcm9wIiwieGhyRmlsZVVwbG9hZCIsIlByb2dyZXNzRXZlbnQiLCJGaWxlUmVhZGVyIiwieGhyRm9ybURhdGFGaWxlVXBsb2FkIiwiRm9ybURhdGEiLCJibG9iU2xpY2UiLCJCbG9iIiwicHJvdG90eXBlIiwic2xpY2UiLCJ3ZWJraXRTbGljZSIsIm1velNsaWNlIiwiZ2V0RHJhZ0hhbmRsZXIiLCJ0eXBlIiwiaXNEcmFnT3ZlciIsImUiLCJkYXRhVHJhbnNmZXIiLCJvcmlnaW5hbEV2ZW50IiwiaW5BcnJheSIsInR5cGVzIiwiX3RyaWdnZXIiLCJFdmVudCIsImRlbGVnYXRlZEV2ZW50IiwicHJldmVudERlZmF1bHQiLCJkcm9wRWZmZWN0Iiwid2lkZ2V0Iiwib3B0aW9ucyIsImRyb3Bab25lIiwiZG9jdW1lbnQiLCJwYXN0ZVpvbmUiLCJ1bmRlZmluZWQiLCJyZXBsYWNlRmlsZUlucHV0IiwicGFyYW1OYW1lIiwic2luZ2xlRmlsZVVwbG9hZHMiLCJsaW1pdE11bHRpRmlsZVVwbG9hZHMiLCJsaW1pdE11bHRpRmlsZVVwbG9hZFNpemUiLCJsaW1pdE11bHRpRmlsZVVwbG9hZFNpemVPdmVyaGVhZCIsInNlcXVlbnRpYWxVcGxvYWRzIiwibGltaXRDb25jdXJyZW50VXBsb2FkcyIsImZvcmNlSWZyYW1lVHJhbnNwb3J0IiwicmVkaXJlY3QiLCJyZWRpcmVjdFBhcmFtTmFtZSIsInBvc3RNZXNzYWdlIiwibXVsdGlwYXJ0IiwibWF4Q2h1bmtTaXplIiwidXBsb2FkZWRCeXRlcyIsInJlY2FsY3VsYXRlUHJvZ3Jlc3MiLCJwcm9ncmVzc0ludGVydmFsIiwiYml0cmF0ZUludGVydmFsIiwiYXV0b1VwbG9hZCIsInVuaXF1ZUZpbGVuYW1lcyIsIm1lc3NhZ2VzIiwiaTE4biIsIm1lc3NhZ2UiLCJjb250ZXh0IiwidG9TdHJpbmciLCJlYWNoIiwia2V5IiwidmFsdWUiLCJyZXBsYWNlIiwiZm9ybURhdGEiLCJmb3JtIiwic2VyaWFsaXplQXJyYXkiLCJhZGQiLCJkYXRhIiwiaXNEZWZhdWx0UHJldmVudGVkIiwiZmlsZXVwbG9hZCIsInByb2Nlc3MiLCJkb25lIiwic3VibWl0IiwicHJvY2Vzc0RhdGEiLCJjb250ZW50VHlwZSIsImNhY2hlIiwidGltZW91dCIsIl9wcm9taXNlUGlwZSIsInBhcnRzIiwiZm4iLCJqcXVlcnkiLCJzcGxpdCIsIk51bWJlciIsIl9zcGVjaWFsT3B0aW9ucyIsIl9ibG9iU2xpY2UiLCJhcHBseSIsImFyZ3VtZW50cyIsIl9CaXRyYXRlVGltZXIiLCJ0aW1lc3RhbXAiLCJEYXRlIiwibm93IiwiZ2V0VGltZSIsImxvYWRlZCIsImJpdHJhdGUiLCJnZXRCaXRyYXRlIiwiaW50ZXJ2YWwiLCJ0aW1lRGlmZiIsIl9pc1hIUlVwbG9hZCIsIl9nZXRGb3JtRGF0YSIsImlzQXJyYXkiLCJuYW1lIiwicHVzaCIsIl9nZXRUb3RhbCIsImZpbGVzIiwidG90YWwiLCJpbmRleCIsImZpbGUiLCJzaXplIiwiX2luaXRQcm9ncmVzc09iamVjdCIsIm9iaiIsInByb2dyZXNzIiwiX3Byb2dyZXNzIiwiZXh0ZW5kIiwiX2luaXRSZXNwb25zZU9iamVjdCIsIl9yZXNwb25zZSIsIk9iamVjdCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIl9vblByb2dyZXNzIiwibGVuZ3RoQ29tcHV0YWJsZSIsIl90aW1lIiwiTWF0aCIsImZsb29yIiwiY2h1bmtTaXplIiwiX2JpdHJhdGVUaW1lciIsIl9pbml0UHJvZ3Jlc3NMaXN0ZW5lciIsInRoYXQiLCJ4aHIiLCJhamF4U2V0dGluZ3MiLCJ1cGxvYWQiLCJvbiIsIm9lIiwiX2RlaW5pdFByb2dyZXNzTGlzdGVuZXIiLCJvZmYiLCJfaXNJbnN0YW5jZU9mIiwiX2dldFVuaXF1ZUZpbGVuYW1lIiwibWFwIiwiU3RyaW5nIiwiXyIsInAxIiwicDIiLCJleHQiLCJfaW5pdFhIUkRhdGEiLCJoZWFkZXJzIiwiY29udGVudFJhbmdlIiwiYmxvYiIsImVuY29kZVVSSSIsInVwbG9hZE5hbWUiLCJmaWVsZCIsImFwcGVuZCIsImZpbGVOYW1lIiwiX2luaXRJZnJhbWVTZXR0aW5ncyIsInRhcmdldEhvc3QiLCJ1cmwiLCJkYXRhVHlwZSIsImxvY2F0aW9uIiwiaG9zdCIsIl9pbml0RGF0YVNldHRpbmdzIiwiX2NodW5rZWRVcGxvYWQiLCJfZ2V0UGFyYW1OYW1lIiwiaW5wdXQiLCJpIiwibGVuZ3RoIiwiX2luaXRGb3JtU2V0dGluZ3MiLCJocmVmIiwidG9VcHBlckNhc2UiLCJmb3JtQWNjZXB0Q2hhcnNldCIsImF0dHIiLCJfZ2V0QUpBWFNldHRpbmdzIiwiX2dldERlZmVycmVkU3RhdGUiLCJkZWZlcnJlZCIsInN0YXRlIiwiaXNSZXNvbHZlZCIsImlzUmVqZWN0ZWQiLCJfZW5oYW5jZVByb21pc2UiLCJwcm9taXNlIiwic3VjY2VzcyIsImVycm9yIiwiZmFpbCIsImNvbXBsZXRlIiwiYWx3YXlzIiwiX2dldFhIUlByb21pc2UiLCJyZXNvbHZlT3JSZWplY3QiLCJhcmdzIiwiZGZkIiwiRGVmZXJyZWQiLCJyZXNvbHZlV2l0aCIsInJlamVjdFdpdGgiLCJhYm9ydCIsIl9hZGRDb252ZW5pZW5jZU1ldGhvZHMiLCJnZXRQcm9taXNlIiwicmVzb2x2ZUZ1bmMiLCJyZWplY3RGdW5jIiwiX3Byb2Nlc3NRdWV1ZSIsImVycm9yVGhyb3duIiwianFYSFIiLCJfb25TZW5kIiwicHJvY2Vzc2luZyIsInJlc3BvbnNlIiwiX2dldFVwbG9hZGVkQnl0ZXMiLCJyYW5nZSIsImdldFJlc3BvbnNlSGVhZGVyIiwidXBwZXJCeXRlc1BvcyIsInBhcnNlSW50IiwidGVzdE9ubHkiLCJmcyIsInViIiwibWNzIiwibyIsImN1cnJlbnRMb2FkZWQiLCJhamF4IiwicmVzdWx0IiwidGV4dFN0YXR1cyIsIl9iZWZvcmVTZW5kIiwiX2FjdGl2ZSIsIl9vbkRvbmUiLCJfb25GYWlsIiwiX29uQWx3YXlzIiwianFYSFJvclJlc3VsdCIsImpxWEhSb3JFcnJvciIsImFib3J0ZWQiLCJzbG90IiwicGlwZSIsInNlbmQiLCJfc2VuZGluZyIsIm5leHRTbG90IiwiX3Nsb3RzIiwic2hpZnQiLCJyZXNvbHZlIiwiX3NlcXVlbmNlIiwiX29uQWRkIiwiZmlsZXNMZW5ndGgiLCJsaW1pdCIsImxpbWl0U2l6ZSIsIm92ZXJoZWFkIiwiYmF0Y2hTaXplIiwicGFyYW1OYW1lU2V0IiwicGFyYW1OYW1lU2xpY2UiLCJmaWxlU2V0IiwiaiIsIm9yaWdpbmFsRmlsZXMiLCJlbGVtZW50IiwibmV3RGF0YSIsIl9yZXBsYWNlRmlsZUlucHV0IiwiaW5wdXRDbG9uZSIsImNsb25lIiwicmVzdG9yZUZvY3VzIiwiaXMiLCJhY3RpdmVFbGVtZW50IiwiZmlsZUlucHV0Q2xvbmUiLCJyZXNldCIsImFmdGVyIiwiZGV0YWNoIiwidHJpZ2dlciIsImNsZWFuRGF0YSIsImVsIiwiX2hhbmRsZUZpbGVUcmVlRW50cnkiLCJlbnRyeSIsInBhdGgiLCJlbnRyaWVzIiwiZGlyUmVhZGVyIiwiZXJyb3JIYW5kbGVyIiwic3VjY2Vzc0hhbmRsZXIiLCJfaGFuZGxlRmlsZVRyZWVFbnRyaWVzIiwicmVhZEVudHJpZXMiLCJyZXN1bHRzIiwiY29uY2F0IiwiaXNGaWxlIiwiX2ZpbGUiLCJyZWxhdGl2ZVBhdGgiLCJpc0RpcmVjdG9yeSIsImNyZWF0ZVJlYWRlciIsIndoZW4iLCJBcnJheSIsIl9nZXREcm9wcGVkRmlsZXMiLCJpdGVtcyIsIndlYmtpdEdldEFzRW50cnkiLCJnZXRBc0VudHJ5IiwiaXRlbSIsImdldEFzRmlsZSIsIm1ha2VBcnJheSIsIl9nZXRTaW5nbGVGaWxlSW5wdXRGaWxlcyIsImZpbGVTaXplIiwiX2dldEZpbGVJbnB1dEZpbGVzIiwiX29uQ2hhbmdlIiwidGFyZ2V0IiwiX29uUGFzdGUiLCJjbGlwYm9hcmREYXRhIiwiX29uRHJvcCIsIl9vbkRyYWdPdmVyIiwiX29uRHJhZ0VudGVyIiwiX29uRHJhZ0xlYXZlIiwiX2luaXRFdmVudEhhbmRsZXJzIiwiX29uIiwiZHJhZ292ZXIiLCJkcm9wIiwiZHJhZ2VudGVyIiwiZHJhZ2xlYXZlIiwicGFzdGUiLCJjaGFuZ2UiLCJfZGVzdHJveUV2ZW50SGFuZGxlcnMiLCJfb2ZmIiwiX2Rlc3Ryb3kiLCJfc2V0T3B0aW9uIiwicmVpbml0IiwiX3N1cGVyIiwiX2luaXRTcGVjaWFsT3B0aW9ucyIsImZpbmQiLCJfZ2V0UmVnRXhwIiwic3RyIiwibW9kaWZpZXJzIiwicG9wIiwiam9pbiIsIl9pc1JlZ0V4cE9wdGlvbiIsIl9pbml0RGF0YUF0dHJpYnV0ZXMiLCJhdHRyaWJ1dGVzIiwidG9Mb3dlckNhc2UiLCJjaGFyQXQiLCJfY3JlYXRlIiwiYWN0aXZlIiwiZGlzYWJsZWQiLCJyZWplY3QiLCJ0aGVuIiwiY291bnRlciIsImpzb25BUEkiLCJqc29uUGFyc2UiLCJKU09OIiwiYWpheFRyYW5zcG9ydCIsImFzeW5jIiwiaW5pdGlhbElmcmFtZVNyYyIsImlmcmFtZSIsImFkZFBhcmFtQ2hhciIsImNvbXBsZXRlQ2FsbGJhY2siLCJmaWxlSW5wdXRDbG9uZXMiLCJwYXJhbU5hbWVzIiwiY29udGVudHMiLCJmaXJzdENoaWxkIiwiRXJyb3IiLCJhcHBlbmRUbyIsInNldFRpbWVvdXQiLCJyZW1vdmUiLCJ2YWwiLCJyZW1vdmVBdHRyIiwicmVwbGFjZVdpdGgiLCJib2R5IiwiYWpheFNldHVwIiwiY29udmVydGVycyIsImlmcmFtZVRleHQiLCJ0ZXh0IiwiaWZyYW1lSnNvbiIsImlmcmFtZUh0bWwiLCJodG1sIiwiaWZyYW1lWG1sIiwieG1sRG9jIiwiaXNYTUxEb2MiLCJwYXJzZVhNTCIsIlhNTERvY3VtZW50IiwieG1sIiwiaWZyYW1lU2NyaXB0IiwiZ2xvYmFsRXZhbCIsInJhbmRvbVVVSUQiLCJjcnlwdG8iLCJjIiwiZ2V0UmFuZG9tVmFsdWVzIiwiVWludDhBcnJheSIsImluaXRpYWxpemVkIiwibWVkaWFBcHAiLCJidXMiLCJWdWUiLCJpbml0aWFsaXplTWVkaWFBcHBsaWNhdGlvbiIsImRpc3BsYXlNZWRpYUFwcGxpY2F0aW9uIiwibWVkaWFBcHBsaWNhdGlvblVybCIsInBhdGhCYXNlIiwiY29uc29sZSIsIm1ldGhvZCIsImNvbnRlbnQiLCJyb290IiwiZm9sZGVyIiwic2VsZWN0ZWRGb2xkZXIiLCJtZWRpYUl0ZW1zIiwic2VsZWN0ZWRNZWRpYXMiLCJlcnJvcnMiLCJkcmFnRHJvcFRodW1ibmFpbCIsIkltYWdlIiwic21hbGxUaHVtYnMiLCJncmlkVmlldyIsIm1lZGlhRmlsdGVyIiwic29ydEJ5Iiwic29ydEFzYyIsIml0ZW1zSW5QYWdlIiwiY3JlYXRlZCIsInNlbGYiLCJzcmMiLCIkb24iLCJzZWxlY3RSb290Iiwic2VsZWN0ZWQiLCJlcnJvckluZm8iLCJsb2FkRm9sZGVyIiwibmV3TmFtZSIsIm5ld1BhdGgiLCJvbGRQYXRoIiwibWVkaWEiLCJmaWx0ZXIiLCJtZWRpYVBhdGgiLCJjcmVhdGVGb2xkZXIiLCJkZWxldGVGb2xkZXIiLCJuZXdTb3J0IiwiY2hhbmdlU29ydCIsInRvZ2dsZVNlbGVjdGlvbk9mTWVkaWEiLCJyZW5hbWVNZWRpYSIsImRlbGV0ZU1lZGlhSXRlbSIsImhhbmRsZURyYWdTdGFydCIsImxvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJjdXJyZW50UHJlZnMiLCJwYXJzZSIsImNvbXB1dGVkIiwiaXNIb21lIiwicGFyZW50cyIsInAiLCJwYXJlbnRGb2xkZXIiLCJ1bnNoaWZ0IiwicGFyZW50IiwiZmlsdGVyZWRNZWRpYUl0ZW1zIiwiZmlsdGVyZWQiLCJpbmRleE9mIiwic29ydCIsImEiLCJiIiwibWltZSIsImxvY2FsZUNvbXBhcmUiLCJsYXN0TW9kaWZ5IiwiaGlkZGVuQ291bnQiLCJ0aHVtYlNpemUiLCJnZXQiLCJzZXQiLCJuZXdQcmVmcyIsIndhdGNoIiwic2V0SXRlbSIsInN0cmluZ2lmeSIsIm5ld0ZvbGRlciIsIm1vdW50ZWQiLCIkcmVmcyIsInJvb3RGb2xkZXIiLCJ0b2dnbGUiLCJtZXRob2RzIiwidXBsb2FkVXJsIiwidXJsVmFsdWUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJtZWRpYVVybCIsImxvZyIsImZvckVhY2giLCJvcGVuIiwic2VsZWN0QWxsIiwidW5TZWxlY3RBbGwiLCJpbnZlcnRTZWxlY3Rpb24iLCJ0ZW1wIiwiaXNNZWRpYVNlbGVjdGVkIiwic3BsaWNlIiwic29tZSIsImFycmF5IiwibW9kZWwiLCJjb25maXJtRGlhbG9nIiwiX29iamVjdFNwcmVhZCIsImNhbGxiYWNrIiwicmVzcCIsIl9fUmVxdWVzdFZlcmlmaWNhdGlvblRva2VuIiwiJGVtaXQiLCJyZXNwb25zZVRleHQiLCJlbXB0eSIsIm1vZGFsIiwiYm9vdHN0cmFwIiwiTW9kYWwiLCJnZXRPckNyZWF0ZUluc3RhbmNlIiwic2hvdyIsImZvY3VzIiwic2VsZWN0QW5kRGVsZXRlTWVkaWEiLCJkZWxldGVNZWRpYSIsImRlbGV0ZU1lZGlhTGlzdCIsIm1lZGlhTGlzdCIsInBhdGhzIiwibWVkaWFOYW1lcyIsInNldERhdGEiLCJzZXREcmFnSW1hZ2UiLCJlZmZlY3RBbGxvd2VkIiwiaGFuZGxlU2Nyb2xsV2hpbGVEcmFnIiwiY2xpZW50WSIsInNjcm9sbEJ5IiwiaW5uZXJIZWlnaHQiLCJrZXlwcmVzcyIsIndoaWNoIiwiY2xpY2siLCJoaWRlIiwiZXJyb3JNZXNzYWdlIiwib2xkTmFtZSIsImN1cnJlbnRGb2xkZXIiLCJnZXRFbGVtZW50QnlJZCIsInN0eWxlIiwiZGlzcGxheSIsImNodW5rZWRGaWxlVXBsb2FkSWQiLCJhbnRpRm9yZ2VyeVRva2VuIiwiRmlsZSIsImxhc3RNb2RpZmllZCIsImJpbmQiLCJkdCIsImNvbnRhaW5zIiwiZHJvcFpvbmVUaW1lb3V0IiwiY2xlYXJUaW1lb3V0IiwiYWRkQ2xhc3MiLCJob3ZlcmVkRHJvcFpvbmUiLCJjbG9zZXN0IiwicmVtb3ZlQ2xhc3MiLCJjb21wb25lbnQiLCJ0ZW1wbGF0ZSIsImRpciIsInByb3BzIiwic2VsZWN0ZWRJbk1lZGlhQXBwIiwibGV2ZWwiLCJjaGlsZHJlbiIsImlzSG92ZXJlZCIsInBhZGRpbmciLCJpc1NlbGVjdGVkIiwiaXNSb290IiwiaXNBbmNlc3Rvck9mU2VsZWN0ZWRGb2xkZXIiLCJsb2FkQ2hpbGRyZW4iLCJzZWxlY3QiLCJlbXRweSIsImhhbmRsZURyYWdPdmVyIiwiaGFuZGxlRHJhZ0xlYXZlIiwibW92ZU1lZGlhVG9Gb2xkZXIiLCJnZXREYXRhIiwic291cmNlRm9sZGVyIiwidGFyZ2V0Rm9sZGVyIiwiYWxlcnQiLCJUIiwiZWRpdEJ1dHRvbiIsImRlbGV0ZUJ1dHRvbiIsImJ1aWxkTWVkaWFVcmwiLCJkcmFnU3RhcnQiLCJCb29sZWFuIiwiaW1hZ2VIZWFkZXIiLCJuYW1lSGVhZGVyIiwibGFzdE1vZGlmeUhlYWRlciIsInNpemVIZWFkZXIiLCJ0eXBlSGVhZGVyIiwidmlld0J1dHRvbiIsInByaW50RGF0ZVRpbWUiLCJkYXRlbWlsbGlzIiwiZCIsInRvTG9jYWxlU3RyaW5nIiwic291cmNlSXRlbXMiLCJwYWdlU2l6ZSIsInBhZ2VTaXplT3B0aW9ucyIsImN1cnJlbnQiLCJwYWdlckZpcnN0QnV0dG9uIiwicGFnZXJQcmV2aW91c0J1dHRvbiIsInBhZ2VyTmV4dEJ1dHRvbiIsInBhZ2VyTGFzdEJ1dHRvbiIsInBhZ2VyUGFnZVNpemVMYWJlbCIsInBhZ2VyUGFnZUxhYmVsIiwicGFnZXJUb3RhbExhYmVsIiwibmV4dCIsInByZXZpb3VzIiwiZ29GaXJzdCIsImdvTGFzdCIsInRvdGFsUGFnZXMiLCJnb1RvIiwidGFyZ2V0UGFnZSIsInBhZ2VzIiwiY2VpbCIsImlzTGFzdFBhZ2UiLCJpc0ZpcnN0UGFnZSIsImNhbkRvTmV4dCIsImNhbkRvUHJldiIsImNhbkRvRmlyc3QiLCJjYW5Eb0xhc3QiLCJpdGVtc0luQ3VycmVudFBhZ2UiLCJzdGFydCIsImVuZCIsInBhZ2VMaW5rcyIsImxpbmtzIiwiYmVmb3JlQ3VycmVudCIsImJlZm9yZUJlZm9yZUN1cnJlbnQiLCJhZnRlckN1cnJlbnQiLCJhZnRlckFmdGVyQ3VycmVudCIsImNvbG5hbWUiLCJzZWxlY3RlZGNvbG5hbWUiLCJhc2MiLCJpc0FjdGl2ZSIsInVwbG9hZElucHV0SWQiLCJfc2VsZiR1cGxvYWRJbnB1dElkIiwidXBsb2FkSW5wdXQiLCJwZXJjZW50YWdlIiwiaGFuZGxlRmFpbHVyZSIsImRpc21pc3NXYXJuaW5nIiwiZXhwYW5kZWQiLCJwZW5kaW5nQ291bnQiLCJlcnJvckNvdW50IiwidXBsb2FkcyIsImNsZWFyRXJyb3JzIiwiZmlsZUNvdW50IiwibmV3RmlsZSIsImFscmVhZHlJbkxpc3QiLCJmIiwiZmlsZVVwbG9hZCIsInVwZGF0ZUNvdW50IiwiaW5pdGlhbGl6ZUF0dGFjaGVkTWVkaWFGaWVsZCIsImlkT2ZVcGxvYWRCdXR0b24iLCJ1cGxvYWRBY3Rpb24iLCJtZWRpYUl0ZW1VcmwiLCJhbGxvd011bHRpcGxlIiwiYWxsb3dNZWRpYVRleHQiLCJhbGxvd0FuY2hvcnMiLCJ0ZW1wVXBsb2FkRm9sZGVyIiwibWF4VXBsb2FkQ2h1bmtTaXplIiwiaW5pdGlhbFBhdGhzIiwibWVkaWFGaWVsZEVkaXRvciIsImlkcHJlZml4IiwibWVkaWFGaWVsZEFwcCIsIm1lZGlhRmllbGRBcHBzIiwic2VsZWN0ZWRNZWRpYSIsImlkUHJlZml4IiwiYmFja3VwTWVkaWFUZXh0IiwiYmFja3VwQW5jaG9yIiwibWVkaWFUZXh0bW9kYWwiLCJhbmNob3JpbmdNb2RhbCIsIm1lZGlhUGF0aHMiLCJ4IiwiaXNSZW1vdmVkIiwiaXNOZXciLCJtZWRpYVRleHQiLCJhbmNob3IiLCJhdHRhY2hlZEZpbGVOYW1lIiwidmFsdWVzIiwic2lnbmFsIiwidnVla2V5IiwieSIsInJvdW5kIiwiY2FuQWRkTWVkaWEiLCJub25SZW1vdmVkTWVkaWFJdGVtcyIsInNlbGVjdE1lZGlhIiwic2VsZWN0b3IiLCJlZGl0b3JJZCIsImNvdW50IiwiZ2V0VW5pcXVlSWQiLCJuZXdNZWRpYUl0ZW1zIiwiZXJyb3Jtc2ciLCJyIiwicmFuZG9tIiwidiIsInJlbW92ZVNlbGVjdGVkIiwiZXZlbnQiLCJyZW1vdmVkIiwic2hvd01lZGlhVGV4dE1vZGFsIiwibWVkaWFUZXh0TW9kYWwiLCJjYW5jZWxNZWRpYVRleHRNb2RhbCIsInNob3dBbmNob3JNb2RhbCIsImNhbmNlbEFuY2hvcmluZ01vZGFsIiwicmVzZXRBbmNob3IiLCJvbkFuY2hvckRyb3AiLCJpbWFnZSIsImFuY2hvckltYWdlIiwib2Zmc2V0WCIsImNsaWVudFdpZHRoIiwib2Zmc2V0WSIsImNsaWVudEhlaWdodCIsImFuY2hvckxlZnQiLCJtb2RhbEJvZHkiLCJvZmZzZXQiLCJwb3NpdGlvbiIsImFuY2hvclRvcCIsInNldEFuY2hvciIsImFkZE1lZGlhRmlsZXMiLCJkZWVwIiwiaGFuZGxlciIsImluaXRpYWxpemVNZWRpYUZpZWxkIiwibW9kYWxCb2R5RWxlbWVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJzaG93TW9kYWwiLCJhbmNob3JJY29uIiwicXVlcnlTZWxlY3RvciIsImlzSW50ZWdlciIsIm1lZGlhTm90Rm91bmQiLCJkaXNjYXJkV2FybmluZyIsIm5vSW1hZ2VzIiwiJHBhcmVudCJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxDQUFDLFVBQVVBLE9BQU8sRUFBRTtFQUNsQixZQUFZOztFQUNaLElBQUksT0FBT0MsTUFBTSxLQUFLLFVBQVUsSUFBSUEsTUFBTSxDQUFDQyxHQUFHLEVBQUU7SUFDOUM7SUFDQUQsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFLHFCQUFxQixDQUFDLEVBQUVELE9BQU8sQ0FBQztFQUNwRCxDQUFDLE1BQU0sSUFBSSxRQUFPRyxPQUFPLGlDQUFBQyxPQUFBLENBQVBELE9BQU8sT0FBSyxRQUFRLEVBQUU7SUFDdEM7SUFDQUgsT0FBTyxDQUFDSyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUVBLE9BQU8sQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0VBQ2xFLENBQUMsTUFBTTtJQUNMO0lBQ0FMLE9BQU8sQ0FBQ00sTUFBTSxDQUFDQyxNQUFNLENBQUM7RUFDeEI7QUFDRixDQUFDLEVBQUUsVUFBVUMsQ0FBQyxFQUFFO0VBQ2QsWUFBWTs7RUFFWjtFQUNBO0VBQ0FBLENBQUMsQ0FBQ0MsT0FBTyxDQUFDQyxTQUFTLEdBQUcsRUFDcEIsSUFBSUMsTUFBTTtFQUNSO0VBQ0EsaUNBQWlDLEdBQy9CLDREQUE0RCxHQUM1RCw0QkFBNEIsR0FDNUIsa0NBQ0osQ0FBQyxDQUFDQyxJQUFJLENBQUNOLE1BQU0sQ0FBQ08sU0FBUyxDQUFDQyxTQUFTLENBQUM7RUFDbEM7RUFDQU4sQ0FBQyxDQUFDLHNCQUFzQixDQUFDLENBQUNPLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FDM0M7O0VBRUQ7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBUCxDQUFDLENBQUNDLE9BQU8sQ0FBQ08sYUFBYSxHQUFHLENBQUMsRUFB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U0FBQUEscUJBQVUzRSxLQUFLLEVBQUU7TUFDbkMsSUFBSSxDQUFDNFIsT0FBTyxDQUFDMU4sS0FBSyxDQUFDLCtCQUErQixFQUFFbEUsS0FBSyxDQUFDO0lBQzlELENBQUM7SUFDRCtPLFdBQVcsRUFBRSxTQUFBQSxZQUFVL08sS0FBSyxFQUFFO01BQzFCLElBQUksQ0FBQzRSLE9BQU8sQ0FBQzFOLEtBQUssQ0FBQyxzQkFBc0IsRUFBRWxFLEtBQUssQ0FBQztJQUNyRCxDQUFDO0lBQ0R3SSxhQUFhLEVBQUUsU0FBQUEsY0FBVWhZLEdBQUcsRUFBRXdSLFNBQVMsRUFBRTtNQUNyQyxPQUFPeFIsR0FBRyxJQUFJQSxHQUFHLENBQUNnUixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLFFBQVEsR0FBR1EsU0FBUyxHQUFHLFVBQVUsR0FBR0EsU0FBUztJQUNyRztFQUNKO0FBQ0osQ0FBQyxDQUFDIiwiZmlsZSI6Im1lZGlhLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIGpRdWVyeSBGaWxlIFVwbG9hZCBQbHVnaW5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ibHVlaW1wL2pRdWVyeS1GaWxlLVVwbG9hZFxuICpcbiAqIENvcHlyaWdodCAyMDEwLCBTZWJhc3RpYW4gVHNjaGFuXG4gKiBodHRwczovL2JsdWVpbXAubmV0XG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiAqL1xuXG4vKiBnbG9iYWwgZGVmaW5lLCByZXF1aXJlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuZXctY2FwICovXG5cbihmdW5jdGlvbiAoZmFjdG9yeSkge1xuICAndXNlIHN0cmljdCc7XG4gIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICAvLyBSZWdpc3RlciBhcyBhbiBhbm9ueW1vdXMgQU1EIG1vZHVsZTpcbiAgICBkZWZpbmUoWydqcXVlcnknLCAnanF1ZXJ5LXVpL3VpL3dpZGdldCddLCBmYWN0b3J5KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAvLyBOb2RlL0NvbW1vbkpTOlxuICAgIGZhY3RvcnkocmVxdWlyZSgnanF1ZXJ5JyksIHJlcXVpcmUoJy4vdmVuZG9yL2pxdWVyeS51aS53aWRnZXQnKSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gQnJvd3NlciBnbG9iYWxzOlxuICAgIGZhY3Rvcnkod2luZG93LmpRdWVyeSk7XG4gIH1cbn0pKGZ1bmN0aW9uICgkKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICAvLyBEZXRlY3QgZmlsZSBpbnB1dCBzdXBwb3J0LCBiYXNlZCBvblxuICAvLyBodHRwczovL3ZpbGphbWlzLmNvbS8yMDEyL2ZpbGUtdXBsb2FkLXN1cHBvcnQtb24tbW9iaWxlL1xuICAkLnN1cHBvcnQuZmlsZUlucHV0ID0gIShcbiAgICBuZXcgUmVnRXhwKFxuICAgICAgLy8gSGFuZGxlIGRldmljZXMgd2hpY2ggZ2l2ZSBmYWxzZSBwb3NpdGl2ZXMgZm9yIHRoZSBmZWF0dXJlIGRldGVjdGlvbjpcbiAgICAgICcoQW5kcm9pZCAoMVxcXFwuWzAxNTZdfDJcXFxcLlswMV0pKScgK1xuICAgICAgICAnfChXaW5kb3dzIFBob25lIChPUyA3fDhcXFxcLjApKXwoWEJMV1ApfChadW5lV1ApfChXUERlc2t0b3ApJyArXG4gICAgICAgICd8KHcoZWIpP09TQnJvd3Nlcil8KHdlYk9TKScgK1xuICAgICAgICAnfChLaW5kbGUvKDFcXFxcLjB8MlxcXFwuWzA1XXwzXFxcXC4wKSknXG4gICAgKS50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KSB8fFxuICAgIC8vIEZlYXR1cmUgZGV0ZWN0aW9uIGZvciBhbGwgb3RoZXIgZGV2aWNlczpcbiAgICAkKCc8aW5wdXQgdHlwZT1cImZpbGVcIi8+JykucHJvcCgnZGlzYWJsZWQnKVxuICApO1xuXG4gIC8vIFRoZSBGaWxlUmVhZGVyIEFQSSBpcyBub3QgYWN0dWFsbHkgdXNlZCwgYnV0IHdvcmtzIGFzIGZlYXR1cmUgZGV0ZWN0aW9uLFxuICAvLyBhcyBzb21lIFNhZmFyaSB2ZXJzaW9ucyAoNT8pIHN1cHBvcnQgWEhSIGZpbGUgdXBsb2FkcyB2aWEgdGhlIEZvcm1EYXRhIEFQSSxcbiAgLy8gYnV0IG5vdCBub24tbXVsdGlwYXJ0IFhIUiBmaWxlIHVwbG9hZHMuXG4gIC8vIHdpbmRvdy5YTUxIdHRwUmVxdWVzdFVwbG9hZCBpcyBub3QgYXZhaWxhYmxlIG9uIElFMTAsIHNvIHdlIGNoZWNrIGZvclxuICAvLyB3aW5kb3cuUHJvZ3Jlc3NFdmVudCBpbnN0ZWFkIHRvIGRldGVjdCBYSFIyIGZpbGUgdXBsb2FkIGNhcGFiaWxpdHk6XG4gICQuc3VwcG9ydC54aHJGaWxlVXBsb2FkID0gISEod2luZG93LlByb2dyZXNzRXZlbnQgJiYgd2luZG93LkZpbGVSZWFkZXIpO1xuICAkLnN1cHBvcnQueGhyRm9ybURhdGFGaWxlVXBsb2FkID0gISF3aW5kb3cuRm9ybURhdGE7XG5cbiAgLy8gRGV0ZWN0IHN1cHBvcnQgZm9yIEJsb2Igc2xpY2luZyAocmVxdWlyZWQgZm9yIGNodW5rZWQgdXBsb2Fkcyk6XG4gICQuc3VwcG9ydC5ibG9iU2xpY2UgPVxuICAgIHdpbmRvdy5CbG9iICYmXG4gICAgKEJsb2IucHJvdG90eXBlLnNsaWNlIHx8XG4gICAgICBCbG9iLnByb3RvdHlwZS53ZWJraXRTbGljZSB8fFxuICAgICAgQmxvYi5wcm90b3R5cGUubW96U2xpY2UpO1xuXG4gIC8qKlxuICAgKiBIZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIGRyYWcgaGFuZGxlcnMgZm9yIGRyYWdvdmVyL2RyYWdlbnRlci9kcmFnbGVhdmVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgRXZlbnQgdHlwZVxuICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IERyYWcgaGFuZGxlclxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0RHJhZ0hhbmRsZXIodHlwZSkge1xuICAgIHZhciBpc0RyYWdPdmVyID0gdHlwZSA9PT0gJ2RyYWdvdmVyJztcbiAgICByZXR1cm4gZnVuY3Rpb24gKGUpIHtcbiAgICAgIGUuZGF0YVRyYW5zZmVyID0gZS5vcmlnaW5hbEV2ZW50ICYmIGUub3JpZ2luYWxFdmVudC5kYXRhVHJhbnNmZXI7XG4gICAgICB2YXIgZGF0YVRyYW5zZmVyID0gZS5kYXRhVHJhbnNmZXI7XG4gICAgICBpZiAoXG4gICAgICAgIGRhdGFUcmFuc2ZlciAmJlxuICAgICAgICAkLmluQXJyYXkoJ0ZpbGVzJywgZGF0YVRyYW5zZmVyLnR5cGVzKSAhPT0gLTEgJiZcbiAgICAgICAgdGhpcy5fdHJpZ2dlcih0eXBlLCAkLkV2ZW50KHR5cGUsIHsgZGVsZWdhdGVkRXZlbnQ6IGUgfSkpICE9PSBmYWxzZVxuICAgICAgKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKGlzRHJhZ092ZXIpIHtcbiAgICAgICAgICBkYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICdjb3B5JztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvLyBUaGUgZmlsZXVwbG9hZCB3aWRnZXQgbGlzdGVucyBmb3IgY2hhbmdlIGV2ZW50cyBvbiBmaWxlIGlucHV0IGZpZWxkcyBkZWZpbmVkXG4gIC8vIHZpYSBmaWxlSW5wdXQgc2V0dGluZyBhbmQgcGFzdGUgb3IgZHJvcCBldmVudHMgb2YgdGhlIGdpdmVuIGRyb3Bab25lLlxuICAvLyBJbiBhZGRpdGlvbiB0byB0aGUgZGVmYXVsdCBqUXVlcnkgV2lkZ2V0IG1ldGhvZHMsIHRoZSBmaWxldXBsb2FkIHdpZGdldFxuICAvLyBleHBvc2VzIHRoZSBcImFkZFwiIGFuZCBcInNlbmRcIiBtZXRob2RzLCB0byBhZGQgb3IgZGlyZWN0bHkgc2VuZCBmaWxlcyB1c2luZ1xuICAvLyB0aGUgZmlsZXVwbG9hZCBBUEkuXG4gIC8vIEJ5IGRlZmF1bHQsIGZpbGVzIGFkZGVkIHZpYSBmaWxlIGlucHV0IHNlbGVjdGlvbiwgcGFzdGUsIGRyYWcgJiBkcm9wIG9yXG4gIC8vIFwiYWRkXCIgbWV0aG9kIGFyZSB1cGxvYWRlZCBpbW1lZGlhdGVseSwgYnV0IGl0IGlzIHBvc3NpYmxlIHRvIG92ZXJyaWRlXG4gIC8vIHRoZSBcImFkZFwiIGNhbGxiYWNrIG9wdGlvbiB0byBxdWV1ZSBmaWxlIHVwbG9hZHMuXG4gICQud2lkZ2V0KCdibHVlaW1wLmZpbGV1cGxvYWQnLCB7XG4gICAgb3B0aW9uczoge1xuICAgICAgLy8gVGhlIGRyb3AgdGFyZ2V0IGVsZW1lbnQocyksIGJ5IHRoZSBkZWZhdWx0IHRoZSBjb21wbGV0ZSBkb2N1bWVudC5cbiAgICAgIC8vIFNldCB0byBudWxsIHRvIGRpc2FibGUgZHJhZyAmIGRyb3Agc3VwcG9ydDpcbiAgICAgIGRyb3Bab25lOiAkKGRvY3VtZW50KSxcbiAgICAgIC8vIFRoZSBwYXN0ZSB0YXJnZXQgZWxlbWVudChzKSwgYnkgdGhlIGRlZmF1bHQgdW5kZWZpbmVkLlxuICAgICAgLy8gU2V0IHRvIGEgRE9NIG5vZGUgb3IgalF1ZXJ5IG9iamVjdCB0byBlbmFibGUgZmlsZSBwYXN0aW5nOlxuICAgICAgcGFzdGVab25lOiB1bmRlZmluZWQsXG4gICAgICAvLyBUaGUgZmlsZSBpbnB1dCBmaWVsZChzKSwgdGhhdCBhcmUgbGlzdGVuZWQgdG8gZm9yIGNoYW5nZSBldmVudHMuXG4gICAgICAvLyBJZiB1bmRlZmluZWQsIGl0IGlzIHNldCB0byB0aGUgZmlsZSBpbnB1dCBmaWVsZHMgaW5zaWRlXG4gICAgICAvLyBvZiB0aGUgd2lkZ2V0IGVsZW1lbnQgb24gcGx1Z2luIGluaXRpYWxpemF0aW9uLlxuICAgICAgLy8gU2V0IHRvIG51bGwgdG8gZGlzYWJsZSB0aGUgY2hhbmdlIGxpc3RlbmVyLlxuICAgICAgZmlsZUlucHV0OiB1bmRlZmluZWQsXG4gICAgICAvLyBCeSBkZWZhdWx0LCB0aGUgZmlsZSBpbnB1dCBmaWVsZCBpcyByZXBsYWNlZCB3aXRoIGEgY2xvbmUgYWZ0ZXJcbiAgICAgIC8vIGVhY2ggaW5wdXQgZmllbGQgY2hhbmdlIGV2ZW50LiBUaGlzIGlzIHJlcXVpcmVkIGZvciBpZnJhbWUgdHJhbnNwb3J0XG4gICAgICAvLyBxdWV1ZXMgYW5kIGFsbG93cyBjaGFuZ2UgZXZlbnRzIHRvIGJlIGZpcmVkIGZvciB0aGUgc2FtZSBmaWxlXG4gICAgICAvLyBzZWxlY3Rpb24sIGJ1dCBjYW4gYmUgZGlzYWJsZWQgYnkgc2V0dGluZyB0aGUgZm9sbG93aW5nIG9wdGlvbiB0byBmYWxzZTpcbiAgICAgIHJlcGxhY2VGaWxlSW5wdXQ6IHRydWUsXG4gICAgICAvLyBUaGUgcGFyYW1ldGVyIG5hbWUgZm9yIHRoZSBmaWxlIGZvcm0gZGF0YSAodGhlIHJlcXVlc3QgYXJndW1lbnQgbmFtZSkuXG4gICAgICAvLyBJZiB1bmRlZmluZWQgb3IgZW1wdHksIHRoZSBuYW1lIHByb3BlcnR5IG9mIHRoZSBmaWxlIGlucHV0IGZpZWxkIGlzXG4gICAgICAvLyB1c2VkLCBvciBcImZpbGVzW11cIiBpZiB0aGUgZmlsZSBpbnB1dCBuYW1lIHByb3BlcnR5IGlzIGFsc28gZW1wdHksXG4gICAgICAvLyBjYW4gYmUgYSBzdHJpbmcgb3IgYW4gYXJyYXkgb2Ygc3RyaW5nczpcbiAgICAgIHBhcmFtTmFtZTogdW5kZWZpbmVkLFxuICAgICAgLy8gQnkgZGVmYXVsdCwgZWFjaCBmaWxlIG9mIGEgc2VsZWN0aW9uIGlzIHVwbG9hZGVkIHVzaW5nIGFuIGluZGl2aWR1YWxcbiAgICAgIC8vIHJlcXVlc3QgZm9yIFhIUiB0eXBlIHVwbG9hZHMuIFNldCB0byBmYWxzZSB0byB1cGxvYWQgZmlsZVxuICAgICAgLy8gc2VsZWN0aW9ucyBpbiBvbmUgcmVxdWVzdCBlYWNoOlxuICAgICAgc2luZ2xlRmlsZVVwbG9hZHM6IHRydWUsXG4gICAgICAvLyBUbyBsaW1pdCB0aGUgbnVtYmVyIG9mIGZpbGVzIHVwbG9hZGVkIHdpdGggb25lIFhIUiByZXF1ZXN0LFxuICAgICAgLy8gc2V0IHRoZSBmb2xsb3dpbmcgb3B0aW9uIHRvIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIDA6XG4gICAgICBsaW1pdE11bHRpRmlsZVVwbG9hZHM6IHVuZGVmaW5lZCxcbiAgICAgIC8vIFRoZSBmb2xsb3dpbmcgb3B0aW9uIGxpbWl0cyB0aGUgbnVtYmVyIG9mIGZpbGVzIHVwbG9hZGVkIHdpdGggb25lXG4gICAgICAvLyBYSFIgcmVxdWVzdCB0byBrZWVwIHRoZSByZXF1ZXN0IHNpemUgdW5kZXIgb3IgZXF1YWwgdG8gdGhlIGRlZmluZWRcbiAgICAgIC8vIGxpbWl0IGluIGJ5dGVzOlxuICAgICAgbGltaXRNdWx0aUZpbGVVcGxvYWRTaXplOiB1bmRlZmluZWQsXG4gICAgICAvLyBNdWx0aXBhcnQgZmlsZSB1cGxvYWRzIGFkZCBhIG51bWJlciBvZiBieXRlcyB0byBlYWNoIHVwbG9hZGVkIGZpbGUsXG4gICAgICAvLyB0aGVyZWZvcmUgdGhlIGZvbGxvd2luZyBvcHRpb24gYWRkcyBhbiBvdmVyaGVhZCBmb3IgZWFjaCBmaWxlIHVzZWRcbiAgICAgIC8vIGluIHRoZSBsaW1pdE11bHRpRmlsZVVwbG9hZFNpemUgY29uZmlndXJhdGlvbjpcbiAgICAgIGxpbWl0TXVsdGlGaWxlVXBsb2FkU2l6ZU92ZXJoZWFkOiA1MTIsXG4gICAgICAvLyBTZXQgdGhlIGZvbGxvd2luZyBvcHRpb24gdG8gdHJ1ZSB0byBpc3N1ZSBhbGwgZmlsZSB1cGxvYWQgcmVxdWVzdHNcbiAgICAgIC8vIGluIGEgc2VxdWVudGlhbCBvcmRlcjpcbiAgICAgIHNlcXVlbnRpYWxVcGxvYWRzOiBmYWxzZSxcbiAgICAgIC8vIFRvIGxpbWl0IHRoZSBudW1iZXIgb2YgY29uY3VycmVudCB1cGxvYWRzLFxuICAgICAgLy8gc2V0IHRoZSBmb2xsb3dpbmcgb3B0aW9uIHRvIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIDA6XG4gICAgICBsaW1pdENvbmN1cnJlbnRVcGxvYWRzOiB1bmRlZmluZWQsXG4gICAgICAvLyBTZXQgdGhlIGZvbGxvd2luZyBvcHRpb24gdG8gdHJ1ZSB0byBmb3JjZSBpZnJhbWUgdHJhbnNwb3J0IHVwbG9hZHM6XG4gICAgICBmb3JjZUlmcmFtZVRyYW5zcG9ydDogZmFsc2UsXG4gICAgICAvLyBTZXQgdGhlIGZvbGxvd2luZyBvcHRpb24gdG8gdGhlIGxvY2F0aW9uIG9mIGEgcmVkaXJlY3QgdXJsIG9uIHRoZVxuICAgICAgLy8gb3JpZ2luIHNlcnZlciwgZm9yIGNyb3NzLWRvbWFpbiBpZnJhbWUgdHJhbnNwb3J0IHVwbG9hZHM6XG4gICAgICByZWRpcmVjdDogdW5kZWZpbmVkLFxuICAgICAgLy8gVGhlIHBhcmFtZXRlciBuYW1lIGZvciB0aGUgcmVkaXJlY3QgdXJsLCBzZW50IGFzIHBhcnQgb2YgdGhlIGZvcm1cbiAgICAgIC8vIGRhdGEgYW5kIHNldCB0byAncmVkaXJlY3QnIGlmIHRoaXMgb3B0aW9uIGlzIGVtcHR5OlxuICAgICAgcmVkaXJlY3RQYXJhbU5hbWU6IHVuZGVmaW5lZCxcbiAgICAgIC8vIFNldCB0aGUgZm9sbG93aW5nIG9wdGlvbiB0byB0aGUgbG9jYXRpb24gb2YgYSBwb3N0TWVzc2FnZSB3aW5kb3csXG4gICAgICAvLyB0byBlbmFibGUgcG9zdE1lc3NhZ2UgdHJhbnNwb3J0IHVwbG9hZHM6XG4gICAgICBwb3N0TWVzc2FnZTogdW5kZWZpbmVkLFxuICAgICAgLy8gQnkgZGVmYXVsdCwgWEhSIGZpbGUgdXBsb2FkcyBhcmUgc2VudCBhcyBtdWx0aXBhcnQvZm9ybS1kYXRhLlxuICAgICAgLy8gVGhlIGlmcmFtZSB0cmFuc3BvcnQgaXMgYWx3YXlzIHVzaW5nIG11bHRpcGFydC9mb3JtLWRhdGEuXG4gICAgICAvLyBTZXQgdG8gZmFsc2UgdG8gZW5hYmxlIG5vbi1tdWx0aXBhcnQgWEhSIHVwbG9hZHM6XG4gICAgICBtdWx0aXBhcnQ6IHRydWUsXG4gICAgICAvLyBUbyB1cGxvYWQgbGFyZ2UgZmlsZXMgaW4gc21hbGxlciBjaHVua3MsIHNldCB0aGUgZm9sbG93aW5nIG9wdGlvblxuICAgICAgLy8gdG8gYSBwcmVmZXJyZWQgbWF4aW11bSBjaHVuayBzaXplLiBJZiBzZXQgdG8gMCwgbnVsbCBvciB1bmRlZmluZWQsXG4gICAgICAvLyBvciB0aGUgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSByZXF1aXJlZCBCbG9iIEFQSSwgZmlsZXMgd2lsbFxuICAgICAgLy8gYmUgdXBsb2FkZWQgYXMgYSB3aG9sZS5cbiAgICAgIG1heENodW5rU2l6ZTogdW5kZWZpbmVkLFxuICAgICAgLy8gV2hlbiBhIG5vbi1tdWx0aXBhcnQgdXBsb2FkIG9yIGEgY2h1bmtlZCBtdWx0aXBhcnQgdXBsb2FkIGhhcyBiZWVuXG4gICAgICAvLyBhYm9ydGVkLCB0aGlzIG9wdGlvbiBjYW4gYmUgdXNlZCB0byByZXN1bWUgdGhlIHVwbG9hZCBieSBzZXR0aW5nXG4gICAgICAvLyBpdCB0byB0aGUgc2l6ZSBvZiB0aGUgYWxyZWFkeSB1cGxvYWRlZCBieXRlcy4gVGhpcyBvcHRpb24gaXMgbW9zdFxuICAgICAgLy8gdXNlZnVsIHdoZW4gbW9kaWZ5aW5nIHRoZSBvcHRpb25zIG9iamVjdCBpbnNpZGUgb2YgdGhlIFwiYWRkXCIgb3JcbiAgICAgIC8vIFwic2VuZFwiIGNhbGxiYWNrcywgYXMgdGhlIG9wdGlvbnMgYXJlIGNsb25lZCBmb3IgZWFjaCBmaWxlIHVwbG9hZC5cbiAgICAgIHVwbG9hZGVkQnl0ZXM6IHVuZGVmaW5lZCxcbiAgICAgIC8vIEJ5IGRlZmF1bHQsIGZhaWxlZCAoYWJvcnQgb3IgZXJyb3IpIGZpbGUgdXBsb2FkcyBhcmUgcmVtb3ZlZCBmcm9tIHRoZVxuICAgICAgLy8gZ2xvYmFsIHByb2dyZXNzIGNhbGN1bGF0aW9uLiBTZXQgdGhlIGZvbGxvd2luZyBvcHRpb24gdG8gZmFsc2UgdG9cbiAgICAgIC8vIHByZXZlbnQgcmVjYWxjdWxhdGluZyB0aGUgZ2xvYmFsIHByb2dyZXNzIGRhdGE6XG4gICAgICByZWNhbGN1bGF0ZVByb2dyZXNzOiB0cnVlLFxuICAgICAgLy8gSW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzIHRvIGNhbGN1bGF0ZSBhbmQgdHJpZ2dlciBwcm9ncmVzcyBldmVudHM6XG4gICAgICBwcm9ncmVzc0ludGVydmFsOiAxMDAsXG4gICAgICAvLyBJbnRlcnZhbCBpbiBtaWxsaXNlY29uZHMgdG8gY2FsY3VsYXRlIHByb2dyZXNzIGJpdHJhdGU6XG4gICAgICBiaXRyYXRlSW50ZXJ2YWw6IDUwMCxcbiAgICAgIC8vIEJ5IGRlZmF1bHQsIHVwbG9hZHMgYXJlIHN0YXJ0ZWQgYXV0b21hdGljYWxseSB3aGVuIGFkZGluZyBmaWxlczpcbiAgICAgIGF1dG9VcGxvYWQ6IHRydWUsXG4gICAgICAvLyBCeSBkZWZhdWx0LCBkdXBsaWNhdGUgZmlsZSBuYW1lcyBhcmUgZXhwZWN0ZWQgdG8gYmUgaGFuZGxlZCBvblxuICAgICAgLy8gdGhlIHNlcnZlci1zaWRlLiBJZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSAoZS5nLiB3aGVuIHVwbG9hZGluZ1xuICAgICAgLy8gZmlsZXMgZGlyZWN0bHkgdG8gQW1hem9uIFMzKSwgdGhlIGZvbGxvd2luZyBvcHRpb24gY2FuIGJlIHNldCB0b1xuICAgICAgLy8gYW4gZW1wdHkgb2JqZWN0IG9yIGFuIG9iamVjdCBtYXBwaW5nIGV4aXN0aW5nIGZpbGVuYW1lcywgZS5nLjpcbiAgICAgIC8vIHsgXCJpbWFnZS5qcGdcIjogdHJ1ZSwgXCJpbWFnZSAoMSkuanBnXCI6IHRydWUgfVxuICAgICAgLy8gSWYgaXQgaXMgc2V0LCBhbGwgZmlsZXMgd2lsbCBiZSB1cGxvYWRlZCB3aXRoIHVuaXF1ZSBmaWxlbmFtZXMsXG4gICAgICAvLyBhZGRpbmcgaW5jcmVhc2luZyBudW1iZXIgc3VmZml4ZXMgaWYgbmVjZXNzYXJ5LCBlLmcuOlxuICAgICAgLy8gXCJpbWFnZSAoMikuanBnXCJcbiAgICAgIHVuaXF1ZUZpbGVuYW1lczogdW5kZWZpbmVkLFxuXG4gICAgICAvLyBFcnJvciBhbmQgaW5mbyBtZXNzYWdlczpcbiAgICAgIG1lc3NhZ2VzOiB7XG4gICAgICAgIHVwbG9hZGVkQnl0ZXM6ICdVcGxvYWRlZCBieXRlcyBleGNlZWQgZmlsZSBzaXplJ1xuICAgICAgfSxcblxuICAgICAgLy8gVHJhbnNsYXRpb24gZnVuY3Rpb24sIGdldHMgdGhlIG1lc3NhZ2Uga2V5IHRvIGJlIHRyYW5zbGF0ZWRcbiAgICAgIC8vIGFuZCBhbiBvYmplY3Qgd2l0aCBjb250ZXh0IHNwZWNpZmljIGRhdGEgYXMgYXJndW1lbnRzOlxuICAgICAgaTE4bjogZnVuY3Rpb24gKG1lc3NhZ2UsIGNvbnRleHQpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIG1lc3NhZ2UgPSB0aGlzLm1lc3NhZ2VzW21lc3NhZ2VdIHx8IG1lc3NhZ2UudG9TdHJpbmcoKTtcbiAgICAgICAgaWYgKGNvbnRleHQpIHtcbiAgICAgICAgICAkLmVhY2goY29udGV4dCwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZSgneycgKyBrZXkgKyAnfScsIHZhbHVlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgIH0sXG5cbiAgICAgIC8vIEFkZGl0aW9uYWwgZm9ybSBkYXRhIHRvIGJlIHNlbnQgYWxvbmcgd2l0aCB0aGUgZmlsZSB1cGxvYWRzIGNhbiBiZSBzZXRcbiAgICAgIC8vIHVzaW5nIHRoaXMgb3B0aW9uLCB3aGljaCBhY2NlcHRzIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBuYW1lIGFuZFxuICAgICAgLy8gdmFsdWUgcHJvcGVydGllcywgYSBmdW5jdGlvbiByZXR1cm5pbmcgc3VjaCBhbiBhcnJheSwgYSBGb3JtRGF0YVxuICAgICAgLy8gb2JqZWN0IChmb3IgWEhSIGZpbGUgdXBsb2FkcyksIG9yIGEgc2ltcGxlIG9iamVjdC5cbiAgICAgIC8vIFRoZSBmb3JtIG9mIHRoZSBmaXJzdCBmaWxlSW5wdXQgaXMgZ2l2ZW4gYXMgcGFyYW1ldGVyIHRvIHRoZSBmdW5jdGlvbjpcbiAgICAgIGZvcm1EYXRhOiBmdW5jdGlvbiAoZm9ybSkge1xuICAgICAgICByZXR1cm4gZm9ybS5zZXJpYWxpemVBcnJheSgpO1xuICAgICAgfSxcblxuICAgICAgLy8gVGhlIGFkZCBjYWxsYmFjayBpcyBpbnZva2VkIGFzIHNvb24gYXMgZmlsZXMgYXJlIGFkZGVkIHRvIHRoZSBmaWxldXBsb2FkXG4gICAgICAvLyB3aWRnZXQgKHZpYSBmaWxlIGlucHV0IHNlbGVjdGlvbiwgZHJhZyAmIGRyb3AsIHBhc3RlIG9yIGFkZCBBUEkgY2FsbCkuXG4gICAgICAvLyBJZiB0aGUgc2luZ2xlRmlsZVVwbG9hZHMgb3B0aW9uIGlzIGVuYWJsZWQsIHRoaXMgY2FsbGJhY2sgd2lsbCBiZVxuICAgICAgLy8gY2FsbGVkIG9uY2UgZm9yIGVhY2ggZmlsZSBpbiB0aGUgc2VsZWN0aW9uIGZvciBYSFIgZmlsZSB1cGxvYWRzLCBlbHNlXG4gICAgICAvLyBvbmNlIGZvciBlYWNoIGZpbGUgc2VsZWN0aW9uLlxuICAgICAgLy9cbiAgICAgIC8vIFRoZSB1cGxvYWQgc3RhcnRzIHdoZW4gdGhlIHN1Ym1pdCBtZXRob2QgaXMgaW52b2tlZCBvbiB0aGUgZGF0YSBwYXJhbWV0ZXIuXG4gICAgICAvLyBUaGUgZGF0YSBvYmplY3QgY29udGFpbnMgYSBmaWxlcyBwcm9wZXJ0eSBob2xkaW5nIHRoZSBhZGRlZCBmaWxlc1xuICAgICAgLy8gYW5kIGFsbG93cyB5b3UgdG8gb3ZlcnJpZGUgcGx1Z2luIG9wdGlvbnMgYXMgd2VsbCBhcyBkZWZpbmUgYWpheCBzZXR0aW5ncy5cbiAgICAgIC8vXG4gICAgICAvLyBMaXN0ZW5lcnMgZm9yIHRoaXMgY2FsbGJhY2sgY2FuIGFsc28gYmUgYm91bmQgdGhlIGZvbGxvd2luZyB3YXk6XG4gICAgICAvLyAub24oJ2ZpbGV1cGxvYWRhZGQnLCBmdW5jKTtcbiAgICAgIC8vXG4gICAgICAvLyBkYXRhLnN1Ym1pdCgpIHJldHVybnMgYSBQcm9taXNlIG9iamVjdCBhbmQgYWxsb3dzIHRvIGF0dGFjaCBhZGRpdGlvbmFsXG4gICAgICAvLyBoYW5kbGVycyB1c2luZyBqUXVlcnkncyBEZWZlcnJlZCBjYWxsYmFja3M6XG4gICAgICAvLyBkYXRhLnN1Ym1pdCgpLmRvbmUoZnVuYykuZmFpbChmdW5jKS5hbHdheXMoZnVuYyk7XG4gICAgICBhZGQ6IGZ1bmN0aW9uIChlLCBkYXRhKSB7XG4gICAgICAgIGlmIChlLmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBkYXRhLmF1dG9VcGxvYWQgfHxcbiAgICAgICAgICAoZGF0YS5hdXRvVXBsb2FkICE9PSBmYWxzZSAmJlxuICAgICAgICAgICAgJCh0aGlzKS5maWxldXBsb2FkKCdvcHRpb24nLCAnYXV0b1VwbG9hZCcpKVxuICAgICAgICApIHtcbiAgICAgICAgICBkYXRhLnByb2Nlc3MoKS5kb25lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGRhdGEuc3VibWl0KCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIC8vIE90aGVyIGNhbGxiYWNrczpcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIHRoZSBzdWJtaXQgZXZlbnQgb2YgZWFjaCBmaWxlIHVwbG9hZDpcbiAgICAgIC8vIHN1Ym1pdDogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRzdWJtaXQnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIHRoZSBzdGFydCBvZiBlYWNoIGZpbGUgdXBsb2FkIHJlcXVlc3Q6XG4gICAgICAvLyBzZW5kOiBmdW5jdGlvbiAoZSwgZGF0YSkge30sIC8vIC5vbignZmlsZXVwbG9hZHNlbmQnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIHN1Y2Nlc3NmdWwgdXBsb2FkczpcbiAgICAgIC8vIGRvbmU6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkZG9uZScsIGZ1bmMpO1xuXG4gICAgICAvLyBDYWxsYmFjayBmb3IgZmFpbGVkIChhYm9ydCBvciBlcnJvcikgdXBsb2FkczpcbiAgICAgIC8vIGZhaWw6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkZmFpbCcsIGZ1bmMpO1xuXG4gICAgICAvLyBDYWxsYmFjayBmb3IgY29tcGxldGVkIChzdWNjZXNzLCBhYm9ydCBvciBlcnJvcikgcmVxdWVzdHM6XG4gICAgICAvLyBhbHdheXM6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkYWx3YXlzJywgZnVuYyk7XG5cbiAgICAgIC8vIENhbGxiYWNrIGZvciB1cGxvYWQgcHJvZ3Jlc3MgZXZlbnRzOlxuICAgICAgLy8gcHJvZ3Jlc3M6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkcHJvZ3Jlc3MnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIGdsb2JhbCB1cGxvYWQgcHJvZ3Jlc3MgZXZlbnRzOlxuICAgICAgLy8gcHJvZ3Jlc3NhbGw6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkcHJvZ3Jlc3NhbGwnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIHVwbG9hZHMgc3RhcnQsIGVxdWl2YWxlbnQgdG8gdGhlIGdsb2JhbCBhamF4U3RhcnQgZXZlbnQ6XG4gICAgICAvLyBzdGFydDogZnVuY3Rpb24gKGUpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRzdGFydCcsIGZ1bmMpO1xuXG4gICAgICAvLyBDYWxsYmFjayBmb3IgdXBsb2FkcyBzdG9wLCBlcXVpdmFsZW50IHRvIHRoZSBnbG9iYWwgYWpheFN0b3AgZXZlbnQ6XG4gICAgICAvLyBzdG9wOiBmdW5jdGlvbiAoZSkge30sIC8vIC5vbignZmlsZXVwbG9hZHN0b3AnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIGNoYW5nZSBldmVudHMgb2YgdGhlIGZpbGVJbnB1dChzKTpcbiAgICAgIC8vIGNoYW5nZTogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRjaGFuZ2UnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIHBhc3RlIGV2ZW50cyB0byB0aGUgcGFzdGVab25lKHMpOlxuICAgICAgLy8gcGFzdGU6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkcGFzdGUnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIGRyb3AgZXZlbnRzIG9mIHRoZSBkcm9wWm9uZShzKTpcbiAgICAgIC8vIGRyb3A6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkZHJvcCcsIGZ1bmMpO1xuXG4gICAgICAvLyBDYWxsYmFjayBmb3IgZHJhZ292ZXIgZXZlbnRzIG9mIHRoZSBkcm9wWm9uZShzKTpcbiAgICAgIC8vIGRyYWdvdmVyOiBmdW5jdGlvbiAoZSkge30sIC8vIC5vbignZmlsZXVwbG9hZGRyYWdvdmVyJywgZnVuYyk7XG5cbiAgICAgIC8vIENhbGxiYWNrIGJlZm9yZSB0aGUgc3RhcnQgb2YgZWFjaCBjaHVuayB1cGxvYWQgcmVxdWVzdCAoYmVmb3JlIGZvcm0gZGF0YSBpbml0aWFsaXphdGlvbik6XG4gICAgICAvLyBjaHVua2JlZm9yZXNlbmQ6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkY2h1bmtiZWZvcmVzZW5kJywgZnVuYyk7XG5cbiAgICAgIC8vIENhbGxiYWNrIGZvciB0aGUgc3RhcnQgb2YgZWFjaCBjaHVuayB1cGxvYWQgcmVxdWVzdDpcbiAgICAgIC8vIGNodW5rc2VuZDogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRjaHVua3NlbmQnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIHN1Y2Nlc3NmdWwgY2h1bmsgdXBsb2FkczpcbiAgICAgIC8vIGNodW5rZG9uZTogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRjaHVua2RvbmUnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIGZhaWxlZCAoYWJvcnQgb3IgZXJyb3IpIGNodW5rIHVwbG9hZHM6XG4gICAgICAvLyBjaHVua2ZhaWw6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkY2h1bmtmYWlsJywgZnVuYyk7XG5cbiAgICAgIC8vIENhbGxiYWNrIGZvciBjb21wbGV0ZWQgKHN1Y2Nlc3MsIGFib3J0IG9yIGVycm9yKSBjaHVuayB1cGxvYWQgcmVxdWVzdHM6XG4gICAgICAvLyBjaHVua2Fsd2F5czogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRjaHVua2Fsd2F5cycsIGZ1bmMpO1xuXG4gICAgICAvLyBUaGUgcGx1Z2luIG9wdGlvbnMgYXJlIHVzZWQgYXMgc2V0dGluZ3Mgb2JqZWN0IGZvciB0aGUgYWpheCBjYWxscy5cbiAgICAgIC8vIFRoZSBmb2xsb3dpbmcgYXJlIGpRdWVyeSBhamF4IHNldHRpbmdzIHJlcXVpcmVkIGZvciB0aGUgZmlsZSB1cGxvYWRzOlxuICAgICAgcHJvY2Vzc0RhdGE6IGZhbHNlLFxuICAgICAgY29udGVudFR5cGU6IGZhbHNlLFxuICAgICAgY2FjaGU6IGZhbHNlLFxuICAgICAgdGltZW91dDogMFxuICAgIH0sXG5cbiAgICAvLyBqUXVlcnkgdmVyc2lvbnMgYmVmb3JlIDEuOCByZXF1aXJlIHByb21pc2UucGlwZSBpZiB0aGUgcmV0dXJuIHZhbHVlIGlzXG4gICAgLy8gdXNlZCwgYXMgcHJvbWlzZS50aGVuIGluIG9sZGVyIHZlcnNpb25zIGhhcyBhIGRpZmZlcmVudCBiZWhhdmlvciwgc2VlOlxuICAgIC8vIGh0dHBzOi8vYmxvZy5qcXVlcnkuY29tLzIwMTIvMDgvMDkvanF1ZXJ5LTEtOC1yZWxlYXNlZC9cbiAgICAvLyBodHRwczovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTEwMTBcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYmx1ZWltcC9qUXVlcnktRmlsZS1VcGxvYWQvcHVsbC8zNDM1XG4gICAgX3Byb21pc2VQaXBlOiAoZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHBhcnRzID0gJC5mbi5qcXVlcnkuc3BsaXQoJy4nKTtcbiAgICAgIHJldHVybiBOdW1iZXIocGFydHNbMF0pID4gMSB8fCBOdW1iZXIocGFydHNbMV0pID4gNyA/ICd0aGVuJyA6ICdwaXBlJztcbiAgICB9KSgpLFxuXG4gICAgLy8gQSBsaXN0IG9mIG9wdGlvbnMgdGhhdCByZXF1aXJlIHJlaW5pdGlhbGl6aW5nIGV2ZW50IGxpc3RlbmVycyBhbmQvb3JcbiAgICAvLyBzcGVjaWFsIGluaXRpYWxpemF0aW9uIGNvZGU6XG4gICAgX3NwZWNpYWxPcHRpb25zOiBbXG4gICAgICAnZmlsZUlucHV0JyxcbiAgICAgICdkcm9wWm9uZScsXG4gICAgICAncGFzdGVab25lJyxcbiAgICAgICdtdWx0aXBhcnQnLFxuICAgICAgJ2ZvcmNlSWZyYW1lVHJhbnNwb3J0J1xuICAgIF0sXG5cbiAgICBfYmxvYlNsaWNlOlxuICAgICAgJC5zdXBwb3J0LmJsb2JTbGljZSAmJlxuICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgc2xpY2UgPSB0aGlzLnNsaWNlIHx8IHRoaXMud2Via2l0U2xpY2UgfHwgdGhpcy5tb3pTbGljZTtcbiAgICAgICAgcmV0dXJuIHNsaWNlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9LFxuXG4gICAgX0JpdHJhdGVUaW1lcjogZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcy50aW1lc3RhbXAgPSBEYXRlLm5vdyA/IERhdGUubm93KCkgOiBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgIHRoaXMubG9hZGVkID0gMDtcbiAgICAgIHRoaXMuYml0cmF0ZSA9IDA7XG4gICAgICB0aGlzLmdldEJpdHJhdGUgPSBmdW5jdGlvbiAobm93LCBsb2FkZWQsIGludGVydmFsKSB7XG4gICAgICAgIHZhciB0aW1lRGlmZiA9IG5vdyAtIHRoaXMudGltZXN0YW1wO1xuICAgICAgICBpZiAoIXRoaXMuYml0cmF0ZSB8fCAhaW50ZXJ2YWwgfHwgdGltZURpZmYgPiBpbnRlcnZhbCkge1xuICAgICAgICAgIHRoaXMuYml0cmF0ZSA9IChsb2FkZWQgLSB0aGlzLmxvYWRlZCkgKiAoMTAwMCAvIHRpbWVEaWZmKSAqIDg7XG4gICAgICAgICAgdGhpcy5sb2FkZWQgPSBsb2FkZWQ7XG4gICAgICAgICAgdGhpcy50aW1lc3RhbXAgPSBub3c7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuYml0cmF0ZTtcbiAgICAgIH07XG4gICAgfSxcblxuICAgIF9pc1hIUlVwbG9hZDogZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICFvcHRpb25zLmZvcmNlSWZyYW1lVHJhbnNwb3J0ICYmXG4gICAgICAgICgoIW9wdGlvbnMubXVsdGlwYXJ0ICYmICQuc3VwcG9ydC54aHJGaWxlVXBsb2FkKSB8fFxuICAgICAgICAgICQuc3VwcG9ydC54aHJGb3JtRGF0YUZpbGVVcGxvYWQpXG4gICAgICApO1xuICAgIH0sXG5cbiAgICBfZ2V0Rm9ybURhdGE6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICB2YXIgZm9ybURhdGE7XG4gICAgICBpZiAoJC50eXBlKG9wdGlvbnMuZm9ybURhdGEpID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmZvcm1EYXRhKG9wdGlvbnMuZm9ybSk7XG4gICAgICB9XG4gICAgICBpZiAoJC5pc0FycmF5KG9wdGlvbnMuZm9ybURhdGEpKSB7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmZvcm1EYXRhO1xuICAgICAgfVxuICAgICAgaWYgKCQudHlwZShvcHRpb25zLmZvcm1EYXRhKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgZm9ybURhdGEgPSBbXTtcbiAgICAgICAgJC5lYWNoKG9wdGlvbnMuZm9ybURhdGEsIGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICAgICAgICAgIGZvcm1EYXRhLnB1c2goeyBuYW1lOiBuYW1lLCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZm9ybURhdGE7XG4gICAgICB9XG4gICAgICByZXR1cm4gW107XG4gICAgfSxcblxuICAgIF9nZXRUb3RhbDogZnVuY3Rpb24gKGZpbGVzKSB7XG4gICAgICB2YXIgdG90YWwgPSAwO1xuICAgICAgJC5lYWNoKGZpbGVzLCBmdW5jdGlvbiAoaW5kZXgsIGZpbGUpIHtcbiAgICAgICAgdG90YWwgKz0gZmlsZS5zaXplIHx8IDE7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0b3RhbDtcbiAgICB9LFxuXG4gICAgX2luaXRQcm9ncmVzc09iamVjdDogZnVuY3Rpb24gKG9iaikge1xuICAgICAgdmFyIHByb2dyZXNzID0ge1xuICAgICAgICBsb2FkZWQ6IDAsXG4gICAgICAgIHRvdGFsOiAwLFxuICAgICAgICBiaXRyYXRlOiAwXG4gICAgICB9O1xuICAgICAgaWYgKG9iai5fcHJvZ3Jlc3MpIHtcbiAgICAgICAgJC5leHRlbmQob2JqLl9wcm9ncmVzcywgcHJvZ3Jlc3MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2JqLl9wcm9ncmVzcyA9IHByb2dyZXNzO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBfaW5pdFJlc3BvbnNlT2JqZWN0OiBmdW5jdGlvbiAob2JqKSB7XG4gICAgICB2YXIgcHJvcDtcbiAgICAgIGlmIChvYmouX3Jlc3BvbnNlKSB7XG4gICAgICAgIGZvciAocHJvcCBpbiBvYmouX3Jlc3BvbnNlKSB7XG4gICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmouX3Jlc3BvbnNlLCBwcm9wKSkge1xuICAgICAgICAgICAgZGVsZXRlIG9iai5fcmVzcG9uc2VbcHJvcF07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYmouX3Jlc3BvbnNlID0ge307XG4gICAgICB9XG4gICAgfSxcblxuICAgIF9vblByb2dyZXNzOiBmdW5jdGlvbiAoZSwgZGF0YSkge1xuICAgICAgaWYgKGUubGVuZ3RoQ29tcHV0YWJsZSkge1xuICAgICAgICB2YXIgbm93ID0gRGF0ZS5ub3cgPyBEYXRlLm5vdygpIDogbmV3IERhdGUoKS5nZXRUaW1lKCksXG4gICAgICAgICAgbG9hZGVkO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZGF0YS5fdGltZSAmJlxuICAgICAgICAgIGRhdGEucHJvZ3Jlc3NJbnRlcnZhbCAmJlxuICAgICAgICAgIG5vdyAtIGRhdGEuX3RpbWUgPCBkYXRhLnByb2dyZXNzSW50ZXJ2YWwgJiZcbiAgICAgICAgICBlLmxvYWRlZCAhPT0gZS50b3RhbFxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZGF0YS5fdGltZSA9IG5vdztcbiAgICAgICAgbG9hZGVkID1cbiAgICAgICAgICBNYXRoLmZsb29yKFxuICAgICAgICAgICAgKGUubG9hZGVkIC8gZS50b3RhbCkgKiAoZGF0YS5jaHVua1NpemUgfHwgZGF0YS5fcHJvZ3Jlc3MudG90YWwpXG4gICAgICAgICAgKSArIChkYXRhLnVwbG9hZGVkQnl0ZXMgfHwgMCk7XG4gICAgICAgIC8vIEFkZCB0aGUgZGlmZmVyZW5jZSBmcm9tIHRoZSBwcmV2aW91c2x5IGxvYWRlZCBzdGF0ZVxuICAgICAgICAvLyB0byB0aGUgZ2xvYmFsIGxvYWRlZCBjb3VudGVyOlxuICAgICAgICB0aGlzLl9wcm9ncmVzcy5sb2FkZWQgKz0gbG9hZGVkIC0gZGF0YS5fcHJvZ3Jlc3MubG9hZGVkO1xuICAgICAgICB0aGlzLl9wcm9ncmVzcy5iaXRyYXRlID0gdGhpcy5fYml0cmF0ZVRpbWVyLmdldEJpdHJhdGUoXG4gICAgICAgICAgbm93LFxuICAgICAgICAgIHRoaXMuX3Byb2dyZXNzLmxvYWRlZCxcbiAgICAgICAgICBkYXRhLmJpdHJhdGVJbnRlcnZhbFxuICAgICAgICApO1xuICAgICAgICBkYXRhLl9wcm9ncmVzcy5sb2FkZWQgPSBkYXRhLmxvYWRlZCA9IGxvYWRlZDtcbiAgICAgICAgZGF0YS5fcHJvZ3Jlc3MuYml0cmF0ZSA9IGRhdGEuYml0cmF0ZSA9IGRhdGEuX2JpdHJhdGVUaW1lci5nZXRCaXRyYXRlKFxuICAgICAgICAgIG5vdyxcbiAgICAgICAgICBsb2FkZWQsXG4gICAgICAgICAgZGF0YS5iaXRyYXRlSW50ZXJ2YWxcbiAgICAgICAgKTtcbiAgICAgICAgLy8gVHJpZ2dlciBhIGN1c3RvbSBwcm9ncmVzcyBldmVudCB3aXRoIGEgdG90YWwgZGF0YSBwcm9wZXJ0eSBzZXRcbiAgICAgICAgLy8gdG8gdGhlIGZpbGUgc2l6ZShzKSBvZiB0aGUgY3VycmVudCB1cGxvYWQgYW5kIGEgbG9hZGVkIGRhdGFcbiAgICAgICAgLy8gcHJvcGVydHkgY2FsY3VsYXRlZCBhY2NvcmRpbmdseTpcbiAgICAgICAgdGhpcy5fdHJpZ2dlcihcbiAgICAgICAgICAncHJvZ3Jlc3MnLFxuICAgICAgICAgICQuRXZlbnQoJ3Byb2dyZXNzJywgeyBkZWxlZ2F0ZWRFdmVudDogZSB9KSxcbiAgICAgICAgICBkYXRhXG4gICAgICAgICk7XG4gICAgICAgIC8vIFRyaWdnZXIgYSBnbG9iYWwgcHJvZ3Jlc3MgZXZlbnQgZm9yIGFsbCBjdXJyZW50IGZpbGUgdXBsb2FkcyxcbiAgICAgICAgLy8gaW5jbHVkaW5nIGFqYXggY2FsbHMgcXVldWVkIGZvciBzZXF1ZW50aWFsIGZpbGUgdXBsb2FkczpcbiAgICAgICAgdGhpcy5fdHJpZ2dlcihcbiAgICAgICAgICAncHJvZ3Jlc3NhbGwnLFxuICAgICAgICAgICQuRXZlbnQoJ3Byb2dyZXNzYWxsJywgeyBkZWxlZ2F0ZWRFdmVudDogZSB9KSxcbiAgICAgICAgICB0aGlzLl9wcm9ncmVzc1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBfaW5pdFByb2dyZXNzTGlzdGVuZXI6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXMsXG4gICAgICAgIHhociA9IG9wdGlvbnMueGhyID8gb3B0aW9ucy54aHIoKSA6ICQuYWpheFNldHRpbmdzLnhocigpO1xuICAgICAgLy8gQWNjZXNzIHRvIHRoZSBuYXRpdmUgWEhSIG9iamVjdCBpcyByZXF1aXJlZCB0byBhZGQgZXZlbnQgbGlzdGVuZXJzXG4gICAgICAvLyBmb3IgdGhlIHVwbG9hZCBwcm9ncmVzcyBldmVudDpcbiAgICAgIGlmICh4aHIudXBsb2FkKSB7XG4gICAgICAgICQoeGhyLnVwbG9hZCkub24oJ3Byb2dyZXNzJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICB2YXIgb2UgPSBlLm9yaWdpbmFsRXZlbnQ7XG4gICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBwcm9ncmVzcyBldmVudCBwcm9wZXJ0aWVzIGdldCBjb3BpZWQgb3ZlcjpcbiAgICAgICAgICBlLmxlbmd0aENvbXB1dGFibGUgPSBvZS5sZW5ndGhDb21wdXRhYmxlO1xuICAgICAgICAgIGUubG9hZGVkID0gb2UubG9hZGVkO1xuICAgICAgICAgIGUudG90YWwgPSBvZS50b3RhbDtcbiAgICAgICAgICB0aGF0Ll9vblByb2dyZXNzKGUsIG9wdGlvbnMpO1xuICAgICAgICB9KTtcbiAgICAgICAgb3B0aW9ucy54aHIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHhocjtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX2RlaW5pdFByb2dyZXNzTGlzdGVuZXI6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICB2YXIgeGhyID0gb3B0aW9ucy54aHIgPyBvcHRpb25zLnhocigpIDogJC5hamF4U2V0dGluZ3MueGhyKCk7XG4gICAgICBpZiAoeGhyLnVwbG9hZCkge1xuICAgICAgICAkKHhoci51cGxvYWQpLm9mZigncHJvZ3Jlc3MnKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX2lzSW5zdGFuY2VPZjogZnVuY3Rpb24gKHR5cGUsIG9iaikge1xuICAgICAgLy8gQ3Jvc3MtZnJhbWUgaW5zdGFuY2VvZiBjaGVja1xuICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCAnICsgdHlwZSArICddJztcbiAgICB9LFxuXG4gICAgX2dldFVuaXF1ZUZpbGVuYW1lOiBmdW5jdGlvbiAobmFtZSwgbWFwKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgIG5hbWUgPSBTdHJpbmcobmFtZSk7XG4gICAgICBpZiAobWFwW25hbWVdKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBuYW1lID0gbmFtZS5yZXBsYWNlKFxuICAgICAgICAgIC8oPzogXFwoKFtcXGRdKylcXCkpPyhcXC5bXi5dKyk/JC8sXG4gICAgICAgICAgZnVuY3Rpb24gKF8sIHAxLCBwMikge1xuICAgICAgICAgICAgdmFyIGluZGV4ID0gcDEgPyBOdW1iZXIocDEpICsgMSA6IDE7XG4gICAgICAgICAgICB2YXIgZXh0ID0gcDIgfHwgJyc7XG4gICAgICAgICAgICByZXR1cm4gJyAoJyArIGluZGV4ICsgJyknICsgZXh0O1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldFVuaXF1ZUZpbGVuYW1lKG5hbWUsIG1hcCk7XG4gICAgICB9XG4gICAgICBtYXBbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIG5hbWU7XG4gICAgfSxcblxuICAgIF9pbml0WEhSRGF0YTogZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcyxcbiAgICAgICAgZm9ybURhdGEsXG4gICAgICAgIGZpbGUgPSBvcHRpb25zLmZpbGVzWzBdLFxuICAgICAgICAvLyBJZ25vcmUgbm9uLW11bHRpcGFydCBzZXR0aW5nIGlmIG5vdCBzdXBwb3J0ZWQ6XG4gICAgICAgIG11bHRpcGFydCA9IG9wdGlvbnMubXVsdGlwYXJ0IHx8ICEkLnN1cHBvcnQueGhyRmlsZVVwbG9hZCxcbiAgICAgICAgcGFyYW1OYW1lID1cbiAgICAgICAgICAkLnR5cGUob3B0aW9ucy5wYXJhbU5hbWUpID09PSAnYXJyYXknXG4gICAgICAgICAgICA/IG9wdGlvbnMucGFyYW1OYW1lWzBdXG4gICAgICAgICAgICA6IG9wdGlvbnMucGFyYW1OYW1lO1xuICAgICAgb3B0aW9ucy5oZWFkZXJzID0gJC5leHRlbmQoe30sIG9wdGlvbnMuaGVhZGVycyk7XG4gICAgICBpZiAob3B0aW9ucy5jb250ZW50UmFuZ2UpIHtcbiAgICAgICAgb3B0aW9ucy5oZWFkZXJzWydDb250ZW50LVJhbmdlJ10gPSBvcHRpb25zLmNvbnRlbnRSYW5nZTtcbiAgICAgIH1cbiAgICAgIGlmICghbXVsdGlwYXJ0IHx8IG9wdGlvbnMuYmxvYiB8fCAhdGhpcy5faXNJbnN0YW5jZU9mKCdGaWxlJywgZmlsZSkpIHtcbiAgICAgICAgb3B0aW9ucy5oZWFkZXJzWydDb250ZW50LURpc3Bvc2l0aW9uJ10gPVxuICAgICAgICAgICdhdHRhY2htZW50OyBmaWxlbmFtZT1cIicgK1xuICAgICAgICAgIGVuY29kZVVSSShmaWxlLnVwbG9hZE5hbWUgfHwgZmlsZS5uYW1lKSArXG4gICAgICAgICAgJ1wiJztcbiAgICAgIH1cbiAgICAgIGlmICghbXVsdGlwYXJ0KSB7XG4gICAgICAgIG9wdGlvbnMuY29udGVudFR5cGUgPSBmaWxlLnR5cGUgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc7XG4gICAgICAgIG9wdGlvbnMuZGF0YSA9IG9wdGlvbnMuYmxvYiB8fCBmaWxlO1xuICAgICAgfSBlbHNlIGlmICgkLnN1cHBvcnQueGhyRm9ybURhdGFGaWxlVXBsb2FkKSB7XG4gICAgICAgIGlmIChvcHRpb25zLnBvc3RNZXNzYWdlKSB7XG4gICAgICAgICAgLy8gd2luZG93LnBvc3RNZXNzYWdlIGRvZXMgbm90IGFsbG93IHNlbmRpbmcgRm9ybURhdGFcbiAgICAgICAgICAvLyBvYmplY3RzLCBzbyB3ZSBqdXN0IGFkZCB0aGUgRmlsZS9CbG9iIG9iamVjdHMgdG9cbiAgICAgICAgICAvLyB0aGUgZm9ybURhdGEgYXJyYXkgYW5kIGxldCB0aGUgcG9zdE1lc3NhZ2Ugd2luZG93XG4gICAgICAgICAgLy8gY3JlYXRlIHRoZSBGb3JtRGF0YSBvYmplY3Qgb3V0IG9mIHRoaXMgYXJyYXk6XG4gICAgICAgICAgZm9ybURhdGEgPSB0aGlzLl9nZXRGb3JtRGF0YShvcHRpb25zKTtcbiAgICAgICAgICBpZiAob3B0aW9ucy5ibG9iKSB7XG4gICAgICAgICAgICBmb3JtRGF0YS5wdXNoKHtcbiAgICAgICAgICAgICAgbmFtZTogcGFyYW1OYW1lLFxuICAgICAgICAgICAgICB2YWx1ZTogb3B0aW9ucy5ibG9iXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJC5lYWNoKG9wdGlvbnMuZmlsZXMsIGZ1bmN0aW9uIChpbmRleCwgZmlsZSkge1xuICAgICAgICAgICAgICBmb3JtRGF0YS5wdXNoKHtcbiAgICAgICAgICAgICAgICBuYW1lOlxuICAgICAgICAgICAgICAgICAgKCQudHlwZShvcHRpb25zLnBhcmFtTmFtZSkgPT09ICdhcnJheScgJiZcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5wYXJhbU5hbWVbaW5kZXhdKSB8fFxuICAgICAgICAgICAgICAgICAgcGFyYW1OYW1lLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmaWxlXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGF0Ll9pc0luc3RhbmNlT2YoJ0Zvcm1EYXRhJywgb3B0aW9ucy5mb3JtRGF0YSkpIHtcbiAgICAgICAgICAgIGZvcm1EYXRhID0gb3B0aW9ucy5mb3JtRGF0YTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgICAgICAgICQuZWFjaCh0aGlzLl9nZXRGb3JtRGF0YShvcHRpb25zKSwgZnVuY3Rpb24gKGluZGV4LCBmaWVsZCkge1xuICAgICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoZmllbGQubmFtZSwgZmllbGQudmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChvcHRpb25zLmJsb2IpIHtcbiAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChcbiAgICAgICAgICAgICAgcGFyYW1OYW1lLFxuICAgICAgICAgICAgICBvcHRpb25zLmJsb2IsXG4gICAgICAgICAgICAgIGZpbGUudXBsb2FkTmFtZSB8fCBmaWxlLm5hbWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICQuZWFjaChvcHRpb25zLmZpbGVzLCBmdW5jdGlvbiAoaW5kZXgsIGZpbGUpIHtcbiAgICAgICAgICAgICAgLy8gVGhpcyBjaGVjayBhbGxvd3MgdGhlIHRlc3RzIHRvIHJ1biB3aXRoXG4gICAgICAgICAgICAgIC8vIGR1bW15IG9iamVjdHM6XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0aGF0Ll9pc0luc3RhbmNlT2YoJ0ZpbGUnLCBmaWxlKSB8fFxuICAgICAgICAgICAgICAgIHRoYXQuX2lzSW5zdGFuY2VPZignQmxvYicsIGZpbGUpXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHZhciBmaWxlTmFtZSA9IGZpbGUudXBsb2FkTmFtZSB8fCBmaWxlLm5hbWU7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudW5pcXVlRmlsZW5hbWVzKSB7XG4gICAgICAgICAgICAgICAgICBmaWxlTmFtZSA9IHRoYXQuX2dldFVuaXF1ZUZpbGVuYW1lKFxuICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy51bmlxdWVGaWxlbmFtZXNcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChcbiAgICAgICAgICAgICAgICAgICgkLnR5cGUob3B0aW9ucy5wYXJhbU5hbWUpID09PSAnYXJyYXknICYmXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucGFyYW1OYW1lW2luZGV4XSkgfHxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1OYW1lLFxuICAgICAgICAgICAgICAgICAgZmlsZSxcbiAgICAgICAgICAgICAgICAgIGZpbGVOYW1lXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9wdGlvbnMuZGF0YSA9IGZvcm1EYXRhO1xuICAgICAgfVxuICAgICAgLy8gQmxvYiByZWZlcmVuY2UgaXMgbm90IG5lZWRlZCBhbnltb3JlLCBmcmVlIG1lbW9yeTpcbiAgICAgIG9wdGlvbnMuYmxvYiA9IG51bGw7XG4gICAgfSxcblxuICAgIF9pbml0SWZyYW1lU2V0dGluZ3M6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICB2YXIgdGFyZ2V0SG9zdCA9ICQoJzxhPjwvYT4nKS5wcm9wKCdocmVmJywgb3B0aW9ucy51cmwpLnByb3AoJ2hvc3QnKTtcbiAgICAgIC8vIFNldHRpbmcgdGhlIGRhdGFUeXBlIHRvIGlmcmFtZSBlbmFibGVzIHRoZSBpZnJhbWUgdHJhbnNwb3J0OlxuICAgICAgb3B0aW9ucy5kYXRhVHlwZSA9ICdpZnJhbWUgJyArIChvcHRpb25zLmRhdGFUeXBlIHx8ICcnKTtcbiAgICAgIC8vIFRoZSBpZnJhbWUgdHJhbnNwb3J0IGFjY2VwdHMgYSBzZXJpYWxpemVkIGFycmF5IGFzIGZvcm0gZGF0YTpcbiAgICAgIG9wdGlvbnMuZm9ybURhdGEgPSB0aGlzLl9nZXRGb3JtRGF0YShvcHRpb25zKTtcbiAgICAgIC8vIEFkZCByZWRpcmVjdCB1cmwgdG8gZm9ybSBkYXRhIG9uIGNyb3NzLWRvbWFpbiB1cGxvYWRzOlxuICAgICAgaWYgKG9wdGlvbnMucmVkaXJlY3QgJiYgdGFyZ2V0SG9zdCAmJiB0YXJnZXRIb3N0ICE9PSBsb2NhdGlvbi5ob3N0KSB7XG4gICAgICAgIG9wdGlvbnMuZm9ybURhdGEucHVzaCh7XG4gICAgICAgICAgbmFtZTogb3B0aW9ucy5yZWRpcmVjdFBhcmFtTmFtZSB8fCAncmVkaXJlY3QnLFxuICAgICAgICAgIHZhbHVlOiBvcHRpb25zLnJlZGlyZWN0XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBfaW5pdERhdGFTZXR0aW5nczogZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgIGlmICh0aGlzLl9pc1hIUlVwbG9hZChvcHRpb25zKSkge1xuICAgICAgICBpZiAoIXRoaXMuX2NodW5rZWRVcGxvYWQob3B0aW9ucywgdHJ1ZSkpIHtcbiAgICAgICAgICBpZiAoIW9wdGlvbnMuZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5faW5pdFhIUkRhdGEob3B0aW9ucyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuX2luaXRQcm9ncmVzc0xpc3RlbmVyKG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLnBvc3RNZXNzYWdlKSB7XG4gICAgICAgICAgLy8gU2V0dGluZyB0aGUgZGF0YVR5cGUgdG8gcG9zdG1lc3NhZ2UgZW5hYmxlcyB0aGVcbiAgICAgICAgICAvLyBwb3N0TWVzc2FnZSB0cmFuc3BvcnQ6XG4gICAgICAgICAgb3B0aW9ucy5kYXRhVHlwZSA9ICdwb3N0bWVzc2FnZSAnICsgKG9wdGlvbnMuZGF0YVR5cGUgfHwgJycpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9pbml0SWZyYW1lU2V0dGluZ3Mob3B0aW9ucyk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIF9nZXRQYXJhbU5hbWU6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICB2YXIgZmlsZUlucHV0ID0gJChvcHRpb25zLmZpbGVJbnB1dCksXG4gICAgICAgIHBhcmFtTmFtZSA9IG9wdGlvbnMucGFyYW1OYW1lO1xuICAgICAgaWYgKCFwYXJhbU5hbWUpIHtcbiAgICAgICAgcGFyYW1OYW1lID0gW107XG4gICAgICAgIGZpbGVJbnB1dC5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgaW5wdXQgPSAkKHRoaXMpLFxuICAgICAgICAgICAgbmFtZSA9IGlucHV0LnByb3AoJ25hbWUnKSB8fCAnZmlsZXNbXScsXG4gICAgICAgICAgICBpID0gKGlucHV0LnByb3AoJ2ZpbGVzJykgfHwgWzFdKS5sZW5ndGg7XG4gICAgICAgICAgd2hpbGUgKGkpIHtcbiAgICAgICAgICAgIHBhcmFtTmFtZS5wdXNoKG5hbWUpO1xuICAgICAgICAgICAgaSAtPSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghcGFyYW1OYW1lLmxlbmd0aCkge1xuICAgICAgICAgIHBhcmFtTmFtZSA9IFtmaWxlSW5wdXQucHJvcCgnbmFtZScpIHx8ICdmaWxlc1tdJ107XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoISQuaXNBcnJheShwYXJhbU5hbWUpKSB7XG4gICAgICAgIHBhcmFtTmFtZSA9IFtwYXJhbU5hbWVdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBhcmFtTmFtZTtcbiAgICB9LFxuXG4gICAgX2luaXRGb3JtU2V0dGluZ3M6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAvLyBSZXRyaWV2ZSBtaXNzaW5nIG9wdGlvbnMgZnJvbSB0aGUgaW5wdXQgZmllbGQgYW5kIHRoZVxuICAgICAgLy8gYXNzb2NpYXRlZCBmb3JtLCBpZiBhdmFpbGFibGU6XG4gICAgICBpZiAoIW9wdGlvbnMuZm9ybSB8fCAhb3B0aW9ucy5mb3JtLmxlbmd0aCkge1xuICAgICAgICBvcHRpb25zLmZvcm0gPSAkKG9wdGlvbnMuZmlsZUlucHV0LnByb3AoJ2Zvcm0nKSk7XG4gICAgICAgIC8vIElmIHRoZSBnaXZlbiBmaWxlIGlucHV0IGRvZXNuJ3QgaGF2ZSBhbiBhc3NvY2lhdGVkIGZvcm0sXG4gICAgICAgIC8vIHVzZSB0aGUgZGVmYXVsdCB3aWRnZXQgZmlsZSBpbnB1dCdzIGZvcm06XG4gICAgICAgIGlmICghb3B0aW9ucy5mb3JtLmxlbmd0aCkge1xuICAgICAgICAgIG9wdGlvbnMuZm9ybSA9ICQodGhpcy5vcHRpb25zLmZpbGVJbnB1dC5wcm9wKCdmb3JtJykpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBvcHRpb25zLnBhcmFtTmFtZSA9IHRoaXMuX2dldFBhcmFtTmFtZShvcHRpb25zKTtcbiAgICAgIGlmICghb3B0aW9ucy51cmwpIHtcbiAgICAgICAgb3B0aW9ucy51cmwgPSBvcHRpb25zLmZvcm0ucHJvcCgnYWN0aW9uJykgfHwgbG9jYXRpb24uaHJlZjtcbiAgICAgIH1cbiAgICAgIC8vIFRoZSBIVFRQIHJlcXVlc3QgbWV0aG9kIG11c3QgYmUgXCJQT1NUXCIgb3IgXCJQVVRcIjpcbiAgICAgIG9wdGlvbnMudHlwZSA9IChcbiAgICAgICAgb3B0aW9ucy50eXBlIHx8XG4gICAgICAgICgkLnR5cGUob3B0aW9ucy5mb3JtLnByb3AoJ21ldGhvZCcpKSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICBvcHRpb25zLmZvcm0ucHJvcCgnbWV0aG9kJykpIHx8XG4gICAgICAgICcnXG4gICAgICApLnRvVXBwZXJDYXNlKCk7XG4gICAgICBpZiAoXG4gICAgICAgIG9wdGlvbnMudHlwZSAhPT0gJ1BPU1QnICYmXG4gICAgICAgIG9wdGlvbnMudHlwZSAhPT0gJ1BVVCcgJiZcbiAgICAgICAgb3B0aW9ucy50eXBlICE9PSAnUEFUQ0gnXG4gICAgICApIHtcbiAgICAgICAgb3B0aW9ucy50eXBlID0gJ1BPU1QnO1xuICAgICAgfVxuICAgICAgaWYgKCFvcHRpb25zLmZvcm1BY2NlcHRDaGFyc2V0KSB7XG4gICAgICAgIG9wdGlvbnMuZm9ybUFjY2VwdENoYXJzZXQgPSBvcHRpb25zLmZvcm0uYXR0cignYWNjZXB0LWNoYXJzZXQnKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX2dldEFKQVhTZXR0aW5nczogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgIHZhciBvcHRpb25zID0gJC5leHRlbmQoe30sIHRoaXMub3B0aW9ucywgZGF0YSk7XG4gICAgICB0aGlzLl9pbml0Rm9ybVNldHRpbmdzKG9wdGlvbnMpO1xuICAgICAgdGhpcy5faW5pdERhdGFTZXR0aW5ncyhvcHRpb25zKTtcbiAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH0sXG5cbiAgICAvLyBqUXVlcnkgMS42IGRvZXNuJ3QgcHJvdmlkZSAuc3RhdGUoKSxcbiAgICAvLyB3aGlsZSBqUXVlcnkgMS44KyByZW1vdmVkIC5pc1JlamVjdGVkKCkgYW5kIC5pc1Jlc29sdmVkKCk6XG4gICAgX2dldERlZmVycmVkU3RhdGU6IGZ1bmN0aW9uIChkZWZlcnJlZCkge1xuICAgICAgaWYgKGRlZmVycmVkLnN0YXRlKSB7XG4gICAgICAgIHJldHVybiBkZWZlcnJlZC5zdGF0ZSgpO1xuICAgICAgfVxuICAgICAgaWYgKGRlZmVycmVkLmlzUmVzb2x2ZWQoKSkge1xuICAgICAgICByZXR1cm4gJ3Jlc29sdmVkJztcbiAgICAgIH1cbiAgICAgIGlmIChkZWZlcnJlZC5pc1JlamVjdGVkKCkpIHtcbiAgICAgICAgcmV0dXJuICdyZWplY3RlZCc7XG4gICAgICB9XG4gICAgICByZXR1cm4gJ3BlbmRpbmcnO1xuICAgIH0sXG5cbiAgICAvLyBNYXBzIGpxWEhSIGNhbGxiYWNrcyB0byB0aGUgZXF1aXZhbGVudFxuICAgIC8vIG1ldGhvZHMgb2YgdGhlIGdpdmVuIFByb21pc2Ugb2JqZWN0OlxuICAgIF9lbmhhbmNlUHJvbWlzZTogZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgIHByb21pc2Uuc3VjY2VzcyA9IHByb21pc2UuZG9uZTtcbiAgICAgIHByb21pc2UuZXJyb3IgPSBwcm9taXNlLmZhaWw7XG4gICAgICBwcm9taXNlLmNvbXBsZXRlID0gcHJvbWlzZS5hbHdheXM7XG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9LFxuXG4gICAgLy8gQ3JlYXRlcyBhbmQgcmV0dXJucyBhIFByb21pc2Ugb2JqZWN0IGVuaGFuY2VkIHdpdGhcbiAgICAvLyB0aGUganFYSFIgbWV0aG9kcyBhYm9ydCwgc3VjY2VzcywgZXJyb3IgYW5kIGNvbXBsZXRlOlxuICAgIF9nZXRYSFJQcm9taXNlOiBmdW5jdGlvbiAocmVzb2x2ZU9yUmVqZWN0LCBjb250ZXh0LCBhcmdzKSB7XG4gICAgICB2YXIgZGZkID0gJC5EZWZlcnJlZCgpLFxuICAgICAgICBwcm9taXNlID0gZGZkLnByb21pc2UoKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgY29udGV4dCA9IGNvbnRleHQgfHwgdGhpcy5vcHRpb25zLmNvbnRleHQgfHwgcHJvbWlzZTtcbiAgICAgIGlmIChyZXNvbHZlT3JSZWplY3QgPT09IHRydWUpIHtcbiAgICAgICAgZGZkLnJlc29sdmVXaXRoKGNvbnRleHQsIGFyZ3MpO1xuICAgICAgfSBlbHNlIGlmIChyZXNvbHZlT3JSZWplY3QgPT09IGZhbHNlKSB7XG4gICAgICAgIGRmZC5yZWplY3RXaXRoKGNvbnRleHQsIGFyZ3MpO1xuICAgICAgfVxuICAgICAgcHJvbWlzZS5hYm9ydCA9IGRmZC5wcm9taXNlO1xuICAgICAgcmV0dXJuIHRoaXMuX2VuaGFuY2VQcm9taXNlKHByb21pc2UpO1xuICAgIH0sXG5cbiAgICAvLyBBZGRzIGNvbnZlbmllbmNlIG1ldGhvZHMgdG8gdGhlIGRhdGEgY2FsbGJhY2sgYXJndW1lbnQ6XG4gICAgX2FkZENvbnZlbmllbmNlTWV0aG9kczogZnVuY3Rpb24gKGUsIGRhdGEpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcyxcbiAgICAgICAgZ2V0UHJvbWlzZSA9IGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgcmV0dXJuICQuRGVmZXJyZWQoKS5yZXNvbHZlV2l0aCh0aGF0LCBhcmdzKS5wcm9taXNlKCk7XG4gICAgICAgIH07XG4gICAgICBkYXRhLnByb2Nlc3MgPSBmdW5jdGlvbiAocmVzb2x2ZUZ1bmMsIHJlamVjdEZ1bmMpIHtcbiAgICAgICAgaWYgKHJlc29sdmVGdW5jIHx8IHJlamVjdEZ1bmMpIHtcbiAgICAgICAgICBkYXRhLl9wcm9jZXNzUXVldWUgPSB0aGlzLl9wcm9jZXNzUXVldWUgPSAodGhpcy5fcHJvY2Vzc1F1ZXVlIHx8XG4gICAgICAgICAgICBnZXRQcm9taXNlKFt0aGlzXSkpXG4gICAgICAgICAgICBbdGhhdC5fcHJvbWlzZVBpcGVdKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgaWYgKGRhdGEuZXJyb3JUaHJvd24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJC5EZWZlcnJlZCgpLnJlamVjdFdpdGgodGhhdCwgW2RhdGFdKS5wcm9taXNlKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGdldFByb21pc2UoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBbdGhhdC5fcHJvbWlzZVBpcGVdKHJlc29sdmVGdW5jLCByZWplY3RGdW5jKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc1F1ZXVlIHx8IGdldFByb21pc2UoW3RoaXNdKTtcbiAgICAgIH07XG4gICAgICBkYXRhLnN1Ym1pdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUoKSAhPT0gJ3BlbmRpbmcnKSB7XG4gICAgICAgICAgZGF0YS5qcVhIUiA9IHRoaXMuanFYSFIgPVxuICAgICAgICAgICAgdGhhdC5fdHJpZ2dlcihcbiAgICAgICAgICAgICAgJ3N1Ym1pdCcsXG4gICAgICAgICAgICAgICQuRXZlbnQoJ3N1Ym1pdCcsIHsgZGVsZWdhdGVkRXZlbnQ6IGUgfSksXG4gICAgICAgICAgICAgIHRoaXNcbiAgICAgICAgICAgICkgIT09IGZhbHNlICYmIHRoYXQuX29uU2VuZChlLCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5qcVhIUiB8fCB0aGF0Ll9nZXRYSFJQcm9taXNlKCk7XG4gICAgICB9O1xuICAgICAgZGF0YS5hYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuanFYSFIpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5qcVhIUi5hYm9ydCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZXJyb3JUaHJvd24gPSAnYWJvcnQnO1xuICAgICAgICB0aGF0Ll90cmlnZ2VyKCdmYWlsJywgbnVsbCwgdGhpcyk7XG4gICAgICAgIHJldHVybiB0aGF0Ll9nZXRYSFJQcm9taXNlKGZhbHNlKTtcbiAgICAgIH07XG4gICAgICBkYXRhLnN0YXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5qcVhIUikge1xuICAgICAgICAgIHJldHVybiB0aGF0Ll9nZXREZWZlcnJlZFN0YXRlKHRoaXMuanFYSFIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9wcm9jZXNzUXVldWUpIHtcbiAgICAgICAgICByZXR1cm4gdGhhdC5fZ2V0RGVmZXJyZWRTdGF0ZSh0aGlzLl9wcm9jZXNzUXVldWUpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgZGF0YS5wcm9jZXNzaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICF0aGlzLmpxWEhSICYmXG4gICAgICAgICAgdGhpcy5fcHJvY2Vzc1F1ZXVlICYmXG4gICAgICAgICAgdGhhdC5fZ2V0RGVmZXJyZWRTdGF0ZSh0aGlzLl9wcm9jZXNzUXVldWUpID09PSAncGVuZGluZydcbiAgICAgICAgKTtcbiAgICAgIH07XG4gICAgICBkYXRhLnByb2dyZXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJvZ3Jlc3M7XG4gICAgICB9O1xuICAgICAgZGF0YS5yZXNwb25zZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc3BvbnNlO1xuICAgICAgfTtcbiAgICB9LFxuXG4gICAgLy8gUGFyc2VzIHRoZSBSYW5nZSBoZWFkZXIgZnJvbSB0aGUgc2VydmVyIHJlc3BvbnNlXG4gICAgLy8gYW5kIHJldHVybnMgdGhlIHVwbG9hZGVkIGJ5dGVzOlxuICAgIF9nZXRVcGxvYWRlZEJ5dGVzOiBmdW5jdGlvbiAoanFYSFIpIHtcbiAgICAgIHZhciByYW5nZSA9IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCdSYW5nZScpLFxuICAgICAgICBwYXJ0cyA9IHJhbmdlICYmIHJhbmdlLnNwbGl0KCctJyksXG4gICAgICAgIHVwcGVyQnl0ZXNQb3MgPSBwYXJ0cyAmJiBwYXJ0cy5sZW5ndGggPiAxICYmIHBhcnNlSW50KHBhcnRzWzFdLCAxMCk7XG4gICAgICByZXR1cm4gdXBwZXJCeXRlc1BvcyAmJiB1cHBlckJ5dGVzUG9zICsgMTtcbiAgICB9LFxuXG4gICAgLy8gVXBsb2FkcyBhIGZpbGUgaW4gbXVsdGlwbGUsIHNlcXVlbnRpYWwgcmVxdWVzdHNcbiAgICAvLyBieSBzcGxpdHRpbmcgdGhlIGZpbGUgdXAgaW4gbXVsdGlwbGUgYmxvYiBjaHVua3MuXG4gICAgLy8gSWYgdGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgdHJ1ZSwgb25seSB0ZXN0cyBpZiB0aGUgZmlsZVxuICAgIC8vIHNob3VsZCBiZSB1cGxvYWRlZCBpbiBjaHVua3MsIGJ1dCBkb2VzIG5vdCBpbnZva2UgYW55XG4gICAgLy8gdXBsb2FkIHJlcXVlc3RzOlxuICAgIF9jaHVua2VkVXBsb2FkOiBmdW5jdGlvbiAob3B0aW9ucywgdGVzdE9ubHkpIHtcbiAgICAgIG9wdGlvbnMudXBsb2FkZWRCeXRlcyA9IG9wdGlvbnMudXBsb2FkZWRCeXRlcyB8fCAwO1xuICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICBmaWxlID0gb3B0aW9ucy5maWxlc1swXSxcbiAgICAgICAgZnMgPSBmaWxlLnNpemUsXG4gICAgICAgIHViID0gb3B0aW9ucy51cGxvYWRlZEJ5dGVzLFxuICAgICAgICBtY3MgPSBvcHRpb25zLm1heENodW5rU2l6ZSB8fCBmcyxcbiAgICAgICAgc2xpY2UgPSB0aGlzLl9ibG9iU2xpY2UsXG4gICAgICAgIGRmZCA9ICQuRGVmZXJyZWQoKSxcbiAgICAgICAgcHJvbWlzZSA9IGRmZC5wcm9taXNlKCksXG4gICAgICAgIGpxWEhSLFxuICAgICAgICB1cGxvYWQ7XG4gICAgICBpZiAoXG4gICAgICAgICEoXG4gICAgICAgICAgdGhpcy5faXNYSFJVcGxvYWQob3B0aW9ucykgJiZcbiAgICAgICAgICBzbGljZSAmJlxuICAgICAgICAgICh1YiB8fCAoJC50eXBlKG1jcykgPT09ICdmdW5jdGlvbicgPyBtY3Mob3B0aW9ucykgOiBtY3MpIDwgZnMpXG4gICAgICAgICkgfHxcbiAgICAgICAgb3B0aW9ucy5kYXRhXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKHRlc3RPbmx5KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHViID49IGZzKSB7XG4gICAgICAgIGZpbGUuZXJyb3IgPSBvcHRpb25zLmkxOG4oJ3VwbG9hZGVkQnl0ZXMnKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldFhIUlByb21pc2UoZmFsc2UsIG9wdGlvbnMuY29udGV4dCwgW1xuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICBmaWxlLmVycm9yXG4gICAgICAgIF0pO1xuICAgICAgfVxuICAgICAgLy8gVGhlIGNodW5rIHVwbG9hZCBtZXRob2Q6XG4gICAgICB1cGxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIENsb25lIHRoZSBvcHRpb25zIG9iamVjdCBmb3IgZWFjaCBjaHVuayB1cGxvYWQ6XG4gICAgICAgIHZhciBvID0gJC5leHRlbmQoe30sIG9wdGlvbnMpLFxuICAgICAgICAgIGN1cnJlbnRMb2FkZWQgPSBvLl9wcm9ncmVzcy5sb2FkZWQ7XG4gICAgICAgIG8uYmxvYiA9IHNsaWNlLmNhbGwoXG4gICAgICAgICAgZmlsZSxcbiAgICAgICAgICB1YixcbiAgICAgICAgICB1YiArICgkLnR5cGUobWNzKSA9PT0gJ2Z1bmN0aW9uJyA/IG1jcyhvKSA6IG1jcyksXG4gICAgICAgICAgZmlsZS50eXBlXG4gICAgICAgICk7XG4gICAgICAgIC8vIFN0b3JlIHRoZSBjdXJyZW50IGNodW5rIHNpemUsIGFzIHRoZSBibG9iIGl0c2VsZlxuICAgICAgICAvLyB3aWxsIGJlIGRlcmVmZXJlbmNlZCBhZnRlciBkYXRhIHByb2Nlc3Npbmc6XG4gICAgICAgIG8uY2h1bmtTaXplID0gby5ibG9iLnNpemU7XG4gICAgICAgIC8vIEV4cG9zZSB0aGUgY2h1bmsgYnl0ZXMgcG9zaXRpb24gcmFuZ2U6XG4gICAgICAgIG8uY29udGVudFJhbmdlID1cbiAgICAgICAgICAnYnl0ZXMgJyArIHViICsgJy0nICsgKHViICsgby5jaHVua1NpemUgLSAxKSArICcvJyArIGZzO1xuICAgICAgICAvLyBUcmlnZ2VyIGNodW5rYmVmb3Jlc2VuZCB0byBhbGxvdyBmb3JtIGRhdGEgdG8gYmUgdXBkYXRlZCBmb3IgdGhpcyBjaHVua1xuICAgICAgICB0aGF0Ll90cmlnZ2VyKCdjaHVua2JlZm9yZXNlbmQnLCBudWxsLCBvKTtcbiAgICAgICAgLy8gUHJvY2VzcyB0aGUgdXBsb2FkIGRhdGEgKHRoZSBibG9iIGFuZCBwb3RlbnRpYWwgZm9ybSBkYXRhKTpcbiAgICAgICAgdGhhdC5faW5pdFhIUkRhdGEobyk7XG4gICAgICAgIC8vIEFkZCBwcm9ncmVzcyBsaXN0ZW5lcnMgZm9yIHRoaXMgY2h1bmsgdXBsb2FkOlxuICAgICAgICB0aGF0Ll9pbml0UHJvZ3Jlc3NMaXN0ZW5lcihvKTtcbiAgICAgICAganFYSFIgPSAoXG4gICAgICAgICAgKHRoYXQuX3RyaWdnZXIoJ2NodW5rc2VuZCcsIG51bGwsIG8pICE9PSBmYWxzZSAmJiAkLmFqYXgobykpIHx8XG4gICAgICAgICAgdGhhdC5fZ2V0WEhSUHJvbWlzZShmYWxzZSwgby5jb250ZXh0KVxuICAgICAgICApXG4gICAgICAgICAgLmRvbmUoZnVuY3Rpb24gKHJlc3VsdCwgdGV4dFN0YXR1cywganFYSFIpIHtcbiAgICAgICAgICAgIHViID0gdGhhdC5fZ2V0VXBsb2FkZWRCeXRlcyhqcVhIUikgfHwgdWIgKyBvLmNodW5rU2l6ZTtcbiAgICAgICAgICAgIC8vIENyZWF0ZSBhIHByb2dyZXNzIGV2ZW50IGlmIG5vIGZpbmFsIHByb2dyZXNzIGV2ZW50XG4gICAgICAgICAgICAvLyB3aXRoIGxvYWRlZCBlcXVhbGluZyB0b3RhbCBoYXMgYmVlbiB0cmlnZ2VyZWRcbiAgICAgICAgICAgIC8vIGZvciB0aGlzIGNodW5rOlxuICAgICAgICAgICAgaWYgKGN1cnJlbnRMb2FkZWQgKyBvLmNodW5rU2l6ZSAtIG8uX3Byb2dyZXNzLmxvYWRlZCkge1xuICAgICAgICAgICAgICB0aGF0Ll9vblByb2dyZXNzKFxuICAgICAgICAgICAgICAgICQuRXZlbnQoJ3Byb2dyZXNzJywge1xuICAgICAgICAgICAgICAgICAgbGVuZ3RoQ29tcHV0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIGxvYWRlZDogdWIgLSBvLnVwbG9hZGVkQnl0ZXMsXG4gICAgICAgICAgICAgICAgICB0b3RhbDogdWIgLSBvLnVwbG9hZGVkQnl0ZXNcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBvXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcHRpb25zLnVwbG9hZGVkQnl0ZXMgPSBvLnVwbG9hZGVkQnl0ZXMgPSB1YjtcbiAgICAgICAgICAgIG8ucmVzdWx0ID0gcmVzdWx0O1xuICAgICAgICAgICAgby50ZXh0U3RhdHVzID0gdGV4dFN0YXR1cztcbiAgICAgICAgICAgIG8uanFYSFIgPSBqcVhIUjtcbiAgICAgICAgICAgIHRoYXQuX3RyaWdnZXIoJ2NodW5rZG9uZScsIG51bGwsIG8pO1xuICAgICAgICAgICAgdGhhdC5fdHJpZ2dlcignY2h1bmthbHdheXMnLCBudWxsLCBvKTtcbiAgICAgICAgICAgIGlmICh1YiA8IGZzKSB7XG4gICAgICAgICAgICAgIC8vIEZpbGUgdXBsb2FkIG5vdCB5ZXQgY29tcGxldGUsXG4gICAgICAgICAgICAgIC8vIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgY2h1bms6XG4gICAgICAgICAgICAgIHVwbG9hZCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZGZkLnJlc29sdmVXaXRoKG8uY29udGV4dCwgW3Jlc3VsdCwgdGV4dFN0YXR1cywganFYSFJdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICAgIC5mYWlsKGZ1bmN0aW9uIChqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24pIHtcbiAgICAgICAgICAgIG8uanFYSFIgPSBqcVhIUjtcbiAgICAgICAgICAgIG8udGV4dFN0YXR1cyA9IHRleHRTdGF0dXM7XG4gICAgICAgICAgICBvLmVycm9yVGhyb3duID0gZXJyb3JUaHJvd247XG4gICAgICAgICAgICB0aGF0Ll90cmlnZ2VyKCdjaHVua2ZhaWwnLCBudWxsLCBvKTtcbiAgICAgICAgICAgIHRoYXQuX3RyaWdnZXIoJ2NodW5rYWx3YXlzJywgbnVsbCwgbyk7XG4gICAgICAgICAgICBkZmQucmVqZWN0V2l0aChvLmNvbnRleHQsIFtqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd25dKTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5hbHdheXMoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhhdC5fZGVpbml0UHJvZ3Jlc3NMaXN0ZW5lcihvKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICB0aGlzLl9lbmhhbmNlUHJvbWlzZShwcm9taXNlKTtcbiAgICAgIHByb21pc2UuYWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBqcVhIUi5hYm9ydCgpO1xuICAgICAgfTtcbiAgICAgIHVwbG9hZCgpO1xuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfSxcblxuICAgIF9iZWZvcmVTZW5kOiBmdW5jdGlvbiAoZSwgZGF0YSkge1xuICAgICAgaWYgKHRoaXMuX2FjdGl2ZSA9PT0gMCkge1xuICAgICAgICAvLyB0aGUgc3RhcnQgY2FsbGJhY2sgaXMgdHJpZ2dlcmVkIHdoZW4gYW4gdXBsb2FkIHN0YXJ0c1xuICAgICAgICAvLyBhbmQgbm8gb3RoZXIgdXBsb2FkcyBhcmUgY3VycmVudGx5IHJ1bm5pbmcsXG4gICAgICAgIC8vIGVxdWl2YWxlbnQgdG8gdGhlIGdsb2JhbCBhamF4U3RhcnQgZXZlbnQ6XG4gICAgICAgIHRoaXMuX3RyaWdnZXIoJ3N0YXJ0Jyk7XG4gICAgICAgIC8vIFNldCB0aW1lciBmb3IgZ2xvYmFsIGJpdHJhdGUgcHJvZ3Jlc3MgY2FsY3VsYXRpb246XG4gICAgICAgIHRoaXMuX2JpdHJhdGVUaW1lciA9IG5ldyB0aGlzLl9CaXRyYXRlVGltZXIoKTtcbiAgICAgICAgLy8gUmVzZXQgdGhlIGdsb2JhbCBwcm9ncmVzcyB2YWx1ZXM6XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzLmxvYWRlZCA9IHRoaXMuX3Byb2dyZXNzLnRvdGFsID0gMDtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MuYml0cmF0ZSA9IDA7XG4gICAgICB9XG4gICAgICAvLyBNYWtlIHN1cmUgdGhlIGNvbnRhaW5lciBvYmplY3RzIGZvciB0aGUgLnJlc3BvbnNlKCkgYW5kXG4gICAgICAvLyAucHJvZ3Jlc3MoKSBtZXRob2RzIG9uIHRoZSBkYXRhIG9iamVjdCBhcmUgYXZhaWxhYmxlXG4gICAgICAvLyBhbmQgcmVzZXQgdG8gdGhlaXIgaW5pdGlhbCBzdGF0ZTpcbiAgICAgIHRoaXMuX2luaXRSZXNwb25zZU9iamVjdChkYXRhKTtcbiAgICAgIHRoaXMuX2luaXRQcm9ncmVzc09iamVjdChkYXRhKTtcbiAgICAgIGRhdGEuX3Byb2dyZXNzLmxvYWRlZCA9IGRhdGEubG9hZGVkID0gZGF0YS51cGxvYWRlZEJ5dGVzIHx8IDA7XG4gICAgICBkYXRhLl9wcm9ncmVzcy50b3RhbCA9IGRhdGEudG90YWwgPSB0aGlzLl9nZXRUb3RhbChkYXRhLmZpbGVzKSB8fCAxO1xuICAgICAgZGF0YS5fcHJvZ3Jlc3MuYml0cmF0ZSA9IGRhdGEuYml0cmF0ZSA9IDA7XG4gICAgICB0aGlzLl9hY3RpdmUgKz0gMTtcbiAgICAgIC8vIEluaXRpYWxpemUgdGhlIGdsb2JhbCBwcm9ncmVzcyB2YWx1ZXM6XG4gICAgICB0aGlzLl9wcm9ncmVzcy5sb2FkZWQgKz0gZGF0YS5sb2FkZWQ7XG4gICAgICB0aGlzLl9wcm9ncmVzcy50b3RhbCArPSBkYXRhLnRvdGFsO1xuICAgIH0sXG5cbiAgICBfb25Eb25lOiBmdW5jdGlvbiAocmVzdWx0LCB0ZXh0U3RhdHVzLCBqcVhIUiwgb3B0aW9ucykge1xuICAgICAgdmFyIHRvdGFsID0gb3B0aW9ucy5fcHJvZ3Jlc3MudG90YWwsXG4gICAgICAgIHJlc3BvbnNlID0gb3B0aW9ucy5fcmVzcG9uc2U7XG4gICAgICBpZiAob3B0aW9ucy5fcHJvZ3Jlc3MubG9hZGVkIDwgdG90YWwpIHtcbiAgICAgICAgLy8gQ3JlYXRlIGEgcHJvZ3Jlc3MgZXZlbnQgaWYgbm8gZmluYWwgcHJvZ3Jlc3MgZXZlbnRcbiAgICAgICAgLy8gd2l0aCBsb2FkZWQgZXF1YWxpbmcgdG90YWwgaGFzIGJlZW4gdHJpZ2dlcmVkOlxuICAgICAgICB0aGlzLl9vblByb2dyZXNzKFxuICAgICAgICAgICQuRXZlbnQoJ3Byb2dyZXNzJywge1xuICAgICAgICAgICAgbGVuZ3RoQ29tcHV0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGxvYWRlZDogdG90YWwsXG4gICAgICAgICAgICB0b3RhbDogdG90YWxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBvcHRpb25zXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXNwb25zZS5yZXN1bHQgPSBvcHRpb25zLnJlc3VsdCA9IHJlc3VsdDtcbiAgICAgIHJlc3BvbnNlLnRleHRTdGF0dXMgPSBvcHRpb25zLnRleHRTdGF0dXMgPSB0ZXh0U3RhdHVzO1xuICAgICAgcmVzcG9uc2UuanFYSFIgPSBvcHRpb25zLmpxWEhSID0ganFYSFI7XG4gICAgICB0aGlzLl90cmlnZ2VyKCdkb25lJywgbnVsbCwgb3B0aW9ucyk7XG4gICAgfSxcblxuICAgIF9vbkZhaWw6IGZ1bmN0aW9uIChqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24sIG9wdGlvbnMpIHtcbiAgICAgIHZhciByZXNwb25zZSA9IG9wdGlvbnMuX3Jlc3BvbnNlO1xuICAgICAgaWYgKG9wdGlvbnMucmVjYWxjdWxhdGVQcm9ncmVzcykge1xuICAgICAgICAvLyBSZW1vdmUgdGhlIGZhaWxlZCAoZXJyb3Igb3IgYWJvcnQpIGZpbGUgdXBsb2FkIGZyb21cbiAgICAgICAgLy8gdGhlIGdsb2JhbCBwcm9ncmVzcyBjYWxjdWxhdGlvbjpcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MubG9hZGVkIC09IG9wdGlvbnMuX3Byb2dyZXNzLmxvYWRlZDtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MudG90YWwgLT0gb3B0aW9ucy5fcHJvZ3Jlc3MudG90YWw7XG4gICAgICB9XG4gICAgICByZXNwb25zZS5qcVhIUiA9IG9wdGlvbnMuanFYSFIgPSBqcVhIUjtcbiAgICAgIHJlc3BvbnNlLnRleHRTdGF0dXMgPSBvcHRpb25zLnRleHRTdGF0dXMgPSB0ZXh0U3RhdHVzO1xuICAgICAgcmVzcG9uc2UuZXJyb3JUaHJvd24gPSBvcHRpb25zLmVycm9yVGhyb3duID0gZXJyb3JUaHJvd247XG4gICAgICB0aGlzLl90cmlnZ2VyKCdmYWlsJywgbnVsbCwgb3B0aW9ucyk7XG4gICAgfSxcblxuICAgIF9vbkFsd2F5czogZnVuY3Rpb24gKGpxWEhSb3JSZXN1bHQsIHRleHRTdGF0dXMsIGpxWEhSb3JFcnJvciwgb3B0aW9ucykge1xuICAgICAgLy8ganFYSFJvclJlc3VsdCwgdGV4dFN0YXR1cyBhbmQganFYSFJvckVycm9yIGFyZSBhZGRlZCB0byB0aGVcbiAgICAgIC8vIG9wdGlvbnMgb2JqZWN0IHZpYSBkb25lIGFuZCBmYWlsIGNhbGxiYWNrc1xuICAgICAgdGhpcy5fdHJpZ2dlcignYWx3YXlzJywgbnVsbCwgb3B0aW9ucyk7XG4gICAgfSxcblxuICAgIF9vblNlbmQ6IGZ1bmN0aW9uIChlLCBkYXRhKSB7XG4gICAgICBpZiAoIWRhdGEuc3VibWl0KSB7XG4gICAgICAgIHRoaXMuX2FkZENvbnZlbmllbmNlTWV0aG9kcyhlLCBkYXRhKTtcbiAgICAgIH1cbiAgICAgIHZhciB0aGF0ID0gdGhpcyxcbiAgICAgICAganFYSFIsXG4gICAgICAgIGFib3J0ZWQsXG4gICAgICAgIHNsb3QsXG4gICAgICAgIHBpcGUsXG4gICAgICAgIG9wdGlvbnMgPSB0aGF0Ll9nZXRBSkFYU2V0dGluZ3MoZGF0YSksXG4gICAgICAgIHNlbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdGhhdC5fc2VuZGluZyArPSAxO1xuICAgICAgICAgIC8vIFNldCB0aW1lciBmb3IgYml0cmF0ZSBwcm9ncmVzcyBjYWxjdWxhdGlvbjpcbiAgICAgICAgICBvcHRpb25zLl9iaXRyYXRlVGltZXIgPSBuZXcgdGhhdC5fQml0cmF0ZVRpbWVyKCk7XG4gICAgICAgICAganFYSFIgPVxuICAgICAgICAgICAganFYSFIgfHxcbiAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgKChhYm9ydGVkIHx8XG4gICAgICAgICAgICAgICAgdGhhdC5fdHJpZ2dlcihcbiAgICAgICAgICAgICAgICAgICdzZW5kJyxcbiAgICAgICAgICAgICAgICAgICQuRXZlbnQoJ3NlbmQnLCB7IGRlbGVnYXRlZEV2ZW50OiBlIH0pLFxuICAgICAgICAgICAgICAgICAgb3B0aW9uc1xuICAgICAgICAgICAgICAgICkgPT09IGZhbHNlKSAmJlxuICAgICAgICAgICAgICAgIHRoYXQuX2dldFhIUlByb21pc2UoZmFsc2UsIG9wdGlvbnMuY29udGV4dCwgYWJvcnRlZCkpIHx8XG4gICAgICAgICAgICAgIHRoYXQuX2NodW5rZWRVcGxvYWQob3B0aW9ucykgfHxcbiAgICAgICAgICAgICAgJC5hamF4KG9wdGlvbnMpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5kb25lKGZ1bmN0aW9uIChyZXN1bHQsIHRleHRTdGF0dXMsIGpxWEhSKSB7XG4gICAgICAgICAgICAgICAgdGhhdC5fb25Eb25lKHJlc3VsdCwgdGV4dFN0YXR1cywganFYSFIsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuZmFpbChmdW5jdGlvbiAoanFYSFIsIHRleHRTdGF0dXMsIGVycm9yVGhyb3duKSB7XG4gICAgICAgICAgICAgICAgdGhhdC5fb25GYWlsKGpxWEhSLCB0ZXh0U3RhdHVzLCBlcnJvclRocm93biwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5hbHdheXMoZnVuY3Rpb24gKGpxWEhSb3JSZXN1bHQsIHRleHRTdGF0dXMsIGpxWEhSb3JFcnJvcikge1xuICAgICAgICAgICAgICAgIHRoYXQuX2RlaW5pdFByb2dyZXNzTGlzdGVuZXIob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgdGhhdC5fb25BbHdheXMoXG4gICAgICAgICAgICAgICAgICBqcVhIUm9yUmVzdWx0LFxuICAgICAgICAgICAgICAgICAgdGV4dFN0YXR1cyxcbiAgICAgICAgICAgICAgICAgIGpxWEhSb3JFcnJvcixcbiAgICAgICAgICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoYXQuX3NlbmRpbmcgLT0gMTtcbiAgICAgICAgICAgICAgICB0aGF0Ll9hY3RpdmUgLT0gMTtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICBvcHRpb25zLmxpbWl0Q29uY3VycmVudFVwbG9hZHMgJiZcbiAgICAgICAgICAgICAgICAgIG9wdGlvbnMubGltaXRDb25jdXJyZW50VXBsb2FkcyA+IHRoYXQuX3NlbmRpbmdcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIC8vIFN0YXJ0IHRoZSBuZXh0IHF1ZXVlZCB1cGxvYWQsXG4gICAgICAgICAgICAgICAgICAvLyB0aGF0IGhhcyBub3QgYmVlbiBhYm9ydGVkOlxuICAgICAgICAgICAgICAgICAgdmFyIG5leHRTbG90ID0gdGhhdC5fc2xvdHMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgIHdoaWxlIChuZXh0U2xvdCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhhdC5fZ2V0RGVmZXJyZWRTdGF0ZShuZXh0U2xvdCkgPT09ICdwZW5kaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgIG5leHRTbG90LnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBuZXh0U2xvdCA9IHRoYXQuX3Nsb3RzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGF0Ll9hY3RpdmUgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgIC8vIFRoZSBzdG9wIGNhbGxiYWNrIGlzIHRyaWdnZXJlZCB3aGVuIGFsbCB1cGxvYWRzIGhhdmVcbiAgICAgICAgICAgICAgICAgIC8vIGJlZW4gY29tcGxldGVkLCBlcXVpdmFsZW50IHRvIHRoZSBnbG9iYWwgYWpheFN0b3AgZXZlbnQ6XG4gICAgICAgICAgICAgICAgICB0aGF0Ll90cmlnZ2VyKCdzdG9wJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4ganFYSFI7XG4gICAgICAgIH07XG4gICAgICB0aGlzLl9iZWZvcmVTZW5kKGUsIG9wdGlvbnMpO1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLm9wdGlvbnMuc2VxdWVudGlhbFVwbG9hZHMgfHxcbiAgICAgICAgKHRoaXMub3B0aW9ucy5saW1pdENvbmN1cnJlbnRVcGxvYWRzICYmXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmxpbWl0Q29uY3VycmVudFVwbG9hZHMgPD0gdGhpcy5fc2VuZGluZylcbiAgICAgICkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxpbWl0Q29uY3VycmVudFVwbG9hZHMgPiAxKSB7XG4gICAgICAgICAgc2xvdCA9ICQuRGVmZXJyZWQoKTtcbiAgICAgICAgICB0aGlzLl9zbG90cy5wdXNoKHNsb3QpO1xuICAgICAgICAgIHBpcGUgPSBzbG90W3RoYXQuX3Byb21pc2VQaXBlXShzZW5kKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9zZXF1ZW5jZSA9IHRoaXMuX3NlcXVlbmNlW3RoYXQuX3Byb21pc2VQaXBlXShzZW5kLCBzZW5kKTtcbiAgICAgICAgICBwaXBlID0gdGhpcy5fc2VxdWVuY2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUmV0dXJuIHRoZSBwaXBlZCBQcm9taXNlIG9iamVjdCwgZW5oYW5jZWQgd2l0aCBhbiBhYm9ydCBtZXRob2QsXG4gICAgICAgIC8vIHdoaWNoIGlzIGRlbGVnYXRlZCB0byB0aGUganFYSFIgb2JqZWN0IG9mIHRoZSBjdXJyZW50IHVwbG9hZCxcbiAgICAgICAgLy8gYW5kIGpxWEhSIGNhbGxiYWNrcyBtYXBwZWQgdG8gdGhlIGVxdWl2YWxlbnQgUHJvbWlzZSBtZXRob2RzOlxuICAgICAgICBwaXBlLmFib3J0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGFib3J0ZWQgPSBbdW5kZWZpbmVkLCAnYWJvcnQnLCAnYWJvcnQnXTtcbiAgICAgICAgICBpZiAoIWpxWEhSKSB7XG4gICAgICAgICAgICBpZiAoc2xvdCkge1xuICAgICAgICAgICAgICBzbG90LnJlamVjdFdpdGgob3B0aW9ucy5jb250ZXh0LCBhYm9ydGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzZW5kKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBqcVhIUi5hYm9ydCgpO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5oYW5jZVByb21pc2UocGlwZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2VuZCgpO1xuICAgIH0sXG5cbiAgICBfb25BZGQ6IGZ1bmN0aW9uIChlLCBkYXRhKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXMsXG4gICAgICAgIHJlc3VsdCA9IHRydWUsXG4gICAgICAgIG9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgdGhpcy5vcHRpb25zLCBkYXRhKSxcbiAgICAgICAgZmlsZXMgPSBkYXRhLmZpbGVzLFxuICAgICAgICBmaWxlc0xlbmd0aCA9IGZpbGVzLmxlbmd0aCxcbiAgICAgICAgbGltaXQgPSBvcHRpb25zLmxpbWl0TXVsdGlGaWxlVXBsb2FkcyxcbiAgICAgICAgbGltaXRTaXplID0gb3B0aW9ucy5saW1pdE11bHRpRmlsZVVwbG9hZFNpemUsXG4gICAgICAgIG92ZXJoZWFkID0gb3B0aW9ucy5saW1pdE11bHRpRmlsZVVwbG9hZFNpemVPdmVyaGVhZCxcbiAgICAgICAgYmF0Y2hTaXplID0gMCxcbiAgICAgICAgcGFyYW1OYW1lID0gdGhpcy5fZ2V0UGFyYW1OYW1lKG9wdGlvbnMpLFxuICAgICAgICBwYXJhbU5hbWVTZXQsXG4gICAgICAgIHBhcmFtTmFtZVNsaWNlLFxuICAgICAgICBmaWxlU2V0LFxuICAgICAgICBpLFxuICAgICAgICBqID0gMDtcbiAgICAgIGlmICghZmlsZXNMZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKGxpbWl0U2l6ZSAmJiBmaWxlc1swXS5zaXplID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGltaXRTaXplID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICAhKG9wdGlvbnMuc2luZ2xlRmlsZVVwbG9hZHMgfHwgbGltaXQgfHwgbGltaXRTaXplKSB8fFxuICAgICAgICAhdGhpcy5faXNYSFJVcGxvYWQob3B0aW9ucylcbiAgICAgICkge1xuICAgICAgICBmaWxlU2V0ID0gW2ZpbGVzXTtcbiAgICAgICAgcGFyYW1OYW1lU2V0ID0gW3BhcmFtTmFtZV07XG4gICAgICB9IGVsc2UgaWYgKCEob3B0aW9ucy5zaW5nbGVGaWxlVXBsb2FkcyB8fCBsaW1pdFNpemUpICYmIGxpbWl0KSB7XG4gICAgICAgIGZpbGVTZXQgPSBbXTtcbiAgICAgICAgcGFyYW1OYW1lU2V0ID0gW107XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBmaWxlc0xlbmd0aDsgaSArPSBsaW1pdCkge1xuICAgICAgICAgIGZpbGVTZXQucHVzaChmaWxlcy5zbGljZShpLCBpICsgbGltaXQpKTtcbiAgICAgICAgICBwYXJhbU5hbWVTbGljZSA9IHBhcmFtTmFtZS5zbGljZShpLCBpICsgbGltaXQpO1xuICAgICAgICAgIGlmICghcGFyYW1OYW1lU2xpY2UubGVuZ3RoKSB7XG4gICAgICAgICAgICBwYXJhbU5hbWVTbGljZSA9IHBhcmFtTmFtZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcGFyYW1OYW1lU2V0LnB1c2gocGFyYW1OYW1lU2xpY2UpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFvcHRpb25zLnNpbmdsZUZpbGVVcGxvYWRzICYmIGxpbWl0U2l6ZSkge1xuICAgICAgICBmaWxlU2V0ID0gW107XG4gICAgICAgIHBhcmFtTmFtZVNldCA9IFtdO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZmlsZXNMZW5ndGg7IGkgPSBpICsgMSkge1xuICAgICAgICAgIGJhdGNoU2l6ZSArPSBmaWxlc1tpXS5zaXplICsgb3ZlcmhlYWQ7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgaSArIDEgPT09IGZpbGVzTGVuZ3RoIHx8XG4gICAgICAgICAgICBiYXRjaFNpemUgKyBmaWxlc1tpICsgMV0uc2l6ZSArIG92ZXJoZWFkID4gbGltaXRTaXplIHx8XG4gICAgICAgICAgICAobGltaXQgJiYgaSArIDEgLSBqID49IGxpbWl0KVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgZmlsZVNldC5wdXNoKGZpbGVzLnNsaWNlKGosIGkgKyAxKSk7XG4gICAgICAgICAgICBwYXJhbU5hbWVTbGljZSA9IHBhcmFtTmFtZS5zbGljZShqLCBpICsgMSk7XG4gICAgICAgICAgICBpZiAoIXBhcmFtTmFtZVNsaWNlLmxlbmd0aCkge1xuICAgICAgICAgICAgICBwYXJhbU5hbWVTbGljZSA9IHBhcmFtTmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcmFtTmFtZVNldC5wdXNoKHBhcmFtTmFtZVNsaWNlKTtcbiAgICAgICAgICAgIGogPSBpICsgMTtcbiAgICAgICAgICAgIGJhdGNoU2l6ZSA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJhbU5hbWVTZXQgPSBwYXJhbU5hbWU7XG4gICAgICB9XG4gICAgICBkYXRhLm9yaWdpbmFsRmlsZXMgPSBmaWxlcztcbiAgICAgICQuZWFjaChmaWxlU2V0IHx8IGZpbGVzLCBmdW5jdGlvbiAoaW5kZXgsIGVsZW1lbnQpIHtcbiAgICAgICAgdmFyIG5ld0RhdGEgPSAkLmV4dGVuZCh7fSwgZGF0YSk7XG4gICAgICAgIG5ld0RhdGEuZmlsZXMgPSBmaWxlU2V0ID8gZWxlbWVudCA6IFtlbGVtZW50XTtcbiAgICAgICAgbmV3RGF0YS5wYXJhbU5hbWUgPSBwYXJhbU5hbWVTZXRbaW5kZXhdO1xuICAgICAgICB0aGF0Ll9pbml0UmVzcG9uc2VPYmplY3QobmV3RGF0YSk7XG4gICAgICAgIHRoYXQuX2luaXRQcm9ncmVzc09iamVjdChuZXdEYXRhKTtcbiAgICAgICAgdGhhdC5fYWRkQ29udmVuaWVuY2VNZXRob2RzKGUsIG5ld0RhdGEpO1xuICAgICAgICByZXN1bHQgPSB0aGF0Ll90cmlnZ2VyKFxuICAgICAgICAgICdhZGQnLFxuICAgICAgICAgICQuRXZlbnQoJ2FkZCcsIHsgZGVsZWdhdGVkRXZlbnQ6IGUgfSksXG4gICAgICAgICAgbmV3RGF0YVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBfcmVwbGFjZUZpbGVJbnB1dDogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgIHZhciBpbnB1dCA9IGRhdGEuZmlsZUlucHV0LFxuICAgICAgICBpbnB1dENsb25lID0gaW5wdXQuY2xvbmUodHJ1ZSksXG4gICAgICAgIHJlc3RvcmVGb2N1cyA9IGlucHV0LmlzKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO1xuICAgICAgLy8gQWRkIGEgcmVmZXJlbmNlIGZvciB0aGUgbmV3IGNsb25lZCBmaWxlIGlucHV0IHRvIHRoZSBkYXRhIGFyZ3VtZW50OlxuICAgICAgZGF0YS5maWxlSW5wdXRDbG9uZSA9IGlucHV0Q2xvbmU7XG4gICAgICAkKCc8Zm9ybT48L2Zvcm0+JykuYXBwZW5kKGlucHV0Q2xvbmUpWzBdLnJlc2V0KCk7XG4gICAgICAvLyBEZXRhY2hpbmcgYWxsb3dzIHRvIGluc2VydCB0aGUgZmlsZUlucHV0IG9uIGFub3RoZXIgZm9ybVxuICAgICAgLy8gd2l0aG91dCBsb3NpbmcgdGhlIGZpbGUgaW5wdXQgdmFsdWU6XG4gICAgICBpbnB1dC5hZnRlcihpbnB1dENsb25lKS5kZXRhY2goKTtcbiAgICAgIC8vIElmIHRoZSBmaWxlSW5wdXQgaGFkIGZvY3VzIGJlZm9yZSBpdCB3YXMgZGV0YWNoZWQsXG4gICAgICAvLyByZXN0b3JlIGZvY3VzIHRvIHRoZSBpbnB1dENsb25lLlxuICAgICAgaWYgKHJlc3RvcmVGb2N1cykge1xuICAgICAgICBpbnB1dENsb25lLnRyaWdnZXIoJ2ZvY3VzJyk7XG4gICAgICB9XG4gICAgICAvLyBBdm9pZCBtZW1vcnkgbGVha3Mgd2l0aCB0aGUgZGV0YWNoZWQgZmlsZSBpbnB1dDpcbiAgICAgICQuY2xlYW5EYXRhKGlucHV0Lm9mZigncmVtb3ZlJykpO1xuICAgICAgLy8gUmVwbGFjZSB0aGUgb3JpZ2luYWwgZmlsZSBpbnB1dCBlbGVtZW50IGluIHRoZSBmaWxlSW5wdXRcbiAgICAgIC8vIGVsZW1lbnRzIHNldCB3aXRoIHRoZSBjbG9uZSwgd2hpY2ggaGFzIGJlZW4gY29waWVkIGluY2x1ZGluZ1xuICAgICAgLy8gZXZlbnQgaGFuZGxlcnM6XG4gICAgICB0aGlzLm9wdGlvbnMuZmlsZUlucHV0ID0gdGhpcy5vcHRpb25zLmZpbGVJbnB1dC5tYXAoZnVuY3Rpb24gKGksIGVsKSB7XG4gICAgICAgIGlmIChlbCA9PT0gaW5wdXRbMF0pIHtcbiAgICAgICAgICByZXR1cm4gaW5wdXRDbG9uZVswXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZWw7XG4gICAgICB9KTtcbiAgICAgIC8vIElmIHRoZSB3aWRnZXQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgb24gdGhlIGZpbGUgaW5wdXQgaXRzZWxmLFxuICAgICAgLy8gb3ZlcnJpZGUgdGhpcy5lbGVtZW50IHdpdGggdGhlIGZpbGUgaW5wdXQgY2xvbmU6XG4gICAgICBpZiAoaW5wdXRbMF0gPT09IHRoaXMuZWxlbWVudFswXSkge1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSBpbnB1dENsb25lO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBfaGFuZGxlRmlsZVRyZWVFbnRyeTogZnVuY3Rpb24gKGVudHJ5LCBwYXRoKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXMsXG4gICAgICAgIGRmZCA9ICQuRGVmZXJyZWQoKSxcbiAgICAgICAgZW50cmllcyA9IFtdLFxuICAgICAgICBkaXJSZWFkZXIsXG4gICAgICAgIGVycm9ySGFuZGxlciA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgaWYgKGUgJiYgIWUuZW50cnkpIHtcbiAgICAgICAgICAgIGUuZW50cnkgPSBlbnRyeTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gU2luY2UgJC53aGVuIHJldHVybnMgaW1tZWRpYXRlbHkgaWYgb25lXG4gICAgICAgICAgLy8gRGVmZXJyZWQgaXMgcmVqZWN0ZWQsIHdlIHVzZSByZXNvbHZlIGluc3RlYWQuXG4gICAgICAgICAgLy8gVGhpcyBhbGxvd3MgdmFsaWQgZmlsZXMgYW5kIGludmFsaWQgaXRlbXNcbiAgICAgICAgICAvLyB0byBiZSByZXR1cm5lZCB0b2dldGhlciBpbiBvbmUgc2V0OlxuICAgICAgICAgIGRmZC5yZXNvbHZlKFtlXSk7XG4gICAgICAgIH0sXG4gICAgICAgIHN1Y2Nlc3NIYW5kbGVyID0gZnVuY3Rpb24gKGVudHJpZXMpIHtcbiAgICAgICAgICB0aGF0XG4gICAgICAgICAgICAuX2hhbmRsZUZpbGVUcmVlRW50cmllcyhlbnRyaWVzLCBwYXRoICsgZW50cnkubmFtZSArICcvJylcbiAgICAgICAgICAgIC5kb25lKGZ1bmN0aW9uIChmaWxlcykge1xuICAgICAgICAgICAgICBkZmQucmVzb2x2ZShmaWxlcyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmZhaWwoZXJyb3JIYW5kbGVyKTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVhZEVudHJpZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZGlyUmVhZGVyLnJlYWRFbnRyaWVzKGZ1bmN0aW9uIChyZXN1bHRzKSB7XG4gICAgICAgICAgICBpZiAoIXJlc3VsdHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3NIYW5kbGVyKGVudHJpZXMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZW50cmllcyA9IGVudHJpZXMuY29uY2F0KHJlc3VsdHMpO1xuICAgICAgICAgICAgICByZWFkRW50cmllcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIGVycm9ySGFuZGxlcik7XG4gICAgICAgIH07XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgIHBhdGggPSBwYXRoIHx8ICcnO1xuICAgICAgaWYgKGVudHJ5LmlzRmlsZSkge1xuICAgICAgICBpZiAoZW50cnkuX2ZpbGUpIHtcbiAgICAgICAgICAvLyBXb3JrYXJvdW5kIGZvciBDaHJvbWUgYnVnICMxNDk3MzVcbiAgICAgICAgICBlbnRyeS5fZmlsZS5yZWxhdGl2ZVBhdGggPSBwYXRoO1xuICAgICAgICAgIGRmZC5yZXNvbHZlKGVudHJ5Ll9maWxlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbnRyeS5maWxlKGZ1bmN0aW9uIChmaWxlKSB7XG4gICAgICAgICAgICBmaWxlLnJlbGF0aXZlUGF0aCA9IHBhdGg7XG4gICAgICAgICAgICBkZmQucmVzb2x2ZShmaWxlKTtcbiAgICAgICAgICB9LCBlcnJvckhhbmRsZXIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGVudHJ5LmlzRGlyZWN0b3J5KSB7XG4gICAgICAgIGRpclJlYWRlciA9IGVudHJ5LmNyZWF0ZVJlYWRlcigpO1xuICAgICAgICByZWFkRW50cmllcygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmV0dXJuIGFuIGVtcHR5IGxpc3QgZm9yIGZpbGUgc3lzdGVtIGl0ZW1zXG4gICAgICAgIC8vIG90aGVyIHRoYW4gZmlsZXMgb3IgZGlyZWN0b3JpZXM6XG4gICAgICAgIGRmZC5yZXNvbHZlKFtdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkZmQucHJvbWlzZSgpO1xuICAgIH0sXG5cbiAgICBfaGFuZGxlRmlsZVRyZWVFbnRyaWVzOiBmdW5jdGlvbiAoZW50cmllcywgcGF0aCkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgcmV0dXJuICQud2hlblxuICAgICAgICAuYXBwbHkoXG4gICAgICAgICAgJCxcbiAgICAgICAgICAkLm1hcChlbnRyaWVzLCBmdW5jdGlvbiAoZW50cnkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGF0Ll9oYW5kbGVGaWxlVHJlZUVudHJ5KGVudHJ5LCBwYXRoKTtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIFt0aGlzLl9wcm9taXNlUGlwZV0oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLCBhcmd1bWVudHMpO1xuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgX2dldERyb3BwZWRGaWxlczogZnVuY3Rpb24gKGRhdGFUcmFuc2Zlcikge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICBkYXRhVHJhbnNmZXIgPSBkYXRhVHJhbnNmZXIgfHwge307XG4gICAgICB2YXIgaXRlbXMgPSBkYXRhVHJhbnNmZXIuaXRlbXM7XG4gICAgICBpZiAoXG4gICAgICAgIGl0ZW1zICYmXG4gICAgICAgIGl0ZW1zLmxlbmd0aCAmJlxuICAgICAgICAoaXRlbXNbMF0ud2Via2l0R2V0QXNFbnRyeSB8fCBpdGVtc1swXS5nZXRBc0VudHJ5KVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYW5kbGVGaWxlVHJlZUVudHJpZXMoXG4gICAgICAgICAgJC5tYXAoaXRlbXMsIGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICB2YXIgZW50cnk7XG4gICAgICAgICAgICBpZiAoaXRlbS53ZWJraXRHZXRBc0VudHJ5KSB7XG4gICAgICAgICAgICAgIGVudHJ5ID0gaXRlbS53ZWJraXRHZXRBc0VudHJ5KCk7XG4gICAgICAgICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgICAgIC8vIFdvcmthcm91bmQgZm9yIENocm9tZSBidWcgIzE0OTczNTpcbiAgICAgICAgICAgICAgICBlbnRyeS5fZmlsZSA9IGl0ZW0uZ2V0QXNGaWxlKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZ2V0QXNFbnRyeSgpO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gJC5EZWZlcnJlZCgpLnJlc29sdmUoJC5tYWtlQXJyYXkoZGF0YVRyYW5zZmVyLmZpbGVzKSkucHJvbWlzZSgpO1xuICAgIH0sXG5cbiAgICBfZ2V0U2luZ2xlRmlsZUlucHV0RmlsZXM6IGZ1bmN0aW9uIChmaWxlSW5wdXQpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgZmlsZUlucHV0ID0gJChmaWxlSW5wdXQpO1xuICAgICAgdmFyIGVudHJpZXMgPSBmaWxlSW5wdXQucHJvcCgnZW50cmllcycpLFxuICAgICAgICBmaWxlcyxcbiAgICAgICAgdmFsdWU7XG4gICAgICBpZiAoZW50cmllcyAmJiBlbnRyaWVzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFuZGxlRmlsZVRyZWVFbnRyaWVzKGVudHJpZXMpO1xuICAgICAgfVxuICAgICAgZmlsZXMgPSAkLm1ha2VBcnJheShmaWxlSW5wdXQucHJvcCgnZmlsZXMnKSk7XG4gICAgICBpZiAoIWZpbGVzLmxlbmd0aCkge1xuICAgICAgICB2YWx1ZSA9IGZpbGVJbnB1dC5wcm9wKCd2YWx1ZScpO1xuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuICQuRGVmZXJyZWQoKS5yZXNvbHZlKFtdKS5wcm9taXNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgdGhlIGZpbGVzIHByb3BlcnR5IGlzIG5vdCBhdmFpbGFibGUsIHRoZSBicm93c2VyIGRvZXMgbm90XG4gICAgICAgIC8vIHN1cHBvcnQgdGhlIEZpbGUgQVBJIGFuZCB3ZSBhZGQgYSBwc2V1ZG8gRmlsZSBvYmplY3Qgd2l0aFxuICAgICAgICAvLyB0aGUgaW5wdXQgdmFsdWUgYXMgbmFtZSB3aXRoIHBhdGggaW5mb3JtYXRpb24gcmVtb3ZlZDpcbiAgICAgICAgZmlsZXMgPSBbeyBuYW1lOiB2YWx1ZS5yZXBsYWNlKC9eLipcXFxcLywgJycpIH1dO1xuICAgICAgfSBlbHNlIGlmIChmaWxlc1swXS5uYW1lID09PSB1bmRlZmluZWQgJiYgZmlsZXNbMF0uZmlsZU5hbWUpIHtcbiAgICAgICAgLy8gRmlsZSBub3JtYWxpemF0aW9uIGZvciBTYWZhcmkgNCBhbmQgRmlyZWZveCAzOlxuICAgICAgICAkLmVhY2goZmlsZXMsIGZ1bmN0aW9uIChpbmRleCwgZmlsZSkge1xuICAgICAgICAgIGZpbGUubmFtZSA9IGZpbGUuZmlsZU5hbWU7XG4gICAgICAgICAgZmlsZS5zaXplID0gZmlsZS5maWxlU2l6ZTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gJC5EZWZlcnJlZCgpLnJlc29sdmUoZmlsZXMpLnByb21pc2UoKTtcbiAgICB9LFxuXG4gICAgX2dldEZpbGVJbnB1dEZpbGVzOiBmdW5jdGlvbiAoZmlsZUlucHV0KSB7XG4gICAgICBpZiAoIShmaWxlSW5wdXQgaW5zdGFuY2VvZiAkKSB8fCBmaWxlSW5wdXQubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRTaW5nbGVGaWxlSW5wdXRGaWxlcyhmaWxlSW5wdXQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuICQud2hlblxuICAgICAgICAuYXBwbHkoJCwgJC5tYXAoZmlsZUlucHV0LCB0aGlzLl9nZXRTaW5nbGVGaWxlSW5wdXRGaWxlcykpXG4gICAgICAgIFt0aGlzLl9wcm9taXNlUGlwZV0oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLCBhcmd1bWVudHMpO1xuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgX29uQ2hhbmdlOiBmdW5jdGlvbiAoZSkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICBkYXRhID0ge1xuICAgICAgICAgIGZpbGVJbnB1dDogJChlLnRhcmdldCksXG4gICAgICAgICAgZm9ybTogJChlLnRhcmdldC5mb3JtKVxuICAgICAgICB9O1xuICAgICAgdGhpcy5fZ2V0RmlsZUlucHV0RmlsZXMoZGF0YS5maWxlSW5wdXQpLmFsd2F5cyhmdW5jdGlvbiAoZmlsZXMpIHtcbiAgICAgICAgZGF0YS5maWxlcyA9IGZpbGVzO1xuICAgICAgICBpZiAodGhhdC5vcHRpb25zLnJlcGxhY2VGaWxlSW5wdXQpIHtcbiAgICAgICAgICB0aGF0Ll9yZXBsYWNlRmlsZUlucHV0KGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGF0Ll90cmlnZ2VyKFxuICAgICAgICAgICAgJ2NoYW5nZScsXG4gICAgICAgICAgICAkLkV2ZW50KCdjaGFuZ2UnLCB7IGRlbGVnYXRlZEV2ZW50OiBlIH0pLFxuICAgICAgICAgICAgZGF0YVxuICAgICAgICAgICkgIT09IGZhbHNlXG4gICAgICAgICkge1xuICAgICAgICAgIHRoYXQuX29uQWRkKGUsIGRhdGEpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgX29uUGFzdGU6IGZ1bmN0aW9uIChlKSB7XG4gICAgICB2YXIgaXRlbXMgPVxuICAgICAgICAgIGUub3JpZ2luYWxFdmVudCAmJlxuICAgICAgICAgIGUub3JpZ2luYWxFdmVudC5jbGlwYm9hcmREYXRhICYmXG4gICAgICAgICAgZS5vcmlnaW5hbEV2ZW50LmNsaXBib2FyZERhdGEuaXRlbXMsXG4gICAgICAgIGRhdGEgPSB7IGZpbGVzOiBbXSB9O1xuICAgICAgaWYgKGl0ZW1zICYmIGl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAkLmVhY2goaXRlbXMsIGZ1bmN0aW9uIChpbmRleCwgaXRlbSkge1xuICAgICAgICAgIHZhciBmaWxlID0gaXRlbS5nZXRBc0ZpbGUgJiYgaXRlbS5nZXRBc0ZpbGUoKTtcbiAgICAgICAgICBpZiAoZmlsZSkge1xuICAgICAgICAgICAgZGF0YS5maWxlcy5wdXNoKGZpbGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLl90cmlnZ2VyKFxuICAgICAgICAgICAgJ3Bhc3RlJyxcbiAgICAgICAgICAgICQuRXZlbnQoJ3Bhc3RlJywgeyBkZWxlZ2F0ZWRFdmVudDogZSB9KSxcbiAgICAgICAgICAgIGRhdGFcbiAgICAgICAgICApICE9PSBmYWxzZVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLl9vbkFkZChlLCBkYXRhKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBfb25Ecm9wOiBmdW5jdGlvbiAoZSkge1xuICAgICAgZS5kYXRhVHJhbnNmZXIgPSBlLm9yaWdpbmFsRXZlbnQgJiYgZS5vcmlnaW5hbEV2ZW50LmRhdGFUcmFuc2ZlcjtcbiAgICAgIHZhciB0aGF0ID0gdGhpcyxcbiAgICAgICAgZGF0YVRyYW5zZmVyID0gZS5kYXRhVHJhbnNmZXIsXG4gICAgICAgIGRhdGEgPSB7fTtcbiAgICAgIGlmIChkYXRhVHJhbnNmZXIgJiYgZGF0YVRyYW5zZmVyLmZpbGVzICYmIGRhdGFUcmFuc2Zlci5maWxlcy5sZW5ndGgpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLl9nZXREcm9wcGVkRmlsZXMoZGF0YVRyYW5zZmVyKS5hbHdheXMoZnVuY3Rpb24gKGZpbGVzKSB7XG4gICAgICAgICAgZGF0YS5maWxlcyA9IGZpbGVzO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoYXQuX3RyaWdnZXIoXG4gICAgICAgICAgICAgICdkcm9wJyxcbiAgICAgICAgICAgICAgJC5FdmVudCgnZHJvcCcsIHsgZGVsZWdhdGVkRXZlbnQ6IGUgfSksXG4gICAgICAgICAgICAgIGRhdGFcbiAgICAgICAgICAgICkgIT09IGZhbHNlXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGF0Ll9vbkFkZChlLCBkYXRhKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBfb25EcmFnT3ZlcjogZ2V0RHJhZ0hhbmRsZXIoJ2RyYWdvdmVyJyksXG5cbiAgICBfb25EcmFnRW50ZXI6IGdldERyYWdIYW5kbGVyKCdkcmFnZW50ZXInKSxcblxuICAgIF9vbkRyYWdMZWF2ZTogZ2V0RHJhZ0hhbmRsZXIoJ2RyYWdsZWF2ZScpLFxuXG4gICAgX2luaXRFdmVudEhhbmRsZXJzOiBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAodGhpcy5faXNYSFJVcGxvYWQodGhpcy5vcHRpb25zKSkge1xuICAgICAgICB0aGlzLl9vbih0aGlzLm9wdGlvbnMuZHJvcFpvbmUsIHtcbiAgICAgICAgICBkcmFnb3ZlcjogdGhpcy5fb25EcmFnT3ZlcixcbiAgICAgICAgICBkcm9wOiB0aGlzLl9vbkRyb3AsXG4gICAgICAgICAgLy8gZXZlbnQucHJldmVudERlZmF1bHQoKSBvbiBkcmFnZW50ZXIgaXMgcmVxdWlyZWQgZm9yIElFMTArOlxuICAgICAgICAgIGRyYWdlbnRlcjogdGhpcy5fb25EcmFnRW50ZXIsXG4gICAgICAgICAgLy8gZHJhZ2xlYXZlIGlzIG5vdCByZXF1aXJlZCwgYnV0IGFkZGVkIGZvciBjb21wbGV0ZW5lc3M6XG4gICAgICAgICAgZHJhZ2xlYXZlOiB0aGlzLl9vbkRyYWdMZWF2ZVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fb24odGhpcy5vcHRpb25zLnBhc3RlWm9uZSwge1xuICAgICAgICAgIHBhc3RlOiB0aGlzLl9vblBhc3RlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKCQuc3VwcG9ydC5maWxlSW5wdXQpIHtcbiAgICAgICAgdGhpcy5fb24odGhpcy5vcHRpb25zLmZpbGVJbnB1dCwge1xuICAgICAgICAgIGNoYW5nZTogdGhpcy5fb25DaGFuZ2VcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIF9kZXN0cm95RXZlbnRIYW5kbGVyczogZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcy5fb2ZmKHRoaXMub3B0aW9ucy5kcm9wWm9uZSwgJ2RyYWdlbnRlciBkcmFnbGVhdmUgZHJhZ292ZXIgZHJvcCcpO1xuICAgICAgdGhpcy5fb2ZmKHRoaXMub3B0aW9ucy5wYXN0ZVpvbmUsICdwYXN0ZScpO1xuICAgICAgdGhpcy5fb2ZmKHRoaXMub3B0aW9ucy5maWxlSW5wdXQsICdjaGFuZ2UnKTtcbiAgICB9LFxuXG4gICAgX2Rlc3Ryb3k6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMuX2Rlc3Ryb3lFdmVudEhhbmRsZXJzKCk7XG4gICAgfSxcblxuICAgIF9zZXRPcHRpb246IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICB2YXIgcmVpbml0ID0gJC5pbkFycmF5KGtleSwgdGhpcy5fc3BlY2lhbE9wdGlvbnMpICE9PSAtMTtcbiAgICAgIGlmIChyZWluaXQpIHtcbiAgICAgICAgdGhpcy5fZGVzdHJveUV2ZW50SGFuZGxlcnMoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX3N1cGVyKGtleSwgdmFsdWUpO1xuICAgICAgaWYgKHJlaW5pdCkge1xuICAgICAgICB0aGlzLl9pbml0U3BlY2lhbE9wdGlvbnMoKTtcbiAgICAgICAgdGhpcy5faW5pdEV2ZW50SGFuZGxlcnMoKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX2luaXRTcGVjaWFsT3B0aW9uczogZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICBpZiAob3B0aW9ucy5maWxlSW5wdXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBvcHRpb25zLmZpbGVJbnB1dCA9IHRoaXMuZWxlbWVudC5pcygnaW5wdXRbdHlwZT1cImZpbGVcIl0nKVxuICAgICAgICAgID8gdGhpcy5lbGVtZW50XG4gICAgICAgICAgOiB0aGlzLmVsZW1lbnQuZmluZCgnaW5wdXRbdHlwZT1cImZpbGVcIl0nKTtcbiAgICAgIH0gZWxzZSBpZiAoIShvcHRpb25zLmZpbGVJbnB1dCBpbnN0YW5jZW9mICQpKSB7XG4gICAgICAgIG9wdGlvbnMuZmlsZUlucHV0ID0gJChvcHRpb25zLmZpbGVJbnB1dCk7XG4gICAgICB9XG4gICAgICBpZiAoIShvcHRpb25zLmRyb3Bab25lIGluc3RhbmNlb2YgJCkpIHtcbiAgICAgICAgb3B0aW9ucy5kcm9wWm9uZSA9ICQob3B0aW9ucy5kcm9wWm9uZSk7XG4gICAgICB9XG4gICAgICBpZiAoIShvcHRpb25zLnBhc3RlWm9uZSBpbnN0YW5jZW9mICQpKSB7XG4gICAgICAgIG9wdGlvbnMucGFzdGVab25lID0gJChvcHRpb25zLnBhc3RlWm9uZSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIF9nZXRSZWdFeHA6IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgIHZhciBwYXJ0cyA9IHN0ci5zcGxpdCgnLycpLFxuICAgICAgICBtb2RpZmllcnMgPSBwYXJ0cy5wb3AoKTtcbiAgICAgIHBhcnRzLnNoaWZ0KCk7XG4gICAgICByZXR1cm4gbmV3IFJlZ0V4cChwYXJ0cy5qb2luKCcvJyksIG1vZGlmaWVycyk7XG4gICAgfSxcblxuICAgIF9pc1JlZ0V4cE9wdGlvbjogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGtleSAhPT0gJ3VybCcgJiZcbiAgICAgICAgJC50eXBlKHZhbHVlKSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgL15cXC8uKlxcL1tpZ21dezAsM30kLy50ZXN0KHZhbHVlKVxuICAgICAgKTtcbiAgICB9LFxuXG4gICAgX2luaXREYXRhQXR0cmlidXRlczogZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICBvcHRpb25zID0gdGhpcy5vcHRpb25zLFxuICAgICAgICBkYXRhID0gdGhpcy5lbGVtZW50LmRhdGEoKTtcbiAgICAgIC8vIEluaXRpYWxpemUgb3B0aW9ucyBzZXQgdmlhIEhUTUw1IGRhdGEtYXR0cmlidXRlczpcbiAgICAgICQuZWFjaCh0aGlzLmVsZW1lbnRbMF0uYXR0cmlidXRlcywgZnVuY3Rpb24gKGluZGV4LCBhdHRyKSB7XG4gICAgICAgIHZhciBrZXkgPSBhdHRyLm5hbWUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICB2YWx1ZTtcbiAgICAgICAgaWYgKC9eZGF0YS0vLnRlc3Qoa2V5KSkge1xuICAgICAgICAgIC8vIENvbnZlcnQgaHlwaGVuLWF0ZWQga2V5IHRvIGNhbWVsQ2FzZTpcbiAgICAgICAgICBrZXkgPSBrZXkuc2xpY2UoNSkucmVwbGFjZSgvLVthLXpdL2csIGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHIuY2hhckF0KDEpLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdmFsdWUgPSBkYXRhW2tleV07XG4gICAgICAgICAgaWYgKHRoYXQuX2lzUmVnRXhwT3B0aW9uKGtleSwgdmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHRoYXQuX2dldFJlZ0V4cCh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9wdGlvbnNba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgX2NyZWF0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcy5faW5pdERhdGFBdHRyaWJ1dGVzKCk7XG4gICAgICB0aGlzLl9pbml0U3BlY2lhbE9wdGlvbnMoKTtcbiAgICAgIHRoaXMuX3Nsb3RzID0gW107XG4gICAgICB0aGlzLl9zZXF1ZW5jZSA9IHRoaXMuX2dldFhIUlByb21pc2UodHJ1ZSk7XG4gICAgICB0aGlzLl9zZW5kaW5nID0gdGhpcy5fYWN0aXZlID0gMDtcbiAgICAgIHRoaXMuX2luaXRQcm9ncmVzc09iamVjdCh0aGlzKTtcbiAgICAgIHRoaXMuX2luaXRFdmVudEhhbmRsZXJzKCk7XG4gICAgfSxcblxuICAgIC8vIFRoaXMgbWV0aG9kIGlzIGV4cG9zZWQgdG8gdGhlIHdpZGdldCBBUEkgYW5kIGFsbG93cyB0byBxdWVyeVxuICAgIC8vIHRoZSBudW1iZXIgb2YgYWN0aXZlIHVwbG9hZHM6XG4gICAgYWN0aXZlOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fYWN0aXZlO1xuICAgIH0sXG5cbiAgICAvLyBUaGlzIG1ldGhvZCBpcyBleHBvc2VkIHRvIHRoZSB3aWRnZXQgQVBJIGFuZCBhbGxvd3MgdG8gcXVlcnlcbiAgICAvLyB0aGUgd2lkZ2V0IHVwbG9hZCBwcm9ncmVzcy5cbiAgICAvLyBJdCByZXR1cm5zIGFuIG9iamVjdCB3aXRoIGxvYWRlZCwgdG90YWwgYW5kIGJpdHJhdGUgcHJvcGVydGllc1xuICAgIC8vIGZvciB0aGUgcnVubmluZyB1cGxvYWRzOlxuICAgIHByb2dyZXNzOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcHJvZ3Jlc3M7XG4gICAgfSxcblxuICAgIC8vIFRoaXMgbWV0aG9kIGlzIGV4cG9zZWQgdG8gdGhlIHdpZGdldCBBUEkgYW5kIGFsbG93cyBhZGRpbmcgZmlsZXNcbiAgICAvLyB1c2luZyB0aGUgZmlsZXVwbG9hZCBBUEkuIFRoZSBkYXRhIHBhcmFtZXRlciBhY2NlcHRzIGFuIG9iamVjdCB3aGljaFxuICAgIC8vIG11c3QgaGF2ZSBhIGZpbGVzIHByb3BlcnR5IGFuZCBjYW4gY29udGFpbiBhZGRpdGlvbmFsIG9wdGlvbnM6XG4gICAgLy8gLmZpbGV1cGxvYWQoJ2FkZCcsIHtmaWxlczogZmlsZXNMaXN0fSk7XG4gICAgYWRkOiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgaWYgKCFkYXRhIHx8IHRoaXMub3B0aW9ucy5kaXNhYmxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoZGF0YS5maWxlSW5wdXQgJiYgIWRhdGEuZmlsZXMpIHtcbiAgICAgICAgdGhpcy5fZ2V0RmlsZUlucHV0RmlsZXMoZGF0YS5maWxlSW5wdXQpLmFsd2F5cyhmdW5jdGlvbiAoZmlsZXMpIHtcbiAgICAgICAgICBkYXRhLmZpbGVzID0gZmlsZXM7XG4gICAgICAgICAgdGhhdC5fb25BZGQobnVsbCwgZGF0YSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YS5maWxlcyA9ICQubWFrZUFycmF5KGRhdGEuZmlsZXMpO1xuICAgICAgICB0aGlzLl9vbkFkZChudWxsLCBkYXRhKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gVGhpcyBtZXRob2QgaXMgZXhwb3NlZCB0byB0aGUgd2lkZ2V0IEFQSSBhbmQgYWxsb3dzIHNlbmRpbmcgZmlsZXNcbiAgICAvLyB1c2luZyB0aGUgZmlsZXVwbG9hZCBBUEkuIFRoZSBkYXRhIHBhcmFtZXRlciBhY2NlcHRzIGFuIG9iamVjdCB3aGljaFxuICAgIC8vIG11c3QgaGF2ZSBhIGZpbGVzIG9yIGZpbGVJbnB1dCBwcm9wZXJ0eSBhbmQgY2FuIGNvbnRhaW4gYWRkaXRpb25hbCBvcHRpb25zOlxuICAgIC8vIC5maWxldXBsb2FkKCdzZW5kJywge2ZpbGVzOiBmaWxlc0xpc3R9KTtcbiAgICAvLyBUaGUgbWV0aG9kIHJldHVybnMgYSBQcm9taXNlIG9iamVjdCBmb3IgdGhlIGZpbGUgdXBsb2FkIGNhbGwuXG4gICAgc2VuZDogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgIGlmIChkYXRhICYmICF0aGlzLm9wdGlvbnMuZGlzYWJsZWQpIHtcbiAgICAgICAgaWYgKGRhdGEuZmlsZUlucHV0ICYmICFkYXRhLmZpbGVzKSB7XG4gICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICAgICAgZGZkID0gJC5EZWZlcnJlZCgpLFxuICAgICAgICAgICAgcHJvbWlzZSA9IGRmZC5wcm9taXNlKCksXG4gICAgICAgICAgICBqcVhIUixcbiAgICAgICAgICAgIGFib3J0ZWQ7XG4gICAgICAgICAgcHJvbWlzZS5hYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGFib3J0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGpxWEhSKSB7XG4gICAgICAgICAgICAgIHJldHVybiBqcVhIUi5hYm9ydCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGZkLnJlamVjdChudWxsLCAnYWJvcnQnLCAnYWJvcnQnKTtcbiAgICAgICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy5fZ2V0RmlsZUlucHV0RmlsZXMoZGF0YS5maWxlSW5wdXQpLmFsd2F5cyhmdW5jdGlvbiAoZmlsZXMpIHtcbiAgICAgICAgICAgIGlmIChhYm9ydGVkKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghZmlsZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGRmZC5yZWplY3QoKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGF0YS5maWxlcyA9IGZpbGVzO1xuICAgICAgICAgICAganFYSFIgPSB0aGF0Ll9vblNlbmQobnVsbCwgZGF0YSk7XG4gICAgICAgICAgICBqcVhIUi50aGVuKFxuICAgICAgICAgICAgICBmdW5jdGlvbiAocmVzdWx0LCB0ZXh0U3RhdHVzLCBqcVhIUikge1xuICAgICAgICAgICAgICAgIGRmZC5yZXNvbHZlKHJlc3VsdCwgdGV4dFN0YXR1cywganFYSFIpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBmdW5jdGlvbiAoanFYSFIsIHRleHRTdGF0dXMsIGVycm9yVGhyb3duKSB7XG4gICAgICAgICAgICAgICAgZGZkLnJlamVjdChqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiB0aGlzLl9lbmhhbmNlUHJvbWlzZShwcm9taXNlKTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhLmZpbGVzID0gJC5tYWtlQXJyYXkoZGF0YS5maWxlcyk7XG4gICAgICAgIGlmIChkYXRhLmZpbGVzLmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLl9vblNlbmQobnVsbCwgZGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLl9nZXRYSFJQcm9taXNlKGZhbHNlLCBkYXRhICYmIGRhdGEuY29udGV4dCk7XG4gICAgfVxuICB9KTtcbn0pO1xuIiwiLypcbiAqIGpRdWVyeSBJZnJhbWUgVHJhbnNwb3J0IFBsdWdpblxuICogaHR0cHM6Ly9naXRodWIuY29tL2JsdWVpbXAvalF1ZXJ5LUZpbGUtVXBsb2FkXG4gKlxuICogQ29weXJpZ2h0IDIwMTEsIFNlYmFzdGlhbiBUc2NoYW5cbiAqIGh0dHBzOi8vYmx1ZWltcC5uZXRcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2U6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuICovXG5cbi8qIGdsb2JhbCBkZWZpbmUsIHJlcXVpcmUgKi9cblxuKGZ1bmN0aW9uIChmYWN0b3J5KSB7XG4gICd1c2Ugc3RyaWN0JztcbiAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgIC8vIFJlZ2lzdGVyIGFzIGFuIGFub255bW91cyBBTUQgbW9kdWxlOlxuICAgIGRlZmluZShbJ2pxdWVyeSddLCBmYWN0b3J5KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAvLyBOb2RlL0NvbW1vbkpTOlxuICAgIGZhY3RvcnkocmVxdWlyZSgnanF1ZXJ5JykpO1xuICB9IGVsc2Uge1xuICAgIC8vIEJyb3dzZXIgZ2xvYmFsczpcbiAgICBmYWN0b3J5KHdpbmRvdy5qUXVlcnkpO1xuICB9XG59KShmdW5jdGlvbiAoJCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgLy8gSGVscGVyIHZhcmlhYmxlIHRvIGNyZWF0ZSB1bmlxdWUgbmFtZXMgZm9yIHRoZSB0cmFuc3BvcnQgaWZyYW1lczpcbiAgdmFyIGNvdW50ZXIgPSAwLFxuICAgIGpzb25BUEkgPSAkLFxuICAgIGpzb25QYXJzZSA9ICdwYXJzZUpTT04nO1xuXG4gIGlmICgnSlNPTicgaW4gd2luZG93ICYmICdwYXJzZScgaW4gSlNPTikge1xuICAgIGpzb25BUEkgPSBKU09OO1xuICAgIGpzb25QYXJzZSA9ICdwYXJzZSc7XG4gIH1cblxuICAvLyBUaGUgaWZyYW1lIHRyYW5zcG9ydCBhY2NlcHRzIGZvdXIgYWRkaXRpb25hbCBvcHRpb25zOlxuICAvLyBvcHRpb25zLmZpbGVJbnB1dDogYSBqUXVlcnkgY29sbGVjdGlvbiBvZiBmaWxlIGlucHV0IGZpZWxkc1xuICAvLyBvcHRpb25zLnBhcmFtTmFtZTogdGhlIHBhcmFtZXRlciBuYW1lIGZvciB0aGUgZmlsZSBmb3JtIGRhdGEsXG4gIC8vICBvdmVycmlkZXMgdGhlIG5hbWUgcHJvcGVydHkgb2YgdGhlIGZpbGUgaW5wdXQgZmllbGQocyksXG4gIC8vICBjYW4gYmUgYSBzdHJpbmcgb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAgLy8gb3B0aW9ucy5mb3JtRGF0YTogYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIG5hbWUgYW5kIHZhbHVlIHByb3BlcnRpZXMsXG4gIC8vICBlcXVpdmFsZW50IHRvIHRoZSByZXR1cm4gZGF0YSBvZiAuc2VyaWFsaXplQXJyYXkoKSwgZS5nLjpcbiAgLy8gIFt7bmFtZTogJ2EnLCB2YWx1ZTogMX0sIHtuYW1lOiAnYicsIHZhbHVlOiAyfV1cbiAgLy8gb3B0aW9ucy5pbml0aWFsSWZyYW1lU3JjOiB0aGUgVVJMIG9mIHRoZSBpbml0aWFsIGlmcmFtZSBzcmMsXG4gIC8vICBieSBkZWZhdWx0IHNldCB0byBcImphdmFzY3JpcHQ6ZmFsc2U7XCJcbiAgJC5hamF4VHJhbnNwb3J0KCdpZnJhbWUnLCBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zLmFzeW5jKSB7XG4gICAgICAvLyBqYXZhc2NyaXB0OmZhbHNlIGFzIGluaXRpYWwgaWZyYW1lIHNyY1xuICAgICAgLy8gcHJldmVudHMgd2FybmluZyBwb3B1cHMgb24gSFRUUFMgaW4gSUU2OlxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNjcmlwdC11cmxcbiAgICAgIHZhciBpbml0aWFsSWZyYW1lU3JjID0gb3B0aW9ucy5pbml0aWFsSWZyYW1lU3JjIHx8ICdqYXZhc2NyaXB0OmZhbHNlOycsXG4gICAgICAgIGZvcm0sXG4gICAgICAgIGlmcmFtZSxcbiAgICAgICAgYWRkUGFyYW1DaGFyO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2VuZDogZnVuY3Rpb24gKF8sIGNvbXBsZXRlQ2FsbGJhY2spIHtcbiAgICAgICAgICBmb3JtID0gJCgnPGZvcm0gc3R5bGU9XCJkaXNwbGF5Om5vbmU7XCI+PC9mb3JtPicpO1xuICAgICAgICAgIGZvcm0uYXR0cignYWNjZXB0LWNoYXJzZXQnLCBvcHRpb25zLmZvcm1BY2NlcHRDaGFyc2V0KTtcbiAgICAgICAgICBhZGRQYXJhbUNoYXIgPSAvXFw/Ly50ZXN0KG9wdGlvbnMudXJsKSA/ICcmJyA6ICc/JztcbiAgICAgICAgICAvLyBYRG9tYWluUmVxdWVzdCBvbmx5IHN1cHBvcnRzIEdFVCBhbmQgUE9TVDpcbiAgICAgICAgICBpZiAob3B0aW9ucy50eXBlID09PSAnREVMRVRFJykge1xuICAgICAgICAgICAgb3B0aW9ucy51cmwgPSBvcHRpb25zLnVybCArIGFkZFBhcmFtQ2hhciArICdfbWV0aG9kPURFTEVURSc7XG4gICAgICAgICAgICBvcHRpb25zLnR5cGUgPSAnUE9TVCc7XG4gICAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLnR5cGUgPT09ICdQVVQnKSB7XG4gICAgICAgICAgICBvcHRpb25zLnVybCA9IG9wdGlvbnMudXJsICsgYWRkUGFyYW1DaGFyICsgJ19tZXRob2Q9UFVUJztcbiAgICAgICAgICAgIG9wdGlvbnMudHlwZSA9ICdQT1NUJztcbiAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMudHlwZSA9PT0gJ1BBVENIJykge1xuICAgICAgICAgICAgb3B0aW9ucy51cmwgPSBvcHRpb25zLnVybCArIGFkZFBhcmFtQ2hhciArICdfbWV0aG9kPVBBVENIJztcbiAgICAgICAgICAgIG9wdGlvbnMudHlwZSA9ICdQT1NUJztcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gSUUgdmVyc2lvbnMgYmVsb3cgSUU4IGNhbm5vdCBzZXQgdGhlIG5hbWUgcHJvcGVydHkgb2ZcbiAgICAgICAgICAvLyBlbGVtZW50cyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIGFkZGVkIHRvIHRoZSBET00sXG4gICAgICAgICAgLy8gc28gd2Ugc2V0IHRoZSBuYW1lIGFsb25nIHdpdGggdGhlIGlmcmFtZSBIVE1MIG1hcmt1cDpcbiAgICAgICAgICBjb3VudGVyICs9IDE7XG4gICAgICAgICAgaWZyYW1lID0gJChcbiAgICAgICAgICAgICc8aWZyYW1lIHNyYz1cIicgK1xuICAgICAgICAgICAgICBpbml0aWFsSWZyYW1lU3JjICtcbiAgICAgICAgICAgICAgJ1wiIG5hbWU9XCJpZnJhbWUtdHJhbnNwb3J0LScgK1xuICAgICAgICAgICAgICBjb3VudGVyICtcbiAgICAgICAgICAgICAgJ1wiPjwvaWZyYW1lPidcbiAgICAgICAgICApLm9uKCdsb2FkJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGZpbGVJbnB1dENsb25lcyxcbiAgICAgICAgICAgICAgcGFyYW1OYW1lcyA9ICQuaXNBcnJheShvcHRpb25zLnBhcmFtTmFtZSlcbiAgICAgICAgICAgICAgICA/IG9wdGlvbnMucGFyYW1OYW1lXG4gICAgICAgICAgICAgICAgOiBbb3B0aW9ucy5wYXJhbU5hbWVdO1xuICAgICAgICAgICAgaWZyYW1lLm9mZignbG9hZCcpLm9uKCdsb2FkJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICB2YXIgcmVzcG9uc2U7XG4gICAgICAgICAgICAgIC8vIFdyYXAgaW4gYSB0cnkvY2F0Y2ggYmxvY2sgdG8gY2F0Y2ggZXhjZXB0aW9ucyB0aHJvd25cbiAgICAgICAgICAgICAgLy8gd2hlbiB0cnlpbmcgdG8gYWNjZXNzIGNyb3NzLWRvbWFpbiBpZnJhbWUgY29udGVudHM6XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBpZnJhbWUuY29udGVudHMoKTtcbiAgICAgICAgICAgICAgICAvLyBHb29nbGUgQ2hyb21lIGFuZCBGaXJlZm94IGRvIG5vdCB0aHJvdyBhblxuICAgICAgICAgICAgICAgIC8vIGV4Y2VwdGlvbiB3aGVuIGNhbGxpbmcgaWZyYW1lLmNvbnRlbnRzKCkgb25cbiAgICAgICAgICAgICAgICAvLyBjcm9zcy1kb21haW4gcmVxdWVzdHMsIHNvIHdlIHVuaWZ5IHRoZSByZXNwb25zZTpcbiAgICAgICAgICAgICAgICBpZiAoIXJlc3BvbnNlLmxlbmd0aCB8fCAhcmVzcG9uc2VbMF0uZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2UgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gVGhlIGNvbXBsZXRlIGNhbGxiYWNrIHJldHVybnMgdGhlXG4gICAgICAgICAgICAgIC8vIGlmcmFtZSBjb250ZW50IGRvY3VtZW50IGFzIHJlc3BvbnNlIG9iamVjdDpcbiAgICAgICAgICAgICAgY29tcGxldGVDYWxsYmFjaygyMDAsICdzdWNjZXNzJywgeyBpZnJhbWU6IHJlc3BvbnNlIH0pO1xuICAgICAgICAgICAgICAvLyBGaXggZm9yIElFIGVuZGxlc3MgcHJvZ3Jlc3MgYmFyIGFjdGl2aXR5IGJ1Z1xuICAgICAgICAgICAgICAvLyAoaGFwcGVucyBvbiBmb3JtIHN1Ym1pdHMgdG8gaWZyYW1lIHRhcmdldHMpOlxuICAgICAgICAgICAgICAkKCc8aWZyYW1lIHNyYz1cIicgKyBpbml0aWFsSWZyYW1lU3JjICsgJ1wiPjwvaWZyYW1lPicpLmFwcGVuZFRvKFxuICAgICAgICAgICAgICAgIGZvcm1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIC8vIFJlbW92aW5nIHRoZSBmb3JtIGluIGEgc2V0VGltZW91dCBjYWxsXG4gICAgICAgICAgICAgICAgLy8gYWxsb3dzIENocm9tZSdzIGRldmVsb3BlciB0b29scyB0byBkaXNwbGF5XG4gICAgICAgICAgICAgICAgLy8gdGhlIHJlc3BvbnNlIHJlc3VsdFxuICAgICAgICAgICAgICAgIGZvcm0ucmVtb3ZlKCk7XG4gICAgICAgICAgICAgIH0sIDApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmb3JtXG4gICAgICAgICAgICAgIC5wcm9wKCd0YXJnZXQnLCBpZnJhbWUucHJvcCgnbmFtZScpKVxuICAgICAgICAgICAgICAucHJvcCgnYWN0aW9uJywgb3B0aW9ucy51cmwpXG4gICAgICAgICAgICAgIC5wcm9wKCdtZXRob2QnLCBvcHRpb25zLnR5cGUpO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuZm9ybURhdGEpIHtcbiAgICAgICAgICAgICAgJC5lYWNoKG9wdGlvbnMuZm9ybURhdGEsIGZ1bmN0aW9uIChpbmRleCwgZmllbGQpIHtcbiAgICAgICAgICAgICAgICAkKCc8aW5wdXQgdHlwZT1cImhpZGRlblwiLz4nKVxuICAgICAgICAgICAgICAgICAgLnByb3AoJ25hbWUnLCBmaWVsZC5uYW1lKVxuICAgICAgICAgICAgICAgICAgLnZhbChmaWVsZC52YWx1ZSlcbiAgICAgICAgICAgICAgICAgIC5hcHBlbmRUbyhmb3JtKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIG9wdGlvbnMuZmlsZUlucHV0ICYmXG4gICAgICAgICAgICAgIG9wdGlvbnMuZmlsZUlucHV0Lmxlbmd0aCAmJlxuICAgICAgICAgICAgICBvcHRpb25zLnR5cGUgPT09ICdQT1NUJ1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGZpbGVJbnB1dENsb25lcyA9IG9wdGlvbnMuZmlsZUlucHV0LmNsb25lKCk7XG4gICAgICAgICAgICAgIC8vIEluc2VydCBhIGNsb25lIGZvciBlYWNoIGZpbGUgaW5wdXQgZmllbGQ6XG4gICAgICAgICAgICAgIG9wdGlvbnMuZmlsZUlucHV0LmFmdGVyKGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmaWxlSW5wdXRDbG9uZXNbaW5kZXhdO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMucGFyYW1OYW1lKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5maWxlSW5wdXQuZWFjaChmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICQodGhpcykucHJvcCgnbmFtZScsIHBhcmFtTmFtZXNbaW5kZXhdIHx8IG9wdGlvbnMucGFyYW1OYW1lKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBBcHBlbmRpbmcgdGhlIGZpbGUgaW5wdXQgZmllbGRzIHRvIHRoZSBoaWRkZW4gZm9ybVxuICAgICAgICAgICAgICAvLyByZW1vdmVzIHRoZW0gZnJvbSB0aGVpciBvcmlnaW5hbCBsb2NhdGlvbjpcbiAgICAgICAgICAgICAgZm9ybVxuICAgICAgICAgICAgICAgIC5hcHBlbmQob3B0aW9ucy5maWxlSW5wdXQpXG4gICAgICAgICAgICAgICAgLnByb3AoJ2VuY3R5cGUnLCAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScpXG4gICAgICAgICAgICAgICAgLy8gZW5jdHlwZSBtdXN0IGJlIHNldCBhcyBlbmNvZGluZyBmb3IgSUU6XG4gICAgICAgICAgICAgICAgLnByb3AoJ2VuY29kaW5nJywgJ211bHRpcGFydC9mb3JtLWRhdGEnKTtcbiAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBIVE1MNSBmb3JtIGF0dHJpYnV0ZSBmcm9tIHRoZSBpbnB1dChzKTpcbiAgICAgICAgICAgICAgb3B0aW9ucy5maWxlSW5wdXQucmVtb3ZlQXR0cignZm9ybScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAvLyBTdWJtaXR0aW5nIHRoZSBmb3JtIGluIGEgc2V0VGltZW91dCBjYWxsIGZpeGVzIGFuIGlzc3VlIHdpdGhcbiAgICAgICAgICAgICAgLy8gU2FmYXJpIDEzIG5vdCB0cmlnZ2VyaW5nIHRoZSBpZnJhbWUgbG9hZCBldmVudCBhZnRlciByZXNldHRpbmdcbiAgICAgICAgICAgICAgLy8gdGhlIGxvYWQgZXZlbnQgaGFuZGxlciwgc2VlIGFsc286XG4gICAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ibHVlaW1wL2pRdWVyeS1GaWxlLVVwbG9hZC9pc3N1ZXMvMzYzM1xuICAgICAgICAgICAgICBmb3JtLnN1Ym1pdCgpO1xuICAgICAgICAgICAgICAvLyBJbnNlcnQgdGhlIGZpbGUgaW5wdXQgZmllbGRzIGF0IHRoZWlyIG9yaWdpbmFsIGxvY2F0aW9uXG4gICAgICAgICAgICAgIC8vIGJ5IHJlcGxhY2luZyB0aGUgY2xvbmVzIHdpdGggdGhlIG9yaWdpbmFsczpcbiAgICAgICAgICAgICAgaWYgKGZpbGVJbnB1dENsb25lcyAmJiBmaWxlSW5wdXRDbG9uZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5maWxlSW5wdXQuZWFjaChmdW5jdGlvbiAoaW5kZXgsIGlucHV0KSB7XG4gICAgICAgICAgICAgICAgICB2YXIgY2xvbmUgPSAkKGZpbGVJbnB1dENsb25lc1tpbmRleF0pO1xuICAgICAgICAgICAgICAgICAgLy8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgbmFtZSBhbmQgZm9ybSBwcm9wZXJ0aWVzOlxuICAgICAgICAgICAgICAgICAgJChpbnB1dClcbiAgICAgICAgICAgICAgICAgICAgLnByb3AoJ25hbWUnLCBjbG9uZS5wcm9wKCduYW1lJykpXG4gICAgICAgICAgICAgICAgICAgIC5hdHRyKCdmb3JtJywgY2xvbmUuYXR0cignZm9ybScpKTtcbiAgICAgICAgICAgICAgICAgIGNsb25lLnJlcGxhY2VXaXRoKGlucHV0KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZm9ybS5hcHBlbmQoaWZyYW1lKS5hcHBlbmRUbyhkb2N1bWVudC5ib2R5KTtcbiAgICAgICAgfSxcbiAgICAgICAgYWJvcnQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoaWZyYW1lKSB7XG4gICAgICAgICAgICAvLyBqYXZhc2NyaXB0OmZhbHNlIGFzIGlmcmFtZSBzcmMgYWJvcnRzIHRoZSByZXF1ZXN0XG4gICAgICAgICAgICAvLyBhbmQgcHJldmVudHMgd2FybmluZyBwb3B1cHMgb24gSFRUUFMgaW4gSUU2LlxuICAgICAgICAgICAgaWZyYW1lLm9mZignbG9hZCcpLnByb3AoJ3NyYycsIGluaXRpYWxJZnJhbWVTcmMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZm9ybSkge1xuICAgICAgICAgICAgZm9ybS5yZW1vdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9KTtcblxuICAvLyBUaGUgaWZyYW1lIHRyYW5zcG9ydCByZXR1cm5zIHRoZSBpZnJhbWUgY29udGVudCBkb2N1bWVudCBhcyByZXNwb25zZS5cbiAgLy8gVGhlIGZvbGxvd2luZyBhZGRzIGNvbnZlcnRlcnMgZnJvbSBpZnJhbWUgdG8gdGV4dCwganNvbiwgaHRtbCwgeG1sXG4gIC8vIGFuZCBzY3JpcHQuXG4gIC8vIFBsZWFzZSBub3RlIHRoYXQgdGhlIENvbnRlbnQtVHlwZSBmb3IgSlNPTiByZXNwb25zZXMgaGFzIHRvIGJlIHRleHQvcGxhaW5cbiAgLy8gb3IgdGV4dC9odG1sLCBpZiB0aGUgYnJvd3NlciBkb2Vzbid0IGluY2x1ZGUgYXBwbGljYXRpb24vanNvbiBpbiB0aGVcbiAgLy8gQWNjZXB0IGhlYWRlciwgZWxzZSBJRSB3aWxsIHNob3cgYSBkb3dubG9hZCBkaWFsb2cuXG4gIC8vIFRoZSBDb250ZW50LVR5cGUgZm9yIFhNTCByZXNwb25zZXMgb24gdGhlIG90aGVyIGhhbmQgaGFzIHRvIGJlIGFsd2F5c1xuICAvLyBhcHBsaWNhdGlvbi94bWwgb3IgdGV4dC94bWwsIHNvIElFIHByb3Blcmx5IHBhcnNlcyB0aGUgWE1MIHJlc3BvbnNlLlxuICAvLyBTZWUgYWxzb1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vYmx1ZWltcC9qUXVlcnktRmlsZS1VcGxvYWQvd2lraS9TZXR1cCNjb250ZW50LXR5cGUtbmVnb3RpYXRpb25cbiAgJC5hamF4U2V0dXAoe1xuICAgIGNvbnZlcnRlcnM6IHtcbiAgICAgICdpZnJhbWUgdGV4dCc6IGZ1bmN0aW9uIChpZnJhbWUpIHtcbiAgICAgICAgcmV0dXJuIGlmcmFtZSAmJiAkKGlmcmFtZVswXS5ib2R5KS50ZXh0KCk7XG4gICAgICB9LFxuICAgICAgJ2lmcmFtZSBqc29uJzogZnVuY3Rpb24gKGlmcmFtZSkge1xuICAgICAgICByZXR1cm4gaWZyYW1lICYmIGpzb25BUElbanNvblBhcnNlXSgkKGlmcmFtZVswXS5ib2R5KS50ZXh0KCkpO1xuICAgICAgfSxcbiAgICAgICdpZnJhbWUgaHRtbCc6IGZ1bmN0aW9uIChpZnJhbWUpIHtcbiAgICAgICAgcmV0dXJuIGlmcmFtZSAmJiAkKGlmcmFtZVswXS5ib2R5KS5odG1sKCk7XG4gICAgICB9LFxuICAgICAgJ2lmcmFtZSB4bWwnOiBmdW5jdGlvbiAoaWZyYW1lKSB7XG4gICAgICAgIHZhciB4bWxEb2MgPSBpZnJhbWUgJiYgaWZyYW1lWzBdO1xuICAgICAgICByZXR1cm4geG1sRG9jICYmICQuaXNYTUxEb2MoeG1sRG9jKVxuICAgICAgICAgID8geG1sRG9jXG4gICAgICAgICAgOiAkLnBhcnNlWE1MKFxuICAgICAgICAgICAgICAoeG1sRG9jLlhNTERvY3VtZW50ICYmIHhtbERvYy5YTUxEb2N1bWVudC54bWwpIHx8XG4gICAgICAgICAgICAgICAgJCh4bWxEb2MuYm9keSkuaHRtbCgpXG4gICAgICAgICAgICApO1xuICAgICAgfSxcbiAgICAgICdpZnJhbWUgc2NyaXB0JzogZnVuY3Rpb24gKGlmcmFtZSkge1xuICAgICAgICByZXR1cm4gaWZyYW1lICYmICQuZ2xvYmFsRXZhbCgkKGlmcmFtZVswXS5ib2R5KS50ZXh0KCkpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59KTtcbiIsImZ1bmN0aW9uIHJhbmRvbVVVSUQoKSB7XHJcbiAgICBpZiAodHlwZW9mIGNyeXB0byA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIGNyeXB0by5yYW5kb21VVUlEID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgcmV0dXJuIGNyeXB0by5yYW5kb21VVUlEKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIChbMWU3XSArIC0xZTMgKyAtNGUzICsgLThlMyArIC0xZTExKS5yZXBsYWNlKC9bMDE4XS9nLCBjID0+XHJcbiAgICAgICAgKGMgXiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50OEFycmF5KDEpKVswXSAmIDE1ID4+IGMgLyA0KS50b1N0cmluZygxNilcclxuICAgICk7XHJcbn1cclxuIiwidmFyIGluaXRpYWxpemVkO1xyXG52YXIgbWVkaWFBcHA7XHJcblxyXG52YXIgYnVzID0gbmV3IFZ1ZSgpO1xyXG5cclxuZnVuY3Rpb24gaW5pdGlhbGl6ZU1lZGlhQXBwbGljYXRpb24oZGlzcGxheU1lZGlhQXBwbGljYXRpb24sIG1lZGlhQXBwbGljYXRpb25VcmwsIHBhdGhCYXNlKSB7XHJcblxyXG4gICAgaWYgKGluaXRpYWxpemVkKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGluaXRpYWxpemVkID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoIW1lZGlhQXBwbGljYXRpb25VcmwpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdtZWRpYUFwcGxpY2F0aW9uVXJsIHZhcmlhYmxlIGlzIG5vdCBkZWZpbmVkJyk7XHJcbiAgICB9XHJcblxyXG4gICAgJC5hamF4KHtcclxuICAgICAgICB1cmw6IG1lZGlhQXBwbGljYXRpb25VcmwsXHJcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcclxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoY29udGVudCkge1xyXG4gICAgICAgICAgICAkKCcudGEtY29udGVudCcpLmFwcGVuZChjb250ZW50KTtcclxuXHJcbiAgICAgICAgICAgICQoZG9jdW1lbnQpLnRyaWdnZXIoJ21lZGlhYXBwbGljYXRpb246cmVhZHknKTtcclxuXHJcbiAgICAgICAgICAgIHZhciByb290ID0ge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogJCgnI3QtbWVkaWFMaWJyYXJ5JykudGV4dCgpLFxyXG4gICAgICAgICAgICAgICAgcGF0aDogJycsXHJcbiAgICAgICAgICAgICAgICBmb2xkZXI6ICcnLFxyXG4gICAgICAgICAgICAgICAgaXNEaXJlY3Rvcnk6IHRydWVcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIG1lZGlhQXBwID0gbmV3IFZ1ZSh7XHJcbiAgICAgICAgICAgICAgICBlbDogJyNtZWRpYUFwcCcsXHJcbiAgICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRGb2xkZXI6IHt9LFxyXG4gICAgICAgICAgICAgICAgICAgIG1lZGlhSXRlbXM6IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkTWVkaWFzOiBbXSxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvcnM6IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgIGRyYWdEcm9wVGh1bWJuYWlsOiBuZXcgSW1hZ2UoKSxcclxuICAgICAgICAgICAgICAgICAgICBzbWFsbFRodW1iczogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgZ3JpZFZpZXc6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIG1lZGlhRmlsdGVyOiAnJyxcclxuICAgICAgICAgICAgICAgICAgICBzb3J0Qnk6ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgIHNvcnRBc2M6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbXNJblBhZ2U6IFtdXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgY3JlYXRlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5kcmFnRHJvcFRodW1ibmFpbC5zcmMgPSAocGF0aEJhc2UgfHwgJycpICsgJy9PcmNoYXJkQ29yZS5NZWRpYS9JbWFnZXMvZHJhZy10aHVtYm5haWwucG5nJztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYnVzLiRvbignZm9sZGVyU2VsZWN0ZWQnLCBmdW5jdGlvbiAoZm9sZGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWRGb2xkZXIgPSBmb2xkZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJ1cy4kb24oJ2ZvbGRlckRlbGV0ZWQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0Um9vdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBidXMuJG9uKCdmb2xkZXJBZGRlZCcsIGZ1bmN0aW9uIChmb2xkZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZEZvbGRlciA9IGZvbGRlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9sZGVyLnNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYnVzLiRvbignbWVkaWFMaXN0TW92ZWQnLCBmdW5jdGlvbiAoZXJyb3JJbmZvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9hZEZvbGRlcihzZWxmLnNlbGVjdGVkRm9sZGVyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9ySW5mbykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvcnMucHVzaChlcnJvckluZm8pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJ1cy4kb24oJ21lZGlhUmVuYW1lZCcsIGZ1bmN0aW9uIChuZXdOYW1lLCBuZXdQYXRoLCBvbGRQYXRoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZWRpYSA9IHNlbGYubWVkaWFJdGVtcy5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLm1lZGlhUGF0aCA9PT0gb2xkUGF0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlbMF07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZWRpYS5tZWRpYVBhdGggPSBuZXdQYXRoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZWRpYS5uYW1lID0gbmV3TmFtZTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYnVzLiRvbignY3JlYXRlRm9sZGVyUmVxdWVzdGVkJywgZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY3JlYXRlRm9sZGVyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJ1cy4kb24oJ2RlbGV0ZUZvbGRlclJlcXVlc3RlZCcsIGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRlbGV0ZUZvbGRlcigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBjb21tb24gaGFuZGxlcnMgZm9yIGFjdGlvbnMgaW4gYm90aCBncmlkIGFuZCB0YWJsZSB2aWV3LlxyXG4gICAgICAgICAgICAgICAgICAgIGJ1cy4kb24oJ3NvcnRDaGFuZ2VSZXF1ZXN0ZWQnLCBmdW5jdGlvbiAobmV3U29ydCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNoYW5nZVNvcnQobmV3U29ydCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJ1cy4kb24oJ21lZGlhVG9nZ2xlUmVxdWVzdGVkJywgZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudG9nZ2xlU2VsZWN0aW9uT2ZNZWRpYShtZWRpYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJ1cy4kb24oJ3JlbmFtZU1lZGlhUmVxdWVzdGVkJywgZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVuYW1lTWVkaWEobWVkaWEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBidXMuJG9uKCdkZWxldGVNZWRpYVJlcXVlc3RlZCcsIGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRlbGV0ZU1lZGlhSXRlbShtZWRpYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJ1cy4kb24oJ21lZGlhRHJhZ1N0YXJ0UmVxdWVzdGVkJywgZnVuY3Rpb24gKG1lZGlhLCBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlRHJhZ1N0YXJ0KG1lZGlhLCBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZXIgZm9yIHBhZ2VyIGV2ZW50c1xyXG4gICAgICAgICAgICAgICAgICAgIGJ1cy4kb24oJ3BhZ2VyRXZlbnQnLCBmdW5jdGlvbiAoaXRlbXNJblBhZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pdGVtc0luUGFnZSA9IGl0ZW1zSW5QYWdlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkTWVkaWFzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ21lZGlhQXBwbGljYXRpb25QcmVmcycpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWRGb2xkZXIgPSByb290O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRQcmVmcyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ21lZGlhQXBwbGljYXRpb25QcmVmcycpKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBjb21wdXRlZDoge1xyXG4gICAgICAgICAgICAgICAgICAgIGlzSG9tZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEZvbGRlciA9PSByb290O1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50czogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcCA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRGb2xkZXIgPSB0aGlzLnNlbGVjdGVkRm9sZGVyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocGFyZW50Rm9sZGVyICYmIHBhcmVudEZvbGRlci5wYXRoICE9ICcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLnVuc2hpZnQocGFyZW50Rm9sZGVyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudEZvbGRlciA9IHBhcmVudEZvbGRlci5wYXJlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHA7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICByb290OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByb290O1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRNZWRpYUl0ZW1zOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWRNZWRpYXMgPSBbXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaWx0ZXJlZCA9IHNlbGYubWVkaWFJdGVtcy5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLm5hbWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKHNlbGYubWVkaWFGaWx0ZXIudG9Mb3dlckNhc2UoKSkgPiAtIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChzZWxmLnNvcnRCeSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnc2l6ZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWQuc29ydChmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zb3J0QXNjID8gYS5zaXplIC0gYi5zaXplIDogYi5zaXplIC0gYS5zaXplO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWltZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWQuc29ydChmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zb3J0QXNjID8gYS5taW1lLnRvTG93ZXJDYXNlKCkubG9jYWxlQ29tcGFyZShiLm1pbWUudG9Mb3dlckNhc2UoKSkgOiBiLm1pbWUudG9Mb3dlckNhc2UoKS5sb2NhbGVDb21wYXJlKGEubWltZS50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2xhc3RNb2RpZnknOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuc29ydEFzYyA/IGEubGFzdE1vZGlmeSAtIGIubGFzdE1vZGlmeSA6IGIubGFzdE1vZGlmeSAtIGEubGFzdE1vZGlmeTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWQuc29ydChmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zb3J0QXNjID8gYS5uYW1lLnRvTG93ZXJDYXNlKCkubG9jYWxlQ29tcGFyZShiLm5hbWUudG9Mb3dlckNhc2UoKSkgOiBiLm5hbWUudG9Mb3dlckNhc2UoKS5sb2NhbGVDb21wYXJlKGEubmFtZS50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpbHRlcmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgaGlkZGVuQ291bnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMubWVkaWFJdGVtcy5sZW5ndGggLSB0aGlzLmZpbHRlcmVkTWVkaWFJdGVtcy5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB0aHVtYlNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc21hbGxUaHVtYnMgPyAxMDAgOiAyNDA7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UHJlZnM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtYWxsVGh1bWJzOiB0aGlzLnNtYWxsVGh1bWJzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkRm9sZGVyOiB0aGlzLnNlbGVjdGVkRm9sZGVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyaWRWaWV3OiB0aGlzLmdyaWRWaWV3XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uIChuZXdQcmVmcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFuZXdQcmVmcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNtYWxsVGh1bWJzID0gbmV3UHJlZnMuc21hbGxUaHVtYnM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRm9sZGVyID0gbmV3UHJlZnMuc2VsZWN0ZWRGb2xkZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWRWaWV3ID0gbmV3UHJlZnMuZ3JpZFZpZXc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgd2F0Y2g6IHtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UHJlZnM6IGZ1bmN0aW9uIChuZXdQcmVmcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnbWVkaWFBcHBsaWNhdGlvblByZWZzJywgSlNPTi5zdHJpbmdpZnkobmV3UHJlZnMpKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkRm9sZGVyOiBmdW5jdGlvbiAobmV3Rm9sZGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWFGaWx0ZXIgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZvbGRlciA9IG5ld0ZvbGRlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkRm9sZGVyKG5ld0ZvbGRlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kcmVmcy5yb290Rm9sZGVyLnRvZ2dsZSgpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIG1ldGhvZHM6IHtcclxuICAgICAgICAgICAgICAgICAgICB1cGxvYWRVcmw6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zZWxlY3RlZEZvbGRlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1cmxWYWx1ZSA9ICQoJyN1cGxvYWRGaWxlcycpLnZhbCgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVybFZhbHVlICsgKHVybFZhbHVlLmluZGV4T2YoJz8nKSA9PSAtMSA/ICc/JyA6ICcmJykgKyBcInBhdGg9XCIgKyBlbmNvZGVVUklDb21wb25lbnQodGhpcy5zZWxlY3RlZEZvbGRlci5wYXRoKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdFJvb3Q6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZvbGRlciA9IHRoaXMucm9vdDtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGxvYWRGb2xkZXI6IGZ1bmN0aW9uIChmb2xkZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvcnMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZWRpYVVybCA9ICQoJyNnZXRNZWRpYUl0ZW1zVXJsJykudmFsKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGZvbGRlci5wYXRoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogbWVkaWFVcmwgKyAobWVkaWFVcmwuaW5kZXhPZignPycpID09IC0xID8gJz8nIDogJyYnKSArIFwicGF0aD1cIiArIGVuY29kZVVSSUNvbXBvbmVudChmb2xkZXIucGF0aCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5vcGVuID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tZWRpYUl0ZW1zID0gZGF0YTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkTWVkaWFzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zb3J0QnkgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNvcnRBc2MgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnZXJyb3IgbG9hZGluZyBmb2xkZXI6JyArIGZvbGRlci5wYXRoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdFJvb3QoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RBbGw6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZmlsdGVyZWRNZWRpYUl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWFzLnB1c2godGhpcy5maWx0ZXJlZE1lZGlhSXRlbXNbaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB1blNlbGVjdEFsbDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWFzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBpbnZlcnRTZWxlY3Rpb246IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRlbXAgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmZpbHRlcmVkTWVkaWFJdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNNZWRpYVNlbGVjdGVkKHRoaXMuZmlsdGVyZWRNZWRpYUl0ZW1zW2ldKSA9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAucHVzaCh0aGlzLmZpbHRlcmVkTWVkaWFJdGVtc1tpXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhcyA9IHRlbXA7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB0b2dnbGVTZWxlY3Rpb25PZk1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNNZWRpYVNlbGVjdGVkKG1lZGlhKSA9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWFzLnNwbGljZSh0aGlzLnNlbGVjdGVkTWVkaWFzLmluZGV4T2YobWVkaWEpLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYXMucHVzaChtZWRpYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGlzTWVkaWFTZWxlY3RlZDogZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSB0aGlzLnNlbGVjdGVkTWVkaWFzLnNvbWUoZnVuY3Rpb24gKGVsZW1lbnQsIGluZGV4LCBhcnJheSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQudXJsLnRvTG93ZXJDYXNlKCkgPT09IG1lZGlhLnVybC50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZUZvbGRlcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9sZGVyID0gdGhpcy5zZWxlY3RlZEZvbGRlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgcm9vdCBmb2xkZXIgY2FuJ3QgYmUgZGVsZXRlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9sZGVyID09IHRoaXMucm9vdC5tb2RlbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtRGlhbG9nKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLiQoXCIjZGVsZXRlRm9sZGVyXCIpLmRhdGEoKSwgY2FsbGJhY2s6IGZ1bmN0aW9uIChyZXNwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3ApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJCgnI2RlbGV0ZUZvbGRlclVybCcpLnZhbCgpICsgXCI/cGF0aD1cIiArIGVuY29kZVVSSUNvbXBvbmVudChmb2xkZXIucGF0aCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX1JlcXVlc3RWZXJpZmljYXRpb25Ub2tlbjogJChcImlucHV0W25hbWU9J19fUmVxdWVzdFZlcmlmaWNhdGlvblRva2VuJ11cIikudmFsKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1cy4kZW1pdCgnZGVsZXRlRm9sZGVyJywgZm9sZGVyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvci5yZXNwb25zZVRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlRm9sZGVyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJyNjcmVhdGVGb2xkZXJNb2RhbC1lcnJvcnMnKS5lbXB0eSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbW9kYWwgPSBib290c3RyYXAuTW9kYWwuZ2V0T3JDcmVhdGVJbnN0YW5jZSgkKCcjY3JlYXRlRm9sZGVyTW9kYWwnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGFsLnNob3coKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnI2NyZWF0ZUZvbGRlck1vZGFsIC5tb2RhbC1ib2R5IGlucHV0JykudmFsKCcnKS5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgcmVuYW1lTWVkaWE6IGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKCcjcmVuYW1lTWVkaWFNb2RhbC1lcnJvcnMnKS5lbXB0eSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbW9kYWwgPSBib290c3RyYXAuTW9kYWwuZ2V0T3JDcmVhdGVJbnN0YW5jZSgkKCcjcmVuYW1lTWVkaWFNb2RhbCcpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW9kYWwuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKCcjb2xkLWl0ZW0tbmFtZScpLnZhbChtZWRpYS5uYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnI3JlbmFtZU1lZGlhTW9kYWwgLm1vZGFsLWJvZHkgaW5wdXQnKS52YWwobWVkaWEubmFtZSkuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdEFuZERlbGV0ZU1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWxldGVNZWRpYSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlTWVkaWFMaXN0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZWRpYUxpc3QgPSB0aGlzLnNlbGVjdGVkTWVkaWFzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVkaWFMaXN0Lmxlbmd0aCA8IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlybURpYWxvZyh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4kKFwiI2RlbGV0ZU1lZGlhXCIpLmRhdGEoKSwgY2FsbGJhY2s6IGZ1bmN0aW9uIChyZXNwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3ApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhdGhzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVkaWFMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRocy5wdXNoKG1lZGlhTGlzdFtpXS5tZWRpYVBhdGgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKCcjZGVsZXRlTWVkaWFMaXN0VXJsJykudmFsKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX1JlcXVlc3RWZXJpZmljYXRpb25Ub2tlbjogJChcImlucHV0W25hbWU9J19fUmVxdWVzdFZlcmlmaWNhdGlvblRva2VuJ11cIikudmFsKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aHM6IHBhdGhzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbGYuc2VsZWN0ZWRNZWRpYXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gc2VsZi5tZWRpYUl0ZW1zICYmIHNlbGYubWVkaWFJdGVtcy5pbmRleE9mKHNlbGYuc2VsZWN0ZWRNZWRpYXNbaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tZWRpYUl0ZW1zLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXMuJGVtaXQoJ21lZGlhRGVsZXRlZCcsIHNlbGYuc2VsZWN0ZWRNZWRpYXNbaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWRNZWRpYXMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvci5yZXNwb25zZVRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlTWVkaWFJdGVtOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm1EaWFsb2coe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uJChcIiNkZWxldGVNZWRpYVwiKS5kYXRhKCksIGNhbGxiYWNrOiBmdW5jdGlvbiAocmVzcCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoJyNkZWxldGVNZWRpYVVybCcpLnZhbCgpICsgXCI/cGF0aD1cIiArIGVuY29kZVVSSUNvbXBvbmVudChtZWRpYS5tZWRpYVBhdGgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW46ICQoXCJpbnB1dFtuYW1lPSdfX1JlcXVlc3RWZXJpZmljYXRpb25Ub2tlbiddXCIpLnZhbCgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBzZWxmLm1lZGlhSXRlbXMgJiYgc2VsZi5tZWRpYUl0ZW1zLmluZGV4T2YobWVkaWEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tZWRpYUl0ZW1zLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1cy4kZW1pdCgnbWVkaWFEZWxldGVkJywgbWVkaWEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3NlbGYuc2VsZWN0ZWRNZWRpYSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IucmVzcG9uc2VUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZURyYWdTdGFydDogZnVuY3Rpb24gKG1lZGlhLCBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZpcnN0IHBhcnQgb2YgbW92ZSBtZWRpYSB0byBmb2xkZXI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByZXBhcmUgdGhlIGRhdGEgdGhhdCB3aWxsIGJlIGhhbmRsZWQgYnkgdGhlIGZvbGRlciBjb21wb25lbnQgb24gZHJvcCBldmVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWVkaWFOYW1lcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWFzLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhTmFtZXMucHVzaChpdGVtLm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluIGNhc2UgdGhlIHVzZXIgZHJhZ3MgYW4gdW5zZWxlY3RlZCBpdGVtLCB3ZSBzZWxlY3QgaXQgZmlyc3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNNZWRpYVNlbGVjdGVkKG1lZGlhKSA9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFOYW1lcy5wdXNoKG1lZGlhLm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhcy5wdXNoKG1lZGlhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgZS5kYXRhVHJhbnNmZXIuc2V0RGF0YSgnbWVkaWFOYW1lcycsIEpTT04uc3RyaW5naWZ5KG1lZGlhTmFtZXMpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZS5kYXRhVHJhbnNmZXIuc2V0RGF0YSgnc291cmNlRm9sZGVyJywgdGhpcy5zZWxlY3RlZEZvbGRlci5wYXRoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZS5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlKHRoaXMuZHJhZ0Ryb3BUaHVtYm5haWwsIDEwLCAxMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuZGF0YVRyYW5zZmVyLmVmZmVjdEFsbG93ZWQgPSAnbW92ZSc7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVTY3JvbGxXaGlsZURyYWc6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLmNsaWVudFkgPCAxNTApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxCeSgwLCAtMTApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5jbGllbnRZID4gd2luZG93LmlubmVySGVpZ2h0IC0gMTAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2Nyb2xsQnkoMCwgMTApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBjaGFuZ2VTb3J0OiBmdW5jdGlvbiAobmV3U29ydCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zb3J0QnkgPT0gbmV3U29ydCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3J0QXNjID0gIXRoaXMuc29ydEFzYztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc29ydEFzYyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNvcnRCeSA9IG5ld1NvcnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgJCgnI2NyZWF0ZS1mb2xkZXItbmFtZScpLmtleXByZXNzKGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIga2V5ID0gZS53aGljaDtcclxuICAgICAgICAgICAgICAgIGlmIChrZXkgPT0gMTMpIHsgIC8vIHRoZSBlbnRlciBrZXkgY29kZVxyXG4gICAgICAgICAgICAgICAgICAgICQoJyNtb2RhbEZvb3Rlck9rJykuY2xpY2soKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgJCgnI21vZGFsRm9vdGVyT2snKS5vbignY2xpY2snLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIG5hbWUgPSAkKCcjY3JlYXRlLWZvbGRlci1uYW1lJykudmFsKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgICAgICB1cmw6ICQoJyNjcmVhdGVGb2xkZXJVcmwnKS52YWwoKSArIFwiP3BhdGg9XCIgKyBlbmNvZGVVUklDb21wb25lbnQobWVkaWFBcHAuc2VsZWN0ZWRGb2xkZXIucGF0aCkgKyBcIiZuYW1lPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KG5hbWUpLFxyXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW46ICQoXCJpbnB1dFtuYW1lPSdfX1JlcXVlc3RWZXJpZmljYXRpb25Ub2tlbiddXCIpLnZhbCgpXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBidXMuJGVtaXQoJ2FkZEZvbGRlcicsIG1lZGlhQXBwLnNlbGVjdGVkRm9sZGVyLCBkYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1vZGFsID0gYm9vdHN0cmFwLk1vZGFsLmdldE9yQ3JlYXRlSW5zdGFuY2UoJCgnI2NyZWF0ZUZvbGRlck1vZGFsJykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RhbC5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJyNjcmVhdGVGb2xkZXJNb2RhbC1lcnJvcnMnKS5lbXB0eSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3JNZXNzYWdlID0gSlNPTi5wYXJzZShlcnJvci5yZXNwb25zZVRleHQpLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKCc8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyXCIgcm9sZT1cImFsZXJ0XCI+PC9kaXY+JykudGV4dChlcnJvck1lc3NhZ2UpLmFwcGVuZFRvKCQoJyNjcmVhdGVGb2xkZXJNb2RhbC1lcnJvcnMnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgJCgnI3JlbmFtZU1lZGlhTW9kYWxGb290ZXJPaycpLm9uKCdjbGljaycsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbmV3TmFtZSA9ICQoJyNuZXctaXRlbS1uYW1lJykudmFsKCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgb2xkTmFtZSA9ICQoJyNvbGQtaXRlbS1uYW1lJykudmFsKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG5ld05hbWUgPT09IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRGb2xkZXIgPSBtZWRpYUFwcC5zZWxlY3RlZEZvbGRlci5wYXRoICsgXCIvXCI7XHJcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudEZvbGRlciA9PT0gXCIvXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Rm9sZGVyID0gXCJcIjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgbmV3UGF0aCA9IGN1cnJlbnRGb2xkZXIgKyBuZXdOYW1lO1xyXG4gICAgICAgICAgICAgICAgdmFyIG9sZFBhdGggPSBjdXJyZW50Rm9sZGVyICsgb2xkTmFtZTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAobmV3UGF0aC50b0xvd2VyQ2FzZSgpID09PSBvbGRQYXRoLnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbW9kYWwgPSBib290c3RyYXAuTW9kYWwuZ2V0T3JDcmVhdGVJbnN0YW5jZSgkKCcjcmVuYW1lTWVkaWFNb2RhbCcpKTtcclxuICAgICAgICAgICAgICAgICAgICBtb2RhbC5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAkKCcjcmVuYW1lTWVkaWFVcmwnKS52YWwoKSArIFwiP29sZFBhdGg9XCIgKyBlbmNvZGVVUklDb21wb25lbnQob2xkUGF0aCkgKyBcIiZuZXdQYXRoPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KG5ld1BhdGgpLFxyXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW46ICQoXCJpbnB1dFtuYW1lPSdfX1JlcXVlc3RWZXJpZmljYXRpb25Ub2tlbiddXCIpLnZhbCgpXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbW9kYWwgPSBib290c3RyYXAuTW9kYWwuZ2V0T3JDcmVhdGVJbnN0YW5jZSgkKCcjcmVuYW1lTWVkaWFNb2RhbCcpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW9kYWwuaGlkZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBidXMuJGVtaXQoJ21lZGlhUmVuYW1lZCcsIG5ld05hbWUsIG5ld1BhdGgsIG9sZFBhdGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKCcjcmVuYW1lTWVkaWFNb2RhbC1lcnJvcnMnKS5lbXB0eSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3JNZXNzYWdlID0gSlNPTi5wYXJzZShlcnJvci5yZXNwb25zZVRleHQpLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKCc8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyXCIgcm9sZT1cImFsZXJ0XCI+PC9kaXY+JykudGV4dChlcnJvck1lc3NhZ2UpLmFwcGVuZFRvKCQoJyNyZW5hbWVNZWRpYU1vZGFsLWVycm9ycycpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoZGlzcGxheU1lZGlhQXBwbGljYXRpb24pIHtcclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtZWRpYUFwcCcpLnN0eWxlLmRpc3BsYXkgPSBcIlwiO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAkKGRvY3VtZW50KS50cmlnZ2VyKCdtZWRpYUFwcDpyZWFkeScpO1xyXG5cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvci5yZXNwb25zZVRleHQpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcbiIsIiQoZG9jdW1lbnQpLm9uKCdtZWRpYUFwcDpyZWFkeScsIGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBjaHVua2VkRmlsZVVwbG9hZElkID0gcmFuZG9tVVVJRCgpO1xyXG5cclxuICAgICQoJyNmaWxldXBsb2FkJylcclxuICAgICAgICAuZmlsZXVwbG9hZCh7XHJcbiAgICAgICAgICAgIGRyb3Bab25lOiAkKCcjbWVkaWFBcHAnKSxcclxuICAgICAgICAgICAgbGltaXRDb25jdXJyZW50VXBsb2FkczogMjAsXHJcbiAgICAgICAgICAgIGRhdGFUeXBlOiAnanNvbicsXHJcbiAgICAgICAgICAgIHVybDogJCgnI3VwbG9hZEZpbGVzJykudmFsKCksXHJcbiAgICAgICAgICAgIG1heENodW5rU2l6ZTogTnVtYmVyKCQoJyNtYXhVcGxvYWRDaHVua1NpemUnKS52YWwoKSB8fCAwKSxcclxuICAgICAgICAgICAgZm9ybURhdGE6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHZhciBhbnRpRm9yZ2VyeVRva2VuID0gJChcImlucHV0W25hbWU9X19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW5dXCIpLnZhbCgpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAncGF0aCcsIHZhbHVlOiBtZWRpYUFwcC5zZWxlY3RlZEZvbGRlci5wYXRoIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW4nLCB2YWx1ZTogYW50aUZvcmdlcnlUb2tlbiB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ19fY2h1bmtlZEZpbGVVcGxvYWRJZCcsIHZhbHVlOiBjaHVua2VkRmlsZVVwbG9hZElkIH0sXHJcbiAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGRvbmU6IGZ1bmN0aW9uIChlLCBkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAkLmVhY2goZGF0YS5yZXN1bHQuZmlsZXMsIGZ1bmN0aW9uIChpbmRleCwgZmlsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZmlsZS5lcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZWRpYUFwcC5tZWRpYUl0ZW1zLnB1c2goZmlsZSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLm9uKCdmaWxldXBsb2FkY2h1bmtiZWZvcmVzZW5kJywgKGUsIG9wdGlvbnMpID0+IHtcclxuICAgICAgICAgICAgbGV0IGZpbGUgPSBvcHRpb25zLmZpbGVzWzBdO1xyXG4gICAgICAgICAgICAvLyBIZXJlIHdlIHJlcGxhY2UgdGhlIGJsb2Igd2l0aCBhIEZpbGUgb2JqZWN0IHRvIGVuc3VyZSB0aGUgZmlsZSBuYW1lIGFuZCBvdGhlcnMgYXJlIHByZXNlcnZlZCBmb3IgdGhlIGJhY2tlbmQuXHJcbiAgICAgICAgICAgIG9wdGlvbnMuYmxvYiA9IG5ldyBGaWxlKFxyXG4gICAgICAgICAgICAgICAgW29wdGlvbnMuYmxvYl0sXHJcbiAgICAgICAgICAgICAgICBmaWxlLm5hbWUsXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogZmlsZS50eXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIGxhc3RNb2RpZmllZDogZmlsZS5sYXN0TW9kaWZpZWQsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxufSk7XHJcblxyXG5cclxuJChkb2N1bWVudCkuYmluZCgnZHJhZ292ZXInLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgdmFyIGR0ID0gZS5vcmlnaW5hbEV2ZW50LmRhdGFUcmFuc2ZlcjtcclxuICAgIGlmIChkdC50eXBlcyAmJiAoZHQudHlwZXMuaW5kZXhPZiA/IGR0LnR5cGVzLmluZGV4T2YoJ0ZpbGVzJykgIT0gLTEgOiBkdC50eXBlcy5jb250YWlucygnRmlsZXMnKSkpIHtcclxuICAgICAgICB2YXIgZHJvcFpvbmUgPSAkKCcjY3VzdG9tZHJvcHpvbmUnKSxcclxuICAgICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5kcm9wWm9uZVRpbWVvdXQ7XHJcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGRyb3Bab25lLmFkZENsYXNzKCdpbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgaG92ZXJlZERyb3Bab25lID0gJChlLnRhcmdldCkuY2xvc2VzdChkcm9wWm9uZSk7XHJcbiAgICAgICAgd2luZG93LmRyb3Bab25lVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB3aW5kb3cuZHJvcFpvbmVUaW1lb3V0ID0gbnVsbDtcclxuICAgICAgICAgICAgZHJvcFpvbmUucmVtb3ZlQ2xhc3MoJ2luJyk7XHJcbiAgICAgICAgfSwgMTAwKTtcclxuICAgIH1cclxufSk7XHJcbiIsIi8vIDxmb2xkZXI+IGNvbXBvbmVudFxyXG5WdWUuY29tcG9uZW50KCdmb2xkZXInLCB7XHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgICAgIDxsaSA6Y2xhc3M9XCJ7c2VsZWN0ZWQ6IGlzU2VsZWN0ZWR9XCIgXHJcbiAgICAgICAgICAgICAgICB2LW9uOmRyYWdsZWF2ZS5wcmV2ZW50ID0gXCJoYW5kbGVEcmFnTGVhdmUoJGV2ZW50KTtcIiBcclxuICAgICAgICAgICAgICAgIHYtb246ZHJhZ292ZXIucHJldmVudC5zdG9wPVwiaGFuZGxlRHJhZ092ZXIoJGV2ZW50KTtcIiBcclxuICAgICAgICAgICAgICAgIHYtb246ZHJvcC5wcmV2ZW50LnN0b3AgPSBcIm1vdmVNZWRpYVRvRm9sZGVyKG1vZGVsLCAkZXZlbnQpXCIgPlxyXG4gICAgICAgICAgICA8ZGl2IDpjbGFzcz1cIntmb2xkZXJob3ZlcmVkOiBpc0hvdmVyZWQgLCB0cmVlcm9vdDogbGV2ZWwgPT0gMX1cIiA+XHJcbiAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgOnN0eWxlPVwieyBwYWRkaW5nJHtkb2N1bWVudC5kaXIgPT0gXCJsdHJcIiA/IFwiTGVmdFwiIDogXCJSaWdodFwifTpwYWRkaW5nICsgJ3B4JyB9XCIgdi1vbjpjbGljaz1cInNlbGVjdFwiICBkcmFnZ2FibGU9XCJmYWxzZVwiIGNsYXNzPVwiZm9sZGVyLW1lbnUtaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiB2LW9uOmNsaWNrLnN0b3A9XCJ0b2dnbGVcIiBjbGFzcz1cImV4cGFuZFwiIDpjbGFzcz1cIntvcGVuZWQ6IG9wZW4sIGNsb3NlZDogIW9wZW4sIGVtcHR5OiBlbXB0eX1cIj48aSB2LWlmPVwib3BlblwiIGNsYXNzPVwiZmEtc29saWQgZmEtY2hldnJvbi0ke2RvY3VtZW50LmRpciA9PSBcImx0clwiID8gXCJyaWdodFwiIDogXCJsZWZ0XCJ9XCI+PC9pPjwvc3Bhbj4gXHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb2xkZXItbmFtZSBtcy0yXCI+e3ttb2RlbC5uYW1lfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIGZvbGRlci1hY3Rpb25zXCIgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdi1jbG9hayBocmVmPVwiamF2YXNjcmlwdDo7XCIgY2xhc3M9XCJidG4gYnRuLXNtXCIgdi1vbjpjbGljaz1cImNyZWF0ZUZvbGRlclwiIHYtaWY9XCJpc1NlbGVjdGVkIHx8IGlzUm9vdFwiPjxpIGNsYXNzPVwiZmEtc29saWQgZmEtcGx1c1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB2LWNsb2FrIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiBjbGFzcz1cImJ0biBidG4tc21cIiB2LW9uOmNsaWNrPVwiZGVsZXRlRm9sZGVyXCIgdi1pZj1cImlzU2VsZWN0ZWQgJiYgIWlzUm9vdFwiPjxpIGNsYXNzPVwiZmEtc29saWQgZmEtdHJhc2hcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9hPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG9sIHYtc2hvdz1cIm9wZW5cIj5cclxuICAgICAgICAgICAgICAgIDxmb2xkZXIgdi1mb3I9XCJmb2xkZXIgaW4gY2hpbGRyZW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6a2V5PVwiZm9sZGVyLnBhdGhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6bW9kZWw9XCJmb2xkZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6c2VsZWN0ZWQtaW4tbWVkaWEtYXBwPVwic2VsZWN0ZWRJbk1lZGlhQXBwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgOmxldmVsPVwibGV2ZWwgKyAxXCI+XHJcbiAgICAgICAgICAgICAgICA8L2ZvbGRlcj5cclxuICAgICAgICAgICAgPC9vbD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIGAsXHJcbiAgICBwcm9wczoge1xyXG4gICAgICAgIG1vZGVsOiBPYmplY3QsXHJcbiAgICAgICAgc2VsZWN0ZWRJbk1lZGlhQXBwOiBPYmplY3QsXHJcbiAgICAgICAgbGV2ZWw6IE51bWJlclxyXG4gICAgfSxcclxuICAgIGRhdGE6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBvcGVuOiBmYWxzZSxcclxuICAgICAgICAgICAgY2hpbGRyZW46IG51bGwsIC8vIG5vdCBpbml0aWFsaXplZCBzdGF0ZSAoZm9yIGxhenktbG9hZGluZylcclxuICAgICAgICAgICAgcGFyZW50OiBudWxsLFxyXG4gICAgICAgICAgICBpc0hvdmVyZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBwYWRkaW5nOiAwXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIGNvbXB1dGVkOiB7XHJcbiAgICAgICAgZW1wdHk6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuICF0aGlzLmNoaWxkcmVuIHx8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09IDA7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBpc1NlbGVjdGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAodGhpcy5zZWxlY3RlZEluTWVkaWFBcHAubmFtZSA9PSB0aGlzLm1vZGVsLm5hbWUpICYmICh0aGlzLnNlbGVjdGVkSW5NZWRpYUFwcC5wYXRoID09IHRoaXMubW9kZWwucGF0aCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBpc1Jvb3Q6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kZWwucGF0aCA9PT0gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIG1vdW50ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoKHRoaXMuaXNSb290ID09IGZhbHNlKSAmJiAodGhpcy5pc0FuY2VzdG9yT2ZTZWxlY3RlZEZvbGRlcigpKSl7XHJcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBhZGRpbmcgPSB0aGlzLmxldmVsIDwgMyA/ICAxNiA6IDE2ICsgKHRoaXMubGV2ZWwgKiA4KTtcclxuICAgIH0sXHJcbiAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGJ1cy4kb24oJ2RlbGV0ZUZvbGRlcicsIGZ1bmN0aW9uIChmb2xkZXIpIHtcclxuICAgICAgICAgICAgaWYgKHNlbGYuY2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IHNlbGYuY2hpbGRyZW4gJiYgc2VsZi5jaGlsZHJlbi5pbmRleE9mKGZvbGRlcilcclxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDEpXHJcbiAgICAgICAgICAgICAgICAgICAgYnVzLiRlbWl0KCdmb2xkZXJEZWxldGVkJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgYnVzLiRvbignYWRkRm9sZGVyJywgZnVuY3Rpb24gKHRhcmdldCwgZm9sZGVyKSB7XHJcbiAgICAgICAgICAgIGlmIChzZWxmLm1vZGVsID09IHRhcmdldCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuY2hpbGRyZW4gIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZWxmLmNoaWxkcmVuLnB1c2goZm9sZGVyKTtcclxuICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBmb2xkZXIucGFyZW50ID0gc2VsZi5tb2RlbDtcclxuICAgICAgICAgICAgICAgIGJ1cy4kZW1pdCgnZm9sZGVyQWRkZWQnLCBmb2xkZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9LFxyXG4gICAgbWV0aG9kczoge1xyXG4gICAgICAgIGlzQW5jZXN0b3JPZlNlbGVjdGVkRm9sZGVyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHBhcmVudEZvbGRlciA9IG1lZGlhQXBwLnNlbGVjdGVkRm9sZGVyO1xyXG4gICAgICAgICAgICB3aGlsZSAocGFyZW50Rm9sZGVyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50Rm9sZGVyLnBhdGggPT0gdGhpcy5tb2RlbC5wYXRoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHBhcmVudEZvbGRlciA9IHBhcmVudEZvbGRlci5wYXJlbnQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRvZ2dsZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLm9wZW4gPSAhdGhpcy5vcGVuO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5vcGVuICYmICF0aGlzLmNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRDaGlsZHJlbigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZWxlY3Q6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdmb2xkZXJTZWxlY3RlZCcsIHRoaXMubW9kZWwpO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRDaGlsZHJlbigpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY3JlYXRlRm9sZGVyOiBmdW5jdGlvbiAoKSB7ICAgICAgICAgICBcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdjcmVhdGVGb2xkZXJSZXF1ZXN0ZWQnKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRlbGV0ZUZvbGRlcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBidXMuJGVtaXQoJ2RlbGV0ZUZvbGRlclJlcXVlc3RlZCcpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbG9hZENoaWxkcmVuOiBmdW5jdGlvbiAoKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICAgICAgaWYgKHRoaXMub3BlbiA9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgdXJsOiAkKCcjZ2V0Rm9sZGVyc1VybCcpLnZhbCgpICsgXCI/cGF0aD1cIiArIGVuY29kZVVSSUNvbXBvbmVudChzZWxmLm1vZGVsLnBhdGgpLFxyXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcclxuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGlsZHJlbiA9IGRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGMucGFyZW50ID0gc2VsZi5tb2RlbDtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZW10cHkgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yLnJlc3BvbnNlVGV4dCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgaGFuZGxlRHJhZ092ZXI6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNIb3ZlcmVkID0gdHJ1ZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGhhbmRsZURyYWdMZWF2ZTogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgdGhpcy5pc0hvdmVyZWQgPSBmYWxzZTsgICAgICAgICAgICBcclxuICAgICAgICB9LFxyXG4gICAgICAgIG1vdmVNZWRpYVRvRm9sZGVyOiBmdW5jdGlvbiAoZm9sZGVyLCBlKSB7XHJcblxyXG4gICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgICAgIHNlbGYuaXNIb3ZlcmVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICB2YXIgbWVkaWFOYW1lcyA9IEpTT04ucGFyc2UoZS5kYXRhVHJhbnNmZXIuZ2V0RGF0YSgnbWVkaWFOYW1lcycpKTsgXHJcblxyXG4gICAgICAgICAgICBpZiAobWVkaWFOYW1lcy5sZW5ndGggPCAxKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBzb3VyY2VGb2xkZXIgPSBlLmRhdGFUcmFuc2Zlci5nZXREYXRhKCdzb3VyY2VGb2xkZXInKTtcclxuICAgICAgICAgICAgdmFyIHRhcmdldEZvbGRlciA9IGZvbGRlci5wYXRoO1xyXG5cclxuICAgICAgICAgICAgaWYgKHNvdXJjZUZvbGRlciA9PT0gJycpIHtcclxuICAgICAgICAgICAgICAgIHNvdXJjZUZvbGRlciA9ICdyb290JztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRhcmdldEZvbGRlciA9PT0gJycpIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldEZvbGRlciA9ICdyb290JztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHNvdXJjZUZvbGRlciA9PT0gdGFyZ2V0Rm9sZGVyKSB7XHJcbiAgICAgICAgICAgICAgICBhbGVydCgkKCcjc2FtZUZvbGRlck1lc3NhZ2UnKS52YWwoKSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbmZpcm1EaWFsb2coey4uLiQoXCIjbW92ZU1lZGlhXCIpLmRhdGEoKSwgY2FsbGJhY2s6IGZ1bmN0aW9uIChyZXNwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzcCkge1xyXG4gICAgICAgICAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJCgnI21vdmVNZWRpYUxpc3RVcmwnKS52YWwoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fUmVxdWVzdFZlcmlmaWNhdGlvblRva2VuOiAkKFwiaW5wdXRbbmFtZT0nX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW4nXVwiKS52YWwoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhTmFtZXM6IG1lZGlhTmFtZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VGb2xkZXI6IHNvdXJjZUZvbGRlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldEZvbGRlcjogdGFyZ2V0Rm9sZGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1cy4kZW1pdCgnbWVkaWFMaXN0TW92ZWQnKTsgLy8gTWVkaWFBcHAgd2lsbCBsaXN0ZW4gdG8gdGhpcywgYW5kIHRoZW4gaXQgd2lsbCByZWxvYWQgcGFnZSBzbyB0aGUgbW92ZWQgbWVkaWFzIHdvbid0IGJlIHRoZXJlIGFueW1vcmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvci5yZXNwb25zZVRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzLiRlbWl0KCdtZWRpYUxpc3RNb3ZlZCcsIGVycm9yLnJlc3BvbnNlVGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfX0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcbn0pO1xyXG4iLCIvLyA8bWVkaWEtaXRlbXMtZ3JpZD4gY29tcG9uZW50XHJcblZ1ZS5jb21wb25lbnQoJ21lZGlhLWl0ZW1zLWdyaWQnLCB7XHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgICAgIDxvbCBjbGFzcz1cInJvdyBtZWRpYS1pdGVtcy1ncmlkXCI+XHJcbiAgICAgICAgICAgICAgICA8bGkgdi1mb3I9XCJtZWRpYSBpbiBmaWx0ZXJlZE1lZGlhSXRlbXNcIlxyXG4gICAgICAgICAgICAgICAgICAgIDprZXk9XCJtZWRpYS5uYW1lXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZWRpYS1pdGVtIG1lZGlhLWNvbnRhaW5lci1tYWluLWxpc3QtaXRlbSBjYXJkIHAtMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgOnN0eWxlPVwie3dpZHRoOiB0aHVtYlNpemUgKyAyICsgJ3B4J31cIlxyXG4gICAgICAgICAgICAgICAgICAgIDpjbGFzcz1cIntzZWxlY3RlZDogaXNNZWRpYVNlbGVjdGVkKG1lZGlhKX1cIlxyXG4gICAgICAgICAgICAgICAgICAgIHYtb246Y2xpY2suc3RvcD1cInRvZ2dsZVNlbGVjdGlvbk9mTWVkaWEobWVkaWEpXCJcclxuICAgICAgICAgICAgICAgICAgICBkcmFnZ2FibGU9XCJ0cnVlXCIgdi1vbjpkcmFnc3RhcnQ9XCJkcmFnU3RhcnQobWVkaWEsICRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGh1bWItY29udGFpbmVyXCIgOnN0eWxlPVwie2hlaWdodDogdGh1bWJTaXplICsncHgnfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHYtaWY9XCJtZWRpYS5taW1lLnN0YXJ0c1dpdGgoJ2ltYWdlJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpzcmM9XCJidWlsZE1lZGlhVXJsKG1lZGlhLnVybCwgdGh1bWJTaXplKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmRhdGEtbWltZT1cIm1lZGlhLm1pbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpzdHlsZT1cInttYXhIZWlnaHQ6IHRodW1iU2l6ZSArJ3B4JywgbWF4V2lkdGg6IHRodW1iU2l6ZSArJ3B4J31cIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSB2LWVsc2UgY2xhc3M9XCJmYS1yZWd1bGFyIGZhLWZpbGUgZGlzcGxheS0xXCIgOmRhdGEtbWltZT1cIm1lZGlhLm1pbWVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVkaWEtY29udGFpbmVyLW1haW4taXRlbS10aXRsZSBjYXJkLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBidG4tc20gZmxvYXQtZW5kIGlubGluZS1tZWRpYS1idXR0b24gZWRpdC1idXR0b25cIiB2LW9uOmNsaWNrLnN0b3A9XCJyZW5hbWVNZWRpYShtZWRpYSlcIj48aSBjbGFzcz1cImZhLXNvbGlkIGZhLWVkaXRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IGJ0bi1zbSBmbG9hdC1lbmQgaW5saW5lLW1lZGlhLWJ1dHRvbiBkZWxldGUtYnV0dG9uXCIgdi1vbjpjbGljay5zdG9wPVwiZGVsZXRlTWVkaWEobWVkaWEpXCI+PGkgY2xhc3M9XCJmYS1zb2xpZCBmYS10cmFzaFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIDpocmVmPVwibWVkaWEudXJsXCIgdGFyZ2V0PVwiX2JsYW5rXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IGJ0bi1zbSBmbG9hdC1lbmQgaW5saW5lLW1lZGlhLWJ1dHRvbiB2aWV3LWJ1dHRvblwiXCI+PGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1kb3dubG9hZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWVkaWEtZmlsZW5hbWUgY2FyZC10ZXh0IHNtYWxsXCIgOnRpdGxlPVwibWVkaWEubmFtZVwiPnt7IG1lZGlhLm5hbWUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICA8L29sPlxyXG4gICAgICAgIGAsXHJcbiAgICBkYXRhOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgVDoge31cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgcHJvcHM6IHtcclxuICAgICAgICBmaWx0ZXJlZE1lZGlhSXRlbXM6IEFycmF5LFxyXG4gICAgICAgIHNlbGVjdGVkTWVkaWFzOiBBcnJheSxcclxuICAgICAgICB0aHVtYlNpemU6IE51bWJlclxyXG4gICAgfSxcclxuICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgLy8gcmV0cmlldmluZyBsb2NhbGl6ZWQgc3RyaW5ncyBmcm9tIHZpZXdcclxuICAgICAgICBzZWxmLlQuZWRpdEJ1dHRvbiA9ICQoJyN0LWVkaXQtYnV0dG9uJykudmFsKCk7XHJcbiAgICAgICAgc2VsZi5ULmRlbGV0ZUJ1dHRvbiA9ICQoJyN0LWRlbGV0ZS1idXR0b24nKS52YWwoKTtcclxuICAgIH0sXHJcbiAgICBtZXRob2RzOiB7XHJcbiAgICAgICAgaXNNZWRpYVNlbGVjdGVkOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuc2VsZWN0ZWRNZWRpYXMuc29tZShmdW5jdGlvbiAoZWxlbWVudCwgaW5kZXgsIGFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudC51cmwudG9Mb3dlckNhc2UoKSA9PT0gbWVkaWEudXJsLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgYnVpbGRNZWRpYVVybDogZnVuY3Rpb24gKHVybCwgdGh1bWJTaXplKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1cmwgKyAodXJsLmluZGV4T2YoJz8nKSA9PSAtMSA/ICc/JyA6ICcmJykgKyAnd2lkdGg9JyArIHRodW1iU2l6ZSArICcmaGVpZ2h0PScgKyB0aHVtYlNpemU7XHJcbiAgICAgICAgfSxcclxuICAgICAgICB0b2dnbGVTZWxlY3Rpb25PZk1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdtZWRpYVRvZ2dsZVJlcXVlc3RlZCcsIG1lZGlhKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHJlbmFtZU1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdyZW5hbWVNZWRpYVJlcXVlc3RlZCcsIG1lZGlhKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRlbGV0ZU1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdkZWxldGVNZWRpYVJlcXVlc3RlZCcsIG1lZGlhKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRyYWdTdGFydDogZnVuY3Rpb24gKG1lZGlhLCBlKSB7XHJcbiAgICAgICAgICAgIGJ1cy4kZW1pdCgnbWVkaWFEcmFnU3RhcnRSZXF1ZXN0ZWQnLCBtZWRpYSwgZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KTtcclxuIiwiLy8gPG1lZGlhLWl0ZW1zLXRhYmxlPiBjb21wb25lbnRcclxuVnVlLmNvbXBvbmVudCgnbWVkaWEtaXRlbXMtdGFibGUnLCB7XHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIG1lZGlhLWl0ZW1zLXRhYmxlIG0tMFwiPlxyXG4gICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJoZWFkZXItcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCIgY2xhc3M9XCJ0aHVtYm5haWwtY29sdW1uXCI+e3sgVC5pbWFnZUhlYWRlciB9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCIgdi1vbjpjbGljaz1cImNoYW5nZVNvcnQoJ25hbWUnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgIHt7IFQubmFtZUhlYWRlciB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgPHNvcnQtaW5kaWNhdG9yIGNvbG5hbWU9XCJuYW1lXCIgOnNlbGVjdGVkY29sbmFtZT1cInNvcnRCeVwiIDphc2M9XCJzb3J0QXNjXCI+PC9zb3J0LWluZGljYXRvcj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiIHYtb246Y2xpY2s9XCJjaGFuZ2VTb3J0KCdsYXN0TW9kaWZ5JylcIj4gXHJcbiAgICAgICAgICAgICAgICAgICAgICAge3sgVC5sYXN0TW9kaWZ5SGVhZGVyIH19IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgPHNvcnQtaW5kaWNhdG9yIGNvbG5hbWU9XCJsYXN0TW9kaWZ5XCIgOnNlbGVjdGVkY29sbmFtZT1cInNvcnRCeVwiIDphc2M9XCJzb3J0QXNjXCI+PC9zb3J0LWluZGljYXRvcj4gXHJcbiAgICAgICAgICAgICAgICAgICAgPC90aD4gXHJcbiAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCIgdi1vbjpjbGljaz1cImNoYW5nZVNvcnQoJ3NpemUnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9wdGlvbmFsLWNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgVC5zaXplSGVhZGVyIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICA8c29ydC1pbmRpY2F0b3IgY29sbmFtZT1cInNpemVcIiA6c2VsZWN0ZWRjb2xuYW1lPVwic29ydEJ5XCIgOmFzYz1cInNvcnRBc2NcIj48L3NvcnQtaW5kaWNhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIiB2LW9uOmNsaWNrPVwiY2hhbmdlU29ydCgnbWltZScpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3B0aW9uYWwtY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFQudHlwZUhlYWRlciB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgPHNvcnQtaW5kaWNhdG9yIGNvbG5hbWU9XCJtaW1lXCIgOnNlbGVjdGVkY29sbmFtZT1cInNvcnRCeVwiIDphc2M9XCJzb3J0QXNjXCI+PC9zb3J0LWluZGljYXRvcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRyIHYtZm9yPVwibWVkaWEgaW4gZmlsdGVyZWRNZWRpYUl0ZW1zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1lZGlhLWl0ZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDpjbGFzcz1cIntzZWxlY3RlZDogaXNNZWRpYVNlbGVjdGVkKG1lZGlhKX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHYtb246Y2xpY2suc3RvcD1cInRvZ2dsZVNlbGVjdGlvbk9mTWVkaWEobWVkaWEpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBkcmFnZ2FibGU9XCJ0cnVlXCIgdi1vbjpkcmFnc3RhcnQ9XCJkcmFnU3RhcnQobWVkaWEsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDprZXk9XCJtZWRpYS5uYW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidGh1bWJuYWlsLWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbWctd3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHYtaWY9XCJtZWRpYS5taW1lLnN0YXJ0c1dpdGgoJ2ltYWdlJylcIiBkcmFnZ2FibGU9XCJmYWxzZVwiIDpzcmM9XCJidWlsZE1lZGlhVXJsKG1lZGlhLnVybCwgdGh1bWJTaXplKVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIHYtZWxzZSBjbGFzcz1cImZhLXNvbGlkIGZhLWZpbGUgZmEtbGdcIiA6ZGF0YS1taW1lPVwibWVkaWEubWltZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lZGlhLW5hbWUtY2VsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnJlYWstd29yZFwiPiB7eyBtZWRpYS5uYW1lIH19IDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbnMtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgY2xhc3M9XCJidG4gYnRuLWxpbmsgYnRuLXNtIG1lLTEgZWRpdC1idXR0b25cIiB2LW9uOmNsaWNrLnN0b3A9XCJyZW5hbWVNZWRpYShtZWRpYSlcIj4ge3sgVC5lZGl0QnV0dG9uIH19IDwvYSA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgY2xhc3M9XCJidG4gYnRuLWxpbmsgYnRuLXNtIGRlbGV0ZS1idXR0b25cIiB2LW9uOmNsaWNrLnN0b3A9XCJkZWxldGVNZWRpYShtZWRpYSlcIj4ge3sgVC5kZWxldGVCdXR0b24gfX0gPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgOmhyZWY9XCJtZWRpYS51cmxcIiB0YXJnZXQ9XCJfYmxhbmtcIiBjbGFzcz1cImJ0biBidG4tbGluayBidG4tc20gdmlldy1idXR0b25cIj4ge3sgVC52aWV3QnV0dG9uIH19IDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNvbFwiPiB7eyBwcmludERhdGVUaW1lKG1lZGlhLmxhc3RNb2RpZnkpIH19IDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jb2wgb3B0aW9uYWwtY29sXCI+IHt7IGlzTmFOKG1lZGlhLnNpemUpPyAwIDogTWF0aC5yb3VuZChtZWRpYS5zaXplIC8gMTAyNCkgfX0gS0I8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY29sIG9wdGlvbmFsLWNvbFwiPnt7IG1lZGlhLm1pbWUgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgYCxcclxuICAgIGRhdGE6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBUOiB7fVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBwcm9wczoge1xyXG4gICAgICAgIHNvcnRCeTogU3RyaW5nLFxyXG4gICAgICAgIHNvcnRBc2M6IEJvb2xlYW4sXHJcbiAgICAgICAgZmlsdGVyZWRNZWRpYUl0ZW1zOiBBcnJheSxcclxuICAgICAgICBzZWxlY3RlZE1lZGlhczogQXJyYXksXHJcbiAgICAgICAgdGh1bWJTaXplOiBOdW1iZXJcclxuICAgIH0sXHJcbiAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHNlbGYuVC5pbWFnZUhlYWRlciA9ICQoJyN0LWltYWdlLWhlYWRlcicpLnZhbCgpO1xyXG4gICAgICAgIHNlbGYuVC5uYW1lSGVhZGVyID0gJCgnI3QtbmFtZS1oZWFkZXInKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQubGFzdE1vZGlmeUhlYWRlciA9ICQoJyN0LWxhc3RNb2RpZnktaGVhZGVyJykudmFsKCk7XHJcbiAgICAgICAgc2VsZi5ULnNpemVIZWFkZXIgPSAkKCcjdC1zaXplLWhlYWRlcicpLnZhbCgpO1xyXG4gICAgICAgIHNlbGYuVC50eXBlSGVhZGVyID0gJCgnI3QtdHlwZS1oZWFkZXInKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQuZWRpdEJ1dHRvbiA9ICQoJyN0LWVkaXQtYnV0dG9uJykudmFsKCk7XHJcbiAgICAgICAgc2VsZi5ULmRlbGV0ZUJ1dHRvbiA9ICQoJyN0LWRlbGV0ZS1idXR0b24nKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQudmlld0J1dHRvbiA9ICQoJyN0LXZpZXctYnV0dG9uJykudmFsKCk7XHJcbiAgICB9LFxyXG4gICAgbWV0aG9kczoge1xyXG4gICAgICAgIGlzTWVkaWFTZWxlY3RlZDogZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB0aGlzLnNlbGVjdGVkTWVkaWFzLnNvbWUoZnVuY3Rpb24gKGVsZW1lbnQsIGluZGV4LCBhcnJheSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQudXJsLnRvTG93ZXJDYXNlKCkgPT09IG1lZGlhLnVybC50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGJ1aWxkTWVkaWFVcmw6IGZ1bmN0aW9uICh1cmwsIHRodW1iU2l6ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdXJsICsgKHVybC5pbmRleE9mKCc/JykgPT0gLTEgPyAnPycgOiAnJicpICsgJ3dpZHRoPScgKyB0aHVtYlNpemUgKyAnJmhlaWdodD0nICsgdGh1bWJTaXplO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2hhbmdlU29ydDogZnVuY3Rpb24gKG5ld1NvcnQpIHtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdzb3J0Q2hhbmdlUmVxdWVzdGVkJywgbmV3U29ydCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICB0b2dnbGVTZWxlY3Rpb25PZk1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdtZWRpYVRvZ2dsZVJlcXVlc3RlZCcsIG1lZGlhKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHJlbmFtZU1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdyZW5hbWVNZWRpYVJlcXVlc3RlZCcsIG1lZGlhKTsgICAgICAgICAgICBcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRlbGV0ZU1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdkZWxldGVNZWRpYVJlcXVlc3RlZCcsIG1lZGlhKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRyYWdTdGFydDogZnVuY3Rpb24gKG1lZGlhLCBlKSB7XHJcbiAgICAgICAgICAgIGJ1cy4kZW1pdCgnbWVkaWFEcmFnU3RhcnRSZXF1ZXN0ZWQnLCBtZWRpYSwgZSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBwcmludERhdGVUaW1lOiBmdW5jdGlvbiAoZGF0ZW1pbGxpcyl7XHJcbiAgICAgICAgICAgIHZhciBkID0gbmV3IERhdGUoZGF0ZW1pbGxpcyk7XHJcbiAgICAgICAgICAgIHJldHVybiBkLnRvTG9jYWxlU3RyaW5nKCk7ICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KTtcclxuIiwiLy8gVGhpcyBjb21wb25lbnQgcmVjZWl2ZXMgYSBsaXN0IG9mIGFsbCB0aGUgaXRlbXMsIHVucGFnZWQuXHJcbi8vIEFzIHRoZSB1c2VyIGludGVyYWN0cyB3aXRoIHRoZSBwYWdlciwgaXQgcmFpc2VzIGV2ZW50cyB3aXRoIHRoZSBpdGVtcyBpbiB0aGUgY3VycmVudCBwYWdlLlxyXG4vLyBJdCdzIHRoZSBwYXJlbnQncyByZXNwb25zaWJpbGl0eSB0byBsaXN0ZW4gZm9yIHRoZXNlIGV2ZW50cyBhbmQgZGlzcGxheSB0aGUgcmVjZWl2ZWQgaXRlbXNcclxuLy8gPHBhZ2VyPiBjb21wb25lbnRcclxuVnVlLmNvbXBvbmVudCgncGFnZXInLCB7XHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgPGRpdj5cclxuICAgICAgICA8bmF2IGlkPVwibWVkaWEtcGFnZXJcIiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCIgYXJpYS1sYWJlbD1cIlBhZ2luYXRpb24gTmF2aWdhdGlvblwiIHJvbGU9XCJuYXZpZ2F0aW9uXCIgOmRhdGEtY29tcHV0ZWQtdHJpZ2dlcj1cIml0ZW1zSW5DdXJyZW50UGFnZS5sZW5ndGhcIj5cclxuICAgICAgICAgICAgPHVsIGNsYXNzPVwicGFnaW5hdGlvbiBwYWdpbmF0aW9uLXNtIG0tMFwiPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicGFnZS1pdGVtIG1lZGlhLWZpcnN0LWJ1dHRvblwiIDpjbGFzcz1cIntkaXNhYmxlZCA6ICFjYW5Eb0ZpcnN0fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwicGFnZS1saW5rXCIgaHJlZj1cIiNcIiA6dGFiaW5kZXg9XCJjYW5Eb0ZpcnN0ID8gMCA6IC0xXCIgdi1vbjpjbGljaz1cImdvRmlyc3RcIj57eyBULnBhZ2VyRmlyc3RCdXR0b24gfX08L2E+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicGFnZS1pdGVtXCIgOmNsYXNzPVwie2Rpc2FibGVkIDogIWNhbkRvUHJldn1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cInBhZ2UtbGlua1wiIGhyZWY9XCIjXCIgOnRhYmluZGV4PVwiY2FuRG9QcmV2ID8gMCA6IC0xXCIgdi1vbjpjbGljaz1cInByZXZpb3VzXCI+e3sgVC5wYWdlclByZXZpb3VzQnV0dG9uIH19PC9hPlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSB2LWlmPVwibGluayAhPT0gLTFcIiBjbGFzcz1cInBhZ2UtaXRlbSBwYWdlLW51bWJlclwiICA6Y2xhc3M9XCJ7YWN0aXZlIDogY3VycmVudCA9PSBsaW5rIC0gMX1cIiB2LWZvcj1cImxpbmsgaW4gcGFnZUxpbmtzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJwYWdlLWxpbmtcIiBocmVmPVwiI1wiIHYtb246Y2xpY2s9XCJnb1RvKGxpbmsgLSAxKVwiIDphcmlhLWxhYmVsPVwiJ0dvdG8gUGFnZScgKyBsaW5rXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7bGlua319XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHYtaWY9XCJjdXJyZW50ID09IGxpbmsgLTFcIiBjbGFzcz1cInZpc3VhbGx5LWhpZGRlblwiPihjdXJyZW50KTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicGFnZS1pdGVtXCIgOmNsYXNzPVwie2Rpc2FibGVkIDogIWNhbkRvTmV4dH1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cInBhZ2UtbGlua1wiIGhyZWY9XCIjXCIgOnRhYmluZGV4PVwiY2FuRG9OZXh0ID8gMCA6IC0xXCIgdi1vbjpjbGljaz1cIm5leHRcIj57eyBULnBhZ2VyTmV4dEJ1dHRvbiB9fTwvYT5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJwYWdlLWl0ZW0gbWVkaWEtbGFzdC1idXR0b25cIiA6Y2xhc3M9XCJ7ZGlzYWJsZWQgOiAhY2FuRG9MYXN0fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwicGFnZS1saW5rXCIgaHJlZj1cIiNcIiA6dGFiaW5kZXg9XCJjYW5Eb0xhc3QgPyAwIDogLTFcIiB2LW9uOmNsaWNrPVwiZ29MYXN0XCI+e3sgVC5wYWdlckxhc3RCdXR0b24gfX08L2E+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicGFnZS1pdGVtIG1zLTQgcGFnZS1zaXplLWluZm9cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwYWdlLWxpbmsgZGlzYWJsZWQgdGV4dC1tdXRlZCBwYWdlLXNpemUtbGFiZWxcIj57eyBULnBhZ2VyUGFnZVNpemVMYWJlbCB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBpZD1cInBhZ2VTaXplU2VsZWN0XCIgY2xhc3M9XCJwYWdlLWxpbmtcIiB2LW1vZGVsPVwicGFnZVNpemVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdi1mb3I9XCJvcHRpb24gaW4gcGFnZVNpemVPcHRpb25zXCIgdi1iaW5kOnZhbHVlPVwib3B0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tvcHRpb259fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L25hdj5cclxuICAgICAgICA8bmF2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgPHVsIGNsYXNzPVwicGFnaW5hdGlvbiBwYWdpbmF0aW9uLXNtIG0tMCBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJwYWdlLWl0ZW0gbXMtNCBwYWdlLWluZm9cIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhZ2UtbGluayBkaXNhYmxlZCB0ZXh0LW11dGVkIFwiPnt7IFQucGFnZXJQYWdlTGFiZWwgfX0ge3tjdXJyZW50ICsgMX19L3t7dG90YWxQYWdlc319PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInBhZ2UtaXRlbSBtcy00IHRvdGFsLWluZm9cIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhZ2UtbGluayBkaXNhYmxlZCB0ZXh0LW11dGVkIFwiPiB7eyBULnBhZ2VyVG90YWxMYWJlbCB9fSB7e3RvdGFsfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbmF2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIGAsXHJcbiAgICBwcm9wczoge1xyXG4gICAgICAgIHNvdXJjZUl0ZW1zOiBBcnJheVxyXG4gICAgfSxcclxuICAgIGRhdGE6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBwYWdlU2l6ZTogMTAsXHJcbiAgICAgICAgICAgIHBhZ2VTaXplT3B0aW9uczogWzEwLCAzMCwgNTAsIDEwMF0sXHJcbiAgICAgICAgICAgIGN1cnJlbnQ6IDAsXHJcbiAgICAgICAgICAgIFQ6IHt9XHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcbiAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgICAgICAvLyByZXRyaWV2aW5nIGxvY2FsaXplZCBzdHJpbmdzIGZyb20gdmlld1xyXG4gICAgICAgIHNlbGYuVC5wYWdlckZpcnN0QnV0dG9uID0gJCgnI3QtcGFnZXItZmlyc3QtYnV0dG9uJykudmFsKCk7XHJcbiAgICAgICAgc2VsZi5ULnBhZ2VyUHJldmlvdXNCdXR0b24gPSAkKCcjdC1wYWdlci1wcmV2aW91cy1idXR0b24nKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQucGFnZXJOZXh0QnV0dG9uID0gJCgnI3QtcGFnZXItbmV4dC1idXR0b24nKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQucGFnZXJMYXN0QnV0dG9uID0gJCgnI3QtcGFnZXItbGFzdC1idXR0b24nKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQucGFnZXJQYWdlU2l6ZUxhYmVsID0gJCgnI3QtcGFnZXItcGFnZS1zaXplLWxhYmVsJykudmFsKCk7XHJcbiAgICAgICAgc2VsZi5ULnBhZ2VyUGFnZUxhYmVsID0gJCgnI3QtcGFnZXItcGFnZS1sYWJlbCcpLnZhbCgpO1xyXG4gICAgICAgIHNlbGYuVC5wYWdlclRvdGFsTGFiZWwgPSAkKCcjdC1wYWdlci10b3RhbC1sYWJlbCcpLnZhbCgpOyAgICAgICAgXHJcbiAgICB9LFxyXG4gICAgbWV0aG9kczoge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gdGhpcy5jdXJyZW50ICsgMTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHByZXZpb3VzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IHRoaXMuY3VycmVudCAtIDE7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBnb0ZpcnN0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IDA7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBnb0xhc3Q6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gdGhpcy50b3RhbFBhZ2VzIC0gMTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGdvVG86IGZ1bmN0aW9uICh0YXJnZXRQYWdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IHRhcmdldFBhZ2U7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIGNvbXB1dGVkOiB7XHJcbiAgICAgICAgdG90YWw6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc291cmNlSXRlbXMgPyB0aGlzLnNvdXJjZUl0ZW1zLmxlbmd0aCA6IDA7XHJcbiAgICAgICAgfSxcclxuICAgICAgICB0b3RhbFBhZ2VzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBwYWdlcyA9IE1hdGguY2VpbCh0aGlzLnRvdGFsIC8gdGhpcy5wYWdlU2l6ZSk7XHJcbiAgICAgICAgICAgIHJldHVybiBwYWdlcyA+IDAgPyBwYWdlcyA6IDE7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBpc0xhc3RQYWdlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnQgKyAxID49IHRoaXMudG90YWxQYWdlcztcclxuICAgICAgICB9LFxyXG4gICAgICAgIGlzRmlyc3RQYWdlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnQgPT09IDA7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjYW5Eb05leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuICF0aGlzLmlzTGFzdFBhZ2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjYW5Eb1ByZXY6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuICF0aGlzLmlzRmlyc3RQYWdlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2FuRG9GaXJzdDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gIXRoaXMuaXNGaXJzdFBhZ2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjYW5Eb0xhc3Q6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuICF0aGlzLmlzTGFzdFBhZ2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyB0aGlzIGNvbXB1dGVkIGlzIG9ubHkgdG8gaGF2ZSBhIGNlbnRyYWwgcGxhY2Ugd2hlcmUgd2UgZGV0ZWN0IGNoYW5nZXMgYW5kIGxldmVyYWdlIFZ1ZSBKUyByZWFjdGl2aXR5IHRvIHJhaXNlIG91ciBldmVudC5cclxuICAgICAgICAvLyBUaGF0IGV2ZW50IHdpbGwgYmUgaGFuZGxlZCBieSB0aGUgcGFyZW50IG1lZGlhIGFwcCB0byBkaXNwbGF5IHRoZSBpdGVtcyBpbiB0aGUgcGFnZS5cclxuICAgICAgICAvLyB0aGlzIGxvZ2ljIHdpbGwgbm90IHJ1biBpZiB0aGUgY29tcHV0ZWQgcHJvcGVydHkgaXMgbm90IHVzZWQgaW4gdGhlIHRlbXBsYXRlLiBXZSB1c2UgYSBkdW1teSBcImRhdGEtY29tcHV0ZWQtdHJpZ2dlclwiIGF0dHJpYnV0ZSBmb3IgdGhhdC5cclxuICAgICAgICBpdGVtc0luQ3VycmVudFBhZ2U6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5wYWdlU2l6ZSAqIHRoaXMuY3VycmVudDtcclxuICAgICAgICAgICAgdmFyIGVuZCA9IHN0YXJ0ICsgdGhpcy5wYWdlU2l6ZTtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuc291cmNlSXRlbXMuc2xpY2Uoc3RhcnQsIGVuZCk7XHJcbiAgICAgICAgICAgIGJ1cy4kZW1pdCgncGFnZXJFdmVudCcsIHJlc3VsdCk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBwYWdlTGlua3M6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgICAgIHZhciBsaW5rcyA9IFtdO1xyXG5cclxuICAgICAgICAgICAgbGlua3MucHVzaCh0aGlzLmN1cnJlbnQgKyAxKTtcclxuXHJcbiAgICAgICAgICAgIC8vIEFkZCAyIGl0ZW1zIGJlZm9yZSBjdXJyZW50XHJcbiAgICAgICAgICAgIHZhciBiZWZvcmVDdXJyZW50ID0gdGhpcy5jdXJyZW50ID4gMCA/IHRoaXMuY3VycmVudCA6IC0xO1xyXG4gICAgICAgICAgICBsaW5rcy51bnNoaWZ0KGJlZm9yZUN1cnJlbnQpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGJlZm9yZUJlZm9yZUN1cnJlbnQgPSB0aGlzLmN1cnJlbnQgPiAxID8gdGhpcy5jdXJyZW50IC0gMSA6IC0xO1xyXG4gICAgICAgICAgICBsaW5rcy51bnNoaWZ0KGJlZm9yZUJlZm9yZUN1cnJlbnQpO1xyXG5cclxuXHJcbiAgICAgICAgICAgIC8vIEFkZCAyIGl0ZW1zIGFmdGVyIGN1cnJlbnRcclxuICAgICAgICAgICAgdmFyIGFmdGVyQ3VycmVudCA9IHRoaXMudG90YWxQYWdlcyAtIHRoaXMuY3VycmVudCA+IDEgPyB0aGlzLmN1cnJlbnQgKyAyIDogLTE7XHJcbiAgICAgICAgICAgIGxpbmtzLnB1c2goYWZ0ZXJDdXJyZW50KTtcclxuXHJcbiAgICAgICAgICAgIHZhciBhZnRlckFmdGVyQ3VycmVudCA9IHRoaXMudG90YWxQYWdlcyAtIHRoaXMuY3VycmVudCA+IDIgPyB0aGlzLmN1cnJlbnQgKyAzIDogLTE7XHJcbiAgICAgICAgICAgIGxpbmtzLnB1c2goYWZ0ZXJBZnRlckN1cnJlbnQpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGxpbmtzO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB3YXRjaDoge1xyXG4gICAgICAgIHNvdXJjZUl0ZW1zOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IDA7IC8vIHJlc2V0dGluZyBjdXJyZW50IHBhZ2UgYWZ0ZXIgcmVjZWl2aW5nIGEgbmV3IGxpc3Qgb2YgdW5wYWdlZCBpdGVtc1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcGFnZVNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gMDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG4iLCIvLyA8c29ydC1pbmRpY2F0b3I+IGNvbXBvbmVudFxyXG5WdWUuY29tcG9uZW50KCdzb3J0SW5kaWNhdG9yJywge1xyXG4gICAgdGVtcGxhdGU6IGBcclxuICAgICAgICA8ZGl2IHYtc2hvdz1cImlzQWN0aXZlXCIgY2xhc3M9XCJzb3J0LWluZGljYXRvclwiPlxyXG4gICAgICAgICAgICA8c3BhbiB2LXNob3c9XCJhc2NcIj48aSBjbGFzcz1cInNtYWxsIGZhIGZhLWNoZXZyb24tdXBcIj48L2k+PC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiB2LXNob3c9XCIhYXNjXCI+PGkgY2xhc3M9XCJzbWFsbCBmYSBmYS1jaGV2cm9uLWRvd25cIj48L2k+PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIGAsXHJcbiAgICBwcm9wczoge1xyXG4gICAgICAgIGNvbG5hbWU6IFN0cmluZyxcclxuICAgICAgICBzZWxlY3RlZGNvbG5hbWU6IFN0cmluZyxcclxuICAgICAgICBhc2M6IEJvb2xlYW5cclxuICAgIH0sXHJcbiAgICBjb21wdXRlZDoge1xyXG4gICAgICAgIGlzQWN0aXZlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbG5hbWUudG9Mb3dlckNhc2UoKSA9PSB0aGlzLnNlbGVjdGVkY29sbmFtZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcbiIsIi8vIDx1cGxvYWQ+IGNvbXBvbmVudFxyXG5WdWUuY29tcG9uZW50KCd1cGxvYWQnLCB7XHJcbiAgICB0ZW1wbGF0ZTogJ1xcXHJcbiAgICAgICAgPGRpdiA6Y2xhc3M9XCJ7IFxcJ3VwbG9hZC13YXJuaW5nXFwnIDogbW9kZWwuZXJyb3JNZXNzYWdlIH1cIiBjbGFzcz1cInVwbG9hZCBtLTIgcC0yIHB0LTBcIj4gXFxcclxuICAgICAgICAgICAgPHNwYW4gdi1pZj1cIm1vZGVsLmVycm9yTWVzc2FnZVwiIHYtb246Y2xpY2s9XCJkaXNtaXNzV2FybmluZygpXCIgY2xhc3M9XCJjbG9zZS13YXJuaW5nXCI+PGkgY2xhc3M9XCJmYS1zb2xpZCBmYS10aW1lc1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT4gPC9zcGFuPlxcXHJcbiAgICAgICAgICAgIDxwIGNsYXNzPVwidXBsb2FkLW5hbWVcIiA6dGl0bGU9XCJtb2RlbC5lcnJvck1lc3NhZ2VcIj57eyBtb2RlbC5uYW1lIH19PC9wPiBcXFxyXG4gICAgICAgICAgICA8ZGl2PiBcXFxyXG4gICAgICAgICAgICAgICA8c3BhbiB2LXNob3c9XCIhbW9kZWwuZXJyb3JNZXNzYWdlXCIgOnN0eWxlPVwieyB3aWR0aDogbW9kZWwucGVyY2VudGFnZSArIFxcJyVcXCd9XCIgY2xhc3M9XCJwcm9ncmVzcy1iYXJcIj4gPC9zcGFuPiBcXFxyXG4gICAgICAgICAgICAgICA8c3BhbiB2LWlmPVwibW9kZWwuZXJyb3JNZXNzYWdlXCIgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCIgOnRpdGxlPVwibW9kZWwuZXJyb3JNZXNzYWdlXCI+IEVycm9yOiB7eyBtb2RlbC5lcnJvck1lc3NhZ2UgfX0gPC9zcGFuPiBcXFxyXG4gICAgICAgICAgICA8L2Rpdj4gXFxcclxuICAgICAgICA8L2Rpdj4gXFxcclxuICAgICAgICAnLFxyXG4gICAgcHJvcHM6IHtcclxuICAgICAgICBtb2RlbDogT2JqZWN0LFxyXG4gICAgICAgIHVwbG9hZElucHV0SWQ6IFN0cmluZ1xyXG4gICAgfSxcclxuICAgIG1vdW50ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdmFyIHVwbG9hZElucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc2VsZi51cGxvYWRJbnB1dElkID8/ICdmaWxldXBsb2FkJyk7XHJcbiAgICAgICAgJCh1cGxvYWRJbnB1dCkuYmluZCgnZmlsZXVwbG9hZHByb2dyZXNzJywgZnVuY3Rpb24gKGUsIGRhdGEpIHtcclxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsZXNbMF0ubmFtZSAhPT0gc2VsZi5tb2RlbC5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH0gICAgICAgICAgICBcclxuICAgICAgICAgICAgc2VsZi5tb2RlbC5wZXJjZW50YWdlID0gcGFyc2VJbnQoZGF0YS5sb2FkZWQgLyBkYXRhLnRvdGFsICogMTAwLCAxMCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICQodXBsb2FkSW5wdXQpLmJpbmQoJ2ZpbGV1cGxvYWRkb25lJywgZnVuY3Rpb24gKGUsIGRhdGEpIHtcclxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsZXNbMF0ubmFtZSAhPT0gc2VsZi5tb2RlbC5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGRhdGEucmVzdWx0LmZpbGVzWzBdLmVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZUZhaWx1cmUoZGF0YS5maWxlc1swXS5uYW1lLCBkYXRhLnJlc3VsdC5maWxlc1swXS5lcnJvcik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7ICBcclxuICAgICAgICAgICAgICAgIGJ1cy4kZW1pdCgncmVtb3ZhbFJlcXVlc3QnLCBzZWxmLm1vZGVsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAkKHVwbG9hZElucHV0KS5iaW5kKCdmaWxldXBsb2FkZmFpbCcsIGZ1bmN0aW9uIChlLCBkYXRhKSB7XHJcbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGVzWzBdLm5hbWUgIT09IHNlbGYubW9kZWwubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNlbGYuaGFuZGxlRmFpbHVyZShkYXRhLmZpbGVzWzBdLm5hbWUsICQoJyN0LWVycm9yJykudmFsKCkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSxcclxuICAgIG1ldGhvZHM6IHtcclxuICAgICAgICBoYW5kbGVGYWlsdXJlOiBmdW5jdGlvbiAoZmlsZU5hbWUsIG1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgaWYgKGZpbGVOYW1lICE9PSB0aGlzLm1vZGVsLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLm1vZGVsLmVycm9yTWVzc2FnZSA9IG1lc3NhZ2U7XHJcbiAgICAgICAgICAgIGJ1cy4kZW1pdCgnRXJyb3JPblVwbG9hZCcsIHRoaXMubW9kZWwpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGlzbWlzc1dhcm5pbmc6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdyZW1vdmFsUmVxdWVzdCcsIHRoaXMubW9kZWwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcbiIsIi8vIDx1cGxvYWQtbGlzdD4gY29tcG9uZW50XHJcblZ1ZS5jb21wb25lbnQoJ3VwbG9hZExpc3QnLCB7XHJcbiAgICB0ZW1wbGF0ZTogJ1xcXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInVwbG9hZC1saXN0XCIgdi1zaG93PVwiZmlsZXMubGVuZ3RoID4gMFwiPiBcXFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyXCIgQGNsaWNrPVwiZXhwYW5kZWQgPSAhZXhwYW5kZWRcIj4gXFxcclxuICAgICAgICAgICAgICAgIDxzcGFuPiB7eyBULnVwbG9hZHMgfX0gPC9zcGFuPiBcXFxyXG4gICAgICAgICAgICAgICAgPHNwYW4gdi1zaG93PVwicGVuZGluZ0NvdW50XCI+IChQZW5kaW5nOiB7eyBwZW5kaW5nQ291bnQgfX0pIDwvc3Bhbj4gXFxcclxuICAgICAgICAgICAgICAgIDxzcGFuIHYtc2hvdz1cImVycm9yQ291bnRcIiA6Y2xhc3M9XCJ7IFxcJ3RleHQtZGFuZ2VyXFwnIDogZXJyb3JDb3VudCB9XCI+ICgge3sgVC5lcnJvcnMgfX06IHt7IGVycm9yQ291bnQgfX0gLyA8YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgdi1vbjpjbGljay5zdG9wPVwiY2xlYXJFcnJvcnNcIiA+IHt7IFQuY2xlYXJFcnJvcnMgfX0gPC9hPik8L3NwYW4+IFxcXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRvZ2dsZS1idXR0b25cIj4gXFxcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtc2hvdz1cImV4cGFuZGVkXCI+IFxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtc29saWQgZmEtY2hldnJvbi1kb3duXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPiBcXFxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PiBcXFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgdi1zaG93PVwiIWV4cGFuZGVkXCI+IFxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtc29saWQgZmEtY2hldnJvbi11cFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT4gXFxcclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gXFxcclxuICAgICAgICAgICAgICAgIDwvZGl2PiBcXFxyXG4gICAgICAgICAgICA8L2Rpdj4gXFxcclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiIHYtc2hvdz1cImV4cGFuZGVkXCI+IFxcXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtd3JhcFwiPiBcXFxyXG4gICAgICAgICAgICAgICAgICAgIDx1cGxvYWQgOnVwbG9hZC1pbnB1dC1pZD1cInVwbG9hZElucHV0SWRcIiB2LWZvcj1cImYgaW4gZmlsZXNcIiA6a2V5PVwiZi5uYW1lXCIgIDptb2RlbD1cImZcIj48L3VwbG9hZD4gXFxcclxuICAgICAgICAgICAgICAgIDwvZGl2ID4gXFxcclxuICAgICAgICAgICAgPC9kaXY+IFxcXHJcbiAgICAgICAgPC9kaXY+IFxcXHJcbiAgICAgICAgJyxcclxuICAgIGRhdGE6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBmaWxlczogW10sXHJcbiAgICAgICAgICAgIFQ6IHt9LFxyXG4gICAgICAgICAgICBleHBhbmRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHBlbmRpbmdDb3VudDogMCxcclxuICAgICAgICAgICAgZXJyb3JDb3VudDogMFxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBwcm9wczoge1xyXG4gICAgICAgIHVwbG9hZElucHV0SWQ6IFN0cmluZ1xyXG4gICAgfSxcclxuICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgLy8gcmV0cmlldmluZyBsb2NhbGl6ZWQgc3RyaW5ncyBmcm9tIHZpZXdcclxuICAgICAgICBzZWxmLlQudXBsb2FkcyA9ICQoJyN0LXVwbG9hZHMnKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQuZXJyb3JzID0gJCgnI3QtZXJyb3JzJykudmFsKCk7XHJcbiAgICAgICAgc2VsZi5ULmNsZWFyRXJyb3JzID0gJCgnI3QtY2xlYXItZXJyb3JzJykudmFsKCk7XHJcbiAgICB9LFxyXG4gICAgY29tcHV0ZWQ6IHtcclxuICAgICAgICBmaWxlQ291bnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlsZXMubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHZhciB1cGxvYWRJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNlbGYudXBsb2FkSW5wdXRJZCA/PyAnZmlsZXVwbG9hZCcpO1xyXG4gICAgICAgICQodXBsb2FkSW5wdXQpLmJpbmQoJ2ZpbGV1cGxvYWRhZGQnLCBmdW5jdGlvbiAoZSwgZGF0YSkge1xyXG4gICAgICAgICAgICBpZiAoIWRhdGEuZmlsZXMpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkYXRhLmZpbGVzLmZvckVhY2goZnVuY3Rpb24gKG5ld0ZpbGUpIHtcclxuICAgICAgICAgICAgICAgIHZhciBhbHJlYWR5SW5MaXN0ID0gc2VsZi5maWxlcy5zb21lKGZ1bmN0aW9uIChmKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGYubmFtZSA9PSBuZXdGaWxlLm5hbWU7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIWFscmVhZHlJbkxpc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZWxmLmZpbGVzLnB1c2goeyBuYW1lOiBuZXdGaWxlLm5hbWUsIHBlcmNlbnRhZ2U6IDAsIGVycm9yTWVzc2FnZTogJycgfSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0EgZmlsZSB3aXRoIHRoZSBzYW1lIG5hbWUgaXMgYWxyZWFkeSBvbiB0aGUgcXVldWU6JyArIG5ld0ZpbGUubmFtZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBidXMuJG9uKCdyZW1vdmFsUmVxdWVzdCcsIGZ1bmN0aW9uIChmaWxlVXBsb2FkKSB7XHJcbiAgICAgICAgICAgIHNlbGYuZmlsZXMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSwgaW5kZXgsIGFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5uYW1lID09IGZpbGVVcGxvYWQubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFycmF5LnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBidXMuJG9uKCdFcnJvck9uVXBsb2FkJywgZnVuY3Rpb24gKGZpbGVVcGxvYWQpIHtcclxuICAgICAgICAgICAgc2VsZi51cGRhdGVDb3VudCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSxcclxuICAgIG1ldGhvZHM6IHtcclxuICAgICAgICB1cGRhdGVDb3VudDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yQ291bnQgPSB0aGlzLmZpbGVzLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZXJyb3JNZXNzYWdlICE9ICcnO1xyXG4gICAgICAgICAgICB9KS5sZW5ndGg7XHJcbiAgICAgICAgICAgIHRoaXMucGVuZGluZ0NvdW50ID0gdGhpcy5maWxlcy5sZW5ndGggLSB0aGlzLmVycm9yQ291bnQ7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZpbGVzLmxlbmd0aCA8IDEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXhwYW5kZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2xlYXJFcnJvcnM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy5maWxlcyA9IHRoaXMuZmlsZXMuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5lcnJvck1lc3NhZ2UgPT0gJyc7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB3YXRjaDoge1xyXG4gICAgICAgIGZpbGVzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ291bnQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG4iLCJmdW5jdGlvbiBpbml0aWFsaXplQXR0YWNoZWRNZWRpYUZpZWxkKGVsLCBpZE9mVXBsb2FkQnV0dG9uLCB1cGxvYWRBY3Rpb24sIG1lZGlhSXRlbVVybCwgYWxsb3dNdWx0aXBsZSwgYWxsb3dNZWRpYVRleHQsIGFsbG93QW5jaG9ycywgdGVtcFVwbG9hZEZvbGRlciwgbWF4VXBsb2FkQ2h1bmtTaXplKSB7XHJcblxyXG4gICAgdmFyIHRhcmdldCA9ICQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJChlbCkuZGF0YSgnZm9yJykpKTtcclxuICAgIHZhciBpbml0aWFsUGF0aHMgPSB0YXJnZXQuZGF0YShcImluaXRcIik7XHJcblxyXG4gICAgdmFyIG1lZGlhRmllbGRFZGl0b3IgPSAkKGVsKTtcclxuICAgIHZhciBpZHByZWZpeCA9IG1lZGlhRmllbGRFZGl0b3IuYXR0cihcImlkXCIpO1xyXG4gICAgdmFyIG1lZGlhRmllbGRBcHA7XHJcblxyXG4gICAgbWVkaWFGaWVsZEFwcHMucHVzaChtZWRpYUZpZWxkQXBwID0gbmV3IFZ1ZSh7XHJcbiAgICAgICAgZWw6IG1lZGlhRmllbGRFZGl0b3IuZ2V0KDApLFxyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgbWVkaWFJdGVtczogW10sXHJcbiAgICAgICAgICAgIHNlbGVjdGVkTWVkaWE6IG51bGwsXHJcbiAgICAgICAgICAgIHNtYWxsVGh1bWJzOiBmYWxzZSxcclxuICAgICAgICAgICAgaWRQcmVmaXg6IGlkcHJlZml4LFxyXG4gICAgICAgICAgICBpbml0aWFsaXplZDogZmFsc2UsXHJcbiAgICAgICAgICAgIGFsbG93TWVkaWFUZXh0OiBhbGxvd01lZGlhVGV4dCxcclxuICAgICAgICAgICAgYmFja3VwTWVkaWFUZXh0OiAnJyxcclxuICAgICAgICAgICAgYWxsb3dBbmNob3JzOiBhbGxvd0FuY2hvcnMsXHJcbiAgICAgICAgICAgIGJhY2t1cEFuY2hvcjogbnVsbCxcclxuICAgICAgICAgICAgbWVkaWFUZXh0bW9kYWw6IG51bGwsXHJcbiAgICAgICAgICAgIGFuY2hvcmluZ01vZGFsOiBudWxsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgICAgIHNlbGYuY3VycmVudFByZWZzID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbWVkaWFGaWVsZFByZWZzJykpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY29tcHV0ZWQ6IHtcclxuICAgICAgICAgICAgcGF0aHM6IHtcclxuICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBtZWRpYVBhdGhzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmluaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShpbml0aWFsUGF0aHMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lZGlhSXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoeCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeC5tZWRpYVBhdGggPT09ICdub3QtZm91bmQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFQYXRocy5wdXNoKHsgcGF0aDogeC5tZWRpYVBhdGgsIGlzUmVtb3ZlZDogeC5pc1JlbW92ZWQsIGlzTmV3OiB4LmlzTmV3LCBtZWRpYVRleHQ6IHgubWVkaWFUZXh0LCBhbmNob3I6IHguYW5jaG9yLCBhdHRhY2hlZEZpbGVOYW1lOiB4LmF0dGFjaGVkRmlsZU5hbWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG1lZGlhUGF0aHMpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbWVkaWFQYXRocyA9IHZhbHVlcyB8fCBbXTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgc2lnbmFsID0gJC5EZWZlcnJlZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBpdGVtcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIG1lZGlhUGF0aHMuZm9yRWFjaChmdW5jdGlvbiAoeCwgaSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHsgbmFtZTogJyAnICsgeC5wYXRoLCBtaW1lOiAnJywgbWVkaWFQYXRoOiAnJywgYW5jaG9yOiB4LmFuY2hvciwgYXR0YWNoZWRGaWxlTmFtZTogeC5hdHRhY2hlZEZpbGVOYW1lIH0pOyAvLyBkb24ndCByZW1vdmUgdGhlIHNwYWNlLiBTb21ldGhpbmcgZGlmZmVyZW50IGlzIG5lZWRlZCBvciBpdCB3b250IHJlYWN0IHdoZW4gdGhlIHJlYWwgbmFtZSBhcnJpdmVzLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlID0gJC53aGVuKHNpZ25hbCkuZG9uZShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogbWVkaWFJdGVtVXJsICsgXCI/cGF0aD1cIiArIGVuY29kZVVSSUNvbXBvbmVudCh4LnBhdGgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS52dWVrZXkgPSBkYXRhLm5hbWUgKyBpLnRvU3RyaW5nKCk7IC8vIEJlY2F1c2UgYSB1bmlxdWUga2V5IGlzIHJlcXVpcmVkIGJ5IFZ1ZSBvbiB2LWZvciBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZWRpYVRleHQgPSB4Lm1lZGlhVGV4dDsgLy8gVGhpcyB2YWx1ZSBpcyBub3QgcmV0dXJuZWQgZnJvbSB0aGUgYWpheCBjYWxsLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmFuY2hvciA9IHguYW5jaG9yOyAvLyBUaGlzIHZhbHVlIGlzIG5vdCByZXR1cm5lZCBmcm9tIHRoZSBhamF4IGNhbGwuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuYXR0YWNoZWRGaWxlTmFtZSA9IHguYXR0YWNoZWRGaWxlTmFtZTsvLyBUaGlzIHZhbHVlIGlzIG5vdCByZXR1cm5lZCBmcm9tIHRoZSBhamF4IGNhbGwuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnNwbGljZShpLCAxLCBkYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gKytsZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1lZGlhSXRlbXMucHVzaCh4KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoZXJyb3IpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMuc3BsaWNlKGksIDEsIHsgbmFtZTogeC5wYXRoLCBtaW1lOiAnJywgbWVkaWFQYXRoOiAnbm90LWZvdW5kJywgbWVkaWFUZXh0OiAnJywgYW5jaG9yOiB7IHg6IDAuNSwgeTogMC41IH0sIGF0dGFjaGVkRmlsZU5hbWU6IHguYXR0YWNoZWRGaWxlTmFtZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gKytsZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1lZGlhSXRlbXMucHVzaCh4KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHNpZ25hbC5yZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGZpbGVTaXplOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5yb3VuZCh0aGlzLnNlbGVjdGVkTWVkaWEuc2l6ZSAvIDEwMjQpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjYW5BZGRNZWRpYTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIG5vblJlbW92ZWRNZWRpYUl0ZW1zID0gW107XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWVkaWFJdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5tZWRpYUl0ZW1zW2ldLmlzUmVtb3ZlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub25SZW1vdmVkTWVkaWFJdGVtcy5wdXNoKHRoaXMubWVkaWFJdGVtc1tpXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiBub25SZW1vdmVkTWVkaWFJdGVtcy5sZW5ndGggPT09IDAgfHwgbm9uUmVtb3ZlZE1lZGlhSXRlbXMubGVuZ3RoID4gMCAmJiBhbGxvd011bHRpcGxlO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0aHVtYlNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNtYWxsVGh1bWJzID8gMTIwIDogMjQwO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjdXJyZW50UHJlZnM6IHtcclxuICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNtYWxsVGh1bWJzOiB0aGlzLnNtYWxsVGh1bWJzXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uIChuZXdQcmVmcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghbmV3UHJlZnMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNtYWxsVGh1bWJzID0gbmV3UHJlZnMuc21hbGxUaHVtYnM7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIG1vdW50ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgICAgICAgICAgc2VsZi5wYXRocyA9IGluaXRpYWxQYXRocztcclxuXHJcbiAgICAgICAgICAgIHNlbGYuJG9uKCdzZWxlY3RBbmREZWxldGVNZWRpYVJlcXVlc3RlZCcsIGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RBbmREZWxldGVNZWRpYShtZWRpYSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgc2VsZi4kb24oJ3NlbGVjdE1lZGlhUmVxdWVzdGVkJywgZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdE1lZGlhKG1lZGlhKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB2YXIgc2VsZWN0b3IgPSAnIycgKyBpZE9mVXBsb2FkQnV0dG9uO1xyXG4gICAgICAgICAgICB2YXIgZWRpdG9ySWQgPSBtZWRpYUZpZWxkRWRpdG9yLmF0dHIoJ2lkJyk7XHJcbiAgICAgICAgICAgIHZhciBjaHVua2VkRmlsZVVwbG9hZElkID0gcmFuZG9tVVVJRCgpO1xyXG5cclxuICAgICAgICAgICAgJChzZWxlY3RvcilcclxuICAgICAgICAgICAgICAgIC5maWxldXBsb2FkKHtcclxuICAgICAgICAgICAgICAgICAgICBsaW1pdENvbmN1cnJlbnRVcGxvYWRzOiAyMCxcclxuICAgICAgICAgICAgICAgICAgICBkcm9wWm9uZTogJCgnIycgKyBlZGl0b3JJZCksXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdqc29uJyxcclxuICAgICAgICAgICAgICAgICAgICB1cmw6IHVwbG9hZEFjdGlvbixcclxuICAgICAgICAgICAgICAgICAgICBtYXhDaHVua1NpemU6IG1heFVwbG9hZENodW5rU2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICBhZGQ6IGZ1bmN0aW9uIChlLCBkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb3VudCA9IGRhdGEuZmlsZXMubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuZmlsZXNbaV0udXBsb2FkTmFtZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZXRVbmlxdWVJZCgpICsgZGF0YS5maWxlc1tpXS5uYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5maWxlc1tpXS5hdHRhY2hlZEZpbGVOYW1lID0gZGF0YS5maWxlc1tpXS5uYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuc3VibWl0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBmb3JtRGF0YTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYW50aUZvcmdlcnlUb2tlbiA9ICQoXCJpbnB1dFtuYW1lPV9fUmVxdWVzdFZlcmlmaWNhdGlvblRva2VuXVwiKS52YWwoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdwYXRoJywgdmFsdWU6IHRlbXBVcGxvYWRGb2xkZXIgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ19fUmVxdWVzdFZlcmlmaWNhdGlvblRva2VuJywgdmFsdWU6IGFudGlGb3JnZXJ5VG9rZW4gfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ19fY2h1bmtlZEZpbGVVcGxvYWRJZCcsIHZhbHVlOiBjaHVua2VkRmlsZVVwbG9hZElkIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBkb25lOiBmdW5jdGlvbiAoZSwgZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmV3TWVkaWFJdGVtcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3Jtc2cgPSBcIlwiO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEucmVzdWx0LmZpbGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YS5yZXN1bHQuZmlsZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnJlc3VsdC5maWxlc1tpXS5pc05ldyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9pZiBlcnJvciBpcyBkZWZpbmVkIHByb2JhYmx5IHRoZSBmaWxlIHR5cGUgaXMgbm90IGFsbG93ZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5yZXN1bHQuZmlsZXNbaV0uZXJyb3IgPT09IHVuZGVmaW5lZCB8fCBkYXRhLnJlc3VsdC5maWxlc1tpXS5lcnJvciA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnJlc3VsdC5maWxlc1tpXS5hdHRhY2hlZEZpbGVOYW1lID0gZGF0YS5maWxlc1tpXS5hdHRhY2hlZEZpbGVOYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdNZWRpYUl0ZW1zLnB1c2goZGF0YS5yZXN1bHQuZmlsZXNbaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ybXNnICs9IGRhdGEucmVzdWx0LmZpbGVzW2ldLmVycm9yICsgXCJcXG5cIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9ybXNnICE9PSBcIlwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydChlcnJvcm1zZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cobmV3TWVkaWFJdGVtcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdNZWRpYUl0ZW1zLmxlbmd0aCA+IDEgJiYgYWxsb3dNdWx0aXBsZSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KCQoJyNvbmx5T25lSXRlbU1lc3NhZ2UnKS52YWwoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWRpYUZpZWxkQXBwLm1lZGlhSXRlbXMucHVzaChuZXdNZWRpYUl0ZW1zWzBdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhRmllbGRBcHAuaW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFGaWVsZEFwcC5tZWRpYUl0ZW1zID0gbWVkaWFGaWVsZEFwcC5tZWRpYUl0ZW1zLmNvbmNhdChuZXdNZWRpYUl0ZW1zKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhRmllbGRBcHAuaW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGpxWEhSLCB0ZXh0U3RhdHVzLCBlcnJvclRocm93bikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnRXJyb3Igb24gdXBsb2FkLicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhqcVhIUik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHRleHRTdGF0dXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvclRocm93bik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5vbignZmlsZXVwbG9hZGNodW5rYmVmb3Jlc2VuZCcsIChlLCBvcHRpb25zKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZpbGUgPSBvcHRpb25zLmZpbGVzWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIEhlcmUgd2UgcmVwbGFjZSB0aGUgYmxvYiB3aXRoIGEgRmlsZSBvYmplY3QgdG8gZW5zdXJlIHRoZSBmaWxlIG5hbWUgYW5kIG90aGVycyBhcmUgcHJlc2VydmVkIGZvciB0aGUgYmFja2VuZC5cclxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmJsb2IgPSBuZXcgRmlsZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnMuYmxvYl0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogZmlsZS50eXBlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiBmaWxlLmxhc3RNb2RpZmllZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIG1ldGhvZHM6IHtcclxuICAgICAgICAgICAgc2VsZWN0TWVkaWE6IGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhID0gbWVkaWE7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGdldFVuaXF1ZUlkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3h4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eCcucmVwbGFjZSgvW3h5XS9nLCBmdW5jdGlvbiAoYykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciByID0gTWF0aC5yYW5kb20oKSAqIDE2IHwgMCwgdiA9IGMgPT09ICd4JyA/IHIgOiAociAmIDB4MyB8IDB4OCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHYudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHJlbW92ZVNlbGVjdGVkOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIHZhciByZW1vdmVkID0ge307XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZE1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5tZWRpYUl0ZW1zICYmIHRoaXMubWVkaWFJdGVtcy5pbmRleE9mKHRoaXMuc2VsZWN0ZWRNZWRpYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZCA9IHRoaXMubWVkaWFJdGVtc1tpbmRleF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWQuaXNSZW1vdmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy90aGlzLm1lZGlhSXRlbXMuc3BsaWNlKFtpbmRleF0sIDEsIHJlbW92ZWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lZGlhSXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBUaGUgcmVtb3ZlIGJ1dHRvbiBjYW4gYWxzbyByZW1vdmUgYSB1bmlxdWUgbWVkaWEgaXRlbVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1lZGlhSXRlbXMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWQgPSB0aGlzLm1lZGlhSXRlbXNbaW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVkLmlzUmVtb3ZlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vdGhpcy5tZWRpYUl0ZW1zLnNwbGljZSgwLCAxLCByZW1vdmVkKTsgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZWRpYUl0ZW1zLnNwbGljZSgwLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEgPSBudWxsO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzaG93TWVkaWFUZXh0TW9kYWw6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tZWRpYVRleHRNb2RhbCA9IG5ldyBib290c3RyYXAuTW9kYWwodGhpcy4kcmVmcy5tZWRpYVRleHRNb2RhbCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lZGlhVGV4dE1vZGFsLnNob3coKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmFja3VwTWVkaWFUZXh0ID0gdGhpcy5zZWxlY3RlZE1lZGlhLm1lZGlhVGV4dDtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY2FuY2VsTWVkaWFUZXh0TW9kYWw6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tZWRpYVRleHRNb2RhbC5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEubWVkaWFUZXh0ID0gdGhpcy5iYWNrdXBNZWRpYVRleHQ7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNob3dBbmNob3JNb2RhbDogZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFuY2hvcmluZ01vZGFsID0gbmV3IGJvb3RzdHJhcC5Nb2RhbCh0aGlzLiRyZWZzLmFuY2hvcmluZ01vZGFsKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYW5jaG9yaW5nTW9kYWwuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgLy8gQ2F1c2UgYSByZWZyZXNoIHRvIHJlY2FsYyBoZWlnaHRzLlxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvciA9IHtcclxuICAgICAgICAgICAgICAgICAgICB4OiB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yLngsXHJcbiAgICAgICAgICAgICAgICAgICAgeTogdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvci55XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJhY2t1cEFuY2hvciA9IHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3I7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNhbmNlbEFuY2hvcmluZ01vZGFsOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYW5jaG9yaW5nTW9kYWwuaGlkZSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvciA9IHRoaXMuYmFja3VwQW5jaG9yO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICByZXNldEFuY2hvcjogZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yID0geyB4OiAwLjUsIHk6IDAuNSB9O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBvbkFuY2hvckRyb3A6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGltYWdlID0gdGhpcy4kcmVmcy5hbmNob3JJbWFnZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgeDogZXZlbnQub2Zmc2V0WCAvIGltYWdlLmNsaWVudFdpZHRoLFxyXG4gICAgICAgICAgICAgICAgICAgIHk6IGV2ZW50Lm9mZnNldFkgLyBpbWFnZS5jbGllbnRIZWlnaHRcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgYW5jaG9yTGVmdDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuJHJlZnMuYW5jaG9ySW1hZ2UgJiYgdGhpcy4kcmVmcy5tb2RhbEJvZHkgJiYgdGhpcy5zZWxlY3RlZE1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiBpbWFnZSBpcyBzaHJ1bmsgY29tcGFyZSBhZ2FpbnN0IHRoZSBtb2RhbCBib2R5LlxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSAodGhpcy4kcmVmcy5tb2RhbEJvZHkuY2xpZW50V2lkdGggLSB0aGlzLiRyZWZzLmFuY2hvckltYWdlLmNsaWVudFdpZHRoKSAvIDI7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gKHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IueCAqIHRoaXMuJHJlZnMuYW5jaG9ySW1hZ2UuY2xpZW50V2lkdGgpICsgb2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvbiA8IDE3KSB7IC8vIEFkanVzdCBzbyB0aGUgdGFyZ2V0IGRvZXNuJ3Qgc2hvdyBvdXRzaWRlIGltYWdlLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IDE3O1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb24gLSA4OyAvLyBBZGp1c3QgdG8gaGl0IHRoZSBtb3VzZSBwb2ludGVyLlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcG9zaXRpb24gKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJzAnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBhbmNob3JUb3A6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLiRyZWZzLmFuY2hvckltYWdlICYmIHRoaXMuc2VsZWN0ZWRNZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9IHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IueSAqIHRoaXMuJHJlZnMuYW5jaG9ySW1hZ2UuY2xpZW50SGVpZ2h0O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvbiA8IDE1KSB7IC8vIEFkanVzdG1lbnQgc28gdGhlIHRhcmdldCBkb2Vzbid0IHNob3cgb3V0c2lkZSBpbWFnZS5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSAxNTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uICsgNTsgLy8gQWRqdXN0IHRvIGhpdCB0aGUgbW91c2UgcG9pbnRlci5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uICsgJ3B4JztcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcwJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2V0QW5jaG9yOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIHZhciBpbWFnZSA9IHRoaXMuJHJlZnMuYW5jaG9ySW1hZ2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHg6IGV2ZW50Lm9mZnNldFggLyBpbWFnZS5jbGllbnRXaWR0aCxcclxuICAgICAgICAgICAgICAgICAgICB5OiBldmVudC5vZmZzZXRZIC8gaW1hZ2UuY2xpZW50SGVpZ2h0XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGFkZE1lZGlhRmlsZXM6IGZ1bmN0aW9uIChmaWxlcykge1xyXG4gICAgICAgICAgICAgICAgaWYgKChmaWxlcy5sZW5ndGggPiAxKSAmJiAoYWxsb3dNdWx0aXBsZSA9PT0gZmFsc2UpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWxlcnQoJCgnI29ubHlPbmVJdGVtTWVzc2FnZScpLnZhbCgpKTtcclxuICAgICAgICAgICAgICAgICAgICBtZWRpYUZpZWxkQXBwLm1lZGlhSXRlbXMucHVzaChmaWxlc1swXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVkaWFGaWVsZEFwcC5pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIG1lZGlhRmllbGRBcHAubWVkaWFJdGVtcyA9IG1lZGlhRmllbGRBcHAubWVkaWFJdGVtcy5jb25jYXQoZmlsZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIG1lZGlhRmllbGRBcHAuaW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZWxlY3RBbmREZWxldGVNZWRpYTogZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkTWVkaWEgPSBtZWRpYTtcclxuICAgICAgICAgICAgICAgIC8vIHNldFRpbWVvdXQgYmVjYXVzZSBzb21ldGltZXMgXHJcbiAgICAgICAgICAgICAgICAvLyByZW1vdmVTZWxlY3RlZCB3YXMgY2FsbGVkIGV2ZW4gYmVmb3JlIHRoZSBtZWRpYSB3YXMgc2V0LlxyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5yZW1vdmVTZWxlY3RlZCgpO1xyXG4gICAgICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgd2F0Y2g6IHtcclxuICAgICAgICAgICAgbWVkaWFJdGVtczoge1xyXG4gICAgICAgICAgICAgICAgZGVlcDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGhhbmRsZXIoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVHJpZ2dlciBwcmV2aWV3IHJlbmRlcmluZ1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyAkKGRvY3VtZW50KS50cmlnZ2VyKCdjb250ZW50cHJldmlldzpyZW5kZXInKTsgfSwgMTAwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY3VycmVudFByZWZzOiBmdW5jdGlvbiAobmV3UHJlZnMpIHtcclxuICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdtZWRpYUZpZWxkUHJlZnMnLCBKU09OLnN0cmluZ2lmeShuZXdQcmVmcykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSkpO1xyXG59XHJcbiIsImZ1bmN0aW9uIGluaXRpYWxpemVNZWRpYUZpZWxkKGVsLCBtb2RhbEJvZHlFbGVtZW50LCBtZWRpYUl0ZW1VcmwsIGFsbG93TXVsdGlwbGUsIGFsbG93TWVkaWFUZXh0LCBhbGxvd0FuY2hvcnMpIHtcclxuICAgIC8vQmFnUGFydCBjcmVhdGUgYSBzY3JpcHQgc2VjdGlvbiB3aXRob3V0IG90aGVyIERPTSBlbGVtZW50c1xyXG4gICAgaWYoZWwgPT09IG51bGwpXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgXHJcbiAgICB2YXIgdGFyZ2V0ID0gJChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgkKGVsKS5kYXRhKCdmb3InKSkpO1xyXG4gICAgdmFyIGluaXRpYWxQYXRocyA9IHRhcmdldC5kYXRhKFwiaW5pdFwiKTtcclxuXHJcbiAgICB2YXIgbWVkaWFGaWVsZEVkaXRvciA9ICQoZWwpO1xyXG4gICAgdmFyIGlkcHJlZml4ID0gbWVkaWFGaWVsZEVkaXRvci5hdHRyKFwiaWRcIik7XHJcbiAgICB2YXIgbWVkaWFGaWVsZEFwcDtcclxuXHJcbiAgICAvL3doZW4gaGlkZSBtb2RhbCBkZXRhY2ggbWVkaWEgYXBwIHRvIGF2b2lkIGlzc3VlIG9uIEJhZ1BhcnRcclxuICAgIG1vZGFsQm9keUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignaGlkZGVuLmJzLm1vZGFsJywgZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgJChcIiNtZWRpYUFwcFwiKS5hcHBlbmRUbygnYm9keScpO1xyXG4gICAgICAgICQoXCIjbWVkaWFBcHBcIikuaGlkZSgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgbWVkaWFGaWVsZEFwcHMucHVzaChtZWRpYUZpZWxkQXBwID0gbmV3IFZ1ZSh7XHJcbiAgICAgICAgZWw6IG1lZGlhRmllbGRFZGl0b3IuZ2V0KDApLFxyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgbWVkaWFJdGVtczogW10sXHJcbiAgICAgICAgICAgIHNlbGVjdGVkTWVkaWE6IG51bGwsXHJcbiAgICAgICAgICAgIHNtYWxsVGh1bWJzOiBmYWxzZSxcclxuICAgICAgICAgICAgaWRQcmVmaXg6IGlkcHJlZml4LFxyXG4gICAgICAgICAgICBpbml0aWFsaXplZDogZmFsc2UsXHJcbiAgICAgICAgICAgIGFsbG93TWVkaWFUZXh0OiBhbGxvd01lZGlhVGV4dCxcclxuICAgICAgICAgICAgYmFja3VwTWVkaWFUZXh0OiAnJyxcclxuICAgICAgICAgICAgYWxsb3dBbmNob3JzOiBhbGxvd0FuY2hvcnMsXHJcbiAgICAgICAgICAgIGJhY2t1cEFuY2hvcjogbnVsbCxcclxuICAgICAgICAgICAgbWVkaWFUZXh0TW9kYWw6IG51bGwsXHJcbiAgICAgICAgICAgIGFuY2hvcmluZ01vZGFsOiBudWxsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgICAgIHNlbGYuY3VycmVudFByZWZzID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbWVkaWFGaWVsZFByZWZzJykpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY29tcHV0ZWQ6IHtcclxuICAgICAgICAgICAgcGF0aHM6IHtcclxuICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBtZWRpYVBhdGhzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmluaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShpbml0aWFsUGF0aHMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lZGlhSXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoeCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeC5tZWRpYVBhdGggPT09ICdub3QtZm91bmQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFQYXRocy5wdXNoKHsgcGF0aDogeC5tZWRpYVBhdGgsIG1lZGlhVGV4dDogeC5tZWRpYVRleHQsIGFuY2hvcjogeC5hbmNob3IgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG1lZGlhUGF0aHMpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbWVkaWFQYXRocyA9IHZhbHVlcyB8fCBbXTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgc2lnbmFsID0gJC5EZWZlcnJlZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBpdGVtcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIG1lZGlhUGF0aHMuZm9yRWFjaChmdW5jdGlvbiAoeCwgaSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHsgbmFtZTogJyAnICsgeC5wYXRoLCBtaW1lOiAnJywgbWVkaWFQYXRoOiAnJyB9KTsgLy8gZG9uJ3QgcmVtb3ZlIHRoZSBzcGFjZS4gU29tZXRoaW5nIGRpZmZlcmVudCBpcyBuZWVkZWQgb3IgaXQgd29udCByZWFjdCB3aGVuIHRoZSByZWFsIG5hbWUgYXJyaXZlcy5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZSA9ICQud2hlbihzaWduYWwpLmRvbmUoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IG1lZGlhSXRlbVVybCArIFwiP3BhdGg9XCIgKyBlbmNvZGVVUklDb21wb25lbnQoeC5wYXRoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEudnVla2V5ID0gZGF0YS5uYW1lICsgaS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLm1lZGlhVGV4dCA9IHgubWVkaWFUZXh0OyAvLyBUaGlzIHZhbHVlIGlzIG5vdCByZXR1cm5lZCBmcm9tIHRoZSBhamF4IGNhbGwuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuYW5jaG9yID0geC5hbmNob3I7IC8vIFRoaXMgdmFsdWUgaXMgbm90IHJldHVybmVkIGZyb20gdGhlIGFqYXggY2FsbC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMuc3BsaWNlKGksIDEsIGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbXMubGVuZ3RoID09PSArK2xlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoeSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWVkaWFJdGVtcy5wdXNoKHkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnNwbGljZShpLCAxLCB7IG5hbWU6IHgucGF0aCwgbWltZTogJycsIG1lZGlhUGF0aDogJ25vdC1mb3VuZCcsIG1lZGlhVGV4dDogJycsIGFuY2hvcjogeyB4OiAwLCB5OiAwIH0gfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtcy5sZW5ndGggPT09ICsrbGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tZWRpYUl0ZW1zLnB1c2goeCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBzaWduYWwucmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBmaWxlU2l6ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQodGhpcy5zZWxlY3RlZE1lZGlhLnNpemUgLyAxMDI0KTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY2FuQWRkTWVkaWE6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1lZGlhSXRlbXMubGVuZ3RoID09PSAwIHx8IHRoaXMubWVkaWFJdGVtcy5sZW5ndGggPiAwICYmIGFsbG93TXVsdGlwbGU7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHRodW1iU2l6ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc21hbGxUaHVtYnMgPyAxMjAgOiAyNDA7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGN1cnJlbnRQcmVmczoge1xyXG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc21hbGxUaHVtYnM6IHRoaXMuc21hbGxUaHVtYnNcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKG5ld1ByZWZzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFuZXdQcmVmcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc21hbGxUaHVtYnMgPSBuZXdQcmVmcy5zbWFsbFRodW1icztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbW91bnRlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgICAgICBzZWxmLnBhdGhzID0gaW5pdGlhbFBhdGhzO1xyXG5cclxuICAgICAgICAgICAgc2VsZi4kb24oJ3NlbGVjdEFuZERlbGV0ZU1lZGlhUmVxdWVzdGVkJywgZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdEFuZERlbGV0ZU1lZGlhKG1lZGlhKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBzZWxmLiRvbignc2VsZWN0TWVkaWFSZXF1ZXN0ZWQnLCBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0TWVkaWEobWVkaWEpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHNlbGYuJG9uKCdmaWxlc1VwbG9hZGVkJywgZnVuY3Rpb24gKGZpbGVzKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLmFkZE1lZGlhRmlsZXMoZmlsZXMpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIG1ldGhvZHM6IHtcclxuICAgICAgICAgICAgc2VsZWN0TWVkaWE6IGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhID0gbWVkaWE7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNob3dNb2RhbDogZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5jYW5BZGRNZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICQoXCIjbWVkaWFBcHBcIikuYXBwZW5kVG8oJChtb2RhbEJvZHlFbGVtZW50KS5maW5kKCcubW9kYWwtYm9keScpKTtcclxuICAgICAgICAgICAgICAgICAgICAkKFwiI21lZGlhQXBwXCIpLnNob3coKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1vZGFsID0gbmV3IGJvb3RzdHJhcC5Nb2RhbChtb2RhbEJvZHlFbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICBtb2RhbC5zaG93KCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICQobW9kYWxCb2R5RWxlbWVudCkuZmluZCgnLm1lZGlhRmllbGRTZWxlY3RCdXR0b24nKS5vZmYoJ2NsaWNrJykub24oJ2NsaWNrJywgZnVuY3Rpb24gKHYpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hZGRNZWRpYUZpbGVzKG1lZGlhQXBwLnNlbGVjdGVkTWVkaWFzKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIGRvbid0IHdhbnQgdGhlIGluY2x1ZGVkIG1lZGlhcyB0byBiZSBzdGlsbCBzZWxlY3RlZCB0aGUgbmV4dCB0aW1lIHdlIG9wZW4gdGhlIG1vZGFsLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZWRpYUFwcC5zZWxlY3RlZE1lZGlhcyA9IFtdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgbW9kYWwuaGlkZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2hvd01lZGlhVGV4dE1vZGFsOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubWVkaWFUZXh0TW9kYWwgPSBuZXcgYm9vdHN0cmFwLk1vZGFsKHRoaXMuJHJlZnMubWVkaWFUZXh0TW9kYWwpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tZWRpYVRleHRNb2RhbC5zaG93KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJhY2t1cE1lZGlhVGV4dCA9IHRoaXMuc2VsZWN0ZWRNZWRpYS5tZWRpYVRleHQ7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNhbmNlbE1lZGlhVGV4dE1vZGFsOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubWVkaWFUZXh0TW9kYWwuaGlkZSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhLm1lZGlhVGV4dCA9IHRoaXMuYmFja3VwTWVkaWFUZXh0O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzaG93QW5jaG9yTW9kYWw6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hbmNob3JpbmdNb2RhbCA9IG5ldyBib290c3RyYXAuTW9kYWwodGhpcy4kcmVmcy5hbmNob3JpbmdNb2RhbCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFuY2hvcmluZ01vZGFsLnNob3coKTtcclxuICAgICAgICAgICAgICAgIC8vIENhdXNlIGEgcmVmcmVzaCB0byByZWNhbGMgaGVpZ2h0cy5cclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IgPSB7XHJcbiAgICAgICAgICAgICAgICAgIHg6IHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IueCxcclxuICAgICAgICAgICAgICAgICAgeTogdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvci55XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJhY2t1cEFuY2hvciA9IHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3I7XHJcbiAgICAgICAgICAgIH0sICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGNhbmNlbEFuY2hvcmluZ01vZGFsOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYW5jaG9yaW5nTW9kYWwuaGlkZSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvciA9IHRoaXMuYmFja3VwQW5jaG9yO1xyXG4gICAgICAgICAgICB9LCAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXNldEFuY2hvcjogZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yID0geyB4OiAwLjUsIHk6IDAuNSB9O1xyXG4gICAgICAgICAgICB9LCAgXHJcbiAgICAgICAgICAgIG9uQW5jaG9yRHJvcDogZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIHZhciBpbWFnZSA9IHRoaXMuJHJlZnMuYW5jaG9ySW1hZ2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yID0ge1xyXG4gICAgICAgICAgICAgICAgICAgeDogZXZlbnQub2Zmc2V0WCAvIGltYWdlLmNsaWVudFdpZHRoLFxyXG4gICAgICAgICAgICAgICAgICAgeTogZXZlbnQub2Zmc2V0WSAvIGltYWdlLmNsaWVudEhlaWdodFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBhbmNob3JMZWZ0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy4kcmVmcy5hbmNob3JJbWFnZSAmJiB0aGlzLiRyZWZzLm1vZGFsQm9keSAmJiB0aGlzLnNlbGVjdGVkTWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIGltYWdlIGlzIHNocnVuayBjb21wYXJlIGFnYWluc3QgdGhlIG1vZGFsIGJvZHkuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9ICh0aGlzLiRyZWZzLm1vZGFsQm9keS5jbGllbnRXaWR0aCAtIHRoaXMuJHJlZnMuYW5jaG9ySW1hZ2UuY2xpZW50V2lkdGgpIC8gMjtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcG9zaXRpb24gPSAodGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvci54ICogdGhpcy4kcmVmcy5hbmNob3JJbWFnZS5jbGllbnRXaWR0aCkgKyBvZmZzZXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFuY2hvckljb24gPSBNYXRoLnJvdW5kKHRoaXMuJHJlZnMubW9kYWxCb2R5LnF1ZXJ5U2VsZWN0b3IoJy5pY29uLW1lZGlhLWFuY2hvcicpLmNsaWVudFdpZHRoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZihOdW1iZXIuaXNJbnRlZ2VyKGFuY2hvckljb24pKVxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbiAtIGFuY2hvckljb24vMjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uICsgJ3B4JztcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcwJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgICAgICAgICAgICBcclxuICAgICAgICAgICAgYW5jaG9yVG9wOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy4kcmVmcy5hbmNob3JJbWFnZSAmJiB0aGlzLnNlbGVjdGVkTWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcG9zaXRpb24gPSB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yLnkgKiB0aGlzLiRyZWZzLmFuY2hvckltYWdlLmNsaWVudEhlaWdodDtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcG9zaXRpb24gKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJzAnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXRBbmNob3I6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGltYWdlID0gdGhpcy4kcmVmcy5hbmNob3JJbWFnZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgeDogZXZlbnQub2Zmc2V0WCAvIGltYWdlLmNsaWVudFdpZHRoLFxyXG4gICAgICAgICAgICAgICAgICAgIHk6IGV2ZW50Lm9mZnNldFkgLyBpbWFnZS5jbGllbnRIZWlnaHRcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgICAgICAgICBcclxuICAgICAgICAgICAgYWRkTWVkaWFGaWxlczogZnVuY3Rpb24gKGZpbGVzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoKGZpbGVzLmxlbmd0aCA+IDEpICYmIChhbGxvd011bHRpcGxlID09PSBmYWxzZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBhbGVydCgkKCcjb25seU9uZUl0ZW1NZXNzYWdlJykudmFsKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIG1lZGlhRmllbGRBcHAubWVkaWFJdGVtcy5wdXNoKGZpbGVzWzBdKTtcclxuICAgICAgICAgICAgICAgICAgICBtZWRpYUZpZWxkQXBwLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVkaWFGaWVsZEFwcC5tZWRpYUl0ZW1zID0gbWVkaWFGaWVsZEFwcC5tZWRpYUl0ZW1zLmNvbmNhdChmaWxlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVkaWFGaWVsZEFwcC5pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHJlbW92ZVNlbGVjdGVkOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkTWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLm1lZGlhSXRlbXMgJiYgdGhpcy5tZWRpYUl0ZW1zLmluZGV4T2YodGhpcy5zZWxlY3RlZE1lZGlhKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lZGlhSXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBUaGUgcmVtb3ZlIGJ1dHRvbiBjYW4gYWxzbyByZW1vdmUgYSB1bmlxdWUgbWVkaWEgaXRlbVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1lZGlhSXRlbXMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWFJdGVtcy5zcGxpY2UoMCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhID0gbnVsbDtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2VsZWN0QW5kRGVsZXRlTWVkaWE6IGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZE1lZGlhID0gbWVkaWE7XHJcbiAgICAgICAgICAgICAgICAvLyBzZXRUaW1lb3V0IGJlY2F1c2Ugc29tZXRpbWVzIHJlbW92ZVNlbGVjdGVkIHdhcyBjYWxsZWQgZXZlbiBiZWZvcmUgdGhlIG1lZGlhIHdhcyBzZXQuXHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZWxmLnJlbW92ZVNlbGVjdGVkKCk7XHJcbiAgICAgICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICB3YXRjaDoge1xyXG4gICAgICAgICAgICBtZWRpYUl0ZW1zOiB7XHJcbiAgICAgICAgICAgICAgICBkZWVwOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgaGFuZGxlciAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVHJpZ2dlciBwcmV2aWV3IHJlbmRlcmluZ1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyAkKGRvY3VtZW50KS50cmlnZ2VyKCdjb250ZW50cHJldmlldzpyZW5kZXInKTsgfSwgMTAwKTsgXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGN1cnJlbnRQcmVmczogZnVuY3Rpb24gKG5ld1ByZWZzKSB7XHJcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnbWVkaWFGaWVsZFByZWZzJywgSlNPTi5zdHJpbmdpZnkobmV3UHJlZnMpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pKTtcclxufVxyXG4iLCIvLyBkaWZmZXJlbnQgbWVkaWEgZmllbGQgZWRpdG9ycyB3aWxsIGFkZCB0aGVtc2VsdmVzIHRvIHRoaXMgYXJyYXlcclxudmFyIG1lZGlhRmllbGRBcHBzID0gW107XHJcbiIsIi8vIDxtZWRpYS1maWVsZC10aHVtYnMtY29udGFpbmVyPiBjb21wb25lbnQgXHJcbi8vIGRpZmZlcmVudCBtZWRpYSBmaWVsZCBlZGl0b3JzIHNoYXJlIHRoaXMgY29tcG9uZW50IHRvIHByZXNlbnQgdGhlIHRodW1icy5cclxuVnVlLmNvbXBvbmVudCgnbWVkaWFGaWVsZFRodW1ic0NvbnRhaW5lcicsIHtcclxuICAgIHRlbXBsYXRlOiAnXFxcclxuICAgICAgIDxkaXYgOmlkPVwiaWRQcmVmaXggKyBcXCdfbWVkaWFDb250YWluZXJNYWluXFwnXCIgdi1jbG9haz5cXFxyXG4gICAgICAgICA8ZGl2IHYtaWY9XCJtZWRpYUl0ZW1zLmxlbmd0aCA8IDFcIiBjbGFzcz1cImNhcmQgdGV4dC1jZW50ZXJcIj5cXFxyXG4gICAgICAgICAgICAgPGRpdiBjbGFzcz0gXCJjYXJkLWJvZHlcIiA+XFxcclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGludFwiPnt7VC5ub0ltYWdlc319PC9zcGFuPlxcXHJcbiAgICAgICAgICAgICA8L2Rpdj5cXFxyXG4gICAgICAgICA8L2Rpdj5cXFxyXG4gICAgICAgICA8ZHJhZ2dhYmxlIDpsaXN0PVwibWVkaWFJdGVtc1wiIHRhZz1cIm9sXCIgY2xhc3M9XCJyb3cgbWVkaWEtaXRlbXMtZ3JpZFwiID5cXFxyXG4gICAgICAgICAgICA8bGkgdi1mb3I9XCJtZWRpYSBpbiBtZWRpYUl0ZW1zXCJcXFxyXG4gICAgICAgICAgICAgICAgOmtleT1cIm1lZGlhLnZ1ZWtleVwiIFxcXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1lZGlhLWNvbnRhaW5lci1tYWluLWxpc3QtaXRlbSBjYXJkIHAtMFwiXFxcclxuICAgICAgICAgICAgICAgIDpzdHlsZT1cInt3aWR0aDogdGh1bWJTaXplICsgMiArIFxcJ3B4XFwnfVwiXFxcclxuICAgICAgICAgICAgICAgIDpjbGFzcz1cIntzZWxlY3RlZDogc2VsZWN0ZWRNZWRpYSA9PSBtZWRpYX1cIlxcXHJcbiAgICAgICAgICAgICAgICB2LW9uOmNsaWNrPVwic2VsZWN0TWVkaWEobWVkaWEpXCIgdi1pZj1cIiFtZWRpYS5pc1JlbW92ZWRcIj5cXFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgdi1pZj1cIm1lZGlhLm1lZGlhUGF0aCE9PSBcXCdub3QtZm91bmRcXCdcIj5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGh1bWItY29udGFpbmVyXCIgOnN0eWxlPVwie2hlaWdodDogdGh1bWJTaXplICsgXFwncHhcXCd9XCIgPlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHYtaWY9XCJtZWRpYS5taW1lLnN0YXJ0c1dpdGgoXFwnaW1hZ2VcXCcpXCIgXFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpzcmM9XCJidWlsZE1lZGlhVXJsKG1lZGlhLnVybCwgdGh1bWJTaXplKVwiIFxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ZGF0YS1taW1lPVwibWVkaWEubWltZVwiXFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpzdHlsZT1cInttYXhIZWlnaHQ6IHRodW1iU2l6ZSArIFxcJ3B4XFwnICwgbWF4V2lkdGg6IHRodW1iU2l6ZSArIFxcJ3B4XFwnfVwiLz5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgdi1lbHNlIGNsYXNzPVwiZmEtcmVndWxhciBmYS1maWxlIGRpc3BsYXktMVwiIDpkYXRhLW1pbWU9XCJtZWRpYS5taW1lXCI+PC9pPlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lZGlhLWNvbnRhaW5lci1tYWluLWl0ZW0tdGl0bGUgY2FyZC1ib2R5XCI+XFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IGJ0bi1zbSBmbG9hdC1lbmQgaW5saW5lLW1lZGlhLWJ1dHRvbiBkZWxldGUtYnV0dG9uXCJcXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LW9uOmNsaWNrLnN0b3A9XCJzZWxlY3RBbmREZWxldGVNZWRpYShtZWRpYSlcIj48aSBjbGFzcz1cImZhLXNvbGlkIGZhLXRyYXNoXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPjwvYT5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIDpocmVmPVwibWVkaWEudXJsXCIgdGFyZ2V0PVwiX2JsYW5rXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IGJ0bi1zbSBmbG9hdC1lbmQgaW5saW5lLW1lZGlhLWJ1dHRvbiB2aWV3LWJ1dHRvblwiXCI+PGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1kb3dubG9hZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2E+IFxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZWRpYS1maWxlbmFtZSBjYXJkLXRleHQgc21hbGxcIiA6dGl0bGU9XCJtZWRpYS5tZWRpYVBhdGhcIj57eyBtZWRpYS5pc05ldyA/IG1lZGlhLm5hbWUuc3Vic3RyKDM2KSA6IG1lZGlhLm5hbWUgfX08L3NwYW4+XFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtZWxzZT5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGh1bWItY29udGFpbmVyIGZsZXgtY29sdW1uXCIgOnN0eWxlPVwie2hlaWdodDogdGh1bWJTaXplICsgXFwncHhcXCd9XCI+XFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtc29saWQgZmEtYmFuIHRleHQtZGFuZ2VyIGQtYmxvY2tcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXIgc21hbGwgZC1ibG9ja1wiPnt7IFQubWVkaWFOb3RGb3VuZCB9fTwvc3Bhbj5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlciBzbWFsbCBkLWJsb2NrIHRleHQtY2VudGVyXCI+e3sgVC5kaXNjYXJkV2FybmluZyB9fTwvc3Bhbj5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVkaWEtY29udGFpbmVyLW1haW4taXRlbS10aXRsZSBjYXJkLWJvZHlcIj5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBidG4tc20gZmxvYXQtZW5kIGlubGluZS1tZWRpYS1idXR0b24gZGVsZXRlLWJ1dHRvblwiXFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LW9uOmNsaWNrLnN0b3A9XCJzZWxlY3RBbmREZWxldGVNZWRpYShtZWRpYSlcIj48aSBjbGFzcz1cImZhLXNvbGlkIGZhLXRyYXNoXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPjwvYT5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZWRpYS1maWxlbmFtZSBjYXJkLXRleHQgc21hbGwgdGV4dC1kYW5nZXJcIiA6dGl0bGU9XCJtZWRpYS5uYW1lXCI+e3sgbWVkaWEubmFtZSB9fTwvc3Bhbj5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXFxyXG4gICAgICAgICAgICAgICAgICAgPC9kaXY+XFxcclxuICAgICAgICAgICAgPC9saT5cXFxyXG4gICAgICAgICA8L2RyYWdnYWJsZT5cXFxyXG4gICAgICAgPC9kaXY+XFxcclxuICAgICcsXHJcbiAgICBkYXRhOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgVDoge31cclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuICAgIHByb3BzOiB7XHJcbiAgICAgICAgbWVkaWFJdGVtczogQXJyYXksXHJcbiAgICAgICAgc2VsZWN0ZWRNZWRpYTogT2JqZWN0LFxyXG4gICAgICAgIHRodW1iU2l6ZTogTnVtYmVyLFxyXG4gICAgICAgIGlkUHJlZml4OiBTdHJpbmdcclxuICAgIH0sXHJcbiAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgLy8gcmV0cmlldmluZyBsb2NhbGl6ZWQgc3RyaW5ncyBmcm9tIHZpZXdcclxuICAgICAgICBzZWxmLlQubWVkaWFOb3RGb3VuZCA9ICQoJyN0LW1lZGlhLW5vdC1mb3VuZCcpLnZhbCgpO1xyXG4gICAgICAgIHNlbGYuVC5kaXNjYXJkV2FybmluZyA9ICQoJyN0LWRpc2NhcmQtd2FybmluZycpLnZhbCgpO1xyXG4gICAgICAgIHNlbGYuVC5ub0ltYWdlcyA9ICQoJyN0LW5vLWltYWdlcycpLnZhbCgpO1xyXG4gICAgfSxcclxuICAgIG1ldGhvZHM6IHtcclxuICAgICAgICBzZWxlY3RBbmREZWxldGVNZWRpYTogZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgIHRoaXMuJHBhcmVudC4kZW1pdCgnc2VsZWN0QW5kRGVsZXRlTWVkaWFSZXF1ZXN0ZWQnLCBtZWRpYSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZWxlY3RNZWRpYTogZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgIHRoaXMuJHBhcmVudC4kZW1pdCgnc2VsZWN0TWVkaWFSZXF1ZXN0ZWQnLCBtZWRpYSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBidWlsZE1lZGlhVXJsOiBmdW5jdGlvbiAodXJsLCB0aHVtYlNpemUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVybCArICh1cmwuaW5kZXhPZignPycpID09IC0xID8gJz8nIDogJyYnKSArICd3aWR0aD0nICsgdGh1bWJTaXplICsgJyZoZWlnaHQ9JyArIHRodW1iU2l6ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG4iXX0= +// component +Vue.component('upload', { + template: '\ +
\ + \ +

{{ model.name }}

\ +
\ + \ + Error: {{ model.errorMessage }} \ +
\ +
\ + ', + props: { + model: Object, + uploadInputId: String + }, + mounted: function mounted() { + var _self$uploadInputId; + var self = this; + var uploadInput = document.getElementById((_self$uploadInputId = self.uploadInputId) !== null && _self$uploadInputId !== void 0 ? _self$uploadInputId : 'fileupload'); + $(uploadInput).bind('fileuploadprogress', function (e, data) { + if (data.files[0].name !== self.model.name) { + return; + } + self.model.percentage = parseInt(data.loaded / data.total * 100, 10); + }); + $(uploadInput).bind('fileuploaddone', function (e, data) { + if (data.files[0].name !== self.model.name) { + return; + } + if (data.result.files[0].error) { + self.handleFailure(data.files[0].name, data.result.files[0].error); + } else { + bus.$emit('removalRequest', self.model); + } + }); + $(uploadInput).bind('fileuploadfail', function (e, data) { + if (data.files[0].name !== self.model.name) { + return; + } + self.handleFailure(data.files[0].name, $('#t-error').val()); + }); + }, + methods: { + handleFailure: function handleFailure(fileName, message) { + if (fileName !== this.model.name) { + return; + } + this.model.errorMessage = message; + bus.$emit('ErrorOnUpload', this.model); + }, + dismissWarning: function dismissWarning() { + bus.$emit('removalRequest', this.model); + } + } +}); +// component +Vue.component('uploadList', { + template: '\ +
\ +
\ + {{ T.uploads }} \ + (Pending: {{ pendingCount }}) \ + ( {{ T.errors }}: {{ errorCount }} / {{ T.clearErrors }} ) \ +
\ +
\ + \ +
\ +
\ + \ +
\ +
\ +
\ +
\ +
\ + \ +
\ +
\ +
\ + ', + data: function data() { + return { + files: [], + T: {}, + expanded: false, + pendingCount: 0, + errorCount: 0 + }; + }, + props: { + uploadInputId: String + }, + created: function created() { + var self = this; + // retrieving localized strings from view + self.T.uploads = $('#t-uploads').val(); + self.T.errors = $('#t-errors').val(); + self.T.clearErrors = $('#t-clear-errors').val(); + }, + computed: { + fileCount: function fileCount() { + return this.files.length; + } + }, + mounted: function mounted() { + var _self$uploadInputId; + var self = this; + var uploadInput = document.getElementById((_self$uploadInputId = self.uploadInputId) !== null && _self$uploadInputId !== void 0 ? _self$uploadInputId : 'fileupload'); + $(uploadInput).bind('fileuploadadd', function (e, data) { + if (!data.files) { + return; + } + data.files.forEach(function (newFile) { + var alreadyInList = self.files.some(function (f) { + return f.name == newFile.name; + }); + if (!alreadyInList) { + self.files.push({ + name: newFile.name, + percentage: 0, + errorMessage: '' + }); + } else { + console.error('A file with the same name is already on the queue:' + newFile.name); + } + }); + }); + bus.$on('removalRequest', function (fileUpload) { + self.files.forEach(function (item, index, array) { + if (item.name == fileUpload.name) { + array.splice(index, 1); + } + }); + }); + bus.$on('ErrorOnUpload', function (fileUpload) { + self.updateCount(); + }); + }, + methods: { + updateCount: function updateCount() { + this.errorCount = this.files.filter(function (item) { + return item.errorMessage != ''; + }).length; + this.pendingCount = this.files.length - this.errorCount; + if (this.files.length < 1) { + this.expanded = false; + } + }, + clearErrors: function clearErrors() { + this.files = this.files.filter(function (item) { + return item.errorMessage == ''; + }); + } + }, + watch: { + files: function files() { + this.updateCount(); + } + } +}); +//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5maWxldXBsb2FkLmpzIiwianF1ZXJ5LmlmcmFtZS10cmFuc3BvcnQuanMiLCJoZWxwZXJzLmpzIiwiTWVkaWFBcHAvYXBwLmpzIiwiTWVkaWFBcHAvZmlsZXVwbG9hZC5qcyIsIk1lZGlhQXBwL2ZvbGRlckNvbXBvbmVudC5qcyIsIk1lZGlhQXBwL21lZGlhSXRlbXNHcmlkQ29tcG9uZW50LmpzIiwiTWVkaWFBcHAvbWVkaWFJdGVtc1RhYmxlQ29tcG9uZW50LmpzIiwiTWVkaWFBcHAvcGFnZXJDb21wb25lbnQuanMiLCJNZWRpYUFwcC9zb3J0SW5kaWNhdG9yQ29tcG9uZW50LmpzIiwiTWVkaWFGaWVsZC9hdHRhY2hlZE1lZGlhRmllbGQuanMiLCJNZWRpYUZpZWxkL21lZGlhZmllbGQuanMiLCJNZWRpYUZpZWxkL21lZGlhZmllbGRzQXBwc0FycmF5LmpzIiwiTWVkaWFGaWVsZC9tZWRpYUZpZWxkVGh1bWJzQ29udGFpbmVyLmpzIiwiU2hhcmVkL3VwbG9hZENvbXBvbmVudC5qcyIsIlNoYXJlZC91cGxvYWRMaXN0Q29tcG9uZW50LmpzIl0sIm5hbWVzIjpbImZhY3RvcnkiLCJkZWZpbmUiLCJhbWQiLCJleHBvcnRzIiwiX3R5cGVvZiIsInJlcXVpcmUiLCJ3aW5kb3ciLCJqUXVlcnkiLCIkIiwic3VwcG9ydCIsImZpbGVJbnB1dCIsIlJlZ0V4cCIsInRlc3QiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJwcm9wIiwieGhyRmlsZVVwbG9hZCIsIlByb2dyZXNzRXZlbnQiLCJGaWxlUmVhZGVyIiwieGhyRm9ybURhdGFGaWxlVXBsb2FkIiwiRm9ybURhdGEiLCJibG9iU2xpY2UiLCJCbG9iIiwicHJvdG90eXBlIiwic2xpY2UiLCJ3ZWJraXRTbGljZSIsIm1velNsaWNlIiwiZ2V0RHJhZ0hhbmRsZXIiLCJ0eXBlIiwiaXNEcmFnT3ZlciIsImUiLCJkYXRhVHJhbnNmZXIiLCJvcmlnaW5hbEV2ZW50IiwiaW5BcnJheSIsInR5cGVzIiwiX3RyaWdnZXIiLCJFdmVudCIsImRlbGVnYXRlZEV2ZW50IiwicHJldmVudERlZmF1bHQiLCJkcm9wRWZmZWN0Iiwid2lkZ2V0Iiwib3B0aW9ucyIsImRyb3Bab25lIiwiZG9jdW1lbnQiLCJwYXN0ZVpvbmUiLCJ1bmRlZmluZWQiLCJyZXBsYWNlRmlsZUlucHV0IiwicGFyYW1OYW1lIiwic2luZ2xlRmlsZVVwbG9hZHMiLCJsaW1pdE11bHRpRmlsZVVwbG9hZHMiLCJsaW1pdE11bHRpRmlsZVVwbG9hZFNpemUiLCJsaW1pdE11bHRpRmlsZVVwbG9hZFNpemVPdmVyaGVhZCIsInNlcXVlbnRpYWxVcGxvYWRzIiwibGltaXRDb25jdXJyZW50VXBsb2FkcyIsImZvcmNlSWZyYW1lVHJhbnNwb3J0IiwicmVkaXJlY3QiLCJyZWRpcmVjdFBhcmFtTmFtZSIsInBvc3RNZXNzYWdlIiwibXVsdGlwYXJ0IiwibWF4Q2h1bmtTaXplIiwidXBsb2FkZWRCeXRlcyIsInJlY2FsY3VsYXRlUHJvZ3Jlc3MiLCJwcm9ncmVzc0ludGVydmFsIiwiYml0cmF0ZUludGVydmFsIiwiYXV0b1VwbG9hZCIsInVuaXF1ZUZpbGVuYW1lcyIsIm1lc3NhZ2VzIiwiaTE4biIsIm1lc3NhZ2UiLCJjb250ZXh0IiwidG9TdHJpbmciLCJlYWNoIiwia2V5IiwidmFsdWUiLCJyZXBsYWNlIiwiZm9ybURhdGEiLCJmb3JtIiwic2VyaWFsaXplQXJyYXkiLCJhZGQiLCJkYXRhIiwiaXNEZWZhdWx0UHJldmVudGVkIiwiZmlsZXVwbG9hZCIsInByb2Nlc3MiLCJkb25lIiwic3VibWl0IiwicHJvY2Vzc0RhdGEiLCJjb250ZW50VHlwZSIsImNhY2hlIiwidGltZW91dCIsIl9wcm9taXNlUGlwZSIsInBhcnRzIiwiZm4iLCJqcXVlcnkiLCJzcGxpdCIsIk51bWJlciIsIl9zcGVjaWFsT3B0aW9ucyIsIl9ibG9iU2xpY2UiLCJhcHBseSIsImFyZ3VtZW50cyIsIl9CaXRyYXRlVGltZXIiLCJ0aW1lc3RhbXAiLCJEYXRlIiwibm93IiwiZ2V0VGltZSIsImxvYWRlZCIsImJpdHJhdGUiLCJnZXRCaXRyYXRlIiwiaW50ZXJ2YWwiLCJ0aW1lRGlmZiIsIl9pc1hIUlVwbG9hZCIsIl9nZXRGb3JtRGF0YSIsImlzQXJyYXkiLCJuYW1lIiwicHVzaCIsIl9nZXRUb3RhbCIsImZpbGVzIiwidG90YWwiLCJpbmRleCIsImZpbGUiLCJzaXplIiwiX2luaXRQcm9ncmVzc09iamVjdCIsIm9iaiIsInByb2dyZXNzIiwiX3Byb2dyZXNzIiwiZXh0ZW5kIiwiX2luaXRSZXNwb25zZU9iamVjdCIsIl9yZXNwb25zZSIsIk9iamVjdCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIl9vblByb2dyZXNzIiwibGVuZ3RoQ29tcHV0YWJsZSIsIl90aW1lIiwiTWF0aCIsImZsb29yIiwiY2h1bmtTaXplIiwiX2JpdHJhdGVUaW1lciIsIl9pbml0UHJvZ3Jlc3NMaXN0ZW5lciIsInRoYXQiLCJ4aHIiLCJhamF4U2V0dGluZ3MiLCJ1cGxvYWQiLCJvbiIsIm9lIiwiX2RlaW5pdFByb2dyZXNzTGlzdGVuZXIiLCJvZmYiLCJfaXNJbnN0YW5jZU9mIiwiX2dldFVuaXF1ZUZpbGVuYW1lIiwibWFwIiwiU3RyaW5nIiwiXyIsInAxIiwicDIiLCJleHQiLCJfaW5pdFhIUkRhdGEiLCJoZWFkZXJzIiwiY29udGVudFJhbmdlIiwiYmxvYiIsImVuY29kZVVSSSIsInVwbG9hZE5hbWUiLCJmaWVsZCIsImFwcGVuZCIsImZpbGVOYW1lIiwiX2luaXRJZnJhbWVTZXR0aW5ncyIsInRhcmdldEhvc3QiLCJ1cmwiLCJkYXRhVHlwZSIsImxvY2F0aW9uIiwiaG9zdCIsIl9pbml0RGF0YVNldHRpbmdzIiwiX2NodW5rZWRVcGxvYWQiLCJfZ2V0UGFyYW1OYW1lIiwiaW5wdXQiLCJpIiwibGVuZ3RoIiwiX2luaXRGb3JtU2V0dGluZ3MiLCJocmVmIiwidG9VcHBlckNhc2UiLCJmb3JtQWNjZXB0Q2hhcnNldCIsImF0dHIiLCJfZ2V0QUpBWFNldHRpbmdzIiwiX2dldERlZmVycmVkU3RhdGUiLCJkZWZlcnJlZCIsInN0YXRlIiwiaXNSZXNvbHZlZCIsImlzUmVqZWN0ZWQiLCJfZW5oYW5jZVByb21pc2UiLCJwcm9taXNlIiwic3VjY2VzcyIsImVycm9yIiwiZmFpbCIsImNvbXBsZXRlIiwiYWx3YXlzIiwiX2dldFhIUlByb21pc2UiLCJyZXNvbHZlT3JSZWplY3QiLCJhcmdzIiwiZGZkIiwiRGVmZXJyZWQiLCJyZXNvbHZlV2l0aCIsInJlamVjdFdpdGgiLCJhYm9ydCIsIl9hZGRDb252ZW5pZW5jZU1ldGhvZHMiLCJnZXRQcm9taXNlIiwicmVzb2x2ZUZ1bmMiLCJyZWplY3RGdW5jIiwiX3Byb2Nlc3NRdWV1ZSIsImVycm9yVGhyb3duIiwianFYSFIiLCJfb25TZW5kIiwicHJvY2Vzc2luZyIsInJlc3BvbnNlIiwiX2dldFVwbG9hZGVkQnl0ZXMiLCJyYW5nZSIsImdldFJlc3BvbnNlSGVhZGVyIiwidXBwZXJCeXRlc1BvcyIsInBhcnNlSW50IiwidGVzdE9ubHkiLCJmcyIsInViIiwibWNzIiwibyIsImN1cnJlbnRMb2FkZWQiLCJhamF4IiwicmVzdWx0IiwidGV4dFN0YXR1cyIsIl9iZWZvcmVTZW5kIiwiX2FjdGl2ZSIsIl9vbkRvbmUiLCJfb25GYWlsIiwiX29uQWx3YXlzIiwianFYSFJvclJlc3VsdCIsImpxWEhSb3JFcnJvciIsImFib3J0ZWQiLCJzbG90IiwicGlwZSIsInNlbmQiLCJfc2VuZGluZyIsIm5leHRTbG90IiwiX3Nsb3RzIiwic2hpZnQiLCJyZXNvbHZlIiwiX3NlcXVlbmNlIiwiX29uQWRkIiwiZmlsZXNMZW5ndGgiLCJsaW1pdCIsImxpbWl0U2l6ZSIsIm92ZXJoZWFkIiwiYmF0Y2hTaXplIiwicGFyYW1OYW1lU2V0IiwicGFyYW1OYW1lU2xpY2UiLCJmaWxlU2V0IiwiaiIsIm9yaWdpbmFsRmlsZXMiLCJlbGVtZW50IiwibmV3RGF0YSIsIl9yZXBsYWNlRmlsZUlucHV0IiwiaW5wdXRDbG9uZSIsImNsb25lIiwicmVzdG9yZUZvY3VzIiwiaXMiLCJhY3RpdmVFbGVtZW50IiwiZmlsZUlucHV0Q2xvbmUiLCJyZXNldCIsImFmdGVyIiwiZGV0YWNoIiwidHJpZ2dlciIsImNsZWFuRGF0YSIsImVsIiwiX2hhbmRsZUZpbGVUcmVlRW50cnkiLCJlbnRyeSIsInBhdGgiLCJlbnRyaWVzIiwiZGlyUmVhZGVyIiwiZXJyb3JIYW5kbGVyIiwic3VjY2Vzc0hhbmRsZXIiLCJfaGFuZGxlRmlsZVRyZWVFbnRyaWVzIiwicmVhZEVudHJpZXMiLCJyZXN1bHRzIiwiY29uY2F0IiwiaXNGaWxlIiwiX2ZpbGUiLCJyZWxhdGl2ZVBhdGgiLCJpc0RpcmVjdG9yeSIsImNyZWF0ZVJlYWRlciIsIndoZW4iLCJBcnJheSIsIl9nZXREcm9wcGVkRmlsZXMiLCJpdGVtcyIsIndlYmtpdEdldEFzRW50cnkiLCJnZXRBc0VudHJ5IiwiaXRlbSIsImdldEFzRmlsZSIsIm1ha2VBcnJheSIsIl9nZXRTaW5nbGVGaWxlSW5wdXRGaWxlcyIsImZpbGVTaXplIiwiX2dldEZpbGVJbnB1dEZpbGVzIiwiX29uQ2hhbmdlIiwidGFyZ2V0IiwiX29uUGFzdGUiLCJjbGlwYm9hcmREYXRhIiwiX29uRHJvcCIsIl9vbkRyYWdPdmVyIiwiX29uRHJhZ0VudGVyIiwiX29uRHJhZ0xlYXZlIiwiX2luaXRFdmVudEhhbmRsZXJzIiwiX29uIiwiZHJhZ292ZXIiLCJkcm9wIiwiZHJhZ2VudGVyIiwiZHJhZ2xlYXZlIiwicGFzdGUiLCJjaGFuZ2UiLCJfZGVzdHJveUV2ZW50SGFuZGxlcnMiLCJfb2ZmIiwiX2Rlc3Ryb3kiLCJfc2V0T3B0aW9uIiwicmVpbml0IiwiX3N1cGVyIiwiX2luaXRTcGVjaWFsT3B0aW9ucyIsImZpbmQiLCJfZ2V0UmVnRXhwIiwic3RyIiwibW9kaWZpZXJzIiwicG9wIiwiam9pbiIsIl9pc1JlZ0V4cE9wdGlvbiIsIl9pbml0RGF0YUF0dHJpYnV0ZXMiLCJhdHRyaWJ1dGVzIiwidG9Mb3dlckNhc2UiLCJjaGFyQXQiLCJfY3JlYXRlIiwiYWN0aXZlIiwiZGlzYWJsZWQiLCJyZWplY3QiLCJ0aGVuIiwiY291bnRlciIsImpzb25BUEkiLCJqc29uUGFyc2UiLCJKU09OIiwiYWpheFRyYW5zcG9ydCIsImFzeW5jIiwiaW5pdGlhbElmcmFtZVNyYyIsImlmcmFtZSIsImFkZFBhcmFtQ2hhciIsImNvbXBsZXRlQ2FsbGJhY2siLCJmaWxlSW5wdXRDbG9uZXMiLCJwYXJhbU5hbWVzIiwiY29udGVudHMiLCJmaXJzdENoaWxkIiwiRXJyb3IiLCJhcHBlbmRUbyIsInNldFRpbWVvdXQiLCJyZW1vdmUiLCJ2YWwiLCJyZW1vdmVBdHRyIiwicmVwbGFjZVdpdGgiLCJib2R5IiwiYWpheFNldHVwIiwiY29udmVydGVycyIsImlmcmFtZVRleHQiLCJ0ZXh0IiwiaWZyYW1lSnNvbiIsImlmcmFtZUh0bWwiLCJodG1sIiwiaWZyYW1lWG1sIiwieG1sRG9jIiwiaXNYTUxEb2MiLCJwYXJzZVhNTCIsIlhNTERvY3VtZW50IiwieG1sIiwiaWZyYW1lU2NyaXB0IiwiZ2xvYmFsRXZhbCIsInJhbmRvbVVVSUQiLCJjcnlwdG8iLCJjIiwiZ2V0UmFuZG9tVmFsdWVzIiwiVWludDhBcnJheSIsImluaXRpYWxpemVkIiwibWVkaWFBcHAiLCJidXMiLCJWdWUiLCJpbml0aWFsaXplTWVkaWFBcHBsaWNhdGlvbiIsImRpc3BsYXlNZWRpYUFwcGxpY2F0aW9uIiwibWVkaWFBcHBsaWNhdGlvblVybCIsInBhdGhCYXNlIiwiY29uc29sZSIsIm1ldGhvZCIsImNvbnRlbnQiLCJyb290IiwiZm9sZGVyIiwic2VsZWN0ZWRGb2xkZXIiLCJtZWRpYUl0ZW1zIiwic2VsZWN0ZWRNZWRpYXMiLCJlcnJvcnMiLCJkcmFnRHJvcFRodW1ibmFpbCIsIkltYWdlIiwic21hbGxUaHVtYnMiLCJncmlkVmlldyIsIm1lZGlhRmlsdGVyIiwic29ydEJ5Iiwic29ydEFzYyIsIml0ZW1zSW5QYWdlIiwiY3JlYXRlZCIsInNlbGYiLCJzcmMiLCIkb24iLCJzZWxlY3RSb290Iiwic2VsZWN0ZWQiLCJlcnJvckluZm8iLCJsb2FkRm9sZGVyIiwibmV3TmFtZSIsIm5ld1BhdGgiLCJvbGRQYXRoIiwibWVkaWEiLCJmaWx0ZXIiLCJtZWRpYVBhdGgiLCJjcmVhdGVGb2xkZXIiLCJkZWxldGVGb2xkZXIiLCJuZXdTb3J0IiwiY2hhbmdlU29ydCIsInRvZ2dsZVNlbGVjdGlvbk9mTWVkaWEiLCJyZW5hbWVNZWRpYSIsImRlbGV0ZU1lZGlhSXRlbSIsImhhbmRsZURyYWdTdGFydCIsImxvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJjdXJyZW50UHJlZnMiLCJwYXJzZSIsImNvbXB1dGVkIiwiaXNIb21lIiwicGFyZW50cyIsInAiLCJwYXJlbnRGb2xkZXIiLCJ1bnNoaWZ0IiwicGFyZW50IiwiZmlsdGVyZWRNZWRpYUl0ZW1zIiwiZmlsdGVyZWQiLCJpbmRleE9mIiwic29ydCIsImEiLCJiIiwibWltZSIsImxvY2FsZUNvbXBhcmUiLCJsYXN0TW9kaWZ5IiwiaGlkZGVuQ291bnQiLCJ0aHVtYlNpemUiLCJnZXQiLCJzZXQiLCJuZXdQcmVmcyIsIndhdGNoIiwic2V0SXRlbSIsInN0cmluZ2lmeSIsIm5ld0ZvbGRlciIsIm1vdW50ZWQiLCIkcmVmcyIsInJvb3RGb2xkZXIiLCJ0b2dnbGUiLCJtZXRob2RzIiwidXBsb2FkVXJsIiwidXJsVmFsdWUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJtZWRpYVVybCIsImxvZyIsImZvckVhY2giLCJvcGVuIiwic2VsZWN0QWxsIiwidW5TZWxlY3RBbGwiLCJpbnZlcnRTZWxlY3Rpb24iLCJ0ZW1wIiwiaXNNZWRpYVNlbGVjdGVkIiwic3BsaWNlIiwic29tZSIsImFycmF5IiwibW9kZWwiLCJjb25maXJtRGlhbG9nIiwiX29iamVjdFNwcmVhZCIsImNhbGxiYWNrIiwicmVzcCIsIl9fUmVxdWVzdFZlcmlmaWNhdGlvblRva2VuIiwiJGVtaXQiLCJyZXNwb25zZVRleHQiLCJlbXB0eSIsIm1vZGFsIiwiYm9vdHN0cmFwIiwiTW9kYWwiLCJnZXRPckNyZWF0ZUluc3RhbmNlIiwic2hvdyIsImZvY3VzIiwic2VsZWN0QW5kRGVsZXRlTWVkaWEiLCJkZWxldGVNZWRpYSIsImRlbGV0ZU1lZGlhTGlzdCIsIm1lZGlhTGlzdCIsInBhdGhzIiwibWVkaWFOYW1lcyIsInNldERhdGEiLCJzZXREcmFnSW1hZ2UiLCJlZmZlY3RBbGxvd2VkIiwiaGFuZGxlU2Nyb2xsV2hpbGVEcmFnIiwiY2xpZW50WSIsInNjcm9sbEJ5IiwiaW5uZXJIZWlnaHQiLCJrZXlwcmVzcyIsIndoaWNoIiwiY2xpY2siLCJoaWRlIiwiZXJyb3JNZXNzYWdlIiwib2xkTmFtZSIsImN1cnJlbnRGb2xkZXIiLCJnZXRFbGVtZW50QnlJZCIsInN0eWxlIiwiZGlzcGxheSIsImNodW5rZWRGaWxlVXBsb2FkSWQiLCJhbnRpRm9yZ2VyeVRva2VuIiwiRmlsZSIsImxhc3RNb2RpZmllZCIsImJpbmQiLCJkdCIsImNvbnRhaW5zIiwiZHJvcFpvbmVUaW1lb3V0IiwiY2xlYXJUaW1lb3V0IiwiYWRkQ2xhc3MiLCJob3ZlcmVkRHJvcFpvbmUiLCJjbG9zZXN0IiwicmVtb3ZlQ2xhc3MiLCJjb21wb25lbnQiLCJ0ZW1wbGF0ZSIsImRpciIsInByb3BzIiwic2VsZWN0ZWRJbk1lZGlhQXBwIiwibGV2ZWwiLCJjaGlsZHJlbiIsImlzSG92ZXJlZCIsInBhZGRpbmciLCJpc1NlbGVjdGVkIiwiaXNSb290IiwiaXNBbmNlc3Rvck9mU2VsZWN0ZWRGb2xkZXIiLCJsb2FkQ2hpbGRyZW4iLCJzZWxlY3QiLCJlbXRweSIsImhhbmRsZURyYWdPdmVyIiwiaGFuZGxlRHJhZ0xlYXZlIiwibW92ZU1lZGlhVG9Gb2xkZXIiLCJnZXREYXRhIiwic291cmNlRm9sZGVyIiwidGFyZ2V0Rm9sZGVyIiwiYWxlcnQiLCJUIiwiZWRpdEJ1dHRvbiIsImRlbGV0ZUJ1dHRvbiIsImJ1aWxkTWVkaWFVcmwiLCJkcmFnU3RhcnQiLCJCb29sZWFuIiwiaW1hZ2VIZWFkZXIiLCJuYW1lSGVhZGVyIiwibGFzdE1vZGlmeUhlYWRlciIsInNpemVIZWFkZXIiLCJ0eXBlSGVhZGVyIiwidmlld0J1dHRvbiIsInByaW50RGF0ZVRpbWUiLCJkYXRlbWlsbGlzIiwiZCIsInRvTG9jYWxlU3RyaW5nIiwic291cmNlSXRlbXMiLCJwYWdlU2l6ZSIsInBhZ2VTaXplT3B0aW9ucyIsImN1cnJlbnQiLCJwYWdlckZpcnN0QnV0dG9uIiwicGFnZXJQcmV2aW91c0J1dHRvbiIsInBhZ2VyTmV4dEJ1dHRvbiIsInBhZ2VyTGFzdEJ1dHRvbiIsInBhZ2VyUGFnZVNpemVMYWJlbCIsInBhZ2VyUGFnZUxhYmVsIiwicGFnZXJUb3RhbExhYmVsIiwibmV4dCIsInByZXZpb3VzIiwiZ29GaXJzdCIsImdvTGFzdCIsInRvdGFsUGFnZXMiLCJnb1RvIiwidGFyZ2V0UGFnZSIsInBhZ2VzIiwiY2VpbCIsImlzTGFzdFBhZ2UiLCJpc0ZpcnN0UGFnZSIsImNhbkRvTmV4dCIsImNhbkRvUHJldiIsImNhbkRvRmlyc3QiLCJjYW5Eb0xhc3QiLCJpdGVtc0luQ3VycmVudFBhZ2UiLCJzdGFydCIsImVuZCIsInBhZ2VMaW5rcyIsImxpbmtzIiwiYmVmb3JlQ3VycmVudCIsImJlZm9yZUJlZm9yZUN1cnJlbnQiLCJhZnRlckN1cnJlbnQiLCJhZnRlckFmdGVyQ3VycmVudCIsImNvbG5hbWUiLCJzZWxlY3RlZGNvbG5hbWUiLCJhc2MiLCJpc0FjdGl2ZSIsImluaXRpYWxpemVBdHRhY2hlZE1lZGlhRmllbGQiLCJpZE9mVXBsb2FkQnV0dG9uIiwidXBsb2FkQWN0aW9uIiwibWVkaWFJdGVtVXJsIiwiYWxsb3dNdWx0aXBsZSIsImFsbG93TWVkaWFUZXh0IiwiYWxsb3dBbmNob3JzIiwidGVtcFVwbG9hZEZvbGRlciIsIm1heFVwbG9hZENodW5rU2l6ZSIsImluaXRpYWxQYXRocyIsIm1lZGlhRmllbGRFZGl0b3IiLCJpZHByZWZpeCIsIm1lZGlhRmllbGRBcHAiLCJtZWRpYUZpZWxkQXBwcyIsInNlbGVjdGVkTWVkaWEiLCJpZFByZWZpeCIsImJhY2t1cE1lZGlhVGV4dCIsImJhY2t1cEFuY2hvciIsIm1lZGlhVGV4dG1vZGFsIiwiYW5jaG9yaW5nTW9kYWwiLCJtZWRpYVBhdGhzIiwieCIsImlzUmVtb3ZlZCIsImlzTmV3IiwibWVkaWFUZXh0IiwiYW5jaG9yIiwiYXR0YWNoZWRGaWxlTmFtZSIsInZhbHVlcyIsInNpZ25hbCIsInZ1ZWtleSIsInkiLCJyb3VuZCIsImNhbkFkZE1lZGlhIiwibm9uUmVtb3ZlZE1lZGlhSXRlbXMiLCJzZWxlY3RNZWRpYSIsInNlbGVjdG9yIiwiZWRpdG9ySWQiLCJjb3VudCIsImdldFVuaXF1ZUlkIiwibmV3TWVkaWFJdGVtcyIsImVycm9ybXNnIiwiciIsInJhbmRvbSIsInYiLCJyZW1vdmVTZWxlY3RlZCIsImV2ZW50IiwicmVtb3ZlZCIsInNob3dNZWRpYVRleHRNb2RhbCIsIm1lZGlhVGV4dE1vZGFsIiwiY2FuY2VsTWVkaWFUZXh0TW9kYWwiLCJzaG93QW5jaG9yTW9kYWwiLCJjYW5jZWxBbmNob3JpbmdNb2RhbCIsInJlc2V0QW5jaG9yIiwib25BbmNob3JEcm9wIiwiaW1hZ2UiLCJhbmNob3JJbWFnZSIsIm9mZnNldFgiLCJjbGllbnRXaWR0aCIsIm9mZnNldFkiLCJjbGllbnRIZWlnaHQiLCJhbmNob3JMZWZ0IiwibW9kYWxCb2R5Iiwib2Zmc2V0IiwicG9zaXRpb24iLCJhbmNob3JUb3AiLCJzZXRBbmNob3IiLCJhZGRNZWRpYUZpbGVzIiwiZGVlcCIsImhhbmRsZXIiLCJpbml0aWFsaXplTWVkaWFGaWVsZCIsIm1vZGFsQm9keUVsZW1lbnQiLCJhZGRFdmVudExpc3RlbmVyIiwic2hvd01vZGFsIiwiYW5jaG9ySWNvbiIsInF1ZXJ5U2VsZWN0b3IiLCJpc0ludGVnZXIiLCJtZWRpYU5vdEZvdW5kIiwiZGlzY2FyZFdhcm5pbmciLCJub0ltYWdlcyIsIiRwYXJlbnQiLCJ1cGxvYWRJbnB1dElkIiwiX3NlbGYkdXBsb2FkSW5wdXRJZCIsInVwbG9hZElucHV0IiwicGVyY2VudGFnZSIsImhhbmRsZUZhaWx1cmUiLCJkaXNtaXNzV2FybmluZyIsImV4cGFuZGVkIiwicGVuZGluZ0NvdW50IiwiZXJyb3JDb3VudCIsInVwbG9hZHMiLCJjbGVhckVycm9ycyIsImZpbGVDb3VudCIsIm5ld0ZpbGUiLCJhbHJlYWR5SW5MaXN0IiwiZiIsImZpbGVVcGxvYWQiLCJ1cGRhdGVDb3VudCJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxDQUFDLFVBQVVBLE9BQU8sRUFBRTtFQUNsQixZQUFZOztFQUNaLElBQUksT0FBT0MsTUFBTSxLQUFLLFVBQVUsSUFBSUEsTUFBTSxDQUFDQyxHQUFHLEVBQUU7SUFDOUM7SUFDQUQsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFLHFCQUFxQixDQUFDLEVBQUVELE9BQU8sQ0FBQztFQUNwRCxDQUFDLE1BQU0sSUFBSSxRQUFPRyxPQUFPLGlDQUFBQyxPQUFBLENBQVBELE9BQU8sT0FBSyxRQUFRLEVBQUU7SUFDdEM7SUFDQUgsT0FBTyxDQUFDSyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUVBLE9BQU8sQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0VBQ2xFLENBQUMsTUFBTTtJQUNMO0lBQ0FMLE9BQU8sQ0FBQ00sTUFBTSxDQUFDQyxNQUFNLENBQUM7RUFDeEI7QUFDRixDQUFDLEVBQUUsVUFBVUMsQ0FBQyxFQUFFO0VBQ2QsWUFBWTs7RUFFWjtFQUNBO0VBQ0FBLENBQUMsQ0FBQ0MsT0FBTyxDQUFDQyxTQUFTLEdBQUcsRUFDcEIsSUFBSUMsTUFBTTtFQUNSO0VBQ0EsaUNBQWlDLEdBQy9CLDREQUE0RCxHQUM1RCw0QkFBNEIsR0FDNUIsa0NBQ0osQ0FBQyxDQUFDQyxJQUFJLENBQUNOLE1BQU0sQ0FBQ08sU0FBUyxDQUFDQyxTQUFTLENBQUM7RUFDbEM7RUFDQU4sQ0FBQyxDQUFDLHNCQUFzQixDQUFDLENBQUNPLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FDM0M7O0VBRUQ7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBUCxDQUFDLENBQUNDLE9BQU8sQ0FBQ08sYUFBYSxHQUFHLENBQUMsRUFB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TUFBTSxHQUFHLElBQUksQ0FBQ21nQixVQUFVO01BQ3ZELElBQUksSUFBSSxDQUFDOWpCLEtBQUssQ0FBQzJELE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDdkIsSUFBSSxDQUFDaWdCLFFBQVEsR0FBRyxLQUFLO01BQ3pCO0lBQ0osQ0FBQztJQUNESSxXQUFXLEVBQUUsU0FBQUEsWUFBQSxFQUFZO01BQ3JCLElBQUksQ0FBQ2hrQixLQUFLLEdBQUcsSUFBSSxDQUFDQSxLQUFLLENBQUMyUyxNQUFNLENBQUMsVUFBVTVILElBQUksRUFBRTtRQUMzQyxPQUFPQSxJQUFJLENBQUN1TixZQUFZLElBQUksRUFBRTtNQUNsQyxDQUFDLENBQUM7SUFDTjtFQUNKLENBQUM7RUFDRHhELEtBQUssRUFBRTtJQUNIOVUsS0FBSyxFQUFFLFNBQUFBLE1BQUEsRUFBWTtNQUNmLElBQUksQ0FBQ3NrQixXQUFXLENBQUMsQ0FBQztJQUN0QjtFQUNKO0FBQ0osQ0FBQyxDQUFDIiwiZmlsZSI6Im1lZGlhLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIGpRdWVyeSBGaWxlIFVwbG9hZCBQbHVnaW5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ibHVlaW1wL2pRdWVyeS1GaWxlLVVwbG9hZFxuICpcbiAqIENvcHlyaWdodCAyMDEwLCBTZWJhc3RpYW4gVHNjaGFuXG4gKiBodHRwczovL2JsdWVpbXAubmV0XG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiAqL1xuXG4vKiBnbG9iYWwgZGVmaW5lLCByZXF1aXJlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuZXctY2FwICovXG5cbihmdW5jdGlvbiAoZmFjdG9yeSkge1xuICAndXNlIHN0cmljdCc7XG4gIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICAvLyBSZWdpc3RlciBhcyBhbiBhbm9ueW1vdXMgQU1EIG1vZHVsZTpcbiAgICBkZWZpbmUoWydqcXVlcnknLCAnanF1ZXJ5LXVpL3VpL3dpZGdldCddLCBmYWN0b3J5KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAvLyBOb2RlL0NvbW1vbkpTOlxuICAgIGZhY3RvcnkocmVxdWlyZSgnanF1ZXJ5JyksIHJlcXVpcmUoJy4vdmVuZG9yL2pxdWVyeS51aS53aWRnZXQnKSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gQnJvd3NlciBnbG9iYWxzOlxuICAgIGZhY3Rvcnkod2luZG93LmpRdWVyeSk7XG4gIH1cbn0pKGZ1bmN0aW9uICgkKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICAvLyBEZXRlY3QgZmlsZSBpbnB1dCBzdXBwb3J0LCBiYXNlZCBvblxuICAvLyBodHRwczovL3ZpbGphbWlzLmNvbS8yMDEyL2ZpbGUtdXBsb2FkLXN1cHBvcnQtb24tbW9iaWxlL1xuICAkLnN1cHBvcnQuZmlsZUlucHV0ID0gIShcbiAgICBuZXcgUmVnRXhwKFxuICAgICAgLy8gSGFuZGxlIGRldmljZXMgd2hpY2ggZ2l2ZSBmYWxzZSBwb3NpdGl2ZXMgZm9yIHRoZSBmZWF0dXJlIGRldGVjdGlvbjpcbiAgICAgICcoQW5kcm9pZCAoMVxcXFwuWzAxNTZdfDJcXFxcLlswMV0pKScgK1xuICAgICAgICAnfChXaW5kb3dzIFBob25lIChPUyA3fDhcXFxcLjApKXwoWEJMV1ApfChadW5lV1ApfChXUERlc2t0b3ApJyArXG4gICAgICAgICd8KHcoZWIpP09TQnJvd3Nlcil8KHdlYk9TKScgK1xuICAgICAgICAnfChLaW5kbGUvKDFcXFxcLjB8MlxcXFwuWzA1XXwzXFxcXC4wKSknXG4gICAgKS50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KSB8fFxuICAgIC8vIEZlYXR1cmUgZGV0ZWN0aW9uIGZvciBhbGwgb3RoZXIgZGV2aWNlczpcbiAgICAkKCc8aW5wdXQgdHlwZT1cImZpbGVcIi8+JykucHJvcCgnZGlzYWJsZWQnKVxuICApO1xuXG4gIC8vIFRoZSBGaWxlUmVhZGVyIEFQSSBpcyBub3QgYWN0dWFsbHkgdXNlZCwgYnV0IHdvcmtzIGFzIGZlYXR1cmUgZGV0ZWN0aW9uLFxuICAvLyBhcyBzb21lIFNhZmFyaSB2ZXJzaW9ucyAoNT8pIHN1cHBvcnQgWEhSIGZpbGUgdXBsb2FkcyB2aWEgdGhlIEZvcm1EYXRhIEFQSSxcbiAgLy8gYnV0IG5vdCBub24tbXVsdGlwYXJ0IFhIUiBmaWxlIHVwbG9hZHMuXG4gIC8vIHdpbmRvdy5YTUxIdHRwUmVxdWVzdFVwbG9hZCBpcyBub3QgYXZhaWxhYmxlIG9uIElFMTAsIHNvIHdlIGNoZWNrIGZvclxuICAvLyB3aW5kb3cuUHJvZ3Jlc3NFdmVudCBpbnN0ZWFkIHRvIGRldGVjdCBYSFIyIGZpbGUgdXBsb2FkIGNhcGFiaWxpdHk6XG4gICQuc3VwcG9ydC54aHJGaWxlVXBsb2FkID0gISEod2luZG93LlByb2dyZXNzRXZlbnQgJiYgd2luZG93LkZpbGVSZWFkZXIpO1xuICAkLnN1cHBvcnQueGhyRm9ybURhdGFGaWxlVXBsb2FkID0gISF3aW5kb3cuRm9ybURhdGE7XG5cbiAgLy8gRGV0ZWN0IHN1cHBvcnQgZm9yIEJsb2Igc2xpY2luZyAocmVxdWlyZWQgZm9yIGNodW5rZWQgdXBsb2Fkcyk6XG4gICQuc3VwcG9ydC5ibG9iU2xpY2UgPVxuICAgIHdpbmRvdy5CbG9iICYmXG4gICAgKEJsb2IucHJvdG90eXBlLnNsaWNlIHx8XG4gICAgICBCbG9iLnByb3RvdHlwZS53ZWJraXRTbGljZSB8fFxuICAgICAgQmxvYi5wcm90b3R5cGUubW96U2xpY2UpO1xuXG4gIC8qKlxuICAgKiBIZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIGRyYWcgaGFuZGxlcnMgZm9yIGRyYWdvdmVyL2RyYWdlbnRlci9kcmFnbGVhdmVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgRXZlbnQgdHlwZVxuICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IERyYWcgaGFuZGxlclxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0RHJhZ0hhbmRsZXIodHlwZSkge1xuICAgIHZhciBpc0RyYWdPdmVyID0gdHlwZSA9PT0gJ2RyYWdvdmVyJztcbiAgICByZXR1cm4gZnVuY3Rpb24gKGUpIHtcbiAgICAgIGUuZGF0YVRyYW5zZmVyID0gZS5vcmlnaW5hbEV2ZW50ICYmIGUub3JpZ2luYWxFdmVudC5kYXRhVHJhbnNmZXI7XG4gICAgICB2YXIgZGF0YVRyYW5zZmVyID0gZS5kYXRhVHJhbnNmZXI7XG4gICAgICBpZiAoXG4gICAgICAgIGRhdGFUcmFuc2ZlciAmJlxuICAgICAgICAkLmluQXJyYXkoJ0ZpbGVzJywgZGF0YVRyYW5zZmVyLnR5cGVzKSAhPT0gLTEgJiZcbiAgICAgICAgdGhpcy5fdHJpZ2dlcih0eXBlLCAkLkV2ZW50KHR5cGUsIHsgZGVsZWdhdGVkRXZlbnQ6IGUgfSkpICE9PSBmYWxzZVxuICAgICAgKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKGlzRHJhZ092ZXIpIHtcbiAgICAgICAgICBkYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICdjb3B5JztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvLyBUaGUgZmlsZXVwbG9hZCB3aWRnZXQgbGlzdGVucyBmb3IgY2hhbmdlIGV2ZW50cyBvbiBmaWxlIGlucHV0IGZpZWxkcyBkZWZpbmVkXG4gIC8vIHZpYSBmaWxlSW5wdXQgc2V0dGluZyBhbmQgcGFzdGUgb3IgZHJvcCBldmVudHMgb2YgdGhlIGdpdmVuIGRyb3Bab25lLlxuICAvLyBJbiBhZGRpdGlvbiB0byB0aGUgZGVmYXVsdCBqUXVlcnkgV2lkZ2V0IG1ldGhvZHMsIHRoZSBmaWxldXBsb2FkIHdpZGdldFxuICAvLyBleHBvc2VzIHRoZSBcImFkZFwiIGFuZCBcInNlbmRcIiBtZXRob2RzLCB0byBhZGQgb3IgZGlyZWN0bHkgc2VuZCBmaWxlcyB1c2luZ1xuICAvLyB0aGUgZmlsZXVwbG9hZCBBUEkuXG4gIC8vIEJ5IGRlZmF1bHQsIGZpbGVzIGFkZGVkIHZpYSBmaWxlIGlucHV0IHNlbGVjdGlvbiwgcGFzdGUsIGRyYWcgJiBkcm9wIG9yXG4gIC8vIFwiYWRkXCIgbWV0aG9kIGFyZSB1cGxvYWRlZCBpbW1lZGlhdGVseSwgYnV0IGl0IGlzIHBvc3NpYmxlIHRvIG92ZXJyaWRlXG4gIC8vIHRoZSBcImFkZFwiIGNhbGxiYWNrIG9wdGlvbiB0byBxdWV1ZSBmaWxlIHVwbG9hZHMuXG4gICQud2lkZ2V0KCdibHVlaW1wLmZpbGV1cGxvYWQnLCB7XG4gICAgb3B0aW9uczoge1xuICAgICAgLy8gVGhlIGRyb3AgdGFyZ2V0IGVsZW1lbnQocyksIGJ5IHRoZSBkZWZhdWx0IHRoZSBjb21wbGV0ZSBkb2N1bWVudC5cbiAgICAgIC8vIFNldCB0byBudWxsIHRvIGRpc2FibGUgZHJhZyAmIGRyb3Agc3VwcG9ydDpcbiAgICAgIGRyb3Bab25lOiAkKGRvY3VtZW50KSxcbiAgICAgIC8vIFRoZSBwYXN0ZSB0YXJnZXQgZWxlbWVudChzKSwgYnkgdGhlIGRlZmF1bHQgdW5kZWZpbmVkLlxuICAgICAgLy8gU2V0IHRvIGEgRE9NIG5vZGUgb3IgalF1ZXJ5IG9iamVjdCB0byBlbmFibGUgZmlsZSBwYXN0aW5nOlxuICAgICAgcGFzdGVab25lOiB1bmRlZmluZWQsXG4gICAgICAvLyBUaGUgZmlsZSBpbnB1dCBmaWVsZChzKSwgdGhhdCBhcmUgbGlzdGVuZWQgdG8gZm9yIGNoYW5nZSBldmVudHMuXG4gICAgICAvLyBJZiB1bmRlZmluZWQsIGl0IGlzIHNldCB0byB0aGUgZmlsZSBpbnB1dCBmaWVsZHMgaW5zaWRlXG4gICAgICAvLyBvZiB0aGUgd2lkZ2V0IGVsZW1lbnQgb24gcGx1Z2luIGluaXRpYWxpemF0aW9uLlxuICAgICAgLy8gU2V0IHRvIG51bGwgdG8gZGlzYWJsZSB0aGUgY2hhbmdlIGxpc3RlbmVyLlxuICAgICAgZmlsZUlucHV0OiB1bmRlZmluZWQsXG4gICAgICAvLyBCeSBkZWZhdWx0LCB0aGUgZmlsZSBpbnB1dCBmaWVsZCBpcyByZXBsYWNlZCB3aXRoIGEgY2xvbmUgYWZ0ZXJcbiAgICAgIC8vIGVhY2ggaW5wdXQgZmllbGQgY2hhbmdlIGV2ZW50LiBUaGlzIGlzIHJlcXVpcmVkIGZvciBpZnJhbWUgdHJhbnNwb3J0XG4gICAgICAvLyBxdWV1ZXMgYW5kIGFsbG93cyBjaGFuZ2UgZXZlbnRzIHRvIGJlIGZpcmVkIGZvciB0aGUgc2FtZSBmaWxlXG4gICAgICAvLyBzZWxlY3Rpb24sIGJ1dCBjYW4gYmUgZGlzYWJsZWQgYnkgc2V0dGluZyB0aGUgZm9sbG93aW5nIG9wdGlvbiB0byBmYWxzZTpcbiAgICAgIHJlcGxhY2VGaWxlSW5wdXQ6IHRydWUsXG4gICAgICAvLyBUaGUgcGFyYW1ldGVyIG5hbWUgZm9yIHRoZSBmaWxlIGZvcm0gZGF0YSAodGhlIHJlcXVlc3QgYXJndW1lbnQgbmFtZSkuXG4gICAgICAvLyBJZiB1bmRlZmluZWQgb3IgZW1wdHksIHRoZSBuYW1lIHByb3BlcnR5IG9mIHRoZSBmaWxlIGlucHV0IGZpZWxkIGlzXG4gICAgICAvLyB1c2VkLCBvciBcImZpbGVzW11cIiBpZiB0aGUgZmlsZSBpbnB1dCBuYW1lIHByb3BlcnR5IGlzIGFsc28gZW1wdHksXG4gICAgICAvLyBjYW4gYmUgYSBzdHJpbmcgb3IgYW4gYXJyYXkgb2Ygc3RyaW5nczpcbiAgICAgIHBhcmFtTmFtZTogdW5kZWZpbmVkLFxuICAgICAgLy8gQnkgZGVmYXVsdCwgZWFjaCBmaWxlIG9mIGEgc2VsZWN0aW9uIGlzIHVwbG9hZGVkIHVzaW5nIGFuIGluZGl2aWR1YWxcbiAgICAgIC8vIHJlcXVlc3QgZm9yIFhIUiB0eXBlIHVwbG9hZHMuIFNldCB0byBmYWxzZSB0byB1cGxvYWQgZmlsZVxuICAgICAgLy8gc2VsZWN0aW9ucyBpbiBvbmUgcmVxdWVzdCBlYWNoOlxuICAgICAgc2luZ2xlRmlsZVVwbG9hZHM6IHRydWUsXG4gICAgICAvLyBUbyBsaW1pdCB0aGUgbnVtYmVyIG9mIGZpbGVzIHVwbG9hZGVkIHdpdGggb25lIFhIUiByZXF1ZXN0LFxuICAgICAgLy8gc2V0IHRoZSBmb2xsb3dpbmcgb3B0aW9uIHRvIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIDA6XG4gICAgICBsaW1pdE11bHRpRmlsZVVwbG9hZHM6IHVuZGVmaW5lZCxcbiAgICAgIC8vIFRoZSBmb2xsb3dpbmcgb3B0aW9uIGxpbWl0cyB0aGUgbnVtYmVyIG9mIGZpbGVzIHVwbG9hZGVkIHdpdGggb25lXG4gICAgICAvLyBYSFIgcmVxdWVzdCB0byBrZWVwIHRoZSByZXF1ZXN0IHNpemUgdW5kZXIgb3IgZXF1YWwgdG8gdGhlIGRlZmluZWRcbiAgICAgIC8vIGxpbWl0IGluIGJ5dGVzOlxuICAgICAgbGltaXRNdWx0aUZpbGVVcGxvYWRTaXplOiB1bmRlZmluZWQsXG4gICAgICAvLyBNdWx0aXBhcnQgZmlsZSB1cGxvYWRzIGFkZCBhIG51bWJlciBvZiBieXRlcyB0byBlYWNoIHVwbG9hZGVkIGZpbGUsXG4gICAgICAvLyB0aGVyZWZvcmUgdGhlIGZvbGxvd2luZyBvcHRpb24gYWRkcyBhbiBvdmVyaGVhZCBmb3IgZWFjaCBmaWxlIHVzZWRcbiAgICAgIC8vIGluIHRoZSBsaW1pdE11bHRpRmlsZVVwbG9hZFNpemUgY29uZmlndXJhdGlvbjpcbiAgICAgIGxpbWl0TXVsdGlGaWxlVXBsb2FkU2l6ZU92ZXJoZWFkOiA1MTIsXG4gICAgICAvLyBTZXQgdGhlIGZvbGxvd2luZyBvcHRpb24gdG8gdHJ1ZSB0byBpc3N1ZSBhbGwgZmlsZSB1cGxvYWQgcmVxdWVzdHNcbiAgICAgIC8vIGluIGEgc2VxdWVudGlhbCBvcmRlcjpcbiAgICAgIHNlcXVlbnRpYWxVcGxvYWRzOiBmYWxzZSxcbiAgICAgIC8vIFRvIGxpbWl0IHRoZSBudW1iZXIgb2YgY29uY3VycmVudCB1cGxvYWRzLFxuICAgICAgLy8gc2V0IHRoZSBmb2xsb3dpbmcgb3B0aW9uIHRvIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIDA6XG4gICAgICBsaW1pdENvbmN1cnJlbnRVcGxvYWRzOiB1bmRlZmluZWQsXG4gICAgICAvLyBTZXQgdGhlIGZvbGxvd2luZyBvcHRpb24gdG8gdHJ1ZSB0byBmb3JjZSBpZnJhbWUgdHJhbnNwb3J0IHVwbG9hZHM6XG4gICAgICBmb3JjZUlmcmFtZVRyYW5zcG9ydDogZmFsc2UsXG4gICAgICAvLyBTZXQgdGhlIGZvbGxvd2luZyBvcHRpb24gdG8gdGhlIGxvY2F0aW9uIG9mIGEgcmVkaXJlY3QgdXJsIG9uIHRoZVxuICAgICAgLy8gb3JpZ2luIHNlcnZlciwgZm9yIGNyb3NzLWRvbWFpbiBpZnJhbWUgdHJhbnNwb3J0IHVwbG9hZHM6XG4gICAgICByZWRpcmVjdDogdW5kZWZpbmVkLFxuICAgICAgLy8gVGhlIHBhcmFtZXRlciBuYW1lIGZvciB0aGUgcmVkaXJlY3QgdXJsLCBzZW50IGFzIHBhcnQgb2YgdGhlIGZvcm1cbiAgICAgIC8vIGRhdGEgYW5kIHNldCB0byAncmVkaXJlY3QnIGlmIHRoaXMgb3B0aW9uIGlzIGVtcHR5OlxuICAgICAgcmVkaXJlY3RQYXJhbU5hbWU6IHVuZGVmaW5lZCxcbiAgICAgIC8vIFNldCB0aGUgZm9sbG93aW5nIG9wdGlvbiB0byB0aGUgbG9jYXRpb24gb2YgYSBwb3N0TWVzc2FnZSB3aW5kb3csXG4gICAgICAvLyB0byBlbmFibGUgcG9zdE1lc3NhZ2UgdHJhbnNwb3J0IHVwbG9hZHM6XG4gICAgICBwb3N0TWVzc2FnZTogdW5kZWZpbmVkLFxuICAgICAgLy8gQnkgZGVmYXVsdCwgWEhSIGZpbGUgdXBsb2FkcyBhcmUgc2VudCBhcyBtdWx0aXBhcnQvZm9ybS1kYXRhLlxuICAgICAgLy8gVGhlIGlmcmFtZSB0cmFuc3BvcnQgaXMgYWx3YXlzIHVzaW5nIG11bHRpcGFydC9mb3JtLWRhdGEuXG4gICAgICAvLyBTZXQgdG8gZmFsc2UgdG8gZW5hYmxlIG5vbi1tdWx0aXBhcnQgWEhSIHVwbG9hZHM6XG4gICAgICBtdWx0aXBhcnQ6IHRydWUsXG4gICAgICAvLyBUbyB1cGxvYWQgbGFyZ2UgZmlsZXMgaW4gc21hbGxlciBjaHVua3MsIHNldCB0aGUgZm9sbG93aW5nIG9wdGlvblxuICAgICAgLy8gdG8gYSBwcmVmZXJyZWQgbWF4aW11bSBjaHVuayBzaXplLiBJZiBzZXQgdG8gMCwgbnVsbCBvciB1bmRlZmluZWQsXG4gICAgICAvLyBvciB0aGUgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSByZXF1aXJlZCBCbG9iIEFQSSwgZmlsZXMgd2lsbFxuICAgICAgLy8gYmUgdXBsb2FkZWQgYXMgYSB3aG9sZS5cbiAgICAgIG1heENodW5rU2l6ZTogdW5kZWZpbmVkLFxuICAgICAgLy8gV2hlbiBhIG5vbi1tdWx0aXBhcnQgdXBsb2FkIG9yIGEgY2h1bmtlZCBtdWx0aXBhcnQgdXBsb2FkIGhhcyBiZWVuXG4gICAgICAvLyBhYm9ydGVkLCB0aGlzIG9wdGlvbiBjYW4gYmUgdXNlZCB0byByZXN1bWUgdGhlIHVwbG9hZCBieSBzZXR0aW5nXG4gICAgICAvLyBpdCB0byB0aGUgc2l6ZSBvZiB0aGUgYWxyZWFkeSB1cGxvYWRlZCBieXRlcy4gVGhpcyBvcHRpb24gaXMgbW9zdFxuICAgICAgLy8gdXNlZnVsIHdoZW4gbW9kaWZ5aW5nIHRoZSBvcHRpb25zIG9iamVjdCBpbnNpZGUgb2YgdGhlIFwiYWRkXCIgb3JcbiAgICAgIC8vIFwic2VuZFwiIGNhbGxiYWNrcywgYXMgdGhlIG9wdGlvbnMgYXJlIGNsb25lZCBmb3IgZWFjaCBmaWxlIHVwbG9hZC5cbiAgICAgIHVwbG9hZGVkQnl0ZXM6IHVuZGVmaW5lZCxcbiAgICAgIC8vIEJ5IGRlZmF1bHQsIGZhaWxlZCAoYWJvcnQgb3IgZXJyb3IpIGZpbGUgdXBsb2FkcyBhcmUgcmVtb3ZlZCBmcm9tIHRoZVxuICAgICAgLy8gZ2xvYmFsIHByb2dyZXNzIGNhbGN1bGF0aW9uLiBTZXQgdGhlIGZvbGxvd2luZyBvcHRpb24gdG8gZmFsc2UgdG9cbiAgICAgIC8vIHByZXZlbnQgcmVjYWxjdWxhdGluZyB0aGUgZ2xvYmFsIHByb2dyZXNzIGRhdGE6XG4gICAgICByZWNhbGN1bGF0ZVByb2dyZXNzOiB0cnVlLFxuICAgICAgLy8gSW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzIHRvIGNhbGN1bGF0ZSBhbmQgdHJpZ2dlciBwcm9ncmVzcyBldmVudHM6XG4gICAgICBwcm9ncmVzc0ludGVydmFsOiAxMDAsXG4gICAgICAvLyBJbnRlcnZhbCBpbiBtaWxsaXNlY29uZHMgdG8gY2FsY3VsYXRlIHByb2dyZXNzIGJpdHJhdGU6XG4gICAgICBiaXRyYXRlSW50ZXJ2YWw6IDUwMCxcbiAgICAgIC8vIEJ5IGRlZmF1bHQsIHVwbG9hZHMgYXJlIHN0YXJ0ZWQgYXV0b21hdGljYWxseSB3aGVuIGFkZGluZyBmaWxlczpcbiAgICAgIGF1dG9VcGxvYWQ6IHRydWUsXG4gICAgICAvLyBCeSBkZWZhdWx0LCBkdXBsaWNhdGUgZmlsZSBuYW1lcyBhcmUgZXhwZWN0ZWQgdG8gYmUgaGFuZGxlZCBvblxuICAgICAgLy8gdGhlIHNlcnZlci1zaWRlLiBJZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSAoZS5nLiB3aGVuIHVwbG9hZGluZ1xuICAgICAgLy8gZmlsZXMgZGlyZWN0bHkgdG8gQW1hem9uIFMzKSwgdGhlIGZvbGxvd2luZyBvcHRpb24gY2FuIGJlIHNldCB0b1xuICAgICAgLy8gYW4gZW1wdHkgb2JqZWN0IG9yIGFuIG9iamVjdCBtYXBwaW5nIGV4aXN0aW5nIGZpbGVuYW1lcywgZS5nLjpcbiAgICAgIC8vIHsgXCJpbWFnZS5qcGdcIjogdHJ1ZSwgXCJpbWFnZSAoMSkuanBnXCI6IHRydWUgfVxuICAgICAgLy8gSWYgaXQgaXMgc2V0LCBhbGwgZmlsZXMgd2lsbCBiZSB1cGxvYWRlZCB3aXRoIHVuaXF1ZSBmaWxlbmFtZXMsXG4gICAgICAvLyBhZGRpbmcgaW5jcmVhc2luZyBudW1iZXIgc3VmZml4ZXMgaWYgbmVjZXNzYXJ5LCBlLmcuOlxuICAgICAgLy8gXCJpbWFnZSAoMikuanBnXCJcbiAgICAgIHVuaXF1ZUZpbGVuYW1lczogdW5kZWZpbmVkLFxuXG4gICAgICAvLyBFcnJvciBhbmQgaW5mbyBtZXNzYWdlczpcbiAgICAgIG1lc3NhZ2VzOiB7XG4gICAgICAgIHVwbG9hZGVkQnl0ZXM6ICdVcGxvYWRlZCBieXRlcyBleGNlZWQgZmlsZSBzaXplJ1xuICAgICAgfSxcblxuICAgICAgLy8gVHJhbnNsYXRpb24gZnVuY3Rpb24sIGdldHMgdGhlIG1lc3NhZ2Uga2V5IHRvIGJlIHRyYW5zbGF0ZWRcbiAgICAgIC8vIGFuZCBhbiBvYmplY3Qgd2l0aCBjb250ZXh0IHNwZWNpZmljIGRhdGEgYXMgYXJndW1lbnRzOlxuICAgICAgaTE4bjogZnVuY3Rpb24gKG1lc3NhZ2UsIGNvbnRleHQpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIG1lc3NhZ2UgPSB0aGlzLm1lc3NhZ2VzW21lc3NhZ2VdIHx8IG1lc3NhZ2UudG9TdHJpbmcoKTtcbiAgICAgICAgaWYgKGNvbnRleHQpIHtcbiAgICAgICAgICAkLmVhY2goY29udGV4dCwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZSgneycgKyBrZXkgKyAnfScsIHZhbHVlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgIH0sXG5cbiAgICAgIC8vIEFkZGl0aW9uYWwgZm9ybSBkYXRhIHRvIGJlIHNlbnQgYWxvbmcgd2l0aCB0aGUgZmlsZSB1cGxvYWRzIGNhbiBiZSBzZXRcbiAgICAgIC8vIHVzaW5nIHRoaXMgb3B0aW9uLCB3aGljaCBhY2NlcHRzIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBuYW1lIGFuZFxuICAgICAgLy8gdmFsdWUgcHJvcGVydGllcywgYSBmdW5jdGlvbiByZXR1cm5pbmcgc3VjaCBhbiBhcnJheSwgYSBGb3JtRGF0YVxuICAgICAgLy8gb2JqZWN0IChmb3IgWEhSIGZpbGUgdXBsb2FkcyksIG9yIGEgc2ltcGxlIG9iamVjdC5cbiAgICAgIC8vIFRoZSBmb3JtIG9mIHRoZSBmaXJzdCBmaWxlSW5wdXQgaXMgZ2l2ZW4gYXMgcGFyYW1ldGVyIHRvIHRoZSBmdW5jdGlvbjpcbiAgICAgIGZvcm1EYXRhOiBmdW5jdGlvbiAoZm9ybSkge1xuICAgICAgICByZXR1cm4gZm9ybS5zZXJpYWxpemVBcnJheSgpO1xuICAgICAgfSxcblxuICAgICAgLy8gVGhlIGFkZCBjYWxsYmFjayBpcyBpbnZva2VkIGFzIHNvb24gYXMgZmlsZXMgYXJlIGFkZGVkIHRvIHRoZSBmaWxldXBsb2FkXG4gICAgICAvLyB3aWRnZXQgKHZpYSBmaWxlIGlucHV0IHNlbGVjdGlvbiwgZHJhZyAmIGRyb3AsIHBhc3RlIG9yIGFkZCBBUEkgY2FsbCkuXG4gICAgICAvLyBJZiB0aGUgc2luZ2xlRmlsZVVwbG9hZHMgb3B0aW9uIGlzIGVuYWJsZWQsIHRoaXMgY2FsbGJhY2sgd2lsbCBiZVxuICAgICAgLy8gY2FsbGVkIG9uY2UgZm9yIGVhY2ggZmlsZSBpbiB0aGUgc2VsZWN0aW9uIGZvciBYSFIgZmlsZSB1cGxvYWRzLCBlbHNlXG4gICAgICAvLyBvbmNlIGZvciBlYWNoIGZpbGUgc2VsZWN0aW9uLlxuICAgICAgLy9cbiAgICAgIC8vIFRoZSB1cGxvYWQgc3RhcnRzIHdoZW4gdGhlIHN1Ym1pdCBtZXRob2QgaXMgaW52b2tlZCBvbiB0aGUgZGF0YSBwYXJhbWV0ZXIuXG4gICAgICAvLyBUaGUgZGF0YSBvYmplY3QgY29udGFpbnMgYSBmaWxlcyBwcm9wZXJ0eSBob2xkaW5nIHRoZSBhZGRlZCBmaWxlc1xuICAgICAgLy8gYW5kIGFsbG93cyB5b3UgdG8gb3ZlcnJpZGUgcGx1Z2luIG9wdGlvbnMgYXMgd2VsbCBhcyBkZWZpbmUgYWpheCBzZXR0aW5ncy5cbiAgICAgIC8vXG4gICAgICAvLyBMaXN0ZW5lcnMgZm9yIHRoaXMgY2FsbGJhY2sgY2FuIGFsc28gYmUgYm91bmQgdGhlIGZvbGxvd2luZyB3YXk6XG4gICAgICAvLyAub24oJ2ZpbGV1cGxvYWRhZGQnLCBmdW5jKTtcbiAgICAgIC8vXG4gICAgICAvLyBkYXRhLnN1Ym1pdCgpIHJldHVybnMgYSBQcm9taXNlIG9iamVjdCBhbmQgYWxsb3dzIHRvIGF0dGFjaCBhZGRpdGlvbmFsXG4gICAgICAvLyBoYW5kbGVycyB1c2luZyBqUXVlcnkncyBEZWZlcnJlZCBjYWxsYmFja3M6XG4gICAgICAvLyBkYXRhLnN1Ym1pdCgpLmRvbmUoZnVuYykuZmFpbChmdW5jKS5hbHdheXMoZnVuYyk7XG4gICAgICBhZGQ6IGZ1bmN0aW9uIChlLCBkYXRhKSB7XG4gICAgICAgIGlmIChlLmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBkYXRhLmF1dG9VcGxvYWQgfHxcbiAgICAgICAgICAoZGF0YS5hdXRvVXBsb2FkICE9PSBmYWxzZSAmJlxuICAgICAgICAgICAgJCh0aGlzKS5maWxldXBsb2FkKCdvcHRpb24nLCAnYXV0b1VwbG9hZCcpKVxuICAgICAgICApIHtcbiAgICAgICAgICBkYXRhLnByb2Nlc3MoKS5kb25lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGRhdGEuc3VibWl0KCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIC8vIE90aGVyIGNhbGxiYWNrczpcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIHRoZSBzdWJtaXQgZXZlbnQgb2YgZWFjaCBmaWxlIHVwbG9hZDpcbiAgICAgIC8vIHN1Ym1pdDogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRzdWJtaXQnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIHRoZSBzdGFydCBvZiBlYWNoIGZpbGUgdXBsb2FkIHJlcXVlc3Q6XG4gICAgICAvLyBzZW5kOiBmdW5jdGlvbiAoZSwgZGF0YSkge30sIC8vIC5vbignZmlsZXVwbG9hZHNlbmQnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIHN1Y2Nlc3NmdWwgdXBsb2FkczpcbiAgICAgIC8vIGRvbmU6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkZG9uZScsIGZ1bmMpO1xuXG4gICAgICAvLyBDYWxsYmFjayBmb3IgZmFpbGVkIChhYm9ydCBvciBlcnJvcikgdXBsb2FkczpcbiAgICAgIC8vIGZhaWw6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkZmFpbCcsIGZ1bmMpO1xuXG4gICAgICAvLyBDYWxsYmFjayBmb3IgY29tcGxldGVkIChzdWNjZXNzLCBhYm9ydCBvciBlcnJvcikgcmVxdWVzdHM6XG4gICAgICAvLyBhbHdheXM6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkYWx3YXlzJywgZnVuYyk7XG5cbiAgICAgIC8vIENhbGxiYWNrIGZvciB1cGxvYWQgcHJvZ3Jlc3MgZXZlbnRzOlxuICAgICAgLy8gcHJvZ3Jlc3M6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkcHJvZ3Jlc3MnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIGdsb2JhbCB1cGxvYWQgcHJvZ3Jlc3MgZXZlbnRzOlxuICAgICAgLy8gcHJvZ3Jlc3NhbGw6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkcHJvZ3Jlc3NhbGwnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIHVwbG9hZHMgc3RhcnQsIGVxdWl2YWxlbnQgdG8gdGhlIGdsb2JhbCBhamF4U3RhcnQgZXZlbnQ6XG4gICAgICAvLyBzdGFydDogZnVuY3Rpb24gKGUpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRzdGFydCcsIGZ1bmMpO1xuXG4gICAgICAvLyBDYWxsYmFjayBmb3IgdXBsb2FkcyBzdG9wLCBlcXVpdmFsZW50IHRvIHRoZSBnbG9iYWwgYWpheFN0b3AgZXZlbnQ6XG4gICAgICAvLyBzdG9wOiBmdW5jdGlvbiAoZSkge30sIC8vIC5vbignZmlsZXVwbG9hZHN0b3AnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIGNoYW5nZSBldmVudHMgb2YgdGhlIGZpbGVJbnB1dChzKTpcbiAgICAgIC8vIGNoYW5nZTogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRjaGFuZ2UnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIHBhc3RlIGV2ZW50cyB0byB0aGUgcGFzdGVab25lKHMpOlxuICAgICAgLy8gcGFzdGU6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkcGFzdGUnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIGRyb3AgZXZlbnRzIG9mIHRoZSBkcm9wWm9uZShzKTpcbiAgICAgIC8vIGRyb3A6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkZHJvcCcsIGZ1bmMpO1xuXG4gICAgICAvLyBDYWxsYmFjayBmb3IgZHJhZ292ZXIgZXZlbnRzIG9mIHRoZSBkcm9wWm9uZShzKTpcbiAgICAgIC8vIGRyYWdvdmVyOiBmdW5jdGlvbiAoZSkge30sIC8vIC5vbignZmlsZXVwbG9hZGRyYWdvdmVyJywgZnVuYyk7XG5cbiAgICAgIC8vIENhbGxiYWNrIGJlZm9yZSB0aGUgc3RhcnQgb2YgZWFjaCBjaHVuayB1cGxvYWQgcmVxdWVzdCAoYmVmb3JlIGZvcm0gZGF0YSBpbml0aWFsaXphdGlvbik6XG4gICAgICAvLyBjaHVua2JlZm9yZXNlbmQ6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkY2h1bmtiZWZvcmVzZW5kJywgZnVuYyk7XG5cbiAgICAgIC8vIENhbGxiYWNrIGZvciB0aGUgc3RhcnQgb2YgZWFjaCBjaHVuayB1cGxvYWQgcmVxdWVzdDpcbiAgICAgIC8vIGNodW5rc2VuZDogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRjaHVua3NlbmQnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIHN1Y2Nlc3NmdWwgY2h1bmsgdXBsb2FkczpcbiAgICAgIC8vIGNodW5rZG9uZTogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRjaHVua2RvbmUnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIGZhaWxlZCAoYWJvcnQgb3IgZXJyb3IpIGNodW5rIHVwbG9hZHM6XG4gICAgICAvLyBjaHVua2ZhaWw6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkY2h1bmtmYWlsJywgZnVuYyk7XG5cbiAgICAgIC8vIENhbGxiYWNrIGZvciBjb21wbGV0ZWQgKHN1Y2Nlc3MsIGFib3J0IG9yIGVycm9yKSBjaHVuayB1cGxvYWQgcmVxdWVzdHM6XG4gICAgICAvLyBjaHVua2Fsd2F5czogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRjaHVua2Fsd2F5cycsIGZ1bmMpO1xuXG4gICAgICAvLyBUaGUgcGx1Z2luIG9wdGlvbnMgYXJlIHVzZWQgYXMgc2V0dGluZ3Mgb2JqZWN0IGZvciB0aGUgYWpheCBjYWxscy5cbiAgICAgIC8vIFRoZSBmb2xsb3dpbmcgYXJlIGpRdWVyeSBhamF4IHNldHRpbmdzIHJlcXVpcmVkIGZvciB0aGUgZmlsZSB1cGxvYWRzOlxuICAgICAgcHJvY2Vzc0RhdGE6IGZhbHNlLFxuICAgICAgY29udGVudFR5cGU6IGZhbHNlLFxuICAgICAgY2FjaGU6IGZhbHNlLFxuICAgICAgdGltZW91dDogMFxuICAgIH0sXG5cbiAgICAvLyBqUXVlcnkgdmVyc2lvbnMgYmVmb3JlIDEuOCByZXF1aXJlIHByb21pc2UucGlwZSBpZiB0aGUgcmV0dXJuIHZhbHVlIGlzXG4gICAgLy8gdXNlZCwgYXMgcHJvbWlzZS50aGVuIGluIG9sZGVyIHZlcnNpb25zIGhhcyBhIGRpZmZlcmVudCBiZWhhdmlvciwgc2VlOlxuICAgIC8vIGh0dHBzOi8vYmxvZy5qcXVlcnkuY29tLzIwMTIvMDgvMDkvanF1ZXJ5LTEtOC1yZWxlYXNlZC9cbiAgICAvLyBodHRwczovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTEwMTBcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYmx1ZWltcC9qUXVlcnktRmlsZS1VcGxvYWQvcHVsbC8zNDM1XG4gICAgX3Byb21pc2VQaXBlOiAoZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHBhcnRzID0gJC5mbi5qcXVlcnkuc3BsaXQoJy4nKTtcbiAgICAgIHJldHVybiBOdW1iZXIocGFydHNbMF0pID4gMSB8fCBOdW1iZXIocGFydHNbMV0pID4gNyA/ICd0aGVuJyA6ICdwaXBlJztcbiAgICB9KSgpLFxuXG4gICAgLy8gQSBsaXN0IG9mIG9wdGlvbnMgdGhhdCByZXF1aXJlIHJlaW5pdGlhbGl6aW5nIGV2ZW50IGxpc3RlbmVycyBhbmQvb3JcbiAgICAvLyBzcGVjaWFsIGluaXRpYWxpemF0aW9uIGNvZGU6XG4gICAgX3NwZWNpYWxPcHRpb25zOiBbXG4gICAgICAnZmlsZUlucHV0JyxcbiAgICAgICdkcm9wWm9uZScsXG4gICAgICAncGFzdGVab25lJyxcbiAgICAgICdtdWx0aXBhcnQnLFxuICAgICAgJ2ZvcmNlSWZyYW1lVHJhbnNwb3J0J1xuICAgIF0sXG5cbiAgICBfYmxvYlNsaWNlOlxuICAgICAgJC5zdXBwb3J0LmJsb2JTbGljZSAmJlxuICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgc2xpY2UgPSB0aGlzLnNsaWNlIHx8IHRoaXMud2Via2l0U2xpY2UgfHwgdGhpcy5tb3pTbGljZTtcbiAgICAgICAgcmV0dXJuIHNsaWNlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9LFxuXG4gICAgX0JpdHJhdGVUaW1lcjogZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcy50aW1lc3RhbXAgPSBEYXRlLm5vdyA/IERhdGUubm93KCkgOiBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgIHRoaXMubG9hZGVkID0gMDtcbiAgICAgIHRoaXMuYml0cmF0ZSA9IDA7XG4gICAgICB0aGlzLmdldEJpdHJhdGUgPSBmdW5jdGlvbiAobm93LCBsb2FkZWQsIGludGVydmFsKSB7XG4gICAgICAgIHZhciB0aW1lRGlmZiA9IG5vdyAtIHRoaXMudGltZXN0YW1wO1xuICAgICAgICBpZiAoIXRoaXMuYml0cmF0ZSB8fCAhaW50ZXJ2YWwgfHwgdGltZURpZmYgPiBpbnRlcnZhbCkge1xuICAgICAgICAgIHRoaXMuYml0cmF0ZSA9IChsb2FkZWQgLSB0aGlzLmxvYWRlZCkgKiAoMTAwMCAvIHRpbWVEaWZmKSAqIDg7XG4gICAgICAgICAgdGhpcy5sb2FkZWQgPSBsb2FkZWQ7XG4gICAgICAgICAgdGhpcy50aW1lc3RhbXAgPSBub3c7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuYml0cmF0ZTtcbiAgICAgIH07XG4gICAgfSxcblxuICAgIF9pc1hIUlVwbG9hZDogZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICFvcHRpb25zLmZvcmNlSWZyYW1lVHJhbnNwb3J0ICYmXG4gICAgICAgICgoIW9wdGlvbnMubXVsdGlwYXJ0ICYmICQuc3VwcG9ydC54aHJGaWxlVXBsb2FkKSB8fFxuICAgICAgICAgICQuc3VwcG9ydC54aHJGb3JtRGF0YUZpbGVVcGxvYWQpXG4gICAgICApO1xuICAgIH0sXG5cbiAgICBfZ2V0Rm9ybURhdGE6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICB2YXIgZm9ybURhdGE7XG4gICAgICBpZiAoJC50eXBlKG9wdGlvbnMuZm9ybURhdGEpID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmZvcm1EYXRhKG9wdGlvbnMuZm9ybSk7XG4gICAgICB9XG4gICAgICBpZiAoJC5pc0FycmF5KG9wdGlvbnMuZm9ybURhdGEpKSB7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmZvcm1EYXRhO1xuICAgICAgfVxuICAgICAgaWYgKCQudHlwZShvcHRpb25zLmZvcm1EYXRhKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgZm9ybURhdGEgPSBbXTtcbiAgICAgICAgJC5lYWNoKG9wdGlvbnMuZm9ybURhdGEsIGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICAgICAgICAgIGZvcm1EYXRhLnB1c2goeyBuYW1lOiBuYW1lLCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZm9ybURhdGE7XG4gICAgICB9XG4gICAgICByZXR1cm4gW107XG4gICAgfSxcblxuICAgIF9nZXRUb3RhbDogZnVuY3Rpb24gKGZpbGVzKSB7XG4gICAgICB2YXIgdG90YWwgPSAwO1xuICAgICAgJC5lYWNoKGZpbGVzLCBmdW5jdGlvbiAoaW5kZXgsIGZpbGUpIHtcbiAgICAgICAgdG90YWwgKz0gZmlsZS5zaXplIHx8IDE7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0b3RhbDtcbiAgICB9LFxuXG4gICAgX2luaXRQcm9ncmVzc09iamVjdDogZnVuY3Rpb24gKG9iaikge1xuICAgICAgdmFyIHByb2dyZXNzID0ge1xuICAgICAgICBsb2FkZWQ6IDAsXG4gICAgICAgIHRvdGFsOiAwLFxuICAgICAgICBiaXRyYXRlOiAwXG4gICAgICB9O1xuICAgICAgaWYgKG9iai5fcHJvZ3Jlc3MpIHtcbiAgICAgICAgJC5leHRlbmQob2JqLl9wcm9ncmVzcywgcHJvZ3Jlc3MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2JqLl9wcm9ncmVzcyA9IHByb2dyZXNzO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBfaW5pdFJlc3BvbnNlT2JqZWN0OiBmdW5jdGlvbiAob2JqKSB7XG4gICAgICB2YXIgcHJvcDtcbiAgICAgIGlmIChvYmouX3Jlc3BvbnNlKSB7XG4gICAgICAgIGZvciAocHJvcCBpbiBvYmouX3Jlc3BvbnNlKSB7XG4gICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmouX3Jlc3BvbnNlLCBwcm9wKSkge1xuICAgICAgICAgICAgZGVsZXRlIG9iai5fcmVzcG9uc2VbcHJvcF07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYmouX3Jlc3BvbnNlID0ge307XG4gICAgICB9XG4gICAgfSxcblxuICAgIF9vblByb2dyZXNzOiBmdW5jdGlvbiAoZSwgZGF0YSkge1xuICAgICAgaWYgKGUubGVuZ3RoQ29tcHV0YWJsZSkge1xuICAgICAgICB2YXIgbm93ID0gRGF0ZS5ub3cgPyBEYXRlLm5vdygpIDogbmV3IERhdGUoKS5nZXRUaW1lKCksXG4gICAgICAgICAgbG9hZGVkO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZGF0YS5fdGltZSAmJlxuICAgICAgICAgIGRhdGEucHJvZ3Jlc3NJbnRlcnZhbCAmJlxuICAgICAgICAgIG5vdyAtIGRhdGEuX3RpbWUgPCBkYXRhLnByb2dyZXNzSW50ZXJ2YWwgJiZcbiAgICAgICAgICBlLmxvYWRlZCAhPT0gZS50b3RhbFxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZGF0YS5fdGltZSA9IG5vdztcbiAgICAgICAgbG9hZGVkID1cbiAgICAgICAgICBNYXRoLmZsb29yKFxuICAgICAgICAgICAgKGUubG9hZGVkIC8gZS50b3RhbCkgKiAoZGF0YS5jaHVua1NpemUgfHwgZGF0YS5fcHJvZ3Jlc3MudG90YWwpXG4gICAgICAgICAgKSArIChkYXRhLnVwbG9hZGVkQnl0ZXMgfHwgMCk7XG4gICAgICAgIC8vIEFkZCB0aGUgZGlmZmVyZW5jZSBmcm9tIHRoZSBwcmV2aW91c2x5IGxvYWRlZCBzdGF0ZVxuICAgICAgICAvLyB0byB0aGUgZ2xvYmFsIGxvYWRlZCBjb3VudGVyOlxuICAgICAgICB0aGlzLl9wcm9ncmVzcy5sb2FkZWQgKz0gbG9hZGVkIC0gZGF0YS5fcHJvZ3Jlc3MubG9hZGVkO1xuICAgICAgICB0aGlzLl9wcm9ncmVzcy5iaXRyYXRlID0gdGhpcy5fYml0cmF0ZVRpbWVyLmdldEJpdHJhdGUoXG4gICAgICAgICAgbm93LFxuICAgICAgICAgIHRoaXMuX3Byb2dyZXNzLmxvYWRlZCxcbiAgICAgICAgICBkYXRhLmJpdHJhdGVJbnRlcnZhbFxuICAgICAgICApO1xuICAgICAgICBkYXRhLl9wcm9ncmVzcy5sb2FkZWQgPSBkYXRhLmxvYWRlZCA9IGxvYWRlZDtcbiAgICAgICAgZGF0YS5fcHJvZ3Jlc3MuYml0cmF0ZSA9IGRhdGEuYml0cmF0ZSA9IGRhdGEuX2JpdHJhdGVUaW1lci5nZXRCaXRyYXRlKFxuICAgICAgICAgIG5vdyxcbiAgICAgICAgICBsb2FkZWQsXG4gICAgICAgICAgZGF0YS5iaXRyYXRlSW50ZXJ2YWxcbiAgICAgICAgKTtcbiAgICAgICAgLy8gVHJpZ2dlciBhIGN1c3RvbSBwcm9ncmVzcyBldmVudCB3aXRoIGEgdG90YWwgZGF0YSBwcm9wZXJ0eSBzZXRcbiAgICAgICAgLy8gdG8gdGhlIGZpbGUgc2l6ZShzKSBvZiB0aGUgY3VycmVudCB1cGxvYWQgYW5kIGEgbG9hZGVkIGRhdGFcbiAgICAgICAgLy8gcHJvcGVydHkgY2FsY3VsYXRlZCBhY2NvcmRpbmdseTpcbiAgICAgICAgdGhpcy5fdHJpZ2dlcihcbiAgICAgICAgICAncHJvZ3Jlc3MnLFxuICAgICAgICAgICQuRXZlbnQoJ3Byb2dyZXNzJywgeyBkZWxlZ2F0ZWRFdmVudDogZSB9KSxcbiAgICAgICAgICBkYXRhXG4gICAgICAgICk7XG4gICAgICAgIC8vIFRyaWdnZXIgYSBnbG9iYWwgcHJvZ3Jlc3MgZXZlbnQgZm9yIGFsbCBjdXJyZW50IGZpbGUgdXBsb2FkcyxcbiAgICAgICAgLy8gaW5jbHVkaW5nIGFqYXggY2FsbHMgcXVldWVkIGZvciBzZXF1ZW50aWFsIGZpbGUgdXBsb2FkczpcbiAgICAgICAgdGhpcy5fdHJpZ2dlcihcbiAgICAgICAgICAncHJvZ3Jlc3NhbGwnLFxuICAgICAgICAgICQuRXZlbnQoJ3Byb2dyZXNzYWxsJywgeyBkZWxlZ2F0ZWRFdmVudDogZSB9KSxcbiAgICAgICAgICB0aGlzLl9wcm9ncmVzc1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBfaW5pdFByb2dyZXNzTGlzdGVuZXI6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXMsXG4gICAgICAgIHhociA9IG9wdGlvbnMueGhyID8gb3B0aW9ucy54aHIoKSA6ICQuYWpheFNldHRpbmdzLnhocigpO1xuICAgICAgLy8gQWNjZXNzIHRvIHRoZSBuYXRpdmUgWEhSIG9iamVjdCBpcyByZXF1aXJlZCB0byBhZGQgZXZlbnQgbGlzdGVuZXJzXG4gICAgICAvLyBmb3IgdGhlIHVwbG9hZCBwcm9ncmVzcyBldmVudDpcbiAgICAgIGlmICh4aHIudXBsb2FkKSB7XG4gICAgICAgICQoeGhyLnVwbG9hZCkub24oJ3Byb2dyZXNzJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICB2YXIgb2UgPSBlLm9yaWdpbmFsRXZlbnQ7XG4gICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBwcm9ncmVzcyBldmVudCBwcm9wZXJ0aWVzIGdldCBjb3BpZWQgb3ZlcjpcbiAgICAgICAgICBlLmxlbmd0aENvbXB1dGFibGUgPSBvZS5sZW5ndGhDb21wdXRhYmxlO1xuICAgICAgICAgIGUubG9hZGVkID0gb2UubG9hZGVkO1xuICAgICAgICAgIGUudG90YWwgPSBvZS50b3RhbDtcbiAgICAgICAgICB0aGF0Ll9vblByb2dyZXNzKGUsIG9wdGlvbnMpO1xuICAgICAgICB9KTtcbiAgICAgICAgb3B0aW9ucy54aHIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHhocjtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX2RlaW5pdFByb2dyZXNzTGlzdGVuZXI6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICB2YXIgeGhyID0gb3B0aW9ucy54aHIgPyBvcHRpb25zLnhocigpIDogJC5hamF4U2V0dGluZ3MueGhyKCk7XG4gICAgICBpZiAoeGhyLnVwbG9hZCkge1xuICAgICAgICAkKHhoci51cGxvYWQpLm9mZigncHJvZ3Jlc3MnKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX2lzSW5zdGFuY2VPZjogZnVuY3Rpb24gKHR5cGUsIG9iaikge1xuICAgICAgLy8gQ3Jvc3MtZnJhbWUgaW5zdGFuY2VvZiBjaGVja1xuICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCAnICsgdHlwZSArICddJztcbiAgICB9LFxuXG4gICAgX2dldFVuaXF1ZUZpbGVuYW1lOiBmdW5jdGlvbiAobmFtZSwgbWFwKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgIG5hbWUgPSBTdHJpbmcobmFtZSk7XG4gICAgICBpZiAobWFwW25hbWVdKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBuYW1lID0gbmFtZS5yZXBsYWNlKFxuICAgICAgICAgIC8oPzogXFwoKFtcXGRdKylcXCkpPyhcXC5bXi5dKyk/JC8sXG4gICAgICAgICAgZnVuY3Rpb24gKF8sIHAxLCBwMikge1xuICAgICAgICAgICAgdmFyIGluZGV4ID0gcDEgPyBOdW1iZXIocDEpICsgMSA6IDE7XG4gICAgICAgICAgICB2YXIgZXh0ID0gcDIgfHwgJyc7XG4gICAgICAgICAgICByZXR1cm4gJyAoJyArIGluZGV4ICsgJyknICsgZXh0O1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldFVuaXF1ZUZpbGVuYW1lKG5hbWUsIG1hcCk7XG4gICAgICB9XG4gICAgICBtYXBbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIG5hbWU7XG4gICAgfSxcblxuICAgIF9pbml0WEhSRGF0YTogZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcyxcbiAgICAgICAgZm9ybURhdGEsXG4gICAgICAgIGZpbGUgPSBvcHRpb25zLmZpbGVzWzBdLFxuICAgICAgICAvLyBJZ25vcmUgbm9uLW11bHRpcGFydCBzZXR0aW5nIGlmIG5vdCBzdXBwb3J0ZWQ6XG4gICAgICAgIG11bHRpcGFydCA9IG9wdGlvbnMubXVsdGlwYXJ0IHx8ICEkLnN1cHBvcnQueGhyRmlsZVVwbG9hZCxcbiAgICAgICAgcGFyYW1OYW1lID1cbiAgICAgICAgICAkLnR5cGUob3B0aW9ucy5wYXJhbU5hbWUpID09PSAnYXJyYXknXG4gICAgICAgICAgICA/IG9wdGlvbnMucGFyYW1OYW1lWzBdXG4gICAgICAgICAgICA6IG9wdGlvbnMucGFyYW1OYW1lO1xuICAgICAgb3B0aW9ucy5oZWFkZXJzID0gJC5leHRlbmQoe30sIG9wdGlvbnMuaGVhZGVycyk7XG4gICAgICBpZiAob3B0aW9ucy5jb250ZW50UmFuZ2UpIHtcbiAgICAgICAgb3B0aW9ucy5oZWFkZXJzWydDb250ZW50LVJhbmdlJ10gPSBvcHRpb25zLmNvbnRlbnRSYW5nZTtcbiAgICAgIH1cbiAgICAgIGlmICghbXVsdGlwYXJ0IHx8IG9wdGlvbnMuYmxvYiB8fCAhdGhpcy5faXNJbnN0YW5jZU9mKCdGaWxlJywgZmlsZSkpIHtcbiAgICAgICAgb3B0aW9ucy5oZWFkZXJzWydDb250ZW50LURpc3Bvc2l0aW9uJ10gPVxuICAgICAgICAgICdhdHRhY2htZW50OyBmaWxlbmFtZT1cIicgK1xuICAgICAgICAgIGVuY29kZVVSSShmaWxlLnVwbG9hZE5hbWUgfHwgZmlsZS5uYW1lKSArXG4gICAgICAgICAgJ1wiJztcbiAgICAgIH1cbiAgICAgIGlmICghbXVsdGlwYXJ0KSB7XG4gICAgICAgIG9wdGlvbnMuY29udGVudFR5cGUgPSBmaWxlLnR5cGUgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc7XG4gICAgICAgIG9wdGlvbnMuZGF0YSA9IG9wdGlvbnMuYmxvYiB8fCBmaWxlO1xuICAgICAgfSBlbHNlIGlmICgkLnN1cHBvcnQueGhyRm9ybURhdGFGaWxlVXBsb2FkKSB7XG4gICAgICAgIGlmIChvcHRpb25zLnBvc3RNZXNzYWdlKSB7XG4gICAgICAgICAgLy8gd2luZG93LnBvc3RNZXNzYWdlIGRvZXMgbm90IGFsbG93IHNlbmRpbmcgRm9ybURhdGFcbiAgICAgICAgICAvLyBvYmplY3RzLCBzbyB3ZSBqdXN0IGFkZCB0aGUgRmlsZS9CbG9iIG9iamVjdHMgdG9cbiAgICAgICAgICAvLyB0aGUgZm9ybURhdGEgYXJyYXkgYW5kIGxldCB0aGUgcG9zdE1lc3NhZ2Ugd2luZG93XG4gICAgICAgICAgLy8gY3JlYXRlIHRoZSBGb3JtRGF0YSBvYmplY3Qgb3V0IG9mIHRoaXMgYXJyYXk6XG4gICAgICAgICAgZm9ybURhdGEgPSB0aGlzLl9nZXRGb3JtRGF0YShvcHRpb25zKTtcbiAgICAgICAgICBpZiAob3B0aW9ucy5ibG9iKSB7XG4gICAgICAgICAgICBmb3JtRGF0YS5wdXNoKHtcbiAgICAgICAgICAgICAgbmFtZTogcGFyYW1OYW1lLFxuICAgICAgICAgICAgICB2YWx1ZTogb3B0aW9ucy5ibG9iXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJC5lYWNoKG9wdGlvbnMuZmlsZXMsIGZ1bmN0aW9uIChpbmRleCwgZmlsZSkge1xuICAgICAgICAgICAgICBmb3JtRGF0YS5wdXNoKHtcbiAgICAgICAgICAgICAgICBuYW1lOlxuICAgICAgICAgICAgICAgICAgKCQudHlwZShvcHRpb25zLnBhcmFtTmFtZSkgPT09ICdhcnJheScgJiZcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5wYXJhbU5hbWVbaW5kZXhdKSB8fFxuICAgICAgICAgICAgICAgICAgcGFyYW1OYW1lLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmaWxlXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGF0Ll9pc0luc3RhbmNlT2YoJ0Zvcm1EYXRhJywgb3B0aW9ucy5mb3JtRGF0YSkpIHtcbiAgICAgICAgICAgIGZvcm1EYXRhID0gb3B0aW9ucy5mb3JtRGF0YTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgICAgICAgICQuZWFjaCh0aGlzLl9nZXRGb3JtRGF0YShvcHRpb25zKSwgZnVuY3Rpb24gKGluZGV4LCBmaWVsZCkge1xuICAgICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoZmllbGQubmFtZSwgZmllbGQudmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChvcHRpb25zLmJsb2IpIHtcbiAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChcbiAgICAgICAgICAgICAgcGFyYW1OYW1lLFxuICAgICAgICAgICAgICBvcHRpb25zLmJsb2IsXG4gICAgICAgICAgICAgIGZpbGUudXBsb2FkTmFtZSB8fCBmaWxlLm5hbWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICQuZWFjaChvcHRpb25zLmZpbGVzLCBmdW5jdGlvbiAoaW5kZXgsIGZpbGUpIHtcbiAgICAgICAgICAgICAgLy8gVGhpcyBjaGVjayBhbGxvd3MgdGhlIHRlc3RzIHRvIHJ1biB3aXRoXG4gICAgICAgICAgICAgIC8vIGR1bW15IG9iamVjdHM6XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0aGF0Ll9pc0luc3RhbmNlT2YoJ0ZpbGUnLCBmaWxlKSB8fFxuICAgICAgICAgICAgICAgIHRoYXQuX2lzSW5zdGFuY2VPZignQmxvYicsIGZpbGUpXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHZhciBmaWxlTmFtZSA9IGZpbGUudXBsb2FkTmFtZSB8fCBmaWxlLm5hbWU7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudW5pcXVlRmlsZW5hbWVzKSB7XG4gICAgICAgICAgICAgICAgICBmaWxlTmFtZSA9IHRoYXQuX2dldFVuaXF1ZUZpbGVuYW1lKFxuICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy51bmlxdWVGaWxlbmFtZXNcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChcbiAgICAgICAgICAgICAgICAgICgkLnR5cGUob3B0aW9ucy5wYXJhbU5hbWUpID09PSAnYXJyYXknICYmXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucGFyYW1OYW1lW2luZGV4XSkgfHxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1OYW1lLFxuICAgICAgICAgICAgICAgICAgZmlsZSxcbiAgICAgICAgICAgICAgICAgIGZpbGVOYW1lXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9wdGlvbnMuZGF0YSA9IGZvcm1EYXRhO1xuICAgICAgfVxuICAgICAgLy8gQmxvYiByZWZlcmVuY2UgaXMgbm90IG5lZWRlZCBhbnltb3JlLCBmcmVlIG1lbW9yeTpcbiAgICAgIG9wdGlvbnMuYmxvYiA9IG51bGw7XG4gICAgfSxcblxuICAgIF9pbml0SWZyYW1lU2V0dGluZ3M6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICB2YXIgdGFyZ2V0SG9zdCA9ICQoJzxhPjwvYT4nKS5wcm9wKCdocmVmJywgb3B0aW9ucy51cmwpLnByb3AoJ2hvc3QnKTtcbiAgICAgIC8vIFNldHRpbmcgdGhlIGRhdGFUeXBlIHRvIGlmcmFtZSBlbmFibGVzIHRoZSBpZnJhbWUgdHJhbnNwb3J0OlxuICAgICAgb3B0aW9ucy5kYXRhVHlwZSA9ICdpZnJhbWUgJyArIChvcHRpb25zLmRhdGFUeXBlIHx8ICcnKTtcbiAgICAgIC8vIFRoZSBpZnJhbWUgdHJhbnNwb3J0IGFjY2VwdHMgYSBzZXJpYWxpemVkIGFycmF5IGFzIGZvcm0gZGF0YTpcbiAgICAgIG9wdGlvbnMuZm9ybURhdGEgPSB0aGlzLl9nZXRGb3JtRGF0YShvcHRpb25zKTtcbiAgICAgIC8vIEFkZCByZWRpcmVjdCB1cmwgdG8gZm9ybSBkYXRhIG9uIGNyb3NzLWRvbWFpbiB1cGxvYWRzOlxuICAgICAgaWYgKG9wdGlvbnMucmVkaXJlY3QgJiYgdGFyZ2V0SG9zdCAmJiB0YXJnZXRIb3N0ICE9PSBsb2NhdGlvbi5ob3N0KSB7XG4gICAgICAgIG9wdGlvbnMuZm9ybURhdGEucHVzaCh7XG4gICAgICAgICAgbmFtZTogb3B0aW9ucy5yZWRpcmVjdFBhcmFtTmFtZSB8fCAncmVkaXJlY3QnLFxuICAgICAgICAgIHZhbHVlOiBvcHRpb25zLnJlZGlyZWN0XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBfaW5pdERhdGFTZXR0aW5nczogZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgIGlmICh0aGlzLl9pc1hIUlVwbG9hZChvcHRpb25zKSkge1xuICAgICAgICBpZiAoIXRoaXMuX2NodW5rZWRVcGxvYWQob3B0aW9ucywgdHJ1ZSkpIHtcbiAgICAgICAgICBpZiAoIW9wdGlvbnMuZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5faW5pdFhIUkRhdGEob3B0aW9ucyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuX2luaXRQcm9ncmVzc0xpc3RlbmVyKG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLnBvc3RNZXNzYWdlKSB7XG4gICAgICAgICAgLy8gU2V0dGluZyB0aGUgZGF0YVR5cGUgdG8gcG9zdG1lc3NhZ2UgZW5hYmxlcyB0aGVcbiAgICAgICAgICAvLyBwb3N0TWVzc2FnZSB0cmFuc3BvcnQ6XG4gICAgICAgICAgb3B0aW9ucy5kYXRhVHlwZSA9ICdwb3N0bWVzc2FnZSAnICsgKG9wdGlvbnMuZGF0YVR5cGUgfHwgJycpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9pbml0SWZyYW1lU2V0dGluZ3Mob3B0aW9ucyk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIF9nZXRQYXJhbU5hbWU6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICB2YXIgZmlsZUlucHV0ID0gJChvcHRpb25zLmZpbGVJbnB1dCksXG4gICAgICAgIHBhcmFtTmFtZSA9IG9wdGlvbnMucGFyYW1OYW1lO1xuICAgICAgaWYgKCFwYXJhbU5hbWUpIHtcbiAgICAgICAgcGFyYW1OYW1lID0gW107XG4gICAgICAgIGZpbGVJbnB1dC5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgaW5wdXQgPSAkKHRoaXMpLFxuICAgICAgICAgICAgbmFtZSA9IGlucHV0LnByb3AoJ25hbWUnKSB8fCAnZmlsZXNbXScsXG4gICAgICAgICAgICBpID0gKGlucHV0LnByb3AoJ2ZpbGVzJykgfHwgWzFdKS5sZW5ndGg7XG4gICAgICAgICAgd2hpbGUgKGkpIHtcbiAgICAgICAgICAgIHBhcmFtTmFtZS5wdXNoKG5hbWUpO1xuICAgICAgICAgICAgaSAtPSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghcGFyYW1OYW1lLmxlbmd0aCkge1xuICAgICAgICAgIHBhcmFtTmFtZSA9IFtmaWxlSW5wdXQucHJvcCgnbmFtZScpIHx8ICdmaWxlc1tdJ107XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoISQuaXNBcnJheShwYXJhbU5hbWUpKSB7XG4gICAgICAgIHBhcmFtTmFtZSA9IFtwYXJhbU5hbWVdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBhcmFtTmFtZTtcbiAgICB9LFxuXG4gICAgX2luaXRGb3JtU2V0dGluZ3M6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAvLyBSZXRyaWV2ZSBtaXNzaW5nIG9wdGlvbnMgZnJvbSB0aGUgaW5wdXQgZmllbGQgYW5kIHRoZVxuICAgICAgLy8gYXNzb2NpYXRlZCBmb3JtLCBpZiBhdmFpbGFibGU6XG4gICAgICBpZiAoIW9wdGlvbnMuZm9ybSB8fCAhb3B0aW9ucy5mb3JtLmxlbmd0aCkge1xuICAgICAgICBvcHRpb25zLmZvcm0gPSAkKG9wdGlvbnMuZmlsZUlucHV0LnByb3AoJ2Zvcm0nKSk7XG4gICAgICAgIC8vIElmIHRoZSBnaXZlbiBmaWxlIGlucHV0IGRvZXNuJ3QgaGF2ZSBhbiBhc3NvY2lhdGVkIGZvcm0sXG4gICAgICAgIC8vIHVzZSB0aGUgZGVmYXVsdCB3aWRnZXQgZmlsZSBpbnB1dCdzIGZvcm06XG4gICAgICAgIGlmICghb3B0aW9ucy5mb3JtLmxlbmd0aCkge1xuICAgICAgICAgIG9wdGlvbnMuZm9ybSA9ICQodGhpcy5vcHRpb25zLmZpbGVJbnB1dC5wcm9wKCdmb3JtJykpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBvcHRpb25zLnBhcmFtTmFtZSA9IHRoaXMuX2dldFBhcmFtTmFtZShvcHRpb25zKTtcbiAgICAgIGlmICghb3B0aW9ucy51cmwpIHtcbiAgICAgICAgb3B0aW9ucy51cmwgPSBvcHRpb25zLmZvcm0ucHJvcCgnYWN0aW9uJykgfHwgbG9jYXRpb24uaHJlZjtcbiAgICAgIH1cbiAgICAgIC8vIFRoZSBIVFRQIHJlcXVlc3QgbWV0aG9kIG11c3QgYmUgXCJQT1NUXCIgb3IgXCJQVVRcIjpcbiAgICAgIG9wdGlvbnMudHlwZSA9IChcbiAgICAgICAgb3B0aW9ucy50eXBlIHx8XG4gICAgICAgICgkLnR5cGUob3B0aW9ucy5mb3JtLnByb3AoJ21ldGhvZCcpKSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICBvcHRpb25zLmZvcm0ucHJvcCgnbWV0aG9kJykpIHx8XG4gICAgICAgICcnXG4gICAgICApLnRvVXBwZXJDYXNlKCk7XG4gICAgICBpZiAoXG4gICAgICAgIG9wdGlvbnMudHlwZSAhPT0gJ1BPU1QnICYmXG4gICAgICAgIG9wdGlvbnMudHlwZSAhPT0gJ1BVVCcgJiZcbiAgICAgICAgb3B0aW9ucy50eXBlICE9PSAnUEFUQ0gnXG4gICAgICApIHtcbiAgICAgICAgb3B0aW9ucy50eXBlID0gJ1BPU1QnO1xuICAgICAgfVxuICAgICAgaWYgKCFvcHRpb25zLmZvcm1BY2NlcHRDaGFyc2V0KSB7XG4gICAgICAgIG9wdGlvbnMuZm9ybUFjY2VwdENoYXJzZXQgPSBvcHRpb25zLmZvcm0uYXR0cignYWNjZXB0LWNoYXJzZXQnKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX2dldEFKQVhTZXR0aW5nczogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgIHZhciBvcHRpb25zID0gJC5leHRlbmQoe30sIHRoaXMub3B0aW9ucywgZGF0YSk7XG4gICAgICB0aGlzLl9pbml0Rm9ybVNldHRpbmdzKG9wdGlvbnMpO1xuICAgICAgdGhpcy5faW5pdERhdGFTZXR0aW5ncyhvcHRpb25zKTtcbiAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH0sXG5cbiAgICAvLyBqUXVlcnkgMS42IGRvZXNuJ3QgcHJvdmlkZSAuc3RhdGUoKSxcbiAgICAvLyB3aGlsZSBqUXVlcnkgMS44KyByZW1vdmVkIC5pc1JlamVjdGVkKCkgYW5kIC5pc1Jlc29sdmVkKCk6XG4gICAgX2dldERlZmVycmVkU3RhdGU6IGZ1bmN0aW9uIChkZWZlcnJlZCkge1xuICAgICAgaWYgKGRlZmVycmVkLnN0YXRlKSB7XG4gICAgICAgIHJldHVybiBkZWZlcnJlZC5zdGF0ZSgpO1xuICAgICAgfVxuICAgICAgaWYgKGRlZmVycmVkLmlzUmVzb2x2ZWQoKSkge1xuICAgICAgICByZXR1cm4gJ3Jlc29sdmVkJztcbiAgICAgIH1cbiAgICAgIGlmIChkZWZlcnJlZC5pc1JlamVjdGVkKCkpIHtcbiAgICAgICAgcmV0dXJuICdyZWplY3RlZCc7XG4gICAgICB9XG4gICAgICByZXR1cm4gJ3BlbmRpbmcnO1xuICAgIH0sXG5cbiAgICAvLyBNYXBzIGpxWEhSIGNhbGxiYWNrcyB0byB0aGUgZXF1aXZhbGVudFxuICAgIC8vIG1ldGhvZHMgb2YgdGhlIGdpdmVuIFByb21pc2Ugb2JqZWN0OlxuICAgIF9lbmhhbmNlUHJvbWlzZTogZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgIHByb21pc2Uuc3VjY2VzcyA9IHByb21pc2UuZG9uZTtcbiAgICAgIHByb21pc2UuZXJyb3IgPSBwcm9taXNlLmZhaWw7XG4gICAgICBwcm9taXNlLmNvbXBsZXRlID0gcHJvbWlzZS5hbHdheXM7XG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9LFxuXG4gICAgLy8gQ3JlYXRlcyBhbmQgcmV0dXJucyBhIFByb21pc2Ugb2JqZWN0IGVuaGFuY2VkIHdpdGhcbiAgICAvLyB0aGUganFYSFIgbWV0aG9kcyBhYm9ydCwgc3VjY2VzcywgZXJyb3IgYW5kIGNvbXBsZXRlOlxuICAgIF9nZXRYSFJQcm9taXNlOiBmdW5jdGlvbiAocmVzb2x2ZU9yUmVqZWN0LCBjb250ZXh0LCBhcmdzKSB7XG4gICAgICB2YXIgZGZkID0gJC5EZWZlcnJlZCgpLFxuICAgICAgICBwcm9taXNlID0gZGZkLnByb21pc2UoKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgY29udGV4dCA9IGNvbnRleHQgfHwgdGhpcy5vcHRpb25zLmNvbnRleHQgfHwgcHJvbWlzZTtcbiAgICAgIGlmIChyZXNvbHZlT3JSZWplY3QgPT09IHRydWUpIHtcbiAgICAgICAgZGZkLnJlc29sdmVXaXRoKGNvbnRleHQsIGFyZ3MpO1xuICAgICAgfSBlbHNlIGlmIChyZXNvbHZlT3JSZWplY3QgPT09IGZhbHNlKSB7XG4gICAgICAgIGRmZC5yZWplY3RXaXRoKGNvbnRleHQsIGFyZ3MpO1xuICAgICAgfVxuICAgICAgcHJvbWlzZS5hYm9ydCA9IGRmZC5wcm9taXNlO1xuICAgICAgcmV0dXJuIHRoaXMuX2VuaGFuY2VQcm9taXNlKHByb21pc2UpO1xuICAgIH0sXG5cbiAgICAvLyBBZGRzIGNvbnZlbmllbmNlIG1ldGhvZHMgdG8gdGhlIGRhdGEgY2FsbGJhY2sgYXJndW1lbnQ6XG4gICAgX2FkZENvbnZlbmllbmNlTWV0aG9kczogZnVuY3Rpb24gKGUsIGRhdGEpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcyxcbiAgICAgICAgZ2V0UHJvbWlzZSA9IGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgcmV0dXJuICQuRGVmZXJyZWQoKS5yZXNvbHZlV2l0aCh0aGF0LCBhcmdzKS5wcm9taXNlKCk7XG4gICAgICAgIH07XG4gICAgICBkYXRhLnByb2Nlc3MgPSBmdW5jdGlvbiAocmVzb2x2ZUZ1bmMsIHJlamVjdEZ1bmMpIHtcbiAgICAgICAgaWYgKHJlc29sdmVGdW5jIHx8IHJlamVjdEZ1bmMpIHtcbiAgICAgICAgICBkYXRhLl9wcm9jZXNzUXVldWUgPSB0aGlzLl9wcm9jZXNzUXVldWUgPSAodGhpcy5fcHJvY2Vzc1F1ZXVlIHx8XG4gICAgICAgICAgICBnZXRQcm9taXNlKFt0aGlzXSkpXG4gICAgICAgICAgICBbdGhhdC5fcHJvbWlzZVBpcGVdKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgaWYgKGRhdGEuZXJyb3JUaHJvd24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJC5EZWZlcnJlZCgpLnJlamVjdFdpdGgodGhhdCwgW2RhdGFdKS5wcm9taXNlKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGdldFByb21pc2UoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBbdGhhdC5fcHJvbWlzZVBpcGVdKHJlc29sdmVGdW5jLCByZWplY3RGdW5jKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc1F1ZXVlIHx8IGdldFByb21pc2UoW3RoaXNdKTtcbiAgICAgIH07XG4gICAgICBkYXRhLnN1Ym1pdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUoKSAhPT0gJ3BlbmRpbmcnKSB7XG4gICAgICAgICAgZGF0YS5qcVhIUiA9IHRoaXMuanFYSFIgPVxuICAgICAgICAgICAgdGhhdC5fdHJpZ2dlcihcbiAgICAgICAgICAgICAgJ3N1Ym1pdCcsXG4gICAgICAgICAgICAgICQuRXZlbnQoJ3N1Ym1pdCcsIHsgZGVsZWdhdGVkRXZlbnQ6IGUgfSksXG4gICAgICAgICAgICAgIHRoaXNcbiAgICAgICAgICAgICkgIT09IGZhbHNlICYmIHRoYXQuX29uU2VuZChlLCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5qcVhIUiB8fCB0aGF0Ll9nZXRYSFJQcm9taXNlKCk7XG4gICAgICB9O1xuICAgICAgZGF0YS5hYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuanFYSFIpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5qcVhIUi5hYm9ydCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZXJyb3JUaHJvd24gPSAnYWJvcnQnO1xuICAgICAgICB0aGF0Ll90cmlnZ2VyKCdmYWlsJywgbnVsbCwgdGhpcyk7XG4gICAgICAgIHJldHVybiB0aGF0Ll9nZXRYSFJQcm9taXNlKGZhbHNlKTtcbiAgICAgIH07XG4gICAgICBkYXRhLnN0YXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5qcVhIUikge1xuICAgICAgICAgIHJldHVybiB0aGF0Ll9nZXREZWZlcnJlZFN0YXRlKHRoaXMuanFYSFIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9wcm9jZXNzUXVldWUpIHtcbiAgICAgICAgICByZXR1cm4gdGhhdC5fZ2V0RGVmZXJyZWRTdGF0ZSh0aGlzLl9wcm9jZXNzUXVldWUpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgZGF0YS5wcm9jZXNzaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICF0aGlzLmpxWEhSICYmXG4gICAgICAgICAgdGhpcy5fcHJvY2Vzc1F1ZXVlICYmXG4gICAgICAgICAgdGhhdC5fZ2V0RGVmZXJyZWRTdGF0ZSh0aGlzLl9wcm9jZXNzUXVldWUpID09PSAncGVuZGluZydcbiAgICAgICAgKTtcbiAgICAgIH07XG4gICAgICBkYXRhLnByb2dyZXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJvZ3Jlc3M7XG4gICAgICB9O1xuICAgICAgZGF0YS5yZXNwb25zZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc3BvbnNlO1xuICAgICAgfTtcbiAgICB9LFxuXG4gICAgLy8gUGFyc2VzIHRoZSBSYW5nZSBoZWFkZXIgZnJvbSB0aGUgc2VydmVyIHJlc3BvbnNlXG4gICAgLy8gYW5kIHJldHVybnMgdGhlIHVwbG9hZGVkIGJ5dGVzOlxuICAgIF9nZXRVcGxvYWRlZEJ5dGVzOiBmdW5jdGlvbiAoanFYSFIpIHtcbiAgICAgIHZhciByYW5nZSA9IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCdSYW5nZScpLFxuICAgICAgICBwYXJ0cyA9IHJhbmdlICYmIHJhbmdlLnNwbGl0KCctJyksXG4gICAgICAgIHVwcGVyQnl0ZXNQb3MgPSBwYXJ0cyAmJiBwYXJ0cy5sZW5ndGggPiAxICYmIHBhcnNlSW50KHBhcnRzWzFdLCAxMCk7XG4gICAgICByZXR1cm4gdXBwZXJCeXRlc1BvcyAmJiB1cHBlckJ5dGVzUG9zICsgMTtcbiAgICB9LFxuXG4gICAgLy8gVXBsb2FkcyBhIGZpbGUgaW4gbXVsdGlwbGUsIHNlcXVlbnRpYWwgcmVxdWVzdHNcbiAgICAvLyBieSBzcGxpdHRpbmcgdGhlIGZpbGUgdXAgaW4gbXVsdGlwbGUgYmxvYiBjaHVua3MuXG4gICAgLy8gSWYgdGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgdHJ1ZSwgb25seSB0ZXN0cyBpZiB0aGUgZmlsZVxuICAgIC8vIHNob3VsZCBiZSB1cGxvYWRlZCBpbiBjaHVua3MsIGJ1dCBkb2VzIG5vdCBpbnZva2UgYW55XG4gICAgLy8gdXBsb2FkIHJlcXVlc3RzOlxuICAgIF9jaHVua2VkVXBsb2FkOiBmdW5jdGlvbiAob3B0aW9ucywgdGVzdE9ubHkpIHtcbiAgICAgIG9wdGlvbnMudXBsb2FkZWRCeXRlcyA9IG9wdGlvbnMudXBsb2FkZWRCeXRlcyB8fCAwO1xuICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICBmaWxlID0gb3B0aW9ucy5maWxlc1swXSxcbiAgICAgICAgZnMgPSBmaWxlLnNpemUsXG4gICAgICAgIHViID0gb3B0aW9ucy51cGxvYWRlZEJ5dGVzLFxuICAgICAgICBtY3MgPSBvcHRpb25zLm1heENodW5rU2l6ZSB8fCBmcyxcbiAgICAgICAgc2xpY2UgPSB0aGlzLl9ibG9iU2xpY2UsXG4gICAgICAgIGRmZCA9ICQuRGVmZXJyZWQoKSxcbiAgICAgICAgcHJvbWlzZSA9IGRmZC5wcm9taXNlKCksXG4gICAgICAgIGpxWEhSLFxuICAgICAgICB1cGxvYWQ7XG4gICAgICBpZiAoXG4gICAgICAgICEoXG4gICAgICAgICAgdGhpcy5faXNYSFJVcGxvYWQob3B0aW9ucykgJiZcbiAgICAgICAgICBzbGljZSAmJlxuICAgICAgICAgICh1YiB8fCAoJC50eXBlKG1jcykgPT09ICdmdW5jdGlvbicgPyBtY3Mob3B0aW9ucykgOiBtY3MpIDwgZnMpXG4gICAgICAgICkgfHxcbiAgICAgICAgb3B0aW9ucy5kYXRhXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKHRlc3RPbmx5KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHViID49IGZzKSB7XG4gICAgICAgIGZpbGUuZXJyb3IgPSBvcHRpb25zLmkxOG4oJ3VwbG9hZGVkQnl0ZXMnKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldFhIUlByb21pc2UoZmFsc2UsIG9wdGlvbnMuY29udGV4dCwgW1xuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICBmaWxlLmVycm9yXG4gICAgICAgIF0pO1xuICAgICAgfVxuICAgICAgLy8gVGhlIGNodW5rIHVwbG9hZCBtZXRob2Q6XG4gICAgICB1cGxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIENsb25lIHRoZSBvcHRpb25zIG9iamVjdCBmb3IgZWFjaCBjaHVuayB1cGxvYWQ6XG4gICAgICAgIHZhciBvID0gJC5leHRlbmQoe30sIG9wdGlvbnMpLFxuICAgICAgICAgIGN1cnJlbnRMb2FkZWQgPSBvLl9wcm9ncmVzcy5sb2FkZWQ7XG4gICAgICAgIG8uYmxvYiA9IHNsaWNlLmNhbGwoXG4gICAgICAgICAgZmlsZSxcbiAgICAgICAgICB1YixcbiAgICAgICAgICB1YiArICgkLnR5cGUobWNzKSA9PT0gJ2Z1bmN0aW9uJyA/IG1jcyhvKSA6IG1jcyksXG4gICAgICAgICAgZmlsZS50eXBlXG4gICAgICAgICk7XG4gICAgICAgIC8vIFN0b3JlIHRoZSBjdXJyZW50IGNodW5rIHNpemUsIGFzIHRoZSBibG9iIGl0c2VsZlxuICAgICAgICAvLyB3aWxsIGJlIGRlcmVmZXJlbmNlZCBhZnRlciBkYXRhIHByb2Nlc3Npbmc6XG4gICAgICAgIG8uY2h1bmtTaXplID0gby5ibG9iLnNpemU7XG4gICAgICAgIC8vIEV4cG9zZSB0aGUgY2h1bmsgYnl0ZXMgcG9zaXRpb24gcmFuZ2U6XG4gICAgICAgIG8uY29udGVudFJhbmdlID1cbiAgICAgICAgICAnYnl0ZXMgJyArIHViICsgJy0nICsgKHViICsgby5jaHVua1NpemUgLSAxKSArICcvJyArIGZzO1xuICAgICAgICAvLyBUcmlnZ2VyIGNodW5rYmVmb3Jlc2VuZCB0byBhbGxvdyBmb3JtIGRhdGEgdG8gYmUgdXBkYXRlZCBmb3IgdGhpcyBjaHVua1xuICAgICAgICB0aGF0Ll90cmlnZ2VyKCdjaHVua2JlZm9yZXNlbmQnLCBudWxsLCBvKTtcbiAgICAgICAgLy8gUHJvY2VzcyB0aGUgdXBsb2FkIGRhdGEgKHRoZSBibG9iIGFuZCBwb3RlbnRpYWwgZm9ybSBkYXRhKTpcbiAgICAgICAgdGhhdC5faW5pdFhIUkRhdGEobyk7XG4gICAgICAgIC8vIEFkZCBwcm9ncmVzcyBsaXN0ZW5lcnMgZm9yIHRoaXMgY2h1bmsgdXBsb2FkOlxuICAgICAgICB0aGF0Ll9pbml0UHJvZ3Jlc3NMaXN0ZW5lcihvKTtcbiAgICAgICAganFYSFIgPSAoXG4gICAgICAgICAgKHRoYXQuX3RyaWdnZXIoJ2NodW5rc2VuZCcsIG51bGwsIG8pICE9PSBmYWxzZSAmJiAkLmFqYXgobykpIHx8XG4gICAgICAgICAgdGhhdC5fZ2V0WEhSUHJvbWlzZShmYWxzZSwgby5jb250ZXh0KVxuICAgICAgICApXG4gICAgICAgICAgLmRvbmUoZnVuY3Rpb24gKHJlc3VsdCwgdGV4dFN0YXR1cywganFYSFIpIHtcbiAgICAgICAgICAgIHViID0gdGhhdC5fZ2V0VXBsb2FkZWRCeXRlcyhqcVhIUikgfHwgdWIgKyBvLmNodW5rU2l6ZTtcbiAgICAgICAgICAgIC8vIENyZWF0ZSBhIHByb2dyZXNzIGV2ZW50IGlmIG5vIGZpbmFsIHByb2dyZXNzIGV2ZW50XG4gICAgICAgICAgICAvLyB3aXRoIGxvYWRlZCBlcXVhbGluZyB0b3RhbCBoYXMgYmVlbiB0cmlnZ2VyZWRcbiAgICAgICAgICAgIC8vIGZvciB0aGlzIGNodW5rOlxuICAgICAgICAgICAgaWYgKGN1cnJlbnRMb2FkZWQgKyBvLmNodW5rU2l6ZSAtIG8uX3Byb2dyZXNzLmxvYWRlZCkge1xuICAgICAgICAgICAgICB0aGF0Ll9vblByb2dyZXNzKFxuICAgICAgICAgICAgICAgICQuRXZlbnQoJ3Byb2dyZXNzJywge1xuICAgICAgICAgICAgICAgICAgbGVuZ3RoQ29tcHV0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIGxvYWRlZDogdWIgLSBvLnVwbG9hZGVkQnl0ZXMsXG4gICAgICAgICAgICAgICAgICB0b3RhbDogdWIgLSBvLnVwbG9hZGVkQnl0ZXNcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBvXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcHRpb25zLnVwbG9hZGVkQnl0ZXMgPSBvLnVwbG9hZGVkQnl0ZXMgPSB1YjtcbiAgICAgICAgICAgIG8ucmVzdWx0ID0gcmVzdWx0O1xuICAgICAgICAgICAgby50ZXh0U3RhdHVzID0gdGV4dFN0YXR1cztcbiAgICAgICAgICAgIG8uanFYSFIgPSBqcVhIUjtcbiAgICAgICAgICAgIHRoYXQuX3RyaWdnZXIoJ2NodW5rZG9uZScsIG51bGwsIG8pO1xuICAgICAgICAgICAgdGhhdC5fdHJpZ2dlcignY2h1bmthbHdheXMnLCBudWxsLCBvKTtcbiAgICAgICAgICAgIGlmICh1YiA8IGZzKSB7XG4gICAgICAgICAgICAgIC8vIEZpbGUgdXBsb2FkIG5vdCB5ZXQgY29tcGxldGUsXG4gICAgICAgICAgICAgIC8vIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgY2h1bms6XG4gICAgICAgICAgICAgIHVwbG9hZCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZGZkLnJlc29sdmVXaXRoKG8uY29udGV4dCwgW3Jlc3VsdCwgdGV4dFN0YXR1cywganFYSFJdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICAgIC5mYWlsKGZ1bmN0aW9uIChqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24pIHtcbiAgICAgICAgICAgIG8uanFYSFIgPSBqcVhIUjtcbiAgICAgICAgICAgIG8udGV4dFN0YXR1cyA9IHRleHRTdGF0dXM7XG4gICAgICAgICAgICBvLmVycm9yVGhyb3duID0gZXJyb3JUaHJvd247XG4gICAgICAgICAgICB0aGF0Ll90cmlnZ2VyKCdjaHVua2ZhaWwnLCBudWxsLCBvKTtcbiAgICAgICAgICAgIHRoYXQuX3RyaWdnZXIoJ2NodW5rYWx3YXlzJywgbnVsbCwgbyk7XG4gICAgICAgICAgICBkZmQucmVqZWN0V2l0aChvLmNvbnRleHQsIFtqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd25dKTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5hbHdheXMoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhhdC5fZGVpbml0UHJvZ3Jlc3NMaXN0ZW5lcihvKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICB0aGlzLl9lbmhhbmNlUHJvbWlzZShwcm9taXNlKTtcbiAgICAgIHByb21pc2UuYWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBqcVhIUi5hYm9ydCgpO1xuICAgICAgfTtcbiAgICAgIHVwbG9hZCgpO1xuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfSxcblxuICAgIF9iZWZvcmVTZW5kOiBmdW5jdGlvbiAoZSwgZGF0YSkge1xuICAgICAgaWYgKHRoaXMuX2FjdGl2ZSA9PT0gMCkge1xuICAgICAgICAvLyB0aGUgc3RhcnQgY2FsbGJhY2sgaXMgdHJpZ2dlcmVkIHdoZW4gYW4gdXBsb2FkIHN0YXJ0c1xuICAgICAgICAvLyBhbmQgbm8gb3RoZXIgdXBsb2FkcyBhcmUgY3VycmVudGx5IHJ1bm5pbmcsXG4gICAgICAgIC8vIGVxdWl2YWxlbnQgdG8gdGhlIGdsb2JhbCBhamF4U3RhcnQgZXZlbnQ6XG4gICAgICAgIHRoaXMuX3RyaWdnZXIoJ3N0YXJ0Jyk7XG4gICAgICAgIC8vIFNldCB0aW1lciBmb3IgZ2xvYmFsIGJpdHJhdGUgcHJvZ3Jlc3MgY2FsY3VsYXRpb246XG4gICAgICAgIHRoaXMuX2JpdHJhdGVUaW1lciA9IG5ldyB0aGlzLl9CaXRyYXRlVGltZXIoKTtcbiAgICAgICAgLy8gUmVzZXQgdGhlIGdsb2JhbCBwcm9ncmVzcyB2YWx1ZXM6XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzLmxvYWRlZCA9IHRoaXMuX3Byb2dyZXNzLnRvdGFsID0gMDtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MuYml0cmF0ZSA9IDA7XG4gICAgICB9XG4gICAgICAvLyBNYWtlIHN1cmUgdGhlIGNvbnRhaW5lciBvYmplY3RzIGZvciB0aGUgLnJlc3BvbnNlKCkgYW5kXG4gICAgICAvLyAucHJvZ3Jlc3MoKSBtZXRob2RzIG9uIHRoZSBkYXRhIG9iamVjdCBhcmUgYXZhaWxhYmxlXG4gICAgICAvLyBhbmQgcmVzZXQgdG8gdGhlaXIgaW5pdGlhbCBzdGF0ZTpcbiAgICAgIHRoaXMuX2luaXRSZXNwb25zZU9iamVjdChkYXRhKTtcbiAgICAgIHRoaXMuX2luaXRQcm9ncmVzc09iamVjdChkYXRhKTtcbiAgICAgIGRhdGEuX3Byb2dyZXNzLmxvYWRlZCA9IGRhdGEubG9hZGVkID0gZGF0YS51cGxvYWRlZEJ5dGVzIHx8IDA7XG4gICAgICBkYXRhLl9wcm9ncmVzcy50b3RhbCA9IGRhdGEudG90YWwgPSB0aGlzLl9nZXRUb3RhbChkYXRhLmZpbGVzKSB8fCAxO1xuICAgICAgZGF0YS5fcHJvZ3Jlc3MuYml0cmF0ZSA9IGRhdGEuYml0cmF0ZSA9IDA7XG4gICAgICB0aGlzLl9hY3RpdmUgKz0gMTtcbiAgICAgIC8vIEluaXRpYWxpemUgdGhlIGdsb2JhbCBwcm9ncmVzcyB2YWx1ZXM6XG4gICAgICB0aGlzLl9wcm9ncmVzcy5sb2FkZWQgKz0gZGF0YS5sb2FkZWQ7XG4gICAgICB0aGlzLl9wcm9ncmVzcy50b3RhbCArPSBkYXRhLnRvdGFsO1xuICAgIH0sXG5cbiAgICBfb25Eb25lOiBmdW5jdGlvbiAocmVzdWx0LCB0ZXh0U3RhdHVzLCBqcVhIUiwgb3B0aW9ucykge1xuICAgICAgdmFyIHRvdGFsID0gb3B0aW9ucy5fcHJvZ3Jlc3MudG90YWwsXG4gICAgICAgIHJlc3BvbnNlID0gb3B0aW9ucy5fcmVzcG9uc2U7XG4gICAgICBpZiAob3B0aW9ucy5fcHJvZ3Jlc3MubG9hZGVkIDwgdG90YWwpIHtcbiAgICAgICAgLy8gQ3JlYXRlIGEgcHJvZ3Jlc3MgZXZlbnQgaWYgbm8gZmluYWwgcHJvZ3Jlc3MgZXZlbnRcbiAgICAgICAgLy8gd2l0aCBsb2FkZWQgZXF1YWxpbmcgdG90YWwgaGFzIGJlZW4gdHJpZ2dlcmVkOlxuICAgICAgICB0aGlzLl9vblByb2dyZXNzKFxuICAgICAgICAgICQuRXZlbnQoJ3Byb2dyZXNzJywge1xuICAgICAgICAgICAgbGVuZ3RoQ29tcHV0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGxvYWRlZDogdG90YWwsXG4gICAgICAgICAgICB0b3RhbDogdG90YWxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBvcHRpb25zXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXNwb25zZS5yZXN1bHQgPSBvcHRpb25zLnJlc3VsdCA9IHJlc3VsdDtcbiAgICAgIHJlc3BvbnNlLnRleHRTdGF0dXMgPSBvcHRpb25zLnRleHRTdGF0dXMgPSB0ZXh0U3RhdHVzO1xuICAgICAgcmVzcG9uc2UuanFYSFIgPSBvcHRpb25zLmpxWEhSID0ganFYSFI7XG4gICAgICB0aGlzLl90cmlnZ2VyKCdkb25lJywgbnVsbCwgb3B0aW9ucyk7XG4gICAgfSxcblxuICAgIF9vbkZhaWw6IGZ1bmN0aW9uIChqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24sIG9wdGlvbnMpIHtcbiAgICAgIHZhciByZXNwb25zZSA9IG9wdGlvbnMuX3Jlc3BvbnNlO1xuICAgICAgaWYgKG9wdGlvbnMucmVjYWxjdWxhdGVQcm9ncmVzcykge1xuICAgICAgICAvLyBSZW1vdmUgdGhlIGZhaWxlZCAoZXJyb3Igb3IgYWJvcnQpIGZpbGUgdXBsb2FkIGZyb21cbiAgICAgICAgLy8gdGhlIGdsb2JhbCBwcm9ncmVzcyBjYWxjdWxhdGlvbjpcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MubG9hZGVkIC09IG9wdGlvbnMuX3Byb2dyZXNzLmxvYWRlZDtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MudG90YWwgLT0gb3B0aW9ucy5fcHJvZ3Jlc3MudG90YWw7XG4gICAgICB9XG4gICAgICByZXNwb25zZS5qcVhIUiA9IG9wdGlvbnMuanFYSFIgPSBqcVhIUjtcbiAgICAgIHJlc3BvbnNlLnRleHRTdGF0dXMgPSBvcHRpb25zLnRleHRTdGF0dXMgPSB0ZXh0U3RhdHVzO1xuICAgICAgcmVzcG9uc2UuZXJyb3JUaHJvd24gPSBvcHRpb25zLmVycm9yVGhyb3duID0gZXJyb3JUaHJvd247XG4gICAgICB0aGlzLl90cmlnZ2VyKCdmYWlsJywgbnVsbCwgb3B0aW9ucyk7XG4gICAgfSxcblxuICAgIF9vbkFsd2F5czogZnVuY3Rpb24gKGpxWEhSb3JSZXN1bHQsIHRleHRTdGF0dXMsIGpxWEhSb3JFcnJvciwgb3B0aW9ucykge1xuICAgICAgLy8ganFYSFJvclJlc3VsdCwgdGV4dFN0YXR1cyBhbmQganFYSFJvckVycm9yIGFyZSBhZGRlZCB0byB0aGVcbiAgICAgIC8vIG9wdGlvbnMgb2JqZWN0IHZpYSBkb25lIGFuZCBmYWlsIGNhbGxiYWNrc1xuICAgICAgdGhpcy5fdHJpZ2dlcignYWx3YXlzJywgbnVsbCwgb3B0aW9ucyk7XG4gICAgfSxcblxuICAgIF9vblNlbmQ6IGZ1bmN0aW9uIChlLCBkYXRhKSB7XG4gICAgICBpZiAoIWRhdGEuc3VibWl0KSB7XG4gICAgICAgIHRoaXMuX2FkZENvbnZlbmllbmNlTWV0aG9kcyhlLCBkYXRhKTtcbiAgICAgIH1cbiAgICAgIHZhciB0aGF0ID0gdGhpcyxcbiAgICAgICAganFYSFIsXG4gICAgICAgIGFib3J0ZWQsXG4gICAgICAgIHNsb3QsXG4gICAgICAgIHBpcGUsXG4gICAgICAgIG9wdGlvbnMgPSB0aGF0Ll9nZXRBSkFYU2V0dGluZ3MoZGF0YSksXG4gICAgICAgIHNlbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdGhhdC5fc2VuZGluZyArPSAxO1xuICAgICAgICAgIC8vIFNldCB0aW1lciBmb3IgYml0cmF0ZSBwcm9ncmVzcyBjYWxjdWxhdGlvbjpcbiAgICAgICAgICBvcHRpb25zLl9iaXRyYXRlVGltZXIgPSBuZXcgdGhhdC5fQml0cmF0ZVRpbWVyKCk7XG4gICAgICAgICAganFYSFIgPVxuICAgICAgICAgICAganFYSFIgfHxcbiAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgKChhYm9ydGVkIHx8XG4gICAgICAgICAgICAgICAgdGhhdC5fdHJpZ2dlcihcbiAgICAgICAgICAgICAgICAgICdzZW5kJyxcbiAgICAgICAgICAgICAgICAgICQuRXZlbnQoJ3NlbmQnLCB7IGRlbGVnYXRlZEV2ZW50OiBlIH0pLFxuICAgICAgICAgICAgICAgICAgb3B0aW9uc1xuICAgICAgICAgICAgICAgICkgPT09IGZhbHNlKSAmJlxuICAgICAgICAgICAgICAgIHRoYXQuX2dldFhIUlByb21pc2UoZmFsc2UsIG9wdGlvbnMuY29udGV4dCwgYWJvcnRlZCkpIHx8XG4gICAgICAgICAgICAgIHRoYXQuX2NodW5rZWRVcGxvYWQob3B0aW9ucykgfHxcbiAgICAgICAgICAgICAgJC5hamF4KG9wdGlvbnMpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5kb25lKGZ1bmN0aW9uIChyZXN1bHQsIHRleHRTdGF0dXMsIGpxWEhSKSB7XG4gICAgICAgICAgICAgICAgdGhhdC5fb25Eb25lKHJlc3VsdCwgdGV4dFN0YXR1cywganFYSFIsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuZmFpbChmdW5jdGlvbiAoanFYSFIsIHRleHRTdGF0dXMsIGVycm9yVGhyb3duKSB7XG4gICAgICAgICAgICAgICAgdGhhdC5fb25GYWlsKGpxWEhSLCB0ZXh0U3RhdHVzLCBlcnJvclRocm93biwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5hbHdheXMoZnVuY3Rpb24gKGpxWEhSb3JSZXN1bHQsIHRleHRTdGF0dXMsIGpxWEhSb3JFcnJvcikge1xuICAgICAgICAgICAgICAgIHRoYXQuX2RlaW5pdFByb2dyZXNzTGlzdGVuZXIob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgdGhhdC5fb25BbHdheXMoXG4gICAgICAgICAgICAgICAgICBqcVhIUm9yUmVzdWx0LFxuICAgICAgICAgICAgICAgICAgdGV4dFN0YXR1cyxcbiAgICAgICAgICAgICAgICAgIGpxWEhSb3JFcnJvcixcbiAgICAgICAgICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoYXQuX3NlbmRpbmcgLT0gMTtcbiAgICAgICAgICAgICAgICB0aGF0Ll9hY3RpdmUgLT0gMTtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICBvcHRpb25zLmxpbWl0Q29uY3VycmVudFVwbG9hZHMgJiZcbiAgICAgICAgICAgICAgICAgIG9wdGlvbnMubGltaXRDb25jdXJyZW50VXBsb2FkcyA+IHRoYXQuX3NlbmRpbmdcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIC8vIFN0YXJ0IHRoZSBuZXh0IHF1ZXVlZCB1cGxvYWQsXG4gICAgICAgICAgICAgICAgICAvLyB0aGF0IGhhcyBub3QgYmVlbiBhYm9ydGVkOlxuICAgICAgICAgICAgICAgICAgdmFyIG5leHRTbG90ID0gdGhhdC5fc2xvdHMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgIHdoaWxlIChuZXh0U2xvdCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhhdC5fZ2V0RGVmZXJyZWRTdGF0ZShuZXh0U2xvdCkgPT09ICdwZW5kaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgIG5leHRTbG90LnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBuZXh0U2xvdCA9IHRoYXQuX3Nsb3RzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGF0Ll9hY3RpdmUgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgIC8vIFRoZSBzdG9wIGNhbGxiYWNrIGlzIHRyaWdnZXJlZCB3aGVuIGFsbCB1cGxvYWRzIGhhdmVcbiAgICAgICAgICAgICAgICAgIC8vIGJlZW4gY29tcGxldGVkLCBlcXVpdmFsZW50IHRvIHRoZSBnbG9iYWwgYWpheFN0b3AgZXZlbnQ6XG4gICAgICAgICAgICAgICAgICB0aGF0Ll90cmlnZ2VyKCdzdG9wJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4ganFYSFI7XG4gICAgICAgIH07XG4gICAgICB0aGlzLl9iZWZvcmVTZW5kKGUsIG9wdGlvbnMpO1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLm9wdGlvbnMuc2VxdWVudGlhbFVwbG9hZHMgfHxcbiAgICAgICAgKHRoaXMub3B0aW9ucy5saW1pdENvbmN1cnJlbnRVcGxvYWRzICYmXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmxpbWl0Q29uY3VycmVudFVwbG9hZHMgPD0gdGhpcy5fc2VuZGluZylcbiAgICAgICkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxpbWl0Q29uY3VycmVudFVwbG9hZHMgPiAxKSB7XG4gICAgICAgICAgc2xvdCA9ICQuRGVmZXJyZWQoKTtcbiAgICAgICAgICB0aGlzLl9zbG90cy5wdXNoKHNsb3QpO1xuICAgICAgICAgIHBpcGUgPSBzbG90W3RoYXQuX3Byb21pc2VQaXBlXShzZW5kKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9zZXF1ZW5jZSA9IHRoaXMuX3NlcXVlbmNlW3RoYXQuX3Byb21pc2VQaXBlXShzZW5kLCBzZW5kKTtcbiAgICAgICAgICBwaXBlID0gdGhpcy5fc2VxdWVuY2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUmV0dXJuIHRoZSBwaXBlZCBQcm9taXNlIG9iamVjdCwgZW5oYW5jZWQgd2l0aCBhbiBhYm9ydCBtZXRob2QsXG4gICAgICAgIC8vIHdoaWNoIGlzIGRlbGVnYXRlZCB0byB0aGUganFYSFIgb2JqZWN0IG9mIHRoZSBjdXJyZW50IHVwbG9hZCxcbiAgICAgICAgLy8gYW5kIGpxWEhSIGNhbGxiYWNrcyBtYXBwZWQgdG8gdGhlIGVxdWl2YWxlbnQgUHJvbWlzZSBtZXRob2RzOlxuICAgICAgICBwaXBlLmFib3J0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGFib3J0ZWQgPSBbdW5kZWZpbmVkLCAnYWJvcnQnLCAnYWJvcnQnXTtcbiAgICAgICAgICBpZiAoIWpxWEhSKSB7XG4gICAgICAgICAgICBpZiAoc2xvdCkge1xuICAgICAgICAgICAgICBzbG90LnJlamVjdFdpdGgob3B0aW9ucy5jb250ZXh0LCBhYm9ydGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzZW5kKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBqcVhIUi5hYm9ydCgpO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5oYW5jZVByb21pc2UocGlwZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2VuZCgpO1xuICAgIH0sXG5cbiAgICBfb25BZGQ6IGZ1bmN0aW9uIChlLCBkYXRhKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXMsXG4gICAgICAgIHJlc3VsdCA9IHRydWUsXG4gICAgICAgIG9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgdGhpcy5vcHRpb25zLCBkYXRhKSxcbiAgICAgICAgZmlsZXMgPSBkYXRhLmZpbGVzLFxuICAgICAgICBmaWxlc0xlbmd0aCA9IGZpbGVzLmxlbmd0aCxcbiAgICAgICAgbGltaXQgPSBvcHRpb25zLmxpbWl0TXVsdGlGaWxlVXBsb2FkcyxcbiAgICAgICAgbGltaXRTaXplID0gb3B0aW9ucy5saW1pdE11bHRpRmlsZVVwbG9hZFNpemUsXG4gICAgICAgIG92ZXJoZWFkID0gb3B0aW9ucy5saW1pdE11bHRpRmlsZVVwbG9hZFNpemVPdmVyaGVhZCxcbiAgICAgICAgYmF0Y2hTaXplID0gMCxcbiAgICAgICAgcGFyYW1OYW1lID0gdGhpcy5fZ2V0UGFyYW1OYW1lKG9wdGlvbnMpLFxuICAgICAgICBwYXJhbU5hbWVTZXQsXG4gICAgICAgIHBhcmFtTmFtZVNsaWNlLFxuICAgICAgICBmaWxlU2V0LFxuICAgICAgICBpLFxuICAgICAgICBqID0gMDtcbiAgICAgIGlmICghZmlsZXNMZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKGxpbWl0U2l6ZSAmJiBmaWxlc1swXS5zaXplID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGltaXRTaXplID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICAhKG9wdGlvbnMuc2luZ2xlRmlsZVVwbG9hZHMgfHwgbGltaXQgfHwgbGltaXRTaXplKSB8fFxuICAgICAgICAhdGhpcy5faXNYSFJVcGxvYWQob3B0aW9ucylcbiAgICAgICkge1xuICAgICAgICBmaWxlU2V0ID0gW2ZpbGVzXTtcbiAgICAgICAgcGFyYW1OYW1lU2V0ID0gW3BhcmFtTmFtZV07XG4gICAgICB9IGVsc2UgaWYgKCEob3B0aW9ucy5zaW5nbGVGaWxlVXBsb2FkcyB8fCBsaW1pdFNpemUpICYmIGxpbWl0KSB7XG4gICAgICAgIGZpbGVTZXQgPSBbXTtcbiAgICAgICAgcGFyYW1OYW1lU2V0ID0gW107XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBmaWxlc0xlbmd0aDsgaSArPSBsaW1pdCkge1xuICAgICAgICAgIGZpbGVTZXQucHVzaChmaWxlcy5zbGljZShpLCBpICsgbGltaXQpKTtcbiAgICAgICAgICBwYXJhbU5hbWVTbGljZSA9IHBhcmFtTmFtZS5zbGljZShpLCBpICsgbGltaXQpO1xuICAgICAgICAgIGlmICghcGFyYW1OYW1lU2xpY2UubGVuZ3RoKSB7XG4gICAgICAgICAgICBwYXJhbU5hbWVTbGljZSA9IHBhcmFtTmFtZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcGFyYW1OYW1lU2V0LnB1c2gocGFyYW1OYW1lU2xpY2UpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFvcHRpb25zLnNpbmdsZUZpbGVVcGxvYWRzICYmIGxpbWl0U2l6ZSkge1xuICAgICAgICBmaWxlU2V0ID0gW107XG4gICAgICAgIHBhcmFtTmFtZVNldCA9IFtdO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZmlsZXNMZW5ndGg7IGkgPSBpICsgMSkge1xuICAgICAgICAgIGJhdGNoU2l6ZSArPSBmaWxlc1tpXS5zaXplICsgb3ZlcmhlYWQ7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgaSArIDEgPT09IGZpbGVzTGVuZ3RoIHx8XG4gICAgICAgICAgICBiYXRjaFNpemUgKyBmaWxlc1tpICsgMV0uc2l6ZSArIG92ZXJoZWFkID4gbGltaXRTaXplIHx8XG4gICAgICAgICAgICAobGltaXQgJiYgaSArIDEgLSBqID49IGxpbWl0KVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgZmlsZVNldC5wdXNoKGZpbGVzLnNsaWNlKGosIGkgKyAxKSk7XG4gICAgICAgICAgICBwYXJhbU5hbWVTbGljZSA9IHBhcmFtTmFtZS5zbGljZShqLCBpICsgMSk7XG4gICAgICAgICAgICBpZiAoIXBhcmFtTmFtZVNsaWNlLmxlbmd0aCkge1xuICAgICAgICAgICAgICBwYXJhbU5hbWVTbGljZSA9IHBhcmFtTmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcmFtTmFtZVNldC5wdXNoKHBhcmFtTmFtZVNsaWNlKTtcbiAgICAgICAgICAgIGogPSBpICsgMTtcbiAgICAgICAgICAgIGJhdGNoU2l6ZSA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJhbU5hbWVTZXQgPSBwYXJhbU5hbWU7XG4gICAgICB9XG4gICAgICBkYXRhLm9yaWdpbmFsRmlsZXMgPSBmaWxlcztcbiAgICAgICQuZWFjaChmaWxlU2V0IHx8IGZpbGVzLCBmdW5jdGlvbiAoaW5kZXgsIGVsZW1lbnQpIHtcbiAgICAgICAgdmFyIG5ld0RhdGEgPSAkLmV4dGVuZCh7fSwgZGF0YSk7XG4gICAgICAgIG5ld0RhdGEuZmlsZXMgPSBmaWxlU2V0ID8gZWxlbWVudCA6IFtlbGVtZW50XTtcbiAgICAgICAgbmV3RGF0YS5wYXJhbU5hbWUgPSBwYXJhbU5hbWVTZXRbaW5kZXhdO1xuICAgICAgICB0aGF0Ll9pbml0UmVzcG9uc2VPYmplY3QobmV3RGF0YSk7XG4gICAgICAgIHRoYXQuX2luaXRQcm9ncmVzc09iamVjdChuZXdEYXRhKTtcbiAgICAgICAgdGhhdC5fYWRkQ29udmVuaWVuY2VNZXRob2RzKGUsIG5ld0RhdGEpO1xuICAgICAgICByZXN1bHQgPSB0aGF0Ll90cmlnZ2VyKFxuICAgICAgICAgICdhZGQnLFxuICAgICAgICAgICQuRXZlbnQoJ2FkZCcsIHsgZGVsZWdhdGVkRXZlbnQ6IGUgfSksXG4gICAgICAgICAgbmV3RGF0YVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBfcmVwbGFjZUZpbGVJbnB1dDogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgIHZhciBpbnB1dCA9IGRhdGEuZmlsZUlucHV0LFxuICAgICAgICBpbnB1dENsb25lID0gaW5wdXQuY2xvbmUodHJ1ZSksXG4gICAgICAgIHJlc3RvcmVGb2N1cyA9IGlucHV0LmlzKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO1xuICAgICAgLy8gQWRkIGEgcmVmZXJlbmNlIGZvciB0aGUgbmV3IGNsb25lZCBmaWxlIGlucHV0IHRvIHRoZSBkYXRhIGFyZ3VtZW50OlxuICAgICAgZGF0YS5maWxlSW5wdXRDbG9uZSA9IGlucHV0Q2xvbmU7XG4gICAgICAkKCc8Zm9ybT48L2Zvcm0+JykuYXBwZW5kKGlucHV0Q2xvbmUpWzBdLnJlc2V0KCk7XG4gICAgICAvLyBEZXRhY2hpbmcgYWxsb3dzIHRvIGluc2VydCB0aGUgZmlsZUlucHV0IG9uIGFub3RoZXIgZm9ybVxuICAgICAgLy8gd2l0aG91dCBsb3NpbmcgdGhlIGZpbGUgaW5wdXQgdmFsdWU6XG4gICAgICBpbnB1dC5hZnRlcihpbnB1dENsb25lKS5kZXRhY2goKTtcbiAgICAgIC8vIElmIHRoZSBmaWxlSW5wdXQgaGFkIGZvY3VzIGJlZm9yZSBpdCB3YXMgZGV0YWNoZWQsXG4gICAgICAvLyByZXN0b3JlIGZvY3VzIHRvIHRoZSBpbnB1dENsb25lLlxuICAgICAgaWYgKHJlc3RvcmVGb2N1cykge1xuICAgICAgICBpbnB1dENsb25lLnRyaWdnZXIoJ2ZvY3VzJyk7XG4gICAgICB9XG4gICAgICAvLyBBdm9pZCBtZW1vcnkgbGVha3Mgd2l0aCB0aGUgZGV0YWNoZWQgZmlsZSBpbnB1dDpcbiAgICAgICQuY2xlYW5EYXRhKGlucHV0Lm9mZigncmVtb3ZlJykpO1xuICAgICAgLy8gUmVwbGFjZSB0aGUgb3JpZ2luYWwgZmlsZSBpbnB1dCBlbGVtZW50IGluIHRoZSBmaWxlSW5wdXRcbiAgICAgIC8vIGVsZW1lbnRzIHNldCB3aXRoIHRoZSBjbG9uZSwgd2hpY2ggaGFzIGJlZW4gY29waWVkIGluY2x1ZGluZ1xuICAgICAgLy8gZXZlbnQgaGFuZGxlcnM6XG4gICAgICB0aGlzLm9wdGlvbnMuZmlsZUlucHV0ID0gdGhpcy5vcHRpb25zLmZpbGVJbnB1dC5tYXAoZnVuY3Rpb24gKGksIGVsKSB7XG4gICAgICAgIGlmIChlbCA9PT0gaW5wdXRbMF0pIHtcbiAgICAgICAgICByZXR1cm4gaW5wdXRDbG9uZVswXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZWw7XG4gICAgICB9KTtcbiAgICAgIC8vIElmIHRoZSB3aWRnZXQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgb24gdGhlIGZpbGUgaW5wdXQgaXRzZWxmLFxuICAgICAgLy8gb3ZlcnJpZGUgdGhpcy5lbGVtZW50IHdpdGggdGhlIGZpbGUgaW5wdXQgY2xvbmU6XG4gICAgICBpZiAoaW5wdXRbMF0gPT09IHRoaXMuZWxlbWVudFswXSkge1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSBpbnB1dENsb25lO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBfaGFuZGxlRmlsZVRyZWVFbnRyeTogZnVuY3Rpb24gKGVudHJ5LCBwYXRoKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXMsXG4gICAgICAgIGRmZCA9ICQuRGVmZXJyZWQoKSxcbiAgICAgICAgZW50cmllcyA9IFtdLFxuICAgICAgICBkaXJSZWFkZXIsXG4gICAgICAgIGVycm9ySGFuZGxlciA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgaWYgKGUgJiYgIWUuZW50cnkpIHtcbiAgICAgICAgICAgIGUuZW50cnkgPSBlbnRyeTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gU2luY2UgJC53aGVuIHJldHVybnMgaW1tZWRpYXRlbHkgaWYgb25lXG4gICAgICAgICAgLy8gRGVmZXJyZWQgaXMgcmVqZWN0ZWQsIHdlIHVzZSByZXNvbHZlIGluc3RlYWQuXG4gICAgICAgICAgLy8gVGhpcyBhbGxvd3MgdmFsaWQgZmlsZXMgYW5kIGludmFsaWQgaXRlbXNcbiAgICAgICAgICAvLyB0byBiZSByZXR1cm5lZCB0b2dldGhlciBpbiBvbmUgc2V0OlxuICAgICAgICAgIGRmZC5yZXNvbHZlKFtlXSk7XG4gICAgICAgIH0sXG4gICAgICAgIHN1Y2Nlc3NIYW5kbGVyID0gZnVuY3Rpb24gKGVudHJpZXMpIHtcbiAgICAgICAgICB0aGF0XG4gICAgICAgICAgICAuX2hhbmRsZUZpbGVUcmVlRW50cmllcyhlbnRyaWVzLCBwYXRoICsgZW50cnkubmFtZSArICcvJylcbiAgICAgICAgICAgIC5kb25lKGZ1bmN0aW9uIChmaWxlcykge1xuICAgICAgICAgICAgICBkZmQucmVzb2x2ZShmaWxlcyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmZhaWwoZXJyb3JIYW5kbGVyKTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVhZEVudHJpZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZGlyUmVhZGVyLnJlYWRFbnRyaWVzKGZ1bmN0aW9uIChyZXN1bHRzKSB7XG4gICAgICAgICAgICBpZiAoIXJlc3VsdHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3NIYW5kbGVyKGVudHJpZXMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZW50cmllcyA9IGVudHJpZXMuY29uY2F0KHJlc3VsdHMpO1xuICAgICAgICAgICAgICByZWFkRW50cmllcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIGVycm9ySGFuZGxlcik7XG4gICAgICAgIH07XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgIHBhdGggPSBwYXRoIHx8ICcnO1xuICAgICAgaWYgKGVudHJ5LmlzRmlsZSkge1xuICAgICAgICBpZiAoZW50cnkuX2ZpbGUpIHtcbiAgICAgICAgICAvLyBXb3JrYXJvdW5kIGZvciBDaHJvbWUgYnVnICMxNDk3MzVcbiAgICAgICAgICBlbnRyeS5fZmlsZS5yZWxhdGl2ZVBhdGggPSBwYXRoO1xuICAgICAgICAgIGRmZC5yZXNvbHZlKGVudHJ5Ll9maWxlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbnRyeS5maWxlKGZ1bmN0aW9uIChmaWxlKSB7XG4gICAgICAgICAgICBmaWxlLnJlbGF0aXZlUGF0aCA9IHBhdGg7XG4gICAgICAgICAgICBkZmQucmVzb2x2ZShmaWxlKTtcbiAgICAgICAgICB9LCBlcnJvckhhbmRsZXIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGVudHJ5LmlzRGlyZWN0b3J5KSB7XG4gICAgICAgIGRpclJlYWRlciA9IGVudHJ5LmNyZWF0ZVJlYWRlcigpO1xuICAgICAgICByZWFkRW50cmllcygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmV0dXJuIGFuIGVtcHR5IGxpc3QgZm9yIGZpbGUgc3lzdGVtIGl0ZW1zXG4gICAgICAgIC8vIG90aGVyIHRoYW4gZmlsZXMgb3IgZGlyZWN0b3JpZXM6XG4gICAgICAgIGRmZC5yZXNvbHZlKFtdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkZmQucHJvbWlzZSgpO1xuICAgIH0sXG5cbiAgICBfaGFuZGxlRmlsZVRyZWVFbnRyaWVzOiBmdW5jdGlvbiAoZW50cmllcywgcGF0aCkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgcmV0dXJuICQud2hlblxuICAgICAgICAuYXBwbHkoXG4gICAgICAgICAgJCxcbiAgICAgICAgICAkLm1hcChlbnRyaWVzLCBmdW5jdGlvbiAoZW50cnkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGF0Ll9oYW5kbGVGaWxlVHJlZUVudHJ5KGVudHJ5LCBwYXRoKTtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIFt0aGlzLl9wcm9taXNlUGlwZV0oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLCBhcmd1bWVudHMpO1xuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgX2dldERyb3BwZWRGaWxlczogZnVuY3Rpb24gKGRhdGFUcmFuc2Zlcikge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICBkYXRhVHJhbnNmZXIgPSBkYXRhVHJhbnNmZXIgfHwge307XG4gICAgICB2YXIgaXRlbXMgPSBkYXRhVHJhbnNmZXIuaXRlbXM7XG4gICAgICBpZiAoXG4gICAgICAgIGl0ZW1zICYmXG4gICAgICAgIGl0ZW1zLmxlbmd0aCAmJlxuICAgICAgICAoaXRlbXNbMF0ud2Via2l0R2V0QXNFbnRyeSB8fCBpdGVtc1swXS5nZXRBc0VudHJ5KVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYW5kbGVGaWxlVHJlZUVudHJpZXMoXG4gICAgICAgICAgJC5tYXAoaXRlbXMsIGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICB2YXIgZW50cnk7XG4gICAgICAgICAgICBpZiAoaXRlbS53ZWJraXRHZXRBc0VudHJ5KSB7XG4gICAgICAgICAgICAgIGVudHJ5ID0gaXRlbS53ZWJraXRHZXRBc0VudHJ5KCk7XG4gICAgICAgICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgICAgIC8vIFdvcmthcm91bmQgZm9yIENocm9tZSBidWcgIzE0OTczNTpcbiAgICAgICAgICAgICAgICBlbnRyeS5fZmlsZSA9IGl0ZW0uZ2V0QXNGaWxlKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZ2V0QXNFbnRyeSgpO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gJC5EZWZlcnJlZCgpLnJlc29sdmUoJC5tYWtlQXJyYXkoZGF0YVRyYW5zZmVyLmZpbGVzKSkucHJvbWlzZSgpO1xuICAgIH0sXG5cbiAgICBfZ2V0U2luZ2xlRmlsZUlucHV0RmlsZXM6IGZ1bmN0aW9uIChmaWxlSW5wdXQpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgZmlsZUlucHV0ID0gJChmaWxlSW5wdXQpO1xuICAgICAgdmFyIGVudHJpZXMgPSBmaWxlSW5wdXQucHJvcCgnZW50cmllcycpLFxuICAgICAgICBmaWxlcyxcbiAgICAgICAgdmFsdWU7XG4gICAgICBpZiAoZW50cmllcyAmJiBlbnRyaWVzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFuZGxlRmlsZVRyZWVFbnRyaWVzKGVudHJpZXMpO1xuICAgICAgfVxuICAgICAgZmlsZXMgPSAkLm1ha2VBcnJheShmaWxlSW5wdXQucHJvcCgnZmlsZXMnKSk7XG4gICAgICBpZiAoIWZpbGVzLmxlbmd0aCkge1xuICAgICAgICB2YWx1ZSA9IGZpbGVJbnB1dC5wcm9wKCd2YWx1ZScpO1xuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuICQuRGVmZXJyZWQoKS5yZXNvbHZlKFtdKS5wcm9taXNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgdGhlIGZpbGVzIHByb3BlcnR5IGlzIG5vdCBhdmFpbGFibGUsIHRoZSBicm93c2VyIGRvZXMgbm90XG4gICAgICAgIC8vIHN1cHBvcnQgdGhlIEZpbGUgQVBJIGFuZCB3ZSBhZGQgYSBwc2V1ZG8gRmlsZSBvYmplY3Qgd2l0aFxuICAgICAgICAvLyB0aGUgaW5wdXQgdmFsdWUgYXMgbmFtZSB3aXRoIHBhdGggaW5mb3JtYXRpb24gcmVtb3ZlZDpcbiAgICAgICAgZmlsZXMgPSBbeyBuYW1lOiB2YWx1ZS5yZXBsYWNlKC9eLipcXFxcLywgJycpIH1dO1xuICAgICAgfSBlbHNlIGlmIChmaWxlc1swXS5uYW1lID09PSB1bmRlZmluZWQgJiYgZmlsZXNbMF0uZmlsZU5hbWUpIHtcbiAgICAgICAgLy8gRmlsZSBub3JtYWxpemF0aW9uIGZvciBTYWZhcmkgNCBhbmQgRmlyZWZveCAzOlxuICAgICAgICAkLmVhY2goZmlsZXMsIGZ1bmN0aW9uIChpbmRleCwgZmlsZSkge1xuICAgICAgICAgIGZpbGUubmFtZSA9IGZpbGUuZmlsZU5hbWU7XG4gICAgICAgICAgZmlsZS5zaXplID0gZmlsZS5maWxlU2l6ZTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gJC5EZWZlcnJlZCgpLnJlc29sdmUoZmlsZXMpLnByb21pc2UoKTtcbiAgICB9LFxuXG4gICAgX2dldEZpbGVJbnB1dEZpbGVzOiBmdW5jdGlvbiAoZmlsZUlucHV0KSB7XG4gICAgICBpZiAoIShmaWxlSW5wdXQgaW5zdGFuY2VvZiAkKSB8fCBmaWxlSW5wdXQubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRTaW5nbGVGaWxlSW5wdXRGaWxlcyhmaWxlSW5wdXQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuICQud2hlblxuICAgICAgICAuYXBwbHkoJCwgJC5tYXAoZmlsZUlucHV0LCB0aGlzLl9nZXRTaW5nbGVGaWxlSW5wdXRGaWxlcykpXG4gICAgICAgIFt0aGlzLl9wcm9taXNlUGlwZV0oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLCBhcmd1bWVudHMpO1xuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgX29uQ2hhbmdlOiBmdW5jdGlvbiAoZSkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICBkYXRhID0ge1xuICAgICAgICAgIGZpbGVJbnB1dDogJChlLnRhcmdldCksXG4gICAgICAgICAgZm9ybTogJChlLnRhcmdldC5mb3JtKVxuICAgICAgICB9O1xuICAgICAgdGhpcy5fZ2V0RmlsZUlucHV0RmlsZXMoZGF0YS5maWxlSW5wdXQpLmFsd2F5cyhmdW5jdGlvbiAoZmlsZXMpIHtcbiAgICAgICAgZGF0YS5maWxlcyA9IGZpbGVzO1xuICAgICAgICBpZiAodGhhdC5vcHRpb25zLnJlcGxhY2VGaWxlSW5wdXQpIHtcbiAgICAgICAgICB0aGF0Ll9yZXBsYWNlRmlsZUlucHV0KGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGF0Ll90cmlnZ2VyKFxuICAgICAgICAgICAgJ2NoYW5nZScsXG4gICAgICAgICAgICAkLkV2ZW50KCdjaGFuZ2UnLCB7IGRlbGVnYXRlZEV2ZW50OiBlIH0pLFxuICAgICAgICAgICAgZGF0YVxuICAgICAgICAgICkgIT09IGZhbHNlXG4gICAgICAgICkge1xuICAgICAgICAgIHRoYXQuX29uQWRkKGUsIGRhdGEpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgX29uUGFzdGU6IGZ1bmN0aW9uIChlKSB7XG4gICAgICB2YXIgaXRlbXMgPVxuICAgICAgICAgIGUub3JpZ2luYWxFdmVudCAmJlxuICAgICAgICAgIGUub3JpZ2luYWxFdmVudC5jbGlwYm9hcmREYXRhICYmXG4gICAgICAgICAgZS5vcmlnaW5hbEV2ZW50LmNsaXBib2FyZERhdGEuaXRlbXMsXG4gICAgICAgIGRhdGEgPSB7IGZpbGVzOiBbXSB9O1xuICAgICAgaWYgKGl0ZW1zICYmIGl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAkLmVhY2goaXRlbXMsIGZ1bmN0aW9uIChpbmRleCwgaXRlbSkge1xuICAgICAgICAgIHZhciBmaWxlID0gaXRlbS5nZXRBc0ZpbGUgJiYgaXRlbS5nZXRBc0ZpbGUoKTtcbiAgICAgICAgICBpZiAoZmlsZSkge1xuICAgICAgICAgICAgZGF0YS5maWxlcy5wdXNoKGZpbGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLl90cmlnZ2VyKFxuICAgICAgICAgICAgJ3Bhc3RlJyxcbiAgICAgICAgICAgICQuRXZlbnQoJ3Bhc3RlJywgeyBkZWxlZ2F0ZWRFdmVudDogZSB9KSxcbiAgICAgICAgICAgIGRhdGFcbiAgICAgICAgICApICE9PSBmYWxzZVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLl9vbkFkZChlLCBkYXRhKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBfb25Ecm9wOiBmdW5jdGlvbiAoZSkge1xuICAgICAgZS5kYXRhVHJhbnNmZXIgPSBlLm9yaWdpbmFsRXZlbnQgJiYgZS5vcmlnaW5hbEV2ZW50LmRhdGFUcmFuc2ZlcjtcbiAgICAgIHZhciB0aGF0ID0gdGhpcyxcbiAgICAgICAgZGF0YVRyYW5zZmVyID0gZS5kYXRhVHJhbnNmZXIsXG4gICAgICAgIGRhdGEgPSB7fTtcbiAgICAgIGlmIChkYXRhVHJhbnNmZXIgJiYgZGF0YVRyYW5zZmVyLmZpbGVzICYmIGRhdGFUcmFuc2Zlci5maWxlcy5sZW5ndGgpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLl9nZXREcm9wcGVkRmlsZXMoZGF0YVRyYW5zZmVyKS5hbHdheXMoZnVuY3Rpb24gKGZpbGVzKSB7XG4gICAgICAgICAgZGF0YS5maWxlcyA9IGZpbGVzO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoYXQuX3RyaWdnZXIoXG4gICAgICAgICAgICAgICdkcm9wJyxcbiAgICAgICAgICAgICAgJC5FdmVudCgnZHJvcCcsIHsgZGVsZWdhdGVkRXZlbnQ6IGUgfSksXG4gICAgICAgICAgICAgIGRhdGFcbiAgICAgICAgICAgICkgIT09IGZhbHNlXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGF0Ll9vbkFkZChlLCBkYXRhKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBfb25EcmFnT3ZlcjogZ2V0RHJhZ0hhbmRsZXIoJ2RyYWdvdmVyJyksXG5cbiAgICBfb25EcmFnRW50ZXI6IGdldERyYWdIYW5kbGVyKCdkcmFnZW50ZXInKSxcblxuICAgIF9vbkRyYWdMZWF2ZTogZ2V0RHJhZ0hhbmRsZXIoJ2RyYWdsZWF2ZScpLFxuXG4gICAgX2luaXRFdmVudEhhbmRsZXJzOiBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAodGhpcy5faXNYSFJVcGxvYWQodGhpcy5vcHRpb25zKSkge1xuICAgICAgICB0aGlzLl9vbih0aGlzLm9wdGlvbnMuZHJvcFpvbmUsIHtcbiAgICAgICAgICBkcmFnb3ZlcjogdGhpcy5fb25EcmFnT3ZlcixcbiAgICAgICAgICBkcm9wOiB0aGlzLl9vbkRyb3AsXG4gICAgICAgICAgLy8gZXZlbnQucHJldmVudERlZmF1bHQoKSBvbiBkcmFnZW50ZXIgaXMgcmVxdWlyZWQgZm9yIElFMTArOlxuICAgICAgICAgIGRyYWdlbnRlcjogdGhpcy5fb25EcmFnRW50ZXIsXG4gICAgICAgICAgLy8gZHJhZ2xlYXZlIGlzIG5vdCByZXF1aXJlZCwgYnV0IGFkZGVkIGZvciBjb21wbGV0ZW5lc3M6XG4gICAgICAgICAgZHJhZ2xlYXZlOiB0aGlzLl9vbkRyYWdMZWF2ZVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fb24odGhpcy5vcHRpb25zLnBhc3RlWm9uZSwge1xuICAgICAgICAgIHBhc3RlOiB0aGlzLl9vblBhc3RlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKCQuc3VwcG9ydC5maWxlSW5wdXQpIHtcbiAgICAgICAgdGhpcy5fb24odGhpcy5vcHRpb25zLmZpbGVJbnB1dCwge1xuICAgICAgICAgIGNoYW5nZTogdGhpcy5fb25DaGFuZ2VcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIF9kZXN0cm95RXZlbnRIYW5kbGVyczogZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcy5fb2ZmKHRoaXMub3B0aW9ucy5kcm9wWm9uZSwgJ2RyYWdlbnRlciBkcmFnbGVhdmUgZHJhZ292ZXIgZHJvcCcpO1xuICAgICAgdGhpcy5fb2ZmKHRoaXMub3B0aW9ucy5wYXN0ZVpvbmUsICdwYXN0ZScpO1xuICAgICAgdGhpcy5fb2ZmKHRoaXMub3B0aW9ucy5maWxlSW5wdXQsICdjaGFuZ2UnKTtcbiAgICB9LFxuXG4gICAgX2Rlc3Ryb3k6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMuX2Rlc3Ryb3lFdmVudEhhbmRsZXJzKCk7XG4gICAgfSxcblxuICAgIF9zZXRPcHRpb246IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICB2YXIgcmVpbml0ID0gJC5pbkFycmF5KGtleSwgdGhpcy5fc3BlY2lhbE9wdGlvbnMpICE9PSAtMTtcbiAgICAgIGlmIChyZWluaXQpIHtcbiAgICAgICAgdGhpcy5fZGVzdHJveUV2ZW50SGFuZGxlcnMoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX3N1cGVyKGtleSwgdmFsdWUpO1xuICAgICAgaWYgKHJlaW5pdCkge1xuICAgICAgICB0aGlzLl9pbml0U3BlY2lhbE9wdGlvbnMoKTtcbiAgICAgICAgdGhpcy5faW5pdEV2ZW50SGFuZGxlcnMoKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX2luaXRTcGVjaWFsT3B0aW9uczogZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICBpZiAob3B0aW9ucy5maWxlSW5wdXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBvcHRpb25zLmZpbGVJbnB1dCA9IHRoaXMuZWxlbWVudC5pcygnaW5wdXRbdHlwZT1cImZpbGVcIl0nKVxuICAgICAgICAgID8gdGhpcy5lbGVtZW50XG4gICAgICAgICAgOiB0aGlzLmVsZW1lbnQuZmluZCgnaW5wdXRbdHlwZT1cImZpbGVcIl0nKTtcbiAgICAgIH0gZWxzZSBpZiAoIShvcHRpb25zLmZpbGVJbnB1dCBpbnN0YW5jZW9mICQpKSB7XG4gICAgICAgIG9wdGlvbnMuZmlsZUlucHV0ID0gJChvcHRpb25zLmZpbGVJbnB1dCk7XG4gICAgICB9XG4gICAgICBpZiAoIShvcHRpb25zLmRyb3Bab25lIGluc3RhbmNlb2YgJCkpIHtcbiAgICAgICAgb3B0aW9ucy5kcm9wWm9uZSA9ICQob3B0aW9ucy5kcm9wWm9uZSk7XG4gICAgICB9XG4gICAgICBpZiAoIShvcHRpb25zLnBhc3RlWm9uZSBpbnN0YW5jZW9mICQpKSB7XG4gICAgICAgIG9wdGlvbnMucGFzdGVab25lID0gJChvcHRpb25zLnBhc3RlWm9uZSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIF9nZXRSZWdFeHA6IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgIHZhciBwYXJ0cyA9IHN0ci5zcGxpdCgnLycpLFxuICAgICAgICBtb2RpZmllcnMgPSBwYXJ0cy5wb3AoKTtcbiAgICAgIHBhcnRzLnNoaWZ0KCk7XG4gICAgICByZXR1cm4gbmV3IFJlZ0V4cChwYXJ0cy5qb2luKCcvJyksIG1vZGlmaWVycyk7XG4gICAgfSxcblxuICAgIF9pc1JlZ0V4cE9wdGlvbjogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGtleSAhPT0gJ3VybCcgJiZcbiAgICAgICAgJC50eXBlKHZhbHVlKSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgL15cXC8uKlxcL1tpZ21dezAsM30kLy50ZXN0KHZhbHVlKVxuICAgICAgKTtcbiAgICB9LFxuXG4gICAgX2luaXREYXRhQXR0cmlidXRlczogZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICBvcHRpb25zID0gdGhpcy5vcHRpb25zLFxuICAgICAgICBkYXRhID0gdGhpcy5lbGVtZW50LmRhdGEoKTtcbiAgICAgIC8vIEluaXRpYWxpemUgb3B0aW9ucyBzZXQgdmlhIEhUTUw1IGRhdGEtYXR0cmlidXRlczpcbiAgICAgICQuZWFjaCh0aGlzLmVsZW1lbnRbMF0uYXR0cmlidXRlcywgZnVuY3Rpb24gKGluZGV4LCBhdHRyKSB7XG4gICAgICAgIHZhciBrZXkgPSBhdHRyLm5hbWUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICB2YWx1ZTtcbiAgICAgICAgaWYgKC9eZGF0YS0vLnRlc3Qoa2V5KSkge1xuICAgICAgICAgIC8vIENvbnZlcnQgaHlwaGVuLWF0ZWQga2V5IHRvIGNhbWVsQ2FzZTpcbiAgICAgICAgICBrZXkgPSBrZXkuc2xpY2UoNSkucmVwbGFjZSgvLVthLXpdL2csIGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHIuY2hhckF0KDEpLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdmFsdWUgPSBkYXRhW2tleV07XG4gICAgICAgICAgaWYgKHRoYXQuX2lzUmVnRXhwT3B0aW9uKGtleSwgdmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHRoYXQuX2dldFJlZ0V4cCh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9wdGlvbnNba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgX2NyZWF0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcy5faW5pdERhdGFBdHRyaWJ1dGVzKCk7XG4gICAgICB0aGlzLl9pbml0U3BlY2lhbE9wdGlvbnMoKTtcbiAgICAgIHRoaXMuX3Nsb3RzID0gW107XG4gICAgICB0aGlzLl9zZXF1ZW5jZSA9IHRoaXMuX2dldFhIUlByb21pc2UodHJ1ZSk7XG4gICAgICB0aGlzLl9zZW5kaW5nID0gdGhpcy5fYWN0aXZlID0gMDtcbiAgICAgIHRoaXMuX2luaXRQcm9ncmVzc09iamVjdCh0aGlzKTtcbiAgICAgIHRoaXMuX2luaXRFdmVudEhhbmRsZXJzKCk7XG4gICAgfSxcblxuICAgIC8vIFRoaXMgbWV0aG9kIGlzIGV4cG9zZWQgdG8gdGhlIHdpZGdldCBBUEkgYW5kIGFsbG93cyB0byBxdWVyeVxuICAgIC8vIHRoZSBudW1iZXIgb2YgYWN0aXZlIHVwbG9hZHM6XG4gICAgYWN0aXZlOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fYWN0aXZlO1xuICAgIH0sXG5cbiAgICAvLyBUaGlzIG1ldGhvZCBpcyBleHBvc2VkIHRvIHRoZSB3aWRnZXQgQVBJIGFuZCBhbGxvd3MgdG8gcXVlcnlcbiAgICAvLyB0aGUgd2lkZ2V0IHVwbG9hZCBwcm9ncmVzcy5cbiAgICAvLyBJdCByZXR1cm5zIGFuIG9iamVjdCB3aXRoIGxvYWRlZCwgdG90YWwgYW5kIGJpdHJhdGUgcHJvcGVydGllc1xuICAgIC8vIGZvciB0aGUgcnVubmluZyB1cGxvYWRzOlxuICAgIHByb2dyZXNzOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcHJvZ3Jlc3M7XG4gICAgfSxcblxuICAgIC8vIFRoaXMgbWV0aG9kIGlzIGV4cG9zZWQgdG8gdGhlIHdpZGdldCBBUEkgYW5kIGFsbG93cyBhZGRpbmcgZmlsZXNcbiAgICAvLyB1c2luZyB0aGUgZmlsZXVwbG9hZCBBUEkuIFRoZSBkYXRhIHBhcmFtZXRlciBhY2NlcHRzIGFuIG9iamVjdCB3aGljaFxuICAgIC8vIG11c3QgaGF2ZSBhIGZpbGVzIHByb3BlcnR5IGFuZCBjYW4gY29udGFpbiBhZGRpdGlvbmFsIG9wdGlvbnM6XG4gICAgLy8gLmZpbGV1cGxvYWQoJ2FkZCcsIHtmaWxlczogZmlsZXNMaXN0fSk7XG4gICAgYWRkOiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgaWYgKCFkYXRhIHx8IHRoaXMub3B0aW9ucy5kaXNhYmxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoZGF0YS5maWxlSW5wdXQgJiYgIWRhdGEuZmlsZXMpIHtcbiAgICAgICAgdGhpcy5fZ2V0RmlsZUlucHV0RmlsZXMoZGF0YS5maWxlSW5wdXQpLmFsd2F5cyhmdW5jdGlvbiAoZmlsZXMpIHtcbiAgICAgICAgICBkYXRhLmZpbGVzID0gZmlsZXM7XG4gICAgICAgICAgdGhhdC5fb25BZGQobnVsbCwgZGF0YSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YS5maWxlcyA9ICQubWFrZUFycmF5KGRhdGEuZmlsZXMpO1xuICAgICAgICB0aGlzLl9vbkFkZChudWxsLCBkYXRhKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gVGhpcyBtZXRob2QgaXMgZXhwb3NlZCB0byB0aGUgd2lkZ2V0IEFQSSBhbmQgYWxsb3dzIHNlbmRpbmcgZmlsZXNcbiAgICAvLyB1c2luZyB0aGUgZmlsZXVwbG9hZCBBUEkuIFRoZSBkYXRhIHBhcmFtZXRlciBhY2NlcHRzIGFuIG9iamVjdCB3aGljaFxuICAgIC8vIG11c3QgaGF2ZSBhIGZpbGVzIG9yIGZpbGVJbnB1dCBwcm9wZXJ0eSBhbmQgY2FuIGNvbnRhaW4gYWRkaXRpb25hbCBvcHRpb25zOlxuICAgIC8vIC5maWxldXBsb2FkKCdzZW5kJywge2ZpbGVzOiBmaWxlc0xpc3R9KTtcbiAgICAvLyBUaGUgbWV0aG9kIHJldHVybnMgYSBQcm9taXNlIG9iamVjdCBmb3IgdGhlIGZpbGUgdXBsb2FkIGNhbGwuXG4gICAgc2VuZDogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgIGlmIChkYXRhICYmICF0aGlzLm9wdGlvbnMuZGlzYWJsZWQpIHtcbiAgICAgICAgaWYgKGRhdGEuZmlsZUlucHV0ICYmICFkYXRhLmZpbGVzKSB7XG4gICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICAgICAgZGZkID0gJC5EZWZlcnJlZCgpLFxuICAgICAgICAgICAgcHJvbWlzZSA9IGRmZC5wcm9taXNlKCksXG4gICAgICAgICAgICBqcVhIUixcbiAgICAgICAgICAgIGFib3J0ZWQ7XG4gICAgICAgICAgcHJvbWlzZS5hYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGFib3J0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGpxWEhSKSB7XG4gICAgICAgICAgICAgIHJldHVybiBqcVhIUi5hYm9ydCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGZkLnJlamVjdChudWxsLCAnYWJvcnQnLCAnYWJvcnQnKTtcbiAgICAgICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy5fZ2V0RmlsZUlucHV0RmlsZXMoZGF0YS5maWxlSW5wdXQpLmFsd2F5cyhmdW5jdGlvbiAoZmlsZXMpIHtcbiAgICAgICAgICAgIGlmIChhYm9ydGVkKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghZmlsZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGRmZC5yZWplY3QoKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGF0YS5maWxlcyA9IGZpbGVzO1xuICAgICAgICAgICAganFYSFIgPSB0aGF0Ll9vblNlbmQobnVsbCwgZGF0YSk7XG4gICAgICAgICAgICBqcVhIUi50aGVuKFxuICAgICAgICAgICAgICBmdW5jdGlvbiAocmVzdWx0LCB0ZXh0U3RhdHVzLCBqcVhIUikge1xuICAgICAgICAgICAgICAgIGRmZC5yZXNvbHZlKHJlc3VsdCwgdGV4dFN0YXR1cywganFYSFIpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBmdW5jdGlvbiAoanFYSFIsIHRleHRTdGF0dXMsIGVycm9yVGhyb3duKSB7XG4gICAgICAgICAgICAgICAgZGZkLnJlamVjdChqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiB0aGlzLl9lbmhhbmNlUHJvbWlzZShwcm9taXNlKTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhLmZpbGVzID0gJC5tYWtlQXJyYXkoZGF0YS5maWxlcyk7XG4gICAgICAgIGlmIChkYXRhLmZpbGVzLmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLl9vblNlbmQobnVsbCwgZGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLl9nZXRYSFJQcm9taXNlKGZhbHNlLCBkYXRhICYmIGRhdGEuY29udGV4dCk7XG4gICAgfVxuICB9KTtcbn0pO1xuIiwiLypcbiAqIGpRdWVyeSBJZnJhbWUgVHJhbnNwb3J0IFBsdWdpblxuICogaHR0cHM6Ly9naXRodWIuY29tL2JsdWVpbXAvalF1ZXJ5LUZpbGUtVXBsb2FkXG4gKlxuICogQ29weXJpZ2h0IDIwMTEsIFNlYmFzdGlhbiBUc2NoYW5cbiAqIGh0dHBzOi8vYmx1ZWltcC5uZXRcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2U6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuICovXG5cbi8qIGdsb2JhbCBkZWZpbmUsIHJlcXVpcmUgKi9cblxuKGZ1bmN0aW9uIChmYWN0b3J5KSB7XG4gICd1c2Ugc3RyaWN0JztcbiAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgIC8vIFJlZ2lzdGVyIGFzIGFuIGFub255bW91cyBBTUQgbW9kdWxlOlxuICAgIGRlZmluZShbJ2pxdWVyeSddLCBmYWN0b3J5KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAvLyBOb2RlL0NvbW1vbkpTOlxuICAgIGZhY3RvcnkocmVxdWlyZSgnanF1ZXJ5JykpO1xuICB9IGVsc2Uge1xuICAgIC8vIEJyb3dzZXIgZ2xvYmFsczpcbiAgICBmYWN0b3J5KHdpbmRvdy5qUXVlcnkpO1xuICB9XG59KShmdW5jdGlvbiAoJCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgLy8gSGVscGVyIHZhcmlhYmxlIHRvIGNyZWF0ZSB1bmlxdWUgbmFtZXMgZm9yIHRoZSB0cmFuc3BvcnQgaWZyYW1lczpcbiAgdmFyIGNvdW50ZXIgPSAwLFxuICAgIGpzb25BUEkgPSAkLFxuICAgIGpzb25QYXJzZSA9ICdwYXJzZUpTT04nO1xuXG4gIGlmICgnSlNPTicgaW4gd2luZG93ICYmICdwYXJzZScgaW4gSlNPTikge1xuICAgIGpzb25BUEkgPSBKU09OO1xuICAgIGpzb25QYXJzZSA9ICdwYXJzZSc7XG4gIH1cblxuICAvLyBUaGUgaWZyYW1lIHRyYW5zcG9ydCBhY2NlcHRzIGZvdXIgYWRkaXRpb25hbCBvcHRpb25zOlxuICAvLyBvcHRpb25zLmZpbGVJbnB1dDogYSBqUXVlcnkgY29sbGVjdGlvbiBvZiBmaWxlIGlucHV0IGZpZWxkc1xuICAvLyBvcHRpb25zLnBhcmFtTmFtZTogdGhlIHBhcmFtZXRlciBuYW1lIGZvciB0aGUgZmlsZSBmb3JtIGRhdGEsXG4gIC8vICBvdmVycmlkZXMgdGhlIG5hbWUgcHJvcGVydHkgb2YgdGhlIGZpbGUgaW5wdXQgZmllbGQocyksXG4gIC8vICBjYW4gYmUgYSBzdHJpbmcgb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAgLy8gb3B0aW9ucy5mb3JtRGF0YTogYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIG5hbWUgYW5kIHZhbHVlIHByb3BlcnRpZXMsXG4gIC8vICBlcXVpdmFsZW50IHRvIHRoZSByZXR1cm4gZGF0YSBvZiAuc2VyaWFsaXplQXJyYXkoKSwgZS5nLjpcbiAgLy8gIFt7bmFtZTogJ2EnLCB2YWx1ZTogMX0sIHtuYW1lOiAnYicsIHZhbHVlOiAyfV1cbiAgLy8gb3B0aW9ucy5pbml0aWFsSWZyYW1lU3JjOiB0aGUgVVJMIG9mIHRoZSBpbml0aWFsIGlmcmFtZSBzcmMsXG4gIC8vICBieSBkZWZhdWx0IHNldCB0byBcImphdmFzY3JpcHQ6ZmFsc2U7XCJcbiAgJC5hamF4VHJhbnNwb3J0KCdpZnJhbWUnLCBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zLmFzeW5jKSB7XG4gICAgICAvLyBqYXZhc2NyaXB0OmZhbHNlIGFzIGluaXRpYWwgaWZyYW1lIHNyY1xuICAgICAgLy8gcHJldmVudHMgd2FybmluZyBwb3B1cHMgb24gSFRUUFMgaW4gSUU2OlxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNjcmlwdC11cmxcbiAgICAgIHZhciBpbml0aWFsSWZyYW1lU3JjID0gb3B0aW9ucy5pbml0aWFsSWZyYW1lU3JjIHx8ICdqYXZhc2NyaXB0OmZhbHNlOycsXG4gICAgICAgIGZvcm0sXG4gICAgICAgIGlmcmFtZSxcbiAgICAgICAgYWRkUGFyYW1DaGFyO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2VuZDogZnVuY3Rpb24gKF8sIGNvbXBsZXRlQ2FsbGJhY2spIHtcbiAgICAgICAgICBmb3JtID0gJCgnPGZvcm0gc3R5bGU9XCJkaXNwbGF5Om5vbmU7XCI+PC9mb3JtPicpO1xuICAgICAgICAgIGZvcm0uYXR0cignYWNjZXB0LWNoYXJzZXQnLCBvcHRpb25zLmZvcm1BY2NlcHRDaGFyc2V0KTtcbiAgICAgICAgICBhZGRQYXJhbUNoYXIgPSAvXFw/Ly50ZXN0KG9wdGlvbnMudXJsKSA/ICcmJyA6ICc/JztcbiAgICAgICAgICAvLyBYRG9tYWluUmVxdWVzdCBvbmx5IHN1cHBvcnRzIEdFVCBhbmQgUE9TVDpcbiAgICAgICAgICBpZiAob3B0aW9ucy50eXBlID09PSAnREVMRVRFJykge1xuICAgICAgICAgICAgb3B0aW9ucy51cmwgPSBvcHRpb25zLnVybCArIGFkZFBhcmFtQ2hhciArICdfbWV0aG9kPURFTEVURSc7XG4gICAgICAgICAgICBvcHRpb25zLnR5cGUgPSAnUE9TVCc7XG4gICAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLnR5cGUgPT09ICdQVVQnKSB7XG4gICAgICAgICAgICBvcHRpb25zLnVybCA9IG9wdGlvbnMudXJsICsgYWRkUGFyYW1DaGFyICsgJ19tZXRob2Q9UFVUJztcbiAgICAgICAgICAgIG9wdGlvbnMudHlwZSA9ICdQT1NUJztcbiAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMudHlwZSA9PT0gJ1BBVENIJykge1xuICAgICAgICAgICAgb3B0aW9ucy51cmwgPSBvcHRpb25zLnVybCArIGFkZFBhcmFtQ2hhciArICdfbWV0aG9kPVBBVENIJztcbiAgICAgICAgICAgIG9wdGlvbnMudHlwZSA9ICdQT1NUJztcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gSUUgdmVyc2lvbnMgYmVsb3cgSUU4IGNhbm5vdCBzZXQgdGhlIG5hbWUgcHJvcGVydHkgb2ZcbiAgICAgICAgICAvLyBlbGVtZW50cyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIGFkZGVkIHRvIHRoZSBET00sXG4gICAgICAgICAgLy8gc28gd2Ugc2V0IHRoZSBuYW1lIGFsb25nIHdpdGggdGhlIGlmcmFtZSBIVE1MIG1hcmt1cDpcbiAgICAgICAgICBjb3VudGVyICs9IDE7XG4gICAgICAgICAgaWZyYW1lID0gJChcbiAgICAgICAgICAgICc8aWZyYW1lIHNyYz1cIicgK1xuICAgICAgICAgICAgICBpbml0aWFsSWZyYW1lU3JjICtcbiAgICAgICAgICAgICAgJ1wiIG5hbWU9XCJpZnJhbWUtdHJhbnNwb3J0LScgK1xuICAgICAgICAgICAgICBjb3VudGVyICtcbiAgICAgICAgICAgICAgJ1wiPjwvaWZyYW1lPidcbiAgICAgICAgICApLm9uKCdsb2FkJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGZpbGVJbnB1dENsb25lcyxcbiAgICAgICAgICAgICAgcGFyYW1OYW1lcyA9ICQuaXNBcnJheShvcHRpb25zLnBhcmFtTmFtZSlcbiAgICAgICAgICAgICAgICA/IG9wdGlvbnMucGFyYW1OYW1lXG4gICAgICAgICAgICAgICAgOiBbb3B0aW9ucy5wYXJhbU5hbWVdO1xuICAgICAgICAgICAgaWZyYW1lLm9mZignbG9hZCcpLm9uKCdsb2FkJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICB2YXIgcmVzcG9uc2U7XG4gICAgICAgICAgICAgIC8vIFdyYXAgaW4gYSB0cnkvY2F0Y2ggYmxvY2sgdG8gY2F0Y2ggZXhjZXB0aW9ucyB0aHJvd25cbiAgICAgICAgICAgICAgLy8gd2hlbiB0cnlpbmcgdG8gYWNjZXNzIGNyb3NzLWRvbWFpbiBpZnJhbWUgY29udGVudHM6XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBpZnJhbWUuY29udGVudHMoKTtcbiAgICAgICAgICAgICAgICAvLyBHb29nbGUgQ2hyb21lIGFuZCBGaXJlZm94IGRvIG5vdCB0aHJvdyBhblxuICAgICAgICAgICAgICAgIC8vIGV4Y2VwdGlvbiB3aGVuIGNhbGxpbmcgaWZyYW1lLmNvbnRlbnRzKCkgb25cbiAgICAgICAgICAgICAgICAvLyBjcm9zcy1kb21haW4gcmVxdWVzdHMsIHNvIHdlIHVuaWZ5IHRoZSByZXNwb25zZTpcbiAgICAgICAgICAgICAgICBpZiAoIXJlc3BvbnNlLmxlbmd0aCB8fCAhcmVzcG9uc2VbMF0uZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2UgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gVGhlIGNvbXBsZXRlIGNhbGxiYWNrIHJldHVybnMgdGhlXG4gICAgICAgICAgICAgIC8vIGlmcmFtZSBjb250ZW50IGRvY3VtZW50IGFzIHJlc3BvbnNlIG9iamVjdDpcbiAgICAgICAgICAgICAgY29tcGxldGVDYWxsYmFjaygyMDAsICdzdWNjZXNzJywgeyBpZnJhbWU6IHJlc3BvbnNlIH0pO1xuICAgICAgICAgICAgICAvLyBGaXggZm9yIElFIGVuZGxlc3MgcHJvZ3Jlc3MgYmFyIGFjdGl2aXR5IGJ1Z1xuICAgICAgICAgICAgICAvLyAoaGFwcGVucyBvbiBmb3JtIHN1Ym1pdHMgdG8gaWZyYW1lIHRhcmdldHMpOlxuICAgICAgICAgICAgICAkKCc8aWZyYW1lIHNyYz1cIicgKyBpbml0aWFsSWZyYW1lU3JjICsgJ1wiPjwvaWZyYW1lPicpLmFwcGVuZFRvKFxuICAgICAgICAgICAgICAgIGZvcm1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIC8vIFJlbW92aW5nIHRoZSBmb3JtIGluIGEgc2V0VGltZW91dCBjYWxsXG4gICAgICAgICAgICAgICAgLy8gYWxsb3dzIENocm9tZSdzIGRldmVsb3BlciB0b29scyB0byBkaXNwbGF5XG4gICAgICAgICAgICAgICAgLy8gdGhlIHJlc3BvbnNlIHJlc3VsdFxuICAgICAgICAgICAgICAgIGZvcm0ucmVtb3ZlKCk7XG4gICAgICAgICAgICAgIH0sIDApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmb3JtXG4gICAgICAgICAgICAgIC5wcm9wKCd0YXJnZXQnLCBpZnJhbWUucHJvcCgnbmFtZScpKVxuICAgICAgICAgICAgICAucHJvcCgnYWN0aW9uJywgb3B0aW9ucy51cmwpXG4gICAgICAgICAgICAgIC5wcm9wKCdtZXRob2QnLCBvcHRpb25zLnR5cGUpO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuZm9ybURhdGEpIHtcbiAgICAgICAgICAgICAgJC5lYWNoKG9wdGlvbnMuZm9ybURhdGEsIGZ1bmN0aW9uIChpbmRleCwgZmllbGQpIHtcbiAgICAgICAgICAgICAgICAkKCc8aW5wdXQgdHlwZT1cImhpZGRlblwiLz4nKVxuICAgICAgICAgICAgICAgICAgLnByb3AoJ25hbWUnLCBmaWVsZC5uYW1lKVxuICAgICAgICAgICAgICAgICAgLnZhbChmaWVsZC52YWx1ZSlcbiAgICAgICAgICAgICAgICAgIC5hcHBlbmRUbyhmb3JtKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIG9wdGlvbnMuZmlsZUlucHV0ICYmXG4gICAgICAgICAgICAgIG9wdGlvbnMuZmlsZUlucHV0Lmxlbmd0aCAmJlxuICAgICAgICAgICAgICBvcHRpb25zLnR5cGUgPT09ICdQT1NUJ1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGZpbGVJbnB1dENsb25lcyA9IG9wdGlvbnMuZmlsZUlucHV0LmNsb25lKCk7XG4gICAgICAgICAgICAgIC8vIEluc2VydCBhIGNsb25lIGZvciBlYWNoIGZpbGUgaW5wdXQgZmllbGQ6XG4gICAgICAgICAgICAgIG9wdGlvbnMuZmlsZUlucHV0LmFmdGVyKGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmaWxlSW5wdXRDbG9uZXNbaW5kZXhdO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMucGFyYW1OYW1lKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5maWxlSW5wdXQuZWFjaChmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICQodGhpcykucHJvcCgnbmFtZScsIHBhcmFtTmFtZXNbaW5kZXhdIHx8IG9wdGlvbnMucGFyYW1OYW1lKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBBcHBlbmRpbmcgdGhlIGZpbGUgaW5wdXQgZmllbGRzIHRvIHRoZSBoaWRkZW4gZm9ybVxuICAgICAgICAgICAgICAvLyByZW1vdmVzIHRoZW0gZnJvbSB0aGVpciBvcmlnaW5hbCBsb2NhdGlvbjpcbiAgICAgICAgICAgICAgZm9ybVxuICAgICAgICAgICAgICAgIC5hcHBlbmQob3B0aW9ucy5maWxlSW5wdXQpXG4gICAgICAgICAgICAgICAgLnByb3AoJ2VuY3R5cGUnLCAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScpXG4gICAgICAgICAgICAgICAgLy8gZW5jdHlwZSBtdXN0IGJlIHNldCBhcyBlbmNvZGluZyBmb3IgSUU6XG4gICAgICAgICAgICAgICAgLnByb3AoJ2VuY29kaW5nJywgJ211bHRpcGFydC9mb3JtLWRhdGEnKTtcbiAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBIVE1MNSBmb3JtIGF0dHJpYnV0ZSBmcm9tIHRoZSBpbnB1dChzKTpcbiAgICAgICAgICAgICAgb3B0aW9ucy5maWxlSW5wdXQucmVtb3ZlQXR0cignZm9ybScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAvLyBTdWJtaXR0aW5nIHRoZSBmb3JtIGluIGEgc2V0VGltZW91dCBjYWxsIGZpeGVzIGFuIGlzc3VlIHdpdGhcbiAgICAgICAgICAgICAgLy8gU2FmYXJpIDEzIG5vdCB0cmlnZ2VyaW5nIHRoZSBpZnJhbWUgbG9hZCBldmVudCBhZnRlciByZXNldHRpbmdcbiAgICAgICAgICAgICAgLy8gdGhlIGxvYWQgZXZlbnQgaGFuZGxlciwgc2VlIGFsc286XG4gICAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ibHVlaW1wL2pRdWVyeS1GaWxlLVVwbG9hZC9pc3N1ZXMvMzYzM1xuICAgICAgICAgICAgICBmb3JtLnN1Ym1pdCgpO1xuICAgICAgICAgICAgICAvLyBJbnNlcnQgdGhlIGZpbGUgaW5wdXQgZmllbGRzIGF0IHRoZWlyIG9yaWdpbmFsIGxvY2F0aW9uXG4gICAgICAgICAgICAgIC8vIGJ5IHJlcGxhY2luZyB0aGUgY2xvbmVzIHdpdGggdGhlIG9yaWdpbmFsczpcbiAgICAgICAgICAgICAgaWYgKGZpbGVJbnB1dENsb25lcyAmJiBmaWxlSW5wdXRDbG9uZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5maWxlSW5wdXQuZWFjaChmdW5jdGlvbiAoaW5kZXgsIGlucHV0KSB7XG4gICAgICAgICAgICAgICAgICB2YXIgY2xvbmUgPSAkKGZpbGVJbnB1dENsb25lc1tpbmRleF0pO1xuICAgICAgICAgICAgICAgICAgLy8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgbmFtZSBhbmQgZm9ybSBwcm9wZXJ0aWVzOlxuICAgICAgICAgICAgICAgICAgJChpbnB1dClcbiAgICAgICAgICAgICAgICAgICAgLnByb3AoJ25hbWUnLCBjbG9uZS5wcm9wKCduYW1lJykpXG4gICAgICAgICAgICAgICAgICAgIC5hdHRyKCdmb3JtJywgY2xvbmUuYXR0cignZm9ybScpKTtcbiAgICAgICAgICAgICAgICAgIGNsb25lLnJlcGxhY2VXaXRoKGlucHV0KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZm9ybS5hcHBlbmQoaWZyYW1lKS5hcHBlbmRUbyhkb2N1bWVudC5ib2R5KTtcbiAgICAgICAgfSxcbiAgICAgICAgYWJvcnQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoaWZyYW1lKSB7XG4gICAgICAgICAgICAvLyBqYXZhc2NyaXB0OmZhbHNlIGFzIGlmcmFtZSBzcmMgYWJvcnRzIHRoZSByZXF1ZXN0XG4gICAgICAgICAgICAvLyBhbmQgcHJldmVudHMgd2FybmluZyBwb3B1cHMgb24gSFRUUFMgaW4gSUU2LlxuICAgICAgICAgICAgaWZyYW1lLm9mZignbG9hZCcpLnByb3AoJ3NyYycsIGluaXRpYWxJZnJhbWVTcmMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZm9ybSkge1xuICAgICAgICAgICAgZm9ybS5yZW1vdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9KTtcblxuICAvLyBUaGUgaWZyYW1lIHRyYW5zcG9ydCByZXR1cm5zIHRoZSBpZnJhbWUgY29udGVudCBkb2N1bWVudCBhcyByZXNwb25zZS5cbiAgLy8gVGhlIGZvbGxvd2luZyBhZGRzIGNvbnZlcnRlcnMgZnJvbSBpZnJhbWUgdG8gdGV4dCwganNvbiwgaHRtbCwgeG1sXG4gIC8vIGFuZCBzY3JpcHQuXG4gIC8vIFBsZWFzZSBub3RlIHRoYXQgdGhlIENvbnRlbnQtVHlwZSBmb3IgSlNPTiByZXNwb25zZXMgaGFzIHRvIGJlIHRleHQvcGxhaW5cbiAgLy8gb3IgdGV4dC9odG1sLCBpZiB0aGUgYnJvd3NlciBkb2Vzbid0IGluY2x1ZGUgYXBwbGljYXRpb24vanNvbiBpbiB0aGVcbiAgLy8gQWNjZXB0IGhlYWRlciwgZWxzZSBJRSB3aWxsIHNob3cgYSBkb3dubG9hZCBkaWFsb2cuXG4gIC8vIFRoZSBDb250ZW50LVR5cGUgZm9yIFhNTCByZXNwb25zZXMgb24gdGhlIG90aGVyIGhhbmQgaGFzIHRvIGJlIGFsd2F5c1xuICAvLyBhcHBsaWNhdGlvbi94bWwgb3IgdGV4dC94bWwsIHNvIElFIHByb3Blcmx5IHBhcnNlcyB0aGUgWE1MIHJlc3BvbnNlLlxuICAvLyBTZWUgYWxzb1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vYmx1ZWltcC9qUXVlcnktRmlsZS1VcGxvYWQvd2lraS9TZXR1cCNjb250ZW50LXR5cGUtbmVnb3RpYXRpb25cbiAgJC5hamF4U2V0dXAoe1xuICAgIGNvbnZlcnRlcnM6IHtcbiAgICAgICdpZnJhbWUgdGV4dCc6IGZ1bmN0aW9uIChpZnJhbWUpIHtcbiAgICAgICAgcmV0dXJuIGlmcmFtZSAmJiAkKGlmcmFtZVswXS5ib2R5KS50ZXh0KCk7XG4gICAgICB9LFxuICAgICAgJ2lmcmFtZSBqc29uJzogZnVuY3Rpb24gKGlmcmFtZSkge1xuICAgICAgICByZXR1cm4gaWZyYW1lICYmIGpzb25BUElbanNvblBhcnNlXSgkKGlmcmFtZVswXS5ib2R5KS50ZXh0KCkpO1xuICAgICAgfSxcbiAgICAgICdpZnJhbWUgaHRtbCc6IGZ1bmN0aW9uIChpZnJhbWUpIHtcbiAgICAgICAgcmV0dXJuIGlmcmFtZSAmJiAkKGlmcmFtZVswXS5ib2R5KS5odG1sKCk7XG4gICAgICB9LFxuICAgICAgJ2lmcmFtZSB4bWwnOiBmdW5jdGlvbiAoaWZyYW1lKSB7XG4gICAgICAgIHZhciB4bWxEb2MgPSBpZnJhbWUgJiYgaWZyYW1lWzBdO1xuICAgICAgICByZXR1cm4geG1sRG9jICYmICQuaXNYTUxEb2MoeG1sRG9jKVxuICAgICAgICAgID8geG1sRG9jXG4gICAgICAgICAgOiAkLnBhcnNlWE1MKFxuICAgICAgICAgICAgICAoeG1sRG9jLlhNTERvY3VtZW50ICYmIHhtbERvYy5YTUxEb2N1bWVudC54bWwpIHx8XG4gICAgICAgICAgICAgICAgJCh4bWxEb2MuYm9keSkuaHRtbCgpXG4gICAgICAgICAgICApO1xuICAgICAgfSxcbiAgICAgICdpZnJhbWUgc2NyaXB0JzogZnVuY3Rpb24gKGlmcmFtZSkge1xuICAgICAgICByZXR1cm4gaWZyYW1lICYmICQuZ2xvYmFsRXZhbCgkKGlmcmFtZVswXS5ib2R5KS50ZXh0KCkpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59KTtcbiIsImZ1bmN0aW9uIHJhbmRvbVVVSUQoKSB7XHJcbiAgICBpZiAodHlwZW9mIGNyeXB0byA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIGNyeXB0by5yYW5kb21VVUlEID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgcmV0dXJuIGNyeXB0by5yYW5kb21VVUlEKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIChbMWU3XSArIC0xZTMgKyAtNGUzICsgLThlMyArIC0xZTExKS5yZXBsYWNlKC9bMDE4XS9nLCBjID0+XHJcbiAgICAgICAgKGMgXiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50OEFycmF5KDEpKVswXSAmIDE1ID4+IGMgLyA0KS50b1N0cmluZygxNilcclxuICAgICk7XHJcbn1cclxuIiwidmFyIGluaXRpYWxpemVkO1xyXG52YXIgbWVkaWFBcHA7XHJcblxyXG52YXIgYnVzID0gbmV3IFZ1ZSgpO1xyXG5cclxuZnVuY3Rpb24gaW5pdGlhbGl6ZU1lZGlhQXBwbGljYXRpb24oZGlzcGxheU1lZGlhQXBwbGljYXRpb24sIG1lZGlhQXBwbGljYXRpb25VcmwsIHBhdGhCYXNlKSB7XHJcblxyXG4gICAgaWYgKGluaXRpYWxpemVkKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGluaXRpYWxpemVkID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoIW1lZGlhQXBwbGljYXRpb25VcmwpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdtZWRpYUFwcGxpY2F0aW9uVXJsIHZhcmlhYmxlIGlzIG5vdCBkZWZpbmVkJyk7XHJcbiAgICB9XHJcblxyXG4gICAgJC5hamF4KHtcclxuICAgICAgICB1cmw6IG1lZGlhQXBwbGljYXRpb25VcmwsXHJcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcclxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoY29udGVudCkge1xyXG4gICAgICAgICAgICAkKCcudGEtY29udGVudCcpLmFwcGVuZChjb250ZW50KTtcclxuXHJcbiAgICAgICAgICAgICQoZG9jdW1lbnQpLnRyaWdnZXIoJ21lZGlhYXBwbGljYXRpb246cmVhZHknKTtcclxuXHJcbiAgICAgICAgICAgIHZhciByb290ID0ge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogJCgnI3QtbWVkaWFMaWJyYXJ5JykudGV4dCgpLFxyXG4gICAgICAgICAgICAgICAgcGF0aDogJycsXHJcbiAgICAgICAgICAgICAgICBmb2xkZXI6ICcnLFxyXG4gICAgICAgICAgICAgICAgaXNEaXJlY3Rvcnk6IHRydWVcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIG1lZGlhQXBwID0gbmV3IFZ1ZSh7XHJcbiAgICAgICAgICAgICAgICBlbDogJyNtZWRpYUFwcCcsXHJcbiAgICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRGb2xkZXI6IHt9LFxyXG4gICAgICAgICAgICAgICAgICAgIG1lZGlhSXRlbXM6IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkTWVkaWFzOiBbXSxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvcnM6IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgIGRyYWdEcm9wVGh1bWJuYWlsOiBuZXcgSW1hZ2UoKSxcclxuICAgICAgICAgICAgICAgICAgICBzbWFsbFRodW1iczogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgZ3JpZFZpZXc6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIG1lZGlhRmlsdGVyOiAnJyxcclxuICAgICAgICAgICAgICAgICAgICBzb3J0Qnk6ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgIHNvcnRBc2M6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbXNJblBhZ2U6IFtdXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgY3JlYXRlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5kcmFnRHJvcFRodW1ibmFpbC5zcmMgPSAocGF0aEJhc2UgfHwgJycpICsgJy9PcmNoYXJkQ29yZS5NZWRpYS9JbWFnZXMvZHJhZy10aHVtYm5haWwucG5nJztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYnVzLiRvbignZm9sZGVyU2VsZWN0ZWQnLCBmdW5jdGlvbiAoZm9sZGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWRGb2xkZXIgPSBmb2xkZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJ1cy4kb24oJ2ZvbGRlckRlbGV0ZWQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0Um9vdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBidXMuJG9uKCdmb2xkZXJBZGRlZCcsIGZ1bmN0aW9uIChmb2xkZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZEZvbGRlciA9IGZvbGRlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9sZGVyLnNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYnVzLiRvbignbWVkaWFMaXN0TW92ZWQnLCBmdW5jdGlvbiAoZXJyb3JJbmZvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9hZEZvbGRlcihzZWxmLnNlbGVjdGVkRm9sZGVyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9ySW5mbykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvcnMucHVzaChlcnJvckluZm8pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJ1cy4kb24oJ21lZGlhUmVuYW1lZCcsIGZ1bmN0aW9uIChuZXdOYW1lLCBuZXdQYXRoLCBvbGRQYXRoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZWRpYSA9IHNlbGYubWVkaWFJdGVtcy5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLm1lZGlhUGF0aCA9PT0gb2xkUGF0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlbMF07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZWRpYS5tZWRpYVBhdGggPSBuZXdQYXRoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZWRpYS5uYW1lID0gbmV3TmFtZTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYnVzLiRvbignY3JlYXRlRm9sZGVyUmVxdWVzdGVkJywgZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY3JlYXRlRm9sZGVyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJ1cy4kb24oJ2RlbGV0ZUZvbGRlclJlcXVlc3RlZCcsIGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRlbGV0ZUZvbGRlcigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBjb21tb24gaGFuZGxlcnMgZm9yIGFjdGlvbnMgaW4gYm90aCBncmlkIGFuZCB0YWJsZSB2aWV3LlxyXG4gICAgICAgICAgICAgICAgICAgIGJ1cy4kb24oJ3NvcnRDaGFuZ2VSZXF1ZXN0ZWQnLCBmdW5jdGlvbiAobmV3U29ydCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNoYW5nZVNvcnQobmV3U29ydCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJ1cy4kb24oJ21lZGlhVG9nZ2xlUmVxdWVzdGVkJywgZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudG9nZ2xlU2VsZWN0aW9uT2ZNZWRpYShtZWRpYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJ1cy4kb24oJ3JlbmFtZU1lZGlhUmVxdWVzdGVkJywgZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVuYW1lTWVkaWEobWVkaWEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBidXMuJG9uKCdkZWxldGVNZWRpYVJlcXVlc3RlZCcsIGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRlbGV0ZU1lZGlhSXRlbShtZWRpYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJ1cy4kb24oJ21lZGlhRHJhZ1N0YXJ0UmVxdWVzdGVkJywgZnVuY3Rpb24gKG1lZGlhLCBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlRHJhZ1N0YXJ0KG1lZGlhLCBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZXIgZm9yIHBhZ2VyIGV2ZW50c1xyXG4gICAgICAgICAgICAgICAgICAgIGJ1cy4kb24oJ3BhZ2VyRXZlbnQnLCBmdW5jdGlvbiAoaXRlbXNJblBhZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pdGVtc0luUGFnZSA9IGl0ZW1zSW5QYWdlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkTWVkaWFzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ21lZGlhQXBwbGljYXRpb25QcmVmcycpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWRGb2xkZXIgPSByb290O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRQcmVmcyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ21lZGlhQXBwbGljYXRpb25QcmVmcycpKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBjb21wdXRlZDoge1xyXG4gICAgICAgICAgICAgICAgICAgIGlzSG9tZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEZvbGRlciA9PSByb290O1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50czogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcCA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRGb2xkZXIgPSB0aGlzLnNlbGVjdGVkRm9sZGVyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocGFyZW50Rm9sZGVyICYmIHBhcmVudEZvbGRlci5wYXRoICE9ICcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLnVuc2hpZnQocGFyZW50Rm9sZGVyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudEZvbGRlciA9IHBhcmVudEZvbGRlci5wYXJlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHA7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICByb290OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByb290O1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRNZWRpYUl0ZW1zOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWRNZWRpYXMgPSBbXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaWx0ZXJlZCA9IHNlbGYubWVkaWFJdGVtcy5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLm5hbWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKHNlbGYubWVkaWFGaWx0ZXIudG9Mb3dlckNhc2UoKSkgPiAtIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChzZWxmLnNvcnRCeSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnc2l6ZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWQuc29ydChmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zb3J0QXNjID8gYS5zaXplIC0gYi5zaXplIDogYi5zaXplIC0gYS5zaXplO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWltZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWQuc29ydChmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zb3J0QXNjID8gYS5taW1lLnRvTG93ZXJDYXNlKCkubG9jYWxlQ29tcGFyZShiLm1pbWUudG9Mb3dlckNhc2UoKSkgOiBiLm1pbWUudG9Mb3dlckNhc2UoKS5sb2NhbGVDb21wYXJlKGEubWltZS50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2xhc3RNb2RpZnknOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuc29ydEFzYyA/IGEubGFzdE1vZGlmeSAtIGIubGFzdE1vZGlmeSA6IGIubGFzdE1vZGlmeSAtIGEubGFzdE1vZGlmeTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWQuc29ydChmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zb3J0QXNjID8gYS5uYW1lLnRvTG93ZXJDYXNlKCkubG9jYWxlQ29tcGFyZShiLm5hbWUudG9Mb3dlckNhc2UoKSkgOiBiLm5hbWUudG9Mb3dlckNhc2UoKS5sb2NhbGVDb21wYXJlKGEubmFtZS50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpbHRlcmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgaGlkZGVuQ291bnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMubWVkaWFJdGVtcy5sZW5ndGggLSB0aGlzLmZpbHRlcmVkTWVkaWFJdGVtcy5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB0aHVtYlNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc21hbGxUaHVtYnMgPyAxMDAgOiAyNDA7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UHJlZnM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtYWxsVGh1bWJzOiB0aGlzLnNtYWxsVGh1bWJzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkRm9sZGVyOiB0aGlzLnNlbGVjdGVkRm9sZGVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyaWRWaWV3OiB0aGlzLmdyaWRWaWV3XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uIChuZXdQcmVmcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFuZXdQcmVmcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNtYWxsVGh1bWJzID0gbmV3UHJlZnMuc21hbGxUaHVtYnM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRm9sZGVyID0gbmV3UHJlZnMuc2VsZWN0ZWRGb2xkZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWRWaWV3ID0gbmV3UHJlZnMuZ3JpZFZpZXc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgd2F0Y2g6IHtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UHJlZnM6IGZ1bmN0aW9uIChuZXdQcmVmcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnbWVkaWFBcHBsaWNhdGlvblByZWZzJywgSlNPTi5zdHJpbmdpZnkobmV3UHJlZnMpKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkRm9sZGVyOiBmdW5jdGlvbiAobmV3Rm9sZGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWFGaWx0ZXIgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZvbGRlciA9IG5ld0ZvbGRlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkRm9sZGVyKG5ld0ZvbGRlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kcmVmcy5yb290Rm9sZGVyLnRvZ2dsZSgpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIG1ldGhvZHM6IHtcclxuICAgICAgICAgICAgICAgICAgICB1cGxvYWRVcmw6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zZWxlY3RlZEZvbGRlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1cmxWYWx1ZSA9ICQoJyN1cGxvYWRGaWxlcycpLnZhbCgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVybFZhbHVlICsgKHVybFZhbHVlLmluZGV4T2YoJz8nKSA9PSAtMSA/ICc/JyA6ICcmJykgKyBcInBhdGg9XCIgKyBlbmNvZGVVUklDb21wb25lbnQodGhpcy5zZWxlY3RlZEZvbGRlci5wYXRoKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdFJvb3Q6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZvbGRlciA9IHRoaXMucm9vdDtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGxvYWRGb2xkZXI6IGZ1bmN0aW9uIChmb2xkZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvcnMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZWRpYVVybCA9ICQoJyNnZXRNZWRpYUl0ZW1zVXJsJykudmFsKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGZvbGRlci5wYXRoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogbWVkaWFVcmwgKyAobWVkaWFVcmwuaW5kZXhPZignPycpID09IC0xID8gJz8nIDogJyYnKSArIFwicGF0aD1cIiArIGVuY29kZVVSSUNvbXBvbmVudChmb2xkZXIucGF0aCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5vcGVuID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tZWRpYUl0ZW1zID0gZGF0YTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkTWVkaWFzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zb3J0QnkgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNvcnRBc2MgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnZXJyb3IgbG9hZGluZyBmb2xkZXI6JyArIGZvbGRlci5wYXRoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdFJvb3QoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RBbGw6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZmlsdGVyZWRNZWRpYUl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWFzLnB1c2godGhpcy5maWx0ZXJlZE1lZGlhSXRlbXNbaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB1blNlbGVjdEFsbDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWFzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBpbnZlcnRTZWxlY3Rpb246IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRlbXAgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmZpbHRlcmVkTWVkaWFJdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNNZWRpYVNlbGVjdGVkKHRoaXMuZmlsdGVyZWRNZWRpYUl0ZW1zW2ldKSA9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAucHVzaCh0aGlzLmZpbHRlcmVkTWVkaWFJdGVtc1tpXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhcyA9IHRlbXA7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB0b2dnbGVTZWxlY3Rpb25PZk1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNNZWRpYVNlbGVjdGVkKG1lZGlhKSA9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWFzLnNwbGljZSh0aGlzLnNlbGVjdGVkTWVkaWFzLmluZGV4T2YobWVkaWEpLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYXMucHVzaChtZWRpYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGlzTWVkaWFTZWxlY3RlZDogZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSB0aGlzLnNlbGVjdGVkTWVkaWFzLnNvbWUoZnVuY3Rpb24gKGVsZW1lbnQsIGluZGV4LCBhcnJheSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQudXJsLnRvTG93ZXJDYXNlKCkgPT09IG1lZGlhLnVybC50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZUZvbGRlcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9sZGVyID0gdGhpcy5zZWxlY3RlZEZvbGRlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgcm9vdCBmb2xkZXIgY2FuJ3QgYmUgZGVsZXRlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9sZGVyID09IHRoaXMucm9vdC5tb2RlbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtRGlhbG9nKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLiQoXCIjZGVsZXRlRm9sZGVyXCIpLmRhdGEoKSwgY2FsbGJhY2s6IGZ1bmN0aW9uIChyZXNwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3ApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJCgnI2RlbGV0ZUZvbGRlclVybCcpLnZhbCgpICsgXCI/cGF0aD1cIiArIGVuY29kZVVSSUNvbXBvbmVudChmb2xkZXIucGF0aCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX1JlcXVlc3RWZXJpZmljYXRpb25Ub2tlbjogJChcImlucHV0W25hbWU9J19fUmVxdWVzdFZlcmlmaWNhdGlvblRva2VuJ11cIikudmFsKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1cy4kZW1pdCgnZGVsZXRlRm9sZGVyJywgZm9sZGVyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvci5yZXNwb25zZVRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlRm9sZGVyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJyNjcmVhdGVGb2xkZXJNb2RhbC1lcnJvcnMnKS5lbXB0eSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbW9kYWwgPSBib290c3RyYXAuTW9kYWwuZ2V0T3JDcmVhdGVJbnN0YW5jZSgkKCcjY3JlYXRlRm9sZGVyTW9kYWwnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGFsLnNob3coKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnI2NyZWF0ZUZvbGRlck1vZGFsIC5tb2RhbC1ib2R5IGlucHV0JykudmFsKCcnKS5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgcmVuYW1lTWVkaWE6IGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKCcjcmVuYW1lTWVkaWFNb2RhbC1lcnJvcnMnKS5lbXB0eSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbW9kYWwgPSBib290c3RyYXAuTW9kYWwuZ2V0T3JDcmVhdGVJbnN0YW5jZSgkKCcjcmVuYW1lTWVkaWFNb2RhbCcpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW9kYWwuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKCcjb2xkLWl0ZW0tbmFtZScpLnZhbChtZWRpYS5uYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnI3JlbmFtZU1lZGlhTW9kYWwgLm1vZGFsLWJvZHkgaW5wdXQnKS52YWwobWVkaWEubmFtZSkuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdEFuZERlbGV0ZU1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWxldGVNZWRpYSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlTWVkaWFMaXN0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZWRpYUxpc3QgPSB0aGlzLnNlbGVjdGVkTWVkaWFzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVkaWFMaXN0Lmxlbmd0aCA8IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlybURpYWxvZyh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4kKFwiI2RlbGV0ZU1lZGlhXCIpLmRhdGEoKSwgY2FsbGJhY2s6IGZ1bmN0aW9uIChyZXNwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3ApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhdGhzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVkaWFMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRocy5wdXNoKG1lZGlhTGlzdFtpXS5tZWRpYVBhdGgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKCcjZGVsZXRlTWVkaWFMaXN0VXJsJykudmFsKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX1JlcXVlc3RWZXJpZmljYXRpb25Ub2tlbjogJChcImlucHV0W25hbWU9J19fUmVxdWVzdFZlcmlmaWNhdGlvblRva2VuJ11cIikudmFsKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aHM6IHBhdGhzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbGYuc2VsZWN0ZWRNZWRpYXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gc2VsZi5tZWRpYUl0ZW1zICYmIHNlbGYubWVkaWFJdGVtcy5pbmRleE9mKHNlbGYuc2VsZWN0ZWRNZWRpYXNbaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tZWRpYUl0ZW1zLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXMuJGVtaXQoJ21lZGlhRGVsZXRlZCcsIHNlbGYuc2VsZWN0ZWRNZWRpYXNbaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWRNZWRpYXMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvci5yZXNwb25zZVRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlTWVkaWFJdGVtOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm1EaWFsb2coe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uJChcIiNkZWxldGVNZWRpYVwiKS5kYXRhKCksIGNhbGxiYWNrOiBmdW5jdGlvbiAocmVzcCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoJyNkZWxldGVNZWRpYVVybCcpLnZhbCgpICsgXCI/cGF0aD1cIiArIGVuY29kZVVSSUNvbXBvbmVudChtZWRpYS5tZWRpYVBhdGgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW46ICQoXCJpbnB1dFtuYW1lPSdfX1JlcXVlc3RWZXJpZmljYXRpb25Ub2tlbiddXCIpLnZhbCgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBzZWxmLm1lZGlhSXRlbXMgJiYgc2VsZi5tZWRpYUl0ZW1zLmluZGV4T2YobWVkaWEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tZWRpYUl0ZW1zLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1cy4kZW1pdCgnbWVkaWFEZWxldGVkJywgbWVkaWEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3NlbGYuc2VsZWN0ZWRNZWRpYSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IucmVzcG9uc2VUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZURyYWdTdGFydDogZnVuY3Rpb24gKG1lZGlhLCBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZpcnN0IHBhcnQgb2YgbW92ZSBtZWRpYSB0byBmb2xkZXI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByZXBhcmUgdGhlIGRhdGEgdGhhdCB3aWxsIGJlIGhhbmRsZWQgYnkgdGhlIGZvbGRlciBjb21wb25lbnQgb24gZHJvcCBldmVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWVkaWFOYW1lcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWFzLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhTmFtZXMucHVzaChpdGVtLm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluIGNhc2UgdGhlIHVzZXIgZHJhZ3MgYW4gdW5zZWxlY3RlZCBpdGVtLCB3ZSBzZWxlY3QgaXQgZmlyc3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNNZWRpYVNlbGVjdGVkKG1lZGlhKSA9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFOYW1lcy5wdXNoKG1lZGlhLm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhcy5wdXNoKG1lZGlhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgZS5kYXRhVHJhbnNmZXIuc2V0RGF0YSgnbWVkaWFOYW1lcycsIEpTT04uc3RyaW5naWZ5KG1lZGlhTmFtZXMpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZS5kYXRhVHJhbnNmZXIuc2V0RGF0YSgnc291cmNlRm9sZGVyJywgdGhpcy5zZWxlY3RlZEZvbGRlci5wYXRoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZS5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlKHRoaXMuZHJhZ0Ryb3BUaHVtYm5haWwsIDEwLCAxMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuZGF0YVRyYW5zZmVyLmVmZmVjdEFsbG93ZWQgPSAnbW92ZSc7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVTY3JvbGxXaGlsZURyYWc6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLmNsaWVudFkgPCAxNTApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxCeSgwLCAtMTApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5jbGllbnRZID4gd2luZG93LmlubmVySGVpZ2h0IC0gMTAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2Nyb2xsQnkoMCwgMTApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBjaGFuZ2VTb3J0OiBmdW5jdGlvbiAobmV3U29ydCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zb3J0QnkgPT0gbmV3U29ydCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3J0QXNjID0gIXRoaXMuc29ydEFzYztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc29ydEFzYyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNvcnRCeSA9IG5ld1NvcnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgJCgnI2NyZWF0ZS1mb2xkZXItbmFtZScpLmtleXByZXNzKGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIga2V5ID0gZS53aGljaDtcclxuICAgICAgICAgICAgICAgIGlmIChrZXkgPT0gMTMpIHsgIC8vIHRoZSBlbnRlciBrZXkgY29kZVxyXG4gICAgICAgICAgICAgICAgICAgICQoJyNtb2RhbEZvb3Rlck9rJykuY2xpY2soKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgJCgnI21vZGFsRm9vdGVyT2snKS5vbignY2xpY2snLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIG5hbWUgPSAkKCcjY3JlYXRlLWZvbGRlci1uYW1lJykudmFsKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgICAgICB1cmw6ICQoJyNjcmVhdGVGb2xkZXJVcmwnKS52YWwoKSArIFwiP3BhdGg9XCIgKyBlbmNvZGVVUklDb21wb25lbnQobWVkaWFBcHAuc2VsZWN0ZWRGb2xkZXIucGF0aCkgKyBcIiZuYW1lPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KG5hbWUpLFxyXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW46ICQoXCJpbnB1dFtuYW1lPSdfX1JlcXVlc3RWZXJpZmljYXRpb25Ub2tlbiddXCIpLnZhbCgpXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBidXMuJGVtaXQoJ2FkZEZvbGRlcicsIG1lZGlhQXBwLnNlbGVjdGVkRm9sZGVyLCBkYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1vZGFsID0gYm9vdHN0cmFwLk1vZGFsLmdldE9yQ3JlYXRlSW5zdGFuY2UoJCgnI2NyZWF0ZUZvbGRlck1vZGFsJykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RhbC5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJyNjcmVhdGVGb2xkZXJNb2RhbC1lcnJvcnMnKS5lbXB0eSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3JNZXNzYWdlID0gSlNPTi5wYXJzZShlcnJvci5yZXNwb25zZVRleHQpLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKCc8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyXCIgcm9sZT1cImFsZXJ0XCI+PC9kaXY+JykudGV4dChlcnJvck1lc3NhZ2UpLmFwcGVuZFRvKCQoJyNjcmVhdGVGb2xkZXJNb2RhbC1lcnJvcnMnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgJCgnI3JlbmFtZU1lZGlhTW9kYWxGb290ZXJPaycpLm9uKCdjbGljaycsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbmV3TmFtZSA9ICQoJyNuZXctaXRlbS1uYW1lJykudmFsKCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgb2xkTmFtZSA9ICQoJyNvbGQtaXRlbS1uYW1lJykudmFsKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG5ld05hbWUgPT09IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRGb2xkZXIgPSBtZWRpYUFwcC5zZWxlY3RlZEZvbGRlci5wYXRoICsgXCIvXCI7XHJcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudEZvbGRlciA9PT0gXCIvXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Rm9sZGVyID0gXCJcIjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgbmV3UGF0aCA9IGN1cnJlbnRGb2xkZXIgKyBuZXdOYW1lO1xyXG4gICAgICAgICAgICAgICAgdmFyIG9sZFBhdGggPSBjdXJyZW50Rm9sZGVyICsgb2xkTmFtZTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAobmV3UGF0aC50b0xvd2VyQ2FzZSgpID09PSBvbGRQYXRoLnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbW9kYWwgPSBib290c3RyYXAuTW9kYWwuZ2V0T3JDcmVhdGVJbnN0YW5jZSgkKCcjcmVuYW1lTWVkaWFNb2RhbCcpKTtcclxuICAgICAgICAgICAgICAgICAgICBtb2RhbC5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAkKCcjcmVuYW1lTWVkaWFVcmwnKS52YWwoKSArIFwiP29sZFBhdGg9XCIgKyBlbmNvZGVVUklDb21wb25lbnQob2xkUGF0aCkgKyBcIiZuZXdQYXRoPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KG5ld1BhdGgpLFxyXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW46ICQoXCJpbnB1dFtuYW1lPSdfX1JlcXVlc3RWZXJpZmljYXRpb25Ub2tlbiddXCIpLnZhbCgpXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbW9kYWwgPSBib290c3RyYXAuTW9kYWwuZ2V0T3JDcmVhdGVJbnN0YW5jZSgkKCcjcmVuYW1lTWVkaWFNb2RhbCcpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW9kYWwuaGlkZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBidXMuJGVtaXQoJ21lZGlhUmVuYW1lZCcsIG5ld05hbWUsIG5ld1BhdGgsIG9sZFBhdGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKCcjcmVuYW1lTWVkaWFNb2RhbC1lcnJvcnMnKS5lbXB0eSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3JNZXNzYWdlID0gSlNPTi5wYXJzZShlcnJvci5yZXNwb25zZVRleHQpLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKCc8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyXCIgcm9sZT1cImFsZXJ0XCI+PC9kaXY+JykudGV4dChlcnJvck1lc3NhZ2UpLmFwcGVuZFRvKCQoJyNyZW5hbWVNZWRpYU1vZGFsLWVycm9ycycpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoZGlzcGxheU1lZGlhQXBwbGljYXRpb24pIHtcclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtZWRpYUFwcCcpLnN0eWxlLmRpc3BsYXkgPSBcIlwiO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAkKGRvY3VtZW50KS50cmlnZ2VyKCdtZWRpYUFwcDpyZWFkeScpO1xyXG5cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvci5yZXNwb25zZVRleHQpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcbiIsIiQoZG9jdW1lbnQpLm9uKCdtZWRpYUFwcDpyZWFkeScsIGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBjaHVua2VkRmlsZVVwbG9hZElkID0gcmFuZG9tVVVJRCgpO1xyXG5cclxuICAgICQoJyNmaWxldXBsb2FkJylcclxuICAgICAgICAuZmlsZXVwbG9hZCh7XHJcbiAgICAgICAgICAgIGRyb3Bab25lOiAkKCcjbWVkaWFBcHAnKSxcclxuICAgICAgICAgICAgbGltaXRDb25jdXJyZW50VXBsb2FkczogMjAsXHJcbiAgICAgICAgICAgIGRhdGFUeXBlOiAnanNvbicsXHJcbiAgICAgICAgICAgIHVybDogJCgnI3VwbG9hZEZpbGVzJykudmFsKCksXHJcbiAgICAgICAgICAgIG1heENodW5rU2l6ZTogTnVtYmVyKCQoJyNtYXhVcGxvYWRDaHVua1NpemUnKS52YWwoKSB8fCAwKSxcclxuICAgICAgICAgICAgZm9ybURhdGE6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHZhciBhbnRpRm9yZ2VyeVRva2VuID0gJChcImlucHV0W25hbWU9X19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW5dXCIpLnZhbCgpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAncGF0aCcsIHZhbHVlOiBtZWRpYUFwcC5zZWxlY3RlZEZvbGRlci5wYXRoIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW4nLCB2YWx1ZTogYW50aUZvcmdlcnlUb2tlbiB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ19fY2h1bmtlZEZpbGVVcGxvYWRJZCcsIHZhbHVlOiBjaHVua2VkRmlsZVVwbG9hZElkIH0sXHJcbiAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGRvbmU6IGZ1bmN0aW9uIChlLCBkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAkLmVhY2goZGF0YS5yZXN1bHQuZmlsZXMsIGZ1bmN0aW9uIChpbmRleCwgZmlsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZmlsZS5lcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZWRpYUFwcC5tZWRpYUl0ZW1zLnB1c2goZmlsZSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLm9uKCdmaWxldXBsb2FkY2h1bmtiZWZvcmVzZW5kJywgKGUsIG9wdGlvbnMpID0+IHtcclxuICAgICAgICAgICAgbGV0IGZpbGUgPSBvcHRpb25zLmZpbGVzWzBdO1xyXG4gICAgICAgICAgICAvLyBIZXJlIHdlIHJlcGxhY2UgdGhlIGJsb2Igd2l0aCBhIEZpbGUgb2JqZWN0IHRvIGVuc3VyZSB0aGUgZmlsZSBuYW1lIGFuZCBvdGhlcnMgYXJlIHByZXNlcnZlZCBmb3IgdGhlIGJhY2tlbmQuXHJcbiAgICAgICAgICAgIG9wdGlvbnMuYmxvYiA9IG5ldyBGaWxlKFxyXG4gICAgICAgICAgICAgICAgW29wdGlvbnMuYmxvYl0sXHJcbiAgICAgICAgICAgICAgICBmaWxlLm5hbWUsXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogZmlsZS50eXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIGxhc3RNb2RpZmllZDogZmlsZS5sYXN0TW9kaWZpZWQsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxufSk7XHJcblxyXG5cclxuJChkb2N1bWVudCkuYmluZCgnZHJhZ292ZXInLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgdmFyIGR0ID0gZS5vcmlnaW5hbEV2ZW50LmRhdGFUcmFuc2ZlcjtcclxuICAgIGlmIChkdC50eXBlcyAmJiAoZHQudHlwZXMuaW5kZXhPZiA/IGR0LnR5cGVzLmluZGV4T2YoJ0ZpbGVzJykgIT0gLTEgOiBkdC50eXBlcy5jb250YWlucygnRmlsZXMnKSkpIHtcclxuICAgICAgICB2YXIgZHJvcFpvbmUgPSAkKCcjY3VzdG9tZHJvcHpvbmUnKSxcclxuICAgICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5kcm9wWm9uZVRpbWVvdXQ7XHJcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGRyb3Bab25lLmFkZENsYXNzKCdpbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgaG92ZXJlZERyb3Bab25lID0gJChlLnRhcmdldCkuY2xvc2VzdChkcm9wWm9uZSk7XHJcbiAgICAgICAgd2luZG93LmRyb3Bab25lVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB3aW5kb3cuZHJvcFpvbmVUaW1lb3V0ID0gbnVsbDtcclxuICAgICAgICAgICAgZHJvcFpvbmUucmVtb3ZlQ2xhc3MoJ2luJyk7XHJcbiAgICAgICAgfSwgMTAwKTtcclxuICAgIH1cclxufSk7XHJcbiIsIi8vIDxmb2xkZXI+IGNvbXBvbmVudFxyXG5WdWUuY29tcG9uZW50KCdmb2xkZXInLCB7XHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgICAgIDxsaSA6Y2xhc3M9XCJ7c2VsZWN0ZWQ6IGlzU2VsZWN0ZWR9XCIgXHJcbiAgICAgICAgICAgICAgICB2LW9uOmRyYWdsZWF2ZS5wcmV2ZW50ID0gXCJoYW5kbGVEcmFnTGVhdmUoJGV2ZW50KTtcIiBcclxuICAgICAgICAgICAgICAgIHYtb246ZHJhZ292ZXIucHJldmVudC5zdG9wPVwiaGFuZGxlRHJhZ092ZXIoJGV2ZW50KTtcIiBcclxuICAgICAgICAgICAgICAgIHYtb246ZHJvcC5wcmV2ZW50LnN0b3AgPSBcIm1vdmVNZWRpYVRvRm9sZGVyKG1vZGVsLCAkZXZlbnQpXCIgPlxyXG4gICAgICAgICAgICA8ZGl2IDpjbGFzcz1cIntmb2xkZXJob3ZlcmVkOiBpc0hvdmVyZWQgLCB0cmVlcm9vdDogbGV2ZWwgPT0gMX1cIiA+XHJcbiAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgOnN0eWxlPVwieyBwYWRkaW5nJHtkb2N1bWVudC5kaXIgPT0gXCJsdHJcIiA/IFwiTGVmdFwiIDogXCJSaWdodFwifTpwYWRkaW5nICsgJ3B4JyB9XCIgdi1vbjpjbGljaz1cInNlbGVjdFwiICBkcmFnZ2FibGU9XCJmYWxzZVwiIGNsYXNzPVwiZm9sZGVyLW1lbnUtaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiB2LW9uOmNsaWNrLnN0b3A9XCJ0b2dnbGVcIiBjbGFzcz1cImV4cGFuZFwiIDpjbGFzcz1cIntvcGVuZWQ6IG9wZW4sIGNsb3NlZDogIW9wZW4sIGVtcHR5OiBlbXB0eX1cIj48aSB2LWlmPVwib3BlblwiIGNsYXNzPVwiZmEtc29saWQgZmEtY2hldnJvbi0ke2RvY3VtZW50LmRpciA9PSBcImx0clwiID8gXCJyaWdodFwiIDogXCJsZWZ0XCJ9XCI+PC9pPjwvc3Bhbj4gXHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb2xkZXItbmFtZSBtcy0yXCI+e3ttb2RlbC5uYW1lfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIGZvbGRlci1hY3Rpb25zXCIgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdi1jbG9hayBocmVmPVwiamF2YXNjcmlwdDo7XCIgY2xhc3M9XCJidG4gYnRuLXNtXCIgdi1vbjpjbGljaz1cImNyZWF0ZUZvbGRlclwiIHYtaWY9XCJpc1NlbGVjdGVkIHx8IGlzUm9vdFwiPjxpIGNsYXNzPVwiZmEtc29saWQgZmEtcGx1c1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB2LWNsb2FrIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiBjbGFzcz1cImJ0biBidG4tc21cIiB2LW9uOmNsaWNrPVwiZGVsZXRlRm9sZGVyXCIgdi1pZj1cImlzU2VsZWN0ZWQgJiYgIWlzUm9vdFwiPjxpIGNsYXNzPVwiZmEtc29saWQgZmEtdHJhc2hcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9hPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG9sIHYtc2hvdz1cIm9wZW5cIj5cclxuICAgICAgICAgICAgICAgIDxmb2xkZXIgdi1mb3I9XCJmb2xkZXIgaW4gY2hpbGRyZW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6a2V5PVwiZm9sZGVyLnBhdGhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6bW9kZWw9XCJmb2xkZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6c2VsZWN0ZWQtaW4tbWVkaWEtYXBwPVwic2VsZWN0ZWRJbk1lZGlhQXBwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgOmxldmVsPVwibGV2ZWwgKyAxXCI+XHJcbiAgICAgICAgICAgICAgICA8L2ZvbGRlcj5cclxuICAgICAgICAgICAgPC9vbD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIGAsXHJcbiAgICBwcm9wczoge1xyXG4gICAgICAgIG1vZGVsOiBPYmplY3QsXHJcbiAgICAgICAgc2VsZWN0ZWRJbk1lZGlhQXBwOiBPYmplY3QsXHJcbiAgICAgICAgbGV2ZWw6IE51bWJlclxyXG4gICAgfSxcclxuICAgIGRhdGE6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBvcGVuOiBmYWxzZSxcclxuICAgICAgICAgICAgY2hpbGRyZW46IG51bGwsIC8vIG5vdCBpbml0aWFsaXplZCBzdGF0ZSAoZm9yIGxhenktbG9hZGluZylcclxuICAgICAgICAgICAgcGFyZW50OiBudWxsLFxyXG4gICAgICAgICAgICBpc0hvdmVyZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBwYWRkaW5nOiAwXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIGNvbXB1dGVkOiB7XHJcbiAgICAgICAgZW1wdHk6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuICF0aGlzLmNoaWxkcmVuIHx8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09IDA7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBpc1NlbGVjdGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAodGhpcy5zZWxlY3RlZEluTWVkaWFBcHAubmFtZSA9PSB0aGlzLm1vZGVsLm5hbWUpICYmICh0aGlzLnNlbGVjdGVkSW5NZWRpYUFwcC5wYXRoID09IHRoaXMubW9kZWwucGF0aCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBpc1Jvb3Q6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kZWwucGF0aCA9PT0gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIG1vdW50ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoKHRoaXMuaXNSb290ID09IGZhbHNlKSAmJiAodGhpcy5pc0FuY2VzdG9yT2ZTZWxlY3RlZEZvbGRlcigpKSl7XHJcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBhZGRpbmcgPSB0aGlzLmxldmVsIDwgMyA/ICAxNiA6IDE2ICsgKHRoaXMubGV2ZWwgKiA4KTtcclxuICAgIH0sXHJcbiAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGJ1cy4kb24oJ2RlbGV0ZUZvbGRlcicsIGZ1bmN0aW9uIChmb2xkZXIpIHtcclxuICAgICAgICAgICAgaWYgKHNlbGYuY2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IHNlbGYuY2hpbGRyZW4gJiYgc2VsZi5jaGlsZHJlbi5pbmRleE9mKGZvbGRlcilcclxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDEpXHJcbiAgICAgICAgICAgICAgICAgICAgYnVzLiRlbWl0KCdmb2xkZXJEZWxldGVkJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgYnVzLiRvbignYWRkRm9sZGVyJywgZnVuY3Rpb24gKHRhcmdldCwgZm9sZGVyKSB7XHJcbiAgICAgICAgICAgIGlmIChzZWxmLm1vZGVsID09IHRhcmdldCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuY2hpbGRyZW4gIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZWxmLmNoaWxkcmVuLnB1c2goZm9sZGVyKTtcclxuICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBmb2xkZXIucGFyZW50ID0gc2VsZi5tb2RlbDtcclxuICAgICAgICAgICAgICAgIGJ1cy4kZW1pdCgnZm9sZGVyQWRkZWQnLCBmb2xkZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9LFxyXG4gICAgbWV0aG9kczoge1xyXG4gICAgICAgIGlzQW5jZXN0b3JPZlNlbGVjdGVkRm9sZGVyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHBhcmVudEZvbGRlciA9IG1lZGlhQXBwLnNlbGVjdGVkRm9sZGVyO1xyXG4gICAgICAgICAgICB3aGlsZSAocGFyZW50Rm9sZGVyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50Rm9sZGVyLnBhdGggPT0gdGhpcy5tb2RlbC5wYXRoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHBhcmVudEZvbGRlciA9IHBhcmVudEZvbGRlci5wYXJlbnQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRvZ2dsZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLm9wZW4gPSAhdGhpcy5vcGVuO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5vcGVuICYmICF0aGlzLmNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRDaGlsZHJlbigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZWxlY3Q6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdmb2xkZXJTZWxlY3RlZCcsIHRoaXMubW9kZWwpO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRDaGlsZHJlbigpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY3JlYXRlRm9sZGVyOiBmdW5jdGlvbiAoKSB7ICAgICAgICAgICBcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdjcmVhdGVGb2xkZXJSZXF1ZXN0ZWQnKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRlbGV0ZUZvbGRlcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBidXMuJGVtaXQoJ2RlbGV0ZUZvbGRlclJlcXVlc3RlZCcpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbG9hZENoaWxkcmVuOiBmdW5jdGlvbiAoKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICAgICAgaWYgKHRoaXMub3BlbiA9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgdXJsOiAkKCcjZ2V0Rm9sZGVyc1VybCcpLnZhbCgpICsgXCI/cGF0aD1cIiArIGVuY29kZVVSSUNvbXBvbmVudChzZWxmLm1vZGVsLnBhdGgpLFxyXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcclxuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGlsZHJlbiA9IGRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGMucGFyZW50ID0gc2VsZi5tb2RlbDtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZW10cHkgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yLnJlc3BvbnNlVGV4dCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgaGFuZGxlRHJhZ092ZXI6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNIb3ZlcmVkID0gdHJ1ZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGhhbmRsZURyYWdMZWF2ZTogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgdGhpcy5pc0hvdmVyZWQgPSBmYWxzZTsgICAgICAgICAgICBcclxuICAgICAgICB9LFxyXG4gICAgICAgIG1vdmVNZWRpYVRvRm9sZGVyOiBmdW5jdGlvbiAoZm9sZGVyLCBlKSB7XHJcblxyXG4gICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgICAgIHNlbGYuaXNIb3ZlcmVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICB2YXIgbWVkaWFOYW1lcyA9IEpTT04ucGFyc2UoZS5kYXRhVHJhbnNmZXIuZ2V0RGF0YSgnbWVkaWFOYW1lcycpKTsgXHJcblxyXG4gICAgICAgICAgICBpZiAobWVkaWFOYW1lcy5sZW5ndGggPCAxKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBzb3VyY2VGb2xkZXIgPSBlLmRhdGFUcmFuc2Zlci5nZXREYXRhKCdzb3VyY2VGb2xkZXInKTtcclxuICAgICAgICAgICAgdmFyIHRhcmdldEZvbGRlciA9IGZvbGRlci5wYXRoO1xyXG5cclxuICAgICAgICAgICAgaWYgKHNvdXJjZUZvbGRlciA9PT0gJycpIHtcclxuICAgICAgICAgICAgICAgIHNvdXJjZUZvbGRlciA9ICdyb290JztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRhcmdldEZvbGRlciA9PT0gJycpIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldEZvbGRlciA9ICdyb290JztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHNvdXJjZUZvbGRlciA9PT0gdGFyZ2V0Rm9sZGVyKSB7XHJcbiAgICAgICAgICAgICAgICBhbGVydCgkKCcjc2FtZUZvbGRlck1lc3NhZ2UnKS52YWwoKSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbmZpcm1EaWFsb2coey4uLiQoXCIjbW92ZU1lZGlhXCIpLmRhdGEoKSwgY2FsbGJhY2s6IGZ1bmN0aW9uIChyZXNwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzcCkge1xyXG4gICAgICAgICAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJCgnI21vdmVNZWRpYUxpc3RVcmwnKS52YWwoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fUmVxdWVzdFZlcmlmaWNhdGlvblRva2VuOiAkKFwiaW5wdXRbbmFtZT0nX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW4nXVwiKS52YWwoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhTmFtZXM6IG1lZGlhTmFtZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VGb2xkZXI6IHNvdXJjZUZvbGRlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldEZvbGRlcjogdGFyZ2V0Rm9sZGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1cy4kZW1pdCgnbWVkaWFMaXN0TW92ZWQnKTsgLy8gTWVkaWFBcHAgd2lsbCBsaXN0ZW4gdG8gdGhpcywgYW5kIHRoZW4gaXQgd2lsbCByZWxvYWQgcGFnZSBzbyB0aGUgbW92ZWQgbWVkaWFzIHdvbid0IGJlIHRoZXJlIGFueW1vcmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvci5yZXNwb25zZVRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzLiRlbWl0KCdtZWRpYUxpc3RNb3ZlZCcsIGVycm9yLnJlc3BvbnNlVGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfX0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcbn0pO1xyXG4iLCIvLyA8bWVkaWEtaXRlbXMtZ3JpZD4gY29tcG9uZW50XHJcblZ1ZS5jb21wb25lbnQoJ21lZGlhLWl0ZW1zLWdyaWQnLCB7XHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgICAgIDxvbCBjbGFzcz1cInJvdyBtZWRpYS1pdGVtcy1ncmlkXCI+XHJcbiAgICAgICAgICAgICAgICA8bGkgdi1mb3I9XCJtZWRpYSBpbiBmaWx0ZXJlZE1lZGlhSXRlbXNcIlxyXG4gICAgICAgICAgICAgICAgICAgIDprZXk9XCJtZWRpYS5uYW1lXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZWRpYS1pdGVtIG1lZGlhLWNvbnRhaW5lci1tYWluLWxpc3QtaXRlbSBjYXJkIHAtMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgOnN0eWxlPVwie3dpZHRoOiB0aHVtYlNpemUgKyAyICsgJ3B4J31cIlxyXG4gICAgICAgICAgICAgICAgICAgIDpjbGFzcz1cIntzZWxlY3RlZDogaXNNZWRpYVNlbGVjdGVkKG1lZGlhKX1cIlxyXG4gICAgICAgICAgICAgICAgICAgIHYtb246Y2xpY2suc3RvcD1cInRvZ2dsZVNlbGVjdGlvbk9mTWVkaWEobWVkaWEpXCJcclxuICAgICAgICAgICAgICAgICAgICBkcmFnZ2FibGU9XCJ0cnVlXCIgdi1vbjpkcmFnc3RhcnQ9XCJkcmFnU3RhcnQobWVkaWEsICRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGh1bWItY29udGFpbmVyXCIgOnN0eWxlPVwie2hlaWdodDogdGh1bWJTaXplICsncHgnfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHYtaWY9XCJtZWRpYS5taW1lLnN0YXJ0c1dpdGgoJ2ltYWdlJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpzcmM9XCJidWlsZE1lZGlhVXJsKG1lZGlhLnVybCwgdGh1bWJTaXplKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmRhdGEtbWltZT1cIm1lZGlhLm1pbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpzdHlsZT1cInttYXhIZWlnaHQ6IHRodW1iU2l6ZSArJ3B4JywgbWF4V2lkdGg6IHRodW1iU2l6ZSArJ3B4J31cIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSB2LWVsc2UgY2xhc3M9XCJmYS1yZWd1bGFyIGZhLWZpbGUgZGlzcGxheS0xXCIgOmRhdGEtbWltZT1cIm1lZGlhLm1pbWVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVkaWEtY29udGFpbmVyLW1haW4taXRlbS10aXRsZSBjYXJkLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBidG4tc20gZmxvYXQtZW5kIGlubGluZS1tZWRpYS1idXR0b24gZWRpdC1idXR0b25cIiB2LW9uOmNsaWNrLnN0b3A9XCJyZW5hbWVNZWRpYShtZWRpYSlcIj48aSBjbGFzcz1cImZhLXNvbGlkIGZhLWVkaXRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IGJ0bi1zbSBmbG9hdC1lbmQgaW5saW5lLW1lZGlhLWJ1dHRvbiBkZWxldGUtYnV0dG9uXCIgdi1vbjpjbGljay5zdG9wPVwiZGVsZXRlTWVkaWEobWVkaWEpXCI+PGkgY2xhc3M9XCJmYS1zb2xpZCBmYS10cmFzaFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIDpocmVmPVwibWVkaWEudXJsXCIgdGFyZ2V0PVwiX2JsYW5rXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IGJ0bi1zbSBmbG9hdC1lbmQgaW5saW5lLW1lZGlhLWJ1dHRvbiB2aWV3LWJ1dHRvblwiXCI+PGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1kb3dubG9hZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWVkaWEtZmlsZW5hbWUgY2FyZC10ZXh0IHNtYWxsXCIgOnRpdGxlPVwibWVkaWEubmFtZVwiPnt7IG1lZGlhLm5hbWUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICA8L29sPlxyXG4gICAgICAgIGAsXHJcbiAgICBkYXRhOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgVDoge31cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgcHJvcHM6IHtcclxuICAgICAgICBmaWx0ZXJlZE1lZGlhSXRlbXM6IEFycmF5LFxyXG4gICAgICAgIHNlbGVjdGVkTWVkaWFzOiBBcnJheSxcclxuICAgICAgICB0aHVtYlNpemU6IE51bWJlclxyXG4gICAgfSxcclxuICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgLy8gcmV0cmlldmluZyBsb2NhbGl6ZWQgc3RyaW5ncyBmcm9tIHZpZXdcclxuICAgICAgICBzZWxmLlQuZWRpdEJ1dHRvbiA9ICQoJyN0LWVkaXQtYnV0dG9uJykudmFsKCk7XHJcbiAgICAgICAgc2VsZi5ULmRlbGV0ZUJ1dHRvbiA9ICQoJyN0LWRlbGV0ZS1idXR0b24nKS52YWwoKTtcclxuICAgIH0sXHJcbiAgICBtZXRob2RzOiB7XHJcbiAgICAgICAgaXNNZWRpYVNlbGVjdGVkOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuc2VsZWN0ZWRNZWRpYXMuc29tZShmdW5jdGlvbiAoZWxlbWVudCwgaW5kZXgsIGFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudC51cmwudG9Mb3dlckNhc2UoKSA9PT0gbWVkaWEudXJsLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgYnVpbGRNZWRpYVVybDogZnVuY3Rpb24gKHVybCwgdGh1bWJTaXplKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1cmwgKyAodXJsLmluZGV4T2YoJz8nKSA9PSAtMSA/ICc/JyA6ICcmJykgKyAnd2lkdGg9JyArIHRodW1iU2l6ZSArICcmaGVpZ2h0PScgKyB0aHVtYlNpemU7XHJcbiAgICAgICAgfSxcclxuICAgICAgICB0b2dnbGVTZWxlY3Rpb25PZk1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdtZWRpYVRvZ2dsZVJlcXVlc3RlZCcsIG1lZGlhKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHJlbmFtZU1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdyZW5hbWVNZWRpYVJlcXVlc3RlZCcsIG1lZGlhKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRlbGV0ZU1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdkZWxldGVNZWRpYVJlcXVlc3RlZCcsIG1lZGlhKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRyYWdTdGFydDogZnVuY3Rpb24gKG1lZGlhLCBlKSB7XHJcbiAgICAgICAgICAgIGJ1cy4kZW1pdCgnbWVkaWFEcmFnU3RhcnRSZXF1ZXN0ZWQnLCBtZWRpYSwgZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KTtcclxuIiwiLy8gPG1lZGlhLWl0ZW1zLXRhYmxlPiBjb21wb25lbnRcclxuVnVlLmNvbXBvbmVudCgnbWVkaWEtaXRlbXMtdGFibGUnLCB7XHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIG1lZGlhLWl0ZW1zLXRhYmxlIG0tMFwiPlxyXG4gICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJoZWFkZXItcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCIgY2xhc3M9XCJ0aHVtYm5haWwtY29sdW1uXCI+e3sgVC5pbWFnZUhlYWRlciB9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCIgdi1vbjpjbGljaz1cImNoYW5nZVNvcnQoJ25hbWUnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgIHt7IFQubmFtZUhlYWRlciB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgPHNvcnQtaW5kaWNhdG9yIGNvbG5hbWU9XCJuYW1lXCIgOnNlbGVjdGVkY29sbmFtZT1cInNvcnRCeVwiIDphc2M9XCJzb3J0QXNjXCI+PC9zb3J0LWluZGljYXRvcj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiIHYtb246Y2xpY2s9XCJjaGFuZ2VTb3J0KCdsYXN0TW9kaWZ5JylcIj4gXHJcbiAgICAgICAgICAgICAgICAgICAgICAge3sgVC5sYXN0TW9kaWZ5SGVhZGVyIH19IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgPHNvcnQtaW5kaWNhdG9yIGNvbG5hbWU9XCJsYXN0TW9kaWZ5XCIgOnNlbGVjdGVkY29sbmFtZT1cInNvcnRCeVwiIDphc2M9XCJzb3J0QXNjXCI+PC9zb3J0LWluZGljYXRvcj4gXHJcbiAgICAgICAgICAgICAgICAgICAgPC90aD4gXHJcbiAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCIgdi1vbjpjbGljaz1cImNoYW5nZVNvcnQoJ3NpemUnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9wdGlvbmFsLWNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgVC5zaXplSGVhZGVyIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICA8c29ydC1pbmRpY2F0b3IgY29sbmFtZT1cInNpemVcIiA6c2VsZWN0ZWRjb2xuYW1lPVwic29ydEJ5XCIgOmFzYz1cInNvcnRBc2NcIj48L3NvcnQtaW5kaWNhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIiB2LW9uOmNsaWNrPVwiY2hhbmdlU29ydCgnbWltZScpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3B0aW9uYWwtY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFQudHlwZUhlYWRlciB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgPHNvcnQtaW5kaWNhdG9yIGNvbG5hbWU9XCJtaW1lXCIgOnNlbGVjdGVkY29sbmFtZT1cInNvcnRCeVwiIDphc2M9XCJzb3J0QXNjXCI+PC9zb3J0LWluZGljYXRvcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRyIHYtZm9yPVwibWVkaWEgaW4gZmlsdGVyZWRNZWRpYUl0ZW1zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1lZGlhLWl0ZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDpjbGFzcz1cIntzZWxlY3RlZDogaXNNZWRpYVNlbGVjdGVkKG1lZGlhKX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHYtb246Y2xpY2suc3RvcD1cInRvZ2dsZVNlbGVjdGlvbk9mTWVkaWEobWVkaWEpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBkcmFnZ2FibGU9XCJ0cnVlXCIgdi1vbjpkcmFnc3RhcnQ9XCJkcmFnU3RhcnQobWVkaWEsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDprZXk9XCJtZWRpYS5uYW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidGh1bWJuYWlsLWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbWctd3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHYtaWY9XCJtZWRpYS5taW1lLnN0YXJ0c1dpdGgoJ2ltYWdlJylcIiBkcmFnZ2FibGU9XCJmYWxzZVwiIDpzcmM9XCJidWlsZE1lZGlhVXJsKG1lZGlhLnVybCwgdGh1bWJTaXplKVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIHYtZWxzZSBjbGFzcz1cImZhLXNvbGlkIGZhLWZpbGUgZmEtbGdcIiA6ZGF0YS1taW1lPVwibWVkaWEubWltZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lZGlhLW5hbWUtY2VsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnJlYWstd29yZFwiPiB7eyBtZWRpYS5uYW1lIH19IDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbnMtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgY2xhc3M9XCJidG4gYnRuLWxpbmsgYnRuLXNtIG1lLTEgZWRpdC1idXR0b25cIiB2LW9uOmNsaWNrLnN0b3A9XCJyZW5hbWVNZWRpYShtZWRpYSlcIj4ge3sgVC5lZGl0QnV0dG9uIH19IDwvYSA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgY2xhc3M9XCJidG4gYnRuLWxpbmsgYnRuLXNtIGRlbGV0ZS1idXR0b25cIiB2LW9uOmNsaWNrLnN0b3A9XCJkZWxldGVNZWRpYShtZWRpYSlcIj4ge3sgVC5kZWxldGVCdXR0b24gfX0gPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgOmhyZWY9XCJtZWRpYS51cmxcIiB0YXJnZXQ9XCJfYmxhbmtcIiBjbGFzcz1cImJ0biBidG4tbGluayBidG4tc20gdmlldy1idXR0b25cIj4ge3sgVC52aWV3QnV0dG9uIH19IDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNvbFwiPiB7eyBwcmludERhdGVUaW1lKG1lZGlhLmxhc3RNb2RpZnkpIH19IDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jb2wgb3B0aW9uYWwtY29sXCI+IHt7IGlzTmFOKG1lZGlhLnNpemUpPyAwIDogTWF0aC5yb3VuZChtZWRpYS5zaXplIC8gMTAyNCkgfX0gS0I8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY29sIG9wdGlvbmFsLWNvbFwiPnt7IG1lZGlhLm1pbWUgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgYCxcclxuICAgIGRhdGE6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBUOiB7fVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBwcm9wczoge1xyXG4gICAgICAgIHNvcnRCeTogU3RyaW5nLFxyXG4gICAgICAgIHNvcnRBc2M6IEJvb2xlYW4sXHJcbiAgICAgICAgZmlsdGVyZWRNZWRpYUl0ZW1zOiBBcnJheSxcclxuICAgICAgICBzZWxlY3RlZE1lZGlhczogQXJyYXksXHJcbiAgICAgICAgdGh1bWJTaXplOiBOdW1iZXJcclxuICAgIH0sXHJcbiAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHNlbGYuVC5pbWFnZUhlYWRlciA9ICQoJyN0LWltYWdlLWhlYWRlcicpLnZhbCgpO1xyXG4gICAgICAgIHNlbGYuVC5uYW1lSGVhZGVyID0gJCgnI3QtbmFtZS1oZWFkZXInKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQubGFzdE1vZGlmeUhlYWRlciA9ICQoJyN0LWxhc3RNb2RpZnktaGVhZGVyJykudmFsKCk7XHJcbiAgICAgICAgc2VsZi5ULnNpemVIZWFkZXIgPSAkKCcjdC1zaXplLWhlYWRlcicpLnZhbCgpO1xyXG4gICAgICAgIHNlbGYuVC50eXBlSGVhZGVyID0gJCgnI3QtdHlwZS1oZWFkZXInKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQuZWRpdEJ1dHRvbiA9ICQoJyN0LWVkaXQtYnV0dG9uJykudmFsKCk7XHJcbiAgICAgICAgc2VsZi5ULmRlbGV0ZUJ1dHRvbiA9ICQoJyN0LWRlbGV0ZS1idXR0b24nKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQudmlld0J1dHRvbiA9ICQoJyN0LXZpZXctYnV0dG9uJykudmFsKCk7XHJcbiAgICB9LFxyXG4gICAgbWV0aG9kczoge1xyXG4gICAgICAgIGlzTWVkaWFTZWxlY3RlZDogZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB0aGlzLnNlbGVjdGVkTWVkaWFzLnNvbWUoZnVuY3Rpb24gKGVsZW1lbnQsIGluZGV4LCBhcnJheSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQudXJsLnRvTG93ZXJDYXNlKCkgPT09IG1lZGlhLnVybC50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGJ1aWxkTWVkaWFVcmw6IGZ1bmN0aW9uICh1cmwsIHRodW1iU2l6ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdXJsICsgKHVybC5pbmRleE9mKCc/JykgPT0gLTEgPyAnPycgOiAnJicpICsgJ3dpZHRoPScgKyB0aHVtYlNpemUgKyAnJmhlaWdodD0nICsgdGh1bWJTaXplO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2hhbmdlU29ydDogZnVuY3Rpb24gKG5ld1NvcnQpIHtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdzb3J0Q2hhbmdlUmVxdWVzdGVkJywgbmV3U29ydCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICB0b2dnbGVTZWxlY3Rpb25PZk1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdtZWRpYVRvZ2dsZVJlcXVlc3RlZCcsIG1lZGlhKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHJlbmFtZU1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdyZW5hbWVNZWRpYVJlcXVlc3RlZCcsIG1lZGlhKTsgICAgICAgICAgICBcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRlbGV0ZU1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdkZWxldGVNZWRpYVJlcXVlc3RlZCcsIG1lZGlhKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRyYWdTdGFydDogZnVuY3Rpb24gKG1lZGlhLCBlKSB7XHJcbiAgICAgICAgICAgIGJ1cy4kZW1pdCgnbWVkaWFEcmFnU3RhcnRSZXF1ZXN0ZWQnLCBtZWRpYSwgZSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBwcmludERhdGVUaW1lOiBmdW5jdGlvbiAoZGF0ZW1pbGxpcyl7XHJcbiAgICAgICAgICAgIHZhciBkID0gbmV3IERhdGUoZGF0ZW1pbGxpcyk7XHJcbiAgICAgICAgICAgIHJldHVybiBkLnRvTG9jYWxlU3RyaW5nKCk7ICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KTtcclxuIiwiLy8gVGhpcyBjb21wb25lbnQgcmVjZWl2ZXMgYSBsaXN0IG9mIGFsbCB0aGUgaXRlbXMsIHVucGFnZWQuXHJcbi8vIEFzIHRoZSB1c2VyIGludGVyYWN0cyB3aXRoIHRoZSBwYWdlciwgaXQgcmFpc2VzIGV2ZW50cyB3aXRoIHRoZSBpdGVtcyBpbiB0aGUgY3VycmVudCBwYWdlLlxyXG4vLyBJdCdzIHRoZSBwYXJlbnQncyByZXNwb25zaWJpbGl0eSB0byBsaXN0ZW4gZm9yIHRoZXNlIGV2ZW50cyBhbmQgZGlzcGxheSB0aGUgcmVjZWl2ZWQgaXRlbXNcclxuLy8gPHBhZ2VyPiBjb21wb25lbnRcclxuVnVlLmNvbXBvbmVudCgncGFnZXInLCB7XHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgPGRpdj5cclxuICAgICAgICA8bmF2IGlkPVwibWVkaWEtcGFnZXJcIiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCIgYXJpYS1sYWJlbD1cIlBhZ2luYXRpb24gTmF2aWdhdGlvblwiIHJvbGU9XCJuYXZpZ2F0aW9uXCIgOmRhdGEtY29tcHV0ZWQtdHJpZ2dlcj1cIml0ZW1zSW5DdXJyZW50UGFnZS5sZW5ndGhcIj5cclxuICAgICAgICAgICAgPHVsIGNsYXNzPVwicGFnaW5hdGlvbiBwYWdpbmF0aW9uLXNtIG0tMFwiPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicGFnZS1pdGVtIG1lZGlhLWZpcnN0LWJ1dHRvblwiIDpjbGFzcz1cIntkaXNhYmxlZCA6ICFjYW5Eb0ZpcnN0fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwicGFnZS1saW5rXCIgaHJlZj1cIiNcIiA6dGFiaW5kZXg9XCJjYW5Eb0ZpcnN0ID8gMCA6IC0xXCIgdi1vbjpjbGljaz1cImdvRmlyc3RcIj57eyBULnBhZ2VyRmlyc3RCdXR0b24gfX08L2E+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicGFnZS1pdGVtXCIgOmNsYXNzPVwie2Rpc2FibGVkIDogIWNhbkRvUHJldn1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cInBhZ2UtbGlua1wiIGhyZWY9XCIjXCIgOnRhYmluZGV4PVwiY2FuRG9QcmV2ID8gMCA6IC0xXCIgdi1vbjpjbGljaz1cInByZXZpb3VzXCI+e3sgVC5wYWdlclByZXZpb3VzQnV0dG9uIH19PC9hPlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSB2LWlmPVwibGluayAhPT0gLTFcIiBjbGFzcz1cInBhZ2UtaXRlbSBwYWdlLW51bWJlclwiICA6Y2xhc3M9XCJ7YWN0aXZlIDogY3VycmVudCA9PSBsaW5rIC0gMX1cIiB2LWZvcj1cImxpbmsgaW4gcGFnZUxpbmtzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJwYWdlLWxpbmtcIiBocmVmPVwiI1wiIHYtb246Y2xpY2s9XCJnb1RvKGxpbmsgLSAxKVwiIDphcmlhLWxhYmVsPVwiJ0dvdG8gUGFnZScgKyBsaW5rXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7bGlua319XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHYtaWY9XCJjdXJyZW50ID09IGxpbmsgLTFcIiBjbGFzcz1cInZpc3VhbGx5LWhpZGRlblwiPihjdXJyZW50KTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicGFnZS1pdGVtXCIgOmNsYXNzPVwie2Rpc2FibGVkIDogIWNhbkRvTmV4dH1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cInBhZ2UtbGlua1wiIGhyZWY9XCIjXCIgOnRhYmluZGV4PVwiY2FuRG9OZXh0ID8gMCA6IC0xXCIgdi1vbjpjbGljaz1cIm5leHRcIj57eyBULnBhZ2VyTmV4dEJ1dHRvbiB9fTwvYT5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJwYWdlLWl0ZW0gbWVkaWEtbGFzdC1idXR0b25cIiA6Y2xhc3M9XCJ7ZGlzYWJsZWQgOiAhY2FuRG9MYXN0fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwicGFnZS1saW5rXCIgaHJlZj1cIiNcIiA6dGFiaW5kZXg9XCJjYW5Eb0xhc3QgPyAwIDogLTFcIiB2LW9uOmNsaWNrPVwiZ29MYXN0XCI+e3sgVC5wYWdlckxhc3RCdXR0b24gfX08L2E+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicGFnZS1pdGVtIG1zLTQgcGFnZS1zaXplLWluZm9cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwYWdlLWxpbmsgZGlzYWJsZWQgdGV4dC1tdXRlZCBwYWdlLXNpemUtbGFiZWxcIj57eyBULnBhZ2VyUGFnZVNpemVMYWJlbCB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBpZD1cInBhZ2VTaXplU2VsZWN0XCIgY2xhc3M9XCJwYWdlLWxpbmtcIiB2LW1vZGVsPVwicGFnZVNpemVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdi1mb3I9XCJvcHRpb24gaW4gcGFnZVNpemVPcHRpb25zXCIgdi1iaW5kOnZhbHVlPVwib3B0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tvcHRpb259fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L25hdj5cclxuICAgICAgICA8bmF2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgPHVsIGNsYXNzPVwicGFnaW5hdGlvbiBwYWdpbmF0aW9uLXNtIG0tMCBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJwYWdlLWl0ZW0gbXMtNCBwYWdlLWluZm9cIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhZ2UtbGluayBkaXNhYmxlZCB0ZXh0LW11dGVkIFwiPnt7IFQucGFnZXJQYWdlTGFiZWwgfX0ge3tjdXJyZW50ICsgMX19L3t7dG90YWxQYWdlc319PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInBhZ2UtaXRlbSBtcy00IHRvdGFsLWluZm9cIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhZ2UtbGluayBkaXNhYmxlZCB0ZXh0LW11dGVkIFwiPiB7eyBULnBhZ2VyVG90YWxMYWJlbCB9fSB7e3RvdGFsfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbmF2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIGAsXHJcbiAgICBwcm9wczoge1xyXG4gICAgICAgIHNvdXJjZUl0ZW1zOiBBcnJheVxyXG4gICAgfSxcclxuICAgIGRhdGE6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBwYWdlU2l6ZTogMTAsXHJcbiAgICAgICAgICAgIHBhZ2VTaXplT3B0aW9uczogWzEwLCAzMCwgNTAsIDEwMF0sXHJcbiAgICAgICAgICAgIGN1cnJlbnQ6IDAsXHJcbiAgICAgICAgICAgIFQ6IHt9XHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcbiAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgICAgICAvLyByZXRyaWV2aW5nIGxvY2FsaXplZCBzdHJpbmdzIGZyb20gdmlld1xyXG4gICAgICAgIHNlbGYuVC5wYWdlckZpcnN0QnV0dG9uID0gJCgnI3QtcGFnZXItZmlyc3QtYnV0dG9uJykudmFsKCk7XHJcbiAgICAgICAgc2VsZi5ULnBhZ2VyUHJldmlvdXNCdXR0b24gPSAkKCcjdC1wYWdlci1wcmV2aW91cy1idXR0b24nKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQucGFnZXJOZXh0QnV0dG9uID0gJCgnI3QtcGFnZXItbmV4dC1idXR0b24nKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQucGFnZXJMYXN0QnV0dG9uID0gJCgnI3QtcGFnZXItbGFzdC1idXR0b24nKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQucGFnZXJQYWdlU2l6ZUxhYmVsID0gJCgnI3QtcGFnZXItcGFnZS1zaXplLWxhYmVsJykudmFsKCk7XHJcbiAgICAgICAgc2VsZi5ULnBhZ2VyUGFnZUxhYmVsID0gJCgnI3QtcGFnZXItcGFnZS1sYWJlbCcpLnZhbCgpO1xyXG4gICAgICAgIHNlbGYuVC5wYWdlclRvdGFsTGFiZWwgPSAkKCcjdC1wYWdlci10b3RhbC1sYWJlbCcpLnZhbCgpOyAgICAgICAgXHJcbiAgICB9LFxyXG4gICAgbWV0aG9kczoge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gdGhpcy5jdXJyZW50ICsgMTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHByZXZpb3VzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IHRoaXMuY3VycmVudCAtIDE7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBnb0ZpcnN0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IDA7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBnb0xhc3Q6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gdGhpcy50b3RhbFBhZ2VzIC0gMTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGdvVG86IGZ1bmN0aW9uICh0YXJnZXRQYWdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IHRhcmdldFBhZ2U7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIGNvbXB1dGVkOiB7XHJcbiAgICAgICAgdG90YWw6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc291cmNlSXRlbXMgPyB0aGlzLnNvdXJjZUl0ZW1zLmxlbmd0aCA6IDA7XHJcbiAgICAgICAgfSxcclxuICAgICAgICB0b3RhbFBhZ2VzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBwYWdlcyA9IE1hdGguY2VpbCh0aGlzLnRvdGFsIC8gdGhpcy5wYWdlU2l6ZSk7XHJcbiAgICAgICAgICAgIHJldHVybiBwYWdlcyA+IDAgPyBwYWdlcyA6IDE7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBpc0xhc3RQYWdlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnQgKyAxID49IHRoaXMudG90YWxQYWdlcztcclxuICAgICAgICB9LFxyXG4gICAgICAgIGlzRmlyc3RQYWdlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnQgPT09IDA7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjYW5Eb05leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuICF0aGlzLmlzTGFzdFBhZ2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjYW5Eb1ByZXY6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuICF0aGlzLmlzRmlyc3RQYWdlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2FuRG9GaXJzdDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gIXRoaXMuaXNGaXJzdFBhZ2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjYW5Eb0xhc3Q6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuICF0aGlzLmlzTGFzdFBhZ2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyB0aGlzIGNvbXB1dGVkIGlzIG9ubHkgdG8gaGF2ZSBhIGNlbnRyYWwgcGxhY2Ugd2hlcmUgd2UgZGV0ZWN0IGNoYW5nZXMgYW5kIGxldmVyYWdlIFZ1ZSBKUyByZWFjdGl2aXR5IHRvIHJhaXNlIG91ciBldmVudC5cclxuICAgICAgICAvLyBUaGF0IGV2ZW50IHdpbGwgYmUgaGFuZGxlZCBieSB0aGUgcGFyZW50IG1lZGlhIGFwcCB0byBkaXNwbGF5IHRoZSBpdGVtcyBpbiB0aGUgcGFnZS5cclxuICAgICAgICAvLyB0aGlzIGxvZ2ljIHdpbGwgbm90IHJ1biBpZiB0aGUgY29tcHV0ZWQgcHJvcGVydHkgaXMgbm90IHVzZWQgaW4gdGhlIHRlbXBsYXRlLiBXZSB1c2UgYSBkdW1teSBcImRhdGEtY29tcHV0ZWQtdHJpZ2dlclwiIGF0dHJpYnV0ZSBmb3IgdGhhdC5cclxuICAgICAgICBpdGVtc0luQ3VycmVudFBhZ2U6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5wYWdlU2l6ZSAqIHRoaXMuY3VycmVudDtcclxuICAgICAgICAgICAgdmFyIGVuZCA9IHN0YXJ0ICsgdGhpcy5wYWdlU2l6ZTtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuc291cmNlSXRlbXMuc2xpY2Uoc3RhcnQsIGVuZCk7XHJcbiAgICAgICAgICAgIGJ1cy4kZW1pdCgncGFnZXJFdmVudCcsIHJlc3VsdCk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBwYWdlTGlua3M6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgICAgIHZhciBsaW5rcyA9IFtdO1xyXG5cclxuICAgICAgICAgICAgbGlua3MucHVzaCh0aGlzLmN1cnJlbnQgKyAxKTtcclxuXHJcbiAgICAgICAgICAgIC8vIEFkZCAyIGl0ZW1zIGJlZm9yZSBjdXJyZW50XHJcbiAgICAgICAgICAgIHZhciBiZWZvcmVDdXJyZW50ID0gdGhpcy5jdXJyZW50ID4gMCA/IHRoaXMuY3VycmVudCA6IC0xO1xyXG4gICAgICAgICAgICBsaW5rcy51bnNoaWZ0KGJlZm9yZUN1cnJlbnQpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGJlZm9yZUJlZm9yZUN1cnJlbnQgPSB0aGlzLmN1cnJlbnQgPiAxID8gdGhpcy5jdXJyZW50IC0gMSA6IC0xO1xyXG4gICAgICAgICAgICBsaW5rcy51bnNoaWZ0KGJlZm9yZUJlZm9yZUN1cnJlbnQpO1xyXG5cclxuXHJcbiAgICAgICAgICAgIC8vIEFkZCAyIGl0ZW1zIGFmdGVyIGN1cnJlbnRcclxuICAgICAgICAgICAgdmFyIGFmdGVyQ3VycmVudCA9IHRoaXMudG90YWxQYWdlcyAtIHRoaXMuY3VycmVudCA+IDEgPyB0aGlzLmN1cnJlbnQgKyAyIDogLTE7XHJcbiAgICAgICAgICAgIGxpbmtzLnB1c2goYWZ0ZXJDdXJyZW50KTtcclxuXHJcbiAgICAgICAgICAgIHZhciBhZnRlckFmdGVyQ3VycmVudCA9IHRoaXMudG90YWxQYWdlcyAtIHRoaXMuY3VycmVudCA+IDIgPyB0aGlzLmN1cnJlbnQgKyAzIDogLTE7XHJcbiAgICAgICAgICAgIGxpbmtzLnB1c2goYWZ0ZXJBZnRlckN1cnJlbnQpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGxpbmtzO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB3YXRjaDoge1xyXG4gICAgICAgIHNvdXJjZUl0ZW1zOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IDA7IC8vIHJlc2V0dGluZyBjdXJyZW50IHBhZ2UgYWZ0ZXIgcmVjZWl2aW5nIGEgbmV3IGxpc3Qgb2YgdW5wYWdlZCBpdGVtc1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcGFnZVNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gMDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG4iLCIvLyA8c29ydC1pbmRpY2F0b3I+IGNvbXBvbmVudFxyXG5WdWUuY29tcG9uZW50KCdzb3J0SW5kaWNhdG9yJywge1xyXG4gICAgdGVtcGxhdGU6IGBcclxuICAgICAgICA8ZGl2IHYtc2hvdz1cImlzQWN0aXZlXCIgY2xhc3M9XCJzb3J0LWluZGljYXRvclwiPlxyXG4gICAgICAgICAgICA8c3BhbiB2LXNob3c9XCJhc2NcIj48aSBjbGFzcz1cInNtYWxsIGZhIGZhLWNoZXZyb24tdXBcIj48L2k+PC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiB2LXNob3c9XCIhYXNjXCI+PGkgY2xhc3M9XCJzbWFsbCBmYSBmYS1jaGV2cm9uLWRvd25cIj48L2k+PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIGAsXHJcbiAgICBwcm9wczoge1xyXG4gICAgICAgIGNvbG5hbWU6IFN0cmluZyxcclxuICAgICAgICBzZWxlY3RlZGNvbG5hbWU6IFN0cmluZyxcclxuICAgICAgICBhc2M6IEJvb2xlYW5cclxuICAgIH0sXHJcbiAgICBjb21wdXRlZDoge1xyXG4gICAgICAgIGlzQWN0aXZlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbG5hbWUudG9Mb3dlckNhc2UoKSA9PSB0aGlzLnNlbGVjdGVkY29sbmFtZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcbiIsImZ1bmN0aW9uIGluaXRpYWxpemVBdHRhY2hlZE1lZGlhRmllbGQoZWwsIGlkT2ZVcGxvYWRCdXR0b24sIHVwbG9hZEFjdGlvbiwgbWVkaWFJdGVtVXJsLCBhbGxvd011bHRpcGxlLCBhbGxvd01lZGlhVGV4dCwgYWxsb3dBbmNob3JzLCB0ZW1wVXBsb2FkRm9sZGVyLCBtYXhVcGxvYWRDaHVua1NpemUpIHtcclxuXHJcbiAgICB2YXIgdGFyZ2V0ID0gJChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgkKGVsKS5kYXRhKCdmb3InKSkpO1xyXG4gICAgdmFyIGluaXRpYWxQYXRocyA9IHRhcmdldC5kYXRhKFwiaW5pdFwiKTtcclxuXHJcbiAgICB2YXIgbWVkaWFGaWVsZEVkaXRvciA9ICQoZWwpO1xyXG4gICAgdmFyIGlkcHJlZml4ID0gbWVkaWFGaWVsZEVkaXRvci5hdHRyKFwiaWRcIik7XHJcbiAgICB2YXIgbWVkaWFGaWVsZEFwcDtcclxuXHJcbiAgICBtZWRpYUZpZWxkQXBwcy5wdXNoKG1lZGlhRmllbGRBcHAgPSBuZXcgVnVlKHtcclxuICAgICAgICBlbDogbWVkaWFGaWVsZEVkaXRvci5nZXQoMCksXHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICBtZWRpYUl0ZW1zOiBbXSxcclxuICAgICAgICAgICAgc2VsZWN0ZWRNZWRpYTogbnVsbCxcclxuICAgICAgICAgICAgc21hbGxUaHVtYnM6IGZhbHNlLFxyXG4gICAgICAgICAgICBpZFByZWZpeDogaWRwcmVmaXgsXHJcbiAgICAgICAgICAgIGluaXRpYWxpemVkOiBmYWxzZSxcclxuICAgICAgICAgICAgYWxsb3dNZWRpYVRleHQ6IGFsbG93TWVkaWFUZXh0LFxyXG4gICAgICAgICAgICBiYWNrdXBNZWRpYVRleHQ6ICcnLFxyXG4gICAgICAgICAgICBhbGxvd0FuY2hvcnM6IGFsbG93QW5jaG9ycyxcclxuICAgICAgICAgICAgYmFja3VwQW5jaG9yOiBudWxsLFxyXG4gICAgICAgICAgICBtZWRpYVRleHRtb2RhbDogbnVsbCxcclxuICAgICAgICAgICAgYW5jaG9yaW5nTW9kYWw6IG51bGxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgICAgICAgICAgc2VsZi5jdXJyZW50UHJlZnMgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdtZWRpYUZpZWxkUHJlZnMnKSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjb21wdXRlZDoge1xyXG4gICAgICAgICAgICBwYXRoczoge1xyXG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1lZGlhUGF0aHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGluaXRpYWxQYXRocyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWFJdGVtcy5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4Lm1lZGlhUGF0aCA9PT0gJ25vdC1mb3VuZCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZWRpYVBhdGhzLnB1c2goeyBwYXRoOiB4Lm1lZGlhUGF0aCwgaXNSZW1vdmVkOiB4LmlzUmVtb3ZlZCwgaXNOZXc6IHguaXNOZXcsIG1lZGlhVGV4dDogeC5tZWRpYVRleHQsIGFuY2hvcjogeC5hbmNob3IsIGF0dGFjaGVkRmlsZU5hbWU6IHguYXR0YWNoZWRGaWxlTmFtZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkobWVkaWFQYXRocyk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBtZWRpYVBhdGhzID0gdmFsdWVzIHx8IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzaWduYWwgPSAkLkRlZmVycmVkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW1zID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVkaWFQYXRocy5mb3JFYWNoKGZ1bmN0aW9uICh4LCBpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goeyBuYW1lOiAnICcgKyB4LnBhdGgsIG1pbWU6ICcnLCBtZWRpYVBhdGg6ICcnLCBhbmNob3I6IHguYW5jaG9yLCBhdHRhY2hlZEZpbGVOYW1lOiB4LmF0dGFjaGVkRmlsZU5hbWUgfSk7IC8vIGRvbid0IHJlbW92ZSB0aGUgc3BhY2UuIFNvbWV0aGluZyBkaWZmZXJlbnQgaXMgbmVlZGVkIG9yIGl0IHdvbnQgcmVhY3Qgd2hlbiB0aGUgcmVhbCBuYW1lIGFycml2ZXMuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2UgPSAkLndoZW4oc2lnbmFsKS5kb25lKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBtZWRpYUl0ZW1VcmwgKyBcIj9wYXRoPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KHgucGF0aCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnZ1ZWtleSA9IGRhdGEubmFtZSArIGkudG9TdHJpbmcoKTsgLy8gQmVjYXVzZSBhIHVuaXF1ZSBrZXkgaXMgcmVxdWlyZWQgYnkgVnVlIG9uIHYtZm9yIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLm1lZGlhVGV4dCA9IHgubWVkaWFUZXh0OyAvLyBUaGlzIHZhbHVlIGlzIG5vdCByZXR1cm5lZCBmcm9tIHRoZSBhamF4IGNhbGwuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuYW5jaG9yID0geC5hbmNob3I7IC8vIFRoaXMgdmFsdWUgaXMgbm90IHJldHVybmVkIGZyb20gdGhlIGFqYXggY2FsbC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5hdHRhY2hlZEZpbGVOYW1lID0geC5hdHRhY2hlZEZpbGVOYW1lOy8vIFRoaXMgdmFsdWUgaXMgbm90IHJldHVybmVkIGZyb20gdGhlIGFqYXggY2FsbC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMuc3BsaWNlKGksIDEsIGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbXMubGVuZ3RoID09PSArK2xlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoeCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWVkaWFJdGVtcy5wdXNoKHgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShlcnJvcikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5zcGxpY2UoaSwgMSwgeyBuYW1lOiB4LnBhdGgsIG1pbWU6ICcnLCBtZWRpYVBhdGg6ICdub3QtZm91bmQnLCBtZWRpYVRleHQ6ICcnLCBhbmNob3I6IHsgeDogMC41LCB5OiAwLjUgfSwgYXR0YWNoZWRGaWxlTmFtZTogeC5hdHRhY2hlZEZpbGVOYW1lIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbXMubGVuZ3RoID09PSArK2xlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoeCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWVkaWFJdGVtcy5wdXNoKHgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgc2lnbmFsLnJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZmlsZVNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKHRoaXMuc2VsZWN0ZWRNZWRpYS5zaXplIC8gMTAyNCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNhbkFkZE1lZGlhOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbm9uUmVtb3ZlZE1lZGlhSXRlbXMgPSBbXTtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5tZWRpYUl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLm1lZGlhSXRlbXNbaV0uaXNSZW1vdmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vblJlbW92ZWRNZWRpYUl0ZW1zLnB1c2godGhpcy5tZWRpYUl0ZW1zW2ldKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vblJlbW92ZWRNZWRpYUl0ZW1zLmxlbmd0aCA9PT0gMCB8fCBub25SZW1vdmVkTWVkaWFJdGVtcy5sZW5ndGggPiAwICYmIGFsbG93TXVsdGlwbGU7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHRodW1iU2l6ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc21hbGxUaHVtYnMgPyAxMjAgOiAyNDA7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGN1cnJlbnRQcmVmczoge1xyXG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc21hbGxUaHVtYnM6IHRoaXMuc21hbGxUaHVtYnNcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKG5ld1ByZWZzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFuZXdQcmVmcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc21hbGxUaHVtYnMgPSBuZXdQcmVmcy5zbWFsbFRodW1icztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbW91bnRlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgICAgICBzZWxmLnBhdGhzID0gaW5pdGlhbFBhdGhzO1xyXG5cclxuICAgICAgICAgICAgc2VsZi4kb24oJ3NlbGVjdEFuZERlbGV0ZU1lZGlhUmVxdWVzdGVkJywgZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdEFuZERlbGV0ZU1lZGlhKG1lZGlhKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBzZWxmLiRvbignc2VsZWN0TWVkaWFSZXF1ZXN0ZWQnLCBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0TWVkaWEobWVkaWEpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHZhciBzZWxlY3RvciA9ICcjJyArIGlkT2ZVcGxvYWRCdXR0b247XHJcbiAgICAgICAgICAgIHZhciBlZGl0b3JJZCA9IG1lZGlhRmllbGRFZGl0b3IuYXR0cignaWQnKTtcclxuICAgICAgICAgICAgdmFyIGNodW5rZWRGaWxlVXBsb2FkSWQgPSByYW5kb21VVUlEKCk7XHJcblxyXG4gICAgICAgICAgICAkKHNlbGVjdG9yKVxyXG4gICAgICAgICAgICAgICAgLmZpbGV1cGxvYWQoe1xyXG4gICAgICAgICAgICAgICAgICAgIGxpbWl0Q29uY3VycmVudFVwbG9hZHM6IDIwLFxyXG4gICAgICAgICAgICAgICAgICAgIGRyb3Bab25lOiAkKCcjJyArIGVkaXRvcklkKSxcclxuICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ2pzb24nLFxyXG4gICAgICAgICAgICAgICAgICAgIHVybDogdXBsb2FkQWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgIG1heENodW5rU2l6ZTogbWF4VXBsb2FkQ2h1bmtTaXplLFxyXG4gICAgICAgICAgICAgICAgICAgIGFkZDogZnVuY3Rpb24gKGUsIGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvdW50ID0gZGF0YS5maWxlcy5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5maWxlc1tpXS51cGxvYWROYW1lID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdldFVuaXF1ZUlkKCkgKyBkYXRhLmZpbGVzW2ldLm5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmZpbGVzW2ldLmF0dGFjaGVkRmlsZU5hbWUgPSBkYXRhLmZpbGVzW2ldLm5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5zdWJtaXQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1EYXRhOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhbnRpRm9yZ2VyeVRva2VuID0gJChcImlucHV0W25hbWU9X19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW5dXCIpLnZhbCgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ3BhdGgnLCB2YWx1ZTogdGVtcFVwbG9hZEZvbGRlciB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW4nLCB2YWx1ZTogYW50aUZvcmdlcnlUb2tlbiB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnX19jaHVua2VkRmlsZVVwbG9hZElkJywgdmFsdWU6IGNodW5rZWRGaWxlVXBsb2FkSWQgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGRvbmU6IGZ1bmN0aW9uIChlLCBkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuZXdNZWRpYUl0ZW1zID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvcm1zZyA9IFwiXCI7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5yZXN1bHQuZmlsZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhLnJlc3VsdC5maWxlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEucmVzdWx0LmZpbGVzW2ldLmlzTmV3ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2lmIGVycm9yIGlzIGRlZmluZWQgcHJvYmFibHkgdGhlIGZpbGUgdHlwZSBpcyBub3QgYWxsb3dlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLnJlc3VsdC5maWxlc1tpXS5lcnJvciA9PT0gdW5kZWZpbmVkIHx8IGRhdGEucmVzdWx0LmZpbGVzW2ldLmVycm9yID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEucmVzdWx0LmZpbGVzW2ldLmF0dGFjaGVkRmlsZU5hbWUgPSBkYXRhLmZpbGVzW2ldLmF0dGFjaGVkRmlsZU5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld01lZGlhSXRlbXMucHVzaChkYXRhLnJlc3VsdC5maWxlc1tpXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3Jtc2cgKz0gZGF0YS5yZXN1bHQuZmlsZXNbaV0uZXJyb3IgKyBcIlxcblwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3Jtc2cgIT09IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KGVycm9ybXNnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhuZXdNZWRpYUl0ZW1zKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld01lZGlhSXRlbXMubGVuZ3RoID4gMSAmJiBhbGxvd011bHRpcGxlID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoJCgnI29ubHlPbmVJdGVtTWVzc2FnZScpLnZhbCgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhRmllbGRBcHAubWVkaWFJdGVtcy5wdXNoKG5ld01lZGlhSXRlbXNbMF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFGaWVsZEFwcC5pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWRpYUZpZWxkQXBwLm1lZGlhSXRlbXMgPSBtZWRpYUZpZWxkQXBwLm1lZGlhSXRlbXMuY29uY2F0KG5ld01lZGlhSXRlbXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFGaWVsZEFwcC5pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoanFYSFIsIHRleHRTdGF0dXMsIGVycm9yVGhyb3duKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBvbiB1cGxvYWQuJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGpxWEhSKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2codGV4dFN0YXR1cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yVGhyb3duKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLm9uKCdmaWxldXBsb2FkY2h1bmtiZWZvcmVzZW5kJywgKGUsIG9wdGlvbnMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZmlsZSA9IG9wdGlvbnMuZmlsZXNbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gSGVyZSB3ZSByZXBsYWNlIHRoZSBibG9iIHdpdGggYSBGaWxlIG9iamVjdCB0byBlbnN1cmUgdGhlIGZpbGUgbmFtZSBhbmQgb3RoZXJzIGFyZSBwcmVzZXJ2ZWQgZm9yIHRoZSBiYWNrZW5kLlxyXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuYmxvYiA9IG5ldyBGaWxlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9ucy5ibG9iXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBmaWxlLnR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IGZpbGUubGFzdE1vZGlmaWVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbWV0aG9kczoge1xyXG4gICAgICAgICAgICBzZWxlY3RNZWRpYTogZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEgPSBtZWRpYTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZ2V0VW5pcXVlSWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAneHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4Jy5yZXBsYWNlKC9beHldL2csIGZ1bmN0aW9uIChjKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHIgPSBNYXRoLnJhbmRvbSgpICogMTYgfCAwLCB2ID0gYyA9PT0gJ3gnID8gciA6IChyICYgMHgzIHwgMHg4KTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdi50b1N0cmluZygxNik7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcmVtb3ZlU2VsZWN0ZWQ6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHJlbW92ZWQgPSB7fTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkTWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLm1lZGlhSXRlbXMgJiYgdGhpcy5tZWRpYUl0ZW1zLmluZGV4T2YodGhpcy5zZWxlY3RlZE1lZGlhKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVkID0gdGhpcy5tZWRpYUl0ZW1zW2luZGV4XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZC5pc1JlbW92ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3RoaXMubWVkaWFJdGVtcy5zcGxpY2UoW2luZGV4XSwgMSwgcmVtb3ZlZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWFJdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFRoZSByZW1vdmUgYnV0dG9uIGNhbiBhbHNvIHJlbW92ZSBhIHVuaXF1ZSBtZWRpYSBpdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWVkaWFJdGVtcy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZCA9IHRoaXMubWVkaWFJdGVtc1tpbmRleF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWQuaXNSZW1vdmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy90aGlzLm1lZGlhSXRlbXMuc3BsaWNlKDAsIDEsIHJlbW92ZWQpOyAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lZGlhSXRlbXMuc3BsaWNlKDAsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYSA9IG51bGw7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNob3dNZWRpYVRleHRNb2RhbDogZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lZGlhVGV4dE1vZGFsID0gbmV3IGJvb3RzdHJhcC5Nb2RhbCh0aGlzLiRyZWZzLm1lZGlhVGV4dE1vZGFsKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubWVkaWFUZXh0TW9kYWwuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5iYWNrdXBNZWRpYVRleHQgPSB0aGlzLnNlbGVjdGVkTWVkaWEubWVkaWFUZXh0O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjYW5jZWxNZWRpYVRleHRNb2RhbDogZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lZGlhVGV4dE1vZGFsLmhpZGUoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYS5tZWRpYVRleHQgPSB0aGlzLmJhY2t1cE1lZGlhVGV4dDtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2hvd0FuY2hvck1vZGFsOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYW5jaG9yaW5nTW9kYWwgPSBuZXcgYm9vdHN0cmFwLk1vZGFsKHRoaXMuJHJlZnMuYW5jaG9yaW5nTW9kYWwpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hbmNob3JpbmdNb2RhbC5zaG93KCk7XHJcbiAgICAgICAgICAgICAgICAvLyBDYXVzZSBhIHJlZnJlc2ggdG8gcmVjYWxjIGhlaWdodHMuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHg6IHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IueCxcclxuICAgICAgICAgICAgICAgICAgICB5OiB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yLnlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuYmFja3VwQW5jaG9yID0gdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvcjtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY2FuY2VsQW5jaG9yaW5nTW9kYWw6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hbmNob3JpbmdNb2RhbC5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yID0gdGhpcy5iYWNrdXBBbmNob3I7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHJlc2V0QW5jaG9yOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IgPSB7IHg6IDAuNSwgeTogMC41IH07XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG9uQW5jaG9yRHJvcDogZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW1hZ2UgPSB0aGlzLiRyZWZzLmFuY2hvckltYWdlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvciA9IHtcclxuICAgICAgICAgICAgICAgICAgICB4OiBldmVudC5vZmZzZXRYIC8gaW1hZ2UuY2xpZW50V2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgeTogZXZlbnQub2Zmc2V0WSAvIGltYWdlLmNsaWVudEhlaWdodFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBhbmNob3JMZWZ0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy4kcmVmcy5hbmNob3JJbWFnZSAmJiB0aGlzLiRyZWZzLm1vZGFsQm9keSAmJiB0aGlzLnNlbGVjdGVkTWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIGltYWdlIGlzIHNocnVuayBjb21wYXJlIGFnYWluc3QgdGhlIG1vZGFsIGJvZHkuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9ICh0aGlzLiRyZWZzLm1vZGFsQm9keS5jbGllbnRXaWR0aCAtIHRoaXMuJHJlZnMuYW5jaG9ySW1hZ2UuY2xpZW50V2lkdGgpIC8gMjtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcG9zaXRpb24gPSAodGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvci54ICogdGhpcy4kcmVmcy5hbmNob3JJbWFnZS5jbGllbnRXaWR0aCkgKyBvZmZzZXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uIDwgMTcpIHsgLy8gQWRqdXN0IHNvIHRoZSB0YXJnZXQgZG9lc24ndCBzaG93IG91dHNpZGUgaW1hZ2UuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gMTc7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbiAtIDg7IC8vIEFkanVzdCB0byBoaXQgdGhlIG1vdXNlIHBvaW50ZXIuXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbiArICdweCc7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnMCc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGFuY2hvclRvcDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuJHJlZnMuYW5jaG9ySW1hZ2UgJiYgdGhpcy5zZWxlY3RlZE1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvci55ICogdGhpcy4kcmVmcy5hbmNob3JJbWFnZS5jbGllbnRIZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uIDwgMTUpIHsgLy8gQWRqdXN0bWVudCBzbyB0aGUgdGFyZ2V0IGRvZXNuJ3Qgc2hvdyBvdXRzaWRlIGltYWdlLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IDE1O1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb24gKyA1OyAvLyBBZGp1c3QgdG8gaGl0IHRoZSBtb3VzZSBwb2ludGVyLlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcG9zaXRpb24gKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJzAnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXRBbmNob3I6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGltYWdlID0gdGhpcy4kcmVmcy5hbmNob3JJbWFnZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgeDogZXZlbnQub2Zmc2V0WCAvIGltYWdlLmNsaWVudFdpZHRoLFxyXG4gICAgICAgICAgICAgICAgICAgIHk6IGV2ZW50Lm9mZnNldFkgLyBpbWFnZS5jbGllbnRIZWlnaHRcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgYWRkTWVkaWFGaWxlczogZnVuY3Rpb24gKGZpbGVzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoKGZpbGVzLmxlbmd0aCA+IDEpICYmIChhbGxvd011bHRpcGxlID09PSBmYWxzZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBhbGVydCgkKCcjb25seU9uZUl0ZW1NZXNzYWdlJykudmFsKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIG1lZGlhRmllbGRBcHAubWVkaWFJdGVtcy5wdXNoKGZpbGVzWzBdKTtcclxuICAgICAgICAgICAgICAgICAgICBtZWRpYUZpZWxkQXBwLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVkaWFGaWVsZEFwcC5tZWRpYUl0ZW1zID0gbWVkaWFGaWVsZEFwcC5tZWRpYUl0ZW1zLmNvbmNhdChmaWxlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVkaWFGaWVsZEFwcC5pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNlbGVjdEFuZERlbGV0ZU1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWRNZWRpYSA9IG1lZGlhO1xyXG4gICAgICAgICAgICAgICAgLy8gc2V0VGltZW91dCBiZWNhdXNlIHNvbWV0aW1lcyBcclxuICAgICAgICAgICAgICAgIC8vIHJlbW92ZVNlbGVjdGVkIHdhcyBjYWxsZWQgZXZlbiBiZWZvcmUgdGhlIG1lZGlhIHdhcyBzZXQuXHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZWxmLnJlbW92ZVNlbGVjdGVkKCk7XHJcbiAgICAgICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICB3YXRjaDoge1xyXG4gICAgICAgICAgICBtZWRpYUl0ZW1zOiB7XHJcbiAgICAgICAgICAgICAgICBkZWVwOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgaGFuZGxlcigpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBUcmlnZ2VyIHByZXZpZXcgcmVuZGVyaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7ICQoZG9jdW1lbnQpLnRyaWdnZXIoJ2NvbnRlbnRwcmV2aWV3OnJlbmRlcicpOyB9LCAxMDApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjdXJyZW50UHJlZnM6IGZ1bmN0aW9uIChuZXdQcmVmcykge1xyXG4gICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ21lZGlhRmllbGRQcmVmcycsIEpTT04uc3RyaW5naWZ5KG5ld1ByZWZzKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KSk7XHJcbn1cclxuIiwiZnVuY3Rpb24gaW5pdGlhbGl6ZU1lZGlhRmllbGQoZWwsIG1vZGFsQm9keUVsZW1lbnQsIG1lZGlhSXRlbVVybCwgYWxsb3dNdWx0aXBsZSwgYWxsb3dNZWRpYVRleHQsIGFsbG93QW5jaG9ycykge1xyXG4gICAgLy9CYWdQYXJ0IGNyZWF0ZSBhIHNjcmlwdCBzZWN0aW9uIHdpdGhvdXQgb3RoZXIgRE9NIGVsZW1lbnRzXHJcbiAgICBpZihlbCA9PT0gbnVsbClcclxuICAgICAgICByZXR1cm47XHJcbiAgICBcclxuICAgIHZhciB0YXJnZXQgPSAkKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCQoZWwpLmRhdGEoJ2ZvcicpKSk7XHJcbiAgICB2YXIgaW5pdGlhbFBhdGhzID0gdGFyZ2V0LmRhdGEoXCJpbml0XCIpO1xyXG5cclxuICAgIHZhciBtZWRpYUZpZWxkRWRpdG9yID0gJChlbCk7XHJcbiAgICB2YXIgaWRwcmVmaXggPSBtZWRpYUZpZWxkRWRpdG9yLmF0dHIoXCJpZFwiKTtcclxuICAgIHZhciBtZWRpYUZpZWxkQXBwO1xyXG5cclxuICAgIC8vd2hlbiBoaWRlIG1vZGFsIGRldGFjaCBtZWRpYSBhcHAgdG8gYXZvaWQgaXNzdWUgb24gQmFnUGFydFxyXG4gICAgbW9kYWxCb2R5RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdoaWRkZW4uYnMubW9kYWwnLCBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAkKFwiI21lZGlhQXBwXCIpLmFwcGVuZFRvKCdib2R5Jyk7XHJcbiAgICAgICAgJChcIiNtZWRpYUFwcFwiKS5oaWRlKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBtZWRpYUZpZWxkQXBwcy5wdXNoKG1lZGlhRmllbGRBcHAgPSBuZXcgVnVlKHtcclxuICAgICAgICBlbDogbWVkaWFGaWVsZEVkaXRvci5nZXQoMCksXHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICBtZWRpYUl0ZW1zOiBbXSxcclxuICAgICAgICAgICAgc2VsZWN0ZWRNZWRpYTogbnVsbCxcclxuICAgICAgICAgICAgc21hbGxUaHVtYnM6IGZhbHNlLFxyXG4gICAgICAgICAgICBpZFByZWZpeDogaWRwcmVmaXgsXHJcbiAgICAgICAgICAgIGluaXRpYWxpemVkOiBmYWxzZSxcclxuICAgICAgICAgICAgYWxsb3dNZWRpYVRleHQ6IGFsbG93TWVkaWFUZXh0LFxyXG4gICAgICAgICAgICBiYWNrdXBNZWRpYVRleHQ6ICcnLFxyXG4gICAgICAgICAgICBhbGxvd0FuY2hvcnM6IGFsbG93QW5jaG9ycyxcclxuICAgICAgICAgICAgYmFja3VwQW5jaG9yOiBudWxsLFxyXG4gICAgICAgICAgICBtZWRpYVRleHRNb2RhbDogbnVsbCxcclxuICAgICAgICAgICAgYW5jaG9yaW5nTW9kYWw6IG51bGxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgICAgICAgICAgc2VsZi5jdXJyZW50UHJlZnMgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdtZWRpYUZpZWxkUHJlZnMnKSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjb21wdXRlZDoge1xyXG4gICAgICAgICAgICBwYXRoczoge1xyXG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1lZGlhUGF0aHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGluaXRpYWxQYXRocyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWFJdGVtcy5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4Lm1lZGlhUGF0aCA9PT0gJ25vdC1mb3VuZCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZWRpYVBhdGhzLnB1c2goeyBwYXRoOiB4Lm1lZGlhUGF0aCwgbWVkaWFUZXh0OiB4Lm1lZGlhVGV4dCwgYW5jaG9yOiB4LmFuY2hvciB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkobWVkaWFQYXRocyk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBtZWRpYVBhdGhzID0gdmFsdWVzIHx8IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzaWduYWwgPSAkLkRlZmVycmVkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW1zID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVkaWFQYXRocy5mb3JFYWNoKGZ1bmN0aW9uICh4LCBpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goeyBuYW1lOiAnICcgKyB4LnBhdGgsIG1pbWU6ICcnLCBtZWRpYVBhdGg6ICcnIH0pOyAvLyBkb24ndCByZW1vdmUgdGhlIHNwYWNlLiBTb21ldGhpbmcgZGlmZmVyZW50IGlzIG5lZWRlZCBvciBpdCB3b250IHJlYWN0IHdoZW4gdGhlIHJlYWwgbmFtZSBhcnJpdmVzLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlID0gJC53aGVuKHNpZ25hbCkuZG9uZShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogbWVkaWFJdGVtVXJsICsgXCI/cGF0aD1cIiArIGVuY29kZVVSSUNvbXBvbmVudCh4LnBhdGgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS52dWVrZXkgPSBkYXRhLm5hbWUgKyBpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEubWVkaWFUZXh0ID0geC5tZWRpYVRleHQ7IC8vIFRoaXMgdmFsdWUgaXMgbm90IHJldHVybmVkIGZyb20gdGhlIGFqYXggY2FsbC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5hbmNob3IgPSB4LmFuY2hvcjsgLy8gVGhpcyB2YWx1ZSBpcyBub3QgcmV0dXJuZWQgZnJvbSB0aGUgYWpheCBjYWxsLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5zcGxpY2UoaSwgMSwgZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtcy5sZW5ndGggPT09ICsrbGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5mb3JFYWNoKGZ1bmN0aW9uICh5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tZWRpYUl0ZW1zLnB1c2goeSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMuc3BsaWNlKGksIDEsIHsgbmFtZTogeC5wYXRoLCBtaW1lOiAnJywgbWVkaWFQYXRoOiAnbm90LWZvdW5kJywgbWVkaWFUZXh0OiAnJywgYW5jaG9yOiB7IHg6IDAsIHk6IDAgfSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gKytsZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1lZGlhSXRlbXMucHVzaCh4KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIHNpZ25hbC5yZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGZpbGVTaXplOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5yb3VuZCh0aGlzLnNlbGVjdGVkTWVkaWEuc2l6ZSAvIDEwMjQpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjYW5BZGRNZWRpYTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWVkaWFJdGVtcy5sZW5ndGggPT09IDAgfHwgdGhpcy5tZWRpYUl0ZW1zLmxlbmd0aCA+IDAgJiYgYWxsb3dNdWx0aXBsZTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdGh1bWJTaXplOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zbWFsbFRodW1icyA/IDEyMCA6IDI0MDtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY3VycmVudFByZWZzOiB7XHJcbiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzbWFsbFRodW1iczogdGhpcy5zbWFsbFRodW1ic1xyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAobmV3UHJlZnMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIW5ld1ByZWZzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zbWFsbFRodW1icyA9IG5ld1ByZWZzLnNtYWxsVGh1bWJzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgICAgIHNlbGYucGF0aHMgPSBpbml0aWFsUGF0aHM7XHJcblxyXG4gICAgICAgICAgICBzZWxmLiRvbignc2VsZWN0QW5kRGVsZXRlTWVkaWFSZXF1ZXN0ZWQnLCBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0QW5kRGVsZXRlTWVkaWEobWVkaWEpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHNlbGYuJG9uKCdzZWxlY3RNZWRpYVJlcXVlc3RlZCcsIGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RNZWRpYShtZWRpYSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgc2VsZi4kb24oJ2ZpbGVzVXBsb2FkZWQnLCBmdW5jdGlvbiAoZmlsZXMpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYuYWRkTWVkaWFGaWxlcyhmaWxlcyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbWV0aG9kczoge1xyXG4gICAgICAgICAgICBzZWxlY3RNZWRpYTogZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEgPSBtZWRpYTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2hvd01vZGFsOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICAgICAgICAgIGlmIChzZWxmLmNhbkFkZE1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJChcIiNtZWRpYUFwcFwiKS5hcHBlbmRUbygkKG1vZGFsQm9keUVsZW1lbnQpLmZpbmQoJy5tb2RhbC1ib2R5JykpO1xyXG4gICAgICAgICAgICAgICAgICAgICQoXCIjbWVkaWFBcHBcIikuc2hvdygpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB2YXIgbW9kYWwgPSBuZXcgYm9vdHN0cmFwLk1vZGFsKG1vZGFsQm9keUVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIG1vZGFsLnNob3coKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgJChtb2RhbEJvZHlFbGVtZW50KS5maW5kKCcubWVkaWFGaWVsZFNlbGVjdEJ1dHRvbicpLm9mZignY2xpY2snKS5vbignY2xpY2snLCBmdW5jdGlvbiAodikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFkZE1lZGlhRmlsZXMobWVkaWFBcHAuc2VsZWN0ZWRNZWRpYXMpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgZG9uJ3Qgd2FudCB0aGUgaW5jbHVkZWQgbWVkaWFzIHRvIGJlIHN0aWxsIHNlbGVjdGVkIHRoZSBuZXh0IHRpbWUgd2Ugb3BlbiB0aGUgbW9kYWwuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhQXBwLnNlbGVjdGVkTWVkaWFzID0gW107XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RhbC5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzaG93TWVkaWFUZXh0TW9kYWw6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tZWRpYVRleHRNb2RhbCA9IG5ldyBib290c3RyYXAuTW9kYWwodGhpcy4kcmVmcy5tZWRpYVRleHRNb2RhbCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lZGlhVGV4dE1vZGFsLnNob3coKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmFja3VwTWVkaWFUZXh0ID0gdGhpcy5zZWxlY3RlZE1lZGlhLm1lZGlhVGV4dDtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY2FuY2VsTWVkaWFUZXh0TW9kYWw6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tZWRpYVRleHRNb2RhbC5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEubWVkaWFUZXh0ID0gdGhpcy5iYWNrdXBNZWRpYVRleHQ7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNob3dBbmNob3JNb2RhbDogZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFuY2hvcmluZ01vZGFsID0gbmV3IGJvb3RzdHJhcC5Nb2RhbCh0aGlzLiRyZWZzLmFuY2hvcmluZ01vZGFsKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYW5jaG9yaW5nTW9kYWwuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgLy8gQ2F1c2UgYSByZWZyZXNoIHRvIHJlY2FsYyBoZWlnaHRzLlxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvciA9IHtcclxuICAgICAgICAgICAgICAgICAgeDogdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvci54LFxyXG4gICAgICAgICAgICAgICAgICB5OiB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yLnlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuYmFja3VwQW5jaG9yID0gdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvcjtcclxuICAgICAgICAgICAgfSwgICAgICAgICAgICBcclxuICAgICAgICAgICAgY2FuY2VsQW5jaG9yaW5nTW9kYWw6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hbmNob3JpbmdNb2RhbC5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yID0gdGhpcy5iYWNrdXBBbmNob3I7XHJcbiAgICAgICAgICAgIH0sICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHJlc2V0QW5jaG9yOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IgPSB7IHg6IDAuNSwgeTogMC41IH07XHJcbiAgICAgICAgICAgIH0sICBcclxuICAgICAgICAgICAgb25BbmNob3JEcm9wOiBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGltYWdlID0gdGhpcy4kcmVmcy5hbmNob3JJbWFnZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IgPSB7XHJcbiAgICAgICAgICAgICAgICAgICB4OiBldmVudC5vZmZzZXRYIC8gaW1hZ2UuY2xpZW50V2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgICB5OiBldmVudC5vZmZzZXRZIC8gaW1hZ2UuY2xpZW50SGVpZ2h0XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGFuY2hvckxlZnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLiRyZWZzLmFuY2hvckltYWdlICYmIHRoaXMuJHJlZnMubW9kYWxCb2R5ICYmIHRoaXMuc2VsZWN0ZWRNZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFdoZW4gaW1hZ2UgaXMgc2hydW5rIGNvbXBhcmUgYWdhaW5zdCB0aGUgbW9kYWwgYm9keS5cclxuICAgICAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gKHRoaXMuJHJlZnMubW9kYWxCb2R5LmNsaWVudFdpZHRoIC0gdGhpcy4kcmVmcy5hbmNob3JJbWFnZS5jbGllbnRXaWR0aCkgLyAyO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9ICh0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yLnggKiB0aGlzLiRyZWZzLmFuY2hvckltYWdlLmNsaWVudFdpZHRoKSArIG9mZnNldDtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgYW5jaG9ySWNvbiA9IE1hdGgucm91bmQodGhpcy4kcmVmcy5tb2RhbEJvZHkucXVlcnlTZWxlY3RvcignLmljb24tbWVkaWEtYW5jaG9yJykuY2xpZW50V2lkdGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKE51bWJlci5pc0ludGVnZXIoYW5jaG9ySWNvbikpXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uIC0gYW5jaG9ySWNvbi8yO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcG9zaXRpb24gKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJzAnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBhbmNob3JUb3A6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLiRyZWZzLmFuY2hvckltYWdlICYmIHRoaXMuc2VsZWN0ZWRNZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9IHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IueSAqIHRoaXMuJHJlZnMuYW5jaG9ySW1hZ2UuY2xpZW50SGVpZ2h0O1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbiArICdweCc7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnMCc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNldEFuY2hvcjogZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW1hZ2UgPSB0aGlzLiRyZWZzLmFuY2hvckltYWdlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvciA9IHtcclxuICAgICAgICAgICAgICAgICAgICB4OiBldmVudC5vZmZzZXRYIC8gaW1hZ2UuY2xpZW50V2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgeTogZXZlbnQub2Zmc2V0WSAvIGltYWdlLmNsaWVudEhlaWdodFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCAgICAgICAgIFxyXG4gICAgICAgICAgICBhZGRNZWRpYUZpbGVzOiBmdW5jdGlvbiAoZmlsZXMpIHtcclxuICAgICAgICAgICAgICAgIGlmICgoZmlsZXMubGVuZ3RoID4gMSkgJiYgKGFsbG93TXVsdGlwbGUgPT09IGZhbHNlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFsZXJ0KCQoJyNvbmx5T25lSXRlbU1lc3NhZ2UnKS52YWwoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVkaWFGaWVsZEFwcC5tZWRpYUl0ZW1zLnB1c2goZmlsZXNbMF0pO1xyXG4gICAgICAgICAgICAgICAgICAgIG1lZGlhRmllbGRBcHAuaW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBtZWRpYUZpZWxkQXBwLm1lZGlhSXRlbXMgPSBtZWRpYUZpZWxkQXBwLm1lZGlhSXRlbXMuY29uY2F0KGZpbGVzKTtcclxuICAgICAgICAgICAgICAgICAgICBtZWRpYUZpZWxkQXBwLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcmVtb3ZlU2VsZWN0ZWQ6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRNZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMubWVkaWFJdGVtcyAmJiB0aGlzLm1lZGlhSXRlbXMuaW5kZXhPZih0aGlzLnNlbGVjdGVkTWVkaWEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWFJdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFRoZSByZW1vdmUgYnV0dG9uIGNhbiBhbHNvIHJlbW92ZSBhIHVuaXF1ZSBtZWRpYSBpdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWVkaWFJdGVtcy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZWRpYUl0ZW1zLnNwbGljZSgwLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEgPSBudWxsO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZWxlY3RBbmREZWxldGVNZWRpYTogZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkTWVkaWEgPSBtZWRpYTtcclxuICAgICAgICAgICAgICAgIC8vIHNldFRpbWVvdXQgYmVjYXVzZSBzb21ldGltZXMgcmVtb3ZlU2VsZWN0ZWQgd2FzIGNhbGxlZCBldmVuIGJlZm9yZSB0aGUgbWVkaWEgd2FzIHNldC5cclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYucmVtb3ZlU2VsZWN0ZWQoKTtcclxuICAgICAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHdhdGNoOiB7XHJcbiAgICAgICAgICAgIG1lZGlhSXRlbXM6IHtcclxuICAgICAgICAgICAgICAgIGRlZXA6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBoYW5kbGVyICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBUcmlnZ2VyIHByZXZpZXcgcmVuZGVyaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7ICQoZG9jdW1lbnQpLnRyaWdnZXIoJ2NvbnRlbnRwcmV2aWV3OnJlbmRlcicpOyB9LCAxMDApOyBcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgICAgICAgICAgICBcclxuICAgICAgICAgICAgY3VycmVudFByZWZzOiBmdW5jdGlvbiAobmV3UHJlZnMpIHtcclxuICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdtZWRpYUZpZWxkUHJlZnMnLCBKU09OLnN0cmluZ2lmeShuZXdQcmVmcykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSkpO1xyXG59XHJcbiIsIi8vIGRpZmZlcmVudCBtZWRpYSBmaWVsZCBlZGl0b3JzIHdpbGwgYWRkIHRoZW1zZWx2ZXMgdG8gdGhpcyBhcnJheVxyXG52YXIgbWVkaWFGaWVsZEFwcHMgPSBbXTtcclxuIiwiLy8gPG1lZGlhLWZpZWxkLXRodW1icy1jb250YWluZXI+IGNvbXBvbmVudCBcclxuLy8gZGlmZmVyZW50IG1lZGlhIGZpZWxkIGVkaXRvcnMgc2hhcmUgdGhpcyBjb21wb25lbnQgdG8gcHJlc2VudCB0aGUgdGh1bWJzLlxyXG5WdWUuY29tcG9uZW50KCdtZWRpYUZpZWxkVGh1bWJzQ29udGFpbmVyJywge1xyXG4gICAgdGVtcGxhdGU6ICdcXFxyXG4gICAgICAgPGRpdiA6aWQ9XCJpZFByZWZpeCArIFxcJ19tZWRpYUNvbnRhaW5lck1haW5cXCdcIiB2LWNsb2FrPlxcXHJcbiAgICAgICAgIDxkaXYgdi1pZj1cIm1lZGlhSXRlbXMubGVuZ3RoIDwgMVwiIGNsYXNzPVwiY2FyZCB0ZXh0LWNlbnRlclwiPlxcXHJcbiAgICAgICAgICAgICA8ZGl2IGNsYXNzPSBcImNhcmQtYm9keVwiID5cXFxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJoaW50XCI+e3tULm5vSW1hZ2VzfX08L3NwYW4+XFxcclxuICAgICAgICAgICAgIDwvZGl2PlxcXHJcbiAgICAgICAgIDwvZGl2PlxcXHJcbiAgICAgICAgIDxkcmFnZ2FibGUgOmxpc3Q9XCJtZWRpYUl0ZW1zXCIgdGFnPVwib2xcIiBjbGFzcz1cInJvdyBtZWRpYS1pdGVtcy1ncmlkXCIgPlxcXHJcbiAgICAgICAgICAgIDxsaSB2LWZvcj1cIm1lZGlhIGluIG1lZGlhSXRlbXNcIlxcXHJcbiAgICAgICAgICAgICAgICA6a2V5PVwibWVkaWEudnVla2V5XCIgXFxcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwibWVkaWEtY29udGFpbmVyLW1haW4tbGlzdC1pdGVtIGNhcmQgcC0wXCJcXFxyXG4gICAgICAgICAgICAgICAgOnN0eWxlPVwie3dpZHRoOiB0aHVtYlNpemUgKyAyICsgXFwncHhcXCd9XCJcXFxyXG4gICAgICAgICAgICAgICAgOmNsYXNzPVwie3NlbGVjdGVkOiBzZWxlY3RlZE1lZGlhID09IG1lZGlhfVwiXFxcclxuICAgICAgICAgICAgICAgIHYtb246Y2xpY2s9XCJzZWxlY3RNZWRpYShtZWRpYSlcIiB2LWlmPVwiIW1lZGlhLmlzUmVtb3ZlZFwiPlxcXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPVwibWVkaWEubWVkaWFQYXRoIT09IFxcJ25vdC1mb3VuZFxcJ1wiPlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aHVtYi1jb250YWluZXJcIiA6c3R5bGU9XCJ7aGVpZ2h0OiB0aHVtYlNpemUgKyBcXCdweFxcJ31cIiA+XFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgdi1pZj1cIm1lZGlhLm1pbWUuc3RhcnRzV2l0aChcXCdpbWFnZVxcJylcIiBcXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOnNyYz1cImJ1aWxkTWVkaWFVcmwobWVkaWEudXJsLCB0aHVtYlNpemUpXCIgXFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpkYXRhLW1pbWU9XCJtZWRpYS5taW1lXCJcXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOnN0eWxlPVwie21heEhlaWdodDogdGh1bWJTaXplICsgXFwncHhcXCcgLCBtYXhXaWR0aDogdGh1bWJTaXplICsgXFwncHhcXCd9XCIvPlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSB2LWVsc2UgY2xhc3M9XCJmYS1yZWd1bGFyIGZhLWZpbGUgZGlzcGxheS0xXCIgOmRhdGEtbWltZT1cIm1lZGlhLm1pbWVcIj48L2k+XFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVkaWEtY29udGFpbmVyLW1haW4taXRlbS10aXRsZSBjYXJkLWJvZHlcIj5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiBjbGFzcz1cImJ0biBidG4tbGlnaHQgYnRuLXNtIGZsb2F0LWVuZCBpbmxpbmUtbWVkaWEtYnV0dG9uIGRlbGV0ZS1idXR0b25cIlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtb246Y2xpY2suc3RvcD1cInNlbGVjdEFuZERlbGV0ZU1lZGlhKG1lZGlhKVwiPjxpIGNsYXNzPVwiZmEtc29saWQgZmEtdHJhc2hcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9hPlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgOmhyZWY9XCJtZWRpYS51cmxcIiB0YXJnZXQ9XCJfYmxhbmtcIiBjbGFzcz1cImJ0biBidG4tbGlnaHQgYnRuLXNtIGZsb2F0LWVuZCBpbmxpbmUtbWVkaWEtYnV0dG9uIHZpZXctYnV0dG9uXCJcIj48aSBjbGFzcz1cImZhLXNvbGlkIGZhLWRvd25sb2FkXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPjwvYT4gXFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lZGlhLWZpbGVuYW1lIGNhcmQtdGV4dCBzbWFsbFwiIDp0aXRsZT1cIm1lZGlhLm1lZGlhUGF0aFwiPnt7IG1lZGlhLmlzTmV3ID8gbWVkaWEubmFtZS5zdWJzdHIoMzYpIDogbWVkaWEubmFtZSB9fTwvc3Bhbj5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxcclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgdi1lbHNlPlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aHVtYi1jb250YWluZXIgZmxleC1jb2x1bW5cIiA6c3R5bGU9XCJ7aGVpZ2h0OiB0aHVtYlNpemUgKyBcXCdweFxcJ31cIj5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1iYW4gdGV4dC1kYW5nZXIgZC1ibG9ja1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlciBzbWFsbCBkLWJsb2NrXCI+e3sgVC5tZWRpYU5vdEZvdW5kIH19PC9zcGFuPlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyIHNtYWxsIGQtYmxvY2sgdGV4dC1jZW50ZXJcIj57eyBULmRpc2NhcmRXYXJuaW5nIH19PC9zcGFuPlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZWRpYS1jb250YWluZXItbWFpbi1pdGVtLXRpdGxlIGNhcmQtYm9keVwiPlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IGJ0bi1zbSBmbG9hdC1lbmQgaW5saW5lLW1lZGlhLWJ1dHRvbiBkZWxldGUtYnV0dG9uXCJcXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtb246Y2xpY2suc3RvcD1cInNlbGVjdEFuZERlbGV0ZU1lZGlhKG1lZGlhKVwiPjxpIGNsYXNzPVwiZmEtc29saWQgZmEtdHJhc2hcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9hPlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lZGlhLWZpbGVuYW1lIGNhcmQtdGV4dCBzbWFsbCB0ZXh0LWRhbmdlclwiIDp0aXRsZT1cIm1lZGlhLm5hbWVcIj57eyBtZWRpYS5uYW1lIH19PC9zcGFuPlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcXHJcbiAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXFxyXG4gICAgICAgICAgICA8L2xpPlxcXHJcbiAgICAgICAgIDwvZHJhZ2dhYmxlPlxcXHJcbiAgICAgICA8L2Rpdj5cXFxyXG4gICAgJyxcclxuICAgIGRhdGE6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBUOiB7fVxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG4gICAgcHJvcHM6IHtcclxuICAgICAgICBtZWRpYUl0ZW1zOiBBcnJheSxcclxuICAgICAgICBzZWxlY3RlZE1lZGlhOiBPYmplY3QsXHJcbiAgICAgICAgdGh1bWJTaXplOiBOdW1iZXIsXHJcbiAgICAgICAgaWRQcmVmaXg6IFN0cmluZ1xyXG4gICAgfSxcclxuICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgICAgICAvLyByZXRyaWV2aW5nIGxvY2FsaXplZCBzdHJpbmdzIGZyb20gdmlld1xyXG4gICAgICAgIHNlbGYuVC5tZWRpYU5vdEZvdW5kID0gJCgnI3QtbWVkaWEtbm90LWZvdW5kJykudmFsKCk7XHJcbiAgICAgICAgc2VsZi5ULmRpc2NhcmRXYXJuaW5nID0gJCgnI3QtZGlzY2FyZC13YXJuaW5nJykudmFsKCk7XHJcbiAgICAgICAgc2VsZi5ULm5vSW1hZ2VzID0gJCgnI3Qtbm8taW1hZ2VzJykudmFsKCk7XHJcbiAgICB9LFxyXG4gICAgbWV0aG9kczoge1xyXG4gICAgICAgIHNlbGVjdEFuZERlbGV0ZU1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgdGhpcy4kcGFyZW50LiRlbWl0KCdzZWxlY3RBbmREZWxldGVNZWRpYVJlcXVlc3RlZCcsIG1lZGlhKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNlbGVjdE1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgdGhpcy4kcGFyZW50LiRlbWl0KCdzZWxlY3RNZWRpYVJlcXVlc3RlZCcsIG1lZGlhKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGJ1aWxkTWVkaWFVcmw6IGZ1bmN0aW9uICh1cmwsIHRodW1iU2l6ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdXJsICsgKHVybC5pbmRleE9mKCc/JykgPT0gLTEgPyAnPycgOiAnJicpICsgJ3dpZHRoPScgKyB0aHVtYlNpemUgKyAnJmhlaWdodD0nICsgdGh1bWJTaXplO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcbiIsIi8vIDx1cGxvYWQ+IGNvbXBvbmVudFxyXG5WdWUuY29tcG9uZW50KCd1cGxvYWQnLCB7XHJcbiAgICB0ZW1wbGF0ZTogJ1xcXHJcbiAgICAgICAgPGRpdiA6Y2xhc3M9XCJ7IFxcJ3VwbG9hZC13YXJuaW5nXFwnIDogbW9kZWwuZXJyb3JNZXNzYWdlIH1cIiBjbGFzcz1cInVwbG9hZCBtLTIgcC0yIHB0LTBcIj4gXFxcclxuICAgICAgICAgICAgPHNwYW4gdi1pZj1cIm1vZGVsLmVycm9yTWVzc2FnZVwiIHYtb246Y2xpY2s9XCJkaXNtaXNzV2FybmluZygpXCIgY2xhc3M9XCJjbG9zZS13YXJuaW5nXCI+PGkgY2xhc3M9XCJmYS1zb2xpZCBmYS10aW1lc1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT4gPC9zcGFuPlxcXHJcbiAgICAgICAgICAgIDxwIGNsYXNzPVwidXBsb2FkLW5hbWVcIiA6dGl0bGU9XCJtb2RlbC5lcnJvck1lc3NhZ2VcIj57eyBtb2RlbC5uYW1lIH19PC9wPiBcXFxyXG4gICAgICAgICAgICA8ZGl2PiBcXFxyXG4gICAgICAgICAgICAgICA8c3BhbiB2LXNob3c9XCIhbW9kZWwuZXJyb3JNZXNzYWdlXCIgOnN0eWxlPVwieyB3aWR0aDogbW9kZWwucGVyY2VudGFnZSArIFxcJyVcXCd9XCIgY2xhc3M9XCJwcm9ncmVzcy1iYXJcIj4gPC9zcGFuPiBcXFxyXG4gICAgICAgICAgICAgICA8c3BhbiB2LWlmPVwibW9kZWwuZXJyb3JNZXNzYWdlXCIgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCIgOnRpdGxlPVwibW9kZWwuZXJyb3JNZXNzYWdlXCI+IEVycm9yOiB7eyBtb2RlbC5lcnJvck1lc3NhZ2UgfX0gPC9zcGFuPiBcXFxyXG4gICAgICAgICAgICA8L2Rpdj4gXFxcclxuICAgICAgICA8L2Rpdj4gXFxcclxuICAgICAgICAnLFxyXG4gICAgcHJvcHM6IHtcclxuICAgICAgICBtb2RlbDogT2JqZWN0LFxyXG4gICAgICAgIHVwbG9hZElucHV0SWQ6IFN0cmluZ1xyXG4gICAgfSxcclxuICAgIG1vdW50ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdmFyIHVwbG9hZElucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc2VsZi51cGxvYWRJbnB1dElkID8/ICdmaWxldXBsb2FkJyk7XHJcbiAgICAgICAgJCh1cGxvYWRJbnB1dCkuYmluZCgnZmlsZXVwbG9hZHByb2dyZXNzJywgZnVuY3Rpb24gKGUsIGRhdGEpIHtcclxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsZXNbMF0ubmFtZSAhPT0gc2VsZi5tb2RlbC5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH0gICAgICAgICAgICBcclxuICAgICAgICAgICAgc2VsZi5tb2RlbC5wZXJjZW50YWdlID0gcGFyc2VJbnQoZGF0YS5sb2FkZWQgLyBkYXRhLnRvdGFsICogMTAwLCAxMCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICQodXBsb2FkSW5wdXQpLmJpbmQoJ2ZpbGV1cGxvYWRkb25lJywgZnVuY3Rpb24gKGUsIGRhdGEpIHtcclxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsZXNbMF0ubmFtZSAhPT0gc2VsZi5tb2RlbC5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGRhdGEucmVzdWx0LmZpbGVzWzBdLmVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZUZhaWx1cmUoZGF0YS5maWxlc1swXS5uYW1lLCBkYXRhLnJlc3VsdC5maWxlc1swXS5lcnJvcik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7ICBcclxuICAgICAgICAgICAgICAgIGJ1cy4kZW1pdCgncmVtb3ZhbFJlcXVlc3QnLCBzZWxmLm1vZGVsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAkKHVwbG9hZElucHV0KS5iaW5kKCdmaWxldXBsb2FkZmFpbCcsIGZ1bmN0aW9uIChlLCBkYXRhKSB7XHJcbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGVzWzBdLm5hbWUgIT09IHNlbGYubW9kZWwubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNlbGYuaGFuZGxlRmFpbHVyZShkYXRhLmZpbGVzWzBdLm5hbWUsICQoJyN0LWVycm9yJykudmFsKCkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSxcclxuICAgIG1ldGhvZHM6IHtcclxuICAgICAgICBoYW5kbGVGYWlsdXJlOiBmdW5jdGlvbiAoZmlsZU5hbWUsIG1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgaWYgKGZpbGVOYW1lICE9PSB0aGlzLm1vZGVsLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLm1vZGVsLmVycm9yTWVzc2FnZSA9IG1lc3NhZ2U7XHJcbiAgICAgICAgICAgIGJ1cy4kZW1pdCgnRXJyb3JPblVwbG9hZCcsIHRoaXMubW9kZWwpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGlzbWlzc1dhcm5pbmc6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdyZW1vdmFsUmVxdWVzdCcsIHRoaXMubW9kZWwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcbiIsIi8vIDx1cGxvYWQtbGlzdD4gY29tcG9uZW50XHJcblZ1ZS5jb21wb25lbnQoJ3VwbG9hZExpc3QnLCB7XHJcbiAgICB0ZW1wbGF0ZTogJ1xcXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInVwbG9hZC1saXN0XCIgdi1zaG93PVwiZmlsZXMubGVuZ3RoID4gMFwiPiBcXFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyXCIgQGNsaWNrPVwiZXhwYW5kZWQgPSAhZXhwYW5kZWRcIj4gXFxcclxuICAgICAgICAgICAgICAgIDxzcGFuPiB7eyBULnVwbG9hZHMgfX0gPC9zcGFuPiBcXFxyXG4gICAgICAgICAgICAgICAgPHNwYW4gdi1zaG93PVwicGVuZGluZ0NvdW50XCI+IChQZW5kaW5nOiB7eyBwZW5kaW5nQ291bnQgfX0pIDwvc3Bhbj4gXFxcclxuICAgICAgICAgICAgICAgIDxzcGFuIHYtc2hvdz1cImVycm9yQ291bnRcIiA6Y2xhc3M9XCJ7IFxcJ3RleHQtZGFuZ2VyXFwnIDogZXJyb3JDb3VudCB9XCI+ICgge3sgVC5lcnJvcnMgfX06IHt7IGVycm9yQ291bnQgfX0gLyA8YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgdi1vbjpjbGljay5zdG9wPVwiY2xlYXJFcnJvcnNcIiA+IHt7IFQuY2xlYXJFcnJvcnMgfX0gPC9hPik8L3NwYW4+IFxcXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRvZ2dsZS1idXR0b25cIj4gXFxcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtc2hvdz1cImV4cGFuZGVkXCI+IFxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtc29saWQgZmEtY2hldnJvbi1kb3duXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPiBcXFxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PiBcXFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgdi1zaG93PVwiIWV4cGFuZGVkXCI+IFxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtc29saWQgZmEtY2hldnJvbi11cFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT4gXFxcclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gXFxcclxuICAgICAgICAgICAgICAgIDwvZGl2PiBcXFxyXG4gICAgICAgICAgICA8L2Rpdj4gXFxcclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiIHYtc2hvdz1cImV4cGFuZGVkXCI+IFxcXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtd3JhcFwiPiBcXFxyXG4gICAgICAgICAgICAgICAgICAgIDx1cGxvYWQgOnVwbG9hZC1pbnB1dC1pZD1cInVwbG9hZElucHV0SWRcIiB2LWZvcj1cImYgaW4gZmlsZXNcIiA6a2V5PVwiZi5uYW1lXCIgIDptb2RlbD1cImZcIj48L3VwbG9hZD4gXFxcclxuICAgICAgICAgICAgICAgIDwvZGl2ID4gXFxcclxuICAgICAgICAgICAgPC9kaXY+IFxcXHJcbiAgICAgICAgPC9kaXY+IFxcXHJcbiAgICAgICAgJyxcclxuICAgIGRhdGE6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBmaWxlczogW10sXHJcbiAgICAgICAgICAgIFQ6IHt9LFxyXG4gICAgICAgICAgICBleHBhbmRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHBlbmRpbmdDb3VudDogMCxcclxuICAgICAgICAgICAgZXJyb3JDb3VudDogMFxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBwcm9wczoge1xyXG4gICAgICAgIHVwbG9hZElucHV0SWQ6IFN0cmluZ1xyXG4gICAgfSxcclxuICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgLy8gcmV0cmlldmluZyBsb2NhbGl6ZWQgc3RyaW5ncyBmcm9tIHZpZXdcclxuICAgICAgICBzZWxmLlQudXBsb2FkcyA9ICQoJyN0LXVwbG9hZHMnKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQuZXJyb3JzID0gJCgnI3QtZXJyb3JzJykudmFsKCk7XHJcbiAgICAgICAgc2VsZi5ULmNsZWFyRXJyb3JzID0gJCgnI3QtY2xlYXItZXJyb3JzJykudmFsKCk7XHJcbiAgICB9LFxyXG4gICAgY29tcHV0ZWQ6IHtcclxuICAgICAgICBmaWxlQ291bnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlsZXMubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHZhciB1cGxvYWRJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNlbGYudXBsb2FkSW5wdXRJZCA/PyAnZmlsZXVwbG9hZCcpO1xyXG4gICAgICAgICQodXBsb2FkSW5wdXQpLmJpbmQoJ2ZpbGV1cGxvYWRhZGQnLCBmdW5jdGlvbiAoZSwgZGF0YSkge1xyXG4gICAgICAgICAgICBpZiAoIWRhdGEuZmlsZXMpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkYXRhLmZpbGVzLmZvckVhY2goZnVuY3Rpb24gKG5ld0ZpbGUpIHtcclxuICAgICAgICAgICAgICAgIHZhciBhbHJlYWR5SW5MaXN0ID0gc2VsZi5maWxlcy5zb21lKGZ1bmN0aW9uIChmKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGYubmFtZSA9PSBuZXdGaWxlLm5hbWU7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIWFscmVhZHlJbkxpc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZWxmLmZpbGVzLnB1c2goeyBuYW1lOiBuZXdGaWxlLm5hbWUsIHBlcmNlbnRhZ2U6IDAsIGVycm9yTWVzc2FnZTogJycgfSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0EgZmlsZSB3aXRoIHRoZSBzYW1lIG5hbWUgaXMgYWxyZWFkeSBvbiB0aGUgcXVldWU6JyArIG5ld0ZpbGUubmFtZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBidXMuJG9uKCdyZW1vdmFsUmVxdWVzdCcsIGZ1bmN0aW9uIChmaWxlVXBsb2FkKSB7XHJcbiAgICAgICAgICAgIHNlbGYuZmlsZXMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSwgaW5kZXgsIGFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5uYW1lID09IGZpbGVVcGxvYWQubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFycmF5LnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBidXMuJG9uKCdFcnJvck9uVXBsb2FkJywgZnVuY3Rpb24gKGZpbGVVcGxvYWQpIHtcclxuICAgICAgICAgICAgc2VsZi51cGRhdGVDb3VudCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSxcclxuICAgIG1ldGhvZHM6IHtcclxuICAgICAgICB1cGRhdGVDb3VudDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yQ291bnQgPSB0aGlzLmZpbGVzLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZXJyb3JNZXNzYWdlICE9ICcnO1xyXG4gICAgICAgICAgICB9KS5sZW5ndGg7XHJcbiAgICAgICAgICAgIHRoaXMucGVuZGluZ0NvdW50ID0gdGhpcy5maWxlcy5sZW5ndGggLSB0aGlzLmVycm9yQ291bnQ7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZpbGVzLmxlbmd0aCA8IDEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXhwYW5kZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2xlYXJFcnJvcnM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy5maWxlcyA9IHRoaXMuZmlsZXMuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5lcnJvck1lc3NhZ2UgPT0gJyc7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB3YXRjaDoge1xyXG4gICAgICAgIGZpbGVzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ291bnQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG4iXX0= diff --git a/src/OrchardCore.Modules/OrchardCore.Media/wwwroot/Scripts/media.min.js b/src/OrchardCore.Modules/OrchardCore.Media/wwwroot/Scripts/media.min.js index 9471f17ec10..3b901189416 100644 --- a/src/OrchardCore.Modules/OrchardCore.Media/wwwroot/Scripts/media.min.js +++ b/src/OrchardCore.Modules/OrchardCore.Media/wwwroot/Scripts/media.min.js @@ -1 +1 @@ -function _typeof(e){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_typeof(e)}function _typeof(e){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_typeof(e)}function _typeof(e){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_typeof(e)}function randomUUID(){return"object"===("undefined"==typeof crypto?"undefined":_typeof(crypto))&&"function"==typeof crypto.randomUUID?crypto.randomUUID():([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g,(function(e){return(e^crypto.getRandomValues(new Uint8Array(1))[0]&15>>e/4).toString(16)}))}function _typeof(e){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_typeof(e)}function ownKeys(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function _objectSpread(e){for(var t=1;t').prop("disabled")),e.support.xhrFileUpload=!(!window.ProgressEvent||!window.FileReader),e.support.xhrFormDataFileUpload=!!window.FormData,e.support.blobSlice=window.Blob&&(Blob.prototype.slice||Blob.prototype.webkitSlice||Blob.prototype.mozSlice),e.widget("blueimp.fileupload",{options:{dropZone:e(document),pasteZone:void 0,fileInput:void 0,replaceFileInput:!0,paramName:void 0,singleFileUploads:!0,limitMultiFileUploads:void 0,limitMultiFileUploadSize:void 0,limitMultiFileUploadSizeOverhead:512,sequentialUploads:!1,limitConcurrentUploads:void 0,forceIframeTransport:!1,redirect:void 0,redirectParamName:void 0,postMessage:void 0,multipart:!0,maxChunkSize:void 0,uploadedBytes:void 0,recalculateProgress:!0,progressInterval:100,bitrateInterval:500,autoUpload:!0,uniqueFilenames:void 0,messages:{uploadedBytes:"Uploaded bytes exceed file size"},i18n:function(t,i){return t=this.messages[t]||t.toString(),i&&e.each(i,(function(e,i){t=t.replace("{"+e+"}",i)})),t},formData:function(e){return e.serializeArray()},add:function(t,i){if(t.isDefaultPrevented())return!1;(i.autoUpload||!1!==i.autoUpload&&e(this).fileupload("option","autoUpload"))&&i.process().done((function(){i.submit()}))},processData:!1,contentType:!1,cache:!1,timeout:0},_promisePipe:(i=e.fn.jquery.split("."),Number(i[0])>1||Number(i[1])>7?"then":"pipe"),_specialOptions:["fileInput","dropZone","pasteZone","multipart","forceIframeTransport"],_blobSlice:e.support.blobSlice&&function(){return(this.slice||this.webkitSlice||this.mozSlice).apply(this,arguments)},_BitrateTimer:function(){this.timestamp=Date.now?Date.now():(new Date).getTime(),this.loaded=0,this.bitrate=0,this.getBitrate=function(e,t,i){var n=e-this.timestamp;return(!this.bitrate||!i||n>i)&&(this.bitrate=(t-this.loaded)*(1e3/n)*8,this.loaded=t,this.timestamp=e),this.bitrate}},_isXHRUpload:function(t){return!t.forceIframeTransport&&(!t.multipart&&e.support.xhrFileUpload||e.support.xhrFormDataFileUpload)},_getFormData:function(t){var i;return"function"===e.type(t.formData)?t.formData(t.form):e.isArray(t.formData)?t.formData:"object"===e.type(t.formData)?(i=[],e.each(t.formData,(function(e,t){i.push({name:e,value:t})})),i):[]},_getTotal:function(t){var i=0;return e.each(t,(function(e,t){i+=t.size||1})),i},_initProgressObject:function(t){var i={loaded:0,total:0,bitrate:0};t._progress?e.extend(t._progress,i):t._progress=i},_initResponseObject:function(e){var t;if(e._response)for(t in e._response)Object.prototype.hasOwnProperty.call(e._response,t)&&delete e._response[t];else e._response={}},_onProgress:function(t,i){if(t.lengthComputable){var n,a=Date.now?Date.now():(new Date).getTime();if(i._time&&i.progressInterval&&a-i._time").prop("href",t.url).prop("host");t.dataType="iframe "+(t.dataType||""),t.formData=this._getFormData(t),t.redirect&&i&&i!==location.host&&t.formData.push({name:t.redirectParamName||"redirect",value:t.redirect})},_initDataSettings:function(e){this._isXHRUpload(e)?(this._chunkedUpload(e,!0)||(e.data||this._initXHRData(e),this._initProgressListener(e)),e.postMessage&&(e.dataType="postmessage "+(e.dataType||""))):this._initIframeSettings(e)},_getParamName:function(t){var i=e(t.fileInput),n=t.paramName;return n?e.isArray(n)||(n=[n]):(n=[],i.each((function(){for(var t=e(this),i=t.prop("name")||"files[]",a=(t.prop("files")||[1]).length;a;)n.push(i),a-=1})),n.length||(n=[i.prop("name")||"files[]"])),n},_initFormSettings:function(t){t.form&&t.form.length||(t.form=e(t.fileInput.prop("form")),t.form.length||(t.form=e(this.options.fileInput.prop("form")))),t.paramName=this._getParamName(t),t.url||(t.url=t.form.prop("action")||location.href),t.type=(t.type||"string"===e.type(t.form.prop("method"))&&t.form.prop("method")||"").toUpperCase(),"POST"!==t.type&&"PUT"!==t.type&&"PATCH"!==t.type&&(t.type="POST"),t.formAcceptCharset||(t.formAcceptCharset=t.form.attr("accept-charset"))},_getAJAXSettings:function(t){var i=e.extend({},this.options,t);return this._initFormSettings(i),this._initDataSettings(i),i},_getDeferredState:function(e){return e.state?e.state():e.isResolved()?"resolved":e.isRejected()?"rejected":"pending"},_enhancePromise:function(e){return e.success=e.done,e.error=e.fail,e.complete=e.always,e},_getXHRPromise:function(t,i,n){var a=e.Deferred(),r=a.promise();return i=i||this.options.context||r,!0===t?a.resolveWith(i,n):!1===t&&a.rejectWith(i,n),r.abort=a.promise,this._enhancePromise(r)},_addConvenienceMethods:function(t,i){var n=this,a=function(t){return e.Deferred().resolveWith(n,t).promise()};i.process=function(t,r){return(t||r)&&(i._processQueue=this._processQueue=(this._processQueue||a([this]))[n._promisePipe]((function(){return i.errorThrown?e.Deferred().rejectWith(n,[i]).promise():a(arguments)}))[n._promisePipe](t,r)),this._processQueue||a([this])},i.submit=function(){return"pending"!==this.state()&&(i.jqXHR=this.jqXHR=!1!==n._trigger("submit",e.Event("submit",{delegatedEvent:t}),this)&&n._onSend(t,this)),this.jqXHR||n._getXHRPromise()},i.abort=function(){return this.jqXHR?this.jqXHR.abort():(this.errorThrown="abort",n._trigger("fail",null,this),n._getXHRPromise(!1))},i.state=function(){return this.jqXHR?n._getDeferredState(this.jqXHR):this._processQueue?n._getDeferredState(this._processQueue):void 0},i.processing=function(){return!this.jqXHR&&this._processQueue&&"pending"===n._getDeferredState(this._processQueue)},i.progress=function(){return this._progress},i.response=function(){return this._response}},_getUploadedBytes:function(e){var t=e.getResponseHeader("Range"),i=t&&t.split("-"),n=i&&i.length>1&&parseInt(i[1],10);return n&&n+1},_chunkedUpload:function(t,i){t.uploadedBytes=t.uploadedBytes||0;var n,a,r=this,o=t.files[0],s=o.size,l=t.uploadedBytes,d=t.maxChunkSize||s,c=this._blobSlice,u=e.Deferred(),p=u.promise();return!(!(this._isXHRUpload(t)&&c&&(l||("function"===e.type(d)?d(t):d)=s?(o.error=t.i18n("uploadedBytes"),this._getXHRPromise(!1,t.context,[null,"error",o.error])):(a=function(){var i=e.extend({},t),p=i._progress.loaded;i.blob=c.call(o,l,l+("function"===e.type(d)?d(i):d),o.type),i.chunkSize=i.blob.size,i.contentRange="bytes "+l+"-"+(l+i.chunkSize-1)+"/"+s,r._trigger("chunkbeforesend",null,i),r._initXHRData(i),r._initProgressListener(i),n=(!1!==r._trigger("chunksend",null,i)&&e.ajax(i)||r._getXHRPromise(!1,i.context)).done((function(n,o,d){l=r._getUploadedBytes(d)||l+i.chunkSize,p+i.chunkSize-i._progress.loaded&&r._onProgress(e.Event("progress",{lengthComputable:!0,loaded:l-i.uploadedBytes,total:l-i.uploadedBytes}),i),t.uploadedBytes=i.uploadedBytes=l,i.result=n,i.textStatus=o,i.jqXHR=d,r._trigger("chunkdone",null,i),r._trigger("chunkalways",null,i),ls._sending)for(var n=s._slots.shift();n;){if("pending"===s._getDeferredState(n)){n.resolve();break}n=s._slots.shift()}0===s._active&&s._trigger("stop")}))};return this._beforeSend(t,l),this.options.sequentialUploads||this.options.limitConcurrentUploads&&this.options.limitConcurrentUploads<=this._sending?(this.options.limitConcurrentUploads>1?(r=e.Deferred(),this._slots.push(r),o=r[s._promisePipe](d)):(this._sequence=this._sequence[s._promisePipe](d,d),o=this._sequence),o.abort=function(){return a=[void 0,"abort","abort"],n?n.abort():(r&&r.rejectWith(l.context,a),d())},this._enhancePromise(o)):d()},_onAdd:function(t,i){var n,a,r,o,s=this,l=!0,d=e.extend({},this.options,i),c=i.files,u=c.length,p=d.limitMultiFileUploads,m=d.limitMultiFileUploadSize,f=d.limitMultiFileUploadSizeOverhead,h=0,g=this._getParamName(d),v=0;if(!u)return!1;if(m&&void 0===c[0].size&&(m=void 0),(d.singleFileUploads||p||m)&&this._isXHRUpload(d))if(d.singleFileUploads||m||!p)if(!d.singleFileUploads&&m)for(r=[],n=[],o=0;om||p&&o+1-v>=p)&&(r.push(c.slice(v,o+1)),(a=g.slice(v,o+1)).length||(a=g),n.push(a),v=o+1,h=0);else n=g;else for(r=[],n=[],o=0;o").append(n)[0].reset(),i.after(n).detach(),a&&n.trigger("focus"),e.cleanData(i.off("remove")),this.options.fileInput=this.options.fileInput.map((function(e,t){return t===i[0]?n[0]:t})),i[0]===this.element[0]&&(this.element=n)},_handleFileTreeEntry:function(t,i){var n,a=this,r=e.Deferred(),o=[],s=function(e){e&&!e.entry&&(e.entry=t),r.resolve([e])};return i=i||"",t.isFile?t._file?(t._file.relativePath=i,r.resolve(t._file)):t.file((function(e){e.relativePath=i,r.resolve(e)}),s):t.isDirectory?(n=t.createReader(),function e(){n.readEntries((function(n){n.length?(o=o.concat(n),e()):function(e){a._handleFileTreeEntries(e,i+t.name+"/").done((function(e){r.resolve(e)})).fail(s)}(o)}),s)}()):r.resolve([]),r.promise()},_handleFileTreeEntries:function(t,i){var n=this;return e.when.apply(e,e.map(t,(function(e){return n._handleFileTreeEntry(e,i)})))[this._promisePipe]((function(){return Array.prototype.concat.apply([],arguments)}))},_getDroppedFiles:function(t){var i=(t=t||{}).items;return i&&i.length&&(i[0].webkitGetAsEntry||i[0].getAsEntry)?this._handleFileTreeEntries(e.map(i,(function(e){var t;return e.webkitGetAsEntry?((t=e.webkitGetAsEntry())&&(t._file=e.getAsFile()),t):e.getAsEntry()}))):e.Deferred().resolve(e.makeArray(t.files)).promise()},_getSingleFileInputFiles:function(t){var i,n,a=(t=e(t)).prop("entries");if(a&&a.length)return this._handleFileTreeEntries(a);if((i=e.makeArray(t.prop("files"))).length)void 0===i[0].name&&i[0].fileName&&e.each(i,(function(e,t){t.name=t.fileName,t.size=t.fileSize}));else{if(!(n=t.prop("value")))return e.Deferred().resolve([]).promise();i=[{name:n.replace(/^.*\\/,"")}]}return e.Deferred().resolve(i).promise()},_getFileInputFiles:function(t){return t instanceof e&&1!==t.length?e.when.apply(e,e.map(t,this._getSingleFileInputFiles))[this._promisePipe]((function(){return Array.prototype.concat.apply([],arguments)})):this._getSingleFileInputFiles(t)},_onChange:function(t){var i=this,n={fileInput:e(t.target),form:e(t.target.form)};this._getFileInputFiles(n.fileInput).always((function(a){n.files=a,i.options.replaceFileInput&&i._replaceFileInput(n),!1!==i._trigger("change",e.Event("change",{delegatedEvent:t}),n)&&i._onAdd(t,n)}))},_onPaste:function(t){var i=t.originalEvent&&t.originalEvent.clipboardData&&t.originalEvent.clipboardData.items,n={files:[]};i&&i.length&&(e.each(i,(function(e,t){var i=t.getAsFile&&t.getAsFile();i&&n.files.push(i)})),!1!==this._trigger("paste",e.Event("paste",{delegatedEvent:t}),n)&&this._onAdd(t,n))},_onDrop:function(t){t.dataTransfer=t.originalEvent&&t.originalEvent.dataTransfer;var i=this,n=t.dataTransfer,a={};n&&n.files&&n.files.length&&(t.preventDefault(),this._getDroppedFiles(n).always((function(n){a.files=n,!1!==i._trigger("drop",e.Event("drop",{delegatedEvent:t}),a)&&i._onAdd(t,a)})))},_onDragOver:t("dragover"),_onDragEnter:t("dragenter"),_onDragLeave:t("dragleave"),_initEventHandlers:function(){this._isXHRUpload(this.options)&&(this._on(this.options.dropZone,{dragover:this._onDragOver,drop:this._onDrop,dragenter:this._onDragEnter,dragleave:this._onDragLeave}),this._on(this.options.pasteZone,{paste:this._onPaste})),e.support.fileInput&&this._on(this.options.fileInput,{change:this._onChange})},_destroyEventHandlers:function(){this._off(this.options.dropZone,"dragenter dragleave dragover drop"),this._off(this.options.pasteZone,"paste"),this._off(this.options.fileInput,"change")},_destroy:function(){this._destroyEventHandlers()},_setOption:function(t,i){var n=-1!==e.inArray(t,this._specialOptions);n&&this._destroyEventHandlers(),this._super(t,i),n&&(this._initSpecialOptions(),this._initEventHandlers())},_initSpecialOptions:function(){var t=this.options;void 0===t.fileInput?t.fileInput=this.element.is('input[type="file"]')?this.element:this.element.find('input[type="file"]'):t.fileInput instanceof e||(t.fileInput=e(t.fileInput)),t.dropZone instanceof e||(t.dropZone=e(t.dropZone)),t.pasteZone instanceof e||(t.pasteZone=e(t.pasteZone))},_getRegExp:function(e){var t=e.split("/"),i=t.pop();return t.shift(),new RegExp(t.join("/"),i)},_isRegExpOption:function(t,i){return"url"!==t&&"string"===e.type(i)&&/^\/.*\/[igm]{0,3}$/.test(i)},_initDataAttributes:function(){var t=this,i=this.options,n=this.element.data();e.each(this.element[0].attributes,(function(e,a){var r,o=a.name.toLowerCase();/^data-/.test(o)&&(o=o.slice(5).replace(/-[a-z]/g,(function(e){return e.charAt(1).toUpperCase()})),r=n[o],t._isRegExpOption(o,r)&&(r=t._getRegExp(r)),i[o]=r)}))},_create:function(){this._initDataAttributes(),this._initSpecialOptions(),this._slots=[],this._sequence=this._getXHRPromise(!0),this._sending=this._active=0,this._initProgressObject(this),this._initEventHandlers()},active:function(){return this._active},progress:function(){return this._progress},add:function(t){var i=this;t&&!this.options.disabled&&(t.fileInput&&!t.files?this._getFileInputFiles(t.fileInput).always((function(e){t.files=e,i._onAdd(null,t)})):(t.files=e.makeArray(t.files),this._onAdd(null,t)))},send:function(t){if(t&&!this.options.disabled){if(t.fileInput&&!t.files){var i,n,a=this,r=e.Deferred(),o=r.promise();return o.abort=function(){return n=!0,i?i.abort():(r.reject(null,"abort","abort"),o)},this._getFileInputFiles(t.fileInput).always((function(e){n||(e.length?(t.files=e,(i=a._onSend(null,t)).then((function(e,t,i){r.resolve(e,t,i)}),(function(e,t,i){r.reject(e,t,i)}))):r.reject())})),this._enhancePromise(o)}if(t.files=e.makeArray(t.files),t.files.length)return this._onSend(null,t)}return this._getXHRPromise(!1,t&&t.context)}})})),function(e){"use strict";"function"==typeof define&&define.amd?define(["jquery"],e):"object"===("undefined"==typeof exports?"undefined":_typeof(exports))?e(require("jquery")):e(window.jQuery)}((function(e){"use strict";var t=0,i=e,n="parseJSON";"JSON"in window&&"parse"in JSON&&(i=JSON,n="parse"),e.ajaxTransport("iframe",(function(i){if(i.async){var n,a,r,o=i.initialIframeSrc||"javascript:false;";return{send:function(s,l){(n=e('
')).attr("accept-charset",i.formAcceptCharset),r=/\?/.test(i.url)?"&":"?","DELETE"===i.type?(i.url=i.url+r+"_method=DELETE",i.type="POST"):"PUT"===i.type?(i.url=i.url+r+"_method=PUT",i.type="POST"):"PATCH"===i.type&&(i.url=i.url+r+"_method=PATCH",i.type="POST"),a=e('').on("load",(function(){var t,r=e.isArray(i.paramName)?i.paramName:[i.paramName];a.off("load").on("load",(function(){var t;try{if(!(t=a.contents()).length||!t[0].firstChild)throw new Error}catch(e){t=void 0}l(200,"success",{iframe:t}),e('').appendTo(n),window.setTimeout((function(){n.remove()}),0)})),n.prop("target",a.prop("name")).prop("action",i.url).prop("method",i.type),i.formData&&e.each(i.formData,(function(t,i){e('').prop("name",i.name).val(i.value).appendTo(n)})),i.fileInput&&i.fileInput.length&&"POST"===i.type&&(t=i.fileInput.clone(),i.fileInput.after((function(e){return t[e]})),i.paramName&&i.fileInput.each((function(t){e(this).prop("name",r[t]||i.paramName)})),n.append(i.fileInput).prop("enctype","multipart/form-data").prop("encoding","multipart/form-data"),i.fileInput.removeAttr("form")),window.setTimeout((function(){n.submit(),t&&t.length&&i.fileInput.each((function(i,n){var a=e(t[i]);e(n).prop("name",a.prop("name")).attr("form",a.attr("form")),a.replaceWith(n)}))}),0)})),n.append(a).appendTo(document.body)},abort:function(){a&&a.off("load").prop("src",o),n&&n.remove()}}}})),e.ajaxSetup({converters:{"iframe text":function(t){return t&&e(t[0].body).text()},"iframe json":function(t){return t&&i[n](e(t[0].body).text())},"iframe html":function(t){return t&&e(t[0].body).html()},"iframe xml":function(t){var i=t&&t[0];return i&&e.isXMLDoc(i)?i:e.parseXML(i.XMLDocument&&i.XMLDocument.xml||e(i.body).html())},"iframe script":function(t){return t&&e.globalEval(e(t[0].body).text())}}})}));var bus=new Vue;function initializeMediaApplication(e,t,i){initialized||(initialized=!0,t||console.error("mediaApplicationUrl variable is not defined"),$.ajax({url:t,method:"GET",success:function(t){$(".ta-content").append(t),$(document).trigger("mediaapplication:ready");var n={name:$("#t-mediaLibrary").text(),path:"",folder:"",isDirectory:!0};mediaApp=new Vue({el:"#mediaApp",data:{selectedFolder:{},mediaItems:[],selectedMedias:[],errors:[],dragDropThumbnail:new Image,smallThumbs:!1,gridView:!1,mediaFilter:"",sortBy:"",sortAsc:!0,itemsInPage:[]},created:function(){var e=this;e.dragDropThumbnail.src=(i||"")+"/OrchardCore.Media/Images/drag-thumbnail.png",bus.$on("folderSelected",(function(t){e.selectedFolder=t})),bus.$on("folderDeleted",(function(){e.selectRoot()})),bus.$on("folderAdded",(function(t){e.selectedFolder=t,t.selected=!0})),bus.$on("mediaListMoved",(function(t){e.loadFolder(e.selectedFolder),t&&e.errors.push(t)})),bus.$on("mediaRenamed",(function(t,i,n){var a=e.mediaItems.filter((function(e){return e.mediaPath===n}))[0];a.mediaPath=i,a.name=t})),bus.$on("createFolderRequested",(function(t){e.createFolder()})),bus.$on("deleteFolderRequested",(function(t){e.deleteFolder()})),bus.$on("sortChangeRequested",(function(t){e.changeSort(t)})),bus.$on("mediaToggleRequested",(function(t){e.toggleSelectionOfMedia(t)})),bus.$on("renameMediaRequested",(function(t){e.renameMedia(t)})),bus.$on("deleteMediaRequested",(function(t){e.deleteMediaItem(t)})),bus.$on("mediaDragStartRequested",(function(t,i){e.handleDragStart(t,i)})),bus.$on("pagerEvent",(function(t){e.itemsInPage=t,e.selectedMedias=[]})),localStorage.getItem("mediaApplicationPrefs")?e.currentPrefs=JSON.parse(localStorage.getItem("mediaApplicationPrefs")):e.selectedFolder=n},computed:{isHome:function(){return this.selectedFolder==n},parents:function(){var e=[];for(parentFolder=this.selectedFolder;parentFolder&&""!=parentFolder.path;)e.unshift(parentFolder),parentFolder=parentFolder.parent;return e},root:function(){return n},filteredMediaItems:function(){var e=this;e.selectedMedias=[];var t=e.mediaItems.filter((function(t){return t.name.toLowerCase().indexOf(e.mediaFilter.toLowerCase())>-1}));switch(e.sortBy){case"size":t.sort((function(t,i){return e.sortAsc?t.size-i.size:i.size-t.size}));break;case"mime":t.sort((function(t,i){return e.sortAsc?t.mime.toLowerCase().localeCompare(i.mime.toLowerCase()):i.mime.toLowerCase().localeCompare(t.mime.toLowerCase())}));break;case"lastModify":t.sort((function(t,i){return e.sortAsc?t.lastModify-i.lastModify:i.lastModify-t.lastModify}));break;default:t.sort((function(t,i){return e.sortAsc?t.name.toLowerCase().localeCompare(i.name.toLowerCase()):i.name.toLowerCase().localeCompare(t.name.toLowerCase())}))}return t},hiddenCount:function(){return this.mediaItems.length-this.filteredMediaItems.length},thumbSize:function(){return this.smallThumbs?100:240},currentPrefs:{get:function(){return{smallThumbs:this.smallThumbs,selectedFolder:this.selectedFolder,gridView:this.gridView}},set:function(e){e&&(this.smallThumbs=e.smallThumbs,this.selectedFolder=e.selectedFolder,this.gridView=e.gridView)}}},watch:{currentPrefs:function(e){localStorage.setItem("mediaApplicationPrefs",JSON.stringify(e))},selectedFolder:function(e){this.mediaFilter="",this.selectedFolder=e,this.loadFolder(e)}},mounted:function(){this.$refs.rootFolder.toggle()},methods:{uploadUrl:function(){if(!this.selectedFolder)return null;var e=$("#uploadFiles").val();return e+(-1==e.indexOf("?")?"?":"&")+"path="+encodeURIComponent(this.selectedFolder.path)},selectRoot:function(){this.selectedFolder=this.root},loadFolder:function(e){this.errors=[],this.selectedMedias=[];var t=this,i=$("#getMediaItemsUrl").val();console.log(e.path),$.ajax({url:i+(-1==i.indexOf("?")?"?":"&")+"path="+encodeURIComponent(e.path),method:"GET",success:function(e){e.forEach((function(e){e.open=!1})),t.mediaItems=e,t.selectedMedias=[],t.sortBy="",t.sortAsc=!0},error:function(i){console.log("error loading folder:"+e.path),t.selectRoot()}})},selectAll:function(){this.selectedMedias=[];for(var e=0;e-1&&(t.mediaItems.splice(n,1),bus.$emit("mediaDeleted",t.selectedMedias[i]))}t.selectedMedias=[]},error:function(e){console.error(e.responseText)}})}}}))},deleteMediaItem:function(e){var t=this;e&&confirmDialog(_objectSpread(_objectSpread({},$("#deleteMedia").data()),{},{callback:function(i){i&&$.ajax({url:$("#deleteMediaUrl").val()+"?path="+encodeURIComponent(e.mediaPath),method:"POST",data:{__RequestVerificationToken:$("input[name='__RequestVerificationToken']").val()},success:function(i){var n=t.mediaItems&&t.mediaItems.indexOf(e);n>-1&&(t.mediaItems.splice(n,1),bus.$emit("mediaDeleted",e))},error:function(e){console.error(e.responseText)}})}}))},handleDragStart:function(e,t){var i=[];this.selectedMedias.forEach((function(e){i.push(e.name)})),0==this.isMediaSelected(e)&&(i.push(e.name),this.selectedMedias.push(e)),t.dataTransfer.setData("mediaNames",JSON.stringify(i)),t.dataTransfer.setData("sourceFolder",this.selectedFolder.path),t.dataTransfer.setDragImage(this.dragDropThumbnail,10,10),t.dataTransfer.effectAllowed="move"},handleScrollWhileDrag:function(e){e.clientY<150&&window.scrollBy(0,-10),e.clientY>window.innerHeight-100&&window.scrollBy(0,10)},changeSort:function(e){this.sortBy==e?this.sortAsc=!this.sortAsc:(this.sortAsc=!0,this.sortBy=e)}}}),$("#create-folder-name").keypress((function(e){if(13==e.which)return $("#modalFooterOk").click(),!1})),$("#modalFooterOk").on("click",(function(e){var t=$("#create-folder-name").val();""!==t&&$.ajax({url:$("#createFolderUrl").val()+"?path="+encodeURIComponent(mediaApp.selectedFolder.path)+"&name="+encodeURIComponent(t),method:"POST",data:{__RequestVerificationToken:$("input[name='__RequestVerificationToken']").val()},success:function(e){bus.$emit("addFolder",mediaApp.selectedFolder,e),bootstrap.Modal.getOrCreateInstance($("#createFolderModal")).hide()},error:function(e){$("#createFolderModal-errors").empty();var t=JSON.parse(e.responseText).value;$('').text(t).appendTo($("#createFolderModal-errors"))}})})),$("#renameMediaModalFooterOk").on("click",(function(e){var t=$("#new-item-name").val(),i=$("#old-item-name").val();if(""!==t){var n=mediaApp.selectedFolder.path+"/";"/"===n&&(n="");var a=n+t,r=n+i;if(a.toLowerCase()!==r.toLowerCase())$.ajax({url:$("#renameMediaUrl").val()+"?oldPath="+encodeURIComponent(r)+"&newPath="+encodeURIComponent(a),method:"POST",data:{__RequestVerificationToken:$("input[name='__RequestVerificationToken']").val()},success:function(e){bootstrap.Modal.getOrCreateInstance($("#renameMediaModal")).hide(),bus.$emit("mediaRenamed",t,a,r)},error:function(e){$("#renameMediaModal-errors").empty();var t=JSON.parse(e.responseText).value;$('').text(t).appendTo($("#renameMediaModal-errors"))}});else bootstrap.Modal.getOrCreateInstance($("#renameMediaModal")).hide()}})),e&&(document.getElementById("mediaApp").style.display=""),$(document).trigger("mediaApp:ready")},error:function(e){console.error(e.responseText)}}))}function _typeof(e){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_typeof(e)}function ownKeys(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function _objectSpread(e){for(var t=1;t0&&a},thumbSize:function(){return this.smallThumbs?120:240},currentPrefs:{get:function(){return{smallThumbs:this.smallThumbs}},set:function(e){e&&(this.smallThumbs=e.smallThumbs)}}},mounted:function(){var e=this;e.paths=c,e.$on("selectAndDeleteMediaRequested",(function(t){e.selectAndDeleteMedia(t)})),e.$on("selectMediaRequested",(function(t){e.selectMedia(t)}));var n="#"+t,r=u.attr("id"),o=randomUUID();$(n).fileupload({limitConcurrentUploads:20,dropZone:$("#"+r),dataType:"json",url:i,maxChunkSize:l,add:function(t,i){var n,a=i.files.length;for(n=0;n0)for(var r=0;r1&&!1===a?(alert($("#onlyOneItemMessage").val()),d.mediaItems.push(i[0]),d.initialized=!0):(d.mediaItems=d.mediaItems.concat(i),d.initialized=!0)):alert(n)},error:function(e,t,i){console.log("Error on upload."),console.log(e),console.log(t),console.log(i)}}).on("fileuploadchunkbeforesend",(function(e,t){var i=t.files[0];t.blob=new File([t.blob],i.name,{type:i.type,lastModified:i.lastModified})}))},methods:{selectMedia:function(e){this.selectedMedia=e},getUniqueId:function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){var t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)}))},removeSelected:function(e){if(this.selectedMedia){var t=this.mediaItems&&this.mediaItems.indexOf(this.selectedMedia);t>-1&&(this.mediaItems[t].isRemoved=!0,this.mediaItems.splice(t,1))}else 1===this.mediaItems.length&&(this.mediaItems[t].isRemoved=!0,this.mediaItems.splice(0,1));this.selectedMedia=null},showMediaTextModal:function(e){this.mediaTextModal=new bootstrap.Modal(this.$refs.mediaTextModal),this.mediaTextModal.show(),this.backupMediaText=this.selectedMedia.mediaText},cancelMediaTextModal:function(e){this.mediaTextModal.hide(),this.selectedMedia.mediaText=this.backupMediaText},showAnchorModal:function(e){this.anchoringModal=new bootstrap.Modal(this.$refs.anchoringModal),this.anchoringModal.show(),this.selectedMedia.anchor={x:this.selectedMedia.anchor.x,y:this.selectedMedia.anchor.y},this.backupAnchor=this.selectedMedia.anchor},cancelAnchoringModal:function(e){this.anchoringModal.hide(),this.selectedMedia.anchor=this.backupAnchor},resetAnchor:function(e){this.selectedMedia.anchor={x:.5,y:.5}},onAnchorDrop:function(e){var t=this.$refs.anchorImage;this.selectedMedia.anchor={x:e.offsetX/t.clientWidth,y:e.offsetY/t.clientHeight}},anchorLeft:function(){if(this.$refs.anchorImage&&this.$refs.modalBody&&this.selectedMedia){var e=(this.$refs.modalBody.clientWidth-this.$refs.anchorImage.clientWidth)/2,t=this.selectedMedia.anchor.x*this.$refs.anchorImage.clientWidth+e;return t<17?t=17:t-=8,t+"px"}return"0"},anchorTop:function(){if(this.$refs.anchorImage&&this.selectedMedia){var e=this.selectedMedia.anchor.y*this.$refs.anchorImage.clientHeight;return e<15?e=15:e+=5,e+"px"}return"0"},setAnchor:function(e){var t=this.$refs.anchorImage;this.selectedMedia.anchor={x:e.offsetX/t.clientWidth,y:e.offsetY/t.clientHeight}},addMediaFiles:function(e){e.length>1&&!1===a?(alert($("#onlyOneItemMessage").val()),d.mediaItems.push(e[0]),d.initialized=!0):(d.mediaItems=d.mediaItems.concat(e),d.initialized=!0)},selectAndDeleteMedia:function(e){var t=this;t.selectedMedia=e,setTimeout((function(){t.removeSelected()}),100)}},watch:{mediaItems:{deep:!0,handler:function(){setTimeout((function(){$(document).trigger("contentpreview:render")}),100)}},currentPrefs:function(e){localStorage.setItem("mediaFieldPrefs",JSON.stringify(e))}}}))}function initializeMediaField(e,t,i,n,a,r){if(null!==e){var o,s=$(document.getElementById($(e).data("for"))).data("init"),l=$(e),d=l.attr("id");t.addEventListener("hidden.bs.modal",(function(e){$("#mediaApp").appendTo("body"),$("#mediaApp").hide()})),mediaFieldApps.push(o=new Vue({el:l.get(0),data:{mediaItems:[],selectedMedia:null,smallThumbs:!1,idPrefix:d,initialized:!1,allowMediaText:a,backupMediaText:"",allowAnchors:r,backupAnchor:null,mediaTextModal:null,anchoringModal:null},created:function(){this.currentPrefs=JSON.parse(localStorage.getItem("mediaFieldPrefs"))},computed:{paths:{get:function(){var e=[];return this.initialized?(this.mediaItems.forEach((function(t){"not-found"!==t.mediaPath&&e.push({path:t.mediaPath,mediaText:t.mediaText,anchor:t.anchor})})),JSON.stringify(e)):JSON.stringify(s)},set:function(e){var t=this,n=e||[],a=$.Deferred(),r=[],o=0;n.forEach((function(e,n){r.push({name:" "+e.path,mime:"",mediaPath:""}),promise=$.when(a).done((function(){$.ajax({url:i+"?path="+encodeURIComponent(e.path),method:"GET",success:function(i){i.vuekey=i.name+n.toString(),i.mediaText=e.mediaText,i.anchor=e.anchor,r.splice(n,1,i),r.length===++o&&(r.forEach((function(e){t.mediaItems.push(e)})),t.initialized=!0)},error:function(i){console.log(i),r.splice(n,1,{name:e.path,mime:"",mediaPath:"not-found",mediaText:"",anchor:{x:0,y:0}}),r.length===++o&&(r.forEach((function(e){t.mediaItems.push(e)})),t.initialized=!0)}})}))})),a.resolve()}},fileSize:function(){return Math.round(this.selectedMedia.size/1024)},canAddMedia:function(){return 0===this.mediaItems.length||this.mediaItems.length>0&&n},thumbSize:function(){return this.smallThumbs?120:240},currentPrefs:{get:function(){return{smallThumbs:this.smallThumbs}},set:function(e){e&&(this.smallThumbs=e.smallThumbs)}}},mounted:function(){var e=this;e.paths=s,e.$on("selectAndDeleteMediaRequested",(function(t){e.selectAndDeleteMedia(t)})),e.$on("selectMediaRequested",(function(t){e.selectMedia(t)})),e.$on("filesUploaded",(function(t){e.addMediaFiles(t)}))},methods:{selectMedia:function(e){this.selectedMedia=e},showModal:function(e){var i=this;if(i.canAddMedia){$("#mediaApp").appendTo($(t).find(".modal-body")),$("#mediaApp").show();var n=new bootstrap.Modal(t);n.show(),$(t).find(".mediaFieldSelectButton").off("click").on("click",(function(e){return i.addMediaFiles(mediaApp.selectedMedias),mediaApp.selectedMedias=[],n.hide(),!0}))}},showMediaTextModal:function(e){this.mediaTextModal=new bootstrap.Modal(this.$refs.mediaTextModal),this.mediaTextModal.show(),this.backupMediaText=this.selectedMedia.mediaText},cancelMediaTextModal:function(e){this.mediaTextModal.hide(),this.selectedMedia.mediaText=this.backupMediaText},showAnchorModal:function(e){this.anchoringModal=new bootstrap.Modal(this.$refs.anchoringModal),this.anchoringModal.show(),this.selectedMedia.anchor={x:this.selectedMedia.anchor.x,y:this.selectedMedia.anchor.y},this.backupAnchor=this.selectedMedia.anchor},cancelAnchoringModal:function(e){this.anchoringModal.hide(),this.selectedMedia.anchor=this.backupAnchor},resetAnchor:function(e){this.selectedMedia.anchor={x:.5,y:.5}},onAnchorDrop:function(e){var t=this.$refs.anchorImage;this.selectedMedia.anchor={x:e.offsetX/t.clientWidth,y:e.offsetY/t.clientHeight}},anchorLeft:function(){if(this.$refs.anchorImage&&this.$refs.modalBody&&this.selectedMedia){var e=(this.$refs.modalBody.clientWidth-this.$refs.anchorImage.clientWidth)/2,t=this.selectedMedia.anchor.x*this.$refs.anchorImage.clientWidth+e,i=Math.round(this.$refs.modalBody.querySelector(".icon-media-anchor").clientWidth);return Number.isInteger(i)&&(t-=i/2),t+"px"}return"0"},anchorTop:function(){return this.$refs.anchorImage&&this.selectedMedia?this.selectedMedia.anchor.y*this.$refs.anchorImage.clientHeight+"px":"0"},setAnchor:function(e){var t=this.$refs.anchorImage;this.selectedMedia.anchor={x:e.offsetX/t.clientWidth,y:e.offsetY/t.clientHeight}},addMediaFiles:function(e){e.length>1&&!1===n?(alert($("#onlyOneItemMessage").val()),o.mediaItems.push(e[0]),o.initialized=!0):(o.mediaItems=o.mediaItems.concat(e),o.initialized=!0)},removeSelected:function(e){if(this.selectedMedia){var t=this.mediaItems&&this.mediaItems.indexOf(this.selectedMedia);t>-1&&this.mediaItems.splice(t,1)}else 1===this.mediaItems.length&&this.mediaItems.splice(0,1);this.selectedMedia=null},selectAndDeleteMedia:function(e){var t=this;t.selectedMedia=e,setTimeout((function(){t.removeSelected()}),100)}},watch:{mediaItems:{deep:!0,handler:function(){setTimeout((function(){$(document).trigger("contentpreview:render")}),100)}},currentPrefs:function(e){localStorage.setItem("mediaFieldPrefs",JSON.stringify(e))}}}))}}$(document).on("mediaApp:ready",(function(){var e=randomUUID();$("#fileupload").fileupload({dropZone:$("#mediaApp"),limitConcurrentUploads:20,dataType:"json",url:$("#uploadFiles").val(),maxChunkSize:Number($("#maxUploadChunkSize").val()||0),formData:function(){var t=$("input[name=__RequestVerificationToken]").val();return[{name:"path",value:mediaApp.selectedFolder.path},{name:"__RequestVerificationToken",value:t},{name:"__chunkedFileUploadId",value:e}]},done:function(e,t){$.each(t.result.files,(function(e,t){t.error||mediaApp.mediaItems.push(t)}))}}).on("fileuploadchunkbeforesend",(function(e,t){var i=t.files[0];t.blob=new File([t.blob],i.name,{type:i.type,lastModified:i.lastModified})}))})),$(document).bind("dragover",(function(e){var t=e.originalEvent.dataTransfer;if(t.types&&(t.types.indexOf?-1!=t.types.indexOf("Files"):t.types.contains("Files"))){var i=$("#customdropzone"),n=window.dropZoneTimeout;n?clearTimeout(n):i.addClass("in");$(e.target).closest(i);window.dropZoneTimeout=setTimeout((function(){window.dropZoneTimeout=null,i.removeClass("in")}),100)}})),Vue.component("folder",{template:'\n
  • \n \n
      \n \n \n
    \n
  • \n '),props:{model:Object,selectedInMediaApp:Object,level:Number},data:function(){return{open:!1,children:null,parent:null,isHovered:!1,padding:0}},computed:{empty:function(){return!this.children||0==this.children.length},isSelected:function(){return this.selectedInMediaApp.name==this.model.name&&this.selectedInMediaApp.path==this.model.path},isRoot:function(){return""===this.model.path}},mounted:function(){0==this.isRoot&&this.isAncestorOfSelectedFolder()&&this.toggle(),this.padding=this.level<3?16:16+8*this.level},created:function(){var e=this;bus.$on("deleteFolder",(function(t){if(e.children){var i=e.children&&e.children.indexOf(t);i>-1&&(e.children.splice(i,1),bus.$emit("folderDeleted"))}})),bus.$on("addFolder",(function(t,i){e.model==t&&(null!==e.children&&e.children.push(i),i.parent=e.model,bus.$emit("folderAdded",i))}))},methods:{isAncestorOfSelectedFolder:function(){for(parentFolder=mediaApp.selectedFolder;parentFolder;){if(parentFolder.path==this.model.path)return!0;parentFolder=parentFolder.parent}return!1},toggle:function(){this.open=!this.open,this.open&&!this.children&&this.loadChildren()},select:function(){bus.$emit("folderSelected",this.model),this.loadChildren()},createFolder:function(){bus.$emit("createFolderRequested")},deleteFolder:function(){bus.$emit("deleteFolderRequested")},loadChildren:function(){var e=this;0==this.open&&(this.open=!0),$.ajax({url:$("#getFoldersUrl").val()+"?path="+encodeURIComponent(e.model.path),method:"GET",success:function(t){e.children=t,e.children.forEach((function(t){t.parent=e.model}))},error:function(e){emtpy=!1,console.error(e.responseText)}})},handleDragOver:function(e){this.isHovered=!0},handleDragLeave:function(e){this.isHovered=!1},moveMediaToFolder:function(e,t){this.isHovered=!1;var i=JSON.parse(t.dataTransfer.getData("mediaNames"));if(!(i.length<1)){var n=t.dataTransfer.getData("sourceFolder"),a=e.path;""===n&&(n="root"),""===a&&(a="root"),n!==a?confirmDialog(_objectSpread(_objectSpread({},$("#moveMedia").data()),{},{callback:function(e){e&&$.ajax({url:$("#moveMediaListUrl").val(),method:"POST",data:{__RequestVerificationToken:$("input[name='__RequestVerificationToken']").val(),mediaNames:i,sourceFolder:n,targetFolder:a},success:function(){bus.$emit("mediaListMoved")},error:function(e){console.error(e.responseText),bus.$emit("mediaListMoved",e.responseText)}})}})):alert($("#sameFolderMessage").val())}}}}),Vue.component("media-items-grid",{template:'\n
      \n
    1. \n
      \n \n \n
      \n
      \n \n \n \n {{ media.name }}\n
      \n
    2. \n
    \n ',data:function(){return{T:{}}},props:{filteredMediaItems:Array,selectedMedias:Array,thumbSize:Number},created:function(){this.T.editButton=$("#t-edit-button").val(),this.T.deleteButton=$("#t-delete-button").val()},methods:{isMediaSelected:function(e){return this.selectedMedias.some((function(t,i,n){return t.url.toLowerCase()===e.url.toLowerCase()}))},buildMediaUrl:function(e,t){return e+(-1==e.indexOf("?")?"?":"&")+"width="+t+"&height="+t},toggleSelectionOfMedia:function(e){bus.$emit("mediaToggleRequested",e)},renameMedia:function(e){bus.$emit("renameMediaRequested",e)},deleteMedia:function(e){bus.$emit("deleteMediaRequested",e)},dragStart:function(e,t){bus.$emit("mediaDragStartRequested",e,t)}}}),Vue.component("media-items-table",{template:'\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    {{ T.imageHeader }}\n {{ T.nameHeader }}\n \n \n {{ T.lastModifyHeader }} \n \n \n \n {{ T.sizeHeader }}\n \n \n \n \n {{ T.typeHeader }}\n \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    {{ printDateTime(media.lastModify) }}
    \n
    \n
    {{ isNaN(media.size)? 0 : Math.round(media.size / 1024) }} KB
    \n
    \n
    {{ media.mime }}
    \n
    \n ',data:function(){return{T:{}}},props:{sortBy:String,sortAsc:Boolean,filteredMediaItems:Array,selectedMedias:Array,thumbSize:Number},created:function(){var e=this;e.T.imageHeader=$("#t-image-header").val(),e.T.nameHeader=$("#t-name-header").val(),e.T.lastModifyHeader=$("#t-lastModify-header").val(),e.T.sizeHeader=$("#t-size-header").val(),e.T.typeHeader=$("#t-type-header").val(),e.T.editButton=$("#t-edit-button").val(),e.T.deleteButton=$("#t-delete-button").val(),e.T.viewButton=$("#t-view-button").val()},methods:{isMediaSelected:function(e){return this.selectedMedias.some((function(t,i,n){return t.url.toLowerCase()===e.url.toLowerCase()}))},buildMediaUrl:function(e,t){return e+(-1==e.indexOf("?")?"?":"&")+"width="+t+"&height="+t},changeSort:function(e){bus.$emit("sortChangeRequested",e)},toggleSelectionOfMedia:function(e){bus.$emit("mediaToggleRequested",e)},renameMedia:function(e){bus.$emit("renameMediaRequested",e)},deleteMedia:function(e){bus.$emit("deleteMediaRequested",e)},dragStart:function(e,t){bus.$emit("mediaDragStartRequested",e,t)},printDateTime:function(e){return new Date(e).toLocaleString()}}}),Vue.component("pager",{template:'\n
    \n \n \n
    \n ',props:{sourceItems:Array},data:function(){return{pageSize:10,pageSizeOptions:[10,30,50,100],current:0,T:{}}},created:function(){var e=this;e.T.pagerFirstButton=$("#t-pager-first-button").val(),e.T.pagerPreviousButton=$("#t-pager-previous-button").val(),e.T.pagerNextButton=$("#t-pager-next-button").val(),e.T.pagerLastButton=$("#t-pager-last-button").val(),e.T.pagerPageSizeLabel=$("#t-pager-page-size-label").val(),e.T.pagerPageLabel=$("#t-pager-page-label").val(),e.T.pagerTotalLabel=$("#t-pager-total-label").val()},methods:{next:function(){this.current=this.current+1},previous:function(){this.current=this.current-1},goFirst:function(){this.current=0},goLast:function(){this.current=this.totalPages-1},goTo:function(e){this.current=e}},computed:{total:function(){return this.sourceItems?this.sourceItems.length:0},totalPages:function(){var e=Math.ceil(this.total/this.pageSize);return e>0?e:1},isLastPage:function(){return this.current+1>=this.totalPages},isFirstPage:function(){return 0===this.current},canDoNext:function(){return!this.isLastPage},canDoPrev:function(){return!this.isFirstPage},canDoFirst:function(){return!this.isFirstPage},canDoLast:function(){return!this.isLastPage},itemsInCurrentPage:function(){var e=this.pageSize*this.current,t=e+this.pageSize,i=this.sourceItems.slice(e,t);return bus.$emit("pagerEvent",i),i},pageLinks:function(){var e=[];e.push(this.current+1);var t=this.current>0?this.current:-1;e.unshift(t);var i=this.current>1?this.current-1:-1;e.unshift(i);var n=this.totalPages-this.current>1?this.current+2:-1;e.push(n);var a=this.totalPages-this.current>2?this.current+3:-1;return e.push(a),e}},watch:{sourceItems:function(){this.current=0},pageSize:function(){this.current=0}}}),Vue.component("sortIndicator",{template:'\n
    \n \n \n
    \n ',props:{colname:String,selectedcolname:String,asc:Boolean},computed:{isActive:function(){return this.colname.toLowerCase()==this.selectedcolname.toLowerCase()}}}),Vue.component("upload",{template:'

    {{ model.name }}

    Error: {{ model.errorMessage }}
    ',props:{model:Object,uploadInputId:String},mounted:function(){var e,t=this,i=document.getElementById(null!==(e=t.uploadInputId)&&void 0!==e?e:"fileupload");$(i).bind("fileuploadprogress",(function(e,i){i.files[0].name===t.model.name&&(t.model.percentage=parseInt(i.loaded/i.total*100,10))})),$(i).bind("fileuploaddone",(function(e,i){i.files[0].name===t.model.name&&(i.result.files[0].error?t.handleFailure(i.files[0].name,i.result.files[0].error):bus.$emit("removalRequest",t.model))})),$(i).bind("fileuploadfail",(function(e,i){i.files[0].name===t.model.name&&t.handleFailure(i.files[0].name,$("#t-error").val())}))},methods:{handleFailure:function(e,t){e===this.model.name&&(this.model.errorMessage=t,bus.$emit("ErrorOnUpload",this.model))},dismissWarning:function(){bus.$emit("removalRequest",this.model)}}}),Vue.component("uploadList",{template:'
    {{ T.uploads }} (Pending: {{ pendingCount }}) ( {{ T.errors }}: {{ errorCount }} / {{ T.clearErrors }} )
    ',data:function(){return{files:[],T:{},expanded:!1,pendingCount:0,errorCount:0}},props:{uploadInputId:String},created:function(){var e=this;e.T.uploads=$("#t-uploads").val(),e.T.errors=$("#t-errors").val(),e.T.clearErrors=$("#t-clear-errors").val()},computed:{fileCount:function(){return this.files.length}},mounted:function(){var e,t=this,i=document.getElementById(null!==(e=t.uploadInputId)&&void 0!==e?e:"fileupload");$(i).bind("fileuploadadd",(function(e,i){i.files&&i.files.forEach((function(e){t.files.some((function(t){return t.name==e.name}))?console.error("A file with the same name is already on the queue:"+e.name):t.files.push({name:e.name,percentage:0,errorMessage:""})}))})),bus.$on("removalRequest",(function(e){t.files.forEach((function(t,i,n){t.name==e.name&&n.splice(i,1)}))})),bus.$on("ErrorOnUpload",(function(e){t.updateCount()}))},methods:{updateCount:function(){this.errorCount=this.files.filter((function(e){return""!=e.errorMessage})).length,this.pendingCount=this.files.length-this.errorCount,this.files.length<1&&(this.expanded=!1)},clearErrors:function(){this.files=this.files.filter((function(e){return""==e.errorMessage}))}},watch:{files:function(){this.updateCount()}}});var mediaFieldApps=[];Vue.component("mediaFieldThumbsContainer",{template:'
    {{T.noImages}}
  • {{ media.isNew ? media.name.substr(36) : media.name }}
    {{ T.mediaNotFound }} {{ T.discardWarning }}
    {{ media.name }}
  • ',data:function(){return{T:{}}},props:{mediaItems:Array,selectedMedia:Object,thumbSize:Number,idPrefix:String},created:function(){var e=this;e.T.mediaNotFound=$("#t-media-not-found").val(),e.T.discardWarning=$("#t-discard-warning").val(),e.T.noImages=$("#t-no-images").val()},methods:{selectAndDeleteMedia:function(e){this.$parent.$emit("selectAndDeleteMediaRequested",e)},selectMedia:function(e){this.$parent.$emit("selectMediaRequested",e)},buildMediaUrl:function(e,t){return e+(-1==e.indexOf("?")?"?":"&")+"width="+t+"&height="+t}}}); +function _typeof(e){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_typeof(e)}function _typeof(e){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_typeof(e)}function _typeof(e){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_typeof(e)}function randomUUID(){return"object"===("undefined"==typeof crypto?"undefined":_typeof(crypto))&&"function"==typeof crypto.randomUUID?crypto.randomUUID():([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g,(function(e){return(e^crypto.getRandomValues(new Uint8Array(1))[0]&15>>e/4).toString(16)}))}function _typeof(e){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_typeof(e)}function ownKeys(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function _objectSpread(e){for(var t=1;t').prop("disabled")),e.support.xhrFileUpload=!(!window.ProgressEvent||!window.FileReader),e.support.xhrFormDataFileUpload=!!window.FormData,e.support.blobSlice=window.Blob&&(Blob.prototype.slice||Blob.prototype.webkitSlice||Blob.prototype.mozSlice),e.widget("blueimp.fileupload",{options:{dropZone:e(document),pasteZone:void 0,fileInput:void 0,replaceFileInput:!0,paramName:void 0,singleFileUploads:!0,limitMultiFileUploads:void 0,limitMultiFileUploadSize:void 0,limitMultiFileUploadSizeOverhead:512,sequentialUploads:!1,limitConcurrentUploads:void 0,forceIframeTransport:!1,redirect:void 0,redirectParamName:void 0,postMessage:void 0,multipart:!0,maxChunkSize:void 0,uploadedBytes:void 0,recalculateProgress:!0,progressInterval:100,bitrateInterval:500,autoUpload:!0,uniqueFilenames:void 0,messages:{uploadedBytes:"Uploaded bytes exceed file size"},i18n:function(t,i){return t=this.messages[t]||t.toString(),i&&e.each(i,(function(e,i){t=t.replace("{"+e+"}",i)})),t},formData:function(e){return e.serializeArray()},add:function(t,i){if(t.isDefaultPrevented())return!1;(i.autoUpload||!1!==i.autoUpload&&e(this).fileupload("option","autoUpload"))&&i.process().done((function(){i.submit()}))},processData:!1,contentType:!1,cache:!1,timeout:0},_promisePipe:(i=e.fn.jquery.split("."),Number(i[0])>1||Number(i[1])>7?"then":"pipe"),_specialOptions:["fileInput","dropZone","pasteZone","multipart","forceIframeTransport"],_blobSlice:e.support.blobSlice&&function(){return(this.slice||this.webkitSlice||this.mozSlice).apply(this,arguments)},_BitrateTimer:function(){this.timestamp=Date.now?Date.now():(new Date).getTime(),this.loaded=0,this.bitrate=0,this.getBitrate=function(e,t,i){var n=e-this.timestamp;return(!this.bitrate||!i||n>i)&&(this.bitrate=(t-this.loaded)*(1e3/n)*8,this.loaded=t,this.timestamp=e),this.bitrate}},_isXHRUpload:function(t){return!t.forceIframeTransport&&(!t.multipart&&e.support.xhrFileUpload||e.support.xhrFormDataFileUpload)},_getFormData:function(t){var i;return"function"===e.type(t.formData)?t.formData(t.form):e.isArray(t.formData)?t.formData:"object"===e.type(t.formData)?(i=[],e.each(t.formData,(function(e,t){i.push({name:e,value:t})})),i):[]},_getTotal:function(t){var i=0;return e.each(t,(function(e,t){i+=t.size||1})),i},_initProgressObject:function(t){var i={loaded:0,total:0,bitrate:0};t._progress?e.extend(t._progress,i):t._progress=i},_initResponseObject:function(e){var t;if(e._response)for(t in e._response)Object.prototype.hasOwnProperty.call(e._response,t)&&delete e._response[t];else e._response={}},_onProgress:function(t,i){if(t.lengthComputable){var n,a=Date.now?Date.now():(new Date).getTime();if(i._time&&i.progressInterval&&a-i._time").prop("href",t.url).prop("host");t.dataType="iframe "+(t.dataType||""),t.formData=this._getFormData(t),t.redirect&&i&&i!==location.host&&t.formData.push({name:t.redirectParamName||"redirect",value:t.redirect})},_initDataSettings:function(e){this._isXHRUpload(e)?(this._chunkedUpload(e,!0)||(e.data||this._initXHRData(e),this._initProgressListener(e)),e.postMessage&&(e.dataType="postmessage "+(e.dataType||""))):this._initIframeSettings(e)},_getParamName:function(t){var i=e(t.fileInput),n=t.paramName;return n?e.isArray(n)||(n=[n]):(n=[],i.each((function(){for(var t=e(this),i=t.prop("name")||"files[]",a=(t.prop("files")||[1]).length;a;)n.push(i),a-=1})),n.length||(n=[i.prop("name")||"files[]"])),n},_initFormSettings:function(t){t.form&&t.form.length||(t.form=e(t.fileInput.prop("form")),t.form.length||(t.form=e(this.options.fileInput.prop("form")))),t.paramName=this._getParamName(t),t.url||(t.url=t.form.prop("action")||location.href),t.type=(t.type||"string"===e.type(t.form.prop("method"))&&t.form.prop("method")||"").toUpperCase(),"POST"!==t.type&&"PUT"!==t.type&&"PATCH"!==t.type&&(t.type="POST"),t.formAcceptCharset||(t.formAcceptCharset=t.form.attr("accept-charset"))},_getAJAXSettings:function(t){var i=e.extend({},this.options,t);return this._initFormSettings(i),this._initDataSettings(i),i},_getDeferredState:function(e){return e.state?e.state():e.isResolved()?"resolved":e.isRejected()?"rejected":"pending"},_enhancePromise:function(e){return e.success=e.done,e.error=e.fail,e.complete=e.always,e},_getXHRPromise:function(t,i,n){var a=e.Deferred(),r=a.promise();return i=i||this.options.context||r,!0===t?a.resolveWith(i,n):!1===t&&a.rejectWith(i,n),r.abort=a.promise,this._enhancePromise(r)},_addConvenienceMethods:function(t,i){var n=this,a=function(t){return e.Deferred().resolveWith(n,t).promise()};i.process=function(t,r){return(t||r)&&(i._processQueue=this._processQueue=(this._processQueue||a([this]))[n._promisePipe]((function(){return i.errorThrown?e.Deferred().rejectWith(n,[i]).promise():a(arguments)}))[n._promisePipe](t,r)),this._processQueue||a([this])},i.submit=function(){return"pending"!==this.state()&&(i.jqXHR=this.jqXHR=!1!==n._trigger("submit",e.Event("submit",{delegatedEvent:t}),this)&&n._onSend(t,this)),this.jqXHR||n._getXHRPromise()},i.abort=function(){return this.jqXHR?this.jqXHR.abort():(this.errorThrown="abort",n._trigger("fail",null,this),n._getXHRPromise(!1))},i.state=function(){return this.jqXHR?n._getDeferredState(this.jqXHR):this._processQueue?n._getDeferredState(this._processQueue):void 0},i.processing=function(){return!this.jqXHR&&this._processQueue&&"pending"===n._getDeferredState(this._processQueue)},i.progress=function(){return this._progress},i.response=function(){return this._response}},_getUploadedBytes:function(e){var t=e.getResponseHeader("Range"),i=t&&t.split("-"),n=i&&i.length>1&&parseInt(i[1],10);return n&&n+1},_chunkedUpload:function(t,i){t.uploadedBytes=t.uploadedBytes||0;var n,a,r=this,o=t.files[0],s=o.size,l=t.uploadedBytes,d=t.maxChunkSize||s,c=this._blobSlice,u=e.Deferred(),p=u.promise();return!(!(this._isXHRUpload(t)&&c&&(l||("function"===e.type(d)?d(t):d)=s?(o.error=t.i18n("uploadedBytes"),this._getXHRPromise(!1,t.context,[null,"error",o.error])):(a=function(){var i=e.extend({},t),p=i._progress.loaded;i.blob=c.call(o,l,l+("function"===e.type(d)?d(i):d),o.type),i.chunkSize=i.blob.size,i.contentRange="bytes "+l+"-"+(l+i.chunkSize-1)+"/"+s,r._trigger("chunkbeforesend",null,i),r._initXHRData(i),r._initProgressListener(i),n=(!1!==r._trigger("chunksend",null,i)&&e.ajax(i)||r._getXHRPromise(!1,i.context)).done((function(n,o,d){l=r._getUploadedBytes(d)||l+i.chunkSize,p+i.chunkSize-i._progress.loaded&&r._onProgress(e.Event("progress",{lengthComputable:!0,loaded:l-i.uploadedBytes,total:l-i.uploadedBytes}),i),t.uploadedBytes=i.uploadedBytes=l,i.result=n,i.textStatus=o,i.jqXHR=d,r._trigger("chunkdone",null,i),r._trigger("chunkalways",null,i),ls._sending)for(var n=s._slots.shift();n;){if("pending"===s._getDeferredState(n)){n.resolve();break}n=s._slots.shift()}0===s._active&&s._trigger("stop")}))};return this._beforeSend(t,l),this.options.sequentialUploads||this.options.limitConcurrentUploads&&this.options.limitConcurrentUploads<=this._sending?(this.options.limitConcurrentUploads>1?(r=e.Deferred(),this._slots.push(r),o=r[s._promisePipe](d)):(this._sequence=this._sequence[s._promisePipe](d,d),o=this._sequence),o.abort=function(){return a=[void 0,"abort","abort"],n?n.abort():(r&&r.rejectWith(l.context,a),d())},this._enhancePromise(o)):d()},_onAdd:function(t,i){var n,a,r,o,s=this,l=!0,d=e.extend({},this.options,i),c=i.files,u=c.length,p=d.limitMultiFileUploads,m=d.limitMultiFileUploadSize,f=d.limitMultiFileUploadSizeOverhead,h=0,g=this._getParamName(d),v=0;if(!u)return!1;if(m&&void 0===c[0].size&&(m=void 0),(d.singleFileUploads||p||m)&&this._isXHRUpload(d))if(d.singleFileUploads||m||!p)if(!d.singleFileUploads&&m)for(r=[],n=[],o=0;om||p&&o+1-v>=p)&&(r.push(c.slice(v,o+1)),(a=g.slice(v,o+1)).length||(a=g),n.push(a),v=o+1,h=0);else n=g;else for(r=[],n=[],o=0;o").append(n)[0].reset(),i.after(n).detach(),a&&n.trigger("focus"),e.cleanData(i.off("remove")),this.options.fileInput=this.options.fileInput.map((function(e,t){return t===i[0]?n[0]:t})),i[0]===this.element[0]&&(this.element=n)},_handleFileTreeEntry:function(t,i){var n,a=this,r=e.Deferred(),o=[],s=function(e){e&&!e.entry&&(e.entry=t),r.resolve([e])};return i=i||"",t.isFile?t._file?(t._file.relativePath=i,r.resolve(t._file)):t.file((function(e){e.relativePath=i,r.resolve(e)}),s):t.isDirectory?(n=t.createReader(),function e(){n.readEntries((function(n){n.length?(o=o.concat(n),e()):function(e){a._handleFileTreeEntries(e,i+t.name+"/").done((function(e){r.resolve(e)})).fail(s)}(o)}),s)}()):r.resolve([]),r.promise()},_handleFileTreeEntries:function(t,i){var n=this;return e.when.apply(e,e.map(t,(function(e){return n._handleFileTreeEntry(e,i)})))[this._promisePipe]((function(){return Array.prototype.concat.apply([],arguments)}))},_getDroppedFiles:function(t){var i=(t=t||{}).items;return i&&i.length&&(i[0].webkitGetAsEntry||i[0].getAsEntry)?this._handleFileTreeEntries(e.map(i,(function(e){var t;return e.webkitGetAsEntry?((t=e.webkitGetAsEntry())&&(t._file=e.getAsFile()),t):e.getAsEntry()}))):e.Deferred().resolve(e.makeArray(t.files)).promise()},_getSingleFileInputFiles:function(t){var i,n,a=(t=e(t)).prop("entries");if(a&&a.length)return this._handleFileTreeEntries(a);if((i=e.makeArray(t.prop("files"))).length)void 0===i[0].name&&i[0].fileName&&e.each(i,(function(e,t){t.name=t.fileName,t.size=t.fileSize}));else{if(!(n=t.prop("value")))return e.Deferred().resolve([]).promise();i=[{name:n.replace(/^.*\\/,"")}]}return e.Deferred().resolve(i).promise()},_getFileInputFiles:function(t){return t instanceof e&&1!==t.length?e.when.apply(e,e.map(t,this._getSingleFileInputFiles))[this._promisePipe]((function(){return Array.prototype.concat.apply([],arguments)})):this._getSingleFileInputFiles(t)},_onChange:function(t){var i=this,n={fileInput:e(t.target),form:e(t.target.form)};this._getFileInputFiles(n.fileInput).always((function(a){n.files=a,i.options.replaceFileInput&&i._replaceFileInput(n),!1!==i._trigger("change",e.Event("change",{delegatedEvent:t}),n)&&i._onAdd(t,n)}))},_onPaste:function(t){var i=t.originalEvent&&t.originalEvent.clipboardData&&t.originalEvent.clipboardData.items,n={files:[]};i&&i.length&&(e.each(i,(function(e,t){var i=t.getAsFile&&t.getAsFile();i&&n.files.push(i)})),!1!==this._trigger("paste",e.Event("paste",{delegatedEvent:t}),n)&&this._onAdd(t,n))},_onDrop:function(t){t.dataTransfer=t.originalEvent&&t.originalEvent.dataTransfer;var i=this,n=t.dataTransfer,a={};n&&n.files&&n.files.length&&(t.preventDefault(),this._getDroppedFiles(n).always((function(n){a.files=n,!1!==i._trigger("drop",e.Event("drop",{delegatedEvent:t}),a)&&i._onAdd(t,a)})))},_onDragOver:t("dragover"),_onDragEnter:t("dragenter"),_onDragLeave:t("dragleave"),_initEventHandlers:function(){this._isXHRUpload(this.options)&&(this._on(this.options.dropZone,{dragover:this._onDragOver,drop:this._onDrop,dragenter:this._onDragEnter,dragleave:this._onDragLeave}),this._on(this.options.pasteZone,{paste:this._onPaste})),e.support.fileInput&&this._on(this.options.fileInput,{change:this._onChange})},_destroyEventHandlers:function(){this._off(this.options.dropZone,"dragenter dragleave dragover drop"),this._off(this.options.pasteZone,"paste"),this._off(this.options.fileInput,"change")},_destroy:function(){this._destroyEventHandlers()},_setOption:function(t,i){var n=-1!==e.inArray(t,this._specialOptions);n&&this._destroyEventHandlers(),this._super(t,i),n&&(this._initSpecialOptions(),this._initEventHandlers())},_initSpecialOptions:function(){var t=this.options;void 0===t.fileInput?t.fileInput=this.element.is('input[type="file"]')?this.element:this.element.find('input[type="file"]'):t.fileInput instanceof e||(t.fileInput=e(t.fileInput)),t.dropZone instanceof e||(t.dropZone=e(t.dropZone)),t.pasteZone instanceof e||(t.pasteZone=e(t.pasteZone))},_getRegExp:function(e){var t=e.split("/"),i=t.pop();return t.shift(),new RegExp(t.join("/"),i)},_isRegExpOption:function(t,i){return"url"!==t&&"string"===e.type(i)&&/^\/.*\/[igm]{0,3}$/.test(i)},_initDataAttributes:function(){var t=this,i=this.options,n=this.element.data();e.each(this.element[0].attributes,(function(e,a){var r,o=a.name.toLowerCase();/^data-/.test(o)&&(o=o.slice(5).replace(/-[a-z]/g,(function(e){return e.charAt(1).toUpperCase()})),r=n[o],t._isRegExpOption(o,r)&&(r=t._getRegExp(r)),i[o]=r)}))},_create:function(){this._initDataAttributes(),this._initSpecialOptions(),this._slots=[],this._sequence=this._getXHRPromise(!0),this._sending=this._active=0,this._initProgressObject(this),this._initEventHandlers()},active:function(){return this._active},progress:function(){return this._progress},add:function(t){var i=this;t&&!this.options.disabled&&(t.fileInput&&!t.files?this._getFileInputFiles(t.fileInput).always((function(e){t.files=e,i._onAdd(null,t)})):(t.files=e.makeArray(t.files),this._onAdd(null,t)))},send:function(t){if(t&&!this.options.disabled){if(t.fileInput&&!t.files){var i,n,a=this,r=e.Deferred(),o=r.promise();return o.abort=function(){return n=!0,i?i.abort():(r.reject(null,"abort","abort"),o)},this._getFileInputFiles(t.fileInput).always((function(e){n||(e.length?(t.files=e,(i=a._onSend(null,t)).then((function(e,t,i){r.resolve(e,t,i)}),(function(e,t,i){r.reject(e,t,i)}))):r.reject())})),this._enhancePromise(o)}if(t.files=e.makeArray(t.files),t.files.length)return this._onSend(null,t)}return this._getXHRPromise(!1,t&&t.context)}})})),function(e){"use strict";"function"==typeof define&&define.amd?define(["jquery"],e):"object"===("undefined"==typeof exports?"undefined":_typeof(exports))?e(require("jquery")):e(window.jQuery)}((function(e){"use strict";var t=0,i=e,n="parseJSON";"JSON"in window&&"parse"in JSON&&(i=JSON,n="parse"),e.ajaxTransport("iframe",(function(i){if(i.async){var n,a,r,o=i.initialIframeSrc||"javascript:false;";return{send:function(s,l){(n=e('
    ')).attr("accept-charset",i.formAcceptCharset),r=/\?/.test(i.url)?"&":"?","DELETE"===i.type?(i.url=i.url+r+"_method=DELETE",i.type="POST"):"PUT"===i.type?(i.url=i.url+r+"_method=PUT",i.type="POST"):"PATCH"===i.type&&(i.url=i.url+r+"_method=PATCH",i.type="POST"),a=e('').on("load",(function(){var t,r=e.isArray(i.paramName)?i.paramName:[i.paramName];a.off("load").on("load",(function(){var t;try{if(!(t=a.contents()).length||!t[0].firstChild)throw new Error}catch(e){t=void 0}l(200,"success",{iframe:t}),e('').appendTo(n),window.setTimeout((function(){n.remove()}),0)})),n.prop("target",a.prop("name")).prop("action",i.url).prop("method",i.type),i.formData&&e.each(i.formData,(function(t,i){e('').prop("name",i.name).val(i.value).appendTo(n)})),i.fileInput&&i.fileInput.length&&"POST"===i.type&&(t=i.fileInput.clone(),i.fileInput.after((function(e){return t[e]})),i.paramName&&i.fileInput.each((function(t){e(this).prop("name",r[t]||i.paramName)})),n.append(i.fileInput).prop("enctype","multipart/form-data").prop("encoding","multipart/form-data"),i.fileInput.removeAttr("form")),window.setTimeout((function(){n.submit(),t&&t.length&&i.fileInput.each((function(i,n){var a=e(t[i]);e(n).prop("name",a.prop("name")).attr("form",a.attr("form")),a.replaceWith(n)}))}),0)})),n.append(a).appendTo(document.body)},abort:function(){a&&a.off("load").prop("src",o),n&&n.remove()}}}})),e.ajaxSetup({converters:{"iframe text":function(t){return t&&e(t[0].body).text()},"iframe json":function(t){return t&&i[n](e(t[0].body).text())},"iframe html":function(t){return t&&e(t[0].body).html()},"iframe xml":function(t){var i=t&&t[0];return i&&e.isXMLDoc(i)?i:e.parseXML(i.XMLDocument&&i.XMLDocument.xml||e(i.body).html())},"iframe script":function(t){return t&&e.globalEval(e(t[0].body).text())}}})}));var bus=new Vue;function initializeMediaApplication(e,t,i){initialized||(initialized=!0,t||console.error("mediaApplicationUrl variable is not defined"),$.ajax({url:t,method:"GET",success:function(t){$(".ta-content").append(t),$(document).trigger("mediaapplication:ready");var n={name:$("#t-mediaLibrary").text(),path:"",folder:"",isDirectory:!0};mediaApp=new Vue({el:"#mediaApp",data:{selectedFolder:{},mediaItems:[],selectedMedias:[],errors:[],dragDropThumbnail:new Image,smallThumbs:!1,gridView:!1,mediaFilter:"",sortBy:"",sortAsc:!0,itemsInPage:[]},created:function(){var e=this;e.dragDropThumbnail.src=(i||"")+"/OrchardCore.Media/Images/drag-thumbnail.png",bus.$on("folderSelected",(function(t){e.selectedFolder=t})),bus.$on("folderDeleted",(function(){e.selectRoot()})),bus.$on("folderAdded",(function(t){e.selectedFolder=t,t.selected=!0})),bus.$on("mediaListMoved",(function(t){e.loadFolder(e.selectedFolder),t&&e.errors.push(t)})),bus.$on("mediaRenamed",(function(t,i,n){var a=e.mediaItems.filter((function(e){return e.mediaPath===n}))[0];a.mediaPath=i,a.name=t})),bus.$on("createFolderRequested",(function(t){e.createFolder()})),bus.$on("deleteFolderRequested",(function(t){e.deleteFolder()})),bus.$on("sortChangeRequested",(function(t){e.changeSort(t)})),bus.$on("mediaToggleRequested",(function(t){e.toggleSelectionOfMedia(t)})),bus.$on("renameMediaRequested",(function(t){e.renameMedia(t)})),bus.$on("deleteMediaRequested",(function(t){e.deleteMediaItem(t)})),bus.$on("mediaDragStartRequested",(function(t,i){e.handleDragStart(t,i)})),bus.$on("pagerEvent",(function(t){e.itemsInPage=t,e.selectedMedias=[]})),localStorage.getItem("mediaApplicationPrefs")?e.currentPrefs=JSON.parse(localStorage.getItem("mediaApplicationPrefs")):e.selectedFolder=n},computed:{isHome:function(){return this.selectedFolder==n},parents:function(){var e=[];for(parentFolder=this.selectedFolder;parentFolder&&""!=parentFolder.path;)e.unshift(parentFolder),parentFolder=parentFolder.parent;return e},root:function(){return n},filteredMediaItems:function(){var e=this;e.selectedMedias=[];var t=e.mediaItems.filter((function(t){return t.name.toLowerCase().indexOf(e.mediaFilter.toLowerCase())>-1}));switch(e.sortBy){case"size":t.sort((function(t,i){return e.sortAsc?t.size-i.size:i.size-t.size}));break;case"mime":t.sort((function(t,i){return e.sortAsc?t.mime.toLowerCase().localeCompare(i.mime.toLowerCase()):i.mime.toLowerCase().localeCompare(t.mime.toLowerCase())}));break;case"lastModify":t.sort((function(t,i){return e.sortAsc?t.lastModify-i.lastModify:i.lastModify-t.lastModify}));break;default:t.sort((function(t,i){return e.sortAsc?t.name.toLowerCase().localeCompare(i.name.toLowerCase()):i.name.toLowerCase().localeCompare(t.name.toLowerCase())}))}return t},hiddenCount:function(){return this.mediaItems.length-this.filteredMediaItems.length},thumbSize:function(){return this.smallThumbs?100:240},currentPrefs:{get:function(){return{smallThumbs:this.smallThumbs,selectedFolder:this.selectedFolder,gridView:this.gridView}},set:function(e){e&&(this.smallThumbs=e.smallThumbs,this.selectedFolder=e.selectedFolder,this.gridView=e.gridView)}}},watch:{currentPrefs:function(e){localStorage.setItem("mediaApplicationPrefs",JSON.stringify(e))},selectedFolder:function(e){this.mediaFilter="",this.selectedFolder=e,this.loadFolder(e)}},mounted:function(){this.$refs.rootFolder.toggle()},methods:{uploadUrl:function(){if(!this.selectedFolder)return null;var e=$("#uploadFiles").val();return e+(-1==e.indexOf("?")?"?":"&")+"path="+encodeURIComponent(this.selectedFolder.path)},selectRoot:function(){this.selectedFolder=this.root},loadFolder:function(e){this.errors=[],this.selectedMedias=[];var t=this,i=$("#getMediaItemsUrl").val();console.log(e.path),$.ajax({url:i+(-1==i.indexOf("?")?"?":"&")+"path="+encodeURIComponent(e.path),method:"GET",success:function(e){e.forEach((function(e){e.open=!1})),t.mediaItems=e,t.selectedMedias=[],t.sortBy="",t.sortAsc=!0},error:function(i){console.log("error loading folder:"+e.path),t.selectRoot()}})},selectAll:function(){this.selectedMedias=[];for(var e=0;e-1&&(t.mediaItems.splice(n,1),bus.$emit("mediaDeleted",t.selectedMedias[i]))}t.selectedMedias=[]},error:function(e){console.error(e.responseText)}})}}}))},deleteMediaItem:function(e){var t=this;e&&confirmDialog(_objectSpread(_objectSpread({},$("#deleteMedia").data()),{},{callback:function(i){i&&$.ajax({url:$("#deleteMediaUrl").val()+"?path="+encodeURIComponent(e.mediaPath),method:"POST",data:{__RequestVerificationToken:$("input[name='__RequestVerificationToken']").val()},success:function(i){var n=t.mediaItems&&t.mediaItems.indexOf(e);n>-1&&(t.mediaItems.splice(n,1),bus.$emit("mediaDeleted",e))},error:function(e){console.error(e.responseText)}})}}))},handleDragStart:function(e,t){var i=[];this.selectedMedias.forEach((function(e){i.push(e.name)})),0==this.isMediaSelected(e)&&(i.push(e.name),this.selectedMedias.push(e)),t.dataTransfer.setData("mediaNames",JSON.stringify(i)),t.dataTransfer.setData("sourceFolder",this.selectedFolder.path),t.dataTransfer.setDragImage(this.dragDropThumbnail,10,10),t.dataTransfer.effectAllowed="move"},handleScrollWhileDrag:function(e){e.clientY<150&&window.scrollBy(0,-10),e.clientY>window.innerHeight-100&&window.scrollBy(0,10)},changeSort:function(e){this.sortBy==e?this.sortAsc=!this.sortAsc:(this.sortAsc=!0,this.sortBy=e)}}}),$("#create-folder-name").keypress((function(e){if(13==e.which)return $("#modalFooterOk").click(),!1})),$("#modalFooterOk").on("click",(function(e){var t=$("#create-folder-name").val();""!==t&&$.ajax({url:$("#createFolderUrl").val()+"?path="+encodeURIComponent(mediaApp.selectedFolder.path)+"&name="+encodeURIComponent(t),method:"POST",data:{__RequestVerificationToken:$("input[name='__RequestVerificationToken']").val()},success:function(e){bus.$emit("addFolder",mediaApp.selectedFolder,e),bootstrap.Modal.getOrCreateInstance($("#createFolderModal")).hide()},error:function(e){$("#createFolderModal-errors").empty();var t=JSON.parse(e.responseText).value;$('').text(t).appendTo($("#createFolderModal-errors"))}})})),$("#renameMediaModalFooterOk").on("click",(function(e){var t=$("#new-item-name").val(),i=$("#old-item-name").val();if(""!==t){var n=mediaApp.selectedFolder.path+"/";"/"===n&&(n="");var a=n+t,r=n+i;if(a.toLowerCase()!==r.toLowerCase())$.ajax({url:$("#renameMediaUrl").val()+"?oldPath="+encodeURIComponent(r)+"&newPath="+encodeURIComponent(a),method:"POST",data:{__RequestVerificationToken:$("input[name='__RequestVerificationToken']").val()},success:function(e){bootstrap.Modal.getOrCreateInstance($("#renameMediaModal")).hide(),bus.$emit("mediaRenamed",t,a,r)},error:function(e){$("#renameMediaModal-errors").empty();var t=JSON.parse(e.responseText).value;$('').text(t).appendTo($("#renameMediaModal-errors"))}});else bootstrap.Modal.getOrCreateInstance($("#renameMediaModal")).hide()}})),e&&(document.getElementById("mediaApp").style.display=""),$(document).trigger("mediaApp:ready")},error:function(e){console.error(e.responseText)}}))}function _typeof(e){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_typeof(e)}function ownKeys(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function _objectSpread(e){for(var t=1;t0&&a},thumbSize:function(){return this.smallThumbs?120:240},currentPrefs:{get:function(){return{smallThumbs:this.smallThumbs}},set:function(e){e&&(this.smallThumbs=e.smallThumbs)}}},mounted:function(){var e=this;e.paths=c,e.$on("selectAndDeleteMediaRequested",(function(t){e.selectAndDeleteMedia(t)})),e.$on("selectMediaRequested",(function(t){e.selectMedia(t)}));var n="#"+t,r=u.attr("id"),o=randomUUID();$(n).fileupload({limitConcurrentUploads:20,dropZone:$("#"+r),dataType:"json",url:i,maxChunkSize:l,add:function(t,i){var n,a=i.files.length;for(n=0;n0)for(var r=0;r1&&!1===a?(alert($("#onlyOneItemMessage").val()),d.mediaItems.push(i[0]),d.initialized=!0):(d.mediaItems=d.mediaItems.concat(i),d.initialized=!0)):alert(n)},error:function(e,t,i){console.log("Error on upload."),console.log(e),console.log(t),console.log(i)}}).on("fileuploadchunkbeforesend",(function(e,t){var i=t.files[0];t.blob=new File([t.blob],i.name,{type:i.type,lastModified:i.lastModified})}))},methods:{selectMedia:function(e){this.selectedMedia=e},getUniqueId:function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){var t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)}))},removeSelected:function(e){if(this.selectedMedia){var t=this.mediaItems&&this.mediaItems.indexOf(this.selectedMedia);t>-1&&(this.mediaItems[t].isRemoved=!0,this.mediaItems.splice(t,1))}else 1===this.mediaItems.length&&(this.mediaItems[t].isRemoved=!0,this.mediaItems.splice(0,1));this.selectedMedia=null},showMediaTextModal:function(e){this.mediaTextModal=new bootstrap.Modal(this.$refs.mediaTextModal),this.mediaTextModal.show(),this.backupMediaText=this.selectedMedia.mediaText},cancelMediaTextModal:function(e){this.mediaTextModal.hide(),this.selectedMedia.mediaText=this.backupMediaText},showAnchorModal:function(e){this.anchoringModal=new bootstrap.Modal(this.$refs.anchoringModal),this.anchoringModal.show(),this.selectedMedia.anchor={x:this.selectedMedia.anchor.x,y:this.selectedMedia.anchor.y},this.backupAnchor=this.selectedMedia.anchor},cancelAnchoringModal:function(e){this.anchoringModal.hide(),this.selectedMedia.anchor=this.backupAnchor},resetAnchor:function(e){this.selectedMedia.anchor={x:.5,y:.5}},onAnchorDrop:function(e){var t=this.$refs.anchorImage;this.selectedMedia.anchor={x:e.offsetX/t.clientWidth,y:e.offsetY/t.clientHeight}},anchorLeft:function(){if(this.$refs.anchorImage&&this.$refs.modalBody&&this.selectedMedia){var e=(this.$refs.modalBody.clientWidth-this.$refs.anchorImage.clientWidth)/2,t=this.selectedMedia.anchor.x*this.$refs.anchorImage.clientWidth+e;return t<17?t=17:t-=8,t+"px"}return"0"},anchorTop:function(){if(this.$refs.anchorImage&&this.selectedMedia){var e=this.selectedMedia.anchor.y*this.$refs.anchorImage.clientHeight;return e<15?e=15:e+=5,e+"px"}return"0"},setAnchor:function(e){var t=this.$refs.anchorImage;this.selectedMedia.anchor={x:e.offsetX/t.clientWidth,y:e.offsetY/t.clientHeight}},addMediaFiles:function(e){e.length>1&&!1===a?(alert($("#onlyOneItemMessage").val()),d.mediaItems.push(e[0]),d.initialized=!0):(d.mediaItems=d.mediaItems.concat(e),d.initialized=!0)},selectAndDeleteMedia:function(e){var t=this;t.selectedMedia=e,setTimeout((function(){t.removeSelected()}),100)}},watch:{mediaItems:{deep:!0,handler:function(){setTimeout((function(){$(document).trigger("contentpreview:render")}),100)}},currentPrefs:function(e){localStorage.setItem("mediaFieldPrefs",JSON.stringify(e))}}}))}function initializeMediaField(e,t,i,n,a,r){if(null!==e){var o,s=$(document.getElementById($(e).data("for"))).data("init"),l=$(e),d=l.attr("id");t.addEventListener("hidden.bs.modal",(function(e){$("#mediaApp").appendTo("body"),$("#mediaApp").hide()})),mediaFieldApps.push(o=new Vue({el:l.get(0),data:{mediaItems:[],selectedMedia:null,smallThumbs:!1,idPrefix:d,initialized:!1,allowMediaText:a,backupMediaText:"",allowAnchors:r,backupAnchor:null,mediaTextModal:null,anchoringModal:null},created:function(){this.currentPrefs=JSON.parse(localStorage.getItem("mediaFieldPrefs"))},computed:{paths:{get:function(){var e=[];return this.initialized?(this.mediaItems.forEach((function(t){"not-found"!==t.mediaPath&&e.push({path:t.mediaPath,mediaText:t.mediaText,anchor:t.anchor})})),JSON.stringify(e)):JSON.stringify(s)},set:function(e){var t=this,n=e||[],a=$.Deferred(),r=[],o=0;n.forEach((function(e,n){r.push({name:" "+e.path,mime:"",mediaPath:""}),promise=$.when(a).done((function(){$.ajax({url:i+"?path="+encodeURIComponent(e.path),method:"GET",success:function(i){i.vuekey=i.name+n.toString(),i.mediaText=e.mediaText,i.anchor=e.anchor,r.splice(n,1,i),r.length===++o&&(r.forEach((function(e){t.mediaItems.push(e)})),t.initialized=!0)},error:function(i){console.log(i),r.splice(n,1,{name:e.path,mime:"",mediaPath:"not-found",mediaText:"",anchor:{x:0,y:0}}),r.length===++o&&(r.forEach((function(e){t.mediaItems.push(e)})),t.initialized=!0)}})}))})),a.resolve()}},fileSize:function(){return Math.round(this.selectedMedia.size/1024)},canAddMedia:function(){return 0===this.mediaItems.length||this.mediaItems.length>0&&n},thumbSize:function(){return this.smallThumbs?120:240},currentPrefs:{get:function(){return{smallThumbs:this.smallThumbs}},set:function(e){e&&(this.smallThumbs=e.smallThumbs)}}},mounted:function(){var e=this;e.paths=s,e.$on("selectAndDeleteMediaRequested",(function(t){e.selectAndDeleteMedia(t)})),e.$on("selectMediaRequested",(function(t){e.selectMedia(t)})),e.$on("filesUploaded",(function(t){e.addMediaFiles(t)}))},methods:{selectMedia:function(e){this.selectedMedia=e},showModal:function(e){var i=this;if(i.canAddMedia){$("#mediaApp").appendTo($(t).find(".modal-body")),$("#mediaApp").show();var n=new bootstrap.Modal(t);n.show(),$(t).find(".mediaFieldSelectButton").off("click").on("click",(function(e){return i.addMediaFiles(mediaApp.selectedMedias),mediaApp.selectedMedias=[],n.hide(),!0}))}},showMediaTextModal:function(e){this.mediaTextModal=new bootstrap.Modal(this.$refs.mediaTextModal),this.mediaTextModal.show(),this.backupMediaText=this.selectedMedia.mediaText},cancelMediaTextModal:function(e){this.mediaTextModal.hide(),this.selectedMedia.mediaText=this.backupMediaText},showAnchorModal:function(e){this.anchoringModal=new bootstrap.Modal(this.$refs.anchoringModal),this.anchoringModal.show(),this.selectedMedia.anchor={x:this.selectedMedia.anchor.x,y:this.selectedMedia.anchor.y},this.backupAnchor=this.selectedMedia.anchor},cancelAnchoringModal:function(e){this.anchoringModal.hide(),this.selectedMedia.anchor=this.backupAnchor},resetAnchor:function(e){this.selectedMedia.anchor={x:.5,y:.5}},onAnchorDrop:function(e){var t=this.$refs.anchorImage;this.selectedMedia.anchor={x:e.offsetX/t.clientWidth,y:e.offsetY/t.clientHeight}},anchorLeft:function(){if(this.$refs.anchorImage&&this.$refs.modalBody&&this.selectedMedia){var e=(this.$refs.modalBody.clientWidth-this.$refs.anchorImage.clientWidth)/2,t=this.selectedMedia.anchor.x*this.$refs.anchorImage.clientWidth+e,i=Math.round(this.$refs.modalBody.querySelector(".icon-media-anchor").clientWidth);return Number.isInteger(i)&&(t-=i/2),t+"px"}return"0"},anchorTop:function(){return this.$refs.anchorImage&&this.selectedMedia?this.selectedMedia.anchor.y*this.$refs.anchorImage.clientHeight+"px":"0"},setAnchor:function(e){var t=this.$refs.anchorImage;this.selectedMedia.anchor={x:e.offsetX/t.clientWidth,y:e.offsetY/t.clientHeight}},addMediaFiles:function(e){e.length>1&&!1===n?(alert($("#onlyOneItemMessage").val()),o.mediaItems.push(e[0]),o.initialized=!0):(o.mediaItems=o.mediaItems.concat(e),o.initialized=!0)},removeSelected:function(e){if(this.selectedMedia){var t=this.mediaItems&&this.mediaItems.indexOf(this.selectedMedia);t>-1&&this.mediaItems.splice(t,1)}else 1===this.mediaItems.length&&this.mediaItems.splice(0,1);this.selectedMedia=null},selectAndDeleteMedia:function(e){var t=this;t.selectedMedia=e,setTimeout((function(){t.removeSelected()}),100)}},watch:{mediaItems:{deep:!0,handler:function(){setTimeout((function(){$(document).trigger("contentpreview:render")}),100)}},currentPrefs:function(e){localStorage.setItem("mediaFieldPrefs",JSON.stringify(e))}}}))}}$(document).on("mediaApp:ready",(function(){var e=randomUUID();$("#fileupload").fileupload({dropZone:$("#mediaApp"),limitConcurrentUploads:20,dataType:"json",url:$("#uploadFiles").val(),maxChunkSize:Number($("#maxUploadChunkSize").val()||0),formData:function(){var t=$("input[name=__RequestVerificationToken]").val();return[{name:"path",value:mediaApp.selectedFolder.path},{name:"__RequestVerificationToken",value:t},{name:"__chunkedFileUploadId",value:e}]},done:function(e,t){$.each(t.result.files,(function(e,t){t.error||mediaApp.mediaItems.push(t)}))}}).on("fileuploadchunkbeforesend",(function(e,t){var i=t.files[0];t.blob=new File([t.blob],i.name,{type:i.type,lastModified:i.lastModified})}))})),$(document).bind("dragover",(function(e){var t=e.originalEvent.dataTransfer;if(t.types&&(t.types.indexOf?-1!=t.types.indexOf("Files"):t.types.contains("Files"))){var i=$("#customdropzone"),n=window.dropZoneTimeout;n?clearTimeout(n):i.addClass("in");$(e.target).closest(i);window.dropZoneTimeout=setTimeout((function(){window.dropZoneTimeout=null,i.removeClass("in")}),100)}})),Vue.component("folder",{template:'\n
  • \n \n
      \n \n \n
    \n
  • \n '),props:{model:Object,selectedInMediaApp:Object,level:Number},data:function(){return{open:!1,children:null,parent:null,isHovered:!1,padding:0}},computed:{empty:function(){return!this.children||0==this.children.length},isSelected:function(){return this.selectedInMediaApp.name==this.model.name&&this.selectedInMediaApp.path==this.model.path},isRoot:function(){return""===this.model.path}},mounted:function(){0==this.isRoot&&this.isAncestorOfSelectedFolder()&&this.toggle(),this.padding=this.level<3?16:16+8*this.level},created:function(){var e=this;bus.$on("deleteFolder",(function(t){if(e.children){var i=e.children&&e.children.indexOf(t);i>-1&&(e.children.splice(i,1),bus.$emit("folderDeleted"))}})),bus.$on("addFolder",(function(t,i){e.model==t&&(null!==e.children&&e.children.push(i),i.parent=e.model,bus.$emit("folderAdded",i))}))},methods:{isAncestorOfSelectedFolder:function(){for(parentFolder=mediaApp.selectedFolder;parentFolder;){if(parentFolder.path==this.model.path)return!0;parentFolder=parentFolder.parent}return!1},toggle:function(){this.open=!this.open,this.open&&!this.children&&this.loadChildren()},select:function(){bus.$emit("folderSelected",this.model),this.loadChildren()},createFolder:function(){bus.$emit("createFolderRequested")},deleteFolder:function(){bus.$emit("deleteFolderRequested")},loadChildren:function(){var e=this;0==this.open&&(this.open=!0),$.ajax({url:$("#getFoldersUrl").val()+"?path="+encodeURIComponent(e.model.path),method:"GET",success:function(t){e.children=t,e.children.forEach((function(t){t.parent=e.model}))},error:function(e){emtpy=!1,console.error(e.responseText)}})},handleDragOver:function(e){this.isHovered=!0},handleDragLeave:function(e){this.isHovered=!1},moveMediaToFolder:function(e,t){this.isHovered=!1;var i=JSON.parse(t.dataTransfer.getData("mediaNames"));if(!(i.length<1)){var n=t.dataTransfer.getData("sourceFolder"),a=e.path;""===n&&(n="root"),""===a&&(a="root"),n!==a?confirmDialog(_objectSpread(_objectSpread({},$("#moveMedia").data()),{},{callback:function(e){e&&$.ajax({url:$("#moveMediaListUrl").val(),method:"POST",data:{__RequestVerificationToken:$("input[name='__RequestVerificationToken']").val(),mediaNames:i,sourceFolder:n,targetFolder:a},success:function(){bus.$emit("mediaListMoved")},error:function(e){console.error(e.responseText),bus.$emit("mediaListMoved",e.responseText)}})}})):alert($("#sameFolderMessage").val())}}}}),Vue.component("media-items-grid",{template:'\n
      \n
    1. \n
      \n \n \n
      \n
      \n \n \n \n {{ media.name }}\n
      \n
    2. \n
    \n ',data:function(){return{T:{}}},props:{filteredMediaItems:Array,selectedMedias:Array,thumbSize:Number},created:function(){this.T.editButton=$("#t-edit-button").val(),this.T.deleteButton=$("#t-delete-button").val()},methods:{isMediaSelected:function(e){return this.selectedMedias.some((function(t,i,n){return t.url.toLowerCase()===e.url.toLowerCase()}))},buildMediaUrl:function(e,t){return e+(-1==e.indexOf("?")?"?":"&")+"width="+t+"&height="+t},toggleSelectionOfMedia:function(e){bus.$emit("mediaToggleRequested",e)},renameMedia:function(e){bus.$emit("renameMediaRequested",e)},deleteMedia:function(e){bus.$emit("deleteMediaRequested",e)},dragStart:function(e,t){bus.$emit("mediaDragStartRequested",e,t)}}}),Vue.component("media-items-table",{template:'\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    {{ T.imageHeader }}\n {{ T.nameHeader }}\n \n \n {{ T.lastModifyHeader }} \n \n \n \n {{ T.sizeHeader }}\n \n \n \n \n {{ T.typeHeader }}\n \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    {{ printDateTime(media.lastModify) }}
    \n
    \n
    {{ isNaN(media.size)? 0 : Math.round(media.size / 1024) }} KB
    \n
    \n
    {{ media.mime }}
    \n
    \n ',data:function(){return{T:{}}},props:{sortBy:String,sortAsc:Boolean,filteredMediaItems:Array,selectedMedias:Array,thumbSize:Number},created:function(){var e=this;e.T.imageHeader=$("#t-image-header").val(),e.T.nameHeader=$("#t-name-header").val(),e.T.lastModifyHeader=$("#t-lastModify-header").val(),e.T.sizeHeader=$("#t-size-header").val(),e.T.typeHeader=$("#t-type-header").val(),e.T.editButton=$("#t-edit-button").val(),e.T.deleteButton=$("#t-delete-button").val(),e.T.viewButton=$("#t-view-button").val()},methods:{isMediaSelected:function(e){return this.selectedMedias.some((function(t,i,n){return t.url.toLowerCase()===e.url.toLowerCase()}))},buildMediaUrl:function(e,t){return e+(-1==e.indexOf("?")?"?":"&")+"width="+t+"&height="+t},changeSort:function(e){bus.$emit("sortChangeRequested",e)},toggleSelectionOfMedia:function(e){bus.$emit("mediaToggleRequested",e)},renameMedia:function(e){bus.$emit("renameMediaRequested",e)},deleteMedia:function(e){bus.$emit("deleteMediaRequested",e)},dragStart:function(e,t){bus.$emit("mediaDragStartRequested",e,t)},printDateTime:function(e){return new Date(e).toLocaleString()}}}),Vue.component("pager",{template:'\n
    \n \n \n
    \n ',props:{sourceItems:Array},data:function(){return{pageSize:10,pageSizeOptions:[10,30,50,100],current:0,T:{}}},created:function(){var e=this;e.T.pagerFirstButton=$("#t-pager-first-button").val(),e.T.pagerPreviousButton=$("#t-pager-previous-button").val(),e.T.pagerNextButton=$("#t-pager-next-button").val(),e.T.pagerLastButton=$("#t-pager-last-button").val(),e.T.pagerPageSizeLabel=$("#t-pager-page-size-label").val(),e.T.pagerPageLabel=$("#t-pager-page-label").val(),e.T.pagerTotalLabel=$("#t-pager-total-label").val()},methods:{next:function(){this.current=this.current+1},previous:function(){this.current=this.current-1},goFirst:function(){this.current=0},goLast:function(){this.current=this.totalPages-1},goTo:function(e){this.current=e}},computed:{total:function(){return this.sourceItems?this.sourceItems.length:0},totalPages:function(){var e=Math.ceil(this.total/this.pageSize);return e>0?e:1},isLastPage:function(){return this.current+1>=this.totalPages},isFirstPage:function(){return 0===this.current},canDoNext:function(){return!this.isLastPage},canDoPrev:function(){return!this.isFirstPage},canDoFirst:function(){return!this.isFirstPage},canDoLast:function(){return!this.isLastPage},itemsInCurrentPage:function(){var e=this.pageSize*this.current,t=e+this.pageSize,i=this.sourceItems.slice(e,t);return bus.$emit("pagerEvent",i),i},pageLinks:function(){var e=[];e.push(this.current+1);var t=this.current>0?this.current:-1;e.unshift(t);var i=this.current>1?this.current-1:-1;e.unshift(i);var n=this.totalPages-this.current>1?this.current+2:-1;e.push(n);var a=this.totalPages-this.current>2?this.current+3:-1;return e.push(a),e}},watch:{sourceItems:function(){this.current=0},pageSize:function(){this.current=0}}}),Vue.component("sortIndicator",{template:'\n
    \n \n \n
    \n ',props:{colname:String,selectedcolname:String,asc:Boolean},computed:{isActive:function(){return this.colname.toLowerCase()==this.selectedcolname.toLowerCase()}}});var mediaFieldApps=[];Vue.component("mediaFieldThumbsContainer",{template:'
    {{T.noImages}}
  • {{ media.isNew ? media.name.substr(36) : media.name }}
    {{ T.mediaNotFound }} {{ T.discardWarning }}
    {{ media.name }}
  • ',data:function(){return{T:{}}},props:{mediaItems:Array,selectedMedia:Object,thumbSize:Number,idPrefix:String},created:function(){var e=this;e.T.mediaNotFound=$("#t-media-not-found").val(),e.T.discardWarning=$("#t-discard-warning").val(),e.T.noImages=$("#t-no-images").val()},methods:{selectAndDeleteMedia:function(e){this.$parent.$emit("selectAndDeleteMediaRequested",e)},selectMedia:function(e){this.$parent.$emit("selectMediaRequested",e)},buildMediaUrl:function(e,t){return e+(-1==e.indexOf("?")?"?":"&")+"width="+t+"&height="+t}}}),Vue.component("upload",{template:'

    {{ model.name }}

    Error: {{ model.errorMessage }}
    ',props:{model:Object,uploadInputId:String},mounted:function(){var e,t=this,i=document.getElementById(null!==(e=t.uploadInputId)&&void 0!==e?e:"fileupload");$(i).bind("fileuploadprogress",(function(e,i){i.files[0].name===t.model.name&&(t.model.percentage=parseInt(i.loaded/i.total*100,10))})),$(i).bind("fileuploaddone",(function(e,i){i.files[0].name===t.model.name&&(i.result.files[0].error?t.handleFailure(i.files[0].name,i.result.files[0].error):bus.$emit("removalRequest",t.model))})),$(i).bind("fileuploadfail",(function(e,i){i.files[0].name===t.model.name&&t.handleFailure(i.files[0].name,$("#t-error").val())}))},methods:{handleFailure:function(e,t){e===this.model.name&&(this.model.errorMessage=t,bus.$emit("ErrorOnUpload",this.model))},dismissWarning:function(){bus.$emit("removalRequest",this.model)}}}),Vue.component("uploadList",{template:'
    {{ T.uploads }} (Pending: {{ pendingCount }}) ( {{ T.errors }}: {{ errorCount }} / {{ T.clearErrors }} )
    ',data:function(){return{files:[],T:{},expanded:!1,pendingCount:0,errorCount:0}},props:{uploadInputId:String},created:function(){var e=this;e.T.uploads=$("#t-uploads").val(),e.T.errors=$("#t-errors").val(),e.T.clearErrors=$("#t-clear-errors").val()},computed:{fileCount:function(){return this.files.length}},mounted:function(){var e,t=this,i=document.getElementById(null!==(e=t.uploadInputId)&&void 0!==e?e:"fileupload");$(i).bind("fileuploadadd",(function(e,i){i.files&&i.files.forEach((function(e){t.files.some((function(t){return t.name==e.name}))?console.error("A file with the same name is already on the queue:"+e.name):t.files.push({name:e.name,percentage:0,errorMessage:""})}))})),bus.$on("removalRequest",(function(e){t.files.forEach((function(t,i,n){t.name==e.name&&n.splice(i,1)}))})),bus.$on("ErrorOnUpload",(function(e){t.updateCount()}))},methods:{updateCount:function(){this.errorCount=this.files.filter((function(e){return""!=e.errorMessage})).length,this.pendingCount=this.files.length-this.errorCount,this.files.length<1&&(this.expanded=!1)},clearErrors:function(){this.files=this.files.filter((function(e){return""==e.errorMessage}))}},watch:{files:function(){this.updateCount()}}}); diff --git a/src/OrchardCore.Modules/OrchardCore.Notifications/Views/UserNotificationCollection.cshtml b/src/OrchardCore.Modules/OrchardCore.Notifications/Views/UserNotificationCollection.cshtml index cf203c0ed49..924701f50ed 100644 --- a/src/OrchardCore.Modules/OrchardCore.Notifications/Views/UserNotificationCollection.cshtml +++ b/src/OrchardCore.Modules/OrchardCore.Notifications/Views/UserNotificationCollection.cshtml @@ -4,48 +4,48 @@ diff --git a/src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/trumbowyg-plugins.js b/src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/trumbowyg-plugins.js index 6e424c7a127..c3c67e078c2 100644 --- a/src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/trumbowyg-plugins.js +++ b/src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/trumbowyg-plugins.js @@ -328,6 +328,103 @@ } }); }(jQuery); +/* =========================================================== + * trumbowyg.allowTagsFromPaste.js v1.0.2 + * It cleans tags from pasted text, whilst allowing several specified tags + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Fathi Anshory (0x00000F5C) + * Twitter : @fscchannl + * Notes: + * - removeformatPasted must be set to FALSE since it was applied prior to pasteHandlers, or else it will be useless + * - It is most advisable to use along with the cleanpaste plugin, or else you'd end up with dirty markup + */ + +(function ($) { + 'use strict'; + + var defaultOptions = { + // When empty, all tags are allowed making this plugin useless + // If you want to remove all tags, use removeformatPasted core option instead + allowedTags: [], + // List of tags which can be allowed + removableTags: ['a', 'abbr', 'address', 'b', 'bdi', 'bdo', 'blockquote', 'br', 'cite', 'code', 'del', 'dfn', 'details', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'ins', 'kbd', 'mark', 'meter', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'small', 'span', 'strong', 'sub', 'summary', 'sup', 'time', 'u', 'var', 'wbr', 'img', 'map', 'area', 'canvas', 'figcaption', 'figure', 'picture', 'audio', 'source', 'track', 'video', 'ul', 'ol', 'li', 'dl', 'dt', 'dd', 'table', 'caption', 'th', 'tr', 'td', 'thead', 'tbody', 'tfoot', 'col', 'colgroup', 'style', 'div', 'p', 'form', 'input', 'textarea', 'button', 'select', 'optgroup', 'option', 'label', 'fieldset', 'legend', 'datalist', 'keygen', 'output', 'iframe', 'link', 'nav', 'header', 'hgroup', 'footer', 'main', 'section', 'article', 'aside', 'dialog', 'script', 'noscript', 'embed', 'object', 'param'] + }; + $.extend(true, $.trumbowyg, { + plugins: { + allowTagsFromPaste: { + init: function init(trumbowyg) { + if (!trumbowyg.o.plugins.allowTagsFromPaste) { + return; + } + + // Force disable remove format pasted + trumbowyg.o.removeformatPasted = false; + var allowedTags = trumbowyg.o.plugins.allowTagsFromPaste.allowedTags || defaultOptions.allowedTags; + var removableTags = trumbowyg.o.plugins.allowTagsFromPaste.removableTags || defaultOptions.removableTags; + if (allowedTags.length === 0) { + return; + } + + // Get list of tags to remove + var tagsToRemove = $(removableTags).not(allowedTags).get(); + trumbowyg.pasteHandlers.push(function () { + setTimeout(function () { + var processNodes = trumbowyg.$ed.html(); + $.each(tagsToRemove, function (iterator, tagName) { + processNodes = processNodes.replace(new RegExp('<\\/?' + tagName + '(\\s[^>]*)?>', 'gi'), ''); + }); + trumbowyg.$ed.html(processNodes); + }, 0); + }); + } + } + } + }); +})(jQuery); +/* =========================================================== + * trumbowyg.allowTagsFromPaste.js v1.0.2 + * It cleans tags from pasted text, whilst allowing several specified tags + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Fathi Anshory (0x00000F5C) + * Twitter : @fscchannl + * Notes: + * - removeformatPasted must be set to FALSE since it was applied prior to pasteHandlers, or else it will be useless + * - It is most advisable to use along with the cleanpaste plugin, or else you'd end up with dirty markup + */ +!function (e) { + "use strict"; + + var a = { + allowedTags: [], + removableTags: ["a", "abbr", "address", "b", "bdi", "bdo", "blockquote", "br", "cite", "code", "del", "dfn", "details", "em", "h1", "h2", "h3", "h4", "h5", "h6", "hr", "i", "ins", "kbd", "mark", "meter", "pre", "progress", "q", "rp", "rt", "ruby", "s", "samp", "small", "span", "strong", "sub", "summary", "sup", "time", "u", "var", "wbr", "img", "map", "area", "canvas", "figcaption", "figure", "picture", "audio", "source", "track", "video", "ul", "ol", "li", "dl", "dt", "dd", "table", "caption", "th", "tr", "td", "thead", "tbody", "tfoot", "col", "colgroup", "style", "div", "p", "form", "input", "textarea", "button", "select", "optgroup", "option", "label", "fieldset", "legend", "datalist", "keygen", "output", "iframe", "link", "nav", "header", "hgroup", "footer", "main", "section", "article", "aside", "dialog", "script", "noscript", "embed", "object", "param"] + }; + e.extend(!0, e.trumbowyg, { + plugins: { + allowTagsFromPaste: { + init: function init(t) { + if (t.o.plugins.allowTagsFromPaste) { + t.o.removeformatPasted = !1; + var o = t.o.plugins.allowTagsFromPaste.allowedTags || a.allowedTags, + r = t.o.plugins.allowTagsFromPaste.removableTags || a.removableTags; + if (0 !== o.length) { + var s = e(r).not(o).get(); + t.pasteHandlers.push(function () { + setTimeout(function () { + var a = t.$ed.html(); + e.each(s, function (e, t) { + a = a.replace(new RegExp("<\\/?" + t + "(\\s[^>]*)?>", "gi"), ""); + }), t.$ed.html(a); + }, 0); + }); + } + } + } + } + } + }); +}(jQuery); /* =========================================================== * trumbowyg.cleanpaste.js v1.0 * Font Clean paste plugin for Trumbowyg @@ -517,103 +614,6 @@ } }); }(jQuery); -/* =========================================================== - * trumbowyg.allowTagsFromPaste.js v1.0.2 - * It cleans tags from pasted text, whilst allowing several specified tags - * http://alex-d.github.com/Trumbowyg - * =========================================================== - * Author : Fathi Anshory (0x00000F5C) - * Twitter : @fscchannl - * Notes: - * - removeformatPasted must be set to FALSE since it was applied prior to pasteHandlers, or else it will be useless - * - It is most advisable to use along with the cleanpaste plugin, or else you'd end up with dirty markup - */ - -(function ($) { - 'use strict'; - - var defaultOptions = { - // When empty, all tags are allowed making this plugin useless - // If you want to remove all tags, use removeformatPasted core option instead - allowedTags: [], - // List of tags which can be allowed - removableTags: ['a', 'abbr', 'address', 'b', 'bdi', 'bdo', 'blockquote', 'br', 'cite', 'code', 'del', 'dfn', 'details', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'ins', 'kbd', 'mark', 'meter', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'small', 'span', 'strong', 'sub', 'summary', 'sup', 'time', 'u', 'var', 'wbr', 'img', 'map', 'area', 'canvas', 'figcaption', 'figure', 'picture', 'audio', 'source', 'track', 'video', 'ul', 'ol', 'li', 'dl', 'dt', 'dd', 'table', 'caption', 'th', 'tr', 'td', 'thead', 'tbody', 'tfoot', 'col', 'colgroup', 'style', 'div', 'p', 'form', 'input', 'textarea', 'button', 'select', 'optgroup', 'option', 'label', 'fieldset', 'legend', 'datalist', 'keygen', 'output', 'iframe', 'link', 'nav', 'header', 'hgroup', 'footer', 'main', 'section', 'article', 'aside', 'dialog', 'script', 'noscript', 'embed', 'object', 'param'] - }; - $.extend(true, $.trumbowyg, { - plugins: { - allowTagsFromPaste: { - init: function init(trumbowyg) { - if (!trumbowyg.o.plugins.allowTagsFromPaste) { - return; - } - - // Force disable remove format pasted - trumbowyg.o.removeformatPasted = false; - var allowedTags = trumbowyg.o.plugins.allowTagsFromPaste.allowedTags || defaultOptions.allowedTags; - var removableTags = trumbowyg.o.plugins.allowTagsFromPaste.removableTags || defaultOptions.removableTags; - if (allowedTags.length === 0) { - return; - } - - // Get list of tags to remove - var tagsToRemove = $(removableTags).not(allowedTags).get(); - trumbowyg.pasteHandlers.push(function () { - setTimeout(function () { - var processNodes = trumbowyg.$ed.html(); - $.each(tagsToRemove, function (iterator, tagName) { - processNodes = processNodes.replace(new RegExp('<\\/?' + tagName + '(\\s[^>]*)?>', 'gi'), ''); - }); - trumbowyg.$ed.html(processNodes); - }, 0); - }); - } - } - } - }); -})(jQuery); -/* =========================================================== - * trumbowyg.allowTagsFromPaste.js v1.0.2 - * It cleans tags from pasted text, whilst allowing several specified tags - * http://alex-d.github.com/Trumbowyg - * =========================================================== - * Author : Fathi Anshory (0x00000F5C) - * Twitter : @fscchannl - * Notes: - * - removeformatPasted must be set to FALSE since it was applied prior to pasteHandlers, or else it will be useless - * - It is most advisable to use along with the cleanpaste plugin, or else you'd end up with dirty markup - */ -!function (e) { - "use strict"; - - var a = { - allowedTags: [], - removableTags: ["a", "abbr", "address", "b", "bdi", "bdo", "blockquote", "br", "cite", "code", "del", "dfn", "details", "em", "h1", "h2", "h3", "h4", "h5", "h6", "hr", "i", "ins", "kbd", "mark", "meter", "pre", "progress", "q", "rp", "rt", "ruby", "s", "samp", "small", "span", "strong", "sub", "summary", "sup", "time", "u", "var", "wbr", "img", "map", "area", "canvas", "figcaption", "figure", "picture", "audio", "source", "track", "video", "ul", "ol", "li", "dl", "dt", "dd", "table", "caption", "th", "tr", "td", "thead", "tbody", "tfoot", "col", "colgroup", "style", "div", "p", "form", "input", "textarea", "button", "select", "optgroup", "option", "label", "fieldset", "legend", "datalist", "keygen", "output", "iframe", "link", "nav", "header", "hgroup", "footer", "main", "section", "article", "aside", "dialog", "script", "noscript", "embed", "object", "param"] - }; - e.extend(!0, e.trumbowyg, { - plugins: { - allowTagsFromPaste: { - init: function init(t) { - if (t.o.plugins.allowTagsFromPaste) { - t.o.removeformatPasted = !1; - var o = t.o.plugins.allowTagsFromPaste.allowedTags || a.allowedTags, - r = t.o.plugins.allowTagsFromPaste.removableTags || a.removableTags; - if (0 !== o.length) { - var s = e(r).not(o).get(); - t.pasteHandlers.push(function () { - setTimeout(function () { - var a = t.$ed.html(); - e.each(s, function (e, t) { - a = a.replace(new RegExp("<\\/?" + t + "(\\s[^>]*)?>", "gi"), ""); - }), t.$ed.html(a); - }, 0); - }); - } - } - } - } - } - }); -}(jQuery); /* =========================================================== * trumbowyg.colors.js v1.2 * Colors picker plugin for Trumbowyg @@ -1105,283 +1105,62 @@ } }); }(jQuery); -/* =========================================================== - * trumbowyg.emoji.js v0.1 - * Emoji picker plugin for Trumbowyg - * http://alex-d.github.com/Trumbowyg - * =========================================================== - * Author : Nicolas Pion - * Twitter : @nicolas_pion - */ - (function ($) { 'use strict'; - var defaultOptions = { - emojiList: ['⁉', '™', 'ℹ', '↔', '↕', '↖', '↗', '↘', '↙', '⌨', '☀', '☁', '☂', '☃', '☄', '☑', '☔', '☕', '☘', '☠', '☢', '☣', '☦', '☸', '☹', '♀', '♂', '♈', '♉', '♐', '♑', '♒', '♓', '♠', '♣', '♥', '♦', '♨', '⚒', '⚓', '⚔', '⚕', '⚖', '⚗', '⚙', '✂', '✅', '✈', '✉', '✒', '✔', '✖', '✡', '✨', '✳', '✴', '❄', '❇', '❓', '❔', '❕', '❗', '❣', '❤', '➕', '➖', '➗', '⤴', '⤵', '〰', '㊗', '㊙', '😀', '😃', '😄', '😁', '😆', '😅', '😂', '🤣', '☺', '😊', '😇', '🙂', '🙃', '😉', '😌', '🥲', '😍', '🥰', '😘', '😗', '😙', '😚', '😋', '😛', '😝', '😜', '🤪', '🤨', '🧐', '🤓', '😎', '🤩', '🥳', '😏', '😒', '😞', '😔', '😟', '😕', '🙁', '😣', '😖', '😫', '😩', '🥺', '😢', '😭', '😤', '😮', '😠', '😡', '🤬', '🤯', '😳', '😶', '🥵', '🥶', '😱', '😨', '😰', '😥', '😓', '🤗', '🤔', '🤭', '🥱', '🤫', '🤥', '😐', '😑', '😬', '🙄', '😯', '😦', '😧', '😲', '😴', '🤤', '😪', '😵', '🤐', '🥴', '🤢', '🤮', '🤧', '😷', '🤒', '🤕', '🤑', '🤠', '🥸', '😈', '👿', '👹', '👺', '🤡', '💩', '👻', '💀', '👽', '👾', '🤖', '🎃', '😺', '😸', '😹', '😻', '😼', '😽', '🙀', '😿', '😾', '🤲', '👐', '🙌', '👏', '🤝', '👍', '👎', '👊', '✊', '🤛', '🤜', '🤞', '✌', '🤟', '🤘', '👌', '🤏', '🤌', '👈', '👉', '👆', '👇', '☝', '✋', '🤚', '🖐', '🖖', '👋', '🤙', '💪', '🦾', '🖕', '✍', '🙏', '🦶', '🦵', '🦿', '💄', '💋', '👄', '🦷', '👅', '👂', '🦻', '👃', '👣', '👁', '👀', '🧠', '🫀', '🫁', '🦴', '🗣', '👤', '👥', '🫂', '👶', '👧', '🧒', '👦', '👩', '🧑', '👨', '👱', '🧔', '👵', '🧓', '👴', '👲', '👳', '🧕', '👮', '👷', '💂', '🕵', '👰', '🤵', '👸', '🤴', '🦸', '🦹', '🥷', '🤶', '🎅', '🧙', '🧝', '🧛', '🧟', '🧞', '🧜', '🧚', '👼', '🤰', '🤱', '🙇', '💁', '🙅', '🙆', '🙋', '🧏', '🤦', '🤷', '🙎', '🙍', '💇', '💆', '🧖', '💅', '🤳', '💃', '🕺', '👯', '🕴', '🚶', '🧎', '🏃', '🧍', '👫', '👭', '👬', '💑', '💏', '👪', '🧶', '🧵', '🧥', '🥼', '🦺', '👚', '👕', '👖', '🩲', '🩳', '👔', '👗', '👙', '🩱', '👘', '🥻', '🥿', '👠', '👡', '👢', '👞', '👟', '🥾', '🩴', '🧦', '🧤', '🧣', '🎩', '🧢', '👒', '🎓', '⛑', '🪖', '👑', '💍', '👝', '👛', '👜', '💼', '🎒', '🧳', '👓', '🕶', '🥽', '🌂', '🦱', '🦰', '🦳', '🦲', '🐶', '🐱', '🐭', '🐹', '🐰', '🦊', '🐻', '🐼', '🐨', '🐯', '🦁', '🐮', '🐷', '🐽', '🐸', '🐵', '🙈', '🙉', '🙊', '🐒', '🐔', '🐧', '🐦', '🐤', '🐣', '🐥', '🦆', '🦤', '🦅', '🦉', '🦇', '🐺', '🐗', '🐴', '🦄', '🐝', '🐛', '🦋', '🐌', '🪱', '🐞', '🐜', '🪰', '🦟', '🪳', '🪲', '🦗', '🕷', '🕸', '🦂', '🐢', '🐍', '🦎', '🦖', '🦕', '🐙', '🦑', '🦐', '🦞', '🦀', '🐡', '🐠', '🐟', '🦭', '🐬', '🐳', '🐋', '🦈', '🐊', '🐅', '🐆', '🦓', '🦍', '🦧', '🐘', '🦣', '🦬', '🦛', '🦏', '🐪', '🐫', '🦒', '🦘', '🐃', '🐂', '🐄', '🐎', '🐖', '🐏', '🐑', '🦙', '🐐', '🦌', '🐕', '🐩', '🦮', '🐈', '🐓', '🦃', '🦚', '🦜', '🦢', '🦩', '🕊', '🐇', '🦝', '🦨', '🦡', '🦫', '🦦', '🦥', '🐁', '🐀', '🐿', '🦔', '🐾', '🐉', '🐲', '🌵', '🎄', '🌲', '🌳', '🌴', '🌱', '🌿', '🍀', '🎍', '🎋', '🍃', '🍂', '🍁', '🪶', '🍄', '🐚', '🪨', '🪵', '🌾', '🪴', '💐', '🌷', '🌹', '🥀', '🌺', '🌸', '🌼', '🌻', '🌞', '🌝', '🌛', '🌜', '🌚', '🌕', '🌖', '🌗', '🌘', '🌑', '🌒', '🌓', '🌔', '🌙', '🌎', '🌍', '🌏', '🪐', '💫', '⭐', '🌟', '⚡', '💥', '🔥', '🌪', '🌈', '🌤', '⛅', '🌥', '🌦', '🌧', '⛈', '🌩', '🌨', '⛄', '🌬', '💨', '💧', '💦', '🌊', '🌫', '🍏', '🍎', '🍐', '🍊', '🍋', '🍌', '🍉', '🍇', '🫐', '🍓', '🍈', '🍒', '🍑', '🥭', '🍍', '🥥', '🥝', '🍅', '🍆', '🥑', '🫒', '🥦', '🥬', '🫑', '🥒', '🌶', '🌽', '🥕', '🧄', '🧅', '🥔', '🍠', '🥐', '🥯', '🍞', '🥖', '🫓', '🥨', '🧀', '🥚', '🍳', '🧈', '🥞', '🧇', '🥓', '🥩', '🍗', '🍖', '🌭', '🍔', '🍟', '🍕', '🥪', '🥙', '🧆', '🌮', '🌯', '🫔', '🥗', '🥘', '🫕', '🥫', '🍝', '🍜', '🍲', '🍛', '🍣', '🍱', '🥟', '🦪', '🍤', '🍙', '🍚', '🍘', '🍥', '🥠', '🥮', '🍢', '🍡', '🍧', '🍨', '🍦', '🥧', '🧁', '🍰', '🎂', '🍮', '🍭', '🍬', '🍫', '🍿', '🍩', '🍪', '🌰', '🥜', '🍯', '🥛', '🍼', '🍵', '🫖', '🧉', '🧋', '🧃', '🥤', '🍶', '🍺', '🍻', '🥂', '🍷', '🥃', '🍸', '🍹', '🍾', '🧊', '🥄', '🍴', '🍽', '🥣', '🥡', '🥢', '🧂', '⚽', '🏀', '🏈', '⚾', '🥎', '🎾', '🏐', '🏉', '🥏', '🪃', '🎱', '🪀', '🏓', '🏸', '🏒', '🏑', '🥍', '🏏', '🥅', '⛳', '🪁', '🏹', '🎣', '🤿', '🥊', '🥋', '🎽', '🛹', '🛼', '🛷', '⛸', '🥌', '🎿', '⛷', '🏂', '🪂', '🏋', '🤼', '🤸', '⛹', '🤺', '🤾', '🏌', '🏇', '🧘', '🏄', '🏊', '🤽', '🚣', '🧗', '🚵', '🚴', '🏆', '🥇', '🥈', '🥉', '🏅', '🎖', '🏵', '🎗', '🎫', '🎟', '🎪', '🤹', '🎭', '🩰', '🎨', '🎬', '🎤', '🎧', '🎼', '🎹', '🥁', '🪘', '🎷', '🎺', '🎸', '🪕', '🎻', '🪗', '🎲', '♟', '🎯', '🎳', '🎮', '🎰', '🧩', '🚗', '🚕', '🚙', '🛻', '🚌', '🚎', '🏎', '🚓', '🚑', '🚒', '🚐', '🚚', '🚛', '🚜', '🦯', '🦽', '🦼', '🛴', '🚲', '🛵', '🏍', '🛺', '🚨', '🚔', '🚍', '🚘', '🚖', '🚡', '🚠', '🚟', '🚃', '🚋', '🚞', '🚝', '🚄', '🚅', '🚈', '🚂', '🚆', '🚇', '🚊', '🚉', '🛫', '🛬', '🛩', '💺', '🛰', '🚀', '🛸', '🚁', '🛶', '⛵', '🚤', '🛥', '🛳', '⛴', '🚢', '⛽', '🚧', '🚦', '🚥', '🚏', '🗺', '🗿', '🗽', '🗼', '🏰', '🏯', '🏟', '🎡', '🎢', '🎠', '⛲', '⛱', '🏖', '🏝', '🏜', '🌋', '⛰', '🏔', '🗻', '🏕', '⛺', '🏠', '🏡', '🏘', '🏚', '🛖', '🏗', '🏭', '🏢', '🏬', '🏣', '🏤', '🏥', '🏦', '🏨', '🏪', '🏫', '🏩', '💒', '🏛', '⛪', '🕌', '🕍', '🛕', '🕋', '⛩', '🛤', '🛣', '🗾', '🎑', '🏞', '🌅', '🌄', '🌠', '🎇', '🎆', '🌇', '🌆', '🏙', '🌃', '🌌', '🌉', '🌁', '⌚', '📱', '📲', '💻', '🖥', '🖨', '🖱', '🖲', '🕹', '🗜', '💽', '💾', '💿', '📀', '📼', '📷', '📸', '📹', '🎥', '📽', '🎞', '📞', '☎', '📟', '📠', '📺', '📻', '🎙', '🎚', '🎛', '🧭', '⏱', '⏲', '⏰', '🕰', '⌛', '⏳', '📡', '🔋', '🔌', '💡', '🔦', '🕯', '🪔', '🧯', '🛢', '💸', '💵', '💴', '💶', '💷', '🪙', '💰', '💳', '💎', '🪜', '🧰', '🪛', '🔧', '🔨', '🛠', '⛏', '🔩', '🧱', '⛓', '🪝', '🪢', '🧲', '🔫', '💣', '🧨', '🪓', '🪚', '🔪', '🗡', '🛡', '🚬', '⚰', '🪦', '⚱', '🏺', '🪄', '🔮', '📿', '🧿', '💈', '🔭', '🔬', '🕳', '🪟', '🩹', '🩺', '💊', '💉', '🩸', '🧬', '🦠', '🧫', '🧪', '🌡', '🪤', '🧹', '🧺', '🪡', '🧻', '🚽', '🪠', '🪣', '🚰', '🚿', '🛁', '🛀', '🪥', '🧼', '🪒', '🧽', '🧴', '🛎', '🔑', '🗝', '🚪', '🪑', '🪞', '🛋', '🛏', '🛌', '🧸', '🖼', '🛍', '🛒', '🎁', '🎈', '🎏', '🎀', '🎊', '🎉', '🪅', '🪆', '🎎', '🏮', '🎐', '🧧', '📩', '📨', '📧', '💌', '📥', '📤', '📦', '🏷', '📪', '📫', '📬', '📭', '📮', '📯', '🪧', '📜', '📃', '📄', '📑', '🧾', '📊', '📈', '📉', '🗒', '🗓', '📆', '📅', '🗑', '📇', '🗃', '🗳', '🗄', '📋', '📁', '📂', '🗂', '🗞', '📰', '📓', '📔', '📒', '📕', '📗', '📘', '📙', '📚', '📖', '🔖', '🧷', '🔗', '📎', '🖇', '📐', '📏', '🧮', '📌', '📍', '🖊', '🖋', '🖌', '🖍', '📝', '✏', '🔍', '🔎', '🔏', '🔐', '🔒', '🔓', '🧡', '💛', '💚', '💙', '💜', '🖤', '🤎', '🤍', '💔', '💕', '💞', '💓', '💗', '💖', '💘', '💝', '💟', '☮', '✝', '☪', '🕉', '🔯', '🕎', '☯', '🛐', '⛎', '♊', '♋', '♌', '♍', '♎', '♏', '🆔', '⚛', '🉑', '📴', '📳', '🈶', '🈚', '🈸', '🈺', '🈷', '🆚', '💮', '🉐', '🈴', '🈵', '🈹', '🈲', '🅰', '🅱', '🆎', '🆑', '🅾', '🆘', '❌', '⭕', '🛑', '⛔', '📛', '🚫', '💯', '💢', '🚷', '🚯', '🚳', '🚱', '🔞', '📵', '🚭', '‼', '🔅', '🔆', '〽', '⚠', '🚸', '🔱', '⚜', '🔰', '♻', '🈯', '💹', '❎', '🌐', '💠', 'Ⓜ', '🌀', '💤', '🏧', '🚾', '♿', '🅿', '🈳', '🈂', '🛂', '🛃', '🛄', '🛅', '🛗', '🚹', '🚺', '🚼', '🚻', '🚮', '🎦', '📶', '🈁', '🔣', '🔤', '🔡', '🔠', '🆖', '🆗', '🆙', '🆒', '🆕', '🆓', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '🔟', '🔢', '#', '*', '⏏', '▶', '⏸', '⏯', '⏹', '⏺', '⏭', '⏮', '⏩', '⏪', '⏫', '⏬', '◀', '🔼', '🔽', '➡', '⬅', '⬆', '⬇', '↪', '↩', '🔀', '🔁', '🔂', '🔄', '🔃', '🎵', '🎶', '♾', '💲', '💱', '©', '®', '➰', '➿', '🔚', '🔙', '🔛', '🔝', '🔜', '🔘', '⚪', '⚫', '🔴', '🔵', '🟤', '🟣', '🟢', '🟡', '🟠', '🔺', '🔻', '🔸', '🔹', '🔶', '🔷', '🔳', '🔲', '▪', '▫', '◾', '◽', '◼', '◻', '⬛', '⬜', '🟧', '🟦', '🟥', '🟫', '🟪', '🟩', '🟨', '🔈', '🔇', '🔉', '🔊', '🔔', '🔕', '📣', '📢', '🗨', '💬', '💭', '🗯', '🃏', '🎴', '🀄', '🕐', '🕑', '🕒', '🕓', '🕔', '🕕', '🕖', '🕗', '🕘', '🕙', '🕚', '🕛', '🕜', '🕝', '🕞', '🕟', '🕠', '🕡', '🕢', '🕣', '🕤', '🕥', '🕦', '🕧', '⚧', '🏳', '🏴', '🏁', '🚩', '🇦', '🇩', '🇧', '🇮', '🇻', '🇰', '🇨', '🇹', '🇭', '🇪', '🇸', '🇬', '🇫', '🇵', '🇯', '🎌', '🇽', '🇱', '🇲', '🇾', '🇳', '🇴', '🇶', '🇷', '🇼', '🇿', '🇺', '🏻', '🏼', '🏽', '🏾', '🏿'] - }; - - // Add all emoji in a dropdown $.extend(true, $.trumbowyg, { langs: { // jshint camelcase:false en: { - emoji: 'Add an emoji' + fontFamily: 'Font' }, az: { - emoji: 'Emoji yerləşdir' + fontFamily: 'Şrift' + }, + by: { + fontFamily: 'Шрыфт' }, ca: { - emoji: 'Afegir una emoticona' + fontFamily: 'Font' }, da: { - emoji: 'Tilføj et humørikon' + fontFamily: 'Skrifttype' }, de: { - emoji: 'Emoticon einfügen' + fontFamily: 'Schriftart' }, es: { - emoji: 'Añadir un emoticono' + fontFamily: 'Fuente' }, et: { - emoji: 'Lisa emotikon' + fontFamily: 'Font' }, fr: { - emoji: 'Ajouter un emoji' + fontFamily: 'Police' }, hu: { - emoji: 'Emoji beszúrás' - }, - ja: { - emoji: '絵文字の挿入' + fontFamily: 'Betűtípus' }, ko: { - emoji: '이모지 넣기' + fontFamily: '글꼴' + }, + nl: { + fontFamily: 'Lettertype' + }, + pt_br: { + fontFamily: 'Fonte' }, ru: { - emoji: 'Вставить emoji' + fontFamily: 'Шрифт' }, sl: { - emoji: 'Vstavi emotikon' + fontFamily: 'Pisava' }, tr: { - emoji: 'Emoji ekle' + fontFamily: 'Yazı tipi' }, - zh_cn: { - emoji: '添加表情' - } - }, - // jshint camelcase:true - plugins: { - emoji: { - init: function init(trumbowyg) { - trumbowyg.o.plugins.emoji = trumbowyg.o.plugins.emoji || defaultOptions; - var emojiBtnDef = { - dropdown: buildDropdown(trumbowyg) - }; - trumbowyg.addBtnDef('emoji', emojiBtnDef); - } - } - } - }); - function buildDropdown(trumbowyg) { - var dropdown = []; - $.each(trumbowyg.o.plugins.emoji.emojiList, function (i, emoji) { - if ($.isArray(emoji)) { - // Custom emoji behaviour - var emojiCode = emoji[0], - emojiUrl = emoji[1], - emojiHtml = '' + emojiCode + '', - customEmojiBtnName = 'emoji-' + emojiCode.replace(/:/g, ''), - customEmojiBtnDef = { - hasIcon: false, - text: emojiHtml, - fn: function fn() { - trumbowyg.execCmd('insertImage', emojiUrl, false, true); - return true; - } - }; - trumbowyg.addBtnDef(customEmojiBtnName, customEmojiBtnDef); - dropdown.push(customEmojiBtnName); - } else { - // Default behaviour - var btn = emoji.replace(/:/g, ''), - defaultEmojiBtnName = 'emoji-' + btn, - defaultEmojiBtnDef = { - text: emoji, - fn: function fn() { - var encodedEmoji = String.fromCodePoint(emoji.replace('&#', '0')); - trumbowyg.execCmd('insertText', encodedEmoji); - return true; - } - }; - trumbowyg.addBtnDef(defaultEmojiBtnName, defaultEmojiBtnDef); - dropdown.push(defaultEmojiBtnName); - } - }); - return dropdown; - } -})(jQuery); -/* =========================================================== - * trumbowyg.emoji.js v0.1 - * Emoji picker plugin for Trumbowyg - * http://alex-d.github.com/Trumbowyg - * =========================================================== - * Author : Nicolas Pion - * Twitter : @nicolas_pion - */ -!function (x) { - "use strict"; - - var F = { - emojiList: ["⁉", "™", "ℹ", "↔", "↕", "↖", "↗", "↘", "↙", "⌨", "☀", "☁", "☂", "☃", "☄", "☑", "☔", "☕", "☘", "☠", "☢", "☣", "☦", "☸", "☹", "♀", "♂", "♈", "♉", "♐", "♑", "♒", "♓", "♠", "♣", "♥", "♦", "♨", "⚒", "⚓", "⚔", "⚕", "⚖", "⚗", "⚙", "✂", "✅", "✈", "✉", "✒", "✔", "✖", "✡", "✨", "✳", "✴", "❄", "❇", "❓", "❔", "❕", "❗", "❣", "❤", "➕", "➖", "➗", "⤴", "⤵", "〰", "㊗", "㊙", "😀", "😃", "😄", "😁", "😆", "😅", "😂", "🤣", "☺", "😊", "😇", "🙂", "🙃", "😉", "😌", "🥲", "😍", "🥰", "😘", "😗", "😙", "😚", "😋", "😛", "😝", "😜", "🤪", "🤨", "🧐", "🤓", "😎", "🤩", "🥳", "😏", "😒", "😞", "😔", "😟", "😕", "🙁", "😣", "😖", "😫", "😩", "🥺", "😢", "😭", "😤", "😮", "😠", "😡", "🤬", "🤯", "😳", "😶", "🥵", "🥶", "😱", "😨", "😰", "😥", "😓", "🤗", "🤔", "🤭", "🥱", "🤫", "🤥", "😐", "😑", "😬", "🙄", "😯", "😦", "😧", "😲", "😴", "🤤", "😪", "😵", "🤐", "🥴", "🤢", "🤮", "🤧", "😷", "🤒", "🤕", "🤑", "🤠", "🥸", "😈", "👿", "👹", "👺", "🤡", "💩", "👻", "💀", "👽", "👾", "🤖", "🎃", "😺", "😸", "😹", "😻", "😼", "😽", "🙀", "😿", "😾", "🤲", "👐", "🙌", "👏", "🤝", "👍", "👎", "👊", "✊", "🤛", "🤜", "🤞", "✌", "🤟", "🤘", "👌", "🤏", "🤌", "👈", "👉", "👆", "👇", "☝", "✋", "🤚", "🖐", "🖖", "👋", "🤙", "💪", "🦾", "🖕", "✍", "🙏", "🦶", "🦵", "🦿", "💄", "💋", "👄", "🦷", "👅", "👂", "🦻", "👃", "👣", "👁", "👀", "🧠", "🫀", "🫁", "🦴", "🗣", "👤", "👥", "🫂", "👶", "👧", "🧒", "👦", "👩", "🧑", "👨", "👱", "🧔", "👵", "🧓", "👴", "👲", "👳", "🧕", "👮", "👷", "💂", "🕵", "👰", "🤵", "👸", "🤴", "🦸", "🦹", "🥷", "🤶", "🎅", "🧙", "🧝", "🧛", "🧟", "🧞", "🧜", "🧚", "👼", "🤰", "🤱", "🙇", "💁", "🙅", "🙆", "🙋", "🧏", "🤦", "🤷", "🙎", "🙍", "💇", "💆", "🧖", "💅", "🤳", "💃", "🕺", "👯", "🕴", "🚶", "🧎", "🏃", "🧍", "👫", "👭", "👬", "💑", "💏", "👪", "🧶", "🧵", "🧥", "🥼", "🦺", "👚", "👕", "👖", "🩲", "🩳", "👔", "👗", "👙", "🩱", "👘", "🥻", "🥿", "👠", "👡", "👢", "👞", "👟", "🥾", "🩴", "🧦", "🧤", "🧣", "🎩", "🧢", "👒", "🎓", "⛑", "🪖", "👑", "💍", "👝", "👛", "👜", "💼", "🎒", "🧳", "👓", "🕶", "🥽", "🌂", "🦱", "🦰", "🦳", "🦲", "🐶", "🐱", "🐭", "🐹", "🐰", "🦊", "🐻", "🐼", "🐨", "🐯", "🦁", "🐮", "🐷", "🐽", "🐸", "🐵", "🙈", "🙉", "🙊", "🐒", "🐔", "🐧", "🐦", "🐤", "🐣", "🐥", "🦆", "🦤", "🦅", "🦉", "🦇", "🐺", "🐗", "🐴", "🦄", "🐝", "🐛", "🦋", "🐌", "🪱", "🐞", "🐜", "🪰", "🦟", "🪳", "🪲", "🦗", "🕷", "🕸", "🦂", "🐢", "🐍", "🦎", "🦖", "🦕", "🐙", "🦑", "🦐", "🦞", "🦀", "🐡", "🐠", "🐟", "🦭", "🐬", "🐳", "🐋", "🦈", "🐊", "🐅", "🐆", "🦓", "🦍", "🦧", "🐘", "🦣", "🦬", "🦛", "🦏", "🐪", "🐫", "🦒", "🦘", "🐃", "🐂", "🐄", "🐎", "🐖", "🐏", "🐑", "🦙", "🐐", "🦌", "🐕", "🐩", "🦮", "🐈", "🐓", "🦃", "🦚", "🦜", "🦢", "🦩", "🕊", "🐇", "🦝", "🦨", "🦡", "🦫", "🦦", "🦥", "🐁", "🐀", "🐿", "🦔", "🐾", "🐉", "🐲", "🌵", "🎄", "🌲", "🌳", "🌴", "🌱", "🌿", "🍀", "🎍", "🎋", "🍃", "🍂", "🍁", "🪶", "🍄", "🐚", "🪨", "🪵", "🌾", "🪴", "💐", "🌷", "🌹", "🥀", "🌺", "🌸", "🌼", "🌻", "🌞", "🌝", "🌛", "🌜", "🌚", "🌕", "🌖", "🌗", "🌘", "🌑", "🌒", "🌓", "🌔", "🌙", "🌎", "🌍", "🌏", "🪐", "💫", "⭐", "🌟", "⚡", "💥", "🔥", "🌪", "🌈", "🌤", "⛅", "🌥", "🌦", "🌧", "⛈", "🌩", "🌨", "⛄", "🌬", "💨", "💧", "💦", "🌊", "🌫", "🍏", "🍎", "🍐", "🍊", "🍋", "🍌", "🍉", "🍇", "🫐", "🍓", "🍈", "🍒", "🍑", "🥭", "🍍", "🥥", "🥝", "🍅", "🍆", "🥑", "🫒", "🥦", "🥬", "🫑", "🥒", "🌶", "🌽", "🥕", "🧄", "🧅", "🥔", "🍠", "🥐", "🥯", "🍞", "🥖", "🫓", "🥨", "🧀", "🥚", "🍳", "🧈", "🥞", "🧇", "🥓", "🥩", "🍗", "🍖", "🌭", "🍔", "🍟", "🍕", "🥪", "🥙", "🧆", "🌮", "🌯", "🫔", "🥗", "🥘", "🫕", "🥫", "🍝", "🍜", "🍲", "🍛", "🍣", "🍱", "🥟", "🦪", "🍤", "🍙", "🍚", "🍘", "🍥", "🥠", "🥮", "🍢", "🍡", "🍧", "🍨", "🍦", "🥧", "🧁", "🍰", "🎂", "🍮", "🍭", "🍬", "🍫", "🍿", "🍩", "🍪", "🌰", "🥜", "🍯", "🥛", "🍼", "🍵", "🫖", "🧉", "🧋", "🧃", "🥤", "🍶", "🍺", "🍻", "🥂", "🍷", "🥃", "🍸", "🍹", "🍾", "🧊", "🥄", "🍴", "🍽", "🥣", "🥡", "🥢", "🧂", "⚽", "🏀", "🏈", "⚾", "🥎", "🎾", "🏐", "🏉", "🥏", "🪃", "🎱", "🪀", "🏓", "🏸", "🏒", "🏑", "🥍", "🏏", "🥅", "⛳", "🪁", "🏹", "🎣", "🤿", "🥊", "🥋", "🎽", "🛹", "🛼", "🛷", "⛸", "🥌", "🎿", "⛷", "🏂", "🪂", "🏋", "🤼", "🤸", "⛹", "🤺", "🤾", "🏌", "🏇", "🧘", "🏄", "🏊", "🤽", "🚣", "🧗", "🚵", "🚴", "🏆", "🥇", "🥈", "🥉", "🏅", "🎖", "🏵", "🎗", "🎫", "🎟", "🎪", "🤹", "🎭", "🩰", "🎨", "🎬", "🎤", "🎧", "🎼", "🎹", "🥁", "🪘", "🎷", "🎺", "🎸", "🪕", "🎻", "🪗", "🎲", "♟", "🎯", "🎳", "🎮", "🎰", "🧩", "🚗", "🚕", "🚙", "🛻", "🚌", "🚎", "🏎", "🚓", "🚑", "🚒", "🚐", "🚚", "🚛", "🚜", "🦯", "🦽", "🦼", "🛴", "🚲", "🛵", "🏍", "🛺", "🚨", "🚔", "🚍", "🚘", "🚖", "🚡", "🚠", "🚟", "🚃", "🚋", "🚞", "🚝", "🚄", "🚅", "🚈", "🚂", "🚆", "🚇", "🚊", "🚉", "🛫", "🛬", "🛩", "💺", "🛰", "🚀", "🛸", "🚁", "🛶", "⛵", "🚤", "🛥", "🛳", "⛴", "🚢", "⛽", "🚧", "🚦", "🚥", "🚏", "🗺", "🗿", "🗽", "🗼", "🏰", "🏯", "🏟", "🎡", "🎢", "🎠", "⛲", "⛱", "🏖", "🏝", "🏜", "🌋", "⛰", "🏔", "🗻", "🏕", "⛺", "🏠", "🏡", "🏘", "🏚", "🛖", "🏗", "🏭", "🏢", "🏬", "🏣", "🏤", "🏥", "🏦", "🏨", "🏪", "🏫", "🏩", "💒", "🏛", "⛪", "🕌", "🕍", "🛕", "🕋", "⛩", "🛤", "🛣", "🗾", "🎑", "🏞", "🌅", "🌄", "🌠", "🎇", "🎆", "🌇", "🌆", "🏙", "🌃", "🌌", "🌉", "🌁", "⌚", "📱", "📲", "💻", "🖥", "🖨", "🖱", "🖲", "🕹", "🗜", "💽", "💾", "💿", "📀", "📼", "📷", "📸", "📹", "🎥", "📽", "🎞", "📞", "☎", "📟", "📠", "📺", "📻", "🎙", "🎚", "🎛", "🧭", "⏱", "⏲", "⏰", "🕰", "⌛", "⏳", "📡", "🔋", "🔌", "💡", "🔦", "🕯", "🪔", "🧯", "🛢", "💸", "💵", "💴", "💶", "💷", "🪙", "💰", "💳", "💎", "🪜", "🧰", "🪛", "🔧", "🔨", "🛠", "⛏", "🔩", "🧱", "⛓", "🪝", "🪢", "🧲", "🔫", "💣", "🧨", "🪓", "🪚", "🔪", "🗡", "🛡", "🚬", "⚰", "🪦", "⚱", "🏺", "🪄", "🔮", "📿", "🧿", "💈", "🔭", "🔬", "🕳", "🪟", "🩹", "🩺", "💊", "💉", "🩸", "🧬", "🦠", "🧫", "🧪", "🌡", "🪤", "🧹", "🧺", "🪡", "🧻", "🚽", "🪠", "🪣", "🚰", "🚿", "🛁", "🛀", "🪥", "🧼", "🪒", "🧽", "🧴", "🛎", "🔑", "🗝", "🚪", "🪑", "🪞", "🛋", "🛏", "🛌", "🧸", "🖼", "🛍", "🛒", "🎁", "🎈", "🎏", "🎀", "🎊", "🎉", "🪅", "🪆", "🎎", "🏮", "🎐", "🧧", "📩", "📨", "📧", "💌", "📥", "📤", "📦", "🏷", "📪", "📫", "📬", "📭", "📮", "📯", "🪧", "📜", "📃", "📄", "📑", "🧾", "📊", "📈", "📉", "🗒", "🗓", "📆", "📅", "🗑", "📇", "🗃", "🗳", "🗄", "📋", "📁", "📂", "🗂", "🗞", "📰", "📓", "📔", "📒", "📕", "📗", "📘", "📙", "📚", "📖", "🔖", "🧷", "🔗", "📎", "🖇", "📐", "📏", "🧮", "📌", "📍", "🖊", "🖋", "🖌", "🖍", "📝", "✏", "🔍", "🔎", "🔏", "🔐", "🔒", "🔓", "🧡", "💛", "💚", "💙", "💜", "🖤", "🤎", "🤍", "💔", "💕", "💞", "💓", "💗", "💖", "💘", "💝", "💟", "☮", "✝", "☪", "🕉", "🔯", "🕎", "☯", "🛐", "⛎", "♊", "♋", "♌", "♍", "♎", "♏", "🆔", "⚛", "🉑", "📴", "📳", "🈶", "🈚", "🈸", "🈺", "🈷", "🆚", "💮", "🉐", "🈴", "🈵", "🈹", "🈲", "🅰", "🅱", "🆎", "🆑", "🅾", "🆘", "❌", "⭕", "🛑", "⛔", "📛", "🚫", "💯", "💢", "🚷", "🚯", "🚳", "🚱", "🔞", "📵", "🚭", "‼", "🔅", "🔆", "〽", "⚠", "🚸", "🔱", "⚜", "🔰", "♻", "🈯", "💹", "❎", "🌐", "💠", "Ⓜ", "🌀", "💤", "🏧", "🚾", "♿", "🅿", "🈳", "🈂", "🛂", "🛃", "🛄", "🛅", "🛗", "🚹", "🚺", "🚼", "🚻", "🚮", "🎦", "📶", "🈁", "🔣", "🔤", "🔡", "🔠", "🆖", "🆗", "🆙", "🆒", "🆕", "🆓", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "🔟", "🔢", "#", "*", "⏏", "▶", "⏸", "⏯", "⏹", "⏺", "⏭", "⏮", "⏩", "⏪", "⏫", "⏬", "◀", "🔼", "🔽", "➡", "⬅", "⬆", "⬇", "↪", "↩", "🔀", "🔁", "🔂", "🔄", "🔃", "🎵", "🎶", "♾", "💲", "💱", "©", "®", "➰", "➿", "🔚", "🔙", "🔛", "🔝", "🔜", "🔘", "⚪", "⚫", "🔴", "🔵", "🟤", "🟣", "🟢", "🟡", "🟠", "🔺", "🔻", "🔸", "🔹", "🔶", "🔷", "🔳", "🔲", "▪", "▫", "◾", "◽", "◼", "◻", "⬛", "⬜", "🟧", "🟦", "🟥", "🟫", "🟪", "🟩", "🟨", "🔈", "🔇", "🔉", "🔊", "🔔", "🔕", "📣", "📢", "🗨", "💬", "💭", "🗯", "🃏", "🎴", "🀄", "🕐", "🕑", "🕒", "🕓", "🕔", "🕕", "🕖", "🕗", "🕘", "🕙", "🕚", "🕛", "🕜", "🕝", "🕞", "🕟", "🕠", "🕡", "🕢", "🕣", "🕤", "🕥", "🕦", "🕧", "⚧", "🏳", "🏴", "🏁", "🚩", "🇦", "🇩", "🇧", "🇮", "🇻", "🇰", "🇨", "🇹", "🇭", "🇪", "🇸", "🇬", "🇫", "🇵", "🇯", "🎌", "🇽", "🇱", "🇲", "🇾", "🇳", "🇴", "🇶", "🇷", "🇼", "🇿", "🇺", "🏻", "🏼", "🏽", "🏾", "🏿"] - }; - function A(F) { - var A = []; - return x.each(F.o.plugins.emoji.emojiList, function (E, B) { - if (x.isArray(B)) { - var C = B[0], - D = B[1], - e = '' + C + '', - i = "emoji-" + C.replace(/:/g, ""), - o = { - hasIcon: !1, - text: e, - fn: function fn() { - return F.execCmd("insertImage", D, !1, !0), !0; - } - }; - F.addBtnDef(i, o), A.push(i); - } else { - var n = "emoji-" + B.replace(/:/g, ""), - m = { - text: B, - fn: function fn() { - var x = String.fromCodePoint(B.replace("&#", "0")); - return F.execCmd("insertText", x), !0; - } - }; - F.addBtnDef(n, m), A.push(n); - } - }), A; - } - x.extend(!0, x.trumbowyg, { - langs: { - en: { - emoji: "Add an emoji" - }, - az: { - emoji: "Emoji yerləşdir" - }, - ca: { - emoji: "Afegir una emoticona" - }, - da: { - emoji: "Tilføj et humørikon" - }, - de: { - emoji: "Emoticon einfügen" - }, - es: { - emoji: "Añadir un emoticono" - }, - et: { - emoji: "Lisa emotikon" - }, - fr: { - emoji: "Ajouter un emoji" - }, - hu: { - emoji: "Emoji beszúrás" - }, - ja: { - emoji: "絵文字の挿入" - }, - ko: { - emoji: "이모지 넣기" - }, - ru: { - emoji: "Вставить emoji" - }, - sl: { - emoji: "Vstavi emotikon" - }, - tr: { - emoji: "Emoji ekle" - }, - zh_cn: { - emoji: "添加表情" - } - }, - plugins: { - emoji: { - init: function init(x) { - x.o.plugins.emoji = x.o.plugins.emoji || F; - var E = { - dropdown: A(x) - }; - x.addBtnDef("emoji", E); - } - } - } - }); -}(jQuery); -(function ($) { - 'use strict'; - - $.extend(true, $.trumbowyg, { - langs: { - // jshint camelcase:false - en: { - fontFamily: 'Font' - }, - az: { - fontFamily: 'Şrift' - }, - by: { - fontFamily: 'Шрыфт' - }, - ca: { - fontFamily: 'Font' - }, - da: { - fontFamily: 'Skrifttype' - }, - de: { - fontFamily: 'Schriftart' - }, - es: { - fontFamily: 'Fuente' - }, - et: { - fontFamily: 'Font' - }, - fr: { - fontFamily: 'Police' - }, - hu: { - fontFamily: 'Betűtípus' - }, - ko: { - fontFamily: '글꼴' - }, - nl: { - fontFamily: 'Lettertype' - }, - pt_br: { - fontFamily: 'Fonte' - }, - ru: { - fontFamily: 'Шрифт' - }, - sl: { - fontFamily: 'Pisava' - }, - tr: { - fontFamily: 'Yazı tipi' - }, - zh_tw: { - fontFamily: '字體' + zh_tw: { + fontFamily: '字體' } } }); @@ -1586,356 +1365,222 @@ } }); }(jQuery); +/* =========================================================== + * trumbowyg.emoji.js v0.1 + * Emoji picker plugin for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Nicolas Pion + * Twitter : @nicolas_pion + */ + (function ($) { 'use strict'; + var defaultOptions = { + emojiList: ['⁉', '™', 'ℹ', '↔', '↕', '↖', '↗', '↘', '↙', '⌨', '☀', '☁', '☂', '☃', '☄', '☑', '☔', '☕', '☘', '☠', '☢', '☣', '☦', '☸', '☹', '♀', '♂', '♈', '♉', '♐', '♑', '♒', '♓', '♠', '♣', '♥', '♦', '♨', '⚒', '⚓', '⚔', '⚕', '⚖', '⚗', '⚙', '✂', '✅', '✈', '✉', '✒', '✔', '✖', '✡', '✨', '✳', '✴', '❄', '❇', '❓', '❔', '❕', '❗', '❣', '❤', '➕', '➖', '➗', '⤴', '⤵', '〰', '㊗', '㊙', '😀', '😃', '😄', '😁', '😆', '😅', '😂', '🤣', '☺', '😊', '😇', '🙂', '🙃', '😉', '😌', '🥲', '😍', '🥰', '😘', '😗', '😙', '😚', '😋', '😛', '😝', '😜', '🤪', '🤨', '🧐', '🤓', '😎', '🤩', '🥳', '😏', '😒', '😞', '😔', '😟', '😕', '🙁', '😣', '😖', '😫', '😩', '🥺', '😢', '😭', '😤', '😮', '😠', '😡', '🤬', '🤯', '😳', '😶', '🥵', '🥶', '😱', '😨', '😰', '😥', '😓', '🤗', '🤔', '🤭', '🥱', '🤫', '🤥', '😐', '😑', '😬', '🙄', '😯', '😦', '😧', '😲', '😴', '🤤', '😪', '😵', '🤐', '🥴', '🤢', '🤮', '🤧', '😷', '🤒', '🤕', '🤑', '🤠', '🥸', '😈', '👿', '👹', '👺', '🤡', '💩', '👻', '💀', '👽', '👾', '🤖', '🎃', '😺', '😸', '😹', '😻', '😼', '😽', '🙀', '😿', '😾', '🤲', '👐', '🙌', '👏', '🤝', '👍', '👎', '👊', '✊', '🤛', '🤜', '🤞', '✌', '🤟', '🤘', '👌', '🤏', '🤌', '👈', '👉', '👆', '👇', '☝', '✋', '🤚', '🖐', '🖖', '👋', '🤙', '💪', '🦾', '🖕', '✍', '🙏', '🦶', '🦵', '🦿', '💄', '💋', '👄', '🦷', '👅', '👂', '🦻', '👃', '👣', '👁', '👀', '🧠', '🫀', '🫁', '🦴', '🗣', '👤', '👥', '🫂', '👶', '👧', '🧒', '👦', '👩', '🧑', '👨', '👱', '🧔', '👵', '🧓', '👴', '👲', '👳', '🧕', '👮', '👷', '💂', '🕵', '👰', '🤵', '👸', '🤴', '🦸', '🦹', '🥷', '🤶', '🎅', '🧙', '🧝', '🧛', '🧟', '🧞', '🧜', '🧚', '👼', '🤰', '🤱', '🙇', '💁', '🙅', '🙆', '🙋', '🧏', '🤦', '🤷', '🙎', '🙍', '💇', '💆', '🧖', '💅', '🤳', '💃', '🕺', '👯', '🕴', '🚶', '🧎', '🏃', '🧍', '👫', '👭', '👬', '💑', '💏', '👪', '🧶', '🧵', '🧥', '🥼', '🦺', '👚', '👕', '👖', '🩲', '🩳', '👔', '👗', '👙', '🩱', '👘', '🥻', '🥿', '👠', '👡', '👢', '👞', '👟', '🥾', '🩴', '🧦', '🧤', '🧣', '🎩', '🧢', '👒', '🎓', '⛑', '🪖', '👑', '💍', '👝', '👛', '👜', '💼', '🎒', '🧳', '👓', '🕶', '🥽', '🌂', '🦱', '🦰', '🦳', '🦲', '🐶', '🐱', '🐭', '🐹', '🐰', '🦊', '🐻', '🐼', '🐨', '🐯', '🦁', '🐮', '🐷', '🐽', '🐸', '🐵', '🙈', '🙉', '🙊', '🐒', '🐔', '🐧', '🐦', '🐤', '🐣', '🐥', '🦆', '🦤', '🦅', '🦉', '🦇', '🐺', '🐗', '🐴', '🦄', '🐝', '🐛', '🦋', '🐌', '🪱', '🐞', '🐜', '🪰', '🦟', '🪳', '🪲', '🦗', '🕷', '🕸', '🦂', '🐢', '🐍', '🦎', '🦖', '🦕', '🐙', '🦑', '🦐', '🦞', '🦀', '🐡', '🐠', '🐟', '🦭', '🐬', '🐳', '🐋', '🦈', '🐊', '🐅', '🐆', '🦓', '🦍', '🦧', '🐘', '🦣', '🦬', '🦛', '🦏', '🐪', '🐫', '🦒', '🦘', '🐃', '🐂', '🐄', '🐎', '🐖', '🐏', '🐑', '🦙', '🐐', '🦌', '🐕', '🐩', '🦮', '🐈', '🐓', '🦃', '🦚', '🦜', '🦢', '🦩', '🕊', '🐇', '🦝', '🦨', '🦡', '🦫', '🦦', '🦥', '🐁', '🐀', '🐿', '🦔', '🐾', '🐉', '🐲', '🌵', '🎄', '🌲', '🌳', '🌴', '🌱', '🌿', '🍀', '🎍', '🎋', '🍃', '🍂', '🍁', '🪶', '🍄', '🐚', '🪨', '🪵', '🌾', '🪴', '💐', '🌷', '🌹', '🥀', '🌺', '🌸', '🌼', '🌻', '🌞', '🌝', '🌛', '🌜', '🌚', '🌕', '🌖', '🌗', '🌘', '🌑', '🌒', '🌓', '🌔', '🌙', '🌎', '🌍', '🌏', '🪐', '💫', '⭐', '🌟', '⚡', '💥', '🔥', '🌪', '🌈', '🌤', '⛅', '🌥', '🌦', '🌧', '⛈', '🌩', '🌨', '⛄', '🌬', '💨', '💧', '💦', '🌊', '🌫', '🍏', '🍎', '🍐', '🍊', '🍋', '🍌', '🍉', '🍇', '🫐', '🍓', '🍈', '🍒', '🍑', '🥭', '🍍', '🥥', '🥝', '🍅', '🍆', '🥑', '🫒', '🥦', '🥬', '🫑', '🥒', '🌶', '🌽', '🥕', '🧄', '🧅', '🥔', '🍠', '🥐', '🥯', '🍞', '🥖', '🫓', '🥨', '🧀', '🥚', '🍳', '🧈', '🥞', '🧇', '🥓', '🥩', '🍗', '🍖', '🌭', '🍔', '🍟', '🍕', '🥪', '🥙', '🧆', '🌮', '🌯', '🫔', '🥗', '🥘', '🫕', '🥫', '🍝', '🍜', '🍲', '🍛', '🍣', '🍱', '🥟', '🦪', '🍤', '🍙', '🍚', '🍘', '🍥', '🥠', '🥮', '🍢', '🍡', '🍧', '🍨', '🍦', '🥧', '🧁', '🍰', '🎂', '🍮', '🍭', '🍬', '🍫', '🍿', '🍩', '🍪', '🌰', '🥜', '🍯', '🥛', '🍼', '🍵', '🫖', '🧉', '🧋', '🧃', '🥤', '🍶', '🍺', '🍻', '🥂', '🍷', '🥃', '🍸', '🍹', '🍾', '🧊', '🥄', '🍴', '🍽', '🥣', '🥡', '🥢', '🧂', '⚽', '🏀', '🏈', '⚾', '🥎', '🎾', '🏐', '🏉', '🥏', '🪃', '🎱', '🪀', '🏓', '🏸', '🏒', '🏑', '🥍', '🏏', '🥅', '⛳', '🪁', '🏹', '🎣', '🤿', '🥊', '🥋', '🎽', '🛹', '🛼', '🛷', '⛸', '🥌', '🎿', '⛷', '🏂', '🪂', '🏋', '🤼', '🤸', '⛹', '🤺', '🤾', '🏌', '🏇', '🧘', '🏄', '🏊', '🤽', '🚣', '🧗', '🚵', '🚴', '🏆', '🥇', '🥈', '🥉', '🏅', '🎖', '🏵', '🎗', '🎫', '🎟', '🎪', '🤹', '🎭', '🩰', '🎨', '🎬', '🎤', '🎧', '🎼', '🎹', '🥁', '🪘', '🎷', '🎺', '🎸', '🪕', '🎻', '🪗', '🎲', '♟', '🎯', '🎳', '🎮', '🎰', '🧩', '🚗', '🚕', '🚙', '🛻', '🚌', '🚎', '🏎', '🚓', '🚑', '🚒', '🚐', '🚚', '🚛', '🚜', '🦯', '🦽', '🦼', '🛴', '🚲', '🛵', '🏍', '🛺', '🚨', '🚔', '🚍', '🚘', '🚖', '🚡', '🚠', '🚟', '🚃', '🚋', '🚞', '🚝', '🚄', '🚅', '🚈', '🚂', '🚆', '🚇', '🚊', '🚉', '🛫', '🛬', '🛩', '💺', '🛰', '🚀', '🛸', '🚁', '🛶', '⛵', '🚤', '🛥', '🛳', '⛴', '🚢', '⛽', '🚧', '🚦', '🚥', '🚏', '🗺', '🗿', '🗽', '🗼', '🏰', '🏯', '🏟', '🎡', '🎢', '🎠', '⛲', '⛱', '🏖', '🏝', '🏜', '🌋', '⛰', '🏔', '🗻', '🏕', '⛺', '🏠', '🏡', '🏘', '🏚', '🛖', '🏗', '🏭', '🏢', '🏬', '🏣', '🏤', '🏥', '🏦', '🏨', '🏪', '🏫', '🏩', '💒', '🏛', '⛪', '🕌', '🕍', '🛕', '🕋', '⛩', '🛤', '🛣', '🗾', '🎑', '🏞', '🌅', '🌄', '🌠', '🎇', '🎆', '🌇', '🌆', '🏙', '🌃', '🌌', '🌉', '🌁', '⌚', '📱', '📲', '💻', '🖥', '🖨', '🖱', '🖲', '🕹', '🗜', '💽', '💾', '💿', '📀', '📼', '📷', '📸', '📹', '🎥', '📽', '🎞', '📞', '☎', '📟', '📠', '📺', '📻', '🎙', '🎚', '🎛', '🧭', '⏱', '⏲', '⏰', '🕰', '⌛', '⏳', '📡', '🔋', '🔌', '💡', '🔦', '🕯', '🪔', '🧯', '🛢', '💸', '💵', '💴', '💶', '💷', '🪙', '💰', '💳', '💎', '🪜', '🧰', '🪛', '🔧', '🔨', '🛠', '⛏', '🔩', '🧱', '⛓', '🪝', '🪢', '🧲', '🔫', '💣', '🧨', '🪓', '🪚', '🔪', '🗡', '🛡', '🚬', '⚰', '🪦', '⚱', '🏺', '🪄', '🔮', '📿', '🧿', '💈', '🔭', '🔬', '🕳', '🪟', '🩹', '🩺', '💊', '💉', '🩸', '🧬', '🦠', '🧫', '🧪', '🌡', '🪤', '🧹', '🧺', '🪡', '🧻', '🚽', '🪠', '🪣', '🚰', '🚿', '🛁', '🛀', '🪥', '🧼', '🪒', '🧽', '🧴', '🛎', '🔑', '🗝', '🚪', '🪑', '🪞', '🛋', '🛏', '🛌', '🧸', '🖼', '🛍', '🛒', '🎁', '🎈', '🎏', '🎀', '🎊', '🎉', '🪅', '🪆', '🎎', '🏮', '🎐', '🧧', '📩', '📨', '📧', '💌', '📥', '📤', '📦', '🏷', '📪', '📫', '📬', '📭', '📮', '📯', '🪧', '📜', '📃', '📄', '📑', '🧾', '📊', '📈', '📉', '🗒', '🗓', '📆', '📅', '🗑', '📇', '🗃', '🗳', '🗄', '📋', '📁', '📂', '🗂', '🗞', '📰', '📓', '📔', '📒', '📕', '📗', '📘', '📙', '📚', '📖', '🔖', '🧷', '🔗', '📎', '🖇', '📐', '📏', '🧮', '📌', '📍', '🖊', '🖋', '🖌', '🖍', '📝', '✏', '🔍', '🔎', '🔏', '🔐', '🔒', '🔓', '🧡', '💛', '💚', '💙', '💜', '🖤', '🤎', '🤍', '💔', '💕', '💞', '💓', '💗', '💖', '💘', '💝', '💟', '☮', '✝', '☪', '🕉', '🔯', '🕎', '☯', '🛐', '⛎', '♊', '♋', '♌', '♍', '♎', '♏', '🆔', '⚛', '🉑', '📴', '📳', '🈶', '🈚', '🈸', '🈺', '🈷', '🆚', '💮', '🉐', '🈴', '🈵', '🈹', '🈲', '🅰', '🅱', '🆎', '🆑', '🅾', '🆘', '❌', '⭕', '🛑', '⛔', '📛', '🚫', '💯', '💢', '🚷', '🚯', '🚳', '🚱', '🔞', '📵', '🚭', '‼', '🔅', '🔆', '〽', '⚠', '🚸', '🔱', '⚜', '🔰', '♻', '🈯', '💹', '❎', '🌐', '💠', 'Ⓜ', '🌀', '💤', '🏧', '🚾', '♿', '🅿', '🈳', '🈂', '🛂', '🛃', '🛄', '🛅', '🛗', '🚹', '🚺', '🚼', '🚻', '🚮', '🎦', '📶', '🈁', '🔣', '🔤', '🔡', '🔠', '🆖', '🆗', '🆙', '🆒', '🆕', '🆓', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '🔟', '🔢', '#', '*', '⏏', '▶', '⏸', '⏯', '⏹', '⏺', '⏭', '⏮', '⏩', '⏪', '⏫', '⏬', '◀', '🔼', '🔽', '➡', '⬅', '⬆', '⬇', '↪', '↩', '🔀', '🔁', '🔂', '🔄', '🔃', '🎵', '🎶', '♾', '💲', '💱', '©', '®', '➰', '➿', '🔚', '🔙', '🔛', '🔝', '🔜', '🔘', '⚪', '⚫', '🔴', '🔵', '🟤', '🟣', '🟢', '🟡', '🟠', '🔺', '🔻', '🔸', '🔹', '🔶', '🔷', '🔳', '🔲', '▪', '▫', '◾', '◽', '◼', '◻', '⬛', '⬜', '🟧', '🟦', '🟥', '🟫', '🟪', '🟩', '🟨', '🔈', '🔇', '🔉', '🔊', '🔔', '🔕', '📣', '📢', '🗨', '💬', '💭', '🗯', '🃏', '🎴', '🀄', '🕐', '🕑', '🕒', '🕓', '🕔', '🕕', '🕖', '🕗', '🕘', '🕙', '🕚', '🕛', '🕜', '🕝', '🕞', '🕟', '🕠', '🕡', '🕢', '🕣', '🕤', '🕥', '🕦', '🕧', '⚧', '🏳', '🏴', '🏁', '🚩', '🇦', '🇩', '🇧', '🇮', '🇻', '🇰', '🇨', '🇹', '🇭', '🇪', '🇸', '🇬', '🇫', '🇵', '🇯', '🎌', '🇽', '🇱', '🇲', '🇾', '🇳', '🇴', '🇶', '🇷', '🇼', '🇿', '🇺', '🏻', '🏼', '🏽', '🏾', '🏿'] + }; + + // Add all emoji in a dropdown $.extend(true, $.trumbowyg, { langs: { // jshint camelcase:false en: { - giphy: 'Insert GIF' + emoji: 'Add an emoji' }, az: { - giphy: 'GIF yerləşdir' + emoji: 'Emoji yerləşdir' }, - by: { - giphy: 'Уставіць GIF' + ca: { + emoji: 'Afegir una emoticona' + }, + da: { + emoji: 'Tilføj et humørikon' + }, + de: { + emoji: 'Emoticon einfügen' + }, + es: { + emoji: 'Añadir un emoticono' }, et: { - giphy: 'Sisesta GIF' + emoji: 'Lisa emotikon' }, fr: { - giphy: 'Insérer un GIF' + emoji: 'Ajouter un emoji' }, hu: { - giphy: 'GIF beszúrás' + emoji: 'Emoji beszúrás' + }, + ja: { + emoji: '絵文字の挿入' + }, + ko: { + emoji: '이모지 넣기' }, ru: { - giphy: 'Вставить GIF' + emoji: 'Вставить emoji' }, sl: { - giphy: 'Vstavi GIF' + emoji: 'Vstavi emotikon' }, tr: { - giphy: 'GIF ekle' - } - // jshint camelcase:true - } - }); - - var giphyLogo = ''; // jshint ignore:line - - var CANCEL_EVENT = 'tbwcancel'; - - // Throttle helper - function trumbowygThrottle(callback, delay) { - var last; - var timer; - return function () { - var context = this; - var now = +new Date(); - var args = arguments; - if (last && now < last + delay) { - clearTimeout(timer); - timer = setTimeout(function () { - last = now; - callback.apply(context, args); - }, delay); - } else { - last = now; - callback.apply(context, args); + emoji: 'Emoji ekle' + }, + zh_cn: { + emoji: '添加表情' } - }; - } - - // Fills modal with response gifs - function renderGifs(response, $giphyModal, trumbowyg, mustEmpty) { - var width = ($giphyModal.width() - 20) / 3; - var html = response.data.filter(function (gifData) { - // jshint camelcase:false - var downsized = gifData.images.downsized || gifData.images.downsized_medium; - // jshint camelcase:true - return !!downsized.url; - }).map(function (gifData) { - // jshint camelcase:false - var downsized = gifData.images.downsized || gifData.images.downsized_medium; - // jshint camelcase:true - var image = downsized, - imageRatio = image.height / image.width, - altText = gifData.title; - var imgHtml = '' + altText + ''; - return '
    ' + imgHtml + '
    '; - }).join(''); - if (mustEmpty === true) { - if (html.length === 0) { - if ($('.' + trumbowyg.o.prefix + 'giphy-no-result', $giphyModal).length > 0) { - return; + }, + // jshint camelcase:true + plugins: { + emoji: { + init: function init(trumbowyg) { + trumbowyg.o.plugins.emoji = trumbowyg.o.plugins.emoji || defaultOptions; + var emojiBtnDef = { + dropdown: buildDropdown(trumbowyg) + }; + trumbowyg.addBtnDef('emoji', emojiBtnDef); } - html = ''; } - $giphyModal.empty(); } - $giphyModal.append(html); - - // Remove gray overlay on image load - // moved here from inline callback definition due to CSP issue - // Note: this is being done post-factum because load event doesn't bubble up and so can't be delegated - var addLoadedClass = function addLoadedClass(img) { - img.classList.add('tbw-loaded'); - }; - $('img', $giphyModal).each(function () { - var img = this; - if (img.complete) { - // images load instantly when cached and esp. when loaded in previous modal open - addLoadedClass(img); + }); + function buildDropdown(trumbowyg) { + var dropdown = []; + $.each(trumbowyg.o.plugins.emoji.emojiList, function (i, emoji) { + if ($.isArray(emoji)) { + // Custom emoji behaviour + var emojiCode = emoji[0], + emojiUrl = emoji[1], + emojiHtml = '' + emojiCode + '', + customEmojiBtnName = 'emoji-' + emojiCode.replace(/:/g, ''), + customEmojiBtnDef = { + hasIcon: false, + text: emojiHtml, + fn: function fn() { + trumbowyg.execCmd('insertImage', emojiUrl, false, true); + return true; + } + }; + trumbowyg.addBtnDef(customEmojiBtnName, customEmojiBtnDef); + dropdown.push(customEmojiBtnName); } else { - img.addEventListener('load', function () { - addLoadedClass(this); - }); - } - }); - $('img', $giphyModal).on('click', function () { - var src = $(this).attr('src'), - alt = $(this).attr('alt'); - trumbowyg.restoreRange(); - trumbowyg.execCmd('insertImage', src, false, true); - - // relay alt tag into inserted image - if (alt) { - var $img = $('img[src="' + src + '"]:not([alt])', trumbowyg.$box); - $img.attr('alt', alt); - // Note: This seems to fire relatively early and could be wrapped in a setTimeout if needed - trumbowyg.syncCode(); + // Default behaviour + var btn = emoji.replace(/:/g, ''), + defaultEmojiBtnName = 'emoji-' + btn, + defaultEmojiBtnDef = { + text: emoji, + fn: function fn() { + var encodedEmoji = String.fromCodePoint(emoji.replace('&#', '0')); + trumbowyg.execCmd('insertText', encodedEmoji); + return true; + } + }; + trumbowyg.addBtnDef(defaultEmojiBtnName, defaultEmojiBtnDef); + dropdown.push(defaultEmojiBtnName); } - $('img', $giphyModal).off(); - trumbowyg.closeModal(); }); + return dropdown; } - var defaultOptions = { - rating: 'g', - apiKey: null, - throttleDelay: 300, - noResultGifUrl: 'https://media.giphy.com/media/2Faz9FbRzmwxY0pZS/giphy.gif' - }; +})(jQuery); +/* =========================================================== + * trumbowyg.emoji.js v0.1 + * Emoji picker plugin for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Nicolas Pion + * Twitter : @nicolas_pion + */ +!function (x) { + "use strict"; - // Add dropdown with font sizes - $.extend(true, $.trumbowyg, { - plugins: { - giphy: { - init: function init(trumbowyg) { - trumbowyg.o.plugins.giphy = $.extend({}, defaultOptions, trumbowyg.o.plugins.giphy || {}); - trumbowyg.addBtnDef('giphy', { + var F = { + emojiList: ["⁉", "™", "ℹ", "↔", "↕", "↖", "↗", "↘", "↙", "⌨", "☀", "☁", "☂", "☃", "☄", "☑", "☔", "☕", "☘", "☠", "☢", "☣", "☦", "☸", "☹", "♀", "♂", "♈", "♉", "♐", "♑", "♒", "♓", "♠", "♣", "♥", "♦", "♨", "⚒", "⚓", "⚔", "⚕", "⚖", "⚗", "⚙", "✂", "✅", "✈", "✉", "✒", "✔", "✖", "✡", "✨", "✳", "✴", "❄", "❇", "❓", "❔", "❕", "❗", "❣", "❤", "➕", "➖", "➗", "⤴", "⤵", "〰", "㊗", "㊙", "😀", "😃", "😄", "😁", "😆", "😅", "😂", "🤣", "☺", "😊", "😇", "🙂", "🙃", "😉", "😌", "🥲", "😍", "🥰", "😘", "😗", "😙", "😚", "😋", "😛", "😝", "😜", "🤪", "🤨", "🧐", "🤓", "😎", "🤩", "🥳", "😏", "😒", "😞", "😔", "😟", "😕", "🙁", "😣", "😖", "😫", "😩", "🥺", "😢", "😭", "😤", "😮", "😠", "😡", "🤬", "🤯", "😳", "😶", "🥵", "🥶", "😱", "😨", "😰", "😥", "😓", "🤗", "🤔", "🤭", "🥱", "🤫", "🤥", "😐", "😑", "😬", "🙄", "😯", "😦", "😧", "😲", "😴", "🤤", "😪", "😵", "🤐", "🥴", "🤢", "🤮", "🤧", "😷", "🤒", "🤕", "🤑", "🤠", "🥸", "😈", "👿", "👹", "👺", "🤡", "💩", "👻", "💀", "👽", "👾", "🤖", "🎃", "😺", "😸", "😹", "😻", "😼", "😽", "🙀", "😿", "😾", "🤲", "👐", "🙌", "👏", "🤝", "👍", "👎", "👊", "✊", "🤛", "🤜", "🤞", "✌", "🤟", "🤘", "👌", "🤏", "🤌", "👈", "👉", "👆", "👇", "☝", "✋", "🤚", "🖐", "🖖", "👋", "🤙", "💪", "🦾", "🖕", "✍", "🙏", "🦶", "🦵", "🦿", "💄", "💋", "👄", "🦷", "👅", "👂", "🦻", "👃", "👣", "👁", "👀", "🧠", "🫀", "🫁", "🦴", "🗣", "👤", "👥", "🫂", "👶", "👧", "🧒", "👦", "👩", "🧑", "👨", "👱", "🧔", "👵", "🧓", "👴", "👲", "👳", "🧕", "👮", "👷", "💂", "🕵", "👰", "🤵", "👸", "🤴", "🦸", "🦹", "🥷", "🤶", "🎅", "🧙", "🧝", "🧛", "🧟", "🧞", "🧜", "🧚", "👼", "🤰", "🤱", "🙇", "💁", "🙅", "🙆", "🙋", "🧏", "🤦", "🤷", "🙎", "🙍", "💇", "💆", "🧖", "💅", "🤳", "💃", "🕺", "👯", "🕴", "🚶", "🧎", "🏃", "🧍", "👫", "👭", "👬", "💑", "💏", "👪", "🧶", "🧵", "🧥", "🥼", "🦺", "👚", "👕", "👖", "🩲", "🩳", "👔", "👗", "👙", "🩱", "👘", "🥻", "🥿", "👠", "👡", "👢", "👞", "👟", "🥾", "🩴", "🧦", "🧤", "🧣", "🎩", "🧢", "👒", "🎓", "⛑", "🪖", "👑", "💍", "👝", "👛", "👜", "💼", "🎒", "🧳", "👓", "🕶", "🥽", "🌂", "🦱", "🦰", "🦳", "🦲", "🐶", "🐱", "🐭", "🐹", "🐰", "🦊", "🐻", "🐼", "🐨", "🐯", "🦁", "🐮", "🐷", "🐽", "🐸", "🐵", "🙈", "🙉", "🙊", "🐒", "🐔", "🐧", "🐦", "🐤", "🐣", "🐥", "🦆", "🦤", "🦅", "🦉", "🦇", "🐺", "🐗", "🐴", "🦄", "🐝", "🐛", "🦋", "🐌", "🪱", "🐞", "🐜", "🪰", "🦟", "🪳", "🪲", "🦗", "🕷", "🕸", "🦂", "🐢", "🐍", "🦎", "🦖", "🦕", "🐙", "🦑", "🦐", "🦞", "🦀", "🐡", "🐠", "🐟", "🦭", "🐬", "🐳", "🐋", "🦈", "🐊", "🐅", "🐆", "🦓", "🦍", "🦧", "🐘", "🦣", "🦬", "🦛", "🦏", "🐪", "🐫", "🦒", "🦘", "🐃", "🐂", "🐄", "🐎", "🐖", "🐏", "🐑", "🦙", "🐐", "🦌", "🐕", "🐩", "🦮", "🐈", "🐓", "🦃", "🦚", "🦜", "🦢", "🦩", "🕊", "🐇", "🦝", "🦨", "🦡", "🦫", "🦦", "🦥", "🐁", "🐀", "🐿", "🦔", "🐾", "🐉", "🐲", "🌵", "🎄", "🌲", "🌳", "🌴", "🌱", "🌿", "🍀", "🎍", "🎋", "🍃", "🍂", "🍁", "🪶", "🍄", "🐚", "🪨", "🪵", "🌾", "🪴", "💐", "🌷", "🌹", "🥀", "🌺", "🌸", "🌼", "🌻", "🌞", "🌝", "🌛", "🌜", "🌚", "🌕", "🌖", "🌗", "🌘", "🌑", "🌒", "🌓", "🌔", "🌙", "🌎", "🌍", "🌏", "🪐", "💫", "⭐", "🌟", "⚡", "💥", "🔥", "🌪", "🌈", "🌤", "⛅", "🌥", "🌦", "🌧", "⛈", "🌩", "🌨", "⛄", "🌬", "💨", "💧", "💦", "🌊", "🌫", "🍏", "🍎", "🍐", "🍊", "🍋", "🍌", "🍉", "🍇", "🫐", "🍓", "🍈", "🍒", "🍑", "🥭", "🍍", "🥥", "🥝", "🍅", "🍆", "🥑", "🫒", "🥦", "🥬", "🫑", "🥒", "🌶", "🌽", "🥕", "🧄", "🧅", "🥔", "🍠", "🥐", "🥯", "🍞", "🥖", "🫓", "🥨", "🧀", "🥚", "🍳", "🧈", "🥞", "🧇", "🥓", "🥩", "🍗", "🍖", "🌭", "🍔", "🍟", "🍕", "🥪", "🥙", "🧆", "🌮", "🌯", "🫔", "🥗", "🥘", "🫕", "🥫", "🍝", "🍜", "🍲", "🍛", "🍣", "🍱", "🥟", "🦪", "🍤", "🍙", "🍚", "🍘", "🍥", "🥠", "🥮", "🍢", "🍡", "🍧", "🍨", "🍦", "🥧", "🧁", "🍰", "🎂", "🍮", "🍭", "🍬", "🍫", "🍿", "🍩", "🍪", "🌰", "🥜", "🍯", "🥛", "🍼", "🍵", "🫖", "🧉", "🧋", "🧃", "🥤", "🍶", "🍺", "🍻", "🥂", "🍷", "🥃", "🍸", "🍹", "🍾", "🧊", "🥄", "🍴", "🍽", "🥣", "🥡", "🥢", "🧂", "⚽", "🏀", "🏈", "⚾", "🥎", "🎾", "🏐", "🏉", "🥏", "🪃", "🎱", "🪀", "🏓", "🏸", "🏒", "🏑", "🥍", "🏏", "🥅", "⛳", "🪁", "🏹", "🎣", "🤿", "🥊", "🥋", "🎽", "🛹", "🛼", "🛷", "⛸", "🥌", "🎿", "⛷", "🏂", "🪂", "🏋", "🤼", "🤸", "⛹", "🤺", "🤾", "🏌", "🏇", "🧘", "🏄", "🏊", "🤽", "🚣", "🧗", "🚵", "🚴", "🏆", "🥇", "🥈", "🥉", "🏅", "🎖", "🏵", "🎗", "🎫", "🎟", "🎪", "🤹", "🎭", "🩰", "🎨", "🎬", "🎤", "🎧", "🎼", "🎹", "🥁", "🪘", "🎷", "🎺", "🎸", "🪕", "🎻", "🪗", "🎲", "♟", "🎯", "🎳", "🎮", "🎰", "🧩", "🚗", "🚕", "🚙", "🛻", "🚌", "🚎", "🏎", "🚓", "🚑", "🚒", "🚐", "🚚", "🚛", "🚜", "🦯", "🦽", "🦼", "🛴", "🚲", "🛵", "🏍", "🛺", "🚨", "🚔", "🚍", "🚘", "🚖", "🚡", "🚠", "🚟", "🚃", "🚋", "🚞", "🚝", "🚄", "🚅", "🚈", "🚂", "🚆", "🚇", "🚊", "🚉", "🛫", "🛬", "🛩", "💺", "🛰", "🚀", "🛸", "🚁", "🛶", "⛵", "🚤", "🛥", "🛳", "⛴", "🚢", "⛽", "🚧", "🚦", "🚥", "🚏", "🗺", "🗿", "🗽", "🗼", "🏰", "🏯", "🏟", "🎡", "🎢", "🎠", "⛲", "⛱", "🏖", "🏝", "🏜", "🌋", "⛰", "🏔", "🗻", "🏕", "⛺", "🏠", "🏡", "🏘", "🏚", "🛖", "🏗", "🏭", "🏢", "🏬", "🏣", "🏤", "🏥", "🏦", "🏨", "🏪", "🏫", "🏩", "💒", "🏛", "⛪", "🕌", "🕍", "🛕", "🕋", "⛩", "🛤", "🛣", "🗾", "🎑", "🏞", "🌅", "🌄", "🌠", "🎇", "🎆", "🌇", "🌆", "🏙", "🌃", "🌌", "🌉", "🌁", "⌚", "📱", "📲", "💻", "🖥", "🖨", "🖱", "🖲", "🕹", "🗜", "💽", "💾", "💿", "📀", "📼", "📷", "📸", "📹", "🎥", "📽", "🎞", "📞", "☎", "📟", "📠", "📺", "📻", "🎙", "🎚", "🎛", "🧭", "⏱", "⏲", "⏰", "🕰", "⌛", "⏳", "📡", "🔋", "🔌", "💡", "🔦", "🕯", "🪔", "🧯", "🛢", "💸", "💵", "💴", "💶", "💷", "🪙", "💰", "💳", "💎", "🪜", "🧰", "🪛", "🔧", "🔨", "🛠", "⛏", "🔩", "🧱", "⛓", "🪝", "🪢", "🧲", "🔫", "💣", "🧨", "🪓", "🪚", "🔪", "🗡", "🛡", "🚬", "⚰", "🪦", "⚱", "🏺", "🪄", "🔮", "📿", "🧿", "💈", "🔭", "🔬", "🕳", "🪟", "🩹", "🩺", "💊", "💉", "🩸", "🧬", "🦠", "🧫", "🧪", "🌡", "🪤", "🧹", "🧺", "🪡", "🧻", "🚽", "🪠", "🪣", "🚰", "🚿", "🛁", "🛀", "🪥", "🧼", "🪒", "🧽", "🧴", "🛎", "🔑", "🗝", "🚪", "🪑", "🪞", "🛋", "🛏", "🛌", "🧸", "🖼", "🛍", "🛒", "🎁", "🎈", "🎏", "🎀", "🎊", "🎉", "🪅", "🪆", "🎎", "🏮", "🎐", "🧧", "📩", "📨", "📧", "💌", "📥", "📤", "📦", "🏷", "📪", "📫", "📬", "📭", "📮", "📯", "🪧", "📜", "📃", "📄", "📑", "🧾", "📊", "📈", "📉", "🗒", "🗓", "📆", "📅", "🗑", "📇", "🗃", "🗳", "🗄", "📋", "📁", "📂", "🗂", "🗞", "📰", "📓", "📔", "📒", "📕", "📗", "📘", "📙", "📚", "📖", "🔖", "🧷", "🔗", "📎", "🖇", "📐", "📏", "🧮", "📌", "📍", "🖊", "🖋", "🖌", "🖍", "📝", "✏", "🔍", "🔎", "🔏", "🔐", "🔒", "🔓", "🧡", "💛", "💚", "💙", "💜", "🖤", "🤎", "🤍", "💔", "💕", "💞", "💓", "💗", "💖", "💘", "💝", "💟", "☮", "✝", "☪", "🕉", "🔯", "🕎", "☯", "🛐", "⛎", "♊", "♋", "♌", "♍", "♎", "♏", "🆔", "⚛", "🉑", "📴", "📳", "🈶", "🈚", "🈸", "🈺", "🈷", "🆚", "💮", "🉐", "🈴", "🈵", "🈹", "🈲", "🅰", "🅱", "🆎", "🆑", "🅾", "🆘", "❌", "⭕", "🛑", "⛔", "📛", "🚫", "💯", "💢", "🚷", "🚯", "🚳", "🚱", "🔞", "📵", "🚭", "‼", "🔅", "🔆", "〽", "⚠", "🚸", "🔱", "⚜", "🔰", "♻", "🈯", "💹", "❎", "🌐", "💠", "Ⓜ", "🌀", "💤", "🏧", "🚾", "♿", "🅿", "🈳", "🈂", "🛂", "🛃", "🛄", "🛅", "🛗", "🚹", "🚺", "🚼", "🚻", "🚮", "🎦", "📶", "🈁", "🔣", "🔤", "🔡", "🔠", "🆖", "🆗", "🆙", "🆒", "🆕", "🆓", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "🔟", "🔢", "#", "*", "⏏", "▶", "⏸", "⏯", "⏹", "⏺", "⏭", "⏮", "⏩", "⏪", "⏫", "⏬", "◀", "🔼", "🔽", "➡", "⬅", "⬆", "⬇", "↪", "↩", "🔀", "🔁", "🔂", "🔄", "🔃", "🎵", "🎶", "♾", "💲", "💱", "©", "®", "➰", "➿", "🔚", "🔙", "🔛", "🔝", "🔜", "🔘", "⚪", "⚫", "🔴", "🔵", "🟤", "🟣", "🟢", "🟡", "🟠", "🔺", "🔻", "🔸", "🔹", "🔶", "🔷", "🔳", "🔲", "▪", "▫", "◾", "◽", "◼", "◻", "⬛", "⬜", "🟧", "🟦", "🟥", "🟫", "🟪", "🟩", "🟨", "🔈", "🔇", "🔉", "🔊", "🔔", "🔕", "📣", "📢", "🗨", "💬", "💭", "🗯", "🃏", "🎴", "🀄", "🕐", "🕑", "🕒", "🕓", "🕔", "🕕", "🕖", "🕗", "🕘", "🕙", "🕚", "🕛", "🕜", "🕝", "🕞", "🕟", "🕠", "🕡", "🕢", "🕣", "🕤", "🕥", "🕦", "🕧", "⚧", "🏳", "🏴", "🏁", "🚩", "🇦", "🇩", "🇧", "🇮", "🇻", "🇰", "🇨", "🇹", "🇭", "🇪", "🇸", "🇬", "🇫", "🇵", "🇯", "🎌", "🇽", "🇱", "🇲", "🇾", "🇳", "🇴", "🇶", "🇷", "🇼", "🇿", "🇺", "🏻", "🏼", "🏽", "🏾", "🏿"] + }; + function A(F) { + var A = []; + return x.each(F.o.plugins.emoji.emojiList, function (E, B) { + if (x.isArray(B)) { + var C = B[0], + D = B[1], + e = '' + C + '', + i = "emoji-" + C.replace(/:/g, ""), + o = { + hasIcon: !1, + text: e, fn: function fn() { - if (trumbowyg.o.plugins.giphy.apiKey === null) { - throw new Error('You must set a Giphy API Key'); - } - var BASE_URL = 'https://api.giphy.com/v1/gifs/search?api_key=' + trumbowyg.o.plugins.giphy.apiKey + '&rating=' + trumbowyg.o.plugins.giphy.rating, - DEFAULT_URL = BASE_URL.replace('/search', '/trending'); - var previousAjaxCall = { - abort: function abort() {} - }; - var prefix = trumbowyg.o.prefix; - - // Create and open the modal - var searchInput = '', - closeButton = '', - poweredByGiphy = '
    Powered by' + giphyLogo + '
    ', - giphyModalHtml = searchInput + closeButton + poweredByGiphy + '
    '; - trumbowyg.openModal(null, giphyModalHtml, false).one(CANCEL_EVENT, function () { - try { - previousAjaxCall.abort(); - } catch (e) {} - trumbowyg.closeModal(); - }); - var $giphyInput = $('.' + prefix + 'giphy-search'), - $giphyClose = $('.' + prefix + 'giphy-close'), - $giphyModal = $('.' + prefix + 'giphy-modal'); - var ajaxError = function ajaxError() { - if (!navigator.onLine && !$('.' + prefix + 'giphy-offline', $giphyModal).length) { - $giphyModal.empty(); - $giphyModal.append('

    You are offline

    '); - } - }; - - // Load trending gifs as default - $.ajax({ - url: DEFAULT_URL, - dataType: 'json', - success: function success(response) { - renderGifs(response, $giphyModal, trumbowyg, true); - }, - error: ajaxError - }); - var searchGifsOnInput = function searchGifsOnInput() { - var query = $giphyInput.val(); - if (query.length === 0) { - return; - } - try { - previousAjaxCall.abort(); - } catch (e) {} - previousAjaxCall = $.ajax({ - url: BASE_URL + '&q=' + encodeURIComponent(query), - dataType: 'json', - success: function success(response) { - renderGifs(response, $giphyModal, trumbowyg, true); - }, - error: ajaxError - }); - }; - var throttledInputRequest = trumbowygThrottle(searchGifsOnInput, trumbowyg.o.plugins.giphy.throttleDelay); - $giphyInput.on('input', throttledInputRequest); - $giphyInput.focus(); - $giphyClose.one('click', function () { - $giphyModal.trigger(CANCEL_EVENT); - }); + return F.execCmd("insertImage", D, !1, !0), !0; } - }); - } + }; + F.addBtnDef(i, o), A.push(i); + } else { + var n = "emoji-" + B.replace(/:/g, ""), + m = { + text: B, + fn: function fn() { + var x = String.fromCodePoint(B.replace("&#", "0")); + return F.execCmd("insertText", x), !0; + } + }; + F.addBtnDef(n, m), A.push(n); } - } - }); -})(jQuery); -!function (i) { - "use strict"; - - i.extend(!0, i.trumbowyg, { - langs: { + }), A; + } + x.extend(!0, x.trumbowyg, { + langs: { en: { - giphy: "Insert GIF" + emoji: "Add an emoji" }, az: { - giphy: "GIF yerləşdir" + emoji: "Emoji yerləşdir" }, - by: { - giphy: "Уставіць GIF" + ca: { + emoji: "Afegir una emoticona" + }, + da: { + emoji: "Tilføj et humørikon" + }, + de: { + emoji: "Emoticon einfügen" + }, + es: { + emoji: "Añadir un emoticono" }, et: { - giphy: "Sisesta GIF" + emoji: "Lisa emotikon" }, fr: { - giphy: "Insérer un GIF" + emoji: "Ajouter un emoji" }, hu: { - giphy: "GIF beszúrás" + emoji: "Emoji beszúrás" + }, + ja: { + emoji: "絵文字の挿入" + }, + ko: { + emoji: "이모지 넣기" }, ru: { - giphy: "Вставить GIF" + emoji: "Вставить emoji" }, sl: { - giphy: "Vstavi GIF" + emoji: "Vstavi emotikon" }, tr: { - giphy: "GIF ekle" - } - } - }); - var e = "tbwcancel"; - function t(e, t, n, l) { - var a = (t.width() - 20) / 3, - o = e.data.filter(function (i) { - return !!(i.images.downsized || i.images.downsized_medium).url; - }).map(function (i) { - var e = i.images.downsized || i.images.downsized_medium, - t = e.height / e.width, - n = i.title; - return '
    ' + ("' + n + '') + "
    "; - }).join(""); - if (!0 === l) { - if (0 === o.length) { - if (i("." + n.o.prefix + "giphy-no-result", t).length > 0) return; - o = ''; + emoji: "Emoji ekle" + }, + zh_cn: { + emoji: "添加表情" } - t.empty(); - } - t.append(o); - var c = function c(i) { - i.classList.add("tbw-loaded"); - }; - i("img", t).each(function () { - var i = this; - i.complete ? c(i) : i.addEventListener("load", function () { - c(this); - }); - }), i("img", t).on("click", function () { - var e = i(this).attr("src"), - l = i(this).attr("alt"); - (n.restoreRange(), n.execCmd("insertImage", e, !1, !0), l) && (i('img[src="' + e + '"]:not([alt])', n.$box).attr("alt", l), n.syncCode()); - i("img", t).off(), n.closeModal(); - }); - } - var n = { - rating: "g", - apiKey: null, - throttleDelay: 300, - noResultGifUrl: "https://media.giphy.com/media/2Faz9FbRzmwxY0pZS/giphy.gif" - }; - i.extend(!0, i.trumbowyg, { + }, plugins: { - giphy: { - init: function init(l) { - l.o.plugins.giphy = i.extend({}, n, l.o.plugins.giphy || {}), l.addBtnDef("giphy", { - fn: function fn() { - if (null === l.o.plugins.giphy.apiKey) throw new Error("You must set a Giphy API Key"); - var n = "https://api.giphy.com/v1/gifs/search?api_key=" + l.o.plugins.giphy.apiKey + "&rating=" + l.o.plugins.giphy.rating, - a = n.replace("/search", "/trending"), - o = { - abort: function abort() {} - }, - c = l.o.prefix, - r = '' + ('') + ('
    Powered by
    ') + '
    '; - l.openModal(null, r, !1).one(e, function () { - try { - o.abort(); - } catch (i) {} - l.closeModal(); - }); - var s = i("." + c + "giphy-search"), - g = i("." + c + "giphy-close"), - p = i("." + c + "giphy-modal"), - h = function h() { - navigator.onLine || i("." + c + "giphy-offline", p).length || (p.empty(), p.append('

    You are offline

    ')); - }; - i.ajax({ - url: a, - dataType: "json", - success: function success(i) { - t(i, p, l, !0); - }, - error: h - }); - var u, - d, - y, - f, - m = (u = function u() { - var e = s.val(); - if (0 !== e.length) { - try { - o.abort(); - } catch (i) {} - o = i.ajax({ - url: n + "&q=" + encodeURIComponent(e), - dataType: "json", - success: function success(i) { - t(i, p, l, !0); - }, - error: h - }); - } - }, d = l.o.plugins.giphy.throttleDelay, function () { - var i = this, - e = +new Date(), - t = arguments; - y && e < y + d ? (clearTimeout(f), f = setTimeout(function () { - y = e, u.apply(i, t); - }, d)) : (y = e, u.apply(i, t)); - }); - s.on("input", m), s.focus(), g.one("click", function () { - p.trigger(e); - }); - } - }); + emoji: { + init: function init(x) { + x.o.plugins.emoji = x.o.plugins.emoji || F; + var E = { + dropdown: A(x) + }; + x.addBtnDef("emoji", E); } } } @@ -2664,256 +2309,6 @@ } }); }(jQuery); -/*/* =========================================================== - * trumbowyg.history.js v1.0 - * history plugin for Trumbowyg - * http://alex-d.github.com/Trumbowyg - * =========================================================== - * Author : Sven Dunemann [dunemann@forelabs.eu] - */ - -(function ($) { - 'use strict'; - - $.extend(true, $.trumbowyg, { - plugins: { - history: { - destroy: function destroy(t) { - t.$c.off('tbwinit.history tbwchange.history'); - }, - init: function init(t) { - t.o.plugins.history = $.extend(true, { - _stack: [], - _index: -1, - _focusEl: undefined - }, t.o.plugins.history || {}); - var btnBuildDefRedo = { - title: t.lang.redo, - ico: 'redo', - key: 'Y', - fn: function fn() { - if (t.o.plugins.history._index < t.o.plugins.history._stack.length - 1) { - t.o.plugins.history._index += 1; - var index = t.o.plugins.history._index; - var newState = t.o.plugins.history._stack[index]; - t.execCmd('html', newState); - // because of some semantic optimisations we have to save the state back - // to history - t.o.plugins.history._stack[index] = t.$ed.html(); - carretToEnd(); - toggleButtonStates(); - } - } - }; - var btnBuildDefUndo = { - title: t.lang.undo, - ico: 'undo', - key: 'Z', - fn: function fn() { - if (t.o.plugins.history._index > 0) { - t.o.plugins.history._index -= 1; - var index = t.o.plugins.history._index, - newState = t.o.plugins.history._stack[index]; - t.execCmd('html', newState); - // because of some semantic optimisations we have to save the state back - // to history - t.o.plugins.history._stack[index] = t.$ed.html(); - carretToEnd(); - toggleButtonStates(); - } - } - }; - var pushToHistory = function pushToHistory() { - var index = t.o.plugins.history._index, - stack = t.o.plugins.history._stack, - latestState = stack.slice(-1)[0] || '

    ', - prevState = stack[index], - newState = t.$ed.html(), - focusEl = t.doc.getSelection().focusNode, - focusElText = '', - latestStateTagsList, - newStateTagsList, - prevFocusEl = t.o.plugins.history._focusEl; - latestStateTagsList = $('
    ' + latestState + '
    ').find('*').map(function () { - return this.localName; - }); - newStateTagsList = $('
    ' + newState + '
    ').find('*').map(function () { - return this.localName; - }); - if (focusEl) { - t.o.plugins.history._focusEl = focusEl; - focusElText = focusEl.outerHTML || focusEl.textContent; - } - if (newState !== prevState) { - // a new stack entry is defined when current insert ends on a whitespace character - // or count of node elements has been changed - // or focused element differs from previous one - if (focusElText.slice(-1).match(/\s/) || !arraysAreIdentical(latestStateTagsList, newStateTagsList) || t.o.plugins.history._index <= 0 || focusEl !== prevFocusEl) { - t.o.plugins.history._index += 1; - // remove newer entries in history when something new was added - // because timeline was changes with interaction - t.o.plugins.history._stack = stack.slice(0, t.o.plugins.history._index); - // now add new state to modified history - t.o.plugins.history._stack.push(newState); - } else { - // modify last stack entry - t.o.plugins.history._stack[index] = newState; - } - toggleButtonStates(); - } - }; - var toggleButtonStates = function toggleButtonStates() { - var index = t.o.plugins.history._index, - stackSize = t.o.plugins.history._stack.length, - undoState = index > 0, - redoState = stackSize !== 0 && index !== stackSize - 1; - toggleButtonState('historyUndo', undoState); - toggleButtonState('historyRedo', redoState); - }; - var toggleButtonState = function toggleButtonState(btn, enable) { - var button = t.$box.find('.trumbowyg-' + btn + '-button'); - if (enable) { - button.removeClass('trumbowyg-disable'); - } else if (!button.hasClass('trumbowyg-disable')) { - button.addClass('trumbowyg-disable'); - } - }; - var arraysAreIdentical = function arraysAreIdentical(a, b) { - if (a === b) { - return true; - } - if (a == null || b == null) { - return false; - } - if (a.length !== b.length) { - return false; - } - for (var i = 0; i < a.length; i += 1) { - if (a[i] !== b[i]) { - return false; - } - } - return true; - }; - var carretToEnd = function carretToEnd() { - var node = t.doc.getSelection().focusNode, - range = t.doc.createRange(); - if (node.childNodes.length > 0) { - range.setStartAfter(node.childNodes[node.childNodes.length - 1]); - range.setEndAfter(node.childNodes[node.childNodes.length - 1]); - t.doc.getSelection().removeAllRanges(); - t.doc.getSelection().addRange(range); - } - }; - t.$c.on('tbwinit.history tbwchange.history', pushToHistory); - t.addBtnDef('historyRedo', btnBuildDefRedo); - t.addBtnDef('historyUndo', btnBuildDefUndo); - } - } - } - }); -})(jQuery); -/*/* =========================================================== - * trumbowyg.history.js v1.0 - * history plugin for Trumbowyg - * http://alex-d.github.com/Trumbowyg - * =========================================================== - * Author : Sven Dunemann [dunemann@forelabs.eu] - */ -!function (i) { - "use strict"; - - i.extend(!0, i.trumbowyg, { - plugins: { - history: { - destroy: function destroy(i) { - i.$c.off("tbwinit.history tbwchange.history"); - }, - init: function init(t) { - t.o.plugins.history = i.extend(!0, { - _stack: [], - _index: -1, - _focusEl: void 0 - }, t.o.plugins.history || {}); - var o = { - title: t.lang.redo, - ico: "redo", - key: "Y", - fn: function fn() { - if (t.o.plugins.history._index < t.o.plugins.history._stack.length - 1) { - t.o.plugins.history._index += 1; - var i = t.o.plugins.history._index, - o = t.o.plugins.history._stack[i]; - t.execCmd("html", o), t.o.plugins.history._stack[i] = t.$ed.html(), r(), s(); - } - } - }, - n = { - title: t.lang.undo, - ico: "undo", - key: "Z", - fn: function fn() { - if (t.o.plugins.history._index > 0) { - t.o.plugins.history._index -= 1; - var i = t.o.plugins.history._index, - o = t.o.plugins.history._stack[i]; - t.execCmd("html", o), t.o.plugins.history._stack[i] = t.$ed.html(), r(), s(); - } - } - }, - s = function s() { - var i = t.o.plugins.history._index, - o = t.o.plugins.history._stack.length, - n = 0 !== o && i !== o - 1; - e("historyUndo", i > 0), e("historyRedo", n); - }, - e = function e(i, o) { - var n = t.$box.find(".trumbowyg-" + i + "-button"); - o ? n.removeClass("trumbowyg-disable") : n.hasClass("trumbowyg-disable") || n.addClass("trumbowyg-disable"); - }, - l = function l(i, t) { - if (i === t) return !0; - if (null == i || null == t) return !1; - if (i.length !== t.length) return !1; - for (var o = 0; o < i.length; o += 1) if (i[o] !== t[o]) return !1; - return !0; - }, - r = function r() { - var i = t.doc.getSelection().focusNode, - o = t.doc.createRange(); - i.childNodes.length > 0 && (o.setStartAfter(i.childNodes[i.childNodes.length - 1]), o.setEndAfter(i.childNodes[i.childNodes.length - 1]), t.doc.getSelection().removeAllRanges(), t.doc.getSelection().addRange(o)); - }; - t.$c.on("tbwinit.history tbwchange.history", function () { - var o, - n, - e = t.o.plugins.history._index, - r = t.o.plugins.history._stack, - d = r.slice(-1)[0] || "

    ", - u = r[e], - h = t.$ed.html(), - c = t.doc.getSelection().focusNode, - g = "", - a = t.o.plugins.history._focusEl; - o = i("
    " + d + "
    ").find("*").map(function () { - return this.localName; - }), n = i("
    " + h + "
    ").find("*").map(function () { - return this.localName; - }), c && (t.o.plugins.history._focusEl = c, g = c.outerHTML || c.textContent), h !== u && (g.slice(-1).match(/\s/) || !l(o, n) || t.o.plugins.history._index <= 0 || c !== a ? (t.o.plugins.history._index += 1, t.o.plugins.history._stack = r.slice(0, t.o.plugins.history._index), t.o.plugins.history._stack.push(h)) : t.o.plugins.history._stack[e] = h, s()); - }), t.addBtnDef("historyRedo", o), t.addBtnDef("historyUndo", n); - } - } - } - }); -}(jQuery); -/* =========================================================== - * trumbowyg.indent.js v1.0 - * Indent or Outdent plugin for Trumbowyg - * http://alex-d.github.com/Trumbowyg - * =========================================================== - * Author : Fabacks - * Website : https://github.com/Fabacks - */ - (function ($) { 'use strict'; @@ -2921,5013 +2316,5440 @@ langs: { // jshint camelcase:false en: { - indent: 'Indent', - outdent: 'Outdent' + giphy: 'Insert GIF' }, az: { - indent: 'Girinti', - outdent: 'Çıxıntı' + giphy: 'GIF yerləşdir' }, by: { - indent: 'Водступ', - outdent: 'Выступ' + giphy: 'Уставіць GIF' }, et: { - indent: 'Taande suurendamine', - outdent: 'Taande vähendamine' + giphy: 'Sisesta GIF' }, fr: { - indent: 'Augmenter le retrait', - outdent: 'Diminuer le retrait' + giphy: 'Insérer un GIF' }, - pt_br: { - indent: 'Aumentar Recuo', - outdent: 'Diminuir Recuo' + hu: { + giphy: 'GIF beszúrás' }, ru: { - indent: 'Отступ', - outdent: 'Выступ' + giphy: 'Вставить GIF' }, sl: { - indent: 'Povečaj zamik', - outdent: 'Zmanjšaj zamik' + giphy: 'Vstavi GIF' }, tr: { - indent: 'Girinti', - outdent: 'Çıkıntı' + giphy: 'GIF ekle' } // jshint camelcase:true } }); - // Adds the extra button definition - $.extend(true, $.trumbowyg, { - plugins: { - paragraph: { - init: function init(trumbowyg) { - var indentBtnDef = { - fn: 'indent', - title: trumbowyg.lang.indent, - isSupported: function isSupported() { - return !!document.queryCommandSupported && !!document.queryCommandSupported('indent'); - }, - ico: 'indent' - }; - var outdentBtnDef = { - fn: 'outdent', - title: trumbowyg.lang.outdent, - isSupported: function isSupported() { - return !!document.queryCommandSupported && !!document.queryCommandSupported('outdent'); - }, - ico: 'outdent' - }; - trumbowyg.addBtnDef('indent', indentBtnDef); - trumbowyg.addBtnDef('outdent', outdentBtnDef); + var giphyLogo = ''; // jshint ignore:line + + var CANCEL_EVENT = 'tbwcancel'; + + // Throttle helper + function trumbowygThrottle(callback, delay) { + var last; + var timer; + return function () { + var context = this; + var now = +new Date(); + var args = arguments; + if (last && now < last + delay) { + clearTimeout(timer); + timer = setTimeout(function () { + last = now; + callback.apply(context, args); + }, delay); + } else { + last = now; + callback.apply(context, args); + } + }; + } + + // Fills modal with response gifs + function renderGifs(response, $giphyModal, trumbowyg, mustEmpty) { + var width = ($giphyModal.width() - 20) / 3; + var html = response.data.filter(function (gifData) { + // jshint camelcase:false + var downsized = gifData.images.downsized || gifData.images.downsized_medium; + // jshint camelcase:true + return !!downsized.url; + }).map(function (gifData) { + // jshint camelcase:false + var downsized = gifData.images.downsized || gifData.images.downsized_medium; + // jshint camelcase:true + var image = downsized, + imageRatio = image.height / image.width, + altText = gifData.title; + var imgHtml = '' + altText + ''; + return '
    ' + imgHtml + '
    '; + }).join(''); + if (mustEmpty === true) { + if (html.length === 0) { + if ($('.' + trumbowyg.o.prefix + 'giphy-no-result', $giphyModal).length > 0) { + return; } + html = ''; } + $giphyModal.empty(); } - }); -})(jQuery); -/* =========================================================== - * trumbowyg.indent.js v1.0 - * Indent or Outdent plugin for Trumbowyg - * http://alex-d.github.com/Trumbowyg - * =========================================================== - * Author : Fabacks - * Website : https://github.com/Fabacks - */ -!function (n) { - "use strict"; + $giphyModal.append(html); - n.extend(!0, n.trumbowyg, { - langs: { - en: { - indent: "Indent", - outdent: "Outdent" - }, - az: { - indent: "Girinti", - outdent: "Çıxıntı" - }, - by: { - indent: "Водступ", - outdent: "Выступ" - }, - et: { - indent: "Taande suurendamine", - outdent: "Taande vähendamine" - }, - fr: { - indent: "Augmenter le retrait", - outdent: "Diminuer le retrait" - }, - pt_br: { - indent: "Aumentar Recuo", - outdent: "Diminuir Recuo" - }, - ru: { - indent: "Отступ", - outdent: "Выступ" - }, - sl: { - indent: "Povečaj zamik", - outdent: "Zmanjšaj zamik" - }, - tr: { - indent: "Girinti", - outdent: "Çıkıntı" + // Remove gray overlay on image load + // moved here from inline callback definition due to CSP issue + // Note: this is being done post-factum because load event doesn't bubble up and so can't be delegated + var addLoadedClass = function addLoadedClass(img) { + img.classList.add('tbw-loaded'); + }; + $('img', $giphyModal).each(function () { + var img = this; + if (img.complete) { + // images load instantly when cached and esp. when loaded in previous modal open + addLoadedClass(img); + } else { + img.addEventListener('load', function () { + addLoadedClass(this); + }); } - } - }), n.extend(!0, n.trumbowyg, { + }); + $('img', $giphyModal).on('click', function () { + var src = $(this).attr('src'), + alt = $(this).attr('alt'); + trumbowyg.restoreRange(); + trumbowyg.execCmd('insertImage', src, false, true); + + // relay alt tag into inserted image + if (alt) { + var $img = $('img[src="' + src + '"]:not([alt])', trumbowyg.$box); + $img.attr('alt', alt); + // Note: This seems to fire relatively early and could be wrapped in a setTimeout if needed + trumbowyg.syncCode(); + } + $('img', $giphyModal).off(); + trumbowyg.closeModal(); + }); + } + var defaultOptions = { + rating: 'g', + apiKey: null, + throttleDelay: 300, + noResultGifUrl: 'https://media.giphy.com/media/2Faz9FbRzmwxY0pZS/giphy.gif' + }; + + // Add dropdown with font sizes + $.extend(true, $.trumbowyg, { plugins: { - paragraph: { - init: function init(n) { - var t = { - fn: "indent", - title: n.lang.indent, - isSupported: function isSupported() { - return !!document.queryCommandSupported && !!document.queryCommandSupported("indent"); - }, - ico: "indent" - }, - e = { - fn: "outdent", - title: n.lang.outdent, - isSupported: function isSupported() { - return !!document.queryCommandSupported && !!document.queryCommandSupported("outdent"); - }, - ico: "outdent" - }; - n.addBtnDef("indent", t), n.addBtnDef("outdent", e); + giphy: { + init: function init(trumbowyg) { + trumbowyg.o.plugins.giphy = $.extend({}, defaultOptions, trumbowyg.o.plugins.giphy || {}); + trumbowyg.addBtnDef('giphy', { + fn: function fn() { + if (trumbowyg.o.plugins.giphy.apiKey === null) { + throw new Error('You must set a Giphy API Key'); + } + var BASE_URL = 'https://api.giphy.com/v1/gifs/search?api_key=' + trumbowyg.o.plugins.giphy.apiKey + '&rating=' + trumbowyg.o.plugins.giphy.rating, + DEFAULT_URL = BASE_URL.replace('/search', '/trending'); + var previousAjaxCall = { + abort: function abort() {} + }; + var prefix = trumbowyg.o.prefix; + + // Create and open the modal + var searchInput = '', + closeButton = '', + poweredByGiphy = '
    Powered by' + giphyLogo + '
    ', + giphyModalHtml = searchInput + closeButton + poweredByGiphy + '
    '; + trumbowyg.openModal(null, giphyModalHtml, false).one(CANCEL_EVENT, function () { + try { + previousAjaxCall.abort(); + } catch (e) {} + trumbowyg.closeModal(); + }); + var $giphyInput = $('.' + prefix + 'giphy-search'), + $giphyClose = $('.' + prefix + 'giphy-close'), + $giphyModal = $('.' + prefix + 'giphy-modal'); + var ajaxError = function ajaxError() { + if (!navigator.onLine && !$('.' + prefix + 'giphy-offline', $giphyModal).length) { + $giphyModal.empty(); + $giphyModal.append('

    You are offline

    '); + } + }; + + // Load trending gifs as default + $.ajax({ + url: DEFAULT_URL, + dataType: 'json', + success: function success(response) { + renderGifs(response, $giphyModal, trumbowyg, true); + }, + error: ajaxError + }); + var searchGifsOnInput = function searchGifsOnInput() { + var query = $giphyInput.val(); + if (query.length === 0) { + return; + } + try { + previousAjaxCall.abort(); + } catch (e) {} + previousAjaxCall = $.ajax({ + url: BASE_URL + '&q=' + encodeURIComponent(query), + dataType: 'json', + success: function success(response) { + renderGifs(response, $giphyModal, trumbowyg, true); + }, + error: ajaxError + }); + }; + var throttledInputRequest = trumbowygThrottle(searchGifsOnInput, trumbowyg.o.plugins.giphy.throttleDelay); + $giphyInput.on('input', throttledInputRequest); + $giphyInput.focus(); + $giphyClose.one('click', function () { + $giphyModal.trigger(CANCEL_EVENT); + }); + } + }); } } } }); -}(jQuery); -/*/* =========================================================== - * trumbowyg.insertaudio.js v1.0 - * InsertAudio plugin for Trumbowyg - * http://alex-d.github.com/Trumbowyg - * =========================================================== - * Author : Adam Hess (AdamHess) - */ - -(function ($) { - 'use strict'; +})(jQuery); +!function (i) { + "use strict"; - var insertAudioOptions = { - src: { - label: 'URL', - required: true - }, - autoplay: { - label: 'AutoPlay', - required: false, - type: 'checkbox' - }, - muted: { - label: 'Muted', - required: false, - type: 'checkbox' - }, - preload: { - label: 'preload options', - required: false - } - }; - $.extend(true, $.trumbowyg, { + i.extend(!0, i.trumbowyg, { langs: { - // jshint camelcase:false en: { - insertAudio: 'Insert Audio' + giphy: "Insert GIF" }, az: { - insertAudio: 'Səs yerləşdir' + giphy: "GIF yerləşdir" }, by: { - insertAudio: 'Уставіць аўдыё' - }, - ca: { - insertAudio: 'Inserir Audio' - }, - da: { - insertAudio: 'Indsæt lyd' - }, - es: { - insertAudio: 'Insertar Audio' + giphy: "Уставіць GIF" }, et: { - insertAudio: 'Lisa helifail' + giphy: "Sisesta GIF" }, fr: { - insertAudio: 'Insérer un son' + giphy: "Insérer un GIF" }, hu: { - insertAudio: 'Audio beszúrás' - }, - ja: { - insertAudio: '音声の挿入' - }, - ko: { - insertAudio: '소리 넣기' - }, - pt_br: { - insertAudio: 'Inserir áudio' + giphy: "GIF beszúrás" }, ru: { - insertAudio: 'Вставить аудио' + giphy: "Вставить GIF" }, sl: { - insertAudio: 'Vstavi zvočno datoteko' + giphy: "Vstavi GIF" }, tr: { - insertAudio: 'Ses Ekle' - } - // jshint camelcase:true - }, - - plugins: { - insertAudio: { - init: function init(trumbowyg) { - var btnDef = { - fn: function fn() { - var insertAudioCallback = function insertAudioCallback(v) { - // controls should always be show otherwise the audio will - // be invisible defeating the point of a wysiwyg - var html = '