From af65662a59875cbb679632882e600861e6fd3350 Mon Sep 17 00:00:00 2001 From: Mike Alhayek Date: Tue, 26 Sep 2023 09:44:56 -0700 Subject: [PATCH 1/3] Add a fallback function to crypto.randomUUID (#14371) # Conflicts: # src/OrchardCore.Modules/OrchardCore.Media/wwwroot/Scripts/media.js # src/OrchardCore.Modules/OrchardCore.Media/wwwroot/Scripts/media.min.js --- .../OrchardCore.Media/Assets.json | 7 +++- .../Assets/js/{ => app}/MediaApp/app.js | 0 .../js/{ => app}/MediaApp/fileupload.js | 6 ++-- .../js/{ => app}/MediaApp/folderComponent.js | 0 .../MediaApp/mediaItemsGridComponent.js | 0 .../MediaApp/mediaItemsTableComponent.js | 0 .../js/{ => app}/MediaApp/pagerComponent.js | 0 .../MediaApp/sortIndicatorComponent.js | 0 .../MediaField/attachedMediaField.js | 32 +++++++++---------- .../MediaField/mediaFieldThumbsContainer.js | 0 .../js/{ => app}/MediaField/mediafield.js | 0 .../MediaField/mediafieldsAppsArray.js | 0 .../js/{ => app}/Shared/uploadComponent.js | 0 .../{ => app}/Shared/uploadListComponent.js | 10 +++--- .../OrchardCore.Media/Assets/js/helpers.js | 9 ++++++ 15 files changed, 39 insertions(+), 25 deletions(-) rename src/OrchardCore.Modules/OrchardCore.Media/Assets/js/{ => app}/MediaApp/app.js (100%) rename src/OrchardCore.Modules/OrchardCore.Media/Assets/js/{ => app}/MediaApp/fileupload.js (97%) rename src/OrchardCore.Modules/OrchardCore.Media/Assets/js/{ => app}/MediaApp/folderComponent.js (100%) rename src/OrchardCore.Modules/OrchardCore.Media/Assets/js/{ => app}/MediaApp/mediaItemsGridComponent.js (100%) rename src/OrchardCore.Modules/OrchardCore.Media/Assets/js/{ => app}/MediaApp/mediaItemsTableComponent.js (100%) rename src/OrchardCore.Modules/OrchardCore.Media/Assets/js/{ => app}/MediaApp/pagerComponent.js (100%) rename src/OrchardCore.Modules/OrchardCore.Media/Assets/js/{ => app}/MediaApp/sortIndicatorComponent.js (100%) rename src/OrchardCore.Modules/OrchardCore.Media/Assets/js/{ => app}/MediaField/attachedMediaField.js (96%) rename src/OrchardCore.Modules/OrchardCore.Media/Assets/js/{ => app}/MediaField/mediaFieldThumbsContainer.js (100%) rename src/OrchardCore.Modules/OrchardCore.Media/Assets/js/{ => app}/MediaField/mediafield.js (100%) rename src/OrchardCore.Modules/OrchardCore.Media/Assets/js/{ => app}/MediaField/mediafieldsAppsArray.js (100%) rename src/OrchardCore.Modules/OrchardCore.Media/Assets/js/{ => app}/Shared/uploadComponent.js (100%) rename src/OrchardCore.Modules/OrchardCore.Media/Assets/js/{ => app}/Shared/uploadListComponent.js (94%) create mode 100644 src/OrchardCore.Modules/OrchardCore.Media/Assets/js/helpers.js diff --git a/src/OrchardCore.Modules/OrchardCore.Media/Assets.json b/src/OrchardCore.Modules/OrchardCore.Media/Assets.json index e1b3ec39901..80d16ffac43 100644 --- a/src/OrchardCore.Modules/OrchardCore.Media/Assets.json +++ b/src/OrchardCore.Modules/OrchardCore.Media/Assets.json @@ -11,7 +11,12 @@ "inputs": [ "./node_modules/blueimp-file-upload/js/jquery.fileupload.js", "./node_modules/blueimp-file-upload/js/jquery.iframe-transport.js", - "Assets/js/**/*.js" + "Assets/js/helpers.js", + "Assets/js/app/**/*.js" + ], + "watch": [ + "Assets/js/helpers.js", + "Assets/js/app/**/*.js" ], "output": "wwwroot/Scripts/media.js" } diff --git a/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/MediaApp/app.js b/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaApp/app.js similarity index 100% rename from src/OrchardCore.Modules/OrchardCore.Media/Assets/js/MediaApp/app.js rename to src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaApp/app.js diff --git a/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/MediaApp/fileupload.js b/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaApp/fileupload.js similarity index 97% rename from src/OrchardCore.Modules/OrchardCore.Media/Assets/js/MediaApp/fileupload.js rename to src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaApp/fileupload.js index 9474982bc81..9bf1f5a6930 100644 --- a/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/MediaApp/fileupload.js +++ b/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaApp/fileupload.js @@ -1,5 +1,5 @@ $(document).on('mediaApp:ready', function () { - var chunkedFileUploadId = crypto.randomUUID(); + var chunkedFileUploadId = randomUUID(); $('#fileupload') .fileupload({ @@ -54,5 +54,5 @@ $(document).bind('dragover', function (e) { window.dropZoneTimeout = null; dropZone.removeClass('in'); }, 100); - } -}); \ No newline at end of file + } +}); diff --git a/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/MediaApp/folderComponent.js b/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaApp/folderComponent.js similarity index 100% rename from src/OrchardCore.Modules/OrchardCore.Media/Assets/js/MediaApp/folderComponent.js rename to src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaApp/folderComponent.js diff --git a/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/MediaApp/mediaItemsGridComponent.js b/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaApp/mediaItemsGridComponent.js similarity index 100% rename from src/OrchardCore.Modules/OrchardCore.Media/Assets/js/MediaApp/mediaItemsGridComponent.js rename to src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaApp/mediaItemsGridComponent.js diff --git a/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/MediaApp/mediaItemsTableComponent.js b/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaApp/mediaItemsTableComponent.js similarity index 100% rename from src/OrchardCore.Modules/OrchardCore.Media/Assets/js/MediaApp/mediaItemsTableComponent.js rename to src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaApp/mediaItemsTableComponent.js diff --git a/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/MediaApp/pagerComponent.js b/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaApp/pagerComponent.js similarity index 100% rename from src/OrchardCore.Modules/OrchardCore.Media/Assets/js/MediaApp/pagerComponent.js rename to src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaApp/pagerComponent.js diff --git a/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/MediaApp/sortIndicatorComponent.js b/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaApp/sortIndicatorComponent.js similarity index 100% rename from src/OrchardCore.Modules/OrchardCore.Media/Assets/js/MediaApp/sortIndicatorComponent.js rename to src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaApp/sortIndicatorComponent.js diff --git a/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/MediaField/attachedMediaField.js b/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaField/attachedMediaField.js similarity index 96% rename from src/OrchardCore.Modules/OrchardCore.Media/Assets/js/MediaField/attachedMediaField.js rename to src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaField/attachedMediaField.js index 5c3772e3b7b..57e211b9060 100644 --- a/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/MediaField/attachedMediaField.js +++ b/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaField/attachedMediaField.js @@ -129,7 +129,7 @@ function initializeAttachedMediaField(el, idOfUploadButton, uploadAction, mediaI var selector = '#' + idOfUploadButton; var editorId = mediaFieldEditor.attr('id'); - var chunkedFileUploadId = crypto.randomUUID(); + var chunkedFileUploadId = randomUUID(); $(selector) .fileupload({ @@ -160,7 +160,7 @@ function initializeAttachedMediaField(el, idOfUploadButton, uploadAction, mediaI done: function (e, data) { var newMediaItems = []; var errormsg = ""; - + if (data.result.files.length > 0) { for (var i = 0; i < data.result.files.length; i++) { data.result.files[i].isNew = true; @@ -173,7 +173,7 @@ function initializeAttachedMediaField(el, idOfUploadButton, uploadAction, mediaI errormsg += data.result.files[i].error + "\n"; } } - + if (errormsg !== "") { alert(errormsg); return; @@ -247,29 +247,29 @@ function initializeAttachedMediaField(el, idOfUploadButton, uploadAction, mediaI cancelMediaTextModal: function (event) { this.mediaTextModal.hide(); this.selectedMedia.mediaText = this.backupMediaText; - }, + }, showAnchorModal: function (event) { this.anchoringModal = new bootstrap.Modal(this.$refs.anchoringModal); this.anchoringModal.show(); // Cause a refresh to recalc heights. this.selectedMedia.anchor = { - x: this.selectedMedia.anchor.x, - y: this.selectedMedia.anchor.y + x: this.selectedMedia.anchor.x, + y: this.selectedMedia.anchor.y } this.backupAnchor = this.selectedMedia.anchor; - }, + }, cancelAnchoringModal: function (event) { this.anchoringModal.hide(); this.selectedMedia.anchor = this.backupAnchor; - }, + }, resetAnchor: function (event) { this.selectedMedia.anchor = { x: 0.5, y: 0.5 }; - }, - onAnchorDrop: function(event) { + }, + onAnchorDrop: function (event) { var image = this.$refs.anchorImage; this.selectedMedia.anchor = { - x: event.offsetX / image.clientWidth, - y: event.offsetY / image.clientHeight + x: event.offsetX / image.clientWidth, + y: event.offsetY / image.clientHeight } }, anchorLeft: function () { @@ -286,7 +286,7 @@ function initializeAttachedMediaField(el, idOfUploadButton, uploadAction, mediaI } else { return '0'; } - }, + }, anchorTop: function () { if (this.$refs.anchorImage && this.selectedMedia) { var position = this.selectedMedia.anchor.y * this.$refs.anchorImage.clientHeight; @@ -306,7 +306,7 @@ function initializeAttachedMediaField(el, idOfUploadButton, uploadAction, mediaI x: event.offsetX / image.clientWidth, y: event.offsetY / image.clientHeight } - }, + }, addMediaFiles: function (files) { if ((files.length > 1) && (allowMultiple === false)) { alert($('#onlyOneItemMessage').val()); @@ -330,11 +330,11 @@ function initializeAttachedMediaField(el, idOfUploadButton, uploadAction, mediaI watch: { mediaItems: { deep: true, - handler () { + handler() { // Trigger preview rendering setTimeout(function () { $(document).trigger('contentpreview:render'); }, 100); } - }, + }, currentPrefs: function (newPrefs) { localStorage.setItem('mediaFieldPrefs', JSON.stringify(newPrefs)); } diff --git a/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/MediaField/mediaFieldThumbsContainer.js b/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaField/mediaFieldThumbsContainer.js similarity index 100% rename from src/OrchardCore.Modules/OrchardCore.Media/Assets/js/MediaField/mediaFieldThumbsContainer.js rename to src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaField/mediaFieldThumbsContainer.js diff --git a/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/MediaField/mediafield.js b/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaField/mediafield.js similarity index 100% rename from src/OrchardCore.Modules/OrchardCore.Media/Assets/js/MediaField/mediafield.js rename to src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaField/mediafield.js diff --git a/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/MediaField/mediafieldsAppsArray.js b/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaField/mediafieldsAppsArray.js similarity index 100% rename from src/OrchardCore.Modules/OrchardCore.Media/Assets/js/MediaField/mediafieldsAppsArray.js rename to src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaField/mediafieldsAppsArray.js diff --git a/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/Shared/uploadComponent.js b/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/Shared/uploadComponent.js similarity index 100% rename from src/OrchardCore.Modules/OrchardCore.Media/Assets/js/Shared/uploadComponent.js rename to src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/Shared/uploadComponent.js diff --git a/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/Shared/uploadListComponent.js b/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/Shared/uploadListComponent.js similarity index 94% rename from src/OrchardCore.Modules/OrchardCore.Media/Assets/js/Shared/uploadListComponent.js rename to src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/Shared/uploadListComponent.js index 3eea0751094..b236ab056cb 100644 --- a/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/Shared/uploadListComponent.js +++ b/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/Shared/uploadListComponent.js @@ -50,10 +50,10 @@ Vue.component('uploadList', { var self = this; var uploadInput = document.getElementById(self.uploadInputId ?? 'fileupload'); $(uploadInput).bind('fileuploadadd', function (e, data) { - if (!data.files) { + if (!data.files) { return; } - data.files.forEach(function (newFile) { + data.files.forEach(function (newFile) { var alreadyInList = self.files.some(function (f) { return f.name == newFile.name; }); @@ -62,8 +62,8 @@ Vue.component('uploadList', { 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) { @@ -88,7 +88,7 @@ Vue.component('uploadList', { this.expanded = false; } }, - clearErrors: function () { + clearErrors: function () { this.files = this.files.filter(function (item) { return item.errorMessage == ''; }); diff --git a/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/helpers.js b/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/helpers.js new file mode 100644 index 00000000000..f969b730d05 --- /dev/null +++ b/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/helpers.js @@ -0,0 +1,9 @@ +function randomUUID() { + if (typeof crypto === 'object' && typeof crypto.randomUUID === 'function') { + return crypto.randomUUID(); + } + + return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, c => + (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16) + ); +} From 8c4256f7db391842a4494d082b9eb2f634239ba5 Mon Sep 17 00:00:00 2001 From: Mike Alhayek Date: Tue, 26 Sep 2023 14:11:24 -0700 Subject: [PATCH 2/3] rebuild assets --- .../wwwroot/Scripts/media.js | 335 +++++++++--------- .../wwwroot/Scripts/media.min.js | 2 +- 2 files changed, 173 insertions(+), 164 deletions(-) diff --git a/src/OrchardCore.Modules/OrchardCore.Media/wwwroot/Scripts/media.js b/src/OrchardCore.Modules/OrchardCore.Media/wwwroot/Scripts/media.js index 3900f8c5d7c..131b7d895ec 100644 --- a/src/OrchardCore.Modules/OrchardCore.Media/wwwroot/Scripts/media.js +++ b/src/OrchardCore.Modules/OrchardCore.Media/wwwroot/Scripts/media.js @@ -1558,6 +1558,15 @@ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == }); }); function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function randomUUID() { + if ((typeof crypto === "undefined" ? "undefined" : _typeof(crypto)) === 'object' && typeof crypto.randomUUID === 'function') { + return crypto.randomUUID(); + } + return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, function (c) { + return (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16); + }); +} +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } @@ -2037,7 +2046,7 @@ function initializeMediaApplication(displayMediaApplication, mediaApplicationUrl }); } $(document).on('mediaApp:ready', function () { - var chunkedFileUploadId = crypto.randomUUID(); + var chunkedFileUploadId = randomUUID(); $('#fileupload').fileupload({ dropZone: $('#mediaApp'), limitConcurrentUploads: 20, @@ -2475,6 +2484,166 @@ 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"); @@ -2619,7 +2788,7 @@ function initializeAttachedMediaField(el, idOfUploadButton, uploadAction, mediaI }); var selector = '#' + idOfUploadButton; var editorId = mediaFieldEditor.attr('id'); - var chunkedFileUploadId = crypto.randomUUID(); + var chunkedFileUploadId = randomUUID(); $(selector).fileupload({ limitConcurrentUploads: 20, dropZone: $('#' + editorId), @@ -3190,164 +3359,4 @@ Vue.component('mediaFieldThumbsContainer', { } } }); -// 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5maWxldXBsb2FkLmpzIiwianF1ZXJ5LmlmcmFtZS10cmFuc3BvcnQuanMiLCJNZWRpYUFwcC9hcHAuanMiLCJNZWRpYUFwcC9maWxldXBsb2FkLmpzIiwiTWVkaWFBcHAvZm9sZGVyQ29tcG9uZW50LmpzIiwiTWVkaWFBcHAvbWVkaWFJdGVtc0dyaWRDb21wb25lbnQuanMiLCJNZWRpYUFwcC9tZWRpYUl0ZW1zVGFibGVDb21wb25lbnQuanMiLCJNZWRpYUFwcC9wYWdlckNvbXBvbmVudC5qcyIsIk1lZGlhQXBwL3NvcnRJbmRpY2F0b3JDb21wb25lbnQuanMiLCJNZWRpYUZpZWxkL2F0dGFjaGVkTWVkaWFGaWVsZC5qcyIsIk1lZGlhRmllbGQvbWVkaWFmaWVsZC5qcyIsIk1lZGlhRmllbGQvbWVkaWFmaWVsZHNBcHBzQXJyYXkuanMiLCJNZWRpYUZpZWxkL21lZGlhRmllbGRUaHVtYnNDb250YWluZXIuanMiLCJTaGFyZWQvdXBsb2FkQ29tcG9uZW50LmpzIiwiU2hhcmVkL3VwbG9hZExpc3RDb21wb25lbnQuanMiXSwibmFtZXMiOlsiZmFjdG9yeSIsImRlZmluZSIsImFtZCIsImV4cG9ydHMiLCJfdHlwZW9mIiwicmVxdWlyZSIsIndpbmRvdyIsImpRdWVyeSIsIiQiLCJzdXBwb3J0IiwiZmlsZUlucHV0IiwiUmVnRXhwIiwidGVzdCIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsInByb3AiLCJ4aHJGaWxlVXBsb2FkIiwiUHJvZ3Jlc3NFdmVudCIsIkZpbGVSZWFkZXIiLCJ4aHJGb3JtRGF0YUZpbGVVcGxvYWQiLCJGb3JtRGF0YSIsImJsb2JTbGljZSIsIkJsb2IiLCJwcm90b3R5cGUiLCJzbGljZSIsIndlYmtpdFNsaWNlIiwibW96U2xpY2UiLCJnZXREcmFnSGFuZGxlciIsInR5cGUiLCJpc0RyYWdPdmVyIiwiZSIsImRhdGFUcmFuc2ZlciIsIm9yaWdpbmFsRXZlbnQiLCJpbkFycmF5IiwidHlwZXMiLCJfdHJpZ2dlciIsIkV2ZW50IiwiZGVsZWdhdGVkRXZlbnQiLCJwcmV2ZW50RGVmYXVsdCIsImRyb3BFZmZlY3QiLCJ3aWRnZXQiLCJvcHRpb25zIiwiZHJvcFpvbmUiLCJkb2N1bWVudCIsInBhc3RlWm9uZSIsInVuZGVmaW5lZCIsInJlcGxhY2VGaWxlSW5wdXQiLCJwYXJhbU5hbWUiLCJzaW5nbGVGaWxlVXBsb2FkcyIsImxpbWl0TXVsdGlGaWxlVXBsb2FkcyIsImxpbWl0TXVsdGlGaWxlVXBsb2FkU2l6ZSIsImxpbWl0TXVsdGlGaWxlVXBsb2FkU2l6ZU92ZXJoZWFkIiwic2VxdWVudGlhbFVwbG9hZHMiLCJsaW1pdENvbmN1cnJlbnRVcGxvYWRzIiwiZm9yY2VJZnJhbWVUcmFuc3BvcnQiLCJyZWRpcmVjdCIsInJlZGlyZWN0UGFyYW1OYW1lIiwicG9zdE1lc3NhZ2UiLCJtdWx0aXBhcnQiLCJtYXhDaHVua1NpemUiLCJ1cGxvYWRlZEJ5dGVzIiwicmVjYWxjdWxhdGVQcm9ncmVzcyIsInByb2dyZXNzSW50ZXJ2YWwiLCJiaXRyYXRlSW50ZXJ2YWwiLCJhdXRvVXBsb2FkIiwidW5pcXVlRmlsZW5hbWVzIiwibWVzc2FnZXMiLCJpMThuIiwibWVzc2FnZSIsImNvbnRleHQiLCJ0b1N0cmluZyIsImVhY2giLCJrZXkiLCJ2YWx1ZSIsInJlcGxhY2UiLCJmb3JtRGF0YSIsImZvcm0iLCJzZXJpYWxpemVBcnJheSIsImFkZCIsImRhdGEiLCJpc0RlZmF1bHRQcmV2ZW50ZWQiLCJmaWxldXBsb2FkIiwicHJvY2VzcyIsImRvbmUiLCJzdWJtaXQiLCJwcm9jZXNzRGF0YSIsImNvbnRlbnRUeXBlIiwiY2FjaGUiLCJ0aW1lb3V0IiwiX3Byb21pc2VQaXBlIiwicGFydHMiLCJmbiIsImpxdWVyeSIsInNwbGl0IiwiTnVtYmVyIiwiX3NwZWNpYWxPcHRpb25zIiwiX2Jsb2JTbGljZSIsImFwcGx5IiwiYXJndW1lbnRzIiwiX0JpdHJhdGVUaW1lciIsInRpbWVzdGFtcCIsIkRhdGUiLCJub3ciLCJnZXRUaW1lIiwibG9hZGVkIiwiYml0cmF0ZSIsImdldEJpdHJhdGUiLCJpbnRlcnZhbCIsInRpbWVEaWZmIiwiX2lzWEhSVXBsb2FkIiwiX2dldEZvcm1EYXRhIiwiaXNBcnJheSIsIm5hbWUiLCJwdXNoIiwiX2dldFRvdGFsIiwiZmlsZXMiLCJ0b3RhbCIsImluZGV4IiwiZmlsZSIsInNpemUiLCJfaW5pdFByb2dyZXNzT2JqZWN0Iiwib2JqIiwicHJvZ3Jlc3MiLCJfcHJvZ3Jlc3MiLCJleHRlbmQiLCJfaW5pdFJlc3BvbnNlT2JqZWN0IiwiX3Jlc3BvbnNlIiwiT2JqZWN0IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiX29uUHJvZ3Jlc3MiLCJsZW5ndGhDb21wdXRhYmxlIiwiX3RpbWUiLCJNYXRoIiwiZmxvb3IiLCJjaHVua1NpemUiLCJfYml0cmF0ZVRpbWVyIiwiX2luaXRQcm9ncmVzc0xpc3RlbmVyIiwidGhhdCIsInhociIsImFqYXhTZXR0aW5ncyIsInVwbG9hZCIsIm9uIiwib2UiLCJfZGVpbml0UHJvZ3Jlc3NMaXN0ZW5lciIsIm9mZiIsIl9pc0luc3RhbmNlT2YiLCJfZ2V0VW5pcXVlRmlsZW5hbWUiLCJtYXAiLCJTdHJpbmciLCJfIiwicDEiLCJwMiIsImV4dCIsIl9pbml0WEhSRGF0YSIsImhlYWRlcnMiLCJjb250ZW50UmFuZ2UiLCJibG9iIiwiZW5jb2RlVVJJIiwidXBsb2FkTmFtZSIsImZpZWxkIiwiYXBwZW5kIiwiZmlsZU5hbWUiLCJfaW5pdElmcmFtZVNldHRpbmdzIiwidGFyZ2V0SG9zdCIsInVybCIsImRhdGFUeXBlIiwibG9jYXRpb24iLCJob3N0IiwiX2luaXREYXRhU2V0dGluZ3MiLCJfY2h1bmtlZFVwbG9hZCIsIl9nZXRQYXJhbU5hbWUiLCJpbnB1dCIsImkiLCJsZW5ndGgiLCJfaW5pdEZvcm1TZXR0aW5ncyIsImhyZWYiLCJ0b1VwcGVyQ2FzZSIsImZvcm1BY2NlcHRDaGFyc2V0IiwiYXR0ciIsIl9nZXRBSkFYU2V0dGluZ3MiLCJfZ2V0RGVmZXJyZWRTdGF0ZSIsImRlZmVycmVkIiwic3RhdGUiLCJpc1Jlc29sdmVkIiwiaXNSZWplY3RlZCIsIl9lbmhhbmNlUHJvbWlzZSIsInByb21pc2UiLCJzdWNjZXNzIiwiZXJyb3IiLCJmYWlsIiwiY29tcGxldGUiLCJhbHdheXMiLCJfZ2V0WEhSUHJvbWlzZSIsInJlc29sdmVPclJlamVjdCIsImFyZ3MiLCJkZmQiLCJEZWZlcnJlZCIsInJlc29sdmVXaXRoIiwicmVqZWN0V2l0aCIsImFib3J0IiwiX2FkZENvbnZlbmllbmNlTWV0aG9kcyIsImdldFByb21pc2UiLCJyZXNvbHZlRnVuYyIsInJlamVjdEZ1bmMiLCJfcHJvY2Vzc1F1ZXVlIiwiZXJyb3JUaHJvd24iLCJqcVhIUiIsIl9vblNlbmQiLCJwcm9jZXNzaW5nIiwicmVzcG9uc2UiLCJfZ2V0VXBsb2FkZWRCeXRlcyIsInJhbmdlIiwiZ2V0UmVzcG9uc2VIZWFkZXIiLCJ1cHBlckJ5dGVzUG9zIiwicGFyc2VJbnQiLCJ0ZXN0T25seSIsImZzIiwidWIiLCJtY3MiLCJvIiwiY3VycmVudExvYWRlZCIsImFqYXgiLCJyZXN1bHQiLCJ0ZXh0U3RhdHVzIiwiX2JlZm9yZVNlbmQiLCJfYWN0aXZlIiwiX29uRG9uZSIsIl9vbkZhaWwiLCJfb25BbHdheXMiLCJqcVhIUm9yUmVzdWx0IiwianFYSFJvckVycm9yIiwiYWJvcnRlZCIsInNsb3QiLCJwaXBlIiwic2VuZCIsIl9zZW5kaW5nIiwibmV4dFNsb3QiLCJfc2xvdHMiLCJzaGlmdCIsInJlc29sdmUiLCJfc2VxdWVuY2UiLCJfb25BZGQiLCJmaWxlc0xlbmd0aCIsImxpbWl0IiwibGltaXRTaXplIiwib3ZlcmhlYWQiLCJiYXRjaFNpemUiLCJwYXJhbU5hbWVTZXQiLCJwYXJhbU5hbWVTbGljZSIsImZpbGVTZXQiLCJqIiwib3JpZ2luYWxGaWxlcyIsImVsZW1lbnQiLCJuZXdEYXRhIiwiX3JlcGxhY2VGaWxlSW5wdXQiLCJpbnB1dENsb25lIiwiY2xvbmUiLCJyZXN0b3JlRm9jdXMiLCJpcyIsImFjdGl2ZUVsZW1lbnQiLCJmaWxlSW5wdXRDbG9uZSIsInJlc2V0IiwiYWZ0ZXIiLCJkZXRhY2giLCJ0cmlnZ2VyIiwiY2xlYW5EYXRhIiwiZWwiLCJfaGFuZGxlRmlsZVRyZWVFbnRyeSIsImVudHJ5IiwicGF0aCIsImVudHJpZXMiLCJkaXJSZWFkZXIiLCJlcnJvckhhbmRsZXIiLCJzdWNjZXNzSGFuZGxlciIsIl9oYW5kbGVGaWxlVHJlZUVudHJpZXMiLCJyZWFkRW50cmllcyIsInJlc3VsdHMiLCJjb25jYXQiLCJpc0ZpbGUiLCJfZmlsZSIsInJlbGF0aXZlUGF0aCIsImlzRGlyZWN0b3J5IiwiY3JlYXRlUmVhZGVyIiwid2hlbiIsIkFycmF5IiwiX2dldERyb3BwZWRGaWxlcyIsIml0ZW1zIiwid2Via2l0R2V0QXNFbnRyeSIsImdldEFzRW50cnkiLCJpdGVtIiwiZ2V0QXNGaWxlIiwibWFrZUFycmF5IiwiX2dldFNpbmdsZUZpbGVJbnB1dEZpbGVzIiwiZmlsZVNpemUiLCJfZ2V0RmlsZUlucHV0RmlsZXMiLCJfb25DaGFuZ2UiLCJ0YXJnZXQiLCJfb25QYXN0ZSIsImNsaXBib2FyZERhdGEiLCJfb25Ecm9wIiwiX29uRHJhZ092ZXIiLCJfb25EcmFnRW50ZXIiLCJfb25EcmFnTGVhdmUiLCJfaW5pdEV2ZW50SGFuZGxlcnMiLCJfb24iLCJkcmFnb3ZlciIsImRyb3AiLCJkcmFnZW50ZXIiLCJkcmFnbGVhdmUiLCJwYXN0ZSIsImNoYW5nZSIsIl9kZXN0cm95RXZlbnRIYW5kbGVycyIsIl9vZmYiLCJfZGVzdHJveSIsIl9zZXRPcHRpb24iLCJyZWluaXQiLCJfc3VwZXIiLCJfaW5pdFNwZWNpYWxPcHRpb25zIiwiZmluZCIsIl9nZXRSZWdFeHAiLCJzdHIiLCJtb2RpZmllcnMiLCJwb3AiLCJqb2luIiwiX2lzUmVnRXhwT3B0aW9uIiwiX2luaXREYXRhQXR0cmlidXRlcyIsImF0dHJpYnV0ZXMiLCJ0b0xvd2VyQ2FzZSIsImNoYXJBdCIsIl9jcmVhdGUiLCJhY3RpdmUiLCJkaXNhYmxlZCIsInJlamVjdCIsInRoZW4iLCJjb3VudGVyIiwianNvbkFQSSIsImpzb25QYXJzZSIsIkpTT04iLCJhamF4VHJhbnNwb3J0IiwiYXN5bmMiLCJpbml0aWFsSWZyYW1lU3JjIiwiaWZyYW1lIiwiYWRkUGFyYW1DaGFyIiwiY29tcGxldGVDYWxsYmFjayIsImZpbGVJbnB1dENsb25lcyIsInBhcmFtTmFtZXMiLCJjb250ZW50cyIsImZpcnN0Q2hpbGQiLCJFcnJvciIsImFwcGVuZFRvIiwic2V0VGltZW91dCIsInJlbW92ZSIsInZhbCIsInJlbW92ZUF0dHIiLCJyZXBsYWNlV2l0aCIsImJvZHkiLCJhamF4U2V0dXAiLCJjb252ZXJ0ZXJzIiwiaWZyYW1lVGV4dCIsInRleHQiLCJpZnJhbWVKc29uIiwiaWZyYW1lSHRtbCIsImh0bWwiLCJpZnJhbWVYbWwiLCJ4bWxEb2MiLCJpc1hNTERvYyIsInBhcnNlWE1MIiwiWE1MRG9jdW1lbnQiLCJ4bWwiLCJpZnJhbWVTY3JpcHQiLCJnbG9iYWxFdmFsIiwiaW5pdGlhbGl6ZWQiLCJtZWRpYUFwcCIsImJ1cyIsIlZ1ZSIsImluaXRpYWxpemVNZWRpYUFwcGxpY2F0aW9uIiwiZGlzcGxheU1lZGlhQXBwbGljYXRpb24iLCJtZWRpYUFwcGxpY2F0aW9uVXJsIiwicGF0aEJhc2UiLCJjb25zb2xlIiwibWV0aG9kIiwiY29udGVudCIsInJvb3QiLCJmb2xkZXIiLCJzZWxlY3RlZEZvbGRlciIsIm1lZGlhSXRlbXMiLCJzZWxlY3RlZE1lZGlhcyIsImVycm9ycyIsImRyYWdEcm9wVGh1bWJuYWlsIiwiSW1hZ2UiLCJzbWFsbFRodW1icyIsImdyaWRWaWV3IiwibWVkaWFGaWx0ZXIiLCJzb3J0QnkiLCJzb3J0QXNjIiwiaXRlbXNJblBhZ2UiLCJjcmVhdGVkIiwic2VsZiIsInNyYyIsIiRvbiIsInNlbGVjdFJvb3QiLCJzZWxlY3RlZCIsImVycm9ySW5mbyIsImxvYWRGb2xkZXIiLCJuZXdOYW1lIiwibmV3UGF0aCIsIm9sZFBhdGgiLCJtZWRpYSIsImZpbHRlciIsIm1lZGlhUGF0aCIsImNyZWF0ZUZvbGRlciIsImRlbGV0ZUZvbGRlciIsIm5ld1NvcnQiLCJjaGFuZ2VTb3J0IiwidG9nZ2xlU2VsZWN0aW9uT2ZNZWRpYSIsInJlbmFtZU1lZGlhIiwiZGVsZXRlTWVkaWFJdGVtIiwiaGFuZGxlRHJhZ1N0YXJ0IiwibG9jYWxTdG9yYWdlIiwiZ2V0SXRlbSIsImN1cnJlbnRQcmVmcyIsInBhcnNlIiwiY29tcHV0ZWQiLCJpc0hvbWUiLCJwYXJlbnRzIiwicCIsInBhcmVudEZvbGRlciIsInVuc2hpZnQiLCJwYXJlbnQiLCJmaWx0ZXJlZE1lZGlhSXRlbXMiLCJmaWx0ZXJlZCIsImluZGV4T2YiLCJzb3J0IiwiYSIsImIiLCJtaW1lIiwibG9jYWxlQ29tcGFyZSIsImxhc3RNb2RpZnkiLCJoaWRkZW5Db3VudCIsInRodW1iU2l6ZSIsImdldCIsInNldCIsIm5ld1ByZWZzIiwid2F0Y2giLCJzZXRJdGVtIiwic3RyaW5naWZ5IiwibmV3Rm9sZGVyIiwibW91bnRlZCIsIiRyZWZzIiwicm9vdEZvbGRlciIsInRvZ2dsZSIsIm1ldGhvZHMiLCJ1cGxvYWRVcmwiLCJ1cmxWYWx1ZSIsImVuY29kZVVSSUNvbXBvbmVudCIsIm1lZGlhVXJsIiwibG9nIiwiZm9yRWFjaCIsIm9wZW4iLCJzZWxlY3RBbGwiLCJ1blNlbGVjdEFsbCIsImludmVydFNlbGVjdGlvbiIsInRlbXAiLCJpc01lZGlhU2VsZWN0ZWQiLCJzcGxpY2UiLCJzb21lIiwiYXJyYXkiLCJtb2RlbCIsImNvbmZpcm1EaWFsb2ciLCJfb2JqZWN0U3ByZWFkIiwiY2FsbGJhY2siLCJyZXNwIiwiX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW4iLCIkZW1pdCIsInJlc3BvbnNlVGV4dCIsImVtcHR5IiwibW9kYWwiLCJib290c3RyYXAiLCJNb2RhbCIsImdldE9yQ3JlYXRlSW5zdGFuY2UiLCJzaG93IiwiZm9jdXMiLCJzZWxlY3RBbmREZWxldGVNZWRpYSIsImRlbGV0ZU1lZGlhIiwiZGVsZXRlTWVkaWFMaXN0IiwibWVkaWFMaXN0IiwicGF0aHMiLCJtZWRpYU5hbWVzIiwic2V0RGF0YSIsInNldERyYWdJbWFnZSIsImVmZmVjdEFsbG93ZWQiLCJoYW5kbGVTY3JvbGxXaGlsZURyYWciLCJjbGllbnRZIiwic2Nyb2xsQnkiLCJpbm5lckhlaWdodCIsImtleXByZXNzIiwid2hpY2giLCJjbGljayIsImhpZGUiLCJlcnJvck1lc3NhZ2UiLCJvbGROYW1lIiwiY3VycmVudEZvbGRlciIsImdldEVsZW1lbnRCeUlkIiwic3R5bGUiLCJkaXNwbGF5IiwiY2h1bmtlZEZpbGVVcGxvYWRJZCIsImNyeXB0byIsInJhbmRvbVVVSUQiLCJhbnRpRm9yZ2VyeVRva2VuIiwiRmlsZSIsImxhc3RNb2RpZmllZCIsImJpbmQiLCJkdCIsImNvbnRhaW5zIiwiZHJvcFpvbmVUaW1lb3V0IiwiY2xlYXJUaW1lb3V0IiwiYWRkQ2xhc3MiLCJob3ZlcmVkRHJvcFpvbmUiLCJjbG9zZXN0IiwicmVtb3ZlQ2xhc3MiLCJjb21wb25lbnQiLCJ0ZW1wbGF0ZSIsImRpciIsInByb3BzIiwic2VsZWN0ZWRJbk1lZGlhQXBwIiwibGV2ZWwiLCJjaGlsZHJlbiIsImlzSG92ZXJlZCIsInBhZGRpbmciLCJpc1NlbGVjdGVkIiwiaXNSb290IiwiaXNBbmNlc3Rvck9mU2VsZWN0ZWRGb2xkZXIiLCJsb2FkQ2hpbGRyZW4iLCJzZWxlY3QiLCJjIiwiZW10cHkiLCJoYW5kbGVEcmFnT3ZlciIsImhhbmRsZURyYWdMZWF2ZSIsIm1vdmVNZWRpYVRvRm9sZGVyIiwiZ2V0RGF0YSIsInNvdXJjZUZvbGRlciIsInRhcmdldEZvbGRlciIsImFsZXJ0IiwiVCIsImVkaXRCdXR0b24iLCJkZWxldGVCdXR0b24iLCJidWlsZE1lZGlhVXJsIiwiZHJhZ1N0YXJ0IiwiQm9vbGVhbiIsImltYWdlSGVhZGVyIiwibmFtZUhlYWRlciIsImxhc3RNb2RpZnlIZWFkZXIiLCJzaXplSGVhZGVyIiwidHlwZUhlYWRlciIsInZpZXdCdXR0b24iLCJwcmludERhdGVUaW1lIiwiZGF0ZW1pbGxpcyIsImQiLCJ0b0xvY2FsZVN0cmluZyIsInNvdXJjZUl0ZW1zIiwicGFnZVNpemUiLCJwYWdlU2l6ZU9wdGlvbnMiLCJjdXJyZW50IiwicGFnZXJGaXJzdEJ1dHRvbiIsInBhZ2VyUHJldmlvdXNCdXR0b24iLCJwYWdlck5leHRCdXR0b24iLCJwYWdlckxhc3RCdXR0b24iLCJwYWdlclBhZ2VTaXplTGFiZWwiLCJwYWdlclBhZ2VMYWJlbCIsInBhZ2VyVG90YWxMYWJlbCIsIm5leHQiLCJwcmV2aW91cyIsImdvRmlyc3QiLCJnb0xhc3QiLCJ0b3RhbFBhZ2VzIiwiZ29UbyIsInRhcmdldFBhZ2UiLCJwYWdlcyIsImNlaWwiLCJpc0xhc3RQYWdlIiwiaXNGaXJzdFBhZ2UiLCJjYW5Eb05leHQiLCJjYW5Eb1ByZXYiLCJjYW5Eb0ZpcnN0IiwiY2FuRG9MYXN0IiwiaXRlbXNJbkN1cnJlbnRQYWdlIiwic3RhcnQiLCJlbmQiLCJwYWdlTGlua3MiLCJsaW5rcyIsImJlZm9yZUN1cnJlbnQiLCJiZWZvcmVCZWZvcmVDdXJyZW50IiwiYWZ0ZXJDdXJyZW50IiwiYWZ0ZXJBZnRlckN1cnJlbnQiLCJjb2xuYW1lIiwic2VsZWN0ZWRjb2xuYW1lIiwiYXNjIiwiaXNBY3RpdmUiLCJpbml0aWFsaXplQXR0YWNoZWRNZWRpYUZpZWxkIiwiaWRPZlVwbG9hZEJ1dHRvbiIsInVwbG9hZEFjdGlvbiIsIm1lZGlhSXRlbVVybCIsImFsbG93TXVsdGlwbGUiLCJhbGxvd01lZGlhVGV4dCIsImFsbG93QW5jaG9ycyIsInRlbXBVcGxvYWRGb2xkZXIiLCJtYXhVcGxvYWRDaHVua1NpemUiLCJpbml0aWFsUGF0aHMiLCJtZWRpYUZpZWxkRWRpdG9yIiwiaWRwcmVmaXgiLCJtZWRpYUZpZWxkQXBwIiwibWVkaWFGaWVsZEFwcHMiLCJzZWxlY3RlZE1lZGlhIiwiaWRQcmVmaXgiLCJiYWNrdXBNZWRpYVRleHQiLCJiYWNrdXBBbmNob3IiLCJtZWRpYVRleHRtb2RhbCIsImFuY2hvcmluZ01vZGFsIiwibWVkaWFQYXRocyIsIngiLCJpc1JlbW92ZWQiLCJpc05ldyIsIm1lZGlhVGV4dCIsImFuY2hvciIsImF0dGFjaGVkRmlsZU5hbWUiLCJ2YWx1ZXMiLCJzaWduYWwiLCJ2dWVrZXkiLCJ5Iiwicm91bmQiLCJjYW5BZGRNZWRpYSIsIm5vblJlbW92ZWRNZWRpYUl0ZW1zIiwic2VsZWN0TWVkaWEiLCJzZWxlY3RvciIsImVkaXRvcklkIiwiY291bnQiLCJnZXRVbmlxdWVJZCIsIm5ld01lZGlhSXRlbXMiLCJlcnJvcm1zZyIsInIiLCJyYW5kb20iLCJ2IiwicmVtb3ZlU2VsZWN0ZWQiLCJldmVudCIsInJlbW92ZWQiLCJzaG93TWVkaWFUZXh0TW9kYWwiLCJtZWRpYVRleHRNb2RhbCIsImNhbmNlbE1lZGlhVGV4dE1vZGFsIiwic2hvd0FuY2hvck1vZGFsIiwiY2FuY2VsQW5jaG9yaW5nTW9kYWwiLCJyZXNldEFuY2hvciIsIm9uQW5jaG9yRHJvcCIsImltYWdlIiwiYW5jaG9ySW1hZ2UiLCJvZmZzZXRYIiwiY2xpZW50V2lkdGgiLCJvZmZzZXRZIiwiY2xpZW50SGVpZ2h0IiwiYW5jaG9yTGVmdCIsIm1vZGFsQm9keSIsIm9mZnNldCIsInBvc2l0aW9uIiwiYW5jaG9yVG9wIiwic2V0QW5jaG9yIiwiYWRkTWVkaWFGaWxlcyIsImRlZXAiLCJoYW5kbGVyIiwiaW5pdGlhbGl6ZU1lZGlhRmllbGQiLCJtb2RhbEJvZHlFbGVtZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsInNob3dNb2RhbCIsImFuY2hvckljb24iLCJxdWVyeVNlbGVjdG9yIiwiaXNJbnRlZ2VyIiwibWVkaWFOb3RGb3VuZCIsImRpc2NhcmRXYXJuaW5nIiwibm9JbWFnZXMiLCIkcGFyZW50IiwidXBsb2FkSW5wdXRJZCIsIl9zZWxmJHVwbG9hZElucHV0SWQiLCJ1cGxvYWRJbnB1dCIsInBlcmNlbnRhZ2UiLCJoYW5kbGVGYWlsdXJlIiwiZGlzbWlzc1dhcm5pbmciLCJleHBhbmRlZCIsInBlbmRpbmdDb3VudCIsImVycm9yQ291bnQiLCJ1cGxvYWRzIiwiY2xlYXJFcnJvcnMiLCJmaWxlQ291bnQiLCJuZXdGaWxl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TUFDSixDQUFDLENBQUM7SUFDTixDQUFDLENBQUM7SUFFRmlRLEdBQUcsQ0FBQzBCLEdBQUcsQ0FBQyxlQUFlLEVBQUUsVUFBVXNTLFVBQVUsRUFBRTtNQUMzQ3hTLElBQUksQ0FBQ3lTLFdBQVcsQ0FBQyxDQUFDO0lBQ3RCLENBQUMsQ0FBQztFQUNOLENBQUM7RUFDRG5QLE9BQU8sRUFBRTtJQUNMbVAsV0FBVyxFQUFFLFNBQUFBLFlBQUEsRUFBWTtNQUNyQixJQUFJLENBQUNSLFVBQVUsR0FBRyxJQUFJLENBQUM1akIsS0FBSyxDQUFDc1MsTUFBTSxDQUFDLFVBQVV2SCxJQUFJLEVBQUU7UUFDaEQsT0FBT0EsSUFBSSxDQUFDa04sWUFBWSxJQUFJLEVBQUU7TUFDbEMsQ0FBQyxDQUFDLENBQUN0VSxNQUFNO01BQ1QsSUFBSSxDQUFDZ2dCLFlBQVksR0FBRyxJQUFJLENBQUMzakIsS0FBSyxDQUFDMkQsTUFBTSxHQUFHLElBQUksQ0FBQ2lnQixVQUFVO01BQ3ZELElBQUksSUFBSSxDQUFDNWpCLEtBQUssQ0FBQzJELE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDdkIsSUFBSSxDQUFDK2YsUUFBUSxHQUFHLEtBQUs7TUFDekI7SUFDSixDQUFDO0lBQ0RJLFdBQVcsRUFBRSxTQUFBQSxZQUFBLEVBQVk7TUFDckIsSUFBSSxDQUFDOWpCLEtBQUssR0FBRyxJQUFJLENBQUNBLEtBQUssQ0FBQ3NTLE1BQU0sQ0FBQyxVQUFVdkgsSUFBSSxFQUFFO1FBQzNDLE9BQU9BLElBQUksQ0FBQ2tOLFlBQVksSUFBSSxFQUFFO01BQ2xDLENBQUMsQ0FBQztJQUNOO0VBQ0osQ0FBQztFQUNEeEQsS0FBSyxFQUFFO0lBQ0h6VSxLQUFLLEVBQUUsU0FBQUEsTUFBQSxFQUFZO01BQ2YsSUFBSSxDQUFDb2tCLFdBQVcsQ0FBQyxDQUFDO0lBQ3RCO0VBQ0o7QUFDSixDQUFDLENBQUMiLCJmaWxlIjoibWVkaWEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogalF1ZXJ5IEZpbGUgVXBsb2FkIFBsdWdpblxuICogaHR0cHM6Ly9naXRodWIuY29tL2JsdWVpbXAvalF1ZXJ5LUZpbGUtVXBsb2FkXG4gKlxuICogQ29weXJpZ2h0IDIwMTAsIFNlYmFzdGlhbiBUc2NoYW5cbiAqIGh0dHBzOi8vYmx1ZWltcC5uZXRcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2U6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuICovXG5cbi8qIGdsb2JhbCBkZWZpbmUsIHJlcXVpcmUgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5ldy1jYXAgKi9cblxuKGZ1bmN0aW9uIChmYWN0b3J5KSB7XG4gICd1c2Ugc3RyaWN0JztcbiAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgIC8vIFJlZ2lzdGVyIGFzIGFuIGFub255bW91cyBBTUQgbW9kdWxlOlxuICAgIGRlZmluZShbJ2pxdWVyeScsICdqcXVlcnktdWkvdWkvd2lkZ2V0J10sIGZhY3RvcnkpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgIC8vIE5vZGUvQ29tbW9uSlM6XG4gICAgZmFjdG9yeShyZXF1aXJlKCdqcXVlcnknKSwgcmVxdWlyZSgnLi92ZW5kb3IvanF1ZXJ5LnVpLndpZGdldCcpKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBCcm93c2VyIGdsb2JhbHM6XG4gICAgZmFjdG9yeSh3aW5kb3cualF1ZXJ5KTtcbiAgfVxufSkoZnVuY3Rpb24gKCQpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIC8vIERldGVjdCBmaWxlIGlucHV0IHN1cHBvcnQsIGJhc2VkIG9uXG4gIC8vIGh0dHBzOi8vdmlsamFtaXMuY29tLzIwMTIvZmlsZS11cGxvYWQtc3VwcG9ydC1vbi1tb2JpbGUvXG4gICQuc3VwcG9ydC5maWxlSW5wdXQgPSAhKFxuICAgIG5ldyBSZWdFeHAoXG4gICAgICAvLyBIYW5kbGUgZGV2aWNlcyB3aGljaCBnaXZlIGZhbHNlIHBvc2l0aXZlcyBmb3IgdGhlIGZlYXR1cmUgZGV0ZWN0aW9uOlxuICAgICAgJyhBbmRyb2lkICgxXFxcXC5bMDE1Nl18MlxcXFwuWzAxXSkpJyArXG4gICAgICAgICd8KFdpbmRvd3MgUGhvbmUgKE9TIDd8OFxcXFwuMCkpfChYQkxXUCl8KFp1bmVXUCl8KFdQRGVza3RvcCknICtcbiAgICAgICAgJ3wodyhlYik/T1NCcm93c2VyKXwod2ViT1MpJyArXG4gICAgICAgICd8KEtpbmRsZS8oMVxcXFwuMHwyXFxcXC5bMDVdfDNcXFxcLjApKSdcbiAgICApLnRlc3Qod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQpIHx8XG4gICAgLy8gRmVhdHVyZSBkZXRlY3Rpb24gZm9yIGFsbCBvdGhlciBkZXZpY2VzOlxuICAgICQoJzxpbnB1dCB0eXBlPVwiZmlsZVwiLz4nKS5wcm9wKCdkaXNhYmxlZCcpXG4gICk7XG5cbiAgLy8gVGhlIEZpbGVSZWFkZXIgQVBJIGlzIG5vdCBhY3R1YWxseSB1c2VkLCBidXQgd29ya3MgYXMgZmVhdHVyZSBkZXRlY3Rpb24sXG4gIC8vIGFzIHNvbWUgU2FmYXJpIHZlcnNpb25zICg1Pykgc3VwcG9ydCBYSFIgZmlsZSB1cGxvYWRzIHZpYSB0aGUgRm9ybURhdGEgQVBJLFxuICAvLyBidXQgbm90IG5vbi1tdWx0aXBhcnQgWEhSIGZpbGUgdXBsb2Fkcy5cbiAgLy8gd2luZG93LlhNTEh0dHBSZXF1ZXN0VXBsb2FkIGlzIG5vdCBhdmFpbGFibGUgb24gSUUxMCwgc28gd2UgY2hlY2sgZm9yXG4gIC8vIHdpbmRvdy5Qcm9ncmVzc0V2ZW50IGluc3RlYWQgdG8gZGV0ZWN0IFhIUjIgZmlsZSB1cGxvYWQgY2FwYWJpbGl0eTpcbiAgJC5zdXBwb3J0LnhockZpbGVVcGxvYWQgPSAhISh3aW5kb3cuUHJvZ3Jlc3NFdmVudCAmJiB3aW5kb3cuRmlsZVJlYWRlcik7XG4gICQuc3VwcG9ydC54aHJGb3JtRGF0YUZpbGVVcGxvYWQgPSAhIXdpbmRvdy5Gb3JtRGF0YTtcblxuICAvLyBEZXRlY3Qgc3VwcG9ydCBmb3IgQmxvYiBzbGljaW5nIChyZXF1aXJlZCBmb3IgY2h1bmtlZCB1cGxvYWRzKTpcbiAgJC5zdXBwb3J0LmJsb2JTbGljZSA9XG4gICAgd2luZG93LkJsb2IgJiZcbiAgICAoQmxvYi5wcm90b3R5cGUuc2xpY2UgfHxcbiAgICAgIEJsb2IucHJvdG90eXBlLndlYmtpdFNsaWNlIHx8XG4gICAgICBCbG9iLnByb3RvdHlwZS5tb3pTbGljZSk7XG5cbiAgLyoqXG4gICAqIEhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgZHJhZyBoYW5kbGVycyBmb3IgZHJhZ292ZXIvZHJhZ2VudGVyL2RyYWdsZWF2ZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBFdmVudCB0eXBlXG4gICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gRHJhZyBoYW5kbGVyXG4gICAqL1xuICBmdW5jdGlvbiBnZXREcmFnSGFuZGxlcih0eXBlKSB7XG4gICAgdmFyIGlzRHJhZ092ZXIgPSB0eXBlID09PSAnZHJhZ292ZXInO1xuICAgIHJldHVybiBmdW5jdGlvbiAoZSkge1xuICAgICAgZS5kYXRhVHJhbnNmZXIgPSBlLm9yaWdpbmFsRXZlbnQgJiYgZS5vcmlnaW5hbEV2ZW50LmRhdGFUcmFuc2ZlcjtcbiAgICAgIHZhciBkYXRhVHJhbnNmZXIgPSBlLmRhdGFUcmFuc2ZlcjtcbiAgICAgIGlmIChcbiAgICAgICAgZGF0YVRyYW5zZmVyICYmXG4gICAgICAgICQuaW5BcnJheSgnRmlsZXMnLCBkYXRhVHJhbnNmZXIudHlwZXMpICE9PSAtMSAmJlxuICAgICAgICB0aGlzLl90cmlnZ2VyKHR5cGUsICQuRXZlbnQodHlwZSwgeyBkZWxlZ2F0ZWRFdmVudDogZSB9KSkgIT09IGZhbHNlXG4gICAgICApIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAoaXNEcmFnT3Zlcikge1xuICAgICAgICAgIGRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gJ2NvcHknO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8vIFRoZSBmaWxldXBsb2FkIHdpZGdldCBsaXN0ZW5zIGZvciBjaGFuZ2UgZXZlbnRzIG9uIGZpbGUgaW5wdXQgZmllbGRzIGRlZmluZWRcbiAgLy8gdmlhIGZpbGVJbnB1dCBzZXR0aW5nIGFuZCBwYXN0ZSBvciBkcm9wIGV2ZW50cyBvZiB0aGUgZ2l2ZW4gZHJvcFpvbmUuXG4gIC8vIEluIGFkZGl0aW9uIHRvIHRoZSBkZWZhdWx0IGpRdWVyeSBXaWRnZXQgbWV0aG9kcywgdGhlIGZpbGV1cGxvYWQgd2lkZ2V0XG4gIC8vIGV4cG9zZXMgdGhlIFwiYWRkXCIgYW5kIFwic2VuZFwiIG1ldGhvZHMsIHRvIGFkZCBvciBkaXJlY3RseSBzZW5kIGZpbGVzIHVzaW5nXG4gIC8vIHRoZSBmaWxldXBsb2FkIEFQSS5cbiAgLy8gQnkgZGVmYXVsdCwgZmlsZXMgYWRkZWQgdmlhIGZpbGUgaW5wdXQgc2VsZWN0aW9uLCBwYXN0ZSwgZHJhZyAmIGRyb3Agb3JcbiAgLy8gXCJhZGRcIiBtZXRob2QgYXJlIHVwbG9hZGVkIGltbWVkaWF0ZWx5LCBidXQgaXQgaXMgcG9zc2libGUgdG8gb3ZlcnJpZGVcbiAgLy8gdGhlIFwiYWRkXCIgY2FsbGJhY2sgb3B0aW9uIHRvIHF1ZXVlIGZpbGUgdXBsb2Fkcy5cbiAgJC53aWRnZXQoJ2JsdWVpbXAuZmlsZXVwbG9hZCcsIHtcbiAgICBvcHRpb25zOiB7XG4gICAgICAvLyBUaGUgZHJvcCB0YXJnZXQgZWxlbWVudChzKSwgYnkgdGhlIGRlZmF1bHQgdGhlIGNvbXBsZXRlIGRvY3VtZW50LlxuICAgICAgLy8gU2V0IHRvIG51bGwgdG8gZGlzYWJsZSBkcmFnICYgZHJvcCBzdXBwb3J0OlxuICAgICAgZHJvcFpvbmU6ICQoZG9jdW1lbnQpLFxuICAgICAgLy8gVGhlIHBhc3RlIHRhcmdldCBlbGVtZW50KHMpLCBieSB0aGUgZGVmYXVsdCB1bmRlZmluZWQuXG4gICAgICAvLyBTZXQgdG8gYSBET00gbm9kZSBvciBqUXVlcnkgb2JqZWN0IHRvIGVuYWJsZSBmaWxlIHBhc3Rpbmc6XG4gICAgICBwYXN0ZVpvbmU6IHVuZGVmaW5lZCxcbiAgICAgIC8vIFRoZSBmaWxlIGlucHV0IGZpZWxkKHMpLCB0aGF0IGFyZSBsaXN0ZW5lZCB0byBmb3IgY2hhbmdlIGV2ZW50cy5cbiAgICAgIC8vIElmIHVuZGVmaW5lZCwgaXQgaXMgc2V0IHRvIHRoZSBmaWxlIGlucHV0IGZpZWxkcyBpbnNpZGVcbiAgICAgIC8vIG9mIHRoZSB3aWRnZXQgZWxlbWVudCBvbiBwbHVnaW4gaW5pdGlhbGl6YXRpb24uXG4gICAgICAvLyBTZXQgdG8gbnVsbCB0byBkaXNhYmxlIHRoZSBjaGFuZ2UgbGlzdGVuZXIuXG4gICAgICBmaWxlSW5wdXQ6IHVuZGVmaW5lZCxcbiAgICAgIC8vIEJ5IGRlZmF1bHQsIHRoZSBmaWxlIGlucHV0IGZpZWxkIGlzIHJlcGxhY2VkIHdpdGggYSBjbG9uZSBhZnRlclxuICAgICAgLy8gZWFjaCBpbnB1dCBmaWVsZCBjaGFuZ2UgZXZlbnQuIFRoaXMgaXMgcmVxdWlyZWQgZm9yIGlmcmFtZSB0cmFuc3BvcnRcbiAgICAgIC8vIHF1ZXVlcyBhbmQgYWxsb3dzIGNoYW5nZSBldmVudHMgdG8gYmUgZmlyZWQgZm9yIHRoZSBzYW1lIGZpbGVcbiAgICAgIC8vIHNlbGVjdGlvbiwgYnV0IGNhbiBiZSBkaXNhYmxlZCBieSBzZXR0aW5nIHRoZSBmb2xsb3dpbmcgb3B0aW9uIHRvIGZhbHNlOlxuICAgICAgcmVwbGFjZUZpbGVJbnB1dDogdHJ1ZSxcbiAgICAgIC8vIFRoZSBwYXJhbWV0ZXIgbmFtZSBmb3IgdGhlIGZpbGUgZm9ybSBkYXRhICh0aGUgcmVxdWVzdCBhcmd1bWVudCBuYW1lKS5cbiAgICAgIC8vIElmIHVuZGVmaW5lZCBvciBlbXB0eSwgdGhlIG5hbWUgcHJvcGVydHkgb2YgdGhlIGZpbGUgaW5wdXQgZmllbGQgaXNcbiAgICAgIC8vIHVzZWQsIG9yIFwiZmlsZXNbXVwiIGlmIHRoZSBmaWxlIGlucHV0IG5hbWUgcHJvcGVydHkgaXMgYWxzbyBlbXB0eSxcbiAgICAgIC8vIGNhbiBiZSBhIHN0cmluZyBvciBhbiBhcnJheSBvZiBzdHJpbmdzOlxuICAgICAgcGFyYW1OYW1lOiB1bmRlZmluZWQsXG4gICAgICAvLyBCeSBkZWZhdWx0LCBlYWNoIGZpbGUgb2YgYSBzZWxlY3Rpb24gaXMgdXBsb2FkZWQgdXNpbmcgYW4gaW5kaXZpZHVhbFxuICAgICAgLy8gcmVxdWVzdCBmb3IgWEhSIHR5cGUgdXBsb2Fkcy4gU2V0IHRvIGZhbHNlIHRvIHVwbG9hZCBmaWxlXG4gICAgICAvLyBzZWxlY3Rpb25zIGluIG9uZSByZXF1ZXN0IGVhY2g6XG4gICAgICBzaW5nbGVGaWxlVXBsb2FkczogdHJ1ZSxcbiAgICAgIC8vIFRvIGxpbWl0IHRoZSBudW1iZXIgb2YgZmlsZXMgdXBsb2FkZWQgd2l0aCBvbmUgWEhSIHJlcXVlc3QsXG4gICAgICAvLyBzZXQgdGhlIGZvbGxvd2luZyBvcHRpb24gdG8gYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gMDpcbiAgICAgIGxpbWl0TXVsdGlGaWxlVXBsb2FkczogdW5kZWZpbmVkLFxuICAgICAgLy8gVGhlIGZvbGxvd2luZyBvcHRpb24gbGltaXRzIHRoZSBudW1iZXIgb2YgZmlsZXMgdXBsb2FkZWQgd2l0aCBvbmVcbiAgICAgIC8vIFhIUiByZXF1ZXN0IHRvIGtlZXAgdGhlIHJlcXVlc3Qgc2l6ZSB1bmRlciBvciBlcXVhbCB0byB0aGUgZGVmaW5lZFxuICAgICAgLy8gbGltaXQgaW4gYnl0ZXM6XG4gICAgICBsaW1pdE11bHRpRmlsZVVwbG9hZFNpemU6IHVuZGVmaW5lZCxcbiAgICAgIC8vIE11bHRpcGFydCBmaWxlIHVwbG9hZHMgYWRkIGEgbnVtYmVyIG9mIGJ5dGVzIHRvIGVhY2ggdXBsb2FkZWQgZmlsZSxcbiAgICAgIC8vIHRoZXJlZm9yZSB0aGUgZm9sbG93aW5nIG9wdGlvbiBhZGRzIGFuIG92ZXJoZWFkIGZvciBlYWNoIGZpbGUgdXNlZFxuICAgICAgLy8gaW4gdGhlIGxpbWl0TXVsdGlGaWxlVXBsb2FkU2l6ZSBjb25maWd1cmF0aW9uOlxuICAgICAgbGltaXRNdWx0aUZpbGVVcGxvYWRTaXplT3ZlcmhlYWQ6IDUxMixcbiAgICAgIC8vIFNldCB0aGUgZm9sbG93aW5nIG9wdGlvbiB0byB0cnVlIHRvIGlzc3VlIGFsbCBmaWxlIHVwbG9hZCByZXF1ZXN0c1xuICAgICAgLy8gaW4gYSBzZXF1ZW50aWFsIG9yZGVyOlxuICAgICAgc2VxdWVudGlhbFVwbG9hZHM6IGZhbHNlLFxuICAgICAgLy8gVG8gbGltaXQgdGhlIG51bWJlciBvZiBjb25jdXJyZW50IHVwbG9hZHMsXG4gICAgICAvLyBzZXQgdGhlIGZvbGxvd2luZyBvcHRpb24gdG8gYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gMDpcbiAgICAgIGxpbWl0Q29uY3VycmVudFVwbG9hZHM6IHVuZGVmaW5lZCxcbiAgICAgIC8vIFNldCB0aGUgZm9sbG93aW5nIG9wdGlvbiB0byB0cnVlIHRvIGZvcmNlIGlmcmFtZSB0cmFuc3BvcnQgdXBsb2FkczpcbiAgICAgIGZvcmNlSWZyYW1lVHJhbnNwb3J0OiBmYWxzZSxcbiAgICAgIC8vIFNldCB0aGUgZm9sbG93aW5nIG9wdGlvbiB0byB0aGUgbG9jYXRpb24gb2YgYSByZWRpcmVjdCB1cmwgb24gdGhlXG4gICAgICAvLyBvcmlnaW4gc2VydmVyLCBmb3IgY3Jvc3MtZG9tYWluIGlmcmFtZSB0cmFuc3BvcnQgdXBsb2FkczpcbiAgICAgIHJlZGlyZWN0OiB1bmRlZmluZWQsXG4gICAgICAvLyBUaGUgcGFyYW1ldGVyIG5hbWUgZm9yIHRoZSByZWRpcmVjdCB1cmwsIHNlbnQgYXMgcGFydCBvZiB0aGUgZm9ybVxuICAgICAgLy8gZGF0YSBhbmQgc2V0IHRvICdyZWRpcmVjdCcgaWYgdGhpcyBvcHRpb24gaXMgZW1wdHk6XG4gICAgICByZWRpcmVjdFBhcmFtTmFtZTogdW5kZWZpbmVkLFxuICAgICAgLy8gU2V0IHRoZSBmb2xsb3dpbmcgb3B0aW9uIHRvIHRoZSBsb2NhdGlvbiBvZiBhIHBvc3RNZXNzYWdlIHdpbmRvdyxcbiAgICAgIC8vIHRvIGVuYWJsZSBwb3N0TWVzc2FnZSB0cmFuc3BvcnQgdXBsb2FkczpcbiAgICAgIHBvc3RNZXNzYWdlOiB1bmRlZmluZWQsXG4gICAgICAvLyBCeSBkZWZhdWx0LCBYSFIgZmlsZSB1cGxvYWRzIGFyZSBzZW50IGFzIG11bHRpcGFydC9mb3JtLWRhdGEuXG4gICAgICAvLyBUaGUgaWZyYW1lIHRyYW5zcG9ydCBpcyBhbHdheXMgdXNpbmcgbXVsdGlwYXJ0L2Zvcm0tZGF0YS5cbiAgICAgIC8vIFNldCB0byBmYWxzZSB0byBlbmFibGUgbm9uLW11bHRpcGFydCBYSFIgdXBsb2FkczpcbiAgICAgIG11bHRpcGFydDogdHJ1ZSxcbiAgICAgIC8vIFRvIHVwbG9hZCBsYXJnZSBmaWxlcyBpbiBzbWFsbGVyIGNodW5rcywgc2V0IHRoZSBmb2xsb3dpbmcgb3B0aW9uXG4gICAgICAvLyB0byBhIHByZWZlcnJlZCBtYXhpbXVtIGNodW5rIHNpemUuIElmIHNldCB0byAwLCBudWxsIG9yIHVuZGVmaW5lZCxcbiAgICAgIC8vIG9yIHRoZSBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgdGhlIHJlcXVpcmVkIEJsb2IgQVBJLCBmaWxlcyB3aWxsXG4gICAgICAvLyBiZSB1cGxvYWRlZCBhcyBhIHdob2xlLlxuICAgICAgbWF4Q2h1bmtTaXplOiB1bmRlZmluZWQsXG4gICAgICAvLyBXaGVuIGEgbm9uLW11bHRpcGFydCB1cGxvYWQgb3IgYSBjaHVua2VkIG11bHRpcGFydCB1cGxvYWQgaGFzIGJlZW5cbiAgICAgIC8vIGFib3J0ZWQsIHRoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHJlc3VtZSB0aGUgdXBsb2FkIGJ5IHNldHRpbmdcbiAgICAgIC8vIGl0IHRvIHRoZSBzaXplIG9mIHRoZSBhbHJlYWR5IHVwbG9hZGVkIGJ5dGVzLiBUaGlzIG9wdGlvbiBpcyBtb3N0XG4gICAgICAvLyB1c2VmdWwgd2hlbiBtb2RpZnlpbmcgdGhlIG9wdGlvbnMgb2JqZWN0IGluc2lkZSBvZiB0aGUgXCJhZGRcIiBvclxuICAgICAgLy8gXCJzZW5kXCIgY2FsbGJhY2tzLCBhcyB0aGUgb3B0aW9ucyBhcmUgY2xvbmVkIGZvciBlYWNoIGZpbGUgdXBsb2FkLlxuICAgICAgdXBsb2FkZWRCeXRlczogdW5kZWZpbmVkLFxuICAgICAgLy8gQnkgZGVmYXVsdCwgZmFpbGVkIChhYm9ydCBvciBlcnJvcikgZmlsZSB1cGxvYWRzIGFyZSByZW1vdmVkIGZyb20gdGhlXG4gICAgICAvLyBnbG9iYWwgcHJvZ3Jlc3MgY2FsY3VsYXRpb24uIFNldCB0aGUgZm9sbG93aW5nIG9wdGlvbiB0byBmYWxzZSB0b1xuICAgICAgLy8gcHJldmVudCByZWNhbGN1bGF0aW5nIHRoZSBnbG9iYWwgcHJvZ3Jlc3MgZGF0YTpcbiAgICAgIHJlY2FsY3VsYXRlUHJvZ3Jlc3M6IHRydWUsXG4gICAgICAvLyBJbnRlcnZhbCBpbiBtaWxsaXNlY29uZHMgdG8gY2FsY3VsYXRlIGFuZCB0cmlnZ2VyIHByb2dyZXNzIGV2ZW50czpcbiAgICAgIHByb2dyZXNzSW50ZXJ2YWw6IDEwMCxcbiAgICAgIC8vIEludGVydmFsIGluIG1pbGxpc2Vjb25kcyB0byBjYWxjdWxhdGUgcHJvZ3Jlc3MgYml0cmF0ZTpcbiAgICAgIGJpdHJhdGVJbnRlcnZhbDogNTAwLFxuICAgICAgLy8gQnkgZGVmYXVsdCwgdXBsb2FkcyBhcmUgc3RhcnRlZCBhdXRvbWF0aWNhbGx5IHdoZW4gYWRkaW5nIGZpbGVzOlxuICAgICAgYXV0b1VwbG9hZDogdHJ1ZSxcbiAgICAgIC8vIEJ5IGRlZmF1bHQsIGR1cGxpY2F0ZSBmaWxlIG5hbWVzIGFyZSBleHBlY3RlZCB0byBiZSBoYW5kbGVkIG9uXG4gICAgICAvLyB0aGUgc2VydmVyLXNpZGUuIElmIHRoaXMgaXMgbm90IHBvc3NpYmxlIChlLmcuIHdoZW4gdXBsb2FkaW5nXG4gICAgICAvLyBmaWxlcyBkaXJlY3RseSB0byBBbWF6b24gUzMpLCB0aGUgZm9sbG93aW5nIG9wdGlvbiBjYW4gYmUgc2V0IHRvXG4gICAgICAvLyBhbiBlbXB0eSBvYmplY3Qgb3IgYW4gb2JqZWN0IG1hcHBpbmcgZXhpc3RpbmcgZmlsZW5hbWVzLCBlLmcuOlxuICAgICAgLy8geyBcImltYWdlLmpwZ1wiOiB0cnVlLCBcImltYWdlICgxKS5qcGdcIjogdHJ1ZSB9XG4gICAgICAvLyBJZiBpdCBpcyBzZXQsIGFsbCBmaWxlcyB3aWxsIGJlIHVwbG9hZGVkIHdpdGggdW5pcXVlIGZpbGVuYW1lcyxcbiAgICAgIC8vIGFkZGluZyBpbmNyZWFzaW5nIG51bWJlciBzdWZmaXhlcyBpZiBuZWNlc3NhcnksIGUuZy46XG4gICAgICAvLyBcImltYWdlICgyKS5qcGdcIlxuICAgICAgdW5pcXVlRmlsZW5hbWVzOiB1bmRlZmluZWQsXG5cbiAgICAgIC8vIEVycm9yIGFuZCBpbmZvIG1lc3NhZ2VzOlxuICAgICAgbWVzc2FnZXM6IHtcbiAgICAgICAgdXBsb2FkZWRCeXRlczogJ1VwbG9hZGVkIGJ5dGVzIGV4Y2VlZCBmaWxlIHNpemUnXG4gICAgICB9LFxuXG4gICAgICAvLyBUcmFuc2xhdGlvbiBmdW5jdGlvbiwgZ2V0cyB0aGUgbWVzc2FnZSBrZXkgdG8gYmUgdHJhbnNsYXRlZFxuICAgICAgLy8gYW5kIGFuIG9iamVjdCB3aXRoIGNvbnRleHQgc3BlY2lmaWMgZGF0YSBhcyBhcmd1bWVudHM6XG4gICAgICBpMThuOiBmdW5jdGlvbiAobWVzc2FnZSwgY29udGV4dCkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgbWVzc2FnZSA9IHRoaXMubWVzc2FnZXNbbWVzc2FnZV0gfHwgbWVzc2FnZS50b1N0cmluZygpO1xuICAgICAgICBpZiAoY29udGV4dCkge1xuICAgICAgICAgICQuZWFjaChjb250ZXh0LCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlKCd7JyArIGtleSArICd9JywgdmFsdWUpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgfSxcblxuICAgICAgLy8gQWRkaXRpb25hbCBmb3JtIGRhdGEgdG8gYmUgc2VudCBhbG9uZyB3aXRoIHRoZSBmaWxlIHVwbG9hZHMgY2FuIGJlIHNldFxuICAgICAgLy8gdXNpbmcgdGhpcyBvcHRpb24sIHdoaWNoIGFjY2VwdHMgYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIG5hbWUgYW5kXG4gICAgICAvLyB2YWx1ZSBwcm9wZXJ0aWVzLCBhIGZ1bmN0aW9uIHJldHVybmluZyBzdWNoIGFuIGFycmF5LCBhIEZvcm1EYXRhXG4gICAgICAvLyBvYmplY3QgKGZvciBYSFIgZmlsZSB1cGxvYWRzKSwgb3IgYSBzaW1wbGUgb2JqZWN0LlxuICAgICAgLy8gVGhlIGZvcm0gb2YgdGhlIGZpcnN0IGZpbGVJbnB1dCBpcyBnaXZlbiBhcyBwYXJhbWV0ZXIgdG8gdGhlIGZ1bmN0aW9uOlxuICAgICAgZm9ybURhdGE6IGZ1bmN0aW9uIChmb3JtKSB7XG4gICAgICAgIHJldHVybiBmb3JtLnNlcmlhbGl6ZUFycmF5KCk7XG4gICAgICB9LFxuXG4gICAgICAvLyBUaGUgYWRkIGNhbGxiYWNrIGlzIGludm9rZWQgYXMgc29vbiBhcyBmaWxlcyBhcmUgYWRkZWQgdG8gdGhlIGZpbGV1cGxvYWRcbiAgICAgIC8vIHdpZGdldCAodmlhIGZpbGUgaW5wdXQgc2VsZWN0aW9uLCBkcmFnICYgZHJvcCwgcGFzdGUgb3IgYWRkIEFQSSBjYWxsKS5cbiAgICAgIC8vIElmIHRoZSBzaW5nbGVGaWxlVXBsb2FkcyBvcHRpb24gaXMgZW5hYmxlZCwgdGhpcyBjYWxsYmFjayB3aWxsIGJlXG4gICAgICAvLyBjYWxsZWQgb25jZSBmb3IgZWFjaCBmaWxlIGluIHRoZSBzZWxlY3Rpb24gZm9yIFhIUiBmaWxlIHVwbG9hZHMsIGVsc2VcbiAgICAgIC8vIG9uY2UgZm9yIGVhY2ggZmlsZSBzZWxlY3Rpb24uXG4gICAgICAvL1xuICAgICAgLy8gVGhlIHVwbG9hZCBzdGFydHMgd2hlbiB0aGUgc3VibWl0IG1ldGhvZCBpcyBpbnZva2VkIG9uIHRoZSBkYXRhIHBhcmFtZXRlci5cbiAgICAgIC8vIFRoZSBkYXRhIG9iamVjdCBjb250YWlucyBhIGZpbGVzIHByb3BlcnR5IGhvbGRpbmcgdGhlIGFkZGVkIGZpbGVzXG4gICAgICAvLyBhbmQgYWxsb3dzIHlvdSB0byBvdmVycmlkZSBwbHVnaW4gb3B0aW9ucyBhcyB3ZWxsIGFzIGRlZmluZSBhamF4IHNldHRpbmdzLlxuICAgICAgLy9cbiAgICAgIC8vIExpc3RlbmVycyBmb3IgdGhpcyBjYWxsYmFjayBjYW4gYWxzbyBiZSBib3VuZCB0aGUgZm9sbG93aW5nIHdheTpcbiAgICAgIC8vIC5vbignZmlsZXVwbG9hZGFkZCcsIGZ1bmMpO1xuICAgICAgLy9cbiAgICAgIC8vIGRhdGEuc3VibWl0KCkgcmV0dXJucyBhIFByb21pc2Ugb2JqZWN0IGFuZCBhbGxvd3MgdG8gYXR0YWNoIGFkZGl0aW9uYWxcbiAgICAgIC8vIGhhbmRsZXJzIHVzaW5nIGpRdWVyeSdzIERlZmVycmVkIGNhbGxiYWNrczpcbiAgICAgIC8vIGRhdGEuc3VibWl0KCkuZG9uZShmdW5jKS5mYWlsKGZ1bmMpLmFsd2F5cyhmdW5jKTtcbiAgICAgIGFkZDogZnVuY3Rpb24gKGUsIGRhdGEpIHtcbiAgICAgICAgaWYgKGUuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGRhdGEuYXV0b1VwbG9hZCB8fFxuICAgICAgICAgIChkYXRhLmF1dG9VcGxvYWQgIT09IGZhbHNlICYmXG4gICAgICAgICAgICAkKHRoaXMpLmZpbGV1cGxvYWQoJ29wdGlvbicsICdhdXRvVXBsb2FkJykpXG4gICAgICAgICkge1xuICAgICAgICAgIGRhdGEucHJvY2VzcygpLmRvbmUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZGF0YS5zdWJtaXQoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgLy8gT3RoZXIgY2FsbGJhY2tzOlxuXG4gICAgICAvLyBDYWxsYmFjayBmb3IgdGhlIHN1Ym1pdCBldmVudCBvZiBlYWNoIGZpbGUgdXBsb2FkOlxuICAgICAgLy8gc3VibWl0OiBmdW5jdGlvbiAoZSwgZGF0YSkge30sIC8vIC5vbignZmlsZXVwbG9hZHN1Ym1pdCcsIGZ1bmMpO1xuXG4gICAgICAvLyBDYWxsYmFjayBmb3IgdGhlIHN0YXJ0IG9mIGVhY2ggZmlsZSB1cGxvYWQgcmVxdWVzdDpcbiAgICAgIC8vIHNlbmQ6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2Fkc2VuZCcsIGZ1bmMpO1xuXG4gICAgICAvLyBDYWxsYmFjayBmb3Igc3VjY2Vzc2Z1bCB1cGxvYWRzOlxuICAgICAgLy8gZG9uZTogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRkb25lJywgZnVuYyk7XG5cbiAgICAgIC8vIENhbGxiYWNrIGZvciBmYWlsZWQgKGFib3J0IG9yIGVycm9yKSB1cGxvYWRzOlxuICAgICAgLy8gZmFpbDogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRmYWlsJywgZnVuYyk7XG5cbiAgICAgIC8vIENhbGxiYWNrIGZvciBjb21wbGV0ZWQgKHN1Y2Nlc3MsIGFib3J0IG9yIGVycm9yKSByZXF1ZXN0czpcbiAgICAgIC8vIGFsd2F5czogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRhbHdheXMnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIHVwbG9hZCBwcm9ncmVzcyBldmVudHM6XG4gICAgICAvLyBwcm9ncmVzczogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRwcm9ncmVzcycsIGZ1bmMpO1xuXG4gICAgICAvLyBDYWxsYmFjayBmb3IgZ2xvYmFsIHVwbG9hZCBwcm9ncmVzcyBldmVudHM6XG4gICAgICAvLyBwcm9ncmVzc2FsbDogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRwcm9ncmVzc2FsbCcsIGZ1bmMpO1xuXG4gICAgICAvLyBDYWxsYmFjayBmb3IgdXBsb2FkcyBzdGFydCwgZXF1aXZhbGVudCB0byB0aGUgZ2xvYmFsIGFqYXhTdGFydCBldmVudDpcbiAgICAgIC8vIHN0YXJ0OiBmdW5jdGlvbiAoZSkge30sIC8vIC5vbignZmlsZXVwbG9hZHN0YXJ0JywgZnVuYyk7XG5cbiAgICAgIC8vIENhbGxiYWNrIGZvciB1cGxvYWRzIHN0b3AsIGVxdWl2YWxlbnQgdG8gdGhlIGdsb2JhbCBhamF4U3RvcCBldmVudDpcbiAgICAgIC8vIHN0b3A6IGZ1bmN0aW9uIChlKSB7fSwgLy8gLm9uKCdmaWxldXBsb2Fkc3RvcCcsIGZ1bmMpO1xuXG4gICAgICAvLyBDYWxsYmFjayBmb3IgY2hhbmdlIGV2ZW50cyBvZiB0aGUgZmlsZUlucHV0KHMpOlxuICAgICAgLy8gY2hhbmdlOiBmdW5jdGlvbiAoZSwgZGF0YSkge30sIC8vIC5vbignZmlsZXVwbG9hZGNoYW5nZScsIGZ1bmMpO1xuXG4gICAgICAvLyBDYWxsYmFjayBmb3IgcGFzdGUgZXZlbnRzIHRvIHRoZSBwYXN0ZVpvbmUocyk6XG4gICAgICAvLyBwYXN0ZTogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRwYXN0ZScsIGZ1bmMpO1xuXG4gICAgICAvLyBDYWxsYmFjayBmb3IgZHJvcCBldmVudHMgb2YgdGhlIGRyb3Bab25lKHMpOlxuICAgICAgLy8gZHJvcDogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRkcm9wJywgZnVuYyk7XG5cbiAgICAgIC8vIENhbGxiYWNrIGZvciBkcmFnb3ZlciBldmVudHMgb2YgdGhlIGRyb3Bab25lKHMpOlxuICAgICAgLy8gZHJhZ292ZXI6IGZ1bmN0aW9uIChlKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkZHJhZ292ZXInLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgYmVmb3JlIHRoZSBzdGFydCBvZiBlYWNoIGNodW5rIHVwbG9hZCByZXF1ZXN0IChiZWZvcmUgZm9ybSBkYXRhIGluaXRpYWxpemF0aW9uKTpcbiAgICAgIC8vIGNodW5rYmVmb3Jlc2VuZDogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRjaHVua2JlZm9yZXNlbmQnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIHRoZSBzdGFydCBvZiBlYWNoIGNodW5rIHVwbG9hZCByZXF1ZXN0OlxuICAgICAgLy8gY2h1bmtzZW5kOiBmdW5jdGlvbiAoZSwgZGF0YSkge30sIC8vIC5vbignZmlsZXVwbG9hZGNodW5rc2VuZCcsIGZ1bmMpO1xuXG4gICAgICAvLyBDYWxsYmFjayBmb3Igc3VjY2Vzc2Z1bCBjaHVuayB1cGxvYWRzOlxuICAgICAgLy8gY2h1bmtkb25lOiBmdW5jdGlvbiAoZSwgZGF0YSkge30sIC8vIC5vbignZmlsZXVwbG9hZGNodW5rZG9uZScsIGZ1bmMpO1xuXG4gICAgICAvLyBDYWxsYmFjayBmb3IgZmFpbGVkIChhYm9ydCBvciBlcnJvcikgY2h1bmsgdXBsb2FkczpcbiAgICAgIC8vIGNodW5rZmFpbDogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRjaHVua2ZhaWwnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIGNvbXBsZXRlZCAoc3VjY2VzcywgYWJvcnQgb3IgZXJyb3IpIGNodW5rIHVwbG9hZCByZXF1ZXN0czpcbiAgICAgIC8vIGNodW5rYWx3YXlzOiBmdW5jdGlvbiAoZSwgZGF0YSkge30sIC8vIC5vbignZmlsZXVwbG9hZGNodW5rYWx3YXlzJywgZnVuYyk7XG5cbiAgICAgIC8vIFRoZSBwbHVnaW4gb3B0aW9ucyBhcmUgdXNlZCBhcyBzZXR0aW5ncyBvYmplY3QgZm9yIHRoZSBhamF4IGNhbGxzLlxuICAgICAgLy8gVGhlIGZvbGxvd2luZyBhcmUgalF1ZXJ5IGFqYXggc2V0dGluZ3MgcmVxdWlyZWQgZm9yIHRoZSBmaWxlIHVwbG9hZHM6XG4gICAgICBwcm9jZXNzRGF0YTogZmFsc2UsXG4gICAgICBjb250ZW50VHlwZTogZmFsc2UsXG4gICAgICBjYWNoZTogZmFsc2UsXG4gICAgICB0aW1lb3V0OiAwXG4gICAgfSxcblxuICAgIC8vIGpRdWVyeSB2ZXJzaW9ucyBiZWZvcmUgMS44IHJlcXVpcmUgcHJvbWlzZS5waXBlIGlmIHRoZSByZXR1cm4gdmFsdWUgaXNcbiAgICAvLyB1c2VkLCBhcyBwcm9taXNlLnRoZW4gaW4gb2xkZXIgdmVyc2lvbnMgaGFzIGEgZGlmZmVyZW50IGJlaGF2aW9yLCBzZWU6XG4gICAgLy8gaHR0cHM6Ly9ibG9nLmpxdWVyeS5jb20vMjAxMi8wOC8wOS9qcXVlcnktMS04LXJlbGVhc2VkL1xuICAgIC8vIGh0dHBzOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xMTAxMFxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ibHVlaW1wL2pRdWVyeS1GaWxlLVVwbG9hZC9wdWxsLzM0MzVcbiAgICBfcHJvbWlzZVBpcGU6IChmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgcGFydHMgPSAkLmZuLmpxdWVyeS5zcGxpdCgnLicpO1xuICAgICAgcmV0dXJuIE51bWJlcihwYXJ0c1swXSkgPiAxIHx8IE51bWJlcihwYXJ0c1sxXSkgPiA3ID8gJ3RoZW4nIDogJ3BpcGUnO1xuICAgIH0pKCksXG5cbiAgICAvLyBBIGxpc3Qgb2Ygb3B0aW9ucyB0aGF0IHJlcXVpcmUgcmVpbml0aWFsaXppbmcgZXZlbnQgbGlzdGVuZXJzIGFuZC9vclxuICAgIC8vIHNwZWNpYWwgaW5pdGlhbGl6YXRpb24gY29kZTpcbiAgICBfc3BlY2lhbE9wdGlvbnM6IFtcbiAgICAgICdmaWxlSW5wdXQnLFxuICAgICAgJ2Ryb3Bab25lJyxcbiAgICAgICdwYXN0ZVpvbmUnLFxuICAgICAgJ211bHRpcGFydCcsXG4gICAgICAnZm9yY2VJZnJhbWVUcmFuc3BvcnQnXG4gICAgXSxcblxuICAgIF9ibG9iU2xpY2U6XG4gICAgICAkLnN1cHBvcnQuYmxvYlNsaWNlICYmXG4gICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBzbGljZSA9IHRoaXMuc2xpY2UgfHwgdGhpcy53ZWJraXRTbGljZSB8fCB0aGlzLm1velNsaWNlO1xuICAgICAgICByZXR1cm4gc2xpY2UuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH0sXG5cbiAgICBfQml0cmF0ZVRpbWVyOiBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGlzLnRpbWVzdGFtcCA9IERhdGUubm93ID8gRGF0ZS5ub3coKSA6IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgdGhpcy5sb2FkZWQgPSAwO1xuICAgICAgdGhpcy5iaXRyYXRlID0gMDtcbiAgICAgIHRoaXMuZ2V0Qml0cmF0ZSA9IGZ1bmN0aW9uIChub3csIGxvYWRlZCwgaW50ZXJ2YWwpIHtcbiAgICAgICAgdmFyIHRpbWVEaWZmID0gbm93IC0gdGhpcy50aW1lc3RhbXA7XG4gICAgICAgIGlmICghdGhpcy5iaXRyYXRlIHx8ICFpbnRlcnZhbCB8fCB0aW1lRGlmZiA+IGludGVydmFsKSB7XG4gICAgICAgICAgdGhpcy5iaXRyYXRlID0gKGxvYWRlZCAtIHRoaXMubG9hZGVkKSAqICgxMDAwIC8gdGltZURpZmYpICogODtcbiAgICAgICAgICB0aGlzLmxvYWRlZCA9IGxvYWRlZDtcbiAgICAgICAgICB0aGlzLnRpbWVzdGFtcCA9IG5vdztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5iaXRyYXRlO1xuICAgICAgfTtcbiAgICB9LFxuXG4gICAgX2lzWEhSVXBsb2FkOiBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgIW9wdGlvbnMuZm9yY2VJZnJhbWVUcmFuc3BvcnQgJiZcbiAgICAgICAgKCghb3B0aW9ucy5tdWx0aXBhcnQgJiYgJC5zdXBwb3J0LnhockZpbGVVcGxvYWQpIHx8XG4gICAgICAgICAgJC5zdXBwb3J0LnhockZvcm1EYXRhRmlsZVVwbG9hZClcbiAgICAgICk7XG4gICAgfSxcblxuICAgIF9nZXRGb3JtRGF0YTogZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgIHZhciBmb3JtRGF0YTtcbiAgICAgIGlmICgkLnR5cGUob3B0aW9ucy5mb3JtRGF0YSkgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMuZm9ybURhdGEob3B0aW9ucy5mb3JtKTtcbiAgICAgIH1cbiAgICAgIGlmICgkLmlzQXJyYXkob3B0aW9ucy5mb3JtRGF0YSkpIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMuZm9ybURhdGE7XG4gICAgICB9XG4gICAgICBpZiAoJC50eXBlKG9wdGlvbnMuZm9ybURhdGEpID09PSAnb2JqZWN0Jykge1xuICAgICAgICBmb3JtRGF0YSA9IFtdO1xuICAgICAgICAkLmVhY2gob3B0aW9ucy5mb3JtRGF0YSwgZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XG4gICAgICAgICAgZm9ybURhdGEucHVzaCh7IG5hbWU6IG5hbWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmb3JtRGF0YTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbXTtcbiAgICB9LFxuXG4gICAgX2dldFRvdGFsOiBmdW5jdGlvbiAoZmlsZXMpIHtcbiAgICAgIHZhciB0b3RhbCA9IDA7XG4gICAgICAkLmVhY2goZmlsZXMsIGZ1bmN0aW9uIChpbmRleCwgZmlsZSkge1xuICAgICAgICB0b3RhbCArPSBmaWxlLnNpemUgfHwgMTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRvdGFsO1xuICAgIH0sXG5cbiAgICBfaW5pdFByb2dyZXNzT2JqZWN0OiBmdW5jdGlvbiAob2JqKSB7XG4gICAgICB2YXIgcHJvZ3Jlc3MgPSB7XG4gICAgICAgIGxvYWRlZDogMCxcbiAgICAgICAgdG90YWw6IDAsXG4gICAgICAgIGJpdHJhdGU6IDBcbiAgICAgIH07XG4gICAgICBpZiAob2JqLl9wcm9ncmVzcykge1xuICAgICAgICAkLmV4dGVuZChvYmouX3Byb2dyZXNzLCBwcm9ncmVzcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYmouX3Byb2dyZXNzID0gcHJvZ3Jlc3M7XG4gICAgICB9XG4gICAgfSxcblxuICAgIF9pbml0UmVzcG9uc2VPYmplY3Q6IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgIHZhciBwcm9wO1xuICAgICAgaWYgKG9iai5fcmVzcG9uc2UpIHtcbiAgICAgICAgZm9yIChwcm9wIGluIG9iai5fcmVzcG9uc2UpIHtcbiAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iai5fcmVzcG9uc2UsIHByb3ApKSB7XG4gICAgICAgICAgICBkZWxldGUgb2JqLl9yZXNwb25zZVtwcm9wXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9iai5fcmVzcG9uc2UgPSB7fTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX29uUHJvZ3Jlc3M6IGZ1bmN0aW9uIChlLCBkYXRhKSB7XG4gICAgICBpZiAoZS5sZW5ndGhDb21wdXRhYmxlKSB7XG4gICAgICAgIHZhciBub3cgPSBEYXRlLm5vdyA/IERhdGUubm93KCkgOiBuZXcgRGF0ZSgpLmdldFRpbWUoKSxcbiAgICAgICAgICBsb2FkZWQ7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBkYXRhLl90aW1lICYmXG4gICAgICAgICAgZGF0YS5wcm9ncmVzc0ludGVydmFsICYmXG4gICAgICAgICAgbm93IC0gZGF0YS5fdGltZSA8IGRhdGEucHJvZ3Jlc3NJbnRlcnZhbCAmJlxuICAgICAgICAgIGUubG9hZGVkICE9PSBlLnRvdGFsXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBkYXRhLl90aW1lID0gbm93O1xuICAgICAgICBsb2FkZWQgPVxuICAgICAgICAgIE1hdGguZmxvb3IoXG4gICAgICAgICAgICAoZS5sb2FkZWQgLyBlLnRvdGFsKSAqIChkYXRhLmNodW5rU2l6ZSB8fCBkYXRhLl9wcm9ncmVzcy50b3RhbClcbiAgICAgICAgICApICsgKGRhdGEudXBsb2FkZWRCeXRlcyB8fCAwKTtcbiAgICAgICAgLy8gQWRkIHRoZSBkaWZmZXJlbmNlIGZyb20gdGhlIHByZXZpb3VzbHkgbG9hZGVkIHN0YXRlXG4gICAgICAgIC8vIHRvIHRoZSBnbG9iYWwgbG9hZGVkIGNvdW50ZXI6XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzLmxvYWRlZCArPSBsb2FkZWQgLSBkYXRhLl9wcm9ncmVzcy5sb2FkZWQ7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzLmJpdHJhdGUgPSB0aGlzLl9iaXRyYXRlVGltZXIuZ2V0Qml0cmF0ZShcbiAgICAgICAgICBub3csXG4gICAgICAgICAgdGhpcy5fcHJvZ3Jlc3MubG9hZGVkLFxuICAgICAgICAgIGRhdGEuYml0cmF0ZUludGVydmFsXG4gICAgICAgICk7XG4gICAgICAgIGRhdGEuX3Byb2dyZXNzLmxvYWRlZCA9IGRhdGEubG9hZGVkID0gbG9hZGVkO1xuICAgICAgICBkYXRhLl9wcm9ncmVzcy5iaXRyYXRlID0gZGF0YS5iaXRyYXRlID0gZGF0YS5fYml0cmF0ZVRpbWVyLmdldEJpdHJhdGUoXG4gICAgICAgICAgbm93LFxuICAgICAgICAgIGxvYWRlZCxcbiAgICAgICAgICBkYXRhLmJpdHJhdGVJbnRlcnZhbFxuICAgICAgICApO1xuICAgICAgICAvLyBUcmlnZ2VyIGEgY3VzdG9tIHByb2dyZXNzIGV2ZW50IHdpdGggYSB0b3RhbCBkYXRhIHByb3BlcnR5IHNldFxuICAgICAgICAvLyB0byB0aGUgZmlsZSBzaXplKHMpIG9mIHRoZSBjdXJyZW50IHVwbG9hZCBhbmQgYSBsb2FkZWQgZGF0YVxuICAgICAgICAvLyBwcm9wZXJ0eSBjYWxjdWxhdGVkIGFjY29yZGluZ2x5OlxuICAgICAgICB0aGlzLl90cmlnZ2VyKFxuICAgICAgICAgICdwcm9ncmVzcycsXG4gICAgICAgICAgJC5FdmVudCgncHJvZ3Jlc3MnLCB7IGRlbGVnYXRlZEV2ZW50OiBlIH0pLFxuICAgICAgICAgIGRhdGFcbiAgICAgICAgKTtcbiAgICAgICAgLy8gVHJpZ2dlciBhIGdsb2JhbCBwcm9ncmVzcyBldmVudCBmb3IgYWxsIGN1cnJlbnQgZmlsZSB1cGxvYWRzLFxuICAgICAgICAvLyBpbmNsdWRpbmcgYWpheCBjYWxscyBxdWV1ZWQgZm9yIHNlcXVlbnRpYWwgZmlsZSB1cGxvYWRzOlxuICAgICAgICB0aGlzLl90cmlnZ2VyKFxuICAgICAgICAgICdwcm9ncmVzc2FsbCcsXG4gICAgICAgICAgJC5FdmVudCgncHJvZ3Jlc3NhbGwnLCB7IGRlbGVnYXRlZEV2ZW50OiBlIH0pLFxuICAgICAgICAgIHRoaXMuX3Byb2dyZXNzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIF9pbml0UHJvZ3Jlc3NMaXN0ZW5lcjogZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcyxcbiAgICAgICAgeGhyID0gb3B0aW9ucy54aHIgPyBvcHRpb25zLnhocigpIDogJC5hamF4U2V0dGluZ3MueGhyKCk7XG4gICAgICAvLyBBY2Nlc3MgdG8gdGhlIG5hdGl2ZSBYSFIgb2JqZWN0IGlzIHJlcXVpcmVkIHRvIGFkZCBldmVudCBsaXN0ZW5lcnNcbiAgICAgIC8vIGZvciB0aGUgdXBsb2FkIHByb2dyZXNzIGV2ZW50OlxuICAgICAgaWYgKHhoci51cGxvYWQpIHtcbiAgICAgICAgJCh4aHIudXBsb2FkKS5vbigncHJvZ3Jlc3MnLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgIHZhciBvZSA9IGUub3JpZ2luYWxFdmVudDtcbiAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIHByb2dyZXNzIGV2ZW50IHByb3BlcnRpZXMgZ2V0IGNvcGllZCBvdmVyOlxuICAgICAgICAgIGUubGVuZ3RoQ29tcHV0YWJsZSA9IG9lLmxlbmd0aENvbXB1dGFibGU7XG4gICAgICAgICAgZS5sb2FkZWQgPSBvZS5sb2FkZWQ7XG4gICAgICAgICAgZS50b3RhbCA9IG9lLnRvdGFsO1xuICAgICAgICAgIHRoYXQuX29uUHJvZ3Jlc3MoZSwgb3B0aW9ucyk7XG4gICAgICAgIH0pO1xuICAgICAgICBvcHRpb25zLnhociA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4geGhyO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBfZGVpbml0UHJvZ3Jlc3NMaXN0ZW5lcjogZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgIHZhciB4aHIgPSBvcHRpb25zLnhociA/IG9wdGlvbnMueGhyKCkgOiAkLmFqYXhTZXR0aW5ncy54aHIoKTtcbiAgICAgIGlmICh4aHIudXBsb2FkKSB7XG4gICAgICAgICQoeGhyLnVwbG9hZCkub2ZmKCdwcm9ncmVzcycpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBfaXNJbnN0YW5jZU9mOiBmdW5jdGlvbiAodHlwZSwgb2JqKSB7XG4gICAgICAvLyBDcm9zcy1mcmFtZSBpbnN0YW5jZW9mIGNoZWNrXG4gICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0ICcgKyB0eXBlICsgJ10nO1xuICAgIH0sXG5cbiAgICBfZ2V0VW5pcXVlRmlsZW5hbWU6IGZ1bmN0aW9uIChuYW1lLCBtYXApIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgbmFtZSA9IFN0cmluZyhuYW1lKTtcbiAgICAgIGlmIChtYXBbbmFtZV0pIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIG5hbWUgPSBuYW1lLnJlcGxhY2UoXG4gICAgICAgICAgLyg/OiBcXCgoW1xcZF0rKVxcKSk/KFxcLlteLl0rKT8kLyxcbiAgICAgICAgICBmdW5jdGlvbiAoXywgcDEsIHAyKSB7XG4gICAgICAgICAgICB2YXIgaW5kZXggPSBwMSA/IE51bWJlcihwMSkgKyAxIDogMTtcbiAgICAgICAgICAgIHZhciBleHQgPSBwMiB8fCAnJztcbiAgICAgICAgICAgIHJldHVybiAnICgnICsgaW5kZXggKyAnKScgKyBleHQ7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0VW5pcXVlRmlsZW5hbWUobmFtZSwgbWFwKTtcbiAgICAgIH1cbiAgICAgIG1hcFtuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gbmFtZTtcbiAgICB9LFxuXG4gICAgX2luaXRYSFJEYXRhOiBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICBmb3JtRGF0YSxcbiAgICAgICAgZmlsZSA9IG9wdGlvbnMuZmlsZXNbMF0sXG4gICAgICAgIC8vIElnbm9yZSBub24tbXVsdGlwYXJ0IHNldHRpbmcgaWYgbm90IHN1cHBvcnRlZDpcbiAgICAgICAgbXVsdGlwYXJ0ID0gb3B0aW9ucy5tdWx0aXBhcnQgfHwgISQuc3VwcG9ydC54aHJGaWxlVXBsb2FkLFxuICAgICAgICBwYXJhbU5hbWUgPVxuICAgICAgICAgICQudHlwZShvcHRpb25zLnBhcmFtTmFtZSkgPT09ICdhcnJheSdcbiAgICAgICAgICAgID8gb3B0aW9ucy5wYXJhbU5hbWVbMF1cbiAgICAgICAgICAgIDogb3B0aW9ucy5wYXJhbU5hbWU7XG4gICAgICBvcHRpb25zLmhlYWRlcnMgPSAkLmV4dGVuZCh7fSwgb3B0aW9ucy5oZWFkZXJzKTtcbiAgICAgIGlmIChvcHRpb25zLmNvbnRlbnRSYW5nZSkge1xuICAgICAgICBvcHRpb25zLmhlYWRlcnNbJ0NvbnRlbnQtUmFuZ2UnXSA9IG9wdGlvbnMuY29udGVudFJhbmdlO1xuICAgICAgfVxuICAgICAgaWYgKCFtdWx0aXBhcnQgfHwgb3B0aW9ucy5ibG9iIHx8ICF0aGlzLl9pc0luc3RhbmNlT2YoJ0ZpbGUnLCBmaWxlKSkge1xuICAgICAgICBvcHRpb25zLmhlYWRlcnNbJ0NvbnRlbnQtRGlzcG9zaXRpb24nXSA9XG4gICAgICAgICAgJ2F0dGFjaG1lbnQ7IGZpbGVuYW1lPVwiJyArXG4gICAgICAgICAgZW5jb2RlVVJJKGZpbGUudXBsb2FkTmFtZSB8fCBmaWxlLm5hbWUpICtcbiAgICAgICAgICAnXCInO1xuICAgICAgfVxuICAgICAgaWYgKCFtdWx0aXBhcnQpIHtcbiAgICAgICAgb3B0aW9ucy5jb250ZW50VHlwZSA9IGZpbGUudHlwZSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJztcbiAgICAgICAgb3B0aW9ucy5kYXRhID0gb3B0aW9ucy5ibG9iIHx8IGZpbGU7XG4gICAgICB9IGVsc2UgaWYgKCQuc3VwcG9ydC54aHJGb3JtRGF0YUZpbGVVcGxvYWQpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMucG9zdE1lc3NhZ2UpIHtcbiAgICAgICAgICAvLyB3aW5kb3cucG9zdE1lc3NhZ2UgZG9lcyBub3QgYWxsb3cgc2VuZGluZyBGb3JtRGF0YVxuICAgICAgICAgIC8vIG9iamVjdHMsIHNvIHdlIGp1c3QgYWRkIHRoZSBGaWxlL0Jsb2Igb2JqZWN0cyB0b1xuICAgICAgICAgIC8vIHRoZSBmb3JtRGF0YSBhcnJheSBhbmQgbGV0IHRoZSBwb3N0TWVzc2FnZSB3aW5kb3dcbiAgICAgICAgICAvLyBjcmVhdGUgdGhlIEZvcm1EYXRhIG9iamVjdCBvdXQgb2YgdGhpcyBhcnJheTpcbiAgICAgICAgICBmb3JtRGF0YSA9IHRoaXMuX2dldEZvcm1EYXRhKG9wdGlvbnMpO1xuICAgICAgICAgIGlmIChvcHRpb25zLmJsb2IpIHtcbiAgICAgICAgICAgIGZvcm1EYXRhLnB1c2goe1xuICAgICAgICAgICAgICBuYW1lOiBwYXJhbU5hbWUsXG4gICAgICAgICAgICAgIHZhbHVlOiBvcHRpb25zLmJsb2JcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAkLmVhY2gob3B0aW9ucy5maWxlcywgZnVuY3Rpb24gKGluZGV4LCBmaWxlKSB7XG4gICAgICAgICAgICAgIGZvcm1EYXRhLnB1c2goe1xuICAgICAgICAgICAgICAgIG5hbWU6XG4gICAgICAgICAgICAgICAgICAoJC50eXBlKG9wdGlvbnMucGFyYW1OYW1lKSA9PT0gJ2FycmF5JyAmJlxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnBhcmFtTmFtZVtpbmRleF0pIHx8XG4gICAgICAgICAgICAgICAgICBwYXJhbU5hbWUsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZpbGVcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRoYXQuX2lzSW5zdGFuY2VPZignRm9ybURhdGEnLCBvcHRpb25zLmZvcm1EYXRhKSkge1xuICAgICAgICAgICAgZm9ybURhdGEgPSBvcHRpb25zLmZvcm1EYXRhO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgICAgICAgJC5lYWNoKHRoaXMuX2dldEZvcm1EYXRhKG9wdGlvbnMpLCBmdW5jdGlvbiAoaW5kZXgsIGZpZWxkKSB7XG4gICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChmaWVsZC5uYW1lLCBmaWVsZC52YWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG9wdGlvbnMuYmxvYikge1xuICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKFxuICAgICAgICAgICAgICBwYXJhbU5hbWUsXG4gICAgICAgICAgICAgIG9wdGlvbnMuYmxvYixcbiAgICAgICAgICAgICAgZmlsZS51cGxvYWROYW1lIHx8IGZpbGUubmFtZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJC5lYWNoKG9wdGlvbnMuZmlsZXMsIGZ1bmN0aW9uIChpbmRleCwgZmlsZSkge1xuICAgICAgICAgICAgICAvLyBUaGlzIGNoZWNrIGFsbG93cyB0aGUgdGVzdHMgdG8gcnVuIHdpdGhcbiAgICAgICAgICAgICAgLy8gZHVtbXkgb2JqZWN0czpcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHRoYXQuX2lzSW5zdGFuY2VPZignRmlsZScsIGZpbGUpIHx8XG4gICAgICAgICAgICAgICAgdGhhdC5faXNJbnN0YW5jZU9mKCdCbG9iJywgZmlsZSlcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdmFyIGZpbGVOYW1lID0gZmlsZS51cGxvYWROYW1lIHx8IGZpbGUubmFtZTtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy51bmlxdWVGaWxlbmFtZXMpIHtcbiAgICAgICAgICAgICAgICAgIGZpbGVOYW1lID0gdGhhdC5fZ2V0VW5pcXVlRmlsZW5hbWUoXG4gICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lLFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnVuaXF1ZUZpbGVuYW1lc1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKFxuICAgICAgICAgICAgICAgICAgKCQudHlwZShvcHRpb25zLnBhcmFtTmFtZSkgPT09ICdhcnJheScgJiZcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5wYXJhbU5hbWVbaW5kZXhdKSB8fFxuICAgICAgICAgICAgICAgICAgICBwYXJhbU5hbWUsXG4gICAgICAgICAgICAgICAgICBmaWxlLFxuICAgICAgICAgICAgICAgICAgZmlsZU5hbWVcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgb3B0aW9ucy5kYXRhID0gZm9ybURhdGE7XG4gICAgICB9XG4gICAgICAvLyBCbG9iIHJlZmVyZW5jZSBpcyBub3QgbmVlZGVkIGFueW1vcmUsIGZyZWUgbWVtb3J5OlxuICAgICAgb3B0aW9ucy5ibG9iID0gbnVsbDtcbiAgICB9LFxuXG4gICAgX2luaXRJZnJhbWVTZXR0aW5nczogZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgIHZhciB0YXJnZXRIb3N0ID0gJCgnPGE+PC9hPicpLnByb3AoJ2hyZWYnLCBvcHRpb25zLnVybCkucHJvcCgnaG9zdCcpO1xuICAgICAgLy8gU2V0dGluZyB0aGUgZGF0YVR5cGUgdG8gaWZyYW1lIGVuYWJsZXMgdGhlIGlmcmFtZSB0cmFuc3BvcnQ6XG4gICAgICBvcHRpb25zLmRhdGFUeXBlID0gJ2lmcmFtZSAnICsgKG9wdGlvbnMuZGF0YVR5cGUgfHwgJycpO1xuICAgICAgLy8gVGhlIGlmcmFtZSB0cmFuc3BvcnQgYWNjZXB0cyBhIHNlcmlhbGl6ZWQgYXJyYXkgYXMgZm9ybSBkYXRhOlxuICAgICAgb3B0aW9ucy5mb3JtRGF0YSA9IHRoaXMuX2dldEZvcm1EYXRhKG9wdGlvbnMpO1xuICAgICAgLy8gQWRkIHJlZGlyZWN0IHVybCB0byBmb3JtIGRhdGEgb24gY3Jvc3MtZG9tYWluIHVwbG9hZHM6XG4gICAgICBpZiAob3B0aW9ucy5yZWRpcmVjdCAmJiB0YXJnZXRIb3N0ICYmIHRhcmdldEhvc3QgIT09IGxvY2F0aW9uLmhvc3QpIHtcbiAgICAgICAgb3B0aW9ucy5mb3JtRGF0YS5wdXNoKHtcbiAgICAgICAgICBuYW1lOiBvcHRpb25zLnJlZGlyZWN0UGFyYW1OYW1lIHx8ICdyZWRpcmVjdCcsXG4gICAgICAgICAgdmFsdWU6IG9wdGlvbnMucmVkaXJlY3RcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIF9pbml0RGF0YVNldHRpbmdzOiBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgaWYgKHRoaXMuX2lzWEhSVXBsb2FkKG9wdGlvbnMpKSB7XG4gICAgICAgIGlmICghdGhpcy5fY2h1bmtlZFVwbG9hZChvcHRpb25zLCB0cnVlKSkge1xuICAgICAgICAgIGlmICghb3B0aW9ucy5kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLl9pbml0WEhSRGF0YShvcHRpb25zKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5faW5pdFByb2dyZXNzTGlzdGVuZXIob3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMucG9zdE1lc3NhZ2UpIHtcbiAgICAgICAgICAvLyBTZXR0aW5nIHRoZSBkYXRhVHlwZSB0byBwb3N0bWVzc2FnZSBlbmFibGVzIHRoZVxuICAgICAgICAgIC8vIHBvc3RNZXNzYWdlIHRyYW5zcG9ydDpcbiAgICAgICAgICBvcHRpb25zLmRhdGFUeXBlID0gJ3Bvc3RtZXNzYWdlICcgKyAob3B0aW9ucy5kYXRhVHlwZSB8fCAnJyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2luaXRJZnJhbWVTZXR0aW5ncyhvcHRpb25zKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX2dldFBhcmFtTmFtZTogZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgIHZhciBmaWxlSW5wdXQgPSAkKG9wdGlvbnMuZmlsZUlucHV0KSxcbiAgICAgICAgcGFyYW1OYW1lID0gb3B0aW9ucy5wYXJhbU5hbWU7XG4gICAgICBpZiAoIXBhcmFtTmFtZSkge1xuICAgICAgICBwYXJhbU5hbWUgPSBbXTtcbiAgICAgICAgZmlsZUlucHV0LmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHZhciBpbnB1dCA9ICQodGhpcyksXG4gICAgICAgICAgICBuYW1lID0gaW5wdXQucHJvcCgnbmFtZScpIHx8ICdmaWxlc1tdJyxcbiAgICAgICAgICAgIGkgPSAoaW5wdXQucHJvcCgnZmlsZXMnKSB8fCBbMV0pLmxlbmd0aDtcbiAgICAgICAgICB3aGlsZSAoaSkge1xuICAgICAgICAgICAgcGFyYW1OYW1lLnB1c2gobmFtZSk7XG4gICAgICAgICAgICBpIC09IDE7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFwYXJhbU5hbWUubGVuZ3RoKSB7XG4gICAgICAgICAgcGFyYW1OYW1lID0gW2ZpbGVJbnB1dC5wcm9wKCduYW1lJykgfHwgJ2ZpbGVzW10nXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghJC5pc0FycmF5KHBhcmFtTmFtZSkpIHtcbiAgICAgICAgcGFyYW1OYW1lID0gW3BhcmFtTmFtZV07XG4gICAgICB9XG4gICAgICByZXR1cm4gcGFyYW1OYW1lO1xuICAgIH0sXG5cbiAgICBfaW5pdEZvcm1TZXR0aW5nczogZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgIC8vIFJldHJpZXZlIG1pc3Npbmcgb3B0aW9ucyBmcm9tIHRoZSBpbnB1dCBmaWVsZCBhbmQgdGhlXG4gICAgICAvLyBhc3NvY2lhdGVkIGZvcm0sIGlmIGF2YWlsYWJsZTpcbiAgICAgIGlmICghb3B0aW9ucy5mb3JtIHx8ICFvcHRpb25zLmZvcm0ubGVuZ3RoKSB7XG4gICAgICAgIG9wdGlvbnMuZm9ybSA9ICQob3B0aW9ucy5maWxlSW5wdXQucHJvcCgnZm9ybScpKTtcbiAgICAgICAgLy8gSWYgdGhlIGdpdmVuIGZpbGUgaW5wdXQgZG9lc24ndCBoYXZlIGFuIGFzc29jaWF0ZWQgZm9ybSxcbiAgICAgICAgLy8gdXNlIHRoZSBkZWZhdWx0IHdpZGdldCBmaWxlIGlucHV0J3MgZm9ybTpcbiAgICAgICAgaWYgKCFvcHRpb25zLmZvcm0ubGVuZ3RoKSB7XG4gICAgICAgICAgb3B0aW9ucy5mb3JtID0gJCh0aGlzLm9wdGlvbnMuZmlsZUlucHV0LnByb3AoJ2Zvcm0nKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG9wdGlvbnMucGFyYW1OYW1lID0gdGhpcy5fZ2V0UGFyYW1OYW1lKG9wdGlvbnMpO1xuICAgICAgaWYgKCFvcHRpb25zLnVybCkge1xuICAgICAgICBvcHRpb25zLnVybCA9IG9wdGlvbnMuZm9ybS5wcm9wKCdhY3Rpb24nKSB8fCBsb2NhdGlvbi5ocmVmO1xuICAgICAgfVxuICAgICAgLy8gVGhlIEhUVFAgcmVxdWVzdCBtZXRob2QgbXVzdCBiZSBcIlBPU1RcIiBvciBcIlBVVFwiOlxuICAgICAgb3B0aW9ucy50eXBlID0gKFxuICAgICAgICBvcHRpb25zLnR5cGUgfHxcbiAgICAgICAgKCQudHlwZShvcHRpb25zLmZvcm0ucHJvcCgnbWV0aG9kJykpID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgIG9wdGlvbnMuZm9ybS5wcm9wKCdtZXRob2QnKSkgfHxcbiAgICAgICAgJydcbiAgICAgICkudG9VcHBlckNhc2UoKTtcbiAgICAgIGlmIChcbiAgICAgICAgb3B0aW9ucy50eXBlICE9PSAnUE9TVCcgJiZcbiAgICAgICAgb3B0aW9ucy50eXBlICE9PSAnUFVUJyAmJlxuICAgICAgICBvcHRpb25zLnR5cGUgIT09ICdQQVRDSCdcbiAgICAgICkge1xuICAgICAgICBvcHRpb25zLnR5cGUgPSAnUE9TVCc7XG4gICAgICB9XG4gICAgICBpZiAoIW9wdGlvbnMuZm9ybUFjY2VwdENoYXJzZXQpIHtcbiAgICAgICAgb3B0aW9ucy5mb3JtQWNjZXB0Q2hhcnNldCA9IG9wdGlvbnMuZm9ybS5hdHRyKCdhY2NlcHQtY2hhcnNldCcpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBfZ2V0QUpBWFNldHRpbmdzOiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgdmFyIG9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgdGhpcy5vcHRpb25zLCBkYXRhKTtcbiAgICAgIHRoaXMuX2luaXRGb3JtU2V0dGluZ3Mob3B0aW9ucyk7XG4gICAgICB0aGlzLl9pbml0RGF0YVNldHRpbmdzKG9wdGlvbnMpO1xuICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfSxcblxuICAgIC8vIGpRdWVyeSAxLjYgZG9lc24ndCBwcm92aWRlIC5zdGF0ZSgpLFxuICAgIC8vIHdoaWxlIGpRdWVyeSAxLjgrIHJlbW92ZWQgLmlzUmVqZWN0ZWQoKSBhbmQgLmlzUmVzb2x2ZWQoKTpcbiAgICBfZ2V0RGVmZXJyZWRTdGF0ZTogZnVuY3Rpb24gKGRlZmVycmVkKSB7XG4gICAgICBpZiAoZGVmZXJyZWQuc3RhdGUpIHtcbiAgICAgICAgcmV0dXJuIGRlZmVycmVkLnN0YXRlKCk7XG4gICAgICB9XG4gICAgICBpZiAoZGVmZXJyZWQuaXNSZXNvbHZlZCgpKSB7XG4gICAgICAgIHJldHVybiAncmVzb2x2ZWQnO1xuICAgICAgfVxuICAgICAgaWYgKGRlZmVycmVkLmlzUmVqZWN0ZWQoKSkge1xuICAgICAgICByZXR1cm4gJ3JlamVjdGVkJztcbiAgICAgIH1cbiAgICAgIHJldHVybiAncGVuZGluZyc7XG4gICAgfSxcblxuICAgIC8vIE1hcHMganFYSFIgY2FsbGJhY2tzIHRvIHRoZSBlcXVpdmFsZW50XG4gICAgLy8gbWV0aG9kcyBvZiB0aGUgZ2l2ZW4gUHJvbWlzZSBvYmplY3Q6XG4gICAgX2VuaGFuY2VQcm9taXNlOiBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgcHJvbWlzZS5zdWNjZXNzID0gcHJvbWlzZS5kb25lO1xuICAgICAgcHJvbWlzZS5lcnJvciA9IHByb21pc2UuZmFpbDtcbiAgICAgIHByb21pc2UuY29tcGxldGUgPSBwcm9taXNlLmFsd2F5cztcbiAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH0sXG5cbiAgICAvLyBDcmVhdGVzIGFuZCByZXR1cm5zIGEgUHJvbWlzZSBvYmplY3QgZW5oYW5jZWQgd2l0aFxuICAgIC8vIHRoZSBqcVhIUiBtZXRob2RzIGFib3J0LCBzdWNjZXNzLCBlcnJvciBhbmQgY29tcGxldGU6XG4gICAgX2dldFhIUlByb21pc2U6IGZ1bmN0aW9uIChyZXNvbHZlT3JSZWplY3QsIGNvbnRleHQsIGFyZ3MpIHtcbiAgICAgIHZhciBkZmQgPSAkLkRlZmVycmVkKCksXG4gICAgICAgIHByb21pc2UgPSBkZmQucHJvbWlzZSgpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICBjb250ZXh0ID0gY29udGV4dCB8fCB0aGlzLm9wdGlvbnMuY29udGV4dCB8fCBwcm9taXNlO1xuICAgICAgaWYgKHJlc29sdmVPclJlamVjdCA9PT0gdHJ1ZSkge1xuICAgICAgICBkZmQucmVzb2x2ZVdpdGgoY29udGV4dCwgYXJncyk7XG4gICAgICB9IGVsc2UgaWYgKHJlc29sdmVPclJlamVjdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgZGZkLnJlamVjdFdpdGgoY29udGV4dCwgYXJncyk7XG4gICAgICB9XG4gICAgICBwcm9taXNlLmFib3J0ID0gZGZkLnByb21pc2U7XG4gICAgICByZXR1cm4gdGhpcy5fZW5oYW5jZVByb21pc2UocHJvbWlzZSk7XG4gICAgfSxcblxuICAgIC8vIEFkZHMgY29udmVuaWVuY2UgbWV0aG9kcyB0byB0aGUgZGF0YSBjYWxsYmFjayBhcmd1bWVudDpcbiAgICBfYWRkQ29udmVuaWVuY2VNZXRob2RzOiBmdW5jdGlvbiAoZSwgZGF0YSkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICBnZXRQcm9taXNlID0gZnVuY3Rpb24gKGFyZ3MpIHtcbiAgICAgICAgICByZXR1cm4gJC5EZWZlcnJlZCgpLnJlc29sdmVXaXRoKHRoYXQsIGFyZ3MpLnByb21pc2UoKTtcbiAgICAgICAgfTtcbiAgICAgIGRhdGEucHJvY2VzcyA9IGZ1bmN0aW9uIChyZXNvbHZlRnVuYywgcmVqZWN0RnVuYykge1xuICAgICAgICBpZiAocmVzb2x2ZUZ1bmMgfHwgcmVqZWN0RnVuYykge1xuICAgICAgICAgIGRhdGEuX3Byb2Nlc3NRdWV1ZSA9IHRoaXMuX3Byb2Nlc3NRdWV1ZSA9ICh0aGlzLl9wcm9jZXNzUXVldWUgfHxcbiAgICAgICAgICAgIGdldFByb21pc2UoW3RoaXNdKSlcbiAgICAgICAgICAgIFt0aGF0Ll9wcm9taXNlUGlwZV0oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICBpZiAoZGF0YS5lcnJvclRocm93bikge1xuICAgICAgICAgICAgICAgIHJldHVybiAkLkRlZmVycmVkKCkucmVqZWN0V2l0aCh0aGF0LCBbZGF0YV0pLnByb21pc2UoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gZ2V0UHJvbWlzZShhcmd1bWVudHMpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIFt0aGF0Ll9wcm9taXNlUGlwZV0ocmVzb2x2ZUZ1bmMsIHJlamVjdEZ1bmMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9jZXNzUXVldWUgfHwgZ2V0UHJvbWlzZShbdGhpc10pO1xuICAgICAgfTtcbiAgICAgIGRhdGEuc3VibWl0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5zdGF0ZSgpICE9PSAncGVuZGluZycpIHtcbiAgICAgICAgICBkYXRhLmpxWEhSID0gdGhpcy5qcVhIUiA9XG4gICAgICAgICAgICB0aGF0Ll90cmlnZ2VyKFxuICAgICAgICAgICAgICAnc3VibWl0JyxcbiAgICAgICAgICAgICAgJC5FdmVudCgnc3VibWl0JywgeyBkZWxlZ2F0ZWRFdmVudDogZSB9KSxcbiAgICAgICAgICAgICAgdGhpc1xuICAgICAgICAgICAgKSAhPT0gZmFsc2UgJiYgdGhhdC5fb25TZW5kKGUsIHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmpxWEhSIHx8IHRoYXQuX2dldFhIUlByb21pc2UoKTtcbiAgICAgIH07XG4gICAgICBkYXRhLmFib3J0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5qcVhIUikge1xuICAgICAgICAgIHJldHVybiB0aGlzLmpxWEhSLmFib3J0KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lcnJvclRocm93biA9ICdhYm9ydCc7XG4gICAgICAgIHRoYXQuX3RyaWdnZXIoJ2ZhaWwnLCBudWxsLCB0aGlzKTtcbiAgICAgICAgcmV0dXJuIHRoYXQuX2dldFhIUlByb21pc2UoZmFsc2UpO1xuICAgICAgfTtcbiAgICAgIGRhdGEuc3RhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmpxWEhSKSB7XG4gICAgICAgICAgcmV0dXJuIHRoYXQuX2dldERlZmVycmVkU3RhdGUodGhpcy5qcVhIUik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX3Byb2Nlc3NRdWV1ZSkge1xuICAgICAgICAgIHJldHVybiB0aGF0Ll9nZXREZWZlcnJlZFN0YXRlKHRoaXMuX3Byb2Nlc3NRdWV1ZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBkYXRhLnByb2Nlc3NpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgIXRoaXMuanFYSFIgJiZcbiAgICAgICAgICB0aGlzLl9wcm9jZXNzUXVldWUgJiZcbiAgICAgICAgICB0aGF0Ll9nZXREZWZlcnJlZFN0YXRlKHRoaXMuX3Byb2Nlc3NRdWV1ZSkgPT09ICdwZW5kaW5nJ1xuICAgICAgICApO1xuICAgICAgfTtcbiAgICAgIGRhdGEucHJvZ3Jlc3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9ncmVzcztcbiAgICAgIH07XG4gICAgICBkYXRhLnJlc3BvbnNlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzcG9uc2U7XG4gICAgICB9O1xuICAgIH0sXG5cbiAgICAvLyBQYXJzZXMgdGhlIFJhbmdlIGhlYWRlciBmcm9tIHRoZSBzZXJ2ZXIgcmVzcG9uc2VcbiAgICAvLyBhbmQgcmV0dXJucyB0aGUgdXBsb2FkZWQgYnl0ZXM6XG4gICAgX2dldFVwbG9hZGVkQnl0ZXM6IGZ1bmN0aW9uIChqcVhIUikge1xuICAgICAgdmFyIHJhbmdlID0ganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoJ1JhbmdlJyksXG4gICAgICAgIHBhcnRzID0gcmFuZ2UgJiYgcmFuZ2Uuc3BsaXQoJy0nKSxcbiAgICAgICAgdXBwZXJCeXRlc1BvcyA9IHBhcnRzICYmIHBhcnRzLmxlbmd0aCA+IDEgJiYgcGFyc2VJbnQocGFydHNbMV0sIDEwKTtcbiAgICAgIHJldHVybiB1cHBlckJ5dGVzUG9zICYmIHVwcGVyQnl0ZXNQb3MgKyAxO1xuICAgIH0sXG5cbiAgICAvLyBVcGxvYWRzIGEgZmlsZSBpbiBtdWx0aXBsZSwgc2VxdWVudGlhbCByZXF1ZXN0c1xuICAgIC8vIGJ5IHNwbGl0dGluZyB0aGUgZmlsZSB1cCBpbiBtdWx0aXBsZSBibG9iIGNodW5rcy5cbiAgICAvLyBJZiB0aGUgc2Vjb25kIHBhcmFtZXRlciBpcyB0cnVlLCBvbmx5IHRlc3RzIGlmIHRoZSBmaWxlXG4gICAgLy8gc2hvdWxkIGJlIHVwbG9hZGVkIGluIGNodW5rcywgYnV0IGRvZXMgbm90IGludm9rZSBhbnlcbiAgICAvLyB1cGxvYWQgcmVxdWVzdHM6XG4gICAgX2NodW5rZWRVcGxvYWQ6IGZ1bmN0aW9uIChvcHRpb25zLCB0ZXN0T25seSkge1xuICAgICAgb3B0aW9ucy51cGxvYWRlZEJ5dGVzID0gb3B0aW9ucy51cGxvYWRlZEJ5dGVzIHx8IDA7XG4gICAgICB2YXIgdGhhdCA9IHRoaXMsXG4gICAgICAgIGZpbGUgPSBvcHRpb25zLmZpbGVzWzBdLFxuICAgICAgICBmcyA9IGZpbGUuc2l6ZSxcbiAgICAgICAgdWIgPSBvcHRpb25zLnVwbG9hZGVkQnl0ZXMsXG4gICAgICAgIG1jcyA9IG9wdGlvbnMubWF4Q2h1bmtTaXplIHx8IGZzLFxuICAgICAgICBzbGljZSA9IHRoaXMuX2Jsb2JTbGljZSxcbiAgICAgICAgZGZkID0gJC5EZWZlcnJlZCgpLFxuICAgICAgICBwcm9taXNlID0gZGZkLnByb21pc2UoKSxcbiAgICAgICAganFYSFIsXG4gICAgICAgIHVwbG9hZDtcbiAgICAgIGlmIChcbiAgICAgICAgIShcbiAgICAgICAgICB0aGlzLl9pc1hIUlVwbG9hZChvcHRpb25zKSAmJlxuICAgICAgICAgIHNsaWNlICYmXG4gICAgICAgICAgKHViIHx8ICgkLnR5cGUobWNzKSA9PT0gJ2Z1bmN0aW9uJyA/IG1jcyhvcHRpb25zKSA6IG1jcykgPCBmcylcbiAgICAgICAgKSB8fFxuICAgICAgICBvcHRpb25zLmRhdGFcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAodGVzdE9ubHkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBpZiAodWIgPj0gZnMpIHtcbiAgICAgICAgZmlsZS5lcnJvciA9IG9wdGlvbnMuaTE4bigndXBsb2FkZWRCeXRlcycpO1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0WEhSUHJvbWlzZShmYWxzZSwgb3B0aW9ucy5jb250ZXh0LCBbXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIGZpbGUuZXJyb3JcbiAgICAgICAgXSk7XG4gICAgICB9XG4gICAgICAvLyBUaGUgY2h1bmsgdXBsb2FkIG1ldGhvZDpcbiAgICAgIHVwbG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gQ2xvbmUgdGhlIG9wdGlvbnMgb2JqZWN0IGZvciBlYWNoIGNodW5rIHVwbG9hZDpcbiAgICAgICAgdmFyIG8gPSAkLmV4dGVuZCh7fSwgb3B0aW9ucyksXG4gICAgICAgICAgY3VycmVudExvYWRlZCA9IG8uX3Byb2dyZXNzLmxvYWRlZDtcbiAgICAgICAgby5ibG9iID0gc2xpY2UuY2FsbChcbiAgICAgICAgICBmaWxlLFxuICAgICAgICAgIHViLFxuICAgICAgICAgIHViICsgKCQudHlwZShtY3MpID09PSAnZnVuY3Rpb24nID8gbWNzKG8pIDogbWNzKSxcbiAgICAgICAgICBmaWxlLnR5cGVcbiAgICAgICAgKTtcbiAgICAgICAgLy8gU3RvcmUgdGhlIGN1cnJlbnQgY2h1bmsgc2l6ZSwgYXMgdGhlIGJsb2IgaXRzZWxmXG4gICAgICAgIC8vIHdpbGwgYmUgZGVyZWZlcmVuY2VkIGFmdGVyIGRhdGEgcHJvY2Vzc2luZzpcbiAgICAgICAgby5jaHVua1NpemUgPSBvLmJsb2Iuc2l6ZTtcbiAgICAgICAgLy8gRXhwb3NlIHRoZSBjaHVuayBieXRlcyBwb3NpdGlvbiByYW5nZTpcbiAgICAgICAgby5jb250ZW50UmFuZ2UgPVxuICAgICAgICAgICdieXRlcyAnICsgdWIgKyAnLScgKyAodWIgKyBvLmNodW5rU2l6ZSAtIDEpICsgJy8nICsgZnM7XG4gICAgICAgIC8vIFRyaWdnZXIgY2h1bmtiZWZvcmVzZW5kIHRvIGFsbG93IGZvcm0gZGF0YSB0byBiZSB1cGRhdGVkIGZvciB0aGlzIGNodW5rXG4gICAgICAgIHRoYXQuX3RyaWdnZXIoJ2NodW5rYmVmb3Jlc2VuZCcsIG51bGwsIG8pO1xuICAgICAgICAvLyBQcm9jZXNzIHRoZSB1cGxvYWQgZGF0YSAodGhlIGJsb2IgYW5kIHBvdGVudGlhbCBmb3JtIGRhdGEpOlxuICAgICAgICB0aGF0Ll9pbml0WEhSRGF0YShvKTtcbiAgICAgICAgLy8gQWRkIHByb2dyZXNzIGxpc3RlbmVycyBmb3IgdGhpcyBjaHVuayB1cGxvYWQ6XG4gICAgICAgIHRoYXQuX2luaXRQcm9ncmVzc0xpc3RlbmVyKG8pO1xuICAgICAgICBqcVhIUiA9IChcbiAgICAgICAgICAodGhhdC5fdHJpZ2dlcignY2h1bmtzZW5kJywgbnVsbCwgbykgIT09IGZhbHNlICYmICQuYWpheChvKSkgfHxcbiAgICAgICAgICB0aGF0Ll9nZXRYSFJQcm9taXNlKGZhbHNlLCBvLmNvbnRleHQpXG4gICAgICAgIClcbiAgICAgICAgICAuZG9uZShmdW5jdGlvbiAocmVzdWx0LCB0ZXh0U3RhdHVzLCBqcVhIUikge1xuICAgICAgICAgICAgdWIgPSB0aGF0Ll9nZXRVcGxvYWRlZEJ5dGVzKGpxWEhSKSB8fCB1YiArIG8uY2h1bmtTaXplO1xuICAgICAgICAgICAgLy8gQ3JlYXRlIGEgcHJvZ3Jlc3MgZXZlbnQgaWYgbm8gZmluYWwgcHJvZ3Jlc3MgZXZlbnRcbiAgICAgICAgICAgIC8vIHdpdGggbG9hZGVkIGVxdWFsaW5nIHRvdGFsIGhhcyBiZWVuIHRyaWdnZXJlZFxuICAgICAgICAgICAgLy8gZm9yIHRoaXMgY2h1bms6XG4gICAgICAgICAgICBpZiAoY3VycmVudExvYWRlZCArIG8uY2h1bmtTaXplIC0gby5fcHJvZ3Jlc3MubG9hZGVkKSB7XG4gICAgICAgICAgICAgIHRoYXQuX29uUHJvZ3Jlc3MoXG4gICAgICAgICAgICAgICAgJC5FdmVudCgncHJvZ3Jlc3MnLCB7XG4gICAgICAgICAgICAgICAgICBsZW5ndGhDb21wdXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgbG9hZGVkOiB1YiAtIG8udXBsb2FkZWRCeXRlcyxcbiAgICAgICAgICAgICAgICAgIHRvdGFsOiB1YiAtIG8udXBsb2FkZWRCeXRlc1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIG9cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wdGlvbnMudXBsb2FkZWRCeXRlcyA9IG8udXBsb2FkZWRCeXRlcyA9IHViO1xuICAgICAgICAgICAgby5yZXN1bHQgPSByZXN1bHQ7XG4gICAgICAgICAgICBvLnRleHRTdGF0dXMgPSB0ZXh0U3RhdHVzO1xuICAgICAgICAgICAgby5qcVhIUiA9IGpxWEhSO1xuICAgICAgICAgICAgdGhhdC5fdHJpZ2dlcignY2h1bmtkb25lJywgbnVsbCwgbyk7XG4gICAgICAgICAgICB0aGF0Ll90cmlnZ2VyKCdjaHVua2Fsd2F5cycsIG51bGwsIG8pO1xuICAgICAgICAgICAgaWYgKHViIDwgZnMpIHtcbiAgICAgICAgICAgICAgLy8gRmlsZSB1cGxvYWQgbm90IHlldCBjb21wbGV0ZSxcbiAgICAgICAgICAgICAgLy8gY29udGludWUgd2l0aCB0aGUgbmV4dCBjaHVuazpcbiAgICAgICAgICAgICAgdXBsb2FkKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBkZmQucmVzb2x2ZVdpdGgoby5jb250ZXh0LCBbcmVzdWx0LCB0ZXh0U3RhdHVzLCBqcVhIUl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLmZhaWwoZnVuY3Rpb24gKGpxWEhSLCB0ZXh0U3RhdHVzLCBlcnJvclRocm93bikge1xuICAgICAgICAgICAgby5qcVhIUiA9IGpxWEhSO1xuICAgICAgICAgICAgby50ZXh0U3RhdHVzID0gdGV4dFN0YXR1cztcbiAgICAgICAgICAgIG8uZXJyb3JUaHJvd24gPSBlcnJvclRocm93bjtcbiAgICAgICAgICAgIHRoYXQuX3RyaWdnZXIoJ2NodW5rZmFpbCcsIG51bGwsIG8pO1xuICAgICAgICAgICAgdGhhdC5fdHJpZ2dlcignY2h1bmthbHdheXMnLCBudWxsLCBvKTtcbiAgICAgICAgICAgIGRmZC5yZWplY3RXaXRoKG8uY29udGV4dCwgW2pxWEhSLCB0ZXh0U3RhdHVzLCBlcnJvclRocm93bl0pO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmFsd2F5cyhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aGF0Ll9kZWluaXRQcm9ncmVzc0xpc3RlbmVyKG8pO1xuICAgICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIHRoaXMuX2VuaGFuY2VQcm9taXNlKHByb21pc2UpO1xuICAgICAgcHJvbWlzZS5hYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGpxWEhSLmFib3J0KCk7XG4gICAgICB9O1xuICAgICAgdXBsb2FkKCk7XG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9LFxuXG4gICAgX2JlZm9yZVNlbmQ6IGZ1bmN0aW9uIChlLCBkYXRhKSB7XG4gICAgICBpZiAodGhpcy5fYWN0aXZlID09PSAwKSB7XG4gICAgICAgIC8vIHRoZSBzdGFydCBjYWxsYmFjayBpcyB0cmlnZ2VyZWQgd2hlbiBhbiB1cGxvYWQgc3RhcnRzXG4gICAgICAgIC8vIGFuZCBubyBvdGhlciB1cGxvYWRzIGFyZSBjdXJyZW50bHkgcnVubmluZyxcbiAgICAgICAgLy8gZXF1aXZhbGVudCB0byB0aGUgZ2xvYmFsIGFqYXhTdGFydCBldmVudDpcbiAgICAgICAgdGhpcy5fdHJpZ2dlcignc3RhcnQnKTtcbiAgICAgICAgLy8gU2V0IHRpbWVyIGZvciBnbG9iYWwgYml0cmF0ZSBwcm9ncmVzcyBjYWxjdWxhdGlvbjpcbiAgICAgICAgdGhpcy5fYml0cmF0ZVRpbWVyID0gbmV3IHRoaXMuX0JpdHJhdGVUaW1lcigpO1xuICAgICAgICAvLyBSZXNldCB0aGUgZ2xvYmFsIHByb2dyZXNzIHZhbHVlczpcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MubG9hZGVkID0gdGhpcy5fcHJvZ3Jlc3MudG90YWwgPSAwO1xuICAgICAgICB0aGlzLl9wcm9ncmVzcy5iaXRyYXRlID0gMDtcbiAgICAgIH1cbiAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgY29udGFpbmVyIG9iamVjdHMgZm9yIHRoZSAucmVzcG9uc2UoKSBhbmRcbiAgICAgIC8vIC5wcm9ncmVzcygpIG1ldGhvZHMgb24gdGhlIGRhdGEgb2JqZWN0IGFyZSBhdmFpbGFibGVcbiAgICAgIC8vIGFuZCByZXNldCB0byB0aGVpciBpbml0aWFsIHN0YXRlOlxuICAgICAgdGhpcy5faW5pdFJlc3BvbnNlT2JqZWN0KGRhdGEpO1xuICAgICAgdGhpcy5faW5pdFByb2dyZXNzT2JqZWN0KGRhdGEpO1xuICAgICAgZGF0YS5fcHJvZ3Jlc3MubG9hZGVkID0gZGF0YS5sb2FkZWQgPSBkYXRhLnVwbG9hZGVkQnl0ZXMgfHwgMDtcbiAgICAgIGRhdGEuX3Byb2dyZXNzLnRvdGFsID0gZGF0YS50b3RhbCA9IHRoaXMuX2dldFRvdGFsKGRhdGEuZmlsZXMpIHx8IDE7XG4gICAgICBkYXRhLl9wcm9ncmVzcy5iaXRyYXRlID0gZGF0YS5iaXRyYXRlID0gMDtcbiAgICAgIHRoaXMuX2FjdGl2ZSArPSAxO1xuICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZ2xvYmFsIHByb2dyZXNzIHZhbHVlczpcbiAgICAgIHRoaXMuX3Byb2dyZXNzLmxvYWRlZCArPSBkYXRhLmxvYWRlZDtcbiAgICAgIHRoaXMuX3Byb2dyZXNzLnRvdGFsICs9IGRhdGEudG90YWw7XG4gICAgfSxcblxuICAgIF9vbkRvbmU6IGZ1bmN0aW9uIChyZXN1bHQsIHRleHRTdGF0dXMsIGpxWEhSLCBvcHRpb25zKSB7XG4gICAgICB2YXIgdG90YWwgPSBvcHRpb25zLl9wcm9ncmVzcy50b3RhbCxcbiAgICAgICAgcmVzcG9uc2UgPSBvcHRpb25zLl9yZXNwb25zZTtcbiAgICAgIGlmIChvcHRpb25zLl9wcm9ncmVzcy5sb2FkZWQgPCB0b3RhbCkge1xuICAgICAgICAvLyBDcmVhdGUgYSBwcm9ncmVzcyBldmVudCBpZiBubyBmaW5hbCBwcm9ncmVzcyBldmVudFxuICAgICAgICAvLyB3aXRoIGxvYWRlZCBlcXVhbGluZyB0b3RhbCBoYXMgYmVlbiB0cmlnZ2VyZWQ6XG4gICAgICAgIHRoaXMuX29uUHJvZ3Jlc3MoXG4gICAgICAgICAgJC5FdmVudCgncHJvZ3Jlc3MnLCB7XG4gICAgICAgICAgICBsZW5ndGhDb21wdXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgbG9hZGVkOiB0b3RhbCxcbiAgICAgICAgICAgIHRvdGFsOiB0b3RhbFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJlc3BvbnNlLnJlc3VsdCA9IG9wdGlvbnMucmVzdWx0ID0gcmVzdWx0O1xuICAgICAgcmVzcG9uc2UudGV4dFN0YXR1cyA9IG9wdGlvbnMudGV4dFN0YXR1cyA9IHRleHRTdGF0dXM7XG4gICAgICByZXNwb25zZS5qcVhIUiA9IG9wdGlvbnMuanFYSFIgPSBqcVhIUjtcbiAgICAgIHRoaXMuX3RyaWdnZXIoJ2RvbmUnLCBudWxsLCBvcHRpb25zKTtcbiAgICB9LFxuXG4gICAgX29uRmFpbDogZnVuY3Rpb24gKGpxWEhSLCB0ZXh0U3RhdHVzLCBlcnJvclRocm93biwgb3B0aW9ucykge1xuICAgICAgdmFyIHJlc3BvbnNlID0gb3B0aW9ucy5fcmVzcG9uc2U7XG4gICAgICBpZiAob3B0aW9ucy5yZWNhbGN1bGF0ZVByb2dyZXNzKSB7XG4gICAgICAgIC8vIFJlbW92ZSB0aGUgZmFpbGVkIChlcnJvciBvciBhYm9ydCkgZmlsZSB1cGxvYWQgZnJvbVxuICAgICAgICAvLyB0aGUgZ2xvYmFsIHByb2dyZXNzIGNhbGN1bGF0aW9uOlxuICAgICAgICB0aGlzLl9wcm9ncmVzcy5sb2FkZWQgLT0gb3B0aW9ucy5fcHJvZ3Jlc3MubG9hZGVkO1xuICAgICAgICB0aGlzLl9wcm9ncmVzcy50b3RhbCAtPSBvcHRpb25zLl9wcm9ncmVzcy50b3RhbDtcbiAgICAgIH1cbiAgICAgIHJlc3BvbnNlLmpxWEhSID0gb3B0aW9ucy5qcVhIUiA9IGpxWEhSO1xuICAgICAgcmVzcG9uc2UudGV4dFN0YXR1cyA9IG9wdGlvbnMudGV4dFN0YXR1cyA9IHRleHRTdGF0dXM7XG4gICAgICByZXNwb25zZS5lcnJvclRocm93biA9IG9wdGlvbnMuZXJyb3JUaHJvd24gPSBlcnJvclRocm93bjtcbiAgICAgIHRoaXMuX3RyaWdnZXIoJ2ZhaWwnLCBudWxsLCBvcHRpb25zKTtcbiAgICB9LFxuXG4gICAgX29uQWx3YXlzOiBmdW5jdGlvbiAoanFYSFJvclJlc3VsdCwgdGV4dFN0YXR1cywganFYSFJvckVycm9yLCBvcHRpb25zKSB7XG4gICAgICAvLyBqcVhIUm9yUmVzdWx0LCB0ZXh0U3RhdHVzIGFuZCBqcVhIUm9yRXJyb3IgYXJlIGFkZGVkIHRvIHRoZVxuICAgICAgLy8gb3B0aW9ucyBvYmplY3QgdmlhIGRvbmUgYW5kIGZhaWwgY2FsbGJhY2tzXG4gICAgICB0aGlzLl90cmlnZ2VyKCdhbHdheXMnLCBudWxsLCBvcHRpb25zKTtcbiAgICB9LFxuXG4gICAgX29uU2VuZDogZnVuY3Rpb24gKGUsIGRhdGEpIHtcbiAgICAgIGlmICghZGF0YS5zdWJtaXQpIHtcbiAgICAgICAgdGhpcy5fYWRkQ29udmVuaWVuY2VNZXRob2RzKGUsIGRhdGEpO1xuICAgICAgfVxuICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICBqcVhIUixcbiAgICAgICAgYWJvcnRlZCxcbiAgICAgICAgc2xvdCxcbiAgICAgICAgcGlwZSxcbiAgICAgICAgb3B0aW9ucyA9IHRoYXQuX2dldEFKQVhTZXR0aW5ncyhkYXRhKSxcbiAgICAgICAgc2VuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0aGF0Ll9zZW5kaW5nICs9IDE7XG4gICAgICAgICAgLy8gU2V0IHRpbWVyIGZvciBiaXRyYXRlIHByb2dyZXNzIGNhbGN1bGF0aW9uOlxuICAgICAgICAgIG9wdGlvbnMuX2JpdHJhdGVUaW1lciA9IG5ldyB0aGF0Ll9CaXRyYXRlVGltZXIoKTtcbiAgICAgICAgICBqcVhIUiA9XG4gICAgICAgICAgICBqcVhIUiB8fFxuICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAoKGFib3J0ZWQgfHxcbiAgICAgICAgICAgICAgICB0aGF0Ll90cmlnZ2VyKFxuICAgICAgICAgICAgICAgICAgJ3NlbmQnLFxuICAgICAgICAgICAgICAgICAgJC5FdmVudCgnc2VuZCcsIHsgZGVsZWdhdGVkRXZlbnQ6IGUgfSksXG4gICAgICAgICAgICAgICAgICBvcHRpb25zXG4gICAgICAgICAgICAgICAgKSA9PT0gZmFsc2UpICYmXG4gICAgICAgICAgICAgICAgdGhhdC5fZ2V0WEhSUHJvbWlzZShmYWxzZSwgb3B0aW9ucy5jb250ZXh0LCBhYm9ydGVkKSkgfHxcbiAgICAgICAgICAgICAgdGhhdC5fY2h1bmtlZFVwbG9hZChvcHRpb25zKSB8fFxuICAgICAgICAgICAgICAkLmFqYXgob3B0aW9ucylcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLmRvbmUoZnVuY3Rpb24gKHJlc3VsdCwgdGV4dFN0YXR1cywganFYSFIpIHtcbiAgICAgICAgICAgICAgICB0aGF0Ll9vbkRvbmUocmVzdWx0LCB0ZXh0U3RhdHVzLCBqcVhIUiwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5mYWlsKGZ1bmN0aW9uIChqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24pIHtcbiAgICAgICAgICAgICAgICB0aGF0Ll9vbkZhaWwoanFYSFIsIHRleHRTdGF0dXMsIGVycm9yVGhyb3duLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLmFsd2F5cyhmdW5jdGlvbiAoanFYSFJvclJlc3VsdCwgdGV4dFN0YXR1cywganFYSFJvckVycm9yKSB7XG4gICAgICAgICAgICAgICAgdGhhdC5fZGVpbml0UHJvZ3Jlc3NMaXN0ZW5lcihvcHRpb25zKTtcbiAgICAgICAgICAgICAgICB0aGF0Ll9vbkFsd2F5cyhcbiAgICAgICAgICAgICAgICAgIGpxWEhSb3JSZXN1bHQsXG4gICAgICAgICAgICAgICAgICB0ZXh0U3RhdHVzLFxuICAgICAgICAgICAgICAgICAganFYSFJvckVycm9yLFxuICAgICAgICAgICAgICAgICAgb3B0aW9uc1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhhdC5fc2VuZGluZyAtPSAxO1xuICAgICAgICAgICAgICAgIHRoYXQuX2FjdGl2ZSAtPSAxO1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIG9wdGlvbnMubGltaXRDb25jdXJyZW50VXBsb2FkcyAmJlxuICAgICAgICAgICAgICAgICAgb3B0aW9ucy5saW1pdENvbmN1cnJlbnRVcGxvYWRzID4gdGhhdC5fc2VuZGluZ1xuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgLy8gU3RhcnQgdGhlIG5leHQgcXVldWVkIHVwbG9hZCxcbiAgICAgICAgICAgICAgICAgIC8vIHRoYXQgaGFzIG5vdCBiZWVuIGFib3J0ZWQ6XG4gICAgICAgICAgICAgICAgICB2YXIgbmV4dFNsb3QgPSB0aGF0Ll9zbG90cy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgd2hpbGUgKG5leHRTbG90KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGF0Ll9nZXREZWZlcnJlZFN0YXRlKG5leHRTbG90KSA9PT0gJ3BlbmRpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgbmV4dFNsb3QucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG5leHRTbG90ID0gdGhhdC5fc2xvdHMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoYXQuX2FjdGl2ZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgLy8gVGhlIHN0b3AgY2FsbGJhY2sgaXMgdHJpZ2dlcmVkIHdoZW4gYWxsIHVwbG9hZHMgaGF2ZVxuICAgICAgICAgICAgICAgICAgLy8gYmVlbiBjb21wbGV0ZWQsIGVxdWl2YWxlbnQgdG8gdGhlIGdsb2JhbCBhamF4U3RvcCBldmVudDpcbiAgICAgICAgICAgICAgICAgIHRoYXQuX3RyaWdnZXIoJ3N0b3AnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBqcVhIUjtcbiAgICAgICAgfTtcbiAgICAgIHRoaXMuX2JlZm9yZVNlbmQoZSwgb3B0aW9ucyk7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMub3B0aW9ucy5zZXF1ZW50aWFsVXBsb2FkcyB8fFxuICAgICAgICAodGhpcy5vcHRpb25zLmxpbWl0Q29uY3VycmVudFVwbG9hZHMgJiZcbiAgICAgICAgICB0aGlzLm9wdGlvbnMubGltaXRDb25jdXJyZW50VXBsb2FkcyA8PSB0aGlzLl9zZW5kaW5nKVxuICAgICAgKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMubGltaXRDb25jdXJyZW50VXBsb2FkcyA+IDEpIHtcbiAgICAgICAgICBzbG90ID0gJC5EZWZlcnJlZCgpO1xuICAgICAgICAgIHRoaXMuX3Nsb3RzLnB1c2goc2xvdCk7XG4gICAgICAgICAgcGlwZSA9IHNsb3RbdGhhdC5fcHJvbWlzZVBpcGVdKHNlbmQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX3NlcXVlbmNlID0gdGhpcy5fc2VxdWVuY2VbdGhhdC5fcHJvbWlzZVBpcGVdKHNlbmQsIHNlbmQpO1xuICAgICAgICAgIHBpcGUgPSB0aGlzLl9zZXF1ZW5jZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBSZXR1cm4gdGhlIHBpcGVkIFByb21pc2Ugb2JqZWN0LCBlbmhhbmNlZCB3aXRoIGFuIGFib3J0IG1ldGhvZCxcbiAgICAgICAgLy8gd2hpY2ggaXMgZGVsZWdhdGVkIHRvIHRoZSBqcVhIUiBvYmplY3Qgb2YgdGhlIGN1cnJlbnQgdXBsb2FkLFxuICAgICAgICAvLyBhbmQganFYSFIgY2FsbGJhY2tzIG1hcHBlZCB0byB0aGUgZXF1aXZhbGVudCBQcm9taXNlIG1ldGhvZHM6XG4gICAgICAgIHBpcGUuYWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgYWJvcnRlZCA9IFt1bmRlZmluZWQsICdhYm9ydCcsICdhYm9ydCddO1xuICAgICAgICAgIGlmICghanFYSFIpIHtcbiAgICAgICAgICAgIGlmIChzbG90KSB7XG4gICAgICAgICAgICAgIHNsb3QucmVqZWN0V2l0aChvcHRpb25zLmNvbnRleHQsIGFib3J0ZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHNlbmQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGpxWEhSLmFib3J0KCk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB0aGlzLl9lbmhhbmNlUHJvbWlzZShwaXBlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZW5kKCk7XG4gICAgfSxcblxuICAgIF9vbkFkZDogZnVuY3Rpb24gKGUsIGRhdGEpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcyxcbiAgICAgICAgcmVzdWx0ID0gdHJ1ZSxcbiAgICAgICAgb3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCB0aGlzLm9wdGlvbnMsIGRhdGEpLFxuICAgICAgICBmaWxlcyA9IGRhdGEuZmlsZXMsXG4gICAgICAgIGZpbGVzTGVuZ3RoID0gZmlsZXMubGVuZ3RoLFxuICAgICAgICBsaW1pdCA9IG9wdGlvbnMubGltaXRNdWx0aUZpbGVVcGxvYWRzLFxuICAgICAgICBsaW1pdFNpemUgPSBvcHRpb25zLmxpbWl0TXVsdGlGaWxlVXBsb2FkU2l6ZSxcbiAgICAgICAgb3ZlcmhlYWQgPSBvcHRpb25zLmxpbWl0TXVsdGlGaWxlVXBsb2FkU2l6ZU92ZXJoZWFkLFxuICAgICAgICBiYXRjaFNpemUgPSAwLFxuICAgICAgICBwYXJhbU5hbWUgPSB0aGlzLl9nZXRQYXJhbU5hbWUob3B0aW9ucyksXG4gICAgICAgIHBhcmFtTmFtZVNldCxcbiAgICAgICAgcGFyYW1OYW1lU2xpY2UsXG4gICAgICAgIGZpbGVTZXQsXG4gICAgICAgIGksXG4gICAgICAgIGogPSAwO1xuICAgICAgaWYgKCFmaWxlc0xlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAobGltaXRTaXplICYmIGZpbGVzWzBdLnNpemUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsaW1pdFNpemUgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgICEob3B0aW9ucy5zaW5nbGVGaWxlVXBsb2FkcyB8fCBsaW1pdCB8fCBsaW1pdFNpemUpIHx8XG4gICAgICAgICF0aGlzLl9pc1hIUlVwbG9hZChvcHRpb25zKVxuICAgICAgKSB7XG4gICAgICAgIGZpbGVTZXQgPSBbZmlsZXNdO1xuICAgICAgICBwYXJhbU5hbWVTZXQgPSBbcGFyYW1OYW1lXTtcbiAgICAgIH0gZWxzZSBpZiAoIShvcHRpb25zLnNpbmdsZUZpbGVVcGxvYWRzIHx8IGxpbWl0U2l6ZSkgJiYgbGltaXQpIHtcbiAgICAgICAgZmlsZVNldCA9IFtdO1xuICAgICAgICBwYXJhbU5hbWVTZXQgPSBbXTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGZpbGVzTGVuZ3RoOyBpICs9IGxpbWl0KSB7XG4gICAgICAgICAgZmlsZVNldC5wdXNoKGZpbGVzLnNsaWNlKGksIGkgKyBsaW1pdCkpO1xuICAgICAgICAgIHBhcmFtTmFtZVNsaWNlID0gcGFyYW1OYW1lLnNsaWNlKGksIGkgKyBsaW1pdCk7XG4gICAgICAgICAgaWYgKCFwYXJhbU5hbWVTbGljZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHBhcmFtTmFtZVNsaWNlID0gcGFyYW1OYW1lO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwYXJhbU5hbWVTZXQucHVzaChwYXJhbU5hbWVTbGljZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIW9wdGlvbnMuc2luZ2xlRmlsZVVwbG9hZHMgJiYgbGltaXRTaXplKSB7XG4gICAgICAgIGZpbGVTZXQgPSBbXTtcbiAgICAgICAgcGFyYW1OYW1lU2V0ID0gW107XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBmaWxlc0xlbmd0aDsgaSA9IGkgKyAxKSB7XG4gICAgICAgICAgYmF0Y2hTaXplICs9IGZpbGVzW2ldLnNpemUgKyBvdmVyaGVhZDtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBpICsgMSA9PT0gZmlsZXNMZW5ndGggfHxcbiAgICAgICAgICAgIGJhdGNoU2l6ZSArIGZpbGVzW2kgKyAxXS5zaXplICsgb3ZlcmhlYWQgPiBsaW1pdFNpemUgfHxcbiAgICAgICAgICAgIChsaW1pdCAmJiBpICsgMSAtIGogPj0gbGltaXQpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBmaWxlU2V0LnB1c2goZmlsZXMuc2xpY2UoaiwgaSArIDEpKTtcbiAgICAgICAgICAgIHBhcmFtTmFtZVNsaWNlID0gcGFyYW1OYW1lLnNsaWNlKGosIGkgKyAxKTtcbiAgICAgICAgICAgIGlmICghcGFyYW1OYW1lU2xpY2UubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHBhcmFtTmFtZVNsaWNlID0gcGFyYW1OYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGFyYW1OYW1lU2V0LnB1c2gocGFyYW1OYW1lU2xpY2UpO1xuICAgICAgICAgICAgaiA9IGkgKyAxO1xuICAgICAgICAgICAgYmF0Y2hTaXplID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcmFtTmFtZVNldCA9IHBhcmFtTmFtZTtcbiAgICAgIH1cbiAgICAgIGRhdGEub3JpZ2luYWxGaWxlcyA9IGZpbGVzO1xuICAgICAgJC5lYWNoKGZpbGVTZXQgfHwgZmlsZXMsIGZ1bmN0aW9uIChpbmRleCwgZWxlbWVudCkge1xuICAgICAgICB2YXIgbmV3RGF0YSA9ICQuZXh0ZW5kKHt9LCBkYXRhKTtcbiAgICAgICAgbmV3RGF0YS5maWxlcyA9IGZpbGVTZXQgPyBlbGVtZW50IDogW2VsZW1lbnRdO1xuICAgICAgICBuZXdEYXRhLnBhcmFtTmFtZSA9IHBhcmFtTmFtZVNldFtpbmRleF07XG4gICAgICAgIHRoYXQuX2luaXRSZXNwb25zZU9iamVjdChuZXdEYXRhKTtcbiAgICAgICAgdGhhdC5faW5pdFByb2dyZXNzT2JqZWN0KG5ld0RhdGEpO1xuICAgICAgICB0aGF0Ll9hZGRDb252ZW5pZW5jZU1ldGhvZHMoZSwgbmV3RGF0YSk7XG4gICAgICAgIHJlc3VsdCA9IHRoYXQuX3RyaWdnZXIoXG4gICAgICAgICAgJ2FkZCcsXG4gICAgICAgICAgJC5FdmVudCgnYWRkJywgeyBkZWxlZ2F0ZWRFdmVudDogZSB9KSxcbiAgICAgICAgICBuZXdEYXRhXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIF9yZXBsYWNlRmlsZUlucHV0OiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgdmFyIGlucHV0ID0gZGF0YS5maWxlSW5wdXQsXG4gICAgICAgIGlucHV0Q2xvbmUgPSBpbnB1dC5jbG9uZSh0cnVlKSxcbiAgICAgICAgcmVzdG9yZUZvY3VzID0gaW5wdXQuaXMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCk7XG4gICAgICAvLyBBZGQgYSByZWZlcmVuY2UgZm9yIHRoZSBuZXcgY2xvbmVkIGZpbGUgaW5wdXQgdG8gdGhlIGRhdGEgYXJndW1lbnQ6XG4gICAgICBkYXRhLmZpbGVJbnB1dENsb25lID0gaW5wdXRDbG9uZTtcbiAgICAgICQoJzxmb3JtPjwvZm9ybT4nKS5hcHBlbmQoaW5wdXRDbG9uZSlbMF0ucmVzZXQoKTtcbiAgICAgIC8vIERldGFjaGluZyBhbGxvd3MgdG8gaW5zZXJ0IHRoZSBmaWxlSW5wdXQgb24gYW5vdGhlciBmb3JtXG4gICAgICAvLyB3aXRob3V0IGxvc2luZyB0aGUgZmlsZSBpbnB1dCB2YWx1ZTpcbiAgICAgIGlucHV0LmFmdGVyKGlucHV0Q2xvbmUpLmRldGFjaCgpO1xuICAgICAgLy8gSWYgdGhlIGZpbGVJbnB1dCBoYWQgZm9jdXMgYmVmb3JlIGl0IHdhcyBkZXRhY2hlZCxcbiAgICAgIC8vIHJlc3RvcmUgZm9jdXMgdG8gdGhlIGlucHV0Q2xvbmUuXG4gICAgICBpZiAocmVzdG9yZUZvY3VzKSB7XG4gICAgICAgIGlucHV0Q2xvbmUudHJpZ2dlcignZm9jdXMnKTtcbiAgICAgIH1cbiAgICAgIC8vIEF2b2lkIG1lbW9yeSBsZWFrcyB3aXRoIHRoZSBkZXRhY2hlZCBmaWxlIGlucHV0OlxuICAgICAgJC5jbGVhbkRhdGEoaW5wdXQub2ZmKCdyZW1vdmUnKSk7XG4gICAgICAvLyBSZXBsYWNlIHRoZSBvcmlnaW5hbCBmaWxlIGlucHV0IGVsZW1lbnQgaW4gdGhlIGZpbGVJbnB1dFxuICAgICAgLy8gZWxlbWVudHMgc2V0IHdpdGggdGhlIGNsb25lLCB3aGljaCBoYXMgYmVlbiBjb3BpZWQgaW5jbHVkaW5nXG4gICAgICAvLyBldmVudCBoYW5kbGVyczpcbiAgICAgIHRoaXMub3B0aW9ucy5maWxlSW5wdXQgPSB0aGlzLm9wdGlvbnMuZmlsZUlucHV0Lm1hcChmdW5jdGlvbiAoaSwgZWwpIHtcbiAgICAgICAgaWYgKGVsID09PSBpbnB1dFswXSkge1xuICAgICAgICAgIHJldHVybiBpbnB1dENsb25lWzBdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbDtcbiAgICAgIH0pO1xuICAgICAgLy8gSWYgdGhlIHdpZGdldCBoYXMgYmVlbiBpbml0aWFsaXplZCBvbiB0aGUgZmlsZSBpbnB1dCBpdHNlbGYsXG4gICAgICAvLyBvdmVycmlkZSB0aGlzLmVsZW1lbnQgd2l0aCB0aGUgZmlsZSBpbnB1dCBjbG9uZTpcbiAgICAgIGlmIChpbnB1dFswXSA9PT0gdGhpcy5lbGVtZW50WzBdKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudCA9IGlucHV0Q2xvbmU7XG4gICAgICB9XG4gICAgfSxcblxuICAgIF9oYW5kbGVGaWxlVHJlZUVudHJ5OiBmdW5jdGlvbiAoZW50cnksIHBhdGgpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcyxcbiAgICAgICAgZGZkID0gJC5EZWZlcnJlZCgpLFxuICAgICAgICBlbnRyaWVzID0gW10sXG4gICAgICAgIGRpclJlYWRlcixcbiAgICAgICAgZXJyb3JIYW5kbGVyID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICBpZiAoZSAmJiAhZS5lbnRyeSkge1xuICAgICAgICAgICAgZS5lbnRyeSA9IGVudHJ5O1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBTaW5jZSAkLndoZW4gcmV0dXJucyBpbW1lZGlhdGVseSBpZiBvbmVcbiAgICAgICAgICAvLyBEZWZlcnJlZCBpcyByZWplY3RlZCwgd2UgdXNlIHJlc29sdmUgaW5zdGVhZC5cbiAgICAgICAgICAvLyBUaGlzIGFsbG93cyB2YWxpZCBmaWxlcyBhbmQgaW52YWxpZCBpdGVtc1xuICAgICAgICAgIC8vIHRvIGJlIHJldHVybmVkIHRvZ2V0aGVyIGluIG9uZSBzZXQ6XG4gICAgICAgICAgZGZkLnJlc29sdmUoW2VdKTtcbiAgICAgICAgfSxcbiAgICAgICAgc3VjY2Vzc0hhbmRsZXIgPSBmdW5jdGlvbiAoZW50cmllcykge1xuICAgICAgICAgIHRoYXRcbiAgICAgICAgICAgIC5faGFuZGxlRmlsZVRyZWVFbnRyaWVzKGVudHJpZXMsIHBhdGggKyBlbnRyeS5uYW1lICsgJy8nKVxuICAgICAgICAgICAgLmRvbmUoZnVuY3Rpb24gKGZpbGVzKSB7XG4gICAgICAgICAgICAgIGRmZC5yZXNvbHZlKGZpbGVzKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuZmFpbChlcnJvckhhbmRsZXIpO1xuICAgICAgICB9LFxuICAgICAgICByZWFkRW50cmllcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBkaXJSZWFkZXIucmVhZEVudHJpZXMoZnVuY3Rpb24gKHJlc3VsdHMpIHtcbiAgICAgICAgICAgIGlmICghcmVzdWx0cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgc3VjY2Vzc0hhbmRsZXIoZW50cmllcyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBlbnRyaWVzID0gZW50cmllcy5jb25jYXQocmVzdWx0cyk7XG4gICAgICAgICAgICAgIHJlYWRFbnRyaWVzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSwgZXJyb3JIYW5kbGVyKTtcbiAgICAgICAgfTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgcGF0aCA9IHBhdGggfHwgJyc7XG4gICAgICBpZiAoZW50cnkuaXNGaWxlKSB7XG4gICAgICAgIGlmIChlbnRyeS5fZmlsZSkge1xuICAgICAgICAgIC8vIFdvcmthcm91bmQgZm9yIENocm9tZSBidWcgIzE0OTczNVxuICAgICAgICAgIGVudHJ5Ll9maWxlLnJlbGF0aXZlUGF0aCA9IHBhdGg7XG4gICAgICAgICAgZGZkLnJlc29sdmUoZW50cnkuX2ZpbGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVudHJ5LmZpbGUoZnVuY3Rpb24gKGZpbGUpIHtcbiAgICAgICAgICAgIGZpbGUucmVsYXRpdmVQYXRoID0gcGF0aDtcbiAgICAgICAgICAgIGRmZC5yZXNvbHZlKGZpbGUpO1xuICAgICAgICAgIH0sIGVycm9ySGFuZGxlcik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZW50cnkuaXNEaXJlY3RvcnkpIHtcbiAgICAgICAgZGlyUmVhZGVyID0gZW50cnkuY3JlYXRlUmVhZGVyKCk7XG4gICAgICAgIHJlYWRFbnRyaWVzKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBSZXR1cm4gYW4gZW1wdHkgbGlzdCBmb3IgZmlsZSBzeXN0ZW0gaXRlbXNcbiAgICAgICAgLy8gb3RoZXIgdGhhbiBmaWxlcyBvciBkaXJlY3RvcmllczpcbiAgICAgICAgZGZkLnJlc29sdmUoW10pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRmZC5wcm9taXNlKCk7XG4gICAgfSxcblxuICAgIF9oYW5kbGVGaWxlVHJlZUVudHJpZXM6IGZ1bmN0aW9uIChlbnRyaWVzLCBwYXRoKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICByZXR1cm4gJC53aGVuXG4gICAgICAgIC5hcHBseShcbiAgICAgICAgICAkLFxuICAgICAgICAgICQubWFwKGVudHJpZXMsIGZ1bmN0aW9uIChlbnRyeSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoYXQuX2hhbmRsZUZpbGVUcmVlRW50cnkoZW50cnksIHBhdGgpO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgW3RoaXMuX3Byb21pc2VQaXBlXShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sIGFyZ3VtZW50cyk7XG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBfZ2V0RHJvcHBlZEZpbGVzOiBmdW5jdGlvbiAoZGF0YVRyYW5zZmVyKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgIGRhdGFUcmFuc2ZlciA9IGRhdGFUcmFuc2ZlciB8fCB7fTtcbiAgICAgIHZhciBpdGVtcyA9IGRhdGFUcmFuc2Zlci5pdGVtcztcbiAgICAgIGlmIChcbiAgICAgICAgaXRlbXMgJiZcbiAgICAgICAgaXRlbXMubGVuZ3RoICYmXG4gICAgICAgIChpdGVtc1swXS53ZWJraXRHZXRBc0VudHJ5IHx8IGl0ZW1zWzBdLmdldEFzRW50cnkpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hhbmRsZUZpbGVUcmVlRW50cmllcyhcbiAgICAgICAgICAkLm1hcChpdGVtcywgZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgIHZhciBlbnRyeTtcbiAgICAgICAgICAgIGlmIChpdGVtLndlYmtpdEdldEFzRW50cnkpIHtcbiAgICAgICAgICAgICAgZW50cnkgPSBpdGVtLndlYmtpdEdldEFzRW50cnkoKTtcbiAgICAgICAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgQ2hyb21lIGJ1ZyAjMTQ5NzM1OlxuICAgICAgICAgICAgICAgIGVudHJ5Ll9maWxlID0gaXRlbS5nZXRBc0ZpbGUoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gZW50cnk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaXRlbS5nZXRBc0VudHJ5KCk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAkLkRlZmVycmVkKCkucmVzb2x2ZSgkLm1ha2VBcnJheShkYXRhVHJhbnNmZXIuZmlsZXMpKS5wcm9taXNlKCk7XG4gICAgfSxcblxuICAgIF9nZXRTaW5nbGVGaWxlSW5wdXRGaWxlczogZnVuY3Rpb24gKGZpbGVJbnB1dCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICBmaWxlSW5wdXQgPSAkKGZpbGVJbnB1dCk7XG4gICAgICB2YXIgZW50cmllcyA9IGZpbGVJbnB1dC5wcm9wKCdlbnRyaWVzJyksXG4gICAgICAgIGZpbGVzLFxuICAgICAgICB2YWx1ZTtcbiAgICAgIGlmIChlbnRyaWVzICYmIGVudHJpZXMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYW5kbGVGaWxlVHJlZUVudHJpZXMoZW50cmllcyk7XG4gICAgICB9XG4gICAgICBmaWxlcyA9ICQubWFrZUFycmF5KGZpbGVJbnB1dC5wcm9wKCdmaWxlcycpKTtcbiAgICAgIGlmICghZmlsZXMubGVuZ3RoKSB7XG4gICAgICAgIHZhbHVlID0gZmlsZUlucHV0LnByb3AoJ3ZhbHVlJyk7XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gJC5EZWZlcnJlZCgpLnJlc29sdmUoW10pLnByb21pc2UoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBJZiB0aGUgZmlsZXMgcHJvcGVydHkgaXMgbm90IGF2YWlsYWJsZSwgdGhlIGJyb3dzZXIgZG9lcyBub3RcbiAgICAgICAgLy8gc3VwcG9ydCB0aGUgRmlsZSBBUEkgYW5kIHdlIGFkZCBhIHBzZXVkbyBGaWxlIG9iamVjdCB3aXRoXG4gICAgICAgIC8vIHRoZSBpbnB1dCB2YWx1ZSBhcyBuYW1lIHdpdGggcGF0aCBpbmZvcm1hdGlvbiByZW1vdmVkOlxuICAgICAgICBmaWxlcyA9IFt7IG5hbWU6IHZhbHVlLnJlcGxhY2UoL14uKlxcXFwvLCAnJykgfV07XG4gICAgICB9IGVsc2UgaWYgKGZpbGVzWzBdLm5hbWUgPT09IHVuZGVmaW5lZCAmJiBmaWxlc1swXS5maWxlTmFtZSkge1xuICAgICAgICAvLyBGaWxlIG5vcm1hbGl6YXRpb24gZm9yIFNhZmFyaSA0IGFuZCBGaXJlZm94IDM6XG4gICAgICAgICQuZWFjaChmaWxlcywgZnVuY3Rpb24gKGluZGV4LCBmaWxlKSB7XG4gICAgICAgICAgZmlsZS5uYW1lID0gZmlsZS5maWxlTmFtZTtcbiAgICAgICAgICBmaWxlLnNpemUgPSBmaWxlLmZpbGVTaXplO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAkLkRlZmVycmVkKCkucmVzb2x2ZShmaWxlcykucHJvbWlzZSgpO1xuICAgIH0sXG5cbiAgICBfZ2V0RmlsZUlucHV0RmlsZXM6IGZ1bmN0aW9uIChmaWxlSW5wdXQpIHtcbiAgICAgIGlmICghKGZpbGVJbnB1dCBpbnN0YW5jZW9mICQpIHx8IGZpbGVJbnB1dC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldFNpbmdsZUZpbGVJbnB1dEZpbGVzKGZpbGVJbnB1dCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gJC53aGVuXG4gICAgICAgIC5hcHBseSgkLCAkLm1hcChmaWxlSW5wdXQsIHRoaXMuX2dldFNpbmdsZUZpbGVJbnB1dEZpbGVzKSlcbiAgICAgICAgW3RoaXMuX3Byb21pc2VQaXBlXShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sIGFyZ3VtZW50cyk7XG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBfb25DaGFuZ2U6IGZ1bmN0aW9uIChlKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXMsXG4gICAgICAgIGRhdGEgPSB7XG4gICAgICAgICAgZmlsZUlucHV0OiAkKGUudGFyZ2V0KSxcbiAgICAgICAgICBmb3JtOiAkKGUudGFyZ2V0LmZvcm0pXG4gICAgICAgIH07XG4gICAgICB0aGlzLl9nZXRGaWxlSW5wdXRGaWxlcyhkYXRhLmZpbGVJbnB1dCkuYWx3YXlzKGZ1bmN0aW9uIChmaWxlcykge1xuICAgICAgICBkYXRhLmZpbGVzID0gZmlsZXM7XG4gICAgICAgIGlmICh0aGF0Lm9wdGlvbnMucmVwbGFjZUZpbGVJbnB1dCkge1xuICAgICAgICAgIHRoYXQuX3JlcGxhY2VGaWxlSW5wdXQoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoYXQuX3RyaWdnZXIoXG4gICAgICAgICAgICAnY2hhbmdlJyxcbiAgICAgICAgICAgICQuRXZlbnQoJ2NoYW5nZScsIHsgZGVsZWdhdGVkRXZlbnQ6IGUgfSksXG4gICAgICAgICAgICBkYXRhXG4gICAgICAgICAgKSAhPT0gZmFsc2VcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhhdC5fb25BZGQoZSwgZGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBfb25QYXN0ZTogZnVuY3Rpb24gKGUpIHtcbiAgICAgIHZhciBpdGVtcyA9XG4gICAgICAgICAgZS5vcmlnaW5hbEV2ZW50ICYmXG4gICAgICAgICAgZS5vcmlnaW5hbEV2ZW50LmNsaXBib2FyZERhdGEgJiZcbiAgICAgICAgICBlLm9yaWdpbmFsRXZlbnQuY2xpcGJvYXJkRGF0YS5pdGVtcyxcbiAgICAgICAgZGF0YSA9IHsgZmlsZXM6IFtdIH07XG4gICAgICBpZiAoaXRlbXMgJiYgaXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICQuZWFjaChpdGVtcywgZnVuY3Rpb24gKGluZGV4LCBpdGVtKSB7XG4gICAgICAgICAgdmFyIGZpbGUgPSBpdGVtLmdldEFzRmlsZSAmJiBpdGVtLmdldEFzRmlsZSgpO1xuICAgICAgICAgIGlmIChmaWxlKSB7XG4gICAgICAgICAgICBkYXRhLmZpbGVzLnB1c2goZmlsZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuX3RyaWdnZXIoXG4gICAgICAgICAgICAncGFzdGUnLFxuICAgICAgICAgICAgJC5FdmVudCgncGFzdGUnLCB7IGRlbGVnYXRlZEV2ZW50OiBlIH0pLFxuICAgICAgICAgICAgZGF0YVxuICAgICAgICAgICkgIT09IGZhbHNlXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuX29uQWRkKGUsIGRhdGEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIF9vbkRyb3A6IGZ1bmN0aW9uIChlKSB7XG4gICAgICBlLmRhdGFUcmFuc2ZlciA9IGUub3JpZ2luYWxFdmVudCAmJiBlLm9yaWdpbmFsRXZlbnQuZGF0YVRyYW5zZmVyO1xuICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICBkYXRhVHJhbnNmZXIgPSBlLmRhdGFUcmFuc2ZlcixcbiAgICAgICAgZGF0YSA9IHt9O1xuICAgICAgaWYgKGRhdGFUcmFuc2ZlciAmJiBkYXRhVHJhbnNmZXIuZmlsZXMgJiYgZGF0YVRyYW5zZmVyLmZpbGVzLmxlbmd0aCkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuX2dldERyb3BwZWRGaWxlcyhkYXRhVHJhbnNmZXIpLmFsd2F5cyhmdW5jdGlvbiAoZmlsZXMpIHtcbiAgICAgICAgICBkYXRhLmZpbGVzID0gZmlsZXM7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhhdC5fdHJpZ2dlcihcbiAgICAgICAgICAgICAgJ2Ryb3AnLFxuICAgICAgICAgICAgICAkLkV2ZW50KCdkcm9wJywgeyBkZWxlZ2F0ZWRFdmVudDogZSB9KSxcbiAgICAgICAgICAgICAgZGF0YVxuICAgICAgICAgICAgKSAhPT0gZmFsc2VcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoYXQuX29uQWRkKGUsIGRhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIF9vbkRyYWdPdmVyOiBnZXREcmFnSGFuZGxlcignZHJhZ292ZXInKSxcblxuICAgIF9vbkRyYWdFbnRlcjogZ2V0RHJhZ0hhbmRsZXIoJ2RyYWdlbnRlcicpLFxuXG4gICAgX29uRHJhZ0xlYXZlOiBnZXREcmFnSGFuZGxlcignZHJhZ2xlYXZlJyksXG5cbiAgICBfaW5pdEV2ZW50SGFuZGxlcnM6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICh0aGlzLl9pc1hIUlVwbG9hZCh0aGlzLm9wdGlvbnMpKSB7XG4gICAgICAgIHRoaXMuX29uKHRoaXMub3B0aW9ucy5kcm9wWm9uZSwge1xuICAgICAgICAgIGRyYWdvdmVyOiB0aGlzLl9vbkRyYWdPdmVyLFxuICAgICAgICAgIGRyb3A6IHRoaXMuX29uRHJvcCxcbiAgICAgICAgICAvLyBldmVudC5wcmV2ZW50RGVmYXVsdCgpIG9uIGRyYWdlbnRlciBpcyByZXF1aXJlZCBmb3IgSUUxMCs6XG4gICAgICAgICAgZHJhZ2VudGVyOiB0aGlzLl9vbkRyYWdFbnRlcixcbiAgICAgICAgICAvLyBkcmFnbGVhdmUgaXMgbm90IHJlcXVpcmVkLCBidXQgYWRkZWQgZm9yIGNvbXBsZXRlbmVzczpcbiAgICAgICAgICBkcmFnbGVhdmU6IHRoaXMuX29uRHJhZ0xlYXZlXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9vbih0aGlzLm9wdGlvbnMucGFzdGVab25lLCB7XG4gICAgICAgICAgcGFzdGU6IHRoaXMuX29uUGFzdGVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoJC5zdXBwb3J0LmZpbGVJbnB1dCkge1xuICAgICAgICB0aGlzLl9vbih0aGlzLm9wdGlvbnMuZmlsZUlucHV0LCB7XG4gICAgICAgICAgY2hhbmdlOiB0aGlzLl9vbkNoYW5nZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX2Rlc3Ryb3lFdmVudEhhbmRsZXJzOiBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGlzLl9vZmYodGhpcy5vcHRpb25zLmRyb3Bab25lLCAnZHJhZ2VudGVyIGRyYWdsZWF2ZSBkcmFnb3ZlciBkcm9wJyk7XG4gICAgICB0aGlzLl9vZmYodGhpcy5vcHRpb25zLnBhc3RlWm9uZSwgJ3Bhc3RlJyk7XG4gICAgICB0aGlzLl9vZmYodGhpcy5vcHRpb25zLmZpbGVJbnB1dCwgJ2NoYW5nZScpO1xuICAgIH0sXG5cbiAgICBfZGVzdHJveTogZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcy5fZGVzdHJveUV2ZW50SGFuZGxlcnMoKTtcbiAgICB9LFxuXG4gICAgX3NldE9wdGlvbjogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgIHZhciByZWluaXQgPSAkLmluQXJyYXkoa2V5LCB0aGlzLl9zcGVjaWFsT3B0aW9ucykgIT09IC0xO1xuICAgICAgaWYgKHJlaW5pdCkge1xuICAgICAgICB0aGlzLl9kZXN0cm95RXZlbnRIYW5kbGVycygpO1xuICAgICAgfVxuICAgICAgdGhpcy5fc3VwZXIoa2V5LCB2YWx1ZSk7XG4gICAgICBpZiAocmVpbml0KSB7XG4gICAgICAgIHRoaXMuX2luaXRTcGVjaWFsT3B0aW9ucygpO1xuICAgICAgICB0aGlzLl9pbml0RXZlbnRIYW5kbGVycygpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBfaW5pdFNwZWNpYWxPcHRpb25zOiBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgIGlmIChvcHRpb25zLmZpbGVJbnB1dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG9wdGlvbnMuZmlsZUlucHV0ID0gdGhpcy5lbGVtZW50LmlzKCdpbnB1dFt0eXBlPVwiZmlsZVwiXScpXG4gICAgICAgICAgPyB0aGlzLmVsZW1lbnRcbiAgICAgICAgICA6IHRoaXMuZWxlbWVudC5maW5kKCdpbnB1dFt0eXBlPVwiZmlsZVwiXScpO1xuICAgICAgfSBlbHNlIGlmICghKG9wdGlvbnMuZmlsZUlucHV0IGluc3RhbmNlb2YgJCkpIHtcbiAgICAgICAgb3B0aW9ucy5maWxlSW5wdXQgPSAkKG9wdGlvbnMuZmlsZUlucHV0KTtcbiAgICAgIH1cbiAgICAgIGlmICghKG9wdGlvbnMuZHJvcFpvbmUgaW5zdGFuY2VvZiAkKSkge1xuICAgICAgICBvcHRpb25zLmRyb3Bab25lID0gJChvcHRpb25zLmRyb3Bab25lKTtcbiAgICAgIH1cbiAgICAgIGlmICghKG9wdGlvbnMucGFzdGVab25lIGluc3RhbmNlb2YgJCkpIHtcbiAgICAgICAgb3B0aW9ucy5wYXN0ZVpvbmUgPSAkKG9wdGlvbnMucGFzdGVab25lKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX2dldFJlZ0V4cDogZnVuY3Rpb24gKHN0cikge1xuICAgICAgdmFyIHBhcnRzID0gc3RyLnNwbGl0KCcvJyksXG4gICAgICAgIG1vZGlmaWVycyA9IHBhcnRzLnBvcCgpO1xuICAgICAgcGFydHMuc2hpZnQoKTtcbiAgICAgIHJldHVybiBuZXcgUmVnRXhwKHBhcnRzLmpvaW4oJy8nKSwgbW9kaWZpZXJzKTtcbiAgICB9LFxuXG4gICAgX2lzUmVnRXhwT3B0aW9uOiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAga2V5ICE9PSAndXJsJyAmJlxuICAgICAgICAkLnR5cGUodmFsdWUpID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAvXlxcLy4qXFwvW2lnbV17MCwzfSQvLnRlc3QodmFsdWUpXG4gICAgICApO1xuICAgIH0sXG5cbiAgICBfaW5pdERhdGFBdHRyaWJ1dGVzOiBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXMsXG4gICAgICAgIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsXG4gICAgICAgIGRhdGEgPSB0aGlzLmVsZW1lbnQuZGF0YSgpO1xuICAgICAgLy8gSW5pdGlhbGl6ZSBvcHRpb25zIHNldCB2aWEgSFRNTDUgZGF0YS1hdHRyaWJ1dGVzOlxuICAgICAgJC5lYWNoKHRoaXMuZWxlbWVudFswXS5hdHRyaWJ1dGVzLCBmdW5jdGlvbiAoaW5kZXgsIGF0dHIpIHtcbiAgICAgICAgdmFyIGtleSA9IGF0dHIubmFtZS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgIHZhbHVlO1xuICAgICAgICBpZiAoL15kYXRhLS8udGVzdChrZXkpKSB7XG4gICAgICAgICAgLy8gQ29udmVydCBoeXBoZW4tYXRlZCBrZXkgdG8gY2FtZWxDYXNlOlxuICAgICAgICAgIGtleSA9IGtleS5zbGljZSg1KS5yZXBsYWNlKC8tW2Etel0vZywgZnVuY3Rpb24gKHN0cikge1xuICAgICAgICAgICAgcmV0dXJuIHN0ci5jaGFyQXQoMSkudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB2YWx1ZSA9IGRhdGFba2V5XTtcbiAgICAgICAgICBpZiAodGhhdC5faXNSZWdFeHBPcHRpb24oa2V5LCB2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdGhhdC5fZ2V0UmVnRXhwKHZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3B0aW9uc1trZXldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBfY3JlYXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGlzLl9pbml0RGF0YUF0dHJpYnV0ZXMoKTtcbiAgICAgIHRoaXMuX2luaXRTcGVjaWFsT3B0aW9ucygpO1xuICAgICAgdGhpcy5fc2xvdHMgPSBbXTtcbiAgICAgIHRoaXMuX3NlcXVlbmNlID0gdGhpcy5fZ2V0WEhSUHJvbWlzZSh0cnVlKTtcbiAgICAgIHRoaXMuX3NlbmRpbmcgPSB0aGlzLl9hY3RpdmUgPSAwO1xuICAgICAgdGhpcy5faW5pdFByb2dyZXNzT2JqZWN0KHRoaXMpO1xuICAgICAgdGhpcy5faW5pdEV2ZW50SGFuZGxlcnMoKTtcbiAgICB9LFxuXG4gICAgLy8gVGhpcyBtZXRob2QgaXMgZXhwb3NlZCB0byB0aGUgd2lkZ2V0IEFQSSBhbmQgYWxsb3dzIHRvIHF1ZXJ5XG4gICAgLy8gdGhlIG51bWJlciBvZiBhY3RpdmUgdXBsb2FkczpcbiAgICBhY3RpdmU6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9hY3RpdmU7XG4gICAgfSxcblxuICAgIC8vIFRoaXMgbWV0aG9kIGlzIGV4cG9zZWQgdG8gdGhlIHdpZGdldCBBUEkgYW5kIGFsbG93cyB0byBxdWVyeVxuICAgIC8vIHRoZSB3aWRnZXQgdXBsb2FkIHByb2dyZXNzLlxuICAgIC8vIEl0IHJldHVybnMgYW4gb2JqZWN0IHdpdGggbG9hZGVkLCB0b3RhbCBhbmQgYml0cmF0ZSBwcm9wZXJ0aWVzXG4gICAgLy8gZm9yIHRoZSBydW5uaW5nIHVwbG9hZHM6XG4gICAgcHJvZ3Jlc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9wcm9ncmVzcztcbiAgICB9LFxuXG4gICAgLy8gVGhpcyBtZXRob2QgaXMgZXhwb3NlZCB0byB0aGUgd2lkZ2V0IEFQSSBhbmQgYWxsb3dzIGFkZGluZyBmaWxlc1xuICAgIC8vIHVzaW5nIHRoZSBmaWxldXBsb2FkIEFQSS4gVGhlIGRhdGEgcGFyYW1ldGVyIGFjY2VwdHMgYW4gb2JqZWN0IHdoaWNoXG4gICAgLy8gbXVzdCBoYXZlIGEgZmlsZXMgcHJvcGVydHkgYW5kIGNhbiBjb250YWluIGFkZGl0aW9uYWwgb3B0aW9uczpcbiAgICAvLyAuZmlsZXVwbG9hZCgnYWRkJywge2ZpbGVzOiBmaWxlc0xpc3R9KTtcbiAgICBhZGQ6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICBpZiAoIWRhdGEgfHwgdGhpcy5vcHRpb25zLmRpc2FibGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChkYXRhLmZpbGVJbnB1dCAmJiAhZGF0YS5maWxlcykge1xuICAgICAgICB0aGlzLl9nZXRGaWxlSW5wdXRGaWxlcyhkYXRhLmZpbGVJbnB1dCkuYWx3YXlzKGZ1bmN0aW9uIChmaWxlcykge1xuICAgICAgICAgIGRhdGEuZmlsZXMgPSBmaWxlcztcbiAgICAgICAgICB0aGF0Ll9vbkFkZChudWxsLCBkYXRhKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkYXRhLmZpbGVzID0gJC5tYWtlQXJyYXkoZGF0YS5maWxlcyk7XG4gICAgICAgIHRoaXMuX29uQWRkKG51bGwsIGRhdGEpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBUaGlzIG1ldGhvZCBpcyBleHBvc2VkIHRvIHRoZSB3aWRnZXQgQVBJIGFuZCBhbGxvd3Mgc2VuZGluZyBmaWxlc1xuICAgIC8vIHVzaW5nIHRoZSBmaWxldXBsb2FkIEFQSS4gVGhlIGRhdGEgcGFyYW1ldGVyIGFjY2VwdHMgYW4gb2JqZWN0IHdoaWNoXG4gICAgLy8gbXVzdCBoYXZlIGEgZmlsZXMgb3IgZmlsZUlucHV0IHByb3BlcnR5IGFuZCBjYW4gY29udGFpbiBhZGRpdGlvbmFsIG9wdGlvbnM6XG4gICAgLy8gLmZpbGV1cGxvYWQoJ3NlbmQnLCB7ZmlsZXM6IGZpbGVzTGlzdH0pO1xuICAgIC8vIFRoZSBtZXRob2QgcmV0dXJucyBhIFByb21pc2Ugb2JqZWN0IGZvciB0aGUgZmlsZSB1cGxvYWQgY2FsbC5cbiAgICBzZW5kOiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgaWYgKGRhdGEgJiYgIXRoaXMub3B0aW9ucy5kaXNhYmxlZCkge1xuICAgICAgICBpZiAoZGF0YS5maWxlSW5wdXQgJiYgIWRhdGEuZmlsZXMpIHtcbiAgICAgICAgICB2YXIgdGhhdCA9IHRoaXMsXG4gICAgICAgICAgICBkZmQgPSAkLkRlZmVycmVkKCksXG4gICAgICAgICAgICBwcm9taXNlID0gZGZkLnByb21pc2UoKSxcbiAgICAgICAgICAgIGpxWEhSLFxuICAgICAgICAgICAgYWJvcnRlZDtcbiAgICAgICAgICBwcm9taXNlLmFib3J0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgYWJvcnRlZCA9IHRydWU7XG4gICAgICAgICAgICBpZiAoanFYSFIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGpxWEhSLmFib3J0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZmQucmVqZWN0KG51bGwsICdhYm9ydCcsICdhYm9ydCcpO1xuICAgICAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgICAgICAgfTtcbiAgICAgICAgICB0aGlzLl9nZXRGaWxlSW5wdXRGaWxlcyhkYXRhLmZpbGVJbnB1dCkuYWx3YXlzKGZ1bmN0aW9uIChmaWxlcykge1xuICAgICAgICAgICAgaWYgKGFib3J0ZWQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFmaWxlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgZGZkLnJlamVjdCgpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkYXRhLmZpbGVzID0gZmlsZXM7XG4gICAgICAgICAgICBqcVhIUiA9IHRoYXQuX29uU2VuZChudWxsLCBkYXRhKTtcbiAgICAgICAgICAgIGpxWEhSLnRoZW4oXG4gICAgICAgICAgICAgIGZ1bmN0aW9uIChyZXN1bHQsIHRleHRTdGF0dXMsIGpxWEhSKSB7XG4gICAgICAgICAgICAgICAgZGZkLnJlc29sdmUocmVzdWx0LCB0ZXh0U3RhdHVzLCBqcVhIUik7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGZ1bmN0aW9uIChqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24pIHtcbiAgICAgICAgICAgICAgICBkZmQucmVqZWN0KGpxWEhSLCB0ZXh0U3RhdHVzLCBlcnJvclRocm93bik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2VuaGFuY2VQcm9taXNlKHByb21pc2UpO1xuICAgICAgICB9XG4gICAgICAgIGRhdGEuZmlsZXMgPSAkLm1ha2VBcnJheShkYXRhLmZpbGVzKTtcbiAgICAgICAgaWYgKGRhdGEuZmlsZXMubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX29uU2VuZChudWxsLCBkYXRhKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuX2dldFhIUlByb21pc2UoZmFsc2UsIGRhdGEgJiYgZGF0YS5jb250ZXh0KTtcbiAgICB9XG4gIH0pO1xufSk7XG4iLCIvKlxuICogalF1ZXJ5IElmcmFtZSBUcmFuc3BvcnQgUGx1Z2luXG4gKiBodHRwczovL2dpdGh1Yi5jb20vYmx1ZWltcC9qUXVlcnktRmlsZS1VcGxvYWRcbiAqXG4gKiBDb3B5cmlnaHQgMjAxMSwgU2ViYXN0aWFuIFRzY2hhblxuICogaHR0cHM6Ly9ibHVlaW1wLm5ldFxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZTpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUXG4gKi9cblxuLyogZ2xvYmFsIGRlZmluZSwgcmVxdWlyZSAqL1xuXG4oZnVuY3Rpb24gKGZhY3RvcnkpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgLy8gUmVnaXN0ZXIgYXMgYW4gYW5vbnltb3VzIEFNRCBtb2R1bGU6XG4gICAgZGVmaW5lKFsnanF1ZXJ5J10sIGZhY3RvcnkpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgIC8vIE5vZGUvQ29tbW9uSlM6XG4gICAgZmFjdG9yeShyZXF1aXJlKCdqcXVlcnknKSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gQnJvd3NlciBnbG9iYWxzOlxuICAgIGZhY3Rvcnkod2luZG93LmpRdWVyeSk7XG4gIH1cbn0pKGZ1bmN0aW9uICgkKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICAvLyBIZWxwZXIgdmFyaWFibGUgdG8gY3JlYXRlIHVuaXF1ZSBuYW1lcyBmb3IgdGhlIHRyYW5zcG9ydCBpZnJhbWVzOlxuICB2YXIgY291bnRlciA9IDAsXG4gICAganNvbkFQSSA9ICQsXG4gICAganNvblBhcnNlID0gJ3BhcnNlSlNPTic7XG5cbiAgaWYgKCdKU09OJyBpbiB3aW5kb3cgJiYgJ3BhcnNlJyBpbiBKU09OKSB7XG4gICAganNvbkFQSSA9IEpTT047XG4gICAganNvblBhcnNlID0gJ3BhcnNlJztcbiAgfVxuXG4gIC8vIFRoZSBpZnJhbWUgdHJhbnNwb3J0IGFjY2VwdHMgZm91ciBhZGRpdGlvbmFsIG9wdGlvbnM6XG4gIC8vIG9wdGlvbnMuZmlsZUlucHV0OiBhIGpRdWVyeSBjb2xsZWN0aW9uIG9mIGZpbGUgaW5wdXQgZmllbGRzXG4gIC8vIG9wdGlvbnMucGFyYW1OYW1lOiB0aGUgcGFyYW1ldGVyIG5hbWUgZm9yIHRoZSBmaWxlIGZvcm0gZGF0YSxcbiAgLy8gIG92ZXJyaWRlcyB0aGUgbmFtZSBwcm9wZXJ0eSBvZiB0aGUgZmlsZSBpbnB1dCBmaWVsZChzKSxcbiAgLy8gIGNhbiBiZSBhIHN0cmluZyBvciBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICAvLyBvcHRpb25zLmZvcm1EYXRhOiBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGggbmFtZSBhbmQgdmFsdWUgcHJvcGVydGllcyxcbiAgLy8gIGVxdWl2YWxlbnQgdG8gdGhlIHJldHVybiBkYXRhIG9mIC5zZXJpYWxpemVBcnJheSgpLCBlLmcuOlxuICAvLyAgW3tuYW1lOiAnYScsIHZhbHVlOiAxfSwge25hbWU6ICdiJywgdmFsdWU6IDJ9XVxuICAvLyBvcHRpb25zLmluaXRpYWxJZnJhbWVTcmM6IHRoZSBVUkwgb2YgdGhlIGluaXRpYWwgaWZyYW1lIHNyYyxcbiAgLy8gIGJ5IGRlZmF1bHQgc2V0IHRvIFwiamF2YXNjcmlwdDpmYWxzZTtcIlxuICAkLmFqYXhUcmFuc3BvcnQoJ2lmcmFtZScsIGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMuYXN5bmMpIHtcbiAgICAgIC8vIGphdmFzY3JpcHQ6ZmFsc2UgYXMgaW5pdGlhbCBpZnJhbWUgc3JjXG4gICAgICAvLyBwcmV2ZW50cyB3YXJuaW5nIHBvcHVwcyBvbiBIVFRQUyBpbiBJRTY6XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2NyaXB0LXVybFxuICAgICAgdmFyIGluaXRpYWxJZnJhbWVTcmMgPSBvcHRpb25zLmluaXRpYWxJZnJhbWVTcmMgfHwgJ2phdmFzY3JpcHQ6ZmFsc2U7JyxcbiAgICAgICAgZm9ybSxcbiAgICAgICAgaWZyYW1lLFxuICAgICAgICBhZGRQYXJhbUNoYXI7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzZW5kOiBmdW5jdGlvbiAoXywgY29tcGxldGVDYWxsYmFjaykge1xuICAgICAgICAgIGZvcm0gPSAkKCc8Zm9ybSBzdHlsZT1cImRpc3BsYXk6bm9uZTtcIj48L2Zvcm0+Jyk7XG4gICAgICAgICAgZm9ybS5hdHRyKCdhY2NlcHQtY2hhcnNldCcsIG9wdGlvbnMuZm9ybUFjY2VwdENoYXJzZXQpO1xuICAgICAgICAgIGFkZFBhcmFtQ2hhciA9IC9cXD8vLnRlc3Qob3B0aW9ucy51cmwpID8gJyYnIDogJz8nO1xuICAgICAgICAgIC8vIFhEb21haW5SZXF1ZXN0IG9ubHkgc3VwcG9ydHMgR0VUIGFuZCBQT1NUOlxuICAgICAgICAgIGlmIChvcHRpb25zLnR5cGUgPT09ICdERUxFVEUnKSB7XG4gICAgICAgICAgICBvcHRpb25zLnVybCA9IG9wdGlvbnMudXJsICsgYWRkUGFyYW1DaGFyICsgJ19tZXRob2Q9REVMRVRFJztcbiAgICAgICAgICAgIG9wdGlvbnMudHlwZSA9ICdQT1NUJztcbiAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMudHlwZSA9PT0gJ1BVVCcpIHtcbiAgICAgICAgICAgIG9wdGlvbnMudXJsID0gb3B0aW9ucy51cmwgKyBhZGRQYXJhbUNoYXIgKyAnX21ldGhvZD1QVVQnO1xuICAgICAgICAgICAgb3B0aW9ucy50eXBlID0gJ1BPU1QnO1xuICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy50eXBlID09PSAnUEFUQ0gnKSB7XG4gICAgICAgICAgICBvcHRpb25zLnVybCA9IG9wdGlvbnMudXJsICsgYWRkUGFyYW1DaGFyICsgJ19tZXRob2Q9UEFUQ0gnO1xuICAgICAgICAgICAgb3B0aW9ucy50eXBlID0gJ1BPU1QnO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBJRSB2ZXJzaW9ucyBiZWxvdyBJRTggY2Fubm90IHNldCB0aGUgbmFtZSBwcm9wZXJ0eSBvZlxuICAgICAgICAgIC8vIGVsZW1lbnRzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gYWRkZWQgdG8gdGhlIERPTSxcbiAgICAgICAgICAvLyBzbyB3ZSBzZXQgdGhlIG5hbWUgYWxvbmcgd2l0aCB0aGUgaWZyYW1lIEhUTUwgbWFya3VwOlxuICAgICAgICAgIGNvdW50ZXIgKz0gMTtcbiAgICAgICAgICBpZnJhbWUgPSAkKFxuICAgICAgICAgICAgJzxpZnJhbWUgc3JjPVwiJyArXG4gICAgICAgICAgICAgIGluaXRpYWxJZnJhbWVTcmMgK1xuICAgICAgICAgICAgICAnXCIgbmFtZT1cImlmcmFtZS10cmFuc3BvcnQtJyArXG4gICAgICAgICAgICAgIGNvdW50ZXIgK1xuICAgICAgICAgICAgICAnXCI+PC9pZnJhbWU+J1xuICAgICAgICAgICkub24oJ2xvYWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZmlsZUlucHV0Q2xvbmVzLFxuICAgICAgICAgICAgICBwYXJhbU5hbWVzID0gJC5pc0FycmF5KG9wdGlvbnMucGFyYW1OYW1lKVxuICAgICAgICAgICAgICAgID8gb3B0aW9ucy5wYXJhbU5hbWVcbiAgICAgICAgICAgICAgICA6IFtvcHRpb25zLnBhcmFtTmFtZV07XG4gICAgICAgICAgICBpZnJhbWUub2ZmKCdsb2FkJykub24oJ2xvYWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHZhciByZXNwb25zZTtcbiAgICAgICAgICAgICAgLy8gV3JhcCBpbiBhIHRyeS9jYXRjaCBibG9jayB0byBjYXRjaCBleGNlcHRpb25zIHRocm93blxuICAgICAgICAgICAgICAvLyB3aGVuIHRyeWluZyB0byBhY2Nlc3MgY3Jvc3MtZG9tYWluIGlmcmFtZSBjb250ZW50czpcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXNwb25zZSA9IGlmcmFtZS5jb250ZW50cygpO1xuICAgICAgICAgICAgICAgIC8vIEdvb2dsZSBDaHJvbWUgYW5kIEZpcmVmb3ggZG8gbm90IHRocm93IGFuXG4gICAgICAgICAgICAgICAgLy8gZXhjZXB0aW9uIHdoZW4gY2FsbGluZyBpZnJhbWUuY29udGVudHMoKSBvblxuICAgICAgICAgICAgICAgIC8vIGNyb3NzLWRvbWFpbiByZXF1ZXN0cywgc28gd2UgdW5pZnkgdGhlIHJlc3BvbnNlOlxuICAgICAgICAgICAgICAgIGlmICghcmVzcG9uc2UubGVuZ3RoIHx8ICFyZXNwb25zZVswXS5maXJzdENoaWxkKSB7XG4gICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBUaGUgY29tcGxldGUgY2FsbGJhY2sgcmV0dXJucyB0aGVcbiAgICAgICAgICAgICAgLy8gaWZyYW1lIGNvbnRlbnQgZG9jdW1lbnQgYXMgcmVzcG9uc2Ugb2JqZWN0OlxuICAgICAgICAgICAgICBjb21wbGV0ZUNhbGxiYWNrKDIwMCwgJ3N1Y2Nlc3MnLCB7IGlmcmFtZTogcmVzcG9uc2UgfSk7XG4gICAgICAgICAgICAgIC8vIEZpeCBmb3IgSUUgZW5kbGVzcyBwcm9ncmVzcyBiYXIgYWN0aXZpdHkgYnVnXG4gICAgICAgICAgICAgIC8vIChoYXBwZW5zIG9uIGZvcm0gc3VibWl0cyB0byBpZnJhbWUgdGFyZ2V0cyk6XG4gICAgICAgICAgICAgICQoJzxpZnJhbWUgc3JjPVwiJyArIGluaXRpYWxJZnJhbWVTcmMgKyAnXCI+PC9pZnJhbWU+JykuYXBwZW5kVG8oXG4gICAgICAgICAgICAgICAgZm9ybVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgLy8gUmVtb3ZpbmcgdGhlIGZvcm0gaW4gYSBzZXRUaW1lb3V0IGNhbGxcbiAgICAgICAgICAgICAgICAvLyBhbGxvd3MgQ2hyb21lJ3MgZGV2ZWxvcGVyIHRvb2xzIHRvIGRpc3BsYXlcbiAgICAgICAgICAgICAgICAvLyB0aGUgcmVzcG9uc2UgcmVzdWx0XG4gICAgICAgICAgICAgICAgZm9ybS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGZvcm1cbiAgICAgICAgICAgICAgLnByb3AoJ3RhcmdldCcsIGlmcmFtZS5wcm9wKCduYW1lJykpXG4gICAgICAgICAgICAgIC5wcm9wKCdhY3Rpb24nLCBvcHRpb25zLnVybClcbiAgICAgICAgICAgICAgLnByb3AoJ21ldGhvZCcsIG9wdGlvbnMudHlwZSk7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5mb3JtRGF0YSkge1xuICAgICAgICAgICAgICAkLmVhY2gob3B0aW9ucy5mb3JtRGF0YSwgZnVuY3Rpb24gKGluZGV4LCBmaWVsZCkge1xuICAgICAgICAgICAgICAgICQoJzxpbnB1dCB0eXBlPVwiaGlkZGVuXCIvPicpXG4gICAgICAgICAgICAgICAgICAucHJvcCgnbmFtZScsIGZpZWxkLm5hbWUpXG4gICAgICAgICAgICAgICAgICAudmFsKGZpZWxkLnZhbHVlKVxuICAgICAgICAgICAgICAgICAgLmFwcGVuZFRvKGZvcm0pO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgb3B0aW9ucy5maWxlSW5wdXQgJiZcbiAgICAgICAgICAgICAgb3B0aW9ucy5maWxlSW5wdXQubGVuZ3RoICYmXG4gICAgICAgICAgICAgIG9wdGlvbnMudHlwZSA9PT0gJ1BPU1QnXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgZmlsZUlucHV0Q2xvbmVzID0gb3B0aW9ucy5maWxlSW5wdXQuY2xvbmUoKTtcbiAgICAgICAgICAgICAgLy8gSW5zZXJ0IGEgY2xvbmUgZm9yIGVhY2ggZmlsZSBpbnB1dCBmaWVsZDpcbiAgICAgICAgICAgICAgb3B0aW9ucy5maWxlSW5wdXQuYWZ0ZXIoZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpbGVJbnB1dENsb25lc1tpbmRleF07XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBpZiAob3B0aW9ucy5wYXJhbU5hbWUpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLmZpbGVJbnB1dC5lYWNoKGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgICAgICAgICAgICAgJCh0aGlzKS5wcm9wKCduYW1lJywgcGFyYW1OYW1lc1tpbmRleF0gfHwgb3B0aW9ucy5wYXJhbU5hbWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8vIEFwcGVuZGluZyB0aGUgZmlsZSBpbnB1dCBmaWVsZHMgdG8gdGhlIGhpZGRlbiBmb3JtXG4gICAgICAgICAgICAgIC8vIHJlbW92ZXMgdGhlbSBmcm9tIHRoZWlyIG9yaWdpbmFsIGxvY2F0aW9uOlxuICAgICAgICAgICAgICBmb3JtXG4gICAgICAgICAgICAgICAgLmFwcGVuZChvcHRpb25zLmZpbGVJbnB1dClcbiAgICAgICAgICAgICAgICAucHJvcCgnZW5jdHlwZScsICdtdWx0aXBhcnQvZm9ybS1kYXRhJylcbiAgICAgICAgICAgICAgICAvLyBlbmN0eXBlIG11c3QgYmUgc2V0IGFzIGVuY29kaW5nIGZvciBJRTpcbiAgICAgICAgICAgICAgICAucHJvcCgnZW5jb2RpbmcnLCAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScpO1xuICAgICAgICAgICAgICAvLyBSZW1vdmUgdGhlIEhUTUw1IGZvcm0gYXR0cmlidXRlIGZyb20gdGhlIGlucHV0KHMpOlxuICAgICAgICAgICAgICBvcHRpb25zLmZpbGVJbnB1dC5yZW1vdmVBdHRyKCdmb3JtJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIC8vIFN1Ym1pdHRpbmcgdGhlIGZvcm0gaW4gYSBzZXRUaW1lb3V0IGNhbGwgZml4ZXMgYW4gaXNzdWUgd2l0aFxuICAgICAgICAgICAgICAvLyBTYWZhcmkgMTMgbm90IHRyaWdnZXJpbmcgdGhlIGlmcmFtZSBsb2FkIGV2ZW50IGFmdGVyIHJlc2V0dGluZ1xuICAgICAgICAgICAgICAvLyB0aGUgbG9hZCBldmVudCBoYW5kbGVyLCBzZWUgYWxzbzpcbiAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2JsdWVpbXAvalF1ZXJ5LUZpbGUtVXBsb2FkL2lzc3Vlcy8zNjMzXG4gICAgICAgICAgICAgIGZvcm0uc3VibWl0KCk7XG4gICAgICAgICAgICAgIC8vIEluc2VydCB0aGUgZmlsZSBpbnB1dCBmaWVsZHMgYXQgdGhlaXIgb3JpZ2luYWwgbG9jYXRpb25cbiAgICAgICAgICAgICAgLy8gYnkgcmVwbGFjaW5nIHRoZSBjbG9uZXMgd2l0aCB0aGUgb3JpZ2luYWxzOlxuICAgICAgICAgICAgICBpZiAoZmlsZUlucHV0Q2xvbmVzICYmIGZpbGVJbnB1dENsb25lcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLmZpbGVJbnB1dC5lYWNoKGZ1bmN0aW9uIChpbmRleCwgaW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgIHZhciBjbG9uZSA9ICQoZmlsZUlucHV0Q2xvbmVzW2luZGV4XSk7XG4gICAgICAgICAgICAgICAgICAvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBuYW1lIGFuZCBmb3JtIHByb3BlcnRpZXM6XG4gICAgICAgICAgICAgICAgICAkKGlucHV0KVxuICAgICAgICAgICAgICAgICAgICAucHJvcCgnbmFtZScsIGNsb25lLnByb3AoJ25hbWUnKSlcbiAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ2Zvcm0nLCBjbG9uZS5hdHRyKCdmb3JtJykpO1xuICAgICAgICAgICAgICAgICAgY2xvbmUucmVwbGFjZVdpdGgoaW5wdXQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBmb3JtLmFwcGVuZChpZnJhbWUpLmFwcGVuZFRvKGRvY3VtZW50LmJvZHkpO1xuICAgICAgICB9LFxuICAgICAgICBhYm9ydDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChpZnJhbWUpIHtcbiAgICAgICAgICAgIC8vIGphdmFzY3JpcHQ6ZmFsc2UgYXMgaWZyYW1lIHNyYyBhYm9ydHMgdGhlIHJlcXVlc3RcbiAgICAgICAgICAgIC8vIGFuZCBwcmV2ZW50cyB3YXJuaW5nIHBvcHVwcyBvbiBIVFRQUyBpbiBJRTYuXG4gICAgICAgICAgICBpZnJhbWUub2ZmKCdsb2FkJykucHJvcCgnc3JjJywgaW5pdGlhbElmcmFtZVNyYyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChmb3JtKSB7XG4gICAgICAgICAgICBmb3JtLnJlbW92ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIFRoZSBpZnJhbWUgdHJhbnNwb3J0IHJldHVybnMgdGhlIGlmcmFtZSBjb250ZW50IGRvY3VtZW50IGFzIHJlc3BvbnNlLlxuICAvLyBUaGUgZm9sbG93aW5nIGFkZHMgY29udmVydGVycyBmcm9tIGlmcmFtZSB0byB0ZXh0LCBqc29uLCBodG1sLCB4bWxcbiAgLy8gYW5kIHNjcmlwdC5cbiAgLy8gUGxlYXNlIG5vdGUgdGhhdCB0aGUgQ29udGVudC1UeXBlIGZvciBKU09OIHJlc3BvbnNlcyBoYXMgdG8gYmUgdGV4dC9wbGFpblxuICAvLyBvciB0ZXh0L2h0bWwsIGlmIHRoZSBicm93c2VyIGRvZXNuJ3QgaW5jbHVkZSBhcHBsaWNhdGlvbi9qc29uIGluIHRoZVxuICAvLyBBY2NlcHQgaGVhZGVyLCBlbHNlIElFIHdpbGwgc2hvdyBhIGRvd25sb2FkIGRpYWxvZy5cbiAgLy8gVGhlIENvbnRlbnQtVHlwZSBmb3IgWE1MIHJlc3BvbnNlcyBvbiB0aGUgb3RoZXIgaGFuZCBoYXMgdG8gYmUgYWx3YXlzXG4gIC8vIGFwcGxpY2F0aW9uL3htbCBvciB0ZXh0L3htbCwgc28gSUUgcHJvcGVybHkgcGFyc2VzIHRoZSBYTUwgcmVzcG9uc2UuXG4gIC8vIFNlZSBhbHNvXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ibHVlaW1wL2pRdWVyeS1GaWxlLVVwbG9hZC93aWtpL1NldHVwI2NvbnRlbnQtdHlwZS1uZWdvdGlhdGlvblxuICAkLmFqYXhTZXR1cCh7XG4gICAgY29udmVydGVyczoge1xuICAgICAgJ2lmcmFtZSB0ZXh0JzogZnVuY3Rpb24gKGlmcmFtZSkge1xuICAgICAgICByZXR1cm4gaWZyYW1lICYmICQoaWZyYW1lWzBdLmJvZHkpLnRleHQoKTtcbiAgICAgIH0sXG4gICAgICAnaWZyYW1lIGpzb24nOiBmdW5jdGlvbiAoaWZyYW1lKSB7XG4gICAgICAgIHJldHVybiBpZnJhbWUgJiYganNvbkFQSVtqc29uUGFyc2VdKCQoaWZyYW1lWzBdLmJvZHkpLnRleHQoKSk7XG4gICAgICB9LFxuICAgICAgJ2lmcmFtZSBodG1sJzogZnVuY3Rpb24gKGlmcmFtZSkge1xuICAgICAgICByZXR1cm4gaWZyYW1lICYmICQoaWZyYW1lWzBdLmJvZHkpLmh0bWwoKTtcbiAgICAgIH0sXG4gICAgICAnaWZyYW1lIHhtbCc6IGZ1bmN0aW9uIChpZnJhbWUpIHtcbiAgICAgICAgdmFyIHhtbERvYyA9IGlmcmFtZSAmJiBpZnJhbWVbMF07XG4gICAgICAgIHJldHVybiB4bWxEb2MgJiYgJC5pc1hNTERvYyh4bWxEb2MpXG4gICAgICAgICAgPyB4bWxEb2NcbiAgICAgICAgICA6ICQucGFyc2VYTUwoXG4gICAgICAgICAgICAgICh4bWxEb2MuWE1MRG9jdW1lbnQgJiYgeG1sRG9jLlhNTERvY3VtZW50LnhtbCkgfHxcbiAgICAgICAgICAgICAgICAkKHhtbERvYy5ib2R5KS5odG1sKClcbiAgICAgICAgICAgICk7XG4gICAgICB9LFxuICAgICAgJ2lmcmFtZSBzY3JpcHQnOiBmdW5jdGlvbiAoaWZyYW1lKSB7XG4gICAgICAgIHJldHVybiBpZnJhbWUgJiYgJC5nbG9iYWxFdmFsKCQoaWZyYW1lWzBdLmJvZHkpLnRleHQoKSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn0pO1xuIiwidmFyIGluaXRpYWxpemVkO1xyXG52YXIgbWVkaWFBcHA7XHJcblxyXG52YXIgYnVzID0gbmV3IFZ1ZSgpO1xyXG5cclxuZnVuY3Rpb24gaW5pdGlhbGl6ZU1lZGlhQXBwbGljYXRpb24oZGlzcGxheU1lZGlhQXBwbGljYXRpb24sIG1lZGlhQXBwbGljYXRpb25VcmwsIHBhdGhCYXNlKSB7XHJcblxyXG4gICAgaWYgKGluaXRpYWxpemVkKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGluaXRpYWxpemVkID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoIW1lZGlhQXBwbGljYXRpb25VcmwpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdtZWRpYUFwcGxpY2F0aW9uVXJsIHZhcmlhYmxlIGlzIG5vdCBkZWZpbmVkJyk7XHJcbiAgICB9XHJcblxyXG4gICAgJC5hamF4KHtcclxuICAgICAgICB1cmw6IG1lZGlhQXBwbGljYXRpb25VcmwsXHJcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcclxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoY29udGVudCkge1xyXG4gICAgICAgICAgICAkKCcudGEtY29udGVudCcpLmFwcGVuZChjb250ZW50KTtcclxuXHJcbiAgICAgICAgICAgICQoZG9jdW1lbnQpLnRyaWdnZXIoJ21lZGlhYXBwbGljYXRpb246cmVhZHknKTtcclxuXHJcbiAgICAgICAgICAgIHZhciByb290ID0ge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogJCgnI3QtbWVkaWFMaWJyYXJ5JykudGV4dCgpLFxyXG4gICAgICAgICAgICAgICAgcGF0aDogJycsXHJcbiAgICAgICAgICAgICAgICBmb2xkZXI6ICcnLFxyXG4gICAgICAgICAgICAgICAgaXNEaXJlY3Rvcnk6IHRydWVcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIG1lZGlhQXBwID0gbmV3IFZ1ZSh7XHJcbiAgICAgICAgICAgICAgICBlbDogJyNtZWRpYUFwcCcsXHJcbiAgICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRGb2xkZXI6IHt9LFxyXG4gICAgICAgICAgICAgICAgICAgIG1lZGlhSXRlbXM6IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkTWVkaWFzOiBbXSxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvcnM6IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgIGRyYWdEcm9wVGh1bWJuYWlsOiBuZXcgSW1hZ2UoKSxcclxuICAgICAgICAgICAgICAgICAgICBzbWFsbFRodW1iczogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgZ3JpZFZpZXc6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIG1lZGlhRmlsdGVyOiAnJyxcclxuICAgICAgICAgICAgICAgICAgICBzb3J0Qnk6ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgIHNvcnRBc2M6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbXNJblBhZ2U6IFtdXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgY3JlYXRlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5kcmFnRHJvcFRodW1ibmFpbC5zcmMgPSAocGF0aEJhc2UgfHwgJycpICsgJy9PcmNoYXJkQ29yZS5NZWRpYS9JbWFnZXMvZHJhZy10aHVtYm5haWwucG5nJztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYnVzLiRvbignZm9sZGVyU2VsZWN0ZWQnLCBmdW5jdGlvbiAoZm9sZGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWRGb2xkZXIgPSBmb2xkZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJ1cy4kb24oJ2ZvbGRlckRlbGV0ZWQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0Um9vdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBidXMuJG9uKCdmb2xkZXJBZGRlZCcsIGZ1bmN0aW9uIChmb2xkZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZEZvbGRlciA9IGZvbGRlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9sZGVyLnNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYnVzLiRvbignbWVkaWFMaXN0TW92ZWQnLCBmdW5jdGlvbiAoZXJyb3JJbmZvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9hZEZvbGRlcihzZWxmLnNlbGVjdGVkRm9sZGVyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9ySW5mbykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvcnMucHVzaChlcnJvckluZm8pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJ1cy4kb24oJ21lZGlhUmVuYW1lZCcsIGZ1bmN0aW9uIChuZXdOYW1lLCBuZXdQYXRoLCBvbGRQYXRoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZWRpYSA9IHNlbGYubWVkaWFJdGVtcy5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLm1lZGlhUGF0aCA9PT0gb2xkUGF0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlbMF07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZWRpYS5tZWRpYVBhdGggPSBuZXdQYXRoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZWRpYS5uYW1lID0gbmV3TmFtZTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYnVzLiRvbignY3JlYXRlRm9sZGVyUmVxdWVzdGVkJywgZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY3JlYXRlRm9sZGVyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJ1cy4kb24oJ2RlbGV0ZUZvbGRlclJlcXVlc3RlZCcsIGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRlbGV0ZUZvbGRlcigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBjb21tb24gaGFuZGxlcnMgZm9yIGFjdGlvbnMgaW4gYm90aCBncmlkIGFuZCB0YWJsZSB2aWV3LlxyXG4gICAgICAgICAgICAgICAgICAgIGJ1cy4kb24oJ3NvcnRDaGFuZ2VSZXF1ZXN0ZWQnLCBmdW5jdGlvbiAobmV3U29ydCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNoYW5nZVNvcnQobmV3U29ydCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJ1cy4kb24oJ21lZGlhVG9nZ2xlUmVxdWVzdGVkJywgZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudG9nZ2xlU2VsZWN0aW9uT2ZNZWRpYShtZWRpYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJ1cy4kb24oJ3JlbmFtZU1lZGlhUmVxdWVzdGVkJywgZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVuYW1lTWVkaWEobWVkaWEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBidXMuJG9uKCdkZWxldGVNZWRpYVJlcXVlc3RlZCcsIGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRlbGV0ZU1lZGlhSXRlbShtZWRpYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJ1cy4kb24oJ21lZGlhRHJhZ1N0YXJ0UmVxdWVzdGVkJywgZnVuY3Rpb24gKG1lZGlhLCBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlRHJhZ1N0YXJ0KG1lZGlhLCBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZXIgZm9yIHBhZ2VyIGV2ZW50c1xyXG4gICAgICAgICAgICAgICAgICAgIGJ1cy4kb24oJ3BhZ2VyRXZlbnQnLCBmdW5jdGlvbiAoaXRlbXNJblBhZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pdGVtc0luUGFnZSA9IGl0ZW1zSW5QYWdlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkTWVkaWFzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ21lZGlhQXBwbGljYXRpb25QcmVmcycpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWRGb2xkZXIgPSByb290O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRQcmVmcyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ21lZGlhQXBwbGljYXRpb25QcmVmcycpKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBjb21wdXRlZDoge1xyXG4gICAgICAgICAgICAgICAgICAgIGlzSG9tZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEZvbGRlciA9PSByb290O1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50czogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcCA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRGb2xkZXIgPSB0aGlzLnNlbGVjdGVkRm9sZGVyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocGFyZW50Rm9sZGVyICYmIHBhcmVudEZvbGRlci5wYXRoICE9ICcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLnVuc2hpZnQocGFyZW50Rm9sZGVyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudEZvbGRlciA9IHBhcmVudEZvbGRlci5wYXJlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHA7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICByb290OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByb290O1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRNZWRpYUl0ZW1zOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWRNZWRpYXMgPSBbXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaWx0ZXJlZCA9IHNlbGYubWVkaWFJdGVtcy5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLm5hbWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKHNlbGYubWVkaWFGaWx0ZXIudG9Mb3dlckNhc2UoKSkgPiAtIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChzZWxmLnNvcnRCeSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnc2l6ZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWQuc29ydChmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zb3J0QXNjID8gYS5zaXplIC0gYi5zaXplIDogYi5zaXplIC0gYS5zaXplO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWltZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWQuc29ydChmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zb3J0QXNjID8gYS5taW1lLnRvTG93ZXJDYXNlKCkubG9jYWxlQ29tcGFyZShiLm1pbWUudG9Mb3dlckNhc2UoKSkgOiBiLm1pbWUudG9Mb3dlckNhc2UoKS5sb2NhbGVDb21wYXJlKGEubWltZS50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2xhc3RNb2RpZnknOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuc29ydEFzYyA/IGEubGFzdE1vZGlmeSAtIGIubGFzdE1vZGlmeSA6IGIubGFzdE1vZGlmeSAtIGEubGFzdE1vZGlmeTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWQuc29ydChmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zb3J0QXNjID8gYS5uYW1lLnRvTG93ZXJDYXNlKCkubG9jYWxlQ29tcGFyZShiLm5hbWUudG9Mb3dlckNhc2UoKSkgOiBiLm5hbWUudG9Mb3dlckNhc2UoKS5sb2NhbGVDb21wYXJlKGEubmFtZS50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpbHRlcmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgaGlkZGVuQ291bnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMubWVkaWFJdGVtcy5sZW5ndGggLSB0aGlzLmZpbHRlcmVkTWVkaWFJdGVtcy5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB0aHVtYlNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc21hbGxUaHVtYnMgPyAxMDAgOiAyNDA7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UHJlZnM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtYWxsVGh1bWJzOiB0aGlzLnNtYWxsVGh1bWJzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkRm9sZGVyOiB0aGlzLnNlbGVjdGVkRm9sZGVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyaWRWaWV3OiB0aGlzLmdyaWRWaWV3XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uIChuZXdQcmVmcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFuZXdQcmVmcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNtYWxsVGh1bWJzID0gbmV3UHJlZnMuc21hbGxUaHVtYnM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRm9sZGVyID0gbmV3UHJlZnMuc2VsZWN0ZWRGb2xkZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWRWaWV3ID0gbmV3UHJlZnMuZ3JpZFZpZXc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgd2F0Y2g6IHtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UHJlZnM6IGZ1bmN0aW9uIChuZXdQcmVmcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnbWVkaWFBcHBsaWNhdGlvblByZWZzJywgSlNPTi5zdHJpbmdpZnkobmV3UHJlZnMpKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkRm9sZGVyOiBmdW5jdGlvbiAobmV3Rm9sZGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWFGaWx0ZXIgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZvbGRlciA9IG5ld0ZvbGRlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkRm9sZGVyKG5ld0ZvbGRlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kcmVmcy5yb290Rm9sZGVyLnRvZ2dsZSgpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIG1ldGhvZHM6IHtcclxuICAgICAgICAgICAgICAgICAgICB1cGxvYWRVcmw6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zZWxlY3RlZEZvbGRlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1cmxWYWx1ZSA9ICQoJyN1cGxvYWRGaWxlcycpLnZhbCgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVybFZhbHVlICsgKHVybFZhbHVlLmluZGV4T2YoJz8nKSA9PSAtMSA/ICc/JyA6ICcmJykgKyBcInBhdGg9XCIgKyBlbmNvZGVVUklDb21wb25lbnQodGhpcy5zZWxlY3RlZEZvbGRlci5wYXRoKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdFJvb3Q6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZvbGRlciA9IHRoaXMucm9vdDtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGxvYWRGb2xkZXI6IGZ1bmN0aW9uIChmb2xkZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvcnMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZWRpYVVybCA9ICQoJyNnZXRNZWRpYUl0ZW1zVXJsJykudmFsKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGZvbGRlci5wYXRoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogbWVkaWFVcmwgKyAobWVkaWFVcmwuaW5kZXhPZignPycpID09IC0xID8gJz8nIDogJyYnKSArIFwicGF0aD1cIiArIGVuY29kZVVSSUNvbXBvbmVudChmb2xkZXIucGF0aCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5vcGVuID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tZWRpYUl0ZW1zID0gZGF0YTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkTWVkaWFzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zb3J0QnkgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNvcnRBc2MgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnZXJyb3IgbG9hZGluZyBmb2xkZXI6JyArIGZvbGRlci5wYXRoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdFJvb3QoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RBbGw6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZmlsdGVyZWRNZWRpYUl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWFzLnB1c2godGhpcy5maWx0ZXJlZE1lZGlhSXRlbXNbaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB1blNlbGVjdEFsbDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWFzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBpbnZlcnRTZWxlY3Rpb246IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRlbXAgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmZpbHRlcmVkTWVkaWFJdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNNZWRpYVNlbGVjdGVkKHRoaXMuZmlsdGVyZWRNZWRpYUl0ZW1zW2ldKSA9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAucHVzaCh0aGlzLmZpbHRlcmVkTWVkaWFJdGVtc1tpXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhcyA9IHRlbXA7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB0b2dnbGVTZWxlY3Rpb25PZk1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNNZWRpYVNlbGVjdGVkKG1lZGlhKSA9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWFzLnNwbGljZSh0aGlzLnNlbGVjdGVkTWVkaWFzLmluZGV4T2YobWVkaWEpLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYXMucHVzaChtZWRpYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGlzTWVkaWFTZWxlY3RlZDogZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSB0aGlzLnNlbGVjdGVkTWVkaWFzLnNvbWUoZnVuY3Rpb24gKGVsZW1lbnQsIGluZGV4LCBhcnJheSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQudXJsLnRvTG93ZXJDYXNlKCkgPT09IG1lZGlhLnVybC50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZUZvbGRlcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9sZGVyID0gdGhpcy5zZWxlY3RlZEZvbGRlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgcm9vdCBmb2xkZXIgY2FuJ3QgYmUgZGVsZXRlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9sZGVyID09IHRoaXMucm9vdC5tb2RlbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtRGlhbG9nKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLiQoXCIjZGVsZXRlRm9sZGVyXCIpLmRhdGEoKSwgY2FsbGJhY2s6IGZ1bmN0aW9uIChyZXNwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3ApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJCgnI2RlbGV0ZUZvbGRlclVybCcpLnZhbCgpICsgXCI/cGF0aD1cIiArIGVuY29kZVVSSUNvbXBvbmVudChmb2xkZXIucGF0aCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX1JlcXVlc3RWZXJpZmljYXRpb25Ub2tlbjogJChcImlucHV0W25hbWU9J19fUmVxdWVzdFZlcmlmaWNhdGlvblRva2VuJ11cIikudmFsKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1cy4kZW1pdCgnZGVsZXRlRm9sZGVyJywgZm9sZGVyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvci5yZXNwb25zZVRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlRm9sZGVyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJyNjcmVhdGVGb2xkZXJNb2RhbC1lcnJvcnMnKS5lbXB0eSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbW9kYWwgPSBib290c3RyYXAuTW9kYWwuZ2V0T3JDcmVhdGVJbnN0YW5jZSgkKCcjY3JlYXRlRm9sZGVyTW9kYWwnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGFsLnNob3coKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnI2NyZWF0ZUZvbGRlck1vZGFsIC5tb2RhbC1ib2R5IGlucHV0JykudmFsKCcnKS5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgcmVuYW1lTWVkaWE6IGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKCcjcmVuYW1lTWVkaWFNb2RhbC1lcnJvcnMnKS5lbXB0eSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbW9kYWwgPSBib290c3RyYXAuTW9kYWwuZ2V0T3JDcmVhdGVJbnN0YW5jZSgkKCcjcmVuYW1lTWVkaWFNb2RhbCcpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW9kYWwuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKCcjb2xkLWl0ZW0tbmFtZScpLnZhbChtZWRpYS5uYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnI3JlbmFtZU1lZGlhTW9kYWwgLm1vZGFsLWJvZHkgaW5wdXQnKS52YWwobWVkaWEubmFtZSkuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdEFuZERlbGV0ZU1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWxldGVNZWRpYSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlTWVkaWFMaXN0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZWRpYUxpc3QgPSB0aGlzLnNlbGVjdGVkTWVkaWFzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVkaWFMaXN0Lmxlbmd0aCA8IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlybURpYWxvZyh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4kKFwiI2RlbGV0ZU1lZGlhXCIpLmRhdGEoKSwgY2FsbGJhY2s6IGZ1bmN0aW9uIChyZXNwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3ApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhdGhzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVkaWFMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRocy5wdXNoKG1lZGlhTGlzdFtpXS5tZWRpYVBhdGgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKCcjZGVsZXRlTWVkaWFMaXN0VXJsJykudmFsKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX1JlcXVlc3RWZXJpZmljYXRpb25Ub2tlbjogJChcImlucHV0W25hbWU9J19fUmVxdWVzdFZlcmlmaWNhdGlvblRva2VuJ11cIikudmFsKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aHM6IHBhdGhzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbGYuc2VsZWN0ZWRNZWRpYXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gc2VsZi5tZWRpYUl0ZW1zICYmIHNlbGYubWVkaWFJdGVtcy5pbmRleE9mKHNlbGYuc2VsZWN0ZWRNZWRpYXNbaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tZWRpYUl0ZW1zLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXMuJGVtaXQoJ21lZGlhRGVsZXRlZCcsIHNlbGYuc2VsZWN0ZWRNZWRpYXNbaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWRNZWRpYXMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvci5yZXNwb25zZVRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlTWVkaWFJdGVtOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm1EaWFsb2coe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uJChcIiNkZWxldGVNZWRpYVwiKS5kYXRhKCksIGNhbGxiYWNrOiBmdW5jdGlvbiAocmVzcCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoJyNkZWxldGVNZWRpYVVybCcpLnZhbCgpICsgXCI/cGF0aD1cIiArIGVuY29kZVVSSUNvbXBvbmVudChtZWRpYS5tZWRpYVBhdGgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW46ICQoXCJpbnB1dFtuYW1lPSdfX1JlcXVlc3RWZXJpZmljYXRpb25Ub2tlbiddXCIpLnZhbCgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBzZWxmLm1lZGlhSXRlbXMgJiYgc2VsZi5tZWRpYUl0ZW1zLmluZGV4T2YobWVkaWEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tZWRpYUl0ZW1zLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1cy4kZW1pdCgnbWVkaWFEZWxldGVkJywgbWVkaWEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3NlbGYuc2VsZWN0ZWRNZWRpYSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IucmVzcG9uc2VUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZURyYWdTdGFydDogZnVuY3Rpb24gKG1lZGlhLCBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZpcnN0IHBhcnQgb2YgbW92ZSBtZWRpYSB0byBmb2xkZXI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByZXBhcmUgdGhlIGRhdGEgdGhhdCB3aWxsIGJlIGhhbmRsZWQgYnkgdGhlIGZvbGRlciBjb21wb25lbnQgb24gZHJvcCBldmVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWVkaWFOYW1lcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWFzLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhTmFtZXMucHVzaChpdGVtLm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluIGNhc2UgdGhlIHVzZXIgZHJhZ3MgYW4gdW5zZWxlY3RlZCBpdGVtLCB3ZSBzZWxlY3QgaXQgZmlyc3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNNZWRpYVNlbGVjdGVkKG1lZGlhKSA9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFOYW1lcy5wdXNoKG1lZGlhLm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhcy5wdXNoKG1lZGlhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgZS5kYXRhVHJhbnNmZXIuc2V0RGF0YSgnbWVkaWFOYW1lcycsIEpTT04uc3RyaW5naWZ5KG1lZGlhTmFtZXMpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZS5kYXRhVHJhbnNmZXIuc2V0RGF0YSgnc291cmNlRm9sZGVyJywgdGhpcy5zZWxlY3RlZEZvbGRlci5wYXRoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZS5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlKHRoaXMuZHJhZ0Ryb3BUaHVtYm5haWwsIDEwLCAxMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuZGF0YVRyYW5zZmVyLmVmZmVjdEFsbG93ZWQgPSAnbW92ZSc7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVTY3JvbGxXaGlsZURyYWc6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLmNsaWVudFkgPCAxNTApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxCeSgwLCAtMTApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5jbGllbnRZID4gd2luZG93LmlubmVySGVpZ2h0IC0gMTAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2Nyb2xsQnkoMCwgMTApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBjaGFuZ2VTb3J0OiBmdW5jdGlvbiAobmV3U29ydCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zb3J0QnkgPT0gbmV3U29ydCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3J0QXNjID0gIXRoaXMuc29ydEFzYztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc29ydEFzYyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNvcnRCeSA9IG5ld1NvcnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgJCgnI2NyZWF0ZS1mb2xkZXItbmFtZScpLmtleXByZXNzKGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIga2V5ID0gZS53aGljaDtcclxuICAgICAgICAgICAgICAgIGlmIChrZXkgPT0gMTMpIHsgIC8vIHRoZSBlbnRlciBrZXkgY29kZVxyXG4gICAgICAgICAgICAgICAgICAgICQoJyNtb2RhbEZvb3Rlck9rJykuY2xpY2soKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgJCgnI21vZGFsRm9vdGVyT2snKS5vbignY2xpY2snLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIG5hbWUgPSAkKCcjY3JlYXRlLWZvbGRlci1uYW1lJykudmFsKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgICAgICB1cmw6ICQoJyNjcmVhdGVGb2xkZXJVcmwnKS52YWwoKSArIFwiP3BhdGg9XCIgKyBlbmNvZGVVUklDb21wb25lbnQobWVkaWFBcHAuc2VsZWN0ZWRGb2xkZXIucGF0aCkgKyBcIiZuYW1lPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KG5hbWUpLFxyXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW46ICQoXCJpbnB1dFtuYW1lPSdfX1JlcXVlc3RWZXJpZmljYXRpb25Ub2tlbiddXCIpLnZhbCgpXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBidXMuJGVtaXQoJ2FkZEZvbGRlcicsIG1lZGlhQXBwLnNlbGVjdGVkRm9sZGVyLCBkYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1vZGFsID0gYm9vdHN0cmFwLk1vZGFsLmdldE9yQ3JlYXRlSW5zdGFuY2UoJCgnI2NyZWF0ZUZvbGRlck1vZGFsJykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RhbC5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJyNjcmVhdGVGb2xkZXJNb2RhbC1lcnJvcnMnKS5lbXB0eSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3JNZXNzYWdlID0gSlNPTi5wYXJzZShlcnJvci5yZXNwb25zZVRleHQpLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKCc8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyXCIgcm9sZT1cImFsZXJ0XCI+PC9kaXY+JykudGV4dChlcnJvck1lc3NhZ2UpLmFwcGVuZFRvKCQoJyNjcmVhdGVGb2xkZXJNb2RhbC1lcnJvcnMnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgJCgnI3JlbmFtZU1lZGlhTW9kYWxGb290ZXJPaycpLm9uKCdjbGljaycsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbmV3TmFtZSA9ICQoJyNuZXctaXRlbS1uYW1lJykudmFsKCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgb2xkTmFtZSA9ICQoJyNvbGQtaXRlbS1uYW1lJykudmFsKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG5ld05hbWUgPT09IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRGb2xkZXIgPSBtZWRpYUFwcC5zZWxlY3RlZEZvbGRlci5wYXRoICsgXCIvXCI7XHJcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudEZvbGRlciA9PT0gXCIvXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Rm9sZGVyID0gXCJcIjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgbmV3UGF0aCA9IGN1cnJlbnRGb2xkZXIgKyBuZXdOYW1lO1xyXG4gICAgICAgICAgICAgICAgdmFyIG9sZFBhdGggPSBjdXJyZW50Rm9sZGVyICsgb2xkTmFtZTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAobmV3UGF0aC50b0xvd2VyQ2FzZSgpID09PSBvbGRQYXRoLnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbW9kYWwgPSBib290c3RyYXAuTW9kYWwuZ2V0T3JDcmVhdGVJbnN0YW5jZSgkKCcjcmVuYW1lTWVkaWFNb2RhbCcpKTtcclxuICAgICAgICAgICAgICAgICAgICBtb2RhbC5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAkKCcjcmVuYW1lTWVkaWFVcmwnKS52YWwoKSArIFwiP29sZFBhdGg9XCIgKyBlbmNvZGVVUklDb21wb25lbnQob2xkUGF0aCkgKyBcIiZuZXdQYXRoPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KG5ld1BhdGgpLFxyXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW46ICQoXCJpbnB1dFtuYW1lPSdfX1JlcXVlc3RWZXJpZmljYXRpb25Ub2tlbiddXCIpLnZhbCgpXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbW9kYWwgPSBib290c3RyYXAuTW9kYWwuZ2V0T3JDcmVhdGVJbnN0YW5jZSgkKCcjcmVuYW1lTWVkaWFNb2RhbCcpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW9kYWwuaGlkZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBidXMuJGVtaXQoJ21lZGlhUmVuYW1lZCcsIG5ld05hbWUsIG5ld1BhdGgsIG9sZFBhdGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKCcjcmVuYW1lTWVkaWFNb2RhbC1lcnJvcnMnKS5lbXB0eSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3JNZXNzYWdlID0gSlNPTi5wYXJzZShlcnJvci5yZXNwb25zZVRleHQpLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKCc8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyXCIgcm9sZT1cImFsZXJ0XCI+PC9kaXY+JykudGV4dChlcnJvck1lc3NhZ2UpLmFwcGVuZFRvKCQoJyNyZW5hbWVNZWRpYU1vZGFsLWVycm9ycycpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoZGlzcGxheU1lZGlhQXBwbGljYXRpb24pIHtcclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtZWRpYUFwcCcpLnN0eWxlLmRpc3BsYXkgPSBcIlwiO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAkKGRvY3VtZW50KS50cmlnZ2VyKCdtZWRpYUFwcDpyZWFkeScpO1xyXG5cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvci5yZXNwb25zZVRleHQpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcbiIsIiQoZG9jdW1lbnQpLm9uKCdtZWRpYUFwcDpyZWFkeScsIGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBjaHVua2VkRmlsZVVwbG9hZElkID0gY3J5cHRvLnJhbmRvbVVVSUQoKTtcclxuXHJcbiAgICAkKCcjZmlsZXVwbG9hZCcpXHJcbiAgICAgICAgLmZpbGV1cGxvYWQoe1xyXG4gICAgICAgICAgICBkcm9wWm9uZTogJCgnI21lZGlhQXBwJyksXHJcbiAgICAgICAgICAgIGxpbWl0Q29uY3VycmVudFVwbG9hZHM6IDIwLFxyXG4gICAgICAgICAgICBkYXRhVHlwZTogJ2pzb24nLFxyXG4gICAgICAgICAgICB1cmw6ICQoJyN1cGxvYWRGaWxlcycpLnZhbCgpLFxyXG4gICAgICAgICAgICBtYXhDaHVua1NpemU6IE51bWJlcigkKCcjbWF4VXBsb2FkQ2h1bmtTaXplJykudmFsKCkgfHwgMCksXHJcbiAgICAgICAgICAgIGZvcm1EYXRhOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYW50aUZvcmdlcnlUb2tlbiA9ICQoXCJpbnB1dFtuYW1lPV9fUmVxdWVzdFZlcmlmaWNhdGlvblRva2VuXVwiKS52YWwoKTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ3BhdGgnLCB2YWx1ZTogbWVkaWFBcHAuc2VsZWN0ZWRGb2xkZXIucGF0aCB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ19fUmVxdWVzdFZlcmlmaWNhdGlvblRva2VuJywgdmFsdWU6IGFudGlGb3JnZXJ5VG9rZW4gfSxcclxuICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdfX2NodW5rZWRGaWxlVXBsb2FkSWQnLCB2YWx1ZTogY2h1bmtlZEZpbGVVcGxvYWRJZCB9LFxyXG4gICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBkb25lOiBmdW5jdGlvbiAoZSwgZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgJC5lYWNoKGRhdGEucmVzdWx0LmZpbGVzLCBmdW5jdGlvbiAoaW5kZXgsIGZpbGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWZpbGUuZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFBcHAubWVkaWFJdGVtcy5wdXNoKGZpbGUpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIC5vbignZmlsZXVwbG9hZGNodW5rYmVmb3Jlc2VuZCcsIChlLCBvcHRpb25zKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBmaWxlID0gb3B0aW9ucy5maWxlc1swXTtcclxuICAgICAgICAgICAgLy8gSGVyZSB3ZSByZXBsYWNlIHRoZSBibG9iIHdpdGggYSBGaWxlIG9iamVjdCB0byBlbnN1cmUgdGhlIGZpbGUgbmFtZSBhbmQgb3RoZXJzIGFyZSBwcmVzZXJ2ZWQgZm9yIHRoZSBiYWNrZW5kLlxyXG4gICAgICAgICAgICBvcHRpb25zLmJsb2IgPSBuZXcgRmlsZShcclxuICAgICAgICAgICAgICAgIFtvcHRpb25zLmJsb2JdLFxyXG4gICAgICAgICAgICAgICAgZmlsZS5uYW1lLFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IGZpbGUudHlwZSxcclxuICAgICAgICAgICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IGZpbGUubGFzdE1vZGlmaWVkLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbn0pO1xyXG5cclxuXHJcbiQoZG9jdW1lbnQpLmJpbmQoJ2RyYWdvdmVyJywgZnVuY3Rpb24gKGUpIHtcclxuICAgIHZhciBkdCA9IGUub3JpZ2luYWxFdmVudC5kYXRhVHJhbnNmZXI7XHJcbiAgICBpZiAoZHQudHlwZXMgJiYgKGR0LnR5cGVzLmluZGV4T2YgPyBkdC50eXBlcy5pbmRleE9mKCdGaWxlcycpICE9IC0xIDogZHQudHlwZXMuY29udGFpbnMoJ0ZpbGVzJykpKSB7XHJcbiAgICAgICAgdmFyIGRyb3Bab25lID0gJCgnI2N1c3RvbWRyb3B6b25lJyksXHJcbiAgICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuZHJvcFpvbmVUaW1lb3V0O1xyXG4gICAgICAgIGlmICh0aW1lb3V0KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBkcm9wWm9uZS5hZGRDbGFzcygnaW4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGhvdmVyZWREcm9wWm9uZSA9ICQoZS50YXJnZXQpLmNsb3Nlc3QoZHJvcFpvbmUpO1xyXG4gICAgICAgIHdpbmRvdy5kcm9wWm9uZVRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgd2luZG93LmRyb3Bab25lVGltZW91dCA9IG51bGw7XHJcbiAgICAgICAgICAgIGRyb3Bab25lLnJlbW92ZUNsYXNzKCdpbicpO1xyXG4gICAgICAgIH0sIDEwMCk7XHJcbiAgICB9ICAgIFxyXG59KTsiLCIvLyA8Zm9sZGVyPiBjb21wb25lbnRcclxuVnVlLmNvbXBvbmVudCgnZm9sZGVyJywge1xyXG4gICAgdGVtcGxhdGU6IGBcclxuICAgICAgICA8bGkgOmNsYXNzPVwie3NlbGVjdGVkOiBpc1NlbGVjdGVkfVwiIFxyXG4gICAgICAgICAgICAgICAgdi1vbjpkcmFnbGVhdmUucHJldmVudCA9IFwiaGFuZGxlRHJhZ0xlYXZlKCRldmVudCk7XCIgXHJcbiAgICAgICAgICAgICAgICB2LW9uOmRyYWdvdmVyLnByZXZlbnQuc3RvcD1cImhhbmRsZURyYWdPdmVyKCRldmVudCk7XCIgXHJcbiAgICAgICAgICAgICAgICB2LW9uOmRyb3AucHJldmVudC5zdG9wID0gXCJtb3ZlTWVkaWFUb0ZvbGRlcihtb2RlbCwgJGV2ZW50KVwiID5cclxuICAgICAgICAgICAgPGRpdiA6Y2xhc3M9XCJ7Zm9sZGVyaG92ZXJlZDogaXNIb3ZlcmVkICwgdHJlZXJvb3Q6IGxldmVsID09IDF9XCIgPlxyXG4gICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIDpzdHlsZT1cInsgcGFkZGluZyR7ZG9jdW1lbnQuZGlyID09IFwibHRyXCIgPyBcIkxlZnRcIiA6IFwiUmlnaHRcIn06cGFkZGluZyArICdweCcgfVwiIHYtb246Y2xpY2s9XCJzZWxlY3RcIiAgZHJhZ2dhYmxlPVwiZmFsc2VcIiBjbGFzcz1cImZvbGRlci1tZW51LWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gdi1vbjpjbGljay5zdG9wPVwidG9nZ2xlXCIgY2xhc3M9XCJleHBhbmRcIiA6Y2xhc3M9XCJ7b3BlbmVkOiBvcGVuLCBjbG9zZWQ6ICFvcGVuLCBlbXB0eTogZW1wdHl9XCI+PGkgdi1pZj1cIm9wZW5cIiBjbGFzcz1cImZhLXNvbGlkIGZhLWNoZXZyb24tJHtkb2N1bWVudC5kaXIgPT0gXCJsdHJcIiA/IFwicmlnaHRcIiA6IFwibGVmdFwifVwiPjwvaT48L3NwYW4+IFxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9sZGVyLW5hbWUgbXMtMlwiPnt7bW9kZWwubmFtZX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBmb2xkZXItYWN0aW9uc1wiID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHYtY2xvYWsgaHJlZj1cImphdmFzY3JpcHQ6O1wiIGNsYXNzPVwiYnRuIGJ0bi1zbVwiIHYtb246Y2xpY2s9XCJjcmVhdGVGb2xkZXJcIiB2LWlmPVwiaXNTZWxlY3RlZCB8fCBpc1Jvb3RcIj48aSBjbGFzcz1cImZhLXNvbGlkIGZhLXBsdXNcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdi1jbG9hayBocmVmPVwiamF2YXNjcmlwdDo7XCIgY2xhc3M9XCJidG4gYnRuLXNtXCIgdi1vbjpjbGljaz1cImRlbGV0ZUZvbGRlclwiIHYtaWY9XCJpc1NlbGVjdGVkICYmICFpc1Jvb3RcIj48aSBjbGFzcz1cImZhLXNvbGlkIGZhLXRyYXNoXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPjwvYT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxvbCB2LXNob3c9XCJvcGVuXCI+XHJcbiAgICAgICAgICAgICAgICA8Zm9sZGVyIHYtZm9yPVwiZm9sZGVyIGluIGNoaWxkcmVuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgOmtleT1cImZvbGRlci5wYXRoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgOm1vZGVsPVwiZm9sZGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgOnNlbGVjdGVkLWluLW1lZGlhLWFwcD1cInNlbGVjdGVkSW5NZWRpYUFwcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDpsZXZlbD1cImxldmVsICsgMVwiPlxyXG4gICAgICAgICAgICAgICAgPC9mb2xkZXI+XHJcbiAgICAgICAgICAgIDwvb2w+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICBgLFxyXG4gICAgcHJvcHM6IHtcclxuICAgICAgICBtb2RlbDogT2JqZWN0LFxyXG4gICAgICAgIHNlbGVjdGVkSW5NZWRpYUFwcDogT2JqZWN0LFxyXG4gICAgICAgIGxldmVsOiBOdW1iZXJcclxuICAgIH0sXHJcbiAgICBkYXRhOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgb3BlbjogZmFsc2UsXHJcbiAgICAgICAgICAgIGNoaWxkcmVuOiBudWxsLCAvLyBub3QgaW5pdGlhbGl6ZWQgc3RhdGUgKGZvciBsYXp5LWxvYWRpbmcpXHJcbiAgICAgICAgICAgIHBhcmVudDogbnVsbCxcclxuICAgICAgICAgICAgaXNIb3ZlcmVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcGFkZGluZzogMFxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBjb21wdXRlZDoge1xyXG4gICAgICAgIGVtcHR5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAhdGhpcy5jaGlsZHJlbiB8fCB0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PSAwO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgaXNTZWxlY3RlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gKHRoaXMuc2VsZWN0ZWRJbk1lZGlhQXBwLm5hbWUgPT0gdGhpcy5tb2RlbC5uYW1lKSAmJiAodGhpcy5zZWxlY3RlZEluTWVkaWFBcHAucGF0aCA9PSB0aGlzLm1vZGVsLnBhdGgpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgaXNSb290OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vZGVsLnBhdGggPT09ICcnO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKCh0aGlzLmlzUm9vdCA9PSBmYWxzZSkgJiYgKHRoaXMuaXNBbmNlc3Rvck9mU2VsZWN0ZWRGb2xkZXIoKSkpe1xyXG4gICAgICAgICAgICB0aGlzLnRvZ2dsZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5wYWRkaW5nID0gdGhpcy5sZXZlbCA8IDMgPyAgMTYgOiAxNiArICh0aGlzLmxldmVsICogOCk7XHJcbiAgICB9LFxyXG4gICAgY3JlYXRlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICBidXMuJG9uKCdkZWxldGVGb2xkZXInLCBmdW5jdGlvbiAoZm9sZGVyKSB7XHJcbiAgICAgICAgICAgIGlmIChzZWxmLmNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBzZWxmLmNoaWxkcmVuICYmIHNlbGYuY2hpbGRyZW4uaW5kZXhPZihmb2xkZXIpXHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAxKVxyXG4gICAgICAgICAgICAgICAgICAgIGJ1cy4kZW1pdCgnZm9sZGVyRGVsZXRlZCcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGJ1cy4kb24oJ2FkZEZvbGRlcicsIGZ1bmN0aW9uICh0YXJnZXQsIGZvbGRlcikge1xyXG4gICAgICAgICAgICBpZiAoc2VsZi5tb2RlbCA9PSB0YXJnZXQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChzZWxmLmNoaWxkcmVuICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGlsZHJlbi5wdXNoKGZvbGRlcik7XHJcbiAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgZm9sZGVyLnBhcmVudCA9IHNlbGYubW9kZWw7XHJcbiAgICAgICAgICAgICAgICBidXMuJGVtaXQoJ2ZvbGRlckFkZGVkJywgZm9sZGVyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSxcclxuICAgIG1ldGhvZHM6IHtcclxuICAgICAgICBpc0FuY2VzdG9yT2ZTZWxlY3RlZEZvbGRlcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBwYXJlbnRGb2xkZXIgPSBtZWRpYUFwcC5zZWxlY3RlZEZvbGRlcjtcclxuICAgICAgICAgICAgd2hpbGUgKHBhcmVudEZvbGRlcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudEZvbGRlci5wYXRoID09IHRoaXMubW9kZWwucGF0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwYXJlbnRGb2xkZXIgPSBwYXJlbnRGb2xkZXIucGFyZW50O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgICB0b2dnbGU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy5vcGVuID0gIXRoaXMub3BlbjtcclxuICAgICAgICAgICAgaWYgKHRoaXMub3BlbiAmJiAhdGhpcy5jaGlsZHJlbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkQ2hpbGRyZW4oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2VsZWN0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGJ1cy4kZW1pdCgnZm9sZGVyU2VsZWN0ZWQnLCB0aGlzLm1vZGVsKTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkQ2hpbGRyZW4oKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNyZWF0ZUZvbGRlcjogZnVuY3Rpb24gKCkgeyAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJ1cy4kZW1pdCgnY3JlYXRlRm9sZGVyUmVxdWVzdGVkJyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBkZWxldGVGb2xkZXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdkZWxldGVGb2xkZXJSZXF1ZXN0ZWQnKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGxvYWRDaGlsZHJlbjogZnVuY3Rpb24gKCkgeyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9wZW4gPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub3BlbiA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgIHVybDogJCgnI2dldEZvbGRlcnNVcmwnKS52YWwoKSArIFwiP3BhdGg9XCIgKyBlbmNvZGVVUklDb21wb25lbnQoc2VsZi5tb2RlbC5wYXRoKSxcclxuICAgICAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXHJcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY2hpbGRyZW4gPSBkYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbiAoYykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjLnBhcmVudCA9IHNlbGYubW9kZWw7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGVtdHB5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvci5yZXNwb25zZVRleHQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGhhbmRsZURyYWdPdmVyOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICB0aGlzLmlzSG92ZXJlZCA9IHRydWU7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBoYW5kbGVEcmFnTGVhdmU6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNIb3ZlcmVkID0gZmFsc2U7ICAgICAgICAgICAgXHJcbiAgICAgICAgfSxcclxuICAgICAgICBtb3ZlTWVkaWFUb0ZvbGRlcjogZnVuY3Rpb24gKGZvbGRlciwgZSkge1xyXG5cclxuICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgICAgICBzZWxmLmlzSG92ZXJlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgdmFyIG1lZGlhTmFtZXMgPSBKU09OLnBhcnNlKGUuZGF0YVRyYW5zZmVyLmdldERhdGEoJ21lZGlhTmFtZXMnKSk7IFxyXG5cclxuICAgICAgICAgICAgaWYgKG1lZGlhTmFtZXMubGVuZ3RoIDwgMSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgc291cmNlRm9sZGVyID0gZS5kYXRhVHJhbnNmZXIuZ2V0RGF0YSgnc291cmNlRm9sZGVyJyk7XHJcbiAgICAgICAgICAgIHZhciB0YXJnZXRGb2xkZXIgPSBmb2xkZXIucGF0aDtcclxuXHJcbiAgICAgICAgICAgIGlmIChzb3VyY2VGb2xkZXIgPT09ICcnKSB7XHJcbiAgICAgICAgICAgICAgICBzb3VyY2VGb2xkZXIgPSAncm9vdCc7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0YXJnZXRGb2xkZXIgPT09ICcnKSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRGb2xkZXIgPSAncm9vdCc7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChzb3VyY2VGb2xkZXIgPT09IHRhcmdldEZvbGRlcikge1xyXG4gICAgICAgICAgICAgICAgYWxlcnQoJCgnI3NhbWVGb2xkZXJNZXNzYWdlJykudmFsKCkpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25maXJtRGlhbG9nKHsuLi4kKFwiI21vdmVNZWRpYVwiKS5kYXRhKCksIGNhbGxiYWNrOiBmdW5jdGlvbiAocmVzcCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3ApIHtcclxuICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoJyNtb3ZlTWVkaWFMaXN0VXJsJykudmFsKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX1JlcXVlc3RWZXJpZmljYXRpb25Ub2tlbjogJChcImlucHV0W25hbWU9J19fUmVxdWVzdFZlcmlmaWNhdGlvblRva2VuJ11cIikudmFsKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWRpYU5hbWVzOiBtZWRpYU5hbWVzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlRm9sZGVyOiBzb3VyY2VGb2xkZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRGb2xkZXI6IHRhcmdldEZvbGRlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXMuJGVtaXQoJ21lZGlhTGlzdE1vdmVkJyk7IC8vIE1lZGlhQXBwIHdpbGwgbGlzdGVuIHRvIHRoaXMsIGFuZCB0aGVuIGl0IHdpbGwgcmVsb2FkIHBhZ2Ugc28gdGhlIG1vdmVkIG1lZGlhcyB3b24ndCBiZSB0aGVyZSBhbnltb3JlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IucmVzcG9uc2VUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1cy4kZW1pdCgnbWVkaWFMaXN0TW92ZWQnLCBlcnJvci5yZXNwb25zZVRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH19KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG59KTtcclxuIiwiLy8gPG1lZGlhLWl0ZW1zLWdyaWQ+IGNvbXBvbmVudFxyXG5WdWUuY29tcG9uZW50KCdtZWRpYS1pdGVtcy1ncmlkJywge1xyXG4gICAgdGVtcGxhdGU6IGBcclxuICAgICAgICA8b2wgY2xhc3M9XCJyb3cgbWVkaWEtaXRlbXMtZ3JpZFwiPlxyXG4gICAgICAgICAgICAgICAgPGxpIHYtZm9yPVwibWVkaWEgaW4gZmlsdGVyZWRNZWRpYUl0ZW1zXCJcclxuICAgICAgICAgICAgICAgICAgICA6a2V5PVwibWVkaWEubmFtZVwiIFxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWVkaWEtaXRlbSBtZWRpYS1jb250YWluZXItbWFpbi1saXN0LWl0ZW0gY2FyZCBwLTBcIlxyXG4gICAgICAgICAgICAgICAgICAgIDpzdHlsZT1cInt3aWR0aDogdGh1bWJTaXplICsgMiArICdweCd9XCJcclxuICAgICAgICAgICAgICAgICAgICA6Y2xhc3M9XCJ7c2VsZWN0ZWQ6IGlzTWVkaWFTZWxlY3RlZChtZWRpYSl9XCJcclxuICAgICAgICAgICAgICAgICAgICB2LW9uOmNsaWNrLnN0b3A9XCJ0b2dnbGVTZWxlY3Rpb25PZk1lZGlhKG1lZGlhKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgZHJhZ2dhYmxlPVwidHJ1ZVwiIHYtb246ZHJhZ3N0YXJ0PVwiZHJhZ1N0YXJ0KG1lZGlhLCAkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRodW1iLWNvbnRhaW5lclwiIDpzdHlsZT1cIntoZWlnaHQ6IHRodW1iU2l6ZSArJ3B4J31cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGltZyB2LWlmPVwibWVkaWEubWltZS5zdGFydHNXaXRoKCdpbWFnZScpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6c3JjPVwiYnVpbGRNZWRpYVVybChtZWRpYS51cmwsIHRodW1iU2l6ZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpkYXRhLW1pbWU9XCJtZWRpYS5taW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6c3R5bGU9XCJ7bWF4SGVpZ2h0OiB0aHVtYlNpemUgKydweCcsIG1heFdpZHRoOiB0aHVtYlNpemUgKydweCd9XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgdi1lbHNlIGNsYXNzPVwiZmEtcmVndWxhciBmYS1maWxlIGRpc3BsYXktMVwiIDpkYXRhLW1pbWU9XCJtZWRpYS5taW1lXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lZGlhLWNvbnRhaW5lci1tYWluLWl0ZW0tdGl0bGUgY2FyZC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiBjbGFzcz1cImJ0biBidG4tbGlnaHQgYnRuLXNtIGZsb2F0LWVuZCBpbmxpbmUtbWVkaWEtYnV0dG9uIGVkaXQtYnV0dG9uXCIgdi1vbjpjbGljay5zdG9wPVwicmVuYW1lTWVkaWEobWVkaWEpXCI+PGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1lZGl0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPjwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBidG4tc20gZmxvYXQtZW5kIGlubGluZS1tZWRpYS1idXR0b24gZGVsZXRlLWJ1dHRvblwiIHYtb246Y2xpY2suc3RvcD1cImRlbGV0ZU1lZGlhKG1lZGlhKVwiPjxpIGNsYXNzPVwiZmEtc29saWQgZmEtdHJhc2hcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSA6aHJlZj1cIm1lZGlhLnVybFwiIHRhcmdldD1cIl9ibGFua1wiIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBidG4tc20gZmxvYXQtZW5kIGlubGluZS1tZWRpYS1idXR0b24gdmlldy1idXR0b25cIlwiPjxpIGNsYXNzPVwiZmEtc29saWQgZmEtZG93bmxvYWRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lZGlhLWZpbGVuYW1lIGNhcmQtdGV4dCBzbWFsbFwiIDp0aXRsZT1cIm1lZGlhLm5hbWVcIj57eyBtZWRpYS5uYW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgPC9vbD5cclxuICAgICAgICBgLFxyXG4gICAgZGF0YTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIFQ6IHt9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHByb3BzOiB7XHJcbiAgICAgICAgZmlsdGVyZWRNZWRpYUl0ZW1zOiBBcnJheSxcclxuICAgICAgICBzZWxlY3RlZE1lZGlhczogQXJyYXksXHJcbiAgICAgICAgdGh1bWJTaXplOiBOdW1iZXJcclxuICAgIH0sXHJcbiAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIC8vIHJldHJpZXZpbmcgbG9jYWxpemVkIHN0cmluZ3MgZnJvbSB2aWV3XHJcbiAgICAgICAgc2VsZi5ULmVkaXRCdXR0b24gPSAkKCcjdC1lZGl0LWJ1dHRvbicpLnZhbCgpO1xyXG4gICAgICAgIHNlbGYuVC5kZWxldGVCdXR0b24gPSAkKCcjdC1kZWxldGUtYnV0dG9uJykudmFsKCk7XHJcbiAgICB9LFxyXG4gICAgbWV0aG9kczoge1xyXG4gICAgICAgIGlzTWVkaWFTZWxlY3RlZDogZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB0aGlzLnNlbGVjdGVkTWVkaWFzLnNvbWUoZnVuY3Rpb24gKGVsZW1lbnQsIGluZGV4LCBhcnJheSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQudXJsLnRvTG93ZXJDYXNlKCkgPT09IG1lZGlhLnVybC50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGJ1aWxkTWVkaWFVcmw6IGZ1bmN0aW9uICh1cmwsIHRodW1iU2l6ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdXJsICsgKHVybC5pbmRleE9mKCc/JykgPT0gLTEgPyAnPycgOiAnJicpICsgJ3dpZHRoPScgKyB0aHVtYlNpemUgKyAnJmhlaWdodD0nICsgdGh1bWJTaXplO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdG9nZ2xlU2VsZWN0aW9uT2ZNZWRpYTogZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgIGJ1cy4kZW1pdCgnbWVkaWFUb2dnbGVSZXF1ZXN0ZWQnLCBtZWRpYSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICByZW5hbWVNZWRpYTogZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgIGJ1cy4kZW1pdCgncmVuYW1lTWVkaWFSZXF1ZXN0ZWQnLCBtZWRpYSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBkZWxldGVNZWRpYTogZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgIGJ1cy4kZW1pdCgnZGVsZXRlTWVkaWFSZXF1ZXN0ZWQnLCBtZWRpYSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBkcmFnU3RhcnQ6IGZ1bmN0aW9uIChtZWRpYSwgZSkge1xyXG4gICAgICAgICAgICBidXMuJGVtaXQoJ21lZGlhRHJhZ1N0YXJ0UmVxdWVzdGVkJywgbWVkaWEsIGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcbiIsIi8vIDxtZWRpYS1pdGVtcy10YWJsZT4gY29tcG9uZW50XHJcblZ1ZS5jb21wb25lbnQoJ21lZGlhLWl0ZW1zLXRhYmxlJywge1xyXG4gICAgdGVtcGxhdGU6IGBcclxuICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBtZWRpYS1pdGVtcy10YWJsZSBtLTBcIj5cclxuICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwiaGVhZGVyLXJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiIGNsYXNzPVwidGh1bWJuYWlsLWNvbHVtblwiPnt7IFQuaW1hZ2VIZWFkZXIgfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiIHYtb246Y2xpY2s9XCJjaGFuZ2VTb3J0KCduYW1lJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICB7eyBULm5hbWVIZWFkZXIgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3J0LWluZGljYXRvciBjb2xuYW1lPVwibmFtZVwiIDpzZWxlY3RlZGNvbG5hbWU9XCJzb3J0QnlcIiA6YXNjPVwic29ydEFzY1wiPjwvc29ydC1pbmRpY2F0b3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIiB2LW9uOmNsaWNrPVwiY2hhbmdlU29ydCgnbGFzdE1vZGlmeScpXCI+IFxyXG4gICAgICAgICAgICAgICAgICAgICAgIHt7IFQubGFzdE1vZGlmeUhlYWRlciB9fSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3J0LWluZGljYXRvciBjb2xuYW1lPVwibGFzdE1vZGlmeVwiIDpzZWxlY3RlZGNvbG5hbWU9XCJzb3J0QnlcIiA6YXNjPVwic29ydEFzY1wiPjwvc29ydC1pbmRpY2F0b3I+IFxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGg+IFxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiIHYtb246Y2xpY2s9XCJjaGFuZ2VTb3J0KCdzaXplJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJvcHRpb25hbC1jb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFQuc2l6ZUhlYWRlciB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgPHNvcnQtaW5kaWNhdG9yIGNvbG5hbWU9XCJzaXplXCIgOnNlbGVjdGVkY29sbmFtZT1cInNvcnRCeVwiIDphc2M9XCJzb3J0QXNjXCI+PC9zb3J0LWluZGljYXRvcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCIgdi1vbjpjbGljaz1cImNoYW5nZVNvcnQoJ21pbWUnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9wdGlvbmFsLWNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBULnR5cGVIZWFkZXIgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3J0LWluZGljYXRvciBjb2xuYW1lPVwibWltZVwiIDpzZWxlY3RlZGNvbG5hbWU9XCJzb3J0QnlcIiA6YXNjPVwic29ydEFzY1wiPjwvc29ydC1pbmRpY2F0b3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgPHRib2R5PlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ciB2LWZvcj1cIm1lZGlhIGluIGZpbHRlcmVkTWVkaWFJdGVtc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZWRpYS1pdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2xhc3M9XCJ7c2VsZWN0ZWQ6IGlzTWVkaWFTZWxlY3RlZChtZWRpYSl9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB2LW9uOmNsaWNrLnN0b3A9XCJ0b2dnbGVTZWxlY3Rpb25PZk1lZGlhKG1lZGlhKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhZ2dhYmxlPVwidHJ1ZVwiIHYtb246ZHJhZ3N0YXJ0PVwiZHJhZ1N0YXJ0KG1lZGlhLCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA6a2V5PVwibWVkaWEubmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRodW1ibmFpbC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1nLXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyB2LWlmPVwibWVkaWEubWltZS5zdGFydHNXaXRoKCdpbWFnZScpXCIgZHJhZ2dhYmxlPVwiZmFsc2VcIiA6c3JjPVwiYnVpbGRNZWRpYVVybChtZWRpYS51cmwsIHRodW1iU2l6ZSlcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSB2LWVsc2UgY2xhc3M9XCJmYS1zb2xpZCBmYS1maWxlLW8gZmEtbGdcIiA6ZGF0YS1taW1lPVwibWVkaWEubWltZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+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+PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIGAsXHJcbiAgICBwcm9wczoge1xyXG4gICAgICAgIGNvbG5hbWU6IFN0cmluZyxcclxuICAgICAgICBzZWxlY3RlZGNvbG5hbWU6IFN0cmluZyxcclxuICAgICAgICBhc2M6IEJvb2xlYW5cclxuICAgIH0sXHJcbiAgICBjb21wdXRlZDoge1xyXG4gICAgICAgIGlzQWN0aXZlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbG5hbWUudG9Mb3dlckNhc2UoKSA9PSB0aGlzLnNlbGVjdGVkY29sbmFtZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcbiIsImZ1bmN0aW9uIGluaXRpYWxpemVBdHRhY2hlZE1lZGlhRmllbGQoZWwsIGlkT2ZVcGxvYWRCdXR0b24sIHVwbG9hZEFjdGlvbiwgbWVkaWFJdGVtVXJsLCBhbGxvd011bHRpcGxlLCBhbGxvd01lZGlhVGV4dCwgYWxsb3dBbmNob3JzLCB0ZW1wVXBsb2FkRm9sZGVyLCBtYXhVcGxvYWRDaHVua1NpemUpIHtcclxuXHJcbiAgICB2YXIgdGFyZ2V0ID0gJChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgkKGVsKS5kYXRhKCdmb3InKSkpO1xyXG4gICAgdmFyIGluaXRpYWxQYXRocyA9IHRhcmdldC5kYXRhKFwiaW5pdFwiKTtcclxuXHJcbiAgICB2YXIgbWVkaWFGaWVsZEVkaXRvciA9ICQoZWwpO1xyXG4gICAgdmFyIGlkcHJlZml4ID0gbWVkaWFGaWVsZEVkaXRvci5hdHRyKFwiaWRcIik7XHJcbiAgICB2YXIgbWVkaWFGaWVsZEFwcDtcclxuXHJcbiAgICBtZWRpYUZpZWxkQXBwcy5wdXNoKG1lZGlhRmllbGRBcHAgPSBuZXcgVnVlKHtcclxuICAgICAgICBlbDogbWVkaWFGaWVsZEVkaXRvci5nZXQoMCksXHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICBtZWRpYUl0ZW1zOiBbXSxcclxuICAgICAgICAgICAgc2VsZWN0ZWRNZWRpYTogbnVsbCxcclxuICAgICAgICAgICAgc21hbGxUaHVtYnM6IGZhbHNlLFxyXG4gICAgICAgICAgICBpZFByZWZpeDogaWRwcmVmaXgsXHJcbiAgICAgICAgICAgIGluaXRpYWxpemVkOiBmYWxzZSxcclxuICAgICAgICAgICAgYWxsb3dNZWRpYVRleHQ6IGFsbG93TWVkaWFUZXh0LFxyXG4gICAgICAgICAgICBiYWNrdXBNZWRpYVRleHQ6ICcnLFxyXG4gICAgICAgICAgICBhbGxvd0FuY2hvcnM6IGFsbG93QW5jaG9ycyxcclxuICAgICAgICAgICAgYmFja3VwQW5jaG9yOiBudWxsLFxyXG4gICAgICAgICAgICBtZWRpYVRleHRtb2RhbDogbnVsbCxcclxuICAgICAgICAgICAgYW5jaG9yaW5nTW9kYWw6IG51bGxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgICAgICAgICAgc2VsZi5jdXJyZW50UHJlZnMgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdtZWRpYUZpZWxkUHJlZnMnKSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjb21wdXRlZDoge1xyXG4gICAgICAgICAgICBwYXRoczoge1xyXG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1lZGlhUGF0aHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGluaXRpYWxQYXRocyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWFJdGVtcy5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4Lm1lZGlhUGF0aCA9PT0gJ25vdC1mb3VuZCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZWRpYVBhdGhzLnB1c2goeyBwYXRoOiB4Lm1lZGlhUGF0aCwgaXNSZW1vdmVkOiB4LmlzUmVtb3ZlZCwgaXNOZXc6IHguaXNOZXcsIG1lZGlhVGV4dDogeC5tZWRpYVRleHQsIGFuY2hvcjogeC5hbmNob3IsIGF0dGFjaGVkRmlsZU5hbWU6IHguYXR0YWNoZWRGaWxlTmFtZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkobWVkaWFQYXRocyk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBtZWRpYVBhdGhzID0gdmFsdWVzIHx8IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzaWduYWwgPSAkLkRlZmVycmVkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW1zID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVkaWFQYXRocy5mb3JFYWNoKGZ1bmN0aW9uICh4LCBpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goeyBuYW1lOiAnICcgKyB4LnBhdGgsIG1pbWU6ICcnLCBtZWRpYVBhdGg6ICcnLCBhbmNob3I6IHguYW5jaG9yLCBhdHRhY2hlZEZpbGVOYW1lOiB4LmF0dGFjaGVkRmlsZU5hbWUgfSk7IC8vIGRvbid0IHJlbW92ZSB0aGUgc3BhY2UuIFNvbWV0aGluZyBkaWZmZXJlbnQgaXMgbmVlZGVkIG9yIGl0IHdvbnQgcmVhY3Qgd2hlbiB0aGUgcmVhbCBuYW1lIGFycml2ZXMuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2UgPSAkLndoZW4oc2lnbmFsKS5kb25lKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBtZWRpYUl0ZW1VcmwgKyBcIj9wYXRoPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KHgucGF0aCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnZ1ZWtleSA9IGRhdGEubmFtZSArIGkudG9TdHJpbmcoKTsgLy8gQmVjYXVzZSBhIHVuaXF1ZSBrZXkgaXMgcmVxdWlyZWQgYnkgVnVlIG9uIHYtZm9yIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLm1lZGlhVGV4dCA9IHgubWVkaWFUZXh0OyAvLyBUaGlzIHZhbHVlIGlzIG5vdCByZXR1cm5lZCBmcm9tIHRoZSBhamF4IGNhbGwuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuYW5jaG9yID0geC5hbmNob3I7IC8vIFRoaXMgdmFsdWUgaXMgbm90IHJldHVybmVkIGZyb20gdGhlIGFqYXggY2FsbC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5hdHRhY2hlZEZpbGVOYW1lID0geC5hdHRhY2hlZEZpbGVOYW1lOy8vIFRoaXMgdmFsdWUgaXMgbm90IHJldHVybmVkIGZyb20gdGhlIGFqYXggY2FsbC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMuc3BsaWNlKGksIDEsIGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbXMubGVuZ3RoID09PSArK2xlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoeCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWVkaWFJdGVtcy5wdXNoKHgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShlcnJvcikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5zcGxpY2UoaSwgMSwgeyBuYW1lOiB4LnBhdGgsIG1pbWU6ICcnLCBtZWRpYVBhdGg6ICdub3QtZm91bmQnLCBtZWRpYVRleHQ6ICcnLCBhbmNob3I6IHsgeDogMC41LCB5OiAwLjUgfSwgYXR0YWNoZWRGaWxlTmFtZTogeC5hdHRhY2hlZEZpbGVOYW1lIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbXMubGVuZ3RoID09PSArK2xlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoeCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWVkaWFJdGVtcy5wdXNoKHgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgc2lnbmFsLnJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZmlsZVNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKHRoaXMuc2VsZWN0ZWRNZWRpYS5zaXplIC8gMTAyNCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNhbkFkZE1lZGlhOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbm9uUmVtb3ZlZE1lZGlhSXRlbXMgPSBbXTtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5tZWRpYUl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLm1lZGlhSXRlbXNbaV0uaXNSZW1vdmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vblJlbW92ZWRNZWRpYUl0ZW1zLnB1c2godGhpcy5tZWRpYUl0ZW1zW2ldKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vblJlbW92ZWRNZWRpYUl0ZW1zLmxlbmd0aCA9PT0gMCB8fCBub25SZW1vdmVkTWVkaWFJdGVtcy5sZW5ndGggPiAwICYmIGFsbG93TXVsdGlwbGU7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHRodW1iU2l6ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc21hbGxUaHVtYnMgPyAxMjAgOiAyNDA7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGN1cnJlbnRQcmVmczoge1xyXG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc21hbGxUaHVtYnM6IHRoaXMuc21hbGxUaHVtYnNcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKG5ld1ByZWZzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFuZXdQcmVmcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc21hbGxUaHVtYnMgPSBuZXdQcmVmcy5zbWFsbFRodW1icztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbW91bnRlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgICAgICBzZWxmLnBhdGhzID0gaW5pdGlhbFBhdGhzO1xyXG5cclxuICAgICAgICAgICAgc2VsZi4kb24oJ3NlbGVjdEFuZERlbGV0ZU1lZGlhUmVxdWVzdGVkJywgZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdEFuZERlbGV0ZU1lZGlhKG1lZGlhKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBzZWxmLiRvbignc2VsZWN0TWVkaWFSZXF1ZXN0ZWQnLCBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0TWVkaWEobWVkaWEpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHZhciBzZWxlY3RvciA9ICcjJyArIGlkT2ZVcGxvYWRCdXR0b247XHJcbiAgICAgICAgICAgIHZhciBlZGl0b3JJZCA9IG1lZGlhRmllbGRFZGl0b3IuYXR0cignaWQnKTtcclxuICAgICAgICAgICAgdmFyIGNodW5rZWRGaWxlVXBsb2FkSWQgPSBjcnlwdG8ucmFuZG9tVVVJRCgpO1xyXG5cclxuICAgICAgICAgICAgJChzZWxlY3RvcilcclxuICAgICAgICAgICAgICAgIC5maWxldXBsb2FkKHtcclxuICAgICAgICAgICAgICAgICAgICBsaW1pdENvbmN1cnJlbnRVcGxvYWRzOiAyMCxcclxuICAgICAgICAgICAgICAgICAgICBkcm9wWm9uZTogJCgnIycgKyBlZGl0b3JJZCksXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdqc29uJyxcclxuICAgICAgICAgICAgICAgICAgICB1cmw6IHVwbG9hZEFjdGlvbixcclxuICAgICAgICAgICAgICAgICAgICBtYXhDaHVua1NpemU6IG1heFVwbG9hZENodW5rU2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICBhZGQ6IGZ1bmN0aW9uIChlLCBkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb3VudCA9IGRhdGEuZmlsZXMubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuZmlsZXNbaV0udXBsb2FkTmFtZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZXRVbmlxdWVJZCgpICsgZGF0YS5maWxlc1tpXS5uYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5maWxlc1tpXS5hdHRhY2hlZEZpbGVOYW1lID0gZGF0YS5maWxlc1tpXS5uYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuc3VibWl0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBmb3JtRGF0YTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYW50aUZvcmdlcnlUb2tlbiA9ICQoXCJpbnB1dFtuYW1lPV9fUmVxdWVzdFZlcmlmaWNhdGlvblRva2VuXVwiKS52YWwoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdwYXRoJywgdmFsdWU6IHRlbXBVcGxvYWRGb2xkZXIgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ19fUmVxdWVzdFZlcmlmaWNhdGlvblRva2VuJywgdmFsdWU6IGFudGlGb3JnZXJ5VG9rZW4gfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ19fY2h1bmtlZEZpbGVVcGxvYWRJZCcsIHZhbHVlOiBjaHVua2VkRmlsZVVwbG9hZElkIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBkb25lOiBmdW5jdGlvbiAoZSwgZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmV3TWVkaWFJdGVtcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3Jtc2cgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5yZXN1bHQuZmlsZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhLnJlc3VsdC5maWxlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEucmVzdWx0LmZpbGVzW2ldLmlzTmV3ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2lmIGVycm9yIGlzIGRlZmluZWQgcHJvYmFibHkgdGhlIGZpbGUgdHlwZSBpcyBub3QgYWxsb3dlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLnJlc3VsdC5maWxlc1tpXS5lcnJvciA9PT0gdW5kZWZpbmVkIHx8IGRhdGEucmVzdWx0LmZpbGVzW2ldLmVycm9yID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEucmVzdWx0LmZpbGVzW2ldLmF0dGFjaGVkRmlsZU5hbWUgPSBkYXRhLmZpbGVzW2ldLmF0dGFjaGVkRmlsZU5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld01lZGlhSXRlbXMucHVzaChkYXRhLnJlc3VsdC5maWxlc1tpXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3Jtc2cgKz0gZGF0YS5yZXN1bHQuZmlsZXNbaV0uZXJyb3IgKyBcIlxcblwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcm1zZyAhPT0gXCJcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoZXJyb3Jtc2cpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKG5ld01lZGlhSXRlbXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV3TWVkaWFJdGVtcy5sZW5ndGggPiAxICYmIGFsbG93TXVsdGlwbGUgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydCgkKCcjb25seU9uZUl0ZW1NZXNzYWdlJykudmFsKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFGaWVsZEFwcC5tZWRpYUl0ZW1zLnB1c2gobmV3TWVkaWFJdGVtc1swXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWRpYUZpZWxkQXBwLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhRmllbGRBcHAubWVkaWFJdGVtcyA9IG1lZGlhRmllbGRBcHAubWVkaWFJdGVtcy5jb25jYXQobmV3TWVkaWFJdGVtcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWRpYUZpZWxkQXBwLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0Vycm9yIG9uIHVwbG9hZC4nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coanFYSFIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyh0ZXh0U3RhdHVzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyb3JUaHJvd24pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAub24oJ2ZpbGV1cGxvYWRjaHVua2JlZm9yZXNlbmQnLCAoZSwgb3B0aW9ucykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBmaWxlID0gb3B0aW9ucy5maWxlc1swXTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBIZXJlIHdlIHJlcGxhY2UgdGhlIGJsb2Igd2l0aCBhIEZpbGUgb2JqZWN0IHRvIGVuc3VyZSB0aGUgZmlsZSBuYW1lIGFuZCBvdGhlcnMgYXJlIHByZXNlcnZlZCBmb3IgdGhlIGJhY2tlbmQuXHJcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5ibG9iID0gbmV3IEZpbGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zLmJsb2JdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGZpbGUudHlwZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RNb2RpZmllZDogZmlsZS5sYXN0TW9kaWZpZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBtZXRob2RzOiB7XHJcbiAgICAgICAgICAgIHNlbGVjdE1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYSA9IG1lZGlhO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBnZXRVbmlxdWVJZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICd4eHh4eHh4eC14eHh4LTR4eHgteXh4eC14eHh4eHh4eHh4eHgnLnJlcGxhY2UoL1t4eV0vZywgZnVuY3Rpb24gKGMpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgciA9IE1hdGgucmFuZG9tKCkgKiAxNiB8IDAsIHYgPSBjID09PSAneCcgPyByIDogKHIgJiAweDMgfCAweDgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2LnRvU3RyaW5nKDE2KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICByZW1vdmVTZWxlY3RlZDogZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcmVtb3ZlZCA9IHt9O1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRNZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMubWVkaWFJdGVtcyAmJiB0aGlzLm1lZGlhSXRlbXMuaW5kZXhPZih0aGlzLnNlbGVjdGVkTWVkaWEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWQgPSB0aGlzLm1lZGlhSXRlbXNbaW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVkLmlzUmVtb3ZlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vdGhpcy5tZWRpYUl0ZW1zLnNwbGljZShbaW5kZXhdLCAxLCByZW1vdmVkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZWRpYUl0ZW1zLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHJlbW92ZSBidXR0b24gY2FuIGFsc28gcmVtb3ZlIGEgdW5pcXVlIG1lZGlhIGl0ZW1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tZWRpYUl0ZW1zLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVkID0gdGhpcy5tZWRpYUl0ZW1zW2luZGV4XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZC5pc1JlbW92ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3RoaXMubWVkaWFJdGVtcy5zcGxpY2UoMCwgMSwgcmVtb3ZlZCk7ICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWFJdGVtcy5zcGxpY2UoMCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhID0gbnVsbDtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2hvd01lZGlhVGV4dE1vZGFsOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubWVkaWFUZXh0TW9kYWwgPSBuZXcgYm9vdHN0cmFwLk1vZGFsKHRoaXMuJHJlZnMubWVkaWFUZXh0TW9kYWwpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tZWRpYVRleHRNb2RhbC5zaG93KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJhY2t1cE1lZGlhVGV4dCA9IHRoaXMuc2VsZWN0ZWRNZWRpYS5tZWRpYVRleHQ7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNhbmNlbE1lZGlhVGV4dE1vZGFsOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubWVkaWFUZXh0TW9kYWwuaGlkZSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhLm1lZGlhVGV4dCA9IHRoaXMuYmFja3VwTWVkaWFUZXh0O1xyXG4gICAgICAgICAgICB9LCBcclxuICAgICAgICAgICAgc2hvd0FuY2hvck1vZGFsOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYW5jaG9yaW5nTW9kYWwgPSBuZXcgYm9vdHN0cmFwLk1vZGFsKHRoaXMuJHJlZnMuYW5jaG9yaW5nTW9kYWwpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hbmNob3JpbmdNb2RhbC5zaG93KCk7XHJcbiAgICAgICAgICAgICAgICAvLyBDYXVzZSBhIHJlZnJlc2ggdG8gcmVjYWxjIGhlaWdodHMuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yID0ge1xyXG4gICAgICAgICAgICAgICAgICB4OiB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yLngsXHJcbiAgICAgICAgICAgICAgICAgIHk6IHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IueVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5iYWNrdXBBbmNob3IgPSB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yO1xyXG4gICAgICAgICAgICB9LCAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGNhbmNlbEFuY2hvcmluZ01vZGFsOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYW5jaG9yaW5nTW9kYWwuaGlkZSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvciA9IHRoaXMuYmFja3VwQW5jaG9yO1xyXG4gICAgICAgICAgICB9LCAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXNldEFuY2hvcjogZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yID0geyB4OiAwLjUsIHk6IDAuNSB9O1xyXG4gICAgICAgICAgICB9LCBcclxuICAgICAgICAgICAgb25BbmNob3JEcm9wOiBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGltYWdlID0gdGhpcy4kcmVmcy5hbmNob3JJbWFnZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IgPSB7XHJcbiAgICAgICAgICAgICAgICAgICB4OiBldmVudC5vZmZzZXRYIC8gaW1hZ2UuY2xpZW50V2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgICB5OiBldmVudC5vZmZzZXRZIC8gaW1hZ2UuY2xpZW50SGVpZ2h0XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGFuY2hvckxlZnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLiRyZWZzLmFuY2hvckltYWdlICYmIHRoaXMuJHJlZnMubW9kYWxCb2R5ICYmIHRoaXMuc2VsZWN0ZWRNZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFdoZW4gaW1hZ2UgaXMgc2hydW5rIGNvbXBhcmUgYWdhaW5zdCB0aGUgbW9kYWwgYm9keS5cclxuICAgICAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gKHRoaXMuJHJlZnMubW9kYWxCb2R5LmNsaWVudFdpZHRoIC0gdGhpcy4kcmVmcy5hbmNob3JJbWFnZS5jbGllbnRXaWR0aCkgLyAyO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9ICh0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yLnggKiB0aGlzLiRyZWZzLmFuY2hvckltYWdlLmNsaWVudFdpZHRoKSArIG9mZnNldDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24gPCAxNykgeyAvLyBBZGp1c3Qgc28gdGhlIHRhcmdldCBkb2Vzbid0IHNob3cgb3V0c2lkZSBpbWFnZS5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSAxNztcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uIC0gODsgLy8gQWRqdXN0IHRvIGhpdCB0aGUgbW91c2UgcG9pbnRlci5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uICsgJ3B4JztcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcwJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgICAgICAgICAgIFxyXG4gICAgICAgICAgICBhbmNob3JUb3A6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLiRyZWZzLmFuY2hvckltYWdlICYmIHRoaXMuc2VsZWN0ZWRNZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9IHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IueSAqIHRoaXMuJHJlZnMuYW5jaG9ySW1hZ2UuY2xpZW50SGVpZ2h0O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvbiA8IDE1KSB7IC8vIEFkanVzdG1lbnQgc28gdGhlIHRhcmdldCBkb2Vzbid0IHNob3cgb3V0c2lkZSBpbWFnZS5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSAxNTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uICsgNTsgLy8gQWRqdXN0IHRvIGhpdCB0aGUgbW91c2UgcG9pbnRlci5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uICsgJ3B4JztcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcwJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2V0QW5jaG9yOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIHZhciBpbWFnZSA9IHRoaXMuJHJlZnMuYW5jaG9ySW1hZ2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHg6IGV2ZW50Lm9mZnNldFggLyBpbWFnZS5jbGllbnRXaWR0aCxcclxuICAgICAgICAgICAgICAgICAgICB5OiBldmVudC5vZmZzZXRZIC8gaW1hZ2UuY2xpZW50SGVpZ2h0XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sICAgICAgICAgXHJcbiAgICAgICAgICAgIGFkZE1lZGlhRmlsZXM6IGZ1bmN0aW9uIChmaWxlcykge1xyXG4gICAgICAgICAgICAgICAgaWYgKChmaWxlcy5sZW5ndGggPiAxKSAmJiAoYWxsb3dNdWx0aXBsZSA9PT0gZmFsc2UpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWxlcnQoJCgnI29ubHlPbmVJdGVtTWVzc2FnZScpLnZhbCgpKTtcclxuICAgICAgICAgICAgICAgICAgICBtZWRpYUZpZWxkQXBwLm1lZGlhSXRlbXMucHVzaChmaWxlc1swXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVkaWFGaWVsZEFwcC5pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIG1lZGlhRmllbGRBcHAubWVkaWFJdGVtcyA9IG1lZGlhRmllbGRBcHAubWVkaWFJdGVtcy5jb25jYXQoZmlsZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIG1lZGlhRmllbGRBcHAuaW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZWxlY3RBbmREZWxldGVNZWRpYTogZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkTWVkaWEgPSBtZWRpYTtcclxuICAgICAgICAgICAgICAgIC8vIHNldFRpbWVvdXQgYmVjYXVzZSBzb21ldGltZXMgXHJcbiAgICAgICAgICAgICAgICAvLyByZW1vdmVTZWxlY3RlZCB3YXMgY2FsbGVkIGV2ZW4gYmVmb3JlIHRoZSBtZWRpYSB3YXMgc2V0LlxyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5yZW1vdmVTZWxlY3RlZCgpO1xyXG4gICAgICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgd2F0Y2g6IHtcclxuICAgICAgICAgICAgbWVkaWFJdGVtczoge1xyXG4gICAgICAgICAgICAgICAgZGVlcDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGhhbmRsZXIgKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFRyaWdnZXIgcHJldmlldyByZW5kZXJpbmdcclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgJChkb2N1bWVudCkudHJpZ2dlcignY29udGVudHByZXZpZXc6cmVuZGVyJyk7IH0sIDEwMCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sIFxyXG4gICAgICAgICAgICBjdXJyZW50UHJlZnM6IGZ1bmN0aW9uIChuZXdQcmVmcykge1xyXG4gICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ21lZGlhRmllbGRQcmVmcycsIEpTT04uc3RyaW5naWZ5KG5ld1ByZWZzKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KSk7XHJcbn1cclxuIiwiZnVuY3Rpb24gaW5pdGlhbGl6ZU1lZGlhRmllbGQoZWwsIG1vZGFsQm9keUVsZW1lbnQsIG1lZGlhSXRlbVVybCwgYWxsb3dNdWx0aXBsZSwgYWxsb3dNZWRpYVRleHQsIGFsbG93QW5jaG9ycykge1xyXG4gICAgLy9CYWdQYXJ0IGNyZWF0ZSBhIHNjcmlwdCBzZWN0aW9uIHdpdGhvdXQgb3RoZXIgRE9NIGVsZW1lbnRzXHJcbiAgICBpZihlbCA9PT0gbnVsbClcclxuICAgICAgICByZXR1cm47XHJcbiAgICBcclxuICAgIHZhciB0YXJnZXQgPSAkKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCQoZWwpLmRhdGEoJ2ZvcicpKSk7XHJcbiAgICB2YXIgaW5pdGlhbFBhdGhzID0gdGFyZ2V0LmRhdGEoXCJpbml0XCIpO1xyXG5cclxuICAgIHZhciBtZWRpYUZpZWxkRWRpdG9yID0gJChlbCk7XHJcbiAgICB2YXIgaWRwcmVmaXggPSBtZWRpYUZpZWxkRWRpdG9yLmF0dHIoXCJpZFwiKTtcclxuICAgIHZhciBtZWRpYUZpZWxkQXBwO1xyXG5cclxuICAgIC8vd2hlbiBoaWRlIG1vZGFsIGRldGFjaCBtZWRpYSBhcHAgdG8gYXZvaWQgaXNzdWUgb24gQmFnUGFydFxyXG4gICAgbW9kYWxCb2R5RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdoaWRkZW4uYnMubW9kYWwnLCBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAkKFwiI21lZGlhQXBwXCIpLmFwcGVuZFRvKCdib2R5Jyk7XHJcbiAgICAgICAgJChcIiNtZWRpYUFwcFwiKS5oaWRlKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBtZWRpYUZpZWxkQXBwcy5wdXNoKG1lZGlhRmllbGRBcHAgPSBuZXcgVnVlKHtcclxuICAgICAgICBlbDogbWVkaWFGaWVsZEVkaXRvci5nZXQoMCksXHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICBtZWRpYUl0ZW1zOiBbXSxcclxuICAgICAgICAgICAgc2VsZWN0ZWRNZWRpYTogbnVsbCxcclxuICAgICAgICAgICAgc21hbGxUaHVtYnM6IGZhbHNlLFxyXG4gICAgICAgICAgICBpZFByZWZpeDogaWRwcmVmaXgsXHJcbiAgICAgICAgICAgIGluaXRpYWxpemVkOiBmYWxzZSxcclxuICAgICAgICAgICAgYWxsb3dNZWRpYVRleHQ6IGFsbG93TWVkaWFUZXh0LFxyXG4gICAgICAgICAgICBiYWNrdXBNZWRpYVRleHQ6ICcnLFxyXG4gICAgICAgICAgICBhbGxvd0FuY2hvcnM6IGFsbG93QW5jaG9ycyxcclxuICAgICAgICAgICAgYmFja3VwQW5jaG9yOiBudWxsLFxyXG4gICAgICAgICAgICBtZWRpYVRleHRNb2RhbDogbnVsbCxcclxuICAgICAgICAgICAgYW5jaG9yaW5nTW9kYWw6IG51bGxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgICAgICAgICAgc2VsZi5jdXJyZW50UHJlZnMgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdtZWRpYUZpZWxkUHJlZnMnKSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjb21wdXRlZDoge1xyXG4gICAgICAgICAgICBwYXRoczoge1xyXG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1lZGlhUGF0aHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGluaXRpYWxQYXRocyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWFJdGVtcy5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4Lm1lZGlhUGF0aCA9PT0gJ25vdC1mb3VuZCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZWRpYVBhdGhzLnB1c2goeyBwYXRoOiB4Lm1lZGlhUGF0aCwgbWVkaWFUZXh0OiB4Lm1lZGlhVGV4dCwgYW5jaG9yOiB4LmFuY2hvciB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkobWVkaWFQYXRocyk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBtZWRpYVBhdGhzID0gdmFsdWVzIHx8IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzaWduYWwgPSAkLkRlZmVycmVkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW1zID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVkaWFQYXRocy5mb3JFYWNoKGZ1bmN0aW9uICh4LCBpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goeyBuYW1lOiAnICcgKyB4LnBhdGgsIG1pbWU6ICcnLCBtZWRpYVBhdGg6ICcnIH0pOyAvLyBkb24ndCByZW1vdmUgdGhlIHNwYWNlLiBTb21ldGhpbmcgZGlmZmVyZW50IGlzIG5lZWRlZCBvciBpdCB3b250IHJlYWN0IHdoZW4gdGhlIHJlYWwgbmFtZSBhcnJpdmVzLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlID0gJC53aGVuKHNpZ25hbCkuZG9uZShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogbWVkaWFJdGVtVXJsICsgXCI/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/PyAnZmlsZXVwbG9hZCcpO1xyXG4gICAgICAgICQodXBsb2FkSW5wdXQpLmJpbmQoJ2ZpbGV1cGxvYWRhZGQnLCBmdW5jdGlvbiAoZSwgZGF0YSkge1xyXG4gICAgICAgICAgICBpZiAoIWRhdGEuZmlsZXMpIHsgXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGF0YS5maWxlcy5mb3JFYWNoKGZ1bmN0aW9uIChuZXdGaWxlKSB7ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgdmFyIGFscmVhZHlJbkxpc3QgPSBzZWxmLmZpbGVzLnNvbWUoZnVuY3Rpb24gKGYpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZi5uYW1lID09IG5ld0ZpbGUubmFtZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICghYWxyZWFkeUluTGlzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuZmlsZXMucHVzaCh7IG5hbWU6IG5ld0ZpbGUubmFtZSwgcGVyY2VudGFnZTogMCwgZXJyb3JNZXNzYWdlOiAnJyB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignQSBmaWxlIHdpdGggdGhlIHNhbWUgbmFtZSBpcyBhbHJlYWR5IG9uIHRoZSBxdWV1ZTonICsgbmV3RmlsZS5uYW1lKTtcclxuICAgICAgICAgICAgICAgIH0gICAgICAgICBcclxuICAgICAgICAgICAgfSk7ICAgICAgICAgICAgXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGJ1cy4kb24oJ3JlbW92YWxSZXF1ZXN0JywgZnVuY3Rpb24gKGZpbGVVcGxvYWQpIHtcclxuICAgICAgICAgICAgc2VsZi5maWxlcy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtLCBpbmRleCwgYXJyYXkpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtLm5hbWUgPT0gZmlsZVVwbG9hZC5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJyYXkuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGJ1cy4kb24oJ0Vycm9yT25VcGxvYWQnLCBmdW5jdGlvbiAoZmlsZVVwbG9hZCkge1xyXG4gICAgICAgICAgICBzZWxmLnVwZGF0ZUNvdW50KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9LFxyXG4gICAgbWV0aG9kczoge1xyXG4gICAgICAgIHVwZGF0ZUNvdW50OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3JDb3VudCA9IHRoaXMuZmlsZXMuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5lcnJvck1lc3NhZ2UgIT0gJyc7XHJcbiAgICAgICAgICAgIH0pLmxlbmd0aDtcclxuICAgICAgICAgICAgdGhpcy5wZW5kaW5nQ291bnQgPSB0aGlzLmZpbGVzLmxlbmd0aCAtIHRoaXMuZXJyb3JDb3VudDtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZmlsZXMubGVuZ3RoIDwgMSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5leHBhbmRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjbGVhckVycm9yczogZnVuY3Rpb24gKCkgeyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLmZpbGVzID0gdGhpcy5maWxlcy5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmVycm9yTWVzc2FnZSA9PSAnJztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHdhdGNoOiB7XHJcbiAgICAgICAgZmlsZXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVDb3VudCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcbiJdfQ== +//# 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+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIHYtZWxzZSBjbGFzcz1cImZhLXNvbGlkIGZhLWZpbGUtbyBmYS1sZ1wiIDpkYXRhLW1pbWU9XCJtZWRpYS5taW1lXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVkaWEtbmFtZS1jZWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJicmVhay13b3JkXCI+IHt7IG1lZGlhLm5hbWUgfX0gPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9ucy1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiBjbGFzcz1cImJ0biBidG4tbGluayBidG4tc20gbWUtMSBlZGl0LWJ1dHRvblwiIHYtb246Y2xpY2suc3RvcD1cInJlbmFtZU1lZGlhKG1lZGlhKVwiPiB7eyBULmVkaXRCdXR0b24gfX0gPC9hID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiBjbGFzcz1cImJ0biBidG4tbGluayBidG4tc20gZGVsZXRlLWJ1dHRvblwiIHYtb246Y2xpY2suc3RvcD1cImRlbGV0ZU1lZGlhKG1lZGlhKVwiPiB7eyBULmRlbGV0ZUJ1dHRvbiB9fSA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSA6aHJlZj1cIm1lZGlhLnVybFwiIHRhcmdldD1cIl9ibGFua1wiIGNsYXNzPVwiYnRuIGJ0bi1saW5rIGJ0bi1zbSB2aWV3LWJ1dHRvblwiPiB7eyBULnZpZXdCdXR0b24gfX0gPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY29sXCI+IHt7IHByaW50RGF0ZVRpbWUobWVkaWEubGFzdE1vZGlmeSkgfX0gPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNvbCBvcHRpb25hbC1jb2xcIj4ge3sgaXNOYU4obWVkaWEuc2l6ZSk/IDAgOiBNYXRoLnJvdW5kKG1lZGlhLnNpemUgLyAxMDI0KSB9fSBLQjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jb2wgb3B0aW9uYWwtY29sXCI+e3sgbWVkaWEubWltZSB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgPC90YWJsZT5cclxuICAgICAgICBgLFxyXG4gICAgZGF0YTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIFQ6IHt9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHByb3BzOiB7XHJcbiAgICAgICAgc29ydEJ5OiBTdHJpbmcsXHJcbiAgICAgICAgc29ydEFzYzogQm9vbGVhbixcclxuICAgICAgICBmaWx0ZXJlZE1lZGlhSXRlbXM6IEFycmF5LFxyXG4gICAgICAgIHNlbGVjdGVkTWVkaWFzOiBBcnJheSxcclxuICAgICAgICB0aHVtYlNpemU6IE51bWJlclxyXG4gICAgfSxcclxuICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgc2VsZi5ULmltYWdlSGVhZGVyID0gJCgnI3QtaW1hZ2UtaGVhZGVyJykudmFsKCk7XHJcbiAgICAgICAgc2VsZi5ULm5hbWVIZWFkZXIgPSAkKCcjdC1uYW1lLWhlYWRlcicpLnZhbCgpO1xyXG4gICAgICAgIHNlbGYuVC5sYXN0TW9kaWZ5SGVhZGVyID0gJCgnI3QtbGFzdE1vZGlmeS1oZWFkZXInKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQuc2l6ZUhlYWRlciA9ICQoJyN0LXNpemUtaGVhZGVyJykudmFsKCk7XHJcbiAgICAgICAgc2VsZi5ULnR5cGVIZWFkZXIgPSAkKCcjdC10eXBlLWhlYWRlcicpLnZhbCgpO1xyXG4gICAgICAgIHNlbGYuVC5lZGl0QnV0dG9uID0gJCgnI3QtZWRpdC1idXR0b24nKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQuZGVsZXRlQnV0dG9uID0gJCgnI3QtZGVsZXRlLWJ1dHRvbicpLnZhbCgpO1xyXG4gICAgICAgIHNlbGYuVC52aWV3QnV0dG9uID0gJCgnI3Qtdmlldy1idXR0b24nKS52YWwoKTtcclxuICAgIH0sXHJcbiAgICBtZXRob2RzOiB7XHJcbiAgICAgICAgaXNNZWRpYVNlbGVjdGVkOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuc2VsZWN0ZWRNZWRpYXMuc29tZShmdW5jdGlvbiAoZWxlbWVudCwgaW5kZXgsIGFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudC51cmwudG9Mb3dlckNhc2UoKSA9PT0gbWVkaWEudXJsLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgYnVpbGRNZWRpYVVybDogZnVuY3Rpb24gKHVybCwgdGh1bWJTaXplKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1cmwgKyAodXJsLmluZGV4T2YoJz8nKSA9PSAtMSA/ICc/JyA6ICcmJykgKyAnd2lkdGg9JyArIHRodW1iU2l6ZSArICcmaGVpZ2h0PScgKyB0aHVtYlNpemU7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjaGFuZ2VTb3J0OiBmdW5jdGlvbiAobmV3U29ydCkge1xyXG4gICAgICAgICAgICBidXMuJGVtaXQoJ3NvcnRDaGFuZ2VSZXF1ZXN0ZWQnLCBuZXdTb3J0KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRvZ2dsZVNlbGVjdGlvbk9mTWVkaWE6IGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICBidXMuJGVtaXQoJ21lZGlhVG9nZ2xlUmVxdWVzdGVkJywgbWVkaWEpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcmVuYW1lTWVkaWE6IGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICBidXMuJGVtaXQoJ3JlbmFtZU1lZGlhUmVxdWVzdGVkJywgbWVkaWEpOyAgICAgICAgICAgIFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGVsZXRlTWVkaWE6IGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICBidXMuJGVtaXQoJ2RlbGV0ZU1lZGlhUmVxdWVzdGVkJywgbWVkaWEpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZHJhZ1N0YXJ0OiBmdW5jdGlvbiAobWVkaWEsIGUpIHtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdtZWRpYURyYWdTdGFydFJlcXVlc3RlZCcsIG1lZGlhLCBlKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHByaW50RGF0ZVRpbWU6IGZ1bmN0aW9uIChkYXRlbWlsbGlzKXtcclxuICAgICAgICAgICAgdmFyIGQgPSBuZXcgRGF0ZShkYXRlbWlsbGlzKTtcclxuICAgICAgICAgICAgcmV0dXJuIGQudG9Mb2NhbGVTdHJpbmcoKTsgICAgICAgICAgICBcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG4iLCIvLyBUaGlzIGNvbXBvbmVudCByZWNlaXZlcyBhIGxpc3Qgb2YgYWxsIHRoZSBpdGVtcywgdW5wYWdlZC5cclxuLy8gQXMgdGhlIHVzZXIgaW50ZXJhY3RzIHdpdGggdGhlIHBhZ2VyLCBpdCByYWlzZXMgZXZlbnRzIHdpdGggdGhlIGl0ZW1zIGluIHRoZSBjdXJyZW50IHBhZ2UuXHJcbi8vIEl0J3MgdGhlIHBhcmVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGxpc3RlbiBmb3IgdGhlc2UgZXZlbnRzIGFuZCBkaXNwbGF5IHRoZSByZWNlaXZlZCBpdGVtc1xyXG4vLyA8cGFnZXI+IGNvbXBvbmVudFxyXG5WdWUuY29tcG9uZW50KCdwYWdlcicsIHtcclxuICAgIHRlbXBsYXRlOiBgXHJcbiAgICA8ZGl2PlxyXG4gICAgICAgIDxuYXYgaWQ9XCJtZWRpYS1wYWdlclwiIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIiBhcmlhLWxhYmVsPVwiUGFnaW5hdGlvbiBOYXZpZ2F0aW9uXCIgcm9sZT1cIm5hdmlnYXRpb25cIiA6ZGF0YS1jb21wdXRlZC10cmlnZ2VyPVwiaXRlbXNJbkN1cnJlbnRQYWdlLmxlbmd0aFwiPlxyXG4gICAgICAgICAgICA8dWwgY2xhc3M9XCJwYWdpbmF0aW9uIHBhZ2luYXRpb24tc20gbS0wXCI+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJwYWdlLWl0ZW0gbWVkaWEtZmlyc3QtYnV0dG9uXCIgOmNsYXNzPVwie2Rpc2FibGVkIDogIWNhbkRvRmlyc3R9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJwYWdlLWxpbmtcIiBocmVmPVwiI1wiIDp0YWJpbmRleD1cImNhbkRvRmlyc3QgPyAwIDogLTFcIiB2LW9uOmNsaWNrPVwiZ29GaXJzdFwiPnt7IFQucGFnZXJGaXJzdEJ1dHRvbiB9fTwvYT5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJwYWdlLWl0ZW1cIiA6Y2xhc3M9XCJ7ZGlzYWJsZWQgOiAhY2FuRG9QcmV2fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwicGFnZS1saW5rXCIgaHJlZj1cIiNcIiA6dGFiaW5kZXg9XCJjYW5Eb1ByZXYgPyAwIDogLTFcIiB2LW9uOmNsaWNrPVwicHJldmlvdXNcIj57eyBULnBhZ2VyUHJldmlvdXNCdXR0b24gfX08L2E+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIHYtaWY9XCJsaW5rICE9PSAtMVwiIGNsYXNzPVwicGFnZS1pdGVtIHBhZ2UtbnVtYmVyXCIgIDpjbGFzcz1cInthY3RpdmUgOiBjdXJyZW50ID09IGxpbmsgLSAxfVwiIHYtZm9yPVwibGluayBpbiBwYWdlTGlua3NcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cInBhZ2UtbGlua1wiIGhyZWY9XCIjXCIgdi1vbjpjbGljaz1cImdvVG8obGluayAtIDEpXCIgOmFyaWEtbGFiZWw9XCInR290byBQYWdlJyArIGxpbmtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3tsaW5rfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdi1pZj1cImN1cnJlbnQgPT0gbGluayAtMVwiIGNsYXNzPVwidmlzdWFsbHktaGlkZGVuXCI+KGN1cnJlbnQpPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJwYWdlLWl0ZW1cIiA6Y2xhc3M9XCJ7ZGlzYWJsZWQgOiAhY2FuRG9OZXh0fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwicGFnZS1saW5rXCIgaHJlZj1cIiNcIiA6dGFiaW5kZXg9XCJjYW5Eb05leHQgPyAwIDogLTFcIiB2LW9uOmNsaWNrPVwibmV4dFwiPnt7IFQucGFnZXJOZXh0QnV0dG9uIH19PC9hPlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInBhZ2UtaXRlbSBtZWRpYS1sYXN0LWJ1dHRvblwiIDpjbGFzcz1cIntkaXNhYmxlZCA6ICFjYW5Eb0xhc3R9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJwYWdlLWxpbmtcIiBocmVmPVwiI1wiIDp0YWJpbmRleD1cImNhbkRvTGFzdCA/IDAgOiAtMVwiIHYtb246Y2xpY2s9XCJnb0xhc3RcIj57eyBULnBhZ2VyTGFzdEJ1dHRvbiB9fTwvYT5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJwYWdlLWl0ZW0gbXMtNCBwYWdlLXNpemUtaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhZ2UtbGluayBkaXNhYmxlZCB0ZXh0LW11dGVkIHBhZ2Utc2l6ZS1sYWJlbFwiPnt7IFQucGFnZXJQYWdlU2l6ZUxhYmVsIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGlkPVwicGFnZVNpemVTZWxlY3RcIiBjbGFzcz1cInBhZ2UtbGlua1wiIHYtbW9kZWw9XCJwYWdlU2l6ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2LWZvcj1cIm9wdGlvbiBpbiBwYWdlU2l6ZU9wdGlvbnNcIiB2LWJpbmQ6dmFsdWU9XCJvcHRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e29wdGlvbn19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbmF2PlxyXG4gICAgICAgIDxuYXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxyXG4gICAgICAgICAgICA8dWwgY2xhc3M9XCJwYWdpbmF0aW9uIHBhZ2luYXRpb24tc20gbS0wIG10LTJcIj5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInBhZ2UtaXRlbSBtcy00IHBhZ2UtaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGFnZS1saW5rIGRpc2FibGVkIHRleHQtbXV0ZWQgXCI+e3sgVC5wYWdlclBhZ2VMYWJlbCB9fSB7e2N1cnJlbnQgKyAxfX0ve3t0b3RhbFBhZ2VzfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicGFnZS1pdGVtIG1zLTQgdG90YWwtaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGFnZS1saW5rIGRpc2FibGVkIHRleHQtbXV0ZWQgXCI+IHt7IFQucGFnZXJUb3RhbExhYmVsIH19IHt7dG90YWx9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9uYXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgYCxcclxuICAgIHByb3BzOiB7XHJcbiAgICAgICAgc291cmNlSXRlbXM6IEFycmF5XHJcbiAgICB9LFxyXG4gICAgZGF0YTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHBhZ2VTaXplOiAxMCxcclxuICAgICAgICAgICAgcGFnZVNpemVPcHRpb25zOiBbMTAsIDMwLCA1MCwgMTAwXSxcclxuICAgICAgICAgICAgY3VycmVudDogMCxcclxuICAgICAgICAgICAgVDoge31cclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgIC8vIHJldHJpZXZpbmcgbG9jYWxpemVkIHN0cmluZ3MgZnJvbSB2aWV3XHJcbiAgICAgICAgc2VsZi5ULnBhZ2VyRmlyc3RCdXR0b24gPSAkKCcjdC1wYWdlci1maXJzdC1idXR0b24nKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQucGFnZXJQcmV2aW91c0J1dHRvbiA9ICQoJyN0LXBhZ2VyLXByZXZpb3VzLWJ1dHRvbicpLnZhbCgpO1xyXG4gICAgICAgIHNlbGYuVC5wYWdlck5leHRCdXR0b24gPSAkKCcjdC1wYWdlci1uZXh0LWJ1dHRvbicpLnZhbCgpO1xyXG4gICAgICAgIHNlbGYuVC5wYWdlckxhc3RCdXR0b24gPSAkKCcjdC1wYWdlci1sYXN0LWJ1dHRvbicpLnZhbCgpO1xyXG4gICAgICAgIHNlbGYuVC5wYWdlclBhZ2VTaXplTGFiZWwgPSAkKCcjdC1wYWdlci1wYWdlLXNpemUtbGFiZWwnKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQucGFnZXJQYWdlTGFiZWwgPSAkKCcjdC1wYWdlci1wYWdlLWxhYmVsJykudmFsKCk7XHJcbiAgICAgICAgc2VsZi5ULnBhZ2VyVG90YWxMYWJlbCA9ICQoJyN0LXBhZ2VyLXRvdGFsLWxhYmVsJykudmFsKCk7ICAgICAgICBcclxuICAgIH0sXHJcbiAgICBtZXRob2RzOiB7XHJcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSB0aGlzLmN1cnJlbnQgKyAxO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcHJldmlvdXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gdGhpcy5jdXJyZW50IC0gMTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGdvRmlyc3Q6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gMDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGdvTGFzdDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSB0aGlzLnRvdGFsUGFnZXMgLSAxO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZ29UbzogZnVuY3Rpb24gKHRhcmdldFBhZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gdGFyZ2V0UGFnZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgY29tcHV0ZWQ6IHtcclxuICAgICAgICB0b3RhbDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zb3VyY2VJdGVtcyA/IHRoaXMuc291cmNlSXRlbXMubGVuZ3RoIDogMDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRvdGFsUGFnZXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIHBhZ2VzID0gTWF0aC5jZWlsKHRoaXMudG90YWwgLyB0aGlzLnBhZ2VTaXplKTtcclxuICAgICAgICAgICAgcmV0dXJuIHBhZ2VzID4gMCA/IHBhZ2VzIDogMTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGlzTGFzdFBhZ2U6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudCArIDEgPj0gdGhpcy50b3RhbFBhZ2VzO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgaXNGaXJzdFBhZ2U6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudCA9PT0gMDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNhbkRvTmV4dDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gIXRoaXMuaXNMYXN0UGFnZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNhbkRvUHJldjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gIXRoaXMuaXNGaXJzdFBhZ2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjYW5Eb0ZpcnN0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAhdGhpcy5pc0ZpcnN0UGFnZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNhbkRvTGFzdDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gIXRoaXMuaXNMYXN0UGFnZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIHRoaXMgY29tcHV0ZWQgaXMgb25seSB0byBoYXZlIGEgY2VudHJhbCBwbGFjZSB3aGVyZSB3ZSBkZXRlY3QgY2hhbmdlcyBhbmQgbGV2ZXJhZ2UgVnVlIEpTIHJlYWN0aXZpdHkgdG8gcmFpc2Ugb3VyIGV2ZW50LlxyXG4gICAgICAgIC8vIFRoYXQgZXZlbnQgd2lsbCBiZSBoYW5kbGVkIGJ5IHRoZSBwYXJlbnQgbWVkaWEgYXBwIHRvIGRpc3BsYXkgdGhlIGl0ZW1zIGluIHRoZSBwYWdlLlxyXG4gICAgICAgIC8vIHRoaXMgbG9naWMgd2lsbCBub3QgcnVuIGlmIHRoZSBjb21wdXRlZCBwcm9wZXJ0eSBpcyBub3QgdXNlZCBpbiB0aGUgdGVtcGxhdGUuIFdlIHVzZSBhIGR1bW15IFwiZGF0YS1jb21wdXRlZC10cmlnZ2VyXCIgYXR0cmlidXRlIGZvciB0aGF0LlxyXG4gICAgICAgIGl0ZW1zSW5DdXJyZW50UGFnZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLnBhZ2VTaXplICogdGhpcy5jdXJyZW50O1xyXG4gICAgICAgICAgICB2YXIgZW5kID0gc3RhcnQgKyB0aGlzLnBhZ2VTaXplO1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5zb3VyY2VJdGVtcy5zbGljZShzdGFydCwgZW5kKTtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdwYWdlckV2ZW50JywgcmVzdWx0KTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHBhZ2VMaW5rczogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICAgICAgdmFyIGxpbmtzID0gW107XHJcblxyXG4gICAgICAgICAgICBsaW5rcy5wdXNoKHRoaXMuY3VycmVudCArIDEpO1xyXG5cclxuICAgICAgICAgICAgLy8gQWRkIDIgaXRlbXMgYmVmb3JlIGN1cnJlbnRcclxuICAgICAgICAgICAgdmFyIGJlZm9yZUN1cnJlbnQgPSB0aGlzLmN1cnJlbnQgPiAwID8gdGhpcy5jdXJyZW50IDogLTE7XHJcbiAgICAgICAgICAgIGxpbmtzLnVuc2hpZnQoYmVmb3JlQ3VycmVudCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgYmVmb3JlQmVmb3JlQ3VycmVudCA9IHRoaXMuY3VycmVudCA+IDEgPyB0aGlzLmN1cnJlbnQgLSAxIDogLTE7XHJcbiAgICAgICAgICAgIGxpbmtzLnVuc2hpZnQoYmVmb3JlQmVmb3JlQ3VycmVudCk7XHJcblxyXG5cclxuICAgICAgICAgICAgLy8gQWRkIDIgaXRlbXMgYWZ0ZXIgY3VycmVudFxyXG4gICAgICAgICAgICB2YXIgYWZ0ZXJDdXJyZW50ID0gdGhpcy50b3RhbFBhZ2VzIC0gdGhpcy5jdXJyZW50ID4gMSA/IHRoaXMuY3VycmVudCArIDIgOiAtMTtcclxuICAgICAgICAgICAgbGlua3MucHVzaChhZnRlckN1cnJlbnQpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGFmdGVyQWZ0ZXJDdXJyZW50ID0gdGhpcy50b3RhbFBhZ2VzIC0gdGhpcy5jdXJyZW50ID4gMiA/IHRoaXMuY3VycmVudCArIDMgOiAtMTtcclxuICAgICAgICAgICAgbGlua3MucHVzaChhZnRlckFmdGVyQ3VycmVudCk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gbGlua3M7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHdhdGNoOiB7XHJcbiAgICAgICAgc291cmNlSXRlbXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gMDsgLy8gcmVzZXR0aW5nIGN1cnJlbnQgcGFnZSBhZnRlciByZWNlaXZpbmcgYSBuZXcgbGlzdCBvZiB1bnBhZ2VkIGl0ZW1zXHJcbiAgICAgICAgfSxcclxuICAgICAgICBwYWdlU2l6ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSAwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcbiIsIi8vIDxzb3J0LWluZGljYXRvcj4gY29tcG9uZW50XHJcblZ1ZS5jb21wb25lbnQoJ3NvcnRJbmRpY2F0b3InLCB7XHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgICAgIDxkaXYgdi1zaG93PVwiaXNBY3RpdmVcIiBjbGFzcz1cInNvcnQtaW5kaWNhdG9yXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIHYtc2hvdz1cImFzY1wiPjxpIGNsYXNzPVwic21hbGwgZmEgZmEtY2hldnJvbi11cFwiPjwvaT48L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuIHYtc2hvdz1cIiFhc2NcIj48aSBjbGFzcz1cInNtYWxsIGZhIGZhLWNoZXZyb24tZG93blwiPjwvaT48L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgYCxcclxuICAgIHByb3BzOiB7XHJcbiAgICAgICAgY29sbmFtZTogU3RyaW5nLFxyXG4gICAgICAgIHNlbGVjdGVkY29sbmFtZTogU3RyaW5nLFxyXG4gICAgICAgIGFzYzogQm9vbGVhblxyXG4gICAgfSxcclxuICAgIGNvbXB1dGVkOiB7XHJcbiAgICAgICAgaXNBY3RpdmU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sbmFtZS50b0xvd2VyQ2FzZSgpID09IHRoaXMuc2VsZWN0ZWRjb2xuYW1lLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KTtcclxuIiwiLy8gPHVwbG9hZD4gY29tcG9uZW50XHJcblZ1ZS5jb21wb25lbnQoJ3VwbG9hZCcsIHtcclxuICAgIHRlbXBsYXRlOiAnXFxcclxuICAgICAgICA8ZGl2IDpjbGFzcz1cInsgXFwndXBsb2FkLXdhcm5pbmdcXCcgOiBtb2RlbC5lcnJvck1lc3NhZ2UgfVwiIGNsYXNzPVwidXBsb2FkIG0tMiBwLTIgcHQtMFwiPiBcXFxyXG4gICAgICAgICAgICA8c3BhbiB2LWlmPVwibW9kZWwuZXJyb3JNZXNzYWdlXCIgdi1vbjpjbGljaz1cImRpc21pc3NXYXJuaW5nKClcIiBjbGFzcz1cImNsb3NlLXdhcm5pbmdcIj48aSBjbGFzcz1cImZhLXNvbGlkIGZhLXRpbWVzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPiA8L3NwYW4+XFxcclxuICAgICAgICAgICAgPHAgY2xhc3M9XCJ1cGxvYWQtbmFtZVwiIDp0aXRsZT1cIm1vZGVsLmVycm9yTWVzc2FnZVwiPnt7IG1vZGVsLm5hbWUgfX08L3A+IFxcXHJcbiAgICAgICAgICAgIDxkaXY+IFxcXHJcbiAgICAgICAgICAgICAgIDxzcGFuIHYtc2hvdz1cIiFtb2RlbC5lcnJvck1lc3NhZ2VcIiA6c3R5bGU9XCJ7IHdpZHRoOiBtb2RlbC5wZXJjZW50YWdlICsgXFwnJVxcJ31cIiBjbGFzcz1cInByb2dyZXNzLWJhclwiPiA8L3NwYW4+IFxcXHJcbiAgICAgICAgICAgICAgIDxzcGFuIHYtaWY9XCJtb2RlbC5lcnJvck1lc3NhZ2VcIiBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIiA6dGl0bGU9XCJtb2RlbC5lcnJvck1lc3NhZ2VcIj4gRXJyb3I6IHt7IG1vZGVsLmVycm9yTWVzc2FnZSB9fSA8L3NwYW4+IFxcXHJcbiAgICAgICAgICAgIDwvZGl2PiBcXFxyXG4gICAgICAgIDwvZGl2PiBcXFxyXG4gICAgICAgICcsXHJcbiAgICBwcm9wczoge1xyXG4gICAgICAgIG1vZGVsOiBPYmplY3QsXHJcbiAgICAgICAgdXBsb2FkSW5wdXRJZDogU3RyaW5nXHJcbiAgICB9LFxyXG4gICAgbW91bnRlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICB2YXIgdXBsb2FkSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzZWxmLnVwbG9hZElucHV0SWQgPz8gJ2ZpbGV1cGxvYWQnKTtcclxuICAgICAgICAkKHVwbG9hZElucHV0KS5iaW5kKCdmaWxldXBsb2FkcHJvZ3Jlc3MnLCBmdW5jdGlvbiAoZSwgZGF0YSkge1xyXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxlc1swXS5uYW1lICE9PSBzZWxmLm1vZGVsLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfSAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBzZWxmLm1vZGVsLnBlcmNlbnRhZ2UgPSBwYXJzZUludChkYXRhLmxvYWRlZCAvIGRhdGEudG90YWwgKiAxMDAsIDEwKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgJCh1cGxvYWRJbnB1dCkuYmluZCgnZmlsZXVwbG9hZGRvbmUnLCBmdW5jdGlvbiAoZSwgZGF0YSkge1xyXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxlc1swXS5uYW1lICE9PSBzZWxmLm1vZGVsLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZGF0YS5yZXN1bHQuZmlsZXNbMF0uZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlRmFpbHVyZShkYXRhLmZpbGVzWzBdLm5hbWUsIGRhdGEucmVzdWx0LmZpbGVzWzBdLmVycm9yKTtcclxuICAgICAgICAgICAgfSBlbHNlIHsgIFxyXG4gICAgICAgICAgICAgICAgYnVzLiRlbWl0KCdyZW1vdmFsUmVxdWVzdCcsIHNlbGYubW9kZWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICQodXBsb2FkSW5wdXQpLmJpbmQoJ2ZpbGV1cGxvYWRmYWlsJywgZnVuY3Rpb24gKGUsIGRhdGEpIHtcclxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsZXNbMF0ubmFtZSAhPT0gc2VsZi5tb2RlbC5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2VsZi5oYW5kbGVGYWlsdXJlKGRhdGEuZmlsZXNbMF0ubmFtZSwgJCgnI3QtZXJyb3InKS52YWwoKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9LFxyXG4gICAgbWV0aG9kczoge1xyXG4gICAgICAgIGhhbmRsZUZhaWx1cmU6IGZ1bmN0aW9uIChmaWxlTmFtZSwgbWVzc2FnZSkge1xyXG4gICAgICAgICAgICBpZiAoZmlsZU5hbWUgIT09IHRoaXMubW9kZWwubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMubW9kZWwuZXJyb3JNZXNzYWdlID0gbWVzc2FnZTtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdFcnJvck9uVXBsb2FkJywgdGhpcy5tb2RlbCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBkaXNtaXNzV2FybmluZzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBidXMuJGVtaXQoJ3JlbW92YWxSZXF1ZXN0JywgdGhpcy5tb2RlbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KTtcclxuIiwiLy8gPHVwbG9hZC1saXN0PiBjb21wb25lbnRcclxuVnVlLmNvbXBvbmVudCgndXBsb2FkTGlzdCcsIHtcclxuICAgIHRlbXBsYXRlOiAnXFxcclxuICAgICAgICA8ZGl2IGNsYXNzPVwidXBsb2FkLWxpc3RcIiB2LXNob3c9XCJmaWxlcy5sZW5ndGggPiAwXCI+IFxcXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXJcIiBAY2xpY2s9XCJleHBhbmRlZCA9ICFleHBhbmRlZFwiPiBcXFxyXG4gICAgICAgICAgICAgICAgPHNwYW4+IHt7IFQudXBsb2FkcyB9fSA8L3NwYW4+IFxcXHJcbiAgICAgICAgICAgICAgICA8c3BhbiB2LXNob3c9XCJwZW5kaW5nQ291bnRcIj4gKFBlbmRpbmc6IHt7IHBlbmRpbmdDb3VudCB9fSkgPC9zcGFuPiBcXFxyXG4gICAgICAgICAgICAgICAgPHNwYW4gdi1zaG93PVwiZXJyb3JDb3VudFwiIDpjbGFzcz1cInsgXFwndGV4dC1kYW5nZXJcXCcgOiBlcnJvckNvdW50IH1cIj4gKCB7eyBULmVycm9ycyB9fToge3sgZXJyb3JDb3VudCB9fSAvIDxhIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiB2LW9uOmNsaWNrLnN0b3A9XCJjbGVhckVycm9yc1wiID4ge3sgVC5jbGVhckVycm9ycyB9fSA8L2E+KTwvc3Bhbj4gXFxcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidG9nZ2xlLWJ1dHRvblwiPiBcXFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgdi1zaG93PVwiZXhwYW5kZWRcIj4gXFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1jaGV2cm9uLWRvd25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+IFxcXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+IFxcXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiB2LXNob3c9XCIhZXhwYW5kZWRcIj4gXFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1jaGV2cm9uLXVwXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPiBcXFxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PiBcXFxyXG4gICAgICAgICAgICAgICAgPC9kaXY+IFxcXHJcbiAgICAgICAgICAgIDwvZGl2PiBcXFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCIgdi1zaG93PVwiZXhwYW5kZWRcIj4gXFxcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC13cmFwXCI+IFxcXHJcbiAgICAgICAgICAgICAgICAgICAgPHVwbG9hZCA6dXBsb2FkLWlucHV0LWlkPVwidXBsb2FkSW5wdXRJZFwiIHYtZm9yPVwiZiBpbiBmaWxlc1wiIDprZXk9XCJmLm5hbWVcIiAgOm1vZGVsPVwiZlwiPjwvdXBsb2FkPiBcXFxyXG4gICAgICAgICAgICAgICAgPC9kaXYgPiBcXFxyXG4gICAgICAgICAgICA8L2Rpdj4gXFxcclxuICAgICAgICA8L2Rpdj4gXFxcclxuICAgICAgICAnLFxyXG4gICAgZGF0YTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGZpbGVzOiBbXSxcclxuICAgICAgICAgICAgVDoge30sXHJcbiAgICAgICAgICAgIGV4cGFuZGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcGVuZGluZ0NvdW50OiAwLFxyXG4gICAgICAgICAgICBlcnJvckNvdW50OiAwXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHByb3BzOiB7XHJcbiAgICAgICAgdXBsb2FkSW5wdXRJZDogU3RyaW5nXHJcbiAgICB9LFxyXG4gICAgY3JlYXRlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICAvLyByZXRyaWV2aW5nIGxvY2FsaXplZCBzdHJpbmdzIGZyb20gdmlld1xyXG4gICAgICAgIHNlbGYuVC51cGxvYWRzID0gJCgnI3QtdXBsb2FkcycpLnZhbCgpO1xyXG4gICAgICAgIHNlbGYuVC5lcnJvcnMgPSAkKCcjdC1lcnJvcnMnKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQuY2xlYXJFcnJvcnMgPSAkKCcjdC1jbGVhci1lcnJvcnMnKS52YWwoKTtcclxuICAgIH0sXHJcbiAgICBjb21wdXRlZDoge1xyXG4gICAgICAgIGZpbGVDb3VudDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5maWxlcy5sZW5ndGg7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIG1vdW50ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdmFyIHVwbG9hZElucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc2VsZi51cGxvYWRJbnB1dElkID8/ICdmaWxldXBsb2FkJyk7XHJcbiAgICAgICAgJCh1cGxvYWRJbnB1dCkuYmluZCgnZmlsZXVwbG9hZGFkZCcsIGZ1bmN0aW9uIChlLCBkYXRhKSB7XHJcbiAgICAgICAgICAgIGlmICghZGF0YS5maWxlcykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRhdGEuZmlsZXMuZm9yRWFjaChmdW5jdGlvbiAobmV3RmlsZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGFscmVhZHlJbkxpc3QgPSBzZWxmLmZpbGVzLnNvbWUoZnVuY3Rpb24gKGYpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZi5uYW1lID09IG5ld0ZpbGUubmFtZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICghYWxyZWFkeUluTGlzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuZmlsZXMucHVzaCh7IG5hbWU6IG5ld0ZpbGUubmFtZSwgcGVyY2VudGFnZTogMCwgZXJyb3JNZXNzYWdlOiAnJyB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignQSBmaWxlIHdpdGggdGhlIHNhbWUgbmFtZSBpcyBhbHJlYWR5IG9uIHRoZSBxdWV1ZTonICsgbmV3RmlsZS5uYW1lKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGJ1cy4kb24oJ3JlbW92YWxSZXF1ZXN0JywgZnVuY3Rpb24gKGZpbGVVcGxvYWQpIHtcclxuICAgICAgICAgICAgc2VsZi5maWxlcy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtLCBpbmRleCwgYXJyYXkpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtLm5hbWUgPT0gZmlsZVVwbG9hZC5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJyYXkuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGJ1cy4kb24oJ0Vycm9yT25VcGxvYWQnLCBmdW5jdGlvbiAoZmlsZVVwbG9hZCkge1xyXG4gICAgICAgICAgICBzZWxmLnVwZGF0ZUNvdW50KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9LFxyXG4gICAgbWV0aG9kczoge1xyXG4gICAgICAgIHVwZGF0ZUNvdW50OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3JDb3VudCA9IHRoaXMuZmlsZXMuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5lcnJvck1lc3NhZ2UgIT0gJyc7XHJcbiAgICAgICAgICAgIH0pLmxlbmd0aDtcclxuICAgICAgICAgICAgdGhpcy5wZW5kaW5nQ291bnQgPSB0aGlzLmZpbGVzLmxlbmd0aCAtIHRoaXMuZXJyb3JDb3VudDtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZmlsZXMubGVuZ3RoIDwgMSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5leHBhbmRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjbGVhckVycm9yczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLmZpbGVzID0gdGhpcy5maWxlcy5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmVycm9yTWVzc2FnZSA9PSAnJztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHdhdGNoOiB7XHJcbiAgICAgICAgZmlsZXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVDb3VudCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcbiIsImZ1bmN0aW9uIGluaXRpYWxpemVBdHRhY2hlZE1lZGlhRmllbGQoZWwsIGlkT2ZVcGxvYWRCdXR0b24sIHVwbG9hZEFjdGlvbiwgbWVkaWFJdGVtVXJsLCBhbGxvd011bHRpcGxlLCBhbGxvd01lZGlhVGV4dCwgYWxsb3dBbmNob3JzLCB0ZW1wVXBsb2FkRm9sZGVyLCBtYXhVcGxvYWRDaHVua1NpemUpIHtcclxuXHJcbiAgICB2YXIgdGFyZ2V0ID0gJChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgkKGVsKS5kYXRhKCdmb3InKSkpO1xyXG4gICAgdmFyIGluaXRpYWxQYXRocyA9IHRhcmdldC5kYXRhKFwiaW5pdFwiKTtcclxuXHJcbiAgICB2YXIgbWVkaWFGaWVsZEVkaXRvciA9ICQoZWwpO1xyXG4gICAgdmFyIGlkcHJlZml4ID0gbWVkaWFGaWVsZEVkaXRvci5hdHRyKFwiaWRcIik7XHJcbiAgICB2YXIgbWVkaWFGaWVsZEFwcDtcclxuXHJcbiAgICBtZWRpYUZpZWxkQXBwcy5wdXNoKG1lZGlhRmllbGRBcHAgPSBuZXcgVnVlKHtcclxuICAgICAgICBlbDogbWVkaWFGaWVsZEVkaXRvci5nZXQoMCksXHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICBtZWRpYUl0ZW1zOiBbXSxcclxuICAgICAgICAgICAgc2VsZWN0ZWRNZWRpYTogbnVsbCxcclxuICAgICAgICAgICAgc21hbGxUaHVtYnM6IGZhbHNlLFxyXG4gICAgICAgICAgICBpZFByZWZpeDogaWRwcmVmaXgsXHJcbiAgICAgICAgICAgIGluaXRpYWxpemVkOiBmYWxzZSxcclxuICAgICAgICAgICAgYWxsb3dNZWRpYVRleHQ6IGFsbG93TWVkaWFUZXh0LFxyXG4gICAgICAgICAgICBiYWNrdXBNZWRpYVRleHQ6ICcnLFxyXG4gICAgICAgICAgICBhbGxvd0FuY2hvcnM6IGFsbG93QW5jaG9ycyxcclxuICAgICAgICAgICAgYmFja3VwQW5jaG9yOiBudWxsLFxyXG4gICAgICAgICAgICBtZWRpYVRleHRtb2RhbDogbnVsbCxcclxuICAgICAgICAgICAgYW5jaG9yaW5nTW9kYWw6IG51bGxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgICAgICAgICAgc2VsZi5jdXJyZW50UHJlZnMgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdtZWRpYUZpZWxkUHJlZnMnKSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjb21wdXRlZDoge1xyXG4gICAgICAgICAgICBwYXRoczoge1xyXG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1lZGlhUGF0aHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGluaXRpYWxQYXRocyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWFJdGVtcy5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4Lm1lZGlhUGF0aCA9PT0gJ25vdC1mb3VuZCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZWRpYVBhdGhzLnB1c2goeyBwYXRoOiB4Lm1lZGlhUGF0aCwgaXNSZW1vdmVkOiB4LmlzUmVtb3ZlZCwgaXNOZXc6IHguaXNOZXcsIG1lZGlhVGV4dDogeC5tZWRpYVRleHQsIGFuY2hvcjogeC5hbmNob3IsIGF0dGFjaGVkRmlsZU5hbWU6IHguYXR0YWNoZWRGaWxlTmFtZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkobWVkaWFQYXRocyk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBtZWRpYVBhdGhzID0gdmFsdWVzIHx8IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzaWduYWwgPSAkLkRlZmVycmVkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW1zID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVkaWFQYXRocy5mb3JFYWNoKGZ1bmN0aW9uICh4LCBpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goeyBuYW1lOiAnICcgKyB4LnBhdGgsIG1pbWU6ICcnLCBtZWRpYVBhdGg6ICcnLCBhbmNob3I6IHguYW5jaG9yLCBhdHRhY2hlZEZpbGVOYW1lOiB4LmF0dGFjaGVkRmlsZU5hbWUgfSk7IC8vIGRvbid0IHJlbW92ZSB0aGUgc3BhY2UuIFNvbWV0aGluZyBkaWZmZXJlbnQgaXMgbmVlZGVkIG9yIGl0IHdvbnQgcmVhY3Qgd2hlbiB0aGUgcmVhbCBuYW1lIGFycml2ZXMuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2UgPSAkLndoZW4oc2lnbmFsKS5kb25lKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBtZWRpYUl0ZW1VcmwgKyBcIj9wYXRoPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KHgucGF0aCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnZ1ZWtleSA9IGRhdGEubmFtZSArIGkudG9TdHJpbmcoKTsgLy8gQmVjYXVzZSBhIHVuaXF1ZSBrZXkgaXMgcmVxdWlyZWQgYnkgVnVlIG9uIHYtZm9yIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLm1lZGlhVGV4dCA9IHgubWVkaWFUZXh0OyAvLyBUaGlzIHZhbHVlIGlzIG5vdCByZXR1cm5lZCBmcm9tIHRoZSBhamF4IGNhbGwuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuYW5jaG9yID0geC5hbmNob3I7IC8vIFRoaXMgdmFsdWUgaXMgbm90IHJldHVybmVkIGZyb20gdGhlIGFqYXggY2FsbC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5hdHRhY2hlZEZpbGVOYW1lID0geC5hdHRhY2hlZEZpbGVOYW1lOy8vIFRoaXMgdmFsdWUgaXMgbm90IHJldHVybmVkIGZyb20gdGhlIGFqYXggY2FsbC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMuc3BsaWNlKGksIDEsIGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbXMubGVuZ3RoID09PSArK2xlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoeCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWVkaWFJdGVtcy5wdXNoKHgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShlcnJvcikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5zcGxpY2UoaSwgMSwgeyBuYW1lOiB4LnBhdGgsIG1pbWU6ICcnLCBtZWRpYVBhdGg6ICdub3QtZm91bmQnLCBtZWRpYVRleHQ6ICcnLCBhbmNob3I6IHsgeDogMC41LCB5OiAwLjUgfSwgYXR0YWNoZWRGaWxlTmFtZTogeC5hdHRhY2hlZEZpbGVOYW1lIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbXMubGVuZ3RoID09PSArK2xlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoeCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWVkaWFJdGVtcy5wdXNoKHgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgc2lnbmFsLnJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZmlsZVNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKHRoaXMuc2VsZWN0ZWRNZWRpYS5zaXplIC8gMTAyNCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNhbkFkZE1lZGlhOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbm9uUmVtb3ZlZE1lZGlhSXRlbXMgPSBbXTtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5tZWRpYUl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLm1lZGlhSXRlbXNbaV0uaXNSZW1vdmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vblJlbW92ZWRNZWRpYUl0ZW1zLnB1c2godGhpcy5tZWRpYUl0ZW1zW2ldKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vblJlbW92ZWRNZWRpYUl0ZW1zLmxlbmd0aCA9PT0gMCB8fCBub25SZW1vdmVkTWVkaWFJdGVtcy5sZW5ndGggPiAwICYmIGFsbG93TXVsdGlwbGU7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHRodW1iU2l6ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc21hbGxUaHVtYnMgPyAxMjAgOiAyNDA7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGN1cnJlbnRQcmVmczoge1xyXG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc21hbGxUaHVtYnM6IHRoaXMuc21hbGxUaHVtYnNcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKG5ld1ByZWZzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFuZXdQcmVmcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc21hbGxUaHVtYnMgPSBuZXdQcmVmcy5zbWFsbFRodW1icztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbW91bnRlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgICAgICBzZWxmLnBhdGhzID0gaW5pdGlhbFBhdGhzO1xyXG5cclxuICAgICAgICAgICAgc2VsZi4kb24oJ3NlbGVjdEFuZERlbGV0ZU1lZGlhUmVxdWVzdGVkJywgZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdEFuZERlbGV0ZU1lZGlhKG1lZGlhKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBzZWxmLiRvbignc2VsZWN0TWVkaWFSZXF1ZXN0ZWQnLCBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0TWVkaWEobWVkaWEpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHZhciBzZWxlY3RvciA9ICcjJyArIGlkT2ZVcGxvYWRCdXR0b247XHJcbiAgICAgICAgICAgIHZhciBlZGl0b3JJZCA9IG1lZGlhRmllbGRFZGl0b3IuYXR0cignaWQnKTtcclxuICAgICAgICAgICAgdmFyIGNodW5rZWRGaWxlVXBsb2FkSWQgPSByYW5kb21VVUlEKCk7XHJcblxyXG4gICAgICAgICAgICAkKHNlbGVjdG9yKVxyXG4gICAgICAgICAgICAgICAgLmZpbGV1cGxvYWQoe1xyXG4gICAgICAgICAgICAgICAgICAgIGxpbWl0Q29uY3VycmVudFVwbG9hZHM6IDIwLFxyXG4gICAgICAgICAgICAgICAgICAgIGRyb3Bab25lOiAkKCcjJyArIGVkaXRvcklkKSxcclxuICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ2pzb24nLFxyXG4gICAgICAgICAgICAgICAgICAgIHVybDogdXBsb2FkQWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgIG1heENodW5rU2l6ZTogbWF4VXBsb2FkQ2h1bmtTaXplLFxyXG4gICAgICAgICAgICAgICAgICAgIGFkZDogZnVuY3Rpb24gKGUsIGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvdW50ID0gZGF0YS5maWxlcy5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5maWxlc1tpXS51cGxvYWROYW1lID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdldFVuaXF1ZUlkKCkgKyBkYXRhLmZpbGVzW2ldLm5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmZpbGVzW2ldLmF0dGFjaGVkRmlsZU5hbWUgPSBkYXRhLmZpbGVzW2ldLm5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5zdWJtaXQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1EYXRhOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhbnRpRm9yZ2VyeVRva2VuID0gJChcImlucHV0W25hbWU9X19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW5dXCIpLnZhbCgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ3BhdGgnLCB2YWx1ZTogdGVtcFVwbG9hZEZvbGRlciB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW4nLCB2YWx1ZTogYW50aUZvcmdlcnlUb2tlbiB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnX19jaHVua2VkRmlsZVVwbG9hZElkJywgdmFsdWU6IGNodW5rZWRGaWxlVXBsb2FkSWQgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGRvbmU6IGZ1bmN0aW9uIChlLCBkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuZXdNZWRpYUl0ZW1zID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvcm1zZyA9IFwiXCI7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5yZXN1bHQuZmlsZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhLnJlc3VsdC5maWxlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEucmVzdWx0LmZpbGVzW2ldLmlzTmV3ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2lmIGVycm9yIGlzIGRlZmluZWQgcHJvYmFibHkgdGhlIGZpbGUgdHlwZSBpcyBub3QgYWxsb3dlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLnJlc3VsdC5maWxlc1tpXS5lcnJvciA9PT0gdW5kZWZpbmVkIHx8IGRhdGEucmVzdWx0LmZpbGVzW2ldLmVycm9yID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEucmVzdWx0LmZpbGVzW2ldLmF0dGFjaGVkRmlsZU5hbWUgPSBkYXRhLmZpbGVzW2ldLmF0dGFjaGVkRmlsZU5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld01lZGlhSXRlbXMucHVzaChkYXRhLnJlc3VsdC5maWxlc1tpXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3Jtc2cgKz0gZGF0YS5yZXN1bHQuZmlsZXNbaV0uZXJyb3IgKyBcIlxcblwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3Jtc2cgIT09IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KGVycm9ybXNnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhuZXdNZWRpYUl0ZW1zKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld01lZGlhSXRlbXMubGVuZ3RoID4gMSAmJiBhbGxvd011bHRpcGxlID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoJCgnI29ubHlPbmVJdGVtTWVzc2FnZScpLnZhbCgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhRmllbGRBcHAubWVkaWFJdGVtcy5wdXNoKG5ld01lZGlhSXRlbXNbMF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFGaWVsZEFwcC5pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWRpYUZpZWxkQXBwLm1lZGlhSXRlbXMgPSBtZWRpYUZpZWxkQXBwLm1lZGlhSXRlbXMuY29uY2F0KG5ld01lZGlhSXRlbXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFGaWVsZEFwcC5pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoanFYSFIsIHRleHRTdGF0dXMsIGVycm9yVGhyb3duKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBvbiB1cGxvYWQuJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGpxWEhSKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2codGV4dFN0YXR1cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yVGhyb3duKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLm9uKCdmaWxldXBsb2FkY2h1bmtiZWZvcmVzZW5kJywgKGUsIG9wdGlvbnMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZmlsZSA9IG9wdGlvbnMuZmlsZXNbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gSGVyZSB3ZSByZXBsYWNlIHRoZSBibG9iIHdpdGggYSBGaWxlIG9iamVjdCB0byBlbnN1cmUgdGhlIGZpbGUgbmFtZSBhbmQgb3RoZXJzIGFyZSBwcmVzZXJ2ZWQgZm9yIHRoZSBiYWNrZW5kLlxyXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuYmxvYiA9IG5ldyBGaWxlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9ucy5ibG9iXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBmaWxlLnR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IGZpbGUubGFzdE1vZGlmaWVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbWV0aG9kczoge1xyXG4gICAgICAgICAgICBzZWxlY3RNZWRpYTogZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEgPSBtZWRpYTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZ2V0VW5pcXVlSWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAneHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4Jy5yZXBsYWNlKC9beHldL2csIGZ1bmN0aW9uIChjKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHIgPSBNYXRoLnJhbmRvbSgpICogMTYgfCAwLCB2ID0gYyA9PT0gJ3gnID8gciA6IChyICYgMHgzIHwgMHg4KTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdi50b1N0cmluZygxNik7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcmVtb3ZlU2VsZWN0ZWQ6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHJlbW92ZWQgPSB7fTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkTWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLm1lZGlhSXRlbXMgJiYgdGhpcy5tZWRpYUl0ZW1zLmluZGV4T2YodGhpcy5zZWxlY3RlZE1lZGlhKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVkID0gdGhpcy5tZWRpYUl0ZW1zW2luZGV4XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZC5pc1JlbW92ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3RoaXMubWVkaWFJdGVtcy5zcGxpY2UoW2luZGV4XSwgMSwgcmVtb3ZlZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWFJdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFRoZSByZW1vdmUgYnV0dG9uIGNhbiBhbHNvIHJlbW92ZSBhIHVuaXF1ZSBtZWRpYSBpdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWVkaWFJdGVtcy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZCA9IHRoaXMubWVkaWFJdGVtc1tpbmRleF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWQuaXNSZW1vdmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy90aGlzLm1lZGlhSXRlbXMuc3BsaWNlKDAsIDEsIHJlbW92ZWQpOyAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lZGlhSXRlbXMuc3BsaWNlKDAsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYSA9IG51bGw7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNob3dNZWRpYVRleHRNb2RhbDogZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lZGlhVGV4dE1vZGFsID0gbmV3IGJvb3RzdHJhcC5Nb2RhbCh0aGlzLiRyZWZzLm1lZGlhVGV4dE1vZGFsKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubWVkaWFUZXh0TW9kYWwuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5iYWNrdXBNZWRpYVRleHQgPSB0aGlzLnNlbGVjdGVkTWVkaWEubWVkaWFUZXh0O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjYW5jZWxNZWRpYVRleHRNb2RhbDogZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lZGlhVGV4dE1vZGFsLmhpZGUoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYS5tZWRpYVRleHQgPSB0aGlzLmJhY2t1cE1lZGlhVGV4dDtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2hvd0FuY2hvck1vZGFsOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYW5jaG9yaW5nTW9kYWwgPSBuZXcgYm9vdHN0cmFwLk1vZGFsKHRoaXMuJHJlZnMuYW5jaG9yaW5nTW9kYWwpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hbmNob3JpbmdNb2RhbC5zaG93KCk7XHJcbiAgICAgICAgICAgICAgICAvLyBDYXVzZSBhIHJlZnJlc2ggdG8gcmVjYWxjIGhlaWdodHMuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHg6IHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IueCxcclxuICAgICAgICAgICAgICAgICAgICB5OiB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yLnlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuYmFja3VwQW5jaG9yID0gdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvcjtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY2FuY2VsQW5jaG9yaW5nTW9kYWw6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hbmNob3JpbmdNb2RhbC5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yID0gdGhpcy5iYWNrdXBBbmNob3I7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHJlc2V0QW5jaG9yOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IgPSB7IHg6IDAuNSwgeTogMC41IH07XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG9uQW5jaG9yRHJvcDogZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW1hZ2UgPSB0aGlzLiRyZWZzLmFuY2hvckltYWdlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvciA9IHtcclxuICAgICAgICAgICAgICAgICAgICB4OiBldmVudC5vZmZzZXRYIC8gaW1hZ2UuY2xpZW50V2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgeTogZXZlbnQub2Zmc2V0WSAvIGltYWdlLmNsaWVudEhlaWdodFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBhbmNob3JMZWZ0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy4kcmVmcy5hbmNob3JJbWFnZSAmJiB0aGlzLiRyZWZzLm1vZGFsQm9keSAmJiB0aGlzLnNlbGVjdGVkTWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIGltYWdlIGlzIHNocnVuayBjb21wYXJlIGFnYWluc3QgdGhlIG1vZGFsIGJvZHkuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9ICh0aGlzLiRyZWZzLm1vZGFsQm9keS5jbGllbnRXaWR0aCAtIHRoaXMuJHJlZnMuYW5jaG9ySW1hZ2UuY2xpZW50V2lkdGgpIC8gMjtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcG9zaXRpb24gPSAodGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvci54ICogdGhpcy4kcmVmcy5hbmNob3JJbWFnZS5jbGllbnRXaWR0aCkgKyBvZmZzZXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uIDwgMTcpIHsgLy8gQWRqdXN0IHNvIHRoZSB0YXJnZXQgZG9lc24ndCBzaG93IG91dHNpZGUgaW1hZ2UuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gMTc7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbiAtIDg7IC8vIEFkanVzdCB0byBoaXQgdGhlIG1vdXNlIHBvaW50ZXIuXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbiArICdweCc7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnMCc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGFuY2hvclRvcDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuJHJlZnMuYW5jaG9ySW1hZ2UgJiYgdGhpcy5zZWxlY3RlZE1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvci55ICogdGhpcy4kcmVmcy5hbmNob3JJbWFnZS5jbGllbnRIZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uIDwgMTUpIHsgLy8gQWRqdXN0bWVudCBzbyB0aGUgdGFyZ2V0IGRvZXNuJ3Qgc2hvdyBvdXRzaWRlIGltYWdlLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IDE1O1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb24gKyA1OyAvLyBBZGp1c3QgdG8gaGl0IHRoZSBtb3VzZSBwb2ludGVyLlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcG9zaXRpb24gKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJzAnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXRBbmNob3I6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGltYWdlID0gdGhpcy4kcmVmcy5hbmNob3JJbWFnZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgeDogZXZlbnQub2Zmc2V0WCAvIGltYWdlLmNsaWVudFdpZHRoLFxyXG4gICAgICAgICAgICAgICAgICAgIHk6IGV2ZW50Lm9mZnNldFkgLyBpbWFnZS5jbGllbnRIZWlnaHRcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgYWRkTWVkaWFGaWxlczogZnVuY3Rpb24gKGZpbGVzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoKGZpbGVzLmxlbmd0aCA+IDEpICYmIChhbGxvd011bHRpcGxlID09PSBmYWxzZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBhbGVydCgkKCcjb25seU9uZUl0ZW1NZXNzYWdlJykudmFsKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIG1lZGlhRmllbGRBcHAubWVkaWFJdGVtcy5wdXNoKGZpbGVzWzBdKTtcclxuICAgICAgICAgICAgICAgICAgICBtZWRpYUZpZWxkQXBwLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVkaWFGaWVsZEFwcC5tZWRpYUl0ZW1zID0gbWVkaWFGaWVsZEFwcC5tZWRpYUl0ZW1zLmNvbmNhdChmaWxlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVkaWFGaWVsZEFwcC5pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNlbGVjdEFuZERlbGV0ZU1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWRNZWRpYSA9IG1lZGlhO1xyXG4gICAgICAgICAgICAgICAgLy8gc2V0VGltZW91dCBiZWNhdXNlIHNvbWV0aW1lcyBcclxuICAgICAgICAgICAgICAgIC8vIHJlbW92ZVNlbGVjdGVkIHdhcyBjYWxsZWQgZXZlbiBiZWZvcmUgdGhlIG1lZGlhIHdhcyBzZXQuXHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZWxmLnJlbW92ZVNlbGVjdGVkKCk7XHJcbiAgICAgICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICB3YXRjaDoge1xyXG4gICAgICAgICAgICBtZWRpYUl0ZW1zOiB7XHJcbiAgICAgICAgICAgICAgICBkZWVwOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgaGFuZGxlcigpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBUcmlnZ2VyIHByZXZpZXcgcmVuZGVyaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7ICQoZG9jdW1lbnQpLnRyaWdnZXIoJ2NvbnRlbnRwcmV2aWV3OnJlbmRlcicpOyB9LCAxMDApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjdXJyZW50UHJlZnM6IGZ1bmN0aW9uIChuZXdQcmVmcykge1xyXG4gICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ21lZGlhRmllbGRQcmVmcycsIEpTT04uc3RyaW5naWZ5KG5ld1ByZWZzKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KSk7XHJcbn1cclxuIiwiZnVuY3Rpb24gaW5pdGlhbGl6ZU1lZGlhRmllbGQoZWwsIG1vZGFsQm9keUVsZW1lbnQsIG1lZGlhSXRlbVVybCwgYWxsb3dNdWx0aXBsZSwgYWxsb3dNZWRpYVRleHQsIGFsbG93QW5jaG9ycykge1xyXG4gICAgLy9CYWdQYXJ0IGNyZWF0ZSBhIHNjcmlwdCBzZWN0aW9uIHdpdGhvdXQgb3RoZXIgRE9NIGVsZW1lbnRzXHJcbiAgICBpZihlbCA9PT0gbnVsbClcclxuICAgICAgICByZXR1cm47XHJcbiAgICBcclxuICAgIHZhciB0YXJnZXQgPSAkKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCQoZWwpLmRhdGEoJ2ZvcicpKSk7XHJcbiAgICB2YXIgaW5pdGlhbFBhdGhzID0gdGFyZ2V0LmRhdGEoXCJpbml0XCIpO1xyXG5cclxuICAgIHZhciBtZWRpYUZpZWxkRWRpdG9yID0gJChlbCk7XHJcbiAgICB2YXIgaWRwcmVmaXggPSBtZWRpYUZpZWxkRWRpdG9yLmF0dHIoXCJpZFwiKTtcclxuICAgIHZhciBtZWRpYUZpZWxkQXBwO1xyXG5cclxuICAgIC8vd2hlbiBoaWRlIG1vZGFsIGRldGFjaCBtZWRpYSBhcHAgdG8gYXZvaWQgaXNzdWUgb24gQmFnUGFydFxyXG4gICAgbW9kYWxCb2R5RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdoaWRkZW4uYnMubW9kYWwnLCBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAkKFwiI21lZGlhQXBwXCIpLmFwcGVuZFRvKCdib2R5Jyk7XHJcbiAgICAgICAgJChcIiNtZWRpYUFwcFwiKS5oaWRlKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBtZWRpYUZpZWxkQXBwcy5wdXNoKG1lZGlhRmllbGRBcHAgPSBuZXcgVnVlKHtcclxuICAgICAgICBlbDogbWVkaWFGaWVsZEVkaXRvci5nZXQoMCksXHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICBtZWRpYUl0ZW1zOiBbXSxcclxuICAgICAgICAgICAgc2VsZWN0ZWRNZWRpYTogbnVsbCxcclxuICAgICAgICAgICAgc21hbGxUaHVtYnM6IGZhbHNlLFxyXG4gICAgICAgICAgICBpZFByZWZpeDogaWRwcmVmaXgsXHJcbiAgICAgICAgICAgIGluaXRpYWxpemVkOiBmYWxzZSxcclxuICAgICAgICAgICAgYWxsb3dNZWRpYVRleHQ6IGFsbG93TWVkaWFUZXh0LFxyXG4gICAgICAgICAgICBiYWNrdXBNZWRpYVRleHQ6ICcnLFxyXG4gICAgICAgICAgICBhbGxvd0FuY2hvcnM6IGFsbG93QW5jaG9ycyxcclxuICAgICAgICAgICAgYmFja3VwQW5jaG9yOiBudWxsLFxyXG4gICAgICAgICAgICBtZWRpYVRleHRNb2RhbDogbnVsbCxcclxuICAgICAgICAgICAgYW5jaG9yaW5nTW9kYWw6IG51bGxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgICAgICAgICAgc2VsZi5jdXJyZW50UHJlZnMgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdtZWRpYUZpZWxkUHJlZnMnKSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjb21wdXRlZDoge1xyXG4gICAgICAgICAgICBwYXRoczoge1xyXG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1lZGlhUGF0aHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGluaXRpYWxQYXRocyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWFJdGVtcy5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4Lm1lZGlhUGF0aCA9PT0gJ25vdC1mb3VuZCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZWRpYVBhdGhzLnB1c2goeyBwYXRoOiB4Lm1lZGlhUGF0aCwgbWVkaWFUZXh0OiB4Lm1lZGlhVGV4dCwgYW5jaG9yOiB4LmFuY2hvciB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkobWVkaWFQYXRocyk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBtZWRpYVBhdGhzID0gdmFsdWVzIHx8IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzaWduYWwgPSAkLkRlZmVycmVkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW1zID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVkaWFQYXRocy5mb3JFYWNoKGZ1bmN0aW9uICh4LCBpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goeyBuYW1lOiAnICcgKyB4LnBhdGgsIG1pbWU6ICcnLCBtZWRpYVBhdGg6ICcnIH0pOyAvLyBkb24ndCByZW1vdmUgdGhlIHNwYWNlLiBTb21ldGhpbmcgZGlmZmVyZW50IGlzIG5lZWRlZCBvciBpdCB3b250IHJlYWN0IHdoZW4gdGhlIHJlYWwgbmFtZSBhcnJpdmVzLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlID0gJC53aGVuKHNpZ25hbCkuZG9uZShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogbWVkaWFJdGVtVXJsICsgXCI/cGF0aD1cIiArIGVuY29kZVVSSUNvbXBvbmVudCh4LnBhdGgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS52dWVrZXkgPSBkYXRhLm5hbWUgKyBpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEubWVkaWFUZXh0ID0geC5tZWRpYVRleHQ7IC8vIFRoaXMgdmFsdWUgaXMgbm90IHJldHVybmVkIGZyb20gdGhlIGFqYXggY2FsbC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5hbmNob3IgPSB4LmFuY2hvcjsgLy8gVGhpcyB2YWx1ZSBpcyBub3QgcmV0dXJuZWQgZnJvbSB0aGUgYWpheCBjYWxsLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5zcGxpY2UoaSwgMSwgZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtcy5sZW5ndGggPT09ICsrbGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5mb3JFYWNoKGZ1bmN0aW9uICh5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tZWRpYUl0ZW1zLnB1c2goeSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMuc3BsaWNlKGksIDEsIHsgbmFtZTogeC5wYXRoLCBtaW1lOiAnJywgbWVkaWFQYXRoOiAnbm90LWZvdW5kJywgbWVkaWFUZXh0OiAnJywgYW5jaG9yOiB7IHg6IDAsIHk6IDAgfSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gKytsZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1lZGlhSXRlbXMucHVzaCh4KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIHNpZ25hbC5yZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGZpbGVTaXplOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5yb3VuZCh0aGlzLnNlbGVjdGVkTWVkaWEuc2l6ZSAvIDEwMjQpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjYW5BZGRNZWRpYTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWVkaWFJdGVtcy5sZW5ndGggPT09IDAgfHwgdGhpcy5tZWRpYUl0ZW1zLmxlbmd0aCA+IDAgJiYgYWxsb3dNdWx0aXBsZTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdGh1bWJTaXplOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zbWFsbFRodW1icyA/IDEyMCA6IDI0MDtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY3VycmVudFByZWZzOiB7XHJcbiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzbWFsbFRodW1iczogdGhpcy5zbWFsbFRodW1ic1xyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAobmV3UHJlZnMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIW5ld1ByZWZzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zbWFsbFRodW1icyA9IG5ld1ByZWZzLnNtYWxsVGh1bWJzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgICAgIHNlbGYucGF0aHMgPSBpbml0aWFsUGF0aHM7XHJcblxyXG4gICAgICAgICAgICBzZWxmLiRvbignc2VsZWN0QW5kRGVsZXRlTWVkaWFSZXF1ZXN0ZWQnLCBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0QW5kRGVsZXRlTWVkaWEobWVkaWEpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHNlbGYuJG9uKCdzZWxlY3RNZWRpYVJlcXVlc3RlZCcsIGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RNZWRpYShtZWRpYSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgc2VsZi4kb24oJ2ZpbGVzVXBsb2FkZWQnLCBmdW5jdGlvbiAoZmlsZXMpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYuYWRkTWVkaWFGaWxlcyhmaWxlcyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbWV0aG9kczoge1xyXG4gICAgICAgICAgICBzZWxlY3RNZWRpYTogZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEgPSBtZWRpYTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2hvd01vZGFsOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICAgICAgICAgIGlmIChzZWxmLmNhbkFkZE1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJChcIiNtZWRpYUFwcFwiKS5hcHBlbmRUbygkKG1vZGFsQm9keUVsZW1lbnQpLmZpbmQoJy5tb2RhbC1ib2R5JykpO1xyXG4gICAgICAgICAgICAgICAgICAgICQoXCIjbWVkaWFBcHBcIikuc2hvdygpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB2YXIgbW9kYWwgPSBuZXcgYm9vdHN0cmFwLk1vZGFsKG1vZGFsQm9keUVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIG1vZGFsLnNob3coKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgJChtb2RhbEJvZHlFbGVtZW50KS5maW5kKCcubWVkaWFGaWVsZFNlbGVjdEJ1dHRvbicpLm9mZignY2xpY2snKS5vbignY2xpY2snLCBmdW5jdGlvbiAodikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFkZE1lZGlhRmlsZXMobWVkaWFBcHAuc2VsZWN0ZWRNZWRpYXMpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgZG9uJ3Qgd2FudCB0aGUgaW5jbHVkZWQgbWVkaWFzIHRvIGJlIHN0aWxsIHNlbGVjdGVkIHRoZSBuZXh0IHRpbWUgd2Ugb3BlbiB0aGUgbW9kYWwuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhQXBwLnNlbGVjdGVkTWVkaWFzID0gW107XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RhbC5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzaG93TWVkaWFUZXh0TW9kYWw6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tZWRpYVRleHRNb2RhbCA9IG5ldyBib290c3RyYXAuTW9kYWwodGhpcy4kcmVmcy5tZWRpYVRleHRNb2RhbCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lZGlhVGV4dE1vZGFsLnNob3coKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmFja3VwTWVkaWFUZXh0ID0gdGhpcy5zZWxlY3RlZE1lZGlhLm1lZGlhVGV4dDtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY2FuY2VsTWVkaWFUZXh0TW9kYWw6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tZWRpYVRleHRNb2RhbC5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEubWVkaWFUZXh0ID0gdGhpcy5iYWNrdXBNZWRpYVRleHQ7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNob3dBbmNob3JNb2RhbDogZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFuY2hvcmluZ01vZGFsID0gbmV3IGJvb3RzdHJhcC5Nb2RhbCh0aGlzLiRyZWZzLmFuY2hvcmluZ01vZGFsKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYW5jaG9yaW5nTW9kYWwuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgLy8gQ2F1c2UgYSByZWZyZXNoIHRvIHJlY2FsYyBoZWlnaHRzLlxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvciA9IHtcclxuICAgICAgICAgICAgICAgICAgeDogdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvci54LFxyXG4gICAgICAgICAgICAgICAgICB5OiB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yLnlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuYmFja3VwQW5jaG9yID0gdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvcjtcclxuICAgICAgICAgICAgfSwgICAgICAgICAgICBcclxuICAgICAgICAgICAgY2FuY2VsQW5jaG9yaW5nTW9kYWw6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hbmNob3JpbmdNb2RhbC5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yID0gdGhpcy5iYWNrdXBBbmNob3I7XHJcbiAgICAgICAgICAgIH0sICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHJlc2V0QW5jaG9yOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IgPSB7IHg6IDAuNSwgeTogMC41IH07XHJcbiAgICAgICAgICAgIH0sICBcclxuICAgICAgICAgICAgb25BbmNob3JEcm9wOiBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGltYWdlID0gdGhpcy4kcmVmcy5hbmNob3JJbWFnZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IgPSB7XHJcbiAgICAgICAgICAgICAgICAgICB4OiBldmVudC5vZmZzZXRYIC8gaW1hZ2UuY2xpZW50V2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgICB5OiBldmVudC5vZmZzZXRZIC8gaW1hZ2UuY2xpZW50SGVpZ2h0XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGFuY2hvckxlZnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLiRyZWZzLmFuY2hvckltYWdlICYmIHRoaXMuJHJlZnMubW9kYWxCb2R5ICYmIHRoaXMuc2VsZWN0ZWRNZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFdoZW4gaW1hZ2UgaXMgc2hydW5rIGNvbXBhcmUgYWdhaW5zdCB0aGUgbW9kYWwgYm9keS5cclxuICAgICAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gKHRoaXMuJHJlZnMubW9kYWxCb2R5LmNsaWVudFdpZHRoIC0gdGhpcy4kcmVmcy5hbmNob3JJbWFnZS5jbGllbnRXaWR0aCkgLyAyO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9ICh0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yLnggKiB0aGlzLiRyZWZzLmFuY2hvckltYWdlLmNsaWVudFdpZHRoKSArIG9mZnNldDtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgYW5jaG9ySWNvbiA9IE1hdGgucm91bmQodGhpcy4kcmVmcy5tb2RhbEJvZHkucXVlcnlTZWxlY3RvcignLmljb24tbWVkaWEtYW5jaG9yJykuY2xpZW50V2lkdGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKE51bWJlci5pc0ludGVnZXIoYW5jaG9ySWNvbikpXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uIC0gYW5jaG9ySWNvbi8yO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcG9zaXRpb24gKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJzAnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBhbmNob3JUb3A6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLiRyZWZzLmFuY2hvckltYWdlICYmIHRoaXMuc2VsZWN0ZWRNZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9IHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IueSAqIHRoaXMuJHJlZnMuYW5jaG9ySW1hZ2UuY2xpZW50SGVpZ2h0O1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbiArICdweCc7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnMCc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNldEFuY2hvcjogZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW1hZ2UgPSB0aGlzLiRyZWZzLmFuY2hvckltYWdlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvciA9IHtcclxuICAgICAgICAgICAgICAgICAgICB4OiBldmVudC5vZmZzZXRYIC8gaW1hZ2UuY2xpZW50V2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgeTogZXZlbnQub2Zmc2V0WSAvIGltYWdlLmNsaWVudEhlaWdodFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCAgICAgICAgIFxyXG4gICAgICAgICAgICBhZGRNZWRpYUZpbGVzOiBmdW5jdGlvbiAoZmlsZXMpIHtcclxuICAgICAgICAgICAgICAgIGlmICgoZmlsZXMubGVuZ3RoID4gMSkgJiYgKGFsbG93TXVsdGlwbGUgPT09IGZhbHNlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFsZXJ0KCQoJyNvbmx5T25lSXRlbU1lc3NhZ2UnKS52YWwoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVkaWFGaWVsZEFwcC5tZWRpYUl0ZW1zLnB1c2goZmlsZXNbMF0pO1xyXG4gICAgICAgICAgICAgICAgICAgIG1lZGlhRmllbGRBcHAuaW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBtZWRpYUZpZWxkQXBwLm1lZGlhSXRlbXMgPSBtZWRpYUZpZWxkQXBwLm1lZGlhSXRlbXMuY29uY2F0KGZpbGVzKTtcclxuICAgICAgICAgICAgICAgICAgICBtZWRpYUZpZWxkQXBwLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcmVtb3ZlU2VsZWN0ZWQ6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRNZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMubWVkaWFJdGVtcyAmJiB0aGlzLm1lZGlhSXRlbXMuaW5kZXhPZih0aGlzLnNlbGVjdGVkTWVkaWEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWFJdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFRoZSByZW1vdmUgYnV0dG9uIGNhbiBhbHNvIHJlbW92ZSBhIHVuaXF1ZSBtZWRpYSBpdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWVkaWFJdGVtcy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZWRpYUl0ZW1zLnNwbGljZSgwLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEgPSBudWxsO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZWxlY3RBbmREZWxldGVNZWRpYTogZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkTWVkaWEgPSBtZWRpYTtcclxuICAgICAgICAgICAgICAgIC8vIHNldFRpbWVvdXQgYmVjYXVzZSBzb21ldGltZXMgcmVtb3ZlU2VsZWN0ZWQgd2FzIGNhbGxlZCBldmVuIGJlZm9yZSB0aGUgbWVkaWEgd2FzIHNldC5cclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYucmVtb3ZlU2VsZWN0ZWQoKTtcclxuICAgICAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHdhdGNoOiB7XHJcbiAgICAgICAgICAgIG1lZGlhSXRlbXM6IHtcclxuICAgICAgICAgICAgICAgIGRlZXA6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBoYW5kbGVyICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBUcmlnZ2VyIHByZXZpZXcgcmVuZGVyaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7ICQoZG9jdW1lbnQpLnRyaWdnZXIoJ2NvbnRlbnRwcmV2aWV3OnJlbmRlcicpOyB9LCAxMDApOyBcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgICAgICAgICAgICBcclxuICAgICAgICAgICAgY3VycmVudFByZWZzOiBmdW5jdGlvbiAobmV3UHJlZnMpIHtcclxuICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdtZWRpYUZpZWxkUHJlZnMnLCBKU09OLnN0cmluZ2lmeShuZXdQcmVmcykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSkpO1xyXG59XHJcbiIsIi8vIGRpZmZlcmVudCBtZWRpYSBmaWVsZCBlZGl0b3JzIHdpbGwgYWRkIHRoZW1zZWx2ZXMgdG8gdGhpcyBhcnJheVxyXG52YXIgbWVkaWFGaWVsZEFwcHMgPSBbXTtcclxuIiwiLy8gPG1lZGlhLWZpZWxkLXRodW1icy1jb250YWluZXI+IGNvbXBvbmVudCBcclxuLy8gZGlmZmVyZW50IG1lZGlhIGZpZWxkIGVkaXRvcnMgc2hhcmUgdGhpcyBjb21wb25lbnQgdG8gcHJlc2VudCB0aGUgdGh1bWJzLlxyXG5WdWUuY29tcG9uZW50KCdtZWRpYUZpZWxkVGh1bWJzQ29udGFpbmVyJywge1xyXG4gICAgdGVtcGxhdGU6ICdcXFxyXG4gICAgICAgPGRpdiA6aWQ9XCJpZFByZWZpeCArIFxcJ19tZWRpYUNvbnRhaW5lck1haW5cXCdcIiB2LWNsb2FrPlxcXHJcbiAgICAgICAgIDxkaXYgdi1pZj1cIm1lZGlhSXRlbXMubGVuZ3RoIDwgMVwiIGNsYXNzPVwiY2FyZCB0ZXh0LWNlbnRlclwiPlxcXHJcbiAgICAgICAgICAgICA8ZGl2IGNsYXNzPSBcImNhcmQtYm9keVwiID5cXFxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJoaW50XCI+e3tULm5vSW1hZ2VzfX08L3NwYW4+XFxcclxuICAgICAgICAgICAgIDwvZGl2PlxcXHJcbiAgICAgICAgIDwvZGl2PlxcXHJcbiAgICAgICAgIDxkcmFnZ2FibGUgOmxpc3Q9XCJtZWRpYUl0ZW1zXCIgdGFnPVwib2xcIiBjbGFzcz1cInJvdyBtZWRpYS1pdGVtcy1ncmlkXCIgPlxcXHJcbiAgICAgICAgICAgIDxsaSB2LWZvcj1cIm1lZGlhIGluIG1lZGlhSXRlbXNcIlxcXHJcbiAgICAgICAgICAgICAgICA6a2V5PVwibWVkaWEudnVla2V5XCIgXFxcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwibWVkaWEtY29udGFpbmVyLW1haW4tbGlzdC1pdGVtIGNhcmQgcC0wXCJcXFxyXG4gICAgICAgICAgICAgICAgOnN0eWxlPVwie3dpZHRoOiB0aHVtYlNpemUgKyAyICsgXFwncHhcXCd9XCJcXFxyXG4gICAgICAgICAgICAgICAgOmNsYXNzPVwie3NlbGVjdGVkOiBzZWxlY3RlZE1lZGlhID09IG1lZGlhfVwiXFxcclxuICAgICAgICAgICAgICAgIHYtb246Y2xpY2s9XCJzZWxlY3RNZWRpYShtZWRpYSlcIiB2LWlmPVwiIW1lZGlhLmlzUmVtb3ZlZFwiPlxcXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPVwibWVkaWEubWVkaWFQYXRoIT09IFxcJ25vdC1mb3VuZFxcJ1wiPlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aHVtYi1jb250YWluZXJcIiA6c3R5bGU9XCJ7aGVpZ2h0OiB0aHVtYlNpemUgKyBcXCdweFxcJ31cIiA+XFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgdi1pZj1cIm1lZGlhLm1pbWUuc3RhcnRzV2l0aChcXCdpbWFnZVxcJylcIiBcXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOnNyYz1cImJ1aWxkTWVkaWFVcmwobWVkaWEudXJsLCB0aHVtYlNpemUpXCIgXFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpkYXRhLW1pbWU9XCJtZWRpYS5taW1lXCJcXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOnN0eWxlPVwie21heEhlaWdodDogdGh1bWJTaXplICsgXFwncHhcXCcgLCBtYXhXaWR0aDogdGh1bWJTaXplICsgXFwncHhcXCd9XCIvPlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSB2LWVsc2UgY2xhc3M9XCJmYS1yZWd1bGFyIGZhLWZpbGUgZGlzcGxheS0xXCIgOmRhdGEtbWltZT1cIm1lZGlhLm1pbWVcIj48L2k+XFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVkaWEtY29udGFpbmVyLW1haW4taXRlbS10aXRsZSBjYXJkLWJvZHlcIj5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiBjbGFzcz1cImJ0biBidG4tbGlnaHQgYnRuLXNtIGZsb2F0LWVuZCBpbmxpbmUtbWVkaWEtYnV0dG9uIGRlbGV0ZS1idXR0b25cIlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtb246Y2xpY2suc3RvcD1cInNlbGVjdEFuZERlbGV0ZU1lZGlhKG1lZGlhKVwiPjxpIGNsYXNzPVwiZmEtc29saWQgZmEtdHJhc2hcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9hPlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgOmhyZWY9XCJtZWRpYS51cmxcIiB0YXJnZXQ9XCJfYmxhbmtcIiBjbGFzcz1cImJ0biBidG4tbGlnaHQgYnRuLXNtIGZsb2F0LWVuZCBpbmxpbmUtbWVkaWEtYnV0dG9uIHZpZXctYnV0dG9uXCJcIj48aSBjbGFzcz1cImZhLXNvbGlkIGZhLWRvd25sb2FkXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPjwvYT4gXFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lZGlhLWZpbGVuYW1lIGNhcmQtdGV4dCBzbWFsbFwiIDp0aXRsZT1cIm1lZGlhLm1lZGlhUGF0aFwiPnt7IG1lZGlhLmlzTmV3ID8gbWVkaWEubmFtZS5zdWJzdHIoMzYpIDogbWVkaWEubmFtZSB9fTwvc3Bhbj5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxcclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgdi1lbHNlPlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aHVtYi1jb250YWluZXIgZmxleC1jb2x1bW5cIiA6c3R5bGU9XCJ7aGVpZ2h0OiB0aHVtYlNpemUgKyBcXCdweFxcJ31cIj5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1iYW4gdGV4dC1kYW5nZXIgZC1ibG9ja1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlciBzbWFsbCBkLWJsb2NrXCI+e3sgVC5tZWRpYU5vdEZvdW5kIH19PC9zcGFuPlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyIHNtYWxsIGQtYmxvY2sgdGV4dC1jZW50ZXJcIj57eyBULmRpc2NhcmRXYXJuaW5nIH19PC9zcGFuPlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZWRpYS1jb250YWluZXItbWFpbi1pdGVtLXRpdGxlIGNhcmQtYm9keVwiPlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IGJ0bi1zbSBmbG9hdC1lbmQgaW5saW5lLW1lZGlhLWJ1dHRvbiBkZWxldGUtYnV0dG9uXCJcXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtb246Y2xpY2suc3RvcD1cInNlbGVjdEFuZERlbGV0ZU1lZGlhKG1lZGlhKVwiPjxpIGNsYXNzPVwiZmEtc29saWQgZmEtdHJhc2hcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9hPlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lZGlhLWZpbGVuYW1lIGNhcmQtdGV4dCBzbWFsbCB0ZXh0LWRhbmdlclwiIDp0aXRsZT1cIm1lZGlhLm5hbWVcIj57eyBtZWRpYS5uYW1lIH19PC9zcGFuPlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcXHJcbiAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXFxyXG4gICAgICAgICAgICA8L2xpPlxcXHJcbiAgICAgICAgIDwvZHJhZ2dhYmxlPlxcXHJcbiAgICAgICA8L2Rpdj5cXFxyXG4gICAgJyxcclxuICAgIGRhdGE6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBUOiB7fVxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG4gICAgcHJvcHM6IHtcclxuICAgICAgICBtZWRpYUl0ZW1zOiBBcnJheSxcclxuICAgICAgICBzZWxlY3RlZE1lZGlhOiBPYmplY3QsXHJcbiAgICAgICAgdGh1bWJTaXplOiBOdW1iZXIsXHJcbiAgICAgICAgaWRQcmVmaXg6IFN0cmluZ1xyXG4gICAgfSxcclxuICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgICAgICAvLyByZXRyaWV2aW5nIGxvY2FsaXplZCBzdHJpbmdzIGZyb20gdmlld1xyXG4gICAgICAgIHNlbGYuVC5tZWRpYU5vdEZvdW5kID0gJCgnI3QtbWVkaWEtbm90LWZvdW5kJykudmFsKCk7XHJcbiAgICAgICAgc2VsZi5ULmRpc2NhcmRXYXJuaW5nID0gJCgnI3QtZGlzY2FyZC13YXJuaW5nJykudmFsKCk7XHJcbiAgICAgICAgc2VsZi5ULm5vSW1hZ2VzID0gJCgnI3Qtbm8taW1hZ2VzJykudmFsKCk7XHJcbiAgICB9LFxyXG4gICAgbWV0aG9kczoge1xyXG4gICAgICAgIHNlbGVjdEFuZERlbGV0ZU1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgdGhpcy4kcGFyZW50LiRlbWl0KCdzZWxlY3RBbmREZWxldGVNZWRpYVJlcXVlc3RlZCcsIG1lZGlhKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNlbGVjdE1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgdGhpcy4kcGFyZW50LiRlbWl0KCdzZWxlY3RNZWRpYVJlcXVlc3RlZCcsIG1lZGlhKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGJ1aWxkTWVkaWFVcmw6IGZ1bmN0aW9uICh1cmwsIHRodW1iU2l6ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdXJsICsgKHVybC5pbmRleE9mKCc/JykgPT0gLTEgPyAnPycgOiAnJicpICsgJ3dpZHRoPScgKyB0aHVtYlNpemUgKyAnJmhlaWdodD0nICsgdGh1bWJTaXplO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcbiJdfQ== 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 d85e45dceb1..fd1f5974267 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 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=crypto.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=crypto.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()}}}); +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}}}); From 3990adfe899cfc7180a665c7e1d02c49ead84945 Mon Sep 17 00:00:00 2001 From: Hisham Bin Ateya Date: Tue, 12 Sep 2023 19:26:44 +0300 Subject: [PATCH 3/3] Remove duplicate alert in settings (#14299) --- .../DefaultSiteSettingsDisplayDriver.cs | 68 +++++++++++-------- 1 file changed, 39 insertions(+), 29 deletions(-) diff --git a/src/OrchardCore.Modules/OrchardCore.Settings/Drivers/DefaultSiteSettingsDisplayDriver.cs b/src/OrchardCore.Modules/OrchardCore.Settings/Drivers/DefaultSiteSettingsDisplayDriver.cs index 96c9c494e6b..7fe6f7ffc46 100644 --- a/src/OrchardCore.Modules/OrchardCore.Settings/Drivers/DefaultSiteSettingsDisplayDriver.cs +++ b/src/OrchardCore.Modules/OrchardCore.Settings/Drivers/DefaultSiteSettingsDisplayDriver.cs @@ -30,6 +30,11 @@ public DefaultSiteSettingsDisplayDriver( public override Task EditAsync(ISite site, BuildEditorContext context) { + if (!IsGeneralGroup(context)) + { + return Task.FromResult(null); + } + context.Shape.Metadata.Wrappers.Add("Settings_Wrapper__General"); var result = Combine( @@ -49,45 +54,47 @@ public override Task EditAsync(ISite site, BuildEditorContext co public override async Task UpdateAsync(ISite site, UpdateEditorContext context) { - if (context.GroupId.Equals(GroupId, StringComparison.OrdinalIgnoreCase)) + if (!IsGeneralGroup(context)) { - var model = new SiteSettingsViewModel(); + return null; + } - if (await context.Updater.TryUpdateModelAsync(model, Prefix)) - { - site.SiteName = model.SiteName; - site.PageTitleFormat = model.PageTitleFormat; - site.BaseUrl = model.BaseUrl; - site.TimeZoneId = model.TimeZone; - site.PageSize = model.PageSize.Value; - site.UseCdn = model.UseCdn; - site.CdnBaseUrl = model.CdnBaseUrl; - site.ResourceDebugMode = model.ResourceDebugMode; - site.AppendVersion = model.AppendVersion; - site.CacheMode = model.CacheMode; - - if (model.PageSize.Value < 1) - { - context.Updater.ModelState.AddModelError(Prefix, nameof(model.PageSize), S["The page size must be greater than zero."]); - } - - if (site.MaxPageSize > 0 && model.PageSize.Value > site.MaxPageSize) - { - context.Updater.ModelState.AddModelError(Prefix, nameof(model.PageSize), S["The page size must be less than or equal to {0}.", site.MaxPageSize]); - } - } + var model = new SiteSettingsViewModel(); + + if (await context.Updater.TryUpdateModelAsync(model, Prefix)) + { + site.SiteName = model.SiteName; + site.PageTitleFormat = model.PageTitleFormat; + site.BaseUrl = model.BaseUrl; + site.TimeZoneId = model.TimeZone; + site.PageSize = model.PageSize.Value; + site.UseCdn = model.UseCdn; + site.CdnBaseUrl = model.CdnBaseUrl; + site.ResourceDebugMode = model.ResourceDebugMode; + site.AppendVersion = model.AppendVersion; + site.CacheMode = model.CacheMode; - if (!String.IsNullOrEmpty(site.BaseUrl) && !Uri.TryCreate(site.BaseUrl, UriKind.Absolute, out _)) + if (model.PageSize.Value < 1) { - context.Updater.ModelState.AddModelError(Prefix, nameof(model.BaseUrl), S["The Base url must be a fully qualified URL."]); + context.Updater.ModelState.AddModelError(Prefix, nameof(model.PageSize), S["The page size must be greater than zero."]); } - if (context.Updater.ModelState.IsValid) + if (site.MaxPageSize > 0 && model.PageSize.Value > site.MaxPageSize) { - await _shellHost.ReleaseShellContextAsync(_shellSettings); + context.Updater.ModelState.AddModelError(Prefix, nameof(model.PageSize), S["The page size must be less than or equal to {0}.", site.MaxPageSize]); } } + if (!String.IsNullOrEmpty(site.BaseUrl) && !Uri.TryCreate(site.BaseUrl, UriKind.Absolute, out _)) + { + context.Updater.ModelState.AddModelError(Prefix, nameof(model.BaseUrl), S["The Base url must be a fully qualified URL."]); + } + + if (context.Updater.ModelState.IsValid) + { + await _shellHost.ReleaseShellContextAsync(_shellSettings); + } + return await EditAsync(site, context); } @@ -104,5 +111,8 @@ private static void PopulateProperties(ISite site, SiteSettingsViewModel model) model.AppendVersion = site.AppendVersion; model.CacheMode = site.CacheMode; } + + private static bool IsGeneralGroup(BuildEditorContext context) + => context.GroupId.Equals(GroupId, StringComparison.OrdinalIgnoreCase); } }