@digitransit-component/digitransit-component-autosuggest 6.0.4 → 7.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/index.development.js +3 -2
- package/lib/index.js +2 -1
- package/lib/index.js.map +1 -1
- package/package.json +6 -6
package/lib/index.development.js
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("react"),require("prop-types"),require("react-i18next"),require("classnames"),require("react-autosuggest"),require("lodash/debounce"),require("lodash/flatten"),require("lodash/take"),require("lodash/isString"),require("lodash/orderBy"),require("lodash/uniqWith"),require("lodash/get"),require("@digitransit-component/digitransit-component-suggestion-item"),require("lodash/isEqual"),require("lodash/memoize"),require("lodash/escapeRegExp"),require("lodash/cloneDeep"),require("@digitransit-component/digitransit-component-icon"),require("luxon"),require("lodash/isEmpty"),require("i18next"),require("react-modal"),require("@digitransit-component/digitransit-component-dialog-modal")):"function"==typeof define&&define.amd?define(["exports","react","prop-types","react-i18next","classnames","react-autosuggest","lodash/debounce","lodash/flatten","lodash/take","lodash/isString","lodash/orderBy","lodash/uniqWith","lodash/get","@digitransit-component/digitransit-component-suggestion-item","lodash/isEqual","lodash/memoize","lodash/escapeRegExp","lodash/cloneDeep","@digitransit-component/digitransit-component-icon","luxon","lodash/isEmpty","i18next","react-modal","@digitransit-component/digitransit-component-dialog-modal"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).DTAutosuggest={},e.React,e.PropTypes,e.reactI18next,e.cx,e.Autosuggest,e.debounce,e.flatten,e.take,e.isString,e.orderBy,e.uniqWith,e.get,e.SuggestionItem,e.isEqual,e.memoize,e.escapeRegExp,e.cloneDeep,e.Icon,e.luxon,e.isEmpty,e.i18next,e.ReactModal,e.DialogModal)}(this,(function(e,t,u,n,o,i,s,r,a,l,c,D,d,p,h,g,f,F,b,C,A,m,E,y){"use strict";function v(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var _=v(t),B=v(u),S=v(o),k=v(i),w=v(s),x=v(r),O=v(a),M=v(l),j=v(c),R=v(D),P=v(d),L=v(p),I=v(h),N=v(g),z=v(f),T=v(F),q=v(b),V=v(A),H=v(E),$=v(y);function U(e){return U="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},U(e)}function G(e){var t=function(e,t){if("object"!=U(e)||!e)return e;var u=e[Symbol.toPrimitive];if(void 0!==u){var n=u.call(e,t||"default");if("object"!=U(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==U(t)?t:t+""}function W(e,t,u){return(t=G(t))in e?Object.defineProperty(e,t,{value:u,enumerable:!0,configurable:!0,writable:!0}):e[t]=u,e}function Y(e,t){return e&&t&&e===t}const Z=["stop","station","favouriteStop","favouriteStation"],Q=["favouriteVehicleRentalStation","bikestation"];function K(e){if(!e)return"";const t=e.split(":");return 0===t.length?"":`citybikes${t[0]}:bikestation:${t[1]}`}function X(e,t){const u=e.properties,n=t.properties;if("FutureRoute"===e.type&&"FutureRoute"===t.type){const e=u.origin,t=u.destination,o=n.origin,i=n.destination;return`${e.name}//${e.localadmin}//${t.name}//${t.localadmin}`===`${o.name}//${o.localadmin}//${i.name}//${i.localadmin}`}if("FutureRoute"===e.type||"FutureRoute"===t.type)return!1;if(Q.includes(u.layer)&&Q.includes(n.layer)){return(u.gid||K(u.labelId))===(n.gid||K(n.labelId))}if(u.gtfsId&&n.gtfsId)return u.gtfsId===n.gtfsId;if(Z.includes(u.layer)&&Z.includes(n.layer)&&u.gid&&n.gid)return u.gid===n.gid;const o=e&&e.geometry?e.geometry.coordinates:void 0,i=t&&t.geometry?t.geometry.coordinates:void 0;return!!(o&&i&&Math.abs(o[0]-i[0])<1e-6&&Math.abs(o[1]-i[1])<1e-6&&(Y(u.name,n.name)||Y(u.label,n.label)||Y(u.address,n.address)||Y(u.address,n.label)||Y(u.label,n.address)))}const J=e=>M.default(e)?e.toLowerCase():"",ee=e=>e.split(/((?:[A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C8A\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CD\uA7D0\uA7D1\uA7D3\uA7D5-\uA7DC\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDDC0-\uDDF3\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD23\uDD4A-\uDD65\uDD6F-\uDD85\uDE80-\uDEA9\uDEB0\uDEB1\uDEC2-\uDEC4\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDF70-\uDF81\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE3F\uDE40\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61\uDF80-\uDF89\uDF8B\uDF8E\uDF90-\uDFB5\uDFB7\uDFD1\uDFD3]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCDF\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8\uDFC0-\uDFE0]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDF02\uDF04-\uDF10\uDF12-\uDF33\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD80E\uD80F\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883\uD885-\uD887][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2F\uDC41-\uDC46\uDC60-\uDFFF]|\uD810[\uDC00-\uDFFA]|\uD811[\uDC00-\uDE46]|\uD818[\uDD00-\uDD1D]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE70-\uDEBE\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDD40-\uDD6C\uDE40-\uDE7F\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDCFF-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD32\uDD50-\uDD52\uDD55\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD837[\uDF00-\uDF1E\uDF25-\uDF2A]|\uD838[\uDC30-\uDC6D\uDD00-\uDD2C\uDD37-\uDD3D\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB]|\uD839[\uDCD0-\uDCEB\uDDD0-\uDDED\uDDF0\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD4B]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF39\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0\uDFF0-\uDFFF]|\uD87B[\uDC00-\uDE5D]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A\uDF50-\uDFFF]|\uD888[\uDC00-\uDFAF])+)/),te=e=>/^[0-9]+(?:[A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C8A\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CD\uA7D0\uA7D1\uA7D3\uA7D5-\uA7DC\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDDC0-\uDDF3\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD23\uDD4A-\uDD65\uDD6F-\uDD85\uDE80-\uDEA9\uDEB0\uDEB1\uDEC2-\uDEC4\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDF70-\uDF81\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE3F\uDE40\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61\uDF80-\uDF89\uDF8B\uDF8E\uDF90-\uDFB5\uDFB7\uDFD1\uDFD3]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCDF\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8\uDFC0-\uDFE0]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDF02\uDF04-\uDF10\uDF12-\uDF33\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD80E\uD80F\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883\uD885-\uD887][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2F\uDC41-\uDC46\uDC60-\uDFFF]|\uD810[\uDC00-\uDFFA]|\uD811[\uDC00-\uDE46]|\uD818[\uDD00-\uDD1D]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE70-\uDEBE\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDD40-\uDD6C\uDE40-\uDE7F\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDCFF-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD32\uDD50-\uDD52\uDD55\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD837[\uDF00-\uDF1E\uDF25-\uDF2A]|\uD838[\uDC30-\uDC6D\uDD00-\uDD2C\uDD37-\uDD3D\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB]|\uD839[\uDCD0-\uDCEB\uDDD0-\uDDED\uDDF0\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD4B]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF39\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0\uDFF0-\uDFFF]|\uD87B[\uDC00-\uDE5D]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A\uDF50-\uDFFF]|\uD888[\uDC00-\uDFAF])+$/.test(e),ue="back",ne="currentPosition",oe="favouriteStop",ie="favouriteStation",se="favouritePlace",re="favouriteRoute",ae="favouriteVehicleRentalStation",le="futureRoute",ce="station",De="selectFromMap",de="ownLocations",pe="stop",he="bikestation",ge="carpark",fe="bikepark",Fe=({layer:e,type:t})=>"stop"===e||"favouriteStop"===e||"stop"===t||"favouriteStop"===t,be=(e,t)=>{switch(e){case ne:return 1;case ue:return.9;case De:return.8;case de:return.79;case ie:case se:case oe:case re:case ae:return.45;case le:return.44;case ce:return M.default(t)&&0===t.indexOf("gtfs")?.43:.42;case ge:case fe:case he:return.38;case pe:return.36;default:return.41}},Ce=(e,t,u="")=>{if(!Array.isArray(t)||!t.length)return t;const n=t=>M.default(t)&&e&&e.test(t),o=J(u),i=n(o),s=j.default(t.filter((e=>e)),[e=>i&&n(J(e.properties.shortName))&&0===J(e.properties.shortName).indexOf(o)?1:0,e=>{const{confidence:t,layer:u,source:n}=e.properties;if(0===o.length)return be(u,n);if(!t)return be(u,n)+((e,t)=>M.default(e)&&0!==e.length?["name","label","address","shortName"].map((e=>({name:e,value:t[e]}))).filter((e=>M.default(e.value)&&e.value.length>0)).map((t=>{let u=J(t.value);return 0===u.indexOf(e)?("shortName"===t.name&&te(u)&&([u]=ee(u)),.5+e.length/u.length):.5*e.length/(e.length+1)})).reduce(((e,t)=>t>e?t:e),0):0)(o,e.properties);switch(u){case ce:return t+(0===n.indexOf("gtfs")?.02:.01);case pe:case ge:case fe:return t-.05;case he:return t-.04;default:return t}},e=>{if(e.properties.shortName)return te(e.properties.shortName)?ee(e.properties.shortName)[0]:e.properties.shortName},e=>{if(e.properties.shortName)return te(e.properties.shortName)?ee(e.properties.shortName)[1]:e.properties.shortName},"properties.longName"],["desc","desc","asc","asc","asc"]);return R.default(s,X)},Ae=(e,t)=>null!=t&&-1!==e.lastIndexOf(t)?e.substring(0,e.lastIndexOf(t)-1):e;function me(e,t,u){if("string"==typeof t&&t.length>0){const n=t.toLowerCase().trim(),o=n.includes(" ")||n.includes(",");return e.filter((e=>{let t=[];u.forEach((u=>{let n=P.default(e,u);o||"properties.label"!==u&&"address"!==u||!n||(n=n.split(","),n.length>2?n.splice(n.length-2,2):n.length>1&&n.splice(n.length-1,1),n=n.join(",")),n&&(t=o?t.concat(n.toLowerCase()):t.concat(n.toLowerCase().replace(/,/g," ").split(" ")))}));for(let e=0;e<t.length;e++)if(0===t[e].indexOf(n))return!0;return!1}))}return e}function Ee(e,t){return e?Object.keys(e).map((u=>{const n=t||u,o=e[u];return"object"==typeof o?Ee(o,n):`${encodeURIComponent(n)}=${encodeURIComponent(o)}`})).join("&"):""}const ye=require("axios").default;function ve(e,t){return ye.get(encodeURI(e)+(t?(-1===e.search(/\?/)?"?":"&")+Ee(t):""),{timeout:1e4,method:"GET",headers:{Accept:"application/json"}}).then((e=>e.data))}function _e(e,t){var u=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),u.push.apply(u,n)}return u}function Be(e){for(var t=1;t<arguments.length;t++){var u=null!=arguments[t]?arguments[t]:{};t%2?_e(Object(u),!0).forEach((function(t){W(e,t,u[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(u)):_e(Object(u)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(u,t))}))}return e}function Se(e,t,u,n,o,i,s,r){const a=e?e.trim():null;if(null==a||a.length<1||s&&!s.test(a))return Promise.resolve([]);const l=i||"https://api.digitransit.fi/geocoding/v1/search";let c=Be(Be(Be({text:a},t),n),{},{lang:u});if(o&&(c=Be(Be({},c),{},{sources:o})),r){const e=r.toString();c=Be(Be({},c),{},{layers:e})}return ve(l,c).then((e=>e.features))}function ke(e,t){var u=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),u.push.apply(u,n)}return u}function we(e){for(var t=1;t<arguments.length;t++){var u=null!=arguments[t]?arguments[t]:{};t%2?ke(Object(u),!0).forEach((function(t){W(e,t,u[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(u)):ke(Object(u)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(u,t))}))}return e}function xe(e,t){if(!e||e.length<1)return Promise.resolve([]);let u="";const n=e.map((e=>{const t="stop"===e.type?"stop":"station";let n=`gtfs${e.gtfsId.split(":")[0].toLowerCase()}:${t}:GTFS:${e.gtfsId}`;return e.code&&(n+=`#${e.code}`),u+=`${n},`,we(we({},e),{},{gid:n})})).reduce((function(e,t){return e[t.gid]=t,e}),{});return ve(t,{ids:u.slice(0,-1)}).then((e=>e.features.map((e=>({type:"FavouriteStop",properties:{addendum:e.properties.addendum,gid:n[e.properties.gid].gid,code:n[e.properties.gid].code,gtfsId:n[e.properties.gid].gtfsId,lastUpdated:n[e.properties.gid].lastUpdated,favouriteId:n[e.properties.gid].favouriteId,address:e.properties.label,layer:Fe(e.properties)?"favouriteStop":"favouriteStation"},geometry:e.geometry})))))}function Oe(e,t,u){let n=me(e,t,["properties.name","properties.label","properties.address","properties.shortName","properties.longName"]);return u&&(n=n.filter((e=>!u.includes(e.properties.layer)))),Promise.resolve(O.default(n,10).map((e=>{const t=we(we({},e),{},{type:"OldSearch",timetableClicked:!1,arrowClicked:!1});return delete t.properties.confidence,t})))}const Me=["route-TRAM","route-BUS","route-RAIL","route-FERRY","route-SUBWAY","route-AIRPLANE","route-FUNICULAR"],je=["venue","address","street"],Re=["carpark","bikepark"],Pe=["stop","station"];const Le=w.default((function(e,t,u,n,o,i,{input:s},r,a,l){const{getPositions:c,getFavouriteLocations:D,getOldSearches:d,getFavouriteStops:p,parkingAreaSources:h,getLanguage:g,getStopAndStationsQuery:f,getFavouriteVehicleRentalStationsQuery:F,getFavouriteVehicleRentalStations:b,getFavouriteRoutesQuery:C,getFavouriteRoutes:A,getRoutesQuery:m,context:E,isPeliasLocationAware:y,minimalRegexp:v,lineRegexp:_,URL_PELIAS:B,URL_PELIAS_PLACE:S,feedIDs:k,geocodingSearchParams:w,geocodingSources:M,getFutureRoutes:j,cityBikeNetworks:R}=n,P=!e||0===e.length,L=!t||0===t.length,I=c(E),N=[],z={type:"all",term:s,results:[]},T=g(E),q=y&&null!=l&&l.lat&&null!=l&&l.lon?{"focus.point.lat":l.lat.toFixed(3),"focus.point.lon":l.lon.toFixed(3)}:{},V=u?u.split("-")[1]:void 0;if(e.includes("CurrentPosition")&&"geolocation-not-supported"!==I.status&&N.push(function(e,t){return"string"!=typeof e||0===e.length?Promise.resolve([{type:"CurrentLocation",address:t.address,lat:t.lat,lon:t.lon,properties:{labelId:"use-own-position",layer:"currentPosition",address:t.address,lat:t.lat,lon:t.lon},geometry:{type:"Point",coordinates:[t.lon,t.lat]}}]):Promise.resolve([])}(s,I)),(P||e.includes("MapPosition"))&&N.push(function(e){return"string"!=typeof e||0===e.length?Promise.resolve([{type:"SelectFromMap",address:"SelectFromMap",lat:null,lon:null,properties:{labelId:"select-from-map",layer:"selectFromMap",address:"SelectFromMap",lat:null,lon:null},geometry:{type:"Point",coordinates:[]}}]):Promise.resolve([])}(s)),e.includes("FutureRoutes")){const e=j(E);N.push(O.default(e,3))}if(e.includes("SelectFromOwnLocations")&&function(e){const t=e.getFavouriteLocations(e.context);if((null==t?void 0:t.length)>0)return!0;const u=e.getFavouriteVehicleRentalStations(e.context);if((null==u?void 0:u.length)>0)return!0;const n=e.getFavouriteStops(e.context);return(null==n?void 0:n.length)>0}(n)&&N.push(function(e){return"string"!=typeof e||0===e.length?Promise.resolve([{type:"SelectFromOwnLocations",address:"SelectFromOwnLocations",lat:null,lon:null,properties:{labelId:"select-from-own-locations",layer:"ownLocations",address:"selectFromOwnLocations",lat:null,lon:null},geometry:{type:"Point",coordinates:[]}}]):Promise.resolve([])}(s)),P||e.includes("Locations")){const u=w;if(t.includes("Favourite")){const e=D(E);N.push(function(e,t){return Promise.resolve(me(e,t,["address","name"]).map((e=>({type:"FavouritePlace",properties:we(we({},e),{},{label:e.name,layer:"favouritePlace"}),geometry:{type:"Point",coordinates:[e.lon,e.lat]}}))))}(e,s)),t.includes("Back")&&N.push(Promise.resolve([{type:"back",address:"back",lat:null,lon:null,properties:{labelId:"back",layer:"back",address:"back",lat:null,lon:null},geometry:{type:"Point",coordinates:[]}}]))}if(L||t.includes("Datasource")){const t=["venue","address","street"];e.includes("Stations")&&t.push("station"),N.push(Se(s,u,T,q,M.join(","),B,v,t))}if(L||t.includes("History")){const e=d(E,"endpoint"),t=["bikestation"];t.push(...Pe),t.push(...Me),t.push(...Re),N.push(Oe(e,s,t))}}if(P||e.includes("ParkingAreas")){if(L||t.includes("Datasource")){const e=w;i&&10!==i&&(e.size=i);const t=["carpark","bikepark"],u=h?h.join(","):null;N.push(Se(s,e,T,q,u,B,v,t).then((e=>o?o(e,V):e)))}if(L||t.includes("History")){const e=d(E),t=["bikestation"];t.push(...Pe),t.push(...Me),t.push(...je),N.push(Oe(e,s,t))}}const H=e.includes("Stops"),$=e.includes("Stations");if(P||H||$){if(t.includes("Favourite")){const e=p(E);let t;t=e.every((e=>"station"===e.type))?xe(e,S).then((e=>o?o(e,V):e)):f(e).then((e=>xe(e,S))).then((e=>o?o(e,V):e)),N.push(function(e,t,u,n){return e.then((e=>me(e.filter((e=>"stop"===e.type?u:n)),t,["properties.name","properties.name","properties.address"])))}(t,s,H,$))}if(L||t.includes("Datasource")){const t=[];H&&t.push("stop"),$&&t.push("station");const u=i&&10!==i?{size:i}:{};w&&w["boundary.country"]&&(u["boundary.country"]=w["boundary.country"]),(P||e.includes("Locations"))&&(u.dedupestops=1);const n=k.map((e=>`gtfs${e}`)).join(",");N.push(Se(s,u,T,q,n,B,v,t).then((e=>o?o(e,V):e)))}if(L||t.includes("History")){const e=d(E).filter((e=>!e.properties.gid||e.properties.gid.includes("GTFS:"))),t=["bikestation"];t.push(...Me),t.push(...je),t.push(...Re),H||t.push("stop"),$||t.push("station"),u?N.push(Oe(e,s,t).then((e=>o?o(e,V):e))):N.push(Oe(e,s,t))}}if(P||e.includes("Routes")){if(t.includes("Favourite")){const e=A(E);N.push(C(e,s,V,a).then((e=>o?o(e,V,"Routes"):e)))}if(N.push(m(s,k,u,a).then((e=>o?o(e,V,"Routes"):e))),L||t.includes("History")){const e=d(E),t=["bikestation"];u&&t.push(...Me.filter((e=>!(e===u)))),t.push(...Pe),t.push(...je),t.push(...Re),N.push(Oe(e,s,t).then((e=>o?o(e,V,"Routes"):e)))}}if(P||e.includes("VehicleRentalStations")){if(t.includes("Favourite")){const e=b(E);N.push(F(e,s))}if(L||t.includes("Datasource")){const e=["bikestation"],t=i&&10!==i?{size:i}:{};N.push(Se(s,t,T,q,R.join(","),B,v,e).then((e=>o?o(e,V,"VehicleRentalStations"):e)))}if(L||t.includes("History")){const e=d(E),t=[...Pe];t.push(...Me),t.push(...je),t.push(...Re),N.push(Oe(e,s,t))}}Promise.all(N).then(x.default).then((e=>{z.results=e})).catch((e=>{z.error=e})).then((()=>{r(we(we({},z),{},{results:Ce(_,z.results,s)}))}))}),300,{leading:!0}),Ie=e=>e.localadmin||e.localadmin||e.address&&e.address.lastIndexOf(",")<e.address.length-2&&e.address.substring(e.address.lastIndexOf(",")+2)||"",Ne=({id:e,code:t})=>t||(void 0!==e&&void 0!==e.indexOf&&-1!==e.indexOf("#")?e.substring(e.indexOf("#")+1):void 0),ze=N.default(((e,t=!1)=>{switch(e.layer){case"currentPosition":return[e.labelId,e.address];case"selectFromMap":case"ownLocations":case"back":return[e.labelId];case"favouritePlace":return u=e.name,n=e.address,[u||n&&n.split(",")[0],"string"==typeof n?n.replace(new RegExp(`${z.default(u)}([ ,]|$)+`),""):""];case"favouriteVehicleRentalStation":case"bikestation":return[e.name];case"favouriteRoute":case"route-BUS":case"route-TRAM":case"route-RAIL":case"route-SUBWAY":case"route-FERRY":case"route-FUNICULAR":case"route-AIRPLANE":return!t&&e.shortName?[e.gtfsId,e.mode.toLowerCase(),e.longName]:[e.shortName,e.longName,e.agency?e.agency.name:void 0];case"venue":case"address":case"street":return[e.name,e.label.replace(new RegExp(`${z.default(e.name)}(,)?( )?`),"")];case"favouriteStop":case"stop":return t?[e.name||e.label||e.address&&e.address.split(",")[0],Ie(e)]:[e.name,e.id,Ne(e),Ie(e)];default:return[e.name||e.label||e.address&&e.address.split(",")[0],Ie(e)]}var u,n}),((e,t)=>{const u=T.default(e);return u.plain=t,u}));const Te=m.createInstance({fallbackLng:"fi",resources:{de:{translation:{address:"Adresse","address-place-or-business":"Adress, Ort or Geschäft","add-via-button-label":"Füge Zwischenziel hinzu","add-via-duration-button-label":"Set stop duration at via point {{index}}","add-via-duration-button-label-close":"Close stop duration selector at via point {{index}}","add-via-duration-button-label-open":"Open stop duration selector at via point {{index}}",airplane:"Flug",arrival:"Ankunft",back:"Zurück",bikerentalstation:"Leihrad-Station",bus:"Bus",cancel:"Abbrechen","clear-button-label":"Löschen","clear-search-history":"Suchhistorie löschen",currentposition:"Aktuelle Position",delete:"Löschen","delete-old-searches-header":"Wollen Sie die Such-Historie löschen?",departure:"Abfahrt",destination:"Ziel","give-origin":"Start eingeben.","give-destination":"Ziel eingeben.",favourite:"Favoriten",ferry:"Fähre","future-route":"Zukünftige Verbindung",origin:"Start","origin-stop-near-you":"Start",ownlocations:"Eigene Favoriten",loading:"Laden...","minute-short":"min",rail:"Zug",search:"Suche","search-address-or-place":"Suche anhand von Adresse oder Ortsangabe","search-button-label":"Suche","search-destination":"Suche Zielort, Linie or Haltestelle","search-destination-index":"Zielort eingeben","search-destination-results-but-no-search":"Ergebnisse in “Zielort”-Reiter anzeigen","search-no-results":"Kein Ort gefunden.","search-origin":"Suche Startort, Linie oder Haltestelle","search-origin-index":"Startort eingeben","search-position":"Standort ermitteln","search-autosuggest-label":"Venue, place and stopsearch.","search-autosuggest-label-instructions-desktop":"Navigate list with arrow keys and select with enter key.","search-autosuggest-label-instructions-mobile":"Enter the location and navigate in the list by swiping.","search-autosuggest-label-move-to-destination":"After selecting the starting location you are automatically moved to the destination field.","search-autosuggest-len":"There is {{count}} suggestion available","search-autosuggest-len_plural":"There are {{count}} suggestions available","search-current-suggestion":"Aktuelle Auswahl: {{selection}}",street:"Straße",subway:"U-Bahn",station:"Station",stop:"Haltestelle","stop-near-you":"Suche Haltestellen und Linien in der Nähe","stop-near-you-bus":"Suche Buslinien or Haltestellen","stop-near-you-citybike":"Suche Leihrad-Stationen","stop-near-you-rail":"Suche Zugverbindungen oder Bahnhöfe","stop-near-you-subway":"Suche U-Bahn-Linien oder Haltestellen","stop-near-you-tram":"Suche Stadtbahn-Haltestellen-Suche","today-at":"Heute um","tomorrow-at":"Morgen um",tram:"Straßenbahn","use-own-position":"Benutze aktuellen Standort","select-from-map":"Wähle Position anhand Karte","select-from-own-locations":"Aus eigenen Favoriten auswählen",venue:"Venue","via-point":"Zwischenziel",where:"Wohin?",place:"Ort"}},en:{translation:{address:"Address","address-place-or-business":"Address, place or business","add-via-button-label":"Add via point","add-via-duration-button-label":"Set stop duration at via point {{index}}","add-via-duration-button-label-close":"Close stop duration selector at via point {{index}}","add-via-duration-button-label-open":"Open stop duration selector at via point {{index}}",airplane:"Flight",arrival:"Arrival",back:"Back",bikepark:"Park & Ride for bikes",bikerentalstation:"Bike station",bus:"bus",cancel:"Cancel",carpark:"Park & Ride","clear-button-label":"Clear","clear-search-history":"Clear search history",currentposition:"Current position",delete:"Delete","delete-old-searches-header":"Do you want to clear the search history?",departure:"Departure",destination:"Destination","give-origin":"Enter your origin.","give-destination":"Enter your destination",favourite:"Favourite",ferry:"Ferry","future-route":"Future route",origin:"Start","origin-stop-near-you":"Start",ownlocations:"Own locations",loading:"Loading...","minute-short":"m",platform:"Platform",rail:"Train",required:"required field",search:"Search","search-address-or-place":"Search by address or place name","search-button-label":"Search","search-destination":"Search destination, route or stop","search-destination-index":"Enter destination","search-destination-results-but-no-search":"View results in the adjacent “Destination” tab","search-no-results":"No location","search-origin":"Search origin, route or stop","search-origin-index":"Enter origin","search-position":"Detect location","search-autosuggest-label":"Venue, place and stopsearch.","search-autosuggest-label-instructions-desktop":"Navigate list with arrow keys and select with enter key.","search-autosuggest-label-instructions-mobile":"Enter the location and navigate in the list by swiping.","search-autosuggest-label-move-to-destination":"After selecting the starting location you are automatically moved to the destination field.","search-autosuggest-len":"There is {{count}} suggestion available","search-autosuggest-len_plural":"There are {{count}} suggestions available","search-current-suggestion":"Current selection: {{selection}}",street:"Street",subway:"Metro",station:"Station",stop:"Stop","stop-near-you":"Search stops and routes","stop-near-you-airplane":"Search flights or airports","stop-near-you-bus":"Search bus routes or stops","stop-near-you-citybike":"Search city bike stations","stop-near-you-rail":"Search train routes or stations","stop-near-you-subway":"Search metro routes or stations ","stop-near-you-tram":"Search tram routes or stops","stop-route-station":"Bus and stop search","today-at":"today at","tomorrow-at":"tomorrow at",tram:"Tram",track:"Track","use-own-position":"Use current location","select-from-map":"Select position from map","select-from-own-locations":"Select from own locations",venue:"Venue","via-point":"Via point",where:"Where to?",place:"Location"}},fi:{translation:{address:"Osoite","address-place-or-business":"Osoite, paikka tai yritys","add-via-button-label":"Lisää välipiste","add-via-duration-button-label":"Aseta välipisteelle {{index}} pysähdyksen kesto","add-via-duration-button-label-close":"Avaa välipisteen {{index}} pysähdyksen kesto valitsin","add-via-duration-button-label-open":"Sulje välipisteen {{index}} pysähdyksen kesto valitsin",airplane:"Lentokone",arrival:"Perillä",back:"Takaisin",vehiclerentalstation:"Pyöräasema",bikepark:"Liityntäpysäköinti",bus:"bussi",cancel:"Peruuta",carpark:"Liityntäpysäköinti","clear-button-label":"Tyhjennä","clear-search-history":"Tyhjennä hakuhistoria",currentposition:"Tämänhetkinen sijainti",delete:"Poista","delete-old-searches-header":"Haluatko tyhjentää hakuhistorian?",departure:"Lähtöaika",destination:"Määränpää",favourite:"Suosikki",ferry:"Lautta","future-route":"Tuleva reitti","give-origin":"Lähtöpaikka","give-destination":"Määränpää",origin:"Lähtöpaikka","origin-stop-near-you":"Lähtöpaikka",ownlocations:"Omat paikat",loading:"Ladataan...","minute-short":"min",platform:"Laituri",rail:"Juna",required:"pakollinen kenttä",search:"Etsi","search-address-or-place":"Hae osoitteella tai paikan nimellä","search-button-label":"Hae","search-destination":"Hae määränpäätä, linjaa tai pysäkkiä","search-destination-index":"Syötä määränpää","search-destination-results-but-no-search":"Katso tulokset viereiseltä Määränpää-välilehdeltä","search-no-results":"Ei tuloksia","search-origin":"Hae lähtöpaikkaa, linjaa tai pysäkkiä","search-origin-index":"Syötä lähtöpaikka","search-autosuggest-label":"Paikka, linja ja pysäkkihaku.","search-autosuggest-label-instructions-desktop":"Navigoi listassa nuolinäppäimillä ja valitse enterillä.","search-autosuggest-label-instructions-mobile":"Syötä sijainti ja navigoi listassa pyyhkäisemällä.","search-autosuggest-label-move-to-destination":"Valittuasi lähtöpaikan siirrytään suoraan määränpää-kenttään.","search-autosuggest-len":" Löydettiin {{count}} ehdotus","search-autosuggest-len_plural":" Löydettiin {{count}} ehdotusta","search-current-suggestion":"Tämänhetkinen valinta: {{selection}}","search-position":"Paikanna",street:"Katu",subway:"Metro",station:"Asema",stop:"Pysäkki","stop-near-you":"Linja, pysäkki tai asema","stop-near-you-airplane":"Hae lentoja tai lentoasemaa","stop-near-you-bus":"Hae bussilinjaa tai pysäkkiä","stop-near-you-citybike":"Hae kaupunkipyöräasemaa","stop-near-you-rail":"Hae lähijunaa tai asemaa","stop-near-you-subway":"Hae metrolinjaa tai asemaa","stop-near-you-tram":"Hae raitiolinjaa tai pysäkkiä","stop-route-station":"Linja- ja pysäkkihaku","today-at":"tänään klo","tomorrow-at":"huomenna klo",tram:"Raitiovaunu",track:"Raide","use-own-position":"Käytä nykyistä sijaintia","select-from-map":"Valitse sijainti kartalta","select-from-own-locations":"Valitse omista paikoista",venue:"Paikka","via-point":"Välipiste",where:"Minne mennään?",place:"Paikka"}},pl:{translation:{address:"Adres","address-place-or-business":"Adres, miejsce lub firma","add-via-button-label":"Dodaj punkt pośredni","add-via-duration-button-label":"Wybierz czas postoju dla punktu {{index}}","add-via-duration-button-label-close":"Zamknij wybornik czasu postoju w punkcie {{index}}","add-via-duration-button-label-open":"Otwórz wybornik czasu postoju w punkcie {{index}}",airplane:"Lot",arrival:"Przyjazd",back:"Wróć",bikepark:"Parkuj i Jedź dla rowerów",bikerentalstation:"Stacja rowerowa",bus:"autobus",cancel:"Anuluj",carpark:"Parkuj i Jedź","clear-button-label":"Wyczyść","clear-search-history":"Wyczyść historię wyszukiwania",currentposition:"Obecne położenie",delete:"Usuń","delete-old-searches-header":"Czy na pewno chcesz wyczyścić historię wyszukiwania?",departure:"Odjazd",destination:"Cel","give-origin":"Wprowadź swój punkt początkowy.","give-destination":"Wprowadź swój cel",favourite:"Ulubione",ferry:"Prom","future-route":"Przyszła trasa",origin:"Początek","origin-stop-near-you":"Początek",ownlocations:"Własne miejsca",loading:"Ładowanie…","minute-short":"min.",platform:"Peron",rail:"Pociąg",required:"wymagane pole",search:"Szukaj","search-address-or-place":"Szukaj po adresie lub nazwie miejsca","search-button-label":"Szukaj","search-destination":"Szukaj celu, trasy lub przystanku","search-destination-index":"Wprowadź punkt docelowy","search-destination-results-but-no-search":"Wyświetl wyniki w sąsiedniej karcie „Cel”","search-no-results":"Brak lokalizacji","search-origin":"Wyszukaj początek, koniec lub punkt pośredni","search-origin-index":"Wprowadź punkt początkowy","search-position":"Wykryj lokalizację","search-autosuggest-label":"Miejsce, lokalizacja i przystanek.","search-autosuggest-label-instructions-desktop":"Nawiguj po liście używając strzałek i wybieraj klawiszem Enter.","search-autosuggest-label-instructions-mobile":"Wprowadź lokalizację i nawiguj po liście gestami przesuwania.","search-autosuggest-label-move-to-destination":"Po wybraniu lokalizacji początkowej, automatycznie przejdziesz do pola miejsca docelowego.","search-autosuggest-len":"Dostępna jest {{count}} propozycja","search-autosuggest-len_few":"Dostępne są {{count}} propozycje","search-autosuggest-len_other":"Dostępne jest {{count}} propozycji","search-current-suggestion":"Obecny wybór: {{selection}}",street:"Ulica",subway:"Metro",station:"Stacja",stop:"Przystanek","stop-near-you":"Szukaj przystanków i tras","stop-near-you-airplane":"Szukaj lotów i lotnisk","stop-near-you-bus":"Szukaj tras autobusowych i przystanków","stop-near-you-citybike":"Szukaj stacji rowerów miejskich","stop-near-you-rail":"Szukaj tras kolejowych i przystanków","stop-near-you-subway":"Szukaj tras metra i przystanków ","stop-near-you-tram":"Szukaj tras tramwajowych i przystanków","stop-route-station":"Wyszukiwanie autobusów i przystanków","today-at":"dziś o","tomorrow-at":"jutro o",tram:"Tramwaj",track:"Tor","use-own-position":"Użyj obecnej lokalizacji","select-from-map":"Wybierz miejsce na mapie","select-from-own-locations":"Wybierz z własnych miejsc",venue:"Miejsce","via-point":"Przez punkt",where:"Dokąd?",place:"Miejsce"}},sv:{translation:{address:"Adress","address-place-or-business":"Adress, plats eller företag","add-via-button-label":"Lägg till viapunkt","add-via-duration-button-label":"Ställ in varaktighet för viapunkten {{index}}","add-via-duration-button-label-close":"Stäng väljaren för varaktighet vid via-punkten {{index}}","add-via-duration-button-label-open":"Öppna väljaren för varaktighet vid via-punkten {{index}}",airplane:"Flyg",arrival:"Anländer",back:"Tillbaka",bikerentalstation:"Stadscykelstation",bikepark:"Anslutningsparkering för cyklar",bus:"Bussi",cancel:"Avbryt",carpark:"Infartsparkering","clear-button-label":"Töm","clear-search-history":"Töm sökhistoriken",currentposition:"Nuvarande position",delete:"Ta bort","delete-old-searches-header":"Vill du tömma sökhistoriken?",departure:"Avgångstid",destination:"Destination",favourite:"Favorit",ferry:"Färja","future-route":"Framtida rutt","give-destination":"Skriv in din destination","give-origin":"Skriv in din avfärdsplats",origin:"Avfärdsplats","origin-stop-near-you":"Avfärdsplats",ownlocations:"Egna platser",loading:"Laddar...","minute-short":"min",platform:"Plattform",rail:"Tåg",required:"obligatoriskt fält",search:"Sök","search-address-or-place":"Sök med adressen eller platsens namn","search-button-label":"Sök","search-destination":"Sök destination, linje eller hållplats","search-destination-index":"Skriv destination","search-destination-results-but-no-search":"Se resultaten under fliken Destination","search-no-results":"Inga sökresultat","search-origin":"Sök avfärdsplats, linje eller hållplats","search-origin-index":"Skriv avfärdsplats","search-position":"Sök position","search-autosuggest-label":"Plats, linje och hållplatssökning.","search-autosuggest-label-instructions-desktop":"Navigera listan med piltangenterna och välj med Enter-tangeten.","search-autosuggest-label-instructions-mobile":"Ange platsen och navigera i listan genom att svepa.","search-autosuggest-label-move-to-destination":"Efter att du valt avgångsplatsen tas du direkt till Destination-fältet.","search-autosuggest-len":"Hittade {{count}} förslag","search-current-suggestion":"Nuvarande val: {{selection}}",street:"Gata",subway:"Metro",station:"Station",stop:"Hållplats","stop-near-you":"Sök hållplatser eller linjer","stop-near-you-airplane":"Sök flyg eller flygplatser","stop-near-you-bus":"Sök busslinjer eller hållplatser","stop-near-you-citybike":"Sök stadscykelstationer","stop-near-you-rail":"Sök närtåger eller stationer","stop-near-you-subway":"Sök metrolinjer eller stationer","stop-near-you-tram":"Sök spårvagnlinjer eller hållplatser","stop-route-station":"Buss och stopp sökningen","today-at":"i dag kl","tomorrow-at":"i morgon",tram:"Spårvagn",track:"Spår","use-own-position":"Använd min position","select-from-map":"Välj position från kartan","select-from-own-locations":"Välj från egna platser",venue:"Mötesplats","via-point":"Via punkt",where:"Vart vill du åka?",place:"Plats"}}},defaultNS:"translation",react:{useSuspense:!0}});function qe(e,t){void 0===t&&(t={});var u=t.insertAt;if(e&&"undefined"!=typeof document){var n=document.head||document.getElementsByTagName("head")[0],o=document.createElement("style");o.type="text/css","top"===u&&n.firstChild?n.insertBefore(o,n.firstChild):n.appendChild(o),o.styleSheet?o.styleSheet.cssText=e:o.appendChild(document.createTextNode(e))}}Te.init();var Ve={container:"styles_container__KXfyb",input:"styles_input__XmNBn",favourite:"styles_favourite__sjGcX",thin:"styles_thin__y3lnY",hasValue:"styles_hasValue__tzCTr",suggestionsContainerOpen:"styles_suggestionsContainerOpen__4AZDX",suggestionsContainer:"styles_suggestionsContainer__3dsEd",suggestionsList:"styles_suggestionsList__esTtR",suggestion:"styles_suggestion__7itfO",suggestionHighlighted:"styles_suggestionHighlighted__XUxvC","autosuggest-input-container":"styles_autosuggest-input-container__ZkKGO",origin:"styles_origin__ivlHi",destination:"styles_destination__y39VH","stop-route-station":"styles_stop-route-station__FneXd","autosuggest-input-icon":"styles_autosuggest-input-icon__uhYGQ","origin-stop-near-you":"styles_origin-stop-near-you__Ekwp-","clear-input":"styles_clear-input__Vx7B4","sr-only":"styles_sr-only__ZOrQT"};qe("input[type='text'] {\n margin: 0; }\n\n.styles_container__KXfyb {\n display: flex;\n width: 100%; }\n .styles_container__KXfyb .styles_input__XmNBn {\n font-size: 16px;\n font-family: 'Gotham Rounded A', 'Gotham Rounded B', Roboto, Arial, Georgia, serif;\n display: flex;\n width: 100%;\n height: 44px;\n border-radius: 5px;\n border: solid 1px #888;\n background-color: #fff;\n padding-left: 50px;\n padding-right: 44px;\n line-height: 1.2;\n letter-spacing: -0.5px;\n color: #333;\n box-sizing: border-box;\n -webkit-appearance: none;\n appearance: none; }\n .styles_container__KXfyb .styles_input__XmNBn.styles_favourite__sjGcX {\n padding-left: 47px; }\n .styles_container__KXfyb .styles_input__XmNBn.styles_thin__y3lnY {\n height: 34px; }\n .styles_container__KXfyb .styles_input__XmNBn:focus {\n background: #fff;\n outline: none;\n border: solid 1px var(--color);\n box-shadow: 0 0 2px 1px var(--hover-color); }\n @media screen and (min-width: 768px) {\n .styles_container__KXfyb .styles_input__XmNBn {\n font-size: 15px;\n height: 44px;\n padding-left: 49px; } }\n .styles_container__KXfyb .styles_input__XmNBn::placeholder {\n color: #666;\n opacity: 1;\n font-size: 15px; }\n\n.styles_hasValue__tzCTr {\n color: #333; }\n\n.styles_suggestionsContainerOpen__4AZDX {\n width: 100%;\n max-height: 44vh;\n border-radius: 5px;\n box-shadow: 0 2px 0 0 rgba(0, 0, 0, 0.06);\n border: solid 1px rgba(0, 0, 0, 0.1);\n overflow-x: hidden;\n overflow-y: scroll;\n position: absolute;\n background-color: white;\n top: calc(3 * 0.875rem + 9px);\n z-index: 20; }\n\n.styles_suggestionsContainer__3dsEd {\n background-color: white;\n z-index: 20; }\n .styles_suggestionsContainer__3dsEd .styles_suggestionsList__esTtR {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n background: white; }\n .styles_suggestionsContainer__3dsEd .styles_suggestionsList__esTtR li:hover {\n background: #f2f5f7; }\n\n.styles_suggestion__7itfO {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n cursor: pointer;\n list-style: none;\n display: block;\n overflow-x: hidden;\n overflow-y: hidden;\n white-space: nowrap; }\n\n.styles_suggestionHighlighted__XUxvC {\n background-color: #f2f5f7; }\n\n.styles_autosuggest-input-container__ZkKGO {\n position: relative;\n width: 100%; }\n .styles_autosuggest-input-container__ZkKGO.styles_origin__ivlHi {\n z-index: 16; }\n .styles_autosuggest-input-container__ZkKGO.styles_destination__y39VH {\n z-index: 10; }\n .styles_autosuggest-input-container__ZkKGO.styles_stop-route-station__FneXd {\n z-index: 9; }\n\n.styles_autosuggest-input-icon__uhYGQ {\n display: flex;\n position: absolute;\n align-items: center;\n width: 16px;\n height: 100%;\n margin-top: 0;\n margin-left: 19px; }\n .styles_autosuggest-input-icon__uhYGQ svg {\n width: 16px;\n height: 24px; }\n .styles_autosuggest-input-icon__uhYGQ.styles_origin__ivlHi svg {\n fill: #4ea700;\n width: 16px;\n height: 24px; }\n .styles_autosuggest-input-icon__uhYGQ.styles_destination__y39VH svg {\n fill: #ec5188;\n width: 16px;\n height: 24px; }\n .styles_autosuggest-input-icon__uhYGQ.styles_stop-route-station__FneXd svg, .styles_autosuggest-input-icon__uhYGQ.styles_favourite__sjGcX svg {\n fill: #888;\n width: 16px;\n height: 16px; }\n .styles_autosuggest-input-icon__uhYGQ.styles_origin-stop-near-you__Ekwp- svg {\n fill: #888;\n width: 16px;\n height: 16px; }\n\nbutton.styles_clear-input__Vx7B4 {\n display: flex;\n position: absolute;\n padding: 14px 0;\n right: 0;\n width: 44px;\n height: 100%;\n color: var(--color);\n outline: none;\n border: 0;\n margin: 0;\n justify-content: center;\n text-align: left;\n background: none;\n border-style: none;\n border-width: 0;\n cursor: pointer;\n font-family: inherit;\n background-color: transparent;\n transition: none; }\n button.styles_clear-input__Vx7B4 svg {\n fill: var(--color);\n width: 16px;\n height: 16px; }\n button.styles_clear-input__Vx7B4:focus {\n background-color: transparent;\n color: inherit;\n /* First apply outline that is used in Edge and Firefox */\n /* Then override outline for webkit browsers like Chrome, this has no effect on other browsers */\n outline: 5px auto -webkit-focus-ring-color; }\n button.styles_clear-input__Vx7B4:active {\n background-color: transparent;\n color: inherit; }\n button.styles_clear-input__Vx7B4:hover {\n background-color: transparent;\n color: inherit; }\n\n.styles_sr-only__ZOrQT:not(:focus, :active) {\n clip: rect(0 0 0 0);\n -webkit-clip-path: inset(50%);\n clip-path: inset(50%);\n height: 1px;\n overflow: hidden;\n position: absolute;\n white-space: nowrap;\n width: 1px; }\n");var He={"fullscreen-root":"MobileSearch_fullscreen-root__WkMna","combobox-container":"MobileSearch_combobox-container__sRkYS","right-column":"MobileSearch_right-column__erBFe","combobox-icon":"MobileSearch_combobox-icon__xd0iZ","combobox-label":"MobileSearch_combobox-label__OqGpe",container:"MobileSearch_container__k-UVq",input:"MobileSearch_input__HbTUj","clear-input":"MobileSearch_clear-input__ILVwN",hasValue:"MobileSearch_hasValue__NYhZy",suggestion:"MobileSearch_suggestion__UBz5O",suggestionHighlighted:"MobileSearch_suggestionHighlighted__7ef5G",suggestionsContainerOpen:"MobileSearch_suggestionsContainerOpen__g7zkI",suggestionsList:"MobileSearch_suggestionsList__3pEzf","clear-search-history":"MobileSearch_clear-search-history__wblhz","mobile-modal-overlay":"MobileSearch_mobile-modal-overlay__f6Rl7","mobile-modal":"MobileSearch_mobile-modal__hNdM6","mobile-modal-content":"MobileSearch_mobile-modal-content__Yzz-V"};qe("input[type='text'] {\n margin: 0;\n padding: 0; }\n\n.MobileSearch_fullscreen-root__WkMna {\n display: flex;\n flex-direction: column;\n position: fixed;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n background: #fff;\n z-index: 1000; }\n\n.MobileSearch_combobox-container__sRkYS {\n margin: 15px 10px 0;\n border: solid #888 1px;\n display: flex;\n align-items: center;\n border-radius: 5px;\n height: 60px;\n justify-content: space-between; }\n .MobileSearch_combobox-container__sRkYS .MobileSearch_right-column__erBFe {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n padding-top: 9px; }\n\n.MobileSearch_combobox-icon__xd0iZ {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n width: 52px;\n border: 0;\n background: none; }\n .MobileSearch_combobox-icon__xd0iZ svg {\n fill: #007ac9;\n width: 14px;\n height: 21px;\n transform: rotate(-180deg); }\n\n.MobileSearch_combobox-label__OqGpe {\n position: relative;\n top: -2px;\n font-size: 12px;\n font-weight: var(--font-weight-medium);\n letter-spacing: -0.2px;\n color: #333; }\n\n.MobileSearch_container__k-UVq {\n display: flex;\n align-items: center;\n width: 100%; }\n .MobileSearch_container__k-UVq .MobileSearch_input__HbTUj {\n font-family: 'Gotham Rounded A', 'Gotham Rounded B', Roboto, Arial, Georgia, serif;\n width: 100%;\n position: relative;\n padding-bottom: 7px;\n top: 2px;\n border: none;\n height: 26px;\n font-weight: normal;\n box-shadow: none;\n font-size: 16px;\n letter-spacing: -0.5px;\n color: #666;\n -webkit-appearance: none;\n appearance: none; }\n .MobileSearch_container__k-UVq .MobileSearch_input__HbTUj:focus {\n outline: none;\n border: none;\n box-shadow: none;\n background: #fff; }\n\nbutton.MobileSearch_clear-input__ILVwN {\n display: flex;\n align-items: center;\n right: 0;\n padding: 0 15px 7px 0;\n height: 26px;\n color: var(--color);\n border: 0;\n margin: 0;\n justify-content: center;\n text-align: left;\n background: none;\n border-style: none;\n border-width: 0;\n cursor: pointer;\n font-family: inherit;\n background-color: transparent;\n transition: none; }\n button.MobileSearch_clear-input__ILVwN svg {\n fill: var(--color);\n width: 16px;\n height: 16px; }\n button.MobileSearch_clear-input__ILVwN:focus {\n background-color: transparent;\n color: inherit; }\n button.MobileSearch_clear-input__ILVwN:active {\n background-color: transparent;\n color: inherit; }\n button.MobileSearch_clear-input__ILVwN:hover {\n background-color: transparent;\n color: inherit; }\n\n.MobileSearch_hasValue__NYhZy {\n color: #333; }\n\n.MobileSearch_suggestion__UBz5O {\n font-size: 15px;\n min-height: 50px;\n letter-spacing: -0.6px;\n color: #333;\n font-weight: 500;\n background: #fff;\n margin: 0;\n padding: 0; }\n\n.MobileSearch_suggestionHighlighted__7ef5G {\n background-color: #f2f5f7; }\n\n.MobileSearch_suggestionsContainerOpen__g7zkI {\n display: flex;\n position: absolute;\n margin-bottom: auto;\n z-index: 20;\n width: 100vw;\n max-height: calc(100% - 75px);\n height: 100%;\n top: 75px;\n left: 0;\n overflow-x: hidden;\n overflow-y: scroll; }\n .MobileSearch_suggestionsContainerOpen__g7zkI .MobileSearch_suggestionsList__3pEzf {\n width: 100vw;\n list-style: none;\n padding-left: 0;\n margin: 0;\n background: #f2f5f7; }\n\n.MobileSearch_clear-search-history__wblhz {\n display: flex;\n font-family: 'Gotham Rounded A', 'Gotham Rounded B', Roboto, Arial, Georgia, serif;\n margin-top: auto;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 62px;\n background: #f2f5f7;\n color: var(--accessible-primary-color);\n font-size: 15px;\n font-weight: var(--font-weight-medium);\n letter-spacing: -0.42px;\n border: none;\n border-top: 1px solid #ddd; }\n .MobileSearch_suggestionHighlighted__7ef5G .MobileSearch_clear-search-history__wblhz {\n background-color: transparent;\n color: inherit; }\n\n.MobileSearch_mobile-modal-overlay__f6Rl7 {\n z-index: 9999;\n top: 0;\n left: 0;\n right: unset;\n bottom: unset;\n margin: 0;\n padding: 0;\n width: 100%;\n height: 100%;\n background-color: white;\n position: fixed; }\n\n.MobileSearch_mobile-modal__hNdM6 {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0; }\n .MobileSearch_mobile-modal__hNdM6.ReactModal__Content--after-open > div {\n transform: translateY(0); }\n .MobileSearch_mobile-modal__hNdM6.ReactModal__Content--before-close > div {\n transform: translateY(10%); }\n\n.MobileSearch_mobile-modal-content__Yzz-V {\n position: fixed;\n width: 100%;\n height: 100%;\n outline: none;\n background-color: #fff;\n transition: transform 0.25s;\n transform: translateY(10%); }\n");var $e={"fullscreen-root":"MobileNoScroll_fullscreen-root__zQN50","combobox-container":"MobileNoScroll_combobox-container__RDEiT","right-column":"MobileNoScroll_right-column__0P3qe","combobox-icon":"MobileNoScroll_combobox-icon__LA0rD","combobox-label":"MobileNoScroll_combobox-label__-rYsj",container:"MobileNoScroll_container__CaIIv",input:"MobileNoScroll_input__Opft5","clear-input":"MobileNoScroll_clear-input__-4SQO",hasValue:"MobileNoScroll_hasValue__jR1iW",suggestion:"MobileNoScroll_suggestion__NAWcY",suggestionHighlighted:"MobileNoScroll_suggestionHighlighted__V0GuG",suggestionsContainerOpen:"MobileNoScroll_suggestionsContainerOpen__MRa5Y",suggestionsList:"MobileNoScroll_suggestionsList__NUpJE","clear-search-history":"MobileNoScroll_clear-search-history__Cjj-1","mobile-modal-overlay":"MobileNoScroll_mobile-modal-overlay__LbLie","mobile-modal":"MobileNoScroll_mobile-modal__-Rx-A","mobile-modal-content":"MobileNoScroll_mobile-modal-content__nfrCI"};function Ue(e,t){var u=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),u.push.apply(u,n)}return u}function Ge(e){for(var t=1;t<arguments.length;t++){var u=null!=arguments[t]?arguments[t]:{};t%2?Ue(Object(u),!0).forEach((function(t){W(e,t,u[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(u)):Ue(Object(u)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(u,t))}))}return e}qe("input[type='text'] {\n margin: 0;\n padding: 0; }\n\n.MobileNoScroll_fullscreen-root__zQN50 {\n display: flex;\n flex-direction: column;\n position: fixed;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n background: #fff;\n z-index: 1000; }\n\n.MobileNoScroll_combobox-container__RDEiT {\n margin: 15px 10px 0;\n border: solid #888 1px;\n display: flex;\n align-items: center;\n border-radius: 5px;\n height: 60px;\n justify-content: space-between; }\n .MobileNoScroll_combobox-container__RDEiT .MobileNoScroll_right-column__0P3qe {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n padding-top: 9px; }\n\n.MobileNoScroll_combobox-icon__LA0rD {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n width: 52px;\n border: 0;\n background: none; }\n .MobileNoScroll_combobox-icon__LA0rD svg {\n fill: #007ac9;\n width: 14px;\n height: 21px;\n transform: rotate(-180deg); }\n\n.MobileNoScroll_combobox-label__-rYsj {\n position: relative;\n top: -2px;\n font-size: 12px;\n font-weight: var(--font-weight-medium);\n letter-spacing: -0.2px;\n color: #333; }\n\n.MobileNoScroll_container__CaIIv {\n display: flex;\n align-items: center;\n width: 100%; }\n .MobileNoScroll_container__CaIIv .MobileNoScroll_input__Opft5 {\n font-family: 'Gotham Rounded A', 'Gotham Rounded B', Roboto, Arial, Georgia, serif;\n width: 100%;\n position: relative;\n padding-bottom: 7px;\n top: 2px;\n border: none;\n height: 26px;\n font-weight: normal;\n box-shadow: none;\n font-size: 16px;\n letter-spacing: -0.5px;\n color: #666;\n -webkit-appearance: none;\n appearance: none; }\n .MobileNoScroll_container__CaIIv .MobileNoScroll_input__Opft5:focus {\n outline: none;\n border: none;\n box-shadow: none;\n background: #fff; }\n\nbutton.MobileNoScroll_clear-input__-4SQO {\n display: flex;\n align-items: center;\n right: 0;\n padding: 0 15px 7px 0;\n height: 26px;\n color: var(--color);\n border: 0;\n margin: 0;\n justify-content: center;\n text-align: left;\n background: none;\n border-style: none;\n border-width: 0;\n cursor: pointer;\n font-family: inherit;\n background-color: transparent;\n transition: none; }\n button.MobileNoScroll_clear-input__-4SQO svg {\n fill: var(--color);\n width: 16px;\n height: 16px; }\n button.MobileNoScroll_clear-input__-4SQO:focus {\n background-color: transparent;\n color: inherit; }\n button.MobileNoScroll_clear-input__-4SQO:active {\n background-color: transparent;\n color: inherit; }\n button.MobileNoScroll_clear-input__-4SQO:hover {\n background-color: transparent;\n color: inherit; }\n\n.MobileNoScroll_hasValue__jR1iW {\n color: #333; }\n\n.MobileNoScroll_suggestion__NAWcY {\n font-size: 15px;\n min-height: 50px;\n letter-spacing: -0.6px;\n color: #333;\n font-weight: 500;\n background: #fff;\n margin: 0;\n padding: 0; }\n\n.MobileNoScroll_suggestionHighlighted__V0GuG {\n background-color: #f2f5f7; }\n\n.MobileNoScroll_suggestionsContainerOpen__MRa5Y {\n display: flex;\n position: absolute;\n margin-bottom: auto;\n z-index: 20;\n width: 100vw;\n max-height: calc(100% - 75px);\n height: 100%;\n top: 75px;\n left: 0;\n overflow-x: hidden;\n overflow-y: scroll; }\n .MobileNoScroll_suggestionsContainerOpen__MRa5Y .MobileNoScroll_suggestionsList__NUpJE {\n width: 100vw;\n list-style: none;\n padding-left: 0;\n margin: 0;\n background: #f2f5f7; }\n\n.MobileNoScroll_clear-search-history__Cjj-1 {\n display: flex;\n font-family: 'Gotham Rounded A', 'Gotham Rounded B', Roboto, Arial, Georgia, serif;\n margin-top: auto;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 62px;\n background: #f2f5f7;\n color: var(--accessible-primary-color);\n font-size: 15px;\n font-weight: var(--font-weight-medium);\n letter-spacing: -0.42px;\n border: none;\n border-top: 1px solid #ddd; }\n .MobileNoScroll_suggestionHighlighted__V0GuG .MobileNoScroll_clear-search-history__Cjj-1 {\n background-color: transparent;\n color: inherit; }\n\n.MobileNoScroll_mobile-modal-overlay__LbLie {\n z-index: 9999;\n top: 0;\n left: 0;\n right: unset;\n bottom: unset;\n margin: 0;\n padding: 0;\n width: 100%;\n height: 100%;\n background-color: white;\n position: fixed; }\n\n.MobileNoScroll_mobile-modal__-Rx-A {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0; }\n .MobileNoScroll_mobile-modal__-Rx-A.ReactModal__Content--after-open > div {\n transform: translateY(0); }\n .MobileNoScroll_mobile-modal__-Rx-A.ReactModal__Content--before-close > div {\n transform: translateY(10%); }\n\n.MobileNoScroll_mobile-modal-content__nfrCI {\n position: fixed;\n width: 100%;\n height: 100%;\n outline: none;\n background-color: #fff;\n transition: transform 0.25s;\n transform: translateY(10%); }\n\n.MobileNoScroll_suggestionsContainerOpen__MRa5Y {\n -ms-overflow-style: none;\n /* Internet Explorer 10+ */\n scrollbar-width: none;\n /* Firefox */ }\n .MobileNoScroll_suggestionsContainerOpen__MRa5Y::-webkit-scrollbar {\n display: none;\n /* Safari and Chrome */ }\n");class We extends k.default{constructor(e){super(e);const t=this;t.onSuggestionTouchMove=()=>{t.justSelectedSuggestion=!1,t.pressedSuggestion=null}}}const Ye=({appElement:e,id:u,closeHandle:n,clearInput:o,value:i,suggestions:s,inputProps:r,fetchFunction:a,renderSuggestion:l,getSuggestionValue:c,ariaLabel:D,label:d,onSuggestionSelected:p,clearOldSearches:h,dialogHeaderText:g,dialogPrimaryButtonText:f,dialogSecondaryButtonText:F,clearInputButtonText:b,focusInput:C,color:A,hoverColor:m,accessiblePrimaryColor:E,searchOpen:y,fontWeights:v,showScroll:B,lang:S})=>{var k;const w=B?He:$e,x=`${u}-input`,O=`${u}-label`,[M,j]=t.useState(!1),R=_.default.useRef();t.useEffect((()=>{H.default.setAppElement(e)}),[]);const P=t.useCallback((()=>{n()})),L=(e,t)=>{"clear-search-history"===t.suggestion.type?j(!0):t.suggestion.properties.arrowClicked||p(e,t)},I=e=>{const t=e&&(e.key||e.which||e.keyCode)||"";return!(!t||![13," ","Spacebar"].concat([32,"Enter"]).includes(t))&&(e.preventDefault(),!0)},N=e=>"clear-search-history"===e.type?"":c(e),z=e=>"clear-search-history"===e.type?_.default.createElement("button",{type:"button",className:w["clear-search-history"]},e.labelId):l(e);return C&&null!==(k=R.current)&&void 0!==k&&k.input&&R.current.input.focus(),_.default.createElement(H.default,{isOpen:y,className:w["mobile-modal"],overlayClassName:w["mobile-modal-overlay"],onAfterClose:P,shouldCloseOnEsc:!0},_.default.createElement("div",{className:w["mobile-modal-content"],style:{"--color":`${A}`,"--accessible-primary-color":E,"--hover-color":`${m}`,"--font-weight-medium":v.medium}},_.default.createElement("div",{className:w["combobox-container"],htmlFor:x},_.default.createElement("button",{type:"button",className:w["combobox-icon"],onClick:()=>P(),onKeyDown:e=>I(e)&&P(),"aria-label":F,tabIndex:0},_.default.createElement(q.default,{img:"arrow"})),_.default.createElement("span",{className:w["right-column"]},_.default.createElement("span",{className:w["combobox-label"],id:O},d),_.default.createElement(We,{alwaysRenderSuggestions:!0,id:u,suggestions:s,onSuggestionsFetchRequested:a,getSuggestionValue:N,renderSuggestion:z,focusInputOnSuggestionClick:!0,shouldRenderSuggestions:()=>!0,inputProps:Ge(Ge({},r),{},{className:`${w.input} ${w[u]||""} ${r.value?w.hasValue:""}`,autoFocus:!0}),renderInputComponent:e=>_.default.createElement(_.default.Fragment,null,_.default.createElement("input",Object.assign({"aria-label":D,id:u},e)),i&&_.default.createElement("button",{type:"button",className:w["clear-input"],onClick:o,onKeyDown:e=>I(e)&&o(),"aria-label":b},_.default.createElement(q.default,{img:"close",color:A}))),theme:w,onSuggestionSelected:L,ref:R}))),_.default.createElement($.default,{appElement:e,isModalOpen:M,handleClose:()=>j(!1),headerText:g,primaryButtonText:f,secondaryButtonText:F,primaryButtonOnClick:()=>{h(),j(!1)},secondaryButtonOnClick:()=>j(!1),color:A,hoverColor:m,fontWeights:v,lang:S})))};"production"!==process.env.NODE_ENV&&(Ye.propTypes={appElement:B.default.string.isRequired,id:B.default.string.isRequired,closeHandle:B.default.func.isRequired,clearInput:B.default.func.isRequired,value:B.default.string,clearInputButtonText:B.default.string.isRequired,suggestions:B.default.arrayOf(B.default.object).isRequired,inputProps:B.default.shape({onChange:B.default.func.isRequired,onBlur:B.default.func.isRequired,value:B.default.string.isRequired,placeholder:B.default.string.isRequired,className:B.default.string.isRequired}).isRequired,fetchFunction:B.default.func.isRequired,getSuggestionValue:B.default.func.isRequired,renderSuggestion:B.default.func.isRequired,onSuggestionSelected:B.default.func.isRequired,label:B.default.string.isRequired,clearOldSearches:B.default.func.isRequired,ariaLabel:B.default.string,dialogHeaderText:B.default.string,dialogPrimaryButtonText:B.default.string,dialogSecondaryButtonText:B.default.string,focusInput:B.default.bool,color:B.default.string,hoverColor:B.default.string,accessiblePrimaryColor:B.default.string.isRequired,searchOpen:B.default.bool.isRequired,fontWeights:B.default.shape({medium:B.default.number.isRequired}).isRequired,showScroll:B.default.bool,lang:B.default.string.isRequired}),Ye.defaultProps={value:void 0,ariaLabel:void 0,dialogHeaderText:void 0,dialogPrimaryButtonText:void 0,dialogSecondaryButtonText:void 0,focusInput:!1,color:void 0,hoverColor:void 0,showScroll:void 0};var Ze,Qe=function(e,t){return e(t={exports:{}},t.exports),t.exports}((function(e,t){var u;"undefined"!=typeof self&&self,e.exports=(u=_.default,function(){var e={888:function(e,t,u){var n,o;o=void 0!==u.g?u.g:"undefined"!=typeof window?window:this,n=function(){return function(e){var t={ignore:"[data-scroll-ignore]",header:null,topOnEmptyHash:!0,speed:500,speedAsDuration:!1,durationMax:null,durationMin:null,clip:!0,offset:0,easing:"easeInOutCubic",customEasing:null,updateURL:!0,popstate:!0,emitEvents:!0},u=function(){var e={};return Array.prototype.forEach.call(arguments,(function(t){for(var u in t){if(!t.hasOwnProperty(u))return;e[u]=t[u]}})),e},n=function(e){"#"===e.charAt(0)&&(e=e.substr(1));for(var t,u=String(e),n=u.length,o=-1,i="",s=u.charCodeAt(0);++o<n;){if(0===(t=u.charCodeAt(o)))throw new InvalidCharacterError("Invalid character: the input contains U+0000.");i+=t>=1&&t<=31||127==t||0===o&&t>=48&&t<=57||1===o&&t>=48&&t<=57&&45===s?"\\"+t.toString(16)+" ":t>=128||45===t||95===t||t>=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122?u.charAt(o):"\\"+u.charAt(o)}return"#"+i},o=function(){return Math.max(document.body.scrollHeight,document.documentElement.scrollHeight,document.body.offsetHeight,document.documentElement.offsetHeight,document.body.clientHeight,document.documentElement.clientHeight)},i=function(t){return t?(u=t,parseInt(e.getComputedStyle(u).height,10)+t.offsetTop):0;var u},s=function(t,u,n){0===t&&document.body.focus(),n||(t.focus(),document.activeElement!==t&&(t.setAttribute("tabindex","-1"),t.focus(),t.style.outline="none"),e.scrollTo(0,u))},r=function(t,u,n,o){if(u.emitEvents&&"function"==typeof e.CustomEvent){var i=new CustomEvent(t,{bubbles:!0,detail:{anchor:n,toggle:o}});document.dispatchEvent(i)}};return function(a,l){var c,D,d,p,h={cancelScroll:function(e){cancelAnimationFrame(p),p=null,e||r("scrollCancel",c)},animateScroll:function(n,a,l){h.cancelScroll();var D=u(c||t,l||{}),g="[object Number]"===Object.prototype.toString.call(n),f=g||!n.tagName?null:n;if(g||f){var F=e.pageYOffset;D.header&&!d&&(d=document.querySelector(D.header));var b,C,A,m=i(d),E=g?n:function(t,u,n,i){var s=0;if(t.offsetParent)do{s+=t.offsetTop,t=t.offsetParent}while(t);return s=Math.max(s-u-n,0),i&&(s=Math.min(s,o()-e.innerHeight)),s}(f,m,parseInt("function"==typeof D.offset?D.offset(n,a):D.offset,10),D.clip),y=E-F,v=o(),_=0,B=function(e,t){var u=t.speedAsDuration?t.speed:Math.abs(e/1e3*t.speed);return t.durationMax&&u>t.durationMax?t.durationMax:t.durationMin&&u<t.durationMin?t.durationMin:parseInt(u,10)}(y,D),S=function(t){b||(b=t),_+=t-b,A=F+y*function(e,t){var u;return"easeInQuad"===e.easing&&(u=t*t),"easeOutQuad"===e.easing&&(u=t*(2-t)),"easeInOutQuad"===e.easing&&(u=t<.5?2*t*t:(4-2*t)*t-1),"easeInCubic"===e.easing&&(u=t*t*t),"easeOutCubic"===e.easing&&(u=--t*t*t+1),"easeInOutCubic"===e.easing&&(u=t<.5?4*t*t*t:(t-1)*(2*t-2)*(2*t-2)+1),"easeInQuart"===e.easing&&(u=t*t*t*t),"easeOutQuart"===e.easing&&(u=1- --t*t*t*t),"easeInOutQuart"===e.easing&&(u=t<.5?8*t*t*t*t:1-8*--t*t*t*t),"easeInQuint"===e.easing&&(u=t*t*t*t*t),"easeOutQuint"===e.easing&&(u=1+--t*t*t*t*t),"easeInOutQuint"===e.easing&&(u=t<.5?16*t*t*t*t*t:1+16*--t*t*t*t*t),e.customEasing&&(u=e.customEasing(t)),u||t}(D,C=(C=0===B?0:_/B)>1?1:C),e.scrollTo(0,Math.floor(A)),function(t,u){var o=e.pageYOffset;if(t==u||o==u||(F<u&&e.innerHeight+o)>=v)return h.cancelScroll(!0),s(n,u,g),r("scrollStop",D,n,a),b=null,p=null,!0}(A,E)||(p=e.requestAnimationFrame(S),b=t)};0===e.pageYOffset&&e.scrollTo(0,0),function(e,t,u){t||history.pushState&&u.updateURL&&history.pushState({smoothScroll:JSON.stringify(u),anchor:e.id},document.title,e===document.documentElement?"#top":"#"+e.id)}(n,g,D),"matchMedia"in e&&e.matchMedia("(prefers-reduced-motion)").matches?s(n,Math.floor(E),!1):(r("scrollStart",D,n,a),h.cancelScroll(!0),e.requestAnimationFrame(S))}}},g=function(t){if(!t.defaultPrevented&&!(0!==t.button||t.metaKey||t.ctrlKey||t.shiftKey)&&"closest"in t.target&&(D=t.target.closest(a))&&"a"===D.tagName.toLowerCase()&&!t.target.closest(c.ignore)&&D.hostname===e.location.hostname&&D.pathname===e.location.pathname&&/#/.test(D.href)){var u,o;try{u=n(decodeURIComponent(D.hash))}catch(e){u=n(D.hash)}if("#"===u){if(!c.topOnEmptyHash)return;o=document.documentElement}else o=document.querySelector(u);(o=o||"#top"!==u?o:document.documentElement)&&(t.preventDefault(),function(t){if(history.replaceState&&t.updateURL&&!history.state){var u=e.location.hash;u=u||"",history.replaceState({smoothScroll:JSON.stringify(t),anchor:u||e.pageYOffset},document.title,u||e.location.href)}}(c),h.animateScroll(o,D))}},f=function(e){if(null!==history.state&&history.state.smoothScroll&&history.state.smoothScroll===JSON.stringify(c)){var t=history.state.anchor;"string"==typeof t&&t&&!(t=document.querySelector(n(history.state.anchor)))||h.animateScroll(t,null,{updateURL:!1})}};return h.destroy=function(){c&&(document.removeEventListener("click",g,!1),e.removeEventListener("popstate",f,!1),h.cancelScroll(),c=null,D=null,d=null,p=null)},function(){if(!("querySelector"in document&&"addEventListener"in e&&"requestAnimationFrame"in e&&"closest"in e.Element.prototype))throw"Smooth Scroll: This browser does not support the required JavaScript methods and browser APIs.";h.destroy(),c=u(t,l||{}),d=c.header?document.querySelector(c.header):null,document.addEventListener("click",g,!1),c.updateURL&&c.popstate&&e.addEventListener("popstate",f,!1)}(),h}}(o)}.apply(t,[]),void 0===n||(e.exports=n)},432:function(e,t,u){var n=this&&this.__createBinding||(Object.create?function(e,t,u,n){void 0===n&&(n=u),Object.defineProperty(e,n,{enumerable:!0,get:function(){return t[u]}})}:function(e,t,u,n){void 0===n&&(n=u),e[n]=t[u]}),o=this&&this.__exportStar||function(e,t){for(var u in e)"default"===u||Object.prototype.hasOwnProperty.call(t,u)||n(t,e,u)};Object.defineProperty(t,"__esModule",{value:!0}),o(u(47),t),o(u(926),t),o(u(349),t),o(u(137),t),o(u(729),t),o(u(383),t),o(u(450),t),o(u(358),t),o(u(753),t),o(u(869),t),o(u(352),t),o(u(446),t),o(u(164),t),o(u(305),t),o(u(502),t)},349:function(e,t,u){Object.defineProperty(t,"__esModule",{value:!0}),t.useArrowNavigation=void 0;var n=u(156);t.useArrowNavigation=function(e){var t=e.listItems,u=e.onArrowUpOrDown,o=(0,n.useState)(0),i=o[0],s=o[1],r=(0,n.useCallback)((function(e){s(e)}),[t]),a=function(e){var n=e.key;if(null==t?void 0:t.length)if("ArrowUp"===n)u&&u(),e.preventDefault(),r(i>0?i-1:t.length-1);else{if("ArrowDown"!==n)return;u&&u(),e.preventDefault(),i<t.length-1?r(i+1):r(0)}};return(0,n.useEffect)((function(){return window.addEventListener("keydown",a),function(){return window.removeEventListener("keydown",a)}})),(0,n.useEffect)((function(){r(0)}),[t]),{selectedIndex:i}}},446:function(e,t,u){Object.defineProperty(t,"__esModule",{value:!0}),t.useDebounce=void 0;var n=u(156);t.useDebounce=function(e,t){void 0===t&&(t=300);var u=(0,n.useState)(e),o=u[0],i=u[1];return(0,n.useEffect)((function(){var u=setTimeout((function(){i(e)}),t);return function(){clearTimeout(u)}}),[e,t]),o}},164:function(e,t,u){Object.defineProperty(t,"__esModule",{value:!0}),t.useElementSize=void 0;var n=u(156);t.useElementSize=function(){var e,t,u=(0,n.useRef)(null);return[u,{width:null===(e=null==u?void 0:u.current)||void 0===e?void 0:e.clientWidth,height:null===(t=null==u?void 0:u.current)||void 0===t?void 0:t.clientHeight}]},t.default=t.useElementSize},137:function(e,t,u){Object.defineProperty(t,"__esModule",{value:!0}),t.useIntersectionObserver=void 0;var n=u(156);t.useIntersectionObserver=function(e){var t=(0,n.useRef)(null),u=(0,n.useState)(!1),o=u[0],i=u[1],s=function(e){var t=e[0];i(t.isIntersecting)};return(0,n.useEffect)((function(){if(window&&window.IntersectionObserver){var u=new IntersectionObserver(s,e),n=t.current;return t.current&&u.observe(t.current),function(){n&&u.unobserve(n)}}i(!1)}),[t,e]),{containerRef:t,isVisible:o}},t.default=t.useIntersectionObserver},729:function(e,t,u){Object.defineProperty(t,"__esModule",{value:!0}),t.useIsBreakpoint=void 0;var n=u(156),o=u(432),i={xs:1,mobileSmall:320,mobile:375,tablet:768,tabletLarge:920,desktopSmall:1024,desktop:1260,desktopLarge:1440};t.useIsBreakpoint=function(e){var t="string"==typeof e?i[e]:e,u=(0,n.useState)(null),s=u[0],r=u[1],a=(0,n.useCallback)((function(){r(window.innerWidth)}),[]);return(0,n.useEffect)((function(){a()}),[]),(0,o.useOnResize)(a),s>=t},t.default=t.useIsBreakpoint},450:function(e,t,u){Object.defineProperty(t,"__esModule",{value:!0}),t.useIsLoadingAfterError=void 0;var n=u(156);t.useIsLoadingAfterError=function(e,t){var u=(0,n.useState)(t),o=u[0],i=u[1];return(0,n.useEffect)((function(){e||i(t)}),[e,t]),e&&o}},305:function(e,t,u){Object.defineProperty(t,"__esModule",{value:!0}),t.useIsMobile=void 0;var n=u(729);t.useIsMobile=function(){return!(0,n.useIsBreakpoint)("tablet")},t.default=t.useIsMobile},383:function(e,t,u){Object.defineProperty(t,"__esModule",{value:!0}),t.useIsomorphicLayoutEffect=void 0;var n=u(156);t.useIsomorphicLayoutEffect="undefined"!=typeof window?n.useLayoutEffect:n.useEffect,t.default=t.useIsomorphicLayoutEffect},753:function(e,t,u){Object.defineProperty(t,"__esModule",{value:!0}),t.useOnLoseFocusWithin=void 0;var n=u(156);t.useOnLoseFocusWithin=function(e){var t=e.ref,u=e.callback,o=e.watch;(0,n.useEffect)((function(){var e=function(){var e;if(o)return(null===(e=t.current)||void 0===e?void 0:e.matches(":focus-within"))?void 0:u()};return document.addEventListener("keyup",e),function(){return document.removeEventListener("keyup",e)}}),[u,t,o])},t.default=t.useOnLoseFocusWithin},502:function(e,t,u){Object.defineProperty(t,"__esModule",{value:!0}),t.useOnResize=void 0;var n=u(156);t.useOnResize=function(e){(0,n.useEffect)((function(){var t=function(){e(window.innerWidth)};return window.addEventListener("resize",t,{passive:!0}),function(){return window.removeEventListener("resize",t)}}),[])},t.default=t.useOnResize},352:function(e,t,u){Object.defineProperty(t,"__esModule",{value:!0}),t.useOnWindowFocus=void 0;var n=u(156);t.useOnWindowFocus=function(e){(0,n.useEffect)((function(){var t=function(){e&&"visible"===document.visibilityState&&e()};return window.addEventListener("visibilitychange",t,!1),function(){return window.removeEventListener("visibilitychange",t)}}),[e])}},47:function(e,t,u){Object.defineProperty(t,"__esModule",{value:!0}),t.useOutsideReacter=void 0;var n=u(156);t.useOutsideReacter=function(e,t){function u(u){e.current&&!e.current.contains(u.target)&&t()}(0,n.useEffect)((function(){return document.addEventListener("mousedown",u),function(){document.removeEventListener("mousedown",u)}}))}},869:function(e,t,u){Object.defineProperty(t,"__esModule",{value:!0}),t.useRunAfterUpdate=void 0;var n=u(156);t.useRunAfterUpdate=function(){var e=(0,n.useRef)(null);return(0,n.useEffect)((function(){e.current&&(e.current(),e.current=null)})),function(t){e.current=t}},t.default=t.useRunAfterUpdate},926:function(e,t,u){Object.defineProperty(t,"__esModule",{value:!0}),t.useScrollLock=void 0;var n=u(156);t.useScrollLock=function(){return{lock:(0,n.useCallback)((function(){var e=window.scrollY+"px",t=document.body;t.style.position="fixed",t.style.top="-"+e}),[]),unlock:(0,n.useCallback)((function(){var e=document.body,t=e.style.top,u=-1*parseInt(t||"0");e.style.position="",e.style.top="",u&&window.scrollTo(0,-1*parseInt(t||"0"))}),[])}}},358:function(e,t,u){var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.useSmoothScroll=void 0;var o=u(156),i=n(u(888));t.useSmoothScroll=function(e){var t=(0,o.useRef)(null),u=e.ref,n=e.offset,s=void 0===n?0:n,r=e.speed,a=void 0===r?500:r;return(0,o.useEffect)((function(){t.current=new i.default(null,{speed:a,speedAsDuration:!0})}),[]),(0,o.useCallback)((function(){u&&t.current&&t.current.animateScroll(u.current,null,{offset:function(){return s},updateURL:!1})}),[s,u])}},156:function(e){e.exports=u}},t={};function n(u){var o=t[u];if(void 0!==o)return o.exports;var i=t[u]={exports:{}};return e[u].call(i.exports,i,i.exports,n),i.exports}return n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n(432)}())})),Ke=(Ze=Qe)&&Ze.__esModule&&Object.prototype.hasOwnProperty.call(Ze,"default")?Ze.default:Ze;function Xe(e,t){var u=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),u.push.apply(u,n)}return u}function Je(e){for(var t=1;t<arguments.length;t++){var u=null!=arguments[t]?arguments[t]:{};t%2?Xe(Object(u),!0).forEach((function(t){W(e,t,u[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(u)):Xe(Object(u)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(u,t))}))}return e}C.Settings.defaultLocale="en";const et=(e,t,u)=>{if(!u)return;if(!e||!e.GTFS.platform)return;const{modes:n,platform:o}=e.GTFS;return[n&&"RAIL"===n[0]?u("track",{lng:t}):u("platform",{lng:t}),o]};function tt(e,t,u){if(!u)return;if("FutureRoute"!==e.type){if("SelectFromMap"===e.type)return["",u("select-from-map",{lng:t})];if("CurrentLocation"===e.type)return["",u("use-own-position",{lng:t})];if("SelectFromOwnLocations"===e.type)return["",u("select-from-own-locations",{lng:t})];let o,[i,s]=ze(e.properties,!0);if(e.properties.layer.toLowerCase().includes("bikerental")||e.properties.layer.toLowerCase().includes("bikestation")){o=u("vehiclerentalstation",{lng:t});return[o,i,void 0,e.properties.labelId]}if("bikepark"===e.properties.layer)return o=u("bikepark",{lng:t}),[o,i,void 0,void 0];if("carpark"===e.properties.layer)return o=u("carpark",{lng:t}),[o,i,void 0,void 0];if(e.properties.mode)o=u(e.properties.mode.toLowerCase().replace("favourite",""),{lng:t});else{o=u(e.properties.layer.replace("route-","").toLowerCase().replace("favourite",""),{lng:t})}if(e.properties.id&&("stop"===e.properties.layer||"station"===e.properties.layer)){var n;const r=Ne(e.properties),a=null===(n=e.properties.addendum)||void 0===n?void 0:n.GTFS.modes,l=et(e.properties.addendum,t,u);return[o,Ae(i,r),s,r,a,l]}if("favouriteStop"===e.properties.layer||"favouriteStation"===e.properties.layer){const{address:u,code:n}=e.properties;return[o,u?Ae(u.split(",")[0],n):i,s,n,void 0,et(e.properties.addendum,t)]}return[o,i,s]}const{origin:o,destination:i}=e.properties,s=o.locality?`, ${o.locality} foobar`:"",r=i.locality?`, ${i.locality}`:"",a=o.name,l=i.name;return[u("future-route",{lng:t}),`${u("origin",{lng:t})} ${a}${s} ${u("destination",{lng:t})} ${l}${r}`,e.translatedText]}function ut(e,t,u){if(!u)return;const n=C.DateTime.fromSeconds(Number(e.properties.time)),o=C.DateTime.now();let i=e.properties.arriveBy?u("arrival",{lng:t}):u("departure",{lng:t});return i=n.hasSame(o,"day")?`${i} ${u("today-at")}`:n.hasSame(o.plus({days:1}),"day")?`${i} ${u("tomorrow-at",{lng:t})}`:`${i} ${n.toFormat("ccc d.L.")}`,i=`${i} ${n.toFormat("HH:mm")}`,i}const nt=e=>"SelectFromOwnLocations"===e.type||"back"===e.type?"":function(e){const t=ze(e,!0);switch(e.layer){case"selectFromMap":case"currentPosition":case"ownLocations":case"back":return t[1]||t[0];case"favouriteVehicleRentalStation":case"favouritePlace":return t[0];default:return t.length>1&&""!==t[1]?t.join(", "):t[1]||t[0]}}(e.properties);class ot extends _.default.Component{constructor(e){super(e),W(this,"onChange",((e,{newValue:t,method:u})=>{const n={value:this.fInput||t||"",renderMobileSearch:this.props.isMobile};if(this.fInput=null,this.state.editing){if("enter"!==u||this.state.valid){if(this.state.typingTimer&&clearTimeout(this.state.typingTimer),"type"===u){const e=setTimeout((()=>{this.setState({typing:!1})}),1e3);n.typingTimer=e,n.typing=!0}this.setState(n)}}else n.editing=!0,this.setState(n,(()=>this.fetchFunction({value:t||""})))})),W(this,"onBlur",(()=>{this.state.editing&&this.input.focus(),this.setState({editing:!1,renderMobileSearch:!1,value:this.props.value}),this.props.isMobile&&this.state.renderMobileSearch&&this.closeMobileSearch()})),W(this,"onSelected",((e,t)=>{if(this.state.valid){if("SelectFromOwnLocations"===t.suggestion.type)return void this.setState({sources:["Favourite","Back"],ownPlaces:!0,pendingSelection:t.suggestion.type,value:""},(()=>{this.fetchFunction({value:""})}));if("back"===t.suggestion.type||"FutureRoute"===t.suggestion.type)return void this.setState({sources:this.props.sources,ownPlaces:!1,pendingSelection:t.suggestion.type,suggestionIndex:t.suggestionIndex},(()=>{this.fetchFunction({value:""})}));this.selectionDone=!0,this.setState({editing:!1,value:t.suggestionValue},(()=>{this.input.blur(),this.props.handleViaPoints?this.props.handleViaPoints(t.suggestion,t.suggestionIndex):this.props.onSelect(t.suggestion,this.props.id),this.setState({renderMobileSearch:!1,sources:this.props.sources,ownPlaces:!1,suggestions:[]},(()=>{this.selectionDone=!1})),!this.props.focusChange||this.props.isMobile&&!this.props.isEmbedded||this.props.focusChange(),this.props.isMobile&&this.state.renderMobileSearch&&this.closeMobileSearch()}))}else this.setState((e=>({pendingSelection:e.value})),(()=>this.checkPendingSelection()))})),W(this,"onSuggestionsClearRequested",(()=>{this.setState({suggestions:[],sources:this.props.sources,ownPlaces:!1,editing:!1})})),W(this,"checkPendingSelection",(()=>{"SelectFromOwnLocations"!==this.state.pendingSelection&&"back"!==this.state.pendingSelection||!this.state.valid?this.state.pendingSelection&&this.state.valid&&this.setState({pendingSelection:null,editing:!1},(()=>{if(this.state.suggestions.length){this.input.blur();"back"!==this.state.suggestions[this.state.suggestionIndex].type&&this.props.onSelect(this.state.suggestions[this.state.suggestionIndex],this.props.id),this.props.isMobile&&this.state.renderMobileSearch&&this.closeMobileSearch(),!this.props.focusChange||this.props.isMobile&&!this.props.isEmbedded||this.props.focusChange()}})):this.setState({pendingSelection:null,editing:!0},(()=>{this.input.focus()}))})),W(this,"clearButton",(()=>_.default.createElement("button",{type:"button",className:Ve["clear-input"],onClick:this.clearInput,"aria-label":this.props.t("clear-button-label",{lng:this.props.lang})},_.default.createElement(q.default,{img:"close",color:this.props.color})))),W(this,"fetchFunction",(({value:e,cleanExecuted:t})=>this.setState({valid:!1,cleanExecuted:t||!1},(()=>{if(this.selectionDone)return;const{targets:t}=this.props,u=V.default(t),n=V.default(t)||t.includes("Locations");let o;this.state.ownPlaces?(o=["Locations"],(u||t.includes("Stops"))&&o.push("Stops"),(u||t.includes("Stations"))&&o.push("Stations"),(u||t.includes("VehicleRentalStations"))&&o.push("VehicleRentalStations")):u||(o=[...t],n&&!this.props.isMobile&&(V.default(this.props.sources)||this.props.sources.includes("Favourite"))&&o.push("SelectFromOwnLocations"));((e,t,u,n,o,i,s,r,a,l)=>{r(null),Le(e,t,u,n,o,i,s,r,a,l)})(o,this.state.sources&&this.state.sources.filter((e=>!(n&&"Favourite"===e&&!this.state.ownPlaces&&!this.props.isMobile))),this.props.transportMode,this.props.searchContext,this.props.filterResults,this.props.geocodingSize,{input:e||""},(t=>{if(null==t)return;const u=(t.results||[]).filter((e=>"FutureRoute"!==e.type||"FutureRoute"===e.type&&e.properties.time>C.DateTime.now().toUnixInteger())).map((e=>{if("CurrentLocation"===e.type||"SelectFromMap"===e.type||"SelectFromOwnLocations"===e.type||"back"===e.type){const t=Je({},e);return t.properties.labelId=this.props.t(e.properties.labelId,{lng:this.props.lang}),t}return e}));e!==this.state.value&&e!==this.state.pendingSelection&&"SelectFromOwnLocations"!==this.state.pendingSelection&&"back"!==this.state.pendingSelection&&"FutureRoute"!==this.state.pendingSelection||this.setState({valid:!0,suggestions:u},(()=>this.checkPendingSelection()))}),this.props.pathOpts,this.props.refPoint)})))),W(this,"clearInput",(()=>{const e={editing:!0,value:"",sources:this.props.sources,ownPlaces:!1,renderMobileSearch:this.props.isMobile};this.setState(e,(()=>this.fetchFunction({value:"",cleanExecuted:!0}))),this.props.onClear&&this.props.onClear(this.props.id),this.input.focus()})),W(this,"inputClicked",(e=>{if(this.input.focus(),this.clearLocationText(),this.props.isMobile&&this.props.lock(),this.state.editing)this.props.isMobile&&!this.state.renderMobileSearch&&this.setState({renderMobileSearch:!0});else{const t={editing:!0,pendingSelection:null,renderMobileSearch:this.props.isMobile},u={editing:!0,pendingSelection:null,value:e};this.state.suggestions.length?(this.fetchFunction({value:this.state.value}),this.setState(t)):"object"!=typeof e&&e?this.setState(u,(()=>this.fetchFunction({value:e}))):this.setState(t,(()=>this.fetchFunction({value:this.state.value})))}})),W(this,"storeInputReference",(e=>{null!==e&&(this.input=e.input,this.props.storeRef&&this.props.storeRef(e.input))})),W(this,"fillInput",(e=>{this.fInput=e.properties.name;const t={editing:!0,value:e.properties.name,checkPendingSelection:e,valid:!0};this.setState(t),this.fetchFunction({value:e.properties.name}),this.input.focus()})),W(this,"renderItem",(e=>{const t="FutureRoute"===e.type?Je(Je({},e),{},{translatedText:ut(e,this.props.lang,this.props.t)}):e,u=tt(e,this.props.lang,this.props.t);return _.default.createElement(L.default,{item:t,content:u,loading:!this.state.valid,isMobile:this.props.isMobile,ariaFavouriteString:this.props.t("favourite",{lng:this.props.lang}),color:this.props.color,accessiblePrimaryColor:this.props.accessiblePrimaryColor,fillInput:this.fillInput,fontWeights:this.props.fontWeights,getAutoSuggestIcons:this.props.getAutoSuggestIcons,modeIconColors:this.props.modeIconColors,modeSet:this.props.modeSet})})),W(this,"closeMobileSearch",(()=>{this.props.unlock(),this.setState({renderMobileSearch:!1,value:this.props.value},(()=>{window.scrollTo(0,this.state.scrollY),this.onSuggestionsClearRequested()})),this.input.focus(),this.input.blur()})),W(this,"keyDown",(e=>{if(this.selectionDone)return;const t=e.key;if("Shift"!==t){if("Escape"===t&&this.onBlur(),this.state.editing)return"Enter"===t&&""!==this.state.value&&this.setState({pendingSelection:!0},(()=>{this.fetchFunction({value:this.state.value})})),void this.inputClicked();if("Enter"!==t&&"ArrowDown"!==t||""!==this.state.value){if("ArrowDown"===t&&""!==this.state.value){const e={editing:!0,value:this.state.value};this.setState(e,(()=>this.fetchFunction({value:this.state.value})))}this.state.editing||(this.setState({editing:!0}),this.clearLocationText()),"Tab"===t&&this.onBlur()}else this.clearInput()}})),W(this,"suggestionAsAriaContent",(()=>{let e=[];const t=this.state.suggestions[0];return t&&(t.type&&t.type.includes("Favourite")&&e.push(this.props.t("favourite",{lng:this.props.lang})),e=e.concat(tt(this.state.suggestions[0],this.props.lang))),[...new Set(e)].join(" - ")})),W(this,"clearOldSearches",(()=>{const{context:e,clearOldSearches:t,clearFutureRoutes:u}=this.props.searchContext;e&&t&&(t(e),u&&u(e),this.fetchFunction({value:this.state.value}))})),W(this,"isOriginDestinationOrViapoint",(()=>"origin"===this.props.id||"destination"===this.props.id||"via-point"===this.props.id||"origin-stop-near-you"===this.props.id)),W(this,"clearLocationText",(()=>{["Valittu sijainti","Nykyinen sijaintisi","Current position","Selected location","Vald position","Använd min position","Min position","Käytä nykyistä sijaintia","Use current location","Your current location","Wybrane miejsce"].includes(this.state.value)&&this.clearInput()})),W(this,"onFocus",(()=>{const e=window.pageYOffset;return this.setState({scrollY:e})})),C.Settings.defaultZone=e.timeZone,C.Settings.defaultLocale=e.lang,this.state={value:e.value,suggestions:[],editing:!1,valid:!0,renderMobileSearch:!1,sources:e.sources,ownPlaces:!1,typingTimer:null,typing:!1,pendingSelection:null,suggestionIndex:0,cleanExecuted:!1,scrollY:0}}shouldComponentUpdate(e,t){return!I.default(t,this.state)||!I.default(e,this.props)}UNSAFE_componentWillReceiveProps(e){e.value===this.state.value||this.state.editing||this.setState({value:e.value})}render(){const{t:e,lang:t}=this.props,{value:u,suggestions:n,renderMobileSearch:o,cleanExecuted:i}=this.state,s={placeholder:this.props.translatedPlaceholder?this.props.translatedPlaceholder:e(this.props.placeholder,{lng:t}),value:u,onChange:this.onChange,onBlur:this.onBlur,className:`${Ve.input} ${this.props.isMobile&&this.props.transportMode?Ve.thin:""} ${Ve[this.props.id]||""} ${this.state.value?Ve.hasValue:""} ${this.props.inputClassName}`,onKeyDown:this.keyDown,required:this.props.required},r=this.props.id.replace("searchfield-","");let a=this.props.ariaLabel||e(r,{lng:t});a=a.replace("searchfield-","").concat(".");const l=this.props.required?`${e("required",{lng:t})}.`:"",c=this.props.isMobile?e("search-autosuggest-label-instructions-mobile",{lng:t}):e("search-autosuggest-label-instructions-desktop",{lng:t}),D="origin"===this.props.id?e("search-autosuggest-label-move-to-destination",{lng:t}):"",d=c.concat(" ").concat(D),p=e("search-autosuggest-len",{count:n.length,lng:t}),h=()=>this.suggestionAsAriaContent()||this.props.value?e("search-current-suggestion",{lng:t,selection:this.suggestionAsAriaContent().toLowerCase()||this.props.value}):"";return _.default.createElement(_.default.Fragment,null,_.default.createElement("span",{className:Ve["sr-only"],role:"alert"},!this.state.typing&&this.state.editing&&`${p} ${h()}`),this.props.isMobile&&_.default.createElement(Ye,{searchOpen:o,appElement:this.props.appElement,clearOldSearches:this.clearOldSearches,id:this.props.id,clearInput:this.clearInput,value:this.state.value,suggestions:[...n,{type:"clear-search-history",labelId:e("clear-search-history",{lng:t})}],inputProps:Je(Je({},s),{},{placeholder:this.isOriginDestinationOrViapoint()?e("address-place-or-business",{lng:t}):s.placeholder}),fetchFunction:this.fetchFunction,onSuggestionsClearRequested:this.onSuggestionsClearRequested,getSuggestionValue:nt,renderSuggestion:this.renderItem,closeHandle:this.closeMobileSearch,ariaLabel:l.concat(" ").concat(a).concat(" ").concat(h()),label:this.props.mobileLabel?this.props.mobileLabel:e(this.props.id,{lng:t}),onSuggestionSelected:this.onSelected,dialogHeaderText:e("delete-old-searches-header",{lng:t}),dialogPrimaryButtonText:e("delete",{lng:t}),dialogSecondaryButtonText:e("cancel",{lng:t}),clearInputButtonText:e("clear-button-label",{lng:t}),focusInput:i,color:this.props.color,hoverColor:this.props.hoverColor,accessiblePrimaryColor:this.props.accessiblePrimaryColor,fontWeights:this.props.fontWeights,showScroll:this.props.showScroll,lang:this.props.lang}),!o&&_.default.createElement("div",{className:S.default(Ve["autosuggest-input-container"],Ve[this.props.id]),style:{"--color":`${this.props.color}`,"--hover-color":`${this.props.hoverColor}`}},this.props.icon&&_.default.createElement("div",{className:S.default(Ve["autosuggest-input-icon"],Ve[this.props.id],this.props.inputClassName&&`${this.props.inputClassName}-input-icon`),"aria-label":l.concat(" ").concat(a).concat(" ").concat(e("search-autosuggest-label",{lng:t}))},_.default.createElement(q.default,{img:`${this.props.icon}`})),_.default.createElement(k.default,{alwaysRenderSuggestions:this.state.editing,id:this.props.id,suggestions:n,onSuggestionsFetchRequested:this.fetchFunction,onSuggestionsClearRequested:this.onSuggestionsClearRequested,getSuggestionValue:nt,renderSuggestion:this.renderItem,inputProps:Je(Je({},s),{},{onFocus:this.onFocus}),focusInputOnSuggestionClick:!0,shouldRenderSuggestions:()=>this.state.editing,highlightFirstSuggestion:!this.state.ownPlaces,theme:Ve,renderInputComponent:e=>_.default.createElement(_.default.Fragment,null,_.default.createElement("label",{className:Ve["sr-only"],htmlFor:this.props.id},h().concat(" ").concat(l).concat(" ").concat(a).concat(" ").concat(d)),_.default.createElement("input",Object.assign({"aria-label":h().concat(" ").concat(l).concat(" ").concat(a).concat(" ").concat(d),id:this.props.id,onClick:this.inputClicked,onKeyDown:this.keyDown},e)),this.state.value&&this.clearButton()),onSuggestionSelected:this.onSelected,ref:this.storeInputReference})))}}W(ot,"defaultProps",{autoFocus:!1,className:"",icon:void 0,value:"",transportMode:void 0,filterResults:void 0,onClear:void 0,lang:"fi",storeRef:void 0,handleViaPoints:void 0,focusChange:void 0,getAutoSuggestIcons:void 0,sources:[],targets:void 0,isMobile:!1,isEmbedded:!1,geocodingSize:void 0,color:"#007ac9",hoverColor:"#0062a1",accessiblePrimaryColor:"#0074be",timeZone:"Europe/Helsinki",pathOpts:{routesPrefix:"linjat",stopsPrefix:"pysakit"},ariaLabel:void 0,mobileLabel:void 0,inputClassName:"",translatedPlaceholder:void 0,fontWeights:{medium:500},modeIconColors:void 0,required:!1,modeSet:void 0,showScroll:!1,refPoint:{},t:void 0}),"production"!==process.env.NODE_ENV&&(ot.propTypes={appElement:B.default.string.isRequired,autoFocus:B.default.bool,className:B.default.string,icon:B.default.string,id:B.default.string.isRequired,placeholder:B.default.string.isRequired,translatedPlaceholder:B.default.string,value:B.default.string,searchContext:B.default.shape({URL_PELIAS:B.default.string,context:B.default.object,clearOldSearches:B.default.func,clearFutureRoutes:B.default.func}).isRequired,ariaLabel:B.default.string,onSelect:B.default.func.isRequired,transportMode:B.default.string,filterResults:B.default.func,geocodingSize:B.default.number,onClear:B.default.func,storeRef:B.default.func,handleViaPoints:B.default.func,focusChange:B.default.func,lang:B.default.string,sources:B.default.arrayOf(B.default.string),targets:B.default.arrayOf(B.default.string),isMobile:B.default.bool,color:B.default.string,hoverColor:B.default.string,accessiblePrimaryColor:B.default.string,timeZone:B.default.string,pathOpts:B.default.shape({routesPrefix:B.default.string,stopsPrefix:B.default.string}),mobileLabel:B.default.string,lock:B.default.func.isRequired,unlock:B.default.func.isRequired,refPoint:B.default.shape({address:B.default.string,lat:B.default.number,lon:B.default.number}),inputClassName:B.default.string,fontWeights:B.default.shape({medium:B.default.number}),modeIconColors:B.default.objectOf(B.default.string),getAutoSuggestIcons:B.default.objectOf(B.default.func),required:B.default.bool,modeSet:B.default.string,showScroll:B.default.bool,isEmbedded:B.default.bool,t:B.default.func});const it=n.withTranslation()((st=ot,e=>{const{lock:t,unlock:u}=Ke.useScrollLock();return _.default.createElement(st,Object.assign({lock:t,unlock:u},e))}));var st;e.default=e=>_.default.createElement(n.I18nextProvider,{i18n:Te},_.default.createElement(it,e)),Object.defineProperty(e,"__esModule",{value:!0})}));
|
|
2
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZGV2ZWxvcG1lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Qcm9wZXJ0eUtleS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1ByaW1pdGl2ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXRydS1lcS9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWlzLWR1cGxpY2F0ZS9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWhlbHBlcnMvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1maWx0ZXItbWF0Y2hpbmctdG8taW5wdXQvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1zZXJpYWxpemUvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtanNvbi9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1nZW9jb2RpbmctcmVzdWx0cy9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWV4ZWN1dGUtc2VhcmNoLWltbWlkaWF0ZS9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXVuaXEtYnktbGFiZWwvaW5kZXguanMiLCIuLi9zcmMvaGVscGVycy90cmFuc2xhdGlvbnMuanMiLCIuLi9zcmMvaGVscGVycy9pMThuLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWluamVjdC9kaXN0L3N0eWxlLWluamVjdC5lcy5qcyIsIi4uL3NyYy9oZWxwZXJzL01vYmlsZVNlYXJjaC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AaHNsLWZpL2hvb2tzL2xpYi9pbmRleC5qcyIsIi4uL3NyYy9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1sYWJlbC9pbmRleC5qcyIsIi4uL3NyYy9oZWxwZXJzL3dpdGhTY3JvbGxMb2NrLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF90eXBlb2Yobykge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiB0eXBlb2YgbztcbiAgfSA6IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87XG4gIH0sIF90eXBlb2Yobyk7XG59XG5leHBvcnQgeyBfdHlwZW9mIGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCB0b1ByaW1pdGl2ZSBmcm9tIFwiLi90b1ByaW1pdGl2ZS5qc1wiO1xuZnVuY3Rpb24gdG9Qcm9wZXJ0eUtleSh0KSB7XG4gIHZhciBpID0gdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7XG4gIHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7XG59XG5leHBvcnQgeyB0b1Byb3BlcnR5S2V5IGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmZ1bmN0aW9uIHRvUHJpbWl0aXZlKHQsIHIpIHtcbiAgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7XG4gIHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdO1xuICBpZiAodm9pZCAwICE9PSBlKSB7XG4gICAgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7XG4gICAgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpO1xuICB9XG4gIHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7XG59XG5leHBvcnQgeyB0b1ByaW1pdGl2ZSBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IHRvUHJvcGVydHlLZXkgZnJvbSBcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHtcbiAgcmV0dXJuIChyID0gdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7XG4gICAgdmFsdWU6IHQsXG4gICAgZW51bWVyYWJsZTogITAsXG4gICAgY29uZmlndXJhYmxlOiAhMCxcbiAgICB3cml0YWJsZTogITBcbiAgfSkgOiBlW3JdID0gdCwgZTtcbn1cbmV4cG9ydCB7IF9kZWZpbmVQcm9wZXJ0eSBhcyBkZWZhdWx0IH07IiwiLyoqXG4gKiAgYWNjZXB0IGVxdWFsaXR5IG9mIG5vbiBudWxsaXNoIHZhbHVlc1xuICpcbiAqIEBuYW1lIHRydUVxXG4gKiBAcGFyYW0ge0Jvb2xlYW58TnVtYmVyfEJpZ0ludHxTdHJpbmd8U3ltYm9sfE9iamVjdH0gdmFsMSBGaXJzdCB2YWx1ZSB0byBiZSBjb21wYXJlZFxuICogQHBhcmFtIHtCb29sZWFufE51bWJlcnxCaWdJbnR8U3RyaW5nfFN5bWJvbHxPYmplY3R9IHBhcmFtMiBTZWNvbmQgdmFsdWUgdG8gYmUgY29tcGFyZWRcbiAqIEByZXR1cm5zIHtCb29sZWFufSB0cnVlL2ZhbHNlXG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtdXRpbC50cnVFcSgnMicsICcyJyk7XG4gKiAvLz10cnVlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRydUVxKHZhbDEsIHZhbDIpIHtcbiAgcmV0dXJuIHZhbDEgJiYgdmFsMiAmJiB2YWwxID09PSB2YWwyO1xufVxuIiwiaW1wb3J0IHRydUVxIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC10cnUtZXEnO1xuLyoqXG4gKiBDaGVja3MgdGhhdCBpcyBpdGVtcyBkdXBsaWNhdGVcbiAqXG4gKiBAbmFtZSBpc0R1cGxpY2F0ZVxuICogQHBhcmFtIHtPYmplY3R9IGl0ZW0xIE9iamVjdCBjb250YWluaW5nIGZvbGxvd2luZyBhdHRyaWJ1dGVzOlxuICoge1xuICogIHByb3BlcnRpZXMge1xuICogICAgICBndGZzSWQ6IFN0cmluZ1xuICogICAgICBnaWQ6IFN0cmluZyBmcm9tIGdlb2NvZGVyXG4gKiAgICAgIG5hbWU6IFN0cmluZ1xuICogICAgICBsYWJlbDogU3RyaW5nXG4gKiAgICAgICBhZGRyZXNzOiBTdHJpbmdcbiAqICAgICAgZ2VvbWV0cnkge1xuICogICAgICAgICBjb29yZGluYXRlcyBbTnVtYmVyIGxhdCwgTnVtYmVyIGxvbl1cbiAqICAgICAgfVxuICogIH1cbiAqIH1cbiAqIEBwYXJhbSB7T2JqZWN0fSBpdGVtMiBPYmplY3Qgd2l0aCBzYW1lIGF0dHJpYnV0ZXMgYXMgaXRlbTFcbiAqIEByZXR1cm5zIHtCb29sZWFufSB0cnVlL2ZhbHNlXG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtdXRpbC5pc0R1cGxpY2F0ZShwYXJhbTEsIHBhcmFtMik7XG4gKiAvLz10cnVlXG4gKi9cblxuY29uc3QgZ3Rmc1N0b3BMYXllcnMgPSBbJ3N0b3AnLCAnc3RhdGlvbicsICdmYXZvdXJpdGVTdG9wJywgJ2Zhdm91cml0ZVN0YXRpb24nXTtcbmNvbnN0IHZlaGljbGVSZW50YWxMYXllcnMgPSBbJ2Zhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uJywgJ2Jpa2VzdGF0aW9uJ107XG5cbmZ1bmN0aW9uIGxhYmVsSWRUb0dpZChpZCkge1xuICBpZiAoIWlkKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIGNvbnN0IHBhcnRzID0gaWQuc3BsaXQoJzonKTtcbiAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICByZXR1cm4gYGNpdHliaWtlcyR7cGFydHNbMF19OmJpa2VzdGF0aW9uOiR7cGFydHNbMV19YDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNEdXBsaWNhdGUoaXRlbTEsIGl0ZW0yKSB7XG4gIGNvbnN0IHByb3BzMSA9IGl0ZW0xLnByb3BlcnRpZXM7XG4gIGNvbnN0IHByb3BzMiA9IGl0ZW0yLnByb3BlcnRpZXM7XG5cbiAgaWYgKGl0ZW0xLnR5cGUgPT09ICdGdXR1cmVSb3V0ZScgJiYgaXRlbTIudHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJykge1xuICAgIGNvbnN0IG8xID0gcHJvcHMxLm9yaWdpbjtcbiAgICBjb25zdCBkMSA9IHByb3BzMS5kZXN0aW5hdGlvbjtcbiAgICBjb25zdCBvMiA9IHByb3BzMi5vcmlnaW47XG4gICAgY29uc3QgZDIgPSBwcm9wczIuZGVzdGluYXRpb247XG5cbiAgICBjb25zdCBuYW1lMSA9IGAke28xLm5hbWV9Ly8ke28xLmxvY2FsYWRtaW59Ly8ke2QxLm5hbWV9Ly8ke2QxLmxvY2FsYWRtaW59YDtcbiAgICBjb25zdCBuYW1lMiA9IGAke28yLm5hbWV9Ly8ke28yLmxvY2FsYWRtaW59Ly8ke2QyLm5hbWV9Ly8ke2QyLmxvY2FsYWRtaW59YDtcblxuICAgIHJldHVybiBuYW1lMSA9PT0gbmFtZTI7XG4gIH1cbiAgaWYgKGl0ZW0xLnR5cGUgPT09ICdGdXR1cmVSb3V0ZScgfHwgaXRlbTIudHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoXG4gICAgdmVoaWNsZVJlbnRhbExheWVycy5pbmNsdWRlcyhwcm9wczEubGF5ZXIpICYmXG4gICAgdmVoaWNsZVJlbnRhbExheWVycy5pbmNsdWRlcyhwcm9wczIubGF5ZXIpXG4gICkge1xuICAgIGNvbnN0IGlkMSA9IHByb3BzMS5naWQgfHwgbGFiZWxJZFRvR2lkKHByb3BzMS5sYWJlbElkKTtcbiAgICBjb25zdCBpZDIgPSBwcm9wczIuZ2lkIHx8IGxhYmVsSWRUb0dpZChwcm9wczIubGFiZWxJZCk7XG4gICAgcmV0dXJuIGlkMSA9PT0gaWQyO1xuICB9XG4gIGlmIChwcm9wczEuZ3Rmc0lkICYmIHByb3BzMi5ndGZzSWQpIHtcbiAgICByZXR1cm4gcHJvcHMxLmd0ZnNJZCA9PT0gcHJvcHMyLmd0ZnNJZDtcbiAgfVxuICBpZiAoXG4gICAgZ3Rmc1N0b3BMYXllcnMuaW5jbHVkZXMocHJvcHMxLmxheWVyKSAmJlxuICAgIGd0ZnNTdG9wTGF5ZXJzLmluY2x1ZGVzKHByb3BzMi5sYXllcikgJiZcbiAgICBwcm9wczEuZ2lkICYmXG4gICAgcHJvcHMyLmdpZFxuICApIHtcbiAgICByZXR1cm4gcHJvcHMxLmdpZCA9PT0gcHJvcHMyLmdpZDtcbiAgfVxuXG4gIGNvbnN0IHAxID0gaXRlbTEgJiYgaXRlbTEuZ2VvbWV0cnkgPyBpdGVtMS5nZW9tZXRyeS5jb29yZGluYXRlcyA6IHVuZGVmaW5lZDtcbiAgY29uc3QgcDIgPSBpdGVtMiAmJiBpdGVtMi5nZW9tZXRyeSA/IGl0ZW0yLmdlb21ldHJ5LmNvb3JkaW5hdGVzIDogdW5kZWZpbmVkO1xuXG4gIGlmIChwMSAmJiBwMikge1xuICAgIC8vIGJvdGggaGF2ZSBnZW9tZXRyeVxuICAgIGlmIChNYXRoLmFicyhwMVswXSAtIHAyWzBdKSA8IDFlLTYgJiYgTWF0aC5hYnMocDFbMV0gLSBwMlsxXSkgPCAxZS02KSB7XG4gICAgICAvLyBsb2NhdGlvbiBtYXRjaCBpcyBub3QgZW5vdWdoLiBSZXF1aXJlIGEgY29tbW9uIHByb3BlcnR5XG4gICAgICBpZiAoXG4gICAgICAgIHRydUVxKHByb3BzMS5uYW1lLCBwcm9wczIubmFtZSkgfHxcbiAgICAgICAgdHJ1RXEocHJvcHMxLmxhYmVsLCBwcm9wczIubGFiZWwpIHx8XG4gICAgICAgIHRydUVxKHByb3BzMS5hZGRyZXNzLCBwcm9wczIuYWRkcmVzcykgfHxcbiAgICAgICAgdHJ1RXEocHJvcHMxLmFkZHJlc3MsIHByb3BzMi5sYWJlbCkgfHxcbiAgICAgICAgdHJ1RXEocHJvcHMxLmxhYmVsLCBwcm9wczIuYWRkcmVzcylcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuIiwiaW1wb3J0IGlzU3RyaW5nIGZyb20gJ2xvZGFzaC9pc1N0cmluZyc7XG5pbXBvcnQgb3JkZXJCeSBmcm9tICdsb2Rhc2gvb3JkZXJCeSc7XG5pbXBvcnQgdW5pcVdpdGggZnJvbSAnbG9kYXNoL3VuaXFXaXRoJztcbmltcG9ydCBpc0R1cGxpY2F0ZSBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtaXMtZHVwbGljYXRlJztcblxuY29uc3Qgbm9ybWFsaXplID0gc3RyID0+IHtcbiAgaWYgKCFpc1N0cmluZyhzdHIpKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIHJldHVybiBzdHIudG9Mb3dlckNhc2UoKTtcbn07XG5cbmNvbnN0IHNwbGl0U2hvcnROYW1lQXRMZXR0ZXJzID0gc3RyID0+IHtcbiAgcmV0dXJuIHN0ci5zcGxpdCgvKFxccHtMfSspL3UpO1xufTtcblxuY29uc3QgdGVzdFNob3J0TmFtZU1hdGNoZXNMaW5lV2l0aE51bWJlcnNBbmRMZXR0ZXJzID0gc3RyID0+IHtcbiAgcmV0dXJuIC9eWzAtOV0rXFxwe0x9KyQvdS50ZXN0KHN0cik7XG59O1xuXG4vKipcbiAqIExheWVyVHlwZSBkZXBpY3RzIHRoZSB0eXBlIG9mIHRoZSBwb2ludC1vZi1pbnRlcmVzdC5cbiAqL1xuY29uc3QgTGF5ZXJUeXBlID0ge1xuICBBZGRyZXNzOiAnYWRkcmVzcycsXG4gIEJhY2s6ICdiYWNrJyxcbiAgQ3VycmVudFBvc2l0aW9uOiAnY3VycmVudFBvc2l0aW9uJyxcbiAgRmF2b3VyaXRlU3RvcDogJ2Zhdm91cml0ZVN0b3AnLFxuICBGYXZvdXJpdGVTdGF0aW9uOiAnZmF2b3VyaXRlU3RhdGlvbicsXG4gIEZhdm91cml0ZVBsYWNlOiAnZmF2b3VyaXRlUGxhY2UnLFxuICBGYXZvdXJpdGVSb3V0ZTogJ2Zhdm91cml0ZVJvdXRlJyxcbiAgRmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb246ICdmYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbicsXG4gIEZ1dHVyZVJvdXRlOiAnZnV0dXJlUm91dGUnLFxuICBTdGF0aW9uOiAnc3RhdGlvbicsXG4gIFNlbGVjdEZyb21NYXA6ICdzZWxlY3RGcm9tTWFwJyxcbiAgU2VsZWN0RnJvbU93bkxvY2F0aW9uczogJ293bkxvY2F0aW9ucycsXG4gIFN0b3A6ICdzdG9wJyxcbiAgU3RyZWV0OiAnc3RyZWV0JyxcbiAgVmVudWU6ICd2ZW51ZScsXG4gIFZlaGljbGVSZW50YWxTdGF0aW9uOiAnYmlrZXN0YXRpb24nLFxuICBDYXJQYXJrOiAnY2FycGFyaycsXG4gIEJpa2VQYXJrOiAnYmlrZXBhcmsnLFxufTtcbmV4cG9ydCBjb25zdCBpc1N0b3AgPSAoeyBsYXllciwgdHlwZSB9KSA9PlxuICBsYXllciA9PT0gJ3N0b3AnIHx8XG4gIGxheWVyID09PSAnZmF2b3VyaXRlU3RvcCcgfHxcbiAgdHlwZSA9PT0gJ3N0b3AnIHx8XG4gIHR5cGUgPT09ICdmYXZvdXJpdGVTdG9wJztcblxuY29uc3QgREVGQVVMVF9ST1VURVNfUFJFRklYID0gJ2xpbmphdCc7XG5jb25zdCBERUZBVUxUX1NUT1BTX1BSRUZJWCA9ICdweXNha2l0JztcblxuZXhwb3J0IGNvbnN0IG1hcFJvdXRlID0gKGl0ZW0sIHBhdGhPcHRzKSA9PiB7XG4gIGlmIChpdGVtID09PSBudWxsIHx8IGl0ZW0gPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3Qgb3B0cyA9IHBhdGhPcHRzIHx8IHt9O1xuXG4gIGNvbnN0IHJvdXRlc1ByZWZpeCA9IG9wdHMucm91dGVzUHJlZml4IHx8IERFRkFVTFRfUk9VVEVTX1BSRUZJWDtcbiAgY29uc3Qgc3RvcHNQcmVmaXggPSBvcHRzLnN0b3BzUHJlZml4IHx8IERFRkFVTFRfU1RPUFNfUFJFRklYO1xuXG4gIGNvbnN0IGxpbmsgPSBgLyR7cm91dGVzUHJlZml4fS8ke2VuY29kZVVSSUNvbXBvbmVudChcbiAgICBpdGVtLmd0ZnNJZCxcbiAgKX0vJHtzdG9wc1ByZWZpeH1gO1xuICByZXR1cm4ge1xuICAgIHR5cGU6ICdSb3V0ZScsXG4gICAgcHJvcGVydGllczoge1xuICAgICAgLi4uaXRlbSxcbiAgICAgIGxheWVyOiBgcm91dGUtJHtpdGVtLm1vZGV9YCxcbiAgICAgIGxpbmssXG4gICAgfSxcbiAgICBnZW9tZXRyeToge1xuICAgICAgY29vcmRpbmF0ZXM6IG51bGwsXG4gICAgfSxcbiAgfTtcbn07XG5cbi8qKlxuICogVHJpZXMgdG8gbWF0Y2ggdGhlIGdpdmVuIHNlYXJjaCB0ZXJtIGFnYWlucyB0aGUgY29sbGVjdGlvbiBvZiBwcm9wZXJ0aWVzXG4gKiBmb3IgYSBnZW9jb2RpbmcgcmVzdWx0IChtaW46IDAsIG1heDogMS41KS4gVGhlIGJlc3QgbWF0Y2ggd2lsbCByZXR1cm4gYSBudW1iZXIgb2YgMS41LlxuICogV29yc2UgbWF0Y2hlcyB3aWxsIHJldHVybiAwIG9yIDAuNS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbm9ybWFsaXplZFRlcm0gdGhlIG5vcm1hbGl6ZWQgc2VhcmNoIHRlcm0uXG4gKiBAcGFyYW0geyp9IHJlc3VsdFByb3BlcnRpZXMgdGhlIGdlb2NvZGluZyByZXN1bHQncyBwcm9wZXJ0eSBjb2xsZWN0aW9uLlxuICovXG5leHBvcnQgY29uc3QgbWF0Y2ggPSAobm9ybWFsaXplZFRlcm0sIHJlc3VsdFByb3BlcnRpZXMpID0+IHtcbiAgaWYgKCFpc1N0cmluZyhub3JtYWxpemVkVGVybSkgfHwgbm9ybWFsaXplZFRlcm0ubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBjb25zdCBtYXRjaFByb3BzID0gWyduYW1lJywgJ2xhYmVsJywgJ2FkZHJlc3MnLCAnc2hvcnROYW1lJ107XG4gIHJldHVybiBtYXRjaFByb3BzXG4gICAgLm1hcChuYW1lID0+IHtcbiAgICAgIHJldHVybiB7IG5hbWUsIHZhbHVlOiByZXN1bHRQcm9wZXJ0aWVzW25hbWVdIH07XG4gICAgfSlcbiAgICAuZmlsdGVyKGVsZW1lbnQgPT4gaXNTdHJpbmcoZWxlbWVudC52YWx1ZSkgJiYgZWxlbWVudC52YWx1ZS5sZW5ndGggPiAwKVxuICAgIC5tYXAoZWxlbWVudCA9PiB7XG4gICAgICBsZXQgbm9ybWFsaXplZFZhbHVlID0gbm9ybWFsaXplKGVsZW1lbnQudmFsdWUpO1xuICAgICAgaWYgKG5vcm1hbGl6ZWRWYWx1ZS5pbmRleE9mKG5vcm1hbGl6ZWRUZXJtKSA9PT0gMCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZWxlbWVudC5uYW1lID09PSAnc2hvcnROYW1lJyAmJlxuICAgICAgICAgIHRlc3RTaG9ydE5hbWVNYXRjaGVzTGluZVdpdGhOdW1iZXJzQW5kTGV0dGVycyhub3JtYWxpemVkVmFsdWUpXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIElmIHRoZSBzaG9ydE5hbWUgaXMgb2YgYSBjZXJ0YWluIGZvcm1hdCAoZS5nLiA4OUEpLCBpdCBpcyB0cmVhdGVkIGhlcmVcbiAgICAgICAgICAvLyBhcyBpZiBpdCBoYWQgdGhlIGxlbmd0aCBvZiB0aGUgbnVtYmVycyB3aXRoIHRoZSBsZXR0ZXJzIHJlbW92ZWQuXG4gICAgICAgICAgLy8gU28gdGhlIGxlbmd0aCBvZiA4OUEgd291bGQgYmUgdHJlYXRlZCBhcyAyLlxuICAgICAgICAgIFtub3JtYWxpemVkVmFsdWVdID0gc3BsaXRTaG9ydE5hbWVBdExldHRlcnMobm9ybWFsaXplZFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBmdWxsIG1hdGNoIGF0IHN0YXJ0LiBSZXR1cm4gbWF4IHJlc3VsdCB3aGVuIG1hdGNoIGlzIGZ1bGwsIG5vdCBvbmx5IHBhcnRpYWxcbiAgICAgICAgcmV0dXJuIDAuNSArIG5vcm1hbGl6ZWRUZXJtLmxlbmd0aCAvIG5vcm1hbGl6ZWRWYWx1ZS5sZW5ndGg7XG4gICAgICB9XG4gICAgICAvLyBiZWNhdXNlIG9mIGZpbHRlcm1hdGNoaW5ndG9pbnB1dCwgd2Uga25vdyB0aGF0IG1hdGNoIG9jY3VycmVkIHNvbWV3aGVyZVxuICAgICAgLy8gZG9uJ3QgcnVuIGZpbHRlcm1hdGNoaW5nIGFnYWluIGJ1dCBlc3RpbWF0ZSByb3VnaGx5OlxuICAgICAgLy8gdGhlIGxvbmdlciB0aGUgbWF0Y2hpbmcgc3RyaW5nLCB0aGUgYmV0dGVyIGNvbmZpZGVuY2UsIG1heCBiZWluZyAwLjVcbiAgICAgIHJldHVybiAoMC41ICogbm9ybWFsaXplZFRlcm0ubGVuZ3RoKSAvIChub3JtYWxpemVkVGVybS5sZW5ndGggKyAxKTtcbiAgICB9KVxuICAgIC5yZWR1Y2UoXG4gICAgICAocHJldmlvdXMsIGN1cnJlbnQpID0+IChjdXJyZW50ID4gcHJldmlvdXMgPyBjdXJyZW50IDogcHJldmlvdXMpLFxuICAgICAgMCxcbiAgICApO1xufTtcblxuLyoqXG4gKiBSYW5rcyB0aGUgcmVzdWx0IGJhc2VkIG9uIGl0cyBsYXllciBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXIgdGhlIGxheWVyIHByb3BlcnR5LlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSB0aGUgc291cmNlIHByb3BlcnR5LlxuICovXG5leHBvcnQgY29uc3QgZ2V0TGF5ZXJSYW5rID0gKGxheWVyLCBzb3VyY2UpID0+IHtcbiAgc3dpdGNoIChsYXllcikge1xuICAgIGNhc2UgTGF5ZXJUeXBlLkN1cnJlbnRQb3NpdGlvbjpcbiAgICAgIHJldHVybiAxO1xuICAgIGNhc2UgTGF5ZXJUeXBlLkJhY2s6XG4gICAgICByZXR1cm4gMC45O1xuICAgIGNhc2UgTGF5ZXJUeXBlLlNlbGVjdEZyb21NYXA6XG4gICAgICByZXR1cm4gMC44O1xuICAgIGNhc2UgTGF5ZXJUeXBlLlNlbGVjdEZyb21Pd25Mb2NhdGlvbnM6XG4gICAgICByZXR1cm4gMC43OTtcbiAgICBjYXNlIExheWVyVHlwZS5GYXZvdXJpdGVTdGF0aW9uOlxuICAgIGNhc2UgTGF5ZXJUeXBlLkZhdm91cml0ZVBsYWNlOlxuICAgIGNhc2UgTGF5ZXJUeXBlLkZhdm91cml0ZVN0b3A6XG4gICAgY2FzZSBMYXllclR5cGUuRmF2b3VyaXRlUm91dGU6XG4gICAgY2FzZSBMYXllclR5cGUuRmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb246XG4gICAgICByZXR1cm4gMC40NTtcbiAgICBjYXNlIExheWVyVHlwZS5GdXR1cmVSb3V0ZTpcbiAgICAgIHJldHVybiAwLjQ0O1xuICAgIGNhc2UgTGF5ZXJUeXBlLlN0YXRpb246IHtcbiAgICAgIGlmIChpc1N0cmluZyhzb3VyY2UpICYmIHNvdXJjZS5pbmRleE9mKCdndGZzJykgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIDAuNDM7XG4gICAgICB9XG4gICAgICByZXR1cm4gMC40MjtcbiAgICB9XG4gICAgY2FzZSBMYXllclR5cGUuQ2FyUGFyazpcbiAgICAgIHJldHVybiAwLjM4O1xuICAgIGNhc2UgTGF5ZXJUeXBlLkJpa2VQYXJrOlxuICAgICAgcmV0dXJuIDAuMzg7XG4gICAgY2FzZSBMYXllclR5cGUuVmVoaWNsZVJlbnRhbFN0YXRpb246XG4gICAgICByZXR1cm4gMC4zODtcbiAgICBjYXNlIExheWVyVHlwZS5TdG9wOlxuICAgICAgcmV0dXJuIDAuMzY7XG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIHZlbnVlLCBhZGRyZXNzLCBzdHJlZXQsIHJvdXRlLXh4eFxuICAgICAgcmV0dXJuIDAuNDE7XG4gIH1cbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRvIHNvcnQgdGhlIHJlc3VsdHMuIE9yZGVycyBhcyBmb2xsb3dzOlxuICogIC0gY3VycmVudCBwb3NpdGlvbiBmaXJzdCBmb3IgYW4gZW1wdHkgc2VhcmNoXG4gKiAgLSBtYXRjaGluZyByb3V0ZXMgZmlyc3RcbiAqICAtIG90aGVyd2lzZSBieSBjb25maWRlbmNlLCBleGNlcHQgdGhhdDpcbiAqICAgIC0gYm9vc3Qgd2VsbCBtYXRjaGluZyBzdGF0aW9ucyAoZXNwZWNpYWxseSBmcm9tIEdURlMpXG4gKiAgICAtIHJhbmsgc3RvcHMgbG93ZXIgYXMgdGhleSB0ZW5kIHRvIG9jY3VweSBtb3N0IG9mIHRoZSBzZWFyY2ggcmVzdWx0c1xuICogIC0gaXRlbXMgd2l0aCBubyBjb25maWRlbmNlIChvbGQgc2VhcmNoZXMgYW5kIGZhdm9yaXRlcyk6XG4gKiAgICAtIHJhbmsgZmF2b3VyaXRlcyBiZXR0ZXIgdGhhbiBvcmRpbmFyeSBvbGQgc2VhcmNoZXNcbiAqICAgIC0gcmFuayBmdWxsIG1hdGNoIGJldHRlciB0aGFuIHBhcnRpYWwgbWF0Y2hcbiAqICAgIC0gcmFuayBtYXRjaCBhdCBtaWRkbGUgd29yZCBsb3dlciB0aGFuIG1hdGNoIGF0IHRoZSBiZWdpbm5pbmdcbiAqICAgIC0gcmFuayBiaWtlIHJlbnRhbCBzdGF0aW9ucyBsb3dlclxuICogQHBhcmFtIHsqW119IHJlc3VsdHMgVGhlIHNlYXJjaCByZXN1bHRzIHRoYXQgd2VyZSByZWNlaXZlZFxuICogQHBhcmFtIHtTdHJpbmd9IHRlcm0gVGhlIHNlYXJjaCB0ZXJtIHRoYXQgd2FzIHVzZWRcbiAqL1xuZXhwb3J0IGNvbnN0IHNvcnRTZWFyY2hSZXN1bHRzID0gKGxpbmVSZWdleHAsIHJlc3VsdHMsIHRlcm0gPSAnJykgPT4ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkocmVzdWx0cykgfHwgIXJlc3VsdHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cbiAgY29uc3QgaXNMaW5lSWRlbnRpZmllciA9IHZhbHVlID0+XG4gICAgaXNTdHJpbmcodmFsdWUpICYmIGxpbmVSZWdleHAgJiYgbGluZVJlZ2V4cC50ZXN0KHZhbHVlKTtcblxuICBjb25zdCBub3JtYWxpemVkVGVybSA9IG5vcm1hbGl6ZSh0ZXJtKTtcbiAgY29uc3QgaXNMaW5lU2VhcmNoID0gaXNMaW5lSWRlbnRpZmllcihub3JtYWxpemVkVGVybSk7XG5cbiAgY29uc3Qgb3JkZXJlZFJlc3VsdHMgPSBvcmRlckJ5KFxuICAgIHJlc3VsdHMuZmlsdGVyKHIgPT4gciksXG4gICAgW1xuICAgICAgLy8gcmFuayBtYXRjaGluZyByb3V0ZXMgYmVzdFxuICAgICAgcmVzdWx0ID0+XG4gICAgICAgIGlzTGluZVNlYXJjaCAmJlxuICAgICAgICBpc0xpbmVJZGVudGlmaWVyKG5vcm1hbGl6ZShyZXN1bHQucHJvcGVydGllcy5zaG9ydE5hbWUpKSAmJlxuICAgICAgICBub3JtYWxpemUocmVzdWx0LnByb3BlcnRpZXMuc2hvcnROYW1lKS5pbmRleE9mKG5vcm1hbGl6ZWRUZXJtKSA9PT0gMFxuICAgICAgICAgID8gMVxuICAgICAgICAgIDogMCxcblxuICAgICAgcmVzdWx0ID0+IHtcbiAgICAgICAgY29uc3QgeyBjb25maWRlbmNlLCBsYXllciwgc291cmNlIH0gPSByZXN1bHQucHJvcGVydGllcztcbiAgICAgICAgaWYgKG5vcm1hbGl6ZWRUZXJtLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIC8vIERvaW5nIHNlYXJjaCB3aXRoIGVtcHR5IHN0cmluZy5cbiAgICAgICAgICAvLyBObyBjb25maWRlbmNlIHRvIG1hdGNoLCBzbyB1c2UgcmFua2VkIG9sZCBzZWFyY2hlcyBhbmQgZmF2b3VyaXRlc1xuICAgICAgICAgIHJldHVybiBnZXRMYXllclJhbmsobGF5ZXIsIHNvdXJjZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBtdXN0IGhhbmRsZSBhIG1peHVwIG9mIGdlb2NvZGVyIHNlYXJjaGVzIGFuZCBpdGVtcyBhYm92ZVxuICAgICAgICAvLyBOb3JtYWwgY29uZmlkZW5jZSByYW5nZSBmcm9tIGdlb2NvZGVyIGlzIGFib3V0IDAuMyAuLiAxXG4gICAgICAgIGlmICghY29uZmlkZW5jZSkge1xuICAgICAgICAgIC8vIG5vdCBmcm9tIGdlb2NvZGVyLCBlc3RpbWF0ZSBjb25maWRlbmNlIG91cnNlbHZlc1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBnZXRMYXllclJhbmsobGF5ZXIsIHNvdXJjZSkgK1xuICAgICAgICAgICAgbWF0Y2gobm9ybWFsaXplZFRlcm0sIHJlc3VsdC5wcm9wZXJ0aWVzKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZ2VvY29kZWQgaXRlbXMgd2l0aCBjb25maWRlbmNlLCBqdXN0IGFkanVzdCBhIGxpdHRsZVxuICAgICAgICBzd2l0Y2ggKGxheWVyKSB7XG4gICAgICAgICAgY2FzZSBMYXllclR5cGUuU3RhdGlvbjoge1xuICAgICAgICAgICAgY29uc3QgYm9vc3QgPSBzb3VyY2UuaW5kZXhPZignZ3RmcycpID09PSAwID8gMC4wMiA6IDAuMDE7XG4gICAgICAgICAgICByZXR1cm4gY29uZmlkZW5jZSArIGJvb3N0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIExheWVyVHlwZS5TdG9wOlxuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZGVuY2UgLSAwLjA1O1xuICAgICAgICAgIGNhc2UgTGF5ZXJUeXBlLkNhclBhcms6XG4gICAgICAgICAgICByZXR1cm4gY29uZmlkZW5jZSAtIDAuMDU7XG4gICAgICAgICAgY2FzZSBMYXllclR5cGUuQmlrZVBhcms6XG4gICAgICAgICAgICByZXR1cm4gY29uZmlkZW5jZSAtIDAuMDU7XG4gICAgICAgICAgY2FzZSBMYXllclR5cGUuVmVoaWNsZVJlbnRhbFN0YXRpb246XG4gICAgICAgICAgICByZXR1cm4gY29uZmlkZW5jZSAtIDAuMDQ7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBjb25maWRlbmNlO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcmVzdWx0ID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdC5wcm9wZXJ0aWVzLnNob3J0TmFtZSkge1xuICAgICAgICAgIHJldHVybiB0ZXN0U2hvcnROYW1lTWF0Y2hlc0xpbmVXaXRoTnVtYmVyc0FuZExldHRlcnMoXG4gICAgICAgICAgICByZXN1bHQucHJvcGVydGllcy5zaG9ydE5hbWUsXG4gICAgICAgICAgKVxuICAgICAgICAgICAgPyBzcGxpdFNob3J0TmFtZUF0TGV0dGVycyhyZXN1bHQucHJvcGVydGllcy5zaG9ydE5hbWUpWzBdXG4gICAgICAgICAgICA6IHJlc3VsdC5wcm9wZXJ0aWVzLnNob3J0TmFtZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSxcbiAgICAgIHJlc3VsdCA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQucHJvcGVydGllcy5zaG9ydE5hbWUpIHtcbiAgICAgICAgICByZXR1cm4gdGVzdFNob3J0TmFtZU1hdGNoZXNMaW5lV2l0aE51bWJlcnNBbmRMZXR0ZXJzKFxuICAgICAgICAgICAgcmVzdWx0LnByb3BlcnRpZXMuc2hvcnROYW1lLFxuICAgICAgICAgIClcbiAgICAgICAgICAgID8gc3BsaXRTaG9ydE5hbWVBdExldHRlcnMocmVzdWx0LnByb3BlcnRpZXMuc2hvcnROYW1lKVsxXVxuICAgICAgICAgICAgOiByZXN1bHQucHJvcGVydGllcy5zaG9ydE5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0sXG4gICAgICAncHJvcGVydGllcy5sb25nTmFtZScsXG4gICAgXSxcbiAgICBbJ2Rlc2MnLCAnZGVzYycsICdhc2MnLCAnYXNjJywgJ2FzYyddLFxuICApO1xuXG4gIHJldHVybiB1bmlxV2l0aChvcmRlcmVkUmVzdWx0cywgaXNEdXBsaWNhdGUpO1xufTtcblxuLyoqXG4gKiBQYXJzZXMgc3RvcCdzIG5hbWUgd2l0aG91dCBzdG9wIGNvZGUgZnJvbSBhIHN0b3AgbmFtZSBmcm9tIGdlb2NvZGluZyByZXN1bHRzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsIHN0b3AncyBuYW1lIGZyb20gZ2VvY29kaW5nIHJlc3VsdHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RvcENvZGUgc3RvcCBjb2RlLlxuICovXG5leHBvcnQgY29uc3QgZ2V0U3RvcE5hbWUgPSAobmFtZSwgc3RvcENvZGUpID0+IHtcbiAgaWYgKFxuICAgIHN0b3BDb2RlICE9PSB1bmRlZmluZWQgJiZcbiAgICBzdG9wQ29kZSAhPT0gbnVsbCAmJlxuICAgIG5hbWUubGFzdEluZGV4T2Yoc3RvcENvZGUpICE9PSAtMVxuICApIHtcbiAgICByZXR1cm4gbmFtZS5zdWJzdHJpbmcoMCwgbmFtZS5sYXN0SW5kZXhPZihzdG9wQ29kZSkgLSAxKTtcbiAgfVxuICByZXR1cm4gbmFtZTtcbn07XG4iLCJpbXBvcnQgZ2V0IGZyb20gJ2xvZGFzaC9nZXQnO1xuXG4vKipcbiAqIEZ1bmN0aW9uIHRoYXQgZmlsdGVycyBsaXN0IG1hdGNoaW5nIHRvIGlucHV0LlxuICpcbiAqIEBuYW1lIGZpbHRlck1hdGNoaW5nVG9JbnB1dFxuICogQHBhcmFtIHtBcnJheX0gbGlzdCBMaXN0IGNvbnRhaW5pbiBvYmplY3RzIGUuZyggIHtcbiAqICAgICAgICAgdHlwZTogJ0ZlYXR1cmUnXG4gKiAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAqICAgICAgICAgICBsYWJlbDogJ3Rlc3RhZGRyZXNzNCcsXG4gKiAgICAgICAgICAgbGF5ZXI6ICdhZGRyZXNzJyxcbiAqICAgICAgICAgICBuYW1lOiAndGVzdGFkZHJlc3M0JyxcbiAqICAgICAgICAgfSxcbiAqICAgICAgICAgZ2VvbWV0cnk6IHsgY29vcmRpbmF0ZXM6IFtsb24sIGxhdF0gfSxcbiAqICAgICAgIH0sKVxuICogQHBhcmFtIHtTdHJpbmd9IElucHV0IElucHV0IGdpdmVuIGZvciBmaWx0ZXJpbmcgdGhlIGxpc3RcbiAqIEBwYXJhbSB7QXJyYXl9IGZpZWxkcyBMaXN0IG9mIGZpZWxkcyB0aGF0IGxpc3QgaXMgZmlsdGVyZWQgYnkgZS5nIChbcHJvcGVydGllcy5sYWJlbCwgcHJvcGVydGllcy5uYW1lXSlcbiAqIEByZXR1cm5zIHtBcnJheX0gRmlsdGVyZWQgQXJyYXkuXG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtdXRpbC5maWx0ZXJNYXRjaGluZ1RvSW5wdXQoW3t0eXBlOiBmZWF0dXJlLCBwcm9wZXJ0aWVzIHsgLi4uIG5hbWU6IHRlc3RhZGRyZXNzNCB9IC4uLiB9XSwgJ3Rlc3RhZGRyZXNzNCcsICdwcm9wZXJ0aWVzLm5hbWUnKTtcbiAqIC8vPSBMaXN0IGNvbnRhaW5pbmcgb2JqZWN0IHdpdGggZ2l2ZW4gbmFtZS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZmlsdGVyTWF0Y2hpbmdUb0lucHV0KGxpc3QsIElucHV0LCBmaWVsZHMpIHtcbiAgaWYgKHR5cGVvZiBJbnB1dCA9PT0gJ3N0cmluZycgJiYgSW5wdXQubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGlucHV0ID0gSW5wdXQudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgY29uc3QgbXVsdGlXb3JkID0gaW5wdXQuaW5jbHVkZXMoJyAnKSB8fCBpbnB1dC5pbmNsdWRlcygnLCcpO1xuICAgIHJldHVybiBsaXN0LmZpbHRlcihpdGVtID0+IHtcbiAgICAgIGxldCBwYXJ0cyA9IFtdO1xuICAgICAgZmllbGRzLmZvckVhY2gocE5hbWUgPT4ge1xuICAgICAgICBsZXQgdmFsdWUgPSBnZXQoaXRlbSwgcE5hbWUpO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAhbXVsdGlXb3JkICYmXG4gICAgICAgICAgKHBOYW1lID09PSAncHJvcGVydGllcy5sYWJlbCcgfHwgcE5hbWUgPT09ICdhZGRyZXNzJykgJiZcbiAgICAgICAgICB2YWx1ZVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBzcGVjaWFsIGNhc2U6IGRyb3AgbGFzdCBwYXJ0cyBpLmUuIGNpdHkgYW5kIG5laWdoYm91cmhvb2RcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnNwbGl0KCcsJyk7XG4gICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgIHZhbHVlLnNwbGljZSh2YWx1ZS5sZW5ndGggLSAyLCAyKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHZhbHVlLnNwbGljZSh2YWx1ZS5sZW5ndGggLSAxLCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZS5qb2luKCcsJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKG11bHRpV29yZCkge1xuICAgICAgICAgICAgcGFydHMgPSBwYXJ0cy5jb25jYXQodmFsdWUudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcnRzID0gcGFydHMuY29uY2F0KFxuICAgICAgICAgICAgICB2YWx1ZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLywvZywgJyAnKS5zcGxpdCgnICcpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAocGFydHNbaV0uaW5kZXhPZihpbnB1dCkgPT09IDApIHtcbiAgICAgICAgICAvLyBhY2NlcHQgbWF0Y2ggb25seSBhdCB3b3JkIHN0YXJ0XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBsaXN0O1xufVxuIiwiLyoqXG4gKiBTZXJpYWxpemVzIG9iamVjdHNcbiAqXG4gKiBAbmFtZSBzZXJpYWxpemVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogT2JqZWN0IHRvIGJlIHNlcmlhbGl6ZWRcbiAqIEBwYXJhbSB7QW55fSBwcmVmaXhcbiAqIEByZXR1cm5zIHtTdHJpbmd9IFNlcmlhbGl6ZWQgb2JqZWN0XG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwuc2VyaWFsaXplKHBhcmFtMSwgcGFyYW0yKTtcbiAqIC8vPXRydWVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2VyaWFsaXplKG9iaiwgcHJlZml4KSB7XG4gIGlmICghb2JqKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopXG4gICAgLm1hcChwID0+IHtcbiAgICAgIGNvbnN0IGsgPSBwcmVmaXggfHwgcDtcbiAgICAgIGNvbnN0IHYgPSBvYmpbcF07XG5cbiAgICAgIHJldHVybiB0eXBlb2YgdiA9PT0gJ29iamVjdCdcbiAgICAgICAgPyBzZXJpYWxpemUodiwgaylcbiAgICAgICAgOiBgJHtlbmNvZGVVUklDb21wb25lbnQoayl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHYpfWA7XG4gICAgfSlcbiAgICAuam9pbignJicpO1xufVxuIiwiaW1wb3J0IHNlcmlhbGl6ZSBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtc2VyaWFsaXplJztcbi8qKlxuICogIFJldHVybiBQcm9taXNlIGZvciBhIHVybCBqc29uIGdldCByZXF1ZXN0XG4gKlxuICogQG5hbWUgZ2V0SnNvblxuICogQHBhcmFtIHtTdHJpbmd9IHVybFxuICogQHBhcmFtIHtBcnJheX0gcGFyYW1zXG4gKiBAcmV0dXJucyB7T2JqZWN0fSByZXNwb25zZVxuICogQGV4YW1wbGVcbiAqIGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLmdldEpzb24ocGFyYW0xLCBwYXJhbTIpO1xuICogLy89cmVzcG9uc2VcbiAqL1xuY29uc3QgYXhpb3MgPSByZXF1aXJlKCdheGlvcycpLmRlZmF1bHQ7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEpzb24odXJsLCBwYXJhbXMpIHtcbiAgcmV0dXJuIGF4aW9zXG4gICAgLmdldChcbiAgICAgIGVuY29kZVVSSSh1cmwpICtcbiAgICAgICAgKHBhcmFtc1xuICAgICAgICAgID8gKHVybC5zZWFyY2goL1xcPy8pID09PSAtMSA/ICc/JyA6ICcmJykgKyBzZXJpYWxpemUocGFyYW1zKVxuICAgICAgICAgIDogJycpLFxuICAgICAge1xuICAgICAgICB0aW1lb3V0OiAxMDAwMCxcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcblxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgQWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIClcbiAgICAudGhlbihyZXMgPT4ge1xuICAgICAgcmV0dXJuIHJlcy5kYXRhO1xuICAgIH0pO1xufVxuIiwiaW1wb3J0IGdldEpzb24gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1qc29uJztcblxuY29uc3QgREVGQVVMVF9QRUxJQVNfVVJMID0gJ2h0dHBzOi8vYXBpLmRpZ2l0cmFuc2l0LmZpL2dlb2NvZGluZy92MS9zZWFyY2gnO1xuLyoqXG4gKiA8REVTQ1JJUFRJT04+XG4gKlxuICogQG5hbWUgZ2V0R2VvY29kaW5nUmVzdWx0c1xuICogQHBhcmFtIHtTdHJpbmd9IHNlYXJjaFN0cmluZ1xuICogQHBhcmFtIHtTdHJpbmd9IHNlYXJjaFBhcmFtcyAoT3B0aW9uYWwpIFBhcmFtZXRlcnMgYXBwZW5kZWQgdG8gdXJsLCBiYXNpY2FsbHkgYm94IC8gcG9seWdvbiB0byByZXN0cmljdCBzZWFyY2ggYXJlYVxuICogQHBhcmFtIHtTdHJpbmd9IGxhbmcgKE9wdGlvbmFsKSBzZWFyY2ggbGFuZ3VhZ2VcbiAqIEBwYXJhbSB7T2JqZWN0fSBmb2N1c1BvaW50IChPcHRpb25hbCkgT3duIFBvc2l0aW9uIChQRUxJQVMgQVBJKVxuICogQHBhcmFtIHtTdHJpbmd9IHNvdXJjZXMgKE9wdGlvbmFsKSBzZWFyY2ggc291cmNlcyAoZS5nIE9TTSwgR1RGUy4uKVxuICogQHBhcmFtIHtPYmplY3R9IG1pbmltYWxSZWdleHAgKE9wdGlvbmFsKSBSZWdleHAgZm9yIHRlc3RpbmdcbiAqIEBwYXJhbSB7Kn0gZ2VvY29kaW5nTGF5ZXJzIChPcHRpb25hbCkgQXJyYXkgb2Ygc3RyaW5ncyB0aGF0IGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIGxheWVycyBpcyBzZWFyY2hlZCwgZS5nLiBbJ3ZlbnVlJywgJ2FkZHJlc3MnLCAnc3RvcCddXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBSZXN1bHRzIGluIEpTT04gZm9ybVxuICogQGV4YW1wbGVcbiAqIGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLmdldEdlb2NvZGluZ1Jlc3VsdHMoXCJyZXN1bHRcIik7XG4gKiAvLz0gZS5nLiB7dGV4dDpcInJlc3VsdFwifVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRHZW9jb2RpbmdSZXN1bHRzKFxuICBzZWFyY2hTdHJpbmcsXG4gIHNlYXJjaFBhcmFtcyxcbiAgbGFuZyxcbiAgZm9jdXNQb2ludCxcbiAgc291cmNlcyxcbiAgcGVsaWFzVXJsLFxuICBtaW5pbWFsUmVnZXhwLFxuICBnZW9jb2RpbmdMYXllcnMsXG4pIHtcbiAgY29uc3QgdGV4dCA9IHNlYXJjaFN0cmluZyA/IHNlYXJjaFN0cmluZy50cmltKCkgOiBudWxsO1xuICBpZiAoXG4gICAgdGV4dCA9PT0gdW5kZWZpbmVkIHx8XG4gICAgdGV4dCA9PT0gbnVsbCB8fFxuICAgIHRleHQubGVuZ3RoIDwgMSB8fFxuICAgIChtaW5pbWFsUmVnZXhwICYmICFtaW5pbWFsUmVnZXhwLnRlc3QodGV4dCkpXG4gICkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuICB9XG4gIGNvbnN0IFBFTElBU19VUkwgPSBwZWxpYXNVcmwgfHwgREVGQVVMVF9QRUxJQVNfVVJMO1xuICBsZXQgb3B0cyA9IHsgdGV4dCwgLi4uc2VhcmNoUGFyYW1zLCAuLi5mb2N1c1BvaW50LCBsYW5nIH07XG4gIGlmIChzb3VyY2VzKSB7XG4gICAgb3B0cyA9IHsgLi4ub3B0cywgc291cmNlcyB9O1xuICB9XG4gIGlmIChnZW9jb2RpbmdMYXllcnMpIHtcbiAgICBjb25zdCBsYXllcnMgPSBnZW9jb2RpbmdMYXllcnMudG9TdHJpbmcoKTtcbiAgICBvcHRzID0geyAuLi5vcHRzLCBsYXllcnMgfTtcbiAgfVxuICByZXR1cm4gZ2V0SnNvbihQRUxJQVNfVVJMLCBvcHRzKS50aGVuKHJlcyA9PiB7XG4gICAgcmV0dXJuIHJlcy5mZWF0dXJlcztcbiAgfSk7XG59XG4iLCJpbXBvcnQgZGVib3VuY2UgZnJvbSAnbG9kYXNoL2RlYm91bmNlJztcbmltcG9ydCBmbGF0dGVuIGZyb20gJ2xvZGFzaC9mbGF0dGVuJztcbmltcG9ydCB0YWtlIGZyb20gJ2xvZGFzaC90YWtlJztcbmltcG9ydCB7XG4gIHNvcnRTZWFyY2hSZXN1bHRzLFxuICBpc1N0b3AsXG59IGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1oZWxwZXJzJztcbmltcG9ydCBmaWx0ZXJNYXRjaGluZ1RvSW5wdXQgZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWZpbHRlci1tYXRjaGluZy10by1pbnB1dCc7XG5pbXBvcnQgZ2V0R2VvY29kaW5nUmVzdWx0cyBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWdlb2NvZGluZy1yZXN1bHRzJztcbmltcG9ydCBnZXRKc29uIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtanNvbic7XG5cbmZ1bmN0aW9uIGdldFN0b3BzRnJvbUdlb2NvZGluZyhzdG9wcywgVVJMX1BFTElBU19QTEFDRSkge1xuICBpZiAoIXN0b3BzIHx8IHN0b3BzLmxlbmd0aCA8IDEpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcbiAgfVxuICBsZXQgZ2lkcyA9ICcnO1xuICBjb25zdCBzdG9wc1dpdGhHaWRzID0gc3RvcHMubWFwKHN0b3AgPT4ge1xuICAgIGNvbnN0IHR5cGUgPSBzdG9wLnR5cGUgPT09ICdzdG9wJyA/ICdzdG9wJyA6ICdzdGF0aW9uJztcbiAgICBsZXQgZ2lkID0gYGd0ZnMke3N0b3AuZ3Rmc0lkLnNwbGl0KCc6JylbMF0udG9Mb3dlckNhc2UoKX06JHt0eXBlfTpHVEZTOiR7XG4gICAgICBzdG9wLmd0ZnNJZFxuICAgIH1gO1xuICAgIGlmIChzdG9wLmNvZGUpIHtcbiAgICAgIGdpZCArPSBgIyR7c3RvcC5jb2RlfWA7XG4gICAgfVxuICAgIGdpZHMgKz0gYCR7Z2lkfSxgO1xuICAgIHJldHVybiB7IC4uLnN0b3AsIGdpZCB9O1xuICB9KTtcbiAgY29uc3Qgc3RvcFN0YXRpb25NYXAgPSBzdG9wc1dpdGhHaWRzLnJlZHVjZShmdW5jdGlvbiByZWR1KFxuICAgIG1hcCxcbiAgICBzdG9wT3JTdGF0aW9uLFxuICApIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICBtYXBbc3RvcE9yU3RhdGlvbi5naWRdID0gc3RvcE9yU3RhdGlvbjtcbiAgICByZXR1cm4gbWFwO1xuICB9LCB7fSk7XG4gIHJldHVybiBnZXRKc29uKFVSTF9QRUxJQVNfUExBQ0UsIHtcbiAgICBpZHM6IGdpZHMuc2xpY2UoMCwgLTEpLFxuICAgIC8vIGxhbmc6IGNvbnRleHQuZ2V0U3RvcmUoJ1ByZWZlcmVuY2VzU3RvcmUnKS5nZXRMYW5ndWFnZSgpLCBUT0RPIGVuYWJsZSB0aGlzIHdoZW4gT1RQIHN1cHBvcnRzIHRyYW5zbGF0aW9uc1xuICB9KS50aGVuKHJlcyA9PiB7XG4gICAgcmV0dXJuIHJlcy5mZWF0dXJlcy5tYXAoc3RvcCA9PiB7XG4gICAgICBjb25zdCBmYXZvdXJpdGUgPSB7XG4gICAgICAgIHR5cGU6ICdGYXZvdXJpdGVTdG9wJyxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGFkZGVuZHVtOiBzdG9wLnByb3BlcnRpZXMuYWRkZW5kdW0sXG4gICAgICAgICAgZ2lkOiBzdG9wU3RhdGlvbk1hcFtzdG9wLnByb3BlcnRpZXMuZ2lkXS5naWQsXG4gICAgICAgICAgY29kZTogc3RvcFN0YXRpb25NYXBbc3RvcC5wcm9wZXJ0aWVzLmdpZF0uY29kZSxcbiAgICAgICAgICBndGZzSWQ6IHN0b3BTdGF0aW9uTWFwW3N0b3AucHJvcGVydGllcy5naWRdLmd0ZnNJZCxcbiAgICAgICAgICBsYXN0VXBkYXRlZDogc3RvcFN0YXRpb25NYXBbc3RvcC5wcm9wZXJ0aWVzLmdpZF0ubGFzdFVwZGF0ZWQsXG4gICAgICAgICAgZmF2b3VyaXRlSWQ6IHN0b3BTdGF0aW9uTWFwW3N0b3AucHJvcGVydGllcy5naWRdLmZhdm91cml0ZUlkLFxuICAgICAgICAgIGFkZHJlc3M6IHN0b3AucHJvcGVydGllcy5sYWJlbCxcbiAgICAgICAgICBsYXllcjogaXNTdG9wKHN0b3AucHJvcGVydGllcykgPyAnZmF2b3VyaXRlU3RvcCcgOiAnZmF2b3VyaXRlU3RhdGlvbicsXG4gICAgICAgIH0sXG4gICAgICAgIGdlb21ldHJ5OiBzdG9wLmdlb21ldHJ5LFxuICAgICAgfTtcbiAgICAgIHJldHVybiBmYXZvdXJpdGU7XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gZmlsdGVyRmF2b3VyaXRlTG9jYXRpb25zKGZhdm91cml0ZXMsIGlucHV0KSB7XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoXG4gICAgZmlsdGVyTWF0Y2hpbmdUb0lucHV0KGZhdm91cml0ZXMsIGlucHV0LCBbJ2FkZHJlc3MnLCAnbmFtZSddKS5tYXAoaXRlbSA9PiAoe1xuICAgICAgdHlwZTogJ0Zhdm91cml0ZVBsYWNlJyxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgbGFiZWw6IGl0ZW0ubmFtZSxcbiAgICAgICAgbGF5ZXI6ICdmYXZvdXJpdGVQbGFjZScsXG4gICAgICB9LFxuICAgICAgZ2VvbWV0cnk6IHsgdHlwZTogJ1BvaW50JywgY29vcmRpbmF0ZXM6IFtpdGVtLmxvbiwgaXRlbS5sYXRdIH0sXG4gICAgfSkpLFxuICApO1xufVxuZnVuY3Rpb24gc2VsZWN0UG9zaXRpb25Gb21NYXAoaW5wdXQpIHtcbiAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycgfHwgaW5wdXQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdTZWxlY3RGcm9tTWFwJyxcbiAgICAgICAgYWRkcmVzczogJ1NlbGVjdEZyb21NYXAnLFxuICAgICAgICBsYXQ6IG51bGwsXG4gICAgICAgIGxvbjogbnVsbCxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGxhYmVsSWQ6ICdzZWxlY3QtZnJvbS1tYXAnLFxuICAgICAgICAgIGxheWVyOiAnc2VsZWN0RnJvbU1hcCcsXG4gICAgICAgICAgYWRkcmVzczogJ1NlbGVjdEZyb21NYXAnLFxuICAgICAgICAgIGxhdDogbnVsbCxcbiAgICAgICAgICBsb246IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIGdlb21ldHJ5OiB7XG4gICAgICAgICAgdHlwZTogJ1BvaW50JyxcbiAgICAgICAgICBjb29yZGluYXRlczogW10sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF0pO1xuICB9XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50UG9zaXRpb25JZkVtcHR5KGlucHV0LCBwb3NpdGlvbikge1xuICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJyB8fCBpbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ0N1cnJlbnRMb2NhdGlvbicsXG4gICAgICAgIGFkZHJlc3M6IHBvc2l0aW9uLmFkZHJlc3MsXG4gICAgICAgIGxhdDogcG9zaXRpb24ubGF0LFxuICAgICAgICBsb246IHBvc2l0aW9uLmxvbixcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGxhYmVsSWQ6ICd1c2Utb3duLXBvc2l0aW9uJyxcbiAgICAgICAgICBsYXllcjogJ2N1cnJlbnRQb3NpdGlvbicsXG4gICAgICAgICAgYWRkcmVzczogcG9zaXRpb24uYWRkcmVzcyxcbiAgICAgICAgICBsYXQ6IHBvc2l0aW9uLmxhdCxcbiAgICAgICAgICBsb246IHBvc2l0aW9uLmxvbixcbiAgICAgICAgfSxcbiAgICAgICAgZ2VvbWV0cnk6IHtcbiAgICAgICAgICB0eXBlOiAnUG9pbnQnLFxuICAgICAgICAgIGNvb3JkaW5hdGVzOiBbcG9zaXRpb24ubG9uLCBwb3NpdGlvbi5sYXRdLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICBdKTtcbiAgfVxuXG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xufVxuXG5mdW5jdGlvbiBzZWxlY3RGcm9tT3duTG9jYXRpb25zKGlucHV0KSB7XG4gIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnIHx8IGlucHV0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycsXG4gICAgICAgIGFkZHJlc3M6ICdTZWxlY3RGcm9tT3duTG9jYXRpb25zJyxcbiAgICAgICAgbGF0OiBudWxsLFxuICAgICAgICBsb246IG51bGwsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBsYWJlbElkOiAnc2VsZWN0LWZyb20tb3duLWxvY2F0aW9ucycsXG4gICAgICAgICAgbGF5ZXI6ICdvd25Mb2NhdGlvbnMnLFxuICAgICAgICAgIGFkZHJlc3M6ICdzZWxlY3RGcm9tT3duTG9jYXRpb25zJyxcbiAgICAgICAgICBsYXQ6IG51bGwsXG4gICAgICAgICAgbG9uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICBnZW9tZXRyeToge1xuICAgICAgICAgIHR5cGU6ICdQb2ludCcsXG4gICAgICAgICAgY29vcmRpbmF0ZXM6IFtdLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICBdKTtcbiAgfVxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcbn1cblxuZnVuY3Rpb24gZ2V0QmFja1N1Z2dlc3Rpb24oKSB7XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoW1xuICAgIHtcbiAgICAgIHR5cGU6ICdiYWNrJyxcbiAgICAgIGFkZHJlc3M6ICdiYWNrJyxcbiAgICAgIGxhdDogbnVsbCxcbiAgICAgIGxvbjogbnVsbCxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgbGFiZWxJZDogJ2JhY2snLFxuICAgICAgICBsYXllcjogJ2JhY2snLFxuICAgICAgICBhZGRyZXNzOiAnYmFjaycsXG4gICAgICAgIGxhdDogbnVsbCxcbiAgICAgICAgbG9uOiBudWxsLFxuICAgICAgfSxcbiAgICAgIGdlb21ldHJ5OiB7XG4gICAgICAgIHR5cGU6ICdQb2ludCcsXG4gICAgICAgIGNvb3JkaW5hdGVzOiBbXSxcbiAgICAgIH0sXG4gICAgfSxcbiAgXSk7XG59XG5cbmZ1bmN0aW9uIGZpbHRlckZhdm91cml0ZVN0b3BzKHN0b3BzQW5kU3RhdGlvbnMsIGlucHV0LCB1c2VTdG9wcywgdXNlU3RhdGlvbnMpIHtcbiAgcmV0dXJuIHN0b3BzQW5kU3RhdGlvbnMudGhlbihzdG9wc1N0YXRpb25zID0+IHtcbiAgICBjb25zdCBjYW5kaWRhdGVzID0gc3RvcHNTdGF0aW9ucy5maWx0ZXIocyA9PlxuICAgICAgcy50eXBlID09PSAnc3RvcCcgPyB1c2VTdG9wcyA6IHVzZVN0YXRpb25zLFxuICAgICk7XG4gICAgcmV0dXJuIGZpbHRlck1hdGNoaW5nVG9JbnB1dChjYW5kaWRhdGVzLCBpbnB1dCwgW1xuICAgICAgJ3Byb3BlcnRpZXMubmFtZScsXG4gICAgICAncHJvcGVydGllcy5uYW1lJyxcbiAgICAgICdwcm9wZXJ0aWVzLmFkZHJlc3MnLFxuICAgIF0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZmlsdGVyT2xkU2VhcmNoZXMob2xkU2VhcmNoZXMsIGlucHV0LCBkcm9wTGF5ZXJzKSB7XG4gIGxldCBtYXRjaGluZ09sZFNlYXJjaGVzID0gZmlsdGVyTWF0Y2hpbmdUb0lucHV0KG9sZFNlYXJjaGVzLCBpbnB1dCwgW1xuICAgICdwcm9wZXJ0aWVzLm5hbWUnLFxuICAgICdwcm9wZXJ0aWVzLmxhYmVsJyxcbiAgICAncHJvcGVydGllcy5hZGRyZXNzJyxcbiAgICAncHJvcGVydGllcy5zaG9ydE5hbWUnLFxuICAgICdwcm9wZXJ0aWVzLmxvbmdOYW1lJyxcbiAgXSk7XG4gIGlmIChkcm9wTGF5ZXJzKSB7XG4gICAgLy8gZG9uJ3Qgd2FudCB0aGVzZVxuICAgIG1hdGNoaW5nT2xkU2VhcmNoZXMgPSBtYXRjaGluZ09sZFNlYXJjaGVzLmZpbHRlcihcbiAgICAgIGl0ZW0gPT4gIWRyb3BMYXllcnMuaW5jbHVkZXMoaXRlbS5wcm9wZXJ0aWVzLmxheWVyKSxcbiAgICApO1xuICB9XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoXG4gICAgdGFrZShtYXRjaGluZ09sZFNlYXJjaGVzLCAxMCkubWFwKGl0ZW0gPT4ge1xuICAgICAgY29uc3QgbmV3SXRlbSA9IHtcbiAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgdHlwZTogJ09sZFNlYXJjaCcsXG4gICAgICAgIHRpbWV0YWJsZUNsaWNrZWQ6IGZhbHNlLCAvLyByZXNldCBsYXRlc3Qgc2VsZWN0aW9uIGFjdGlvblxuICAgICAgICBhcnJvd0NsaWNrZWQ6IGZhbHNlLFxuICAgICAgfTtcbiAgICAgIGRlbGV0ZSBuZXdJdGVtLnByb3BlcnRpZXMuY29uZmlkZW5jZTtcbiAgICAgIHJldHVybiBuZXdJdGVtO1xuICAgIH0pLFxuICApO1xufVxuXG5mdW5jdGlvbiBoYXNGYXZvdXJpdGVzKHNlYXJjaENvbnRleHQpIHtcbiAgY29uc3QgZmF2b3VyaXRlTG9jYXRpb25zID0gc2VhcmNoQ29udGV4dC5nZXRGYXZvdXJpdGVMb2NhdGlvbnMoXG4gICAgc2VhcmNoQ29udGV4dC5jb250ZXh0LFxuICApO1xuICBpZiAoZmF2b3VyaXRlTG9jYXRpb25zPy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb25zdCBmYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnMgPVxuICAgIHNlYXJjaENvbnRleHQuZ2V0RmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zKHNlYXJjaENvbnRleHQuY29udGV4dCk7XG4gIGlmIChmYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnM/Lmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBjb25zdCBmYXZvdXJpdGVTdG9wcyA9IHNlYXJjaENvbnRleHQuZ2V0RmF2b3VyaXRlU3RvcHMoc2VhcmNoQ29udGV4dC5jb250ZXh0KTtcbiAgcmV0dXJuIGZhdm91cml0ZVN0b3BzPy5sZW5ndGggPiAwO1xufVxuXG5jb25zdCByb3V0ZUxheWVycyA9IFtcbiAgJ3JvdXRlLVRSQU0nLFxuICAncm91dGUtQlVTJyxcbiAgJ3JvdXRlLVJBSUwnLFxuICAncm91dGUtRkVSUlknLFxuICAncm91dGUtU1VCV0FZJyxcbiAgJ3JvdXRlLUFJUlBMQU5FJyxcbiAgJ3JvdXRlLUZVTklDVUxBUicsXG5dO1xuY29uc3QgbG9jYXRpb25MYXllcnMgPSBbJ3ZlbnVlJywgJ2FkZHJlc3MnLCAnc3RyZWV0J107XG5jb25zdCBwYXJraW5nTGF5ZXJzID0gWydjYXJwYXJrJywgJ2Jpa2VwYXJrJ107XG5jb25zdCBzdG9wTGF5ZXJzID0gWydzdG9wJywgJ3N0YXRpb24nXTtcblxuLyoqXG4gKiBFeGVjdXRlcyB0aGUgc2VhcmNoXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VhcmNoUmVzdWx0cyhcbiAgdGFyZ2V0cyxcbiAgc291cmNlcyxcbiAgdHJhbnNwb3J0TW9kZSxcbiAgc2VhcmNoQ29udGV4dCxcbiAgZmlsdGVyUmVzdWx0cyxcbiAgZ2VvY29kaW5nU2l6ZSxcbiAgeyBpbnB1dCB9LFxuICBjYWxsYmFjayxcbiAgcGF0aE9wdHMsXG4gIHJlZlBvaW50LFxuKSB7XG4gIGNvbnN0IHtcbiAgICBnZXRQb3NpdGlvbnMsXG4gICAgZ2V0RmF2b3VyaXRlTG9jYXRpb25zLFxuICAgIGdldE9sZFNlYXJjaGVzLFxuICAgIGdldEZhdm91cml0ZVN0b3BzLFxuICAgIHBhcmtpbmdBcmVhU291cmNlcyxcbiAgICBnZXRMYW5ndWFnZSxcbiAgICBnZXRTdG9wQW5kU3RhdGlvbnNRdWVyeSxcbiAgICBnZXRGYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnNRdWVyeSxcbiAgICBnZXRGYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnMsXG4gICAgZ2V0RmF2b3VyaXRlUm91dGVzUXVlcnksXG4gICAgZ2V0RmF2b3VyaXRlUm91dGVzLFxuICAgIGdldFJvdXRlc1F1ZXJ5LFxuICAgIGNvbnRleHQsXG4gICAgaXNQZWxpYXNMb2NhdGlvbkF3YXJlOiBsb2NhdGlvbkF3YXJlLFxuICAgIG1pbmltYWxSZWdleHAsXG4gICAgbGluZVJlZ2V4cCxcbiAgICBVUkxfUEVMSUFTLFxuICAgIFVSTF9QRUxJQVNfUExBQ0UsXG4gICAgZmVlZElEcyxcbiAgICBnZW9jb2RpbmdTZWFyY2hQYXJhbXMsXG4gICAgZ2VvY29kaW5nU291cmNlcyxcbiAgICBnZXRGdXR1cmVSb3V0ZXMsXG4gICAgY2l0eUJpa2VOZXR3b3JrcyxcbiAgfSA9IHNlYXJjaENvbnRleHQ7XG4gIC8vIGlmIG5vIHRhcmdldHMgYXJlIHByb3ZpZGVkLCBzZWFyY2ggdGhlbSBhbGwuXG4gIGNvbnN0IGFsbFRhcmdldHMgPSAhdGFyZ2V0cyB8fCB0YXJnZXRzLmxlbmd0aCA9PT0gMDtcbiAgLy8gaWYgbm8gc291cmNlcyBhcmUgcHJvdmlkZWQsIHVzZSB0aGVtIGFsbC5cbiAgY29uc3QgYWxsU291cmNlcyA9ICFzb3VyY2VzIHx8IHNvdXJjZXMubGVuZ3RoID09PSAwO1xuICBjb25zdCBwb3NpdGlvbiA9IGdldFBvc2l0aW9ucyhjb250ZXh0KTtcbiAgY29uc3Qgc2VhcmNoQ29tcG9uZW50cyA9IFtdO1xuICBjb25zdCBzZWFyY2hlcyA9IHsgdHlwZTogJ2FsbCcsIHRlcm06IGlucHV0LCByZXN1bHRzOiBbXSB9O1xuICBjb25zdCBsYW5ndWFnZSA9IGdldExhbmd1YWdlKGNvbnRleHQpO1xuICBjb25zdCBmb2N1c1BvaW50ID1cbiAgICBsb2NhdGlvbkF3YXJlICYmIHJlZlBvaW50Py5sYXQgJiYgcmVmUG9pbnQ/LmxvblxuICAgICAgPyB7XG4gICAgICAgICAgLy8gUm91bmQgY29vcmRpbmF0ZXMgdG8gYXBwcm94IDEga20sIGluIG9yZGVyIHRvIGltcHJvdmUgY2FjaGluZ1xuICAgICAgICAgICdmb2N1cy5wb2ludC5sYXQnOiByZWZQb2ludC5sYXQudG9GaXhlZCgzKSxcbiAgICAgICAgICAnZm9jdXMucG9pbnQubG9uJzogcmVmUG9pbnQubG9uLnRvRml4ZWQoMyksXG4gICAgICAgIH1cbiAgICAgIDoge307XG4gIGNvbnN0IG1vZGUgPSB0cmFuc3BvcnRNb2RlID8gdHJhbnNwb3J0TW9kZS5zcGxpdCgnLScpWzFdIDogdW5kZWZpbmVkO1xuICBpZiAoXG4gICAgdGFyZ2V0cy5pbmNsdWRlcygnQ3VycmVudFBvc2l0aW9uJykgJiZcbiAgICBwb3NpdGlvbi5zdGF0dXMgIT09ICdnZW9sb2NhdGlvbi1ub3Qtc3VwcG9ydGVkJ1xuICApIHtcbiAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goZ2V0Q3VycmVudFBvc2l0aW9uSWZFbXB0eShpbnB1dCwgcG9zaXRpb24pKTtcbiAgfVxuICBpZiAoYWxsVGFyZ2V0cyB8fCB0YXJnZXRzLmluY2x1ZGVzKCdNYXBQb3NpdGlvbicpKSB7XG4gICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKHNlbGVjdFBvc2l0aW9uRm9tTWFwKGlucHV0KSk7XG4gIH1cbiAgaWYgKHRhcmdldHMuaW5jbHVkZXMoJ0Z1dHVyZVJvdXRlcycpKSB7XG4gICAgY29uc3QgaXRlbXMgPSBnZXRGdXR1cmVSb3V0ZXMoY29udGV4dCk7XG4gICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKHRha2UoaXRlbXMsIDMpKTtcbiAgfVxuICBpZiAoXG4gICAgdGFyZ2V0cy5pbmNsdWRlcygnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycpICYmXG4gICAgaGFzRmF2b3VyaXRlcyhzZWFyY2hDb250ZXh0KVxuICApIHtcbiAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goc2VsZWN0RnJvbU93bkxvY2F0aW9ucyhpbnB1dCkpO1xuICB9XG4gIGlmIChhbGxUYXJnZXRzIHx8IHRhcmdldHMuaW5jbHVkZXMoJ0xvY2F0aW9ucycpKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1kZXN0cnVjdHVyaW5nXG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gZ2VvY29kaW5nU2VhcmNoUGFyYW1zO1xuICAgIGlmIChzb3VyY2VzLmluY2x1ZGVzKCdGYXZvdXJpdGUnKSkge1xuICAgICAgY29uc3QgZmF2b3VyaXRlTG9jYXRpb25zID0gZ2V0RmF2b3VyaXRlTG9jYXRpb25zKGNvbnRleHQpO1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBmaWx0ZXJGYXZvdXJpdGVMb2NhdGlvbnMoZmF2b3VyaXRlTG9jYXRpb25zLCBpbnB1dCksXG4gICAgICApO1xuICAgICAgaWYgKHNvdXJjZXMuaW5jbHVkZXMoJ0JhY2snKSkge1xuICAgICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goZ2V0QmFja1N1Z2dlc3Rpb24oKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnRGF0YXNvdXJjZScpKSB7XG4gICAgICBjb25zdCBnZW9jb2RpbmdMYXllcnMgPSBbJ3ZlbnVlJywgJ2FkZHJlc3MnLCAnc3RyZWV0J107XG4gICAgICBpZiAodGFyZ2V0cy5pbmNsdWRlcygnU3RhdGlvbnMnKSkge1xuICAgICAgICBnZW9jb2RpbmdMYXllcnMucHVzaCgnc3RhdGlvbicpOyAvLyBzZWFyY2ggc3RhdGlvbnMgZnJvbSBPU01cbiAgICAgIH1cbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZ2V0R2VvY29kaW5nUmVzdWx0cyhcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICBzZWFyY2hQYXJhbXMsXG4gICAgICAgICAgbGFuZ3VhZ2UsXG4gICAgICAgICAgZm9jdXNQb2ludCxcbiAgICAgICAgICBnZW9jb2RpbmdTb3VyY2VzLmpvaW4oJywnKSxcbiAgICAgICAgICBVUkxfUEVMSUFTLFxuICAgICAgICAgIG1pbmltYWxSZWdleHAsXG4gICAgICAgICAgZ2VvY29kaW5nTGF5ZXJzLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnSGlzdG9yeScpKSB7XG4gICAgICBjb25zdCBsb2NhdGlvbkhpc3RvcnkgPSBnZXRPbGRTZWFyY2hlcyhjb250ZXh0LCAnZW5kcG9pbnQnKTtcbiAgICAgIGNvbnN0IGRyb3BMYXllcnMgPSBbJ2Jpa2VzdGF0aW9uJ107XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4uc3RvcExheWVycyk7XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ucm91dGVMYXllcnMpO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnBhcmtpbmdMYXllcnMpO1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBmaWx0ZXJPbGRTZWFyY2hlcyhsb2NhdGlvbkhpc3RvcnksIGlucHV0LCBkcm9wTGF5ZXJzKSxcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIGlmIChhbGxUYXJnZXRzIHx8IHRhcmdldHMuaW5jbHVkZXMoJ1BhcmtpbmdBcmVhcycpKSB7XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnRGF0YXNvdXJjZScpKSB7XG4gICAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSBnZW9jb2RpbmdTZWFyY2hQYXJhbXM7XG4gICAgICBpZiAoZ2VvY29kaW5nU2l6ZSAmJiBnZW9jb2RpbmdTaXplICE9PSAxMCkge1xuICAgICAgICBzZWFyY2hQYXJhbXMuc2l6ZSA9IGdlb2NvZGluZ1NpemU7XG4gICAgICB9XG4gICAgICBjb25zdCBnZW9jb2RpbmdMYXllcnMgPSBbJ2NhcnBhcmsnLCAnYmlrZXBhcmsnXTtcbiAgICAgIGNvbnN0IGZlZWRJZHMgPSBwYXJraW5nQXJlYVNvdXJjZXMgPyBwYXJraW5nQXJlYVNvdXJjZXMuam9pbignLCcpIDogbnVsbDtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZ2V0R2VvY29kaW5nUmVzdWx0cyhcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICBzZWFyY2hQYXJhbXMsXG4gICAgICAgICAgbGFuZ3VhZ2UsXG4gICAgICAgICAgZm9jdXNQb2ludCxcbiAgICAgICAgICBmZWVkSWRzLFxuICAgICAgICAgIFVSTF9QRUxJQVMsXG4gICAgICAgICAgbWluaW1hbFJlZ2V4cCxcbiAgICAgICAgICBnZW9jb2RpbmdMYXllcnMsXG4gICAgICAgICkudGhlbihyZXN1bHRzID0+IHtcbiAgICAgICAgICBpZiAoZmlsdGVyUmVzdWx0cykge1xuICAgICAgICAgICAgcmV0dXJuIGZpbHRlclJlc3VsdHMocmVzdWx0cywgbW9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0hpc3RvcnknKSkge1xuICAgICAgY29uc3QgaGlzdG9yeSA9IGdldE9sZFNlYXJjaGVzKGNvbnRleHQpO1xuICAgICAgY29uc3QgZHJvcExheWVycyA9IFsnYmlrZXN0YXRpb24nXTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5zdG9wTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5yb3V0ZUxheWVycyk7XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ubG9jYXRpb25MYXllcnMpO1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKGZpbHRlck9sZFNlYXJjaGVzKGhpc3RvcnksIGlucHV0LCBkcm9wTGF5ZXJzKSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgdXNlU3RvcHMgPSB0YXJnZXRzLmluY2x1ZGVzKCdTdG9wcycpO1xuICBjb25zdCB1c2VTdGF0aW9ucyA9IHRhcmdldHMuaW5jbHVkZXMoJ1N0YXRpb25zJyk7XG5cbiAgaWYgKGFsbFRhcmdldHMgfHwgdXNlU3RvcHMgfHwgdXNlU3RhdGlvbnMpIHtcbiAgICBpZiAoc291cmNlcy5pbmNsdWRlcygnRmF2b3VyaXRlJykpIHtcbiAgICAgIGNvbnN0IGZhdm91cml0ZVN0b3BzID0gZ2V0RmF2b3VyaXRlU3RvcHMoY29udGV4dCk7XG4gICAgICBsZXQgc3RvcHNBbmRTdGF0aW9ucztcbiAgICAgIGlmIChmYXZvdXJpdGVTdG9wcy5ldmVyeShzdG9wID0+IHN0b3AudHlwZSA9PT0gJ3N0YXRpb24nKSkge1xuICAgICAgICBzdG9wc0FuZFN0YXRpb25zID0gZ2V0U3RvcHNGcm9tR2VvY29kaW5nKFxuICAgICAgICAgIGZhdm91cml0ZVN0b3BzLFxuICAgICAgICAgIFVSTF9QRUxJQVNfUExBQ0UsXG4gICAgICAgICkudGhlbihyZXN1bHRzID0+IHtcbiAgICAgICAgICBpZiAoZmlsdGVyUmVzdWx0cykge1xuICAgICAgICAgICAgcmV0dXJuIGZpbHRlclJlc3VsdHMocmVzdWx0cywgbW9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0b3BzQW5kU3RhdGlvbnMgPSBnZXRTdG9wQW5kU3RhdGlvbnNRdWVyeShmYXZvdXJpdGVTdG9wcylcbiAgICAgICAgICAudGhlbihmYXZvdXJpdGVzID0+XG4gICAgICAgICAgICBnZXRTdG9wc0Zyb21HZW9jb2RpbmcoZmF2b3VyaXRlcywgVVJMX1BFTElBU19QTEFDRSksXG4gICAgICAgICAgKVxuICAgICAgICAgIC50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgICAgICAgaWYgKGZpbHRlclJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZpbHRlclJlc3VsdHMocmVzdWx0cywgbW9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZmlsdGVyRmF2b3VyaXRlU3RvcHMoc3RvcHNBbmRTdGF0aW9ucywgaW5wdXQsIHVzZVN0b3BzLCB1c2VTdGF0aW9ucyksXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdEYXRhc291cmNlJykpIHtcbiAgICAgIGNvbnN0IGdlb2NvZGluZ0xheWVycyA9IFtdO1xuICAgICAgaWYgKHVzZVN0b3BzKSB7XG4gICAgICAgIGdlb2NvZGluZ0xheWVycy5wdXNoKCdzdG9wJyk7XG4gICAgICB9XG4gICAgICBpZiAodXNlU3RhdGlvbnMpIHtcbiAgICAgICAgZ2VvY29kaW5nTGF5ZXJzLnB1c2goJ3N0YXRpb24nKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9XG4gICAgICAgIGdlb2NvZGluZ1NpemUgJiYgZ2VvY29kaW5nU2l6ZSAhPT0gMTAgPyB7IHNpemU6IGdlb2NvZGluZ1NpemUgfSA6IHt9O1xuICAgICAgaWYgKGdlb2NvZGluZ1NlYXJjaFBhcmFtcyAmJiBnZW9jb2RpbmdTZWFyY2hQYXJhbXNbJ2JvdW5kYXJ5LmNvdW50cnknXSkge1xuICAgICAgICBzZWFyY2hQYXJhbXNbJ2JvdW5kYXJ5LmNvdW50cnknXSA9XG4gICAgICAgICAgZ2VvY29kaW5nU2VhcmNoUGFyYW1zWydib3VuZGFyeS5jb3VudHJ5J107XG4gICAgICB9XG4gICAgICAvLyBhIGxpdHRsZSBoYWNrOiB3aGVuIHNlYXJjaGluZyBsb2NhdGlvbiBkYXRhLCBhdXRvbWF0aWNhbGx5IGRlZHVwZSBzdG9wc1xuICAgICAgLy8gdGhpcyBjb3VsZCBiZSBhIG5ldyBleHBsaWNpdCBwcm9wXG4gICAgICBpZiAoYWxsVGFyZ2V0cyB8fCB0YXJnZXRzLmluY2x1ZGVzKCdMb2NhdGlvbnMnKSkge1xuICAgICAgICBzZWFyY2hQYXJhbXMuZGVkdXBlc3RvcHMgPSAxO1xuICAgICAgfVxuICAgICAgY29uc3QgZmVlZHMgPSBmZWVkSURzLm1hcCh2ID0+IGBndGZzJHt2fWApLmpvaW4oJywnKTtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZ2V0R2VvY29kaW5nUmVzdWx0cyhcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICBzZWFyY2hQYXJhbXMsXG4gICAgICAgICAgbGFuZ3VhZ2UsXG4gICAgICAgICAgZm9jdXNQb2ludCxcbiAgICAgICAgICBmZWVkcyxcbiAgICAgICAgICBVUkxfUEVMSUFTLFxuICAgICAgICAgIG1pbmltYWxSZWdleHAsXG4gICAgICAgICAgZ2VvY29kaW5nTGF5ZXJzLFxuICAgICAgICApLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICAgICAgaWYgKGZpbHRlclJlc3VsdHMpIHtcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJSZXN1bHRzKHJlc3VsdHMsIG1vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdIaXN0b3J5JykpIHtcbiAgICAgIGNvbnN0IHN0b3BIaXN0b3J5ID0gZ2V0T2xkU2VhcmNoZXMoY29udGV4dCkuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgICBpZiAoaXRlbS5wcm9wZXJ0aWVzLmdpZCkge1xuICAgICAgICAgIHJldHVybiBpdGVtLnByb3BlcnRpZXMuZ2lkLmluY2x1ZGVzKCdHVEZTOicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBkcm9wTGF5ZXJzID0gWydiaWtlc3RhdGlvbiddO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnJvdXRlTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5sb2NhdGlvbkxheWVycyk7XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ucGFya2luZ0xheWVycyk7XG4gICAgICBpZiAoIXVzZVN0b3BzKSB7XG4gICAgICAgIGRyb3BMYXllcnMucHVzaCgnc3RvcCcpO1xuICAgICAgfVxuICAgICAgaWYgKCF1c2VTdGF0aW9ucykge1xuICAgICAgICBkcm9wTGF5ZXJzLnB1c2goJ3N0YXRpb24nKTtcbiAgICAgIH1cbiAgICAgIGlmICh0cmFuc3BvcnRNb2RlKSB7XG4gICAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgICBmaWx0ZXJPbGRTZWFyY2hlcyhzdG9wSGlzdG9yeSwgaW5wdXQsIGRyb3BMYXllcnMpLnRoZW4ocmVzdWx0ID0+XG4gICAgICAgICAgICBmaWx0ZXJSZXN1bHRzID8gZmlsdGVyUmVzdWx0cyhyZXN1bHQsIG1vZGUpIDogcmVzdWx0LFxuICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgICAgZmlsdGVyT2xkU2VhcmNoZXMoc3RvcEhpc3RvcnksIGlucHV0LCBkcm9wTGF5ZXJzKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKGFsbFRhcmdldHMgfHwgdGFyZ2V0cy5pbmNsdWRlcygnUm91dGVzJykpIHtcbiAgICBpZiAoc291cmNlcy5pbmNsdWRlcygnRmF2b3VyaXRlJykpIHtcbiAgICAgIGNvbnN0IGZhdm91cml0ZVJvdXRlcyA9IGdldEZhdm91cml0ZVJvdXRlcyhjb250ZXh0KTtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZ2V0RmF2b3VyaXRlUm91dGVzUXVlcnkoZmF2b3VyaXRlUm91dGVzLCBpbnB1dCwgbW9kZSwgcGF0aE9wdHMpLnRoZW4oXG4gICAgICAgICAgcmVzdWx0ID0+XG4gICAgICAgICAgICBmaWx0ZXJSZXN1bHRzID8gZmlsdGVyUmVzdWx0cyhyZXN1bHQsIG1vZGUsICdSb3V0ZXMnKSA6IHJlc3VsdCxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgIGdldFJvdXRlc1F1ZXJ5KGlucHV0LCBmZWVkSURzLCB0cmFuc3BvcnRNb2RlLCBwYXRoT3B0cykudGhlbihyZXN1bHQgPT5cbiAgICAgICAgZmlsdGVyUmVzdWx0cyA/IGZpbHRlclJlc3VsdHMocmVzdWx0LCBtb2RlLCAnUm91dGVzJykgOiByZXN1bHQsXG4gICAgICApLFxuICAgICk7XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnSGlzdG9yeScpKSB7XG4gICAgICBjb25zdCByb3V0ZUhpc3RvcnkgPSBnZXRPbGRTZWFyY2hlcyhjb250ZXh0KTtcbiAgICAgIGNvbnN0IGRyb3BMYXllcnMgPSBbJ2Jpa2VzdGF0aW9uJ107XG4gICAgICBpZiAodHJhbnNwb3J0TW9kZSkge1xuICAgICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ucm91dGVMYXllcnMuZmlsdGVyKGkgPT4gIShpID09PSB0cmFuc3BvcnRNb2RlKSkpO1xuICAgICAgfVxuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnN0b3BMYXllcnMpO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLmxvY2F0aW9uTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5wYXJraW5nTGF5ZXJzKTtcblxuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBmaWx0ZXJPbGRTZWFyY2hlcyhyb3V0ZUhpc3RvcnksIGlucHV0LCBkcm9wTGF5ZXJzKS50aGVuKHJlc3VsdHMgPT5cbiAgICAgICAgICBmaWx0ZXJSZXN1bHRzID8gZmlsdGVyUmVzdWx0cyhyZXN1bHRzLCBtb2RlLCAnUm91dGVzJykgOiByZXN1bHRzLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgaWYgKGFsbFRhcmdldHMgfHwgdGFyZ2V0cy5pbmNsdWRlcygnVmVoaWNsZVJlbnRhbFN0YXRpb25zJykpIHtcbiAgICBpZiAoc291cmNlcy5pbmNsdWRlcygnRmF2b3VyaXRlJykpIHtcbiAgICAgIGNvbnN0IGZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uID1cbiAgICAgICAgZ2V0RmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zKGNvbnRleHQpO1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBnZXRGYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnNRdWVyeShcbiAgICAgICAgICBmYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbixcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0RhdGFzb3VyY2UnKSkge1xuICAgICAgY29uc3QgZ2VvY29kaW5nTGF5ZXJzID0gWydiaWtlc3RhdGlvbiddO1xuICAgICAgY29uc3Qgc2VhcmNoUGFyYW1zID1cbiAgICAgICAgZ2VvY29kaW5nU2l6ZSAmJiBnZW9jb2RpbmdTaXplICE9PSAxMCA/IHsgc2l6ZTogZ2VvY29kaW5nU2l6ZSB9IDoge307XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGdldEdlb2NvZGluZ1Jlc3VsdHMoXG4gICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgc2VhcmNoUGFyYW1zLFxuICAgICAgICAgIGxhbmd1YWdlLFxuICAgICAgICAgIGZvY3VzUG9pbnQsXG4gICAgICAgICAgY2l0eUJpa2VOZXR3b3Jrcy5qb2luKCcsJyksXG4gICAgICAgICAgVVJMX1BFTElBUyxcbiAgICAgICAgICBtaW5pbWFsUmVnZXhwLFxuICAgICAgICAgIGdlb2NvZGluZ0xheWVycyxcbiAgICAgICAgKS50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgICAgIGlmIChmaWx0ZXJSZXN1bHRzKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyUmVzdWx0cyhyZXN1bHRzLCBtb2RlLCAnVmVoaWNsZVJlbnRhbFN0YXRpb25zJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0hpc3RvcnknKSkge1xuICAgICAgY29uc3QgaGlzdG9yeSA9IGdldE9sZFNlYXJjaGVzKGNvbnRleHQpO1xuICAgICAgY29uc3QgZHJvcExheWVycyA9IFsuLi5zdG9wTGF5ZXJzXTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5yb3V0ZUxheWVycyk7XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ubG9jYXRpb25MYXllcnMpO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnBhcmtpbmdMYXllcnMpO1xuXG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goZmlsdGVyT2xkU2VhcmNoZXMoaGlzdG9yeSwgaW5wdXQsIGRyb3BMYXllcnMpKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBzZWFyY2hSZXN1bHRzUHJvbWlzZSA9IFByb21pc2UuYWxsKHNlYXJjaENvbXBvbmVudHMpXG4gICAgLnRoZW4oZmxhdHRlbilcbiAgICAudGhlbihyZXN1bHRzID0+IHtcbiAgICAgIHNlYXJjaGVzLnJlc3VsdHMgPSByZXN1bHRzO1xuICAgIH0pXG4gICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICBzZWFyY2hlcy5lcnJvciA9IGVycjtcbiAgICB9KTtcbiAgc2VhcmNoUmVzdWx0c1Byb21pc2UudGhlbigoKSA9PiB7XG4gICAgY2FsbGJhY2soe1xuICAgICAgLi4uc2VhcmNoZXMsXG4gICAgICByZXN1bHRzOiBzb3J0U2VhcmNoUmVzdWx0cyhsaW5lUmVnZXhwLCBzZWFyY2hlcy5yZXN1bHRzLCBpbnB1dCksXG4gICAgfSk7XG4gIH0pO1xufVxuXG5jb25zdCBkZWJvdW5jZWRTZWFyY2ggPSBkZWJvdW5jZShnZXRTZWFyY2hSZXN1bHRzLCAzMDAsIHtcbiAgbGVhZGluZzogdHJ1ZSxcbn0pO1xuXG5leHBvcnQgY29uc3QgZXhlY3V0ZVNlYXJjaCA9IChcbiAgdGFyZ2V0cyxcbiAgc291cmNlcyxcbiAgdHJhbnNwb3J0TW9kZSxcbiAgc2VhcmNoQ29udGV4dCxcbiAgZmlsdGVyUmVzdWx0cyxcbiAgZ2VvY29kaW5nU2l6ZSxcbiAgZGF0YSxcbiAgY2FsbGJhY2ssXG4gIHBhdGhPcHRzLFxuICByZWZQb2ludCxcbikgPT4ge1xuICBjYWxsYmFjayhudWxsKTsgLy8gVGhpcyBtZWFucyAnd2UgYXJlIHNlYXJjaGluZydcbiAgZGVib3VuY2VkU2VhcmNoKFxuICAgIHRhcmdldHMsXG4gICAgc291cmNlcyxcbiAgICB0cmFuc3BvcnRNb2RlLFxuICAgIHNlYXJjaENvbnRleHQsXG4gICAgZmlsdGVyUmVzdWx0cyxcbiAgICBnZW9jb2RpbmdTaXplLFxuICAgIGRhdGEsXG4gICAgY2FsbGJhY2ssXG4gICAgcGF0aE9wdHMsXG4gICAgcmVmUG9pbnQsXG4gICk7XG59O1xuIiwiaW1wb3J0IHVuaXFXaXRoIGZyb20gJ2xvZGFzaC91bmlxV2l0aCc7XG5pbXBvcnQgaXNFcXVhbCBmcm9tICdsb2Rhc2gvaXNFcXVhbCc7XG5pbXBvcnQgbWVtb2l6ZSBmcm9tICdsb2Rhc2gvbWVtb2l6ZSc7XG5pbXBvcnQgZXNjYXBlUmVnRXhwIGZyb20gJ2xvZGFzaC9lc2NhcGVSZWdFeHAnO1xuaW1wb3J0IGNsb25lRGVlcCBmcm9tICdsb2Rhc2gvY2xvbmVEZWVwJztcblxuLyoqXG4gKiBMb2NhdGlvbiBwcm9wZXJ0aWVzLlxuICogQHR5cGVkZWYge0xvY2F0aW9uUHJvcGVydGllc31cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYXllciBTdWdnZXN0aW9uIGxheWVyLlxuICogQHByb3BlcnR5IHtsYXR9IFtudW1iZXJdXG4gKiBAcHJvcGVydHkge2xvbn0gW251bWJlcl1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhZGRyZXNzIEFkZHJlc3MuXG4gKi9cblxuLyoqXG4gKiBSZXR1cm5zIGxvY2FsYWRtaW4gKGNpdHkgbmFtZSkgZm9yIHN1Z2dlc3Rpb25zXG4gKlxuICogQG5hbWUgZ2V0TG9jYWxhZG1pblxuICogQHBhcmFtIHtPYmplY3R9IHN1Z2dlc3Rpb24gc3VnZ2VzdGlvbidzIHByb3BlcnRpZXMgZnJvbSBnZW9jb2Rpbmcgb3IgYSBmYXZvdXJpdGUgc3RvcC9zdGF0aW9uLlxuICogRXhwZWN0cyBsYXN0IHBhcnQgb2YgYW4gYWRkcmVzcyAoYWZ0ZXIgJywnKSB0byBjb250YWluIHRoZSBjaXR5IG5hbWUgb2YgdGhlIHN1Z2dlc3Rpb24gbG9jYXRpb24uXG4gKiBAcmV0dXJucyB7U3RyaW5nfSAgQ2l0eSBuYW1lIG9yIGVtcHR5IHN0cmluZ1xuICovXG5jb25zdCBnZXRMb2NhbGFkbWluID0gc3VnZ2VzdGlvbiA9PlxuICBzdWdnZXN0aW9uLmxvY2FsYWRtaW4gfHxcbiAgc3VnZ2VzdGlvbi5sb2NhbGFkbWluIHx8XG4gIChzdWdnZXN0aW9uLmFkZHJlc3MgJiZcbiAgICBzdWdnZXN0aW9uLmFkZHJlc3MubGFzdEluZGV4T2YoJywnKSA8IHN1Z2dlc3Rpb24uYWRkcmVzcy5sZW5ndGggLSAyICYmXG4gICAgc3VnZ2VzdGlvbi5hZGRyZXNzLnN1YnN0cmluZyhzdWdnZXN0aW9uLmFkZHJlc3MubGFzdEluZGV4T2YoJywnKSArIDIpKSB8fFxuICAnJztcblxuZXhwb3J0IGNvbnN0IGdldFN0b3BDb2RlID0gKHsgaWQsIGNvZGUgfSkgPT4ge1xuICBpZiAoY29kZSkge1xuICAgIHJldHVybiBjb2RlO1xuICB9XG4gIGlmIChcbiAgICBpZCA9PT0gdW5kZWZpbmVkIHx8XG4gICAgdHlwZW9mIGlkLmluZGV4T2YgPT09ICd1bmRlZmluZWQnIHx8XG4gICAgaWQuaW5kZXhPZignIycpID09PSAtMVxuICApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIC8vIGlkIGZyb20gcGVsaWFzXG4gIHJldHVybiBpZC5zdWJzdHJpbmcoaWQuaW5kZXhPZignIycpICsgMSk7XG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0RmF2b3VyaXRlUGxhY2VMYWJlbCA9IChuYW1lLCBhZGRyZXNzKSA9PiBbXG4gIG5hbWUgfHwgKGFkZHJlc3MgJiYgYWRkcmVzcy5zcGxpdCgnLCcpWzBdKSxcbiAgdHlwZW9mIGFkZHJlc3MgPT09ICdzdHJpbmcnXG4gICAgPyBhZGRyZXNzLnJlcGxhY2UobmV3IFJlZ0V4cChgJHtlc2NhcGVSZWdFeHAobmFtZSl9KFsgLF18JCkrYCksICcnKVxuICAgIDogJycsXG5dO1xuXG4vKipcbiAqIEZvcm1hdCBzdWdnZXN0aW9uLXBhaXIgW25hbWUsIGFkZHJlc3NdIGJ5IGBzdWdnZXN0aW9uLmxheWVyYC5cbiAqXG4gKiBAbmFtZSBnZXROYW1lTGFiZWxcbiAqIEBwYXJhbSB7TG9jYXRpb25Qcm9wZXJ0aWVzfSBzdWdnZXN0aW9uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwbGFpbl1cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXkuPHN0cmluZz59IEZvcm1hdHRlZCBsYWJlbC5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldE5hbWVMYWJlbCA9IG1lbW9pemUoXG4gIChzdWdnZXN0aW9uLCBwbGFpbiA9IGZhbHNlKSA9PiB7XG4gICAgc3dpdGNoIChzdWdnZXN0aW9uLmxheWVyKSB7XG4gICAgICBjYXNlICdjdXJyZW50UG9zaXRpb24nOlxuICAgICAgICByZXR1cm4gW3N1Z2dlc3Rpb24ubGFiZWxJZCwgc3VnZ2VzdGlvbi5hZGRyZXNzXTtcbiAgICAgIGNhc2UgJ3NlbGVjdEZyb21NYXAnOlxuICAgICAgY2FzZSAnb3duTG9jYXRpb25zJzpcbiAgICAgIGNhc2UgJ2JhY2snOlxuICAgICAgICByZXR1cm4gW3N1Z2dlc3Rpb24ubGFiZWxJZF07XG4gICAgICBjYXNlICdmYXZvdXJpdGVQbGFjZSc6XG4gICAgICAgIHJldHVybiBmb3JtYXRGYXZvdXJpdGVQbGFjZUxhYmVsKHN1Z2dlc3Rpb24ubmFtZSwgc3VnZ2VzdGlvbi5hZGRyZXNzKTtcbiAgICAgIGNhc2UgJ2Zhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uJzpcbiAgICAgIGNhc2UgJ2Jpa2VzdGF0aW9uJzpcbiAgICAgICAgcmV0dXJuIFtzdWdnZXN0aW9uLm5hbWVdO1xuICAgICAgY2FzZSAnZmF2b3VyaXRlUm91dGUnOlxuICAgICAgY2FzZSAncm91dGUtQlVTJzpcbiAgICAgIGNhc2UgJ3JvdXRlLVRSQU0nOlxuICAgICAgY2FzZSAncm91dGUtUkFJTCc6XG4gICAgICBjYXNlICdyb3V0ZS1TVUJXQVknOlxuICAgICAgY2FzZSAncm91dGUtRkVSUlknOlxuICAgICAgY2FzZSAncm91dGUtRlVOSUNVTEFSJzpcbiAgICAgIGNhc2UgJ3JvdXRlLUFJUlBMQU5FJzpcbiAgICAgICAgcmV0dXJuICFwbGFpbiAmJiBzdWdnZXN0aW9uLnNob3J0TmFtZVxuICAgICAgICAgID8gW1xuICAgICAgICAgICAgICBzdWdnZXN0aW9uLmd0ZnNJZCxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5tb2RlLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubG9uZ05hbWUsXG4gICAgICAgICAgICBdXG4gICAgICAgICAgOiBbXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24uc2hvcnROYW1lLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLmxvbmdOYW1lLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLmFnZW5jeSA/IHN1Z2dlc3Rpb24uYWdlbmN5Lm5hbWUgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBdO1xuICAgICAgY2FzZSAndmVudWUnOlxuICAgICAgY2FzZSAnYWRkcmVzcyc6XG4gICAgICBjYXNlICdzdHJlZXQnOlxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIHN1Z2dlc3Rpb24ubmFtZSxcbiAgICAgICAgICBzdWdnZXN0aW9uLmxhYmVsLnJlcGxhY2UoXG4gICAgICAgICAgICBuZXcgUmVnRXhwKGAke2VzY2FwZVJlZ0V4cChzdWdnZXN0aW9uLm5hbWUpfSgsKT8oICk/YCksXG4gICAgICAgICAgICAnJyxcbiAgICAgICAgICApLFxuICAgICAgICBdO1xuICAgICAgY2FzZSAnZmF2b3VyaXRlU3RvcCc6XG4gICAgICBjYXNlICdzdG9wJzpcbiAgICAgICAgcmV0dXJuIHBsYWluXG4gICAgICAgICAgPyBbXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubmFtZSB8fFxuICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubGFiZWwgfHxcbiAgICAgICAgICAgICAgICAoc3VnZ2VzdGlvbi5hZGRyZXNzICYmIHN1Z2dlc3Rpb24uYWRkcmVzcy5zcGxpdCgnLCcpWzBdKSxcbiAgICAgICAgICAgICAgZ2V0TG9jYWxhZG1pbihzdWdnZXN0aW9uKSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5uYW1lLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLmlkLFxuICAgICAgICAgICAgICBnZXRTdG9wQ29kZShzdWdnZXN0aW9uKSxcbiAgICAgICAgICAgICAgZ2V0TG9jYWxhZG1pbihzdWdnZXN0aW9uKSxcbiAgICAgICAgICAgIF07XG4gICAgICBjYXNlICdmYXZvdXJpdGVTdGF0aW9uJzpcbiAgICAgIGNhc2UgJ3N0YXRpb24nOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBzdWdnZXN0aW9uLm5hbWUgfHxcbiAgICAgICAgICAgIHN1Z2dlc3Rpb24ubGFiZWwgfHxcbiAgICAgICAgICAgIChzdWdnZXN0aW9uLmFkZHJlc3MgJiYgc3VnZ2VzdGlvbi5hZGRyZXNzLnNwbGl0KCcsJylbMF0pLFxuICAgICAgICAgIGdldExvY2FsYWRtaW4oc3VnZ2VzdGlvbiksXG4gICAgICAgIF07XG4gICAgfVxuICB9LFxuICAoaXRlbSwgcGxhaW4pID0+IHtcbiAgICBjb25zdCBpID0gY2xvbmVEZWVwKGl0ZW0pO1xuICAgIGkucGxhaW4gPSBwbGFpbjtcbiAgICByZXR1cm4gaTtcbiAgfSxcbik7XG5cbi8qKlxuICogQ2hlY2tzIHRoYXQgZmVhdHVyZXMgYXJlIHVuaXF1ZSBieSBsYWJlbFxuICpcbiAqIEBuYW1lIHVuaXFCeUxhYmVsXG4gKiBAcGFyYW0ge0FycmF5fSBmZWF0dXJlcyBBcnJheSBvZiBmZWF0dXJlc1xuICogQHJldHVybnMge0FycmF5fSAgQXJyYXkgb2YgdW5pcXVlIGZlYXR1cmVzXG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwudW5pcUJ5TGFiZWwoZmVhdHVyZXMpO1xuICogLy89IEFycmF5KDIpXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVuaXFCeUxhYmVsKGZlYXR1cmVzKSB7XG4gIHJldHVybiB1bmlxV2l0aChmZWF0dXJlcywgKGZlYXQxLCBmZWF0MikgPT4ge1xuICAgIGlmIChmZWF0MS50eXBlID09PSAnRnV0dXJlUm91dGUnIHx8IGZlYXQyLnR5cGUgPT09ICdGdXR1cmVSb3V0ZScpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIGlzRXF1YWwoZ2V0TmFtZUxhYmVsKGZlYXQxLnByb3BlcnRpZXMpLCBnZXROYW1lTGFiZWwoZmVhdDIucHJvcGVydGllcykpICYmXG4gICAgICBmZWF0MS5wcm9wZXJ0aWVzLmxheWVyID09PSBmZWF0Mi5wcm9wZXJ0aWVzLmxheWVyXG4gICAgKTtcbiAgfSk7XG59XG4iLCJjb25zdCB0cmFuc2xhdGlvbnMgPSB7XG4gIGRlOiB7XG4gICAgdHJhbnNsYXRpb246IHtcbiAgICAgIGFkZHJlc3M6ICdBZHJlc3NlJyxcbiAgICAgICdhZGRyZXNzLXBsYWNlLW9yLWJ1c2luZXNzJzogJ0FkcmVzcywgT3J0IG9yIEdlc2Now6RmdCcsXG4gICAgICAnYWRkLXZpYS1idXR0b24tbGFiZWwnOiAnRsO8Z2UgWndpc2NoZW56aWVsIGhpbnp1JyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbCc6XG4gICAgICAgICdTZXQgc3RvcCBkdXJhdGlvbiBhdCB2aWEgcG9pbnQge3tpbmRleH19JyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1jbG9zZSc6XG4gICAgICAgICdDbG9zZSBzdG9wIGR1cmF0aW9uIHNlbGVjdG9yIGF0IHZpYSBwb2ludCB7e2luZGV4fX0nLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLW9wZW4nOlxuICAgICAgICAnT3BlbiBzdG9wIGR1cmF0aW9uIHNlbGVjdG9yIGF0IHZpYSBwb2ludCB7e2luZGV4fX0nLFxuICAgICAgYWlycGxhbmU6ICdGbHVnJyxcbiAgICAgIGFycml2YWw6ICdBbmt1bmZ0JyxcbiAgICAgIGJhY2s6ICdadXLDvGNrJyxcbiAgICAgIGJpa2VyZW50YWxzdGF0aW9uOiAnTGVpaHJhZC1TdGF0aW9uJyxcbiAgICAgIGJ1czogJ0J1cycsXG4gICAgICBjYW5jZWw6ICdBYmJyZWNoZW4nLFxuICAgICAgJ2NsZWFyLWJ1dHRvbi1sYWJlbCc6ICdMw7ZzY2hlbicsXG4gICAgICAnY2xlYXItc2VhcmNoLWhpc3RvcnknOiAnU3VjaGhpc3RvcmllIGzDtnNjaGVuJyxcbiAgICAgIGN1cnJlbnRwb3NpdGlvbjogJ0FrdHVlbGxlIFBvc2l0aW9uJyxcbiAgICAgIGRlbGV0ZTogJ0zDtnNjaGVuJyxcbiAgICAgICdkZWxldGUtb2xkLXNlYXJjaGVzLWhlYWRlcic6ICdXb2xsZW4gU2llIGRpZSBTdWNoLUhpc3RvcmllIGzDtnNjaGVuPycsXG4gICAgICBkZXBhcnR1cmU6ICdBYmZhaHJ0JyxcbiAgICAgIGRlc3RpbmF0aW9uOiAnWmllbCcsXG4gICAgICAnZ2l2ZS1vcmlnaW4nOiAnU3RhcnQgZWluZ2ViZW4uJyxcbiAgICAgICdnaXZlLWRlc3RpbmF0aW9uJzogJ1ppZWwgZWluZ2ViZW4uJyxcbiAgICAgIGZhdm91cml0ZTogJ0Zhdm9yaXRlbicsXG4gICAgICBmZXJyeTogJ0bDpGhyZScsXG4gICAgICAnZnV0dXJlLXJvdXRlJzogJ1p1a8O8bmZ0aWdlIFZlcmJpbmR1bmcnLFxuICAgICAgb3JpZ2luOiAnU3RhcnQnLFxuICAgICAgJ29yaWdpbi1zdG9wLW5lYXIteW91JzogJ1N0YXJ0JyxcbiAgICAgIG93bmxvY2F0aW9uczogJ0VpZ2VuZSBGYXZvcml0ZW4nLFxuICAgICAgbG9hZGluZzogJ0xhZGVuLi4uJyxcbiAgICAgICdtaW51dGUtc2hvcnQnOiAnbWluJyxcbiAgICAgIHJhaWw6ICdadWcnLFxuICAgICAgc2VhcmNoOiAnU3VjaGUnLFxuICAgICAgJ3NlYXJjaC1hZGRyZXNzLW9yLXBsYWNlJzogJ1N1Y2hlIGFuaGFuZCB2b24gQWRyZXNzZSBvZGVyIE9ydHNhbmdhYmUnLFxuICAgICAgJ3NlYXJjaC1idXR0b24tbGFiZWwnOiAnU3VjaGUnLFxuICAgICAgJ3NlYXJjaC1kZXN0aW5hdGlvbic6ICdTdWNoZSBaaWVsb3J0LCBMaW5pZSBvciBIYWx0ZXN0ZWxsZScsXG4gICAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLWluZGV4JzogJ1ppZWxvcnQgZWluZ2ViZW4nLFxuICAgICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1yZXN1bHRzLWJ1dC1uby1zZWFyY2gnOlxuICAgICAgICAnRXJnZWJuaXNzZSBpbiDigJxaaWVsb3J04oCdLVJlaXRlciBhbnplaWdlbicsXG4gICAgICAnc2VhcmNoLW5vLXJlc3VsdHMnOiAnS2VpbiBPcnQgZ2VmdW5kZW4uJyxcbiAgICAgICdzZWFyY2gtb3JpZ2luJzogJ1N1Y2hlIFN0YXJ0b3J0LCBMaW5pZSBvZGVyIEhhbHRlc3RlbGxlJyxcbiAgICAgICdzZWFyY2gtb3JpZ2luLWluZGV4JzogJ1N0YXJ0b3J0IGVpbmdlYmVuJyxcbiAgICAgICdzZWFyY2gtcG9zaXRpb24nOiAnU3RhbmRvcnQgZXJtaXR0ZWxuJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwnOiAnVmVudWUsIHBsYWNlIGFuZCBzdG9wc2VhcmNoLicsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1kZXNrdG9wJzpcbiAgICAgICAgJ05hdmlnYXRlIGxpc3Qgd2l0aCBhcnJvdyBrZXlzIGFuZCBzZWxlY3Qgd2l0aCBlbnRlciBrZXkuJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLW1vYmlsZSc6XG4gICAgICAgICdFbnRlciB0aGUgbG9jYXRpb24gYW5kIG5hdmlnYXRlIGluIHRoZSBsaXN0IGJ5IHN3aXBpbmcuJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtbW92ZS10by1kZXN0aW5hdGlvbic6XG4gICAgICAgICdBZnRlciBzZWxlY3RpbmcgdGhlIHN0YXJ0aW5nIGxvY2F0aW9uIHlvdSBhcmUgYXV0b21hdGljYWxseSBtb3ZlZCB0byB0aGUgZGVzdGluYXRpb24gZmllbGQuJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuJzogJ1RoZXJlIGlzIHt7Y291bnR9fSBzdWdnZXN0aW9uIGF2YWlsYWJsZScsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbl9wbHVyYWwnOlxuICAgICAgICAnVGhlcmUgYXJlIHt7Y291bnR9fSBzdWdnZXN0aW9ucyBhdmFpbGFibGUnLFxuICAgICAgJ3NlYXJjaC1jdXJyZW50LXN1Z2dlc3Rpb24nOiAnQWt0dWVsbGUgQXVzd2FobDoge3tzZWxlY3Rpb259fScsXG4gICAgICBzdHJlZXQ6ICdTdHJhw59lJyxcbiAgICAgIHN1YndheTogJ1UtQmFobicsXG4gICAgICBzdGF0aW9uOiAnU3RhdGlvbicsXG4gICAgICBzdG9wOiAnSGFsdGVzdGVsbGUnLFxuICAgICAgJ3N0b3AtbmVhci15b3UnOiAnU3VjaGUgSGFsdGVzdGVsbGVuIHVuZCBMaW5pZW4gaW4gZGVyIE7DpGhlJyxcbiAgICAgICdzdG9wLW5lYXIteW91LWJ1cyc6ICdTdWNoZSBCdXNsaW5pZW4gb3IgSGFsdGVzdGVsbGVuJyxcbiAgICAgICdzdG9wLW5lYXIteW91LWNpdHliaWtlJzogJ1N1Y2hlIExlaWhyYWQtU3RhdGlvbmVuJyxcbiAgICAgICdzdG9wLW5lYXIteW91LXJhaWwnOiAnU3VjaGUgWnVndmVyYmluZHVuZ2VuIG9kZXIgQmFobmjDtmZlJyxcbiAgICAgICdzdG9wLW5lYXIteW91LXN1YndheSc6ICdTdWNoZSBVLUJhaG4tTGluaWVuIG9kZXIgSGFsdGVzdGVsbGVuJyxcbiAgICAgICdzdG9wLW5lYXIteW91LXRyYW0nOiAnU3VjaGUgU3RhZHRiYWhuLUhhbHRlc3RlbGxlbi1TdWNoZScsXG4gICAgICAndG9kYXktYXQnOiAnSGV1dGUgdW0nLFxuICAgICAgJ3RvbW9ycm93LWF0JzogJ01vcmdlbiB1bScsXG4gICAgICB0cmFtOiAnU3RyYcOfZW5iYWhuJyxcbiAgICAgICd1c2Utb3duLXBvc2l0aW9uJzogJ0JlbnV0emUgYWt0dWVsbGVuIFN0YW5kb3J0JyxcbiAgICAgICdzZWxlY3QtZnJvbS1tYXAnOiAnV8OkaGxlIFBvc2l0aW9uIGFuaGFuZCBLYXJ0ZScsXG4gICAgICAnc2VsZWN0LWZyb20tb3duLWxvY2F0aW9ucyc6ICdBdXMgZWlnZW5lbiBGYXZvcml0ZW4gYXVzd8OkaGxlbicsXG4gICAgICB2ZW51ZTogJ1ZlbnVlJyxcbiAgICAgICd2aWEtcG9pbnQnOiAnWndpc2NoZW56aWVsJyxcbiAgICAgIHdoZXJlOiAnV29oaW4/JyxcbiAgICAgIHBsYWNlOiAnT3J0JyxcbiAgICB9LFxuICB9LFxuICBlbjoge1xuICAgIHRyYW5zbGF0aW9uOiB7XG4gICAgICBhZGRyZXNzOiAnQWRkcmVzcycsXG4gICAgICAnYWRkcmVzcy1wbGFjZS1vci1idXNpbmVzcyc6ICdBZGRyZXNzLCBwbGFjZSBvciBidXNpbmVzcycsXG4gICAgICAnYWRkLXZpYS1idXR0b24tbGFiZWwnOiAnQWRkIHZpYSBwb2ludCcsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwnOlxuICAgICAgICAnU2V0IHN0b3AgZHVyYXRpb24gYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtY2xvc2UnOlxuICAgICAgICAnQ2xvc2Ugc3RvcCBkdXJhdGlvbiBzZWxlY3RvciBhdCB2aWEgcG9pbnQge3tpbmRleH19JyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1vcGVuJzpcbiAgICAgICAgJ09wZW4gc3RvcCBkdXJhdGlvbiBzZWxlY3RvciBhdCB2aWEgcG9pbnQge3tpbmRleH19JyxcbiAgICAgIGFpcnBsYW5lOiAnRmxpZ2h0JyxcbiAgICAgIGFycml2YWw6ICdBcnJpdmFsJyxcbiAgICAgIGJhY2s6ICdCYWNrJyxcbiAgICAgIGJpa2VwYXJrOiAnUGFyayAmIFJpZGUgZm9yIGJpa2VzJyxcbiAgICAgIGJpa2VyZW50YWxzdGF0aW9uOiAnQmlrZSBzdGF0aW9uJyxcbiAgICAgIGJ1czogJ2J1cycsXG4gICAgICBjYW5jZWw6ICdDYW5jZWwnLFxuICAgICAgY2FycGFyazogJ1BhcmsgJiBSaWRlJyxcbiAgICAgICdjbGVhci1idXR0b24tbGFiZWwnOiAnQ2xlYXInLFxuICAgICAgJ2NsZWFyLXNlYXJjaC1oaXN0b3J5JzogJ0NsZWFyIHNlYXJjaCBoaXN0b3J5JyxcbiAgICAgIGN1cnJlbnRwb3NpdGlvbjogJ0N1cnJlbnQgcG9zaXRpb24nLFxuICAgICAgZGVsZXRlOiAnRGVsZXRlJyxcbiAgICAgICdkZWxldGUtb2xkLXNlYXJjaGVzLWhlYWRlcic6ICdEbyB5b3Ugd2FudCB0byBjbGVhciB0aGUgc2VhcmNoIGhpc3Rvcnk/JyxcbiAgICAgIGRlcGFydHVyZTogJ0RlcGFydHVyZScsXG4gICAgICBkZXN0aW5hdGlvbjogJ0Rlc3RpbmF0aW9uJyxcbiAgICAgICdnaXZlLW9yaWdpbic6ICdFbnRlciB5b3VyIG9yaWdpbi4nLFxuICAgICAgJ2dpdmUtZGVzdGluYXRpb24nOiAnRW50ZXIgeW91ciBkZXN0aW5hdGlvbicsXG4gICAgICBmYXZvdXJpdGU6ICdGYXZvdXJpdGUnLFxuICAgICAgZmVycnk6ICdGZXJyeScsXG4gICAgICAnZnV0dXJlLXJvdXRlJzogJ0Z1dHVyZSByb3V0ZScsXG4gICAgICBvcmlnaW46ICdTdGFydCcsXG4gICAgICAnb3JpZ2luLXN0b3AtbmVhci15b3UnOiAnU3RhcnQnLFxuICAgICAgb3dubG9jYXRpb25zOiAnT3duIGxvY2F0aW9ucycsXG4gICAgICBsb2FkaW5nOiAnTG9hZGluZy4uLicsXG4gICAgICAnbWludXRlLXNob3J0JzogJ20nLFxuICAgICAgcGxhdGZvcm06ICdQbGF0Zm9ybScsXG4gICAgICByYWlsOiAnVHJhaW4nLFxuICAgICAgcmVxdWlyZWQ6ICdyZXF1aXJlZCBmaWVsZCcsXG4gICAgICBzZWFyY2g6ICdTZWFyY2gnLFxuICAgICAgJ3NlYXJjaC1hZGRyZXNzLW9yLXBsYWNlJzogJ1NlYXJjaCBieSBhZGRyZXNzIG9yIHBsYWNlIG5hbWUnLFxuICAgICAgJ3NlYXJjaC1idXR0b24tbGFiZWwnOiAnU2VhcmNoJyxcbiAgICAgICdzZWFyY2gtZGVzdGluYXRpb24nOiAnU2VhcmNoIGRlc3RpbmF0aW9uLCByb3V0ZSBvciBzdG9wJyxcbiAgICAgICdzZWFyY2gtZGVzdGluYXRpb24taW5kZXgnOiAnRW50ZXIgZGVzdGluYXRpb24nLFxuICAgICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1yZXN1bHRzLWJ1dC1uby1zZWFyY2gnOlxuICAgICAgICAnVmlldyByZXN1bHRzIGluIHRoZSBhZGphY2VudCDigJxEZXN0aW5hdGlvbuKAnSB0YWInLFxuICAgICAgJ3NlYXJjaC1uby1yZXN1bHRzJzogJ05vIGxvY2F0aW9uJyxcbiAgICAgICdzZWFyY2gtb3JpZ2luJzogJ1NlYXJjaCBvcmlnaW4sIHJvdXRlIG9yIHN0b3AnLFxuICAgICAgJ3NlYXJjaC1vcmlnaW4taW5kZXgnOiAnRW50ZXIgb3JpZ2luJyxcbiAgICAgICdzZWFyY2gtcG9zaXRpb24nOiAnRGV0ZWN0IGxvY2F0aW9uJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwnOiAnVmVudWUsIHBsYWNlIGFuZCBzdG9wc2VhcmNoLicsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1kZXNrdG9wJzpcbiAgICAgICAgJ05hdmlnYXRlIGxpc3Qgd2l0aCBhcnJvdyBrZXlzIGFuZCBzZWxlY3Qgd2l0aCBlbnRlciBrZXkuJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLW1vYmlsZSc6XG4gICAgICAgICdFbnRlciB0aGUgbG9jYXRpb24gYW5kIG5hdmlnYXRlIGluIHRoZSBsaXN0IGJ5IHN3aXBpbmcuJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtbW92ZS10by1kZXN0aW5hdGlvbic6XG4gICAgICAgICdBZnRlciBzZWxlY3RpbmcgdGhlIHN0YXJ0aW5nIGxvY2F0aW9uIHlvdSBhcmUgYXV0b21hdGljYWxseSBtb3ZlZCB0byB0aGUgZGVzdGluYXRpb24gZmllbGQuJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuJzogJ1RoZXJlIGlzIHt7Y291bnR9fSBzdWdnZXN0aW9uIGF2YWlsYWJsZScsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbl9wbHVyYWwnOlxuICAgICAgICAnVGhlcmUgYXJlIHt7Y291bnR9fSBzdWdnZXN0aW9ucyBhdmFpbGFibGUnLFxuICAgICAgJ3NlYXJjaC1jdXJyZW50LXN1Z2dlc3Rpb24nOiAnQ3VycmVudCBzZWxlY3Rpb246IHt7c2VsZWN0aW9ufX0nLFxuICAgICAgc3RyZWV0OiAnU3RyZWV0JyxcbiAgICAgIHN1YndheTogJ01ldHJvJyxcbiAgICAgIHN0YXRpb246ICdTdGF0aW9uJyxcbiAgICAgIHN0b3A6ICdTdG9wJyxcbiAgICAgICdzdG9wLW5lYXIteW91JzogJ1NlYXJjaCBzdG9wcyBhbmQgcm91dGVzJyxcbiAgICAgICdzdG9wLW5lYXIteW91LWFpcnBsYW5lJzogJ1NlYXJjaCBmbGlnaHRzIG9yIGFpcnBvcnRzJyxcbiAgICAgICdzdG9wLW5lYXIteW91LWJ1cyc6ICdTZWFyY2ggYnVzIHJvdXRlcyBvciBzdG9wcycsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1jaXR5YmlrZSc6ICdTZWFyY2ggY2l0eSBiaWtlIHN0YXRpb25zJyxcbiAgICAgICdzdG9wLW5lYXIteW91LXJhaWwnOiAnU2VhcmNoIHRyYWluIHJvdXRlcyBvciBzdGF0aW9ucycsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1zdWJ3YXknOiAnU2VhcmNoIG1ldHJvIHJvdXRlcyBvciBzdGF0aW9ucyAnLFxuICAgICAgJ3N0b3AtbmVhci15b3UtdHJhbSc6ICdTZWFyY2ggdHJhbSByb3V0ZXMgb3Igc3RvcHMnLFxuICAgICAgJ3N0b3Atcm91dGUtc3RhdGlvbic6ICdCdXMgYW5kIHN0b3Agc2VhcmNoJyxcbiAgICAgICd0b2RheS1hdCc6ICd0b2RheSBhdCcsXG4gICAgICAndG9tb3Jyb3ctYXQnOiAndG9tb3Jyb3cgYXQnLFxuICAgICAgdHJhbTogJ1RyYW0nLFxuICAgICAgdHJhY2s6ICdUcmFjaycsXG4gICAgICAndXNlLW93bi1wb3NpdGlvbic6ICdVc2UgY3VycmVudCBsb2NhdGlvbicsXG4gICAgICAnc2VsZWN0LWZyb20tbWFwJzogJ1NlbGVjdCBwb3NpdGlvbiBmcm9tIG1hcCcsXG4gICAgICAnc2VsZWN0LWZyb20tb3duLWxvY2F0aW9ucyc6ICdTZWxlY3QgZnJvbSBvd24gbG9jYXRpb25zJyxcbiAgICAgIHZlbnVlOiAnVmVudWUnLFxuICAgICAgJ3ZpYS1wb2ludCc6ICdWaWEgcG9pbnQnLFxuICAgICAgd2hlcmU6ICdXaGVyZSB0bz8nLFxuICAgICAgcGxhY2U6ICdMb2NhdGlvbicsXG4gICAgfSxcbiAgfSxcbiAgZmk6IHtcbiAgICB0cmFuc2xhdGlvbjoge1xuICAgICAgYWRkcmVzczogJ09zb2l0ZScsXG4gICAgICAnYWRkcmVzcy1wbGFjZS1vci1idXNpbmVzcyc6ICdPc29pdGUsIHBhaWtrYSB0YWkgeXJpdHlzJyxcbiAgICAgICdhZGQtdmlhLWJ1dHRvbi1sYWJlbCc6ICdMaXPDpMOkIHbDpGxpcGlzdGUnLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsJzpcbiAgICAgICAgJ0FzZXRhIHbDpGxpcGlzdGVlbGxlIHt7aW5kZXh9fSBweXPDpGhkeWtzZW4ga2VzdG8nLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLWNsb3NlJzpcbiAgICAgICAgJ0F2YWEgdsOkbGlwaXN0ZWVuIHt7aW5kZXh9fSBweXPDpGhkeWtzZW4ga2VzdG8gdmFsaXRzaW4nLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLW9wZW4nOlxuICAgICAgICAnU3VsamUgdsOkbGlwaXN0ZWVuIHt7aW5kZXh9fSBweXPDpGhkeWtzZW4ga2VzdG8gdmFsaXRzaW4nLFxuICAgICAgYWlycGxhbmU6ICdMZW50b2tvbmUnLFxuICAgICAgYXJyaXZhbDogJ1BlcmlsbMOkJyxcbiAgICAgIGJhY2s6ICdUYWthaXNpbicsXG4gICAgICB2ZWhpY2xlcmVudGFsc3RhdGlvbjogJ1B5w7Zyw6Rhc2VtYScsXG4gICAgICBiaWtlcGFyazogJ0xpaXR5bnTDpHB5c8Oka8O2aW50aScsXG4gICAgICBidXM6ICdidXNzaScsXG4gICAgICBjYW5jZWw6ICdQZXJ1dXRhJyxcbiAgICAgIGNhcnBhcms6ICdMaWl0eW50w6RweXPDpGvDtmludGknLFxuICAgICAgJ2NsZWFyLWJ1dHRvbi1sYWJlbCc6ICdUeWhqZW5uw6QnLFxuICAgICAgJ2NsZWFyLXNlYXJjaC1oaXN0b3J5JzogJ1R5aGplbm7DpCBoYWt1aGlzdG9yaWEnLFxuICAgICAgY3VycmVudHBvc2l0aW9uOiAnVMOkbcOkbmhldGtpbmVuIHNpamFpbnRpJyxcbiAgICAgIGRlbGV0ZTogJ1BvaXN0YScsXG4gICAgICAnZGVsZXRlLW9sZC1zZWFyY2hlcy1oZWFkZXInOiAnSGFsdWF0a28gdHloamVudMOkw6QgaGFrdWhpc3Rvcmlhbj8nLFxuICAgICAgZGVwYXJ0dXJlOiAnTMOkaHTDtmFpa2EnLFxuICAgICAgZGVzdGluYXRpb246ICdNw6TDpHLDpG5ww6TDpCcsXG4gICAgICBmYXZvdXJpdGU6ICdTdW9zaWtraScsXG4gICAgICBmZXJyeTogJ0xhdXR0YScsXG4gICAgICAnZnV0dXJlLXJvdXRlJzogJ1R1bGV2YSByZWl0dGknLFxuICAgICAgJ2dpdmUtb3JpZ2luJzogJ0zDpGh0w7ZwYWlra2EnLFxuICAgICAgJ2dpdmUtZGVzdGluYXRpb24nOiAnTcOkw6Ryw6RucMOkw6QnLFxuICAgICAgb3JpZ2luOiAnTMOkaHTDtnBhaWtrYScsXG4gICAgICAnb3JpZ2luLXN0b3AtbmVhci15b3UnOiAnTMOkaHTDtnBhaWtrYScsXG4gICAgICBvd25sb2NhdGlvbnM6ICdPbWF0IHBhaWthdCcsXG4gICAgICBsb2FkaW5nOiAnTGFkYXRhYW4uLi4nLFxuICAgICAgJ21pbnV0ZS1zaG9ydCc6ICdtaW4nLFxuICAgICAgcGxhdGZvcm06ICdMYWl0dXJpJyxcbiAgICAgIHJhaWw6ICdKdW5hJyxcbiAgICAgIHJlcXVpcmVkOiAncGFrb2xsaW5lbiBrZW50dMOkJyxcbiAgICAgIHNlYXJjaDogJ0V0c2knLFxuICAgICAgJ3NlYXJjaC1hZGRyZXNzLW9yLXBsYWNlJzogJ0hhZSBvc29pdHRlZWxsYSB0YWkgcGFpa2FuIG5pbWVsbMOkJyxcbiAgICAgICdzZWFyY2gtYnV0dG9uLWxhYmVsJzogJ0hhZScsXG4gICAgICAnc2VhcmNoLWRlc3RpbmF0aW9uJzogJ0hhZSBtw6TDpHLDpG5ww6TDpHTDpCwgbGluamFhIHRhaSBweXPDpGtracOkJyxcbiAgICAgICdzZWFyY2gtZGVzdGluYXRpb24taW5kZXgnOiAnU3nDtnTDpCBtw6TDpHLDpG5ww6TDpCcsXG4gICAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLXJlc3VsdHMtYnV0LW5vLXNlYXJjaCc6XG4gICAgICAgICdLYXRzbyB0dWxva3NldCB2aWVyZWlzZWx0w6QgTcOkw6Ryw6RucMOkw6QtdsOkbGlsZWhkZWx0w6QnLFxuICAgICAgJ3NlYXJjaC1uby1yZXN1bHRzJzogJ0VpIHR1bG9rc2lhJyxcbiAgICAgICdzZWFyY2gtb3JpZ2luJzogJ0hhZSBsw6RodMO2cGFpa2thYSwgbGluamFhIHRhaSBweXPDpGtracOkJyxcbiAgICAgICdzZWFyY2gtb3JpZ2luLWluZGV4JzogJ1N5w7Z0w6QgbMOkaHTDtnBhaWtrYScsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsJzogJ1BhaWtrYSwgbGluamEgamEgcHlzw6Rra2loYWt1LicsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1kZXNrdG9wJzpcbiAgICAgICAgJ05hdmlnb2kgbGlzdGFzc2EgbnVvbGluw6RwcMOkaW1pbGzDpCBqYSB2YWxpdHNlIGVudGVyaWxsw6QuJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLW1vYmlsZSc6XG4gICAgICAgICdTecO2dMOkIHNpamFpbnRpIGphIG5hdmlnb2kgbGlzdGFzc2EgcHl5aGvDpGlzZW3DpGxsw6QuJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtbW92ZS10by1kZXN0aW5hdGlvbic6XG4gICAgICAgICdWYWxpdHR1YXNpIGzDpGh0w7ZwYWlrYW4gc2lpcnJ5dMOkw6RuIHN1b3JhYW4gbcOkw6Ryw6RucMOkw6Qta2VudHTDpMOkbi4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW4nOiAnIEzDtnlkZXR0aWluIHt7Y291bnR9fSBlaGRvdHVzJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuX3BsdXJhbCc6ICcgTMO2eWRldHRpaW4ge3tjb3VudH19IGVoZG90dXN0YScsXG4gICAgICAnc2VhcmNoLWN1cnJlbnQtc3VnZ2VzdGlvbic6ICdUw6Rtw6RuaGV0a2luZW4gdmFsaW50YToge3tzZWxlY3Rpb259fScsXG4gICAgICAnc2VhcmNoLXBvc2l0aW9uJzogJ1BhaWthbm5hJyxcbiAgICAgIHN0cmVldDogJ0thdHUnLFxuICAgICAgc3Vid2F5OiAnTWV0cm8nLFxuICAgICAgc3RhdGlvbjogJ0FzZW1hJyxcbiAgICAgIHN0b3A6ICdQeXPDpGtraScsXG4gICAgICAnc3RvcC1uZWFyLXlvdSc6ICdMaW5qYSwgcHlzw6Rra2kgdGFpIGFzZW1hJyxcbiAgICAgICdzdG9wLW5lYXIteW91LWFpcnBsYW5lJzogJ0hhZSBsZW50b2phIHRhaSBsZW50b2FzZW1hYScsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1idXMnOiAnSGFlIGJ1c3NpbGluamFhIHRhaSBweXPDpGtracOkJyxcbiAgICAgICdzdG9wLW5lYXIteW91LWNpdHliaWtlJzogJ0hhZSBrYXVwdW5raXB5w7Zyw6Rhc2VtYWEnLFxuICAgICAgJ3N0b3AtbmVhci15b3UtcmFpbCc6ICdIYWUgbMOkaGlqdW5hYSB0YWkgYXNlbWFhJyxcbiAgICAgICdzdG9wLW5lYXIteW91LXN1YndheSc6ICdIYWUgbWV0cm9saW5qYWEgdGFpIGFzZW1hYScsXG4gICAgICAnc3RvcC1uZWFyLXlvdS10cmFtJzogJ0hhZSByYWl0aW9saW5qYWEgdGFpIHB5c8Oka2tpw6QnLFxuICAgICAgJ3N0b3Atcm91dGUtc3RhdGlvbic6ICdMaW5qYS0gamEgcHlzw6Rra2loYWt1JyxcbiAgICAgICd0b2RheS1hdCc6ICd0w6Ruw6TDpG4ga2xvJyxcbiAgICAgICd0b21vcnJvdy1hdCc6ICdodW9tZW5uYSBrbG8nLFxuICAgICAgdHJhbTogJ1JhaXRpb3ZhdW51JyxcbiAgICAgIHRyYWNrOiAnUmFpZGUnLFxuICAgICAgJ3VzZS1vd24tcG9zaXRpb24nOiAnS8OkeXTDpCBueWt5aXN0w6Qgc2lqYWludGlhJyxcbiAgICAgICdzZWxlY3QtZnJvbS1tYXAnOiAnVmFsaXRzZSBzaWphaW50aSBrYXJ0YWx0YScsXG4gICAgICAnc2VsZWN0LWZyb20tb3duLWxvY2F0aW9ucyc6ICdWYWxpdHNlIG9taXN0YSBwYWlrb2lzdGEnLFxuICAgICAgdmVudWU6ICdQYWlra2EnLFxuICAgICAgJ3ZpYS1wb2ludCc6ICdWw6RsaXBpc3RlJyxcbiAgICAgIHdoZXJlOiAnTWlubmUgbWVubsOkw6RuPycsXG4gICAgICBwbGFjZTogJ1BhaWtrYScsXG4gICAgfSxcbiAgfSxcbiAgcGw6IHtcbiAgICB0cmFuc2xhdGlvbjoge1xuICAgICAgYWRkcmVzczogJ0FkcmVzJyxcbiAgICAgICdhZGRyZXNzLXBsYWNlLW9yLWJ1c2luZXNzJzogJ0FkcmVzLCBtaWVqc2NlIGx1YiBmaXJtYScsXG4gICAgICAnYWRkLXZpYS1idXR0b24tbGFiZWwnOiAnRG9kYWogcHVua3QgcG/Fm3JlZG5pJyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbCc6XG4gICAgICAgICdXeWJpZXJ6IGN6YXMgcG9zdG9qdSBkbGEgcHVua3R1IHt7aW5kZXh9fScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtY2xvc2UnOlxuICAgICAgICAnWmFta25paiB3eWJvcm5payBjemFzdSBwb3N0b2p1IHcgcHVua2NpZSB7e2luZGV4fX0nLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLW9wZW4nOlxuICAgICAgICAnT3R3w7NyeiB3eWJvcm5payBjemFzdSBwb3N0b2p1IHcgcHVua2NpZSB7e2luZGV4fX0nLFxuICAgICAgYWlycGxhbmU6ICdMb3QnLFxuICAgICAgYXJyaXZhbDogJ1ByenlqYXpkJyxcbiAgICAgIGJhY2s6ICdXcsOzxIcnLFxuICAgICAgYmlrZXBhcms6ICdQYXJrdWogaSBKZWTFuiBkbGEgcm93ZXLDs3cnLFxuICAgICAgYmlrZXJlbnRhbHN0YXRpb246ICdTdGFjamEgcm93ZXJvd2EnLFxuICAgICAgYnVzOiAnYXV0b2J1cycsXG4gICAgICBjYW5jZWw6ICdBbnVsdWonLFxuICAgICAgY2FycGFyazogJ1Bhcmt1aiBpIEplZMW6JyxcbiAgICAgICdjbGVhci1idXR0b24tbGFiZWwnOiAnV3ljennFm8SHJyxcbiAgICAgICdjbGVhci1zZWFyY2gtaGlzdG9yeSc6ICdXeWN6ecWbxIcgaGlzdG9yacSZIHd5c3p1a2l3YW5pYScsXG4gICAgICBjdXJyZW50cG9zaXRpb246ICdPYmVjbmUgcG/Fgm/FvGVuaWUnLFxuICAgICAgZGVsZXRlOiAnVXN1xYQnLFxuICAgICAgJ2RlbGV0ZS1vbGQtc2VhcmNoZXMtaGVhZGVyJzpcbiAgICAgICAgJ0N6eSBuYSBwZXdubyBjaGNlc3ogd3ljennFm2NpxIcgaGlzdG9yacSZIHd5c3p1a2l3YW5pYT8nLFxuICAgICAgZGVwYXJ0dXJlOiAnT2RqYXpkJyxcbiAgICAgIGRlc3RpbmF0aW9uOiAnQ2VsJyxcbiAgICAgICdnaXZlLW9yaWdpbic6ICdXcHJvd2Fkxbogc3fDs2ogcHVua3QgcG9jesSFdGtvd3kuJyxcbiAgICAgICdnaXZlLWRlc3RpbmF0aW9uJzogJ1dwcm93YWTFuiBzd8OzaiBjZWwnLFxuICAgICAgZmF2b3VyaXRlOiAnVWx1YmlvbmUnLFxuICAgICAgZmVycnk6ICdQcm9tJyxcbiAgICAgICdmdXR1cmUtcm91dGUnOiAnUHJ6eXN6xYJhIHRyYXNhJyxcbiAgICAgIG9yaWdpbjogJ1BvY3rEhXRlaycsXG4gICAgICAnb3JpZ2luLXN0b3AtbmVhci15b3UnOiAnUG9jesSFdGVrJyxcbiAgICAgIG93bmxvY2F0aW9uczogJ1fFgmFzbmUgbWllanNjYScsXG4gICAgICBsb2FkaW5nOiAnxYFhZG93YW5pZeKApicsXG4gICAgICAnbWludXRlLXNob3J0JzogJ21pbi4nLFxuICAgICAgcGxhdGZvcm06ICdQZXJvbicsXG4gICAgICByYWlsOiAnUG9jacSFZycsXG4gICAgICByZXF1aXJlZDogJ3d5bWFnYW5lIHBvbGUnLFxuICAgICAgc2VhcmNoOiAnU3p1a2FqJyxcbiAgICAgICdzZWFyY2gtYWRkcmVzcy1vci1wbGFjZSc6ICdTenVrYWogcG8gYWRyZXNpZSBsdWIgbmF6d2llIG1pZWpzY2EnLFxuICAgICAgJ3NlYXJjaC1idXR0b24tbGFiZWwnOiAnU3p1a2FqJyxcbiAgICAgICdzZWFyY2gtZGVzdGluYXRpb24nOiAnU3p1a2FqIGNlbHUsIHRyYXN5IGx1YiBwcnp5c3Rhbmt1JyxcbiAgICAgICdzZWFyY2gtZGVzdGluYXRpb24taW5kZXgnOiAnV3Byb3dhZMW6IHB1bmt0IGRvY2Vsb3d5JyxcbiAgICAgICdzZWFyY2gtZGVzdGluYXRpb24tcmVzdWx0cy1idXQtbm8tc2VhcmNoJzpcbiAgICAgICAgJ1d5xZt3aWV0bCB3eW5pa2kgdyBzxIVzaWVkbmllaiBrYXJjaWUg4oCeQ2Vs4oCdJyxcbiAgICAgICdzZWFyY2gtbm8tcmVzdWx0cyc6ICdCcmFrIGxva2FsaXphY2ppJyxcbiAgICAgICdzZWFyY2gtb3JpZ2luJzogJ1d5c3p1a2FqIHBvY3rEhXRlaywga29uaWVjIGx1YiBwdW5rdCBwb8WbcmVkbmknLFxuICAgICAgJ3NlYXJjaC1vcmlnaW4taW5kZXgnOiAnV3Byb3dhZMW6IHB1bmt0IHBvY3rEhXRrb3d5JyxcbiAgICAgICdzZWFyY2gtcG9zaXRpb24nOiAnV3lrcnlqIGxva2FsaXphY2rEmScsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsJzogJ01pZWpzY2UsIGxva2FsaXphY2phIGkgcHJ6eXN0YW5lay4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtZGVza3RvcCc6XG4gICAgICAgICdOYXdpZ3VqIHBvIGxpxZtjaWUgdcW8eXdhasSFYyBzdHJ6YcWCZWsgaSB3eWJpZXJhaiBrbGF3aXN6ZW0gRW50ZXIuJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLW1vYmlsZSc6XG4gICAgICAgICdXcHJvd2FkxbogbG9rYWxpemFjasSZIGkgbmF3aWd1aiBwbyBsacWbY2llIGdlc3RhbWkgcHJ6ZXN1d2FuaWEuJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtbW92ZS10by1kZXN0aW5hdGlvbic6XG4gICAgICAgICdQbyB3eWJyYW5pdSBsb2thbGl6YWNqaSBwb2N6xIV0a293ZWosIGF1dG9tYXR5Y3puaWUgcHJ6ZWpkemllc3ogZG8gcG9sYSBtaWVqc2NhIGRvY2Vsb3dlZ28uJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuJzogJ0Rvc3TEmXBuYSBqZXN0IHt7Y291bnR9fSBwcm9wb3p5Y2phJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuX2Zldyc6ICdEb3N0xJlwbmUgc8SFIHt7Y291bnR9fSBwcm9wb3p5Y2plJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuX290aGVyJzogJ0Rvc3TEmXBuZSBqZXN0IHt7Y291bnR9fSBwcm9wb3p5Y2ppJyxcbiAgICAgICdzZWFyY2gtY3VycmVudC1zdWdnZXN0aW9uJzogJ09iZWNueSB3eWLDs3I6IHt7c2VsZWN0aW9ufX0nLFxuICAgICAgc3RyZWV0OiAnVWxpY2EnLFxuICAgICAgc3Vid2F5OiAnTWV0cm8nLFxuICAgICAgc3RhdGlvbjogJ1N0YWNqYScsXG4gICAgICBzdG9wOiAnUHJ6eXN0YW5laycsXG4gICAgICAnc3RvcC1uZWFyLXlvdSc6ICdTenVrYWogcHJ6eXN0YW5rw7N3IGkgdHJhcycsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1haXJwbGFuZSc6ICdTenVrYWogbG90w7N3IGkgbG90bmlzaycsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1idXMnOiAnU3p1a2FqIHRyYXMgYXV0b2J1c293eWNoIGkgcHJ6eXN0YW5rw7N3JyxcbiAgICAgICdzdG9wLW5lYXIteW91LWNpdHliaWtlJzogJ1N6dWthaiBzdGFjamkgcm93ZXLDs3cgbWllanNraWNoJyxcbiAgICAgICdzdG9wLW5lYXIteW91LXJhaWwnOiAnU3p1a2FqIHRyYXMga29sZWpvd3ljaCBpIHByenlzdGFua8OzdycsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1zdWJ3YXknOiAnU3p1a2FqIHRyYXMgbWV0cmEgaSBwcnp5c3RhbmvDs3cgJyxcbiAgICAgICdzdG9wLW5lYXIteW91LXRyYW0nOiAnU3p1a2FqIHRyYXMgdHJhbXdham93eWNoIGkgcHJ6eXN0YW5rw7N3JyxcbiAgICAgICdzdG9wLXJvdXRlLXN0YXRpb24nOiAnV3lzenVraXdhbmllIGF1dG9idXPDs3cgaSBwcnp5c3RhbmvDs3cnLFxuICAgICAgJ3RvZGF5LWF0JzogJ2R6acWbIG8nLFxuICAgICAgJ3RvbW9ycm93LWF0JzogJ2p1dHJvIG8nLFxuICAgICAgdHJhbTogJ1RyYW13YWonLFxuICAgICAgdHJhY2s6ICdUb3InLFxuICAgICAgJ3VzZS1vd24tcG9zaXRpb24nOiAnVcW8eWogb2JlY25laiBsb2thbGl6YWNqaScsXG4gICAgICAnc2VsZWN0LWZyb20tbWFwJzogJ1d5YmllcnogbWllanNjZSBuYSBtYXBpZScsXG4gICAgICAnc2VsZWN0LWZyb20tb3duLWxvY2F0aW9ucyc6ICdXeWJpZXJ6IHogd8WCYXNueWNoIG1pZWpzYycsXG4gICAgICB2ZW51ZTogJ01pZWpzY2UnLFxuICAgICAgJ3ZpYS1wb2ludCc6ICdQcnpleiBwdW5rdCcsXG4gICAgICB3aGVyZTogJ0Rva8SFZD8nLFxuICAgICAgcGxhY2U6ICdNaWVqc2NlJyxcbiAgICB9LFxuICB9LFxuICBzdjoge1xuICAgIHRyYW5zbGF0aW9uOiB7XG4gICAgICBhZGRyZXNzOiAnQWRyZXNzJyxcbiAgICAgICdhZGRyZXNzLXBsYWNlLW9yLWJ1c2luZXNzJzogJ0FkcmVzcywgcGxhdHMgZWxsZXIgZsO2cmV0YWcnLFxuICAgICAgJ2FkZC12aWEtYnV0dG9uLWxhYmVsJzogJ0zDpGdnIHRpbGwgdmlhcHVua3QnLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsJzpcbiAgICAgICAgJ1N0w6RsbCBpbiB2YXJha3RpZ2hldCBmw7ZyIHZpYXB1bmt0ZW4ge3tpbmRleH19JyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1jbG9zZSc6XG4gICAgICAgICdTdMOkbmcgdsOkbGphcmVuIGbDtnIgdmFyYWt0aWdoZXQgdmlkIHZpYS1wdW5rdGVuIHt7aW5kZXh9fScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtb3Blbic6XG4gICAgICAgICfDlnBwbmEgdsOkbGphcmVuIGbDtnIgdmFyYWt0aWdoZXQgdmlkIHZpYS1wdW5rdGVuIHt7aW5kZXh9fScsXG4gICAgICBhaXJwbGFuZTogJ0ZseWcnLFxuICAgICAgYXJyaXZhbDogJ0FubMOkbmRlcicsXG4gICAgICBiYWNrOiAnVGlsbGJha2EnLFxuICAgICAgYmlrZXJlbnRhbHN0YXRpb246ICdTdGFkc2N5a2Vsc3RhdGlvbicsXG4gICAgICBiaWtlcGFyazogJ0Fuc2x1dG5pbmdzcGFya2VyaW5nIGbDtnIgY3lrbGFyJyxcbiAgICAgIGJ1czogJ0J1c3NpJyxcbiAgICAgIGNhbmNlbDogJ0F2YnJ5dCcsXG4gICAgICBjYXJwYXJrOiAnSW5mYXJ0c3BhcmtlcmluZycsXG4gICAgICAnY2xlYXItYnV0dG9uLWxhYmVsJzogJ1TDtm0nLFxuICAgICAgJ2NsZWFyLXNlYXJjaC1oaXN0b3J5JzogJ1TDtm0gc8O2a2hpc3RvcmlrZW4nLFxuICAgICAgY3VycmVudHBvc2l0aW9uOiAnTnV2YXJhbmRlIHBvc2l0aW9uJyxcbiAgICAgIGRlbGV0ZTogJ1RhIGJvcnQnLFxuICAgICAgJ2RlbGV0ZS1vbGQtc2VhcmNoZXMtaGVhZGVyJzogJ1ZpbGwgZHUgdMO2bW1hIHPDtmtoaXN0b3Jpa2VuPycsXG4gICAgICBkZXBhcnR1cmU6ICdBdmfDpW5nc3RpZCcsXG4gICAgICBkZXN0aW5hdGlvbjogJ0Rlc3RpbmF0aW9uJyxcbiAgICAgIGZhdm91cml0ZTogJ0Zhdm9yaXQnLFxuICAgICAgZmVycnk6ICdGw6RyamEnLFxuICAgICAgJ2Z1dHVyZS1yb3V0ZSc6ICdGcmFtdGlkYSBydXR0JyxcbiAgICAgICdnaXZlLWRlc3RpbmF0aW9uJzogJ1Nrcml2IGluIGRpbiBkZXN0aW5hdGlvbicsXG4gICAgICAnZ2l2ZS1vcmlnaW4nOiAnU2tyaXYgaW4gZGluIGF2ZsOkcmRzcGxhdHMnLFxuICAgICAgb3JpZ2luOiAnQXZmw6RyZHNwbGF0cycsXG4gICAgICAnb3JpZ2luLXN0b3AtbmVhci15b3UnOiAnQXZmw6RyZHNwbGF0cycsXG4gICAgICBvd25sb2NhdGlvbnM6ICdFZ25hIHBsYXRzZXInLFxuICAgICAgbG9hZGluZzogJ0xhZGRhci4uLicsXG4gICAgICAnbWludXRlLXNob3J0JzogJ21pbicsXG4gICAgICBwbGF0Zm9ybTogJ1BsYXR0Zm9ybScsXG4gICAgICByYWlsOiAnVMOlZycsXG4gICAgICByZXF1aXJlZDogJ29ibGlnYXRvcmlza3QgZsOkbHQnLFxuICAgICAgc2VhcmNoOiAnU8O2aycsXG4gICAgICAnc2VhcmNoLWFkZHJlc3Mtb3ItcGxhY2UnOiAnU8O2ayBtZWQgYWRyZXNzZW4gZWxsZXIgcGxhdHNlbnMgbmFtbicsXG4gICAgICAnc2VhcmNoLWJ1dHRvbi1sYWJlbCc6ICdTw7ZrJyxcbiAgICAgICdzZWFyY2gtZGVzdGluYXRpb24nOiAnU8O2ayBkZXN0aW5hdGlvbiwgbGluamUgZWxsZXIgaMOlbGxwbGF0cycsXG4gICAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLWluZGV4JzogJ1Nrcml2IGRlc3RpbmF0aW9uJyxcbiAgICAgICdzZWFyY2gtZGVzdGluYXRpb24tcmVzdWx0cy1idXQtbm8tc2VhcmNoJzpcbiAgICAgICAgJ1NlIHJlc3VsdGF0ZW4gdW5kZXIgZmxpa2VuIERlc3RpbmF0aW9uJyxcbiAgICAgICdzZWFyY2gtbm8tcmVzdWx0cyc6ICdJbmdhIHPDtmtyZXN1bHRhdCcsXG4gICAgICAnc2VhcmNoLW9yaWdpbic6ICdTw7ZrIGF2ZsOkcmRzcGxhdHMsIGxpbmplIGVsbGVyIGjDpWxscGxhdHMnLFxuICAgICAgJ3NlYXJjaC1vcmlnaW4taW5kZXgnOiAnU2tyaXYgYXZmw6RyZHNwbGF0cycsXG4gICAgICAnc2VhcmNoLXBvc2l0aW9uJzogJ1PDtmsgcG9zaXRpb24nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbCc6ICdQbGF0cywgbGluamUgb2NoIGjDpWxscGxhdHNzw7ZrbmluZy4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtZGVza3RvcCc6XG4gICAgICAgICdOYXZpZ2VyYSBsaXN0YW4gbWVkIHBpbHRhbmdlbnRlcm5hIG9jaCB2w6RsaiBtZWQgRW50ZXItdGFuZ2V0ZW4uJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLW1vYmlsZSc6XG4gICAgICAgICdBbmdlIHBsYXRzZW4gb2NoIG5hdmlnZXJhIGkgbGlzdGFuIGdlbm9tIGF0dCBzdmVwYS4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1tb3ZlLXRvLWRlc3RpbmF0aW9uJzpcbiAgICAgICAgJ0VmdGVyIGF0dCBkdSB2YWx0IGF2Z8OlbmdzcGxhdHNlbiB0YXMgZHUgZGlyZWt0IHRpbGwgRGVzdGluYXRpb24tZsOkbHRldC4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW4nOiAnSGl0dGFkZSB7e2NvdW50fX0gZsO2cnNsYWcnLFxuICAgICAgJ3NlYXJjaC1jdXJyZW50LXN1Z2dlc3Rpb24nOiAnTnV2YXJhbmRlIHZhbDoge3tzZWxlY3Rpb259fScsXG4gICAgICBzdHJlZXQ6ICdHYXRhJyxcbiAgICAgIHN1YndheTogJ01ldHJvJyxcbiAgICAgIHN0YXRpb246ICdTdGF0aW9uJyxcbiAgICAgIHN0b3A6ICdIw6VsbHBsYXRzJyxcbiAgICAgICdzdG9wLW5lYXIteW91JzogJ1PDtmsgaMOlbGxwbGF0c2VyIGVsbGVyIGxpbmplcicsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1haXJwbGFuZSc6ICdTw7ZrIGZseWcgZWxsZXIgZmx5Z3BsYXRzZXInLFxuICAgICAgJ3N0b3AtbmVhci15b3UtYnVzJzogJ1PDtmsgYnVzc2xpbmplciBlbGxlciBow6VsbHBsYXRzZXInLFxuICAgICAgJ3N0b3AtbmVhci15b3UtY2l0eWJpa2UnOiAnU8O2ayBzdGFkc2N5a2Vsc3RhdGlvbmVyJyxcbiAgICAgICdzdG9wLW5lYXIteW91LXJhaWwnOiAnU8O2ayBuw6RydMOlZ2VyIGVsbGVyIHN0YXRpb25lcicsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1zdWJ3YXknOiAnU8O2ayBtZXRyb2xpbmplciBlbGxlciBzdGF0aW9uZXInLFxuICAgICAgJ3N0b3AtbmVhci15b3UtdHJhbSc6ICdTw7ZrIHNww6VydmFnbmxpbmplciBlbGxlciBow6VsbHBsYXRzZXInLFxuICAgICAgJ3N0b3Atcm91dGUtc3RhdGlvbic6ICdCdXNzIG9jaCBzdG9wcCBzw7ZrbmluZ2VuJyxcbiAgICAgICd0b2RheS1hdCc6ICdpIGRhZyBrbCcsXG4gICAgICAndG9tb3Jyb3ctYXQnOiAnaSBtb3Jnb24nLFxuICAgICAgdHJhbTogJ1Nww6VydmFnbicsXG4gICAgICB0cmFjazogJ1Nww6VyJyxcbiAgICAgICd1c2Utb3duLXBvc2l0aW9uJzogJ0FudsOkbmQgbWluIHBvc2l0aW9uJyxcbiAgICAgICdzZWxlY3QtZnJvbS1tYXAnOiAnVsOkbGogcG9zaXRpb24gZnLDpW4ga2FydGFuJyxcbiAgICAgICdzZWxlY3QtZnJvbS1vd24tbG9jYXRpb25zJzogJ1bDpGxqIGZyw6VuIGVnbmEgcGxhdHNlcicsXG4gICAgICB2ZW51ZTogJ03DtnRlc3BsYXRzJyxcbiAgICAgICd2aWEtcG9pbnQnOiAnVmlhIHB1bmt0JyxcbiAgICAgIHdoZXJlOiAnVmFydCB2aWxsIGR1IMOla2E/JyxcbiAgICAgIHBsYWNlOiAnUGxhdHMnLFxuICAgIH0sXG4gIH0sXG59O1xuXG5leHBvcnQgZGVmYXVsdCB0cmFuc2xhdGlvbnM7XG4iLCJpbXBvcnQgeyBjcmVhdGVJbnN0YW5jZSB9IGZyb20gJ2kxOG5leHQnO1xuaW1wb3J0IHRyYW5zbGF0aW9ucyBmcm9tICcuL3RyYW5zbGF0aW9ucyc7XG5cbmNvbnN0IGkxOG4gPSBjcmVhdGVJbnN0YW5jZSh7XG4gIGZhbGxiYWNrTG5nOiAnZmknLFxuICAvLyBkZWJ1ZzogdHJ1ZSxcbiAgcmVzb3VyY2VzOiB0cmFuc2xhdGlvbnMsXG4gIGRlZmF1bHROUzogJ3RyYW5zbGF0aW9uJyxcbiAgcmVhY3Q6IHtcbiAgICB1c2VTdXNwZW5zZTogdHJ1ZSxcbiAgfSxcbn0pO1xuXG5pMThuLmluaXQoKTtcblxuZXhwb3J0IGRlZmF1bHQgaTE4bjtcbiIsImZ1bmN0aW9uIHN0eWxlSW5qZWN0KGNzcywgcmVmKSB7XG4gIGlmICggcmVmID09PSB2b2lkIDAgKSByZWYgPSB7fTtcbiAgdmFyIGluc2VydEF0ID0gcmVmLmluc2VydEF0O1xuXG4gIGlmICghY3NzIHx8IHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuOyB9XG5cbiAgdmFyIGhlYWQgPSBkb2N1bWVudC5oZWFkIHx8IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07XG4gIHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gIHN0eWxlLnR5cGUgPSAndGV4dC9jc3MnO1xuXG4gIGlmIChpbnNlcnRBdCA9PT0gJ3RvcCcpIHtcbiAgICBpZiAoaGVhZC5maXJzdENoaWxkKSB7XG4gICAgICBoZWFkLmluc2VydEJlZm9yZShzdHlsZSwgaGVhZC5maXJzdENoaWxkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICB9XG5cbiAgaWYgKHN0eWxlLnN0eWxlU2hlZXQpIHtcbiAgICBzdHlsZS5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3M7XG4gIH0gZWxzZSB7XG4gICAgc3R5bGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgc3R5bGVJbmplY3Q7XG4iLCJpbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QsIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJlYWN0TW9kYWwgZnJvbSAncmVhY3QtbW9kYWwnO1xuaW1wb3J0IGN4IGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IEljb24gZnJvbSAnQGRpZ2l0cmFuc2l0LWNvbXBvbmVudC9kaWdpdHJhbnNpdC1jb21wb25lbnQtaWNvbic7XG5pbXBvcnQgRGlhbG9nTW9kYWwgZnJvbSAnQGRpZ2l0cmFuc2l0LWNvbXBvbmVudC9kaWdpdHJhbnNpdC1jb21wb25lbnQtZGlhbG9nLW1vZGFsJztcbmltcG9ydCBBdXRvc3VnZ2VzdCBmcm9tICdyZWFjdC1hdXRvc3VnZ2VzdCc7XG5pbXBvcnQgbW9iaWxlU3R5bGVzIGZyb20gJy4vTW9iaWxlU2VhcmNoLnNjc3MnO1xuaW1wb3J0IG1vYmlsZU5vU2Nyb2xsU3R5bGVzIGZyb20gJy4vTW9iaWxlTm9TY3JvbGwuc2Nzcyc7XG5cbmNsYXNzIEF1dG9zdWdnZXN0UGF0Y2ggZXh0ZW5kcyBBdXRvc3VnZ2VzdCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIHNlbGYub25TdWdnZXN0aW9uVG91Y2hNb3ZlID0gKCkgPT4ge1xuICAgICAgc2VsZi5qdXN0U2VsZWN0ZWRTdWdnZXN0aW9uID0gZmFsc2U7XG4gICAgICBzZWxmLnByZXNzZWRTdWdnZXN0aW9uID0gbnVsbDtcbiAgICB9O1xuICB9XG59XG5cbmNvbnN0IE1vYmlsZVNlYXJjaCA9ICh7XG4gIGFwcEVsZW1lbnQsXG4gIGlkLFxuICBjbG9zZUhhbmRsZSxcbiAgY2xlYXJJbnB1dCxcbiAgdmFsdWUsXG4gIHN1Z2dlc3Rpb25zLFxuICBpbnB1dFByb3BzLFxuICBmZXRjaEZ1bmN0aW9uLFxuICByZW5kZXJTdWdnZXN0aW9uLFxuICBnZXRTdWdnZXN0aW9uVmFsdWUsXG4gIGFyaWFMYWJlbCxcbiAgbGFiZWwsXG4gIG9uU3VnZ2VzdGlvblNlbGVjdGVkLFxuICBjbGVhck9sZFNlYXJjaGVzLFxuICBkaWFsb2dIZWFkZXJUZXh0LFxuICBkaWFsb2dQcmltYXJ5QnV0dG9uVGV4dCxcbiAgZGlhbG9nU2Vjb25kYXJ5QnV0dG9uVGV4dCxcbiAgY2xlYXJJbnB1dEJ1dHRvblRleHQsXG4gIGZvY3VzSW5wdXQsXG4gIGNvbG9yLFxuICBob3ZlckNvbG9yLFxuICBhY2Nlc3NpYmxlUHJpbWFyeUNvbG9yLFxuICBzZWFyY2hPcGVuLFxuICBmb250V2VpZ2h0cyxcbiAgc2hvd1Njcm9sbCxcbiAgbGFuZyxcbn0pID0+IHtcbiAgY29uc3Qgc3R5bGVzID0gc2hvd1Njcm9sbCA/IG1vYmlsZVN0eWxlcyA6IG1vYmlsZU5vU2Nyb2xsU3R5bGVzO1xuXG4gIGNvbnN0IGlucHV0SWQgPSBgJHtpZH0taW5wdXRgO1xuICBjb25zdCBsYWJlbElkID0gYCR7aWR9LWxhYmVsYDtcblxuICBjb25zdCBbaXNEaWFsb2dPcGVuLCBzZXREaWFsb2dPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgaW5wdXRSZWYgPSBSZWFjdC51c2VSZWYoKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIFJlYWN0TW9kYWwuc2V0QXBwRWxlbWVudChhcHBFbGVtZW50KTtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IG9uQ2xvc2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY2xvc2VIYW5kbGUoKTtcbiAgfSk7XG5cbiAgY29uc3Qgb25TZWxlY3QgPSAoZSwgcmVmKSA9PiB7XG4gICAgaWYgKHJlZi5zdWdnZXN0aW9uLnR5cGUgPT09ICdjbGVhci1zZWFyY2gtaGlzdG9yeScpIHtcbiAgICAgIHNldERpYWxvZ09wZW4odHJ1ZSk7XG4gICAgfSBlbHNlIGlmICghcmVmLnN1Z2dlc3Rpb24ucHJvcGVydGllcy5hcnJvd0NsaWNrZWQpIHtcbiAgICAgIC8vIFNlbGVjdCBpdGVtIGlmIGZpbGwgaW5wdXQgYnV0dG9uIGlzIG5vdCBwcmVzc2VkIChkaWFnb25hbCBhcnJvdyBpbiBzdWdnZXN0aW9uIGl0ZW1zKVxuICAgICAgb25TdWdnZXN0aW9uU2VsZWN0ZWQoZSwgcmVmKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaXNLZXlib2FyZFNlbGVjdGlvbkV2ZW50ID0gZXZlbnQgPT4ge1xuICAgIGNvbnN0IHNwYWNlID0gWzEzLCAnICcsICdTcGFjZWJhciddO1xuICAgIGNvbnN0IGVudGVyID0gWzMyLCAnRW50ZXInXTtcbiAgICBjb25zdCBrZXkgPSAoZXZlbnQgJiYgKGV2ZW50LmtleSB8fCBldmVudC53aGljaCB8fCBldmVudC5rZXlDb2RlKSkgfHwgJyc7XG5cbiAgICBpZiAoIWtleSB8fCAhc3BhY2UuY29uY2F0KGVudGVyKS5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgY29uc3QgZ2V0VmFsdWUgPSBzdWdnZXN0aW9uID0+IHtcbiAgICBpZiAoc3VnZ2VzdGlvbi50eXBlID09PSAnY2xlYXItc2VhcmNoLWhpc3RvcnknKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIHJldHVybiBnZXRTdWdnZXN0aW9uVmFsdWUoc3VnZ2VzdGlvbik7XG4gIH07XG5cbiAgY29uc3QgcmVuZGVySXRlbSA9IGl0ZW0gPT4ge1xuICAgIGlmIChpdGVtLnR5cGUgPT09ICdjbGVhci1zZWFyY2gtaGlzdG9yeScpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzTmFtZT17c3R5bGVzWydjbGVhci1zZWFyY2gtaGlzdG9yeSddfT5cbiAgICAgICAgICB7aXRlbS5sYWJlbElkfVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiByZW5kZXJTdWdnZXN0aW9uKGl0ZW0pO1xuICB9O1xuXG4gIGNvbnN0IHJlbmRlckRpYWxvZ01vZGFsID0gKCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICA8RGlhbG9nTW9kYWxcbiAgICAgICAgYXBwRWxlbWVudD17YXBwRWxlbWVudH1cbiAgICAgICAgaXNNb2RhbE9wZW49e2lzRGlhbG9nT3Blbn1cbiAgICAgICAgaGFuZGxlQ2xvc2U9eygpID0+IHNldERpYWxvZ09wZW4oZmFsc2UpfVxuICAgICAgICBoZWFkZXJUZXh0PXtkaWFsb2dIZWFkZXJUZXh0fVxuICAgICAgICBwcmltYXJ5QnV0dG9uVGV4dD17ZGlhbG9nUHJpbWFyeUJ1dHRvblRleHR9XG4gICAgICAgIHNlY29uZGFyeUJ1dHRvblRleHQ9e2RpYWxvZ1NlY29uZGFyeUJ1dHRvblRleHR9XG4gICAgICAgIHByaW1hcnlCdXR0b25PbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgY2xlYXJPbGRTZWFyY2hlcygpO1xuICAgICAgICAgIHNldERpYWxvZ09wZW4oZmFsc2UpO1xuICAgICAgICB9fVxuICAgICAgICBzZWNvbmRhcnlCdXR0b25PbkNsaWNrPXsoKSA9PiBzZXREaWFsb2dPcGVuKGZhbHNlKX1cbiAgICAgICAgY29sb3I9e2NvbG9yfVxuICAgICAgICBob3ZlckNvbG9yPXtob3ZlckNvbG9yfVxuICAgICAgICBmb250V2VpZ2h0cz17Zm9udFdlaWdodHN9XG4gICAgICAgIGxhbmc9e2xhbmd9XG4gICAgICAvPlxuICAgICk7XG4gIH07XG5cbiAgY29uc3QgY2xlYXJCdXR0b24gPSAoKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzTmFtZT17c3R5bGVzWydjbGVhci1pbnB1dCddfVxuICAgICAgICBvbkNsaWNrPXtjbGVhcklucHV0fVxuICAgICAgICBvbktleURvd249e2UgPT4gaXNLZXlib2FyZFNlbGVjdGlvbkV2ZW50KGUpICYmIGNsZWFySW5wdXQoKX1cbiAgICAgICAgYXJpYS1sYWJlbD17Y2xlYXJJbnB1dEJ1dHRvblRleHR9XG4gICAgICA+XG4gICAgICAgIDxJY29uIGltZz1cImNsb3NlXCIgY29sb3I9e2NvbG9yfSAvPlxuICAgICAgPC9idXR0b24+XG4gICAgKTtcbiAgfTtcblxuICBjb25zdCByZW5kZXJDb250ZW50ID0gKCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzWydjb21ib2JveC1jb250YWluZXInXX0gaHRtbEZvcj17aW5wdXRJZH0+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlc1snY29tYm9ib3gtaWNvbiddfVxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG9uQ2xvc2UoKX1cbiAgICAgICAgICBvbktleURvd249e2UgPT4gaXNLZXlib2FyZFNlbGVjdGlvbkV2ZW50KGUpICYmIG9uQ2xvc2UoKX1cbiAgICAgICAgICBhcmlhLWxhYmVsPXtkaWFsb2dTZWNvbmRhcnlCdXR0b25UZXh0fVxuICAgICAgICAgIHRhYkluZGV4PXswfVxuICAgICAgICA+XG4gICAgICAgICAgPEljb24gaW1nPVwiYXJyb3dcIiAvPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXNbJ3JpZ2h0LWNvbHVtbiddfT5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlc1snY29tYm9ib3gtbGFiZWwnXX0gaWQ9e2xhYmVsSWR9PlxuICAgICAgICAgICAge2xhYmVsfVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8QXV0b3N1Z2dlc3RQYXRjaFxuICAgICAgICAgICAgYWx3YXlzUmVuZGVyU3VnZ2VzdGlvbnNcbiAgICAgICAgICAgIGlkPXtpZH1cbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zPXtzdWdnZXN0aW9uc31cbiAgICAgICAgICAgIG9uU3VnZ2VzdGlvbnNGZXRjaFJlcXVlc3RlZD17ZmV0Y2hGdW5jdGlvbn1cbiAgICAgICAgICAgIGdldFN1Z2dlc3Rpb25WYWx1ZT17Z2V0VmFsdWV9XG4gICAgICAgICAgICByZW5kZXJTdWdnZXN0aW9uPXtyZW5kZXJJdGVtfVxuICAgICAgICAgICAgLy8gZm9jdXNJbnB1dE9uU3VnZ2VzdGlvbkNsaWNrIG11c3QgYmUgc2V0IHRvIHRydWUuXG4gICAgICAgICAgICAvLyBJZiBzZXQgdG8gZmFsc2UsIGlucHV0IHdvbid0IGJlIGZvY3VzZWQgd2hlbiB1c2VyIGNsaWNrcyBvblxuICAgICAgICAgICAgLy8gRmlsbCBpbnB1dCBidXR0b24gaW4gc3VnZ2VzdGlvbiBsaXN0LiAoZGlhZ29uYWwgYXJyb3cgaW4gc3RyZWV0IG5hbWUgaXRlbXMpXG4gICAgICAgICAgICBmb2N1c0lucHV0T25TdWdnZXN0aW9uQ2xpY2tcbiAgICAgICAgICAgIHNob3VsZFJlbmRlclN1Z2dlc3Rpb25zPXsoKSA9PiB0cnVlfVxuICAgICAgICAgICAgaW5wdXRQcm9wcz17e1xuICAgICAgICAgICAgICAuLi5pbnB1dFByb3BzLFxuICAgICAgICAgICAgICBjbGFzc05hbWU6IGN4KFxuICAgICAgICAgICAgICAgIGAke3N0eWxlcy5pbnB1dH0gJHtzdHlsZXNbaWRdIHx8ICcnfSAke1xuICAgICAgICAgICAgICAgICAgaW5wdXRQcm9wcy52YWx1ZSA/IHN0eWxlcy5oYXNWYWx1ZSA6ICcnXG4gICAgICAgICAgICAgICAgfWAsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIGF1dG9Gb2N1czogdHJ1ZSxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICByZW5kZXJJbnB1dENvbXBvbmVudD17cCA9PiAoXG4gICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgPGlucHV0IGFyaWEtbGFiZWw9e2FyaWFMYWJlbH0gaWQ9e2lkfSB7Li4ucH0gLz5cbiAgICAgICAgICAgICAgICB7dmFsdWUgJiYgY2xlYXJCdXR0b24oKX1cbiAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgdGhlbWU9e3N0eWxlc31cbiAgICAgICAgICAgIG9uU3VnZ2VzdGlvblNlbGVjdGVkPXtvblNlbGVjdH1cbiAgICAgICAgICAgIHJlZj17aW5wdXRSZWZ9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfTtcbiAgLy8gVGhpcyBkb2VzIG5vdCBzZWVtIHRvIGRvIGFueXRoaW5nLlxuICAvLyBXaGVuIGRvaW5nIHF1aWNrIHRlc3Rpbmcgb24gdGhpcyBpdCBsb29rZWQgbGlrZSBpbnB1dFJlZi5jdXJyZW50IGlzIGFsd2F5cyB1bmRlZmluZWQuXG4gIGlmIChmb2N1c0lucHV0ICYmIGlucHV0UmVmLmN1cnJlbnQ/LmlucHV0KSB7XG4gICAgaW5wdXRSZWYuY3VycmVudC5pbnB1dC5mb2N1cygpO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8UmVhY3RNb2RhbFxuICAgICAgaXNPcGVuPXtzZWFyY2hPcGVufVxuICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ21vYmlsZS1tb2RhbCddfVxuICAgICAgb3ZlcmxheUNsYXNzTmFtZT17c3R5bGVzWydtb2JpbGUtbW9kYWwtb3ZlcmxheSddfVxuICAgICAgb25BZnRlckNsb3NlPXtvbkNsb3NlfVxuICAgICAgc2hvdWxkQ2xvc2VPbkVzY1xuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ21vYmlsZS1tb2RhbC1jb250ZW50J119XG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgJy0tY29sb3InOiBgJHtjb2xvcn1gLFxuICAgICAgICAgICctLWFjY2Vzc2libGUtcHJpbWFyeS1jb2xvcic6IGFjY2Vzc2libGVQcmltYXJ5Q29sb3IsXG4gICAgICAgICAgJy0taG92ZXItY29sb3InOiBgJHtob3ZlckNvbG9yfWAsXG4gICAgICAgICAgJy0tZm9udC13ZWlnaHQtbWVkaXVtJzogZm9udFdlaWdodHMubWVkaXVtLFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICB7cmVuZGVyQ29udGVudCgpfVxuICAgICAgICB7cmVuZGVyRGlhbG9nTW9kYWwoKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvUmVhY3RNb2RhbD5cbiAgKTtcbn07XG5cbk1vYmlsZVNlYXJjaC5wcm9wVHlwZXMgPSB7XG4gIGFwcEVsZW1lbnQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgY2xvc2VIYW5kbGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGNsZWFySW5wdXQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIHZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjbGVhcklucHV0QnV0dG9uVGV4dDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgc3VnZ2VzdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vYmplY3QpLmlzUmVxdWlyZWQsXG4gIGlucHV0UHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25CbHVyOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIHZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgfSkuaXNSZXF1aXJlZCxcbiAgZmV0Y2hGdW5jdGlvbjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgZ2V0U3VnZ2VzdGlvblZhbHVlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICByZW5kZXJTdWdnZXN0aW9uOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBvblN1Z2dlc3Rpb25TZWxlY3RlZDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgY2xlYXJPbGRTZWFyY2hlczogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgYXJpYUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBkaWFsb2dIZWFkZXJUZXh0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICBkaWFsb2dQcmltYXJ5QnV0dG9uVGV4dDogUHJvcFR5cGVzLnN0cmluZyxcbiAgZGlhbG9nU2Vjb25kYXJ5QnV0dG9uVGV4dDogUHJvcFR5cGVzLnN0cmluZyxcbiAgZm9jdXNJbnB1dDogUHJvcFR5cGVzLmJvb2wsXG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBob3ZlckNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBhY2Nlc3NpYmxlUHJpbWFyeUNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIHNlYXJjaE9wZW46IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIGZvbnRXZWlnaHRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIG1lZGl1bTogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICB9KS5pc1JlcXVpcmVkLFxuICBzaG93U2Nyb2xsOiBQcm9wVHlwZXMuYm9vbCxcbiAgbGFuZzogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxufTtcblxuTW9iaWxlU2VhcmNoLmRlZmF1bHRQcm9wcyA9IHtcbiAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgYXJpYUxhYmVsOiB1bmRlZmluZWQsXG4gIGRpYWxvZ0hlYWRlclRleHQ6IHVuZGVmaW5lZCxcbiAgZGlhbG9nUHJpbWFyeUJ1dHRvblRleHQ6IHVuZGVmaW5lZCxcbiAgZGlhbG9nU2Vjb25kYXJ5QnV0dG9uVGV4dDogdW5kZWZpbmVkLFxuICBmb2N1c0lucHV0OiBmYWxzZSxcbiAgY29sb3I6IHVuZGVmaW5lZCxcbiAgaG92ZXJDb2xvcjogdW5kZWZpbmVkLFxuICBzaG93U2Nyb2xsOiB1bmRlZmluZWQsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBNb2JpbGVTZWFyY2g7XG4iLCIvKiEgRm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gcGxlYXNlIHNlZSBpbmRleC5qcy5MSUNFTlNFLnR4dCAqL1xuIWZ1bmN0aW9uKGUsdCl7aWYoXCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwib2JqZWN0XCI9PXR5cGVvZiBtb2R1bGUpbW9kdWxlLmV4cG9ydHM9dChyZXF1aXJlKFwicmVhY3RcIikpO2Vsc2UgaWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShbXCJyZWFjdFwiXSx0KTtlbHNle3ZhciBuPVwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzP3QocmVxdWlyZShcInJlYWN0XCIpKTp0KGUucmVhY3QpO2Zvcih2YXIgbyBpbiBuKShcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cz9leHBvcnRzOmUpW29dPW5bb119fShcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOnRoaXMsKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXs4ODg6ZnVuY3Rpb24oZSx0LG4pe3ZhciBvLHI7cj12b2lkIDAhPT1uLmc/bi5nOlwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OnRoaXMsbz1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlKXtcInVzZSBzdHJpY3RcIjt2YXIgdD17aWdub3JlOlwiW2RhdGEtc2Nyb2xsLWlnbm9yZV1cIixoZWFkZXI6bnVsbCx0b3BPbkVtcHR5SGFzaDohMCxzcGVlZDo1MDAsc3BlZWRBc0R1cmF0aW9uOiExLGR1cmF0aW9uTWF4Om51bGwsZHVyYXRpb25NaW46bnVsbCxjbGlwOiEwLG9mZnNldDowLGVhc2luZzpcImVhc2VJbk91dEN1YmljXCIsY3VzdG9tRWFzaW5nOm51bGwsdXBkYXRlVVJMOiEwLHBvcHN0YXRlOiEwLGVtaXRFdmVudHM6ITB9LG49ZnVuY3Rpb24oKXt2YXIgZT17fTtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChhcmd1bWVudHMsKGZ1bmN0aW9uKHQpe2Zvcih2YXIgbiBpbiB0KXtpZighdC5oYXNPd25Qcm9wZXJ0eShuKSlyZXR1cm47ZVtuXT10W25dfX0pKSxlfSxvPWZ1bmN0aW9uKGUpe1wiI1wiPT09ZS5jaGFyQXQoMCkmJihlPWUuc3Vic3RyKDEpKTtmb3IodmFyIHQsbj1TdHJpbmcoZSksbz1uLmxlbmd0aCxyPS0xLHU9XCJcIixpPW4uY2hhckNvZGVBdCgwKTsrK3I8bzspe2lmKDA9PT0odD1uLmNoYXJDb2RlQXQocikpKXRocm93IG5ldyBJbnZhbGlkQ2hhcmFjdGVyRXJyb3IoXCJJbnZhbGlkIGNoYXJhY3RlcjogdGhlIGlucHV0IGNvbnRhaW5zIFUrMDAwMC5cIik7dSs9dD49MSYmdDw9MzF8fDEyNz09dHx8MD09PXImJnQ+PTQ4JiZ0PD01N3x8MT09PXImJnQ+PTQ4JiZ0PD01NyYmNDU9PT1pP1wiXFxcXFwiK3QudG9TdHJpbmcoMTYpK1wiIFwiOnQ+PTEyOHx8NDU9PT10fHw5NT09PXR8fHQ+PTQ4JiZ0PD01N3x8dD49NjUmJnQ8PTkwfHx0Pj05NyYmdDw9MTIyP24uY2hhckF0KHIpOlwiXFxcXFwiK24uY2hhckF0KHIpfXJldHVyblwiI1wiK3V9LHI9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5tYXgoZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQsZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbEhlaWdodCxkb2N1bWVudC5ib2R5Lm9mZnNldEhlaWdodCxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQub2Zmc2V0SGVpZ2h0LGRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0LGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpfSx1PWZ1bmN0aW9uKHQpe3JldHVybiB0PyhuPXQscGFyc2VJbnQoZS5nZXRDb21wdXRlZFN0eWxlKG4pLmhlaWdodCwxMCkrdC5vZmZzZXRUb3ApOjA7dmFyIG59LGk9ZnVuY3Rpb24odCxuLG8pezA9PT10JiZkb2N1bWVudC5ib2R5LmZvY3VzKCksb3x8KHQuZm9jdXMoKSxkb2N1bWVudC5hY3RpdmVFbGVtZW50IT09dCYmKHQuc2V0QXR0cmlidXRlKFwidGFiaW5kZXhcIixcIi0xXCIpLHQuZm9jdXMoKSx0LnN0eWxlLm91dGxpbmU9XCJub25lXCIpLGUuc2Nyb2xsVG8oMCxuKSl9LHM9ZnVuY3Rpb24odCxuLG8scil7aWYobi5lbWl0RXZlbnRzJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLkN1c3RvbUV2ZW50KXt2YXIgdT1uZXcgQ3VzdG9tRXZlbnQodCx7YnViYmxlczohMCxkZXRhaWw6e2FuY2hvcjpvLHRvZ2dsZTpyfX0pO2RvY3VtZW50LmRpc3BhdGNoRXZlbnQodSl9fTtyZXR1cm4gZnVuY3Rpb24oYyxhKXt2YXIgbCxmLGQsdixwPXtjYW5jZWxTY3JvbGw6ZnVuY3Rpb24oZSl7Y2FuY2VsQW5pbWF0aW9uRnJhbWUodiksdj1udWxsLGV8fHMoXCJzY3JvbGxDYW5jZWxcIixsKX0sYW5pbWF0ZVNjcm9sbDpmdW5jdGlvbihvLGMsYSl7cC5jYW5jZWxTY3JvbGwoKTt2YXIgZj1uKGx8fHQsYXx8e30pLGg9XCJbb2JqZWN0IE51bWJlcl1cIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKSxtPWh8fCFvLnRhZ05hbWU/bnVsbDpvO2lmKGh8fG0pe3ZhciB5PWUucGFnZVlPZmZzZXQ7Zi5oZWFkZXImJiFkJiYoZD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGYuaGVhZGVyKSk7dmFyIGIsZyx3LEU9dShkKSxPPWg/bzpmdW5jdGlvbih0LG4sbyx1KXt2YXIgaT0wO2lmKHQub2Zmc2V0UGFyZW50KWRve2krPXQub2Zmc2V0VG9wLHQ9dC5vZmZzZXRQYXJlbnR9d2hpbGUodCk7cmV0dXJuIGk9TWF0aC5tYXgoaS1uLW8sMCksdSYmKGk9TWF0aC5taW4oaSxyKCktZS5pbm5lckhlaWdodCkpLGl9KG0sRSxwYXJzZUludChcImZ1bmN0aW9uXCI9PXR5cGVvZiBmLm9mZnNldD9mLm9mZnNldChvLGMpOmYub2Zmc2V0LDEwKSxmLmNsaXApLFM9Ty15LF89cigpLEk9MCxNPWZ1bmN0aW9uKGUsdCl7dmFyIG49dC5zcGVlZEFzRHVyYXRpb24/dC5zcGVlZDpNYXRoLmFicyhlLzFlMyp0LnNwZWVkKTtyZXR1cm4gdC5kdXJhdGlvbk1heCYmbj50LmR1cmF0aW9uTWF4P3QuZHVyYXRpb25NYXg6dC5kdXJhdGlvbk1pbiYmbjx0LmR1cmF0aW9uTWluP3QuZHVyYXRpb25NaW46cGFyc2VJbnQobiwxMCl9KFMsZiksTD1mdW5jdGlvbih0KXtifHwoYj10KSxJKz10LWIsdz15K1MqZnVuY3Rpb24oZSx0KXt2YXIgbjtyZXR1cm5cImVhc2VJblF1YWRcIj09PWUuZWFzaW5nJiYobj10KnQpLFwiZWFzZU91dFF1YWRcIj09PWUuZWFzaW5nJiYobj10KigyLXQpKSxcImVhc2VJbk91dFF1YWRcIj09PWUuZWFzaW5nJiYobj10PC41PzIqdCp0Oig0LTIqdCkqdC0xKSxcImVhc2VJbkN1YmljXCI9PT1lLmVhc2luZyYmKG49dCp0KnQpLFwiZWFzZU91dEN1YmljXCI9PT1lLmVhc2luZyYmKG49LS10KnQqdCsxKSxcImVhc2VJbk91dEN1YmljXCI9PT1lLmVhc2luZyYmKG49dDwuNT80KnQqdCp0Oih0LTEpKigyKnQtMikqKDIqdC0yKSsxKSxcImVhc2VJblF1YXJ0XCI9PT1lLmVhc2luZyYmKG49dCp0KnQqdCksXCJlYXNlT3V0UXVhcnRcIj09PWUuZWFzaW5nJiYobj0xLSAtLXQqdCp0KnQpLFwiZWFzZUluT3V0UXVhcnRcIj09PWUuZWFzaW5nJiYobj10PC41PzgqdCp0KnQqdDoxLTgqLS10KnQqdCp0KSxcImVhc2VJblF1aW50XCI9PT1lLmVhc2luZyYmKG49dCp0KnQqdCp0KSxcImVhc2VPdXRRdWludFwiPT09ZS5lYXNpbmcmJihuPTErLS10KnQqdCp0KnQpLFwiZWFzZUluT3V0UXVpbnRcIj09PWUuZWFzaW5nJiYobj10PC41PzE2KnQqdCp0KnQqdDoxKzE2Ki0tdCp0KnQqdCp0KSxlLmN1c3RvbUVhc2luZyYmKG49ZS5jdXN0b21FYXNpbmcodCkpLG58fHR9KGYsZz0oZz0wPT09TT8wOkkvTSk+MT8xOmcpLGUuc2Nyb2xsVG8oMCxNYXRoLmZsb29yKHcpKSxmdW5jdGlvbih0LG4pe3ZhciByPWUucGFnZVlPZmZzZXQ7aWYodD09bnx8cj09bnx8KHk8biYmZS5pbm5lckhlaWdodCtyKT49XylyZXR1cm4gcC5jYW5jZWxTY3JvbGwoITApLGkobyxuLGgpLHMoXCJzY3JvbGxTdG9wXCIsZixvLGMpLGI9bnVsbCx2PW51bGwsITB9KHcsTyl8fCh2PWUucmVxdWVzdEFuaW1hdGlvbkZyYW1lKEwpLGI9dCl9OzA9PT1lLnBhZ2VZT2Zmc2V0JiZlLnNjcm9sbFRvKDAsMCksZnVuY3Rpb24oZSx0LG4pe3R8fGhpc3RvcnkucHVzaFN0YXRlJiZuLnVwZGF0ZVVSTCYmaGlzdG9yeS5wdXNoU3RhdGUoe3Ntb290aFNjcm9sbDpKU09OLnN0cmluZ2lmeShuKSxhbmNob3I6ZS5pZH0sZG9jdW1lbnQudGl0bGUsZT09PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudD9cIiN0b3BcIjpcIiNcIitlLmlkKX0obyxoLGYpLFwibWF0Y2hNZWRpYVwiaW4gZSYmZS5tYXRjaE1lZGlhKFwiKHByZWZlcnMtcmVkdWNlZC1tb3Rpb24pXCIpLm1hdGNoZXM/aShvLE1hdGguZmxvb3IoTyksITEpOihzKFwic2Nyb2xsU3RhcnRcIixmLG8sYykscC5jYW5jZWxTY3JvbGwoITApLGUucmVxdWVzdEFuaW1hdGlvbkZyYW1lKEwpKX19fSxoPWZ1bmN0aW9uKHQpe2lmKCF0LmRlZmF1bHRQcmV2ZW50ZWQmJiEoMCE9PXQuYnV0dG9ufHx0Lm1ldGFLZXl8fHQuY3RybEtleXx8dC5zaGlmdEtleSkmJlwiY2xvc2VzdFwiaW4gdC50YXJnZXQmJihmPXQudGFyZ2V0LmNsb3Nlc3QoYykpJiZcImFcIj09PWYudGFnTmFtZS50b0xvd2VyQ2FzZSgpJiYhdC50YXJnZXQuY2xvc2VzdChsLmlnbm9yZSkmJmYuaG9zdG5hbWU9PT1lLmxvY2F0aW9uLmhvc3RuYW1lJiZmLnBhdGhuYW1lPT09ZS5sb2NhdGlvbi5wYXRobmFtZSYmLyMvLnRlc3QoZi5ocmVmKSl7dmFyIG4scjt0cnl7bj1vKGRlY29kZVVSSUNvbXBvbmVudChmLmhhc2gpKX1jYXRjaChlKXtuPW8oZi5oYXNoKX1pZihcIiNcIj09PW4pe2lmKCFsLnRvcE9uRW1wdHlIYXNoKXJldHVybjtyPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudH1lbHNlIHI9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihuKTsocj1yfHxcIiN0b3BcIiE9PW4/cjpkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpJiYodC5wcmV2ZW50RGVmYXVsdCgpLGZ1bmN0aW9uKHQpe2lmKGhpc3RvcnkucmVwbGFjZVN0YXRlJiZ0LnVwZGF0ZVVSTCYmIWhpc3Rvcnkuc3RhdGUpe3ZhciBuPWUubG9jYXRpb24uaGFzaDtuPW58fFwiXCIsaGlzdG9yeS5yZXBsYWNlU3RhdGUoe3Ntb290aFNjcm9sbDpKU09OLnN0cmluZ2lmeSh0KSxhbmNob3I6bnx8ZS5wYWdlWU9mZnNldH0sZG9jdW1lbnQudGl0bGUsbnx8ZS5sb2NhdGlvbi5ocmVmKX19KGwpLHAuYW5pbWF0ZVNjcm9sbChyLGYpKX19LG09ZnVuY3Rpb24oZSl7aWYobnVsbCE9PWhpc3Rvcnkuc3RhdGUmJmhpc3Rvcnkuc3RhdGUuc21vb3RoU2Nyb2xsJiZoaXN0b3J5LnN0YXRlLnNtb290aFNjcm9sbD09PUpTT04uc3RyaW5naWZ5KGwpKXt2YXIgdD1oaXN0b3J5LnN0YXRlLmFuY2hvcjtcInN0cmluZ1wiPT10eXBlb2YgdCYmdCYmISh0PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IobyhoaXN0b3J5LnN0YXRlLmFuY2hvcikpKXx8cC5hbmltYXRlU2Nyb2xsKHQsbnVsbCx7dXBkYXRlVVJMOiExfSl9fTtyZXR1cm4gcC5kZXN0cm95PWZ1bmN0aW9uKCl7bCYmKGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLGgsITEpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvcHN0YXRlXCIsbSwhMSkscC5jYW5jZWxTY3JvbGwoKSxsPW51bGwsZj1udWxsLGQ9bnVsbCx2PW51bGwpfSxmdW5jdGlvbigpe2lmKCEoXCJxdWVyeVNlbGVjdG9yXCJpbiBkb2N1bWVudCYmXCJhZGRFdmVudExpc3RlbmVyXCJpbiBlJiZcInJlcXVlc3RBbmltYXRpb25GcmFtZVwiaW4gZSYmXCJjbG9zZXN0XCJpbiBlLkVsZW1lbnQucHJvdG90eXBlKSl0aHJvd1wiU21vb3RoIFNjcm9sbDogVGhpcyBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgdGhlIHJlcXVpcmVkIEphdmFTY3JpcHQgbWV0aG9kcyBhbmQgYnJvd3NlciBBUElzLlwiO3AuZGVzdHJveSgpLGw9bih0LGF8fHt9KSxkPWwuaGVhZGVyP2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IobC5oZWFkZXIpOm51bGwsZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsaCwhMSksbC51cGRhdGVVUkwmJmwucG9wc3RhdGUmJmUuYWRkRXZlbnRMaXN0ZW5lcihcInBvcHN0YXRlXCIsbSwhMSl9KCkscH19KHIpfS5hcHBseSh0LFtdKSx2b2lkIDA9PT1vfHwoZS5leHBvcnRzPW8pfSw0MzI6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO3ZhciBvPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixvKXt2b2lkIDA9PT1vJiYobz1uKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxvLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pfTpmdW5jdGlvbihlLHQsbixvKXt2b2lkIDA9PT1vJiYobz1uKSxlW29dPXRbbl19KSxyPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fG8odCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxyKG4oNDcpLHQpLHIobig5MjYpLHQpLHIobigzNDkpLHQpLHIobigxMzcpLHQpLHIobig3MjkpLHQpLHIobigzODMpLHQpLHIobig0NTApLHQpLHIobigzNTgpLHQpLHIobig3NTMpLHQpLHIobig4NjkpLHQpLHIobigzNTIpLHQpLHIobig0NDYpLHQpLHIobigxNjQpLHQpLHIobigzMDUpLHQpLHIobig1MDIpLHQpfSwzNDk6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlQXJyb3dOYXZpZ2F0aW9uPXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VBcnJvd05hdmlnYXRpb249ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5saXN0SXRlbXMsbj1lLm9uQXJyb3dVcE9yRG93bixyPSgwLG8udXNlU3RhdGUpKDApLHU9clswXSxpPXJbMV0scz0oMCxvLnVzZUNhbGxiYWNrKSgoZnVuY3Rpb24oZSl7aShlKX0pLFt0XSksYz1mdW5jdGlvbihlKXt2YXIgbz1lLmtleTtpZihudWxsPT10P3ZvaWQgMDp0Lmxlbmd0aClpZihcIkFycm93VXBcIj09PW8pbiYmbigpLGUucHJldmVudERlZmF1bHQoKSxzKHU+MD91LTE6dC5sZW5ndGgtMSk7ZWxzZXtpZihcIkFycm93RG93blwiIT09bylyZXR1cm47biYmbigpLGUucHJldmVudERlZmF1bHQoKSx1PHQubGVuZ3RoLTE/cyh1KzEpOnMoMCl9fTtyZXR1cm4oMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLGMpLGZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLGMpfX0pKSwoMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7cygwKX0pLFt0XSkse3NlbGVjdGVkSW5kZXg6dX19fSw0NDY6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlRGVib3VuY2U9dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZURlYm91bmNlPWZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09dCYmKHQ9MzAwKTt2YXIgbj0oMCxvLnVzZVN0YXRlKShlKSxyPW5bMF0sdT1uWzFdO3JldHVybigwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXt2YXIgbj1zZXRUaW1lb3V0KChmdW5jdGlvbigpe3UoZSl9KSx0KTtyZXR1cm4gZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQobil9fSksW2UsdF0pLHJ9fSwxNjQ6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlRWxlbWVudFNpemU9dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZUVsZW1lbnRTaXplPWZ1bmN0aW9uKCl7dmFyIGUsdCxuPSgwLG8udXNlUmVmKShudWxsKTtyZXR1cm5bbix7d2lkdGg6bnVsbD09PShlPW51bGw9PW4/dm9pZCAwOm4uY3VycmVudCl8fHZvaWQgMD09PWU/dm9pZCAwOmUuY2xpZW50V2lkdGgsaGVpZ2h0Om51bGw9PT0odD1udWxsPT1uP3ZvaWQgMDpuLmN1cnJlbnQpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmNsaWVudEhlaWdodH1dfSx0LmRlZmF1bHQ9dC51c2VFbGVtZW50U2l6ZX0sMTM3OmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZUludGVyc2VjdGlvbk9ic2VydmVyPXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VJbnRlcnNlY3Rpb25PYnNlcnZlcj1mdW5jdGlvbihlKXt2YXIgdD0oMCxvLnVzZVJlZikobnVsbCksbj0oMCxvLnVzZVN0YXRlKSghMSkscj1uWzBdLHU9blsxXSxpPWZ1bmN0aW9uKGUpe3ZhciB0PWVbMF07dSh0LmlzSW50ZXJzZWN0aW5nKX07cmV0dXJuKDAsby51c2VFZmZlY3QpKChmdW5jdGlvbigpe2lmKHdpbmRvdyYmd2luZG93LkludGVyc2VjdGlvbk9ic2VydmVyKXt2YXIgbj1uZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoaSxlKSxvPXQuY3VycmVudDtyZXR1cm4gdC5jdXJyZW50JiZuLm9ic2VydmUodC5jdXJyZW50KSxmdW5jdGlvbigpe28mJm4udW5vYnNlcnZlKG8pfX11KCExKX0pLFt0LGVdKSx7Y29udGFpbmVyUmVmOnQsaXNWaXNpYmxlOnJ9fSx0LmRlZmF1bHQ9dC51c2VJbnRlcnNlY3Rpb25PYnNlcnZlcn0sNzI5OmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZUlzQnJlYWtwb2ludD12b2lkIDA7dmFyIG89bigxNTYpLHI9big0MzIpLHU9e3hzOjEsbW9iaWxlU21hbGw6MzIwLG1vYmlsZTozNzUsdGFibGV0Ojc2OCx0YWJsZXRMYXJnZTo5MjAsZGVza3RvcFNtYWxsOjEwMjQsZGVza3RvcDoxMjYwLGRlc2t0b3BMYXJnZToxNDQwfTt0LnVzZUlzQnJlYWtwb2ludD1mdW5jdGlvbihlKXt2YXIgdD1cInN0cmluZ1wiPT10eXBlb2YgZT91W2VdOmUsbj0oMCxvLnVzZVN0YXRlKShudWxsKSxpPW5bMF0scz1uWzFdLGM9KDAsby51c2VDYWxsYmFjaykoKGZ1bmN0aW9uKCl7cyh3aW5kb3cuaW5uZXJXaWR0aCl9KSxbXSk7cmV0dXJuKDAsby51c2VFZmZlY3QpKChmdW5jdGlvbigpe2MoKX0pLFtdKSwoMCxyLnVzZU9uUmVzaXplKShjKSxpPj10fSx0LmRlZmF1bHQ9dC51c2VJc0JyZWFrcG9pbnR9LDQ1MDpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VJc0xvYWRpbmdBZnRlckVycm9yPXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VJc0xvYWRpbmdBZnRlckVycm9yPWZ1bmN0aW9uKGUsdCl7dmFyIG49KDAsby51c2VTdGF0ZSkodCkscj1uWzBdLHU9blsxXTtyZXR1cm4oMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7ZXx8dSh0KX0pLFtlLHRdKSxlJiZyfX0sMzA1OmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZUlzTW9iaWxlPXZvaWQgMDt2YXIgbz1uKDcyOSk7dC51c2VJc01vYmlsZT1mdW5jdGlvbigpe3JldHVybiEoMCxvLnVzZUlzQnJlYWtwb2ludCkoXCJ0YWJsZXRcIil9LHQuZGVmYXVsdD10LnVzZUlzTW9iaWxlfSwzODM6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdD12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdD1cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P28udXNlTGF5b3V0RWZmZWN0Om8udXNlRWZmZWN0LHQuZGVmYXVsdD10LnVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3R9LDc1MzpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VPbkxvc2VGb2N1c1dpdGhpbj12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlT25Mb3NlRm9jdXNXaXRoaW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZWYsbj1lLmNhbGxiYWNrLHI9ZS53YXRjaDsoMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24oKXt2YXIgZTtpZihyKXJldHVybihudWxsPT09KGU9dC5jdXJyZW50KXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5tYXRjaGVzKFwiOmZvY3VzLXdpdGhpblwiKSk/dm9pZCAwOm4oKX07cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLGUpLGZ1bmN0aW9uKCl7cmV0dXJuIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLGUpfX0pLFtuLHQscl0pfSx0LmRlZmF1bHQ9dC51c2VPbkxvc2VGb2N1c1dpdGhpbn0sNTAyOmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZU9uUmVzaXplPXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VPblJlc2l6ZT1mdW5jdGlvbihlKXsoMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24oKXtlKHdpbmRvdy5pbm5lcldpZHRoKX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsdCx7cGFzc2l2ZTohMH0pLGZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsdCl9fSksW10pfSx0LmRlZmF1bHQ9dC51c2VPblJlc2l6ZX0sMzUyOmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZU9uV2luZG93Rm9jdXM9dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZU9uV2luZG93Rm9jdXM9ZnVuY3Rpb24oZSl7KDAsby51c2VFZmZlY3QpKChmdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKCl7ZSYmXCJ2aXNpYmxlXCI9PT1kb2N1bWVudC52aXNpYmlsaXR5U3RhdGUmJmUoKX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwidmlzaWJpbGl0eWNoYW5nZVwiLHQsITEpLGZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwidmlzaWJpbGl0eWNoYW5nZVwiLHQpfX0pLFtlXSl9fSw0NzpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VPdXRzaWRlUmVhY3Rlcj12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlT3V0c2lkZVJlYWN0ZXI9ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKG4pe2UuY3VycmVudCYmIWUuY3VycmVudC5jb250YWlucyhuLnRhcmdldCkmJnQoKX0oMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIixuKSxmdW5jdGlvbigpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIixuKX19KSl9fSw4Njk6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlUnVuQWZ0ZXJVcGRhdGU9dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZVJ1bkFmdGVyVXBkYXRlPWZ1bmN0aW9uKCl7dmFyIGU9KDAsby51c2VSZWYpKG51bGwpO3JldHVybigwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXtlLmN1cnJlbnQmJihlLmN1cnJlbnQoKSxlLmN1cnJlbnQ9bnVsbCl9KSksZnVuY3Rpb24odCl7ZS5jdXJyZW50PXR9fSx0LmRlZmF1bHQ9dC51c2VSdW5BZnRlclVwZGF0ZX0sOTI2OmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZVNjcm9sbExvY2s9dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZVNjcm9sbExvY2s9ZnVuY3Rpb24oKXtyZXR1cm57bG9jazooMCxvLnVzZUNhbGxiYWNrKSgoZnVuY3Rpb24oKXt2YXIgZT13aW5kb3cuc2Nyb2xsWStcInB4XCIsdD1kb2N1bWVudC5ib2R5O3Quc3R5bGUucG9zaXRpb249XCJmaXhlZFwiLHQuc3R5bGUudG9wPVwiLVwiK2V9KSxbXSksdW5sb2NrOigwLG8udXNlQ2FsbGJhY2spKChmdW5jdGlvbigpe3ZhciBlPWRvY3VtZW50LmJvZHksdD1lLnN0eWxlLnRvcCxuPS0xKnBhcnNlSW50KHR8fFwiMFwiKTtlLnN0eWxlLnBvc2l0aW9uPVwiXCIsZS5zdHlsZS50b3A9XCJcIixuJiZ3aW5kb3cuc2Nyb2xsVG8oMCwtMSpwYXJzZUludCh0fHxcIjBcIikpfSksW10pfX19LDM1ODpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG89dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VTbW9vdGhTY3JvbGw9dm9pZCAwO3ZhciByPW4oMTU2KSx1PW8obig4ODgpKTt0LnVzZVNtb290aFNjcm9sbD1mdW5jdGlvbihlKXt2YXIgdD0oMCxyLnVzZVJlZikobnVsbCksbj1lLnJlZixvPWUub2Zmc2V0LGk9dm9pZCAwPT09bz8wOm8scz1lLnNwZWVkLGM9dm9pZCAwPT09cz81MDA6cztyZXR1cm4oMCxyLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7dC5jdXJyZW50PW5ldyB1LmRlZmF1bHQobnVsbCx7c3BlZWQ6YyxzcGVlZEFzRHVyYXRpb246ITB9KX0pLFtdKSwoMCxyLnVzZUNhbGxiYWNrKSgoZnVuY3Rpb24oKXtuJiZ0LmN1cnJlbnQmJnQuY3VycmVudC5hbmltYXRlU2Nyb2xsKG4uY3VycmVudCxudWxsLHtvZmZzZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaX0sdXBkYXRlVVJMOiExfSl9KSxbaSxuXSl9fSwxNTY6ZnVuY3Rpb24odCl7XCJ1c2Ugc3RyaWN0XCI7dC5leHBvcnRzPWV9fSxuPXt9O2Z1bmN0aW9uIG8oZSl7dmFyIHI9bltlXTtpZih2b2lkIDAhPT1yKXJldHVybiByLmV4cG9ydHM7dmFyIHU9bltlXT17ZXhwb3J0czp7fX07cmV0dXJuIHRbZV0uY2FsbCh1LmV4cG9ydHMsdSx1LmV4cG9ydHMsbyksdS5leHBvcnRzfXJldHVybiBvLmc9ZnVuY3Rpb24oKXtpZihcIm9iamVjdFwiPT10eXBlb2YgZ2xvYmFsVGhpcylyZXR1cm4gZ2xvYmFsVGhpczt0cnl7cmV0dXJuIHRoaXN8fG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCl9Y2F0Y2goZSl7aWYoXCJvYmplY3RcIj09dHlwZW9mIHdpbmRvdylyZXR1cm4gd2luZG93fX0oKSxvKDQzMil9KCl9KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCIvKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMgKi9cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgd2l0aFRyYW5zbGF0aW9uLCBJMThuZXh0UHJvdmlkZXIgfSBmcm9tICdyZWFjdC1pMThuZXh0JztcbmltcG9ydCBjeCBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBBdXRvc3VnZ2VzdCBmcm9tICdyZWFjdC1hdXRvc3VnZ2VzdCc7XG5pbXBvcnQgeyBleGVjdXRlU2VhcmNoIH0gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWV4ZWN1dGUtc2VhcmNoLWltbWlkaWF0ZSc7XG5pbXBvcnQgU3VnZ2VzdGlvbkl0ZW0gZnJvbSAnQGRpZ2l0cmFuc2l0LWNvbXBvbmVudC9kaWdpdHJhbnNpdC1jb21wb25lbnQtc3VnZ2VzdGlvbi1pdGVtJztcbmltcG9ydCB7XG4gIGdldE5hbWVMYWJlbCxcbiAgZ2V0U3RvcENvZGUsXG59IGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC11bmlxLWJ5LWxhYmVsJztcbmltcG9ydCB7IGdldFN0b3BOYW1lIH0gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWhlbHBlcnMnO1xuaW1wb3J0IGdldExhYmVsIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtbGFiZWwnO1xuaW1wb3J0IEljb24gZnJvbSAnQGRpZ2l0cmFuc2l0LWNvbXBvbmVudC9kaWdpdHJhbnNpdC1jb21wb25lbnQtaWNvbic7XG5pbXBvcnQgeyBEYXRlVGltZSwgU2V0dGluZ3MgfSBmcm9tICdsdXhvbic7XG5pbXBvcnQgaXNFcXVhbCBmcm9tICdsb2Rhc2gvaXNFcXVhbCc7XG5pbXBvcnQgaXNFbXB0eSBmcm9tICdsb2Rhc2gvaXNFbXB0eSc7XG5pbXBvcnQgaTE4biBmcm9tICcuL2hlbHBlcnMvaTE4bic7XG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vaGVscGVycy9zdHlsZXMuc2Nzcyc7XG5pbXBvcnQgTW9iaWxlU2VhcmNoIGZyb20gJy4vaGVscGVycy9Nb2JpbGVTZWFyY2gnO1xuaW1wb3J0IHdpdGhTY3JvbGxMb2NrIGZyb20gJy4vaGVscGVycy93aXRoU2Nyb2xsTG9jayc7XG5cblNldHRpbmdzLmRlZmF1bHRMb2NhbGUgPSAnZW4nO1xuXG5jb25zdCBnZXRQbGF0Zm9ybSA9IChhZGRlbmR1bSwgbG5nLCB0KSA9PiB7XG4gIC8vIGNoZWNrIGlmIGk4MW4gaXMgaW5pdGlhbGl6ZWRcbiAgaWYgKCF0KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoIWFkZGVuZHVtIHx8ICFhZGRlbmR1bS5HVEZTLnBsYXRmb3JtKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCB7IG1vZGVzLCBwbGF0Zm9ybSB9ID0gYWRkZW5kdW0uR1RGUztcbiAgY29uc3QgdHlwZSA9XG4gICAgbW9kZXMgJiYgbW9kZXNbMF0gPT09ICdSQUlMJyA/IHQoJ3RyYWNrJywgeyBsbmcgfSkgOiB0KCdwbGF0Zm9ybScsIHsgbG5nIH0pO1xuICByZXR1cm4gW3R5cGUsIHBsYXRmb3JtXTtcbn07XG5cbmZ1bmN0aW9uIGdldFN1Z2dlc3Rpb25Db250ZW50KGl0ZW0sIGxuZywgdCkge1xuICAvLyBjaGVjayBpZiBpODFuIGlzIGluaXRpYWxpemVkXG4gIGlmICghdCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKGl0ZW0udHlwZSAhPT0gJ0Z1dHVyZVJvdXRlJykge1xuICAgIGlmIChpdGVtLnR5cGUgPT09ICdTZWxlY3RGcm9tTWFwJykge1xuICAgICAgcmV0dXJuIFsnJywgdCgnc2VsZWN0LWZyb20tbWFwJywgeyBsbmcgfSldO1xuICAgIH1cbiAgICBpZiAoaXRlbS50eXBlID09PSAnQ3VycmVudExvY2F0aW9uJykge1xuICAgICAgcmV0dXJuIFsnJywgdCgndXNlLW93bi1wb3NpdGlvbicsIHsgbG5nIH0pXTtcbiAgICB9XG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnKSB7XG4gICAgICByZXR1cm4gWycnLCB0KCdzZWxlY3QtZnJvbS1vd24tbG9jYXRpb25zJywgeyBsbmcgfSldO1xuICAgIH1cbiAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0ICovXG4gICAgbGV0IFtuYW1lLCBsYWJlbF0gPSBnZXROYW1lTGFiZWwoaXRlbS5wcm9wZXJ0aWVzLCB0cnVlKTtcbiAgICBsZXQgc3VnZ2VzdGlvblR5cGU7XG4gICAgaWYgKFxuICAgICAgaXRlbS5wcm9wZXJ0aWVzLmxheWVyLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2Jpa2VyZW50YWwnKSB8fFxuICAgICAgaXRlbS5wcm9wZXJ0aWVzLmxheWVyLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2Jpa2VzdGF0aW9uJylcbiAgICApIHtcbiAgICAgIHN1Z2dlc3Rpb25UeXBlID0gdCgndmVoaWNsZXJlbnRhbHN0YXRpb24nLCB7IGxuZyB9KTtcbiAgICAgIGNvbnN0IHN0b3BDb2RlID0gaXRlbS5wcm9wZXJ0aWVzLmxhYmVsSWQ7XG4gICAgICByZXR1cm4gW3N1Z2dlc3Rpb25UeXBlLCBuYW1lLCB1bmRlZmluZWQsIHN0b3BDb2RlXTtcbiAgICB9XG5cbiAgICBpZiAoaXRlbS5wcm9wZXJ0aWVzLmxheWVyID09PSAnYmlrZXBhcmsnKSB7XG4gICAgICBzdWdnZXN0aW9uVHlwZSA9IHQoJ2Jpa2VwYXJrJywgeyBsbmcgfSk7XG4gICAgICByZXR1cm4gW3N1Z2dlc3Rpb25UeXBlLCBuYW1lLCB1bmRlZmluZWQsIHVuZGVmaW5lZF07XG4gICAgfVxuXG4gICAgaWYgKGl0ZW0ucHJvcGVydGllcy5sYXllciA9PT0gJ2NhcnBhcmsnKSB7XG4gICAgICBzdWdnZXN0aW9uVHlwZSA9IHQoJ2NhcnBhcmsnLCB7IGxuZyB9KTtcbiAgICAgIHJldHVybiBbc3VnZ2VzdGlvblR5cGUsIG5hbWUsIHVuZGVmaW5lZCwgdW5kZWZpbmVkXTtcbiAgICB9XG5cbiAgICBpZiAoaXRlbS5wcm9wZXJ0aWVzLm1vZGUpIHtcbiAgICAgIHN1Z2dlc3Rpb25UeXBlID0gdChcbiAgICAgICAgaXRlbS5wcm9wZXJ0aWVzLm1vZGUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKCdmYXZvdXJpdGUnLCAnJyksXG4gICAgICAgIHsgbG5nIH0sXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBsYXllciA9IGl0ZW0ucHJvcGVydGllcy5sYXllclxuICAgICAgICAucmVwbGFjZSgncm91dGUtJywgJycpXG4gICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgIC5yZXBsYWNlKCdmYXZvdXJpdGUnLCAnJyk7XG4gICAgICBzdWdnZXN0aW9uVHlwZSA9IHQobGF5ZXIsIHsgbG5nIH0pO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGl0ZW0ucHJvcGVydGllcy5pZCAmJlxuICAgICAgKGl0ZW0ucHJvcGVydGllcy5sYXllciA9PT0gJ3N0b3AnIHx8IGl0ZW0ucHJvcGVydGllcy5sYXllciA9PT0gJ3N0YXRpb24nKVxuICAgICkge1xuICAgICAgY29uc3Qgc3RvcENvZGUgPSBnZXRTdG9wQ29kZShpdGVtLnByb3BlcnRpZXMpO1xuICAgICAgY29uc3QgbW9kZSA9IGl0ZW0ucHJvcGVydGllcy5hZGRlbmR1bT8uR1RGUy5tb2RlcztcbiAgICAgIGNvbnN0IHBsYXRmb3JtID0gZ2V0UGxhdGZvcm0oaXRlbS5wcm9wZXJ0aWVzLmFkZGVuZHVtLCBsbmcsIHQpO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgc3VnZ2VzdGlvblR5cGUsXG4gICAgICAgIGdldFN0b3BOYW1lKG5hbWUsIHN0b3BDb2RlKSxcbiAgICAgICAgbGFiZWwsXG4gICAgICAgIHN0b3BDb2RlLFxuICAgICAgICBtb2RlLFxuICAgICAgICBwbGF0Zm9ybSxcbiAgICAgIF07XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGl0ZW0ucHJvcGVydGllcy5sYXllciA9PT0gJ2Zhdm91cml0ZVN0b3AnIHx8XG4gICAgICBpdGVtLnByb3BlcnRpZXMubGF5ZXIgPT09ICdmYXZvdXJpdGVTdGF0aW9uJ1xuICAgICkge1xuICAgICAgY29uc3QgeyBhZGRyZXNzLCBjb2RlIH0gPSBpdGVtLnByb3BlcnRpZXM7XG4gICAgICBjb25zdCBzdG9OYW1lID0gYWRkcmVzcyA/IGdldFN0b3BOYW1lKGFkZHJlc3Muc3BsaXQoJywnKVswXSwgY29kZSkgOiBuYW1lO1xuICAgICAgY29uc3QgcGxhdGZvcm0gPSBnZXRQbGF0Zm9ybShpdGVtLnByb3BlcnRpZXMuYWRkZW5kdW0sIGxuZyk7XG4gICAgICByZXR1cm4gW3N1Z2dlc3Rpb25UeXBlLCBzdG9OYW1lLCBsYWJlbCwgY29kZSwgdW5kZWZpbmVkLCBwbGF0Zm9ybV07XG4gICAgfVxuICAgIHJldHVybiBbc3VnZ2VzdGlvblR5cGUsIG5hbWUsIGxhYmVsXTtcbiAgfVxuICBjb25zdCB7IG9yaWdpbiwgZGVzdGluYXRpb24gfSA9IGl0ZW0ucHJvcGVydGllcztcbiAgY29uc3QgdGFpbDEgPSBvcmlnaW4ubG9jYWxpdHkgPyBgLCAke29yaWdpbi5sb2NhbGl0eX0gZm9vYmFyYCA6ICcnO1xuICBjb25zdCB0YWlsMiA9IGRlc3RpbmF0aW9uLmxvY2FsaXR5ID8gYCwgJHtkZXN0aW5hdGlvbi5sb2NhbGl0eX1gIDogJyc7XG4gIGNvbnN0IG5hbWUxID0gb3JpZ2luLm5hbWU7XG4gIGNvbnN0IG5hbWUyID0gZGVzdGluYXRpb24ubmFtZTtcbiAgcmV0dXJuIFtcbiAgICB0KCdmdXR1cmUtcm91dGUnLCB7IGxuZyB9KSxcbiAgICBgJHt0KCdvcmlnaW4nLCB7IGxuZyB9KX0gJHtuYW1lMX0ke3RhaWwxfSAke3QoJ2Rlc3RpbmF0aW9uJywge1xuICAgICAgbG5nLFxuICAgIH0pfSAke25hbWUyfSR7dGFpbDJ9YCxcbiAgICBpdGVtLnRyYW5zbGF0ZWRUZXh0LFxuICBdO1xufVxuXG5mdW5jdGlvbiB0cmFuc2xhdGVGdXR1cmVSb3V0ZVN1Z2dlc3Rpb25UaW1lKGl0ZW0sIGxuZywgdCkge1xuICAvLyBjaGVjayBpZiBpODFuIGlzIGluaXRpYWxpemVkXG4gIGlmICghdCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgdGltZSA9IERhdGVUaW1lLmZyb21TZWNvbmRzKE51bWJlcihpdGVtLnByb3BlcnRpZXMudGltZSkpO1xuICBjb25zdCBub3cgPSBEYXRlVGltZS5ub3coKTtcbiAgbGV0IHN0ciA9IGl0ZW0ucHJvcGVydGllcy5hcnJpdmVCeVxuICAgID8gdCgnYXJyaXZhbCcsIHsgbG5nIH0pXG4gICAgOiB0KCdkZXBhcnR1cmUnLCB7IGxuZyB9KTtcbiAgaWYgKHRpbWUuaGFzU2FtZShub3csICdkYXknKSkge1xuICAgIHN0ciA9IGAke3N0cn0gJHt0KCd0b2RheS1hdCcpfWA7XG4gIH0gZWxzZSBpZiAodGltZS5oYXNTYW1lKG5vdy5wbHVzKHsgZGF5czogMSB9KSwgJ2RheScpKSB7XG4gICAgc3RyID0gYCR7c3RyfSAke3QoJ3RvbW9ycm93LWF0JywgeyBsbmcgfSl9YDtcbiAgfSBlbHNlIHtcbiAgICBzdHIgPSBgJHtzdHJ9ICR7dGltZS50b0Zvcm1hdCgnY2NjIGQuTC4nKX1gO1xuICB9XG4gIHN0ciA9IGAke3N0cn0gJHt0aW1lLnRvRm9ybWF0KCdISDptbScpfWA7XG4gIHJldHVybiBzdHI7XG59XG5cbmNvbnN0IGdldFN1Z2dlc3Rpb25WYWx1ZSA9IHN1Z2dlc3Rpb24gPT4ge1xuICBpZiAoXG4gICAgc3VnZ2VzdGlvbi50eXBlID09PSAnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycgfHxcbiAgICBzdWdnZXN0aW9uLnR5cGUgPT09ICdiYWNrJ1xuICApIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgcmV0dXJuIGdldExhYmVsKHN1Z2dlc3Rpb24ucHJvcGVydGllcyk7XG59O1xuLyoqXG4gKiBAZXhhbXBsZVxuICogY29uc3Qgc2VhcmNoQ29udGV4dCA9IHtcbiAqICAgaXNQZWxpYXNMb2NhdGlvbkF3YXJlOiBmYWxzZSAvLyB0cnVlIC8gZmFsc2UgZG9lcyBMZXQgUGVsaWFzIHN1Z2dlc3QgYmFzZWQgb24gY3VycmVudCB1c2VyIGxvY2F0aW9uXG4gKiAgIG1pbmltYWxSZWdleHA6IHVuZGVmaW5lZCAvLyB1c2VkIGZvciB0ZXN0aW5nIG1pbi4gcmVnZXhwLiBGb3IgZXhhbXBsZTogbmV3IFJlZ0V4cCgnLnsyLH0nKSxcbiAqICAgbGluZVJlZ2V4cDogdW5kZWZpbmVkIC8vICBpZGVudGlmeSBzZWFyY2hlcyBmb3Igcm91dGUgbnVtYmVycy9sYWJlbHM6IGJ1cyB8IHRyYWluIHwgbWV0cm8uIEZvciBleGFtcGxlOiBuZXcgUmVnRXhwKFxuICogICAgLy8gICAnKF5bMC05XStbYS16XT8kfF5beXVsZWFwaW5rcnRkel0kfChebVsxMl0/Yj8kKSknLFxuICogICAgLy8gICdpJyxcbiAqICAgIC8vICApLFxuICogICBVUkxfUEVMSUFTOiAnJyAvLyB1cmwgZm9yIHBlbGlhcyBzZWFyY2hlc1xuICogICBmZWVkSURzOiBbJ0hTTCcsICdIU0xMYXV0dGEnXSAvLyBGZWVkSWQncyBsaWtlICBbSFNMLCBIU0xMYXV0dGFdXG4gKiAgIGdlb2NvZGluZ1NvdXJjZXM6IFsnb2EnLCdvc20nLCdubHNmaSddICAvLyBzb3VyY2VzIGZvciBnZW9jb2RpbmdcbiAqICAgZ2VvY29kaW5nU2VhcmNoUGFyYW1zOyB7fSAgLy8gU2VhcmNocGFybWFzIGZybyBnZW9jb2RpbmdcbiAqICAgZ2V0RmF2b3VyaXRlTG9jYXRpb25zOiAoKSA9PiAoe30pLCAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgYXJyYXkgb2YgZmF2b3VyaXRlIGxvY2F0aW9ucy5cbiAqICAgZ2V0RmF2b3VyaXRlU3RvcHM6ICgpID0+ICh7fSksICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgYXJyYXkgb2YgZmF2b3VyaXRlIHN0b3BzLlxuICogICBnZXRMYW5ndWFnZTogKCkgPT4gKHt9KSwgICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBjdXJyZW50IGxhbmd1YWdlLlxuICogICBnZXRGYXZvdXJpdGVSb3V0ZXM6ICgpID0+ICh7fSksICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhcnJheSBvZiBmYXZvdXJpdGUgcm91dGVzLlxuICogICBnZXRQb3NpdGlvbnM6ICgpID0+ICh7fSksICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyB1c2VyJ3MgZ2VvbG9jYXRpb24uXG4gKiAgIGdldFJvdXRlc1F1ZXJ5OiAoKSA9PiAoe30pLCAgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIHF1ZXJ5IGZvciBmZXRjaGluZyByb3V0ZXMuXG4gKiAgIGdldFN0b3BBbmRTdGF0aW9uc1F1ZXJ5OiAoKSA9PiAoe30pLCAgLy8gRnVuY3Rpb24gdGhhdCBmZXRjaGVzIGZhdm91cml0ZSBzdG9wcyBhbmQgc3RhdGlvbnMgZnJvbSBncmFwaHFsIEFQSS5cbiAqICAgZ2V0RmF2b3VyaXRlUm91dGVzUXVlcnk6ICgpID0+ICh7fSksICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgcXVlcnkgZm9yIGZldGNoaW5nIGZhdm91cml0ZSByb3V0ZXMuXG4gKiAgIGdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uczogKCkgPT4gKHt9KSwgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBmYXZvdXJpdGUgYmlrZSByZW50YWwgc3RhdGlvbi5cbiAqICAgZ2V0RmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zUXVlcnk6ICgpID0+ICh7fSksIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBxdWVyeSBmb3IgZmV0Y2hpbmcgZmF2b3VyaXRlIGJpa2UgcmVudGFsIHN0YXRpb25zLlxuICogICBzdGFydExvY2F0aW9uV2F0Y2g6ICgpID0+ICh7fSksICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgbG9jYXRlcyB1c2VycyBnZW9sb2NhdGlvbi5cbiAqICAgc2F2ZVNlYXJjaDogKCkgPT4gKHt9KSwgICAgICAgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHNhdmVzIHNlYXJjaCB0byBvbGQgc2VhcmNoZXMgc3RvcmUuXG4gKiAgIGNsZWFyT2xkU2VhcmNoZXM6ICgpID0+ICh7fSksICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCBjbGVhcnMgb2xkIHNlYXJjaGVzIHN0b3JlLlxuICogICBnZXRGdXR1cmVSb3V0ZXM6ICgpID0+ICh7fSksICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJuIGZ1dHVyZSByb3V0ZXNcbiAqICAgc2F2ZUZ1dHVyZVJvdXRlOiAoKSA9PiAoe30pLCAgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHNhdmVzIGEgZnV0dXJlIHJvdXRlXG4gKiAgIGNsZWFyRnV0dXJlUm91dGVzOiAoKSA9PiAoe30pLCAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCBjbGVhcnMgZnV0dXJlIHJvdXRlc1xuICogfTtcbiAqIGNvbnN0IGxhbmcgPSAnZmknOyAvLyBlbiwgZmkgb3Igc3ZcbiAqIGNvbnN0IG9uU2VsZWN0ID0gKGl0ZW0sIGlkKSA9PiB7XG4gKiAgICAvLyBGdW50aW9uYWxpdHkgd2hlbiB1c2VyIHNlbGVjdHMgYSBzdWdnZXNpb25zLiBObyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGlzIGdpdmVuLlxuICogICAgcmV0dXJuIG51bGw7XG4gKiB9O1xuICogY29uc3Qgb25DbGVhciA9IGlkID0+IHtcbiAqICAgIC8vIENhbGxlZCAgd2hlbiB1c2VyIGNsaWNrcyB0aGUgY2xlYXIgc2VhcmNoIHN0cmluZyBidXR0b24uIE5vIGRlZmF1bHQgaW1wbGVtZW50YXRpb24uXG4gKiAgICByZXR1cm4gbnVsbDtcbiAqIH07XG4gKiBjb25zdCBnZXRBdXRvU3VnZ2VzdEljb25zOiB7XG4gKiAgIC8vIENhbGxlZCBmb3IgZXZlcnkgY2l0eSBiaWtlIHN0YXRpb24gcmVuZGVyZWQgYXMgYSBzZWFyY2ggc3VnZ2VzdGlvbi4gU2hvdWxkIHJldHVybiB0aGUgaWNvbiBhbmRcbiAqICAgLy8gY29sb3IgdXNlZCBmb3IgdGhhdCBzdGF0aW9uLiBUd28gaWNvbnMgYXJlIGF2YWlsYWJsZSwgJ2NpdHliaWtlLXN0b3AtZGlnaXRyYW5zaXQnIGFuZGl0eWJpa2Utc3RvcC1kaWdpdHJhbnNpdC1zZWNvbmRhcnknLlxuICogICBjaXR5YmlrZXM6IHN0YXRpb24gPT4ge1xuICogICAgICByZXR1cm4gWydjaXR5YmlrZS1zdG9wLWRpZ2l0cmFuc2l0JywgJyNmMmI2MmQnXTtcbiAqICAgfVxuICogfVxuICogY29uc3QgdHJhbnNwb3J0TW9kZSA9IHVuZGVmaW5lZDtcbiAqIGNvbnN0IHBsYWNlaG9sZGVyID0gXCJzdG9wLW5lYXIteW91XCI7XG4gKiBjb25zdCB0YXJnZXRzID0gWydMb2NhdGlvbnMnLCAnU3RvcHMnLCAnUm91dGVzJ107IC8vIERlZmluZXMgd2hhdCB5b3UgYXJlIHNlYXJjaGluZy4gT3B0aW9ucyBhcmUgTG9jYXRpb25zLCBTdG9wcywgU3RhdGlvbnMsIFJvdXRlcywgVmVoaWNsZVJlbnRhbFN0YXRpb25zLCBGdXR1cmVSb3V0ZXMsIE1hcFBvc2l0aW9uIGFuZCBDdXJyZW50UG9zaXRpb24uIExlYXZlIGVtcHR5IHRvIHNlYXJjaCBhbGwgdGFyZ2V0cy5cbiAqIGNvbnN0IHNvdXJjZXMgPSBbJ0Zhdm91cml0ZScsICdIaXN0b3J5JywgJ0RhdGFzb3VyY2UnXSAvLyBEZWZpbmVzIHdoZXJlIHlvdSBhcmUgc2VhcmNoaW5nLiBhbGwgYXZhaWxhYmxlIGFyZTogRmF2b3VyaXRlLCBIaXN0b3J5IChwcmV2aW91c2x5IHNlYXJjaGVkIHNlYXJjaGVzKSBhbmQgRGF0YXNvdXJjZS4gTGVhdmUgZW1wdHkgdG8gdXNlIGFsbCBzb3VyY2VzLlxuICogcmV0dXJuIChcbiAqICA8RFRBdXRvc3VnZ2VzdFxuICogICAgYXBwRWxlbWVudD17YXBwRWxlbWVudH0gLy8gUmVxdWlyZWQuIFJvb3QgZWxlbWVudCdzIGlkLiBOZWVkZWQgZm9yIHJlYWN0LW1vZGFsIGNvbXBvbmVudC5cbiAqICAgIHNlYXJjaENvbnRleHQ9e3NlYXJjaENvbnRleHR9XG4gKiAgICBpY29uPVwib3JpZ2luXCIgLy8gT3B0aW9uYWwgU3RyaW5nIGZvciBpY29uIHRoYXQgaXMgc2hvd24gbGVmdCBvZiBzZWFyY2hmaWVsZC4gdXNlZCB3aXRoIEljb24gbGlicmFyeVxuICogICAgaWQ9XCJvcmlnaW5cIiAvLyB1c2VkIGZvciBzdHlsZSBwcm9wcyBhbmQgaW5mbyBmb3IgY29tcG9uZW50LlxuICogICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfSAvLyBTdHJpbmcgdGhhdCBpcyBzaG93bnMgaW5pdGFsbHkgaW4gc2VhcmNoIGZpZWxkXG4gKiAgICB2YWx1ZT1cIlwiIC8vIGUuZy4gdXNlciB0eXBlZCBzdHJpbmcgdGhhdCBpcyBzaG93biBpbiBzZWFyY2ggZmllbGRcbiAqICAgIG9uU2VsZWN0PXtvblNlbGVjdH1cbiAqICAgIG9uQ2xlYXI9e29uQ2xlYXJ9XG4gKiAgICBhdXRvRm9jdXM9e2ZhbHNlfSAvLyBkZWZpbmVzIHRoYXQgc2hvdWxkIHRoaXMgZmllbGQgYmUgYXV0b21hdGljYWxseSBmb2N1c2VkIHdoZW4gcGFnZSBpcyBsb2FkZWQuXG4gKiAgICBsYW5nPXtsYW5nfVxuICogICAgZ2V0QXV0b1N1Z2dlc3RJY29ucz17Z2V0QXV0b1N1Z2dlc3RJY29uc31cbiAqICAgIHRyYW5zcG9ydE1vZGU9e3RyYW5zcG9ydE1vZGV9IC8vIHRyYW5zcG9ydG1vZGUgd2l0aCB3aGljaCB3ZSBmaWx0ZXIgdGhlIHJvdXRlcywgZS5nLiByb3V0ZS1CVVNcbiAqICAgIGdlb2NvZGluZ1NpemU9ezEwfSAvLyBkZWZpbmVzIGhvdyBtYW55IHN0b3BzIGFuZCBzdGF0aW9ucyB0byBmZXRjaCBmcm9tIGdlb2NvZGluZy4gVXNlZnVsIGlmIHlvdSB3YW50IHRvIGZpbHRlciB0aGUgcmVzdWx0cyBhbmQgc3RpbGwgZ2V0IGEgcmVhc29uYWJsZSBhbW91bnQgb2Ygc3VnZ2VzdGlvbnMuXG4gKiAgICBmaWx0ZXJSZXN1bHRzPXtyZXN1bHRzID0+IHJldHVybiByZXN1bHRzfSAvLyBPcHRpb25hbCBmaWx0ZXJpbmcgZnVuY3Rpb24gZm9yIHJvdXRlcyBhbmQgc3RvcHNcbiAqICAgIGhhbmRlbFZpYVBvaW50cz17KCkgPT4gcmV0dXJuIG51bGwgfSAvLyBPcHRpb25hbCBWaWEgcG9pbnQgaGFuZGxpbmcgbG9naWMuIFRoaXMgaXMgY3VycmVudGx5IG1hbmFnZWQgd2l0aCBEVEF1dG9zdWdnZXN0cGFuZWwgYnkgZGVmYXVsdCwgYnV0IGlmIERUQXV0b3N1Z2dlc3QgaXMgdXNlZCBzZXBlcmF0ZWxseSBvd24gaW1wbGVtZW50YXRpb24gbXVzdCBiZSBwcm92aWRlZC5cbiAqICAgIGZvY3VzQ2hhbmdlPXsoKSA9PiByZXR1cm4gbnVsbH0gLy8gV2hlbiBzdWdnZXN0aW9uIGlzIHNlbGVjdGVkLCBoYW5kbGUgY2hhbmdpbmcgZm9jdXMuIFRoaXMgaXMgY3VycmVudGx5IG1hbmFnZWQgd2l0aCBEVEF1dG9zdWdnZXN0cGFuZWwgYnkgZGVmYXVsdCwgYnV0IGlmIERUQXV0b3N1Z2dlc3QgaXMgdXNlZCBzZXBlcmF0ZWxseSBvd24gaW1wbGVtZW50YXRpb24gbXVzdCBiZSBwcm92aWRlZC5cbiAqICAgIHN0b3JlUmVmPXsoKSA9PiByZXR1cm4gbnVsbH0gLy8gRnVuY3Rpb25hbGl0eSB0byBzdG9yZSByZWZzLiBDdXJyZW5sdHkgbWFuYWdlZCB3aXRoIERUQXV0b3N1Z2dlc3RwYW5lbCBieSBkZWZhdWx0LCBidXQgaWYgRFRBdXRvc3VnZ2VzdCBpcyB1c2VkIHNlcGVyYXRlbGx5IG93biBpbXBsZW1lbnRhdGlvbiBtdXN0IGJlIHByb3ZpZGVkLlxuICogICAgc291cmNlcz17c291cmNlc31cbiAqICAgIHRhcmdldHM9e3RhcmdldHN9XG4gKiAgICBpc01vYmlsZSAgLy8gT3B0aW9uYWwuIERlZmF1bHRzIHRvIGZhbHNlLiBXaGV0aGVyIHRvIHVzZSBtb2JpbGUgc2VhcmNoLlxuICogICAgbW9iaWxlTGFiZWw9XCJDdXN0b20gbGFiZWxcIiAvLyBPcHRpb25hbC4gQ3VzdG9tIGxhYmVsIHRleHQgZm9yIGF1dG9zdWdnZXN0IGZpZWxkIG9uIG1vYmlsZS5cbiAqICAgIGlucHV0Q2xhc3NOYW1lPVwiXCIgLy8gT3B0aW9uYWwuIEN1c3RvbSBjbGFzc25hbWUgYXBwbGllZCB0byB0aGUgaW5wdXQgZWxlbWVudCBvZiB0aGUgY29tcG9uZW50IGZvciBwcm92aWRpbmcgQ1NTIHN0eWxlcy5cbiAqICAgIHRyYW5zbGF0ZWRQbGFjZWhvbGRlcj0gLy8gT3B0aW9uYWwuIEN1c3RvbiB0cmFuc2xhdGVkIHBsYWNlaG9sZGVyIHRleHQgZm9yIGF1dG9zdWdnZXN0IGZpZWxkLlxuICovXG5jbGFzcyBEVEF1dG9zdWdnZXN0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICBhcHBFbGVtZW50OiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgYXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgaWNvbjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBpZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgdHJhbnNsYXRlZFBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHNlYXJjaENvbnRleHQ6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBVUkxfUEVMSUFTOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICBjb250ZXh0OiBQcm9wVHlwZXMub2JqZWN0LFxuICAgICAgY2xlYXJPbGRTZWFyY2hlczogUHJvcFR5cGVzLmZ1bmMsXG4gICAgICBjbGVhckZ1dHVyZVJvdXRlczogUHJvcFR5cGVzLmZ1bmMsXG4gICAgfSkuaXNSZXF1aXJlZCxcbiAgICBhcmlhTGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgb25TZWxlY3Q6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgdHJhbnNwb3J0TW9kZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBmaWx0ZXJSZXN1bHRzOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBnZW9jb2RpbmdTaXplOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIG9uQ2xlYXI6IFByb3BUeXBlcy5mdW5jLFxuICAgIHN0b3JlUmVmOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBoYW5kbGVWaWFQb2ludHM6IFByb3BUeXBlcy5mdW5jLFxuICAgIGZvY3VzQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBsYW5nOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHNvdXJjZXM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zdHJpbmcpLFxuICAgIHRhcmdldHM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zdHJpbmcpLFxuICAgIGlzTW9iaWxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBob3ZlckNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGFjY2Vzc2libGVQcmltYXJ5Q29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgdGltZVpvbmU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgcGF0aE9wdHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICByb3V0ZXNQcmVmaXg6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBzdG9wc1ByZWZpeDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICB9KSxcbiAgICBtb2JpbGVMYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBsb2NrOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIHVubG9jazogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICByZWZQb2ludDogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIGFkZHJlc3M6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBsYXQ6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgICBsb246IFByb3BUeXBlcy5udW1iZXIsXG4gICAgfSksXG4gICAgaW5wdXRDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgZm9udFdlaWdodHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBtZWRpdW06IFByb3BUeXBlcy5udW1iZXIsXG4gICAgfSksXG4gICAgbW9kZUljb25Db2xvcnM6IFByb3BUeXBlcy5vYmplY3RPZihQcm9wVHlwZXMuc3RyaW5nKSxcbiAgICBnZXRBdXRvU3VnZ2VzdEljb25zOiBQcm9wVHlwZXMub2JqZWN0T2YoUHJvcFR5cGVzLmZ1bmMpLFxuICAgIHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBtb2RlU2V0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHNob3dTY3JvbGw6IFByb3BUeXBlcy5ib29sLFxuICAgIGlzRW1iZWRkZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIHQ6IFByb3BUeXBlcy5mdW5jLFxuICB9O1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICBjbGFzc05hbWU6ICcnLFxuICAgIGljb246IHVuZGVmaW5lZCxcbiAgICB2YWx1ZTogJycsXG4gICAgdHJhbnNwb3J0TW9kZTogdW5kZWZpbmVkLFxuICAgIGZpbHRlclJlc3VsdHM6IHVuZGVmaW5lZCxcbiAgICBvbkNsZWFyOiB1bmRlZmluZWQsXG4gICAgbGFuZzogJ2ZpJyxcbiAgICBzdG9yZVJlZjogdW5kZWZpbmVkLFxuICAgIGhhbmRsZVZpYVBvaW50czogdW5kZWZpbmVkLFxuICAgIGZvY3VzQ2hhbmdlOiB1bmRlZmluZWQsXG4gICAgZ2V0QXV0b1N1Z2dlc3RJY29uczogdW5kZWZpbmVkLFxuICAgIHNvdXJjZXM6IFtdLFxuICAgIHRhcmdldHM6IHVuZGVmaW5lZCxcbiAgICBpc01vYmlsZTogZmFsc2UsXG4gICAgaXNFbWJlZGRlZDogZmFsc2UsXG4gICAgZ2VvY29kaW5nU2l6ZTogdW5kZWZpbmVkLFxuICAgIGNvbG9yOiAnIzAwN2FjOScsXG4gICAgaG92ZXJDb2xvcjogJyMwMDYyYTEnLFxuICAgIGFjY2Vzc2libGVQcmltYXJ5Q29sb3I6ICcjMDA3NGJlJyxcbiAgICB0aW1lWm9uZTogJ0V1cm9wZS9IZWxzaW5raScsXG4gICAgcGF0aE9wdHM6IHtcbiAgICAgIHJvdXRlc1ByZWZpeDogJ2xpbmphdCcsXG4gICAgICBzdG9wc1ByZWZpeDogJ3B5c2FraXQnLFxuICAgIH0sXG4gICAgYXJpYUxhYmVsOiB1bmRlZmluZWQsXG4gICAgbW9iaWxlTGFiZWw6IHVuZGVmaW5lZCxcbiAgICBpbnB1dENsYXNzTmFtZTogJycsXG4gICAgdHJhbnNsYXRlZFBsYWNlaG9sZGVyOiB1bmRlZmluZWQsXG4gICAgZm9udFdlaWdodHM6IHtcbiAgICAgIG1lZGl1bTogNTAwLFxuICAgIH0sXG4gICAgbW9kZUljb25Db2xvcnM6IHVuZGVmaW5lZCxcbiAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgbW9kZVNldDogdW5kZWZpbmVkLFxuICAgIHNob3dTY3JvbGw6IGZhbHNlLFxuICAgIHJlZlBvaW50OiB7fSxcbiAgICB0OiB1bmRlZmluZWQsXG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgU2V0dGluZ3MuZGVmYXVsdFpvbmUgPSBwcm9wcy50aW1lWm9uZTtcbiAgICBTZXR0aW5ncy5kZWZhdWx0TG9jYWxlID0gcHJvcHMubGFuZztcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgdmFsdWU6IHByb3BzLnZhbHVlLFxuICAgICAgc3VnZ2VzdGlvbnM6IFtdLFxuICAgICAgZWRpdGluZzogZmFsc2UsXG4gICAgICB2YWxpZDogdHJ1ZSxcbiAgICAgIHJlbmRlck1vYmlsZVNlYXJjaDogZmFsc2UsXG4gICAgICBzb3VyY2VzOiBwcm9wcy5zb3VyY2VzLFxuICAgICAgb3duUGxhY2VzOiBmYWxzZSxcbiAgICAgIHR5cGluZ1RpbWVyOiBudWxsLFxuICAgICAgdHlwaW5nOiBmYWxzZSxcbiAgICAgIHBlbmRpbmdTZWxlY3Rpb246IG51bGwsXG4gICAgICBzdWdnZXN0aW9uSW5kZXg6IDAsXG4gICAgICBjbGVhbkV4ZWN1dGVkOiBmYWxzZSxcbiAgICAgIHNjcm9sbFk6IDAsXG4gICAgfTtcbiAgfVxuXG4gIC8vIERULTQwNzQ6IFdoZW4gYSB1c2VyJ3MgbG9jYXRpb24gaXMgdXBkYXRlZCBEVEF1dG9zdWdnZXN0IHdvdWxkIHJlLXJlbmRlciBjYXVzaW5nIHN1Z2dlc3Rpb24gbGlzdCB0byByZXNldC5cbiAgLy8gVGhpcyB3aWxsIHByZXZlbnQgaXQuXG4gIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSkge1xuICAgIHJldHVybiAhaXNFcXVhbChuZXh0U3RhdGUsIHRoaXMuc3RhdGUpIHx8ICFpc0VxdWFsKG5leHRQcm9wcywgdGhpcy5wcm9wcyk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2FtZWxjYXNlXG4gIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xuICAgIC8vIHdhaXQgdW50aWwgYWRkcmVzcyBpcyBzZXQgb3IgZ2VvbG9jYXRpb25pbmcgZmFpbHNcbiAgICBpZiAobmV4dFByb3BzLnZhbHVlICE9PSB0aGlzLnN0YXRlLnZhbHVlICYmICF0aGlzLnN0YXRlLmVkaXRpbmcpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICB2YWx1ZTogbmV4dFByb3BzLnZhbHVlLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgb25DaGFuZ2UgPSAoZXZlbnQsIHsgbmV3VmFsdWUsIG1ldGhvZCB9KSA9PiB7XG4gICAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgICB2YWx1ZTogdGhpcy5mSW5wdXQgfHwgbmV3VmFsdWUgfHwgJycsXG4gICAgICByZW5kZXJNb2JpbGVTZWFyY2g6IHRoaXMucHJvcHMuaXNNb2JpbGUsXG4gICAgfTtcbiAgICAvLyBSZW1vdmUgZmlsbGVkIGlucHV0IHZhbHVlIHNvIGl0IHdvbnQgYmUgcmV1c2VkIHVubmVjZXNzYXJ5XG4gICAgdGhpcy5mSW5wdXQgPSBudWxsO1xuICAgIGlmICghdGhpcy5zdGF0ZS5lZGl0aW5nKSB7XG4gICAgICBuZXdTdGF0ZS5lZGl0aW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2V0U3RhdGUobmV3U3RhdGUsICgpID0+XG4gICAgICAgIHRoaXMuZmV0Y2hGdW5jdGlvbih7IHZhbHVlOiBuZXdWYWx1ZSB8fCAnJyB9KSxcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChtZXRob2QgIT09ICdlbnRlcicgfHwgdGhpcy5zdGF0ZS52YWxpZCkge1xuICAgICAgLy8gdGVzdCBhYm92ZSBkcm9wcyB1bm5lY2Vzc2FyeSB1cGRhdGVcbiAgICAgIC8vIHdoZW4gdXNlciBoaXRzIGVudGVyIGJ1dCBzZWFyY2ggaXMgdW5maW5pc2hlZFxuICAgICAgaWYgKHRoaXMuc3RhdGUudHlwaW5nVGltZXIpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc3RhdGUudHlwaW5nVGltZXIpO1xuICAgICAgfVxuICAgICAgaWYgKG1ldGhvZCA9PT0gJ3R5cGUnKSB7XG4gICAgICAgIC8vIGFmdGVyIHRpbWVvdXQgcnVucywgYXJpYSBhbGVydCB3aWxsIGFubm91bmNlIGN1cnJlbnQgc2VsZWN0aW9uXG4gICAgICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHR5cGluZzogZmFsc2UgfSk7XG4gICAgICAgIH0sIDEwMDApO1xuICAgICAgICBuZXdTdGF0ZS50eXBpbmdUaW1lciA9IHRpbWVyO1xuICAgICAgICBuZXdTdGF0ZS50eXBpbmcgPSB0cnVlO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSk7XG4gICAgfVxuICB9O1xuXG4gIG9uQmx1ciA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5zdGF0ZS5lZGl0aW5nKSB7XG4gICAgICB0aGlzLmlucHV0LmZvY3VzKCk7XG4gICAgfVxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgZWRpdGluZzogZmFsc2UsXG4gICAgICByZW5kZXJNb2JpbGVTZWFyY2g6IGZhbHNlLFxuICAgICAgdmFsdWU6IHRoaXMucHJvcHMudmFsdWUsXG4gICAgfSk7XG4gICAgaWYgKHRoaXMucHJvcHMuaXNNb2JpbGUgJiYgdGhpcy5zdGF0ZS5yZW5kZXJNb2JpbGVTZWFyY2gpIHtcbiAgICAgIHRoaXMuY2xvc2VNb2JpbGVTZWFyY2goKTtcbiAgICB9XG4gIH07XG5cbiAgb25TZWxlY3RlZCA9IChlLCByZWYpID0+IHtcbiAgICBpZiAodGhpcy5zdGF0ZS52YWxpZCkge1xuICAgICAgaWYgKHJlZi5zdWdnZXN0aW9uLnR5cGUgPT09ICdTZWxlY3RGcm9tT3duTG9jYXRpb25zJykge1xuICAgICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNvdXJjZXM6IFsnRmF2b3VyaXRlJywgJ0JhY2snXSxcbiAgICAgICAgICAgIG93blBsYWNlczogdHJ1ZSxcbiAgICAgICAgICAgIHBlbmRpbmdTZWxlY3Rpb246IHJlZi5zdWdnZXN0aW9uLnR5cGUsXG4gICAgICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgICAgfSxcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZldGNoRnVuY3Rpb24oeyB2YWx1ZTogJycgfSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICByZWYuc3VnZ2VzdGlvbi50eXBlID09PSAnYmFjaycgfHxcbiAgICAgICAgcmVmLnN1Z2dlc3Rpb24udHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJ1xuICAgICAgKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICAgICAge1xuICAgICAgICAgICAgc291cmNlczogdGhpcy5wcm9wcy5zb3VyY2VzLFxuICAgICAgICAgICAgb3duUGxhY2VzOiBmYWxzZSxcbiAgICAgICAgICAgIHBlbmRpbmdTZWxlY3Rpb246IHJlZi5zdWdnZXN0aW9uLnR5cGUsXG4gICAgICAgICAgICBzdWdnZXN0aW9uSW5kZXg6IHJlZi5zdWdnZXN0aW9uSW5kZXgsXG4gICAgICAgICAgfSxcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZldGNoRnVuY3Rpb24oeyB2YWx1ZTogJycgfSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5zZWxlY3Rpb25Eb25lID0gdHJ1ZTsgLy8gc2VsZWN0aW9uIGRvbmUsIGRvIG5vdCBsZXQgdXBjb21pbmcga2V5Ym9hcmQgZXZlbnRzIGNvbmZ1c2UgdGhlIGZsb3dcbiAgICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICAgIHtcbiAgICAgICAgICBlZGl0aW5nOiBmYWxzZSxcbiAgICAgICAgICB2YWx1ZTogcmVmLnN1Z2dlc3Rpb25WYWx1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaW5wdXQuYmx1cigpO1xuICAgICAgICAgIGlmICh0aGlzLnByb3BzLmhhbmRsZVZpYVBvaW50cykge1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5oYW5kbGVWaWFQb2ludHMocmVmLnN1Z2dlc3Rpb24sIHJlZi5zdWdnZXN0aW9uSW5kZXgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnByb3BzLm9uU2VsZWN0KHJlZi5zdWdnZXN0aW9uLCB0aGlzLnByb3BzLmlkKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcmVuZGVyTW9iaWxlU2VhcmNoOiBmYWxzZSxcbiAgICAgICAgICAgICAgc291cmNlczogdGhpcy5wcm9wcy5zb3VyY2VzLFxuICAgICAgICAgICAgICBvd25QbGFjZXM6IGZhbHNlLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uczogW10sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbkRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLnByb3BzLmZvY3VzQ2hhbmdlICYmXG4gICAgICAgICAgICAoIXRoaXMucHJvcHMuaXNNb2JpbGUgfHwgdGhpcy5wcm9wcy5pc0VtYmVkZGVkKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5mb2N1c0NoYW5nZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy5wcm9wcy5pc01vYmlsZSAmJiB0aGlzLnN0YXRlLnJlbmRlck1vYmlsZVNlYXJjaCkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZU1vYmlsZVNlYXJjaCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICAgIHByZXZTdGF0ZSA9PiAoe1xuICAgICAgICAgIHBlbmRpbmdTZWxlY3Rpb246IHByZXZTdGF0ZS52YWx1ZSxcbiAgICAgICAgfSksXG4gICAgICAgICgpID0+IHRoaXMuY2hlY2tQZW5kaW5nU2VsZWN0aW9uKCksIC8vIHNlYXJjaCBtYXkgZmluaXNoIGR1cmluZyBzdGF0ZSBjaGFuZ2VcbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIG9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZCA9ICgpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIHN1Z2dlc3Rpb25zOiBbXSxcbiAgICAgIHNvdXJjZXM6IHRoaXMucHJvcHMuc291cmNlcyxcbiAgICAgIG93blBsYWNlczogZmFsc2UsXG4gICAgICBlZGl0aW5nOiBmYWxzZSxcbiAgICB9KTtcbiAgfTtcblxuICBjaGVja1BlbmRpbmdTZWxlY3Rpb24gPSAoKSA9PiB7XG4gICAgaWYgKFxuICAgICAgKHRoaXMuc3RhdGUucGVuZGluZ1NlbGVjdGlvbiA9PT0gJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnIHx8XG4gICAgICAgIHRoaXMuc3RhdGUucGVuZGluZ1NlbGVjdGlvbiA9PT0gJ2JhY2snKSAmJlxuICAgICAgdGhpcy5zdGF0ZS52YWxpZFxuICAgICkge1xuICAgICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgICAge1xuICAgICAgICAgIHBlbmRpbmdTZWxlY3Rpb246IG51bGwsXG4gICAgICAgICAgZWRpdGluZzogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgICAvLyBhY2NlcHQgYWZ0ZXIgYWxsIG9uZ29pbmcgc2VhcmNoZXMgaGF2ZSBmaW5pc2hlZFxuICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0ZS5wZW5kaW5nU2VsZWN0aW9uICYmIHRoaXMuc3RhdGUudmFsaWQpIHtcbiAgICAgIC8vIGZpbmlzaCB0aGUgc2VsZWN0aW9uIGJ5IHBpY2tpbmcgZmlyc3QgPSBiZXN0IG1hdGNoIG9yIHdpdGggJ0Z1dHVyZVJvdXRlJyBieSBzdWdnZXN0aW9uSW5kZXhcbiAgICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICAgIHtcbiAgICAgICAgICBwZW5kaW5nU2VsZWN0aW9uOiBudWxsLFxuICAgICAgICAgIGVkaXRpbmc6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuc3RhdGUuc3VnZ2VzdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0LmJsdXIoKTtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLnN0YXRlLnN1Z2dlc3Rpb25zW3RoaXMuc3RhdGUuc3VnZ2VzdGlvbkluZGV4XTtcbiAgICAgICAgICAgIGlmIChpdGVtLnR5cGUgIT09ICdiYWNrJykge1xuICAgICAgICAgICAgICB0aGlzLnByb3BzLm9uU2VsZWN0KFxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUuc3VnZ2VzdGlvbnNbdGhpcy5zdGF0ZS5zdWdnZXN0aW9uSW5kZXhdLFxuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMuaWQsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5wcm9wcy5pc01vYmlsZSAmJiB0aGlzLnN0YXRlLnJlbmRlck1vYmlsZVNlYXJjaCkge1xuICAgICAgICAgICAgICB0aGlzLmNsb3NlTW9iaWxlU2VhcmNoKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHRoaXMucHJvcHMuZm9jdXNDaGFuZ2UgJiZcbiAgICAgICAgICAgICAgKCF0aGlzLnByb3BzLmlzTW9iaWxlIHx8IHRoaXMucHJvcHMuaXNFbWJlZGRlZClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aGlzLnByb3BzLmZvY3VzQ2hhbmdlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9XG4gIH07XG5cbiAgY2xlYXJCdXR0b24gPSAoKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzTmFtZT17c3R5bGVzWydjbGVhci1pbnB1dCddfVxuICAgICAgICBvbkNsaWNrPXt0aGlzLmNsZWFySW5wdXR9XG4gICAgICAgIGFyaWEtbGFiZWw9e3RoaXMucHJvcHMudCgnY2xlYXItYnV0dG9uLWxhYmVsJywge1xuICAgICAgICAgIGxuZzogdGhpcy5wcm9wcy5sYW5nLFxuICAgICAgICB9KX1cbiAgICAgID5cbiAgICAgICAgPEljb24gaW1nPVwiY2xvc2VcIiBjb2xvcj17dGhpcy5wcm9wcy5jb2xvcn0gLz5cbiAgICAgIDwvYnV0dG9uPlxuICAgICk7XG4gIH07XG5cbiAgZmV0Y2hGdW5jdGlvbiA9ICh7IHZhbHVlLCBjbGVhbkV4ZWN1dGVkIH0pID0+IHtcbiAgICByZXR1cm4gdGhpcy5zZXRTdGF0ZShcbiAgICAgIHsgdmFsaWQ6IGZhbHNlLCBjbGVhbkV4ZWN1dGVkOiAhY2xlYW5FeGVjdXRlZCA/IGZhbHNlIDogY2xlYW5FeGVjdXRlZCB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Eb25lKSB7XG4gICAgICAgICAgLy8gZG8gbm90IGxldCBjb21wb25lbnQgY2FzdCB1bm5lY2Vzc2FyeSByZXF1ZXN0c1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHRhcmdldHMgfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGNvbnN0IHVzZUFsbCA9IGlzRW1wdHkodGFyZ2V0cyk7XG4gICAgICAgIGNvbnN0IGlzTG9jYXRpb25TZWFyY2ggPVxuICAgICAgICAgIGlzRW1wdHkodGFyZ2V0cykgfHwgdGFyZ2V0cy5pbmNsdWRlcygnTG9jYXRpb25zJyk7XG4gICAgICAgIGxldCBuZXdUYXJnZXRzO1xuICAgICAgICBpZiAodGhpcy5zdGF0ZS5vd25QbGFjZXMpIHtcbiAgICAgICAgICBuZXdUYXJnZXRzID0gWydMb2NhdGlvbnMnXTtcbiAgICAgICAgICBpZiAodXNlQWxsIHx8IHRhcmdldHMuaW5jbHVkZXMoJ1N0b3BzJykpIHtcbiAgICAgICAgICAgIG5ld1RhcmdldHMucHVzaCgnU3RvcHMnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHVzZUFsbCB8fCB0YXJnZXRzLmluY2x1ZGVzKCdTdGF0aW9ucycpKSB7XG4gICAgICAgICAgICBuZXdUYXJnZXRzLnB1c2goJ1N0YXRpb25zJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh1c2VBbGwgfHwgdGFyZ2V0cy5pbmNsdWRlcygnVmVoaWNsZVJlbnRhbFN0YXRpb25zJykpIHtcbiAgICAgICAgICAgIG5ld1RhcmdldHMucHVzaCgnVmVoaWNsZVJlbnRhbFN0YXRpb25zJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCF1c2VBbGwpIHtcbiAgICAgICAgICBuZXdUYXJnZXRzID0gWy4uLnRhcmdldHNdO1xuICAgICAgICAgIC8vIGluIGRlc2t0b3AsIGZhdm9yaXRlcyBhcmUgYWNjZXNzZWQgdmlhIHN1YiBzZWFyY2hcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBpc0xvY2F0aW9uU2VhcmNoICYmXG4gICAgICAgICAgICAhdGhpcy5wcm9wcy5pc01vYmlsZSAmJlxuICAgICAgICAgICAgKGlzRW1wdHkodGhpcy5wcm9wcy5zb3VyY2VzKSB8fFxuICAgICAgICAgICAgICB0aGlzLnByb3BzLnNvdXJjZXMuaW5jbHVkZXMoJ0Zhdm91cml0ZScpKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgbmV3VGFyZ2V0cy5wdXNoKCdTZWxlY3RGcm9tT3duTG9jYXRpb25zJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIHJlbW92ZSAgbG9jYXRpb24gZmF2b3VyaXRlcyBpbiBkZXNrdG9wIHNlYXJjaCAoY29sbGVjdGlvbiBpdGVtIHJlcGxhY2VzIGl0IGluIHRhcmdldCBhcnJheSlcbiAgICAgICAgY29uc3Qgc291cmNlcyA9XG4gICAgICAgICAgdGhpcy5zdGF0ZS5zb3VyY2VzICYmXG4gICAgICAgICAgdGhpcy5zdGF0ZS5zb3VyY2VzLmZpbHRlcihcbiAgICAgICAgICAgIHMgPT5cbiAgICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICBpc0xvY2F0aW9uU2VhcmNoICYmXG4gICAgICAgICAgICAgICAgcyA9PT0gJ0Zhdm91cml0ZScgJiZcbiAgICAgICAgICAgICAgICAhdGhpcy5zdGF0ZS5vd25QbGFjZXMgJiZcbiAgICAgICAgICAgICAgICAhdGhpcy5wcm9wcy5pc01vYmlsZVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgZXhlY3V0ZVNlYXJjaChcbiAgICAgICAgICBuZXdUYXJnZXRzLFxuICAgICAgICAgIHNvdXJjZXMsXG4gICAgICAgICAgdGhpcy5wcm9wcy50cmFuc3BvcnRNb2RlLFxuICAgICAgICAgIHRoaXMucHJvcHMuc2VhcmNoQ29udGV4dCxcbiAgICAgICAgICB0aGlzLnByb3BzLmZpbHRlclJlc3VsdHMsXG4gICAgICAgICAgdGhpcy5wcm9wcy5nZW9jb2RpbmdTaXplLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlucHV0OiB2YWx1ZSB8fCAnJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNlYXJjaFJlc3VsdCA9PiB7XG4gICAgICAgICAgICBpZiAoc2VhcmNoUmVzdWx0ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gWFhYIHRyYW5zbGF0ZXMgY3VycmVudCBsb2NhdGlvblxuICAgICAgICAgICAgY29uc3Qgc3VnZ2VzdGlvbnMgPSAoc2VhcmNoUmVzdWx0LnJlc3VsdHMgfHwgW10pXG4gICAgICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAgICAgc3VnZ2VzdGlvbiA9PlxuICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi50eXBlICE9PSAnRnV0dXJlUm91dGUnIHx8XG4gICAgICAgICAgICAgICAgICAoc3VnZ2VzdGlvbi50eXBlID09PSAnRnV0dXJlUm91dGUnICYmXG4gICAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24ucHJvcGVydGllcy50aW1lID5cbiAgICAgICAgICAgICAgICAgICAgICBEYXRlVGltZS5ub3coKS50b1VuaXhJbnRlZ2VyKCkpLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5tYXAoc3VnZ2VzdGlvbiA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi50eXBlID09PSAnQ3VycmVudExvY2F0aW9uJyB8fFxuICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi50eXBlID09PSAnU2VsZWN0RnJvbU1hcCcgfHxcbiAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24udHlwZSA9PT0gJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnIHx8XG4gICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uLnR5cGUgPT09ICdiYWNrJ1xuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgdHJhbnNsYXRlZCA9IHsgLi4uc3VnZ2VzdGlvbiB9O1xuICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlZC5wcm9wZXJ0aWVzLmxhYmVsSWQgPSB0aGlzLnByb3BzLnQoXG4gICAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24ucHJvcGVydGllcy5sYWJlbElkLFxuICAgICAgICAgICAgICAgICAgICB7IGxuZzogdGhpcy5wcm9wcy5sYW5nIH0sXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRyYW5zbGF0ZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBzdWdnZXN0aW9uO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgdmFsdWUgPT09IHRoaXMuc3RhdGUudmFsdWUgfHxcbiAgICAgICAgICAgICAgdmFsdWUgPT09IHRoaXMuc3RhdGUucGVuZGluZ1NlbGVjdGlvbiB8fFxuICAgICAgICAgICAgICB0aGlzLnN0YXRlLnBlbmRpbmdTZWxlY3Rpb24gPT09ICdTZWxlY3RGcm9tT3duTG9jYXRpb25zJyB8fFxuICAgICAgICAgICAgICB0aGlzLnN0YXRlLnBlbmRpbmdTZWxlY3Rpb24gPT09ICdiYWNrJyB8fFxuICAgICAgICAgICAgICB0aGlzLnN0YXRlLnBlbmRpbmdTZWxlY3Rpb24gPT09ICdGdXR1cmVSb3V0ZSdcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHZhbGlkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbnMsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAoKSA9PiB0aGlzLmNoZWNrUGVuZGluZ1NlbGVjdGlvbigpLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGhpcy5wcm9wcy5wYXRoT3B0cyxcbiAgICAgICAgICB0aGlzLnByb3BzLnJlZlBvaW50LFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICApO1xuICB9O1xuXG4gIGNsZWFySW5wdXQgPSAoKSA9PiB7XG4gICAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgICBlZGl0aW5nOiB0cnVlLFxuICAgICAgdmFsdWU6ICcnLFxuICAgICAgc291cmNlczogdGhpcy5wcm9wcy5zb3VyY2VzLFxuICAgICAgb3duUGxhY2VzOiBmYWxzZSxcbiAgICAgIHJlbmRlck1vYmlsZVNlYXJjaDogdGhpcy5wcm9wcy5pc01vYmlsZSxcbiAgICB9O1xuICAgIC8vIG11c3QgdXBkYXRlIHN1Z2dlc3Rpb25zXG4gICAgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSwgKCkgPT5cbiAgICAgIHRoaXMuZmV0Y2hGdW5jdGlvbih7IHZhbHVlOiAnJywgY2xlYW5FeGVjdXRlZDogdHJ1ZSB9KSxcbiAgICApO1xuICAgIGlmICh0aGlzLnByb3BzLm9uQ2xlYXIpIHtcbiAgICAgIHRoaXMucHJvcHMub25DbGVhcih0aGlzLnByb3BzLmlkKTtcbiAgICB9XG4gICAgdGhpcy5pbnB1dC5mb2N1cygpO1xuICB9O1xuXG4gIGlucHV0Q2xpY2tlZCA9IGlucHV0VmFsdWUgPT4ge1xuICAgIHRoaXMuaW5wdXQuZm9jdXMoKTtcbiAgICB0aGlzLmNsZWFyTG9jYXRpb25UZXh0KCk7XG4gICAgaWYgKHRoaXMucHJvcHMuaXNNb2JpbGUpIHtcbiAgICAgIHRoaXMucHJvcHMubG9jaygpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuc3RhdGUuZWRpdGluZykge1xuICAgICAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgICAgIGVkaXRpbmc6IHRydWUsXG4gICAgICAgIC8vIHJlc2V0IGF0IHN0YXJ0LCBqdXN0IGluIGNhc2Ugd2UgbWlzc2VkIHNvbWV0aGluZ1xuICAgICAgICBwZW5kaW5nU2VsZWN0aW9uOiBudWxsLFxuICAgICAgICByZW5kZXJNb2JpbGVTZWFyY2g6IHRoaXMucHJvcHMuaXNNb2JpbGUsXG4gICAgICB9O1xuXG4gICAgICAvLyBEVC0zMjYzOiBhZGRlZCBzdGF0ZUtleURvd25cbiAgICAgIGNvbnN0IHN0YXRlS2V5RG93biA9IHtcbiAgICAgICAgZWRpdGluZzogdHJ1ZSxcbiAgICAgICAgcGVuZGluZ1NlbGVjdGlvbjogbnVsbCxcbiAgICAgICAgdmFsdWU6IGlucHV0VmFsdWUsXG4gICAgICB9O1xuXG4gICAgICBpZiAoIXRoaXMuc3RhdGUuc3VnZ2VzdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIC8vIERULTMyNjM6IGFkZGVkIGlmLWVsc2Ugc3RhdGVtZW50XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXRWYWx1ZSA9PT0gJ29iamVjdCcgfHwgIWlucHV0VmFsdWUpIHtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKG5ld1N0YXRlLCAoKSA9PlxuICAgICAgICAgICAgdGhpcy5mZXRjaEZ1bmN0aW9uKHsgdmFsdWU6IHRoaXMuc3RhdGUudmFsdWUgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHN0YXRlS2V5RG93biwgKCkgPT5cbiAgICAgICAgICAgIHRoaXMuZmV0Y2hGdW5jdGlvbih7IHZhbHVlOiBpbnB1dFZhbHVlIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZmV0Y2hGdW5jdGlvbih7IHZhbHVlOiB0aGlzLnN0YXRlLnZhbHVlIH0pO1xuICAgICAgICB0aGlzLnNldFN0YXRlKG5ld1N0YXRlKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMuaXNNb2JpbGUgJiYgIXRoaXMuc3RhdGUucmVuZGVyTW9iaWxlU2VhcmNoKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgcmVuZGVyTW9iaWxlU2VhcmNoOiB0cnVlIH0pO1xuICAgIH1cbiAgfTtcblxuICBzdG9yZUlucHV0UmVmZXJlbmNlID0gYXV0b3N1Z2dlc3QgPT4ge1xuICAgIGlmIChhdXRvc3VnZ2VzdCAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5pbnB1dCA9IGF1dG9zdWdnZXN0LmlucHV0O1xuICAgICAgaWYgKHRoaXMucHJvcHMuc3RvcmVSZWYpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5zdG9yZVJlZihhdXRvc3VnZ2VzdC5pbnB1dCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8vIEZpbGwgaW5wdXQgd2hlbiB1c2VyIGNsaWNrcyBmaWxsIGlucHV0IGJ1dHRvbiBpbiBzdHJlZXQgc3VnZ2VzdGlvbiBpdGVtXG4gIGZpbGxJbnB1dCA9IG5ld1ZhbHVlID0+IHtcbiAgICB0aGlzLmZJbnB1dCA9IG5ld1ZhbHVlLnByb3BlcnRpZXMubmFtZTtcbiAgICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAgIGVkaXRpbmc6IHRydWUsXG4gICAgICB2YWx1ZTogbmV3VmFsdWUucHJvcGVydGllcy5uYW1lLFxuICAgICAgY2hlY2tQZW5kaW5nU2VsZWN0aW9uOiBuZXdWYWx1ZSxcbiAgICAgIHZhbGlkOiB0cnVlLFxuICAgIH07XG4gICAgLy8gbXVzdCB1cGRhdGUgc3VnZ2VzdGlvbnNcbiAgICB0aGlzLnNldFN0YXRlKG5ld1N0YXRlKTtcbiAgICB0aGlzLmZldGNoRnVuY3Rpb24oeyB2YWx1ZTogbmV3VmFsdWUucHJvcGVydGllcy5uYW1lIH0pO1xuICAgIHRoaXMuaW5wdXQuZm9jdXMoKTtcbiAgfTtcblxuICByZW5kZXJJdGVtID0gaXRlbSA9PiB7XG4gICAgY29uc3QgbmV3SXRlbSA9XG4gICAgICBpdGVtLnR5cGUgPT09ICdGdXR1cmVSb3V0ZSdcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgdHJhbnNsYXRlZFRleHQ6IHRyYW5zbGF0ZUZ1dHVyZVJvdXRlU3VnZ2VzdGlvblRpbWUoXG4gICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgIHRoaXMucHJvcHMubGFuZyxcbiAgICAgICAgICAgICAgdGhpcy5wcm9wcy50LFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICB9XG4gICAgICAgIDogaXRlbTtcbiAgICBjb25zdCBjb250ZW50ID0gZ2V0U3VnZ2VzdGlvbkNvbnRlbnQoaXRlbSwgdGhpcy5wcm9wcy5sYW5nLCB0aGlzLnByb3BzLnQpO1xuICAgIHJldHVybiAoXG4gICAgICA8U3VnZ2VzdGlvbkl0ZW1cbiAgICAgICAgaXRlbT17bmV3SXRlbX1cbiAgICAgICAgY29udGVudD17Y29udGVudH1cbiAgICAgICAgbG9hZGluZz17IXRoaXMuc3RhdGUudmFsaWR9XG4gICAgICAgIGlzTW9iaWxlPXt0aGlzLnByb3BzLmlzTW9iaWxlfVxuICAgICAgICBhcmlhRmF2b3VyaXRlU3RyaW5nPXt0aGlzLnByb3BzLnQoJ2Zhdm91cml0ZScsIHtcbiAgICAgICAgICBsbmc6IHRoaXMucHJvcHMubGFuZyxcbiAgICAgICAgfSl9XG4gICAgICAgIGNvbG9yPXt0aGlzLnByb3BzLmNvbG9yfVxuICAgICAgICBhY2Nlc3NpYmxlUHJpbWFyeUNvbG9yPXt0aGlzLnByb3BzLmFjY2Vzc2libGVQcmltYXJ5Q29sb3J9XG4gICAgICAgIGZpbGxJbnB1dD17dGhpcy5maWxsSW5wdXR9XG4gICAgICAgIGZvbnRXZWlnaHRzPXt0aGlzLnByb3BzLmZvbnRXZWlnaHRzfVxuICAgICAgICBnZXRBdXRvU3VnZ2VzdEljb25zPXt0aGlzLnByb3BzLmdldEF1dG9TdWdnZXN0SWNvbnN9XG4gICAgICAgIG1vZGVJY29uQ29sb3JzPXt0aGlzLnByb3BzLm1vZGVJY29uQ29sb3JzfVxuICAgICAgICBtb2RlU2V0PXt0aGlzLnByb3BzLm1vZGVTZXR9XG4gICAgICAvPlxuICAgICk7XG4gIH07XG5cbiAgY2xvc2VNb2JpbGVTZWFyY2ggPSAoKSA9PiB7XG4gICAgdGhpcy5wcm9wcy51bmxvY2soKTtcbiAgICB0aGlzLnNldFN0YXRlKFxuICAgICAge1xuICAgICAgICByZW5kZXJNb2JpbGVTZWFyY2g6IGZhbHNlLFxuICAgICAgICB2YWx1ZTogdGhpcy5wcm9wcy52YWx1ZSxcbiAgICAgIH0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHdpbmRvdy5zY3JvbGxUbygwLCB0aGlzLnN0YXRlLnNjcm9sbFkpO1xuICAgICAgICB0aGlzLm9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZCgpO1xuICAgICAgfSxcbiAgICApO1xuICAgIHRoaXMuaW5wdXQuZm9jdXMoKTtcbiAgICAvLyBUaGlzIGNsb3NlcyB0aGUgbW9iaWxlIGtleWJvYXJkXG4gICAgdGhpcy5pbnB1dC5ibHVyKCk7XG4gIH07XG5cbiAga2V5RG93biA9IGV2ZW50ID0+IHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25Eb25lKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGtleUNvZGUgPSBldmVudC5rZXk7XG4gICAgaWYgKGtleUNvZGUgPT09ICdTaGlmdCcpIHtcbiAgICAgIC8vIFRoaXMgZW5hYmxlcyBzaGlmdCArIHRhYiB0byBiZSB1c2VkXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChrZXlDb2RlID09PSAnRXNjYXBlJykge1xuICAgICAgLy8gVXNpbmcgb25CbHVyIG1ha2VzICdFc2NhcGUnIGFjdCBzaW1pbGFybHkgdG8gdXNpbmcgJ1RhYidcbiAgICAgIHRoaXMub25CbHVyKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnN0YXRlLmVkaXRpbmcpIHtcbiAgICAgIGlmIChrZXlDb2RlID09PSAnRW50ZXInICYmIHRoaXMuc3RhdGUudmFsdWUgIT09ICcnKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBwZW5kaW5nU2VsZWN0aW9uOiB0cnVlIH0sICgpID0+IHtcbiAgICAgICAgICB0aGlzLmZldGNoRnVuY3Rpb24oeyB2YWx1ZTogdGhpcy5zdGF0ZS52YWx1ZSB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLmlucHV0Q2xpY2tlZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIChrZXlDb2RlID09PSAnRW50ZXInIHx8IGtleUNvZGUgPT09ICdBcnJvd0Rvd24nKSAmJlxuICAgICAgdGhpcy5zdGF0ZS52YWx1ZSA9PT0gJydcbiAgICApIHtcbiAgICAgIHRoaXMuY2xlYXJJbnB1dCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChrZXlDb2RlID09PSAnQXJyb3dEb3duJyAmJiB0aGlzLnN0YXRlLnZhbHVlICE9PSAnJykge1xuICAgICAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgICAgIGVkaXRpbmc6IHRydWUsXG4gICAgICAgIHZhbHVlOiB0aGlzLnN0YXRlLnZhbHVlLFxuICAgICAgfTtcbiAgICAgIC8vIG11c3QgdXBkYXRlIHN1Z2dlc3Rpb25zXG4gICAgICB0aGlzLnNldFN0YXRlKG5ld1N0YXRlLCAoKSA9PlxuICAgICAgICB0aGlzLmZldGNoRnVuY3Rpb24oeyB2YWx1ZTogdGhpcy5zdGF0ZS52YWx1ZSB9KSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghdGhpcy5zdGF0ZS5lZGl0aW5nKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgZWRpdGluZzogdHJ1ZSB9KTtcbiAgICAgIHRoaXMuY2xlYXJMb2NhdGlvblRleHQoKTtcbiAgICB9XG5cbiAgICBpZiAoa2V5Q29kZSA9PT0gJ1RhYicpIHtcbiAgICAgIHRoaXMub25CbHVyKCk7XG4gICAgfVxuICB9O1xuXG4gIHN1Z2dlc3Rpb25Bc0FyaWFDb250ZW50ID0gKCkgPT4ge1xuICAgIGxldCBsYWJlbCA9IFtdO1xuICAgIGNvbnN0IGZpcnN0U3VnZ2VzdGlvbiA9IHRoaXMuc3RhdGUuc3VnZ2VzdGlvbnNbMF07XG4gICAgaWYgKGZpcnN0U3VnZ2VzdGlvbikge1xuICAgICAgaWYgKGZpcnN0U3VnZ2VzdGlvbi50eXBlICYmIGZpcnN0U3VnZ2VzdGlvbi50eXBlLmluY2x1ZGVzKCdGYXZvdXJpdGUnKSkge1xuICAgICAgICBsYWJlbC5wdXNoKHRoaXMucHJvcHMudCgnZmF2b3VyaXRlJywgeyBsbmc6IHRoaXMucHJvcHMubGFuZyB9KSk7XG4gICAgICB9XG4gICAgICBsYWJlbCA9IGxhYmVsLmNvbmNhdChcbiAgICAgICAgZ2V0U3VnZ2VzdGlvbkNvbnRlbnQodGhpcy5zdGF0ZS5zdWdnZXN0aW9uc1swXSwgdGhpcy5wcm9wcy5sYW5nKSxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBbLi4ubmV3IFNldChsYWJlbCldLmpvaW4oJyAtICcpO1xuICB9O1xuXG4gIGNsZWFyT2xkU2VhcmNoZXMgPSAoKSA9PiB7XG4gICAgY29uc3QgeyBjb250ZXh0LCBjbGVhck9sZFNlYXJjaGVzLCBjbGVhckZ1dHVyZVJvdXRlcyB9ID1cbiAgICAgIHRoaXMucHJvcHMuc2VhcmNoQ29udGV4dDtcbiAgICBpZiAoY29udGV4dCAmJiBjbGVhck9sZFNlYXJjaGVzKSB7XG4gICAgICBjbGVhck9sZFNlYXJjaGVzKGNvbnRleHQpO1xuICAgICAgaWYgKGNsZWFyRnV0dXJlUm91dGVzKSB7XG4gICAgICAgIGNsZWFyRnV0dXJlUm91dGVzKGNvbnRleHQpO1xuICAgICAgfVxuICAgICAgdGhpcy5mZXRjaEZ1bmN0aW9uKHsgdmFsdWU6IHRoaXMuc3RhdGUudmFsdWUgfSk7XG4gICAgfVxuICB9O1xuXG4gIGlzT3JpZ2luRGVzdGluYXRpb25PclZpYXBvaW50ID0gKCkgPT5cbiAgICB0aGlzLnByb3BzLmlkID09PSAnb3JpZ2luJyB8fFxuICAgIHRoaXMucHJvcHMuaWQgPT09ICdkZXN0aW5hdGlvbicgfHxcbiAgICB0aGlzLnByb3BzLmlkID09PSAndmlhLXBvaW50JyB8fFxuICAgIHRoaXMucHJvcHMuaWQgPT09ICdvcmlnaW4tc3RvcC1uZWFyLXlvdSc7XG5cbiAgY2xlYXJMb2NhdGlvblRleHQgPSAoKSA9PiB7XG4gICAgY29uc3QgcG9zaXRpb25zID0gW1xuICAgICAgJ1ZhbGl0dHUgc2lqYWludGknLFxuICAgICAgJ055a3lpbmVuIHNpamFpbnRpc2knLFxuICAgICAgJ0N1cnJlbnQgcG9zaXRpb24nLFxuICAgICAgJ1NlbGVjdGVkIGxvY2F0aW9uJyxcbiAgICAgICdWYWxkIHBvc2l0aW9uJyxcbiAgICAgICdBbnbDpG5kIG1pbiBwb3NpdGlvbicsXG4gICAgICAnTWluIHBvc2l0aW9uJyxcbiAgICAgICdLw6R5dMOkIG55a3lpc3TDpCBzaWphaW50aWEnLFxuICAgICAgJ1VzZSBjdXJyZW50IGxvY2F0aW9uJyxcbiAgICAgICdZb3VyIGN1cnJlbnQgbG9jYXRpb24nLFxuICAgICAgJ1d5YnJhbmUgbWllanNjZScsXG4gICAgXTtcbiAgICBpZiAocG9zaXRpb25zLmluY2x1ZGVzKHRoaXMuc3RhdGUudmFsdWUpKSB7XG4gICAgICB0aGlzLmNsZWFySW5wdXQoKTtcbiAgICB9XG4gIH07XG5cbiAgb25Gb2N1cyA9ICgpID0+IHtcbiAgICBjb25zdCBzY3JvbGxZID0gd2luZG93LnBhZ2VZT2Zmc2V0O1xuICAgIHJldHVybiB0aGlzLnNldFN0YXRlKHsgc2Nyb2xsWSB9KTtcbiAgfTtcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyB0LCBsYW5nOiBsbmcgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyB2YWx1ZSwgc3VnZ2VzdGlvbnMsIHJlbmRlck1vYmlsZVNlYXJjaCwgY2xlYW5FeGVjdXRlZCB9ID1cbiAgICAgIHRoaXMuc3RhdGU7XG4gICAgY29uc3QgaW5wdXRQcm9wcyA9IHtcbiAgICAgIHBsYWNlaG9sZGVyOiB0aGlzLnByb3BzLnRyYW5zbGF0ZWRQbGFjZWhvbGRlclxuICAgICAgICA/IHRoaXMucHJvcHMudHJhbnNsYXRlZFBsYWNlaG9sZGVyXG4gICAgICAgIDogdCh0aGlzLnByb3BzLnBsYWNlaG9sZGVyLCB7IGxuZyB9KSxcbiAgICAgIHZhbHVlLFxuICAgICAgb25DaGFuZ2U6IHRoaXMub25DaGFuZ2UsXG4gICAgICBvbkJsdXI6IHRoaXMub25CbHVyLFxuICAgICAgY2xhc3NOYW1lOiBjeChcbiAgICAgICAgYCR7c3R5bGVzLmlucHV0fSAke1xuICAgICAgICAgIHRoaXMucHJvcHMuaXNNb2JpbGUgJiYgdGhpcy5wcm9wcy50cmFuc3BvcnRNb2RlID8gc3R5bGVzLnRoaW4gOiAnJ1xuICAgICAgICB9ICR7c3R5bGVzW3RoaXMucHJvcHMuaWRdIHx8ICcnfSAke1xuICAgICAgICAgIHRoaXMuc3RhdGUudmFsdWUgPyBzdHlsZXMuaGFzVmFsdWUgOiAnJ1xuICAgICAgICB9ICR7dGhpcy5wcm9wcy5pbnB1dENsYXNzTmFtZX1gLFxuICAgICAgKSxcbiAgICAgIG9uS2V5RG93bjogdGhpcy5rZXlEb3duLCAvLyBEVC0zMjYzXG4gICAgICByZXF1aXJlZDogdGhpcy5wcm9wcy5yZXF1aXJlZCxcbiAgICB9O1xuICAgIGNvbnN0IGFyaWFCYXJJZCA9IHRoaXMucHJvcHMuaWQucmVwbGFjZSgnc2VhcmNoZmllbGQtJywgJycpO1xuICAgIGxldCBTZWFyY2hCYXJJZCA9IHRoaXMucHJvcHMuYXJpYUxhYmVsIHx8IHQoYXJpYUJhcklkLCB7IGxuZyB9KTtcbiAgICBTZWFyY2hCYXJJZCA9IFNlYXJjaEJhcklkLnJlcGxhY2UoJ3NlYXJjaGZpZWxkLScsICcnKS5jb25jYXQoJy4nKTsgLy8gRnVsbCBzdG9wIG1ha2VzIHNjcmVlbiByZWFkZXIgc3BlZWNoIGNsZWFyZXIuXG4gICAgY29uc3QgYXJpYVJlcXVpcmVkVGV4dCA9IHRoaXMucHJvcHMucmVxdWlyZWRcbiAgICAgID8gYCR7dCgncmVxdWlyZWQnLCB7IGxuZyB9KX0uYFxuICAgICAgOiAnJztcbiAgICBjb25zdCBhcmlhTGFiZWxJbnN0cnVjdGlvbnMgPSB0aGlzLnByb3BzLmlzTW9iaWxlXG4gICAgICA/IHQoJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtbW9iaWxlJywgeyBsbmcgfSlcbiAgICAgIDogdCgnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1kZXNrdG9wJywgeyBsbmcgfSk7XG4gICAgY29uc3QgbW92aW5nVG9EZXN0aW5hdGlvbkZpZWxkVGV4dCA9XG4gICAgICB0aGlzLnByb3BzLmlkID09PSAnb3JpZ2luJ1xuICAgICAgICA/IHQoJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1tb3ZlLXRvLWRlc3RpbmF0aW9uJywgeyBsbmcgfSlcbiAgICAgICAgOiAnJztcbiAgICBjb25zdCBhcmlhTGFiZWxUZXh0ID0gYXJpYUxhYmVsSW5zdHJ1Y3Rpb25zXG4gICAgICAuY29uY2F0KCcgJylcbiAgICAgIC5jb25jYXQobW92aW5nVG9EZXN0aW5hdGlvbkZpZWxkVGV4dCk7XG5cbiAgICBjb25zdCBhcmlhU3VnZ2VzdGlvbkxlbiA9IHQoJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW4nLCB7XG4gICAgICBjb3VudDogc3VnZ2VzdGlvbnMubGVuZ3RoLFxuICAgICAgbG5nLFxuICAgIH0pO1xuXG4gICAgY29uc3QgYXJpYUN1cnJlbnRTdWdnZXN0aW9uID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuc3VnZ2VzdGlvbkFzQXJpYUNvbnRlbnQoKSB8fCB0aGlzLnByb3BzLnZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0KCdzZWFyY2gtY3VycmVudC1zdWdnZXN0aW9uJywge1xuICAgICAgICAgIGxuZyxcbiAgICAgICAgICBzZWxlY3Rpb246XG4gICAgICAgICAgICB0aGlzLnN1Z2dlc3Rpb25Bc0FyaWFDb250ZW50KCkudG9Mb3dlckNhc2UoKSB8fCB0aGlzLnByb3BzLnZhbHVlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAnJztcbiAgICB9O1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXNbJ3NyLW9ubHknXX0gcm9sZT1cImFsZXJ0XCI+XG4gICAgICAgICAgeyF0aGlzLnN0YXRlLnR5cGluZyAmJlxuICAgICAgICAgICAgdGhpcy5zdGF0ZS5lZGl0aW5nICYmXG4gICAgICAgICAgICBgJHthcmlhU3VnZ2VzdGlvbkxlbn0gJHthcmlhQ3VycmVudFN1Z2dlc3Rpb24oKX1gfVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIHt0aGlzLnByb3BzLmlzTW9iaWxlICYmIChcbiAgICAgICAgICA8TW9iaWxlU2VhcmNoXG4gICAgICAgICAgICBzZWFyY2hPcGVuPXtyZW5kZXJNb2JpbGVTZWFyY2h9XG4gICAgICAgICAgICBhcHBFbGVtZW50PXt0aGlzLnByb3BzLmFwcEVsZW1lbnR9XG4gICAgICAgICAgICBjbGVhck9sZFNlYXJjaGVzPXt0aGlzLmNsZWFyT2xkU2VhcmNoZXN9XG4gICAgICAgICAgICBpZD17dGhpcy5wcm9wcy5pZH1cbiAgICAgICAgICAgIGNsZWFySW5wdXQ9e3RoaXMuY2xlYXJJbnB1dH1cbiAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLnZhbHVlfVxuICAgICAgICAgICAgc3VnZ2VzdGlvbnM9e1tcbiAgICAgICAgICAgICAgLi4uc3VnZ2VzdGlvbnMsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnY2xlYXItc2VhcmNoLWhpc3RvcnknLFxuICAgICAgICAgICAgICAgIGxhYmVsSWQ6IHQoJ2NsZWFyLXNlYXJjaC1oaXN0b3J5JywgeyBsbmcgfSksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdfVxuICAgICAgICAgICAgaW5wdXRQcm9wcz17e1xuICAgICAgICAgICAgICAuLi5pbnB1dFByb3BzLFxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogdGhpcy5pc09yaWdpbkRlc3RpbmF0aW9uT3JWaWFwb2ludCgpXG4gICAgICAgICAgICAgICAgPyB0KCdhZGRyZXNzLXBsYWNlLW9yLWJ1c2luZXNzJywgeyBsbmcgfSlcbiAgICAgICAgICAgICAgICA6IGlucHV0UHJvcHMucGxhY2Vob2xkZXIsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgZmV0Y2hGdW5jdGlvbj17dGhpcy5mZXRjaEZ1bmN0aW9ufVxuICAgICAgICAgICAgb25TdWdnZXN0aW9uc0NsZWFyUmVxdWVzdGVkPXt0aGlzLm9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZH1cbiAgICAgICAgICAgIGdldFN1Z2dlc3Rpb25WYWx1ZT17Z2V0U3VnZ2VzdGlvblZhbHVlfVxuICAgICAgICAgICAgcmVuZGVyU3VnZ2VzdGlvbj17dGhpcy5yZW5kZXJJdGVtfVxuICAgICAgICAgICAgY2xvc2VIYW5kbGU9e3RoaXMuY2xvc2VNb2JpbGVTZWFyY2h9XG4gICAgICAgICAgICBhcmlhTGFiZWw9e2FyaWFSZXF1aXJlZFRleHRcbiAgICAgICAgICAgICAgLmNvbmNhdCgnICcpXG4gICAgICAgICAgICAgIC5jb25jYXQoU2VhcmNoQmFySWQpXG4gICAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgICAuY29uY2F0KGFyaWFDdXJyZW50U3VnZ2VzdGlvbigpKX1cbiAgICAgICAgICAgIGxhYmVsPXtcbiAgICAgICAgICAgICAgdGhpcy5wcm9wcy5tb2JpbGVMYWJlbFxuICAgICAgICAgICAgICAgID8gdGhpcy5wcm9wcy5tb2JpbGVMYWJlbFxuICAgICAgICAgICAgICAgIDogdCh0aGlzLnByb3BzLmlkLCB7IGxuZyB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb25TdWdnZXN0aW9uU2VsZWN0ZWQ9e3RoaXMub25TZWxlY3RlZH1cbiAgICAgICAgICAgIGRpYWxvZ0hlYWRlclRleHQ9e3QoJ2RlbGV0ZS1vbGQtc2VhcmNoZXMtaGVhZGVyJywge1xuICAgICAgICAgICAgICBsbmcsXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIGRpYWxvZ1ByaW1hcnlCdXR0b25UZXh0PXt0KCdkZWxldGUnLCB7IGxuZyB9KX1cbiAgICAgICAgICAgIGRpYWxvZ1NlY29uZGFyeUJ1dHRvblRleHQ9e3QoJ2NhbmNlbCcsIHsgbG5nIH0pfVxuICAgICAgICAgICAgY2xlYXJJbnB1dEJ1dHRvblRleHQ9e3QoJ2NsZWFyLWJ1dHRvbi1sYWJlbCcsIHsgbG5nIH0pfVxuICAgICAgICAgICAgZm9jdXNJbnB1dD17Y2xlYW5FeGVjdXRlZH1cbiAgICAgICAgICAgIGNvbG9yPXt0aGlzLnByb3BzLmNvbG9yfVxuICAgICAgICAgICAgaG92ZXJDb2xvcj17dGhpcy5wcm9wcy5ob3ZlckNvbG9yfVxuICAgICAgICAgICAgYWNjZXNzaWJsZVByaW1hcnlDb2xvcj17dGhpcy5wcm9wcy5hY2Nlc3NpYmxlUHJpbWFyeUNvbG9yfVxuICAgICAgICAgICAgZm9udFdlaWdodHM9e3RoaXMucHJvcHMuZm9udFdlaWdodHN9XG4gICAgICAgICAgICBzaG93U2Nyb2xsPXt0aGlzLnByb3BzLnNob3dTY3JvbGx9XG4gICAgICAgICAgICBsYW5nPXt0aGlzLnByb3BzLmxhbmd9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAgeyFyZW5kZXJNb2JpbGVTZWFyY2ggJiYgKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y3goW1xuICAgICAgICAgICAgICBzdHlsZXNbJ2F1dG9zdWdnZXN0LWlucHV0LWNvbnRhaW5lciddLFxuICAgICAgICAgICAgICBzdHlsZXNbdGhpcy5wcm9wcy5pZF0sXG4gICAgICAgICAgICBdKX1cbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICctLWNvbG9yJzogYCR7dGhpcy5wcm9wcy5jb2xvcn1gLFxuICAgICAgICAgICAgICAnLS1ob3Zlci1jb2xvcic6IGAke3RoaXMucHJvcHMuaG92ZXJDb2xvcn1gLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7dGhpcy5wcm9wcy5pY29uICYmIChcbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y3goW1xuICAgICAgICAgICAgICAgICAgc3R5bGVzW2BhdXRvc3VnZ2VzdC1pbnB1dC1pY29uYF0sXG4gICAgICAgICAgICAgICAgICBzdHlsZXNbdGhpcy5wcm9wcy5pZF0sXG4gICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLmlucHV0Q2xhc3NOYW1lICYmXG4gICAgICAgICAgICAgICAgICAgIGAke3RoaXMucHJvcHMuaW5wdXRDbGFzc05hbWV9LWlucHV0LWljb25gLFxuICAgICAgICAgICAgICAgIF0pfVxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e2FyaWFSZXF1aXJlZFRleHRcbiAgICAgICAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgICAgICAgLmNvbmNhdChTZWFyY2hCYXJJZClcbiAgICAgICAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgICAgICAgLmNvbmNhdCh0KCdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwnLCB7IGxuZyB9KSl9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8SWNvbiBpbWc9e2Ake3RoaXMucHJvcHMuaWNvbn1gfSAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8QXV0b3N1Z2dlc3RcbiAgICAgICAgICAgICAgYWx3YXlzUmVuZGVyU3VnZ2VzdGlvbnM9e3RoaXMuc3RhdGUuZWRpdGluZ31cbiAgICAgICAgICAgICAgaWQ9e3RoaXMucHJvcHMuaWR9XG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb25zPXtzdWdnZXN0aW9uc31cbiAgICAgICAgICAgICAgb25TdWdnZXN0aW9uc0ZldGNoUmVxdWVzdGVkPXt0aGlzLmZldGNoRnVuY3Rpb259XG4gICAgICAgICAgICAgIG9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZD17dGhpcy5vblN1Z2dlc3Rpb25zQ2xlYXJSZXF1ZXN0ZWR9XG4gICAgICAgICAgICAgIGdldFN1Z2dlc3Rpb25WYWx1ZT17Z2V0U3VnZ2VzdGlvblZhbHVlfVxuICAgICAgICAgICAgICByZW5kZXJTdWdnZXN0aW9uPXt0aGlzLnJlbmRlckl0ZW19XG4gICAgICAgICAgICAgIGlucHV0UHJvcHM9e3tcbiAgICAgICAgICAgICAgICAuLi5pbnB1dFByb3BzLFxuICAgICAgICAgICAgICAgIG9uRm9jdXM6IHRoaXMub25Gb2N1cyxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgZm9jdXNJbnB1dE9uU3VnZ2VzdGlvbkNsaWNrXG4gICAgICAgICAgICAgIHNob3VsZFJlbmRlclN1Z2dlc3Rpb25zPXsoKSA9PiB0aGlzLnN0YXRlLmVkaXRpbmd9XG4gICAgICAgICAgICAgIGhpZ2hsaWdodEZpcnN0U3VnZ2VzdGlvbj17IXRoaXMuc3RhdGUub3duUGxhY2VzfVxuICAgICAgICAgICAgICB0aGVtZT17c3R5bGVzfVxuICAgICAgICAgICAgICByZW5kZXJJbnB1dENvbXBvbmVudD17cCA9PiAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9e3N0eWxlc1snc3Itb25seSddfSBodG1sRm9yPXt0aGlzLnByb3BzLmlkfT5cbiAgICAgICAgICAgICAgICAgICAge2FyaWFDdXJyZW50U3VnZ2VzdGlvbigpXG4gICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdCgnICcpXG4gICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChhcmlhUmVxdWlyZWRUZXh0KVxuICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoU2VhcmNoQmFySWQpXG4gICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdCgnICcpXG4gICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChhcmlhTGFiZWxUZXh0KX1cbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17YXJpYUN1cnJlbnRTdWdnZXN0aW9uKClcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KGFyaWFSZXF1aXJlZFRleHQpXG4gICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdCgnICcpXG4gICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChTZWFyY2hCYXJJZClcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KGFyaWFMYWJlbFRleHQpfVxuICAgICAgICAgICAgICAgICAgICBpZD17dGhpcy5wcm9wcy5pZH1cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17dGhpcy5pbnB1dENsaWNrZWR9XG4gICAgICAgICAgICAgICAgICAgIG9uS2V5RG93bj17dGhpcy5rZXlEb3dufVxuICAgICAgICAgICAgICAgICAgICB7Li4ucH1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICB7dGhpcy5zdGF0ZS52YWx1ZSAmJiB0aGlzLmNsZWFyQnV0dG9uKCl9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIG9uU3VnZ2VzdGlvblNlbGVjdGVkPXt0aGlzLm9uU2VsZWN0ZWR9XG4gICAgICAgICAgICAgIHJlZj17dGhpcy5zdG9yZUlucHV0UmVmZXJlbmNlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgKTtcbiAgfVxufVxuXG5jb25zdCBEVEF1dG9zdWdnZXN0V2l0aFNjcm9sbExvY2sgPSB3aXRoVHJhbnNsYXRpb24oKShcbiAgd2l0aFNjcm9sbExvY2soRFRBdXRvc3VnZ2VzdCksXG4pO1xuXG5leHBvcnQgZGVmYXVsdCBwcm9wcyA9PiB7XG4gIHJldHVybiAoXG4gICAgPEkxOG5leHRQcm92aWRlciBpMThuPXtpMThufT5cbiAgICAgIDxEVEF1dG9zdWdnZXN0V2l0aFNjcm9sbExvY2sgey4uLnByb3BzfSAvPlxuICAgIDwvSTE4bmV4dFByb3ZpZGVyPlxuICApO1xufTtcbiIsImltcG9ydCB7IGdldE5hbWVMYWJlbCB9IGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC11bmlxLWJ5LWxhYmVsJztcbi8qKlxuICogUmV0dXJucyBsYWJlbCBmb3IgcHJvcGVydGllc1xuICpcbiAqIEBuYW1lIGdldExhYmVsXG4gKiBAcGFyYW0geyp9IHByb3BlcnRpZXMgb2JqZWN0XG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZS9mYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRMYWJlbChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IHBhcnRzID0gZ2V0TmFtZUxhYmVsKHByb3BlcnRpZXMsIHRydWUpO1xuICBzd2l0Y2ggKHByb3BlcnRpZXMubGF5ZXIpIHtcbiAgICBjYXNlICdzZWxlY3RGcm9tTWFwJzpcbiAgICBjYXNlICdjdXJyZW50UG9zaXRpb24nOlxuICAgIGNhc2UgJ293bkxvY2F0aW9ucyc6XG4gICAgY2FzZSAnYmFjayc6XG4gICAgICByZXR1cm4gcGFydHNbMV0gfHwgcGFydHNbMF07XG4gICAgY2FzZSAnZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb24nOlxuICAgIGNhc2UgJ2Zhdm91cml0ZVBsYWNlJzpcbiAgICAgIHJldHVybiBwYXJ0c1swXTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHBhcnRzLmxlbmd0aCA+IDEgJiYgcGFydHNbMV0gIT09ICcnXG4gICAgICAgID8gcGFydHMuam9pbignLCAnKVxuICAgICAgICA6IHBhcnRzWzFdIHx8IHBhcnRzWzBdO1xuICB9XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGhvb2tzIGZyb20gJ0Boc2wtZmkvaG9va3MnO1xuXG5jb25zdCB3aXRoU2Nyb2xsTG9jayA9IENvbXBvbmVudCA9PiB7XG4gIHJldHVybiBwcm9wcyA9PiB7XG4gICAgY29uc3QgeyBsb2NrLCB1bmxvY2sgfSA9IGhvb2tzLnVzZVNjcm9sbExvY2soKTtcblxuICAgIHJldHVybiA8Q29tcG9uZW50IGxvY2s9e2xvY2t9IHVubG9jaz17dW5sb2NrfSB7Li4ucHJvcHN9IC8+O1xuICB9O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFNjcm9sbExvY2s7XG4iXSwibmFtZXMiOlsiX3R5cGVvZiIsIm8iLCJTeW1ib2wiLCJpdGVyYXRvciIsImNvbnN0cnVjdG9yIiwicHJvdG90eXBlIiwidG9Qcm9wZXJ0eUtleSIsInQiLCJpIiwiciIsImUiLCJ0b1ByaW1pdGl2ZSIsImNhbGwiLCJUeXBlRXJyb3IiLCJTdHJpbmciLCJOdW1iZXIiLCJfZGVmaW5lUHJvcGVydHkiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwidHJ1RXEiLCJ2YWwxIiwidmFsMiIsImd0ZnNTdG9wTGF5ZXJzIiwidmVoaWNsZVJlbnRhbExheWVycyIsImxhYmVsSWRUb0dpZCIsImlkIiwicGFydHMiLCJzcGxpdCIsImxlbmd0aCIsImlzRHVwbGljYXRlIiwiaXRlbTEiLCJpdGVtMiIsInByb3BzMSIsInByb3BlcnRpZXMiLCJwcm9wczIiLCJ0eXBlIiwibzEiLCJvcmlnaW4iLCJkMSIsImRlc3RpbmF0aW9uIiwibzIiLCJkMiIsIm5hbWUiLCJsb2NhbGFkbWluIiwiaW5jbHVkZXMiLCJsYXllciIsImdpZCIsImxhYmVsSWQiLCJndGZzSWQiLCJwMSIsImdlb21ldHJ5IiwiY29vcmRpbmF0ZXMiLCJ1bmRlZmluZWQiLCJwMiIsIk1hdGgiLCJhYnMiLCJsYWJlbCIsImFkZHJlc3MiLCJub3JtYWxpemUiLCJzdHIiLCJpc1N0cmluZyIsInRvTG93ZXJDYXNlIiwic3BsaXRTaG9ydE5hbWVBdExldHRlcnMiLCJ0ZXN0U2hvcnROYW1lTWF0Y2hlc0xpbmVXaXRoTnVtYmVyc0FuZExldHRlcnMiLCJ0ZXN0IiwiTGF5ZXJUeXBlIiwiaXNTdG9wIiwiZ2V0TGF5ZXJSYW5rIiwic291cmNlIiwiaW5kZXhPZiIsInNvcnRTZWFyY2hSZXN1bHRzIiwibGluZVJlZ2V4cCIsInJlc3VsdHMiLCJ0ZXJtIiwiQXJyYXkiLCJpc0FycmF5IiwiaXNMaW5lSWRlbnRpZmllciIsIm5vcm1hbGl6ZWRUZXJtIiwiaXNMaW5lU2VhcmNoIiwib3JkZXJlZFJlc3VsdHMiLCJvcmRlckJ5IiwiZmlsdGVyIiwicmVzdWx0Iiwic2hvcnROYW1lIiwiY29uZmlkZW5jZSIsIm1hdGNoIiwicmVzdWx0UHJvcGVydGllcyIsIm1hcCIsImVsZW1lbnQiLCJub3JtYWxpemVkVmFsdWUiLCJyZWR1Y2UiLCJwcmV2aW91cyIsImN1cnJlbnQiLCJ1bmlxV2l0aCIsImdldFN0b3BOYW1lIiwic3RvcENvZGUiLCJsYXN0SW5kZXhPZiIsInN1YnN0cmluZyIsImZpbHRlck1hdGNoaW5nVG9JbnB1dCIsImxpc3QiLCJJbnB1dCIsImZpZWxkcyIsImlucHV0IiwidHJpbSIsIm11bHRpV29yZCIsIml0ZW0iLCJmb3JFYWNoIiwicE5hbWUiLCJnZXQiLCJzcGxpY2UiLCJqb2luIiwiY29uY2F0IiwicmVwbGFjZSIsInNlcmlhbGl6ZSIsIm9iaiIsInByZWZpeCIsImtleXMiLCJwIiwiayIsInYiLCJlbmNvZGVVUklDb21wb25lbnQiLCJheGlvcyIsInJlcXVpcmUiLCJkZWZhdWx0IiwiZ2V0SnNvbiIsInVybCIsInBhcmFtcyIsImVuY29kZVVSSSIsInNlYXJjaCIsInRpbWVvdXQiLCJtZXRob2QiLCJoZWFkZXJzIiwiQWNjZXB0IiwidGhlbiIsInJlcyIsImRhdGEiLCJnZXRHZW9jb2RpbmdSZXN1bHRzIiwic2VhcmNoU3RyaW5nIiwic2VhcmNoUGFyYW1zIiwibGFuZyIsImZvY3VzUG9pbnQiLCJzb3VyY2VzIiwicGVsaWFzVXJsIiwibWluaW1hbFJlZ2V4cCIsImdlb2NvZGluZ0xheWVycyIsInRleHQiLCJQcm9taXNlIiwicmVzb2x2ZSIsIlBFTElBU19VUkwiLCJvcHRzIiwiX29iamVjdFNwcmVhZCIsImxheWVycyIsInRvU3RyaW5nIiwiZmVhdHVyZXMiLCJnZXRTdG9wc0Zyb21HZW9jb2RpbmciLCJzdG9wcyIsIlVSTF9QRUxJQVNfUExBQ0UiLCJnaWRzIiwic3RvcFN0YXRpb25NYXAiLCJzdG9wIiwiY29kZSIsInN0b3BPclN0YXRpb24iLCJpZHMiLCJzbGljZSIsImFkZGVuZHVtIiwibGFzdFVwZGF0ZWQiLCJmYXZvdXJpdGVJZCIsImZpbHRlck9sZFNlYXJjaGVzIiwib2xkU2VhcmNoZXMiLCJkcm9wTGF5ZXJzIiwibWF0Y2hpbmdPbGRTZWFyY2hlcyIsInRha2UiLCJuZXdJdGVtIiwidGltZXRhYmxlQ2xpY2tlZCIsImFycm93Q2xpY2tlZCIsInJvdXRlTGF5ZXJzIiwibG9jYXRpb25MYXllcnMiLCJwYXJraW5nTGF5ZXJzIiwic3RvcExheWVycyIsImRlYm91bmNlZFNlYXJjaCIsImRlYm91bmNlIiwidGFyZ2V0cyIsInRyYW5zcG9ydE1vZGUiLCJzZWFyY2hDb250ZXh0IiwiZmlsdGVyUmVzdWx0cyIsImdlb2NvZGluZ1NpemUiLCJjYWxsYmFjayIsInBhdGhPcHRzIiwicmVmUG9pbnQiLCJnZXRQb3NpdGlvbnMiLCJnZXRGYXZvdXJpdGVMb2NhdGlvbnMiLCJnZXRPbGRTZWFyY2hlcyIsImdldEZhdm91cml0ZVN0b3BzIiwicGFya2luZ0FyZWFTb3VyY2VzIiwiZ2V0TGFuZ3VhZ2UiLCJnZXRTdG9wQW5kU3RhdGlvbnNRdWVyeSIsImdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uc1F1ZXJ5IiwiZ2V0RmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zIiwiZ2V0RmF2b3VyaXRlUm91dGVzUXVlcnkiLCJnZXRGYXZvdXJpdGVSb3V0ZXMiLCJnZXRSb3V0ZXNRdWVyeSIsImNvbnRleHQiLCJpc1BlbGlhc0xvY2F0aW9uQXdhcmUiLCJsb2NhdGlvbkF3YXJlIiwiVVJMX1BFTElBUyIsImZlZWRJRHMiLCJnZW9jb2RpbmdTZWFyY2hQYXJhbXMiLCJnZW9jb2RpbmdTb3VyY2VzIiwiZ2V0RnV0dXJlUm91dGVzIiwiY2l0eUJpa2VOZXR3b3JrcyIsImFsbFRhcmdldHMiLCJhbGxTb3VyY2VzIiwicG9zaXRpb24iLCJzZWFyY2hDb21wb25lbnRzIiwic2VhcmNoZXMiLCJsYW5ndWFnZSIsImxhdCIsImxvbiIsInRvRml4ZWQiLCJtb2RlIiwic3RhdHVzIiwicHVzaCIsImdldEN1cnJlbnRQb3NpdGlvbklmRW1wdHkiLCJzZWxlY3RQb3NpdGlvbkZvbU1hcCIsIml0ZW1zIiwiZmF2b3VyaXRlTG9jYXRpb25zIiwiZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zIiwiZmF2b3VyaXRlU3RvcHMiLCJoYXNGYXZvdXJpdGVzIiwic2VsZWN0RnJvbU93bkxvY2F0aW9ucyIsImZhdm91cml0ZXMiLCJmaWx0ZXJGYXZvdXJpdGVMb2NhdGlvbnMiLCJsb2NhdGlvbkhpc3RvcnkiLCJzaXplIiwiZmVlZElkcyIsImhpc3RvcnkiLCJ1c2VTdG9wcyIsInVzZVN0YXRpb25zIiwic3RvcHNBbmRTdGF0aW9ucyIsImV2ZXJ5Iiwic3RvcHNTdGF0aW9ucyIsInMiLCJmaWx0ZXJGYXZvdXJpdGVTdG9wcyIsImRlZHVwZXN0b3BzIiwiZmVlZHMiLCJzdG9wSGlzdG9yeSIsImZhdm91cml0ZVJvdXRlcyIsInJvdXRlSGlzdG9yeSIsImZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uIiwiYWxsIiwiZmxhdHRlbiIsImNhdGNoIiwiZXJyIiwiZXJyb3IiLCJsZWFkaW5nIiwiZ2V0TG9jYWxhZG1pbiIsInN1Z2dlc3Rpb24iLCJnZXRTdG9wQ29kZSIsImdldE5hbWVMYWJlbCIsIm1lbW9pemUiLCJwbGFpbiIsIlJlZ0V4cCIsImVzY2FwZVJlZ0V4cCIsImxvbmdOYW1lIiwiYWdlbmN5IiwiZm9ybWF0RmF2b3VyaXRlUGxhY2VMYWJlbCIsImNsb25lRGVlcCIsImkxOG4iLCJjcmVhdGVJbnN0YW5jZSIsImZhbGxiYWNrTG5nIiwicmVzb3VyY2VzIiwiZGUiLCJ0cmFuc2xhdGlvbiIsImFpcnBsYW5lIiwiYXJyaXZhbCIsImJhY2siLCJiaWtlcmVudGFsc3RhdGlvbiIsImJ1cyIsImNhbmNlbCIsImN1cnJlbnRwb3NpdGlvbiIsImRlbGV0ZSIsImRlcGFydHVyZSIsImZhdm91cml0ZSIsImZlcnJ5Iiwib3dubG9jYXRpb25zIiwibG9hZGluZyIsInJhaWwiLCJzdHJlZXQiLCJzdWJ3YXkiLCJzdGF0aW9uIiwidHJhbSIsInZlbnVlIiwid2hlcmUiLCJwbGFjZSIsImVuIiwiYmlrZXBhcmsiLCJjYXJwYXJrIiwicGxhdGZvcm0iLCJyZXF1aXJlZCIsInRyYWNrIiwiZmkiLCJ2ZWhpY2xlcmVudGFsc3RhdGlvbiIsInBsIiwic3YiLCJkZWZhdWx0TlMiLCJyZWFjdCIsInVzZVN1c3BlbnNlIiwic3R5bGVJbmplY3QiLCJjc3MiLCJyZWYiLCJpbnNlcnRBdCIsImRvY3VtZW50IiwiaGVhZCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwic3R5bGUiLCJjcmVhdGVFbGVtZW50IiwiZmlyc3RDaGlsZCIsImluc2VydEJlZm9yZSIsImFwcGVuZENoaWxkIiwic3R5bGVTaGVldCIsImNzc1RleHQiLCJjcmVhdGVUZXh0Tm9kZSIsImluaXQiLCJBdXRvc3VnZ2VzdFBhdGNoIiwiQXV0b3N1Z2dlc3QiLCJwcm9wcyIsInN1cGVyIiwic2VsZiIsInRoaXMiLCJvblN1Z2dlc3Rpb25Ub3VjaE1vdmUiLCJqdXN0U2VsZWN0ZWRTdWdnZXN0aW9uIiwicHJlc3NlZFN1Z2dlc3Rpb24iLCJNb2JpbGVTZWFyY2giLCJhcHBFbGVtZW50IiwiY2xvc2VIYW5kbGUiLCJjbGVhcklucHV0Iiwic3VnZ2VzdGlvbnMiLCJpbnB1dFByb3BzIiwiZmV0Y2hGdW5jdGlvbiIsInJlbmRlclN1Z2dlc3Rpb24iLCJnZXRTdWdnZXN0aW9uVmFsdWUiLCJhcmlhTGFiZWwiLCJvblN1Z2dlc3Rpb25TZWxlY3RlZCIsImNsZWFyT2xkU2VhcmNoZXMiLCJkaWFsb2dIZWFkZXJUZXh0IiwiZGlhbG9nUHJpbWFyeUJ1dHRvblRleHQiLCJkaWFsb2dTZWNvbmRhcnlCdXR0b25UZXh0IiwiY2xlYXJJbnB1dEJ1dHRvblRleHQiLCJmb2N1c0lucHV0IiwiY29sb3IiLCJob3ZlckNvbG9yIiwiYWNjZXNzaWJsZVByaW1hcnlDb2xvciIsInNlYXJjaE9wZW4iLCJmb250V2VpZ2h0cyIsInNob3dTY3JvbGwiLCJfaW5wdXRSZWYkY3VycmVudCIsInN0eWxlcyIsIm1vYmlsZVN0eWxlcyIsIm1vYmlsZU5vU2Nyb2xsU3R5bGVzIiwiaW5wdXRJZCIsImlzRGlhbG9nT3BlbiIsInNldERpYWxvZ09wZW4iLCJ1c2VTdGF0ZSIsImlucHV0UmVmIiwiUmVhY3QiLCJ1c2VSZWYiLCJ1c2VFZmZlY3QiLCJSZWFjdE1vZGFsIiwic2V0QXBwRWxlbWVudCIsIm9uQ2xvc2UiLCJ1c2VDYWxsYmFjayIsIm9uU2VsZWN0IiwiaXNLZXlib2FyZFNlbGVjdGlvbkV2ZW50IiwiZXZlbnQiLCJrZXkiLCJ3aGljaCIsImtleUNvZGUiLCJwcmV2ZW50RGVmYXVsdCIsImdldFZhbHVlIiwicmVuZGVySXRlbSIsImNsYXNzTmFtZSIsImZvY3VzIiwiaXNPcGVuIiwib3ZlcmxheUNsYXNzTmFtZSIsIm9uQWZ0ZXJDbG9zZSIsInNob3VsZENsb3NlT25Fc2MiLCJtZWRpdW0iLCJodG1sRm9yIiwib25DbGljayIsIm9uS2V5RG93biIsInRhYkluZGV4IiwiSWNvbiIsImltZyIsImFsd2F5c1JlbmRlclN1Z2dlc3Rpb25zIiwib25TdWdnZXN0aW9uc0ZldGNoUmVxdWVzdGVkIiwiZm9jdXNJbnB1dE9uU3VnZ2VzdGlvbkNsaWNrIiwic2hvdWxkUmVuZGVyU3VnZ2VzdGlvbnMiLCJoYXNWYWx1ZSIsImF1dG9Gb2N1cyIsInJlbmRlcklucHV0Q29tcG9uZW50IiwiRnJhZ21lbnQiLCJhc3NpZ24iLCJ0aGVtZSIsIkRpYWxvZ01vZGFsIiwiaXNNb2RhbE9wZW4iLCJoYW5kbGVDbG9zZSIsImhlYWRlclRleHQiLCJwcmltYXJ5QnV0dG9uVGV4dCIsInNlY29uZGFyeUJ1dHRvblRleHQiLCJwcmltYXJ5QnV0dG9uT25DbGljayIsInNlY29uZGFyeUJ1dHRvbk9uQ2xpY2siLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJzdHJpbmciLCJpc1JlcXVpcmVkIiwiZnVuYyIsImFycmF5T2YiLCJvYmplY3QiLCJzaGFwZSIsIm9uQ2hhbmdlIiwib25CbHVyIiwicGxhY2Vob2xkZXIiLCJib29sIiwibnVtYmVyIiwiZGVmYXVsdFByb3BzIiwibW9kdWxlIiwiZXhwb3J0cyIsInJlcXVpcmUkJDAiLCJuIiwiZyIsIndpbmRvdyIsImlnbm9yZSIsImhlYWRlciIsInRvcE9uRW1wdHlIYXNoIiwic3BlZWQiLCJzcGVlZEFzRHVyYXRpb24iLCJkdXJhdGlvbk1heCIsImR1cmF0aW9uTWluIiwiY2xpcCIsIm9mZnNldCIsImVhc2luZyIsImN1c3RvbUVhc2luZyIsInVwZGF0ZVVSTCIsInBvcHN0YXRlIiwiZW1pdEV2ZW50cyIsImFyZ3VtZW50cyIsImhhc093blByb3BlcnR5IiwiY2hhckF0Iiwic3Vic3RyIiwidSIsImNoYXJDb2RlQXQiLCJJbnZhbGlkQ2hhcmFjdGVyRXJyb3IiLCJtYXgiLCJib2R5Iiwic2Nyb2xsSGVpZ2h0IiwiZG9jdW1lbnRFbGVtZW50Iiwib2Zmc2V0SGVpZ2h0IiwiY2xpZW50SGVpZ2h0IiwicGFyc2VJbnQiLCJnZXRDb21wdXRlZFN0eWxlIiwiaGVpZ2h0Iiwib2Zmc2V0VG9wIiwiYWN0aXZlRWxlbWVudCIsInNldEF0dHJpYnV0ZSIsIm91dGxpbmUiLCJzY3JvbGxUbyIsIkN1c3RvbUV2ZW50IiwiYnViYmxlcyIsImRldGFpbCIsImFuY2hvciIsInRvZ2dsZSIsImRpc3BhdGNoRXZlbnQiLCJjIiwiYSIsImwiLCJmIiwiZCIsImNhbmNlbFNjcm9sbCIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwiYW5pbWF0ZVNjcm9sbCIsImgiLCJtIiwidGFnTmFtZSIsInkiLCJwYWdlWU9mZnNldCIsInF1ZXJ5U2VsZWN0b3IiLCJiIiwidyIsIkUiLCJPIiwib2Zmc2V0UGFyZW50IiwibWluIiwiaW5uZXJIZWlnaHQiLCJTIiwiXyIsIkkiLCJNIiwiTCIsImZsb29yIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwicHVzaFN0YXRlIiwic21vb3RoU2Nyb2xsIiwiSlNPTiIsInN0cmluZ2lmeSIsInRpdGxlIiwibWF0Y2hNZWRpYSIsIm1hdGNoZXMiLCJkZWZhdWx0UHJldmVudGVkIiwiYnV0dG9uIiwibWV0YUtleSIsImN0cmxLZXkiLCJzaGlmdEtleSIsInRhcmdldCIsImNsb3Nlc3QiLCJob3N0bmFtZSIsImxvY2F0aW9uIiwicGF0aG5hbWUiLCJocmVmIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiaGFzaCIsInJlcGxhY2VTdGF0ZSIsInN0YXRlIiwiZGVzdHJveSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJFbGVtZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsImFwcGx5IiwiX19jcmVhdGVCaW5kaW5nIiwiY3JlYXRlIiwiX19leHBvcnRTdGFyIiwidXNlQXJyb3dOYXZpZ2F0aW9uIiwibGlzdEl0ZW1zIiwib25BcnJvd1VwT3JEb3duIiwic2VsZWN0ZWRJbmRleCIsInVzZURlYm91bmNlIiwic2V0VGltZW91dCIsImNsZWFyVGltZW91dCIsInVzZUVsZW1lbnRTaXplIiwid2lkdGgiLCJjbGllbnRXaWR0aCIsInVzZUludGVyc2VjdGlvbk9ic2VydmVyIiwiaXNJbnRlcnNlY3RpbmciLCJJbnRlcnNlY3Rpb25PYnNlcnZlciIsIm9ic2VydmUiLCJ1bm9ic2VydmUiLCJjb250YWluZXJSZWYiLCJpc1Zpc2libGUiLCJ1c2VJc0JyZWFrcG9pbnQiLCJ4cyIsIm1vYmlsZVNtYWxsIiwibW9iaWxlIiwidGFibGV0IiwidGFibGV0TGFyZ2UiLCJkZXNrdG9wU21hbGwiLCJkZXNrdG9wIiwiZGVza3RvcExhcmdlIiwiaW5uZXJXaWR0aCIsInVzZU9uUmVzaXplIiwidXNlSXNMb2FkaW5nQWZ0ZXJFcnJvciIsInVzZUlzTW9iaWxlIiwidXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsInVzZU9uTG9zZUZvY3VzV2l0aGluIiwid2F0Y2giLCJwYXNzaXZlIiwidXNlT25XaW5kb3dGb2N1cyIsInZpc2liaWxpdHlTdGF0ZSIsInVzZU91dHNpZGVSZWFjdGVyIiwiY29udGFpbnMiLCJ1c2VSdW5BZnRlclVwZGF0ZSIsInVzZVNjcm9sbExvY2siLCJsb2NrIiwic2Nyb2xsWSIsInRvcCIsInVubG9jayIsIl9faW1wb3J0RGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJ1c2VTbW9vdGhTY3JvbGwiLCJnbG9iYWxUaGlzIiwiRnVuY3Rpb24iLCJTZXR0aW5ncyIsImRlZmF1bHRMb2NhbGUiLCJnZXRQbGF0Zm9ybSIsImxuZyIsIkdURlMiLCJtb2RlcyIsImdldFN1Z2dlc3Rpb25Db250ZW50Iiwic3VnZ2VzdGlvblR5cGUiLCJfaXRlbSRwcm9wZXJ0aWVzJGFkZGUiLCJ0YWlsMSIsImxvY2FsaXR5IiwidGFpbDIiLCJuYW1lMSIsIm5hbWUyIiwidHJhbnNsYXRlZFRleHQiLCJ0cmFuc2xhdGVGdXR1cmVSb3V0ZVN1Z2dlc3Rpb25UaW1lIiwidGltZSIsIkRhdGVUaW1lIiwiZnJvbVNlY29uZHMiLCJub3ciLCJhcnJpdmVCeSIsImhhc1NhbWUiLCJwbHVzIiwiZGF5cyIsInRvRm9ybWF0IiwiZ2V0TGFiZWwiLCJEVEF1dG9zdWdnZXN0IiwiQ29tcG9uZW50IiwibmV3VmFsdWUiLCJuZXdTdGF0ZSIsImZJbnB1dCIsInJlbmRlck1vYmlsZVNlYXJjaCIsImlzTW9iaWxlIiwiZWRpdGluZyIsInZhbGlkIiwidHlwaW5nVGltZXIiLCJ0aW1lciIsInNldFN0YXRlIiwidHlwaW5nIiwiY2xvc2VNb2JpbGVTZWFyY2giLCJvd25QbGFjZXMiLCJwZW5kaW5nU2VsZWN0aW9uIiwic3VnZ2VzdGlvbkluZGV4Iiwic2VsZWN0aW9uRG9uZSIsInN1Z2dlc3Rpb25WYWx1ZSIsImJsdXIiLCJoYW5kbGVWaWFQb2ludHMiLCJmb2N1c0NoYW5nZSIsImlzRW1iZWRkZWQiLCJwcmV2U3RhdGUiLCJjaGVja1BlbmRpbmdTZWxlY3Rpb24iLCJjbGVhbkV4ZWN1dGVkIiwidXNlQWxsIiwiaXNFbXB0eSIsImlzTG9jYXRpb25TZWFyY2giLCJuZXdUYXJnZXRzIiwiZXhlY3V0ZVNlYXJjaCIsInNlYXJjaFJlc3VsdCIsInRvVW5peEludGVnZXIiLCJ0cmFuc2xhdGVkIiwib25DbGVhciIsImlucHV0VmFsdWUiLCJjbGVhckxvY2F0aW9uVGV4dCIsInN0YXRlS2V5RG93biIsImF1dG9zdWdnZXN0Iiwic3RvcmVSZWYiLCJjb250ZW50IiwiU3VnZ2VzdGlvbkl0ZW0iLCJhcmlhRmF2b3VyaXRlU3RyaW5nIiwiZmlsbElucHV0IiwiZ2V0QXV0b1N1Z2dlc3RJY29ucyIsIm1vZGVJY29uQ29sb3JzIiwibW9kZVNldCIsIm9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZCIsImlucHV0Q2xpY2tlZCIsImZpcnN0U3VnZ2VzdGlvbiIsIlNldCIsImNsZWFyRnV0dXJlUm91dGVzIiwiZGVmYXVsdFpvbmUiLCJ0aW1lWm9uZSIsInNob3VsZENvbXBvbmVudFVwZGF0ZSIsIm5leHRQcm9wcyIsIm5leHRTdGF0ZSIsImlzRXF1YWwiLCJVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyIsInJlbmRlciIsInRyYW5zbGF0ZWRQbGFjZWhvbGRlciIsInRoaW4iLCJpbnB1dENsYXNzTmFtZSIsImtleURvd24iLCJhcmlhQmFySWQiLCJTZWFyY2hCYXJJZCIsImFyaWFSZXF1aXJlZFRleHQiLCJhcmlhTGFiZWxJbnN0cnVjdGlvbnMiLCJtb3ZpbmdUb0Rlc3RpbmF0aW9uRmllbGRUZXh0IiwiYXJpYUxhYmVsVGV4dCIsImFyaWFTdWdnZXN0aW9uTGVuIiwiY291bnQiLCJhcmlhQ3VycmVudFN1Z2dlc3Rpb24iLCJzdWdnZXN0aW9uQXNBcmlhQ29udGVudCIsInNlbGVjdGlvbiIsInJvbGUiLCJpc09yaWdpbkRlc3RpbmF0aW9uT3JWaWFwb2ludCIsIm1vYmlsZUxhYmVsIiwib25TZWxlY3RlZCIsImN4IiwiaWNvbiIsIm9uRm9jdXMiLCJoaWdobGlnaHRGaXJzdFN1Z2dlc3Rpb24iLCJjbGVhckJ1dHRvbiIsInN0b3JlSW5wdXRSZWZlcmVuY2UiLCJyb3V0ZXNQcmVmaXgiLCJzdG9wc1ByZWZpeCIsIm9iamVjdE9mIiwiRFRBdXRvc3VnZ2VzdFdpdGhTY3JvbGxMb2NrIiwid2l0aFRyYW5zbGF0aW9uIiwiaG9va3MiLCJJMThuZXh0UHJvdmlkZXIiXSwibWFwcGluZ3MiOiJ3NERBQUEsU0FBU0EsRUFBUUMsR0FHZixPQUFPRCxFQUFVLG1CQUFxQkUsUUFBVSxpQkFBbUJBLE9BQU9DLFNBQVcsU0FBVUYsR0FDN0YsY0FBY0EsQ0FDZixFQUFHLFNBQVVBLEdBQ1osT0FBT0EsR0FBSyxtQkFBcUJD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
|
|
1
|
+
!function(e,u){"object"==typeof exports&&"undefined"!=typeof module?u(exports,require("prop-types"),require("react"),require("react-i18next"),require("classnames"),require("lodash/debounce"),require("lodash/flatten"),require("lodash/take"),require("lodash/isString"),require("lodash/orderBy"),require("lodash/uniqWith"),require("lodash/get"),require("downshift"),require("@digitransit-component/digitransit-component-icon"),require("i18next"),require("lodash/isEqual"),require("lodash/memoize"),require("lodash/escapeRegExp"),require("lodash/cloneDeep"),require("luxon"),require("react-modal"),require("@digitransit-component/digitransit-component-dialog-modal"),require("@digitransit-component/digitransit-component-suggestion-item")):"function"==typeof define&&define.amd?define(["exports","prop-types","react","react-i18next","classnames","lodash/debounce","lodash/flatten","lodash/take","lodash/isString","lodash/orderBy","lodash/uniqWith","lodash/get","downshift","@digitransit-component/digitransit-component-icon","i18next","lodash/isEqual","lodash/memoize","lodash/escapeRegExp","lodash/cloneDeep","luxon","react-modal","@digitransit-component/digitransit-component-dialog-modal","@digitransit-component/digitransit-component-suggestion-item"],u):u((e="undefined"!=typeof globalThis?globalThis:e||self).DTAutosuggest={},e.PropTypes,e.React,e.reactI18next,e.cx,e.debounce,e.flatten,e.take,e.isString,e.orderBy,e.uniqWith,e.get,e.downshift,e.Icon,e.i18next,e.isEqual,e.memoize,e.escapeRegExp,e.cloneDeep,e.luxon,e.ReactModal,e.DialogModal,e.SuggestionItem)}(this,(function(e,u,t,n,o,r,i,a,s,l,c,D,d,p,g,f,h,F,b,C,E,m,A){"use strict";function y(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var _=y(u),v=y(t),B=y(o),S=y(r),k=y(i),w=y(a),x=y(s),O=y(l),j=y(c),M=y(D),P=y(p),R=y(h),I=y(F),L=y(b),N=y(E),q=y(m),z=y(A);function T(e){return T="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},T(e)}function H(e){var u=function(e,u){if("object"!=T(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,u||"default");if("object"!=T(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===u?String:Number)(e)}(e,"string");return"symbol"==T(u)?u:u+""}function U(e,u,t){return(u=H(u))in e?Object.defineProperty(e,u,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[u]=t,e}function V(e,u){return e&&u&&e===u}const G=["stop","station","favouriteStop","favouriteStation"],W=["favouriteVehicleRentalStation","bikestation"];function $(e){if(!e)return"";const u=e.split(":");return 0===u.length?"":`citybikes${u[0]}:bikestation:${u[1]}`}function Q(e,u){const t=e.properties,n=u.properties;if("FutureRoute"===e.type&&"FutureRoute"===u.type){const e=t.origin,u=t.destination,o=n.origin,r=n.destination;return`${e.name}//${e.localadmin}//${u.name}//${u.localadmin}`===`${o.name}//${o.localadmin}//${r.name}//${r.localadmin}`}if("FutureRoute"===e.type||"FutureRoute"===u.type)return!1;if(W.includes(t.layer)&&W.includes(n.layer)){return(t.gid||$(t.labelId))===(n.gid||$(n.labelId))}if(t.gtfsId&&n.gtfsId)return t.gtfsId===n.gtfsId;if(G.includes(t.layer)&&G.includes(n.layer)&&t.gid&&n.gid)return t.gid===n.gid;const o=e&&e.geometry?e.geometry.coordinates:void 0,r=u&&u.geometry?u.geometry.coordinates:void 0;return!!(o&&r&&Math.abs(o[0]-r[0])<1e-6&&Math.abs(o[1]-r[1])<1e-6&&(V(t.name,n.name)||V(t.label,n.label)||V(t.address,n.address)||V(t.address,n.label)||V(t.label,n.address)))}const K=e=>x.default(e)?e.toLowerCase():"",X=e=>e.split(/((?:[A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C8A\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CD\uA7D0\uA7D1\uA7D3\uA7D5-\uA7DC\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDDC0-\uDDF3\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD23\uDD4A-\uDD65\uDD6F-\uDD85\uDE80-\uDEA9\uDEB0\uDEB1\uDEC2-\uDEC4\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDF70-\uDF81\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE3F\uDE40\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61\uDF80-\uDF89\uDF8B\uDF8E\uDF90-\uDFB5\uDFB7\uDFD1\uDFD3]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCDF\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8\uDFC0-\uDFE0]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDF02\uDF04-\uDF10\uDF12-\uDF33\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD80E\uD80F\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883\uD885-\uD887][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2F\uDC41-\uDC46\uDC60-\uDFFF]|\uD810[\uDC00-\uDFFA]|\uD811[\uDC00-\uDE46]|\uD818[\uDD00-\uDD1D]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE70-\uDEBE\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDD40-\uDD6C\uDE40-\uDE7F\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDCFF-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD32\uDD50-\uDD52\uDD55\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD837[\uDF00-\uDF1E\uDF25-\uDF2A]|\uD838[\uDC30-\uDC6D\uDD00-\uDD2C\uDD37-\uDD3D\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB]|\uD839[\uDCD0-\uDCEB\uDDD0-\uDDED\uDDF0\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD4B]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF39\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0\uDFF0-\uDFFF]|\uD87B[\uDC00-\uDE5D]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A\uDF50-\uDFFF]|\uD888[\uDC00-\uDFAF])+)/),Z=e=>/^[0-9]+(?:[A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C8A\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CD\uA7D0\uA7D1\uA7D3\uA7D5-\uA7DC\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDDC0-\uDDF3\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD23\uDD4A-\uDD65\uDD6F-\uDD85\uDE80-\uDEA9\uDEB0\uDEB1\uDEC2-\uDEC4\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDF70-\uDF81\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE3F\uDE40\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61\uDF80-\uDF89\uDF8B\uDF8E\uDF90-\uDFB5\uDFB7\uDFD1\uDFD3]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCDF\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8\uDFC0-\uDFE0]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDF02\uDF04-\uDF10\uDF12-\uDF33\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD80E\uD80F\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883\uD885-\uD887][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2F\uDC41-\uDC46\uDC60-\uDFFF]|\uD810[\uDC00-\uDFFA]|\uD811[\uDC00-\uDE46]|\uD818[\uDD00-\uDD1D]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE70-\uDEBE\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDD40-\uDD6C\uDE40-\uDE7F\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDCFF-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD32\uDD50-\uDD52\uDD55\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD837[\uDF00-\uDF1E\uDF25-\uDF2A]|\uD838[\uDC30-\uDC6D\uDD00-\uDD2C\uDD37-\uDD3D\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB]|\uD839[\uDCD0-\uDCEB\uDDD0-\uDDED\uDDF0\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD4B]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF39\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0\uDFF0-\uDFFF]|\uD87B[\uDC00-\uDE5D]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A\uDF50-\uDFFF]|\uD888[\uDC00-\uDFAF])+$/.test(e),J="back",Y="currentPosition",ee="favouriteStop",ue="favouriteStation",te="favouritePlace",ne="favouriteRoute",oe="favouriteVehicleRentalStation",re="futureRoute",ie="station",ae="selectFromMap",se="ownLocations",le="stop",ce="bikestation",De="carpark",de="bikepark",pe=({layer:e,type:u})=>"stop"===e||"favouriteStop"===e||"stop"===u||"favouriteStop"===u,ge=(e,u)=>{switch(e){case Y:return 1;case J:return.9;case ae:return.8;case se:return.79;case ue:case te:case ee:case ne:case oe:return.45;case re:return.44;case ie:return x.default(u)&&0===u.indexOf("gtfs")?.43:.42;case De:case de:case ce:return.38;case le:return.36;default:return.41}},fe=(e,u,t="")=>{if(!Array.isArray(u)||!u.length)return u;const n=u=>x.default(u)&&e&&e.test(u),o=K(t),r=n(o),i=O.default(u.filter((e=>e)),[e=>r&&n(K(e.properties.shortName))&&0===K(e.properties.shortName).indexOf(o)?1:0,e=>{const{confidence:u,layer:t,source:n}=e.properties;if(0===o.length)return ge(t,n);if(!u)return ge(t,n)+((e,u)=>x.default(e)&&0!==e.length?["name","label","address","shortName"].map((e=>({name:e,value:u[e]}))).filter((e=>x.default(e.value)&&e.value.length>0)).map((u=>{let t=K(u.value);return 0===t.indexOf(e)?("shortName"===u.name&&Z(t)&&([t]=X(t)),.5+e.length/t.length):.5*e.length/(e.length+1)})).reduce(((e,u)=>u>e?u:e),0):0)(o,e.properties);switch(t){case ie:return u+(0===n.indexOf("gtfs")?.02:.01);case le:case De:case de:return u-.05;case ce:return u-.04;default:return u}},e=>{if(e.properties.shortName)return Z(e.properties.shortName)?X(e.properties.shortName)[0]:e.properties.shortName},e=>{if(e.properties.shortName)return Z(e.properties.shortName)?X(e.properties.shortName)[1]:e.properties.shortName},"properties.longName"],["desc","desc","asc","asc","asc"]);return j.default(i,Q)},he=(e,u)=>null!=u&&-1!==e.lastIndexOf(u)?e.substring(0,e.lastIndexOf(u)-1):e;function Fe(e,u,t){if("string"==typeof u&&u.length>0){const n=u.toLowerCase().trim(),o=n.includes(" ")||n.includes(",");return e.filter((e=>{let u=[];t.forEach((t=>{let n=M.default(e,t);o||"properties.label"!==t&&"address"!==t||!n||(n=n.split(","),n.length>2?n.splice(n.length-2,2):n.length>1&&n.splice(n.length-1,1),n=n.join(",")),n&&(u=o?u.concat(n.toLowerCase()):u.concat(n.toLowerCase().replace(/,/g," ").split(" ")))}));for(let e=0;e<u.length;e++)if(0===u[e].indexOf(n))return!0;return!1}))}return e}function be(e,u){return e?Object.keys(e).map((t=>{const n=u||t,o=e[t];return"object"==typeof o?be(o,n):`${encodeURIComponent(n)}=${encodeURIComponent(o)}`})).join("&"):""}const Ce=require("axios").default;function Ee(e,u){return Ce.get(encodeURI(e)+(u?(-1===e.search(/\?/)?"?":"&")+be(u):""),{timeout:1e4,method:"GET",headers:{Accept:"application/json"}}).then((e=>e.data))}function me(e,u){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);u&&(n=n.filter((function(u){return Object.getOwnPropertyDescriptor(e,u).enumerable}))),t.push.apply(t,n)}return t}function Ae(e){for(var u=1;u<arguments.length;u++){var t=null!=arguments[u]?arguments[u]:{};u%2?me(Object(t),!0).forEach((function(u){U(e,u,t[u])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):me(Object(t)).forEach((function(u){Object.defineProperty(e,u,Object.getOwnPropertyDescriptor(t,u))}))}return e}function ye(e,u,t,n,o,r,i,a){const s=e?e.trim():null;if(null==s||s.length<1||i&&!i.test(s))return Promise.resolve([]);const l=r||"https://api.digitransit.fi/geocoding/v1/search";let c=Ae(Ae(Ae({text:s},u),n),{},{lang:t});if(o&&(c=Ae(Ae({},c),{},{sources:o})),a){const e=a.toString();c=Ae(Ae({},c),{},{layers:e})}return Ee(l,c).then((e=>e.features))}function _e(e,u){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);u&&(n=n.filter((function(u){return Object.getOwnPropertyDescriptor(e,u).enumerable}))),t.push.apply(t,n)}return t}function ve(e){for(var u=1;u<arguments.length;u++){var t=null!=arguments[u]?arguments[u]:{};u%2?_e(Object(t),!0).forEach((function(u){U(e,u,t[u])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):_e(Object(t)).forEach((function(u){Object.defineProperty(e,u,Object.getOwnPropertyDescriptor(t,u))}))}return e}function Be(e,u){if(!e||e.length<1)return Promise.resolve([]);let t="";const n=e.map((e=>{const u="stop"===e.type?"stop":"station";let n=`gtfs${e.gtfsId.split(":")[0].toLowerCase()}:${u}:GTFS:${e.gtfsId}`;return e.code&&(n+=`#${e.code}`),t+=`${n},`,ve(ve({},e),{},{gid:n})})).reduce((function(e,u){return e[u.gid]=u,e}),{});return Ee(u,{ids:t.slice(0,-1)}).then((e=>e.features.map((e=>({type:"FavouriteStop",properties:{addendum:e.properties.addendum,gid:n[e.properties.gid].gid,code:n[e.properties.gid].code,gtfsId:n[e.properties.gid].gtfsId,lastUpdated:n[e.properties.gid].lastUpdated,favouriteId:n[e.properties.gid].favouriteId,address:e.properties.label,layer:pe(e.properties)?"favouriteStop":"favouriteStation"},geometry:e.geometry})))))}function Se(e,u,t){let n=Fe(e,u,["properties.name","properties.label","properties.address","properties.shortName","properties.longName"]);return t&&(n=n.filter((e=>!t.includes(e.properties.layer)))),Promise.resolve(w.default(n,10).map((e=>{const u=ve(ve({},e),{},{type:"OldSearch",timetableClicked:!1,arrowClicked:!1});return delete u.properties.confidence,u})))}const ke=["route-TRAM","route-BUS","route-RAIL","route-FERRY","route-SUBWAY","route-AIRPLANE","route-FUNICULAR"],we=["venue","address","street"],xe=["carpark","bikepark"],Oe=["stop","station"];const je=S.default((function(e,u,t,n,o,r,{input:i},a,s,l){const{getPositions:c,getFavouriteLocations:D,getOldSearches:d,getFavouriteStops:p,parkingAreaSources:g,getLanguage:f,getStopAndStationsQuery:h,getFavouriteVehicleRentalStationsQuery:F,getFavouriteVehicleRentalStations:b,getFavouriteRoutesQuery:C,getFavouriteRoutes:E,getRoutesQuery:m,context:A,isPeliasLocationAware:y,minimalRegexp:_,lineRegexp:v,URL_PELIAS:B,URL_PELIAS_PLACE:S,feedIDs:x,geocodingSearchParams:O,geocodingSources:j,getFutureRoutes:M,cityBikeNetworks:P}=n,R=!e||0===e.length,I=!u||0===u.length,L=c(A),N=[],q={type:"all",term:i,results:[]},z=f(A),T=y&&null!=l&&l.lat&&null!=l&&l.lon?{"focus.point.lat":l.lat.toFixed(3),"focus.point.lon":l.lon.toFixed(3)}:{},H=t?t.split("-")[1]:void 0;if(e.includes("CurrentPosition")&&"geolocation-not-supported"!==L.status&&N.push(function(e,u){return"string"!=typeof e||0===e.length?Promise.resolve([{type:"CurrentLocation",address:u.address,lat:u.lat,lon:u.lon,properties:{labelId:"use-own-position",layer:"currentPosition",address:u.address,lat:u.lat,lon:u.lon},geometry:{type:"Point",coordinates:[u.lon,u.lat]}}]):Promise.resolve([])}(i,L)),(R||e.includes("MapPosition"))&&N.push(function(e){return"string"!=typeof e||0===e.length?Promise.resolve([{type:"SelectFromMap",address:"SelectFromMap",lat:null,lon:null,properties:{labelId:"select-from-map",layer:"selectFromMap",address:"SelectFromMap",lat:null,lon:null},geometry:{type:"Point",coordinates:[]}}]):Promise.resolve([])}(i)),e.includes("FutureRoutes")){const e=M(A);N.push(w.default(e,3))}if(e.includes("SelectFromOwnLocations")&&function(e){const u=e.getFavouriteLocations(e.context);if((null==u?void 0:u.length)>0)return!0;const t=e.getFavouriteVehicleRentalStations(e.context);if((null==t?void 0:t.length)>0)return!0;const n=e.getFavouriteStops(e.context);return(null==n?void 0:n.length)>0}(n)&&N.push(function(e){return"string"!=typeof e||0===e.length?Promise.resolve([{type:"SelectFromOwnLocations",address:"SelectFromOwnLocations",lat:null,lon:null,properties:{labelId:"select-from-own-locations",layer:"ownLocations",address:"selectFromOwnLocations",lat:null,lon:null},geometry:{type:"Point",coordinates:[]}}]):Promise.resolve([])}(i)),R||e.includes("Locations")){const t=O;if(u.includes("Favourite")){const e=D(A);N.push(function(e,u){return Promise.resolve(Fe(e,u,["address","name"]).map((e=>({type:"FavouritePlace",properties:ve(ve({},e),{},{label:e.name,layer:"favouritePlace"}),geometry:{type:"Point",coordinates:[e.lon,e.lat]}}))))}(e,i)),u.includes("Back")&&N.push(Promise.resolve([{type:"back",address:"back",lat:null,lon:null,properties:{labelId:"back",layer:"back",address:"back",lat:null,lon:null},geometry:{type:"Point",coordinates:[]}}]))}if(I||u.includes("Datasource")){const u=["venue","address","street"];e.includes("Stations")&&u.push("station"),N.push(ye(i,t,z,T,j.join(","),B,_,u))}if(I||u.includes("History")){const e=d(A,"endpoint"),u=["bikestation"];u.push(...Oe),u.push(...ke),u.push(...xe),N.push(Se(e,i,u))}}if(R||e.includes("ParkingAreas")){if(I||u.includes("Datasource")){const e=O;r&&10!==r&&(e.size=r);const u=["carpark","bikepark"],t=g?g.join(","):null;N.push(ye(i,e,z,T,t,B,_,u).then((e=>o?o(e,H):e)))}if(I||u.includes("History")){const e=d(A),u=["bikestation"];u.push(...Oe),u.push(...ke),u.push(...we),N.push(Se(e,i,u))}}const U=e.includes("Stops"),V=e.includes("Stations");if(R||U||V){if(u.includes("Favourite")){const e=p(A);let u;u=e.every((e=>"station"===e.type))?Be(e,S).then((e=>o?o(e,H):e)):h(e).then((e=>Be(e,S))).then((e=>o?o(e,H):e)),N.push(function(e,u,t,n){return e.then((e=>Fe(e.filter((e=>"stop"===e.type?t:n)),u,["properties.name","properties.name","properties.address"])))}(u,i,U,V))}if(I||u.includes("Datasource")){const u=[];U&&u.push("stop"),V&&u.push("station");const t=r&&10!==r?{size:r}:{};O&&O["boundary.country"]&&(t["boundary.country"]=O["boundary.country"]),(R||e.includes("Locations"))&&(t.dedupestops=1);const n=x.map((e=>`gtfs${e}`)).join(",");N.push(ye(i,t,z,T,n,B,_,u).then((e=>o?o(e,H):e)))}if(I||u.includes("History")){const e=d(A).filter((e=>!e.properties.gid||e.properties.gid.includes("GTFS:"))),u=["bikestation"];u.push(...ke),u.push(...we),u.push(...xe),U||u.push("stop"),V||u.push("station"),t?N.push(Se(e,i,u).then((e=>o?o(e,H):e))):N.push(Se(e,i,u))}}if(R||e.includes("Routes")){if(u.includes("Favourite")){const e=E(A);N.push(C(e,i,H,s).then((e=>o?o(e,H,"Routes"):e)))}if(N.push(m(i,x,t,s).then((e=>o?o(e,H,"Routes"):e))),I||u.includes("History")){const e=d(A),u=["bikestation"];t&&u.push(...ke.filter((e=>!(e===t)))),u.push(...Oe),u.push(...we),u.push(...xe),N.push(Se(e,i,u).then((e=>o?o(e,H,"Routes"):e)))}}if(R||e.includes("VehicleRentalStations")){if(u.includes("Favourite")){const e=b(A);N.push(F(e,i))}if(I||u.includes("Datasource")){const e=["bikestation"],u=r&&10!==r?{size:r}:{};N.push(ye(i,u,z,T,P.join(","),B,_,e).then((e=>o?o(e,H,"VehicleRentalStations"):e)))}if(I||u.includes("History")){const e=d(A),u=[...Oe];u.push(...ke),u.push(...we),u.push(...xe),N.push(Se(e,i,u))}}Promise.all(N).then(k.default).then((e=>{q.results=e})).catch((e=>{q.error=e})).then((()=>{a(ve(ve({},q),{},{results:fe(v,q.results,i)}))}))}),300,{leading:!0}),Me=g.createInstance({fallbackLng:"fi",resources:{de:{translation:{address:"Adresse","address-place-or-business":"Adress, Ort or Geschäft","add-via-button-label":"Füge Zwischenziel hinzu","add-via-duration-button-label":"Set stop duration at via point {{index}}","add-via-duration-button-label-close":"Close stop duration selector at via point {{index}}","add-via-duration-button-label-open":"Open stop duration selector at via point {{index}}",airplane:"Flug",arrival:"Ankunft",back:"Zurück",bikerentalstation:"Leihrad-Station",bus:"Bus",cancel:"Abbrechen","clear-button-label":"Löschen","clear-search-history":"Suchhistorie löschen",currentposition:"Aktuelle Position",delete:"Löschen","delete-old-searches-header":"Wollen Sie die Such-Historie löschen?",departure:"Abfahrt",destination:"Ziel","give-origin":"Start eingeben.","give-destination":"Ziel eingeben.",favourite:"Favoriten",ferry:"Fähre","future-route":"Zukünftige Verbindung",origin:"Start","origin-stop-near-you":"Start",ownlocations:"Eigene Favoriten",loading:"Laden...","minute-short":"min",rail:"Zug",search:"Suche","search-address-or-place":"Suche anhand von Adresse oder Ortsangabe","search-button-label":"Suche","search-destination":"Suche Zielort, Linie or Haltestelle","search-destination-index":"Zielort eingeben","search-destination-results-but-no-search":"Ergebnisse in “Zielort”-Reiter anzeigen","search-no-results":"Kein Ort gefunden.","search-origin":"Suche Startort, Linie oder Haltestelle","search-origin-index":"Startort eingeben","search-position":"Standort ermitteln","search-autosuggest-label":"Venue, place and stopsearch.","search-autosuggest-label-instructions-desktop":"Navigate list with arrow keys and select with enter key.","search-autosuggest-label-instructions-mobile":"Enter the location and navigate in the list by swiping.","search-autosuggest-label-move-to-destination":"After selecting the starting location you are automatically moved to the destination field.","search-autosuggest-len":"There is {{count}} suggestion available","search-autosuggest-len_plural":"There are {{count}} suggestions available","search-current-suggestion":"Aktuelle Auswahl: {{selection}}",street:"Straße",subway:"U-Bahn",station:"Station",stop:"Haltestelle","stop-near-you":"Suche Haltestellen und Linien in der Nähe","stop-near-you-bus":"Suche Buslinien or Haltestellen","stop-near-you-citybike":"Suche Leihrad-Stationen","stop-near-you-rail":"Suche Zugverbindungen oder Bahnhöfe","stop-near-you-subway":"Suche U-Bahn-Linien oder Haltestellen","stop-near-you-tram":"Suche Stadtbahn-Haltestellen-Suche","today-at":"Heute um","tomorrow-at":"Morgen um",tram:"Straßenbahn","use-own-position":"Benutze aktuellen Standort","select-from-map":"Wähle Position anhand Karte","select-from-own-locations":"Aus eigenen Favoriten auswählen",venue:"Venue","via-point":"Zwischenziel",where:"Wohin?",place:"Ort"}},en:{translation:{address:"Address","address-place-or-business":"Address, place or business","add-via-button-label":"Add via point","add-via-duration-button-label":"Set stop duration at via point {{index}}","add-via-duration-button-label-close":"Close stop duration selector at via point {{index}}","add-via-duration-button-label-open":"Open stop duration selector at via point {{index}}",airplane:"Flight",arrival:"Arrival",back:"Back",bikepark:"Park & Ride for bikes",bikerentalstation:"Bike station",bus:"bus",cancel:"Cancel",carpark:"Park & Ride","clear-button-label":"Clear","clear-search-history":"Clear search history",currentposition:"Current position",delete:"Delete","delete-old-searches-header":"Do you want to clear the search history?",departure:"Departure",destination:"Destination","give-origin":"Enter your origin.","give-destination":"Enter your destination",favourite:"Favourite",ferry:"Ferry","future-route":"Future route",origin:"Start","origin-stop-near-you":"Start",ownlocations:"Own locations",loading:"Loading...","minute-short":"m",platform:"Platform",rail:"Train",required:"required field",search:"Search","search-address-or-place":"Search by address or place name","search-button-label":"Search","search-destination":"Search destination, route or stop","search-destination-index":"Enter destination","search-destination-results-but-no-search":"View results in the adjacent “Destination” tab","search-no-results":"No location","search-origin":"Search origin, route or stop","search-origin-index":"Enter origin","search-position":"Detect location","search-autosuggest-label":"Venue, place and stopsearch.","search-autosuggest-label-instructions-desktop":"Navigate list with arrow keys and select with enter key.","search-autosuggest-label-instructions-mobile":"Enter the location and navigate in the list by swiping.","search-autosuggest-label-move-to-destination":"After selecting the starting location you are automatically moved to the destination field.","search-autosuggest-len":"There is {{count}} suggestion available","search-autosuggest-len_plural":"There are {{count}} suggestions available","search-current-suggestion":"Current selection: {{selection}}",street:"Street",subway:"Metro",station:"Station",stop:"Stop","stop-near-you":"Search stops and routes","stop-near-you-airplane":"Search flights or airports","stop-near-you-bikepark":"Search bike parks","stop-near-you-bus":"Search bus routes or stops","stop-near-you-carpark":"Search car parks","stop-near-you-citybike":"Search city bike stations","stop-near-you-rail":"Search train routes or stations","stop-near-you-subway":"Search metro routes or stations ","stop-near-you-tram":"Search tram routes or stops","stop-route-station":"Bus and stop search","today-at":"today at","tomorrow-at":"tomorrow at",tram:"Tram",track:"Track","use-own-position":"Use current location","select-from-map":"Select position from map","select-from-own-locations":"Select from own locations",venue:"Venue","via-point":"Via point",where:"Where to?",place:"Location"}},fi:{translation:{address:"Osoite","address-place-or-business":"Osoite, paikka tai yritys","add-via-button-label":"Lisää välipiste","add-via-duration-button-label":"Aseta välipisteelle {{index}} pysähdyksen kesto","add-via-duration-button-label-close":"Avaa välipisteen {{index}} pysähdyksen kesto valitsin","add-via-duration-button-label-open":"Sulje välipisteen {{index}} pysähdyksen kesto valitsin",airplane:"Lentokone",arrival:"Perillä",back:"Takaisin",vehiclerentalstation:"Pyöräasema",bikepark:"Liityntäpysäköinti",bus:"bussi",cancel:"Peruuta",carpark:"Liityntäpysäköinti","clear-button-label":"Tyhjennä","clear-search-history":"Tyhjennä hakuhistoria",currentposition:"Tämänhetkinen sijainti",delete:"Poista","delete-old-searches-header":"Haluatko tyhjentää hakuhistorian?",departure:"Lähtöaika",destination:"Määränpää",favourite:"Suosikki",ferry:"Lautta","future-route":"Tuleva reitti","give-origin":"Lähtöpaikka","give-destination":"Määränpää",origin:"Lähtöpaikka","origin-stop-near-you":"Lähtöpaikka",ownlocations:"Omat paikat",loading:"Ladataan...","minute-short":"min",platform:"Laituri",rail:"Juna",required:"pakollinen kenttä",search:"Etsi","search-address-or-place":"Hae osoitteella tai paikan nimellä","search-button-label":"Hae","search-destination":"Hae määränpäätä, linjaa tai pysäkkiä","search-destination-index":"Syötä määränpää","search-destination-results-but-no-search":"Katso tulokset viereiseltä Määränpää-välilehdeltä","search-no-results":"Ei tuloksia","search-origin":"Hae lähtöpaikkaa, linjaa tai pysäkkiä","search-origin-index":"Syötä lähtöpaikka","search-autosuggest-label":"Paikka, linja ja pysäkkihaku.","search-autosuggest-label-instructions-desktop":"Navigoi listassa nuolinäppäimillä ja valitse enterillä.","search-autosuggest-label-instructions-mobile":"Syötä sijainti ja navigoi listassa pyyhkäisemällä.","search-autosuggest-label-move-to-destination":"Valittuasi lähtöpaikan siirrytään suoraan määränpää-kenttään.","search-autosuggest-len":" Löydettiin {{count}} ehdotus","search-autosuggest-len_plural":" Löydettiin {{count}} ehdotusta","search-current-suggestion":"Tämänhetkinen valinta: {{selection}}","search-position":"Paikanna",street:"Katu",subway:"Metro",station:"Asema",stop:"Pysäkki","stop-near-you":"Linja, pysäkki tai asema","stop-near-you-airplane":"Hae lentoja tai lentoasemaa","stop-near-you-bikepark":"Hae pyöräparkkia","stop-near-you-bus":"Hae bussilinjaa tai pysäkkiä","stop-near-you-carpark":"Hae autoparkkia","stop-near-you-citybike":"Hae kaupunkipyöräasemaa","stop-near-you-rail":"Hae lähijunaa tai asemaa","stop-near-you-subway":"Hae metrolinjaa tai asemaa","stop-near-you-tram":"Hae raitiolinjaa tai pysäkkiä","stop-route-station":"Linja- ja pysäkkihaku","today-at":"tänään klo","tomorrow-at":"huomenna klo",tram:"Raitiovaunu",track:"Raide","use-own-position":"Käytä nykyistä sijaintia","select-from-map":"Valitse sijainti kartalta","select-from-own-locations":"Valitse omista paikoista",venue:"Paikka","via-point":"Välipiste",where:"Minne mennään?",place:"Paikka"}},pl:{translation:{address:"Adres","address-place-or-business":"Adres, miejsce lub firma","add-via-button-label":"Dodaj punkt pośredni","add-via-duration-button-label":"Wybierz czas postoju dla punktu {{index}}","add-via-duration-button-label-close":"Zamknij wybornik czasu postoju w punkcie {{index}}","add-via-duration-button-label-open":"Otwórz wybornik czasu postoju w punkcie {{index}}",airplane:"Lot",arrival:"Przyjazd",back:"Wróć",bikepark:"Parkuj i Jedź dla rowerów",bikerentalstation:"Stacja rowerowa",bus:"autobus",cancel:"Anuluj",carpark:"Parkuj i Jedź","clear-button-label":"Wyczyść","clear-search-history":"Wyczyść historię wyszukiwania",currentposition:"Obecne położenie",delete:"Usuń","delete-old-searches-header":"Czy na pewno chcesz wyczyścić historię wyszukiwania?",departure:"Odjazd",destination:"Cel","give-origin":"Wprowadź swój punkt początkowy.","give-destination":"Wprowadź swój cel",favourite:"Ulubione",ferry:"Prom","future-route":"Przyszła trasa",origin:"Początek","origin-stop-near-you":"Początek",ownlocations:"Własne miejsca",loading:"Ładowanie…","minute-short":"min.",platform:"Peron",rail:"Pociąg",required:"wymagane pole",search:"Szukaj","search-address-or-place":"Szukaj po adresie lub nazwie miejsca","search-button-label":"Szukaj","search-destination":"Szukaj celu, trasy lub przystanku","search-destination-index":"Wprowadź punkt docelowy","search-destination-results-but-no-search":"Wyświetl wyniki w sąsiedniej karcie „Cel”","search-no-results":"Brak lokalizacji","search-origin":"Wyszukaj początek, koniec lub punkt pośredni","search-origin-index":"Wprowadź punkt początkowy","search-position":"Wykryj lokalizację","search-autosuggest-label":"Miejsce, lokalizacja i przystanek.","search-autosuggest-label-instructions-desktop":"Nawiguj po liście używając strzałek i wybieraj klawiszem Enter.","search-autosuggest-label-instructions-mobile":"Wprowadź lokalizację i nawiguj po liście gestami przesuwania.","search-autosuggest-label-move-to-destination":"Po wybraniu lokalizacji początkowej, automatycznie przejdziesz do pola miejsca docelowego.","search-autosuggest-len":"Dostępna jest {{count}} propozycja","search-autosuggest-len_few":"Dostępne są {{count}} propozycje","search-autosuggest-len_other":"Dostępne jest {{count}} propozycji","search-current-suggestion":"Obecny wybór: {{selection}}",street:"Ulica",subway:"Metro",station:"Stacja",stop:"Przystanek","stop-near-you":"Szukaj przystanków i tras","stop-near-you-airplane":"Szukaj lotów i lotnisk","stop-near-you-bus":"Szukaj tras autobusowych i przystanków","stop-near-you-citybike":"Szukaj stacji rowerów miejskich","stop-near-you-rail":"Szukaj tras kolejowych i przystanków","stop-near-you-subway":"Szukaj tras metra i przystanków ","stop-near-you-tram":"Szukaj tras tramwajowych i przystanków","stop-route-station":"Wyszukiwanie autobusów i przystanków","today-at":"dziś o","tomorrow-at":"jutro o",tram:"Tramwaj",track:"Tor","use-own-position":"Użyj obecnej lokalizacji","select-from-map":"Wybierz miejsce na mapie","select-from-own-locations":"Wybierz z własnych miejsc",venue:"Miejsce","via-point":"Przez punkt",where:"Dokąd?",place:"Miejsce"}},sv:{translation:{address:"Adress","address-place-or-business":"Adress, plats eller företag","add-via-button-label":"Lägg till viapunkt","add-via-duration-button-label":"Ställ in varaktighet för viapunkten {{index}}","add-via-duration-button-label-close":"Stäng väljaren för varaktighet vid via-punkten {{index}}","add-via-duration-button-label-open":"Öppna väljaren för varaktighet vid via-punkten {{index}}",airplane:"Flyg",arrival:"Anländer",back:"Tillbaka",bikerentalstation:"Stadscykelstation",bikepark:"Anslutningsparkering för cyklar",bus:"Bussi",cancel:"Avbryt",carpark:"Infartsparkering","clear-button-label":"Töm","clear-search-history":"Töm sökhistoriken",currentposition:"Nuvarande position",delete:"Ta bort","delete-old-searches-header":"Vill du tömma sökhistoriken?",departure:"Avgångstid",destination:"Destination",favourite:"Favorit",ferry:"Färja","future-route":"Framtida rutt","give-destination":"Skriv in din destination","give-origin":"Skriv in din avfärdsplats",origin:"Avfärdsplats","origin-stop-near-you":"Avfärdsplats",ownlocations:"Egna platser",loading:"Laddar...","minute-short":"min",platform:"Plattform",rail:"Tåg",required:"obligatoriskt fält",search:"Sök","search-address-or-place":"Sök med adressen eller platsens namn","search-button-label":"Sök","search-destination":"Sök destination, linje eller hållplats","search-destination-index":"Skriv destination","search-destination-results-but-no-search":"Se resultaten under fliken Destination","search-no-results":"Inga sökresultat","search-origin":"Sök avfärdsplats, linje eller hållplats","search-origin-index":"Skriv avfärdsplats","search-position":"Sök position","search-autosuggest-label":"Plats, linje och hållplatssökning.","search-autosuggest-label-instructions-desktop":"Navigera listan med piltangenterna och välj med Enter-tangeten.","search-autosuggest-label-instructions-mobile":"Ange platsen och navigera i listan genom att svepa.","search-autosuggest-label-move-to-destination":"Efter att du valt avgångsplatsen tas du direkt till Destination-fältet.","search-autosuggest-len":"Hittade {{count}} förslag","search-current-suggestion":"Nuvarande val: {{selection}}",street:"Gata",subway:"Metro",station:"Station",stop:"Hållplats","stop-near-you":"Sök hållplatser eller linjer","stop-near-you-airplane":"Sök flyg eller flygplatser","stop-near-you-bikepark":"Sök cykelparkering","stop-near-you-bus":"Sök busslinjer eller hållplatser","stop-near-you-carpark":"Sök anslutningsparkering","stop-near-you-citybike":"Sök stadscykelstationer","stop-near-you-rail":"Sök närtåger eller stationer","stop-near-you-subway":"Sök metrolinjer eller stationer","stop-near-you-tram":"Sök spårvagnlinjer eller hållplatser","stop-route-station":"Buss och stopp sökningen","today-at":"i dag kl","tomorrow-at":"i morgon",tram:"Spårvagn",track:"Spår","use-own-position":"Använd min position","select-from-map":"Välj position från kartan","select-from-own-locations":"Välj från egna platser",venue:"Mötesplats","via-point":"Via punkt",where:"Vart vill du åka?",place:"Plats"}}},defaultNS:"translation",react:{useSuspense:!0}});function Pe(e,u){void 0===u&&(u={});var t=u.insertAt;if(e&&"undefined"!=typeof document){var n=document.head||document.getElementsByTagName("head")[0],o=document.createElement("style");o.type="text/css","top"===t&&n.firstChild?n.insertBefore(o,n.firstChild):n.appendChild(o),o.styleSheet?o.styleSheet.cssText=e:o.appendChild(document.createTextNode(e))}}Me.init();var Re={container:"styles_container__CyBuz",input:"styles_input__x7Oye",favourite:"styles_favourite__xn1Du",thin:"styles_thin__ToA7-",hasValue:"styles_hasValue__qkIFF",suggestionsContainerOpen:"styles_suggestionsContainerOpen__1odqA",suggestionsContainer:"styles_suggestionsContainer__-FUbj",suggestionsList:"styles_suggestionsList__e-mac",suggestion:"styles_suggestion__oCpdb",suggestionHighlighted:"styles_suggestionHighlighted__vdJIb","autosuggest-input-container":"styles_autosuggest-input-container__C4ks3",origin:"styles_origin__J6GD2",destination:"styles_destination__yOA4k","stop-route-station":"styles_stop-route-station__ofvbR","autosuggest-input-icon":"styles_autosuggest-input-icon__-XA83","origin-stop-near-you":"styles_origin-stop-near-you__Vq9IO","clear-input":"styles_clear-input__KFeWb","sr-only":"styles_sr-only__FIitE"};Pe("input[type='text'] {\n margin: 0; }\n\n.styles_container__CyBuz {\n display: flex;\n width: 100%; }\n .styles_container__CyBuz .styles_input__x7Oye {\n font-size: 16px;\n font-family: 'Gotham Rounded A', 'Gotham Rounded B', Roboto, Arial, Georgia, serif;\n display: flex;\n width: 100%;\n height: 44px;\n border-radius: 5px;\n border: solid 1px #888;\n background-color: #fff;\n padding-left: 50px;\n padding-right: 44px;\n line-height: 1.2;\n letter-spacing: -0.5px;\n color: #333;\n box-sizing: border-box;\n -webkit-appearance: none;\n appearance: none; }\n .styles_container__CyBuz .styles_input__x7Oye.styles_favourite__xn1Du {\n padding-left: 47px; }\n .styles_container__CyBuz .styles_input__x7Oye.styles_thin__ToA7- {\n height: 34px; }\n .styles_container__CyBuz .styles_input__x7Oye:focus {\n background: #fff;\n outline: none;\n border: solid 1px var(--color);\n box-shadow: 0 0 2px 1px var(--hover-color); }\n @media screen and (min-width: 768px) {\n .styles_container__CyBuz .styles_input__x7Oye {\n font-size: 15px;\n height: 44px;\n padding-left: 49px; } }\n .styles_container__CyBuz .styles_input__x7Oye::placeholder {\n color: #666;\n opacity: 1;\n font-size: 15px; }\n\n.styles_hasValue__qkIFF {\n color: #333; }\n\n.styles_suggestionsContainerOpen__1odqA {\n width: 100%;\n max-height: 44vh;\n border-radius: 5px;\n box-shadow: 0 2px 0 0 rgba(0, 0, 0, 0.06);\n border: solid 1px rgba(0, 0, 0, 0.1);\n overflow-x: hidden;\n overflow-y: scroll;\n position: absolute;\n background-color: white;\n top: calc(3 * 0.875rem + 9px);\n z-index: 20; }\n\n.styles_suggestionsContainer__-FUbj {\n background-color: white;\n z-index: 20; }\n .styles_suggestionsContainer__-FUbj .styles_suggestionsList__e-mac {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n background: white; }\n .styles_suggestionsContainer__-FUbj .styles_suggestionsList__e-mac li:hover {\n background: #f2f5f7; }\n\n.styles_suggestion__oCpdb {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n cursor: pointer;\n list-style: none;\n display: block;\n overflow-x: hidden;\n overflow-y: hidden;\n white-space: nowrap;\n z-index: 20; }\n\n.styles_suggestionHighlighted__vdJIb {\n background-color: #f2f5f7; }\n\n.styles_autosuggest-input-container__C4ks3 {\n position: relative;\n width: 100%; }\n .styles_autosuggest-input-container__C4ks3.styles_origin__J6GD2 {\n z-index: 16; }\n .styles_autosuggest-input-container__C4ks3.styles_destination__yOA4k {\n z-index: 10; }\n .styles_autosuggest-input-container__C4ks3.styles_stop-route-station__ofvbR {\n z-index: 9; }\n\n.styles_autosuggest-input-icon__-XA83 {\n display: flex;\n position: absolute;\n align-items: center;\n width: 16px;\n height: 100%;\n margin-top: 0;\n margin-left: 19px; }\n .styles_autosuggest-input-icon__-XA83 svg {\n width: 16px;\n height: 24px; }\n .styles_autosuggest-input-icon__-XA83.styles_origin__J6GD2 svg {\n fill: #4ea700;\n width: 16px;\n height: 24px; }\n .styles_autosuggest-input-icon__-XA83.styles_destination__yOA4k svg {\n fill: #ec5188;\n width: 16px;\n height: 24px; }\n .styles_autosuggest-input-icon__-XA83.styles_stop-route-station__ofvbR svg, .styles_autosuggest-input-icon__-XA83.styles_favourite__xn1Du svg {\n fill: #888;\n width: 16px;\n height: 16px; }\n .styles_autosuggest-input-icon__-XA83.styles_origin-stop-near-you__Vq9IO svg {\n fill: #888;\n width: 16px;\n height: 16px; }\n\nbutton.styles_clear-input__KFeWb {\n display: flex;\n position: absolute;\n padding: 14px 0;\n right: 0;\n width: 44px;\n height: 100%;\n color: var(--color);\n outline: none;\n border: 0;\n margin: 0;\n justify-content: center;\n text-align: left;\n background: none;\n border-style: none;\n border-width: 0;\n cursor: pointer;\n font-family: inherit;\n background-color: transparent;\n transition: none; }\n button.styles_clear-input__KFeWb svg {\n fill: var(--color);\n width: 16px;\n height: 16px; }\n button.styles_clear-input__KFeWb:focus {\n background-color: transparent;\n color: inherit;\n /* First apply outline that is used in Edge and Firefox */\n /* Then override outline for webkit browsers like Chrome, this has no effect on other browsers */\n outline: 5px auto -webkit-focus-ring-color; }\n button.styles_clear-input__KFeWb:active {\n background-color: transparent;\n color: inherit; }\n button.styles_clear-input__KFeWb:hover {\n background-color: transparent;\n color: inherit; }\n\n.styles_sr-only__FIitE:not(:focus, :active) {\n clip: rect(0 0 0 0);\n -webkit-clip-path: inset(50%);\n clip-path: inset(50%);\n height: 1px;\n overflow: hidden;\n position: absolute;\n white-space: nowrap;\n width: 1px; }\n");const Ie=e=>e.localadmin||e.localadmin||e.address&&e.address.lastIndexOf(",")<e.address.length-2&&e.address.substring(e.address.lastIndexOf(",")+2)||"",Le=({id:e,code:u})=>u||(void 0!==e&&void 0!==e.indexOf&&-1!==e.indexOf("#")?e.substring(e.indexOf("#")+1):void 0),Ne=R.default(((e,u=!1)=>{switch(e.layer){case"currentPosition":return[e.labelId,e.address];case"selectFromMap":case"ownLocations":case"back":return[e.labelId];case"favouritePlace":return t=e.name,n=e.address,[t||n&&n.split(",")[0],"string"==typeof n?n.replace(new RegExp(`${I.default(t)}([ ,]|$)+`),""):""];case"favouriteVehicleRentalStation":case"bikestation":return[e.name];case"favouriteRoute":case"route-BUS":case"route-TRAM":case"route-RAIL":case"route-SUBWAY":case"route-FERRY":case"route-FUNICULAR":case"route-AIRPLANE":return!u&&e.shortName?[e.gtfsId,e.mode.toLowerCase(),e.longName]:[e.shortName,e.longName,e.agency?e.agency.name:void 0];case"venue":case"address":case"street":return[e.name,e.label.replace(new RegExp(`${I.default(e.name)}(,)?( )?`),"")];case"favouriteStop":case"stop":return u?[e.name||e.label||e.address&&e.address.split(",")[0],Ie(e)]:[e.name,e.id,Le(e),Ie(e)];default:return[e.name||e.label||e.address&&e.address.split(",")[0],Ie(e)]}var t,n}),((e,u)=>{const t=L.default(e);return t.plain=u,t}));const qe=e=>{const u=e&&(e.key||e.which||e.keyCode)||"";return!(!u||![13," ","Spacebar"].concat([32,"Enter"]).includes(u))&&(e.preventDefault(),!0)},ze=e=>"origin"===e||"destination"===e||"via-point"===e||"origin-stop-near-you"===e,Te=(e,u,t)=>{if(!t)return;if(!e||!e.GTFS.platform)return;const{modes:n,platform:o}=e.GTFS;return[n&&"RAIL"===n[0]?t("track",{lng:u}):t("platform",{lng:u}),o]};function He(e,u,t){if(!t)return;if("FutureRoute"!==e.type){if("SelectFromMap"===e.type)return["",t("select-from-map",{lng:u})];if("CurrentLocation"===e.type)return["",t("use-own-position",{lng:u})];if("SelectFromOwnLocations"===e.type)return["",t("select-from-own-locations",{lng:u})];let o,[r,i]=Ne(e.properties,!0);if(e.properties.layer.toLowerCase().includes("bikerental")||e.properties.layer.toLowerCase().includes("bikestation")){o=t("vehiclerentalstation",{lng:u});return[o,r,void 0,e.properties.labelId]}if("bikepark"===e.properties.layer)return o=t("bikepark",{lng:u}),[o,r,void 0,void 0];if("carpark"===e.properties.layer)return o=t("carpark",{lng:u}),[o,r,void 0,void 0];if(e.properties.mode)o=t(e.properties.mode.toLowerCase().replace("favourite",""),{lng:u});else{o=t(e.properties.layer.replace("route-","").toLowerCase().replace("favourite",""),{lng:u})}if(e.properties.id&&("stop"===e.properties.layer||"station"===e.properties.layer)){var n;const a=Le(e.properties),s=null===(n=e.properties.addendum)||void 0===n?void 0:n.GTFS.modes,l=Te(e.properties.addendum,u,t);return[o,he(r,a),i,a,s,l]}if("favouriteStop"===e.properties.layer||"favouriteStation"===e.properties.layer){const{address:t,code:n}=e.properties;return[o,t?he(t.split(",")[0],n):r,i,n,void 0,Te(e.properties.addendum,u)]}return[o,r,i]}const{origin:o,destination:r}=e.properties,i=o.locality?`, ${o.locality} foobar`:"",a=r.locality?`, ${r.locality}`:"",s=o.name,l=r.name;return[t("future-route",{lng:u}),`${t("origin",{lng:u})} ${s}${i} ${t("destination",{lng:u})} ${l}${a}`,e.translatedText]}function Ue(e,u,t){if(!t)return;const n=C.DateTime.fromSeconds(Number(e.properties.time)),o=C.DateTime.now();let r=e.properties.arriveBy?t("arrival",{lng:u}):t("departure",{lng:u});return r=n.hasSame(o,"day")?`${r} ${t("today-at")}`:n.hasSame(o.plus({days:1}),"day")?`${r} ${t("tomorrow-at",{lng:u})}`:`${r} ${n.toFormat("ccc d.L.")}`,r=`${r} ${n.toFormat("HH:mm")}`,r}const Ve=e=>"SelectFromOwnLocations"===e.type||"back"===e.type?"":function(e){const u=Ne(e,!0);switch(e.layer){case"selectFromMap":case"currentPosition":case"ownLocations":case"back":return u[1]||u[0];case"favouriteVehicleRentalStation":case"favouritePlace":return u[0];default:return u.length>1&&""!==u[1]?u.join(", "):u[1]||u[0]}}(e.properties),Ge=({suggestions:e,t:u,lng:t})=>{let n=[];const o=e[0];return o&&(o.type&&o.type.includes("Favourite")&&n.push(u("favourite",{lng:t})),n=n.concat(He(e[0],t))),[...new Set(n)].join(" - ")};function We(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var $e,Qe={exports:{}};
|
|
2
|
+
/*! For license information please see index.js.LICENSE.txt */var Ke=($e||($e=1,function(e){var u;"undefined"!=typeof self&&self,e.exports=(u=v.default,function(){var e={888:function(e,u,t){var n,o;o=void 0!==t.g?t.g:"undefined"!=typeof window?window:this,n=function(){return function(e){var u={ignore:"[data-scroll-ignore]",header:null,topOnEmptyHash:!0,speed:500,speedAsDuration:!1,durationMax:null,durationMin:null,clip:!0,offset:0,easing:"easeInOutCubic",customEasing:null,updateURL:!0,popstate:!0,emitEvents:!0},t=function(){var e={};return Array.prototype.forEach.call(arguments,(function(u){for(var t in u){if(!u.hasOwnProperty(t))return;e[t]=u[t]}})),e},n=function(e){"#"===e.charAt(0)&&(e=e.substr(1));for(var u,t=String(e),n=t.length,o=-1,r="",i=t.charCodeAt(0);++o<n;){if(0===(u=t.charCodeAt(o)))throw new InvalidCharacterError("Invalid character: the input contains U+0000.");r+=u>=1&&u<=31||127==u||0===o&&u>=48&&u<=57||1===o&&u>=48&&u<=57&&45===i?"\\"+u.toString(16)+" ":u>=128||45===u||95===u||u>=48&&u<=57||u>=65&&u<=90||u>=97&&u<=122?t.charAt(o):"\\"+t.charAt(o)}return"#"+r},o=function(){return Math.max(document.body.scrollHeight,document.documentElement.scrollHeight,document.body.offsetHeight,document.documentElement.offsetHeight,document.body.clientHeight,document.documentElement.clientHeight)},r=function(u){return u?(t=u,parseInt(e.getComputedStyle(t).height,10)+u.offsetTop):0;var t},i=function(u,t,n){0===u&&document.body.focus(),n||(u.focus(),document.activeElement!==u&&(u.setAttribute("tabindex","-1"),u.focus(),u.style.outline="none"),e.scrollTo(0,t))},a=function(u,t,n,o){if(t.emitEvents&&"function"==typeof e.CustomEvent){var r=new CustomEvent(u,{bubbles:!0,detail:{anchor:n,toggle:o}});document.dispatchEvent(r)}};return function(s,l){var c,D,d,p,g={cancelScroll:function(e){cancelAnimationFrame(p),p=null,e||a("scrollCancel",c)},animateScroll:function(n,s,l){g.cancelScroll();var D=t(c||u,l||{}),f="[object Number]"===Object.prototype.toString.call(n),h=f||!n.tagName?null:n;if(f||h){var F=e.pageYOffset;D.header&&!d&&(d=document.querySelector(D.header));var b,C,E,m=r(d),A=f?n:function(u,t,n,r){var i=0;if(u.offsetParent)do{i+=u.offsetTop,u=u.offsetParent}while(u);return i=Math.max(i-t-n,0),r&&(i=Math.min(i,o()-e.innerHeight)),i}(h,m,parseInt("function"==typeof D.offset?D.offset(n,s):D.offset,10),D.clip),y=A-F,_=o(),v=0,B=function(e,u){var t=u.speedAsDuration?u.speed:Math.abs(e/1e3*u.speed);return u.durationMax&&t>u.durationMax?u.durationMax:u.durationMin&&t<u.durationMin?u.durationMin:parseInt(t,10)}(y,D),S=function(u){b||(b=u),v+=u-b,E=F+y*function(e,u){var t;return"easeInQuad"===e.easing&&(t=u*u),"easeOutQuad"===e.easing&&(t=u*(2-u)),"easeInOutQuad"===e.easing&&(t=u<.5?2*u*u:(4-2*u)*u-1),"easeInCubic"===e.easing&&(t=u*u*u),"easeOutCubic"===e.easing&&(t=--u*u*u+1),"easeInOutCubic"===e.easing&&(t=u<.5?4*u*u*u:(u-1)*(2*u-2)*(2*u-2)+1),"easeInQuart"===e.easing&&(t=u*u*u*u),"easeOutQuart"===e.easing&&(t=1- --u*u*u*u),"easeInOutQuart"===e.easing&&(t=u<.5?8*u*u*u*u:1-8*--u*u*u*u),"easeInQuint"===e.easing&&(t=u*u*u*u*u),"easeOutQuint"===e.easing&&(t=1+--u*u*u*u*u),"easeInOutQuint"===e.easing&&(t=u<.5?16*u*u*u*u*u:1+16*--u*u*u*u*u),e.customEasing&&(t=e.customEasing(u)),t||u}(D,C=(C=0===B?0:v/B)>1?1:C),e.scrollTo(0,Math.floor(E)),function(u,t){var o=e.pageYOffset;if(u==t||o==t||(F<t&&e.innerHeight+o)>=_)return g.cancelScroll(!0),i(n,t,f),a("scrollStop",D,n,s),b=null,p=null,!0}(E,A)||(p=e.requestAnimationFrame(S),b=u)};0===e.pageYOffset&&e.scrollTo(0,0),function(e,u,t){u||history.pushState&&t.updateURL&&history.pushState({smoothScroll:JSON.stringify(t),anchor:e.id},document.title,e===document.documentElement?"#top":"#"+e.id)}(n,f,D),"matchMedia"in e&&e.matchMedia("(prefers-reduced-motion)").matches?i(n,Math.floor(A),!1):(a("scrollStart",D,n,s),g.cancelScroll(!0),e.requestAnimationFrame(S))}}},f=function(u){if(!u.defaultPrevented&&!(0!==u.button||u.metaKey||u.ctrlKey||u.shiftKey)&&"closest"in u.target&&(D=u.target.closest(s))&&"a"===D.tagName.toLowerCase()&&!u.target.closest(c.ignore)&&D.hostname===e.location.hostname&&D.pathname===e.location.pathname&&/#/.test(D.href)){var t,o;try{t=n(decodeURIComponent(D.hash))}catch(e){t=n(D.hash)}if("#"===t){if(!c.topOnEmptyHash)return;o=document.documentElement}else o=document.querySelector(t);(o=o||"#top"!==t?o:document.documentElement)&&(u.preventDefault(),function(u){if(history.replaceState&&u.updateURL&&!history.state){var t=e.location.hash;t=t||"",history.replaceState({smoothScroll:JSON.stringify(u),anchor:t||e.pageYOffset},document.title,t||e.location.href)}}(c),g.animateScroll(o,D))}},h=function(e){if(null!==history.state&&history.state.smoothScroll&&history.state.smoothScroll===JSON.stringify(c)){var u=history.state.anchor;"string"==typeof u&&u&&!(u=document.querySelector(n(history.state.anchor)))||g.animateScroll(u,null,{updateURL:!1})}};return g.destroy=function(){c&&(document.removeEventListener("click",f,!1),e.removeEventListener("popstate",h,!1),g.cancelScroll(),c=null,D=null,d=null,p=null)},function(){if(!("querySelector"in document&&"addEventListener"in e&&"requestAnimationFrame"in e&&"closest"in e.Element.prototype))throw"Smooth Scroll: This browser does not support the required JavaScript methods and browser APIs.";g.destroy(),c=t(u,l||{}),d=c.header?document.querySelector(c.header):null,document.addEventListener("click",f,!1),c.updateURL&&c.popstate&&e.addEventListener("popstate",h,!1)}(),g}}(o)}.apply(u,[]),void 0===n||(e.exports=n)},432:function(e,u,t){var n=this&&this.__createBinding||(Object.create?function(e,u,t,n){void 0===n&&(n=t),Object.defineProperty(e,n,{enumerable:!0,get:function(){return u[t]}})}:function(e,u,t,n){void 0===n&&(n=t),e[n]=u[t]}),o=this&&this.__exportStar||function(e,u){for(var t in e)"default"===t||Object.prototype.hasOwnProperty.call(u,t)||n(u,e,t)};Object.defineProperty(u,"__esModule",{value:!0}),o(t(47),u),o(t(926),u),o(t(349),u),o(t(137),u),o(t(729),u),o(t(383),u),o(t(450),u),o(t(358),u),o(t(753),u),o(t(869),u),o(t(352),u),o(t(446),u),o(t(164),u),o(t(305),u),o(t(502),u)},349:function(e,u,t){Object.defineProperty(u,"__esModule",{value:!0}),u.useArrowNavigation=void 0;var n=t(156);u.useArrowNavigation=function(e){var u=e.listItems,t=e.onArrowUpOrDown,o=(0,n.useState)(0),r=o[0],i=o[1],a=(0,n.useCallback)((function(e){i(e)}),[u]),s=function(e){var n=e.key;if(null==u?void 0:u.length)if("ArrowUp"===n)t&&t(),e.preventDefault(),a(r>0?r-1:u.length-1);else{if("ArrowDown"!==n)return;t&&t(),e.preventDefault(),r<u.length-1?a(r+1):a(0)}};return(0,n.useEffect)((function(){return window.addEventListener("keydown",s),function(){return window.removeEventListener("keydown",s)}})),(0,n.useEffect)((function(){a(0)}),[u]),{selectedIndex:r}}},446:function(e,u,t){Object.defineProperty(u,"__esModule",{value:!0}),u.useDebounce=void 0;var n=t(156);u.useDebounce=function(e,u){void 0===u&&(u=300);var t=(0,n.useState)(e),o=t[0],r=t[1];return(0,n.useEffect)((function(){var t=setTimeout((function(){r(e)}),u);return function(){clearTimeout(t)}}),[e,u]),o}},164:function(e,u,t){Object.defineProperty(u,"__esModule",{value:!0}),u.useElementSize=void 0;var n=t(156);u.useElementSize=function(){var e,u,t=(0,n.useRef)(null);return[t,{width:null===(e=null==t?void 0:t.current)||void 0===e?void 0:e.clientWidth,height:null===(u=null==t?void 0:t.current)||void 0===u?void 0:u.clientHeight}]},u.default=u.useElementSize},137:function(e,u,t){Object.defineProperty(u,"__esModule",{value:!0}),u.useIntersectionObserver=void 0;var n=t(156);u.useIntersectionObserver=function(e){var u=(0,n.useRef)(null),t=(0,n.useState)(!1),o=t[0],r=t[1],i=function(e){var u=e[0];r(u.isIntersecting)};return(0,n.useEffect)((function(){if(window&&window.IntersectionObserver){var t=new IntersectionObserver(i,e),n=u.current;return u.current&&t.observe(u.current),function(){n&&t.unobserve(n)}}r(!1)}),[u,e]),{containerRef:u,isVisible:o}},u.default=u.useIntersectionObserver},729:function(e,u,t){Object.defineProperty(u,"__esModule",{value:!0}),u.useIsBreakpoint=void 0;var n=t(156),o=t(432),r={xs:1,mobileSmall:320,mobile:375,tablet:768,tabletLarge:920,desktopSmall:1024,desktop:1260,desktopLarge:1440};u.useIsBreakpoint=function(e){var u="string"==typeof e?r[e]:e,t=(0,n.useState)(null),i=t[0],a=t[1],s=(0,n.useCallback)((function(){a(window.innerWidth)}),[]);return(0,n.useEffect)((function(){s()}),[]),(0,o.useOnResize)(s),i>=u},u.default=u.useIsBreakpoint},450:function(e,u,t){Object.defineProperty(u,"__esModule",{value:!0}),u.useIsLoadingAfterError=void 0;var n=t(156);u.useIsLoadingAfterError=function(e,u){var t=(0,n.useState)(u),o=t[0],r=t[1];return(0,n.useEffect)((function(){e||r(u)}),[e,u]),e&&o}},305:function(e,u,t){Object.defineProperty(u,"__esModule",{value:!0}),u.useIsMobile=void 0;var n=t(729);u.useIsMobile=function(){return!(0,n.useIsBreakpoint)("tablet")},u.default=u.useIsMobile},383:function(e,u,t){Object.defineProperty(u,"__esModule",{value:!0}),u.useIsomorphicLayoutEffect=void 0;var n=t(156);u.useIsomorphicLayoutEffect="undefined"!=typeof window?n.useLayoutEffect:n.useEffect,u.default=u.useIsomorphicLayoutEffect},753:function(e,u,t){Object.defineProperty(u,"__esModule",{value:!0}),u.useOnLoseFocusWithin=void 0;var n=t(156);u.useOnLoseFocusWithin=function(e){var u=e.ref,t=e.callback,o=e.watch;(0,n.useEffect)((function(){var e=function(){var e;if(o)return(null===(e=u.current)||void 0===e?void 0:e.matches(":focus-within"))?void 0:t()};return document.addEventListener("keyup",e),function(){return document.removeEventListener("keyup",e)}}),[t,u,o])},u.default=u.useOnLoseFocusWithin},502:function(e,u,t){Object.defineProperty(u,"__esModule",{value:!0}),u.useOnResize=void 0;var n=t(156);u.useOnResize=function(e){(0,n.useEffect)((function(){var u=function(){e(window.innerWidth)};return window.addEventListener("resize",u,{passive:!0}),function(){return window.removeEventListener("resize",u)}}),[])},u.default=u.useOnResize},352:function(e,u,t){Object.defineProperty(u,"__esModule",{value:!0}),u.useOnWindowFocus=void 0;var n=t(156);u.useOnWindowFocus=function(e){(0,n.useEffect)((function(){var u=function(){e&&"visible"===document.visibilityState&&e()};return window.addEventListener("visibilitychange",u,!1),function(){return window.removeEventListener("visibilitychange",u)}}),[e])}},47:function(e,u,t){Object.defineProperty(u,"__esModule",{value:!0}),u.useOutsideReacter=void 0;var n=t(156);u.useOutsideReacter=function(e,u){function t(t){e.current&&!e.current.contains(t.target)&&u()}(0,n.useEffect)((function(){return document.addEventListener("mousedown",t),function(){document.removeEventListener("mousedown",t)}}))}},869:function(e,u,t){Object.defineProperty(u,"__esModule",{value:!0}),u.useRunAfterUpdate=void 0;var n=t(156);u.useRunAfterUpdate=function(){var e=(0,n.useRef)(null);return(0,n.useEffect)((function(){e.current&&(e.current(),e.current=null)})),function(u){e.current=u}},u.default=u.useRunAfterUpdate},926:function(e,u,t){Object.defineProperty(u,"__esModule",{value:!0}),u.useScrollLock=void 0;var n=t(156);u.useScrollLock=function(){return{lock:(0,n.useCallback)((function(){var e=window.scrollY+"px",u=document.body;u.style.position="fixed",u.style.top="-"+e}),[]),unlock:(0,n.useCallback)((function(){var e=document.body,u=e.style.top,t=-1*parseInt(u||"0");e.style.position="",e.style.top="",t&&window.scrollTo(0,-1*parseInt(u||"0"))}),[])}}},358:function(e,u,t){var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(u,"__esModule",{value:!0}),u.useSmoothScroll=void 0;var o=t(156),r=n(t(888));u.useSmoothScroll=function(e){var u=(0,o.useRef)(null),t=e.ref,n=e.offset,i=void 0===n?0:n,a=e.speed,s=void 0===a?500:a;return(0,o.useEffect)((function(){u.current=new r.default(null,{speed:s,speedAsDuration:!0})}),[]),(0,o.useCallback)((function(){t&&u.current&&u.current.animateScroll(t.current,null,{offset:function(){return i},updateURL:!1})}),[i,t])}},156:function(e){e.exports=u}},t={};function n(u){var o=t[u];if(void 0!==o)return o.exports;var r=t[u]={exports:{}};return e[u].call(r.exports,r,r.exports,n),r.exports}return n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n(432)}())}(Qe)),Qe.exports),Xe=We(Ke),Ze={"fullscreen-root":"MobileSearch_fullscreen-root__l90DZ","combobox-container":"MobileSearch_combobox-container__UsUQ2","right-column":"MobileSearch_right-column__QT0kp","combobox-icon":"MobileSearch_combobox-icon__3syCw","combobox-label":"MobileSearch_combobox-label__mRQMF",container:"MobileSearch_container__JtL5q",input:"MobileSearch_input__Sjo1c","clear-input":"MobileSearch_clear-input__SGpE8",hasValue:"MobileSearch_hasValue__H1RPq",suggestion:"MobileSearch_suggestion__pqOkM",suggestionHighlighted:"MobileSearch_suggestionHighlighted__xpMMN",suggestionsContainerOpen:"MobileSearch_suggestionsContainerOpen__wwyZk",suggestionsList:"MobileSearch_suggestionsList__-pWWC","clear-search-history":"MobileSearch_clear-search-history__cO30c","mobile-modal-overlay":"MobileSearch_mobile-modal-overlay__bH39q","mobile-modal":"MobileSearch_mobile-modal__DFUUM","mobile-modal-content":"MobileSearch_mobile-modal-content__7q4zK"};Pe("input[type='text'] {\n margin: 0;\n padding: 0; }\n\n.MobileSearch_fullscreen-root__l90DZ {\n display: flex;\n flex-direction: column;\n position: fixed;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n background: #fff;\n z-index: 1000; }\n\n.MobileSearch_combobox-container__UsUQ2 {\n margin: 15px 10px 0;\n border: solid #888 1px;\n display: flex;\n align-items: center;\n border-radius: 5px;\n height: 60px;\n justify-content: space-between; }\n .MobileSearch_combobox-container__UsUQ2 .MobileSearch_right-column__QT0kp {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n padding-top: 9px; }\n\n.MobileSearch_combobox-icon__3syCw {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n width: 52px;\n border: 0;\n background: none; }\n .MobileSearch_combobox-icon__3syCw svg {\n width: 14px;\n height: 21px;\n transform: rotate(-180deg); }\n\n.MobileSearch_combobox-label__mRQMF {\n position: relative;\n top: -2px;\n font-size: 12px;\n font-weight: var(--font-weight-medium);\n letter-spacing: -0.2px;\n color: #333; }\n\n.MobileSearch_container__JtL5q {\n display: flex;\n align-items: center;\n width: 100%; }\n .MobileSearch_container__JtL5q .MobileSearch_input__Sjo1c {\n font-family: 'Gotham Rounded A', 'Gotham Rounded B', Roboto, Arial, Georgia, serif;\n width: 100%;\n position: relative;\n padding-bottom: 7px;\n top: 2px;\n border: none;\n height: 26px;\n font-weight: normal;\n box-shadow: none;\n font-size: 16px;\n letter-spacing: -0.5px;\n color: #666;\n -webkit-appearance: none;\n appearance: none; }\n .MobileSearch_container__JtL5q .MobileSearch_input__Sjo1c:focus {\n outline: none;\n border: none;\n box-shadow: none;\n background: #fff; }\n\nbutton.MobileSearch_clear-input__SGpE8 {\n display: flex;\n align-items: center;\n right: 0;\n padding: 0 15px 7px 0;\n height: 26px;\n color: var(--color);\n border: 0;\n margin: 0;\n justify-content: center;\n text-align: left;\n background: none;\n border-style: none;\n border-width: 0;\n cursor: pointer;\n font-family: inherit;\n background-color: transparent;\n transition: none; }\n button.MobileSearch_clear-input__SGpE8 svg {\n fill: var(--color);\n width: 16px;\n height: 16px; }\n button.MobileSearch_clear-input__SGpE8:focus {\n background-color: transparent;\n color: inherit; }\n button.MobileSearch_clear-input__SGpE8:active {\n background-color: transparent;\n color: inherit; }\n button.MobileSearch_clear-input__SGpE8:hover {\n background-color: transparent;\n color: inherit; }\n\n.MobileSearch_hasValue__H1RPq {\n color: #333; }\n\n.MobileSearch_suggestion__pqOkM {\n font-size: 15px;\n min-height: 50px;\n letter-spacing: -0.6px;\n color: #333;\n font-weight: 500;\n background: #fff;\n margin: 0;\n padding: 0; }\n\n.MobileSearch_suggestionHighlighted__xpMMN {\n background-color: #f2f5f7; }\n\n.MobileSearch_suggestionsContainerOpen__wwyZk {\n display: flex;\n position: absolute;\n margin-bottom: auto;\n z-index: 20;\n width: 100vw;\n max-height: calc(100% - 75px);\n height: 100%;\n top: 75px;\n left: 0;\n overflow-x: hidden;\n overflow-y: scroll; }\n .MobileSearch_suggestionsContainerOpen__wwyZk .MobileSearch_suggestionsList__-pWWC {\n width: 100vw;\n list-style: none;\n padding-left: 0;\n margin: 0;\n background: #f2f5f7; }\n\n.MobileSearch_clear-search-history__cO30c {\n display: flex;\n font-family: 'Gotham Rounded A', 'Gotham Rounded B', Roboto, Arial, Georgia, serif;\n margin-top: auto;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 62px;\n background: #f2f5f7;\n color: var(--accessible-primary-color);\n font-size: 15px;\n font-weight: var(--font-weight-medium);\n letter-spacing: -0.42px;\n border: none;\n border-top: 1px solid #ddd; }\n .MobileSearch_suggestionHighlighted__xpMMN .MobileSearch_clear-search-history__cO30c {\n background-color: transparent;\n color: inherit; }\n\n.MobileSearch_mobile-modal-overlay__bH39q {\n z-index: 9999;\n top: 0;\n left: 0;\n right: unset;\n bottom: unset;\n margin: 0;\n padding: 0;\n width: 100%;\n height: 100%;\n background-color: white;\n position: fixed; }\n\n.MobileSearch_mobile-modal__DFUUM {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0; }\n .MobileSearch_mobile-modal__DFUUM.ReactModal__Content--after-open > div {\n transform: translateY(0); }\n .MobileSearch_mobile-modal__DFUUM.ReactModal__Content--before-close > div {\n transform: translateY(10%); }\n\n.MobileSearch_mobile-modal-content__7q4zK {\n position: fixed;\n width: 100%;\n height: 100%;\n outline: none;\n background-color: #fff;\n transition: transform 0.25s;\n transform: translateY(10%); }\n");var Je={"fullscreen-root":"MobileNoScroll_fullscreen-root__fZbOA","combobox-container":"MobileNoScroll_combobox-container__9Q02x","right-column":"MobileNoScroll_right-column__Hk-62","combobox-icon":"MobileNoScroll_combobox-icon__WlXar","combobox-label":"MobileNoScroll_combobox-label__oeVbH",container:"MobileNoScroll_container__veReP",input:"MobileNoScroll_input__zo9Gg","clear-input":"MobileNoScroll_clear-input__lQlxs",hasValue:"MobileNoScroll_hasValue__1Gx3J",suggestion:"MobileNoScroll_suggestion__hTxDr",suggestionHighlighted:"MobileNoScroll_suggestionHighlighted__zxzXj",suggestionsContainerOpen:"MobileNoScroll_suggestionsContainerOpen__sX1RA",suggestionsList:"MobileNoScroll_suggestionsList__wXJTV","clear-search-history":"MobileNoScroll_clear-search-history__vR2Xw","mobile-modal-overlay":"MobileNoScroll_mobile-modal-overlay__Qw6Np","mobile-modal":"MobileNoScroll_mobile-modal__xYuHh","mobile-modal-content":"MobileNoScroll_mobile-modal-content__0Ft4g"};function Ye(e,u){if(null==e)return{};var t,n,o=function(e,u){if(null==e)return{};var t={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==u.indexOf(n))continue;t[n]=e[n]}return t}(e,u);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n<r.length;n++)t=r[n],-1===u.indexOf(t)&&{}.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}Pe("input[type='text'] {\n margin: 0;\n padding: 0; }\n\n.MobileNoScroll_fullscreen-root__fZbOA {\n display: flex;\n flex-direction: column;\n position: fixed;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n background: #fff;\n z-index: 1000; }\n\n.MobileNoScroll_combobox-container__9Q02x {\n margin: 15px 10px 0;\n border: solid #888 1px;\n display: flex;\n align-items: center;\n border-radius: 5px;\n height: 60px;\n justify-content: space-between; }\n .MobileNoScroll_combobox-container__9Q02x .MobileNoScroll_right-column__Hk-62 {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n padding-top: 9px; }\n\n.MobileNoScroll_combobox-icon__WlXar {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n width: 52px;\n border: 0;\n background: none; }\n .MobileNoScroll_combobox-icon__WlXar svg {\n width: 14px;\n height: 21px;\n transform: rotate(-180deg); }\n\n.MobileNoScroll_combobox-label__oeVbH {\n position: relative;\n top: -2px;\n font-size: 12px;\n font-weight: var(--font-weight-medium);\n letter-spacing: -0.2px;\n color: #333; }\n\n.MobileNoScroll_container__veReP {\n display: flex;\n align-items: center;\n width: 100%; }\n .MobileNoScroll_container__veReP .MobileNoScroll_input__zo9Gg {\n font-family: 'Gotham Rounded A', 'Gotham Rounded B', Roboto, Arial, Georgia, serif;\n width: 100%;\n position: relative;\n padding-bottom: 7px;\n top: 2px;\n border: none;\n height: 26px;\n font-weight: normal;\n box-shadow: none;\n font-size: 16px;\n letter-spacing: -0.5px;\n color: #666;\n -webkit-appearance: none;\n appearance: none; }\n .MobileNoScroll_container__veReP .MobileNoScroll_input__zo9Gg:focus {\n outline: none;\n border: none;\n box-shadow: none;\n background: #fff; }\n\nbutton.MobileNoScroll_clear-input__lQlxs {\n display: flex;\n align-items: center;\n right: 0;\n padding: 0 15px 7px 0;\n height: 26px;\n color: var(--color);\n border: 0;\n margin: 0;\n justify-content: center;\n text-align: left;\n background: none;\n border-style: none;\n border-width: 0;\n cursor: pointer;\n font-family: inherit;\n background-color: transparent;\n transition: none; }\n button.MobileNoScroll_clear-input__lQlxs svg {\n fill: var(--color);\n width: 16px;\n height: 16px; }\n button.MobileNoScroll_clear-input__lQlxs:focus {\n background-color: transparent;\n color: inherit; }\n button.MobileNoScroll_clear-input__lQlxs:active {\n background-color: transparent;\n color: inherit; }\n button.MobileNoScroll_clear-input__lQlxs:hover {\n background-color: transparent;\n color: inherit; }\n\n.MobileNoScroll_hasValue__1Gx3J {\n color: #333; }\n\n.MobileNoScroll_suggestion__hTxDr {\n font-size: 15px;\n min-height: 50px;\n letter-spacing: -0.6px;\n color: #333;\n font-weight: 500;\n background: #fff;\n margin: 0;\n padding: 0; }\n\n.MobileNoScroll_suggestionHighlighted__zxzXj {\n background-color: #f2f5f7; }\n\n.MobileNoScroll_suggestionsContainerOpen__sX1RA {\n display: flex;\n position: absolute;\n margin-bottom: auto;\n z-index: 20;\n width: 100vw;\n max-height: calc(100% - 75px);\n height: 100%;\n top: 75px;\n left: 0;\n overflow-x: hidden;\n overflow-y: scroll; }\n .MobileNoScroll_suggestionsContainerOpen__sX1RA .MobileNoScroll_suggestionsList__wXJTV {\n width: 100vw;\n list-style: none;\n padding-left: 0;\n margin: 0;\n background: #f2f5f7; }\n\n.MobileNoScroll_clear-search-history__vR2Xw {\n display: flex;\n font-family: 'Gotham Rounded A', 'Gotham Rounded B', Roboto, Arial, Georgia, serif;\n margin-top: auto;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 62px;\n background: #f2f5f7;\n color: var(--accessible-primary-color);\n font-size: 15px;\n font-weight: var(--font-weight-medium);\n letter-spacing: -0.42px;\n border: none;\n border-top: 1px solid #ddd; }\n .MobileNoScroll_suggestionHighlighted__zxzXj .MobileNoScroll_clear-search-history__vR2Xw {\n background-color: transparent;\n color: inherit; }\n\n.MobileNoScroll_mobile-modal-overlay__Qw6Np {\n z-index: 9999;\n top: 0;\n left: 0;\n right: unset;\n bottom: unset;\n margin: 0;\n padding: 0;\n width: 100%;\n height: 100%;\n background-color: white;\n position: fixed; }\n\n.MobileNoScroll_mobile-modal__xYuHh {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0; }\n .MobileNoScroll_mobile-modal__xYuHh.ReactModal__Content--after-open > div {\n transform: translateY(0); }\n .MobileNoScroll_mobile-modal__xYuHh.ReactModal__Content--before-close > div {\n transform: translateY(10%); }\n\n.MobileNoScroll_mobile-modal-content__0Ft4g {\n position: fixed;\n width: 100%;\n height: 100%;\n outline: none;\n background-color: #fff;\n transition: transform 0.25s;\n transform: translateY(10%); }\n\n.MobileNoScroll_suggestionsContainerOpen__sX1RA {\n -ms-overflow-style: none;\n /* Internet Explorer 10+ */\n scrollbar-width: none;\n /* Firefox */ }\n .MobileNoScroll_suggestionsContainerOpen__sX1RA::-webkit-scrollbar {\n display: none;\n /* Safari and Chrome */ }\n");const eu=["item","lng","getItemProps","highlightedIndex","itemIndex","styles"],uu=["suggestions","getMenuProps","getItemProps","lng","styles","hidden","renderClearHistoryButton","handleClearHistory"];function tu(e,u){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);u&&(n=n.filter((function(u){return Object.getOwnPropertyDescriptor(e,u).enumerable}))),t.push.apply(t,n)}return t}function nu(e){for(var u=1;u<arguments.length;u++){var t=null!=arguments[u]?arguments[u]:{};u%2?tu(Object(t),!0).forEach((function(u){U(e,u,t[u])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):tu(Object(t)).forEach((function(u){Object.defineProperty(e,u,Object.getOwnPropertyDescriptor(t,u))}))}return e}function ou(e){let{item:u,lng:t,getItemProps:o,highlightedIndex:r,itemIndex:i,styles:a}=e,s=Ye(e,eu);const[l]=n.useTranslation(),c="FutureRoute"===u.type?nu(nu({},u),{},{translatedText:Ue(u,t,l)}):u,D=He(u,t,l);return v.default.createElement("li",Object.assign({className:B.default(a.suggestion,r===i&&a.suggestionHighlighted)},o({index:i})),v.default.createElement(z.default,Object.assign({item:c,content:D,lng:t},s)))}const ru="production"!==process.env.NODE_ENV?_.default.shape({name:_.default.string,type:_.default.string,address:_.default.string,selectedIconId:_.default.string,iconColor:_.default.string,translatedText:_.default.string,properties:_.default.shape({layer:_.default.string,color:_.default.string,localadmin:_.default.string,mode:_.default.string,id:_.default.string,source:_.default.string,arrowClicked:_.default.bool,destination:_.default.shape({name:_.default.string,localadmin:_.default.string}),origin:_.default.shape({name:_.default.string,localadmin:_.default.string})})}):{};function iu(e){let{suggestions:u,getMenuProps:t,getItemProps:o,lng:r,styles:i,hidden:a,renderClearHistoryButton:s,handleClearHistory:l}=e,c=Ye(e,uu);const[D]=n.useTranslation();return v.default.createElement("div",{className:B.default(i.suggestionsContainerOpen,i.suggestionsContainer,a&&"hidden")},v.default.createElement("ul",Object.assign({className:i.suggestionsList},t()),u.map(((e,u)=>v.default.createElement(ou,Object.assign({key:`${e.type}-${e.properties.gid||e.properties.name||e.properties.gtfsId}`,getItemProps:o,itemIndex:u,item:e,lng:r,styles:i},c)))),s&&v.default.createElement("li",o({index:u.length}),v.default.createElement("button",{onClick:l,type:"button",className:i["clear-search-history"]},D("clear-search-history",{lng:r})))))}"production"!==process.env.NODE_ENV&&(ou.propTypes={item:ru.isRequired,lng:_.default.string.isRequired,getItemProps:_.default.func.isRequired,highlightedIndex:_.default.number.isRequired,itemIndex:_.default.number.isRequired,styles:_.default.objectOf(_.default.string).isRequired}),"production"!==process.env.NODE_ENV&&(iu.propTypes={suggestions:_.default.arrayOf(ru).isRequired,getMenuProps:_.default.func.isRequired,getItemProps:_.default.func.isRequired,lng:_.default.string.isRequired,styles:_.default.objectOf(_.default.string).isRequired,hidden:_.default.bool.isRequired,renderClearHistoryButton:_.default.bool,handleClearHistory:_.default.func}),iu.defaultProps={renderClearHistoryButton:!1,handleClearHistory:()=>{}};const au=({color:e,lng:u,clearInput:t,onKeyDown:o,styles:r})=>{const[i]=n.useTranslation();return v.default.createElement("button",{type:"button",className:r["clear-input"],onClick:t,"aria-label":i("clear-button-label",{lng:u}),onKeyDown:o},v.default.createElement(P.default,{img:"close",color:e}))};function su({id:e,lng:u,value:t,placeholder:n,required:o,getInputProps:r,getLabelProps:i,clearInput:a,ariaLabel:s,inputRef:l,styles:c,renderLabel:D,isMobile:d,inputClassName:p,transportMode:g,clearButtonColor:f,autoFocus:h,inputOnBlur:F}){return v.default.createElement("div",{className:c.container},D&&v.default.createElement("label",i({className:c["sr-only"],htmlFor:e}),s),v.default.createElement("input",Object.assign({"aria-label":s,autoFocus:h,placeholder:n,required:o,type:"text",className:B.default(c.input,c[e],p,d&&g&&c.thin,t&&c.hasValue),value:t,id:e},r({ref:l,onBlur:F}))),t&&v.default.createElement(au,{lng:u,clearInput:()=>a(l),styles:c,color:f,onKeyDown:e=>qe(e)&&a(l)}))}function lu(e,u){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);u&&(n=n.filter((function(u){return Object.getOwnPropertyDescriptor(e,u).enumerable}))),t.push.apply(t,n)}return t}function cu(e){for(var u=1;u<arguments.length;u++){var t=null!=arguments[u]?arguments[u]:{};u%2?lu(Object(t),!0).forEach((function(u){U(e,u,t[u])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):lu(Object(t)).forEach((function(u){Object.defineProperty(e,u,Object.getOwnPropertyDescriptor(t,u))}))}return e}"production"!==process.env.NODE_ENV&&(au.propTypes={color:_.default.string.isRequired,lng:_.default.string.isRequired,clearInput:_.default.func.isRequired,onKeyDown:_.default.func.isRequired,styles:_.default.objectOf(_.default.string).isRequired}),"production"!==process.env.NODE_ENV&&(su.propTypes={id:_.default.string.isRequired,lng:_.default.string.isRequired,placeholder:_.default.string.isRequired,required:_.default.bool.isRequired,value:_.default.string.isRequired,getInputProps:_.default.func.isRequired,getLabelProps:_.default.func.isRequired,clearInput:_.default.func.isRequired,ariaLabel:_.default.string.isRequired,inputRef:_.default.shape({current:_.default.oneOfType([_.default.string,_.default.object])}).isRequired,styles:_.default.objectOf(_.default.string).isRequired,renderLabel:_.default.bool,isMobile:_.default.bool.isRequired,inputClassName:_.default.string.isRequired,transportMode:_.default.string,clearButtonColor:_.default.string.isRequired,autoFocus:_.default.bool,inputOnBlur:_.default.func}),su.defaultProps={autoFocus:!1,renderLabel:!1,transportMode:void 0,inputOnBlur:()=>{}};const Du=({appElement:e,id:u,placeholder:o,clearInput:r,onSelectedItemChange:i,fontWeights:a,clearOldSearches:s,suggestionProps:l,lng:c,ariaProps:D,value:p,inputClassName:g,required:f,mobileLabel:h,showScroll:F,state:b,dispatch:C,colors:E})=>{const[m]=n.useTranslation(),{lock:A,unlock:y}=Xe.useScrollLock(),_=F?Ze:Je,B=`${u}-input`,S=`${u}-label`,[k,w]=t.useState(!1),x=v.default.useRef();t.useEffect((()=>{N.default.setAppElement(e)}),[]),t.useEffect((()=>{b.renderMobile?A():y()}),[b.renderMobile]);const{highlightedIndex:O,getLabelProps:j,getMenuProps:M,getInputProps:R,getItemProps:I,setHighlightedIndex:L}=d.useCombobox({items:b.suggestions,inputValue:p,isOpen:!0,onSelectedItemChange:e=>{i(e),C({type:"TOGGLE_MENU",isMobile:!0})},inputId:B,labelId:S,selectedItem:null,defaultHighlightedIndex:-1,onInputValueChange:({inputValue:e})=>b.renderMobile&&C({type:"INPUT_CHANGE",value:e}),stateReducer:(e,{changes:u,type:t})=>{switch(t){case d.useCombobox.stateChangeTypes.InputKeyDownEscape:return L(-1),C({type:"TOGGLE_MENU",isMobile:!0}),e;case d.useCombobox.stateChangeTypes.InputKeyDownEnter:return b.loading?(C({type:"PENDING_ENTER",enterPending:!0}),e):-1===e.highlightedIndex?cu(cu({},u),{},{selectedItem:b.suggestions[0]}):u;case d.useCombobox.stateChangeTypes.InputBlur:return e;default:return u}},itemToString:e=>e?Ve(e):""});j({},{suppressRefError:!0}),M({},{suppressRefError:!0}),R({},{suppressRefError:!0}),I({index:-1},{suppressRefError:!0});const{ariaRequiredText:z,SearchBarId:T,ariaCurrentSuggestion:H}=D,U=z.concat(" ").concat(T).concat(" ").concat(H);return v.default.createElement(N.default,{isOpen:b.renderMobile,className:_["mobile-modal"],overlayClassName:_["mobile-modal-overlay"],shouldReturnFocusAfterClose:!1,shouldCloseOnEsc:!0},v.default.createElement("div",{className:_["mobile-modal-content"],style:{"--color":E.primary,"--accessible-primary-color":E.accessiblePrimary,"--hover-color":E.hover,"--font-weight-medium":a.medium}},v.default.createElement("div",{className:_["combobox-container"],htmlFor:B},v.default.createElement("button",{type:"button",className:_["combobox-icon"],onClick:()=>{L(-1),C({type:"TOGGLE_MENU",isMobile:!0})},onKeyDown:e=>{qe(e)&&(L(-1),C({type:"TOGGLE_MENU",isMobile:!0}))},"aria-label":m("cancel",{lng:c}),tabIndex:0},v.default.createElement(P.default,{img:"arrow",color:E.primary})),v.default.createElement("span",{className:_["right-column"]},v.default.createElement("span",Object.assign({className:_["combobox-label"],id:S},j()),h),v.default.createElement(su,{placeholder:ze(u)?m("address-place-or-business",{lng:c}):o,id:u,lng:c,value:p,getInputProps:R,getLabelProps:j,clearInput:()=>r(x),ariaLabel:U,inputRef:x,styles:_,renderLabel:!1,clearButtonColor:E.primary,autoFocus:!0,inputClassName:g,required:f,isMobile:!0}),v.default.createElement(iu,Object.assign({suggestions:b.suggestions,getMenuProps:M,getItemProps:I,highlightedIndex:O,isOpen:!0,hidden:!1,lng:c,styles:_,renderClearHistoryButton:!0,handleClearHistory:()=>w(!0)},l)))),v.default.createElement(q.default,{appElement:e,isModalOpen:k,handleClose:()=>w(!1),headerText:m("delete-old-searches-header",{lng:c}),primaryButtonText:m("delete",{lng:c}),secondaryButtonText:m("cancel",{lng:c}),primaryButtonOnClick:()=>{s(),w(!1)},secondaryButtonOnClick:()=>w(!1),colors:E,fontWeights:a,lang:c})))};function du(e,u){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);u&&(n=n.filter((function(u){return Object.getOwnPropertyDescriptor(e,u).enumerable}))),t.push.apply(t,n)}return t}function pu(e){for(var u=1;u<arguments.length;u++){var t=null!=arguments[u]?arguments[u]:{};u%2?du(Object(t),!0).forEach((function(u){U(e,u,t[u])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):du(Object(t)).forEach((function(u){Object.defineProperty(e,u,Object.getOwnPropertyDescriptor(t,u))}))}return e}"production"!==process.env.NODE_ENV&&(Du.propTypes={appElement:_.default.string.isRequired,id:_.default.string.isRequired,clearInput:_.default.func.isRequired,clearOldSearches:_.default.func.isRequired,onSelectedItemChange:_.default.func.isRequired,value:_.default.string.isRequired,colors:_.default.objectOf(_.default.string).isRequired,fontWeights:_.default.shape({medium:_.default.number.isRequired}).isRequired,suggestionProps:_.default.shape({}).isRequired,ariaProps:_.default.shape({ariaRequiredText:_.default.string.isRequired,SearchBarId:_.default.string.isRequired,ariaCurrentSuggestion:_.default.string.isRequired}).isRequired,inputClassName:_.default.string.isRequired,placeholder:_.default.string.isRequired,mobileLabel:_.default.string.isRequired,required:_.default.bool.isRequired,showScroll:_.default.bool.isRequired,lng:_.default.string.isRequired,state:_.default.shape({suggestions:_.default.arrayOf(_.default.shape({})).isRequired,renderMobile:_.default.bool.isRequired,loading:_.default.bool.isRequired}).isRequired,dispatch:_.default.func.isRequired});const gu=(e,u)=>{switch(u.type){case"INPUT_CHANGE":return pu(pu({},e),{},{value:u.value});case"FETCH_SUGGESTIONS":return pu(pu({},e),{},{loading:u.loading,suggestions:u.suggestions||e.suggestions});case"CLEAR_SUGGESTIONS":return pu(pu({},e),{},{suggestions:[]});case"SET_SOURCES":return pu(pu({},e),{},{showOwnPlaces:u.showOwnPlaces,sources:u.sources,pendingSelection:u.pendingSelection});case"CLEAR":return pu(pu({},e),{},{value:"",isCleared:!0,suggestions:[]});case"INPUT_BLUR":return pu(pu({},e),{},{value:u.value||e.value,isCleared:!u.isMobile&&e.isCleared,pendingSelection:null,showOwnPlaces:!1});case"RESET":return u.initialState;case"PENDING_ENTER":return pu(pu({},e),{},{enterPending:u.enterPending});case"TOGGLE_MENU":return u.isMobile?e.renderMobile?pu(pu({},e),{},{renderMobile:!1,isCleared:!1}):pu(pu({},e),{},{renderMobile:!0,value:e.isCleared?"":e.value}):pu(pu({},e),{},{isMenuOpen:!e.isMenuOpen,renderMobile:u.isMobile&&!e.renderMobile});default:return e}};function fu(e,u){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);u&&(n=n.filter((function(u){return Object.getOwnPropertyDescriptor(e,u).enumerable}))),t.push.apply(t,n)}return t}function hu(e){for(var u=1;u<arguments.length;u++){var t=null!=arguments[u]?arguments[u]:{};u%2?fu(Object(t),!0).forEach((function(u){U(e,u,t[u])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):fu(Object(t)).forEach((function(u){Object.defineProperty(e,u,Object.getOwnPropertyDescriptor(t,u))}))}return e}const Fu=["Valittu sijainti","Nykyinen sijaintisi","Current position","Selected location","Vald position","Använd min position","Min position","Käytä nykyistä sijaintia","Use current location","Your current location","Wybrane miejsce"];function bu({appElement:e,id:u,placeholder:o,onSelect:r,icon:i,value:a,onClear:s,lang:l,getAutoSuggestIcons:c,handleViaPoints:D,focusChange:p,storeRef:g,isMobile:f,mobileLabel:h,inputClassName:F,translatedPlaceholder:b,required:C,ariaLabel:E,fontWeights:m,colors:A,modeSet:y,showScroll:_,isEmbedded:S,transportMode:k,targets:w,sources:x,geocodingSize:O,filterResults:j,searchContext:M,pathOpts:R,refPoint:I}){const[L]=n.useTranslation(),N={suggestions:[],loading:!1,sources:x,showOwnPlaces:!1,pendingSelection:null,isCleared:!1,renderMobile:!1,value:a,enterPending:!1,isMenuOpen:!1},[q,z]=t.useReducer(gu,N);t.useEffect((()=>z({type:"RESET",initialState:N})),[a]);const T=t.useRef(u);t.useEffect((()=>{g&&g(T.current)}),[T.current]);const H=t.useCallback((()=>{const e=!(null!=w&&w.length)||w.includes("Locations"),u=(({targets:e,isLocationSearch:u,isMobile:t,ownPlaces:n,sources:o})=>{const r=!(null!=e&&e.length);let i;return n?(i=["Locations"],(r||e.includes("Stops"))&&i.push("Stops"),(r||e.includes("Stations"))&&i.push("Stations"),(r||e.includes("VehicleRentalStations"))&&i.push("VehicleRentalStations")):r||(i=[...e],!u||t||o.length&&!o.includes("Favourite")||i.push("SelectFromOwnLocations")),i})({targets:w,isLocationSearch:e,isMobile:f,ownPlaces:q.showOwnPlaces,sources:q.sources});((e,u,t,n,o,r,i,a,s,l)=>{a(null),je(e,u,t,n,o,r,i,a,s,l)})(u,q.sources?q.sources.filter((u=>!e||"Favourite"===!u||q.showOwnPlaces||f)):q.sources,k,M,j,O,{input:q.value||""},(e=>{if(null==e)return void z({type:"FETCH_SUGGESTIONS",loading:!0});const u=(e.results||[]).filter((e=>"FutureRoute"!==e.type||"FutureRoute"===e.type&&e.properties.time>Date.now()/1e3)).map((e=>{if("CurrentLocation"===e.type||"SelectFromMap"===e.type||"SelectFromOwnLocations"===e.type||"back"===e.type){const u=hu({},e);return u.properties.labelId=L(e.properties.labelId,{lng:l}),u}return e}));z({type:"FETCH_SUGGESTIONS",loading:!1,suggestions:u})}),R,I)}),[q.value,q.sources,q.showOwnPlaces,w,k,M,j,O,f,l,R,I,u]),U=t.useCallback(((e,t)=>{e&&(D?D(e,t):r(e,u),!p||f&&!S||p(),T.current&&T.current.blur())}),[f]),V=e=>U(e.selectedItem,e.highlightedIndex),{isOpen:G,highlightedIndex:W,getLabelProps:$,getMenuProps:Q,getInputProps:K,getItemProps:X,selectItem:Z,openMenu:J,closeMenu:Y}=d.useCombobox({inputId:u,inputValue:q.value,defaultHighlightedIndex:0,onInputValueChange:({inputValue:e})=>z({type:"INPUT_CHANGE",value:e}),stateReducer:t.useCallback(((e,{type:u,changes:t})=>{switch(u){case d.useCombobox.stateChangeTypes.ItemClick:case d.useCombobox.stateChangeTypes.InputKeyDownEnter:return q.loading?(z({type:"PENDING_ENTER",enterPending:!0}),e):t.selectedItem?"SelectFromOwnLocations"===t.selectedItem.type?(z({type:"SET_SOURCES",sources:["Favourite","Back"],showOwnPlaces:!0,pendingSelection:t.selectedItem.type}),e):"back"===t.selectedItem.type?(z({type:"SET_SOURCES",sources:x,showOwnPlaces:!1,pendingSelection:null}),e):t:t;case d.useCombobox.stateChangeTypes.InputClick:return Fu.includes(a)?hu(hu({},t),{},{inputValue:"",isOpen:!0}):hu(hu({},t),{},{isOpen:!0});case d.useCombobox.stateChangeTypes.InputBlur:return t.selectedItem?hu(hu({},t),{},{selectedItem:e.selectItem,inputValue:e.inputValue}):t;case d.useCombobox.stateChangeTypes.InputKeyDownEscape:return hu(hu({},t),{},{inputValue:""});default:return t}}),[q.loading,a,f]),items:q.suggestions,itemToString:e=>e?Ve(e):"",onSelectedItemChange:V,onIsOpenChange:e=>{e.isOpen&&!q.renderMobile&&z({type:"TOGGLE_MENU",isMobile:f})}}),ee=e=>{z({type:"CLEAR"}),s&&s(u),e.current&&e.current.focus(),J()};t.useEffect((()=>{(G||q.renderMobile)&&H(q.value)}),[G,q.renderMobile,q.value,H]),t.useEffect((()=>{q.enterPending&&!q.loading&&(U(q.suggestions[0],0),Y())}),[q.loading,q.pendingEnter,q.suggestions]);const ue={loading:q.loading,isMobile:f,ariaFavouriteString:L("favourite",{lng:l}),fontWeights:m,getAutoSuggestIcons:c,colors:A,modeSet:y},{ariaCurrentSuggestion:te,ariaRequiredText:ne,SearchBarId:oe,ariaLabelText:re}=(({id:e,ariaLabel:u,lng:t,t:n,isMobile:o,suggestions:r,value:i,required:a})=>{const s=e.replace("searchfield-",""),l=u||n(s,{lng:t}).replace("searchfield-","").concat("."),c=a?`${n("required",{lng:t})}.`:"",D=n(o?"search-autosuggest-label-instructions-mobile":"search-autosuggest-label-instructions-desktop",{lng:t}),d="origin"===e?n("search-autosuggest-label-move-to-destination",{lng:t}):"";return{SearchBarId:l,ariaRequiredText:c,ariaLabelText:D.concat(" ").concat(d),ariaSuggestionLen:n("search-autosuggest-len",{count:r.length,lng:t}),ariaCurrentSuggestion:Ge({suggestions:r,t:n,lng:t})||i?n("search-current-suggestion",{lng:t,selection:Ge({suggestions:r,t:n,lng:t}).toLowerCase()||i}):""}})({id:u,lng:l,t:L,isMobile:f,ariaLabel:E,suggestions:q.suggestions,value:q.value,required:C});return t.useEffect((()=>{q.renderMobile||G||z({type:"RESET",initialState:N})}),[q.renderMobile,G]),v.default.createElement(v.default.Fragment,null,f&&v.default.createElement(Du,{placeholder:L(o,{lng:l}),fontWeights:m,clearOldSearches:()=>{const{context:e,clearOldSearches:u,clearFutureRoutes:t}=M;e&&u&&(u(e),t&&t(e),H(q.value))},appElement:e,mobileLabel:h||L(u,{lng:l}),ariaProps:{ariaCurrentSuggestion:te,SearchBarId:oe,ariaRequiredText:ne},id:u,lng:l,onSelectedItemChange:V,value:q.value,clearInput:ee,suggestionProps:ue,showScroll:!!_,colors:A,inputClassName:F,required:C,state:q,dispatch:z}),v.default.createElement("div",{className:B.default(Re["autosuggest-input-container"],Re[u],q.renderMobile&&"hidden"),style:{"--color":A.primary,"--hover-color":A.hover}},i&&v.default.createElement("div",{className:B.default(Re["autosuggest-input-icon"],Re[u],F&&Re[`${F}-input-icon`]),"aria-label":ne.concat(" ").concat(oe).concat(" ").concat(L("search-autosuggest-label",{lng:l}))},v.default.createElement(P.default,{img:`${i}`})),v.default.createElement(su,{inputClassName:F,ariaLabel:te.concat(" ").concat(ne).concat(" ").concat(oe).concat(" ").concat(re),id:u,lng:l,getInputProps:K,getLabelProps:$,selectItem:Z,value:q.value,clearInput:ee,inputRef:T,styles:Re,clearButtonColor:A.primary,placeholder:b||L(o,{lng:l}),required:C,transportMode:k,isMobile:f,inputOnBlur:()=>{z({isMobile:f,value:!f&&a,type:"INPUT_BLUR"}),f||z({type:"RESET",initialState:N})}}),v.default.createElement(iu,Object.assign({hidden:!G||f,highlightedIndex:W,getItemProps:X,getMenuProps:Q,suggestions:q.suggestions,lng:l,styles:Re},ue))))}"production"!==process.env.NODE_ENV&&(bu.propTypes={appElement:_.default.string.isRequired,icon:_.default.string,id:_.default.string.isRequired,placeholder:_.default.string.isRequired,translatedPlaceholder:_.default.string,value:_.default.string,transportMode:_.default.string,geocodingSize:_.default.number,filterResults:_.default.func,searchContext:_.default.shape({URL_PELIAS:_.default.string,context:_.default.object,clearOldSearches:_.default.func,clearFutureRoutes:_.default.func}).isRequired,sources:_.default.arrayOf(_.default.string),targets:_.default.arrayOf(_.default.string),ariaLabel:_.default.string,onSelect:_.default.func.isRequired,onClear:_.default.func,storeRef:_.default.func,handleViaPoints:_.default.func,focusChange:_.default.func,lang:_.default.string,isMobile:_.default.bool,pathOpts:_.default.shape({routesPrefix:_.default.string,stopsPrefix:_.default.string}),mobileLabel:_.default.string,refPoint:_.default.shape({address:_.default.string,lat:_.default.number,lon:_.default.number}),inputClassName:_.default.string,fontWeights:_.default.shape({medium:_.default.number}),colors:_.default.objectOf(_.default.string),getAutoSuggestIcons:_.default.objectOf(_.default.func),required:_.default.bool,modeSet:_.default.string,showScroll:_.default.bool,isEmbedded:_.default.bool}),bu.defaultProps={icon:void 0,value:"",transportMode:void 0,filterResults:void 0,onClear:void 0,lang:"fi",storeRef:void 0,handleViaPoints:void 0,focusChange:void 0,getAutoSuggestIcons:void 0,sources:[],targets:void 0,isMobile:!1,isEmbedded:!1,geocodingSize:void 0,pathOpts:{routesPrefix:"linjat",stopsPrefix:"pysakit"},ariaLabel:void 0,mobileLabel:void 0,inputClassName:"",translatedPlaceholder:void 0,fontWeights:{medium:500},colors:p.defaultColors,required:!1,modeSet:void 0,showScroll:!1,refPoint:{}};e.default=e=>v.default.createElement(n.I18nextProvider,{i18n:Me},v.default.createElement(bu,e)),Object.defineProperty(e,"__esModule",{value:!0})}));
|
|
3
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZGV2ZWxvcG1lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Qcm9wZXJ0eUtleS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1ByaW1pdGl2ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXRydS1lcS9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWlzLWR1cGxpY2F0ZS9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWhlbHBlcnMvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1maWx0ZXItbWF0Y2hpbmctdG8taW5wdXQvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1zZXJpYWxpemUvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtanNvbi9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1nZW9jb2RpbmctcmVzdWx0cy9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWV4ZWN1dGUtc2VhcmNoLWltbWlkaWF0ZS9pbmRleC5qcyIsIi4uL3NyYy91dGlscy9pMThuLmpzIiwiLi4vc3JjL3V0aWxzL3RyYW5zbGF0aW9ucy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1pbmplY3QvZGlzdC9zdHlsZS1pbmplY3QuZXMuanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC11bmlxLWJ5LWxhYmVsL2luZGV4LmpzIiwiLi4vc3JjL3V0aWxzL3V0aWxzLmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWxhYmVsL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0Boc2wtZmkvaG9va3MvbGliL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UuanMiLCIuLi9zcmMvY29tcG9uZW50cy9TdWdnZXN0aW9ucy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0NsZWFyQnV0dG9uLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvSW5wdXQuanMiLCIuLi9zcmMvY29tcG9uZW50cy9Nb2JpbGVWaWV3LmpzIiwiLi4vc3JjL3V0aWxzL3NlYXJjaFJlZHVjZXIuanMiLCIuLi9zcmMvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX3R5cGVvZihvKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvO1xuICB9IDogZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbztcbiAgfSwgX3R5cGVvZihvKTtcbn1cbmV4cG9ydCB7IF90eXBlb2YgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuaW1wb3J0IHRvUHJpbWl0aXZlIGZyb20gXCIuL3RvUHJpbWl0aXZlLmpzXCI7XG5mdW5jdGlvbiB0b1Byb3BlcnR5S2V5KHQpIHtcbiAgdmFyIGkgPSB0b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTtcbiAgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjtcbn1cbmV4cG9ydCB7IHRvUHJvcGVydHlLZXkgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuZnVuY3Rpb24gdG9QcmltaXRpdmUodCwgcikge1xuICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDtcbiAgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07XG4gIGlmICh2b2lkIDAgIT09IGUpIHtcbiAgICB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTtcbiAgICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7XG4gIH1cbiAgcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTtcbn1cbmV4cG9ydCB7IHRvUHJpbWl0aXZlIGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgdG9Qcm9wZXJ0eUtleSBmcm9tIFwiLi90b1Byb3BlcnR5S2V5LmpzXCI7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkge1xuICByZXR1cm4gKHIgPSB0b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHtcbiAgICB2YWx1ZTogdCxcbiAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICBjb25maWd1cmFibGU6ICEwLFxuICAgIHdyaXRhYmxlOiAhMFxuICB9KSA6IGVbcl0gPSB0LCBlO1xufVxuZXhwb3J0IHsgX2RlZmluZVByb3BlcnR5IGFzIGRlZmF1bHQgfTsiLCIvKipcbiAqICBhY2NlcHQgZXF1YWxpdHkgb2Ygbm9uIG51bGxpc2ggdmFsdWVzXG4gKlxuICogQG5hbWUgdHJ1RXFcbiAqIEBwYXJhbSB7Qm9vbGVhbnxOdW1iZXJ8QmlnSW50fFN0cmluZ3xTeW1ib2x8T2JqZWN0fSB2YWwxIEZpcnN0IHZhbHVlIHRvIGJlIGNvbXBhcmVkXG4gKiBAcGFyYW0ge0Jvb2xlYW58TnVtYmVyfEJpZ0ludHxTdHJpbmd8U3ltYm9sfE9iamVjdH0gcGFyYW0yIFNlY29uZCB2YWx1ZSB0byBiZSBjb21wYXJlZFxuICogQHJldHVybnMge0Jvb2xlYW59IHRydWUvZmFsc2VcbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC11dGlsLnRydUVxKCcyJywgJzInKTtcbiAqIC8vPXRydWVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdHJ1RXEodmFsMSwgdmFsMikge1xuICByZXR1cm4gdmFsMSAmJiB2YWwyICYmIHZhbDEgPT09IHZhbDI7XG59XG4iLCJpbXBvcnQgdHJ1RXEgZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXRydS1lcSc7XG4vKipcbiAqIENoZWNrcyB0aGF0IGlzIGl0ZW1zIGR1cGxpY2F0ZVxuICpcbiAqIEBuYW1lIGlzRHVwbGljYXRlXG4gKiBAcGFyYW0ge09iamVjdH0gaXRlbTEgT2JqZWN0IGNvbnRhaW5pbmcgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG4gKiB7XG4gKiAgcHJvcGVydGllcyB7XG4gKiAgICAgIGd0ZnNJZDogU3RyaW5nXG4gKiAgICAgIGdpZDogU3RyaW5nIGZyb20gZ2VvY29kZXJcbiAqICAgICAgbmFtZTogU3RyaW5nXG4gKiAgICAgIGxhYmVsOiBTdHJpbmdcbiAqICAgICAgIGFkZHJlc3M6IFN0cmluZ1xuICogICAgICBnZW9tZXRyeSB7XG4gKiAgICAgICAgIGNvb3JkaW5hdGVzIFtOdW1iZXIgbGF0LCBOdW1iZXIgbG9uXVxuICogICAgICB9XG4gKiAgfVxuICogfVxuICogQHBhcmFtIHtPYmplY3R9IGl0ZW0yIE9iamVjdCB3aXRoIHNhbWUgYXR0cmlidXRlcyBhcyBpdGVtMVxuICogQHJldHVybnMge0Jvb2xlYW59IHRydWUvZmFsc2VcbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC11dGlsLmlzRHVwbGljYXRlKHBhcmFtMSwgcGFyYW0yKTtcbiAqIC8vPXRydWVcbiAqL1xuXG5jb25zdCBndGZzU3RvcExheWVycyA9IFsnc3RvcCcsICdzdGF0aW9uJywgJ2Zhdm91cml0ZVN0b3AnLCAnZmF2b3VyaXRlU3RhdGlvbiddO1xuY29uc3QgdmVoaWNsZVJlbnRhbExheWVycyA9IFsnZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb24nLCAnYmlrZXN0YXRpb24nXTtcblxuZnVuY3Rpb24gbGFiZWxJZFRvR2lkKGlkKSB7XG4gIGlmICghaWQpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgY29uc3QgcGFydHMgPSBpZC5zcGxpdCgnOicpO1xuICBpZiAocGFydHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIHJldHVybiBgY2l0eWJpa2VzJHtwYXJ0c1swXX06YmlrZXN0YXRpb246JHtwYXJ0c1sxXX1gO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0R1cGxpY2F0ZShpdGVtMSwgaXRlbTIpIHtcbiAgY29uc3QgcHJvcHMxID0gaXRlbTEucHJvcGVydGllcztcbiAgY29uc3QgcHJvcHMyID0gaXRlbTIucHJvcGVydGllcztcblxuICBpZiAoaXRlbTEudHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJyAmJiBpdGVtMi50eXBlID09PSAnRnV0dXJlUm91dGUnKSB7XG4gICAgY29uc3QgbzEgPSBwcm9wczEub3JpZ2luO1xuICAgIGNvbnN0IGQxID0gcHJvcHMxLmRlc3RpbmF0aW9uO1xuICAgIGNvbnN0IG8yID0gcHJvcHMyLm9yaWdpbjtcbiAgICBjb25zdCBkMiA9IHByb3BzMi5kZXN0aW5hdGlvbjtcblxuICAgIGNvbnN0IG5hbWUxID0gYCR7bzEubmFtZX0vLyR7bzEubG9jYWxhZG1pbn0vLyR7ZDEubmFtZX0vLyR7ZDEubG9jYWxhZG1pbn1gO1xuICAgIGNvbnN0IG5hbWUyID0gYCR7bzIubmFtZX0vLyR7bzIubG9jYWxhZG1pbn0vLyR7ZDIubmFtZX0vLyR7ZDIubG9jYWxhZG1pbn1gO1xuXG4gICAgcmV0dXJuIG5hbWUxID09PSBuYW1lMjtcbiAgfVxuICBpZiAoaXRlbTEudHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJyB8fCBpdGVtMi50eXBlID09PSAnRnV0dXJlUm91dGUnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChcbiAgICB2ZWhpY2xlUmVudGFsTGF5ZXJzLmluY2x1ZGVzKHByb3BzMS5sYXllcikgJiZcbiAgICB2ZWhpY2xlUmVudGFsTGF5ZXJzLmluY2x1ZGVzKHByb3BzMi5sYXllcilcbiAgKSB7XG4gICAgY29uc3QgaWQxID0gcHJvcHMxLmdpZCB8fCBsYWJlbElkVG9HaWQocHJvcHMxLmxhYmVsSWQpO1xuICAgIGNvbnN0IGlkMiA9IHByb3BzMi5naWQgfHwgbGFiZWxJZFRvR2lkKHByb3BzMi5sYWJlbElkKTtcbiAgICByZXR1cm4gaWQxID09PSBpZDI7XG4gIH1cbiAgaWYgKHByb3BzMS5ndGZzSWQgJiYgcHJvcHMyLmd0ZnNJZCkge1xuICAgIHJldHVybiBwcm9wczEuZ3Rmc0lkID09PSBwcm9wczIuZ3Rmc0lkO1xuICB9XG4gIGlmIChcbiAgICBndGZzU3RvcExheWVycy5pbmNsdWRlcyhwcm9wczEubGF5ZXIpICYmXG4gICAgZ3Rmc1N0b3BMYXllcnMuaW5jbHVkZXMocHJvcHMyLmxheWVyKSAmJlxuICAgIHByb3BzMS5naWQgJiZcbiAgICBwcm9wczIuZ2lkXG4gICkge1xuICAgIHJldHVybiBwcm9wczEuZ2lkID09PSBwcm9wczIuZ2lkO1xuICB9XG5cbiAgY29uc3QgcDEgPSBpdGVtMSAmJiBpdGVtMS5nZW9tZXRyeSA/IGl0ZW0xLmdlb21ldHJ5LmNvb3JkaW5hdGVzIDogdW5kZWZpbmVkO1xuICBjb25zdCBwMiA9IGl0ZW0yICYmIGl0ZW0yLmdlb21ldHJ5ID8gaXRlbTIuZ2VvbWV0cnkuY29vcmRpbmF0ZXMgOiB1bmRlZmluZWQ7XG5cbiAgaWYgKHAxICYmIHAyKSB7XG4gICAgLy8gYm90aCBoYXZlIGdlb21ldHJ5XG4gICAgaWYgKE1hdGguYWJzKHAxWzBdIC0gcDJbMF0pIDwgMWUtNiAmJiBNYXRoLmFicyhwMVsxXSAtIHAyWzFdKSA8IDFlLTYpIHtcbiAgICAgIC8vIGxvY2F0aW9uIG1hdGNoIGlzIG5vdCBlbm91Z2guIFJlcXVpcmUgYSBjb21tb24gcHJvcGVydHlcbiAgICAgIGlmIChcbiAgICAgICAgdHJ1RXEocHJvcHMxLm5hbWUsIHByb3BzMi5uYW1lKSB8fFxuICAgICAgICB0cnVFcShwcm9wczEubGFiZWwsIHByb3BzMi5sYWJlbCkgfHxcbiAgICAgICAgdHJ1RXEocHJvcHMxLmFkZHJlc3MsIHByb3BzMi5hZGRyZXNzKSB8fFxuICAgICAgICB0cnVFcShwcm9wczEuYWRkcmVzcywgcHJvcHMyLmxhYmVsKSB8fFxuICAgICAgICB0cnVFcShwcm9wczEubGFiZWwsIHByb3BzMi5hZGRyZXNzKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG4iLCJpbXBvcnQgaXNTdHJpbmcgZnJvbSAnbG9kYXNoL2lzU3RyaW5nJztcbmltcG9ydCBvcmRlckJ5IGZyb20gJ2xvZGFzaC9vcmRlckJ5JztcbmltcG9ydCB1bmlxV2l0aCBmcm9tICdsb2Rhc2gvdW5pcVdpdGgnO1xuaW1wb3J0IGlzRHVwbGljYXRlIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1pcy1kdXBsaWNhdGUnO1xuXG5jb25zdCBub3JtYWxpemUgPSBzdHIgPT4ge1xuICBpZiAoIWlzU3RyaW5nKHN0cikpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgcmV0dXJuIHN0ci50b0xvd2VyQ2FzZSgpO1xufTtcblxuY29uc3Qgc3BsaXRTaG9ydE5hbWVBdExldHRlcnMgPSBzdHIgPT4ge1xuICByZXR1cm4gc3RyLnNwbGl0KC8oXFxwe0x9KykvdSk7XG59O1xuXG5jb25zdCB0ZXN0U2hvcnROYW1lTWF0Y2hlc0xpbmVXaXRoTnVtYmVyc0FuZExldHRlcnMgPSBzdHIgPT4ge1xuICByZXR1cm4gL15bMC05XStcXHB7TH0rJC91LnRlc3Qoc3RyKTtcbn07XG5cbi8qKlxuICogTGF5ZXJUeXBlIGRlcGljdHMgdGhlIHR5cGUgb2YgdGhlIHBvaW50LW9mLWludGVyZXN0LlxuICovXG5jb25zdCBMYXllclR5cGUgPSB7XG4gIEFkZHJlc3M6ICdhZGRyZXNzJyxcbiAgQmFjazogJ2JhY2snLFxuICBDdXJyZW50UG9zaXRpb246ICdjdXJyZW50UG9zaXRpb24nLFxuICBGYXZvdXJpdGVTdG9wOiAnZmF2b3VyaXRlU3RvcCcsXG4gIEZhdm91cml0ZVN0YXRpb246ICdmYXZvdXJpdGVTdGF0aW9uJyxcbiAgRmF2b3VyaXRlUGxhY2U6ICdmYXZvdXJpdGVQbGFjZScsXG4gIEZhdm91cml0ZVJvdXRlOiAnZmF2b3VyaXRlUm91dGUnLFxuICBGYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbjogJ2Zhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uJyxcbiAgRnV0dXJlUm91dGU6ICdmdXR1cmVSb3V0ZScsXG4gIFN0YXRpb246ICdzdGF0aW9uJyxcbiAgU2VsZWN0RnJvbU1hcDogJ3NlbGVjdEZyb21NYXAnLFxuICBTZWxlY3RGcm9tT3duTG9jYXRpb25zOiAnb3duTG9jYXRpb25zJyxcbiAgU3RvcDogJ3N0b3AnLFxuICBTdHJlZXQ6ICdzdHJlZXQnLFxuICBWZW51ZTogJ3ZlbnVlJyxcbiAgVmVoaWNsZVJlbnRhbFN0YXRpb246ICdiaWtlc3RhdGlvbicsXG4gIENhclBhcms6ICdjYXJwYXJrJyxcbiAgQmlrZVBhcms6ICdiaWtlcGFyaycsXG59O1xuZXhwb3J0IGNvbnN0IGlzU3RvcCA9ICh7IGxheWVyLCB0eXBlIH0pID0+XG4gIGxheWVyID09PSAnc3RvcCcgfHxcbiAgbGF5ZXIgPT09ICdmYXZvdXJpdGVTdG9wJyB8fFxuICB0eXBlID09PSAnc3RvcCcgfHxcbiAgdHlwZSA9PT0gJ2Zhdm91cml0ZVN0b3AnO1xuXG5jb25zdCBERUZBVUxUX1JPVVRFU19QUkVGSVggPSAnbGluamF0JztcbmNvbnN0IERFRkFVTFRfU1RPUFNfUFJFRklYID0gJ3B5c2FraXQnO1xuXG5leHBvcnQgY29uc3QgbWFwUm91dGUgPSAoaXRlbSwgcGF0aE9wdHMpID0+IHtcbiAgaWYgKGl0ZW0gPT09IG51bGwgfHwgaXRlbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBvcHRzID0gcGF0aE9wdHMgfHwge307XG5cbiAgY29uc3Qgcm91dGVzUHJlZml4ID0gb3B0cy5yb3V0ZXNQcmVmaXggfHwgREVGQVVMVF9ST1VURVNfUFJFRklYO1xuICBjb25zdCBzdG9wc1ByZWZpeCA9IG9wdHMuc3RvcHNQcmVmaXggfHwgREVGQVVMVF9TVE9QU19QUkVGSVg7XG5cbiAgY29uc3QgbGluayA9IGAvJHtyb3V0ZXNQcmVmaXh9LyR7ZW5jb2RlVVJJQ29tcG9uZW50KFxuICAgIGl0ZW0uZ3Rmc0lkLFxuICApfS8ke3N0b3BzUHJlZml4fWA7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ1JvdXRlJyxcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAuLi5pdGVtLFxuICAgICAgbGF5ZXI6IGByb3V0ZS0ke2l0ZW0ubW9kZX1gLFxuICAgICAgbGluayxcbiAgICB9LFxuICAgIGdlb21ldHJ5OiB7XG4gICAgICBjb29yZGluYXRlczogbnVsbCxcbiAgICB9LFxuICB9O1xufTtcblxuLyoqXG4gKiBUcmllcyB0byBtYXRjaCB0aGUgZ2l2ZW4gc2VhcmNoIHRlcm0gYWdhaW5zIHRoZSBjb2xsZWN0aW9uIG9mIHByb3BlcnRpZXNcbiAqIGZvciBhIGdlb2NvZGluZyByZXN1bHQgKG1pbjogMCwgbWF4OiAxLjUpLiBUaGUgYmVzdCBtYXRjaCB3aWxsIHJldHVybiBhIG51bWJlciBvZiAxLjUuXG4gKiBXb3JzZSBtYXRjaGVzIHdpbGwgcmV0dXJuIDAgb3IgMC41LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBub3JtYWxpemVkVGVybSB0aGUgbm9ybWFsaXplZCBzZWFyY2ggdGVybS5cbiAqIEBwYXJhbSB7Kn0gcmVzdWx0UHJvcGVydGllcyB0aGUgZ2VvY29kaW5nIHJlc3VsdCdzIHByb3BlcnR5IGNvbGxlY3Rpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBtYXRjaCA9IChub3JtYWxpemVkVGVybSwgcmVzdWx0UHJvcGVydGllcykgPT4ge1xuICBpZiAoIWlzU3RyaW5nKG5vcm1hbGl6ZWRUZXJtKSB8fCBub3JtYWxpemVkVGVybS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGNvbnN0IG1hdGNoUHJvcHMgPSBbJ25hbWUnLCAnbGFiZWwnLCAnYWRkcmVzcycsICdzaG9ydE5hbWUnXTtcbiAgcmV0dXJuIG1hdGNoUHJvcHNcbiAgICAubWFwKG5hbWUgPT4ge1xuICAgICAgcmV0dXJuIHsgbmFtZSwgdmFsdWU6IHJlc3VsdFByb3BlcnRpZXNbbmFtZV0gfTtcbiAgICB9KVxuICAgIC5maWx0ZXIoZWxlbWVudCA9PiBpc1N0cmluZyhlbGVtZW50LnZhbHVlKSAmJiBlbGVtZW50LnZhbHVlLmxlbmd0aCA+IDApXG4gICAgLm1hcChlbGVtZW50ID0+IHtcbiAgICAgIGxldCBub3JtYWxpemVkVmFsdWUgPSBub3JtYWxpemUoZWxlbWVudC52YWx1ZSk7XG4gICAgICBpZiAobm9ybWFsaXplZFZhbHVlLmluZGV4T2Yobm9ybWFsaXplZFRlcm0pID09PSAwKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBlbGVtZW50Lm5hbWUgPT09ICdzaG9ydE5hbWUnICYmXG4gICAgICAgICAgdGVzdFNob3J0TmFtZU1hdGNoZXNMaW5lV2l0aE51bWJlcnNBbmRMZXR0ZXJzKG5vcm1hbGl6ZWRWYWx1ZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIHNob3J0TmFtZSBpcyBvZiBhIGNlcnRhaW4gZm9ybWF0IChlLmcuIDg5QSksIGl0IGlzIHRyZWF0ZWQgaGVyZVxuICAgICAgICAgIC8vIGFzIGlmIGl0IGhhZCB0aGUgbGVuZ3RoIG9mIHRoZSBudW1iZXJzIHdpdGggdGhlIGxldHRlcnMgcmVtb3ZlZC5cbiAgICAgICAgICAvLyBTbyB0aGUgbGVuZ3RoIG9mIDg5QSB3b3VsZCBiZSB0cmVhdGVkIGFzIDIuXG4gICAgICAgICAgW25vcm1hbGl6ZWRWYWx1ZV0gPSBzcGxpdFNob3J0TmFtZUF0TGV0dGVycyhub3JtYWxpemVkVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGZ1bGwgbWF0Y2ggYXQgc3RhcnQuIFJldHVybiBtYXggcmVzdWx0IHdoZW4gbWF0Y2ggaXMgZnVsbCwgbm90IG9ubHkgcGFydGlhbFxuICAgICAgICByZXR1cm4gMC41ICsgbm9ybWFsaXplZFRlcm0ubGVuZ3RoIC8gbm9ybWFsaXplZFZhbHVlLmxlbmd0aDtcbiAgICAgIH1cbiAgICAgIC8vIGJlY2F1c2Ugb2YgZmlsdGVybWF0Y2hpbmd0b2lucHV0LCB3ZSBrbm93IHRoYXQgbWF0Y2ggb2NjdXJyZWQgc29tZXdoZXJlXG4gICAgICAvLyBkb24ndCBydW4gZmlsdGVybWF0Y2hpbmcgYWdhaW4gYnV0IGVzdGltYXRlIHJvdWdobHk6XG4gICAgICAvLyB0aGUgbG9uZ2VyIHRoZSBtYXRjaGluZyBzdHJpbmcsIHRoZSBiZXR0ZXIgY29uZmlkZW5jZSwgbWF4IGJlaW5nIDAuNVxuICAgICAgcmV0dXJuICgwLjUgKiBub3JtYWxpemVkVGVybS5sZW5ndGgpIC8gKG5vcm1hbGl6ZWRUZXJtLmxlbmd0aCArIDEpO1xuICAgIH0pXG4gICAgLnJlZHVjZShcbiAgICAgIChwcmV2aW91cywgY3VycmVudCkgPT4gKGN1cnJlbnQgPiBwcmV2aW91cyA/IGN1cnJlbnQgOiBwcmV2aW91cyksXG4gICAgICAwLFxuICAgICk7XG59O1xuXG4vKipcbiAqIFJhbmtzIHRoZSByZXN1bHQgYmFzZWQgb24gaXRzIGxheWVyIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYXllciB0aGUgbGF5ZXIgcHJvcGVydHkuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIHRoZSBzb3VyY2UgcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRMYXllclJhbmsgPSAobGF5ZXIsIHNvdXJjZSkgPT4ge1xuICBzd2l0Y2ggKGxheWVyKSB7XG4gICAgY2FzZSBMYXllclR5cGUuQ3VycmVudFBvc2l0aW9uOlxuICAgICAgcmV0dXJuIDE7XG4gICAgY2FzZSBMYXllclR5cGUuQmFjazpcbiAgICAgIHJldHVybiAwLjk7XG4gICAgY2FzZSBMYXllclR5cGUuU2VsZWN0RnJvbU1hcDpcbiAgICAgIHJldHVybiAwLjg7XG4gICAgY2FzZSBMYXllclR5cGUuU2VsZWN0RnJvbU93bkxvY2F0aW9uczpcbiAgICAgIHJldHVybiAwLjc5O1xuICAgIGNhc2UgTGF5ZXJUeXBlLkZhdm91cml0ZVN0YXRpb246XG4gICAgY2FzZSBMYXllclR5cGUuRmF2b3VyaXRlUGxhY2U6XG4gICAgY2FzZSBMYXllclR5cGUuRmF2b3VyaXRlU3RvcDpcbiAgICBjYXNlIExheWVyVHlwZS5GYXZvdXJpdGVSb3V0ZTpcbiAgICBjYXNlIExheWVyVHlwZS5GYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbjpcbiAgICAgIHJldHVybiAwLjQ1O1xuICAgIGNhc2UgTGF5ZXJUeXBlLkZ1dHVyZVJvdXRlOlxuICAgICAgcmV0dXJuIDAuNDQ7XG4gICAgY2FzZSBMYXllclR5cGUuU3RhdGlvbjoge1xuICAgICAgaWYgKGlzU3RyaW5nKHNvdXJjZSkgJiYgc291cmNlLmluZGV4T2YoJ2d0ZnMnKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gMC40MztcbiAgICAgIH1cbiAgICAgIHJldHVybiAwLjQyO1xuICAgIH1cbiAgICBjYXNlIExheWVyVHlwZS5DYXJQYXJrOlxuICAgICAgcmV0dXJuIDAuMzg7XG4gICAgY2FzZSBMYXllclR5cGUuQmlrZVBhcms6XG4gICAgICByZXR1cm4gMC4zODtcbiAgICBjYXNlIExheWVyVHlwZS5WZWhpY2xlUmVudGFsU3RhdGlvbjpcbiAgICAgIHJldHVybiAwLjM4O1xuICAgIGNhc2UgTGF5ZXJUeXBlLlN0b3A6XG4gICAgICByZXR1cm4gMC4zNjtcbiAgICBkZWZhdWx0OlxuICAgICAgLy8gdmVudWUsIGFkZHJlc3MsIHN0cmVldCwgcm91dGUteHh4XG4gICAgICByZXR1cm4gMC40MTtcbiAgfVxufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gc29ydCB0aGUgcmVzdWx0cy4gT3JkZXJzIGFzIGZvbGxvd3M6XG4gKiAgLSBjdXJyZW50IHBvc2l0aW9uIGZpcnN0IGZvciBhbiBlbXB0eSBzZWFyY2hcbiAqICAtIG1hdGNoaW5nIHJvdXRlcyBmaXJzdFxuICogIC0gb3RoZXJ3aXNlIGJ5IGNvbmZpZGVuY2UsIGV4Y2VwdCB0aGF0OlxuICogICAgLSBib29zdCB3ZWxsIG1hdGNoaW5nIHN0YXRpb25zIChlc3BlY2lhbGx5IGZyb20gR1RGUylcbiAqICAgIC0gcmFuayBzdG9wcyBsb3dlciBhcyB0aGV5IHRlbmQgdG8gb2NjdXB5IG1vc3Qgb2YgdGhlIHNlYXJjaCByZXN1bHRzXG4gKiAgLSBpdGVtcyB3aXRoIG5vIGNvbmZpZGVuY2UgKG9sZCBzZWFyY2hlcyBhbmQgZmF2b3JpdGVzKTpcbiAqICAgIC0gcmFuayBmYXZvdXJpdGVzIGJldHRlciB0aGFuIG9yZGluYXJ5IG9sZCBzZWFyY2hlc1xuICogICAgLSByYW5rIGZ1bGwgbWF0Y2ggYmV0dGVyIHRoYW4gcGFydGlhbCBtYXRjaFxuICogICAgLSByYW5rIG1hdGNoIGF0IG1pZGRsZSB3b3JkIGxvd2VyIHRoYW4gbWF0Y2ggYXQgdGhlIGJlZ2lubmluZ1xuICogICAgLSByYW5rIGJpa2UgcmVudGFsIHN0YXRpb25zIGxvd2VyXG4gKiBAcGFyYW0geypbXX0gcmVzdWx0cyBUaGUgc2VhcmNoIHJlc3VsdHMgdGhhdCB3ZXJlIHJlY2VpdmVkXG4gKiBAcGFyYW0ge1N0cmluZ30gdGVybSBUaGUgc2VhcmNoIHRlcm0gdGhhdCB3YXMgdXNlZFxuICovXG5leHBvcnQgY29uc3Qgc29ydFNlYXJjaFJlc3VsdHMgPSAobGluZVJlZ2V4cCwgcmVzdWx0cywgdGVybSA9ICcnKSA9PiB7XG4gIGlmICghQXJyYXkuaXNBcnJheShyZXN1bHRzKSB8fCAhcmVzdWx0cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfVxuICBjb25zdCBpc0xpbmVJZGVudGlmaWVyID0gdmFsdWUgPT5cbiAgICBpc1N0cmluZyh2YWx1ZSkgJiYgbGluZVJlZ2V4cCAmJiBsaW5lUmVnZXhwLnRlc3QodmFsdWUpO1xuXG4gIGNvbnN0IG5vcm1hbGl6ZWRUZXJtID0gbm9ybWFsaXplKHRlcm0pO1xuICBjb25zdCBpc0xpbmVTZWFyY2ggPSBpc0xpbmVJZGVudGlmaWVyKG5vcm1hbGl6ZWRUZXJtKTtcblxuICBjb25zdCBvcmRlcmVkUmVzdWx0cyA9IG9yZGVyQnkoXG4gICAgcmVzdWx0cy5maWx0ZXIociA9PiByKSxcbiAgICBbXG4gICAgICAvLyByYW5rIG1hdGNoaW5nIHJvdXRlcyBiZXN0XG4gICAgICByZXN1bHQgPT5cbiAgICAgICAgaXNMaW5lU2VhcmNoICYmXG4gICAgICAgIGlzTGluZUlkZW50aWZpZXIobm9ybWFsaXplKHJlc3VsdC5wcm9wZXJ0aWVzLnNob3J0TmFtZSkpICYmXG4gICAgICAgIG5vcm1hbGl6ZShyZXN1bHQucHJvcGVydGllcy5zaG9ydE5hbWUpLmluZGV4T2Yobm9ybWFsaXplZFRlcm0pID09PSAwXG4gICAgICAgICAgPyAxXG4gICAgICAgICAgOiAwLFxuXG4gICAgICByZXN1bHQgPT4ge1xuICAgICAgICBjb25zdCB7IGNvbmZpZGVuY2UsIGxheWVyLCBzb3VyY2UgfSA9IHJlc3VsdC5wcm9wZXJ0aWVzO1xuICAgICAgICBpZiAobm9ybWFsaXplZFRlcm0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgLy8gRG9pbmcgc2VhcmNoIHdpdGggZW1wdHkgc3RyaW5nLlxuICAgICAgICAgIC8vIE5vIGNvbmZpZGVuY2UgdG8gbWF0Y2gsIHNvIHVzZSByYW5rZWQgb2xkIHNlYXJjaGVzIGFuZCBmYXZvdXJpdGVzXG4gICAgICAgICAgcmV0dXJuIGdldExheWVyUmFuayhsYXllciwgc291cmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG11c3QgaGFuZGxlIGEgbWl4dXAgb2YgZ2VvY29kZXIgc2VhcmNoZXMgYW5kIGl0ZW1zIGFib3ZlXG4gICAgICAgIC8vIE5vcm1hbCBjb25maWRlbmNlIHJhbmdlIGZyb20gZ2VvY29kZXIgaXMgYWJvdXQgMC4zIC4uIDFcbiAgICAgICAgaWYgKCFjb25maWRlbmNlKSB7XG4gICAgICAgICAgLy8gbm90IGZyb20gZ2VvY29kZXIsIGVzdGltYXRlIGNvbmZpZGVuY2Ugb3Vyc2VsdmVzXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGdldExheWVyUmFuayhsYXllciwgc291cmNlKSArXG4gICAgICAgICAgICBtYXRjaChub3JtYWxpemVkVGVybSwgcmVzdWx0LnByb3BlcnRpZXMpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBnZW9jb2RlZCBpdGVtcyB3aXRoIGNvbmZpZGVuY2UsIGp1c3QgYWRqdXN0IGEgbGl0dGxlXG4gICAgICAgIHN3aXRjaCAobGF5ZXIpIHtcbiAgICAgICAgICBjYXNlIExheWVyVHlwZS5TdGF0aW9uOiB7XG4gICAgICAgICAgICBjb25zdCBib29zdCA9IHNvdXJjZS5pbmRleE9mKCdndGZzJykgPT09IDAgPyAwLjAyIDogMC4wMTtcbiAgICAgICAgICAgIHJldHVybiBjb25maWRlbmNlICsgYm9vc3Q7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgTGF5ZXJUeXBlLlN0b3A6XG4gICAgICAgICAgICByZXR1cm4gY29uZmlkZW5jZSAtIDAuMDU7XG4gICAgICAgICAgY2FzZSBMYXllclR5cGUuQ2FyUGFyazpcbiAgICAgICAgICAgIHJldHVybiBjb25maWRlbmNlIC0gMC4wNTtcbiAgICAgICAgICBjYXNlIExheWVyVHlwZS5CaWtlUGFyazpcbiAgICAgICAgICAgIHJldHVybiBjb25maWRlbmNlIC0gMC4wNTtcbiAgICAgICAgICBjYXNlIExheWVyVHlwZS5WZWhpY2xlUmVudGFsU3RhdGlvbjpcbiAgICAgICAgICAgIHJldHVybiBjb25maWRlbmNlIC0gMC4wNDtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZGVuY2U7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICByZXN1bHQgPT4ge1xuICAgICAgICBpZiAocmVzdWx0LnByb3BlcnRpZXMuc2hvcnROYW1lKSB7XG4gICAgICAgICAgcmV0dXJuIHRlc3RTaG9ydE5hbWVNYXRjaGVzTGluZVdpdGhOdW1iZXJzQW5kTGV0dGVycyhcbiAgICAgICAgICAgIHJlc3VsdC5wcm9wZXJ0aWVzLnNob3J0TmFtZSxcbiAgICAgICAgICApXG4gICAgICAgICAgICA/IHNwbGl0U2hvcnROYW1lQXRMZXR0ZXJzKHJlc3VsdC5wcm9wZXJ0aWVzLnNob3J0TmFtZSlbMF1cbiAgICAgICAgICAgIDogcmVzdWx0LnByb3BlcnRpZXMuc2hvcnROYW1lO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9LFxuICAgICAgcmVzdWx0ID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdC5wcm9wZXJ0aWVzLnNob3J0TmFtZSkge1xuICAgICAgICAgIHJldHVybiB0ZXN0U2hvcnROYW1lTWF0Y2hlc0xpbmVXaXRoTnVtYmVyc0FuZExldHRlcnMoXG4gICAgICAgICAgICByZXN1bHQucHJvcGVydGllcy5zaG9ydE5hbWUsXG4gICAgICAgICAgKVxuICAgICAgICAgICAgPyBzcGxpdFNob3J0TmFtZUF0TGV0dGVycyhyZXN1bHQucHJvcGVydGllcy5zaG9ydE5hbWUpWzFdXG4gICAgICAgICAgICA6IHJlc3VsdC5wcm9wZXJ0aWVzLnNob3J0TmFtZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSxcbiAgICAgICdwcm9wZXJ0aWVzLmxvbmdOYW1lJyxcbiAgICBdLFxuICAgIFsnZGVzYycsICdkZXNjJywgJ2FzYycsICdhc2MnLCAnYXNjJ10sXG4gICk7XG5cbiAgcmV0dXJuIHVuaXFXaXRoKG9yZGVyZWRSZXN1bHRzLCBpc0R1cGxpY2F0ZSk7XG59O1xuXG4vKipcbiAqIFBhcnNlcyBzdG9wJ3MgbmFtZSB3aXRob3V0IHN0b3AgY29kZSBmcm9tIGEgc3RvcCBuYW1lIGZyb20gZ2VvY29kaW5nIHJlc3VsdHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFiZWwgc3RvcCdzIG5hbWUgZnJvbSBnZW9jb2RpbmcgcmVzdWx0cy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdG9wQ29kZSBzdG9wIGNvZGUuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRTdG9wTmFtZSA9IChuYW1lLCBzdG9wQ29kZSkgPT4ge1xuICBpZiAoXG4gICAgc3RvcENvZGUgIT09IHVuZGVmaW5lZCAmJlxuICAgIHN0b3BDb2RlICE9PSBudWxsICYmXG4gICAgbmFtZS5sYXN0SW5kZXhPZihzdG9wQ29kZSkgIT09IC0xXG4gICkge1xuICAgIHJldHVybiBuYW1lLnN1YnN0cmluZygwLCBuYW1lLmxhc3RJbmRleE9mKHN0b3BDb2RlKSAtIDEpO1xuICB9XG4gIHJldHVybiBuYW1lO1xufTtcbiIsImltcG9ydCBnZXQgZnJvbSAnbG9kYXNoL2dldCc7XG5cbi8qKlxuICogRnVuY3Rpb24gdGhhdCBmaWx0ZXJzIGxpc3QgbWF0Y2hpbmcgdG8gaW5wdXQuXG4gKlxuICogQG5hbWUgZmlsdGVyTWF0Y2hpbmdUb0lucHV0XG4gKiBAcGFyYW0ge0FycmF5fSBsaXN0IExpc3QgY29udGFpbmluIG9iamVjdHMgZS5nKCAge1xuICogICAgICAgICB0eXBlOiAnRmVhdHVyZSdcbiAqICAgICAgICAgcHJvcGVydGllczoge1xuICogICAgICAgICAgIGxhYmVsOiAndGVzdGFkZHJlc3M0JyxcbiAqICAgICAgICAgICBsYXllcjogJ2FkZHJlc3MnLFxuICogICAgICAgICAgIG5hbWU6ICd0ZXN0YWRkcmVzczQnLFxuICogICAgICAgICB9LFxuICogICAgICAgICBnZW9tZXRyeTogeyBjb29yZGluYXRlczogW2xvbiwgbGF0XSB9LFxuICogICAgICAgfSwpXG4gKiBAcGFyYW0ge1N0cmluZ30gSW5wdXQgSW5wdXQgZ2l2ZW4gZm9yIGZpbHRlcmluZyB0aGUgbGlzdFxuICogQHBhcmFtIHtBcnJheX0gZmllbGRzIExpc3Qgb2YgZmllbGRzIHRoYXQgbGlzdCBpcyBmaWx0ZXJlZCBieSBlLmcgKFtwcm9wZXJ0aWVzLmxhYmVsLCBwcm9wZXJ0aWVzLm5hbWVdKVxuICogQHJldHVybnMge0FycmF5fSBGaWx0ZXJlZCBBcnJheS5cbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC11dGlsLmZpbHRlck1hdGNoaW5nVG9JbnB1dChbe3R5cGU6IGZlYXR1cmUsIHByb3BlcnRpZXMgeyAuLi4gbmFtZTogdGVzdGFkZHJlc3M0IH0gLi4uIH1dLCAndGVzdGFkZHJlc3M0JywgJ3Byb3BlcnRpZXMubmFtZScpO1xuICogLy89IExpc3QgY29udGFpbmluZyBvYmplY3Qgd2l0aCBnaXZlbiBuYW1lLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmaWx0ZXJNYXRjaGluZ1RvSW5wdXQobGlzdCwgSW5wdXQsIGZpZWxkcykge1xuICBpZiAodHlwZW9mIElucHV0ID09PSAnc3RyaW5nJyAmJiBJbnB1dC5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgaW5wdXQgPSBJbnB1dC50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICBjb25zdCBtdWx0aVdvcmQgPSBpbnB1dC5pbmNsdWRlcygnICcpIHx8IGlucHV0LmluY2x1ZGVzKCcsJyk7XG4gICAgcmV0dXJuIGxpc3QuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgbGV0IHBhcnRzID0gW107XG4gICAgICBmaWVsZHMuZm9yRWFjaChwTmFtZSA9PiB7XG4gICAgICAgIGxldCB2YWx1ZSA9IGdldChpdGVtLCBwTmFtZSk7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICFtdWx0aVdvcmQgJiZcbiAgICAgICAgICAocE5hbWUgPT09ICdwcm9wZXJ0aWVzLmxhYmVsJyB8fCBwTmFtZSA9PT0gJ2FkZHJlc3MnKSAmJlxuICAgICAgICAgIHZhbHVlXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIHNwZWNpYWwgY2FzZTogZHJvcCBsYXN0IHBhcnRzIGkuZS4gY2l0eSBhbmQgbmVpZ2hib3VyaG9vZFxuICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoJywnKTtcbiAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgdmFsdWUuc3BsaWNlKHZhbHVlLmxlbmd0aCAtIDIsIDIpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgdmFsdWUuc3BsaWNlKHZhbHVlLmxlbmd0aCAtIDEsIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlLmpvaW4oJywnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICBpZiAobXVsdGlXb3JkKSB7XG4gICAgICAgICAgICBwYXJ0cyA9IHBhcnRzLmNvbmNhdCh2YWx1ZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFydHMgPSBwYXJ0cy5jb25jYXQoXG4gICAgICAgICAgICAgIHZhbHVlLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvLC9nLCAnICcpLnNwbGl0KCcgJyksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChwYXJ0c1tpXS5pbmRleE9mKGlucHV0KSA9PT0gMCkge1xuICAgICAgICAgIC8vIGFjY2VwdCBtYXRjaCBvbmx5IGF0IHdvcmQgc3RhcnRcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGxpc3Q7XG59XG4iLCIvKipcbiAqIFNlcmlhbGl6ZXMgb2JqZWN0c1xuICpcbiAqIEBuYW1lIHNlcmlhbGl6ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBPYmplY3QgdG8gYmUgc2VyaWFsaXplZFxuICogQHBhcmFtIHtBbnl9IHByZWZpeFxuICogQHJldHVybnMge1N0cmluZ30gU2VyaWFsaXplZCBvYmplY3RcbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC5zZXJpYWxpemUocGFyYW0xLCBwYXJhbTIpO1xuICogLy89dHJ1ZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzZXJpYWxpemUob2JqLCBwcmVmaXgpIHtcbiAgaWYgKCFvYmopIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iailcbiAgICAubWFwKHAgPT4ge1xuICAgICAgY29uc3QgayA9IHByZWZpeCB8fCBwO1xuICAgICAgY29uc3QgdiA9IG9ialtwXTtcblxuICAgICAgcmV0dXJuIHR5cGVvZiB2ID09PSAnb2JqZWN0J1xuICAgICAgICA/IHNlcmlhbGl6ZSh2LCBrKVxuICAgICAgICA6IGAke2VuY29kZVVSSUNvbXBvbmVudChrKX09JHtlbmNvZGVVUklDb21wb25lbnQodil9YDtcbiAgICB9KVxuICAgIC5qb2luKCcmJyk7XG59XG4iLCJpbXBvcnQgc2VyaWFsaXplIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1zZXJpYWxpemUnO1xuLyoqXG4gKiAgUmV0dXJuIFByb21pc2UgZm9yIGEgdXJsIGpzb24gZ2V0IHJlcXVlc3RcbiAqXG4gKiBAbmFtZSBnZXRKc29uXG4gKiBAcGFyYW0ge1N0cmluZ30gdXJsXG4gKiBAcGFyYW0ge0FycmF5fSBwYXJhbXNcbiAqIEByZXR1cm5zIHtPYmplY3R9IHJlc3BvbnNlXG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwuZ2V0SnNvbihwYXJhbTEsIHBhcmFtMik7XG4gKiAvLz1yZXNwb25zZVxuICovXG5jb25zdCBheGlvcyA9IHJlcXVpcmUoJ2F4aW9zJykuZGVmYXVsdDtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0SnNvbih1cmwsIHBhcmFtcykge1xuICByZXR1cm4gYXhpb3NcbiAgICAuZ2V0KFxuICAgICAgZW5jb2RlVVJJKHVybCkgK1xuICAgICAgICAocGFyYW1zXG4gICAgICAgICAgPyAodXJsLnNlYXJjaCgvXFw/LykgPT09IC0xID8gJz8nIDogJyYnKSArIHNlcmlhbGl6ZShwYXJhbXMpXG4gICAgICAgICAgOiAnJyksXG4gICAgICB7XG4gICAgICAgIHRpbWVvdXQ6IDEwMDAwLFxuICAgICAgICBtZXRob2Q6ICdHRVQnLFxuXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgKVxuICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICByZXR1cm4gcmVzLmRhdGE7XG4gICAgfSk7XG59XG4iLCJpbXBvcnQgZ2V0SnNvbiBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWpzb24nO1xuXG5jb25zdCBERUZBVUxUX1BFTElBU19VUkwgPSAnaHR0cHM6Ly9hcGkuZGlnaXRyYW5zaXQuZmkvZ2VvY29kaW5nL3YxL3NlYXJjaCc7XG4vKipcbiAqIDxERVNDUklQVElPTj5cbiAqXG4gKiBAbmFtZSBnZXRHZW9jb2RpbmdSZXN1bHRzXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VhcmNoU3RyaW5nXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VhcmNoUGFyYW1zIChPcHRpb25hbCkgUGFyYW1ldGVycyBhcHBlbmRlZCB0byB1cmwsIGJhc2ljYWxseSBib3ggLyBwb2x5Z29uIHRvIHJlc3RyaWN0IHNlYXJjaCBhcmVhXG4gKiBAcGFyYW0ge1N0cmluZ30gbGFuZyAoT3B0aW9uYWwpIHNlYXJjaCBsYW5ndWFnZVxuICogQHBhcmFtIHtPYmplY3R9IGZvY3VzUG9pbnQgKE9wdGlvbmFsKSBPd24gUG9zaXRpb24gKFBFTElBUyBBUEkpXG4gKiBAcGFyYW0ge1N0cmluZ30gc291cmNlcyAoT3B0aW9uYWwpIHNlYXJjaCBzb3VyY2VzIChlLmcgT1NNLCBHVEZTLi4pXG4gKiBAcGFyYW0ge09iamVjdH0gbWluaW1hbFJlZ2V4cCAoT3B0aW9uYWwpIFJlZ2V4cCBmb3IgdGVzdGluZ1xuICogQHBhcmFtIHsqfSBnZW9jb2RpbmdMYXllcnMgKE9wdGlvbmFsKSBBcnJheSBvZiBzdHJpbmdzIHRoYXQgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hpY2ggbGF5ZXJzIGlzIHNlYXJjaGVkLCBlLmcuIFsndmVudWUnLCAnYWRkcmVzcycsICdzdG9wJ11cbiAqIEByZXR1cm5zIHtTdHJpbmd9IFJlc3VsdHMgaW4gSlNPTiBmb3JtXG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwuZ2V0R2VvY29kaW5nUmVzdWx0cyhcInJlc3VsdFwiKTtcbiAqIC8vPSBlLmcuIHt0ZXh0OlwicmVzdWx0XCJ9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEdlb2NvZGluZ1Jlc3VsdHMoXG4gIHNlYXJjaFN0cmluZyxcbiAgc2VhcmNoUGFyYW1zLFxuICBsYW5nLFxuICBmb2N1c1BvaW50LFxuICBzb3VyY2VzLFxuICBwZWxpYXNVcmwsXG4gIG1pbmltYWxSZWdleHAsXG4gIGdlb2NvZGluZ0xheWVycyxcbikge1xuICBjb25zdCB0ZXh0ID0gc2VhcmNoU3RyaW5nID8gc2VhcmNoU3RyaW5nLnRyaW0oKSA6IG51bGw7XG4gIGlmIChcbiAgICB0ZXh0ID09PSB1bmRlZmluZWQgfHxcbiAgICB0ZXh0ID09PSBudWxsIHx8XG4gICAgdGV4dC5sZW5ndGggPCAxIHx8XG4gICAgKG1pbmltYWxSZWdleHAgJiYgIW1pbmltYWxSZWdleHAudGVzdCh0ZXh0KSlcbiAgKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG4gIH1cbiAgY29uc3QgUEVMSUFTX1VSTCA9IHBlbGlhc1VybCB8fCBERUZBVUxUX1BFTElBU19VUkw7XG4gIGxldCBvcHRzID0geyB0ZXh0LCAuLi5zZWFyY2hQYXJhbXMsIC4uLmZvY3VzUG9pbnQsIGxhbmcgfTtcbiAgaWYgKHNvdXJjZXMpIHtcbiAgICBvcHRzID0geyAuLi5vcHRzLCBzb3VyY2VzIH07XG4gIH1cbiAgaWYgKGdlb2NvZGluZ0xheWVycykge1xuICAgIGNvbnN0IGxheWVycyA9IGdlb2NvZGluZ0xheWVycy50b1N0cmluZygpO1xuICAgIG9wdHMgPSB7IC4uLm9wdHMsIGxheWVycyB9O1xuICB9XG4gIHJldHVybiBnZXRKc29uKFBFTElBU19VUkwsIG9wdHMpLnRoZW4ocmVzID0+IHtcbiAgICByZXR1cm4gcmVzLmZlYXR1cmVzO1xuICB9KTtcbn1cbiIsImltcG9ydCBkZWJvdW5jZSBmcm9tICdsb2Rhc2gvZGVib3VuY2UnO1xuaW1wb3J0IGZsYXR0ZW4gZnJvbSAnbG9kYXNoL2ZsYXR0ZW4nO1xuaW1wb3J0IHRha2UgZnJvbSAnbG9kYXNoL3Rha2UnO1xuaW1wb3J0IHtcbiAgc29ydFNlYXJjaFJlc3VsdHMsXG4gIGlzU3RvcCxcbn0gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWhlbHBlcnMnO1xuaW1wb3J0IGZpbHRlck1hdGNoaW5nVG9JbnB1dCBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZmlsdGVyLW1hdGNoaW5nLXRvLWlucHV0JztcbmltcG9ydCBnZXRHZW9jb2RpbmdSZXN1bHRzIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMnO1xuaW1wb3J0IGdldEpzb24gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1qc29uJztcblxuZnVuY3Rpb24gZ2V0U3RvcHNGcm9tR2VvY29kaW5nKHN0b3BzLCBVUkxfUEVMSUFTX1BMQUNFKSB7XG4gIGlmICghc3RvcHMgfHwgc3RvcHMubGVuZ3RoIDwgMSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuICB9XG4gIGxldCBnaWRzID0gJyc7XG4gIGNvbnN0IHN0b3BzV2l0aEdpZHMgPSBzdG9wcy5tYXAoc3RvcCA9PiB7XG4gICAgY29uc3QgdHlwZSA9IHN0b3AudHlwZSA9PT0gJ3N0b3AnID8gJ3N0b3AnIDogJ3N0YXRpb24nO1xuICAgIGxldCBnaWQgPSBgZ3RmcyR7c3RvcC5ndGZzSWQuc3BsaXQoJzonKVswXS50b0xvd2VyQ2FzZSgpfToke3R5cGV9OkdURlM6JHtcbiAgICAgIHN0b3AuZ3Rmc0lkXG4gICAgfWA7XG4gICAgaWYgKHN0b3AuY29kZSkge1xuICAgICAgZ2lkICs9IGAjJHtzdG9wLmNvZGV9YDtcbiAgICB9XG4gICAgZ2lkcyArPSBgJHtnaWR9LGA7XG4gICAgcmV0dXJuIHsgLi4uc3RvcCwgZ2lkIH07XG4gIH0pO1xuICBjb25zdCBzdG9wU3RhdGlvbk1hcCA9IHN0b3BzV2l0aEdpZHMucmVkdWNlKGZ1bmN0aW9uIHJlZHUoXG4gICAgbWFwLFxuICAgIHN0b3BPclN0YXRpb24sXG4gICkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgIG1hcFtzdG9wT3JTdGF0aW9uLmdpZF0gPSBzdG9wT3JTdGF0aW9uO1xuICAgIHJldHVybiBtYXA7XG4gIH0sIHt9KTtcbiAgcmV0dXJuIGdldEpzb24oVVJMX1BFTElBU19QTEFDRSwge1xuICAgIGlkczogZ2lkcy5zbGljZSgwLCAtMSksXG4gICAgLy8gbGFuZzogY29udGV4dC5nZXRTdG9yZSgnUHJlZmVyZW5jZXNTdG9yZScpLmdldExhbmd1YWdlKCksIFRPRE8gZW5hYmxlIHRoaXMgd2hlbiBPVFAgc3VwcG9ydHMgdHJhbnNsYXRpb25zXG4gIH0pLnRoZW4ocmVzID0+IHtcbiAgICByZXR1cm4gcmVzLmZlYXR1cmVzLm1hcChzdG9wID0+IHtcbiAgICAgIGNvbnN0IGZhdm91cml0ZSA9IHtcbiAgICAgICAgdHlwZTogJ0Zhdm91cml0ZVN0b3AnLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgYWRkZW5kdW06IHN0b3AucHJvcGVydGllcy5hZGRlbmR1bSxcbiAgICAgICAgICBnaWQ6IHN0b3BTdGF0aW9uTWFwW3N0b3AucHJvcGVydGllcy5naWRdLmdpZCxcbiAgICAgICAgICBjb2RlOiBzdG9wU3RhdGlvbk1hcFtzdG9wLnByb3BlcnRpZXMuZ2lkXS5jb2RlLFxuICAgICAgICAgIGd0ZnNJZDogc3RvcFN0YXRpb25NYXBbc3RvcC5wcm9wZXJ0aWVzLmdpZF0uZ3Rmc0lkLFxuICAgICAgICAgIGxhc3RVcGRhdGVkOiBzdG9wU3RhdGlvbk1hcFtzdG9wLnByb3BlcnRpZXMuZ2lkXS5sYXN0VXBkYXRlZCxcbiAgICAgICAgICBmYXZvdXJpdGVJZDogc3RvcFN0YXRpb25NYXBbc3RvcC5wcm9wZXJ0aWVzLmdpZF0uZmF2b3VyaXRlSWQsXG4gICAgICAgICAgYWRkcmVzczogc3RvcC5wcm9wZXJ0aWVzLmxhYmVsLFxuICAgICAgICAgIGxheWVyOiBpc1N0b3Aoc3RvcC5wcm9wZXJ0aWVzKSA/ICdmYXZvdXJpdGVTdG9wJyA6ICdmYXZvdXJpdGVTdGF0aW9uJyxcbiAgICAgICAgfSxcbiAgICAgICAgZ2VvbWV0cnk6IHN0b3AuZ2VvbWV0cnksXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGZhdm91cml0ZTtcbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBmaWx0ZXJGYXZvdXJpdGVMb2NhdGlvbnMoZmF2b3VyaXRlcywgaW5wdXQpIHtcbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcbiAgICBmaWx0ZXJNYXRjaGluZ1RvSW5wdXQoZmF2b3VyaXRlcywgaW5wdXQsIFsnYWRkcmVzcycsICduYW1lJ10pLm1hcChpdGVtID0+ICh7XG4gICAgICB0eXBlOiAnRmF2b3VyaXRlUGxhY2UnLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAuLi5pdGVtLFxuICAgICAgICBsYWJlbDogaXRlbS5uYW1lLFxuICAgICAgICBsYXllcjogJ2Zhdm91cml0ZVBsYWNlJyxcbiAgICAgIH0sXG4gICAgICBnZW9tZXRyeTogeyB0eXBlOiAnUG9pbnQnLCBjb29yZGluYXRlczogW2l0ZW0ubG9uLCBpdGVtLmxhdF0gfSxcbiAgICB9KSksXG4gICk7XG59XG5mdW5jdGlvbiBzZWxlY3RQb3NpdGlvbkZvbU1hcChpbnB1dCkge1xuICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJyB8fCBpbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ1NlbGVjdEZyb21NYXAnLFxuICAgICAgICBhZGRyZXNzOiAnU2VsZWN0RnJvbU1hcCcsXG4gICAgICAgIGxhdDogbnVsbCxcbiAgICAgICAgbG9uOiBudWxsLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgbGFiZWxJZDogJ3NlbGVjdC1mcm9tLW1hcCcsXG4gICAgICAgICAgbGF5ZXI6ICdzZWxlY3RGcm9tTWFwJyxcbiAgICAgICAgICBhZGRyZXNzOiAnU2VsZWN0RnJvbU1hcCcsXG4gICAgICAgICAgbGF0OiBudWxsLFxuICAgICAgICAgIGxvbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAgZ2VvbWV0cnk6IHtcbiAgICAgICAgICB0eXBlOiAnUG9pbnQnLFxuICAgICAgICAgIGNvb3JkaW5hdGVzOiBbXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgXSk7XG4gIH1cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG59XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRQb3NpdGlvbklmRW1wdHkoaW5wdXQsIHBvc2l0aW9uKSB7XG4gIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnIHx8IGlucHV0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnQ3VycmVudExvY2F0aW9uJyxcbiAgICAgICAgYWRkcmVzczogcG9zaXRpb24uYWRkcmVzcyxcbiAgICAgICAgbGF0OiBwb3NpdGlvbi5sYXQsXG4gICAgICAgIGxvbjogcG9zaXRpb24ubG9uLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgbGFiZWxJZDogJ3VzZS1vd24tcG9zaXRpb24nLFxuICAgICAgICAgIGxheWVyOiAnY3VycmVudFBvc2l0aW9uJyxcbiAgICAgICAgICBhZGRyZXNzOiBwb3NpdGlvbi5hZGRyZXNzLFxuICAgICAgICAgIGxhdDogcG9zaXRpb24ubGF0LFxuICAgICAgICAgIGxvbjogcG9zaXRpb24ubG9uLFxuICAgICAgICB9LFxuICAgICAgICBnZW9tZXRyeToge1xuICAgICAgICAgIHR5cGU6ICdQb2ludCcsXG4gICAgICAgICAgY29vcmRpbmF0ZXM6IFtwb3NpdGlvbi5sb24sIHBvc2l0aW9uLmxhdF0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF0pO1xuICB9XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG59XG5cbmZ1bmN0aW9uIHNlbGVjdEZyb21Pd25Mb2NhdGlvbnMoaW5wdXQpIHtcbiAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycgfHwgaW5wdXQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdTZWxlY3RGcm9tT3duTG9jYXRpb25zJyxcbiAgICAgICAgYWRkcmVzczogJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnLFxuICAgICAgICBsYXQ6IG51bGwsXG4gICAgICAgIGxvbjogbnVsbCxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGxhYmVsSWQ6ICdzZWxlY3QtZnJvbS1vd24tbG9jYXRpb25zJyxcbiAgICAgICAgICBsYXllcjogJ293bkxvY2F0aW9ucycsXG4gICAgICAgICAgYWRkcmVzczogJ3NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnLFxuICAgICAgICAgIGxhdDogbnVsbCxcbiAgICAgICAgICBsb246IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIGdlb21ldHJ5OiB7XG4gICAgICAgICAgdHlwZTogJ1BvaW50JyxcbiAgICAgICAgICBjb29yZGluYXRlczogW10sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF0pO1xuICB9XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xufVxuXG5mdW5jdGlvbiBnZXRCYWNrU3VnZ2VzdGlvbigpIHtcbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXG4gICAge1xuICAgICAgdHlwZTogJ2JhY2snLFxuICAgICAgYWRkcmVzczogJ2JhY2snLFxuICAgICAgbGF0OiBudWxsLFxuICAgICAgbG9uOiBudWxsLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBsYWJlbElkOiAnYmFjaycsXG4gICAgICAgIGxheWVyOiAnYmFjaycsXG4gICAgICAgIGFkZHJlc3M6ICdiYWNrJyxcbiAgICAgICAgbGF0OiBudWxsLFxuICAgICAgICBsb246IG51bGwsXG4gICAgICB9LFxuICAgICAgZ2VvbWV0cnk6IHtcbiAgICAgICAgdHlwZTogJ1BvaW50JyxcbiAgICAgICAgY29vcmRpbmF0ZXM6IFtdLFxuICAgICAgfSxcbiAgICB9LFxuICBdKTtcbn1cblxuZnVuY3Rpb24gZmlsdGVyRmF2b3VyaXRlU3RvcHMoc3RvcHNBbmRTdGF0aW9ucywgaW5wdXQsIHVzZVN0b3BzLCB1c2VTdGF0aW9ucykge1xuICByZXR1cm4gc3RvcHNBbmRTdGF0aW9ucy50aGVuKHN0b3BzU3RhdGlvbnMgPT4ge1xuICAgIGNvbnN0IGNhbmRpZGF0ZXMgPSBzdG9wc1N0YXRpb25zLmZpbHRlcihzID0+XG4gICAgICBzLnR5cGUgPT09ICdzdG9wJyA/IHVzZVN0b3BzIDogdXNlU3RhdGlvbnMsXG4gICAgKTtcbiAgICByZXR1cm4gZmlsdGVyTWF0Y2hpbmdUb0lucHV0KGNhbmRpZGF0ZXMsIGlucHV0LCBbXG4gICAgICAncHJvcGVydGllcy5uYW1lJyxcbiAgICAgICdwcm9wZXJ0aWVzLm5hbWUnLFxuICAgICAgJ3Byb3BlcnRpZXMuYWRkcmVzcycsXG4gICAgXSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBmaWx0ZXJPbGRTZWFyY2hlcyhvbGRTZWFyY2hlcywgaW5wdXQsIGRyb3BMYXllcnMpIHtcbiAgbGV0IG1hdGNoaW5nT2xkU2VhcmNoZXMgPSBmaWx0ZXJNYXRjaGluZ1RvSW5wdXQob2xkU2VhcmNoZXMsIGlucHV0LCBbXG4gICAgJ3Byb3BlcnRpZXMubmFtZScsXG4gICAgJ3Byb3BlcnRpZXMubGFiZWwnLFxuICAgICdwcm9wZXJ0aWVzLmFkZHJlc3MnLFxuICAgICdwcm9wZXJ0aWVzLnNob3J0TmFtZScsXG4gICAgJ3Byb3BlcnRpZXMubG9uZ05hbWUnLFxuICBdKTtcbiAgaWYgKGRyb3BMYXllcnMpIHtcbiAgICAvLyBkb24ndCB3YW50IHRoZXNlXG4gICAgbWF0Y2hpbmdPbGRTZWFyY2hlcyA9IG1hdGNoaW5nT2xkU2VhcmNoZXMuZmlsdGVyKFxuICAgICAgaXRlbSA9PiAhZHJvcExheWVycy5pbmNsdWRlcyhpdGVtLnByb3BlcnRpZXMubGF5ZXIpLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcbiAgICB0YWtlKG1hdGNoaW5nT2xkU2VhcmNoZXMsIDEwKS5tYXAoaXRlbSA9PiB7XG4gICAgICBjb25zdCBuZXdJdGVtID0ge1xuICAgICAgICAuLi5pdGVtLFxuICAgICAgICB0eXBlOiAnT2xkU2VhcmNoJyxcbiAgICAgICAgdGltZXRhYmxlQ2xpY2tlZDogZmFsc2UsIC8vIHJlc2V0IGxhdGVzdCBzZWxlY3Rpb24gYWN0aW9uXG4gICAgICAgIGFycm93Q2xpY2tlZDogZmFsc2UsXG4gICAgICB9O1xuICAgICAgZGVsZXRlIG5ld0l0ZW0ucHJvcGVydGllcy5jb25maWRlbmNlO1xuICAgICAgcmV0dXJuIG5ld0l0ZW07XG4gICAgfSksXG4gICk7XG59XG5cbmZ1bmN0aW9uIGhhc0Zhdm91cml0ZXMoc2VhcmNoQ29udGV4dCkge1xuICBjb25zdCBmYXZvdXJpdGVMb2NhdGlvbnMgPSBzZWFyY2hDb250ZXh0LmdldEZhdm91cml0ZUxvY2F0aW9ucyhcbiAgICBzZWFyY2hDb250ZXh0LmNvbnRleHQsXG4gICk7XG4gIGlmIChmYXZvdXJpdGVMb2NhdGlvbnM/Lmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0IGZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9ucyA9XG4gICAgc2VhcmNoQ29udGV4dC5nZXRGYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnMoc2VhcmNoQ29udGV4dC5jb250ZXh0KTtcbiAgaWYgKGZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9ucz8ubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGNvbnN0IGZhdm91cml0ZVN0b3BzID0gc2VhcmNoQ29udGV4dC5nZXRGYXZvdXJpdGVTdG9wcyhzZWFyY2hDb250ZXh0LmNvbnRleHQpO1xuICByZXR1cm4gZmF2b3VyaXRlU3RvcHM/Lmxlbmd0aCA+IDA7XG59XG5cbmNvbnN0IHJvdXRlTGF5ZXJzID0gW1xuICAncm91dGUtVFJBTScsXG4gICdyb3V0ZS1CVVMnLFxuICAncm91dGUtUkFJTCcsXG4gICdyb3V0ZS1GRVJSWScsXG4gICdyb3V0ZS1TVUJXQVknLFxuICAncm91dGUtQUlSUExBTkUnLFxuICAncm91dGUtRlVOSUNVTEFSJyxcbl07XG5jb25zdCBsb2NhdGlvbkxheWVycyA9IFsndmVudWUnLCAnYWRkcmVzcycsICdzdHJlZXQnXTtcbmNvbnN0IHBhcmtpbmdMYXllcnMgPSBbJ2NhcnBhcmsnLCAnYmlrZXBhcmsnXTtcbmNvbnN0IHN0b3BMYXllcnMgPSBbJ3N0b3AnLCAnc3RhdGlvbiddO1xuXG4vKipcbiAqIEV4ZWN1dGVzIHRoZSBzZWFyY2hcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWFyY2hSZXN1bHRzKFxuICB0YXJnZXRzLFxuICBzb3VyY2VzLFxuICB0cmFuc3BvcnRNb2RlLFxuICBzZWFyY2hDb250ZXh0LFxuICBmaWx0ZXJSZXN1bHRzLFxuICBnZW9jb2RpbmdTaXplLFxuICB7IGlucHV0IH0sXG4gIGNhbGxiYWNrLFxuICBwYXRoT3B0cyxcbiAgcmVmUG9pbnQsXG4pIHtcbiAgY29uc3Qge1xuICAgIGdldFBvc2l0aW9ucyxcbiAgICBnZXRGYXZvdXJpdGVMb2NhdGlvbnMsXG4gICAgZ2V0T2xkU2VhcmNoZXMsXG4gICAgZ2V0RmF2b3VyaXRlU3RvcHMsXG4gICAgcGFya2luZ0FyZWFTb3VyY2VzLFxuICAgIGdldExhbmd1YWdlLFxuICAgIGdldFN0b3BBbmRTdGF0aW9uc1F1ZXJ5LFxuICAgIGdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uc1F1ZXJ5LFxuICAgIGdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9ucyxcbiAgICBnZXRGYXZvdXJpdGVSb3V0ZXNRdWVyeSxcbiAgICBnZXRGYXZvdXJpdGVSb3V0ZXMsXG4gICAgZ2V0Um91dGVzUXVlcnksXG4gICAgY29udGV4dCxcbiAgICBpc1BlbGlhc0xvY2F0aW9uQXdhcmU6IGxvY2F0aW9uQXdhcmUsXG4gICAgbWluaW1hbFJlZ2V4cCxcbiAgICBsaW5lUmVnZXhwLFxuICAgIFVSTF9QRUxJQVMsXG4gICAgVVJMX1BFTElBU19QTEFDRSxcbiAgICBmZWVkSURzLFxuICAgIGdlb2NvZGluZ1NlYXJjaFBhcmFtcyxcbiAgICBnZW9jb2RpbmdTb3VyY2VzLFxuICAgIGdldEZ1dHVyZVJvdXRlcyxcbiAgICBjaXR5QmlrZU5ldHdvcmtzLFxuICB9ID0gc2VhcmNoQ29udGV4dDtcbiAgLy8gaWYgbm8gdGFyZ2V0cyBhcmUgcHJvdmlkZWQsIHNlYXJjaCB0aGVtIGFsbC5cbiAgY29uc3QgYWxsVGFyZ2V0cyA9ICF0YXJnZXRzIHx8IHRhcmdldHMubGVuZ3RoID09PSAwO1xuICAvLyBpZiBubyBzb3VyY2VzIGFyZSBwcm92aWRlZCwgdXNlIHRoZW0gYWxsLlxuICBjb25zdCBhbGxTb3VyY2VzID0gIXNvdXJjZXMgfHwgc291cmNlcy5sZW5ndGggPT09IDA7XG4gIGNvbnN0IHBvc2l0aW9uID0gZ2V0UG9zaXRpb25zKGNvbnRleHQpO1xuICBjb25zdCBzZWFyY2hDb21wb25lbnRzID0gW107XG4gIGNvbnN0IHNlYXJjaGVzID0geyB0eXBlOiAnYWxsJywgdGVybTogaW5wdXQsIHJlc3VsdHM6IFtdIH07XG4gIGNvbnN0IGxhbmd1YWdlID0gZ2V0TGFuZ3VhZ2UoY29udGV4dCk7XG4gIGNvbnN0IGZvY3VzUG9pbnQgPVxuICAgIGxvY2F0aW9uQXdhcmUgJiYgcmVmUG9pbnQ/LmxhdCAmJiByZWZQb2ludD8ubG9uXG4gICAgICA/IHtcbiAgICAgICAgICAvLyBSb3VuZCBjb29yZGluYXRlcyB0byBhcHByb3ggMSBrbSwgaW4gb3JkZXIgdG8gaW1wcm92ZSBjYWNoaW5nXG4gICAgICAgICAgJ2ZvY3VzLnBvaW50LmxhdCc6IHJlZlBvaW50LmxhdC50b0ZpeGVkKDMpLFxuICAgICAgICAgICdmb2N1cy5wb2ludC5sb24nOiByZWZQb2ludC5sb24udG9GaXhlZCgzKSxcbiAgICAgICAgfVxuICAgICAgOiB7fTtcbiAgY29uc3QgbW9kZSA9IHRyYW5zcG9ydE1vZGUgPyB0cmFuc3BvcnRNb2RlLnNwbGl0KCctJylbMV0gOiB1bmRlZmluZWQ7XG4gIGlmIChcbiAgICB0YXJnZXRzLmluY2x1ZGVzKCdDdXJyZW50UG9zaXRpb24nKSAmJlxuICAgIHBvc2l0aW9uLnN0YXR1cyAhPT0gJ2dlb2xvY2F0aW9uLW5vdC1zdXBwb3J0ZWQnXG4gICkge1xuICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChnZXRDdXJyZW50UG9zaXRpb25JZkVtcHR5KGlucHV0LCBwb3NpdGlvbikpO1xuICB9XG4gIGlmIChhbGxUYXJnZXRzIHx8IHRhcmdldHMuaW5jbHVkZXMoJ01hcFBvc2l0aW9uJykpIHtcbiAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goc2VsZWN0UG9zaXRpb25Gb21NYXAoaW5wdXQpKTtcbiAgfVxuICBpZiAodGFyZ2V0cy5pbmNsdWRlcygnRnV0dXJlUm91dGVzJykpIHtcbiAgICBjb25zdCBpdGVtcyA9IGdldEZ1dHVyZVJvdXRlcyhjb250ZXh0KTtcbiAgICBzZWFyY2hDb21wb25lbnRzLnB1c2godGFrZShpdGVtcywgMykpO1xuICB9XG4gIGlmIChcbiAgICB0YXJnZXRzLmluY2x1ZGVzKCdTZWxlY3RGcm9tT3duTG9jYXRpb25zJykgJiZcbiAgICBoYXNGYXZvdXJpdGVzKHNlYXJjaENvbnRleHQpXG4gICkge1xuICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChzZWxlY3RGcm9tT3duTG9jYXRpb25zKGlucHV0KSk7XG4gIH1cbiAgaWYgKGFsbFRhcmdldHMgfHwgdGFyZ2V0cy5pbmNsdWRlcygnTG9jYXRpb25zJykpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWRlc3RydWN0dXJpbmdcbiAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSBnZW9jb2RpbmdTZWFyY2hQYXJhbXM7XG4gICAgaWYgKHNvdXJjZXMuaW5jbHVkZXMoJ0Zhdm91cml0ZScpKSB7XG4gICAgICBjb25zdCBmYXZvdXJpdGVMb2NhdGlvbnMgPSBnZXRGYXZvdXJpdGVMb2NhdGlvbnMoY29udGV4dCk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGZpbHRlckZhdm91cml0ZUxvY2F0aW9ucyhmYXZvdXJpdGVMb2NhdGlvbnMsIGlucHV0KSxcbiAgICAgICk7XG4gICAgICBpZiAoc291cmNlcy5pbmNsdWRlcygnQmFjaycpKSB7XG4gICAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChnZXRCYWNrU3VnZ2VzdGlvbigpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdEYXRhc291cmNlJykpIHtcbiAgICAgIGNvbnN0IGdlb2NvZGluZ0xheWVycyA9IFsndmVudWUnLCAnYWRkcmVzcycsICdzdHJlZXQnXTtcbiAgICAgIGlmICh0YXJnZXRzLmluY2x1ZGVzKCdTdGF0aW9ucycpKSB7XG4gICAgICAgIGdlb2NvZGluZ0xheWVycy5wdXNoKCdzdGF0aW9uJyk7IC8vIHNlYXJjaCBzdGF0aW9ucyBmcm9tIE9TTVxuICAgICAgfVxuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBnZXRHZW9jb2RpbmdSZXN1bHRzKFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICAgIHNlYXJjaFBhcmFtcyxcbiAgICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgICBmb2N1c1BvaW50LFxuICAgICAgICAgIGdlb2NvZGluZ1NvdXJjZXMuam9pbignLCcpLFxuICAgICAgICAgIFVSTF9QRUxJQVMsXG4gICAgICAgICAgbWluaW1hbFJlZ2V4cCxcbiAgICAgICAgICBnZW9jb2RpbmdMYXllcnMsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdIaXN0b3J5JykpIHtcbiAgICAgIGNvbnN0IGxvY2F0aW9uSGlzdG9yeSA9IGdldE9sZFNlYXJjaGVzKGNvbnRleHQsICdlbmRwb2ludCcpO1xuICAgICAgY29uc3QgZHJvcExheWVycyA9IFsnYmlrZXN0YXRpb24nXTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5zdG9wTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5yb3V0ZUxheWVycyk7XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ucGFya2luZ0xheWVycyk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGZpbHRlck9sZFNlYXJjaGVzKGxvY2F0aW9uSGlzdG9yeSwgaW5wdXQsIGRyb3BMYXllcnMpLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgaWYgKGFsbFRhcmdldHMgfHwgdGFyZ2V0cy5pbmNsdWRlcygnUGFya2luZ0FyZWFzJykpIHtcbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdEYXRhc291cmNlJykpIHtcbiAgICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IGdlb2NvZGluZ1NlYXJjaFBhcmFtcztcbiAgICAgIGlmIChnZW9jb2RpbmdTaXplICYmIGdlb2NvZGluZ1NpemUgIT09IDEwKSB7XG4gICAgICAgIHNlYXJjaFBhcmFtcy5zaXplID0gZ2VvY29kaW5nU2l6ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGdlb2NvZGluZ0xheWVycyA9IFsnY2FycGFyaycsICdiaWtlcGFyayddO1xuICAgICAgY29uc3QgZmVlZElkcyA9IHBhcmtpbmdBcmVhU291cmNlcyA/IHBhcmtpbmdBcmVhU291cmNlcy5qb2luKCcsJykgOiBudWxsO1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBnZXRHZW9jb2RpbmdSZXN1bHRzKFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICAgIHNlYXJjaFBhcmFtcyxcbiAgICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgICBmb2N1c1BvaW50LFxuICAgICAgICAgIGZlZWRJZHMsXG4gICAgICAgICAgVVJMX1BFTElBUyxcbiAgICAgICAgICBtaW5pbWFsUmVnZXhwLFxuICAgICAgICAgIGdlb2NvZGluZ0xheWVycyxcbiAgICAgICAgKS50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgICAgIGlmIChmaWx0ZXJSZXN1bHRzKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyUmVzdWx0cyhyZXN1bHRzLCBtb2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnSGlzdG9yeScpKSB7XG4gICAgICBjb25zdCBoaXN0b3J5ID0gZ2V0T2xkU2VhcmNoZXMoY29udGV4dCk7XG4gICAgICBjb25zdCBkcm9wTGF5ZXJzID0gWydiaWtlc3RhdGlvbiddO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnN0b3BMYXllcnMpO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnJvdXRlTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5sb2NhdGlvbkxheWVycyk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goZmlsdGVyT2xkU2VhcmNoZXMoaGlzdG9yeSwgaW5wdXQsIGRyb3BMYXllcnMpKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCB1c2VTdG9wcyA9IHRhcmdldHMuaW5jbHVkZXMoJ1N0b3BzJyk7XG4gIGNvbnN0IHVzZVN0YXRpb25zID0gdGFyZ2V0cy5pbmNsdWRlcygnU3RhdGlvbnMnKTtcblxuICBpZiAoYWxsVGFyZ2V0cyB8fCB1c2VTdG9wcyB8fCB1c2VTdGF0aW9ucykge1xuICAgIGlmIChzb3VyY2VzLmluY2x1ZGVzKCdGYXZvdXJpdGUnKSkge1xuICAgICAgY29uc3QgZmF2b3VyaXRlU3RvcHMgPSBnZXRGYXZvdXJpdGVTdG9wcyhjb250ZXh0KTtcbiAgICAgIGxldCBzdG9wc0FuZFN0YXRpb25zO1xuICAgICAgaWYgKGZhdm91cml0ZVN0b3BzLmV2ZXJ5KHN0b3AgPT4gc3RvcC50eXBlID09PSAnc3RhdGlvbicpKSB7XG4gICAgICAgIHN0b3BzQW5kU3RhdGlvbnMgPSBnZXRTdG9wc0Zyb21HZW9jb2RpbmcoXG4gICAgICAgICAgZmF2b3VyaXRlU3RvcHMsXG4gICAgICAgICAgVVJMX1BFTElBU19QTEFDRSxcbiAgICAgICAgKS50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgICAgIGlmIChmaWx0ZXJSZXN1bHRzKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyUmVzdWx0cyhyZXN1bHRzLCBtb2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RvcHNBbmRTdGF0aW9ucyA9IGdldFN0b3BBbmRTdGF0aW9uc1F1ZXJ5KGZhdm91cml0ZVN0b3BzKVxuICAgICAgICAgIC50aGVuKGZhdm91cml0ZXMgPT5cbiAgICAgICAgICAgIGdldFN0b3BzRnJvbUdlb2NvZGluZyhmYXZvdXJpdGVzLCBVUkxfUEVMSUFTX1BMQUNFKSxcbiAgICAgICAgICApXG4gICAgICAgICAgLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICAgICAgICBpZiAoZmlsdGVyUmVzdWx0cykge1xuICAgICAgICAgICAgICByZXR1cm4gZmlsdGVyUmVzdWx0cyhyZXN1bHRzLCBtb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBmaWx0ZXJGYXZvdXJpdGVTdG9wcyhzdG9wc0FuZFN0YXRpb25zLCBpbnB1dCwgdXNlU3RvcHMsIHVzZVN0YXRpb25zKSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0RhdGFzb3VyY2UnKSkge1xuICAgICAgY29uc3QgZ2VvY29kaW5nTGF5ZXJzID0gW107XG4gICAgICBpZiAodXNlU3RvcHMpIHtcbiAgICAgICAgZ2VvY29kaW5nTGF5ZXJzLnB1c2goJ3N0b3AnKTtcbiAgICAgIH1cbiAgICAgIGlmICh1c2VTdGF0aW9ucykge1xuICAgICAgICBnZW9jb2RpbmdMYXllcnMucHVzaCgnc3RhdGlvbicpO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2VhcmNoUGFyYW1zID1cbiAgICAgICAgZ2VvY29kaW5nU2l6ZSAmJiBnZW9jb2RpbmdTaXplICE9PSAxMCA/IHsgc2l6ZTogZ2VvY29kaW5nU2l6ZSB9IDoge307XG4gICAgICBpZiAoZ2VvY29kaW5nU2VhcmNoUGFyYW1zICYmIGdlb2NvZGluZ1NlYXJjaFBhcmFtc1snYm91bmRhcnkuY291bnRyeSddKSB7XG4gICAgICAgIHNlYXJjaFBhcmFtc1snYm91bmRhcnkuY291bnRyeSddID1cbiAgICAgICAgICBnZW9jb2RpbmdTZWFyY2hQYXJhbXNbJ2JvdW5kYXJ5LmNvdW50cnknXTtcbiAgICAgIH1cbiAgICAgIC8vIGEgbGl0dGxlIGhhY2s6IHdoZW4gc2VhcmNoaW5nIGxvY2F0aW9uIGRhdGEsIGF1dG9tYXRpY2FsbHkgZGVkdXBlIHN0b3BzXG4gICAgICAvLyB0aGlzIGNvdWxkIGJlIGEgbmV3IGV4cGxpY2l0IHByb3BcbiAgICAgIGlmIChhbGxUYXJnZXRzIHx8IHRhcmdldHMuaW5jbHVkZXMoJ0xvY2F0aW9ucycpKSB7XG4gICAgICAgIHNlYXJjaFBhcmFtcy5kZWR1cGVzdG9wcyA9IDE7XG4gICAgICB9XG4gICAgICBjb25zdCBmZWVkcyA9IGZlZWRJRHMubWFwKHYgPT4gYGd0ZnMke3Z9YCkuam9pbignLCcpO1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBnZXRHZW9jb2RpbmdSZXN1bHRzKFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICAgIHNlYXJjaFBhcmFtcyxcbiAgICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgICBmb2N1c1BvaW50LFxuICAgICAgICAgIGZlZWRzLFxuICAgICAgICAgIFVSTF9QRUxJQVMsXG4gICAgICAgICAgbWluaW1hbFJlZ2V4cCxcbiAgICAgICAgICBnZW9jb2RpbmdMYXllcnMsXG4gICAgICAgICkudGhlbihyZXN1bHRzID0+IHtcbiAgICAgICAgICBpZiAoZmlsdGVyUmVzdWx0cykge1xuICAgICAgICAgICAgcmV0dXJuIGZpbHRlclJlc3VsdHMocmVzdWx0cywgbW9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0hpc3RvcnknKSkge1xuICAgICAgY29uc3Qgc3RvcEhpc3RvcnkgPSBnZXRPbGRTZWFyY2hlcyhjb250ZXh0KS5maWx0ZXIoaXRlbSA9PiB7XG4gICAgICAgIGlmIChpdGVtLnByb3BlcnRpZXMuZ2lkKSB7XG4gICAgICAgICAgcmV0dXJuIGl0ZW0ucHJvcGVydGllcy5naWQuaW5jbHVkZXMoJ0dURlM6Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGRyb3BMYXllcnMgPSBbJ2Jpa2VzdGF0aW9uJ107XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ucm91dGVMYXllcnMpO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLmxvY2F0aW9uTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5wYXJraW5nTGF5ZXJzKTtcbiAgICAgIGlmICghdXNlU3RvcHMpIHtcbiAgICAgICAgZHJvcExheWVycy5wdXNoKCdzdG9wJyk7XG4gICAgICB9XG4gICAgICBpZiAoIXVzZVN0YXRpb25zKSB7XG4gICAgICAgIGRyb3BMYXllcnMucHVzaCgnc3RhdGlvbicpO1xuICAgICAgfVxuICAgICAgaWYgKHRyYW5zcG9ydE1vZGUpIHtcbiAgICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICAgIGZpbHRlck9sZFNlYXJjaGVzKHN0b3BIaXN0b3J5LCBpbnB1dCwgZHJvcExheWVycykudGhlbihyZXN1bHQgPT5cbiAgICAgICAgICAgIGZpbHRlclJlc3VsdHMgPyBmaWx0ZXJSZXN1bHRzKHJlc3VsdCwgbW9kZSkgOiByZXN1bHQsXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgICBmaWx0ZXJPbGRTZWFyY2hlcyhzdG9wSGlzdG9yeSwgaW5wdXQsIGRyb3BMYXllcnMpLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoYWxsVGFyZ2V0cyB8fCB0YXJnZXRzLmluY2x1ZGVzKCdSb3V0ZXMnKSkge1xuICAgIGlmIChzb3VyY2VzLmluY2x1ZGVzKCdGYXZvdXJpdGUnKSkge1xuICAgICAgY29uc3QgZmF2b3VyaXRlUm91dGVzID0gZ2V0RmF2b3VyaXRlUm91dGVzKGNvbnRleHQpO1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBnZXRGYXZvdXJpdGVSb3V0ZXNRdWVyeShmYXZvdXJpdGVSb3V0ZXMsIGlucHV0LCBtb2RlLCBwYXRoT3B0cykudGhlbihcbiAgICAgICAgICByZXN1bHQgPT5cbiAgICAgICAgICAgIGZpbHRlclJlc3VsdHMgPyBmaWx0ZXJSZXN1bHRzKHJlc3VsdCwgbW9kZSwgJ1JvdXRlcycpIDogcmVzdWx0LFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgZ2V0Um91dGVzUXVlcnkoaW5wdXQsIGZlZWRJRHMsIHRyYW5zcG9ydE1vZGUsIHBhdGhPcHRzKS50aGVuKHJlc3VsdCA9PlxuICAgICAgICBmaWx0ZXJSZXN1bHRzID8gZmlsdGVyUmVzdWx0cyhyZXN1bHQsIG1vZGUsICdSb3V0ZXMnKSA6IHJlc3VsdCxcbiAgICAgICksXG4gICAgKTtcbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdIaXN0b3J5JykpIHtcbiAgICAgIGNvbnN0IHJvdXRlSGlzdG9yeSA9IGdldE9sZFNlYXJjaGVzKGNvbnRleHQpO1xuICAgICAgY29uc3QgZHJvcExheWVycyA9IFsnYmlrZXN0YXRpb24nXTtcbiAgICAgIGlmICh0cmFuc3BvcnRNb2RlKSB7XG4gICAgICAgIGRyb3BMYXllcnMucHVzaCguLi5yb3V0ZUxheWVycy5maWx0ZXIoaSA9PiAhKGkgPT09IHRyYW5zcG9ydE1vZGUpKSk7XG4gICAgICB9XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4uc3RvcExheWVycyk7XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ubG9jYXRpb25MYXllcnMpO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnBhcmtpbmdMYXllcnMpO1xuXG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGZpbHRlck9sZFNlYXJjaGVzKHJvdXRlSGlzdG9yeSwgaW5wdXQsIGRyb3BMYXllcnMpLnRoZW4ocmVzdWx0cyA9PlxuICAgICAgICAgIGZpbHRlclJlc3VsdHMgPyBmaWx0ZXJSZXN1bHRzKHJlc3VsdHMsIG1vZGUsICdSb3V0ZXMnKSA6IHJlc3VsdHMsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBpZiAoYWxsVGFyZ2V0cyB8fCB0YXJnZXRzLmluY2x1ZGVzKCdWZWhpY2xlUmVudGFsU3RhdGlvbnMnKSkge1xuICAgIGlmIChzb3VyY2VzLmluY2x1ZGVzKCdGYXZvdXJpdGUnKSkge1xuICAgICAgY29uc3QgZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb24gPVxuICAgICAgICBnZXRGYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnMoY29udGV4dCk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uc1F1ZXJ5KFxuICAgICAgICAgIGZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uLFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnRGF0YXNvdXJjZScpKSB7XG4gICAgICBjb25zdCBnZW9jb2RpbmdMYXllcnMgPSBbJ2Jpa2VzdGF0aW9uJ107XG4gICAgICBjb25zdCBzZWFyY2hQYXJhbXMgPVxuICAgICAgICBnZW9jb2RpbmdTaXplICYmIGdlb2NvZGluZ1NpemUgIT09IDEwID8geyBzaXplOiBnZW9jb2RpbmdTaXplIH0gOiB7fTtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZ2V0R2VvY29kaW5nUmVzdWx0cyhcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICBzZWFyY2hQYXJhbXMsXG4gICAgICAgICAgbGFuZ3VhZ2UsXG4gICAgICAgICAgZm9jdXNQb2ludCxcbiAgICAgICAgICBjaXR5QmlrZU5ldHdvcmtzLmpvaW4oJywnKSxcbiAgICAgICAgICBVUkxfUEVMSUFTLFxuICAgICAgICAgIG1pbmltYWxSZWdleHAsXG4gICAgICAgICAgZ2VvY29kaW5nTGF5ZXJzLFxuICAgICAgICApLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICAgICAgaWYgKGZpbHRlclJlc3VsdHMpIHtcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJSZXN1bHRzKHJlc3VsdHMsIG1vZGUsICdWZWhpY2xlUmVudGFsU3RhdGlvbnMnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnSGlzdG9yeScpKSB7XG4gICAgICBjb25zdCBoaXN0b3J5ID0gZ2V0T2xkU2VhcmNoZXMoY29udGV4dCk7XG4gICAgICBjb25zdCBkcm9wTGF5ZXJzID0gWy4uLnN0b3BMYXllcnNdO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnJvdXRlTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5sb2NhdGlvbkxheWVycyk7XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ucGFya2luZ0xheWVycyk7XG5cbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChmaWx0ZXJPbGRTZWFyY2hlcyhoaXN0b3J5LCBpbnB1dCwgZHJvcExheWVycykpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHNlYXJjaFJlc3VsdHNQcm9taXNlID0gUHJvbWlzZS5hbGwoc2VhcmNoQ29tcG9uZW50cylcbiAgICAudGhlbihmbGF0dGVuKVxuICAgIC50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgc2VhcmNoZXMucmVzdWx0cyA9IHJlc3VsdHM7XG4gICAgfSlcbiAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgIHNlYXJjaGVzLmVycm9yID0gZXJyO1xuICAgIH0pO1xuICBzZWFyY2hSZXN1bHRzUHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICBjYWxsYmFjayh7XG4gICAgICAuLi5zZWFyY2hlcyxcbiAgICAgIHJlc3VsdHM6IHNvcnRTZWFyY2hSZXN1bHRzKGxpbmVSZWdleHAsIHNlYXJjaGVzLnJlc3VsdHMsIGlucHV0KSxcbiAgICB9KTtcbiAgfSk7XG59XG5cbmNvbnN0IGRlYm91bmNlZFNlYXJjaCA9IGRlYm91bmNlKGdldFNlYXJjaFJlc3VsdHMsIDMwMCwge1xuICBsZWFkaW5nOiB0cnVlLFxufSk7XG5cbmV4cG9ydCBjb25zdCBleGVjdXRlU2VhcmNoID0gKFxuICB0YXJnZXRzLFxuICBzb3VyY2VzLFxuICB0cmFuc3BvcnRNb2RlLFxuICBzZWFyY2hDb250ZXh0LFxuICBmaWx0ZXJSZXN1bHRzLFxuICBnZW9jb2RpbmdTaXplLFxuICBkYXRhLFxuICBjYWxsYmFjayxcbiAgcGF0aE9wdHMsXG4gIHJlZlBvaW50LFxuKSA9PiB7XG4gIGNhbGxiYWNrKG51bGwpOyAvLyBUaGlzIG1lYW5zICd3ZSBhcmUgc2VhcmNoaW5nJ1xuICBkZWJvdW5jZWRTZWFyY2goXG4gICAgdGFyZ2V0cyxcbiAgICBzb3VyY2VzLFxuICAgIHRyYW5zcG9ydE1vZGUsXG4gICAgc2VhcmNoQ29udGV4dCxcbiAgICBmaWx0ZXJSZXN1bHRzLFxuICAgIGdlb2NvZGluZ1NpemUsXG4gICAgZGF0YSxcbiAgICBjYWxsYmFjayxcbiAgICBwYXRoT3B0cyxcbiAgICByZWZQb2ludCxcbiAgKTtcbn07XG4iLCJpbXBvcnQgeyBjcmVhdGVJbnN0YW5jZSB9IGZyb20gJ2kxOG5leHQnO1xuaW1wb3J0IHRyYW5zbGF0aW9ucyBmcm9tICcuL3RyYW5zbGF0aW9ucyc7XG5cbmNvbnN0IGkxOG4gPSBjcmVhdGVJbnN0YW5jZSh7XG4gIGZhbGxiYWNrTG5nOiAnZmknLFxuICAvLyBkZWJ1ZzogdHJ1ZSxcbiAgcmVzb3VyY2VzOiB0cmFuc2xhdGlvbnMsXG4gIGRlZmF1bHROUzogJ3RyYW5zbGF0aW9uJyxcbiAgcmVhY3Q6IHtcbiAgICB1c2VTdXNwZW5zZTogdHJ1ZSxcbiAgfSxcbn0pO1xuXG5pMThuLmluaXQoKTtcblxuZXhwb3J0IGRlZmF1bHQgaTE4bjtcbiIsImNvbnN0IHRyYW5zbGF0aW9ucyA9IHtcbiAgZGU6IHtcbiAgICB0cmFuc2xhdGlvbjoge1xuICAgICAgYWRkcmVzczogJ0FkcmVzc2UnLFxuICAgICAgJ2FkZHJlc3MtcGxhY2Utb3ItYnVzaW5lc3MnOiAnQWRyZXNzLCBPcnQgb3IgR2VzY2jDpGZ0JyxcbiAgICAgICdhZGQtdmlhLWJ1dHRvbi1sYWJlbCc6ICdGw7xnZSBad2lzY2hlbnppZWwgaGluenUnLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsJzpcbiAgICAgICAgJ1NldCBzdG9wIGR1cmF0aW9uIGF0IHZpYSBwb2ludCB7e2luZGV4fX0nLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLWNsb3NlJzpcbiAgICAgICAgJ0Nsb3NlIHN0b3AgZHVyYXRpb24gc2VsZWN0b3IgYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtb3Blbic6XG4gICAgICAgICdPcGVuIHN0b3AgZHVyYXRpb24gc2VsZWN0b3IgYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgICBhaXJwbGFuZTogJ0ZsdWcnLFxuICAgICAgYXJyaXZhbDogJ0Fua3VuZnQnLFxuICAgICAgYmFjazogJ1p1csO8Y2snLFxuICAgICAgYmlrZXJlbnRhbHN0YXRpb246ICdMZWlocmFkLVN0YXRpb24nLFxuICAgICAgYnVzOiAnQnVzJyxcbiAgICAgIGNhbmNlbDogJ0FiYnJlY2hlbicsXG4gICAgICAnY2xlYXItYnV0dG9uLWxhYmVsJzogJ0zDtnNjaGVuJyxcbiAgICAgICdjbGVhci1zZWFyY2gtaGlzdG9yeSc6ICdTdWNoaGlzdG9yaWUgbMO2c2NoZW4nLFxuICAgICAgY3VycmVudHBvc2l0aW9uOiAnQWt0dWVsbGUgUG9zaXRpb24nLFxuICAgICAgZGVsZXRlOiAnTMO2c2NoZW4nLFxuICAgICAgJ2RlbGV0ZS1vbGQtc2VhcmNoZXMtaGVhZGVyJzogJ1dvbGxlbiBTaWUgZGllIFN1Y2gtSGlzdG9yaWUgbMO2c2NoZW4/JyxcbiAgICAgIGRlcGFydHVyZTogJ0FiZmFocnQnLFxuICAgICAgZGVzdGluYXRpb246ICdaaWVsJyxcbiAgICAgICdnaXZlLW9yaWdpbic6ICdTdGFydCBlaW5nZWJlbi4nLFxuICAgICAgJ2dpdmUtZGVzdGluYXRpb24nOiAnWmllbCBlaW5nZWJlbi4nLFxuICAgICAgZmF2b3VyaXRlOiAnRmF2b3JpdGVuJyxcbiAgICAgIGZlcnJ5OiAnRsOkaHJlJyxcbiAgICAgICdmdXR1cmUtcm91dGUnOiAnWnVrw7xuZnRpZ2UgVmVyYmluZHVuZycsXG4gICAgICBvcmlnaW46ICdTdGFydCcsXG4gICAgICAnb3JpZ2luLXN0b3AtbmVhci15b3UnOiAnU3RhcnQnLFxuICAgICAgb3dubG9jYXRpb25zOiAnRWlnZW5lIEZhdm9yaXRlbicsXG4gICAgICBsb2FkaW5nOiAnTGFkZW4uLi4nLFxuICAgICAgJ21pbnV0ZS1zaG9ydCc6ICdtaW4nLFxuICAgICAgcmFpbDogJ1p1ZycsXG4gICAgICBzZWFyY2g6ICdTdWNoZScsXG4gICAgICAnc2VhcmNoLWFkZHJlc3Mtb3ItcGxhY2UnOiAnU3VjaGUgYW5oYW5kIHZvbiBBZHJlc3NlIG9kZXIgT3J0c2FuZ2FiZScsXG4gICAgICAnc2VhcmNoLWJ1dHRvbi1sYWJlbCc6ICdTdWNoZScsXG4gICAgICAnc2VhcmNoLWRlc3RpbmF0aW9uJzogJ1N1Y2hlIFppZWxvcnQsIExpbmllIG9yIEhhbHRlc3RlbGxlJyxcbiAgICAgICdzZWFyY2gtZGVzdGluYXRpb24taW5kZXgnOiAnWmllbG9ydCBlaW5nZWJlbicsXG4gICAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLXJlc3VsdHMtYnV0LW5vLXNlYXJjaCc6XG4gICAgICAgICdFcmdlYm5pc3NlIGluIOKAnFppZWxvcnTigJ0tUmVpdGVyIGFuemVpZ2VuJyxcbiAgICAgICdzZWFyY2gtbm8tcmVzdWx0cyc6ICdLZWluIE9ydCBnZWZ1bmRlbi4nLFxuICAgICAgJ3NlYXJjaC1vcmlnaW4nOiAnU3VjaGUgU3RhcnRvcnQsIExpbmllIG9kZXIgSGFsdGVzdGVsbGUnLFxuICAgICAgJ3NlYXJjaC1vcmlnaW4taW5kZXgnOiAnU3RhcnRvcnQgZWluZ2ViZW4nLFxuICAgICAgJ3NlYXJjaC1wb3NpdGlvbic6ICdTdGFuZG9ydCBlcm1pdHRlbG4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbCc6ICdWZW51ZSwgcGxhY2UgYW5kIHN0b3BzZWFyY2guJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLWRlc2t0b3AnOlxuICAgICAgICAnTmF2aWdhdGUgbGlzdCB3aXRoIGFycm93IGtleXMgYW5kIHNlbGVjdCB3aXRoIGVudGVyIGtleS4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtbW9iaWxlJzpcbiAgICAgICAgJ0VudGVyIHRoZSBsb2NhdGlvbiBhbmQgbmF2aWdhdGUgaW4gdGhlIGxpc3QgYnkgc3dpcGluZy4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1tb3ZlLXRvLWRlc3RpbmF0aW9uJzpcbiAgICAgICAgJ0FmdGVyIHNlbGVjdGluZyB0aGUgc3RhcnRpbmcgbG9jYXRpb24geW91IGFyZSBhdXRvbWF0aWNhbGx5IG1vdmVkIHRvIHRoZSBkZXN0aW5hdGlvbiBmaWVsZC4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW4nOiAnVGhlcmUgaXMge3tjb3VudH19IHN1Z2dlc3Rpb24gYXZhaWxhYmxlJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuX3BsdXJhbCc6XG4gICAgICAgICdUaGVyZSBhcmUge3tjb3VudH19IHN1Z2dlc3Rpb25zIGF2YWlsYWJsZScsXG4gICAgICAnc2VhcmNoLWN1cnJlbnQtc3VnZ2VzdGlvbic6ICdBa3R1ZWxsZSBBdXN3YWhsOiB7e3NlbGVjdGlvbn19JyxcbiAgICAgIHN0cmVldDogJ1N0cmHDn2UnLFxuICAgICAgc3Vid2F5OiAnVS1CYWhuJyxcbiAgICAgIHN0YXRpb246ICdTdGF0aW9uJyxcbiAgICAgIHN0b3A6ICdIYWx0ZXN0ZWxsZScsXG4gICAgICAnc3RvcC1uZWFyLXlvdSc6ICdTdWNoZSBIYWx0ZXN0ZWxsZW4gdW5kIExpbmllbiBpbiBkZXIgTsOkaGUnLFxuICAgICAgJ3N0b3AtbmVhci15b3UtYnVzJzogJ1N1Y2hlIEJ1c2xpbmllbiBvciBIYWx0ZXN0ZWxsZW4nLFxuICAgICAgJ3N0b3AtbmVhci15b3UtY2l0eWJpa2UnOiAnU3VjaGUgTGVpaHJhZC1TdGF0aW9uZW4nLFxuICAgICAgJ3N0b3AtbmVhci15b3UtcmFpbCc6ICdTdWNoZSBadWd2ZXJiaW5kdW5nZW4gb2RlciBCYWhuaMO2ZmUnLFxuICAgICAgJ3N0b3AtbmVhci15b3Utc3Vid2F5JzogJ1N1Y2hlIFUtQmFobi1MaW5pZW4gb2RlciBIYWx0ZXN0ZWxsZW4nLFxuICAgICAgJ3N0b3AtbmVhci15b3UtdHJhbSc6ICdTdWNoZSBTdGFkdGJhaG4tSGFsdGVzdGVsbGVuLVN1Y2hlJyxcbiAgICAgICd0b2RheS1hdCc6ICdIZXV0ZSB1bScsXG4gICAgICAndG9tb3Jyb3ctYXQnOiAnTW9yZ2VuIHVtJyxcbiAgICAgIHRyYW06ICdTdHJhw59lbmJhaG4nLFxuICAgICAgJ3VzZS1vd24tcG9zaXRpb24nOiAnQmVudXR6ZSBha3R1ZWxsZW4gU3RhbmRvcnQnLFxuICAgICAgJ3NlbGVjdC1mcm9tLW1hcCc6ICdXw6RobGUgUG9zaXRpb24gYW5oYW5kIEthcnRlJyxcbiAgICAgICdzZWxlY3QtZnJvbS1vd24tbG9jYXRpb25zJzogJ0F1cyBlaWdlbmVuIEZhdm9yaXRlbiBhdXN3w6RobGVuJyxcbiAgICAgIHZlbnVlOiAnVmVudWUnLFxuICAgICAgJ3ZpYS1wb2ludCc6ICdad2lzY2hlbnppZWwnLFxuICAgICAgd2hlcmU6ICdXb2hpbj8nLFxuICAgICAgcGxhY2U6ICdPcnQnLFxuICAgIH0sXG4gIH0sXG4gIGVuOiB7XG4gICAgdHJhbnNsYXRpb246IHtcbiAgICAgIGFkZHJlc3M6ICdBZGRyZXNzJyxcbiAgICAgICdhZGRyZXNzLXBsYWNlLW9yLWJ1c2luZXNzJzogJ0FkZHJlc3MsIHBsYWNlIG9yIGJ1c2luZXNzJyxcbiAgICAgICdhZGQtdmlhLWJ1dHRvbi1sYWJlbCc6ICdBZGQgdmlhIHBvaW50JyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbCc6XG4gICAgICAgICdTZXQgc3RvcCBkdXJhdGlvbiBhdCB2aWEgcG9pbnQge3tpbmRleH19JyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1jbG9zZSc6XG4gICAgICAgICdDbG9zZSBzdG9wIGR1cmF0aW9uIHNlbGVjdG9yIGF0IHZpYSBwb2ludCB7e2luZGV4fX0nLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLW9wZW4nOlxuICAgICAgICAnT3BlbiBzdG9wIGR1cmF0aW9uIHNlbGVjdG9yIGF0IHZpYSBwb2ludCB7e2luZGV4fX0nLFxuICAgICAgYWlycGxhbmU6ICdGbGlnaHQnLFxuICAgICAgYXJyaXZhbDogJ0Fycml2YWwnLFxuICAgICAgYmFjazogJ0JhY2snLFxuICAgICAgYmlrZXBhcms6ICdQYXJrICYgUmlkZSBmb3IgYmlrZXMnLFxuICAgICAgYmlrZXJlbnRhbHN0YXRpb246ICdCaWtlIHN0YXRpb24nLFxuICAgICAgYnVzOiAnYnVzJyxcbiAgICAgIGNhbmNlbDogJ0NhbmNlbCcsXG4gICAgICBjYXJwYXJrOiAnUGFyayAmIFJpZGUnLFxuICAgICAgJ2NsZWFyLWJ1dHRvbi1sYWJlbCc6ICdDbGVhcicsXG4gICAgICAnY2xlYXItc2VhcmNoLWhpc3RvcnknOiAnQ2xlYXIgc2VhcmNoIGhpc3RvcnknLFxuICAgICAgY3VycmVudHBvc2l0aW9uOiAnQ3VycmVudCBwb3NpdGlvbicsXG4gICAgICBkZWxldGU6ICdEZWxldGUnLFxuICAgICAgJ2RlbGV0ZS1vbGQtc2VhcmNoZXMtaGVhZGVyJzogJ0RvIHlvdSB3YW50IHRvIGNsZWFyIHRoZSBzZWFyY2ggaGlzdG9yeT8nLFxuICAgICAgZGVwYXJ0dXJlOiAnRGVwYXJ0dXJlJyxcbiAgICAgIGRlc3RpbmF0aW9uOiAnRGVzdGluYXRpb24nLFxuICAgICAgJ2dpdmUtb3JpZ2luJzogJ0VudGVyIHlvdXIgb3JpZ2luLicsXG4gICAgICAnZ2l2ZS1kZXN0aW5hdGlvbic6ICdFbnRlciB5b3VyIGRlc3RpbmF0aW9uJyxcbiAgICAgIGZhdm91cml0ZTogJ0Zhdm91cml0ZScsXG4gICAgICBmZXJyeTogJ0ZlcnJ5JyxcbiAgICAgICdmdXR1cmUtcm91dGUnOiAnRnV0dXJlIHJvdXRlJyxcbiAgICAgIG9yaWdpbjogJ1N0YXJ0JyxcbiAgICAgICdvcmlnaW4tc3RvcC1uZWFyLXlvdSc6ICdTdGFydCcsXG4gICAgICBvd25sb2NhdGlvbnM6ICdPd24gbG9jYXRpb25zJyxcbiAgICAgIGxvYWRpbmc6ICdMb2FkaW5nLi4uJyxcbiAgICAgICdtaW51dGUtc2hvcnQnOiAnbScsXG4gICAgICBwbGF0Zm9ybTogJ1BsYXRmb3JtJyxcbiAgICAgIHJhaWw6ICdUcmFpbicsXG4gICAgICByZXF1aXJlZDogJ3JlcXVpcmVkIGZpZWxkJyxcbiAgICAgIHNlYXJjaDogJ1NlYXJjaCcsXG4gICAgICAnc2VhcmNoLWFkZHJlc3Mtb3ItcGxhY2UnOiAnU2VhcmNoIGJ5IGFkZHJlc3Mgb3IgcGxhY2UgbmFtZScsXG4gICAgICAnc2VhcmNoLWJ1dHRvbi1sYWJlbCc6ICdTZWFyY2gnLFxuICAgICAgJ3NlYXJjaC1kZXN0aW5hdGlvbic6ICdTZWFyY2ggZGVzdGluYXRpb24sIHJvdXRlIG9yIHN0b3AnLFxuICAgICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1pbmRleCc6ICdFbnRlciBkZXN0aW5hdGlvbicsXG4gICAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLXJlc3VsdHMtYnV0LW5vLXNlYXJjaCc6XG4gICAgICAgICdWaWV3IHJlc3VsdHMgaW4gdGhlIGFkamFjZW50IOKAnERlc3RpbmF0aW9u4oCdIHRhYicsXG4gICAgICAnc2VhcmNoLW5vLXJlc3VsdHMnOiAnTm8gbG9jYXRpb24nLFxuICAgICAgJ3NlYXJjaC1vcmlnaW4nOiAnU2VhcmNoIG9yaWdpbiwgcm91dGUgb3Igc3RvcCcsXG4gICAgICAnc2VhcmNoLW9yaWdpbi1pbmRleCc6ICdFbnRlciBvcmlnaW4nLFxuICAgICAgJ3NlYXJjaC1wb3NpdGlvbic6ICdEZXRlY3QgbG9jYXRpb24nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbCc6ICdWZW51ZSwgcGxhY2UgYW5kIHN0b3BzZWFyY2guJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLWRlc2t0b3AnOlxuICAgICAgICAnTmF2aWdhdGUgbGlzdCB3aXRoIGFycm93IGtleXMgYW5kIHNlbGVjdCB3aXRoIGVudGVyIGtleS4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtbW9iaWxlJzpcbiAgICAgICAgJ0VudGVyIHRoZSBsb2NhdGlvbiBhbmQgbmF2aWdhdGUgaW4gdGhlIGxpc3QgYnkgc3dpcGluZy4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1tb3ZlLXRvLWRlc3RpbmF0aW9uJzpcbiAgICAgICAgJ0FmdGVyIHNlbGVjdGluZyB0aGUgc3RhcnRpbmcgbG9jYXRpb24geW91IGFyZSBhdXRvbWF0aWNhbGx5IG1vdmVkIHRvIHRoZSBkZXN0aW5hdGlvbiBmaWVsZC4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW4nOiAnVGhlcmUgaXMge3tjb3VudH19IHN1Z2dlc3Rpb24gYXZhaWxhYmxlJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuX3BsdXJhbCc6XG4gICAgICAgICdUaGVyZSBhcmUge3tjb3VudH19IHN1Z2dlc3Rpb25zIGF2YWlsYWJsZScsXG4gICAgICAnc2VhcmNoLWN1cnJlbnQtc3VnZ2VzdGlvbic6ICdDdXJyZW50IHNlbGVjdGlvbjoge3tzZWxlY3Rpb259fScsXG4gICAgICBzdHJlZXQ6ICdTdHJlZXQnLFxuICAgICAgc3Vid2F5OiAnTWV0cm8nLFxuICAgICAgc3RhdGlvbjogJ1N0YXRpb24nLFxuICAgICAgc3RvcDogJ1N0b3AnLFxuICAgICAgJ3N0b3AtbmVhci15b3UnOiAnU2VhcmNoIHN0b3BzIGFuZCByb3V0ZXMnLFxuICAgICAgJ3N0b3AtbmVhci15b3UtYWlycGxhbmUnOiAnU2VhcmNoIGZsaWdodHMgb3IgYWlycG9ydHMnLFxuICAgICAgJ3N0b3AtbmVhci15b3UtYmlrZXBhcmsnOiAnU2VhcmNoIGJpa2UgcGFya3MnLFxuICAgICAgJ3N0b3AtbmVhci15b3UtYnVzJzogJ1NlYXJjaCBidXMgcm91dGVzIG9yIHN0b3BzJyxcbiAgICAgICdzdG9wLW5lYXIteW91LWNhcnBhcmsnOiAnU2VhcmNoIGNhciBwYXJrcycsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1jaXR5YmlrZSc6ICdTZWFyY2ggY2l0eSBiaWtlIHN0YXRpb25zJyxcbiAgICAgICdzdG9wLW5lYXIteW91LXJhaWwnOiAnU2VhcmNoIHRyYWluIHJvdXRlcyBvciBzdGF0aW9ucycsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1zdWJ3YXknOiAnU2VhcmNoIG1ldHJvIHJvdXRlcyBvciBzdGF0aW9ucyAnLFxuICAgICAgJ3N0b3AtbmVhci15b3UtdHJhbSc6ICdTZWFyY2ggdHJhbSByb3V0ZXMgb3Igc3RvcHMnLFxuICAgICAgJ3N0b3Atcm91dGUtc3RhdGlvbic6ICdCdXMgYW5kIHN0b3Agc2VhcmNoJyxcbiAgICAgICd0b2RheS1hdCc6ICd0b2RheSBhdCcsXG4gICAgICAndG9tb3Jyb3ctYXQnOiAndG9tb3Jyb3cgYXQnLFxuICAgICAgdHJhbTogJ1RyYW0nLFxuICAgICAgdHJhY2s6ICdUcmFjaycsXG4gICAgICAndXNlLW93bi1wb3NpdGlvbic6ICdVc2UgY3VycmVudCBsb2NhdGlvbicsXG4gICAgICAnc2VsZWN0LWZyb20tbWFwJzogJ1NlbGVjdCBwb3NpdGlvbiBmcm9tIG1hcCcsXG4gICAgICAnc2VsZWN0LWZyb20tb3duLWxvY2F0aW9ucyc6ICdTZWxlY3QgZnJvbSBvd24gbG9jYXRpb25zJyxcbiAgICAgIHZlbnVlOiAnVmVudWUnLFxuICAgICAgJ3ZpYS1wb2ludCc6ICdWaWEgcG9pbnQnLFxuICAgICAgd2hlcmU6ICdXaGVyZSB0bz8nLFxuICAgICAgcGxhY2U6ICdMb2NhdGlvbicsXG4gICAgfSxcbiAgfSxcbiAgZmk6IHtcbiAgICB0cmFuc2xhdGlvbjoge1xuICAgICAgYWRkcmVzczogJ09zb2l0ZScsXG4gICAgICAnYWRkcmVzcy1wbGFjZS1vci1idXNpbmVzcyc6ICdPc29pdGUsIHBhaWtrYSB0YWkgeXJpdHlzJyxcbiAgICAgICdhZGQtdmlhLWJ1dHRvbi1sYWJlbCc6ICdMaXPDpMOkIHbDpGxpcGlzdGUnLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsJzpcbiAgICAgICAgJ0FzZXRhIHbDpGxpcGlzdGVlbGxlIHt7aW5kZXh9fSBweXPDpGhkeWtzZW4ga2VzdG8nLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLWNsb3NlJzpcbiAgICAgICAgJ0F2YWEgdsOkbGlwaXN0ZWVuIHt7aW5kZXh9fSBweXPDpGhkeWtzZW4ga2VzdG8gdmFsaXRzaW4nLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLW9wZW4nOlxuICAgICAgICAnU3VsamUgdsOkbGlwaXN0ZWVuIHt7aW5kZXh9fSBweXPDpGhkeWtzZW4ga2VzdG8gdmFsaXRzaW4nLFxuICAgICAgYWlycGxhbmU6ICdMZW50b2tvbmUnLFxuICAgICAgYXJyaXZhbDogJ1BlcmlsbMOkJyxcbiAgICAgIGJhY2s6ICdUYWthaXNpbicsXG4gICAgICB2ZWhpY2xlcmVudGFsc3RhdGlvbjogJ1B5w7Zyw6Rhc2VtYScsXG4gICAgICBiaWtlcGFyazogJ0xpaXR5bnTDpHB5c8Oka8O2aW50aScsXG4gICAgICBidXM6ICdidXNzaScsXG4gICAgICBjYW5jZWw6ICdQZXJ1dXRhJyxcbiAgICAgIGNhcnBhcms6ICdMaWl0eW50w6RweXPDpGvDtmludGknLFxuICAgICAgJ2NsZWFyLWJ1dHRvbi1sYWJlbCc6ICdUeWhqZW5uw6QnLFxuICAgICAgJ2NsZWFyLXNlYXJjaC1oaXN0b3J5JzogJ1R5aGplbm7DpCBoYWt1aGlzdG9yaWEnLFxuICAgICAgY3VycmVudHBvc2l0aW9uOiAnVMOkbcOkbmhldGtpbmVuIHNpamFpbnRpJyxcbiAgICAgIGRlbGV0ZTogJ1BvaXN0YScsXG4gICAgICAnZGVsZXRlLW9sZC1zZWFyY2hlcy1oZWFkZXInOiAnSGFsdWF0a28gdHloamVudMOkw6QgaGFrdWhpc3Rvcmlhbj8nLFxuICAgICAgZGVwYXJ0dXJlOiAnTMOkaHTDtmFpa2EnLFxuICAgICAgZGVzdGluYXRpb246ICdNw6TDpHLDpG5ww6TDpCcsXG4gICAgICBmYXZvdXJpdGU6ICdTdW9zaWtraScsXG4gICAgICBmZXJyeTogJ0xhdXR0YScsXG4gICAgICAnZnV0dXJlLXJvdXRlJzogJ1R1bGV2YSByZWl0dGknLFxuICAgICAgJ2dpdmUtb3JpZ2luJzogJ0zDpGh0w7ZwYWlra2EnLFxuICAgICAgJ2dpdmUtZGVzdGluYXRpb24nOiAnTcOkw6Ryw6RucMOkw6QnLFxuICAgICAgb3JpZ2luOiAnTMOkaHTDtnBhaWtrYScsXG4gICAgICAnb3JpZ2luLXN0b3AtbmVhci15b3UnOiAnTMOkaHTDtnBhaWtrYScsXG4gICAgICBvd25sb2NhdGlvbnM6ICdPbWF0IHBhaWthdCcsXG4gICAgICBsb2FkaW5nOiAnTGFkYXRhYW4uLi4nLFxuICAgICAgJ21pbnV0ZS1zaG9ydCc6ICdtaW4nLFxuICAgICAgcGxhdGZvcm06ICdMYWl0dXJpJyxcbiAgICAgIHJhaWw6ICdKdW5hJyxcbiAgICAgIHJlcXVpcmVkOiAncGFrb2xsaW5lbiBrZW50dMOkJyxcbiAgICAgIHNlYXJjaDogJ0V0c2knLFxuICAgICAgJ3NlYXJjaC1hZGRyZXNzLW9yLXBsYWNlJzogJ0hhZSBvc29pdHRlZWxsYSB0YWkgcGFpa2FuIG5pbWVsbMOkJyxcbiAgICAgICdzZWFyY2gtYnV0dG9uLWxhYmVsJzogJ0hhZScsXG4gICAgICAnc2VhcmNoLWRlc3RpbmF0aW9uJzogJ0hhZSBtw6TDpHLDpG5ww6TDpHTDpCwgbGluamFhIHRhaSBweXPDpGtracOkJyxcbiAgICAgICdzZWFyY2gtZGVzdGluYXRpb24taW5kZXgnOiAnU3nDtnTDpCBtw6TDpHLDpG5ww6TDpCcsXG4gICAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLXJlc3VsdHMtYnV0LW5vLXNlYXJjaCc6XG4gICAgICAgICdLYXRzbyB0dWxva3NldCB2aWVyZWlzZWx0w6QgTcOkw6Ryw6RucMOkw6QtdsOkbGlsZWhkZWx0w6QnLFxuICAgICAgJ3NlYXJjaC1uby1yZXN1bHRzJzogJ0VpIHR1bG9rc2lhJyxcbiAgICAgICdzZWFyY2gtb3JpZ2luJzogJ0hhZSBsw6RodMO2cGFpa2thYSwgbGluamFhIHRhaSBweXPDpGtracOkJyxcbiAgICAgICdzZWFyY2gtb3JpZ2luLWluZGV4JzogJ1N5w7Z0w6QgbMOkaHTDtnBhaWtrYScsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsJzogJ1BhaWtrYSwgbGluamEgamEgcHlzw6Rra2loYWt1LicsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1kZXNrdG9wJzpcbiAgICAgICAgJ05hdmlnb2kgbGlzdGFzc2EgbnVvbGluw6RwcMOkaW1pbGzDpCBqYSB2YWxpdHNlIGVudGVyaWxsw6QuJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLW1vYmlsZSc6XG4gICAgICAgICdTecO2dMOkIHNpamFpbnRpIGphIG5hdmlnb2kgbGlzdGFzc2EgcHl5aGvDpGlzZW3DpGxsw6QuJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtbW92ZS10by1kZXN0aW5hdGlvbic6XG4gICAgICAgICdWYWxpdHR1YXNpIGzDpGh0w7ZwYWlrYW4gc2lpcnJ5dMOkw6RuIHN1b3JhYW4gbcOkw6Ryw6RucMOkw6Qta2VudHTDpMOkbi4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW4nOiAnIEzDtnlkZXR0aWluIHt7Y291bnR9fSBlaGRvdHVzJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuX3BsdXJhbCc6ICcgTMO2eWRldHRpaW4ge3tjb3VudH19IGVoZG90dXN0YScsXG4gICAgICAnc2VhcmNoLWN1cnJlbnQtc3VnZ2VzdGlvbic6ICdUw6Rtw6RuaGV0a2luZW4gdmFsaW50YToge3tzZWxlY3Rpb259fScsXG4gICAgICAnc2VhcmNoLXBvc2l0aW9uJzogJ1BhaWthbm5hJyxcbiAgICAgIHN0cmVldDogJ0thdHUnLFxuICAgICAgc3Vid2F5OiAnTWV0cm8nLFxuICAgICAgc3RhdGlvbjogJ0FzZW1hJyxcbiAgICAgIHN0b3A6ICdQeXPDpGtraScsXG4gICAgICAnc3RvcC1uZWFyLXlvdSc6ICdMaW5qYSwgcHlzw6Rra2kgdGFpIGFzZW1hJyxcbiAgICAgICdzdG9wLW5lYXIteW91LWFpcnBsYW5lJzogJ0hhZSBsZW50b2phIHRhaSBsZW50b2FzZW1hYScsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1iaWtlcGFyayc6ICdIYWUgcHnDtnLDpHBhcmtraWEnLFxuICAgICAgJ3N0b3AtbmVhci15b3UtYnVzJzogJ0hhZSBidXNzaWxpbmphYSB0YWkgcHlzw6Rra2nDpCcsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1jYXJwYXJrJzogJ0hhZSBhdXRvcGFya2tpYScsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1jaXR5YmlrZSc6ICdIYWUga2F1cHVua2lwecO2csOkYXNlbWFhJyxcbiAgICAgICdzdG9wLW5lYXIteW91LXJhaWwnOiAnSGFlIGzDpGhpanVuYWEgdGFpIGFzZW1hYScsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1zdWJ3YXknOiAnSGFlIG1ldHJvbGluamFhIHRhaSBhc2VtYWEnLFxuICAgICAgJ3N0b3AtbmVhci15b3UtdHJhbSc6ICdIYWUgcmFpdGlvbGluamFhIHRhaSBweXPDpGtracOkJyxcbiAgICAgICdzdG9wLXJvdXRlLXN0YXRpb24nOiAnTGluamEtIGphIHB5c8Oka2tpaGFrdScsXG4gICAgICAndG9kYXktYXQnOiAndMOkbsOkw6RuIGtsbycsXG4gICAgICAndG9tb3Jyb3ctYXQnOiAnaHVvbWVubmEga2xvJyxcbiAgICAgIHRyYW06ICdSYWl0aW92YXVudScsXG4gICAgICB0cmFjazogJ1JhaWRlJyxcbiAgICAgICd1c2Utb3duLXBvc2l0aW9uJzogJ0vDpHl0w6QgbnlreWlzdMOkIHNpamFpbnRpYScsXG4gICAgICAnc2VsZWN0LWZyb20tbWFwJzogJ1ZhbGl0c2Ugc2lqYWludGkga2FydGFsdGEnLFxuICAgICAgJ3NlbGVjdC1mcm9tLW93bi1sb2NhdGlvbnMnOiAnVmFsaXRzZSBvbWlzdGEgcGFpa29pc3RhJyxcbiAgICAgIHZlbnVlOiAnUGFpa2thJyxcbiAgICAgICd2aWEtcG9pbnQnOiAnVsOkbGlwaXN0ZScsXG4gICAgICB3aGVyZTogJ01pbm5lIG1lbm7DpMOkbj8nLFxuICAgICAgcGxhY2U6ICdQYWlra2EnLFxuICAgIH0sXG4gIH0sXG4gIHBsOiB7XG4gICAgdHJhbnNsYXRpb246IHtcbiAgICAgIGFkZHJlc3M6ICdBZHJlcycsXG4gICAgICAnYWRkcmVzcy1wbGFjZS1vci1idXNpbmVzcyc6ICdBZHJlcywgbWllanNjZSBsdWIgZmlybWEnLFxuICAgICAgJ2FkZC12aWEtYnV0dG9uLWxhYmVsJzogJ0RvZGFqIHB1bmt0IHBvxZtyZWRuaScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwnOlxuICAgICAgICAnV3liaWVyeiBjemFzIHBvc3RvanUgZGxhIHB1bmt0dSB7e2luZGV4fX0nLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLWNsb3NlJzpcbiAgICAgICAgJ1phbWtuaWogd3lib3JuaWsgY3phc3UgcG9zdG9qdSB3IHB1bmtjaWUge3tpbmRleH19JyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1vcGVuJzpcbiAgICAgICAgJ090d8Ozcnogd3lib3JuaWsgY3phc3UgcG9zdG9qdSB3IHB1bmtjaWUge3tpbmRleH19JyxcbiAgICAgIGFpcnBsYW5lOiAnTG90JyxcbiAgICAgIGFycml2YWw6ICdQcnp5amF6ZCcsXG4gICAgICBiYWNrOiAnV3LDs8SHJyxcbiAgICAgIGJpa2VwYXJrOiAnUGFya3VqIGkgSmVkxbogZGxhIHJvd2Vyw7N3JyxcbiAgICAgIGJpa2VyZW50YWxzdGF0aW9uOiAnU3RhY2phIHJvd2Vyb3dhJyxcbiAgICAgIGJ1czogJ2F1dG9idXMnLFxuICAgICAgY2FuY2VsOiAnQW51bHVqJyxcbiAgICAgIGNhcnBhcms6ICdQYXJrdWogaSBKZWTFuicsXG4gICAgICAnY2xlYXItYnV0dG9uLWxhYmVsJzogJ1d5Y3p5xZvEhycsXG4gICAgICAnY2xlYXItc2VhcmNoLWhpc3RvcnknOiAnV3ljennFm8SHIGhpc3RvcmnEmSB3eXN6dWtpd2FuaWEnLFxuICAgICAgY3VycmVudHBvc2l0aW9uOiAnT2JlY25lIHBvxYJvxbxlbmllJyxcbiAgICAgIGRlbGV0ZTogJ1VzdcWEJyxcbiAgICAgICdkZWxldGUtb2xkLXNlYXJjaGVzLWhlYWRlcic6XG4gICAgICAgICdDenkgbmEgcGV3bm8gY2hjZXN6IHd5Y3p5xZtjacSHIGhpc3RvcmnEmSB3eXN6dWtpd2FuaWE/JyxcbiAgICAgIGRlcGFydHVyZTogJ09kamF6ZCcsXG4gICAgICBkZXN0aW5hdGlvbjogJ0NlbCcsXG4gICAgICAnZ2l2ZS1vcmlnaW4nOiAnV3Byb3dhZMW6IHN3w7NqIHB1bmt0IHBvY3rEhXRrb3d5LicsXG4gICAgICAnZ2l2ZS1kZXN0aW5hdGlvbic6ICdXcHJvd2Fkxbogc3fDs2ogY2VsJyxcbiAgICAgIGZhdm91cml0ZTogJ1VsdWJpb25lJyxcbiAgICAgIGZlcnJ5OiAnUHJvbScsXG4gICAgICAnZnV0dXJlLXJvdXRlJzogJ1ByenlzesWCYSB0cmFzYScsXG4gICAgICBvcmlnaW46ICdQb2N6xIV0ZWsnLFxuICAgICAgJ29yaWdpbi1zdG9wLW5lYXIteW91JzogJ1BvY3rEhXRlaycsXG4gICAgICBvd25sb2NhdGlvbnM6ICdXxYJhc25lIG1pZWpzY2EnLFxuICAgICAgbG9hZGluZzogJ8WBYWRvd2FuaWXigKYnLFxuICAgICAgJ21pbnV0ZS1zaG9ydCc6ICdtaW4uJyxcbiAgICAgIHBsYXRmb3JtOiAnUGVyb24nLFxuICAgICAgcmFpbDogJ1BvY2nEhWcnLFxuICAgICAgcmVxdWlyZWQ6ICd3eW1hZ2FuZSBwb2xlJyxcbiAgICAgIHNlYXJjaDogJ1N6dWthaicsXG4gICAgICAnc2VhcmNoLWFkZHJlc3Mtb3ItcGxhY2UnOiAnU3p1a2FqIHBvIGFkcmVzaWUgbHViIG5hendpZSBtaWVqc2NhJyxcbiAgICAgICdzZWFyY2gtYnV0dG9uLWxhYmVsJzogJ1N6dWthaicsXG4gICAgICAnc2VhcmNoLWRlc3RpbmF0aW9uJzogJ1N6dWthaiBjZWx1LCB0cmFzeSBsdWIgcHJ6eXN0YW5rdScsXG4gICAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLWluZGV4JzogJ1dwcm93YWTFuiBwdW5rdCBkb2NlbG93eScsXG4gICAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLXJlc3VsdHMtYnV0LW5vLXNlYXJjaCc6XG4gICAgICAgICdXecWbd2lldGwgd3luaWtpIHcgc8SFc2llZG5pZWoga2FyY2llIOKAnkNlbOKAnScsXG4gICAgICAnc2VhcmNoLW5vLXJlc3VsdHMnOiAnQnJhayBsb2thbGl6YWNqaScsXG4gICAgICAnc2VhcmNoLW9yaWdpbic6ICdXeXN6dWthaiBwb2N6xIV0ZWssIGtvbmllYyBsdWIgcHVua3QgcG/Fm3JlZG5pJyxcbiAgICAgICdzZWFyY2gtb3JpZ2luLWluZGV4JzogJ1dwcm93YWTFuiBwdW5rdCBwb2N6xIV0a293eScsXG4gICAgICAnc2VhcmNoLXBvc2l0aW9uJzogJ1d5a3J5aiBsb2thbGl6YWNqxJknLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbCc6ICdNaWVqc2NlLCBsb2thbGl6YWNqYSBpIHByenlzdGFuZWsuJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLWRlc2t0b3AnOlxuICAgICAgICAnTmF3aWd1aiBwbyBsacWbY2llIHXFvHl3YWrEhWMgc3RyemHFgmVrIGkgd3liaWVyYWoga2xhd2lzemVtIEVudGVyLicsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1tb2JpbGUnOlxuICAgICAgICAnV3Byb3dhZMW6IGxva2FsaXphY2rEmSBpIG5hd2lndWogcG8gbGnFm2NpZSBnZXN0YW1pIHByemVzdXdhbmlhLicsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLW1vdmUtdG8tZGVzdGluYXRpb24nOlxuICAgICAgICAnUG8gd3licmFuaXUgbG9rYWxpemFjamkgcG9jesSFdGtvd2VqLCBhdXRvbWF0eWN6bmllIHByemVqZHppZXN6IGRvIHBvbGEgbWllanNjYSBkb2NlbG93ZWdvLicsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbic6ICdEb3N0xJlwbmEgamVzdCB7e2NvdW50fX0gcHJvcG96eWNqYScsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbl9mZXcnOiAnRG9zdMSZcG5lIHPEhSB7e2NvdW50fX0gcHJvcG96eWNqZScsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbl9vdGhlcic6ICdEb3N0xJlwbmUgamVzdCB7e2NvdW50fX0gcHJvcG96eWNqaScsXG4gICAgICAnc2VhcmNoLWN1cnJlbnQtc3VnZ2VzdGlvbic6ICdPYmVjbnkgd3liw7NyOiB7e3NlbGVjdGlvbn19JyxcbiAgICAgIHN0cmVldDogJ1VsaWNhJyxcbiAgICAgIHN1YndheTogJ01ldHJvJyxcbiAgICAgIHN0YXRpb246ICdTdGFjamEnLFxuICAgICAgc3RvcDogJ1ByenlzdGFuZWsnLFxuICAgICAgJ3N0b3AtbmVhci15b3UnOiAnU3p1a2FqIHByenlzdGFua8OzdyBpIHRyYXMnLFxuICAgICAgJ3N0b3AtbmVhci15b3UtYWlycGxhbmUnOiAnU3p1a2FqIGxvdMOzdyBpIGxvdG5pc2snLFxuICAgICAgJ3N0b3AtbmVhci15b3UtYnVzJzogJ1N6dWthaiB0cmFzIGF1dG9idXNvd3ljaCBpIHByenlzdGFua8OzdycsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1jaXR5YmlrZSc6ICdTenVrYWogc3RhY2ppIHJvd2Vyw7N3IG1pZWpza2ljaCcsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1yYWlsJzogJ1N6dWthaiB0cmFzIGtvbGVqb3d5Y2ggaSBwcnp5c3RhbmvDs3cnLFxuICAgICAgJ3N0b3AtbmVhci15b3Utc3Vid2F5JzogJ1N6dWthaiB0cmFzIG1ldHJhIGkgcHJ6eXN0YW5rw7N3ICcsXG4gICAgICAnc3RvcC1uZWFyLXlvdS10cmFtJzogJ1N6dWthaiB0cmFzIHRyYW13YWpvd3ljaCBpIHByenlzdGFua8OzdycsXG4gICAgICAnc3RvcC1yb3V0ZS1zdGF0aW9uJzogJ1d5c3p1a2l3YW5pZSBhdXRvYnVzw7N3IGkgcHJ6eXN0YW5rw7N3JyxcbiAgICAgICd0b2RheS1hdCc6ICdkemnFmyBvJyxcbiAgICAgICd0b21vcnJvdy1hdCc6ICdqdXRybyBvJyxcbiAgICAgIHRyYW06ICdUcmFtd2FqJyxcbiAgICAgIHRyYWNrOiAnVG9yJyxcbiAgICAgICd1c2Utb3duLXBvc2l0aW9uJzogJ1XFvHlqIG9iZWNuZWogbG9rYWxpemFjamknLFxuICAgICAgJ3NlbGVjdC1mcm9tLW1hcCc6ICdXeWJpZXJ6IG1pZWpzY2UgbmEgbWFwaWUnLFxuICAgICAgJ3NlbGVjdC1mcm9tLW93bi1sb2NhdGlvbnMnOiAnV3liaWVyeiB6IHfFgmFzbnljaCBtaWVqc2MnLFxuICAgICAgdmVudWU6ICdNaWVqc2NlJyxcbiAgICAgICd2aWEtcG9pbnQnOiAnUHJ6ZXogcHVua3QnLFxuICAgICAgd2hlcmU6ICdEb2vEhWQ/JyxcbiAgICAgIHBsYWNlOiAnTWllanNjZScsXG4gICAgfSxcbiAgfSxcbiAgc3Y6IHtcbiAgICB0cmFuc2xhdGlvbjoge1xuICAgICAgYWRkcmVzczogJ0FkcmVzcycsXG4gICAgICAnYWRkcmVzcy1wbGFjZS1vci1idXNpbmVzcyc6ICdBZHJlc3MsIHBsYXRzIGVsbGVyIGbDtnJldGFnJyxcbiAgICAgICdhZGQtdmlhLWJ1dHRvbi1sYWJlbCc6ICdMw6RnZyB0aWxsIHZpYXB1bmt0JyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbCc6XG4gICAgICAgICdTdMOkbGwgaW4gdmFyYWt0aWdoZXQgZsO2ciB2aWFwdW5rdGVuIHt7aW5kZXh9fScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtY2xvc2UnOlxuICAgICAgICAnU3TDpG5nIHbDpGxqYXJlbiBmw7ZyIHZhcmFrdGlnaGV0IHZpZCB2aWEtcHVua3RlbiB7e2luZGV4fX0nLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLW9wZW4nOlxuICAgICAgICAnw5ZwcG5hIHbDpGxqYXJlbiBmw7ZyIHZhcmFrdGlnaGV0IHZpZCB2aWEtcHVua3RlbiB7e2luZGV4fX0nLFxuICAgICAgYWlycGxhbmU6ICdGbHlnJyxcbiAgICAgIGFycml2YWw6ICdBbmzDpG5kZXInLFxuICAgICAgYmFjazogJ1RpbGxiYWthJyxcbiAgICAgIGJpa2VyZW50YWxzdGF0aW9uOiAnU3RhZHNjeWtlbHN0YXRpb24nLFxuICAgICAgYmlrZXBhcms6ICdBbnNsdXRuaW5nc3BhcmtlcmluZyBmw7ZyIGN5a2xhcicsXG4gICAgICBidXM6ICdCdXNzaScsXG4gICAgICBjYW5jZWw6ICdBdmJyeXQnLFxuICAgICAgY2FycGFyazogJ0luZmFydHNwYXJrZXJpbmcnLFxuICAgICAgJ2NsZWFyLWJ1dHRvbi1sYWJlbCc6ICdUw7ZtJyxcbiAgICAgICdjbGVhci1zZWFyY2gtaGlzdG9yeSc6ICdUw7ZtIHPDtmtoaXN0b3Jpa2VuJyxcbiAgICAgIGN1cnJlbnRwb3NpdGlvbjogJ051dmFyYW5kZSBwb3NpdGlvbicsXG4gICAgICBkZWxldGU6ICdUYSBib3J0JyxcbiAgICAgICdkZWxldGUtb2xkLXNlYXJjaGVzLWhlYWRlcic6ICdWaWxsIGR1IHTDtm1tYSBzw7ZraGlzdG9yaWtlbj8nLFxuICAgICAgZGVwYXJ0dXJlOiAnQXZnw6VuZ3N0aWQnLFxuICAgICAgZGVzdGluYXRpb246ICdEZXN0aW5hdGlvbicsXG4gICAgICBmYXZvdXJpdGU6ICdGYXZvcml0JyxcbiAgICAgIGZlcnJ5OiAnRsOkcmphJyxcbiAgICAgICdmdXR1cmUtcm91dGUnOiAnRnJhbXRpZGEgcnV0dCcsXG4gICAgICAnZ2l2ZS1kZXN0aW5hdGlvbic6ICdTa3JpdiBpbiBkaW4gZGVzdGluYXRpb24nLFxuICAgICAgJ2dpdmUtb3JpZ2luJzogJ1Nrcml2IGluIGRpbiBhdmbDpHJkc3BsYXRzJyxcbiAgICAgIG9yaWdpbjogJ0F2ZsOkcmRzcGxhdHMnLFxuICAgICAgJ29yaWdpbi1zdG9wLW5lYXIteW91JzogJ0F2ZsOkcmRzcGxhdHMnLFxuICAgICAgb3dubG9jYXRpb25zOiAnRWduYSBwbGF0c2VyJyxcbiAgICAgIGxvYWRpbmc6ICdMYWRkYXIuLi4nLFxuICAgICAgJ21pbnV0ZS1zaG9ydCc6ICdtaW4nLFxuICAgICAgcGxhdGZvcm06ICdQbGF0dGZvcm0nLFxuICAgICAgcmFpbDogJ1TDpWcnLFxuICAgICAgcmVxdWlyZWQ6ICdvYmxpZ2F0b3Jpc2t0IGbDpGx0JyxcbiAgICAgIHNlYXJjaDogJ1PDtmsnLFxuICAgICAgJ3NlYXJjaC1hZGRyZXNzLW9yLXBsYWNlJzogJ1PDtmsgbWVkIGFkcmVzc2VuIGVsbGVyIHBsYXRzZW5zIG5hbW4nLFxuICAgICAgJ3NlYXJjaC1idXR0b24tbGFiZWwnOiAnU8O2aycsXG4gICAgICAnc2VhcmNoLWRlc3RpbmF0aW9uJzogJ1PDtmsgZGVzdGluYXRpb24sIGxpbmplIGVsbGVyIGjDpWxscGxhdHMnLFxuICAgICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1pbmRleCc6ICdTa3JpdiBkZXN0aW5hdGlvbicsXG4gICAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLXJlc3VsdHMtYnV0LW5vLXNlYXJjaCc6XG4gICAgICAgICdTZSByZXN1bHRhdGVuIHVuZGVyIGZsaWtlbiBEZXN0aW5hdGlvbicsXG4gICAgICAnc2VhcmNoLW5vLXJlc3VsdHMnOiAnSW5nYSBzw7ZrcmVzdWx0YXQnLFxuICAgICAgJ3NlYXJjaC1vcmlnaW4nOiAnU8O2ayBhdmbDpHJkc3BsYXRzLCBsaW5qZSBlbGxlciBow6VsbHBsYXRzJyxcbiAgICAgICdzZWFyY2gtb3JpZ2luLWluZGV4JzogJ1Nrcml2IGF2ZsOkcmRzcGxhdHMnLFxuICAgICAgJ3NlYXJjaC1wb3NpdGlvbic6ICdTw7ZrIHBvc2l0aW9uJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwnOiAnUGxhdHMsIGxpbmplIG9jaCBow6VsbHBsYXRzc8O2a25pbmcuJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLWRlc2t0b3AnOlxuICAgICAgICAnTmF2aWdlcmEgbGlzdGFuIG1lZCBwaWx0YW5nZW50ZXJuYSBvY2ggdsOkbGogbWVkIEVudGVyLXRhbmdldGVuLicsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1tb2JpbGUnOlxuICAgICAgICAnQW5nZSBwbGF0c2VuIG9jaCBuYXZpZ2VyYSBpIGxpc3RhbiBnZW5vbSBhdHQgc3ZlcGEuJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtbW92ZS10by1kZXN0aW5hdGlvbic6XG4gICAgICAgICdFZnRlciBhdHQgZHUgdmFsdCBhdmfDpW5nc3BsYXRzZW4gdGFzIGR1IGRpcmVrdCB0aWxsIERlc3RpbmF0aW9uLWbDpGx0ZXQuJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuJzogJ0hpdHRhZGUge3tjb3VudH19IGbDtnJzbGFnJyxcbiAgICAgICdzZWFyY2gtY3VycmVudC1zdWdnZXN0aW9uJzogJ051dmFyYW5kZSB2YWw6IHt7c2VsZWN0aW9ufX0nLFxuICAgICAgc3RyZWV0OiAnR2F0YScsXG4gICAgICBzdWJ3YXk6ICdNZXRybycsXG4gICAgICBzdGF0aW9uOiAnU3RhdGlvbicsXG4gICAgICBzdG9wOiAnSMOlbGxwbGF0cycsXG4gICAgICAnc3RvcC1uZWFyLXlvdSc6ICdTw7ZrIGjDpWxscGxhdHNlciBlbGxlciBsaW5qZXInLFxuICAgICAgJ3N0b3AtbmVhci15b3UtYWlycGxhbmUnOiAnU8O2ayBmbHlnIGVsbGVyIGZseWdwbGF0c2VyJyxcbiAgICAgICdzdG9wLW5lYXIteW91LWJpa2VwYXJrJzogJ1PDtmsgY3lrZWxwYXJrZXJpbmcnLFxuICAgICAgJ3N0b3AtbmVhci15b3UtYnVzJzogJ1PDtmsgYnVzc2xpbmplciBlbGxlciBow6VsbHBsYXRzZXInLFxuICAgICAgJ3N0b3AtbmVhci15b3UtY2FycGFyayc6ICdTw7ZrIGFuc2x1dG5pbmdzcGFya2VyaW5nJyxcbiAgICAgICdzdG9wLW5lYXIteW91LWNpdHliaWtlJzogJ1PDtmsgc3RhZHNjeWtlbHN0YXRpb25lcicsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1yYWlsJzogJ1PDtmsgbsOkcnTDpWdlciBlbGxlciBzdGF0aW9uZXInLFxuICAgICAgJ3N0b3AtbmVhci15b3Utc3Vid2F5JzogJ1PDtmsgbWV0cm9saW5qZXIgZWxsZXIgc3RhdGlvbmVyJyxcbiAgICAgICdzdG9wLW5lYXIteW91LXRyYW0nOiAnU8O2ayBzcMOlcnZhZ25saW5qZXIgZWxsZXIgaMOlbGxwbGF0c2VyJyxcbiAgICAgICdzdG9wLXJvdXRlLXN0YXRpb24nOiAnQnVzcyBvY2ggc3RvcHAgc8O2a25pbmdlbicsXG4gICAgICAndG9kYXktYXQnOiAnaSBkYWcga2wnLFxuICAgICAgJ3RvbW9ycm93LWF0JzogJ2kgbW9yZ29uJyxcbiAgICAgIHRyYW06ICdTcMOlcnZhZ24nLFxuICAgICAgdHJhY2s6ICdTcMOlcicsXG4gICAgICAndXNlLW93bi1wb3NpdGlvbic6ICdBbnbDpG5kIG1pbiBwb3NpdGlvbicsXG4gICAgICAnc2VsZWN0LWZyb20tbWFwJzogJ1bDpGxqIHBvc2l0aW9uIGZyw6VuIGthcnRhbicsXG4gICAgICAnc2VsZWN0LWZyb20tb3duLWxvY2F0aW9ucyc6ICdWw6RsaiBmcsOlbiBlZ25hIHBsYXRzZXInLFxuICAgICAgdmVudWU6ICdNw7Z0ZXNwbGF0cycsXG4gICAgICAndmlhLXBvaW50JzogJ1ZpYSBwdW5rdCcsXG4gICAgICB3aGVyZTogJ1ZhcnQgdmlsbCBkdSDDpWthPycsXG4gICAgICBwbGFjZTogJ1BsYXRzJyxcbiAgICB9LFxuICB9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgdHJhbnNsYXRpb25zO1xuIiwiZnVuY3Rpb24gc3R5bGVJbmplY3QoY3NzLCByZWYpIHtcbiAgaWYgKCByZWYgPT09IHZvaWQgMCApIHJlZiA9IHt9O1xuICB2YXIgaW5zZXJ0QXQgPSByZWYuaW5zZXJ0QXQ7XG5cbiAgaWYgKCFjc3MgfHwgdHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykgeyByZXR1cm47IH1cblxuICB2YXIgaGVhZCA9IGRvY3VtZW50LmhlYWQgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTtcbiAgdmFyIHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgc3R5bGUudHlwZSA9ICd0ZXh0L2Nzcyc7XG5cbiAgaWYgKGluc2VydEF0ID09PSAndG9wJykge1xuICAgIGlmIChoZWFkLmZpcnN0Q2hpbGQpIHtcbiAgICAgIGhlYWQuaW5zZXJ0QmVmb3JlKHN0eWxlLCBoZWFkLmZpcnN0Q2hpbGQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBoZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG4gIH1cblxuICBpZiAoc3R5bGUuc3R5bGVTaGVldCkge1xuICAgIHN0eWxlLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcbiAgfSBlbHNlIHtcbiAgICBzdHlsZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBzdHlsZUluamVjdDtcbiIsImltcG9ydCB1bmlxV2l0aCBmcm9tICdsb2Rhc2gvdW5pcVdpdGgnO1xuaW1wb3J0IGlzRXF1YWwgZnJvbSAnbG9kYXNoL2lzRXF1YWwnO1xuaW1wb3J0IG1lbW9pemUgZnJvbSAnbG9kYXNoL21lbW9pemUnO1xuaW1wb3J0IGVzY2FwZVJlZ0V4cCBmcm9tICdsb2Rhc2gvZXNjYXBlUmVnRXhwJztcbmltcG9ydCBjbG9uZURlZXAgZnJvbSAnbG9kYXNoL2Nsb25lRGVlcCc7XG5cbi8qKlxuICogTG9jYXRpb24gcHJvcGVydGllcy5cbiAqIEB0eXBlZGVmIHtMb2NhdGlvblByb3BlcnRpZXN9XG4gKiBAcHJvcGVydHkge3N0cmluZ30gbGF5ZXIgU3VnZ2VzdGlvbiBsYXllci5cbiAqIEBwcm9wZXJ0eSB7bGF0fSBbbnVtYmVyXVxuICogQHByb3BlcnR5IHtsb259IFtudW1iZXJdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYWRkcmVzcyBBZGRyZXNzLlxuICovXG5cbi8qKlxuICogUmV0dXJucyBsb2NhbGFkbWluIChjaXR5IG5hbWUpIGZvciBzdWdnZXN0aW9uc1xuICpcbiAqIEBuYW1lIGdldExvY2FsYWRtaW5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzdWdnZXN0aW9uIHN1Z2dlc3Rpb24ncyBwcm9wZXJ0aWVzIGZyb20gZ2VvY29kaW5nIG9yIGEgZmF2b3VyaXRlIHN0b3Avc3RhdGlvbi5cbiAqIEV4cGVjdHMgbGFzdCBwYXJ0IG9mIGFuIGFkZHJlc3MgKGFmdGVyICcsJykgdG8gY29udGFpbiB0aGUgY2l0eSBuYW1lIG9mIHRoZSBzdWdnZXN0aW9uIGxvY2F0aW9uLlxuICogQHJldHVybnMge1N0cmluZ30gIENpdHkgbmFtZSBvciBlbXB0eSBzdHJpbmdcbiAqL1xuY29uc3QgZ2V0TG9jYWxhZG1pbiA9IHN1Z2dlc3Rpb24gPT5cbiAgc3VnZ2VzdGlvbi5sb2NhbGFkbWluIHx8XG4gIHN1Z2dlc3Rpb24ubG9jYWxhZG1pbiB8fFxuICAoc3VnZ2VzdGlvbi5hZGRyZXNzICYmXG4gICAgc3VnZ2VzdGlvbi5hZGRyZXNzLmxhc3RJbmRleE9mKCcsJykgPCBzdWdnZXN0aW9uLmFkZHJlc3MubGVuZ3RoIC0gMiAmJlxuICAgIHN1Z2dlc3Rpb24uYWRkcmVzcy5zdWJzdHJpbmcoc3VnZ2VzdGlvbi5hZGRyZXNzLmxhc3RJbmRleE9mKCcsJykgKyAyKSkgfHxcbiAgJyc7XG5cbmV4cG9ydCBjb25zdCBnZXRTdG9wQ29kZSA9ICh7IGlkLCBjb2RlIH0pID0+IHtcbiAgaWYgKGNvZGUpIHtcbiAgICByZXR1cm4gY29kZTtcbiAgfVxuICBpZiAoXG4gICAgaWQgPT09IHVuZGVmaW5lZCB8fFxuICAgIHR5cGVvZiBpZC5pbmRleE9mID09PSAndW5kZWZpbmVkJyB8fFxuICAgIGlkLmluZGV4T2YoJyMnKSA9PT0gLTFcbiAgKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICAvLyBpZCBmcm9tIHBlbGlhc1xuICByZXR1cm4gaWQuc3Vic3RyaW5nKGlkLmluZGV4T2YoJyMnKSArIDEpO1xufTtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdEZhdm91cml0ZVBsYWNlTGFiZWwgPSAobmFtZSwgYWRkcmVzcykgPT4gW1xuICBuYW1lIHx8IChhZGRyZXNzICYmIGFkZHJlc3Muc3BsaXQoJywnKVswXSksXG4gIHR5cGVvZiBhZGRyZXNzID09PSAnc3RyaW5nJ1xuICAgID8gYWRkcmVzcy5yZXBsYWNlKG5ldyBSZWdFeHAoYCR7ZXNjYXBlUmVnRXhwKG5hbWUpfShbICxdfCQpK2ApLCAnJylcbiAgICA6ICcnLFxuXTtcblxuLyoqXG4gKiBGb3JtYXQgc3VnZ2VzdGlvbi1wYWlyIFtuYW1lLCBhZGRyZXNzXSBieSBgc3VnZ2VzdGlvbi5sYXllcmAuXG4gKlxuICogQG5hbWUgZ2V0TmFtZUxhYmVsXG4gKiBAcGFyYW0ge0xvY2F0aW9uUHJvcGVydGllc30gc3VnZ2VzdGlvblxuICogQHBhcmFtIHtib29sZWFufSBbcGxhaW5dXG4gKlxuICogQHJldHVybnMge0FycmF5LjxzdHJpbmc+fSBGb3JtYXR0ZWQgbGFiZWwuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXROYW1lTGFiZWwgPSBtZW1vaXplKFxuICAoc3VnZ2VzdGlvbiwgcGxhaW4gPSBmYWxzZSkgPT4ge1xuICAgIHN3aXRjaCAoc3VnZ2VzdGlvbi5sYXllcikge1xuICAgICAgY2FzZSAnY3VycmVudFBvc2l0aW9uJzpcbiAgICAgICAgcmV0dXJuIFtzdWdnZXN0aW9uLmxhYmVsSWQsIHN1Z2dlc3Rpb24uYWRkcmVzc107XG4gICAgICBjYXNlICdzZWxlY3RGcm9tTWFwJzpcbiAgICAgIGNhc2UgJ293bkxvY2F0aW9ucyc6XG4gICAgICBjYXNlICdiYWNrJzpcbiAgICAgICAgcmV0dXJuIFtzdWdnZXN0aW9uLmxhYmVsSWRdO1xuICAgICAgY2FzZSAnZmF2b3VyaXRlUGxhY2UnOlxuICAgICAgICByZXR1cm4gZm9ybWF0RmF2b3VyaXRlUGxhY2VMYWJlbChzdWdnZXN0aW9uLm5hbWUsIHN1Z2dlc3Rpb24uYWRkcmVzcyk7XG4gICAgICBjYXNlICdmYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbic6XG4gICAgICBjYXNlICdiaWtlc3RhdGlvbic6XG4gICAgICAgIHJldHVybiBbc3VnZ2VzdGlvbi5uYW1lXTtcbiAgICAgIGNhc2UgJ2Zhdm91cml0ZVJvdXRlJzpcbiAgICAgIGNhc2UgJ3JvdXRlLUJVUyc6XG4gICAgICBjYXNlICdyb3V0ZS1UUkFNJzpcbiAgICAgIGNhc2UgJ3JvdXRlLVJBSUwnOlxuICAgICAgY2FzZSAncm91dGUtU1VCV0FZJzpcbiAgICAgIGNhc2UgJ3JvdXRlLUZFUlJZJzpcbiAgICAgIGNhc2UgJ3JvdXRlLUZVTklDVUxBUic6XG4gICAgICBjYXNlICdyb3V0ZS1BSVJQTEFORSc6XG4gICAgICAgIHJldHVybiAhcGxhaW4gJiYgc3VnZ2VzdGlvbi5zaG9ydE5hbWVcbiAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5ndGZzSWQsXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubW9kZS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLmxvbmdOYW1lLFxuICAgICAgICAgICAgXVxuICAgICAgICAgIDogW1xuICAgICAgICAgICAgICBzdWdnZXN0aW9uLnNob3J0TmFtZSxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5sb25nTmFtZSxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5hZ2VuY3kgPyBzdWdnZXN0aW9uLmFnZW5jeS5uYW1lIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgXTtcbiAgICAgIGNhc2UgJ3ZlbnVlJzpcbiAgICAgIGNhc2UgJ2FkZHJlc3MnOlxuICAgICAgY2FzZSAnc3RyZWV0JzpcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBzdWdnZXN0aW9uLm5hbWUsXG4gICAgICAgICAgc3VnZ2VzdGlvbi5sYWJlbC5yZXBsYWNlKFxuICAgICAgICAgICAgbmV3IFJlZ0V4cChgJHtlc2NhcGVSZWdFeHAoc3VnZ2VzdGlvbi5uYW1lKX0oLCk/KCApP2ApLFxuICAgICAgICAgICAgJycsXG4gICAgICAgICAgKSxcbiAgICAgICAgXTtcbiAgICAgIGNhc2UgJ2Zhdm91cml0ZVN0b3AnOlxuICAgICAgY2FzZSAnc3RvcCc6XG4gICAgICAgIHJldHVybiBwbGFpblxuICAgICAgICAgID8gW1xuICAgICAgICAgICAgICBzdWdnZXN0aW9uLm5hbWUgfHxcbiAgICAgICAgICAgICAgICBzdWdnZXN0aW9uLmxhYmVsIHx8XG4gICAgICAgICAgICAgICAgKHN1Z2dlc3Rpb24uYWRkcmVzcyAmJiBzdWdnZXN0aW9uLmFkZHJlc3Muc3BsaXQoJywnKVswXSksXG4gICAgICAgICAgICAgIGdldExvY2FsYWRtaW4oc3VnZ2VzdGlvbiksXG4gICAgICAgICAgICBdXG4gICAgICAgICAgOiBbXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubmFtZSxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5pZCxcbiAgICAgICAgICAgICAgZ2V0U3RvcENvZGUoc3VnZ2VzdGlvbiksXG4gICAgICAgICAgICAgIGdldExvY2FsYWRtaW4oc3VnZ2VzdGlvbiksXG4gICAgICAgICAgICBdO1xuICAgICAgY2FzZSAnZmF2b3VyaXRlU3RhdGlvbic6XG4gICAgICBjYXNlICdzdGF0aW9uJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgc3VnZ2VzdGlvbi5uYW1lIHx8XG4gICAgICAgICAgICBzdWdnZXN0aW9uLmxhYmVsIHx8XG4gICAgICAgICAgICAoc3VnZ2VzdGlvbi5hZGRyZXNzICYmIHN1Z2dlc3Rpb24uYWRkcmVzcy5zcGxpdCgnLCcpWzBdKSxcbiAgICAgICAgICBnZXRMb2NhbGFkbWluKHN1Z2dlc3Rpb24pLFxuICAgICAgICBdO1xuICAgIH1cbiAgfSxcbiAgKGl0ZW0sIHBsYWluKSA9PiB7XG4gICAgY29uc3QgaSA9IGNsb25lRGVlcChpdGVtKTtcbiAgICBpLnBsYWluID0gcGxhaW47XG4gICAgcmV0dXJuIGk7XG4gIH0sXG4pO1xuXG4vKipcbiAqIENoZWNrcyB0aGF0IGZlYXR1cmVzIGFyZSB1bmlxdWUgYnkgbGFiZWxcbiAqXG4gKiBAbmFtZSB1bmlxQnlMYWJlbFxuICogQHBhcmFtIHtBcnJheX0gZmVhdHVyZXMgQXJyYXkgb2YgZmVhdHVyZXNcbiAqIEByZXR1cm5zIHtBcnJheX0gIEFycmF5IG9mIHVuaXF1ZSBmZWF0dXJlc1xuICogQGV4YW1wbGVcbiAqIGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLnVuaXFCeUxhYmVsKGZlYXR1cmVzKTtcbiAqIC8vPSBBcnJheSgyKVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1bmlxQnlMYWJlbChmZWF0dXJlcykge1xuICByZXR1cm4gdW5pcVdpdGgoZmVhdHVyZXMsIChmZWF0MSwgZmVhdDIpID0+IHtcbiAgICBpZiAoZmVhdDEudHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJyB8fCBmZWF0Mi50eXBlID09PSAnRnV0dXJlUm91dGUnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICBpc0VxdWFsKGdldE5hbWVMYWJlbChmZWF0MS5wcm9wZXJ0aWVzKSwgZ2V0TmFtZUxhYmVsKGZlYXQyLnByb3BlcnRpZXMpKSAmJlxuICAgICAgZmVhdDEucHJvcGVydGllcy5sYXllciA9PT0gZmVhdDIucHJvcGVydGllcy5sYXllclxuICAgICk7XG4gIH0pO1xufVxuIiwiaW1wb3J0IHtcbiAgZ2V0TmFtZUxhYmVsLFxuICBnZXRTdG9wQ29kZSxcbn0gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXVuaXEtYnktbGFiZWwnO1xuaW1wb3J0IHsgZ2V0U3RvcE5hbWUgfSBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtaGVscGVycyc7XG5pbXBvcnQgZ2V0TGFiZWwgZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1sYWJlbCc7XG5pbXBvcnQgeyBEYXRlVGltZSB9IGZyb20gJ2x1eG9uJztcblxuZXhwb3J0IGNvbnN0IGlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudCA9IGV2ZW50ID0+IHtcbiAgY29uc3Qgc3BhY2UgPSBbMTMsICcgJywgJ1NwYWNlYmFyJ107XG4gIGNvbnN0IGVudGVyID0gWzMyLCAnRW50ZXInXTtcbiAgY29uc3Qga2V5ID0gKGV2ZW50ICYmIChldmVudC5rZXkgfHwgZXZlbnQud2hpY2ggfHwgZXZlbnQua2V5Q29kZSkpIHx8ICcnO1xuXG4gIGlmICgha2V5IHx8ICFzcGFjZS5jb25jYXQoZW50ZXIpLmluY2x1ZGVzKGtleSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgcmV0dXJuIHRydWU7XG59O1xuXG5leHBvcnQgY29uc3QgaXNQT0lTZWFyY2ggPSBpZCA9PlxuICBpZCA9PT0gJ29yaWdpbicgfHxcbiAgaWQgPT09ICdkZXN0aW5hdGlvbicgfHxcbiAgaWQgPT09ICd2aWEtcG9pbnQnIHx8XG4gIGlkID09PSAnb3JpZ2luLXN0b3AtbmVhci15b3UnO1xuXG5leHBvcnQgY29uc3QgZ2V0UGxhdGZvcm0gPSAoYWRkZW5kdW0sIGxuZywgdCkgPT4ge1xuICAvLyBjaGVjayBpZiBpODFuIGlzIGluaXRpYWxpemVkXG4gIGlmICghdCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKCFhZGRlbmR1bSB8fCAhYWRkZW5kdW0uR1RGUy5wbGF0Zm9ybSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgeyBtb2RlcywgcGxhdGZvcm0gfSA9IGFkZGVuZHVtLkdURlM7XG4gIGNvbnN0IHR5cGUgPVxuICAgIG1vZGVzICYmIG1vZGVzWzBdID09PSAnUkFJTCcgPyB0KCd0cmFjaycsIHsgbG5nIH0pIDogdCgncGxhdGZvcm0nLCB7IGxuZyB9KTtcbiAgcmV0dXJuIFt0eXBlLCBwbGF0Zm9ybV07XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3VnZ2VzdGlvbkNvbnRlbnQoaXRlbSwgbG5nLCB0KSB7XG4gIC8vIGNoZWNrIGlmIGk4MW4gaXMgaW5pdGlhbGl6ZWRcbiAgaWYgKCF0KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoaXRlbS50eXBlICE9PSAnRnV0dXJlUm91dGUnKSB7XG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gJ1NlbGVjdEZyb21NYXAnKSB7XG4gICAgICByZXR1cm4gWycnLCB0KCdzZWxlY3QtZnJvbS1tYXAnLCB7IGxuZyB9KV07XG4gICAgfVxuICAgIGlmIChpdGVtLnR5cGUgPT09ICdDdXJyZW50TG9jYXRpb24nKSB7XG4gICAgICByZXR1cm4gWycnLCB0KCd1c2Utb3duLXBvc2l0aW9uJywgeyBsbmcgfSldO1xuICAgIH1cbiAgICBpZiAoaXRlbS50eXBlID09PSAnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycpIHtcbiAgICAgIHJldHVybiBbJycsIHQoJ3NlbGVjdC1mcm9tLW93bi1sb2NhdGlvbnMnLCB7IGxuZyB9KV07XG4gICAgfVxuICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3QgKi9cbiAgICBsZXQgW25hbWUsIGxhYmVsXSA9IGdldE5hbWVMYWJlbChpdGVtLnByb3BlcnRpZXMsIHRydWUpO1xuICAgIGxldCBzdWdnZXN0aW9uVHlwZTtcbiAgICBpZiAoXG4gICAgICBpdGVtLnByb3BlcnRpZXMubGF5ZXIudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnYmlrZXJlbnRhbCcpIHx8XG4gICAgICBpdGVtLnByb3BlcnRpZXMubGF5ZXIudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnYmlrZXN0YXRpb24nKVxuICAgICkge1xuICAgICAgc3VnZ2VzdGlvblR5cGUgPSB0KCd2ZWhpY2xlcmVudGFsc3RhdGlvbicsIHsgbG5nIH0pO1xuICAgICAgY29uc3Qgc3RvcENvZGUgPSBpdGVtLnByb3BlcnRpZXMubGFiZWxJZDtcbiAgICAgIHJldHVybiBbc3VnZ2VzdGlvblR5cGUsIG5hbWUsIHVuZGVmaW5lZCwgc3RvcENvZGVdO1xuICAgIH1cblxuICAgIGlmIChpdGVtLnByb3BlcnRpZXMubGF5ZXIgPT09ICdiaWtlcGFyaycpIHtcbiAgICAgIHN1Z2dlc3Rpb25UeXBlID0gdCgnYmlrZXBhcmsnLCB7IGxuZyB9KTtcbiAgICAgIHJldHVybiBbc3VnZ2VzdGlvblR5cGUsIG5hbWUsIHVuZGVmaW5lZCwgdW5kZWZpbmVkXTtcbiAgICB9XG5cbiAgICBpZiAoaXRlbS5wcm9wZXJ0aWVzLmxheWVyID09PSAnY2FycGFyaycpIHtcbiAgICAgIHN1Z2dlc3Rpb25UeXBlID0gdCgnY2FycGFyaycsIHsgbG5nIH0pO1xuICAgICAgcmV0dXJuIFtzdWdnZXN0aW9uVHlwZSwgbmFtZSwgdW5kZWZpbmVkLCB1bmRlZmluZWRdO1xuICAgIH1cblxuICAgIGlmIChpdGVtLnByb3BlcnRpZXMubW9kZSkge1xuICAgICAgc3VnZ2VzdGlvblR5cGUgPSB0KFxuICAgICAgICBpdGVtLnByb3BlcnRpZXMubW9kZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJ2Zhdm91cml0ZScsICcnKSxcbiAgICAgICAgeyBsbmcgfSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGxheWVyID0gaXRlbS5wcm9wZXJ0aWVzLmxheWVyXG4gICAgICAgIC5yZXBsYWNlKCdyb3V0ZS0nLCAnJylcbiAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgLnJlcGxhY2UoJ2Zhdm91cml0ZScsICcnKTtcbiAgICAgIHN1Z2dlc3Rpb25UeXBlID0gdChsYXllciwgeyBsbmcgfSk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgaXRlbS5wcm9wZXJ0aWVzLmlkICYmXG4gICAgICAoaXRlbS5wcm9wZXJ0aWVzLmxheWVyID09PSAnc3RvcCcgfHwgaXRlbS5wcm9wZXJ0aWVzLmxheWVyID09PSAnc3RhdGlvbicpXG4gICAgKSB7XG4gICAgICBjb25zdCBzdG9wQ29kZSA9IGdldFN0b3BDb2RlKGl0ZW0ucHJvcGVydGllcyk7XG4gICAgICBjb25zdCBtb2RlID0gaXRlbS5wcm9wZXJ0aWVzLmFkZGVuZHVtPy5HVEZTLm1vZGVzO1xuICAgICAgY29uc3QgcGxhdGZvcm0gPSBnZXRQbGF0Zm9ybShpdGVtLnByb3BlcnRpZXMuYWRkZW5kdW0sIGxuZywgdCk7XG4gICAgICByZXR1cm4gW1xuICAgICAgICBzdWdnZXN0aW9uVHlwZSxcbiAgICAgICAgZ2V0U3RvcE5hbWUobmFtZSwgc3RvcENvZGUpLFxuICAgICAgICBsYWJlbCxcbiAgICAgICAgc3RvcENvZGUsXG4gICAgICAgIG1vZGUsXG4gICAgICAgIHBsYXRmb3JtLFxuICAgICAgXTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgaXRlbS5wcm9wZXJ0aWVzLmxheWVyID09PSAnZmF2b3VyaXRlU3RvcCcgfHxcbiAgICAgIGl0ZW0ucHJvcGVydGllcy5sYXllciA9PT0gJ2Zhdm91cml0ZVN0YXRpb24nXG4gICAgKSB7XG4gICAgICBjb25zdCB7IGFkZHJlc3MsIGNvZGUgfSA9IGl0ZW0ucHJvcGVydGllcztcbiAgICAgIGNvbnN0IHN0b05hbWUgPSBhZGRyZXNzID8gZ2V0U3RvcE5hbWUoYWRkcmVzcy5zcGxpdCgnLCcpWzBdLCBjb2RlKSA6IG5hbWU7XG4gICAgICBjb25zdCBwbGF0Zm9ybSA9IGdldFBsYXRmb3JtKGl0ZW0ucHJvcGVydGllcy5hZGRlbmR1bSwgbG5nKTtcbiAgICAgIHJldHVybiBbc3VnZ2VzdGlvblR5cGUsIHN0b05hbWUsIGxhYmVsLCBjb2RlLCB1bmRlZmluZWQsIHBsYXRmb3JtXTtcbiAgICB9XG4gICAgcmV0dXJuIFtzdWdnZXN0aW9uVHlwZSwgbmFtZSwgbGFiZWxdO1xuICB9XG4gIGNvbnN0IHsgb3JpZ2luLCBkZXN0aW5hdGlvbiB9ID0gaXRlbS5wcm9wZXJ0aWVzO1xuICBjb25zdCB0YWlsMSA9IG9yaWdpbi5sb2NhbGl0eSA/IGAsICR7b3JpZ2luLmxvY2FsaXR5fSBmb29iYXJgIDogJyc7XG4gIGNvbnN0IHRhaWwyID0gZGVzdGluYXRpb24ubG9jYWxpdHkgPyBgLCAke2Rlc3RpbmF0aW9uLmxvY2FsaXR5fWAgOiAnJztcbiAgY29uc3QgbmFtZTEgPSBvcmlnaW4ubmFtZTtcbiAgY29uc3QgbmFtZTIgPSBkZXN0aW5hdGlvbi5uYW1lO1xuICByZXR1cm4gW1xuICAgIHQoJ2Z1dHVyZS1yb3V0ZScsIHsgbG5nIH0pLFxuICAgIGAke3QoJ29yaWdpbicsIHsgbG5nIH0pfSAke25hbWUxfSR7dGFpbDF9ICR7dCgnZGVzdGluYXRpb24nLCB7XG4gICAgICBsbmcsXG4gICAgfSl9ICR7bmFtZTJ9JHt0YWlsMn1gLFxuICAgIGl0ZW0udHJhbnNsYXRlZFRleHQsXG4gIF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2xhdGVGdXR1cmVSb3V0ZVN1Z2dlc3Rpb25UaW1lKGl0ZW0sIGxuZywgdCkge1xuICAvLyBjaGVjayBpZiBpODFuIGlzIGluaXRpYWxpemVkXG4gIGlmICghdCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgdGltZSA9IERhdGVUaW1lLmZyb21TZWNvbmRzKE51bWJlcihpdGVtLnByb3BlcnRpZXMudGltZSkpO1xuICBjb25zdCBub3cgPSBEYXRlVGltZS5ub3coKTtcbiAgbGV0IHN0ciA9IGl0ZW0ucHJvcGVydGllcy5hcnJpdmVCeVxuICAgID8gdCgnYXJyaXZhbCcsIHsgbG5nIH0pXG4gICAgOiB0KCdkZXBhcnR1cmUnLCB7IGxuZyB9KTtcbiAgaWYgKHRpbWUuaGFzU2FtZShub3csICdkYXknKSkge1xuICAgIHN0ciA9IGAke3N0cn0gJHt0KCd0b2RheS1hdCcpfWA7XG4gIH0gZWxzZSBpZiAodGltZS5oYXNTYW1lKG5vdy5wbHVzKHsgZGF5czogMSB9KSwgJ2RheScpKSB7XG4gICAgc3RyID0gYCR7c3RyfSAke3QoJ3RvbW9ycm93LWF0JywgeyBsbmcgfSl9YDtcbiAgfSBlbHNlIHtcbiAgICBzdHIgPSBgJHtzdHJ9ICR7dGltZS50b0Zvcm1hdCgnY2NjIGQuTC4nKX1gO1xuICB9XG4gIHN0ciA9IGAke3N0cn0gJHt0aW1lLnRvRm9ybWF0KCdISDptbScpfWA7XG4gIHJldHVybiBzdHI7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRTdWdnZXN0aW9uVmFsdWUgPSBzdWdnZXN0aW9uID0+IHtcbiAgaWYgKFxuICAgIHN1Z2dlc3Rpb24udHlwZSA9PT0gJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnIHx8XG4gICAgc3VnZ2VzdGlvbi50eXBlID09PSAnYmFjaydcbiAgKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIHJldHVybiBnZXRMYWJlbChzdWdnZXN0aW9uLnByb3BlcnRpZXMpO1xufTtcblxuZXhwb3J0IGNvbnN0IHN1Z2dlc3Rpb25Bc0FyaWFDb250ZW50ID0gKHsgc3VnZ2VzdGlvbnMsIHQsIGxuZyB9KSA9PiB7XG4gIGxldCBsYWJlbCA9IFtdO1xuICBjb25zdCBmaXJzdFN1Z2dlc3Rpb24gPSBzdWdnZXN0aW9uc1swXTtcbiAgaWYgKGZpcnN0U3VnZ2VzdGlvbikge1xuICAgIGlmIChmaXJzdFN1Z2dlc3Rpb24udHlwZSAmJiBmaXJzdFN1Z2dlc3Rpb24udHlwZS5pbmNsdWRlcygnRmF2b3VyaXRlJykpIHtcbiAgICAgIGxhYmVsLnB1c2godCgnZmF2b3VyaXRlJywgeyBsbmcgfSkpO1xuICAgIH1cbiAgICBsYWJlbCA9IGxhYmVsLmNvbmNhdChnZXRTdWdnZXN0aW9uQ29udGVudChzdWdnZXN0aW9uc1swXSwgbG5nKSk7XG4gIH1cbiAgcmV0dXJuIFsuLi5uZXcgU2V0KGxhYmVsKV0uam9pbignIC0gJyk7XG59O1xuIiwiaW1wb3J0IHsgZ2V0TmFtZUxhYmVsIH0gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXVuaXEtYnktbGFiZWwnO1xuLyoqXG4gKiBSZXR1cm5zIGxhYmVsIGZvciBwcm9wZXJ0aWVzXG4gKlxuICogQG5hbWUgZ2V0TGFiZWxcbiAqIEBwYXJhbSB7Kn0gcHJvcGVydGllcyBvYmplY3RcbiAqIEByZXR1cm5zIHtCb29sZWFufSB0cnVlL2ZhbHNlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldExhYmVsKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgcGFydHMgPSBnZXROYW1lTGFiZWwocHJvcGVydGllcywgdHJ1ZSk7XG4gIHN3aXRjaCAocHJvcGVydGllcy5sYXllcikge1xuICAgIGNhc2UgJ3NlbGVjdEZyb21NYXAnOlxuICAgIGNhc2UgJ2N1cnJlbnRQb3NpdGlvbic6XG4gICAgY2FzZSAnb3duTG9jYXRpb25zJzpcbiAgICBjYXNlICdiYWNrJzpcbiAgICAgIHJldHVybiBwYXJ0c1sxXSB8fCBwYXJ0c1swXTtcbiAgICBjYXNlICdmYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbic6XG4gICAgY2FzZSAnZmF2b3VyaXRlUGxhY2UnOlxuICAgICAgcmV0dXJuIHBhcnRzWzBdO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gcGFydHMubGVuZ3RoID4gMSAmJiBwYXJ0c1sxXSAhPT0gJydcbiAgICAgICAgPyBwYXJ0cy5qb2luKCcsICcpXG4gICAgICAgIDogcGFydHNbMV0gfHwgcGFydHNbMF07XG4gIH1cbn1cbiIsIi8qISBGb3IgbGljZW5zZSBpbmZvcm1hdGlvbiBwbGVhc2Ugc2VlIGluZGV4LmpzLkxJQ0VOU0UudHh0ICovXG4hZnVuY3Rpb24oZSx0KXtpZihcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJvYmplY3RcIj09dHlwZW9mIG1vZHVsZSltb2R1bGUuZXhwb3J0cz10KHJlcXVpcmUoXCJyZWFjdFwiKSk7ZWxzZSBpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQpZGVmaW5lKFtcInJlYWN0XCJdLHQpO2Vsc2V7dmFyIG49XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHM/dChyZXF1aXJlKFwicmVhY3RcIikpOnQoZS5yZWFjdCk7Zm9yKHZhciBvIGluIG4pKFwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHM6ZSlbb109bltvXX19KFwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGY6dGhpcywoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ezg4ODpmdW5jdGlvbihlLHQsbil7dmFyIG8scjtyPXZvaWQgMCE9PW4uZz9uLmc6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6dGhpcyxvPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO3ZhciB0PXtpZ25vcmU6XCJbZGF0YS1zY3JvbGwtaWdub3JlXVwiLGhlYWRlcjpudWxsLHRvcE9uRW1wdHlIYXNoOiEwLHNwZWVkOjUwMCxzcGVlZEFzRHVyYXRpb246ITEsZHVyYXRpb25NYXg6bnVsbCxkdXJhdGlvbk1pbjpudWxsLGNsaXA6ITAsb2Zmc2V0OjAsZWFzaW5nOlwiZWFzZUluT3V0Q3ViaWNcIixjdXN0b21FYXNpbmc6bnVsbCx1cGRhdGVVUkw6ITAscG9wc3RhdGU6ITAsZW1pdEV2ZW50czohMH0sbj1mdW5jdGlvbigpe3ZhciBlPXt9O3JldHVybiBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGFyZ3VtZW50cywoZnVuY3Rpb24odCl7Zm9yKHZhciBuIGluIHQpe2lmKCF0Lmhhc093blByb3BlcnR5KG4pKXJldHVybjtlW25dPXRbbl19fSkpLGV9LG89ZnVuY3Rpb24oZSl7XCIjXCI9PT1lLmNoYXJBdCgwKSYmKGU9ZS5zdWJzdHIoMSkpO2Zvcih2YXIgdCxuPVN0cmluZyhlKSxvPW4ubGVuZ3RoLHI9LTEsdT1cIlwiLGk9bi5jaGFyQ29kZUF0KDApOysrcjxvOyl7aWYoMD09PSh0PW4uY2hhckNvZGVBdChyKSkpdGhyb3cgbmV3IEludmFsaWRDaGFyYWN0ZXJFcnJvcihcIkludmFsaWQgY2hhcmFjdGVyOiB0aGUgaW5wdXQgY29udGFpbnMgVSswMDAwLlwiKTt1Kz10Pj0xJiZ0PD0zMXx8MTI3PT10fHwwPT09ciYmdD49NDgmJnQ8PTU3fHwxPT09ciYmdD49NDgmJnQ8PTU3JiY0NT09PWk/XCJcXFxcXCIrdC50b1N0cmluZygxNikrXCIgXCI6dD49MTI4fHw0NT09PXR8fDk1PT09dHx8dD49NDgmJnQ8PTU3fHx0Pj02NSYmdDw9OTB8fHQ+PTk3JiZ0PD0xMjI/bi5jaGFyQXQocik6XCJcXFxcXCIrbi5jaGFyQXQocil9cmV0dXJuXCIjXCIrdX0scj1mdW5jdGlvbigpe3JldHVybiBNYXRoLm1heChkb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodCxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsSGVpZ2h0LGRvY3VtZW50LmJvZHkub2Zmc2V0SGVpZ2h0LGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5vZmZzZXRIZWlnaHQsZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHQsZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCl9LHU9ZnVuY3Rpb24odCl7cmV0dXJuIHQ/KG49dCxwYXJzZUludChlLmdldENvbXB1dGVkU3R5bGUobikuaGVpZ2h0LDEwKSt0Lm9mZnNldFRvcCk6MDt2YXIgbn0saT1mdW5jdGlvbih0LG4sbyl7MD09PXQmJmRvY3VtZW50LmJvZHkuZm9jdXMoKSxvfHwodC5mb2N1cygpLGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQhPT10JiYodC5zZXRBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiLFwiLTFcIiksdC5mb2N1cygpLHQuc3R5bGUub3V0bGluZT1cIm5vbmVcIiksZS5zY3JvbGxUbygwLG4pKX0scz1mdW5jdGlvbih0LG4sbyxyKXtpZihuLmVtaXRFdmVudHMmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUuQ3VzdG9tRXZlbnQpe3ZhciB1PW5ldyBDdXN0b21FdmVudCh0LHtidWJibGVzOiEwLGRldGFpbDp7YW5jaG9yOm8sdG9nZ2xlOnJ9fSk7ZG9jdW1lbnQuZGlzcGF0Y2hFdmVudCh1KX19O3JldHVybiBmdW5jdGlvbihjLGEpe3ZhciBsLGYsZCx2LHA9e2NhbmNlbFNjcm9sbDpmdW5jdGlvbihlKXtjYW5jZWxBbmltYXRpb25GcmFtZSh2KSx2PW51bGwsZXx8cyhcInNjcm9sbENhbmNlbFwiLGwpfSxhbmltYXRlU2Nyb2xsOmZ1bmN0aW9uKG8sYyxhKXtwLmNhbmNlbFNjcm9sbCgpO3ZhciBmPW4obHx8dCxhfHx7fSksaD1cIltvYmplY3QgTnVtYmVyXVwiPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLG09aHx8IW8udGFnTmFtZT9udWxsOm87aWYoaHx8bSl7dmFyIHk9ZS5wYWdlWU9mZnNldDtmLmhlYWRlciYmIWQmJihkPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZi5oZWFkZXIpKTt2YXIgYixnLHcsRT11KGQpLE89aD9vOmZ1bmN0aW9uKHQsbixvLHUpe3ZhciBpPTA7aWYodC5vZmZzZXRQYXJlbnQpZG97aSs9dC5vZmZzZXRUb3AsdD10Lm9mZnNldFBhcmVudH13aGlsZSh0KTtyZXR1cm4gaT1NYXRoLm1heChpLW4tbywwKSx1JiYoaT1NYXRoLm1pbihpLHIoKS1lLmlubmVySGVpZ2h0KSksaX0obSxFLHBhcnNlSW50KFwiZnVuY3Rpb25cIj09dHlwZW9mIGYub2Zmc2V0P2Yub2Zmc2V0KG8sYyk6Zi5vZmZzZXQsMTApLGYuY2xpcCksUz1PLXksXz1yKCksST0wLE09ZnVuY3Rpb24oZSx0KXt2YXIgbj10LnNwZWVkQXNEdXJhdGlvbj90LnNwZWVkOk1hdGguYWJzKGUvMWUzKnQuc3BlZWQpO3JldHVybiB0LmR1cmF0aW9uTWF4JiZuPnQuZHVyYXRpb25NYXg/dC5kdXJhdGlvbk1heDp0LmR1cmF0aW9uTWluJiZuPHQuZHVyYXRpb25NaW4/dC5kdXJhdGlvbk1pbjpwYXJzZUludChuLDEwKX0oUyxmKSxMPWZ1bmN0aW9uKHQpe2J8fChiPXQpLEkrPXQtYix3PXkrUypmdW5jdGlvbihlLHQpe3ZhciBuO3JldHVyblwiZWFzZUluUXVhZFwiPT09ZS5lYXNpbmcmJihuPXQqdCksXCJlYXNlT3V0UXVhZFwiPT09ZS5lYXNpbmcmJihuPXQqKDItdCkpLFwiZWFzZUluT3V0UXVhZFwiPT09ZS5lYXNpbmcmJihuPXQ8LjU/Mip0KnQ6KDQtMip0KSp0LTEpLFwiZWFzZUluQ3ViaWNcIj09PWUuZWFzaW5nJiYobj10KnQqdCksXCJlYXNlT3V0Q3ViaWNcIj09PWUuZWFzaW5nJiYobj0tLXQqdCp0KzEpLFwiZWFzZUluT3V0Q3ViaWNcIj09PWUuZWFzaW5nJiYobj10PC41PzQqdCp0KnQ6KHQtMSkqKDIqdC0yKSooMip0LTIpKzEpLFwiZWFzZUluUXVhcnRcIj09PWUuZWFzaW5nJiYobj10KnQqdCp0KSxcImVhc2VPdXRRdWFydFwiPT09ZS5lYXNpbmcmJihuPTEtIC0tdCp0KnQqdCksXCJlYXNlSW5PdXRRdWFydFwiPT09ZS5lYXNpbmcmJihuPXQ8LjU/OCp0KnQqdCp0OjEtOCotLXQqdCp0KnQpLFwiZWFzZUluUXVpbnRcIj09PWUuZWFzaW5nJiYobj10KnQqdCp0KnQpLFwiZWFzZU91dFF1aW50XCI9PT1lLmVhc2luZyYmKG49MSstLXQqdCp0KnQqdCksXCJlYXNlSW5PdXRRdWludFwiPT09ZS5lYXNpbmcmJihuPXQ8LjU/MTYqdCp0KnQqdCp0OjErMTYqLS10KnQqdCp0KnQpLGUuY3VzdG9tRWFzaW5nJiYobj1lLmN1c3RvbUVhc2luZyh0KSksbnx8dH0oZixnPShnPTA9PT1NPzA6SS9NKT4xPzE6ZyksZS5zY3JvbGxUbygwLE1hdGguZmxvb3IodykpLGZ1bmN0aW9uKHQsbil7dmFyIHI9ZS5wYWdlWU9mZnNldDtpZih0PT1ufHxyPT1ufHwoeTxuJiZlLmlubmVySGVpZ2h0K3IpPj1fKXJldHVybiBwLmNhbmNlbFNjcm9sbCghMCksaShvLG4saCkscyhcInNjcm9sbFN0b3BcIixmLG8sYyksYj1udWxsLHY9bnVsbCwhMH0odyxPKXx8KHY9ZS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoTCksYj10KX07MD09PWUucGFnZVlPZmZzZXQmJmUuc2Nyb2xsVG8oMCwwKSxmdW5jdGlvbihlLHQsbil7dHx8aGlzdG9yeS5wdXNoU3RhdGUmJm4udXBkYXRlVVJMJiZoaXN0b3J5LnB1c2hTdGF0ZSh7c21vb3RoU2Nyb2xsOkpTT04uc3RyaW5naWZ5KG4pLGFuY2hvcjplLmlkfSxkb2N1bWVudC50aXRsZSxlPT09ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50P1wiI3RvcFwiOlwiI1wiK2UuaWQpfShvLGgsZiksXCJtYXRjaE1lZGlhXCJpbiBlJiZlLm1hdGNoTWVkaWEoXCIocHJlZmVycy1yZWR1Y2VkLW1vdGlvbilcIikubWF0Y2hlcz9pKG8sTWF0aC5mbG9vcihPKSwhMSk6KHMoXCJzY3JvbGxTdGFydFwiLGYsbyxjKSxwLmNhbmNlbFNjcm9sbCghMCksZS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoTCkpfX19LGg9ZnVuY3Rpb24odCl7aWYoIXQuZGVmYXVsdFByZXZlbnRlZCYmISgwIT09dC5idXR0b258fHQubWV0YUtleXx8dC5jdHJsS2V5fHx0LnNoaWZ0S2V5KSYmXCJjbG9zZXN0XCJpbiB0LnRhcmdldCYmKGY9dC50YXJnZXQuY2xvc2VzdChjKSkmJlwiYVwiPT09Zi50YWdOYW1lLnRvTG93ZXJDYXNlKCkmJiF0LnRhcmdldC5jbG9zZXN0KGwuaWdub3JlKSYmZi5ob3N0bmFtZT09PWUubG9jYXRpb24uaG9zdG5hbWUmJmYucGF0aG5hbWU9PT1lLmxvY2F0aW9uLnBhdGhuYW1lJiYvIy8udGVzdChmLmhyZWYpKXt2YXIgbixyO3RyeXtuPW8oZGVjb2RlVVJJQ29tcG9uZW50KGYuaGFzaCkpfWNhdGNoKGUpe249byhmLmhhc2gpfWlmKFwiI1wiPT09bil7aWYoIWwudG9wT25FbXB0eUhhc2gpcmV0dXJuO3I9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fWVsc2Ugcj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKG4pOyhyPXJ8fFwiI3RvcFwiIT09bj9yOmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkmJih0LnByZXZlbnREZWZhdWx0KCksZnVuY3Rpb24odCl7aWYoaGlzdG9yeS5yZXBsYWNlU3RhdGUmJnQudXBkYXRlVVJMJiYhaGlzdG9yeS5zdGF0ZSl7dmFyIG49ZS5sb2NhdGlvbi5oYXNoO249bnx8XCJcIixoaXN0b3J5LnJlcGxhY2VTdGF0ZSh7c21vb3RoU2Nyb2xsOkpTT04uc3RyaW5naWZ5KHQpLGFuY2hvcjpufHxlLnBhZ2VZT2Zmc2V0fSxkb2N1bWVudC50aXRsZSxufHxlLmxvY2F0aW9uLmhyZWYpfX0obCkscC5hbmltYXRlU2Nyb2xsKHIsZikpfX0sbT1mdW5jdGlvbihlKXtpZihudWxsIT09aGlzdG9yeS5zdGF0ZSYmaGlzdG9yeS5zdGF0ZS5zbW9vdGhTY3JvbGwmJmhpc3Rvcnkuc3RhdGUuc21vb3RoU2Nyb2xsPT09SlNPTi5zdHJpbmdpZnkobCkpe3ZhciB0PWhpc3Rvcnkuc3RhdGUuYW5jaG9yO1wic3RyaW5nXCI9PXR5cGVvZiB0JiZ0JiYhKHQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihvKGhpc3Rvcnkuc3RhdGUuYW5jaG9yKSkpfHxwLmFuaW1hdGVTY3JvbGwodCxudWxsLHt1cGRhdGVVUkw6ITF9KX19O3JldHVybiBwLmRlc3Ryb3k9ZnVuY3Rpb24oKXtsJiYoZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsaCwhMSksZS5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9wc3RhdGVcIixtLCExKSxwLmNhbmNlbFNjcm9sbCgpLGw9bnVsbCxmPW51bGwsZD1udWxsLHY9bnVsbCl9LGZ1bmN0aW9uKCl7aWYoIShcInF1ZXJ5U2VsZWN0b3JcImluIGRvY3VtZW50JiZcImFkZEV2ZW50TGlzdGVuZXJcImluIGUmJlwicmVxdWVzdEFuaW1hdGlvbkZyYW1lXCJpbiBlJiZcImNsb3Nlc3RcImluIGUuRWxlbWVudC5wcm90b3R5cGUpKXRocm93XCJTbW9vdGggU2Nyb2xsOiBUaGlzIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgcmVxdWlyZWQgSmF2YVNjcmlwdCBtZXRob2RzIGFuZCBicm93c2VyIEFQSXMuXCI7cC5kZXN0cm95KCksbD1uKHQsYXx8e30pLGQ9bC5oZWFkZXI/ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihsLmhlYWRlcik6bnVsbCxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIixoLCExKSxsLnVwZGF0ZVVSTCYmbC5wb3BzdGF0ZSYmZS5hZGRFdmVudExpc3RlbmVyKFwicG9wc3RhdGVcIixtLCExKX0oKSxwfX0ocil9LmFwcGx5KHQsW10pLHZvaWQgMD09PW98fChlLmV4cG9ydHM9byl9LDQzMjpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG89dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLG8pe3ZvaWQgMD09PW8mJihvPW4pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG8se2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSl9OmZ1bmN0aW9uKGUsdCxuLG8pe3ZvaWQgMD09PW8mJihvPW4pLGVbb109dFtuXX0pLHI9dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8byh0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHIobig0NyksdCkscihuKDkyNiksdCkscihuKDM0OSksdCkscihuKDEzNyksdCkscihuKDcyOSksdCkscihuKDM4MyksdCkscihuKDQ1MCksdCkscihuKDM1OCksdCkscihuKDc1MyksdCkscihuKDg2OSksdCkscihuKDM1MiksdCkscihuKDQ0NiksdCkscihuKDE2NCksdCkscihuKDMwNSksdCkscihuKDUwMiksdCl9LDM0OTpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VBcnJvd05hdmlnYXRpb249dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZUFycm93TmF2aWdhdGlvbj1mdW5jdGlvbihlKXt2YXIgdD1lLmxpc3RJdGVtcyxuPWUub25BcnJvd1VwT3JEb3duLHI9KDAsby51c2VTdGF0ZSkoMCksdT1yWzBdLGk9clsxXSxzPSgwLG8udXNlQ2FsbGJhY2spKChmdW5jdGlvbihlKXtpKGUpfSksW3RdKSxjPWZ1bmN0aW9uKGUpe3ZhciBvPWUua2V5O2lmKG51bGw9PXQ/dm9pZCAwOnQubGVuZ3RoKWlmKFwiQXJyb3dVcFwiPT09byluJiZuKCksZS5wcmV2ZW50RGVmYXVsdCgpLHModT4wP3UtMTp0Lmxlbmd0aC0xKTtlbHNle2lmKFwiQXJyb3dEb3duXCIhPT1vKXJldHVybjtuJiZuKCksZS5wcmV2ZW50RGVmYXVsdCgpLHU8dC5sZW5ndGgtMT9zKHUrMSk6cygwKX19O3JldHVybigwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsYyksZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsYyl9fSkpLCgwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXtzKDApfSksW3RdKSx7c2VsZWN0ZWRJbmRleDp1fX19LDQ0NjpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VEZWJvdW5jZT12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlRGVib3VuY2U9ZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT10JiYodD0zMDApO3ZhciBuPSgwLG8udXNlU3RhdGUpKGUpLHI9blswXSx1PW5bMV07cmV0dXJuKDAsby51c2VFZmZlY3QpKChmdW5jdGlvbigpe3ZhciBuPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7dShlKX0pLHQpO3JldHVybiBmdW5jdGlvbigpe2NsZWFyVGltZW91dChuKX19KSxbZSx0XSkscn19LDE2NDpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VFbGVtZW50U2l6ZT12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlRWxlbWVudFNpemU9ZnVuY3Rpb24oKXt2YXIgZSx0LG49KDAsby51c2VSZWYpKG51bGwpO3JldHVybltuLHt3aWR0aDpudWxsPT09KGU9bnVsbD09bj92b2lkIDA6bi5jdXJyZW50KXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5jbGllbnRXaWR0aCxoZWlnaHQ6bnVsbD09PSh0PW51bGw9PW4/dm9pZCAwOm4uY3VycmVudCl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuY2xpZW50SGVpZ2h0fV19LHQuZGVmYXVsdD10LnVzZUVsZW1lbnRTaXplfSwxMzc6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlSW50ZXJzZWN0aW9uT2JzZXJ2ZXI9dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZUludGVyc2VjdGlvbk9ic2VydmVyPWZ1bmN0aW9uKGUpe3ZhciB0PSgwLG8udXNlUmVmKShudWxsKSxuPSgwLG8udXNlU3RhdGUpKCExKSxyPW5bMF0sdT1uWzFdLGk9ZnVuY3Rpb24oZSl7dmFyIHQ9ZVswXTt1KHQuaXNJbnRlcnNlY3RpbmcpfTtyZXR1cm4oMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7aWYod2luZG93JiZ3aW5kb3cuSW50ZXJzZWN0aW9uT2JzZXJ2ZXIpe3ZhciBuPW5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihpLGUpLG89dC5jdXJyZW50O3JldHVybiB0LmN1cnJlbnQmJm4ub2JzZXJ2ZSh0LmN1cnJlbnQpLGZ1bmN0aW9uKCl7byYmbi51bm9ic2VydmUobyl9fXUoITEpfSksW3QsZV0pLHtjb250YWluZXJSZWY6dCxpc1Zpc2libGU6cn19LHQuZGVmYXVsdD10LnVzZUludGVyc2VjdGlvbk9ic2VydmVyfSw3Mjk6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlSXNCcmVha3BvaW50PXZvaWQgMDt2YXIgbz1uKDE1Nikscj1uKDQzMiksdT17eHM6MSxtb2JpbGVTbWFsbDozMjAsbW9iaWxlOjM3NSx0YWJsZXQ6NzY4LHRhYmxldExhcmdlOjkyMCxkZXNrdG9wU21hbGw6MTAyNCxkZXNrdG9wOjEyNjAsZGVza3RvcExhcmdlOjE0NDB9O3QudXNlSXNCcmVha3BvaW50PWZ1bmN0aW9uKGUpe3ZhciB0PVwic3RyaW5nXCI9PXR5cGVvZiBlP3VbZV06ZSxuPSgwLG8udXNlU3RhdGUpKG51bGwpLGk9blswXSxzPW5bMV0sYz0oMCxvLnVzZUNhbGxiYWNrKSgoZnVuY3Rpb24oKXtzKHdpbmRvdy5pbm5lcldpZHRoKX0pLFtdKTtyZXR1cm4oMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7YygpfSksW10pLCgwLHIudXNlT25SZXNpemUpKGMpLGk+PXR9LHQuZGVmYXVsdD10LnVzZUlzQnJlYWtwb2ludH0sNDUwOmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZUlzTG9hZGluZ0FmdGVyRXJyb3I9dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZUlzTG9hZGluZ0FmdGVyRXJyb3I9ZnVuY3Rpb24oZSx0KXt2YXIgbj0oMCxvLnVzZVN0YXRlKSh0KSxyPW5bMF0sdT1uWzFdO3JldHVybigwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXtlfHx1KHQpfSksW2UsdF0pLGUmJnJ9fSwzMDU6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlSXNNb2JpbGU9dm9pZCAwO3ZhciBvPW4oNzI5KTt0LnVzZUlzTW9iaWxlPWZ1bmN0aW9uKCl7cmV0dXJuISgwLG8udXNlSXNCcmVha3BvaW50KShcInRhYmxldFwiKX0sdC5kZWZhdWx0PXQudXNlSXNNb2JpbGV9LDM4MzpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0PXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0PVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/by51c2VMYXlvdXRFZmZlY3Q6by51c2VFZmZlY3QsdC5kZWZhdWx0PXQudXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdH0sNzUzOmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZU9uTG9zZUZvY3VzV2l0aGluPXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VPbkxvc2VGb2N1c1dpdGhpbj1mdW5jdGlvbihlKXt2YXIgdD1lLnJlZixuPWUuY2FsbGJhY2sscj1lLndhdGNoOygwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbigpe3ZhciBlO2lmKHIpcmV0dXJuKG51bGw9PT0oZT10LmN1cnJlbnQpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLm1hdGNoZXMoXCI6Zm9jdXMtd2l0aGluXCIpKT92b2lkIDA6bigpfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsZSksZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsZSl9fSksW24sdCxyXSl9LHQuZGVmYXVsdD10LnVzZU9uTG9zZUZvY3VzV2l0aGlufSw1MDI6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlT25SZXNpemU9dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZU9uUmVzaXplPWZ1bmN0aW9uKGUpeygwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbigpe2Uod2luZG93LmlubmVyV2lkdGgpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIix0LHtwYXNzaXZlOiEwfSksZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIix0KX19KSxbXSl9LHQuZGVmYXVsdD10LnVzZU9uUmVzaXplfSwzNTI6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlT25XaW5kb3dGb2N1cz12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlT25XaW5kb3dGb2N1cz1mdW5jdGlvbihlKXsoMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24oKXtlJiZcInZpc2libGVcIj09PWRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSYmZSgpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJ2aXNpYmlsaXR5Y2hhbmdlXCIsdCwhMSksZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ2aXNpYmlsaXR5Y2hhbmdlXCIsdCl9fSksW2VdKX19LDQ3OmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZU91dHNpZGVSZWFjdGVyPXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VPdXRzaWRlUmVhY3Rlcj1mdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4obil7ZS5jdXJyZW50JiYhZS5jdXJyZW50LmNvbnRhaW5zKG4udGFyZ2V0KSYmdCgpfSgwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLG4pLGZ1bmN0aW9uKCl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLG4pfX0pKX19LDg2OTpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VSdW5BZnRlclVwZGF0ZT12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlUnVuQWZ0ZXJVcGRhdGU9ZnVuY3Rpb24oKXt2YXIgZT0oMCxvLnVzZVJlZikobnVsbCk7cmV0dXJuKDAsby51c2VFZmZlY3QpKChmdW5jdGlvbigpe2UuY3VycmVudCYmKGUuY3VycmVudCgpLGUuY3VycmVudD1udWxsKX0pKSxmdW5jdGlvbih0KXtlLmN1cnJlbnQ9dH19LHQuZGVmYXVsdD10LnVzZVJ1bkFmdGVyVXBkYXRlfSw5MjY6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlU2Nyb2xsTG9jaz12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlU2Nyb2xsTG9jaz1mdW5jdGlvbigpe3JldHVybntsb2NrOigwLG8udXNlQ2FsbGJhY2spKChmdW5jdGlvbigpe3ZhciBlPXdpbmRvdy5zY3JvbGxZK1wicHhcIix0PWRvY3VtZW50LmJvZHk7dC5zdHlsZS5wb3NpdGlvbj1cImZpeGVkXCIsdC5zdHlsZS50b3A9XCItXCIrZX0pLFtdKSx1bmxvY2s6KDAsby51c2VDYWxsYmFjaykoKGZ1bmN0aW9uKCl7dmFyIGU9ZG9jdW1lbnQuYm9keSx0PWUuc3R5bGUudG9wLG49LTEqcGFyc2VJbnQodHx8XCIwXCIpO2Uuc3R5bGUucG9zaXRpb249XCJcIixlLnN0eWxlLnRvcD1cIlwiLG4mJndpbmRvdy5zY3JvbGxUbygwLC0xKnBhcnNlSW50KHR8fFwiMFwiKSl9KSxbXSl9fX0sMzU4OmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjt2YXIgbz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZVNtb290aFNjcm9sbD12b2lkIDA7dmFyIHI9bigxNTYpLHU9byhuKDg4OCkpO3QudXNlU21vb3RoU2Nyb2xsPWZ1bmN0aW9uKGUpe3ZhciB0PSgwLHIudXNlUmVmKShudWxsKSxuPWUucmVmLG89ZS5vZmZzZXQsaT12b2lkIDA9PT1vPzA6byxzPWUuc3BlZWQsYz12b2lkIDA9PT1zPzUwMDpzO3JldHVybigwLHIudXNlRWZmZWN0KSgoZnVuY3Rpb24oKXt0LmN1cnJlbnQ9bmV3IHUuZGVmYXVsdChudWxsLHtzcGVlZDpjLHNwZWVkQXNEdXJhdGlvbjohMH0pfSksW10pLCgwLHIudXNlQ2FsbGJhY2spKChmdW5jdGlvbigpe24mJnQuY3VycmVudCYmdC5jdXJyZW50LmFuaW1hdGVTY3JvbGwobi5jdXJyZW50LG51bGwse29mZnNldDpmdW5jdGlvbigpe3JldHVybiBpfSx1cGRhdGVVUkw6ITF9KX0pLFtpLG5dKX19LDE1NjpmdW5jdGlvbih0KXtcInVzZSBzdHJpY3RcIjt0LmV4cG9ydHM9ZX19LG49e307ZnVuY3Rpb24gbyhlKXt2YXIgcj1uW2VdO2lmKHZvaWQgMCE9PXIpcmV0dXJuIHIuZXhwb3J0czt2YXIgdT1uW2VdPXtleHBvcnRzOnt9fTtyZXR1cm4gdFtlXS5jYWxsKHUuZXhwb3J0cyx1LHUuZXhwb3J0cyxvKSx1LmV4cG9ydHN9cmV0dXJuIG8uZz1mdW5jdGlvbigpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiBnbG9iYWxUaGlzKXJldHVybiBnbG9iYWxUaGlzO3RyeXtyZXR1cm4gdGhpc3x8bmV3IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKX1jYXRjaChlKXtpZihcIm9iamVjdFwiPT10eXBlb2Ygd2luZG93KXJldHVybiB3aW5kb3d9fSgpLG8oNDMyKX0oKX0pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsImltcG9ydCBvYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCIuL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UuanNcIjtcbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7XG4gIGlmIChudWxsID09IGUpIHJldHVybiB7fTtcbiAgdmFyIG8sXG4gICAgcixcbiAgICBpID0gb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTtcbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7XG4gICAgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCAtMSA9PT0gdC5pbmRleE9mKG8pICYmIHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTtcbiAgfVxuICByZXR1cm4gaTtcbn1cbmV4cG9ydCB7IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyBhcyBkZWZhdWx0IH07IiwiZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkge1xuICBpZiAobnVsbCA9PSByKSByZXR1cm4ge307XG4gIHZhciB0ID0ge307XG4gIGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHtcbiAgICBpZiAoLTEgIT09IGUuaW5kZXhPZihuKSkgY29udGludWU7XG4gICAgdFtuXSA9IHJbbl07XG4gIH1cbiAgcmV0dXJuIHQ7XG59XG5leHBvcnQgeyBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IFN1Z2dlc3Rpb25JdGVtIGZyb20gJ0BkaWdpdHJhbnNpdC1jb21wb25lbnQvZGlnaXRyYW5zaXQtY29tcG9uZW50LXN1Z2dlc3Rpb24taXRlbSc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCc7XG5pbXBvcnQgY3ggZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQge1xuICBnZXRTdWdnZXN0aW9uQ29udGVudCxcbiAgdHJhbnNsYXRlRnV0dXJlUm91dGVTdWdnZXN0aW9uVGltZSxcbn0gZnJvbSAnLi4vdXRpbHMvdXRpbHMnO1xuXG5mdW5jdGlvbiBTdWdnZXN0aW9uKHtcbiAgaXRlbSxcbiAgbG5nLFxuICBnZXRJdGVtUHJvcHMsXG4gIGhpZ2hsaWdodGVkSW5kZXgsXG4gIGl0ZW1JbmRleCxcbiAgc3R5bGVzLFxuICAuLi5yZXN0XG59KSB7XG4gIGNvbnN0IFt0XSA9IHVzZVRyYW5zbGF0aW9uKCk7XG4gIGNvbnN0IG5ld0l0ZW0gPVxuICAgIGl0ZW0udHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJ1xuICAgICAgPyB7XG4gICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICB0cmFuc2xhdGVkVGV4dDogdHJhbnNsYXRlRnV0dXJlUm91dGVTdWdnZXN0aW9uVGltZShpdGVtLCBsbmcsIHQpLFxuICAgICAgICB9XG4gICAgICA6IGl0ZW07XG4gIGNvbnN0IGNvbnRlbnQgPSBnZXRTdWdnZXN0aW9uQ29udGVudChpdGVtLCBsbmcsIHQpO1xuICByZXR1cm4gKFxuICAgIDxsaVxuICAgICAgY2xhc3NOYW1lPXtjeChcbiAgICAgICAgc3R5bGVzLnN1Z2dlc3Rpb24sXG4gICAgICAgIGhpZ2hsaWdodGVkSW5kZXggPT09IGl0ZW1JbmRleCAmJiBzdHlsZXMuc3VnZ2VzdGlvbkhpZ2hsaWdodGVkLFxuICAgICAgKX1cbiAgICAgIHsuLi5nZXRJdGVtUHJvcHMoeyBpbmRleDogaXRlbUluZGV4IH0pfVxuICAgID5cbiAgICAgIDxTdWdnZXN0aW9uSXRlbSBpdGVtPXtuZXdJdGVtfSBjb250ZW50PXtjb250ZW50fSBsbmc9e2xuZ30gey4uLnJlc3R9IC8+XG4gICAgPC9saT5cbiAgKTtcbn1cbmNvbnN0IGl0ZW1TaGFwZSA9IFByb3BUeXBlcy5zaGFwZSh7XG4gIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHR5cGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGFkZHJlc3M6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNlbGVjdGVkSWNvbklkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBpY29uQ29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHRyYW5zbGF0ZWRUZXh0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICBwcm9wZXJ0aWVzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGxheWVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGxvY2FsYWRtaW46IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgbW9kZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBzb3VyY2U6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgYXJyb3dDbGlja2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBkZXN0aW5hdGlvbjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBsb2NhbGFkbWluOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIH0pLFxuICAgIG9yaWdpbjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBsb2NhbGFkbWluOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIH0pLFxuICB9KSxcbn0pO1xuXG5TdWdnZXN0aW9uLnByb3BUeXBlcyA9IHtcbiAgaXRlbTogaXRlbVNoYXBlLmlzUmVxdWlyZWQsXG4gIGxuZzogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBnZXRJdGVtUHJvcHM6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGhpZ2hsaWdodGVkSW5kZXg6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgaXRlbUluZGV4OiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gIHN0eWxlczogUHJvcFR5cGVzLm9iamVjdE9mKFByb3BUeXBlcy5zdHJpbmcpLmlzUmVxdWlyZWQsXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gU3VnZ2VzdGlvbnMoe1xuICBzdWdnZXN0aW9ucyxcbiAgZ2V0TWVudVByb3BzLFxuICBnZXRJdGVtUHJvcHMsXG4gIGxuZyxcbiAgc3R5bGVzLFxuICBoaWRkZW4sXG4gIHJlbmRlckNsZWFySGlzdG9yeUJ1dHRvbixcbiAgaGFuZGxlQ2xlYXJIaXN0b3J5LFxuICAuLi5yZXN0XG59KSB7XG4gIGNvbnN0IFt0XSA9IHVzZVRyYW5zbGF0aW9uKCk7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjeChbXG4gICAgICAgIHN0eWxlcy5zdWdnZXN0aW9uc0NvbnRhaW5lck9wZW4sXG4gICAgICAgIHN0eWxlcy5zdWdnZXN0aW9uc0NvbnRhaW5lcixcbiAgICAgICAgaGlkZGVuICYmICdoaWRkZW4nLFxuICAgICAgXSl9XG4gICAgPlxuICAgICAgPHVsIGNsYXNzTmFtZT17c3R5bGVzLnN1Z2dlc3Rpb25zTGlzdH0gey4uLmdldE1lbnVQcm9wcygpfT5cbiAgICAgICAge3N1Z2dlc3Rpb25zLm1hcCgoc3VnZ2VzdGlvbiwgaSkgPT4ge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8U3VnZ2VzdGlvblxuICAgICAgICAgICAgICBrZXk9e2Ake3N1Z2dlc3Rpb24udHlwZX0tJHtcbiAgICAgICAgICAgICAgICBzdWdnZXN0aW9uLnByb3BlcnRpZXMuZ2lkIHx8XG4gICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5wcm9wZXJ0aWVzLm5hbWUgfHxcbiAgICAgICAgICAgICAgICBzdWdnZXN0aW9uLnByb3BlcnRpZXMuZ3Rmc0lkXG4gICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICBnZXRJdGVtUHJvcHM9e2dldEl0ZW1Qcm9wc31cbiAgICAgICAgICAgICAgaXRlbUluZGV4PXtpfVxuICAgICAgICAgICAgICBpdGVtPXtzdWdnZXN0aW9ufVxuICAgICAgICAgICAgICBsbmc9e2xuZ31cbiAgICAgICAgICAgICAgc3R5bGVzPXtzdHlsZXN9XG4gICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApO1xuICAgICAgICB9KX1cbiAgICAgICAge3JlbmRlckNsZWFySGlzdG9yeUJ1dHRvbiAmJiAoXG4gICAgICAgICAgPGxpIHsuLi5nZXRJdGVtUHJvcHMoeyBpbmRleDogc3VnZ2VzdGlvbnMubGVuZ3RoIH0pfT5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlQ2xlYXJIaXN0b3J5fVxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ2NsZWFyLXNlYXJjaC1oaXN0b3J5J119XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt0KCdjbGVhci1zZWFyY2gtaGlzdG9yeScsIHsgbG5nIH0pfVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9saT5cbiAgICAgICAgKX1cbiAgICAgIDwvdWw+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cblN1Z2dlc3Rpb25zLnByb3BUeXBlcyA9IHtcbiAgc3VnZ2VzdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKGl0ZW1TaGFwZSkuaXNSZXF1aXJlZCxcbiAgZ2V0TWVudVByb3BzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBnZXRJdGVtUHJvcHM6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGxuZzogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBzdHlsZXM6IFByb3BUeXBlcy5vYmplY3RPZihQcm9wVHlwZXMuc3RyaW5nKS5pc1JlcXVpcmVkLFxuICBoaWRkZW46IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIHJlbmRlckNsZWFySGlzdG9yeUJ1dHRvbjogUHJvcFR5cGVzLmJvb2wsXG4gIGhhbmRsZUNsZWFySGlzdG9yeTogUHJvcFR5cGVzLmZ1bmMsXG59O1xuXG5TdWdnZXN0aW9ucy5kZWZhdWx0UHJvcHMgPSB7XG4gIHJlbmRlckNsZWFySGlzdG9yeUJ1dHRvbjogZmFsc2UsXG4gIGhhbmRsZUNsZWFySGlzdG9yeTogKCkgPT4gdW5kZWZpbmVkLFxufTtcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgSWNvbiBmcm9tICdAZGlnaXRyYW5zaXQtY29tcG9uZW50L2RpZ2l0cmFuc2l0LWNvbXBvbmVudC1pY29uJztcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG4vKipcbiAqIElucHV0IGNsZWFyIGJ1dHRvbiBlbGVtZW50XG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBDbGVhckJ1dHRvblByb3BzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gY29sb3IgLy8gaGV4IGNvbG9yIHN0cmluZ1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGxuZyAvLyBsYW5ndWFnZSwgZWcuICdmaSdcbiAqIEBwcm9wZXJ0eSB7KCkgPT4gdm9pZH0gY2xlYXJJbnB1dFxuICogQHByb3BlcnR5IHsoKSA9PiB2b2lkfSBbb25LZXlEb3duXVxuICogQHBhcmFtIHtDbGVhckJ1dHRvblByb3BzfSBwcm9wc1xuICogQHJldHVybnMge0pTWC5FbGVtZW50fVxuICovXG5leHBvcnQgY29uc3QgQ2xlYXJCdXR0b24gPSAoeyBjb2xvciwgbG5nLCBjbGVhcklucHV0LCBvbktleURvd24sIHN0eWxlcyB9KSA9PiB7XG4gIGNvbnN0IFt0XSA9IHVzZVRyYW5zbGF0aW9uKCk7XG4gIHJldHVybiAoXG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzc05hbWU9e3N0eWxlc1snY2xlYXItaW5wdXQnXX1cbiAgICAgIG9uQ2xpY2s9e2NsZWFySW5wdXR9XG4gICAgICBhcmlhLWxhYmVsPXt0KCdjbGVhci1idXR0b24tbGFiZWwnLCB7IGxuZyB9KX1cbiAgICAgIG9uS2V5RG93bj17b25LZXlEb3dufVxuICAgID5cbiAgICAgIDxJY29uIGltZz1cImNsb3NlXCIgY29sb3I9e2NvbG9yfSAvPlxuICAgIDwvYnV0dG9uPlxuICApO1xufTtcblxuQ2xlYXJCdXR0b24ucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBsbmc6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgY2xlYXJJbnB1dDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgb25LZXlEb3duOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBzdHlsZXM6IFByb3BUeXBlcy5vYmplY3RPZihQcm9wVHlwZXMuc3RyaW5nKS5pc1JlcXVpcmVkLFxufTtcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGN4IGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgQ2xlYXJCdXR0b24gfSBmcm9tICcuL0NsZWFyQnV0dG9uJztcbmltcG9ydCB7IGlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudCB9IGZyb20gJy4uL3V0aWxzL3V0aWxzJztcblxuZXhwb3J0IGZ1bmN0aW9uIElucHV0KHtcbiAgaWQsXG4gIGxuZyxcbiAgdmFsdWUsXG4gIHBsYWNlaG9sZGVyLFxuICByZXF1aXJlZCxcbiAgZ2V0SW5wdXRQcm9wcyxcbiAgZ2V0TGFiZWxQcm9wcyxcbiAgY2xlYXJJbnB1dCxcbiAgYXJpYUxhYmVsLFxuICBpbnB1dFJlZixcbiAgc3R5bGVzLFxuICByZW5kZXJMYWJlbCxcbiAgaXNNb2JpbGUsXG4gIGlucHV0Q2xhc3NOYW1lLFxuICB0cmFuc3BvcnRNb2RlLFxuICBjbGVhckJ1dHRvbkNvbG9yLFxuICBhdXRvRm9jdXMsXG4gIGlucHV0T25CbHVyLFxufSkge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29udGFpbmVyfT5cbiAgICAgIHtyZW5kZXJMYWJlbCAmJiAoXG4gICAgICAgIDxsYWJlbFxuICAgICAgICAgIHsuLi5nZXRMYWJlbFByb3BzKHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogc3R5bGVzWydzci1vbmx5J10sXG4gICAgICAgICAgICBodG1sRm9yOiBpZCxcbiAgICAgICAgICB9KX1cbiAgICAgICAgPlxuICAgICAgICAgIHthcmlhTGFiZWx9XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICApfVxuICAgICAgPGlucHV0XG4gICAgICAgIGFyaWEtbGFiZWw9e2FyaWFMYWJlbH1cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzeC1hMTF5L25vLWF1dG9mb2N1c1xuICAgICAgICBhdXRvRm9jdXM9e2F1dG9Gb2N1c31cbiAgICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgICByZXF1aXJlZD17cmVxdWlyZWR9XG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgY2xhc3NOYW1lPXtjeChcbiAgICAgICAgICBzdHlsZXMuaW5wdXQsXG4gICAgICAgICAgaXNNb2JpbGUgJiYgdHJhbnNwb3J0TW9kZSA/IHN0eWxlcy50aGluIDogJycsXG4gICAgICAgICAgc3R5bGVzW2lkXSB8fCAnJyxcbiAgICAgICAgICB2YWx1ZSA/IHN0eWxlcy5oYXNWYWx1ZSA6ICcnLFxuICAgICAgICAgIGlucHV0Q2xhc3NOYW1lLFxuICAgICAgICApfVxuICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgIGlkPXtpZH1cbiAgICAgICAgey4uLmdldElucHV0UHJvcHMoe1xuICAgICAgICAgIHJlZjogaW5wdXRSZWYsXG4gICAgICAgICAgb25CbHVyOiBpbnB1dE9uQmx1cixcbiAgICAgICAgfSl9XG4gICAgICAvPlxuICAgICAge3ZhbHVlICYmIChcbiAgICAgICAgPENsZWFyQnV0dG9uXG4gICAgICAgICAgbG5nPXtsbmd9XG4gICAgICAgICAgY2xlYXJJbnB1dD17KCkgPT4gY2xlYXJJbnB1dChpbnB1dFJlZil9XG4gICAgICAgICAgc3R5bGVzPXtzdHlsZXN9XG4gICAgICAgICAgY29sb3I9e2NsZWFyQnV0dG9uQ29sb3J9XG4gICAgICAgICAgb25LZXlEb3duPXtlID0+IGlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudChlKSAmJiBjbGVhcklucHV0KGlucHV0UmVmKX1cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbklucHV0LnByb3BUeXBlcyA9IHtcbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgbG5nOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICB2YWx1ZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBnZXRJbnB1dFByb3BzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBnZXRMYWJlbFByb3BzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBjbGVhcklucHV0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBhcmlhTGFiZWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgaW5wdXRSZWY6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgY3VycmVudDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICB9KS5pc1JlcXVpcmVkLFxuICBzdHlsZXM6IFByb3BUeXBlcy5vYmplY3RPZihQcm9wVHlwZXMuc3RyaW5nKS5pc1JlcXVpcmVkLFxuICByZW5kZXJMYWJlbDogUHJvcFR5cGVzLmJvb2wsXG4gIGlzTW9iaWxlOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBpbnB1dENsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICB0cmFuc3BvcnRNb2RlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjbGVhckJ1dHRvbkNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIGlucHV0T25CbHVyOiBQcm9wVHlwZXMuZnVuYyxcbn07XG5cbklucHV0LmRlZmF1bHRQcm9wcyA9IHtcbiAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgcmVuZGVyTGFiZWw6IGZhbHNlLFxuICB0cmFuc3BvcnRNb2RlOiB1bmRlZmluZWQsXG4gIGlucHV0T25CbHVyOiAoKSA9PiB7fSxcbn07XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3RNb2RhbCBmcm9tICdyZWFjdC1tb2RhbCc7XG5pbXBvcnQgRGlhbG9nTW9kYWwgZnJvbSAnQGRpZ2l0cmFuc2l0LWNvbXBvbmVudC9kaWdpdHJhbnNpdC1jb21wb25lbnQtZGlhbG9nLW1vZGFsJztcbmltcG9ydCBJY29uIGZyb20gJ0BkaWdpdHJhbnNpdC1jb21wb25lbnQvZGlnaXRyYW5zaXQtY29tcG9uZW50LWljb24nO1xuaW1wb3J0IGhvb2tzIGZyb20gJ0Boc2wtZmkvaG9va3MnO1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0JztcbmltcG9ydCB7IHVzZUNvbWJvYm94IH0gZnJvbSAnZG93bnNoaWZ0JztcbmltcG9ydCBtb2JpbGVTdHlsZXMgZnJvbSAnLi9Nb2JpbGVTZWFyY2guc2Nzcyc7XG5pbXBvcnQgbW9iaWxlTm9TY3JvbGxTdHlsZXMgZnJvbSAnLi9Nb2JpbGVOb1Njcm9sbC5zY3NzJztcbmltcG9ydCB7IFN1Z2dlc3Rpb25zIH0gZnJvbSAnLi9TdWdnZXN0aW9ucyc7XG5pbXBvcnQgeyBJbnB1dCB9IGZyb20gJy4vSW5wdXQnO1xuaW1wb3J0IHtcbiAgaXNLZXlib2FyZFNlbGVjdGlvbkV2ZW50LFxuICBnZXRTdWdnZXN0aW9uVmFsdWUsXG4gIGlzUE9JU2VhcmNoLFxufSBmcm9tICcuLi91dGlscy91dGlscyc7XG5cbi8qKlxuICogQHR5cGVkZWYgQXV0b3N1Z2dlc3RTdGF0ZVxuICogQHByb3BlcnR5IHthcnJheX0gc3VnZ2VzdGlvbnNcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcmVuZGVyTW9iaWxlXG4gKlxuICogQHR5cGVkZWYgTW9iaWxlVmlld1Byb3BzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYXBwRWxlbWVudFxuICogQHByb3BlcnR5IHtzdHJpbmd9IGlkXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcGxhY2Vob2xkZXJcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IGNsZWFySW5wdXRcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IG9uU2VsZWN0ZWRJdGVtQ2hhbmdlXG4gKiBAcHJvcGVydHkge29iamVjdH0gZm9udFdlaWdodHNcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IGNsZWFyT2xkU2VhcmNoZXNcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBzdWdnZXN0aW9uUHJvcHNcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBjb2xvcnNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsbmdcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBhcmlhUHJvcHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2YWx1ZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGlucHV0Q2xhc3NOYW1lXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHJlcXVpcmVkXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW21vYmlsZUxhYmVsXVxuICogQHByb3BlcnR5IHtib29sZWFufSBbc2hvd1Njcm9sbF1cbiAqIEBwcm9wZXJ0eSB7QXV0b3N1Z2dlc3RTdGF0ZX0gc3RhdGVcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IGRpc3BhdGNoXG4gKlxuICogQHBhcmFtIHtNb2JpbGVWaWV3UHJvcHN9IHByb3BzXG4gKiBAcmV0dXJucyB7SlNYLkVsZW1lbnR9XG4gKi9cbmNvbnN0IE1vYmlsZVZpZXcgPSAoe1xuICBhcHBFbGVtZW50LFxuICBpZCxcbiAgcGxhY2Vob2xkZXIsXG4gIGNsZWFySW5wdXQsXG4gIG9uU2VsZWN0ZWRJdGVtQ2hhbmdlLFxuICBmb250V2VpZ2h0cyxcbiAgY2xlYXJPbGRTZWFyY2hlcyxcbiAgc3VnZ2VzdGlvblByb3BzLFxuICBsbmcsXG4gIGFyaWFQcm9wcyxcbiAgdmFsdWUsXG4gIGlucHV0Q2xhc3NOYW1lLFxuICByZXF1aXJlZCxcbiAgbW9iaWxlTGFiZWwsXG4gIHNob3dTY3JvbGwsXG4gIHN0YXRlLFxuICBkaXNwYXRjaCxcbiAgY29sb3JzLFxufSkgPT4ge1xuICBjb25zdCBbdF0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICBjb25zdCB7IGxvY2ssIHVubG9jayB9ID0gaG9va3MudXNlU2Nyb2xsTG9jaygpO1xuICBjb25zdCBzdHlsZXMgPSBzaG93U2Nyb2xsID8gbW9iaWxlU3R5bGVzIDogbW9iaWxlTm9TY3JvbGxTdHlsZXM7XG4gIGNvbnN0IGlucHV0SWQgPSBgJHtpZH0taW5wdXRgO1xuICBjb25zdCBsYWJlbElkID0gYCR7aWR9LWxhYmVsYDtcbiAgY29uc3QgW2lzRGlhbG9nT3Blbiwgc2V0RGlhbG9nT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IGlucHV0UmVmID0gUmVhY3QudXNlUmVmKCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBSZWFjdE1vZGFsLnNldEFwcEVsZW1lbnQoYXBwRWxlbWVudCk7XG4gIH0sIFtdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzdGF0ZS5yZW5kZXJNb2JpbGUpIHtcbiAgICAgIGxvY2soKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdW5sb2NrKCk7XG4gICAgfVxuICB9LCBbc3RhdGUucmVuZGVyTW9iaWxlXSk7XG5cbiAgLyoqXG4gICAqIGluZGVwZW5kZW50IGhvb2tzIGluIG1vYmlsZSB2aWV3LlxuICAgKiBpbnB1dFZhbHVlIGFuZCBzdWdnZXN0aW9uIHN0YXRlcyBhcmUga2VwdCBpbiB0aGUgcGFyZW50XG4gICAqL1xuICBjb25zdCB7XG4gICAgaGlnaGxpZ2h0ZWRJbmRleCxcbiAgICBnZXRMYWJlbFByb3BzLFxuICAgIGdldE1lbnVQcm9wcyxcbiAgICBnZXRJbnB1dFByb3BzLFxuICAgIGdldEl0ZW1Qcm9wcyxcbiAgICBzZXRIaWdobGlnaHRlZEluZGV4LFxuICB9ID0gdXNlQ29tYm9ib3goe1xuICAgIGl0ZW1zOiBzdGF0ZS5zdWdnZXN0aW9ucyxcbiAgICBpbnB1dFZhbHVlOiB2YWx1ZSxcbiAgICBpc09wZW46IHRydWUsXG4gICAgb25TZWxlY3RlZEl0ZW1DaGFuZ2U6IGNoYW5nZXMgPT4ge1xuICAgICAgb25TZWxlY3RlZEl0ZW1DaGFuZ2UoY2hhbmdlcyk7XG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdUT0dHTEVfTUVOVScsIGlzTW9iaWxlOiB0cnVlIH0pO1xuICAgIH0sXG4gICAgaW5wdXRJZCxcbiAgICBsYWJlbElkLFxuICAgIHNlbGVjdGVkSXRlbTogbnVsbCxcbiAgICBkZWZhdWx0SGlnaGxpZ2h0ZWRJbmRleDogLTEsXG4gICAgb25JbnB1dFZhbHVlQ2hhbmdlOiAoeyBpbnB1dFZhbHVlIH0pID0+XG4gICAgICBzdGF0ZS5yZW5kZXJNb2JpbGUgJiYgLy8gcHJldmVudCB1cGRhdGluZyB2YWx1ZSB3aGVuIHRoZSBzZWFyY2ggaXMgbm90IG9wZW5cbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ0lOUFVUX0NIQU5HRScsIHZhbHVlOiBpbnB1dFZhbHVlIH0pLFxuICAgIHN0YXRlUmVkdWNlcjogKG9sZFN0YXRlLCB7IGNoYW5nZXMsIHR5cGUgfSkgPT4ge1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgdXNlQ29tYm9ib3guc3RhdGVDaGFuZ2VUeXBlcy5JbnB1dEtleURvd25Fc2NhcGU6IHtcbiAgICAgICAgICBzZXRIaWdobGlnaHRlZEluZGV4KC0xKTtcbiAgICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdUT0dHTEVfTUVOVScsIGlzTW9iaWxlOiB0cnVlIH0pO1xuICAgICAgICAgIHJldHVybiBvbGRTdGF0ZTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIHVzZUNvbWJvYm94LnN0YXRlQ2hhbmdlVHlwZXMuSW5wdXRLZXlEb3duRW50ZXI6XG4gICAgICAgICAgaWYgKHN0YXRlLmxvYWRpbmcpIHtcbiAgICAgICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ1BFTkRJTkdfRU5URVInLCBlbnRlclBlbmRpbmc6IHRydWUgfSk7XG4gICAgICAgICAgICByZXR1cm4gb2xkU3RhdGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHNlbGVjdCB0aGUgZmlyc3QgaXRlbSBpZiBub25lIGlzIGhpZ2hsaWdodGVkXG4gICAgICAgICAgaWYgKG9sZFN0YXRlLmhpZ2hsaWdodGVkSW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5jaGFuZ2VzLFxuICAgICAgICAgICAgICBzZWxlY3RlZEl0ZW06IHN0YXRlLnN1Z2dlc3Rpb25zWzBdLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGNoYW5nZXM7XG4gICAgICAgIC8vIGFsbG93cyB0YWJiaW5nIG91dCBvZiBpbnB1dCBmaWVsZCB3aXRob3V0IGNsb3NpbmdcbiAgICAgICAgY2FzZSB1c2VDb21ib2JveC5zdGF0ZUNoYW5nZVR5cGVzLklucHV0Qmx1cjoge1xuICAgICAgICAgIHJldHVybiBvbGRTdGF0ZTtcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBjaGFuZ2VzO1xuICAgICAgfVxuICAgIH0sXG4gICAgaXRlbVRvU3RyaW5nKHN1Z2dlc3Rpb24pIHtcbiAgICAgIHJldHVybiBzdWdnZXN0aW9uID8gZ2V0U3VnZ2VzdGlvblZhbHVlKHN1Z2dlc3Rpb24pIDogJyc7XG4gICAgfSxcbiAgfSk7XG4gIC8vIGNhbGwgdG8gc3VwcHJlc3MgcmVmIGVycm9ycyBmcm9tIGRvd25zaGlmdFxuICBnZXRMYWJlbFByb3BzKHt9LCB7IHN1cHByZXNzUmVmRXJyb3I6IHRydWUgfSk7XG4gIGdldE1lbnVQcm9wcyh7fSwgeyBzdXBwcmVzc1JlZkVycm9yOiB0cnVlIH0pO1xuICBnZXRJbnB1dFByb3BzKHt9LCB7IHN1cHByZXNzUmVmRXJyb3I6IHRydWUgfSk7XG4gIGdldEl0ZW1Qcm9wcyh7IGluZGV4OiAtMSB9LCB7IHN1cHByZXNzUmVmRXJyb3I6IHRydWUgfSk7XG5cbiAgY29uc3QgeyBhcmlhUmVxdWlyZWRUZXh0LCBTZWFyY2hCYXJJZCwgYXJpYUN1cnJlbnRTdWdnZXN0aW9uIH0gPSBhcmlhUHJvcHM7XG4gIGNvbnN0IGFyaWFMYWJlbCA9IGFyaWFSZXF1aXJlZFRleHRcbiAgICAuY29uY2F0KCcgJylcbiAgICAuY29uY2F0KFNlYXJjaEJhcklkKVxuICAgIC5jb25jYXQoJyAnKVxuICAgIC5jb25jYXQoYXJpYUN1cnJlbnRTdWdnZXN0aW9uKTtcbiAgcmV0dXJuIChcbiAgICA8UmVhY3RNb2RhbFxuICAgICAgaXNPcGVuPXtzdGF0ZS5yZW5kZXJNb2JpbGV9XG4gICAgICBjbGFzc05hbWU9e3N0eWxlc1snbW9iaWxlLW1vZGFsJ119XG4gICAgICBvdmVybGF5Q2xhc3NOYW1lPXtzdHlsZXNbJ21vYmlsZS1tb2RhbC1vdmVybGF5J119XG4gICAgICBzaG91bGRSZXR1cm5Gb2N1c0FmdGVyQ2xvc2U9e2ZhbHNlfVxuICAgICAgc2hvdWxkQ2xvc2VPbkVzY1xuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ21vYmlsZS1tb2RhbC1jb250ZW50J119XG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgJy0tY29sb3InOiBjb2xvcnMucHJpbWFyeSxcbiAgICAgICAgICAnLS1hY2Nlc3NpYmxlLXByaW1hcnktY29sb3InOiBjb2xvcnMuYWNjZXNzaWJsZVByaW1hcnksXG4gICAgICAgICAgJy0taG92ZXItY29sb3InOiBjb2xvcnMuaG92ZXIsXG4gICAgICAgICAgJy0tZm9udC13ZWlnaHQtbWVkaXVtJzogZm9udFdlaWdodHMubWVkaXVtLFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzWydjb21ib2JveC1jb250YWluZXInXX0gaHRtbEZvcj17aW5wdXRJZH0+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlc1snY29tYm9ib3gtaWNvbiddfVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICBzZXRIaWdobGlnaHRlZEluZGV4KC0xKTtcbiAgICAgICAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnVE9HR0xFX01FTlUnLCBpc01vYmlsZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBvbktleURvd249e2UgPT4ge1xuICAgICAgICAgICAgICBpZiAoaXNLZXlib2FyZFNlbGVjdGlvbkV2ZW50KGUpKSB7XG4gICAgICAgICAgICAgICAgc2V0SGlnaGxpZ2h0ZWRJbmRleCgtMSk7XG4gICAgICAgICAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnVE9HR0xFX01FTlUnLCBpc01vYmlsZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9e3QoJ2NhbmNlbCcsIHsgbG5nIH0pfVxuICAgICAgICAgICAgdGFiSW5kZXg9ezB9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEljb24gaW1nPVwiYXJyb3dcIiBjb2xvcj17Y29sb3JzLnByaW1hcnl9IC8+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXNbJ3JpZ2h0LWNvbHVtbiddfT5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzWydjb21ib2JveC1sYWJlbCddfVxuICAgICAgICAgICAgICBpZD17bGFiZWxJZH1cbiAgICAgICAgICAgICAgey4uLmdldExhYmVsUHJvcHMoKX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge21vYmlsZUxhYmVsfVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtcbiAgICAgICAgICAgICAgICBpc1BPSVNlYXJjaChpZClcbiAgICAgICAgICAgICAgICAgID8gdCgnYWRkcmVzcy1wbGFjZS1vci1idXNpbmVzcycsIHsgbG5nIH0pXG4gICAgICAgICAgICAgICAgICA6IHBsYWNlaG9sZGVyXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWQ9e2lkfVxuICAgICAgICAgICAgICBsbmc9e2xuZ31cbiAgICAgICAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICAgICAgICBnZXRJbnB1dFByb3BzPXtnZXRJbnB1dFByb3BzfVxuICAgICAgICAgICAgICBnZXRMYWJlbFByb3BzPXtnZXRMYWJlbFByb3BzfVxuICAgICAgICAgICAgICBjbGVhcklucHV0PXsoKSA9PiBjbGVhcklucHV0KGlucHV0UmVmKX1cbiAgICAgICAgICAgICAgYXJpYUxhYmVsPXthcmlhTGFiZWx9XG4gICAgICAgICAgICAgIGlucHV0UmVmPXtpbnB1dFJlZn1cbiAgICAgICAgICAgICAgc3R5bGVzPXtzdHlsZXN9XG4gICAgICAgICAgICAgIHJlbmRlckxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgICAgY2xlYXJCdXR0b25Db2xvcj17Y29sb3JzLnByaW1hcnl9XG4gICAgICAgICAgICAgIGF1dG9Gb2N1c1xuICAgICAgICAgICAgICBpbnB1dENsYXNzTmFtZT17aW5wdXRDbGFzc05hbWV9XG4gICAgICAgICAgICAgIHJlcXVpcmVkPXtyZXF1aXJlZH1cbiAgICAgICAgICAgICAgaXNNb2JpbGVcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8U3VnZ2VzdGlvbnNcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbnM9e3N0YXRlLnN1Z2dlc3Rpb25zfVxuICAgICAgICAgICAgICBnZXRNZW51UHJvcHM9e2dldE1lbnVQcm9wc31cbiAgICAgICAgICAgICAgZ2V0SXRlbVByb3BzPXtnZXRJdGVtUHJvcHN9XG4gICAgICAgICAgICAgIGhpZ2hsaWdodGVkSW5kZXg9e2hpZ2hsaWdodGVkSW5kZXh9XG4gICAgICAgICAgICAgIGlzT3BlbiAvLyB3aGVuIG1vYmlsZSB2aWV3IGlzIG9wZW4gd2UgYWx3YXlzIHdhbnQgdG8gc2hvdyBzdWdnZXN0aW9uc1xuICAgICAgICAgICAgICBoaWRkZW49e2ZhbHNlfVxuICAgICAgICAgICAgICBsbmc9e2xuZ31cbiAgICAgICAgICAgICAgc3R5bGVzPXtzdHlsZXN9XG4gICAgICAgICAgICAgIHJlbmRlckNsZWFySGlzdG9yeUJ1dHRvblxuICAgICAgICAgICAgICBoYW5kbGVDbGVhckhpc3Rvcnk9eygpID0+IHNldERpYWxvZ09wZW4odHJ1ZSl9XG4gICAgICAgICAgICAgIHsuLi5zdWdnZXN0aW9uUHJvcHN9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxEaWFsb2dNb2RhbFxuICAgICAgICAgIGFwcEVsZW1lbnQ9e2FwcEVsZW1lbnR9XG4gICAgICAgICAgaXNNb2RhbE9wZW49e2lzRGlhbG9nT3Blbn1cbiAgICAgICAgICBoYW5kbGVDbG9zZT17KCkgPT4gc2V0RGlhbG9nT3BlbihmYWxzZSl9XG4gICAgICAgICAgaGVhZGVyVGV4dD17dCgnZGVsZXRlLW9sZC1zZWFyY2hlcy1oZWFkZXInLCB7IGxuZyB9KX1cbiAgICAgICAgICBwcmltYXJ5QnV0dG9uVGV4dD17dCgnZGVsZXRlJywgeyBsbmcgfSl9XG4gICAgICAgICAgc2Vjb25kYXJ5QnV0dG9uVGV4dD17dCgnY2FuY2VsJywgeyBsbmcgfSl9XG4gICAgICAgICAgcHJpbWFyeUJ1dHRvbk9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgIGNsZWFyT2xkU2VhcmNoZXMoKTtcbiAgICAgICAgICAgIHNldERpYWxvZ09wZW4oZmFsc2UpO1xuICAgICAgICAgIH19XG4gICAgICAgICAgc2Vjb25kYXJ5QnV0dG9uT25DbGljaz17KCkgPT4gc2V0RGlhbG9nT3BlbihmYWxzZSl9XG4gICAgICAgICAgY29sb3JzPXtjb2xvcnN9XG4gICAgICAgICAgZm9udFdlaWdodHM9e2ZvbnRXZWlnaHRzfVxuICAgICAgICAgIGxhbmc9e2xuZ31cbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvUmVhY3RNb2RhbD5cbiAgKTtcbn07XG5cbk1vYmlsZVZpZXcucHJvcFR5cGVzID0ge1xuICBhcHBFbGVtZW50OiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGNsZWFySW5wdXQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGNsZWFyT2xkU2VhcmNoZXM6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIG9uU2VsZWN0ZWRJdGVtQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICB2YWx1ZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBjb2xvcnM6IFByb3BUeXBlcy5vYmplY3RPZihQcm9wVHlwZXMuc3RyaW5nKS5pc1JlcXVpcmVkLFxuICBmb250V2VpZ2h0czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBtZWRpdW06IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgfSkuaXNSZXF1aXJlZCxcbiAgc3VnZ2VzdGlvblByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe30pLmlzUmVxdWlyZWQsXG4gIGFyaWFQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBhcmlhUmVxdWlyZWRUZXh0OiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgU2VhcmNoQmFySWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBhcmlhQ3VycmVudFN1Z2dlc3Rpb246IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgfSkuaXNSZXF1aXJlZCxcbiAgaW5wdXRDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgbW9iaWxlTGFiZWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIHNob3dTY3JvbGw6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIGxuZzogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBzdGF0ZTogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBzdWdnZXN0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHt9KSkuaXNSZXF1aXJlZCxcbiAgICByZW5kZXJNb2JpbGU6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gICAgbG9hZGluZzogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgfSkuaXNSZXF1aXJlZCxcbiAgZGlzcGF0Y2g6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBNb2JpbGVWaWV3O1xuIiwiZXhwb3J0IGNvbnN0IHNlYXJjaFJlZHVjZXIgPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnSU5QVVRfQ0hBTkdFJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICB2YWx1ZTogYWN0aW9uLnZhbHVlLFxuICAgICAgfTtcbiAgICBjYXNlICdGRVRDSF9TVUdHRVNUSU9OUyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgbG9hZGluZzogYWN0aW9uLmxvYWRpbmcsXG4gICAgICAgIHN1Z2dlc3Rpb25zOiBhY3Rpb24uc3VnZ2VzdGlvbnMgfHwgc3RhdGUuc3VnZ2VzdGlvbnMsXG4gICAgICB9O1xuICAgIGNhc2UgJ0NMRUFSX1NVR0dFU1RJT05TJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzdWdnZXN0aW9uczogW10sXG4gICAgICB9O1xuICAgIGNhc2UgJ1NFVF9TT1VSQ0VTJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzaG93T3duUGxhY2VzOiBhY3Rpb24uc2hvd093blBsYWNlcyxcbiAgICAgICAgc291cmNlczogYWN0aW9uLnNvdXJjZXMsXG4gICAgICAgIHBlbmRpbmdTZWxlY3Rpb246IGFjdGlvbi5wZW5kaW5nU2VsZWN0aW9uLFxuICAgICAgfTtcbiAgICBjYXNlICdDTEVBUic6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICBpc0NsZWFyZWQ6IHRydWUsXG4gICAgICAgIHN1Z2dlc3Rpb25zOiBbXSxcbiAgICAgIH07XG4gICAgY2FzZSAnSU5QVVRfQkxVUic6IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICB2YWx1ZTogYWN0aW9uLnZhbHVlIHx8IHN0YXRlLnZhbHVlLFxuICAgICAgICBpc0NsZWFyZWQ6IGFjdGlvbi5pc01vYmlsZSA/IGZhbHNlIDogc3RhdGUuaXNDbGVhcmVkLFxuICAgICAgICBwZW5kaW5nU2VsZWN0aW9uOiBudWxsLFxuICAgICAgICBzaG93T3duUGxhY2VzOiBmYWxzZSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNhc2UgJ1JFU0VUJzoge1xuICAgICAgcmV0dXJuIGFjdGlvbi5pbml0aWFsU3RhdGU7XG4gICAgfVxuICAgIGNhc2UgJ1BFTkRJTkdfRU5URVInOiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgZW50ZXJQZW5kaW5nOiBhY3Rpb24uZW50ZXJQZW5kaW5nLFxuICAgICAgfTtcbiAgICB9XG4gICAgY2FzZSAnVE9HR0xFX01FTlUnOiB7XG4gICAgICBpZiAoYWN0aW9uLmlzTW9iaWxlKSB7XG4gICAgICAgIGlmICghc3RhdGUucmVuZGVyTW9iaWxlKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgcmVuZGVyTW9iaWxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHN0YXRlLmlzQ2xlYXJlZCA/ICcnIDogc3RhdGUudmFsdWUsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHJlbmRlck1vYmlsZTogZmFsc2UsXG4gICAgICAgICAgaXNDbGVhcmVkOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBpc01lbnVPcGVuOiAhc3RhdGUuaXNNZW51T3BlbixcbiAgICAgICAgcmVuZGVyTW9iaWxlOiBhY3Rpb24uaXNNb2JpbGUgJiYgIXN0YXRlLnJlbmRlck1vYmlsZSxcbiAgICAgIH07XG4gICAgfVxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gc3RhdGU7XG4gIH1cbn07XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMgKi9cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VDYWxsYmFjaywgdXNlUmVmLCB1c2VSZWR1Y2VyIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgSTE4bmV4dFByb3ZpZGVyLCB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnO1xuaW1wb3J0IGN4IGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgZXhlY3V0ZVNlYXJjaCB9IGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1leGVjdXRlLXNlYXJjaC1pbW1pZGlhdGUnO1xuaW1wb3J0IHsgdXNlQ29tYm9ib3ggfSBmcm9tICdkb3duc2hpZnQnO1xuaW1wb3J0IEljb24sIHtcbiAgZGVmYXVsdENvbG9ycyxcbn0gZnJvbSAnQGRpZ2l0cmFuc2l0LWNvbXBvbmVudC9kaWdpdHJhbnNpdC1jb21wb25lbnQtaWNvbic7XG5pbXBvcnQgaTE4biBmcm9tICcuL3V0aWxzL2kxOG4nO1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL2NvbXBvbmVudHMvc3R5bGVzLnNjc3MnO1xuaW1wb3J0IHsgZ2V0U3VnZ2VzdGlvblZhbHVlLCBzdWdnZXN0aW9uQXNBcmlhQ29udGVudCB9IGZyb20gJy4vdXRpbHMvdXRpbHMnO1xuaW1wb3J0IE1vYmlsZVZpZXcgZnJvbSAnLi9jb21wb25lbnRzL01vYmlsZVZpZXcnO1xuaW1wb3J0IHsgSW5wdXQgfSBmcm9tICcuL2NvbXBvbmVudHMvSW5wdXQnO1xuaW1wb3J0IHsgU3VnZ2VzdGlvbnMgfSBmcm9tICcuL2NvbXBvbmVudHMvU3VnZ2VzdGlvbnMnO1xuaW1wb3J0IHsgc2VhcmNoUmVkdWNlciB9IGZyb20gJy4vdXRpbHMvc2VhcmNoUmVkdWNlcic7XG5cbmNvbnN0IGdldEFyaWFQcm9wcyA9ICh7XG4gIGlkLFxuICBhcmlhTGFiZWwsXG4gIGxuZyxcbiAgdCxcbiAgaXNNb2JpbGUsXG4gIHN1Z2dlc3Rpb25zLFxuICB2YWx1ZSxcbiAgcmVxdWlyZWQsXG59KSA9PiB7XG4gIGNvbnN0IGFyaWFCYXJJZCA9IGlkLnJlcGxhY2UoJ3NlYXJjaGZpZWxkLScsICcnKTtcbiAgY29uc3QgU2VhcmNoQmFySWQgPVxuICAgIGFyaWFMYWJlbCB8fCB0KGFyaWFCYXJJZCwgeyBsbmcgfSkucmVwbGFjZSgnc2VhcmNoZmllbGQtJywgJycpLmNvbmNhdCgnLicpOyAvLyBGdWxsIHN0b3AgbWFrZXMgc2NyZWVuIHJlYWRlciBzcGVlY2ggY2xlYXJlci5cbiAgY29uc3QgYXJpYVJlcXVpcmVkVGV4dCA9IHJlcXVpcmVkID8gYCR7dCgncmVxdWlyZWQnLCB7IGxuZyB9KX0uYCA6ICcnO1xuICBjb25zdCBhcmlhTGFiZWxJbnN0cnVjdGlvbnMgPSBpc01vYmlsZVxuICAgID8gdCgnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1tb2JpbGUnLCB7IGxuZyB9KVxuICAgIDogdCgnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1kZXNrdG9wJywgeyBsbmcgfSk7XG4gIGNvbnN0IG1vdmluZ1RvRGVzdGluYXRpb25GaWVsZFRleHQgPVxuICAgIGlkID09PSAnb3JpZ2luJ1xuICAgICAgPyB0KCdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtbW92ZS10by1kZXN0aW5hdGlvbicsIHsgbG5nIH0pXG4gICAgICA6ICcnO1xuICBjb25zdCBhcmlhTGFiZWxUZXh0ID0gYXJpYUxhYmVsSW5zdHJ1Y3Rpb25zXG4gICAgLmNvbmNhdCgnICcpXG4gICAgLmNvbmNhdChtb3ZpbmdUb0Rlc3RpbmF0aW9uRmllbGRUZXh0KTtcblxuICBjb25zdCBhcmlhU3VnZ2VzdGlvbkxlbiA9IHQoJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW4nLCB7XG4gICAgY291bnQ6IHN1Z2dlc3Rpb25zLmxlbmd0aCxcbiAgICBsbmcsXG4gIH0pO1xuXG4gIGNvbnN0IGFyaWFDdXJyZW50U3VnZ2VzdGlvbiA9XG4gICAgc3VnZ2VzdGlvbkFzQXJpYUNvbnRlbnQoeyBzdWdnZXN0aW9ucywgdCwgbG5nIH0pIHx8IHZhbHVlXG4gICAgICA/IHQoJ3NlYXJjaC1jdXJyZW50LXN1Z2dlc3Rpb24nLCB7XG4gICAgICAgICAgbG5nLFxuICAgICAgICAgIHNlbGVjdGlvbjpcbiAgICAgICAgICAgIHN1Z2dlc3Rpb25Bc0FyaWFDb250ZW50KHsgc3VnZ2VzdGlvbnMsIHQsIGxuZyB9KS50b0xvd2VyQ2FzZSgpIHx8XG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgfSlcbiAgICAgIDogJyc7XG5cbiAgcmV0dXJuIHtcbiAgICBTZWFyY2hCYXJJZCxcbiAgICBhcmlhUmVxdWlyZWRUZXh0LFxuICAgIGFyaWFMYWJlbFRleHQsXG4gICAgYXJpYVN1Z2dlc3Rpb25MZW4sXG4gICAgYXJpYUN1cnJlbnRTdWdnZXN0aW9uLFxuICB9O1xufTtcblxuY29uc3QgcG9zaXRpb25zID0gW1xuICAnVmFsaXR0dSBzaWphaW50aScsXG4gICdOeWt5aW5lbiBzaWphaW50aXNpJyxcbiAgJ0N1cnJlbnQgcG9zaXRpb24nLFxuICAnU2VsZWN0ZWQgbG9jYXRpb24nLFxuICAnVmFsZCBwb3NpdGlvbicsXG4gICdBbnbDpG5kIG1pbiBwb3NpdGlvbicsXG4gICdNaW4gcG9zaXRpb24nLFxuICAnS8OkeXTDpCBueWt5aXN0w6Qgc2lqYWludGlhJyxcbiAgJ1VzZSBjdXJyZW50IGxvY2F0aW9uJyxcbiAgJ1lvdXIgY3VycmVudCBsb2NhdGlvbicsXG4gICdXeWJyYW5lIG1pZWpzY2UnLFxuXTtcblxuLyoqXG4gKiBUYWtlcyB0aGUgdGFyZ2V0cyBhbmQgbW9kaWZpZXMgdGhlbSBiYXNlZCBvbiBvd25QbGFjZXMgYW5kIGlzTG9jYXRpb25TZWFyY2hcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wc1xuICogQHBhcmFtIHtzdHJpbmdbXX0gcHJvcHMudGFyZ2V0c1xuICogQHBhcmFtIHtib29sZWFufSBwcm9wcy5pc0xvY2F0aW9uU2VhcmNoXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHByb3BzLmlzTW9iaWxlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHByb3BzLm93blBsYWNlc1xuICogQHBhcmFtIHtzdHJpbmdbXX0gcHJvcHMuc291cmNlc1xuICogQHJldHVybnMge3N0cmluZ1tdfSBuZXdUYXJnZXRzXG4gKi9cbmNvbnN0IGdldE5ld1RhcmdldHMgPSAoe1xuICB0YXJnZXRzLFxuICBpc0xvY2F0aW9uU2VhcmNoLFxuICBpc01vYmlsZSxcbiAgb3duUGxhY2VzLFxuICBzb3VyY2VzLFxufSkgPT4ge1xuICBjb25zdCB1c2VBbGwgPSAhdGFyZ2V0cz8ubGVuZ3RoO1xuICBsZXQgbmV3VGFyZ2V0cztcbiAgaWYgKG93blBsYWNlcykge1xuICAgIG5ld1RhcmdldHMgPSBbJ0xvY2F0aW9ucyddO1xuICAgIGlmICh1c2VBbGwgfHwgdGFyZ2V0cy5pbmNsdWRlcygnU3RvcHMnKSkge1xuICAgICAgbmV3VGFyZ2V0cy5wdXNoKCdTdG9wcycpO1xuICAgIH1cbiAgICBpZiAodXNlQWxsIHx8IHRhcmdldHMuaW5jbHVkZXMoJ1N0YXRpb25zJykpIHtcbiAgICAgIG5ld1RhcmdldHMucHVzaCgnU3RhdGlvbnMnKTtcbiAgICB9XG4gICAgaWYgKHVzZUFsbCB8fCB0YXJnZXRzLmluY2x1ZGVzKCdWZWhpY2xlUmVudGFsU3RhdGlvbnMnKSkge1xuICAgICAgbmV3VGFyZ2V0cy5wdXNoKCdWZWhpY2xlUmVudGFsU3RhdGlvbnMnKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoIXVzZUFsbCkge1xuICAgIG5ld1RhcmdldHMgPSBbLi4udGFyZ2V0c107XG4gICAgLy8gaW4gZGVza3RvcCwgZmF2b3JpdGVzIGFyZSBhY2Nlc3NlZCB2aWEgc3ViIHNlYXJjaFxuICAgIGlmIChcbiAgICAgIGlzTG9jYXRpb25TZWFyY2ggJiZcbiAgICAgICFpc01vYmlsZSAmJlxuICAgICAgKCFzb3VyY2VzLmxlbmd0aCB8fCBzb3VyY2VzLmluY2x1ZGVzKCdGYXZvdXJpdGUnKSlcbiAgICApIHtcbiAgICAgIG5ld1RhcmdldHMucHVzaCgnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmV3VGFyZ2V0cztcbn07XG5cbi8qKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHNlYXJjaENvbnRleHQgPSB7XG4gKiAgIGlzUGVsaWFzTG9jYXRpb25Bd2FyZTogZmFsc2UgLy8gdHJ1ZSAvIGZhbHNlIGRvZXMgTGV0IFBlbGlhcyBzdWdnZXN0IGJhc2VkIG9uIGN1cnJlbnQgdXNlciBsb2NhdGlvblxuICogICBtaW5pbWFsUmVnZXhwOiB1bmRlZmluZWQgLy8gdXNlZCBmb3IgdGVzdGluZyBtaW4uIHJlZ2V4cC4gRm9yIGV4YW1wbGU6IG5ldyBSZWdFeHAoJy57Mix9JyksXG4gKiAgIGxpbmVSZWdleHA6IHVuZGVmaW5lZCAvLyAgaWRlbnRpZnkgc2VhcmNoZXMgZm9yIHJvdXRlIG51bWJlcnMvbGFiZWxzOiBidXMgfCB0cmFpbiB8IG1ldHJvLiBGb3IgZXhhbXBsZTogbmV3IFJlZ0V4cChcbiAqICAgIC8vICAgJyheWzAtOV0rW2Etel0/JHxeW3l1bGVhcGlua3J0ZHpdJHwoXm1bMTJdP2I/JCkpJyxcbiAqICAgIC8vICAnaScsXG4gKiAgICAvLyAgKSxcbiAqICAgVVJMX1BFTElBUzogJycgLy8gdXJsIGZvciBwZWxpYXMgc2VhcmNoZXNcbiAqICAgZmVlZElEczogWydIU0wnLCAnSFNMTGF1dHRhJ10gLy8gRmVlZElkJ3MgbGlrZSAgW0hTTCwgSFNMTGF1dHRhXVxuICogICBnZW9jb2RpbmdTb3VyY2VzOiBbJ29hJywnb3NtJywnbmxzZmknXSAgLy8gc291cmNlcyBmb3IgZ2VvY29kaW5nXG4gKiAgIGdlb2NvZGluZ1NlYXJjaFBhcmFtczsge30gIC8vIFNlYXJjaHBhcm1hcyBmcm8gZ2VvY29kaW5nXG4gKiAgIGdldEZhdm91cml0ZUxvY2F0aW9uczogKCkgPT4gKHt9KSwgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIGFycmF5IG9mIGZhdm91cml0ZSBsb2NhdGlvbnMuXG4gKiAgIGdldEZhdm91cml0ZVN0b3BzOiAoKSA9PiAoe30pLCAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIGFycmF5IG9mIGZhdm91cml0ZSBzdG9wcy5cbiAqICAgZ2V0TGFuZ3VhZ2U6ICgpID0+ICh7fSksICAgICAgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgY3VycmVudCBsYW5ndWFnZS5cbiAqICAgZ2V0RmF2b3VyaXRlUm91dGVzOiAoKSA9PiAoe30pLCAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgYXJyYXkgb2YgZmF2b3VyaXRlIHJvdXRlcy5cbiAqICAgZ2V0UG9zaXRpb25zOiAoKSA9PiAoe30pLCAgICAgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgdXNlcidzIGdlb2xvY2F0aW9uLlxuICogICBnZXRSb3V0ZXNRdWVyeTogKCkgPT4gKHt9KSwgICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBxdWVyeSBmb3IgZmV0Y2hpbmcgcm91dGVzLlxuICogICBnZXRTdG9wQW5kU3RhdGlvbnNRdWVyeTogKCkgPT4gKHt9KSwgIC8vIEZ1bmN0aW9uIHRoYXQgZmV0Y2hlcyBmYXZvdXJpdGUgc3RvcHMgYW5kIHN0YXRpb25zIGZyb20gZ3JhcGhxbCBBUEkuXG4gKiAgIGdldEZhdm91cml0ZVJvdXRlc1F1ZXJ5OiAoKSA9PiAoe30pLCAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIHF1ZXJ5IGZvciBmZXRjaGluZyBmYXZvdXJpdGUgcm91dGVzLlxuICogICBnZXRGYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnM6ICgpID0+ICh7fSksICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgZmF2b3VyaXRlIGJpa2UgcmVudGFsIHN0YXRpb24uXG4gKiAgIGdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uc1F1ZXJ5OiAoKSA9PiAoe30pLCAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgcXVlcnkgZm9yIGZldGNoaW5nIGZhdm91cml0ZSBiaWtlIHJlbnRhbCBzdGF0aW9ucy5cbiAqICAgc3RhcnRMb2NhdGlvbldhdGNoOiAoKSA9PiAoe30pLCAgICAgICAvLyBGdW5jdGlvbiB0aGF0IGxvY2F0ZXMgdXNlcnMgZ2VvbG9jYXRpb24uXG4gKiAgIHNhdmVTZWFyY2g6ICgpID0+ICh7fSksICAgICAgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCBzYXZlcyBzZWFyY2ggdG8gb2xkIHNlYXJjaGVzIHN0b3JlLlxuICogICBjbGVhck9sZFNlYXJjaGVzOiAoKSA9PiAoe30pLCAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgY2xlYXJzIG9sZCBzZWFyY2hlcyBzdG9yZS5cbiAqICAgZ2V0RnV0dXJlUm91dGVzOiAoKSA9PiAoe30pLCAgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybiBmdXR1cmUgcm91dGVzXG4gKiAgIHNhdmVGdXR1cmVSb3V0ZTogKCkgPT4gKHt9KSwgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCBzYXZlcyBhIGZ1dHVyZSByb3V0ZVxuICogICBjbGVhckZ1dHVyZVJvdXRlczogKCkgPT4gKHt9KSwgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgY2xlYXJzIGZ1dHVyZSByb3V0ZXNcbiAqIH07XG4gKiBjb25zdCBsYW5nID0gJ2ZpJzsgLy8gZW4sIGZpIG9yIHN2XG4gKiBjb25zdCBvblNlbGVjdCA9IChpdGVtLCBpZCkgPT4ge1xuICogICAgLy8gRnVudGlvbmFsaXR5IHdoZW4gdXNlciBzZWxlY3RzIGEgc3VnZ2VzaW9ucy4gTm8gZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpcyBnaXZlbi5cbiAqICAgIHJldHVybiBudWxsO1xuICogfTtcbiAqIGNvbnN0IG9uQ2xlYXIgPSBpZCA9PiB7XG4gKiAgICAvLyBDYWxsZWQgIHdoZW4gdXNlciBjbGlja3MgdGhlIGNsZWFyIHNlYXJjaCBzdHJpbmcgYnV0dG9uLiBObyBkZWZhdWx0IGltcGxlbWVudGF0aW9uLlxuICogICAgcmV0dXJuIG51bGw7XG4gKiB9O1xuICogY29uc3QgZ2V0QXV0b1N1Z2dlc3RJY29uczoge1xuICogICAvLyBDYWxsZWQgZm9yIGV2ZXJ5IGNpdHkgYmlrZSBzdGF0aW9uIHJlbmRlcmVkIGFzIGEgc2VhcmNoIHN1Z2dlc3Rpb24uIFNob3VsZCByZXR1cm4gdGhlIGljb24gYW5kXG4gKiAgIC8vIGNvbG9yIHVzZWQgZm9yIHRoYXQgc3RhdGlvbi4gVHdvIGljb25zIGFyZSBhdmFpbGFibGUsICdjaXR5YmlrZS1zdG9wLWRpZ2l0cmFuc2l0JyBhbmRpdHliaWtlLXN0b3AtZGlnaXRyYW5zaXQtc2Vjb25kYXJ5Jy5cbiAqICAgY2l0eWJpa2VzOiBzdGF0aW9uID0+IHtcbiAqICAgICAgcmV0dXJuIFsnY2l0eWJpa2Utc3RvcC1kaWdpdHJhbnNpdCcsICcjZjJiNjJkJ107XG4gKiAgIH1cbiAqIH1cbiAqIGNvbnN0IHRyYW5zcG9ydE1vZGUgPSB1bmRlZmluZWQ7XG4gKiBjb25zdCBwbGFjZWhvbGRlciA9IFwic3RvcC1uZWFyLXlvdVwiO1xuICogY29uc3QgdGFyZ2V0cyA9IFsnTG9jYXRpb25zJywgJ1N0b3BzJywgJ1JvdXRlcyddOyAvLyBEZWZpbmVzIHdoYXQgeW91IGFyZSBzZWFyY2hpbmcuIE9wdGlvbnMgYXJlIExvY2F0aW9ucywgU3RvcHMsIFN0YXRpb25zLCBSb3V0ZXMsIFZlaGljbGVSZW50YWxTdGF0aW9ucywgRnV0dXJlUm91dGVzLCBNYXBQb3NpdGlvbiBhbmQgQ3VycmVudFBvc2l0aW9uLiBMZWF2ZSBlbXB0eSB0byBzZWFyY2ggYWxsIHRhcmdldHMuXG4gKiBjb25zdCBzb3VyY2VzID0gWydGYXZvdXJpdGUnLCAnSGlzdG9yeScsICdEYXRhc291cmNlJ10gLy8gRGVmaW5lcyB3aGVyZSB5b3UgYXJlIHNlYXJjaGluZy4gYWxsIGF2YWlsYWJsZSBhcmU6IEZhdm91cml0ZSwgSGlzdG9yeSAocHJldmlvdXNseSBzZWFyY2hlZCBzZWFyY2hlcykgYW5kIERhdGFzb3VyY2UuIExlYXZlIGVtcHR5IHRvIHVzZSBhbGwgc291cmNlcy5cbiAqIHJldHVybiAoXG4gKiAgPERUQXV0b3N1Z2dlc3RcbiAqICAgIGFwcEVsZW1lbnQ9e2FwcEVsZW1lbnR9IC8vIFJlcXVpcmVkLiBSb290IGVsZW1lbnQncyBpZC4gTmVlZGVkIGZvciByZWFjdC1tb2RhbCBjb21wb25lbnQuXG4gKiAgICBzZWFyY2hDb250ZXh0PXtzZWFyY2hDb250ZXh0fVxuICogICAgaWNvbj1cIm9yaWdpblwiIC8vIE9wdGlvbmFsIFN0cmluZyBmb3IgaWNvbiB0aGF0IGlzIHNob3duIGxlZnQgb2Ygc2VhcmNoZmllbGQuIHVzZWQgd2l0aCBJY29uIGxpYnJhcnlcbiAqICAgIGlkPVwib3JpZ2luXCIgLy8gdXNlZCBmb3Igc3R5bGUgcHJvcHMgYW5kIGluZm8gZm9yIGNvbXBvbmVudC5cbiAqICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn0gLy8gU3RyaW5nIHRoYXQgaXMgc2hvd25zIGluaXRhbGx5IGluIHNlYXJjaCBmaWVsZFxuICogICAgdmFsdWU9XCJcIiAvLyBlLmcuIHVzZXIgdHlwZWQgc3RyaW5nIHRoYXQgaXMgc2hvd24gaW4gc2VhcmNoIGZpZWxkXG4gKiAgICBvblNlbGVjdD17b25TZWxlY3R9XG4gKiAgICBvbkNsZWFyPXtvbkNsZWFyfVxuICogICAgbGFuZz17bGFuZ31cbiAqICAgIGdldEF1dG9TdWdnZXN0SWNvbnM9e2dldEF1dG9TdWdnZXN0SWNvbnN9XG4gKiAgICB0cmFuc3BvcnRNb2RlPXt0cmFuc3BvcnRNb2RlfSAvLyB0cmFuc3BvcnRtb2RlIHdpdGggd2hpY2ggd2UgZmlsdGVyIHRoZSByb3V0ZXMsIGUuZy4gcm91dGUtQlVTXG4gKiAgICBnZW9jb2RpbmdTaXplPXsxMH0gLy8gZGVmaW5lcyBob3cgbWFueSBzdG9wcyBhbmQgc3RhdGlvbnMgdG8gZmV0Y2ggZnJvbSBnZW9jb2RpbmcuIFVzZWZ1bCBpZiB5b3Ugd2FudCB0byBmaWx0ZXIgdGhlIHJlc3VsdHMgYW5kIHN0aWxsIGdldCBhIHJlYXNvbmFibGUgYW1vdW50IG9mIHN1Z2dlc3Rpb25zLlxuICogICAgZmlsdGVyUmVzdWx0cz17cmVzdWx0cyA9PiByZXR1cm4gcmVzdWx0c30gLy8gT3B0aW9uYWwgZmlsdGVyaW5nIGZ1bmN0aW9uIGZvciByb3V0ZXMgYW5kIHN0b3BzXG4gKiAgICBoYW5kZWxWaWFQb2ludHM9eygpID0+IHJldHVybiBudWxsIH0gLy8gT3B0aW9uYWwgVmlhIHBvaW50IGhhbmRsaW5nIGxvZ2ljLiBUaGlzIGlzIGN1cnJlbnRseSBtYW5hZ2VkIHdpdGggRFRBdXRvc3VnZ2VzdHBhbmVsIGJ5IGRlZmF1bHQsIGJ1dCBpZiBEVEF1dG9zdWdnZXN0IGlzIHVzZWQgc2VwZXJhdGVsbHkgb3duIGltcGxlbWVudGF0aW9uIG11c3QgYmUgcHJvdmlkZWQuXG4gKiAgICBmb2N1c0NoYW5nZT17KCkgPT4gcmV0dXJuIG51bGx9IC8vIFdoZW4gc3VnZ2VzdGlvbiBpcyBzZWxlY3RlZCwgaGFuZGxlIGNoYW5naW5nIGZvY3VzLiBUaGlzIGlzIGN1cnJlbnRseSBtYW5hZ2VkIHdpdGggRFRBdXRvc3VnZ2VzdHBhbmVsIGJ5IGRlZmF1bHQsIGJ1dCBpZiBEVEF1dG9zdWdnZXN0IGlzIHVzZWQgc2VwZXJhdGVsbHkgb3duIGltcGxlbWVudGF0aW9uIG11c3QgYmUgcHJvdmlkZWQuXG4gKiAgICBzdG9yZVJlZj17KCkgPT4gcmV0dXJuIG51bGx9IC8vIEZ1bmN0aW9uYWxpdHkgdG8gc3RvcmUgcmVmcy4gQ3VycmVubHR5IG1hbmFnZWQgd2l0aCBEVEF1dG9zdWdnZXN0cGFuZWwgYnkgZGVmYXVsdCwgYnV0IGlmIERUQXV0b3N1Z2dlc3QgaXMgdXNlZCBzZXBlcmF0ZWxseSBvd24gaW1wbGVtZW50YXRpb24gbXVzdCBiZSBwcm92aWRlZC5cbiAqICAgIHNvdXJjZXM9e3NvdXJjZXN9XG4gKiAgICB0YXJnZXRzPXt0YXJnZXRzfVxuICogICAgaXNNb2JpbGUgIC8vIE9wdGlvbmFsLiBEZWZhdWx0cyB0byBmYWxzZS4gV2hldGhlciB0byB1c2UgbW9iaWxlIHNlYXJjaC5cbiAqICAgIG1vYmlsZUxhYmVsPVwiQ3VzdG9tIGxhYmVsXCIgLy8gT3B0aW9uYWwuIEN1c3RvbSBsYWJlbCB0ZXh0IGZvciBhdXRvc3VnZ2VzdCBmaWVsZCBvbiBtb2JpbGUuXG4gKiAgICBpbnB1dENsYXNzTmFtZT1cIlwiIC8vIE9wdGlvbmFsLiBDdXN0b20gY2xhc3NuYW1lIGFwcGxpZWQgdG8gdGhlIGlucHV0IGVsZW1lbnQgb2YgdGhlIGNvbXBvbmVudCBmb3IgcHJvdmlkaW5nIENTUyBzdHlsZXMuXG4gKiAgICB0cmFuc2xhdGVkUGxhY2Vob2xkZXI9IC8vIE9wdGlvbmFsLiBDdXN0b24gdHJhbnNsYXRlZCBwbGFjZWhvbGRlciB0ZXh0IGZvciBhdXRvc3VnZ2VzdCBmaWVsZC5cbiAqXG4gKiBAdHlwZWRlZiBEVEF1dG9zdWdnZXN0UHJvcHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhcHBFbGVtZW50XG4gKiBAcHJvcGVydHkge3N0cmluZ30gaWRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwbGFjZWhvbGRlclxuICogQHByb3BlcnR5IHtmdW5jdGlvbn0gb25TZWxlY3RcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbaWNvbl1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbdmFsdWVdXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9ufSBbb25DbGVhcl1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbGFuZ11cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbZ2V0QXV0b1N1Z2dlc3RJY29uc11cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IFtoYW5kbGVWaWFQb2ludHNdXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9ufSBbZm9jdXNDaGFuZ2VdXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9ufSBbc3RvcmVSZWZdXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtpc01vYmlsZV1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbW9iaWxlTGFiZWxdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2lucHV0Q2xhc3NOYW1lXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFt0cmFuc2xhdGVkUGxhY2Vob2xkZXJdXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtyZXF1aXJlZF1cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbZm9udFdlaWdodHNdXG4gKiBAcHJvcGVydHkge09iamVjdH0gW2NvbG9yc11cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbW9kZVNldF1cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3Nob3dTY3JvbGxdXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtpc0VtYmVkZGVkXVxuICogR2VvY29kaW5nIHJlbGF0ZWQgcHJvcHNcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBzZWFyY2hDb250ZXh0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3RyYW5zcG9ydE1vZGVdXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbdGFyZ2V0c11cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFtzb3VyY2VzXVxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtnZW9jb2RpbmdTaXplXVxuICogQHByb3BlcnR5IHtmdW5jdGlvbn0gW2ZpbHRlclJlc3VsdHNdXG4gKiBAcHJvcGVydHkge09iamVjdH0gW3BhdGhPcHRzXVxuICogQHByb3BlcnR5IHtPYmplY3R9IFtyZWZQb2ludF1cbiAqIEBwYXJhbSB7RFRBdXRvc3VnZ2VzdFByb3BzfSBwcm9wc1xuICogQHJldHVybnMge0pTWC5FbGVtZW50fVxuICovXG5mdW5jdGlvbiBEVEF1dG9zdWdnZXN0KHtcbiAgYXBwRWxlbWVudCxcbiAgaWQsXG4gIHBsYWNlaG9sZGVyLFxuICBvblNlbGVjdCxcbiAgaWNvbixcbiAgdmFsdWUsXG4gIG9uQ2xlYXIsXG4gIGxhbmc6IGxuZyxcbiAgZ2V0QXV0b1N1Z2dlc3RJY29ucyxcbiAgaGFuZGxlVmlhUG9pbnRzLFxuICBmb2N1c0NoYW5nZSxcbiAgc3RvcmVSZWYsXG4gIGlzTW9iaWxlLFxuICBtb2JpbGVMYWJlbCxcbiAgaW5wdXRDbGFzc05hbWUsXG4gIHRyYW5zbGF0ZWRQbGFjZWhvbGRlcixcbiAgcmVxdWlyZWQsXG4gIGFyaWFMYWJlbCxcbiAgZm9udFdlaWdodHMsXG4gIGNvbG9ycyxcbiAgbW9kZVNldCxcbiAgc2hvd1Njcm9sbCxcbiAgaXNFbWJlZGRlZCxcbiAgdHJhbnNwb3J0TW9kZSxcbiAgdGFyZ2V0cyxcbiAgc291cmNlcyxcbiAgZ2VvY29kaW5nU2l6ZSxcbiAgZmlsdGVyUmVzdWx0cyxcbiAgc2VhcmNoQ29udGV4dCxcbiAgcGF0aE9wdHMsXG4gIHJlZlBvaW50LFxufSkge1xuICBjb25zdCBbdF0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICBjb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gICAgc3VnZ2VzdGlvbnM6IFtdLFxuICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgIHNvdXJjZXMsXG4gICAgc2hvd093blBsYWNlczogZmFsc2UsXG4gICAgcGVuZGluZ1NlbGVjdGlvbjogbnVsbCxcbiAgICBpc0NsZWFyZWQ6IGZhbHNlLFxuICAgIHJlbmRlck1vYmlsZTogZmFsc2UsXG4gICAgdmFsdWUsXG4gICAgZW50ZXJQZW5kaW5nOiBmYWxzZSxcbiAgICBpc01lbnVPcGVuOiBmYWxzZSxcbiAgfTtcbiAgY29uc3QgW3N0YXRlLCBkaXNwYXRjaF0gPSB1c2VSZWR1Y2VyKHNlYXJjaFJlZHVjZXIsIGluaXRpYWxTdGF0ZSk7XG4gIC8vIFJlc2V0IHRoZSBzdGF0ZSB3aGVuIHZhbHVlIHByb3AgY2hhbmdlc1xuICB1c2VFZmZlY3QoKCkgPT4gZGlzcGF0Y2goeyB0eXBlOiAnUkVTRVQnLCBpbml0aWFsU3RhdGUgfSksIFt2YWx1ZV0pO1xuICAvLyBjcmVhdGUgYW5kIHN0b3JlIGlucHV0IHJlZiBpbiB0aGUgcGFyZW50IGlmIHN0b3JlUmVmIGlzIHByb3ZpZGVkXG4gIGNvbnN0IGlucHV0UmVmID0gdXNlUmVmKGlkKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoc3RvcmVSZWYpIHtcbiAgICAgIHN0b3JlUmVmKGlucHV0UmVmLmN1cnJlbnQpO1xuICAgIH1cbiAgfSwgW2lucHV0UmVmLmN1cnJlbnRdKTtcblxuICBjb25zdCBmZXRjaFN1Z2dlc3Rpb25zID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IHVzZUFsbCA9ICF0YXJnZXRzPy5sZW5ndGg7XG4gICAgY29uc3QgaXNMb2NhdGlvblNlYXJjaCA9IHVzZUFsbCB8fCB0YXJnZXRzLmluY2x1ZGVzKCdMb2NhdGlvbnMnKTtcblxuICAgIGNvbnN0IG5ld1RhcmdldHMgPSBnZXROZXdUYXJnZXRzKHtcbiAgICAgIHRhcmdldHMsXG4gICAgICBpc0xvY2F0aW9uU2VhcmNoLFxuICAgICAgaXNNb2JpbGUsXG4gICAgICBvd25QbGFjZXM6IHN0YXRlLnNob3dPd25QbGFjZXMsXG4gICAgICBzb3VyY2VzOiBzdGF0ZS5zb3VyY2VzLFxuICAgIH0pO1xuICAgIC8vIHJlbW92ZSAgbG9jYXRpb24gZmF2b3VyaXRlcyBpbiBkZXNrdG9wIHNlYXJjaCAoY29sbGVjdGlvbiBpdGVtIHJlcGxhY2VzIGl0IGluIHRhcmdldCBhcnJheSlcbiAgICBjb25zdCBuZXdTb3VyY2VzID0gc3RhdGUuc291cmNlc1xuICAgICAgPyBzdGF0ZS5zb3VyY2VzLmZpbHRlcihcbiAgICAgICAgICBzID0+XG4gICAgICAgICAgICAhaXNMb2NhdGlvblNlYXJjaCB8fFxuICAgICAgICAgICAgIXMgPT09ICdGYXZvdXJpdGUnIHx8XG4gICAgICAgICAgICBzdGF0ZS5zaG93T3duUGxhY2VzIHx8XG4gICAgICAgICAgICBpc01vYmlsZSxcbiAgICAgICAgKVxuICAgICAgOiBzdGF0ZS5zb3VyY2VzO1xuICAgIGV4ZWN1dGVTZWFyY2goXG4gICAgICBuZXdUYXJnZXRzLFxuICAgICAgbmV3U291cmNlcyxcbiAgICAgIHRyYW5zcG9ydE1vZGUsXG4gICAgICBzZWFyY2hDb250ZXh0LFxuICAgICAgZmlsdGVyUmVzdWx0cyxcbiAgICAgIGdlb2NvZGluZ1NpemUsXG4gICAgICB7XG4gICAgICAgIGlucHV0OiBzdGF0ZS52YWx1ZSB8fCAnJyxcbiAgICAgIH0sXG4gICAgICBzZWFyY2hSZXN1bHQgPT4ge1xuICAgICAgICBpZiAoc2VhcmNoUmVzdWx0ID09IG51bGwpIHtcbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAnRkVUQ0hfU1VHR0VTVElPTlMnLFxuICAgICAgICAgICAgbG9hZGluZzogdHJ1ZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXdTdWdnZXN0aW9ucyA9IChzZWFyY2hSZXN1bHQucmVzdWx0cyB8fCBbXSlcbiAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgc3VnZ2VzdGlvbiA9PlxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLnR5cGUgIT09ICdGdXR1cmVSb3V0ZScgfHxcbiAgICAgICAgICAgICAgKHN1Z2dlc3Rpb24udHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJyAmJlxuICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24ucHJvcGVydGllcy50aW1lID4gRGF0ZS5ub3coKSAvIDEwMDApLFxuICAgICAgICAgIClcbiAgICAgICAgICAubWFwKHN1Z2dlc3Rpb24gPT4ge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLnR5cGUgPT09ICdDdXJyZW50TG9jYXRpb24nIHx8XG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24udHlwZSA9PT0gJ1NlbGVjdEZyb21NYXAnIHx8XG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24udHlwZSA9PT0gJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnIHx8XG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24udHlwZSA9PT0gJ2JhY2snXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgY29uc3QgdHJhbnNsYXRlZFN1Z2dlc3Rpb24gPSB7IC4uLnN1Z2dlc3Rpb24gfTtcbiAgICAgICAgICAgICAgdHJhbnNsYXRlZFN1Z2dlc3Rpb24ucHJvcGVydGllcy5sYWJlbElkID0gdChcbiAgICAgICAgICAgICAgICBzdWdnZXN0aW9uLnByb3BlcnRpZXMubGFiZWxJZCxcbiAgICAgICAgICAgICAgICB7IGxuZyB9LFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICByZXR1cm4gdHJhbnNsYXRlZFN1Z2dlc3Rpb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc3VnZ2VzdGlvbjtcbiAgICAgICAgICB9KTtcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6ICdGRVRDSF9TVUdHRVNUSU9OUycsXG4gICAgICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgc3VnZ2VzdGlvbnM6IG5ld1N1Z2dlc3Rpb25zLFxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBwYXRoT3B0cyxcbiAgICAgIHJlZlBvaW50LFxuICAgICk7XG4gIH0sIFtcbiAgICBzdGF0ZS52YWx1ZSxcbiAgICBzdGF0ZS5zb3VyY2VzLFxuICAgIHN0YXRlLnNob3dPd25QbGFjZXMsXG4gICAgdGFyZ2V0cyxcbiAgICB0cmFuc3BvcnRNb2RlLFxuICAgIHNlYXJjaENvbnRleHQsXG4gICAgZmlsdGVyUmVzdWx0cyxcbiAgICBnZW9jb2RpbmdTaXplLFxuICAgIGlzTW9iaWxlLFxuICAgIGxuZyxcbiAgICBwYXRoT3B0cyxcbiAgICByZWZQb2ludCxcbiAgICBpZCxcbiAgXSk7XG5cbiAgY29uc3Qgc2VsZWN0U3VnZ2VzdGlvbiA9IHVzZUNhbGxiYWNrKFxuICAgIChzdWdnZXN0aW9uLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKCFzdWdnZXN0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChoYW5kbGVWaWFQb2ludHMpIHtcbiAgICAgICAgaGFuZGxlVmlhUG9pbnRzKHN1Z2dlc3Rpb24sIGluZGV4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9uU2VsZWN0KHN1Z2dlc3Rpb24sIGlkKTtcbiAgICAgIH1cbiAgICAgIGlmIChmb2N1c0NoYW5nZSAmJiAoIWlzTW9iaWxlIHx8IGlzRW1iZWRkZWQpKSB7XG4gICAgICAgIGZvY3VzQ2hhbmdlKCk7XG4gICAgICB9XG4gICAgICBpZiAoaW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgICBpbnB1dFJlZi5jdXJyZW50LmJsdXIoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtpc01vYmlsZV0sXG4gICk7XG5cbiAgY29uc3Qgb25TZWxlY3RlZEl0ZW1DaGFuZ2UgPSBjaGFuZ2VzID0+XG4gICAgc2VsZWN0U3VnZ2VzdGlvbihjaGFuZ2VzLnNlbGVjdGVkSXRlbSwgY2hhbmdlcy5oaWdobGlnaHRlZEluZGV4KTtcblxuICBjb25zdCB7XG4gICAgaXNPcGVuLFxuICAgIGhpZ2hsaWdodGVkSW5kZXgsXG4gICAgZ2V0TGFiZWxQcm9wcyxcbiAgICBnZXRNZW51UHJvcHMsXG4gICAgZ2V0SW5wdXRQcm9wcyxcbiAgICBnZXRJdGVtUHJvcHMsXG4gICAgc2VsZWN0SXRlbSxcbiAgICBvcGVuTWVudSxcbiAgICBjbG9zZU1lbnUsXG4gIH0gPSB1c2VDb21ib2JveCh7XG4gICAgaW5wdXRJZDogaWQsXG4gICAgaW5wdXRWYWx1ZTogc3RhdGUudmFsdWUsXG4gICAgZGVmYXVsdEhpZ2hsaWdodGVkSW5kZXg6IDAsXG4gICAgb25JbnB1dFZhbHVlQ2hhbmdlOiAoeyBpbnB1dFZhbHVlIH0pID0+XG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdJTlBVVF9DSEFOR0UnLCB2YWx1ZTogaW5wdXRWYWx1ZSB9KSxcbiAgICBzdGF0ZVJlZHVjZXI6IHVzZUNhbGxiYWNrKFxuICAgICAgKG9sZFN0YXRlLCB7IHR5cGUsIGNoYW5nZXMgfSkgPT4ge1xuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICBjYXNlIHVzZUNvbWJvYm94LnN0YXRlQ2hhbmdlVHlwZXMuSXRlbUNsaWNrOlxuICAgICAgICAgIGNhc2UgdXNlQ29tYm9ib3guc3RhdGVDaGFuZ2VUeXBlcy5JbnB1dEtleURvd25FbnRlcjoge1xuICAgICAgICAgICAgLy8gc2V0Q2xlYXJlZChmYWxzZSk7XG4gICAgICAgICAgICAvLyBrZWVwIGVudGVyUHJlc3NlZFJlZiB0byBtYWtlIHNlbGVjdGlvbiB3aGVuIHN1Z2dlc3Rpb25zIGhhdmUgbG9hZGVkXG4gICAgICAgICAgICBpZiAoc3RhdGUubG9hZGluZykge1xuICAgICAgICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdQRU5ESU5HX0VOVEVSJywgZW50ZXJQZW5kaW5nOiB0cnVlIH0pO1xuICAgICAgICAgICAgICByZXR1cm4gb2xkU3RhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWNoYW5nZXMuc2VsZWN0ZWRJdGVtKSB7XG4gICAgICAgICAgICAgIHJldHVybiBjaGFuZ2VzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNoYW5nZXMuc2VsZWN0ZWRJdGVtLnR5cGUgPT09ICdTZWxlY3RGcm9tT3duTG9jYXRpb25zJykge1xuICAgICAgICAgICAgICAvLyBpZiBzZWxlY3RpbmcgZnJvbSBvd24gbG9jYXRpb25zLCBrZWVwIG1lbnUgb3BlbiBhbmQga2VlcCBvbGQgc3RhdGVcbiAgICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgIHR5cGU6ICdTRVRfU09VUkNFUycsXG4gICAgICAgICAgICAgICAgc291cmNlczogWydGYXZvdXJpdGUnLCAnQmFjayddLFxuICAgICAgICAgICAgICAgIHNob3dPd25QbGFjZXM6IHRydWUsXG4gICAgICAgICAgICAgICAgcGVuZGluZ1NlbGVjdGlvbjogY2hhbmdlcy5zZWxlY3RlZEl0ZW0udHlwZSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHJldHVybiBvbGRTdGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjaGFuZ2VzLnNlbGVjdGVkSXRlbS50eXBlID09PSAnYmFjaycpIHtcbiAgICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgIHR5cGU6ICdTRVRfU09VUkNFUycsXG4gICAgICAgICAgICAgICAgc291cmNlcyxcbiAgICAgICAgICAgICAgICBzaG93T3duUGxhY2VzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBwZW5kaW5nU2VsZWN0aW9uOiBudWxsLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcmV0dXJuIG9sZFN0YXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNoYW5nZXM7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgdXNlQ29tYm9ib3guc3RhdGVDaGFuZ2VUeXBlcy5JbnB1dENsaWNrOiB7XG4gICAgICAgICAgICAvLyBjbGVhciBpbnB1dCBpZiBjdXJyZW50IHBvc2l0aW9uIG9yIHNlbGVjdGVkIGxvY2F0aW9uIGlzIHNob3duXG4gICAgICAgICAgICBpZiAocG9zaXRpb25zLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgICAgICAgICByZXR1cm4geyAuLi5jaGFuZ2VzLCBpbnB1dFZhbHVlOiAnJywgaXNPcGVuOiB0cnVlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5jaGFuZ2VzLFxuICAgICAgICAgICAgICBpc09wZW46IHRydWUsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIHVzZUNvbWJvYm94LnN0YXRlQ2hhbmdlVHlwZXMuSW5wdXRCbHVyOiB7XG4gICAgICAgICAgICBpZiAoY2hhbmdlcy5zZWxlY3RlZEl0ZW0pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5jaGFuZ2VzLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkSXRlbTogb2xkU3RhdGUuc2VsZWN0SXRlbSxcbiAgICAgICAgICAgICAgICBpbnB1dFZhbHVlOiBvbGRTdGF0ZS5pbnB1dFZhbHVlLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNoYW5nZXM7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgdXNlQ29tYm9ib3guc3RhdGVDaGFuZ2VUeXBlcy5JbnB1dEtleURvd25Fc2NhcGU6IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLmNoYW5nZXMsXG4gICAgICAgICAgICAgIGlucHV0VmFsdWU6ICcnLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgcmV0dXJuIGNoYW5nZXM7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgW3N0YXRlLmxvYWRpbmcsIHZhbHVlLCBpc01vYmlsZV0sXG4gICAgKSxcbiAgICBpdGVtczogc3RhdGUuc3VnZ2VzdGlvbnMsXG4gICAgaXRlbVRvU3RyaW5nKHN1Z2dlc3Rpb24pIHtcbiAgICAgIHJldHVybiBzdWdnZXN0aW9uID8gZ2V0U3VnZ2VzdGlvblZhbHVlKHN1Z2dlc3Rpb24pIDogJyc7XG4gICAgfSxcbiAgICBvblNlbGVjdGVkSXRlbUNoYW5nZSxcbiAgICBvbklzT3BlbkNoYW5nZTogY2hhbmdlcyA9PiB7XG4gICAgICBpZiAoY2hhbmdlcy5pc09wZW4gJiYgIXN0YXRlLnJlbmRlck1vYmlsZSkge1xuICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdUT0dHTEVfTUVOVScsIGlzTW9iaWxlIH0pO1xuICAgICAgfVxuICAgIH0sXG4gIH0pO1xuICBjb25zdCBpbnB1dE9uQmx1ciA9ICgpID0+IHtcbiAgICBkaXNwYXRjaCh7XG4gICAgICBpc01vYmlsZSxcbiAgICAgIHZhbHVlOiAhaXNNb2JpbGUgJiYgdmFsdWUsXG4gICAgICB0eXBlOiAnSU5QVVRfQkxVUicsXG4gICAgfSk7XG4gICAgaWYgKCFpc01vYmlsZSkge1xuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiAnUkVTRVQnLFxuICAgICAgICBpbml0aWFsU3RhdGUsXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgY2xlYXJJbnB1dCA9IHJlZiA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnQ0xFQVInIH0pO1xuICAgIGlmIChvbkNsZWFyKSB7XG4gICAgICBvbkNsZWFyKGlkKTtcbiAgICB9XG4gICAgaWYgKHJlZi5jdXJyZW50KSB7XG4gICAgICByZWYuY3VycmVudC5mb2N1cygpO1xuICAgIH1cbiAgICBvcGVuTWVudSgpO1xuICB9O1xuXG4gIC8vIEZldGNoIHN1Z2dlc3Rpb25zIHdoZW4gaXNPcGVuLCB2YWx1ZSwgb3IgZmV0Y2hTdWdnZXN0aW9ucyBkZXBlbmRpZXMgY2hhbmdlXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzT3BlbiB8fCBzdGF0ZS5yZW5kZXJNb2JpbGUpIHtcbiAgICAgIGZldGNoU3VnZ2VzdGlvbnMoc3RhdGUudmFsdWUpO1xuICAgIH1cbiAgfSwgW2lzT3Blbiwgc3RhdGUucmVuZGVyTW9iaWxlLCBzdGF0ZS52YWx1ZSwgZmV0Y2hTdWdnZXN0aW9uc10pO1xuXG4gIC8vIHRoaXMgZWZmZWN0IGhhbmRsZXMgc2VsZWN0aW5nIHRoZSBzdWdnZXN0aW9uIHdoZW4gZW50ZXIgd2FzIHByZXNzZWQgYnV0IHN1Z2dlc3Rpb25zIHdlcmUgc3RpbGwgbG9hZGluZ1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzdGF0ZS5lbnRlclBlbmRpbmcgJiYgIXN0YXRlLmxvYWRpbmcpIHtcbiAgICAgIHNlbGVjdFN1Z2dlc3Rpb24oc3RhdGUuc3VnZ2VzdGlvbnNbMF0sIDApO1xuICAgICAgY2xvc2VNZW51KCk7XG4gICAgfVxuICB9LCBbc3RhdGUubG9hZGluZywgc3RhdGUucGVuZGluZ0VudGVyLCBzdGF0ZS5zdWdnZXN0aW9uc10pO1xuXG4gIGNvbnN0IGJhc2VJdGVtUHJvcHMgPSB7XG4gICAgbG9hZGluZzogc3RhdGUubG9hZGluZyxcbiAgICBpc01vYmlsZSxcbiAgICBhcmlhRmF2b3VyaXRlU3RyaW5nOiB0KCdmYXZvdXJpdGUnLCB7IGxuZyB9KSxcbiAgICBmb250V2VpZ2h0cyxcbiAgICBnZXRBdXRvU3VnZ2VzdEljb25zLFxuICAgIGNvbG9ycyxcbiAgICBtb2RlU2V0LFxuICB9O1xuXG4gIGNvbnN0IHtcbiAgICBhcmlhQ3VycmVudFN1Z2dlc3Rpb24sXG4gICAgYXJpYVJlcXVpcmVkVGV4dCxcbiAgICBTZWFyY2hCYXJJZCxcbiAgICBhcmlhTGFiZWxUZXh0LFxuICB9ID0gZ2V0QXJpYVByb3BzKHtcbiAgICBpZCxcbiAgICBsbmcsXG4gICAgdCxcbiAgICBpc01vYmlsZSxcbiAgICBhcmlhTGFiZWwsXG4gICAgc3VnZ2VzdGlvbnM6IHN0YXRlLnN1Z2dlc3Rpb25zLFxuICAgIHZhbHVlOiBzdGF0ZS52YWx1ZSxcbiAgICByZXF1aXJlZCxcbiAgfSk7XG5cbiAgY29uc3QgbW9iaWxlQ2xlYXJPbGRTZWFyY2hlcyA9ICgpID0+IHtcbiAgICBjb25zdCB7IGNvbnRleHQsIGNsZWFyT2xkU2VhcmNoZXMsIGNsZWFyRnV0dXJlUm91dGVzIH0gPSBzZWFyY2hDb250ZXh0O1xuICAgIGlmIChjb250ZXh0ICYmIGNsZWFyT2xkU2VhcmNoZXMpIHtcbiAgICAgIGNsZWFyT2xkU2VhcmNoZXMoY29udGV4dCk7XG4gICAgICBpZiAoY2xlYXJGdXR1cmVSb3V0ZXMpIHtcbiAgICAgICAgY2xlYXJGdXR1cmVSb3V0ZXMoY29udGV4dCk7XG4gICAgICB9XG4gICAgICBmZXRjaFN1Z2dlc3Rpb25zKHN0YXRlLnZhbHVlKTtcbiAgICB9XG4gIH07XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIXN0YXRlLnJlbmRlck1vYmlsZSAmJiAhaXNPcGVuKSB7XG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdSRVNFVCcsIGluaXRpYWxTdGF0ZSB9KTtcbiAgICB9XG4gIH0sIFtzdGF0ZS5yZW5kZXJNb2JpbGUsIGlzT3Blbl0pO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHtpc01vYmlsZSAmJiAoXG4gICAgICAgIDxNb2JpbGVWaWV3XG4gICAgICAgICAgcGxhY2Vob2xkZXI9e3QocGxhY2Vob2xkZXIsIHsgbG5nIH0pfVxuICAgICAgICAgIGZvbnRXZWlnaHRzPXtmb250V2VpZ2h0c31cbiAgICAgICAgICBjbGVhck9sZFNlYXJjaGVzPXttb2JpbGVDbGVhck9sZFNlYXJjaGVzfVxuICAgICAgICAgIGFwcEVsZW1lbnQ9e2FwcEVsZW1lbnR9XG4gICAgICAgICAgbW9iaWxlTGFiZWw9e21vYmlsZUxhYmVsIHx8IHQoaWQsIHsgbG5nIH0pfVxuICAgICAgICAgIGFyaWFQcm9wcz17e1xuICAgICAgICAgICAgYXJpYUN1cnJlbnRTdWdnZXN0aW9uLFxuICAgICAgICAgICAgU2VhcmNoQmFySWQsXG4gICAgICAgICAgICBhcmlhUmVxdWlyZWRUZXh0LFxuICAgICAgICAgIH19XG4gICAgICAgICAgaWQ9e2lkfVxuICAgICAgICAgIGxuZz17bG5nfVxuICAgICAgICAgIG9uU2VsZWN0ZWRJdGVtQ2hhbmdlPXtvblNlbGVjdGVkSXRlbUNoYW5nZX1cbiAgICAgICAgICB2YWx1ZT17c3RhdGUudmFsdWV9XG4gICAgICAgICAgY2xlYXJJbnB1dD17Y2xlYXJJbnB1dH1cbiAgICAgICAgICBzdWdnZXN0aW9uUHJvcHM9e2Jhc2VJdGVtUHJvcHN9XG4gICAgICAgICAgc2hvd1Njcm9sbD17ISFzaG93U2Nyb2xsfVxuICAgICAgICAgIGNvbG9ycz17Y29sb3JzfVxuICAgICAgICAgIGlucHV0Q2xhc3NOYW1lPXtpbnB1dENsYXNzTmFtZX1cbiAgICAgICAgICByZXF1aXJlZD17cmVxdWlyZWR9XG4gICAgICAgICAgc3RhdGU9e3N0YXRlfVxuICAgICAgICAgIGRpc3BhdGNoPXtkaXNwYXRjaH1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjeChbXG4gICAgICAgICAgc3R5bGVzWydhdXRvc3VnZ2VzdC1pbnB1dC1jb250YWluZXInXSxcbiAgICAgICAgICBzdHlsZXNbaWRdLFxuICAgICAgICAgIHN0YXRlLnJlbmRlck1vYmlsZSAmJiAnaGlkZGVuJyxcbiAgICAgICAgXSl9XG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgJy0tY29sb3InOiBjb2xvcnMucHJpbWFyeSxcbiAgICAgICAgICAnLS1ob3Zlci1jb2xvcic6IGNvbG9ycy5ob3ZlcixcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge2ljb24gJiYgKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y3goW1xuICAgICAgICAgICAgICBzdHlsZXNbJ2F1dG9zdWdnZXN0LWlucHV0LWljb24nXSxcbiAgICAgICAgICAgICAgc3R5bGVzW2lkXSxcbiAgICAgICAgICAgICAgaW5wdXRDbGFzc05hbWUgJiYgc3R5bGVzW2Ake2lucHV0Q2xhc3NOYW1lfS1pbnB1dC1pY29uYF0sXG4gICAgICAgICAgICBdKX1cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9e2FyaWFSZXF1aXJlZFRleHRcbiAgICAgICAgICAgICAgLmNvbmNhdCgnICcpXG4gICAgICAgICAgICAgIC5jb25jYXQoU2VhcmNoQmFySWQpXG4gICAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgICAuY29uY2F0KHQoJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbCcsIHsgbG5nIH0pKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8SWNvbiBpbWc9e2Ake2ljb259YH0gLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgICAgPElucHV0XG4gICAgICAgICAgaW5wdXRDbGFzc05hbWU9e2lucHV0Q2xhc3NOYW1lfVxuICAgICAgICAgIGFyaWFMYWJlbD17YXJpYUN1cnJlbnRTdWdnZXN0aW9uXG4gICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgIC5jb25jYXQoYXJpYVJlcXVpcmVkVGV4dClcbiAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgLmNvbmNhdChTZWFyY2hCYXJJZClcbiAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgLmNvbmNhdChhcmlhTGFiZWxUZXh0KX1cbiAgICAgICAgICBpZD17aWR9XG4gICAgICAgICAgbG5nPXtsbmd9XG4gICAgICAgICAgZ2V0SW5wdXRQcm9wcz17Z2V0SW5wdXRQcm9wc31cbiAgICAgICAgICBnZXRMYWJlbFByb3BzPXtnZXRMYWJlbFByb3BzfVxuICAgICAgICAgIHNlbGVjdEl0ZW09e3NlbGVjdEl0ZW19XG4gICAgICAgICAgdmFsdWU9e3N0YXRlLnZhbHVlfVxuICAgICAgICAgIGNsZWFySW5wdXQ9e2NsZWFySW5wdXR9XG4gICAgICAgICAgaW5wdXRSZWY9e2lucHV0UmVmfVxuICAgICAgICAgIHN0eWxlcz17c3R5bGVzfVxuICAgICAgICAgIGNsZWFyQnV0dG9uQ29sb3I9e2NvbG9ycy5wcmltYXJ5fVxuICAgICAgICAgIHBsYWNlaG9sZGVyPXt0cmFuc2xhdGVkUGxhY2Vob2xkZXIgfHwgdChwbGFjZWhvbGRlciwgeyBsbmcgfSl9XG4gICAgICAgICAgcmVxdWlyZWQ9e3JlcXVpcmVkfVxuICAgICAgICAgIHRyYW5zcG9ydE1vZGU9e3RyYW5zcG9ydE1vZGV9XG4gICAgICAgICAgaXNNb2JpbGU9e2lzTW9iaWxlfVxuICAgICAgICAgIGlucHV0T25CbHVyPXtpbnB1dE9uQmx1cn1cbiAgICAgICAgLz5cblxuICAgICAgICA8U3VnZ2VzdGlvbnNcbiAgICAgICAgICBoaWRkZW49eyFpc09wZW4gfHwgaXNNb2JpbGV9XG4gICAgICAgICAgaGlnaGxpZ2h0ZWRJbmRleD17aGlnaGxpZ2h0ZWRJbmRleH1cbiAgICAgICAgICBnZXRJdGVtUHJvcHM9e2dldEl0ZW1Qcm9wc31cbiAgICAgICAgICBnZXRNZW51UHJvcHM9e2dldE1lbnVQcm9wc31cbiAgICAgICAgICBzdWdnZXN0aW9ucz17c3RhdGUuc3VnZ2VzdGlvbnN9XG4gICAgICAgICAgbG5nPXtsbmd9XG4gICAgICAgICAgc3R5bGVzPXtzdHlsZXN9XG4gICAgICAgICAgey4uLmJhc2VJdGVtUHJvcHN9XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICA8Lz5cbiAgKTtcbn1cblxuRFRBdXRvc3VnZ2VzdC5wcm9wVHlwZXMgPSB7XG4gIGFwcEVsZW1lbnQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgaWNvbjogUHJvcFR5cGVzLnN0cmluZyxcbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgdHJhbnNsYXRlZFBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB2YWx1ZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgdHJhbnNwb3J0TW9kZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgZ2VvY29kaW5nU2l6ZTogUHJvcFR5cGVzLm51bWJlcixcbiAgZmlsdGVyUmVzdWx0czogUHJvcFR5cGVzLmZ1bmMsXG4gIHNlYXJjaENvbnRleHQ6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgVVJMX1BFTElBUzogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICBjb250ZXh0OiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGNsZWFyT2xkU2VhcmNoZXM6IFByb3BUeXBlcy5mdW5jLFxuICAgIGNsZWFyRnV0dXJlUm91dGVzOiBQcm9wVHlwZXMuZnVuYyxcbiAgfSkuaXNSZXF1aXJlZCxcbiAgc291cmNlczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZyksXG4gIHRhcmdldHM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zdHJpbmcpLFxuICBhcmlhTGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gIG9uU2VsZWN0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBvbkNsZWFyOiBQcm9wVHlwZXMuZnVuYyxcbiAgc3RvcmVSZWY6IFByb3BUeXBlcy5mdW5jLFxuICBoYW5kbGVWaWFQb2ludHM6IFByb3BUeXBlcy5mdW5jLFxuICBmb2N1c0NoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIGxhbmc6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGlzTW9iaWxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgcGF0aE9wdHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgcm91dGVzUHJlZml4OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHN0b3BzUHJlZml4OiBQcm9wVHlwZXMuc3RyaW5nLFxuICB9KSxcbiAgbW9iaWxlTGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHJlZlBvaW50OiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGFkZHJlc3M6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgbGF0OiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIGxvbjogUHJvcFR5cGVzLm51bWJlcixcbiAgfSksXG4gIGlucHV0Q2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBmb250V2VpZ2h0czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBtZWRpdW06IFByb3BUeXBlcy5udW1iZXIsXG4gIH0pLFxuICBjb2xvcnM6IFByb3BUeXBlcy5vYmplY3RPZihQcm9wVHlwZXMuc3RyaW5nKSxcbiAgZ2V0QXV0b1N1Z2dlc3RJY29uczogUHJvcFR5cGVzLm9iamVjdE9mKFByb3BUeXBlcy5mdW5jKSxcbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuICBtb2RlU2V0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaG93U2Nyb2xsOiBQcm9wVHlwZXMuYm9vbCxcbiAgaXNFbWJlZGRlZDogUHJvcFR5cGVzLmJvb2wsXG59O1xuXG5EVEF1dG9zdWdnZXN0LmRlZmF1bHRQcm9wcyA9IHtcbiAgaWNvbjogdW5kZWZpbmVkLFxuICB2YWx1ZTogJycsXG4gIHRyYW5zcG9ydE1vZGU6IHVuZGVmaW5lZCxcbiAgZmlsdGVyUmVzdWx0czogdW5kZWZpbmVkLFxuICBvbkNsZWFyOiB1bmRlZmluZWQsXG4gIGxhbmc6ICdmaScsXG4gIHN0b3JlUmVmOiB1bmRlZmluZWQsXG4gIGhhbmRsZVZpYVBvaW50czogdW5kZWZpbmVkLFxuICBmb2N1c0NoYW5nZTogdW5kZWZpbmVkLFxuICBnZXRBdXRvU3VnZ2VzdEljb25zOiB1bmRlZmluZWQsXG4gIHNvdXJjZXM6IFtdLFxuICB0YXJnZXRzOiB1bmRlZmluZWQsXG4gIGlzTW9iaWxlOiBmYWxzZSxcbiAgaXNFbWJlZGRlZDogZmFsc2UsXG4gIGdlb2NvZGluZ1NpemU6IHVuZGVmaW5lZCxcbiAgcGF0aE9wdHM6IHtcbiAgICByb3V0ZXNQcmVmaXg6ICdsaW5qYXQnLFxuICAgIHN0b3BzUHJlZml4OiAncHlzYWtpdCcsXG4gIH0sXG4gIGFyaWFMYWJlbDogdW5kZWZpbmVkLFxuICBtb2JpbGVMYWJlbDogdW5kZWZpbmVkLFxuICBpbnB1dENsYXNzTmFtZTogJycsXG4gIHRyYW5zbGF0ZWRQbGFjZWhvbGRlcjogdW5kZWZpbmVkLFxuICBmb250V2VpZ2h0czoge1xuICAgIG1lZGl1bTogNTAwLFxuICB9LFxuICBjb2xvcnM6IGRlZmF1bHRDb2xvcnMsXG4gIHJlcXVpcmVkOiBmYWxzZSxcbiAgbW9kZVNldDogdW5kZWZpbmVkLFxuICBzaG93U2Nyb2xsOiBmYWxzZSxcbiAgcmVmUG9pbnQ6IHt9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgcHJvcHMgPT4ge1xuICByZXR1cm4gKFxuICAgIDxJMThuZXh0UHJvdmlkZXIgaTE4bj17aTE4bn0+XG4gICAgICA8RFRBdXRvc3VnZ2VzdCB7Li4ucHJvcHN9IC8+XG4gICAgPC9JMThuZXh0UHJvdmlkZXI+XG4gICk7XG59O1xuIl0sIm5hbWVzIjpbIl90eXBlb2YiLCJvIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJjb25zdHJ1Y3RvciIsInByb3RvdHlwZSIsInRvUHJvcGVydHlLZXkiLCJ0IiwiaSIsInIiLCJlIiwidG9QcmltaXRpdmUiLCJjYWxsIiwiVHlwZUVycm9yIiwiU3RyaW5nIiwiTnVtYmVyIiwiX2RlZmluZVByb3BlcnR5IiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsInRydUVxIiwidmFsMSIsInZhbDIiLCJndGZzU3RvcExheWVycyIsInZlaGljbGVSZW50YWxMYXllcnMiLCJsYWJlbElkVG9HaWQiLCJpZCIsInBhcnRzIiwic3BsaXQiLCJsZW5ndGgiLCJpc0R1cGxpY2F0ZSIsIml0ZW0xIiwiaXRlbTIiLCJwcm9wczEiLCJwcm9wZXJ0aWVzIiwicHJvcHMyIiwidHlwZSIsIm8xIiwib3JpZ2luIiwiZDEiLCJkZXN0aW5hdGlvbiIsIm8yIiwiZDIiLCJuYW1lIiwibG9jYWxhZG1pbiIsImluY2x1ZGVzIiwibGF5ZXIiLCJnaWQiLCJsYWJlbElkIiwiZ3Rmc0lkIiwicDEiLCJnZW9tZXRyeSIsImNvb3JkaW5hdGVzIiwidW5kZWZpbmVkIiwicDIiLCJNYXRoIiwiYWJzIiwibGFiZWwiLCJhZGRyZXNzIiwibm9ybWFsaXplIiwic3RyIiwiaXNTdHJpbmciLCJ0b0xvd2VyQ2FzZSIsInNwbGl0U2hvcnROYW1lQXRMZXR0ZXJzIiwidGVzdFNob3J0TmFtZU1hdGNoZXNMaW5lV2l0aE51bWJlcnNBbmRMZXR0ZXJzIiwidGVzdCIsIkxheWVyVHlwZSIsImlzU3RvcCIsImdldExheWVyUmFuayIsInNvdXJjZSIsImluZGV4T2YiLCJzb3J0U2VhcmNoUmVzdWx0cyIsImxpbmVSZWdleHAiLCJyZXN1bHRzIiwidGVybSIsIkFycmF5IiwiaXNBcnJheSIsImlzTGluZUlkZW50aWZpZXIiLCJub3JtYWxpemVkVGVybSIsImlzTGluZVNlYXJjaCIsIm9yZGVyZWRSZXN1bHRzIiwib3JkZXJCeSIsImZpbHRlciIsInJlc3VsdCIsInNob3J0TmFtZSIsImNvbmZpZGVuY2UiLCJtYXRjaCIsInJlc3VsdFByb3BlcnRpZXMiLCJtYXAiLCJlbGVtZW50Iiwibm9ybWFsaXplZFZhbHVlIiwicmVkdWNlIiwicHJldmlvdXMiLCJjdXJyZW50IiwidW5pcVdpdGgiLCJnZXRTdG9wTmFtZSIsInN0b3BDb2RlIiwibGFzdEluZGV4T2YiLCJzdWJzdHJpbmciLCJmaWx0ZXJNYXRjaGluZ1RvSW5wdXQiLCJsaXN0IiwiSW5wdXQiLCJmaWVsZHMiLCJpbnB1dCIsInRyaW0iLCJtdWx0aVdvcmQiLCJpdGVtIiwiZm9yRWFjaCIsInBOYW1lIiwiZ2V0Iiwic3BsaWNlIiwiam9pbiIsImNvbmNhdCIsInJlcGxhY2UiLCJzZXJpYWxpemUiLCJvYmoiLCJwcmVmaXgiLCJrZXlzIiwicCIsImsiLCJ2IiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiYXhpb3MiLCJyZXF1aXJlIiwiZGVmYXVsdCIsImdldEpzb24iLCJ1cmwiLCJwYXJhbXMiLCJlbmNvZGVVUkkiLCJzZWFyY2giLCJ0aW1lb3V0IiwibWV0aG9kIiwiaGVhZGVycyIsIkFjY2VwdCIsInRoZW4iLCJyZXMiLCJkYXRhIiwiZ2V0R2VvY29kaW5nUmVzdWx0cyIsInNlYXJjaFN0cmluZyIsInNlYXJjaFBhcmFtcyIsImxhbmciLCJmb2N1c1BvaW50Iiwic291cmNlcyIsInBlbGlhc1VybCIsIm1pbmltYWxSZWdleHAiLCJnZW9jb2RpbmdMYXllcnMiLCJ0ZXh0IiwiUHJvbWlzZSIsInJlc29sdmUiLCJQRUxJQVNfVVJMIiwib3B0cyIsIl9vYmplY3RTcHJlYWQiLCJsYXllcnMiLCJ0b1N0cmluZyIsImZlYXR1cmVzIiwiZ2V0U3RvcHNGcm9tR2VvY29kaW5nIiwic3RvcHMiLCJVUkxfUEVMSUFTX1BMQUNFIiwiZ2lkcyIsInN0b3BTdGF0aW9uTWFwIiwic3RvcCIsImNvZGUiLCJzdG9wT3JTdGF0aW9uIiwiaWRzIiwic2xpY2UiLCJhZGRlbmR1bSIsImxhc3RVcGRhdGVkIiwiZmF2b3VyaXRlSWQiLCJmaWx0ZXJPbGRTZWFyY2hlcyIsIm9sZFNlYXJjaGVzIiwiZHJvcExheWVycyIsIm1hdGNoaW5nT2xkU2VhcmNoZXMiLCJ0YWtlIiwibmV3SXRlbSIsInRpbWV0YWJsZUNsaWNrZWQiLCJhcnJvd0NsaWNrZWQiLCJyb3V0ZUxheWVycyIsImxvY2F0aW9uTGF5ZXJzIiwicGFya2luZ0xheWVycyIsInN0b3BMYXllcnMiLCJkZWJvdW5jZWRTZWFyY2giLCJkZWJvdW5jZSIsInRhcmdldHMiLCJ0cmFuc3BvcnRNb2RlIiwic2VhcmNoQ29udGV4dCIsImZpbHRlclJlc3VsdHMiLCJnZW9jb2RpbmdTaXplIiwiY2FsbGJhY2siLCJwYXRoT3B0cyIsInJlZlBvaW50IiwiZ2V0UG9zaXRpb25zIiwiZ2V0RmF2b3VyaXRlTG9jYXRpb25zIiwiZ2V0T2xkU2VhcmNoZXMiLCJnZXRGYXZvdXJpdGVTdG9wcyIsInBhcmtpbmdBcmVhU291cmNlcyIsImdldExhbmd1YWdlIiwiZ2V0U3RvcEFuZFN0YXRpb25zUXVlcnkiLCJnZXRGYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnNRdWVyeSIsImdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9ucyIsImdldEZhdm91cml0ZVJvdXRlc1F1ZXJ5IiwiZ2V0RmF2b3VyaXRlUm91dGVzIiwiZ2V0Um91dGVzUXVlcnkiLCJjb250ZXh0IiwiaXNQZWxpYXNMb2NhdGlvbkF3YXJlIiwibG9jYXRpb25Bd2FyZSIsIlVSTF9QRUxJQVMiLCJmZWVkSURzIiwiZ2VvY29kaW5nU2VhcmNoUGFyYW1zIiwiZ2VvY29kaW5nU291cmNlcyIsImdldEZ1dHVyZVJvdXRlcyIsImNpdHlCaWtlTmV0d29ya3MiLCJhbGxUYXJnZXRzIiwiYWxsU291cmNlcyIsInBvc2l0aW9uIiwic2VhcmNoQ29tcG9uZW50cyIsInNlYXJjaGVzIiwibGFuZ3VhZ2UiLCJsYXQiLCJsb24iLCJ0b0ZpeGVkIiwibW9kZSIsInN0YXR1cyIsInB1c2giLCJnZXRDdXJyZW50UG9zaXRpb25JZkVtcHR5Iiwic2VsZWN0UG9zaXRpb25Gb21NYXAiLCJpdGVtcyIsImZhdm91cml0ZUxvY2F0aW9ucyIsImZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9ucyIsImZhdm91cml0ZVN0b3BzIiwiaGFzRmF2b3VyaXRlcyIsInNlbGVjdEZyb21Pd25Mb2NhdGlvbnMiLCJmYXZvdXJpdGVzIiwiZmlsdGVyRmF2b3VyaXRlTG9jYXRpb25zIiwibG9jYXRpb25IaXN0b3J5Iiwic2l6ZSIsImZlZWRJZHMiLCJoaXN0b3J5IiwidXNlU3RvcHMiLCJ1c2VTdGF0aW9ucyIsInN0b3BzQW5kU3RhdGlvbnMiLCJldmVyeSIsInN0b3BzU3RhdGlvbnMiLCJzIiwiZmlsdGVyRmF2b3VyaXRlU3RvcHMiLCJkZWR1cGVzdG9wcyIsImZlZWRzIiwic3RvcEhpc3RvcnkiLCJmYXZvdXJpdGVSb3V0ZXMiLCJyb3V0ZUhpc3RvcnkiLCJmYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbiIsImFsbCIsImZsYXR0ZW4iLCJjYXRjaCIsImVyciIsImVycm9yIiwibGVhZGluZyIsImkxOG4iLCJjcmVhdGVJbnN0YW5jZSIsImZhbGxiYWNrTG5nIiwicmVzb3VyY2VzIiwiZGUiLCJ0cmFuc2xhdGlvbiIsImFpcnBsYW5lIiwiYXJyaXZhbCIsImJhY2siLCJiaWtlcmVudGFsc3RhdGlvbiIsImJ1cyIsImNhbmNlbCIsImN1cnJlbnRwb3NpdGlvbiIsImRlbGV0ZSIsImRlcGFydHVyZSIsImZhdm91cml0ZSIsImZlcnJ5Iiwib3dubG9jYXRpb25zIiwibG9hZGluZyIsInJhaWwiLCJzdHJlZXQiLCJzdWJ3YXkiLCJzdGF0aW9uIiwidHJhbSIsInZlbnVlIiwid2hlcmUiLCJwbGFjZSIsImVuIiwiYmlrZXBhcmsiLCJjYXJwYXJrIiwicGxhdGZvcm0iLCJyZXF1aXJlZCIsInRyYWNrIiwiZmkiLCJ2ZWhpY2xlcmVudGFsc3RhdGlvbiIsInBsIiwic3YiLCJkZWZhdWx0TlMiLCJyZWFjdCIsInVzZVN1c3BlbnNlIiwic3R5bGVJbmplY3QiLCJjc3MiLCJyZWYiLCJpbnNlcnRBdCIsImRvY3VtZW50IiwiaGVhZCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwic3R5bGUiLCJjcmVhdGVFbGVtZW50IiwiZmlyc3RDaGlsZCIsImluc2VydEJlZm9yZSIsImFwcGVuZENoaWxkIiwic3R5bGVTaGVldCIsImNzc1RleHQiLCJjcmVhdGVUZXh0Tm9kZSIsImluaXQiLCJnZXRMb2NhbGFkbWluIiwic3VnZ2VzdGlvbiIsImdldFN0b3BDb2RlIiwiZ2V0TmFtZUxhYmVsIiwibWVtb2l6ZSIsInBsYWluIiwiUmVnRXhwIiwiZXNjYXBlUmVnRXhwIiwibG9uZ05hbWUiLCJhZ2VuY3kiLCJmb3JtYXRGYXZvdXJpdGVQbGFjZUxhYmVsIiwiY2xvbmVEZWVwIiwiaXNLZXlib2FyZFNlbGVjdGlvbkV2ZW50IiwiZXZlbnQiLCJrZXkiLCJ3aGljaCIsImtleUNvZGUiLCJwcmV2ZW50RGVmYXVsdCIsImlzUE9JU2VhcmNoIiwiZ2V0UGxhdGZvcm0iLCJsbmciLCJHVEZTIiwibW9kZXMiLCJnZXRTdWdnZXN0aW9uQ29udGVudCIsInN1Z2dlc3Rpb25UeXBlIiwiX2l0ZW0kcHJvcGVydGllcyRhZGRlIiwidGFpbDEiLCJsb2NhbGl0eSIsInRhaWwyIiwibmFtZTEiLCJuYW1lMiIsInRyYW5zbGF0ZWRUZXh0IiwidHJhbnNsYXRlRnV0dXJlUm91dGVTdWdnZXN0aW9uVGltZSIsInRpbWUiLCJEYXRlVGltZSIsImZyb21TZWNvbmRzIiwibm93IiwiYXJyaXZlQnkiLCJoYXNTYW1lIiwicGx1cyIsImRheXMiLCJ0b0Zvcm1hdCIsImdldFN1Z2dlc3Rpb25WYWx1ZSIsImdldExhYmVsIiwic3VnZ2VzdGlvbkFzQXJpYUNvbnRlbnQiLCJzdWdnZXN0aW9ucyIsImZpcnN0U3VnZ2VzdGlvbiIsIlNldCIsInNlbGYiLCJtb2R1bGUiLCJleHBvcnRzIiwicmVxdWlyZSQkMCIsIm4iLCJnIiwid2luZG93IiwidGhpcyIsImlnbm9yZSIsImhlYWRlciIsInRvcE9uRW1wdHlIYXNoIiwic3BlZWQiLCJzcGVlZEFzRHVyYXRpb24iLCJkdXJhdGlvbk1heCIsImR1cmF0aW9uTWluIiwiY2xpcCIsIm9mZnNldCIsImVhc2luZyIsImN1c3RvbUVhc2luZyIsInVwZGF0ZVVSTCIsInBvcHN0YXRlIiwiZW1pdEV2ZW50cyIsImFyZ3VtZW50cyIsImhhc093blByb3BlcnR5IiwiY2hhckF0Iiwic3Vic3RyIiwidSIsImNoYXJDb2RlQXQiLCJJbnZhbGlkQ2hhcmFjdGVyRXJyb3IiLCJtYXgiLCJib2R5Iiwic2Nyb2xsSGVpZ2h0IiwiZG9jdW1lbnRFbGVtZW50Iiwib2Zmc2V0SGVpZ2h0IiwiY2xpZW50SGVpZ2h0IiwicGFyc2VJbnQiLCJnZXRDb21wdXRlZFN0eWxlIiwiaGVpZ2h0Iiwib2Zmc2V0VG9wIiwiZm9jdXMiLCJhY3RpdmVFbGVtZW50Iiwic2V0QXR0cmlidXRlIiwib3V0bGluZSIsInNjcm9sbFRvIiwiQ3VzdG9tRXZlbnQiLCJidWJibGVzIiwiZGV0YWlsIiwiYW5jaG9yIiwidG9nZ2xlIiwiZGlzcGF0Y2hFdmVudCIsImMiLCJhIiwibCIsImYiLCJkIiwiY2FuY2VsU2Nyb2xsIiwiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCJhbmltYXRlU2Nyb2xsIiwiaCIsIm0iLCJ0YWdOYW1lIiwieSIsInBhZ2VZT2Zmc2V0IiwicXVlcnlTZWxlY3RvciIsImIiLCJ3IiwiRSIsIk8iLCJvZmZzZXRQYXJlbnQiLCJtaW4iLCJpbm5lckhlaWdodCIsIlMiLCJfIiwiSSIsIk0iLCJMIiwiZmxvb3IiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJwdXNoU3RhdGUiLCJzbW9vdGhTY3JvbGwiLCJKU09OIiwic3RyaW5naWZ5IiwidGl0bGUiLCJtYXRjaE1lZGlhIiwibWF0Y2hlcyIsImRlZmF1bHRQcmV2ZW50ZWQiLCJidXR0b24iLCJtZXRhS2V5IiwiY3RybEtleSIsInNoaWZ0S2V5IiwidGFyZ2V0IiwiY2xvc2VzdCIsImhvc3RuYW1lIiwibG9jYXRpb24iLCJwYXRobmFtZSIsImhyZWYiLCJkZWNvZGVVUklDb21wb25lbnQiLCJoYXNoIiwicmVwbGFjZVN0YXRlIiwic3RhdGUiLCJkZXN0cm95IiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIkVsZW1lbnQiLCJhZGRFdmVudExpc3RlbmVyIiwiYXBwbHkiLCJfX2NyZWF0ZUJpbmRpbmciLCJjcmVhdGUiLCJfX2V4cG9ydFN0YXIiLCJ1c2VBcnJvd05hdmlnYXRpb24iLCJsaXN0SXRlbXMiLCJvbkFycm93VXBPckRvd24iLCJ1c2VTdGF0ZSIsInVzZUNhbGxiYWNrIiwidXNlRWZmZWN0Iiwic2VsZWN0ZWRJbmRleCIsInVzZURlYm91bmNlIiwic2V0VGltZW91dCIsImNsZWFyVGltZW91dCIsInVzZUVsZW1lbnRTaXplIiwidXNlUmVmIiwid2lkdGgiLCJjbGllbnRXaWR0aCIsInVzZUludGVyc2VjdGlvbk9ic2VydmVyIiwiaXNJbnRlcnNlY3RpbmciLCJJbnRlcnNlY3Rpb25PYnNlcnZlciIsIm9ic2VydmUiLCJ1bm9ic2VydmUiLCJjb250YWluZXJSZWYiLCJpc1Zpc2libGUiLCJ1c2VJc0JyZWFrcG9pbnQiLCJ4cyIsIm1vYmlsZVNtYWxsIiwibW9iaWxlIiwidGFibGV0IiwidGFibGV0TGFyZ2UiLCJkZXNrdG9wU21hbGwiLCJkZXNrdG9wIiwiZGVza3RvcExhcmdlIiwiaW5uZXJXaWR0aCIsInVzZU9uUmVzaXplIiwidXNlSXNMb2FkaW5nQWZ0ZXJFcnJvciIsInVzZUlzTW9iaWxlIiwidXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsInVzZU9uTG9zZUZvY3VzV2l0aGluIiwid2F0Y2giLCJwYXNzaXZlIiwidXNlT25XaW5kb3dGb2N1cyIsInZpc2liaWxpdHlTdGF0ZSIsInVzZU91dHNpZGVSZWFjdGVyIiwiY29udGFpbnMiLCJ1c2VSdW5BZnRlclVwZGF0ZSIsInVzZVNjcm9sbExvY2siLCJsb2NrIiwic2Nyb2xsWSIsInRvcCIsInVubG9jayIsIl9faW1wb3J0RGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJ1c2VTbW9vdGhTY3JvbGwiLCJnbG9iYWxUaGlzIiwiRnVuY3Rpb24iLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJvYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJTdWdnZXN0aW9uIiwiX3JlZiIsImdldEl0ZW1Qcm9wcyIsImhpZ2hsaWdodGVkSW5kZXgiLCJpdGVtSW5kZXgiLCJzdHlsZXMiLCJyZXN0IiwiX2V4Y2x1ZGVkIiwidXNlVHJhbnNsYXRpb24iLCJjb250ZW50IiwiUmVhY3QiLCJhc3NpZ24iLCJjbGFzc05hbWUiLCJjeCIsInN1Z2dlc3Rpb25IaWdobGlnaHRlZCIsImluZGV4IiwiU3VnZ2VzdGlvbkl0ZW0iLCJpdGVtU2hhcGUiLCJQcm9wVHlwZXMiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJzaGFwZSIsInN0cmluZyIsInNlbGVjdGVkSWNvbklkIiwiaWNvbkNvbG9yIiwiY29sb3IiLCJib29sIiwiU3VnZ2VzdGlvbnMiLCJfcmVmMiIsImdldE1lbnVQcm9wcyIsImhpZGRlbiIsInJlbmRlckNsZWFySGlzdG9yeUJ1dHRvbiIsImhhbmRsZUNsZWFySGlzdG9yeSIsIl9leGNsdWRlZDIiLCJzdWdnZXN0aW9uc0NvbnRhaW5lck9wZW4iLCJzdWdnZXN0aW9uc0NvbnRhaW5lciIsInN1Z2dlc3Rpb25zTGlzdCIsIm9uQ2xpY2siLCJwcm9wVHlwZXMiLCJpc1JlcXVpcmVkIiwiZnVuYyIsIm51bWJlciIsIm9iamVjdE9mIiwiYXJyYXlPZiIsImRlZmF1bHRQcm9wcyIsIkNsZWFyQnV0dG9uIiwiY2xlYXJJbnB1dCIsIm9uS2V5RG93biIsIkljb24iLCJpbWciLCJwbGFjZWhvbGRlciIsImdldElucHV0UHJvcHMiLCJnZXRMYWJlbFByb3BzIiwiYXJpYUxhYmVsIiwiaW5wdXRSZWYiLCJyZW5kZXJMYWJlbCIsImlzTW9iaWxlIiwiaW5wdXRDbGFzc05hbWUiLCJjbGVhckJ1dHRvbkNvbG9yIiwiYXV0b0ZvY3VzIiwiaW5wdXRPbkJsdXIiLCJjb250YWluZXIiLCJodG1sRm9yIiwidGhpbiIsImhhc1ZhbHVlIiwib25CbHVyIiwib25lT2ZUeXBlIiwib2JqZWN0IiwiTW9iaWxlVmlldyIsImFwcEVsZW1lbnQiLCJvblNlbGVjdGVkSXRlbUNoYW5nZSIsImZvbnRXZWlnaHRzIiwiY2xlYXJPbGRTZWFyY2hlcyIsInN1Z2dlc3Rpb25Qcm9wcyIsImFyaWFQcm9wcyIsIm1vYmlsZUxhYmVsIiwic2hvd1Njcm9sbCIsImRpc3BhdGNoIiwiY29sb3JzIiwiaG9va3MiLCJtb2JpbGVTdHlsZXMiLCJtb2JpbGVOb1Njcm9sbFN0eWxlcyIsImlucHV0SWQiLCJpc0RpYWxvZ09wZW4iLCJzZXREaWFsb2dPcGVuIiwiUmVhY3RNb2RhbCIsInNldEFwcEVsZW1lbnQiLCJyZW5kZXJNb2JpbGUiLCJzZXRIaWdobGlnaHRlZEluZGV4IiwidXNlQ29tYm9ib3giLCJpbnB1dFZhbHVlIiwiaXNPcGVuIiwiY2hhbmdlcyIsInNlbGVjdGVkSXRlbSIsImRlZmF1bHRIaWdobGlnaHRlZEluZGV4Iiwib25JbnB1dFZhbHVlQ2hhbmdlIiwic3RhdGVSZWR1Y2VyIiwib2xkU3RhdGUiLCJzdGF0ZUNoYW5nZVR5cGVzIiwiSW5wdXRLZXlEb3duRXNjYXBlIiwiSW5wdXRLZXlEb3duRW50ZXIiLCJlbnRlclBlbmRpbmciLCJJbnB1dEJsdXIiLCJpdGVtVG9TdHJpbmciLCJzdXBwcmVzc1JlZkVycm9yIiwiYXJpYVJlcXVpcmVkVGV4dCIsIlNlYXJjaEJhcklkIiwiYXJpYUN1cnJlbnRTdWdnZXN0aW9uIiwib3ZlcmxheUNsYXNzTmFtZSIsInNob3VsZFJldHVybkZvY3VzQWZ0ZXJDbG9zZSIsInNob3VsZENsb3NlT25Fc2MiLCJwcmltYXJ5IiwiYWNjZXNzaWJsZVByaW1hcnkiLCJob3ZlciIsIm1lZGl1bSIsInRhYkluZGV4IiwiRGlhbG9nTW9kYWwiLCJpc01vZGFsT3BlbiIsImhhbmRsZUNsb3NlIiwiaGVhZGVyVGV4dCIsInByaW1hcnlCdXR0b25UZXh0Iiwic2Vjb25kYXJ5QnV0dG9uVGV4dCIsInByaW1hcnlCdXR0b25PbkNsaWNrIiwic2Vjb25kYXJ5QnV0dG9uT25DbGljayIsInNlYXJjaFJlZHVjZXIiLCJhY3Rpb24iLCJzaG93T3duUGxhY2VzIiwicGVuZGluZ1NlbGVjdGlvbiIsImlzQ2xlYXJlZCIsImluaXRpYWxTdGF0ZSIsImlzTWVudU9wZW4iLCJwb3NpdGlvbnMiLCJEVEF1dG9zdWdnZXN0Iiwib25TZWxlY3QiLCJpY29uIiwib25DbGVhciIsImdldEF1dG9TdWdnZXN0SWNvbnMiLCJoYW5kbGVWaWFQb2ludHMiLCJmb2N1c0NoYW5nZSIsInN0b3JlUmVmIiwidHJhbnNsYXRlZFBsYWNlaG9sZGVyIiwibW9kZVNldCIsImlzRW1iZWRkZWQiLCJ1c2VSZWR1Y2VyIiwiZmV0Y2hTdWdnZXN0aW9ucyIsImlzTG9jYXRpb25TZWFyY2giLCJuZXdUYXJnZXRzIiwiZ2V0TmV3VGFyZ2V0cyIsIm93blBsYWNlcyIsInVzZUFsbCIsImV4ZWN1dGVTZWFyY2giLCJzZWFyY2hSZXN1bHQiLCJuZXdTdWdnZXN0aW9ucyIsIkRhdGUiLCJ0cmFuc2xhdGVkU3VnZ2VzdGlvbiIsInNlbGVjdFN1Z2dlc3Rpb24iLCJibHVyIiwic2VsZWN0SXRlbSIsIm9wZW5NZW51IiwiY2xvc2VNZW51IiwiSXRlbUNsaWNrIiwiSW5wdXRDbGljayIsIm9uSXNPcGVuQ2hhbmdlIiwicGVuZGluZ0VudGVyIiwiYmFzZUl0ZW1Qcm9wcyIsImFyaWFGYXZvdXJpdGVTdHJpbmciLCJhcmlhTGFiZWxUZXh0IiwiZ2V0QXJpYVByb3BzIiwiYXJpYUJhcklkIiwiYXJpYUxhYmVsSW5zdHJ1Y3Rpb25zIiwibW92aW5nVG9EZXN0aW5hdGlvbkZpZWxkVGV4dCIsImFyaWFTdWdnZXN0aW9uTGVuIiwiY291bnQiLCJzZWxlY3Rpb24iLCJGcmFnbWVudCIsIm1vYmlsZUNsZWFyT2xkU2VhcmNoZXMiLCJjbGVhckZ1dHVyZVJvdXRlcyIsInJvdXRlc1ByZWZpeCIsInN0b3BzUHJlZml4IiwiZGVmYXVsdENvbG9ycyIsInByb3BzIiwiSTE4bmV4dFByb3ZpZGVyIl0sIm1hcHBpbmdzIjoiMHlEQUFBLFNBQVNBLEVBQVFDLEdBR2YsT0FBT0QsRUFBVSxtQkFBcUJFLFFBQVUsaUJBQW1CQSxPQUFPQyxTQUFXLFNBQVVGLEdBQzdGLGNBQWNBLENBQ2YsRUFBRyxTQUFVQSxHQUNaLE9BQU9BLEdBQUssbUJBQXFCQyxRQUFVRCxFQUFFRyxjQUFnQkYsUUFBVUQsSUFBTUMsT0FBT0csVUFBWSxnQkFBa0JKLENBQ3RILEVBQUtELEVBQVFDLEVBQ2IsQ0NOQSxTQUFTSyxFQUFjQyxHQUNyQixJQUFJQyxFQ0ZOLFNBQXFCRCxFQUFHRSxHQUN0QixHQUFJLFVBQVlULEVBQVFPLEtBQU9BLEVBQUcsT0FBT0EsRUFDekMsSUFBSUcsRUFBSUgsRUFBRUwsT0FBT1MsYUFDakIsUUFBSSxJQUFXRCxFQUFHLENBQ2hCLElBQUlGLEVBQUlFLEVBQUVFLEtBQUtMLEVBQUdFLEdBQUssV0FDdkIsR0FBSSxVQUFZVCxFQUFRUSxHQUFJLE9BQU9BLEVBQ25DLE1BQU0sSUFBSUssVUFBVSwrQ0FDckIsQ0FDRCxPQUFRLFdBQWFKLEVBQUlLLE9BQVNDLFFBQVFSLEVBQzVDLENEUFVJLENBQVlKLEVBQUcsVUFDdkIsTUFBTyxVQUFZUCxFQUFRUSxHQUFLQSxFQUFJQSxFQUFJLEVBQzFDLENFSkEsU0FBU1EsRUFBZ0JOLEVBQUdELEVBQUdGLEdBQzdCLE9BQVFFLEVBQUlILEVBQWNHLE1BQU9DLEVBQUlPLE9BQU9DLGVBQWVSLEVBQUdELEVBQUcsQ0FDL0RVLE1BQU9aLEVBQ1BhLFlBQVksRUFDWkMsY0FBYyxFQUNkQyxVQUFVLElBQ1BaLEVBQUVELEdBQUtGLEVBQUdHLENBQ2pCLENDR2UsU0FBU2EsRUFBTUMsRUFBTUMsR0FDbEMsT0FBT0QsR0FBUUMsR0FBUUQsSUFBU0MsQ0FDbEMsQ0NZQSxNQUFNQyxFQUFpQixDQUFDLE9BQVEsVUFBVyxnQkFBaUIsb0JBQ3REQyxFQUFzQixDQUFDLGdDQUFpQyxlQUU5RCxTQUFTQyxFQUFhQyxHQUNwQixJQUFLQSxFQUNILE1BQU8sR0FFVCxNQUFNQyxFQUFRRCxFQUFHRSxNQUFNLEtBQ3ZCLE9BQXFCLElBQWpCRCxFQUFNRSxPQUNELEdBRUYsWUFBWUYsRUFBTSxrQkFBa0JBLEVBQU0sSUFDbkQsQ0FFZSxTQUFTRyxFQUFZQyxFQUFPQyxHQUN6QyxNQUFNQyxFQUFTRixFQUFNRyxXQUNmQyxFQUFTSCxFQUFNRSxXQUVyQixHQUFtQixnQkFBZkgsRUFBTUssTUFBeUMsZ0JBQWZKLEVBQU1JLEtBQXdCLENBQ2hFLE1BQU1DLEVBQUtKLEVBQU9LLE9BQ1pDLEVBQUtOLEVBQU9PLFlBQ1pDLEVBQUtOLEVBQU9HLE9BQ1pJLEVBQUtQLEVBQU9LLFlBS2xCLE1BSGMsR0FBR0gsRUFBR00sU0FBU04sRUFBR08sZUFBZUwsRUFBR0ksU0FBU0osRUFBR0ssZUFDaEQsR0FBR0gsRUFBR0UsU0FBU0YsRUFBR0csZUFBZUYsRUFBR0MsU0FBU0QsRUFBR0UsWUFHaEUsQ0FDQSxHQUFtQixnQkFBZmIsRUFBTUssTUFBeUMsZ0JBQWZKLEVBQU1JLEtBQ3hDLE9BQU8sRUFFVCxHQUNFWixFQUFvQnFCLFNBQVNaLEVBQU9hLFFBQ3BDdEIsRUFBb0JxQixTQUFTVixFQUFPVyxPQUNwQyxDQUdBLE9BRlliLEVBQU9jLEtBQU90QixFQUFhUSxFQUFPZSxhQUNsQ2IsRUFBT1ksS0FBT3RCLEVBQWFVLEVBQU9hLFNBRWhELENBQ0EsR0FBSWYsRUFBT2dCLFFBQVVkLEVBQU9jLE9BQzFCLE9BQU9oQixFQUFPZ0IsU0FBV2QsRUFBT2MsT0FFbEMsR0FDRTFCLEVBQWVzQixTQUFTWixFQUFPYSxRQUMvQnZCLEVBQWVzQixTQUFTVixFQUFPVyxRQUMvQmIsRUFBT2MsS0FDUFosRUFBT1ksSUFFUCxPQUFPZCxFQUFPYyxNQUFRWixFQUFPWSxJQUcvQixNQUFNRyxFQUFLbkIsR0FBU0EsRUFBTW9CLFNBQVdwQixFQUFNb0IsU0FBU0MsaUJBQWNDLEVBQzVEQyxFQUFLdEIsR0FBU0EsRUFBTW1CLFNBQVduQixFQUFNbUIsU0FBU0MsaUJBQWNDLEVBRWxFLFNBQUlILEdBQU1JLEdBRUpDLEtBQUtDLElBQUlOLEVBQUcsR0FBS0ksRUFBRyxJQUFNLE1BQVFDLEtBQUtDLElBQUlOLEVBQUcsR0FBS0ksRUFBRyxJQUFNLE9BRzVEbEMsRUFBTWEsRUFBT1UsS0FBTVIsRUFBT1EsT0FDMUJ2QixFQUFNYSxFQUFPd0IsTUFBT3RCLEVBQU9zQixRQUMzQnJDLEVBQU1hLEVBQU95QixRQUFTdkIsRUFBT3VCLFVBQzdCdEMsRUFBTWEsRUFBT3lCLFFBQVN2QixFQUFPc0IsUUFDN0JyQyxFQUFNYSxFQUFPd0IsTUFBT3RCLEVBQU91QixVQU9uQyxDQzNGQSxNQUFNQyxFQUFZQyxHQUNYQyxFQUFBQSxRQUFTRCxHQUdQQSxFQUFJRSxjQUZGLEdBS0xDLEVBQTBCSCxHQUN2QkEsRUFBSWhDLE1BQU0sK2tRQUdib0MsRUFBZ0RKLEdBQzdDLG9sUUFBa0JLLEtBQUtMLEdBTTFCTSxFQUVFLE9BRkZBLEVBR2Esa0JBSGJBLEdBSVcsZ0JBSlhBLEdBS2MsbUJBTGRBLEdBTVksaUJBTlpBLEdBT1ksaUJBUFpBLEdBUTJCLGdDQVIzQkEsR0FTUyxjQVRUQSxHQVVLLFVBVkxBLEdBV1csZ0JBWFhBLEdBWW9CLGVBWnBCQSxHQWFFLE9BYkZBLEdBZ0JrQixjQWhCbEJBLEdBaUJLLFVBakJMQSxHQWtCTSxXQUVDQyxHQUFTQSxFQUFHckIsUUFBT1YsVUFDcEIsU0FBVlUsR0FDVSxrQkFBVkEsR0FDUyxTQUFUVixHQUNTLGtCQUFUQSxFQWtGV2dDLEdBQWVBLENBQUN0QixFQUFPdUIsS0FDbEMsT0FBUXZCLEdBQ04sS0FBS29CLEVBQ0gsT0FBTyxFQUNULEtBQUtBLEVBQ0gsTUFBTyxHQUNULEtBQUtBLEdBQ0gsTUFBTyxHQUNULEtBQUtBLEdBQ0gsTUFBTyxJQUNULEtBQUtBLEdBQ0wsS0FBS0EsR0FDTCxLQUFLQSxHQUNMLEtBQUtBLEdBQ0wsS0FBS0EsR0FDSCxNQUFPLElBQ1QsS0FBS0EsR0FDSCxNQUFPLElBQ1QsS0FBS0EsR0FDSCxPQUFJTCxFQUFBQSxRQUFTUSxJQUFzQyxJQUEzQkEsRUFBT0MsUUFBUSxRQUM5QixJQUVGLElBRVQsS0FBS0osR0FFTCxLQUFLQSxHQUVMLEtBQUtBLEdBQ0gsTUFBTyxJQUNULEtBQUtBLEdBQ0gsTUFBTyxJQUNULFFBRUUsTUFBTyxJQUNYLEVBa0JXSyxHQUFvQkEsQ0FBQ0MsRUFBWUMsRUFBU0MsRUFBTyxNQUM1RCxJQUFLQyxNQUFNQyxRQUFRSCxLQUFhQSxFQUFRNUMsT0FDdEMsT0FBTzRDLEVBRVQsTUFBTUksRUFBbUI3RCxHQUN2QjZDLEVBQUFBLFFBQVM3QyxJQUFVd0QsR0FBY0EsRUFBV1AsS0FBS2pELEdBRTdDOEQsRUFBaUJuQixFQUFVZSxHQUMzQkssRUFBZUYsRUFBaUJDLEdBRWhDRSxFQUFpQkMsRUFBQUEsUUFDckJSLEVBQVFTLFFBQU81RSxHQUFLQSxJQUNwQixDQUVFNkUsR0FDRUosR0FDQUYsRUFBaUJsQixFQUFVd0IsRUFBT2pELFdBQVdrRCxhQUNzQixJQUFuRXpCLEVBQVV3QixFQUFPakQsV0FBV2tELFdBQVdkLFFBQVFRLEdBQzNDLEVBQ0EsRUFFTkssSUFDRSxNQUFNRSxXQUFFQSxFQUFVdkMsTUFBRUEsRUFBS3VCLE9BQUVBLEdBQVdjLEVBQU9qRCxXQUM3QyxHQUE4QixJQUExQjRDLEVBQWVqRCxPQUdqQixPQUFPdUMsR0FBYXRCLEVBQU91QixHQUs3QixJQUFLZ0IsRUFFSCxPQUNFakIsR0FBYXRCLEVBQU91QixHQWxJWGlCLEVBQUNSLEVBQWdCUyxJQUMvQjFCLEVBQVEsUUFBQ2lCLElBQTZDLElBQTFCQSxFQUFlakQsT0FJN0IsQ0FBQyxPQUFRLFFBQVMsVUFBVyxhQUU3QzJELEtBQUk3QyxJQUNJLENBQUVBLE9BQU0zQixNQUFPdUUsRUFBaUI1QyxPQUV4Q3VDLFFBQU9PLEdBQVc1QixFQUFRLFFBQUM0QixFQUFRekUsUUFBVXlFLEVBQVF6RSxNQUFNYSxPQUFTLElBQ3BFMkQsS0FBSUMsSUFDSCxJQUFJQyxFQUFrQi9CLEVBQVU4QixFQUFRekUsT0FDeEMsT0FBZ0QsSUFBNUMwRSxFQUFnQnBCLFFBQVFRLElBRVAsY0FBakJXLEVBQVE5QyxNQUNScUIsRUFBOEMwQixNQUs3Q0EsR0FBbUIzQixFQUF3QjJCLElBR3ZDLEdBQU1aLEVBQWVqRCxPQUFTNkQsRUFBZ0I3RCxRQUsvQyxHQUFNaUQsRUFBZWpELFFBQVdpRCxFQUFlakQsT0FBUyxFQUFFLElBRW5FOEQsUUFDQyxDQUFDQyxFQUFVQyxJQUFhQSxFQUFVRCxFQUFXQyxFQUFVRCxHQUN2RCxHQS9CSyxFQWlJQ04sQ0FBTVIsRUFBZ0JLLEVBQU9qRCxZQUlqQyxPQUFRWSxHQUNOLEtBQUtvQixHQUVILE9BQU9tQixHQURrQyxJQUEzQmhCLEVBQU9DLFFBQVEsUUFBZ0IsSUFBTyxLQUd0RCxLQUFLSixHQUVMLEtBQUtBLEdBRUwsS0FBS0EsR0FDSCxPQUFPbUIsRUFBYSxJQUN0QixLQUFLbkIsR0FDSCxPQUFPbUIsRUFBYSxJQUN0QixRQUNFLE9BQU9BLEVBQ1gsRUFFRkYsSUFDRSxHQUFJQSxFQUFPakQsV0FBV2tELFVBQ3BCLE9BQU9wQixFQUNMbUIsRUFBT2pELFdBQVdrRCxXQUVoQnJCLEVBQXdCb0IsRUFBT2pELFdBQVdrRCxXQUFXLEdBQ3JERCxFQUFPakQsV0FBV2tELFNBRVIsRUFFbEJELElBQ0UsR0FBSUEsRUFBT2pELFdBQVdrRCxVQUNwQixPQUFPcEIsRUFDTG1CLEVBQU9qRCxXQUFXa0QsV0FFaEJyQixFQUF3Qm9CLEVBQU9qRCxXQUFXa0QsV0FBVyxHQUNyREQsRUFBT2pELFdBQVdrRCxTQUVSLEVBRWxCLHVCQUVGLENBQUMsT0FBUSxPQUFRLE1BQU8sTUFBTyxRQUdqQyxPQUFPVSxFQUFRLFFBQUNkLEVBQWdCbEQsRUFBWSxFQVNqQ2lFLEdBQWNBLENBQUNwRCxFQUFNcUQsSUFFOUJBLFVBRWdDLElBQWhDckQsRUFBS3NELFlBQVlELEdBRVZyRCxFQUFLdUQsVUFBVSxFQUFHdkQsRUFBS3NELFlBQVlELEdBQVksR0FFakRyRCxFQ2xRTSxTQUFTd0QsR0FBc0JDLEVBQU1DLEVBQU9DLEdBQ3pELEdBQXFCLGlCQUFWRCxHQUFzQkEsRUFBTXhFLE9BQVMsRUFBRyxDQUNqRCxNQUFNMEUsRUFBUUYsRUFBTXZDLGNBQWMwQyxPQUM1QkMsRUFBWUYsRUFBTTFELFNBQVMsTUFBUTBELEVBQU0xRCxTQUFTLEtBQ3hELE9BQU91RCxFQUFLbEIsUUFBT3dCLElBQ2pCLElBQUkvRSxFQUFRLEdBQ1oyRSxFQUFPSyxTQUFRQyxJQUNiLElBQUk1RixFQUFRNkYsRUFBQUEsUUFBSUgsRUFBTUUsR0FHbkJILEdBQ1UscUJBQVZHLEdBQTBDLFlBQVZBLElBQ2pDNUYsSUFHQUEsRUFBUUEsRUFBTVksTUFBTSxLQUNoQlosRUFBTWEsT0FBUyxFQUNqQmIsRUFBTThGLE9BQU85RixFQUFNYSxPQUFTLEVBQUcsR0FDdEJiLEVBQU1hLE9BQVMsR0FDeEJiLEVBQU04RixPQUFPOUYsRUFBTWEsT0FBUyxFQUFHLEdBRWpDYixFQUFRQSxFQUFNK0YsS0FBSyxNQUVqQi9GLElBRUFXLEVBREU4RSxFQUNNOUUsRUFBTXFGLE9BQU9oRyxFQUFNOEMsZUFFbkJuQyxFQUFNcUYsT0FDWmhHLEVBQU04QyxjQUFjbUQsUUFBUSxLQUFNLEtBQUtyRixNQUFNLE1BR25ELElBRUYsSUFBSyxJQUFJdkIsRUFBSSxFQUFHQSxFQUFJc0IsRUFBTUUsT0FBUXhCLElBQ2hDLEdBQWdDLElBQTVCc0IsRUFBTXRCLEdBQUdpRSxRQUFRaUMsR0FFbkIsT0FBTyxFQUdYLE9BQU8sQ0FBSyxHQUVoQixDQUVBLE9BQU9ILENBQ1QsQ0N2RGUsU0FBU2MsR0FBVUMsRUFBS0MsR0FDckMsT0FBS0QsRUFHRXJHLE9BQU91RyxLQUFLRixHQUNoQjNCLEtBQUk4QixJQUNILE1BQU1DLEVBQUlILEdBQVVFLEVBQ2RFLEVBQUlMLEVBQUlHLEdBRWQsTUFBb0IsaUJBQU5FLEVBQ1ZOLEdBQVVNLEVBQUdELEdBQ2IsR0FBR0UsbUJBQW1CRixNQUFNRSxtQkFBbUJELElBQUksSUFFeERULEtBQUssS0FYQyxFQVlYLENDYkEsTUFBTVcsR0FBUUMsUUFBUSxTQUFTQyxRQUVoQixTQUFTQyxHQUFRQyxFQUFLQyxHQUNuQyxPQUFPTCxHQUNKYixJQUNDbUIsVUFBVUYsSUFDUEMsSUFDMEIsSUFBdEJELEVBQUlHLE9BQU8sTUFBZSxJQUFNLEtBQU9mLEdBQVVhLEdBQ2xELElBQ04sQ0FDRUcsUUFBUyxJQUNUQyxPQUFRLE1BRVJDLFFBQVMsQ0FDUEMsT0FBUSxzQkFJYkMsTUFBS0MsR0FDR0EsRUFBSUMsTUFFakIsb2tCQ2RlLFNBQVNDLEdBQ3RCQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxHQUVBLE1BQU1DLEVBQU9SLEVBQWVBLEVBQWFsQyxPQUFTLEtBQ2xELEdBQ0UwQyxTQUVBQSxFQUFLckgsT0FBUyxHQUNibUgsSUFBa0JBLEVBQWMvRSxLQUFLaUYsR0FFdEMsT0FBT0MsUUFBUUMsUUFBUSxJQUV6QixNQUFNQyxFQUFhTixHQXBDTSxpREFxQ3pCLElBQUlPLEVBQUlDLEdBQUFBLEdBQUFBLEdBQUEsQ0FBS0wsUUFBU1AsR0FBaUJFLEdBQVUsR0FBQSxDQUFFRCxTQUluRCxHQUhJRSxJQUNGUSxFQUFJQyxHQUFBQSxNQUFRRCxHQUFJLENBQUEsRUFBQSxDQUFFUixhQUVoQkcsRUFBaUIsQ0FDbkIsTUFBTU8sRUFBU1AsRUFBZ0JRLFdBQy9CSCxFQUFJQyxHQUFBQSxNQUFRRCxHQUFJLENBQUEsRUFBQSxDQUFFRSxVQUNwQixDQUNBLE9BQU8zQixHQUFRd0IsRUFBWUMsR0FBTWhCLE1BQUtDLEdBQzdCQSxFQUFJbUIsVUFFZixva0JDdkNBLFNBQVNDLEdBQXNCQyxFQUFPQyxHQUNwQyxJQUFLRCxHQUFTQSxFQUFNL0gsT0FBUyxFQUMzQixPQUFPc0gsUUFBUUMsUUFBUSxJQUV6QixJQUFJVSxFQUFPLEdBQ1gsTUFXTUMsRUFYZ0JILEVBQU1wRSxLQUFJd0UsSUFDOUIsTUFBTTVILEVBQXFCLFNBQWQ0SCxFQUFLNUgsS0FBa0IsT0FBUyxVQUM3QyxJQUFJVyxFQUFNLE9BQU9pSCxFQUFLL0csT0FBT3JCLE1BQU0sS0FBSyxHQUFHa0MsaUJBQWlCMUIsVUFDMUQ0SCxFQUFLL0csU0FNUCxPQUpJK0csRUFBS0MsT0FDUGxILEdBQU8sSUFBSWlILEVBQUtDLFFBRWxCSCxHQUFRLEdBQUcvRyxLQUNYd0csR0FBQUEsR0FBQSxDQUFBLEVBQVlTLEdBQUksQ0FBQSxFQUFBLENBQUVqSCxPQUFHLElBRWM0QyxRQUFPLFNBQzFDSCxFQUNBMEUsR0FJQSxPQURBMUUsRUFBSTBFLEVBQWNuSCxLQUFPbUgsRUFDbEIxRSxDQUNSLEdBQUUsQ0FBRSxHQUNMLE9BQU9xQyxHQUFRZ0MsRUFBa0IsQ0FDL0JNLElBQUtMLEVBQUtNLE1BQU0sR0FBSSxLQUVuQjlCLE1BQUtDLEdBQ0NBLEVBQUltQixTQUFTbEUsS0FBSXdFLElBQ0osQ0FDaEI1SCxLQUFNLGdCQUNORixXQUFZLENBQ1ZtSSxTQUFVTCxFQUFLOUgsV0FBV21JLFNBQzFCdEgsSUFBS2dILEVBQWVDLEVBQUs5SCxXQUFXYSxLQUFLQSxJQUN6Q2tILEtBQU1GLEVBQWVDLEVBQUs5SCxXQUFXYSxLQUFLa0gsS0FDMUNoSCxPQUFROEcsRUFBZUMsRUFBSzlILFdBQVdhLEtBQUtFLE9BQzVDcUgsWUFBYVAsRUFBZUMsRUFBSzlILFdBQVdhLEtBQUt1SCxZQUNqREMsWUFBYVIsRUFBZUMsRUFBSzlILFdBQVdhLEtBQUt3SCxZQUNqRDdHLFFBQVNzRyxFQUFLOUgsV0FBV3VCLE1BQ3pCWCxNQUFPcUIsR0FBTzZGLEVBQUs5SCxZQUFjLGdCQUFrQixvQkFFckRpQixTQUFVNkcsRUFBSzdHLGNBS3ZCLENBNkhBLFNBQVNxSCxHQUFrQkMsRUFBYWxFLEVBQU9tRSxHQUM3QyxJQUFJQyxFQUFzQnhFLEdBQXNCc0UsRUFBYWxFLEVBQU8sQ0FDbEUsa0JBQ0EsbUJBQ0EscUJBQ0EsdUJBQ0Esd0JBUUYsT0FOSW1FLElBRUZDLEVBQXNCQSxFQUFvQnpGLFFBQ3hDd0IsSUFBU2dFLEVBQVc3SCxTQUFTNkQsRUFBS3hFLFdBQVdZLFVBRzFDcUcsUUFBUUMsUUFDYndCLEVBQUksUUFBQ0QsRUFBcUIsSUFBSW5GLEtBQUlrQixJQUNoQyxNQUFNbUUsRUFBT3RCLEdBQUFBLE1BQ1I3QyxHQUFJLEdBQUEsQ0FDUHRFLEtBQU0sWUFDTjBJLGtCQUFrQixFQUNsQkMsY0FBYyxJQUdoQixjQURPRixFQUFRM0ksV0FBV21ELFdBQ25Cd0YsQ0FBTyxJQUdwQixDQW1CQSxNQUFNRyxHQUFjLENBQ2xCLGFBQ0EsWUFDQSxhQUNBLGNBQ0EsZUFDQSxpQkFDQSxtQkFFSUMsR0FBaUIsQ0FBQyxRQUFTLFVBQVcsVUFDdENDLEdBQWdCLENBQUMsVUFBVyxZQUM1QkMsR0FBYSxDQUFDLE9BQVEsV0E4VjVCLE1BQU1DLEdBQWtCQyxFQUFBQSxTQXhWakIsU0FDTEMsRUFDQXhDLEVBQ0F5QyxFQUNBQyxFQUNBQyxFQUNBQyxHQUNBbkYsTUFBRUEsR0FDRm9GLEVBQ0FDLEVBQ0FDLEdBRUEsTUFBTUMsYUFDSkEsRUFBWUMsc0JBQ1pBLEVBQXFCQyxlQUNyQkEsRUFBY0Msa0JBQ2RBLEVBQWlCQyxtQkFDakJBLEVBQWtCQyxZQUNsQkEsRUFBV0Msd0JBQ1hBLEVBQXVCQyx1Q0FDdkJBLEVBQXNDQyxrQ0FDdENBLEVBQWlDQyx3QkFDakNBLEVBQXVCQyxtQkFDdkJBLEVBQWtCQyxlQUNsQkEsRUFBY0MsUUFDZEEsRUFDQUMsc0JBQXVCQyxFQUFhNUQsY0FDcENBLEVBQWF4RSxXQUNiQSxFQUFVcUksV0FDVkEsRUFBVWhELGlCQUNWQSxFQUFnQmlELFFBQ2hCQSxFQUFPQyxzQkFDUEEsRUFBcUJDLGlCQUNyQkEsRUFBZ0JDLGdCQUNoQkEsRUFBZUMsaUJBQ2ZBLEdBQ0UxQixFQUVFMkIsR0FBYzdCLEdBQThCLElBQW5CQSxFQUFRekosT0FFakN1TCxHQUFjdEUsR0FBOEIsSUFBbkJBLEVBQVFqSCxPQUNqQ3dMLEVBQVd2QixFQUFhWSxHQUN4QlksRUFBbUIsR0FDbkJDLEVBQVcsQ0FBRW5MLEtBQU0sTUFBT3NDLEtBQU02QixFQUFPOUIsUUFBUyxJQUNoRCtJLEVBQVdyQixFQUFZTyxHQUN2QjdELEVBQ0orRCxTQUFpQmYsR0FBQUEsRUFBVTRCLEtBQTNCYixNQUFrQ2YsR0FBQUEsRUFBVTZCLElBQ3hDLENBRUUsa0JBQW1CN0IsRUFBUzRCLElBQUlFLFFBQVEsR0FDeEMsa0JBQW1COUIsRUFBUzZCLElBQUlDLFFBQVEsSUFFMUMsR0FDQUMsRUFBT3JDLEVBQWdCQSxFQUFjM0osTUFBTSxLQUFLLFFBQUt5QixFQVUzRCxHQVJFaUksRUFBUXpJLFNBQVMsb0JBQ0csOEJBQXBCd0ssRUFBU1EsUUFFVFAsRUFBaUJRLEtBOU1yQixTQUFtQ3ZILEVBQU84RyxHQUN4QyxNQUFxQixpQkFBVjlHLEdBQXVDLElBQWpCQSxFQUFNMUUsT0FDOUJzSCxRQUFRQyxRQUFRLENBQ3JCLENBQ0VoSCxLQUFNLGtCQUNOc0IsUUFBUzJKLEVBQVMzSixRQUNsQitKLElBQUtKLEVBQVNJLElBQ2RDLElBQUtMLEVBQVNLLElBQ2R4TCxXQUFZLENBQ1ZjLFFBQVMsbUJBQ1RGLE1BQU8sa0JBQ1BZLFFBQVMySixFQUFTM0osUUFDbEIrSixJQUFLSixFQUFTSSxJQUNkQyxJQUFLTCxFQUFTSyxLQUVoQnZLLFNBQVUsQ0FDUmYsS0FBTSxRQUNOZ0IsWUFBYSxDQUFDaUssRUFBU0ssSUFBS0wsRUFBU0ksU0FNdEN0RSxRQUFRQyxRQUFRLEdBQ3pCLENBc0wwQjJFLENBQTBCeEgsRUFBTzhHLEtBRXJERixHQUFjN0IsRUFBUXpJLFNBQVMsaUJBQ2pDeUssRUFBaUJRLEtBMU9yQixTQUE4QnZILEdBQzVCLE1BQXFCLGlCQUFWQSxHQUF1QyxJQUFqQkEsRUFBTTFFLE9BQzlCc0gsUUFBUUMsUUFBUSxDQUNyQixDQUNFaEgsS0FBTSxnQkFDTnNCLFFBQVMsZ0JBQ1QrSixJQUFLLEtBQ0xDLElBQUssS0FDTHhMLFdBQVksQ0FDVmMsUUFBUyxrQkFDVEYsTUFBTyxnQkFDUFksUUFBUyxnQkFDVCtKLElBQUssS0FDTEMsSUFBSyxNQUVQdkssU0FBVSxDQUNSZixLQUFNLFFBQ05nQixZQUFhLE9BS2QrRixRQUFRQyxRQUFRLEdBQ3pCLENBbU4wQjRFLENBQXFCekgsSUFFekMrRSxFQUFRekksU0FBUyxnQkFBaUIsQ0FDcEMsTUFBTW9MLEVBQVFoQixFQUFnQlAsR0FDOUJZLEVBQWlCUSxLQUFLbEQsRUFBQUEsUUFBS3FELEVBQU8sR0FDcEMsQ0FPQSxHQUxFM0MsRUFBUXpJLFNBQVMsMkJBdEdyQixTQUF1QjJJLEdBQ3JCLE1BQU0wQyxFQUFxQjFDLEVBQWNPLHNCQUN2Q1AsRUFBY2tCLFNBRWhCLElBQUl3QixhQUFrQixFQUFsQkEsRUFBb0JyTSxRQUFTLEVBQy9CLE9BQU8sRUFHVCxNQUFNc00sRUFDSjNDLEVBQWNjLGtDQUFrQ2QsRUFBY2tCLFNBQ2hFLElBQUl5QixhQUE4QixFQUE5QkEsRUFBZ0N0TSxRQUFTLEVBQzNDLE9BQU8sRUFFVCxNQUFNdU0sRUFBaUI1QyxFQUFjUyxrQkFBa0JULEVBQWNrQixTQUNyRSxPQUFPMEIsZUFBQUEsRUFBZ0J2TSxRQUFTLENBQ2xDLENBd0ZJd00sQ0FBYzdDLElBRWQ4QixFQUFpQlEsS0FqTXJCLFNBQWdDdkgsR0FDOUIsTUFBcUIsaUJBQVZBLEdBQXVDLElBQWpCQSxFQUFNMUUsT0FDOUJzSCxRQUFRQyxRQUFRLENBQ3JCLENBQ0VoSCxLQUFNLHlCQUNOc0IsUUFBUyx5QkFDVCtKLElBQUssS0FDTEMsSUFBSyxLQUNMeEwsV0FBWSxDQUNWYyxRQUFTLDRCQUNURixNQUFPLGVBQ1BZLFFBQVMseUJBQ1QrSixJQUFLLEtBQ0xDLElBQUssTUFFUHZLLFNBQVUsQ0FDUmYsS0FBTSxRQUNOZ0IsWUFBYSxPQUtkK0YsUUFBUUMsUUFBUSxHQUN6QixDQTBLMEJrRixDQUF1Qi9ILElBRTNDNEcsR0FBYzdCLEVBQVF6SSxTQUFTLGFBQWMsQ0FFL0MsTUFBTThGLEVBQWVvRSxFQUNyQixHQUFJakUsRUFBUWpHLFNBQVMsYUFBYyxDQUNqQyxNQUFNcUwsRUFBcUJuQyxFQUFzQlcsR0FDakRZLEVBQWlCUSxLQXhRdkIsU0FBa0NTLEVBQVloSSxHQUM1QyxPQUFPNEMsUUFBUUMsUUFDYmpELEdBQXNCb0ksRUFBWWhJLEVBQU8sQ0FBQyxVQUFXLFNBQVNmLEtBQUlrQixJQUFTLENBQ3pFdEUsS0FBTSxpQkFDTkYsV0FBVXFILEdBQUFBLE1BQ0w3QyxHQUFJLENBQUEsRUFBQSxDQUNQakQsTUFBT2lELEVBQUsvRCxLQUNaRyxNQUFPLG1CQUVUSyxTQUFVLENBQUVmLEtBQU0sUUFBU2dCLFlBQWEsQ0FBQ3NELEVBQUtnSCxJQUFLaEgsRUFBSytHLFVBRzlELENBNlBRZSxDQUF5Qk4sRUFBb0IzSCxJQUUzQ3VDLEVBQVFqRyxTQUFTLFNBQ25CeUssRUFBaUJRLEtBbExoQjNFLFFBQVFDLFFBQVEsQ0FDckIsQ0FDRWhILEtBQU0sT0FDTnNCLFFBQVMsT0FDVCtKLElBQUssS0FDTEMsSUFBSyxLQUNMeEwsV0FBWSxDQUNWYyxRQUFTLE9BQ1RGLE1BQU8sT0FDUFksUUFBUyxPQUNUK0osSUFBSyxLQUNMQyxJQUFLLE1BRVB2SyxTQUFVLENBQ1JmLEtBQU0sUUFDTmdCLFlBQWEsT0FxS2pCLENBRUEsR0FBSWdLLEdBQWN0RSxFQUFRakcsU0FBUyxjQUFlLENBQ2hELE1BQU1vRyxFQUFrQixDQUFDLFFBQVMsVUFBVyxVQUN6Q3FDLEVBQVF6SSxTQUFTLGFBQ25Cb0csRUFBZ0I2RSxLQUFLLFdBRXZCUixFQUFpQlEsS0FDZnJGLEdBQ0VsQyxFQUNBb0MsRUFDQTZFLEVBQ0EzRSxFQUNBbUUsRUFBaUJqRyxLQUFLLEtBQ3RCOEYsRUFDQTdELEVBQ0FDLEdBR04sQ0FDQSxHQUFJbUUsR0FBY3RFLEVBQVFqRyxTQUFTLFdBQVksQ0FDN0MsTUFBTTRMLEVBQWtCekMsRUFBZVUsRUFBUyxZQUMxQ2hDLEVBQWEsQ0FBQyxlQUNwQkEsRUFBV29ELFFBQVEzQyxJQUNuQlQsRUFBV29ELFFBQVE5QyxJQUNuQk4sRUFBV29ELFFBQVE1QyxJQUNuQm9DLEVBQWlCUSxLQUNmdEQsR0FBa0JpRSxFQUFpQmxJLEVBQU9tRSxHQUU5QyxDQUNGLENBQ0EsR0FBSXlDLEdBQWM3QixFQUFRekksU0FBUyxnQkFBaUIsQ0FDbEQsR0FBSXVLLEdBQWN0RSxFQUFRakcsU0FBUyxjQUFlLENBQ2hELE1BQU04RixFQUFlb0UsRUFDakJyQixHQUFtQyxLQUFsQkEsSUFDbkIvQyxFQUFhK0YsS0FBT2hELEdBRXRCLE1BQU16QyxFQUFrQixDQUFDLFVBQVcsWUFDOUIwRixFQUFVekMsRUFBcUJBLEVBQW1CbkYsS0FBSyxLQUFPLEtBQ3BFdUcsRUFBaUJRLEtBQ2ZyRixHQUNFbEMsRUFDQW9DLEVBQ0E2RSxFQUNBM0UsRUFDQThGLEVBQ0E5QixFQUNBN0QsRUFDQUMsR0FDQVgsTUFBSzdELEdBQ0RnSCxFQUNLQSxFQUFjaEgsRUFBU21KLEdBRXpCbkosSUFHYixDQUNBLEdBQUkySSxHQUFjdEUsRUFBUWpHLFNBQVMsV0FBWSxDQUM3QyxNQUFNK0wsRUFBVTVDLEVBQWVVLEdBQ3pCaEMsRUFBYSxDQUFDLGVBQ3BCQSxFQUFXb0QsUUFBUTNDLElBQ25CVCxFQUFXb0QsUUFBUTlDLElBQ25CTixFQUFXb0QsUUFBUTdDLElBQ25CcUMsRUFBaUJRLEtBQUt0RCxHQUFrQm9FLEVBQVNySSxFQUFPbUUsR0FDMUQsQ0FDRixDQUVBLE1BQU1tRSxFQUFXdkQsRUFBUXpJLFNBQVMsU0FDNUJpTSxFQUFjeEQsRUFBUXpJLFNBQVMsWUFFckMsR0FBSXNLLEdBQWMwQixHQUFZQyxFQUFhLENBQ3pDLEdBQUloRyxFQUFRakcsU0FBUyxhQUFjLENBQ2pDLE1BQU11TCxFQUFpQm5DLEVBQWtCUyxHQUN6QyxJQUFJcUMsRUFFRkEsRUFERVgsRUFBZVksT0FBTWhGLEdBQXNCLFlBQWRBLEVBQUs1SCxPQUNqQnVILEdBQ2pCeUUsRUFDQXZFLEdBQ0F2QixNQUFLN0QsR0FDRGdILEVBQ0tBLEVBQWNoSCxFQUFTbUosR0FFekJuSixJQUdVMkgsRUFBd0JnQyxHQUN4QzlGLE1BQUtpRyxHQUNKNUUsR0FBc0I0RSxFQUFZMUUsS0FFbkN2QixNQUFLN0QsR0FDQWdILEVBQ0tBLEVBQWNoSCxFQUFTbUosR0FFekJuSixJQUdiNkksRUFBaUJRLEtBL1B2QixTQUE4QmlCLEVBQWtCeEksRUFBT3NJLEVBQVVDLEdBQy9ELE9BQU9DLEVBQWlCekcsTUFBSzJHLEdBSXBCOUksR0FIWThJLEVBQWMvSixRQUFPZ0ssR0FDM0IsU0FBWEEsRUFBRTlNLEtBQWtCeU0sRUFBV0MsSUFFUXZJLEVBQU8sQ0FDOUMsa0JBQ0Esa0JBQ0Esd0JBR04sQ0FxUFE0SSxDQUFxQkosRUFBa0J4SSxFQUFPc0ksRUFBVUMsR0FFNUQsQ0FDQSxHQUFJMUIsR0FBY3RFLEVBQVFqRyxTQUFTLGNBQWUsQ0FDaEQsTUFBTW9HLEVBQWtCLEdBQ3BCNEYsR0FDRjVGLEVBQWdCNkUsS0FBSyxRQUVuQmdCLEdBQ0Y3RixFQUFnQjZFLEtBQUssV0FFdkIsTUFBTW5GLEVBQ0orQyxHQUFtQyxLQUFsQkEsRUFBdUIsQ0FBRWdELEtBQU1oRCxHQUFrQixHQUNoRXFCLEdBQXlCQSxFQUFzQixzQkFDakRwRSxFQUFhLG9CQUNYb0UsRUFBc0Isc0JBSXRCSSxHQUFjN0IsRUFBUXpJLFNBQVMsZ0JBQ2pDOEYsRUFBYXlHLFlBQWMsR0FFN0IsTUFBTUMsRUFBUXZDLEVBQVF0SCxLQUFJZ0MsR0FBSyxPQUFPQSxNQUFLVCxLQUFLLEtBQ2hEdUcsRUFBaUJRLEtBQ2ZyRixHQUNFbEMsRUFDQW9DLEVBQ0E2RSxFQUNBM0UsRUFDQXdHLEVBQ0F4QyxFQUNBN0QsRUFDQUMsR0FDQVgsTUFBSzdELEdBQ0RnSCxFQUNLQSxFQUFjaEgsRUFBU21KLEdBRXpCbkosSUFHYixDQUNBLEdBQUkySSxHQUFjdEUsRUFBUWpHLFNBQVMsV0FBWSxDQUM3QyxNQUFNeU0sRUFBY3RELEVBQWVVLEdBQVN4SCxRQUFPd0IsSUFDN0NBLEVBQUt4RSxXQUFXYSxLQUNYMkQsRUFBS3hFLFdBQVdhLElBQUlGLFNBQVMsV0FJbEM2SCxFQUFhLENBQUMsZUFDcEJBLEVBQVdvRCxRQUFROUMsSUFDbkJOLEVBQVdvRCxRQUFRN0MsSUFDbkJQLEVBQVdvRCxRQUFRNUMsSUFDZDJELEdBQ0huRSxFQUFXb0QsS0FBSyxRQUViZ0IsR0FDSHBFLEVBQVdvRCxLQUFLLFdBRWR2QyxFQUNGK0IsRUFBaUJRLEtBQ2Z0RCxHQUFrQjhFLEVBQWEvSSxFQUFPbUUsR0FBWXBDLE1BQUtuRCxHQUNyRHNHLEVBQWdCQSxFQUFjdEcsRUFBUXlJLEdBQVF6SSxLQUlsRG1JLEVBQWlCUSxLQUNmdEQsR0FBa0I4RSxFQUFhL0ksRUFBT21FLEdBRzVDLENBQ0YsQ0FDQSxHQUFJeUMsR0FBYzdCLEVBQVF6SSxTQUFTLFVBQVcsQ0FDNUMsR0FBSWlHLEVBQVFqRyxTQUFTLGFBQWMsQ0FDakMsTUFBTTBNLEVBQWtCL0MsRUFBbUJFLEdBQzNDWSxFQUFpQlEsS0FDZnZCLEVBQXdCZ0QsRUFBaUJoSixFQUFPcUgsRUFBTWhDLEdBQVV0RCxNQUM5RG5ELEdBQ0VzRyxFQUFnQkEsRUFBY3RHLEVBQVF5SSxFQUFNLFVBQVl6SSxJQUdoRSxDQU1BLEdBTEFtSSxFQUFpQlEsS0FDZnJCLEVBQWVsRyxFQUFPdUcsRUFBU3ZCLEVBQWVLLEdBQVV0RCxNQUFLbkQsR0FDM0RzRyxFQUFnQkEsRUFBY3RHLEVBQVF5SSxFQUFNLFVBQVl6SSxLQUd4RGlJLEdBQWN0RSxFQUFRakcsU0FBUyxXQUFZLENBQzdDLE1BQU0yTSxFQUFleEQsRUFBZVUsR0FDOUJoQyxFQUFhLENBQUMsZUFDaEJhLEdBQ0ZiLEVBQVdvRCxRQUFROUMsR0FBWTlGLFFBQU83RSxLQUFPQSxJQUFNa0wsTUFFckRiLEVBQVdvRCxRQUFRM0MsSUFDbkJULEVBQVdvRCxRQUFRN0MsSUFDbkJQLEVBQVdvRCxRQUFRNUMsSUFFbkJvQyxFQUFpQlEsS0FDZnRELEdBQWtCZ0YsRUFBY2pKLEVBQU9tRSxHQUFZcEMsTUFBSzdELEdBQ3REZ0gsRUFBZ0JBLEVBQWNoSCxFQUFTbUosRUFBTSxVQUFZbkosSUFHL0QsQ0FDRixDQUNBLEdBQUkwSSxHQUFjN0IsRUFBUXpJLFNBQVMseUJBQTBCLENBQzNELEdBQUlpRyxFQUFRakcsU0FBUyxhQUFjLENBQ2pDLE1BQU00TSxFQUNKbkQsRUFBa0NJLEdBQ3BDWSxFQUFpQlEsS0FDZnpCLEVBQ0VvRCxFQUNBbEosR0FHTixDQUNBLEdBQUk2RyxHQUFjdEUsRUFBUWpHLFNBQVMsY0FBZSxDQUNoRCxNQUFNb0csRUFBa0IsQ0FBQyxlQUNuQk4sRUFDSitDLEdBQW1DLEtBQWxCQSxFQUF1QixDQUFFZ0QsS0FBTWhELEdBQWtCLEdBQ3BFNEIsRUFBaUJRLEtBQ2ZyRixHQUNFbEMsRUFDQW9DLEVBQ0E2RSxFQUNBM0UsRUFDQXFFLEVBQWlCbkcsS0FBSyxLQUN0QjhGLEVBQ0E3RCxFQUNBQyxHQUNBWCxNQUFLN0QsR0FDRGdILEVBQ0tBLEVBQWNoSCxFQUFTbUosRUFBTSx5QkFFL0JuSixJQUdiLENBQ0EsR0FBSTJJLEdBQWN0RSxFQUFRakcsU0FBUyxXQUFZLENBQzdDLE1BQU0rTCxFQUFVNUMsRUFBZVUsR0FDekJoQyxFQUFhLElBQUlTLElBQ3ZCVCxFQUFXb0QsUUFBUTlDLElBQ25CTixFQUFXb0QsUUFBUTdDLElBQ25CUCxFQUFXb0QsUUFBUTVDLElBRW5Cb0MsRUFBaUJRLEtBQUt0RCxHQUFrQm9FLEVBQVNySSxFQUFPbUUsR0FDMUQsQ0FDRixDQUU2QnZCLFFBQVF1RyxJQUFJcEMsR0FDdENoRixLQUFLcUgsRUFBTyxTQUNackgsTUFBSzdELElBQ0o4SSxFQUFTOUksUUFBVUEsQ0FBTyxJQUUzQm1MLE9BQU1DLElBQ0x0QyxFQUFTdUMsTUFBUUQsQ0FBRyxJQUVIdkgsTUFBSyxLQUN4QnFELEVBQVFwQyxHQUFBQSxNQUNIZ0UsR0FBUSxDQUFBLEVBQUEsQ0FDWDlJLFFBQVNGLEdBQWtCQyxFQUFZK0ksRUFBUzlJLFFBQVM4QixLQUN6RCxHQUVOLEdBRW1ELElBQUssQ0FDdER3SixTQUFTLElDMWtCTEMsR0FBT0MsRUFBQUEsZUFBZSxDQUMxQkMsWUFBYSxLQUViQyxVQ05tQixDQUNuQkMsR0FBSSxDQUNGQyxZQUFhLENBQ1gzTSxRQUFTLFVBQ1QsNEJBQTZCLDBCQUM3Qix1QkFBd0IsMEJBQ3hCLGdDQUNFLDJDQUNGLHNDQUNFLHNEQUNGLHFDQUNFLHFEQUNGNE0sU0FBVSxPQUNWQyxRQUFTLFVBQ1RDLEtBQU0sU0FDTkMsa0JBQW1CLGtCQUNuQkMsSUFBSyxNQUNMQyxPQUFRLFlBQ1IscUJBQXNCLFVBQ3RCLHVCQUF3Qix1QkFDeEJDLGdCQUFpQixvQkFDakJDLE9BQVEsVUFDUiw2QkFBOEIsd0NBQzlCQyxVQUFXLFVBQ1h0TyxZQUFhLE9BQ2IsY0FBZSxrQkFDZixtQkFBb0IsaUJBQ3BCdU8sVUFBVyxZQUNYQyxNQUFPLFFBQ1AsZUFBZ0Isd0JBQ2hCMU8sT0FBUSxRQUNSLHVCQUF3QixRQUN4QjJPLGFBQWMsbUJBQ2RDLFFBQVMsV0FDVCxlQUFnQixNQUNoQkMsS0FBTSxNQUNObEosT0FBUSxRQUNSLDBCQUEyQiwyQ0FDM0Isc0JBQXVCLFFBQ3ZCLHFCQUFzQixzQ0FDdEIsMkJBQTRCLG1CQUM1QiwyQ0FDRSwwQ0FDRixvQkFBcUIscUJBQ3JCLGdCQUFpQix5Q0FDakIsc0JBQXVCLG9CQUN2QixrQkFBbUIscUJBQ25CLDJCQUE0QiwrQkFDNUIsZ0RBQ0UsMkRBQ0YsK0NBQ0UsMERBQ0YsK0NBQ0UsOEZBQ0YseUJBQTBCLDBDQUMxQixnQ0FDRSw0Q0FDRiw0QkFBNkIsa0NBQzdCbUosT0FBUSxTQUNSQyxPQUFRLFNBQ1JDLFFBQVMsVUFDVHRILEtBQU0sY0FDTixnQkFBaUIsNENBQ2pCLG9CQUFxQixrQ0FDckIseUJBQTBCLDBCQUMxQixxQkFBc0Isc0NBQ3RCLHVCQUF3Qix3Q0FDeEIscUJBQXNCLHFDQUN0QixXQUFZLFdBQ1osY0FBZSxZQUNmdUgsS0FBTSxjQUNOLG1CQUFvQiw2QkFDcEIsa0JBQW1CLDhCQUNuQiw0QkFBNkIsa0NBQzdCQyxNQUFPLFFBQ1AsWUFBYSxlQUNiQyxNQUFPLFNBQ1BDLE1BQU8sUUFHWEMsR0FBSSxDQUNGdEIsWUFBYSxDQUNYM00sUUFBUyxVQUNULDRCQUE2Qiw2QkFDN0IsdUJBQXdCLGdCQUN4QixnQ0FDRSwyQ0FDRixzQ0FDRSxzREFDRixxQ0FDRSxxREFDRjRNLFNBQVUsU0FDVkMsUUFBUyxVQUNUQyxLQUFNLE9BQ05vQixTQUFVLHdCQUNWbkIsa0JBQW1CLGVBQ25CQyxJQUFLLE1BQ0xDLE9BQVEsU0FDUmtCLFFBQVMsY0FDVCxxQkFBc0IsUUFDdEIsdUJBQXdCLHVCQUN4QmpCLGdCQUFpQixtQkFDakJDLE9BQVEsU0FDUiw2QkFBOEIsMkNBQzlCQyxVQUFXLFlBQ1h0TyxZQUFhLGNBQ2IsY0FBZSxxQkFDZixtQkFBb0IseUJBQ3BCdU8sVUFBVyxZQUNYQyxNQUFPLFFBQ1AsZUFBZ0IsZUFDaEIxTyxPQUFRLFFBQ1IsdUJBQXdCLFFBQ3hCMk8sYUFBYyxnQkFDZEMsUUFBUyxhQUNULGVBQWdCLElBQ2hCWSxTQUFVLFdBQ1ZYLEtBQU0sUUFDTlksU0FBVSxpQkFDVjlKLE9BQVEsU0FDUiwwQkFBMkIsa0NBQzNCLHNCQUF1QixTQUN2QixxQkFBc0Isb0NBQ3RCLDJCQUE0QixvQkFDNUIsMkNBQ0UsaURBQ0Ysb0JBQXFCLGNBQ3JCLGdCQUFpQiwrQkFDakIsc0JBQXVCLGVBQ3ZCLGtCQUFtQixrQkFDbkIsMkJBQTRCLCtCQUM1QixnREFDRSwyREFDRiwrQ0FDRSwwREFDRiwrQ0FDRSw4RkFDRix5QkFBMEIsMENBQzFCLGdDQUNFLDRDQUNGLDRCQUE2QixtQ0FDN0JtSixPQUFRLFNBQ1JDLE9BQVEsUUFDUkMsUUFBUyxVQUNUdEgsS0FBTSxPQUNOLGdCQUFpQiwwQkFDakIseUJBQTBCLDZCQUMxQix5QkFBMEIsb0JBQzFCLG9CQUFxQiw2QkFDckIsd0JBQXlCLG1CQUN6Qix5QkFBMEIsNEJBQzFCLHFCQUFzQixrQ0FDdEIsdUJBQXdCLG1DQUN4QixxQkFBc0IsOEJBQ3RCLHFCQUFzQixzQkFDdEIsV0FBWSxXQUNaLGNBQWUsY0FDZnVILEtBQU0sT0FDTlMsTUFBTyxRQUNQLG1CQUFvQix1QkFDcEIsa0JBQW1CLDJCQUNuQiw0QkFBNkIsNEJBQzdCUixNQUFPLFFBQ1AsWUFBYSxZQUNiQyxNQUFPLFlBQ1BDLE1BQU8sYUFHWE8sR0FBSSxDQUNGNUIsWUFBYSxDQUNYM00sUUFBUyxTQUNULDRCQUE2Qiw0QkFDN0IsdUJBQXdCLGtCQUN4QixnQ0FDRSxrREFDRixzQ0FDRSx3REFDRixxQ0FDRSx5REFDRjRNLFNBQVUsWUFDVkMsUUFBUyxVQUNUQyxLQUFNLFdBQ04wQixxQkFBc0IsYUFDdEJOLFNBQVUscUJBQ1ZsQixJQUFLLFFBQ0xDLE9BQVEsVUFDUmtCLFFBQVMscUJBQ1QscUJBQXNCLFdBQ3RCLHVCQUF3Qix3QkFDeEJqQixnQkFBaUIseUJBQ2pCQyxPQUFRLFNBQ1IsNkJBQThCLG9DQUM5QkMsVUFBVyxZQUNYdE8sWUFBYSxZQUNidU8sVUFBVyxXQUNYQyxNQUFPLFNBQ1AsZUFBZ0IsZ0JBQ2hCLGNBQWUsY0FDZixtQkFBb0IsWUFDcEIxTyxPQUFRLGNBQ1IsdUJBQXdCLGNBQ3hCMk8sYUFBYyxjQUNkQyxRQUFTLGNBQ1QsZUFBZ0IsTUFDaEJZLFNBQVUsVUFDVlgsS0FBTSxPQUNOWSxTQUFVLG9CQUNWOUosT0FBUSxPQUNSLDBCQUEyQixxQ0FDM0Isc0JBQXVCLE1BQ3ZCLHFCQUFzQix1Q0FDdEIsMkJBQTRCLGtCQUM1QiwyQ0FDRSxvREFDRixvQkFBcUIsY0FDckIsZ0JBQWlCLHdDQUNqQixzQkFBdUIsb0JBQ3ZCLDJCQUE0QixnQ0FDNUIsZ0RBQ0UsMERBQ0YsK0NBQ0UscURBQ0YsK0NBQ0UsZ0VBQ0YseUJBQTBCLGdDQUMxQixnQ0FBaUMsa0NBQ2pDLDRCQUE2Qix1Q0FDN0Isa0JBQW1CLFdBQ25CbUosT0FBUSxPQUNSQyxPQUFRLFFBQ1JDLFFBQVMsUUFDVHRILEtBQU0sVUFDTixnQkFBaUIsMkJBQ2pCLHlCQUEwQiw4QkFDMUIseUJBQTBCLG1CQUMxQixvQkFBcUIsK0JBQ3JCLHdCQUF5QixrQkFDekIseUJBQTBCLDBCQUMxQixxQkFBc0IsMkJBQ3RCLHVCQUF3Qiw2QkFDeEIscUJBQXNCLGdDQUN0QixxQkFBc0Isd0JBQ3RCLFdBQVksYUFDWixjQUFlLGVBQ2Z1SCxLQUFNLGNBQ05TLE1BQU8sUUFDUCxtQkFBb0IsMkJBQ3BCLGtCQUFtQiw0QkFDbkIsNEJBQTZCLDJCQUM3QlIsTUFBTyxTQUNQLFlBQWEsWUFDYkMsTUFBTyxpQkFDUEMsTUFBTyxXQUdYUyxHQUFJLENBQ0Y5QixZQUFhLENBQ1gzTSxRQUFTLFFBQ1QsNEJBQTZCLDJCQUM3Qix1QkFBd0IsdUJBQ3hCLGdDQUNFLDRDQUNGLHNDQUNFLHFEQUNGLHFDQUNFLG9EQUNGNE0sU0FBVSxNQUNWQyxRQUFTLFdBQ1RDLEtBQU0sT0FDTm9CLFNBQVUsNEJBQ1ZuQixrQkFBbUIsa0JBQ25CQyxJQUFLLFVBQ0xDLE9BQVEsU0FDUmtCLFFBQVMsZ0JBQ1QscUJBQXNCLFVBQ3RCLHVCQUF3QixnQ0FDeEJqQixnQkFBaUIsbUJBQ2pCQyxPQUFRLE9BQ1IsNkJBQ0UsdURBQ0ZDLFVBQVcsU0FDWHRPLFlBQWEsTUFDYixjQUFlLGtDQUNmLG1CQUFvQixvQkFDcEJ1TyxVQUFXLFdBQ1hDLE1BQU8sT0FDUCxlQUFnQixpQkFDaEIxTyxPQUFRLFdBQ1IsdUJBQXdCLFdBQ3hCMk8sYUFBYyxpQkFDZEMsUUFBUyxhQUNULGVBQWdCLE9BQ2hCWSxTQUFVLFFBQ1ZYLEtBQU0sU0FDTlksU0FBVSxnQkFDVjlKLE9BQVEsU0FDUiwwQkFBMkIsdUNBQzNCLHNCQUF1QixTQUN2QixxQkFBc0Isb0NBQ3RCLDJCQUE0QiwwQkFDNUIsMkNBQ0UsNENBQ0Ysb0JBQXFCLG1CQUNyQixnQkFBaUIsK0NBQ2pCLHNCQUF1Qiw0QkFDdkIsa0JBQW1CLHFCQUNuQiwyQkFBNEIscUNBQzVCLGdEQUNFLGtFQUNGLCtDQUNFLGdFQUNGLCtDQUNFLDZGQUNGLHlCQUEwQixxQ0FDMUIsNkJBQThCLG1DQUM5QiwrQkFBZ0MscUNBQ2hDLDRCQUE2Qiw4QkFDN0JtSixPQUFRLFFBQ1JDLE9BQVEsUUFDUkMsUUFBUyxTQUNUdEgsS0FBTSxhQUNOLGdCQUFpQiw0QkFDakIseUJBQTBCLHlCQUMxQixvQkFBcUIseUNBQ3JCLHlCQUEwQixrQ0FDMUIscUJBQXNCLHVDQUN0Qix1QkFBd0IsbUNBQ3hCLHFCQUFzQix5Q0FDdEIscUJBQXNCLHVDQUN0QixXQUFZLFNBQ1osY0FBZSxVQUNmdUgsS0FBTSxVQUNOUyxNQUFPLE1BQ1AsbUJBQW9CLDJCQUNwQixrQkFBbUIsMkJBQ25CLDRCQUE2Qiw0QkFDN0JSLE1BQU8sVUFDUCxZQUFhLGNBQ2JDLE1BQU8sU0FDUEMsTUFBTyxZQUdYVSxHQUFJLENBQ0YvQixZQUFhLENBQ1gzTSxRQUFTLFNBQ1QsNEJBQTZCLDhCQUM3Qix1QkFBd0IscUJBQ3hCLGdDQUNFLGdEQUNGLHNDQUNFLDJEQUNGLHFDQUNFLDJEQUNGNE0sU0FBVSxPQUNWQyxRQUFTLFdBQ1RDLEtBQU0sV0FDTkMsa0JBQW1CLG9CQUNuQm1CLFNBQVUsa0NBQ1ZsQixJQUFLLFFBQ0xDLE9BQVEsU0FDUmtCLFFBQVMsbUJBQ1QscUJBQXNCLE1BQ3RCLHVCQUF3QixvQkFDeEJqQixnQkFBaUIscUJBQ2pCQyxPQUFRLFVBQ1IsNkJBQThCLCtCQUM5QkMsVUFBVyxhQUNYdE8sWUFBYSxjQUNidU8sVUFBVyxVQUNYQyxNQUFPLFFBQ1AsZUFBZ0IsZ0JBQ2hCLG1CQUFvQiwyQkFDcEIsY0FBZSw0QkFDZjFPLE9BQVEsZUFDUix1QkFBd0IsZUFDeEIyTyxhQUFjLGVBQ2RDLFFBQVMsWUFDVCxlQUFnQixNQUNoQlksU0FBVSxZQUNWWCxLQUFNLE1BQ05ZLFNBQVUscUJBQ1Y5SixPQUFRLE1BQ1IsMEJBQTJCLHVDQUMzQixzQkFBdUIsTUFDdkIscUJBQXNCLHlDQUN0QiwyQkFBNEIsb0JBQzVCLDJDQUNFLHlDQUNGLG9CQUFxQixtQkFDckIsZ0JBQWlCLDBDQUNqQixzQkFBdUIscUJBQ3ZCLGtCQUFtQixlQUNuQiwyQkFBNEIscUNBQzVCLGdEQUNFLGtFQUNGLCtDQUNFLHNEQUNGLCtDQUNFLDBFQUNGLHlCQUEwQiw0QkFDMUIsNEJBQTZCLCtCQUM3Qm1KLE9BQVEsT0FDUkMsT0FBUSxRQUNSQyxRQUFTLFVBQ1R0SCxLQUFNLFlBQ04sZ0JBQWlCLCtCQUNqQix5QkFBMEIsNkJBQzFCLHlCQUEwQixxQkFDMUIsb0JBQXFCLG1DQUNyQix3QkFBeUIsMkJBQ3pCLHlCQUEwQiwwQkFDMUIscUJBQXNCLCtCQUN0Qix1QkFBd0Isa0NBQ3hCLHFCQUFzQix1Q0FDdEIscUJBQXNCLDJCQUN0QixXQUFZLFdBQ1osY0FBZSxXQUNmdUgsS0FBTSxXQUNOUyxNQUFPLE9BQ1AsbUJBQW9CLHNCQUNwQixrQkFBbUIsNEJBQ25CLDRCQUE2Qix5QkFDN0JSLE1BQU8sYUFDUCxZQUFhLFlBQ2JDLE1BQU8sb0JBQ1BDLE1BQU8sV0RsYVhXLFVBQVcsY0FDWEMsTUFBTyxDQUNMQyxhQUFhLEtFVGpCLFNBQVNDLEdBQVlDLEVBQUtDLFFBQ1gsSUFBUkEsSUFBaUJBLEVBQU0sQ0FBQSxHQUM1QixJQUFJQyxFQUFXRCxFQUFJQyxTQUVuQixHQUFLRixHQUEyQixvQkFBYkcsU0FBbkIsQ0FFQSxJQUFJQyxFQUFPRCxTQUFTQyxNQUFRRCxTQUFTRSxxQkFBcUIsUUFBUSxHQUM5REMsRUFBUUgsU0FBU0ksY0FBYyxTQUNuQ0QsRUFBTTNRLEtBQU8sV0FFSSxRQUFidVEsR0FDRUUsRUFBS0ksV0FDUEosRUFBS0ssYUFBYUgsRUFBT0YsRUFBS0ksWUFLaENKLEVBQUtNLFlBQVlKLEdBR2ZBLEVBQU1LLFdBQ1JMLEVBQU1LLFdBQVdDLFFBQVVaLEVBRTNCTSxFQUFNSSxZQUFZUCxTQUFTVSxlQUFlYixHQW5CWSxDQXFCMUQsQ0ZaQXpDLEdBQUt1RCwwcExHVUwsTUFBTUMsR0FBZ0JDLEdBQ3BCQSxFQUFXN1EsWUFDWDZRLEVBQVc3USxZQUNWNlEsRUFBVy9QLFNBQ1YrUCxFQUFXL1AsUUFBUXVDLFlBQVksS0FBT3dOLEVBQVcvUCxRQUFRN0IsT0FBUyxHQUNsRTRSLEVBQVcvUCxRQUFRd0MsVUFBVXVOLEVBQVcvUCxRQUFRdUMsWUFBWSxLQUFPLElBQ3JFLEdBRVd5TixHQUFjQSxFQUFHaFMsS0FBSXVJLFVBQzVCQSxTQUlLNUcsSUFBUDNCLFFBQ3NCLElBQWZBLEVBQUc0QyxVQUNXLElBQXJCNUMsRUFBRzRDLFFBQVEsS0FLTjVDLEVBQUd3RSxVQUFVeEUsRUFBRzRDLFFBQVEsS0FBTyxRQVJ0QyxHQTJCV3FQLEdBQWVDLEVBQUFBLFNBQzFCLENBQUNILEVBQVlJLEdBQVEsS0FDbkIsT0FBUUosRUFBVzNRLE9BQ2pCLElBQUssa0JBQ0gsTUFBTyxDQUFDMlEsRUFBV3pRLFFBQVN5USxFQUFXL1AsU0FDekMsSUFBSyxnQkFDTCxJQUFLLGVBQ0wsSUFBSyxPQUNILE1BQU8sQ0FBQytQLEVBQVd6USxTQUNyQixJQUFLLGlCQUNILE9BMUJrQ0wsRUEwQkQ4USxFQUFXOVEsS0ExQkplLEVBMEJVK1AsRUFBVy9QLFFBMUJULENBQzFEZixHQUFTZSxHQUFXQSxFQUFROUIsTUFBTSxLQUFLLEdBQ3BCLGlCQUFaOEIsRUFDSEEsRUFBUXVELFFBQVEsSUFBSTZNLE9BQU8sR0FBR0MsRUFBWSxRQUFDcFIsZUFBbUIsSUFDOUQsSUF1QkEsSUFBSyxnQ0FDTCxJQUFLLGNBQ0gsTUFBTyxDQUFDOFEsRUFBVzlRLE1BQ3JCLElBQUssaUJBQ0wsSUFBSyxZQUNMLElBQUssYUFDTCxJQUFLLGFBQ0wsSUFBSyxlQUNMLElBQUssY0FDTCxJQUFLLGtCQUNMLElBQUssaUJBQ0gsT0FBUWtSLEdBQVNKLEVBQVdyTyxVQUN4QixDQUNFcU8sRUFBV3hRLE9BQ1h3USxFQUFXN0YsS0FBSzlKLGNBQ2hCMlAsRUFBV08sVUFFYixDQUNFUCxFQUFXck8sVUFDWHFPLEVBQVdPLFNBQ1hQLEVBQVdRLE9BQVNSLEVBQVdRLE9BQU90UixVQUFPVSxHQUVyRCxJQUFLLFFBQ0wsSUFBSyxVQUNMLElBQUssU0FDSCxNQUFPLENBQ0xvUSxFQUFXOVEsS0FDWDhRLEVBQVdoUSxNQUFNd0QsUUFDZixJQUFJNk0sT0FBTyxHQUFHQyxFQUFZLFFBQUNOLEVBQVc5USxpQkFDdEMsS0FHTixJQUFLLGdCQUNMLElBQUssT0FDSCxPQUFPa1IsRUFDSCxDQUNFSixFQUFXOVEsTUFDVDhRLEVBQVdoUSxPQUNWZ1EsRUFBVy9QLFNBQVcrUCxFQUFXL1AsUUFBUTlCLE1BQU0sS0FBSyxHQUN2RDRSLEdBQWNDLElBRWhCLENBQ0VBLEVBQVc5USxLQUNYOFEsRUFBVy9SLEdBQ1hnUyxHQUFZRCxHQUNaRCxHQUFjQyxJQUl0QixRQUNFLE1BQU8sQ0FDTEEsRUFBVzlRLE1BQ1Q4USxFQUFXaFEsT0FDVmdRLEVBQVcvUCxTQUFXK1AsRUFBVy9QLFFBQVE5QixNQUFNLEtBQUssR0FDdkQ0UixHQUFjQyxJQWpGaUJTLElBQUN2UixFQUFNZSxDQW1GNUMsSUFFRixDQUFDZ0QsRUFBTW1OLEtBQ0wsTUFBTXhULEVBQUk4VCxVQUFVek4sR0FFcEIsT0FEQXJHLEVBQUV3VCxNQUFRQSxFQUNIeFQsQ0FBQyxJQzlITCxNQUFNK1QsR0FBMkJDLElBQ3RDLE1BRU1DLEVBQU9ELElBQVVBLEVBQU1DLEtBQU9ELEVBQU1FLE9BQVNGLEVBQU1HLFVBQWEsR0FFdEUsU0FBS0YsSUFKUyxDQUFDLEdBQUksSUFBSyxZQUlMdE4sT0FITCxDQUFDLEdBQUksVUFHY25FLFNBQVN5UixNQUcxQ0QsRUFBTUksa0JBQ0MsRUFBSSxFQUdBQyxHQUFjaFQsR0FDbEIsV0FBUEEsR0FDTyxnQkFBUEEsR0FDTyxjQUFQQSxHQUNPLHlCQUFQQSxFQUVXaVQsR0FBY0EsQ0FBQ3RLLEVBQVV1SyxFQUFLeFUsS0FFekMsSUFBS0EsRUFDSCxPQUVGLElBQUtpSyxJQUFhQSxFQUFTd0ssS0FBSy9DLFNBQzlCLE9BRUYsTUFBTWdELE1BQUVBLEVBQUtoRCxTQUFFQSxHQUFhekgsRUFBU3dLLEtBR3JDLE1BQU8sQ0FETEMsR0FBc0IsU0FBYkEsRUFBTSxHQUFnQjFVLEVBQUUsUUFBUyxDQUFFd1UsUUFBU3hVLEVBQUUsV0FBWSxDQUFFd1UsUUFDekQ5QyxFQUFTLEVBR2xCLFNBQVNpRCxHQUFxQnJPLEVBQU1rTyxFQUFLeFUsR0FFOUMsSUFBS0EsRUFDSCxPQUVGLEdBQWtCLGdCQUFkc0csRUFBS3RFLEtBQXdCLENBQy9CLEdBQWtCLGtCQUFkc0UsRUFBS3RFLEtBQ1AsTUFBTyxDQUFDLEdBQUloQyxFQUFFLGtCQUFtQixDQUFFd1UsU0FFckMsR0FBa0Isb0JBQWRsTyxFQUFLdEUsS0FDUCxNQUFPLENBQUMsR0FBSWhDLEVBQUUsbUJBQW9CLENBQUV3VSxTQUV0QyxHQUFrQiwyQkFBZGxPLEVBQUt0RSxLQUNQLE1BQU8sQ0FBQyxHQUFJaEMsRUFBRSw0QkFBNkIsQ0FBRXdVLFNBRy9DLElBQ0lJLEdBRENyUyxFQUFNYyxHQUFTa1EsR0FBYWpOLEVBQUt4RSxZQUFZLEdBRWxELEdBQ0V3RSxFQUFLeEUsV0FBV1ksTUFBTWdCLGNBQWNqQixTQUFTLGVBQzdDNkQsRUFBS3hFLFdBQVdZLE1BQU1nQixjQUFjakIsU0FBUyxlQUM3QyxDQUNBbVMsRUFBaUI1VSxFQUFFLHVCQUF3QixDQUFFd1UsUUFFN0MsTUFBTyxDQUFDSSxFQUFnQnJTLE9BQU1VLEVBRGJxRCxFQUFLeEUsV0FBV2MsUUFFbkMsQ0FFQSxHQUE4QixhQUExQjBELEVBQUt4RSxXQUFXWSxNQUVsQixPQURBa1MsRUFBaUI1VSxFQUFFLFdBQVksQ0FBRXdVLFFBQzFCLENBQUNJLEVBQWdCclMsT0FBTVUsT0FBV0EsR0FHM0MsR0FBOEIsWUFBMUJxRCxFQUFLeEUsV0FBV1ksTUFFbEIsT0FEQWtTLEVBQWlCNVUsRUFBRSxVQUFXLENBQUV3VSxRQUN6QixDQUFDSSxFQUFnQnJTLE9BQU1VLE9BQVdBLEdBRzNDLEdBQUlxRCxFQUFLeEUsV0FBVzBMLEtBQ2xCb0gsRUFBaUI1VSxFQUNmc0csRUFBS3hFLFdBQVcwTCxLQUFLOUosY0FBY21ELFFBQVEsWUFBYSxJQUN4RCxDQUFFMk4sWUFFQyxDQUtMSSxFQUFpQjVVLEVBSkhzRyxFQUFLeEUsV0FBV1ksTUFDM0JtRSxRQUFRLFNBQVUsSUFDbEJuRCxjQUNBbUQsUUFBUSxZQUFhLElBQ0UsQ0FBRTJOLE9BQzlCLENBRUEsR0FDRWxPLEVBQUt4RSxXQUFXUixLQUNXLFNBQTFCZ0YsRUFBS3hFLFdBQVdZLE9BQThDLFlBQTFCNEQsRUFBS3hFLFdBQVdZLE9BQ3JELENBQUEsSUFBQW1TLEVBQ0EsTUFBTWpQLEVBQVcwTixHQUFZaE4sRUFBS3hFLFlBQzVCMEwsRUFBK0IsUUFBM0JxSCxFQUFHdk8sRUFBS3hFLFdBQVdtSSxnQkFBaEI0SyxJQUF3QkEsT0FBeEJBLEVBQUFBLEVBQTBCSixLQUFLQyxNQUN0Q2hELEVBQVc2QyxHQUFZak8sRUFBS3hFLFdBQVdtSSxTQUFVdUssRUFBS3hVLEdBQzVELE1BQU8sQ0FDTDRVLEVBQ0FqUCxHQUFZcEQsRUFBTXFELEdBQ2xCdkMsRUFDQXVDLEVBQ0E0SCxFQUNBa0UsRUFFSixDQUNBLEdBQzRCLGtCQUExQnBMLEVBQUt4RSxXQUFXWSxPQUNVLHFCQUExQjRELEVBQUt4RSxXQUFXWSxNQUNoQixDQUNBLE1BQU1ZLFFBQUVBLEVBQU91RyxLQUFFQSxHQUFTdkQsRUFBS3hFLFdBRy9CLE1BQU8sQ0FBQzhTLEVBRlF0UixFQUFVcUMsR0FBWXJDLEVBQVE5QixNQUFNLEtBQUssR0FBSXFJLEdBQVF0SCxFQUVwQ2MsRUFBT3dHLE9BQU01RyxFQUQ3QnNSLEdBQVlqTyxFQUFLeEUsV0FBV21JLFNBQVV1SyxHQUV6RCxDQUNBLE1BQU8sQ0FBQ0ksRUFBZ0JyUyxFQUFNYyxFQUNoQyxDQUNBLE1BQU1uQixPQUFFQSxFQUFNRSxZQUFFQSxHQUFnQmtFLEVBQUt4RSxXQUMvQmdULEVBQVE1UyxFQUFPNlMsU0FBVyxLQUFLN1MsRUFBTzZTLGtCQUFvQixHQUMxREMsRUFBUTVTLEVBQVkyUyxTQUFXLEtBQUszUyxFQUFZMlMsV0FBYSxHQUM3REUsRUFBUS9TLEVBQU9LLEtBQ2YyUyxFQUFROVMsRUFBWUcsS0FDMUIsTUFBTyxDQUNMdkMsRUFBRSxlQUFnQixDQUFFd1UsUUFDcEIsR0FBR3hVLEVBQUUsU0FBVSxDQUFFd1UsV0FBVVMsSUFBUUgsS0FBUzlVLEVBQUUsY0FBZSxDQUMzRHdVLFdBQ0lVLElBQVFGLElBQ2QxTyxFQUFLNk8sZUFFVCxDQUVPLFNBQVNDLEdBQW1DOU8sRUFBTWtPLEVBQUt4VSxHQUU1RCxJQUFLQSxFQUNILE9BRUYsTUFBTXFWLEVBQU9DLEVBQVFBLFNBQUNDLFlBQVkvVSxPQUFPOEYsRUFBS3hFLFdBQVd1VCxPQUNuREcsRUFBTUYsV0FBU0UsTUFDckIsSUFBSWhTLEVBQU04QyxFQUFLeEUsV0FBVzJULFNBQ3RCelYsRUFBRSxVQUFXLENBQUV3VSxRQUNmeFUsRUFBRSxZQUFhLENBQUV3VSxRQVNyQixPQVBFaFIsRUFERTZSLEVBQUtLLFFBQVFGLEVBQUssT0FDZCxHQUFHaFMsS0FBT3hELEVBQUUsY0FDVHFWLEVBQUtLLFFBQVFGLEVBQUlHLEtBQUssQ0FBRUMsS0FBTSxJQUFNLE9BQ3ZDLEdBQUdwUyxLQUFPeEQsRUFBRSxjQUFlLENBQUV3VSxVQUU3QixHQUFHaFIsS0FBTzZSLEVBQUtRLFNBQVMsY0FFaENyUyxFQUFNLEdBQUdBLEtBQU82UixFQUFLUSxTQUFTLFdBQ3ZCclMsQ0FDVCxDQUVPLE1BQU1zUyxHQUFxQnpDLEdBRVYsMkJBQXBCQSxFQUFXclIsTUFDUyxTQUFwQnFSLEVBQVdyUixLQUVKLEdDckpJLFNBQWtCRixHQUMvQixNQUFNUCxFQUFRZ1MsR0FBYXpSLEdBQVksR0FDdkMsT0FBUUEsRUFBV1ksT0FDakIsSUFBSyxnQkFDTCxJQUFLLGtCQUNMLElBQUssZUFDTCxJQUFLLE9BQ0gsT0FBT25CLEVBQU0sSUFBTUEsRUFBTSxHQUMzQixJQUFLLGdDQUNMLElBQUssaUJBQ0gsT0FBT0EsRUFBTSxHQUNmLFFBQ0UsT0FBT0EsRUFBTUUsT0FBUyxHQUFrQixLQUFiRixFQUFNLEdBQzdCQSxFQUFNb0YsS0FBSyxNQUNYcEYsRUFBTSxJQUFNQSxFQUFNLEdBRTVCLENEdUlTd1UsQ0FBUzFDLEVBQVd2UixZQUdoQmtVLEdBQTBCQSxFQUFHQyxjQUFhalcsSUFBR3dVLFVBQ3hELElBQUluUixFQUFRLEdBQ1osTUFBTTZTLEVBQWtCRCxFQUFZLEdBT3BDLE9BTklDLElBQ0VBLEVBQWdCbFUsTUFBUWtVLEVBQWdCbFUsS0FBS1MsU0FBUyxjQUN4RFksRUFBTXFLLEtBQUsxTixFQUFFLFlBQWEsQ0FBRXdVLFNBRTlCblIsRUFBUUEsRUFBTXVELE9BQU8rTixHQUFxQnNCLEVBQVksR0FBSXpCLEtBRXJELElBQUksSUFBSTJCLElBQUk5UyxJQUFRc0QsS0FBSyxNQUFNOzRGRTFLb1MsSUFBV3hHLEVBQTdDLG9CQUFvQmlXLE1BQUtBLEtBQS9QQyxFQUFlQyxTQUFvUW5XLEVBQWxRb1csVUFBNFEsV0FBVyxJQUFJdlcsRUFBRSxDQUFDLElBQUksU0FBU0csRUFBRUgsRUFBRXdXLEdBQUcsSUFBSTlXLEVBQUVRLEVBQUVBLE9BQUUsSUFBU3NXLEVBQUVDLEVBQUVELEVBQUVDLEVBQUUsb0JBQW9CQyxPQUFPQSxPQUFPQyxLQUFLalgsRUFBRSxXQUFXLE9BQU8sU0FBU1MsR0FBZ0IsSUFBSUgsRUFBRSxDQUFDNFcsT0FBTyx1QkFBdUJDLE9BQU8sS0FBS0MsZ0JBQWUsRUFBR0MsTUFBTSxJQUFJQyxpQkFBZ0IsRUFBR0MsWUFBWSxLQUFLQyxZQUFZLEtBQUtDLE1BQUssRUFBR0MsT0FBTyxFQUFFQyxPQUFPLGlCQUFpQkMsYUFBYSxLQUFLQyxXQUFVLEVBQUdDLFVBQVMsRUFBR0MsWUFBVyxHQUFJakIsRUFBRSxXQUFXLElBQUlyVyxFQUFFLENBQUUsRUFBQyxPQUFPb0UsTUFBTXpFLFVBQVV5RyxRQUFRbEcsS0FBS3FYLFdBQVcsU0FBUzFYLEdBQUcsSUFBSSxJQUFJd1csS0FBS3hXLEVBQUUsQ0FBQyxJQUFJQSxFQUFFMlgsZUFBZW5CLEdBQUcsT0FBT3JXLEVBQUVxVyxHQUFHeFcsRUFBRXdXLEVBQUUsQ0FBRSxJQUFHclcsQ0FBQyxFQUFFVCxFQUFFLFNBQVNTLEdBQUcsTUFBTUEsRUFBRXlYLE9BQU8sS0FBS3pYLEVBQUVBLEVBQUUwWCxPQUFPLElBQUksSUFBSSxJQUFJN1gsRUFBRXdXLEVBQUVqVyxPQUFPSixHQUFHVCxFQUFFOFcsRUFBRS9VLE9BQU92QixHQUFHLEVBQUU0WCxFQUFFLEdBQUc3WCxFQUFFdVcsRUFBRXVCLFdBQVcsS0FBSzdYLEVBQUVSLEdBQUcsQ0FBQyxHQUFHLEtBQUtNLEVBQUV3VyxFQUFFdUIsV0FBVzdYLElBQUksTUFBTSxJQUFJOFgsc0JBQXNCLGlEQUFpREYsR0FBRzlYLEdBQUcsR0FBR0EsR0FBRyxJQUFJLEtBQUtBLEdBQUcsSUFBSUUsR0FBR0YsR0FBRyxJQUFJQSxHQUFHLElBQUksSUFBSUUsR0FBR0YsR0FBRyxJQUFJQSxHQUFHLElBQUksS0FBS0MsRUFBRSxLQUFLRCxFQUFFcUosU0FBUyxJQUFJLElBQUlySixHQUFHLEtBQUssS0FBS0EsR0FBRyxLQUFLQSxHQUFHQSxHQUFHLElBQUlBLEdBQUcsSUFBSUEsR0FBRyxJQUFJQSxHQUFHLElBQUlBLEdBQUcsSUFBSUEsR0FBRyxJQUFJd1csRUFBRW9CLE9BQU8xWCxHQUFHLEtBQUtzVyxFQUFFb0IsT0FBTzFYLEVBQUUsQ0FBQyxNQUFNLElBQUk0WCxDQUFDLEVBQUU1WCxFQUFFLFdBQVcsT0FBT2lELEtBQUs4VSxJQUFJekYsU0FBUzBGLEtBQUtDLGFBQWEzRixTQUFTNEYsZ0JBQWdCRCxhQUFhM0YsU0FBUzBGLEtBQUtHLGFBQWE3RixTQUFTNEYsZ0JBQWdCQyxhQUFhN0YsU0FBUzBGLEtBQUtJLGFBQWE5RixTQUFTNEYsZ0JBQWdCRSxhQUFhLEVBQUVSLEVBQUUsU0FBUzlYLEdBQUcsT0FBT0EsR0FBR3dXLEVBQUV4VyxFQUFFdVksU0FBU3BZLEVBQUVxWSxpQkFBaUJoQyxHQUFHaUMsT0FBTyxJQUFJelksRUFBRTBZLFdBQVcsRUFBRSxJQUFJbEMsQ0FBQyxFQUFFdlcsRUFBRSxTQUFTRCxFQUFFd1csRUFBRTlXLEdBQUcsSUFBSU0sR0FBR3dTLFNBQVMwRixLQUFLUyxRQUFRalosSUFBSU0sRUFBRTJZLFFBQVFuRyxTQUFTb0csZ0JBQWdCNVksSUFBSUEsRUFBRTZZLGFBQWEsV0FBVyxNQUFNN1ksRUFBRTJZLFFBQVEzWSxFQUFFMlMsTUFBTW1HLFFBQVEsUUFBUTNZLEVBQUU0WSxTQUFTLEVBQUV2QyxHQUFHLEVBQUUxSCxFQUFFLFNBQVM5TyxFQUFFd1csRUFBRTlXLEVBQUVRLEdBQUcsR0FBR3NXLEVBQUVpQixZQUFZLG1CQUFtQnRYLEVBQUU2WSxZQUFZLENBQUMsSUFBSWxCLEVBQUUsSUFBSWtCLFlBQVloWixFQUFFLENBQUNpWixTQUFRLEVBQUdDLE9BQU8sQ0FBQ0MsT0FBT3paLEVBQUUwWixPQUFPbFosS0FBS3NTLFNBQVM2RyxjQUFjdkIsRUFBRSxDQUFDLEVBQUUsT0FBTyxTQUFTd0IsRUFBRUMsR0FBRyxJQUFJQyxFQUFFQyxFQUFFQyxFQUFFdFMsRUFBRUYsRUFBRSxDQUFDeVMsYUFBYSxTQUFTeFosR0FBR3laLHFCQUFxQnhTLEdBQUdBLEVBQUUsS0FBS2pILEdBQUcyTyxFQUFFLGVBQWUwSyxFQUFFLEVBQUVLLGNBQWMsU0FBU25hLEVBQUU0WixFQUFFQyxHQUFHclMsRUFBRXlTLGVBQWUsSUFBSUYsRUFBRWpELEVBQUVnRCxHQUFHeFosRUFBRXVaLEdBQUcsQ0FBRSxHQUFFTyxFQUFFLG9CQUFvQnBaLE9BQU9aLFVBQVV1SixTQUFTaEosS0FBS1gsR0FBR3FhLEVBQUVELElBQUlwYSxFQUFFc2EsUUFBUSxLQUFLdGEsRUFBRSxHQUFHb2EsR0FBR0MsRUFBRSxDQUFDLElBQUlFLEVBQUU5WixFQUFFK1osWUFBWVQsRUFBRTVDLFNBQVM2QyxJQUFJQSxFQUFFbEgsU0FBUzJILGNBQWNWLEVBQUU1QyxTQUFTLElBQUl1RCxFQUFFM0QsRUFBRTRELEVBQUVDLEVBQUV4QyxFQUFFNEIsR0FBR2EsRUFBRVQsRUFBRXBhLEVBQUUsU0FBU00sRUFBRXdXLEVBQUU5VyxFQUFFb1ksR0FBRyxJQUFJN1gsRUFBRSxFQUFFLEdBQUdELEVBQUV3YSxhQUFhLEdBQUd2YSxHQUFHRCxFQUFFMFksVUFBVTFZLEVBQUVBLEVBQUV3YSxtQkFBbUJ4YSxHQUFHLE9BQU9DLEVBQUVrRCxLQUFLOFUsSUFBSWhZLEVBQUV1VyxFQUFFOVcsRUFBRSxHQUFHb1ksSUFBSTdYLEVBQUVrRCxLQUFLc1gsSUFBSXhhLEVBQUVDLElBQUlDLEVBQUV1YSxjQUFjemEsQ0FBQyxDQUF6SixDQUEySjhaLEVBQUVPLEVBQUUvQixTQUFTLG1CQUFtQmtCLEVBQUVyQyxPQUFPcUMsRUFBRXJDLE9BQU8xWCxFQUFFNFosR0FBR0csRUFBRXJDLE9BQU8sSUFBSXFDLEVBQUV0QyxNQUFNd0QsRUFBRUosRUFBRU4sRUFBRVcsRUFBRTFhLElBQUkyYSxFQUFFLEVBQUVDLEVBQUUsU0FBUzNhLEVBQUVILEdBQUcsSUFBSXdXLEVBQUV4VyxFQUFFZ1gsZ0JBQWdCaFgsRUFBRStXLE1BQU01VCxLQUFLQyxJQUFJakQsRUFBRSxJQUFJSCxFQUFFK1csT0FBTyxPQUFPL1csRUFBRWlYLGFBQWFULEVBQUV4VyxFQUFFaVgsWUFBWWpYLEVBQUVpWCxZQUFZalgsRUFBRWtYLGFBQWFWLEVBQUV4VyxFQUFFa1gsWUFBWWxYLEVBQUVrWCxZQUFZcUIsU0FBUy9CLEVBQUUsR0FBRyxDQUFyTCxDQUF1TG1FLEVBQUVsQixHQUFHc0IsRUFBRSxTQUFTL2EsR0FBR29hLElBQUlBLEVBQUVwYSxHQUFHNmEsR0FBRzdhLEVBQUVvYSxFQUFFQyxFQUFFSixFQUFFVSxFQUFFLFNBQVN4YSxFQUFFSCxHQUFHLElBQUl3VyxFQUFFLE1BQU0sZUFBZXJXLEVBQUVrWCxTQUFTYixFQUFFeFcsRUFBRUEsR0FBRyxnQkFBZ0JHLEVBQUVrWCxTQUFTYixFQUFFeFcsR0FBRyxFQUFFQSxJQUFJLGtCQUFrQkcsRUFBRWtYLFNBQVNiLEVBQUV4VyxFQUFFLEdBQUcsRUFBRUEsRUFBRUEsR0FBRyxFQUFFLEVBQUVBLEdBQUdBLEVBQUUsR0FBRyxnQkFBZ0JHLEVBQUVrWCxTQUFTYixFQUFFeFcsRUFBRUEsRUFBRUEsR0FBRyxpQkFBaUJHLEVBQUVrWCxTQUFTYixJQUFJeFcsRUFBRUEsRUFBRUEsRUFBRSxHQUFHLG1CQUFtQkcsRUFBRWtYLFNBQVNiLEVBQUV4VyxFQUFFLEdBQUcsRUFBRUEsRUFBRUEsRUFBRUEsR0FBR0EsRUFBRSxJQUFJLEVBQUVBLEVBQUUsSUFBSSxFQUFFQSxFQUFFLEdBQUcsR0FBRyxnQkFBZ0JHLEVBQUVrWCxTQUFTYixFQUFFeFcsRUFBRUEsRUFBRUEsRUFBRUEsR0FBRyxpQkFBaUJHLEVBQUVrWCxTQUFTYixFQUFFLEtBQUt4VyxFQUFFQSxFQUFFQSxFQUFFQSxHQUFHLG1CQUFtQkcsRUFBRWtYLFNBQVNiLEVBQUV4VyxFQUFFLEdBQUcsRUFBRUEsRUFBRUEsRUFBRUEsRUFBRUEsRUFBRSxFQUFFLElBQUlBLEVBQUVBLEVBQUVBLEVBQUVBLEdBQUcsZ0JBQWdCRyxFQUFFa1gsU0FBU2IsRUFBRXhXLEVBQUVBLEVBQUVBLEVBQUVBLEVBQUVBLEdBQUcsaUJBQWlCRyxFQUFFa1gsU0FBU2IsRUFBRSxJQUFJeFcsRUFBRUEsRUFBRUEsRUFBRUEsRUFBRUEsR0FBRyxtQkFBbUJHLEVBQUVrWCxTQUFTYixFQUFFeFcsRUFBRSxHQUFHLEdBQUdBLEVBQUVBLEVBQUVBLEVBQUVBLEVBQUVBLEVBQUUsRUFBRSxLQUFLQSxFQUFFQSxFQUFFQSxFQUFFQSxFQUFFQSxHQUFHRyxFQUFFbVgsZUFBZWQsRUFBRXJXLEVBQUVtWCxhQUFhdFgsSUFBSXdXLEdBQUd4VyxDQUFDLENBQTluQixDQUFnb0J5WixFQUFFaEQsR0FBR0EsRUFBRSxJQUFJcUUsRUFBRSxFQUFFRCxFQUFFQyxHQUFHLEVBQUUsRUFBRXJFLEdBQUd0VyxFQUFFNFksU0FBUyxFQUFFNVYsS0FBSzZYLE1BQU1YLElBQUksU0FBU3JhLEVBQUV3VyxHQUFHLElBQUl0VyxFQUFFQyxFQUFFK1osWUFBWSxHQUFHbGEsR0FBR3dXLEdBQUd0VyxHQUFHc1csSUFBSXlELEVBQUV6RCxHQUFHclcsRUFBRXVhLFlBQVl4YSxJQUFJMGEsRUFBRSxPQUFPMVQsRUFBRXlTLGNBQWEsR0FBSTFaLEVBQUVQLEVBQUU4VyxFQUFFc0QsR0FBR2hMLEVBQUUsYUFBYTJLLEVBQUUvWixFQUFFNFosR0FBR2MsRUFBRSxLQUFLaFQsRUFBRSxNQUFLLENBQUUsQ0FBcEosQ0FBc0ppVCxFQUFFRSxLQUFLblQsRUFBRWpILEVBQUU4YSxzQkFBc0JGLEdBQUdYLEVBQUVwYSxFQUFFLEVBQUUsSUFBSUcsRUFBRStaLGFBQWEvWixFQUFFNFksU0FBUyxFQUFFLEdBQUcsU0FBUzVZLEVBQUVILEVBQUV3VyxHQUFHeFcsR0FBR3dPLFFBQVEwTSxXQUFXMUUsRUFBRWUsV0FBVy9JLFFBQVEwTSxVQUFVLENBQUNDLGFBQWFDLEtBQUtDLFVBQVU3RSxHQUFHMkMsT0FBT2haLEVBQUVtQixJQUFJa1IsU0FBUzhJLE1BQU1uYixJQUFJcVMsU0FBUzRGLGdCQUFnQixPQUFPLElBQUlqWSxFQUFFbUIsR0FBRyxDQUE5SyxDQUFnTDVCLEVBQUVvYSxFQUFFTCxHQUFHLGVBQWV0WixHQUFHQSxFQUFFb2IsV0FBVyw0QkFBNEJDLFFBQVF2YixFQUFFUCxFQUFFeUQsS0FBSzZYLE1BQU1ULElBQUcsSUFBS3pMLEVBQUUsY0FBYzJLLEVBQUUvWixFQUFFNFosR0FBR3BTLEVBQUV5UyxjQUFhLEdBQUl4WixFQUFFOGEsc0JBQXNCRixHQUFHLENBQUMsR0FBR2pCLEVBQUUsU0FBUzlaLEdBQUcsSUFBSUEsRUFBRXliLG9CQUFvQixJQUFJemIsRUFBRTBiLFFBQVExYixFQUFFMmIsU0FBUzNiLEVBQUU0YixTQUFTNWIsRUFBRTZiLFdBQVcsWUFBWTdiLEVBQUU4YixTQUFTckMsRUFBRXpaLEVBQUU4YixPQUFPQyxRQUFRekMsS0FBSyxNQUFNRyxFQUFFTyxRQUFRdFcsZ0JBQWdCMUQsRUFBRThiLE9BQU9DLFFBQVF2QyxFQUFFNUMsU0FBUzZDLEVBQUV1QyxXQUFXN2IsRUFBRThiLFNBQVNELFVBQVV2QyxFQUFFeUMsV0FBVy9iLEVBQUU4YixTQUFTQyxVQUFVLElBQUlyWSxLQUFLNFYsRUFBRTBDLE1BQU0sQ0FBQyxJQUFJM0YsRUFBRXRXLEVBQUUsSUFBSXNXLEVBQUU5VyxFQUFFMGMsbUJBQW1CM0MsRUFBRTRDLE1BQU0sQ0FBQyxNQUFNbGMsR0FBR3FXLEVBQUU5VyxFQUFFK1osRUFBRTRDLEtBQUssQ0FBQyxHQUFHLE1BQU03RixFQUFFLENBQUMsSUFBSWdELEVBQUUxQyxlQUFlLE9BQU81VyxFQUFFc1MsU0FBUzRGLGVBQWUsTUFBTWxZLEVBQUVzUyxTQUFTMkgsY0FBYzNELElBQUl0VyxFQUFFQSxHQUFHLFNBQVNzVyxFQUFFdFcsRUFBRXNTLFNBQVM0RixtQkFBbUJwWSxFQUFFcVUsaUJBQWlCLFNBQVNyVSxHQUFHLEdBQUd3TyxRQUFROE4sY0FBY3RjLEVBQUV1WCxZQUFZL0ksUUFBUStOLE1BQU0sQ0FBQyxJQUFJL0YsRUFBRXJXLEVBQUU4YixTQUFTSSxLQUFLN0YsRUFBRUEsR0FBRyxHQUFHaEksUUFBUThOLGFBQWEsQ0FBQ25CLGFBQWFDLEtBQUtDLFVBQVVyYixHQUFHbVosT0FBTzNDLEdBQUdyVyxFQUFFK1osYUFBYTFILFNBQVM4SSxNQUFNOUUsR0FBR3JXLEVBQUU4YixTQUFTRSxLQUFLLENBQUMsQ0FBak4sQ0FBbU4zQyxHQUFHdFMsRUFBRTJTLGNBQWMzWixFQUFFdVosR0FBRyxDQUFDLEVBQUVNLEVBQUUsU0FBUzVaLEdBQUcsR0FBRyxPQUFPcU8sUUFBUStOLE9BQU8vTixRQUFRK04sTUFBTXBCLGNBQWMzTSxRQUFRK04sTUFBTXBCLGVBQWVDLEtBQUtDLFVBQVU3QixHQUFHLENBQUMsSUFBSXhaLEVBQUV3TyxRQUFRK04sTUFBTXBELE9BQU8saUJBQWlCblosR0FBR0EsS0FBS0EsRUFBRXdTLFNBQVMySCxjQUFjemEsRUFBRThPLFFBQVErTixNQUFNcEQsV0FBV2pTLEVBQUUyUyxjQUFjN1osRUFBRSxLQUFLLENBQUN1WCxXQUFVLEdBQUksQ0FBQyxFQUFFLE9BQU9yUSxFQUFFc1YsUUFBUSxXQUFXaEQsSUFBSWhILFNBQVNpSyxvQkFBb0IsUUFBUTNDLEdBQUUsR0FBSTNaLEVBQUVzYyxvQkFBb0IsV0FBVzFDLEdBQUUsR0FBSTdTLEVBQUV5UyxlQUFlSCxFQUFFLEtBQUtDLEVBQUUsS0FBS0MsRUFBRSxLQUFLdFMsRUFBRSxLQUFLLEVBQUUsV0FBVyxLQUFLLGtCQUFrQm9MLFVBQVUscUJBQXFCclMsR0FBRywwQkFBMEJBLEdBQUcsWUFBWUEsRUFBRXVjLFFBQVE1YyxXQUFXLEtBQUssaUdBQWlHb0gsRUFBRXNWLFVBQVVoRCxFQUFFaEQsRUFBRXhXLEVBQUV1WixHQUFHLENBQUUsR0FBRUcsRUFBRUYsRUFBRTNDLE9BQU9yRSxTQUFTMkgsY0FBY1gsRUFBRTNDLFFBQVEsS0FBS3JFLFNBQVNtSyxpQkFBaUIsUUFBUTdDLEdBQUUsR0FBSU4sRUFBRWpDLFdBQVdpQyxFQUFFaEMsVUFBVXJYLEVBQUV3YyxpQkFBaUIsV0FBVzVDLEdBQUUsRUFBRyxDQUF0WixHQUEwWjdTLENBQUMsQ0FBQyxDQUF4akssQ0FBMGpLaEgsRUFBRSxFQUFFMGMsTUFBTTVjLEVBQUUsU0FBSSxJQUFTTixJQUFJUyxFQUFFbVcsUUFBUTVXLEVBQUUsRUFBRSxJQUFJLFNBQVNTLEVBQUVILEVBQUV3VyxHQUFnQixJQUFJOVcsRUFBRWlYLE1BQU1BLEtBQUtrRyxrQkFBa0JuYyxPQUFPb2MsT0FBTyxTQUFTM2MsRUFBRUgsRUFBRXdXLEVBQUU5VyxRQUFHLElBQVNBLElBQUlBLEVBQUU4VyxHQUFHOVYsT0FBT0MsZUFBZVIsRUFBRVQsRUFBRSxDQUFDbUIsWUFBVyxFQUFHNEYsSUFBSSxXQUFXLE9BQU96RyxFQUFFd1csRUFBRSxHQUFHLEVBQUUsU0FBU3JXLEVBQUVILEVBQUV3VyxFQUFFOVcsUUFBRyxJQUFTQSxJQUFJQSxFQUFFOFcsR0FBR3JXLEVBQUVULEdBQUdNLEVBQUV3VyxFQUFFLEdBQUd0VyxFQUFFeVcsTUFBTUEsS0FBS29HLGNBQWMsU0FBUzVjLEVBQUVILEdBQUcsSUFBSSxJQUFJd1csS0FBS3JXLEVBQUUsWUFBWXFXLEdBQUc5VixPQUFPWixVQUFVNlgsZUFBZXRYLEtBQUtMLEVBQUV3VyxJQUFJOVcsRUFBRU0sRUFBRUcsRUFBRXFXLEVBQUUsRUFBRTlWLE9BQU9DLGVBQWVYLEVBQUUsYUFBYSxDQUFDWSxPQUFNLElBQUtWLEVBQUVzVyxFQUFFLElBQUl4VyxHQUFHRSxFQUFFc1csRUFBRSxLQUFLeFcsR0FBR0UsRUFBRXNXLEVBQUUsS0FBS3hXLEdBQUdFLEVBQUVzVyxFQUFFLEtBQUt4VyxHQUFHRSxFQUFFc1csRUFBRSxLQUFLeFcsR0FBR0UsRUFBRXNXLEVBQUUsS0FBS3hXLEdBQUdFLEVBQUVzVyxFQUFFLEtBQUt4VyxHQUFHRSxFQUFFc1csRUFBRSxLQUFLeFcsR0FBR0UsRUFBRXNXLEVBQUUsS0FBS3hXLEdBQUdFLEVBQUVzVyxFQUFFLEtBQUt4VyxHQUFHRSxFQUFFc1csRUFBRSxLQUFLeFcsR0FBR0UsRUFBRXNXLEVBQUUsS0FBS3hXLEdBQUdFLEVBQUVzVyxFQUFFLEtBQUt4VyxHQUFHRSxFQUFFc1csRUFBRSxLQUFLeFcsR0FBR0UsRUFBRXNXLEVBQUUsS0FBS3hXLEVBQUUsRUFBRSxJQUFJLFNBQVNHLEVBQUVILEVBQUV3VyxHQUFnQjlWLE9BQU9DLGVBQWVYLEVBQUUsYUFBYSxDQUFDWSxPQUFNLElBQUtaLEVBQUVnZCx3QkFBbUIsRUFBTyxJQUFJdGQsRUFBRThXLEVBQUUsS0FBS3hXLEVBQUVnZCxtQkFBbUIsU0FBUzdjLEdBQUcsSUFBSUgsRUFBRUcsRUFBRThjLFVBQVV6RyxFQUFFclcsRUFBRStjLGdCQUFnQmhkLEdBQUUsRUFBR1IsRUFBRXlkLFVBQVUsR0FBR3JGLEVBQUU1WCxFQUFFLEdBQUdELEVBQUVDLEVBQUUsR0FBRzRPLEdBQUUsRUFBR3BQLEVBQUUwZCxjQUFjLFNBQVNqZCxHQUFHRixFQUFFRSxFQUFHLEdBQUUsQ0FBQ0gsSUFBSXNaLEVBQUUsU0FBU25aLEdBQUcsSUFBSVQsRUFBRVMsRUFBRStULElBQUksR0FBRyxNQUFNbFUsT0FBRSxFQUFPQSxFQUFFeUIsT0FBTyxHQUFHLFlBQVkvQixFQUFFOFcsR0FBR0EsSUFBSXJXLEVBQUVrVSxpQkFBaUJ2RixFQUFFZ0osRUFBRSxFQUFFQSxFQUFFLEVBQUU5WCxFQUFFeUIsT0FBTyxPQUFPLENBQUMsR0FBRyxjQUFjL0IsRUFBRSxPQUFPOFcsR0FBR0EsSUFBSXJXLEVBQUVrVSxpQkFBaUJ5RCxFQUFFOVgsRUFBRXlCLE9BQU8sRUFBRXFOLEVBQUVnSixFQUFFLEdBQUdoSixFQUFFLEVBQUUsQ0FBQyxFQUFFLE9BQU0sRUFBR3BQLEVBQUUyZCxZQUFZLFdBQVcsT0FBTzNHLE9BQU9pRyxpQkFBaUIsVUFBVXJELEdBQUcsV0FBVyxPQUFPNUMsT0FBTytGLG9CQUFvQixVQUFVbkQsRUFBRSxDQUFFLEtBQUcsRUFBRzVaLEVBQUUyZCxZQUFZLFdBQVd2TyxFQUFFLEVBQUcsR0FBRSxDQUFDOU8sSUFBSSxDQUFDc2QsY0FBY3hGLEVBQUUsQ0FBQyxFQUFFLElBQUksU0FBUzNYLEVBQUVILEVBQUV3VyxHQUFnQjlWLE9BQU9DLGVBQWVYLEVBQUUsYUFBYSxDQUFDWSxPQUFNLElBQUtaLEVBQUV1ZCxpQkFBWSxFQUFPLElBQUk3ZCxFQUFFOFcsRUFBRSxLQUFLeFcsRUFBRXVkLFlBQVksU0FBU3BkLEVBQUVILFFBQUcsSUFBU0EsSUFBSUEsRUFBRSxLQUFLLElBQUl3VyxHQUFFLEVBQUc5VyxFQUFFeWQsVUFBVWhkLEdBQUdELEVBQUVzVyxFQUFFLEdBQUdzQixFQUFFdEIsRUFBRSxHQUFHLE9BQU0sRUFBRzlXLEVBQUUyZCxZQUFZLFdBQVcsSUFBSTdHLEVBQUVnSCx1QkFBdUIxRixFQUFFM1gsRUFBRyxHQUFFSCxHQUFHLE9BQU8sV0FBV3lkLGFBQWFqSCxFQUFFLENBQUUsR0FBRSxDQUFDclcsRUFBRUgsSUFBSUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxTQUFTQyxFQUFFSCxFQUFFd1csR0FBZ0I5VixPQUFPQyxlQUFlWCxFQUFFLGFBQWEsQ0FBQ1ksT0FBTSxJQUFLWixFQUFFMGQsb0JBQWUsRUFBTyxJQUFJaGUsRUFBRThXLEVBQUUsS0FBS3hXLEVBQUUwZCxlQUFlLFdBQVcsSUFBSXZkLEVBQUVILEVBQUV3VyxHQUFFLEVBQUc5VyxFQUFFaWUsUUFBUSxNQUFNLE1BQU0sQ0FBQ25ILEVBQUUsQ0FBQ29ILE1BQU0sUUFBUXpkLEVBQUUsTUFBTXFXLE9BQUUsRUFBT0EsRUFBRS9RLGVBQVUsSUFBU3RGLE9BQUUsRUFBT0EsRUFBRTBkLFlBQVlwRixPQUFPLFFBQVF6WSxFQUFFLE1BQU13VyxPQUFFLEVBQU9BLEVBQUUvUSxlQUFVLElBQVN6RixPQUFFLEVBQU9BLEVBQUVzWSxjQUFjLEVBQUV0WSxFQUFFd0gsUUFBUXhILEVBQUUwZCxjQUFjLEVBQUUsSUFBSSxTQUFTdmQsRUFBRUgsRUFBRXdXLEdBQWdCOVYsT0FBT0MsZUFBZVgsRUFBRSxhQUFhLENBQUNZLE9BQU0sSUFBS1osRUFBRThkLDZCQUF3QixFQUFPLElBQUlwZSxFQUFFOFcsRUFBRSxLQUFLeFcsRUFBRThkLHdCQUF3QixTQUFTM2QsR0FBRyxJQUFJSCxHQUFFLEVBQUdOLEVBQUVpZSxRQUFRLE1BQU1uSCxHQUFFLEVBQUc5VyxFQUFFeWQsV0FBVSxHQUFJamQsRUFBRXNXLEVBQUUsR0FBR3NCLEVBQUV0QixFQUFFLEdBQUd2VyxFQUFFLFNBQVNFLEdBQUcsSUFBSUgsRUFBRUcsRUFBRSxHQUFHMlgsRUFBRTlYLEVBQUUrZCxlQUFlLEVBQUUsT0FBTSxFQUFHcmUsRUFBRTJkLFlBQVksV0FBVyxHQUFHM0csUUFBUUEsT0FBT3NILHFCQUFxQixDQUFDLElBQUl4SCxFQUFFLElBQUl3SCxxQkFBcUIvZCxFQUFFRSxHQUFHVCxFQUFFTSxFQUFFeUYsUUFBUSxPQUFPekYsRUFBRXlGLFNBQVMrUSxFQUFFeUgsUUFBUWplLEVBQUV5RixTQUFTLFdBQVcvRixHQUFHOFcsRUFBRTBILFVBQVV4ZSxFQUFFLENBQUMsQ0FBQ29ZLEdBQUUsRUFBSSxHQUFFLENBQUM5WCxFQUFFRyxJQUFJLENBQUNnZSxhQUFhbmUsRUFBRW9lLFVBQVVsZSxFQUFFLEVBQUVGLEVBQUV3SCxRQUFReEgsRUFBRThkLHVCQUF1QixFQUFFLElBQUksU0FBUzNkLEVBQUVILEVBQUV3VyxHQUFnQjlWLE9BQU9DLGVBQWVYLEVBQUUsYUFBYSxDQUFDWSxPQUFNLElBQUtaLEVBQUVxZSxxQkFBZ0IsRUFBTyxJQUFJM2UsRUFBRThXLEVBQUUsS0FBS3RXLEVBQUVzVyxFQUFFLEtBQUtzQixFQUFFLENBQUN3RyxHQUFHLEVBQUVDLFlBQVksSUFBSUMsT0FBTyxJQUFJQyxPQUFPLElBQUlDLFlBQVksSUFBSUMsYUFBYSxLQUFLQyxRQUFRLEtBQUtDLGFBQWEsTUFBTTdlLEVBQUVxZSxnQkFBZ0IsU0FBU2xlLEdBQUcsSUFBSUgsRUFBRSxpQkFBaUJHLEVBQUUyWCxFQUFFM1gsR0FBR0EsRUFBRXFXLEdBQUUsRUFBRzlXLEVBQUV5ZCxVQUFVLE1BQU1sZCxFQUFFdVcsRUFBRSxHQUFHMUgsRUFBRTBILEVBQUUsR0FBRzhDLEdBQUUsRUFBRzVaLEVBQUUwZCxjQUFXLFdBQWN0TyxFQUFFNEgsT0FBT29JLFdBQVksR0FBRSxJQUFJLE9BQU0sRUFBR3BmLEVBQUUyZCxZQUFTLFdBQWMvRCxHQUFJLEdBQUUsS0FBSSxFQUFHcFosRUFBRTZlLGFBQWF6RixHQUFHclosR0FBR0QsQ0FBQyxFQUFFQSxFQUFFd0gsUUFBUXhILEVBQUVxZSxlQUFlLEVBQUUsSUFBSSxTQUFTbGUsRUFBRUgsRUFBRXdXLEdBQWdCOVYsT0FBT0MsZUFBZVgsRUFBRSxhQUFhLENBQUNZLE9BQU0sSUFBS1osRUFBRWdmLDRCQUF1QixFQUFPLElBQUl0ZixFQUFFOFcsRUFBRSxLQUFLeFcsRUFBRWdmLHVCQUF1QixTQUFTN2UsRUFBRUgsR0FBRyxJQUFJd1csR0FBRSxFQUFHOVcsRUFBRXlkLFVBQVVuZCxHQUFHRSxFQUFFc1csRUFBRSxHQUFHc0IsRUFBRXRCLEVBQUUsR0FBRyxPQUFNLEVBQUc5VyxFQUFFMmQsWUFBUyxXQUFjbGQsR0FBRzJYLEVBQUU5WCxFQUFHLEdBQUUsQ0FBQ0csRUFBRUgsSUFBSUcsR0FBR0QsQ0FBQyxDQUFDLEVBQUUsSUFBSSxTQUFTQyxFQUFFSCxFQUFFd1csR0FBZ0I5VixPQUFPQyxlQUFlWCxFQUFFLGFBQWEsQ0FBQ1ksT0FBTSxJQUFLWixFQUFFaWYsaUJBQVksRUFBTyxJQUFJdmYsRUFBRThXLEVBQUUsS0FBS3hXLEVBQUVpZixZQUFZLFdBQVcsUUFBTyxFQUFHdmYsRUFBRTJlLGlCQUFpQixTQUFTLEVBQUVyZSxFQUFFd0gsUUFBUXhILEVBQUVpZixXQUFXLEVBQUUsSUFBSSxTQUFTOWUsRUFBRUgsRUFBRXdXLEdBQWdCOVYsT0FBT0MsZUFBZVgsRUFBRSxhQUFhLENBQUNZLE9BQU0sSUFBS1osRUFBRWtmLCtCQUEwQixFQUFPLElBQUl4ZixFQUFFOFcsRUFBRSxLQUFLeFcsRUFBRWtmLDBCQUEwQixvQkFBb0J4SSxPQUFPaFgsRUFBRXlmLGdCQUFnQnpmLEVBQUUyZCxVQUFVcmQsRUFBRXdILFFBQVF4SCxFQUFFa2YseUJBQXlCLEVBQUUsSUFBSSxTQUFTL2UsRUFBRUgsRUFBRXdXLEdBQWdCOVYsT0FBT0MsZUFBZVgsRUFBRSxhQUFhLENBQUNZLE9BQU0sSUFBS1osRUFBRW9mLDBCQUFxQixFQUFPLElBQUkxZixFQUFFOFcsRUFBRSxLQUFLeFcsRUFBRW9mLHFCQUFxQixTQUFTamYsR0FBRyxJQUFJSCxFQUFFRyxFQUFFbVMsSUFBSWtFLEVBQUVyVyxFQUFFb0wsU0FBU3JMLEVBQUVDLEVBQUVrZixPQUFNLEVBQUczZixFQUFFMmQsWUFBUyxXQUFjLElBQUlsZCxFQUFFLFdBQVcsSUFBSUEsRUFBRSxHQUFHRCxFQUFFLE9BQU8sUUFBUUMsRUFBRUgsRUFBRXlGLGVBQVUsSUFBU3RGLE9BQUUsRUFBT0EsRUFBRXFiLFFBQVEsdUJBQWtCLEVBQU9oRixHQUFHLEVBQUUsT0FBT2hFLFNBQVNtSyxpQkFBaUIsUUFBUXhjLEdBQUcsV0FBVyxPQUFPcVMsU0FBU2lLLG9CQUFvQixRQUFRdGMsRUFBRSxDQUFFLEdBQUUsQ0FBQ3FXLEVBQUV4VyxFQUFFRSxHQUFHLEVBQUVGLEVBQUV3SCxRQUFReEgsRUFBRW9mLG9CQUFvQixFQUFFLElBQUksU0FBU2pmLEVBQUVILEVBQUV3VyxHQUFnQjlWLE9BQU9DLGVBQWVYLEVBQUUsYUFBYSxDQUFDWSxPQUFNLElBQUtaLEVBQUUrZSxpQkFBWSxFQUFPLElBQUlyZixFQUFFOFcsRUFBRSxLQUFLeFcsRUFBRStlLFlBQVksU0FBUzVlLElBQUcsRUFBR1QsRUFBRTJkLFlBQVksV0FBVyxJQUFJcmQsRUFBRSxXQUFXRyxFQUFFdVcsT0FBT29JLFdBQVcsRUFBRSxPQUFPcEksT0FBT2lHLGlCQUFpQixTQUFTM2MsRUFBRSxDQUFDc2YsU0FBUSxJQUFLLFdBQVcsT0FBTzVJLE9BQU8rRixvQkFBb0IsU0FBU3pjLEVBQUUsQ0FBRSxHQUFFLEdBQUcsRUFBRUEsRUFBRXdILFFBQVF4SCxFQUFFK2UsV0FBVyxFQUFFLElBQUksU0FBUzVlLEVBQUVILEVBQUV3VyxHQUFnQjlWLE9BQU9DLGVBQWVYLEVBQUUsYUFBYSxDQUFDWSxPQUFNLElBQUtaLEVBQUV1ZixzQkFBaUIsRUFBTyxJQUFJN2YsRUFBRThXLEVBQUUsS0FBS3hXLEVBQUV1ZixpQkFBaUIsU0FBU3BmLElBQUcsRUFBR1QsRUFBRTJkLFlBQVksV0FBVyxJQUFJcmQsRUFBRSxXQUFXRyxHQUFHLFlBQVlxUyxTQUFTZ04saUJBQWlCcmYsR0FBRyxFQUFFLE9BQU91VyxPQUFPaUcsaUJBQWlCLG1CQUFtQjNjLEdBQUUsR0FBSSxXQUFXLE9BQU8wVyxPQUFPK0Ysb0JBQW9CLG1CQUFtQnpjLEVBQUUsQ0FBRSxHQUFFLENBQUNHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsU0FBU0EsRUFBRUgsRUFBRXdXLEdBQWdCOVYsT0FBT0MsZUFBZVgsRUFBRSxhQUFhLENBQUNZLE9BQU0sSUFBS1osRUFBRXlmLHVCQUFrQixFQUFPLElBQUkvZixFQUFFOFcsRUFBRSxLQUFLeFcsRUFBRXlmLGtCQUFrQixTQUFTdGYsRUFBRUgsR0FBRyxTQUFTd1csRUFBRUEsR0FBR3JXLEVBQUVzRixVQUFVdEYsRUFBRXNGLFFBQVFpYSxTQUFTbEosRUFBRXNGLFNBQVM5YixHQUFHLEVBQUMsRUFBR04sRUFBRTJkLHVCQUF1QixPQUFPN0ssU0FBU21LLGlCQUFpQixZQUFZbkcsR0FBRyxXQUFXaEUsU0FBU2lLLG9CQUFvQixZQUFZakcsRUFBRSxDQUFFLEdBQUUsQ0FBQyxFQUFFLElBQUksU0FBU3JXLEVBQUVILEVBQUV3VyxHQUFnQjlWLE9BQU9DLGVBQWVYLEVBQUUsYUFBYSxDQUFDWSxPQUFNLElBQUtaLEVBQUUyZix1QkFBa0IsRUFBTyxJQUFJamdCLEVBQUU4VyxFQUFFLEtBQUt4VyxFQUFFMmYsa0JBQWtCLFdBQVcsSUFBSXhmLEdBQUUsRUFBR1QsRUFBRWllLFFBQVEsTUFBTSxPQUFNLEVBQUdqZSxFQUFFMmQsdUJBQXVCbGQsRUFBRXNGLFVBQVV0RixFQUFFc0YsVUFBVXRGLEVBQUVzRixRQUFRLEtBQU0sSUFBRyxTQUFTekYsR0FBR0csRUFBRXNGLFFBQVF6RixDQUFDLENBQUMsRUFBRUEsRUFBRXdILFFBQVF4SCxFQUFFMmYsaUJBQWlCLEVBQUUsSUFBSSxTQUFTeGYsRUFBRUgsRUFBRXdXLEdBQWdCOVYsT0FBT0MsZUFBZVgsRUFBRSxhQUFhLENBQUNZLE9BQU0sSUFBS1osRUFBRTRmLG1CQUFjLEVBQU8sSUFBSWxnQixFQUFFOFcsRUFBRSxLQUFLeFcsRUFBRTRmLGNBQWMsV0FBVyxNQUFNLENBQUNDLE1BQUssRUFBR25nQixFQUFFMGQsY0FBYyxXQUFXLElBQUlqZCxFQUFFdVcsT0FBT29KLFFBQVEsS0FBSzlmLEVBQUV3UyxTQUFTMEYsS0FBS2xZLEVBQUUyUyxNQUFNMUYsU0FBUyxRQUFRak4sRUFBRTJTLE1BQU1vTixJQUFJLElBQUk1ZixDQUFFLEdBQUUsSUFBSTZmLFFBQU8sRUFBR3RnQixFQUFFMGQsY0FBYyxXQUFXLElBQUlqZCxFQUFFcVMsU0FBUzBGLEtBQUtsWSxFQUFFRyxFQUFFd1MsTUFBTW9OLElBQUl2SixHQUFHLEVBQUUrQixTQUFTdlksR0FBRyxLQUFLRyxFQUFFd1MsTUFBTTFGLFNBQVMsR0FBRzlNLEVBQUV3UyxNQUFNb04sSUFBSSxHQUFHdkosR0FBR0UsT0FBT3FDLFNBQVMsR0FBRyxFQUFFUixTQUFTdlksR0FBRyxLQUFNLEdBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxTQUFTRyxFQUFFSCxFQUFFd1csR0FBZ0IsSUFBSTlXLEVBQUVpWCxNQUFNQSxLQUFLc0osaUJBQWlCLFNBQVM5ZixHQUFHLE9BQU9BLEdBQUdBLEVBQUUrZixXQUFXL2YsRUFBRSxDQUFDcUgsUUFBUXJILEVBQUUsRUFBRU8sT0FBT0MsZUFBZVgsRUFBRSxhQUFhLENBQUNZLE9BQU0sSUFBS1osRUFBRW1nQixxQkFBZ0IsRUFBTyxJQUFJamdCLEVBQUVzVyxFQUFFLEtBQUtzQixFQUFFcFksRUFBRThXLEVBQUUsTUFBTXhXLEVBQUVtZ0IsZ0JBQWdCLFNBQVNoZ0IsR0FBRyxJQUFJSCxHQUFFLEVBQUdFLEVBQUV5ZCxRQUFRLE1BQU1uSCxFQUFFclcsRUFBRW1TLElBQUk1UyxFQUFFUyxFQUFFaVgsT0FBT25YLE9BQUUsSUFBU1AsRUFBRSxFQUFFQSxFQUFFb1AsRUFBRTNPLEVBQUU0VyxNQUFNdUMsT0FBRSxJQUFTeEssRUFBRSxJQUFJQSxFQUFFLE9BQU0sRUFBRzVPLEVBQUVtZCxZQUFTLFdBQWNyZCxFQUFFeUYsUUFBUSxJQUFJcVMsRUFBRXRRLFFBQVEsS0FBSyxDQUFDdVAsTUFBTXVDLEVBQUV0QyxpQkFBZ0IsR0FBSyxHQUFFLEtBQUksRUFBRzlXLEVBQUVrZCxjQUFjLFdBQVc1RyxHQUFHeFcsRUFBRXlGLFNBQVN6RixFQUFFeUYsUUFBUW9VLGNBQWNyRCxFQUFFL1EsUUFBUSxLQUFLLENBQUMyUixPQUFPLFdBQVcsT0FBT25YLENBQUMsRUFBRXNYLFdBQVUsR0FBSyxHQUFFLENBQUN0WCxFQUFFdVcsR0FBRyxDQUFDLEVBQUUsSUFBSSxTQUFTeFcsR0FBZ0JBLEVBQUVzVyxRQUFRblcsQ0FBQyxHQUFHcVcsRUFBRSxDQUFBLEVBQUcsU0FBUzlXLEVBQUVTLEdBQUcsSUFBSUQsRUFBRXNXLEVBQUVyVyxHQUFHLFFBQUcsSUFBU0QsRUFBRSxPQUFPQSxFQUFFb1csUUFBUSxJQUFJd0IsRUFBRXRCLEVBQUVyVyxHQUFHLENBQUNtVyxRQUFRLElBQUksT0FBT3RXLEVBQUVHLEdBQUdFLEtBQUt5WCxFQUFFeEIsUUFBUXdCLEVBQUVBLEVBQUV4QixRQUFRNVcsR0FBR29ZLEVBQUV4QixPQUFPLENBQUMsT0FBTzVXLEVBQUUrVyxFQUFFLFdBQVcsR0FBRyxpQkFBaUIySixXQUFXLE9BQU9BLFdBQVcsSUFBSSxPQUFPekosTUFBTSxJQUFJMEosU0FBUyxjQUFiLEVBQTZCLENBQUMsTUFBTWxnQixHQUFHLEdBQUcsaUJBQWlCdVcsT0FBTyxPQUFPQSxNQUFNLENBQUMsQ0FBN0osR0FBaUtoWCxFQUFFLElBQUksQ0FBbmpZLHFyTkNBalcsU0FBUzRnQixHQUF5Qm5nQixFQUFHSCxHQUNuQyxHQUFJLE1BQVFHLEVBQUcsTUFBTyxHQUN0QixJQUFJVCxFQUNGUSxFQUNBRCxFQ0xKLFNBQXVDQyxFQUFHQyxHQUN4QyxHQUFJLE1BQVFELEVBQUcsTUFBTyxHQUN0QixJQUFJRixFQUFJLENBQUEsRUFDUixJQUFLLElBQUl3VyxLQUFLdFcsRUFBRyxHQUFJLENBQUEsRUFBR3lYLGVBQWV0WCxLQUFLSCxFQUFHc1csR0FBSSxDQUNqRCxJQUFLLElBQU1yVyxFQUFFK0QsUUFBUXNTLEdBQUksU0FDekJ4VyxFQUFFd1csR0FBS3RXLEVBQUVzVyxFQUNWLENBQ0QsT0FBT3hXLENBQ1QsQ0RIUXVnQixDQUE2QnBnQixFQUFHSCxHQUN0QyxHQUFJVSxPQUFPOGYsc0JBQXVCLENBQ2hDLElBQUloSyxFQUFJOVYsT0FBTzhmLHNCQUFzQnJnQixHQUNyQyxJQUFLRCxFQUFJLEVBQUdBLEVBQUlzVyxFQUFFL1UsT0FBUXZCLElBQUtSLEVBQUk4VyxFQUFFdFcsSUFBSyxJQUFNRixFQUFFa0UsUUFBUXhFLElBQU0sQ0FBRSxFQUFDK2dCLHFCQUFxQnBnQixLQUFLRixFQUFHVCxLQUFPTyxFQUFFUCxHQUFLUyxFQUFFVCxHQUNqSCxDQUNELE9BQU9PLENBQ1QsbzVMRURBLFNBQVN5Z0IsR0FBVUMsR0FRaEIsSUFSaUJyYSxLQUNsQkEsRUFBSWtPLElBQ0pBLEVBQUdvTSxhQUNIQSxFQUFZQyxpQkFDWkEsRUFBZ0JDLFVBQ2hCQSxFQUFTQyxPQUNUQSxHQUVESixFQURJSyxFQUFJVixHQUFBSyxFQUFBTSxJQUVQLE1BQU9qaEIsR0FBS2toQixFQUFBQSxpQkFDTnpXLEVBQ1UsZ0JBQWRuRSxFQUFLdEUsS0FBc0JtSCxHQUFBQSxHQUFBLENBQUEsRUFFbEI3QyxHQUFJLEdBQUEsQ0FDUDZPLGVBQWdCQyxHQUFtQzlPLEVBQU1rTyxFQUFLeFUsS0FFaEVzRyxFQUNBNmEsRUFBVXhNLEdBQXFCck8sRUFBTWtPLEVBQUt4VSxHQUNoRCxPQUNFb2hCLEVBQUEsUUFBQXhPLGNBQUFsUyxLQUFBQSxPQUFBMmdCLE9BQUEsQ0FDRUMsVUFBV0MsRUFBRSxRQUNYUixFQUFPMU4sV0FDUHdOLElBQXFCQyxHQUFhQyxFQUFPUyx3QkFFdkNaLEVBQWEsQ0FBRWEsTUFBT1gsS0FFMUJNLEVBQUFBLFFBQUF4TyxjQUFDOE8sRUFBQUEsUUFBY2hoQixPQUFBMmdCLE9BQUEsQ0FBQy9hLEtBQU1tRSxFQUFTMFcsUUFBU0EsRUFBUzNNLElBQUtBLEdBQVN3TSxJQUdyRSxDQUNBLE1BQU1XLEdBQVlDLGVBQUhDLFFBQUFDLElBQUFDLFNBQUdILEVBQVMsUUFBQ0ksTUFBTSxDQUNoQ3pmLEtBQU1xZixFQUFTLFFBQUNLLE9BQ2hCamdCLEtBQU00ZixFQUFTLFFBQUNLLE9BQ2hCM2UsUUFBU3NlLEVBQVMsUUFBQ0ssT0FDbkJDLGVBQWdCTixFQUFTLFFBQUNLLE9BQzFCRSxVQUFXUCxFQUFTLFFBQUNLLE9BQ3JCOU0sZUFBZ0J5TSxFQUFTLFFBQUNLLE9BQzFCbmdCLFdBQVk4ZixFQUFTLFFBQUNJLE1BQU0sQ0FDMUJ0ZixNQUFPa2YsRUFBUyxRQUFDSyxPQUNqQkcsTUFBT1IsRUFBUyxRQUFDSyxPQUNqQnpmLFdBQVlvZixFQUFTLFFBQUNLLE9BQ3RCelUsS0FBTW9VLEVBQVMsUUFBQ0ssT0FDaEIzZ0IsR0FBSXNnQixFQUFTLFFBQUNLLE9BQ2RoZSxPQUFRMmQsRUFBUyxRQUFDSyxPQUNsQnRYLGFBQWNpWCxFQUFTLFFBQUNTLEtBQ3hCamdCLFlBQWF3ZixFQUFTLFFBQUNJLE1BQU0sQ0FDM0J6ZixLQUFNcWYsRUFBUyxRQUFDSyxPQUNoQnpmLFdBQVlvZixFQUFTLFFBQUNLLFNBRXhCL2YsT0FBUTBmLEVBQVMsUUFBQ0ksTUFBTSxDQUN0QnpmLEtBQU1xZixFQUFTLFFBQUNLLE9BQ2hCemYsV0FBWW9mLEVBQVMsUUFBQ0ssYUFHMUIsQ0FBQSxFQVdLLFNBQVNLLEdBQVdDLEdBVXhCLElBVnlCdE0sWUFDMUJBLEVBQVd1TSxhQUNYQSxFQUFZNUIsYUFDWkEsRUFBWXBNLElBQ1pBLEVBQUd1TSxPQUNIQSxFQUFNMEIsT0FDTkEsRUFBTUMseUJBQ05BLEVBQXdCQyxtQkFDeEJBLEdBRURKLEVBREl2QixFQUFJVixHQUFBaUMsRUFBQUssSUFFUCxNQUFPNWlCLEdBQUtraEIsRUFBQUEsaUJBQ1osT0FDRUUsRUFBQSxRQUFBeE8sY0FBQSxNQUFBLENBQ0UwTyxVQUFXQyxFQUFFLFFBQ1hSLEVBQU84Qix5QkFDUDlCLEVBQU8rQixxQkFDUEwsR0FBVSxXQUdackIsRUFBQSxRQUFBeE8sY0FBQWxTLEtBQUFBLE9BQUEyZ0IsT0FBQSxDQUFJQyxVQUFXUCxFQUFPZ0MsaUJBQXFCUCxLQUN4Q3ZNLEVBQVk3USxLQUFJLENBQUNpTyxFQUFZcFQsSUFFMUJtaEIsRUFBQSxRQUFBeE8sY0FBQzhOLEdBQVVoZ0IsT0FBQTJnQixPQUFBLENBQ1RuTixJQUFLLEdBQUdiLEVBQVdyUixRQUNqQnFSLEVBQVd2UixXQUFXYSxLQUN0QjBRLEVBQVd2UixXQUFXUyxNQUN0QjhRLEVBQVd2UixXQUFXZSxTQUV4QitkLGFBQWNBLEVBQ2RFLFVBQVc3Z0IsRUFDWHFHLEtBQU0rTSxFQUNObUIsSUFBS0EsRUFDTHVNLE9BQVFBLEdBQ0pDLE1BSVQwQixHQUNDdEIsRUFBQUEsUUFBQXhPLGNBQVFnTyxLQUFBQSxFQUFhLENBQUVhLE1BQU94TCxFQUFZeFUsU0FDeEMyZixFQUFBQSxRQUFBeE8sY0FBQSxTQUFBLENBQ0VvUSxRQUFTTCxFQUNUM2dCLEtBQUssU0FDTHNmLFVBQVdQLEVBQU8seUJBRWpCL2dCLEVBQUUsdUJBQXdCLENBQUV3VSxXQU8zQyxnQkE3REFxTixRQUFBQyxJQUFBQyxXQUFBckIsR0FBV3VDLFVBQVksQ0FDckIzYyxLQUFNcWIsR0FBVXVCLFdBQ2hCMU8sSUFBS29OLEVBQUFBLFFBQVVLLE9BQU9pQixXQUN0QnRDLGFBQWNnQixFQUFBQSxRQUFVdUIsS0FBS0QsV0FDN0JyQyxpQkFBa0JlLEVBQUFBLFFBQVV3QixPQUFPRixXQUNuQ3BDLFVBQVdjLEVBQUFBLFFBQVV3QixPQUFPRixXQUM1Qm5DLE9BQVFhLEVBQUFBLFFBQVV5QixTQUFTekIsRUFBQUEsUUFBVUssUUFBUWlCLDRCQXlEL0NyQixRQUFBQyxJQUFBQyxXQUFBTyxHQUFZVyxVQUFZLENBQ3RCaE4sWUFBYTJMLEVBQVMsUUFBQzBCLFFBQVEzQixJQUFXdUIsV0FDMUNWLGFBQWNaLEVBQUFBLFFBQVV1QixLQUFLRCxXQUM3QnRDLGFBQWNnQixFQUFBQSxRQUFVdUIsS0FBS0QsV0FDN0IxTyxJQUFLb04sRUFBQUEsUUFBVUssT0FBT2lCLFdBQ3RCbkMsT0FBUWEsRUFBQUEsUUFBVXlCLFNBQVN6QixFQUFBQSxRQUFVSyxRQUFRaUIsV0FDN0NULE9BQVFiLEVBQUFBLFFBQVVTLEtBQUthLFdBQ3ZCUix5QkFBMEJkLEVBQVMsUUFBQ1MsS0FDcENNLG1CQUFvQmYsRUFBUyxRQUFDdUIsT0FHaENiLEdBQVlpQixhQUFlLENBQ3pCYiwwQkFBMEIsRUFDMUJDLG1CQUFvQkEsS0FDdEIsR0NoSU8sTUFBTWEsR0FBY0EsRUFBR3BCLFFBQU81TixNQUFLaVAsYUFBWUMsWUFBVzNDLGFBQy9ELE1BQU8vZ0IsR0FBS2toQixFQUFBQSxpQkFDWixPQUNFRSxFQUFBLFFBQUF4TyxjQUFBLFNBQUEsQ0FDRTVRLEtBQUssU0FDTHNmLFVBQVdQLEVBQU8sZUFDbEJpQyxRQUFTUyxFQUNULGFBQVl6akIsRUFBRSxxQkFBc0IsQ0FBRXdVLFFBQ3RDa1AsVUFBV0EsR0FFWHRDLEVBQUEsUUFBQXhPLGNBQUMrUSxVQUFJLENBQUNDLElBQUksUUFBUXhCLE1BQU9BLElBQ2xCLEVDcEJOLFNBQVNuYyxJQUFNM0UsR0FDcEJBLEVBQUVrVCxJQUNGQSxFQUFHNVQsTUFDSEEsRUFBS2lqQixZQUNMQSxFQUFXbFMsU0FDWEEsRUFBUW1TLGNBQ1JBLEVBQWFDLGNBQ2JBLEVBQWFOLFdBQ2JBLEVBQVVPLFVBQ1ZBLEVBQVNDLFNBQ1RBLEVBQVFsRCxPQUNSQSxFQUFNbUQsWUFDTkEsRUFBV0MsU0FDWEEsRUFBUUMsZUFDUkEsRUFBY2paLGNBQ2RBLEVBQWFrWixpQkFDYkEsRUFBZ0JDLFVBQ2hCQSxFQUFTQyxZQUNUQSxJQUVBLE9BQ0VuRCxFQUFBLFFBQUF4TyxjQUFBLE1BQUEsQ0FBSzBPLFVBQVdQLEVBQU95RCxXQUNwQk4sR0FDQzlDLEVBQUEsUUFBQXhPLGNBQUEsUUFDTW1SLEVBQWMsQ0FDaEJ6QyxVQUFXUCxFQUFPLFdBQ2xCMEQsUUFBU25qQixJQUdWMGlCLEdBR0w1QyxFQUFBLFFBQUF4TyxjQUFBLFFBQUFsUyxPQUFBMmdCLE9BQUEsQ0FDRSxhQUFZMkMsRUFFWk0sVUFBV0EsRUFDWFQsWUFBYUEsRUFDYmxTLFNBQVVBLEVBQ1YzUCxLQUFLLE9BQ0xzZixVQUFXQyxFQUFFLFFBQ1hSLEVBQU81YSxNQUVQNGEsRUFBT3pmLEdBRVA4aUIsRUFIQUQsR0FBWWhaLEdBQWdCNFYsRUFBTzJELEtBRW5DOWpCLEdBQVFtZ0IsRUFBTzRELFVBR2pCL2pCLE1BQU9BLEVBQ1BVLEdBQUlBLEdBQ0F3aUIsRUFBYyxDQUNoQnhSLElBQUsyUixFQUNMVyxPQUFRTCxNQUdYM2pCLEdBQ0N3Z0IsRUFBQUEsUUFBQXhPLGNBQUM0USxHQUFXLENBQ1ZoUCxJQUFLQSxFQUNMaVAsV0FBWUEsSUFBTUEsRUFBV1EsR0FDN0JsRCxPQUFRQSxFQUNScUIsTUFBT2lDLEVBQ1BYLFVBQVd2akIsR0FBSzZULEdBQXlCN1QsSUFBTXNqQixFQUFXUSxLQUtwRSxtbEJEeENBcEMsUUFBQUMsSUFBQUMsV0FBQXlCLEdBQVlQLFVBQVksQ0FDdEJiLE1BQU9SLEVBQUFBLFFBQVVLLE9BQU9pQixXQUN4QjFPLElBQUtvTixFQUFBQSxRQUFVSyxPQUFPaUIsV0FDdEJPLFdBQVk3QixFQUFBQSxRQUFVdUIsS0FBS0QsV0FDM0JRLFVBQVc5QixFQUFBQSxRQUFVdUIsS0FBS0QsV0FDMUJuQyxPQUFRYSxFQUFBQSxRQUFVeUIsU0FBU3pCLEVBQUFBLFFBQVVLLFFBQVFpQiw0QkNxQy9DckIsUUFBQUMsSUFBQUMsV0FBQTliLEdBQU1nZCxVQUFZLENBQ2hCM2hCLEdBQUlzZ0IsRUFBQUEsUUFBVUssT0FBT2lCLFdBQ3JCMU8sSUFBS29OLEVBQUFBLFFBQVVLLE9BQU9pQixXQUN0QlcsWUFBYWpDLEVBQUFBLFFBQVVLLE9BQU9pQixXQUM5QnZSLFNBQVVpUSxFQUFBQSxRQUFVUyxLQUFLYSxXQUN6QnRpQixNQUFPZ2hCLEVBQUFBLFFBQVVLLE9BQU9pQixXQUN4QlksY0FBZWxDLEVBQUFBLFFBQVV1QixLQUFLRCxXQUM5QmEsY0FBZW5DLEVBQUFBLFFBQVV1QixLQUFLRCxXQUM5Qk8sV0FBWTdCLEVBQUFBLFFBQVV1QixLQUFLRCxXQUMzQmMsVUFBV3BDLEVBQUFBLFFBQVVLLE9BQU9pQixXQUM1QmUsU0FBVXJDLEVBQVMsUUFBQ0ksTUFBTSxDQUN4QnZjLFFBQVNtYyxFQUFTLFFBQUNpRCxVQUFVLENBQUNqRCxFQUFTLFFBQUNLLE9BQVFMLEVBQUFBLFFBQVVrRCxXQUN6RDVCLFdBQ0huQyxPQUFRYSxFQUFBQSxRQUFVeUIsU0FBU3pCLEVBQUFBLFFBQVVLLFFBQVFpQixXQUM3Q2dCLFlBQWF0QyxFQUFTLFFBQUNTLEtBQ3ZCOEIsU0FBVXZDLEVBQUFBLFFBQVVTLEtBQUthLFdBQ3pCa0IsZUFBZ0J4QyxFQUFBQSxRQUFVSyxPQUFPaUIsV0FDakMvWCxjQUFleVcsRUFBUyxRQUFDSyxPQUN6Qm9DLGlCQUFrQnpDLEVBQUFBLFFBQVVLLE9BQU9pQixXQUNuQ29CLFVBQVcxQyxFQUFTLFFBQUNTLEtBQ3JCa0MsWUFBYTNDLEVBQVMsUUFBQ3VCLE9BR3pCbGQsR0FBTXNkLGFBQWUsQ0FDbkJlLFdBQVcsRUFDWEosYUFBYSxFQUNiL1ksbUJBQWVsSSxFQUNmc2hCLFlBQWFBLFFDckRmLE1BQU1RLEdBQWFBLEVBQ2pCQyxhQUNBMWpCLEtBQ0F1aUIsY0FDQUosYUFDQXdCLHVCQUNBQyxjQUNBQyxtQkFDQUMsa0JBQ0E1USxNQUNBNlEsWUFDQXprQixRQUNBd2pCLGlCQUNBelMsV0FDQTJULGNBQ0FDLGFBQ0FoSixRQUNBaUosV0FDQUMsYUFFQSxNQUFPemxCLEdBQUtraEIsRUFBQUEsa0JBQ05yQixLQUFFQSxFQUFJRyxPQUFFQSxHQUFXMEYsR0FBTTlGLGdCQUN6Qm1CLEVBQVN3RSxFQUFhSSxHQUFlQyxHQUNyQ0MsRUFBVSxHQUFHdmtCLFVBQ2JzQixFQUFVLEdBQUd0QixXQUNad2tCLEVBQWNDLEdBQWlCNUksRUFBUUEsVUFBQyxHQUN6QzhHLEVBQVc3QyxVQUFNekQsU0FFdkJOLEVBQUFBLFdBQVUsS0FDUjJJLFVBQVdDLGNBQWNqQixFQUFXLEdBQ25DLElBRUgzSCxFQUFBQSxXQUFVLEtBQ0pkLEVBQU0ySixhQUNSckcsSUFFQUcsR0FDRixHQUNDLENBQUN6RCxFQUFNMkosZUFNVixNQUFNckYsaUJBQ0pBLEVBQWdCa0QsY0FDaEJBLEVBQWF2QixhQUNiQSxFQUFZc0IsY0FDWkEsRUFBYWxELGFBQ2JBLEVBQVl1RixvQkFDWkEsR0FDRUMsY0FBWSxDQUNkdlksTUFBTzBPLEVBQU10RyxZQUNib1EsV0FBWXpsQixFQUNaMGxCLFFBQVEsRUFDUnJCLHFCQUFzQnNCLElBQ3BCdEIsRUFBcUJzQixHQUNyQmYsRUFBUyxDQUFFeGpCLEtBQU0sY0FBZW1pQixVQUFVLEdBQU8sRUFFbkQwQixVQUNBampCLFVBQ0E0akIsYUFBYyxLQUNkQyx5QkFBMEIsRUFDMUJDLG1CQUFvQkEsRUFBR0wsZ0JBQ3JCOUosRUFBTTJKLGNBQ05WLEVBQVMsQ0FBRXhqQixLQUFNLGVBQWdCcEIsTUFBT3lsQixJQUMxQ00sYUFBY0EsQ0FBQ0MsR0FBWUwsVUFBU3ZrQixXQUNsQyxPQUFRQSxHQUNOLEtBQUtva0IsRUFBQUEsWUFBWVMsaUJBQWlCQyxtQkFHaEMsT0FGQVgsR0FBcUIsR0FDckJYLEVBQVMsQ0FBRXhqQixLQUFNLGNBQWVtaUIsVUFBVSxJQUNuQ3lDLEVBRVQsS0FBS1IsRUFBQUEsWUFBWVMsaUJBQWlCRSxrQkFDaEMsT0FBSXhLLEVBQU16TCxTQUNSMFUsRUFBUyxDQUFFeGpCLEtBQU0sZ0JBQWlCZ2xCLGNBQWMsSUFDekNKLElBRzBCLElBQS9CQSxFQUFTL0YsaUJBQ1gxWCxHQUFBQSxHQUFBLENBQUEsRUFDS29kLEdBQU8sQ0FBQSxFQUFBLENBQ1ZDLGFBQWNqSyxFQUFNdEcsWUFBWSxLQUc3QnNRLEVBRVQsS0FBS0gsRUFBQUEsWUFBWVMsaUJBQWlCSSxVQUNoQyxPQUFPTCxFQUVULFFBQ0UsT0FBT0wsRUFDWCxFQUVGVyxhQUFhN1QsR0FDSkEsRUFBYXlDLEdBQW1CekMsR0FBYyxLQUl6RDBRLEVBQWMsQ0FBQSxFQUFJLENBQUVvRCxrQkFBa0IsSUFDdEMzRSxFQUFhLENBQUEsRUFBSSxDQUFFMkUsa0JBQWtCLElBQ3JDckQsRUFBYyxDQUFBLEVBQUksQ0FBRXFELGtCQUFrQixJQUN0Q3ZHLEVBQWEsQ0FBRWEsT0FBUSxHQUFLLENBQUUwRixrQkFBa0IsSUFFaEQsTUFBTUMsaUJBQUVBLEVBQWdCQyxZQUFFQSxFQUFXQyxzQkFBRUEsR0FBMEJqQyxFQUMzRHJCLEVBQVlvRCxFQUNmeGdCLE9BQU8sS0FDUEEsT0FBT3lnQixHQUNQemdCLE9BQU8sS0FDUEEsT0FBTzBnQixHQUNWLE9BQ0VsRyxFQUFBLFFBQUF4TyxjQUFDb1QsVUFBVSxDQUNUTSxPQUFRL0osRUFBTTJKLGFBQ2Q1RSxVQUFXUCxFQUFPLGdCQUNsQndHLGlCQUFrQnhHLEVBQU8sd0JBQ3pCeUcsNkJBQTZCLEVBQzdCQyxrQkFBZ0IsR0FFaEJyRyxFQUFBLFFBQUF4TyxjQUFBLE1BQUEsQ0FDRTBPLFVBQVdQLEVBQU8sd0JBQ2xCcE8sTUFBTyxDQUNMLFVBQVc4UyxFQUFPaUMsUUFDbEIsNkJBQThCakMsRUFBT2tDLGtCQUNyQyxnQkFBaUJsQyxFQUFPbUMsTUFDeEIsdUJBQXdCMUMsRUFBWTJDLFNBR3RDekcsRUFBQSxRQUFBeE8sY0FBQSxNQUFBLENBQUswTyxVQUFXUCxFQUFPLHNCQUF1QjBELFFBQVNvQixHQUNyRHpFLEVBQUEsUUFBQXhPLGNBQUEsU0FBQSxDQUNFNVEsS0FBSyxTQUNMc2YsVUFBV1AsRUFBTyxpQkFDbEJpQyxRQUFTQSxLQUNQbUQsR0FBcUIsR0FDckJYLEVBQVMsQ0FBRXhqQixLQUFNLGNBQWVtaUIsVUFBVSxHQUFPLEVBRW5EVCxVQUFXdmpCLElBQ0w2VCxHQUF5QjdULEtBQzNCZ21CLEdBQXFCLEdBQ3JCWCxFQUFTLENBQUV4akIsS0FBTSxjQUFlbWlCLFVBQVUsSUFDNUMsRUFFRixhQUFZbmtCLEVBQUUsU0FBVSxDQUFFd1UsUUFDMUJzVCxTQUFVLEdBRVYxRyxFQUFBLFFBQUF4TyxjQUFDK1EsVUFBSSxDQUFDQyxJQUFJLFFBQVF4QixNQUFPcUQsRUFBT2lDLFdBRWxDdEcsRUFBQUEsUUFBQXhPLGNBQUEsT0FBQSxDQUFNME8sVUFBV1AsRUFBTyxpQkFDdEJLLEVBQUEsUUFBQXhPLGNBQUFsUyxPQUFBQSxPQUFBMmdCLE9BQUEsQ0FDRUMsVUFBV1AsRUFBTyxrQkFDbEJ6ZixHQUFJc0IsR0FDQW1oQixLQUVIdUIsR0FFSGxFLEVBQUEsUUFBQXhPLGNBQUMzTSxHQUFLLENBQ0o0ZCxZQUNFdlAsR0FBWWhULEdBQ1J0QixFQUFFLDRCQUE2QixDQUFFd1UsUUFDakNxUCxFQUVOdmlCLEdBQUlBLEVBQ0prVCxJQUFLQSxFQUNMNVQsTUFBT0EsRUFDUGtqQixjQUFlQSxFQUNmQyxjQUFlQSxFQUNmTixXQUFZQSxJQUFNQSxFQUFXUSxHQUM3QkQsVUFBV0EsRUFDWEMsU0FBVUEsRUFDVmxELE9BQVFBLEVBQ1JtRCxhQUFhLEVBQ2JHLGlCQUFrQm9CLEVBQU9pQyxRQUN6QnBELFdBQVMsRUFDVEYsZUFBZ0JBLEVBQ2hCelMsU0FBVUEsRUFDVndTLFVBQVEsSUFFVi9DLEVBQUFBLFFBQUF4TyxjQUFDMFAsR0FBVzVoQixPQUFBMmdCLE9BQUEsQ0FDVnBMLFlBQWFzRyxFQUFNdEcsWUFDbkJ1TSxhQUFjQSxFQUNkNUIsYUFBY0EsRUFDZEMsaUJBQWtCQSxFQUNsQnlGLFFBQU8sRUFDUDdELFFBQVEsRUFDUmpPLElBQUtBLEVBQ0x1TSxPQUFRQSxFQUNSMkIsMEJBQXdCLEVBQ3hCQyxtQkFBb0JBLElBQU1vRCxHQUFjLElBQ3BDWCxNQUlWaEUsRUFBQUEsUUFBQXhPLGNBQUNtVixFQUFBQSxRQUFXLENBQ1YvQyxXQUFZQSxFQUNaZ0QsWUFBYWxDLEVBQ2JtQyxZQUFhQSxJQUFNbEMsR0FBYyxHQUNqQ21DLFdBQVlsb0IsRUFBRSw2QkFBOEIsQ0FBRXdVLFFBQzlDMlQsa0JBQW1Cbm9CLEVBQUUsU0FBVSxDQUFFd1UsUUFDakM0VCxvQkFBcUJwb0IsRUFBRSxTQUFVLENBQUV3VSxRQUNuQzZULHFCQUFzQkEsS0FDcEJsRCxJQUNBWSxHQUFjLEVBQU0sRUFFdEJ1Qyx1QkFBd0JBLElBQU12QyxHQUFjLEdBQzVDTixPQUFRQSxFQUNSUCxZQUFhQSxFQUNiMWMsS0FBTWdNLEtBR0Msb2xCQUlqQnFOLFFBQUFDLElBQUFDLFdBQUFnRCxHQUFXOUIsVUFBWSxDQUNyQitCLFdBQVlwRCxFQUFBQSxRQUFVSyxPQUFPaUIsV0FDN0I1aEIsR0FBSXNnQixFQUFBQSxRQUFVSyxPQUFPaUIsV0FDckJPLFdBQVk3QixFQUFBQSxRQUFVdUIsS0FBS0QsV0FDM0JpQyxpQkFBa0J2RCxFQUFBQSxRQUFVdUIsS0FBS0QsV0FDakMrQixxQkFBc0JyRCxFQUFBQSxRQUFVdUIsS0FBS0QsV0FDckN0aUIsTUFBT2doQixFQUFBQSxRQUFVSyxPQUFPaUIsV0FDeEJ1QyxPQUFRN0QsRUFBQUEsUUFBVXlCLFNBQVN6QixFQUFBQSxRQUFVSyxRQUFRaUIsV0FDN0NnQyxZQUFhdEQsRUFBUyxRQUFDSSxNQUFNLENBQzNCNkYsT0FBUWpHLEVBQUFBLFFBQVV3QixPQUFPRixhQUN4QkEsV0FDSGtDLGdCQUFpQnhELEVBQVMsUUFBQ0ksTUFBTSxDQUFBLEdBQUlrQixXQUNyQ21DLFVBQVd6RCxFQUFTLFFBQUNJLE1BQU0sQ0FDekJvRixpQkFBa0J4RixFQUFBQSxRQUFVSyxPQUFPaUIsV0FDbkNtRSxZQUFhekYsRUFBQUEsUUFBVUssT0FBT2lCLFdBQzlCb0Usc0JBQXVCMUYsRUFBQUEsUUFBVUssT0FBT2lCLGFBQ3ZDQSxXQUNIa0IsZUFBZ0J4QyxFQUFBQSxRQUFVSyxPQUFPaUIsV0FDakNXLFlBQWFqQyxFQUFBQSxRQUFVSyxPQUFPaUIsV0FDOUJvQyxZQUFhMUQsRUFBQUEsUUFBVUssT0FBT2lCLFdBQzlCdlIsU0FBVWlRLEVBQUFBLFFBQVVTLEtBQUthLFdBQ3pCcUMsV0FBWTNELEVBQUFBLFFBQVVTLEtBQUthLFdBQzNCMU8sSUFBS29OLEVBQUFBLFFBQVVLLE9BQU9pQixXQUN0QjNHLE1BQU9xRixFQUFTLFFBQUNJLE1BQU0sQ0FDckIvTCxZQUFhMkwsRUFBUyxRQUFDMEIsUUFBUTFCLEVBQUFBLFFBQVVJLE1BQU0sQ0FBQSxJQUFLa0IsV0FDcERnRCxhQUFjdEUsRUFBQUEsUUFBVVMsS0FBS2EsV0FDN0JwUyxRQUFTOFEsRUFBQUEsUUFBVVMsS0FBS2EsYUFDdkJBLFdBQ0hzQyxTQUFVNUQsRUFBQUEsUUFBVXVCLEtBQUtELGFDOVJwQixNQUFNcUYsR0FBZ0JBLENBQUNoTSxFQUFPaU0sS0FDbkMsT0FBUUEsRUFBT3htQixNQUNiLElBQUssZUFDSCxPQUFBbUgsR0FBQUEsR0FBQSxDQUFBLEVBQ0tvVCxHQUFLLENBQUEsRUFBQSxDQUNSM2IsTUFBTzRuQixFQUFPNW5CLFFBRWxCLElBQUssb0JBQ0gsT0FBQXVJLEdBQUFBLEdBQUEsQ0FBQSxFQUNLb1QsR0FBSyxDQUFBLEVBQUEsQ0FDUnpMLFFBQVMwWCxFQUFPMVgsUUFDaEJtRixZQUFhdVMsRUFBT3ZTLGFBQWVzRyxFQUFNdEcsY0FFN0MsSUFBSyxvQkFDSCxPQUFBOU0sR0FBQUEsR0FBQSxDQUFBLEVBQ0tvVCxHQUFLLENBQUEsRUFBQSxDQUNSdEcsWUFBYSxLQUVqQixJQUFLLGNBQ0gsT0FBQTlNLEdBQUFBLEdBQUEsQ0FBQSxFQUNLb1QsR0FBSyxDQUFBLEVBQUEsQ0FDUmtNLGNBQWVELEVBQU9DLGNBQ3RCL2YsUUFBUzhmLEVBQU85ZixRQUNoQmdnQixpQkFBa0JGLEVBQU9FLG1CQUU3QixJQUFLLFFBQ0gsT0FBQXZmLEdBQUFBLEdBQUEsQ0FBQSxFQUNLb1QsR0FBSyxDQUFBLEVBQUEsQ0FDUjNiLE1BQU8sR0FDUCtuQixXQUFXLEVBQ1gxUyxZQUFhLEtBRWpCLElBQUssYUFDSCxPQUFBOU0sR0FBQUEsR0FBQSxDQUFBLEVBQ0tvVCxHQUFLLENBQUEsRUFBQSxDQUNSM2IsTUFBTzRuQixFQUFPNW5CLE9BQVMyYixFQUFNM2IsTUFDN0IrbkIsV0FBV0gsRUFBT3JFLFVBQW1CNUgsRUFBTW9NLFVBQzNDRCxpQkFBa0IsS0FDbEJELGVBQWUsSUFHbkIsSUFBSyxRQUNILE9BQU9ELEVBQU9JLGFBRWhCLElBQUssZ0JBQ0gsT0FBQXpmLEdBQUFBLEdBQUEsQ0FBQSxFQUNLb1QsR0FBSyxDQUFBLEVBQUEsQ0FDUnlLLGFBQWN3QixFQUFPeEIsZUFHekIsSUFBSyxjQUNILE9BQUl3QixFQUFPckUsU0FDSjVILEVBQU0ySixhQU9YL2MsR0FBQUEsR0FBQSxDQUFBLEVBQ0tvVCxHQUFLLENBQUEsRUFBQSxDQUNSMkosY0FBYyxFQUNkeUMsV0FBVyxJQVRYeGYsR0FBQUEsR0FBQSxDQUFBLEVBQ0tvVCxHQUFLLENBQUEsRUFBQSxDQUNSMkosY0FBYyxFQUNkdGxCLE1BQU8yYixFQUFNb00sVUFBWSxHQUFLcE0sRUFBTTNiLFFBUzFDdUksR0FBQUEsR0FBQSxDQUFBLEVBQ0tvVCxHQUFLLENBQUEsRUFBQSxDQUNSc00sWUFBYXRNLEVBQU1zTSxXQUNuQjNDLGFBQWNzQyxFQUFPckUsV0FBYTVILEVBQU0ySixlQUc1QyxRQUNFLE9BQU8zSixFQUNYLHFrQkN2REYsTUFpRE11TSxHQUFZLENBQ2hCLG1CQUNBLHNCQUNBLG1CQUNBLG9CQUNBLGdCQUNBLHNCQUNBLGVBQ0EsMkJBQ0EsdUJBQ0Esd0JBQ0EsbUJBNkpGLFNBQVNDLElBQWMvRCxXQUNyQkEsRUFBVTFqQixHQUNWQSxFQUFFdWlCLFlBQ0ZBLEVBQVdtRixTQUNYQSxFQUFRQyxLQUNSQSxFQUFJcm9CLE1BQ0pBLEVBQUtzb0IsUUFDTEEsRUFDQTFnQixLQUFNZ00sRUFBRzJVLG9CQUNUQSxFQUFtQkMsZ0JBQ25CQSxFQUFlQyxZQUNmQSxFQUFXQyxTQUNYQSxFQUFRbkYsU0FDUkEsRUFBUW1CLFlBQ1JBLEVBQVdsQixlQUNYQSxFQUFjbUYsc0JBQ2RBLEVBQXFCNVgsU0FDckJBLEVBQVFxUyxVQUNSQSxFQUFTa0IsWUFDVEEsRUFBV08sT0FDWEEsRUFBTStELFFBQ05BLEVBQU9qRSxXQUNQQSxFQUFVa0UsV0FDVkEsRUFBVXRlLGNBQ1ZBLEVBQWFELFFBQ2JBLEVBQU94QyxRQUNQQSxFQUFPNEMsY0FDUEEsRUFBYUQsY0FDYkEsRUFBYUQsY0FDYkEsRUFBYUksU0FDYkEsRUFBUUMsU0FDUkEsSUFFQSxNQUFPekwsR0FBS2toQixFQUFBQSxpQkFDTjBILEVBQWUsQ0FDbkIzUyxZQUFhLEdBQ2JuRixTQUFTLEVBQ1RwSSxVQUNBK2YsZUFBZSxFQUNmQyxpQkFBa0IsS0FDbEJDLFdBQVcsRUFDWHpDLGNBQWMsRUFDZHRsQixRQUNBb21CLGNBQWMsRUFDZDZCLFlBQVksSUFFUHRNLEVBQU9pSixHQUFZa0UsRUFBQUEsV0FBV25CLEdBQWVLLEdBRXBEdkwsRUFBU0EsV0FBQyxJQUFNbUksRUFBUyxDQUFFeGpCLEtBQU0sUUFBUzRtQixrQkFBaUIsQ0FBQ2hvQixJQUU1RCxNQUFNcWpCLEVBQVd0RyxTQUFPcmMsR0FDeEIrYixFQUFBQSxXQUFVLEtBQ0ppTSxHQUNGQSxFQUFTckYsRUFBU3hlLFFBQ3BCLEdBQ0MsQ0FBQ3dlLEVBQVN4ZSxVQUViLE1BQU1ra0IsRUFBbUJ2TSxFQUFBQSxhQUFZLEtBQ25DLE1BQ013TSxJQURVMWUsU0FBQUEsRUFBU3pKLFNBQ1V5SixFQUFRekksU0FBUyxhQUU5Q29uQixFQTdNWUMsR0FDcEI1ZSxVQUNBMGUsbUJBQ0F6RixXQUNBNEYsWUFDQXJoQixjQUVBLE1BQU1zaEIsSUFBVTllLFNBQUFBLEVBQVN6SixRQUN6QixJQUFJb29CLEVBdUJKLE9BdEJJRSxHQUNGRixFQUFhLENBQUMsY0FDVkcsR0FBVTllLEVBQVF6SSxTQUFTLFdBQzdCb25CLEVBQVduYyxLQUFLLFVBRWRzYyxHQUFVOWUsRUFBUXpJLFNBQVMsY0FDN0JvbkIsRUFBV25jLEtBQUssYUFFZHNjLEdBQVU5ZSxFQUFRekksU0FBUywyQkFDN0JvbkIsRUFBV25jLEtBQUssMEJBRVJzYyxJQUNWSCxFQUFhLElBQUkzZSxJQUdmMGUsR0FDQ3pGLEdBQ0N6YixFQUFRakgsU0FBVWlILEVBQVFqRyxTQUFTLGNBRXJDb25CLEVBQVduYyxLQUFLLDJCQUdibWMsQ0FBVSxFQThLSUMsQ0FBYyxDQUMvQjVlLFVBQ0EwZSxtQkFDQXpGLFdBQ0E0RixVQUFXeE4sRUFBTWtNLGNBQ2pCL2YsUUFBUzZULEVBQU03VCxVZm1TUXVoQixFQUMzQi9lLEVBQ0F4QyxFQUNBeUMsRUFDQUMsRUFDQUMsRUFDQUMsRUFDQWxELEVBQ0FtRCxFQUNBQyxFQUNBQyxLQUVBRixFQUFTLE1BQ1RQLEdBQ0VFLEVBQ0F4QyxFQUNBeUMsRUFDQUMsRUFDQUMsRUFDQUMsRUFDQWxELEVBQ0FtRCxFQUNBQyxFQUNBQyxFQUNELEVlL1NDd2UsQ0FDRUosRUFWaUJ0TixFQUFNN1QsUUFDckI2VCxFQUFNN1QsUUFBUTVELFFBQ1pnSyxJQUNHOGEsR0FDTSxlQUFOOWEsR0FDRHlOLEVBQU1rTSxlQUNOdEUsSUFFSjVILEVBQU03VCxRQUlSeUMsRUFDQUMsRUFDQUMsRUFDQUMsRUFDQSxDQUNFbkYsTUFBT29XLEVBQU0zYixPQUFTLEtBRXhCc3BCLElBQ0UsR0FBb0IsTUFBaEJBLEVBS0YsWUFKQTFFLEVBQVMsQ0FDUHhqQixLQUFNLG9CQUNOOE8sU0FBUyxJQUtiLE1BQU1xWixHQUFrQkQsRUFBYTdsQixTQUFXLElBQzdDUyxRQUNDdU8sR0FDc0IsZ0JBQXBCQSxFQUFXclIsTUFDVSxnQkFBcEJxUixFQUFXclIsTUFDVnFSLEVBQVd2UixXQUFXdVQsS0FBTytVLEtBQUs1VSxNQUFRLE1BRS9DcFEsS0FBSWlPLElBQ0gsR0FDc0Isb0JBQXBCQSxFQUFXclIsTUFDUyxrQkFBcEJxUixFQUFXclIsTUFDUywyQkFBcEJxUixFQUFXclIsTUFDUyxTQUFwQnFSLEVBQVdyUixLQUNYLENBQ0EsTUFBTXFvQixFQUFvQmxoQixHQUFBLENBQUEsRUFBUWtLLEdBS2xDLE9BSkFnWCxFQUFxQnZvQixXQUFXYyxRQUFVNUMsRUFDeENxVCxFQUFXdlIsV0FBV2MsUUFDdEIsQ0FBRTRSLFFBRUc2VixDQUNULENBQ0EsT0FBT2hYLENBQVUsSUFFckJtUyxFQUFTLENBQ1B4akIsS0FBTSxvQkFDTjhPLFNBQVMsRUFDVG1GLFlBQWFrVSxHQUNiLEdBRUozZSxFQUNBQyxFQUNELEdBQ0EsQ0FDRDhRLEVBQU0zYixNQUNOMmIsRUFBTTdULFFBQ042VCxFQUFNa00sY0FDTnZkLEVBQ0FDLEVBQ0FDLEVBQ0FDLEVBQ0FDLEVBQ0E2WSxFQUNBM1AsRUFDQWhKLEVBQ0FDLEVBQ0FuSyxJQUdJZ3BCLEVBQW1CbE4sRUFBQUEsYUFDdkIsQ0FBQy9KLEVBQVlvTyxLQUNOcE8sSUFHRCtWLEVBQ0ZBLEVBQWdCL1YsRUFBWW9PLEdBRTVCdUgsRUFBUzNWLEVBQVkvUixJQUVuQituQixHQUFpQmxGLElBQVlzRixHQUMvQkosSUFFRXBGLEVBQVN4ZSxTQUNYd2UsRUFBU3hlLFFBQVE4a0IsT0FDbkIsR0FFRixDQUFDcEcsSUFHR2MsRUFBdUJzQixHQUMzQitELEVBQWlCL0QsRUFBUUMsYUFBY0QsRUFBUTFGLG1CQUUzQ3lGLE9BQ0pBLEVBQU16RixpQkFDTkEsRUFBZ0JrRCxjQUNoQkEsRUFBYXZCLGFBQ2JBLEVBQVlzQixjQUNaQSxFQUFhbEQsYUFDYkEsRUFBWTRKLFdBQ1pBLEVBQVVDLFNBQ1ZBLEVBQVFDLFVBQ1JBLEdBQ0V0RSxjQUFZLENBQ2RQLFFBQVN2a0IsRUFDVCtrQixXQUFZOUosRUFBTTNiLE1BQ2xCNmxCLHdCQUF5QixFQUN6QkMsbUJBQW9CQSxFQUFHTCxnQkFDckJiLEVBQVMsQ0FBRXhqQixLQUFNLGVBQWdCcEIsTUFBT3lsQixJQUMxQ00sYUFBY3ZKLEVBQUFBLGFBQ1osQ0FBQ3dKLEdBQVk1a0IsT0FBTXVrQixjQUNqQixPQUFRdmtCLEdBQ04sS0FBS29rQixFQUFXQSxZQUFDUyxpQkFBaUI4RCxVQUNsQyxLQUFLdkUsRUFBQUEsWUFBWVMsaUJBQWlCRSxrQkFHaEMsT0FBSXhLLEVBQU16TCxTQUNSMFUsRUFBUyxDQUFFeGpCLEtBQU0sZ0JBQWlCZ2xCLGNBQWMsSUFDekNKLEdBRUpMLEVBQVFDLGFBR3FCLDJCQUE5QkQsRUFBUUMsYUFBYXhrQixNQUV2QndqQixFQUFTLENBQ1B4akIsS0FBTSxjQUNOMEcsUUFBUyxDQUFDLFlBQWEsUUFDdkIrZixlQUFlLEVBQ2ZDLGlCQUFrQm5DLEVBQVFDLGFBQWF4a0IsT0FFbEM0a0IsR0FFeUIsU0FBOUJMLEVBQVFDLGFBQWF4a0IsTUFDdkJ3akIsRUFBUyxDQUNQeGpCLEtBQU0sY0FDTjBHLFVBQ0ErZixlQUFlLEVBQ2ZDLGlCQUFrQixPQUViOUIsR0FFRkwsRUFyQkVBLEVBdUJYLEtBQUtILEVBQUFBLFlBQVlTLGlCQUFpQitELFdBRWhDLE9BQUk5QixHQUFVcm1CLFNBQVM3QixHQUNyQnVJLEdBQUFBLEdBQUEsQ0FBQSxFQUFZb2QsR0FBTyxDQUFBLEVBQUEsQ0FBRUYsV0FBWSxHQUFJQyxRQUFRLElBRS9DbmQsR0FBQUEsR0FBQSxDQUFBLEVBQ0tvZCxHQUFPLENBQUEsRUFBQSxDQUNWRCxRQUFRLElBR1osS0FBS0YsRUFBQUEsWUFBWVMsaUJBQWlCSSxVQUNoQyxPQUFJVixFQUFRQyxhQUNWcmQsR0FBQUEsR0FBQSxDQUFBLEVBQ0tvZCxHQUFPLENBQUEsRUFBQSxDQUNWQyxhQUFjSSxFQUFTNEQsV0FDdkJuRSxXQUFZTyxFQUFTUCxhQUdsQkUsRUFFVCxLQUFLSCxFQUFBQSxZQUFZUyxpQkFBaUJDLG1CQUNoQyxPQUFBM2QsR0FBQUEsR0FBQSxDQUFBLEVBQ0tvZCxHQUFPLENBQUEsRUFBQSxDQUNWRixXQUFZLEtBR2hCLFFBQ0UsT0FBT0UsRUFFWCxHQUVGLENBQUNoSyxFQUFNekwsUUFBU2xRLEVBQU91akIsSUFFekJ0VyxNQUFPME8sRUFBTXRHLFlBQ2JpUixhQUFhN1QsR0FDSkEsRUFBYXlDLEdBQW1CekMsR0FBYyxHQUV2RDRSLHVCQUNBNEYsZUFBZ0J0RSxJQUNWQSxFQUFRRCxTQUFXL0osRUFBTTJKLGNBQzNCVixFQUFTLENBQUV4akIsS0FBTSxjQUFlbWlCLFlBQ2xDLElBaUJFVixHQUFhblIsSUFDakJrVCxFQUFTLENBQUV4akIsS0FBTSxVQUNia25CLEdBQ0ZBLEVBQVE1bkIsR0FFTmdSLEVBQUk3TSxTQUNONk0sRUFBSTdNLFFBQVFrVCxRQUVkOFIsR0FBVSxFQUlacE4sRUFBQUEsV0FBVSxNQUNKaUosR0FBVS9KLEVBQU0ySixlQUNsQnlELEVBQWlCcE4sRUFBTTNiLE1BQ3pCLEdBQ0MsQ0FBQzBsQixFQUFRL0osRUFBTTJKLGFBQWMzSixFQUFNM2IsTUFBTytvQixJQUc3Q3RNLEVBQUFBLFdBQVUsS0FDSmQsRUFBTXlLLGVBQWlCekssRUFBTXpMLFVBQy9Cd1osRUFBaUIvTixFQUFNdEcsWUFBWSxHQUFJLEdBQ3ZDeVUsSUFDRixHQUNDLENBQUNuTyxFQUFNekwsUUFBU3lMLEVBQU11TyxhQUFjdk8sRUFBTXRHLGNBRTdDLE1BQU04VSxHQUFnQixDQUNwQmphLFFBQVN5TCxFQUFNekwsUUFDZnFULFdBQ0E2RyxvQkFBcUJockIsRUFBRSxZQUFhLENBQUV3VSxRQUN0QzBRLGNBQ0FpRSxzQkFDQTFELFNBQ0ErRCxZQUdJbEMsc0JBQ0pBLEdBQXFCRixpQkFDckJBLEdBQWdCQyxZQUNoQkEsR0FBVzRELGNBQ1hBLElBdGhCaUJDLEdBQ25CNXBCLEtBQ0EwaUIsWUFDQXhQLE1BQ0F4VSxJQUNBbWtCLFdBQ0FsTyxjQUNBclYsUUFDQStRLGVBRUEsTUFBTXdaLEVBQVk3cEIsRUFBR3VGLFFBQVEsZUFBZ0IsSUFDdkN3Z0IsRUFDSnJELEdBQWFoa0IsRUFBRW1yQixFQUFXLENBQUUzVyxRQUFPM04sUUFBUSxlQUFnQixJQUFJRCxPQUFPLEtBQ2xFd2dCLEVBQW1CelYsRUFBVyxHQUFHM1IsRUFBRSxXQUFZLENBQUV3VSxXQUFZLEdBQzdENFcsRUFDRnByQixFQUQwQm1rQixFQUN4QiwrQ0FDQSxnREFEZ0QsQ0FBRTNQLFFBRWxENlcsRUFDRyxXQUFQL3BCLEVBQ0l0QixFQUFFLCtDQUFnRCxDQUFFd1UsUUFDcEQsR0FvQk4sTUFBTyxDQUNMNlMsY0FDQUQsbUJBQ0E2RCxjQXRCb0JHLEVBQ25CeGtCLE9BQU8sS0FDUEEsT0FBT3lrQixHQXFCUkMsa0JBbkJ3QnRyQixFQUFFLHlCQUEwQixDQUNwRHVyQixNQUFPdFYsRUFBWXhVLE9BQ25CK1MsUUFrQkE4UyxzQkFkQXRSLEdBQXdCLENBQUVDLGNBQWFqVyxJQUFHd1UsU0FBVTVULEVBQ2hEWixFQUFFLDRCQUE2QixDQUM3QndVLE1BQ0FnWCxVQUNFeFYsR0FBd0IsQ0FBRUMsY0FBYWpXLElBQUd3VSxRQUFPOVEsZUFDakQ5QyxJQUVKLEdBUUwsRUF5ZUdzcUIsQ0FBYSxDQUNmNXBCLEtBQ0FrVCxNQUNBeFUsSUFDQW1rQixXQUNBSCxZQUNBL04sWUFBYXNHLEVBQU10RyxZQUNuQnJWLE1BQU8yYixFQUFNM2IsTUFDYitRLGFBb0JGLE9BTkEwTCxFQUFBQSxXQUFVLEtBQ0hkLEVBQU0ySixjQUFpQkksR0FDMUJkLEVBQVMsQ0FBRXhqQixLQUFNLFFBQVM0bUIsZ0JBQzVCLEdBQ0MsQ0FBQ3JNLEVBQU0ySixhQUFjSSxJQUd0QmxGLEVBQUEsUUFBQXhPLGNBQUF3TyxFQUFBQSxRQUFBcUssU0FDR3RILEtBQUFBLEdBQ0MvQyxFQUFBQSxRQUFBeE8sY0FBQ21TLEdBQVUsQ0FDVGxCLFlBQWE3akIsRUFBRTZqQixFQUFhLENBQUVyUCxRQUM5QjBRLFlBQWFBLEVBQ2JDLGlCQXZCdUJ1RyxLQUM3QixNQUFNcGYsUUFBRUEsRUFBTzZZLGlCQUFFQSxFQUFnQndHLGtCQUFFQSxHQUFzQnZnQixFQUNyRGtCLEdBQVc2WSxJQUNiQSxFQUFpQjdZLEdBQ2JxZixHQUNGQSxFQUFrQnJmLEdBRXBCcWQsRUFBaUJwTixFQUFNM2IsT0FDekIsRUFnQk1va0IsV0FBWUEsRUFDWk0sWUFBYUEsR0FBZXRsQixFQUFFc0IsRUFBSSxDQUFFa1QsUUFDcEM2USxVQUFXLENBQ1RpQyx5QkFDQUQsZUFDQUQscUJBRUY5bEIsR0FBSUEsRUFDSmtULElBQUtBLEVBQ0x5USxxQkFBc0JBLEVBQ3RCcmtCLE1BQU8yYixFQUFNM2IsTUFDYjZpQixXQUFZQSxHQUNaMkIsZ0JBQWlCMkYsR0FDakJ4RixhQUFjQSxFQUNkRSxPQUFRQSxFQUNSckIsZUFBZ0JBLEVBQ2hCelMsU0FBVUEsRUFDVjRLLE1BQU9BLEVBQ1BpSixTQUFVQSxJQUlkcEUsRUFBQUEsUUFBQXhPLGNBQUEsTUFBQSxDQUNFME8sVUFBV0MsRUFBQUEsUUFDVFIsR0FBTywrQkFDUEEsR0FBT3pmLEdBQ1BpYixFQUFNMkosY0FBZ0IsVUFFeEJ2VCxNQUFPLENBQ0wsVUFBVzhTLEVBQU9pQyxRQUNsQixnQkFBaUJqQyxFQUFPbUMsUUFHekJxQixHQUNDN0gsRUFBQUEsUUFBQXhPLGNBQUEsTUFBQSxDQUNFME8sVUFBV0MsRUFBQUEsUUFDVFIsR0FBTywwQkFDUEEsR0FBT3pmLEdBQ1A4aUIsR0FBa0JyRCxHQUFPLEdBQUdxRCxpQkFFOUIsYUFBWWdELEdBQ1R4Z0IsT0FBTyxLQUNQQSxPQUFPeWdCLElBQ1B6Z0IsT0FBTyxLQUNQQSxPQUFPNUcsRUFBRSwyQkFBNEIsQ0FBRXdVLFVBRTFDNE0sRUFBQSxRQUFBeE8sY0FBQytRLFVBQUksQ0FBQ0MsSUFBSyxHQUFHcUYsT0FHbEI3SCxFQUFBQSxRQUFBeE8sY0FBQzNNLEdBQUssQ0FDSm1lLGVBQWdCQSxFQUNoQkosVUFBV3NELEdBQ1IxZ0IsT0FBTyxLQUNQQSxPQUFPd2dCLElBQ1B4Z0IsT0FBTyxLQUNQQSxPQUFPeWdCLElBQ1B6Z0IsT0FBTyxLQUNQQSxPQUFPcWtCLElBQ1YzcEIsR0FBSUEsRUFDSmtULElBQUtBLEVBQ0xzUCxjQUFlQSxFQUNmQyxjQUFlQSxFQUNmeUcsV0FBWUEsRUFDWjVwQixNQUFPMmIsRUFBTTNiLE1BQ2I2aUIsV0FBWUEsR0FDWlEsU0FBVUEsRUFDVmxELE9BQVFBLEdBQ1JzRCxpQkFBa0JvQixFQUFPaUMsUUFDekI3RCxZQUFhMEYsR0FBeUJ2cEIsRUFBRTZqQixFQUFhLENBQUVyUCxRQUN2RDdDLFNBQVVBLEVBQ1Z4RyxjQUFlQSxFQUNmZ1osU0FBVUEsRUFDVkksWUFsS1lBLEtBQ2xCaUIsRUFBUyxDQUNQckIsV0FDQXZqQixPQUFRdWpCLEdBQVl2akIsRUFDcEJvQixLQUFNLGVBRUhtaUIsR0FDSHFCLEVBQVMsQ0FDUHhqQixLQUFNLFFBQ040bUIsZ0JBRUosSUEwSkl4SCxFQUFBQSxRQUFBeE8sY0FBQzBQLEdBQVc1aEIsT0FBQTJnQixPQUFBLENBQ1ZvQixRQUFTNkQsR0FBVW5DLEVBQ25CdEQsaUJBQWtCQSxFQUNsQkQsYUFBY0EsRUFDZDRCLGFBQWNBLEVBQ2R2TSxZQUFhc0csRUFBTXRHLFlBQ25CekIsSUFBS0EsRUFDTHVNLE9BQVFBLElBQ0pnSyxNQUtkLGdCQUVBbEosUUFBQUMsSUFBQUMsV0FBQWdILEdBQWM5RixVQUFZLENBQ3hCK0IsV0FBWXBELEVBQUFBLFFBQVVLLE9BQU9pQixXQUM3QitGLEtBQU1ySCxFQUFTLFFBQUNLLE9BQ2hCM2dCLEdBQUlzZ0IsRUFBQUEsUUFBVUssT0FBT2lCLFdBQ3JCVyxZQUFhakMsRUFBQUEsUUFBVUssT0FBT2lCLFdBQzlCcUcsc0JBQXVCM0gsRUFBUyxRQUFDSyxPQUNqQ3JoQixNQUFPZ2hCLEVBQVMsUUFBQ0ssT0FDakI5VyxjQUFleVcsRUFBUyxRQUFDSyxPQUN6QjNXLGNBQWVzVyxFQUFTLFFBQUN3QixPQUN6Qi9YLGNBQWV1VyxFQUFTLFFBQUN1QixLQUN6Qi9YLGNBQWV3VyxFQUFTLFFBQUNJLE1BQU0sQ0FDN0J2VixXQUFZbVYsRUFBUyxRQUFDSyxPQUV0QjNWLFFBQVNzVixFQUFTLFFBQUNrRCxPQUNuQkssaUJBQWtCdkQsRUFBUyxRQUFDdUIsS0FDNUJ3SSxrQkFBbUIvSixFQUFTLFFBQUN1QixPQUM1QkQsV0FDSHhhLFFBQVNrWixFQUFTLFFBQUMwQixRQUFRMUIsRUFBQUEsUUFBVUssUUFDckMvVyxRQUFTMFcsRUFBUyxRQUFDMEIsUUFBUTFCLEVBQUFBLFFBQVVLLFFBQ3JDK0IsVUFBV3BDLEVBQVMsUUFBQ0ssT0FDckIrRyxTQUFVcEgsRUFBQUEsUUFBVXVCLEtBQUtELFdBQ3pCZ0csUUFBU3RILEVBQVMsUUFBQ3VCLEtBQ25CbUcsU0FBVTFILEVBQVMsUUFBQ3VCLEtBQ3BCaUcsZ0JBQWlCeEgsRUFBUyxRQUFDdUIsS0FDM0JrRyxZQUFhekgsRUFBUyxRQUFDdUIsS0FDdkIzYSxLQUFNb1osRUFBUyxRQUFDSyxPQUNoQmtDLFNBQVV2QyxFQUFTLFFBQUNTLEtBQ3BCN1csU0FBVW9XLEVBQVMsUUFBQ0ksTUFBTSxDQUN4QjRKLGFBQWNoSyxFQUFTLFFBQUNLLE9BQ3hCNEosWUFBYWpLLEVBQVMsUUFBQ0ssU0FFekJxRCxZQUFhMUQsRUFBUyxRQUFDSyxPQUN2QnhXLFNBQVVtVyxFQUFTLFFBQUNJLE1BQU0sQ0FDeEIxZSxRQUFTc2UsRUFBUyxRQUFDSyxPQUNuQjVVLElBQUt1VSxFQUFTLFFBQUN3QixPQUNmOVYsSUFBS3NVLEVBQVMsUUFBQ3dCLFNBRWpCZ0IsZUFBZ0J4QyxFQUFTLFFBQUNLLE9BQzFCaUQsWUFBYXRELEVBQVMsUUFBQ0ksTUFBTSxDQUMzQjZGLE9BQVFqRyxFQUFTLFFBQUN3QixTQUVwQnFDLE9BQVE3RCxFQUFTLFFBQUN5QixTQUFTekIsRUFBQUEsUUFBVUssUUFDckNrSCxvQkFBcUJ2SCxFQUFTLFFBQUN5QixTQUFTekIsRUFBQUEsUUFBVXVCLE1BQ2xEeFIsU0FBVWlRLEVBQVMsUUFBQ1MsS0FDcEJtSCxRQUFTNUgsRUFBUyxRQUFDSyxPQUNuQnNELFdBQVkzRCxFQUFTLFFBQUNTLEtBQ3RCb0gsV0FBWTdILEVBQVMsUUFBQ1MsT0FHeEIwRyxHQUFjeEYsYUFBZSxDQUMzQjBGLFVBQU1obUIsRUFDTnJDLE1BQU8sR0FDUHVLLG1CQUFlbEksRUFDZm9JLG1CQUFlcEksRUFDZmltQixhQUFTam1CLEVBQ1R1RixLQUFNLEtBQ044Z0IsY0FBVXJtQixFQUNWbW1CLHFCQUFpQm5tQixFQUNqQm9tQixpQkFBYXBtQixFQUNia21CLHlCQUFxQmxtQixFQUNyQnlGLFFBQVMsR0FDVHdDLGFBQVNqSSxFQUNUa2hCLFVBQVUsRUFDVnNGLFlBQVksRUFDWm5lLG1CQUFlckksRUFDZnVJLFNBQVUsQ0FDUm9nQixhQUFjLFNBQ2RDLFlBQWEsV0FFZjdILGVBQVcvZ0IsRUFDWHFpQixpQkFBYXJpQixFQUNibWhCLGVBQWdCLEdBQ2hCbUYsMkJBQXVCdG1CLEVBQ3ZCaWlCLFlBQWEsQ0FDWDJDLE9BQVEsS0FFVnBDLE9BQVFxRyxFQUFhQSxjQUNyQm5hLFVBQVUsRUFDVjZYLGFBQVN2bUIsRUFDVHNpQixZQUFZLEVBQ1o5WixTQUFVLENBQUMsYUFHRXNnQixHQUVYM0ssRUFBQSxRQUFBeE8sY0FBQ29aLGtCQUFlLENBQUNwYyxLQUFNQSxJQUNyQndSLEVBQUEsUUFBQXhPLGNBQUNtVyxHQUFrQmdEIn0=
|