Version Description
- Fixed an error when WooCommerce is active and you access a term link that does not exist
- Added compatibility with SEO Pack version 1.2.4 or older
- Added compatibility with Affiliate Theme filters
Download this release
Release Info
Developer | madalin.ungureanu |
Plugin | TranslatePress – Translate Multilingual sites |
Version | 1.7.3 |
Comparing to | |
See all releases |
Code changes from version 1.7.2 to 1.7.3
- assets/css/trp-editor.css +3 -1
- assets/js/trp-string-translation-editor.js +1 -1
- class-translate-press.php +1 -1
- includes/class-translation-manager.php +1 -1
- includes/class-url-converter.php +6 -1
- includes/compatibility-functions.php +23 -0
- includes/string-translation/class-string-translation.php +4 -1
- index.php +1 -1
- languages/translatepress-multilingual.catalog.php +1 -0
- languages/translatepress-multilingual.pot +22 -18
- readme.txt +6 -1
assets/css/trp-editor.css
CHANGED
@@ -755,6 +755,7 @@ iframe#trp-preview-iframe {
|
|
755 |
position: fixed;
|
756 |
bottom: 0;
|
757 |
background: #23282D;
|
|
|
758 |
}
|
759 |
|
760 |
#trp-editors-tab-table {
|
@@ -1455,7 +1456,8 @@ table.trp-translation-status-table {
|
|
1455 |
}
|
1456 |
|
1457 |
#trp-column-domain,
|
1458 |
-
#trp-column-taxonomy
|
|
|
1459 |
width: 200px;
|
1460 |
}
|
1461 |
|
755 |
position: fixed;
|
756 |
bottom: 0;
|
757 |
background: #23282D;
|
758 |
+
padding: 16px 0 16px 0;
|
759 |
}
|
760 |
|
761 |
#trp-editors-tab-table {
|
1456 |
}
|
1457 |
|
1458 |
#trp-column-domain,
|
1459 |
+
#trp-column-taxonomy,
|
1460 |
+
#trp-column-post_type {
|
1461 |
width: 200px;
|
1462 |
}
|
1463 |
|
assets/js/trp-string-translation-editor.js
CHANGED
@@ -1087,7 +1087,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var axio
|
|
1087 |
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
1088 |
|
1089 |
"use strict";
|
1090 |
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var select2_dist_js_select2_min_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! select2/dist/js/select2.min.js */ \"./node_modules/select2/dist/js/select2.min.js\");\n/* harmony import */ var select2_dist_js_select2_min_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(select2_dist_js_select2_min_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils */ \"./assets/src/js/utils.js\");\n/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! axios */ \"./node_modules/axios/index.js\");\n/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(axios__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _components_language_boxes_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./components/language-boxes.vue */ \"./assets/src/js/components/language-boxes.vue\");\n/* harmony import */ var _components_save_translations_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./components/save-translations.vue */ \"./assets/src/js/components/save-translations.vue\");\n/* harmony import */ var _components_hover_actions_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./components/hover-actions.vue */ \"./assets/src/js/components/hover-actions.vue\");\n/* harmony import */ var _components_extra_content_vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./components/extra-content.vue */ \"./assets/src/js/components/extra-content.vue\");\n/* harmony import */ var _components_editors_navigation_vue__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./components/editors-navigation.vue */ \"./assets/src/js/components/editors-navigation.vue\");\n/* harmony import */ var he__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! he */ \"./node_modules/he/he.js\");\n/* harmony import */ var he__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(he__WEBPACK_IMPORTED_MODULE_8__);\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n components: {\n languageBoxes: _components_language_boxes_vue__WEBPACK_IMPORTED_MODULE_3__[\"default\"],\n saveTranslations: _components_save_translations_vue__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n hoverActions: _components_hover_actions_vue__WEBPACK_IMPORTED_MODULE_5__[\"default\"],\n extraContent: _components_extra_content_vue__WEBPACK_IMPORTED_MODULE_6__[\"default\"],\n editorsNavigation: _components_editors_navigation_vue__WEBPACK_IMPORTED_MODULE_7__[\"default\"]\n },\n data: function data() {\n return {\n //trp_editor_data\n settings: trp_editor_data.trp_settings,\n languageNames: trp_editor_data.language_names,\n orderedSecondaryLanguages: trp_editor_data.ordered_secondary_languages,\n nonces: trp_editor_data.editor_nonces,\n editorsNavigation: trp_editor_data.editors_navigation,\n editorStrings: trp_editor_data.trp_localized_strings,\n stringTypes: trp_editor_data.string_types,\n flagsPath: trp_editor_data.flags_path,\n currentLanguage: trp_editor_data.current_language,\n onScreenLanguage: trp_editor_data.on_screen_language,\n ajaxUrl: trp_editor_data.ajax_url,\n currentURL: trp_editor_data.url_to_load,\n paidVersion: trp_editor_data.paid_version,\n //trp_string_translation_data\n stringTypesConfig: trp_string_translation_data.string_types_config,\n stEditorStrings: trp_string_translation_data.st_editor_strings,\n dictionary: {},\n selectedString: null,\n selectedIndexesArray: [],\n detectedSelectorAndId: [],\n stringGroups: [],\n showChangesUnsavedMessage: false,\n loading_strings: 0,\n translationNotLoadedYet: false,\n totalItems: null\n };\n },\n created: function created() {\n this.settings['default-language-name'] = this.languageNames[this.settings['default-language']];\n this.currentLanguage = this.settings['default-language'];\n document.addEventListener('trp_trigger_perform_action_event', this.editString);\n },\n mounted: function mounted() {\n this.getStrings(this.$route.query);\n this.addKeyboardShortcutsListener();\n var self = this; // resize sidebar and consequently the iframe\n\n var previewContainer = jQuery('#trp-preview');\n var total_width = jQuery(window).width();\n jQuery('#trp-controls').resizable({\n start: function start() {\n previewContainer.toggle();\n },\n stop: function stop() {\n previewContainer.toggle();\n },\n handles: 'e',\n minWidth: 327,\n maxWidth: total_width - 20\n }).bind(\"resize\", this.resizeIframe); // resize iframe when resizing window\n\n jQuery(window).resize(function () {\n self.resizeIframe();\n });\n },\n watch: {\n $route: function $route(to, from) {\n this.getStrings(to.query);\n },\n selectedString: function selectedString(newString, oldString) {\n if (!this.hasUnsavedChanges()) {\n if (this.selectedString === null) {\n this.selectedIndexesArray = [];\n } else {\n this.selectedIndexesArray = [this.selectedString];\n }\n }\n },\n dictionary: function dictionary() {\n if (!this.hasUnsavedChanges()) {\n this.selectedString = null;\n this.selectedIndexesArray = [];\n }\n }\n },\n computed: {\n closeURL: function closeURL() {\n return this.cleanURL(this.currentURL);\n }\n },\n methods: {\n getStrings: function getStrings(query) {\n if (!this.$route.matched[0].props[\"default\"].translationTab) {\n return;\n }\n\n var self = this;\n var currentTab = this.$route.matched[0].props[\"default\"].currentTab;\n var translationType = this.$route.matched[0].props[\"default\"].translationType;\n var data = new FormData();\n data.append('action', 'trp_string_translation_get_strings_' + translationType);\n data.append('query', JSON.stringify(query));\n data.append('security', currentTab['nonces']['get_strings']);\n window.dispatchEvent(new Event('trp_trigger_show_loading_table_event'));\n axios__WEBPACK_IMPORTED_MODULE_2___default.a.post(this.ajaxUrl, data).then(function (response) {\n window.dispatchEvent(new Event('trp_trigger_hide_loading_table_event'));\n\n if (response != null) {\n self.onScreenLanguage = query.language && _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].arrayContainsItem(self.settings['translation-languages'], query.language) && query.language !== 'trp-default' ? query.language : '';\n self.currentLanguage = query.language && _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].arrayContainsItem(self.settings['translation-languages'], query.language) && query.language !== 'trp-default' ? query.language : self.settings['default-language'];\n\n if (response.data.dictionary) {\n var newDictionary = response.data.dictionary;\n\n if (self.hasUnsavedChanges()) {\n // copy the unsaved string from the current dictionary to the new dictionary to allow user to discard or save changes\n var newSelectedIndexesArray = [];\n self.selectedIndexesArray.forEach(function (item) {\n self.dictionary[item].unsavedChanges = 'yes';\n newSelectedIndexesArray.push(newDictionary.push(self.dictionary[item]) - 1);\n });\n self.selectedIndexesArray = newSelectedIndexesArray;\n self.selectedString = null;\n }\n\n self.dictionary = newDictionary;\n }\n\n if (response.data.totalItems) {\n self.totalItems = response.data.totalItems;\n }\n }\n })[\"catch\"](function (error) {\n window.dispatchEvent(new Event('trp_trigger_hide_loading_table_event'));\n self.dictionary = {};\n console.log(error);\n });\n },\n editString: function editString(data) {\n if (data.detail.action === 'edit') {\n this.selectedString = data.detail.stringIndex;\n }\n },\n cleanURL: function cleanURL(url) {\n //make removeUrlParameter recursive and only call it once with all the parameters that\n //need to stripped ?\n url = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].removeUrlParameter(url, 'lang');\n url = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].removeUrlParameter(url, 'trp-view-as');\n url = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].removeUrlParameter(url, 'trp-view-as-nonce');\n url = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].removeUrlParameter(url, 'trp-edit-translation');\n url = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].removeUrlParameter(url, 'trp-string-translation');\n return url;\n },\n\n /*iFrameLoaded(){\n let self = this\n let iframeElement = document.querySelector('#trp-preview-iframe')\n this.iframe = iframeElement.contentDocument || iframeElement.contentWindow.document\n //sync iFrame URL with parent\n if ( this.currentURL != this.iframe.URL )\n this.currentURL = this.iframe.URL\n //hide iFrame loader\n this.iframeLoader( 'hide' )\n self.detectedSelectorAndId = []\n self.dictionary = []\n this.scanIframeForStrings()\n window.addEventListener( 'trp_iframe_page_updated', this.scanIframeForStrings )\n //event that is fired when the iFrame is navigated\n iframeElement.contentWindow.onbeforeunload = function() {\n self.iframeLoader( 'show' )\n self.selectedString = null\n self.selectedIndexesArray = []\n self.translationNotLoadedYet = false\n self.stringsDropdownLoading()\n }\n },*/\n hasUnsavedChanges: function hasUnsavedChanges() {\n var unsavedChanges = false;\n var self = this;\n\n if (this.selectedIndexesArray.length > 0) {\n this.selectedIndexesArray.forEach(function (selectedIndex) {\n self.settings['translation-languages'].forEach(function (languageCode) {\n if (self.dictionary[selectedIndex] && self.dictionary[selectedIndex].translationsArray[languageCode] && self.dictionary[selectedIndex].translationsArray[languageCode].translated !== self.dictionary[selectedIndex].translationsArray[languageCode].editedTranslation) {\n unsavedChanges = true;\n }\n });\n });\n }\n\n if (unsavedChanges === false) {\n this.selectedIndexesArray.forEach(function (selectedIndex) {\n if (self.dictionary.hasOwnProperty(selectedIndex) && self.dictionary[selectedIndex].unsavedChanges && self.dictionary[selectedIndex].unsavedChanges === 'yes') {\n self.dictionary[selectedIndex].unsavedChanges = 'no';\n }\n });\n }\n\n this.showChangesUnsavedMessage = unsavedChanges;\n return unsavedChanges;\n },\n iframeLoader: function iframeLoader(status) {\n var loader = document.getElementById('trp-preview-loader');\n if (status == 'show') loader.style.display = 'flex';else if (status == 'hide') loader.style.display = 'none';\n },\n previousString: function previousString() {\n /* let currentValue = document.getElementById('trp-string-categories').value\n let newValue = +currentValue - 1\n while( newValue >= 0 && document.querySelectorAll('#trp-string-categories option[value=\"' + newValue + '\"]').length === 0 ){\n newValue--;\n }\n if( newValue < 0 )\n return\n this.selectedString = newValue.toString()*/\n },\n nextString: function nextString() {\n /*let currentValue = document.getElementById('trp-string-categories').value, newValue = 0\n if( currentValue != '' )\n newValue = +currentValue + 1\n while( newValue < this.dictionary.length && document.querySelectorAll('#trp-string-categories option[value=\"' + newValue + '\"]').length === 0 ){\n newValue++;\n }\n if ( newValue >= this.dictionary.length ){\n return\n }\n this.selectedString = newValue.toString()*/\n },\n addKeyboardShortcutsListener: function addKeyboardShortcutsListener() {\n document.addEventListener(\"keydown\", function (e) {\n if ((window.navigator.platform.match(\"Mac\") ? e.metaKey : e.ctrlKey) && e.altKey) {\n // CTRL + ALT + right arrow\n if (e.keyCode === 39) {\n e.preventDefault();\n window.dispatchEvent(new Event('trp_trigger_next_string_event'));\n } else {\n // CTRL + ALT + left arrow\n if (e.keyCode === 37) {\n e.preventDefault();\n window.dispatchEvent(new Event('trp_trigger_previous_string_event'));\n }\n }\n }\n }, false);\n window.addEventListener('trp_trigger_next_string_event', this.nextString);\n window.addEventListener('trp_trigger_previous_string_event', this.previousString);\n },\n resizeIframe: function resizeIframe(event, ui) {\n var total_width = jQuery(window).width();\n var width = jQuery('#trp-controls').width();\n var previewContainer = jQuery('#trp-preview');\n previewContainer.css('left', width - 348);\n }\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vYXNzZXRzL3NyYy9qcy9zdHJpbmctdHJhbnNsYXRpb24udnVlPzU2YmQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTZHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0EseUZBREE7QUFFQSwrRkFGQTtBQUdBLHVGQUhBO0FBSUEsdUZBSkE7QUFLQTtBQUxBLEdBREE7QUFRQSxNQVJBLGtCQVFBO0FBQ0E7QUFDQTtBQUNBLDRDQUZBO0FBR0EsbURBSEE7QUFJQSw0RUFKQTtBQUtBLDJDQUxBO0FBTUEsMkRBTkE7QUFPQSwwREFQQTtBQVFBLCtDQVJBO0FBU0EsMkNBVEE7QUFVQSx1REFWQTtBQVdBLDBEQVhBO0FBWUEsdUNBWkE7QUFhQSw2Q0FiQTtBQWNBLCtDQWRBO0FBZ0JBO0FBQ0Esd0VBakJBO0FBa0JBLG9FQWxCQTtBQW9CQSxvQkFwQkE7QUFxQkEsMEJBckJBO0FBc0JBLDhCQXRCQTtBQXVCQSwrQkF2QkE7QUF3QkEsc0JBeEJBO0FBeUJBLHNDQXpCQTtBQTBCQSx3QkExQkE7QUEyQkEsb0NBM0JBO0FBNEJBO0FBNUJBO0FBK0JBLEdBeENBO0FBeUNBLFNBekNBLHFCQXlDQTtBQUNBO0FBRUE7QUFFQTtBQUNBLEdBL0NBO0FBZ0RBLFNBaERBLHFCQWdEQTtBQUNBO0FBRUE7QUFDQSxvQkFKQSxDQU1BOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUhBO0FBSUE7QUFDQTtBQUNBLE9BTkE7QUFPQSxrQkFQQTtBQVFBLG1CQVJBO0FBU0E7QUFUQSxPQVVBLElBVkEsQ0FVQSxRQVZBLEVBVUEsaUJBVkEsRUFUQSxDQXFCQTs7QUFDQTtBQUNBO0FBQ0EsS0FGQTtBQUdBLEdBekVBO0FBMEVBO0FBQ0EsVUFEQSxrQkFDQSxFQURBLEVBQ0EsSUFEQSxFQUNBO0FBQ0E7QUFDQSxLQUhBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUZBLE1BRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQVpBO0FBYUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBbEJBLEdBMUVBO0FBOEZBO0FBQ0E7QUFDQTtBQUNBO0FBSEEsR0E5RkE7QUFtR0E7QUFDQSxjQURBLHNCQUNBLEtBREEsRUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUEsNEVBQ0EsSUFEQSxDQUNBO0FBQ0E7O0FBQ0E7QUFDQSxtTkFDQSxjQURBLEdBQ0EsRUFEQTtBQUVBLGtOQUNBLGNBREEsR0FDQSxpQ0FEQTs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBSEE7QUFJQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BN0JBLFdBOEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FsQ0E7QUFtQ0EsS0FwREE7QUFxREEsY0FyREEsc0JBcURBLElBckRBLEVBcURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0F6REE7QUEwREEsWUExREEsb0JBMERBLEdBMURBLEVBMERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBLEtBcEVBOztBQXFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQStCQSxxQkFwR0EsK0JBb0dBO0FBQ0E7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrREFDQSw4REFEQSxJQUVBLDhKQUZBLEVBRUE7QUFDQTtBQUNBO0FBQ0EsV0FOQTtBQU9BLFNBUkE7QUFTQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FKQTtBQUtBOztBQUVBO0FBQ0E7QUFDQSxLQTdIQTtBQThIQSxnQkE5SEEsd0JBOEhBLE1BOUhBLEVBOEhBO0FBQ0E7QUFFQSw0QkFDQSw4QkFEQSxLQUVBLHNCQUNBO0FBQ0EsS0FySUE7QUFzSUEsa0JBdElBLDRCQXNJQTtBQUNBOzs7Ozs7OztBQVlBLEtBbkpBO0FBb0pBLGNBcEpBLHdCQW9KQTtBQUNBOzs7Ozs7Ozs7O0FBY0EsS0FuS0E7QUFvS0EsZ0NBcEtBLDBDQW9LQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBSEEsTUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FkQSxFQWNBLEtBZEE7QUFnQkE7QUFDQTtBQUNBLEtBdkxBO0FBd0xBLGdCQXhMQSx3QkF3TEEsS0F4TEEsRUF3TEEsRUF4TEEsRUF3TEE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBOUxBO0FBbkdBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL2Fzc2V0cy9zcmMvanMvc3RyaW5nLXRyYW5zbGF0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYuanMiLCJzb3VyY2VzQ29udGVudCI6WyI8dGVtcGxhdGU+XG4gICAgPGRpdiBpZD1cInRycC1lZGl0b3JcIiBjbGFzcz1cIndwLWNvcmUtdWlcIj5cblxuICAgICAgICA8ZGl2IGlkPVwidHJwLWNvbnRyb2xzXCI+XG5cbiAgICAgICAgICAgIDxkaXYgaWQ9XCJ0cnAtY2xvc2Utc2F2ZVwiPlxuICAgICAgICAgICAgICAgIDxhIGlkPVwidHJwLWNvbnRyb2xzLWNsb3NlXCIgOmhyZWY9XCJjbG9zZVVSTFwiIDp0aXRsZT1cImVkaXRvclN0cmluZ3MuY2xvc2VcIj48L2E+XG4gICAgICAgICAgICAgICAgPGRpdiBpZD1cInRycC1zYXZlLWFuZC1sb2FkZXItc3Bpbm5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0cnAtYWpheC1sb2FkZXJcIiB2LXNob3c9XCJsb2FkaW5nX3N0cmluZ3MgPiAwXCIgaWQ9XCJ0cnAtc3RyaW5nLXNhdmVkLWFqYXgtbG9hZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRycC1zcGlubmVyXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzYXZlLXRyYW5zbGF0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpzZWxlY3RlZEluZGV4ZXNBcnJheT1cInNlbGVjdGVkSW5kZXhlc0FycmF5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ZGljdGlvbmFyeT1cImRpY3Rpb25hcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpzZXR0aW5ncz1cInNldHRpbmdzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6bm9uY2VzPVwibm9uY2VzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6YWpheF91cmw9XCJhamF4VXJsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Y3VycmVudExhbmd1YWdlPVwiY3VycmVudExhbmd1YWdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6b25TY3JlZW5MYW5ndWFnZT1cIm9uU2NyZWVuTGFuZ3VhZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjdXJyZW50VVJMPVwiY3VycmVudFVSTFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQHRyYW5zbGF0aW9ucy1zYXZlZD1cInNob3dDaGFuZ2VzVW5zYXZlZE1lc3NhZ2UgPSBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOmVkaXRvclN0cmluZ3M9XCJlZGl0b3JTdHJpbmdzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6c3RyaW5nVHlwZXM9XCJzdHJpbmdUeXBlc1wiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPC9zYXZlLXRyYW5zbGF0aW9ucz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJwLWNvbnRyb2xzLWNvbnRhaW5lclwiIDpjbGFzcz1cInsndHJwLXNob3ctZWRpdG9ycy1uYXZpZ2F0aW9uJyA6IGVkaXRvcnNOYXZpZ2F0aW9uLnNob3cgfVwiPlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRycC1jb250cm9scy1zZWN0aW9uXCIgaWQ9XCJ0cnAtY29udHJvbHMtc2VjdGlvbi1maXJzdFwiPlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0cnAtY29udHJvbHMtc2VjdGlvbi1jb250ZW50XCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJ0cnAtbmV4dC1wcmV2aW91c1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlkPVwidHJwLXByZXZpb3VzXCIgY2xhc3M9XCJ0cnAtbmV4dC1wcmV2aW91cy1idXR0b25zIGJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LW9uOmNsaWNrPVwicHJldmlvdXNTdHJpbmcoKVwiIDp0aXRsZT1cImVkaXRvclN0cmluZ3MucHJldmlvdXNfdGl0bGVfYXR0clwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4mbGFxdW87PC9zcGFuPiB7eyBlZGl0b3JTdHJpbmdzLnByZXZpb3VzIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJ0cnAtbmV4dFwiIGNsYXNzPVwidHJwLW5leHQtcHJldmlvdXMtYnV0dG9ucyBidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1vbjpjbGljaz1cIm5leHRTdHJpbmcoKVwiIDp0aXRsZT1cImVkaXRvclN0cmluZ3MubmV4dF90aXRsZV9hdHRyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGVkaXRvclN0cmluZ3MubmV4dCB9fSA8c3Bhbj4mcmFxdW87PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0cnAtY29udHJvbHMtc2VjdGlvblwiIHYtc2hvdz1cInNlbGVjdGVkSW5kZXhlc0FycmF5Lmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxhbmd1YWdlLWJveGVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOnNlbGVjdGVkSW5kZXhlc0FycmF5PVwic2VsZWN0ZWRJbmRleGVzQXJyYXlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpkaWN0aW9uYXJ5PVwiZGljdGlvbmFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOmN1cnJlbnRMYW5ndWFnZT1cImN1cnJlbnRMYW5ndWFnZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOm9uU2NyZWVuTGFuZ3VhZ2U9XCJvblNjcmVlbkxhbmd1YWdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6bGFuZ3VhZ2VOYW1lcz1cImxhbmd1YWdlTmFtZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpzZXR0aW5ncz1cInNldHRpbmdzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6c2hvd0NoYW5nZXNVbnNhdmVkTWVzc2FnZT1cInNob3dDaGFuZ2VzVW5zYXZlZE1lc3NhZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBkaXNjYXJkZWQtY2hhbmdlcz1cImhhc1Vuc2F2ZWRDaGFuZ2VzKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDplZGl0b3JTdHJpbmdzPVwiZWRpdG9yU3RyaW5nc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOmZsYWdzUGF0aD1cImZsYWdzUGF0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOm5vbmNlcz1cIm5vbmNlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOmFqYXhfdXJsPVwiYWpheFVybFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPC9sYW5ndWFnZS1ib3hlcz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxleHRyYS1jb250ZW50IDpsYW5ndWFnZU5hbWVzPVwibGFuZ3VhZ2VOYW1lc1wiIDplZGl0b3JTdHJpbmdzPVwiZWRpdG9yU3RyaW5nc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOnBhaWRWZXJzaW9uPVwicGFpZFZlcnNpb25cIj48L2V4dHJhLWNvbnRlbnQ+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJwLWNvbnRyb2xzLXNlY3Rpb25cIiB2LXNob3c9XCJ0cmFuc2xhdGlvbk5vdExvYWRlZFlldFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwidHJwLXRyYW5zbGF0aW9uLW5vdC1yZWFkeS1zZWN0aW9uXCIgY2xhc3M9XCJ0cnAtY29udHJvbHMtc2VjdGlvbi1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCB2LWh0bWw9XCJlZGl0b3JTdHJpbmdzLnRyYW5zbGF0aW9uX25vdF9sb2FkZWRfeWV0XCI+PC9wPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZWRpdG9ycy1uYXZpZ2F0aW9uIDplZGl0b3JzTmF2aWdhdGlvbj1cImVkaXRvcnNOYXZpZ2F0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOnNlbGVjdGVkVGFiPVwiJ3N0cmluZ3RyYW5zbGF0aW9uJ1wiPjwvZWRpdG9ycy1uYXZpZ2F0aW9uPlxuXG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgaWQ9XCJ0cnAtcHJldmlld1wiIGNsYXNzPVwidHJwLXN0cmluZy10cmFuc2xhdGlvbi1jb250YWluZXJcIiBAY2xpY2s9XCJoYXNVbnNhdmVkQ2hhbmdlcygpXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJwLXN0cmluZy10cmFuc2xhdGlvbi1pbm5lci1jb250YWluZXJcIiA6Y2xhc3M9XCJ7J3RycC1zY3JlZW4tb3ZlcmxheScgOiBzaG93Q2hhbmdlc1Vuc2F2ZWRNZXNzYWdlIH1cIj5cbiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJuYXYtdGFiLXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPHJvdXRlci1saW5rXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1mb3I9XCIodGFiLCB0YWJfc2x1ZykgaW4gc3RyaW5nVHlwZXNDb25maWdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtYmluZDprZXk9XCIndHJwLXRhYi1rZXktJyArIHRhYl9zbHVnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6dG89XCIodGFiWydjYXRlZ29yeV9iYXNlZCddICkgID8gJy8nKyB0YWJfc2x1ZyArICcvJzogJy8nKyB0YWJfc2x1ZyArICcvJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOmlkPVwiJ3RycC10YWItJyArIHRhYl9zbHVnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm5hdi10YWJcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7e3RhYlsndGFiX25hbWUnXX19XG4gICAgICAgICAgICAgICAgICAgIDwvcm91dGVyLWxpbms+XG48IS0tICAgICAgICAgICAgICAgICAgICA8cm91dGVyLWxpbmsgdG89XCIvaW1wb3J0LWV4cG9ydFwiIGNsYXNzPVwibmF2LXRhYlwiPi0tPlxuPCEtLSAgICAgICAgICAgICAgICAgICAgICAgIHt7c3RFZGl0b3JTdHJpbmdzLmltcG9ydGV4cG9ydH19LS0+XG48IS0tICAgICAgICAgICAgICAgICAgICA8L3JvdXRlci1saW5rPi0tPlxuICAgICAgICAgICAgICAgIDwvaDI+XG4gICAgICAgICAgICAgICAgPHJvdXRlci12aWV3XG4gICAgICAgICAgICAgICAgICAgICAgICA6ZGljdGlvbmFyeT1cImRpY3Rpb25hcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgOnRvdGFsSXRlbXM9XCJ0b3RhbEl0ZW1zXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9yb3V0ZXItdmlldz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4gICAgaW1wb3J0ICdzZWxlY3QyL2Rpc3QvanMvc2VsZWN0Mi5taW4uanMnXG4gICAgaW1wb3J0IHV0aWxzICAgICAgICAgICAgIGZyb20gJy4vdXRpbHMnXG4gICAgaW1wb3J0IGF4aW9zICAgICAgICAgICAgIGZyb20gJ2F4aW9zJ1xuICAgIGltcG9ydCBsYW5ndWFnZUJveGVzICAgICBmcm9tICcuL2NvbXBvbmVudHMvbGFuZ3VhZ2UtYm94ZXMudnVlJ1xuICAgIGltcG9ydCBzYXZlVHJhbnNsYXRpb25zICBmcm9tICcuL2NvbXBvbmVudHMvc2F2ZS10cmFuc2xhdGlvbnMudnVlJ1xuICAgIGltcG9ydCBob3ZlckFjdGlvbnMgICAgICBmcm9tICcuL2NvbXBvbmVudHMvaG92ZXItYWN0aW9ucy52dWUnXG4gICAgaW1wb3J0IGV4dHJhQ29udGVudCAgICAgIGZyb20gJy4vY29tcG9uZW50cy9leHRyYS1jb250ZW50LnZ1ZSdcbiAgICBpbXBvcnQgZWRpdG9yc05hdmlnYXRpb24gZnJvbSAnLi9jb21wb25lbnRzL2VkaXRvcnMtbmF2aWdhdGlvbi52dWUnXG4gICAgaW1wb3J0IGhlICAgICAgICAgICAgICAgIGZyb20gJ2hlJ1xuXG4gICAgZXhwb3J0IGRlZmF1bHQge1xuICAgICAgICBjb21wb25lbnRzIDoge1xuICAgICAgICAgICAgbGFuZ3VhZ2VCb3hlcyxcbiAgICAgICAgICAgIHNhdmVUcmFuc2xhdGlvbnMsXG4gICAgICAgICAgICBob3ZlckFjdGlvbnMsXG4gICAgICAgICAgICBleHRyYUNvbnRlbnQsXG4gICAgICAgICAgICBlZGl0b3JzTmF2aWdhdGlvblxuICAgICAgICB9LFxuICAgICAgICBkYXRhKCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAvL3RycF9lZGl0b3JfZGF0YVxuICAgICAgICAgICAgICAgIHNldHRpbmdzICAgICAgICAgICAgICAgICAgOiB0cnBfZWRpdG9yX2RhdGEudHJwX3NldHRpbmdzLFxuICAgICAgICAgICAgICAgIGxhbmd1YWdlTmFtZXMgICAgICAgICAgICAgOiB0cnBfZWRpdG9yX2RhdGEubGFuZ3VhZ2VfbmFtZXMsXG4gICAgICAgICAgICAgICAgb3JkZXJlZFNlY29uZGFyeUxhbmd1YWdlcyA6IHRycF9lZGl0b3JfZGF0YS5vcmRlcmVkX3NlY29uZGFyeV9sYW5ndWFnZXMsXG4gICAgICAgICAgICAgICAgbm9uY2VzICAgICAgICAgICAgICAgICAgICA6IHRycF9lZGl0b3JfZGF0YS5lZGl0b3Jfbm9uY2VzLFxuICAgICAgICAgICAgICAgIGVkaXRvcnNOYXZpZ2F0aW9uICAgICAgICAgOiB0cnBfZWRpdG9yX2RhdGEuZWRpdG9yc19uYXZpZ2F0aW9uLFxuICAgICAgICAgICAgICAgIGVkaXRvclN0cmluZ3MgICAgICAgICAgICAgOiB0cnBfZWRpdG9yX2RhdGEudHJwX2xvY2FsaXplZF9zdHJpbmdzLFxuICAgICAgICAgICAgICAgIHN0cmluZ1R5cGVzICAgICAgICAgICAgICAgOiB0cnBfZWRpdG9yX2RhdGEuc3RyaW5nX3R5cGVzLFxuICAgICAgICAgICAgICAgIGZsYWdzUGF0aCAgICAgICAgICAgICAgICAgOiB0cnBfZWRpdG9yX2RhdGEuZmxhZ3NfcGF0aCxcbiAgICAgICAgICAgICAgICBjdXJyZW50TGFuZ3VhZ2UgICAgICAgICAgIDogdHJwX2VkaXRvcl9kYXRhLmN1cnJlbnRfbGFuZ3VhZ2UsXG4gICAgICAgICAgICAgICAgb25TY3JlZW5MYW5ndWFnZSAgICAgICAgICA6IHRycF9lZGl0b3JfZGF0YS5vbl9zY3JlZW5fbGFuZ3VhZ2UsXG4gICAgICAgICAgICAgICAgYWpheFVybCAgICAgICAgICAgICAgICAgICA6IHRycF9lZGl0b3JfZGF0YS5hamF4X3VybCxcbiAgICAgICAgICAgICAgICBjdXJyZW50VVJMICAgICAgICAgICAgICAgIDogdHJwX2VkaXRvcl9kYXRhLnVybF90b19sb2FkLFxuICAgICAgICAgICAgICAgIHBhaWRWZXJzaW9uICAgICAgICAgICAgICAgOiB0cnBfZWRpdG9yX2RhdGEucGFpZF92ZXJzaW9uLFxuXG4gICAgICAgICAgICAgICAgLy90cnBfc3RyaW5nX3RyYW5zbGF0aW9uX2RhdGFcbiAgICAgICAgICAgICAgICBzdHJpbmdUeXBlc0NvbmZpZyA6IHRycF9zdHJpbmdfdHJhbnNsYXRpb25fZGF0YS5zdHJpbmdfdHlwZXNfY29uZmlnLFxuICAgICAgICAgICAgICAgIHN0RWRpdG9yU3RyaW5ncyAgIDogdHJwX3N0cmluZ190cmFuc2xhdGlvbl9kYXRhLnN0X2VkaXRvcl9zdHJpbmdzLFxuXG4gICAgICAgICAgICAgICAgZGljdGlvbmFyeSAgICAgICAgICAgICAgICA6IHt9LFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkU3RyaW5nICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkSW5kZXhlc0FycmF5ICAgICAgOiBbXSxcbiAgICAgICAgICAgICAgICBkZXRlY3RlZFNlbGVjdG9yQW5kSWQgICAgIDogW10sXG4gICAgICAgICAgICAgICAgc3RyaW5nR3JvdXBzICAgICAgICAgICAgICA6IFtdLFxuICAgICAgICAgICAgICAgIHNob3dDaGFuZ2VzVW5zYXZlZE1lc3NhZ2UgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsb2FkaW5nX3N0cmluZ3MgICAgICAgICAgIDogMCxcbiAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbk5vdExvYWRlZFlldCAgIDogZmFsc2UsXG4gICAgICAgICAgICAgICAgdG90YWxJdGVtcyAgICAgICAgICAgICAgICA6IG51bGxcblxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjcmVhdGVkKCkge1xuICAgICAgICAgICAgdGhpcy5zZXR0aW5nc1sgJ2RlZmF1bHQtbGFuZ3VhZ2UtbmFtZScgXSA9IHRoaXMubGFuZ3VhZ2VOYW1lc1sgdGhpcy5zZXR0aW5nc1sgJ2RlZmF1bHQtbGFuZ3VhZ2UnIF0gXVxuXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRMYW5ndWFnZSA9IHRoaXMuc2V0dGluZ3NbICdkZWZhdWx0LWxhbmd1YWdlJyBdXG5cbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoICd0cnBfdHJpZ2dlcl9wZXJmb3JtX2FjdGlvbl9ldmVudCcsIHRoaXMuZWRpdFN0cmluZyApXG4gICAgICAgIH0sXG4gICAgICAgIG1vdW50ZWQoKSB7XG4gICAgICAgICAgICB0aGlzLmdldFN0cmluZ3MoIHRoaXMuJHJvdXRlLnF1ZXJ5IClcblxuICAgICAgICAgICAgdGhpcy5hZGRLZXlib2FyZFNob3J0Y3V0c0xpc3RlbmVyKClcbiAgICAgICAgICAgIGxldCBzZWxmID0gdGhpc1xuXG4gICAgICAgICAgICAvLyByZXNpemUgc2lkZWJhciBhbmQgY29uc2VxdWVudGx5IHRoZSBpZnJhbWVcbiAgICAgICAgICAgIGxldCBwcmV2aWV3Q29udGFpbmVyID0galF1ZXJ5KCAnI3RycC1wcmV2aWV3JyApXG4gICAgICAgICAgICBsZXQgdG90YWxfd2lkdGggICAgICA9IGpRdWVyeSggd2luZG93ICkud2lkdGgoKVxuICAgICAgICAgICAgalF1ZXJ5KCAnI3RycC1jb250cm9scycgKS5yZXNpemFibGUoIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgICAgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aWV3Q29udGFpbmVyLnRvZ2dsZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3AgICAgIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlld0NvbnRhaW5lci50b2dnbGUoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVzICA6ICdlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluV2lkdGggOiAzMjcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFdpZHRoIDogdG90YWxfd2lkdGggLSAyMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gKS5iaW5kKCBcInJlc2l6ZVwiLCB0aGlzLnJlc2l6ZUlmcmFtZSApXG5cbiAgICAgICAgICAgIC8vIHJlc2l6ZSBpZnJhbWUgd2hlbiByZXNpemluZyB3aW5kb3dcbiAgICAgICAgICAgIGpRdWVyeSggd2luZG93ICkucmVzaXplKCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5yZXNpemVJZnJhbWUoKVxuICAgICAgICAgICAgfSApXG4gICAgICAgIH0sXG4gICAgICAgIHdhdGNoICAgICAgOiB7XG4gICAgICAgICAgICAkcm91dGUoIHRvLCBmcm9tICkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0U3RyaW5ncyggdG8ucXVlcnkgKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNlbGVjdGVkU3RyaW5nIDogZnVuY3Rpb24gKCBuZXdTdHJpbmcsIG9sZFN0cmluZyApIHtcbiAgICAgICAgICAgICAgICBpZiAoICF0aGlzLmhhc1Vuc2F2ZWRDaGFuZ2VzKCkgKXtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCB0aGlzLnNlbGVjdGVkU3RyaW5nID09PSBudWxsICl7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXhlc0FycmF5ID0gWyBdXG4gICAgICAgICAgICAgICAgICAgIH1lbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleGVzQXJyYXkgPSBbIHRoaXMuc2VsZWN0ZWRTdHJpbmcgXVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRpY3Rpb25hcnkgOiBmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgIGlmICggIXRoaXMuaGFzVW5zYXZlZENoYW5nZXMoKSApe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU3RyaW5nID0gbnVsbFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXhlc0FycmF5ID0gWyBdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjb21wdXRlZCAgIDoge1xuICAgICAgICAgICAgY2xvc2VVUkwgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xlYW5VUkwoIHRoaXMuY3VycmVudFVSTCApXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1ldGhvZHMgICAgOiB7XG4gICAgICAgICAgICBnZXRTdHJpbmdzKCBxdWVyeSApIHtcbiAgICAgICAgICAgICAgICBpZiAoICF0aGlzLiRyb3V0ZS5tYXRjaGVkWyAwIF0ucHJvcHMuZGVmYXVsdC50cmFuc2xhdGlvblRhYiApe1xuICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgc2VsZiAgICAgICAgICAgID0gdGhpc1xuICAgICAgICAgICAgICAgIGxldCBjdXJyZW50VGFiICAgICAgPSB0aGlzLiRyb3V0ZS5tYXRjaGVkWyAwIF0ucHJvcHMuZGVmYXVsdC5jdXJyZW50VGFiXG4gICAgICAgICAgICAgICAgbGV0IHRyYW5zbGF0aW9uVHlwZSA9IHRoaXMuJHJvdXRlLm1hdGNoZWRbIDAgXS5wcm9wcy5kZWZhdWx0LnRyYW5zbGF0aW9uVHlwZVxuXG4gICAgICAgICAgICAgICAgbGV0IGRhdGEgPSBuZXcgRm9ybURhdGEoKVxuICAgICAgICAgICAgICAgIGRhdGEuYXBwZW5kKCAnYWN0aW9uJywgJ3RycF9zdHJpbmdfdHJhbnNsYXRpb25fZ2V0X3N0cmluZ3NfJyArIHRyYW5zbGF0aW9uVHlwZSApXG4gICAgICAgICAgICAgICAgZGF0YS5hcHBlbmQoICdxdWVyeScsIEpTT04uc3RyaW5naWZ5KCBxdWVyeSApIClcbiAgICAgICAgICAgICAgICBkYXRhLmFwcGVuZCggJ3NlY3VyaXR5JywgY3VycmVudFRhYlsgJ25vbmNlcycgXVsgJ2dldF9zdHJpbmdzJyBdIClcblxuICAgICAgICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KCBuZXcgRXZlbnQoICd0cnBfdHJpZ2dlcl9zaG93X2xvYWRpbmdfdGFibGVfZXZlbnQnICkgKVxuXG4gICAgICAgICAgICAgICAgYXhpb3MucG9zdCggdGhpcy5hamF4VXJsLCBkYXRhIClcbiAgICAgICAgICAgICAgICAgICAgIC50aGVuKCBmdW5jdGlvbiAoIHJlc3BvbnNlICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KCBuZXcgRXZlbnQoICd0cnBfdHJpZ2dlcl9oaWRlX2xvYWRpbmdfdGFibGVfZXZlbnQnICkgKVxuICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmVzcG9uc2UgIT0gbnVsbCApe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9uU2NyZWVuTGFuZ3VhZ2UgPSAocXVlcnkubGFuZ3VhZ2UgJiYgdXRpbHMuYXJyYXlDb250YWluc0l0ZW0oIHNlbGYuc2V0dGluZ3NbICd0cmFuc2xhdGlvbi1sYW5ndWFnZXMnIF0sIHF1ZXJ5Lmxhbmd1YWdlICkgJiYgcXVlcnkubGFuZ3VhZ2UgIT09ICd0cnAtZGVmYXVsdCcpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5Lmxhbmd1YWdlIDogJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50TGFuZ3VhZ2UgID0gKHF1ZXJ5Lmxhbmd1YWdlICYmIHV0aWxzLmFycmF5Q29udGFpbnNJdGVtKCBzZWxmLnNldHRpbmdzWyAndHJhbnNsYXRpb24tbGFuZ3VhZ2VzJyBdLCBxdWVyeS5sYW5ndWFnZSApICYmIHF1ZXJ5Lmxhbmd1YWdlICE9PSAndHJwLWRlZmF1bHQnKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeS5sYW5ndWFnZSA6IHNlbGYuc2V0dGluZ3NbICdkZWZhdWx0LWxhbmd1YWdlJyBdXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCByZXNwb25zZS5kYXRhLmRpY3Rpb25hcnkgKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXdEaWN0aW9uYXJ5ID0gcmVzcG9uc2UuZGF0YS5kaWN0aW9uYXJ5XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggc2VsZi5oYXNVbnNhdmVkQ2hhbmdlcygpICl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29weSB0aGUgdW5zYXZlZCBzdHJpbmcgZnJvbSB0aGUgY3VycmVudCBkaWN0aW9uYXJ5IHRvIHRoZSBuZXcgZGljdGlvbmFyeSB0byBhbGxvdyB1c2VyIHRvIGRpc2NhcmQgb3Igc2F2ZSBjaGFuZ2VzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5ld1NlbGVjdGVkSW5kZXhlc0FycmF5ID0gW11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkSW5kZXhlc0FycmF5LmZvckVhY2goIGZ1bmN0aW9uKCBpdGVtICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRpY3Rpb25hcnlbIGl0ZW0gXS51bnNhdmVkQ2hhbmdlcyA9ICd5ZXMnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1NlbGVjdGVkSW5kZXhlc0FycmF5LnB1c2goIG5ld0RpY3Rpb25hcnkucHVzaCggc2VsZi5kaWN0aW9uYXJ5W2l0ZW1dICkgLSAxIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWRJbmRleGVzQXJyYXkgPSBuZXdTZWxlY3RlZEluZGV4ZXNBcnJheVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWRTdHJpbmcgPSBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGljdGlvbmFyeSA9IG5ld0RpY3Rpb25hcnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJlc3BvbnNlLmRhdGEudG90YWxJdGVtcyApe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50b3RhbEl0ZW1zID0gcmVzcG9uc2UuZGF0YS50b3RhbEl0ZW1zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICB9IClcbiAgICAgICAgICAgICAgICAgICAgIC5jYXRjaCggZnVuY3Rpb24gKCBlcnJvciApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudCggbmV3IEV2ZW50KCAndHJwX3RyaWdnZXJfaGlkZV9sb2FkaW5nX3RhYmxlX2V2ZW50JyApIClcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRpY3Rpb25hcnkgPSB7fVxuICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCBlcnJvciApXG4gICAgICAgICAgICAgICAgICAgICB9IClcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlZGl0U3RyaW5nKCBkYXRhICkge1xuICAgICAgICAgICAgICAgIGlmICggZGF0YS5kZXRhaWwuYWN0aW9uID09PSAnZWRpdCcgKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFN0cmluZyA9IGRhdGEuZGV0YWlsLnN0cmluZ0luZGV4XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsZWFuVVJMKCB1cmwgKSB7XG4gICAgICAgICAgICAgICAgLy9tYWtlIHJlbW92ZVVybFBhcmFtZXRlciByZWN1cnNpdmUgYW5kIG9ubHkgY2FsbCBpdCBvbmNlIHdpdGggYWxsIHRoZSBwYXJhbWV0ZXJzIHRoYXRcbiAgICAgICAgICAgICAgICAvL25lZWQgdG8gc3RyaXBwZWQgP1xuICAgICAgICAgICAgICAgIHVybCA9IHV0aWxzLnJlbW92ZVVybFBhcmFtZXRlciggdXJsLCAnbGFuZycgKVxuICAgICAgICAgICAgICAgIHVybCA9IHV0aWxzLnJlbW92ZVVybFBhcmFtZXRlciggdXJsLCAndHJwLXZpZXctYXMnIClcbiAgICAgICAgICAgICAgICB1cmwgPSB1dGlscy5yZW1vdmVVcmxQYXJhbWV0ZXIoIHVybCwgJ3RycC12aWV3LWFzLW5vbmNlJyApXG4gICAgICAgICAgICAgICAgdXJsID0gdXRpbHMucmVtb3ZlVXJsUGFyYW1ldGVyKCB1cmwsICd0cnAtZWRpdC10cmFuc2xhdGlvbicgKVxuICAgICAgICAgICAgICAgIHVybCA9IHV0aWxzLnJlbW92ZVVybFBhcmFtZXRlciggdXJsLCAndHJwLXN0cmluZy10cmFuc2xhdGlvbicgKVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVybFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8qaUZyYW1lTG9hZGVkKCl7XG4gICAgICAgICAgICAgICAgbGV0IHNlbGYgPSB0aGlzXG4gICAgICAgICAgICAgICAgbGV0IGlmcmFtZUVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjdHJwLXByZXZpZXctaWZyYW1lJylcblxuICAgICAgICAgICAgICAgIHRoaXMuaWZyYW1lID0gaWZyYW1lRWxlbWVudC5jb250ZW50RG9jdW1lbnQgfHwgaWZyYW1lRWxlbWVudC5jb250ZW50V2luZG93LmRvY3VtZW50XG5cbiAgICAgICAgICAgICAgICAvL3N5bmMgaUZyYW1lIFVSTCB3aXRoIHBhcmVudFxuICAgICAgICAgICAgICAgIGlmICggdGhpcy5jdXJyZW50VVJMICE9IHRoaXMuaWZyYW1lLlVSTCApXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFVSTCA9IHRoaXMuaWZyYW1lLlVSTFxuXG4gICAgICAgICAgICAgICAgLy9oaWRlIGlGcmFtZSBsb2FkZXJcbiAgICAgICAgICAgICAgICB0aGlzLmlmcmFtZUxvYWRlciggJ2hpZGUnIClcblxuICAgICAgICAgICAgICAgIHNlbGYuZGV0ZWN0ZWRTZWxlY3RvckFuZElkID0gW11cbiAgICAgICAgICAgICAgICBzZWxmLmRpY3Rpb25hcnkgICAgICAgICAgICA9IFtdXG4gICAgICAgICAgICAgICAgdGhpcy5zY2FuSWZyYW1lRm9yU3RyaW5ncygpXG5cbiAgICAgICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggJ3RycF9pZnJhbWVfcGFnZV91cGRhdGVkJywgdGhpcy5zY2FuSWZyYW1lRm9yU3RyaW5ncyApXG5cbiAgICAgICAgICAgICAgICAvL2V2ZW50IHRoYXQgaXMgZmlyZWQgd2hlbiB0aGUgaUZyYW1lIGlzIG5hdmlnYXRlZFxuICAgICAgICAgICAgICAgIGlmcmFtZUVsZW1lbnQuY29udGVudFdpbmRvdy5vbmJlZm9yZXVubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmlmcmFtZUxvYWRlciggJ3Nob3cnIClcblxuICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkU3RyaW5nID0gbnVsbFxuICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkSW5kZXhlc0FycmF5ID0gW11cbiAgICAgICAgICAgICAgICAgICAgc2VsZi50cmFuc2xhdGlvbk5vdExvYWRlZFlldCA9IGZhbHNlXG5cbiAgICAgICAgICAgICAgICAgICAgc2VsZi5zdHJpbmdzRHJvcGRvd25Mb2FkaW5nKClcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0sKi9cbiAgICAgICAgICAgIGhhc1Vuc2F2ZWRDaGFuZ2VzKCkge1xuICAgICAgICAgICAgICAgIGxldCB1bnNhdmVkQ2hhbmdlcyA9IGZhbHNlXG4gICAgICAgICAgICAgICAgbGV0IHNlbGYgICAgICAgICAgID0gdGhpc1xuICAgICAgICAgICAgICAgIGlmICggdGhpcy5zZWxlY3RlZEluZGV4ZXNBcnJheS5sZW5ndGggPiAwICl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleGVzQXJyYXkuZm9yRWFjaCggZnVuY3Rpb24gKCBzZWxlY3RlZEluZGV4ICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXR0aW5nc1sgJ3RyYW5zbGF0aW9uLWxhbmd1YWdlcycgXS5mb3JFYWNoKCBmdW5jdGlvbiAoIGxhbmd1YWdlQ29kZSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHNlbGYuZGljdGlvbmFyeVsgc2VsZWN0ZWRJbmRleCBdICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGljdGlvbmFyeVsgc2VsZWN0ZWRJbmRleCBdLnRyYW5zbGF0aW9uc0FycmF5WyBsYW5ndWFnZUNvZGUgXSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5kaWN0aW9uYXJ5WyBzZWxlY3RlZEluZGV4IF0udHJhbnNsYXRpb25zQXJyYXlbIGxhbmd1YWdlQ29kZSBdLnRyYW5zbGF0ZWQgIT09IHNlbGYuZGljdGlvbmFyeVsgc2VsZWN0ZWRJbmRleCBdLnRyYW5zbGF0aW9uc0FycmF5WyBsYW5ndWFnZUNvZGUgXS5lZGl0ZWRUcmFuc2xhdGlvbikgKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zYXZlZENoYW5nZXMgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSApXG4gICAgICAgICAgICAgICAgICAgIH0gKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICggdW5zYXZlZENoYW5nZXMgPT09IGZhbHNlICl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleGVzQXJyYXkuZm9yRWFjaCggZnVuY3Rpb24gKCBzZWxlY3RlZEluZGV4ICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzZWxmLmRpY3Rpb25hcnkuaGFzT3duUHJvcGVydHkoc2VsZWN0ZWRJbmRleCkgJiYgc2VsZi5kaWN0aW9uYXJ5WyBzZWxlY3RlZEluZGV4IF0udW5zYXZlZENoYW5nZXMgJiYgc2VsZi5kaWN0aW9uYXJ5WyBzZWxlY3RlZEluZGV4IF0udW5zYXZlZENoYW5nZXMgPT09ICd5ZXMnKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRpY3Rpb25hcnlbIHNlbGVjdGVkSW5kZXggXS51bnNhdmVkQ2hhbmdlcyA9ICdubydcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnNob3dDaGFuZ2VzVW5zYXZlZE1lc3NhZ2UgPSB1bnNhdmVkQ2hhbmdlc1xuICAgICAgICAgICAgICAgIHJldHVybiB1bnNhdmVkQ2hhbmdlc1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlmcmFtZUxvYWRlciggc3RhdHVzICkge1xuICAgICAgICAgICAgICAgIGxldCBsb2FkZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ3RycC1wcmV2aWV3LWxvYWRlcicgKVxuXG4gICAgICAgICAgICAgICAgaWYgKCBzdGF0dXMgPT0gJ3Nob3cnIClcbiAgICAgICAgICAgICAgICAgICAgbG9hZGVyLnN0eWxlLmRpc3BsYXkgPSAnZmxleCdcbiAgICAgICAgICAgICAgICBlbHNlIGlmICggc3RhdHVzID09ICdoaWRlJyApXG4gICAgICAgICAgICAgICAgICAgIGxvYWRlci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJldmlvdXNTdHJpbmcoKSB7XG4gICAgICAgICAgICAgICAgLyogbGV0IGN1cnJlbnRWYWx1ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0cnAtc3RyaW5nLWNhdGVnb3JpZXMnKS52YWx1ZVxuXG4gICAgICAgICAgICAgICAgIGxldCBuZXdWYWx1ZSA9ICtjdXJyZW50VmFsdWUgLSAxXG5cbiAgICAgICAgICAgICAgICAgd2hpbGUoIG5ld1ZhbHVlID49IDAgJiYgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnI3RycC1zdHJpbmctY2F0ZWdvcmllcyBvcHRpb25bdmFsdWU9XCInICsgbmV3VmFsdWUgKyAnXCJdJykubGVuZ3RoID09PSAwICl7XG4gICAgICAgICAgICAgICAgICAgICBuZXdWYWx1ZS0tO1xuICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgaWYoIG5ld1ZhbHVlIDwgMCApXG4gICAgICAgICAgICAgICAgICAgICByZXR1cm5cblxuICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU3RyaW5nID0gbmV3VmFsdWUudG9TdHJpbmcoKSovXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmV4dFN0cmluZygpIHtcbiAgICAgICAgICAgICAgICAvKmxldCBjdXJyZW50VmFsdWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndHJwLXN0cmluZy1jYXRlZ29yaWVzJykudmFsdWUsIG5ld1ZhbHVlID0gMFxuXG4gICAgICAgICAgICAgICAgaWYoIGN1cnJlbnRWYWx1ZSAhPSAnJyApXG4gICAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gK2N1cnJlbnRWYWx1ZSArIDFcblxuICAgICAgICAgICAgICAgIHdoaWxlKCBuZXdWYWx1ZSA8IHRoaXMuZGljdGlvbmFyeS5sZW5ndGggJiYgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnI3RycC1zdHJpbmctY2F0ZWdvcmllcyBvcHRpb25bdmFsdWU9XCInICsgbmV3VmFsdWUgKyAnXCJdJykubGVuZ3RoID09PSAwICl7XG4gICAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlKys7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCBuZXdWYWx1ZSA+PSB0aGlzLmRpY3Rpb25hcnkubGVuZ3RoICl7XG4gICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTdHJpbmcgPSBuZXdWYWx1ZS50b1N0cmluZygpKi9cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhZGRLZXlib2FyZFNob3J0Y3V0c0xpc3RlbmVyKCkge1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIFwia2V5ZG93blwiLCBmdW5jdGlvbiAoIGUgKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICggKHdpbmRvdy5uYXZpZ2F0b3IucGxhdGZvcm0ubWF0Y2goIFwiTWFjXCIgKSA/IGUubWV0YUtleSA6IGUuY3RybEtleSkgJiYgZS5hbHRLZXkgKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENUUkwgKyBBTFQgKyByaWdodCBhcnJvd1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlLmtleUNvZGUgPT09IDM5ICl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoIG5ldyBFdmVudCggJ3RycF90cmlnZ2VyX25leHRfc3RyaW5nX2V2ZW50JyApIClcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ1RSTCArIEFMVCArIGxlZnQgYXJyb3dcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGUua2V5Q29kZSA9PT0gMzcgKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KCBuZXcgRXZlbnQoICd0cnBfdHJpZ2dlcl9wcmV2aW91c19zdHJpbmdfZXZlbnQnICkgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIGZhbHNlIClcblxuICAgICAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCAndHJwX3RyaWdnZXJfbmV4dF9zdHJpbmdfZXZlbnQnLCB0aGlzLm5leHRTdHJpbmcgKVxuICAgICAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCAndHJwX3RyaWdnZXJfcHJldmlvdXNfc3RyaW5nX2V2ZW50JywgdGhpcy5wcmV2aW91c1N0cmluZyApXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzaXplSWZyYW1lKCBldmVudCwgdWkgKSB7XG4gICAgICAgICAgICAgICAgbGV0IHRvdGFsX3dpZHRoID0galF1ZXJ5KCB3aW5kb3cgKS53aWR0aCgpXG4gICAgICAgICAgICAgICAgbGV0IHdpZHRoICAgICAgID0galF1ZXJ5KCAnI3RycC1jb250cm9scycgKS53aWR0aCgpXG5cbiAgICAgICAgICAgICAgICBsZXQgcHJldmlld0NvbnRhaW5lciA9IGpRdWVyeSggJyN0cnAtcHJldmlldycgKVxuICAgICAgICAgICAgICAgIHByZXZpZXdDb250YWluZXIuY3NzKCAnbGVmdCcsICh3aWR0aCAtIDM0OCkgKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuPC9zY3JpcHQ+XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./assets/src/js/string-translation.vue?vue&type=script&lang=js&\n");
|
1091 |
|
1092 |
/***/ }),
|
1093 |
|
1087 |
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
1088 |
|
1089 |
"use strict";
|
1090 |
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var select2_dist_js_select2_min_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! select2/dist/js/select2.min.js */ \"./node_modules/select2/dist/js/select2.min.js\");\n/* harmony import */ var select2_dist_js_select2_min_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(select2_dist_js_select2_min_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils */ \"./assets/src/js/utils.js\");\n/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! axios */ \"./node_modules/axios/index.js\");\n/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(axios__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _components_language_boxes_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./components/language-boxes.vue */ \"./assets/src/js/components/language-boxes.vue\");\n/* harmony import */ var _components_save_translations_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./components/save-translations.vue */ \"./assets/src/js/components/save-translations.vue\");\n/* harmony import */ var _components_hover_actions_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./components/hover-actions.vue */ \"./assets/src/js/components/hover-actions.vue\");\n/* harmony import */ var _components_extra_content_vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./components/extra-content.vue */ \"./assets/src/js/components/extra-content.vue\");\n/* harmony import */ var _components_editors_navigation_vue__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./components/editors-navigation.vue */ \"./assets/src/js/components/editors-navigation.vue\");\n/* harmony import */ var he__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! he */ \"./node_modules/he/he.js\");\n/* harmony import */ var he__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(he__WEBPACK_IMPORTED_MODULE_8__);\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n components: {\n languageBoxes: _components_language_boxes_vue__WEBPACK_IMPORTED_MODULE_3__[\"default\"],\n saveTranslations: _components_save_translations_vue__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n hoverActions: _components_hover_actions_vue__WEBPACK_IMPORTED_MODULE_5__[\"default\"],\n extraContent: _components_extra_content_vue__WEBPACK_IMPORTED_MODULE_6__[\"default\"],\n editorsNavigation: _components_editors_navigation_vue__WEBPACK_IMPORTED_MODULE_7__[\"default\"]\n },\n data: function data() {\n return {\n //trp_editor_data\n settings: trp_editor_data.trp_settings,\n languageNames: trp_editor_data.language_names,\n orderedSecondaryLanguages: trp_editor_data.ordered_secondary_languages,\n nonces: trp_editor_data.editor_nonces,\n editorsNavigation: trp_editor_data.editors_navigation,\n editorStrings: trp_editor_data.trp_localized_strings,\n stringTypes: trp_editor_data.string_types,\n flagsPath: trp_editor_data.flags_path,\n currentLanguage: trp_editor_data.current_language,\n onScreenLanguage: trp_editor_data.on_screen_language,\n ajaxUrl: trp_editor_data.ajax_url,\n currentURL: trp_editor_data.url_to_load,\n paidVersion: trp_editor_data.paid_version,\n //trp_string_translation_data\n stringTypesConfig: trp_string_translation_data.string_types_config,\n stEditorStrings: trp_string_translation_data.st_editor_strings,\n dictionary: {},\n selectedString: null,\n selectedIndexesArray: [],\n detectedSelectorAndId: [],\n stringGroups: [],\n showChangesUnsavedMessage: false,\n loading_strings: 0,\n translationNotLoadedYet: false,\n totalItems: null\n };\n },\n created: function created() {\n this.settings['default-language-name'] = this.languageNames[this.settings['default-language']];\n this.currentLanguage = this.settings['default-language'];\n document.addEventListener('trp_trigger_perform_action_event', this.editString);\n },\n mounted: function mounted() {\n this.getStrings(this.$route.query);\n this.addKeyboardShortcutsListener();\n var self = this; // resize sidebar and consequently the iframe\n\n var previewContainer = jQuery('#trp-preview');\n var total_width = jQuery(window).width();\n jQuery('#trp-controls').resizable({\n start: function start() {\n previewContainer.toggle();\n },\n stop: function stop() {\n previewContainer.toggle();\n },\n handles: 'e',\n minWidth: 327,\n maxWidth: total_width - 20\n }).bind(\"resize\", this.resizeIframe); // resize iframe when resizing window\n\n jQuery(window).resize(function () {\n self.resizeIframe();\n });\n },\n watch: {\n $route: function $route(to, from) {\n this.getStrings(to.query);\n },\n selectedString: function selectedString(newString, oldString) {\n if (!this.hasUnsavedChanges()) {\n if (this.selectedString === null) {\n this.selectedIndexesArray = [];\n } else {\n this.selectedIndexesArray = [this.selectedString];\n }\n }\n },\n dictionary: function dictionary() {\n if (!this.hasUnsavedChanges()) {\n this.selectedString = null;\n this.selectedIndexesArray = [];\n }\n }\n },\n computed: {\n closeURL: function closeURL() {\n return this.cleanURL(this.currentURL);\n }\n },\n methods: {\n getStrings: function getStrings(query) {\n if (!this.$route.matched[0].props[\"default\"].translationTab) {\n return;\n }\n\n var self = this;\n var currentTab = this.$route.matched[0].props[\"default\"].currentTab;\n var translationType = this.$route.matched[0].props[\"default\"].translationType;\n var data = new FormData();\n data.append('action', 'trp_string_translation_get_strings_' + translationType);\n data.append('query', JSON.stringify(query));\n data.append('security', currentTab['nonces']['get_strings']);\n window.dispatchEvent(new Event('trp_trigger_show_loading_table_event'));\n axios__WEBPACK_IMPORTED_MODULE_2___default.a.post(this.ajaxUrl, data).then(function (response) {\n window.dispatchEvent(new Event('trp_trigger_hide_loading_table_event'));\n\n if (response != null) {\n self.onScreenLanguage = query.language && _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].arrayContainsItem(self.settings['translation-languages'], query.language) && query.language !== 'trp-default' ? query.language : '';\n self.currentLanguage = query.language && _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].arrayContainsItem(self.settings['translation-languages'], query.language) && query.language !== 'trp-default' ? query.language : self.settings['default-language'];\n\n if (response.data.dictionary) {\n var newDictionary = response.data.dictionary;\n\n if (self.hasUnsavedChanges()) {\n // copy the unsaved string from the current dictionary to the new dictionary to allow user to discard or save changes\n var newSelectedIndexesArray = [];\n self.selectedIndexesArray.forEach(function (item) {\n self.dictionary[item].unsavedChanges = 'yes';\n newSelectedIndexesArray.push(newDictionary.push(self.dictionary[item]) - 1);\n });\n self.selectedIndexesArray = newSelectedIndexesArray;\n self.selectedString = null;\n }\n\n self.dictionary = newDictionary;\n }\n\n if (response.data.totalItems) {\n self.totalItems = response.data.totalItems;\n }\n }\n })[\"catch\"](function (error) {\n window.dispatchEvent(new Event('trp_trigger_hide_loading_table_event'));\n self.dictionary = {};\n console.log(error);\n var reload = confirm(self.stEditorStrings.request_error);\n\n if (reload === false) {\n return;\n } else {\n window.location.reload();\n }\n });\n },\n editString: function editString(data) {\n if (data.detail.action === 'edit') {\n this.selectedString = data.detail.stringIndex;\n }\n },\n cleanURL: function cleanURL(url) {\n //make removeUrlParameter recursive and only call it once with all the parameters that\n //need to stripped ?\n url = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].removeUrlParameter(url, 'lang');\n url = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].removeUrlParameter(url, 'trp-view-as');\n url = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].removeUrlParameter(url, 'trp-view-as-nonce');\n url = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].removeUrlParameter(url, 'trp-edit-translation');\n url = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].removeUrlParameter(url, 'trp-string-translation');\n return url;\n },\n\n /*iFrameLoaded(){\n let self = this\n let iframeElement = document.querySelector('#trp-preview-iframe')\n this.iframe = iframeElement.contentDocument || iframeElement.contentWindow.document\n //sync iFrame URL with parent\n if ( this.currentURL != this.iframe.URL )\n this.currentURL = this.iframe.URL\n //hide iFrame loader\n this.iframeLoader( 'hide' )\n self.detectedSelectorAndId = []\n self.dictionary = []\n this.scanIframeForStrings()\n window.addEventListener( 'trp_iframe_page_updated', this.scanIframeForStrings )\n //event that is fired when the iFrame is navigated\n iframeElement.contentWindow.onbeforeunload = function() {\n self.iframeLoader( 'show' )\n self.selectedString = null\n self.selectedIndexesArray = []\n self.translationNotLoadedYet = false\n self.stringsDropdownLoading()\n }\n },*/\n hasUnsavedChanges: function hasUnsavedChanges() {\n var unsavedChanges = false;\n var self = this;\n\n if (this.selectedIndexesArray.length > 0) {\n this.selectedIndexesArray.forEach(function (selectedIndex) {\n self.settings['translation-languages'].forEach(function (languageCode) {\n if (self.dictionary[selectedIndex] && self.dictionary[selectedIndex].translationsArray[languageCode] && self.dictionary[selectedIndex].translationsArray[languageCode].translated !== self.dictionary[selectedIndex].translationsArray[languageCode].editedTranslation) {\n unsavedChanges = true;\n }\n });\n });\n }\n\n if (unsavedChanges === false) {\n this.selectedIndexesArray.forEach(function (selectedIndex) {\n if (self.dictionary.hasOwnProperty(selectedIndex) && self.dictionary[selectedIndex].unsavedChanges && self.dictionary[selectedIndex].unsavedChanges === 'yes') {\n self.dictionary[selectedIndex].unsavedChanges = 'no';\n }\n });\n }\n\n this.showChangesUnsavedMessage = unsavedChanges;\n return unsavedChanges;\n },\n iframeLoader: function iframeLoader(status) {\n var loader = document.getElementById('trp-preview-loader');\n if (status == 'show') loader.style.display = 'flex';else if (status == 'hide') loader.style.display = 'none';\n },\n previousString: function previousString() {\n /* let currentValue = document.getElementById('trp-string-categories').value\n let newValue = +currentValue - 1\n while( newValue >= 0 && document.querySelectorAll('#trp-string-categories option[value=\"' + newValue + '\"]').length === 0 ){\n newValue--;\n }\n if( newValue < 0 )\n return\n this.selectedString = newValue.toString()*/\n },\n nextString: function nextString() {\n /*let currentValue = document.getElementById('trp-string-categories').value, newValue = 0\n if( currentValue != '' )\n newValue = +currentValue + 1\n while( newValue < this.dictionary.length && document.querySelectorAll('#trp-string-categories option[value=\"' + newValue + '\"]').length === 0 ){\n newValue++;\n }\n if ( newValue >= this.dictionary.length ){\n return\n }\n this.selectedString = newValue.toString()*/\n },\n addKeyboardShortcutsListener: function addKeyboardShortcutsListener() {\n document.addEventListener(\"keydown\", function (e) {\n if ((window.navigator.platform.match(\"Mac\") ? e.metaKey : e.ctrlKey) && e.altKey) {\n // CTRL + ALT + right arrow\n if (e.keyCode === 39) {\n e.preventDefault();\n window.dispatchEvent(new Event('trp_trigger_next_string_event'));\n } else {\n // CTRL + ALT + left arrow\n if (e.keyCode === 37) {\n e.preventDefault();\n window.dispatchEvent(new Event('trp_trigger_previous_string_event'));\n }\n }\n }\n }, false);\n window.addEventListener('trp_trigger_next_string_event', this.nextString);\n window.addEventListener('trp_trigger_previous_string_event', this.previousString);\n },\n resizeIframe: function resizeIframe(event, ui) {\n var total_width = jQuery(window).width();\n var width = jQuery('#trp-controls').width();\n var previewContainer = jQuery('#trp-preview');\n previewContainer.css('left', width - 348);\n }\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vYXNzZXRzL3NyYy9qcy9zdHJpbmctdHJhbnNsYXRpb24udnVlPzU2YmQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTZHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0EseUZBREE7QUFFQSwrRkFGQTtBQUdBLHVGQUhBO0FBSUEsdUZBSkE7QUFLQTtBQUxBLEdBREE7QUFRQSxNQVJBLGtCQVFBO0FBQ0E7QUFDQTtBQUNBLDRDQUZBO0FBR0EsbURBSEE7QUFJQSw0RUFKQTtBQUtBLDJDQUxBO0FBTUEsMkRBTkE7QUFPQSwwREFQQTtBQVFBLCtDQVJBO0FBU0EsMkNBVEE7QUFVQSx1REFWQTtBQVdBLDBEQVhBO0FBWUEsdUNBWkE7QUFhQSw2Q0FiQTtBQWNBLCtDQWRBO0FBZ0JBO0FBQ0Esd0VBakJBO0FBa0JBLG9FQWxCQTtBQW9CQSxvQkFwQkE7QUFxQkEsMEJBckJBO0FBc0JBLDhCQXRCQTtBQXVCQSwrQkF2QkE7QUF3QkEsc0JBeEJBO0FBeUJBLHNDQXpCQTtBQTBCQSx3QkExQkE7QUEyQkEsb0NBM0JBO0FBNEJBO0FBNUJBO0FBK0JBLEdBeENBO0FBeUNBLFNBekNBLHFCQXlDQTtBQUNBO0FBRUE7QUFFQTtBQUNBLEdBL0NBO0FBZ0RBLFNBaERBLHFCQWdEQTtBQUNBO0FBRUE7QUFDQSxvQkFKQSxDQU1BOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUhBO0FBSUE7QUFDQTtBQUNBLE9BTkE7QUFPQSxrQkFQQTtBQVFBLG1CQVJBO0FBU0E7QUFUQSxPQVVBLElBVkEsQ0FVQSxRQVZBLEVBVUEsaUJBVkEsRUFUQSxDQXFCQTs7QUFDQTtBQUNBO0FBQ0EsS0FGQTtBQUdBLEdBekVBO0FBMEVBO0FBQ0EsVUFEQSxrQkFDQSxFQURBLEVBQ0EsSUFEQSxFQUNBO0FBQ0E7QUFDQSxLQUhBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUZBLE1BRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQVpBO0FBYUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBbEJBLEdBMUVBO0FBOEZBO0FBQ0E7QUFDQTtBQUNBO0FBSEEsR0E5RkE7QUFtR0E7QUFDQSxjQURBLHNCQUNBLEtBREEsRUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUEsNEVBQ0EsSUFEQSxDQUNBO0FBQ0E7O0FBQ0E7QUFDQSxtTkFDQSxjQURBLEdBQ0EsRUFEQTtBQUVBLGtOQUNBLGNBREEsR0FDQSxpQ0FEQTs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBSEE7QUFJQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BN0JBLFdBOEJBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7O0FBQ0E7QUFDQTtBQUNBLFNBRkEsTUFFQTtBQUNBO0FBQ0E7QUFFQSxPQTFDQTtBQTJDQSxLQTVEQTtBQTZEQSxjQTdEQSxzQkE2REEsSUE3REEsRUE2REE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQWpFQTtBQWtFQSxZQWxFQSxvQkFrRUEsR0FsRUEsRUFrRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0EsS0E1RUE7O0FBNkVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBK0JBLHFCQTVHQSwrQkE0R0E7QUFDQTtBQUNBOztBQUNBO0FBQ0E7QUFDQTtBQUNBLGtEQUNBLDhEQURBLElBRUEsOEpBRkEsRUFFQTtBQUNBO0FBQ0E7QUFDQSxXQU5BO0FBT0EsU0FSQTtBQVNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUpBO0FBS0E7O0FBRUE7QUFDQTtBQUNBLEtBcklBO0FBc0lBLGdCQXRJQSx3QkFzSUEsTUF0SUEsRUFzSUE7QUFDQTtBQUVBLDRCQUNBLDhCQURBLEtBRUEsc0JBQ0E7QUFDQSxLQTdJQTtBQThJQSxrQkE5SUEsNEJBOElBO0FBQ0E7Ozs7Ozs7O0FBWUEsS0EzSkE7QUE0SkEsY0E1SkEsd0JBNEpBO0FBQ0E7Ozs7Ozs7Ozs7QUFjQSxLQTNLQTtBQTRLQSxnQ0E1S0EsMENBNEtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FIQSxNQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQWRBLEVBY0EsS0FkQTtBQWdCQTtBQUNBO0FBQ0EsS0EvTEE7QUFnTUEsZ0JBaE1BLHdCQWdNQSxLQWhNQSxFQWdNQSxFQWhNQSxFQWdNQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUF0TUE7QUFuR0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vYXNzZXRzL3NyYy9qcy9zdHJpbmctdHJhbnNsYXRpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJi5qcyIsInNvdXJjZXNDb250ZW50IjpbIjx0ZW1wbGF0ZT5cbiAgICA8ZGl2IGlkPVwidHJwLWVkaXRvclwiIGNsYXNzPVwid3AtY29yZS11aVwiPlxuXG4gICAgICAgIDxkaXYgaWQ9XCJ0cnAtY29udHJvbHNcIj5cblxuICAgICAgICAgICAgPGRpdiBpZD1cInRycC1jbG9zZS1zYXZlXCI+XG4gICAgICAgICAgICAgICAgPGEgaWQ9XCJ0cnAtY29udHJvbHMtY2xvc2VcIiA6aHJlZj1cImNsb3NlVVJMXCIgOnRpdGxlPVwiZWRpdG9yU3RyaW5ncy5jbG9zZVwiPjwvYT5cbiAgICAgICAgICAgICAgICA8ZGl2IGlkPVwidHJwLXNhdmUtYW5kLWxvYWRlci1zcGlubmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRycC1hamF4LWxvYWRlclwiIHYtc2hvdz1cImxvYWRpbmdfc3RyaW5ncyA+IDBcIiBpZD1cInRycC1zdHJpbmctc2F2ZWQtYWpheC1sb2FkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJwLXNwaW5uZXJcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNhdmUtdHJhbnNsYXRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOnNlbGVjdGVkSW5kZXhlc0FycmF5PVwic2VsZWN0ZWRJbmRleGVzQXJyYXlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpkaWN0aW9uYXJ5PVwiZGljdGlvbmFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOnNldHRpbmdzPVwic2V0dGluZ3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpub25jZXM9XCJub25jZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDphamF4X3VybD1cImFqYXhVcmxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjdXJyZW50TGFuZ3VhZ2U9XCJjdXJyZW50TGFuZ3VhZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpvblNjcmVlbkxhbmd1YWdlPVwib25TY3JlZW5MYW5ndWFnZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOmN1cnJlbnRVUkw9XCJjdXJyZW50VVJMXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAdHJhbnNsYXRpb25zLXNhdmVkPVwic2hvd0NoYW5nZXNVbnNhdmVkTWVzc2FnZSA9IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ZWRpdG9yU3RyaW5ncz1cImVkaXRvclN0cmluZ3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpzdHJpbmdUeXBlcz1cInN0cmluZ1R5cGVzXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8L3NhdmUtdHJhbnNsYXRpb25zPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0cnAtY29udHJvbHMtY29udGFpbmVyXCIgOmNsYXNzPVwieyd0cnAtc2hvdy1lZGl0b3JzLW5hdmlnYXRpb24nIDogZWRpdG9yc05hdmlnYXRpb24uc2hvdyB9XCI+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJwLWNvbnRyb2xzLXNlY3Rpb25cIiBpZD1cInRycC1jb250cm9scy1zZWN0aW9uLWZpcnN0XCI+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRycC1jb250cm9scy1zZWN0aW9uLWNvbnRlbnRcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cInRycC1uZXh0LXByZXZpb3VzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJ0cnAtcHJldmlvdXNcIiBjbGFzcz1cInRycC1uZXh0LXByZXZpb3VzLWJ1dHRvbnMgYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtb246Y2xpY2s9XCJwcmV2aW91c1N0cmluZygpXCIgOnRpdGxlPVwiZWRpdG9yU3RyaW5ncy5wcmV2aW91c190aXRsZV9hdHRyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPiZsYXF1bzs8L3NwYW4+IHt7IGVkaXRvclN0cmluZ3MucHJldmlvdXMgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZD1cInRycC1uZXh0XCIgY2xhc3M9XCJ0cnAtbmV4dC1wcmV2aW91cy1idXR0b25zIGJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LW9uOmNsaWNrPVwibmV4dFN0cmluZygpXCIgOnRpdGxlPVwiZWRpdG9yU3RyaW5ncy5uZXh0X3RpdGxlX2F0dHJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZWRpdG9yU3RyaW5ncy5uZXh0IH19IDxzcGFuPiZyYXF1bzs8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRycC1jb250cm9scy1zZWN0aW9uXCIgdi1zaG93PVwic2VsZWN0ZWRJbmRleGVzQXJyYXkubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICAgICAgICA8bGFuZ3VhZ2UtYm94ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6c2VsZWN0ZWRJbmRleGVzQXJyYXk9XCJzZWxlY3RlZEluZGV4ZXNBcnJheVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOmRpY3Rpb25hcnk9XCJkaWN0aW9uYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Y3VycmVudExhbmd1YWdlPVwiY3VycmVudExhbmd1YWdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6b25TY3JlZW5MYW5ndWFnZT1cIm9uU2NyZWVuTGFuZ3VhZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpsYW5ndWFnZU5hbWVzPVwibGFuZ3VhZ2VOYW1lc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOnNldHRpbmdzPVwic2V0dGluZ3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpzaG93Q2hhbmdlc1Vuc2F2ZWRNZXNzYWdlPVwic2hvd0NoYW5nZXNVbnNhdmVkTWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGRpc2NhcmRlZC1jaGFuZ2VzPVwiaGFzVW5zYXZlZENoYW5nZXMoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOmVkaXRvclN0cmluZ3M9XCJlZGl0b3JTdHJpbmdzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ZmxhZ3NQYXRoPVwiZmxhZ3NQYXRoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6bm9uY2VzPVwibm9uY2VzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6YWpheF91cmw9XCJhamF4VXJsXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8L2xhbmd1YWdlLWJveGVzPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGV4dHJhLWNvbnRlbnQgOmxhbmd1YWdlTmFtZXM9XCJsYW5ndWFnZU5hbWVzXCIgOmVkaXRvclN0cmluZ3M9XCJlZGl0b3JTdHJpbmdzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6cGFpZFZlcnNpb249XCJwYWlkVmVyc2lvblwiPjwvZXh0cmEtY29udGVudD5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0cnAtY29udHJvbHMtc2VjdGlvblwiIHYtc2hvdz1cInRyYW5zbGF0aW9uTm90TG9hZGVkWWV0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJ0cnAtdHJhbnNsYXRpb24tbm90LXJlYWR5LXNlY3Rpb25cIiBjbGFzcz1cInRycC1jb250cm9scy1zZWN0aW9uLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIHYtaHRtbD1cImVkaXRvclN0cmluZ3MudHJhbnNsYXRpb25fbm90X2xvYWRlZF95ZXRcIj48L3A+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxlZGl0b3JzLW5hdmlnYXRpb24gOmVkaXRvcnNOYXZpZ2F0aW9uPVwiZWRpdG9yc05hdmlnYXRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6c2VsZWN0ZWRUYWI9XCInc3RyaW5ndHJhbnNsYXRpb24nXCI+PC9lZGl0b3JzLW5hdmlnYXRpb24+XG5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBpZD1cInRycC1wcmV2aWV3XCIgY2xhc3M9XCJ0cnAtc3RyaW5nLXRyYW5zbGF0aW9uLWNvbnRhaW5lclwiIEBjbGljaz1cImhhc1Vuc2F2ZWRDaGFuZ2VzKClcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0cnAtc3RyaW5nLXRyYW5zbGF0aW9uLWlubmVyLWNvbnRhaW5lclwiIDpjbGFzcz1cInsndHJwLXNjcmVlbi1vdmVybGF5JyA6IHNob3dDaGFuZ2VzVW5zYXZlZE1lc3NhZ2UgfVwiPlxuICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cIm5hdi10YWItd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICA8cm91dGVyLWxpbmtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LWZvcj1cIih0YWIsIHRhYl9zbHVnKSBpbiBzdHJpbmdUeXBlc0NvbmZpZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1iaW5kOmtleT1cIid0cnAtdGFiLWtleS0nICsgdGFiX3NsdWdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDp0bz1cIih0YWJbJ2NhdGVnb3J5X2Jhc2VkJ10gKSAgPyAnLycrIHRhYl9zbHVnICsgJy8nOiAnLycrIHRhYl9zbHVnICsgJy8nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6aWQ9XCIndHJwLXRhYi0nICsgdGFiX3NsdWdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibmF2LXRhYlwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7dGFiWyd0YWJfbmFtZSddfX1cbiAgICAgICAgICAgICAgICAgICAgPC9yb3V0ZXItbGluaz5cbjwhLS0gICAgICAgICAgICAgICAgICAgIDxyb3V0ZXItbGluayB0bz1cIi9pbXBvcnQtZXhwb3J0XCIgY2xhc3M9XCJuYXYtdGFiXCI+LS0+XG48IS0tICAgICAgICAgICAgICAgICAgICAgICAge3tzdEVkaXRvclN0cmluZ3MuaW1wb3J0ZXhwb3J0fX0tLT5cbjwhLS0gICAgICAgICAgICAgICAgICAgIDwvcm91dGVyLWxpbms+LS0+XG4gICAgICAgICAgICAgICAgPC9oMj5cbiAgICAgICAgICAgICAgICA8cm91dGVyLXZpZXdcbiAgICAgICAgICAgICAgICAgICAgICAgIDpkaWN0aW9uYXJ5PVwiZGljdGlvbmFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA6dG90YWxJdGVtcz1cInRvdGFsSXRlbXNcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L3JvdXRlci12aWV3PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgICBpbXBvcnQgJ3NlbGVjdDIvZGlzdC9qcy9zZWxlY3QyLm1pbi5qcydcbiAgICBpbXBvcnQgdXRpbHMgICAgICAgICAgICAgZnJvbSAnLi91dGlscydcbiAgICBpbXBvcnQgYXhpb3MgICAgICAgICAgICAgZnJvbSAnYXhpb3MnXG4gICAgaW1wb3J0IGxhbmd1YWdlQm94ZXMgICAgIGZyb20gJy4vY29tcG9uZW50cy9sYW5ndWFnZS1ib3hlcy52dWUnXG4gICAgaW1wb3J0IHNhdmVUcmFuc2xhdGlvbnMgIGZyb20gJy4vY29tcG9uZW50cy9zYXZlLXRyYW5zbGF0aW9ucy52dWUnXG4gICAgaW1wb3J0IGhvdmVyQWN0aW9ucyAgICAgIGZyb20gJy4vY29tcG9uZW50cy9ob3Zlci1hY3Rpb25zLnZ1ZSdcbiAgICBpbXBvcnQgZXh0cmFDb250ZW50ICAgICAgZnJvbSAnLi9jb21wb25lbnRzL2V4dHJhLWNvbnRlbnQudnVlJ1xuICAgIGltcG9ydCBlZGl0b3JzTmF2aWdhdGlvbiBmcm9tICcuL2NvbXBvbmVudHMvZWRpdG9ycy1uYXZpZ2F0aW9uLnZ1ZSdcbiAgICBpbXBvcnQgaGUgICAgICAgICAgICAgICAgZnJvbSAnaGUnXG5cbiAgICBleHBvcnQgZGVmYXVsdCB7XG4gICAgICAgIGNvbXBvbmVudHMgOiB7XG4gICAgICAgICAgICBsYW5ndWFnZUJveGVzLFxuICAgICAgICAgICAgc2F2ZVRyYW5zbGF0aW9ucyxcbiAgICAgICAgICAgIGhvdmVyQWN0aW9ucyxcbiAgICAgICAgICAgIGV4dHJhQ29udGVudCxcbiAgICAgICAgICAgIGVkaXRvcnNOYXZpZ2F0aW9uXG4gICAgICAgIH0sXG4gICAgICAgIGRhdGEoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC8vdHJwX2VkaXRvcl9kYXRhXG4gICAgICAgICAgICAgICAgc2V0dGluZ3MgICAgICAgICAgICAgICAgICA6IHRycF9lZGl0b3JfZGF0YS50cnBfc2V0dGluZ3MsXG4gICAgICAgICAgICAgICAgbGFuZ3VhZ2VOYW1lcyAgICAgICAgICAgICA6IHRycF9lZGl0b3JfZGF0YS5sYW5ndWFnZV9uYW1lcyxcbiAgICAgICAgICAgICAgICBvcmRlcmVkU2Vjb25kYXJ5TGFuZ3VhZ2VzIDogdHJwX2VkaXRvcl9kYXRhLm9yZGVyZWRfc2Vjb25kYXJ5X2xhbmd1YWdlcyxcbiAgICAgICAgICAgICAgICBub25jZXMgICAgICAgICAgICAgICAgICAgIDogdHJwX2VkaXRvcl9kYXRhLmVkaXRvcl9ub25jZXMsXG4gICAgICAgICAgICAgICAgZWRpdG9yc05hdmlnYXRpb24gICAgICAgICA6IHRycF9lZGl0b3JfZGF0YS5lZGl0b3JzX25hdmlnYXRpb24sXG4gICAgICAgICAgICAgICAgZWRpdG9yU3RyaW5ncyAgICAgICAgICAgICA6IHRycF9lZGl0b3JfZGF0YS50cnBfbG9jYWxpemVkX3N0cmluZ3MsXG4gICAgICAgICAgICAgICAgc3RyaW5nVHlwZXMgICAgICAgICAgICAgICA6IHRycF9lZGl0b3JfZGF0YS5zdHJpbmdfdHlwZXMsXG4gICAgICAgICAgICAgICAgZmxhZ3NQYXRoICAgICAgICAgICAgICAgICA6IHRycF9lZGl0b3JfZGF0YS5mbGFnc19wYXRoLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRMYW5ndWFnZSAgICAgICAgICAgOiB0cnBfZWRpdG9yX2RhdGEuY3VycmVudF9sYW5ndWFnZSxcbiAgICAgICAgICAgICAgICBvblNjcmVlbkxhbmd1YWdlICAgICAgICAgIDogdHJwX2VkaXRvcl9kYXRhLm9uX3NjcmVlbl9sYW5ndWFnZSxcbiAgICAgICAgICAgICAgICBhamF4VXJsICAgICAgICAgICAgICAgICAgIDogdHJwX2VkaXRvcl9kYXRhLmFqYXhfdXJsLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRVUkwgICAgICAgICAgICAgICAgOiB0cnBfZWRpdG9yX2RhdGEudXJsX3RvX2xvYWQsXG4gICAgICAgICAgICAgICAgcGFpZFZlcnNpb24gICAgICAgICAgICAgICA6IHRycF9lZGl0b3JfZGF0YS5wYWlkX3ZlcnNpb24sXG5cbiAgICAgICAgICAgICAgICAvL3RycF9zdHJpbmdfdHJhbnNsYXRpb25fZGF0YVxuICAgICAgICAgICAgICAgIHN0cmluZ1R5cGVzQ29uZmlnIDogdHJwX3N0cmluZ190cmFuc2xhdGlvbl9kYXRhLnN0cmluZ190eXBlc19jb25maWcsXG4gICAgICAgICAgICAgICAgc3RFZGl0b3JTdHJpbmdzICAgOiB0cnBfc3RyaW5nX3RyYW5zbGF0aW9uX2RhdGEuc3RfZWRpdG9yX3N0cmluZ3MsXG5cbiAgICAgICAgICAgICAgICBkaWN0aW9uYXJ5ICAgICAgICAgICAgICAgIDoge30sXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRTdHJpbmcgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRJbmRleGVzQXJyYXkgICAgICA6IFtdLFxuICAgICAgICAgICAgICAgIGRldGVjdGVkU2VsZWN0b3JBbmRJZCAgICAgOiBbXSxcbiAgICAgICAgICAgICAgICBzdHJpbmdHcm91cHMgICAgICAgICAgICAgIDogW10sXG4gICAgICAgICAgICAgICAgc2hvd0NoYW5nZXNVbnNhdmVkTWVzc2FnZSA6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxvYWRpbmdfc3RyaW5ncyAgICAgICAgICAgOiAwLFxuICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uTm90TG9hZGVkWWV0ICAgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB0b3RhbEl0ZW1zICAgICAgICAgICAgICAgIDogbnVsbFxuXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNyZWF0ZWQoKSB7XG4gICAgICAgICAgICB0aGlzLnNldHRpbmdzWyAnZGVmYXVsdC1sYW5ndWFnZS1uYW1lJyBdID0gdGhpcy5sYW5ndWFnZU5hbWVzWyB0aGlzLnNldHRpbmdzWyAnZGVmYXVsdC1sYW5ndWFnZScgXSBdXG5cbiAgICAgICAgICAgIHRoaXMuY3VycmVudExhbmd1YWdlID0gdGhpcy5zZXR0aW5nc1sgJ2RlZmF1bHQtbGFuZ3VhZ2UnIF1cblxuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggJ3RycF90cmlnZ2VyX3BlcmZvcm1fYWN0aW9uX2V2ZW50JywgdGhpcy5lZGl0U3RyaW5nIClcbiAgICAgICAgfSxcbiAgICAgICAgbW91bnRlZCgpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0U3RyaW5ncyggdGhpcy4kcm91dGUucXVlcnkgKVxuXG4gICAgICAgICAgICB0aGlzLmFkZEtleWJvYXJkU2hvcnRjdXRzTGlzdGVuZXIoKVxuICAgICAgICAgICAgbGV0IHNlbGYgPSB0aGlzXG5cbiAgICAgICAgICAgIC8vIHJlc2l6ZSBzaWRlYmFyIGFuZCBjb25zZXF1ZW50bHkgdGhlIGlmcmFtZVxuICAgICAgICAgICAgbGV0IHByZXZpZXdDb250YWluZXIgPSBqUXVlcnkoICcjdHJwLXByZXZpZXcnIClcbiAgICAgICAgICAgIGxldCB0b3RhbF93aWR0aCAgICAgID0galF1ZXJ5KCB3aW5kb3cgKS53aWR0aCgpXG4gICAgICAgICAgICBqUXVlcnkoICcjdHJwLWNvbnRyb2xzJyApLnJlc2l6YWJsZSgge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCAgICA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpZXdDb250YWluZXIudG9nZ2xlKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcCAgICAgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aWV3Q29udGFpbmVyLnRvZ2dsZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXMgIDogJ2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aCA6IDMyNyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGggOiB0b3RhbF93aWR0aCAtIDIwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSApLmJpbmQoIFwicmVzaXplXCIsIHRoaXMucmVzaXplSWZyYW1lIClcblxuICAgICAgICAgICAgLy8gcmVzaXplIGlmcmFtZSB3aGVuIHJlc2l6aW5nIHdpbmRvd1xuICAgICAgICAgICAgalF1ZXJ5KCB3aW5kb3cgKS5yZXNpemUoIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzZWxmLnJlc2l6ZUlmcmFtZSgpXG4gICAgICAgICAgICB9IClcbiAgICAgICAgfSxcbiAgICAgICAgd2F0Y2ggICAgICA6IHtcbiAgICAgICAgICAgICRyb3V0ZSggdG8sIGZyb20gKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRTdHJpbmdzKCB0by5xdWVyeSApXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2VsZWN0ZWRTdHJpbmcgOiBmdW5jdGlvbiAoIG5ld1N0cmluZywgb2xkU3RyaW5nICkge1xuICAgICAgICAgICAgICAgIGlmICggIXRoaXMuaGFzVW5zYXZlZENoYW5nZXMoKSApe1xuICAgICAgICAgICAgICAgICAgICBpZiAoIHRoaXMuc2VsZWN0ZWRTdHJpbmcgPT09IG51bGwgKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleGVzQXJyYXkgPSBbIF1cbiAgICAgICAgICAgICAgICAgICAgfWVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEluZGV4ZXNBcnJheSA9IFsgdGhpcy5zZWxlY3RlZFN0cmluZyBdXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGljdGlvbmFyeSA6IGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgaWYgKCAhdGhpcy5oYXNVbnNhdmVkQ2hhbmdlcygpICl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTdHJpbmcgPSBudWxsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleGVzQXJyYXkgPSBbIF1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNvbXB1dGVkICAgOiB7XG4gICAgICAgICAgICBjbG9zZVVSTCA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbGVhblVSTCggdGhpcy5jdXJyZW50VVJMIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWV0aG9kcyAgICA6IHtcbiAgICAgICAgICAgIGdldFN0cmluZ3MoIHF1ZXJ5ICkge1xuICAgICAgICAgICAgICAgIGlmICggIXRoaXMuJHJvdXRlLm1hdGNoZWRbIDAgXS5wcm9wcy5kZWZhdWx0LnRyYW5zbGF0aW9uVGFiICl7XG4gICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCBzZWxmICAgICAgICAgICAgPSB0aGlzXG4gICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRUYWIgICAgICA9IHRoaXMuJHJvdXRlLm1hdGNoZWRbIDAgXS5wcm9wcy5kZWZhdWx0LmN1cnJlbnRUYWJcbiAgICAgICAgICAgICAgICBsZXQgdHJhbnNsYXRpb25UeXBlID0gdGhpcy4kcm91dGUubWF0Y2hlZFsgMCBdLnByb3BzLmRlZmF1bHQudHJhbnNsYXRpb25UeXBlXG5cbiAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IG5ldyBGb3JtRGF0YSgpXG4gICAgICAgICAgICAgICAgZGF0YS5hcHBlbmQoICdhY3Rpb24nLCAndHJwX3N0cmluZ190cmFuc2xhdGlvbl9nZXRfc3RyaW5nc18nICsgdHJhbnNsYXRpb25UeXBlIClcbiAgICAgICAgICAgICAgICBkYXRhLmFwcGVuZCggJ3F1ZXJ5JywgSlNPTi5zdHJpbmdpZnkoIHF1ZXJ5ICkgKVxuICAgICAgICAgICAgICAgIGRhdGEuYXBwZW5kKCAnc2VjdXJpdHknLCBjdXJyZW50VGFiWyAnbm9uY2VzJyBdWyAnZ2V0X3N0cmluZ3MnIF0gKVxuXG4gICAgICAgICAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoIG5ldyBFdmVudCggJ3RycF90cmlnZ2VyX3Nob3dfbG9hZGluZ190YWJsZV9ldmVudCcgKSApXG5cbiAgICAgICAgICAgICAgICBheGlvcy5wb3N0KCB0aGlzLmFqYXhVcmwsIGRhdGEgKVxuICAgICAgICAgICAgICAgICAgICAgLnRoZW4oIGZ1bmN0aW9uICggcmVzcG9uc2UgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoIG5ldyBFdmVudCggJ3RycF90cmlnZ2VyX2hpZGVfbG9hZGluZ190YWJsZV9ldmVudCcgKSApXG4gICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCByZXNwb25zZSAhPSBudWxsICl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub25TY3JlZW5MYW5ndWFnZSA9IChxdWVyeS5sYW5ndWFnZSAmJiB1dGlscy5hcnJheUNvbnRhaW5zSXRlbSggc2VsZi5zZXR0aW5nc1sgJ3RyYW5zbGF0aW9uLWxhbmd1YWdlcycgXSwgcXVlcnkubGFuZ3VhZ2UgKSAmJiBxdWVyeS5sYW5ndWFnZSAhPT0gJ3RycC1kZWZhdWx0JykgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnkubGFuZ3VhZ2UgOiAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRMYW5ndWFnZSAgPSAocXVlcnkubGFuZ3VhZ2UgJiYgdXRpbHMuYXJyYXlDb250YWluc0l0ZW0oIHNlbGYuc2V0dGluZ3NbICd0cmFuc2xhdGlvbi1sYW5ndWFnZXMnIF0sIHF1ZXJ5Lmxhbmd1YWdlICkgJiYgcXVlcnkubGFuZ3VhZ2UgIT09ICd0cnAtZGVmYXVsdCcpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5Lmxhbmd1YWdlIDogc2VsZi5zZXR0aW5nc1sgJ2RlZmF1bHQtbGFuZ3VhZ2UnIF1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJlc3BvbnNlLmRhdGEuZGljdGlvbmFyeSApe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5ld0RpY3Rpb25hcnkgPSByZXNwb25zZS5kYXRhLmRpY3Rpb25hcnlcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzZWxmLmhhc1Vuc2F2ZWRDaGFuZ2VzKCkgKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb3B5IHRoZSB1bnNhdmVkIHN0cmluZyBmcm9tIHRoZSBjdXJyZW50IGRpY3Rpb25hcnkgdG8gdGhlIG5ldyBkaWN0aW9uYXJ5IHRvIGFsbG93IHVzZXIgdG8gZGlzY2FyZCBvciBzYXZlIGNoYW5nZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmV3U2VsZWN0ZWRJbmRleGVzQXJyYXkgPSBbXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWRJbmRleGVzQXJyYXkuZm9yRWFjaCggZnVuY3Rpb24oIGl0ZW0gKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGljdGlvbmFyeVsgaXRlbSBdLnVuc2F2ZWRDaGFuZ2VzID0gJ3llcydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3U2VsZWN0ZWRJbmRleGVzQXJyYXkucHVzaCggbmV3RGljdGlvbmFyeS5wdXNoKCBzZWxmLmRpY3Rpb25hcnlbaXRlbV0gKSAtIDEgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZEluZGV4ZXNBcnJheSA9IG5ld1NlbGVjdGVkSW5kZXhlc0FycmF5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZFN0cmluZyA9IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kaWN0aW9uYXJ5ID0gbmV3RGljdGlvbmFyeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmVzcG9uc2UuZGF0YS50b3RhbEl0ZW1zICl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRvdGFsSXRlbXMgPSByZXNwb25zZS5kYXRhLnRvdGFsSXRlbXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgIH0gKVxuICAgICAgICAgICAgICAgICAgICAgLmNhdGNoKCBmdW5jdGlvbiAoIGVycm9yICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KCBuZXcgRXZlbnQoICd0cnBfdHJpZ2dlcl9oaWRlX2xvYWRpbmdfdGFibGVfZXZlbnQnICkgKVxuICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGljdGlvbmFyeSA9IHt9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyggZXJyb3IgKVxuICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZWxvYWQgPSBjb25maXJtKCBzZWxmLnN0RWRpdG9yU3RyaW5ncy5yZXF1ZXN0X2Vycm9yIClcbiAgICAgICAgICAgICAgICAgICAgICAgICBpZiggcmVsb2FkID09PSBmYWxzZSApe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgfSApXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZWRpdFN0cmluZyggZGF0YSApIHtcbiAgICAgICAgICAgICAgICBpZiAoIGRhdGEuZGV0YWlsLmFjdGlvbiA9PT0gJ2VkaXQnICl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTdHJpbmcgPSBkYXRhLmRldGFpbC5zdHJpbmdJbmRleFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGVhblVSTCggdXJsICkge1xuICAgICAgICAgICAgICAgIC8vbWFrZSByZW1vdmVVcmxQYXJhbWV0ZXIgcmVjdXJzaXZlIGFuZCBvbmx5IGNhbGwgaXQgb25jZSB3aXRoIGFsbCB0aGUgcGFyYW1ldGVycyB0aGF0XG4gICAgICAgICAgICAgICAgLy9uZWVkIHRvIHN0cmlwcGVkID9cbiAgICAgICAgICAgICAgICB1cmwgPSB1dGlscy5yZW1vdmVVcmxQYXJhbWV0ZXIoIHVybCwgJ2xhbmcnIClcbiAgICAgICAgICAgICAgICB1cmwgPSB1dGlscy5yZW1vdmVVcmxQYXJhbWV0ZXIoIHVybCwgJ3RycC12aWV3LWFzJyApXG4gICAgICAgICAgICAgICAgdXJsID0gdXRpbHMucmVtb3ZlVXJsUGFyYW1ldGVyKCB1cmwsICd0cnAtdmlldy1hcy1ub25jZScgKVxuICAgICAgICAgICAgICAgIHVybCA9IHV0aWxzLnJlbW92ZVVybFBhcmFtZXRlciggdXJsLCAndHJwLWVkaXQtdHJhbnNsYXRpb24nIClcbiAgICAgICAgICAgICAgICB1cmwgPSB1dGlscy5yZW1vdmVVcmxQYXJhbWV0ZXIoIHVybCwgJ3RycC1zdHJpbmctdHJhbnNsYXRpb24nIClcblxuICAgICAgICAgICAgICAgIHJldHVybiB1cmxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvKmlGcmFtZUxvYWRlZCgpe1xuICAgICAgICAgICAgICAgIGxldCBzZWxmID0gdGhpc1xuICAgICAgICAgICAgICAgIGxldCBpZnJhbWVFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3RycC1wcmV2aWV3LWlmcmFtZScpXG5cbiAgICAgICAgICAgICAgICB0aGlzLmlmcmFtZSA9IGlmcmFtZUVsZW1lbnQuY29udGVudERvY3VtZW50IHx8IGlmcmFtZUVsZW1lbnQuY29udGVudFdpbmRvdy5kb2N1bWVudFxuXG4gICAgICAgICAgICAgICAgLy9zeW5jIGlGcmFtZSBVUkwgd2l0aCBwYXJlbnRcbiAgICAgICAgICAgICAgICBpZiAoIHRoaXMuY3VycmVudFVSTCAhPSB0aGlzLmlmcmFtZS5VUkwgKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRVUkwgPSB0aGlzLmlmcmFtZS5VUkxcblxuICAgICAgICAgICAgICAgIC8vaGlkZSBpRnJhbWUgbG9hZGVyXG4gICAgICAgICAgICAgICAgdGhpcy5pZnJhbWVMb2FkZXIoICdoaWRlJyApXG5cbiAgICAgICAgICAgICAgICBzZWxmLmRldGVjdGVkU2VsZWN0b3JBbmRJZCA9IFtdXG4gICAgICAgICAgICAgICAgc2VsZi5kaWN0aW9uYXJ5ICAgICAgICAgICAgPSBbXVxuICAgICAgICAgICAgICAgIHRoaXMuc2NhbklmcmFtZUZvclN0cmluZ3MoKVxuXG4gICAgICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoICd0cnBfaWZyYW1lX3BhZ2VfdXBkYXRlZCcsIHRoaXMuc2NhbklmcmFtZUZvclN0cmluZ3MgKVxuXG4gICAgICAgICAgICAgICAgLy9ldmVudCB0aGF0IGlzIGZpcmVkIHdoZW4gdGhlIGlGcmFtZSBpcyBuYXZpZ2F0ZWRcbiAgICAgICAgICAgICAgICBpZnJhbWVFbGVtZW50LmNvbnRlbnRXaW5kb3cub25iZWZvcmV1bmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5pZnJhbWVMb2FkZXIoICdzaG93JyApXG5cbiAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZFN0cmluZyA9IG51bGxcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZEluZGV4ZXNBcnJheSA9IFtdXG4gICAgICAgICAgICAgICAgICAgIHNlbGYudHJhbnNsYXRpb25Ob3RMb2FkZWRZZXQgPSBmYWxzZVxuXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuc3RyaW5nc0Ryb3Bkb3duTG9hZGluZygpXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9LCovXG4gICAgICAgICAgICBoYXNVbnNhdmVkQ2hhbmdlcygpIHtcbiAgICAgICAgICAgICAgICBsZXQgdW5zYXZlZENoYW5nZXMgPSBmYWxzZVxuICAgICAgICAgICAgICAgIGxldCBzZWxmICAgICAgICAgICA9IHRoaXNcbiAgICAgICAgICAgICAgICBpZiAoIHRoaXMuc2VsZWN0ZWRJbmRleGVzQXJyYXkubGVuZ3RoID4gMCApe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXhlc0FycmF5LmZvckVhY2goIGZ1bmN0aW9uICggc2VsZWN0ZWRJbmRleCApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2V0dGluZ3NbICd0cmFuc2xhdGlvbi1sYW5ndWFnZXMnIF0uZm9yRWFjaCggZnVuY3Rpb24gKCBsYW5ndWFnZUNvZGUgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzZWxmLmRpY3Rpb25hcnlbIHNlbGVjdGVkSW5kZXggXSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRpY3Rpb25hcnlbIHNlbGVjdGVkSW5kZXggXS50cmFuc2xhdGlvbnNBcnJheVsgbGFuZ3VhZ2VDb2RlIF0gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuZGljdGlvbmFyeVsgc2VsZWN0ZWRJbmRleCBdLnRyYW5zbGF0aW9uc0FycmF5WyBsYW5ndWFnZUNvZGUgXS50cmFuc2xhdGVkICE9PSBzZWxmLmRpY3Rpb25hcnlbIHNlbGVjdGVkSW5kZXggXS50cmFuc2xhdGlvbnNBcnJheVsgbGFuZ3VhZ2VDb2RlIF0uZWRpdGVkVHJhbnNsYXRpb24pICl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2F2ZWRDaGFuZ2VzID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gKVxuICAgICAgICAgICAgICAgICAgICB9IClcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIHVuc2F2ZWRDaGFuZ2VzID09PSBmYWxzZSApe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXhlc0FycmF5LmZvckVhY2goIGZ1bmN0aW9uICggc2VsZWN0ZWRJbmRleCApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggc2VsZi5kaWN0aW9uYXJ5Lmhhc093blByb3BlcnR5KHNlbGVjdGVkSW5kZXgpICYmIHNlbGYuZGljdGlvbmFyeVsgc2VsZWN0ZWRJbmRleCBdLnVuc2F2ZWRDaGFuZ2VzICYmIHNlbGYuZGljdGlvbmFyeVsgc2VsZWN0ZWRJbmRleCBdLnVuc2F2ZWRDaGFuZ2VzID09PSAneWVzJyl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kaWN0aW9uYXJ5WyBzZWxlY3RlZEluZGV4IF0udW5zYXZlZENoYW5nZXMgPSAnbm8nXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93Q2hhbmdlc1Vuc2F2ZWRNZXNzYWdlID0gdW5zYXZlZENoYW5nZXNcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5zYXZlZENoYW5nZXNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpZnJhbWVMb2FkZXIoIHN0YXR1cyApIHtcbiAgICAgICAgICAgICAgICBsZXQgbG9hZGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICd0cnAtcHJldmlldy1sb2FkZXInIClcblxuICAgICAgICAgICAgICAgIGlmICggc3RhdHVzID09ICdzaG93JyApXG4gICAgICAgICAgICAgICAgICAgIGxvYWRlci5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIHN0YXR1cyA9PSAnaGlkZScgKVxuICAgICAgICAgICAgICAgICAgICBsb2FkZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByZXZpb3VzU3RyaW5nKCkge1xuICAgICAgICAgICAgICAgIC8qIGxldCBjdXJyZW50VmFsdWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndHJwLXN0cmluZy1jYXRlZ29yaWVzJykudmFsdWVcblxuICAgICAgICAgICAgICAgICBsZXQgbmV3VmFsdWUgPSArY3VycmVudFZhbHVlIC0gMVxuXG4gICAgICAgICAgICAgICAgIHdoaWxlKCBuZXdWYWx1ZSA+PSAwICYmIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJyN0cnAtc3RyaW5nLWNhdGVnb3JpZXMgb3B0aW9uW3ZhbHVlPVwiJyArIG5ld1ZhbHVlICsgJ1wiXScpLmxlbmd0aCA9PT0gMCApe1xuICAgICAgICAgICAgICAgICAgICAgbmV3VmFsdWUtLTtcbiAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgIGlmKCBuZXdWYWx1ZSA8IDAgKVxuICAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG5cbiAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFN0cmluZyA9IG5ld1ZhbHVlLnRvU3RyaW5nKCkqL1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5leHRTdHJpbmcoKSB7XG4gICAgICAgICAgICAgICAgLypsZXQgY3VycmVudFZhbHVlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RycC1zdHJpbmctY2F0ZWdvcmllcycpLnZhbHVlLCBuZXdWYWx1ZSA9IDBcblxuICAgICAgICAgICAgICAgIGlmKCBjdXJyZW50VmFsdWUgIT0gJycgKVxuICAgICAgICAgICAgICAgICAgICBuZXdWYWx1ZSA9ICtjdXJyZW50VmFsdWUgKyAxXG5cbiAgICAgICAgICAgICAgICB3aGlsZSggbmV3VmFsdWUgPCB0aGlzLmRpY3Rpb25hcnkubGVuZ3RoICYmIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJyN0cnAtc3RyaW5nLWNhdGVnb3JpZXMgb3B0aW9uW3ZhbHVlPVwiJyArIG5ld1ZhbHVlICsgJ1wiXScpLmxlbmd0aCA9PT0gMCApe1xuICAgICAgICAgICAgICAgICAgICBuZXdWYWx1ZSsrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICggbmV3VmFsdWUgPj0gdGhpcy5kaWN0aW9uYXJ5Lmxlbmd0aCApe1xuICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU3RyaW5nID0gbmV3VmFsdWUudG9TdHJpbmcoKSovXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWRkS2V5Ym9hcmRTaG9ydGN1dHNMaXN0ZW5lcigpIHtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCBcImtleWRvd25cIiwgZnVuY3Rpb24gKCBlICkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoICh3aW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtLm1hdGNoKCBcIk1hY1wiICkgPyBlLm1ldGFLZXkgOiBlLmN0cmxLZXkpICYmIGUuYWx0S2V5ICl7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDVFJMICsgQUxUICsgcmlnaHQgYXJyb3dcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZS5rZXlDb2RlID09PSAzOSApe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KCBuZXcgRXZlbnQoICd0cnBfdHJpZ2dlcl9uZXh0X3N0cmluZ19ldmVudCcgKSApXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENUUkwgKyBBTFQgKyBsZWZ0IGFycm93XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlLmtleUNvZGUgPT09IDM3ICl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudCggbmV3IEV2ZW50KCAndHJwX3RyaWdnZXJfcHJldmlvdXNfc3RyaW5nX2V2ZW50JyApIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCBmYWxzZSApXG5cbiAgICAgICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggJ3RycF90cmlnZ2VyX25leHRfc3RyaW5nX2V2ZW50JywgdGhpcy5uZXh0U3RyaW5nIClcbiAgICAgICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggJ3RycF90cmlnZ2VyX3ByZXZpb3VzX3N0cmluZ19ldmVudCcsIHRoaXMucHJldmlvdXNTdHJpbmcgKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc2l6ZUlmcmFtZSggZXZlbnQsIHVpICkge1xuICAgICAgICAgICAgICAgIGxldCB0b3RhbF93aWR0aCA9IGpRdWVyeSggd2luZG93ICkud2lkdGgoKVxuICAgICAgICAgICAgICAgIGxldCB3aWR0aCAgICAgICA9IGpRdWVyeSggJyN0cnAtY29udHJvbHMnICkud2lkdGgoKVxuXG4gICAgICAgICAgICAgICAgbGV0IHByZXZpZXdDb250YWluZXIgPSBqUXVlcnkoICcjdHJwLXByZXZpZXcnIClcbiAgICAgICAgICAgICAgICBwcmV2aWV3Q29udGFpbmVyLmNzcyggJ2xlZnQnLCAod2lkdGggLSAzNDgpIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbjwvc2NyaXB0PlxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./assets/src/js/string-translation.vue?vue&type=script&lang=js&\n");
|
1091 |
|
1092 |
/***/ }),
|
1093 |
|
class-translate-press.php
CHANGED
@@ -56,7 +56,7 @@ class TRP_Translate_Press{
|
|
56 |
define( 'TRP_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
|
57 |
define( 'TRP_PLUGIN_BASE', plugin_basename( __DIR__ . '/index.php' ) );
|
58 |
define( 'TRP_PLUGIN_SLUG', 'translatepress-multilingual' );
|
59 |
-
define( 'TRP_PLUGIN_VERSION', '1.7.
|
60 |
|
61 |
wp_cache_add_non_persistent_groups(array('trp'));
|
62 |
|
56 |
define( 'TRP_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
|
57 |
define( 'TRP_PLUGIN_BASE', plugin_basename( __DIR__ . '/index.php' ) );
|
58 |
define( 'TRP_PLUGIN_SLUG', 'translatepress-multilingual' );
|
59 |
+
define( 'TRP_PLUGIN_VERSION', '1.7.3' );
|
60 |
|
61 |
wp_cache_add_non_persistent_groups(array('trp'));
|
62 |
|
includes/class-translation-manager.php
CHANGED
@@ -296,7 +296,7 @@ class TRP_Translation_Manager {
|
|
296 |
}
|
297 |
|
298 |
$editors_navigation = $this->get_editors_navigation();
|
299 |
-
$string_types = array( 'regular', 'gettext' );
|
300 |
|
301 |
|
302 |
$trp_editor_data = array(
|
296 |
}
|
297 |
|
298 |
$editors_navigation = $this->get_editors_navigation();
|
299 |
+
$string_types = array( 'regular', 'gettext', 'postslug' );
|
300 |
|
301 |
|
302 |
$trp_editor_data = array(
|
includes/class-url-converter.php
CHANGED
@@ -314,7 +314,12 @@ class TRP_Url_Converter {
|
|
314 |
|
315 |
}else if( isset( $trp_current_url_term_slug ) && isset($trp_current_url_taxonomy) ) { // check here if it is a term link
|
316 |
$TRP_LANGUAGE = $language;
|
317 |
-
$
|
|
|
|
|
|
|
|
|
|
|
318 |
$TRP_LANGUAGE = $trp_language_copy;
|
319 |
}else {
|
320 |
// we're just adding the new language to the url
|
314 |
|
315 |
}else if( isset( $trp_current_url_term_slug ) && isset($trp_current_url_taxonomy) ) { // check here if it is a term link
|
316 |
$TRP_LANGUAGE = $language;
|
317 |
+
$check_term_link = get_term_link( $trp_current_url_term_slug, $trp_current_url_taxonomy);
|
318 |
+
if( !is_wp_error($check_term_link) )
|
319 |
+
$new_url = $check_term_link;
|
320 |
+
else
|
321 |
+
$new_url = $url;
|
322 |
+
|
323 |
$TRP_LANGUAGE = $trp_language_copy;
|
324 |
}else {
|
325 |
// we're just adding the new language to the url
|
includes/compatibility-functions.php
CHANGED
@@ -577,3 +577,26 @@ function trp_strip_gettext_from_get_the_date($the_date, $d, $post){
|
|
577 |
|
578 |
return $the_date;
|
579 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
577 |
|
578 |
return $the_date;
|
579 |
}
|
580 |
+
|
581 |
+
|
582 |
+
/**
|
583 |
+
* Compatibility with Affiliate Theme
|
584 |
+
* It's adding parameters found in the filter forms automatically, braking the query.
|
585 |
+
* TranslatePress adds the trp-form-language for other reasons. So we need to remove it in this case.
|
586 |
+
* https://affiliatetheme.io
|
587 |
+
*
|
588 |
+
*/
|
589 |
+
add_filter('at_set_product_filter_query', 'trp_remove_lang_param_from_query');
|
590 |
+
function trp_remove_lang_param_from_query($args){
|
591 |
+
|
592 |
+
if ( isset( $args['meta_query'] ) && is_array( $args['meta_query']) ){
|
593 |
+
foreach($args['meta_query'] as $key => $value){
|
594 |
+
if ($value['key'] == 'trp-form-language'){
|
595 |
+
unset( $args['meta_query'][$key] );
|
596 |
+
}
|
597 |
+
}
|
598 |
+
$args['meta_query'] = array_values($args['meta_query']);
|
599 |
+
}
|
600 |
+
|
601 |
+
return $args;
|
602 |
+
}
|
includes/string-translation/class-string-translation.php
CHANGED
@@ -216,6 +216,7 @@ class TRP_String_Translation {
|
|
216 |
'see_less' => __( 'See Less', 'translatepress-multilingual' ),
|
217 |
'apply' => __( 'Apply', 'translatepress-multilingual' ),
|
218 |
'no_strings_match_query' => __( 'No strings match your query.', 'translatepress-multilingual' ),
|
|
|
219 |
|
220 |
'select_all' => __( 'Select All', 'translatepress-multilingual' ),
|
221 |
'select_visible' => __( 'Select Visible', 'translatepress-multilingual' ),
|
@@ -271,7 +272,9 @@ class TRP_String_Translation {
|
|
271 |
|
272 |
public function register_string_types( $registered_string_types ) {
|
273 |
foreach ( $this->string_types as $string_type => $value ) {
|
274 |
-
$registered_string_types
|
|
|
|
|
275 |
}
|
276 |
|
277 |
return $registered_string_types;
|
216 |
'see_less' => __( 'See Less', 'translatepress-multilingual' ),
|
217 |
'apply' => __( 'Apply', 'translatepress-multilingual' ),
|
218 |
'no_strings_match_query' => __( 'No strings match your query.', 'translatepress-multilingual' ),
|
219 |
+
'request_error' => __( 'An error occurred while loading results. Most likely you were logged out. Reload page?', 'translatepress-multilingual' ),
|
220 |
|
221 |
'select_all' => __( 'Select All', 'translatepress-multilingual' ),
|
222 |
'select_visible' => __( 'Select Visible', 'translatepress-multilingual' ),
|
272 |
|
273 |
public function register_string_types( $registered_string_types ) {
|
274 |
foreach ( $this->string_types as $string_type => $value ) {
|
275 |
+
if ( !in_array( $string_type, $registered_string_types ) ) {
|
276 |
+
$registered_string_types[] = $string_type;
|
277 |
+
}
|
278 |
}
|
279 |
|
280 |
return $registered_string_types;
|
index.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
Plugin Name: TranslatePress - Multilingual
|
4 |
Plugin URI: https://translatepress.com/
|
5 |
Description: Experience a better way of translating your WordPress site using a visual front-end translation editor, with full support for WooCommerce and site builders.
|
6 |
-
Version: 1.7.
|
7 |
Author: Cozmoslabs, Razvan Mocanu, Madalin Ungureanu, Cristophor Hurduban
|
8 |
Author URI: https://cozmoslabs.com/
|
9 |
Text Domain: translatepress-multilingual
|
3 |
Plugin Name: TranslatePress - Multilingual
|
4 |
Plugin URI: https://translatepress.com/
|
5 |
Description: Experience a better way of translating your WordPress site using a visual front-end translation editor, with full support for WooCommerce and site builders.
|
6 |
+
Version: 1.7.3
|
7 |
Author: Cozmoslabs, Razvan Mocanu, Madalin Ungureanu, Cristophor Hurduban
|
8 |
Author URI: https://cozmoslabs.com/
|
9 |
Text Domain: translatepress-multilingual
|
languages/translatepress-multilingual.catalog.php
CHANGED
@@ -322,6 +322,7 @@
|
|
322 |
<?php __("See Less", "translatepress-multilingual"); ?>
|
323 |
<?php __("Apply", "translatepress-multilingual"); ?>
|
324 |
<?php __("No strings match your query.", "translatepress-multilingual"); ?>
|
|
|
325 |
<?php __("Select All", "translatepress-multilingual"); ?>
|
326 |
<?php __("Select Visible", "translatepress-multilingual"); ?>
|
327 |
<?php __("You are about to perform this action on all the strings matching your filter, not just the visibly checked. To perform the action only to the visible strings click \"Select Visible\" from the table header dropdown.", "translatepress-multilingual"); ?>
|
322 |
<?php __("See Less", "translatepress-multilingual"); ?>
|
323 |
<?php __("Apply", "translatepress-multilingual"); ?>
|
324 |
<?php __("No strings match your query.", "translatepress-multilingual"); ?>
|
325 |
+
<?php __("An error occurred while loading results. Most likely you were logged out. Reload page?", "translatepress-multilingual"); ?>
|
326 |
<?php __("Select All", "translatepress-multilingual"); ?>
|
327 |
<?php __("Select Visible", "translatepress-multilingual"); ?>
|
328 |
<?php __("You are about to perform this action on all the strings matching your filter, not just the visibly checked. To perform the action only to the visible strings click \"Select Visible\" from the table header dropdown.", "translatepress-multilingual"); ?>
|
languages/translatepress-multilingual.pot
CHANGED
@@ -1306,76 +1306,80 @@ msgstr ""
|
|
1306 |
msgid "No strings match your query."
|
1307 |
msgstr ""
|
1308 |
|
1309 |
-
#: ../translatepress/includes/string-translation/class-string-translation.php:
|
1310 |
-
msgid "
|
1311 |
msgstr ""
|
1312 |
|
1313 |
#: ../translatepress/includes/string-translation/class-string-translation.php:221
|
1314 |
-
msgid "Select
|
1315 |
msgstr ""
|
1316 |
|
1317 |
#: ../translatepress/includes/string-translation/class-string-translation.php:222
|
1318 |
-
msgid "
|
1319 |
msgstr ""
|
1320 |
|
1321 |
#: ../translatepress/includes/string-translation/class-string-translation.php:223
|
1322 |
-
msgid "You are about to perform this action
|
1323 |
msgstr ""
|
1324 |
|
1325 |
#: ../translatepress/includes/string-translation/class-string-translation.php:224
|
1326 |
-
msgid "To
|
1327 |
msgstr ""
|
1328 |
|
1329 |
#: ../translatepress/includes/string-translation/class-string-translation.php:225
|
|
|
|
|
|
|
|
|
1330 |
msgid "The word typed was incorrect. Action was cancelled."
|
1331 |
msgstr ""
|
1332 |
|
1333 |
-
#: ../translatepress/includes/string-translation/class-string-translation.php:
|
1334 |
msgctxt "Untranslated in this language"
|
1335 |
msgid "in"
|
1336 |
msgstr ""
|
1337 |
|
1338 |
-
#: ../translatepress/includes/string-translation/class-string-translation.php:
|
1339 |
msgid "Navigate to next page"
|
1340 |
msgstr ""
|
1341 |
|
1342 |
-
#: ../translatepress/includes/string-translation/class-string-translation.php:
|
1343 |
msgid "Navigate to previous page"
|
1344 |
msgstr ""
|
1345 |
|
1346 |
-
#: ../translatepress/includes/string-translation/class-string-translation.php:
|
1347 |
msgid "Navigate to first page"
|
1348 |
msgstr ""
|
1349 |
|
1350 |
-
#: ../translatepress/includes/string-translation/class-string-translation.php:
|
1351 |
msgid "Navigate to last page"
|
1352 |
msgstr ""
|
1353 |
|
1354 |
-
#: ../translatepress/includes/string-translation/class-string-translation.php:
|
1355 |
msgid "Type a page number to navigate to"
|
1356 |
msgstr ""
|
1357 |
|
1358 |
-
#: ../translatepress/includes/string-translation/class-string-translation.php:
|
1359 |
msgid "Incorrect page number. Type a page number between 1 and total number of pages"
|
1360 |
msgstr ""
|
1361 |
|
1362 |
-
#: ../translatepress/includes/string-translation/class-string-translation.php:
|
1363 |
msgid "Search original strings containing typed keywords while also matching selected filters"
|
1364 |
msgstr ""
|
1365 |
|
1366 |
-
#: ../translatepress/includes/string-translation/class-string-translation.php:
|
1367 |
msgid "Filter strings according to selected translation status, filters and keywords and selected filters"
|
1368 |
msgstr ""
|
1369 |
|
1370 |
-
#: ../translatepress/includes/string-translation/class-string-translation.php:
|
1371 |
msgid "See options for selecting all strings"
|
1372 |
msgstr ""
|
1373 |
|
1374 |
-
#: ../translatepress/includes/string-translation/class-string-translation.php:
|
1375 |
msgid "Click to sort strings by this column"
|
1376 |
msgstr ""
|
1377 |
|
1378 |
-
#: ../translatepress/includes/string-translation/class-string-translation.php:
|
1379 |
msgid "Language in which the translation status filter applies. Leave unselected for the translation status to apply to ANY language"
|
1380 |
msgstr ""
|
1381 |
|
1306 |
msgid "No strings match your query."
|
1307 |
msgstr ""
|
1308 |
|
1309 |
+
#: ../translatepress/includes/string-translation/class-string-translation.php:219
|
1310 |
+
msgid "An error occurred while loading results. Most likely you were logged out. Reload page?"
|
1311 |
msgstr ""
|
1312 |
|
1313 |
#: ../translatepress/includes/string-translation/class-string-translation.php:221
|
1314 |
+
msgid "Select All"
|
1315 |
msgstr ""
|
1316 |
|
1317 |
#: ../translatepress/includes/string-translation/class-string-translation.php:222
|
1318 |
+
msgid "Select Visible"
|
1319 |
msgstr ""
|
1320 |
|
1321 |
#: ../translatepress/includes/string-translation/class-string-translation.php:223
|
1322 |
+
msgid "You are about to perform this action on all the strings matching your filter, not just the visibly checked. To perform the action only to the visible strings click \"Select Visible\" from the table header dropdown."
|
1323 |
msgstr ""
|
1324 |
|
1325 |
#: ../translatepress/includes/string-translation/class-string-translation.php:224
|
1326 |
+
msgid "You are about to perform this action only on the visible strings. To perform the action on all the strings matching the filter click \"Select All\" from the table header dropdown."
|
1327 |
msgstr ""
|
1328 |
|
1329 |
#: ../translatepress/includes/string-translation/class-string-translation.php:225
|
1330 |
+
msgid "To continue please type the word:"
|
1331 |
+
msgstr ""
|
1332 |
+
|
1333 |
+
#: ../translatepress/includes/string-translation/class-string-translation.php:226
|
1334 |
msgid "The word typed was incorrect. Action was cancelled."
|
1335 |
msgstr ""
|
1336 |
|
1337 |
+
#: ../translatepress/includes/string-translation/class-string-translation.php:228
|
1338 |
msgctxt "Untranslated in this language"
|
1339 |
msgid "in"
|
1340 |
msgstr ""
|
1341 |
|
1342 |
+
#: ../translatepress/includes/string-translation/class-string-translation.php:234
|
1343 |
msgid "Navigate to next page"
|
1344 |
msgstr ""
|
1345 |
|
1346 |
+
#: ../translatepress/includes/string-translation/class-string-translation.php:235
|
1347 |
msgid "Navigate to previous page"
|
1348 |
msgstr ""
|
1349 |
|
1350 |
+
#: ../translatepress/includes/string-translation/class-string-translation.php:236
|
1351 |
msgid "Navigate to first page"
|
1352 |
msgstr ""
|
1353 |
|
1354 |
+
#: ../translatepress/includes/string-translation/class-string-translation.php:237
|
1355 |
msgid "Navigate to last page"
|
1356 |
msgstr ""
|
1357 |
|
1358 |
+
#: ../translatepress/includes/string-translation/class-string-translation.php:238
|
1359 |
msgid "Type a page number to navigate to"
|
1360 |
msgstr ""
|
1361 |
|
1362 |
+
#: ../translatepress/includes/string-translation/class-string-translation.php:239
|
1363 |
msgid "Incorrect page number. Type a page number between 1 and total number of pages"
|
1364 |
msgstr ""
|
1365 |
|
1366 |
+
#: ../translatepress/includes/string-translation/class-string-translation.php:240
|
1367 |
msgid "Search original strings containing typed keywords while also matching selected filters"
|
1368 |
msgstr ""
|
1369 |
|
1370 |
+
#: ../translatepress/includes/string-translation/class-string-translation.php:241
|
1371 |
msgid "Filter strings according to selected translation status, filters and keywords and selected filters"
|
1372 |
msgstr ""
|
1373 |
|
1374 |
+
#: ../translatepress/includes/string-translation/class-string-translation.php:242
|
1375 |
msgid "See options for selecting all strings"
|
1376 |
msgstr ""
|
1377 |
|
1378 |
+
#: ../translatepress/includes/string-translation/class-string-translation.php:243
|
1379 |
msgid "Click to sort strings by this column"
|
1380 |
msgstr ""
|
1381 |
|
1382 |
+
#: ../translatepress/includes/string-translation/class-string-translation.php:244
|
1383 |
msgid "Language in which the translation status filter applies. Leave unselected for the translation status to apply to ANY language"
|
1384 |
msgstr ""
|
1385 |
|
readme.txt
CHANGED
@@ -5,7 +5,7 @@ Tags: translate, translation, multilingual, automatic translation, bilingual, fr
|
|
5 |
Requires at least: 3.1.0
|
6 |
Tested up to: 5.4.1
|
7 |
Requires PHP: 5.6.20
|
8 |
-
Stable tag: 1.7.
|
9 |
License: GPLv2 or later
|
10 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
11 |
|
@@ -138,6 +138,11 @@ For more information please check out our [documentation](https://translatepress
|
|
138 |
|
139 |
|
140 |
== Changelog ==
|
|
|
|
|
|
|
|
|
|
|
141 |
= 1.7.2 =
|
142 |
* Implemented mechanics to remove duplicate entries in the database
|
143 |
* Fixed issue with automatic translation time-outs on large pages
|
5 |
Requires at least: 3.1.0
|
6 |
Tested up to: 5.4.1
|
7 |
Requires PHP: 5.6.20
|
8 |
+
Stable tag: 1.7.3
|
9 |
License: GPLv2 or later
|
10 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
11 |
|
138 |
|
139 |
|
140 |
== Changelog ==
|
141 |
+
= 1.7.3 =
|
142 |
+
* Fixed an error when WooCommerce is active and you access a term link that does not exist
|
143 |
+
* Added compatibility with SEO Pack version 1.2.4 or older
|
144 |
+
* Added compatibility with Affiliate Theme filters
|
145 |
+
|
146 |
= 1.7.2 =
|
147 |
* Implemented mechanics to remove duplicate entries in the database
|
148 |
* Fixed issue with automatic translation time-outs on large pages
|