Cyr-To-Lat - Version trunk

Version Description

Download this release

Release Info

Developer mihdan
Plugin Icon 128x128 Cyr-To-Lat
Version trunk
Comparing to
See all releases

Code changes from version 5.2.0 to trunk

assets/js/converter/app.js CHANGED
@@ -1,2 +1,2 @@
1
  !function(t){var e={};function r(n){if(e[n])return e[n].exports;var o=e[n]={i:n,l:!1,exports:{}};return t[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=t,r.c=e,r.d=function(t,e,n){r.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.t=function(t,e){if(1&e&&(t=r(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)r.d(n,o,function(e){return t[e]}.bind(null,o));return n},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,"a",e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p="",r(r.s=0)}([function(t,e,r){r(1),t.exports=r(2)},function(t,e){var r="undefined"!=typeof self?self:this,n=function(){function t(){this.fetch=!1,this.DOMException=r.DOMException}return t.prototype=r,new t}();!function(t){!function(e){var r="URLSearchParams"in t,n="Symbol"in t&&"iterator"in Symbol,o="FileReader"in t&&"Blob"in t&&function(){try{return new Blob,!0}catch(t){return!1}}(),i="FormData"in t,s="ArrayBuffer"in t;if(s)var a=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],u=ArrayBuffer.isView||function(t){return t&&a.indexOf(Object.prototype.toString.call(t))>-1};function c(t){if("string"!=typeof t&&(t=String(t)),/[^a-z0-9\-#$%&'*+.^_`|~]/i.test(t))throw new TypeError("Invalid character in header field name");return t.toLowerCase()}function f(t){return"string"!=typeof t&&(t=String(t)),t}function h(t){var e={next:function(){var e=t.shift();return{done:void 0===e,value:e}}};return n&&(e[Symbol.iterator]=function(){return e}),e}function d(t){this.map={},t instanceof d?t.forEach((function(t,e){this.append(e,t)}),this):Array.isArray(t)?t.forEach((function(t){this.append(t[0],t[1])}),this):t&&Object.getOwnPropertyNames(t).forEach((function(e){this.append(e,t[e])}),this)}function l(t){if(t.bodyUsed)return Promise.reject(new TypeError("Already read"));t.bodyUsed=!0}function p(t){return new Promise((function(e,r){t.onload=function(){e(t.result)},t.onerror=function(){r(t.error)}}))}function y(t){var e=new FileReader,r=p(e);return e.readAsArrayBuffer(t),r}function b(t){if(t.slice)return t.slice(0);var e=new Uint8Array(t.byteLength);return e.set(new Uint8Array(t)),e.buffer}function m(){return this.bodyUsed=!1,this._initBody=function(t){var e;this._bodyInit=t,t?"string"==typeof t?this._bodyText=t:o&&Blob.prototype.isPrototypeOf(t)?this._bodyBlob=t:i&&FormData.prototype.isPrototypeOf(t)?this._bodyFormData=t:r&&URLSearchParams.prototype.isPrototypeOf(t)?this._bodyText=t.toString():s&&o&&((e=t)&&DataView.prototype.isPrototypeOf(e))?(this._bodyArrayBuffer=b(t.buffer),this._bodyInit=new Blob([this._bodyArrayBuffer])):s&&(ArrayBuffer.prototype.isPrototypeOf(t)||u(t))?this._bodyArrayBuffer=b(t):this._bodyText=t=Object.prototype.toString.call(t):this._bodyText="",this.headers.get("content-type")||("string"==typeof t?this.headers.set("content-type","text/plain;charset=UTF-8"):this._bodyBlob&&this._bodyBlob.type?this.headers.set("content-type",this._bodyBlob.type):r&&URLSearchParams.prototype.isPrototypeOf(t)&&this.headers.set("content-type","application/x-www-form-urlencoded;charset=UTF-8"))},o&&(this.blob=function(){var t=l(this);if(t)return t;if(this._bodyBlob)return Promise.resolve(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(new Blob([this._bodyArrayBuffer]));if(this._bodyFormData)throw new Error("could not read FormData body as blob");return Promise.resolve(new Blob([this._bodyText]))},this.arrayBuffer=function(){return this._bodyArrayBuffer?l(this)||Promise.resolve(this._bodyArrayBuffer):this.blob().then(y)}),this.text=function(){var t,e,r,n=l(this);if(n)return n;if(this._bodyBlob)return t=this._bodyBlob,e=new FileReader,r=p(e),e.readAsText(t),r;if(this._bodyArrayBuffer)return Promise.resolve(function(t){for(var e=new Uint8Array(t),r=new Array(e.length),n=0;n<e.length;n++)r[n]=String.fromCharCode(e[n]);return r.join("")}(this._bodyArrayBuffer));if(this._bodyFormData)throw new Error("could not read FormData body as text");return Promise.resolve(this._bodyText)},i&&(this.formData=function(){return this.text().then(O)}),this.json=function(){return this.text().then(JSON.parse)},this}d.prototype.append=function(t,e){t=c(t),e=f(e);var r=this.map[t];this.map[t]=r?r+", "+e:e},d.prototype.delete=function(t){delete this.map[c(t)]},d.prototype.get=function(t){return t=c(t),this.has(t)?this.map[t]:null},d.prototype.has=function(t){return this.map.hasOwnProperty(c(t))},d.prototype.set=function(t,e){this.map[c(t)]=f(e)},d.prototype.forEach=function(t,e){for(var r in this.map)this.map.hasOwnProperty(r)&&t.call(e,this.map[r],r,this)},d.prototype.keys=function(){var t=[];return this.forEach((function(e,r){t.push(r)})),h(t)},d.prototype.values=function(){var t=[];return this.forEach((function(e){t.push(e)})),h(t)},d.prototype.entries=function(){var t=[];return this.forEach((function(e,r){t.push([r,e])})),h(t)},n&&(d.prototype[Symbol.iterator]=d.prototype.entries);var E=["DELETE","GET","HEAD","OPTIONS","POST","PUT"];function v(t,e){var r,n,o=(e=e||{}).body;if(t instanceof v){if(t.bodyUsed)throw new TypeError("Already read");this.url=t.url,this.credentials=t.credentials,e.headers||(this.headers=new d(t.headers)),this.method=t.method,this.mode=t.mode,this.signal=t.signal,o||null==t._bodyInit||(o=t._bodyInit,t.bodyUsed=!0)}else this.url=String(t);if(this.credentials=e.credentials||this.credentials||"same-origin",!e.headers&&this.headers||(this.headers=new d(e.headers)),this.method=(r=e.method||this.method||"GET",n=r.toUpperCase(),E.indexOf(n)>-1?n:r),this.mode=e.mode||this.mode||null,this.signal=e.signal||this.signal,this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&o)throw new TypeError("Body not allowed for GET or HEAD requests");this._initBody(o)}function O(t){var e=new FormData;return t.trim().split("&").forEach((function(t){if(t){var r=t.split("="),n=r.shift().replace(/\+/g," "),o=r.join("=").replace(/\+/g," ");e.append(decodeURIComponent(n),decodeURIComponent(o))}})),e}function _(t,e){e||(e={}),this.type="default",this.status=void 0===e.status?200:e.status,this.ok=this.status>=200&&this.status<300,this.statusText="statusText"in e?e.statusText:"OK",this.headers=new d(e.headers),this.url=e.url||"",this._initBody(t)}v.prototype.clone=function(){return new v(this,{body:this._bodyInit})},m.call(v.prototype),m.call(_.prototype),_.prototype.clone=function(){return new _(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new d(this.headers),url:this.url})},_.error=function(){var t=new _(null,{status:0,statusText:""});return t.type="error",t};var w=[301,302,303,307,308];_.redirect=function(t,e){if(-1===w.indexOf(e))throw new RangeError("Invalid status code");return new _(null,{status:e,headers:{location:t}})},e.DOMException=t.DOMException;try{new e.DOMException}catch(t){e.DOMException=function(t,e){this.message=t,this.name=e;var r=Error(t);this.stack=r.stack},e.DOMException.prototype=Object.create(Error.prototype),e.DOMException.prototype.constructor=e.DOMException}function T(t,r){return new Promise((function(n,i){var s=new v(t,r);if(s.signal&&s.signal.aborted)return i(new e.DOMException("Aborted","AbortError"));var a=new XMLHttpRequest;function u(){a.abort()}a.onload=function(){var t,e,r={status:a.status,statusText:a.statusText,headers:(t=a.getAllResponseHeaders()||"",e=new d,t.replace(/\r?\n[\t ]+/g," ").split(/\r?\n/).forEach((function(t){var r=t.split(":"),n=r.shift().trim();if(n){var o=r.join(":").trim();e.append(n,o)}})),e)};r.url="responseURL"in a?a.responseURL:r.headers.get("X-Request-URL");var o="response"in a?a.response:a.responseText;n(new _(o,r))},a.onerror=function(){i(new TypeError("Network request failed"))},a.ontimeout=function(){i(new TypeError("Network request failed"))},a.onabort=function(){i(new e.DOMException("Aborted","AbortError"))},a.open(s.method,s.url,!0),"include"===s.credentials?a.withCredentials=!0:"omit"===s.credentials&&(a.withCredentials=!1),"responseType"in a&&o&&(a.responseType="blob"),s.headers.forEach((function(t,e){a.setRequestHeader(e,t)})),s.signal&&(s.signal.addEventListener("abort",u),a.onreadystatechange=function(){4===a.readyState&&s.signal.removeEventListener("abort",u)}),a.send(void 0===s._bodyInit?null:s._bodyInit)}))}T.polyfill=!0,t.fetch||(t.fetch=T,t.Headers=d,t.Request=v,t.Response=_),e.Headers=d,e.Request=v,e.Response=_,e.fetch=T,Object.defineProperty(e,"__esModule",{value:!0})}({})}(n),n.fetch.ponyfill=!0,delete n.fetch.polyfill;var o=n;(e=o.fetch).default=o.fetch,e.fetch=o.fetch,e.Headers=o.Headers,e.Request=o.Request,e.Response=o.Response,t.exports=e},function(t,e,r){"use strict";var n,o=r(3),i=(n=o)&&n.__esModule?n:{default:n};document.addEventListener("DOMContentLoaded",(function(){new i.default}))},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}();var o=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.CONVERT_FORM_SELECTOR="#ctl-convert-existing-slugs",this.CONVERT_BUTTON_SELECTOR="#ctl-convert-button",this.CONFIRM_POPUP_SELECTOR="#ctl-confirm-popup",this.CONFIRM_OK_SELECTOR="#ctl-confirm-ok",this.CONFIRM_CANCEL_SELECTOR="#ctl-confirm-cancel",this.confirmPopup=document.querySelector(this.CONFIRM_POPUP_SELECTOR),this.bindEvents()}return n(t,[{key:"bindEvents",value:function(){var t=this;document.querySelector(this.CONVERT_BUTTON_SELECTOR).onclick=function(e){return e.preventDefault(),t.confirmPopup.style.display="block",!1},this.confirmPopup.onclick=function(){t.hideConfirmPopup()},document.querySelector(this.CONFIRM_OK_SELECTOR).onclick=function(e){e.stopPropagation(),t.hideConfirmPopup(),document.querySelector(t.CONVERT_FORM_SELECTOR).submit()},document.querySelector(this.CONFIRM_CANCEL_SELECTOR).onclick=function(e){e.stopPropagation(),t.hideConfirmPopup()}}},{key:"hideConfirmPopup",value:function(){this.confirmPopup.style.display="none"}}]),t}();e.default=o}]);
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2Nyb3NzLWZldGNoL2Rpc3QvYnJvd3Nlci1wb255ZmlsbC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvanMvY29udmVydGVyL2FwcC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvanMvY29udmVydGVyL2NvbnZlcnRlci5qcyJdLCJuYW1lcyI6WyJpbnN0YWxsZWRNb2R1bGVzIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiZXhwb3J0cyIsIm1vZHVsZSIsImkiLCJsIiwibW9kdWxlcyIsImNhbGwiLCJtIiwiYyIsImQiLCJuYW1lIiwiZ2V0dGVyIiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsInIiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsInZhbHVlIiwidCIsIm1vZGUiLCJfX2VzTW9kdWxlIiwibnMiLCJjcmVhdGUiLCJrZXkiLCJiaW5kIiwibiIsIm9iamVjdCIsInByb3BlcnR5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJwIiwicyIsImdsb2JhbCIsInNlbGYiLCJ0aGlzIiwiX19zZWxmX18iLCJGIiwiZmV0Y2giLCJET01FeGNlcHRpb24iLCJzdXBwb3J0IiwiQmxvYiIsImUiLCJ2aWV3Q2xhc3NlcyIsImlzQXJyYXlCdWZmZXJWaWV3IiwiQXJyYXlCdWZmZXIiLCJpc1ZpZXciLCJvYmoiLCJpbmRleE9mIiwidG9TdHJpbmciLCJub3JtYWxpemVOYW1lIiwiU3RyaW5nIiwidGVzdCIsIlR5cGVFcnJvciIsInRvTG93ZXJDYXNlIiwibm9ybWFsaXplVmFsdWUiLCJpdGVyYXRvckZvciIsIml0ZW1zIiwiaXRlcmF0b3IiLCJuZXh0Iiwic2hpZnQiLCJkb25lIiwidW5kZWZpbmVkIiwiSGVhZGVycyIsImhlYWRlcnMiLCJtYXAiLCJmb3JFYWNoIiwiYXBwZW5kIiwiQXJyYXkiLCJpc0FycmF5IiwiaGVhZGVyIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImNvbnN1bWVkIiwiYm9keSIsImJvZHlVc2VkIiwiUHJvbWlzZSIsInJlamVjdCIsImZpbGVSZWFkZXJSZWFkeSIsInJlYWRlciIsInJlc29sdmUiLCJvbmxvYWQiLCJyZXN1bHQiLCJvbmVycm9yIiwiZXJyb3IiLCJyZWFkQmxvYkFzQXJyYXlCdWZmZXIiLCJibG9iIiwiRmlsZVJlYWRlciIsInByb21pc2UiLCJyZWFkQXNBcnJheUJ1ZmZlciIsImJ1ZmZlckNsb25lIiwiYnVmIiwic2xpY2UiLCJ2aWV3IiwiVWludDhBcnJheSIsImJ5dGVMZW5ndGgiLCJzZXQiLCJidWZmZXIiLCJCb2R5IiwiX2luaXRCb2R5IiwiX2JvZHlJbml0IiwiX2JvZHlUZXh0IiwiaXNQcm90b3R5cGVPZiIsIl9ib2R5QmxvYiIsIkZvcm1EYXRhIiwiX2JvZHlGb3JtRGF0YSIsIlVSTFNlYXJjaFBhcmFtcyIsIkRhdGFWaWV3IiwiX2JvZHlBcnJheUJ1ZmZlciIsInR5cGUiLCJyZWplY3RlZCIsIkVycm9yIiwiYXJyYXlCdWZmZXIiLCJ0aGVuIiwidGV4dCIsInJlYWRBc1RleHQiLCJjaGFycyIsImxlbmd0aCIsImZyb21DaGFyQ29kZSIsImpvaW4iLCJyZWFkQXJyYXlCdWZmZXJBc1RleHQiLCJmb3JtRGF0YSIsImRlY29kZSIsImpzb24iLCJKU09OIiwicGFyc2UiLCJvbGRWYWx1ZSIsImhhcyIsImNhbGxiYWNrIiwidGhpc0FyZyIsImtleXMiLCJwdXNoIiwidmFsdWVzIiwiZW50cmllcyIsIm1ldGhvZHMiLCJSZXF1ZXN0IiwiaW5wdXQiLCJvcHRpb25zIiwibWV0aG9kIiwidXBjYXNlZCIsInVybCIsImNyZWRlbnRpYWxzIiwic2lnbmFsIiwidG9VcHBlckNhc2UiLCJyZWZlcnJlciIsImZvcm0iLCJ0cmltIiwic3BsaXQiLCJieXRlcyIsInJlcGxhY2UiLCJkZWNvZGVVUklDb21wb25lbnQiLCJSZXNwb25zZSIsImJvZHlJbml0Iiwic3RhdHVzIiwib2siLCJzdGF0dXNUZXh0IiwiY2xvbmUiLCJyZXNwb25zZSIsInJlZGlyZWN0U3RhdHVzZXMiLCJyZWRpcmVjdCIsIlJhbmdlRXJyb3IiLCJsb2NhdGlvbiIsImVyciIsIm1lc3NhZ2UiLCJzdGFjayIsImNvbnN0cnVjdG9yIiwiaW5pdCIsInJlcXVlc3QiLCJhYm9ydGVkIiwieGhyIiwiWE1MSHR0cFJlcXVlc3QiLCJhYm9ydFhociIsImFib3J0IiwicmF3SGVhZGVycyIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsImxpbmUiLCJwYXJ0cyIsInJlc3BvbnNlVVJMIiwicmVzcG9uc2VUZXh0Iiwib250aW1lb3V0Iiwib25hYm9ydCIsIm9wZW4iLCJ3aXRoQ3JlZGVudGlhbHMiLCJyZXNwb25zZVR5cGUiLCJzZXRSZXF1ZXN0SGVhZGVyIiwiYWRkRXZlbnRMaXN0ZW5lciIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlYWR5U3RhdGUiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwic2VuZCIsInBvbHlmaWxsIiwicG9ueWZpbGwiLCJjdHgiLCJkZWZhdWx0IiwiZG9jdW1lbnQiLCJDb252ZXJ0ZXIiLCJDT05WRVJUX0ZPUk1fU0VMRUNUT1IiLCJDT05WRVJUX0JVVFRPTl9TRUxFQ1RPUiIsIkNPTkZJUk1fUE9QVVBfU0VMRUNUT1IiLCJDT05GSVJNX09LX1NFTEVDVE9SIiwiQ09ORklSTV9DQU5DRUxfU0VMRUNUT1IiLCJjb25maXJtUG9wdXAiLCJxdWVyeVNlbGVjdG9yIiwiYmluZEV2ZW50cyIsIm9uY2xpY2siLCJldmVudCIsInByZXZlbnREZWZhdWx0Iiwic3R5bGUiLCJkaXNwbGF5IiwiaGlkZUNvbmZpcm1Qb3B1cCIsInN0b3BQcm9wYWdhdGlvbiIsInN1Ym1pdCJdLCJtYXBwaW5ncyI6ImFBQ0UsSUFBSUEsRUFBbUIsR0FHdkIsU0FBU0MsRUFBb0JDLEdBRzVCLEdBQUdGLEVBQWlCRSxHQUNuQixPQUFPRixFQUFpQkUsR0FBVUMsUUFHbkMsSUFBSUMsRUFBU0osRUFBaUJFLEdBQVksQ0FDekNHLEVBQUdILEVBQ0hJLEdBQUcsRUFDSEgsUUFBUyxJQVVWLE9BTkFJLEVBQVFMLEdBQVVNLEtBQUtKLEVBQU9ELFFBQVNDLEVBQVFBLEVBQU9ELFFBQVNGLEdBRy9ERyxFQUFPRSxHQUFJLEVBR0pGLEVBQU9ELFFBS2ZGLEVBQW9CUSxFQUFJRixFQUd4Qk4sRUFBb0JTLEVBQUlWLEVBR3hCQyxFQUFvQlUsRUFBSSxTQUFTUixFQUFTUyxFQUFNQyxHQUMzQ1osRUFBb0JhLEVBQUVYLEVBQVNTLElBQ2xDRyxPQUFPQyxlQUFlYixFQUFTUyxFQUFNLENBQUVLLFlBQVksRUFBTUMsSUFBS0wsS0FLaEVaLEVBQW9Ca0IsRUFBSSxTQUFTaEIsR0FDWCxvQkFBWGlCLFFBQTBCQSxPQUFPQyxhQUMxQ04sT0FBT0MsZUFBZWIsRUFBU2lCLE9BQU9DLFlBQWEsQ0FBRUMsTUFBTyxXQUU3RFAsT0FBT0MsZUFBZWIsRUFBUyxhQUFjLENBQUVtQixPQUFPLEtBUXZEckIsRUFBb0JzQixFQUFJLFNBQVNELEVBQU9FLEdBRXZDLEdBRFUsRUFBUEEsSUFBVUYsRUFBUXJCLEVBQW9CcUIsSUFDL0IsRUFBUEUsRUFBVSxPQUFPRixFQUNwQixHQUFXLEVBQVBFLEdBQThCLGlCQUFWRixHQUFzQkEsR0FBU0EsRUFBTUcsV0FBWSxPQUFPSCxFQUNoRixJQUFJSSxFQUFLWCxPQUFPWSxPQUFPLE1BR3ZCLEdBRkExQixFQUFvQmtCLEVBQUVPLEdBQ3RCWCxPQUFPQyxlQUFlVSxFQUFJLFVBQVcsQ0FBRVQsWUFBWSxFQUFNSyxNQUFPQSxJQUN0RCxFQUFQRSxHQUE0QixpQkFBVEYsRUFBbUIsSUFBSSxJQUFJTSxLQUFPTixFQUFPckIsRUFBb0JVLEVBQUVlLEVBQUlFLEVBQUssU0FBU0EsR0FBTyxPQUFPTixFQUFNTSxJQUFRQyxLQUFLLEtBQU1ELElBQzlJLE9BQU9GLEdBSVJ6QixFQUFvQjZCLEVBQUksU0FBUzFCLEdBQ2hDLElBQUlTLEVBQVNULEdBQVVBLEVBQU9xQixXQUM3QixXQUF3QixPQUFPckIsRUFBZ0IsU0FDL0MsV0FBOEIsT0FBT0EsR0FFdEMsT0FEQUgsRUFBb0JVLEVBQUVFLEVBQVEsSUFBS0EsR0FDNUJBLEdBSVJaLEVBQW9CYSxFQUFJLFNBQVNpQixFQUFRQyxHQUFZLE9BQU9qQixPQUFPa0IsVUFBVUMsZUFBZTFCLEtBQUt1QixFQUFRQyxJQUd6Ry9CLEVBQW9Ca0MsRUFBSSxHQUlqQmxDLEVBQW9CQSxFQUFvQm1DLEVBQUksRyxxRENsRnJELElBQUlDLEVBQXlCLG9CQUFUQyxLQUF1QkEsS0FBT0MsS0FDOUNDLEVBQVcsV0FDZixTQUFTQyxJQUNURixLQUFLRyxPQUFRLEVBQ2JILEtBQUtJLGFBQWVOLEVBQU9NLGFBRzNCLE9BREFGLEVBQUVSLFVBQVlJLEVBQ1AsSUFBSUksRUFOSSxJQVFmLFNBQVVILElBRVEsU0FBVW5DLEdBRTFCLElBQUl5QyxFQUNZLG9CQUFxQk4sRUFEakNNLEVBRVEsV0FBWU4sR0FBUSxhQUFjbEIsT0FGMUN3QixFQUlBLGVBQWdCTixHQUNoQixTQUFVQSxHQUNWLFdBQ0UsSUFFRSxPQURBLElBQUlPLE1BQ0csRUFDUCxNQUFPQyxHQUNQLE9BQU8sR0FMWCxHQU5BRixFQWNRLGFBQWNOLEVBZHRCTSxFQWVXLGdCQUFpQk4sRUFPaEMsR0FBSU0sRUFDRixJQUFJRyxFQUFjLENBQ2hCLHFCQUNBLHNCQUNBLDZCQUNBLHNCQUNBLHVCQUNBLHNCQUNBLHVCQUNBLHdCQUNBLHlCQUdFQyxFQUNGQyxZQUFZQyxRQUNaLFNBQVNDLEdBQ1AsT0FBT0EsR0FBT0osRUFBWUssUUFBUXJDLE9BQU9rQixVQUFVb0IsU0FBUzdDLEtBQUsyQyxLQUFTLEdBSWhGLFNBQVNHLEVBQWMxQyxHQUlyQixHQUhvQixpQkFBVEEsSUFDVEEsRUFBTzJDLE9BQU8zQyxJQUVaLDRCQUE0QjRDLEtBQUs1QyxHQUNuQyxNQUFNLElBQUk2QyxVQUFVLDBDQUV0QixPQUFPN0MsRUFBSzhDLGNBR2QsU0FBU0MsRUFBZXJDLEdBSXRCLE1BSHFCLGlCQUFWQSxJQUNUQSxFQUFRaUMsT0FBT2pDLElBRVZBLEVBSVQsU0FBU3NDLEVBQVlDLEdBQ25CLElBQUlDLEVBQVcsQ0FDYkMsS0FBTSxXQUNKLElBQUl6QyxFQUFRdUMsRUFBTUcsUUFDbEIsTUFBTyxDQUFDQyxVQUFnQkMsSUFBVjVDLEVBQXFCQSxNQUFPQSxLQVU5QyxPQU5Jc0IsSUFDRmtCLEVBQVMxQyxPQUFPMEMsVUFBWSxXQUMxQixPQUFPQSxJQUlKQSxFQUdULFNBQVNLLEVBQVFDLEdBQ2Y3QixLQUFLOEIsSUFBTSxHQUVQRCxhQUFtQkQsRUFDckJDLEVBQVFFLFNBQVEsU0FBU2hELEVBQU9WLEdBQzlCMkIsS0FBS2dDLE9BQU8zRCxFQUFNVSxLQUNqQmlCLE1BQ01pQyxNQUFNQyxRQUFRTCxHQUN2QkEsRUFBUUUsU0FBUSxTQUFTSSxHQUN2Qm5DLEtBQUtnQyxPQUFPRyxFQUFPLEdBQUlBLEVBQU8sTUFDN0JuQyxNQUNNNkIsR0FDVHJELE9BQU80RCxvQkFBb0JQLEdBQVNFLFNBQVEsU0FBUzFELEdBQ25EMkIsS0FBS2dDLE9BQU8zRCxFQUFNd0QsRUFBUXhELE1BQ3pCMkIsTUFnRVAsU0FBU3FDLEVBQVNDLEdBQ2hCLEdBQUlBLEVBQUtDLFNBQ1AsT0FBT0MsUUFBUUMsT0FBTyxJQUFJdkIsVUFBVSxpQkFFdENvQixFQUFLQyxVQUFXLEVBR2xCLFNBQVNHLEVBQWdCQyxHQUN2QixPQUFPLElBQUlILFNBQVEsU0FBU0ksRUFBU0gsR0FDbkNFLEVBQU9FLE9BQVMsV0FDZEQsRUFBUUQsRUFBT0csU0FFakJILEVBQU9JLFFBQVUsV0FDZk4sRUFBT0UsRUFBT0ssV0FLcEIsU0FBU0MsRUFBc0JDLEdBQzdCLElBQUlQLEVBQVMsSUFBSVEsV0FDYkMsRUFBVVYsRUFBZ0JDLEdBRTlCLE9BREFBLEVBQU9VLGtCQUFrQkgsR0FDbEJFLEVBb0JULFNBQVNFLEVBQVlDLEdBQ25CLEdBQUlBLEVBQUlDLE1BQ04sT0FBT0QsRUFBSUMsTUFBTSxHQUVqQixJQUFJQyxFQUFPLElBQUlDLFdBQVdILEVBQUlJLFlBRTlCLE9BREFGLEVBQUtHLElBQUksSUFBSUYsV0FBV0gsSUFDakJFLEVBQUtJLE9BSWhCLFNBQVNDLElBMEZQLE9BekZBOUQsS0FBS3VDLFVBQVcsRUFFaEJ2QyxLQUFLK0QsVUFBWSxTQUFTekIsR0FoTTVCLElBQW9CMUIsRUFpTWhCWixLQUFLZ0UsVUFBWTFCLEVBQ1pBLEVBRXNCLGlCQUFUQSxFQUNoQnRDLEtBQUtpRSxVQUFZM0IsRUFDUmpDLEdBQWdCQyxLQUFLWixVQUFVd0UsY0FBYzVCLEdBQ3REdEMsS0FBS21FLFVBQVk3QixFQUNSakMsR0FBb0IrRCxTQUFTMUUsVUFBVXdFLGNBQWM1QixHQUM5RHRDLEtBQUtxRSxjQUFnQi9CLEVBQ1pqQyxHQUF3QmlFLGdCQUFnQjVFLFVBQVV3RSxjQUFjNUIsR0FDekV0QyxLQUFLaUUsVUFBWTNCLEVBQUt4QixXQUNiVCxHQUF1QkEsS0E1TWxCTyxFQTRNNkMwQixJQTNNakRpQyxTQUFTN0UsVUFBVXdFLGNBQWN0RCxLQTRNM0NaLEtBQUt3RSxpQkFBbUJsQixFQUFZaEIsRUFBS3VCLFFBRXpDN0QsS0FBS2dFLFVBQVksSUFBSTFELEtBQUssQ0FBQ04sS0FBS3dFLG9CQUN2Qm5FLElBQXdCSyxZQUFZaEIsVUFBVXdFLGNBQWM1QixJQUFTN0IsRUFBa0I2QixJQUNoR3RDLEtBQUt3RSxpQkFBbUJsQixFQUFZaEIsR0FFcEN0QyxLQUFLaUUsVUFBWTNCLEVBQU85RCxPQUFPa0IsVUFBVW9CLFNBQVM3QyxLQUFLcUUsR0FoQnZEdEMsS0FBS2lFLFVBQVksR0FtQmRqRSxLQUFLNkIsUUFBUWxELElBQUksa0JBQ0EsaUJBQVQyRCxFQUNUdEMsS0FBSzZCLFFBQVErQixJQUFJLGVBQWdCLDRCQUN4QjVELEtBQUttRSxXQUFhbkUsS0FBS21FLFVBQVVNLEtBQzFDekUsS0FBSzZCLFFBQVErQixJQUFJLGVBQWdCNUQsS0FBS21FLFVBQVVNLE1BQ3ZDcEUsR0FBd0JpRSxnQkFBZ0I1RSxVQUFVd0UsY0FBYzVCLElBQ3pFdEMsS0FBSzZCLFFBQVErQixJQUFJLGVBQWdCLHFEQUtuQ3ZELElBQ0ZMLEtBQUtrRCxLQUFPLFdBQ1YsSUFBSXdCLEVBQVdyQyxFQUFTckMsTUFDeEIsR0FBSTBFLEVBQ0YsT0FBT0EsRUFHVCxHQUFJMUUsS0FBS21FLFVBQ1AsT0FBTzNCLFFBQVFJLFFBQVE1QyxLQUFLbUUsV0FDdkIsR0FBSW5FLEtBQUt3RSxpQkFDZCxPQUFPaEMsUUFBUUksUUFBUSxJQUFJdEMsS0FBSyxDQUFDTixLQUFLd0Usb0JBQ2pDLEdBQUl4RSxLQUFLcUUsY0FDZCxNQUFNLElBQUlNLE1BQU0sd0NBRWhCLE9BQU9uQyxRQUFRSSxRQUFRLElBQUl0QyxLQUFLLENBQUNOLEtBQUtpRSxjQUkxQ2pFLEtBQUs0RSxZQUFjLFdBQ2pCLE9BQUk1RSxLQUFLd0UsaUJBQ0FuQyxFQUFTckMsT0FBU3dDLFFBQVFJLFFBQVE1QyxLQUFLd0Usa0JBRXZDeEUsS0FBS2tELE9BQU8yQixLQUFLNUIsS0FLOUJqRCxLQUFLOEUsS0FBTyxXQUNWLElBM0ZvQjVCLEVBQ2xCUCxFQUNBUyxFQXlGRXNCLEVBQVdyQyxFQUFTckMsTUFDeEIsR0FBSTBFLEVBQ0YsT0FBT0EsRUFHVCxHQUFJMUUsS0FBS21FLFVBQ1AsT0FqR2tCakIsRUFpR0lsRCxLQUFLbUUsVUFoRzNCeEIsRUFBUyxJQUFJUSxXQUNiQyxFQUFVVixFQUFnQkMsR0FDOUJBLEVBQU9vQyxXQUFXN0IsR0FDWEUsRUE4RkUsR0FBSXBELEtBQUt3RSxpQkFDZCxPQUFPaEMsUUFBUUksUUE1RnJCLFNBQStCVyxHQUk3QixJQUhBLElBQUlFLEVBQU8sSUFBSUMsV0FBV0gsR0FDdEJ5QixFQUFRLElBQUkvQyxNQUFNd0IsRUFBS3dCLFFBRWxCbkgsRUFBSSxFQUFHQSxFQUFJMkYsRUFBS3dCLE9BQVFuSCxJQUMvQmtILEVBQU1sSCxHQUFLa0QsT0FBT2tFLGFBQWF6QixFQUFLM0YsSUFFdEMsT0FBT2tILEVBQU1HLEtBQUssSUFxRlNDLENBQXNCcEYsS0FBS3dFLG1CQUM3QyxHQUFJeEUsS0FBS3FFLGNBQ2QsTUFBTSxJQUFJTSxNQUFNLHdDQUVoQixPQUFPbkMsUUFBUUksUUFBUTVDLEtBQUtpRSxZQUk1QjVELElBQ0ZMLEtBQUtxRixTQUFXLFdBQ2QsT0FBT3JGLEtBQUs4RSxPQUFPRCxLQUFLUyxLQUk1QnRGLEtBQUt1RixLQUFPLFdBQ1YsT0FBT3ZGLEtBQUs4RSxPQUFPRCxLQUFLVyxLQUFLQyxRQUd4QnpGLEtBMU1UNEIsRUFBUWxDLFVBQVVzQyxPQUFTLFNBQVMzRCxFQUFNVSxHQUN4Q1YsRUFBTzBDLEVBQWMxQyxHQUNyQlUsRUFBUXFDLEVBQWVyQyxHQUN2QixJQUFJMkcsRUFBVzFGLEtBQUs4QixJQUFJekQsR0FDeEIyQixLQUFLOEIsSUFBSXpELEdBQVFxSCxFQUFXQSxFQUFXLEtBQU8zRyxFQUFRQSxHQUd4RDZDLEVBQVFsQyxVQUFrQixPQUFJLFNBQVNyQixVQUM5QjJCLEtBQUs4QixJQUFJZixFQUFjMUMsS0FHaEN1RCxFQUFRbEMsVUFBVWYsSUFBTSxTQUFTTixHQUUvQixPQURBQSxFQUFPMEMsRUFBYzFDLEdBQ2QyQixLQUFLMkYsSUFBSXRILEdBQVEyQixLQUFLOEIsSUFBSXpELEdBQVEsTUFHM0N1RCxFQUFRbEMsVUFBVWlHLElBQU0sU0FBU3RILEdBQy9CLE9BQU8yQixLQUFLOEIsSUFBSW5DLGVBQWVvQixFQUFjMUMsS0FHL0N1RCxFQUFRbEMsVUFBVWtFLElBQU0sU0FBU3ZGLEVBQU1VLEdBQ3JDaUIsS0FBSzhCLElBQUlmLEVBQWMxQyxJQUFTK0MsRUFBZXJDLElBR2pENkMsRUFBUWxDLFVBQVVxQyxRQUFVLFNBQVM2RCxFQUFVQyxHQUM3QyxJQUFLLElBQUl4SCxLQUFRMkIsS0FBSzhCLElBQ2hCOUIsS0FBSzhCLElBQUluQyxlQUFldEIsSUFDMUJ1SCxFQUFTM0gsS0FBSzRILEVBQVM3RixLQUFLOEIsSUFBSXpELEdBQU9BLEVBQU0yQixPQUtuRDRCLEVBQVFsQyxVQUFVb0csS0FBTyxXQUN2QixJQUFJeEUsRUFBUSxHQUlaLE9BSEF0QixLQUFLK0IsU0FBUSxTQUFTaEQsRUFBT1YsR0FDM0JpRCxFQUFNeUUsS0FBSzFILE1BRU5nRCxFQUFZQyxJQUdyQk0sRUFBUWxDLFVBQVVzRyxPQUFTLFdBQ3pCLElBQUkxRSxFQUFRLEdBSVosT0FIQXRCLEtBQUsrQixTQUFRLFNBQVNoRCxHQUNwQnVDLEVBQU15RSxLQUFLaEgsTUFFTnNDLEVBQVlDLElBR3JCTSxFQUFRbEMsVUFBVXVHLFFBQVUsV0FDMUIsSUFBSTNFLEVBQVEsR0FJWixPQUhBdEIsS0FBSytCLFNBQVEsU0FBU2hELEVBQU9WLEdBQzNCaUQsRUFBTXlFLEtBQUssQ0FBQzFILEVBQU1VLE9BRWJzQyxFQUFZQyxJQUdqQmpCLElBQ0Z1QixFQUFRbEMsVUFBVWIsT0FBTzBDLFVBQVlLLEVBQVFsQyxVQUFVdUcsU0FxSnpELElBQUlDLEVBQVUsQ0FBQyxTQUFVLE1BQU8sT0FBUSxVQUFXLE9BQVEsT0FPM0QsU0FBU0MsRUFBUUMsRUFBT0MsR0FFdEIsSUFQdUJDLEVBQ25CQyxFQU1BakUsR0FESitELEVBQVVBLEdBQVcsSUFDRi9ELEtBRW5CLEdBQUk4RCxhQUFpQkQsRUFBUyxDQUM1QixHQUFJQyxFQUFNN0QsU0FDUixNQUFNLElBQUlyQixVQUFVLGdCQUV0QmxCLEtBQUt3RyxJQUFNSixFQUFNSSxJQUNqQnhHLEtBQUt5RyxZQUFjTCxFQUFNSyxZQUNwQkosRUFBUXhFLFVBQ1g3QixLQUFLNkIsUUFBVSxJQUFJRCxFQUFRd0UsRUFBTXZFLFVBRW5DN0IsS0FBS3NHLE9BQVNGLEVBQU1FLE9BQ3BCdEcsS0FBS2YsS0FBT21ILEVBQU1uSCxLQUNsQmUsS0FBSzBHLE9BQVNOLEVBQU1NLE9BQ2ZwRSxHQUEyQixNQUFuQjhELEVBQU1wQyxZQUNqQjFCLEVBQU84RCxFQUFNcEMsVUFDYm9DLEVBQU03RCxVQUFXLFFBR25CdkMsS0FBS3dHLElBQU14RixPQUFPb0YsR0FZcEIsR0FUQXBHLEtBQUt5RyxZQUFjSixFQUFRSSxhQUFlekcsS0FBS3lHLGFBQWUsZUFDMURKLEVBQVF4RSxTQUFZN0IsS0FBSzZCLFVBQzNCN0IsS0FBSzZCLFFBQVUsSUFBSUQsRUFBUXlFLEVBQVF4RSxVQUVyQzdCLEtBQUtzRyxRQWpDa0JBLEVBaUNPRCxFQUFRQyxRQUFVdEcsS0FBS3NHLFFBQVUsTUFoQzNEQyxFQUFVRCxFQUFPSyxjQUNkVCxFQUFRckYsUUFBUTBGLElBQVksRUFBSUEsRUFBVUQsR0FnQ2pEdEcsS0FBS2YsS0FBT29ILEVBQVFwSCxNQUFRZSxLQUFLZixNQUFRLEtBQ3pDZSxLQUFLMEcsT0FBU0wsRUFBUUssUUFBVTFHLEtBQUswRyxPQUNyQzFHLEtBQUs0RyxTQUFXLE1BRUssUUFBaEI1RyxLQUFLc0csUUFBb0MsU0FBaEJ0RyxLQUFLc0csU0FBc0JoRSxFQUN2RCxNQUFNLElBQUlwQixVQUFVLDZDQUV0QmxCLEtBQUsrRCxVQUFVekIsR0FPakIsU0FBU2dELEVBQU9oRCxHQUNkLElBQUl1RSxFQUFPLElBQUl6QyxTQVlmLE9BWEE5QixFQUNHd0UsT0FDQUMsTUFBTSxLQUNOaEYsU0FBUSxTQUFTaUYsR0FDaEIsR0FBSUEsRUFBTyxDQUNULElBQUlELEVBQVFDLEVBQU1ELE1BQU0sS0FDcEIxSSxFQUFPMEksRUFBTXRGLFFBQVF3RixRQUFRLE1BQU8sS0FDcENsSSxFQUFRZ0ksRUFBTTVCLEtBQUssS0FBSzhCLFFBQVEsTUFBTyxLQUMzQ0osRUFBSzdFLE9BQU9rRixtQkFBbUI3SSxHQUFPNkksbUJBQW1CbkksUUFHeEQ4SCxFQXFCVCxTQUFTTSxFQUFTQyxFQUFVZixHQUNyQkEsSUFDSEEsRUFBVSxJQUdackcsS0FBS3lFLEtBQU8sVUFDWnpFLEtBQUtxSCxZQUE0QjFGLElBQW5CMEUsRUFBUWdCLE9BQXVCLElBQU1oQixFQUFRZ0IsT0FDM0RySCxLQUFLc0gsR0FBS3RILEtBQUtxSCxRQUFVLEtBQU9ySCxLQUFLcUgsT0FBUyxJQUM5Q3JILEtBQUt1SCxXQUFhLGVBQWdCbEIsRUFBVUEsRUFBUWtCLFdBQWEsS0FDakV2SCxLQUFLNkIsUUFBVSxJQUFJRCxFQUFReUUsRUFBUXhFLFNBQ25DN0IsS0FBS3dHLElBQU1ILEVBQVFHLEtBQU8sR0FDMUJ4RyxLQUFLK0QsVUFBVXFELEdBakRqQmpCLEVBQVF6RyxVQUFVOEgsTUFBUSxXQUN4QixPQUFPLElBQUlyQixFQUFRbkcsS0FBTSxDQUFDc0MsS0FBTXRDLEtBQUtnRSxhQW1DdkNGLEVBQUs3RixLQUFLa0ksRUFBUXpHLFdBZ0JsQm9FLEVBQUs3RixLQUFLa0osRUFBU3pILFdBRW5CeUgsRUFBU3pILFVBQVU4SCxNQUFRLFdBQ3pCLE9BQU8sSUFBSUwsRUFBU25ILEtBQUtnRSxVQUFXLENBQ2xDcUQsT0FBUXJILEtBQUtxSCxPQUNiRSxXQUFZdkgsS0FBS3VILFdBQ2pCMUYsUUFBUyxJQUFJRCxFQUFRNUIsS0FBSzZCLFNBQzFCMkUsSUFBS3hHLEtBQUt3RyxPQUlkVyxFQUFTbkUsTUFBUSxXQUNmLElBQUl5RSxFQUFXLElBQUlOLEVBQVMsS0FBTSxDQUFDRSxPQUFRLEVBQUdFLFdBQVksS0FFMUQsT0FEQUUsRUFBU2hELEtBQU8sUUFDVGdELEdBR1QsSUFBSUMsRUFBbUIsQ0FBQyxJQUFLLElBQUssSUFBSyxJQUFLLEtBRTVDUCxFQUFTUSxTQUFXLFNBQVNuQixFQUFLYSxHQUNoQyxJQUEwQyxJQUF0Q0ssRUFBaUI3RyxRQUFRd0csR0FDM0IsTUFBTSxJQUFJTyxXQUFXLHVCQUd2QixPQUFPLElBQUlULEVBQVMsS0FBTSxDQUFDRSxPQUFRQSxFQUFReEYsUUFBUyxDQUFDZ0csU0FBVXJCLE1BR2pFNUksRUFBUXdDLGFBQWVMLEVBQUtLLGFBQzVCLElBQ0UsSUFBSXhDLEVBQVF3QyxhQUNaLE1BQU8wSCxHQUNQbEssRUFBUXdDLGFBQWUsU0FBUzJILEVBQVMxSixHQUN2QzJCLEtBQUsrSCxRQUFVQSxFQUNmL0gsS0FBSzNCLEtBQU9BLEVBQ1osSUFBSTJFLEVBQVEyQixNQUFNb0QsR0FDbEIvSCxLQUFLZ0ksTUFBUWhGLEVBQU1nRixPQUVyQnBLLEVBQVF3QyxhQUFhVixVQUFZbEIsT0FBT1ksT0FBT3VGLE1BQU1qRixXQUNyRDlCLEVBQVF3QyxhQUFhVixVQUFVdUksWUFBY3JLLEVBQVF3QyxhQUd2RCxTQUFTRCxFQUFNaUcsRUFBTzhCLEdBQ3BCLE9BQU8sSUFBSTFGLFNBQVEsU0FBU0ksRUFBU0gsR0FDbkMsSUFBSTBGLEVBQVUsSUFBSWhDLEVBQVFDLEVBQU84QixHQUVqQyxHQUFJQyxFQUFRekIsUUFBVXlCLEVBQVF6QixPQUFPMEIsUUFDbkMsT0FBTzNGLEVBQU8sSUFBSTdFLEVBQVF3QyxhQUFhLFVBQVcsZUFHcEQsSUFBSWlJLEVBQU0sSUFBSUMsZUFFZCxTQUFTQyxJQUNQRixFQUFJRyxRQUdOSCxFQUFJeEYsT0FBUyxXQUNYLElBeEZnQjRGLEVBQ2hCNUcsRUF1Rkl3RSxFQUFVLENBQ1pnQixPQUFRZ0IsRUFBSWhCLE9BQ1pFLFdBQVljLEVBQUlkLFdBQ2hCMUYsU0EzRmM0RyxFQTJGUUosRUFBSUsseUJBQTJCLEdBMUZ2RDdHLEVBQVUsSUFBSUQsRUFHUTZHLEVBQVd4QixRQUFRLGVBQWdCLEtBQ3pDRixNQUFNLFNBQVNoRixTQUFRLFNBQVM0RyxHQUNsRCxJQUFJQyxFQUFRRCxFQUFLNUIsTUFBTSxLQUNuQjFILEVBQU11SixFQUFNbkgsUUFBUXFGLE9BQ3hCLEdBQUl6SCxFQUFLLENBQ1AsSUFBSU4sRUFBUTZKLEVBQU16RCxLQUFLLEtBQUsyQixPQUM1QmpGLEVBQVFHLE9BQU8zQyxFQUFLTixPQUdqQjhDLElBZ0ZId0UsRUFBUUcsSUFBTSxnQkFBaUI2QixFQUFNQSxFQUFJUSxZQUFjeEMsRUFBUXhFLFFBQVFsRCxJQUFJLGlCQUMzRSxJQUFJMkQsRUFBTyxhQUFjK0YsRUFBTUEsRUFBSVosU0FBV1ksRUFBSVMsYUFDbERsRyxFQUFRLElBQUl1RSxFQUFTN0UsRUFBTStELEtBRzdCZ0MsRUFBSXRGLFFBQVUsV0FDWk4sRUFBTyxJQUFJdkIsVUFBVSw0QkFHdkJtSCxFQUFJVSxVQUFZLFdBQ2R0RyxFQUFPLElBQUl2QixVQUFVLDRCQUd2Qm1ILEVBQUlXLFFBQVUsV0FDWnZHLEVBQU8sSUFBSTdFLEVBQVF3QyxhQUFhLFVBQVcsZ0JBRzdDaUksRUFBSVksS0FBS2QsRUFBUTdCLE9BQVE2QixFQUFRM0IsS0FBSyxHQUVWLFlBQXhCMkIsRUFBUTFCLFlBQ1Y0QixFQUFJYSxpQkFBa0IsRUFDVyxTQUF4QmYsRUFBUTFCLGNBQ2pCNEIsRUFBSWEsaUJBQWtCLEdBR3BCLGlCQUFrQmIsR0FBT2hJLElBQzNCZ0ksRUFBSWMsYUFBZSxRQUdyQmhCLEVBQVF0RyxRQUFRRSxTQUFRLFNBQVNoRCxFQUFPVixHQUN0Q2dLLEVBQUllLGlCQUFpQi9LLEVBQU1VLE1BR3pCb0osRUFBUXpCLFNBQ1Z5QixFQUFRekIsT0FBTzJDLGlCQUFpQixRQUFTZCxHQUV6Q0YsRUFBSWlCLG1CQUFxQixXQUVBLElBQW5CakIsRUFBSWtCLFlBQ05wQixFQUFRekIsT0FBTzhDLG9CQUFvQixRQUFTakIsS0FLbERGLEVBQUlvQixVQUFrQyxJQUF0QnRCLEVBQVFuRSxVQUE0QixLQUFPbUUsRUFBUW5FLGNBSXZFN0QsRUFBTXVKLFVBQVcsRUFFWjNKLEVBQUtJLFFBQ1JKLEVBQUtJLE1BQVFBLEVBQ2JKLEVBQUs2QixRQUFVQSxFQUNmN0IsRUFBS29HLFFBQVVBLEVBQ2ZwRyxFQUFLb0gsU0FBV0EsR0FHbEJ2SixFQUFRZ0UsUUFBVUEsRUFDbEJoRSxFQUFRdUksUUFBVUEsRUFDbEJ2SSxFQUFRdUosU0FBV0EsRUFDbkJ2SixFQUFRdUMsTUFBUUEsRUFFaEIzQixPQUFPQyxlQUFlYixFQUFTLGFBQWMsQ0FBRW1CLE9BQU8sSUE1Z0J2QyxDQWdoQmYsSUFsaEJGLENBbWhCR2tCLEdBQ0hBLEVBQVNFLE1BQU13SixVQUFXLFNBRW5CMUosRUFBU0UsTUFBTXVKLFNBR3RCLElBQUlFLEVBQU0zSixHQUNWckMsRUFBVWdNLEVBQUl6SixPQUNOMEosUUFBVUQsRUFBSXpKLE1BQ3RCdkMsRUFBUXVDLE1BQVF5SixFQUFJekosTUFDcEJ2QyxFQUFRZ0UsUUFBVWdJLEVBQUloSSxRQUN0QmhFLEVBQVF1SSxRQUFVeUQsRUFBSXpELFFBQ3RCdkksRUFBUXVKLFNBQVd5QyxFQUFJekMsU0FDdkJ0SixFQUFPRCxRQUFVQSxHLDZCQ3RpQmpCLEksRUFBQSxPLG9DQUVBa00sU0FBU1QsaUJBQWtCLG9CQUFvQixXQUM5QyxJQUFJVSxjLDJVQ0ZDQSxFLFdBSUwsYyw0RkFBYyxTQUNiL0osS0FBS2dLLHNCQUF3Qiw4QkFDN0JoSyxLQUFLaUssd0JBQTBCLHNCQUMvQmpLLEtBQUtrSyx1QkFBeUIscUJBQzlCbEssS0FBS21LLG9CQUFzQixrQkFDM0JuSyxLQUFLb0ssd0JBQTBCLHNCQUUvQnBLLEtBQUtxSyxhQUFlUCxTQUFTUSxjQUM1QnRLLEtBQUtrSyx3QkFHTmxLLEtBQUt1SyxhLCtDQU1PLFdBQ1pULFNBQVNRLGNBQWV0SyxLQUFLaUsseUJBQTBCTyxRQUFVLFNBQ2hFQyxHQUlBLE9BRkFBLEVBQU1DLGlCQUNOLEVBQUtMLGFBQWFNLE1BQU1DLFFBQVUsU0FDM0IsR0FHUjVLLEtBQUtxSyxhQUFhRyxRQUFVLFdBQzNCLEVBQUtLLG9CQUdOZixTQUFTUSxjQUFldEssS0FBS21LLHFCQUFzQkssUUFBVSxTQUM1REMsR0FFQUEsRUFBTUssa0JBQ04sRUFBS0QsbUJBQ0xmLFNBQVNRLGNBQWUsRUFBS04sdUJBQXdCZSxVQUd0RGpCLFNBQVNRLGNBQWV0SyxLQUFLb0sseUJBQTBCSSxRQUFVLFNBQ2hFQyxHQUVBQSxFQUFNSyxrQkFDTixFQUFLRCxzQix5Q0FRTjdLLEtBQUtxSyxhQUFhTSxNQUFNQyxRQUFVLFcsZUFJckJiIiwiZmlsZSI6ImNvbnZlcnRlci9hcHAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMCk7XG4iLCJ2YXIgZ2xvYmFsID0gdHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gc2VsZiA6IHRoaXM7XG52YXIgX19zZWxmX18gPSAoZnVuY3Rpb24gKCkge1xuZnVuY3Rpb24gRigpIHtcbnRoaXMuZmV0Y2ggPSBmYWxzZTtcbnRoaXMuRE9NRXhjZXB0aW9uID0gZ2xvYmFsLkRPTUV4Y2VwdGlvblxufVxuRi5wcm90b3R5cGUgPSBnbG9iYWw7XG5yZXR1cm4gbmV3IEYoKTtcbn0pKCk7XG4oZnVuY3Rpb24oc2VsZikge1xuXG52YXIgaXJyZWxldmFudCA9IChmdW5jdGlvbiAoZXhwb3J0cykge1xuXG4gIHZhciBzdXBwb3J0ID0ge1xuICAgIHNlYXJjaFBhcmFtczogJ1VSTFNlYXJjaFBhcmFtcycgaW4gc2VsZixcbiAgICBpdGVyYWJsZTogJ1N5bWJvbCcgaW4gc2VsZiAmJiAnaXRlcmF0b3InIGluIFN5bWJvbCxcbiAgICBibG9iOlxuICAgICAgJ0ZpbGVSZWFkZXInIGluIHNlbGYgJiZcbiAgICAgICdCbG9iJyBpbiBzZWxmICYmXG4gICAgICAoZnVuY3Rpb24oKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbmV3IEJsb2IoKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0pKCksXG4gICAgZm9ybURhdGE6ICdGb3JtRGF0YScgaW4gc2VsZixcbiAgICBhcnJheUJ1ZmZlcjogJ0FycmF5QnVmZmVyJyBpbiBzZWxmXG4gIH07XG5cbiAgZnVuY3Rpb24gaXNEYXRhVmlldyhvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIERhdGFWaWV3LnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKG9iailcbiAgfVxuXG4gIGlmIChzdXBwb3J0LmFycmF5QnVmZmVyKSB7XG4gICAgdmFyIHZpZXdDbGFzc2VzID0gW1xuICAgICAgJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgICAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgICAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgICAgJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgICAgJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICAgICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICAgICdbb2JqZWN0IFVpbnQzMkFycmF5XScsXG4gICAgICAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICAgICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nXG4gICAgXTtcblxuICAgIHZhciBpc0FycmF5QnVmZmVyVmlldyA9XG4gICAgICBBcnJheUJ1ZmZlci5pc1ZpZXcgfHxcbiAgICAgIGZ1bmN0aW9uKG9iaikge1xuICAgICAgICByZXR1cm4gb2JqICYmIHZpZXdDbGFzc2VzLmluZGV4T2YoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikpID4gLTFcbiAgICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBub3JtYWxpemVOYW1lKG5hbWUpIHtcbiAgICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICBuYW1lID0gU3RyaW5nKG5hbWUpO1xuICAgIH1cbiAgICBpZiAoL1teYS16MC05XFwtIyQlJicqKy5eX2B8fl0vaS50ZXN0KG5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGNoYXJhY3RlciBpbiBoZWFkZXIgZmllbGQgbmFtZScpXG4gICAgfVxuICAgIHJldHVybiBuYW1lLnRvTG93ZXJDYXNlKClcbiAgfVxuXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZVZhbHVlKHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHZhbHVlID0gU3RyaW5nKHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cblxuICAvLyBCdWlsZCBhIGRlc3RydWN0aXZlIGl0ZXJhdG9yIGZvciB0aGUgdmFsdWUgbGlzdFxuICBmdW5jdGlvbiBpdGVyYXRvckZvcihpdGVtcykge1xuICAgIHZhciBpdGVyYXRvciA9IHtcbiAgICAgIG5leHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgdmFsdWUgPSBpdGVtcy5zaGlmdCgpO1xuICAgICAgICByZXR1cm4ge2RvbmU6IHZhbHVlID09PSB1bmRlZmluZWQsIHZhbHVlOiB2YWx1ZX1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKHN1cHBvcnQuaXRlcmFibGUpIHtcbiAgICAgIGl0ZXJhdG9yW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBpdGVyYXRvclxuICB9XG5cbiAgZnVuY3Rpb24gSGVhZGVycyhoZWFkZXJzKSB7XG4gICAgdGhpcy5tYXAgPSB7fTtcblxuICAgIGlmIChoZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVycykge1xuICAgICAgaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKG5hbWUsIHZhbHVlKTtcbiAgICAgIH0sIHRoaXMpO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzKSkge1xuICAgICAgaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKGhlYWRlcikge1xuICAgICAgICB0aGlzLmFwcGVuZChoZWFkZXJbMF0sIGhlYWRlclsxXSk7XG4gICAgICB9LCB0aGlzKTtcbiAgICB9IGVsc2UgaWYgKGhlYWRlcnMpIHtcbiAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGhlYWRlcnMpLmZvckVhY2goZnVuY3Rpb24obmFtZSkge1xuICAgICAgICB0aGlzLmFwcGVuZChuYW1lLCBoZWFkZXJzW25hbWVdKTtcbiAgICAgIH0sIHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIEhlYWRlcnMucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gICAgbmFtZSA9IG5vcm1hbGl6ZU5hbWUobmFtZSk7XG4gICAgdmFsdWUgPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSk7XG4gICAgdmFyIG9sZFZhbHVlID0gdGhpcy5tYXBbbmFtZV07XG4gICAgdGhpcy5tYXBbbmFtZV0gPSBvbGRWYWx1ZSA/IG9sZFZhbHVlICsgJywgJyArIHZhbHVlIDogdmFsdWU7XG4gIH07XG5cbiAgSGVhZGVycy5wcm90b3R5cGVbJ2RlbGV0ZSddID0gZnVuY3Rpb24obmFtZSkge1xuICAgIGRlbGV0ZSB0aGlzLm1hcFtub3JtYWxpemVOYW1lKG5hbWUpXTtcbiAgfTtcblxuICBIZWFkZXJzLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgbmFtZSA9IG5vcm1hbGl6ZU5hbWUobmFtZSk7XG4gICAgcmV0dXJuIHRoaXMuaGFzKG5hbWUpID8gdGhpcy5tYXBbbmFtZV0gOiBudWxsXG4gIH07XG5cbiAgSGVhZGVycy5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24obmFtZSkge1xuICAgIHJldHVybiB0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShub3JtYWxpemVOYW1lKG5hbWUpKVxuICB9O1xuXG4gIEhlYWRlcnMucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gICAgdGhpcy5tYXBbbm9ybWFsaXplTmFtZShuYW1lKV0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSk7XG4gIH07XG5cbiAgSGVhZGVycy5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uKGNhbGxiYWNrLCB0aGlzQXJnKSB7XG4gICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLm1hcCkge1xuICAgICAgaWYgKHRoaXMubWFwLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdGhpcy5tYXBbbmFtZV0sIG5hbWUsIHRoaXMpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBIZWFkZXJzLnByb3RvdHlwZS5rZXlzID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGl0ZW1zID0gW107XG4gICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICBpdGVtcy5wdXNoKG5hbWUpO1xuICAgIH0pO1xuICAgIHJldHVybiBpdGVyYXRvckZvcihpdGVtcylcbiAgfTtcblxuICBIZWFkZXJzLnByb3RvdHlwZS52YWx1ZXMgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgaXRlbXMgPSBbXTtcbiAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIGl0ZW1zLnB1c2godmFsdWUpO1xuICAgIH0pO1xuICAgIHJldHVybiBpdGVyYXRvckZvcihpdGVtcylcbiAgfTtcblxuICBIZWFkZXJzLnByb3RvdHlwZS5lbnRyaWVzID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGl0ZW1zID0gW107XG4gICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICBpdGVtcy5wdXNoKFtuYW1lLCB2YWx1ZV0pO1xuICAgIH0pO1xuICAgIHJldHVybiBpdGVyYXRvckZvcihpdGVtcylcbiAgfTtcblxuICBpZiAoc3VwcG9ydC5pdGVyYWJsZSkge1xuICAgIEhlYWRlcnMucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl0gPSBIZWFkZXJzLnByb3RvdHlwZS5lbnRyaWVzO1xuICB9XG5cbiAgZnVuY3Rpb24gY29uc3VtZWQoYm9keSkge1xuICAgIGlmIChib2R5LmJvZHlVc2VkKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFR5cGVFcnJvcignQWxyZWFkeSByZWFkJykpXG4gICAgfVxuICAgIGJvZHkuYm9keVVzZWQgPSB0cnVlO1xuICB9XG5cbiAgZnVuY3Rpb24gZmlsZVJlYWRlclJlYWR5KHJlYWRlcikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmVzb2x2ZShyZWFkZXIucmVzdWx0KTtcbiAgICAgIH07XG4gICAgICByZWFkZXIub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZWplY3QocmVhZGVyLmVycm9yKTtcbiAgICAgIH07XG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWRCbG9iQXNBcnJheUJ1ZmZlcihibG9iKSB7XG4gICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgdmFyIHByb21pc2UgPSBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKTtcbiAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoYmxvYik7XG4gICAgcmV0dXJuIHByb21pc2VcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWRCbG9iQXNUZXh0KGJsb2IpIHtcbiAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICB2YXIgcHJvbWlzZSA9IGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpO1xuICAgIHJlYWRlci5yZWFkQXNUZXh0KGJsb2IpO1xuICAgIHJldHVybiBwcm9taXNlXG4gIH1cblxuICBmdW5jdGlvbiByZWFkQXJyYXlCdWZmZXJBc1RleHQoYnVmKSB7XG4gICAgdmFyIHZpZXcgPSBuZXcgVWludDhBcnJheShidWYpO1xuICAgIHZhciBjaGFycyA9IG5ldyBBcnJheSh2aWV3Lmxlbmd0aCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpZXcubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoYXJzW2ldID0gU3RyaW5nLmZyb21DaGFyQ29kZSh2aWV3W2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIGNoYXJzLmpvaW4oJycpXG4gIH1cblxuICBmdW5jdGlvbiBidWZmZXJDbG9uZShidWYpIHtcbiAgICBpZiAoYnVmLnNsaWNlKSB7XG4gICAgICByZXR1cm4gYnVmLnNsaWNlKDApXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkoYnVmLmJ5dGVMZW5ndGgpO1xuICAgICAgdmlldy5zZXQobmV3IFVpbnQ4QXJyYXkoYnVmKSk7XG4gICAgICByZXR1cm4gdmlldy5idWZmZXJcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBCb2R5KCkge1xuICAgIHRoaXMuYm9keVVzZWQgPSBmYWxzZTtcblxuICAgIHRoaXMuX2luaXRCb2R5ID0gZnVuY3Rpb24oYm9keSkge1xuICAgICAgdGhpcy5fYm9keUluaXQgPSBib2R5O1xuICAgICAgaWYgKCFib2R5KSB7XG4gICAgICAgIHRoaXMuX2JvZHlUZXh0ID0gJyc7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHk7XG4gICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYmxvYiAmJiBCbG9iLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICAgIHRoaXMuX2JvZHlCbG9iID0gYm9keTtcbiAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5mb3JtRGF0YSAmJiBGb3JtRGF0YS5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgICB0aGlzLl9ib2R5Rm9ybURhdGEgPSBib2R5O1xuICAgICAgfSBlbHNlIGlmIChzdXBwb3J0LnNlYXJjaFBhcmFtcyAmJiBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5LnRvU3RyaW5nKCk7XG4gICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIgJiYgc3VwcG9ydC5ibG9iICYmIGlzRGF0YVZpZXcoYm9keSkpIHtcbiAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyID0gYnVmZmVyQ2xvbmUoYm9keS5idWZmZXIpO1xuICAgICAgICAvLyBJRSAxMC0xMSBjYW4ndCBoYW5kbGUgYSBEYXRhVmlldyBib2R5LlxuICAgICAgICB0aGlzLl9ib2R5SW5pdCA9IG5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKTtcbiAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5hcnJheUJ1ZmZlciAmJiAoQXJyYXlCdWZmZXIucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkgfHwgaXNBcnJheUJ1ZmZlclZpZXcoYm9keSkpKSB7XG4gICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlciA9IGJ1ZmZlckNsb25lKGJvZHkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5ID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGJvZHkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuaGVhZGVycy5nZXQoJ2NvbnRlbnQtdHlwZScpKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCAndGV4dC9wbGFpbjtjaGFyc2V0PVVURi04Jyk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUJsb2IgJiYgdGhpcy5fYm9keUJsb2IudHlwZSkge1xuICAgICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsIHRoaXMuX2JvZHlCbG9iLnR5cGUpO1xuICAgICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuc2VhcmNoUGFyYW1zICYmIFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmIChzdXBwb3J0LmJsb2IpIHtcbiAgICAgIHRoaXMuYmxvYiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgcmVqZWN0ZWQgPSBjb25zdW1lZCh0aGlzKTtcbiAgICAgICAgaWYgKHJlamVjdGVkKSB7XG4gICAgICAgICAgcmV0dXJuIHJlamVjdGVkXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fYm9keUJsb2IpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlCbG9iKVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pKVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlGb3JtRGF0YSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyBibG9iJylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5VGV4dF0pKVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICB0aGlzLmFycmF5QnVmZmVyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgICAgICByZXR1cm4gY29uc3VtZWQodGhpcykgfHwgUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5ibG9iKCkudGhlbihyZWFkQmxvYkFzQXJyYXlCdWZmZXIpXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0ID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgcmVqZWN0ZWQgPSBjb25zdW1lZCh0aGlzKTtcbiAgICAgIGlmIChyZWplY3RlZCkge1xuICAgICAgICByZXR1cm4gcmVqZWN0ZWRcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2JvZHlCbG9iKSB7XG4gICAgICAgIHJldHVybiByZWFkQmxvYkFzVGV4dCh0aGlzLl9ib2R5QmxvYilcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVhZEFycmF5QnVmZmVyQXNUZXh0KHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlGb3JtRGF0YSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgdGV4dCcpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlUZXh0KVxuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoc3VwcG9ydC5mb3JtRGF0YSkge1xuICAgICAgdGhpcy5mb3JtRGF0YSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0KCkudGhlbihkZWNvZGUpXG4gICAgICB9O1xuICAgIH1cblxuICAgIHRoaXMuanNvbiA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oSlNPTi5wYXJzZSlcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8vIEhUVFAgbWV0aG9kcyB3aG9zZSBjYXBpdGFsaXphdGlvbiBzaG91bGQgYmUgbm9ybWFsaXplZFxuICB2YXIgbWV0aG9kcyA9IFsnREVMRVRFJywgJ0dFVCcsICdIRUFEJywgJ09QVElPTlMnLCAnUE9TVCcsICdQVVQnXTtcblxuICBmdW5jdGlvbiBub3JtYWxpemVNZXRob2QobWV0aG9kKSB7XG4gICAgdmFyIHVwY2FzZWQgPSBtZXRob2QudG9VcHBlckNhc2UoKTtcbiAgICByZXR1cm4gbWV0aG9kcy5pbmRleE9mKHVwY2FzZWQpID4gLTEgPyB1cGNhc2VkIDogbWV0aG9kXG4gIH1cblxuICBmdW5jdGlvbiBSZXF1ZXN0KGlucHV0LCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgdmFyIGJvZHkgPSBvcHRpb25zLmJvZHk7XG5cbiAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7XG4gICAgICBpZiAoaW5wdXQuYm9keVVzZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQWxyZWFkeSByZWFkJylcbiAgICAgIH1cbiAgICAgIHRoaXMudXJsID0gaW5wdXQudXJsO1xuICAgICAgdGhpcy5jcmVkZW50aWFscyA9IGlucHV0LmNyZWRlbnRpYWxzO1xuICAgICAgaWYgKCFvcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzID0gbmV3IEhlYWRlcnMoaW5wdXQuaGVhZGVycyk7XG4gICAgICB9XG4gICAgICB0aGlzLm1ldGhvZCA9IGlucHV0Lm1ldGhvZDtcbiAgICAgIHRoaXMubW9kZSA9IGlucHV0Lm1vZGU7XG4gICAgICB0aGlzLnNpZ25hbCA9IGlucHV0LnNpZ25hbDtcbiAgICAgIGlmICghYm9keSAmJiBpbnB1dC5fYm9keUluaXQgIT0gbnVsbCkge1xuICAgICAgICBib2R5ID0gaW5wdXQuX2JvZHlJbml0O1xuICAgICAgICBpbnB1dC5ib2R5VXNlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudXJsID0gU3RyaW5nKGlucHV0KTtcbiAgICB9XG5cbiAgICB0aGlzLmNyZWRlbnRpYWxzID0gb3B0aW9ucy5jcmVkZW50aWFscyB8fCB0aGlzLmNyZWRlbnRpYWxzIHx8ICdzYW1lLW9yaWdpbic7XG4gICAgaWYgKG9wdGlvbnMuaGVhZGVycyB8fCAhdGhpcy5oZWFkZXJzKSB7XG4gICAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpO1xuICAgIH1cbiAgICB0aGlzLm1ldGhvZCA9IG5vcm1hbGl6ZU1ldGhvZChvcHRpb25zLm1ldGhvZCB8fCB0aGlzLm1ldGhvZCB8fCAnR0VUJyk7XG4gICAgdGhpcy5tb2RlID0gb3B0aW9ucy5tb2RlIHx8IHRoaXMubW9kZSB8fCBudWxsO1xuICAgIHRoaXMuc2lnbmFsID0gb3B0aW9ucy5zaWduYWwgfHwgdGhpcy5zaWduYWw7XG4gICAgdGhpcy5yZWZlcnJlciA9IG51bGw7XG5cbiAgICBpZiAoKHRoaXMubWV0aG9kID09PSAnR0VUJyB8fCB0aGlzLm1ldGhvZCA9PT0gJ0hFQUQnKSAmJiBib2R5KSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCb2R5IG5vdCBhbGxvd2VkIGZvciBHRVQgb3IgSEVBRCByZXF1ZXN0cycpXG4gICAgfVxuICAgIHRoaXMuX2luaXRCb2R5KGJvZHkpO1xuICB9XG5cbiAgUmVxdWVzdC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFJlcXVlc3QodGhpcywge2JvZHk6IHRoaXMuX2JvZHlJbml0fSlcbiAgfTtcblxuICBmdW5jdGlvbiBkZWNvZGUoYm9keSkge1xuICAgIHZhciBmb3JtID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgYm9keVxuICAgICAgLnRyaW0oKVxuICAgICAgLnNwbGl0KCcmJylcbiAgICAgIC5mb3JFYWNoKGZ1bmN0aW9uKGJ5dGVzKSB7XG4gICAgICAgIGlmIChieXRlcykge1xuICAgICAgICAgIHZhciBzcGxpdCA9IGJ5dGVzLnNwbGl0KCc9Jyk7XG4gICAgICAgICAgdmFyIG5hbWUgPSBzcGxpdC5zaGlmdCgpLnJlcGxhY2UoL1xcKy9nLCAnICcpO1xuICAgICAgICAgIHZhciB2YWx1ZSA9IHNwbGl0LmpvaW4oJz0nKS5yZXBsYWNlKC9cXCsvZywgJyAnKTtcbiAgICAgICAgICBmb3JtLmFwcGVuZChkZWNvZGVVUklDb21wb25lbnQobmFtZSksIGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICByZXR1cm4gZm9ybVxuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpIHtcbiAgICB2YXIgaGVhZGVycyA9IG5ldyBIZWFkZXJzKCk7XG4gICAgLy8gUmVwbGFjZSBpbnN0YW5jZXMgb2YgXFxyXFxuIGFuZCBcXG4gZm9sbG93ZWQgYnkgYXQgbGVhc3Qgb25lIHNwYWNlIG9yIGhvcml6b250YWwgdGFiIHdpdGggYSBzcGFjZVxuICAgIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4yXG4gICAgdmFyIHByZVByb2Nlc3NlZEhlYWRlcnMgPSByYXdIZWFkZXJzLnJlcGxhY2UoL1xccj9cXG5bXFx0IF0rL2csICcgJyk7XG4gICAgcHJlUHJvY2Vzc2VkSGVhZGVycy5zcGxpdCgvXFxyP1xcbi8pLmZvckVhY2goZnVuY3Rpb24obGluZSkge1xuICAgICAgdmFyIHBhcnRzID0gbGluZS5zcGxpdCgnOicpO1xuICAgICAgdmFyIGtleSA9IHBhcnRzLnNoaWZ0KCkudHJpbSgpO1xuICAgICAgaWYgKGtleSkge1xuICAgICAgICB2YXIgdmFsdWUgPSBwYXJ0cy5qb2luKCc6JykudHJpbSgpO1xuICAgICAgICBoZWFkZXJzLmFwcGVuZChrZXksIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gaGVhZGVyc1xuICB9XG5cbiAgQm9keS5jYWxsKFJlcXVlc3QucHJvdG90eXBlKTtcblxuICBmdW5jdGlvbiBSZXNwb25zZShib2R5SW5pdCwgb3B0aW9ucykge1xuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIHRoaXMudHlwZSA9ICdkZWZhdWx0JztcbiAgICB0aGlzLnN0YXR1cyA9IG9wdGlvbnMuc3RhdHVzID09PSB1bmRlZmluZWQgPyAyMDAgOiBvcHRpb25zLnN0YXR1cztcbiAgICB0aGlzLm9rID0gdGhpcy5zdGF0dXMgPj0gMjAwICYmIHRoaXMuc3RhdHVzIDwgMzAwO1xuICAgIHRoaXMuc3RhdHVzVGV4dCA9ICdzdGF0dXNUZXh0JyBpbiBvcHRpb25zID8gb3B0aW9ucy5zdGF0dXNUZXh0IDogJ09LJztcbiAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpO1xuICAgIHRoaXMudXJsID0gb3B0aW9ucy51cmwgfHwgJyc7XG4gICAgdGhpcy5faW5pdEJvZHkoYm9keUluaXQpO1xuICB9XG5cbiAgQm9keS5jYWxsKFJlc3BvbnNlLnByb3RvdHlwZSk7XG5cbiAgUmVzcG9uc2UucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBSZXNwb25zZSh0aGlzLl9ib2R5SW5pdCwge1xuICAgICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICAgIHN0YXR1c1RleHQ6IHRoaXMuc3RhdHVzVGV4dCxcbiAgICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHRoaXMuaGVhZGVycyksXG4gICAgICB1cmw6IHRoaXMudXJsXG4gICAgfSlcbiAgfTtcblxuICBSZXNwb25zZS5lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByZXNwb25zZSA9IG5ldyBSZXNwb25zZShudWxsLCB7c3RhdHVzOiAwLCBzdGF0dXNUZXh0OiAnJ30pO1xuICAgIHJlc3BvbnNlLnR5cGUgPSAnZXJyb3InO1xuICAgIHJldHVybiByZXNwb25zZVxuICB9O1xuXG4gIHZhciByZWRpcmVjdFN0YXR1c2VzID0gWzMwMSwgMzAyLCAzMDMsIDMwNywgMzA4XTtcblxuICBSZXNwb25zZS5yZWRpcmVjdCA9IGZ1bmN0aW9uKHVybCwgc3RhdHVzKSB7XG4gICAgaWYgKHJlZGlyZWN0U3RhdHVzZXMuaW5kZXhPZihzdGF0dXMpID09PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgc3RhdHVzIGNvZGUnKVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgUmVzcG9uc2UobnVsbCwge3N0YXR1czogc3RhdHVzLCBoZWFkZXJzOiB7bG9jYXRpb246IHVybH19KVxuICB9O1xuXG4gIGV4cG9ydHMuRE9NRXhjZXB0aW9uID0gc2VsZi5ET01FeGNlcHRpb247XG4gIHRyeSB7XG4gICAgbmV3IGV4cG9ydHMuRE9NRXhjZXB0aW9uKCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGV4cG9ydHMuRE9NRXhjZXB0aW9uID0gZnVuY3Rpb24obWVzc2FnZSwgbmFtZSkge1xuICAgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICB2YXIgZXJyb3IgPSBFcnJvcihtZXNzYWdlKTtcbiAgICAgIHRoaXMuc3RhY2sgPSBlcnJvci5zdGFjaztcbiAgICB9O1xuICAgIGV4cG9ydHMuRE9NRXhjZXB0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTtcbiAgICBleHBvcnRzLkRPTUV4Y2VwdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBleHBvcnRzLkRPTUV4Y2VwdGlvbjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZldGNoKGlucHV0LCBpbml0KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIHJlcXVlc3QgPSBuZXcgUmVxdWVzdChpbnB1dCwgaW5pdCk7XG5cbiAgICAgIGlmIChyZXF1ZXN0LnNpZ25hbCAmJiByZXF1ZXN0LnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgIHJldHVybiByZWplY3QobmV3IGV4cG9ydHMuRE9NRXhjZXB0aW9uKCdBYm9ydGVkJywgJ0Fib3J0RXJyb3InKSlcbiAgICAgIH1cblxuICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXG4gICAgICBmdW5jdGlvbiBhYm9ydFhocigpIHtcbiAgICAgICAgeGhyLmFib3J0KCk7XG4gICAgICB9XG5cbiAgICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgICAgc3RhdHVzOiB4aHIuc3RhdHVzLFxuICAgICAgICAgIHN0YXR1c1RleHQ6IHhoci5zdGF0dXNUZXh0LFxuICAgICAgICAgIGhlYWRlcnM6IHBhcnNlSGVhZGVycyh4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkgfHwgJycpXG4gICAgICAgIH07XG4gICAgICAgIG9wdGlvbnMudXJsID0gJ3Jlc3BvbnNlVVJMJyBpbiB4aHIgPyB4aHIucmVzcG9uc2VVUkwgOiBvcHRpb25zLmhlYWRlcnMuZ2V0KCdYLVJlcXVlc3QtVVJMJyk7XG4gICAgICAgIHZhciBib2R5ID0gJ3Jlc3BvbnNlJyBpbiB4aHIgPyB4aHIucmVzcG9uc2UgOiB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICByZXNvbHZlKG5ldyBSZXNwb25zZShib2R5LCBvcHRpb25zKSk7XG4gICAgICB9O1xuXG4gICAgICB4aHIub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZWplY3QobmV3IFR5cGVFcnJvcignTmV0d29yayByZXF1ZXN0IGZhaWxlZCcpKTtcbiAgICAgIH07XG5cbiAgICAgIHhoci5vbnRpbWVvdXQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ05ldHdvcmsgcmVxdWVzdCBmYWlsZWQnKSk7XG4gICAgICB9O1xuXG4gICAgICB4aHIub25hYm9ydCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZWplY3QobmV3IGV4cG9ydHMuRE9NRXhjZXB0aW9uKCdBYm9ydGVkJywgJ0Fib3J0RXJyb3InKSk7XG4gICAgICB9O1xuXG4gICAgICB4aHIub3BlbihyZXF1ZXN0Lm1ldGhvZCwgcmVxdWVzdC51cmwsIHRydWUpO1xuXG4gICAgICBpZiAocmVxdWVzdC5jcmVkZW50aWFscyA9PT0gJ2luY2x1ZGUnKSB7XG4gICAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnb21pdCcpIHtcbiAgICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoJ3Jlc3BvbnNlVHlwZScgaW4geGhyICYmIHN1cHBvcnQuYmxvYikge1xuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2Jsb2InO1xuICAgICAgfVxuXG4gICAgICByZXF1ZXN0LmhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihuYW1lLCB2YWx1ZSk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKHJlcXVlc3Quc2lnbmFsKSB7XG4gICAgICAgIHJlcXVlc3Quc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnRYaHIpO1xuXG4gICAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAvLyBET05FIChzdWNjZXNzIG9yIGZhaWx1cmUpXG4gICAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09PSA0KSB7XG4gICAgICAgICAgICByZXF1ZXN0LnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0WGhyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHhoci5zZW5kKHR5cGVvZiByZXF1ZXN0Ll9ib2R5SW5pdCA9PT0gJ3VuZGVmaW5lZCcgPyBudWxsIDogcmVxdWVzdC5fYm9keUluaXQpO1xuICAgIH0pXG4gIH1cblxuICBmZXRjaC5wb2x5ZmlsbCA9IHRydWU7XG5cbiAgaWYgKCFzZWxmLmZldGNoKSB7XG4gICAgc2VsZi5mZXRjaCA9IGZldGNoO1xuICAgIHNlbGYuSGVhZGVycyA9IEhlYWRlcnM7XG4gICAgc2VsZi5SZXF1ZXN0ID0gUmVxdWVzdDtcbiAgICBzZWxmLlJlc3BvbnNlID0gUmVzcG9uc2U7XG4gIH1cblxuICBleHBvcnRzLkhlYWRlcnMgPSBIZWFkZXJzO1xuICBleHBvcnRzLlJlcXVlc3QgPSBSZXF1ZXN0O1xuICBleHBvcnRzLlJlc3BvbnNlID0gUmVzcG9uc2U7XG4gIGV4cG9ydHMuZmV0Y2ggPSBmZXRjaDtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG4gIHJldHVybiBleHBvcnRzO1xuXG59KHt9KSk7XG59KShfX3NlbGZfXyk7XG5fX3NlbGZfXy5mZXRjaC5wb255ZmlsbCA9IHRydWU7XG4vLyBSZW1vdmUgXCJwb2x5ZmlsbFwiIHByb3BlcnR5IGFkZGVkIGJ5IHdoYXR3Zy1mZXRjaFxuZGVsZXRlIF9fc2VsZl9fLmZldGNoLnBvbHlmaWxsO1xuLy8gQ2hvb3NlIGJldHdlZW4gbmF0aXZlIGltcGxlbWVudGF0aW9uIChnbG9iYWwpIG9yIGN1c3RvbSBpbXBsZW1lbnRhdGlvbiAoX19zZWxmX18pXG4vLyB2YXIgY3R4ID0gZ2xvYmFsLmZldGNoID8gZ2xvYmFsIDogX19zZWxmX187XG52YXIgY3R4ID0gX19zZWxmX187IC8vIHRoaXMgbGluZSBkaXNhYmxlIHNlcnZpY2Ugd29ya2VyIHN1cHBvcnQgdGVtcG9yYXJpbHlcbmV4cG9ydHMgPSBjdHguZmV0Y2ggLy8gVG8gZW5hYmxlOiBpbXBvcnQgZmV0Y2ggZnJvbSAnY3Jvc3MtZmV0Y2gnXG5leHBvcnRzLmRlZmF1bHQgPSBjdHguZmV0Y2ggLy8gRm9yIFR5cGVTY3JpcHQgY29uc3VtZXJzIHdpdGhvdXQgZXNNb2R1bGVJbnRlcm9wLlxuZXhwb3J0cy5mZXRjaCA9IGN0eC5mZXRjaCAvLyBUbyBlbmFibGU6IGltcG9ydCB7ZmV0Y2h9IGZyb20gJ2Nyb3NzLWZldGNoJ1xuZXhwb3J0cy5IZWFkZXJzID0gY3R4LkhlYWRlcnNcbmV4cG9ydHMuUmVxdWVzdCA9IGN0eC5SZXF1ZXN0XG5leHBvcnRzLlJlc3BvbnNlID0gY3R4LlJlc3BvbnNlXG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNcbiIsIi8qKlxuICogQGZpbGUgQ29udmVydGVyIEFwcGxpY2F0aW9uLlxuICovXG5pbXBvcnQgQ29udmVydGVyIGZyb20gJy4vY29udmVydGVyJztcblxuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggJ0RPTUNvbnRlbnRMb2FkZWQnLCAoKSA9PiB7XG5cdG5ldyBDb252ZXJ0ZXIoKTtcbn0gKTtcbiIsIi8qKlxuICogQGZpbGUgY2xhc3MgQ29udmVydGVyLlxuICovXG5cbmNsYXNzIENvbnZlcnRlciB7XG5cdC8qKlxuXHQgKiBDbGFzcyBjb25zdHJ1Y3Rvci5cblx0ICovXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuQ09OVkVSVF9GT1JNX1NFTEVDVE9SID0gJyNjdGwtY29udmVydC1leGlzdGluZy1zbHVncyc7XG5cdFx0dGhpcy5DT05WRVJUX0JVVFRPTl9TRUxFQ1RPUiA9ICcjY3RsLWNvbnZlcnQtYnV0dG9uJztcblx0XHR0aGlzLkNPTkZJUk1fUE9QVVBfU0VMRUNUT1IgPSAnI2N0bC1jb25maXJtLXBvcHVwJztcblx0XHR0aGlzLkNPTkZJUk1fT0tfU0VMRUNUT1IgPSAnI2N0bC1jb25maXJtLW9rJztcblx0XHR0aGlzLkNPTkZJUk1fQ0FOQ0VMX1NFTEVDVE9SID0gJyNjdGwtY29uZmlybS1jYW5jZWwnO1xuXG5cdFx0dGhpcy5jb25maXJtUG9wdXAgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuXHRcdFx0dGhpcy5DT05GSVJNX1BPUFVQX1NFTEVDVE9SXG5cdFx0KTtcblxuXHRcdHRoaXMuYmluZEV2ZW50cygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEJpbmQgZXZlbnRzIHRvIG1ldGhvZHMuXG5cdCAqL1xuXHRiaW5kRXZlbnRzKCkge1xuXHRcdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIHRoaXMuQ09OVkVSVF9CVVRUT05fU0VMRUNUT1IgKS5vbmNsaWNrID0gKFxuXHRcdFx0ZXZlbnRcblx0XHQpID0+IHtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHR0aGlzLmNvbmZpcm1Qb3B1cC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9O1xuXG5cdFx0dGhpcy5jb25maXJtUG9wdXAub25jbGljayA9ICgpID0+IHtcblx0XHRcdHRoaXMuaGlkZUNvbmZpcm1Qb3B1cCgpO1xuXHRcdH07XG5cblx0XHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCB0aGlzLkNPTkZJUk1fT0tfU0VMRUNUT1IgKS5vbmNsaWNrID0gKFxuXHRcdFx0ZXZlbnRcblx0XHQpID0+IHtcblx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0dGhpcy5oaWRlQ29uZmlybVBvcHVwKCk7XG5cdFx0XHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCB0aGlzLkNPTlZFUlRfRk9STV9TRUxFQ1RPUiApLnN1Ym1pdCgpO1xuXHRcdH07XG5cblx0XHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCB0aGlzLkNPTkZJUk1fQ0FOQ0VMX1NFTEVDVE9SICkub25jbGljayA9IChcblx0XHRcdGV2ZW50XG5cdFx0KSA9PiB7XG5cdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdHRoaXMuaGlkZUNvbmZpcm1Qb3B1cCgpO1xuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogSGlkZSBjb25maXJtYXRpb24gcG9wdXAuXG5cdCAqL1xuXHRoaWRlQ29uZmlybVBvcHVwKCkge1xuXHRcdHRoaXMuY29uZmlybVBvcHVwLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29udmVydGVyO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==
1
  !function(t){var e={};function r(n){if(e[n])return e[n].exports;var o=e[n]={i:n,l:!1,exports:{}};return t[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=t,r.c=e,r.d=function(t,e,n){r.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.t=function(t,e){if(1&e&&(t=r(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)r.d(n,o,function(e){return t[e]}.bind(null,o));return n},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,"a",e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p="",r(r.s=0)}([function(t,e,r){r(1),t.exports=r(2)},function(t,e){var r="undefined"!=typeof self?self:this,n=function(){function t(){this.fetch=!1,this.DOMException=r.DOMException}return t.prototype=r,new t}();!function(t){!function(e){var r="URLSearchParams"in t,n="Symbol"in t&&"iterator"in Symbol,o="FileReader"in t&&"Blob"in t&&function(){try{return new Blob,!0}catch(t){return!1}}(),i="FormData"in t,s="ArrayBuffer"in t;if(s)var a=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],u=ArrayBuffer.isView||function(t){return t&&a.indexOf(Object.prototype.toString.call(t))>-1};function c(t){if("string"!=typeof t&&(t=String(t)),/[^a-z0-9\-#$%&'*+.^_`|~]/i.test(t))throw new TypeError("Invalid character in header field name");return t.toLowerCase()}function f(t){return"string"!=typeof t&&(t=String(t)),t}function h(t){var e={next:function(){var e=t.shift();return{done:void 0===e,value:e}}};return n&&(e[Symbol.iterator]=function(){return e}),e}function d(t){this.map={},t instanceof d?t.forEach((function(t,e){this.append(e,t)}),this):Array.isArray(t)?t.forEach((function(t){this.append(t[0],t[1])}),this):t&&Object.getOwnPropertyNames(t).forEach((function(e){this.append(e,t[e])}),this)}function l(t){if(t.bodyUsed)return Promise.reject(new TypeError("Already read"));t.bodyUsed=!0}function p(t){return new Promise((function(e,r){t.onload=function(){e(t.result)},t.onerror=function(){r(t.error)}}))}function y(t){var e=new FileReader,r=p(e);return e.readAsArrayBuffer(t),r}function b(t){if(t.slice)return t.slice(0);var e=new Uint8Array(t.byteLength);return e.set(new Uint8Array(t)),e.buffer}function m(){return this.bodyUsed=!1,this._initBody=function(t){var e;this._bodyInit=t,t?"string"==typeof t?this._bodyText=t:o&&Blob.prototype.isPrototypeOf(t)?this._bodyBlob=t:i&&FormData.prototype.isPrototypeOf(t)?this._bodyFormData=t:r&&URLSearchParams.prototype.isPrototypeOf(t)?this._bodyText=t.toString():s&&o&&((e=t)&&DataView.prototype.isPrototypeOf(e))?(this._bodyArrayBuffer=b(t.buffer),this._bodyInit=new Blob([this._bodyArrayBuffer])):s&&(ArrayBuffer.prototype.isPrototypeOf(t)||u(t))?this._bodyArrayBuffer=b(t):this._bodyText=t=Object.prototype.toString.call(t):this._bodyText="",this.headers.get("content-type")||("string"==typeof t?this.headers.set("content-type","text/plain;charset=UTF-8"):this._bodyBlob&&this._bodyBlob.type?this.headers.set("content-type",this._bodyBlob.type):r&&URLSearchParams.prototype.isPrototypeOf(t)&&this.headers.set("content-type","application/x-www-form-urlencoded;charset=UTF-8"))},o&&(this.blob=function(){var t=l(this);if(t)return t;if(this._bodyBlob)return Promise.resolve(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(new Blob([this._bodyArrayBuffer]));if(this._bodyFormData)throw new Error("could not read FormData body as blob");return Promise.resolve(new Blob([this._bodyText]))},this.arrayBuffer=function(){return this._bodyArrayBuffer?l(this)||Promise.resolve(this._bodyArrayBuffer):this.blob().then(y)}),this.text=function(){var t,e,r,n=l(this);if(n)return n;if(this._bodyBlob)return t=this._bodyBlob,e=new FileReader,r=p(e),e.readAsText(t),r;if(this._bodyArrayBuffer)return Promise.resolve(function(t){for(var e=new Uint8Array(t),r=new Array(e.length),n=0;n<e.length;n++)r[n]=String.fromCharCode(e[n]);return r.join("")}(this._bodyArrayBuffer));if(this._bodyFormData)throw new Error("could not read FormData body as text");return Promise.resolve(this._bodyText)},i&&(this.formData=function(){return this.text().then(O)}),this.json=function(){return this.text().then(JSON.parse)},this}d.prototype.append=function(t,e){t=c(t),e=f(e);var r=this.map[t];this.map[t]=r?r+", "+e:e},d.prototype.delete=function(t){delete this.map[c(t)]},d.prototype.get=function(t){return t=c(t),this.has(t)?this.map[t]:null},d.prototype.has=function(t){return this.map.hasOwnProperty(c(t))},d.prototype.set=function(t,e){this.map[c(t)]=f(e)},d.prototype.forEach=function(t,e){for(var r in this.map)this.map.hasOwnProperty(r)&&t.call(e,this.map[r],r,this)},d.prototype.keys=function(){var t=[];return this.forEach((function(e,r){t.push(r)})),h(t)},d.prototype.values=function(){var t=[];return this.forEach((function(e){t.push(e)})),h(t)},d.prototype.entries=function(){var t=[];return this.forEach((function(e,r){t.push([r,e])})),h(t)},n&&(d.prototype[Symbol.iterator]=d.prototype.entries);var E=["DELETE","GET","HEAD","OPTIONS","POST","PUT"];function v(t,e){var r,n,o=(e=e||{}).body;if(t instanceof v){if(t.bodyUsed)throw new TypeError("Already read");this.url=t.url,this.credentials=t.credentials,e.headers||(this.headers=new d(t.headers)),this.method=t.method,this.mode=t.mode,this.signal=t.signal,o||null==t._bodyInit||(o=t._bodyInit,t.bodyUsed=!0)}else this.url=String(t);if(this.credentials=e.credentials||this.credentials||"same-origin",!e.headers&&this.headers||(this.headers=new d(e.headers)),this.method=(r=e.method||this.method||"GET",n=r.toUpperCase(),E.indexOf(n)>-1?n:r),this.mode=e.mode||this.mode||null,this.signal=e.signal||this.signal,this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&o)throw new TypeError("Body not allowed for GET or HEAD requests");this._initBody(o)}function O(t){var e=new FormData;return t.trim().split("&").forEach((function(t){if(t){var r=t.split("="),n=r.shift().replace(/\+/g," "),o=r.join("=").replace(/\+/g," ");e.append(decodeURIComponent(n),decodeURIComponent(o))}})),e}function _(t,e){e||(e={}),this.type="default",this.status=void 0===e.status?200:e.status,this.ok=this.status>=200&&this.status<300,this.statusText="statusText"in e?e.statusText:"OK",this.headers=new d(e.headers),this.url=e.url||"",this._initBody(t)}v.prototype.clone=function(){return new v(this,{body:this._bodyInit})},m.call(v.prototype),m.call(_.prototype),_.prototype.clone=function(){return new _(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new d(this.headers),url:this.url})},_.error=function(){var t=new _(null,{status:0,statusText:""});return t.type="error",t};var w=[301,302,303,307,308];_.redirect=function(t,e){if(-1===w.indexOf(e))throw new RangeError("Invalid status code");return new _(null,{status:e,headers:{location:t}})},e.DOMException=t.DOMException;try{new e.DOMException}catch(t){e.DOMException=function(t,e){this.message=t,this.name=e;var r=Error(t);this.stack=r.stack},e.DOMException.prototype=Object.create(Error.prototype),e.DOMException.prototype.constructor=e.DOMException}function T(t,r){return new Promise((function(n,i){var s=new v(t,r);if(s.signal&&s.signal.aborted)return i(new e.DOMException("Aborted","AbortError"));var a=new XMLHttpRequest;function u(){a.abort()}a.onload=function(){var t,e,r={status:a.status,statusText:a.statusText,headers:(t=a.getAllResponseHeaders()||"",e=new d,t.replace(/\r?\n[\t ]+/g," ").split(/\r?\n/).forEach((function(t){var r=t.split(":"),n=r.shift().trim();if(n){var o=r.join(":").trim();e.append(n,o)}})),e)};r.url="responseURL"in a?a.responseURL:r.headers.get("X-Request-URL");var o="response"in a?a.response:a.responseText;n(new _(o,r))},a.onerror=function(){i(new TypeError("Network request failed"))},a.ontimeout=function(){i(new TypeError("Network request failed"))},a.onabort=function(){i(new e.DOMException("Aborted","AbortError"))},a.open(s.method,s.url,!0),"include"===s.credentials?a.withCredentials=!0:"omit"===s.credentials&&(a.withCredentials=!1),"responseType"in a&&o&&(a.responseType="blob"),s.headers.forEach((function(t,e){a.setRequestHeader(e,t)})),s.signal&&(s.signal.addEventListener("abort",u),a.onreadystatechange=function(){4===a.readyState&&s.signal.removeEventListener("abort",u)}),a.send(void 0===s._bodyInit?null:s._bodyInit)}))}T.polyfill=!0,t.fetch||(t.fetch=T,t.Headers=d,t.Request=v,t.Response=_),e.Headers=d,e.Request=v,e.Response=_,e.fetch=T,Object.defineProperty(e,"__esModule",{value:!0})}({})}(n),n.fetch.ponyfill=!0,delete n.fetch.polyfill;var o=n;(e=o.fetch).default=o.fetch,e.fetch=o.fetch,e.Headers=o.Headers,e.Request=o.Request,e.Response=o.Response,t.exports=e},function(t,e,r){"use strict";var n,o=r(3),i=(n=o)&&n.__esModule?n:{default:n};document.addEventListener("DOMContentLoaded",(function(){new i.default}))},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}();var o=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.CONVERT_FORM_SELECTOR="#ctl-convert-existing-slugs",this.CONVERT_BUTTON_SELECTOR="#ctl-convert-button",this.CONFIRM_POPUP_SELECTOR="#ctl-confirm-popup",this.CONFIRM_OK_SELECTOR="#ctl-confirm-ok",this.CONFIRM_CANCEL_SELECTOR="#ctl-confirm-cancel",this.confirmPopup=document.querySelector(this.CONFIRM_POPUP_SELECTOR),this.bindEvents()}return n(t,[{key:"bindEvents",value:function(){var t=this;document.querySelector(this.CONVERT_BUTTON_SELECTOR).onclick=function(e){return e.preventDefault(),t.confirmPopup.style.display="block",!1},this.confirmPopup.onclick=function(){t.hideConfirmPopup()},document.querySelector(this.CONFIRM_OK_SELECTOR).onclick=function(e){e.stopPropagation(),t.hideConfirmPopup(),document.querySelector(t.CONVERT_FORM_SELECTOR).submit()},document.querySelector(this.CONFIRM_CANCEL_SELECTOR).onclick=function(e){e.stopPropagation(),t.hideConfirmPopup()}}},{key:"hideConfirmPopup",value:function(){this.confirmPopup.style.display="none"}}]),t}();e.default=o}]);
2
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2Nyb3NzLWZldGNoL2Rpc3QvYnJvd3Nlci1wb255ZmlsbC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvanMvY29udmVydGVyL2FwcC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvanMvY29udmVydGVyL2NvbnZlcnRlci5qcyJdLCJuYW1lcyI6WyJpbnN0YWxsZWRNb2R1bGVzIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiZXhwb3J0cyIsIm1vZHVsZSIsImkiLCJsIiwibW9kdWxlcyIsImNhbGwiLCJtIiwiYyIsImQiLCJuYW1lIiwiZ2V0dGVyIiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsInIiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsInZhbHVlIiwidCIsIm1vZGUiLCJfX2VzTW9kdWxlIiwibnMiLCJjcmVhdGUiLCJrZXkiLCJiaW5kIiwibiIsIm9iamVjdCIsInByb3BlcnR5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJwIiwicyIsImdsb2JhbCIsInNlbGYiLCJ0aGlzIiwiX19zZWxmX18iLCJGIiwiZmV0Y2giLCJET01FeGNlcHRpb24iLCJzdXBwb3J0IiwiQmxvYiIsImUiLCJ2aWV3Q2xhc3NlcyIsImlzQXJyYXlCdWZmZXJWaWV3IiwiQXJyYXlCdWZmZXIiLCJpc1ZpZXciLCJvYmoiLCJpbmRleE9mIiwidG9TdHJpbmciLCJub3JtYWxpemVOYW1lIiwiU3RyaW5nIiwidGVzdCIsIlR5cGVFcnJvciIsInRvTG93ZXJDYXNlIiwibm9ybWFsaXplVmFsdWUiLCJpdGVyYXRvckZvciIsIml0ZW1zIiwiaXRlcmF0b3IiLCJuZXh0Iiwic2hpZnQiLCJkb25lIiwidW5kZWZpbmVkIiwiSGVhZGVycyIsImhlYWRlcnMiLCJtYXAiLCJmb3JFYWNoIiwiYXBwZW5kIiwiQXJyYXkiLCJpc0FycmF5IiwiaGVhZGVyIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImNvbnN1bWVkIiwiYm9keSIsImJvZHlVc2VkIiwiUHJvbWlzZSIsInJlamVjdCIsImZpbGVSZWFkZXJSZWFkeSIsInJlYWRlciIsInJlc29sdmUiLCJvbmxvYWQiLCJyZXN1bHQiLCJvbmVycm9yIiwiZXJyb3IiLCJyZWFkQmxvYkFzQXJyYXlCdWZmZXIiLCJibG9iIiwiRmlsZVJlYWRlciIsInByb21pc2UiLCJyZWFkQXNBcnJheUJ1ZmZlciIsImJ1ZmZlckNsb25lIiwiYnVmIiwic2xpY2UiLCJ2aWV3IiwiVWludDhBcnJheSIsImJ5dGVMZW5ndGgiLCJzZXQiLCJidWZmZXIiLCJCb2R5IiwiX2luaXRCb2R5IiwiX2JvZHlJbml0IiwiX2JvZHlUZXh0IiwiaXNQcm90b3R5cGVPZiIsIl9ib2R5QmxvYiIsIkZvcm1EYXRhIiwiX2JvZHlGb3JtRGF0YSIsIlVSTFNlYXJjaFBhcmFtcyIsIkRhdGFWaWV3IiwiX2JvZHlBcnJheUJ1ZmZlciIsInR5cGUiLCJyZWplY3RlZCIsIkVycm9yIiwiYXJyYXlCdWZmZXIiLCJ0aGVuIiwidGV4dCIsInJlYWRBc1RleHQiLCJjaGFycyIsImxlbmd0aCIsImZyb21DaGFyQ29kZSIsImpvaW4iLCJyZWFkQXJyYXlCdWZmZXJBc1RleHQiLCJmb3JtRGF0YSIsImRlY29kZSIsImpzb24iLCJKU09OIiwicGFyc2UiLCJvbGRWYWx1ZSIsImhhcyIsImNhbGxiYWNrIiwidGhpc0FyZyIsImtleXMiLCJwdXNoIiwidmFsdWVzIiwiZW50cmllcyIsIm1ldGhvZHMiLCJSZXF1ZXN0IiwiaW5wdXQiLCJvcHRpb25zIiwibWV0aG9kIiwidXBjYXNlZCIsInVybCIsImNyZWRlbnRpYWxzIiwic2lnbmFsIiwidG9VcHBlckNhc2UiLCJyZWZlcnJlciIsImZvcm0iLCJ0cmltIiwic3BsaXQiLCJieXRlcyIsInJlcGxhY2UiLCJkZWNvZGVVUklDb21wb25lbnQiLCJSZXNwb25zZSIsImJvZHlJbml0Iiwic3RhdHVzIiwib2siLCJzdGF0dXNUZXh0IiwiY2xvbmUiLCJyZXNwb25zZSIsInJlZGlyZWN0U3RhdHVzZXMiLCJyZWRpcmVjdCIsIlJhbmdlRXJyb3IiLCJsb2NhdGlvbiIsImVyciIsIm1lc3NhZ2UiLCJzdGFjayIsImNvbnN0cnVjdG9yIiwiaW5pdCIsInJlcXVlc3QiLCJhYm9ydGVkIiwieGhyIiwiWE1MSHR0cFJlcXVlc3QiLCJhYm9ydFhociIsImFib3J0IiwicmF3SGVhZGVycyIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsImxpbmUiLCJwYXJ0cyIsInJlc3BvbnNlVVJMIiwicmVzcG9uc2VUZXh0Iiwib250aW1lb3V0Iiwib25hYm9ydCIsIm9wZW4iLCJ3aXRoQ3JlZGVudGlhbHMiLCJyZXNwb25zZVR5cGUiLCJzZXRSZXF1ZXN0SGVhZGVyIiwiYWRkRXZlbnRMaXN0ZW5lciIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlYWR5U3RhdGUiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwic2VuZCIsInBvbHlmaWxsIiwicG9ueWZpbGwiLCJjdHgiLCJkZWZhdWx0IiwiZG9jdW1lbnQiLCJDb252ZXJ0ZXIiLCJDT05WRVJUX0ZPUk1fU0VMRUNUT1IiLCJDT05WRVJUX0JVVFRPTl9TRUxFQ1RPUiIsIkNPTkZJUk1fUE9QVVBfU0VMRUNUT1IiLCJDT05GSVJNX09LX1NFTEVDVE9SIiwiQ09ORklSTV9DQU5DRUxfU0VMRUNUT1IiLCJjb25maXJtUG9wdXAiLCJxdWVyeVNlbGVjdG9yIiwiYmluZEV2ZW50cyIsIm9uY2xpY2siLCJldmVudCIsInByZXZlbnREZWZhdWx0Iiwic3R5bGUiLCJkaXNwbGF5IiwiaGlkZUNvbmZpcm1Qb3B1cCIsInN0b3BQcm9wYWdhdGlvbiIsInN1Ym1pdCJdLCJtYXBwaW5ncyI6ImFBQ0UsSUFBSUEsRUFBbUIsR0FHdkIsU0FBU0MsRUFBb0JDLEdBRzVCLEdBQUdGLEVBQWlCRSxHQUNuQixPQUFPRixFQUFpQkUsR0FBVUMsUUFHbkMsSUFBSUMsRUFBU0osRUFBaUJFLEdBQVksQ0FDekNHLEVB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QyxJQUFJVSxjLDJVQ0ZDQSxFLFdBSUwsYyw0RkFBYyxTQUNiL0osS0FBS2dLLHNCQUF3Qiw4QkFDN0JoSyxLQUFLaUssd0JBQTBCLHNCQUMvQmpLLEtBQUtrSyx1QkFBeUIscUJBQzlCbEssS0FBS21LLG9CQUFzQixrQkFDM0JuSyxLQUFLb0ssd0JBQTBCLHNCQUUvQnBLLEtBQUtxSyxhQUFlUCxTQUFTUSxjQUM1QnRLLEtBQUtrSyx3QkFHTmxLLEtBQUt1SyxhLCtDQU1PLFdBQ1pULFNBQVNRLGNBQWV0SyxLQUFLaUsseUJBQTBCTyxRQUFVLFNBQ2hFQyxHQUlBLE9BRkFBLEVBQU1DLGlCQUNOLEVBQUtMLGFBQWFNLE1BQU1DLFFBQVUsU0FDM0IsR0FHUjVLLEtBQUtxSyxhQUFhRyxRQUFVLFdBQzNCLEVBQUtLLG9CQUdOZixTQUFTUSxjQUFldEssS0FBS21LLHFCQUFzQkssUUFBVSxTQUM1REMsR0FFQUEsRUFBTUssa0JBQ04sRUFBS0QsbUJBQ0xmLFNBQVNRLGNBQWUsRUFBS04sdUJBQXdCZSxVQUd0RGpCLFNBQVNRLGNBQWV0SyxLQUFLb0sseUJBQTBCSSxRQUFVLFNBQ2hFQyxHQUVBQSxFQUFNSyxrQkFDTixFQUFLRCxzQix5Q0FRTjdLLEtBQUtxSyxhQUFhTSxNQUFNQyxRQUFVLFcsZUFJckJiIiwiZmlsZSI6ImNvbnZlcnRlci9hcHAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMCk7XG4iLCJ2YXIgZ2xvYmFsID0gdHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gc2VsZiA6IHRoaXM7XG52YXIgX19zZWxmX18gPSAoZnVuY3Rpb24gKCkge1xuZnVuY3Rpb24gRigpIHtcbnRoaXMuZmV0Y2ggPSBmYWxzZTtcbnRoaXMuRE9NRXhjZXB0aW9uID0gZ2xvYmFsLkRPTUV4Y2VwdGlvblxufVxuRi5wcm90b3R5cGUgPSBnbG9iYWw7XG5yZXR1cm4gbmV3IEYoKTtcbn0pKCk7XG4oZnVuY3Rpb24oc2VsZikge1xuXG52YXIgaXJyZWxldmFudCA9IChmdW5jdGlvbiAoZXhwb3J0cykge1xuXG4gIHZhciBzdXBwb3J0ID0ge1xuICAgIHNlYXJjaFBhcmFtczogJ1VSTFNlYXJjaFBhcmFtcycgaW4gc2VsZixcbiAgICBpdGVyYWJsZTogJ1N5bWJvbCcgaW4gc2VsZiAmJiAnaXRlcmF0b3InIGluIFN5bWJvbCxcbiAgICBibG9iOlxuICAgICAgJ0ZpbGVSZWFkZXInIGluIHNlbGYgJiZcbiAgICAgICdCbG9iJyBpbiBzZWxmICYmXG4gICAgICAoZnVuY3Rpb24oKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbmV3IEJsb2IoKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0pKCksXG4gICAgZm9ybURhdGE6ICdGb3JtRGF0YScgaW4gc2VsZixcbiAgICBhcnJheUJ1ZmZlcjogJ0FycmF5QnVmZmVyJyBpbiBzZWxmXG4gIH07XG5cbiAgZnVuY3Rpb24gaXNEYXRhVmlldyhvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIERhdGFWaWV3LnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKG9iailcbiAgfVxuXG4gIGlmIChzdXBwb3J0LmFycmF5QnVmZmVyKSB7XG4gICAgdmFyIHZpZXdDbGFzc2VzID0gW1xuICAgICAgJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgICAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgICAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgICAgJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgICAgJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICAgICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICAgICdbb2JqZWN0IFVpbnQzMkFycmF5XScsXG4gICAgICAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICAgICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nXG4gICAgXTtcblxuICAgIHZhciBpc0FycmF5QnVmZmVyVmlldyA9XG4gICAgICBBcnJheUJ1ZmZlci5pc1ZpZXcgfHxcbiAgICAgIGZ1bmN0aW9uKG9iaikge1xuICAgICAgICByZXR1cm4gb2JqICYmIHZpZXdDbGFzc2VzLmluZGV4T2YoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikpID4gLTFcbiAgICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBub3JtYWxpemVOYW1lKG5hbWUpIHtcbiAgICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICBuYW1lID0gU3RyaW5nKG5hbWUpO1xuICAgIH1cbiAgICBpZiAoL1teYS16MC05XFwtIyQlJicqKy5eX2B8fl0vaS50ZXN0KG5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGNoYXJhY3RlciBpbiBoZWFkZXIgZmllbGQgbmFtZScpXG4gICAgfVxuICAgIHJldHVybiBuYW1lLnRvTG93ZXJDYXNlKClcbiAgfVxuXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZVZhbHVlKHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHZhbHVlID0gU3RyaW5nKHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cblxuICAvLyBCdWlsZCBhIGRlc3RydWN0aXZlIGl0ZXJhdG9yIGZvciB0aGUgdmFsdWUgbGlzdFxuICBmdW5jdGlvbiBpdGVyYXRvckZvcihpdGVtcykge1xuICAgIHZhciBpdGVyYXRvciA9IHtcbiAgICAgIG5leHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgdmFsdWUgPSBpdGVtcy5zaGlmdCgpO1xuICAgICAgICByZXR1cm4ge2RvbmU6IHZhbHVlID09PSB1bmRlZmluZWQsIHZhbHVlOiB2YWx1ZX1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKHN1cHBvcnQuaXRlcmFibGUpIHtcbiAgICAgIGl0ZXJhdG9yW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBpdGVyYXRvclxuICB9XG5cbiAgZnVuY3Rpb24gSGVhZGVycyhoZWFkZXJzKSB7XG4gICAgdGhpcy5tYXAgPSB7fTtcblxuICAgIGlmIChoZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVycykge1xuICAgICAgaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKG5hbWUsIHZhbHVlKTtcbiAgICAgIH0sIHRoaXMpO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzKSkge1xuICAgICAgaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKGhlYWRlcikge1xuICAgICAgICB0aGlzLmFwcGVuZChoZWFkZXJbMF0sIGhlYWRlclsxXSk7XG4gICAgICB9LCB0aGlzKTtcbiAgICB9IGVsc2UgaWYgKGhlYWRlcnMpIHtcbiAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGhlYWRlcnMpLmZvckVhY2goZnVuY3Rpb24obmFtZSkge1xuICAgICAgICB0aGlzLmFwcGVuZChuYW1lLCBoZWFkZXJzW25hbWVdKTtcbiAgICAgIH0sIHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIEhlYWRlcnMucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gICAgbmFtZSA9IG5vcm1hbGl6ZU5hbWUobmFtZSk7XG4gICAgdmFsdWUgPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSk7XG4gICAgdmFyIG9sZFZhbHVlID0gdGhpcy5tYXBbbmFtZV07XG4gICAgdGhpcy5tYXBbbmFtZV0gPSBvbGRWYWx1ZSA/IG9sZFZhbHVlICsgJywgJyArIHZhbHVlIDogdmFsdWU7XG4gIH07XG5cbiAgSGVhZGVycy5wcm90b3R5cGVbJ2RlbGV0ZSddID0gZnVuY3Rpb24obmFtZSkge1xuICAgIGRlbGV0ZSB0aGlzLm1hcFtub3JtYWxpemVOYW1lKG5hbWUpXTtcbiAgfTtcblxuICBIZWFkZXJzLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgbmFtZSA9IG5vcm1hbGl6ZU5hbWUobmFtZSk7XG4gICAgcmV0dXJuIHRoaXMuaGFzKG5hbWUpID8gdGhpcy5tYXBbbmFtZV0gOiBudWxsXG4gIH07XG5cbiAgSGVhZGVycy5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24obmFtZSkge1xuICAgIHJldHVybiB0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShub3JtYWxpemVOYW1lKG5hbWUpKVxuICB9O1xuXG4gIEhlYWRlcnMucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gICAgdGhpcy5tYXBbbm9ybWFsaXplTmFtZShuYW1lKV0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSk7XG4gIH07XG5cbiAgSGVhZGVycy5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uKGNhbGxiYWNrLCB0aGlzQXJnKSB7XG4gICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLm1hcCkge1xuICAgICAgaWYgKHRoaXMubWFwLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdGhpcy5tYXBbbmFtZV0sIG5hbWUsIHRoaXMpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBIZWFkZXJzLnByb3RvdHlwZS5rZXlzID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGl0ZW1zID0gW107XG4gICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICBpdGVtcy5wdXNoKG5hbWUpO1xuICAgIH0pO1xuICAgIHJldHVybiBpdGVyYXRvckZvcihpdGVtcylcbiAgfTtcblxuICBIZWFkZXJzLnByb3RvdHlwZS52YWx1ZXMgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgaXRlbXMgPSBbXTtcbiAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIGl0ZW1zLnB1c2godmFsdWUpO1xuICAgIH0pO1xuICAgIHJldHVybiBpdGVyYXRvckZvcihpdGVtcylcbiAgfTtcblxuICBIZWFkZXJzLnByb3RvdHlwZS5lbnRyaWVzID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGl0ZW1zID0gW107XG4gICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICBpdGVtcy5wdXNoKFtuYW1lLCB2YWx1ZV0pO1xuICAgIH0pO1xuICAgIHJldHVybiBpdGVyYXRvckZvcihpdGVtcylcbiAgfTtcblxuICBpZiAoc3VwcG9ydC5pdGVyYWJsZSkge1xuICAgIEhlYWRlcnMucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl0gPSBIZWFkZXJzLnByb3RvdHlwZS5lbnRyaWVzO1xuICB9XG5cbiAgZnVuY3Rpb24gY29uc3VtZWQoYm9keSkge1xuICAgIGlmIChib2R5LmJvZHlVc2VkKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFR5cGVFcnJvcignQWxyZWFkeSByZWFkJykpXG4gICAgfVxuICAgIGJvZHkuYm9keVVzZWQgPSB0cnVlO1xuICB9XG5cbiAgZnVuY3Rpb24gZmlsZVJlYWRlclJlYWR5KHJlYWRlcikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmVzb2x2ZShyZWFkZXIucmVzdWx0KTtcbiAgICAgIH07XG4gICAgICByZWFkZXIub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZWplY3QocmVhZGVyLmVycm9yKTtcbiAgICAgIH07XG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWRCbG9iQXNBcnJheUJ1ZmZlcihibG9iKSB7XG4gICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgdmFyIHByb21pc2UgPSBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKTtcbiAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoYmxvYik7XG4gICAgcmV0dXJuIHByb21pc2VcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWRCbG9iQXNUZXh0KGJsb2IpIHtcbiAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICB2YXIgcHJvbWlzZSA9IGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpO1xuICAgIHJlYWRlci5yZWFkQXNUZXh0KGJsb2IpO1xuICAgIHJldHVybiBwcm9taXNlXG4gIH1cblxuICBmdW5jdGlvbiByZWFkQXJyYXlCdWZmZXJBc1RleHQoYnVmKSB7XG4gICAgdmFyIHZpZXcgPSBuZXcgVWludDhBcnJheShidWYpO1xuICAgIHZhciBjaGFycyA9IG5ldyBBcnJheSh2aWV3Lmxlbmd0aCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpZXcubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoYXJzW2ldID0gU3RyaW5nLmZyb21DaGFyQ29kZSh2aWV3W2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIGNoYXJzLmpvaW4oJycpXG4gIH1cblxuICBmdW5jdGlvbiBidWZmZXJDbG9uZShidWYpIHtcbiAgICBpZiAoYnVmLnNsaWNlKSB7XG4gICAgICByZXR1cm4gYnVmLnNsaWNlKDApXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkoYnVmLmJ5dGVMZW5ndGgpO1xuICAgICAgdmlldy5zZXQobmV3IFVpbnQ4QXJyYXkoYnVmKSk7XG4gICAgICByZXR1cm4gdmlldy5idWZmZXJcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBCb2R5KCkge1xuICAgIHRoaXMuYm9keVVzZWQgPSBmYWxzZTtcblxuICAgIHRoaXMuX2luaXRCb2R5ID0gZnVuY3Rpb24oYm9keSkge1xuICAgICAgdGhpcy5fYm9keUluaXQgPSBib2R5O1xuICAgICAgaWYgKCFib2R5KSB7XG4gICAgICAgIHRoaXMuX2JvZHlUZXh0ID0gJyc7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHk7XG4gICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYmxvYiAmJiBCbG9iLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICAgIHRoaXMuX2JvZHlCbG9iID0gYm9keTtcbiAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5mb3JtRGF0YSAmJiBGb3JtRGF0YS5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgICB0aGlzLl9ib2R5Rm9ybURhdGEgPSBib2R5O1xuICAgICAgfSBlbHNlIGlmIChzdXBwb3J0LnNlYXJjaFBhcmFtcyAmJiBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5LnRvU3RyaW5nKCk7XG4gICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIgJiYgc3VwcG9ydC5ibG9iICYmIGlzRGF0YVZpZXcoYm9keSkpIHtcbiAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyID0gYnVmZmVyQ2xvbmUoYm9keS5idWZmZXIpO1xuICAgICAgICAvLyBJRSAxMC0xMSBjYW4ndCBoYW5kbGUgYSBEYXRhVmlldyBib2R5LlxuICAgICAgICB0aGlzLl9ib2R5SW5pdCA9IG5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKTtcbiAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5hcnJheUJ1ZmZlciAmJiAoQXJyYXlCdWZmZXIucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkgfHwgaXNBcnJheUJ1ZmZlclZpZXcoYm9keSkpKSB7XG4gICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlciA9IGJ1ZmZlckNsb25lKGJvZHkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5ID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGJvZHkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuaGVhZGVycy5nZXQoJ2NvbnRlbnQtdHlwZScpKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCAndGV4dC9wbGFpbjtjaGFyc2V0PVVURi04Jyk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUJsb2IgJiYgdGhpcy5fYm9keUJsb2IudHlwZSkge1xuICAgICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsIHRoaXMuX2JvZHlCbG9iLnR5cGUpO1xuICAgICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuc2VhcmNoUGFyYW1zICYmIFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmIChzdXBwb3J0LmJsb2IpIHtcbiAgICAgIHRoaXMuYmxvYiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgcmVqZWN0ZWQgPSBjb25zdW1lZCh0aGlzKTtcbiAgICAgICAgaWYgKHJlamVjdGVkKSB7XG4gICAgICAgICAgcmV0dXJuIHJlamVjdGVkXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fYm9keUJsb2IpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlCbG9iKVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pKVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlGb3JtRGF0YSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyBibG9iJylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5VGV4dF0pKVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICB0aGlzLmFycmF5QnVmZmVyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgICAgICByZXR1cm4gY29uc3VtZWQodGhpcykgfHwgUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5ibG9iKCkudGhlbihyZWFkQmxvYkFzQXJyYXlCdWZmZXIpXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0ID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgcmVqZWN0ZWQgPSBjb25zdW1lZCh0aGlzKTtcbiAgICAgIGlmIChyZWplY3RlZCkge1xuICAgICAgICByZXR1cm4gcmVqZWN0ZWRcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2JvZHlCbG9iKSB7XG4gICAgICAgIHJldHVybiByZWFkQmxvYkFzVGV4dCh0aGlzLl9ib2R5QmxvYilcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVhZEFycmF5QnVmZmVyQXNUZXh0KHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlGb3JtRGF0YSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgdGV4dCcpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlUZXh0KVxuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoc3VwcG9ydC5mb3JtRGF0YSkge1xuICAgICAgdGhpcy5mb3JtRGF0YSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0KCkudGhlbihkZWNvZGUpXG4gICAgICB9O1xuICAgIH1cblxuICAgIHRoaXMuanNvbiA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oSlNPTi5wYXJzZSlcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8vIEhUVFAgbWV0aG9kcyB3aG9zZSBjYXBpdGFsaXphdGlvbiBzaG91bGQgYmUgbm9ybWFsaXplZFxuICB2YXIgbWV0aG9kcyA9IFsnREVMRVRFJywgJ0dFVCcsICdIRUFEJywgJ09QVElPTlMnLCAnUE9TVCcsICdQVVQnXTtcblxuICBmdW5jdGlvbiBub3JtYWxpemVNZXRob2QobWV0aG9kKSB7XG4gICAgdmFyIHVwY2FzZWQgPSBtZXRob2QudG9VcHBlckNhc2UoKTtcbiAgICByZXR1cm4gbWV0aG9kcy5pbmRleE9mKHVwY2FzZWQpID4gLTEgPyB1cGNhc2VkIDogbWV0aG9kXG4gIH1cblxuICBmdW5jdGlvbiBSZXF1ZXN0KGlucHV0LCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgdmFyIGJvZHkgPSBvcHRpb25zLmJvZHk7XG5cbiAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7XG4gICAgICBpZiAoaW5wdXQuYm9keVVzZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQWxyZWFkeSByZWFkJylcbiAgICAgIH1cbiAgICAgIHRoaXMudXJsID0gaW5wdXQudXJsO1xuICAgICAgdGhpcy5jcmVkZW50aWFscyA9IGlucHV0LmNyZWRlbnRpYWxzO1xuICAgICAgaWYgKCFvcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzID0gbmV3IEhlYWRlcnMoaW5wdXQuaGVhZGVycyk7XG4gICAgICB9XG4gICAgICB0aGlzLm1ldGhvZCA9IGlucHV0Lm1ldGhvZDtcbiAgICAgIHRoaXMubW9kZSA9IGlucHV0Lm1vZGU7XG4gICAgICB0aGlzLnNpZ25hbCA9IGlucHV0LnNpZ25hbDtcbiAgICAgIGlmICghYm9keSAmJiBpbnB1dC5fYm9keUluaXQgIT0gbnVsbCkge1xuICAgICAgICBib2R5ID0gaW5wdXQuX2JvZHlJbml0O1xuICAgICAgICBpbnB1dC5ib2R5VXNlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudXJsID0gU3RyaW5nKGlucHV0KTtcbiAgICB9XG5cbiAgICB0aGlzLmNyZWRlbnRpYWxzID0gb3B0aW9ucy5jcmVkZW50aWFscyB8fCB0aGlzLmNyZWRlbnRpYWxzIHx8ICdzYW1lLW9yaWdpbic7XG4gICAgaWYgKG9wdGlvbnMuaGVhZGVycyB8fCAhdGhpcy5oZWFkZXJzKSB7XG4gICAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpO1xuICAgIH1cbiAgICB0aGlzLm1ldGhvZCA9IG5vcm1hbGl6ZU1ldGhvZChvcHRpb25zLm1ldGhvZCB8fCB0aGlzLm1ldGhvZCB8fCAnR0VUJyk7XG4gICAgdGhpcy5tb2RlID0gb3B0aW9ucy5tb2RlIHx8IHRoaXMubW9kZSB8fCBudWxsO1xuICAgIHRoaXMuc2lnbmFsID0gb3B0aW9ucy5zaWduYWwgfHwgdGhpcy5zaWduYWw7XG4gICAgdGhpcy5yZWZlcnJlciA9IG51bGw7XG5cbiAgICBpZiAoKHRoaXMubWV0aG9kID09PSAnR0VUJyB8fCB0aGlzLm1ldGhvZCA9PT0gJ0hFQUQnKSAmJiBib2R5KSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCb2R5IG5vdCBhbGxvd2VkIGZvciBHRVQgb3IgSEVBRCByZXF1ZXN0cycpXG4gICAgfVxuICAgIHRoaXMuX2luaXRCb2R5KGJvZHkpO1xuICB9XG5cbiAgUmVxdWVzdC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFJlcXVlc3QodGhpcywge2JvZHk6IHRoaXMuX2JvZHlJbml0fSlcbiAgfTtcblxuICBmdW5jdGlvbiBkZWNvZGUoYm9keSkge1xuICAgIHZhciBmb3JtID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgYm9keVxuICAgICAgLnRyaW0oKVxuICAgICAgLnNwbGl0KCcmJylcbiAgICAgIC5mb3JFYWNoKGZ1bmN0aW9uKGJ5dGVzKSB7XG4gICAgICAgIGlmIChieXRlcykge1xuICAgICAgICAgIHZhciBzcGxpdCA9IGJ5dGVzLnNwbGl0KCc9Jyk7XG4gICAgICAgICAgdmFyIG5hbWUgPSBzcGxpdC5zaGlmdCgpLnJlcGxhY2UoL1xcKy9nLCAnICcpO1xuICAgICAgICAgIHZhciB2YWx1ZSA9IHNwbGl0LmpvaW4oJz0nKS5yZXBsYWNlKC9cXCsvZywgJyAnKTtcbiAgICAgICAgICBmb3JtLmFwcGVuZChkZWNvZGVVUklDb21wb25lbnQobmFtZSksIGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICByZXR1cm4gZm9ybVxuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpIHtcbiAgICB2YXIgaGVhZGVycyA9IG5ldyBIZWFkZXJzKCk7XG4gICAgLy8gUmVwbGFjZSBpbnN0YW5jZXMgb2YgXFxyXFxuIGFuZCBcXG4gZm9sbG93ZWQgYnkgYXQgbGVhc3Qgb25lIHNwYWNlIG9yIGhvcml6b250YWwgdGFiIHdpdGggYSBzcGFjZVxuICAgIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4yXG4gICAgdmFyIHByZVByb2Nlc3NlZEhlYWRlcnMgPSByYXdIZWFkZXJzLnJlcGxhY2UoL1xccj9cXG5bXFx0IF0rL2csICcgJyk7XG4gICAgcHJlUHJvY2Vzc2VkSGVhZGVycy5zcGxpdCgvXFxyP1xcbi8pLmZvckVhY2goZnVuY3Rpb24obGluZSkge1xuICAgICAgdmFyIHBhcnRzID0gbGluZS5zcGxpdCgnOicpO1xuICAgICAgdmFyIGtleSA9IHBhcnRzLnNoaWZ0KCkudHJpbSgpO1xuICAgICAgaWYgKGtleSkge1xuICAgICAgICB2YXIgdmFsdWUgPSBwYXJ0cy5qb2luKCc6JykudHJpbSgpO1xuICAgICAgICBoZWFkZXJzLmFwcGVuZChrZXksIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gaGVhZGVyc1xuICB9XG5cbiAgQm9keS5jYWxsKFJlcXVlc3QucHJvdG90eXBlKTtcblxuICBmdW5jdGlvbiBSZXNwb25zZShib2R5SW5pdCwgb3B0aW9ucykge1xuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIHRoaXMudHlwZSA9ICdkZWZhdWx0JztcbiAgICB0aGlzLnN0YXR1cyA9IG9wdGlvbnMuc3RhdHVzID09PSB1bmRlZmluZWQgPyAyMDAgOiBvcHRpb25zLnN0YXR1cztcbiAgICB0aGlzLm9rID0gdGhpcy5zdGF0dXMgPj0gMjAwICYmIHRoaXMuc3RhdHVzIDwgMzAwO1xuICAgIHRoaXMuc3RhdHVzVGV4dCA9ICdzdGF0dXNUZXh0JyBpbiBvcHRpb25zID8gb3B0aW9ucy5zdGF0dXNUZXh0IDogJ09LJztcbiAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpO1xuICAgIHRoaXMudXJsID0gb3B0aW9ucy51cmwgfHwgJyc7XG4gICAgdGhpcy5faW5pdEJvZHkoYm9keUluaXQpO1xuICB9XG5cbiAgQm9keS5jYWxsKFJlc3BvbnNlLnByb3RvdHlwZSk7XG5cbiAgUmVzcG9uc2UucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBSZXNwb25zZSh0aGlzLl9ib2R5SW5pdCwge1xuICAgICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICAgIHN0YXR1c1RleHQ6IHRoaXMuc3RhdHVzVGV4dCxcbiAgICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHRoaXMuaGVhZGVycyksXG4gICAgICB1cmw6IHRoaXMudXJsXG4gICAgfSlcbiAgfTtcblxuICBSZXNwb25zZS5lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByZXNwb25zZSA9IG5ldyBSZXNwb25zZShudWxsLCB7c3RhdHVzOiAwLCBzdGF0dXNUZXh0OiAnJ30pO1xuICAgIHJlc3BvbnNlLnR5cGUgPSAnZXJyb3InO1xuICAgIHJldHVybiByZXNwb25zZVxuICB9O1xuXG4gIHZhciByZWRpcmVjdFN0YXR1c2VzID0gWzMwMSwgMzAyLCAzMDMsIDMwNywgMzA4XTtcblxuICBSZXNwb25zZS5yZWRpcmVjdCA9IGZ1bmN0aW9uKHVybCwgc3RhdHVzKSB7XG4gICAgaWYgKHJlZGlyZWN0U3RhdHVzZXMuaW5kZXhPZihzdGF0dXMpID09PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgc3RhdHVzIGNvZGUnKVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgUmVzcG9uc2UobnVsbCwge3N0YXR1czogc3RhdHVzLCBoZWFkZXJzOiB7bG9jYXRpb246IHVybH19KVxuICB9O1xuXG4gIGV4cG9ydHMuRE9NRXhjZXB0aW9uID0gc2VsZi5ET01FeGNlcHRpb247XG4gIHRyeSB7XG4gICAgbmV3IGV4cG9ydHMuRE9NRXhjZXB0aW9uKCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGV4cG9ydHMuRE9NRXhjZXB0aW9uID0gZnVuY3Rpb24obWVzc2FnZSwgbmFtZSkge1xuICAgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICB2YXIgZXJyb3IgPSBFcnJvcihtZXNzYWdlKTtcbiAgICAgIHRoaXMuc3RhY2sgPSBlcnJvci5zdGFjaztcbiAgICB9O1xuICAgIGV4cG9ydHMuRE9NRXhjZXB0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTtcbiAgICBleHBvcnRzLkRPTUV4Y2VwdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBleHBvcnRzLkRPTUV4Y2VwdGlvbjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZldGNoKGlucHV0LCBpbml0KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIHJlcXVlc3QgPSBuZXcgUmVxdWVzdChpbnB1dCwgaW5pdCk7XG5cbiAgICAgIGlmIChyZXF1ZXN0LnNpZ25hbCAmJiByZXF1ZXN0LnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgIHJldHVybiByZWplY3QobmV3IGV4cG9ydHMuRE9NRXhjZXB0aW9uKCdBYm9ydGVkJywgJ0Fib3J0RXJyb3InKSlcbiAgICAgIH1cblxuICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXG4gICAgICBmdW5jdGlvbiBhYm9ydFhocigpIHtcbiAgICAgICAgeGhyLmFib3J0KCk7XG4gICAgICB9XG5cbiAgICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgICAgc3RhdHVzOiB4aHIuc3RhdHVzLFxuICAgICAgICAgIHN0YXR1c1RleHQ6IHhoci5zdGF0dXNUZXh0LFxuICAgICAgICAgIGhlYWRlcnM6IHBhcnNlSGVhZGVycyh4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkgfHwgJycpXG4gICAgICAgIH07XG4gICAgICAgIG9wdGlvbnMudXJsID0gJ3Jlc3BvbnNlVVJMJyBpbiB4aHIgPyB4aHIucmVzcG9uc2VVUkwgOiBvcHRpb25zLmhlYWRlcnMuZ2V0KCdYLVJlcXVlc3QtVVJMJyk7XG4gICAgICAgIHZhciBib2R5ID0gJ3Jlc3BvbnNlJyBpbiB4aHIgPyB4aHIucmVzcG9uc2UgOiB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICByZXNvbHZlKG5ldyBSZXNwb25zZShib2R5LCBvcHRpb25zKSk7XG4gICAgICB9O1xuXG4gICAgICB4aHIub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZWplY3QobmV3IFR5cGVFcnJvcignTmV0d29yayByZXF1ZXN0IGZhaWxlZCcpKTtcbiAgICAgIH07XG5cbiAgICAgIHhoci5vbnRpbWVvdXQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ05ldHdvcmsgcmVxdWVzdCBmYWlsZWQnKSk7XG4gICAgICB9O1xuXG4gICAgICB4aHIub25hYm9ydCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZWplY3QobmV3IGV4cG9ydHMuRE9NRXhjZXB0aW9uKCdBYm9ydGVkJywgJ0Fib3J0RXJyb3InKSk7XG4gICAgICB9O1xuXG4gICAgICB4aHIub3BlbihyZXF1ZXN0Lm1ldGhvZCwgcmVxdWVzdC51cmwsIHRydWUpO1xuXG4gICAgICBpZiAocmVxdWVzdC5jcmVkZW50aWFscyA9PT0gJ2luY2x1ZGUnKSB7XG4gICAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnb21pdCcpIHtcbiAgICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoJ3Jlc3BvbnNlVHlwZScgaW4geGhyICYmIHN1cHBvcnQuYmxvYikge1xuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2Jsb2InO1xuICAgICAgfVxuXG4gICAgICByZXF1ZXN0LmhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihuYW1lLCB2YWx1ZSk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKHJlcXVlc3Quc2lnbmFsKSB7XG4gICAgICAgIHJlcXVlc3Quc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnRYaHIpO1xuXG4gICAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAvLyBET05FIChzdWNjZXNzIG9yIGZhaWx1cmUpXG4gICAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09PSA0KSB7XG4gICAgICAgICAgICByZXF1ZXN0LnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0WGhyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHhoci5zZW5kKHR5cGVvZiByZXF1ZXN0Ll9ib2R5SW5pdCA9PT0gJ3VuZGVmaW5lZCcgPyBudWxsIDogcmVxdWVzdC5fYm9keUluaXQpO1xuICAgIH0pXG4gIH1cblxuICBmZXRjaC5wb2x5ZmlsbCA9IHRydWU7XG5cbiAgaWYgKCFzZWxmLmZldGNoKSB7XG4gICAgc2VsZi5mZXRjaCA9IGZldGNoO1xuICAgIHNlbGYuSGVhZGVycyA9IEhlYWRlcnM7XG4gICAgc2VsZi5SZXF1ZXN0ID0gUmVxdWVzdDtcbiAgICBzZWxmLlJlc3BvbnNlID0gUmVzcG9uc2U7XG4gIH1cblxuICBleHBvcnRzLkhlYWRlcnMgPSBIZWFkZXJzO1xuICBleHBvcnRzLlJlcXVlc3QgPSBSZXF1ZXN0O1xuICBleHBvcnRzLlJlc3BvbnNlID0gUmVzcG9uc2U7XG4gIGV4cG9ydHMuZmV0Y2ggPSBmZXRjaDtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG4gIHJldHVybiBleHBvcnRzO1xuXG59KSh7fSk7XG59KShfX3NlbGZfXyk7XG5fX3NlbGZfXy5mZXRjaC5wb255ZmlsbCA9IHRydWU7XG4vLyBSZW1vdmUgXCJwb2x5ZmlsbFwiIHByb3BlcnR5IGFkZGVkIGJ5IHdoYXR3Zy1mZXRjaFxuZGVsZXRlIF9fc2VsZl9fLmZldGNoLnBvbHlmaWxsO1xuLy8gQ2hvb3NlIGJldHdlZW4gbmF0aXZlIGltcGxlbWVudGF0aW9uIChnbG9iYWwpIG9yIGN1c3RvbSBpbXBsZW1lbnRhdGlvbiAoX19zZWxmX18pXG4vLyB2YXIgY3R4ID0gZ2xvYmFsLmZldGNoID8gZ2xvYmFsIDogX19zZWxmX187XG52YXIgY3R4ID0gX19zZWxmX187IC8vIHRoaXMgbGluZSBkaXNhYmxlIHNlcnZpY2Ugd29ya2VyIHN1cHBvcnQgdGVtcG9yYXJpbHlcbmV4cG9ydHMgPSBjdHguZmV0Y2ggLy8gVG8gZW5hYmxlOiBpbXBvcnQgZmV0Y2ggZnJvbSAnY3Jvc3MtZmV0Y2gnXG5leHBvcnRzLmRlZmF1bHQgPSBjdHguZmV0Y2ggLy8gRm9yIFR5cGVTY3JpcHQgY29uc3VtZXJzIHdpdGhvdXQgZXNNb2R1bGVJbnRlcm9wLlxuZXhwb3J0cy5mZXRjaCA9IGN0eC5mZXRjaCAvLyBUbyBlbmFibGU6IGltcG9ydCB7ZmV0Y2h9IGZyb20gJ2Nyb3NzLWZldGNoJ1xuZXhwb3J0cy5IZWFkZXJzID0gY3R4LkhlYWRlcnNcbmV4cG9ydHMuUmVxdWVzdCA9IGN0eC5SZXF1ZXN0XG5leHBvcnRzLlJlc3BvbnNlID0gY3R4LlJlc3BvbnNlXG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNcbiIsIi8qKlxuICogQGZpbGUgQ29udmVydGVyIEFwcGxpY2F0aW9uLlxuICovXG5pbXBvcnQgQ29udmVydGVyIGZyb20gJy4vY29udmVydGVyJztcblxuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggJ0RPTUNvbnRlbnRMb2FkZWQnLCAoKSA9PiB7XG5cdG5ldyBDb252ZXJ0ZXIoKTtcbn0gKTtcbiIsIi8qKlxuICogQGZpbGUgY2xhc3MgQ29udmVydGVyLlxuICovXG5cbmNsYXNzIENvbnZlcnRlciB7XG5cdC8qKlxuXHQgKiBDbGFzcyBjb25zdHJ1Y3Rvci5cblx0ICovXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuQ09OVkVSVF9GT1JNX1NFTEVDVE9SID0gJyNjdGwtY29udmVydC1leGlzdGluZy1zbHVncyc7XG5cdFx0dGhpcy5DT05WRVJUX0JVVFRPTl9TRUxFQ1RPUiA9ICcjY3RsLWNvbnZlcnQtYnV0dG9uJztcblx0XHR0aGlzLkNPTkZJUk1fUE9QVVBfU0VMRUNUT1IgPSAnI2N0bC1jb25maXJtLXBvcHVwJztcblx0XHR0aGlzLkNPTkZJUk1fT0tfU0VMRUNUT1IgPSAnI2N0bC1jb25maXJtLW9rJztcblx0XHR0aGlzLkNPTkZJUk1fQ0FOQ0VMX1NFTEVDVE9SID0gJyNjdGwtY29uZmlybS1jYW5jZWwnO1xuXG5cdFx0dGhpcy5jb25maXJtUG9wdXAgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuXHRcdFx0dGhpcy5DT05GSVJNX1BPUFVQX1NFTEVDVE9SXG5cdFx0KTtcblxuXHRcdHRoaXMuYmluZEV2ZW50cygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEJpbmQgZXZlbnRzIHRvIG1ldGhvZHMuXG5cdCAqL1xuXHRiaW5kRXZlbnRzKCkge1xuXHRcdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIHRoaXMuQ09OVkVSVF9CVVRUT05fU0VMRUNUT1IgKS5vbmNsaWNrID0gKFxuXHRcdFx0ZXZlbnRcblx0XHQpID0+IHtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHR0aGlzLmNvbmZpcm1Qb3B1cC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9O1xuXG5cdFx0dGhpcy5jb25maXJtUG9wdXAub25jbGljayA9ICgpID0+IHtcblx0XHRcdHRoaXMuaGlkZUNvbmZpcm1Qb3B1cCgpO1xuXHRcdH07XG5cblx0XHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCB0aGlzLkNPTkZJUk1fT0tfU0VMRUNUT1IgKS5vbmNsaWNrID0gKFxuXHRcdFx0ZXZlbnRcblx0XHQpID0+IHtcblx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0dGhpcy5oaWRlQ29uZmlybVBvcHVwKCk7XG5cdFx0XHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCB0aGlzLkNPTlZFUlRfRk9STV9TRUxFQ1RPUiApLnN1Ym1pdCgpO1xuXHRcdH07XG5cblx0XHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCB0aGlzLkNPTkZJUk1fQ0FOQ0VMX1NFTEVDVE9SICkub25jbGljayA9IChcblx0XHRcdGV2ZW50XG5cdFx0KSA9PiB7XG5cdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdHRoaXMuaGlkZUNvbmZpcm1Qb3B1cCgpO1xuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogSGlkZSBjb25maXJtYXRpb24gcG9wdXAuXG5cdCAqL1xuXHRoaWRlQ29uZmlybVBvcHVwKCkge1xuXHRcdHRoaXMuY29uZmlybVBvcHVwLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29udmVydGVyO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==
assets/js/tables/app.js CHANGED
@@ -1,2 +1,2 @@
1
  !function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=0)}([function(e,t,n){n(1),e.exports=n(2)},function(e,t){var n="undefined"!=typeof self?self:this,r=function(){function e(){this.fetch=!1,this.DOMException=n.DOMException}return e.prototype=n,new e}();!function(e){!function(t){var n="URLSearchParams"in e,r="Symbol"in e&&"iterator"in Symbol,i="FileReader"in e&&"Blob"in e&&function(){try{return new Blob,!0}catch(e){return!1}}(),s="FormData"in e,o="ArrayBuffer"in e;if(o)var a=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],u=ArrayBuffer.isView||function(e){return e&&a.indexOf(Object.prototype.toString.call(e))>-1};function l(e){if("string"!=typeof e&&(e=String(e)),/[^a-z0-9\-#$%&'*+.^_`|~]/i.test(e))throw new TypeError("Invalid character in header field name");return e.toLowerCase()}function c(e){return"string"!=typeof e&&(e=String(e)),e}function h(e){var t={next:function(){var t=e.shift();return{done:void 0===t,value:t}}};return r&&(t[Symbol.iterator]=function(){return t}),t}function d(e){this.map={},e instanceof d?e.forEach((function(e,t){this.append(t,e)}),this):Array.isArray(e)?e.forEach((function(e){this.append(e[0],e[1])}),this):e&&Object.getOwnPropertyNames(e).forEach((function(t){this.append(t,e[t])}),this)}function p(e){if(e.bodyUsed)return Promise.reject(new TypeError("Already read"));e.bodyUsed=!0}function f(e){return new Promise((function(t,n){e.onload=function(){t(e.result)},e.onerror=function(){n(e.error)}}))}function y(e){var t=new FileReader,n=f(t);return t.readAsArrayBuffer(e),n}function b(e){if(e.slice)return e.slice(0);var t=new Uint8Array(e.byteLength);return t.set(new Uint8Array(e)),t.buffer}function v(){return this.bodyUsed=!1,this._initBody=function(e){var t;this._bodyInit=e,e?"string"==typeof e?this._bodyText=e:i&&Blob.prototype.isPrototypeOf(e)?this._bodyBlob=e:s&&FormData.prototype.isPrototypeOf(e)?this._bodyFormData=e:n&&URLSearchParams.prototype.isPrototypeOf(e)?this._bodyText=e.toString():o&&i&&((t=e)&&DataView.prototype.isPrototypeOf(t))?(this._bodyArrayBuffer=b(e.buffer),this._bodyInit=new Blob([this._bodyArrayBuffer])):o&&(ArrayBuffer.prototype.isPrototypeOf(e)||u(e))?this._bodyArrayBuffer=b(e):this._bodyText=e=Object.prototype.toString.call(e):this._bodyText="",this.headers.get("content-type")||("string"==typeof e?this.headers.set("content-type","text/plain;charset=UTF-8"):this._bodyBlob&&this._bodyBlob.type?this.headers.set("content-type",this._bodyBlob.type):n&&URLSearchParams.prototype.isPrototypeOf(e)&&this.headers.set("content-type","application/x-www-form-urlencoded;charset=UTF-8"))},i&&(this.blob=function(){var e=p(this);if(e)return e;if(this._bodyBlob)return Promise.resolve(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(new Blob([this._bodyArrayBuffer]));if(this._bodyFormData)throw new Error("could not read FormData body as blob");return Promise.resolve(new Blob([this._bodyText]))},this.arrayBuffer=function(){return this._bodyArrayBuffer?p(this)||Promise.resolve(this._bodyArrayBuffer):this.blob().then(y)}),this.text=function(){var e,t,n,r=p(this);if(r)return r;if(this._bodyBlob)return e=this._bodyBlob,t=new FileReader,n=f(t),t.readAsText(e),n;if(this._bodyArrayBuffer)return Promise.resolve(function(e){for(var t=new Uint8Array(e),n=new Array(t.length),r=0;r<t.length;r++)n[r]=String.fromCharCode(t[r]);return n.join("")}(this._bodyArrayBuffer));if(this._bodyFormData)throw new Error("could not read FormData body as text");return Promise.resolve(this._bodyText)},s&&(this.formData=function(){return this.text().then(L)}),this.json=function(){return this.text().then(JSON.parse)},this}d.prototype.append=function(e,t){e=l(e),t=c(t);var n=this.map[e];this.map[e]=n?n+", "+t:t},d.prototype.delete=function(e){delete this.map[l(e)]},d.prototype.get=function(e){return e=l(e),this.has(e)?this.map[e]:null},d.prototype.has=function(e){return this.map.hasOwnProperty(l(e))},d.prototype.set=function(e,t){this.map[l(e)]=c(t)},d.prototype.forEach=function(e,t){for(var n in this.map)this.map.hasOwnProperty(n)&&e.call(t,this.map[n],n,this)},d.prototype.keys=function(){var e=[];return this.forEach((function(t,n){e.push(n)})),h(e)},d.prototype.values=function(){var e=[];return this.forEach((function(t){e.push(t)})),h(e)},d.prototype.entries=function(){var e=[];return this.forEach((function(t,n){e.push([n,t])})),h(e)},r&&(d.prototype[Symbol.iterator]=d.prototype.entries);var m=["DELETE","GET","HEAD","OPTIONS","POST","PUT"];function E(e,t){var n,r,i=(t=t||{}).body;if(e instanceof E){if(e.bodyUsed)throw new TypeError("Already read");this.url=e.url,this.credentials=e.credentials,t.headers||(this.headers=new d(e.headers)),this.method=e.method,this.mode=e.mode,this.signal=e.signal,i||null==e._bodyInit||(i=e._bodyInit,e.bodyUsed=!0)}else this.url=String(e);if(this.credentials=t.credentials||this.credentials||"same-origin",!t.headers&&this.headers||(this.headers=new d(t.headers)),this.method=(n=t.method||this.method||"GET",r=n.toUpperCase(),m.indexOf(r)>-1?r:n),this.mode=t.mode||this.mode||null,this.signal=t.signal||this.signal,this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&i)throw new TypeError("Body not allowed for GET or HEAD requests");this._initBody(i)}function L(e){var t=new FormData;return e.trim().split("&").forEach((function(e){if(e){var n=e.split("="),r=n.shift().replace(/\+/g," "),i=n.join("=").replace(/\+/g," ");t.append(decodeURIComponent(r),decodeURIComponent(i))}})),t}function S(e,t){t||(t={}),this.type="default",this.status=void 0===t.status?200:t.status,this.ok=this.status>=200&&this.status<300,this.statusText="statusText"in t?t.statusText:"OK",this.headers=new d(t.headers),this.url=t.url||"",this._initBody(e)}E.prototype.clone=function(){return new E(this,{body:this._bodyInit})},v.call(E.prototype),v.call(S.prototype),S.prototype.clone=function(){return new S(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new d(this.headers),url:this.url})},S.error=function(){var e=new S(null,{status:0,statusText:""});return e.type="error",e};var T=[301,302,303,307,308];S.redirect=function(e,t){if(-1===T.indexOf(t))throw new RangeError("Invalid status code");return new S(null,{status:t,headers:{location:e}})},t.DOMException=e.DOMException;try{new t.DOMException}catch(e){t.DOMException=function(e,t){this.message=e,this.name=t;var n=Error(e);this.stack=n.stack},t.DOMException.prototype=Object.create(Error.prototype),t.DOMException.prototype.constructor=t.DOMException}function _(e,n){return new Promise((function(r,s){var o=new E(e,n);if(o.signal&&o.signal.aborted)return s(new t.DOMException("Aborted","AbortError"));var a=new XMLHttpRequest;function u(){a.abort()}a.onload=function(){var e,t,n={status:a.status,statusText:a.statusText,headers:(e=a.getAllResponseHeaders()||"",t=new d,e.replace(/\r?\n[\t ]+/g," ").split(/\r?\n/).forEach((function(e){var n=e.split(":"),r=n.shift().trim();if(r){var i=n.join(":").trim();t.append(r,i)}})),t)};n.url="responseURL"in a?a.responseURL:n.headers.get("X-Request-URL");var i="response"in a?a.response:a.responseText;r(new S(i,n))},a.onerror=function(){s(new TypeError("Network request failed"))},a.ontimeout=function(){s(new TypeError("Network request failed"))},a.onabort=function(){s(new t.DOMException("Aborted","AbortError"))},a.open(o.method,o.url,!0),"include"===o.credentials?a.withCredentials=!0:"omit"===o.credentials&&(a.withCredentials=!1),"responseType"in a&&i&&(a.responseType="blob"),o.headers.forEach((function(e,t){a.setRequestHeader(t,e)})),o.signal&&(o.signal.addEventListener("abort",u),a.onreadystatechange=function(){4===a.readyState&&o.signal.removeEventListener("abort",u)}),a.send(void 0===o._bodyInit?null:o._bodyInit)}))}_.polyfill=!0,e.fetch||(e.fetch=_,e.Headers=d,e.Request=E,e.Response=S),t.Headers=d,t.Request=E,t.Response=S,t.fetch=_,Object.defineProperty(t,"__esModule",{value:!0})}({})}(r),r.fetch.ponyfill=!0,delete r.fetch.polyfill;var i=r;(t=i.fetch).default=i.fetch,t.fetch=i.fetch,t.Headers=i.Headers,t.Request=i.Request,t.Response=i.Response,e.exports=t},function(e,t,n){"use strict";var r,i=n(3),s=(r=i)&&r.__esModule?r:{default:r};document.addEventListener("DOMContentLoaded",(function(){new s.default}))},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();function i(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}var s=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.OPTIONS_FORM_SELECTOR="#ctl-options",this.HEADER_SELECTOR=this.OPTIONS_FORM_SELECTOR+" h2",this.TABLE_SELECTOR=this.OPTIONS_FORM_SELECTOR+" table",this.SUBMIT_SELECTOR=this.OPTIONS_FORM_SELECTOR+" #submit",this.CURRENT_STUB_ID="ctl-current",this.CURRENT_NAV_TAB_CLASS="nav-tab-current",this.ACTIVE_NAV_TAB_CLASS="nav-tab-active",this.ACTIVE_TABLE_CLASS="active",this.EDIT_LABEL_ID="ctl-edit-label",this.EDIT_LABEL_ERROR_CLASS="ctl-edit-label-error",this.plusButton='<button type="button" aria-haspopup="true" aria-expanded="false" class="components-button block-editor-inserter__toggle has-icon" aria-label="Добавить блок"><svg width="24" height="24" xmlns="http://www.w3.org/2000/svg" viewBox="-2 -2 24 24" role="img" aria-hidden="true" focusable="false"><path d="M10 1c-5 0-9 4-9 9s4 9 9 9 9-4 9-9-4-9-9-9zm0 16c-3.9 0-7-3.1-7-7s3.1-7 7-7 7 3.1 7 7-3.1 7-7 7zm1-11H9v3H6v2h3v3h2v-3h3V9h-3V6zM10 1c-5 0-9 4-9 9s4 9 9 9 9-4 9-9-4-9-9-9zm0 16c-3.9 0-7-3.1-7-7s3.1-7 7-7 7 3.1 7 7-3.1 7-7 7zm1-11H9v3H6v2h3v3h2v-3h3V9h-3V6z"></path></svg></button>',this.PLUS_CLASS="ctl-plus",this.optionsForm=document.querySelector(this.OPTIONS_FORM_SELECTOR),this.tablesData=this.getTablesData(),this.submitButton=document.querySelector(this.SUBMIT_SELECTOR),this.optionsSaveSuccessMessage=Cyr2LatTablesObject.optionsSaveSuccessMessage,this.optionsSaveErrorMessage=Cyr2LatTablesObject.optionsSaveErrorMessage,this.addWrapper(),this.addMessageLines(),this.moveTabs(),this.addEditLabelInput(),this.hideTables(),this.bindEvents(),this.setSubmitStatus()}return r(e,[{key:"getHeaders",value:function(){return[].concat(i(document.querySelectorAll(this.HEADER_SELECTOR)))}},{key:"getActiveHeader",value:function(){return document.querySelector(this.HEADER_SELECTOR+"."+this.ACTIVE_NAV_TAB_CLASS)}},{key:"getActiveIndex",value:function(){return this.getActiveHeader().dataset.index}},{key:"getTables",value:function(){return[].concat(i(document.querySelectorAll(this.TABLE_SELECTOR)))}},{key:"getActiveTable",value:function(){return document.querySelector(this.TABLE_SELECTOR+"."+this.ACTIVE_TABLE_CLASS)}},{key:"getInputs",value:function(){return[].concat(i(document.querySelectorAll(this.OPTIONS_FORM_SELECTOR+" input")))}},{key:"getLabels",value:function(){return[].concat(i(document.querySelectorAll(this.OPTIONS_FORM_SELECTOR+" label")))}},{key:"getPlusButtons",value:function(){return[].concat(i(document.querySelectorAll(this.OPTIONS_FORM_SELECTOR+" ."+this.PLUS_CLASS)))}},{key:"isActiveTableChanged",value:function(){var e=this.getActiveIndex();return JSON.stringify(this.getActiveTableData())!==JSON.stringify(this.tablesData[e])}},{key:"setSubmitStatus",value:function(){this.submitButton.disabled=!this.isActiveTableChanged()}},{key:"saveActiveTable",value:function(){var e=this;if(this.isActiveTableChanged()){var t=this.getActiveTable(),n=document.createElement("form");return n.action=this.optionsForm.getAttribute("action"),n.method=this.optionsForm.method,n.appendChild(t.cloneNode(!0)),[].concat(i(t.querySelectorAll("input"))).map((function(e){return n.querySelector("#"+e.id).value=e.value})),[].concat(i(this.optionsForm.querySelectorAll('input[type="hidden"]'))).map((function(e){return n.appendChild(e.cloneNode(!0))})),document.body.appendChild(n),fetch(this.optionsForm.getAttribute("action"),{method:n.method,body:new URLSearchParams([].concat(i(new FormData(n))))}).then((function(t){return t.ok?(e.showMessage(e.successMessage,e.optionsSaveSuccessMessage),e.tablesData=e.getTablesData()):e.showMessage(e.errorMessage,e.optionsSaveErrorMessage),t.json()})).finally((function(){n.parentNode.removeChild(n),e.setSubmitStatus()}))}}},{key:"getTableData",value:function(e){var t=this,n=[].concat(i(e.querySelectorAll("input"))),r={};return n.forEach((function(e){var n=document.querySelector(t.OPTIONS_FORM_SELECTOR+' label[for="'+e.id+'"]');r[n.innerHTML]=e.value})),r}},{key:"getTablesData",value:function(){var e=this;return this.getTables().map((function(t){return e.getTableData(t)}))}},{key:"getActiveTableData",value:function(){return this.getTableData(this.getActiveTable())}},{key:"addWrapper",value:function(){this.wrapper=document.createElement("ul"),this.wrapper.classList.add("nav-tab-wrapper"),this.optionsForm.insertBefore(this.wrapper,this.optionsForm.firstChild)}},{key:"addMessageLine",value:function(e){var t=document.createElement("div");return t.id=e,this.optionsForm.insertBefore(t,this.optionsForm.firstChild),t}},{key:"addMessageLines",value:function(){this.successMessage=this.addMessageLine("ctl-success"),this.errorMessage=this.addMessageLine("ctl-error")}},{key:"moveTabs",value:function(){var e=document.querySelector(".ctl-settings-tabs");e&&this.optionsForm.insertBefore(e,this.optionsForm.firstChild)}},{key:"addEditLabelInput",value:function(){this.editLabelInput=document.createElement("input"),this.editLabelInput.id=this.EDIT_LABEL_ID,this.editLabelInput.style.display="none",document.body.appendChild(this.editLabelInput)}},{key:"hideEditLabelInput",value:function(){this.editLabelInput.style.display="none",this.editLabelInput.classList.remove(this.EDIT_LABEL_ERROR_CLASS),document.body.appendChild(this.editLabelInput)}},{key:"getLastCell",value:function(){return document.querySelector(this.OPTIONS_FORM_SELECTOR+" ."+this.ACTIVE_TABLE_CLASS+" ."+this.PLUS_CLASS).previousElementSibling}},{key:"addCell",value:function(){var e=this.getLastCell();e.parentElement.insertBefore(e.cloneNode(!0),e.nextElementSibling);var t=(e=this.getLastCell()).querySelector("label"),n=e.querySelector("input"),r=n.id.split("-"),i=r[0]+"-"+(parseInt(r[1])+1);t.htmlFor=i,t.innerHTML="",n.id=i,n.value="",n.setAttribute("value",""),this.replaceName(n,""),this.bindEvents(),this.editLabel(t)}},{key:"hideTables",value:function(){var e=this,t=0;this.getTables().map((function(n,r){n.classList.add("ctl-table"),e.CURRENT_STUB_ID===n.previousElementSibling.id&&(t=r,n.classList.add(e.ACTIVE_TABLE_CLASS));var i=document.createElement("div");return i.classList.add(e.PLUS_CLASS),i.innerHTML=e.plusButton,n.querySelector("td").appendChild(i),null})),this.getHeaders().map((function(n,r){return n.classList.add("nav-tab"),n.dataset.index=r,e.wrapper.appendChild(n),r===t&&(n.classList.add(e.CURRENT_NAV_TAB_CLASS),n.classList.add(e.ACTIVE_NAV_TAB_CLASS)),null}))}},{key:"bindEvents",value:function(){var e=this;this.getHeaders().map((function(t,n,r){return t.onclick=function(t){t.preventDefault();var n=t.target.dataset.index;if(n===e.getActiveIndex())return!1;e.saveActiveTable(),r.map((function(t){return t.classList.remove(e.ACTIVE_NAV_TAB_CLASS)})),r[n].classList.add(e.ACTIVE_NAV_TAB_CLASS);var i=e.getTables();return i.map((function(t){return t.classList.remove(e.ACTIVE_TABLE_CLASS)})),i[n].classList.add(e.ACTIVE_TABLE_CLASS),e.setSubmitStatus(),!1},null})),this.getInputs().map((function(t){return t.oninput=function(){e.setSubmitStatus()},null})),this.getLabels().map((function(t){return t.onclick=function(t){return t.preventDefault(),e.editLabel(t.target),!1},null})),this.editLabelInput.onblur=function(){e.saveLabel()},this.editLabelInput.onkeyup=function(t){"Escape"===t.key&&e.saveLabel(!0),"Enter"===t.key&&e.saveLabel()},this.getPlusButtons().map((function(t){return t.onclick=function(t){return t.preventDefault(),e.addCell(t.target),!1},null})),this.submitButton.onclick=function(t){return t.preventDefault(),e.saveActiveTable(),!1}}},{key:"editLabel",value:function(e){e.parentNode.appendChild(this.editLabelInput),this.editLabelInput.value=e.innerHTML,this.editLabelInput.classList.remove(this.EDIT_LABEL_ERROR_CLASS),this.editLabelInput.style.display="block",this.editLabelInput.focus()}},{key:"isUniqueLabel",value:function(e){return[].concat(i(this.getActiveTable().querySelectorAll("label"))).reduce((function(t,n){return t&&n.innerHTML!==e}),!0)}},{key:"saveLabel",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if("none"!==this.editLabelInput.style.display){var t=this.editLabelInput.value.trim();if(""===t){var n=document.getElementById(this.EDIT_LABEL_ID).parentElement;return this.hideEditLabelInput(),n.parentNode.removeChild(n),void this.setSubmitStatus()}var r=this.editLabelInput.parentNode.querySelector("label");if(e||t===r.innerHTML)this.hideEditLabelInput();else if(this.isUniqueLabel(t)){var i=this.editLabelInput.parentNode.querySelector("input");this.hideEditLabelInput(),r.innerHTML=t,this.replaceName(i,t),this.setSubmitStatus()}else this.editLabelInput.classList.add(this.EDIT_LABEL_ERROR_CLASS)}}},{key:"replaceName",value:function(e,t){e.name=e.name.replace(/(.+\[.+])\[.*]/g,"$1["+t+"]")}},{key:"clearMessage",value:function(e){e.innerHTML="",e.classList.remove("active")}},{key:"clearMessages",value:function(){this.clearMessage(this.successMessage),this.clearMessage(this.errorMessage),clearTimeout(this.msgTimer)}},{key:"showMessage",value:function(e,t){var n=this;e.innerHTML=t,e.classList.add("active"),this.msgTimer=setTimeout((function(){n.clearMessages()}),5e3)}}]),e}();t.default=s}]);
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2Nyb3NzLWZldGNoL2Rpc3QvYnJvd3Nlci1wb255ZmlsbC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvanMvdGFibGVzL2FwcC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvanMvdGFibGVzL3RhYmxlcy5qcyJdLCJuYW1lcyI6WyJpbnN0YWxsZWRNb2R1bGVzIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiZXhwb3J0cyIsIm1vZHVsZSIsImkiLCJsIiwibW9kdWxlcyIsImNhbGwiLCJtIiwiYyIsImQiLCJuYW1lIiwiZ2V0dGVyIiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsInIiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsInZhbHVlIiwidCIsIm1vZGUiLCJfX2VzTW9kdWxlIiwibnMiLCJjcmVhdGUiLCJrZXkiLCJiaW5kIiwibiIsIm9iamVjdCIsInByb3BlcnR5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJwIiwicyIsImdsb2JhbCIsInNlbGYiLCJ0aGlzIiwiX19zZWxmX18iLCJGIiwiZmV0Y2giLCJET01FeGNlcHRpb24iLCJzdXBwb3J0IiwiQmxvYiIsImUiLCJ2aWV3Q2xhc3NlcyIsImlzQXJyYXlCdWZmZXJWaWV3IiwiQXJyYXlCdWZmZXIiLCJpc1ZpZXciLCJvYmoiLCJpbmRleE9mIiwidG9TdHJpbmciLCJub3JtYWxpemVOYW1lIiwiU3RyaW5nIiwidGVzdCIsIlR5cGVFcnJvciIsInRvTG93ZXJDYXNlIiwibm9ybWFsaXplVmFsdWUiLCJpdGVyYXRvckZvciIsIml0ZW1zIiwiaXRlcmF0b3IiLCJuZXh0Iiwic2hpZnQiLCJkb25lIiwidW5kZWZpbmVkIiwiSGVhZGVycyIsImhlYWRlcnMiLCJtYXAiLCJmb3JFYWNoIiwiYXBwZW5kIiwiQXJyYXkiLCJpc0FycmF5IiwiaGVhZGVyIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImNvbnN1bWVkIiwiYm9keSIsImJvZHlVc2VkIiwiUHJvbWlzZSIsInJlamVjdCIsImZpbGVSZWFkZXJSZWFkeSIsInJlYWRlciIsInJlc29sdmUiLCJvbmxvYWQiLCJyZXN1bHQiLCJvbmVycm9yIiwiZXJyb3IiLCJyZWFkQmxvYkFzQXJyYXlCdWZmZXIiLCJibG9iIiwiRmlsZVJlYWRlciIsInByb21pc2UiLCJyZWFkQXNBcnJheUJ1ZmZlciIsImJ1ZmZlckNsb25lIiwiYnVmIiwic2xpY2UiLCJ2aWV3IiwiVWludDhBcnJheSIsImJ5dGVMZW5ndGgiLCJzZXQiLCJidWZmZXIiLCJCb2R5IiwiX2luaXRCb2R5IiwiX2JvZHlJbml0IiwiX2JvZHlUZXh0IiwiaXNQcm90b3R5cGVPZiIsIl9ib2R5QmxvYiIsIkZvcm1EYXRhIiwiX2JvZHlGb3JtRGF0YSIsIlVSTFNlYXJjaFBhcmFtcyIsIkRhdGFWaWV3IiwiX2JvZHlBcnJheUJ1ZmZlciIsInR5cGUiLCJyZWplY3RlZCIsIkVycm9yIiwiYXJyYXlCdWZmZXIiLCJ0aGVuIiwidGV4dCIsInJlYWRBc1RleHQiLCJjaGFycyIsImxlbmd0aCIsImZyb21DaGFyQ29kZSIsImpvaW4iLCJyZWFkQXJyYXlCdWZmZXJBc1RleHQiLCJmb3JtRGF0YSIsImRlY29kZSIsImpzb24iLCJKU09OIiwicGFyc2UiLCJvbGRWYWx1ZSIsImhhcyIsImNhbGxiYWNrIiwidGhpc0FyZyIsImtleXMiLCJwdXNoIiwidmFsdWVzIiwiZW50cmllcyIsIm1ldGhvZHMiLCJSZXF1ZXN0IiwiaW5wdXQiLCJvcHRpb25zIiwibWV0aG9kIiwidXBjYXNlZCIsInVybCIsImNyZWRlbnRpYWxzIiwic2lnbmFsIiwidG9VcHBlckNhc2UiLCJyZWZlcnJlciIsImZvcm0iLCJ0cmltIiwic3BsaXQiLCJieXRlcyIsInJlcGxhY2UiLCJkZWNvZGVVUklDb21wb25lbnQiLCJSZXNwb25zZSIsImJvZHlJbml0Iiwic3RhdHVzIiwib2siLCJzdGF0dXNUZXh0IiwiY2xvbmUiLCJyZXNwb25zZSIsInJlZGlyZWN0U3RhdHVzZXMiLCJyZWRpcmVjdCIsIlJhbmdlRXJyb3IiLCJsb2NhdGlvbiIsImVyciIsIm1lc3NhZ2UiLCJzdGFjayIsImNvbnN0cnVjdG9yIiwiaW5pdCIsInJlcXVlc3QiLCJhYm9ydGVkIiwieGhyIiwiWE1MSHR0cFJlcXVlc3QiLCJhYm9ydFhociIsImFib3J0IiwicmF3SGVhZGVycyIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsImxpbmUiLCJwYXJ0cyIsInJlc3BvbnNlVVJMIiwicmVzcG9uc2VUZXh0Iiwib250aW1lb3V0Iiwib25hYm9ydCIsIm9wZW4iLCJ3aXRoQ3JlZGVudGlhbHMiLCJyZXNwb25zZVR5cGUiLCJzZXRSZXF1ZXN0SGVhZGVyIiwiYWRkRXZlbnRMaXN0ZW5lciIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlYWR5U3RhdGUiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwic2VuZCIsInBvbHlmaWxsIiwicG9ueWZpbGwiLCJjdHgiLCJkZWZhdWx0IiwiZG9jdW1lbnQiLCJUYWJsZXMiLCJPUFRJT05TX0ZPUk1fU0VMRUNUT1IiLCJIRUFERVJfU0VMRUNUT1IiLCJUQUJMRV9TRUxFQ1RPUiIsIlNVQk1JVF9TRUxFQ1RPUiIsIkNVUlJFTlRfU1RVQl9JRCIsIkNVUlJFTlRfTkFWX1RBQl9DTEFTUyIsIkFDVElWRV9OQVZfVEFCX0NMQVNTIiwiQUNUSVZFX1RBQkxFX0NMQVNTIiwiRURJVF9MQUJFTF9JRCIsIkVESVRfTEFCRUxfRVJST1JfQ0xBU1MiLCJwbHVzQnV0dG9uIiwiUExVU19DTEFTUyIsIm9wdGlvbnNGb3JtIiwicXVlcnlTZWxlY3RvciIsInRhYmxlc0RhdGEiLCJnZXRUYWJsZXNEYXRhIiwic3VibWl0QnV0dG9uIiwib3B0aW9uc1NhdmVTdWNjZXNzTWVzc2FnZSIsIkN5cjJMYXRUYWJsZXNPYmplY3QiLCJvcHRpb25zU2F2ZUVycm9yTWVzc2FnZSIsImFkZFdyYXBwZXIiLCJhZGRNZXNzYWdlTGluZXMiLCJtb3ZlVGFicyIsImFkZEVkaXRMYWJlbElucHV0IiwiaGlkZVRhYmxlcyIsImJpbmRFdmVudHMiLCJzZXRTdWJtaXRTdGF0dXMiLCJxdWVyeVNlbGVjdG9yQWxsIiwiZ2V0QWN0aXZlSGVhZGVyIiwiZGF0YXNldCIsImluZGV4IiwiYWN0aXZlSW5kZXgiLCJnZXRBY3RpdmVJbmRleCIsInN0cmluZ2lmeSIsImdldEFjdGl2ZVRhYmxlRGF0YSIsImRpc2FibGVkIiwiaXNBY3RpdmVUYWJsZUNoYW5nZWQiLCJhY3RpdmVUYWJsZSIsImdldEFjdGl2ZVRhYmxlIiwiYWN0aXZlRm9ybSIsImNyZWF0ZUVsZW1lbnQiLCJhY3Rpb24iLCJnZXRBdHRyaWJ1dGUiLCJhcHBlbmRDaGlsZCIsImNsb25lTm9kZSIsImFjdGl2ZUlucHV0cyIsImlkIiwiaGlkZGVuSW5wdXRzIiwic2hvd01lc3NhZ2UiLCJzdWNjZXNzTWVzc2FnZSIsImVycm9yTWVzc2FnZSIsImZpbmFsbHkiLCJwYXJlbnROb2RlIiwicmVtb3ZlQ2hpbGQiLCJ0YWJsZSIsImlucHV0cyIsImRhdGEiLCJsYWJlbCIsImlubmVySFRNTCIsImdldFRhYmxlcyIsImdldFRhYmxlRGF0YSIsIndyYXBwZXIiLCJjbGFzc0xpc3QiLCJhZGQiLCJpbnNlcnRCZWZvcmUiLCJmaXJzdENoaWxkIiwiYWRkTWVzc2FnZUxpbmUiLCJ0YWJzIiwiZWRpdExhYmVsSW5wdXQiLCJzdHlsZSIsImRpc3BsYXkiLCJyZW1vdmUiLCJwcmV2aW91c0VsZW1lbnRTaWJsaW5nIiwibGFzdENlbGwiLCJnZXRMYXN0Q2VsbCIsInBhcmVudEVsZW1lbnQiLCJuZXh0RWxlbWVudFNpYmxpbmciLCJpZEFyciIsIm5ld0lkIiwicGFyc2VJbnQiLCJodG1sRm9yIiwic2V0QXR0cmlidXRlIiwicmVwbGFjZU5hbWUiLCJlZGl0TGFiZWwiLCJjdXJyZW50SW5kZXgiLCJwbHVzIiwiZ2V0SGVhZGVycyIsIm9uY2xpY2siLCJldmVudCIsInByZXZlbnREZWZhdWx0IiwidGFyZ2V0Iiwic2F2ZUFjdGl2ZVRhYmxlIiwiYUhlYWRlciIsInRhYmxlcyIsImdldElucHV0cyIsIm9uaW5wdXQiLCJnZXRMYWJlbHMiLCJvbmJsdXIiLCJzYXZlTGFiZWwiLCJvbmtleXVwIiwiZ2V0UGx1c0J1dHRvbnMiLCJhZGRDZWxsIiwiZm9jdXMiLCJuZXdWYWx1ZSIsInJlZHVjZSIsImFjYyIsImNhbmNlbCIsImVkaXRlZENlbGwiLCJnZXRFbGVtZW50QnlJZCIsImhpZGVFZGl0TGFiZWxJbnB1dCIsImlzVW5pcXVlTGFiZWwiLCJjbGVhck1lc3NhZ2UiLCJjbGVhclRpbWVvdXQiLCJtc2dUaW1lciIsImVsIiwic2V0VGltZW91dCIsImNsZWFyTWVzc2FnZXMiXSwibWFwcGluZ3MiOiJhQUNFLElBQUlBLEVBQW1CLEdBR3ZCLFNBQVNDLEVBQW9CQyxHQUc1QixHQUFHRixFQUFpQkUsR0FDbkIsT0FBT0YsRUFBaUJFLEdBQVVDLFFBR25DLElBQUlDLEVBQVNKLEVBQWlCRSxHQUFZLENBQ3pDRyxFQUFHSCxFQUNISSxHQUFHLEVBQ0hILFFBQVMsSUFVVixPQU5BSSxFQUFRTCxHQUFVTSxLQUFLSixFQUFPRCxRQUFTQyxFQUFRQSxFQUFPRCxRQUFTRixHQUcvREcsRUFBT0UsR0FBSSxFQUdKRixFQUFPRCxRQUtmRixFQUFvQlEsRUFBSUYsRUFHeEJOLEVBQW9CUyxFQUFJVixFQUd4QkMsRUFBb0JVLEVBQUksU0FBU1IsRUFBU1MsRUFBTUMsR0FDM0NaLEVBQW9CYSxFQUFFWCxFQUFTUyxJQUNsQ0csT0FBT0MsZUFBZWIsRUFBU1MsRUFBTSxDQUFFSyxZQUFZLEVBQU1DLElBQUtMLEtBS2hFWixFQUFvQmtCLEVBQUksU0FBU2hCLEdBQ1gsb0JBQVhpQixRQUEwQkEsT0FBT0MsYUFDMUNOLE9BQU9DLGVBQWViLEVBQVNpQixPQUFPQyxZQUFhLENBQUVDLE1BQU8sV0FFN0RQLE9BQU9DLGVBQWViLEVBQVMsYUFBYyxDQUFFbUIsT0FBTyxLQVF2RHJCLEVBQW9Cc0IsRUFBSSxTQUFTRCxFQUFPRSxHQUV2QyxHQURVLEVB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LEtBQUtpUixZLGtDQVNQQyxFQUFJbkosR0FBVSxXQUMxQm1KLEVBQUd4RCxVQUFZM0YsRUFDZm1KLEVBQUdwRCxVQUFVQyxJQUFLLFVBRWxCL04sS0FBS2lSLFNBQVdFLFlBQVksV0FDM0IsRUFBS0Msa0JBQ0gsUyxlQUlVckgiLCJmaWxlIjoidGFibGVzL2FwcC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAwKTtcbiIsInZhciBnbG9iYWwgPSB0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgPyBzZWxmIDogdGhpcztcbnZhciBfX3NlbGZfXyA9IChmdW5jdGlvbiAoKSB7XG5mdW5jdGlvbiBGKCkge1xudGhpcy5mZXRjaCA9IGZhbHNlO1xudGhpcy5ET01FeGNlcHRpb24gPSBnbG9iYWwuRE9NRXhjZXB0aW9uXG59XG5GLnByb3RvdHlwZSA9IGdsb2JhbDtcbnJldHVybiBuZXcgRigpO1xufSkoKTtcbihmdW5jdGlvbihzZWxmKSB7XG5cbnZhciBpcnJlbGV2YW50ID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7XG5cbiAgdmFyIHN1cHBvcnQgPSB7XG4gICAgc2VhcmNoUGFyYW1zOiAnVVJMU2VhcmNoUGFyYW1zJyBpbiBzZWxmLFxuICAgIGl0ZXJhYmxlOiAnU3ltYm9sJyBpbiBzZWxmICYmICdpdGVyYXRvcicgaW4gU3ltYm9sLFxuICAgIGJsb2I6XG4gICAgICAnRmlsZVJlYWRlcicgaW4gc2VsZiAmJlxuICAgICAgJ0Jsb2InIGluIHNlbGYgJiZcbiAgICAgIChmdW5jdGlvbigpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBuZXcgQmxvYigpO1xuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuICAgICAgfSkoKSxcbiAgICBmb3JtRGF0YTogJ0Zvcm1EYXRhJyBpbiBzZWxmLFxuICAgIGFycmF5QnVmZmVyOiAnQXJyYXlCdWZmZXInIGluIHNlbGZcbiAgfTtcblxuICBmdW5jdGlvbiBpc0RhdGFWaWV3KG9iaikge1xuICAgIHJldHVybiBvYmogJiYgRGF0YVZpZXcucHJvdG90eXBlLmlzUHJvdG90eXBlT2Yob2JqKVxuICB9XG5cbiAgaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIpIHtcbiAgICB2YXIgdmlld0NsYXNzZXMgPSBbXG4gICAgICAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICAgICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICAgICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgICAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgICAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgICAgJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgICAgJ1tvYmplY3QgVWludDMyQXJyYXldJyxcbiAgICAgICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgICAgJ1tvYmplY3QgRmxvYXQ2NEFycmF5XSdcbiAgICBdO1xuXG4gICAgdmFyIGlzQXJyYXlCdWZmZXJWaWV3ID1cbiAgICAgIEFycmF5QnVmZmVyLmlzVmlldyB8fFxuICAgICAgZnVuY3Rpb24ob2JqKSB7XG4gICAgICAgIHJldHVybiBvYmogJiYgdmlld0NsYXNzZXMuaW5kZXhPZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSkgPiAtMVxuICAgICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZU5hbWUobmFtZSkge1xuICAgIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIG5hbWUgPSBTdHJpbmcobmFtZSk7XG4gICAgfVxuICAgIGlmICgvW15hLXowLTlcXC0jJCUmJyorLl5fYHx+XS9pLnRlc3QobmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgY2hhcmFjdGVyIGluIGhlYWRlciBmaWVsZCBuYW1lJylcbiAgICB9XG4gICAgcmV0dXJuIG5hbWUudG9Mb3dlckNhc2UoKVxuICB9XG5cbiAgZnVuY3Rpb24gbm9ybWFsaXplVmFsdWUodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgdmFsdWUgPSBTdHJpbmcodmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuXG4gIC8vIEJ1aWxkIGEgZGVzdHJ1Y3RpdmUgaXRlcmF0b3IgZm9yIHRoZSB2YWx1ZSBsaXN0XG4gIGZ1bmN0aW9uIGl0ZXJhdG9yRm9yKGl0ZW1zKSB7XG4gICAgdmFyIGl0ZXJhdG9yID0ge1xuICAgICAgbmV4dDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGl0ZW1zLnNoaWZ0KCk7XG4gICAgICAgIHJldHVybiB7ZG9uZTogdmFsdWUgPT09IHVuZGVmaW5lZCwgdmFsdWU6IHZhbHVlfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoc3VwcG9ydC5pdGVyYWJsZSkge1xuICAgICAgaXRlcmF0b3JbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaXRlcmF0b3JcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGl0ZXJhdG9yXG4gIH1cblxuICBmdW5jdGlvbiBIZWFkZXJzKGhlYWRlcnMpIHtcbiAgICB0aGlzLm1hcCA9IHt9O1xuXG4gICAgaWYgKGhlYWRlcnMgaW5zdGFuY2VvZiBIZWFkZXJzKSB7XG4gICAgICBoZWFkZXJzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQobmFtZSwgdmFsdWUpO1xuICAgICAgfSwgdGhpcyk7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgICBoZWFkZXJzLmZvckVhY2goZnVuY3Rpb24oaGVhZGVyKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKGhlYWRlclswXSwgaGVhZGVyWzFdKTtcbiAgICAgIH0sIHRoaXMpO1xuICAgIH0gZWxzZSBpZiAoaGVhZGVycykge1xuICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaGVhZGVycykuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKG5hbWUsIGhlYWRlcnNbbmFtZV0pO1xuICAgICAgfSwgdGhpcyk7XG4gICAgfVxuICB9XG5cbiAgSGVhZGVycy5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICBuYW1lID0gbm9ybWFsaXplTmFtZShuYW1lKTtcbiAgICB2YWx1ZSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKTtcbiAgICB2YXIgb2xkVmFsdWUgPSB0aGlzLm1hcFtuYW1lXTtcbiAgICB0aGlzLm1hcFtuYW1lXSA9IG9sZFZhbHVlID8gb2xkVmFsdWUgKyAnLCAnICsgdmFsdWUgOiB2YWx1ZTtcbiAgfTtcblxuICBIZWFkZXJzLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgZGVsZXRlIHRoaXMubWFwW25vcm1hbGl6ZU5hbWUobmFtZSldO1xuICB9O1xuXG4gIEhlYWRlcnMucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBuYW1lID0gbm9ybWFsaXplTmFtZShuYW1lKTtcbiAgICByZXR1cm4gdGhpcy5oYXMobmFtZSkgPyB0aGlzLm1hcFtuYW1lXSA6IG51bGxcbiAgfTtcblxuICBIZWFkZXJzLnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwLmhhc093blByb3BlcnR5KG5vcm1hbGl6ZU5hbWUobmFtZSkpXG4gIH07XG5cbiAgSGVhZGVycy5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICB0aGlzLm1hcFtub3JtYWxpemVOYW1lKG5hbWUpXSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKTtcbiAgfTtcblxuICBIZWFkZXJzLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24oY2FsbGJhY2ssIHRoaXNBcmcpIHtcbiAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMubWFwKSB7XG4gICAgICBpZiAodGhpcy5tYXAuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgY2FsbGJhY2suY2FsbCh0aGlzQXJnLCB0aGlzLm1hcFtuYW1lXSwgbmFtZSwgdGhpcyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIEhlYWRlcnMucHJvdG90eXBlLmtleXMgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgaXRlbXMgPSBbXTtcbiAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICAgIGl0ZW1zLnB1c2gobmFtZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxuICB9O1xuXG4gIEhlYWRlcnMucHJvdG90eXBlLnZhbHVlcyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBpdGVtcyA9IFtdO1xuICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgaXRlbXMucHVzaCh2YWx1ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxuICB9O1xuXG4gIEhlYWRlcnMucHJvdG90eXBlLmVudHJpZXMgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgaXRlbXMgPSBbXTtcbiAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICAgIGl0ZW1zLnB1c2goW25hbWUsIHZhbHVlXSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxuICB9O1xuXG4gIGlmIChzdXBwb3J0Lml0ZXJhYmxlKSB7XG4gICAgSGVhZGVycy5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSA9IEhlYWRlcnMucHJvdG90eXBlLmVudHJpZXM7XG4gIH1cblxuICBmdW5jdGlvbiBjb25zdW1lZChib2R5KSB7XG4gICAgaWYgKGJvZHkuYm9keVVzZWQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCdBbHJlYWR5IHJlYWQnKSlcbiAgICB9XG4gICAgYm9keS5ib2R5VXNlZCA9IHRydWU7XG4gIH1cblxuICBmdW5jdGlvbiBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXNvbHZlKHJlYWRlci5yZXN1bHQpO1xuICAgICAgfTtcbiAgICAgIHJlYWRlci5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChyZWFkZXIuZXJyb3IpO1xuICAgICAgfTtcbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZEJsb2JBc0FycmF5QnVmZmVyKGJsb2IpIHtcbiAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICB2YXIgcHJvbWlzZSA9IGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpO1xuICAgIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihibG9iKTtcbiAgICByZXR1cm4gcHJvbWlzZVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZEJsb2JBc1RleHQoYmxvYikge1xuICAgIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgIHZhciBwcm9taXNlID0gZmlsZVJlYWRlclJlYWR5KHJlYWRlcik7XG4gICAgcmVhZGVyLnJlYWRBc1RleHQoYmxvYik7XG4gICAgcmV0dXJuIHByb21pc2VcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWRBcnJheUJ1ZmZlckFzVGV4dChidWYpIHtcbiAgICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1Zik7XG4gICAgdmFyIGNoYXJzID0gbmV3IEFycmF5KHZpZXcubGVuZ3RoKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlldy5sZW5ndGg7IGkrKykge1xuICAgICAgY2hhcnNbaV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHZpZXdbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gY2hhcnMuam9pbignJylcbiAgfVxuXG4gIGZ1bmN0aW9uIGJ1ZmZlckNsb25lKGJ1Zikge1xuICAgIGlmIChidWYuc2xpY2UpIHtcbiAgICAgIHJldHVybiBidWYuc2xpY2UoMClcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHZpZXcgPSBuZXcgVWludDhBcnJheShidWYuYnl0ZUxlbmd0aCk7XG4gICAgICB2aWV3LnNldChuZXcgVWludDhBcnJheShidWYpKTtcbiAgICAgIHJldHVybiB2aWV3LmJ1ZmZlclxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIEJvZHkoKSB7XG4gICAgdGhpcy5ib2R5VXNlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5faW5pdEJvZHkgPSBmdW5jdGlvbihib2R5KSB7XG4gICAgICB0aGlzLl9ib2R5SW5pdCA9IGJvZHk7XG4gICAgICBpZiAoIWJvZHkpIHtcbiAgICAgICAgdGhpcy5fYm9keVRleHQgPSAnJztcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keTtcbiAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5ibG9iICYmIEJsb2IucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgICAgdGhpcy5fYm9keUJsb2IgPSBib2R5O1xuICAgICAgfSBlbHNlIGlmIChzdXBwb3J0LmZvcm1EYXRhICYmIEZvcm1EYXRhLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICAgIHRoaXMuX2JvZHlGb3JtRGF0YSA9IGJvZHk7XG4gICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuc2VhcmNoUGFyYW1zICYmIFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHkudG9TdHJpbmcoKTtcbiAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5hcnJheUJ1ZmZlciAmJiBzdXBwb3J0LmJsb2IgJiYgaXNEYXRhVmlldyhib2R5KSkge1xuICAgICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIgPSBidWZmZXJDbG9uZShib2R5LmJ1ZmZlcik7XG4gICAgICAgIC8vIElFIDEwLTExIGNhbid0IGhhbmRsZSBhIERhdGFWaWV3IGJvZHkuXG4gICAgICAgIHRoaXMuX2JvZHlJbml0ID0gbmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pO1xuICAgICAgfSBlbHNlIGlmIChzdXBwb3J0LmFycmF5QnVmZmVyICYmIChBcnJheUJ1ZmZlci5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSB8fCBpc0FycmF5QnVmZmVyVmlldyhib2R5KSkpIHtcbiAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyID0gYnVmZmVyQ2xvbmUoYm9keSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHkgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYm9keSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJykpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsICd0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLTgnKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QmxvYiAmJiB0aGlzLl9ib2R5QmxvYi50eXBlKSB7XG4gICAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgdGhpcy5fYm9keUJsb2IudHlwZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5zZWFyY2hQYXJhbXMgJiYgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04Jyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKHN1cHBvcnQuYmxvYikge1xuICAgICAgdGhpcy5ibG9iID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciByZWplY3RlZCA9IGNvbnN1bWVkKHRoaXMpO1xuICAgICAgICBpZiAocmVqZWN0ZWQpIHtcbiAgICAgICAgICByZXR1cm4gcmVqZWN0ZWRcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9ib2R5QmxvYikge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUJsb2IpXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSkpXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUZvcm1EYXRhKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIGJsb2InKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlUZXh0XSkpXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHRoaXMuYXJyYXlCdWZmZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikge1xuICAgICAgICAgIHJldHVybiBjb25zdW1lZCh0aGlzKSB8fCBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUFycmF5QnVmZmVyKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmJsb2IoKS50aGVuKHJlYWRCbG9iQXNBcnJheUJ1ZmZlcilcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciByZWplY3RlZCA9IGNvbnN1bWVkKHRoaXMpO1xuICAgICAgaWYgKHJlamVjdGVkKSB7XG4gICAgICAgIHJldHVybiByZWplY3RlZFxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fYm9keUJsb2IpIHtcbiAgICAgICAgcmV0dXJuIHJlYWRCbG9iQXNUZXh0KHRoaXMuX2JvZHlCbG9iKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZWFkQXJyYXlCdWZmZXJBc1RleHQodGhpcy5fYm9keUFycmF5QnVmZmVyKSlcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUZvcm1EYXRhKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyB0ZXh0JylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keVRleHQpXG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmIChzdXBwb3J0LmZvcm1EYXRhKSB7XG4gICAgICB0aGlzLmZvcm1EYXRhID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHQoKS50aGVuKGRlY29kZSlcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdGhpcy5qc29uID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy50ZXh0KCkudGhlbihKU09OLnBhcnNlKVxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLy8gSFRUUCBtZXRob2RzIHdob3NlIGNhcGl0YWxpemF0aW9uIHNob3VsZCBiZSBub3JtYWxpemVkXG4gIHZhciBtZXRob2RzID0gWydERUxFVEUnLCAnR0VUJywgJ0hFQUQnLCAnT1BUSU9OUycsICdQT1NUJywgJ1BVVCddO1xuXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZU1ldGhvZChtZXRob2QpIHtcbiAgICB2YXIgdXBjYXNlZCA9IG1ldGhvZC50b1VwcGVyQ2FzZSgpO1xuICAgIHJldHVybiBtZXRob2RzLmluZGV4T2YodXBjYXNlZCkgPiAtMSA/IHVwY2FzZWQgOiBtZXRob2RcbiAgfVxuXG4gIGZ1bmN0aW9uIFJlcXVlc3QoaW5wdXQsIG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICB2YXIgYm9keSA9IG9wdGlvbnMuYm9keTtcblxuICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIFJlcXVlc3QpIHtcbiAgICAgIGlmIChpbnB1dC5ib2R5VXNlZCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBbHJlYWR5IHJlYWQnKVxuICAgICAgfVxuICAgICAgdGhpcy51cmwgPSBpbnB1dC51cmw7XG4gICAgICB0aGlzLmNyZWRlbnRpYWxzID0gaW5wdXQuY3JlZGVudGlhbHM7XG4gICAgICBpZiAoIW9wdGlvbnMuaGVhZGVycykge1xuICAgICAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhpbnB1dC5oZWFkZXJzKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubWV0aG9kID0gaW5wdXQubWV0aG9kO1xuICAgICAgdGhpcy5tb2RlID0gaW5wdXQubW9kZTtcbiAgICAgIHRoaXMuc2lnbmFsID0gaW5wdXQuc2lnbmFsO1xuICAgICAgaWYgKCFib2R5ICYmIGlucHV0Ll9ib2R5SW5pdCAhPSBudWxsKSB7XG4gICAgICAgIGJvZHkgPSBpbnB1dC5fYm9keUluaXQ7XG4gICAgICAgIGlucHV0LmJvZHlVc2VkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cmwgPSBTdHJpbmcoaW5wdXQpO1xuICAgIH1cblxuICAgIHRoaXMuY3JlZGVudGlhbHMgPSBvcHRpb25zLmNyZWRlbnRpYWxzIHx8IHRoaXMuY3JlZGVudGlhbHMgfHwgJ3NhbWUtb3JpZ2luJztcbiAgICBpZiAob3B0aW9ucy5oZWFkZXJzIHx8ICF0aGlzLmhlYWRlcnMpIHtcbiAgICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycyk7XG4gICAgfVxuICAgIHRoaXMubWV0aG9kID0gbm9ybWFsaXplTWV0aG9kKG9wdGlvbnMubWV0aG9kIHx8IHRoaXMubWV0aG9kIHx8ICdHRVQnKTtcbiAgICB0aGlzLm1vZGUgPSBvcHRpb25zLm1vZGUgfHwgdGhpcy5tb2RlIHx8IG51bGw7XG4gICAgdGhpcy5zaWduYWwgPSBvcHRpb25zLnNpZ25hbCB8fCB0aGlzLnNpZ25hbDtcbiAgICB0aGlzLnJlZmVycmVyID0gbnVsbDtcblxuICAgIGlmICgodGhpcy5tZXRob2QgPT09ICdHRVQnIHx8IHRoaXMubWV0aG9kID09PSAnSEVBRCcpICYmIGJvZHkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0JvZHkgbm90IGFsbG93ZWQgZm9yIEdFVCBvciBIRUFEIHJlcXVlc3RzJylcbiAgICB9XG4gICAgdGhpcy5faW5pdEJvZHkoYm9keSk7XG4gIH1cblxuICBSZXF1ZXN0LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgUmVxdWVzdCh0aGlzLCB7Ym9keTogdGhpcy5fYm9keUluaXR9KVxuICB9O1xuXG4gIGZ1bmN0aW9uIGRlY29kZShib2R5KSB7XG4gICAgdmFyIGZvcm0gPSBuZXcgRm9ybURhdGEoKTtcbiAgICBib2R5XG4gICAgICAudHJpbSgpXG4gICAgICAuc3BsaXQoJyYnKVxuICAgICAgLmZvckVhY2goZnVuY3Rpb24oYnl0ZXMpIHtcbiAgICAgICAgaWYgKGJ5dGVzKSB7XG4gICAgICAgICAgdmFyIHNwbGl0ID0gYnl0ZXMuc3BsaXQoJz0nKTtcbiAgICAgICAgICB2YXIgbmFtZSA9IHNwbGl0LnNoaWZ0KCkucmVwbGFjZSgvXFwrL2csICcgJyk7XG4gICAgICAgICAgdmFyIHZhbHVlID0gc3BsaXQuam9pbignPScpLnJlcGxhY2UoL1xcKy9nLCAnICcpO1xuICAgICAgICAgIGZvcm0uYXBwZW5kKGRlY29kZVVSSUNvbXBvbmVudChuYW1lKSwgZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIHJldHVybiBmb3JtXG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUhlYWRlcnMocmF3SGVhZGVycykge1xuICAgIHZhciBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKTtcbiAgICAvLyBSZXBsYWNlIGluc3RhbmNlcyBvZiBcXHJcXG4gYW5kIFxcbiBmb2xsb3dlZCBieSBhdCBsZWFzdCBvbmUgc3BhY2Ugb3IgaG9yaXpvbnRhbCB0YWIgd2l0aCBhIHNwYWNlXG4gICAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjJcbiAgICB2YXIgcHJlUHJvY2Vzc2VkSGVhZGVycyA9IHJhd0hlYWRlcnMucmVwbGFjZSgvXFxyP1xcbltcXHQgXSsvZywgJyAnKTtcbiAgICBwcmVQcm9jZXNzZWRIZWFkZXJzLnNwbGl0KC9cXHI/XFxuLykuZm9yRWFjaChmdW5jdGlvbihsaW5lKSB7XG4gICAgICB2YXIgcGFydHMgPSBsaW5lLnNwbGl0KCc6Jyk7XG4gICAgICB2YXIga2V5ID0gcGFydHMuc2hpZnQoKS50cmltKCk7XG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHBhcnRzLmpvaW4oJzonKS50cmltKCk7XG4gICAgICAgIGhlYWRlcnMuYXBwZW5kKGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBoZWFkZXJzXG4gIH1cblxuICBCb2R5LmNhbGwoUmVxdWVzdC5wcm90b3R5cGUpO1xuXG4gIGZ1bmN0aW9uIFJlc3BvbnNlKGJvZHlJbml0LCBvcHRpb25zKSB7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgdGhpcy50eXBlID0gJ2RlZmF1bHQnO1xuICAgIHRoaXMuc3RhdHVzID0gb3B0aW9ucy5zdGF0dXMgPT09IHVuZGVmaW5lZCA/IDIwMCA6IG9wdGlvbnMuc3RhdHVzO1xuICAgIHRoaXMub2sgPSB0aGlzLnN0YXR1cyA+PSAyMDAgJiYgdGhpcy5zdGF0dXMgPCAzMDA7XG4gICAgdGhpcy5zdGF0dXNUZXh0ID0gJ3N0YXR1c1RleHQnIGluIG9wdGlvbnMgPyBvcHRpb25zLnN0YXR1c1RleHQgOiAnT0snO1xuICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycyk7XG4gICAgdGhpcy51cmwgPSBvcHRpb25zLnVybCB8fCAnJztcbiAgICB0aGlzLl9pbml0Qm9keShib2R5SW5pdCk7XG4gIH1cblxuICBCb2R5LmNhbGwoUmVzcG9uc2UucHJvdG90eXBlKTtcblxuICBSZXNwb25zZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFJlc3BvbnNlKHRoaXMuX2JvZHlJbml0LCB7XG4gICAgICBzdGF0dXM6IHRoaXMuc3RhdHVzLFxuICAgICAgc3RhdHVzVGV4dDogdGhpcy5zdGF0dXNUZXh0LFxuICAgICAgaGVhZGVyczogbmV3IEhlYWRlcnModGhpcy5oZWFkZXJzKSxcbiAgICAgIHVybDogdGhpcy51cmxcbiAgICB9KVxuICB9O1xuXG4gIFJlc3BvbnNlLmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKG51bGwsIHtzdGF0dXM6IDAsIHN0YXR1c1RleHQ6ICcnfSk7XG4gICAgcmVzcG9uc2UudHlwZSA9ICdlcnJvcic7XG4gICAgcmV0dXJuIHJlc3BvbnNlXG4gIH07XG5cbiAgdmFyIHJlZGlyZWN0U3RhdHVzZXMgPSBbMzAxLCAzMDIsIDMwMywgMzA3LCAzMDhdO1xuXG4gIFJlc3BvbnNlLnJlZGlyZWN0ID0gZnVuY3Rpb24odXJsLCBzdGF0dXMpIHtcbiAgICBpZiAocmVkaXJlY3RTdGF0dXNlcy5pbmRleE9mKHN0YXR1cykgPT09IC0xKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCBzdGF0dXMgY29kZScpXG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBSZXNwb25zZShudWxsLCB7c3RhdHVzOiBzdGF0dXMsIGhlYWRlcnM6IHtsb2NhdGlvbjogdXJsfX0pXG4gIH07XG5cbiAgZXhwb3J0cy5ET01FeGNlcHRpb24gPSBzZWxmLkRPTUV4Y2VwdGlvbjtcbiAgdHJ5IHtcbiAgICBuZXcgZXhwb3J0cy5ET01FeGNlcHRpb24oKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgZXhwb3J0cy5ET01FeGNlcHRpb24gPSBmdW5jdGlvbihtZXNzYWdlLCBuYW1lKSB7XG4gICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgIHZhciBlcnJvciA9IEVycm9yKG1lc3NhZ2UpO1xuICAgICAgdGhpcy5zdGFjayA9IGVycm9yLnN0YWNrO1xuICAgIH07XG4gICAgZXhwb3J0cy5ET01FeGNlcHRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpO1xuICAgIGV4cG9ydHMuRE9NRXhjZXB0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGV4cG9ydHMuRE9NRXhjZXB0aW9uO1xuICB9XG5cbiAgZnVuY3Rpb24gZmV0Y2goaW5wdXQsIGluaXQpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KGlucHV0LCBpbml0KTtcblxuICAgICAgaWYgKHJlcXVlc3Quc2lnbmFsICYmIHJlcXVlc3Quc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgZXhwb3J0cy5ET01FeGNlcHRpb24oJ0Fib3J0ZWQnLCAnQWJvcnRFcnJvcicpKVxuICAgICAgfVxuXG4gICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAgIGZ1bmN0aW9uIGFib3J0WGhyKCkge1xuICAgICAgICB4aHIuYWJvcnQoKTtcbiAgICAgIH1cblxuICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgICAgICBzdGF0dXM6IHhoci5zdGF0dXMsXG4gICAgICAgICAgc3RhdHVzVGV4dDogeGhyLnN0YXR1c1RleHQsXG4gICAgICAgICAgaGVhZGVyczogcGFyc2VIZWFkZXJzKHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSB8fCAnJylcbiAgICAgICAgfTtcbiAgICAgICAgb3B0aW9ucy51cmwgPSAncmVzcG9uc2VVUkwnIGluIHhociA/IHhoci5yZXNwb25zZVVSTCA6IG9wdGlvbnMuaGVhZGVycy5nZXQoJ1gtUmVxdWVzdC1VUkwnKTtcbiAgICAgICAgdmFyIGJvZHkgPSAncmVzcG9uc2UnIGluIHhociA/IHhoci5yZXNwb25zZSA6IHhoci5yZXNwb25zZVRleHQ7XG4gICAgICAgIHJlc29sdmUobmV3IFJlc3BvbnNlKGJvZHksIG9wdGlvbnMpKTtcbiAgICAgIH07XG5cbiAgICAgIHhoci5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChuZXcgVHlwZUVycm9yKCdOZXR3b3JrIHJlcXVlc3QgZmFpbGVkJykpO1xuICAgICAgfTtcblxuICAgICAgeGhyLm9udGltZW91dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZWplY3QobmV3IFR5cGVFcnJvcignTmV0d29yayByZXF1ZXN0IGZhaWxlZCcpKTtcbiAgICAgIH07XG5cbiAgICAgIHhoci5vbmFib3J0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChuZXcgZXhwb3J0cy5ET01FeGNlcHRpb24oJ0Fib3J0ZWQnLCAnQWJvcnRFcnJvcicpKTtcbiAgICAgIH07XG5cbiAgICAgIHhoci5vcGVuKHJlcXVlc3QubWV0aG9kLCByZXF1ZXN0LnVybCwgdHJ1ZSk7XG5cbiAgICAgIGlmIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnaW5jbHVkZScpIHtcbiAgICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHJlcXVlc3QuY3JlZGVudGlhbHMgPT09ICdvbWl0Jykge1xuICAgICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmICgncmVzcG9uc2VUeXBlJyBpbiB4aHIgJiYgc3VwcG9ydC5ibG9iKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAnYmxvYic7XG4gICAgICB9XG5cbiAgICAgIHJlcXVlc3QuaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKG5hbWUsIHZhbHVlKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAocmVxdWVzdC5zaWduYWwpIHtcbiAgICAgICAgcmVxdWVzdC5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydFhocik7XG5cbiAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIC8vIERPTkUgKHN1Y2Nlc3Mgb3IgZmFpbHVyZSlcbiAgICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT09IDQpIHtcbiAgICAgICAgICAgIHJlcXVlc3Quc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnRYaHIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgeGhyLnNlbmQodHlwZW9mIHJlcXVlc3QuX2JvZHlJbml0ID09PSAndW5kZWZpbmVkJyA/IG51bGwgOiByZXF1ZXN0Ll9ib2R5SW5pdCk7XG4gICAgfSlcbiAgfVxuXG4gIGZldGNoLnBvbHlmaWxsID0gdHJ1ZTtcblxuICBpZiAoIXNlbGYuZmV0Y2gpIHtcbiAgICBzZWxmLmZldGNoID0gZmV0Y2g7XG4gICAgc2VsZi5IZWFkZXJzID0gSGVhZGVycztcbiAgICBzZWxmLlJlcXVlc3QgPSBSZXF1ZXN0O1xuICAgIHNlbGYuUmVzcG9uc2UgPSBSZXNwb25zZTtcbiAgfVxuXG4gIGV4cG9ydHMuSGVhZGVycyA9IEhlYWRlcnM7XG4gIGV4cG9ydHMuUmVxdWVzdCA9IFJlcXVlc3Q7XG4gIGV4cG9ydHMuUmVzcG9uc2UgPSBSZXNwb25zZTtcbiAgZXhwb3J0cy5mZXRjaCA9IGZldGNoO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbiAgcmV0dXJuIGV4cG9ydHM7XG5cbn0oe30pKTtcbn0pKF9fc2VsZl9fKTtcbl9fc2VsZl9fLmZldGNoLnBvbnlmaWxsID0gdHJ1ZTtcbi8vIFJlbW92ZSBcInBvbHlmaWxsXCIgcHJvcGVydHkgYWRkZWQgYnkgd2hhdHdnLWZldGNoXG5kZWxldGUgX19zZWxmX18uZmV0Y2gucG9seWZpbGw7XG4vLyBDaG9vc2UgYmV0d2VlbiBuYXRpdmUgaW1wbGVtZW50YXRpb24gKGdsb2JhbCkgb3IgY3VzdG9tIGltcGxlbWVudGF0aW9uIChfX3NlbGZfXylcbi8vIHZhciBjdHggPSBnbG9iYWwuZmV0Y2ggPyBnbG9iYWwgOiBfX3NlbGZfXztcbnZhciBjdHggPSBfX3NlbGZfXzsgLy8gdGhpcyBsaW5lIGRpc2FibGUgc2VydmljZSB3b3JrZXIgc3VwcG9ydCB0ZW1wb3JhcmlseVxuZXhwb3J0cyA9IGN0eC5mZXRjaCAvLyBUbyBlbmFibGU6IGltcG9ydCBmZXRjaCBmcm9tICdjcm9zcy1mZXRjaCdcbmV4cG9ydHMuZGVmYXVsdCA9IGN0eC5mZXRjaCAvLyBGb3IgVHlwZVNjcmlwdCBjb25zdW1lcnMgd2l0aG91dCBlc01vZHVsZUludGVyb3AuXG5leHBvcnRzLmZldGNoID0gY3R4LmZldGNoIC8vIFRvIGVuYWJsZTogaW1wb3J0IHtmZXRjaH0gZnJvbSAnY3Jvc3MtZmV0Y2gnXG5leHBvcnRzLkhlYWRlcnMgPSBjdHguSGVhZGVyc1xuZXhwb3J0cy5SZXF1ZXN0ID0gY3R4LlJlcXVlc3RcbmV4cG9ydHMuUmVzcG9uc2UgPSBjdHguUmVzcG9uc2Vcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1xuIiwiLyoqXG4gKiBAZmlsZSBUYWJsZXMgQXBwbGljYXRpb24uXG4gKi9cbmltcG9ydCBUYWJsZXMgZnJvbSAnLi90YWJsZXMnO1xuXG5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCAnRE9NQ29udGVudExvYWRlZCcsICgpID0+IHtcblx0bmV3IFRhYmxlcygpO1xufSApO1xuIiwiLyoqXG4gKiBAZmlsZSBjbGFzcyBUYWJsZXMuXG4gKi9cblxuLyogZ2xvYmFsIEN5cjJMYXRUYWJsZXNPYmplY3QgKi9cblxuY2xhc3MgVGFibGVzIHtcblx0LyoqXG5cdCAqIENsYXNzIGNvbnN0cnVjdG9yLlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5PUFRJT05TX0ZPUk1fU0VMRUNUT1IgPSAnI2N0bC1vcHRpb25zJztcblx0XHR0aGlzLkhFQURFUl9TRUxFQ1RPUiA9IHRoaXMuT1BUSU9OU19GT1JNX1NFTEVDVE9SICsgJyBoMic7XG5cdFx0dGhpcy5UQUJMRV9TRUxFQ1RPUiA9IHRoaXMuT1BUSU9OU19GT1JNX1NFTEVDVE9SICsgJyB0YWJsZSc7XG5cdFx0dGhpcy5TVUJNSVRfU0VMRUNUT1IgPSB0aGlzLk9QVElPTlNfRk9STV9TRUxFQ1RPUiArICcgI3N1Ym1pdCc7XG5cdFx0dGhpcy5DVVJSRU5UX1NUVUJfSUQgPSAnY3RsLWN1cnJlbnQnO1xuXHRcdHRoaXMuQ1VSUkVOVF9OQVZfVEFCX0NMQVNTID0gJ25hdi10YWItY3VycmVudCc7XG5cdFx0dGhpcy5BQ1RJVkVfTkFWX1RBQl9DTEFTUyA9ICduYXYtdGFiLWFjdGl2ZSc7XG5cdFx0dGhpcy5BQ1RJVkVfVEFCTEVfQ0xBU1MgPSAnYWN0aXZlJztcblx0XHR0aGlzLkVESVRfTEFCRUxfSUQgPSAnY3RsLWVkaXQtbGFiZWwnO1xuXHRcdHRoaXMuRURJVF9MQUJFTF9FUlJPUl9DTEFTUyA9ICdjdGwtZWRpdC1sYWJlbC1lcnJvcic7XG5cdFx0dGhpcy5wbHVzQnV0dG9uID1cblx0XHRcdCc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBhcmlhLWhhc3BvcHVwPVwidHJ1ZVwiIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiIGNsYXNzPVwiY29tcG9uZW50cy1idXR0b24gYmxvY2stZWRpdG9yLWluc2VydGVyX190b2dnbGUgaGFzLWljb25cIiBhcmlhLWxhYmVsPVwi0JTQvtCx0LDQstC40YLRjCDQsdC70L7QulwiPicgK1xuXHRcdFx0Jzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCItMiAtMiAyNCAyNFwiIHJvbGU9XCJpbWdcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBmb2N1c2FibGU9XCJmYWxzZVwiPicgK1xuXHRcdFx0JzxwYXRoIGQ9XCJNMTAgMWMtNSAwLTkgNC05IDlzNCA5IDkgOSA5LTQgOS05LTQtOS05LTl6bTAgMTZjLTMuOSAwLTctMy4xLTctN3MzLjEtNyA3LTcgNyAzLjEgNyA3LTMuMSA3LTcgN3ptMS0xMUg5djNINnYyaDN2M2gydi0zaDNWOWgtM1Y2ek0xMCAxYy01IDAtOSA0LTkgOXM0IDkgOSA5IDktNCA5LTktNC05LTktOXptMCAxNmMtMy45IDAtNy0zLjEtNy03czMuMS03IDctNyA3IDMuMSA3IDctMy4xIDctNyA3em0xLTExSDl2M0g2djJoM3YzaDJ2LTNoM1Y5aC0zVjZ6XCI+JyArXG5cdFx0XHQnPC9wYXRoPicgK1xuXHRcdFx0Jzwvc3ZnPicgK1xuXHRcdFx0JzwvYnV0dG9uPic7XG5cdFx0dGhpcy5QTFVTX0NMQVNTID0gJ2N0bC1wbHVzJztcblxuXHRcdHRoaXMub3B0aW9uc0Zvcm0gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCB0aGlzLk9QVElPTlNfRk9STV9TRUxFQ1RPUiApO1xuXHRcdHRoaXMudGFibGVzRGF0YSA9IHRoaXMuZ2V0VGFibGVzRGF0YSgpO1xuXHRcdHRoaXMuc3VibWl0QnV0dG9uID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvciggdGhpcy5TVUJNSVRfU0VMRUNUT1IgKTtcblxuXHRcdC8vIENvcHkgdG8gY2xhc3MgcHJvcGVydGllcywgb3RoZXJ3aXNlIGVzbGludCBtYXJrcyBzb21lIHByb3BlcnRpZXMgb2YgZ2xvYmFsIG9iamVjdCBhcyB1bnJlc29sdmVkLlxuXHRcdHRoaXMub3B0aW9uc1NhdmVTdWNjZXNzTWVzc2FnZSA9XG5cdFx0XHRDeXIyTGF0VGFibGVzT2JqZWN0Lm9wdGlvbnNTYXZlU3VjY2Vzc01lc3NhZ2U7XG5cdFx0dGhpcy5vcHRpb25zU2F2ZUVycm9yTWVzc2FnZSA9XG5cdFx0XHRDeXIyTGF0VGFibGVzT2JqZWN0Lm9wdGlvbnNTYXZlRXJyb3JNZXNzYWdlO1xuXG5cdFx0dGhpcy5hZGRXcmFwcGVyKCk7XG5cdFx0dGhpcy5hZGRNZXNzYWdlTGluZXMoKTtcblx0XHR0aGlzLm1vdmVUYWJzKCk7XG5cdFx0dGhpcy5hZGRFZGl0TGFiZWxJbnB1dCgpO1xuXHRcdHRoaXMuaGlkZVRhYmxlcygpO1xuXHRcdHRoaXMuYmluZEV2ZW50cygpO1xuXHRcdHRoaXMuc2V0U3VibWl0U3RhdHVzKCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IGhlYWRlcnMuXG5cdCAqXG5cdCAqIEByZXR1cm4geypbXX0gSGVhZGVycy5cblx0ICovXG5cdGdldEhlYWRlcnMoKSB7XG5cdFx0cmV0dXJuIFsgLi4uZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCggdGhpcy5IRUFERVJfU0VMRUNUT1IgKSBdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBhY3RpdmUgaGVhZGVyLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtFbGVtZW50fSBBY3RpdmUgaGVhZGVyLlxuXHQgKi9cblx0Z2V0QWN0aXZlSGVhZGVyKCkge1xuXHRcdHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuXHRcdFx0dGhpcy5IRUFERVJfU0VMRUNUT1IgKyAnLicgKyB0aGlzLkFDVElWRV9OQVZfVEFCX0NMQVNTXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgYWN0aXZlIGluZGV4LlxuXHQgKlxuXHQgKiBAcmV0dXJuIHsqfSBBY3RpdmUgaW5kZXguXG5cdCAqL1xuXHRnZXRBY3RpdmVJbmRleCgpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRBY3RpdmVIZWFkZXIoKS5kYXRhc2V0LmluZGV4O1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0YWJsZXMuXG5cdCAqXG5cdCAqIEByZXR1cm4geypbXX0gVGFibGVzLlxuXHQgKi9cblx0Z2V0VGFibGVzKCkge1xuXHRcdHJldHVybiBbIC4uLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIHRoaXMuVEFCTEVfU0VMRUNUT1IgKSBdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBhY3RpdmUgdGFibGUuXG5cdCAqXG5cdCAqIEByZXR1cm4ge0VsZW1lbnR9IEFjdGl2ZSB0YWJsZS5cblx0ICovXG5cdGdldEFjdGl2ZVRhYmxlKCkge1xuXHRcdHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuXHRcdFx0dGhpcy5UQUJMRV9TRUxFQ1RPUiArICcuJyArIHRoaXMuQUNUSVZFX1RBQkxFX0NMQVNTXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgaW5wdXRzLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHsqW119IElucHV0cy5cblx0ICovXG5cdGdldElucHV0cygpIHtcblx0XHRyZXR1cm4gW1xuXHRcdFx0Li4uZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcblx0XHRcdFx0dGhpcy5PUFRJT05TX0ZPUk1fU0VMRUNUT1IgKyAnIGlucHV0J1xuXHRcdFx0KSxcblx0XHRdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBsYWJlbHMuXG5cdCAqXG5cdCAqIEByZXR1cm4geypbXX0gTGFiZWxzLlxuXHQgKi9cblx0Z2V0TGFiZWxzKCkge1xuXHRcdHJldHVybiBbXG5cdFx0XHQuLi5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFxuXHRcdFx0XHR0aGlzLk9QVElPTlNfRk9STV9TRUxFQ1RPUiArICcgbGFiZWwnXG5cdFx0XHQpLFxuXHRcdF07XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHBsdXMgYnV0dG9ucy5cblx0ICpcblx0ICogQHJldHVybiB7KltdfSBQbHVzIGJ1dHRvbnMuXG5cdCAqL1xuXHRnZXRQbHVzQnV0dG9ucygpIHtcblx0XHRyZXR1cm4gW1xuXHRcdFx0Li4uZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcblx0XHRcdFx0dGhpcy5PUFRJT05TX0ZPUk1fU0VMRUNUT1IgKyAnIC4nICsgdGhpcy5QTFVTX0NMQVNTXG5cdFx0XHQpLFxuXHRcdF07XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2sgb2YgYWN0aXZlIHRhYmxlIHdhcyBjaGFuZ2VkLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtib29sZWFufSBJZiBhY3RpdmUgdGFibGUgd2FzIGNoYW5nZWQuXG5cdCAqL1xuXHRpc0FjdGl2ZVRhYmxlQ2hhbmdlZCgpIHtcblx0XHRjb25zdCBhY3RpdmVJbmRleCA9IHRoaXMuZ2V0QWN0aXZlSW5kZXgoKTtcblxuXHRcdHJldHVybiAoXG5cdFx0XHRKU09OLnN0cmluZ2lmeSggdGhpcy5nZXRBY3RpdmVUYWJsZURhdGEoKSApICE9PVxuXHRcdFx0SlNPTi5zdHJpbmdpZnkoIHRoaXMudGFibGVzRGF0YVsgYWN0aXZlSW5kZXggXSApXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgc3RhdHVzIG9mIHN1Ym1pdCBidXR0b24uXG5cdCAqL1xuXHRzZXRTdWJtaXRTdGF0dXMoKSB7XG5cdFx0dGhpcy5zdWJtaXRCdXR0b24uZGlzYWJsZWQgPSAhIHRoaXMuaXNBY3RpdmVUYWJsZUNoYW5nZWQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTYXZlIGFjdGl2ZSB0YWJsZS5cblx0ICovXG5cdHNhdmVBY3RpdmVUYWJsZSgpIHtcblx0XHRpZiAoICEgdGhpcy5pc0FjdGl2ZVRhYmxlQ2hhbmdlZCgpICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGFjdGl2ZVRhYmxlID0gdGhpcy5nZXRBY3RpdmVUYWJsZSgpO1xuXG5cdFx0Y29uc3QgYWN0aXZlRm9ybSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdmb3JtJyApO1xuXHRcdGFjdGl2ZUZvcm0uYWN0aW9uID0gdGhpcy5vcHRpb25zRm9ybS5nZXRBdHRyaWJ1dGUoICdhY3Rpb24nICk7XG5cdFx0YWN0aXZlRm9ybS5tZXRob2QgPSB0aGlzLm9wdGlvbnNGb3JtLm1ldGhvZDtcblx0XHRhY3RpdmVGb3JtLmFwcGVuZENoaWxkKCBhY3RpdmVUYWJsZS5jbG9uZU5vZGUoIHRydWUgKSApO1xuXG5cdFx0Y29uc3QgYWN0aXZlSW5wdXRzID0gWyAuLi5hY3RpdmVUYWJsZS5xdWVyeVNlbGVjdG9yQWxsKCAnaW5wdXQnICkgXTtcblx0XHRhY3RpdmVJbnB1dHMubWFwKCAoIGlucHV0ICkgPT4ge1xuXHRcdFx0cmV0dXJuICggYWN0aXZlRm9ybS5xdWVyeVNlbGVjdG9yKCAnIycgKyBpbnB1dC5pZCApLnZhbHVlID1cblx0XHRcdFx0aW5wdXQudmFsdWUgKTtcblx0XHR9ICk7XG5cblx0XHRjb25zdCBoaWRkZW5JbnB1dHMgPSBbXG5cdFx0XHQuLi50aGlzLm9wdGlvbnNGb3JtLnF1ZXJ5U2VsZWN0b3JBbGwoICdpbnB1dFt0eXBlPVwiaGlkZGVuXCJdJyApLFxuXHRcdF07XG5cdFx0aGlkZGVuSW5wdXRzLm1hcCggKCBpbnB1dCApID0+IHtcblx0XHRcdHJldHVybiBhY3RpdmVGb3JtLmFwcGVuZENoaWxkKCBpbnB1dC5jbG9uZU5vZGUoIHRydWUgKSApO1xuXHRcdH0gKTtcblx0XHRkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKCBhY3RpdmVGb3JtICk7XG5cblx0XHRyZXR1cm4gZmV0Y2goIHRoaXMub3B0aW9uc0Zvcm0uZ2V0QXR0cmlidXRlKCAnYWN0aW9uJyApLCB7XG5cdFx0XHRtZXRob2Q6IGFjdGl2ZUZvcm0ubWV0aG9kLFxuXHRcdFx0Ym9keTogbmV3IFVSTFNlYXJjaFBhcmFtcyggWyAuLi5uZXcgRm9ybURhdGEoIGFjdGl2ZUZvcm0gKSBdICksXG5cdFx0fSApXG5cdFx0XHQudGhlbiggKCByZXNwb25zZSApID0+IHtcblx0XHRcdFx0aWYgKCByZXNwb25zZS5vayApIHtcblx0XHRcdFx0XHR0aGlzLnNob3dNZXNzYWdlKFxuXHRcdFx0XHRcdFx0dGhpcy5zdWNjZXNzTWVzc2FnZSxcblx0XHRcdFx0XHRcdHRoaXMub3B0aW9uc1NhdmVTdWNjZXNzTWVzc2FnZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0dGhpcy50YWJsZXNEYXRhID0gdGhpcy5nZXRUYWJsZXNEYXRhKCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5zaG93TWVzc2FnZShcblx0XHRcdFx0XHRcdHRoaXMuZXJyb3JNZXNzYWdlLFxuXHRcdFx0XHRcdFx0dGhpcy5vcHRpb25zU2F2ZUVycm9yTWVzc2FnZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gcmVzcG9uc2UuanNvbigpO1xuXHRcdFx0fSApXG5cdFx0XHQuZmluYWxseSggKCkgPT4ge1xuXHRcdFx0XHRhY3RpdmVGb3JtLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIGFjdGl2ZUZvcm0gKTtcblx0XHRcdFx0dGhpcy5zZXRTdWJtaXRTdGF0dXMoKTtcblx0XHRcdH0gKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGFibGUgZGF0YS5cblx0ICpcblx0ICogQHBhcmFtIHtFbGVtZW50fSB0YWJsZSBUYWJsZS5cblx0ICogQHJldHVybiB7e31bXX0gVGFibGUgZGF0YS5cblx0ICovXG5cdGdldFRhYmxlRGF0YSggdGFibGUgKSB7XG5cdFx0Y29uc3QgaW5wdXRzID0gWyAuLi50YWJsZS5xdWVyeVNlbGVjdG9yQWxsKCAnaW5wdXQnICkgXTtcblxuXHRcdGNvbnN0IGRhdGEgPSB7fTtcblx0XHRpbnB1dHMuZm9yRWFjaCggKCBpbnB1dCApID0+IHtcblx0XHRcdGNvbnN0IGxhYmVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcihcblx0XHRcdFx0dGhpcy5PUFRJT05TX0ZPUk1fU0VMRUNUT1IgKyAnIGxhYmVsW2Zvcj1cIicgKyBpbnB1dC5pZCArICdcIl0nXG5cdFx0XHQpO1xuXG5cdFx0XHRkYXRhWyBsYWJlbC5pbm5lckhUTUwgXSA9IGlucHV0LnZhbHVlO1xuXHRcdH0gKTtcblxuXHRcdHJldHVybiBkYXRhO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBkYXRhIGZyb20gYWxsIHRhYmxlcy5cblx0ICpcblx0ICogQHJldHVybiB7e31bXVtdfSBEYXRhIGZyb20gYWxsIHRhYmxlcy5cblx0ICovXG5cdGdldFRhYmxlc0RhdGEoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VGFibGVzKCkubWFwKCAoIHRhYmxlICkgPT4ge1xuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0VGFibGVEYXRhKCB0YWJsZSApO1xuXHRcdH0gKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgYWN0aXZlIHRhYmxlIGRhdGEuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3t9W119IEFjdGl2ZSB0YWJsZSBkYXRhLlxuXHQgKi9cblx0Z2V0QWN0aXZlVGFibGVEYXRhKCkge1xuXHRcdHJldHVybiB0aGlzLmdldFRhYmxlRGF0YSggdGhpcy5nZXRBY3RpdmVUYWJsZSgpICk7XG5cdH1cblxuXHQvKipcblx0ICogQWRkIHdyYXBwZXIuXG5cdCAqL1xuXHRhZGRXcmFwcGVyKCkge1xuXHRcdHRoaXMud3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICd1bCcgKTtcblx0XHR0aGlzLndyYXBwZXIuY2xhc3NMaXN0LmFkZCggJ25hdi10YWItd3JhcHBlcicgKTtcblx0XHR0aGlzLm9wdGlvbnNGb3JtLmluc2VydEJlZm9yZShcblx0XHRcdHRoaXMud3JhcHBlcixcblx0XHRcdHRoaXMub3B0aW9uc0Zvcm0uZmlyc3RDaGlsZFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQWRkIG1lc3NhZ2UgbGluZS5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGlkIE1lc3NhZ2UgaWQuXG5cdCAqIEByZXR1cm4ge0hUTUxEaXZFbGVtZW50fSBNZXNzYWdlIGxpbmUuXG5cdCAqL1xuXHRhZGRNZXNzYWdlTGluZSggaWQgKSB7XG5cdFx0Y29uc3QgbWVzc2FnZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdkaXYnICk7XG5cdFx0bWVzc2FnZS5pZCA9IGlkO1xuXHRcdHRoaXMub3B0aW9uc0Zvcm0uaW5zZXJ0QmVmb3JlKCBtZXNzYWdlLCB0aGlzLm9wdGlvbnNGb3JtLmZpcnN0Q2hpbGQgKTtcblxuXHRcdHJldHVybiBtZXNzYWdlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBzdWNjZXNzIGFuZCBlcnJvciBtZXNzYWdlIGxpbmVzLlxuXHQgKi9cblx0YWRkTWVzc2FnZUxpbmVzKCkge1xuXHRcdHRoaXMuc3VjY2Vzc01lc3NhZ2UgPSB0aGlzLmFkZE1lc3NhZ2VMaW5lKCAnY3RsLXN1Y2Nlc3MnICk7XG5cdFx0dGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmFkZE1lc3NhZ2VMaW5lKCAnY3RsLWVycm9yJyApO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ha2UgdGFicyB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgZm9ybS5cblx0ICovXG5cdG1vdmVUYWJzKCkge1xuXHRcdGNvbnN0IHRhYnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCAnLmN0bC1zZXR0aW5ncy10YWJzJyApO1xuXHRcdGlmICggdGFicyApIHtcblx0XHRcdHRoaXMub3B0aW9uc0Zvcm0uaW5zZXJ0QmVmb3JlKCB0YWJzLCB0aGlzLm9wdGlvbnNGb3JtLmZpcnN0Q2hpbGQgKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQWRkIGVkaXQgbGFiZWwgaW5wdXQuXG5cdCAqL1xuXHRhZGRFZGl0TGFiZWxJbnB1dCgpIHtcblx0XHR0aGlzLmVkaXRMYWJlbElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2lucHV0JyApO1xuXHRcdHRoaXMuZWRpdExhYmVsSW5wdXQuaWQgPSB0aGlzLkVESVRfTEFCRUxfSUQ7XG5cdFx0dGhpcy5lZGl0TGFiZWxJbnB1dC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuXHRcdGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoIHRoaXMuZWRpdExhYmVsSW5wdXQgKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIaWRlIGVkaXQgbGFiZWwgaW5wdXQuXG5cdCAqL1xuXHRoaWRlRWRpdExhYmVsSW5wdXQoKSB7XG5cdFx0dGhpcy5lZGl0TGFiZWxJbnB1dC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuXHRcdHRoaXMuZWRpdExhYmVsSW5wdXQuY2xhc3NMaXN0LnJlbW92ZSggdGhpcy5FRElUX0xBQkVMX0VSUk9SX0NMQVNTICk7XG5cdFx0ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCggdGhpcy5lZGl0TGFiZWxJbnB1dCApO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBsYXN0IGNlbGwgaW4gYWN0aXZlIHRhYmxlLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtFbGVtZW50fSBMYXN0IGNlbGwuXG5cdCAqL1xuXHRnZXRMYXN0Q2VsbCgpIHtcblx0XHRyZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcihcblx0XHRcdHRoaXMuT1BUSU9OU19GT1JNX1NFTEVDVE9SICtcblx0XHRcdFx0JyAuJyArXG5cdFx0XHRcdHRoaXMuQUNUSVZFX1RBQkxFX0NMQVNTICtcblx0XHRcdFx0JyAuJyArXG5cdFx0XHRcdHRoaXMuUExVU19DTEFTU1xuXHRcdCkucHJldmlvdXNFbGVtZW50U2libGluZztcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgbmV3IGNlbGwgdG8gdGhlIGFjdGl2ZSB0YWJsZS5cblx0ICovXG5cdGFkZENlbGwoKSB7XG5cdFx0bGV0IGxhc3RDZWxsID0gdGhpcy5nZXRMYXN0Q2VsbCgpO1xuXHRcdGxhc3RDZWxsLnBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKFxuXHRcdFx0bGFzdENlbGwuY2xvbmVOb2RlKCB0cnVlICksXG5cdFx0XHRsYXN0Q2VsbC5uZXh0RWxlbWVudFNpYmxpbmdcblx0XHQpO1xuXG5cdFx0bGFzdENlbGwgPSB0aGlzLmdldExhc3RDZWxsKCk7XG5cdFx0Y29uc3QgbGFiZWwgPSBsYXN0Q2VsbC5xdWVyeVNlbGVjdG9yKCAnbGFiZWwnICk7XG5cdFx0Y29uc3QgaW5wdXQgPSBsYXN0Q2VsbC5xdWVyeVNlbGVjdG9yKCAnaW5wdXQnICk7XG5cblx0XHRjb25zdCBpZEFyciA9IGlucHV0LmlkLnNwbGl0KCAnLScgKTtcblx0XHRjb25zdCBuZXdJZCA9IGlkQXJyWyAwIF0gKyAnLScgKyAoIHBhcnNlSW50KCBpZEFyclsgMSBdICkgKyAxICk7XG5cblx0XHRsYWJlbC5odG1sRm9yID0gbmV3SWQ7XG5cdFx0bGFiZWwuaW5uZXJIVE1MID0gJyc7XG5cblx0XHRpbnB1dC5pZCA9IG5ld0lkO1xuXHRcdGlucHV0LnZhbHVlID0gJyc7XG5cdFx0aW5wdXQuc2V0QXR0cmlidXRlKCAndmFsdWUnLCAnJyApO1xuXHRcdHRoaXMucmVwbGFjZU5hbWUoIGlucHV0LCAnJyApO1xuXG5cdFx0dGhpcy5iaW5kRXZlbnRzKCk7XG5cblx0XHR0aGlzLmVkaXRMYWJlbCggbGFiZWwgKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIaWRlIGNvbnZlcnNpb24gdGFibGVzIGV4Y2VwdCB0aGUgZmlyc3Qgb25lLlxuXHQgKiBDcmVhdGUgbmF2aWdhdGlvbiB0YWJzLlxuXHQgKi9cblx0aGlkZVRhYmxlcygpIHtcblx0XHRsZXQgY3VycmVudEluZGV4ID0gMDtcblxuXHRcdHRoaXMuZ2V0VGFibGVzKCkubWFwKCAoIHRhYmxlLCBpbmRleCApID0+IHtcblx0XHRcdHRhYmxlLmNsYXNzTGlzdC5hZGQoICdjdGwtdGFibGUnICk7XG5cblx0XHRcdGlmICggdGhpcy5DVVJSRU5UX1NUVUJfSUQgPT09IHRhYmxlLnByZXZpb3VzRWxlbWVudFNpYmxpbmcuaWQgKSB7XG5cdFx0XHRcdGN1cnJlbnRJbmRleCA9IGluZGV4O1xuXHRcdFx0XHR0YWJsZS5jbGFzc0xpc3QuYWRkKCB0aGlzLkFDVElWRV9UQUJMRV9DTEFTUyApO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBwbHVzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTtcblx0XHRcdHBsdXMuY2xhc3NMaXN0LmFkZCggdGhpcy5QTFVTX0NMQVNTICk7XG5cdFx0XHRwbHVzLmlubmVySFRNTCA9IHRoaXMucGx1c0J1dHRvbjtcblx0XHRcdHRhYmxlLnF1ZXJ5U2VsZWN0b3IoICd0ZCcgKS5hcHBlbmRDaGlsZCggcGx1cyApO1xuXG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9ICk7XG5cblx0XHR0aGlzLmdldEhlYWRlcnMoKS5tYXAoICggaGVhZGVyLCBpbmRleCApID0+IHtcblx0XHRcdGhlYWRlci5jbGFzc0xpc3QuYWRkKCAnbmF2LXRhYicgKTtcblx0XHRcdGhlYWRlci5kYXRhc2V0LmluZGV4ID0gaW5kZXg7XG5cblx0XHRcdHRoaXMud3JhcHBlci5hcHBlbmRDaGlsZCggaGVhZGVyICk7XG5cdFx0XHRpZiAoIGluZGV4ID09PSBjdXJyZW50SW5kZXggKSB7XG5cdFx0XHRcdGhlYWRlci5jbGFzc0xpc3QuYWRkKCB0aGlzLkNVUlJFTlRfTkFWX1RBQl9DTEFTUyApO1xuXHRcdFx0XHRoZWFkZXIuY2xhc3NMaXN0LmFkZCggdGhpcy5BQ1RJVkVfTkFWX1RBQl9DTEFTUyApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9ICk7XG5cdH1cblxuXHQvKipcblx0ICogQmluZCBldmVudHMgdG8gbWV0aG9kcy5cblx0ICovXG5cdGJpbmRFdmVudHMoKSB7XG5cdFx0dGhpcy5nZXRIZWFkZXJzKCkubWFwKCAoIGhlYWRlciwgaSwgaGVhZGVycyApID0+IHtcblx0XHRcdGhlYWRlci5vbmNsaWNrID0gKCBldmVudCApID0+IHtcblx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuXHRcdFx0XHRjb25zdCBpbmRleCA9IGV2ZW50LnRhcmdldC5kYXRhc2V0LmluZGV4O1xuXHRcdFx0XHRjb25zdCBhY3RpdmVJbmRleCA9IHRoaXMuZ2V0QWN0aXZlSW5kZXgoKTtcblxuXHRcdFx0XHRpZiAoIGluZGV4ID09PSBhY3RpdmVJbmRleCApIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLnNhdmVBY3RpdmVUYWJsZSgpO1xuXG5cdFx0XHRcdGhlYWRlcnMubWFwKCAoIGFIZWFkZXIgKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIGFIZWFkZXIuY2xhc3NMaXN0LnJlbW92ZShcblx0XHRcdFx0XHRcdHRoaXMuQUNUSVZFX05BVl9UQUJfQ0xBU1Ncblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9ICk7XG5cdFx0XHRcdGhlYWRlcnNbIGluZGV4IF0uY2xhc3NMaXN0LmFkZCggdGhpcy5BQ1RJVkVfTkFWX1RBQl9DTEFTUyApO1xuXG5cdFx0XHRcdGNvbnN0IHRhYmxlcyA9IHRoaXMuZ2V0VGFibGVzKCk7XG5cdFx0XHRcdHRhYmxlcy5tYXAoICggdGFibGUgKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHRhYmxlLmNsYXNzTGlzdC5yZW1vdmUoIHRoaXMuQUNUSVZFX1RBQkxFX0NMQVNTICk7XG5cdFx0XHRcdH0gKTtcblx0XHRcdFx0dGFibGVzWyBpbmRleCBdLmNsYXNzTGlzdC5hZGQoIHRoaXMuQUNUSVZFX1RBQkxFX0NMQVNTICk7XG5cblx0XHRcdFx0dGhpcy5zZXRTdWJtaXRTdGF0dXMoKTtcblxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9O1xuXG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9ICk7XG5cblx0XHR0aGlzLmdldElucHV0cygpLm1hcCggKCBpbnB1dCApID0+IHtcblx0XHRcdGlucHV0Lm9uaW5wdXQgPSAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuc2V0U3VibWl0U3RhdHVzKCk7XG5cdFx0XHR9O1xuXG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9ICk7XG5cblx0XHR0aGlzLmdldExhYmVscygpLm1hcCggKCBsYWJlbCApID0+IHtcblx0XHRcdGxhYmVsLm9uY2xpY2sgPSAoIGV2ZW50ICkgPT4ge1xuXHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHR0aGlzLmVkaXRMYWJlbCggZXZlbnQudGFyZ2V0ICk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH07XG5cblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH0gKTtcblxuXHRcdHRoaXMuZWRpdExhYmVsSW5wdXQub25ibHVyID0gKCkgPT4ge1xuXHRcdFx0dGhpcy5zYXZlTGFiZWwoKTtcblx0XHR9O1xuXG5cdFx0dGhpcy5lZGl0TGFiZWxJbnB1dC5vbmtleXVwID0gKCBlICkgPT4ge1xuXHRcdFx0aWYgKCAnRXNjYXBlJyA9PT0gZS5rZXkgKSB7XG5cdFx0XHRcdHRoaXMuc2F2ZUxhYmVsKCB0cnVlICk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggJ0VudGVyJyA9PT0gZS5rZXkgKSB7XG5cdFx0XHRcdHRoaXMuc2F2ZUxhYmVsKCk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdHRoaXMuZ2V0UGx1c0J1dHRvbnMoKS5tYXAoICggcGx1cyApID0+IHtcblx0XHRcdHBsdXMub25jbGljayA9ICggZXZlbnQgKSA9PiB7XG5cdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdHRoaXMuYWRkQ2VsbCggZXZlbnQudGFyZ2V0ICk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH07XG5cblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH0gKTtcblxuXHRcdHRoaXMuc3VibWl0QnV0dG9uLm9uY2xpY2sgPSAoIGV2ZW50ICkgPT4ge1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdHRoaXMuc2F2ZUFjdGl2ZVRhYmxlKCk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFZGl0IGxhYmVsLlxuXHQgKlxuXHQgKiBAcGFyYW0ge0VsZW1lbnR9IGxhYmVsIExhYmVsIHRvIGVkaXQuXG5cdCAqL1xuXHRlZGl0TGFiZWwoIGxhYmVsICkge1xuXHRcdGxhYmVsLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQoIHRoaXMuZWRpdExhYmVsSW5wdXQgKTtcblx0XHR0aGlzLmVkaXRMYWJlbElucHV0LnZhbHVlID0gbGFiZWwuaW5uZXJIVE1MO1xuXG5cdFx0dGhpcy5lZGl0TGFiZWxJbnB1dC5jbGFzc0xpc3QucmVtb3ZlKCB0aGlzLkVESVRfTEFCRUxfRVJST1JfQ0xBU1MgKTtcblx0XHR0aGlzLmVkaXRMYWJlbElucHV0LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuXHRcdHRoaXMuZWRpdExhYmVsSW5wdXQuZm9jdXMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJcyBuZXcgdmFsdWUgb2YgZWRpdGVkIGxhYmVsIHVuaXF1ZSBpbiBhY3RpdmUgdGFibGUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBuZXdWYWx1ZSBOZXcgVmFsdWUgZnJvbSBlZGl0ZWQgbGFiZWwuXG5cdCAqIEByZXR1cm4geyp9IElmIG5ldyB2YWx1ZSBvZiBlZGl0ZWQgbGFiZWwgaXMgdW5pcXVlIGluIGFjdGl2ZSB0YWJsZS5cblx0ICovXG5cdGlzVW5pcXVlTGFiZWwoIG5ld1ZhbHVlICkge1xuXHRcdHJldHVybiBbIC4uLnRoaXMuZ2V0QWN0aXZlVGFibGUoKS5xdWVyeVNlbGVjdG9yQWxsKCAnbGFiZWwnICkgXS5yZWR1Y2UoXG5cdFx0XHQoIGFjYywgbGFiZWwgKSA9PiB7XG5cdFx0XHRcdHJldHVybiBhY2MgJiYgbGFiZWwuaW5uZXJIVE1MICE9PSBuZXdWYWx1ZTtcblx0XHRcdH0sXG5cdFx0XHR0cnVlXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTYXZlIG1vZGlmaWVkIGxhYmVsLlxuXHQgKlxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGNhbmNlbCBDYW5jZWwuXG5cdCAqL1xuXHRzYXZlTGFiZWwoIGNhbmNlbCA9IGZhbHNlICkge1xuXHRcdGlmICggJ25vbmUnID09PSB0aGlzLmVkaXRMYWJlbElucHV0LnN0eWxlLmRpc3BsYXkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgbmV3VmFsdWUgPSB0aGlzLmVkaXRMYWJlbElucHV0LnZhbHVlLnRyaW0oKTtcblxuXHRcdGlmICggJycgPT09IG5ld1ZhbHVlICkge1xuXHRcdFx0Y29uc3QgZWRpdGVkQ2VsbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCB0aGlzLkVESVRfTEFCRUxfSUQgKVxuXHRcdFx0XHQucGFyZW50RWxlbWVudDtcblx0XHRcdHRoaXMuaGlkZUVkaXRMYWJlbElucHV0KCk7XG5cdFx0XHRlZGl0ZWRDZWxsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIGVkaXRlZENlbGwgKTtcblx0XHRcdHRoaXMuc2V0U3VibWl0U3RhdHVzKCk7XG5cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBsYWJlbCA9IHRoaXMuZWRpdExhYmVsSW5wdXQucGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yKCAnbGFiZWwnICk7XG5cdFx0aWYgKCBjYW5jZWwgfHwgbmV3VmFsdWUgPT09IGxhYmVsLmlubmVySFRNTCApIHtcblx0XHRcdHRoaXMuaGlkZUVkaXRMYWJlbElucHV0KCk7XG5cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoICEgdGhpcy5pc1VuaXF1ZUxhYmVsKCBuZXdWYWx1ZSApICkge1xuXHRcdFx0dGhpcy5lZGl0TGFiZWxJbnB1dC5jbGFzc0xpc3QuYWRkKCB0aGlzLkVESVRfTEFCRUxfRVJST1JfQ0xBU1MgKTtcblxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGlucHV0ID0gdGhpcy5lZGl0TGFiZWxJbnB1dC5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3IoICdpbnB1dCcgKTtcblxuXHRcdHRoaXMuaGlkZUVkaXRMYWJlbElucHV0KCk7XG5cblx0XHRsYWJlbC5pbm5lckhUTUwgPSBuZXdWYWx1ZTtcblx0XHR0aGlzLnJlcGxhY2VOYW1lKCBpbnB1dCwgbmV3VmFsdWUgKTtcblxuXHRcdHRoaXMuc2V0U3VibWl0U3RhdHVzKCk7XG5cdH1cblxuXHQvKipcblx0ICogUmVwbGFjZSBpbnB1dCBuYW1lIGFjY29yZGluZyB0byB0aGUgbmV3IGxhYmVsIHZhbHVlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge0VsZW1lbnR9IGlucHV0IElucHV0XG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBuZXdWYWx1ZSBOZXcgbGFiZWwgdmFsdWVcblx0ICovXG5cdHJlcGxhY2VOYW1lKCBpbnB1dCwgbmV3VmFsdWUgKSB7XG5cdFx0Ly8gbm9pbnNwZWN0aW9uIEpTVW5yZXNvbHZlZFZhcmlhYmxlXG5cdFx0aW5wdXQubmFtZSA9IGlucHV0Lm5hbWUucmVwbGFjZShcblx0XHRcdC8oLitcXFsuK10pXFxbLipdL2csXG5cdFx0XHQnJDFbJyArIG5ld1ZhbHVlICsgJ10nXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDbGVhciBtZXNzYWdlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge0hUTUxEaXZFbGVtZW50fSBtZXNzYWdlIE1lc3NhZ2UuXG5cdCAqL1xuXHRjbGVhck1lc3NhZ2UoIG1lc3NhZ2UgKSB7XG5cdFx0bWVzc2FnZS5pbm5lckhUTUwgPSAnJztcblx0XHRtZXNzYWdlLmNsYXNzTGlzdC5yZW1vdmUoICdhY3RpdmUnICk7XG5cdH1cblxuXHQvKipcblx0ICogQ2xlYXIgbWVzc2FnZXMuXG5cdCAqL1xuXHRjbGVhck1lc3NhZ2VzKCkge1xuXHRcdHRoaXMuY2xlYXJNZXNzYWdlKCB0aGlzLnN1Y2Nlc3NNZXNzYWdlICk7XG5cdFx0dGhpcy5jbGVhck1lc3NhZ2UoIHRoaXMuZXJyb3JNZXNzYWdlICk7XG5cdFx0Y2xlYXJUaW1lb3V0KCB0aGlzLm1zZ1RpbWVyICk7XG5cdH1cblxuXHQvKipcblx0ICogU2hvdyBtZXNzYWdlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge0hUTUxEaXZFbGVtZW50fSBlbCBFbGVtZW50LlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBNZXNzYWdlLlxuXHQgKi9cblx0c2hvd01lc3NhZ2UoIGVsLCBtZXNzYWdlICkge1xuXHRcdGVsLmlubmVySFRNTCA9IG1lc3NhZ2U7XG5cdFx0ZWwuY2xhc3NMaXN0LmFkZCggJ2FjdGl2ZScgKTtcblxuXHRcdHRoaXMubXNnVGltZXIgPSBzZXRUaW1lb3V0KCAoKSA9PiB7XG5cdFx0XHR0aGlzLmNsZWFyTWVzc2FnZXMoKTtcblx0XHR9LCA1MDAwICk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVGFibGVzO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==
1
  !function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=0)}([function(e,t,n){n(1),e.exports=n(2)},function(e,t){var n="undefined"!=typeof self?self:this,r=function(){function e(){this.fetch=!1,this.DOMException=n.DOMException}return e.prototype=n,new e}();!function(e){!function(t){var n="URLSearchParams"in e,r="Symbol"in e&&"iterator"in Symbol,i="FileReader"in e&&"Blob"in e&&function(){try{return new Blob,!0}catch(e){return!1}}(),s="FormData"in e,o="ArrayBuffer"in e;if(o)var a=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],u=ArrayBuffer.isView||function(e){return e&&a.indexOf(Object.prototype.toString.call(e))>-1};function l(e){if("string"!=typeof e&&(e=String(e)),/[^a-z0-9\-#$%&'*+.^_`|~]/i.test(e))throw new TypeError("Invalid character in header field name");return e.toLowerCase()}function c(e){return"string"!=typeof e&&(e=String(e)),e}function h(e){var t={next:function(){var t=e.shift();return{done:void 0===t,value:t}}};return r&&(t[Symbol.iterator]=function(){return t}),t}function d(e){this.map={},e instanceof d?e.forEach((function(e,t){this.append(t,e)}),this):Array.isArray(e)?e.forEach((function(e){this.append(e[0],e[1])}),this):e&&Object.getOwnPropertyNames(e).forEach((function(t){this.append(t,e[t])}),this)}function p(e){if(e.bodyUsed)return Promise.reject(new TypeError("Already read"));e.bodyUsed=!0}function f(e){return new Promise((function(t,n){e.onload=function(){t(e.result)},e.onerror=function(){n(e.error)}}))}function y(e){var t=new FileReader,n=f(t);return t.readAsArrayBuffer(e),n}function b(e){if(e.slice)return e.slice(0);var t=new Uint8Array(e.byteLength);return t.set(new Uint8Array(e)),t.buffer}function v(){return this.bodyUsed=!1,this._initBody=function(e){var t;this._bodyInit=e,e?"string"==typeof e?this._bodyText=e:i&&Blob.prototype.isPrototypeOf(e)?this._bodyBlob=e:s&&FormData.prototype.isPrototypeOf(e)?this._bodyFormData=e:n&&URLSearchParams.prototype.isPrototypeOf(e)?this._bodyText=e.toString():o&&i&&((t=e)&&DataView.prototype.isPrototypeOf(t))?(this._bodyArrayBuffer=b(e.buffer),this._bodyInit=new Blob([this._bodyArrayBuffer])):o&&(ArrayBuffer.prototype.isPrototypeOf(e)||u(e))?this._bodyArrayBuffer=b(e):this._bodyText=e=Object.prototype.toString.call(e):this._bodyText="",this.headers.get("content-type")||("string"==typeof e?this.headers.set("content-type","text/plain;charset=UTF-8"):this._bodyBlob&&this._bodyBlob.type?this.headers.set("content-type",this._bodyBlob.type):n&&URLSearchParams.prototype.isPrototypeOf(e)&&this.headers.set("content-type","application/x-www-form-urlencoded;charset=UTF-8"))},i&&(this.blob=function(){var e=p(this);if(e)return e;if(this._bodyBlob)return Promise.resolve(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(new Blob([this._bodyArrayBuffer]));if(this._bodyFormData)throw new Error("could not read FormData body as blob");return Promise.resolve(new Blob([this._bodyText]))},this.arrayBuffer=function(){return this._bodyArrayBuffer?p(this)||Promise.resolve(this._bodyArrayBuffer):this.blob().then(y)}),this.text=function(){var e,t,n,r=p(this);if(r)return r;if(this._bodyBlob)return e=this._bodyBlob,t=new FileReader,n=f(t),t.readAsText(e),n;if(this._bodyArrayBuffer)return Promise.resolve(function(e){for(var t=new Uint8Array(e),n=new Array(t.length),r=0;r<t.length;r++)n[r]=String.fromCharCode(t[r]);return n.join("")}(this._bodyArrayBuffer));if(this._bodyFormData)throw new Error("could not read FormData body as text");return Promise.resolve(this._bodyText)},s&&(this.formData=function(){return this.text().then(L)}),this.json=function(){return this.text().then(JSON.parse)},this}d.prototype.append=function(e,t){e=l(e),t=c(t);var n=this.map[e];this.map[e]=n?n+", "+t:t},d.prototype.delete=function(e){delete this.map[l(e)]},d.prototype.get=function(e){return e=l(e),this.has(e)?this.map[e]:null},d.prototype.has=function(e){return this.map.hasOwnProperty(l(e))},d.prototype.set=function(e,t){this.map[l(e)]=c(t)},d.prototype.forEach=function(e,t){for(var n in this.map)this.map.hasOwnProperty(n)&&e.call(t,this.map[n],n,this)},d.prototype.keys=function(){var e=[];return this.forEach((function(t,n){e.push(n)})),h(e)},d.prototype.values=function(){var e=[];return this.forEach((function(t){e.push(t)})),h(e)},d.prototype.entries=function(){var e=[];return this.forEach((function(t,n){e.push([n,t])})),h(e)},r&&(d.prototype[Symbol.iterator]=d.prototype.entries);var m=["DELETE","GET","HEAD","OPTIONS","POST","PUT"];function E(e,t){var n,r,i=(t=t||{}).body;if(e instanceof E){if(e.bodyUsed)throw new TypeError("Already read");this.url=e.url,this.credentials=e.credentials,t.headers||(this.headers=new d(e.headers)),this.method=e.method,this.mode=e.mode,this.signal=e.signal,i||null==e._bodyInit||(i=e._bodyInit,e.bodyUsed=!0)}else this.url=String(e);if(this.credentials=t.credentials||this.credentials||"same-origin",!t.headers&&this.headers||(this.headers=new d(t.headers)),this.method=(n=t.method||this.method||"GET",r=n.toUpperCase(),m.indexOf(r)>-1?r:n),this.mode=t.mode||this.mode||null,this.signal=t.signal||this.signal,this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&i)throw new TypeError("Body not allowed for GET or HEAD requests");this._initBody(i)}function L(e){var t=new FormData;return e.trim().split("&").forEach((function(e){if(e){var n=e.split("="),r=n.shift().replace(/\+/g," "),i=n.join("=").replace(/\+/g," ");t.append(decodeURIComponent(r),decodeURIComponent(i))}})),t}function S(e,t){t||(t={}),this.type="default",this.status=void 0===t.status?200:t.status,this.ok=this.status>=200&&this.status<300,this.statusText="statusText"in t?t.statusText:"OK",this.headers=new d(t.headers),this.url=t.url||"",this._initBody(e)}E.prototype.clone=function(){return new E(this,{body:this._bodyInit})},v.call(E.prototype),v.call(S.prototype),S.prototype.clone=function(){return new S(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new d(this.headers),url:this.url})},S.error=function(){var e=new S(null,{status:0,statusText:""});return e.type="error",e};var T=[301,302,303,307,308];S.redirect=function(e,t){if(-1===T.indexOf(t))throw new RangeError("Invalid status code");return new S(null,{status:t,headers:{location:e}})},t.DOMException=e.DOMException;try{new t.DOMException}catch(e){t.DOMException=function(e,t){this.message=e,this.name=t;var n=Error(e);this.stack=n.stack},t.DOMException.prototype=Object.create(Error.prototype),t.DOMException.prototype.constructor=t.DOMException}function _(e,n){return new Promise((function(r,s){var o=new E(e,n);if(o.signal&&o.signal.aborted)return s(new t.DOMException("Aborted","AbortError"));var a=new XMLHttpRequest;function u(){a.abort()}a.onload=function(){var e,t,n={status:a.status,statusText:a.statusText,headers:(e=a.getAllResponseHeaders()||"",t=new d,e.replace(/\r?\n[\t ]+/g," ").split(/\r?\n/).forEach((function(e){var n=e.split(":"),r=n.shift().trim();if(r){var i=n.join(":").trim();t.append(r,i)}})),t)};n.url="responseURL"in a?a.responseURL:n.headers.get("X-Request-URL");var i="response"in a?a.response:a.responseText;r(new S(i,n))},a.onerror=function(){s(new TypeError("Network request failed"))},a.ontimeout=function(){s(new TypeError("Network request failed"))},a.onabort=function(){s(new t.DOMException("Aborted","AbortError"))},a.open(o.method,o.url,!0),"include"===o.credentials?a.withCredentials=!0:"omit"===o.credentials&&(a.withCredentials=!1),"responseType"in a&&i&&(a.responseType="blob"),o.headers.forEach((function(e,t){a.setRequestHeader(t,e)})),o.signal&&(o.signal.addEventListener("abort",u),a.onreadystatechange=function(){4===a.readyState&&o.signal.removeEventListener("abort",u)}),a.send(void 0===o._bodyInit?null:o._bodyInit)}))}_.polyfill=!0,e.fetch||(e.fetch=_,e.Headers=d,e.Request=E,e.Response=S),t.Headers=d,t.Request=E,t.Response=S,t.fetch=_,Object.defineProperty(t,"__esModule",{value:!0})}({})}(r),r.fetch.ponyfill=!0,delete r.fetch.polyfill;var i=r;(t=i.fetch).default=i.fetch,t.fetch=i.fetch,t.Headers=i.Headers,t.Request=i.Request,t.Response=i.Response,e.exports=t},function(e,t,n){"use strict";var r,i=n(3),s=(r=i)&&r.__esModule?r:{default:r};document.addEventListener("DOMContentLoaded",(function(){new s.default}))},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();function i(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}var s=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.OPTIONS_FORM_SELECTOR="#ctl-options",this.HEADER_SELECTOR=this.OPTIONS_FORM_SELECTOR+" h2",this.TABLE_SELECTOR=this.OPTIONS_FORM_SELECTOR+" table",this.SUBMIT_SELECTOR=this.OPTIONS_FORM_SELECTOR+" #submit",this.CURRENT_STUB_ID="ctl-current",this.CURRENT_NAV_TAB_CLASS="nav-tab-current",this.ACTIVE_NAV_TAB_CLASS="nav-tab-active",this.ACTIVE_TABLE_CLASS="active",this.EDIT_LABEL_ID="ctl-edit-label",this.EDIT_LABEL_ERROR_CLASS="ctl-edit-label-error",this.plusButton='<button type="button" aria-haspopup="true" aria-expanded="false" class="components-button block-editor-inserter__toggle has-icon" aria-label="Добавить блок"><svg width="24" height="24" xmlns="http://www.w3.org/2000/svg" viewBox="-2 -2 24 24" role="img" aria-hidden="true" focusable="false"><path d="M10 1c-5 0-9 4-9 9s4 9 9 9 9-4 9-9-4-9-9-9zm0 16c-3.9 0-7-3.1-7-7s3.1-7 7-7 7 3.1 7 7-3.1 7-7 7zm1-11H9v3H6v2h3v3h2v-3h3V9h-3V6zM10 1c-5 0-9 4-9 9s4 9 9 9 9-4 9-9-4-9-9-9zm0 16c-3.9 0-7-3.1-7-7s3.1-7 7-7 7 3.1 7 7-3.1 7-7 7zm1-11H9v3H6v2h3v3h2v-3h3V9h-3V6z"></path></svg></button>',this.PLUS_CLASS="ctl-plus",this.optionsForm=document.querySelector(this.OPTIONS_FORM_SELECTOR),this.tablesData=this.getTablesData(),this.submitButton=document.querySelector(this.SUBMIT_SELECTOR),this.optionsSaveSuccessMessage=Cyr2LatTablesObject.optionsSaveSuccessMessage,this.optionsSaveErrorMessage=Cyr2LatTablesObject.optionsSaveErrorMessage,this.addWrapper(),this.addMessageLines(),this.moveTabs(),this.addEditLabelInput(),this.hideTables(),this.bindEvents(),this.setSubmitStatus()}return r(e,[{key:"getHeaders",value:function(){return[].concat(i(document.querySelectorAll(this.HEADER_SELECTOR)))}},{key:"getActiveHeader",value:function(){return document.querySelector(this.HEADER_SELECTOR+"."+this.ACTIVE_NAV_TAB_CLASS)}},{key:"getActiveIndex",value:function(){return this.getActiveHeader().dataset.index}},{key:"getTables",value:function(){return[].concat(i(document.querySelectorAll(this.TABLE_SELECTOR)))}},{key:"getActiveTable",value:function(){return document.querySelector(this.TABLE_SELECTOR+"."+this.ACTIVE_TABLE_CLASS)}},{key:"getInputs",value:function(){return[].concat(i(document.querySelectorAll(this.OPTIONS_FORM_SELECTOR+" input")))}},{key:"getLabels",value:function(){return[].concat(i(document.querySelectorAll(this.OPTIONS_FORM_SELECTOR+" label")))}},{key:"getPlusButtons",value:function(){return[].concat(i(document.querySelectorAll(this.OPTIONS_FORM_SELECTOR+" ."+this.PLUS_CLASS)))}},{key:"isActiveTableChanged",value:function(){var e=this.getActiveIndex();return JSON.stringify(this.getActiveTableData())!==JSON.stringify(this.tablesData[e])}},{key:"setSubmitStatus",value:function(){this.submitButton.disabled=!this.isActiveTableChanged()}},{key:"saveActiveTable",value:function(){var e=this;if(this.isActiveTableChanged()){var t=this.getActiveTable(),n=document.createElement("form");return n.action=this.optionsForm.getAttribute("action"),n.method=this.optionsForm.method,n.appendChild(t.cloneNode(!0)),[].concat(i(t.querySelectorAll("input"))).map((function(e){return n.querySelector("#"+e.id).value=e.value})),[].concat(i(this.optionsForm.querySelectorAll('input[type="hidden"]'))).map((function(e){return n.appendChild(e.cloneNode(!0))})),document.body.appendChild(n),fetch(this.optionsForm.getAttribute("action"),{method:n.method,body:new URLSearchParams([].concat(i(new FormData(n))))}).then((function(t){return t.ok?(e.showMessage(e.successMessage,e.optionsSaveSuccessMessage),e.tablesData=e.getTablesData()):e.showMessage(e.errorMessage,e.optionsSaveErrorMessage),t.json()})).finally((function(){n.parentNode.removeChild(n),e.setSubmitStatus()}))}}},{key:"getTableData",value:function(e){var t=this,n=[].concat(i(e.querySelectorAll("input"))),r={};return n.forEach((function(e){var n=document.querySelector(t.OPTIONS_FORM_SELECTOR+' label[for="'+e.id+'"]');r[n.innerHTML]=e.value})),r}},{key:"getTablesData",value:function(){var e=this;return this.getTables().map((function(t){return e.getTableData(t)}))}},{key:"getActiveTableData",value:function(){return this.getTableData(this.getActiveTable())}},{key:"addWrapper",value:function(){this.wrapper=document.createElement("ul"),this.wrapper.classList.add("nav-tab-wrapper"),this.optionsForm.insertBefore(this.wrapper,this.optionsForm.firstChild)}},{key:"addMessageLine",value:function(e){var t=document.createElement("div");return t.id=e,this.optionsForm.insertBefore(t,this.optionsForm.firstChild),t}},{key:"addMessageLines",value:function(){this.successMessage=this.addMessageLine("ctl-success"),this.errorMessage=this.addMessageLine("ctl-error")}},{key:"moveTabs",value:function(){var e=document.querySelector(".ctl-settings-tabs");e&&this.optionsForm.insertBefore(e,this.optionsForm.firstChild)}},{key:"addEditLabelInput",value:function(){this.editLabelInput=document.createElement("input"),this.editLabelInput.id=this.EDIT_LABEL_ID,this.editLabelInput.style.display="none",document.body.appendChild(this.editLabelInput)}},{key:"hideEditLabelInput",value:function(){this.editLabelInput.style.display="none",this.editLabelInput.classList.remove(this.EDIT_LABEL_ERROR_CLASS),document.body.appendChild(this.editLabelInput)}},{key:"getLastCell",value:function(){return document.querySelector(this.OPTIONS_FORM_SELECTOR+" ."+this.ACTIVE_TABLE_CLASS+" ."+this.PLUS_CLASS).previousElementSibling}},{key:"addCell",value:function(){var e=this.getLastCell();e.parentElement.insertBefore(e.cloneNode(!0),e.nextElementSibling);var t=(e=this.getLastCell()).querySelector("label"),n=e.querySelector("input"),r=n.id.split("-"),i=r[0]+"-"+(parseInt(r[1])+1);t.htmlFor=i,t.innerHTML="",n.id=i,n.value="",n.setAttribute("value",""),this.replaceName(n,""),this.bindEvents(),this.editLabel(t)}},{key:"hideTables",value:function(){var e=this,t=0;this.getTables().map((function(n,r){n.classList.add("ctl-table"),e.CURRENT_STUB_ID===n.previousElementSibling.id&&(t=r,n.classList.add(e.ACTIVE_TABLE_CLASS));var i=document.createElement("div");return i.classList.add(e.PLUS_CLASS),i.innerHTML=e.plusButton,n.querySelector("td").appendChild(i),null})),this.getHeaders().map((function(n,r){return n.classList.add("nav-tab"),n.dataset.index=r,e.wrapper.appendChild(n),r===t&&(n.classList.add(e.CURRENT_NAV_TAB_CLASS),n.classList.add(e.ACTIVE_NAV_TAB_CLASS)),null}))}},{key:"bindEvents",value:function(){var e=this;this.getHeaders().map((function(t,n,r){return t.onclick=function(t){t.preventDefault();var n=t.target.dataset.index;if(n===e.getActiveIndex())return!1;e.saveActiveTable(),r.map((function(t){return t.classList.remove(e.ACTIVE_NAV_TAB_CLASS)})),r[n].classList.add(e.ACTIVE_NAV_TAB_CLASS);var i=e.getTables();return i.map((function(t){return t.classList.remove(e.ACTIVE_TABLE_CLASS)})),i[n].classList.add(e.ACTIVE_TABLE_CLASS),e.setSubmitStatus(),!1},null})),this.getInputs().map((function(t){return t.oninput=function(){e.setSubmitStatus()},null})),this.getLabels().map((function(t){return t.onclick=function(t){return t.preventDefault(),e.editLabel(t.target),!1},null})),this.editLabelInput.onblur=function(){e.saveLabel()},this.editLabelInput.onkeyup=function(t){"Escape"===t.key&&e.saveLabel(!0),"Enter"===t.key&&e.saveLabel()},this.getPlusButtons().map((function(t){return t.onclick=function(t){return t.preventDefault(),e.addCell(t.target),!1},null})),this.submitButton.onclick=function(t){return t.preventDefault(),e.saveActiveTable(),!1}}},{key:"editLabel",value:function(e){e.parentNode.appendChild(this.editLabelInput),this.editLabelInput.value=e.innerHTML,this.editLabelInput.classList.remove(this.EDIT_LABEL_ERROR_CLASS),this.editLabelInput.style.display="block",this.editLabelInput.focus()}},{key:"isUniqueLabel",value:function(e){return[].concat(i(this.getActiveTable().querySelectorAll("label"))).reduce((function(t,n){return t&&n.innerHTML!==e}),!0)}},{key:"saveLabel",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if("none"!==this.editLabelInput.style.display){var t=this.editLabelInput.value.trim();if(""===t){var n=document.getElementById(this.EDIT_LABEL_ID).parentElement;return this.hideEditLabelInput(),n.parentNode.removeChild(n),void this.setSubmitStatus()}var r=this.editLabelInput.parentNode.querySelector("label");if(e||t===r.innerHTML)this.hideEditLabelInput();else if(this.isUniqueLabel(t)){var i=this.editLabelInput.parentNode.querySelector("input");this.hideEditLabelInput(),r.innerHTML=t,this.replaceName(i,t),this.setSubmitStatus()}else this.editLabelInput.classList.add(this.EDIT_LABEL_ERROR_CLASS)}}},{key:"replaceName",value:function(e,t){e.name=e.name.replace(/(.+\[.+])\[.*]/g,"$1["+t+"]")}},{key:"clearMessage",value:function(e){e.innerHTML="",e.classList.remove("active")}},{key:"clearMessages",value:function(){this.clearMessage(this.successMessage),this.clearMessage(this.errorMessage),clearTimeout(this.msgTimer)}},{key:"showMessage",value:function(e,t){var n=this;e.innerHTML=t,e.classList.add("active"),this.msgTimer=setTimeout((function(){n.clearMessages()}),5e3)}}]),e}();t.default=s}]);
2
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2Nyb3NzLWZldGNoL2Rpc3QvYnJvd3Nlci1wb255ZmlsbC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvanMvdGFibGVzL2FwcC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvanMvdGFibGVzL3RhYmxlcy5qcyJdLCJuYW1lcyI6WyJpbnN0YWxsZWRNb2R1bGVzIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiZXhwb3J0cyIsIm1vZHVsZSIsImkiLCJsIiwibW9kdWxlcyIsImNhbGwiLCJtIiwiYyIsImQiLCJuYW1lIiwiZ2V0dGVyIiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsInIiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsInZhbHVlIiwidCIsIm1vZGUiLCJfX2VzTW9kdWxlIiwibnMiLCJjcmVhdGUiLCJrZXkiLCJiaW5kIiwibiIsIm9iamVjdCIsInByb3BlcnR5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJwIiwicyIsImdsb2JhbCIsInNlbGYiLCJ0aGlzIiwiX19zZWxmX18iLCJGIiwiZmV0Y2giLCJET01FeGNlcHRpb24iLCJzdXBwb3J0IiwiQmxvYiIsImUiLCJ2aWV3Q2xhc3NlcyIsImlzQXJyYXlCdWZmZXJWaWV3IiwiQXJyYXlCdWZmZXIiLCJpc1ZpZXciLCJvYmoiLCJpbmRleE9mIiwidG9TdHJpbmciLCJub3JtYWxpemVOYW1lIiwiU3RyaW5nIiwidGVzdCIsIlR5cGVFcnJvciIsInRvTG93ZXJDYXNlIiwibm9ybWFsaXplVmFsdWUiLCJpdGVyYXRvckZvciIsIml0ZW1zIiwiaXRlcmF0b3IiLCJuZXh0Iiwic2hpZnQiLCJkb25lIiwidW5kZWZpbmVkIiwiSGVhZGVycyIsImhlYWRlcnMiLCJtYXAiLCJmb3JFYWNoIiwiYXBwZW5kIiwiQXJyYXkiLCJpc0FycmF5IiwiaGVhZGVyIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImNvbnN1bWVkIiwiYm9keSIsImJvZHlVc2VkIiwiUHJvbWlzZSIsInJlamVjdCIsImZpbGVSZWFkZXJSZWFkeSIsInJlYWRlciIsInJlc29sdmUiLCJvbmxvYWQiLCJyZXN1bHQiLCJvbmVycm9yIiwiZXJyb3IiLCJyZWFkQmxvYkFzQXJyYXlCdWZmZXIiLCJibG9iIiwiRmlsZVJlYWRlciIsInByb21pc2UiLCJyZWFkQXNBcnJheUJ1ZmZlciIsImJ1ZmZlckNsb25lIiwiYnVmIiwic2xpY2UiLCJ2aWV3IiwiVWludDhBcnJheSIsImJ5dGVMZW5ndGgiLCJzZXQiLCJidWZmZXIiLCJCb2R5IiwiX2luaXRCb2R5IiwiX2JvZHlJbml0IiwiX2JvZHlUZXh0IiwiaXNQcm90b3R5cGVPZiIsIl9ib2R5QmxvYiIsIkZvcm1EYXRhIiwiX2JvZHlGb3JtRGF0YSIsIlVSTFNlYXJjaFBhcmFtcyIsIkRhdGFWaWV3IiwiX2JvZHlBcnJheUJ1ZmZlciIsInR5cGUiLCJyZWplY3RlZCIsIkVycm9yIiwiYXJyYXlCdWZmZXIiLCJ0aGVuIiwidGV4dCIsInJlYWRBc1RleHQiLCJjaGFycyIsImxlbmd0aCIsImZyb21DaGFyQ29kZSIsImpvaW4iLCJyZWFkQXJyYXlCdWZmZXJBc1RleHQiLCJmb3JtRGF0YSIsImRlY29kZSIsImpzb24iLCJKU09OIiwicGFyc2UiLCJvbGRWYWx1ZSIsImhhcyIsImNhbGxiYWNrIiwidGhpc0FyZyIsImtleXMiLCJwdXNoIiwidmFsdWVzIiwiZW50cmllcyIsIm1ldGhvZHMiLCJSZXF1ZXN0IiwiaW5wdXQiLCJvcHRpb25zIiwibWV0aG9kIiwidXBjYXNlZCIsInVybCIsImNyZWRlbnRpYWxzIiwic2lnbmFsIiwidG9VcHBlckNhc2UiLCJyZWZlcnJlciIsImZvcm0iLCJ0cmltIiwic3BsaXQiLCJieXRlcyIsInJlcGxhY2UiLCJkZWNvZGVVUklDb21wb25lbnQiLCJSZXNwb25zZSIsImJvZHlJbml0Iiwic3RhdHVzIiwib2siLCJzdGF0dXNUZXh0IiwiY2xvbmUiLCJyZXNwb25zZSIsInJlZGlyZWN0U3RhdHVzZXMiLCJyZWRpcmVjdCIsIlJhbmdlRXJyb3IiLCJsb2NhdGlvbiIsImVyciIsIm1lc3NhZ2UiLCJzdGFjayIsImNvbnN0cnVjdG9yIiwiaW5pdCIsInJlcXVlc3QiLCJhYm9ydGVkIiwieGhyIiwiWE1MSHR0cFJlcXVlc3QiLCJhYm9ydFhociIsImFib3J0IiwicmF3SGVhZGVycyIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsImxpbmUiLCJwYXJ0cyIsInJlc3BvbnNlVVJMIiwicmVzcG9uc2VUZXh0Iiwib250aW1lb3V0Iiwib25hYm9ydCIsIm9wZW4iLCJ3aXRoQ3JlZGVudGlhbHMiLCJyZXNwb25zZVR5cGUiLCJzZXRSZXF1ZXN0SGVhZGVyIiwiYWRkRXZlbnRMaXN0ZW5lciIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlYWR5U3RhdGUiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwic2VuZCIsInBvbHlmaWxsIiwicG9ueWZpbGwiLCJjdHgiLCJkZWZhdWx0IiwiZG9jdW1lbnQiLCJUYWJsZXMiLCJPUFRJT05TX0ZPUk1fU0VMRUNUT1IiLCJIRUFERVJfU0VMRUNUT1IiLCJUQUJMRV9TRUxFQ1RPUiIsIlNVQk1JVF9TRUxFQ1RPUiIsIkNVUlJFTlRfU1RVQl9JRCIsIkNVUlJFTlRfTkFWX1RBQl9DTEFTUyIsIkFDVElWRV9OQVZfVEFCX0NMQVNTIiwiQUNUSVZFX1RBQkxFX0NMQVNTIiwiRURJVF9MQUJFTF9JRCIsIkVESVRfTEFCRUxfRVJST1JfQ0xBU1MiLCJwbHVzQnV0dG9uIiwiUExVU19DTEFTUyIsIm9wdGlvbnNGb3JtIiwicXVlcnlTZWxlY3RvciIsInRhYmxlc0RhdGEiLCJnZXRUYWJsZXNEYXRhIiwic3VibWl0QnV0dG9uIiwib3B0aW9uc1NhdmVTdWNjZXNzTWVzc2FnZSIsIkN5cjJMYXRUYWJsZXNPYmplY3QiLCJvcHRpb25zU2F2ZUVycm9yTWVzc2FnZSIsImFkZFdyYXBwZXIiLCJhZGRNZXNzYWdlTGluZXMiLCJtb3ZlVGFicyIsImFkZEVkaXRMYWJlbElucHV0IiwiaGlkZVRhYmxlcyIsImJpbmRFdmVudHMiLCJzZXRTdWJtaXRTdGF0dXMiLCJxdWVyeVNlbGVjdG9yQWxsIiwiZ2V0QWN0aXZlSGVhZGVyIiwiZGF0YXNldCIsImluZGV4IiwiYWN0aXZlSW5kZXgiLCJnZXRBY3RpdmVJbmRleCIsInN0cmluZ2lmeSIsImdldEFjdGl2ZVRhYmxlRGF0YSIsImRpc2FibGVkIiwiaXNBY3RpdmVUYWJsZUNoYW5nZWQiLCJhY3RpdmVUYWJsZSIsImdldEFjdGl2ZVRhYmxlIiwiYWN0aXZlRm9ybSIsImNyZWF0ZUVsZW1lbnQiLCJhY3Rpb24iLCJnZXRBdHRyaWJ1dGUiLCJhcHBlbmRDaGlsZCIsImNsb25lTm9kZSIsImFjdGl2ZUlucHV0cyIsImlkIiwiaGlkZGVuSW5wdXRzIiwic2hvd01lc3NhZ2UiLCJzdWNjZXNzTWVzc2FnZSIsImVycm9yTWVzc2FnZSIsImZpbmFsbHkiLCJwYXJlbnROb2RlIiwicmVtb3ZlQ2hpbGQiLCJ0YWJsZSIsImlucHV0cyIsImRhdGEiLCJsYWJlbCIsImlubmVySFRNTCIsImdldFRhYmxlcyIsImdldFRhYmxlRGF0YSIsIndyYXBwZXIiLCJjbGFzc0xpc3QiLCJhZGQiLCJpbnNlcnRCZWZvcmUiLCJmaXJzdENoaWxkIiwiYWRkTWVzc2FnZUxpbmUiLCJ0YWJzIiwiZWRpdExhYmVsSW5wdXQiLCJzdHlsZSIsImRpc3BsYXkiLCJyZW1vdmUiLCJwcmV2aW91c0VsZW1lbnRTaWJsaW5nIiwibGFzdENlbGwiLCJnZXRMYXN0Q2VsbCIsInBhcmVudEVsZW1lbnQiLCJuZXh0RWxlbWVudFNpYmxpbmciLCJpZEFyciIsIm5ld0lkIiwicGFyc2VJbnQiLCJodG1sRm9yIiwic2V0QXR0cmlidXRlIiwicmVwbGFjZU5hbWUiLCJlZGl0TGFiZWwiLCJjdXJyZW50SW5kZXgiLCJwbHVzIiwiZ2V0SGVhZGVycyIsIm9uY2xpY2siLCJldmVudCIsInByZXZlbnREZWZhdWx0IiwidGFyZ2V0Iiwic2F2ZUFjdGl2ZVRhYmxlIiwiYUhlYWRlciIsInRhYmxlcyIsImdldElucHV0cyIsIm9uaW5wdXQiLCJnZXRMYWJlbHMiLCJvbmJsdXIiLCJzYXZlTGFiZWwiLCJvbmtleXVwIiwiZ2V0UGx1c0J1dHRvbnMiLCJhZGRDZWxsIiwiZm9jdXMiLCJuZXdWYWx1ZSIsInJlZHVjZSIsImFjYyIsImNhbmNlbCIsImVkaXRlZENlbGwiLCJnZXRFbGVtZW50QnlJZCIsImhpZGVFZGl0TGFiZWxJbnB1dCIsImlzVW5pcXVlTGFiZWwiLCJjbGVhck1lc3NhZ2UiLCJjbGVhclRpbWVvdXQiLCJtc2dUaW1lciIsImVsIiwic2V0VGltZW91dCIsImNsZWFyTWVzc2FnZXMiXSwibWFwcGluZ3MiOiJhQUNFLElBQUlBLEVBQW1CLEdBR3ZCLFNBQVNDLEVBQW9CQyxHQUc1QixHQUFHRixFQUFpQkUsR0FDbkIsT0FBT0YsRUFBaUJFLEdBQVVDLFFBR25DLElBQUlDLEVBQVNKLEVBQWlCRSxHQUFZLENBQ3pDRyxFQUFHSCxFQUNISSxHQUFHLEVBQ0hILFFBQVMsSUFVVixPQU5BSSxFQUFRTCxHQUFVTSxLQUFLSixFQUFPRCxRQUFTQyxFQUFRQSxFQUFPRCxRQUFTRixHQUcvREcsRUFBT0UsR0FBSSxFQUdKRixFQUFPRCxRQUtmRixFQUFvQlEsRUFBSUYsRUFHeEJOLEVBQW9CUyxFQUFJVixFQUd4QkMsRUFBb0JVLEVBQUksU0FBU1IsRUFBU1MsRUFBTUMsR0FDM0NaLEVBQW9CYSxFQUFFWCxFQUFTUyxJQUNsQ0csT0FBT0MsZUFBZWIsRUFBU1MsRUFBTSxDQUFFSyxZQUFZLEVBQU1DLElBQUtMLEtBS2hFWixFQUFvQmtCLEVBQUksU0FBU2hCLEdBQ1gsb0JBQVhpQixRQUEwQkEsT0FBT0MsYUFDMUNOLE9BQU9DLGVBQWViLEVBQVNpQixPQUFPQyxZQUFhLENBQUVDLE1BQU8sV0FFN0RQLE9BQU9DLGVBQWViLEVBQVMsYUFBYyxDQUFFbUIsT0FBTyxLQVF2RHJCLEVBQW9Cc0IsRUFBSSxTQUFTRCxFQUFPRSxHQUV2QyxHQURVLEVB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LEtBQUtpUixZLGtDQVNQQyxFQUFJbkosR0FBVSxXQUMxQm1KLEVBQUd4RCxVQUFZM0YsRUFDZm1KLEVBQUdwRCxVQUFVQyxJQUFLLFVBRWxCL04sS0FBS2lSLFNBQVdFLFlBQVksV0FDM0IsRUFBS0Msa0JBQ0gsUyxlQUlVckgiLCJmaWxlIjoidGFibGVzL2FwcC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAwKTtcbiIsInZhciBnbG9iYWwgPSB0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgPyBzZWxmIDogdGhpcztcbnZhciBfX3NlbGZfXyA9IChmdW5jdGlvbiAoKSB7XG5mdW5jdGlvbiBGKCkge1xudGhpcy5mZXRjaCA9IGZhbHNlO1xudGhpcy5ET01FeGNlcHRpb24gPSBnbG9iYWwuRE9NRXhjZXB0aW9uXG59XG5GLnByb3RvdHlwZSA9IGdsb2JhbDtcbnJldHVybiBuZXcgRigpO1xufSkoKTtcbihmdW5jdGlvbihzZWxmKSB7XG5cbnZhciBpcnJlbGV2YW50ID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7XG5cbiAgdmFyIHN1cHBvcnQgPSB7XG4gICAgc2VhcmNoUGFyYW1zOiAnVVJMU2VhcmNoUGFyYW1zJyBpbiBzZWxmLFxuICAgIGl0ZXJhYmxlOiAnU3ltYm9sJyBpbiBzZWxmICYmICdpdGVyYXRvcicgaW4gU3ltYm9sLFxuICAgIGJsb2I6XG4gICAgICAnRmlsZVJlYWRlcicgaW4gc2VsZiAmJlxuICAgICAgJ0Jsb2InIGluIHNlbGYgJiZcbiAgICAgIChmdW5jdGlvbigpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBuZXcgQmxvYigpO1xuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuICAgICAgfSkoKSxcbiAgICBmb3JtRGF0YTogJ0Zvcm1EYXRhJyBpbiBzZWxmLFxuICAgIGFycmF5QnVmZmVyOiAnQXJyYXlCdWZmZXInIGluIHNlbGZcbiAgfTtcblxuICBmdW5jdGlvbiBpc0RhdGFWaWV3KG9iaikge1xuICAgIHJldHVybiBvYmogJiYgRGF0YVZpZXcucHJvdG90eXBlLmlzUHJvdG90eXBlT2Yob2JqKVxuICB9XG5cbiAgaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIpIHtcbiAgICB2YXIgdmlld0NsYXNzZXMgPSBbXG4gICAgICAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICAgICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICAgICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgICAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgICAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgICAgJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgICAgJ1tvYmplY3QgVWludDMyQXJyYXldJyxcbiAgICAgICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgICAgJ1tvYmplY3QgRmxvYXQ2NEFycmF5XSdcbiAgICBdO1xuXG4gICAgdmFyIGlzQXJyYXlCdWZmZXJWaWV3ID1cbiAgICAgIEFycmF5QnVmZmVyLmlzVmlldyB8fFxuICAgICAgZnVuY3Rpb24ob2JqKSB7XG4gICAgICAgIHJldHVybiBvYmogJiYgdmlld0NsYXNzZXMuaW5kZXhPZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSkgPiAtMVxuICAgICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZU5hbWUobmFtZSkge1xuICAgIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIG5hbWUgPSBTdHJpbmcobmFtZSk7XG4gICAgfVxuICAgIGlmICgvW15hLXowLTlcXC0jJCUmJyorLl5fYHx+XS9pLnRlc3QobmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgY2hhcmFjdGVyIGluIGhlYWRlciBmaWVsZCBuYW1lJylcbiAgICB9XG4gICAgcmV0dXJuIG5hbWUudG9Mb3dlckNhc2UoKVxuICB9XG5cbiAgZnVuY3Rpb24gbm9ybWFsaXplVmFsdWUodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgdmFsdWUgPSBTdHJpbmcodmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuXG4gIC8vIEJ1aWxkIGEgZGVzdHJ1Y3RpdmUgaXRlcmF0b3IgZm9yIHRoZSB2YWx1ZSBsaXN0XG4gIGZ1bmN0aW9uIGl0ZXJhdG9yRm9yKGl0ZW1zKSB7XG4gICAgdmFyIGl0ZXJhdG9yID0ge1xuICAgICAgbmV4dDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGl0ZW1zLnNoaWZ0KCk7XG4gICAgICAgIHJldHVybiB7ZG9uZTogdmFsdWUgPT09IHVuZGVmaW5lZCwgdmFsdWU6IHZhbHVlfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoc3VwcG9ydC5pdGVyYWJsZSkge1xuICAgICAgaXRlcmF0b3JbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaXRlcmF0b3JcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGl0ZXJhdG9yXG4gIH1cblxuICBmdW5jdGlvbiBIZWFkZXJzKGhlYWRlcnMpIHtcbiAgICB0aGlzLm1hcCA9IHt9O1xuXG4gICAgaWYgKGhlYWRlcnMgaW5zdGFuY2VvZiBIZWFkZXJzKSB7XG4gICAgICBoZWFkZXJzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQobmFtZSwgdmFsdWUpO1xuICAgICAgfSwgdGhpcyk7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgICBoZWFkZXJzLmZvckVhY2goZnVuY3Rpb24oaGVhZGVyKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKGhlYWRlclswXSwgaGVhZGVyWzFdKTtcbiAgICAgIH0sIHRoaXMpO1xuICAgIH0gZWxzZSBpZiAoaGVhZGVycykge1xuICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaGVhZGVycykuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKG5hbWUsIGhlYWRlcnNbbmFtZV0pO1xuICAgICAgfSwgdGhpcyk7XG4gICAgfVxuICB9XG5cbiAgSGVhZGVycy5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICBuYW1lID0gbm9ybWFsaXplTmFtZShuYW1lKTtcbiAgICB2YWx1ZSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKTtcbiAgICB2YXIgb2xkVmFsdWUgPSB0aGlzLm1hcFtuYW1lXTtcbiAgICB0aGlzLm1hcFtuYW1lXSA9IG9sZFZhbHVlID8gb2xkVmFsdWUgKyAnLCAnICsgdmFsdWUgOiB2YWx1ZTtcbiAgfTtcblxuICBIZWFkZXJzLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgZGVsZXRlIHRoaXMubWFwW25vcm1hbGl6ZU5hbWUobmFtZSldO1xuICB9O1xuXG4gIEhlYWRlcnMucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBuYW1lID0gbm9ybWFsaXplTmFtZShuYW1lKTtcbiAgICByZXR1cm4gdGhpcy5oYXMobmFtZSkgPyB0aGlzLm1hcFtuYW1lXSA6IG51bGxcbiAgfTtcblxuICBIZWFkZXJzLnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwLmhhc093blByb3BlcnR5KG5vcm1hbGl6ZU5hbWUobmFtZSkpXG4gIH07XG5cbiAgSGVhZGVycy5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICB0aGlzLm1hcFtub3JtYWxpemVOYW1lKG5hbWUpXSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKTtcbiAgfTtcblxuICBIZWFkZXJzLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24oY2FsbGJhY2ssIHRoaXNBcmcpIHtcbiAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMubWFwKSB7XG4gICAgICBpZiAodGhpcy5tYXAuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgY2FsbGJhY2suY2FsbCh0aGlzQXJnLCB0aGlzLm1hcFtuYW1lXSwgbmFtZSwgdGhpcyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIEhlYWRlcnMucHJvdG90eXBlLmtleXMgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgaXRlbXMgPSBbXTtcbiAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICAgIGl0ZW1zLnB1c2gobmFtZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxuICB9O1xuXG4gIEhlYWRlcnMucHJvdG90eXBlLnZhbHVlcyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBpdGVtcyA9IFtdO1xuICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgaXRlbXMucHVzaCh2YWx1ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxuICB9O1xuXG4gIEhlYWRlcnMucHJvdG90eXBlLmVudHJpZXMgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgaXRlbXMgPSBbXTtcbiAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICAgIGl0ZW1zLnB1c2goW25hbWUsIHZhbHVlXSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxuICB9O1xuXG4gIGlmIChzdXBwb3J0Lml0ZXJhYmxlKSB7XG4gICAgSGVhZGVycy5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSA9IEhlYWRlcnMucHJvdG90eXBlLmVudHJpZXM7XG4gIH1cblxuICBmdW5jdGlvbiBjb25zdW1lZChib2R5KSB7XG4gICAgaWYgKGJvZHkuYm9keVVzZWQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCdBbHJlYWR5IHJlYWQnKSlcbiAgICB9XG4gICAgYm9keS5ib2R5VXNlZCA9IHRydWU7XG4gIH1cblxuICBmdW5jdGlvbiBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXNvbHZlKHJlYWRlci5yZXN1bHQpO1xuICAgICAgfTtcbiAgICAgIHJlYWRlci5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChyZWFkZXIuZXJyb3IpO1xuICAgICAgfTtcbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZEJsb2JBc0FycmF5QnVmZmVyKGJsb2IpIHtcbiAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICB2YXIgcHJvbWlzZSA9IGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpO1xuICAgIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihibG9iKTtcbiAgICByZXR1cm4gcHJvbWlzZVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZEJsb2JBc1RleHQoYmxvYikge1xuICAgIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgIHZhciBwcm9taXNlID0gZmlsZVJlYWRlclJlYWR5KHJlYWRlcik7XG4gICAgcmVhZGVyLnJlYWRBc1RleHQoYmxvYik7XG4gICAgcmV0dXJuIHByb21pc2VcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWRBcnJheUJ1ZmZlckFzVGV4dChidWYpIHtcbiAgICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1Zik7XG4gICAgdmFyIGNoYXJzID0gbmV3IEFycmF5KHZpZXcubGVuZ3RoKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlldy5sZW5ndGg7IGkrKykge1xuICAgICAgY2hhcnNbaV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHZpZXdbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gY2hhcnMuam9pbignJylcbiAgfVxuXG4gIGZ1bmN0aW9uIGJ1ZmZlckNsb25lKGJ1Zikge1xuICAgIGlmIChidWYuc2xpY2UpIHtcbiAgICAgIHJldHVybiBidWYuc2xpY2UoMClcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHZpZXcgPSBuZXcgVWludDhBcnJheShidWYuYnl0ZUxlbmd0aCk7XG4gICAgICB2aWV3LnNldChuZXcgVWludDhBcnJheShidWYpKTtcbiAgICAgIHJldHVybiB2aWV3LmJ1ZmZlclxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIEJvZHkoKSB7XG4gICAgdGhpcy5ib2R5VXNlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5faW5pdEJvZHkgPSBmdW5jdGlvbihib2R5KSB7XG4gICAgICB0aGlzLl9ib2R5SW5pdCA9IGJvZHk7XG4gICAgICBpZiAoIWJvZHkpIHtcbiAgICAgICAgdGhpcy5fYm9keVRleHQgPSAnJztcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keTtcbiAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5ibG9iICYmIEJsb2IucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgICAgdGhpcy5fYm9keUJsb2IgPSBib2R5O1xuICAgICAgfSBlbHNlIGlmIChzdXBwb3J0LmZvcm1EYXRhICYmIEZvcm1EYXRhLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICAgIHRoaXMuX2JvZHlGb3JtRGF0YSA9IGJvZHk7XG4gICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuc2VhcmNoUGFyYW1zICYmIFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHkudG9TdHJpbmcoKTtcbiAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5hcnJheUJ1ZmZlciAmJiBzdXBwb3J0LmJsb2IgJiYgaXNEYXRhVmlldyhib2R5KSkge1xuICAgICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIgPSBidWZmZXJDbG9uZShib2R5LmJ1ZmZlcik7XG4gICAgICAgIC8vIElFIDEwLTExIGNhbid0IGhhbmRsZSBhIERhdGFWaWV3IGJvZHkuXG4gICAgICAgIHRoaXMuX2JvZHlJbml0ID0gbmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pO1xuICAgICAgfSBlbHNlIGlmIChzdXBwb3J0LmFycmF5QnVmZmVyICYmIChBcnJheUJ1ZmZlci5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSB8fCBpc0FycmF5QnVmZmVyVmlldyhib2R5KSkpIHtcbiAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyID0gYnVmZmVyQ2xvbmUoYm9keSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHkgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYm9keSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJykpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsICd0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLTgnKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QmxvYiAmJiB0aGlzLl9ib2R5QmxvYi50eXBlKSB7XG4gICAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgdGhpcy5fYm9keUJsb2IudHlwZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5zZWFyY2hQYXJhbXMgJiYgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04Jyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKHN1cHBvcnQuYmxvYikge1xuICAgICAgdGhpcy5ibG9iID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciByZWplY3RlZCA9IGNvbnN1bWVkKHRoaXMpO1xuICAgICAgICBpZiAocmVqZWN0ZWQpIHtcbiAgICAgICAgICByZXR1cm4gcmVqZWN0ZWRcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9ib2R5QmxvYikge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUJsb2IpXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSkpXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUZvcm1EYXRhKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIGJsb2InKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlUZXh0XSkpXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHRoaXMuYXJyYXlCdWZmZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikge1xuICAgICAgICAgIHJldHVybiBjb25zdW1lZCh0aGlzKSB8fCBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUFycmF5QnVmZmVyKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmJsb2IoKS50aGVuKHJlYWRCbG9iQXNBcnJheUJ1ZmZlcilcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciByZWplY3RlZCA9IGNvbnN1bWVkKHRoaXMpO1xuICAgICAgaWYgKHJlamVjdGVkKSB7XG4gICAgICAgIHJldHVybiByZWplY3RlZFxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fYm9keUJsb2IpIHtcbiAgICAgICAgcmV0dXJuIHJlYWRCbG9iQXNUZXh0KHRoaXMuX2JvZHlCbG9iKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZWFkQXJyYXlCdWZmZXJBc1RleHQodGhpcy5fYm9keUFycmF5QnVmZmVyKSlcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUZvcm1EYXRhKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyB0ZXh0JylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keVRleHQpXG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmIChzdXBwb3J0LmZvcm1EYXRhKSB7XG4gICAgICB0aGlzLmZvcm1EYXRhID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHQoKS50aGVuKGRlY29kZSlcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdGhpcy5qc29uID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy50ZXh0KCkudGhlbihKU09OLnBhcnNlKVxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLy8gSFRUUCBtZXRob2RzIHdob3NlIGNhcGl0YWxpemF0aW9uIHNob3VsZCBiZSBub3JtYWxpemVkXG4gIHZhciBtZXRob2RzID0gWydERUxFVEUnLCAnR0VUJywgJ0hFQUQnLCAnT1BUSU9OUycsICdQT1NUJywgJ1BVVCddO1xuXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZU1ldGhvZChtZXRob2QpIHtcbiAgICB2YXIgdXBjYXNlZCA9IG1ldGhvZC50b1VwcGVyQ2FzZSgpO1xuICAgIHJldHVybiBtZXRob2RzLmluZGV4T2YodXBjYXNlZCkgPiAtMSA/IHVwY2FzZWQgOiBtZXRob2RcbiAgfVxuXG4gIGZ1bmN0aW9uIFJlcXVlc3QoaW5wdXQsIG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICB2YXIgYm9keSA9IG9wdGlvbnMuYm9keTtcblxuICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIFJlcXVlc3QpIHtcbiAgICAgIGlmIChpbnB1dC5ib2R5VXNlZCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBbHJlYWR5IHJlYWQnKVxuICAgICAgfVxuICAgICAgdGhpcy51cmwgPSBpbnB1dC51cmw7XG4gICAgICB0aGlzLmNyZWRlbnRpYWxzID0gaW5wdXQuY3JlZGVudGlhbHM7XG4gICAgICBpZiAoIW9wdGlvbnMuaGVhZGVycykge1xuICAgICAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhpbnB1dC5oZWFkZXJzKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubWV0aG9kID0gaW5wdXQubWV0aG9kO1xuICAgICAgdGhpcy5tb2RlID0gaW5wdXQubW9kZTtcbiAgICAgIHRoaXMuc2lnbmFsID0gaW5wdXQuc2lnbmFsO1xuICAgICAgaWYgKCFib2R5ICYmIGlucHV0Ll9ib2R5SW5pdCAhPSBudWxsKSB7XG4gICAgICAgIGJvZHkgPSBpbnB1dC5fYm9keUluaXQ7XG4gICAgICAgIGlucHV0LmJvZHlVc2VkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cmwgPSBTdHJpbmcoaW5wdXQpO1xuICAgIH1cblxuICAgIHRoaXMuY3JlZGVudGlhbHMgPSBvcHRpb25zLmNyZWRlbnRpYWxzIHx8IHRoaXMuY3JlZGVudGlhbHMgfHwgJ3NhbWUtb3JpZ2luJztcbiAgICBpZiAob3B0aW9ucy5oZWFkZXJzIHx8ICF0aGlzLmhlYWRlcnMpIHtcbiAgICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycyk7XG4gICAgfVxuICAgIHRoaXMubWV0aG9kID0gbm9ybWFsaXplTWV0aG9kKG9wdGlvbnMubWV0aG9kIHx8IHRoaXMubWV0aG9kIHx8ICdHRVQnKTtcbiAgICB0aGlzLm1vZGUgPSBvcHRpb25zLm1vZGUgfHwgdGhpcy5tb2RlIHx8IG51bGw7XG4gICAgdGhpcy5zaWduYWwgPSBvcHRpb25zLnNpZ25hbCB8fCB0aGlzLnNpZ25hbDtcbiAgICB0aGlzLnJlZmVycmVyID0gbnVsbDtcblxuICAgIGlmICgodGhpcy5tZXRob2QgPT09ICdHRVQnIHx8IHRoaXMubWV0aG9kID09PSAnSEVBRCcpICYmIGJvZHkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0JvZHkgbm90IGFsbG93ZWQgZm9yIEdFVCBvciBIRUFEIHJlcXVlc3RzJylcbiAgICB9XG4gICAgdGhpcy5faW5pdEJvZHkoYm9keSk7XG4gIH1cblxuICBSZXF1ZXN0LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgUmVxdWVzdCh0aGlzLCB7Ym9keTogdGhpcy5fYm9keUluaXR9KVxuICB9O1xuXG4gIGZ1bmN0aW9uIGRlY29kZShib2R5KSB7XG4gICAgdmFyIGZvcm0gPSBuZXcgRm9ybURhdGEoKTtcbiAgICBib2R5XG4gICAgICAudHJpbSgpXG4gICAgICAuc3BsaXQoJyYnKVxuICAgICAgLmZvckVhY2goZnVuY3Rpb24oYnl0ZXMpIHtcbiAgICAgICAgaWYgKGJ5dGVzKSB7XG4gICAgICAgICAgdmFyIHNwbGl0ID0gYnl0ZXMuc3BsaXQoJz0nKTtcbiAgICAgICAgICB2YXIgbmFtZSA9IHNwbGl0LnNoaWZ0KCkucmVwbGFjZSgvXFwrL2csICcgJyk7XG4gICAgICAgICAgdmFyIHZhbHVlID0gc3BsaXQuam9pbignPScpLnJlcGxhY2UoL1xcKy9nLCAnICcpO1xuICAgICAgICAgIGZvcm0uYXBwZW5kKGRlY29kZVVSSUNvbXBvbmVudChuYW1lKSwgZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIHJldHVybiBmb3JtXG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUhlYWRlcnMocmF3SGVhZGVycykge1xuICAgIHZhciBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKTtcbiAgICAvLyBSZXBsYWNlIGluc3RhbmNlcyBvZiBcXHJcXG4gYW5kIFxcbiBmb2xsb3dlZCBieSBhdCBsZWFzdCBvbmUgc3BhY2Ugb3IgaG9yaXpvbnRhbCB0YWIgd2l0aCBhIHNwYWNlXG4gICAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjJcbiAgICB2YXIgcHJlUHJvY2Vzc2VkSGVhZGVycyA9IHJhd0hlYWRlcnMucmVwbGFjZSgvXFxyP1xcbltcXHQgXSsvZywgJyAnKTtcbiAgICBwcmVQcm9jZXNzZWRIZWFkZXJzLnNwbGl0KC9cXHI/XFxuLykuZm9yRWFjaChmdW5jdGlvbihsaW5lKSB7XG4gICAgICB2YXIgcGFydHMgPSBsaW5lLnNwbGl0KCc6Jyk7XG4gICAgICB2YXIga2V5ID0gcGFydHMuc2hpZnQoKS50cmltKCk7XG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHBhcnRzLmpvaW4oJzonKS50cmltKCk7XG4gICAgICAgIGhlYWRlcnMuYXBwZW5kKGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBoZWFkZXJzXG4gIH1cblxuICBCb2R5LmNhbGwoUmVxdWVzdC5wcm90b3R5cGUpO1xuXG4gIGZ1bmN0aW9uIFJlc3BvbnNlKGJvZHlJbml0LCBvcHRpb25zKSB7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgdGhpcy50eXBlID0gJ2RlZmF1bHQnO1xuICAgIHRoaXMuc3RhdHVzID0gb3B0aW9ucy5zdGF0dXMgPT09IHVuZGVmaW5lZCA/IDIwMCA6IG9wdGlvbnMuc3RhdHVzO1xuICAgIHRoaXMub2sgPSB0aGlzLnN0YXR1cyA+PSAyMDAgJiYgdGhpcy5zdGF0dXMgPCAzMDA7XG4gICAgdGhpcy5zdGF0dXNUZXh0ID0gJ3N0YXR1c1RleHQnIGluIG9wdGlvbnMgPyBvcHRpb25zLnN0YXR1c1RleHQgOiAnT0snO1xuICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycyk7XG4gICAgdGhpcy51cmwgPSBvcHRpb25zLnVybCB8fCAnJztcbiAgICB0aGlzLl9pbml0Qm9keShib2R5SW5pdCk7XG4gIH1cblxuICBCb2R5LmNhbGwoUmVzcG9uc2UucHJvdG90eXBlKTtcblxuICBSZXNwb25zZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFJlc3BvbnNlKHRoaXMuX2JvZHlJbml0LCB7XG4gICAgICBzdGF0dXM6IHRoaXMuc3RhdHVzLFxuICAgICAgc3RhdHVzVGV4dDogdGhpcy5zdGF0dXNUZXh0LFxuICAgICAgaGVhZGVyczogbmV3IEhlYWRlcnModGhpcy5oZWFkZXJzKSxcbiAgICAgIHVybDogdGhpcy51cmxcbiAgICB9KVxuICB9O1xuXG4gIFJlc3BvbnNlLmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKG51bGwsIHtzdGF0dXM6IDAsIHN0YXR1c1RleHQ6ICcnfSk7XG4gICAgcmVzcG9uc2UudHlwZSA9ICdlcnJvcic7XG4gICAgcmV0dXJuIHJlc3BvbnNlXG4gIH07XG5cbiAgdmFyIHJlZGlyZWN0U3RhdHVzZXMgPSBbMzAxLCAzMDIsIDMwMywgMzA3LCAzMDhdO1xuXG4gIFJlc3BvbnNlLnJlZGlyZWN0ID0gZnVuY3Rpb24odXJsLCBzdGF0dXMpIHtcbiAgICBpZiAocmVkaXJlY3RTdGF0dXNlcy5pbmRleE9mKHN0YXR1cykgPT09IC0xKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCBzdGF0dXMgY29kZScpXG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBSZXNwb25zZShudWxsLCB7c3RhdHVzOiBzdGF0dXMsIGhlYWRlcnM6IHtsb2NhdGlvbjogdXJsfX0pXG4gIH07XG5cbiAgZXhwb3J0cy5ET01FeGNlcHRpb24gPSBzZWxmLkRPTUV4Y2VwdGlvbjtcbiAgdHJ5IHtcbiAgICBuZXcgZXhwb3J0cy5ET01FeGNlcHRpb24oKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgZXhwb3J0cy5ET01FeGNlcHRpb24gPSBmdW5jdGlvbihtZXNzYWdlLCBuYW1lKSB7XG4gICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgIHZhciBlcnJvciA9IEVycm9yKG1lc3NhZ2UpO1xuICAgICAgdGhpcy5zdGFjayA9IGVycm9yLnN0YWNrO1xuICAgIH07XG4gICAgZXhwb3J0cy5ET01FeGNlcHRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpO1xuICAgIGV4cG9ydHMuRE9NRXhjZXB0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGV4cG9ydHMuRE9NRXhjZXB0aW9uO1xuICB9XG5cbiAgZnVuY3Rpb24gZmV0Y2goaW5wdXQsIGluaXQpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KGlucHV0LCBpbml0KTtcblxuICAgICAgaWYgKHJlcXVlc3Quc2lnbmFsICYmIHJlcXVlc3Quc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgZXhwb3J0cy5ET01FeGNlcHRpb24oJ0Fib3J0ZWQnLCAnQWJvcnRFcnJvcicpKVxuICAgICAgfVxuXG4gICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAgIGZ1bmN0aW9uIGFib3J0WGhyKCkge1xuICAgICAgICB4aHIuYWJvcnQoKTtcbiAgICAgIH1cblxuICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgICAgICBzdGF0dXM6IHhoci5zdGF0dXMsXG4gICAgICAgICAgc3RhdHVzVGV4dDogeGhyLnN0YXR1c1RleHQsXG4gICAgICAgICAgaGVhZGVyczogcGFyc2VIZWFkZXJzKHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSB8fCAnJylcbiAgICAgICAgfTtcbiAgICAgICAgb3B0aW9ucy51cmwgPSAncmVzcG9uc2VVUkwnIGluIHhociA/IHhoci5yZXNwb25zZVVSTCA6IG9wdGlvbnMuaGVhZGVycy5nZXQoJ1gtUmVxdWVzdC1VUkwnKTtcbiAgICAgICAgdmFyIGJvZHkgPSAncmVzcG9uc2UnIGluIHhociA/IHhoci5yZXNwb25zZSA6IHhoci5yZXNwb25zZVRleHQ7XG4gICAgICAgIHJlc29sdmUobmV3IFJlc3BvbnNlKGJvZHksIG9wdGlvbnMpKTtcbiAgICAgIH07XG5cbiAgICAgIHhoci5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChuZXcgVHlwZUVycm9yKCdOZXR3b3JrIHJlcXVlc3QgZmFpbGVkJykpO1xuICAgICAgfTtcblxuICAgICAgeGhyLm9udGltZW91dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZWplY3QobmV3IFR5cGVFcnJvcignTmV0d29yayByZXF1ZXN0IGZhaWxlZCcpKTtcbiAgICAgIH07XG5cbiAgICAgIHhoci5vbmFib3J0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChuZXcgZXhwb3J0cy5ET01FeGNlcHRpb24oJ0Fib3J0ZWQnLCAnQWJvcnRFcnJvcicpKTtcbiAgICAgIH07XG5cbiAgICAgIHhoci5vcGVuKHJlcXVlc3QubWV0aG9kLCByZXF1ZXN0LnVybCwgdHJ1ZSk7XG5cbiAgICAgIGlmIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnaW5jbHVkZScpIHtcbiAgICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHJlcXVlc3QuY3JlZGVudGlhbHMgPT09ICdvbWl0Jykge1xuICAgICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmICgncmVzcG9uc2VUeXBlJyBpbiB4aHIgJiYgc3VwcG9ydC5ibG9iKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAnYmxvYic7XG4gICAgICB9XG5cbiAgICAgIHJlcXVlc3QuaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKG5hbWUsIHZhbHVlKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAocmVxdWVzdC5zaWduYWwpIHtcbiAgICAgICAgcmVxdWVzdC5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydFhocik7XG5cbiAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIC8vIERPTkUgKHN1Y2Nlc3Mgb3IgZmFpbHVyZSlcbiAgICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT09IDQpIHtcbiAgICAgICAgICAgIHJlcXVlc3Quc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnRYaHIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgeGhyLnNlbmQodHlwZW9mIHJlcXVlc3QuX2JvZHlJbml0ID09PSAndW5kZWZpbmVkJyA/IG51bGwgOiByZXF1ZXN0Ll9ib2R5SW5pdCk7XG4gICAgfSlcbiAgfVxuXG4gIGZldGNoLnBvbHlmaWxsID0gdHJ1ZTtcblxuICBpZiAoIXNlbGYuZmV0Y2gpIHtcbiAgICBzZWxmLmZldGNoID0gZmV0Y2g7XG4gICAgc2VsZi5IZWFkZXJzID0gSGVhZGVycztcbiAgICBzZWxmLlJlcXVlc3QgPSBSZXF1ZXN0O1xuICAgIHNlbGYuUmVzcG9uc2UgPSBSZXNwb25zZTtcbiAgfVxuXG4gIGV4cG9ydHMuSGVhZGVycyA9IEhlYWRlcnM7XG4gIGV4cG9ydHMuUmVxdWVzdCA9IFJlcXVlc3Q7XG4gIGV4cG9ydHMuUmVzcG9uc2UgPSBSZXNwb25zZTtcbiAgZXhwb3J0cy5mZXRjaCA9IGZldGNoO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbiAgcmV0dXJuIGV4cG9ydHM7XG5cbn0pKHt9KTtcbn0pKF9fc2VsZl9fKTtcbl9fc2VsZl9fLmZldGNoLnBvbnlmaWxsID0gdHJ1ZTtcbi8vIFJlbW92ZSBcInBvbHlmaWxsXCIgcHJvcGVydHkgYWRkZWQgYnkgd2hhdHdnLWZldGNoXG5kZWxldGUgX19zZWxmX18uZmV0Y2gucG9seWZpbGw7XG4vLyBDaG9vc2UgYmV0d2VlbiBuYXRpdmUgaW1wbGVtZW50YXRpb24gKGdsb2JhbCkgb3IgY3VzdG9tIGltcGxlbWVudGF0aW9uIChfX3NlbGZfXylcbi8vIHZhciBjdHggPSBnbG9iYWwuZmV0Y2ggPyBnbG9iYWwgOiBfX3NlbGZfXztcbnZhciBjdHggPSBfX3NlbGZfXzsgLy8gdGhpcyBsaW5lIGRpc2FibGUgc2VydmljZSB3b3JrZXIgc3VwcG9ydCB0ZW1wb3JhcmlseVxuZXhwb3J0cyA9IGN0eC5mZXRjaCAvLyBUbyBlbmFibGU6IGltcG9ydCBmZXRjaCBmcm9tICdjcm9zcy1mZXRjaCdcbmV4cG9ydHMuZGVmYXVsdCA9IGN0eC5mZXRjaCAvLyBGb3IgVHlwZVNjcmlwdCBjb25zdW1lcnMgd2l0aG91dCBlc01vZHVsZUludGVyb3AuXG5leHBvcnRzLmZldGNoID0gY3R4LmZldGNoIC8vIFRvIGVuYWJsZTogaW1wb3J0IHtmZXRjaH0gZnJvbSAnY3Jvc3MtZmV0Y2gnXG5leHBvcnRzLkhlYWRlcnMgPSBjdHguSGVhZGVyc1xuZXhwb3J0cy5SZXF1ZXN0ID0gY3R4LlJlcXVlc3RcbmV4cG9ydHMuUmVzcG9uc2UgPSBjdHguUmVzcG9uc2Vcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1xuIiwiLyoqXG4gKiBAZmlsZSBUYWJsZXMgQXBwbGljYXRpb24uXG4gKi9cbmltcG9ydCBUYWJsZXMgZnJvbSAnLi90YWJsZXMnO1xuXG5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCAnRE9NQ29udGVudExvYWRlZCcsICgpID0+IHtcblx0bmV3IFRhYmxlcygpO1xufSApO1xuIiwiLyoqXG4gKiBAZmlsZSBjbGFzcyBUYWJsZXMuXG4gKi9cblxuLyogZ2xvYmFsIEN5cjJMYXRUYWJsZXNPYmplY3QgKi9cblxuY2xhc3MgVGFibGVzIHtcblx0LyoqXG5cdCAqIENsYXNzIGNvbnN0cnVjdG9yLlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5PUFRJT05TX0ZPUk1fU0VMRUNUT1IgPSAnI2N0bC1vcHRpb25zJztcblx0XHR0aGlzLkhFQURFUl9TRUxFQ1RPUiA9IHRoaXMuT1BUSU9OU19GT1JNX1NFTEVDVE9SICsgJyBoMic7XG5cdFx0dGhpcy5UQUJMRV9TRUxFQ1RPUiA9IHRoaXMuT1BUSU9OU19GT1JNX1NFTEVDVE9SICsgJyB0YWJsZSc7XG5cdFx0dGhpcy5TVUJNSVRfU0VMRUNUT1IgPSB0aGlzLk9QVElPTlNfRk9STV9TRUxFQ1RPUiArICcgI3N1Ym1pdCc7XG5cdFx0dGhpcy5DVVJSRU5UX1NUVUJfSUQgPSAnY3RsLWN1cnJlbnQnO1xuXHRcdHRoaXMuQ1VSUkVOVF9OQVZfVEFCX0NMQVNTID0gJ25hdi10YWItY3VycmVudCc7XG5cdFx0dGhpcy5BQ1RJVkVfTkFWX1RBQl9DTEFTUyA9ICduYXYtdGFiLWFjdGl2ZSc7XG5cdFx0dGhpcy5BQ1RJVkVfVEFCTEVfQ0xBU1MgPSAnYWN0aXZlJztcblx0XHR0aGlzLkVESVRfTEFCRUxfSUQgPSAnY3RsLWVkaXQtbGFiZWwnO1xuXHRcdHRoaXMuRURJVF9MQUJFTF9FUlJPUl9DTEFTUyA9ICdjdGwtZWRpdC1sYWJlbC1lcnJvcic7XG5cdFx0dGhpcy5wbHVzQnV0dG9uID1cblx0XHRcdCc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBhcmlhLWhhc3BvcHVwPVwidHJ1ZVwiIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiIGNsYXNzPVwiY29tcG9uZW50cy1idXR0b24gYmxvY2stZWRpdG9yLWluc2VydGVyX190b2dnbGUgaGFzLWljb25cIiBhcmlhLWxhYmVsPVwi0JTQvtCx0LDQstC40YLRjCDQsdC70L7QulwiPicgK1xuXHRcdFx0Jzxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCItMiAtMiAyNCAyNFwiIHJvbGU9XCJpbWdcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBmb2N1c2FibGU9XCJmYWxzZVwiPicgK1xuXHRcdFx0JzxwYXRoIGQ9XCJNMTAgMWMtNSAwLTkgNC05IDlzNCA5IDkgOSA5LTQgOS05LTQtOS05LTl6bTAgMTZjLTMuOSAwLTctMy4xLTctN3MzLjEtNyA3LTcgNyAzLjEgNyA3LTMuMSA3LTcgN3ptMS0xMUg5djNINnYyaDN2M2gydi0zaDNWOWgtM1Y2ek0xMCAxYy01IDAtOSA0LTkgOXM0IDkgOSA5IDktNCA5LTktNC05LTktOXptMCAxNmMtMy45IDAtNy0zLjEtNy03czMuMS03IDctNyA3IDMuMSA3IDctMy4xIDctNyA3em0xLTExSDl2M0g2djJoM3YzaDJ2LTNoM1Y5aC0zVjZ6XCI+JyArXG5cdFx0XHQnPC9wYXRoPicgK1xuXHRcdFx0Jzwvc3ZnPicgK1xuXHRcdFx0JzwvYnV0dG9uPic7XG5cdFx0dGhpcy5QTFVTX0NMQVNTID0gJ2N0bC1wbHVzJztcblxuXHRcdHRoaXMub3B0aW9uc0Zvcm0gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCB0aGlzLk9QVElPTlNfRk9STV9TRUxFQ1RPUiApO1xuXHRcdHRoaXMudGFibGVzRGF0YSA9IHRoaXMuZ2V0VGFibGVzRGF0YSgpO1xuXHRcdHRoaXMuc3VibWl0QnV0dG9uID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvciggdGhpcy5TVUJNSVRfU0VMRUNUT1IgKTtcblxuXHRcdC8vIENvcHkgdG8gY2xhc3MgcHJvcGVydGllcywgb3RoZXJ3aXNlIGVzbGludCBtYXJrcyBzb21lIHByb3BlcnRpZXMgb2YgZ2xvYmFsIG9iamVjdCBhcyB1bnJlc29sdmVkLlxuXHRcdHRoaXMub3B0aW9uc1NhdmVTdWNjZXNzTWVzc2FnZSA9XG5cdFx0XHRDeXIyTGF0VGFibGVzT2JqZWN0Lm9wdGlvbnNTYXZlU3VjY2Vzc01lc3NhZ2U7XG5cdFx0dGhpcy5vcHRpb25zU2F2ZUVycm9yTWVzc2FnZSA9XG5cdFx0XHRDeXIyTGF0VGFibGVzT2JqZWN0Lm9wdGlvbnNTYXZlRXJyb3JNZXNzYWdlO1xuXG5cdFx0dGhpcy5hZGRXcmFwcGVyKCk7XG5cdFx0dGhpcy5hZGRNZXNzYWdlTGluZXMoKTtcblx0XHR0aGlzLm1vdmVUYWJzKCk7XG5cdFx0dGhpcy5hZGRFZGl0TGFiZWxJbnB1dCgpO1xuXHRcdHRoaXMuaGlkZVRhYmxlcygpO1xuXHRcdHRoaXMuYmluZEV2ZW50cygpO1xuXHRcdHRoaXMuc2V0U3VibWl0U3RhdHVzKCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IGhlYWRlcnMuXG5cdCAqXG5cdCAqIEByZXR1cm4geypbXX0gSGVhZGVycy5cblx0ICovXG5cdGdldEhlYWRlcnMoKSB7XG5cdFx0cmV0dXJuIFsgLi4uZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCggdGhpcy5IRUFERVJfU0VMRUNUT1IgKSBdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBhY3RpdmUgaGVhZGVyLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtFbGVtZW50fSBBY3RpdmUgaGVhZGVyLlxuXHQgKi9cblx0Z2V0QWN0aXZlSGVhZGVyKCkge1xuXHRcdHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuXHRcdFx0dGhpcy5IRUFERVJfU0VMRUNUT1IgKyAnLicgKyB0aGlzLkFDVElWRV9OQVZfVEFCX0NMQVNTXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgYWN0aXZlIGluZGV4LlxuXHQgKlxuXHQgKiBAcmV0dXJuIHsqfSBBY3RpdmUgaW5kZXguXG5cdCAqL1xuXHRnZXRBY3RpdmVJbmRleCgpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRBY3RpdmVIZWFkZXIoKS5kYXRhc2V0LmluZGV4O1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0YWJsZXMuXG5cdCAqXG5cdCAqIEByZXR1cm4geypbXX0gVGFibGVzLlxuXHQgKi9cblx0Z2V0VGFibGVzKCkge1xuXHRcdHJldHVybiBbIC4uLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIHRoaXMuVEFCTEVfU0VMRUNUT1IgKSBdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBhY3RpdmUgdGFibGUuXG5cdCAqXG5cdCAqIEByZXR1cm4ge0VsZW1lbnR9IEFjdGl2ZSB0YWJsZS5cblx0ICovXG5cdGdldEFjdGl2ZVRhYmxlKCkge1xuXHRcdHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuXHRcdFx0dGhpcy5UQUJMRV9TRUxFQ1RPUiArICcuJyArIHRoaXMuQUNUSVZFX1RBQkxFX0NMQVNTXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgaW5wdXRzLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHsqW119IElucHV0cy5cblx0ICovXG5cdGdldElucHV0cygpIHtcblx0XHRyZXR1cm4gW1xuXHRcdFx0Li4uZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcblx0XHRcdFx0dGhpcy5PUFRJT05TX0ZPUk1fU0VMRUNUT1IgKyAnIGlucHV0J1xuXHRcdFx0KSxcblx0XHRdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBsYWJlbHMuXG5cdCAqXG5cdCAqIEByZXR1cm4geypbXX0gTGFiZWxzLlxuXHQgKi9cblx0Z2V0TGFiZWxzKCkge1xuXHRcdHJldHVybiBbXG5cdFx0XHQuLi5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFxuXHRcdFx0XHR0aGlzLk9QVElPTlNfRk9STV9TRUxFQ1RPUiArICcgbGFiZWwnXG5cdFx0XHQpLFxuXHRcdF07XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHBsdXMgYnV0dG9ucy5cblx0ICpcblx0ICogQHJldHVybiB7KltdfSBQbHVzIGJ1dHRvbnMuXG5cdCAqL1xuXHRnZXRQbHVzQnV0dG9ucygpIHtcblx0XHRyZXR1cm4gW1xuXHRcdFx0Li4uZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcblx0XHRcdFx0dGhpcy5PUFRJT05TX0ZPUk1fU0VMRUNUT1IgKyAnIC4nICsgdGhpcy5QTFVTX0NMQVNTXG5cdFx0XHQpLFxuXHRcdF07XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2sgb2YgYWN0aXZlIHRhYmxlIHdhcyBjaGFuZ2VkLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtib29sZWFufSBJZiBhY3RpdmUgdGFibGUgd2FzIGNoYW5nZWQuXG5cdCAqL1xuXHRpc0FjdGl2ZVRhYmxlQ2hhbmdlZCgpIHtcblx0XHRjb25zdCBhY3RpdmVJbmRleCA9IHRoaXMuZ2V0QWN0aXZlSW5kZXgoKTtcblxuXHRcdHJldHVybiAoXG5cdFx0XHRKU09OLnN0cmluZ2lmeSggdGhpcy5nZXRBY3RpdmVUYWJsZURhdGEoKSApICE9PVxuXHRcdFx0SlNPTi5zdHJpbmdpZnkoIHRoaXMudGFibGVzRGF0YVsgYWN0aXZlSW5kZXggXSApXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgc3RhdHVzIG9mIHN1Ym1pdCBidXR0b24uXG5cdCAqL1xuXHRzZXRTdWJtaXRTdGF0dXMoKSB7XG5cdFx0dGhpcy5zdWJtaXRCdXR0b24uZGlzYWJsZWQgPSAhIHRoaXMuaXNBY3RpdmVUYWJsZUNoYW5nZWQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTYXZlIGFjdGl2ZSB0YWJsZS5cblx0ICovXG5cdHNhdmVBY3RpdmVUYWJsZSgpIHtcblx0XHRpZiAoICEgdGhpcy5pc0FjdGl2ZVRhYmxlQ2hhbmdlZCgpICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGFjdGl2ZVRhYmxlID0gdGhpcy5nZXRBY3RpdmVUYWJsZSgpO1xuXG5cdFx0Y29uc3QgYWN0aXZlRm9ybSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdmb3JtJyApO1xuXHRcdGFjdGl2ZUZvcm0uYWN0aW9uID0gdGhpcy5vcHRpb25zRm9ybS5nZXRBdHRyaWJ1dGUoICdhY3Rpb24nICk7XG5cdFx0YWN0aXZlRm9ybS5tZXRob2QgPSB0aGlzLm9wdGlvbnNGb3JtLm1ldGhvZDtcblx0XHRhY3RpdmVGb3JtLmFwcGVuZENoaWxkKCBhY3RpdmVUYWJsZS5jbG9uZU5vZGUoIHRydWUgKSApO1xuXG5cdFx0Y29uc3QgYWN0aXZlSW5wdXRzID0gWyAuLi5hY3RpdmVUYWJsZS5xdWVyeVNlbGVjdG9yQWxsKCAnaW5wdXQnICkgXTtcblx0XHRhY3RpdmVJbnB1dHMubWFwKCAoIGlucHV0ICkgPT4ge1xuXHRcdFx0cmV0dXJuICggYWN0aXZlRm9ybS5xdWVyeVNlbGVjdG9yKCAnIycgKyBpbnB1dC5pZCApLnZhbHVlID1cblx0XHRcdFx0aW5wdXQudmFsdWUgKTtcblx0XHR9ICk7XG5cblx0XHRjb25zdCBoaWRkZW5JbnB1dHMgPSBbXG5cdFx0XHQuLi50aGlzLm9wdGlvbnNGb3JtLnF1ZXJ5U2VsZWN0b3JBbGwoICdpbnB1dFt0eXBlPVwiaGlkZGVuXCJdJyApLFxuXHRcdF07XG5cdFx0aGlkZGVuSW5wdXRzLm1hcCggKCBpbnB1dCApID0+IHtcblx0XHRcdHJldHVybiBhY3RpdmVGb3JtLmFwcGVuZENoaWxkKCBpbnB1dC5jbG9uZU5vZGUoIHRydWUgKSApO1xuXHRcdH0gKTtcblx0XHRkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKCBhY3RpdmVGb3JtICk7XG5cblx0XHRyZXR1cm4gZmV0Y2goIHRoaXMub3B0aW9uc0Zvcm0uZ2V0QXR0cmlidXRlKCAnYWN0aW9uJyApLCB7XG5cdFx0XHRtZXRob2Q6IGFjdGl2ZUZvcm0ubWV0aG9kLFxuXHRcdFx0Ym9keTogbmV3IFVSTFNlYXJjaFBhcmFtcyggWyAuLi5uZXcgRm9ybURhdGEoIGFjdGl2ZUZvcm0gKSBdICksXG5cdFx0fSApXG5cdFx0XHQudGhlbiggKCByZXNwb25zZSApID0+IHtcblx0XHRcdFx0aWYgKCByZXNwb25zZS5vayApIHtcblx0XHRcdFx0XHR0aGlzLnNob3dNZXNzYWdlKFxuXHRcdFx0XHRcdFx0dGhpcy5zdWNjZXNzTWVzc2FnZSxcblx0XHRcdFx0XHRcdHRoaXMub3B0aW9uc1NhdmVTdWNjZXNzTWVzc2FnZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0dGhpcy50YWJsZXNEYXRhID0gdGhpcy5nZXRUYWJsZXNEYXRhKCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5zaG93TWVzc2FnZShcblx0XHRcdFx0XHRcdHRoaXMuZXJyb3JNZXNzYWdlLFxuXHRcdFx0XHRcdFx0dGhpcy5vcHRpb25zU2F2ZUVycm9yTWVzc2FnZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gcmVzcG9uc2UuanNvbigpO1xuXHRcdFx0fSApXG5cdFx0XHQuZmluYWxseSggKCkgPT4ge1xuXHRcdFx0XHRhY3RpdmVGb3JtLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIGFjdGl2ZUZvcm0gKTtcblx0XHRcdFx0dGhpcy5zZXRTdWJtaXRTdGF0dXMoKTtcblx0XHRcdH0gKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGFibGUgZGF0YS5cblx0ICpcblx0ICogQHBhcmFtIHtFbGVtZW50fSB0YWJsZSBUYWJsZS5cblx0ICogQHJldHVybiB7e31bXX0gVGFibGUgZGF0YS5cblx0ICovXG5cdGdldFRhYmxlRGF0YSggdGFibGUgKSB7XG5cdFx0Y29uc3QgaW5wdXRzID0gWyAuLi50YWJsZS5xdWVyeVNlbGVjdG9yQWxsKCAnaW5wdXQnICkgXTtcblxuXHRcdGNvbnN0IGRhdGEgPSB7fTtcblx0XHRpbnB1dHMuZm9yRWFjaCggKCBpbnB1dCApID0+IHtcblx0XHRcdGNvbnN0IGxhYmVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcihcblx0XHRcdFx0dGhpcy5PUFRJT05TX0ZPUk1fU0VMRUNUT1IgKyAnIGxhYmVsW2Zvcj1cIicgKyBpbnB1dC5pZCArICdcIl0nXG5cdFx0XHQpO1xuXG5cdFx0XHRkYXRhWyBsYWJlbC5pbm5lckhUTUwgXSA9IGlucHV0LnZhbHVlO1xuXHRcdH0gKTtcblxuXHRcdHJldHVybiBkYXRhO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBkYXRhIGZyb20gYWxsIHRhYmxlcy5cblx0ICpcblx0ICogQHJldHVybiB7e31bXVtdfSBEYXRhIGZyb20gYWxsIHRhYmxlcy5cblx0ICovXG5cdGdldFRhYmxlc0RhdGEoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VGFibGVzKCkubWFwKCAoIHRhYmxlICkgPT4ge1xuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0VGFibGVEYXRhKCB0YWJsZSApO1xuXHRcdH0gKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgYWN0aXZlIHRhYmxlIGRhdGEuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3t9W119IEFjdGl2ZSB0YWJsZSBkYXRhLlxuXHQgKi9cblx0Z2V0QWN0aXZlVGFibGVEYXRhKCkge1xuXHRcdHJldHVybiB0aGlzLmdldFRhYmxlRGF0YSggdGhpcy5nZXRBY3RpdmVUYWJsZSgpICk7XG5cdH1cblxuXHQvKipcblx0ICogQWRkIHdyYXBwZXIuXG5cdCAqL1xuXHRhZGRXcmFwcGVyKCkge1xuXHRcdHRoaXMud3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICd1bCcgKTtcblx0XHR0aGlzLndyYXBwZXIuY2xhc3NMaXN0LmFkZCggJ25hdi10YWItd3JhcHBlcicgKTtcblx0XHR0aGlzLm9wdGlvbnNGb3JtLmluc2VydEJlZm9yZShcblx0XHRcdHRoaXMud3JhcHBlcixcblx0XHRcdHRoaXMub3B0aW9uc0Zvcm0uZmlyc3RDaGlsZFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQWRkIG1lc3NhZ2UgbGluZS5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGlkIE1lc3NhZ2UgaWQuXG5cdCAqIEByZXR1cm4ge0hUTUxEaXZFbGVtZW50fSBNZXNzYWdlIGxpbmUuXG5cdCAqL1xuXHRhZGRNZXNzYWdlTGluZSggaWQgKSB7XG5cdFx0Y29uc3QgbWVzc2FnZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdkaXYnICk7XG5cdFx0bWVzc2FnZS5pZCA9IGlkO1xuXHRcdHRoaXMub3B0aW9uc0Zvcm0uaW5zZXJ0QmVmb3JlKCBtZXNzYWdlLCB0aGlzLm9wdGlvbnNGb3JtLmZpcnN0Q2hpbGQgKTtcblxuXHRcdHJldHVybiBtZXNzYWdlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBzdWNjZXNzIGFuZCBlcnJvciBtZXNzYWdlIGxpbmVzLlxuXHQgKi9cblx0YWRkTWVzc2FnZUxpbmVzKCkge1xuXHRcdHRoaXMuc3VjY2Vzc01lc3NhZ2UgPSB0aGlzLmFkZE1lc3NhZ2VMaW5lKCAnY3RsLXN1Y2Nlc3MnICk7XG5cdFx0dGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmFkZE1lc3NhZ2VMaW5lKCAnY3RsLWVycm9yJyApO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ha2UgdGFicyB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgZm9ybS5cblx0ICovXG5cdG1vdmVUYWJzKCkge1xuXHRcdGNvbnN0IHRhYnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCAnLmN0bC1zZXR0aW5ncy10YWJzJyApO1xuXHRcdGlmICggdGFicyApIHtcblx0XHRcdHRoaXMub3B0aW9uc0Zvcm0uaW5zZXJ0QmVmb3JlKCB0YWJzLCB0aGlzLm9wdGlvbnNGb3JtLmZpcnN0Q2hpbGQgKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQWRkIGVkaXQgbGFiZWwgaW5wdXQuXG5cdCAqL1xuXHRhZGRFZGl0TGFiZWxJbnB1dCgpIHtcblx0XHR0aGlzLmVkaXRMYWJlbElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2lucHV0JyApO1xuXHRcdHRoaXMuZWRpdExhYmVsSW5wdXQuaWQgPSB0aGlzLkVESVRfTEFCRUxfSUQ7XG5cdFx0dGhpcy5lZGl0TGFiZWxJbnB1dC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuXHRcdGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoIHRoaXMuZWRpdExhYmVsSW5wdXQgKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIaWRlIGVkaXQgbGFiZWwgaW5wdXQuXG5cdCAqL1xuXHRoaWRlRWRpdExhYmVsSW5wdXQoKSB7XG5cdFx0dGhpcy5lZGl0TGFiZWxJbnB1dC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuXHRcdHRoaXMuZWRpdExhYmVsSW5wdXQuY2xhc3NMaXN0LnJlbW92ZSggdGhpcy5FRElUX0xBQkVMX0VSUk9SX0NMQVNTICk7XG5cdFx0ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCggdGhpcy5lZGl0TGFiZWxJbnB1dCApO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBsYXN0IGNlbGwgaW4gYWN0aXZlIHRhYmxlLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtFbGVtZW50fSBMYXN0IGNlbGwuXG5cdCAqL1xuXHRnZXRMYXN0Q2VsbCgpIHtcblx0XHRyZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcihcblx0XHRcdHRoaXMuT1BUSU9OU19GT1JNX1NFTEVDVE9SICtcblx0XHRcdFx0JyAuJyArXG5cdFx0XHRcdHRoaXMuQUNUSVZFX1RBQkxFX0NMQVNTICtcblx0XHRcdFx0JyAuJyArXG5cdFx0XHRcdHRoaXMuUExVU19DTEFTU1xuXHRcdCkucHJldmlvdXNFbGVtZW50U2libGluZztcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgbmV3IGNlbGwgdG8gdGhlIGFjdGl2ZSB0YWJsZS5cblx0ICovXG5cdGFkZENlbGwoKSB7XG5cdFx0bGV0IGxhc3RDZWxsID0gdGhpcy5nZXRMYXN0Q2VsbCgpO1xuXHRcdGxhc3RDZWxsLnBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKFxuXHRcdFx0bGFzdENlbGwuY2xvbmVOb2RlKCB0cnVlICksXG5cdFx0XHRsYXN0Q2VsbC5uZXh0RWxlbWVudFNpYmxpbmdcblx0XHQpO1xuXG5cdFx0bGFzdENlbGwgPSB0aGlzLmdldExhc3RDZWxsKCk7XG5cdFx0Y29uc3QgbGFiZWwgPSBsYXN0Q2VsbC5xdWVyeVNlbGVjdG9yKCAnbGFiZWwnICk7XG5cdFx0Y29uc3QgaW5wdXQgPSBsYXN0Q2VsbC5xdWVyeVNlbGVjdG9yKCAnaW5wdXQnICk7XG5cblx0XHRjb25zdCBpZEFyciA9IGlucHV0LmlkLnNwbGl0KCAnLScgKTtcblx0XHRjb25zdCBuZXdJZCA9IGlkQXJyWyAwIF0gKyAnLScgKyAoIHBhcnNlSW50KCBpZEFyclsgMSBdICkgKyAxICk7XG5cblx0XHRsYWJlbC5odG1sRm9yID0gbmV3SWQ7XG5cdFx0bGFiZWwuaW5uZXJIVE1MID0gJyc7XG5cblx0XHRpbnB1dC5pZCA9IG5ld0lkO1xuXHRcdGlucHV0LnZhbHVlID0gJyc7XG5cdFx0aW5wdXQuc2V0QXR0cmlidXRlKCAndmFsdWUnLCAnJyApO1xuXHRcdHRoaXMucmVwbGFjZU5hbWUoIGlucHV0LCAnJyApO1xuXG5cdFx0dGhpcy5iaW5kRXZlbnRzKCk7XG5cblx0XHR0aGlzLmVkaXRMYWJlbCggbGFiZWwgKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIaWRlIGNvbnZlcnNpb24gdGFibGVzIGV4Y2VwdCB0aGUgZmlyc3Qgb25lLlxuXHQgKiBDcmVhdGUgbmF2aWdhdGlvbiB0YWJzLlxuXHQgKi9cblx0aGlkZVRhYmxlcygpIHtcblx0XHRsZXQgY3VycmVudEluZGV4ID0gMDtcblxuXHRcdHRoaXMuZ2V0VGFibGVzKCkubWFwKCAoIHRhYmxlLCBpbmRleCApID0+IHtcblx0XHRcdHRhYmxlLmNsYXNzTGlzdC5hZGQoICdjdGwtdGFibGUnICk7XG5cblx0XHRcdGlmICggdGhpcy5DVVJSRU5UX1NUVUJfSUQgPT09IHRhYmxlLnByZXZpb3VzRWxlbWVudFNpYmxpbmcuaWQgKSB7XG5cdFx0XHRcdGN1cnJlbnRJbmRleCA9IGluZGV4O1xuXHRcdFx0XHR0YWJsZS5jbGFzc0xpc3QuYWRkKCB0aGlzLkFDVElWRV9UQUJMRV9DTEFTUyApO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBwbHVzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTtcblx0XHRcdHBsdXMuY2xhc3NMaXN0LmFkZCggdGhpcy5QTFVTX0NMQVNTICk7XG5cdFx0XHRwbHVzLmlubmVySFRNTCA9IHRoaXMucGx1c0J1dHRvbjtcblx0XHRcdHRhYmxlLnF1ZXJ5U2VsZWN0b3IoICd0ZCcgKS5hcHBlbmRDaGlsZCggcGx1cyApO1xuXG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9ICk7XG5cblx0XHR0aGlzLmdldEhlYWRlcnMoKS5tYXAoICggaGVhZGVyLCBpbmRleCApID0+IHtcblx0XHRcdGhlYWRlci5jbGFzc0xpc3QuYWRkKCAnbmF2LXRhYicgKTtcblx0XHRcdGhlYWRlci5kYXRhc2V0LmluZGV4ID0gaW5kZXg7XG5cblx0XHRcdHRoaXMud3JhcHBlci5hcHBlbmRDaGlsZCggaGVhZGVyICk7XG5cdFx0XHRpZiAoIGluZGV4ID09PSBjdXJyZW50SW5kZXggKSB7XG5cdFx0XHRcdGhlYWRlci5jbGFzc0xpc3QuYWRkKCB0aGlzLkNVUlJFTlRfTkFWX1RBQl9DTEFTUyApO1xuXHRcdFx0XHRoZWFkZXIuY2xhc3NMaXN0LmFkZCggdGhpcy5BQ1RJVkVfTkFWX1RBQl9DTEFTUyApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9ICk7XG5cdH1cblxuXHQvKipcblx0ICogQmluZCBldmVudHMgdG8gbWV0aG9kcy5cblx0ICovXG5cdGJpbmRFdmVudHMoKSB7XG5cdFx0dGhpcy5nZXRIZWFkZXJzKCkubWFwKCAoIGhlYWRlciwgaSwgaGVhZGVycyApID0+IHtcblx0XHRcdGhlYWRlci5vbmNsaWNrID0gKCBldmVudCApID0+IHtcblx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuXHRcdFx0XHRjb25zdCBpbmRleCA9IGV2ZW50LnRhcmdldC5kYXRhc2V0LmluZGV4O1xuXHRcdFx0XHRjb25zdCBhY3RpdmVJbmRleCA9IHRoaXMuZ2V0QWN0aXZlSW5kZXgoKTtcblxuXHRcdFx0XHRpZiAoIGluZGV4ID09PSBhY3RpdmVJbmRleCApIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLnNhdmVBY3RpdmVUYWJsZSgpO1xuXG5cdFx0XHRcdGhlYWRlcnMubWFwKCAoIGFIZWFkZXIgKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIGFIZWFkZXIuY2xhc3NMaXN0LnJlbW92ZShcblx0XHRcdFx0XHRcdHRoaXMuQUNUSVZFX05BVl9UQUJfQ0xBU1Ncblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9ICk7XG5cdFx0XHRcdGhlYWRlcnNbIGluZGV4IF0uY2xhc3NMaXN0LmFkZCggdGhpcy5BQ1RJVkVfTkFWX1RBQl9DTEFTUyApO1xuXG5cdFx0XHRcdGNvbnN0IHRhYmxlcyA9IHRoaXMuZ2V0VGFibGVzKCk7XG5cdFx0XHRcdHRhYmxlcy5tYXAoICggdGFibGUgKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHRhYmxlLmNsYXNzTGlzdC5yZW1vdmUoIHRoaXMuQUNUSVZFX1RBQkxFX0NMQVNTICk7XG5cdFx0XHRcdH0gKTtcblx0XHRcdFx0dGFibGVzWyBpbmRleCBdLmNsYXNzTGlzdC5hZGQoIHRoaXMuQUNUSVZFX1RBQkxFX0NMQVNTICk7XG5cblx0XHRcdFx0dGhpcy5zZXRTdWJtaXRTdGF0dXMoKTtcblxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9O1xuXG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9ICk7XG5cblx0XHR0aGlzLmdldElucHV0cygpLm1hcCggKCBpbnB1dCApID0+IHtcblx0XHRcdGlucHV0Lm9uaW5wdXQgPSAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuc2V0U3VibWl0U3RhdHVzKCk7XG5cdFx0XHR9O1xuXG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9ICk7XG5cblx0XHR0aGlzLmdldExhYmVscygpLm1hcCggKCBsYWJlbCApID0+IHtcblx0XHRcdGxhYmVsLm9uY2xpY2sgPSAoIGV2ZW50ICkgPT4ge1xuXHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHR0aGlzLmVkaXRMYWJlbCggZXZlbnQudGFyZ2V0ICk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH07XG5cblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH0gKTtcblxuXHRcdHRoaXMuZWRpdExhYmVsSW5wdXQub25ibHVyID0gKCkgPT4ge1xuXHRcdFx0dGhpcy5zYXZlTGFiZWwoKTtcblx0XHR9O1xuXG5cdFx0dGhpcy5lZGl0TGFiZWxJbnB1dC5vbmtleXVwID0gKCBlICkgPT4ge1xuXHRcdFx0aWYgKCAnRXNjYXBlJyA9PT0gZS5rZXkgKSB7XG5cdFx0XHRcdHRoaXMuc2F2ZUxhYmVsKCB0cnVlICk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggJ0VudGVyJyA9PT0gZS5rZXkgKSB7XG5cdFx0XHRcdHRoaXMuc2F2ZUxhYmVsKCk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdHRoaXMuZ2V0UGx1c0J1dHRvbnMoKS5tYXAoICggcGx1cyApID0+IHtcblx0XHRcdHBsdXMub25jbGljayA9ICggZXZlbnQgKSA9PiB7XG5cdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdHRoaXMuYWRkQ2VsbCggZXZlbnQudGFyZ2V0ICk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH07XG5cblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH0gKTtcblxuXHRcdHRoaXMuc3VibWl0QnV0dG9uLm9uY2xpY2sgPSAoIGV2ZW50ICkgPT4ge1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdHRoaXMuc2F2ZUFjdGl2ZVRhYmxlKCk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFZGl0IGxhYmVsLlxuXHQgKlxuXHQgKiBAcGFyYW0ge0VsZW1lbnR9IGxhYmVsIExhYmVsIHRvIGVkaXQuXG5cdCAqL1xuXHRlZGl0TGFiZWwoIGxhYmVsICkge1xuXHRcdGxhYmVsLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQoIHRoaXMuZWRpdExhYmVsSW5wdXQgKTtcblx0XHR0aGlzLmVkaXRMYWJlbElucHV0LnZhbHVlID0gbGFiZWwuaW5uZXJIVE1MO1xuXG5cdFx0dGhpcy5lZGl0TGFiZWxJbnB1dC5jbGFzc0xpc3QucmVtb3ZlKCB0aGlzLkVESVRfTEFCRUxfRVJST1JfQ0xBU1MgKTtcblx0XHR0aGlzLmVkaXRMYWJlbElucHV0LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuXHRcdHRoaXMuZWRpdExhYmVsSW5wdXQuZm9jdXMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJcyBuZXcgdmFsdWUgb2YgZWRpdGVkIGxhYmVsIHVuaXF1ZSBpbiBhY3RpdmUgdGFibGUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBuZXdWYWx1ZSBOZXcgVmFsdWUgZnJvbSBlZGl0ZWQgbGFiZWwuXG5cdCAqIEByZXR1cm4geyp9IElmIG5ldyB2YWx1ZSBvZiBlZGl0ZWQgbGFiZWwgaXMgdW5pcXVlIGluIGFjdGl2ZSB0YWJsZS5cblx0ICovXG5cdGlzVW5pcXVlTGFiZWwoIG5ld1ZhbHVlICkge1xuXHRcdHJldHVybiBbIC4uLnRoaXMuZ2V0QWN0aXZlVGFibGUoKS5xdWVyeVNlbGVjdG9yQWxsKCAnbGFiZWwnICkgXS5yZWR1Y2UoXG5cdFx0XHQoIGFjYywgbGFiZWwgKSA9PiB7XG5cdFx0XHRcdHJldHVybiBhY2MgJiYgbGFiZWwuaW5uZXJIVE1MICE9PSBuZXdWYWx1ZTtcblx0XHRcdH0sXG5cdFx0XHR0cnVlXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTYXZlIG1vZGlmaWVkIGxhYmVsLlxuXHQgKlxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGNhbmNlbCBDYW5jZWwuXG5cdCAqL1xuXHRzYXZlTGFiZWwoIGNhbmNlbCA9IGZhbHNlICkge1xuXHRcdGlmICggJ25vbmUnID09PSB0aGlzLmVkaXRMYWJlbElucHV0LnN0eWxlLmRpc3BsYXkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgbmV3VmFsdWUgPSB0aGlzLmVkaXRMYWJlbElucHV0LnZhbHVlLnRyaW0oKTtcblxuXHRcdGlmICggJycgPT09IG5ld1ZhbHVlICkge1xuXHRcdFx0Y29uc3QgZWRpdGVkQ2VsbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCB0aGlzLkVESVRfTEFCRUxfSUQgKVxuXHRcdFx0XHQucGFyZW50RWxlbWVudDtcblx0XHRcdHRoaXMuaGlkZUVkaXRMYWJlbElucHV0KCk7XG5cdFx0XHRlZGl0ZWRDZWxsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIGVkaXRlZENlbGwgKTtcblx0XHRcdHRoaXMuc2V0U3VibWl0U3RhdHVzKCk7XG5cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBsYWJlbCA9IHRoaXMuZWRpdExhYmVsSW5wdXQucGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yKCAnbGFiZWwnICk7XG5cdFx0aWYgKCBjYW5jZWwgfHwgbmV3VmFsdWUgPT09IGxhYmVsLmlubmVySFRNTCApIHtcblx0XHRcdHRoaXMuaGlkZUVkaXRMYWJlbElucHV0KCk7XG5cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoICEgdGhpcy5pc1VuaXF1ZUxhYmVsKCBuZXdWYWx1ZSApICkge1xuXHRcdFx0dGhpcy5lZGl0TGFiZWxJbnB1dC5jbGFzc0xpc3QuYWRkKCB0aGlzLkVESVRfTEFCRUxfRVJST1JfQ0xBU1MgKTtcblxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGlucHV0ID0gdGhpcy5lZGl0TGFiZWxJbnB1dC5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3IoICdpbnB1dCcgKTtcblxuXHRcdHRoaXMuaGlkZUVkaXRMYWJlbElucHV0KCk7XG5cblx0XHRsYWJlbC5pbm5lckhUTUwgPSBuZXdWYWx1ZTtcblx0XHR0aGlzLnJlcGxhY2VOYW1lKCBpbnB1dCwgbmV3VmFsdWUgKTtcblxuXHRcdHRoaXMuc2V0U3VibWl0U3RhdHVzKCk7XG5cdH1cblxuXHQvKipcblx0ICogUmVwbGFjZSBpbnB1dCBuYW1lIGFjY29yZGluZyB0byB0aGUgbmV3IGxhYmVsIHZhbHVlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge0VsZW1lbnR9IGlucHV0IElucHV0XG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBuZXdWYWx1ZSBOZXcgbGFiZWwgdmFsdWVcblx0ICovXG5cdHJlcGxhY2VOYW1lKCBpbnB1dCwgbmV3VmFsdWUgKSB7XG5cdFx0Ly8gbm9pbnNwZWN0aW9uIEpTVW5yZXNvbHZlZFZhcmlhYmxlXG5cdFx0aW5wdXQubmFtZSA9IGlucHV0Lm5hbWUucmVwbGFjZShcblx0XHRcdC8oLitcXFsuK10pXFxbLipdL2csXG5cdFx0XHQnJDFbJyArIG5ld1ZhbHVlICsgJ10nXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDbGVhciBtZXNzYWdlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge0hUTUxEaXZFbGVtZW50fSBtZXNzYWdlIE1lc3NhZ2UuXG5cdCAqL1xuXHRjbGVhck1lc3NhZ2UoIG1lc3NhZ2UgKSB7XG5cdFx0bWVzc2FnZS5pbm5lckhUTUwgPSAnJztcblx0XHRtZXNzYWdlLmNsYXNzTGlzdC5yZW1vdmUoICdhY3RpdmUnICk7XG5cdH1cblxuXHQvKipcblx0ICogQ2xlYXIgbWVzc2FnZXMuXG5cdCAqL1xuXHRjbGVhck1lc3NhZ2VzKCkge1xuXHRcdHRoaXMuY2xlYXJNZXNzYWdlKCB0aGlzLnN1Y2Nlc3NNZXNzYWdlICk7XG5cdFx0dGhpcy5jbGVhck1lc3NhZ2UoIHRoaXMuZXJyb3JNZXNzYWdlICk7XG5cdFx0Y2xlYXJUaW1lb3V0KCB0aGlzLm1zZ1RpbWVyICk7XG5cdH1cblxuXHQvKipcblx0ICogU2hvdyBtZXNzYWdlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge0hUTUxEaXZFbGVtZW50fSBlbCBFbGVtZW50LlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBNZXNzYWdlLlxuXHQgKi9cblx0c2hvd01lc3NhZ2UoIGVsLCBtZXNzYWdlICkge1xuXHRcdGVsLmlubmVySFRNTCA9IG1lc3NhZ2U7XG5cdFx0ZWwuY2xhc3NMaXN0LmFkZCggJ2FjdGl2ZScgKTtcblxuXHRcdHRoaXMubXNnVGltZXIgPSBzZXRUaW1lb3V0KCAoKSA9PiB7XG5cdFx0XHR0aGlzLmNsZWFyTWVzc2FnZXMoKTtcblx0XHR9LCA1MDAwICk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVGFibGVzO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==
auth.json DELETED
@@ -1,5 +0,0 @@
1
- {
2
- "github-oauth": {
3
- "github.com": "ghs_Wz2uCvngOk1ZpX3dHUHfjLmTxdkhal1IDpnF"
4
- }
5
- }
 
 
 
 
 
cyr-to-lat.php CHANGED
@@ -10,7 +10,7 @@
10
  * Plugin Name: Cyr-To-Lat
11
  * Plugin URI: https://wordpress.org/plugins/cyr2lat/
12
  * Description: Convert Non-Latin characters in post and term slugs to Latin characters. Useful for creating human-readable URLs. Based on the original plugin by Anton Skorobogatov.
13
- * Version: 5.2.0
14
  * Requires at least: 5.1
15
  * Requires PHP: 5.6.20
16
  * Author: Sergey Biryukov, Mikhail Kobzarev, Igor Gergel
@@ -19,6 +19,10 @@
19
  * License URI: https://www.gnu.org/licenses/gpl-2.0.html
20
  * Text Domain: cyr2lat
21
  * Domain Path: /languages/
 
 
 
 
22
  */
23
 
24
  namespace Cyr_To_Lat;
@@ -36,7 +40,7 @@ if ( defined( 'CYR_TO_LAT_VERSION' ) ) {
36
  /**
37
  * Plugin version.
38
  */
39
- define( 'CYR_TO_LAT_VERSION', '5.2.0' );
40
 
41
  /**
42
  * Path to the plugin dir.
10
  * Plugin Name: Cyr-To-Lat
11
  * Plugin URI: https://wordpress.org/plugins/cyr2lat/
12
  * Description: Convert Non-Latin characters in post and term slugs to Latin characters. Useful for creating human-readable URLs. Based on the original plugin by Anton Skorobogatov.
13
+ * Version: 5.3.0
14
  * Requires at least: 5.1
15
  * Requires PHP: 5.6.20
16
  * Author: Sergey Biryukov, Mikhail Kobzarev, Igor Gergel
19
  * License URI: https://www.gnu.org/licenses/gpl-2.0.html
20
  * Text Domain: cyr2lat
21
  * Domain Path: /languages/
22
+ *
23
+ *
24
+ * WC requires at least: 3.0
25
+ * WC tested up to: 6.5
26
  */
27
 
28
  namespace Cyr_To_Lat;
40
  /**
41
  * Plugin version.
42
  */
43
+ define( 'CYR_TO_LAT_VERSION', '5.3.0' );
44
 
45
  /**
46
  * Path to the plugin dir.
readme.txt CHANGED
@@ -2,9 +2,11 @@
2
  Contributors: SergeyBiryukov, mihdan, karevn, webvitaly, kaggdesign
3
  Tags: cyrillic, belorussian, ukrainian, bulgarian, macedonian, georgian, kazakh, latin, l10n, russian, cyr-to-lat, cyr2lat, rustolat, slugs, translations, transliteration
4
  Requires at least: 5.1
5
- Tested up to: 5.8
6
- Stable tag: 5.2.0
7
  Requires PHP: 5.6.20
 
 
8
 
9
  Convert Non-Latin characters in post, page and term slugs to Latin characters.
10
 
@@ -25,6 +27,10 @@ Converts Cyrillic characters in post, page and term slugs to Latin characters. U
25
 
26
  Based on the original Rus-To-Lat plugin by Anton Skorobogatov.
27
 
 
 
 
 
28
  == Screenshots ==
29
 
30
  1. Tables settings page
@@ -188,6 +194,41 @@ Yes you can!
188
 
189
  == Changelog ==
190
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
191
  = 5.2.0 (27.07.2021) =
192
  * Add support for categories and tags in other languages with wpml.
193
 
2
  Contributors: SergeyBiryukov, mihdan, karevn, webvitaly, kaggdesign
3
  Tags: cyrillic, belorussian, ukrainian, bulgarian, macedonian, georgian, kazakh, latin, l10n, russian, cyr-to-lat, cyr2lat, rustolat, slugs, translations, transliteration
4
  Requires at least: 5.1
5
+ Tested up to: 6.0
6
+ Stable tag: 5.3.0
7
  Requires PHP: 5.6.20
8
+ License: GPLv2 or later
9
+ License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
11
  Convert Non-Latin characters in post, page and term slugs to Latin characters.
12
 
27
 
28
  Based on the original Rus-To-Lat plugin by Anton Skorobogatov.
29
 
30
+ Sponsored by [Blackfire](https://www.blackfire.io/).
31
+
32
+ <img src="https://ps.w.org/cyr2lat/assets/blackfire-io_secondary_horizontal_transparent-250x62.png" alt="Blackfire Logo" />
33
+
34
  == Screenshots ==
35
 
36
  1. Tables settings page
194
 
195
  == Changelog ==
196
 
197
+ = 5.3.0 (23.05.2022) =
198
+ * Tested with WordPress 6.0 and WooCommerce 6.5.
199
+
200
+ = 5.2.7 (14.02.2022) =
201
+ * Tested with WooCommerce 6.2.
202
+ * Added PHP 8.1 support.
203
+
204
+ = 5.2.6 (25.12.2021) =
205
+ * Revert fix made in 5.2.5 for 404 with WPML, as it created several issues on the frontend.
206
+ * Fix again 404 on archives created with WPML before activation of cyr2lat.
207
+
208
+ = 5.2.5 (19.12.2021) =
209
+ * Tested up to WordPress 5.9 and WooCommerce 6.0.
210
+ * Fix issue with Polylang - do not modify admin language when editing a post.
211
+ * Fix issue with JetPack - fatal error on synchronisation.
212
+ * Fix 404 on archives created with WPML before activation of cyr2lat.
213
+
214
+ = 5.2.4 (07.09.2021) =
215
+ * Fix issue with not showing WooCommerce variable product attributes.
216
+ * Fix issue with Elementor and WPML, endless loop.
217
+
218
+ = 5.2.3 (07.09.2021) =
219
+ * Fix issue with WP Foro plugin - transliterate topic slug when created on frontend.
220
+ * Fix bug with Polylang on REST request.
221
+
222
+ = 5.2.2 (06.09.2021) =
223
+ * Fix issue caused by the bug in Jetpack sync.
224
+ * Optimize code related to WPML locale filtering.
225
+ * Fix endless loading of a taxonomy page with WPML.
226
+ * Fix 'nothing found' on a taxonomy page with WPML.
227
+
228
+ = 5.2.1 (29.07.2021) =
229
+ * Determine WPML language only once to improve performance.
230
+ * Avoid notice on bad SQL request when taxonomies are empty.
231
+
232
  = 5.2.0 (27.07.2021) =
233
  * Add support for categories and tags in other languages with wpml.
234
 
src/php/Settings/Abstracts/SettingsBase.php CHANGED
@@ -395,6 +395,15 @@ abstract class SettingsBase {
395
  * Setup tabs section.
396
  */
397
  public function setup_tabs_section() {
 
 
 
 
 
 
 
 
 
398
  $tab = $this->get_active_tab();
399
 
400
  add_settings_section(
@@ -447,7 +456,7 @@ abstract class SettingsBase {
447
  * @return bool
448
  */
449
  protected function is_tab_active( $tab ) {
450
- $current_tab_name = filter_input( INPUT_GET, 'tab', FILTER_SANITIZE_STRING );
451
 
452
  if ( null === $current_tab_name && ! $tab->is_tab() ) {
453
  return true;
@@ -959,6 +968,10 @@ abstract class SettingsBase {
959
  * @return bool
960
  */
961
  protected function is_options_screen() {
 
 
 
 
962
  $current_screen = get_current_screen();
963
 
964
  $screen_id = $this->screen_id();
395
  * Setup tabs section.
396
  */
397
  public function setup_tabs_section() {
398
+ /**
399
+ * Protection from the bug in \Automattic\Jetpack\Sync\Sender::get_items_to_send(),
400
+ * which sets screen without loading of wp-admin/includes/template.php,
401
+ * where add_settings_section() is defined.
402
+ */
403
+ if ( ! function_exists( 'add_settings_section' ) ) {
404
+ return;
405
+ }
406
+
407
  $tab = $this->get_active_tab();
408
 
409
  add_settings_section(
456
  * @return bool
457
  */
458
  protected function is_tab_active( $tab ) {
459
+ $current_tab_name = filter_input( INPUT_GET, 'tab', FILTER_SANITIZE_FULL_SPECIAL_CHARS );
460
 
461
  if ( null === $current_tab_name && ! $tab->is_tab() ) {
462
  return true;
968
  * @return bool
969
  */
970
  protected function is_options_screen() {
971
+ if ( ! function_exists( 'get_current_screen' ) ) {
972
+ return false;
973
+ }
974
+
975
  $current_screen = get_current_screen();
976
 
977
  $screen_id = $this->screen_id();
src/php/Settings/Tables.php CHANGED
@@ -264,6 +264,10 @@ class Tables extends PluginSettingsBase {
264
  * Setup settings sections.
265
  */
266
  public function setup_sections() {
 
 
 
 
267
  foreach ( $this->form_fields as $form_field ) {
268
  add_settings_section(
269
  $form_field['section'],
264
  * Setup settings sections.
265
  */
266
  public function setup_sections() {
267
+ if ( ! $this->is_options_screen() ) {
268
+ return;
269
+ }
270
+
271
  foreach ( $this->form_fields as $form_field ) {
272
  add_settings_section(
273
  $form_field['section'],
src/php/class-main.php CHANGED
@@ -24,6 +24,13 @@ use Cyr_To_Lat\Symfony\Polyfill\Mbstring\Mbstring;
24
  */
25
  class Main {
26
 
 
 
 
 
 
 
 
27
  /**
28
  * Plugin settings.
29
  *
@@ -92,12 +99,34 @@ class Main {
92
  *
93
  * @var string
94
  */
95
- private $pll_locale = false;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
96
 
97
  /**
98
  * Main constructor.
99
  */
100
  public function __construct() {
 
101
  $this->settings = new Settings();
102
  $this->admin_notices = new Admin_Notices();
103
  $requirements = new Requirements( $this->settings, $this->admin_notices );
@@ -116,11 +145,12 @@ class Main {
116
  $this->admin_notices
117
  );
118
 
119
- if ( defined( 'WP_CLI' ) && constant( 'WP_CLI' ) ) {
120
  $this->cli = new WP_CLI( $this->converter );
121
  }
122
 
123
- $this->acf = new ACF( $this->settings );
 
124
  }
125
 
126
  /**
@@ -129,7 +159,7 @@ class Main {
129
  * @noinspection PhpUndefinedClassInspection
130
  */
131
  public function init() {
132
- if ( defined( 'WP_CLI' ) && constant( 'WP_CLI' ) ) {
133
  try {
134
  /**
135
  * Method WP_CLI::add_command() accepts class as callable.
@@ -153,16 +183,23 @@ class Main {
153
  add_filter( 'sanitize_file_name', [ $this, 'sanitize_filename' ], 10, 2 );
154
  add_filter( 'wp_insert_post_data', [ $this, 'sanitize_post_name' ], 10, 2 );
155
  add_filter( 'pre_insert_term', [ $this, 'pre_insert_term_filter' ], PHP_INT_MAX, 2 );
156
- add_filter( 'get_terms_args', [ $this, 'get_terms_args_filter' ], PHP_INT_MAX, 2 );
 
 
 
157
 
158
  if ( class_exists( Polylang::class ) ) {
159
  add_filter( 'locale', [ $this, 'pll_locale_filter' ] );
160
  }
161
 
162
  if ( class_exists( SitePress::class ) ) {
 
 
163
  // We cannot use locale filter here
164
  // as WPML reverts locale at PHP_INT_MAX in \WPML\ST\MO\Hooks\LanguageSwitch::filterLocale.
165
  add_filter( 'ctl_locale', [ $this, 'wpml_locale_filter' ], - PHP_INT_MAX );
 
 
166
  }
167
  }
168
 
@@ -195,32 +232,37 @@ class Main {
195
  return $pre;
196
  }
197
 
198
- $term = '';
199
  if ( $this->is_term ) {
200
- $sql = $wpdb->prepare(
 
 
 
 
 
 
 
 
201
  "SELECT slug FROM $wpdb->terms t LEFT JOIN $wpdb->term_taxonomy tt
202
  ON t.term_id = tt.term_id
203
  WHERE t.name = %s",
204
  $title
205
  );
206
- $sql .= ' AND tt.taxonomy IN (' . $this->prepare_in( $this->taxonomies ) . ')';
 
 
 
207
 
208
  // phpcs:disable WordPress.DB.PreparedSQL.NotPrepared
209
  // phpcs:ignore WordPress.DB.DirectDatabaseQuery
210
  $term = $wpdb->get_var( $sql );
211
  // phpcs:enable WordPress.DB.PreparedSQL.NotPrepared
212
 
213
- // Make sure we search in the db only once being called from wp_insert_term().
214
- $this->is_term = false;
215
- }
216
-
217
- if ( ! empty( $term ) ) {
218
- $title = $term;
219
- } else {
220
- $title = $this->is_wc_attribute_taxonomy( $title ) ? $title : $this->transliterate( $title );
221
  }
222
 
223
- return $title;
224
  }
225
 
226
  /**
@@ -272,14 +314,14 @@ class Main {
272
  }
273
 
274
  /**
275
- * Fix string encoding on MacOS.
276
  *
277
  * @param string $string String.
 
278
  *
279
  * @return string
280
  */
281
- private function fix_mac_string( $string ) {
282
- $table = $this->get_filtered_table();
283
  $fix_table = Conversion_Tables::get_fix_table_for_mac();
284
 
285
  $fix = [];
@@ -319,15 +361,6 @@ class Main {
319
  return $string;
320
  }
321
 
322
- /**
323
- * Get transliteration table.
324
- *
325
- * @return array
326
- */
327
- private function get_filtered_table() {
328
- return (array) apply_filters( 'ctl_table', $this->settings->get_table() );
329
- }
330
-
331
  /**
332
  * Transliterate string using a table.
333
  *
@@ -336,9 +369,9 @@ class Main {
336
  * @return string
337
  */
338
  public function transliterate( $string ) {
339
- $table = $this->get_filtered_table();
340
 
341
- $string = $this->fix_mac_string( $string );
342
  $string = $this->split_chinese_string( $string, $table );
343
 
344
  return strtr( $string, $table );
@@ -434,8 +467,8 @@ class Main {
434
  public function pre_insert_term_filter( $term, $taxonomy ) {
435
  if (
436
  0 === $term ||
437
- '' === trim( $term ) ||
438
- is_wp_error( $term )
439
  ) {
440
  return $term;
441
  }
@@ -475,6 +508,7 @@ class Main {
475
  if ( false === $rest_locale ) {
476
  return $locale;
477
  }
 
478
  if ( $rest_locale ) {
479
  $this->pll_locale = $rest_locale;
480
 
@@ -485,6 +519,10 @@ class Main {
485
  return $locale;
486
  }
487
 
 
 
 
 
488
  $pll_get_post_language = $this->pll_locale_filter_with_classic_editor();
489
  if ( $pll_get_post_language ) {
490
  $this->pll_locale = $pll_get_post_language;
@@ -537,19 +575,19 @@ class Main {
537
  // phpcs:disable WordPress.Security.NonceVerification.Recommended
538
  if ( isset( $_POST['post_ID'] ) ) {
539
  $pll_get_post_language = pll_get_post_language(
540
- (int) filter_input( INPUT_POST, 'post_ID', FILTER_SANITIZE_STRING ),
541
  'locale'
542
  );
543
  }
544
  if ( isset( $_POST['pll_post_id'] ) ) {
545
  $pll_get_post_language = pll_get_post_language(
546
- (int) filter_input( INPUT_POST, 'pll_post_id', FILTER_SANITIZE_STRING ),
547
  'locale'
548
  );
549
  }
550
  if ( isset( $_GET['post'] ) ) {
551
  $pll_get_post_language = pll_get_post_language(
552
- (int) filter_input( INPUT_GET, 'post', FILTER_SANITIZE_STRING ),
553
  'locale'
554
  );
555
  }
@@ -574,7 +612,7 @@ class Main {
574
  // phpcs:disable WordPress.Security.NonceVerification.Missing
575
  if ( isset( $_POST['term_lang_choice'] ) ) {
576
  $pll_get_language = PLL()->model->get_language(
577
- filter_input( INPUT_POST, 'term_lang_choice', FILTER_SANITIZE_STRING )
578
  );
579
 
580
  if ( $pll_get_language ) {
@@ -595,16 +633,47 @@ class Main {
595
  * @return string
596
  */
597
  public function wpml_locale_filter( $locale ) {
598
- $language_code = wpml_get_current_language();
599
- $languages = apply_filters( 'wpml_active_languages', null );
600
-
601
- if ( isset( $languages[ $language_code ] ) ) {
602
- return $languages[ $language_code ]['default_locale'];
603
  }
604
 
605
  return $locale;
606
  }
607
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
608
  /**
609
  * Changes array of items into string of items, separated by comma and sql-escaped
610
  *
24
  */
25
  class Main {
26
 
27
+ /**
28
+ * Request type.
29
+ *
30
+ * @var Request
31
+ */
32
+ protected $request;
33
+
34
  /**
35
  * Plugin settings.
36
  *
99
  *
100
  * @var string
101
  */
102
+ private $pll_locale;
103
+
104
+ /**
105
+ * WPML locale.
106
+ *
107
+ * @var string
108
+ */
109
+ protected $wpml_locale;
110
+
111
+ /**
112
+ * WPML languages.
113
+ *
114
+ * @var array
115
+ */
116
+ protected $wpml_languages;
117
+
118
+ /**
119
+ * Current request is frontend.
120
+ *
121
+ * @var bool|null
122
+ */
123
+ protected $is_frontend;
124
 
125
  /**
126
  * Main constructor.
127
  */
128
  public function __construct() {
129
+ $this->request = new Request();
130
  $this->settings = new Settings();
131
  $this->admin_notices = new Admin_Notices();
132
  $requirements = new Requirements( $this->settings, $this->admin_notices );
145
  $this->admin_notices
146
  );
147
 
148
+ if ( $this->request->is_cli() ) {
149
  $this->cli = new WP_CLI( $this->converter );
150
  }
151
 
152
+ $this->acf = new ACF( $this->settings );
153
+ $this->is_frontend = $this->request->is_frontend();
154
  }
155
 
156
  /**
159
  * @noinspection PhpUndefinedClassInspection
160
  */
161
  public function init() {
162
+ if ( $this->request->is_cli() ) {
163
  try {
164
  /**
165
  * Method WP_CLI::add_command() accepts class as callable.
183
  add_filter( 'sanitize_file_name', [ $this, 'sanitize_filename' ], 10, 2 );
184
  add_filter( 'wp_insert_post_data', [ $this, 'sanitize_post_name' ], 10, 2 );
185
  add_filter( 'pre_insert_term', [ $this, 'pre_insert_term_filter' ], PHP_INT_MAX, 2 );
186
+
187
+ if ( ! $this->is_frontend || class_exists( SitePress::class ) ) {
188
+ add_filter( 'get_terms_args', [ $this, 'get_terms_args_filter' ], PHP_INT_MAX, 2 );
189
+ }
190
 
191
  if ( class_exists( Polylang::class ) ) {
192
  add_filter( 'locale', [ $this, 'pll_locale_filter' ] );
193
  }
194
 
195
  if ( class_exists( SitePress::class ) ) {
196
+ $this->wpml_locale = $this->get_wpml_locale();
197
+
198
  // We cannot use locale filter here
199
  // as WPML reverts locale at PHP_INT_MAX in \WPML\ST\MO\Hooks\LanguageSwitch::filterLocale.
200
  add_filter( 'ctl_locale', [ $this, 'wpml_locale_filter' ], - PHP_INT_MAX );
201
+
202
+ add_action( 'wpml_language_has_switched', [ $this, 'wpml_language_has_switched' ], 10, 3 );
203
  }
204
  }
205
 
232
  return $pre;
233
  }
234
 
 
235
  if ( $this->is_term ) {
236
+ // Make sure we search in the db only once being called from wp_insert_term().
237
+ $this->is_term = false;
238
+
239
+ // Fix case when showing previously created categories in cyrillic with WPML.
240
+ if ( $this->is_frontend && class_exists( SitePress::class ) ) {
241
+ return $title;
242
+ }
243
+
244
+ $sql = $wpdb->prepare(
245
  "SELECT slug FROM $wpdb->terms t LEFT JOIN $wpdb->term_taxonomy tt
246
  ON t.term_id = tt.term_id
247
  WHERE t.name = %s",
248
  $title
249
  );
250
+
251
+ if ( $this->taxonomies ) {
252
+ $sql .= ' AND tt.taxonomy IN (' . $this->prepare_in( $this->taxonomies ) . ')';
253
+ }
254
 
255
  // phpcs:disable WordPress.DB.PreparedSQL.NotPrepared
256
  // phpcs:ignore WordPress.DB.DirectDatabaseQuery
257
  $term = $wpdb->get_var( $sql );
258
  // phpcs:enable WordPress.DB.PreparedSQL.NotPrepared
259
 
260
+ if ( ! empty( $term ) ) {
261
+ return $term;
262
+ }
 
 
 
 
 
263
  }
264
 
265
+ return $this->is_wc_attribute_taxonomy( $title ) ? $title : $this->transliterate( $title );
266
  }
267
 
268
  /**
314
  }
315
 
316
  /**
317
+ * Fix string encoding on macOS.
318
  *
319
  * @param string $string String.
320
+ * @param array $table Conversion table.
321
  *
322
  * @return string
323
  */
324
+ private function fix_mac_string( $string, $table ) {
 
325
  $fix_table = Conversion_Tables::get_fix_table_for_mac();
326
 
327
  $fix = [];
361
  return $string;
362
  }
363
 
 
 
 
 
 
 
 
 
 
364
  /**
365
  * Transliterate string using a table.
366
  *
369
  * @return string
370
  */
371
  public function transliterate( $string ) {
372
+ $table = (array) apply_filters( 'ctl_table', $this->settings->get_table() );
373
 
374
+ $string = $this->fix_mac_string( $string, $table );
375
  $string = $this->split_chinese_string( $string, $table );
376
 
377
  return strtr( $string, $table );
467
  public function pre_insert_term_filter( $term, $taxonomy ) {
468
  if (
469
  0 === $term ||
470
+ is_wp_error( $term ) ||
471
+ '' === trim( $term )
472
  ) {
473
  return $term;
474
  }
508
  if ( false === $rest_locale ) {
509
  return $locale;
510
  }
511
+
512
  if ( $rest_locale ) {
513
  $this->pll_locale = $rest_locale;
514
 
519
  return $locale;
520
  }
521
 
522
+ if ( ! $this->request->is_post() ) {
523
+ return $locale;
524
+ }
525
+
526
  $pll_get_post_language = $this->pll_locale_filter_with_classic_editor();
527
  if ( $pll_get_post_language ) {
528
  $this->pll_locale = $pll_get_post_language;
575
  // phpcs:disable WordPress.Security.NonceVerification.Recommended
576
  if ( isset( $_POST['post_ID'] ) ) {
577
  $pll_get_post_language = pll_get_post_language(
578
+ (int) filter_input( INPUT_POST, 'post_ID', FILTER_SANITIZE_FULL_SPECIAL_CHARS ),
579
  'locale'
580
  );
581
  }
582
  if ( isset( $_POST['pll_post_id'] ) ) {
583
  $pll_get_post_language = pll_get_post_language(
584
+ (int) filter_input( INPUT_POST, 'pll_post_id', FILTER_SANITIZE_FULL_SPECIAL_CHARS ),
585
  'locale'
586
  );
587
  }
588
  if ( isset( $_GET['post'] ) ) {
589
  $pll_get_post_language = pll_get_post_language(
590
+ (int) filter_input( INPUT_GET, 'post', FILTER_SANITIZE_FULL_SPECIAL_CHARS ),
591
  'locale'
592
  );
593
  }
612
  // phpcs:disable WordPress.Security.NonceVerification.Missing
613
  if ( isset( $_POST['term_lang_choice'] ) ) {
614
  $pll_get_language = PLL()->model->get_language(
615
+ filter_input( INPUT_POST, 'term_lang_choice', FILTER_SANITIZE_FULL_SPECIAL_CHARS )
616
  );
617
 
618
  if ( $pll_get_language ) {
633
  * @return string
634
  */
635
  public function wpml_locale_filter( $locale ) {
636
+ if ( $this->wpml_locale ) {
637
+ return $this->wpml_locale;
 
 
 
638
  }
639
 
640
  return $locale;
641
  }
642
 
643
+ /**
644
+ * Get wpml locale.
645
+ *
646
+ * @return string|null
647
+ */
648
+ protected function get_wpml_locale() {
649
+ $language_code = wpml_get_current_language();
650
+ $this->wpml_languages = (array) apply_filters( 'wpml_active_languages', [] );
651
+
652
+ return (
653
+ isset( $this->wpml_languages[ $language_code ] ) ?
654
+ $this->wpml_languages[ $language_code ]['default_locale'] :
655
+ null
656
+ );
657
+ }
658
+
659
+ /**
660
+ * Save switched locale.
661
+ *
662
+ * @param null|string $language_code Language code to switch into.
663
+ * @param bool|string $cookie_lang Optionally also switch the cookie language to the value given.
664
+ * @param string $original_language Original language.
665
+ *
666
+ * @noinspection PhpUnusedParameterInspection
667
+ */
668
+ public function wpml_language_has_switched( $language_code, $cookie_lang, $original_language ) {
669
+ $language_code = (string) $language_code;
670
+
671
+ $this->wpml_locale =
672
+ isset( $this->wpml_languages[ $language_code ] ) ?
673
+ $this->wpml_languages[ $language_code ]['default_locale'] :
674
+ null;
675
+ }
676
+
677
  /**
678
  * Changes array of items into string of items, separated by comma and sql-escaped
679
  *
src/php/class-request.php ADDED
@@ -0,0 +1,105 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Determine request type.
4
+ *
5
+ * @package cyr-to-lat
6
+ */
7
+
8
+ namespace Cyr_To_Lat;
9
+
10
+ use WP_Rewrite;
11
+
12
+ /**
13
+ * Class Request
14
+ */
15
+ class Request {
16
+
17
+ /**
18
+ * Is frontend.
19
+ *
20
+ * @return bool
21
+ */
22
+ public function is_frontend() {
23
+ return ! ( wp_doing_ajax() || is_admin() || $this->is_cli() || $this->is_rest() );
24
+ }
25
+
26
+ /**
27
+ * Check if it is a CLI request
28
+ *
29
+ * @return bool
30
+ */
31
+ public function is_cli() {
32
+ return defined( 'WP_CLI' ) && constant( 'WP_CLI' );
33
+ }
34
+
35
+ /**
36
+ * Checks if the current request is a WP REST API request.
37
+ *
38
+ * Case #1: After WP_REST_Request initialisation
39
+ * Case #2: Support "plain" permalink settings
40
+ * Case #3: It can happen that WP_Rewrite is not yet initialized,
41
+ * so do this (wp-settings.php)
42
+ * Case #4: URL Path begins with wp-json/ (your REST prefix)
43
+ * Also supports WP installations in subfolders
44
+ *
45
+ * @return bool
46
+ * @author matzeeable
47
+ */
48
+ public function is_rest() {
49
+ if ( ! isset( $_SERVER['REQUEST_URI'] ) ) {
50
+ return false;
51
+ }
52
+
53
+ // Case #1.
54
+ if ( defined( 'REST_REQUEST' ) && constant( 'REST_REQUEST' ) ) {
55
+ return true;
56
+ }
57
+
58
+ // Case #2.
59
+ if ( filter_input( INPUT_GET, 'rest_route', FILTER_SANITIZE_FULL_SPECIAL_CHARS ) ) {
60
+ return true;
61
+ }
62
+
63
+ // Case #3.
64
+ global $wp_rewrite;
65
+
66
+ if ( null === $wp_rewrite ) {
67
+ // @codeCoverageIgnoreStart
68
+ // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited
69
+ $wp_rewrite = new WP_Rewrite();
70
+ // @codeCoverageIgnoreEnd
71
+ }
72
+
73
+ // Case #4.
74
+ return (bool) $this->get_rest_route();
75
+ }
76
+
77
+ /**
78
+ * Get REST route.
79
+ * Returns route if it is a REST request, otherwise empty string.
80
+ *
81
+ * @return string
82
+ */
83
+ protected function get_rest_route() {
84
+ $current_path = wp_parse_url( add_query_arg( [] ), PHP_URL_PATH );
85
+ $rest_path = wp_parse_url( trailingslashit( rest_url() ), PHP_URL_PATH );
86
+
87
+ $is_rest = 0 === strpos( $current_path, $rest_path );
88
+
89
+ return $is_rest ? substr( $current_path, strlen( $rest_path ) ) : '';
90
+ }
91
+
92
+ /**
93
+ * If current request is POST.
94
+ *
95
+ * @return bool
96
+ */
97
+ public function is_post() {
98
+ $request_method = filter_var(
99
+ isset( $_SERVER['REQUEST_METHOD'] ) ? wp_unslash( $_SERVER['REQUEST_METHOD'] ) : '',
100
+ FILTER_SANITIZE_FULL_SPECIAL_CHARS
101
+ );
102
+
103
+ return 'POST' === $request_method;
104
+ }
105
+ }
vendor/autoload.php CHANGED
@@ -2,6 +2,11 @@
2
 
3
  // autoload.php @generated by Composer
4
 
 
 
 
 
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
- return ComposerAutoloaderInitb6b80d8d25d79e642dcd5e27493a9b6e::getLoader();
2
 
3
  // autoload.php @generated by Composer
4
 
5
+ if (PHP_VERSION_ID < 50600) {
6
+ echo 'Composer 2.3.0 dropped support for autoloading on PHP <5.6 and you are running '.PHP_VERSION.', please upgrade PHP or use Composer 2.2 LTS via "composer self-update --2.2". Aborting.'.PHP_EOL;
7
+ exit(1);
8
+ }
9
+
10
  require_once __DIR__ . '/composer/autoload_real.php';
11
 
12
+ return ComposerAutoloaderInit0714ade671e040cd271d9ffc07e5f3a4::getLoader();
vendor/composer/ClassLoader.php CHANGED
@@ -42,30 +42,75 @@ namespace Composer\Autoload;
42
  */
43
  class ClassLoader
44
  {
 
45
  private $vendorDir;
46
 
47
  // PSR-4
 
 
 
 
48
  private $prefixLengthsPsr4 = array();
 
 
 
 
49
  private $prefixDirsPsr4 = array();
 
 
 
 
50
  private $fallbackDirsPsr4 = array();
51
 
52
  // PSR-0
 
 
 
 
53
  private $prefixesPsr0 = array();
 
 
 
 
54
  private $fallbackDirsPsr0 = array();
55
 
 
56
  private $useIncludePath = false;
 
 
 
 
 
57
  private $classMap = array();
 
 
58
  private $classMapAuthoritative = false;
 
 
 
 
 
59
  private $missingClasses = array();
 
 
60
  private $apcuPrefix;
61
 
 
 
 
62
  private static $registeredLoaders = array();
63
 
 
 
 
64
  public function __construct($vendorDir = null)
65
  {
66
  $this->vendorDir = $vendorDir;
67
  }
68
 
 
 
 
69
  public function getPrefixes()
70
  {
71
  if (!empty($this->prefixesPsr0)) {
@@ -75,28 +120,47 @@ class ClassLoader
75
  return array();
76
  }
77
 
 
 
 
 
78
  public function getPrefixesPsr4()
79
  {
80
  return $this->prefixDirsPsr4;
81
  }
82
 
 
 
 
 
83
  public function getFallbackDirs()
84
  {
85
  return $this->fallbackDirsPsr0;
86
  }
87
 
 
 
 
 
88
  public function getFallbackDirsPsr4()
89
  {
90
  return $this->fallbackDirsPsr4;
91
  }
92
 
 
 
 
 
93
  public function getClassMap()
94
  {
95
  return $this->classMap;
96
  }
97
 
98
  /**
99
- * @param array $classMap Class to filename map
 
 
 
100
  */
101
  public function addClassMap(array $classMap)
102
  {
@@ -111,9 +175,11 @@ class ClassLoader
111
  * Registers a set of PSR-0 directories for a given prefix, either
112
  * appending or prepending to the ones previously set for this prefix.
113
  *
114
- * @param string $prefix The prefix
115
- * @param array|string $paths The PSR-0 root directories
116
- * @param bool $prepend Whether to prepend the directories
 
 
117
  */
118
  public function add($prefix, $paths, $prepend = false)
119
  {
@@ -156,11 +222,13 @@ class ClassLoader
156
  * Registers a set of PSR-4 directories for a given namespace, either
157
  * appending or prepending to the ones previously set for this namespace.
158
  *
159
- * @param string $prefix The prefix/namespace, with trailing '\\'
160
- * @param array|string $paths The PSR-4 base directories
161
- * @param bool $prepend Whether to prepend the directories
162
  *
163
  * @throws \InvalidArgumentException
 
 
164
  */
165
  public function addPsr4($prefix, $paths, $prepend = false)
166
  {
@@ -204,8 +272,10 @@ class ClassLoader
204
  * Registers a set of PSR-0 directories for a given prefix,
205
  * replacing any others previously set for this prefix.
206
  *
207
- * @param string $prefix The prefix
208
- * @param array|string $paths The PSR-0 base directories
 
 
209
  */
210
  public function set($prefix, $paths)
211
  {
@@ -220,10 +290,12 @@ class ClassLoader
220
  * Registers a set of PSR-4 directories for a given namespace,
221
  * replacing any others previously set for this namespace.
222
  *
223
- * @param string $prefix The prefix/namespace, with trailing '\\'
224
- * @param array|string $paths The PSR-4 base directories
225
  *
226
  * @throws \InvalidArgumentException
 
 
227
  */
228
  public function setPsr4($prefix, $paths)
229
  {
@@ -243,6 +315,8 @@ class ClassLoader
243
  * Turns on searching the include path for class files.
244
  *
245
  * @param bool $useIncludePath
 
 
246
  */
247
  public function setUseIncludePath($useIncludePath)
248
  {
@@ -265,6 +339,8 @@ class ClassLoader
265
  * that have not been registered with the class map.
266
  *
267
  * @param bool $classMapAuthoritative
 
 
268
  */
269
  public function setClassMapAuthoritative($classMapAuthoritative)
270
  {
@@ -285,6 +361,8 @@ class ClassLoader
285
  * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
286
  *
287
  * @param string|null $apcuPrefix
 
 
288
  */
289
  public function setApcuPrefix($apcuPrefix)
290
  {
@@ -305,6 +383,8 @@ class ClassLoader
305
  * Registers this instance as an autoloader.
306
  *
307
  * @param bool $prepend Whether to prepend the autoloader or not
 
 
308
  */
309
  public function register($prepend = false)
310
  {
@@ -324,6 +404,8 @@ class ClassLoader
324
 
325
  /**
326
  * Unregisters this instance as an autoloader.
 
 
327
  */
328
  public function unregister()
329
  {
@@ -403,6 +485,11 @@ class ClassLoader
403
  return self::$registeredLoaders;
404
  }
405
 
 
 
 
 
 
406
  private function findFileWithExtension($class, $ext)
407
  {
408
  // PSR-4 lookup
@@ -474,6 +561,10 @@ class ClassLoader
474
  * Scope isolated include.
475
  *
476
  * Prevents access to $this/self from included files.
 
 
 
 
477
  */
478
  function includeFile($file)
479
  {
42
  */
43
  class ClassLoader
44
  {
45
+ /** @var ?string */
46
  private $vendorDir;
47
 
48
  // PSR-4
49
+ /**
50
+ * @var array[]
51
+ * @psalm-var array<string, array<string, int>>
52
+ */
53
  private $prefixLengthsPsr4 = array();
54
+ /**
55
+ * @var array[]
56
+ * @psalm-var array<string, array<int, string>>
57
+ */
58
  private $prefixDirsPsr4 = array();
59
+ /**
60
+ * @var array[]
61
+ * @psalm-var array<string, string>
62
+ */
63
  private $fallbackDirsPsr4 = array();
64
 
65
  // PSR-0
66
+ /**
67
+ * @var array[]
68
+ * @psalm-var array<string, array<string, string[]>>
69
+ */
70
  private $prefixesPsr0 = array();
71
+ /**
72
+ * @var array[]
73
+ * @psalm-var array<string, string>
74
+ */
75
  private $fallbackDirsPsr0 = array();
76
 
77
+ /** @var bool */
78
  private $useIncludePath = false;
79
+
80
+ /**
81
+ * @var string[]
82
+ * @psalm-var array<string, string>
83
+ */
84
  private $classMap = array();
85
+
86
+ /** @var bool */
87
  private $classMapAuthoritative = false;
88
+
89
+ /**
90
+ * @var bool[]
91
+ * @psalm-var array<string, bool>
92
+ */
93
  private $missingClasses = array();
94
+
95
+ /** @var ?string */
96
  private $apcuPrefix;
97
 
98
+ /**
99
+ * @var self[]
100
+ */
101
  private static $registeredLoaders = array();
102
 
103
+ /**
104
+ * @param ?string $vendorDir
105
+ */
106
  public function __construct($vendorDir = null)
107
  {
108
  $this->vendorDir = $vendorDir;
109
  }
110
 
111
+ /**
112
+ * @return string[]
113
+ */
114
  public function getPrefixes()
115
  {
116
  if (!empty($this->prefixesPsr0)) {
120
  return array();
121
  }
122
 
123
+ /**
124
+ * @return array[]
125
+ * @psalm-return array<string, array<int, string>>
126
+ */
127
  public function getPrefixesPsr4()
128
  {
129
  return $this->prefixDirsPsr4;
130
  }
131
 
132
+ /**
133
+ * @return array[]
134
+ * @psalm-return array<string, string>
135
+ */
136
  public function getFallbackDirs()
137
  {
138
  return $this->fallbackDirsPsr0;
139
  }
140
 
141
+ /**
142
+ * @return array[]
143
+ * @psalm-return array<string, string>
144
+ */
145
  public function getFallbackDirsPsr4()
146
  {
147
  return $this->fallbackDirsPsr4;
148
  }
149
 
150
+ /**
151
+ * @return string[] Array of classname => path
152
+ * @psalm-return array<string, string>
153
+ */
154
  public function getClassMap()
155
  {
156
  return $this->classMap;
157
  }
158
 
159
  /**
160
+ * @param string[] $classMap Class to filename map
161
+ * @psalm-param array<string, string> $classMap
162
+ *
163
+ * @return void
164
  */
165
  public function addClassMap(array $classMap)
166
  {
175
  * Registers a set of PSR-0 directories for a given prefix, either
176
  * appending or prepending to the ones previously set for this prefix.
177
  *
178
+ * @param string $prefix The prefix
179
+ * @param string[]|string $paths The PSR-0 root directories
180
+ * @param bool $prepend Whether to prepend the directories
181
+ *
182
+ * @return void
183
  */
184
  public function add($prefix, $paths, $prepend = false)
185
  {
222
  * Registers a set of PSR-4 directories for a given namespace, either
223
  * appending or prepending to the ones previously set for this namespace.
224
  *
225
+ * @param string $prefix The prefix/namespace, with trailing '\\'
226
+ * @param string[]|string $paths The PSR-4 base directories
227
+ * @param bool $prepend Whether to prepend the directories
228
  *
229
  * @throws \InvalidArgumentException
230
+ *
231
+ * @return void
232
  */
233
  public function addPsr4($prefix, $paths, $prepend = false)
234
  {
272
  * Registers a set of PSR-0 directories for a given prefix,
273
  * replacing any others previously set for this prefix.
274
  *
275
+ * @param string $prefix The prefix
276
+ * @param string[]|string $paths The PSR-0 base directories
277
+ *
278
+ * @return void
279
  */
280
  public function set($prefix, $paths)
281
  {
290
  * Registers a set of PSR-4 directories for a given namespace,
291
  * replacing any others previously set for this namespace.
292
  *
293
+ * @param string $prefix The prefix/namespace, with trailing '\\'
294
+ * @param string[]|string $paths The PSR-4 base directories
295
  *
296
  * @throws \InvalidArgumentException
297
+ *
298
+ * @return void
299
  */
300
  public function setPsr4($prefix, $paths)
301
  {
315
  * Turns on searching the include path for class files.
316
  *
317
  * @param bool $useIncludePath
318
+ *
319
+ * @return void
320
  */
321
  public function setUseIncludePath($useIncludePath)
322
  {
339
  * that have not been registered with the class map.
340
  *
341
  * @param bool $classMapAuthoritative
342
+ *
343
+ * @return void
344
  */
345
  public function setClassMapAuthoritative($classMapAuthoritative)
346
  {
361
  * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
362
  *
363
  * @param string|null $apcuPrefix
364
+ *
365
+ * @return void
366
  */
367
  public function setApcuPrefix($apcuPrefix)
368
  {
383
  * Registers this instance as an autoloader.
384
  *
385
  * @param bool $prepend Whether to prepend the autoloader or not
386
+ *
387
+ * @return void
388
  */
389
  public function register($prepend = false)
390
  {
404
 
405
  /**
406
  * Unregisters this instance as an autoloader.
407
+ *
408
+ * @return void
409
  */
410
  public function unregister()
411
  {
485
  return self::$registeredLoaders;
486
  }
487
 
488
+ /**
489
+ * @param string $class
490
+ * @param string $ext
491
+ * @return string|false
492
+ */
493
  private function findFileWithExtension($class, $ext)
494
  {
495
  // PSR-4 lookup
561
  * Scope isolated include.
562
  *
563
  * Prevents access to $this/self from included files.
564
+ *
565
+ * @param string $file
566
+ * @return void
567
+ * @private
568
  */
569
  function includeFile($file)
570
  {
vendor/composer/InstalledVersions.php CHANGED
@@ -20,12 +20,27 @@ use Composer\Semver\VersionParser;
20
  *
21
  * See also https://getcomposer.org/doc/07-runtime.md#installed-versions
22
  *
23
- * To require it's presence, you can require `composer-runtime-api ^2.0`
 
 
24
  */
25
  class InstalledVersions
26
  {
 
 
 
 
27
  private static $installed;
 
 
 
 
28
  private static $canGetVendors;
 
 
 
 
 
29
  private static $installedByVendor = array();
30
 
31
  /**
@@ -228,7 +243,7 @@ class InstalledVersions
228
 
229
  /**
230
  * @return array
231
- * @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}
232
  */
233
  public static function getRootPackage()
234
  {
@@ -242,7 +257,7 @@ class InstalledVersions
242
  *
243
  * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.
244
  * @return array[]
245
- * @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}
246
  */
247
  public static function getRawData()
248
  {
@@ -265,7 +280,7 @@ class InstalledVersions
265
  * Returns the raw data of all installed.php which are currently loaded for custom implementations
266
  *
267
  * @return array[]
268
- * @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}>
269
  */
270
  public static function getAllRawData()
271
  {
@@ -288,7 +303,7 @@ class InstalledVersions
288
  * @param array[] $data A vendor/composer/installed.php data set
289
  * @return void
290
  *
291
- * @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} $data
292
  */
293
  public static function reload($data)
294
  {
@@ -298,7 +313,7 @@ class InstalledVersions
298
 
299
  /**
300
  * @return array[]
301
- * @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}>
302
  */
303
  private static function getInstalled()
304
  {
20
  *
21
  * See also https://getcomposer.org/doc/07-runtime.md#installed-versions
22
  *
23
+ * To require its presence, you can require `composer-runtime-api ^2.0`
24
+ *
25
+ * @final
26
  */
27
  class InstalledVersions
28
  {
29
+ /**
30
+ * @var mixed[]|null
31
+ * @psalm-var array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}|array{}|null
32
+ */
33
  private static $installed;
34
+
35
+ /**
36
+ * @var bool|null
37
+ */
38
  private static $canGetVendors;
39
+
40
+ /**
41
+ * @var array[]
42
+ * @psalm-var array<string, array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
43
+ */
44
  private static $installedByVendor = array();
45
 
46
  /**
243
 
244
  /**
245
  * @return array
246
+ * @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}
247
  */
248
  public static function getRootPackage()
249
  {
257
  *
258
  * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.
259
  * @return array[]
260
+ * @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}
261
  */
262
  public static function getRawData()
263
  {
280
  * Returns the raw data of all installed.php which are currently loaded for custom implementations
281
  *
282
  * @return array[]
283
+ * @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
284
  */
285
  public static function getAllRawData()
286
  {
303
  * @param array[] $data A vendor/composer/installed.php data set
304
  * @return void
305
  *
306
+ * @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} $data
307
  */
308
  public static function reload($data)
309
  {
313
 
314
  /**
315
  * @return array[]
316
+ * @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
317
  */
318
  private static function getInstalled()
319
  {
vendor/composer/autoload_classmap.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_classmap.php @generated by Composer
4
 
5
- $vendorDir = dirname(dirname(__FILE__));
6
  $baseDir = dirname($vendorDir);
7
 
8
  return array(
@@ -16,6 +16,7 @@ return array(
16
  'Cyr_To_Lat\\KAGG\\WP_Background_Processing\\WP_Background_Process' => $baseDir . '/lib/wp-background-processing/class-wp-background-process.php',
17
  'Cyr_To_Lat\\Main' => $baseDir . '/src/php/class-main.php',
18
  'Cyr_To_Lat\\Post_Conversion_Process' => $baseDir . '/src/php/background-processes/class-post-conversion-process.php',
 
19
  'Cyr_To_Lat\\Requirements' => $baseDir . '/src/php/class-requirements.php',
20
  'Cyr_To_Lat\\Settings\\Abstracts\\SettingsBase' => $baseDir . '/src/php/Settings/Abstracts/SettingsBase.php',
21
  'Cyr_To_Lat\\Settings\\Abstracts\\SettingsInterface' => $baseDir . '/src/php/Settings/Abstracts/SettingsInterface.php',
2
 
3
  // autoload_classmap.php @generated by Composer
4
 
5
+ $vendorDir = dirname(__DIR__);
6
  $baseDir = dirname($vendorDir);
7
 
8
  return array(
16
  'Cyr_To_Lat\\KAGG\\WP_Background_Processing\\WP_Background_Process' => $baseDir . '/lib/wp-background-processing/class-wp-background-process.php',
17
  'Cyr_To_Lat\\Main' => $baseDir . '/src/php/class-main.php',
18
  'Cyr_To_Lat\\Post_Conversion_Process' => $baseDir . '/src/php/background-processes/class-post-conversion-process.php',
19
+ 'Cyr_To_Lat\\Request' => $baseDir . '/src/php/class-request.php',
20
  'Cyr_To_Lat\\Requirements' => $baseDir . '/src/php/class-requirements.php',
21
  'Cyr_To_Lat\\Settings\\Abstracts\\SettingsBase' => $baseDir . '/src/php/Settings/Abstracts/SettingsBase.php',
22
  'Cyr_To_Lat\\Settings\\Abstracts\\SettingsInterface' => $baseDir . '/src/php/Settings/Abstracts/SettingsInterface.php',
vendor/composer/autoload_files.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_files.php @generated by Composer
4
 
5
- $vendorDir = dirname(dirname(__FILE__));
6
  $baseDir = dirname($vendorDir);
7
 
8
  return array(
2
 
3
  // autoload_files.php @generated by Composer
4
 
5
+ $vendorDir = dirname(__DIR__);
6
  $baseDir = dirname($vendorDir);
7
 
8
  return array(
vendor/composer/autoload_namespaces.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_namespaces.php @generated by Composer
4
 
5
- $vendorDir = dirname(dirname(__FILE__));
6
  $baseDir = dirname($vendorDir);
7
 
8
  return array(
2
 
3
  // autoload_namespaces.php @generated by Composer
4
 
5
+ $vendorDir = dirname(__DIR__);
6
  $baseDir = dirname($vendorDir);
7
 
8
  return array(
vendor/composer/autoload_psr4.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_psr4.php @generated by Composer
4
 
5
- $vendorDir = dirname(dirname(__FILE__));
6
  $baseDir = dirname($vendorDir);
7
 
8
  return array(
2
 
3
  // autoload_psr4.php @generated by Composer
4
 
5
+ $vendorDir = dirname(__DIR__);
6
  $baseDir = dirname($vendorDir);
7
 
8
  return array(
vendor/composer/autoload_real.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
- class ComposerAutoloaderInitb6b80d8d25d79e642dcd5e27493a9b6e
6
  {
7
  private static $loader;
8
 
@@ -22,52 +22,34 @@ class ComposerAutoloaderInitb6b80d8d25d79e642dcd5e27493a9b6e
22
  return self::$loader;
23
  }
24
 
25
- spl_autoload_register(array('ComposerAutoloaderInitb6b80d8d25d79e642dcd5e27493a9b6e', 'loadClassLoader'), true, true);
26
- self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));
27
- spl_autoload_unregister(array('ComposerAutoloaderInitb6b80d8d25d79e642dcd5e27493a9b6e', 'loadClassLoader'));
28
 
29
- $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
30
- if ($useStaticLoader) {
31
- require __DIR__ . '/autoload_static.php';
32
-
33
- call_user_func(\Composer\Autoload\ComposerStaticInitb6b80d8d25d79e642dcd5e27493a9b6e::getInitializer($loader));
34
- } else {
35
- $map = require __DIR__ . '/autoload_namespaces.php';
36
- foreach ($map as $namespace => $path) {
37
- $loader->set($namespace, $path);
38
- }
39
-
40
- $map = require __DIR__ . '/autoload_psr4.php';
41
- foreach ($map as $namespace => $path) {
42
- $loader->setPsr4($namespace, $path);
43
- }
44
-
45
- $classMap = require __DIR__ . '/autoload_classmap.php';
46
- if ($classMap) {
47
- $loader->addClassMap($classMap);
48
- }
49
- }
50
 
51
  $loader->register(true);
52
 
53
- if ($useStaticLoader) {
54
- $includeFiles = Composer\Autoload\ComposerStaticInitb6b80d8d25d79e642dcd5e27493a9b6e::$files;
55
- } else {
56
- $includeFiles = require __DIR__ . '/autoload_files.php';
57
- }
58
  foreach ($includeFiles as $fileIdentifier => $file) {
59
- composerRequireb6b80d8d25d79e642dcd5e27493a9b6e($fileIdentifier, $file);
60
  }
61
 
62
  return $loader;
63
  }
64
  }
65
 
66
- function composerRequireb6b80d8d25d79e642dcd5e27493a9b6e($fileIdentifier, $file)
 
 
 
 
 
67
  {
68
  if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
69
- require $file;
70
-
71
  $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
 
 
72
  }
73
  }
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
+ class ComposerAutoloaderInit0714ade671e040cd271d9ffc07e5f3a4
6
  {
7
  private static $loader;
8
 
22
  return self::$loader;
23
  }
24
 
25
+ spl_autoload_register(array('ComposerAutoloaderInit0714ade671e040cd271d9ffc07e5f3a4', 'loadClassLoader'), true, true);
26
+ self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
27
+ spl_autoload_unregister(array('ComposerAutoloaderInit0714ade671e040cd271d9ffc07e5f3a4', 'loadClassLoader'));
28
 
29
+ require __DIR__ . '/autoload_static.php';
30
+ call_user_func(\Composer\Autoload\ComposerStaticInit0714ade671e040cd271d9ffc07e5f3a4::getInitializer($loader));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
31
 
32
  $loader->register(true);
33
 
34
+ $includeFiles = \Composer\Autoload\ComposerStaticInit0714ade671e040cd271d9ffc07e5f3a4::$files;
 
 
 
 
35
  foreach ($includeFiles as $fileIdentifier => $file) {
36
+ composerRequire0714ade671e040cd271d9ffc07e5f3a4($fileIdentifier, $file);
37
  }
38
 
39
  return $loader;
40
  }
41
  }
42
 
43
+ /**
44
+ * @param string $fileIdentifier
45
+ * @param string $file
46
+ * @return void
47
+ */
48
+ function composerRequire0714ade671e040cd271d9ffc07e5f3a4($fileIdentifier, $file)
49
  {
50
  if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
 
 
51
  $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
52
+
53
+ require $file;
54
  }
55
  }
vendor/composer/autoload_static.php CHANGED
@@ -4,7 +4,7 @@
4
 
5
  namespace Composer\Autoload;
6
 
7
- class ComposerStaticInitb6b80d8d25d79e642dcd5e27493a9b6e
8
  {
9
  public static $files = array (
10
  '344a0f93a05b8ca362c22e39586db500' => __DIR__ . '/../..' . '/lib/polyfill-mbstring/bootstrap.php',
@@ -21,6 +21,7 @@ class ComposerStaticInitb6b80d8d25d79e642dcd5e27493a9b6e
21
  'Cyr_To_Lat\\KAGG\\WP_Background_Processing\\WP_Background_Process' => __DIR__ . '/../..' . '/lib/wp-background-processing/class-wp-background-process.php',
22
  'Cyr_To_Lat\\Main' => __DIR__ . '/../..' . '/src/php/class-main.php',
23
  'Cyr_To_Lat\\Post_Conversion_Process' => __DIR__ . '/../..' . '/src/php/background-processes/class-post-conversion-process.php',
 
24
  'Cyr_To_Lat\\Requirements' => __DIR__ . '/../..' . '/src/php/class-requirements.php',
25
  'Cyr_To_Lat\\Settings\\Abstracts\\SettingsBase' => __DIR__ . '/../..' . '/src/php/Settings/Abstracts/SettingsBase.php',
26
  'Cyr_To_Lat\\Settings\\Abstracts\\SettingsInterface' => __DIR__ . '/../..' . '/src/php/Settings/Abstracts/SettingsInterface.php',
@@ -36,7 +37,7 @@ class ComposerStaticInitb6b80d8d25d79e642dcd5e27493a9b6e
36
  public static function getInitializer(ClassLoader $loader)
37
  {
38
  return \Closure::bind(function () use ($loader) {
39
- $loader->classMap = ComposerStaticInitb6b80d8d25d79e642dcd5e27493a9b6e::$classMap;
40
 
41
  }, null, ClassLoader::class);
42
  }
4
 
5
  namespace Composer\Autoload;
6
 
7
+ class ComposerStaticInit0714ade671e040cd271d9ffc07e5f3a4
8
  {
9
  public static $files = array (
10
  '344a0f93a05b8ca362c22e39586db500' => __DIR__ . '/../..' . '/lib/polyfill-mbstring/bootstrap.php',
21
  'Cyr_To_Lat\\KAGG\\WP_Background_Processing\\WP_Background_Process' => __DIR__ . '/../..' . '/lib/wp-background-processing/class-wp-background-process.php',
22
  'Cyr_To_Lat\\Main' => __DIR__ . '/../..' . '/src/php/class-main.php',
23
  'Cyr_To_Lat\\Post_Conversion_Process' => __DIR__ . '/../..' . '/src/php/background-processes/class-post-conversion-process.php',
24
+ 'Cyr_To_Lat\\Request' => __DIR__ . '/../..' . '/src/php/class-request.php',
25
  'Cyr_To_Lat\\Requirements' => __DIR__ . '/../..' . '/src/php/class-requirements.php',
26
  'Cyr_To_Lat\\Settings\\Abstracts\\SettingsBase' => __DIR__ . '/../..' . '/src/php/Settings/Abstracts/SettingsBase.php',
27
  'Cyr_To_Lat\\Settings\\Abstracts\\SettingsInterface' => __DIR__ . '/../..' . '/src/php/Settings/Abstracts/SettingsInterface.php',
37
  public static function getInitializer(ClassLoader $loader)
38
  {
39
  return \Closure::bind(function () use ($loader) {
40
+ $loader->classMap = ComposerStaticInit0714ade671e040cd271d9ffc07e5f3a4::$classMap;
41
 
42
  }, null, ClassLoader::class);
43
  }
vendor/composer/installed.php CHANGED
@@ -1,22 +1,22 @@
1
  <?php return array(
2
  'root' => array(
3
- 'pretty_version' => '5.2.0',
4
- 'version' => '5.2.0.0',
5
  'type' => 'wordpress-plugin',
6
  'install_path' => __DIR__ . '/../../',
7
  'aliases' => array(),
8
- 'reference' => '9c6c7dd69a1f5aebba4ea83166e00056c79c93d5',
9
  'name' => 'mihdan/cyr2lat',
10
  'dev' => false,
11
  ),
12
  'versions' => array(
13
  'mihdan/cyr2lat' => array(
14
- 'pretty_version' => '5.2.0',
15
- 'version' => '5.2.0.0',
16
  'type' => 'wordpress-plugin',
17
  'install_path' => __DIR__ . '/../../',
18
  'aliases' => array(),
19
- 'reference' => '9c6c7dd69a1f5aebba4ea83166e00056c79c93d5',
20
  'dev_requirement' => false,
21
  ),
22
  ),
1
  <?php return array(
2
  'root' => array(
3
+ 'pretty_version' => '5.3.0',
4
+ 'version' => '5.3.0.0',
5
  'type' => 'wordpress-plugin',
6
  'install_path' => __DIR__ . '/../../',
7
  'aliases' => array(),
8
+ 'reference' => '5753831154667bde5b997318a06d63d3f37517ef',
9
  'name' => 'mihdan/cyr2lat',
10
  'dev' => false,
11
  ),
12
  'versions' => array(
13
  'mihdan/cyr2lat' => array(
14
+ 'pretty_version' => '5.3.0',
15
+ 'version' => '5.3.0.0',
16
  'type' => 'wordpress-plugin',
17
  'install_path' => __DIR__ . '/../../',
18
  'aliases' => array(),
19
+ 'reference' => '5753831154667bde5b997318a06d63d3f37517ef',
20