@digitransit-component/digitransit-component-autosuggest 7.1.12 → 7.1.13

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.
@@ -1,3 +1,3 @@
1
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(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"],t):t((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,t,n,r,o,u,i,s,a,l,c,d,p,f,h,g,b,m,y,E,A,F,w){"use strict";function v(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var _=v(t),C=v(n),D=v(o),S=v(u),B=v(i),O=v(s),R=v(a),x=v(l),k=v(c),j=v(d),P=v(f),T=v(b),N=v(m),L=v(y),M=v(A),I=v(F),U=v(w);function q(e){return q="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},q(e)}function z(e){var t=function(e,t){if("object"!=q(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=q(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==q(t)?t:t+""}function H(e,t,n){return(t=z(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function V(e,t){return e&&t&&e===t}const W=["stop","station","favouriteStop","favouriteStation"],$=["favouriteVehicleRentalStation","bikestation"];function J(e){if(!e)return"";const t=e.split(":");return 0===t.length?"":`citybikes${t[0]}:bikestation:${t[1]}`}function K(e,t){const n=e.properties,r=t.properties;if("FutureRoute"===e.type&&"FutureRoute"===t.type){const e=n.origin,t=n.destination,o=r.origin,u=r.destination;return`${e.name}//${e.localadmin}//${t.name}//${t.localadmin}`===`${o.name}//${o.localadmin}//${u.name}//${u.localadmin}`}if("FutureRoute"===e.type||"FutureRoute"===t.type)return!1;if($.includes(n.layer)&&$.includes(r.layer)){return(n.gid||J(n.labelId))===(r.gid||J(r.labelId))}if(n.gtfsId&&r.gtfsId)return n.gtfsId===r.gtfsId;if(W.includes(n.layer)&&W.includes(r.layer)&&n.gid&&r.gid)return n.gid===r.gid;const o=e&&e.geometry?e.geometry.coordinates:void 0,u=t&&t.geometry?t.geometry.coordinates:void 0;return!!(o&&u&&Math.abs(o[0]-u[0])<1e-6&&Math.abs(o[1]-u[1])<1e-6&&(V(n.name,r.name)||V(n.label,r.label)||V(n.address,r.address)||V(n.address,r.label)||V(n.label,r.address)))}const G=e=>R.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-\u088F\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\u0C5C\u0C5D\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDC-\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-\uA7DC\uA7F1-\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\u{10000}-\u{1000B}\u{1000D}-\u{10026}\u{10028}-\u{1003A}\u{1003C}\u{1003D}\u{1003F}-\u{1004D}\u{10050}-\u{1005D}\u{10080}-\u{100FA}\u{10280}-\u{1029C}\u{102A0}-\u{102D0}\u{10300}-\u{1031F}\u{1032D}-\u{10340}\u{10342}-\u{10349}\u{10350}-\u{10375}\u{10380}-\u{1039D}\u{103A0}-\u{103C3}\u{103C8}-\u{103CF}\u{10400}-\u{1049D}\u{104B0}-\u{104D3}\u{104D8}-\u{104FB}\u{10500}-\u{10527}\u{10530}-\u{10563}\u{10570}-\u{1057A}\u{1057C}-\u{1058A}\u{1058C}-\u{10592}\u{10594}\u{10595}\u{10597}-\u{105A1}\u{105A3}-\u{105B1}\u{105B3}-\u{105B9}\u{105BB}\u{105BC}\u{105C0}-\u{105F3}\u{10600}-\u{10736}\u{10740}-\u{10755}\u{10760}-\u{10767}\u{10780}-\u{10785}\u{10787}-\u{107B0}\u{107B2}-\u{107BA}\u{10800}-\u{10805}\u{10808}\u{1080A}-\u{10835}\u{10837}\u{10838}\u{1083C}\u{1083F}-\u{10855}\u{10860}-\u{10876}\u{10880}-\u{1089E}\u{108E0}-\u{108F2}\u{108F4}\u{108F5}\u{10900}-\u{10915}\u{10920}-\u{10939}\u{10940}-\u{10959}\u{10980}-\u{109B7}\u{109BE}\u{109BF}\u{10A00}\u{10A10}-\u{10A13}\u{10A15}-\u{10A17}\u{10A19}-\u{10A35}\u{10A60}-\u{10A7C}\u{10A80}-\u{10A9C}\u{10AC0}-\u{10AC7}\u{10AC9}-\u{10AE4}\u{10B00}-\u{10B35}\u{10B40}-\u{10B55}\u{10B60}-\u{10B72}\u{10B80}-\u{10B91}\u{10C00}-\u{10C48}\u{10C80}-\u{10CB2}\u{10CC0}-\u{10CF2}\u{10D00}-\u{10D23}\u{10D4A}-\u{10D65}\u{10D6F}-\u{10D85}\u{10E80}-\u{10EA9}\u{10EB0}\u{10EB1}\u{10EC2}-\u{10EC7}\u{10F00}-\u{10F1C}\u{10F27}\u{10F30}-\u{10F45}\u{10F70}-\u{10F81}\u{10FB0}-\u{10FC4}\u{10FE0}-\u{10FF6}\u{11003}-\u{11037}\u{11071}\u{11072}\u{11075}\u{11083}-\u{110AF}\u{110D0}-\u{110E8}\u{11103}-\u{11126}\u{11144}\u{11147}\u{11150}-\u{11172}\u{11176}\u{11183}-\u{111B2}\u{111C1}-\u{111C4}\u{111DA}\u{111DC}\u{11200}-\u{11211}\u{11213}-\u{1122B}\u{1123F}\u{11240}\u{11280}-\u{11286}\u{11288}\u{1128A}-\u{1128D}\u{1128F}-\u{1129D}\u{1129F}-\u{112A8}\u{112B0}-\u{112DE}\u{11305}-\u{1130C}\u{1130F}\u{11310}\u{11313}-\u{11328}\u{1132A}-\u{11330}\u{11332}\u{11333}\u{11335}-\u{11339}\u{1133D}\u{11350}\u{1135D}-\u{11361}\u{11380}-\u{11389}\u{1138B}\u{1138E}\u{11390}-\u{113B5}\u{113B7}\u{113D1}\u{113D3}\u{11400}-\u{11434}\u{11447}-\u{1144A}\u{1145F}-\u{11461}\u{11480}-\u{114AF}\u{114C4}\u{114C5}\u{114C7}\u{11580}-\u{115AE}\u{115D8}-\u{115DB}\u{11600}-\u{1162F}\u{11644}\u{11680}-\u{116AA}\u{116B8}\u{11700}-\u{1171A}\u{11740}-\u{11746}\u{11800}-\u{1182B}\u{118A0}-\u{118DF}\u{118FF}-\u{11906}\u{11909}\u{1190C}-\u{11913}\u{11915}\u{11916}\u{11918}-\u{1192F}\u{1193F}\u{11941}\u{119A0}-\u{119A7}\u{119AA}-\u{119D0}\u{119E1}\u{119E3}\u{11A00}\u{11A0B}-\u{11A32}\u{11A3A}\u{11A50}\u{11A5C}-\u{11A89}\u{11A9D}\u{11AB0}-\u{11AF8}\u{11BC0}-\u{11BE0}\u{11C00}-\u{11C08}\u{11C0A}-\u{11C2E}\u{11C40}\u{11C72}-\u{11C8F}\u{11D00}-\u{11D06}\u{11D08}\u{11D09}\u{11D0B}-\u{11D30}\u{11D46}\u{11D60}-\u{11D65}\u{11D67}\u{11D68}\u{11D6A}-\u{11D89}\u{11D98}\u{11DB0}-\u{11DDB}\u{11EE0}-\u{11EF2}\u{11F02}\u{11F04}-\u{11F10}\u{11F12}-\u{11F33}\u{11FB0}\u{12000}-\u{12399}\u{12480}-\u{12543}\u{12F90}-\u{12FF0}\u{13000}-\u{1342F}\u{13441}-\u{13446}\u{13460}-\u{143FA}\u{14400}-\u{14646}\u{16100}-\u{1611D}\u{16800}-\u{16A38}\u{16A40}-\u{16A5E}\u{16A70}-\u{16ABE}\u{16AD0}-\u{16AED}\u{16B00}-\u{16B2F}\u{16B40}-\u{16B43}\u{16B63}-\u{16B77}\u{16B7D}-\u{16B8F}\u{16D40}-\u{16D6C}\u{16E40}-\u{16E7F}\u{16EA0}-\u{16EB8}\u{16EBB}-\u{16ED3}\u{16F00}-\u{16F4A}\u{16F50}\u{16F93}-\u{16F9F}\u{16FE0}\u{16FE1}\u{16FE3}\u{16FF2}\u{16FF3}\u{17000}-\u{18CD5}\u{18CFF}-\u{18D1E}\u{18D80}-\u{18DF2}\u{1AFF0}-\u{1AFF3}\u{1AFF5}-\u{1AFFB}\u{1AFFD}\u{1AFFE}\u{1B000}-\u{1B122}\u{1B132}\u{1B150}-\u{1B152}\u{1B155}\u{1B164}-\u{1B167}\u{1B170}-\u{1B2FB}\u{1BC00}-\u{1BC6A}\u{1BC70}-\u{1BC7C}\u{1BC80}-\u{1BC88}\u{1BC90}-\u{1BC99}\u{1D400}-\u{1D454}\u{1D456}-\u{1D49C}\u{1D49E}\u{1D49F}\u{1D4A2}\u{1D4A5}\u{1D4A6}\u{1D4A9}-\u{1D4AC}\u{1D4AE}-\u{1D4B9}\u{1D4BB}\u{1D4BD}-\u{1D4C3}\u{1D4C5}-\u{1D505}\u{1D507}-\u{1D50A}\u{1D50D}-\u{1D514}\u{1D516}-\u{1D51C}\u{1D51E}-\u{1D539}\u{1D53B}-\u{1D53E}\u{1D540}-\u{1D544}\u{1D546}\u{1D54A}-\u{1D550}\u{1D552}-\u{1D6A5}\u{1D6A8}-\u{1D6C0}\u{1D6C2}-\u{1D6DA}\u{1D6DC}-\u{1D6FA}\u{1D6FC}-\u{1D714}\u{1D716}-\u{1D734}\u{1D736}-\u{1D74E}\u{1D750}-\u{1D76E}\u{1D770}-\u{1D788}\u{1D78A}-\u{1D7A8}\u{1D7AA}-\u{1D7C2}\u{1D7C4}-\u{1D7CB}\u{1DF00}-\u{1DF1E}\u{1DF25}-\u{1DF2A}\u{1E030}-\u{1E06D}\u{1E100}-\u{1E12C}\u{1E137}-\u{1E13D}\u{1E14E}\u{1E290}-\u{1E2AD}\u{1E2C0}-\u{1E2EB}\u{1E4D0}-\u{1E4EB}\u{1E5D0}-\u{1E5ED}\u{1E5F0}\u{1E6C0}-\u{1E6DE}\u{1E6E0}-\u{1E6E2}\u{1E6E4}\u{1E6E5}\u{1E6E7}-\u{1E6ED}\u{1E6F0}-\u{1E6F4}\u{1E6FE}\u{1E6FF}\u{1E7E0}-\u{1E7E6}\u{1E7E8}-\u{1E7EB}\u{1E7ED}\u{1E7EE}\u{1E7F0}-\u{1E7FE}\u{1E800}-\u{1E8C4}\u{1E900}-\u{1E943}\u{1E94B}\u{1EE00}-\u{1EE03}\u{1EE05}-\u{1EE1F}\u{1EE21}\u{1EE22}\u{1EE24}\u{1EE27}\u{1EE29}-\u{1EE32}\u{1EE34}-\u{1EE37}\u{1EE39}\u{1EE3B}\u{1EE42}\u{1EE47}\u{1EE49}\u{1EE4B}\u{1EE4D}-\u{1EE4F}\u{1EE51}\u{1EE52}\u{1EE54}\u{1EE57}\u{1EE59}\u{1EE5B}\u{1EE5D}\u{1EE5F}\u{1EE61}\u{1EE62}\u{1EE64}\u{1EE67}-\u{1EE6A}\u{1EE6C}-\u{1EE72}\u{1EE74}-\u{1EE77}\u{1EE79}-\u{1EE7C}\u{1EE7E}\u{1EE80}-\u{1EE89}\u{1EE8B}-\u{1EE9B}\u{1EEA1}-\u{1EEA3}\u{1EEA5}-\u{1EEA9}\u{1EEAB}-\u{1EEBB}\u{20000}-\u{2A6DF}\u{2A700}-\u{2B81D}\u{2B820}-\u{2CEAD}\u{2CEB0}-\u{2EBE0}\u{2EBF0}-\u{2EE5D}\u{2F800}-\u{2FA1D}\u{30000}-\u{3134A}\u{31350}-\u{33479}]+)/u),Q=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-\u088F\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\u0C5C\u0C5D\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDC-\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-\uA7DC\uA7F1-\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\u{10000}-\u{1000B}\u{1000D}-\u{10026}\u{10028}-\u{1003A}\u{1003C}\u{1003D}\u{1003F}-\u{1004D}\u{10050}-\u{1005D}\u{10080}-\u{100FA}\u{10280}-\u{1029C}\u{102A0}-\u{102D0}\u{10300}-\u{1031F}\u{1032D}-\u{10340}\u{10342}-\u{10349}\u{10350}-\u{10375}\u{10380}-\u{1039D}\u{103A0}-\u{103C3}\u{103C8}-\u{103CF}\u{10400}-\u{1049D}\u{104B0}-\u{104D3}\u{104D8}-\u{104FB}\u{10500}-\u{10527}\u{10530}-\u{10563}\u{10570}-\u{1057A}\u{1057C}-\u{1058A}\u{1058C}-\u{10592}\u{10594}\u{10595}\u{10597}-\u{105A1}\u{105A3}-\u{105B1}\u{105B3}-\u{105B9}\u{105BB}\u{105BC}\u{105C0}-\u{105F3}\u{10600}-\u{10736}\u{10740}-\u{10755}\u{10760}-\u{10767}\u{10780}-\u{10785}\u{10787}-\u{107B0}\u{107B2}-\u{107BA}\u{10800}-\u{10805}\u{10808}\u{1080A}-\u{10835}\u{10837}\u{10838}\u{1083C}\u{1083F}-\u{10855}\u{10860}-\u{10876}\u{10880}-\u{1089E}\u{108E0}-\u{108F2}\u{108F4}\u{108F5}\u{10900}-\u{10915}\u{10920}-\u{10939}\u{10940}-\u{10959}\u{10980}-\u{109B7}\u{109BE}\u{109BF}\u{10A00}\u{10A10}-\u{10A13}\u{10A15}-\u{10A17}\u{10A19}-\u{10A35}\u{10A60}-\u{10A7C}\u{10A80}-\u{10A9C}\u{10AC0}-\u{10AC7}\u{10AC9}-\u{10AE4}\u{10B00}-\u{10B35}\u{10B40}-\u{10B55}\u{10B60}-\u{10B72}\u{10B80}-\u{10B91}\u{10C00}-\u{10C48}\u{10C80}-\u{10CB2}\u{10CC0}-\u{10CF2}\u{10D00}-\u{10D23}\u{10D4A}-\u{10D65}\u{10D6F}-\u{10D85}\u{10E80}-\u{10EA9}\u{10EB0}\u{10EB1}\u{10EC2}-\u{10EC7}\u{10F00}-\u{10F1C}\u{10F27}\u{10F30}-\u{10F45}\u{10F70}-\u{10F81}\u{10FB0}-\u{10FC4}\u{10FE0}-\u{10FF6}\u{11003}-\u{11037}\u{11071}\u{11072}\u{11075}\u{11083}-\u{110AF}\u{110D0}-\u{110E8}\u{11103}-\u{11126}\u{11144}\u{11147}\u{11150}-\u{11172}\u{11176}\u{11183}-\u{111B2}\u{111C1}-\u{111C4}\u{111DA}\u{111DC}\u{11200}-\u{11211}\u{11213}-\u{1122B}\u{1123F}\u{11240}\u{11280}-\u{11286}\u{11288}\u{1128A}-\u{1128D}\u{1128F}-\u{1129D}\u{1129F}-\u{112A8}\u{112B0}-\u{112DE}\u{11305}-\u{1130C}\u{1130F}\u{11310}\u{11313}-\u{11328}\u{1132A}-\u{11330}\u{11332}\u{11333}\u{11335}-\u{11339}\u{1133D}\u{11350}\u{1135D}-\u{11361}\u{11380}-\u{11389}\u{1138B}\u{1138E}\u{11390}-\u{113B5}\u{113B7}\u{113D1}\u{113D3}\u{11400}-\u{11434}\u{11447}-\u{1144A}\u{1145F}-\u{11461}\u{11480}-\u{114AF}\u{114C4}\u{114C5}\u{114C7}\u{11580}-\u{115AE}\u{115D8}-\u{115DB}\u{11600}-\u{1162F}\u{11644}\u{11680}-\u{116AA}\u{116B8}\u{11700}-\u{1171A}\u{11740}-\u{11746}\u{11800}-\u{1182B}\u{118A0}-\u{118DF}\u{118FF}-\u{11906}\u{11909}\u{1190C}-\u{11913}\u{11915}\u{11916}\u{11918}-\u{1192F}\u{1193F}\u{11941}\u{119A0}-\u{119A7}\u{119AA}-\u{119D0}\u{119E1}\u{119E3}\u{11A00}\u{11A0B}-\u{11A32}\u{11A3A}\u{11A50}\u{11A5C}-\u{11A89}\u{11A9D}\u{11AB0}-\u{11AF8}\u{11BC0}-\u{11BE0}\u{11C00}-\u{11C08}\u{11C0A}-\u{11C2E}\u{11C40}\u{11C72}-\u{11C8F}\u{11D00}-\u{11D06}\u{11D08}\u{11D09}\u{11D0B}-\u{11D30}\u{11D46}\u{11D60}-\u{11D65}\u{11D67}\u{11D68}\u{11D6A}-\u{11D89}\u{11D98}\u{11DB0}-\u{11DDB}\u{11EE0}-\u{11EF2}\u{11F02}\u{11F04}-\u{11F10}\u{11F12}-\u{11F33}\u{11FB0}\u{12000}-\u{12399}\u{12480}-\u{12543}\u{12F90}-\u{12FF0}\u{13000}-\u{1342F}\u{13441}-\u{13446}\u{13460}-\u{143FA}\u{14400}-\u{14646}\u{16100}-\u{1611D}\u{16800}-\u{16A38}\u{16A40}-\u{16A5E}\u{16A70}-\u{16ABE}\u{16AD0}-\u{16AED}\u{16B00}-\u{16B2F}\u{16B40}-\u{16B43}\u{16B63}-\u{16B77}\u{16B7D}-\u{16B8F}\u{16D40}-\u{16D6C}\u{16E40}-\u{16E7F}\u{16EA0}-\u{16EB8}\u{16EBB}-\u{16ED3}\u{16F00}-\u{16F4A}\u{16F50}\u{16F93}-\u{16F9F}\u{16FE0}\u{16FE1}\u{16FE3}\u{16FF2}\u{16FF3}\u{17000}-\u{18CD5}\u{18CFF}-\u{18D1E}\u{18D80}-\u{18DF2}\u{1AFF0}-\u{1AFF3}\u{1AFF5}-\u{1AFFB}\u{1AFFD}\u{1AFFE}\u{1B000}-\u{1B122}\u{1B132}\u{1B150}-\u{1B152}\u{1B155}\u{1B164}-\u{1B167}\u{1B170}-\u{1B2FB}\u{1BC00}-\u{1BC6A}\u{1BC70}-\u{1BC7C}\u{1BC80}-\u{1BC88}\u{1BC90}-\u{1BC99}\u{1D400}-\u{1D454}\u{1D456}-\u{1D49C}\u{1D49E}\u{1D49F}\u{1D4A2}\u{1D4A5}\u{1D4A6}\u{1D4A9}-\u{1D4AC}\u{1D4AE}-\u{1D4B9}\u{1D4BB}\u{1D4BD}-\u{1D4C3}\u{1D4C5}-\u{1D505}\u{1D507}-\u{1D50A}\u{1D50D}-\u{1D514}\u{1D516}-\u{1D51C}\u{1D51E}-\u{1D539}\u{1D53B}-\u{1D53E}\u{1D540}-\u{1D544}\u{1D546}\u{1D54A}-\u{1D550}\u{1D552}-\u{1D6A5}\u{1D6A8}-\u{1D6C0}\u{1D6C2}-\u{1D6DA}\u{1D6DC}-\u{1D6FA}\u{1D6FC}-\u{1D714}\u{1D716}-\u{1D734}\u{1D736}-\u{1D74E}\u{1D750}-\u{1D76E}\u{1D770}-\u{1D788}\u{1D78A}-\u{1D7A8}\u{1D7AA}-\u{1D7C2}\u{1D7C4}-\u{1D7CB}\u{1DF00}-\u{1DF1E}\u{1DF25}-\u{1DF2A}\u{1E030}-\u{1E06D}\u{1E100}-\u{1E12C}\u{1E137}-\u{1E13D}\u{1E14E}\u{1E290}-\u{1E2AD}\u{1E2C0}-\u{1E2EB}\u{1E4D0}-\u{1E4EB}\u{1E5D0}-\u{1E5ED}\u{1E5F0}\u{1E6C0}-\u{1E6DE}\u{1E6E0}-\u{1E6E2}\u{1E6E4}\u{1E6E5}\u{1E6E7}-\u{1E6ED}\u{1E6F0}-\u{1E6F4}\u{1E6FE}\u{1E6FF}\u{1E7E0}-\u{1E7E6}\u{1E7E8}-\u{1E7EB}\u{1E7ED}\u{1E7EE}\u{1E7F0}-\u{1E7FE}\u{1E800}-\u{1E8C4}\u{1E900}-\u{1E943}\u{1E94B}\u{1EE00}-\u{1EE03}\u{1EE05}-\u{1EE1F}\u{1EE21}\u{1EE22}\u{1EE24}\u{1EE27}\u{1EE29}-\u{1EE32}\u{1EE34}-\u{1EE37}\u{1EE39}\u{1EE3B}\u{1EE42}\u{1EE47}\u{1EE49}\u{1EE4B}\u{1EE4D}-\u{1EE4F}\u{1EE51}\u{1EE52}\u{1EE54}\u{1EE57}\u{1EE59}\u{1EE5B}\u{1EE5D}\u{1EE5F}\u{1EE61}\u{1EE62}\u{1EE64}\u{1EE67}-\u{1EE6A}\u{1EE6C}-\u{1EE72}\u{1EE74}-\u{1EE77}\u{1EE79}-\u{1EE7C}\u{1EE7E}\u{1EE80}-\u{1EE89}\u{1EE8B}-\u{1EE9B}\u{1EEA1}-\u{1EEA3}\u{1EEA5}-\u{1EEA9}\u{1EEAB}-\u{1EEBB}\u{20000}-\u{2A6DF}\u{2A700}-\u{2B81D}\u{2B820}-\u{2CEAD}\u{2CEB0}-\u{2EBE0}\u{2EBF0}-\u{2EE5D}\u{2F800}-\u{2FA1D}\u{30000}-\u{3134A}\u{31350}-\u{33479}]+$/u.test(e),Z="back",Y="currentPosition",ee="favouriteStop",te="favouriteStation",ne="favouritePlace",re="favouriteRoute",oe="favouriteVehicleRentalStation",ue="futureRoute",ie="station",se="selectFromMap",ae="ownLocations",le="stop",ce="bikestation",de="carpark",pe="bikepark",fe=({layer:e,type:t})=>"stop"===e||"favouriteStop"===e||"stop"===t||"favouriteStop"===t,he=(e,t)=>{switch(e){case Y:return 1;case Z:return.9;case se:return.8;case ae:return.79;case te:case ne:case ee:case re:case oe:return.45;case ue:return.44;case ie:return R.default(t)&&0===t.indexOf("gtfs")?.43:.42;case de:case pe:case ce:return.38;case le:return.36;default:return.41}},ge=(e,t,n="")=>{if(!Array.isArray(t)||!t.length)return t;const r=t=>R.default(t)&&e&&e.test(t),o=G(n),u=r(o),i=x.default(t.filter(e=>e),[e=>u&&r(G(e.properties.shortName))&&0===G(e.properties.shortName).indexOf(o)?1:0,e=>{const{confidence:t,layer:n,source:r}=e.properties;if(0===o.length)return he(n,r);if(!t)return he(n,r)+((e,t)=>R.default(e)&&0!==e.length?["name","label","address","shortName"].map(e=>({name:e,value:t[e]})).filter(e=>R.default(e.value)&&e.value.length>0).map(t=>{let n=G(t.value);return 0===n.indexOf(e)?("shortName"===t.name&&Q(n)&&([n]=X(n)),.5+e.length/n.length):.5*e.length/(e.length+1)}).reduce((e,t)=>t>e?t:e,0):0)(o,e.properties);switch(n){case ie:return t+(0===r.indexOf("gtfs")?.02:.01);case le:case de:case pe:return t-.05;case ce:return t-.04;default:return t}},e=>{if(e.properties.shortName)return Q(e.properties.shortName)?X(e.properties.shortName)[0]:e.properties.shortName},e=>{if(e.properties.shortName)return Q(e.properties.shortName)?X(e.properties.shortName)[1]:e.properties.shortName},"properties.longName"],["desc","desc","asc","asc","asc"]);return k.default(i,K)},be=(e,t)=>null!=t&&-1!==e.lastIndexOf(t)?e.substring(0,e.lastIndexOf(t)-1):e;function me(e,t,n){if("string"==typeof t&&t.length>0){const r=t.toLowerCase().trim(),o=r.includes(" ")||r.includes(",");return e.filter(e=>{let t=[];n.forEach(n=>{let r=j.default(e,n);o||"properties.label"!==n&&"address"!==n||!r||(r=r.split(","),r.length>2?r.splice(r.length-2,2):r.length>1&&r.splice(r.length-1,1),r=r.join(",")),r&&(t=o?t.concat(r.toLowerCase()):t.concat(r.toLowerCase().replace(/,/g," ").split(" ")))});for(let e=0;e<t.length;e++)if(0===t[e].indexOf(r))return!0;return!1})}return e}function ye(e,t){return function(){return e.apply(t,arguments)}}const{toString:Ee}=Object.prototype,{getPrototypeOf:Ae}=Object,{iterator:Fe,toStringTag:we}=Symbol,ve=(_e=Object.create(null),e=>{const t=Ee.call(e);return _e[t]||(_e[t]=t.slice(8,-1).toLowerCase())});var _e;const Ce=e=>(e=e.toLowerCase(),t=>ve(t)===e),De=e=>t=>typeof t===e,{isArray:Se}=Array,Be=De("undefined");function Oe(e){return null!==e&&!Be(e)&&null!==e.constructor&&!Be(e.constructor)&&ke(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const Re=Ce("ArrayBuffer");const xe=De("string"),ke=De("function"),je=De("number"),Pe=e=>null!==e&&"object"==typeof e,Te=e=>{if("object"!==ve(e))return!1;const t=Ae(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t)||we in e||Fe in e)},Ne=Ce("Date"),Le=Ce("File"),Me=Ce("Blob"),Ie=Ce("FileList");const Ue="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},qe=void 0!==Ue.FormData?Ue.FormData:void 0,ze=Ce("URLSearchParams"),[He,Ve,We,$e]=["ReadableStream","Request","Response","Headers"].map(Ce);function Je(e,t,{allOwnKeys:n=!1}={}){if(null==e)return;let r,o;if("object"!=typeof e&&(e=[e]),Se(e))for(r=0,o=e.length;r<o;r++)t.call(null,e[r],r,e);else{if(Oe(e))return;const o=n?Object.getOwnPropertyNames(e):Object.keys(e),u=o.length;let i;for(r=0;r<u;r++)i=o[r],t.call(null,e[i],i,e)}}function Ke(e,t){if(Oe(e))return null;t=t.toLowerCase();const n=Object.keys(e);let r,o=n.length;for(;o-- >0;)if(r=n[o],t===r.toLowerCase())return r;return null}const Ge="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,Xe=e=>!Be(e)&&e!==Ge;const Qe=(Ze="undefined"!=typeof Uint8Array&&Ae(Uint8Array),e=>Ze&&e instanceof Ze);var Ze;const Ye=Ce("HTMLFormElement"),et=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),tt=Ce("RegExp"),nt=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),r={};Je(n,(n,o)=>{let u;!1!==(u=t(n,o,e))&&(r[o]=u||n)}),Object.defineProperties(e,r)};const rt=Ce("AsyncFunction"),ot=(ut="function"==typeof setImmediate,it=ke(Ge.postMessage),ut?setImmediate:it?(st=`axios@${Math.random()}`,at=[],Ge.addEventListener("message",({source:e,data:t})=>{e===Ge&&t===st&&at.length&&at.shift()()},!1),e=>{at.push(e),Ge.postMessage(st,"*")}):e=>setTimeout(e));var ut,it,st,at;const lt="undefined"!=typeof queueMicrotask?queueMicrotask.bind(Ge):"undefined"!=typeof process&&process.nextTick||ot;var ct={isArray:Se,isArrayBuffer:Re,isBuffer:Oe,isFormData:e=>{let t;return e&&(qe&&e instanceof qe||ke(e.append)&&("formdata"===(t=ve(e))||"object"===t&&ke(e.toString)&&"[object FormData]"===e.toString()))},isArrayBufferView:function(e){let t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&Re(e.buffer),t},isString:xe,isNumber:je,isBoolean:e=>!0===e||!1===e,isObject:Pe,isPlainObject:Te,isEmptyObject:e=>{if(!Pe(e)||Oe(e))return!1;try{return 0===Object.keys(e).length&&Object.getPrototypeOf(e)===Object.prototype}catch(e){return!1}},isReadableStream:He,isRequest:Ve,isResponse:We,isHeaders:$e,isUndefined:Be,isDate:Ne,isFile:Le,isReactNativeBlob:e=>!(!e||void 0===e.uri),isReactNative:e=>e&&void 0!==e.getParts,isBlob:Me,isRegExp:tt,isFunction:ke,isStream:e=>Pe(e)&&ke(e.pipe),isURLSearchParams:ze,isTypedArray:Qe,isFileList:Ie,forEach:Je,merge:function e(){const{caseless:t,skipUndefined:n}=Xe(this)&&this||{},r={},o=(o,u)=>{if("__proto__"===u||"constructor"===u||"prototype"===u)return;const i=t&&Ke(r,u)||u;Te(r[i])&&Te(o)?r[i]=e(r[i],o):Te(o)?r[i]=e({},o):Se(o)?r[i]=o.slice():n&&Be(o)||(r[i]=o)};for(let e=0,t=arguments.length;e<t;e++)arguments[e]&&Je(arguments[e],o);return r},extend:(e,t,n,{allOwnKeys:r}={})=>(Je(t,(t,r)=>{n&&ke(t)?Object.defineProperty(e,r,{value:ye(t,n),writable:!0,enumerable:!0,configurable:!0}):Object.defineProperty(e,r,{value:t,writable:!0,enumerable:!0,configurable:!0})},{allOwnKeys:r}),e),trim:e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""),stripBOM:e=>(65279===e.charCodeAt(0)&&(e=e.slice(1)),e),inherits:(e,t,n,r)=>{e.prototype=Object.create(t.prototype,r),Object.defineProperty(e.prototype,"constructor",{value:e,writable:!0,enumerable:!1,configurable:!0}),Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},toFlatObject:(e,t,n,r)=>{let o,u,i;const s={};if(t=t||{},null==e)return t;do{for(o=Object.getOwnPropertyNames(e),u=o.length;u-- >0;)i=o[u],r&&!r(i,e,t)||s[i]||(t[i]=e[i],s[i]=!0);e=!1!==n&&Ae(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},kindOf:ve,kindOfTest:Ce,endsWith:(e,t,n)=>{e=String(e),(void 0===n||n>e.length)&&(n=e.length),n-=t.length;const r=e.indexOf(t,n);return-1!==r&&r===n},toArray:e=>{if(!e)return null;if(Se(e))return e;let t=e.length;if(!je(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},forEachEntry:(e,t)=>{const n=(e&&e[Fe]).call(e);let r;for(;(r=n.next())&&!r.done;){const n=r.value;t.call(e,n[0],n[1])}},matchAll:(e,t)=>{let n;const r=[];for(;null!==(n=e.exec(t));)r.push(n);return r},isHTMLForm:Ye,hasOwnProperty:et,hasOwnProp:et,reduceDescriptors:nt,freezeMethods:e=>{nt(e,(t,n)=>{if(ke(e)&&-1!==["arguments","caller","callee"].indexOf(n))return!1;const r=e[n];ke(r)&&(t.enumerable=!1,"writable"in t?t.writable=!1:t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")}))})},toObjectSet:(e,t)=>{const n={},r=e=>{e.forEach(e=>{n[e]=!0})};return Se(e)?r(e):r(String(e).split(t)),n},toCamelCase:e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(e,t,n){return t.toUpperCase()+n}),noop:()=>{},toFiniteNumber:(e,t)=>null!=e&&Number.isFinite(e=+e)?e:t,findKey:Ke,global:Ge,isContextDefined:Xe,isSpecCompliantForm:function(e){return!!(e&&ke(e.append)&&"FormData"===e[we]&&e[Fe])},toJSONObject:e=>{const t=new Array(10),n=(e,r)=>{if(Pe(e)){if(t.indexOf(e)>=0)return;if(Oe(e))return e;if(!("toJSON"in e)){t[r]=e;const o=Se(e)?[]:{};return Je(e,(e,t)=>{const u=n(e,r+1);!Be(u)&&(o[t]=u)}),t[r]=void 0,o}}return e};return n(e,0)},isAsyncFn:rt,isThenable:e=>e&&(Pe(e)||ke(e))&&ke(e.then)&&ke(e.catch),setImmediate:ot,asap:lt,isIterable:e=>null!=e&&ke(e[Fe])};class dt extends Error{static from(e,t,n,r,o,u){const i=new dt(e.message,t||e.code,n,r,o);return i.cause=e,i.name=e.name,null!=e.status&&null==i.status&&(i.status=e.status),u&&Object.assign(i,u),i}constructor(e,t,n,r,o){super(e),Object.defineProperty(this,"message",{value:e,enumerable:!0,writable:!0,configurable:!0}),this.name="AxiosError",this.isAxiosError=!0,t&&(this.code=t),n&&(this.config=n),r&&(this.request=r),o&&(this.response=o,this.status=o.status)}toJSON(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:ct.toJSONObject(this.config),code:this.code,status:this.status}}}dt.ERR_BAD_OPTION_VALUE="ERR_BAD_OPTION_VALUE",dt.ERR_BAD_OPTION="ERR_BAD_OPTION",dt.ECONNABORTED="ECONNABORTED",dt.ETIMEDOUT="ETIMEDOUT",dt.ERR_NETWORK="ERR_NETWORK",dt.ERR_FR_TOO_MANY_REDIRECTS="ERR_FR_TOO_MANY_REDIRECTS",dt.ERR_DEPRECATED="ERR_DEPRECATED",dt.ERR_BAD_RESPONSE="ERR_BAD_RESPONSE",dt.ERR_BAD_REQUEST="ERR_BAD_REQUEST",dt.ERR_CANCELED="ERR_CANCELED",dt.ERR_NOT_SUPPORT="ERR_NOT_SUPPORT",dt.ERR_INVALID_URL="ERR_INVALID_URL";var pt=dt;function ft(e){return ct.isPlainObject(e)||ct.isArray(e)}function ht(e){return ct.endsWith(e,"[]")?e.slice(0,-2):e}function gt(e,t,n){return e?e.concat(t).map(function(e,t){return e=ht(e),!n&&t?"["+e+"]":e}).join(n?".":""):t}const bt=ct.toFlatObject(ct,{},null,function(e){return/^is[A-Z]/.test(e)});function mt(e,t,n){if(!ct.isObject(e))throw new TypeError("target must be an object");t=t||new FormData;const r=(n=ct.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,function(e,t){return!ct.isUndefined(t[e])})).metaTokens,o=n.visitor||l,u=n.dots,i=n.indexes,s=(n.Blob||"undefined"!=typeof Blob&&Blob)&&ct.isSpecCompliantForm(t);if(!ct.isFunction(o))throw new TypeError("visitor must be a function");function a(e){if(null===e)return"";if(ct.isDate(e))return e.toISOString();if(ct.isBoolean(e))return e.toString();if(!s&&ct.isBlob(e))throw new pt("Blob is not supported. Use a Buffer instead.");return ct.isArrayBuffer(e)||ct.isTypedArray(e)?s&&"function"==typeof Blob?new Blob([e]):Buffer.from(e):e}function l(e,n,o){let s=e;if(ct.isReactNative(t)&&ct.isReactNativeBlob(e))return t.append(gt(o,n,u),a(e)),!1;if(e&&!o&&"object"==typeof e)if(ct.endsWith(n,"{}"))n=r?n:n.slice(0,-2),e=JSON.stringify(e);else if(ct.isArray(e)&&function(e){return ct.isArray(e)&&!e.some(ft)}(e)||(ct.isFileList(e)||ct.endsWith(n,"[]"))&&(s=ct.toArray(e)))return n=ht(n),s.forEach(function(e,r){!ct.isUndefined(e)&&null!==e&&t.append(!0===i?gt([n],r,u):null===i?n:n+"[]",a(e))}),!1;return!!ft(e)||(t.append(gt(o,n,u),a(e)),!1)}const c=[],d=Object.assign(bt,{defaultVisitor:l,convertValue:a,isVisitable:ft});if(!ct.isObject(e))throw new TypeError("data must be an object");return function e(n,r){if(!ct.isUndefined(n)){if(-1!==c.indexOf(n))throw Error("Circular reference detected in "+r.join("."));c.push(n),ct.forEach(n,function(n,u){!0===(!(ct.isUndefined(n)||null===n)&&o.call(t,n,ct.isString(u)?u.trim():u,r,d))&&e(n,r?r.concat(u):[u])}),c.pop()}}(e),t}function yt(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(e){return t[e]})}function Et(e,t){this._pairs=[],e&&mt(e,this,t)}const At=Et.prototype;function Ft(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+")}function wt(e,t,n){if(!t)return e;const r=n&&n.encode||Ft,o=ct.isFunction(n)?{serialize:n}:n,u=o&&o.serialize;let i;if(i=u?u(t,o):ct.isURLSearchParams(t)?t.toString():new Et(t,o).toString(r),i){const t=e.indexOf("#");-1!==t&&(e=e.slice(0,t)),e+=(-1===e.indexOf("?")?"?":"&")+i}return e}At.append=function(e,t){this._pairs.push([e,t])},At.toString=function(e){const t=e?function(t){return e.call(this,t,yt)}:yt;return this._pairs.map(function(e){return t(e[0])+"="+t(e[1])},"").join("&")};var vt=class{constructor(){this.handlers=[]}use(e,t,n){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){ct.forEach(this.handlers,function(t){null!==t&&e(t)})}},_t={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1,legacyInterceptorReqResOrdering:!0},Ct={isBrowser:!0,classes:{URLSearchParams:"undefined"!=typeof URLSearchParams?URLSearchParams:Et,FormData:"undefined"!=typeof FormData?FormData:null,Blob:"undefined"!=typeof Blob?Blob:null},protocols:["http","https","file","blob","url","data"]};const Dt="undefined"!=typeof window&&"undefined"!=typeof document,St="object"==typeof navigator&&navigator||void 0,Bt=Dt&&(!St||["ReactNative","NativeScript","NS"].indexOf(St.product)<0),Ot="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"==typeof self.importScripts,Rt=Dt&&window.location.href||"http://localhost";var xt={...Object.freeze({__proto__:null,hasBrowserEnv:Dt,hasStandardBrowserWebWorkerEnv:Ot,hasStandardBrowserEnv:Bt,navigator:St,origin:Rt}),...Ct};function kt(e){function t(e,n,r,o){let u=e[o++];if("__proto__"===u)return!0;const i=Number.isFinite(+u),s=o>=e.length;if(u=!u&&ct.isArray(r)?r.length:u,s)return ct.hasOwnProp(r,u)?r[u]=[r[u],n]:r[u]=n,!i;r[u]&&ct.isObject(r[u])||(r[u]=[]);return t(e,n,r[u],o)&&ct.isArray(r[u])&&(r[u]=function(e){const t={},n=Object.keys(e);let r;const o=n.length;let u;for(r=0;r<o;r++)u=n[r],t[u]=e[u];return t}(r[u])),!i}if(ct.isFormData(e)&&ct.isFunction(e.entries)){const n={};return ct.forEachEntry(e,(e,r)=>{t(function(e){return ct.matchAll(/\w+|\[(\w*)]/g,e).map(e=>"[]"===e[0]?"":e[1]||e[0])}(e),r,n,0)}),n}return null}const jt={transitional:_t,adapter:["xhr","http","fetch"],transformRequest:[function(e,t){const n=t.getContentType()||"",r=n.indexOf("application/json")>-1,o=ct.isObject(e);o&&ct.isHTMLForm(e)&&(e=new FormData(e));if(ct.isFormData(e))return r?JSON.stringify(kt(e)):e;if(ct.isArrayBuffer(e)||ct.isBuffer(e)||ct.isStream(e)||ct.isFile(e)||ct.isBlob(e)||ct.isReadableStream(e))return e;if(ct.isArrayBufferView(e))return e.buffer;if(ct.isURLSearchParams(e))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let u;if(o){if(n.indexOf("application/x-www-form-urlencoded")>-1)return function(e,t){return mt(e,new xt.classes.URLSearchParams,{visitor:function(e,t,n,r){return xt.isNode&&ct.isBuffer(e)?(this.append(t,e.toString("base64")),!1):r.defaultVisitor.apply(this,arguments)},...t})}(e,this.formSerializer).toString();if((u=ct.isFileList(e))||n.indexOf("multipart/form-data")>-1){const t=this.env&&this.env.FormData;return mt(u?{"files[]":e}:e,t&&new t,this.formSerializer)}}return o||r?(t.setContentType("application/json",!1),function(e,t,n){if(ct.isString(e))try{return(t||JSON.parse)(e),ct.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(n||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){const t=this.transitional||jt.transitional,n=t&&t.forcedJSONParsing,r="json"===this.responseType;if(ct.isResponse(e)||ct.isReadableStream(e))return e;if(e&&ct.isString(e)&&(n&&!this.responseType||r)){const n=!(t&&t.silentJSONParsing)&&r;try{return JSON.parse(e,this.parseReviver)}catch(e){if(n){if("SyntaxError"===e.name)throw pt.from(e,pt.ERR_BAD_RESPONSE,this,null,this.response);throw e}}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:xt.classes.FormData,Blob:xt.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};ct.forEach(["delete","get","head","post","put","patch"],e=>{jt.headers[e]={}});var Pt=jt;const Tt=ct.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]);const Nt=Symbol("internals");function Lt(e,t){if(!1!==e&&null!=e)if(ct.isArray(e))e.forEach(e=>Lt(e,t));else if(!(e=>!/[\r\n]/.test(e))(String(e)))throw new Error(`Invalid character in header content ["${t}"]`)}function Mt(e){return e&&String(e).trim().toLowerCase()}function It(e){return!1===e||null==e?e:ct.isArray(e)?e.map(It):function(e){let t=e.length;for(;t>0;){const n=e.charCodeAt(t-1);if(10!==n&&13!==n)break;t-=1}return t===e.length?e:e.slice(0,t)}(String(e))}function Ut(e,t,n,r,o){return ct.isFunction(r)?r.call(this,t,n):(o&&(t=n),ct.isString(t)?ct.isString(r)?-1!==t.indexOf(r):ct.isRegExp(r)?r.test(t):void 0:void 0)}class qt{constructor(e){e&&this.set(e)}set(e,t,n){const r=this;function o(e,t,n){const o=Mt(t);if(!o)throw new Error("header name must be a non-empty string");const u=ct.findKey(r,o);(!u||void 0===r[u]||!0===n||void 0===n&&!1!==r[u])&&(Lt(e,t),r[u||t]=It(e))}const u=(e,t)=>ct.forEach(e,(e,n)=>o(e,n,t));if(ct.isPlainObject(e)||e instanceof this.constructor)u(e,t);else if(ct.isString(e)&&(e=e.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim()))u((e=>{const t={};let n,r,o;return e&&e.split("\n").forEach(function(e){o=e.indexOf(":"),n=e.substring(0,o).trim().toLowerCase(),r=e.substring(o+1).trim(),!n||t[n]&&Tt[n]||("set-cookie"===n?t[n]?t[n].push(r):t[n]=[r]:t[n]=t[n]?t[n]+", "+r:r)}),t})(e),t);else if(ct.isObject(e)&&ct.isIterable(e)){let n,r,o={};for(const t of e){if(!ct.isArray(t))throw TypeError("Object iterator must return a key-value pair");o[r=t[0]]=(n=o[r])?ct.isArray(n)?[...n,t[1]]:[n,t[1]]:t[1]}u(o,t)}else null!=e&&o(t,e,n);return this}get(e,t){if(e=Mt(e)){const n=ct.findKey(this,e);if(n){const e=this[n];if(!t)return e;if(!0===t)return function(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let r;for(;r=n.exec(e);)t[r[1]]=r[2];return t}(e);if(ct.isFunction(t))return t.call(this,e,n);if(ct.isRegExp(t))return t.exec(e);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,t){if(e=Mt(e)){const n=ct.findKey(this,e);return!(!n||void 0===this[n]||t&&!Ut(0,this[n],n,t))}return!1}delete(e,t){const n=this;let r=!1;function o(e){if(e=Mt(e)){const o=ct.findKey(n,e);!o||t&&!Ut(0,n[o],o,t)||(delete n[o],r=!0)}}return ct.isArray(e)?e.forEach(o):o(e),r}clear(e){const t=Object.keys(this);let n=t.length,r=!1;for(;n--;){const o=t[n];e&&!Ut(0,this[o],o,e,!0)||(delete this[o],r=!0)}return r}normalize(e){const t=this,n={};return ct.forEach(this,(r,o)=>{const u=ct.findKey(n,o);if(u)return t[u]=It(r),void delete t[o];const i=e?function(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(e,t,n)=>t.toUpperCase()+n)}(o):String(o).trim();i!==o&&delete t[o],t[i]=It(r),n[i]=!0}),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const t=Object.create(null);return ct.forEach(this,(n,r)=>{null!=n&&!1!==n&&(t[r]=e&&ct.isArray(n)?n.join(", "):n)}),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([e,t])=>e+": "+t).join("\n")}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...t){const n=new this(e);return t.forEach(e=>n.set(e)),n}static accessor(e){const t=(this[Nt]=this[Nt]={accessors:{}}).accessors,n=this.prototype;function r(e){const r=Mt(e);t[r]||(!function(e,t){const n=ct.toCamelCase(" "+t);["get","set","has"].forEach(r=>{Object.defineProperty(e,r+n,{value:function(e,n,o){return this[r].call(this,t,e,n,o)},configurable:!0})})}(n,e),t[r]=!0)}return ct.isArray(e)?e.forEach(r):r(e),this}}qt.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),ct.reduceDescriptors(qt.prototype,({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(e){this[n]=e}}}),ct.freezeMethods(qt);var zt=qt;function Ht(e,t){const n=this||Pt,r=t||n,o=zt.from(r.headers);let u=r.data;return ct.forEach(e,function(e){u=e.call(n,u,o.normalize(),t?t.status:void 0)}),o.normalize(),u}function Vt(e){return!(!e||!e.__CANCEL__)}var Wt=class extends pt{constructor(e,t,n){super(null==e?"canceled":e,pt.ERR_CANCELED,t,n),this.name="CanceledError",this.__CANCEL__=!0}};function $t(e,t,n){const r=n.config.validateStatus;n.status&&r&&!r(n.status)?t(new pt("Request failed with status code "+n.status,[pt.ERR_BAD_REQUEST,pt.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n)):e(n)}const Jt=(e,t,n=3)=>{let r=0;const o=function(e,t){e=e||10;const n=new Array(e),r=new Array(e);let o,u=0,i=0;return t=void 0!==t?t:1e3,function(s){const a=Date.now(),l=r[i];o||(o=a),n[u]=s,r[u]=a;let c=i,d=0;for(;c!==u;)d+=n[c++],c%=e;if(u=(u+1)%e,u===i&&(i=(i+1)%e),a-o<t)return;const p=l&&a-l;return p?Math.round(1e3*d/p):void 0}}(50,250);return function(e,t){let n,r,o=0,u=1e3/t;const i=(t,u=Date.now())=>{o=u,n=null,r&&(clearTimeout(r),r=null),e(...t)};return[(...e)=>{const t=Date.now(),s=t-o;s>=u?i(e,t):(n=e,r||(r=setTimeout(()=>{r=null,i(n)},u-s)))},()=>n&&i(n)]}(n=>{const u=n.loaded,i=n.lengthComputable?n.total:void 0,s=u-r,a=o(s);r=u;e({loaded:u,total:i,progress:i?u/i:void 0,bytes:s,rate:a||void 0,estimated:a&&i&&u<=i?(i-u)/a:void 0,event:n,lengthComputable:null!=i,[t?"download":"upload"]:!0})},n)},Kt=(e,t)=>{const n=null!=e;return[r=>t[0]({lengthComputable:n,total:e,loaded:r}),t[1]]},Gt=e=>(...t)=>ct.asap(()=>e(...t));var Xt=xt.hasStandardBrowserEnv?((e,t)=>n=>(n=new URL(n,xt.origin),e.protocol===n.protocol&&e.host===n.host&&(t||e.port===n.port)))(new URL(xt.origin),xt.navigator&&/(msie|trident)/i.test(xt.navigator.userAgent)):()=>!0,Qt=xt.hasStandardBrowserEnv?{write(e,t,n,r,o,u,i){if("undefined"==typeof document)return;const s=[`${e}=${encodeURIComponent(t)}`];ct.isNumber(n)&&s.push(`expires=${new Date(n).toUTCString()}`),ct.isString(r)&&s.push(`path=${r}`),ct.isString(o)&&s.push(`domain=${o}`),!0===u&&s.push("secure"),ct.isString(i)&&s.push(`SameSite=${i}`),document.cookie=s.join("; ")},read(e){if("undefined"==typeof document)return null;const t=document.cookie.match(new RegExp("(?:^|; )"+e+"=([^;]*)"));return t?decodeURIComponent(t[1]):null},remove(e){this.write(e,"",Date.now()-864e5,"/")}}:{write(){},read:()=>null,remove(){}};function Zt(e,t,n){let r=!("string"==typeof(o=t)&&/^([a-z][a-z\d+\-.]*:)?\/\//i.test(o));var o;return e&&(r||0==n)?function(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}(e,t):t}const Yt=e=>e instanceof zt?{...e}:e;function en(e,t){t=t||{};const n={};function r(e,t,n,r){return ct.isPlainObject(e)&&ct.isPlainObject(t)?ct.merge.call({caseless:r},e,t):ct.isPlainObject(t)?ct.merge({},t):ct.isArray(t)?t.slice():t}function o(e,t,n,o){return ct.isUndefined(t)?ct.isUndefined(e)?void 0:r(void 0,e,0,o):r(e,t,0,o)}function u(e,t){if(!ct.isUndefined(t))return r(void 0,t)}function i(e,t){return ct.isUndefined(t)?ct.isUndefined(e)?void 0:r(void 0,e):r(void 0,t)}function s(n,o,u){return u in t?r(n,o):u in e?r(void 0,n):void 0}const a={url:u,method:u,data:u,baseURL:i,transformRequest:i,transformResponse:i,paramsSerializer:i,timeout:i,timeoutMessage:i,withCredentials:i,withXSRFToken:i,adapter:i,responseType:i,xsrfCookieName:i,xsrfHeaderName:i,onUploadProgress:i,onDownloadProgress:i,decompress:i,maxContentLength:i,maxBodyLength:i,beforeRedirect:i,transport:i,httpAgent:i,httpsAgent:i,cancelToken:i,socketPath:i,responseEncoding:i,validateStatus:s,headers:(e,t,n)=>o(Yt(e),Yt(t),0,!0)};return ct.forEach(Object.keys({...e,...t}),function(r){if("__proto__"===r||"constructor"===r||"prototype"===r)return;const u=ct.hasOwnProp(a,r)?a[r]:o,i=u(e[r],t[r],r);ct.isUndefined(i)&&u!==s||(n[r]=i)}),n}var tn=e=>{const t=en({},e);let{data:n,withXSRFToken:r,xsrfHeaderName:o,xsrfCookieName:u,headers:i,auth:s}=t;if(t.headers=i=zt.from(i),t.url=wt(Zt(t.baseURL,t.url,t.allowAbsoluteUrls),e.params,e.paramsSerializer),s&&i.set("Authorization","Basic "+btoa((s.username||"")+":"+(s.password?unescape(encodeURIComponent(s.password)):""))),ct.isFormData(n))if(xt.hasStandardBrowserEnv||xt.hasStandardBrowserWebWorkerEnv)i.setContentType(void 0);else if(ct.isFunction(n.getHeaders)){const e=n.getHeaders(),t=["content-type","content-length"];Object.entries(e).forEach(([e,n])=>{t.includes(e.toLowerCase())&&i.set(e,n)})}if(xt.hasStandardBrowserEnv&&(r&&ct.isFunction(r)&&(r=r(t)),r||!1!==r&&Xt(t.url))){const e=o&&u&&Qt.read(u);e&&i.set(o,e)}return t};var nn="undefined"!=typeof XMLHttpRequest&&function(e){return new Promise(function(t,n){const r=tn(e);let o=r.data;const u=zt.from(r.headers).normalize();let i,s,a,l,c,{responseType:d,onUploadProgress:p,onDownloadProgress:f}=r;function h(){l&&l(),c&&c(),r.cancelToken&&r.cancelToken.unsubscribe(i),r.signal&&r.signal.removeEventListener("abort",i)}let g=new XMLHttpRequest;function b(){if(!g)return;const r=zt.from("getAllResponseHeaders"in g&&g.getAllResponseHeaders());$t(function(e){t(e),h()},function(e){n(e),h()},{data:d&&"text"!==d&&"json"!==d?g.response:g.responseText,status:g.status,statusText:g.statusText,headers:r,config:e,request:g}),g=null}g.open(r.method.toUpperCase(),r.url,!0),g.timeout=r.timeout,"onloadend"in g?g.onloadend=b:g.onreadystatechange=function(){g&&4===g.readyState&&(0!==g.status||g.responseURL&&0===g.responseURL.indexOf("file:"))&&setTimeout(b)},g.onabort=function(){g&&(n(new pt("Request aborted",pt.ECONNABORTED,e,g)),g=null)},g.onerror=function(t){const r=t&&t.message?t.message:"Network Error",o=new pt(r,pt.ERR_NETWORK,e,g);o.event=t||null,n(o),g=null},g.ontimeout=function(){let t=r.timeout?"timeout of "+r.timeout+"ms exceeded":"timeout exceeded";const o=r.transitional||_t;r.timeoutErrorMessage&&(t=r.timeoutErrorMessage),n(new pt(t,o.clarifyTimeoutError?pt.ETIMEDOUT:pt.ECONNABORTED,e,g)),g=null},void 0===o&&u.setContentType(null),"setRequestHeader"in g&&ct.forEach(u.toJSON(),function(e,t){g.setRequestHeader(t,e)}),ct.isUndefined(r.withCredentials)||(g.withCredentials=!!r.withCredentials),d&&"json"!==d&&(g.responseType=r.responseType),f&&([a,c]=Jt(f,!0),g.addEventListener("progress",a)),p&&g.upload&&([s,l]=Jt(p),g.upload.addEventListener("progress",s),g.upload.addEventListener("loadend",l)),(r.cancelToken||r.signal)&&(i=t=>{g&&(n(!t||t.type?new Wt(null,e,g):t),g.abort(),g=null)},r.cancelToken&&r.cancelToken.subscribe(i),r.signal&&(r.signal.aborted?i():r.signal.addEventListener("abort",i)));const m=function(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}(r.url);m&&-1===xt.protocols.indexOf(m)?n(new pt("Unsupported protocol "+m+":",pt.ERR_BAD_REQUEST,e)):g.send(o||null)})};var rn=(e,t)=>{const{length:n}=e=e?e.filter(Boolean):[];if(t||n){let n,r=new AbortController;const o=function(e){if(!n){n=!0,i();const t=e instanceof Error?e:this.reason;r.abort(t instanceof pt?t:new Wt(t instanceof Error?t.message:t))}};let u=t&&setTimeout(()=>{u=null,o(new pt(`timeout of ${t}ms exceeded`,pt.ETIMEDOUT))},t);const i=()=>{e&&(u&&clearTimeout(u),u=null,e.forEach(e=>{e.unsubscribe?e.unsubscribe(o):e.removeEventListener("abort",o)}),e=null)};e.forEach(e=>e.addEventListener("abort",o));const{signal:s}=r;return s.unsubscribe=()=>ct.asap(i),s}};const on=function*(e,t){let n=e.byteLength;if(!t||n<t)return void(yield e);let r,o=0;for(;o<n;)r=o+t,yield e.slice(o,r),o=r},un=async function*(e){if(e[Symbol.asyncIterator])return void(yield*e);const t=e.getReader();try{for(;;){const{done:e,value:n}=await t.read();if(e)break;yield n}}finally{await t.cancel()}},sn=(e,t,n,r)=>{const o=async function*(e,t){for await(const n of un(e))yield*on(n,t)}(e,t);let u,i=0,s=e=>{u||(u=!0,r&&r(e))};return new ReadableStream({async pull(e){try{const{done:t,value:r}=await o.next();if(t)return s(),void e.close();let u=r.byteLength;if(n){let e=i+=u;n(e)}e.enqueue(new Uint8Array(r))}catch(e){throw s(e),e}},cancel:e=>(s(e),o.return())},{highWaterMark:2})},{isFunction:an}=ct,ln=(({Request:e,Response:t})=>({Request:e,Response:t}))(ct.global),{ReadableStream:cn,TextEncoder:dn}=ct.global,pn=(e,...t)=>{try{return!!e(...t)}catch(e){return!1}},fn=e=>{e=ct.merge.call({skipUndefined:!0},ln,e);const{fetch:t,Request:n,Response:r}=e,o=t?an(t):"function"==typeof fetch,u=an(n),i=an(r);if(!o)return!1;const s=o&&an(cn),a=o&&("function"==typeof dn?(l=new dn,e=>l.encode(e)):async e=>new Uint8Array(await new n(e).arrayBuffer()));var l;const c=u&&s&&pn(()=>{let e=!1;const t=new cn,r=new n(xt.origin,{body:t,method:"POST",get duplex(){return e=!0,"half"}}).headers.has("Content-Type");return t.cancel(),e&&!r}),d=i&&s&&pn(()=>ct.isReadableStream(new r("").body)),p={stream:d&&(e=>e.body)};o&&["text","arrayBuffer","blob","formData","stream"].forEach(e=>{!p[e]&&(p[e]=(t,n)=>{let r=t&&t[e];if(r)return r.call(t);throw new pt(`Response type '${e}' is not supported`,pt.ERR_NOT_SUPPORT,n)})});const f=async(e,t)=>{const r=ct.toFiniteNumber(e.getContentLength());return null==r?(async e=>{if(null==e)return 0;if(ct.isBlob(e))return e.size;if(ct.isSpecCompliantForm(e)){const t=new n(xt.origin,{method:"POST",body:e});return(await t.arrayBuffer()).byteLength}return ct.isArrayBufferView(e)||ct.isArrayBuffer(e)?e.byteLength:(ct.isURLSearchParams(e)&&(e+=""),ct.isString(e)?(await a(e)).byteLength:void 0)})(t):r};return async e=>{let{url:o,method:i,data:s,signal:a,cancelToken:l,timeout:h,onDownloadProgress:g,onUploadProgress:b,responseType:m,headers:y,withCredentials:E="same-origin",fetchOptions:A}=tn(e),F=t||fetch;m=m?(m+"").toLowerCase():"text";let w=rn([a,l&&l.toAbortSignal()],h),v=null;const _=w&&w.unsubscribe&&(()=>{w.unsubscribe()});let C;try{if(b&&c&&"get"!==i&&"head"!==i&&0!==(C=await f(y,s))){let e,t=new n(o,{method:"POST",body:s,duplex:"half"});if(ct.isFormData(s)&&(e=t.headers.get("content-type"))&&y.setContentType(e),t.body){const[e,n]=Kt(C,Jt(Gt(b)));s=sn(t.body,65536,e,n)}}ct.isString(E)||(E=E?"include":"omit");const t=u&&"credentials"in n.prototype,a={...A,signal:w,method:i.toUpperCase(),headers:y.normalize().toJSON(),body:s,duplex:"half",credentials:t?E:void 0};v=u&&new n(o,a);let l=await(u?F(v,A):F(o,a));const h=d&&("stream"===m||"response"===m);if(d&&(g||h&&_)){const e={};["status","statusText","headers"].forEach(t=>{e[t]=l[t]});const t=ct.toFiniteNumber(l.headers.get("content-length")),[n,o]=g&&Kt(t,Jt(Gt(g),!0))||[];l=new r(sn(l.body,65536,n,()=>{o&&o(),_&&_()}),e)}m=m||"text";let D=await p[ct.findKey(p,m)||"text"](l,e);return!h&&_&&_(),await new Promise((t,n)=>{$t(t,n,{data:D,headers:zt.from(l.headers),status:l.status,statusText:l.statusText,config:e,request:v})})}catch(t){if(_&&_(),t&&"TypeError"===t.name&&/Load failed|fetch/i.test(t.message))throw Object.assign(new pt("Network Error",pt.ERR_NETWORK,e,v,t&&t.response),{cause:t.cause||t});throw pt.from(t,t&&t.code,e,v,t&&t.response)}}},hn=new Map,gn=e=>{let t=e&&e.env||{};const{fetch:n,Request:r,Response:o}=t,u=[r,o,n];let i,s,a=u.length,l=hn;for(;a--;)i=u[a],s=l.get(i),void 0===s&&l.set(i,s=a?new Map:fn(t)),l=s;return s};gn();const bn={http:null,xhr:nn,fetch:{get:gn}};ct.forEach(bn,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch(e){}Object.defineProperty(e,"adapterName",{value:t})}});const mn=e=>`- ${e}`,yn=e=>ct.isFunction(e)||null===e||!1===e;var En={getAdapter:function(e,t){e=ct.isArray(e)?e:[e];const{length:n}=e;let r,o;const u={};for(let i=0;i<n;i++){let n;if(r=e[i],o=r,!yn(r)&&(o=bn[(n=String(r)).toLowerCase()],void 0===o))throw new pt(`Unknown adapter '${n}'`);if(o&&(ct.isFunction(o)||(o=o.get(t))))break;u[n||"#"+i]=o}if(!o){const e=Object.entries(u).map(([e,t])=>`adapter ${e} `+(!1===t?"is not supported by the environment":"is not available in the build"));let t=n?e.length>1?"since :\n"+e.map(mn).join("\n"):" "+mn(e[0]):"as no adapter specified";throw new pt("There is no suitable adapter to dispatch the request "+t,"ERR_NOT_SUPPORT")}return o},adapters:bn};function An(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new Wt(null,e)}function Fn(e){An(e),e.headers=zt.from(e.headers),e.data=Ht.call(e,e.transformRequest),-1!==["post","put","patch"].indexOf(e.method)&&e.headers.setContentType("application/x-www-form-urlencoded",!1);return En.getAdapter(e.adapter||Pt.adapter,e)(e).then(function(t){return An(e),t.data=Ht.call(e,e.transformResponse,t),t.headers=zt.from(t.headers),t},function(t){return Vt(t)||(An(e),t&&t.response&&(t.response.data=Ht.call(e,e.transformResponse,t.response),t.response.headers=zt.from(t.response.headers))),Promise.reject(t)})}const wn="1.15.0",vn={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{vn[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}});const _n={};vn.transitional=function(e,t,n){function r(e,t){return"[Axios v"+wn+"] Transitional option '"+e+"'"+t+(n?". "+n:"")}return(n,o,u)=>{if(!1===e)throw new pt(r(o," has been removed"+(t?" in "+t:"")),pt.ERR_DEPRECATED);return t&&!_n[o]&&(_n[o]=!0,console.warn(r(o," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(n,o,u)}},vn.spelling=function(e){return(t,n)=>(console.warn(`${n} is likely a misspelling of ${e}`),!0)};var Cn={assertOptions:function(e,t,n){if("object"!=typeof e)throw new pt("options must be an object",pt.ERR_BAD_OPTION_VALUE);const r=Object.keys(e);let o=r.length;for(;o-- >0;){const u=r[o],i=t[u];if(i){const t=e[u],n=void 0===t||i(t,u,e);if(!0!==n)throw new pt("option "+u+" must be "+n,pt.ERR_BAD_OPTION_VALUE);continue}if(!0!==n)throw new pt("Unknown option "+u,pt.ERR_BAD_OPTION)}},validators:vn};const Dn=Cn.validators;class Sn{constructor(e){this.defaults=e||{},this.interceptors={request:new vt,response:new vt}}async request(e,t){try{return await this._request(e,t)}catch(e){if(e instanceof Error){let t={};Error.captureStackTrace?Error.captureStackTrace(t):t=new Error;const n=(()=>{if(!t.stack)return"";const e=t.stack.indexOf("\n");return-1===e?"":t.stack.slice(e+1)})();try{if(e.stack){if(n){const t=n.indexOf("\n"),r=-1===t?-1:n.indexOf("\n",t+1),o=-1===r?"":n.slice(r+1);String(e.stack).endsWith(o)||(e.stack+="\n"+n)}}else e.stack=n}catch(e){}}throw e}}_request(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{},t=en(this.defaults,t);const{transitional:n,paramsSerializer:r,headers:o}=t;void 0!==n&&Cn.assertOptions(n,{silentJSONParsing:Dn.transitional(Dn.boolean),forcedJSONParsing:Dn.transitional(Dn.boolean),clarifyTimeoutError:Dn.transitional(Dn.boolean),legacyInterceptorReqResOrdering:Dn.transitional(Dn.boolean)},!1),null!=r&&(ct.isFunction(r)?t.paramsSerializer={serialize:r}:Cn.assertOptions(r,{encode:Dn.function,serialize:Dn.function},!0)),void 0!==t.allowAbsoluteUrls||(void 0!==this.defaults.allowAbsoluteUrls?t.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:t.allowAbsoluteUrls=!0),Cn.assertOptions(t,{baseUrl:Dn.spelling("baseURL"),withXsrfToken:Dn.spelling("withXSRFToken")},!0),t.method=(t.method||this.defaults.method||"get").toLowerCase();let u=o&&ct.merge(o.common,o[t.method]);o&&ct.forEach(["delete","get","head","post","put","patch","common"],e=>{delete o[e]}),t.headers=zt.concat(u,o);const i=[];let s=!0;this.interceptors.request.forEach(function(e){if("function"==typeof e.runWhen&&!1===e.runWhen(t))return;s=s&&e.synchronous;const n=t.transitional||_t;n&&n.legacyInterceptorReqResOrdering?i.unshift(e.fulfilled,e.rejected):i.push(e.fulfilled,e.rejected)});const a=[];let l;this.interceptors.response.forEach(function(e){a.push(e.fulfilled,e.rejected)});let c,d=0;if(!s){const e=[Fn.bind(this),void 0];for(e.unshift(...i),e.push(...a),c=e.length,l=Promise.resolve(t);d<c;)l=l.then(e[d++],e[d++]);return l}c=i.length;let p=t;for(;d<c;){const e=i[d++],t=i[d++];try{p=e(p)}catch(e){t.call(this,e);break}}try{l=Fn.call(this,p)}catch(e){return Promise.reject(e)}for(d=0,c=a.length;d<c;)l=l.then(a[d++],a[d++]);return l}getUri(e){return wt(Zt((e=en(this.defaults,e)).baseURL,e.url,e.allowAbsoluteUrls),e.params,e.paramsSerializer)}}ct.forEach(["delete","get","head","options"],function(e){Sn.prototype[e]=function(t,n){return this.request(en(n||{},{method:e,url:t,data:(n||{}).data}))}}),ct.forEach(["post","put","patch"],function(e){function t(t){return function(n,r,o){return this.request(en(o||{},{method:e,headers:t?{"Content-Type":"multipart/form-data"}:{},url:n,data:r}))}}Sn.prototype[e]=t(),Sn.prototype[e+"Form"]=t(!0)});var Bn=Sn;class On{constructor(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");let t;this.promise=new Promise(function(e){t=e});const n=this;this.promise.then(e=>{if(!n._listeners)return;let t=n._listeners.length;for(;t-- >0;)n._listeners[t](e);n._listeners=null}),this.promise.then=e=>{let t;const r=new Promise(e=>{n.subscribe(e),t=e}).then(e);return r.cancel=function(){n.unsubscribe(t)},r},e(function(e,r,o){n.reason||(n.reason=new Wt(e,r,o),t(n.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}toAbortSignal(){const e=new AbortController,t=t=>{e.abort(t)};return this.subscribe(t),e.signal.unsubscribe=()=>this.unsubscribe(t),e.signal}static source(){let e;return{token:new On(function(t){e=t}),cancel:e}}}var Rn=On;const xn={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511,WebServerIsDown:521,ConnectionTimedOut:522,OriginIsUnreachable:523,TimeoutOccurred:524,SslHandshakeFailed:525,InvalidSslCertificate:526};Object.entries(xn).forEach(([e,t])=>{xn[t]=e});var kn=xn;const jn=function e(t){const n=new Bn(t),r=ye(Bn.prototype.request,n);return ct.extend(r,Bn.prototype,n,{allOwnKeys:!0}),ct.extend(r,n,null,{allOwnKeys:!0}),r.create=function(n){return e(en(t,n))},r}(Pt);jn.Axios=Bn,jn.CanceledError=Wt,jn.CancelToken=Rn,jn.isCancel=Vt,jn.VERSION=wn,jn.toFormData=mt,jn.AxiosError=pt,jn.Cancel=jn.CanceledError,jn.all=function(e){return Promise.all(e)},jn.spread=function(e){return function(t){return e.apply(null,t)}},jn.isAxiosError=function(e){return ct.isObject(e)&&!0===e.isAxiosError},jn.mergeConfig=en,jn.AxiosHeaders=zt,jn.formToJSON=e=>kt(ct.isHTMLForm(e)?new FormData(e):e),jn.getAdapter=En.getAdapter,jn.HttpStatusCode=kn,jn.default=jn;var Pn=jn;function Tn(e,t){return e?Object.keys(e).map(n=>{const r=t||n,o=e[n];return"object"==typeof o?Tn(o,r):`${encodeURIComponent(r)}=${encodeURIComponent(o)}`}).join("&"):""}function Nn(e,t,n,r,o,u,i,s){const a=e?e.trim():null;if(null==a||a.length<1||i&&!i.test(a))return Promise.resolve([]);const l=u||"https://api.digitransit.fi/geocoding/v1/search";let c={text:a,...t,...r,lang:n};if(o&&(c={...c,sources:o}),s){const e=s.toString();c={...c,layers:e}}return(d=l,p=c,Pn.get(encodeURI(d)+(p?(-1===d.search(/\?/)?"?":"&")+Tn(p):""),{timeout:1e4,method:"GET",headers:{Accept:"application/json"}}).then(e=>e.data)).then(e=>e.features);var d,p}function Ln(e,t){return function(){return e.apply(t,arguments)}}const{toString:Mn}=Object.prototype,{getPrototypeOf:In}=Object,{iterator:Un,toStringTag:qn}=Symbol,zn=(e=>t=>{const n=Mn.call(t);return e[n]||(e[n]=n.slice(8,-1).toLowerCase())})(Object.create(null)),Hn=e=>(e=e.toLowerCase(),t=>zn(t)===e),Vn=e=>t=>typeof t===e,{isArray:Wn}=Array,$n=Vn("undefined");function Jn(e){return null!==e&&!$n(e)&&null!==e.constructor&&!$n(e.constructor)&&Xn(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const Kn=Hn("ArrayBuffer");const Gn=Vn("string"),Xn=Vn("function"),Qn=Vn("number"),Zn=e=>null!==e&&"object"==typeof e,Yn=e=>{if("object"!==zn(e))return!1;const t=In(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t)||qn in e||Un in e)},er=Hn("Date"),tr=Hn("File"),nr=Hn("Blob"),rr=Hn("FileList");const or="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},ur=void 0!==or.FormData?or.FormData:void 0,ir=Hn("URLSearchParams"),[sr,ar,lr,cr]=["ReadableStream","Request","Response","Headers"].map(Hn);function dr(e,t,{allOwnKeys:n=!1}={}){if(null==e)return;let r,o;if("object"!=typeof e&&(e=[e]),Wn(e))for(r=0,o=e.length;r<o;r++)t.call(null,e[r],r,e);else{if(Jn(e))return;const o=n?Object.getOwnPropertyNames(e):Object.keys(e),u=o.length;let i;for(r=0;r<u;r++)i=o[r],t.call(null,e[i],i,e)}}function pr(e,t){if(Jn(e))return null;t=t.toLowerCase();const n=Object.keys(e);let r,o=n.length;for(;o-- >0;)if(r=n[o],t===r.toLowerCase())return r;return null}const fr="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,hr=e=>!$n(e)&&e!==fr;const gr=(e=>t=>e&&t instanceof e)("undefined"!=typeof Uint8Array&&In(Uint8Array)),br=Hn("HTMLFormElement"),mr=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),{propertyIsEnumerable:yr}=Object.prototype,Er=Hn("RegExp"),Ar=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),r={};dr(n,(n,o)=>{let u;!1!==(u=t(n,o,e))&&(r[o]=u||n)}),Object.defineProperties(e,r)};const Fr=Hn("AsyncFunction"),wr=((e,t)=>e?setImmediate:t?((e,t)=>(fr.addEventListener("message",({source:n,data:r})=>{n===fr&&r===e&&t.length&&t.shift()()},!1),n=>{t.push(n),fr.postMessage(e,"*")}))(`axios@${Math.random()}`,[]):e=>setTimeout(e))("function"==typeof setImmediate,Xn(fr.postMessage)),vr="undefined"!=typeof queueMicrotask?queueMicrotask.bind(fr):"undefined"!=typeof process&&process.nextTick||wr;var _r={isArray:Wn,isArrayBuffer:Kn,isBuffer:Jn,isFormData:e=>{if(!e)return!1;if(ur&&e instanceof ur)return!0;const t=In(e);if(!t||t===Object.prototype)return!1;if(!Xn(e.append))return!1;const n=zn(e);return"formdata"===n||"object"===n&&Xn(e.toString)&&"[object FormData]"===e.toString()},isArrayBufferView:function(e){let t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&Kn(e.buffer),t},isString:Gn,isNumber:Qn,isBoolean:e=>!0===e||!1===e,isObject:Zn,isPlainObject:Yn,isEmptyObject:e=>{if(!Zn(e)||Jn(e))return!1;try{return 0===Object.keys(e).length&&Object.getPrototypeOf(e)===Object.prototype}catch(e){return!1}},isReadableStream:sr,isRequest:ar,isResponse:lr,isHeaders:cr,isUndefined:$n,isDate:er,isFile:tr,isReactNativeBlob:e=>!(!e||void 0===e.uri),isReactNative:e=>e&&void 0!==e.getParts,isBlob:nr,isRegExp:Er,isFunction:Xn,isStream:e=>Zn(e)&&Xn(e.pipe),isURLSearchParams:ir,isTypedArray:gr,isFileList:rr,forEach:dr,merge:function e(...t){const{caseless:n,skipUndefined:r}=hr(this)&&this||{},o={},u=(t,u)=>{if("__proto__"===u||"constructor"===u||"prototype"===u)return;const i=n&&"string"==typeof u&&pr(o,u)||u,s=mr(o,i)?o[i]:void 0;Yn(s)&&Yn(t)?o[i]=e(s,t):Yn(t)?o[i]=e({},t):Wn(t)?o[i]=t.slice():r&&$n(t)||(o[i]=t)};for(let e=0,n=t.length;e<n;e++){const n=t[e];if(!n||Jn(n))continue;if(dr(n,u),"object"!=typeof n||Wn(n))continue;const r=Object.getOwnPropertySymbols(n);for(let e=0;e<r.length;e++){const t=r[e];yr.call(n,t)&&u(n[t],t)}}return o},extend:(e,t,n,{allOwnKeys:r}={})=>(dr(t,(t,r)=>{n&&Xn(t)?Object.defineProperty(e,r,{__proto__:null,value:Ln(t,n),writable:!0,enumerable:!0,configurable:!0}):Object.defineProperty(e,r,{__proto__:null,value:t,writable:!0,enumerable:!0,configurable:!0})},{allOwnKeys:r}),e),trim:e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""),stripBOM:e=>(65279===e.charCodeAt(0)&&(e=e.slice(1)),e),inherits:(e,t,n,r)=>{e.prototype=Object.create(t.prototype,r),Object.defineProperty(e.prototype,"constructor",{__proto__:null,value:e,writable:!0,enumerable:!1,configurable:!0}),Object.defineProperty(e,"super",{__proto__:null,value:t.prototype}),n&&Object.assign(e.prototype,n)},toFlatObject:(e,t,n,r)=>{let o,u,i;const s={};if(t=t||{},null==e)return t;do{for(o=Object.getOwnPropertyNames(e),u=o.length;u-- >0;)i=o[u],r&&!r(i,e,t)||s[i]||(t[i]=e[i],s[i]=!0);e=!1!==n&&In(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},kindOf:zn,kindOfTest:Hn,endsWith:(e,t,n)=>{e=String(e),(void 0===n||n>e.length)&&(n=e.length),n-=t.length;const r=e.indexOf(t,n);return-1!==r&&r===n},toArray:e=>{if(!e)return null;if(Wn(e))return e;let t=e.length;if(!Qn(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},forEachEntry:(e,t)=>{const n=(e&&e[Un]).call(e);let r;for(;(r=n.next())&&!r.done;){const n=r.value;t.call(e,n[0],n[1])}},matchAll:(e,t)=>{let n;const r=[];for(;null!==(n=e.exec(t));)r.push(n);return r},isHTMLForm:br,hasOwnProperty:mr,hasOwnProp:mr,reduceDescriptors:Ar,freezeMethods:e=>{Ar(e,(t,n)=>{if(Xn(e)&&["arguments","caller","callee"].includes(n))return!1;const r=e[n];Xn(r)&&(t.enumerable=!1,"writable"in t?t.writable=!1:t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")}))})},toObjectSet:(e,t)=>{const n={},r=e=>{e.forEach(e=>{n[e]=!0})};return Wn(e)?r(e):r(String(e).split(t)),n},toCamelCase:e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(e,t,n){return t.toUpperCase()+n}),noop:()=>{},toFiniteNumber:(e,t)=>null!=e&&Number.isFinite(e=+e)?e:t,findKey:pr,global:fr,isContextDefined:hr,isSpecCompliantForm:function(e){return!!(e&&Xn(e.append)&&"FormData"===e[qn]&&e[Un])},toJSONObject:e=>{const t=new WeakSet,n=e=>{if(Zn(e)){if(t.has(e))return;if(Jn(e))return e;if(!("toJSON"in e)){t.add(e);const r=Wn(e)?[]:{};return dr(e,(e,t)=>{const o=n(e);!$n(o)&&(r[t]=o)}),t.delete(e),r}}return e};return n(e)},isAsyncFn:Fr,isThenable:e=>e&&(Zn(e)||Xn(e))&&Xn(e.then)&&Xn(e.catch),setImmediate:wr,asap:vr,isIterable:e=>null!=e&&Xn(e[Un])};const Cr=_r.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]);const Dr=new RegExp("[\\u0000-\\u0008\\u000a-\\u001f\\u007f]+","g"),Sr=new RegExp("[^\\u0009\\u0020-\\u007e\\u0080-\\u00ff]+","g");function Br(e,t){return _r.isArray(e)?e.map(e=>Br(e,t)):function(e){let t=0,n=e.length;for(;t<n;){const n=e.charCodeAt(t);if(9!==n&&32!==n)break;t+=1}for(;n>t;){const t=e.charCodeAt(n-1);if(9!==t&&32!==t)break;n-=1}return 0===t&&n===e.length?e:e.slice(t,n)}(String(e).replace(t,""))}function Or(e){const t=Object.create(null);return _r.forEach(e.toJSON(),(e,n)=>{t[n]=(e=>Br(e,Sr))(e)}),t}const Rr=Symbol("internals");function xr(e){return e&&String(e).trim().toLowerCase()}function kr(e){return!1===e||null==e?e:_r.isArray(e)?e.map(kr):(e=>Br(e,Dr))(String(e))}function jr(e,t,n,r,o){return _r.isFunction(r)?r.call(this,t,n):(o&&(t=n),_r.isString(t)?_r.isString(r)?-1!==t.indexOf(r):_r.isRegExp(r)?r.test(t):void 0:void 0)}class Pr{constructor(e){e&&this.set(e)}set(e,t,n){const r=this;function o(e,t,n){const o=xr(t);if(!o)return;const u=_r.findKey(r,o);(!u||void 0===r[u]||!0===n||void 0===n&&!1!==r[u])&&(r[u||t]=kr(e))}const u=(e,t)=>_r.forEach(e,(e,n)=>o(e,n,t));if(_r.isPlainObject(e)||e instanceof this.constructor)u(e,t);else if(_r.isString(e)&&(e=e.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim()))u((e=>{const t={};let n,r,o;return e&&e.split("\n").forEach(function(e){o=e.indexOf(":"),n=e.substring(0,o).trim().toLowerCase(),r=e.substring(o+1).trim(),!n||t[n]&&Cr[n]||("set-cookie"===n?t[n]?t[n].push(r):t[n]=[r]:t[n]=t[n]?t[n]+", "+r:r)}),t})(e),t);else if(_r.isObject(e)&&_r.isIterable(e)){let n,r,o={};for(const t of e){if(!_r.isArray(t))throw new TypeError("Object iterator must return a key-value pair");o[r=t[0]]=(n=o[r])?_r.isArray(n)?[...n,t[1]]:[n,t[1]]:t[1]}u(o,t)}else null!=e&&o(t,e,n);return this}get(e,t){if(e=xr(e)){const n=_r.findKey(this,e);if(n){const e=this[n];if(!t)return e;if(!0===t)return function(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let r;for(;r=n.exec(e);)t[r[1]]=r[2];return t}(e);if(_r.isFunction(t))return t.call(this,e,n);if(_r.isRegExp(t))return t.exec(e);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,t){if(e=xr(e)){const n=_r.findKey(this,e);return!(!n||void 0===this[n]||t&&!jr(0,this[n],n,t))}return!1}delete(e,t){const n=this;let r=!1;function o(e){if(e=xr(e)){const o=_r.findKey(n,e);!o||t&&!jr(0,n[o],o,t)||(delete n[o],r=!0)}}return _r.isArray(e)?e.forEach(o):o(e),r}clear(e){const t=Object.keys(this);let n=t.length,r=!1;for(;n--;){const o=t[n];e&&!jr(0,this[o],o,e,!0)||(delete this[o],r=!0)}return r}normalize(e){const t=this,n={};return _r.forEach(this,(r,o)=>{const u=_r.findKey(n,o);if(u)return t[u]=kr(r),void delete t[o];const i=e?function(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(e,t,n)=>t.toUpperCase()+n)}(o):String(o).trim();i!==o&&delete t[o],t[i]=kr(r),n[i]=!0}),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const t=Object.create(null);return _r.forEach(this,(n,r)=>{null!=n&&!1!==n&&(t[r]=e&&_r.isArray(n)?n.join(", "):n)}),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([e,t])=>e+": "+t).join("\n")}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...t){const n=new this(e);return t.forEach(e=>n.set(e)),n}static accessor(e){const t=(this[Rr]=this[Rr]={accessors:{}}).accessors,n=this.prototype;function r(e){const r=xr(e);t[r]||(!function(e,t){const n=_r.toCamelCase(" "+t);["get","set","has"].forEach(r=>{Object.defineProperty(e,r+n,{__proto__:null,value:function(e,n,o){return this[r].call(this,t,e,n,o)},configurable:!0})})}(n,e),t[r]=!0)}return _r.isArray(e)?e.forEach(r):r(e),this}}Pr.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),_r.reduceDescriptors(Pr.prototype,({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(e){this[n]=e}}}),_r.freezeMethods(Pr);var Tr=Pr;function Nr(e,t){const n=new Set(t.map(e=>String(e).toLowerCase())),r=[],o=e=>{if(null===e||"object"!=typeof e)return e;if(_r.isBuffer(e))return e;if(-1!==r.indexOf(e))return;let t;if(e instanceof Tr&&(e=e.toJSON()),r.push(e),_r.isArray(e))t=[],e.forEach((e,n)=>{const r=o(e);_r.isUndefined(r)||(t[n]=r)});else{if(!_r.isPlainObject(e)&&function(e){if(_r.hasOwnProp(e,"toJSON"))return!0;let t=Object.getPrototypeOf(e);for(;t&&t!==Object.prototype;){if(_r.hasOwnProp(t,"toJSON"))return!0;t=Object.getPrototypeOf(t)}return!1}(e))return r.pop(),e;t=Object.create(null);for(const[r,u]of Object.entries(e)){const e=n.has(r.toLowerCase())?"[REDACTED ****]":o(u);_r.isUndefined(e)||(t[r]=e)}}return r.pop(),t};return o(e)}class Lr extends Error{static from(e,t,n,r,o,u){const i=new Lr(e.message,t||e.code,n,r,o);return i.cause=e,i.name=e.name,null!=e.status&&null==i.status&&(i.status=e.status),u&&Object.assign(i,u),i}constructor(e,t,n,r,o){super(e),Object.defineProperty(this,"message",{__proto__:null,value:e,enumerable:!0,writable:!0,configurable:!0}),this.name="AxiosError",this.isAxiosError=!0,t&&(this.code=t),n&&(this.config=n),r&&(this.request=r),o&&(this.response=o,this.status=o.status)}toJSON(){const e=this.config,t=e&&_r.hasOwnProp(e,"redact")?e.redact:void 0,n=_r.isArray(t)&&t.length>0?Nr(e,t):_r.toJSONObject(e);return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:n,code:this.code,status:this.status}}}Lr.ERR_BAD_OPTION_VALUE="ERR_BAD_OPTION_VALUE",Lr.ERR_BAD_OPTION="ERR_BAD_OPTION",Lr.ECONNABORTED="ECONNABORTED",Lr.ETIMEDOUT="ETIMEDOUT",Lr.ECONNREFUSED="ECONNREFUSED",Lr.ERR_NETWORK="ERR_NETWORK",Lr.ERR_FR_TOO_MANY_REDIRECTS="ERR_FR_TOO_MANY_REDIRECTS",Lr.ERR_DEPRECATED="ERR_DEPRECATED",Lr.ERR_BAD_RESPONSE="ERR_BAD_RESPONSE",Lr.ERR_BAD_REQUEST="ERR_BAD_REQUEST",Lr.ERR_CANCELED="ERR_CANCELED",Lr.ERR_NOT_SUPPORT="ERR_NOT_SUPPORT",Lr.ERR_INVALID_URL="ERR_INVALID_URL",Lr.ERR_FORM_DATA_DEPTH_EXCEEDED="ERR_FORM_DATA_DEPTH_EXCEEDED";var Mr=Lr;function Ir(e){return _r.isPlainObject(e)||_r.isArray(e)}function Ur(e){return _r.endsWith(e,"[]")?e.slice(0,-2):e}function qr(e,t,n){return e?e.concat(t).map(function(e,t){return e=Ur(e),!n&&t?"["+e+"]":e}).join(n?".":""):t}const zr=_r.toFlatObject(_r,{},null,function(e){return/^is[A-Z]/.test(e)});function Hr(e,t,n){if(!_r.isObject(e))throw new TypeError("target must be an object");t=t||new FormData;const r=(n=_r.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,function(e,t){return!_r.isUndefined(t[e])})).metaTokens,o=n.visitor||d,u=n.dots,i=n.indexes,s=n.Blob||"undefined"!=typeof Blob&&Blob,a=void 0===n.maxDepth?100:n.maxDepth,l=s&&_r.isSpecCompliantForm(t);if(!_r.isFunction(o))throw new TypeError("visitor must be a function");function c(e){if(null===e)return"";if(_r.isDate(e))return e.toISOString();if(_r.isBoolean(e))return e.toString();if(!l&&_r.isBlob(e))throw new Mr("Blob is not supported. Use a Buffer instead.");return _r.isArrayBuffer(e)||_r.isTypedArray(e)?l&&"function"==typeof Blob?new Blob([e]):Buffer.from(e):e}function d(e,n,o){let s=e;if(_r.isReactNative(t)&&_r.isReactNativeBlob(e))return t.append(qr(o,n,u),c(e)),!1;if(e&&!o&&"object"==typeof e)if(_r.endsWith(n,"{}"))n=r?n:n.slice(0,-2),e=JSON.stringify(e);else if(_r.isArray(e)&&function(e){return _r.isArray(e)&&!e.some(Ir)}(e)||(_r.isFileList(e)||_r.endsWith(n,"[]"))&&(s=_r.toArray(e)))return n=Ur(n),s.forEach(function(e,r){!_r.isUndefined(e)&&null!==e&&t.append(!0===i?qr([n],r,u):null===i?n:n+"[]",c(e))}),!1;return!!Ir(e)||(t.append(qr(o,n,u),c(e)),!1)}const p=[],f=Object.assign(zr,{defaultVisitor:d,convertValue:c,isVisitable:Ir});if(!_r.isObject(e))throw new TypeError("data must be an object");return function e(n,r,u=0){if(!_r.isUndefined(n)){if(u>a)throw new Mr("Object is too deeply nested ("+u+" levels). Max depth: "+a,Mr.ERR_FORM_DATA_DEPTH_EXCEEDED);if(-1!==p.indexOf(n))throw new Error("Circular reference detected in "+r.join("."));p.push(n),_r.forEach(n,function(n,i){!0===(!(_r.isUndefined(n)||null===n)&&o.call(t,n,_r.isString(i)?i.trim():i,r,f))&&e(n,r?r.concat(i):[i],u+1)}),p.pop()}}(e),t}function Vr(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"};return encodeURIComponent(e).replace(/[!'()~]|%20/g,function(e){return t[e]})}function Wr(e,t){this._pairs=[],e&&Hr(e,this,t)}const $r=Wr.prototype;function Jr(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+")}function Kr(e,t,n){if(!t)return e;const r=n&&n.encode||Jr,o=_r.isFunction(n)?{serialize:n}:n,u=o&&o.serialize;let i;if(i=u?u(t,o):_r.isURLSearchParams(t)?t.toString():new Wr(t,o).toString(r),i){const t=e.indexOf("#");-1!==t&&(e=e.slice(0,t)),e+=(-1===e.indexOf("?")?"?":"&")+i}return e}$r.append=function(e,t){this._pairs.push([e,t])},$r.toString=function(e){const t=e?function(t){return e.call(this,t,Vr)}:Vr;return this._pairs.map(function(e){return t(e[0])+"="+t(e[1])},"").join("&")};var Gr=class{constructor(){this.handlers=[]}use(e,t,n){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){_r.forEach(this.handlers,function(t){null!==t&&e(t)})}},Xr={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1,legacyInterceptorReqResOrdering:!0,advertiseZstdAcceptEncoding:!1},Qr={isBrowser:!0,classes:{URLSearchParams:"undefined"!=typeof URLSearchParams?URLSearchParams:Wr,FormData:"undefined"!=typeof FormData?FormData:null,Blob:"undefined"!=typeof Blob?Blob:null},protocols:["http","https","file","blob","url","data"]};const Zr="undefined"!=typeof window&&"undefined"!=typeof document,Yr="object"==typeof navigator&&navigator||void 0,eo=Zr&&(!Yr||["ReactNative","NativeScript","NS"].indexOf(Yr.product)<0),to="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"==typeof self.importScripts,no=Zr&&window.location.href||"http://localhost";var ro={...Object.freeze({__proto__:null,hasBrowserEnv:Zr,hasStandardBrowserWebWorkerEnv:to,hasStandardBrowserEnv:eo,navigator:Yr,origin:no}),...Qr};function oo(e){function t(e,n,r,o){let u=e[o++];if("__proto__"===u)return!0;const i=Number.isFinite(+u),s=o>=e.length;if(u=!u&&_r.isArray(r)?r.length:u,s)return _r.hasOwnProp(r,u)?r[u]=_r.isArray(r[u])?r[u].concat(n):[r[u],n]:r[u]=n,!i;_r.hasOwnProp(r,u)&&_r.isObject(r[u])||(r[u]=[]);return t(e,n,r[u],o)&&_r.isArray(r[u])&&(r[u]=function(e){const t={},n=Object.keys(e);let r;const o=n.length;let u;for(r=0;r<o;r++)u=n[r],t[u]=e[u];return t}(r[u])),!i}if(_r.isFormData(e)&&_r.isFunction(e.entries)){const n={};return _r.forEachEntry(e,(e,r)=>{t(function(e){return _r.matchAll(/\w+|\[(\w*)]/g,e).map(e=>"[]"===e[0]?"":e[1]||e[0])}(e),r,n,0)}),n}return null}const uo=(e,t)=>null!=e&&_r.hasOwnProp(e,t)?e[t]:void 0;const io={transitional:Xr,adapter:["xhr","http","fetch"],transformRequest:[function(e,t){const n=t.getContentType()||"",r=n.indexOf("application/json")>-1,o=_r.isObject(e);o&&_r.isHTMLForm(e)&&(e=new FormData(e));if(_r.isFormData(e))return r?JSON.stringify(oo(e)):e;if(_r.isArrayBuffer(e)||_r.isBuffer(e)||_r.isStream(e)||_r.isFile(e)||_r.isBlob(e)||_r.isReadableStream(e))return e;if(_r.isArrayBufferView(e))return e.buffer;if(_r.isURLSearchParams(e))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let u;if(o){const t=uo(this,"formSerializer");if(n.indexOf("application/x-www-form-urlencoded")>-1)return function(e,t){return Hr(e,new ro.classes.URLSearchParams,{visitor:function(e,t,n,r){return ro.isNode&&_r.isBuffer(e)?(this.append(t,e.toString("base64")),!1):r.defaultVisitor.apply(this,arguments)},...t})}(e,t).toString();if((u=_r.isFileList(e))||n.indexOf("multipart/form-data")>-1){const n=uo(this,"env"),r=n&&n.FormData;return Hr(u?{"files[]":e}:e,r&&new r,t)}}return o||r?(t.setContentType("application/json",!1),function(e,t,n){if(_r.isString(e))try{return(t||JSON.parse)(e),_r.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(n||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){const t=uo(this,"transitional")||io.transitional,n=t&&t.forcedJSONParsing,r=uo(this,"responseType"),o="json"===r;if(_r.isResponse(e)||_r.isReadableStream(e))return e;if(e&&_r.isString(e)&&(n&&!r||o)){const n=!(t&&t.silentJSONParsing)&&o;try{return JSON.parse(e,uo(this,"parseReviver"))}catch(e){if(n){if("SyntaxError"===e.name)throw Mr.from(e,Mr.ERR_BAD_RESPONSE,this,null,uo(this,"response"));throw e}}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:ro.classes.FormData,Blob:ro.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};_r.forEach(["delete","get","head","post","put","patch","query"],e=>{io.headers[e]={}});var so=io;function ao(e,t){const n=this||so,r=t||n,o=Tr.from(r.headers);let u=r.data;return _r.forEach(e,function(e){u=e.call(n,u,o.normalize(),t?t.status:void 0)}),o.normalize(),u}function lo(e){return!(!e||!e.__CANCEL__)}var co=class extends Mr{constructor(e,t,n){super(null==e?"canceled":e,Mr.ERR_CANCELED,t,n),this.name="CanceledError",this.__CANCEL__=!0}};function po(e,t,n){const r=n.config.validateStatus;n.status&&r&&!r(n.status)?t(new Mr("Request failed with status code "+n.status,n.status>=400&&n.status<500?Mr.ERR_BAD_REQUEST:Mr.ERR_BAD_RESPONSE,n.config,n.request,n)):e(n)}const fo=(e,t,n=3)=>{let r=0;const o=function(e,t){e=e||10;const n=new Array(e),r=new Array(e);let o,u=0,i=0;return t=void 0!==t?t:1e3,function(s){const a=Date.now(),l=r[i];o||(o=a),n[u]=s,r[u]=a;let c=i,d=0;for(;c!==u;)d+=n[c++],c%=e;if(u=(u+1)%e,u===i&&(i=(i+1)%e),a-o<t)return;const p=l&&a-l;return p?Math.round(1e3*d/p):void 0}}(50,250);return function(e,t){let n,r,o=0,u=1e3/t;const i=(t,u=Date.now())=>{o=u,n=null,r&&(clearTimeout(r),r=null),e(...t)};return[(...e)=>{const t=Date.now(),s=t-o;s>=u?i(e,t):(n=e,r||(r=setTimeout(()=>{r=null,i(n)},u-s)))},()=>n&&i(n)]}(n=>{if(!n||"number"!=typeof n.loaded)return;const u=n.loaded,i=n.lengthComputable?n.total:void 0,s=null!=i?Math.min(u,i):u,a=Math.max(0,s-r),l=o(a);r=Math.max(r,s);e({loaded:s,total:i,progress:i?s/i:void 0,bytes:a,rate:l||void 0,estimated:l&&i?(i-s)/l:void 0,event:n,lengthComputable:null!=i,[t?"download":"upload"]:!0})},n)},ho=(e,t)=>{const n=null!=e;return[r=>t[0]({lengthComputable:n,total:e,loaded:r}),t[1]]},go=e=>(...t)=>_r.asap(()=>e(...t));var bo=ro.hasStandardBrowserEnv?((e,t)=>n=>(n=new URL(n,ro.origin),e.protocol===n.protocol&&e.host===n.host&&(t||e.port===n.port)))(new URL(ro.origin),ro.navigator&&/(msie|trident)/i.test(ro.navigator.userAgent)):()=>!0,mo=ro.hasStandardBrowserEnv?{write(e,t,n,r,o,u,i){if("undefined"==typeof document)return;const s=[`${e}=${encodeURIComponent(t)}`];_r.isNumber(n)&&s.push(`expires=${new Date(n).toUTCString()}`),_r.isString(r)&&s.push(`path=${r}`),_r.isString(o)&&s.push(`domain=${o}`),!0===u&&s.push("secure"),_r.isString(i)&&s.push(`SameSite=${i}`),document.cookie=s.join("; ")},read(e){if("undefined"==typeof document)return null;const t=document.cookie.split(";");for(let n=0;n<t.length;n++){const r=t[n].replace(/^\s+/,""),o=r.indexOf("=");if(-1!==o&&r.slice(0,o)===e)return decodeURIComponent(r.slice(o+1))}return null},remove(e){this.write(e,"",Date.now()-864e5,"/")}}:{write(){},read:()=>null,remove(){}};function yo(e,t,n){let r=!("string"==typeof(o=t)&&/^([a-z][a-z\d+\-.]*:)?\/\//i.test(o));var o;return e&&(r||!1===n)?function(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}(e,t):t}const Eo=e=>e instanceof Tr?{...e}:e;function Ao(e,t){t=t||{};const n=Object.create(null);function r(e,t,n,r){return _r.isPlainObject(e)&&_r.isPlainObject(t)?_r.merge.call({caseless:r},e,t):_r.isPlainObject(t)?_r.merge({},t):_r.isArray(t)?t.slice():t}function o(e,t,n,o){return _r.isUndefined(t)?_r.isUndefined(e)?void 0:r(void 0,e,0,o):r(e,t,0,o)}function u(e,t){if(!_r.isUndefined(t))return r(void 0,t)}function i(e,t){return _r.isUndefined(t)?_r.isUndefined(e)?void 0:r(void 0,e):r(void 0,t)}function s(n,o,u){return _r.hasOwnProp(t,u)?r(n,o):_r.hasOwnProp(e,u)?r(void 0,n):void 0}Object.defineProperty(n,"hasOwnProperty",{__proto__:null,value:Object.prototype.hasOwnProperty,enumerable:!1,writable:!0,configurable:!0});const a={url:u,method:u,data:u,baseURL:i,transformRequest:i,transformResponse:i,paramsSerializer:i,timeout:i,timeoutMessage:i,withCredentials:i,withXSRFToken:i,adapter:i,responseType:i,xsrfCookieName:i,xsrfHeaderName:i,onUploadProgress:i,onDownloadProgress:i,decompress:i,maxContentLength:i,maxBodyLength:i,beforeRedirect:i,transport:i,httpAgent:i,httpsAgent:i,cancelToken:i,socketPath:i,allowedSocketPaths:i,responseEncoding:i,validateStatus:s,headers:(e,t,n)=>o(Eo(e),Eo(t),0,!0)};return _r.forEach(Object.keys({...e,...t}),function(r){if("__proto__"===r||"constructor"===r||"prototype"===r)return;const u=_r.hasOwnProp(a,r)?a[r]:o,i=u(_r.hasOwnProp(e,r)?e[r]:void 0,_r.hasOwnProp(t,r)?t[r]:void 0,r);_r.isUndefined(i)&&u!==s||(n[r]=i)}),n}const Fo=["content-type","content-length"];function wo(e){const t=Ao({},e),n=e=>_r.hasOwnProp(t,e)?t[e]:void 0,r=n("data");let o=n("withXSRFToken");const u=n("xsrfHeaderName"),i=n("xsrfCookieName");let s=n("headers");const a=n("auth"),l=n("baseURL"),c=n("allowAbsoluteUrls"),d=n("url");var p;if(t.headers=s=Tr.from(s),t.url=Kr(yo(l,d,c),n("params"),n("paramsSerializer")),a&&s.set("Authorization","Basic "+btoa((a.username||"")+":"+(a.password?(p=a.password,encodeURIComponent(p).replace(/%([0-9A-F]{2})/gi,(e,t)=>String.fromCharCode(parseInt(t,16)))):""))),_r.isFormData(r)&&(ro.hasStandardBrowserEnv||ro.hasStandardBrowserWebWorkerEnv||_r.isReactNative(r)?s.setContentType(void 0):_r.isFunction(r.getHeaders)&&function(e,t,n){"content-only"===n?Object.entries(t).forEach(([t,n])=>{Fo.includes(t.toLowerCase())&&e.set(t,n)}):e.set(t)}(s,r.getHeaders(),n("formDataHeaderPolicy"))),ro.hasStandardBrowserEnv){_r.isFunction(o)&&(o=o(t));if(!0===o||null==o&&bo(t.url)){const e=u&&i&&mo.read(i);e&&s.set(u,e)}}return t}var vo="undefined"!=typeof XMLHttpRequest&&function(e){return new Promise(function(t,n){const r=wo(e);let o=r.data;const u=Tr.from(r.headers).normalize();let i,s,a,l,c,{responseType:d,onUploadProgress:p,onDownloadProgress:f}=r;function h(){l&&l(),c&&c(),r.cancelToken&&r.cancelToken.unsubscribe(i),r.signal&&r.signal.removeEventListener("abort",i)}let g=new XMLHttpRequest;function b(){if(!g)return;const r=Tr.from("getAllResponseHeaders"in g&&g.getAllResponseHeaders());po(function(e){t(e),h()},function(e){n(e),h()},{data:d&&"text"!==d&&"json"!==d?g.response:g.responseText,status:g.status,statusText:g.statusText,headers:r,config:e,request:g}),g=null}g.open(r.method.toUpperCase(),r.url,!0),g.timeout=r.timeout,"onloadend"in g?g.onloadend=b:g.onreadystatechange=function(){g&&4===g.readyState&&(0!==g.status||g.responseURL&&g.responseURL.startsWith("file:"))&&setTimeout(b)},g.onabort=function(){g&&(n(new Mr("Request aborted",Mr.ECONNABORTED,e,g)),h(),g=null)},g.onerror=function(t){const r=t&&t.message?t.message:"Network Error",o=new Mr(r,Mr.ERR_NETWORK,e,g);o.event=t||null,n(o),h(),g=null},g.ontimeout=function(){let t=r.timeout?"timeout of "+r.timeout+"ms exceeded":"timeout exceeded";const o=r.transitional||Xr;r.timeoutErrorMessage&&(t=r.timeoutErrorMessage),n(new Mr(t,o.clarifyTimeoutError?Mr.ETIMEDOUT:Mr.ECONNABORTED,e,g)),h(),g=null},void 0===o&&u.setContentType(null),"setRequestHeader"in g&&_r.forEach(Or(u),function(e,t){g.setRequestHeader(t,e)}),_r.isUndefined(r.withCredentials)||(g.withCredentials=!!r.withCredentials),d&&"json"!==d&&(g.responseType=r.responseType),f&&([a,c]=fo(f,!0),g.addEventListener("progress",a)),p&&g.upload&&([s,l]=fo(p),g.upload.addEventListener("progress",s),g.upload.addEventListener("loadend",l)),(r.cancelToken||r.signal)&&(i=t=>{g&&(n(!t||t.type?new co(null,e,g):t),g.abort(),h(),g=null)},r.cancelToken&&r.cancelToken.subscribe(i),r.signal&&(r.signal.aborted?i():r.signal.addEventListener("abort",i)));const m=function(e){const t=/^([-+\w]{1,25}):(?:\/\/)?/.exec(e);return t&&t[1]||""}(r.url);!m||ro.protocols.includes(m)?g.send(o||null):n(new Mr("Unsupported protocol "+m+":",Mr.ERR_BAD_REQUEST,e))})};var _o=(e,t)=>{if(e=e?e.filter(Boolean):[],!t&&!e.length)return;const n=new AbortController;let r=!1;const o=function(e){if(!r){r=!0,i();const t=e instanceof Error?e:this.reason;n.abort(t instanceof Mr?t:new co(t instanceof Error?t.message:t))}};let u=t&&setTimeout(()=>{u=null,o(new Mr(`timeout of ${t}ms exceeded`,Mr.ETIMEDOUT))},t);const i=()=>{e&&(u&&clearTimeout(u),u=null,e.forEach(e=>{e.unsubscribe?e.unsubscribe(o):e.removeEventListener("abort",o)}),e=null)};e.forEach(e=>e.addEventListener("abort",o));const{signal:s}=n;return s.unsubscribe=()=>_r.asap(i),s};const Co=function*(e,t){let n=e.byteLength;if(!t||n<t)return void(yield e);let r,o=0;for(;o<n;)r=o+t,yield e.slice(o,r),o=r},Do=async function*(e){if(e[Symbol.asyncIterator])return void(yield*e);const t=e.getReader();try{for(;;){const{done:e,value:n}=await t.read();if(e)break;yield n}}finally{await t.cancel()}},So=(e,t,n,r)=>{const o=async function*(e,t){for await(const n of Do(e))yield*Co(n,t)}(e,t);let u,i=0,s=e=>{u||(u=!0,r&&r(e))};return new ReadableStream({async pull(e){try{const{done:t,value:r}=await o.next();if(t)return s(),void e.close();let u=r.byteLength;if(n){let e=i+=u;n(e)}e.enqueue(new Uint8Array(r))}catch(e){throw s(e),e}},cancel:e=>(s(e),o.return())},{highWaterMark:2})};const Bo="1.17.0",{isFunction:Oo}=_r,Ro=e=>{if(!_r.isString(e))return e;try{return decodeURIComponent(e)}catch(t){return e}},xo=(e,...t)=>{try{return!!e(...t)}catch(e){return!1}},ko=e=>{const t=void 0!==_r.global&&null!==_r.global?_r.global:globalThis,{ReadableStream:n,TextEncoder:r}=t;e=_r.merge.call({skipUndefined:!0},{Request:t.Request,Response:t.Response},e);const{fetch:o,Request:u,Response:i}=e,s=o?Oo(o):"function"==typeof fetch,a=Oo(u),l=Oo(i);if(!s)return!1;const c=s&&Oo(n),d=s&&("function"==typeof r?(p=new r,e=>p.encode(e)):async e=>new Uint8Array(await new u(e).arrayBuffer()));var p;const f=a&&c&&xo(()=>{let e=!1;const t=new u(ro.origin,{body:new n,method:"POST",get duplex(){return e=!0,"half"}}),r=t.headers.has("Content-Type");return null!=t.body&&t.body.cancel(),e&&!r}),h=l&&c&&xo(()=>_r.isReadableStream(new i("").body)),g={stream:h&&(e=>e.body)};s&&["text","arrayBuffer","blob","formData","stream"].forEach(e=>{!g[e]&&(g[e]=(t,n)=>{let r=t&&t[e];if(r)return r.call(t);throw new Mr(`Response type '${e}' is not supported`,Mr.ERR_NOT_SUPPORT,n)})});const b=async(e,t)=>{const n=_r.toFiniteNumber(e.getContentLength());return null==n?(async e=>{if(null==e)return 0;if(_r.isBlob(e))return e.size;if(_r.isSpecCompliantForm(e)){const t=new u(ro.origin,{method:"POST",body:e});return(await t.arrayBuffer()).byteLength}return _r.isArrayBufferView(e)||_r.isArrayBuffer(e)?e.byteLength:(_r.isURLSearchParams(e)&&(e+=""),_r.isString(e)?(await d(e)).byteLength:void 0)})(t):n};return async e=>{let{url:t,method:n,data:s,signal:l,cancelToken:c,timeout:d,onDownloadProgress:p,onUploadProgress:m,responseType:y,headers:E,withCredentials:A="same-origin",fetchOptions:F,maxContentLength:w,maxBodyLength:v}=wo(e);const _=_r.isNumber(w)&&w>-1,C=_r.isNumber(v)&&v>-1;let D=o||fetch;y=y?(y+"").toLowerCase():"text";let S=_o([l,c&&c.toAbortSignal()],d),B=null;const O=S&&S.unsubscribe&&(()=>{S.unsubscribe()});let R;try{let o;const l=(k="auth",_r.hasOwnProp(e,k)?e[k]:void 0);if(l){const e=l.username||"";o={username:e,password:l.password||""}}if((e=>{const t=e.indexOf("://");let n=e;return-1!==t&&(n=n.slice(t+3)),n.includes("@")||n.includes(":")})(t)){const e=new URL(t,ro.origin);if(!o&&(e.username||e.password)){const t=Ro(e.username);o={username:t,password:Ro(e.password)}}(e.username||e.password)&&(e.username="",e.password="",t=e.href)}if(o&&(E.delete("authorization"),E.set("Authorization","Basic "+btoa((x=(o.username||"")+":"+(o.password||""),encodeURIComponent(x).replace(/%([0-9A-F]{2})/gi,(e,t)=>String.fromCharCode(parseInt(t,16))))))),_&&"string"==typeof t&&t.startsWith("data:")){const n=function(e){if(!e||"string"!=typeof e)return 0;if(!e.startsWith("data:"))return 0;const t=e.indexOf(",");if(t<0)return 0;const n=e.slice(5,t),r=e.slice(t+1);if(/;base64/i.test(n)){let e=r.length;const t=r.length;for(let n=0;n<t;n++)if(37===r.charCodeAt(n)&&n+2<t){const t=r.charCodeAt(n+1),o=r.charCodeAt(n+2);(t>=48&&t<=57||t>=65&&t<=70||t>=97&&t<=102)&&(o>=48&&o<=57||o>=65&&o<=70||o>=97&&o<=102)&&(e-=2,n+=2)}let n=0,o=t-1;const u=e=>e>=2&&37===r.charCodeAt(e-2)&&51===r.charCodeAt(e-1)&&(68===r.charCodeAt(e)||100===r.charCodeAt(e));o>=0&&(61===r.charCodeAt(o)?(n++,o--):u(o)&&(n++,o-=3)),1===n&&o>=0&&(61===r.charCodeAt(o)||u(o))&&n++;const i=3*Math.floor(e/4)-(n||0);return i>0?i:0}if("undefined"!=typeof Buffer&&"function"==typeof Buffer.byteLength)return Buffer.byteLength(r,"utf8");let o=0;for(let e=0,t=r.length;e<t;e++){const n=r.charCodeAt(e);if(n<128)o+=1;else if(n<2048)o+=2;else if(n>=55296&&n<=56319&&e+1<t){const t=r.charCodeAt(e+1);t>=56320&&t<=57343?(o+=4,e++):o+=3}else o+=3}return o}(t);if(n>w)throw new Mr("maxContentLength size of "+w+" exceeded",Mr.ERR_BAD_RESPONSE,e,B)}if(C&&"get"!==n&&"head"!==n){const t=await b(E,s);if("number"==typeof t&&isFinite(t)&&t>v)throw new Mr("Request body larger than maxBodyLength limit",Mr.ERR_BAD_REQUEST,e,B)}if(m&&f&&"get"!==n&&"head"!==n&&0!==(R=await b(E,s))){let e,n=new u(t,{method:"POST",body:s,duplex:"half"});if(_r.isFormData(s)&&(e=n.headers.get("content-type"))&&E.setContentType(e),n.body){const[e,t]=ho(R,fo(go(m)));s=So(n.body,65536,e,t)}}_r.isString(A)||(A=A?"include":"omit");const c=a&&"credentials"in u.prototype;if(_r.isFormData(s)){const e=E.getContentType();e&&/^multipart\/form-data/i.test(e)&&!/boundary=/i.test(e)&&E.delete("content-type")}E.set("User-Agent","axios/"+Bo,!1);const d={...F,signal:S,method:n.toUpperCase(),headers:Or(E.normalize()),body:s,duplex:"half",credentials:c?A:void 0};B=a&&new u(t,d);let j=await(a?D(B,F):D(t,d));if(_){const t=_r.toFiniteNumber(j.headers.get("content-length"));if(null!=t&&t>w)throw new Mr("maxContentLength size of "+w+" exceeded",Mr.ERR_BAD_RESPONSE,e,B)}const P=h&&("stream"===y||"response"===y);if(h&&j.body&&(p||_||P&&O)){const t={};["status","statusText","headers"].forEach(e=>{t[e]=j[e]});const n=_r.toFiniteNumber(j.headers.get("content-length")),[r,o]=p&&ho(n,fo(go(p),!0))||[];let u=0;const s=t=>{if(_&&(u=t,u>w))throw new Mr("maxContentLength size of "+w+" exceeded",Mr.ERR_BAD_RESPONSE,e,B);r&&r(t)};j=new i(So(j.body,65536,s,()=>{o&&o(),O&&O()}),t)}y=y||"text";let T=await g[_r.findKey(g,y)||"text"](j,e);if(_&&!h&&!P){let t;if(null!=T&&("number"==typeof T.byteLength?t=T.byteLength:"number"==typeof T.size?t=T.size:"string"==typeof T&&(t="function"==typeof r?(new r).encode(T).byteLength:T.length)),"number"==typeof t&&t>w)throw new Mr("maxContentLength size of "+w+" exceeded",Mr.ERR_BAD_RESPONSE,e,B)}return!P&&O&&O(),await new Promise((t,n)=>{po(t,n,{data:T,headers:Tr.from(j.headers),status:j.status,statusText:j.statusText,config:e,request:B})})}catch(t){if(O&&O(),S&&S.aborted&&S.reason instanceof Mr){const n=S.reason;throw n.config=e,B&&(n.request=B),t!==n&&(n.cause=t),n}if(t&&"TypeError"===t.name&&/Load failed|fetch/i.test(t.message))throw Object.assign(new Mr("Network Error",Mr.ERR_NETWORK,e,B,t&&t.response),{cause:t.cause||t});throw Mr.from(t,t&&t.code,e,B,t&&t.response)}var x,k}},jo=new Map,Po=e=>{let t=e&&e.env||{};const{fetch:n,Request:r,Response:o}=t,u=[r,o,n];let i,s,a=u.length,l=jo;for(;a--;)i=u[a],s=l.get(i),void 0===s&&l.set(i,s=a?new Map:ko(t)),l=s;return s};Po();const To={http:null,xhr:vo,fetch:{get:Po}};_r.forEach(To,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{__proto__:null,value:t})}catch(e){}Object.defineProperty(e,"adapterName",{__proto__:null,value:t})}});const No=e=>`- ${e}`,Lo=e=>_r.isFunction(e)||null===e||!1===e;var Mo={getAdapter:function(e,t){e=_r.isArray(e)?e:[e];const{length:n}=e;let r,o;const u={};for(let i=0;i<n;i++){let n;if(r=e[i],o=r,!Lo(r)&&(o=To[(n=String(r)).toLowerCase()],void 0===o))throw new Mr(`Unknown adapter '${n}'`);if(o&&(_r.isFunction(o)||(o=o.get(t))))break;u[n||"#"+i]=o}if(!o){const e=Object.entries(u).map(([e,t])=>`adapter ${e} `+(!1===t?"is not supported by the environment":"is not available in the build"));let t=n?e.length>1?"since :\n"+e.map(No).join("\n"):" "+No(e[0]):"as no adapter specified";throw new Mr("There is no suitable adapter to dispatch the request "+t,"ERR_NOT_SUPPORT")}return o},adapters:To};function Io(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new co(null,e)}function Uo(e){Io(e),e.headers=Tr.from(e.headers),e.data=ao.call(e,e.transformRequest),-1!==["post","put","patch"].indexOf(e.method)&&e.headers.setContentType("application/x-www-form-urlencoded",!1);return Mo.getAdapter(e.adapter||so.adapter,e)(e).then(function(t){Io(e),e.response=t;try{t.data=ao.call(e,e.transformResponse,t)}finally{delete e.response}return t.headers=Tr.from(t.headers),t},function(t){if(!lo(t)&&(Io(e),t&&t.response)){e.response=t.response;try{t.response.data=ao.call(e,e.transformResponse,t.response)}finally{delete e.response}t.response.headers=Tr.from(t.response.headers)}return Promise.reject(t)})}const qo={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{qo[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}});const zo={};qo.transitional=function(e,t,n){function r(e,t){return"[Axios v"+Bo+"] Transitional option '"+e+"'"+t+(n?". "+n:"")}return(n,o,u)=>{if(!1===e)throw new Mr(r(o," has been removed"+(t?" in "+t:"")),Mr.ERR_DEPRECATED);return t&&!zo[o]&&(zo[o]=!0,console.warn(r(o," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(n,o,u)}},qo.spelling=function(e){return(t,n)=>(console.warn(`${n} is likely a misspelling of ${e}`),!0)};var Ho={assertOptions:function(e,t,n){if("object"!=typeof e)throw new Mr("options must be an object",Mr.ERR_BAD_OPTION_VALUE);const r=Object.keys(e);let o=r.length;for(;o-- >0;){const u=r[o],i=Object.prototype.hasOwnProperty.call(t,u)?t[u]:void 0;if(i){const t=e[u],n=void 0===t||i(t,u,e);if(!0!==n)throw new Mr("option "+u+" must be "+n,Mr.ERR_BAD_OPTION_VALUE);continue}if(!0!==n)throw new Mr("Unknown option "+u,Mr.ERR_BAD_OPTION)}},validators:qo};const Vo=Ho.validators;class Wo{constructor(e){this.defaults=e||{},this.interceptors={request:new Gr,response:new Gr}}async request(e,t){try{return await this._request(e,t)}catch(e){if(e instanceof Error){let t={};Error.captureStackTrace?Error.captureStackTrace(t):t=new Error;const n=(()=>{if(!t.stack)return"";const e=t.stack.indexOf("\n");return-1===e?"":t.stack.slice(e+1)})();try{if(e.stack){if(n){const t=n.indexOf("\n"),r=-1===t?-1:n.indexOf("\n",t+1),o=-1===r?"":n.slice(r+1);String(e.stack).endsWith(o)||(e.stack+="\n"+n)}}else e.stack=n}catch(e){}}throw e}}_request(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{},t=Ao(this.defaults,t);const{transitional:n,paramsSerializer:r,headers:o}=t;void 0!==n&&Ho.assertOptions(n,{silentJSONParsing:Vo.transitional(Vo.boolean),forcedJSONParsing:Vo.transitional(Vo.boolean),clarifyTimeoutError:Vo.transitional(Vo.boolean),legacyInterceptorReqResOrdering:Vo.transitional(Vo.boolean),advertiseZstdAcceptEncoding:Vo.transitional(Vo.boolean)},!1),null!=r&&(_r.isFunction(r)?t.paramsSerializer={serialize:r}:Ho.assertOptions(r,{encode:Vo.function,serialize:Vo.function},!0)),void 0!==t.allowAbsoluteUrls||(void 0!==this.defaults.allowAbsoluteUrls?t.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:t.allowAbsoluteUrls=!0),Ho.assertOptions(t,{baseUrl:Vo.spelling("baseURL"),withXsrfToken:Vo.spelling("withXSRFToken")},!0),t.method=(t.method||this.defaults.method||"get").toLowerCase();let u=o&&_r.merge(o.common,o[t.method]);o&&_r.forEach(["delete","get","head","post","put","patch","query","common"],e=>{delete o[e]}),t.headers=Tr.concat(u,o);const i=[];let s=!0;this.interceptors.request.forEach(function(e){if("function"==typeof e.runWhen&&!1===e.runWhen(t))return;s=s&&e.synchronous;const n=t.transitional||Xr;n&&n.legacyInterceptorReqResOrdering?i.unshift(e.fulfilled,e.rejected):i.push(e.fulfilled,e.rejected)});const a=[];let l;this.interceptors.response.forEach(function(e){a.push(e.fulfilled,e.rejected)});let c,d=0;if(!s){const e=[Uo.bind(this),void 0];for(e.unshift(...i),e.push(...a),c=e.length,l=Promise.resolve(t);d<c;)l=l.then(e[d++],e[d++]);return l}c=i.length;let p=t;for(;d<c;){const e=i[d++],t=i[d++];try{p=e(p)}catch(e){t.call(this,e);break}}try{l=Uo.call(this,p)}catch(e){return Promise.reject(e)}for(d=0,c=a.length;d<c;)l=l.then(a[d++],a[d++]);return l}getUri(e){return Kr(yo((e=Ao(this.defaults,e)).baseURL,e.url,e.allowAbsoluteUrls),e.params,e.paramsSerializer)}}_r.forEach(["delete","get","head","options"],function(e){Wo.prototype[e]=function(t,n){return this.request(Ao(n||{},{method:e,url:t,data:(n||{}).data}))}}),_r.forEach(["post","put","patch","query"],function(e){function t(t){return function(n,r,o){return this.request(Ao(o||{},{method:e,headers:t?{"Content-Type":"multipart/form-data"}:{},url:n,data:r}))}}Wo.prototype[e]=t(),"query"!==e&&(Wo.prototype[e+"Form"]=t(!0))});var $o=Wo;class Jo{constructor(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");let t;this.promise=new Promise(function(e){t=e});const n=this;this.promise.then(e=>{if(!n._listeners)return;let t=n._listeners.length;for(;t-- >0;)n._listeners[t](e);n._listeners=null}),this.promise.then=e=>{let t;const r=new Promise(e=>{n.subscribe(e),t=e}).then(e);return r.cancel=function(){n.unsubscribe(t)},r},e(function(e,r,o){n.reason||(n.reason=new co(e,r,o),t(n.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}toAbortSignal(){const e=new AbortController,t=t=>{e.abort(t)};return this.subscribe(t),e.signal.unsubscribe=()=>this.unsubscribe(t),e.signal}static source(){let e;return{token:new Jo(function(t){e=t}),cancel:e}}}var Ko=Jo;const Go={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511,WebServerIsDown:521,ConnectionTimedOut:522,OriginIsUnreachable:523,TimeoutOccurred:524,SslHandshakeFailed:525,InvalidSslCertificate:526};Object.entries(Go).forEach(([e,t])=>{Go[t]=e});var Xo=Go;const Qo=function e(t){const n=new $o(t),r=Ln($o.prototype.request,n);return _r.extend(r,$o.prototype,n,{allOwnKeys:!0}),_r.extend(r,n,null,{allOwnKeys:!0}),r.create=function(n){return e(Ao(t,n))},r}(so);Qo.Axios=$o,Qo.CanceledError=co,Qo.CancelToken=Ko,Qo.isCancel=lo,Qo.VERSION=Bo,Qo.toFormData=Hr,Qo.AxiosError=Mr,Qo.Cancel=Qo.CanceledError,Qo.all=function(e){return Promise.all(e)},Qo.spread=function(e){return function(t){return e.apply(null,t)}},Qo.isAxiosError=function(e){return _r.isObject(e)&&!0===e.isAxiosError},Qo.mergeConfig=Ao,Qo.AxiosHeaders=Tr,Qo.formToJSON=e=>oo(_r.isHTMLForm(e)?new FormData(e):e),Qo.getAdapter=Mo.getAdapter,Qo.HttpStatusCode=Xo,Qo.default=Qo;var Zo=Qo;function Yo(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function eu(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Yo(Object(n),!0).forEach(function(t){H(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Yo(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function tu(e,t){if(!e||e.length<1)return Promise.resolve([]);let n="";const r=e.map(e=>{const t="stop"===e.type?"stop":"station";let r=`gtfs${e.gtfsId.split(":")[0].toLowerCase()}:${t}:GTFS:${e.gtfsId}`;return e.code&&(r+=`#${e.code}`),n+=`${r},`,eu(eu({},e),{},{gid:r})}).reduce(function(e,t){return e[t.gid]=t,e},{});return(o=t,u={ids:n.slice(0,-1)},Zo.get(encodeURI(o)+(u?(-1===o.search(/\?/)?"?":"&")+Tn(u):""),{timeout:1e4,method:"GET",headers:{Accept:"application/json"}}).then(e=>e.data)).then(e=>e.features.map(e=>({type:"FavouriteStop",properties:{addendum:e.properties.addendum,gid:r[e.properties.gid].gid,code:r[e.properties.gid].code,gtfsId:r[e.properties.gid].gtfsId,lastUpdated:r[e.properties.gid].lastUpdated,favouriteId:r[e.properties.gid].favouriteId,address:e.properties.label,layer:fe(e.properties)?"favouriteStop":"favouriteStation"},geometry:e.geometry})));var o,u}function nu(e,t,n){let r=me(e,t,["properties.name","properties.label","properties.address","properties.shortName","properties.longName"]);return n&&(r=r.filter(e=>!n.includes(e.properties.layer))),Promise.resolve(O.default(r,10).map(e=>{const t=eu(eu({},e),{},{type:"OldSearch",timetableClicked:!1,arrowClicked:!1});return delete t.properties.confidence,t}))}const ru=["route-TRAM","route-BUS","route-RAIL","route-FERRY","route-SUBWAY","route-AIRPLANE","route-FUNICULAR"],ou=["venue","address","street"],uu=["carpark","bikepark"],iu=["stop","station"];const su=S.default(function(e,t,n,r,o,u,{input:i},s,a,l){const{getPositions:c,getFavouriteLocations:d,getOldSearches:p,getFavouriteStops:f,parkingAreaSources:h,getLanguage:g,getStopAndStationsQuery:b,getFavouriteVehicleRentalStationsQuery:m,getFavouriteVehicleRentalStations:y,getFavouriteRoutesQuery:E,getFavouriteRoutes:A,getRoutesQuery:F,context:w,isPeliasLocationAware:v,minimalRegexp:_,lineRegexp:C,URL_PELIAS:D,URL_PELIAS_PLACE:S,feedIDs:R,geocodingSearchParams:x,geocodingSources:k,getFutureRoutes:j,cityBikeNetworks:P}=r,T=!e||0===e.length,N=!t||0===t.length,L=c(w),M=[],I={type:"all",term:i,results:[]},U=g(w),q=v&&null!=l&&l.lat&&null!=l&&l.lon?{"focus.point.lat":l.lat.toFixed(3),"focus.point.lon":l.lon.toFixed(3)}:{},z=n?n.split("-")[1]:void 0;if(e.includes("CurrentPosition")&&"geolocation-not-supported"!==L.status&&M.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([])}(i,L)),(T||e.includes("MapPosition"))&&M.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=j(w);M.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 n=e.getFavouriteVehicleRentalStations(e.context);if((null==n?void 0:n.length)>0)return!0;const r=e.getFavouriteStops(e.context);return(null==r?void 0:r.length)>0}(r)&&M.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)),T||e.includes("Locations")){const n=x;if(t.includes("Favourite")){const e=d(w);M.push(function(e,t){return Promise.resolve(me(e,t,["address","name"]).map(e=>({type:"FavouritePlace",properties:eu(eu({},e),{},{label:e.name,layer:"favouritePlace"}),geometry:{type:"Point",coordinates:[e.lon,e.lat]}})))}(e,i)),t.includes("Back")&&M.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(N||t.includes("Datasource")){const t=["venue","address","street"];e.includes("Stations")&&t.push("station"),M.push(Nn(i,n,U,q,k.join(","),D,_,t))}if(N||t.includes("History")){const e=p(w,"endpoint"),t=["bikestation"];t.push(...iu),t.push(...ru),t.push(...uu),M.push(nu(e,i,t))}}if(T||e.includes("ParkingAreas")){if(N||t.includes("Datasource")){const e=x;u&&10!==u&&(e.size=u);const t=["carpark","bikepark"],n=h?h.join(","):null;M.push(Nn(i,e,U,q,n,D,_,t).then(e=>o?o(e,z):e))}if(N||t.includes("History")){const e=p(w),t=["bikestation"];t.push(...iu),t.push(...ru),t.push(...ou),M.push(nu(e,i,t))}}const H=e.includes("Stops"),V=e.includes("Stations");if(T||H||V){if(t.includes("Favourite")){const e=f(w);let t;t=e.every(e=>"station"===e.type)?tu(e,S).then(e=>o?o(e,z):e):b(e).then(e=>tu(e,S)).then(e=>o?o(e,z):e),M.push(function(e,t,n,r){return e.then(e=>me(e.filter(e=>"stop"===e.type?n:r),t,["properties.name","properties.name","properties.address"]))}(t,i,H,V))}if(N||t.includes("Datasource")){const t=[];H&&t.push("stop"),V&&t.push("station");const n=u&&10!==u?{size:u}:{};x&&x["boundary.country"]&&(n["boundary.country"]=x["boundary.country"]),(T||e.includes("Locations"))&&(n.dedupestops=1);const r=R.map(e=>`gtfs${e}`).join(",");M.push(Nn(i,n,U,q,r,D,_,t).then(e=>o?o(e,z):e))}if(N||t.includes("History")){const e=p(w).filter(e=>!e.properties.gid||e.properties.gid.includes("GTFS:")),t=["bikestation"];t.push(...ru),t.push(...ou),t.push(...uu),H||t.push("stop"),V||t.push("station"),n?M.push(nu(e,i,t).then(e=>o?o(e,z):e)):M.push(nu(e,i,t))}}if(T||e.includes("Routes")){if(t.includes("Favourite")){const e=A(w);M.push(E(e,i,z,a).then(e=>o?o(e,z,"Routes"):e))}if(M.push(F(i,R,n,a).then(e=>o?o(e,z,"Routes"):e)),N||t.includes("History")){const e=p(w),t=["bikestation"];n&&t.push(...ru.filter(e=>!(e===n))),t.push(...iu),t.push(...ou),t.push(...uu),M.push(nu(e,i,t).then(e=>o?o(e,z,"Routes"):e))}}if(T||e.includes("VehicleRentalStations")){if(t.includes("Favourite")){const e=y(w);M.push(m(e,i))}if(N||t.includes("Datasource")){const e=["bikestation"],t=u&&10!==u?{size:u}:{};M.push(Nn(i,t,U,q,P.join(","),D,_,e).then(e=>o?o(e,z,"VehicleRentalStations"):e))}if(N||t.includes("History")){const e=p(w),t=[...iu];t.push(...ru),t.push(...ou),t.push(...uu),M.push(nu(e,i,t))}}Promise.all(M).then(B.default).then(e=>{I.results=e}).catch(e=>{I.error=e}).then(()=>{s(eu(eu({},I),{},{results:ge(C,I.results,i)}))})},300,{leading:!0}),au=h.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 lu(e,t){void 0===t&&(t={});var n=t.insertAt;if(e&&"undefined"!=typeof document){var r=document.head||document.getElementsByTagName("head")[0],o=document.createElement("style");o.type="text/css","top"===n&&r.firstChild?r.insertBefore(o,r.firstChild):r.appendChild(o),o.styleSheet?o.styleSheet.cssText=e:o.appendChild(document.createTextNode(e))}}au.init();var cu={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",hidden:"styles_hidden__Y0n2p"};lu("input[type=text] {\n margin: 0;\n}\n\n.styles_container__CyBuz {\n display: flex;\n width: 100%;\n}\n.styles_container__CyBuz .styles_input__x7Oye.styles_favourite__xn1Du {\n padding-left: 47px;\n}\n.styles_container__CyBuz .styles_input__x7Oye.styles_thin__ToA7- {\n height: 34px;\n}\n.styles_container__CyBuz .styles_input__x7Oye {\n font-size: 16px;\n font-family: var(--font-family);\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}\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}\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 }\n}\n.styles_container__CyBuz .styles_input__x7Oye::-webkit-input-placeholder {\n color: #666;\n opacity: 1;\n font-size: 15px;\n}\n.styles_container__CyBuz .styles_input__x7Oye::placeholder {\n color: #666;\n opacity: 1;\n font-size: 15px;\n}\n\n.styles_hasValue__qkIFF {\n color: #333;\n}\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(2.625rem + 9px);\n z-index: 20;\n}\n\n.styles_suggestionsContainer__-FUbj {\n background-color: white;\n z-index: 20;\n}\n.styles_suggestionsContainer__-FUbj .styles_suggestionsList__e-mac {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n background: white;\n}\n.styles_suggestionsContainer__-FUbj .styles_suggestionsList__e-mac li:hover {\n background: #f2f5f7;\n}\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\n.styles_suggestionHighlighted__vdJIb {\n background-color: #f2f5f7;\n}\n\n.styles_autosuggest-input-container__C4ks3 {\n position: relative;\n width: 100%;\n}\n.styles_autosuggest-input-container__C4ks3.styles_origin__J6GD2 {\n z-index: 16;\n}\n.styles_autosuggest-input-container__C4ks3.styles_destination__yOA4k {\n z-index: 10;\n}\n.styles_autosuggest-input-container__C4ks3.styles_stop-route-station__ofvbR {\n z-index: 9;\n}\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}\n.styles_autosuggest-input-icon__-XA83 svg {\n width: 16px;\n height: 24px;\n}\n.styles_autosuggest-input-icon__-XA83.styles_origin__J6GD2 svg {\n color: #4ea700;\n fill: #4ea700;\n width: 16px;\n height: 16px;\n}\n.styles_autosuggest-input-icon__-XA83.styles_destination__yOA4k svg {\n fill: #ec5188;\n width: 16px;\n height: 24px;\n}\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}\n.styles_autosuggest-input-icon__-XA83.styles_origin-stop-near-you__Vq9IO svg {\n fill: #888;\n width: 16px;\n height: 16px;\n}\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}\nbutton.styles_clear-input__KFeWb svg {\n fill: var(--color);\n width: 16px;\n height: 16px;\n}\nbutton.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}\nbutton.styles_clear-input__KFeWb:active {\n background-color: transparent;\n color: inherit;\n}\nbutton.styles_clear-input__KFeWb:hover {\n background-color: transparent;\n color: inherit;\n}\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}\n\n.styles_hidden__Y0n2p {\n visibility: hidden;\n}");const du=e=>e.localadmin||e.localadmin||e.address&&e.address.lastIndexOf(",")<e.address.length-2&&e.address.substring(e.address.lastIndexOf(",")+2)||"",pu=({id:e,code:t})=>t||(void 0!==e&&void 0!==e.indexOf&&-1!==e.indexOf("#")?e.substring(e.indexOf("#")+1):void 0),fu=T.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 n=e.name,r=e.address,[n||r&&r.split(",")[0],"string"==typeof r?r.replace(new RegExp(`${N.default(n)}([ ,]|$)+`),""):""];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(`${N.default(e.name)}(,)?( )?`),"")];case"favouriteStop":case"stop":return t?[e.name||e.label||e.address&&e.address.split(",")[0],du(e)]:[e.name,e.id,pu(e),du(e)];default:return[e.name||e.label||e.address&&e.address.split(",")[0],du(e)]}var n,r},(e,t)=>{const n=L.default(e);return n.plain=t,n});const hu=e=>{const t=e&&(e.key||e.which||e.keyCode)||"";return!(!t||![13," ","Spacebar"].concat([32,"Enter"]).includes(t))&&(e.preventDefault(),!0)},gu=e=>"origin"===e||"destination"===e||"via-point"===e||"origin-stop-near-you"===e,bu=(e,t,n)=>{if(!n)return;if(!e||!e.GTFS.platform)return;const{modes:r,platform:o}=e.GTFS;return[r&&"RAIL"===r[0]?n("track",{lng:t}):n("platform",{lng:t}),o]};function mu(e,t,n){if(!n)return;if("FutureRoute"!==e.type){if("SelectFromMap"===e.type)return["",n("select-from-map",{lng:t})];if("CurrentLocation"===e.type)return["",n("use-own-position",{lng:t})];if("SelectFromOwnLocations"===e.type)return["",n("select-from-own-locations",{lng:t})];let o,[u,i]=fu(e.properties,!0);if(e.properties.layer.toLowerCase().includes("bikerental")||e.properties.layer.toLowerCase().includes("bikestation")){o=n("vehiclerentalstation",{lng:t});return[o,u,void 0,e.properties.labelId]}if("bikepark"===e.properties.layer)return o=n("bikepark",{lng:t}),[o,u,void 0,void 0];if("carpark"===e.properties.layer)return o=n("carpark",{lng:t}),[o,u,void 0,void 0];if(e.properties.mode)o=n(e.properties.mode.toLowerCase().replace("favourite",""),{lng:t});else{o=n(e.properties.layer.replace("route-","").toLowerCase().replace("favourite",""),{lng:t})}if(e.properties.id&&("stop"===e.properties.layer||"station"===e.properties.layer)){var r;const s=pu(e.properties),a=null===(r=e.properties.addendum)||void 0===r?void 0:r.GTFS.modes,l=bu(e.properties.addendum,t,n);return[o,be(u,s),i,s,a,l]}if("favouriteStop"===e.properties.layer||"favouriteStation"===e.properties.layer){const{address:n,code:r}=e.properties;return[o,n?be(n.split(",")[0],r):u,i,r,void 0,bu(e.properties.addendum,t)]}return[o,u,i]}const{origin:o,destination:u}=e.properties,i=o.locality?`, ${o.locality} foobar`:"",s=u.locality?`, ${u.locality}`:"",a=o.name,l=u.name;return[n("future-route",{lng:t}),`${n("origin",{lng:t})} ${a}${i} ${n("destination",{lng:t})} ${l}${s}`,e.translatedText]}function yu(e,t,n){if(!n)return;const r=E.DateTime.fromSeconds(Number(e.properties.time)),o=E.DateTime.now();let u=e.properties.arriveBy?n("arrival",{lng:t}):n("departure",{lng:t});return u=r.hasSame(o,"day")?`${u} ${n("today-at")}`:r.hasSame(o.plus({days:1}),"day")?`${u} ${n("tomorrow-at",{lng:t})}`:`${u} ${r.toFormat("ccc d.L.")}`,u=`${u} ${r.toFormat("HH:mm")}`,u}const Eu=e=>"SelectFromOwnLocations"===e.type||"back"===e.type?"":function(e){const t=fu(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),Au=({suggestions:e,t:t,lng:n})=>{let r=[];const o=e[0];return o&&(o.type&&o.type.includes("Favourite")&&r.push(t("favourite",{lng:n})),r=r.concat(mu(e[0],n))),[...new Set(r)].join(" - ")};function Fu(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var wu,vu={exports:{}};
2
- /*! For license information please see index.js.LICENSE.txt */var _u=(wu||(wu=1,function(e){var t;"undefined"!=typeof self&&self,e.exports=(t=C.default,function(){var e={888:function(e,t,n){var r,o;o=void 0!==n.g?n.g:"undefined"!=typeof window?window:this,r=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},n=function(){var e={};return Array.prototype.forEach.call(arguments,function(t){for(var n in t){if(!t.hasOwnProperty(n))return;e[n]=t[n]}}),e},r=function(e){"#"===e.charAt(0)&&(e=e.substr(1));for(var t,n=String(e),r=n.length,o=-1,u="",i=n.charCodeAt(0);++o<r;){if(0===(t=n.charCodeAt(o)))throw new InvalidCharacterError("Invalid character: the input contains U+0000.");u+=t>=1&&t<=31||127==t||0===o&&t>=48&&t<=57||1===o&&t>=48&&t<=57&&45===i?"\\"+t.toString(16)+" ":t>=128||45===t||95===t||t>=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122?n.charAt(o):"\\"+n.charAt(o)}return"#"+u},o=function(){return Math.max(document.body.scrollHeight,document.documentElement.scrollHeight,document.body.offsetHeight,document.documentElement.offsetHeight,document.body.clientHeight,document.documentElement.clientHeight)},u=function(t){return t?(n=t,parseInt(e.getComputedStyle(n).height,10)+t.offsetTop):0;var n},i=function(t,n,r){0===t&&document.body.focus(),r||(t.focus(),document.activeElement!==t&&(t.setAttribute("tabindex","-1"),t.focus(),t.style.outline="none"),e.scrollTo(0,n))},s=function(t,n,r,o){if(n.emitEvents&&"function"==typeof e.CustomEvent){var u=new CustomEvent(t,{bubbles:!0,detail:{anchor:r,toggle:o}});document.dispatchEvent(u)}};return function(a,l){var c,d,p,f,h={cancelScroll:function(e){cancelAnimationFrame(f),f=null,e||s("scrollCancel",c)},animateScroll:function(r,a,l){h.cancelScroll();var d=n(c||t,l||{}),g="[object Number]"===Object.prototype.toString.call(r),b=g||!r.tagName?null:r;if(g||b){var m=e.pageYOffset;d.header&&!p&&(p=document.querySelector(d.header));var y,E,A,F=u(p),w=g?r:function(t,n,r,u){var i=0;if(t.offsetParent)do{i+=t.offsetTop,t=t.offsetParent}while(t);return i=Math.max(i-n-r,0),u&&(i=Math.min(i,o()-e.innerHeight)),i}(b,F,parseInt("function"==typeof d.offset?d.offset(r,a):d.offset,10),d.clip),v=w-m,_=o(),C=0,D=function(e,t){var n=t.speedAsDuration?t.speed:Math.abs(e/1e3*t.speed);return t.durationMax&&n>t.durationMax?t.durationMax:t.durationMin&&n<t.durationMin?t.durationMin:parseInt(n,10)}(v,d),S=function(t){y||(y=t),C+=t-y,A=m+v*function(e,t){var n;return"easeInQuad"===e.easing&&(n=t*t),"easeOutQuad"===e.easing&&(n=t*(2-t)),"easeInOutQuad"===e.easing&&(n=t<.5?2*t*t:(4-2*t)*t-1),"easeInCubic"===e.easing&&(n=t*t*t),"easeOutCubic"===e.easing&&(n=--t*t*t+1),"easeInOutCubic"===e.easing&&(n=t<.5?4*t*t*t:(t-1)*(2*t-2)*(2*t-2)+1),"easeInQuart"===e.easing&&(n=t*t*t*t),"easeOutQuart"===e.easing&&(n=1- --t*t*t*t),"easeInOutQuart"===e.easing&&(n=t<.5?8*t*t*t*t:1-8*--t*t*t*t),"easeInQuint"===e.easing&&(n=t*t*t*t*t),"easeOutQuint"===e.easing&&(n=1+--t*t*t*t*t),"easeInOutQuint"===e.easing&&(n=t<.5?16*t*t*t*t*t:1+16*--t*t*t*t*t),e.customEasing&&(n=e.customEasing(t)),n||t}(d,E=(E=0===D?0:C/D)>1?1:E),e.scrollTo(0,Math.floor(A)),function(t,n){var o=e.pageYOffset;if(t==n||o==n||(m<n&&e.innerHeight+o)>=_)return h.cancelScroll(!0),i(r,n,g),s("scrollStop",d,r,a),y=null,f=null,!0}(A,w)||(f=e.requestAnimationFrame(S),y=t)};0===e.pageYOffset&&e.scrollTo(0,0),function(e,t,n){t||history.pushState&&n.updateURL&&history.pushState({smoothScroll:JSON.stringify(n),anchor:e.id},document.title,e===document.documentElement?"#top":"#"+e.id)}(r,g,d),"matchMedia"in e&&e.matchMedia("(prefers-reduced-motion)").matches?i(r,Math.floor(w),!1):(s("scrollStart",d,r,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 n,o;try{n=r(decodeURIComponent(d.hash))}catch(e){n=r(d.hash)}if("#"===n){if(!c.topOnEmptyHash)return;o=document.documentElement}else o=document.querySelector(n);(o=o||"#top"!==n?o:document.documentElement)&&(t.preventDefault(),function(t){if(history.replaceState&&t.updateURL&&!history.state){var n=e.location.hash;n=n||"",history.replaceState({smoothScroll:JSON.stringify(t),anchor:n||e.pageYOffset},document.title,n||e.location.href)}}(c),h.animateScroll(o,d))}},b=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(r(history.state.anchor)))||h.animateScroll(t,null,{updateURL:!1})}};return h.destroy=function(){c&&(document.removeEventListener("click",g,!1),e.removeEventListener("popstate",b,!1),h.cancelScroll(),c=null,d=null,p=null,f=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=n(t,l||{}),p=c.header?document.querySelector(c.header):null,document.addEventListener("click",g,!1),c.updateURL&&c.popstate&&e.addEventListener("popstate",b,!1)}(),h}}(o)}.apply(t,[]),void 0===r||(e.exports=r)},432:function(e,t,n){var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||r(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),o(n(47),t),o(n(926),t),o(n(349),t),o(n(137),t),o(n(729),t),o(n(383),t),o(n(450),t),o(n(358),t),o(n(753),t),o(n(869),t),o(n(352),t),o(n(446),t),o(n(164),t),o(n(305),t),o(n(502),t)},349:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useArrowNavigation=void 0;var r=n(156);t.useArrowNavigation=function(e){var t=e.listItems,n=e.onArrowUpOrDown,o=(0,r.useState)(0),u=o[0],i=o[1],s=(0,r.useCallback)(function(e){i(e)},[t]),a=function(e){var r=e.key;if(null==t?void 0:t.length)if("ArrowUp"===r)n&&n(),e.preventDefault(),s(u>0?u-1:t.length-1);else{if("ArrowDown"!==r)return;n&&n(),e.preventDefault(),u<t.length-1?s(u+1):s(0)}};return(0,r.useEffect)(function(){return window.addEventListener("keydown",a),function(){return window.removeEventListener("keydown",a)}}),(0,r.useEffect)(function(){s(0)},[t]),{selectedIndex:u}}},446:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useDebounce=void 0;var r=n(156);t.useDebounce=function(e,t){void 0===t&&(t=300);var n=(0,r.useState)(e),o=n[0],u=n[1];return(0,r.useEffect)(function(){var n=setTimeout(function(){u(e)},t);return function(){clearTimeout(n)}},[e,t]),o}},164:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useElementSize=void 0;var r=n(156);t.useElementSize=function(){var e,t,n=(0,r.useRef)(null);return[n,{width:null===(e=null==n?void 0:n.current)||void 0===e?void 0:e.clientWidth,height:null===(t=null==n?void 0:n.current)||void 0===t?void 0:t.clientHeight}]},t.default=t.useElementSize},137:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useIntersectionObserver=void 0;var r=n(156);t.useIntersectionObserver=function(e){var t=(0,r.useRef)(null),n=(0,r.useState)(!1),o=n[0],u=n[1],i=function(e){var t=e[0];u(t.isIntersecting)};return(0,r.useEffect)(function(){if(window&&window.IntersectionObserver){var n=new IntersectionObserver(i,e),r=t.current;return t.current&&n.observe(t.current),function(){r&&n.unobserve(r)}}u(!1)},[t,e]),{containerRef:t,isVisible:o}},t.default=t.useIntersectionObserver},729:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useIsBreakpoint=void 0;var r=n(156),o=n(432),u={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?u[e]:e,n=(0,r.useState)(null),i=n[0],s=n[1],a=(0,r.useCallback)(function(){s(window.innerWidth)},[]);return(0,r.useEffect)(function(){a()},[]),(0,o.useOnResize)(a),i>=t},t.default=t.useIsBreakpoint},450:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useIsLoadingAfterError=void 0;var r=n(156);t.useIsLoadingAfterError=function(e,t){var n=(0,r.useState)(t),o=n[0],u=n[1];return(0,r.useEffect)(function(){e||u(t)},[e,t]),e&&o}},305:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useIsMobile=void 0;var r=n(729);t.useIsMobile=function(){return!(0,r.useIsBreakpoint)("tablet")},t.default=t.useIsMobile},383:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useIsomorphicLayoutEffect=void 0;var r=n(156);t.useIsomorphicLayoutEffect="undefined"!=typeof window?r.useLayoutEffect:r.useEffect,t.default=t.useIsomorphicLayoutEffect},753:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useOnLoseFocusWithin=void 0;var r=n(156);t.useOnLoseFocusWithin=function(e){var t=e.ref,n=e.callback,o=e.watch;(0,r.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:n()};return document.addEventListener("keyup",e),function(){return document.removeEventListener("keyup",e)}},[n,t,o])},t.default=t.useOnLoseFocusWithin},502:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useOnResize=void 0;var r=n(156);t.useOnResize=function(e){(0,r.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,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useOnWindowFocus=void 0;var r=n(156);t.useOnWindowFocus=function(e){(0,r.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,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useOutsideReacter=void 0;var r=n(156);t.useOutsideReacter=function(e,t){function n(n){e.current&&!e.current.contains(n.target)&&t()}(0,r.useEffect)(function(){return document.addEventListener("mousedown",n),function(){document.removeEventListener("mousedown",n)}})}},869:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useRunAfterUpdate=void 0;var r=n(156);t.useRunAfterUpdate=function(){var e=(0,r.useRef)(null);return(0,r.useEffect)(function(){e.current&&(e.current(),e.current=null)}),function(t){e.current=t}},t.default=t.useRunAfterUpdate},926:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useScrollLock=void 0;var r=n(156);t.useScrollLock=function(){return{lock:(0,r.useCallback)(function(){var e=window.scrollY+"px",t=document.body;t.style.position="fixed",t.style.top="-"+e},[]),unlock:(0,r.useCallback)(function(){var e=document.body,t=e.style.top,n=-1*parseInt(t||"0");e.style.position="",e.style.top="",n&&window.scrollTo(0,-1*parseInt(t||"0"))},[])}}},358:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.useSmoothScroll=void 0;var o=n(156),u=r(n(888));t.useSmoothScroll=function(e){var t=(0,o.useRef)(null),n=e.ref,r=e.offset,i=void 0===r?0:r,s=e.speed,a=void 0===s?500:s;return(0,o.useEffect)(function(){t.current=new u.default(null,{speed:a,speedAsDuration:!0})},[]),(0,o.useCallback)(function(){n&&t.current&&t.current.animateScroll(n.current,null,{offset:function(){return i},updateURL:!1})},[i,n])}},156:function(e){e.exports=t}},n={};function r(t){var o=n[t];if(void 0!==o)return o.exports;var u=n[t]={exports:{}};return e[t].call(u.exports,u,u.exports,r),u.exports}return r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r(432)}())}(vu)),vu.exports),Cu=Fu(_u),Du={"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"};lu("input[type=text] {\n margin: 0;\n padding: 0;\n}\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\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}\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\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}\n.MobileSearch_combobox-icon__3syCw svg {\n width: 14px;\n height: 21px;\n transform: rotate(-180deg);\n}\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\n.MobileSearch_container__JtL5q {\n display: flex;\n align-items: center;\n width: 100%;\n}\n.MobileSearch_container__JtL5q .MobileSearch_input__Sjo1c {\n font-family: var(--font-family);\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}\n.MobileSearch_container__JtL5q .MobileSearch_input__Sjo1c:focus {\n outline: none;\n border: none;\n box-shadow: none;\n background: #fff;\n}\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}\nbutton.MobileSearch_clear-input__SGpE8 svg {\n fill: var(--color);\n width: 16px;\n height: 16px;\n}\nbutton.MobileSearch_clear-input__SGpE8:focus {\n background-color: transparent;\n color: inherit;\n}\nbutton.MobileSearch_clear-input__SGpE8:active {\n background-color: transparent;\n color: inherit;\n}\nbutton.MobileSearch_clear-input__SGpE8:hover {\n background-color: transparent;\n color: inherit;\n}\n\n.MobileSearch_hasValue__H1RPq {\n color: #333;\n}\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\n.MobileSearch_suggestionHighlighted__xpMMN {\n background-color: #f2f5f7;\n}\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}\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\n.MobileSearch_clear-search-history__cO30c {\n display: flex;\n font-family: var(--font-family);\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}\n.MobileSearch_suggestionHighlighted__xpMMN .MobileSearch_clear-search-history__cO30c {\n background-color: transparent;\n color: inherit;\n}\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\n.MobileSearch_mobile-modal__DFUUM {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n}\n.MobileSearch_mobile-modal__DFUUM.ReactModal__Content--after-open > div {\n transform: translateY(0);\n}\n.MobileSearch_mobile-modal__DFUUM.ReactModal__Content--before-close > div {\n transform: translateY(10%);\n}\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 Su={"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 Bu(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var u=Object.getOwnPropertySymbols(e);for(r=0;r<u.length;r++)n=u[r],-1===t.indexOf(n)&&{}.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}lu("input[type=text] {\n margin: 0;\n padding: 0;\n}\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\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}\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\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}\n.MobileNoScroll_combobox-icon__WlXar svg {\n width: 14px;\n height: 21px;\n transform: rotate(-180deg);\n}\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\n.MobileNoScroll_container__veReP {\n display: flex;\n align-items: center;\n width: 100%;\n}\n.MobileNoScroll_container__veReP .MobileNoScroll_input__zo9Gg {\n font-family: var(--font-family);\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}\n.MobileNoScroll_container__veReP .MobileNoScroll_input__zo9Gg:focus {\n outline: none;\n border: none;\n box-shadow: none;\n background: #fff;\n}\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}\nbutton.MobileNoScroll_clear-input__lQlxs svg {\n fill: var(--color);\n width: 16px;\n height: 16px;\n}\nbutton.MobileNoScroll_clear-input__lQlxs:focus {\n background-color: transparent;\n color: inherit;\n}\nbutton.MobileNoScroll_clear-input__lQlxs:active {\n background-color: transparent;\n color: inherit;\n}\nbutton.MobileNoScroll_clear-input__lQlxs:hover {\n background-color: transparent;\n color: inherit;\n}\n\n.MobileNoScroll_hasValue__1Gx3J {\n color: #333;\n}\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\n.MobileNoScroll_suggestionHighlighted__zxzXj {\n background-color: #f2f5f7;\n}\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}\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\n.MobileNoScroll_clear-search-history__vR2Xw {\n display: flex;\n font-family: var(--font-family);\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}\n.MobileNoScroll_suggestionHighlighted__zxzXj .MobileNoScroll_clear-search-history__vR2Xw {\n background-color: transparent;\n color: inherit;\n}\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\n.MobileNoScroll_mobile-modal__xYuHh {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n}\n.MobileNoScroll_mobile-modal__xYuHh.ReactModal__Content--after-open > div {\n transform: translateY(0);\n}\n.MobileNoScroll_mobile-modal__xYuHh.ReactModal__Content--before-close > div {\n transform: translateY(10%);\n}\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\n.MobileNoScroll_suggestionsContainerOpen__sX1RA {\n -ms-overflow-style: none; /* Internet Explorer 10+ */\n scrollbar-width: none; /* Firefox */\n}\n.MobileNoScroll_suggestionsContainerOpen__sX1RA::-webkit-scrollbar {\n display: none; /* Safari and Chrome */\n}");const Ou=["item","lng","getItemProps","highlightedIndex","itemIndex","styles"],Ru=["suggestions","getMenuProps","getItemProps","lng","styles","hidden","renderClearHistoryButton","handleClearHistory"];function xu(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function ku(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?xu(Object(n),!0).forEach(function(t){H(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):xu(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function ju(e){let{item:t,lng:n,getItemProps:o,highlightedIndex:u,itemIndex:i,styles:s}=e,a=Bu(e,Ou);const[l]=r.useTranslation(),c="FutureRoute"===t.type?ku(ku({},t),{},{translatedText:yu(t,n,l)}):t,d=mu(t,n,l);return C.default.createElement("li",Object.assign({className:D.default(s.suggestion,u===i&&s.suggestionHighlighted)},o({index:i})),C.default.createElement(U.default,Object.assign({item:c,content:d,lng:n},a)))}const Pu="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 Tu(e){let{suggestions:t,getMenuProps:n,getItemProps:o,lng:u,styles:i,hidden:s,renderClearHistoryButton:a,handleClearHistory:l}=e,c=Bu(e,Ru);const[d]=r.useTranslation();return C.default.createElement("div",{className:D.default(i.suggestionsContainerOpen,i.suggestionsContainer,s&&i.hidden)},C.default.createElement("ul",Object.assign({className:i.suggestionsList},n()),t.map((e,t)=>C.default.createElement(ju,Object.assign({key:`${e.type}-${e.properties.gid||e.properties.gtfsId||JSON.stringify(e.properties)}`,getItemProps:o,itemIndex:t,item:e,lng:u,styles:i},c))),a&&C.default.createElement("li",o({index:t.length}),C.default.createElement("button",{onClick:l,type:"button",className:i["clear-search-history"]},d("clear-search-history",{lng:u})))))}"production"!==process.env.NODE_ENV&&(ju.propTypes={item:Pu.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&&(Tu.propTypes={suggestions:_.default.arrayOf(Pu).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}),Tu.defaultProps={renderClearHistoryButton:!1,handleClearHistory:()=>{}};const Nu=({color:e,lng:t,clearInput:n,onKeyDown:o,styles:u})=>{const[i]=r.useTranslation();return C.default.createElement("button",{type:"button",className:u["clear-input"],onClick:n,"aria-label":i("clear-button-label",{lng:t}),onKeyDown:o},C.default.createElement(P.default,{img:"close",color:e}))};function Lu({id:e,lng:t,value:r,placeholder:o,required:u,getInputProps:i,getLabelProps:s,clearInput:a,ariaLabel:l,inputRef:c,styles:d,renderLabel:p,isMobile:f,inputClassName:h,transportMode:g,clearButtonColor:b,autoFocus:m,inputOnBlur:y}){const E=n.useRef(null);n.useLayoutEffect(()=>{const e=c.current;e&&null!==E.current&&e===document.activeElement&&e.setSelectionRange(E.current,E.current)},[r]);return C.default.createElement("div",{className:d.container},p&&C.default.createElement("label",s({className:d["sr-only"],htmlFor:e}),l),C.default.createElement("input",Object.assign({"aria-label":l,autoFocus:m,placeholder:o,required:u,type:"text",className:D.default(d.input,d[e],h,f&&g&&d.thin,r&&d.hasValue),value:r,id:e},i({ref:c,onBlur:y,onChange:e=>{E.current=e.target.selectionStart}}))),r&&C.default.createElement(Nu,{lng:t,clearInput:()=>a(c),styles:d,color:b,onKeyDown:e=>hu(e)&&a(c)}))}function Mu(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Iu(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Mu(Object(n),!0).forEach(function(t){H(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Mu(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}"production"!==process.env.NODE_ENV&&(Nu.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&&(Lu.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}),Lu.defaultProps={autoFocus:!1,renderLabel:!1,transportMode:void 0,inputOnBlur:()=>{}};const Uu=({appElement:e,id:t,placeholder:o,clearInput:u,onSelectedItemChange:i,fontWeights:s,clearOldSearches:a,suggestionProps:l,lng:c,ariaProps:d,value:f,inputClassName:h,required:g,mobileLabel:b,showScroll:m,state:y,dispatch:E,colors:A})=>{const[F]=r.useTranslation(),{lock:w,unlock:v}=Cu.useScrollLock(),_=m?Du:Su,D=`${t}-input`,S=`${t}-label`,[B,O]=n.useState(!1),R=C.default.useRef();n.useEffect(()=>{M.default.setAppElement(e)},[]),n.useEffect(()=>{y.renderMobile?w():v()},[y.renderMobile]);const{highlightedIndex:x,getLabelProps:k,getMenuProps:j,getInputProps:T,getItemProps:N,setHighlightedIndex:L}=p.useCombobox({items:y.suggestions,inputValue:f,isOpen:!0,onSelectedItemChange:e=>{i(e),E({type:"TOGGLE_MENU",isMobile:!0})},inputId:D,labelId:S,selectedItem:null,defaultHighlightedIndex:-1,onInputValueChange:({inputValue:e})=>y.renderMobile&&E({type:"INPUT_CHANGE",value:e}),stateReducer:(e,{changes:t,type:n})=>{switch(n){case p.useCombobox.stateChangeTypes.InputKeyDownEscape:return L(-1),E({type:"TOGGLE_MENU",isMobile:!0}),e;case p.useCombobox.stateChangeTypes.InputKeyDownEnter:return y.loading?(E({type:"PENDING_ENTER",enterPending:!0}),e):-1===e.highlightedIndex?Iu(Iu({},t),{},{selectedItem:y.suggestions[0]}):t;case p.useCombobox.stateChangeTypes.InputBlur:return e;default:return t}},itemToString:e=>e?Eu(e):""});k({},{suppressRefError:!0}),j({},{suppressRefError:!0}),T({},{suppressRefError:!0}),N({index:-1},{suppressRefError:!0});const{ariaRequiredText:U,SearchBarId:q,ariaCurrentSuggestion:z}=d,H=U.concat(" ").concat(q).concat(" ").concat(z);return C.default.createElement(M.default,{isOpen:y.renderMobile,className:_["mobile-modal"],overlayClassName:_["mobile-modal-overlay"],shouldReturnFocusAfterClose:!1,shouldCloseOnEsc:!0},C.default.createElement("div",{className:_["mobile-modal-content"],style:{"--color":A.primary,"--accessible-primary-color":A.accessiblePrimary,"--hover-color":A.hover,"--font-weight-medium":s.medium}},C.default.createElement("div",{className:_["combobox-container"],htmlFor:D},C.default.createElement("button",{type:"button",className:_["combobox-icon"],onClick:()=>{L(-1),E({type:"TOGGLE_MENU",isMobile:!0})},onKeyDown:e=>{hu(e)&&(L(-1),E({type:"TOGGLE_MENU",isMobile:!0}))},"aria-label":F("cancel",{lng:c}),tabIndex:0},C.default.createElement(P.default,{img:"arrow",color:A.primary})),C.default.createElement("span",{className:_["right-column"]},C.default.createElement("span",Object.assign({className:_["combobox-label"],id:S},k()),b),C.default.createElement(Lu,{placeholder:gu(t)?F("address-place-or-business",{lng:c}):o,id:t,lng:c,value:f,getInputProps:T,getLabelProps:k,clearInput:()=>u(R),ariaLabel:H,inputRef:R,styles:_,renderLabel:!1,clearButtonColor:A.primary,autoFocus:!0,inputClassName:h,required:g,isMobile:!0}),C.default.createElement(Tu,Object.assign({suggestions:y.suggestions,getMenuProps:j,getItemProps:N,highlightedIndex:x,isOpen:!0,hidden:!1,lng:c,styles:_,renderClearHistoryButton:!0,handleClearHistory:()=>O(!0)},l)))),C.default.createElement(I.default,{appElement:e,isModalOpen:B,handleClose:()=>O(!1),headerText:F("delete-old-searches-header",{lng:c}),primaryButtonText:F("delete",{lng:c}),secondaryButtonText:F("cancel",{lng:c}),primaryButtonOnClick:()=>{a(),O(!1)},secondaryButtonOnClick:()=>O(!1),colors:A,fontWeights:s,lang:c})))};function qu(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function zu(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?qu(Object(n),!0).forEach(function(t){H(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):qu(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}"production"!==process.env.NODE_ENV&&(Uu.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 Hu=(e,t)=>{switch(t.type){case"INPUT_CHANGE":return zu(zu({},e),{},{value:t.value});case"FETCH_SUGGESTIONS":return zu(zu({},e),{},{loading:t.loading,suggestions:t.suggestions||e.suggestions});case"CLEAR_SUGGESTIONS":return zu(zu({},e),{},{suggestions:[]});case"RESET_SOURCES":return zu(zu({},e),{},{sources:t.sources});case"SET_SOURCES":return zu(zu({},e),{},{showOwnPlaces:t.showOwnPlaces,sources:t.sources,pendingSelection:t.pendingSelection});case"CLEAR":return zu(zu({},e),{},{value:"",isCleared:!0,suggestions:[]});case"INPUT_BLUR":return zu(zu({},e),{},{value:t.value||e.value,isCleared:!t.isMobile&&e.isCleared,pendingSelection:null,showOwnPlaces:!1});case"RESET":return t.initialState;case"PENDING_ENTER":return zu(zu({},e),{},{enterPending:t.enterPending});case"TOGGLE_MENU":return t.isMobile?e.renderMobile?zu(zu({},e),{},{renderMobile:!1,isCleared:!1}):zu(zu({},e),{},{renderMobile:!0,value:e.isCleared?"":e.value}):zu(zu({},e),{},{isMenuOpen:!e.isMenuOpen,renderMobile:t.isMobile&&!e.renderMobile});default:return e}};function Vu(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Wu(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Vu(Object(n),!0).forEach(function(t){H(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Vu(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}const $u=["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 Ju({appElement:e,id:t,placeholder:o,onSelect:u,icon:i,value:s,onClear:a,lang:l,getAutoSuggestIcons:c,handleViaPoints:d,focusChange:f,storeRef:h,isMobile:g,mobileLabel:b,inputClassName:m,translatedPlaceholder:y,required:E,ariaLabel:A,fontWeights:F,colors:w,modeSet:v,showScroll:_,isEmbedded:S,transportMode:B,targets:O,sources:R,geocodingSize:x,filterResults:k,searchContext:j,pathOpts:T,refPoint:N}){const[L]=r.useTranslation(),M={suggestions:[],loading:!1,sources:R,showOwnPlaces:!1,pendingSelection:null,isCleared:!1,renderMobile:!1,value:s,enterPending:!1,isMenuOpen:!1},[I,U]=n.useReducer(Hu,M);n.useEffect(()=>U({type:"RESET",initialState:M}),[s]),n.useEffect(()=>U({type:"RESET_SOURCES",sources:R}),[R]);const q=n.useRef(t);n.useEffect(()=>{h&&h(q.current)},[q.current]);const z=n.useCallback(()=>{const e=!(null!=O&&O.length)||O.includes("Locations"),t=(({targets:e,isLocationSearch:t,isMobile:n,ownPlaces:r,sources:o})=>{const u=!(null!=e&&e.length);let i;return r?(i=["Locations"],(u||e.includes("Stops"))&&i.push("Stops"),(u||e.includes("Stations"))&&i.push("Stations"),(u||e.includes("VehicleRentalStations"))&&i.push("VehicleRentalStations")):u||(i=[...e],!t||n||o.length&&!o.includes("Favourite")||i.push("SelectFromOwnLocations")),i})({targets:O,isLocationSearch:e,isMobile:g,ownPlaces:I.showOwnPlaces,sources:I.sources});((e,t,n,r,o,u,i,s,a,l)=>{s(null),su(e,t,n,r,o,u,i,s,a,l)})(t,I.sources?I.sources.filter(t=>!e||"Favourite"===!t||I.showOwnPlaces||g):I.sources,B,j,k,x,{input:I.value||""},e=>{if(null==e)return void U({type:"FETCH_SUGGESTIONS",loading:!0});const t=(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 t=Wu({},e);return t.properties.labelId=L(e.properties.labelId,{lng:l}),t}return e});U({type:"FETCH_SUGGESTIONS",loading:!1,suggestions:t})},T,N)},[I.value,I.sources,I.showOwnPlaces,O,B,j,k,x,g,l,T,N,t]),H=n.useCallback((e,n)=>{e&&(d?d(e,n):u(e,t),!f||g&&!S||f(),q.current&&q.current.blur())},[g]),V=e=>H(e.selectedItem,e.highlightedIndex),{isOpen:W,highlightedIndex:$,getLabelProps:J,getMenuProps:K,getInputProps:G,getItemProps:X,selectItem:Q,openMenu:Z,closeMenu:Y}=p.useCombobox({inputId:t,inputValue:I.value,defaultHighlightedIndex:0,onInputValueChange:({inputValue:e})=>U({type:"INPUT_CHANGE",value:e}),stateReducer:n.useCallback((e,{type:t,changes:n})=>{switch(t){case p.useCombobox.stateChangeTypes.ItemClick:case p.useCombobox.stateChangeTypes.InputKeyDownEnter:return I.loading?(U({type:"PENDING_ENTER",enterPending:!0}),e):n.selectedItem?"SelectFromOwnLocations"===n.selectedItem.type?(U({type:"SET_SOURCES",sources:["Favourite","Back"],showOwnPlaces:!0,pendingSelection:n.selectedItem.type}),e):"back"===n.selectedItem.type?(U({type:"SET_SOURCES",sources:R,showOwnPlaces:!1,pendingSelection:null}),e):n:n;case p.useCombobox.stateChangeTypes.InputClick:return $u.includes(s)?Wu(Wu({},n),{},{inputValue:"",isOpen:!0}):Wu(Wu({},n),{},{isOpen:!0});case p.useCombobox.stateChangeTypes.InputBlur:return n.selectedItem?Wu(Wu({},n),{},{selectedItem:e.selectItem,inputValue:e.inputValue}):n;case p.useCombobox.stateChangeTypes.InputKeyDownEscape:return Wu(Wu({},n),{},{inputValue:""});default:return n}},[I.loading,s,g]),items:I.suggestions,itemToString:e=>e?Eu(e):"",onSelectedItemChange:V,onIsOpenChange:e=>{e.isOpen&&!I.renderMobile&&U({type:"TOGGLE_MENU",isMobile:g})}}),ee=e=>{U({type:"CLEAR"}),a&&a(t),e.current&&e.current.focus(),Z()};n.useEffect(()=>{!W&&!I.renderMobile||I.value===s&&$u.includes(s)||z(I.value)},[W,I.renderMobile,I.value,z]),n.useEffect(()=>{I.enterPending&&!I.loading&&(H(I.suggestions[0],0),Y())},[I.loading,I.pendingEnter,I.suggestions]);const te={loading:I.loading,isMobile:g,ariaFavouriteString:L("favourite",{lng:l}),fontWeights:F,getAutoSuggestIcons:c,colors:w,modeSet:v},{ariaCurrentSuggestion:ne,ariaRequiredText:re,SearchBarId:oe,ariaLabelText:ue}=(({id:e,ariaLabel:t,lng:n,t:r,isMobile:o,suggestions:u,value:i,required:s})=>{const a=e.replace("searchfield-",""),l=t||r(a,{lng:n}).replace("searchfield-","").concat("."),c=s?`${r("required",{lng:n})}.`:"",d=r(o?"search-autosuggest-label-instructions-mobile":"search-autosuggest-label-instructions-desktop",{lng:n}),p="origin"===e?r("search-autosuggest-label-move-to-destination",{lng:n}):"";return{SearchBarId:l,ariaRequiredText:c,ariaLabelText:d.concat(" ").concat(p),ariaSuggestionLen:r("search-autosuggest-len",{count:u.length,lng:n}),ariaCurrentSuggestion:Au({suggestions:u,t:r,lng:n})||i?r("search-current-suggestion",{lng:n,selection:Au({suggestions:u,t:r,lng:n}).toLowerCase()||i}):""}})({id:t,lng:l,t:L,isMobile:g,ariaLabel:A,suggestions:I.suggestions,value:I.value,required:E});return n.useEffect(()=>{I.renderMobile||W||U({type:"RESET",initialState:M})},[I.renderMobile,W]),C.default.createElement(C.default.Fragment,null,g&&C.default.createElement(Uu,{placeholder:L(o,{lng:l}),fontWeights:F,clearOldSearches:()=>{const{context:e,clearOldSearches:t,clearFutureRoutes:n}=j;e&&t&&(t(e),n&&n(e),z(I.value))},appElement:e,mobileLabel:b||L(t,{lng:l}),ariaProps:{ariaCurrentSuggestion:ne,SearchBarId:oe,ariaRequiredText:re},id:t,lng:l,onSelectedItemChange:V,value:I.value,clearInput:ee,suggestionProps:te,showScroll:!!_,colors:w,inputClassName:m,required:E,state:I,dispatch:U}),C.default.createElement("div",{className:D.default(cu["autosuggest-input-container"],cu[t],I.renderMobile&&"hidden"),style:{"--color":w.primary,"--hover-color":w.hover}},i&&C.default.createElement("div",{className:D.default(cu["autosuggest-input-icon"],cu[t],m&&cu[`${m}-input-icon`]),"aria-label":re.concat(" ").concat(oe).concat(" ").concat(L("search-autosuggest-label",{lng:l}))},C.default.createElement(P.default,{img:`${i}`})),C.default.createElement(Lu,{inputClassName:m,ariaLabel:ne.concat(" ").concat(re).concat(" ").concat(oe).concat(" ").concat(ue),id:t,lng:l,getInputProps:G,getLabelProps:J,selectItem:Q,value:I.value,clearInput:ee,inputRef:q,styles:cu,clearButtonColor:w.primary,placeholder:y||L(o,{lng:l}),required:E,transportMode:B,isMobile:g,inputOnBlur:()=>{U({isMobile:g,value:!g&&s,type:"INPUT_BLUR"}),g||U({type:"RESET",initialState:M})}}),C.default.createElement(Tu,Object.assign({hidden:!W||!I.suggestions.length||g,highlightedIndex:$,getItemProps:X,getMenuProps:K,suggestions:I.suggestions,lng:l,styles:cu},te))))}"production"!==process.env.NODE_ENV&&(Ju.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}),Ju.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:f.defaultColors,required:!1,modeSet:void 0,showScroll:!1,refPoint:{}};e.default=e=>C.default.createElement(r.I18nextProvider,{i18n:au},C.default.createElement(Ju,e)),Object.defineProperty(e,"__esModule",{value:!0})});
3
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZGV2ZWxvcG1lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Qcm9wZXJ0eUtleS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1ByaW1pdGl2ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXRydS1lcS9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWlzLWR1cGxpY2F0ZS9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWhlbHBlcnMvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1maWx0ZXItbWF0Y2hpbmctdG8taW5wdXQvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1nZW9jb2RpbmctcmVzdWx0cy9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYmluZC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWdlb2NvZGluZy1yZXN1bHRzL25vZGVfbW9kdWxlcy9heGlvcy9saWIvdXRpbHMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1nZW9jb2RpbmctcmVzdWx0cy9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3NFcnJvci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWdlb2NvZGluZy1yZXN1bHRzL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy90b0Zvcm1EYXRhLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL0F4aW9zVVJMU2VhcmNoUGFyYW1zLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2J1aWxkVVJMLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0ludGVyY2VwdG9yTWFuYWdlci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWdlb2NvZGluZy1yZXN1bHRzL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZGVmYXVsdHMvdHJhbnNpdGlvbmFsLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9icm93c2VyL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9icm93c2VyL2NsYXNzZXMvVVJMU2VhcmNoUGFyYW1zLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9icm93c2VyL2NsYXNzZXMvRm9ybURhdGEuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1nZW9jb2RpbmctcmVzdWx0cy9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2Jyb3dzZXIvY2xhc3Nlcy9CbG9iLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9jb21tb24vdXRpbHMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1nZW9jb2RpbmctcmVzdWx0cy9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2Zvcm1EYXRhVG9KU09OLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9kZWZhdWx0cy9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWdlb2NvZGluZy1yZXN1bHRzL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy90b1VSTEVuY29kZWRGb3JtLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3BhcnNlSGVhZGVycy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWdlb2NvZGluZy1yZXN1bHRzL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9BeGlvc0hlYWRlcnMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1nZW9jb2RpbmctcmVzdWx0cy9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvdHJhbnNmb3JtRGF0YS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWdlb2NvZGluZy1yZXN1bHRzL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL2lzQ2FuY2VsLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWdlb2NvZGluZy1yZXN1bHRzL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9zZXR0bGUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1nZW9jb2RpbmctcmVzdWx0cy9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcHJvZ3Jlc3NFdmVudFJlZHVjZXIuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1nZW9jb2RpbmctcmVzdWx0cy9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvc3BlZWRvbWV0ZXIuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1nZW9jb2RpbmctcmVzdWx0cy9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdGhyb3R0bGUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1nZW9jb2RpbmctcmVzdWx0cy9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2Nvb2tpZXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1nZW9jb2RpbmctcmVzdWx0cy9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvYnVpbGRGdWxsUGF0aC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWdlb2NvZGluZy1yZXN1bHRzL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0Fic29sdXRlVVJMLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2NvbWJpbmVVUkxzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL21lcmdlQ29uZmlnLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3Jlc29sdmVDb25maWcuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1nZW9jb2RpbmctcmVzdWx0cy9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2FkYXB0ZXJzL3hoci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWdlb2NvZGluZy1yZXN1bHRzL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9wYXJzZVByb3RvY29sLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2NvbXBvc2VTaWduYWxzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3RyYWNrU3RyZWFtLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9hZGFwdGVycy9mZXRjaC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWdlb2NvZGluZy1yZXN1bHRzL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYWRhcHRlcnMvYWRhcHRlcnMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1nZW9jb2RpbmctcmVzdWx0cy9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvbnVsbC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWdlb2NvZGluZy1yZXN1bHRzL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9kaXNwYXRjaFJlcXVlc3QuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1nZW9jb2RpbmctcmVzdWx0cy9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2Vudi9kYXRhLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3ZhbGlkYXRvci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWdlb2NvZGluZy1yZXN1bHRzL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9BeGlvcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWdlb2NvZGluZy1yZXN1bHRzL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL0NhbmNlbFRva2VuLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL0h0dHBTdGF0dXNDb2RlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9heGlvcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWdlb2NvZGluZy1yZXN1bHRzL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9zcHJlYWQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1nZW9jb2RpbmctcmVzdWx0cy9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNBeGlvc0Vycm9yLmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtc2VyaWFsaXplL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1nZW9jb2RpbmctcmVzdWx0cy9ub2RlX21vZHVsZXMvQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1qc29uL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2JpbmQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3V0aWxzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3BhcnNlSGVhZGVycy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9zYW5pdGl6ZUhlYWRlclZhbHVlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0F4aW9zSGVhZGVycy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9BeGlvc0Vycm9yLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3RvRm9ybURhdGEuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvQXhpb3NVUkxTZWFyY2hQYXJhbXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYnVpbGRVUkwuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvSW50ZXJjZXB0b3JNYW5hZ2VyLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9kZWZhdWx0cy90cmFuc2l0aW9uYWwuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2Jyb3dzZXIvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2Jyb3dzZXIvY2xhc3Nlcy9VUkxTZWFyY2hQYXJhbXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2Jyb3dzZXIvY2xhc3Nlcy9Gb3JtRGF0YS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vYnJvd3Nlci9jbGFzc2VzL0Jsb2IuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2NvbW1vbi91dGlscy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vaW5kZXguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvZm9ybURhdGFUb0pTT04uanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2RlZmF1bHRzL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3RvVVJMRW5jb2RlZEZvcm0uanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvdHJhbnNmb3JtRGF0YS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL2lzQ2FuY2VsLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9zZXR0bGUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcHJvZ3Jlc3NFdmVudFJlZHVjZXIuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvc3BlZWRvbWV0ZXIuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdGhyb3R0bGUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2Nvb2tpZXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvYnVpbGRGdWxsUGF0aC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0Fic29sdXRlVVJMLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2NvbWJpbmVVUkxzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL21lcmdlQ29uZmlnLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3Jlc29sdmVDb25maWcuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2FkYXB0ZXJzL3hoci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9wYXJzZVByb3RvY29sLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2NvbXBvc2VTaWduYWxzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3RyYWNrU3RyZWFtLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9lbnYvZGF0YS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYWRhcHRlcnMvZmV0Y2guanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvZXN0aW1hdGVEYXRhVVJMRGVjb2RlZEJ5dGVzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9hZGFwdGVycy9hZGFwdGVycy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9udWxsLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL2Rpc3BhdGNoUmVxdWVzdC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy92YWxpZGF0b3IuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3MuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9DYW5jZWxUb2tlbi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9IdHRwU3RhdHVzQ29kZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYXhpb3MuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvc3ByZWFkLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzQXhpb3NFcnJvci5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWV4ZWN1dGUtc2VhcmNoLWltbWlkaWF0ZS9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1qc29uL2luZGV4LmpzIiwiLi4vc3JjL3V0aWxzL2kxOG4uanMiLCIuLi9zcmMvdXRpbHMvdHJhbnNsYXRpb25zLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWluamVjdC9kaXN0L3N0eWxlLWluamVjdC5lcy5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXVuaXEtYnktbGFiZWwvaW5kZXguanMiLCIuLi9zcmMvdXRpbHMvdXRpbHMuanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtbGFiZWwvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGhzbC1maS9ob29rcy9saWIvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZS5qcyIsIi4uL3NyYy9jb21wb25lbnRzL1N1Z2dlc3Rpb25zLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvQ2xlYXJCdXR0b24uanMiLCIuLi9zcmMvY29tcG9uZW50cy9JbnB1dC5qcyIsIi4uL3NyYy9jb21wb25lbnRzL01vYmlsZVZpZXcuanMiLCIuLi9zcmMvdXRpbHMvc2VhcmNoUmVkdWNlci5qcyIsIi4uL3NyYy9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBfdHlwZW9mKG8pIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gdHlwZW9mIG87XG4gIH0gOiBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvO1xuICB9LCBfdHlwZW9mKG8pO1xufVxuZXhwb3J0IHsgX3R5cGVvZiBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5pbXBvcnQgdG9QcmltaXRpdmUgZnJvbSBcIi4vdG9QcmltaXRpdmUuanNcIjtcbmZ1bmN0aW9uIHRvUHJvcGVydHlLZXkodCkge1xuICB2YXIgaSA9IHRvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpO1xuICByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiO1xufVxuZXhwb3J0IHsgdG9Qcm9wZXJ0eUtleSBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5mdW5jdGlvbiB0b1ByaW1pdGl2ZSh0LCByKSB7XG4gIGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0O1xuICB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTtcbiAgaWYgKHZvaWQgMCAhPT0gZSkge1xuICAgIHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpO1xuICAgIGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTtcbiAgfVxuICByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpO1xufVxuZXhwb3J0IHsgdG9QcmltaXRpdmUgYXMgZGVmYXVsdCB9OyIsImltcG9ydCB0b1Byb3BlcnR5S2V5IGZyb20gXCIuL3RvUHJvcGVydHlLZXkuanNcIjtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7XG4gIHJldHVybiAociA9IHRvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwge1xuICAgIHZhbHVlOiB0LFxuICAgIGVudW1lcmFibGU6ICEwLFxuICAgIGNvbmZpZ3VyYWJsZTogITAsXG4gICAgd3JpdGFibGU6ICEwXG4gIH0pIDogZVtyXSA9IHQsIGU7XG59XG5leHBvcnQgeyBfZGVmaW5lUHJvcGVydHkgYXMgZGVmYXVsdCB9OyIsIi8qKlxuICogIGFjY2VwdCBlcXVhbGl0eSBvZiBub24gbnVsbGlzaCB2YWx1ZXNcbiAqXG4gKiBAbmFtZSB0cnVFcVxuICogQHBhcmFtIHtCb29sZWFufE51bWJlcnxCaWdJbnR8U3RyaW5nfFN5bWJvbHxPYmplY3R9IHZhbDEgRmlyc3QgdmFsdWUgdG8gYmUgY29tcGFyZWRcbiAqIEBwYXJhbSB7Qm9vbGVhbnxOdW1iZXJ8QmlnSW50fFN0cmluZ3xTeW1ib2x8T2JqZWN0fSBwYXJhbTIgU2Vjb25kIHZhbHVlIHRvIGJlIGNvbXBhcmVkXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZS9mYWxzZVxuICogQGV4YW1wbGVcbiAqIGRpZ2l0cmFuc2l0LXV0aWwudHJ1RXEoJzInLCAnMicpO1xuICogLy89dHJ1ZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0cnVFcSh2YWwxLCB2YWwyKSB7XG4gIHJldHVybiB2YWwxICYmIHZhbDIgJiYgdmFsMSA9PT0gdmFsMjtcbn1cbiIsImltcG9ydCB0cnVFcSBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtdHJ1LWVxJztcbi8qKlxuICogQ2hlY2tzIHRoYXQgaXMgaXRlbXMgZHVwbGljYXRlXG4gKlxuICogQG5hbWUgaXNEdXBsaWNhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBpdGVtMSBPYmplY3QgY29udGFpbmluZyBmb2xsb3dpbmcgYXR0cmlidXRlczpcbiAqIHtcbiAqICBwcm9wZXJ0aWVzIHtcbiAqICAgICAgZ3Rmc0lkOiBTdHJpbmdcbiAqICAgICAgZ2lkOiBTdHJpbmcgZnJvbSBnZW9jb2RlclxuICogICAgICBuYW1lOiBTdHJpbmdcbiAqICAgICAgbGFiZWw6IFN0cmluZ1xuICogICAgICAgYWRkcmVzczogU3RyaW5nXG4gKiAgICAgIGdlb21ldHJ5IHtcbiAqICAgICAgICAgY29vcmRpbmF0ZXMgW051bWJlciBsYXQsIE51bWJlciBsb25dXG4gKiAgICAgIH1cbiAqICB9XG4gKiB9XG4gKiBAcGFyYW0ge09iamVjdH0gaXRlbTIgT2JqZWN0IHdpdGggc2FtZSBhdHRyaWJ1dGVzIGFzIGl0ZW0xXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZS9mYWxzZVxuICogQGV4YW1wbGVcbiAqIGRpZ2l0cmFuc2l0LXV0aWwuaXNEdXBsaWNhdGUocGFyYW0xLCBwYXJhbTIpO1xuICogLy89dHJ1ZVxuICovXG5cbmNvbnN0IGd0ZnNTdG9wTGF5ZXJzID0gWydzdG9wJywgJ3N0YXRpb24nLCAnZmF2b3VyaXRlU3RvcCcsICdmYXZvdXJpdGVTdGF0aW9uJ107XG5jb25zdCB2ZWhpY2xlUmVudGFsTGF5ZXJzID0gWydmYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbicsICdiaWtlc3RhdGlvbiddO1xuXG5mdW5jdGlvbiBsYWJlbElkVG9HaWQoaWQpIHtcbiAgaWYgKCFpZCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICBjb25zdCBwYXJ0cyA9IGlkLnNwbGl0KCc6Jyk7XG4gIGlmIChwYXJ0cy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgcmV0dXJuIGBjaXR5YmlrZXMke3BhcnRzWzBdfTpiaWtlc3RhdGlvbjoke3BhcnRzWzFdfWA7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzRHVwbGljYXRlKGl0ZW0xLCBpdGVtMikge1xuICBjb25zdCBwcm9wczEgPSBpdGVtMS5wcm9wZXJ0aWVzO1xuICBjb25zdCBwcm9wczIgPSBpdGVtMi5wcm9wZXJ0aWVzO1xuXG4gIGlmIChpdGVtMS50eXBlID09PSAnRnV0dXJlUm91dGUnICYmIGl0ZW0yLnR5cGUgPT09ICdGdXR1cmVSb3V0ZScpIHtcbiAgICBjb25zdCBvMSA9IHByb3BzMS5vcmlnaW47XG4gICAgY29uc3QgZDEgPSBwcm9wczEuZGVzdGluYXRpb247XG4gICAgY29uc3QgbzIgPSBwcm9wczIub3JpZ2luO1xuICAgIGNvbnN0IGQyID0gcHJvcHMyLmRlc3RpbmF0aW9uO1xuXG4gICAgY29uc3QgbmFtZTEgPSBgJHtvMS5uYW1lfS8vJHtvMS5sb2NhbGFkbWlufS8vJHtkMS5uYW1lfS8vJHtkMS5sb2NhbGFkbWlufWA7XG4gICAgY29uc3QgbmFtZTIgPSBgJHtvMi5uYW1lfS8vJHtvMi5sb2NhbGFkbWlufS8vJHtkMi5uYW1lfS8vJHtkMi5sb2NhbGFkbWlufWA7XG5cbiAgICByZXR1cm4gbmFtZTEgPT09IG5hbWUyO1xuICB9XG4gIGlmIChpdGVtMS50eXBlID09PSAnRnV0dXJlUm91dGUnIHx8IGl0ZW0yLnR5cGUgPT09ICdGdXR1cmVSb3V0ZScpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKFxuICAgIHZlaGljbGVSZW50YWxMYXllcnMuaW5jbHVkZXMocHJvcHMxLmxheWVyKSAmJlxuICAgIHZlaGljbGVSZW50YWxMYXllcnMuaW5jbHVkZXMocHJvcHMyLmxheWVyKVxuICApIHtcbiAgICBjb25zdCBpZDEgPSBwcm9wczEuZ2lkIHx8IGxhYmVsSWRUb0dpZChwcm9wczEubGFiZWxJZCk7XG4gICAgY29uc3QgaWQyID0gcHJvcHMyLmdpZCB8fCBsYWJlbElkVG9HaWQocHJvcHMyLmxhYmVsSWQpO1xuICAgIHJldHVybiBpZDEgPT09IGlkMjtcbiAgfVxuICBpZiAocHJvcHMxLmd0ZnNJZCAmJiBwcm9wczIuZ3Rmc0lkKSB7XG4gICAgcmV0dXJuIHByb3BzMS5ndGZzSWQgPT09IHByb3BzMi5ndGZzSWQ7XG4gIH1cbiAgaWYgKFxuICAgIGd0ZnNTdG9wTGF5ZXJzLmluY2x1ZGVzKHByb3BzMS5sYXllcikgJiZcbiAgICBndGZzU3RvcExheWVycy5pbmNsdWRlcyhwcm9wczIubGF5ZXIpICYmXG4gICAgcHJvcHMxLmdpZCAmJlxuICAgIHByb3BzMi5naWRcbiAgKSB7XG4gICAgcmV0dXJuIHByb3BzMS5naWQgPT09IHByb3BzMi5naWQ7XG4gIH1cblxuICBjb25zdCBwMSA9IGl0ZW0xICYmIGl0ZW0xLmdlb21ldHJ5ID8gaXRlbTEuZ2VvbWV0cnkuY29vcmRpbmF0ZXMgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IHAyID0gaXRlbTIgJiYgaXRlbTIuZ2VvbWV0cnkgPyBpdGVtMi5nZW9tZXRyeS5jb29yZGluYXRlcyA6IHVuZGVmaW5lZDtcblxuICBpZiAocDEgJiYgcDIpIHtcbiAgICAvLyBib3RoIGhhdmUgZ2VvbWV0cnlcbiAgICBpZiAoTWF0aC5hYnMocDFbMF0gLSBwMlswXSkgPCAxZS02ICYmIE1hdGguYWJzKHAxWzFdIC0gcDJbMV0pIDwgMWUtNikge1xuICAgICAgLy8gbG9jYXRpb24gbWF0Y2ggaXMgbm90IGVub3VnaC4gUmVxdWlyZSBhIGNvbW1vbiBwcm9wZXJ0eVxuICAgICAgaWYgKFxuICAgICAgICB0cnVFcShwcm9wczEubmFtZSwgcHJvcHMyLm5hbWUpIHx8XG4gICAgICAgIHRydUVxKHByb3BzMS5sYWJlbCwgcHJvcHMyLmxhYmVsKSB8fFxuICAgICAgICB0cnVFcShwcm9wczEuYWRkcmVzcywgcHJvcHMyLmFkZHJlc3MpIHx8XG4gICAgICAgIHRydUVxKHByb3BzMS5hZGRyZXNzLCBwcm9wczIubGFiZWwpIHx8XG4gICAgICAgIHRydUVxKHByb3BzMS5sYWJlbCwgcHJvcHMyLmFkZHJlc3MpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbiIsImltcG9ydCBpc1N0cmluZyBmcm9tICdsb2Rhc2gvaXNTdHJpbmcnO1xuaW1wb3J0IG9yZGVyQnkgZnJvbSAnbG9kYXNoL29yZGVyQnknO1xuaW1wb3J0IHVuaXFXaXRoIGZyb20gJ2xvZGFzaC91bmlxV2l0aCc7XG5pbXBvcnQgaXNEdXBsaWNhdGUgZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWlzLWR1cGxpY2F0ZSc7XG5cbmNvbnN0IG5vcm1hbGl6ZSA9IHN0ciA9PiB7XG4gIGlmICghaXNTdHJpbmcoc3RyKSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICByZXR1cm4gc3RyLnRvTG93ZXJDYXNlKCk7XG59O1xuXG5jb25zdCBzcGxpdFNob3J0TmFtZUF0TGV0dGVycyA9IHN0ciA9PiB7XG4gIHJldHVybiBzdHIuc3BsaXQoLyhcXHB7TH0rKS91KTtcbn07XG5cbmNvbnN0IHRlc3RTaG9ydE5hbWVNYXRjaGVzTGluZVdpdGhOdW1iZXJzQW5kTGV0dGVycyA9IHN0ciA9PiB7XG4gIHJldHVybiAvXlswLTldK1xccHtMfSskL3UudGVzdChzdHIpO1xufTtcblxuLyoqXG4gKiBMYXllclR5cGUgZGVwaWN0cyB0aGUgdHlwZSBvZiB0aGUgcG9pbnQtb2YtaW50ZXJlc3QuXG4gKi9cbmNvbnN0IExheWVyVHlwZSA9IHtcbiAgQWRkcmVzczogJ2FkZHJlc3MnLFxuICBCYWNrOiAnYmFjaycsXG4gIEN1cnJlbnRQb3NpdGlvbjogJ2N1cnJlbnRQb3NpdGlvbicsXG4gIEZhdm91cml0ZVN0b3A6ICdmYXZvdXJpdGVTdG9wJyxcbiAgRmF2b3VyaXRlU3RhdGlvbjogJ2Zhdm91cml0ZVN0YXRpb24nLFxuICBGYXZvdXJpdGVQbGFjZTogJ2Zhdm91cml0ZVBsYWNlJyxcbiAgRmF2b3VyaXRlUm91dGU6ICdmYXZvdXJpdGVSb3V0ZScsXG4gIEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uOiAnZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb24nLFxuICBGdXR1cmVSb3V0ZTogJ2Z1dHVyZVJvdXRlJyxcbiAgU3RhdGlvbjogJ3N0YXRpb24nLFxuICBTZWxlY3RGcm9tTWFwOiAnc2VsZWN0RnJvbU1hcCcsXG4gIFNlbGVjdEZyb21Pd25Mb2NhdGlvbnM6ICdvd25Mb2NhdGlvbnMnLFxuICBTdG9wOiAnc3RvcCcsXG4gIFN0cmVldDogJ3N0cmVldCcsXG4gIFZlbnVlOiAndmVudWUnLFxuICBWZWhpY2xlUmVudGFsU3RhdGlvbjogJ2Jpa2VzdGF0aW9uJyxcbiAgQ2FyUGFyazogJ2NhcnBhcmsnLFxuICBCaWtlUGFyazogJ2Jpa2VwYXJrJyxcbn07XG5leHBvcnQgY29uc3QgaXNTdG9wID0gKHsgbGF5ZXIsIHR5cGUgfSkgPT5cbiAgbGF5ZXIgPT09ICdzdG9wJyB8fFxuICBsYXllciA9PT0gJ2Zhdm91cml0ZVN0b3AnIHx8XG4gIHR5cGUgPT09ICdzdG9wJyB8fFxuICB0eXBlID09PSAnZmF2b3VyaXRlU3RvcCc7XG5cbmNvbnN0IERFRkFVTFRfUk9VVEVTX1BSRUZJWCA9ICdsaW5qYXQnO1xuY29uc3QgREVGQVVMVF9TVE9QU19QUkVGSVggPSAncHlzYWtpdCc7XG5cbmV4cG9ydCBjb25zdCBtYXBSb3V0ZSA9IChpdGVtLCBwYXRoT3B0cykgPT4ge1xuICBpZiAoaXRlbSA9PT0gbnVsbCB8fCBpdGVtID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IG9wdHMgPSBwYXRoT3B0cyB8fCB7fTtcblxuICBjb25zdCByb3V0ZXNQcmVmaXggPSBvcHRzLnJvdXRlc1ByZWZpeCB8fCBERUZBVUxUX1JPVVRFU19QUkVGSVg7XG4gIGNvbnN0IHN0b3BzUHJlZml4ID0gb3B0cy5zdG9wc1ByZWZpeCB8fCBERUZBVUxUX1NUT1BTX1BSRUZJWDtcblxuICBjb25zdCBsaW5rID0gYC8ke3JvdXRlc1ByZWZpeH0vJHtlbmNvZGVVUklDb21wb25lbnQoXG4gICAgaXRlbS5ndGZzSWQsXG4gICl9LyR7c3RvcHNQcmVmaXh9YDtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnUm91dGUnLFxuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIC4uLml0ZW0sXG4gICAgICBsYXllcjogYHJvdXRlLSR7aXRlbS5tb2RlfWAsXG4gICAgICBsaW5rLFxuICAgIH0sXG4gICAgZ2VvbWV0cnk6IHtcbiAgICAgIGNvb3JkaW5hdGVzOiBudWxsLFxuICAgIH0sXG4gIH07XG59O1xuXG4vKipcbiAqIFRyaWVzIHRvIG1hdGNoIHRoZSBnaXZlbiBzZWFyY2ggdGVybSBhZ2FpbnMgdGhlIGNvbGxlY3Rpb24gb2YgcHJvcGVydGllc1xuICogZm9yIGEgZ2VvY29kaW5nIHJlc3VsdCAobWluOiAwLCBtYXg6IDEuNSkuIFRoZSBiZXN0IG1hdGNoIHdpbGwgcmV0dXJuIGEgbnVtYmVyIG9mIDEuNS5cbiAqIFdvcnNlIG1hdGNoZXMgd2lsbCByZXR1cm4gMCBvciAwLjUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5vcm1hbGl6ZWRUZXJtIHRoZSBub3JtYWxpemVkIHNlYXJjaCB0ZXJtLlxuICogQHBhcmFtIHsqfSByZXN1bHRQcm9wZXJ0aWVzIHRoZSBnZW9jb2RpbmcgcmVzdWx0J3MgcHJvcGVydHkgY29sbGVjdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IG1hdGNoID0gKG5vcm1hbGl6ZWRUZXJtLCByZXN1bHRQcm9wZXJ0aWVzKSA9PiB7XG4gIGlmICghaXNTdHJpbmcobm9ybWFsaXplZFRlcm0pIHx8IG5vcm1hbGl6ZWRUZXJtLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgY29uc3QgbWF0Y2hQcm9wcyA9IFsnbmFtZScsICdsYWJlbCcsICdhZGRyZXNzJywgJ3Nob3J0TmFtZSddO1xuICByZXR1cm4gbWF0Y2hQcm9wc1xuICAgIC5tYXAobmFtZSA9PiB7XG4gICAgICByZXR1cm4geyBuYW1lLCB2YWx1ZTogcmVzdWx0UHJvcGVydGllc1tuYW1lXSB9O1xuICAgIH0pXG4gICAgLmZpbHRlcihlbGVtZW50ID0+IGlzU3RyaW5nKGVsZW1lbnQudmFsdWUpICYmIGVsZW1lbnQudmFsdWUubGVuZ3RoID4gMClcbiAgICAubWFwKGVsZW1lbnQgPT4ge1xuICAgICAgbGV0IG5vcm1hbGl6ZWRWYWx1ZSA9IG5vcm1hbGl6ZShlbGVtZW50LnZhbHVlKTtcbiAgICAgIGlmIChub3JtYWxpemVkVmFsdWUuaW5kZXhPZihub3JtYWxpemVkVGVybSkgPT09IDApIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGVsZW1lbnQubmFtZSA9PT0gJ3Nob3J0TmFtZScgJiZcbiAgICAgICAgICB0ZXN0U2hvcnROYW1lTWF0Y2hlc0xpbmVXaXRoTnVtYmVyc0FuZExldHRlcnMobm9ybWFsaXplZFZhbHVlKVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBJZiB0aGUgc2hvcnROYW1lIGlzIG9mIGEgY2VydGFpbiBmb3JtYXQgKGUuZy4gODlBKSwgaXQgaXMgdHJlYXRlZCBoZXJlXG4gICAgICAgICAgLy8gYXMgaWYgaXQgaGFkIHRoZSBsZW5ndGggb2YgdGhlIG51bWJlcnMgd2l0aCB0aGUgbGV0dGVycyByZW1vdmVkLlxuICAgICAgICAgIC8vIFNvIHRoZSBsZW5ndGggb2YgODlBIHdvdWxkIGJlIHRyZWF0ZWQgYXMgMi5cbiAgICAgICAgICBbbm9ybWFsaXplZFZhbHVlXSA9IHNwbGl0U2hvcnROYW1lQXRMZXR0ZXJzKG5vcm1hbGl6ZWRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZnVsbCBtYXRjaCBhdCBzdGFydC4gUmV0dXJuIG1heCByZXN1bHQgd2hlbiBtYXRjaCBpcyBmdWxsLCBub3Qgb25seSBwYXJ0aWFsXG4gICAgICAgIHJldHVybiAwLjUgKyBub3JtYWxpemVkVGVybS5sZW5ndGggLyBub3JtYWxpemVkVmFsdWUubGVuZ3RoO1xuICAgICAgfVxuICAgICAgLy8gYmVjYXVzZSBvZiBmaWx0ZXJtYXRjaGluZ3RvaW5wdXQsIHdlIGtub3cgdGhhdCBtYXRjaCBvY2N1cnJlZCBzb21ld2hlcmVcbiAgICAgIC8vIGRvbid0IHJ1biBmaWx0ZXJtYXRjaGluZyBhZ2FpbiBidXQgZXN0aW1hdGUgcm91Z2hseTpcbiAgICAgIC8vIHRoZSBsb25nZXIgdGhlIG1hdGNoaW5nIHN0cmluZywgdGhlIGJldHRlciBjb25maWRlbmNlLCBtYXggYmVpbmcgMC41XG4gICAgICByZXR1cm4gKDAuNSAqIG5vcm1hbGl6ZWRUZXJtLmxlbmd0aCkgLyAobm9ybWFsaXplZFRlcm0ubGVuZ3RoICsgMSk7XG4gICAgfSlcbiAgICAucmVkdWNlKFxuICAgICAgKHByZXZpb3VzLCBjdXJyZW50KSA9PiAoY3VycmVudCA+IHByZXZpb3VzID8gY3VycmVudCA6IHByZXZpb3VzKSxcbiAgICAgIDAsXG4gICAgKTtcbn07XG5cbi8qKlxuICogUmFua3MgdGhlIHJlc3VsdCBiYXNlZCBvbiBpdHMgbGF5ZXIgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGxheWVyIHRoZSBsYXllciBwcm9wZXJ0eS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgdGhlIHNvdXJjZSBwcm9wZXJ0eS5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldExheWVyUmFuayA9IChsYXllciwgc291cmNlKSA9PiB7XG4gIHN3aXRjaCAobGF5ZXIpIHtcbiAgICBjYXNlIExheWVyVHlwZS5DdXJyZW50UG9zaXRpb246XG4gICAgICByZXR1cm4gMTtcbiAgICBjYXNlIExheWVyVHlwZS5CYWNrOlxuICAgICAgcmV0dXJuIDAuOTtcbiAgICBjYXNlIExheWVyVHlwZS5TZWxlY3RGcm9tTWFwOlxuICAgICAgcmV0dXJuIDAuODtcbiAgICBjYXNlIExheWVyVHlwZS5TZWxlY3RGcm9tT3duTG9jYXRpb25zOlxuICAgICAgcmV0dXJuIDAuNzk7XG4gICAgY2FzZSBMYXllclR5cGUuRmF2b3VyaXRlU3RhdGlvbjpcbiAgICBjYXNlIExheWVyVHlwZS5GYXZvdXJpdGVQbGFjZTpcbiAgICBjYXNlIExheWVyVHlwZS5GYXZvdXJpdGVTdG9wOlxuICAgIGNhc2UgTGF5ZXJUeXBlLkZhdm91cml0ZVJvdXRlOlxuICAgIGNhc2UgTGF5ZXJUeXBlLkZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uOlxuICAgICAgcmV0dXJuIDAuNDU7XG4gICAgY2FzZSBMYXllclR5cGUuRnV0dXJlUm91dGU6XG4gICAgICByZXR1cm4gMC40NDtcbiAgICBjYXNlIExheWVyVHlwZS5TdGF0aW9uOiB7XG4gICAgICBpZiAoaXNTdHJpbmcoc291cmNlKSAmJiBzb3VyY2UuaW5kZXhPZignZ3RmcycpID09PSAwKSB7XG4gICAgICAgIHJldHVybiAwLjQzO1xuICAgICAgfVxuICAgICAgcmV0dXJuIDAuNDI7XG4gICAgfVxuICAgIGNhc2UgTGF5ZXJUeXBlLkNhclBhcms6XG4gICAgICByZXR1cm4gMC4zODtcbiAgICBjYXNlIExheWVyVHlwZS5CaWtlUGFyazpcbiAgICAgIHJldHVybiAwLjM4O1xuICAgIGNhc2UgTGF5ZXJUeXBlLlZlaGljbGVSZW50YWxTdGF0aW9uOlxuICAgICAgcmV0dXJuIDAuMzg7XG4gICAgY2FzZSBMYXllclR5cGUuU3RvcDpcbiAgICAgIHJldHVybiAwLjM2O1xuICAgIGRlZmF1bHQ6XG4gICAgICAvLyB2ZW51ZSwgYWRkcmVzcywgc3RyZWV0LCByb3V0ZS14eHhcbiAgICAgIHJldHVybiAwLjQxO1xuICB9XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byBzb3J0IHRoZSByZXN1bHRzLiBPcmRlcnMgYXMgZm9sbG93czpcbiAqICAtIGN1cnJlbnQgcG9zaXRpb24gZmlyc3QgZm9yIGFuIGVtcHR5IHNlYXJjaFxuICogIC0gbWF0Y2hpbmcgcm91dGVzIGZpcnN0XG4gKiAgLSBvdGhlcndpc2UgYnkgY29uZmlkZW5jZSwgZXhjZXB0IHRoYXQ6XG4gKiAgICAtIGJvb3N0IHdlbGwgbWF0Y2hpbmcgc3RhdGlvbnMgKGVzcGVjaWFsbHkgZnJvbSBHVEZTKVxuICogICAgLSByYW5rIHN0b3BzIGxvd2VyIGFzIHRoZXkgdGVuZCB0byBvY2N1cHkgbW9zdCBvZiB0aGUgc2VhcmNoIHJlc3VsdHNcbiAqICAtIGl0ZW1zIHdpdGggbm8gY29uZmlkZW5jZSAob2xkIHNlYXJjaGVzIGFuZCBmYXZvcml0ZXMpOlxuICogICAgLSByYW5rIGZhdm91cml0ZXMgYmV0dGVyIHRoYW4gb3JkaW5hcnkgb2xkIHNlYXJjaGVzXG4gKiAgICAtIHJhbmsgZnVsbCBtYXRjaCBiZXR0ZXIgdGhhbiBwYXJ0aWFsIG1hdGNoXG4gKiAgICAtIHJhbmsgbWF0Y2ggYXQgbWlkZGxlIHdvcmQgbG93ZXIgdGhhbiBtYXRjaCBhdCB0aGUgYmVnaW5uaW5nXG4gKiAgICAtIHJhbmsgYmlrZSByZW50YWwgc3RhdGlvbnMgbG93ZXJcbiAqIEBwYXJhbSB7KltdfSByZXN1bHRzIFRoZSBzZWFyY2ggcmVzdWx0cyB0aGF0IHdlcmUgcmVjZWl2ZWRcbiAqIEBwYXJhbSB7U3RyaW5nfSB0ZXJtIFRoZSBzZWFyY2ggdGVybSB0aGF0IHdhcyB1c2VkXG4gKi9cbmV4cG9ydCBjb25zdCBzb3J0U2VhcmNoUmVzdWx0cyA9IChsaW5lUmVnZXhwLCByZXN1bHRzLCB0ZXJtID0gJycpID0+IHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHJlc3VsdHMpIHx8ICFyZXN1bHRzLmxlbmd0aCkge1xuICAgIHJldHVybiByZXN1bHRzO1xuICB9XG4gIGNvbnN0IGlzTGluZUlkZW50aWZpZXIgPSB2YWx1ZSA9PlxuICAgIGlzU3RyaW5nKHZhbHVlKSAmJiBsaW5lUmVnZXhwICYmIGxpbmVSZWdleHAudGVzdCh2YWx1ZSk7XG5cbiAgY29uc3Qgbm9ybWFsaXplZFRlcm0gPSBub3JtYWxpemUodGVybSk7XG4gIGNvbnN0IGlzTGluZVNlYXJjaCA9IGlzTGluZUlkZW50aWZpZXIobm9ybWFsaXplZFRlcm0pO1xuXG4gIGNvbnN0IG9yZGVyZWRSZXN1bHRzID0gb3JkZXJCeShcbiAgICByZXN1bHRzLmZpbHRlcihyID0+IHIpLFxuICAgIFtcbiAgICAgIC8vIHJhbmsgbWF0Y2hpbmcgcm91dGVzIGJlc3RcbiAgICAgIHJlc3VsdCA9PlxuICAgICAgICBpc0xpbmVTZWFyY2ggJiZcbiAgICAgICAgaXNMaW5lSWRlbnRpZmllcihub3JtYWxpemUocmVzdWx0LnByb3BlcnRpZXMuc2hvcnROYW1lKSkgJiZcbiAgICAgICAgbm9ybWFsaXplKHJlc3VsdC5wcm9wZXJ0aWVzLnNob3J0TmFtZSkuaW5kZXhPZihub3JtYWxpemVkVGVybSkgPT09IDBcbiAgICAgICAgICA/IDFcbiAgICAgICAgICA6IDAsXG5cbiAgICAgIHJlc3VsdCA9PiB7XG4gICAgICAgIGNvbnN0IHsgY29uZmlkZW5jZSwgbGF5ZXIsIHNvdXJjZSB9ID0gcmVzdWx0LnByb3BlcnRpZXM7XG4gICAgICAgIGlmIChub3JtYWxpemVkVGVybS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAvLyBEb2luZyBzZWFyY2ggd2l0aCBlbXB0eSBzdHJpbmcuXG4gICAgICAgICAgLy8gTm8gY29uZmlkZW5jZSB0byBtYXRjaCwgc28gdXNlIHJhbmtlZCBvbGQgc2VhcmNoZXMgYW5kIGZhdm91cml0ZXNcbiAgICAgICAgICByZXR1cm4gZ2V0TGF5ZXJSYW5rKGxheWVyLCBzb3VyY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbXVzdCBoYW5kbGUgYSBtaXh1cCBvZiBnZW9jb2RlciBzZWFyY2hlcyBhbmQgaXRlbXMgYWJvdmVcbiAgICAgICAgLy8gTm9ybWFsIGNvbmZpZGVuY2UgcmFuZ2UgZnJvbSBnZW9jb2RlciBpcyBhYm91dCAwLjMgLi4gMVxuICAgICAgICBpZiAoIWNvbmZpZGVuY2UpIHtcbiAgICAgICAgICAvLyBub3QgZnJvbSBnZW9jb2RlciwgZXN0aW1hdGUgY29uZmlkZW5jZSBvdXJzZWx2ZXNcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgZ2V0TGF5ZXJSYW5rKGxheWVyLCBzb3VyY2UpICtcbiAgICAgICAgICAgIG1hdGNoKG5vcm1hbGl6ZWRUZXJtLCByZXN1bHQucHJvcGVydGllcylcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIC8vIGdlb2NvZGVkIGl0ZW1zIHdpdGggY29uZmlkZW5jZSwganVzdCBhZGp1c3QgYSBsaXR0bGVcbiAgICAgICAgc3dpdGNoIChsYXllcikge1xuICAgICAgICAgIGNhc2UgTGF5ZXJUeXBlLlN0YXRpb246IHtcbiAgICAgICAgICAgIGNvbnN0IGJvb3N0ID0gc291cmNlLmluZGV4T2YoJ2d0ZnMnKSA9PT0gMCA/IDAuMDIgOiAwLjAxO1xuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZGVuY2UgKyBib29zdDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBMYXllclR5cGUuU3RvcDpcbiAgICAgICAgICAgIHJldHVybiBjb25maWRlbmNlIC0gMC4wNTtcbiAgICAgICAgICBjYXNlIExheWVyVHlwZS5DYXJQYXJrOlxuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZGVuY2UgLSAwLjA1O1xuICAgICAgICAgIGNhc2UgTGF5ZXJUeXBlLkJpa2VQYXJrOlxuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZGVuY2UgLSAwLjA1O1xuICAgICAgICAgIGNhc2UgTGF5ZXJUeXBlLlZlaGljbGVSZW50YWxTdGF0aW9uOlxuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZGVuY2UgLSAwLjA0O1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gY29uZmlkZW5jZTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHJlc3VsdCA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQucHJvcGVydGllcy5zaG9ydE5hbWUpIHtcbiAgICAgICAgICByZXR1cm4gdGVzdFNob3J0TmFtZU1hdGNoZXNMaW5lV2l0aE51bWJlcnNBbmRMZXR0ZXJzKFxuICAgICAgICAgICAgcmVzdWx0LnByb3BlcnRpZXMuc2hvcnROYW1lLFxuICAgICAgICAgIClcbiAgICAgICAgICAgID8gc3BsaXRTaG9ydE5hbWVBdExldHRlcnMocmVzdWx0LnByb3BlcnRpZXMuc2hvcnROYW1lKVswXVxuICAgICAgICAgICAgOiByZXN1bHQucHJvcGVydGllcy5zaG9ydE5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0sXG4gICAgICByZXN1bHQgPT4ge1xuICAgICAgICBpZiAocmVzdWx0LnByb3BlcnRpZXMuc2hvcnROYW1lKSB7XG4gICAgICAgICAgcmV0dXJuIHRlc3RTaG9ydE5hbWVNYXRjaGVzTGluZVdpdGhOdW1iZXJzQW5kTGV0dGVycyhcbiAgICAgICAgICAgIHJlc3VsdC5wcm9wZXJ0aWVzLnNob3J0TmFtZSxcbiAgICAgICAgICApXG4gICAgICAgICAgICA/IHNwbGl0U2hvcnROYW1lQXRMZXR0ZXJzKHJlc3VsdC5wcm9wZXJ0aWVzLnNob3J0TmFtZSlbMV1cbiAgICAgICAgICAgIDogcmVzdWx0LnByb3BlcnRpZXMuc2hvcnROYW1lO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9LFxuICAgICAgJ3Byb3BlcnRpZXMubG9uZ05hbWUnLFxuICAgIF0sXG4gICAgWydkZXNjJywgJ2Rlc2MnLCAnYXNjJywgJ2FzYycsICdhc2MnXSxcbiAgKTtcblxuICByZXR1cm4gdW5pcVdpdGgob3JkZXJlZFJlc3VsdHMsIGlzRHVwbGljYXRlKTtcbn07XG5cbi8qKlxuICogUGFyc2VzIHN0b3AncyBuYW1lIHdpdGhvdXQgc3RvcCBjb2RlIGZyb20gYSBzdG9wIG5hbWUgZnJvbSBnZW9jb2RpbmcgcmVzdWx0c1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbCBzdG9wJ3MgbmFtZSBmcm9tIGdlb2NvZGluZyByZXN1bHRzLlxuICogQHBhcmFtIHtzdHJpbmd9IHN0b3BDb2RlIHN0b3AgY29kZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFN0b3BOYW1lID0gKG5hbWUsIHN0b3BDb2RlKSA9PiB7XG4gIGlmIChcbiAgICBzdG9wQ29kZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgc3RvcENvZGUgIT09IG51bGwgJiZcbiAgICBuYW1lLmxhc3RJbmRleE9mKHN0b3BDb2RlKSAhPT0gLTFcbiAgKSB7XG4gICAgcmV0dXJuIG5hbWUuc3Vic3RyaW5nKDAsIG5hbWUubGFzdEluZGV4T2Yoc3RvcENvZGUpIC0gMSk7XG4gIH1cbiAgcmV0dXJuIG5hbWU7XG59O1xuIiwiaW1wb3J0IGdldCBmcm9tICdsb2Rhc2gvZ2V0JztcblxuLyoqXG4gKiBGdW5jdGlvbiB0aGF0IGZpbHRlcnMgbGlzdCBtYXRjaGluZyB0byBpbnB1dC5cbiAqXG4gKiBAbmFtZSBmaWx0ZXJNYXRjaGluZ1RvSW5wdXRcbiAqIEBwYXJhbSB7QXJyYXl9IGxpc3QgTGlzdCBjb250YWluaW4gb2JqZWN0cyBlLmcoICB7XG4gKiAgICAgICAgIHR5cGU6ICdGZWF0dXJlJ1xuICogICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gKiAgICAgICAgICAgbGFiZWw6ICd0ZXN0YWRkcmVzczQnLFxuICogICAgICAgICAgIGxheWVyOiAnYWRkcmVzcycsXG4gKiAgICAgICAgICAgbmFtZTogJ3Rlc3RhZGRyZXNzNCcsXG4gKiAgICAgICAgIH0sXG4gKiAgICAgICAgIGdlb21ldHJ5OiB7IGNvb3JkaW5hdGVzOiBbbG9uLCBsYXRdIH0sXG4gKiAgICAgICB9LClcbiAqIEBwYXJhbSB7U3RyaW5nfSBJbnB1dCBJbnB1dCBnaXZlbiBmb3IgZmlsdGVyaW5nIHRoZSBsaXN0XG4gKiBAcGFyYW0ge0FycmF5fSBmaWVsZHMgTGlzdCBvZiBmaWVsZHMgdGhhdCBsaXN0IGlzIGZpbHRlcmVkIGJ5IGUuZyAoW3Byb3BlcnRpZXMubGFiZWwsIHByb3BlcnRpZXMubmFtZV0pXG4gKiBAcmV0dXJucyB7QXJyYXl9IEZpbHRlcmVkIEFycmF5LlxuICogQGV4YW1wbGVcbiAqIGRpZ2l0cmFuc2l0LXV0aWwuZmlsdGVyTWF0Y2hpbmdUb0lucHV0KFt7dHlwZTogZmVhdHVyZSwgcHJvcGVydGllcyB7IC4uLiBuYW1lOiB0ZXN0YWRkcmVzczQgfSAuLi4gfV0sICd0ZXN0YWRkcmVzczQnLCAncHJvcGVydGllcy5uYW1lJyk7XG4gKiAvLz0gTGlzdCBjb250YWluaW5nIG9iamVjdCB3aXRoIGdpdmVuIG5hbWUuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZpbHRlck1hdGNoaW5nVG9JbnB1dChsaXN0LCBJbnB1dCwgZmllbGRzKSB7XG4gIGlmICh0eXBlb2YgSW5wdXQgPT09ICdzdHJpbmcnICYmIElucHV0Lmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBpbnB1dCA9IElucHV0LnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgIGNvbnN0IG11bHRpV29yZCA9IGlucHV0LmluY2x1ZGVzKCcgJykgfHwgaW5wdXQuaW5jbHVkZXMoJywnKTtcbiAgICByZXR1cm4gbGlzdC5maWx0ZXIoaXRlbSA9PiB7XG4gICAgICBsZXQgcGFydHMgPSBbXTtcbiAgICAgIGZpZWxkcy5mb3JFYWNoKHBOYW1lID0+IHtcbiAgICAgICAgbGV0IHZhbHVlID0gZ2V0KGl0ZW0sIHBOYW1lKTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgIW11bHRpV29yZCAmJlxuICAgICAgICAgIChwTmFtZSA9PT0gJ3Byb3BlcnRpZXMubGFiZWwnIHx8IHBOYW1lID09PSAnYWRkcmVzcycpICYmXG4gICAgICAgICAgdmFsdWVcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gc3BlY2lhbCBjYXNlOiBkcm9wIGxhc3QgcGFydHMgaS5lLiBjaXR5IGFuZCBuZWlnaGJvdXJob29kXG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zcGxpdCgnLCcpO1xuICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICB2YWx1ZS5zcGxpY2UodmFsdWUubGVuZ3RoIC0gMiwgMik7XG4gICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICB2YWx1ZS5zcGxpY2UodmFsdWUubGVuZ3RoIC0gMSwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhbHVlID0gdmFsdWUuam9pbignLCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIGlmIChtdWx0aVdvcmQpIHtcbiAgICAgICAgICAgIHBhcnRzID0gcGFydHMuY29uY2F0KHZhbHVlLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXJ0cyA9IHBhcnRzLmNvbmNhdChcbiAgICAgICAgICAgICAgdmFsdWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8sL2csICcgJykuc3BsaXQoJyAnKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHBhcnRzW2ldLmluZGV4T2YoaW5wdXQpID09PSAwKSB7XG4gICAgICAgICAgLy8gYWNjZXB0IG1hdGNoIG9ubHkgYXQgd29yZCBzdGFydFxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbGlzdDtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDcmVhdGUgYSBib3VuZCB2ZXJzaW9uIG9mIGEgZnVuY3Rpb24gd2l0aCBhIHNwZWNpZmllZCBgdGhpc2AgY29udGV4dFxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIC0gVGhlIGZ1bmN0aW9uIHRvIGJpbmRcbiAqIEBwYXJhbSB7Kn0gdGhpc0FyZyAtIFRoZSB2YWx1ZSB0byBiZSBwYXNzZWQgYXMgdGhlIGB0aGlzYCBwYXJhbWV0ZXJcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gQSBuZXcgZnVuY3Rpb24gdGhhdCB3aWxsIGNhbGwgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIHdpdGggdGhlIHNwZWNpZmllZCBgdGhpc2AgY29udGV4dFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBiaW5kKGZuLCB0aGlzQXJnKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKCkge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGlzQXJnLCBhcmd1bWVudHMpO1xuICB9O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgYmluZCBmcm9tICcuL2hlbHBlcnMvYmluZC5qcyc7XG5cbi8vIHV0aWxzIGlzIGEgbGlicmFyeSBvZiBnZW5lcmljIGhlbHBlciBmdW5jdGlvbnMgbm9uLXNwZWNpZmljIHRvIGF4aW9zXG5cbmNvbnN0IHsgdG9TdHJpbmcgfSA9IE9iamVjdC5wcm90b3R5cGU7XG5jb25zdCB7IGdldFByb3RvdHlwZU9mIH0gPSBPYmplY3Q7XG5jb25zdCB7IGl0ZXJhdG9yLCB0b1N0cmluZ1RhZyB9ID0gU3ltYm9sO1xuXG5jb25zdCBraW5kT2YgPSAoKGNhY2hlKSA9PiAodGhpbmcpID0+IHtcbiAgY29uc3Qgc3RyID0gdG9TdHJpbmcuY2FsbCh0aGluZyk7XG4gIHJldHVybiBjYWNoZVtzdHJdIHx8IChjYWNoZVtzdHJdID0gc3RyLnNsaWNlKDgsIC0xKS50b0xvd2VyQ2FzZSgpKTtcbn0pKE9iamVjdC5jcmVhdGUobnVsbCkpO1xuXG5jb25zdCBraW5kT2ZUZXN0ID0gKHR5cGUpID0+IHtcbiAgdHlwZSA9IHR5cGUudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuICh0aGluZykgPT4ga2luZE9mKHRoaW5nKSA9PT0gdHlwZTtcbn07XG5cbmNvbnN0IHR5cGVPZlRlc3QgPSAodHlwZSkgPT4gKHRoaW5nKSA9PiB0eXBlb2YgdGhpbmcgPT09IHR5cGU7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBub24tbnVsbCBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXksIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCB7IGlzQXJyYXkgfSA9IEFycmF5O1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIHVuZGVmaW5lZFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzVW5kZWZpbmVkID0gdHlwZU9mVGVzdCgndW5kZWZpbmVkJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCdWZmZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNCdWZmZXIodmFsKSB7XG4gIHJldHVybiAoXG4gICAgdmFsICE9PSBudWxsICYmXG4gICAgIWlzVW5kZWZpbmVkKHZhbCkgJiZcbiAgICB2YWwuY29uc3RydWN0b3IgIT09IG51bGwgJiZcbiAgICAhaXNVbmRlZmluZWQodmFsLmNvbnN0cnVjdG9yKSAmJlxuICAgIGlzRnVuY3Rpb24odmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyKSAmJlxuICAgIHZhbC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcih2YWwpXG4gICk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNBcnJheUJ1ZmZlciA9IGtpbmRPZlRlc3QoJ0FycmF5QnVmZmVyJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyVmlldyh2YWwpIHtcbiAgbGV0IHJlc3VsdDtcbiAgaWYgKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiYgQXJyYXlCdWZmZXIuaXNWaWV3KSB7XG4gICAgcmVzdWx0ID0gQXJyYXlCdWZmZXIuaXNWaWV3KHZhbCk7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gdmFsICYmIHZhbC5idWZmZXIgJiYgaXNBcnJheUJ1ZmZlcih2YWwuYnVmZmVyKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgU3RyaW5nXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmluZywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzU3RyaW5nID0gdHlwZU9mVGVzdCgnc3RyaW5nJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZ1bmN0aW9uLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGdW5jdGlvbiA9IHR5cGVPZlRlc3QoJ2Z1bmN0aW9uJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBOdW1iZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgTnVtYmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNOdW1iZXIgPSB0eXBlT2ZUZXN0KCdudW1iZXInKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHRoaW5nIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNPYmplY3QgPSAodGhpbmcpID0+IHRoaW5nICE9PSBudWxsICYmIHR5cGVvZiB0aGluZyA9PT0gJ29iamVjdCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCb29sZWFuXG4gKlxuICogQHBhcmFtIHsqfSB0aGluZyBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCb29sZWFuLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNCb29sZWFuID0gKHRoaW5nKSA9PiB0aGluZyA9PT0gdHJ1ZSB8fCB0aGluZyA9PT0gZmFsc2U7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgcGxhaW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNQbGFpbk9iamVjdCA9ICh2YWwpID0+IHtcbiAgaWYgKGtpbmRPZih2YWwpICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKHZhbCk7XG4gIHJldHVybiAoXG4gICAgKHByb3RvdHlwZSA9PT0gbnVsbCB8fFxuICAgICAgcHJvdG90eXBlID09PSBPYmplY3QucHJvdG90eXBlIHx8XG4gICAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG90eXBlKSA9PT0gbnVsbCkgJiZcbiAgICAhKHRvU3RyaW5nVGFnIGluIHZhbCkgJiZcbiAgICAhKGl0ZXJhdG9yIGluIHZhbClcbiAgKTtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gZW1wdHkgb2JqZWN0IChzYWZlbHkgaGFuZGxlcyBCdWZmZXJzKVxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gZW1wdHkgb2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNFbXB0eU9iamVjdCA9ICh2YWwpID0+IHtcbiAgLy8gRWFybHkgcmV0dXJuIGZvciBub24tb2JqZWN0cyBvciBCdWZmZXJzIHRvIHByZXZlbnQgUmFuZ2VFcnJvclxuICBpZiAoIWlzT2JqZWN0KHZhbCkgfHwgaXNCdWZmZXIodmFsKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHZhbCkubGVuZ3RoID09PSAwICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWwpID09PSBPYmplY3QucHJvdG90eXBlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gRmFsbGJhY2sgZm9yIGFueSBvdGhlciBvYmplY3RzIHRoYXQgbWlnaHQgY2F1c2UgUmFuZ2VFcnJvciB3aXRoIE9iamVjdC5rZXlzKClcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBEYXRlXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIERhdGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0RhdGUgPSBraW5kT2ZUZXN0KCdEYXRlJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGaWxlXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZpbGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0ZpbGUgPSBraW5kT2ZUZXN0KCdGaWxlJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBSZWFjdCBOYXRpdmUgQmxvYlxuICogUmVhY3QgTmF0aXZlIFwiYmxvYlwiOiBhbiBvYmplY3Qgd2l0aCBhIGB1cmlgIGF0dHJpYnV0ZS4gT3B0aW9uYWxseSwgaXQgY2FuXG4gKiBhbHNvIGhhdmUgYSBgbmFtZWAgYW5kIGB0eXBlYCBhdHRyaWJ1dGUgdG8gc3BlY2lmeSBmaWxlbmFtZSBhbmQgY29udGVudCB0eXBlXG4gKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QtbmF0aXZlL2Jsb2IvMjY2ODRjZjNhZGY0MDk0ZWI2YzQwNWQzNDVhNzViZjhjN2MwYmY4OC9MaWJyYXJpZXMvTmV0d29yay9Gb3JtRGF0YS5qcyNMNjgtTDcxXG4gKiBcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBSZWFjdCBOYXRpdmUgQmxvYiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzUmVhY3ROYXRpdmVCbG9iID0gKHZhbHVlKSA9PiB7XG4gIHJldHVybiAhISh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUudXJpICE9PSAndW5kZWZpbmVkJyk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGVudmlyb25tZW50IGlzIFJlYWN0IE5hdGl2ZVxuICogUmVhY3ROYXRpdmUgYEZvcm1EYXRhYCBoYXMgYSBub24tc3RhbmRhcmQgYGdldFBhcnRzKClgIG1ldGhvZFxuICogXG4gKiBAcGFyYW0geyp9IGZvcm1EYXRhIFRoZSBmb3JtRGF0YSB0byB0ZXN0XG4gKiBcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIGVudmlyb25tZW50IGlzIFJlYWN0IE5hdGl2ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzUmVhY3ROYXRpdmUgPSAoZm9ybURhdGEpID0+IGZvcm1EYXRhICYmIHR5cGVvZiBmb3JtRGF0YS5nZXRQYXJ0cyAhPT0gJ3VuZGVmaW5lZCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCbG9iXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJsb2IsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Jsb2IgPSBraW5kT2ZUZXN0KCdCbG9iJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGaWxlTGlzdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGaWxlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGaWxlTGlzdCA9IGtpbmRPZlRlc3QoJ0ZpbGVMaXN0Jyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJlYW1cbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyZWFtLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNTdHJlYW0gPSAodmFsKSA9PiBpc09iamVjdCh2YWwpICYmIGlzRnVuY3Rpb24odmFsLnBpcGUpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRm9ybURhdGFcbiAqXG4gKiBAcGFyYW0geyp9IHRoaW5nIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gRm9ybURhdGEsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBnZXRHbG9iYWwoKSB7XG4gIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcpIHJldHVybiBnbG9iYWxUaGlzO1xuICBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSByZXR1cm4gc2VsZjtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSByZXR1cm4gd2luZG93O1xuICBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHJldHVybiBnbG9iYWw7XG4gIHJldHVybiB7fTtcbn1cblxuY29uc3QgRyA9IGdldEdsb2JhbCgpO1xuY29uc3QgRm9ybURhdGFDdG9yID0gdHlwZW9mIEcuRm9ybURhdGEgIT09ICd1bmRlZmluZWQnID8gRy5Gb3JtRGF0YSA6IHVuZGVmaW5lZDtcblxuY29uc3QgaXNGb3JtRGF0YSA9ICh0aGluZykgPT4ge1xuICBsZXQga2luZDtcbiAgcmV0dXJuIHRoaW5nICYmIChcbiAgICAoRm9ybURhdGFDdG9yICYmIHRoaW5nIGluc3RhbmNlb2YgRm9ybURhdGFDdG9yKSB8fCAoXG4gICAgICBpc0Z1bmN0aW9uKHRoaW5nLmFwcGVuZCkgJiYgKFxuICAgICAgICAoa2luZCA9IGtpbmRPZih0aGluZykpID09PSAnZm9ybWRhdGEnIHx8XG4gICAgICAgIC8vIGRldGVjdCBmb3JtLWRhdGEgaW5zdGFuY2VcbiAgICAgICAgKGtpbmQgPT09ICdvYmplY3QnICYmIGlzRnVuY3Rpb24odGhpbmcudG9TdHJpbmcpICYmIHRoaW5nLnRvU3RyaW5nKCkgPT09ICdbb2JqZWN0IEZvcm1EYXRhXScpXG4gICAgICApXG4gICAgKVxuICApO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzVVJMU2VhcmNoUGFyYW1zID0ga2luZE9mVGVzdCgnVVJMU2VhcmNoUGFyYW1zJyk7XG5cbmNvbnN0IFtpc1JlYWRhYmxlU3RyZWFtLCBpc1JlcXVlc3QsIGlzUmVzcG9uc2UsIGlzSGVhZGVyc10gPSBbXG4gICdSZWFkYWJsZVN0cmVhbScsXG4gICdSZXF1ZXN0JyxcbiAgJ1Jlc3BvbnNlJyxcbiAgJ0hlYWRlcnMnLFxuXS5tYXAoa2luZE9mVGVzdCk7XG5cbi8qKlxuICogVHJpbSBleGNlc3Mgd2hpdGVzcGFjZSBvZmYgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0ciBUaGUgU3RyaW5nIHRvIHRyaW1cbiAqXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgU3RyaW5nIGZyZWVkIG9mIGV4Y2VzcyB3aGl0ZXNwYWNlXG4gKi9cbmNvbnN0IHRyaW0gPSAoc3RyKSA9PiB7XG4gIHJldHVybiBzdHIudHJpbSA/IHN0ci50cmltKCkgOiBzdHIucmVwbGFjZSgvXltcXHNcXHVGRUZGXFx4QTBdK3xbXFxzXFx1RkVGRlxceEEwXSskL2csICcnKTtcbn07XG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBhbiBBcnJheSBvciBhbiBPYmplY3QgaW52b2tpbmcgYSBmdW5jdGlvbiBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmIGBvYmpgIGlzIGFuIEFycmF5IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwgaW5kZXgsIGFuZCBjb21wbGV0ZSBhcnJheSBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmICdvYmonIGlzIGFuIE9iamVjdCBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGtleSwgYW5kIGNvbXBsZXRlIG9iamVjdCBmb3IgZWFjaCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdHxBcnJheTx1bmtub3duPn0gb2JqIFRoZSBvYmplY3QgdG8gaXRlcmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGNhbGxiYWNrIHRvIGludm9rZSBmb3IgZWFjaCBpdGVtXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5hbGxPd25LZXlzID0gZmFsc2VdXG4gKiBAcmV0dXJucyB7YW55fVxuICovXG5mdW5jdGlvbiBmb3JFYWNoKG9iaiwgZm4sIHsgYWxsT3duS2V5cyA9IGZhbHNlIH0gPSB7fSkge1xuICAvLyBEb24ndCBib3RoZXIgaWYgbm8gdmFsdWUgcHJvdmlkZWRcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBpO1xuICBsZXQgbDtcblxuICAvLyBGb3JjZSBhbiBhcnJheSBpZiBub3QgYWxyZWFkeSBzb21ldGhpbmcgaXRlcmFibGVcbiAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gICAgb2JqID0gW29ial07XG4gIH1cblxuICBpZiAoaXNBcnJheShvYmopKSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIGFycmF5IHZhbHVlc1xuICAgIGZvciAoaSA9IDAsIGwgPSBvYmoubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBmbi5jYWxsKG51bGwsIG9ialtpXSwgaSwgb2JqKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gQnVmZmVyIGNoZWNrXG4gICAgaWYgKGlzQnVmZmVyKG9iaikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJdGVyYXRlIG92ZXIgb2JqZWN0IGtleXNcbiAgICBjb25zdCBrZXlzID0gYWxsT3duS2V5cyA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikgOiBPYmplY3Qua2V5cyhvYmopO1xuICAgIGNvbnN0IGxlbiA9IGtleXMubGVuZ3RoO1xuICAgIGxldCBrZXk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICBmbi5jYWxsKG51bGwsIG9ialtrZXldLCBrZXksIG9iaik7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogRmluZHMgYSBrZXkgaW4gYW4gb2JqZWN0LCBjYXNlLWluc2Vuc2l0aXZlLCByZXR1cm5pbmcgdGhlIGFjdHVhbCBrZXkgbmFtZS5cbiAqIFJldHVybnMgbnVsbCBpZiB0aGUgb2JqZWN0IGlzIGEgQnVmZmVyIG9yIGlmIG5vIG1hdGNoIGlzIGZvdW5kLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogLSBUaGUgb2JqZWN0IHRvIHNlYXJjaC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IHRvIGZpbmQgKGNhc2UtaW5zZW5zaXRpdmUpLlxuICogQHJldHVybnMgez9zdHJpbmd9IFRoZSBhY3R1YWwga2V5IG5hbWUgaWYgZm91bmQsIG90aGVyd2lzZSBudWxsLlxuICovXG5mdW5jdGlvbiBmaW5kS2V5KG9iaiwga2V5KSB7XG4gIGlmIChpc0J1ZmZlcihvYmopKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBrZXkgPSBrZXkudG9Mb3dlckNhc2UoKTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG4gIGxldCBpID0ga2V5cy5sZW5ndGg7XG4gIGxldCBfa2V5O1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIF9rZXkgPSBrZXlzW2ldO1xuICAgIGlmIChrZXkgPT09IF9rZXkudG9Mb3dlckNhc2UoKSkge1xuICAgICAgcmV0dXJuIF9rZXk7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5jb25zdCBfZ2xvYmFsID0gKCgpID0+IHtcbiAgLyplc2xpbnQgbm8tdW5kZWY6MCovXG4gIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcpIHJldHVybiBnbG9iYWxUaGlzO1xuICByZXR1cm4gdHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogZ2xvYmFsO1xufSkoKTtcblxuY29uc3QgaXNDb250ZXh0RGVmaW5lZCA9IChjb250ZXh0KSA9PiAhaXNVbmRlZmluZWQoY29udGV4dCkgJiYgY29udGV4dCAhPT0gX2dsb2JhbDtcblxuLyoqXG4gKiBBY2NlcHRzIHZhcmFyZ3MgZXhwZWN0aW5nIGVhY2ggYXJndW1lbnQgdG8gYmUgYW4gb2JqZWN0LCB0aGVuXG4gKiBpbW11dGFibHkgbWVyZ2VzIHRoZSBwcm9wZXJ0aWVzIG9mIGVhY2ggb2JqZWN0IGFuZCByZXR1cm5zIHJlc3VsdC5cbiAqXG4gKiBXaGVuIG11bHRpcGxlIG9iamVjdHMgY29udGFpbiB0aGUgc2FtZSBrZXkgdGhlIGxhdGVyIG9iamVjdCBpblxuICogdGhlIGFyZ3VtZW50cyBsaXN0IHdpbGwgdGFrZSBwcmVjZWRlbmNlLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIGNvbnN0IHJlc3VsdCA9IG1lcmdlKHtmb286IDEyM30sIHtmb286IDQ1Nn0pO1xuICogY29uc29sZS5sb2cocmVzdWx0LmZvbyk7IC8vIG91dHB1dHMgNDU2XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqMSBPYmplY3QgdG8gbWVyZ2VcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXN1bHQgb2YgYWxsIG1lcmdlIHByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gbWVyZ2UoLyogb2JqMSwgb2JqMiwgb2JqMywgLi4uICovKSB7XG4gIGNvbnN0IHsgY2FzZWxlc3MsIHNraXBVbmRlZmluZWQgfSA9IChpc0NvbnRleHREZWZpbmVkKHRoaXMpICYmIHRoaXMpIHx8IHt9O1xuICBjb25zdCByZXN1bHQgPSB7fTtcbiAgY29uc3QgYXNzaWduVmFsdWUgPSAodmFsLCBrZXkpID0+IHtcbiAgICAvLyBTa2lwIGRhbmdlcm91cyBwcm9wZXJ0eSBuYW1lcyB0byBwcmV2ZW50IHByb3RvdHlwZSBwb2xsdXRpb25cbiAgICBpZiAoa2V5ID09PSAnX19wcm90b19fJyB8fCBrZXkgPT09ICdjb25zdHJ1Y3RvcicgfHwga2V5ID09PSAncHJvdG90eXBlJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRhcmdldEtleSA9IChjYXNlbGVzcyAmJiBmaW5kS2V5KHJlc3VsdCwga2V5KSkgfHwga2V5O1xuICAgIGlmIChpc1BsYWluT2JqZWN0KHJlc3VsdFt0YXJnZXRLZXldKSAmJiBpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gbWVyZ2UocmVzdWx0W3RhcmdldEtleV0sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gbWVyZ2Uoe30sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc0FycmF5KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gdmFsLnNsaWNlKCk7XG4gICAgfSBlbHNlIGlmICghc2tpcFVuZGVmaW5lZCB8fCAhaXNVbmRlZmluZWQodmFsKSkge1xuICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSB2YWw7XG4gICAgfVxuICB9O1xuXG4gIGZvciAobGV0IGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGFyZ3VtZW50c1tpXSAmJiBmb3JFYWNoKGFyZ3VtZW50c1tpXSwgYXNzaWduVmFsdWUpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRXh0ZW5kcyBvYmplY3QgYSBieSBtdXRhYmx5IGFkZGluZyB0byBpdCB0aGUgcHJvcGVydGllcyBvZiBvYmplY3QgYi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYSBUaGUgb2JqZWN0IHRvIGJlIGV4dGVuZGVkXG4gKiBAcGFyYW0ge09iamVjdH0gYiBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tXG4gKiBAcGFyYW0ge09iamVjdH0gdGhpc0FyZyBUaGUgb2JqZWN0IHRvIGJpbmQgZnVuY3Rpb24gdG9cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLmFsbE93bktleXNdXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgcmVzdWx0aW5nIHZhbHVlIG9mIG9iamVjdCBhXG4gKi9cbmNvbnN0IGV4dGVuZCA9IChhLCBiLCB0aGlzQXJnLCB7IGFsbE93bktleXMgfSA9IHt9KSA9PiB7XG4gIGZvckVhY2goXG4gICAgYixcbiAgICAodmFsLCBrZXkpID0+IHtcbiAgICAgIGlmICh0aGlzQXJnICYmIGlzRnVuY3Rpb24odmFsKSkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYSwga2V5LCB7XG4gICAgICAgICAgdmFsdWU6IGJpbmQodmFsLCB0aGlzQXJnKSxcbiAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYSwga2V5LCB7XG4gICAgICAgICAgdmFsdWU6IHZhbCxcbiAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICB7IGFsbE93bktleXMgfVxuICApO1xuICByZXR1cm4gYTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGJ5dGUgb3JkZXIgbWFya2VyLiBUaGlzIGNhdGNoZXMgRUYgQkIgQkYgKHRoZSBVVEYtOCBCT00pXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnQgd2l0aCBCT01cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBjb250ZW50IHZhbHVlIHdpdGhvdXQgQk9NXG4gKi9cbmNvbnN0IHN0cmlwQk9NID0gKGNvbnRlbnQpID0+IHtcbiAgaWYgKGNvbnRlbnQuY2hhckNvZGVBdCgwKSA9PT0gMHhmZWZmKSB7XG4gICAgY29udGVudCA9IGNvbnRlbnQuc2xpY2UoMSk7XG4gIH1cbiAgcmV0dXJuIGNvbnRlbnQ7XG59O1xuXG4vKipcbiAqIEluaGVyaXQgdGhlIHByb3RvdHlwZSBtZXRob2RzIGZyb20gb25lIGNvbnN0cnVjdG9yIGludG8gYW5vdGhlclxuICogQHBhcmFtIHtmdW5jdGlvbn0gY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHN1cGVyQ29uc3RydWN0b3JcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcHJvcHNdXG4gKiBAcGFyYW0ge29iamVjdH0gW2Rlc2NyaXB0b3JzXVxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5jb25zdCBpbmhlcml0cyA9IChjb25zdHJ1Y3Rvciwgc3VwZXJDb25zdHJ1Y3RvciwgcHJvcHMsIGRlc2NyaXB0b3JzKSA9PiB7XG4gIGNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIGRlc2NyaXB0b3JzKTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnN0cnVjdG9yLnByb3RvdHlwZSwgJ2NvbnN0cnVjdG9yJywge1xuICAgIHZhbHVlOiBjb25zdHJ1Y3RvcixcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gIH0pO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29uc3RydWN0b3IsICdzdXBlcicsIHtcbiAgICB2YWx1ZTogc3VwZXJDb25zdHJ1Y3Rvci5wcm90b3R5cGUsXG4gIH0pO1xuICBwcm9wcyAmJiBPYmplY3QuYXNzaWduKGNvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvcHMpO1xufTtcblxuLyoqXG4gKiBSZXNvbHZlIG9iamVjdCB3aXRoIGRlZXAgcHJvdG90eXBlIGNoYWluIHRvIGEgZmxhdCBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2VPYmogc291cmNlIG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IFtkZXN0T2JqXVxuICogQHBhcmFtIHtGdW5jdGlvbnxCb29sZWFufSBbZmlsdGVyXVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3Byb3BGaWx0ZXJdXG4gKlxuICogQHJldHVybnMge09iamVjdH1cbiAqL1xuY29uc3QgdG9GbGF0T2JqZWN0ID0gKHNvdXJjZU9iaiwgZGVzdE9iaiwgZmlsdGVyLCBwcm9wRmlsdGVyKSA9PiB7XG4gIGxldCBwcm9wcztcbiAgbGV0IGk7XG4gIGxldCBwcm9wO1xuICBjb25zdCBtZXJnZWQgPSB7fTtcblxuICBkZXN0T2JqID0gZGVzdE9iaiB8fCB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVxLW51bGwsZXFlcWVxXG4gIGlmIChzb3VyY2VPYmogPT0gbnVsbCkgcmV0dXJuIGRlc3RPYmo7XG5cbiAgZG8ge1xuICAgIHByb3BzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc291cmNlT2JqKTtcbiAgICBpID0gcHJvcHMubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgICBwcm9wID0gcHJvcHNbaV07XG4gICAgICBpZiAoKCFwcm9wRmlsdGVyIHx8IHByb3BGaWx0ZXIocHJvcCwgc291cmNlT2JqLCBkZXN0T2JqKSkgJiYgIW1lcmdlZFtwcm9wXSkge1xuICAgICAgICBkZXN0T2JqW3Byb3BdID0gc291cmNlT2JqW3Byb3BdO1xuICAgICAgICBtZXJnZWRbcHJvcF0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBzb3VyY2VPYmogPSBmaWx0ZXIgIT09IGZhbHNlICYmIGdldFByb3RvdHlwZU9mKHNvdXJjZU9iaik7XG4gIH0gd2hpbGUgKHNvdXJjZU9iaiAmJiAoIWZpbHRlciB8fCBmaWx0ZXIoc291cmNlT2JqLCBkZXN0T2JqKSkgJiYgc291cmNlT2JqICE9PSBPYmplY3QucHJvdG90eXBlKTtcblxuICByZXR1cm4gZGVzdE9iajtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgc3RyaW5nIGVuZHMgd2l0aCB0aGUgY2hhcmFjdGVycyBvZiBhIHNwZWNpZmllZCBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VhcmNoU3RyaW5nXG4gKiBAcGFyYW0ge051bWJlcn0gW3Bvc2l0aW9uPSAwXVxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5jb25zdCBlbmRzV2l0aCA9IChzdHIsIHNlYXJjaFN0cmluZywgcG9zaXRpb24pID0+IHtcbiAgc3RyID0gU3RyaW5nKHN0cik7XG4gIGlmIChwb3NpdGlvbiA9PT0gdW5kZWZpbmVkIHx8IHBvc2l0aW9uID4gc3RyLmxlbmd0aCkge1xuICAgIHBvc2l0aW9uID0gc3RyLmxlbmd0aDtcbiAgfVxuICBwb3NpdGlvbiAtPSBzZWFyY2hTdHJpbmcubGVuZ3RoO1xuICBjb25zdCBsYXN0SW5kZXggPSBzdHIuaW5kZXhPZihzZWFyY2hTdHJpbmcsIHBvc2l0aW9uKTtcbiAgcmV0dXJuIGxhc3RJbmRleCAhPT0gLTEgJiYgbGFzdEluZGV4ID09PSBwb3NpdGlvbjtcbn07XG5cbi8qKlxuICogUmV0dXJucyBuZXcgYXJyYXkgZnJvbSBhcnJheSBsaWtlIG9iamVjdCBvciBudWxsIGlmIGZhaWxlZFxuICpcbiAqIEBwYXJhbSB7Kn0gW3RoaW5nXVxuICpcbiAqIEByZXR1cm5zIHs/QXJyYXl9XG4gKi9cbmNvbnN0IHRvQXJyYXkgPSAodGhpbmcpID0+IHtcbiAgaWYgKCF0aGluZykgcmV0dXJuIG51bGw7XG4gIGlmIChpc0FycmF5KHRoaW5nKSkgcmV0dXJuIHRoaW5nO1xuICBsZXQgaSA9IHRoaW5nLmxlbmd0aDtcbiAgaWYgKCFpc051bWJlcihpKSkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGFyciA9IG5ldyBBcnJheShpKTtcbiAgd2hpbGUgKGktLSA+IDApIHtcbiAgICBhcnJbaV0gPSB0aGluZ1tpXTtcbiAgfVxuICByZXR1cm4gYXJyO1xufTtcblxuLyoqXG4gKiBDaGVja2luZyBpZiB0aGUgVWludDhBcnJheSBleGlzdHMgYW5kIGlmIGl0IGRvZXMsIGl0IHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGNoZWNrcyBpZiB0aGVcbiAqIHRoaW5nIHBhc3NlZCBpbiBpcyBhbiBpbnN0YW5jZSBvZiBVaW50OEFycmF5XG4gKlxuICogQHBhcmFtIHtUeXBlZEFycmF5fVxuICpcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbmNvbnN0IGlzVHlwZWRBcnJheSA9ICgoVHlwZWRBcnJheSkgPT4ge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICByZXR1cm4gKHRoaW5nKSA9PiB7XG4gICAgcmV0dXJuIFR5cGVkQXJyYXkgJiYgdGhpbmcgaW5zdGFuY2VvZiBUeXBlZEFycmF5O1xuICB9O1xufSkodHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnICYmIGdldFByb3RvdHlwZU9mKFVpbnQ4QXJyYXkpKTtcblxuLyoqXG4gKiBGb3IgZWFjaCBlbnRyeSBpbiB0aGUgb2JqZWN0LCBjYWxsIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBrZXkgYW5kIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PGFueSwgYW55Pn0gb2JqIC0gVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAtIFRoZSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIGVudHJ5LlxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5jb25zdCBmb3JFYWNoRW50cnkgPSAob2JqLCBmbikgPT4ge1xuICBjb25zdCBnZW5lcmF0b3IgPSBvYmogJiYgb2JqW2l0ZXJhdG9yXTtcblxuICBjb25zdCBfaXRlcmF0b3IgPSBnZW5lcmF0b3IuY2FsbChvYmopO1xuXG4gIGxldCByZXN1bHQ7XG5cbiAgd2hpbGUgKChyZXN1bHQgPSBfaXRlcmF0b3IubmV4dCgpKSAmJiAhcmVzdWx0LmRvbmUpIHtcbiAgICBjb25zdCBwYWlyID0gcmVzdWx0LnZhbHVlO1xuICAgIGZuLmNhbGwob2JqLCBwYWlyWzBdLCBwYWlyWzFdKTtcbiAgfVxufTtcblxuLyoqXG4gKiBJdCB0YWtlcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBhbmQgYSBzdHJpbmcsIGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIGFsbCB0aGUgbWF0Y2hlc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWdFeHAgLSBUaGUgcmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIGFnYWluc3QuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIC0gVGhlIHN0cmluZyB0byBzZWFyY2guXG4gKlxuICogQHJldHVybnMge0FycmF5PGJvb2xlYW4+fVxuICovXG5jb25zdCBtYXRjaEFsbCA9IChyZWdFeHAsIHN0cikgPT4ge1xuICBsZXQgbWF0Y2hlcztcbiAgY29uc3QgYXJyID0gW107XG5cbiAgd2hpbGUgKChtYXRjaGVzID0gcmVnRXhwLmV4ZWMoc3RyKSkgIT09IG51bGwpIHtcbiAgICBhcnIucHVzaChtYXRjaGVzKTtcbiAgfVxuXG4gIHJldHVybiBhcnI7XG59O1xuXG4vKiBDaGVja2luZyBpZiB0aGUga2luZE9mVGVzdCBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBwYXNzZWQgYW4gSFRNTEZvcm1FbGVtZW50LiAqL1xuY29uc3QgaXNIVE1MRm9ybSA9IGtpbmRPZlRlc3QoJ0hUTUxGb3JtRWxlbWVudCcpO1xuXG5jb25zdCB0b0NhbWVsQ2FzZSA9IChzdHIpID0+IHtcbiAgcmV0dXJuIHN0ci50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xcc10oW2EtelxcZF0pKFxcdyopL2csIGZ1bmN0aW9uIHJlcGxhY2VyKG0sIHAxLCBwMikge1xuICAgIHJldHVybiBwMS50b1VwcGVyQ2FzZSgpICsgcDI7XG4gIH0pO1xufTtcblxuLyogQ3JlYXRpbmcgYSBmdW5jdGlvbiB0aGF0IHdpbGwgY2hlY2sgaWYgYW4gb2JqZWN0IGhhcyBhIHByb3BlcnR5LiAqL1xuY29uc3QgaGFzT3duUHJvcGVydHkgPSAoXG4gICh7IGhhc093blByb3BlcnR5IH0pID0+XG4gIChvYmosIHByb3ApID0+XG4gICAgaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApXG4pKE9iamVjdC5wcm90b3R5cGUpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgUmVnRXhwIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBSZWdFeHAgb2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNSZWdFeHAgPSBraW5kT2ZUZXN0KCdSZWdFeHAnKTtcblxuY29uc3QgcmVkdWNlRGVzY3JpcHRvcnMgPSAob2JqLCByZWR1Y2VyKSA9PiB7XG4gIGNvbnN0IGRlc2NyaXB0b3JzID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob2JqKTtcbiAgY29uc3QgcmVkdWNlZERlc2NyaXB0b3JzID0ge307XG5cbiAgZm9yRWFjaChkZXNjcmlwdG9ycywgKGRlc2NyaXB0b3IsIG5hbWUpID0+IHtcbiAgICBsZXQgcmV0O1xuICAgIGlmICgocmV0ID0gcmVkdWNlcihkZXNjcmlwdG9yLCBuYW1lLCBvYmopKSAhPT0gZmFsc2UpIHtcbiAgICAgIHJlZHVjZWREZXNjcmlwdG9yc1tuYW1lXSA9IHJldCB8fCBkZXNjcmlwdG9yO1xuICAgIH1cbiAgfSk7XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMob2JqLCByZWR1Y2VkRGVzY3JpcHRvcnMpO1xufTtcblxuLyoqXG4gKiBNYWtlcyBhbGwgbWV0aG9kcyByZWFkLW9ubHlcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqL1xuXG5jb25zdCBmcmVlemVNZXRob2RzID0gKG9iaikgPT4ge1xuICByZWR1Y2VEZXNjcmlwdG9ycyhvYmosIChkZXNjcmlwdG9yLCBuYW1lKSA9PiB7XG4gICAgLy8gc2tpcCByZXN0cmljdGVkIHByb3BzIGluIHN0cmljdCBtb2RlXG4gICAgaWYgKGlzRnVuY3Rpb24ob2JqKSAmJiBbJ2FyZ3VtZW50cycsICdjYWxsZXInLCAnY2FsbGVlJ10uaW5kZXhPZihuYW1lKSAhPT0gLTEpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IG9ialtuYW1lXTtcblxuICAgIGlmICghaXNGdW5jdGlvbih2YWx1ZSkpIHJldHVybjtcblxuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGZhbHNlO1xuXG4gICAgaWYgKCd3cml0YWJsZScgaW4gZGVzY3JpcHRvcikge1xuICAgICAgZGVzY3JpcHRvci53cml0YWJsZSA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghZGVzY3JpcHRvci5zZXQpIHtcbiAgICAgIGRlc2NyaXB0b3Iuc2V0ID0gKCkgPT4ge1xuICAgICAgICB0aHJvdyBFcnJvcihcIkNhbiBub3QgcmV3cml0ZSByZWFkLW9ubHkgbWV0aG9kICdcIiArIG5hbWUgKyBcIidcIik7XG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIGFuIGFycmF5IG9yIGEgZGVsaW1pdGVkIHN0cmluZyBpbnRvIGFuIG9iamVjdCBzZXQgd2l0aCB2YWx1ZXMgYXMga2V5cyBhbmQgdHJ1ZSBhcyB2YWx1ZXMuXG4gKiBVc2VmdWwgZm9yIGZhc3QgbWVtYmVyc2hpcCBjaGVja3MuXG4gKlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IGFycmF5T3JTdHJpbmcgLSBUaGUgYXJyYXkgb3Igc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZGVsaW1pdGVyIC0gVGhlIGRlbGltaXRlciB0byB1c2UgaWYgaW5wdXQgaXMgYSBzdHJpbmcuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBBbiBvYmplY3Qgd2l0aCBrZXlzIGZyb20gdGhlIGFycmF5IG9yIHN0cmluZywgdmFsdWVzIHNldCB0byB0cnVlLlxuICovXG5jb25zdCB0b09iamVjdFNldCA9IChhcnJheU9yU3RyaW5nLCBkZWxpbWl0ZXIpID0+IHtcbiAgY29uc3Qgb2JqID0ge307XG5cbiAgY29uc3QgZGVmaW5lID0gKGFycikgPT4ge1xuICAgIGFyci5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgb2JqW3ZhbHVlXSA9IHRydWU7XG4gICAgfSk7XG4gIH07XG5cbiAgaXNBcnJheShhcnJheU9yU3RyaW5nKSA/IGRlZmluZShhcnJheU9yU3RyaW5nKSA6IGRlZmluZShTdHJpbmcoYXJyYXlPclN0cmluZykuc3BsaXQoZGVsaW1pdGVyKSk7XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fTtcblxuY29uc3QgdG9GaW5pdGVOdW1iZXIgPSAodmFsdWUsIGRlZmF1bHRWYWx1ZSkgPT4ge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiBOdW1iZXIuaXNGaW5pdGUoKHZhbHVlID0gK3ZhbHVlKSkgPyB2YWx1ZSA6IGRlZmF1bHRWYWx1ZTtcbn07XG5cbi8qKlxuICogSWYgdGhlIHRoaW5nIGlzIGEgRm9ybURhdGEgb2JqZWN0LCByZXR1cm4gdHJ1ZSwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cbiAqXG4gKiBAcGFyYW0ge3Vua25vd259IHRoaW5nIC0gVGhlIHRoaW5nIHRvIGNoZWNrLlxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc1NwZWNDb21wbGlhbnRGb3JtKHRoaW5nKSB7XG4gIHJldHVybiAhIShcbiAgICB0aGluZyAmJlxuICAgIGlzRnVuY3Rpb24odGhpbmcuYXBwZW5kKSAmJlxuICAgIHRoaW5nW3RvU3RyaW5nVGFnXSA9PT0gJ0Zvcm1EYXRhJyAmJlxuICAgIHRoaW5nW2l0ZXJhdG9yXVxuICApO1xufVxuXG4vKipcbiAqIFJlY3Vyc2l2ZWx5IGNvbnZlcnRzIGFuIG9iamVjdCB0byBhIEpTT04tY29tcGF0aWJsZSBvYmplY3QsIGhhbmRsaW5nIGNpcmN1bGFyIHJlZmVyZW5jZXMgYW5kIEJ1ZmZlcnMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iaiAtIFRoZSBvYmplY3QgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBKU09OLWNvbXBhdGlibGUgb2JqZWN0LlxuICovXG5jb25zdCB0b0pTT05PYmplY3QgPSAob2JqKSA9PiB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IEFycmF5KDEwKTtcblxuICBjb25zdCB2aXNpdCA9IChzb3VyY2UsIGkpID0+IHtcbiAgICBpZiAoaXNPYmplY3Qoc291cmNlKSkge1xuICAgICAgaWYgKHN0YWNrLmluZGV4T2Yoc291cmNlKSA+PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy9CdWZmZXIgY2hlY2tcbiAgICAgIGlmIChpc0J1ZmZlcihzb3VyY2UpKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2U7XG4gICAgICB9XG5cbiAgICAgIGlmICghKCd0b0pTT04nIGluIHNvdXJjZSkpIHtcbiAgICAgICAgc3RhY2tbaV0gPSBzb3VyY2U7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGlzQXJyYXkoc291cmNlKSA/IFtdIDoge307XG5cbiAgICAgICAgZm9yRWFjaChzb3VyY2UsICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVkdWNlZFZhbHVlID0gdmlzaXQodmFsdWUsIGkgKyAxKTtcbiAgICAgICAgICAhaXNVbmRlZmluZWQocmVkdWNlZFZhbHVlKSAmJiAodGFyZ2V0W2tleV0gPSByZWR1Y2VkVmFsdWUpO1xuICAgICAgICB9KTtcblxuICAgICAgICBzdGFja1tpXSA9IHVuZGVmaW5lZDtcblxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzb3VyY2U7XG4gIH07XG5cbiAgcmV0dXJuIHZpc2l0KG9iaiwgMCk7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgaWYgYSB2YWx1ZSBpcyBhbiBhc3luYyBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0geyp9IHRoaW5nIC0gVGhlIHZhbHVlIHRvIHRlc3QuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBhc3luYyBmdW5jdGlvbiwgb3RoZXJ3aXNlIGZhbHNlLlxuICovXG5jb25zdCBpc0FzeW5jRm4gPSBraW5kT2ZUZXN0KCdBc3luY0Z1bmN0aW9uJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiBhIHZhbHVlIGlzIHRoZW5hYmxlIChoYXMgdGhlbiBhbmQgY2F0Y2ggbWV0aG9kcykuXG4gKlxuICogQHBhcmFtIHsqfSB0aGluZyAtIFRoZSB2YWx1ZSB0byB0ZXN0LlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgdGhlbmFibGUsIG90aGVyd2lzZSBmYWxzZS5cbiAqL1xuY29uc3QgaXNUaGVuYWJsZSA9ICh0aGluZykgPT5cbiAgdGhpbmcgJiZcbiAgKGlzT2JqZWN0KHRoaW5nKSB8fCBpc0Z1bmN0aW9uKHRoaW5nKSkgJiZcbiAgaXNGdW5jdGlvbih0aGluZy50aGVuKSAmJlxuICBpc0Z1bmN0aW9uKHRoaW5nLmNhdGNoKTtcblxuLy8gb3JpZ2luYWwgY29kZVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL0RpZ2l0YWxCcmFpbkpTL0F4aW9zUHJvbWlzZS9ibG9iLzE2ZGVhYjEzNzEwZWMwOTc3OTkyMjEzMWYzZmE1OTU0MzIwZjgzYWIvbGliL3V0aWxzLmpzI0wxMS1MMzRcblxuLyoqXG4gKiBQcm92aWRlcyBhIGNyb3NzLXBsYXRmb3JtIHNldEltbWVkaWF0ZSBpbXBsZW1lbnRhdGlvbi5cbiAqIFVzZXMgbmF0aXZlIHNldEltbWVkaWF0ZSBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBmYWxscyBiYWNrIHRvIHBvc3RNZXNzYWdlIG9yIHNldFRpbWVvdXQuXG4gKlxuICogQHBhcmFtIHtib29sZWFufSBzZXRJbW1lZGlhdGVTdXBwb3J0ZWQgLSBXaGV0aGVyIHNldEltbWVkaWF0ZSBpcyBzdXBwb3J0ZWQuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHBvc3RNZXNzYWdlU3VwcG9ydGVkIC0gV2hldGhlciBwb3N0TWVzc2FnZSBpcyBzdXBwb3J0ZWQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgZnVuY3Rpb24gdG8gc2NoZWR1bGUgYSBjYWxsYmFjayBhc3luY2hyb25vdXNseS5cbiAqL1xuY29uc3QgX3NldEltbWVkaWF0ZSA9ICgoc2V0SW1tZWRpYXRlU3VwcG9ydGVkLCBwb3N0TWVzc2FnZVN1cHBvcnRlZCkgPT4ge1xuICBpZiAoc2V0SW1tZWRpYXRlU3VwcG9ydGVkKSB7XG4gICAgcmV0dXJuIHNldEltbWVkaWF0ZTtcbiAgfVxuXG4gIHJldHVybiBwb3N0TWVzc2FnZVN1cHBvcnRlZFxuICAgID8gKCh0b2tlbiwgY2FsbGJhY2tzKSA9PiB7XG4gICAgICAgIF9nbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgICAnbWVzc2FnZScsXG4gICAgICAgICAgKHsgc291cmNlLCBkYXRhIH0pID0+IHtcbiAgICAgICAgICAgIGlmIChzb3VyY2UgPT09IF9nbG9iYWwgJiYgZGF0YSA9PT0gdG9rZW4pIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2tzLmxlbmd0aCAmJiBjYWxsYmFja3Muc2hpZnQoKSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmFsc2VcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gKGNiKSA9PiB7XG4gICAgICAgICAgY2FsbGJhY2tzLnB1c2goY2IpO1xuICAgICAgICAgIF9nbG9iYWwucG9zdE1lc3NhZ2UodG9rZW4sICcqJyk7XG4gICAgICAgIH07XG4gICAgICB9KShgYXhpb3NAJHtNYXRoLnJhbmRvbSgpfWAsIFtdKVxuICAgIDogKGNiKSA9PiBzZXRUaW1lb3V0KGNiKTtcbn0pKHR5cGVvZiBzZXRJbW1lZGlhdGUgPT09ICdmdW5jdGlvbicsIGlzRnVuY3Rpb24oX2dsb2JhbC5wb3N0TWVzc2FnZSkpO1xuXG4vKipcbiAqIFNjaGVkdWxlcyBhIG1pY3JvdGFzayBvciBhc3luY2hyb25vdXMgY2FsbGJhY2sgYXMgc29vbiBhcyBwb3NzaWJsZS5cbiAqIFVzZXMgcXVldWVNaWNyb3Rhc2sgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgZmFsbHMgYmFjayB0byBwcm9jZXNzLm5leHRUaWNrIG9yIF9zZXRJbW1lZGlhdGUuXG4gKlxuICogQHR5cGUge0Z1bmN0aW9ufVxuICovXG5jb25zdCBhc2FwID1cbiAgdHlwZW9mIHF1ZXVlTWljcm90YXNrICE9PSAndW5kZWZpbmVkJ1xuICAgID8gcXVldWVNaWNyb3Rhc2suYmluZChfZ2xvYmFsKVxuICAgIDogKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBwcm9jZXNzLm5leHRUaWNrKSB8fCBfc2V0SW1tZWRpYXRlO1xuXG4vLyAqKioqKioqKioqKioqKioqKioqKipcblxuY29uc3QgaXNJdGVyYWJsZSA9ICh0aGluZykgPT4gdGhpbmcgIT0gbnVsbCAmJiBpc0Z1bmN0aW9uKHRoaW5nW2l0ZXJhdG9yXSk7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgaXNBcnJheSxcbiAgaXNBcnJheUJ1ZmZlcixcbiAgaXNCdWZmZXIsXG4gIGlzRm9ybURhdGEsXG4gIGlzQXJyYXlCdWZmZXJWaWV3LFxuICBpc1N0cmluZyxcbiAgaXNOdW1iZXIsXG4gIGlzQm9vbGVhbixcbiAgaXNPYmplY3QsXG4gIGlzUGxhaW5PYmplY3QsXG4gIGlzRW1wdHlPYmplY3QsXG4gIGlzUmVhZGFibGVTdHJlYW0sXG4gIGlzUmVxdWVzdCxcbiAgaXNSZXNwb25zZSxcbiAgaXNIZWFkZXJzLFxuICBpc1VuZGVmaW5lZCxcbiAgaXNEYXRlLFxuICBpc0ZpbGUsXG4gIGlzUmVhY3ROYXRpdmVCbG9iLFxuICBpc1JlYWN0TmF0aXZlLFxuICBpc0Jsb2IsXG4gIGlzUmVnRXhwLFxuICBpc0Z1bmN0aW9uLFxuICBpc1N0cmVhbSxcbiAgaXNVUkxTZWFyY2hQYXJhbXMsXG4gIGlzVHlwZWRBcnJheSxcbiAgaXNGaWxlTGlzdCxcbiAgZm9yRWFjaCxcbiAgbWVyZ2UsXG4gIGV4dGVuZCxcbiAgdHJpbSxcbiAgc3RyaXBCT00sXG4gIGluaGVyaXRzLFxuICB0b0ZsYXRPYmplY3QsXG4gIGtpbmRPZixcbiAga2luZE9mVGVzdCxcbiAgZW5kc1dpdGgsXG4gIHRvQXJyYXksXG4gIGZvckVhY2hFbnRyeSxcbiAgbWF0Y2hBbGwsXG4gIGlzSFRNTEZvcm0sXG4gIGhhc093blByb3BlcnR5LFxuICBoYXNPd25Qcm9wOiBoYXNPd25Qcm9wZXJ0eSwgLy8gYW4gYWxpYXMgdG8gYXZvaWQgRVNMaW50IG5vLXByb3RvdHlwZS1idWlsdGlucyBkZXRlY3Rpb25cbiAgcmVkdWNlRGVzY3JpcHRvcnMsXG4gIGZyZWV6ZU1ldGhvZHMsXG4gIHRvT2JqZWN0U2V0LFxuICB0b0NhbWVsQ2FzZSxcbiAgbm9vcCxcbiAgdG9GaW5pdGVOdW1iZXIsXG4gIGZpbmRLZXksXG4gIGdsb2JhbDogX2dsb2JhbCxcbiAgaXNDb250ZXh0RGVmaW5lZCxcbiAgaXNTcGVjQ29tcGxpYW50Rm9ybSxcbiAgdG9KU09OT2JqZWN0LFxuICBpc0FzeW5jRm4sXG4gIGlzVGhlbmFibGUsXG4gIHNldEltbWVkaWF0ZTogX3NldEltbWVkaWF0ZSxcbiAgYXNhcCxcbiAgaXNJdGVyYWJsZSxcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5cbmNsYXNzIEF4aW9zRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHN0YXRpYyBmcm9tKGVycm9yLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlLCBjdXN0b21Qcm9wcykge1xuICAgIGNvbnN0IGF4aW9zRXJyb3IgPSBuZXcgQXhpb3NFcnJvcihlcnJvci5tZXNzYWdlLCBjb2RlIHx8IGVycm9yLmNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UpO1xuICAgIGF4aW9zRXJyb3IuY2F1c2UgPSBlcnJvcjtcbiAgICBheGlvc0Vycm9yLm5hbWUgPSBlcnJvci5uYW1lO1xuXG4gICAgLy8gUHJlc2VydmUgc3RhdHVzIGZyb20gdGhlIG9yaWdpbmFsIGVycm9yIGlmIG5vdCBhbHJlYWR5IHNldCBmcm9tIHJlc3BvbnNlXG4gICAgaWYgKGVycm9yLnN0YXR1cyAhPSBudWxsICYmIGF4aW9zRXJyb3Iuc3RhdHVzID09IG51bGwpIHtcbiAgICAgIGF4aW9zRXJyb3Iuc3RhdHVzID0gZXJyb3Iuc3RhdHVzO1xuICAgIH1cblxuICAgIGN1c3RvbVByb3BzICYmIE9iamVjdC5hc3NpZ24oYXhpb3NFcnJvciwgY3VzdG9tUHJvcHMpO1xuICAgIHJldHVybiBheGlvc0Vycm9yO1xuICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gRXJyb3Igd2l0aCB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UsIGNvbmZpZywgZXJyb3IgY29kZSwgcmVxdWVzdCBhbmQgcmVzcG9uc2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2NvZGVdIFRoZSBlcnJvciBjb2RlIChmb3IgZXhhbXBsZSwgJ0VDT05OQUJPUlRFRCcpLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbY29uZmlnXSBUaGUgY29uZmlnLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbcmVxdWVzdF0gVGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtyZXNwb25zZV0gVGhlIHJlc3BvbnNlLlxuICAgICAqXG4gICAgICogQHJldHVybnMge0Vycm9yfSBUaGUgY3JlYXRlZCBlcnJvci5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgIFxuICAgICAgLy8gTWFrZSBtZXNzYWdlIGVudW1lcmFibGUgdG8gbWFpbnRhaW4gYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgICAgLy8gVGhlIG5hdGl2ZSBFcnJvciBjb25zdHJ1Y3RvciBzZXRzIG1lc3NhZ2UgYXMgbm9uLWVudW1lcmFibGUsXG4gICAgICAvLyBidXQgYXhpb3MgPCB2MS4xMy4zIGhhZCBpdCBhcyBlbnVtZXJhYmxlXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ21lc3NhZ2UnLCB7XG4gICAgICAgICAgdmFsdWU6IG1lc3NhZ2UsXG4gICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICB0aGlzLm5hbWUgPSAnQXhpb3NFcnJvcic7XG4gICAgICB0aGlzLmlzQXhpb3NFcnJvciA9IHRydWU7XG4gICAgICBjb2RlICYmICh0aGlzLmNvZGUgPSBjb2RlKTtcbiAgICAgIGNvbmZpZyAmJiAodGhpcy5jb25maWcgPSBjb25maWcpO1xuICAgICAgcmVxdWVzdCAmJiAodGhpcy5yZXF1ZXN0ID0gcmVxdWVzdCk7XG4gICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gICAgICAgICAgdGhpcy5zdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICB9XG4gICAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gU3RhbmRhcmRcbiAgICAgIG1lc3NhZ2U6IHRoaXMubWVzc2FnZSxcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIC8vIE1pY3Jvc29mdFxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICBudW1iZXI6IHRoaXMubnVtYmVyLFxuICAgICAgLy8gTW96aWxsYVxuICAgICAgZmlsZU5hbWU6IHRoaXMuZmlsZU5hbWUsXG4gICAgICBsaW5lTnVtYmVyOiB0aGlzLmxpbmVOdW1iZXIsXG4gICAgICBjb2x1bW5OdW1iZXI6IHRoaXMuY29sdW1uTnVtYmVyLFxuICAgICAgc3RhY2s6IHRoaXMuc3RhY2ssXG4gICAgICAvLyBBeGlvc1xuICAgICAgY29uZmlnOiB1dGlscy50b0pTT05PYmplY3QodGhpcy5jb25maWcpLFxuICAgICAgY29kZTogdGhpcy5jb2RlLFxuICAgICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICB9O1xuICB9XG59XG5cbi8vIFRoaXMgY2FuIGJlIGNoYW5nZWQgdG8gc3RhdGljIHByb3BlcnRpZXMgYXMgc29vbiBhcyB0aGUgcGFyc2VyIG9wdGlvbnMgaW4gLmVzbGludC5janMgYXJlIHVwZGF0ZWQuXG5BeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OX1ZBTFVFID0gJ0VSUl9CQURfT1BUSU9OX1ZBTFVFJztcbkF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT04gPSAnRVJSX0JBRF9PUFRJT04nO1xuQXhpb3NFcnJvci5FQ09OTkFCT1JURUQgPSAnRUNPTk5BQk9SVEVEJztcbkF4aW9zRXJyb3IuRVRJTUVET1VUID0gJ0VUSU1FRE9VVCc7XG5BeGlvc0Vycm9yLkVSUl9ORVRXT1JLID0gJ0VSUl9ORVRXT1JLJztcbkF4aW9zRXJyb3IuRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUyA9ICdFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTJztcbkF4aW9zRXJyb3IuRVJSX0RFUFJFQ0FURUQgPSAnRVJSX0RFUFJFQ0FURUQnO1xuQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFID0gJ0VSUl9CQURfUkVTUE9OU0UnO1xuQXhpb3NFcnJvci5FUlJfQkFEX1JFUVVFU1QgPSAnRVJSX0JBRF9SRVFVRVNUJztcbkF4aW9zRXJyb3IuRVJSX0NBTkNFTEVEID0gJ0VSUl9DQU5DRUxFRCc7XG5BeGlvc0Vycm9yLkVSUl9OT1RfU1VQUE9SVCA9ICdFUlJfTk9UX1NVUFBPUlQnO1xuQXhpb3NFcnJvci5FUlJfSU5WQUxJRF9VUkwgPSAnRVJSX0lOVkFMSURfVVJMJztcblxuZXhwb3J0IGRlZmF1bHQgQXhpb3NFcnJvcjtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4uL2NvcmUvQXhpb3NFcnJvci5qcyc7XG4vLyB0ZW1wb3JhcnkgaG90Zml4IHRvIGF2b2lkIGNpcmN1bGFyIHJlZmVyZW5jZXMgdW50aWwgQXhpb3NVUkxTZWFyY2hQYXJhbXMgaXMgcmVmYWN0b3JlZFxuaW1wb3J0IFBsYXRmb3JtRm9ybURhdGEgZnJvbSAnLi4vcGxhdGZvcm0vbm9kZS9jbGFzc2VzL0Zvcm1EYXRhLmpzJztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIHRoZSBnaXZlbiB0aGluZyBpcyBhIGFycmF5IG9yIGpzIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGhpbmcgLSBUaGUgb2JqZWN0IG9yIGFycmF5IHRvIGJlIHZpc2l0ZWQuXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzVmlzaXRhYmxlKHRoaW5nKSB7XG4gIHJldHVybiB1dGlscy5pc1BsYWluT2JqZWN0KHRoaW5nKSB8fCB1dGlscy5pc0FycmF5KHRoaW5nKTtcbn1cblxuLyoqXG4gKiBJdCByZW1vdmVzIHRoZSBicmFja2V0cyBmcm9tIHRoZSBlbmQgb2YgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgcGFyYW1ldGVyLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSBrZXkgd2l0aG91dCB0aGUgYnJhY2tldHMuXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUJyYWNrZXRzKGtleSkge1xuICByZXR1cm4gdXRpbHMuZW5kc1dpdGgoa2V5LCAnW10nKSA/IGtleS5zbGljZSgwLCAtMikgOiBrZXk7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBwYXRoLCBhIGtleSwgYW5kIGEgYm9vbGVhbiwgYW5kIHJldHVybnMgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIFRoZSBwYXRoIHRvIHRoZSBjdXJyZW50IGtleS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBjdXJyZW50IG9iamVjdCBiZWluZyBpdGVyYXRlZCBvdmVyLlxuICogQHBhcmFtIHtzdHJpbmd9IGRvdHMgLSBJZiB0cnVlLCB0aGUga2V5IHdpbGwgYmUgcmVuZGVyZWQgd2l0aCBkb3RzIGluc3RlYWQgb2YgYnJhY2tldHMuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIHBhdGggdG8gdGhlIGN1cnJlbnQga2V5LlxuICovXG5mdW5jdGlvbiByZW5kZXJLZXkocGF0aCwga2V5LCBkb3RzKSB7XG4gIGlmICghcGF0aCkgcmV0dXJuIGtleTtcbiAgcmV0dXJuIHBhdGhcbiAgICAuY29uY2F0KGtleSlcbiAgICAubWFwKGZ1bmN0aW9uIGVhY2godG9rZW4sIGkpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgdG9rZW4gPSByZW1vdmVCcmFja2V0cyh0b2tlbik7XG4gICAgICByZXR1cm4gIWRvdHMgJiYgaSA/ICdbJyArIHRva2VuICsgJ10nIDogdG9rZW47XG4gICAgfSlcbiAgICAuam9pbihkb3RzID8gJy4nIDogJycpO1xufVxuXG4vKipcbiAqIElmIHRoZSBhcnJheSBpcyBhbiBhcnJheSBhbmQgbm9uZSBvZiBpdHMgZWxlbWVudHMgYXJlIHZpc2l0YWJsZSwgdGhlbiBpdCdzIGEgZmxhdCBhcnJheS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PGFueT59IGFyciAtIFRoZSBhcnJheSB0byBjaGVja1xuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0ZsYXRBcnJheShhcnIpIHtcbiAgcmV0dXJuIHV0aWxzLmlzQXJyYXkoYXJyKSAmJiAhYXJyLnNvbWUoaXNWaXNpdGFibGUpO1xufVxuXG5jb25zdCBwcmVkaWNhdGVzID0gdXRpbHMudG9GbGF0T2JqZWN0KHV0aWxzLCB7fSwgbnVsbCwgZnVuY3Rpb24gZmlsdGVyKHByb3ApIHtcbiAgcmV0dXJuIC9eaXNbQS1aXS8udGVzdChwcm9wKTtcbn0pO1xuXG4vKipcbiAqIENvbnZlcnQgYSBkYXRhIG9iamVjdCB0byBGb3JtRGF0YVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEBwYXJhbSB7P09iamVjdH0gW2Zvcm1EYXRhXVxuICogQHBhcmFtIHs/T2JqZWN0fSBbb3B0aW9uc11cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLnZpc2l0b3JdXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLm1ldGFUb2tlbnMgPSB0cnVlXVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5kb3RzID0gZmFsc2VdXG4gKiBAcGFyYW0gez9Cb29sZWFufSBbb3B0aW9ucy5pbmRleGVzID0gZmFsc2VdXG4gKlxuICogQHJldHVybnMge09iamVjdH1cbiAqKi9cblxuLyoqXG4gKiBJdCBjb252ZXJ0cyBhbiBvYmplY3QgaW50byBhIEZvcm1EYXRhIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PGFueSwgYW55Pn0gb2JqIC0gVGhlIG9iamVjdCB0byBjb252ZXJ0IHRvIGZvcm0gZGF0YS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtRGF0YSAtIFRoZSBGb3JtRGF0YSBvYmplY3QgdG8gYXBwZW5kIHRvLlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBhbnk+fSBvcHRpb25zXG4gKlxuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24gdG9Gb3JtRGF0YShvYmosIGZvcm1EYXRhLCBvcHRpb25zKSB7XG4gIGlmICghdXRpbHMuaXNPYmplY3Qob2JqKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3RhcmdldCBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIGZvcm1EYXRhID0gZm9ybURhdGEgfHwgbmV3IChQbGF0Zm9ybUZvcm1EYXRhIHx8IEZvcm1EYXRhKSgpO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBvcHRpb25zID0gdXRpbHMudG9GbGF0T2JqZWN0KFxuICAgIG9wdGlvbnMsXG4gICAge1xuICAgICAgbWV0YVRva2VuczogdHJ1ZSxcbiAgICAgIGRvdHM6IGZhbHNlLFxuICAgICAgaW5kZXhlczogZmFsc2UsXG4gICAgfSxcbiAgICBmYWxzZSxcbiAgICBmdW5jdGlvbiBkZWZpbmVkKG9wdGlvbiwgc291cmNlKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgICAgIHJldHVybiAhdXRpbHMuaXNVbmRlZmluZWQoc291cmNlW29wdGlvbl0pO1xuICAgIH1cbiAgKTtcblxuICBjb25zdCBtZXRhVG9rZW5zID0gb3B0aW9ucy5tZXRhVG9rZW5zO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgY29uc3QgdmlzaXRvciA9IG9wdGlvbnMudmlzaXRvciB8fCBkZWZhdWx0VmlzaXRvcjtcbiAgY29uc3QgZG90cyA9IG9wdGlvbnMuZG90cztcbiAgY29uc3QgaW5kZXhlcyA9IG9wdGlvbnMuaW5kZXhlcztcbiAgY29uc3QgX0Jsb2IgPSBvcHRpb25zLkJsb2IgfHwgKHR5cGVvZiBCbG9iICE9PSAndW5kZWZpbmVkJyAmJiBCbG9iKTtcbiAgY29uc3QgdXNlQmxvYiA9IF9CbG9iICYmIHV0aWxzLmlzU3BlY0NvbXBsaWFudEZvcm0oZm9ybURhdGEpO1xuXG4gIGlmICghdXRpbHMuaXNGdW5jdGlvbih2aXNpdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3Zpc2l0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cblxuICBmdW5jdGlvbiBjb252ZXJ0VmFsdWUodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHJldHVybiAnJztcblxuICAgIGlmICh1dGlscy5pc0RhdGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWUudG9JU09TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXNCb29sZWFuKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgaWYgKCF1c2VCbG9iICYmIHV0aWxzLmlzQmxvYih2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdCbG9iIGlzIG5vdCBzdXBwb3J0ZWQuIFVzZSBhIEJ1ZmZlciBpbnN0ZWFkLicpO1xuICAgIH1cblxuICAgIGlmICh1dGlscy5pc0FycmF5QnVmZmVyKHZhbHVlKSB8fCB1dGlscy5pc1R5cGVkQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdXNlQmxvYiAmJiB0eXBlb2YgQmxvYiA9PT0gJ2Z1bmN0aW9uJyA/IG5ldyBCbG9iKFt2YWx1ZV0pIDogQnVmZmVyLmZyb20odmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZhdWx0IHZpc2l0b3IuXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd8TnVtYmVyfSBrZXlcbiAgICogQHBhcmFtIHtBcnJheTxTdHJpbmd8TnVtYmVyPn0gcGF0aFxuICAgKiBAdGhpcyB7Rm9ybURhdGF9XG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSByZXR1cm4gdHJ1ZSB0byB2aXNpdCB0aGUgZWFjaCBwcm9wIG9mIHRoZSB2YWx1ZSByZWN1cnNpdmVseVxuICAgKi9cbiAgZnVuY3Rpb24gZGVmYXVsdFZpc2l0b3IodmFsdWUsIGtleSwgcGF0aCkge1xuICAgIGxldCBhcnIgPSB2YWx1ZTtcblxuICAgIGlmICh1dGlscy5pc1JlYWN0TmF0aXZlKGZvcm1EYXRhKSAmJiB1dGlscy5pc1JlYWN0TmF0aXZlQmxvYih2YWx1ZSkpIHtcbiAgICAgIGZvcm1EYXRhLmFwcGVuZChyZW5kZXJLZXkocGF0aCwga2V5LCBkb3RzKSwgY29udmVydFZhbHVlKHZhbHVlKSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlICYmICFwYXRoICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmICh1dGlscy5lbmRzV2l0aChrZXksICd7fScpKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBrZXkgPSBtZXRhVG9rZW5zID8ga2V5IDoga2V5LnNsaWNlKDAsIC0yKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIHZhbHVlID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgKHV0aWxzLmlzQXJyYXkodmFsdWUpICYmIGlzRmxhdEFycmF5KHZhbHVlKSkgfHxcbiAgICAgICAgKCh1dGlscy5pc0ZpbGVMaXN0KHZhbHVlKSB8fCB1dGlscy5lbmRzV2l0aChrZXksICdbXScpKSAmJiAoYXJyID0gdXRpbHMudG9BcnJheSh2YWx1ZSkpKVxuICAgICAgKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBrZXkgPSByZW1vdmVCcmFja2V0cyhrZXkpO1xuXG4gICAgICAgIGFyci5mb3JFYWNoKGZ1bmN0aW9uIGVhY2goZWwsIGluZGV4KSB7XG4gICAgICAgICAgISh1dGlscy5pc1VuZGVmaW5lZChlbCkgfHwgZWwgPT09IG51bGwpICYmXG4gICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoXG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXN0ZWQtdGVybmFyeVxuICAgICAgICAgICAgICBpbmRleGVzID09PSB0cnVlXG4gICAgICAgICAgICAgICAgPyByZW5kZXJLZXkoW2tleV0sIGluZGV4LCBkb3RzKVxuICAgICAgICAgICAgICAgIDogaW5kZXhlcyA9PT0gbnVsbFxuICAgICAgICAgICAgICAgICAgPyBrZXlcbiAgICAgICAgICAgICAgICAgIDoga2V5ICsgJ1tdJyxcbiAgICAgICAgICAgICAgY29udmVydFZhbHVlKGVsKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNWaXNpdGFibGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQocmVuZGVyS2V5KHBhdGgsIGtleSwgZG90cyksIGNvbnZlcnRWYWx1ZSh2YWx1ZSkpO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3Qgc3RhY2sgPSBbXTtcblxuICBjb25zdCBleHBvc2VkSGVscGVycyA9IE9iamVjdC5hc3NpZ24ocHJlZGljYXRlcywge1xuICAgIGRlZmF1bHRWaXNpdG9yLFxuICAgIGNvbnZlcnRWYWx1ZSxcbiAgICBpc1Zpc2l0YWJsZSxcbiAgfSk7XG5cbiAgZnVuY3Rpb24gYnVpbGQodmFsdWUsIHBhdGgpIHtcbiAgICBpZiAodXRpbHMuaXNVbmRlZmluZWQodmFsdWUpKSByZXR1cm47XG5cbiAgICBpZiAoc3RhY2suaW5kZXhPZih2YWx1ZSkgIT09IC0xKSB7XG4gICAgICB0aHJvdyBFcnJvcignQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICcgKyBwYXRoLmpvaW4oJy4nKSk7XG4gICAgfVxuXG4gICAgc3RhY2sucHVzaCh2YWx1ZSk7XG5cbiAgICB1dGlscy5mb3JFYWNoKHZhbHVlLCBmdW5jdGlvbiBlYWNoKGVsLCBrZXkpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9XG4gICAgICAgICEodXRpbHMuaXNVbmRlZmluZWQoZWwpIHx8IGVsID09PSBudWxsKSAmJlxuICAgICAgICB2aXNpdG9yLmNhbGwoZm9ybURhdGEsIGVsLCB1dGlscy5pc1N0cmluZyhrZXkpID8ga2V5LnRyaW0oKSA6IGtleSwgcGF0aCwgZXhwb3NlZEhlbHBlcnMpO1xuXG4gICAgICBpZiAocmVzdWx0ID09PSB0cnVlKSB7XG4gICAgICAgIGJ1aWxkKGVsLCBwYXRoID8gcGF0aC5jb25jYXQoa2V5KSA6IFtrZXldKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHN0YWNrLnBvcCgpO1xuICB9XG5cbiAgaWYgKCF1dGlscy5pc09iamVjdChvYmopKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZGF0YSBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICB9XG5cbiAgYnVpbGQob2JqKTtcblxuICByZXR1cm4gZm9ybURhdGE7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHRvRm9ybURhdGE7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB0b0Zvcm1EYXRhIGZyb20gJy4vdG9Gb3JtRGF0YS5qcyc7XG5cbi8qKlxuICogSXQgZW5jb2RlcyBhIHN0cmluZyBieSByZXBsYWNpbmcgYWxsIGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90IGluIHRoZSB1bnJlc2VydmVkIHNldCB3aXRoXG4gKiB0aGVpciBwZXJjZW50LWVuY29kZWQgZXF1aXZhbGVudHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIC0gVGhlIHN0cmluZyB0byBlbmNvZGUuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGVuY29kZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBlbmNvZGUoc3RyKSB7XG4gIGNvbnN0IGNoYXJNYXAgPSB7XG4gICAgJyEnOiAnJTIxJyxcbiAgICBcIidcIjogJyUyNycsXG4gICAgJygnOiAnJTI4JyxcbiAgICAnKSc6ICclMjknLFxuICAgICd+JzogJyU3RScsXG4gICAgJyUyMCc6ICcrJyxcbiAgICAnJTAwJzogJ1xceDAwJyxcbiAgfTtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHIpLnJlcGxhY2UoL1shJygpfl18JTIwfCUwMC9nLCBmdW5jdGlvbiByZXBsYWNlcihtYXRjaCkge1xuICAgIHJldHVybiBjaGFyTWFwW21hdGNoXTtcbiAgfSk7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBwYXJhbXMgb2JqZWN0IGFuZCBjb252ZXJ0cyBpdCB0byBhIEZvcm1EYXRhIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgYW55Pn0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgdG8gYmUgY29udmVydGVkIHRvIGEgRm9ybURhdGEgb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBhbnk+fSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgb2JqZWN0IHBhc3NlZCB0byB0aGUgQXhpb3MgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIEF4aW9zVVJMU2VhcmNoUGFyYW1zKHBhcmFtcywgb3B0aW9ucykge1xuICB0aGlzLl9wYWlycyA9IFtdO1xuXG4gIHBhcmFtcyAmJiB0b0Zvcm1EYXRhKHBhcmFtcywgdGhpcywgb3B0aW9ucyk7XG59XG5cbmNvbnN0IHByb3RvdHlwZSA9IEF4aW9zVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZTtcblxucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uIGFwcGVuZChuYW1lLCB2YWx1ZSkge1xuICB0aGlzLl9wYWlycy5wdXNoKFtuYW1lLCB2YWx1ZV0pO1xufTtcblxucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoZW5jb2Rlcikge1xuICBjb25zdCBfZW5jb2RlID0gZW5jb2RlclxuICAgID8gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBlbmNvZGVyLmNhbGwodGhpcywgdmFsdWUsIGVuY29kZSk7XG4gICAgICB9XG4gICAgOiBlbmNvZGU7XG5cbiAgcmV0dXJuIHRoaXMuX3BhaXJzXG4gICAgLm1hcChmdW5jdGlvbiBlYWNoKHBhaXIpIHtcbiAgICAgIHJldHVybiBfZW5jb2RlKHBhaXJbMF0pICsgJz0nICsgX2VuY29kZShwYWlyWzFdKTtcbiAgICB9LCAnJylcbiAgICAuam9pbignJicpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgQXhpb3NVUkxTZWFyY2hQYXJhbXM7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgQXhpb3NVUkxTZWFyY2hQYXJhbXMgZnJvbSAnLi4vaGVscGVycy9BeGlvc1VSTFNlYXJjaFBhcmFtcy5qcyc7XG5cbi8qKlxuICogSXQgcmVwbGFjZXMgVVJMLWVuY29kZWQgZm9ybXMgb2YgYDpgLCBgJGAsIGAsYCwgYW5kIHNwYWNlcyB3aXRoXG4gKiB0aGVpciBwbGFpbiBjb3VudGVycGFydHMgKGA6YCwgYCRgLCBgLGAsIGArYCkuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbCBUaGUgdmFsdWUgdG8gYmUgZW5jb2RlZC5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZW5jb2RlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZW5jb2RlKHZhbCkge1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHZhbClcbiAgICAucmVwbGFjZSgvJTNBL2dpLCAnOicpXG4gICAgLnJlcGxhY2UoLyUyNC9nLCAnJCcpXG4gICAgLnJlcGxhY2UoLyUyQy9naSwgJywnKVxuICAgIC5yZXBsYWNlKC8lMjAvZywgJysnKTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIFVSTCBieSBhcHBlbmRpbmcgcGFyYW1zIHRvIHRoZSBlbmRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBiYXNlIG9mIHRoZSB1cmwgKGUuZy4sIGh0dHA6Ly93d3cuZ29vZ2xlLmNvbSlcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcGFyYW1zXSBUaGUgcGFyYW1zIHRvIGJlIGFwcGVuZGVkXG4gKiBAcGFyYW0gez8ob2JqZWN0fEZ1bmN0aW9uKX0gb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgdXJsXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkVVJMKHVybCwgcGFyYW1zLCBvcHRpb25zKSB7XG4gIGlmICghcGFyYW1zKSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuXG4gIGNvbnN0IF9lbmNvZGUgPSAob3B0aW9ucyAmJiBvcHRpb25zLmVuY29kZSkgfHwgZW5jb2RlO1xuXG4gIGNvbnN0IF9vcHRpb25zID0gdXRpbHMuaXNGdW5jdGlvbihvcHRpb25zKVxuICAgID8ge1xuICAgICAgICBzZXJpYWxpemU6IG9wdGlvbnMsXG4gICAgICB9XG4gICAgOiBvcHRpb25zO1xuXG4gIGNvbnN0IHNlcmlhbGl6ZUZuID0gX29wdGlvbnMgJiYgX29wdGlvbnMuc2VyaWFsaXplO1xuXG4gIGxldCBzZXJpYWxpemVkUGFyYW1zO1xuXG4gIGlmIChzZXJpYWxpemVGbikge1xuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSBzZXJpYWxpemVGbihwYXJhbXMsIF9vcHRpb25zKTtcbiAgfSBlbHNlIHtcbiAgICBzZXJpYWxpemVkUGFyYW1zID0gdXRpbHMuaXNVUkxTZWFyY2hQYXJhbXMocGFyYW1zKVxuICAgICAgPyBwYXJhbXMudG9TdHJpbmcoKVxuICAgICAgOiBuZXcgQXhpb3NVUkxTZWFyY2hQYXJhbXMocGFyYW1zLCBfb3B0aW9ucykudG9TdHJpbmcoX2VuY29kZSk7XG4gIH1cblxuICBpZiAoc2VyaWFsaXplZFBhcmFtcykge1xuICAgIGNvbnN0IGhhc2htYXJrSW5kZXggPSB1cmwuaW5kZXhPZignIycpO1xuXG4gICAgaWYgKGhhc2htYXJrSW5kZXggIT09IC0xKSB7XG4gICAgICB1cmwgPSB1cmwuc2xpY2UoMCwgaGFzaG1hcmtJbmRleCk7XG4gICAgfVxuICAgIHVybCArPSAodXJsLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJicpICsgc2VyaWFsaXplZFBhcmFtcztcbiAgfVxuXG4gIHJldHVybiB1cmw7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5cbmNsYXNzIEludGVyY2VwdG9yTWFuYWdlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaGFuZGxlcnMgPSBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBuZXcgaW50ZXJjZXB0b3IgdG8gdGhlIHN0YWNrXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bGZpbGxlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGB0aGVuYCBmb3IgYSBgUHJvbWlzZWBcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0ZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgcmVqZWN0YCBmb3IgYSBgUHJvbWlzZWBcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgVGhlIG9wdGlvbnMgZm9yIHRoZSBpbnRlcmNlcHRvciwgc3luY2hyb25vdXMgYW5kIHJ1bldoZW5cbiAgICpcbiAgICogQHJldHVybiB7TnVtYmVyfSBBbiBJRCB1c2VkIHRvIHJlbW92ZSBpbnRlcmNlcHRvciBsYXRlclxuICAgKi9cbiAgdXNlKGZ1bGZpbGxlZCwgcmVqZWN0ZWQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLmhhbmRsZXJzLnB1c2goe1xuICAgICAgZnVsZmlsbGVkLFxuICAgICAgcmVqZWN0ZWQsXG4gICAgICBzeW5jaHJvbm91czogb3B0aW9ucyA/IG9wdGlvbnMuc3luY2hyb25vdXMgOiBmYWxzZSxcbiAgICAgIHJ1bldoZW46IG9wdGlvbnMgPyBvcHRpb25zLnJ1bldoZW4gOiBudWxsLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXJzLmxlbmd0aCAtIDE7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFuIGludGVyY2VwdG9yIGZyb20gdGhlIHN0YWNrXG4gICAqXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBpZCBUaGUgSUQgdGhhdCB3YXMgcmV0dXJuZWQgYnkgYHVzZWBcbiAgICpcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBlamVjdChpZCkge1xuICAgIGlmICh0aGlzLmhhbmRsZXJzW2lkXSkge1xuICAgICAgdGhpcy5oYW5kbGVyc1tpZF0gPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciBhbGwgaW50ZXJjZXB0b3JzIGZyb20gdGhlIHN0YWNrXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgY2xlYXIoKSB7XG4gICAgaWYgKHRoaXMuaGFuZGxlcnMpIHtcbiAgICAgIHRoaXMuaGFuZGxlcnMgPSBbXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSXRlcmF0ZSBvdmVyIGFsbCB0aGUgcmVnaXN0ZXJlZCBpbnRlcmNlcHRvcnNcbiAgICpcbiAgICogVGhpcyBtZXRob2QgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3Igc2tpcHBpbmcgb3ZlciBhbnlcbiAgICogaW50ZXJjZXB0b3JzIHRoYXQgbWF5IGhhdmUgYmVjb21lIGBudWxsYCBjYWxsaW5nIGBlamVjdGAuXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIGludGVyY2VwdG9yXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZm9yRWFjaChmbikge1xuICAgIHV0aWxzLmZvckVhY2godGhpcy5oYW5kbGVycywgZnVuY3Rpb24gZm9yRWFjaEhhbmRsZXIoaCkge1xuICAgICAgaWYgKGggIT09IG51bGwpIHtcbiAgICAgICAgZm4oaCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSW50ZXJjZXB0b3JNYW5hZ2VyO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHNpbGVudEpTT05QYXJzaW5nOiB0cnVlLFxuICBmb3JjZWRKU09OUGFyc2luZzogdHJ1ZSxcbiAgY2xhcmlmeVRpbWVvdXRFcnJvcjogZmFsc2UsXG4gIGxlZ2FjeUludGVyY2VwdG9yUmVxUmVzT3JkZXJpbmc6IHRydWUsXG59O1xuIiwiaW1wb3J0IFVSTFNlYXJjaFBhcmFtcyBmcm9tICcuL2NsYXNzZXMvVVJMU2VhcmNoUGFyYW1zLmpzJztcbmltcG9ydCBGb3JtRGF0YSBmcm9tICcuL2NsYXNzZXMvRm9ybURhdGEuanMnO1xuaW1wb3J0IEJsb2IgZnJvbSAnLi9jbGFzc2VzL0Jsb2IuanMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGlzQnJvd3NlcjogdHJ1ZSxcbiAgY2xhc3Nlczoge1xuICAgIFVSTFNlYXJjaFBhcmFtcyxcbiAgICBGb3JtRGF0YSxcbiAgICBCbG9iLFxuICB9LFxuICBwcm90b2NvbHM6IFsnaHR0cCcsICdodHRwcycsICdmaWxlJywgJ2Jsb2InLCAndXJsJywgJ2RhdGEnXSxcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBBeGlvc1VSTFNlYXJjaFBhcmFtcyBmcm9tICcuLi8uLi8uLi9oZWxwZXJzL0F4aW9zVVJMU2VhcmNoUGFyYW1zLmpzJztcbmV4cG9ydCBkZWZhdWx0IHR5cGVvZiBVUkxTZWFyY2hQYXJhbXMgIT09ICd1bmRlZmluZWQnID8gVVJMU2VhcmNoUGFyYW1zIDogQXhpb3NVUkxTZWFyY2hQYXJhbXM7XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IHR5cGVvZiBGb3JtRGF0YSAhPT0gJ3VuZGVmaW5lZCcgPyBGb3JtRGF0YSA6IG51bGw7XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IHR5cGVvZiBCbG9iICE9PSAndW5kZWZpbmVkJyA/IEJsb2IgOiBudWxsO1xuIiwiY29uc3QgaGFzQnJvd3NlckVudiA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCc7XG5cbmNvbnN0IF9uYXZpZ2F0b3IgPSAodHlwZW9mIG5hdmlnYXRvciA9PT0gJ29iamVjdCcgJiYgbmF2aWdhdG9yKSB8fCB1bmRlZmluZWQ7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50XG4gKlxuICogVGhpcyBhbGxvd3MgYXhpb3MgdG8gcnVuIGluIGEgd2ViIHdvcmtlciwgYW5kIHJlYWN0LW5hdGl2ZS5cbiAqIEJvdGggZW52aXJvbm1lbnRzIHN1cHBvcnQgWE1MSHR0cFJlcXVlc3QsIGJ1dCBub3QgZnVsbHkgc3RhbmRhcmQgZ2xvYmFscy5cbiAqXG4gKiB3ZWIgd29ya2VyczpcbiAqICB0eXBlb2Ygd2luZG93IC0+IHVuZGVmaW5lZFxuICogIHR5cGVvZiBkb2N1bWVudCAtPiB1bmRlZmluZWRcbiAqXG4gKiByZWFjdC1uYXRpdmU6XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ1JlYWN0TmF0aXZlJ1xuICogbmF0aXZlc2NyaXB0XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ05hdGl2ZVNjcmlwdCcgb3IgJ05TJ1xuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5jb25zdCBoYXNTdGFuZGFyZEJyb3dzZXJFbnYgPVxuICBoYXNCcm93c2VyRW52ICYmXG4gICghX25hdmlnYXRvciB8fCBbJ1JlYWN0TmF0aXZlJywgJ05hdGl2ZVNjcmlwdCcsICdOUyddLmluZGV4T2YoX25hdmlnYXRvci5wcm9kdWN0KSA8IDApO1xuXG4vKipcbiAqIERldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciB3ZWJXb3JrZXIgZW52aXJvbm1lbnRcbiAqXG4gKiBBbHRob3VnaCB0aGUgYGlzU3RhbmRhcmRCcm93c2VyRW52YCBtZXRob2QgaW5kaWNhdGVzIHRoYXRcbiAqIGBhbGxvd3MgYXhpb3MgdG8gcnVuIGluIGEgd2ViIHdvcmtlcmAsIHRoZSBXZWJXb3JrZXIgd2lsbCBzdGlsbCBiZVxuICogZmlsdGVyZWQgb3V0IGR1ZSB0byBpdHMganVkZ21lbnQgc3RhbmRhcmRcbiAqIGB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnYC5cbiAqIFRoaXMgbGVhZHMgdG8gYSBwcm9ibGVtIHdoZW4gYXhpb3MgcG9zdCBgRm9ybURhdGFgIGluIHdlYldvcmtlclxuICovXG5jb25zdCBoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYgPSAoKCkgPT4ge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgICBzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUgJiZcbiAgICB0eXBlb2Ygc2VsZi5pbXBvcnRTY3JpcHRzID09PSAnZnVuY3Rpb24nXG4gICk7XG59KSgpO1xuXG5jb25zdCBvcmlnaW4gPSAoaGFzQnJvd3NlckVudiAmJiB3aW5kb3cubG9jYXRpb24uaHJlZikgfHwgJ2h0dHA6Ly9sb2NhbGhvc3QnO1xuXG5leHBvcnQge1xuICBoYXNCcm93c2VyRW52LFxuICBoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYsXG4gIGhhc1N0YW5kYXJkQnJvd3NlckVudixcbiAgX25hdmlnYXRvciBhcyBuYXZpZ2F0b3IsXG4gIG9yaWdpbixcbn07XG4iLCJpbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi9ub2RlL2luZGV4LmpzJztcbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gJy4vY29tbW9uL3V0aWxzLmpzJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICAuLi51dGlscyxcbiAgLi4ucGxhdGZvcm0sXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuXG4vKipcbiAqIEl0IHRha2VzIGEgc3RyaW5nIGxpa2UgYGZvb1t4XVt5XVt6XWAgYW5kIHJldHVybnMgYW4gYXJyYXkgbGlrZSBgWydmb28nLCAneCcsICd5JywgJ3onXVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBzdHJpbmdzLlxuICovXG5mdW5jdGlvbiBwYXJzZVByb3BQYXRoKG5hbWUpIHtcbiAgLy8gZm9vW3hdW3ldW3pdXG4gIC8vIGZvby54LnkuelxuICAvLyBmb28teC15LXpcbiAgLy8gZm9vIHggeSB6XG4gIHJldHVybiB1dGlscy5tYXRjaEFsbCgvXFx3K3xcXFsoXFx3KildL2csIG5hbWUpLm1hcCgobWF0Y2gpID0+IHtcbiAgICByZXR1cm4gbWF0Y2hbMF0gPT09ICdbXScgPyAnJyA6IG1hdGNoWzFdIHx8IG1hdGNoWzBdO1xuICB9KTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGFuIGFycmF5IHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PGFueT59IGFyciAtIFRoZSBhcnJheSB0byBjb252ZXJ0IHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAcmV0dXJucyBBbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSBrZXlzIGFuZCB2YWx1ZXMgYXMgdGhlIGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheVRvT2JqZWN0KGFycikge1xuICBjb25zdCBvYmogPSB7fTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGFycik7XG4gIGxldCBpO1xuICBjb25zdCBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgbGV0IGtleTtcbiAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAga2V5ID0ga2V5c1tpXTtcbiAgICBvYmpba2V5XSA9IGFycltrZXldO1xuICB9XG4gIHJldHVybiBvYmo7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBGb3JtRGF0YSBvYmplY3QgYW5kIHJldHVybnMgYSBKYXZhU2NyaXB0IG9iamVjdFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtRGF0YSBUaGUgRm9ybURhdGEgb2JqZWN0IHRvIGNvbnZlcnQgdG8gSlNPTi5cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0PHN0cmluZywgYW55PiB8IG51bGx9IFRoZSBjb252ZXJ0ZWQgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBmb3JtRGF0YVRvSlNPTihmb3JtRGF0YSkge1xuICBmdW5jdGlvbiBidWlsZFBhdGgocGF0aCwgdmFsdWUsIHRhcmdldCwgaW5kZXgpIHtcbiAgICBsZXQgbmFtZSA9IHBhdGhbaW5kZXgrK107XG5cbiAgICBpZiAobmFtZSA9PT0gJ19fcHJvdG9fXycpIHJldHVybiB0cnVlO1xuXG4gICAgY29uc3QgaXNOdW1lcmljS2V5ID0gTnVtYmVyLmlzRmluaXRlKCtuYW1lKTtcbiAgICBjb25zdCBpc0xhc3QgPSBpbmRleCA+PSBwYXRoLmxlbmd0aDtcbiAgICBuYW1lID0gIW5hbWUgJiYgdXRpbHMuaXNBcnJheSh0YXJnZXQpID8gdGFyZ2V0Lmxlbmd0aCA6IG5hbWU7XG5cbiAgICBpZiAoaXNMYXN0KSB7XG4gICAgICBpZiAodXRpbHMuaGFzT3duUHJvcCh0YXJnZXQsIG5hbWUpKSB7XG4gICAgICAgIHRhcmdldFtuYW1lXSA9IFt0YXJnZXRbbmFtZV0sIHZhbHVlXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRhcmdldFtuYW1lXSA9IHZhbHVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gIWlzTnVtZXJpY0tleTtcbiAgICB9XG5cbiAgICBpZiAoIXRhcmdldFtuYW1lXSB8fCAhdXRpbHMuaXNPYmplY3QodGFyZ2V0W25hbWVdKSkge1xuICAgICAgdGFyZ2V0W25hbWVdID0gW107XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYnVpbGRQYXRoKHBhdGgsIHZhbHVlLCB0YXJnZXRbbmFtZV0sIGluZGV4KTtcblxuICAgIGlmIChyZXN1bHQgJiYgdXRpbHMuaXNBcnJheSh0YXJnZXRbbmFtZV0pKSB7XG4gICAgICB0YXJnZXRbbmFtZV0gPSBhcnJheVRvT2JqZWN0KHRhcmdldFtuYW1lXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICFpc051bWVyaWNLZXk7XG4gIH1cblxuICBpZiAodXRpbHMuaXNGb3JtRGF0YShmb3JtRGF0YSkgJiYgdXRpbHMuaXNGdW5jdGlvbihmb3JtRGF0YS5lbnRyaWVzKSkge1xuICAgIGNvbnN0IG9iaiA9IHt9O1xuXG4gICAgdXRpbHMuZm9yRWFjaEVudHJ5KGZvcm1EYXRhLCAobmFtZSwgdmFsdWUpID0+IHtcbiAgICAgIGJ1aWxkUGF0aChwYXJzZVByb3BQYXRoKG5hbWUpLCB2YWx1ZSwgb2JqLCAwKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZm9ybURhdGFUb0pTT047XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IHRyYW5zaXRpb25hbERlZmF1bHRzIGZyb20gJy4vdHJhbnNpdGlvbmFsLmpzJztcbmltcG9ydCB0b0Zvcm1EYXRhIGZyb20gJy4uL2hlbHBlcnMvdG9Gb3JtRGF0YS5qcyc7XG5pbXBvcnQgdG9VUkxFbmNvZGVkRm9ybSBmcm9tICcuLi9oZWxwZXJzL3RvVVJMRW5jb2RlZEZvcm0uanMnO1xuaW1wb3J0IHBsYXRmb3JtIGZyb20gJy4uL3BsYXRmb3JtL2luZGV4LmpzJztcbmltcG9ydCBmb3JtRGF0YVRvSlNPTiBmcm9tICcuLi9oZWxwZXJzL2Zvcm1EYXRhVG9KU09OLmpzJztcblxuLyoqXG4gKiBJdCB0YWtlcyBhIHN0cmluZywgdHJpZXMgdG8gcGFyc2UgaXQsIGFuZCBpZiBpdCBmYWlscywgaXQgcmV0dXJucyB0aGUgc3RyaW5naWZpZWQgdmVyc2lvblxuICogb2YgdGhlIGlucHV0XG4gKlxuICogQHBhcmFtIHthbnl9IHJhd1ZhbHVlIC0gVGhlIHZhbHVlIHRvIGJlIHN0cmluZ2lmaWVkLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcGFyc2VyIC0gQSBmdW5jdGlvbiB0aGF0IHBhcnNlcyBhIHN0cmluZyBpbnRvIGEgSmF2YVNjcmlwdCBvYmplY3QuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlbmNvZGVyIC0gQSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgdmFsdWUgYW5kIHJldHVybnMgYSBzdHJpbmcuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gQSBzdHJpbmdpZmllZCB2ZXJzaW9uIG9mIHRoZSByYXdWYWx1ZS5cbiAqL1xuZnVuY3Rpb24gc3RyaW5naWZ5U2FmZWx5KHJhd1ZhbHVlLCBwYXJzZXIsIGVuY29kZXIpIHtcbiAgaWYgKHV0aWxzLmlzU3RyaW5nKHJhd1ZhbHVlKSkge1xuICAgIHRyeSB7XG4gICAgICAocGFyc2VyIHx8IEpTT04ucGFyc2UpKHJhd1ZhbHVlKTtcbiAgICAgIHJldHVybiB1dGlscy50cmltKHJhd1ZhbHVlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZS5uYW1lICE9PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIChlbmNvZGVyIHx8IEpTT04uc3RyaW5naWZ5KShyYXdWYWx1ZSk7XG59XG5cbmNvbnN0IGRlZmF1bHRzID0ge1xuICB0cmFuc2l0aW9uYWw6IHRyYW5zaXRpb25hbERlZmF1bHRzLFxuXG4gIGFkYXB0ZXI6IFsneGhyJywgJ2h0dHAnLCAnZmV0Y2gnXSxcblxuICB0cmFuc2Zvcm1SZXF1ZXN0OiBbXG4gICAgZnVuY3Rpb24gdHJhbnNmb3JtUmVxdWVzdChkYXRhLCBoZWFkZXJzKSB7XG4gICAgICBjb25zdCBjb250ZW50VHlwZSA9IGhlYWRlcnMuZ2V0Q29udGVudFR5cGUoKSB8fCAnJztcbiAgICAgIGNvbnN0IGhhc0pTT05Db250ZW50VHlwZSA9IGNvbnRlbnRUeXBlLmluZGV4T2YoJ2FwcGxpY2F0aW9uL2pzb24nKSA+IC0xO1xuICAgICAgY29uc3QgaXNPYmplY3RQYXlsb2FkID0gdXRpbHMuaXNPYmplY3QoZGF0YSk7XG5cbiAgICAgIGlmIChpc09iamVjdFBheWxvYWQgJiYgdXRpbHMuaXNIVE1MRm9ybShkYXRhKSkge1xuICAgICAgICBkYXRhID0gbmV3IEZvcm1EYXRhKGRhdGEpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpc0Zvcm1EYXRhID0gdXRpbHMuaXNGb3JtRGF0YShkYXRhKTtcblxuICAgICAgaWYgKGlzRm9ybURhdGEpIHtcbiAgICAgICAgcmV0dXJuIGhhc0pTT05Db250ZW50VHlwZSA/IEpTT04uc3RyaW5naWZ5KGZvcm1EYXRhVG9KU09OKGRhdGEpKSA6IGRhdGE7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgdXRpbHMuaXNBcnJheUJ1ZmZlcihkYXRhKSB8fFxuICAgICAgICB1dGlscy5pc0J1ZmZlcihkYXRhKSB8fFxuICAgICAgICB1dGlscy5pc1N0cmVhbShkYXRhKSB8fFxuICAgICAgICB1dGlscy5pc0ZpbGUoZGF0YSkgfHxcbiAgICAgICAgdXRpbHMuaXNCbG9iKGRhdGEpIHx8XG4gICAgICAgIHV0aWxzLmlzUmVhZGFibGVTdHJlYW0oZGF0YSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgIH1cbiAgICAgIGlmICh1dGlscy5pc0FycmF5QnVmZmVyVmlldyhkYXRhKSkge1xuICAgICAgICByZXR1cm4gZGF0YS5idWZmZXI7XG4gICAgICB9XG4gICAgICBpZiAodXRpbHMuaXNVUkxTZWFyY2hQYXJhbXMoZGF0YSkpIHtcbiAgICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgnLCBmYWxzZSk7XG4gICAgICAgIHJldHVybiBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICB9XG5cbiAgICAgIGxldCBpc0ZpbGVMaXN0O1xuXG4gICAgICBpZiAoaXNPYmplY3RQYXlsb2FkKSB7XG4gICAgICAgIGlmIChjb250ZW50VHlwZS5pbmRleE9mKCdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKSA+IC0xKSB7XG4gICAgICAgICAgcmV0dXJuIHRvVVJMRW5jb2RlZEZvcm0oZGF0YSwgdGhpcy5mb3JtU2VyaWFsaXplcikudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAoaXNGaWxlTGlzdCA9IHV0aWxzLmlzRmlsZUxpc3QoZGF0YSkpIHx8XG4gICAgICAgICAgY29udGVudFR5cGUuaW5kZXhPZignbXVsdGlwYXJ0L2Zvcm0tZGF0YScpID4gLTFcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgX0Zvcm1EYXRhID0gdGhpcy5lbnYgJiYgdGhpcy5lbnYuRm9ybURhdGE7XG5cbiAgICAgICAgICByZXR1cm4gdG9Gb3JtRGF0YShcbiAgICAgICAgICAgIGlzRmlsZUxpc3QgPyB7ICdmaWxlc1tdJzogZGF0YSB9IDogZGF0YSxcbiAgICAgICAgICAgIF9Gb3JtRGF0YSAmJiBuZXcgX0Zvcm1EYXRhKCksXG4gICAgICAgICAgICB0aGlzLmZvcm1TZXJpYWxpemVyXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaXNPYmplY3RQYXlsb2FkIHx8IGhhc0pTT05Db250ZW50VHlwZSkge1xuICAgICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKCdhcHBsaWNhdGlvbi9qc29uJywgZmFsc2UpO1xuICAgICAgICByZXR1cm4gc3RyaW5naWZ5U2FmZWx5KGRhdGEpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9LFxuICBdLFxuXG4gIHRyYW5zZm9ybVJlc3BvbnNlOiBbXG4gICAgZnVuY3Rpb24gdHJhbnNmb3JtUmVzcG9uc2UoZGF0YSkge1xuICAgICAgY29uc3QgdHJhbnNpdGlvbmFsID0gdGhpcy50cmFuc2l0aW9uYWwgfHwgZGVmYXVsdHMudHJhbnNpdGlvbmFsO1xuICAgICAgY29uc3QgZm9yY2VkSlNPTlBhcnNpbmcgPSB0cmFuc2l0aW9uYWwgJiYgdHJhbnNpdGlvbmFsLmZvcmNlZEpTT05QYXJzaW5nO1xuICAgICAgY29uc3QgSlNPTlJlcXVlc3RlZCA9IHRoaXMucmVzcG9uc2VUeXBlID09PSAnanNvbic7XG5cbiAgICAgIGlmICh1dGlscy5pc1Jlc3BvbnNlKGRhdGEpIHx8IHV0aWxzLmlzUmVhZGFibGVTdHJlYW0oZGF0YSkpIHtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgZGF0YSAmJlxuICAgICAgICB1dGlscy5pc1N0cmluZyhkYXRhKSAmJlxuICAgICAgICAoKGZvcmNlZEpTT05QYXJzaW5nICYmICF0aGlzLnJlc3BvbnNlVHlwZSkgfHwgSlNPTlJlcXVlc3RlZClcbiAgICAgICkge1xuICAgICAgICBjb25zdCBzaWxlbnRKU09OUGFyc2luZyA9IHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwuc2lsZW50SlNPTlBhcnNpbmc7XG4gICAgICAgIGNvbnN0IHN0cmljdEpTT05QYXJzaW5nID0gIXNpbGVudEpTT05QYXJzaW5nICYmIEpTT05SZXF1ZXN0ZWQ7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkYXRhLCB0aGlzLnBhcnNlUmV2aXZlcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBpZiAoc3RyaWN0SlNPTlBhcnNpbmcpIHtcbiAgICAgICAgICAgIGlmIChlLm5hbWUgPT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgICAgICAgdGhyb3cgQXhpb3NFcnJvci5mcm9tKGUsIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVNQT05TRSwgdGhpcywgbnVsbCwgdGhpcy5yZXNwb25zZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9LFxuICBdLFxuXG4gIC8qKlxuICAgKiBBIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIHRvIGFib3J0IGEgcmVxdWVzdC4gSWYgc2V0IHRvIDAgKGRlZmF1bHQpIGFcbiAgICogdGltZW91dCBpcyBub3QgY3JlYXRlZC5cbiAgICovXG4gIHRpbWVvdXQ6IDAsXG5cbiAgeHNyZkNvb2tpZU5hbWU6ICdYU1JGLVRPS0VOJyxcbiAgeHNyZkhlYWRlck5hbWU6ICdYLVhTUkYtVE9LRU4nLFxuXG4gIG1heENvbnRlbnRMZW5ndGg6IC0xLFxuICBtYXhCb2R5TGVuZ3RoOiAtMSxcblxuICBlbnY6IHtcbiAgICBGb3JtRGF0YTogcGxhdGZvcm0uY2xhc3Nlcy5Gb3JtRGF0YSxcbiAgICBCbG9iOiBwbGF0Zm9ybS5jbGFzc2VzLkJsb2IsXG4gIH0sXG5cbiAgdmFsaWRhdGVTdGF0dXM6IGZ1bmN0aW9uIHZhbGlkYXRlU3RhdHVzKHN0YXR1cykge1xuICAgIHJldHVybiBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMDtcbiAgfSxcblxuICBoZWFkZXJzOiB7XG4gICAgY29tbW9uOiB7XG4gICAgICBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyonLFxuICAgICAgJ0NvbnRlbnQtVHlwZSc6IHVuZGVmaW5lZCxcbiAgICB9LFxuICB9LFxufTtcblxudXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdwb3N0JywgJ3B1dCcsICdwYXRjaCddLCAobWV0aG9kKSA9PiB7XG4gIGRlZmF1bHRzLmhlYWRlcnNbbWV0aG9kXSA9IHt9O1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRzO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IHRvRm9ybURhdGEgZnJvbSAnLi90b0Zvcm1EYXRhLmpzJztcbmltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvVVJMRW5jb2RlZEZvcm0oZGF0YSwgb3B0aW9ucykge1xuICByZXR1cm4gdG9Gb3JtRGF0YShkYXRhLCBuZXcgcGxhdGZvcm0uY2xhc3Nlcy5VUkxTZWFyY2hQYXJhbXMoKSwge1xuICAgIHZpc2l0b3I6IGZ1bmN0aW9uICh2YWx1ZSwga2V5LCBwYXRoLCBoZWxwZXJzKSB7XG4gICAgICBpZiAocGxhdGZvcm0uaXNOb2RlICYmIHV0aWxzLmlzQnVmZmVyKHZhbHVlKSkge1xuICAgICAgICB0aGlzLmFwcGVuZChrZXksIHZhbHVlLnRvU3RyaW5nKCdiYXNlNjQnKSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGhlbHBlcnMuZGVmYXVsdFZpc2l0b3IuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuXG4vLyBSYXdBeGlvc0hlYWRlcnMgd2hvc2UgZHVwbGljYXRlcyBhcmUgaWdub3JlZCBieSBub2RlXG4vLyBjLmYuIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvaHR0cC5odG1sI2h0dHBfbWVzc2FnZV9oZWFkZXJzXG5jb25zdCBpZ25vcmVEdXBsaWNhdGVPZiA9IHV0aWxzLnRvT2JqZWN0U2V0KFtcbiAgJ2FnZScsXG4gICdhdXRob3JpemF0aW9uJyxcbiAgJ2NvbnRlbnQtbGVuZ3RoJyxcbiAgJ2NvbnRlbnQtdHlwZScsXG4gICdldGFnJyxcbiAgJ2V4cGlyZXMnLFxuICAnZnJvbScsXG4gICdob3N0JyxcbiAgJ2lmLW1vZGlmaWVkLXNpbmNlJyxcbiAgJ2lmLXVubW9kaWZpZWQtc2luY2UnLFxuICAnbGFzdC1tb2RpZmllZCcsXG4gICdsb2NhdGlvbicsXG4gICdtYXgtZm9yd2FyZHMnLFxuICAncHJveHktYXV0aG9yaXphdGlvbicsXG4gICdyZWZlcmVyJyxcbiAgJ3JldHJ5LWFmdGVyJyxcbiAgJ3VzZXItYWdlbnQnLFxuXSk7XG5cbi8qKlxuICogUGFyc2UgaGVhZGVycyBpbnRvIGFuIG9iamVjdFxuICpcbiAqIGBgYFxuICogRGF0ZTogV2VkLCAyNyBBdWcgMjAxNCAwODo1ODo0OSBHTVRcbiAqIENvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvblxuICogQ29ubmVjdGlvbjoga2VlcC1hbGl2ZVxuICogVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWRcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSByYXdIZWFkZXJzIEhlYWRlcnMgbmVlZGluZyB0byBiZSBwYXJzZWRcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBIZWFkZXJzIHBhcnNlZCBpbnRvIGFuIG9iamVjdFxuICovXG5leHBvcnQgZGVmYXVsdCAocmF3SGVhZGVycykgPT4ge1xuICBjb25zdCBwYXJzZWQgPSB7fTtcbiAgbGV0IGtleTtcbiAgbGV0IHZhbDtcbiAgbGV0IGk7XG5cbiAgcmF3SGVhZGVycyAmJlxuICAgIHJhd0hlYWRlcnMuc3BsaXQoJ1xcbicpLmZvckVhY2goZnVuY3Rpb24gcGFyc2VyKGxpbmUpIHtcbiAgICAgIGkgPSBsaW5lLmluZGV4T2YoJzonKTtcbiAgICAgIGtleSA9IGxpbmUuc3Vic3RyaW5nKDAsIGkpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgdmFsID0gbGluZS5zdWJzdHJpbmcoaSArIDEpLnRyaW0oKTtcblxuICAgICAgaWYgKCFrZXkgfHwgKHBhcnNlZFtrZXldICYmIGlnbm9yZUR1cGxpY2F0ZU9mW2tleV0pKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGtleSA9PT0gJ3NldC1jb29raWUnKSB7XG4gICAgICAgIGlmIChwYXJzZWRba2V5XSkge1xuICAgICAgICAgIHBhcnNlZFtrZXldLnB1c2godmFsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYXJzZWRba2V5XSA9IFt2YWxdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJzZWRba2V5XSA9IHBhcnNlZFtrZXldID8gcGFyc2VkW2tleV0gKyAnLCAnICsgdmFsIDogdmFsO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIHJldHVybiBwYXJzZWQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IHBhcnNlSGVhZGVycyBmcm9tICcuLi9oZWxwZXJzL3BhcnNlSGVhZGVycy5qcyc7XG5cbmNvbnN0ICRpbnRlcm5hbHMgPSBTeW1ib2woJ2ludGVybmFscycpO1xuXG5jb25zdCBpc1ZhbGlkSGVhZGVyVmFsdWUgPSAodmFsdWUpID0+ICEvW1xcclxcbl0vLnRlc3QodmFsdWUpO1xuXG5mdW5jdGlvbiBhc3NlcnRWYWxpZEhlYWRlclZhbHVlKHZhbHVlLCBoZWFkZXIpIHtcbiAgaWYgKHZhbHVlID09PSBmYWxzZSB8fCB2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHV0aWxzLmlzQXJyYXkodmFsdWUpKSB7XG4gICAgdmFsdWUuZm9yRWFjaCgodikgPT4gYXNzZXJ0VmFsaWRIZWFkZXJWYWx1ZSh2LCBoZWFkZXIpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoIWlzVmFsaWRIZWFkZXJWYWx1ZShTdHJpbmcodmFsdWUpKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjaGFyYWN0ZXIgaW4gaGVhZGVyIGNvbnRlbnQgW1wiJHtoZWFkZXJ9XCJdYCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplSGVhZGVyKGhlYWRlcikge1xuICByZXR1cm4gaGVhZGVyICYmIFN0cmluZyhoZWFkZXIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBzdHJpcFRyYWlsaW5nQ1JMRihzdHIpIHtcbiAgbGV0IGVuZCA9IHN0ci5sZW5ndGg7XG5cbiAgd2hpbGUgKGVuZCA+IDApIHtcbiAgICBjb25zdCBjaGFyQ29kZSA9IHN0ci5jaGFyQ29kZUF0KGVuZCAtIDEpO1xuXG4gICAgaWYgKGNoYXJDb2RlICE9PSAxMCAmJiBjaGFyQ29kZSAhPT0gMTMpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGVuZCAtPSAxO1xuICB9XG5cbiAgcmV0dXJuIGVuZCA9PT0gc3RyLmxlbmd0aCA/IHN0ciA6IHN0ci5zbGljZSgwLCBlbmQpO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVWYWx1ZSh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IGZhbHNlIHx8IHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gdXRpbHMuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5tYXAobm9ybWFsaXplVmFsdWUpIDogc3RyaXBUcmFpbGluZ0NSTEYoU3RyaW5nKHZhbHVlKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVG9rZW5zKHN0cikge1xuICBjb25zdCB0b2tlbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBjb25zdCB0b2tlbnNSRSA9IC8oW15cXHMsOz1dKylcXHMqKD86PVxccyooW14sO10rKSk/L2c7XG4gIGxldCBtYXRjaDtcblxuICB3aGlsZSAoKG1hdGNoID0gdG9rZW5zUkUuZXhlYyhzdHIpKSkge1xuICAgIHRva2Vuc1ttYXRjaFsxXV0gPSBtYXRjaFsyXTtcbiAgfVxuXG4gIHJldHVybiB0b2tlbnM7XG59XG5cbmNvbnN0IGlzVmFsaWRIZWFkZXJOYW1lID0gKHN0cikgPT4gL15bLV9hLXpBLVowLTleYHx+LCEjJCUmJyorLl0rJC8udGVzdChzdHIudHJpbSgpKTtcblxuZnVuY3Rpb24gbWF0Y2hIZWFkZXJWYWx1ZShjb250ZXh0LCB2YWx1ZSwgaGVhZGVyLCBmaWx0ZXIsIGlzSGVhZGVyTmFtZUZpbHRlcikge1xuICBpZiAodXRpbHMuaXNGdW5jdGlvbihmaWx0ZXIpKSB7XG4gICAgcmV0dXJuIGZpbHRlci5jYWxsKHRoaXMsIHZhbHVlLCBoZWFkZXIpO1xuICB9XG5cbiAgaWYgKGlzSGVhZGVyTmFtZUZpbHRlcikge1xuICAgIHZhbHVlID0gaGVhZGVyO1xuICB9XG5cbiAgaWYgKCF1dGlscy5pc1N0cmluZyh2YWx1ZSkpIHJldHVybjtcblxuICBpZiAodXRpbHMuaXNTdHJpbmcoZmlsdGVyKSkge1xuICAgIHJldHVybiB2YWx1ZS5pbmRleE9mKGZpbHRlcikgIT09IC0xO1xuICB9XG5cbiAgaWYgKHV0aWxzLmlzUmVnRXhwKGZpbHRlcikpIHtcbiAgICByZXR1cm4gZmlsdGVyLnRlc3QodmFsdWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEhlYWRlcihoZWFkZXIpIHtcbiAgcmV0dXJuIGhlYWRlclxuICAgIC50cmltKClcbiAgICAudG9Mb3dlckNhc2UoKVxuICAgIC5yZXBsYWNlKC8oW2EtelxcZF0pKFxcdyopL2csICh3LCBjaGFyLCBzdHIpID0+IHtcbiAgICAgIHJldHVybiBjaGFyLnRvVXBwZXJDYXNlKCkgKyBzdHI7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQWNjZXNzb3JzKG9iaiwgaGVhZGVyKSB7XG4gIGNvbnN0IGFjY2Vzc29yTmFtZSA9IHV0aWxzLnRvQ2FtZWxDYXNlKCcgJyArIGhlYWRlcik7XG5cbiAgWydnZXQnLCAnc2V0JywgJ2hhcyddLmZvckVhY2goKG1ldGhvZE5hbWUpID0+IHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBtZXRob2ROYW1lICsgYWNjZXNzb3JOYW1lLCB7XG4gICAgICB2YWx1ZTogZnVuY3Rpb24gKGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbbWV0aG9kTmFtZV0uY2FsbCh0aGlzLCBoZWFkZXIsIGFyZzEsIGFyZzIsIGFyZzMpO1xuICAgICAgfSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB9KTtcbiAgfSk7XG59XG5cbmNsYXNzIEF4aW9zSGVhZGVycyB7XG4gIGNvbnN0cnVjdG9yKGhlYWRlcnMpIHtcbiAgICBoZWFkZXJzICYmIHRoaXMuc2V0KGhlYWRlcnMpO1xuICB9XG5cbiAgc2V0KGhlYWRlciwgdmFsdWVPclJld3JpdGUsIHJld3JpdGUpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgIGZ1bmN0aW9uIHNldEhlYWRlcihfdmFsdWUsIF9oZWFkZXIsIF9yZXdyaXRlKSB7XG4gICAgICBjb25zdCBsSGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKF9oZWFkZXIpO1xuXG4gICAgICBpZiAoIWxIZWFkZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdoZWFkZXIgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBrZXkgPSB1dGlscy5maW5kS2V5KHNlbGYsIGxIZWFkZXIpO1xuXG4gICAgICBpZiAoXG4gICAgICAgICFrZXkgfHxcbiAgICAgICAgc2VsZltrZXldID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgX3Jld3JpdGUgPT09IHRydWUgfHxcbiAgICAgICAgKF9yZXdyaXRlID09PSB1bmRlZmluZWQgJiYgc2VsZltrZXldICE9PSBmYWxzZSlcbiAgICAgICkge1xuICAgICAgICBhc3NlcnRWYWxpZEhlYWRlclZhbHVlKF92YWx1ZSwgX2hlYWRlcik7XG4gICAgICAgIHNlbGZba2V5IHx8IF9oZWFkZXJdID0gbm9ybWFsaXplVmFsdWUoX3ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzZXRIZWFkZXJzID0gKGhlYWRlcnMsIF9yZXdyaXRlKSA9PlxuICAgICAgdXRpbHMuZm9yRWFjaChoZWFkZXJzLCAoX3ZhbHVlLCBfaGVhZGVyKSA9PiBzZXRIZWFkZXIoX3ZhbHVlLCBfaGVhZGVyLCBfcmV3cml0ZSkpO1xuXG4gICAgaWYgKHV0aWxzLmlzUGxhaW5PYmplY3QoaGVhZGVyKSB8fCBoZWFkZXIgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKSB7XG4gICAgICBzZXRIZWFkZXJzKGhlYWRlciwgdmFsdWVPclJld3JpdGUpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNTdHJpbmcoaGVhZGVyKSAmJiAoaGVhZGVyID0gaGVhZGVyLnRyaW0oKSkgJiYgIWlzVmFsaWRIZWFkZXJOYW1lKGhlYWRlcikpIHtcbiAgICAgIHNldEhlYWRlcnMocGFyc2VIZWFkZXJzKGhlYWRlciksIHZhbHVlT3JSZXdyaXRlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzT2JqZWN0KGhlYWRlcikgJiYgdXRpbHMuaXNJdGVyYWJsZShoZWFkZXIpKSB7XG4gICAgICBsZXQgb2JqID0ge30sXG4gICAgICAgIGRlc3QsXG4gICAgICAgIGtleTtcbiAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgaGVhZGVyKSB7XG4gICAgICAgIGlmICghdXRpbHMuaXNBcnJheShlbnRyeSkpIHtcbiAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoJ09iamVjdCBpdGVyYXRvciBtdXN0IHJldHVybiBhIGtleS12YWx1ZSBwYWlyJyk7XG4gICAgICAgIH1cblxuICAgICAgICBvYmpbKGtleSA9IGVudHJ5WzBdKV0gPSAoZGVzdCA9IG9ialtrZXldKVxuICAgICAgICAgID8gdXRpbHMuaXNBcnJheShkZXN0KVxuICAgICAgICAgICAgPyBbLi4uZGVzdCwgZW50cnlbMV1dXG4gICAgICAgICAgICA6IFtkZXN0LCBlbnRyeVsxXV1cbiAgICAgICAgICA6IGVudHJ5WzFdO1xuICAgICAgfVxuXG4gICAgICBzZXRIZWFkZXJzKG9iaiwgdmFsdWVPclJld3JpdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBoZWFkZXIgIT0gbnVsbCAmJiBzZXRIZWFkZXIodmFsdWVPclJld3JpdGUsIGhlYWRlciwgcmV3cml0ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBnZXQoaGVhZGVyLCBwYXJzZXIpIHtcbiAgICBoZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoaGVhZGVyKTtcblxuICAgIGlmIChoZWFkZXIpIHtcbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzLmZpbmRLZXkodGhpcywgaGVhZGVyKTtcblxuICAgICAgaWYgKGtleSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXNba2V5XTtcblxuICAgICAgICBpZiAoIXBhcnNlcikge1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJzZXIgPT09IHRydWUpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VUb2tlbnModmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHV0aWxzLmlzRnVuY3Rpb24ocGFyc2VyKSkge1xuICAgICAgICAgIHJldHVybiBwYXJzZXIuY2FsbCh0aGlzLCB2YWx1ZSwga2V5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1dGlscy5pc1JlZ0V4cChwYXJzZXIpKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlci5leGVjKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3BhcnNlciBtdXN0IGJlIGJvb2xlYW58cmVnZXhwfGZ1bmN0aW9uJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaGFzKGhlYWRlciwgbWF0Y2hlcikge1xuICAgIGhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihoZWFkZXIpO1xuXG4gICAgaWYgKGhlYWRlcikge1xuICAgICAgY29uc3Qga2V5ID0gdXRpbHMuZmluZEtleSh0aGlzLCBoZWFkZXIpO1xuXG4gICAgICByZXR1cm4gISEoXG4gICAgICAgIGtleSAmJlxuICAgICAgICB0aGlzW2tleV0gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAoIW1hdGNoZXIgfHwgbWF0Y2hIZWFkZXJWYWx1ZSh0aGlzLCB0aGlzW2tleV0sIGtleSwgbWF0Y2hlcikpXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGRlbGV0ZShoZWFkZXIsIG1hdGNoZXIpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBsZXQgZGVsZXRlZCA9IGZhbHNlO1xuXG4gICAgZnVuY3Rpb24gZGVsZXRlSGVhZGVyKF9oZWFkZXIpIHtcbiAgICAgIF9oZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoX2hlYWRlcik7XG5cbiAgICAgIGlmIChfaGVhZGVyKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHV0aWxzLmZpbmRLZXkoc2VsZiwgX2hlYWRlcik7XG5cbiAgICAgICAgaWYgKGtleSAmJiAoIW1hdGNoZXIgfHwgbWF0Y2hIZWFkZXJWYWx1ZShzZWxmLCBzZWxmW2tleV0sIGtleSwgbWF0Y2hlcikpKSB7XG4gICAgICAgICAgZGVsZXRlIHNlbGZba2V5XTtcblxuICAgICAgICAgIGRlbGV0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzLmlzQXJyYXkoaGVhZGVyKSkge1xuICAgICAgaGVhZGVyLmZvckVhY2goZGVsZXRlSGVhZGVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlSGVhZGVyKGhlYWRlcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlbGV0ZWQ7XG4gIH1cblxuICBjbGVhcihtYXRjaGVyKSB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMpO1xuICAgIGxldCBpID0ga2V5cy5sZW5ndGg7XG4gICAgbGV0IGRlbGV0ZWQgPSBmYWxzZTtcblxuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIGNvbnN0IGtleSA9IGtleXNbaV07XG4gICAgICBpZiAoIW1hdGNoZXIgfHwgbWF0Y2hIZWFkZXJWYWx1ZSh0aGlzLCB0aGlzW2tleV0sIGtleSwgbWF0Y2hlciwgdHJ1ZSkpIHtcbiAgICAgICAgZGVsZXRlIHRoaXNba2V5XTtcbiAgICAgICAgZGVsZXRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlbGV0ZWQ7XG4gIH1cblxuICBub3JtYWxpemUoZm9ybWF0KSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgaGVhZGVycyA9IHt9O1xuXG4gICAgdXRpbHMuZm9yRWFjaCh0aGlzLCAodmFsdWUsIGhlYWRlcikgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gdXRpbHMuZmluZEtleShoZWFkZXJzLCBoZWFkZXIpO1xuXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIHNlbGZba2V5XSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKTtcbiAgICAgICAgZGVsZXRlIHNlbGZbaGVhZGVyXTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBub3JtYWxpemVkID0gZm9ybWF0ID8gZm9ybWF0SGVhZGVyKGhlYWRlcikgOiBTdHJpbmcoaGVhZGVyKS50cmltKCk7XG5cbiAgICAgIGlmIChub3JtYWxpemVkICE9PSBoZWFkZXIpIHtcbiAgICAgICAgZGVsZXRlIHNlbGZbaGVhZGVyXTtcbiAgICAgIH1cblxuICAgICAgc2VsZltub3JtYWxpemVkXSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKTtcblxuICAgICAgaGVhZGVyc1tub3JtYWxpemVkXSA9IHRydWU7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGNvbmNhdCguLi50YXJnZXRzKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IuY29uY2F0KHRoaXMsIC4uLnRhcmdldHMpO1xuICB9XG5cbiAgdG9KU09OKGFzU3RyaW5ncykge1xuICAgIGNvbnN0IG9iaiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICB1dGlscy5mb3JFYWNoKHRoaXMsICh2YWx1ZSwgaGVhZGVyKSA9PiB7XG4gICAgICB2YWx1ZSAhPSBudWxsICYmXG4gICAgICAgIHZhbHVlICE9PSBmYWxzZSAmJlxuICAgICAgICAob2JqW2hlYWRlcl0gPSBhc1N0cmluZ3MgJiYgdXRpbHMuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5qb2luKCcsICcpIDogdmFsdWUpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKVtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSlcbiAgICAgIC5tYXAoKFtoZWFkZXIsIHZhbHVlXSkgPT4gaGVhZGVyICsgJzogJyArIHZhbHVlKVxuICAgICAgLmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgZ2V0U2V0Q29va2llKCkge1xuICAgIHJldHVybiB0aGlzLmdldCgnc2V0LWNvb2tpZScpIHx8IFtdO1xuICB9XG5cbiAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgIHJldHVybiAnQXhpb3NIZWFkZXJzJztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tKHRoaW5nKSB7XG4gICAgcmV0dXJuIHRoaW5nIGluc3RhbmNlb2YgdGhpcyA/IHRoaW5nIDogbmV3IHRoaXModGhpbmcpO1xuICB9XG5cbiAgc3RhdGljIGNvbmNhdChmaXJzdCwgLi4udGFyZ2V0cykge1xuICAgIGNvbnN0IGNvbXB1dGVkID0gbmV3IHRoaXMoZmlyc3QpO1xuXG4gICAgdGFyZ2V0cy5mb3JFYWNoKCh0YXJnZXQpID0+IGNvbXB1dGVkLnNldCh0YXJnZXQpKTtcblxuICAgIHJldHVybiBjb21wdXRlZDtcbiAgfVxuXG4gIHN0YXRpYyBhY2Nlc3NvcihoZWFkZXIpIHtcbiAgICBjb25zdCBpbnRlcm5hbHMgPVxuICAgICAgKHRoaXNbJGludGVybmFsc10gPVxuICAgICAgdGhpc1skaW50ZXJuYWxzXSA9XG4gICAgICAgIHtcbiAgICAgICAgICBhY2Nlc3NvcnM6IHt9LFxuICAgICAgICB9KTtcblxuICAgIGNvbnN0IGFjY2Vzc29ycyA9IGludGVybmFscy5hY2Nlc3NvcnM7XG4gICAgY29uc3QgcHJvdG90eXBlID0gdGhpcy5wcm90b3R5cGU7XG5cbiAgICBmdW5jdGlvbiBkZWZpbmVBY2Nlc3NvcihfaGVhZGVyKSB7XG4gICAgICBjb25zdCBsSGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKF9oZWFkZXIpO1xuXG4gICAgICBpZiAoIWFjY2Vzc29yc1tsSGVhZGVyXSkge1xuICAgICAgICBidWlsZEFjY2Vzc29ycyhwcm90b3R5cGUsIF9oZWFkZXIpO1xuICAgICAgICBhY2Nlc3NvcnNbbEhlYWRlcl0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHV0aWxzLmlzQXJyYXkoaGVhZGVyKSA/IGhlYWRlci5mb3JFYWNoKGRlZmluZUFjY2Vzc29yKSA6IGRlZmluZUFjY2Vzc29yKGhlYWRlcik7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxufVxuXG5BeGlvc0hlYWRlcnMuYWNjZXNzb3IoW1xuICAnQ29udGVudC1UeXBlJyxcbiAgJ0NvbnRlbnQtTGVuZ3RoJyxcbiAgJ0FjY2VwdCcsXG4gICdBY2NlcHQtRW5jb2RpbmcnLFxuICAnVXNlci1BZ2VudCcsXG4gICdBdXRob3JpemF0aW9uJyxcbl0pO1xuXG4vLyByZXNlcnZlZCBuYW1lcyBob3RmaXhcbnV0aWxzLnJlZHVjZURlc2NyaXB0b3JzKEF4aW9zSGVhZGVycy5wcm90b3R5cGUsICh7IHZhbHVlIH0sIGtleSkgPT4ge1xuICBsZXQgbWFwcGVkID0ga2V5WzBdLnRvVXBwZXJDYXNlKCkgKyBrZXkuc2xpY2UoMSk7IC8vIG1hcCBgc2V0YCA9PiBgU2V0YFxuICByZXR1cm4ge1xuICAgIGdldDogKCkgPT4gdmFsdWUsXG4gICAgc2V0KGhlYWRlclZhbHVlKSB7XG4gICAgICB0aGlzW21hcHBlZF0gPSBoZWFkZXJWYWx1ZTtcbiAgICB9LFxuICB9O1xufSk7XG5cbnV0aWxzLmZyZWV6ZU1ldGhvZHMoQXhpb3NIZWFkZXJzKTtcblxuZXhwb3J0IGRlZmF1bHQgQXhpb3NIZWFkZXJzO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IGRlZmF1bHRzIGZyb20gJy4uL2RlZmF1bHRzL2luZGV4LmpzJztcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSAnLi4vY29yZS9BeGlvc0hlYWRlcnMuanMnO1xuXG4vKipcbiAqIFRyYW5zZm9ybSB0aGUgZGF0YSBmb3IgYSByZXF1ZXN0IG9yIGEgcmVzcG9uc2VcbiAqXG4gKiBAcGFyYW0ge0FycmF5fEZ1bmN0aW9ufSBmbnMgQSBzaW5nbGUgZnVuY3Rpb24gb3IgQXJyYXkgb2YgZnVuY3Rpb25zXG4gKiBAcGFyYW0gez9PYmplY3R9IHJlc3BvbnNlIFRoZSByZXNwb25zZSBvYmplY3RcbiAqXG4gKiBAcmV0dXJucyB7Kn0gVGhlIHJlc3VsdGluZyB0cmFuc2Zvcm1lZCBkYXRhXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRyYW5zZm9ybURhdGEoZm5zLCByZXNwb25zZSkge1xuICBjb25zdCBjb25maWcgPSB0aGlzIHx8IGRlZmF1bHRzO1xuICBjb25zdCBjb250ZXh0ID0gcmVzcG9uc2UgfHwgY29uZmlnO1xuICBjb25zdCBoZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20oY29udGV4dC5oZWFkZXJzKTtcbiAgbGV0IGRhdGEgPSBjb250ZXh0LmRhdGE7XG5cbiAgdXRpbHMuZm9yRWFjaChmbnMsIGZ1bmN0aW9uIHRyYW5zZm9ybShmbikge1xuICAgIGRhdGEgPSBmbi5jYWxsKGNvbmZpZywgZGF0YSwgaGVhZGVycy5ub3JtYWxpemUoKSwgcmVzcG9uc2UgPyByZXNwb25zZS5zdGF0dXMgOiB1bmRlZmluZWQpO1xuICB9KTtcblxuICBoZWFkZXJzLm5vcm1hbGl6ZSgpO1xuXG4gIHJldHVybiBkYXRhO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0NhbmNlbCh2YWx1ZSkge1xuICByZXR1cm4gISEodmFsdWUgJiYgdmFsdWUuX19DQU5DRUxfXyk7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4uL2NvcmUvQXhpb3NFcnJvci5qcyc7XG5cbmNsYXNzIENhbmNlbGVkRXJyb3IgZXh0ZW5kcyBBeGlvc0Vycm9yIHtcbiAgLyoqXG4gICAqIEEgYENhbmNlbGVkRXJyb3JgIGlzIGFuIG9iamVjdCB0aGF0IGlzIHRocm93biB3aGVuIGFuIG9wZXJhdGlvbiBpcyBjYW5jZWxlZC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmc9fSBtZXNzYWdlIFRoZSBtZXNzYWdlLlxuICAgKiBAcGFyYW0ge09iamVjdD19IGNvbmZpZyBUaGUgY29uZmlnLlxuICAgKiBAcGFyYW0ge09iamVjdD19IHJlcXVlc3QgVGhlIHJlcXVlc3QuXG4gICAqXG4gICAqIEByZXR1cm5zIHtDYW5jZWxlZEVycm9yfSBUaGUgY3JlYXRlZCBlcnJvci5cbiAgICovXG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UsIGNvbmZpZywgcmVxdWVzdCkge1xuICAgIHN1cGVyKG1lc3NhZ2UgPT0gbnVsbCA/ICdjYW5jZWxlZCcgOiBtZXNzYWdlLCBBeGlvc0Vycm9yLkVSUl9DQU5DRUxFRCwgY29uZmlnLCByZXF1ZXN0KTtcbiAgICB0aGlzLm5hbWUgPSAnQ2FuY2VsZWRFcnJvcic7XG4gICAgdGhpcy5fX0NBTkNFTF9fID0gdHJ1ZTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDYW5jZWxlZEVycm9yO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuL0F4aW9zRXJyb3IuanMnO1xuXG4vKipcbiAqIFJlc29sdmUgb3IgcmVqZWN0IGEgUHJvbWlzZSBiYXNlZCBvbiByZXNwb25zZSBzdGF0dXMuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVzb2x2ZSBBIGZ1bmN0aW9uIHRoYXQgcmVzb2x2ZXMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3QgQSBmdW5jdGlvbiB0aGF0IHJlamVjdHMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge29iamVjdH0gcmVzcG9uc2UgVGhlIHJlc3BvbnNlLlxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9IFRoZSByZXNwb25zZS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgcmVzcG9uc2UpIHtcbiAgY29uc3QgdmFsaWRhdGVTdGF0dXMgPSByZXNwb25zZS5jb25maWcudmFsaWRhdGVTdGF0dXM7XG4gIGlmICghcmVzcG9uc2Uuc3RhdHVzIHx8ICF2YWxpZGF0ZVN0YXR1cyB8fCB2YWxpZGF0ZVN0YXR1cyhyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gIH0gZWxzZSB7XG4gICAgcmVqZWN0KFxuICAgICAgbmV3IEF4aW9zRXJyb3IoXG4gICAgICAgICdSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICcgKyByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgIFtBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCwgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFXVtcbiAgICAgICAgICBNYXRoLmZsb29yKHJlc3BvbnNlLnN0YXR1cyAvIDEwMCkgLSA0XG4gICAgICAgIF0sXG4gICAgICAgIHJlc3BvbnNlLmNvbmZpZyxcbiAgICAgICAgcmVzcG9uc2UucmVxdWVzdCxcbiAgICAgICAgcmVzcG9uc2VcbiAgICAgIClcbiAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgc3BlZWRvbWV0ZXIgZnJvbSAnLi9zcGVlZG9tZXRlci5qcyc7XG5pbXBvcnQgdGhyb3R0bGUgZnJvbSAnLi90aHJvdHRsZS5qcyc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuXG5leHBvcnQgY29uc3QgcHJvZ3Jlc3NFdmVudFJlZHVjZXIgPSAobGlzdGVuZXIsIGlzRG93bmxvYWRTdHJlYW0sIGZyZXEgPSAzKSA9PiB7XG4gIGxldCBieXRlc05vdGlmaWVkID0gMDtcbiAgY29uc3QgX3NwZWVkb21ldGVyID0gc3BlZWRvbWV0ZXIoNTAsIDI1MCk7XG5cbiAgcmV0dXJuIHRocm90dGxlKChlKSA9PiB7XG4gICAgY29uc3QgbG9hZGVkID0gZS5sb2FkZWQ7XG4gICAgY29uc3QgdG90YWwgPSBlLmxlbmd0aENvbXB1dGFibGUgPyBlLnRvdGFsIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHByb2dyZXNzQnl0ZXMgPSBsb2FkZWQgLSBieXRlc05vdGlmaWVkO1xuICAgIGNvbnN0IHJhdGUgPSBfc3BlZWRvbWV0ZXIocHJvZ3Jlc3NCeXRlcyk7XG4gICAgY29uc3QgaW5SYW5nZSA9IGxvYWRlZCA8PSB0b3RhbDtcblxuICAgIGJ5dGVzTm90aWZpZWQgPSBsb2FkZWQ7XG5cbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgbG9hZGVkLFxuICAgICAgdG90YWwsXG4gICAgICBwcm9ncmVzczogdG90YWwgPyBsb2FkZWQgLyB0b3RhbCA6IHVuZGVmaW5lZCxcbiAgICAgIGJ5dGVzOiBwcm9ncmVzc0J5dGVzLFxuICAgICAgcmF0ZTogcmF0ZSA/IHJhdGUgOiB1bmRlZmluZWQsXG4gICAgICBlc3RpbWF0ZWQ6IHJhdGUgJiYgdG90YWwgJiYgaW5SYW5nZSA/ICh0b3RhbCAtIGxvYWRlZCkgLyByYXRlIDogdW5kZWZpbmVkLFxuICAgICAgZXZlbnQ6IGUsXG4gICAgICBsZW5ndGhDb21wdXRhYmxlOiB0b3RhbCAhPSBudWxsLFxuICAgICAgW2lzRG93bmxvYWRTdHJlYW0gPyAnZG93bmxvYWQnIDogJ3VwbG9hZCddOiB0cnVlLFxuICAgIH07XG5cbiAgICBsaXN0ZW5lcihkYXRhKTtcbiAgfSwgZnJlcSk7XG59O1xuXG5leHBvcnQgY29uc3QgcHJvZ3Jlc3NFdmVudERlY29yYXRvciA9ICh0b3RhbCwgdGhyb3R0bGVkKSA9PiB7XG4gIGNvbnN0IGxlbmd0aENvbXB1dGFibGUgPSB0b3RhbCAhPSBudWxsO1xuXG4gIHJldHVybiBbXG4gICAgKGxvYWRlZCkgPT5cbiAgICAgIHRocm90dGxlZFswXSh7XG4gICAgICAgIGxlbmd0aENvbXB1dGFibGUsXG4gICAgICAgIHRvdGFsLFxuICAgICAgICBsb2FkZWQsXG4gICAgICB9KSxcbiAgICB0aHJvdHRsZWRbMV0sXG4gIF07XG59O1xuXG5leHBvcnQgY29uc3QgYXN5bmNEZWNvcmF0b3IgPVxuICAoZm4pID0+XG4gICguLi5hcmdzKSA9PlxuICAgIHV0aWxzLmFzYXAoKCkgPT4gZm4oLi4uYXJncykpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENhbGN1bGF0ZSBkYXRhIG1heFJhdGVcbiAqIEBwYXJhbSB7TnVtYmVyfSBbc2FtcGxlc0NvdW50PSAxMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSBbbWluPSAxMDAwXVxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBzcGVlZG9tZXRlcihzYW1wbGVzQ291bnQsIG1pbikge1xuICBzYW1wbGVzQ291bnQgPSBzYW1wbGVzQ291bnQgfHwgMTA7XG4gIGNvbnN0IGJ5dGVzID0gbmV3IEFycmF5KHNhbXBsZXNDb3VudCk7XG4gIGNvbnN0IHRpbWVzdGFtcHMgPSBuZXcgQXJyYXkoc2FtcGxlc0NvdW50KTtcbiAgbGV0IGhlYWQgPSAwO1xuICBsZXQgdGFpbCA9IDA7XG4gIGxldCBmaXJzdFNhbXBsZVRTO1xuXG4gIG1pbiA9IG1pbiAhPT0gdW5kZWZpbmVkID8gbWluIDogMTAwMDtcblxuICByZXR1cm4gZnVuY3Rpb24gcHVzaChjaHVua0xlbmd0aCkge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICBjb25zdCBzdGFydGVkQXQgPSB0aW1lc3RhbXBzW3RhaWxdO1xuXG4gICAgaWYgKCFmaXJzdFNhbXBsZVRTKSB7XG4gICAgICBmaXJzdFNhbXBsZVRTID0gbm93O1xuICAgIH1cblxuICAgIGJ5dGVzW2hlYWRdID0gY2h1bmtMZW5ndGg7XG4gICAgdGltZXN0YW1wc1toZWFkXSA9IG5vdztcblxuICAgIGxldCBpID0gdGFpbDtcbiAgICBsZXQgYnl0ZXNDb3VudCA9IDA7XG5cbiAgICB3aGlsZSAoaSAhPT0gaGVhZCkge1xuICAgICAgYnl0ZXNDb3VudCArPSBieXRlc1tpKytdO1xuICAgICAgaSA9IGkgJSBzYW1wbGVzQ291bnQ7XG4gICAgfVxuXG4gICAgaGVhZCA9IChoZWFkICsgMSkgJSBzYW1wbGVzQ291bnQ7XG5cbiAgICBpZiAoaGVhZCA9PT0gdGFpbCkge1xuICAgICAgdGFpbCA9ICh0YWlsICsgMSkgJSBzYW1wbGVzQ291bnQ7XG4gICAgfVxuXG4gICAgaWYgKG5vdyAtIGZpcnN0U2FtcGxlVFMgPCBtaW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXNzZWQgPSBzdGFydGVkQXQgJiYgbm93IC0gc3RhcnRlZEF0O1xuXG4gICAgcmV0dXJuIHBhc3NlZCA/IE1hdGgucm91bmQoKGJ5dGVzQ291bnQgKiAxMDAwKSAvIHBhc3NlZCkgOiB1bmRlZmluZWQ7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNwZWVkb21ldGVyO1xuIiwiLyoqXG4gKiBUaHJvdHRsZSBkZWNvcmF0b3JcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcGFyYW0ge051bWJlcn0gZnJlcVxuICogQHJldHVybiB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIHRocm90dGxlKGZuLCBmcmVxKSB7XG4gIGxldCB0aW1lc3RhbXAgPSAwO1xuICBsZXQgdGhyZXNob2xkID0gMTAwMCAvIGZyZXE7XG4gIGxldCBsYXN0QXJncztcbiAgbGV0IHRpbWVyO1xuXG4gIGNvbnN0IGludm9rZSA9IChhcmdzLCBub3cgPSBEYXRlLm5vdygpKSA9PiB7XG4gICAgdGltZXN0YW1wID0gbm93O1xuICAgIGxhc3RBcmdzID0gbnVsbDtcbiAgICBpZiAodGltZXIpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICB0aW1lciA9IG51bGw7XG4gICAgfVxuICAgIGZuKC4uLmFyZ3MpO1xuICB9O1xuXG4gIGNvbnN0IHRocm90dGxlZCA9ICguLi5hcmdzKSA9PiB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBwYXNzZWQgPSBub3cgLSB0aW1lc3RhbXA7XG4gICAgaWYgKHBhc3NlZCA+PSB0aHJlc2hvbGQpIHtcbiAgICAgIGludm9rZShhcmdzLCBub3cpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsYXN0QXJncyA9IGFyZ3M7XG4gICAgICBpZiAoIXRpbWVyKSB7XG4gICAgICAgIHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGltZXIgPSBudWxsO1xuICAgICAgICAgIGludm9rZShsYXN0QXJncyk7XG4gICAgICAgIH0sIHRocmVzaG9sZCAtIHBhc3NlZCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGZsdXNoID0gKCkgPT4gbGFzdEFyZ3MgJiYgaW52b2tlKGxhc3RBcmdzKTtcblxuICByZXR1cm4gW3Rocm90dGxlZCwgZmx1c2hdO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0aHJvdHRsZTtcbiIsImltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlckVudlxuICA/ICgob3JpZ2luLCBpc01TSUUpID0+ICh1cmwpID0+IHtcbiAgICAgIHVybCA9IG5ldyBVUkwodXJsLCBwbGF0Zm9ybS5vcmlnaW4pO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICBvcmlnaW4ucHJvdG9jb2wgPT09IHVybC5wcm90b2NvbCAmJlxuICAgICAgICBvcmlnaW4uaG9zdCA9PT0gdXJsLmhvc3QgJiZcbiAgICAgICAgKGlzTVNJRSB8fCBvcmlnaW4ucG9ydCA9PT0gdXJsLnBvcnQpXG4gICAgICApO1xuICAgIH0pKFxuICAgICAgbmV3IFVSTChwbGF0Zm9ybS5vcmlnaW4pLFxuICAgICAgcGxhdGZvcm0ubmF2aWdhdG9yICYmIC8obXNpZXx0cmlkZW50KS9pLnRlc3QocGxhdGZvcm0ubmF2aWdhdG9yLnVzZXJBZ2VudClcbiAgICApXG4gIDogKCkgPT4gdHJ1ZTtcbiIsImltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuXG5leHBvcnQgZGVmYXVsdCBwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnZcbiAgPyAvLyBTdGFuZGFyZCBicm93c2VyIGVudnMgc3VwcG9ydCBkb2N1bWVudC5jb29raWVcbiAgICB7XG4gICAgICB3cml0ZShuYW1lLCB2YWx1ZSwgZXhwaXJlcywgcGF0aCwgZG9tYWluLCBzZWN1cmUsIHNhbWVTaXRlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgY29va2llID0gW2Ake25hbWV9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKX1gXTtcblxuICAgICAgICBpZiAodXRpbHMuaXNOdW1iZXIoZXhwaXJlcykpIHtcbiAgICAgICAgICBjb29raWUucHVzaChgZXhwaXJlcz0ke25ldyBEYXRlKGV4cGlyZXMpLnRvVVRDU3RyaW5nKCl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHV0aWxzLmlzU3RyaW5nKHBhdGgpKSB7XG4gICAgICAgICAgY29va2llLnB1c2goYHBhdGg9JHtwYXRofWApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1dGlscy5pc1N0cmluZyhkb21haW4pKSB7XG4gICAgICAgICAgY29va2llLnB1c2goYGRvbWFpbj0ke2RvbWFpbn1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VjdXJlID09PSB0cnVlKSB7XG4gICAgICAgICAgY29va2llLnB1c2goJ3NlY3VyZScpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1dGlscy5pc1N0cmluZyhzYW1lU2l0ZSkpIHtcbiAgICAgICAgICBjb29raWUucHVzaChgU2FtZVNpdGU9JHtzYW1lU2l0ZX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRvY3VtZW50LmNvb2tpZSA9IGNvb2tpZS5qb2luKCc7ICcpO1xuICAgICAgfSxcblxuICAgICAgcmVhZChuYW1lKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSByZXR1cm4gbnVsbDtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBkb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgnKD86Xnw7ICknICsgbmFtZSArICc9KFteO10qKScpKTtcbiAgICAgICAgcmV0dXJuIG1hdGNoID8gZGVjb2RlVVJJQ29tcG9uZW50KG1hdGNoWzFdKSA6IG51bGw7XG4gICAgICB9LFxuXG4gICAgICByZW1vdmUobmFtZSkge1xuICAgICAgICB0aGlzLndyaXRlKG5hbWUsICcnLCBEYXRlLm5vdygpIC0gODY0MDAwMDAsICcvJyk7XG4gICAgICB9LFxuICAgIH1cbiAgOiAvLyBOb24tc3RhbmRhcmQgYnJvd3NlciBlbnYgKHdlYiB3b3JrZXJzLCByZWFjdC1uYXRpdmUpIGxhY2sgbmVlZGVkIHN1cHBvcnQuXG4gICAge1xuICAgICAgd3JpdGUoKSB7fSxcbiAgICAgIHJlYWQoKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSxcbiAgICAgIHJlbW92ZSgpIHt9LFxuICAgIH07XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBpc0Fic29sdXRlVVJMIGZyb20gJy4uL2hlbHBlcnMvaXNBYnNvbHV0ZVVSTC5qcyc7XG5pbXBvcnQgY29tYmluZVVSTHMgZnJvbSAnLi4vaGVscGVycy9jb21iaW5lVVJMcy5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBVUkwgYnkgY29tYmluaW5nIHRoZSBiYXNlVVJMIHdpdGggdGhlIHJlcXVlc3RlZFVSTCxcbiAqIG9ubHkgd2hlbiB0aGUgcmVxdWVzdGVkVVJMIGlzIG5vdCBhbHJlYWR5IGFuIGFic29sdXRlIFVSTC5cbiAqIElmIHRoZSByZXF1ZXN0VVJMIGlzIGFic29sdXRlLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHJlcXVlc3RlZFVSTCB1bnRvdWNoZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwgVGhlIGJhc2UgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVxdWVzdGVkVVJMIEFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBjb21iaW5lXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIGZ1bGwgcGF0aFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBidWlsZEZ1bGxQYXRoKGJhc2VVUkwsIHJlcXVlc3RlZFVSTCwgYWxsb3dBYnNvbHV0ZVVybHMpIHtcbiAgbGV0IGlzUmVsYXRpdmVVcmwgPSAhaXNBYnNvbHV0ZVVSTChyZXF1ZXN0ZWRVUkwpO1xuICBpZiAoYmFzZVVSTCAmJiAoaXNSZWxhdGl2ZVVybCB8fCBhbGxvd0Fic29sdXRlVXJscyA9PSBmYWxzZSkpIHtcbiAgICByZXR1cm4gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKTtcbiAgfVxuICByZXR1cm4gcmVxdWVzdGVkVVJMO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgc3BlY2lmaWVkIFVSTCBpcyBhYnNvbHV0ZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIFVSTCB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0Fic29sdXRlVVJMKHVybCkge1xuICAvLyBBIFVSTCBpcyBjb25zaWRlcmVkIGFic29sdXRlIGlmIGl0IGJlZ2lucyB3aXRoIFwiPHNjaGVtZT46Ly9cIiBvciBcIi8vXCIgKHByb3RvY29sLXJlbGF0aXZlIFVSTCkuXG4gIC8vIFJGQyAzOTg2IGRlZmluZXMgc2NoZW1lIG5hbWUgYXMgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIGJlZ2lubmluZyB3aXRoIGEgbGV0dGVyIGFuZCBmb2xsb3dlZFxuICAvLyBieSBhbnkgY29tYmluYXRpb24gb2YgbGV0dGVycywgZGlnaXRzLCBwbHVzLCBwZXJpb2QsIG9yIGh5cGhlbi5cbiAgaWYgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIC9eKFthLXpdW2EtelxcZCtcXC0uXSo6KT9cXC9cXC8vaS50ZXN0KHVybCk7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBVUkwgYnkgY29tYmluaW5nIHRoZSBzcGVjaWZpZWQgVVJMc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aXZlVVJMIFRoZSByZWxhdGl2ZSBVUkxcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tYmluZWQgVVJMXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbWJpbmVVUkxzKGJhc2VVUkwsIHJlbGF0aXZlVVJMKSB7XG4gIHJldHVybiByZWxhdGl2ZVVSTFxuICAgID8gYmFzZVVSTC5yZXBsYWNlKC9cXC8/XFwvJC8sICcnKSArICcvJyArIHJlbGF0aXZlVVJMLnJlcGxhY2UoL15cXC8rLywgJycpXG4gICAgOiBiYXNlVVJMO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuL0F4aW9zSGVhZGVycy5qcyc7XG5cbmNvbnN0IGhlYWRlcnNUb09iamVjdCA9ICh0aGluZykgPT4gKHRoaW5nIGluc3RhbmNlb2YgQXhpb3NIZWFkZXJzID8geyAuLi50aGluZyB9IDogdGhpbmcpO1xuXG4vKipcbiAqIENvbmZpZy1zcGVjaWZpYyBtZXJnZS1mdW5jdGlvbiB3aGljaCBjcmVhdGVzIGEgbmV3IGNvbmZpZy1vYmplY3RcbiAqIGJ5IG1lcmdpbmcgdHdvIGNvbmZpZ3VyYXRpb24gb2JqZWN0cyB0b2dldGhlci5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMVxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZzJcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBOZXcgb2JqZWN0IHJlc3VsdGluZyBmcm9tIG1lcmdpbmcgY29uZmlnMiB0byBjb25maWcxXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1lcmdlQ29uZmlnKGNvbmZpZzEsIGNvbmZpZzIpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIGNvbmZpZzIgPSBjb25maWcyIHx8IHt9O1xuICBjb25zdCBjb25maWcgPSB7fTtcblxuICBmdW5jdGlvbiBnZXRNZXJnZWRWYWx1ZSh0YXJnZXQsIHNvdXJjZSwgcHJvcCwgY2FzZWxlc3MpIHtcbiAgICBpZiAodXRpbHMuaXNQbGFpbk9iamVjdCh0YXJnZXQpICYmIHV0aWxzLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzLm1lcmdlLmNhbGwoeyBjYXNlbGVzcyB9LCB0YXJnZXQsIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscy5pc1BsYWluT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB1dGlscy5tZXJnZSh7fSwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzQXJyYXkoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHNvdXJjZS5zbGljZSgpO1xuICAgIH1cbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgZnVuY3Rpb24gbWVyZ2VEZWVwUHJvcGVydGllcyhhLCBiLCBwcm9wLCBjYXNlbGVzcykge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZShhLCBiLCBwcm9wLCBjYXNlbGVzcyk7XG4gICAgfSBlbHNlIGlmICghdXRpbHMuaXNVbmRlZmluZWQoYSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGEsIHByb3AsIGNhc2VsZXNzKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gdmFsdWVGcm9tQ29uZmlnMihhLCBiKSB7XG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChiKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYik7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIGRlZmF1bHRUb0NvbmZpZzIoYSwgYikge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGIpO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGEpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBhKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gbWVyZ2VEaXJlY3RLZXlzKGEsIGIsIHByb3ApIHtcbiAgICBpZiAocHJvcCBpbiBjb25maWcyKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUoYSwgYik7XG4gICAgfSBlbHNlIGlmIChwcm9wIGluIGNvbmZpZzEpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGEpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG1lcmdlTWFwID0ge1xuICAgIHVybDogdmFsdWVGcm9tQ29uZmlnMixcbiAgICBtZXRob2Q6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgZGF0YTogdmFsdWVGcm9tQ29uZmlnMixcbiAgICBiYXNlVVJMOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRyYW5zZm9ybVJlcXVlc3Q6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdHJhbnNmb3JtUmVzcG9uc2U6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgcGFyYW1zU2VyaWFsaXplcjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0aW1lb3V0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRpbWVvdXRNZXNzYWdlOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHdpdGhDcmVkZW50aWFsczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB3aXRoWFNSRlRva2VuOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGFkYXB0ZXI6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgcmVzcG9uc2VUeXBlOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHhzcmZDb29raWVOYW1lOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHhzcmZIZWFkZXJOYW1lOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG9uVXBsb2FkUHJvZ3Jlc3M6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgb25Eb3dubG9hZFByb2dyZXNzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGRlY29tcHJlc3M6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgbWF4Q29udGVudExlbmd0aDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBtYXhCb2R5TGVuZ3RoOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGJlZm9yZVJlZGlyZWN0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRyYW5zcG9ydDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBodHRwQWdlbnQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgaHR0cHNBZ2VudDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBjYW5jZWxUb2tlbjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBzb2NrZXRQYXRoOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHJlc3BvbnNlRW5jb2Rpbmc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdmFsaWRhdGVTdGF0dXM6IG1lcmdlRGlyZWN0S2V5cyxcbiAgICBoZWFkZXJzOiAoYSwgYiwgcHJvcCkgPT5cbiAgICAgIG1lcmdlRGVlcFByb3BlcnRpZXMoaGVhZGVyc1RvT2JqZWN0KGEpLCBoZWFkZXJzVG9PYmplY3QoYiksIHByb3AsIHRydWUpLFxuICB9O1xuXG4gIHV0aWxzLmZvckVhY2goT2JqZWN0LmtleXMoeyAuLi5jb25maWcxLCAuLi5jb25maWcyIH0pLCBmdW5jdGlvbiBjb21wdXRlQ29uZmlnVmFsdWUocHJvcCkge1xuICAgIGlmIChwcm9wID09PSAnX19wcm90b19fJyB8fCBwcm9wID09PSAnY29uc3RydWN0b3InIHx8IHByb3AgPT09ICdwcm90b3R5cGUnKSByZXR1cm47XG4gICAgY29uc3QgbWVyZ2UgPSB1dGlscy5oYXNPd25Qcm9wKG1lcmdlTWFwLCBwcm9wKSA/IG1lcmdlTWFwW3Byb3BdIDogbWVyZ2VEZWVwUHJvcGVydGllcztcbiAgICBjb25zdCBjb25maWdWYWx1ZSA9IG1lcmdlKGNvbmZpZzFbcHJvcF0sIGNvbmZpZzJbcHJvcF0sIHByb3ApO1xuICAgICh1dGlscy5pc1VuZGVmaW5lZChjb25maWdWYWx1ZSkgJiYgbWVyZ2UgIT09IG1lcmdlRGlyZWN0S2V5cykgfHwgKGNvbmZpZ1twcm9wXSA9IGNvbmZpZ1ZhbHVlKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGNvbmZpZztcbn1cbiIsImltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IGlzVVJMU2FtZU9yaWdpbiBmcm9tICcuL2lzVVJMU2FtZU9yaWdpbi5qcyc7XG5pbXBvcnQgY29va2llcyBmcm9tICcuL2Nvb2tpZXMuanMnO1xuaW1wb3J0IGJ1aWxkRnVsbFBhdGggZnJvbSAnLi4vY29yZS9idWlsZEZ1bGxQYXRoLmpzJztcbmltcG9ydCBtZXJnZUNvbmZpZyBmcm9tICcuLi9jb3JlL21lcmdlQ29uZmlnLmpzJztcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSAnLi4vY29yZS9BeGlvc0hlYWRlcnMuanMnO1xuaW1wb3J0IGJ1aWxkVVJMIGZyb20gJy4vYnVpbGRVUkwuanMnO1xuXG5leHBvcnQgZGVmYXVsdCAoY29uZmlnKSA9PiB7XG4gIGNvbnN0IG5ld0NvbmZpZyA9IG1lcmdlQ29uZmlnKHt9LCBjb25maWcpO1xuXG4gIGxldCB7IGRhdGEsIHdpdGhYU1JGVG9rZW4sIHhzcmZIZWFkZXJOYW1lLCB4c3JmQ29va2llTmFtZSwgaGVhZGVycywgYXV0aCB9ID0gbmV3Q29uZmlnO1xuXG4gIG5ld0NvbmZpZy5oZWFkZXJzID0gaGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKGhlYWRlcnMpO1xuXG4gIG5ld0NvbmZpZy51cmwgPSBidWlsZFVSTChcbiAgICBidWlsZEZ1bGxQYXRoKG5ld0NvbmZpZy5iYXNlVVJMLCBuZXdDb25maWcudXJsLCBuZXdDb25maWcuYWxsb3dBYnNvbHV0ZVVybHMpLFxuICAgIGNvbmZpZy5wYXJhbXMsXG4gICAgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXJcbiAgKTtcblxuICAvLyBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uXG4gIGlmIChhdXRoKSB7XG4gICAgaGVhZGVycy5zZXQoXG4gICAgICAnQXV0aG9yaXphdGlvbicsXG4gICAgICAnQmFzaWMgJyArXG4gICAgICAgIGJ0b2EoXG4gICAgICAgICAgKGF1dGgudXNlcm5hbWUgfHwgJycpICtcbiAgICAgICAgICAgICc6JyArXG4gICAgICAgICAgICAoYXV0aC5wYXNzd29yZCA/IHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChhdXRoLnBhc3N3b3JkKSkgOiAnJylcbiAgICAgICAgKVxuICAgICk7XG4gIH1cblxuICBpZiAodXRpbHMuaXNGb3JtRGF0YShkYXRhKSkge1xuICAgIGlmIChwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYgfHwgcGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52KSB7XG4gICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKHVuZGVmaW5lZCk7IC8vIGJyb3dzZXIgaGFuZGxlcyBpdFxuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNGdW5jdGlvbihkYXRhLmdldEhlYWRlcnMpKSB7XG4gICAgICAvLyBOb2RlLmpzIEZvcm1EYXRhIChsaWtlIGZvcm0tZGF0YSBwYWNrYWdlKVxuICAgICAgY29uc3QgZm9ybUhlYWRlcnMgPSBkYXRhLmdldEhlYWRlcnMoKTtcbiAgICAgIC8vIE9ubHkgc2V0IHNhZmUgaGVhZGVycyB0byBhdm9pZCBvdmVyd3JpdGluZyBzZWN1cml0eSBoZWFkZXJzXG4gICAgICBjb25zdCBhbGxvd2VkSGVhZGVycyA9IFsnY29udGVudC10eXBlJywgJ2NvbnRlbnQtbGVuZ3RoJ107XG4gICAgICBPYmplY3QuZW50cmllcyhmb3JtSGVhZGVycykuZm9yRWFjaCgoW2tleSwgdmFsXSkgPT4ge1xuICAgICAgICBpZiAoYWxsb3dlZEhlYWRlcnMuaW5jbHVkZXMoa2V5LnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgaGVhZGVycy5zZXQoa2V5LCB2YWwpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvLyBBZGQgeHNyZiBoZWFkZXJcbiAgLy8gVGhpcyBpcyBvbmx5IGRvbmUgaWYgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnQuXG4gIC8vIFNwZWNpZmljYWxseSBub3QgaWYgd2UncmUgaW4gYSB3ZWIgd29ya2VyLCBvciByZWFjdC1uYXRpdmUuXG5cbiAgaWYgKHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlckVudikge1xuICAgIHdpdGhYU1JGVG9rZW4gJiYgdXRpbHMuaXNGdW5jdGlvbih3aXRoWFNSRlRva2VuKSAmJiAod2l0aFhTUkZUb2tlbiA9IHdpdGhYU1JGVG9rZW4obmV3Q29uZmlnKSk7XG5cbiAgICBpZiAod2l0aFhTUkZUb2tlbiB8fCAod2l0aFhTUkZUb2tlbiAhPT0gZmFsc2UgJiYgaXNVUkxTYW1lT3JpZ2luKG5ld0NvbmZpZy51cmwpKSkge1xuICAgICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgICBjb25zdCB4c3JmVmFsdWUgPSB4c3JmSGVhZGVyTmFtZSAmJiB4c3JmQ29va2llTmFtZSAmJiBjb29raWVzLnJlYWQoeHNyZkNvb2tpZU5hbWUpO1xuXG4gICAgICBpZiAoeHNyZlZhbHVlKSB7XG4gICAgICAgIGhlYWRlcnMuc2V0KHhzcmZIZWFkZXJOYW1lLCB4c3JmVmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXdDb25maWc7XG59O1xuIiwiaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBzZXR0bGUgZnJvbSAnLi4vY29yZS9zZXR0bGUuanMnO1xuaW1wb3J0IHRyYW5zaXRpb25hbERlZmF1bHRzIGZyb20gJy4uL2RlZmF1bHRzL3RyYW5zaXRpb25hbC5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IENhbmNlbGVkRXJyb3IgZnJvbSAnLi4vY2FuY2VsL0NhbmNlbGVkRXJyb3IuanMnO1xuaW1wb3J0IHBhcnNlUHJvdG9jb2wgZnJvbSAnLi4vaGVscGVycy9wYXJzZVByb3RvY29sLmpzJztcbmltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gJy4uL2NvcmUvQXhpb3NIZWFkZXJzLmpzJztcbmltcG9ydCB7IHByb2dyZXNzRXZlbnRSZWR1Y2VyIH0gZnJvbSAnLi4vaGVscGVycy9wcm9ncmVzc0V2ZW50UmVkdWNlci5qcyc7XG5pbXBvcnQgcmVzb2x2ZUNvbmZpZyBmcm9tICcuLi9oZWxwZXJzL3Jlc29sdmVDb25maWcuanMnO1xuXG5jb25zdCBpc1hIUkFkYXB0ZXJTdXBwb3J0ZWQgPSB0eXBlb2YgWE1MSHR0cFJlcXVlc3QgIT09ICd1bmRlZmluZWQnO1xuXG5leHBvcnQgZGVmYXVsdCBpc1hIUkFkYXB0ZXJTdXBwb3J0ZWQgJiZcbiAgZnVuY3Rpb24gKGNvbmZpZykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiBkaXNwYXRjaFhoclJlcXVlc3QocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBjb25zdCBfY29uZmlnID0gcmVzb2x2ZUNvbmZpZyhjb25maWcpO1xuICAgICAgbGV0IHJlcXVlc3REYXRhID0gX2NvbmZpZy5kYXRhO1xuICAgICAgY29uc3QgcmVxdWVzdEhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShfY29uZmlnLmhlYWRlcnMpLm5vcm1hbGl6ZSgpO1xuICAgICAgbGV0IHsgcmVzcG9uc2VUeXBlLCBvblVwbG9hZFByb2dyZXNzLCBvbkRvd25sb2FkUHJvZ3Jlc3MgfSA9IF9jb25maWc7XG4gICAgICBsZXQgb25DYW5jZWxlZDtcbiAgICAgIGxldCB1cGxvYWRUaHJvdHRsZWQsIGRvd25sb2FkVGhyb3R0bGVkO1xuICAgICAgbGV0IGZsdXNoVXBsb2FkLCBmbHVzaERvd25sb2FkO1xuXG4gICAgICBmdW5jdGlvbiBkb25lKCkge1xuICAgICAgICBmbHVzaFVwbG9hZCAmJiBmbHVzaFVwbG9hZCgpOyAvLyBmbHVzaCBldmVudHNcbiAgICAgICAgZmx1c2hEb3dubG9hZCAmJiBmbHVzaERvd25sb2FkKCk7IC8vIGZsdXNoIGV2ZW50c1xuXG4gICAgICAgIF9jb25maWcuY2FuY2VsVG9rZW4gJiYgX2NvbmZpZy5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShvbkNhbmNlbGVkKTtcblxuICAgICAgICBfY29uZmlnLnNpZ25hbCAmJiBfY29uZmlnLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQ2FuY2VsZWQpO1xuICAgICAgfVxuXG4gICAgICBsZXQgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXG4gICAgICByZXF1ZXN0Lm9wZW4oX2NvbmZpZy5tZXRob2QudG9VcHBlckNhc2UoKSwgX2NvbmZpZy51cmwsIHRydWUpO1xuXG4gICAgICAvLyBTZXQgdGhlIHJlcXVlc3QgdGltZW91dCBpbiBNU1xuICAgICAgcmVxdWVzdC50aW1lb3V0ID0gX2NvbmZpZy50aW1lb3V0O1xuXG4gICAgICBmdW5jdGlvbiBvbmxvYWRlbmQoKSB7XG4gICAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBQcmVwYXJlIHRoZSByZXNwb25zZVxuICAgICAgICBjb25zdCByZXNwb25zZUhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShcbiAgICAgICAgICAnZ2V0QWxsUmVzcG9uc2VIZWFkZXJzJyBpbiByZXF1ZXN0ICYmIHJlcXVlc3QuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKClcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgcmVzcG9uc2VEYXRhID1cbiAgICAgICAgICAhcmVzcG9uc2VUeXBlIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ3RleHQnIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nXG4gICAgICAgICAgICA/IHJlcXVlc3QucmVzcG9uc2VUZXh0XG4gICAgICAgICAgICA6IHJlcXVlc3QucmVzcG9uc2U7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgICAgICAgIGRhdGE6IHJlc3BvbnNlRGF0YSxcbiAgICAgICAgICBzdGF0dXM6IHJlcXVlc3Quc3RhdHVzLFxuICAgICAgICAgIHN0YXR1c1RleHQ6IHJlcXVlc3Quc3RhdHVzVGV4dCxcbiAgICAgICAgICBoZWFkZXJzOiByZXNwb25zZUhlYWRlcnMsXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIHJlcXVlc3QsXG4gICAgICAgIH07XG5cbiAgICAgICAgc2V0dGxlKFxuICAgICAgICAgIGZ1bmN0aW9uIF9yZXNvbHZlKHZhbHVlKSB7XG4gICAgICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZ1bmN0aW9uIF9yZWplY3QoZXJyKSB7XG4gICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc3BvbnNlXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKCdvbmxvYWRlbmQnIGluIHJlcXVlc3QpIHtcbiAgICAgICAgLy8gVXNlIG9ubG9hZGVuZCBpZiBhdmFpbGFibGVcbiAgICAgICAgcmVxdWVzdC5vbmxvYWRlbmQgPSBvbmxvYWRlbmQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBMaXN0ZW4gZm9yIHJlYWR5IHN0YXRlIHRvIGVtdWxhdGUgb25sb2FkZW5kXG4gICAgICAgIHJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gaGFuZGxlTG9hZCgpIHtcbiAgICAgICAgICBpZiAoIXJlcXVlc3QgfHwgcmVxdWVzdC5yZWFkeVN0YXRlICE9PSA0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gVGhlIHJlcXVlc3QgZXJyb3JlZCBvdXQgYW5kIHdlIGRpZG4ndCBnZXQgYSByZXNwb25zZSwgdGhpcyB3aWxsIGJlXG4gICAgICAgICAgLy8gaGFuZGxlZCBieSBvbmVycm9yIGluc3RlYWRcbiAgICAgICAgICAvLyBXaXRoIG9uZSBleGNlcHRpb246IHJlcXVlc3QgdGhhdCB1c2luZyBmaWxlOiBwcm90b2NvbCwgbW9zdCBicm93c2Vyc1xuICAgICAgICAgIC8vIHdpbGwgcmV0dXJuIHN0YXR1cyBhcyAwIGV2ZW4gdGhvdWdoIGl0J3MgYSBzdWNjZXNzZnVsIHJlcXVlc3RcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICByZXF1ZXN0LnN0YXR1cyA9PT0gMCAmJlxuICAgICAgICAgICAgIShyZXF1ZXN0LnJlc3BvbnNlVVJMICYmIHJlcXVlc3QucmVzcG9uc2VVUkwuaW5kZXhPZignZmlsZTonKSA9PT0gMClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gcmVhZHlzdGF0ZSBoYW5kbGVyIGlzIGNhbGxpbmcgYmVmb3JlIG9uZXJyb3Igb3Igb250aW1lb3V0IGhhbmRsZXJzLFxuICAgICAgICAgIC8vIHNvIHdlIHNob3VsZCBjYWxsIG9ubG9hZGVuZCBvbiB0aGUgbmV4dCAndGljaydcbiAgICAgICAgICBzZXRUaW1lb3V0KG9ubG9hZGVuZCk7XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIEhhbmRsZSBicm93c2VyIHJlcXVlc3QgY2FuY2VsbGF0aW9uIChhcyBvcHBvc2VkIHRvIGEgbWFudWFsIGNhbmNlbGxhdGlvbilcbiAgICAgIHJlcXVlc3Qub25hYm9ydCA9IGZ1bmN0aW9uIGhhbmRsZUFib3J0KCkge1xuICAgICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ1JlcXVlc3QgYWJvcnRlZCcsIEF4aW9zRXJyb3IuRUNPTk5BQk9SVEVELCBjb25maWcsIHJlcXVlc3QpKTtcblxuICAgICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgICAgfTtcblxuICAgICAgLy8gSGFuZGxlIGxvdyBsZXZlbCBuZXR3b3JrIGVycm9yc1xuICAgICAgcmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24gaGFuZGxlRXJyb3IoZXZlbnQpIHtcbiAgICAgICAgLy8gQnJvd3NlcnMgZGVsaXZlciBhIFByb2dyZXNzRXZlbnQgaW4gWEhSIG9uZXJyb3JcbiAgICAgICAgLy8gKG1lc3NhZ2UgbWF5IGJlIGVtcHR5OyB3aGVuIHByZXNlbnQsIHN1cmZhY2UgaXQpXG4gICAgICAgIC8vIFNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9BUEkvWE1MSHR0cFJlcXVlc3QvZXJyb3JfZXZlbnRcbiAgICAgICAgY29uc3QgbXNnID0gZXZlbnQgJiYgZXZlbnQubWVzc2FnZSA/IGV2ZW50Lm1lc3NhZ2UgOiAnTmV0d29yayBFcnJvcic7XG4gICAgICAgIGNvbnN0IGVyciA9IG5ldyBBeGlvc0Vycm9yKG1zZywgQXhpb3NFcnJvci5FUlJfTkVUV09SSywgY29uZmlnLCByZXF1ZXN0KTtcbiAgICAgICAgLy8gYXR0YWNoIHRoZSB1bmRlcmx5aW5nIGV2ZW50IGZvciBjb25zdW1lcnMgd2hvIHdhbnQgZGV0YWlsc1xuICAgICAgICBlcnIuZXZlbnQgPSBldmVudCB8fCBudWxsO1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgICB9O1xuXG4gICAgICAvLyBIYW5kbGUgdGltZW91dFxuICAgICAgcmVxdWVzdC5vbnRpbWVvdXQgPSBmdW5jdGlvbiBoYW5kbGVUaW1lb3V0KCkge1xuICAgICAgICBsZXQgdGltZW91dEVycm9yTWVzc2FnZSA9IF9jb25maWcudGltZW91dFxuICAgICAgICAgID8gJ3RpbWVvdXQgb2YgJyArIF9jb25maWcudGltZW91dCArICdtcyBleGNlZWRlZCdcbiAgICAgICAgICA6ICd0aW1lb3V0IGV4Y2VlZGVkJztcbiAgICAgICAgY29uc3QgdHJhbnNpdGlvbmFsID0gX2NvbmZpZy50cmFuc2l0aW9uYWwgfHwgdHJhbnNpdGlvbmFsRGVmYXVsdHM7XG4gICAgICAgIGlmIChfY29uZmlnLnRpbWVvdXRFcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgICB0aW1lb3V0RXJyb3JNZXNzYWdlID0gX2NvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChcbiAgICAgICAgICBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgICAgIHRpbWVvdXRFcnJvck1lc3NhZ2UsXG4gICAgICAgICAgICB0cmFuc2l0aW9uYWwuY2xhcmlmeVRpbWVvdXRFcnJvciA/IEF4aW9zRXJyb3IuRVRJTUVET1VUIDogQXhpb3NFcnJvci5FQ09OTkFCT1JURUQsXG4gICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICByZXF1ZXN0XG4gICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgICB9O1xuXG4gICAgICAvLyBSZW1vdmUgQ29udGVudC1UeXBlIGlmIGRhdGEgaXMgdW5kZWZpbmVkXG4gICAgICByZXF1ZXN0RGF0YSA9PT0gdW5kZWZpbmVkICYmIHJlcXVlc3RIZWFkZXJzLnNldENvbnRlbnRUeXBlKG51bGwpO1xuXG4gICAgICAvLyBBZGQgaGVhZGVycyB0byB0aGUgcmVxdWVzdFxuICAgICAgaWYgKCdzZXRSZXF1ZXN0SGVhZGVyJyBpbiByZXF1ZXN0KSB7XG4gICAgICAgIHV0aWxzLmZvckVhY2gocmVxdWVzdEhlYWRlcnMudG9KU09OKCksIGZ1bmN0aW9uIHNldFJlcXVlc3RIZWFkZXIodmFsLCBrZXkpIHtcbiAgICAgICAgICByZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoa2V5LCB2YWwpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gQWRkIHdpdGhDcmVkZW50aWFscyB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChfY29uZmlnLndpdGhDcmVkZW50aWFscykpIHtcbiAgICAgICAgcmVxdWVzdC53aXRoQ3JlZGVudGlhbHMgPSAhIV9jb25maWcud2l0aENyZWRlbnRpYWxzO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgcmVzcG9uc2VUeXBlIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgICBpZiAocmVzcG9uc2VUeXBlICYmIHJlc3BvbnNlVHlwZSAhPT0gJ2pzb24nKSB7XG4gICAgICAgIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gX2NvbmZpZy5yZXNwb25zZVR5cGU7XG4gICAgICB9XG5cbiAgICAgIC8vIEhhbmRsZSBwcm9ncmVzcyBpZiBuZWVkZWRcbiAgICAgIGlmIChvbkRvd25sb2FkUHJvZ3Jlc3MpIHtcbiAgICAgICAgW2Rvd25sb2FkVGhyb3R0bGVkLCBmbHVzaERvd25sb2FkXSA9IHByb2dyZXNzRXZlbnRSZWR1Y2VyKG9uRG93bmxvYWRQcm9ncmVzcywgdHJ1ZSk7XG4gICAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBkb3dubG9hZFRocm90dGxlZCk7XG4gICAgICB9XG5cbiAgICAgIC8vIE5vdCBhbGwgYnJvd3NlcnMgc3VwcG9ydCB1cGxvYWQgZXZlbnRzXG4gICAgICBpZiAob25VcGxvYWRQcm9ncmVzcyAmJiByZXF1ZXN0LnVwbG9hZCkge1xuICAgICAgICBbdXBsb2FkVGhyb3R0bGVkLCBmbHVzaFVwbG9hZF0gPSBwcm9ncmVzc0V2ZW50UmVkdWNlcihvblVwbG9hZFByb2dyZXNzKTtcblxuICAgICAgICByZXF1ZXN0LnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHVwbG9hZFRocm90dGxlZCk7XG5cbiAgICAgICAgcmVxdWVzdC51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVuZCcsIGZsdXNoVXBsb2FkKTtcbiAgICAgIH1cblxuICAgICAgaWYgKF9jb25maWcuY2FuY2VsVG9rZW4gfHwgX2NvbmZpZy5zaWduYWwpIHtcbiAgICAgICAgLy8gSGFuZGxlIGNhbmNlbGxhdGlvblxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgICAgICBvbkNhbmNlbGVkID0gKGNhbmNlbCkgPT4ge1xuICAgICAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZWplY3QoIWNhbmNlbCB8fCBjYW5jZWwudHlwZSA/IG5ldyBDYW5jZWxlZEVycm9yKG51bGwsIGNvbmZpZywgcmVxdWVzdCkgOiBjYW5jZWwpO1xuICAgICAgICAgIHJlcXVlc3QuYWJvcnQoKTtcbiAgICAgICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICAgICAgfTtcblxuICAgICAgICBfY29uZmlnLmNhbmNlbFRva2VuICYmIF9jb25maWcuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKG9uQ2FuY2VsZWQpO1xuICAgICAgICBpZiAoX2NvbmZpZy5zaWduYWwpIHtcbiAgICAgICAgICBfY29uZmlnLnNpZ25hbC5hYm9ydGVkXG4gICAgICAgICAgICA/IG9uQ2FuY2VsZWQoKVxuICAgICAgICAgICAgOiBfY29uZmlnLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQ2FuY2VsZWQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHByb3RvY29sID0gcGFyc2VQcm90b2NvbChfY29uZmlnLnVybCk7XG5cbiAgICAgIGlmIChwcm90b2NvbCAmJiBwbGF0Zm9ybS5wcm90b2NvbHMuaW5kZXhPZihwcm90b2NvbCkgPT09IC0xKSB7XG4gICAgICAgIHJlamVjdChcbiAgICAgICAgICBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgICAgICdVbnN1cHBvcnRlZCBwcm90b2NvbCAnICsgcHJvdG9jb2wgKyAnOicsXG4gICAgICAgICAgICBBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCxcbiAgICAgICAgICAgIGNvbmZpZ1xuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBTZW5kIHRoZSByZXF1ZXN0XG4gICAgICByZXF1ZXN0LnNlbmQocmVxdWVzdERhdGEgfHwgbnVsbCk7XG4gICAgfSk7XG4gIH07XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBhcnNlUHJvdG9jb2wodXJsKSB7XG4gIGNvbnN0IG1hdGNoID0gL14oWy0rXFx3XXsxLDI1fSkoOj9cXC9cXC98OikvLmV4ZWModXJsKTtcbiAgcmV0dXJuIChtYXRjaCAmJiBtYXRjaFsxXSkgfHwgJyc7XG59XG4iLCJpbXBvcnQgQ2FuY2VsZWRFcnJvciBmcm9tICcuLi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcblxuY29uc3QgY29tcG9zZVNpZ25hbHMgPSAoc2lnbmFscywgdGltZW91dCkgPT4ge1xuICBjb25zdCB7IGxlbmd0aCB9ID0gKHNpZ25hbHMgPSBzaWduYWxzID8gc2lnbmFscy5maWx0ZXIoQm9vbGVhbikgOiBbXSk7XG5cbiAgaWYgKHRpbWVvdXQgfHwgbGVuZ3RoKSB7XG4gICAgbGV0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICBsZXQgYWJvcnRlZDtcblxuICAgIGNvbnN0IG9uYWJvcnQgPSBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICBpZiAoIWFib3J0ZWQpIHtcbiAgICAgICAgYWJvcnRlZCA9IHRydWU7XG4gICAgICAgIHVuc3Vic2NyaWJlKCk7XG4gICAgICAgIGNvbnN0IGVyciA9IHJlYXNvbiBpbnN0YW5jZW9mIEVycm9yID8gcmVhc29uIDogdGhpcy5yZWFzb247XG4gICAgICAgIGNvbnRyb2xsZXIuYWJvcnQoXG4gICAgICAgICAgZXJyIGluc3RhbmNlb2YgQXhpb3NFcnJvclxuICAgICAgICAgICAgPyBlcnJcbiAgICAgICAgICAgIDogbmV3IENhbmNlbGVkRXJyb3IoZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IGVycilcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgbGV0IHRpbWVyID1cbiAgICAgIHRpbWVvdXQgJiZcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aW1lciA9IG51bGw7XG4gICAgICAgIG9uYWJvcnQobmV3IEF4aW9zRXJyb3IoYHRpbWVvdXQgb2YgJHt0aW1lb3V0fW1zIGV4Y2VlZGVkYCwgQXhpb3NFcnJvci5FVElNRURPVVQpKTtcbiAgICAgIH0sIHRpbWVvdXQpO1xuXG4gICAgY29uc3QgdW5zdWJzY3JpYmUgPSAoKSA9PiB7XG4gICAgICBpZiAoc2lnbmFscykge1xuICAgICAgICB0aW1lciAmJiBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICB0aW1lciA9IG51bGw7XG4gICAgICAgIHNpZ25hbHMuZm9yRWFjaCgoc2lnbmFsKSA9PiB7XG4gICAgICAgICAgc2lnbmFsLnVuc3Vic2NyaWJlXG4gICAgICAgICAgICA/IHNpZ25hbC51bnN1YnNjcmliZShvbmFib3J0KVxuICAgICAgICAgICAgOiBzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbmFib3J0KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHNpZ25hbHMgPSBudWxsO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBzaWduYWxzLmZvckVhY2goKHNpZ25hbCkgPT4gc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25hYm9ydCkpO1xuXG4gICAgY29uc3QgeyBzaWduYWwgfSA9IGNvbnRyb2xsZXI7XG5cbiAgICBzaWduYWwudW5zdWJzY3JpYmUgPSAoKSA9PiB1dGlscy5hc2FwKHVuc3Vic2NyaWJlKTtcblxuICAgIHJldHVybiBzaWduYWw7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvc2VTaWduYWxzO1xuIiwiZXhwb3J0IGNvbnN0IHN0cmVhbUNodW5rID0gZnVuY3Rpb24qIChjaHVuaywgY2h1bmtTaXplKSB7XG4gIGxldCBsZW4gPSBjaHVuay5ieXRlTGVuZ3RoO1xuXG4gIGlmICghY2h1bmtTaXplIHx8IGxlbiA8IGNodW5rU2l6ZSkge1xuICAgIHlpZWxkIGNodW5rO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBwb3MgPSAwO1xuICBsZXQgZW5kO1xuXG4gIHdoaWxlIChwb3MgPCBsZW4pIHtcbiAgICBlbmQgPSBwb3MgKyBjaHVua1NpemU7XG4gICAgeWllbGQgY2h1bmsuc2xpY2UocG9zLCBlbmQpO1xuICAgIHBvcyA9IGVuZDtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHJlYWRCeXRlcyA9IGFzeW5jIGZ1bmN0aW9uKiAoaXRlcmFibGUsIGNodW5rU2l6ZSkge1xuICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIHJlYWRTdHJlYW0oaXRlcmFibGUpKSB7XG4gICAgeWllbGQqIHN0cmVhbUNodW5rKGNodW5rLCBjaHVua1NpemUpO1xuICB9XG59O1xuXG5jb25zdCByZWFkU3RyZWFtID0gYXN5bmMgZnVuY3Rpb24qIChzdHJlYW0pIHtcbiAgaWYgKHN0cmVhbVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0pIHtcbiAgICB5aWVsZCogc3RyZWFtO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHJlYWRlciA9IHN0cmVhbS5nZXRSZWFkZXIoKTtcbiAgdHJ5IHtcbiAgICBmb3IgKDs7KSB7XG4gICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCByZWFkZXIucmVhZCgpO1xuICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICB5aWVsZCB2YWx1ZTtcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgcmVhZGVyLmNhbmNlbCgpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgdHJhY2tTdHJlYW0gPSAoc3RyZWFtLCBjaHVua1NpemUsIG9uUHJvZ3Jlc3MsIG9uRmluaXNoKSA9PiB7XG4gIGNvbnN0IGl0ZXJhdG9yID0gcmVhZEJ5dGVzKHN0cmVhbSwgY2h1bmtTaXplKTtcblxuICBsZXQgYnl0ZXMgPSAwO1xuICBsZXQgZG9uZTtcbiAgbGV0IF9vbkZpbmlzaCA9IChlKSA9PiB7XG4gICAgaWYgKCFkb25lKSB7XG4gICAgICBkb25lID0gdHJ1ZTtcbiAgICAgIG9uRmluaXNoICYmIG9uRmluaXNoKGUpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKFxuICAgIHtcbiAgICAgIGFzeW5jIHB1bGwoY29udHJvbGxlcikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IGl0ZXJhdG9yLm5leHQoKTtcblxuICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICBfb25GaW5pc2goKTtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsZXQgbGVuID0gdmFsdWUuYnl0ZUxlbmd0aDtcbiAgICAgICAgICBpZiAob25Qcm9ncmVzcykge1xuICAgICAgICAgICAgbGV0IGxvYWRlZEJ5dGVzID0gKGJ5dGVzICs9IGxlbik7XG4gICAgICAgICAgICBvblByb2dyZXNzKGxvYWRlZEJ5dGVzKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KHZhbHVlKSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIF9vbkZpbmlzaChlcnIpO1xuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGNhbmNlbChyZWFzb24pIHtcbiAgICAgICAgX29uRmluaXNoKHJlYXNvbik7XG4gICAgICAgIHJldHVybiBpdGVyYXRvci5yZXR1cm4oKTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBoaWdoV2F0ZXJNYXJrOiAyLFxuICAgIH1cbiAgKTtcbn07XG4iLCJpbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4uL2NvcmUvQXhpb3NFcnJvci5qcyc7XG5pbXBvcnQgY29tcG9zZVNpZ25hbHMgZnJvbSAnLi4vaGVscGVycy9jb21wb3NlU2lnbmFscy5qcyc7XG5pbXBvcnQgeyB0cmFja1N0cmVhbSB9IGZyb20gJy4uL2hlbHBlcnMvdHJhY2tTdHJlYW0uanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuLi9jb3JlL0F4aW9zSGVhZGVycy5qcyc7XG5pbXBvcnQge1xuICBwcm9ncmVzc0V2ZW50UmVkdWNlcixcbiAgcHJvZ3Jlc3NFdmVudERlY29yYXRvcixcbiAgYXN5bmNEZWNvcmF0b3IsXG59IGZyb20gJy4uL2hlbHBlcnMvcHJvZ3Jlc3NFdmVudFJlZHVjZXIuanMnO1xuaW1wb3J0IHJlc29sdmVDb25maWcgZnJvbSAnLi4vaGVscGVycy9yZXNvbHZlQ29uZmlnLmpzJztcbmltcG9ydCBzZXR0bGUgZnJvbSAnLi4vY29yZS9zZXR0bGUuanMnO1xuXG5jb25zdCBERUZBVUxUX0NIVU5LX1NJWkUgPSA2NCAqIDEwMjQ7XG5cbmNvbnN0IHsgaXNGdW5jdGlvbiB9ID0gdXRpbHM7XG5cbmNvbnN0IGdsb2JhbEZldGNoQVBJID0gKCh7IFJlcXVlc3QsIFJlc3BvbnNlIH0pID0+ICh7XG4gIFJlcXVlc3QsXG4gIFJlc3BvbnNlLFxufSkpKHV0aWxzLmdsb2JhbCk7XG5cbmNvbnN0IHsgUmVhZGFibGVTdHJlYW0sIFRleHRFbmNvZGVyIH0gPSB1dGlscy5nbG9iYWw7XG5cbmNvbnN0IHRlc3QgPSAoZm4sIC4uLmFyZ3MpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFmbiguLi5hcmdzKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuY29uc3QgZmFjdG9yeSA9IChlbnYpID0+IHtcbiAgZW52ID0gdXRpbHMubWVyZ2UuY2FsbChcbiAgICB7XG4gICAgICBza2lwVW5kZWZpbmVkOiB0cnVlLFxuICAgIH0sXG4gICAgZ2xvYmFsRmV0Y2hBUEksXG4gICAgZW52XG4gICk7XG5cbiAgY29uc3QgeyBmZXRjaDogZW52RmV0Y2gsIFJlcXVlc3QsIFJlc3BvbnNlIH0gPSBlbnY7XG4gIGNvbnN0IGlzRmV0Y2hTdXBwb3J0ZWQgPSBlbnZGZXRjaCA/IGlzRnVuY3Rpb24oZW52RmV0Y2gpIDogdHlwZW9mIGZldGNoID09PSAnZnVuY3Rpb24nO1xuICBjb25zdCBpc1JlcXVlc3RTdXBwb3J0ZWQgPSBpc0Z1bmN0aW9uKFJlcXVlc3QpO1xuICBjb25zdCBpc1Jlc3BvbnNlU3VwcG9ydGVkID0gaXNGdW5jdGlvbihSZXNwb25zZSk7XG5cbiAgaWYgKCFpc0ZldGNoU3VwcG9ydGVkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgaXNSZWFkYWJsZVN0cmVhbVN1cHBvcnRlZCA9IGlzRmV0Y2hTdXBwb3J0ZWQgJiYgaXNGdW5jdGlvbihSZWFkYWJsZVN0cmVhbSk7XG5cbiAgY29uc3QgZW5jb2RlVGV4dCA9XG4gICAgaXNGZXRjaFN1cHBvcnRlZCAmJlxuICAgICh0eXBlb2YgVGV4dEVuY29kZXIgPT09ICdmdW5jdGlvbidcbiAgICAgID8gKFxuICAgICAgICAgIChlbmNvZGVyKSA9PiAoc3RyKSA9PlxuICAgICAgICAgICAgZW5jb2Rlci5lbmNvZGUoc3RyKVxuICAgICAgICApKG5ldyBUZXh0RW5jb2RlcigpKVxuICAgICAgOiBhc3luYyAoc3RyKSA9PiBuZXcgVWludDhBcnJheShhd2FpdCBuZXcgUmVxdWVzdChzdHIpLmFycmF5QnVmZmVyKCkpKTtcblxuICBjb25zdCBzdXBwb3J0c1JlcXVlc3RTdHJlYW0gPVxuICAgIGlzUmVxdWVzdFN1cHBvcnRlZCAmJlxuICAgIGlzUmVhZGFibGVTdHJlYW1TdXBwb3J0ZWQgJiZcbiAgICB0ZXN0KCgpID0+IHtcbiAgICAgIGxldCBkdXBsZXhBY2Nlc3NlZCA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBib2R5ID0gbmV3IFJlYWRhYmxlU3RyZWFtKCk7XG5cbiAgICAgIGNvbnN0IGhhc0NvbnRlbnRUeXBlID0gbmV3IFJlcXVlc3QocGxhdGZvcm0ub3JpZ2luLCB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBnZXQgZHVwbGV4KCkge1xuICAgICAgICAgIGR1cGxleEFjY2Vzc2VkID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm4gJ2hhbGYnO1xuICAgICAgICB9LFxuICAgICAgfSkuaGVhZGVycy5oYXMoJ0NvbnRlbnQtVHlwZScpO1xuXG4gICAgICBib2R5LmNhbmNlbCgpO1xuXG4gICAgICByZXR1cm4gZHVwbGV4QWNjZXNzZWQgJiYgIWhhc0NvbnRlbnRUeXBlO1xuICAgIH0pO1xuXG4gIGNvbnN0IHN1cHBvcnRzUmVzcG9uc2VTdHJlYW0gPVxuICAgIGlzUmVzcG9uc2VTdXBwb3J0ZWQgJiZcbiAgICBpc1JlYWRhYmxlU3RyZWFtU3VwcG9ydGVkICYmXG4gICAgdGVzdCgoKSA9PiB1dGlscy5pc1JlYWRhYmxlU3RyZWFtKG5ldyBSZXNwb25zZSgnJykuYm9keSkpO1xuXG4gIGNvbnN0IHJlc29sdmVycyA9IHtcbiAgICBzdHJlYW06IHN1cHBvcnRzUmVzcG9uc2VTdHJlYW0gJiYgKChyZXMpID0+IHJlcy5ib2R5KSxcbiAgfTtcblxuICBpc0ZldGNoU3VwcG9ydGVkICYmXG4gICAgKCgpID0+IHtcbiAgICAgIFsndGV4dCcsICdhcnJheUJ1ZmZlcicsICdibG9iJywgJ2Zvcm1EYXRhJywgJ3N0cmVhbSddLmZvckVhY2goKHR5cGUpID0+IHtcbiAgICAgICAgIXJlc29sdmVyc1t0eXBlXSAmJlxuICAgICAgICAgIChyZXNvbHZlcnNbdHlwZV0gPSAocmVzLCBjb25maWcpID0+IHtcbiAgICAgICAgICAgIGxldCBtZXRob2QgPSByZXMgJiYgcmVzW3R5cGVdO1xuXG4gICAgICAgICAgICBpZiAobWV0aG9kKSB7XG4gICAgICAgICAgICAgIHJldHVybiBtZXRob2QuY2FsbChyZXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgICAgICAgYFJlc3BvbnNlIHR5cGUgJyR7dHlwZX0nIGlzIG5vdCBzdXBwb3J0ZWRgLFxuICAgICAgICAgICAgICBBeGlvc0Vycm9yLkVSUl9OT1RfU1VQUE9SVCxcbiAgICAgICAgICAgICAgY29uZmlnXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSkoKTtcblxuICBjb25zdCBnZXRCb2R5TGVuZ3RoID0gYXN5bmMgKGJvZHkpID0+IHtcbiAgICBpZiAoYm9keSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXNCbG9iKGJvZHkpKSB7XG4gICAgICByZXR1cm4gYm9keS5zaXplO1xuICAgIH1cblxuICAgIGlmICh1dGlscy5pc1NwZWNDb21wbGlhbnRGb3JtKGJvZHkpKSB7XG4gICAgICBjb25zdCBfcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHBsYXRmb3JtLm9yaWdpbiwge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgYm9keSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIChhd2FpdCBfcmVxdWVzdC5hcnJheUJ1ZmZlcigpKS5ieXRlTGVuZ3RoO1xuICAgIH1cblxuICAgIGlmICh1dGlscy5pc0FycmF5QnVmZmVyVmlldyhib2R5KSB8fCB1dGlscy5pc0FycmF5QnVmZmVyKGJvZHkpKSB7XG4gICAgICByZXR1cm4gYm9keS5ieXRlTGVuZ3RoO1xuICAgIH1cblxuICAgIGlmICh1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhib2R5KSkge1xuICAgICAgYm9keSA9IGJvZHkgKyAnJztcbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXNTdHJpbmcoYm9keSkpIHtcbiAgICAgIHJldHVybiAoYXdhaXQgZW5jb2RlVGV4dChib2R5KSkuYnl0ZUxlbmd0aDtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgcmVzb2x2ZUJvZHlMZW5ndGggPSBhc3luYyAoaGVhZGVycywgYm9keSkgPT4ge1xuICAgIGNvbnN0IGxlbmd0aCA9IHV0aWxzLnRvRmluaXRlTnVtYmVyKGhlYWRlcnMuZ2V0Q29udGVudExlbmd0aCgpKTtcblxuICAgIHJldHVybiBsZW5ndGggPT0gbnVsbCA/IGdldEJvZHlMZW5ndGgoYm9keSkgOiBsZW5ndGg7XG4gIH07XG5cbiAgcmV0dXJuIGFzeW5jIChjb25maWcpID0+IHtcbiAgICBsZXQge1xuICAgICAgdXJsLFxuICAgICAgbWV0aG9kLFxuICAgICAgZGF0YSxcbiAgICAgIHNpZ25hbCxcbiAgICAgIGNhbmNlbFRva2VuLFxuICAgICAgdGltZW91dCxcbiAgICAgIG9uRG93bmxvYWRQcm9ncmVzcyxcbiAgICAgIG9uVXBsb2FkUHJvZ3Jlc3MsXG4gICAgICByZXNwb25zZVR5cGUsXG4gICAgICBoZWFkZXJzLFxuICAgICAgd2l0aENyZWRlbnRpYWxzID0gJ3NhbWUtb3JpZ2luJyxcbiAgICAgIGZldGNoT3B0aW9ucyxcbiAgICB9ID0gcmVzb2x2ZUNvbmZpZyhjb25maWcpO1xuXG4gICAgbGV0IF9mZXRjaCA9IGVudkZldGNoIHx8IGZldGNoO1xuXG4gICAgcmVzcG9uc2VUeXBlID0gcmVzcG9uc2VUeXBlID8gKHJlc3BvbnNlVHlwZSArICcnKS50b0xvd2VyQ2FzZSgpIDogJ3RleHQnO1xuXG4gICAgbGV0IGNvbXBvc2VkU2lnbmFsID0gY29tcG9zZVNpZ25hbHMoXG4gICAgICBbc2lnbmFsLCBjYW5jZWxUb2tlbiAmJiBjYW5jZWxUb2tlbi50b0Fib3J0U2lnbmFsKCldLFxuICAgICAgdGltZW91dFxuICAgICk7XG5cbiAgICBsZXQgcmVxdWVzdCA9IG51bGw7XG5cbiAgICBjb25zdCB1bnN1YnNjcmliZSA9XG4gICAgICBjb21wb3NlZFNpZ25hbCAmJlxuICAgICAgY29tcG9zZWRTaWduYWwudW5zdWJzY3JpYmUgJiZcbiAgICAgICgoKSA9PiB7XG4gICAgICAgIGNvbXBvc2VkU2lnbmFsLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9KTtcblxuICAgIGxldCByZXF1ZXN0Q29udGVudExlbmd0aDtcblxuICAgIHRyeSB7XG4gICAgICBpZiAoXG4gICAgICAgIG9uVXBsb2FkUHJvZ3Jlc3MgJiZcbiAgICAgICAgc3VwcG9ydHNSZXF1ZXN0U3RyZWFtICYmXG4gICAgICAgIG1ldGhvZCAhPT0gJ2dldCcgJiZcbiAgICAgICAgbWV0aG9kICE9PSAnaGVhZCcgJiZcbiAgICAgICAgKHJlcXVlc3RDb250ZW50TGVuZ3RoID0gYXdhaXQgcmVzb2x2ZUJvZHlMZW5ndGgoaGVhZGVycywgZGF0YSkpICE9PSAwXG4gICAgICApIHtcbiAgICAgICAgbGV0IF9yZXF1ZXN0ID0gbmV3IFJlcXVlc3QodXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZGF0YSxcbiAgICAgICAgICBkdXBsZXg6ICdoYWxmJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbGV0IGNvbnRlbnRUeXBlSGVhZGVyO1xuXG4gICAgICAgIGlmICh1dGlscy5pc0Zvcm1EYXRhKGRhdGEpICYmIChjb250ZW50VHlwZUhlYWRlciA9IF9yZXF1ZXN0LmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKSkpIHtcbiAgICAgICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKGNvbnRlbnRUeXBlSGVhZGVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChfcmVxdWVzdC5ib2R5KSB7XG4gICAgICAgICAgY29uc3QgW29uUHJvZ3Jlc3MsIGZsdXNoXSA9IHByb2dyZXNzRXZlbnREZWNvcmF0b3IoXG4gICAgICAgICAgICByZXF1ZXN0Q29udGVudExlbmd0aCxcbiAgICAgICAgICAgIHByb2dyZXNzRXZlbnRSZWR1Y2VyKGFzeW5jRGVjb3JhdG9yKG9uVXBsb2FkUHJvZ3Jlc3MpKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBkYXRhID0gdHJhY2tTdHJlYW0oX3JlcXVlc3QuYm9keSwgREVGQVVMVF9DSFVOS19TSVpFLCBvblByb2dyZXNzLCBmbHVzaCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCF1dGlscy5pc1N0cmluZyh3aXRoQ3JlZGVudGlhbHMpKSB7XG4gICAgICAgIHdpdGhDcmVkZW50aWFscyA9IHdpdGhDcmVkZW50aWFscyA/ICdpbmNsdWRlJyA6ICdvbWl0JztcbiAgICAgIH1cblxuICAgICAgLy8gQ2xvdWRmbGFyZSBXb3JrZXJzIHRocm93cyB3aGVuIGNyZWRlbnRpYWxzIGFyZSBkZWZpbmVkXG4gICAgICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2Nsb3VkZmxhcmUvd29ya2VyZC9pc3N1ZXMvOTAyXG4gICAgICBjb25zdCBpc0NyZWRlbnRpYWxzU3VwcG9ydGVkID0gaXNSZXF1ZXN0U3VwcG9ydGVkICYmICdjcmVkZW50aWFscycgaW4gUmVxdWVzdC5wcm90b3R5cGU7XG5cbiAgICAgIGNvbnN0IHJlc29sdmVkT3B0aW9ucyA9IHtcbiAgICAgICAgLi4uZmV0Y2hPcHRpb25zLFxuICAgICAgICBzaWduYWw6IGNvbXBvc2VkU2lnbmFsLFxuICAgICAgICBtZXRob2Q6IG1ldGhvZC50b1VwcGVyQ2FzZSgpLFxuICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLm5vcm1hbGl6ZSgpLnRvSlNPTigpLFxuICAgICAgICBib2R5OiBkYXRhLFxuICAgICAgICBkdXBsZXg6ICdoYWxmJyxcbiAgICAgICAgY3JlZGVudGlhbHM6IGlzQ3JlZGVudGlhbHNTdXBwb3J0ZWQgPyB3aXRoQ3JlZGVudGlhbHMgOiB1bmRlZmluZWQsXG4gICAgICB9O1xuXG4gICAgICByZXF1ZXN0ID0gaXNSZXF1ZXN0U3VwcG9ydGVkICYmIG5ldyBSZXF1ZXN0KHVybCwgcmVzb2x2ZWRPcHRpb25zKTtcblxuICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgKGlzUmVxdWVzdFN1cHBvcnRlZFxuICAgICAgICA/IF9mZXRjaChyZXF1ZXN0LCBmZXRjaE9wdGlvbnMpXG4gICAgICAgIDogX2ZldGNoKHVybCwgcmVzb2x2ZWRPcHRpb25zKSk7XG5cbiAgICAgIGNvbnN0IGlzU3RyZWFtUmVzcG9uc2UgPVxuICAgICAgICBzdXBwb3J0c1Jlc3BvbnNlU3RyZWFtICYmIChyZXNwb25zZVR5cGUgPT09ICdzdHJlYW0nIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ3Jlc3BvbnNlJyk7XG5cbiAgICAgIGlmIChzdXBwb3J0c1Jlc3BvbnNlU3RyZWFtICYmIChvbkRvd25sb2FkUHJvZ3Jlc3MgfHwgKGlzU3RyZWFtUmVzcG9uc2UgJiYgdW5zdWJzY3JpYmUpKSkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0ge307XG5cbiAgICAgICAgWydzdGF0dXMnLCAnc3RhdHVzVGV4dCcsICdoZWFkZXJzJ10uZm9yRWFjaCgocHJvcCkgPT4ge1xuICAgICAgICAgIG9wdGlvbnNbcHJvcF0gPSByZXNwb25zZVtwcm9wXTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgcmVzcG9uc2VDb250ZW50TGVuZ3RoID0gdXRpbHMudG9GaW5pdGVOdW1iZXIocmVzcG9uc2UuaGVhZGVycy5nZXQoJ2NvbnRlbnQtbGVuZ3RoJykpO1xuXG4gICAgICAgIGNvbnN0IFtvblByb2dyZXNzLCBmbHVzaF0gPVxuICAgICAgICAgIChvbkRvd25sb2FkUHJvZ3Jlc3MgJiZcbiAgICAgICAgICAgIHByb2dyZXNzRXZlbnREZWNvcmF0b3IoXG4gICAgICAgICAgICAgIHJlc3BvbnNlQ29udGVudExlbmd0aCxcbiAgICAgICAgICAgICAgcHJvZ3Jlc3NFdmVudFJlZHVjZXIoYXN5bmNEZWNvcmF0b3Iob25Eb3dubG9hZFByb2dyZXNzKSwgdHJ1ZSlcbiAgICAgICAgICAgICkpIHx8XG4gICAgICAgICAgW107XG5cbiAgICAgICAgcmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UoXG4gICAgICAgICAgdHJhY2tTdHJlYW0ocmVzcG9uc2UuYm9keSwgREVGQVVMVF9DSFVOS19TSVpFLCBvblByb2dyZXNzLCAoKSA9PiB7XG4gICAgICAgICAgICBmbHVzaCAmJiBmbHVzaCgpO1xuICAgICAgICAgICAgdW5zdWJzY3JpYmUgJiYgdW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBvcHRpb25zXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJlc3BvbnNlVHlwZSA9IHJlc3BvbnNlVHlwZSB8fCAndGV4dCc7XG5cbiAgICAgIGxldCByZXNwb25zZURhdGEgPSBhd2FpdCByZXNvbHZlcnNbdXRpbHMuZmluZEtleShyZXNvbHZlcnMsIHJlc3BvbnNlVHlwZSkgfHwgJ3RleHQnXShcbiAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgIGNvbmZpZ1xuICAgICAgKTtcblxuICAgICAgIWlzU3RyZWFtUmVzcG9uc2UgJiYgdW5zdWJzY3JpYmUgJiYgdW5zdWJzY3JpYmUoKTtcblxuICAgICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwge1xuICAgICAgICAgIGRhdGE6IHJlc3BvbnNlRGF0YSxcbiAgICAgICAgICBoZWFkZXJzOiBBeGlvc0hlYWRlcnMuZnJvbShyZXNwb25zZS5oZWFkZXJzKSxcbiAgICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgICBzdGF0dXNUZXh0OiByZXNwb25zZS5zdGF0dXNUZXh0LFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICByZXF1ZXN0LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdW5zdWJzY3JpYmUgJiYgdW5zdWJzY3JpYmUoKTtcblxuICAgICAgaWYgKGVyciAmJiBlcnIubmFtZSA9PT0gJ1R5cGVFcnJvcicgJiYgL0xvYWQgZmFpbGVkfGZldGNoL2kudGVzdChlcnIubWVzc2FnZSkpIHtcbiAgICAgICAgdGhyb3cgT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgICAgICdOZXR3b3JrIEVycm9yJyxcbiAgICAgICAgICAgIEF4aW9zRXJyb3IuRVJSX05FVFdPUkssXG4gICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICByZXF1ZXN0LFxuICAgICAgICAgICAgZXJyICYmIGVyci5yZXNwb25zZVxuICAgICAgICAgICksXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2F1c2U6IGVyci5jYXVzZSB8fCBlcnIsXG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBBeGlvc0Vycm9yLmZyb20oZXJyLCBlcnIgJiYgZXJyLmNvZGUsIGNvbmZpZywgcmVxdWVzdCwgZXJyICYmIGVyci5yZXNwb25zZSk7XG4gICAgfVxuICB9O1xufTtcblxuY29uc3Qgc2VlZENhY2hlID0gbmV3IE1hcCgpO1xuXG5leHBvcnQgY29uc3QgZ2V0RmV0Y2ggPSAoY29uZmlnKSA9PiB7XG4gIGxldCBlbnYgPSAoY29uZmlnICYmIGNvbmZpZy5lbnYpIHx8IHt9O1xuICBjb25zdCB7IGZldGNoLCBSZXF1ZXN0LCBSZXNwb25zZSB9ID0gZW52O1xuICBjb25zdCBzZWVkcyA9IFtSZXF1ZXN0LCBSZXNwb25zZSwgZmV0Y2hdO1xuXG4gIGxldCBsZW4gPSBzZWVkcy5sZW5ndGgsXG4gICAgaSA9IGxlbixcbiAgICBzZWVkLFxuICAgIHRhcmdldCxcbiAgICBtYXAgPSBzZWVkQ2FjaGU7XG5cbiAgd2hpbGUgKGktLSkge1xuICAgIHNlZWQgPSBzZWVkc1tpXTtcbiAgICB0YXJnZXQgPSBtYXAuZ2V0KHNlZWQpO1xuXG4gICAgdGFyZ2V0ID09PSB1bmRlZmluZWQgJiYgbWFwLnNldChzZWVkLCAodGFyZ2V0ID0gaSA/IG5ldyBNYXAoKSA6IGZhY3RvcnkoZW52KSkpO1xuXG4gICAgbWFwID0gdGFyZ2V0O1xuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn07XG5cbmNvbnN0IGFkYXB0ZXIgPSBnZXRGZXRjaCgpO1xuXG5leHBvcnQgZGVmYXVsdCBhZGFwdGVyO1xuIiwiaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBodHRwQWRhcHRlciBmcm9tICcuL2h0dHAuanMnO1xuaW1wb3J0IHhockFkYXB0ZXIgZnJvbSAnLi94aHIuanMnO1xuaW1wb3J0ICogYXMgZmV0Y2hBZGFwdGVyIGZyb20gJy4vZmV0Y2guanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcblxuLyoqXG4gKiBLbm93biBhZGFwdGVycyBtYXBwaW5nLlxuICogUHJvdmlkZXMgZW52aXJvbm1lbnQtc3BlY2lmaWMgYWRhcHRlcnMgZm9yIEF4aW9zOlxuICogLSBgaHR0cGAgZm9yIE5vZGUuanNcbiAqIC0gYHhocmAgZm9yIGJyb3dzZXJzXG4gKiAtIGBmZXRjaGAgZm9yIGZldGNoIEFQSS1iYXNlZCByZXF1ZXN0c1xuICpcbiAqIEB0eXBlIHtPYmplY3Q8c3RyaW5nLCBGdW5jdGlvbnxPYmplY3Q+fVxuICovXG5jb25zdCBrbm93bkFkYXB0ZXJzID0ge1xuICBodHRwOiBodHRwQWRhcHRlcixcbiAgeGhyOiB4aHJBZGFwdGVyLFxuICBmZXRjaDoge1xuICAgIGdldDogZmV0Y2hBZGFwdGVyLmdldEZldGNoLFxuICB9LFxufTtcblxuLy8gQXNzaWduIGFkYXB0ZXIgbmFtZXMgZm9yIGVhc2llciBkZWJ1Z2dpbmcgYW5kIGlkZW50aWZpY2F0aW9uXG51dGlscy5mb3JFYWNoKGtub3duQWRhcHRlcnMsIChmbiwgdmFsdWUpID0+IHtcbiAgaWYgKGZuKSB7XG4gICAgdHJ5IHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgJ25hbWUnLCB7IHZhbHVlIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eVxuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZm4sICdhZGFwdGVyTmFtZScsIHsgdmFsdWUgfSk7XG4gIH1cbn0pO1xuXG4vKipcbiAqIFJlbmRlciBhIHJlamVjdGlvbiByZWFzb24gc3RyaW5nIGZvciB1bmtub3duIG9yIHVuc3VwcG9ydGVkIGFkYXB0ZXJzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvblxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuY29uc3QgcmVuZGVyUmVhc29uID0gKHJlYXNvbikgPT4gYC0gJHtyZWFzb259YDtcblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgYWRhcHRlciBpcyByZXNvbHZlZCAoZnVuY3Rpb24sIG51bGwsIG9yIGZhbHNlKVxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb258bnVsbHxmYWxzZX0gYWRhcHRlclxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmNvbnN0IGlzUmVzb2x2ZWRIYW5kbGUgPSAoYWRhcHRlcikgPT5cbiAgdXRpbHMuaXNGdW5jdGlvbihhZGFwdGVyKSB8fCBhZGFwdGVyID09PSBudWxsIHx8IGFkYXB0ZXIgPT09IGZhbHNlO1xuXG4vKipcbiAqIEdldCB0aGUgZmlyc3Qgc3VpdGFibGUgYWRhcHRlciBmcm9tIHRoZSBwcm92aWRlZCBsaXN0LlxuICogVHJpZXMgZWFjaCBhZGFwdGVyIGluIG9yZGVyIHVudGlsIGEgc3VwcG9ydGVkIG9uZSBpcyBmb3VuZC5cbiAqIFRocm93cyBhbiBBeGlvc0Vycm9yIGlmIG5vIGFkYXB0ZXIgaXMgc3VpdGFibGUuXG4gKlxuICogQHBhcmFtIHtBcnJheTxzdHJpbmd8RnVuY3Rpb24+fHN0cmluZ3xGdW5jdGlvbn0gYWRhcHRlcnMgLSBBZGFwdGVyKHMpIGJ5IG5hbWUgb3IgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gQXhpb3MgcmVxdWVzdCBjb25maWd1cmF0aW9uXG4gKiBAdGhyb3dzIHtBeGlvc0Vycm9yfSBJZiBubyBzdWl0YWJsZSBhZGFwdGVyIGlzIGF2YWlsYWJsZVxuICogQHJldHVybnMge0Z1bmN0aW9ufSBUaGUgcmVzb2x2ZWQgYWRhcHRlciBmdW5jdGlvblxuICovXG5mdW5jdGlvbiBnZXRBZGFwdGVyKGFkYXB0ZXJzLCBjb25maWcpIHtcbiAgYWRhcHRlcnMgPSB1dGlscy5pc0FycmF5KGFkYXB0ZXJzKSA/IGFkYXB0ZXJzIDogW2FkYXB0ZXJzXTtcblxuICBjb25zdCB7IGxlbmd0aCB9ID0gYWRhcHRlcnM7XG4gIGxldCBuYW1lT3JBZGFwdGVyO1xuICBsZXQgYWRhcHRlcjtcblxuICBjb25zdCByZWplY3RlZFJlYXNvbnMgPSB7fTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgbmFtZU9yQWRhcHRlciA9IGFkYXB0ZXJzW2ldO1xuICAgIGxldCBpZDtcblxuICAgIGFkYXB0ZXIgPSBuYW1lT3JBZGFwdGVyO1xuXG4gICAgaWYgKCFpc1Jlc29sdmVkSGFuZGxlKG5hbWVPckFkYXB0ZXIpKSB7XG4gICAgICBhZGFwdGVyID0ga25vd25BZGFwdGVyc1soaWQgPSBTdHJpbmcobmFtZU9yQWRhcHRlcikpLnRvTG93ZXJDYXNlKCldO1xuXG4gICAgICBpZiAoYWRhcHRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKGBVbmtub3duIGFkYXB0ZXIgJyR7aWR9J2ApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhZGFwdGVyICYmICh1dGlscy5pc0Z1bmN0aW9uKGFkYXB0ZXIpIHx8IChhZGFwdGVyID0gYWRhcHRlci5nZXQoY29uZmlnKSkpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZWplY3RlZFJlYXNvbnNbaWQgfHwgJyMnICsgaV0gPSBhZGFwdGVyO1xuICB9XG5cbiAgaWYgKCFhZGFwdGVyKSB7XG4gICAgY29uc3QgcmVhc29ucyA9IE9iamVjdC5lbnRyaWVzKHJlamVjdGVkUmVhc29ucykubWFwKFxuICAgICAgKFtpZCwgc3RhdGVdKSA9PlxuICAgICAgICBgYWRhcHRlciAke2lkfSBgICtcbiAgICAgICAgKHN0YXRlID09PSBmYWxzZSA/ICdpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCcgOiAnaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgYnVpbGQnKVxuICAgICk7XG5cbiAgICBsZXQgcyA9IGxlbmd0aFxuICAgICAgPyByZWFzb25zLmxlbmd0aCA+IDFcbiAgICAgICAgPyAnc2luY2UgOlxcbicgKyByZWFzb25zLm1hcChyZW5kZXJSZWFzb24pLmpvaW4oJ1xcbicpXG4gICAgICAgIDogJyAnICsgcmVuZGVyUmVhc29uKHJlYXNvbnNbMF0pXG4gICAgICA6ICdhcyBubyBhZGFwdGVyIHNwZWNpZmllZCc7XG5cbiAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihcbiAgICAgIGBUaGVyZSBpcyBubyBzdWl0YWJsZSBhZGFwdGVyIHRvIGRpc3BhdGNoIHRoZSByZXF1ZXN0IGAgKyBzLFxuICAgICAgJ0VSUl9OT1RfU1VQUE9SVCdcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGFkYXB0ZXI7XG59XG5cbi8qKlxuICogRXhwb3J0cyBBeGlvcyBhZGFwdGVycyBhbmQgdXRpbGl0eSB0byByZXNvbHZlIGFuIGFkYXB0ZXJcbiAqL1xuZXhwb3J0IGRlZmF1bHQge1xuICAvKipcbiAgICogUmVzb2x2ZSBhbiBhZGFwdGVyIGZyb20gYSBsaXN0IG9mIGFkYXB0ZXIgbmFtZXMgb3IgZnVuY3Rpb25zLlxuICAgKiBAdHlwZSB7RnVuY3Rpb259XG4gICAqL1xuICBnZXRBZGFwdGVyLFxuXG4gIC8qKlxuICAgKiBFeHBvc2VzIGFsbCBrbm93biBhZGFwdGVyc1xuICAgKiBAdHlwZSB7T2JqZWN0PHN0cmluZywgRnVuY3Rpb258T2JqZWN0Pn1cbiAgICovXG4gIGFkYXB0ZXJzOiBrbm93bkFkYXB0ZXJzLFxufTtcbiIsIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzdHJpY3RcbmV4cG9ydCBkZWZhdWx0IG51bGw7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB0cmFuc2Zvcm1EYXRhIGZyb20gJy4vdHJhbnNmb3JtRGF0YS5qcyc7XG5pbXBvcnQgaXNDYW5jZWwgZnJvbSAnLi4vY2FuY2VsL2lzQ2FuY2VsLmpzJztcbmltcG9ydCBkZWZhdWx0cyBmcm9tICcuLi9kZWZhdWx0cy9pbmRleC5qcyc7XG5pbXBvcnQgQ2FuY2VsZWRFcnJvciBmcm9tICcuLi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gJy4uL2NvcmUvQXhpb3NIZWFkZXJzLmpzJztcbmltcG9ydCBhZGFwdGVycyBmcm9tICcuLi9hZGFwdGVycy9hZGFwdGVycy5qcyc7XG5cbi8qKlxuICogVGhyb3dzIGEgYENhbmNlbGVkRXJyb3JgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHRoYXQgaXMgdG8gYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RcbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpIHtcbiAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgIGNvbmZpZy5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCk7XG4gIH1cblxuICBpZiAoY29uZmlnLnNpZ25hbCAmJiBjb25maWcuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICB0aHJvdyBuZXcgQ2FuY2VsZWRFcnJvcihudWxsLCBjb25maWcpO1xuICB9XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggYSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgdXNpbmcgdGhlIGNvbmZpZ3VyZWQgYWRhcHRlci5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIFRoZSBjb25maWcgdGhhdCBpcyB0byBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdFxuICpcbiAqIEByZXR1cm5zIHtQcm9taXNlfSBUaGUgUHJvbWlzZSB0byBiZSBmdWxmaWxsZWRcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGlzcGF0Y2hSZXF1ZXN0KGNvbmZpZykge1xuICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgY29uZmlnLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShjb25maWcuaGVhZGVycyk7XG5cbiAgLy8gVHJhbnNmb3JtIHJlcXVlc3QgZGF0YVxuICBjb25maWcuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChjb25maWcsIGNvbmZpZy50cmFuc2Zvcm1SZXF1ZXN0KTtcblxuICBpZiAoWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLmluZGV4T2YoY29uZmlnLm1ldGhvZCkgIT09IC0xKSB7XG4gICAgY29uZmlnLmhlYWRlcnMuc2V0Q29udGVudFR5cGUoJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsIGZhbHNlKTtcbiAgfVxuXG4gIGNvbnN0IGFkYXB0ZXIgPSBhZGFwdGVycy5nZXRBZGFwdGVyKGNvbmZpZy5hZGFwdGVyIHx8IGRlZmF1bHRzLmFkYXB0ZXIsIGNvbmZpZyk7XG5cbiAgcmV0dXJuIGFkYXB0ZXIoY29uZmlnKS50aGVuKFxuICAgIGZ1bmN0aW9uIG9uQWRhcHRlclJlc29sdXRpb24ocmVzcG9uc2UpIHtcbiAgICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICAgIHJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoY29uZmlnLCBjb25maWcudHJhbnNmb3JtUmVzcG9uc2UsIHJlc3BvbnNlKTtcblxuICAgICAgcmVzcG9uc2UuaGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKHJlc3BvbnNlLmhlYWRlcnMpO1xuXG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSxcbiAgICBmdW5jdGlvbiBvbkFkYXB0ZXJSZWplY3Rpb24ocmVhc29uKSB7XG4gICAgICBpZiAoIWlzQ2FuY2VsKHJlYXNvbikpIHtcbiAgICAgICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgICAgIGlmIChyZWFzb24gJiYgcmVhc29uLnJlc3BvbnNlKSB7XG4gICAgICAgICAgcmVhc29uLnJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICBjb25maWcudHJhbnNmb3JtUmVzcG9uc2UsXG4gICAgICAgICAgICByZWFzb24ucmVzcG9uc2VcbiAgICAgICAgICApO1xuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZS5oZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20ocmVhc29uLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZWFzb24pO1xuICAgIH1cbiAgKTtcbn1cbiIsImV4cG9ydCBjb25zdCBWRVJTSU9OID0gXCIxLjE1LjBcIjsiLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7IFZFUlNJT04gfSBmcm9tICcuLi9lbnYvZGF0YS5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuXG5jb25zdCB2YWxpZGF0b3JzID0ge307XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5bJ29iamVjdCcsICdib29sZWFuJywgJ251bWJlcicsICdmdW5jdGlvbicsICdzdHJpbmcnLCAnc3ltYm9sJ10uZm9yRWFjaCgodHlwZSwgaSkgPT4ge1xuICB2YWxpZGF0b3JzW3R5cGVdID0gZnVuY3Rpb24gdmFsaWRhdG9yKHRoaW5nKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGluZyA9PT0gdHlwZSB8fCAnYScgKyAoaSA8IDEgPyAnbiAnIDogJyAnKSArIHR5cGU7XG4gIH07XG59KTtcblxuY29uc3QgZGVwcmVjYXRlZFdhcm5pbmdzID0ge307XG5cbi8qKlxuICogVHJhbnNpdGlvbmFsIG9wdGlvbiB2YWxpZGF0b3JcbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufGJvb2xlYW4/fSB2YWxpZGF0b3IgLSBzZXQgdG8gZmFsc2UgaWYgdGhlIHRyYW5zaXRpb25hbCBvcHRpb24gaGFzIGJlZW4gcmVtb3ZlZFxuICogQHBhcmFtIHtzdHJpbmc/fSB2ZXJzaW9uIC0gZGVwcmVjYXRlZCB2ZXJzaW9uIC8gcmVtb3ZlZCBzaW5jZSB2ZXJzaW9uXG4gKiBAcGFyYW0ge3N0cmluZz99IG1lc3NhZ2UgLSBzb21lIG1lc3NhZ2Ugd2l0aCBhZGRpdGlvbmFsIGluZm9cbiAqXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259XG4gKi9cbnZhbGlkYXRvcnMudHJhbnNpdGlvbmFsID0gZnVuY3Rpb24gdHJhbnNpdGlvbmFsKHZhbGlkYXRvciwgdmVyc2lvbiwgbWVzc2FnZSkge1xuICBmdW5jdGlvbiBmb3JtYXRNZXNzYWdlKG9wdCwgZGVzYykge1xuICAgIHJldHVybiAoXG4gICAgICAnW0F4aW9zIHYnICtcbiAgICAgIFZFUlNJT04gK1xuICAgICAgXCJdIFRyYW5zaXRpb25hbCBvcHRpb24gJ1wiICtcbiAgICAgIG9wdCArXG4gICAgICBcIidcIiArXG4gICAgICBkZXNjICtcbiAgICAgIChtZXNzYWdlID8gJy4gJyArIG1lc3NhZ2UgOiAnJylcbiAgICApO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuICh2YWx1ZSwgb3B0LCBvcHRzKSA9PiB7XG4gICAgaWYgKHZhbGlkYXRvciA9PT0gZmFsc2UpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICBmb3JtYXRNZXNzYWdlKG9wdCwgJyBoYXMgYmVlbiByZW1vdmVkJyArICh2ZXJzaW9uID8gJyBpbiAnICsgdmVyc2lvbiA6ICcnKSksXG4gICAgICAgIEF4aW9zRXJyb3IuRVJSX0RFUFJFQ0FURURcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHZlcnNpb24gJiYgIWRlcHJlY2F0ZWRXYXJuaW5nc1tvcHRdKSB7XG4gICAgICBkZXByZWNhdGVkV2FybmluZ3Nbb3B0XSA9IHRydWU7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBmb3JtYXRNZXNzYWdlKFxuICAgICAgICAgIG9wdCxcbiAgICAgICAgICAnIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdicgKyB2ZXJzaW9uICsgJyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZSdcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdG9yID8gdmFsaWRhdG9yKHZhbHVlLCBvcHQsIG9wdHMpIDogdHJ1ZTtcbiAgfTtcbn07XG5cbnZhbGlkYXRvcnMuc3BlbGxpbmcgPSBmdW5jdGlvbiBzcGVsbGluZyhjb3JyZWN0U3BlbGxpbmcpIHtcbiAgcmV0dXJuICh2YWx1ZSwgb3B0KSA9PiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICBjb25zb2xlLndhcm4oYCR7b3B0fSBpcyBsaWtlbHkgYSBtaXNzcGVsbGluZyBvZiAke2NvcnJlY3RTcGVsbGluZ31gKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcbn07XG5cbi8qKlxuICogQXNzZXJ0IG9iamVjdCdzIHByb3BlcnRpZXMgdHlwZVxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge29iamVjdH0gc2NoZW1hXG4gKiBAcGFyYW0ge2Jvb2xlYW4/fSBhbGxvd1Vua25vd25cbiAqXG4gKiBAcmV0dXJucyB7b2JqZWN0fVxuICovXG5cbmZ1bmN0aW9uIGFzc2VydE9wdGlvbnMob3B0aW9ucywgc2NoZW1hLCBhbGxvd1Vua25vd24pIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0JywgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTl9WQUxVRSk7XG4gIH1cbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpO1xuICBsZXQgaSA9IGtleXMubGVuZ3RoO1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIGNvbnN0IG9wdCA9IGtleXNbaV07XG4gICAgY29uc3QgdmFsaWRhdG9yID0gc2NoZW1hW29wdF07XG4gICAgaWYgKHZhbGlkYXRvcikge1xuICAgICAgY29uc3QgdmFsdWUgPSBvcHRpb25zW29wdF07XG4gICAgICBjb25zdCByZXN1bHQgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbGlkYXRvcih2YWx1ZSwgb3B0LCBvcHRpb25zKTtcbiAgICAgIGlmIChyZXN1bHQgIT09IHRydWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoXG4gICAgICAgICAgJ29wdGlvbiAnICsgb3B0ICsgJyBtdXN0IGJlICcgKyByZXN1bHQsXG4gICAgICAgICAgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTl9WQUxVRVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChhbGxvd1Vua25vd24gIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdVbmtub3duIG9wdGlvbiAnICsgb3B0LCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBhc3NlcnRPcHRpb25zLFxuICB2YWxpZGF0b3JzLFxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBidWlsZFVSTCBmcm9tICcuLi9oZWxwZXJzL2J1aWxkVVJMLmpzJztcbmltcG9ydCBJbnRlcmNlcHRvck1hbmFnZXIgZnJvbSAnLi9JbnRlcmNlcHRvck1hbmFnZXIuanMnO1xuaW1wb3J0IGRpc3BhdGNoUmVxdWVzdCBmcm9tICcuL2Rpc3BhdGNoUmVxdWVzdC5qcyc7XG5pbXBvcnQgbWVyZ2VDb25maWcgZnJvbSAnLi9tZXJnZUNvbmZpZy5qcyc7XG5pbXBvcnQgYnVpbGRGdWxsUGF0aCBmcm9tICcuL2J1aWxkRnVsbFBhdGguanMnO1xuaW1wb3J0IHZhbGlkYXRvciBmcm9tICcuLi9oZWxwZXJzL3ZhbGlkYXRvci5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gJy4vQXhpb3NIZWFkZXJzLmpzJztcbmltcG9ydCB0cmFuc2l0aW9uYWxEZWZhdWx0cyBmcm9tICcuLi9kZWZhdWx0cy90cmFuc2l0aW9uYWwuanMnO1xuXG5jb25zdCB2YWxpZGF0b3JzID0gdmFsaWRhdG9yLnZhbGlkYXRvcnM7XG5cbi8qKlxuICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlQ29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKlxuICogQHJldHVybiB7QXhpb3N9IEEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKi9cbmNsYXNzIEF4aW9zIHtcbiAgY29uc3RydWN0b3IoaW5zdGFuY2VDb25maWcpIHtcbiAgICB0aGlzLmRlZmF1bHRzID0gaW5zdGFuY2VDb25maWcgfHwge307XG4gICAgdGhpcy5pbnRlcmNlcHRvcnMgPSB7XG4gICAgICByZXF1ZXN0OiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyKCksXG4gICAgICByZXNwb25zZTogbmV3IEludGVyY2VwdG9yTWFuYWdlcigpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGlzcGF0Y2ggYSByZXF1ZXN0XG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfE9iamVjdH0gY29uZmlnT3JVcmwgVGhlIGNvbmZpZyBzcGVjaWZpYyBmb3IgdGhpcyByZXF1ZXN0IChtZXJnZWQgd2l0aCB0aGlzLmRlZmF1bHRzKVxuICAgKiBAcGFyYW0gez9PYmplY3R9IGNvbmZpZ1xuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gVGhlIFByb21pc2UgdG8gYmUgZnVsZmlsbGVkXG4gICAqL1xuICBhc3luYyByZXF1ZXN0KGNvbmZpZ09yVXJsLCBjb25maWcpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX3JlcXVlc3QoY29uZmlnT3JVcmwsIGNvbmZpZyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgbGV0IGR1bW15ID0ge307XG5cbiAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UgPyBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShkdW1teSkgOiAoZHVtbXkgPSBuZXcgRXJyb3IoKSk7XG5cbiAgICAgICAgLy8gc2xpY2Ugb2ZmIHRoZSBFcnJvcjogLi4uIGxpbmVcbiAgICAgICAgY29uc3Qgc3RhY2sgPSAoKCkgPT4ge1xuICAgICAgICAgIGlmICghZHVtbXkuc3RhY2spIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBmaXJzdE5ld2xpbmVJbmRleCA9IGR1bW15LnN0YWNrLmluZGV4T2YoJ1xcbicpO1xuXG4gICAgICAgICAgcmV0dXJuIGZpcnN0TmV3bGluZUluZGV4ID09PSAtMSA/ICcnIDogZHVtbXkuc3RhY2suc2xpY2UoZmlyc3ROZXdsaW5lSW5kZXggKyAxKTtcbiAgICAgICAgfSkoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoIWVyci5zdGFjaykge1xuICAgICAgICAgICAgZXJyLnN0YWNrID0gc3RhY2s7XG4gICAgICAgICAgICAvLyBtYXRjaCB3aXRob3V0IHRoZSAyIHRvcCBzdGFjayBsaW5lc1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3RhY2spIHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0TmV3bGluZUluZGV4ID0gc3RhY2suaW5kZXhPZignXFxuJyk7XG4gICAgICAgICAgICBjb25zdCBzZWNvbmROZXdsaW5lSW5kZXggPVxuICAgICAgICAgICAgICBmaXJzdE5ld2xpbmVJbmRleCA9PT0gLTEgPyAtMSA6IHN0YWNrLmluZGV4T2YoJ1xcbicsIGZpcnN0TmV3bGluZUluZGV4ICsgMSk7XG4gICAgICAgICAgICBjb25zdCBzdGFja1dpdGhvdXRUd29Ub3BMaW5lcyA9XG4gICAgICAgICAgICAgIHNlY29uZE5ld2xpbmVJbmRleCA9PT0gLTEgPyAnJyA6IHN0YWNrLnNsaWNlKHNlY29uZE5ld2xpbmVJbmRleCArIDEpO1xuXG4gICAgICAgICAgICBpZiAoIVN0cmluZyhlcnIuc3RhY2spLmVuZHNXaXRoKHN0YWNrV2l0aG91dFR3b1RvcExpbmVzKSkge1xuICAgICAgICAgICAgICBlcnIuc3RhY2sgKz0gJ1xcbicgKyBzdGFjaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAvLyBpZ25vcmUgdGhlIGNhc2Ugd2hlcmUgXCJzdGFja1wiIGlzIGFuIHVuLXdyaXRhYmxlIHByb3BlcnR5XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxuXG4gIF9yZXF1ZXN0KGNvbmZpZ09yVXJsLCBjb25maWcpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICAvLyBBbGxvdyBmb3IgYXhpb3MoJ2V4YW1wbGUvdXJsJ1ssIGNvbmZpZ10pIGEgbGEgZmV0Y2ggQVBJXG4gICAgaWYgKHR5cGVvZiBjb25maWdPclVybCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcbiAgICAgIGNvbmZpZy51cmwgPSBjb25maWdPclVybDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uZmlnID0gY29uZmlnT3JVcmwgfHwge307XG4gICAgfVxuXG4gICAgY29uZmlnID0gbWVyZ2VDb25maWcodGhpcy5kZWZhdWx0cywgY29uZmlnKTtcblxuICAgIGNvbnN0IHsgdHJhbnNpdGlvbmFsLCBwYXJhbXNTZXJpYWxpemVyLCBoZWFkZXJzIH0gPSBjb25maWc7XG5cbiAgICBpZiAodHJhbnNpdGlvbmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhbGlkYXRvci5hc3NlcnRPcHRpb25zKFxuICAgICAgICB0cmFuc2l0aW9uYWwsXG4gICAgICAgIHtcbiAgICAgICAgICBzaWxlbnRKU09OUGFyc2luZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKSxcbiAgICAgICAgICBmb3JjZWRKU09OUGFyc2luZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKSxcbiAgICAgICAgICBjbGFyaWZ5VGltZW91dEVycm9yOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pLFxuICAgICAgICAgIGxlZ2FjeUludGVyY2VwdG9yUmVxUmVzT3JkZXJpbmc6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiksXG4gICAgICAgIH0sXG4gICAgICAgIGZhbHNlXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXNTZXJpYWxpemVyICE9IG51bGwpIHtcbiAgICAgIGlmICh1dGlscy5pc0Z1bmN0aW9uKHBhcmFtc1NlcmlhbGl6ZXIpKSB7XG4gICAgICAgIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyID0ge1xuICAgICAgICAgIHNlcmlhbGl6ZTogcGFyYW1zU2VyaWFsaXplcixcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbGlkYXRvci5hc3NlcnRPcHRpb25zKFxuICAgICAgICAgIHBhcmFtc1NlcmlhbGl6ZXIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgZW5jb2RlOiB2YWxpZGF0b3JzLmZ1bmN0aW9uLFxuICAgICAgICAgICAgc2VyaWFsaXplOiB2YWxpZGF0b3JzLmZ1bmN0aW9uLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdHJ1ZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNldCBjb25maWcuYWxsb3dBYnNvbHV0ZVVybHNcbiAgICBpZiAoY29uZmlnLmFsbG93QWJzb2x1dGVVcmxzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICB9IGVsc2UgaWYgKHRoaXMuZGVmYXVsdHMuYWxsb3dBYnNvbHV0ZVVybHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uZmlnLmFsbG93QWJzb2x1dGVVcmxzID0gdGhpcy5kZWZhdWx0cy5hbGxvd0Fic29sdXRlVXJscztcbiAgICB9IGVsc2Uge1xuICAgICAgY29uZmlnLmFsbG93QWJzb2x1dGVVcmxzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YWxpZGF0b3IuYXNzZXJ0T3B0aW9ucyhcbiAgICAgIGNvbmZpZyxcbiAgICAgIHtcbiAgICAgICAgYmFzZVVybDogdmFsaWRhdG9ycy5zcGVsbGluZygnYmFzZVVSTCcpLFxuICAgICAgICB3aXRoWHNyZlRva2VuOiB2YWxpZGF0b3JzLnNwZWxsaW5nKCd3aXRoWFNSRlRva2VuJyksXG4gICAgICB9LFxuICAgICAgdHJ1ZVxuICAgICk7XG5cbiAgICAvLyBTZXQgY29uZmlnLm1ldGhvZFxuICAgIGNvbmZpZy5tZXRob2QgPSAoY29uZmlnLm1ldGhvZCB8fCB0aGlzLmRlZmF1bHRzLm1ldGhvZCB8fCAnZ2V0JykudG9Mb3dlckNhc2UoKTtcblxuICAgIC8vIEZsYXR0ZW4gaGVhZGVyc1xuICAgIGxldCBjb250ZXh0SGVhZGVycyA9IGhlYWRlcnMgJiYgdXRpbHMubWVyZ2UoaGVhZGVycy5jb21tb24sIGhlYWRlcnNbY29uZmlnLm1ldGhvZF0pO1xuXG4gICAgaGVhZGVycyAmJlxuICAgICAgdXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdwb3N0JywgJ3B1dCcsICdwYXRjaCcsICdjb21tb24nXSwgKG1ldGhvZCkgPT4ge1xuICAgICAgICBkZWxldGUgaGVhZGVyc1ttZXRob2RdO1xuICAgICAgfSk7XG5cbiAgICBjb25maWcuaGVhZGVycyA9IEF4aW9zSGVhZGVycy5jb25jYXQoY29udGV4dEhlYWRlcnMsIGhlYWRlcnMpO1xuXG4gICAgLy8gZmlsdGVyIG91dCBza2lwcGVkIGludGVyY2VwdG9yc1xuICAgIGNvbnN0IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluID0gW107XG4gICAgbGV0IHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyA9IHRydWU7XG4gICAgdGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uIHVuc2hpZnRSZXF1ZXN0SW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgICBpZiAodHlwZW9mIGludGVyY2VwdG9yLnJ1bldoZW4gPT09ICdmdW5jdGlvbicgJiYgaW50ZXJjZXB0b3IucnVuV2hlbihjb25maWcpID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyA9IHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyAmJiBpbnRlcmNlcHRvci5zeW5jaHJvbm91cztcblxuICAgICAgY29uc3QgdHJhbnNpdGlvbmFsID0gY29uZmlnLnRyYW5zaXRpb25hbCB8fCB0cmFuc2l0aW9uYWxEZWZhdWx0cztcbiAgICAgIGNvbnN0IGxlZ2FjeUludGVyY2VwdG9yUmVxUmVzT3JkZXJpbmcgPVxuICAgICAgICB0cmFuc2l0aW9uYWwgJiYgdHJhbnNpdGlvbmFsLmxlZ2FjeUludGVyY2VwdG9yUmVxUmVzT3JkZXJpbmc7XG5cbiAgICAgIGlmIChsZWdhY3lJbnRlcmNlcHRvclJlcVJlc09yZGVyaW5nKSB7XG4gICAgICAgIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLnVuc2hpZnQoaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi5wdXNoKGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluID0gW107XG4gICAgdGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbiBwdXNoUmVzcG9uc2VJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICAgIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5wdXNoKGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgbGV0IHByb21pc2U7XG4gICAgbGV0IGkgPSAwO1xuICAgIGxldCBsZW47XG5cbiAgICBpZiAoIXN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycykge1xuICAgICAgY29uc3QgY2hhaW4gPSBbZGlzcGF0Y2hSZXF1ZXN0LmJpbmQodGhpcyksIHVuZGVmaW5lZF07XG4gICAgICBjaGFpbi51bnNoaWZ0KC4uLnJlcXVlc3RJbnRlcmNlcHRvckNoYWluKTtcbiAgICAgIGNoYWluLnB1c2goLi4ucmVzcG9uc2VJbnRlcmNlcHRvckNoYWluKTtcbiAgICAgIGxlbiA9IGNoYWluLmxlbmd0aDtcblxuICAgICAgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShjb25maWcpO1xuXG4gICAgICB3aGlsZSAoaSA8IGxlbikge1xuICAgICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKGNoYWluW2krK10sIGNoYWluW2krK10pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9XG5cbiAgICBsZW4gPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi5sZW5ndGg7XG5cbiAgICBsZXQgbmV3Q29uZmlnID0gY29uZmlnO1xuXG4gICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgIGNvbnN0IG9uRnVsZmlsbGVkID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW5baSsrXTtcbiAgICAgIGNvbnN0IG9uUmVqZWN0ZWQgPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbltpKytdO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbmV3Q29uZmlnID0gb25GdWxmaWxsZWQobmV3Q29uZmlnKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIG9uUmVqZWN0ZWQuY2FsbCh0aGlzLCBlcnJvcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBwcm9taXNlID0gZGlzcGF0Y2hSZXF1ZXN0LmNhbGwodGhpcywgbmV3Q29uZmlnKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICB9XG5cbiAgICBpID0gMDtcbiAgICBsZW4gPSByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4ocmVzcG9uc2VJbnRlcmNlcHRvckNoYWluW2krK10sIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbltpKytdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxuXG4gIGdldFVyaShjb25maWcpIHtcbiAgICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gYnVpbGRGdWxsUGF0aChjb25maWcuYmFzZVVSTCwgY29uZmlnLnVybCwgY29uZmlnLmFsbG93QWJzb2x1dGVVcmxzKTtcbiAgICByZXR1cm4gYnVpbGRVUkwoZnVsbFBhdGgsIGNvbmZpZy5wYXJhbXMsIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyKTtcbiAgfVxufVxuXG4vLyBQcm92aWRlIGFsaWFzZXMgZm9yIHN1cHBvcnRlZCByZXF1ZXN0IG1ldGhvZHNcbnV0aWxzLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAnb3B0aW9ucyddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kTm9EYXRhKG1ldGhvZCkge1xuICAvKmVzbGludCBmdW5jLW5hbWVzOjAqL1xuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uICh1cmwsIGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QoXG4gICAgICBtZXJnZUNvbmZpZyhjb25maWcgfHwge30sIHtcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICB1cmwsXG4gICAgICAgIGRhdGE6IChjb25maWcgfHwge30pLmRhdGEsXG4gICAgICB9KVxuICAgICk7XG4gIH07XG59KTtcblxudXRpbHMuZm9yRWFjaChbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2RXaXRoRGF0YShtZXRob2QpIHtcbiAgZnVuY3Rpb24gZ2VuZXJhdGVIVFRQTWV0aG9kKGlzRm9ybSkge1xuICAgIHJldHVybiBmdW5jdGlvbiBodHRwTWV0aG9kKHVybCwgZGF0YSwgY29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KFxuICAgICAgICBtZXJnZUNvbmZpZyhjb25maWcgfHwge30sIHtcbiAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgaGVhZGVyczogaXNGb3JtXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGEnLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHt9LFxuICAgICAgICAgIHVybCxcbiAgICAgICAgICBkYXRhLFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9O1xuICB9XG5cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZF0gPSBnZW5lcmF0ZUhUVFBNZXRob2QoKTtcblxuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kICsgJ0Zvcm0nXSA9IGdlbmVyYXRlSFRUUE1ldGhvZCh0cnVlKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBBeGlvcztcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IENhbmNlbGVkRXJyb3IgZnJvbSAnLi9DYW5jZWxlZEVycm9yLmpzJztcblxuLyoqXG4gKiBBIGBDYW5jZWxUb2tlbmAgaXMgYW4gb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVxdWVzdCBjYW5jZWxsYXRpb24gb2YgYW4gb3BlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGV4ZWN1dG9yIFRoZSBleGVjdXRvciBmdW5jdGlvbi5cbiAqXG4gKiBAcmV0dXJucyB7Q2FuY2VsVG9rZW59XG4gKi9cbmNsYXNzIENhbmNlbFRva2VuIHtcbiAgY29uc3RydWN0b3IoZXhlY3V0b3IpIHtcbiAgICBpZiAodHlwZW9mIGV4ZWN1dG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uJyk7XG4gICAgfVxuXG4gICAgbGV0IHJlc29sdmVQcm9taXNlO1xuXG4gICAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gcHJvbWlzZUV4ZWN1dG9yKHJlc29sdmUpIHtcbiAgICAgIHJlc29sdmVQcm9taXNlID0gcmVzb2x2ZTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHRva2VuID0gdGhpcztcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgdGhpcy5wcm9taXNlLnRoZW4oKGNhbmNlbCkgPT4ge1xuICAgICAgaWYgKCF0b2tlbi5fbGlzdGVuZXJzKSByZXR1cm47XG5cbiAgICAgIGxldCBpID0gdG9rZW4uX2xpc3RlbmVycy5sZW5ndGg7XG5cbiAgICAgIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgICAgIHRva2VuLl9saXN0ZW5lcnNbaV0oY2FuY2VsKTtcbiAgICAgIH1cbiAgICAgIHRva2VuLl9saXN0ZW5lcnMgPSBudWxsO1xuICAgIH0pO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICB0aGlzLnByb21pc2UudGhlbiA9IChvbmZ1bGZpbGxlZCkgPT4ge1xuICAgICAgbGV0IF9yZXNvbHZlO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICB0b2tlbi5zdWJzY3JpYmUocmVzb2x2ZSk7XG4gICAgICAgIF9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgIH0pLnRoZW4ob25mdWxmaWxsZWQpO1xuXG4gICAgICBwcm9taXNlLmNhbmNlbCA9IGZ1bmN0aW9uIHJlamVjdCgpIHtcbiAgICAgICAgdG9rZW4udW5zdWJzY3JpYmUoX3Jlc29sdmUpO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfTtcblxuICAgIGV4ZWN1dG9yKGZ1bmN0aW9uIGNhbmNlbChtZXNzYWdlLCBjb25maWcsIHJlcXVlc3QpIHtcbiAgICAgIGlmICh0b2tlbi5yZWFzb24pIHtcbiAgICAgICAgLy8gQ2FuY2VsbGF0aW9uIGhhcyBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdG9rZW4ucmVhc29uID0gbmV3IENhbmNlbGVkRXJyb3IobWVzc2FnZSwgY29uZmlnLCByZXF1ZXN0KTtcbiAgICAgIHJlc29sdmVQcm9taXNlKHRva2VuLnJlYXNvbik7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhyb3dzIGEgYENhbmNlbGVkRXJyb3JgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gICAqL1xuICB0aHJvd0lmUmVxdWVzdGVkKCkge1xuICAgIGlmICh0aGlzLnJlYXNvbikge1xuICAgICAgdGhyb3cgdGhpcy5yZWFzb247XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN1YnNjcmliZSB0byB0aGUgY2FuY2VsIHNpZ25hbFxuICAgKi9cblxuICBzdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgICBpZiAodGhpcy5yZWFzb24pIHtcbiAgICAgIGxpc3RlbmVyKHRoaXMucmVhc29uKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbGlzdGVuZXJzKSB7XG4gICAgICB0aGlzLl9saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVycyA9IFtsaXN0ZW5lcl07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVuc3Vic2NyaWJlIGZyb20gdGhlIGNhbmNlbCBzaWduYWxcbiAgICovXG5cbiAgdW5zdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgICBpZiAoIXRoaXMuX2xpc3RlbmVycykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpbmRleCA9IHRoaXMuX2xpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gIH1cblxuICB0b0Fib3J0U2lnbmFsKCkge1xuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICBjb25zdCBhYm9ydCA9IChlcnIpID0+IHtcbiAgICAgIGNvbnRyb2xsZXIuYWJvcnQoZXJyKTtcbiAgICB9O1xuXG4gICAgdGhpcy5zdWJzY3JpYmUoYWJvcnQpO1xuXG4gICAgY29udHJvbGxlci5zaWduYWwudW5zdWJzY3JpYmUgPSAoKSA9PiB0aGlzLnVuc3Vic2NyaWJlKGFib3J0KTtcblxuICAgIHJldHVybiBjb250cm9sbGVyLnNpZ25hbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIGEgbmV3IGBDYW5jZWxUb2tlbmAgYW5kIGEgZnVuY3Rpb24gdGhhdCwgd2hlbiBjYWxsZWQsXG4gICAqIGNhbmNlbHMgdGhlIGBDYW5jZWxUb2tlbmAuXG4gICAqL1xuICBzdGF0aWMgc291cmNlKCkge1xuICAgIGxldCBjYW5jZWw7XG4gICAgY29uc3QgdG9rZW4gPSBuZXcgQ2FuY2VsVG9rZW4oZnVuY3Rpb24gZXhlY3V0b3IoYykge1xuICAgICAgY2FuY2VsID0gYztcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW4sXG4gICAgICBjYW5jZWwsXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDYW5jZWxUb2tlbjtcbiIsImNvbnN0IEh0dHBTdGF0dXNDb2RlID0ge1xuICBDb250aW51ZTogMTAwLFxuICBTd2l0Y2hpbmdQcm90b2NvbHM6IDEwMSxcbiAgUHJvY2Vzc2luZzogMTAyLFxuICBFYXJseUhpbnRzOiAxMDMsXG4gIE9rOiAyMDAsXG4gIENyZWF0ZWQ6IDIwMSxcbiAgQWNjZXB0ZWQ6IDIwMixcbiAgTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uOiAyMDMsXG4gIE5vQ29udGVudDogMjA0LFxuICBSZXNldENvbnRlbnQ6IDIwNSxcbiAgUGFydGlhbENvbnRlbnQ6IDIwNixcbiAgTXVsdGlTdGF0dXM6IDIwNyxcbiAgQWxyZWFkeVJlcG9ydGVkOiAyMDgsXG4gIEltVXNlZDogMjI2LFxuICBNdWx0aXBsZUNob2ljZXM6IDMwMCxcbiAgTW92ZWRQZXJtYW5lbnRseTogMzAxLFxuICBGb3VuZDogMzAyLFxuICBTZWVPdGhlcjogMzAzLFxuICBOb3RNb2RpZmllZDogMzA0LFxuICBVc2VQcm94eTogMzA1LFxuICBVbnVzZWQ6IDMwNixcbiAgVGVtcG9yYXJ5UmVkaXJlY3Q6IDMwNyxcbiAgUGVybWFuZW50UmVkaXJlY3Q6IDMwOCxcbiAgQmFkUmVxdWVzdDogNDAwLFxuICBVbmF1dGhvcml6ZWQ6IDQwMSxcbiAgUGF5bWVudFJlcXVpcmVkOiA0MDIsXG4gIEZvcmJpZGRlbjogNDAzLFxuICBOb3RGb3VuZDogNDA0LFxuICBNZXRob2ROb3RBbGxvd2VkOiA0MDUsXG4gIE5vdEFjY2VwdGFibGU6IDQwNixcbiAgUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOiA0MDcsXG4gIFJlcXVlc3RUaW1lb3V0OiA0MDgsXG4gIENvbmZsaWN0OiA0MDksXG4gIEdvbmU6IDQxMCxcbiAgTGVuZ3RoUmVxdWlyZWQ6IDQxMSxcbiAgUHJlY29uZGl0aW9uRmFpbGVkOiA0MTIsXG4gIFBheWxvYWRUb29MYXJnZTogNDEzLFxuICBVcmlUb29Mb25nOiA0MTQsXG4gIFVuc3VwcG9ydGVkTWVkaWFUeXBlOiA0MTUsXG4gIFJhbmdlTm90U2F0aXNmaWFibGU6IDQxNixcbiAgRXhwZWN0YXRpb25GYWlsZWQ6IDQxNyxcbiAgSW1BVGVhcG90OiA0MTgsXG4gIE1pc2RpcmVjdGVkUmVxdWVzdDogNDIxLFxuICBVbnByb2Nlc3NhYmxlRW50aXR5OiA0MjIsXG4gIExvY2tlZDogNDIzLFxuICBGYWlsZWREZXBlbmRlbmN5OiA0MjQsXG4gIFRvb0Vhcmx5OiA0MjUsXG4gIFVwZ3JhZGVSZXF1aXJlZDogNDI2LFxuICBQcmVjb25kaXRpb25SZXF1aXJlZDogNDI4LFxuICBUb29NYW55UmVxdWVzdHM6IDQyOSxcbiAgUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlOiA0MzEsXG4gIFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOiA0NTEsXG4gIEludGVybmFsU2VydmVyRXJyb3I6IDUwMCxcbiAgTm90SW1wbGVtZW50ZWQ6IDUwMSxcbiAgQmFkR2F0ZXdheTogNTAyLFxuICBTZXJ2aWNlVW5hdmFpbGFibGU6IDUwMyxcbiAgR2F0ZXdheVRpbWVvdXQ6IDUwNCxcbiAgSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6IDUwNSxcbiAgVmFyaWFudEFsc29OZWdvdGlhdGVzOiA1MDYsXG4gIEluc3VmZmljaWVudFN0b3JhZ2U6IDUwNyxcbiAgTG9vcERldGVjdGVkOiA1MDgsXG4gIE5vdEV4dGVuZGVkOiA1MTAsXG4gIE5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkOiA1MTEsXG4gIFdlYlNlcnZlcklzRG93bjogNTIxLFxuICBDb25uZWN0aW9uVGltZWRPdXQ6IDUyMixcbiAgT3JpZ2luSXNVbnJlYWNoYWJsZTogNTIzLFxuICBUaW1lb3V0T2NjdXJyZWQ6IDUyNCxcbiAgU3NsSGFuZHNoYWtlRmFpbGVkOiA1MjUsXG4gIEludmFsaWRTc2xDZXJ0aWZpY2F0ZTogNTI2LFxufTtcblxuT2JqZWN0LmVudHJpZXMoSHR0cFN0YXR1c0NvZGUpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICBIdHRwU3RhdHVzQ29kZVt2YWx1ZV0gPSBrZXk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgSHR0cFN0YXR1c0NvZGU7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzLmpzJztcbmltcG9ydCBiaW5kIGZyb20gJy4vaGVscGVycy9iaW5kLmpzJztcbmltcG9ydCBBeGlvcyBmcm9tICcuL2NvcmUvQXhpb3MuanMnO1xuaW1wb3J0IG1lcmdlQ29uZmlnIGZyb20gJy4vY29yZS9tZXJnZUNvbmZpZy5qcyc7XG5pbXBvcnQgZGVmYXVsdHMgZnJvbSAnLi9kZWZhdWx0cy9pbmRleC5qcyc7XG5pbXBvcnQgZm9ybURhdGFUb0pTT04gZnJvbSAnLi9oZWxwZXJzL2Zvcm1EYXRhVG9KU09OLmpzJztcbmltcG9ydCBDYW5jZWxlZEVycm9yIGZyb20gJy4vY2FuY2VsL0NhbmNlbGVkRXJyb3IuanMnO1xuaW1wb3J0IENhbmNlbFRva2VuIGZyb20gJy4vY2FuY2VsL0NhbmNlbFRva2VuLmpzJztcbmltcG9ydCBpc0NhbmNlbCBmcm9tICcuL2NhbmNlbC9pc0NhbmNlbC5qcyc7XG5pbXBvcnQgeyBWRVJTSU9OIH0gZnJvbSAnLi9lbnYvZGF0YS5qcyc7XG5pbXBvcnQgdG9Gb3JtRGF0YSBmcm9tICcuL2hlbHBlcnMvdG9Gb3JtRGF0YS5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuL2NvcmUvQXhpb3NFcnJvci5qcyc7XG5pbXBvcnQgc3ByZWFkIGZyb20gJy4vaGVscGVycy9zcHJlYWQuanMnO1xuaW1wb3J0IGlzQXhpb3NFcnJvciBmcm9tICcuL2hlbHBlcnMvaXNBeGlvc0Vycm9yLmpzJztcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSAnLi9jb3JlL0F4aW9zSGVhZGVycy5qcyc7XG5pbXBvcnQgYWRhcHRlcnMgZnJvbSAnLi9hZGFwdGVycy9hZGFwdGVycy5qcyc7XG5pbXBvcnQgSHR0cFN0YXR1c0NvZGUgZnJvbSAnLi9oZWxwZXJzL0h0dHBTdGF0dXNDb2RlLmpzJztcblxuLyoqXG4gKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZGVmYXVsdENvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm5zIHtBeGlvc30gQSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdENvbmZpZykge1xuICBjb25zdCBjb250ZXh0ID0gbmV3IEF4aW9zKGRlZmF1bHRDb25maWcpO1xuICBjb25zdCBpbnN0YW5jZSA9IGJpbmQoQXhpb3MucHJvdG90eXBlLnJlcXVlc3QsIGNvbnRleHQpO1xuXG4gIC8vIENvcHkgYXhpb3MucHJvdG90eXBlIHRvIGluc3RhbmNlXG4gIHV0aWxzLmV4dGVuZChpbnN0YW5jZSwgQXhpb3MucHJvdG90eXBlLCBjb250ZXh0LCB7IGFsbE93bktleXM6IHRydWUgfSk7XG5cbiAgLy8gQ29weSBjb250ZXh0IHRvIGluc3RhbmNlXG4gIHV0aWxzLmV4dGVuZChpbnN0YW5jZSwgY29udGV4dCwgbnVsbCwgeyBhbGxPd25LZXlzOiB0cnVlIH0pO1xuXG4gIC8vIEZhY3RvcnkgZm9yIGNyZWF0aW5nIG5ldyBpbnN0YW5jZXNcbiAgaW5zdGFuY2UuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGluc3RhbmNlQ29uZmlnKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUluc3RhbmNlKG1lcmdlQ29uZmlnKGRlZmF1bHRDb25maWcsIGluc3RhbmNlQ29uZmlnKSk7XG4gIH07XG5cbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuXG4vLyBDcmVhdGUgdGhlIGRlZmF1bHQgaW5zdGFuY2UgdG8gYmUgZXhwb3J0ZWRcbmNvbnN0IGF4aW9zID0gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdHMpO1xuXG4vLyBFeHBvc2UgQXhpb3MgY2xhc3MgdG8gYWxsb3cgY2xhc3MgaW5oZXJpdGFuY2VcbmF4aW9zLkF4aW9zID0gQXhpb3M7XG5cbi8vIEV4cG9zZSBDYW5jZWwgJiBDYW5jZWxUb2tlblxuYXhpb3MuQ2FuY2VsZWRFcnJvciA9IENhbmNlbGVkRXJyb3I7XG5heGlvcy5DYW5jZWxUb2tlbiA9IENhbmNlbFRva2VuO1xuYXhpb3MuaXNDYW5jZWwgPSBpc0NhbmNlbDtcbmF4aW9zLlZFUlNJT04gPSBWRVJTSU9OO1xuYXhpb3MudG9Gb3JtRGF0YSA9IHRvRm9ybURhdGE7XG5cbi8vIEV4cG9zZSBBeGlvc0Vycm9yIGNsYXNzXG5heGlvcy5BeGlvc0Vycm9yID0gQXhpb3NFcnJvcjtcblxuLy8gYWxpYXMgZm9yIENhbmNlbGVkRXJyb3IgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbmF4aW9zLkNhbmNlbCA9IGF4aW9zLkNhbmNlbGVkRXJyb3I7XG5cbi8vIEV4cG9zZSBhbGwvc3ByZWFkXG5heGlvcy5hbGwgPSBmdW5jdGlvbiBhbGwocHJvbWlzZXMpIHtcbiAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKTtcbn07XG5cbmF4aW9zLnNwcmVhZCA9IHNwcmVhZDtcblxuLy8gRXhwb3NlIGlzQXhpb3NFcnJvclxuYXhpb3MuaXNBeGlvc0Vycm9yID0gaXNBeGlvc0Vycm9yO1xuXG4vLyBFeHBvc2UgbWVyZ2VDb25maWdcbmF4aW9zLm1lcmdlQ29uZmlnID0gbWVyZ2VDb25maWc7XG5cbmF4aW9zLkF4aW9zSGVhZGVycyA9IEF4aW9zSGVhZGVycztcblxuYXhpb3MuZm9ybVRvSlNPTiA9ICh0aGluZykgPT4gZm9ybURhdGFUb0pTT04odXRpbHMuaXNIVE1MRm9ybSh0aGluZykgPyBuZXcgRm9ybURhdGEodGhpbmcpIDogdGhpbmcpO1xuXG5heGlvcy5nZXRBZGFwdGVyID0gYWRhcHRlcnMuZ2V0QWRhcHRlcjtcblxuYXhpb3MuSHR0cFN0YXR1c0NvZGUgPSBIdHRwU3RhdHVzQ29kZTtcblxuYXhpb3MuZGVmYXVsdCA9IGF4aW9zO1xuXG4vLyB0aGlzIG1vZHVsZSBzaG91bGQgb25seSBoYXZlIGEgZGVmYXVsdCBleHBvcnRcbmV4cG9ydCBkZWZhdWx0IGF4aW9zO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFN5bnRhY3RpYyBzdWdhciBmb3IgaW52b2tpbmcgYSBmdW5jdGlvbiBhbmQgZXhwYW5kaW5nIGFuIGFycmF5IGZvciBhcmd1bWVudHMuXG4gKlxuICogQ29tbW9uIHVzZSBjYXNlIHdvdWxkIGJlIHRvIHVzZSBgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5YC5cbiAqXG4gKiAgYGBganNcbiAqICBmdW5jdGlvbiBmKHgsIHksIHopIHt9XG4gKiAgY29uc3QgYXJncyA9IFsxLCAyLCAzXTtcbiAqICBmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICogIGBgYFxuICpcbiAqIFdpdGggYHNwcmVhZGAgdGhpcyBleGFtcGxlIGNhbiBiZSByZS13cml0dGVuLlxuICpcbiAqICBgYGBqc1xuICogIHNwcmVhZChmdW5jdGlvbih4LCB5LCB6KSB7fSkoWzEsIDIsIDNdKTtcbiAqICBgYGBcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICpcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3ByZWFkKGNhbGxiYWNrKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKGFycikge1xuICAgIHJldHVybiBjYWxsYmFjay5hcHBseShudWxsLCBhcnIpO1xuICB9O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgcGF5bG9hZCBpcyBhbiBlcnJvciB0aHJvd24gYnkgQXhpb3NcbiAqXG4gKiBAcGFyYW0geyp9IHBheWxvYWQgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgcGF5bG9hZCBpcyBhbiBlcnJvciB0aHJvd24gYnkgQXhpb3MsIG90aGVyd2lzZSBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0F4aW9zRXJyb3IocGF5bG9hZCkge1xuICByZXR1cm4gdXRpbHMuaXNPYmplY3QocGF5bG9hZCkgJiYgcGF5bG9hZC5pc0F4aW9zRXJyb3IgPT09IHRydWU7XG59XG4iLCIvKipcbiAqIFNlcmlhbGl6ZXMgb2JqZWN0c1xuICpcbiAqIEBuYW1lIHNlcmlhbGl6ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBPYmplY3QgdG8gYmUgc2VyaWFsaXplZFxuICogQHBhcmFtIHtBbnl9IHByZWZpeFxuICogQHJldHVybnMge1N0cmluZ30gU2VyaWFsaXplZCBvYmplY3RcbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC5zZXJpYWxpemUocGFyYW0xLCBwYXJhbTIpO1xuICogLy89dHJ1ZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzZXJpYWxpemUob2JqLCBwcmVmaXgpIHtcbiAgaWYgKCFvYmopIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iailcbiAgICAubWFwKHAgPT4ge1xuICAgICAgY29uc3QgayA9IHByZWZpeCB8fCBwO1xuICAgICAgY29uc3QgdiA9IG9ialtwXTtcblxuICAgICAgcmV0dXJuIHR5cGVvZiB2ID09PSAnb2JqZWN0J1xuICAgICAgICA/IHNlcmlhbGl6ZSh2LCBrKVxuICAgICAgICA6IGAke2VuY29kZVVSSUNvbXBvbmVudChrKX09JHtlbmNvZGVVUklDb21wb25lbnQodil9YDtcbiAgICB9KVxuICAgIC5qb2luKCcmJyk7XG59XG4iLCJpbXBvcnQgZ2V0SnNvbiBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWpzb24nO1xuXG5jb25zdCBERUZBVUxUX1BFTElBU19VUkwgPSAnaHR0cHM6Ly9hcGkuZGlnaXRyYW5zaXQuZmkvZ2VvY29kaW5nL3YxL3NlYXJjaCc7XG4vKipcbiAqIDxERVNDUklQVElPTj5cbiAqXG4gKiBAbmFtZSBnZXRHZW9jb2RpbmdSZXN1bHRzXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VhcmNoU3RyaW5nXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VhcmNoUGFyYW1zIChPcHRpb25hbCkgUGFyYW1ldGVycyBhcHBlbmRlZCB0byB1cmwsIGJhc2ljYWxseSBib3ggLyBwb2x5Z29uIHRvIHJlc3RyaWN0IHNlYXJjaCBhcmVhXG4gKiBAcGFyYW0ge1N0cmluZ30gbGFuZyAoT3B0aW9uYWwpIHNlYXJjaCBsYW5ndWFnZVxuICogQHBhcmFtIHtPYmplY3R9IGZvY3VzUG9pbnQgKE9wdGlvbmFsKSBPd24gUG9zaXRpb24gKFBFTElBUyBBUEkpXG4gKiBAcGFyYW0ge1N0cmluZ30gc291cmNlcyAoT3B0aW9uYWwpIHNlYXJjaCBzb3VyY2VzIChlLmcgT1NNLCBHVEZTLi4pXG4gKiBAcGFyYW0ge09iamVjdH0gbWluaW1hbFJlZ2V4cCAoT3B0aW9uYWwpIFJlZ2V4cCBmb3IgdGVzdGluZ1xuICogQHBhcmFtIHsqfSBnZW9jb2RpbmdMYXllcnMgKE9wdGlvbmFsKSBBcnJheSBvZiBzdHJpbmdzIHRoYXQgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hpY2ggbGF5ZXJzIGlzIHNlYXJjaGVkLCBlLmcuIFsndmVudWUnLCAnYWRkcmVzcycsICdzdG9wJ11cbiAqIEByZXR1cm5zIHtTdHJpbmd9IFJlc3VsdHMgaW4gSlNPTiBmb3JtXG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwuZ2V0R2VvY29kaW5nUmVzdWx0cyhcInJlc3VsdFwiKTtcbiAqIC8vPSBlLmcuIHt0ZXh0OlwicmVzdWx0XCJ9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEdlb2NvZGluZ1Jlc3VsdHMoXG4gIHNlYXJjaFN0cmluZyxcbiAgc2VhcmNoUGFyYW1zLFxuICBsYW5nLFxuICBmb2N1c1BvaW50LFxuICBzb3VyY2VzLFxuICBwZWxpYXNVcmwsXG4gIG1pbmltYWxSZWdleHAsXG4gIGdlb2NvZGluZ0xheWVycyxcbikge1xuICBjb25zdCB0ZXh0ID0gc2VhcmNoU3RyaW5nID8gc2VhcmNoU3RyaW5nLnRyaW0oKSA6IG51bGw7XG4gIGlmIChcbiAgICB0ZXh0ID09PSB1bmRlZmluZWQgfHxcbiAgICB0ZXh0ID09PSBudWxsIHx8XG4gICAgdGV4dC5sZW5ndGggPCAxIHx8XG4gICAgKG1pbmltYWxSZWdleHAgJiYgIW1pbmltYWxSZWdleHAudGVzdCh0ZXh0KSlcbiAgKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG4gIH1cbiAgY29uc3QgUEVMSUFTX1VSTCA9IHBlbGlhc1VybCB8fCBERUZBVUxUX1BFTElBU19VUkw7XG4gIGxldCBvcHRzID0geyB0ZXh0LCAuLi5zZWFyY2hQYXJhbXMsIC4uLmZvY3VzUG9pbnQsIGxhbmcgfTtcbiAgaWYgKHNvdXJjZXMpIHtcbiAgICBvcHRzID0geyAuLi5vcHRzLCBzb3VyY2VzIH07XG4gIH1cbiAgaWYgKGdlb2NvZGluZ0xheWVycykge1xuICAgIGNvbnN0IGxheWVycyA9IGdlb2NvZGluZ0xheWVycy50b1N0cmluZygpO1xuICAgIG9wdHMgPSB7IC4uLm9wdHMsIGxheWVycyB9O1xuICB9XG4gIHJldHVybiBnZXRKc29uKFBFTElBU19VUkwsIG9wdHMpLnRoZW4ocmVzID0+IHtcbiAgICByZXR1cm4gcmVzLmZlYXR1cmVzO1xuICB9KTtcbn1cbiIsImltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgc2VyaWFsaXplIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1zZXJpYWxpemUnO1xuLyoqXG4gKiAgUmV0dXJuIFByb21pc2UgZm9yIGEgdXJsIGpzb24gZ2V0IHJlcXVlc3RcbiAqXG4gKiBAbmFtZSBnZXRKc29uXG4gKiBAcGFyYW0ge1N0cmluZ30gdXJsXG4gKiBAcGFyYW0ge0FycmF5fSBwYXJhbXNcbiAqIEByZXR1cm5zIHtPYmplY3R9IHJlc3BvbnNlXG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwuZ2V0SnNvbihwYXJhbTEsIHBhcmFtMik7XG4gKiAvLz1yZXNwb25zZVxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEpzb24odXJsLCBwYXJhbXMpIHtcbiAgcmV0dXJuIGF4aW9zXG4gICAgLmdldChcbiAgICAgIGVuY29kZVVSSSh1cmwpICtcbiAgICAgICAgKHBhcmFtc1xuICAgICAgICAgID8gKHVybC5zZWFyY2goL1xcPy8pID09PSAtMSA/ICc/JyA6ICcmJykgKyBzZXJpYWxpemUocGFyYW1zKVxuICAgICAgICAgIDogJycpLFxuICAgICAge1xuICAgICAgICB0aW1lb3V0OiAxMDAwMCxcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcblxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgQWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIClcbiAgICAudGhlbihyZXMgPT4ge1xuICAgICAgcmV0dXJuIHJlcy5kYXRhO1xuICAgIH0pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENyZWF0ZSBhIGJvdW5kIHZlcnNpb24gb2YgYSBmdW5jdGlvbiB3aXRoIGEgc3BlY2lmaWVkIGB0aGlzYCBjb250ZXh0XG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gLSBUaGUgZnVuY3Rpb24gdG8gYmluZFxuICogQHBhcmFtIHsqfSB0aGlzQXJnIC0gVGhlIHZhbHVlIHRvIGJlIHBhc3NlZCBhcyB0aGUgYHRoaXNgIHBhcmFtZXRlclxuICogQHJldHVybnMge0Z1bmN0aW9ufSBBIG5ldyBmdW5jdGlvbiB0aGF0IHdpbGwgY2FsbCB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gd2l0aCB0aGUgc3BlY2lmaWVkIGB0aGlzYCBjb250ZXh0XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJpbmQoZm4sIHRoaXNBcmcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXNBcmcsIGFyZ3VtZW50cyk7XG4gIH07XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBiaW5kIGZyb20gJy4vaGVscGVycy9iaW5kLmpzJztcblxuLy8gdXRpbHMgaXMgYSBsaWJyYXJ5IG9mIGdlbmVyaWMgaGVscGVyIGZ1bmN0aW9ucyBub24tc3BlY2lmaWMgdG8gYXhpb3NcblxuY29uc3QgeyB0b1N0cmluZyB9ID0gT2JqZWN0LnByb3RvdHlwZTtcbmNvbnN0IHsgZ2V0UHJvdG90eXBlT2YgfSA9IE9iamVjdDtcbmNvbnN0IHsgaXRlcmF0b3IsIHRvU3RyaW5nVGFnIH0gPSBTeW1ib2w7XG5cbmNvbnN0IGtpbmRPZiA9ICgoY2FjaGUpID0+ICh0aGluZykgPT4ge1xuICBjb25zdCBzdHIgPSB0b1N0cmluZy5jYWxsKHRoaW5nKTtcbiAgcmV0dXJuIGNhY2hlW3N0cl0gfHwgKGNhY2hlW3N0cl0gPSBzdHIuc2xpY2UoOCwgLTEpLnRvTG93ZXJDYXNlKCkpO1xufSkoT2JqZWN0LmNyZWF0ZShudWxsKSk7XG5cbmNvbnN0IGtpbmRPZlRlc3QgPSAodHlwZSkgPT4ge1xuICB0eXBlID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gKHRoaW5nKSA9PiBraW5kT2YodGhpbmcpID09PSB0eXBlO1xufTtcblxuY29uc3QgdHlwZU9mVGVzdCA9ICh0eXBlKSA9PiAodGhpbmcpID0+IHR5cGVvZiB0aGluZyA9PT0gdHlwZTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIG5vbi1udWxsIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IHsgaXNBcnJheSB9ID0gQXJyYXk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgdW5kZWZpbmVkXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNVbmRlZmluZWQgPSB0eXBlT2ZUZXN0KCd1bmRlZmluZWQnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0J1ZmZlcih2YWwpIHtcbiAgcmV0dXJuIChcbiAgICB2YWwgIT09IG51bGwgJiZcbiAgICAhaXNVbmRlZmluZWQodmFsKSAmJlxuICAgIHZhbC5jb25zdHJ1Y3RvciAhPT0gbnVsbCAmJlxuICAgICFpc1VuZGVmaW5lZCh2YWwuY29uc3RydWN0b3IpICYmXG4gICAgaXNGdW5jdGlvbih2YWwuY29uc3RydWN0b3IuaXNCdWZmZXIpICYmXG4gICAgdmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyKHZhbClcbiAgKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0FycmF5QnVmZmVyID0ga2luZE9mVGVzdCgnQXJyYXlCdWZmZXInKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlCdWZmZXJWaWV3KHZhbCkge1xuICBsZXQgcmVzdWx0O1xuICBpZiAodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJiBBcnJheUJ1ZmZlci5pc1ZpZXcpIHtcbiAgICByZXN1bHQgPSBBcnJheUJ1ZmZlci5pc1ZpZXcodmFsKTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSB2YWwgJiYgdmFsLmJ1ZmZlciAmJiBpc0FycmF5QnVmZmVyKHZhbC5idWZmZXIpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJpbmdcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyaW5nLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNTdHJpbmcgPSB0eXBlT2ZUZXN0KCdzdHJpbmcnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRnVuY3Rpb24sIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Z1bmN0aW9uID0gdHlwZU9mVGVzdCgnZnVuY3Rpb24nKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIE51bWJlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBOdW1iZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc051bWJlciA9IHR5cGVPZlRlc3QoJ251bWJlcicpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdGhpbmcgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc09iamVjdCA9ICh0aGluZykgPT4gdGhpbmcgIT09IG51bGwgJiYgdHlwZW9mIHRoaW5nID09PSAnb2JqZWN0JztcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJvb2xlYW5cbiAqXG4gKiBAcGFyYW0geyp9IHRoaW5nIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJvb2xlYW4sIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Jvb2xlYW4gPSAodGhpbmcpID0+IHRoaW5nID09PSB0cnVlIHx8IHRoaW5nID09PSBmYWxzZTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHBsYWluIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1BsYWluT2JqZWN0ID0gKHZhbCkgPT4ge1xuICBpZiAoa2luZE9mKHZhbCkgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgcHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YodmFsKTtcbiAgcmV0dXJuIChcbiAgICAocHJvdG90eXBlID09PSBudWxsIHx8XG4gICAgICBwcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGUgfHxcbiAgICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90b3R5cGUpID09PSBudWxsKSAmJlxuICAgICEodG9TdHJpbmdUYWcgaW4gdmFsKSAmJlxuICAgICEoaXRlcmF0b3IgaW4gdmFsKVxuICApO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBlbXB0eSBvYmplY3QgKHNhZmVseSBoYW5kbGVzIEJ1ZmZlcnMpXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBlbXB0eSBvYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0VtcHR5T2JqZWN0ID0gKHZhbCkgPT4ge1xuICAvLyBFYXJseSByZXR1cm4gZm9yIG5vbi1vYmplY3RzIG9yIEJ1ZmZlcnMgdG8gcHJldmVudCBSYW5nZUVycm9yXG4gIGlmICghaXNPYmplY3QodmFsKSB8fCBpc0J1ZmZlcih2YWwpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModmFsKS5sZW5ndGggPT09IDAgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbCkgPT09IE9iamVjdC5wcm90b3R5cGU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBGYWxsYmFjayBmb3IgYW55IG90aGVyIG9iamVjdHMgdGhhdCBtaWdodCBjYXVzZSBSYW5nZUVycm9yIHdpdGggT2JqZWN0LmtleXMoKVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIERhdGVcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRGF0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRGF0ZSA9IGtpbmRPZlRlc3QoJ0RhdGUnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZpbGVcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRmlsZSA9IGtpbmRPZlRlc3QoJ0ZpbGUnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFJlYWN0IE5hdGl2ZSBCbG9iXG4gKiBSZWFjdCBOYXRpdmUgXCJibG9iXCI6IGFuIG9iamVjdCB3aXRoIGEgYHVyaWAgYXR0cmlidXRlLiBPcHRpb25hbGx5LCBpdCBjYW5cbiAqIGFsc28gaGF2ZSBhIGBuYW1lYCBhbmQgYHR5cGVgIGF0dHJpYnV0ZSB0byBzcGVjaWZ5IGZpbGVuYW1lIGFuZCBjb250ZW50IHR5cGVcbiAqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC1uYXRpdmUvYmxvYi8yNjY4NGNmM2FkZjQwOTRlYjZjNDA1ZDM0NWE3NWJmOGM3YzBiZjg4L0xpYnJhcmllcy9OZXR3b3JrL0Zvcm1EYXRhLmpzI0w2OC1MNzFcbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBSZWFjdCBOYXRpdmUgQmxvYiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzUmVhY3ROYXRpdmVCbG9iID0gKHZhbHVlKSA9PiB7XG4gIHJldHVybiAhISh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUudXJpICE9PSAndW5kZWZpbmVkJyk7XG59O1xuXG4vKipcbiAqIERldGVybWluZSBpZiBlbnZpcm9ubWVudCBpcyBSZWFjdCBOYXRpdmVcbiAqIFJlYWN0TmF0aXZlIGBGb3JtRGF0YWAgaGFzIGEgbm9uLXN0YW5kYXJkIGBnZXRQYXJ0cygpYCBtZXRob2RcbiAqXG4gKiBAcGFyYW0geyp9IGZvcm1EYXRhIFRoZSBmb3JtRGF0YSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgZW52aXJvbm1lbnQgaXMgUmVhY3QgTmF0aXZlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNSZWFjdE5hdGl2ZSA9IChmb3JtRGF0YSkgPT4gZm9ybURhdGEgJiYgdHlwZW9mIGZvcm1EYXRhLmdldFBhcnRzICE9PSAndW5kZWZpbmVkJztcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJsb2JcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQmxvYiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzQmxvYiA9IGtpbmRPZlRlc3QoJ0Jsb2InKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZpbGVMaXN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZpbGVMaXN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGaWxlTGlzdCA9IGtpbmRPZlRlc3QoJ0ZpbGVMaXN0Jyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJlYW1cbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyZWFtLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNTdHJlYW0gPSAodmFsKSA9PiBpc09iamVjdCh2YWwpICYmIGlzRnVuY3Rpb24odmFsLnBpcGUpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRm9ybURhdGFcbiAqXG4gKiBAcGFyYW0geyp9IHRoaW5nIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gRm9ybURhdGEsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBnZXRHbG9iYWwoKSB7XG4gIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcpIHJldHVybiBnbG9iYWxUaGlzO1xuICBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSByZXR1cm4gc2VsZjtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSByZXR1cm4gd2luZG93O1xuICBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHJldHVybiBnbG9iYWw7XG4gIHJldHVybiB7fTtcbn1cblxuY29uc3QgRyA9IGdldEdsb2JhbCgpO1xuY29uc3QgRm9ybURhdGFDdG9yID0gdHlwZW9mIEcuRm9ybURhdGEgIT09ICd1bmRlZmluZWQnID8gRy5Gb3JtRGF0YSA6IHVuZGVmaW5lZDtcblxuY29uc3QgaXNGb3JtRGF0YSA9ICh0aGluZykgPT4ge1xuICBpZiAoIXRoaW5nKSByZXR1cm4gZmFsc2U7XG4gIGlmIChGb3JtRGF0YUN0b3IgJiYgdGhpbmcgaW5zdGFuY2VvZiBGb3JtRGF0YUN0b3IpIHJldHVybiB0cnVlO1xuICAvLyBSZWplY3QgcGxhaW4gb2JqZWN0cyBpbmhlcml0aW5nIGRpcmVjdGx5IGZyb20gT2JqZWN0LnByb3RvdHlwZSBzbyBwcm90b3R5cGUtcG9sbHV0aW9uIGdhZGdldHMgY2FuJ3Qgc3Bvb2YgRm9ybURhdGEuXG4gIGNvbnN0IHByb3RvID0gZ2V0UHJvdG90eXBlT2YodGhpbmcpO1xuICBpZiAoIXByb3RvIHx8IHByb3RvID09PSBPYmplY3QucHJvdG90eXBlKSByZXR1cm4gZmFsc2U7XG4gIGlmICghaXNGdW5jdGlvbih0aGluZy5hcHBlbmQpKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGtpbmQgPSBraW5kT2YodGhpbmcpO1xuICByZXR1cm4gKFxuICAgIGtpbmQgPT09ICdmb3JtZGF0YScgfHxcbiAgICAvLyBkZXRlY3QgZm9ybS1kYXRhIGluc3RhbmNlXG4gICAgKGtpbmQgPT09ICdvYmplY3QnICYmIGlzRnVuY3Rpb24odGhpbmcudG9TdHJpbmcpICYmIHRoaW5nLnRvU3RyaW5nKCkgPT09ICdbb2JqZWN0IEZvcm1EYXRhXScpXG4gICk7XG59O1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNVUkxTZWFyY2hQYXJhbXMgPSBraW5kT2ZUZXN0KCdVUkxTZWFyY2hQYXJhbXMnKTtcblxuY29uc3QgW2lzUmVhZGFibGVTdHJlYW0sIGlzUmVxdWVzdCwgaXNSZXNwb25zZSwgaXNIZWFkZXJzXSA9IFtcbiAgJ1JlYWRhYmxlU3RyZWFtJyxcbiAgJ1JlcXVlc3QnLFxuICAnUmVzcG9uc2UnLFxuICAnSGVhZGVycycsXG5dLm1hcChraW5kT2ZUZXN0KTtcblxuLyoqXG4gKiBUcmltIGV4Y2VzcyB3aGl0ZXNwYWNlIG9mZiB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyIFRoZSBTdHJpbmcgdG8gdHJpbVxuICpcbiAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBTdHJpbmcgZnJlZWQgb2YgZXhjZXNzIHdoaXRlc3BhY2VcbiAqL1xuY29uc3QgdHJpbSA9IChzdHIpID0+IHtcbiAgcmV0dXJuIHN0ci50cmltID8gc3RyLnRyaW0oKSA6IHN0ci5yZXBsYWNlKC9eW1xcc1xcdUZFRkZcXHhBMF0rfFtcXHNcXHVGRUZGXFx4QTBdKyQvZywgJycpO1xufTtcbi8qKlxuICogSXRlcmF0ZSBvdmVyIGFuIEFycmF5IG9yIGFuIE9iamVjdCBpbnZva2luZyBhIGZ1bmN0aW9uIGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgYG9iamAgaXMgYW4gQXJyYXkgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBpbmRleCwgYW5kIGNvbXBsZXRlIGFycmF5IGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgJ29iaicgaXMgYW4gT2JqZWN0IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwga2V5LCBhbmQgY29tcGxldGUgb2JqZWN0IGZvciBlYWNoIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fEFycmF5PHVua25vd24+fSBvYmogVGhlIG9iamVjdCB0byBpdGVyYXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGZvciBlYWNoIGl0ZW1cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLmFsbE93bktleXMgPSBmYWxzZV1cbiAqIEByZXR1cm5zIHthbnl9XG4gKi9cbmZ1bmN0aW9uIGZvckVhY2gob2JqLCBmbiwgeyBhbGxPd25LZXlzID0gZmFsc2UgfSA9IHt9KSB7XG4gIC8vIERvbid0IGJvdGhlciBpZiBubyB2YWx1ZSBwcm92aWRlZFxuICBpZiAob2JqID09PSBudWxsIHx8IHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IGk7XG4gIGxldCBsO1xuXG4gIC8vIEZvcmNlIGFuIGFycmF5IGlmIG5vdCBhbHJlYWR5IHNvbWV0aGluZyBpdGVyYWJsZVxuICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICBvYmogPSBbb2JqXTtcbiAgfVxuXG4gIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgYXJyYXkgdmFsdWVzXG4gICAgZm9yIChpID0gMCwgbCA9IG9iai5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2ldLCBpLCBvYmopO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBCdWZmZXIgY2hlY2tcbiAgICBpZiAoaXNCdWZmZXIob2JqKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEl0ZXJhdGUgb3ZlciBvYmplY3Qga2V5c1xuICAgIGNvbnN0IGtleXMgPSBhbGxPd25LZXlzID8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKSA6IE9iamVjdC5rZXlzKG9iaik7XG4gICAgY29uc3QgbGVuID0ga2V5cy5sZW5ndGg7XG4gICAgbGV0IGtleTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAga2V5ID0ga2V5c1tpXTtcbiAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2tleV0sIGtleSwgb2JqKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBGaW5kcyBhIGtleSBpbiBhbiBvYmplY3QsIGNhc2UtaW5zZW5zaXRpdmUsIHJldHVybmluZyB0aGUgYWN0dWFsIGtleSBuYW1lLlxuICogUmV0dXJucyBudWxsIGlmIHRoZSBvYmplY3QgaXMgYSBCdWZmZXIgb3IgaWYgbm8gbWF0Y2ggaXMgZm91bmQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iaiAtIFRoZSBvYmplY3QgdG8gc2VhcmNoLlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgdG8gZmluZCAoY2FzZS1pbnNlbnNpdGl2ZSkuXG4gKiBAcmV0dXJucyB7P3N0cmluZ30gVGhlIGFjdHVhbCBrZXkgbmFtZSBpZiBmb3VuZCwgb3RoZXJ3aXNlIG51bGwuXG4gKi9cbmZ1bmN0aW9uIGZpbmRLZXkob2JqLCBrZXkpIHtcbiAgaWYgKGlzQnVmZmVyKG9iaikpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGtleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgbGV0IGkgPSBrZXlzLmxlbmd0aDtcbiAgbGV0IF9rZXk7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgX2tleSA9IGtleXNbaV07XG4gICAgaWYgKGtleSA9PT0gX2tleS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICByZXR1cm4gX2tleTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmNvbnN0IF9nbG9iYWwgPSAoKCkgPT4ge1xuICAvKmVzbGludCBuby11bmRlZjowKi9cbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJykgcmV0dXJuIGdsb2JhbFRoaXM7XG4gIHJldHVybiB0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgPyBzZWxmIDogdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiBnbG9iYWw7XG59KSgpO1xuXG5jb25zdCBpc0NvbnRleHREZWZpbmVkID0gKGNvbnRleHQpID0+ICFpc1VuZGVmaW5lZChjb250ZXh0KSAmJiBjb250ZXh0ICE9PSBfZ2xvYmFsO1xuXG4vKipcbiAqIEFjY2VwdHMgdmFyYXJncyBleHBlY3RpbmcgZWFjaCBhcmd1bWVudCB0byBiZSBhbiBvYmplY3QsIHRoZW5cbiAqIGltbXV0YWJseSBtZXJnZXMgdGhlIHByb3BlcnRpZXMgb2YgZWFjaCBvYmplY3QgYW5kIHJldHVybnMgcmVzdWx0LlxuICpcbiAqIFdoZW4gbXVsdGlwbGUgb2JqZWN0cyBjb250YWluIHRoZSBzYW1lIGtleSB0aGUgbGF0ZXIgb2JqZWN0IGluXG4gKiB0aGUgYXJndW1lbnRzIGxpc3Qgd2lsbCB0YWtlIHByZWNlZGVuY2UuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogY29uc3QgcmVzdWx0ID0gbWVyZ2Uoe2ZvbzogMTIzfSwge2ZvbzogNDU2fSk7XG4gKiBjb25zb2xlLmxvZyhyZXN1bHQuZm9vKTsgLy8gb3V0cHV0cyA0NTZcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmoxIE9iamVjdCB0byBtZXJnZVxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJlc3VsdCBvZiBhbGwgbWVyZ2UgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBtZXJnZSguLi5vYmpzKSB7XG4gIGNvbnN0IHsgY2FzZWxlc3MsIHNraXBVbmRlZmluZWQgfSA9IChpc0NvbnRleHREZWZpbmVkKHRoaXMpICYmIHRoaXMpIHx8IHt9O1xuICBjb25zdCByZXN1bHQgPSB7fTtcbiAgY29uc3QgYXNzaWduVmFsdWUgPSAodmFsLCBrZXkpID0+IHtcbiAgICAvLyBTa2lwIGRhbmdlcm91cyBwcm9wZXJ0eSBuYW1lcyB0byBwcmV2ZW50IHByb3RvdHlwZSBwb2xsdXRpb25cbiAgICBpZiAoa2V5ID09PSAnX19wcm90b19fJyB8fCBrZXkgPT09ICdjb25zdHJ1Y3RvcicgfHwga2V5ID09PSAncHJvdG90eXBlJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGZpbmRLZXkgbG93ZXJjYXNlcyB0aGUga2V5LCBzbyBjYXNlbGVzcyBsb29rdXAgb25seSBhcHBsaWVzIHRvIHN0cmluZ3Mg4oCUXG4gICAgLy8gc3ltYm9sIGtleXMgYXJlIGlkZW50aXR5LW1hdGNoZWQuXG4gICAgY29uc3QgdGFyZ2V0S2V5ID0gKGNhc2VsZXNzICYmIHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnICYmIGZpbmRLZXkocmVzdWx0LCBrZXkpKSB8fCBrZXk7XG4gICAgLy8gUmVhZCB2aWEgb3duLXByb3Agb25seSDigJQgYSBiYXJlIGByZXN1bHRbdGFyZ2V0S2V5XWAgd2Fsa3MgdGhlIHByb3RvdHlwZVxuICAgIC8vIGNoYWluLCBzbyBhIHBvbGx1dGVkIE9iamVjdC5wcm90b3R5cGUgdmFsdWUgY291bGQgc3VyZmFjZSBoZXJlIGFuZCBnZXRcbiAgICAvLyBjb3BpZWQgaW50byB0aGUgbWVyZ2VkIHJlc3VsdC5cbiAgICBjb25zdCBleGlzdGluZyA9IGhhc093blByb3BlcnR5KHJlc3VsdCwgdGFyZ2V0S2V5KSA/IHJlc3VsdFt0YXJnZXRLZXldIDogdW5kZWZpbmVkO1xuICAgIGlmIChpc1BsYWluT2JqZWN0KGV4aXN0aW5nKSAmJiBpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gbWVyZ2UoZXhpc3RpbmcsIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gbWVyZ2Uoe30sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc0FycmF5KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gdmFsLnNsaWNlKCk7XG4gICAgfSBlbHNlIGlmICghc2tpcFVuZGVmaW5lZCB8fCAhaXNVbmRlZmluZWQodmFsKSkge1xuICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSB2YWw7XG4gICAgfVxuICB9O1xuXG4gIGZvciAobGV0IGkgPSAwLCBsID0gb2Jqcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBjb25zdCBzb3VyY2UgPSBvYmpzW2ldO1xuICAgIGlmICghc291cmNlIHx8IGlzQnVmZmVyKHNvdXJjZSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGZvckVhY2goc291cmNlLCBhc3NpZ25WYWx1ZSk7XG5cbiAgICBpZiAodHlwZW9mIHNvdXJjZSAhPT0gJ29iamVjdCcgfHwgaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpO1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgc3ltYm9scy5sZW5ndGg7IGorKykge1xuICAgICAgY29uc3Qgc3ltYm9sID0gc3ltYm9sc1tqXTtcbiAgICAgIGlmIChwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwgc3ltYm9sKSkge1xuICAgICAgICBhc3NpZ25WYWx1ZShzb3VyY2Vbc3ltYm9sXSwgc3ltYm9sKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBFeHRlbmRzIG9iamVjdCBhIGJ5IG11dGFibHkgYWRkaW5nIHRvIGl0IHRoZSBwcm9wZXJ0aWVzIG9mIG9iamVjdCBiLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBhIFRoZSBvYmplY3QgdG8gYmUgZXh0ZW5kZWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBiIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb21cbiAqIEBwYXJhbSB7T2JqZWN0fSB0aGlzQXJnIFRoZSBvYmplY3QgdG8gYmluZCBmdW5jdGlvbiB0b1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuYWxsT3duS2V5c11cbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSByZXN1bHRpbmcgdmFsdWUgb2Ygb2JqZWN0IGFcbiAqL1xuY29uc3QgZXh0ZW5kID0gKGEsIGIsIHRoaXNBcmcsIHsgYWxsT3duS2V5cyB9ID0ge30pID0+IHtcbiAgZm9yRWFjaChcbiAgICBiLFxuICAgICh2YWwsIGtleSkgPT4ge1xuICAgICAgaWYgKHRoaXNBcmcgJiYgaXNGdW5jdGlvbih2YWwpKSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLCBrZXksIHtcbiAgICAgICAgICAvLyBOdWxsLXByb3RvIGRlc2NyaXB0b3Igc28gYSBwb2xsdXRlZCBPYmplY3QucHJvdG90eXBlLmdldCBjYW5ub3RcbiAgICAgICAgICAvLyBoaWphY2sgZGVmaW5lUHJvcGVydHkncyBhY2Nlc3Nvci12cy1kYXRhIHJlc29sdXRpb24uXG4gICAgICAgICAgX19wcm90b19fOiBudWxsLFxuICAgICAgICAgIHZhbHVlOiBiaW5kKHZhbCwgdGhpc0FyZyksXG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsIGtleSwge1xuICAgICAgICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAgICAgICB2YWx1ZTogdmFsLFxuICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHsgYWxsT3duS2V5cyB9XG4gICk7XG4gIHJldHVybiBhO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYnl0ZSBvcmRlciBtYXJrZXIuIFRoaXMgY2F0Y2hlcyBFRiBCQiBCRiAodGhlIFVURi04IEJPTSlcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCB3aXRoIEJPTVxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IGNvbnRlbnQgdmFsdWUgd2l0aG91dCBCT01cbiAqL1xuY29uc3Qgc3RyaXBCT00gPSAoY29udGVudCkgPT4ge1xuICBpZiAoY29udGVudC5jaGFyQ29kZUF0KDApID09PSAweGZlZmYpIHtcbiAgICBjb250ZW50ID0gY29udGVudC5zbGljZSgxKTtcbiAgfVxuICByZXR1cm4gY29udGVudDtcbn07XG5cbi8qKlxuICogSW5oZXJpdCB0aGUgcHJvdG90eXBlIG1ldGhvZHMgZnJvbSBvbmUgY29uc3RydWN0b3IgaW50byBhbm90aGVyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtmdW5jdGlvbn0gc3VwZXJDb25zdHJ1Y3RvclxuICogQHBhcmFtIHtvYmplY3R9IFtwcm9wc11cbiAqIEBwYXJhbSB7b2JqZWN0fSBbZGVzY3JpcHRvcnNdXG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmNvbnN0IGluaGVyaXRzID0gKGNvbnN0cnVjdG9yLCBzdXBlckNvbnN0cnVjdG9yLCBwcm9wcywgZGVzY3JpcHRvcnMpID0+IHtcbiAgY29uc3RydWN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNvbnN0cnVjdG9yLnByb3RvdHlwZSwgZGVzY3JpcHRvcnMpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29uc3RydWN0b3IucHJvdG90eXBlLCAnY29uc3RydWN0b3InLCB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIHZhbHVlOiBjb25zdHJ1Y3RvcixcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gIH0pO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29uc3RydWN0b3IsICdzdXBlcicsIHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgdmFsdWU6IHN1cGVyQ29uc3RydWN0b3IucHJvdG90eXBlLFxuICB9KTtcbiAgcHJvcHMgJiYgT2JqZWN0LmFzc2lnbihjb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3BzKTtcbn07XG5cbi8qKlxuICogUmVzb2x2ZSBvYmplY3Qgd2l0aCBkZWVwIHByb3RvdHlwZSBjaGFpbiB0byBhIGZsYXQgb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlT2JqIHNvdXJjZSBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBbZGVzdE9ial1cbiAqIEBwYXJhbSB7RnVuY3Rpb258Qm9vbGVhbn0gW2ZpbHRlcl1cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcm9wRmlsdGVyXVxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKi9cbmNvbnN0IHRvRmxhdE9iamVjdCA9IChzb3VyY2VPYmosIGRlc3RPYmosIGZpbHRlciwgcHJvcEZpbHRlcikgPT4ge1xuICBsZXQgcHJvcHM7XG4gIGxldCBpO1xuICBsZXQgcHJvcDtcbiAgY29uc3QgbWVyZ2VkID0ge307XG5cbiAgZGVzdE9iaiA9IGRlc3RPYmogfHwge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lcS1udWxsLGVxZXFlcVxuICBpZiAoc291cmNlT2JqID09IG51bGwpIHJldHVybiBkZXN0T2JqO1xuXG4gIGRvIHtcbiAgICBwcm9wcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZU9iaik7XG4gICAgaSA9IHByb3BzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tID4gMCkge1xuICAgICAgcHJvcCA9IHByb3BzW2ldO1xuICAgICAgaWYgKCghcHJvcEZpbHRlciB8fCBwcm9wRmlsdGVyKHByb3AsIHNvdXJjZU9iaiwgZGVzdE9iaikpICYmICFtZXJnZWRbcHJvcF0pIHtcbiAgICAgICAgZGVzdE9ialtwcm9wXSA9IHNvdXJjZU9ialtwcm9wXTtcbiAgICAgICAgbWVyZ2VkW3Byb3BdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgc291cmNlT2JqID0gZmlsdGVyICE9PSBmYWxzZSAmJiBnZXRQcm90b3R5cGVPZihzb3VyY2VPYmopO1xuICB9IHdoaWxlIChzb3VyY2VPYmogJiYgKCFmaWx0ZXIgfHwgZmlsdGVyKHNvdXJjZU9iaiwgZGVzdE9iaikpICYmIHNvdXJjZU9iaiAhPT0gT2JqZWN0LnByb3RvdHlwZSk7XG5cbiAgcmV0dXJuIGRlc3RPYmo7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciBhIHN0cmluZyBlbmRzIHdpdGggdGhlIGNoYXJhY3RlcnMgb2YgYSBzcGVjaWZpZWQgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHBhcmFtIHtTdHJpbmd9IHNlYXJjaFN0cmluZ1xuICogQHBhcmFtIHtOdW1iZXJ9IFtwb3NpdGlvbj0gMF1cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuY29uc3QgZW5kc1dpdGggPSAoc3RyLCBzZWFyY2hTdHJpbmcsIHBvc2l0aW9uKSA9PiB7XG4gIHN0ciA9IFN0cmluZyhzdHIpO1xuICBpZiAocG9zaXRpb24gPT09IHVuZGVmaW5lZCB8fCBwb3NpdGlvbiA+IHN0ci5sZW5ndGgpIHtcbiAgICBwb3NpdGlvbiA9IHN0ci5sZW5ndGg7XG4gIH1cbiAgcG9zaXRpb24gLT0gc2VhcmNoU3RyaW5nLmxlbmd0aDtcbiAgY29uc3QgbGFzdEluZGV4ID0gc3RyLmluZGV4T2Yoc2VhcmNoU3RyaW5nLCBwb3NpdGlvbik7XG4gIHJldHVybiBsYXN0SW5kZXggIT09IC0xICYmIGxhc3RJbmRleCA9PT0gcG9zaXRpb247XG59O1xuXG4vKipcbiAqIFJldHVybnMgbmV3IGFycmF5IGZyb20gYXJyYXkgbGlrZSBvYmplY3Qgb3IgbnVsbCBpZiBmYWlsZWRcbiAqXG4gKiBAcGFyYW0geyp9IFt0aGluZ11cbiAqXG4gKiBAcmV0dXJucyB7P0FycmF5fVxuICovXG5jb25zdCB0b0FycmF5ID0gKHRoaW5nKSA9PiB7XG4gIGlmICghdGhpbmcpIHJldHVybiBudWxsO1xuICBpZiAoaXNBcnJheSh0aGluZykpIHJldHVybiB0aGluZztcbiAgbGV0IGkgPSB0aGluZy5sZW5ndGg7XG4gIGlmICghaXNOdW1iZXIoaSkpIHJldHVybiBudWxsO1xuICBjb25zdCBhcnIgPSBuZXcgQXJyYXkoaSk7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgYXJyW2ldID0gdGhpbmdbaV07XG4gIH1cbiAgcmV0dXJuIGFycjtcbn07XG5cbi8qKlxuICogQ2hlY2tpbmcgaWYgdGhlIFVpbnQ4QXJyYXkgZXhpc3RzIGFuZCBpZiBpdCBkb2VzLCBpdCByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBjaGVja3MgaWYgdGhlXG4gKiB0aGluZyBwYXNzZWQgaW4gaXMgYW4gaW5zdGFuY2Ugb2YgVWludDhBcnJheVxuICpcbiAqIEBwYXJhbSB7VHlwZWRBcnJheX1cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5jb25zdCBpc1R5cGVkQXJyYXkgPSAoKFR5cGVkQXJyYXkpID0+IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuICh0aGluZykgPT4ge1xuICAgIHJldHVybiBUeXBlZEFycmF5ICYmIHRoaW5nIGluc3RhbmNlb2YgVHlwZWRBcnJheTtcbiAgfTtcbn0pKHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJyAmJiBnZXRQcm90b3R5cGVPZihVaW50OEFycmF5KSk7XG5cbi8qKlxuICogRm9yIGVhY2ggZW50cnkgaW4gdGhlIG9iamVjdCwgY2FsbCB0aGUgZnVuY3Rpb24gd2l0aCB0aGUga2V5IGFuZCB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdDxhbnksIGFueT59IG9iaiAtIFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gLSBUaGUgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBlbnRyeS5cbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuY29uc3QgZm9yRWFjaEVudHJ5ID0gKG9iaiwgZm4pID0+IHtcbiAgY29uc3QgZ2VuZXJhdG9yID0gb2JqICYmIG9ialtpdGVyYXRvcl07XG5cbiAgY29uc3QgX2l0ZXJhdG9yID0gZ2VuZXJhdG9yLmNhbGwob2JqKTtcblxuICBsZXQgcmVzdWx0O1xuXG4gIHdoaWxlICgocmVzdWx0ID0gX2l0ZXJhdG9yLm5leHQoKSkgJiYgIXJlc3VsdC5kb25lKSB7XG4gICAgY29uc3QgcGFpciA9IHJlc3VsdC52YWx1ZTtcbiAgICBmbi5jYWxsKG9iaiwgcGFpclswXSwgcGFpclsxXSk7XG4gIH1cbn07XG5cbi8qKlxuICogSXQgdGFrZXMgYSByZWd1bGFyIGV4cHJlc3Npb24gYW5kIGEgc3RyaW5nLCBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiBhbGwgdGhlIG1hdGNoZXNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVnRXhwIC0gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCBhZ2FpbnN0LlxuICogQHBhcmFtIHtzdHJpbmd9IHN0ciAtIFRoZSBzdHJpbmcgdG8gc2VhcmNoLlxuICpcbiAqIEByZXR1cm5zIHtBcnJheTxib29sZWFuPn1cbiAqL1xuY29uc3QgbWF0Y2hBbGwgPSAocmVnRXhwLCBzdHIpID0+IHtcbiAgbGV0IG1hdGNoZXM7XG4gIGNvbnN0IGFyciA9IFtdO1xuXG4gIHdoaWxlICgobWF0Y2hlcyA9IHJlZ0V4cC5leGVjKHN0cikpICE9PSBudWxsKSB7XG4gICAgYXJyLnB1c2gobWF0Y2hlcyk7XG4gIH1cblxuICByZXR1cm4gYXJyO1xufTtcblxuLyogQ2hlY2tpbmcgaWYgdGhlIGtpbmRPZlRlc3QgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gcGFzc2VkIGFuIEhUTUxGb3JtRWxlbWVudC4gKi9cbmNvbnN0IGlzSFRNTEZvcm0gPSBraW5kT2ZUZXN0KCdIVE1MRm9ybUVsZW1lbnQnKTtcblxuY29uc3QgdG9DYW1lbENhc2UgPSAoc3RyKSA9PiB7XG4gIHJldHVybiBzdHIudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bLV9cXHNdKFthLXpcXGRdKShcXHcqKS9nLCBmdW5jdGlvbiByZXBsYWNlcihtLCBwMSwgcDIpIHtcbiAgICByZXR1cm4gcDEudG9VcHBlckNhc2UoKSArIHAyO1xuICB9KTtcbn07XG5cbi8qIENyZWF0aW5nIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGNoZWNrIGlmIGFuIG9iamVjdCBoYXMgYSBwcm9wZXJ0eS4gKi9cbmNvbnN0IGhhc093blByb3BlcnR5ID0gKFxuICAoeyBoYXNPd25Qcm9wZXJ0eSB9KSA9PlxuICAob2JqLCBwcm9wKSA9PlxuICAgIGhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKVxuKShPYmplY3QucHJvdG90eXBlKTtcblxuY29uc3QgeyBwcm9wZXJ0eUlzRW51bWVyYWJsZSB9ID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFJlZ0V4cCBvYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgUmVnRXhwIG9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzUmVnRXhwID0ga2luZE9mVGVzdCgnUmVnRXhwJyk7XG5cbmNvbnN0IHJlZHVjZURlc2NyaXB0b3JzID0gKG9iaiwgcmVkdWNlcikgPT4ge1xuICBjb25zdCBkZXNjcmlwdG9ycyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG9iaik7XG4gIGNvbnN0IHJlZHVjZWREZXNjcmlwdG9ycyA9IHt9O1xuXG4gIGZvckVhY2goZGVzY3JpcHRvcnMsIChkZXNjcmlwdG9yLCBuYW1lKSA9PiB7XG4gICAgbGV0IHJldDtcbiAgICBpZiAoKHJldCA9IHJlZHVjZXIoZGVzY3JpcHRvciwgbmFtZSwgb2JqKSkgIT09IGZhbHNlKSB7XG4gICAgICByZWR1Y2VkRGVzY3JpcHRvcnNbbmFtZV0gPSByZXQgfHwgZGVzY3JpcHRvcjtcbiAgICB9XG4gIH0pO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG9iaiwgcmVkdWNlZERlc2NyaXB0b3JzKTtcbn07XG5cbi8qKlxuICogTWFrZXMgYWxsIG1ldGhvZHMgcmVhZC1vbmx5XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKi9cblxuY29uc3QgZnJlZXplTWV0aG9kcyA9IChvYmopID0+IHtcbiAgcmVkdWNlRGVzY3JpcHRvcnMob2JqLCAoZGVzY3JpcHRvciwgbmFtZSkgPT4ge1xuICAgIC8vIHNraXAgcmVzdHJpY3RlZCBwcm9wcyBpbiBzdHJpY3QgbW9kZVxuICAgIGlmIChpc0Z1bmN0aW9uKG9iaikgJiYgWydhcmd1bWVudHMnLCAnY2FsbGVyJywgJ2NhbGxlZSddLmluY2x1ZGVzKG5hbWUpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWUgPSBvYmpbbmFtZV07XG5cbiAgICBpZiAoIWlzRnVuY3Rpb24odmFsdWUpKSByZXR1cm47XG5cbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBmYWxzZTtcblxuICAgIGlmICgnd3JpdGFibGUnIGluIGRlc2NyaXB0b3IpIHtcbiAgICAgIGRlc2NyaXB0b3Iud3JpdGFibGUgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWRlc2NyaXB0b3Iuc2V0KSB7XG4gICAgICBkZXNjcmlwdG9yLnNldCA9ICgpID0+IHtcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJDYW4gbm90IHJld3JpdGUgcmVhZC1vbmx5IG1ldGhvZCAnXCIgKyBuYW1lICsgXCInXCIpO1xuICAgICAgfTtcbiAgICB9XG4gIH0pO1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBhcnJheSBvciBhIGRlbGltaXRlZCBzdHJpbmcgaW50byBhbiBvYmplY3Qgc2V0IHdpdGggdmFsdWVzIGFzIGtleXMgYW5kIHRydWUgYXMgdmFsdWVzLlxuICogVXNlZnVsIGZvciBmYXN0IG1lbWJlcnNoaXAgY2hlY2tzLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBhcnJheU9yU3RyaW5nIC0gVGhlIGFycmF5IG9yIHN0cmluZyB0byBjb252ZXJ0LlxuICogQHBhcmFtIHtzdHJpbmd9IGRlbGltaXRlciAtIFRoZSBkZWxpbWl0ZXIgdG8gdXNlIGlmIGlucHV0IGlzIGEgc3RyaW5nLlxuICogQHJldHVybnMge09iamVjdH0gQW4gb2JqZWN0IHdpdGgga2V5cyBmcm9tIHRoZSBhcnJheSBvciBzdHJpbmcsIHZhbHVlcyBzZXQgdG8gdHJ1ZS5cbiAqL1xuY29uc3QgdG9PYmplY3RTZXQgPSAoYXJyYXlPclN0cmluZywgZGVsaW1pdGVyKSA9PiB7XG4gIGNvbnN0IG9iaiA9IHt9O1xuXG4gIGNvbnN0IGRlZmluZSA9IChhcnIpID0+IHtcbiAgICBhcnIuZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICAgIG9ialt2YWx1ZV0gPSB0cnVlO1xuICAgIH0pO1xuICB9O1xuXG4gIGlzQXJyYXkoYXJyYXlPclN0cmluZykgPyBkZWZpbmUoYXJyYXlPclN0cmluZykgOiBkZWZpbmUoU3RyaW5nKGFycmF5T3JTdHJpbmcpLnNwbGl0KGRlbGltaXRlcikpO1xuXG4gIHJldHVybiBvYmo7XG59O1xuXG5jb25zdCBub29wID0gKCkgPT4ge307XG5cbmNvbnN0IHRvRmluaXRlTnVtYmVyID0gKHZhbHVlLCBkZWZhdWx0VmFsdWUpID0+IHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgTnVtYmVyLmlzRmluaXRlKCh2YWx1ZSA9ICt2YWx1ZSkpID8gdmFsdWUgOiBkZWZhdWx0VmFsdWU7XG59O1xuXG4vKipcbiAqIElmIHRoZSB0aGluZyBpcyBhIEZvcm1EYXRhIG9iamVjdCwgcmV0dXJuIHRydWUsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXG4gKlxuICogQHBhcmFtIHt1bmtub3dufSB0aGluZyAtIFRoZSB0aGluZyB0byBjaGVjay5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNTcGVjQ29tcGxpYW50Rm9ybSh0aGluZykge1xuICByZXR1cm4gISEoXG4gICAgdGhpbmcgJiZcbiAgICBpc0Z1bmN0aW9uKHRoaW5nLmFwcGVuZCkgJiZcbiAgICB0aGluZ1t0b1N0cmluZ1RhZ10gPT09ICdGb3JtRGF0YScgJiZcbiAgICB0aGluZ1tpdGVyYXRvcl1cbiAgKTtcbn1cblxuLyoqXG4gKiBSZWN1cnNpdmVseSBjb252ZXJ0cyBhbiBvYmplY3QgdG8gYSBKU09OLWNvbXBhdGlibGUgb2JqZWN0LCBoYW5kbGluZyBjaXJjdWxhciByZWZlcmVuY2VzIGFuZCBCdWZmZXJzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogLSBUaGUgb2JqZWN0IHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgSlNPTi1jb21wYXRpYmxlIG9iamVjdC5cbiAqL1xuY29uc3QgdG9KU09OT2JqZWN0ID0gKG9iaikgPT4ge1xuICBjb25zdCB2aXNpdGVkID0gbmV3IFdlYWtTZXQoKTtcblxuICBjb25zdCB2aXNpdCA9IChzb3VyY2UpID0+IHtcbiAgICBpZiAoaXNPYmplY3Qoc291cmNlKSkge1xuICAgICAgaWYgKHZpc2l0ZWQuaGFzKHNvdXJjZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvL0J1ZmZlciBjaGVja1xuICAgICAgaWYgKGlzQnVmZmVyKHNvdXJjZSkpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCEoJ3RvSlNPTicgaW4gc291cmNlKSkge1xuICAgICAgICAvLyBhZGQtb24gZGVzY2VudCAvIGRlbGV0ZS1vbi1hc2NlbnQ6IHByZXNlcnZlcyBwYXRoIHNlbWFudGljcywgc28gREFHIG5vZGVzIHNlcmlhbGlzZSBhdCBldmVyeSBvY2N1cnJlbmNlIChzZWUgIzcyMzApLlxuICAgICAgICB2aXNpdGVkLmFkZChzb3VyY2UpO1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBpc0FycmF5KHNvdXJjZSkgPyBbXSA6IHt9O1xuXG4gICAgICAgIGZvckVhY2goc291cmNlLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlZHVjZWRWYWx1ZSA9IHZpc2l0KHZhbHVlKTtcbiAgICAgICAgICAhaXNVbmRlZmluZWQocmVkdWNlZFZhbHVlKSAmJiAodGFyZ2V0W2tleV0gPSByZWR1Y2VkVmFsdWUpO1xuICAgICAgICB9KTtcblxuICAgICAgICB2aXNpdGVkLmRlbGV0ZShzb3VyY2UpO1xuXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfTtcblxuICByZXR1cm4gdmlzaXQob2JqKTtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiBhIHZhbHVlIGlzIGFuIGFzeW5jIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7Kn0gdGhpbmcgLSBUaGUgdmFsdWUgdG8gdGVzdC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIGFzeW5jIGZ1bmN0aW9uLCBvdGhlcndpc2UgZmFsc2UuXG4gKi9cbmNvbnN0IGlzQXN5bmNGbiA9IGtpbmRPZlRlc3QoJ0FzeW5jRnVuY3Rpb24nKTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIGEgdmFsdWUgaXMgdGhlbmFibGUgKGhhcyB0aGVuIGFuZCBjYXRjaCBtZXRob2RzKS5cbiAqXG4gKiBAcGFyYW0geyp9IHRoaW5nIC0gVGhlIHZhbHVlIHRvIHRlc3QuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyB0aGVuYWJsZSwgb3RoZXJ3aXNlIGZhbHNlLlxuICovXG5jb25zdCBpc1RoZW5hYmxlID0gKHRoaW5nKSA9PlxuICB0aGluZyAmJlxuICAoaXNPYmplY3QodGhpbmcpIHx8IGlzRnVuY3Rpb24odGhpbmcpKSAmJlxuICBpc0Z1bmN0aW9uKHRoaW5nLnRoZW4pICYmXG4gIGlzRnVuY3Rpb24odGhpbmcuY2F0Y2gpO1xuXG4vLyBvcmlnaW5hbCBjb2RlXG4vLyBodHRwczovL2dpdGh1Yi5jb20vRGlnaXRhbEJyYWluSlMvQXhpb3NQcm9taXNlL2Jsb2IvMTZkZWFiMTM3MTBlYzA5Nzc5OTIyMTMxZjNmYTU5NTQzMjBmODNhYi9saWIvdXRpbHMuanMjTDExLUwzNFxuXG4vKipcbiAqIFByb3ZpZGVzIGEgY3Jvc3MtcGxhdGZvcm0gc2V0SW1tZWRpYXRlIGltcGxlbWVudGF0aW9uLlxuICogVXNlcyBuYXRpdmUgc2V0SW1tZWRpYXRlIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGZhbGxzIGJhY2sgdG8gcG9zdE1lc3NhZ2Ugb3Igc2V0VGltZW91dC5cbiAqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHNldEltbWVkaWF0ZVN1cHBvcnRlZCAtIFdoZXRoZXIgc2V0SW1tZWRpYXRlIGlzIHN1cHBvcnRlZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gcG9zdE1lc3NhZ2VTdXBwb3J0ZWQgLSBXaGV0aGVyIHBvc3RNZXNzYWdlIGlzIHN1cHBvcnRlZC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gQSBmdW5jdGlvbiB0byBzY2hlZHVsZSBhIGNhbGxiYWNrIGFzeW5jaHJvbm91c2x5LlxuICovXG5jb25zdCBfc2V0SW1tZWRpYXRlID0gKChzZXRJbW1lZGlhdGVTdXBwb3J0ZWQsIHBvc3RNZXNzYWdlU3VwcG9ydGVkKSA9PiB7XG4gIGlmIChzZXRJbW1lZGlhdGVTdXBwb3J0ZWQpIHtcbiAgICByZXR1cm4gc2V0SW1tZWRpYXRlO1xuICB9XG5cbiAgcmV0dXJuIHBvc3RNZXNzYWdlU3VwcG9ydGVkXG4gICAgPyAoKHRva2VuLCBjYWxsYmFja3MpID0+IHtcbiAgICAgICAgX2dsb2JhbC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAgICdtZXNzYWdlJyxcbiAgICAgICAgICAoeyBzb3VyY2UsIGRhdGEgfSkgPT4ge1xuICAgICAgICAgICAgaWYgKHNvdXJjZSA9PT0gX2dsb2JhbCAmJiBkYXRhID09PSB0b2tlbikge1xuICAgICAgICAgICAgICBjYWxsYmFja3MubGVuZ3RoICYmIGNhbGxiYWNrcy5zaGlmdCgpKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBmYWxzZVxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiAoY2IpID0+IHtcbiAgICAgICAgICBjYWxsYmFja3MucHVzaChjYik7XG4gICAgICAgICAgX2dsb2JhbC5wb3N0TWVzc2FnZSh0b2tlbiwgJyonKTtcbiAgICAgICAgfTtcbiAgICAgIH0pKGBheGlvc0Ake01hdGgucmFuZG9tKCl9YCwgW10pXG4gICAgOiAoY2IpID0+IHNldFRpbWVvdXQoY2IpO1xufSkodHlwZW9mIHNldEltbWVkaWF0ZSA9PT0gJ2Z1bmN0aW9uJywgaXNGdW5jdGlvbihfZ2xvYmFsLnBvc3RNZXNzYWdlKSk7XG5cbi8qKlxuICogU2NoZWR1bGVzIGEgbWljcm90YXNrIG9yIGFzeW5jaHJvbm91cyBjYWxsYmFjayBhcyBzb29uIGFzIHBvc3NpYmxlLlxuICogVXNlcyBxdWV1ZU1pY3JvdGFzayBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBmYWxscyBiYWNrIHRvIHByb2Nlc3MubmV4dFRpY2sgb3IgX3NldEltbWVkaWF0ZS5cbiAqXG4gKiBAdHlwZSB7RnVuY3Rpb259XG4gKi9cbmNvbnN0IGFzYXAgPVxuICB0eXBlb2YgcXVldWVNaWNyb3Rhc2sgIT09ICd1bmRlZmluZWQnXG4gICAgPyBxdWV1ZU1pY3JvdGFzay5iaW5kKF9nbG9iYWwpXG4gICAgOiAodHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIHByb2Nlc3MubmV4dFRpY2spIHx8IF9zZXRJbW1lZGlhdGU7XG5cbi8vICoqKioqKioqKioqKioqKioqKioqKlxuXG5jb25zdCBpc0l0ZXJhYmxlID0gKHRoaW5nKSA9PiB0aGluZyAhPSBudWxsICYmIGlzRnVuY3Rpb24odGhpbmdbaXRlcmF0b3JdKTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBpc0FycmF5LFxuICBpc0FycmF5QnVmZmVyLFxuICBpc0J1ZmZlcixcbiAgaXNGb3JtRGF0YSxcbiAgaXNBcnJheUJ1ZmZlclZpZXcsXG4gIGlzU3RyaW5nLFxuICBpc051bWJlcixcbiAgaXNCb29sZWFuLFxuICBpc09iamVjdCxcbiAgaXNQbGFpbk9iamVjdCxcbiAgaXNFbXB0eU9iamVjdCxcbiAgaXNSZWFkYWJsZVN0cmVhbSxcbiAgaXNSZXF1ZXN0LFxuICBpc1Jlc3BvbnNlLFxuICBpc0hlYWRlcnMsXG4gIGlzVW5kZWZpbmVkLFxuICBpc0RhdGUsXG4gIGlzRmlsZSxcbiAgaXNSZWFjdE5hdGl2ZUJsb2IsXG4gIGlzUmVhY3ROYXRpdmUsXG4gIGlzQmxvYixcbiAgaXNSZWdFeHAsXG4gIGlzRnVuY3Rpb24sXG4gIGlzU3RyZWFtLFxuICBpc1VSTFNlYXJjaFBhcmFtcyxcbiAgaXNUeXBlZEFycmF5LFxuICBpc0ZpbGVMaXN0LFxuICBmb3JFYWNoLFxuICBtZXJnZSxcbiAgZXh0ZW5kLFxuICB0cmltLFxuICBzdHJpcEJPTSxcbiAgaW5oZXJpdHMsXG4gIHRvRmxhdE9iamVjdCxcbiAga2luZE9mLFxuICBraW5kT2ZUZXN0LFxuICBlbmRzV2l0aCxcbiAgdG9BcnJheSxcbiAgZm9yRWFjaEVudHJ5LFxuICBtYXRjaEFsbCxcbiAgaXNIVE1MRm9ybSxcbiAgaGFzT3duUHJvcGVydHksXG4gIGhhc093blByb3A6IGhhc093blByb3BlcnR5LCAvLyBhbiBhbGlhcyB0byBhdm9pZCBFU0xpbnQgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIGRldGVjdGlvblxuICByZWR1Y2VEZXNjcmlwdG9ycyxcbiAgZnJlZXplTWV0aG9kcyxcbiAgdG9PYmplY3RTZXQsXG4gIHRvQ2FtZWxDYXNlLFxuICBub29wLFxuICB0b0Zpbml0ZU51bWJlcixcbiAgZmluZEtleSxcbiAgZ2xvYmFsOiBfZ2xvYmFsLFxuICBpc0NvbnRleHREZWZpbmVkLFxuICBpc1NwZWNDb21wbGlhbnRGb3JtLFxuICB0b0pTT05PYmplY3QsXG4gIGlzQXN5bmNGbixcbiAgaXNUaGVuYWJsZSxcbiAgc2V0SW1tZWRpYXRlOiBfc2V0SW1tZWRpYXRlLFxuICBhc2FwLFxuICBpc0l0ZXJhYmxlLFxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcblxuLy8gUmF3QXhpb3NIZWFkZXJzIHdob3NlIGR1cGxpY2F0ZXMgYXJlIGlnbm9yZWQgYnkgbm9kZVxuLy8gYy5mLiBodHRwczovL25vZGVqcy5vcmcvYXBpL2h0dHAuaHRtbCNodHRwX21lc3NhZ2VfaGVhZGVyc1xuY29uc3QgaWdub3JlRHVwbGljYXRlT2YgPSB1dGlscy50b09iamVjdFNldChbXG4gICdhZ2UnLFxuICAnYXV0aG9yaXphdGlvbicsXG4gICdjb250ZW50LWxlbmd0aCcsXG4gICdjb250ZW50LXR5cGUnLFxuICAnZXRhZycsXG4gICdleHBpcmVzJyxcbiAgJ2Zyb20nLFxuICAnaG9zdCcsXG4gICdpZi1tb2RpZmllZC1zaW5jZScsXG4gICdpZi11bm1vZGlmaWVkLXNpbmNlJyxcbiAgJ2xhc3QtbW9kaWZpZWQnLFxuICAnbG9jYXRpb24nLFxuICAnbWF4LWZvcndhcmRzJyxcbiAgJ3Byb3h5LWF1dGhvcml6YXRpb24nLFxuICAncmVmZXJlcicsXG4gICdyZXRyeS1hZnRlcicsXG4gICd1c2VyLWFnZW50Jyxcbl0pO1xuXG4vKipcbiAqIFBhcnNlIGhlYWRlcnMgaW50byBhbiBvYmplY3RcbiAqXG4gKiBgYGBcbiAqIERhdGU6IFdlZCwgMjcgQXVnIDIwMTQgMDg6NTg6NDkgR01UXG4gKiBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb25cbiAqIENvbm5lY3Rpb246IGtlZXAtYWxpdmVcbiAqIFRyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gcmF3SGVhZGVycyBIZWFkZXJzIG5lZWRpbmcgdG8gYmUgcGFyc2VkXG4gKlxuICogQHJldHVybnMge09iamVjdH0gSGVhZGVycyBwYXJzZWQgaW50byBhbiBvYmplY3RcbiAqL1xuZXhwb3J0IGRlZmF1bHQgKHJhd0hlYWRlcnMpID0+IHtcbiAgY29uc3QgcGFyc2VkID0ge307XG4gIGxldCBrZXk7XG4gIGxldCB2YWw7XG4gIGxldCBpO1xuXG4gIHJhd0hlYWRlcnMgJiZcbiAgICByYXdIZWFkZXJzLnNwbGl0KCdcXG4nKS5mb3JFYWNoKGZ1bmN0aW9uIHBhcnNlcihsaW5lKSB7XG4gICAgICBpID0gbGluZS5pbmRleE9mKCc6Jyk7XG4gICAgICBrZXkgPSBsaW5lLnN1YnN0cmluZygwLCBpKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIHZhbCA9IGxpbmUuc3Vic3RyaW5nKGkgKyAxKS50cmltKCk7XG5cbiAgICAgIGlmICgha2V5IHx8IChwYXJzZWRba2V5XSAmJiBpZ25vcmVEdXBsaWNhdGVPZltrZXldKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChrZXkgPT09ICdzZXQtY29va2llJykge1xuICAgICAgICBpZiAocGFyc2VkW2tleV0pIHtcbiAgICAgICAgICBwYXJzZWRba2V5XS5wdXNoKHZhbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGFyc2VkW2tleV0gPSBbdmFsXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyc2VkW2tleV0gPSBwYXJzZWRba2V5XSA/IHBhcnNlZFtrZXldICsgJywgJyArIHZhbCA6IHZhbDtcbiAgICAgIH1cbiAgICB9KTtcblxuICByZXR1cm4gcGFyc2VkO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcblxuZnVuY3Rpb24gdHJpbVNQb3JIVEFCKHN0cikge1xuICBsZXQgc3RhcnQgPSAwO1xuICBsZXQgZW5kID0gc3RyLmxlbmd0aDtcblxuICB3aGlsZSAoc3RhcnQgPCBlbmQpIHtcbiAgICBjb25zdCBjb2RlID0gc3RyLmNoYXJDb2RlQXQoc3RhcnQpO1xuXG4gICAgaWYgKGNvZGUgIT09IDB4MDkgJiYgY29kZSAhPT0gMHgyMCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgc3RhcnQgKz0gMTtcbiAgfVxuXG4gIHdoaWxlIChlbmQgPiBzdGFydCkge1xuICAgIGNvbnN0IGNvZGUgPSBzdHIuY2hhckNvZGVBdChlbmQgLSAxKTtcblxuICAgIGlmIChjb2RlICE9PSAweDA5ICYmIGNvZGUgIT09IDB4MjApIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGVuZCAtPSAxO1xuICB9XG5cbiAgcmV0dXJuIHN0YXJ0ID09PSAwICYmIGVuZCA9PT0gc3RyLmxlbmd0aCA/IHN0ciA6IHN0ci5zbGljZShzdGFydCwgZW5kKTtcbn1cblxuLy8gVGhlIGNvbnRyb2wtY29kZSByYW5nZXMgYXJlIGludGVudGlvbmFsOiBoZWFkZXIgc2FuaXRpemF0aW9uIHN0cmlwcyBDMC9ERUwgYnl0ZXMuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29udHJvbC1yZWdleFxuY29uc3QgSU5WQUxJRF9VTklDT0RFX0hFQURFUl9WQUxVRV9DSEFSUyA9IG5ldyBSZWdFeHAoJ1tcXFxcdTAwMDAtXFxcXHUwMDA4XFxcXHUwMDBhLVxcXFx1MDAxZlxcXFx1MDA3Zl0rJywgJ2cnKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4XG5jb25zdCBJTlZBTElEX0JZVEVfU1RSSU5HX0hFQURFUl9WQUxVRV9DSEFSUyA9IG5ldyBSZWdFeHAoJ1teXFxcXHUwMDA5XFxcXHUwMDIwLVxcXFx1MDA3ZVxcXFx1MDA4MC1cXFxcdTAwZmZdKycsICdnJyk7XG5cbmZ1bmN0aW9uIHNhbml0aXplVmFsdWUodmFsdWUsIGludmFsaWRDaGFycykge1xuICBpZiAodXRpbHMuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWUubWFwKChpdGVtKSA9PiBzYW5pdGl6ZVZhbHVlKGl0ZW0sIGludmFsaWRDaGFycykpO1xuICB9XG5cbiAgcmV0dXJuIHRyaW1TUG9ySFRBQihTdHJpbmcodmFsdWUpLnJlcGxhY2UoaW52YWxpZENoYXJzLCAnJykpO1xufVxuXG5leHBvcnQgY29uc3Qgc2FuaXRpemVIZWFkZXJWYWx1ZSA9ICh2YWx1ZSkgPT5cbiAgc2FuaXRpemVWYWx1ZSh2YWx1ZSwgSU5WQUxJRF9VTklDT0RFX0hFQURFUl9WQUxVRV9DSEFSUyk7XG5cbmV4cG9ydCBjb25zdCBzYW5pdGl6ZUJ5dGVTdHJpbmdIZWFkZXJWYWx1ZSA9ICh2YWx1ZSkgPT5cbiAgc2FuaXRpemVWYWx1ZSh2YWx1ZSwgSU5WQUxJRF9CWVRFX1NUUklOR19IRUFERVJfVkFMVUVfQ0hBUlMpO1xuXG5leHBvcnQgZnVuY3Rpb24gdG9CeXRlU3RyaW5nSGVhZGVyT2JqZWN0KGhlYWRlcnMpIHtcbiAgY29uc3QgYnl0ZVN0cmluZ0hlYWRlcnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gIHV0aWxzLmZvckVhY2goaGVhZGVycy50b0pTT04oKSwgKHZhbHVlLCBoZWFkZXIpID0+IHtcbiAgICBieXRlU3RyaW5nSGVhZGVyc1toZWFkZXJdID0gc2FuaXRpemVCeXRlU3RyaW5nSGVhZGVyVmFsdWUodmFsdWUpO1xuICB9KTtcblxuICByZXR1cm4gYnl0ZVN0cmluZ0hlYWRlcnM7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgcGFyc2VIZWFkZXJzIGZyb20gJy4uL2hlbHBlcnMvcGFyc2VIZWFkZXJzLmpzJztcbmltcG9ydCB7IHNhbml0aXplSGVhZGVyVmFsdWUgfSBmcm9tICcuLi9oZWxwZXJzL3Nhbml0aXplSGVhZGVyVmFsdWUuanMnO1xuXG5jb25zdCAkaW50ZXJuYWxzID0gU3ltYm9sKCdpbnRlcm5hbHMnKTtcblxuZnVuY3Rpb24gbm9ybWFsaXplSGVhZGVyKGhlYWRlcikge1xuICByZXR1cm4gaGVhZGVyICYmIFN0cmluZyhoZWFkZXIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVWYWx1ZSh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IGZhbHNlIHx8IHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gdXRpbHMuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5tYXAobm9ybWFsaXplVmFsdWUpIDogc2FuaXRpemVIZWFkZXJWYWx1ZShTdHJpbmcodmFsdWUpKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VUb2tlbnMoc3RyKSB7XG4gIGNvbnN0IHRva2VucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGNvbnN0IHRva2Vuc1JFID0gLyhbXlxccyw7PV0rKVxccyooPzo9XFxzKihbXiw7XSspKT8vZztcbiAgbGV0IG1hdGNoO1xuXG4gIHdoaWxlICgobWF0Y2ggPSB0b2tlbnNSRS5leGVjKHN0cikpKSB7XG4gICAgdG9rZW5zW21hdGNoWzFdXSA9IG1hdGNoWzJdO1xuICB9XG5cbiAgcmV0dXJuIHRva2Vucztcbn1cblxuY29uc3QgaXNWYWxpZEhlYWRlck5hbWUgPSAoc3RyKSA9PiAvXlstX2EtekEtWjAtOV5gfH4sISMkJSYnKisuXSskLy50ZXN0KHN0ci50cmltKCkpO1xuXG5mdW5jdGlvbiBtYXRjaEhlYWRlclZhbHVlKGNvbnRleHQsIHZhbHVlLCBoZWFkZXIsIGZpbHRlciwgaXNIZWFkZXJOYW1lRmlsdGVyKSB7XG4gIGlmICh1dGlscy5pc0Z1bmN0aW9uKGZpbHRlcikpIHtcbiAgICByZXR1cm4gZmlsdGVyLmNhbGwodGhpcywgdmFsdWUsIGhlYWRlcik7XG4gIH1cblxuICBpZiAoaXNIZWFkZXJOYW1lRmlsdGVyKSB7XG4gICAgdmFsdWUgPSBoZWFkZXI7XG4gIH1cblxuICBpZiAoIXV0aWxzLmlzU3RyaW5nKHZhbHVlKSkgcmV0dXJuO1xuXG4gIGlmICh1dGlscy5pc1N0cmluZyhmaWx0ZXIpKSB7XG4gICAgcmV0dXJuIHZhbHVlLmluZGV4T2YoZmlsdGVyKSAhPT0gLTE7XG4gIH1cblxuICBpZiAodXRpbHMuaXNSZWdFeHAoZmlsdGVyKSkge1xuICAgIHJldHVybiBmaWx0ZXIudGVzdCh2YWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZm9ybWF0SGVhZGVyKGhlYWRlcikge1xuICByZXR1cm4gaGVhZGVyXG4gICAgLnRyaW0oKVxuICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgLnJlcGxhY2UoLyhbYS16XFxkXSkoXFx3KikvZywgKHcsIGNoYXIsIHN0cikgPT4ge1xuICAgICAgcmV0dXJuIGNoYXIudG9VcHBlckNhc2UoKSArIHN0cjtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gYnVpbGRBY2Nlc3NvcnMob2JqLCBoZWFkZXIpIHtcbiAgY29uc3QgYWNjZXNzb3JOYW1lID0gdXRpbHMudG9DYW1lbENhc2UoJyAnICsgaGVhZGVyKTtcblxuICBbJ2dldCcsICdzZXQnLCAnaGFzJ10uZm9yRWFjaCgobWV0aG9kTmFtZSkgPT4ge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIG1ldGhvZE5hbWUgKyBhY2Nlc3Nvck5hbWUsIHtcbiAgICAgIC8vIE51bGwtcHJvdG8gZGVzY3JpcHRvciBzbyBhIHBvbGx1dGVkIE9iamVjdC5wcm90b3R5cGUuZ2V0IGNhbm5vdCB0dXJuXG4gICAgICAvLyB0aGlzIGRhdGEgZGVzY3JpcHRvciBpbnRvIGFuIGFjY2Vzc29yIGRlc2NyaXB0b3Igb24gdGhlIHdheSBpbi5cbiAgICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiAoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgICAgICByZXR1cm4gdGhpc1ttZXRob2ROYW1lXS5jYWxsKHRoaXMsIGhlYWRlciwgYXJnMSwgYXJnMiwgYXJnMyk7XG4gICAgICB9LFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIH0pO1xuICB9KTtcbn1cblxuY2xhc3MgQXhpb3NIZWFkZXJzIHtcbiAgY29uc3RydWN0b3IoaGVhZGVycykge1xuICAgIGhlYWRlcnMgJiYgdGhpcy5zZXQoaGVhZGVycyk7XG4gIH1cblxuICBzZXQoaGVhZGVyLCB2YWx1ZU9yUmV3cml0ZSwgcmV3cml0ZSkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gICAgZnVuY3Rpb24gc2V0SGVhZGVyKF92YWx1ZSwgX2hlYWRlciwgX3Jld3JpdGUpIHtcbiAgICAgIGNvbnN0IGxIZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoX2hlYWRlcik7XG5cbiAgICAgIGlmICghbEhlYWRlcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzLmZpbmRLZXkoc2VsZiwgbEhlYWRlcik7XG5cbiAgICAgIGlmIChcbiAgICAgICAgIWtleSB8fFxuICAgICAgICBzZWxmW2tleV0gPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICBfcmV3cml0ZSA9PT0gdHJ1ZSB8fFxuICAgICAgICAoX3Jld3JpdGUgPT09IHVuZGVmaW5lZCAmJiBzZWxmW2tleV0gIT09IGZhbHNlKVxuICAgICAgKSB7XG4gICAgICAgIHNlbGZba2V5IHx8IF9oZWFkZXJdID0gbm9ybWFsaXplVmFsdWUoX3ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzZXRIZWFkZXJzID0gKGhlYWRlcnMsIF9yZXdyaXRlKSA9PlxuICAgICAgdXRpbHMuZm9yRWFjaChoZWFkZXJzLCAoX3ZhbHVlLCBfaGVhZGVyKSA9PiBzZXRIZWFkZXIoX3ZhbHVlLCBfaGVhZGVyLCBfcmV3cml0ZSkpO1xuXG4gICAgaWYgKHV0aWxzLmlzUGxhaW5PYmplY3QoaGVhZGVyKSB8fCBoZWFkZXIgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKSB7XG4gICAgICBzZXRIZWFkZXJzKGhlYWRlciwgdmFsdWVPclJld3JpdGUpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNTdHJpbmcoaGVhZGVyKSAmJiAoaGVhZGVyID0gaGVhZGVyLnRyaW0oKSkgJiYgIWlzVmFsaWRIZWFkZXJOYW1lKGhlYWRlcikpIHtcbiAgICAgIHNldEhlYWRlcnMocGFyc2VIZWFkZXJzKGhlYWRlciksIHZhbHVlT3JSZXdyaXRlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzT2JqZWN0KGhlYWRlcikgJiYgdXRpbHMuaXNJdGVyYWJsZShoZWFkZXIpKSB7XG4gICAgICBsZXQgb2JqID0ge30sXG4gICAgICAgIGRlc3QsXG4gICAgICAgIGtleTtcbiAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgaGVhZGVyKSB7XG4gICAgICAgIGlmICghdXRpbHMuaXNBcnJheShlbnRyeSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3QgaXRlcmF0b3IgbXVzdCByZXR1cm4gYSBrZXktdmFsdWUgcGFpcicpO1xuICAgICAgICB9XG5cbiAgICAgICAgb2JqWyhrZXkgPSBlbnRyeVswXSldID0gKGRlc3QgPSBvYmpba2V5XSlcbiAgICAgICAgICA/IHV0aWxzLmlzQXJyYXkoZGVzdClcbiAgICAgICAgICAgID8gWy4uLmRlc3QsIGVudHJ5WzFdXVxuICAgICAgICAgICAgOiBbZGVzdCwgZW50cnlbMV1dXG4gICAgICAgICAgOiBlbnRyeVsxXTtcbiAgICAgIH1cblxuICAgICAgc2V0SGVhZGVycyhvYmosIHZhbHVlT3JSZXdyaXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGVhZGVyICE9IG51bGwgJiYgc2V0SGVhZGVyKHZhbHVlT3JSZXdyaXRlLCBoZWFkZXIsIHJld3JpdGUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZ2V0KGhlYWRlciwgcGFyc2VyKSB7XG4gICAgaGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKGhlYWRlcik7XG5cbiAgICBpZiAoaGVhZGVyKSB7XG4gICAgICBjb25zdCBrZXkgPSB1dGlscy5maW5kS2V5KHRoaXMsIGhlYWRlcik7XG5cbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzW2tleV07XG5cbiAgICAgICAgaWYgKCFwYXJzZXIpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyc2VyID09PSB0cnVlKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlVG9rZW5zKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1dGlscy5pc0Z1bmN0aW9uKHBhcnNlcikpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VyLmNhbGwodGhpcywgdmFsdWUsIGtleSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXRpbHMuaXNSZWdFeHAocGFyc2VyKSkge1xuICAgICAgICAgIHJldHVybiBwYXJzZXIuZXhlYyh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGhhcyhoZWFkZXIsIG1hdGNoZXIpIHtcbiAgICBoZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoaGVhZGVyKTtcblxuICAgIGlmIChoZWFkZXIpIHtcbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzLmZpbmRLZXkodGhpcywgaGVhZGVyKTtcblxuICAgICAgcmV0dXJuICEhKFxuICAgICAgICBrZXkgJiZcbiAgICAgICAgdGhpc1trZXldICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgKCFtYXRjaGVyIHx8IG1hdGNoSGVhZGVyVmFsdWUodGhpcywgdGhpc1trZXldLCBrZXksIG1hdGNoZXIpKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBkZWxldGUoaGVhZGVyLCBtYXRjaGVyKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgbGV0IGRlbGV0ZWQgPSBmYWxzZTtcblxuICAgIGZ1bmN0aW9uIGRlbGV0ZUhlYWRlcihfaGVhZGVyKSB7XG4gICAgICBfaGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKF9oZWFkZXIpO1xuXG4gICAgICBpZiAoX2hlYWRlcikge1xuICAgICAgICBjb25zdCBrZXkgPSB1dGlscy5maW5kS2V5KHNlbGYsIF9oZWFkZXIpO1xuXG4gICAgICAgIGlmIChrZXkgJiYgKCFtYXRjaGVyIHx8IG1hdGNoSGVhZGVyVmFsdWUoc2VsZiwgc2VsZltrZXldLCBrZXksIG1hdGNoZXIpKSkge1xuICAgICAgICAgIGRlbGV0ZSBzZWxmW2tleV07XG5cbiAgICAgICAgICBkZWxldGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh1dGlscy5pc0FycmF5KGhlYWRlcikpIHtcbiAgICAgIGhlYWRlci5mb3JFYWNoKGRlbGV0ZUhlYWRlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZUhlYWRlcihoZWFkZXIpO1xuICAgIH1cblxuICAgIHJldHVybiBkZWxldGVkO1xuICB9XG5cbiAgY2xlYXIobWF0Y2hlcikge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh0aGlzKTtcbiAgICBsZXQgaSA9IGtleXMubGVuZ3RoO1xuICAgIGxldCBkZWxldGVkID0gZmFsc2U7XG5cbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgICAgaWYgKCFtYXRjaGVyIHx8IG1hdGNoSGVhZGVyVmFsdWUodGhpcywgdGhpc1trZXldLCBrZXksIG1hdGNoZXIsIHRydWUpKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzW2tleV07XG4gICAgICAgIGRlbGV0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkZWxldGVkO1xuICB9XG5cbiAgbm9ybWFsaXplKGZvcm1hdCkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGNvbnN0IGhlYWRlcnMgPSB7fTtcblxuICAgIHV0aWxzLmZvckVhY2godGhpcywgKHZhbHVlLCBoZWFkZXIpID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzLmZpbmRLZXkoaGVhZGVycywgaGVhZGVyKTtcblxuICAgICAgaWYgKGtleSkge1xuICAgICAgICBzZWxmW2tleV0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIGRlbGV0ZSBzZWxmW2hlYWRlcl07XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IGZvcm1hdCA/IGZvcm1hdEhlYWRlcihoZWFkZXIpIDogU3RyaW5nKGhlYWRlcikudHJpbSgpO1xuXG4gICAgICBpZiAobm9ybWFsaXplZCAhPT0gaGVhZGVyKSB7XG4gICAgICAgIGRlbGV0ZSBzZWxmW2hlYWRlcl07XG4gICAgICB9XG5cbiAgICAgIHNlbGZbbm9ybWFsaXplZF0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSk7XG5cbiAgICAgIGhlYWRlcnNbbm9ybWFsaXplZF0gPSB0cnVlO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBjb25jYXQoLi4udGFyZ2V0cykge1xuICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLmNvbmNhdCh0aGlzLCAuLi50YXJnZXRzKTtcbiAgfVxuXG4gIHRvSlNPTihhc1N0cmluZ3MpIHtcbiAgICBjb25zdCBvYmogPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgdXRpbHMuZm9yRWFjaCh0aGlzLCAodmFsdWUsIGhlYWRlcikgPT4ge1xuICAgICAgdmFsdWUgIT0gbnVsbCAmJlxuICAgICAgICB2YWx1ZSAhPT0gZmFsc2UgJiZcbiAgICAgICAgKG9ialtoZWFkZXJdID0gYXNTdHJpbmdzICYmIHV0aWxzLmlzQXJyYXkodmFsdWUpID8gdmFsdWUuam9pbignLCAnKSA6IHZhbHVlKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSlbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpXG4gICAgICAubWFwKChbaGVhZGVyLCB2YWx1ZV0pID0+IGhlYWRlciArICc6ICcgKyB2YWx1ZSlcbiAgICAgIC5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIGdldFNldENvb2tpZSgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXQoJ3NldC1jb29raWUnKSB8fCBbXTtcbiAgfVxuXG4gIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHtcbiAgICByZXR1cm4gJ0F4aW9zSGVhZGVycyc7XG4gIH1cblxuICBzdGF0aWMgZnJvbSh0aGluZykge1xuICAgIHJldHVybiB0aGluZyBpbnN0YW5jZW9mIHRoaXMgPyB0aGluZyA6IG5ldyB0aGlzKHRoaW5nKTtcbiAgfVxuXG4gIHN0YXRpYyBjb25jYXQoZmlyc3QsIC4uLnRhcmdldHMpIHtcbiAgICBjb25zdCBjb21wdXRlZCA9IG5ldyB0aGlzKGZpcnN0KTtcblxuICAgIHRhcmdldHMuZm9yRWFjaCgodGFyZ2V0KSA9PiBjb21wdXRlZC5zZXQodGFyZ2V0KSk7XG5cbiAgICByZXR1cm4gY29tcHV0ZWQ7XG4gIH1cblxuICBzdGF0aWMgYWNjZXNzb3IoaGVhZGVyKSB7XG4gICAgY29uc3QgaW50ZXJuYWxzID1cbiAgICAgICh0aGlzWyRpbnRlcm5hbHNdID1cbiAgICAgIHRoaXNbJGludGVybmFsc10gPVxuICAgICAgICB7XG4gICAgICAgICAgYWNjZXNzb3JzOiB7fSxcbiAgICAgICAgfSk7XG5cbiAgICBjb25zdCBhY2Nlc3NvcnMgPSBpbnRlcm5hbHMuYWNjZXNzb3JzO1xuICAgIGNvbnN0IHByb3RvdHlwZSA9IHRoaXMucHJvdG90eXBlO1xuXG4gICAgZnVuY3Rpb24gZGVmaW5lQWNjZXNzb3IoX2hlYWRlcikge1xuICAgICAgY29uc3QgbEhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihfaGVhZGVyKTtcblxuICAgICAgaWYgKCFhY2Nlc3NvcnNbbEhlYWRlcl0pIHtcbiAgICAgICAgYnVpbGRBY2Nlc3NvcnMocHJvdG90eXBlLCBfaGVhZGVyKTtcbiAgICAgICAgYWNjZXNzb3JzW2xIZWFkZXJdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB1dGlscy5pc0FycmF5KGhlYWRlcikgPyBoZWFkZXIuZm9yRWFjaChkZWZpbmVBY2Nlc3NvcikgOiBkZWZpbmVBY2Nlc3NvcihoZWFkZXIpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn1cblxuQXhpb3NIZWFkZXJzLmFjY2Vzc29yKFtcbiAgJ0NvbnRlbnQtVHlwZScsXG4gICdDb250ZW50LUxlbmd0aCcsXG4gICdBY2NlcHQnLFxuICAnQWNjZXB0LUVuY29kaW5nJyxcbiAgJ1VzZXItQWdlbnQnLFxuICAnQXV0aG9yaXphdGlvbicsXG5dKTtcblxuLy8gcmVzZXJ2ZWQgbmFtZXMgaG90Zml4XG51dGlscy5yZWR1Y2VEZXNjcmlwdG9ycyhBeGlvc0hlYWRlcnMucHJvdG90eXBlLCAoeyB2YWx1ZSB9LCBrZXkpID0+IHtcbiAgbGV0IG1hcHBlZCA9IGtleVswXS50b1VwcGVyQ2FzZSgpICsga2V5LnNsaWNlKDEpOyAvLyBtYXAgYHNldGAgPT4gYFNldGBcbiAgcmV0dXJuIHtcbiAgICBnZXQ6ICgpID0+IHZhbHVlLFxuICAgIHNldChoZWFkZXJWYWx1ZSkge1xuICAgICAgdGhpc1ttYXBwZWRdID0gaGVhZGVyVmFsdWU7XG4gICAgfSxcbiAgfTtcbn0pO1xuXG51dGlscy5mcmVlemVNZXRob2RzKEF4aW9zSGVhZGVycyk7XG5cbmV4cG9ydCBkZWZhdWx0IEF4aW9zSGVhZGVycztcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSAnLi9BeGlvc0hlYWRlcnMuanMnO1xuXG5jb25zdCBSRURBQ1RFRCA9ICdbUkVEQUNURUQgKioqKl0nO1xuXG5mdW5jdGlvbiBoYXNPd25PclByb3RvdHlwZVRvSlNPTihzb3VyY2UpIHtcbiAgaWYgKHV0aWxzLmhhc093blByb3Aoc291cmNlLCAndG9KU09OJykpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGxldCBwcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yoc291cmNlKTtcblxuICB3aGlsZSAocHJvdG90eXBlICYmIHByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSkge1xuICAgIGlmICh1dGlscy5oYXNPd25Qcm9wKHByb3RvdHlwZSwgJ3RvSlNPTicpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG90eXBlKTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLy8gQnVpbGQgYSBwbGFpbi1vYmplY3Qgc25hcHNob3Qgb2YgYGNvbmZpZ2AgYW5kIHJlcGxhY2UgdGhlIHZhbHVlIG9mIGFueSBrZXlcbi8vIChjYXNlLWluc2Vuc2l0aXZlKSBsaXN0ZWQgaW4gYHJlZGFjdEtleXNgIHdpdGggUkVEQUNURUQuIFdhbGtzIHRocm91Z2ggYXJyYXlzXG4vLyBhbmQgQXhpb3NIZWFkZXJzLCBhbmQgc2hvcnQtY2lyY3VpdHMgb24gY2lyY3VsYXIgcmVmZXJlbmNlcy5cbmZ1bmN0aW9uIHJlZGFjdENvbmZpZyhjb25maWcsIHJlZGFjdEtleXMpIHtcbiAgY29uc3QgbG93ZXJLZXlzID0gbmV3IFNldChyZWRhY3RLZXlzLm1hcCgoaykgPT4gU3RyaW5nKGspLnRvTG93ZXJDYXNlKCkpKTtcbiAgY29uc3Qgc2VlbiA9IFtdO1xuXG4gIGNvbnN0IHZpc2l0ID0gKHNvdXJjZSkgPT4ge1xuICAgIGlmIChzb3VyY2UgPT09IG51bGwgfHwgdHlwZW9mIHNvdXJjZSAhPT0gJ29iamVjdCcpIHJldHVybiBzb3VyY2U7XG4gICAgaWYgKHV0aWxzLmlzQnVmZmVyKHNvdXJjZSkpIHJldHVybiBzb3VyY2U7XG4gICAgaWYgKHNlZW4uaW5kZXhPZihzb3VyY2UpICE9PSAtMSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIGlmIChzb3VyY2UgaW5zdGFuY2VvZiBBeGlvc0hlYWRlcnMpIHtcbiAgICAgIHNvdXJjZSA9IHNvdXJjZS50b0pTT04oKTtcbiAgICB9XG5cbiAgICBzZWVuLnB1c2goc291cmNlKTtcblxuICAgIGxldCByZXN1bHQ7XG4gICAgaWYgKHV0aWxzLmlzQXJyYXkoc291cmNlKSkge1xuICAgICAgcmVzdWx0ID0gW107XG4gICAgICBzb3VyY2UuZm9yRWFjaCgodiwgaSkgPT4ge1xuICAgICAgICBjb25zdCByZWR1Y2VkVmFsdWUgPSB2aXNpdCh2KTtcbiAgICAgICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChyZWR1Y2VkVmFsdWUpKSB7XG4gICAgICAgICAgcmVzdWx0W2ldID0gcmVkdWNlZFZhbHVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCF1dGlscy5pc1BsYWluT2JqZWN0KHNvdXJjZSkgJiYgaGFzT3duT3JQcm90b3R5cGVUb0pTT04oc291cmNlKSkge1xuICAgICAgICBzZWVuLnBvcCgpO1xuICAgICAgICByZXR1cm4gc291cmNlO1xuICAgICAgfVxuXG4gICAgICByZXN1bHQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoc291cmNlKSkge1xuICAgICAgICBjb25zdCByZWR1Y2VkVmFsdWUgPSBsb3dlcktleXMuaGFzKGtleS50b0xvd2VyQ2FzZSgpKSA/IFJFREFDVEVEIDogdmlzaXQodmFsdWUpO1xuICAgICAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKHJlZHVjZWRWYWx1ZSkpIHtcbiAgICAgICAgICByZXN1bHRba2V5XSA9IHJlZHVjZWRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHNlZW4ucG9wKCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICByZXR1cm4gdmlzaXQoY29uZmlnKTtcbn1cblxuY2xhc3MgQXhpb3NFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgc3RhdGljIGZyb20oZXJyb3IsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UsIGN1c3RvbVByb3BzKSB7XG4gICAgY29uc3QgYXhpb3NFcnJvciA9IG5ldyBBeGlvc0Vycm9yKGVycm9yLm1lc3NhZ2UsIGNvZGUgfHwgZXJyb3IuY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSk7XG4gICAgYXhpb3NFcnJvci5jYXVzZSA9IGVycm9yO1xuICAgIGF4aW9zRXJyb3IubmFtZSA9IGVycm9yLm5hbWU7XG5cbiAgICAvLyBQcmVzZXJ2ZSBzdGF0dXMgZnJvbSB0aGUgb3JpZ2luYWwgZXJyb3IgaWYgbm90IGFscmVhZHkgc2V0IGZyb20gcmVzcG9uc2VcbiAgICBpZiAoZXJyb3Iuc3RhdHVzICE9IG51bGwgJiYgYXhpb3NFcnJvci5zdGF0dXMgPT0gbnVsbCkge1xuICAgICAgYXhpb3NFcnJvci5zdGF0dXMgPSBlcnJvci5zdGF0dXM7XG4gICAgfVxuXG4gICAgY3VzdG9tUHJvcHMgJiYgT2JqZWN0LmFzc2lnbihheGlvc0Vycm9yLCBjdXN0b21Qcm9wcyk7XG4gICAgcmV0dXJuIGF4aW9zRXJyb3I7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIEVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBtZXNzYWdlLCBjb25maWcsIGVycm9yIGNvZGUsIHJlcXVlc3QgYW5kIHJlc3BvbnNlLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtjb2RlXSBUaGUgZXJyb3IgY29kZSAoZm9yIGV4YW1wbGUsICdFQ09OTkFCT1JURUQnKS5cbiAgICogQHBhcmFtIHtPYmplY3R9IFtjb25maWddIFRoZSBjb25maWcuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbcmVxdWVzdF0gVGhlIHJlcXVlc3QuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbcmVzcG9uc2VdIFRoZSByZXNwb25zZS5cbiAgICpcbiAgICogQHJldHVybnMge0Vycm9yfSBUaGUgY3JlYXRlZCBlcnJvci5cbiAgICovXG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcblxuICAgIC8vIE1ha2UgbWVzc2FnZSBlbnVtZXJhYmxlIHRvIG1haW50YWluIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgICAvLyBUaGUgbmF0aXZlIEVycm9yIGNvbnN0cnVjdG9yIHNldHMgbWVzc2FnZSBhcyBub24tZW51bWVyYWJsZSxcbiAgICAvLyBidXQgYXhpb3MgPCB2MS4xMy4zIGhhZCBpdCBhcyBlbnVtZXJhYmxlXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdtZXNzYWdlJywge1xuICAgICAgLy8gTnVsbC1wcm90byBkZXNjcmlwdG9yIHNvIGEgcG9sbHV0ZWQgT2JqZWN0LnByb3RvdHlwZS5nZXQgY2Fubm90IHR1cm5cbiAgICAgIC8vIHRoaXMgZGF0YSBkZXNjcmlwdG9yIGludG8gYW4gYWNjZXNzb3IgZGVzY3JpcHRvciBvbiB0aGUgd2F5IGluLlxuICAgICAgX19wcm90b19fOiBudWxsLFxuICAgICAgdmFsdWU6IG1lc3NhZ2UsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgfSk7XG5cbiAgICB0aGlzLm5hbWUgPSAnQXhpb3NFcnJvcic7XG4gICAgdGhpcy5pc0F4aW9zRXJyb3IgPSB0cnVlO1xuICAgIGNvZGUgJiYgKHRoaXMuY29kZSA9IGNvZGUpO1xuICAgIGNvbmZpZyAmJiAodGhpcy5jb25maWcgPSBjb25maWcpO1xuICAgIHJlcXVlc3QgJiYgKHRoaXMucmVxdWVzdCA9IHJlcXVlc3QpO1xuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICAgICAgdGhpcy5zdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgfVxuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIC8vIE9wdC1pbiByZWRhY3Rpb246IHdoZW4gdGhlIHJlcXVlc3QgY29uZmlnIGNhcnJpZXMgYSBgcmVkYWN0YCBhcnJheSwgdGhlXG4gICAgLy8gdmFsdWUgb2YgYW55IG1hdGNoaW5nIGtleSAoY2FzZS1pbnNlbnNpdGl2ZSwgYXQgYW55IGRlcHRoKSBpcyByZXBsYWNlZFxuICAgIC8vIHdpdGggUkVEQUNURUQgaW4gdGhlIHNlcmlhbGl6ZWQgc25hcHNob3QuIFVuZGVmaW5lZCBvciBlbXB0eSBsZWF2ZXMgdGhlXG4gICAgLy8gZXhpc3Rpbmcgc2VyaWFsaXphdGlvbiBiZWhhdmlvciB1bmNoYW5nZWQuXG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWc7XG4gICAgY29uc3QgcmVkYWN0S2V5cyA9IGNvbmZpZyAmJiB1dGlscy5oYXNPd25Qcm9wKGNvbmZpZywgJ3JlZGFjdCcpID8gY29uZmlnLnJlZGFjdCA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBzZXJpYWxpemVkQ29uZmlnID1cbiAgICAgIHV0aWxzLmlzQXJyYXkocmVkYWN0S2V5cykgJiYgcmVkYWN0S2V5cy5sZW5ndGggPiAwXG4gICAgICAgID8gcmVkYWN0Q29uZmlnKGNvbmZpZywgcmVkYWN0S2V5cylcbiAgICAgICAgOiB1dGlscy50b0pTT05PYmplY3QoY29uZmlnKTtcblxuICAgIHJldHVybiB7XG4gICAgICAvLyBTdGFuZGFyZFxuICAgICAgbWVzc2FnZTogdGhpcy5tZXNzYWdlLFxuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgLy8gTWljcm9zb2Z0XG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgIG51bWJlcjogdGhpcy5udW1iZXIsXG4gICAgICAvLyBNb3ppbGxhXG4gICAgICBmaWxlTmFtZTogdGhpcy5maWxlTmFtZSxcbiAgICAgIGxpbmVOdW1iZXI6IHRoaXMubGluZU51bWJlcixcbiAgICAgIGNvbHVtbk51bWJlcjogdGhpcy5jb2x1bW5OdW1iZXIsXG4gICAgICBzdGFjazogdGhpcy5zdGFjayxcbiAgICAgIC8vIEF4aW9zXG4gICAgICBjb25maWc6IHNlcmlhbGl6ZWRDb25maWcsXG4gICAgICBjb2RlOiB0aGlzLmNvZGUsXG4gICAgICBzdGF0dXM6IHRoaXMuc3RhdHVzLFxuICAgIH07XG4gIH1cbn1cblxuLy8gVGhpcyBjYW4gYmUgY2hhbmdlZCB0byBzdGF0aWMgcHJvcGVydGllcyBhcyBzb29uIGFzIHRoZSBwYXJzZXIgb3B0aW9ucyBpbiAuZXNsaW50LmNqcyBhcmUgdXBkYXRlZC5cbkF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT05fVkFMVUUgPSAnRVJSX0JBRF9PUFRJT05fVkFMVUUnO1xuQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTiA9ICdFUlJfQkFEX09QVElPTic7XG5BeGlvc0Vycm9yLkVDT05OQUJPUlRFRCA9ICdFQ09OTkFCT1JURUQnO1xuQXhpb3NFcnJvci5FVElNRURPVVQgPSAnRVRJTUVET1VUJztcbkF4aW9zRXJyb3IuRUNPTk5SRUZVU0VEID0gJ0VDT05OUkVGVVNFRCc7XG5BeGlvc0Vycm9yLkVSUl9ORVRXT1JLID0gJ0VSUl9ORVRXT1JLJztcbkF4aW9zRXJyb3IuRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUyA9ICdFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTJztcbkF4aW9zRXJyb3IuRVJSX0RFUFJFQ0FURUQgPSAnRVJSX0RFUFJFQ0FURUQnO1xuQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFID0gJ0VSUl9CQURfUkVTUE9OU0UnO1xuQXhpb3NFcnJvci5FUlJfQkFEX1JFUVVFU1QgPSAnRVJSX0JBRF9SRVFVRVNUJztcbkF4aW9zRXJyb3IuRVJSX0NBTkNFTEVEID0gJ0VSUl9DQU5DRUxFRCc7XG5BeGlvc0Vycm9yLkVSUl9OT1RfU1VQUE9SVCA9ICdFUlJfTk9UX1NVUFBPUlQnO1xuQXhpb3NFcnJvci5FUlJfSU5WQUxJRF9VUkwgPSAnRVJSX0lOVkFMSURfVVJMJztcbkF4aW9zRXJyb3IuRVJSX0ZPUk1fREFUQV9ERVBUSF9FWENFRURFRCA9ICdFUlJfRk9STV9EQVRBX0RFUFRIX0VYQ0VFREVEJztcblxuZXhwb3J0IGRlZmF1bHQgQXhpb3NFcnJvcjtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4uL2NvcmUvQXhpb3NFcnJvci5qcyc7XG4vLyB0ZW1wb3JhcnkgaG90Zml4IHRvIGF2b2lkIGNpcmN1bGFyIHJlZmVyZW5jZXMgdW50aWwgQXhpb3NVUkxTZWFyY2hQYXJhbXMgaXMgcmVmYWN0b3JlZFxuaW1wb3J0IFBsYXRmb3JtRm9ybURhdGEgZnJvbSAnLi4vcGxhdGZvcm0vbm9kZS9jbGFzc2VzL0Zvcm1EYXRhLmpzJztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIHRoZSBnaXZlbiB0aGluZyBpcyBhIGFycmF5IG9yIGpzIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGhpbmcgLSBUaGUgb2JqZWN0IG9yIGFycmF5IHRvIGJlIHZpc2l0ZWQuXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzVmlzaXRhYmxlKHRoaW5nKSB7XG4gIHJldHVybiB1dGlscy5pc1BsYWluT2JqZWN0KHRoaW5nKSB8fCB1dGlscy5pc0FycmF5KHRoaW5nKTtcbn1cblxuLyoqXG4gKiBJdCByZW1vdmVzIHRoZSBicmFja2V0cyBmcm9tIHRoZSBlbmQgb2YgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgcGFyYW1ldGVyLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSBrZXkgd2l0aG91dCB0aGUgYnJhY2tldHMuXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUJyYWNrZXRzKGtleSkge1xuICByZXR1cm4gdXRpbHMuZW5kc1dpdGgoa2V5LCAnW10nKSA/IGtleS5zbGljZSgwLCAtMikgOiBrZXk7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBwYXRoLCBhIGtleSwgYW5kIGEgYm9vbGVhbiwgYW5kIHJldHVybnMgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIFRoZSBwYXRoIHRvIHRoZSBjdXJyZW50IGtleS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBjdXJyZW50IG9iamVjdCBiZWluZyBpdGVyYXRlZCBvdmVyLlxuICogQHBhcmFtIHtzdHJpbmd9IGRvdHMgLSBJZiB0cnVlLCB0aGUga2V5IHdpbGwgYmUgcmVuZGVyZWQgd2l0aCBkb3RzIGluc3RlYWQgb2YgYnJhY2tldHMuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIHBhdGggdG8gdGhlIGN1cnJlbnQga2V5LlxuICovXG5mdW5jdGlvbiByZW5kZXJLZXkocGF0aCwga2V5LCBkb3RzKSB7XG4gIGlmICghcGF0aCkgcmV0dXJuIGtleTtcbiAgcmV0dXJuIHBhdGhcbiAgICAuY29uY2F0KGtleSlcbiAgICAubWFwKGZ1bmN0aW9uIGVhY2godG9rZW4sIGkpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgdG9rZW4gPSByZW1vdmVCcmFja2V0cyh0b2tlbik7XG4gICAgICByZXR1cm4gIWRvdHMgJiYgaSA/ICdbJyArIHRva2VuICsgJ10nIDogdG9rZW47XG4gICAgfSlcbiAgICAuam9pbihkb3RzID8gJy4nIDogJycpO1xufVxuXG4vKipcbiAqIElmIHRoZSBhcnJheSBpcyBhbiBhcnJheSBhbmQgbm9uZSBvZiBpdHMgZWxlbWVudHMgYXJlIHZpc2l0YWJsZSwgdGhlbiBpdCdzIGEgZmxhdCBhcnJheS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PGFueT59IGFyciAtIFRoZSBhcnJheSB0byBjaGVja1xuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0ZsYXRBcnJheShhcnIpIHtcbiAgcmV0dXJuIHV0aWxzLmlzQXJyYXkoYXJyKSAmJiAhYXJyLnNvbWUoaXNWaXNpdGFibGUpO1xufVxuXG5jb25zdCBwcmVkaWNhdGVzID0gdXRpbHMudG9GbGF0T2JqZWN0KHV0aWxzLCB7fSwgbnVsbCwgZnVuY3Rpb24gZmlsdGVyKHByb3ApIHtcbiAgcmV0dXJuIC9eaXNbQS1aXS8udGVzdChwcm9wKTtcbn0pO1xuXG4vKipcbiAqIENvbnZlcnQgYSBkYXRhIG9iamVjdCB0byBGb3JtRGF0YVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEBwYXJhbSB7P09iamVjdH0gW2Zvcm1EYXRhXVxuICogQHBhcmFtIHs/T2JqZWN0fSBbb3B0aW9uc11cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLnZpc2l0b3JdXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLm1ldGFUb2tlbnMgPSB0cnVlXVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5kb3RzID0gZmFsc2VdXG4gKiBAcGFyYW0gez9Cb29sZWFufSBbb3B0aW9ucy5pbmRleGVzID0gZmFsc2VdXG4gKlxuICogQHJldHVybnMge09iamVjdH1cbiAqKi9cblxuLyoqXG4gKiBJdCBjb252ZXJ0cyBhbiBvYmplY3QgaW50byBhIEZvcm1EYXRhIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PGFueSwgYW55Pn0gb2JqIC0gVGhlIG9iamVjdCB0byBjb252ZXJ0IHRvIGZvcm0gZGF0YS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtRGF0YSAtIFRoZSBGb3JtRGF0YSBvYmplY3QgdG8gYXBwZW5kIHRvLlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBhbnk+fSBvcHRpb25zXG4gKlxuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24gdG9Gb3JtRGF0YShvYmosIGZvcm1EYXRhLCBvcHRpb25zKSB7XG4gIGlmICghdXRpbHMuaXNPYmplY3Qob2JqKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3RhcmdldCBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIGZvcm1EYXRhID0gZm9ybURhdGEgfHwgbmV3IChQbGF0Zm9ybUZvcm1EYXRhIHx8IEZvcm1EYXRhKSgpO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBvcHRpb25zID0gdXRpbHMudG9GbGF0T2JqZWN0KFxuICAgIG9wdGlvbnMsXG4gICAge1xuICAgICAgbWV0YVRva2VuczogdHJ1ZSxcbiAgICAgIGRvdHM6IGZhbHNlLFxuICAgICAgaW5kZXhlczogZmFsc2UsXG4gICAgfSxcbiAgICBmYWxzZSxcbiAgICBmdW5jdGlvbiBkZWZpbmVkKG9wdGlvbiwgc291cmNlKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgICAgIHJldHVybiAhdXRpbHMuaXNVbmRlZmluZWQoc291cmNlW29wdGlvbl0pO1xuICAgIH1cbiAgKTtcblxuICBjb25zdCBtZXRhVG9rZW5zID0gb3B0aW9ucy5tZXRhVG9rZW5zO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgY29uc3QgdmlzaXRvciA9IG9wdGlvbnMudmlzaXRvciB8fCBkZWZhdWx0VmlzaXRvcjtcbiAgY29uc3QgZG90cyA9IG9wdGlvbnMuZG90cztcbiAgY29uc3QgaW5kZXhlcyA9IG9wdGlvbnMuaW5kZXhlcztcbiAgY29uc3QgX0Jsb2IgPSBvcHRpb25zLkJsb2IgfHwgKHR5cGVvZiBCbG9iICE9PSAndW5kZWZpbmVkJyAmJiBCbG9iKTtcbiAgY29uc3QgbWF4RGVwdGggPSBvcHRpb25zLm1heERlcHRoID09PSB1bmRlZmluZWQgPyAxMDAgOiBvcHRpb25zLm1heERlcHRoO1xuICBjb25zdCB1c2VCbG9iID0gX0Jsb2IgJiYgdXRpbHMuaXNTcGVjQ29tcGxpYW50Rm9ybShmb3JtRGF0YSk7XG5cbiAgaWYgKCF1dGlscy5pc0Z1bmN0aW9uKHZpc2l0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndmlzaXRvciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbnZlcnRWYWx1ZSh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuICcnO1xuXG4gICAgaWYgKHV0aWxzLmlzRGF0ZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZS50b0lTT1N0cmluZygpO1xuICAgIH1cblxuICAgIGlmICh1dGlscy5pc0Jvb2xlYW4odmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBpZiAoIXVzZUJsb2IgJiYgdXRpbHMuaXNCbG9iKHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ0Jsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEgQnVmZmVyIGluc3RlYWQuJyk7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXIodmFsdWUpIHx8IHV0aWxzLmlzVHlwZWRBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB1c2VCbG9iICYmIHR5cGVvZiBCbG9iID09PSAnZnVuY3Rpb24nID8gbmV3IEJsb2IoW3ZhbHVlXSkgOiBCdWZmZXIuZnJvbSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmF1bHQgdmlzaXRvci5cbiAgICpcbiAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ3xOdW1iZXJ9IGtleVxuICAgKiBAcGFyYW0ge0FycmF5PFN0cmluZ3xOdW1iZXI+fSBwYXRoXG4gICAqIEB0aGlzIHtGb3JtRGF0YX1cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHJldHVybiB0cnVlIHRvIHZpc2l0IHRoZSBlYWNoIHByb3Agb2YgdGhlIHZhbHVlIHJlY3Vyc2l2ZWx5XG4gICAqL1xuICBmdW5jdGlvbiBkZWZhdWx0VmlzaXRvcih2YWx1ZSwga2V5LCBwYXRoKSB7XG4gICAgbGV0IGFyciA9IHZhbHVlO1xuXG4gICAgaWYgKHV0aWxzLmlzUmVhY3ROYXRpdmUoZm9ybURhdGEpICYmIHV0aWxzLmlzUmVhY3ROYXRpdmVCbG9iKHZhbHVlKSkge1xuICAgICAgZm9ybURhdGEuYXBwZW5kKHJlbmRlcktleShwYXRoLCBrZXksIGRvdHMpLCBjb252ZXJ0VmFsdWUodmFsdWUpKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUgJiYgIXBhdGggJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKHV0aWxzLmVuZHNXaXRoKGtleSwgJ3t9JykpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIGtleSA9IG1ldGFUb2tlbnMgPyBrZXkgOiBrZXkuc2xpY2UoMCwgLTIpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgdmFsdWUgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAodXRpbHMuaXNBcnJheSh2YWx1ZSkgJiYgaXNGbGF0QXJyYXkodmFsdWUpKSB8fFxuICAgICAgICAoKHV0aWxzLmlzRmlsZUxpc3QodmFsdWUpIHx8IHV0aWxzLmVuZHNXaXRoKGtleSwgJ1tdJykpICYmIChhcnIgPSB1dGlscy50b0FycmF5KHZhbHVlKSkpXG4gICAgICApIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIGtleSA9IHJlbW92ZUJyYWNrZXRzKGtleSk7XG5cbiAgICAgICAgYXJyLmZvckVhY2goZnVuY3Rpb24gZWFjaChlbCwgaW5kZXgpIHtcbiAgICAgICAgICAhKHV0aWxzLmlzVW5kZWZpbmVkKGVsKSB8fCBlbCA9PT0gbnVsbCkgJiZcbiAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5lc3RlZC10ZXJuYXJ5XG4gICAgICAgICAgICAgIGluZGV4ZXMgPT09IHRydWVcbiAgICAgICAgICAgICAgICA/IHJlbmRlcktleShba2V5XSwgaW5kZXgsIGRvdHMpXG4gICAgICAgICAgICAgICAgOiBpbmRleGVzID09PSBudWxsXG4gICAgICAgICAgICAgICAgICA/IGtleVxuICAgICAgICAgICAgICAgICAgOiBrZXkgKyAnW10nLFxuICAgICAgICAgICAgICBjb252ZXJ0VmFsdWUoZWwpXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc1Zpc2l0YWJsZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZvcm1EYXRhLmFwcGVuZChyZW5kZXJLZXkocGF0aCwga2V5LCBkb3RzKSwgY29udmVydFZhbHVlKHZhbHVlKSk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBzdGFjayA9IFtdO1xuXG4gIGNvbnN0IGV4cG9zZWRIZWxwZXJzID0gT2JqZWN0LmFzc2lnbihwcmVkaWNhdGVzLCB7XG4gICAgZGVmYXVsdFZpc2l0b3IsXG4gICAgY29udmVydFZhbHVlLFxuICAgIGlzVmlzaXRhYmxlLFxuICB9KTtcblxuICBmdW5jdGlvbiBidWlsZCh2YWx1ZSwgcGF0aCwgZGVwdGggPSAwKSB7XG4gICAgaWYgKHV0aWxzLmlzVW5kZWZpbmVkKHZhbHVlKSkgcmV0dXJuO1xuXG4gICAgaWYgKGRlcHRoID4gbWF4RGVwdGgpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICAnT2JqZWN0IGlzIHRvbyBkZWVwbHkgbmVzdGVkICgnICsgZGVwdGggKyAnIGxldmVscykuIE1heCBkZXB0aDogJyArIG1heERlcHRoLFxuICAgICAgICBBeGlvc0Vycm9yLkVSUl9GT1JNX0RBVEFfREVQVEhfRVhDRUVERURcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHN0YWNrLmluZGV4T2YodmFsdWUpICE9PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gJyArIHBhdGguam9pbignLicpKTtcbiAgICB9XG5cbiAgICBzdGFjay5wdXNoKHZhbHVlKTtcblxuICAgIHV0aWxzLmZvckVhY2godmFsdWUsIGZ1bmN0aW9uIGVhY2goZWwsIGtleSkge1xuICAgICAgY29uc3QgcmVzdWx0ID1cbiAgICAgICAgISh1dGlscy5pc1VuZGVmaW5lZChlbCkgfHwgZWwgPT09IG51bGwpICYmXG4gICAgICAgIHZpc2l0b3IuY2FsbChmb3JtRGF0YSwgZWwsIHV0aWxzLmlzU3RyaW5nKGtleSkgPyBrZXkudHJpbSgpIDoga2V5LCBwYXRoLCBleHBvc2VkSGVscGVycyk7XG5cbiAgICAgIGlmIChyZXN1bHQgPT09IHRydWUpIHtcbiAgICAgICAgYnVpbGQoZWwsIHBhdGggPyBwYXRoLmNvbmNhdChrZXkpIDogW2tleV0sIGRlcHRoICsgMSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBzdGFjay5wb3AoKTtcbiAgfVxuXG4gIGlmICghdXRpbHMuaXNPYmplY3Qob2JqKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2RhdGEgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgfVxuXG4gIGJ1aWxkKG9iaik7XG5cbiAgcmV0dXJuIGZvcm1EYXRhO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0b0Zvcm1EYXRhO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdG9Gb3JtRGF0YSBmcm9tICcuL3RvRm9ybURhdGEuanMnO1xuXG4vKipcbiAqIEl0IGVuY29kZXMgYSBzdHJpbmcgYnkgcmVwbGFjaW5nIGFsbCBjaGFyYWN0ZXJzIHRoYXQgYXJlIG5vdCBpbiB0aGUgdW5yZXNlcnZlZCBzZXQgd2l0aFxuICogdGhlaXIgcGVyY2VudC1lbmNvZGVkIGVxdWl2YWxlbnRzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0ciAtIFRoZSBzdHJpbmcgdG8gZW5jb2RlLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBlbmNvZGVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gZW5jb2RlKHN0cikge1xuICBjb25zdCBjaGFyTWFwID0ge1xuICAgICchJzogJyUyMScsXG4gICAgXCInXCI6ICclMjcnLFxuICAgICcoJzogJyUyOCcsXG4gICAgJyknOiAnJTI5JyxcbiAgICAnfic6ICclN0UnLFxuICAgICclMjAnOiAnKycsXG4gIH07XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyKS5yZXBsYWNlKC9bIScoKX5dfCUyMC9nLCBmdW5jdGlvbiByZXBsYWNlcihtYXRjaCkge1xuICAgIHJldHVybiBjaGFyTWFwW21hdGNoXTtcbiAgfSk7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBwYXJhbXMgb2JqZWN0IGFuZCBjb252ZXJ0cyBpdCB0byBhIEZvcm1EYXRhIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgYW55Pn0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgdG8gYmUgY29udmVydGVkIHRvIGEgRm9ybURhdGEgb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBhbnk+fSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgb2JqZWN0IHBhc3NlZCB0byB0aGUgQXhpb3MgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIEF4aW9zVVJMU2VhcmNoUGFyYW1zKHBhcmFtcywgb3B0aW9ucykge1xuICB0aGlzLl9wYWlycyA9IFtdO1xuXG4gIHBhcmFtcyAmJiB0b0Zvcm1EYXRhKHBhcmFtcywgdGhpcywgb3B0aW9ucyk7XG59XG5cbmNvbnN0IHByb3RvdHlwZSA9IEF4aW9zVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZTtcblxucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uIGFwcGVuZChuYW1lLCB2YWx1ZSkge1xuICB0aGlzLl9wYWlycy5wdXNoKFtuYW1lLCB2YWx1ZV0pO1xufTtcblxucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoZW5jb2Rlcikge1xuICBjb25zdCBfZW5jb2RlID0gZW5jb2RlclxuICAgID8gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBlbmNvZGVyLmNhbGwodGhpcywgdmFsdWUsIGVuY29kZSk7XG4gICAgICB9XG4gICAgOiBlbmNvZGU7XG5cbiAgcmV0dXJuIHRoaXMuX3BhaXJzXG4gICAgLm1hcChmdW5jdGlvbiBlYWNoKHBhaXIpIHtcbiAgICAgIHJldHVybiBfZW5jb2RlKHBhaXJbMF0pICsgJz0nICsgX2VuY29kZShwYWlyWzFdKTtcbiAgICB9LCAnJylcbiAgICAuam9pbignJicpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgQXhpb3NVUkxTZWFyY2hQYXJhbXM7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgQXhpb3NVUkxTZWFyY2hQYXJhbXMgZnJvbSAnLi9BeGlvc1VSTFNlYXJjaFBhcmFtcy5qcyc7XG5cbi8qKlxuICogSXQgcmVwbGFjZXMgVVJMLWVuY29kZWQgZm9ybXMgb2YgYDpgLCBgJGAsIGAsYCwgYW5kIHNwYWNlcyB3aXRoXG4gKiB0aGVpciBwbGFpbiBjb3VudGVycGFydHMgKGA6YCwgYCRgLCBgLGAsIGArYCkuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbCBUaGUgdmFsdWUgdG8gYmUgZW5jb2RlZC5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZW5jb2RlZCB2YWx1ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZSh2YWwpIHtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh2YWwpXG4gICAgLnJlcGxhY2UoLyUzQS9naSwgJzonKVxuICAgIC5yZXBsYWNlKC8lMjQvZywgJyQnKVxuICAgIC5yZXBsYWNlKC8lMkMvZ2ksICcsJylcbiAgICAucmVwbGFjZSgvJTIwL2csICcrJyk7XG59XG5cbi8qKlxuICogQnVpbGQgYSBVUkwgYnkgYXBwZW5kaW5nIHBhcmFtcyB0byB0aGUgZW5kXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgYmFzZSBvZiB0aGUgdXJsIChlLmcuLCBodHRwOi8vd3d3Lmdvb2dsZS5jb20pXG4gKiBAcGFyYW0ge29iamVjdH0gW3BhcmFtc10gVGhlIHBhcmFtcyB0byBiZSBhcHBlbmRlZFxuICogQHBhcmFtIHs/KG9iamVjdHxGdW5jdGlvbil9IG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIHVybFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBidWlsZFVSTCh1cmwsIHBhcmFtcywgb3B0aW9ucykge1xuICBpZiAoIXBhcmFtcykge1xuICAgIHJldHVybiB1cmw7XG4gIH1cblxuICBjb25zdCBfZW5jb2RlID0gKG9wdGlvbnMgJiYgb3B0aW9ucy5lbmNvZGUpIHx8IGVuY29kZTtcblxuICBjb25zdCBfb3B0aW9ucyA9IHV0aWxzLmlzRnVuY3Rpb24ob3B0aW9ucylcbiAgICA/IHtcbiAgICAgICAgc2VyaWFsaXplOiBvcHRpb25zLFxuICAgICAgfVxuICAgIDogb3B0aW9ucztcblxuICBjb25zdCBzZXJpYWxpemVGbiA9IF9vcHRpb25zICYmIF9vcHRpb25zLnNlcmlhbGl6ZTtcblxuICBsZXQgc2VyaWFsaXplZFBhcmFtcztcblxuICBpZiAoc2VyaWFsaXplRm4pIHtcbiAgICBzZXJpYWxpemVkUGFyYW1zID0gc2VyaWFsaXplRm4ocGFyYW1zLCBfb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKHBhcmFtcylcbiAgICAgID8gcGFyYW1zLnRvU3RyaW5nKClcbiAgICAgIDogbmV3IEF4aW9zVVJMU2VhcmNoUGFyYW1zKHBhcmFtcywgX29wdGlvbnMpLnRvU3RyaW5nKF9lbmNvZGUpO1xuICB9XG5cbiAgaWYgKHNlcmlhbGl6ZWRQYXJhbXMpIHtcbiAgICBjb25zdCBoYXNobWFya0luZGV4ID0gdXJsLmluZGV4T2YoJyMnKTtcblxuICAgIGlmIChoYXNobWFya0luZGV4ICE9PSAtMSkge1xuICAgICAgdXJsID0gdXJsLnNsaWNlKDAsIGhhc2htYXJrSW5kZXgpO1xuICAgIH1cbiAgICB1cmwgKz0gKHVybC5pbmRleE9mKCc/JykgPT09IC0xID8gJz8nIDogJyYnKSArIHNlcmlhbGl6ZWRQYXJhbXM7XG4gIH1cblxuICByZXR1cm4gdXJsO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuXG5jbGFzcyBJbnRlcmNlcHRvck1hbmFnZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmhhbmRsZXJzID0gW107XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgbmV3IGludGVyY2VwdG9yIHRvIHRoZSBzdGFja1xuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdWxmaWxsZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgdGhlbmAgZm9yIGEgYFByb21pc2VgXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHJlamVjdGAgZm9yIGEgYFByb21pc2VgXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIFRoZSBvcHRpb25zIGZvciB0aGUgaW50ZXJjZXB0b3IsIHN5bmNocm9ub3VzIGFuZCBydW5XaGVuXG4gICAqXG4gICAqIEByZXR1cm4ge051bWJlcn0gQW4gSUQgdXNlZCB0byByZW1vdmUgaW50ZXJjZXB0b3IgbGF0ZXJcbiAgICovXG4gIHVzZShmdWxmaWxsZWQsIHJlamVjdGVkLCBvcHRpb25zKSB7XG4gICAgdGhpcy5oYW5kbGVycy5wdXNoKHtcbiAgICAgIGZ1bGZpbGxlZCxcbiAgICAgIHJlamVjdGVkLFxuICAgICAgc3luY2hyb25vdXM6IG9wdGlvbnMgPyBvcHRpb25zLnN5bmNocm9ub3VzIDogZmFsc2UsXG4gICAgICBydW5XaGVuOiBvcHRpb25zID8gb3B0aW9ucy5ydW5XaGVuIDogbnVsbCxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVycy5sZW5ndGggLSAxO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbiBpbnRlcmNlcHRvciBmcm9tIHRoZSBzdGFja1xuICAgKlxuICAgKiBAcGFyYW0ge051bWJlcn0gaWQgVGhlIElEIHRoYXQgd2FzIHJldHVybmVkIGJ5IGB1c2VgXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZWplY3QoaWQpIHtcbiAgICBpZiAodGhpcy5oYW5kbGVyc1tpZF0pIHtcbiAgICAgIHRoaXMuaGFuZGxlcnNbaWRdID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgYWxsIGludGVyY2VwdG9ycyBmcm9tIHRoZSBzdGFja1xuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGNsZWFyKCkge1xuICAgIGlmICh0aGlzLmhhbmRsZXJzKSB7XG4gICAgICB0aGlzLmhhbmRsZXJzID0gW107XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGUgb3ZlciBhbGwgdGhlIHJlZ2lzdGVyZWQgaW50ZXJjZXB0b3JzXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIHNraXBwaW5nIG92ZXIgYW55XG4gICAqIGludGVyY2VwdG9ycyB0aGF0IG1heSBoYXZlIGJlY29tZSBgbnVsbGAgY2FsbGluZyBgZWplY3RgLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBpbnRlcmNlcHRvclxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGZvckVhY2goZm4pIHtcbiAgICB1dGlscy5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsIGZ1bmN0aW9uIGZvckVhY2hIYW5kbGVyKGgpIHtcbiAgICAgIGlmIChoICE9PSBudWxsKSB7XG4gICAgICAgIGZuKGgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEludGVyY2VwdG9yTWFuYWdlcjtcbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBzaWxlbnRKU09OUGFyc2luZzogdHJ1ZSxcbiAgZm9yY2VkSlNPTlBhcnNpbmc6IHRydWUsXG4gIGNsYXJpZnlUaW1lb3V0RXJyb3I6IGZhbHNlLFxuICBsZWdhY3lJbnRlcmNlcHRvclJlcVJlc09yZGVyaW5nOiB0cnVlLFxuICBhZHZlcnRpc2Vac3RkQWNjZXB0RW5jb2Rpbmc6IGZhbHNlLFxufTtcbiIsImltcG9ydCBVUkxTZWFyY2hQYXJhbXMgZnJvbSAnLi9jbGFzc2VzL1VSTFNlYXJjaFBhcmFtcy5qcyc7XG5pbXBvcnQgRm9ybURhdGEgZnJvbSAnLi9jbGFzc2VzL0Zvcm1EYXRhLmpzJztcbmltcG9ydCBCbG9iIGZyb20gJy4vY2xhc3Nlcy9CbG9iLmpzJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBpc0Jyb3dzZXI6IHRydWUsXG4gIGNsYXNzZXM6IHtcbiAgICBVUkxTZWFyY2hQYXJhbXMsXG4gICAgRm9ybURhdGEsXG4gICAgQmxvYixcbiAgfSxcbiAgcHJvdG9jb2xzOiBbJ2h0dHAnLCAnaHR0cHMnLCAnZmlsZScsICdibG9iJywgJ3VybCcsICdkYXRhJ10sXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgQXhpb3NVUkxTZWFyY2hQYXJhbXMgZnJvbSAnLi4vLi4vLi4vaGVscGVycy9BeGlvc1VSTFNlYXJjaFBhcmFtcy5qcyc7XG5leHBvcnQgZGVmYXVsdCB0eXBlb2YgVVJMU2VhcmNoUGFyYW1zICE9PSAndW5kZWZpbmVkJyA/IFVSTFNlYXJjaFBhcmFtcyA6IEF4aW9zVVJMU2VhcmNoUGFyYW1zO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgZGVmYXVsdCB0eXBlb2YgRm9ybURhdGEgIT09ICd1bmRlZmluZWQnID8gRm9ybURhdGEgOiBudWxsO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgZGVmYXVsdCB0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcgPyBCbG9iIDogbnVsbDtcbiIsImNvbnN0IGhhc0Jyb3dzZXJFbnYgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnO1xuXG5jb25zdCBfbmF2aWdhdG9yID0gKHR5cGVvZiBuYXZpZ2F0b3IgPT09ICdvYmplY3QnICYmIG5hdmlnYXRvcikgfHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIERldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudFxuICpcbiAqIFRoaXMgYWxsb3dzIGF4aW9zIHRvIHJ1biBpbiBhIHdlYiB3b3JrZXIsIGFuZCByZWFjdC1uYXRpdmUuXG4gKiBCb3RoIGVudmlyb25tZW50cyBzdXBwb3J0IFhNTEh0dHBSZXF1ZXN0LCBidXQgbm90IGZ1bGx5IHN0YW5kYXJkIGdsb2JhbHMuXG4gKlxuICogd2ViIHdvcmtlcnM6XG4gKiAgdHlwZW9mIHdpbmRvdyAtPiB1bmRlZmluZWRcbiAqICB0eXBlb2YgZG9jdW1lbnQgLT4gdW5kZWZpbmVkXG4gKlxuICogcmVhY3QtbmF0aXZlOlxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdSZWFjdE5hdGl2ZSdcbiAqIG5hdGl2ZXNjcmlwdFxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdOYXRpdmVTY3JpcHQnIG9yICdOUydcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuY29uc3QgaGFzU3RhbmRhcmRCcm93c2VyRW52ID1cbiAgaGFzQnJvd3NlckVudiAmJlxuICAoIV9uYXZpZ2F0b3IgfHwgWydSZWFjdE5hdGl2ZScsICdOYXRpdmVTY3JpcHQnLCAnTlMnXS5pbmRleE9mKF9uYXZpZ2F0b3IucHJvZHVjdCkgPCAwKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgd2UncmUgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgd2ViV29ya2VyIGVudmlyb25tZW50XG4gKlxuICogQWx0aG91Z2ggdGhlIGBpc1N0YW5kYXJkQnJvd3NlckVudmAgbWV0aG9kIGluZGljYXRlcyB0aGF0XG4gKiBgYWxsb3dzIGF4aW9zIHRvIHJ1biBpbiBhIHdlYiB3b3JrZXJgLCB0aGUgV2ViV29ya2VyIHdpbGwgc3RpbGwgYmVcbiAqIGZpbHRlcmVkIG91dCBkdWUgdG8gaXRzIGp1ZGdtZW50IHN0YW5kYXJkXG4gKiBgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJ2AuXG4gKiBUaGlzIGxlYWRzIHRvIGEgcHJvYmxlbSB3aGVuIGF4aW9zIHBvc3QgYEZvcm1EYXRhYCBpbiB3ZWJXb3JrZXJcbiAqL1xuY29uc3QgaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52ID0gKCgpID0+IHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICAgc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlICYmXG4gICAgdHlwZW9mIHNlbGYuaW1wb3J0U2NyaXB0cyA9PT0gJ2Z1bmN0aW9uJ1xuICApO1xufSkoKTtcblxuY29uc3Qgb3JpZ2luID0gKGhhc0Jyb3dzZXJFbnYgJiYgd2luZG93LmxvY2F0aW9uLmhyZWYpIHx8ICdodHRwOi8vbG9jYWxob3N0JztcblxuZXhwb3J0IHtcbiAgaGFzQnJvd3NlckVudixcbiAgaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52LFxuICBoYXNTdGFuZGFyZEJyb3dzZXJFbnYsXG4gIF9uYXZpZ2F0b3IgYXMgbmF2aWdhdG9yLFxuICBvcmlnaW4sXG59O1xuIiwiaW1wb3J0IHBsYXRmb3JtIGZyb20gJy4vbm9kZS9pbmRleC5qcyc7XG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tICcuL2NvbW1vbi91dGlscy5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgLi4udXRpbHMsXG4gIC4uLnBsYXRmb3JtLFxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcblxuLyoqXG4gKiBJdCB0YWtlcyBhIHN0cmluZyBsaWtlIGBmb29beF1beV1bel1gIGFuZCByZXR1cm5zIGFuIGFycmF5IGxpa2UgYFsnZm9vJywgJ3gnLCAneScsICd6J11cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKlxuICogQHJldHVybnMgQW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAqL1xuZnVuY3Rpb24gcGFyc2VQcm9wUGF0aChuYW1lKSB7XG4gIC8vIGZvb1t4XVt5XVt6XVxuICAvLyBmb28ueC55LnpcbiAgLy8gZm9vLXgteS16XG4gIC8vIGZvbyB4IHkgelxuICByZXR1cm4gdXRpbHMubWF0Y2hBbGwoL1xcdyt8XFxbKFxcdyopXS9nLCBuYW1lKS5tYXAoKG1hdGNoKSA9PiB7XG4gICAgcmV0dXJuIG1hdGNoWzBdID09PSAnW10nID8gJycgOiBtYXRjaFsxXSB8fCBtYXRjaFswXTtcbiAgfSk7XG59XG5cbi8qKlxuICogQ29udmVydCBhbiBhcnJheSB0byBhbiBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtBcnJheTxhbnk+fSBhcnIgLSBUaGUgYXJyYXkgdG8gY29udmVydCB0byBhbiBvYmplY3QuXG4gKlxuICogQHJldHVybnMgQW4gb2JqZWN0IHdpdGggdGhlIHNhbWUga2V5cyBhbmQgdmFsdWVzIGFzIHRoZSBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlUb09iamVjdChhcnIpIHtcbiAgY29uc3Qgb2JqID0ge307XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhhcnIpO1xuICBsZXQgaTtcbiAgY29uc3QgbGVuID0ga2V5cy5sZW5ndGg7XG4gIGxldCBrZXk7XG4gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIGtleSA9IGtleXNbaV07XG4gICAgb2JqW2tleV0gPSBhcnJba2V5XTtcbiAgfVxuICByZXR1cm4gb2JqO1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgRm9ybURhdGEgb2JqZWN0IGFuZCByZXR1cm5zIGEgSmF2YVNjcmlwdCBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9ybURhdGEgVGhlIEZvcm1EYXRhIG9iamVjdCB0byBjb252ZXJ0IHRvIEpTT04uXG4gKlxuICogQHJldHVybnMge09iamVjdDxzdHJpbmcsIGFueT4gfCBudWxsfSBUaGUgY29udmVydGVkIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gZm9ybURhdGFUb0pTT04oZm9ybURhdGEpIHtcbiAgZnVuY3Rpb24gYnVpbGRQYXRoKHBhdGgsIHZhbHVlLCB0YXJnZXQsIGluZGV4KSB7XG4gICAgbGV0IG5hbWUgPSBwYXRoW2luZGV4KytdO1xuXG4gICAgaWYgKG5hbWUgPT09ICdfX3Byb3RvX18nKSByZXR1cm4gdHJ1ZTtcblxuICAgIGNvbnN0IGlzTnVtZXJpY0tleSA9IE51bWJlci5pc0Zpbml0ZSgrbmFtZSk7XG4gICAgY29uc3QgaXNMYXN0ID0gaW5kZXggPj0gcGF0aC5sZW5ndGg7XG4gICAgbmFtZSA9ICFuYW1lICYmIHV0aWxzLmlzQXJyYXkodGFyZ2V0KSA/IHRhcmdldC5sZW5ndGggOiBuYW1lO1xuXG4gICAgaWYgKGlzTGFzdCkge1xuICAgICAgaWYgKHV0aWxzLmhhc093blByb3AodGFyZ2V0LCBuYW1lKSkge1xuICAgICAgICB0YXJnZXRbbmFtZV0gPSB1dGlscy5pc0FycmF5KHRhcmdldFtuYW1lXSlcbiAgICAgICAgICA/IHRhcmdldFtuYW1lXS5jb25jYXQodmFsdWUpXG4gICAgICAgICAgOiBbdGFyZ2V0W25hbWVdLCB2YWx1ZV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXRbbmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICFpc051bWVyaWNLZXk7XG4gICAgfVxuXG4gICAgaWYgKCF1dGlscy5oYXNPd25Qcm9wKHRhcmdldCwgbmFtZSkgfHwgIXV0aWxzLmlzT2JqZWN0KHRhcmdldFtuYW1lXSkpIHtcbiAgICAgIHRhcmdldFtuYW1lXSA9IFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGJ1aWxkUGF0aChwYXRoLCB2YWx1ZSwgdGFyZ2V0W25hbWVdLCBpbmRleCk7XG5cbiAgICBpZiAocmVzdWx0ICYmIHV0aWxzLmlzQXJyYXkodGFyZ2V0W25hbWVdKSkge1xuICAgICAgdGFyZ2V0W25hbWVdID0gYXJyYXlUb09iamVjdCh0YXJnZXRbbmFtZV0pO1xuICAgIH1cblxuICAgIHJldHVybiAhaXNOdW1lcmljS2V5O1xuICB9XG5cbiAgaWYgKHV0aWxzLmlzRm9ybURhdGEoZm9ybURhdGEpICYmIHV0aWxzLmlzRnVuY3Rpb24oZm9ybURhdGEuZW50cmllcykpIHtcbiAgICBjb25zdCBvYmogPSB7fTtcblxuICAgIHV0aWxzLmZvckVhY2hFbnRyeShmb3JtRGF0YSwgKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgICBidWlsZFBhdGgocGFyc2VQcm9wUGF0aChuYW1lKSwgdmFsdWUsIG9iaiwgMCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZvcm1EYXRhVG9KU09OO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcbmltcG9ydCB0cmFuc2l0aW9uYWxEZWZhdWx0cyBmcm9tICcuL3RyYW5zaXRpb25hbC5qcyc7XG5pbXBvcnQgdG9Gb3JtRGF0YSBmcm9tICcuLi9oZWxwZXJzL3RvRm9ybURhdGEuanMnO1xuaW1wb3J0IHRvVVJMRW5jb2RlZEZvcm0gZnJvbSAnLi4vaGVscGVycy90b1VSTEVuY29kZWRGb3JtLmpzJztcbmltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5pbXBvcnQgZm9ybURhdGFUb0pTT04gZnJvbSAnLi4vaGVscGVycy9mb3JtRGF0YVRvSlNPTi5qcyc7XG5cbmNvbnN0IG93biA9IChvYmosIGtleSkgPT4gKG9iaiAhPSBudWxsICYmIHV0aWxzLmhhc093blByb3Aob2JqLCBrZXkpID8gb2JqW2tleV0gOiB1bmRlZmluZWQpO1xuXG4vKipcbiAqIEl0IHRha2VzIGEgc3RyaW5nLCB0cmllcyB0byBwYXJzZSBpdCwgYW5kIGlmIGl0IGZhaWxzLCBpdCByZXR1cm5zIHRoZSBzdHJpbmdpZmllZCB2ZXJzaW9uXG4gKiBvZiB0aGUgaW5wdXRcbiAqXG4gKiBAcGFyYW0ge2FueX0gcmF3VmFsdWUgLSBUaGUgdmFsdWUgdG8gYmUgc3RyaW5naWZpZWQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwYXJzZXIgLSBBIGZ1bmN0aW9uIHRoYXQgcGFyc2VzIGEgc3RyaW5nIGludG8gYSBKYXZhU2NyaXB0IG9iamVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVuY29kZXIgLSBBIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSB2YWx1ZSBhbmQgcmV0dXJucyBhIHN0cmluZy5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIHN0cmluZ2lmaWVkIHZlcnNpb24gb2YgdGhlIHJhd1ZhbHVlLlxuICovXG5mdW5jdGlvbiBzdHJpbmdpZnlTYWZlbHkocmF3VmFsdWUsIHBhcnNlciwgZW5jb2Rlcikge1xuICBpZiAodXRpbHMuaXNTdHJpbmcocmF3VmFsdWUpKSB7XG4gICAgdHJ5IHtcbiAgICAgIChwYXJzZXIgfHwgSlNPTi5wYXJzZSkocmF3VmFsdWUpO1xuICAgICAgcmV0dXJuIHV0aWxzLnRyaW0ocmF3VmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlLm5hbWUgIT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gKGVuY29kZXIgfHwgSlNPTi5zdHJpbmdpZnkpKHJhd1ZhbHVlKTtcbn1cblxuY29uc3QgZGVmYXVsdHMgPSB7XG4gIHRyYW5zaXRpb25hbDogdHJhbnNpdGlvbmFsRGVmYXVsdHMsXG5cbiAgYWRhcHRlcjogWyd4aHInLCAnaHR0cCcsICdmZXRjaCddLFxuXG4gIHRyYW5zZm9ybVJlcXVlc3Q6IFtcbiAgICBmdW5jdGlvbiB0cmFuc2Zvcm1SZXF1ZXN0KGRhdGEsIGhlYWRlcnMpIHtcbiAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gaGVhZGVycy5nZXRDb250ZW50VHlwZSgpIHx8ICcnO1xuICAgICAgY29uc3QgaGFzSlNPTkNvbnRlbnRUeXBlID0gY29udGVudFR5cGUuaW5kZXhPZignYXBwbGljYXRpb24vanNvbicpID4gLTE7XG4gICAgICBjb25zdCBpc09iamVjdFBheWxvYWQgPSB1dGlscy5pc09iamVjdChkYXRhKTtcblxuICAgICAgaWYgKGlzT2JqZWN0UGF5bG9hZCAmJiB1dGlscy5pc0hUTUxGb3JtKGRhdGEpKSB7XG4gICAgICAgIGRhdGEgPSBuZXcgRm9ybURhdGEoZGF0YSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlzRm9ybURhdGEgPSB1dGlscy5pc0Zvcm1EYXRhKGRhdGEpO1xuXG4gICAgICBpZiAoaXNGb3JtRGF0YSkge1xuICAgICAgICByZXR1cm4gaGFzSlNPTkNvbnRlbnRUeXBlID8gSlNPTi5zdHJpbmdpZnkoZm9ybURhdGFUb0pTT04oZGF0YSkpIDogZGF0YTtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICB1dGlscy5pc0FycmF5QnVmZmVyKGRhdGEpIHx8XG4gICAgICAgIHV0aWxzLmlzQnVmZmVyKGRhdGEpIHx8XG4gICAgICAgIHV0aWxzLmlzU3RyZWFtKGRhdGEpIHx8XG4gICAgICAgIHV0aWxzLmlzRmlsZShkYXRhKSB8fFxuICAgICAgICB1dGlscy5pc0Jsb2IoZGF0YSkgfHxcbiAgICAgICAgdXRpbHMuaXNSZWFkYWJsZVN0cmVhbShkYXRhKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgfVxuICAgICAgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXJWaWV3KGRhdGEpKSB7XG4gICAgICAgIHJldHVybiBkYXRhLmJ1ZmZlcjtcbiAgICAgIH1cbiAgICAgIGlmICh1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhkYXRhKSkge1xuICAgICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKCdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCcsIGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIGRhdGEudG9TdHJpbmcoKTtcbiAgICAgIH1cblxuICAgICAgbGV0IGlzRmlsZUxpc3Q7XG5cbiAgICAgIGlmIChpc09iamVjdFBheWxvYWQpIHtcbiAgICAgICAgY29uc3QgZm9ybVNlcmlhbGl6ZXIgPSBvd24odGhpcywgJ2Zvcm1TZXJpYWxpemVyJyk7XG4gICAgICAgIGlmIChjb250ZW50VHlwZS5pbmRleE9mKCdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKSA+IC0xKSB7XG4gICAgICAgICAgcmV0dXJuIHRvVVJMRW5jb2RlZEZvcm0oZGF0YSwgZm9ybVNlcmlhbGl6ZXIpLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgKGlzRmlsZUxpc3QgPSB1dGlscy5pc0ZpbGVMaXN0KGRhdGEpKSB8fFxuICAgICAgICAgIGNvbnRlbnRUeXBlLmluZGV4T2YoJ211bHRpcGFydC9mb3JtLWRhdGEnKSA+IC0xXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IGVudiA9IG93bih0aGlzLCAnZW52Jyk7XG4gICAgICAgICAgY29uc3QgX0Zvcm1EYXRhID0gZW52ICYmIGVudi5Gb3JtRGF0YTtcblxuICAgICAgICAgIHJldHVybiB0b0Zvcm1EYXRhKFxuICAgICAgICAgICAgaXNGaWxlTGlzdCA/IHsgJ2ZpbGVzW10nOiBkYXRhIH0gOiBkYXRhLFxuICAgICAgICAgICAgX0Zvcm1EYXRhICYmIG5ldyBfRm9ybURhdGEoKSxcbiAgICAgICAgICAgIGZvcm1TZXJpYWxpemVyXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaXNPYmplY3RQYXlsb2FkIHx8IGhhc0pTT05Db250ZW50VHlwZSkge1xuICAgICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKCdhcHBsaWNhdGlvbi9qc29uJywgZmFsc2UpO1xuICAgICAgICByZXR1cm4gc3RyaW5naWZ5U2FmZWx5KGRhdGEpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9LFxuICBdLFxuXG4gIHRyYW5zZm9ybVJlc3BvbnNlOiBbXG4gICAgZnVuY3Rpb24gdHJhbnNmb3JtUmVzcG9uc2UoZGF0YSkge1xuICAgICAgY29uc3QgdHJhbnNpdGlvbmFsID0gb3duKHRoaXMsICd0cmFuc2l0aW9uYWwnKSB8fCBkZWZhdWx0cy50cmFuc2l0aW9uYWw7XG4gICAgICBjb25zdCBmb3JjZWRKU09OUGFyc2luZyA9IHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwuZm9yY2VkSlNPTlBhcnNpbmc7XG4gICAgICBjb25zdCByZXNwb25zZVR5cGUgPSBvd24odGhpcywgJ3Jlc3BvbnNlVHlwZScpO1xuICAgICAgY29uc3QgSlNPTlJlcXVlc3RlZCA9IHJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nO1xuXG4gICAgICBpZiAodXRpbHMuaXNSZXNwb25zZShkYXRhKSB8fCB1dGlscy5pc1JlYWRhYmxlU3RyZWFtKGRhdGEpKSB7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIGRhdGEgJiZcbiAgICAgICAgdXRpbHMuaXNTdHJpbmcoZGF0YSkgJiZcbiAgICAgICAgKChmb3JjZWRKU09OUGFyc2luZyAmJiAhcmVzcG9uc2VUeXBlKSB8fCBKU09OUmVxdWVzdGVkKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IHNpbGVudEpTT05QYXJzaW5nID0gdHJhbnNpdGlvbmFsICYmIHRyYW5zaXRpb25hbC5zaWxlbnRKU09OUGFyc2luZztcbiAgICAgICAgY29uc3Qgc3RyaWN0SlNPTlBhcnNpbmcgPSAhc2lsZW50SlNPTlBhcnNpbmcgJiYgSlNPTlJlcXVlc3RlZDtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKGRhdGEsIG93bih0aGlzLCAncGFyc2VSZXZpdmVyJykpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgaWYgKHN0cmljdEpTT05QYXJzaW5nKSB7XG4gICAgICAgICAgICBpZiAoZS5uYW1lID09PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgICAgICAgIHRocm93IEF4aW9zRXJyb3IuZnJvbShlLCBBeGlvc0Vycm9yLkVSUl9CQURfUkVTUE9OU0UsIHRoaXMsIG51bGwsIG93bih0aGlzLCAncmVzcG9uc2UnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9LFxuICBdLFxuXG4gIC8qKlxuICAgKiBBIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIHRvIGFib3J0IGEgcmVxdWVzdC4gSWYgc2V0IHRvIDAgKGRlZmF1bHQpIGFcbiAgICogdGltZW91dCBpcyBub3QgY3JlYXRlZC5cbiAgICovXG4gIHRpbWVvdXQ6IDAsXG5cbiAgeHNyZkNvb2tpZU5hbWU6ICdYU1JGLVRPS0VOJyxcbiAgeHNyZkhlYWRlck5hbWU6ICdYLVhTUkYtVE9LRU4nLFxuXG4gIG1heENvbnRlbnRMZW5ndGg6IC0xLFxuICBtYXhCb2R5TGVuZ3RoOiAtMSxcblxuICBlbnY6IHtcbiAgICBGb3JtRGF0YTogcGxhdGZvcm0uY2xhc3Nlcy5Gb3JtRGF0YSxcbiAgICBCbG9iOiBwbGF0Zm9ybS5jbGFzc2VzLkJsb2IsXG4gIH0sXG5cbiAgdmFsaWRhdGVTdGF0dXM6IGZ1bmN0aW9uIHZhbGlkYXRlU3RhdHVzKHN0YXR1cykge1xuICAgIHJldHVybiBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMDtcbiAgfSxcblxuICBoZWFkZXJzOiB7XG4gICAgY29tbW9uOiB7XG4gICAgICBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyonLFxuICAgICAgJ0NvbnRlbnQtVHlwZSc6IHVuZGVmaW5lZCxcbiAgICB9LFxuICB9LFxufTtcblxudXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdwb3N0JywgJ3B1dCcsICdwYXRjaCcsICdxdWVyeSddLCAobWV0aG9kKSA9PiB7XG4gIGRlZmF1bHRzLmhlYWRlcnNbbWV0aG9kXSA9IHt9O1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRzO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IHRvRm9ybURhdGEgZnJvbSAnLi90b0Zvcm1EYXRhLmpzJztcbmltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvVVJMRW5jb2RlZEZvcm0oZGF0YSwgb3B0aW9ucykge1xuICByZXR1cm4gdG9Gb3JtRGF0YShkYXRhLCBuZXcgcGxhdGZvcm0uY2xhc3Nlcy5VUkxTZWFyY2hQYXJhbXMoKSwge1xuICAgIHZpc2l0b3I6IGZ1bmN0aW9uICh2YWx1ZSwga2V5LCBwYXRoLCBoZWxwZXJzKSB7XG4gICAgICBpZiAocGxhdGZvcm0uaXNOb2RlICYmIHV0aWxzLmlzQnVmZmVyKHZhbHVlKSkge1xuICAgICAgICB0aGlzLmFwcGVuZChrZXksIHZhbHVlLnRvU3RyaW5nKCdiYXNlNjQnKSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGhlbHBlcnMuZGVmYXVsdFZpc2l0b3IuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IGRlZmF1bHRzIGZyb20gJy4uL2RlZmF1bHRzL2luZGV4LmpzJztcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSAnLi4vY29yZS9BeGlvc0hlYWRlcnMuanMnO1xuXG4vKipcbiAqIFRyYW5zZm9ybSB0aGUgZGF0YSBmb3IgYSByZXF1ZXN0IG9yIGEgcmVzcG9uc2VcbiAqXG4gKiBAcGFyYW0ge0FycmF5fEZ1bmN0aW9ufSBmbnMgQSBzaW5nbGUgZnVuY3Rpb24gb3IgQXJyYXkgb2YgZnVuY3Rpb25zXG4gKiBAcGFyYW0gez9PYmplY3R9IHJlc3BvbnNlIFRoZSByZXNwb25zZSBvYmplY3RcbiAqXG4gKiBAcmV0dXJucyB7Kn0gVGhlIHJlc3VsdGluZyB0cmFuc2Zvcm1lZCBkYXRhXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRyYW5zZm9ybURhdGEoZm5zLCByZXNwb25zZSkge1xuICBjb25zdCBjb25maWcgPSB0aGlzIHx8IGRlZmF1bHRzO1xuICBjb25zdCBjb250ZXh0ID0gcmVzcG9uc2UgfHwgY29uZmlnO1xuICBjb25zdCBoZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20oY29udGV4dC5oZWFkZXJzKTtcbiAgbGV0IGRhdGEgPSBjb250ZXh0LmRhdGE7XG5cbiAgdXRpbHMuZm9yRWFjaChmbnMsIGZ1bmN0aW9uIHRyYW5zZm9ybShmbikge1xuICAgIGRhdGEgPSBmbi5jYWxsKGNvbmZpZywgZGF0YSwgaGVhZGVycy5ub3JtYWxpemUoKSwgcmVzcG9uc2UgPyByZXNwb25zZS5zdGF0dXMgOiB1bmRlZmluZWQpO1xuICB9KTtcblxuICBoZWFkZXJzLm5vcm1hbGl6ZSgpO1xuXG4gIHJldHVybiBkYXRhO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0NhbmNlbCh2YWx1ZSkge1xuICByZXR1cm4gISEodmFsdWUgJiYgdmFsdWUuX19DQU5DRUxfXyk7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4uL2NvcmUvQXhpb3NFcnJvci5qcyc7XG5cbmNsYXNzIENhbmNlbGVkRXJyb3IgZXh0ZW5kcyBBeGlvc0Vycm9yIHtcbiAgLyoqXG4gICAqIEEgYENhbmNlbGVkRXJyb3JgIGlzIGFuIG9iamVjdCB0aGF0IGlzIHRocm93biB3aGVuIGFuIG9wZXJhdGlvbiBpcyBjYW5jZWxlZC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmc9fSBtZXNzYWdlIFRoZSBtZXNzYWdlLlxuICAgKiBAcGFyYW0ge09iamVjdD19IGNvbmZpZyBUaGUgY29uZmlnLlxuICAgKiBAcGFyYW0ge09iamVjdD19IHJlcXVlc3QgVGhlIHJlcXVlc3QuXG4gICAqXG4gICAqIEByZXR1cm5zIHtDYW5jZWxlZEVycm9yfSBUaGUgY3JlYXRlZCBlcnJvci5cbiAgICovXG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UsIGNvbmZpZywgcmVxdWVzdCkge1xuICAgIHN1cGVyKG1lc3NhZ2UgPT0gbnVsbCA/ICdjYW5jZWxlZCcgOiBtZXNzYWdlLCBBeGlvc0Vycm9yLkVSUl9DQU5DRUxFRCwgY29uZmlnLCByZXF1ZXN0KTtcbiAgICB0aGlzLm5hbWUgPSAnQ2FuY2VsZWRFcnJvcic7XG4gICAgdGhpcy5fX0NBTkNFTF9fID0gdHJ1ZTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDYW5jZWxlZEVycm9yO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuL0F4aW9zRXJyb3IuanMnO1xuXG4vKipcbiAqIFJlc29sdmUgb3IgcmVqZWN0IGEgUHJvbWlzZSBiYXNlZCBvbiByZXNwb25zZSBzdGF0dXMuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVzb2x2ZSBBIGZ1bmN0aW9uIHRoYXQgcmVzb2x2ZXMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3QgQSBmdW5jdGlvbiB0aGF0IHJlamVjdHMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge29iamVjdH0gcmVzcG9uc2UgVGhlIHJlc3BvbnNlLlxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9IFRoZSByZXNwb25zZS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgcmVzcG9uc2UpIHtcbiAgY29uc3QgdmFsaWRhdGVTdGF0dXMgPSByZXNwb25zZS5jb25maWcudmFsaWRhdGVTdGF0dXM7XG4gIGlmICghcmVzcG9uc2Uuc3RhdHVzIHx8ICF2YWxpZGF0ZVN0YXR1cyB8fCB2YWxpZGF0ZVN0YXR1cyhyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gIH0gZWxzZSB7XG4gICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgJ1JlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgJyArIHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIHJlc3BvbnNlLnN0YXR1cyA+PSA0MDAgJiYgcmVzcG9uc2Uuc3RhdHVzIDwgNTAwID8gQXhpb3NFcnJvci5FUlJfQkFEX1JFUVVFU1QgOiBBeGlvc0Vycm9yLkVSUl9CQURfUkVTUE9OU0UsXG4gICAgICByZXNwb25zZS5jb25maWcsXG4gICAgICByZXNwb25zZS5yZXF1ZXN0LFxuICAgICAgcmVzcG9uc2VcbiAgICApKTtcbiAgfVxufVxuIiwiaW1wb3J0IHNwZWVkb21ldGVyIGZyb20gJy4vc3BlZWRvbWV0ZXIuanMnO1xuaW1wb3J0IHRocm90dGxlIGZyb20gJy4vdGhyb3R0bGUuanMnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcblxuZXhwb3J0IGNvbnN0IHByb2dyZXNzRXZlbnRSZWR1Y2VyID0gKGxpc3RlbmVyLCBpc0Rvd25sb2FkU3RyZWFtLCBmcmVxID0gMykgPT4ge1xuICBsZXQgYnl0ZXNOb3RpZmllZCA9IDA7XG4gIGNvbnN0IF9zcGVlZG9tZXRlciA9IHNwZWVkb21ldGVyKDUwLCAyNTApO1xuXG4gIHJldHVybiB0aHJvdHRsZSgoZSkgPT4ge1xuICAgIGlmICghZSB8fCB0eXBlb2YgZS5sb2FkZWQgIT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJhd0xvYWRlZCA9IGUubG9hZGVkO1xuICAgIGNvbnN0IHRvdGFsID0gZS5sZW5ndGhDb21wdXRhYmxlID8gZS50b3RhbCA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBsb2FkZWQgPSB0b3RhbCAhPSBudWxsID8gTWF0aC5taW4ocmF3TG9hZGVkLCB0b3RhbCkgOiByYXdMb2FkZWQ7XG4gICAgY29uc3QgcHJvZ3Jlc3NCeXRlcyA9IE1hdGgubWF4KDAsIGxvYWRlZCAtIGJ5dGVzTm90aWZpZWQpO1xuICAgIGNvbnN0IHJhdGUgPSBfc3BlZWRvbWV0ZXIocHJvZ3Jlc3NCeXRlcyk7XG5cbiAgICBieXRlc05vdGlmaWVkID0gTWF0aC5tYXgoYnl0ZXNOb3RpZmllZCwgbG9hZGVkKTtcblxuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBsb2FkZWQsXG4gICAgICB0b3RhbCxcbiAgICAgIHByb2dyZXNzOiB0b3RhbCA/IGxvYWRlZCAvIHRvdGFsIDogdW5kZWZpbmVkLFxuICAgICAgYnl0ZXM6IHByb2dyZXNzQnl0ZXMsXG4gICAgICByYXRlOiByYXRlID8gcmF0ZSA6IHVuZGVmaW5lZCxcbiAgICAgIGVzdGltYXRlZDogcmF0ZSAmJiB0b3RhbCA/ICh0b3RhbCAtIGxvYWRlZCkgLyByYXRlIDogdW5kZWZpbmVkLFxuICAgICAgZXZlbnQ6IGUsXG4gICAgICBsZW5ndGhDb21wdXRhYmxlOiB0b3RhbCAhPSBudWxsLFxuICAgICAgW2lzRG93bmxvYWRTdHJlYW0gPyAnZG93bmxvYWQnIDogJ3VwbG9hZCddOiB0cnVlLFxuICAgIH07XG5cbiAgICBsaXN0ZW5lcihkYXRhKTtcbiAgfSwgZnJlcSk7XG59O1xuXG5leHBvcnQgY29uc3QgcHJvZ3Jlc3NFdmVudERlY29yYXRvciA9ICh0b3RhbCwgdGhyb3R0bGVkKSA9PiB7XG4gIGNvbnN0IGxlbmd0aENvbXB1dGFibGUgPSB0b3RhbCAhPSBudWxsO1xuXG4gIHJldHVybiBbXG4gICAgKGxvYWRlZCkgPT5cbiAgICAgIHRocm90dGxlZFswXSh7XG4gICAgICAgIGxlbmd0aENvbXB1dGFibGUsXG4gICAgICAgIHRvdGFsLFxuICAgICAgICBsb2FkZWQsXG4gICAgICB9KSxcbiAgICB0aHJvdHRsZWRbMV0sXG4gIF07XG59O1xuXG5leHBvcnQgY29uc3QgYXN5bmNEZWNvcmF0b3IgPVxuICAoZm4pID0+XG4gICguLi5hcmdzKSA9PlxuICAgIHV0aWxzLmFzYXAoKCkgPT4gZm4oLi4uYXJncykpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENhbGN1bGF0ZSBkYXRhIG1heFJhdGVcbiAqIEBwYXJhbSB7TnVtYmVyfSBbc2FtcGxlc0NvdW50PSAxMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSBbbWluPSAxMDAwXVxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBzcGVlZG9tZXRlcihzYW1wbGVzQ291bnQsIG1pbikge1xuICBzYW1wbGVzQ291bnQgPSBzYW1wbGVzQ291bnQgfHwgMTA7XG4gIGNvbnN0IGJ5dGVzID0gbmV3IEFycmF5KHNhbXBsZXNDb3VudCk7XG4gIGNvbnN0IHRpbWVzdGFtcHMgPSBuZXcgQXJyYXkoc2FtcGxlc0NvdW50KTtcbiAgbGV0IGhlYWQgPSAwO1xuICBsZXQgdGFpbCA9IDA7XG4gIGxldCBmaXJzdFNhbXBsZVRTO1xuXG4gIG1pbiA9IG1pbiAhPT0gdW5kZWZpbmVkID8gbWluIDogMTAwMDtcblxuICByZXR1cm4gZnVuY3Rpb24gcHVzaChjaHVua0xlbmd0aCkge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICBjb25zdCBzdGFydGVkQXQgPSB0aW1lc3RhbXBzW3RhaWxdO1xuXG4gICAgaWYgKCFmaXJzdFNhbXBsZVRTKSB7XG4gICAgICBmaXJzdFNhbXBsZVRTID0gbm93O1xuICAgIH1cblxuICAgIGJ5dGVzW2hlYWRdID0gY2h1bmtMZW5ndGg7XG4gICAgdGltZXN0YW1wc1toZWFkXSA9IG5vdztcblxuICAgIGxldCBpID0gdGFpbDtcbiAgICBsZXQgYnl0ZXNDb3VudCA9IDA7XG5cbiAgICB3aGlsZSAoaSAhPT0gaGVhZCkge1xuICAgICAgYnl0ZXNDb3VudCArPSBieXRlc1tpKytdO1xuICAgICAgaSA9IGkgJSBzYW1wbGVzQ291bnQ7XG4gICAgfVxuXG4gICAgaGVhZCA9IChoZWFkICsgMSkgJSBzYW1wbGVzQ291bnQ7XG5cbiAgICBpZiAoaGVhZCA9PT0gdGFpbCkge1xuICAgICAgdGFpbCA9ICh0YWlsICsgMSkgJSBzYW1wbGVzQ291bnQ7XG4gICAgfVxuXG4gICAgaWYgKG5vdyAtIGZpcnN0U2FtcGxlVFMgPCBtaW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXNzZWQgPSBzdGFydGVkQXQgJiYgbm93IC0gc3RhcnRlZEF0O1xuXG4gICAgcmV0dXJuIHBhc3NlZCA/IE1hdGgucm91bmQoKGJ5dGVzQ291bnQgKiAxMDAwKSAvIHBhc3NlZCkgOiB1bmRlZmluZWQ7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNwZWVkb21ldGVyO1xuIiwiLyoqXG4gKiBUaHJvdHRsZSBkZWNvcmF0b3JcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcGFyYW0ge051bWJlcn0gZnJlcVxuICogQHJldHVybiB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIHRocm90dGxlKGZuLCBmcmVxKSB7XG4gIGxldCB0aW1lc3RhbXAgPSAwO1xuICBsZXQgdGhyZXNob2xkID0gMTAwMCAvIGZyZXE7XG4gIGxldCBsYXN0QXJncztcbiAgbGV0IHRpbWVyO1xuXG4gIGNvbnN0IGludm9rZSA9IChhcmdzLCBub3cgPSBEYXRlLm5vdygpKSA9PiB7XG4gICAgdGltZXN0YW1wID0gbm93O1xuICAgIGxhc3RBcmdzID0gbnVsbDtcbiAgICBpZiAodGltZXIpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICB0aW1lciA9IG51bGw7XG4gICAgfVxuICAgIGZuKC4uLmFyZ3MpO1xuICB9O1xuXG4gIGNvbnN0IHRocm90dGxlZCA9ICguLi5hcmdzKSA9PiB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBwYXNzZWQgPSBub3cgLSB0aW1lc3RhbXA7XG4gICAgaWYgKHBhc3NlZCA+PSB0aHJlc2hvbGQpIHtcbiAgICAgIGludm9rZShhcmdzLCBub3cpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsYXN0QXJncyA9IGFyZ3M7XG4gICAgICBpZiAoIXRpbWVyKSB7XG4gICAgICAgIHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGltZXIgPSBudWxsO1xuICAgICAgICAgIGludm9rZShsYXN0QXJncyk7XG4gICAgICAgIH0sIHRocmVzaG9sZCAtIHBhc3NlZCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGZsdXNoID0gKCkgPT4gbGFzdEFyZ3MgJiYgaW52b2tlKGxhc3RBcmdzKTtcblxuICByZXR1cm4gW3Rocm90dGxlZCwgZmx1c2hdO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0aHJvdHRsZTtcbiIsImltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlckVudlxuICA/ICgob3JpZ2luLCBpc01TSUUpID0+ICh1cmwpID0+IHtcbiAgICAgIHVybCA9IG5ldyBVUkwodXJsLCBwbGF0Zm9ybS5vcmlnaW4pO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICBvcmlnaW4ucHJvdG9jb2wgPT09IHVybC5wcm90b2NvbCAmJlxuICAgICAgICBvcmlnaW4uaG9zdCA9PT0gdXJsLmhvc3QgJiZcbiAgICAgICAgKGlzTVNJRSB8fCBvcmlnaW4ucG9ydCA9PT0gdXJsLnBvcnQpXG4gICAgICApO1xuICAgIH0pKFxuICAgICAgbmV3IFVSTChwbGF0Zm9ybS5vcmlnaW4pLFxuICAgICAgcGxhdGZvcm0ubmF2aWdhdG9yICYmIC8obXNpZXx0cmlkZW50KS9pLnRlc3QocGxhdGZvcm0ubmF2aWdhdG9yLnVzZXJBZ2VudClcbiAgICApXG4gIDogKCkgPT4gdHJ1ZTtcbiIsImltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuXG5leHBvcnQgZGVmYXVsdCBwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnZcbiAgPyAvLyBTdGFuZGFyZCBicm93c2VyIGVudnMgc3VwcG9ydCBkb2N1bWVudC5jb29raWVcbiAgICB7XG4gICAgICB3cml0ZShuYW1lLCB2YWx1ZSwgZXhwaXJlcywgcGF0aCwgZG9tYWluLCBzZWN1cmUsIHNhbWVTaXRlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgY29va2llID0gW2Ake25hbWV9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKX1gXTtcblxuICAgICAgICBpZiAodXRpbHMuaXNOdW1iZXIoZXhwaXJlcykpIHtcbiAgICAgICAgICBjb29raWUucHVzaChgZXhwaXJlcz0ke25ldyBEYXRlKGV4cGlyZXMpLnRvVVRDU3RyaW5nKCl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHV0aWxzLmlzU3RyaW5nKHBhdGgpKSB7XG4gICAgICAgICAgY29va2llLnB1c2goYHBhdGg9JHtwYXRofWApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1dGlscy5pc1N0cmluZyhkb21haW4pKSB7XG4gICAgICAgICAgY29va2llLnB1c2goYGRvbWFpbj0ke2RvbWFpbn1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VjdXJlID09PSB0cnVlKSB7XG4gICAgICAgICAgY29va2llLnB1c2goJ3NlY3VyZScpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1dGlscy5pc1N0cmluZyhzYW1lU2l0ZSkpIHtcbiAgICAgICAgICBjb29raWUucHVzaChgU2FtZVNpdGU9JHtzYW1lU2l0ZX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRvY3VtZW50LmNvb2tpZSA9IGNvb2tpZS5qb2luKCc7ICcpO1xuICAgICAgfSxcblxuICAgICAgcmVhZChuYW1lKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSByZXR1cm4gbnVsbDtcbiAgICAgICAgLy8gTWF0Y2ggbmFtZT12YWx1ZSBieSBzcGxpdHRpbmcgb24gdGhlIHNlbWljb2xvbiBzZXBhcmF0b3IgaW5zdGVhZCBvZiBidWlsZGluZyBhXG4gICAgICAgIC8vIFJlZ0V4cCBmcm9tIGBuYW1lYCDigJQgaW50ZXJwb2xhdGluZyBhbiB1bmVzY2FwZWQgc3RyaW5nIGludG8gYSBSZWdFeHAgd291bGQgbGV0XG4gICAgICAgIC8vIG1ldGFjaGFyYWN0ZXJzIChlLmcuIGAuKz9gIGluIGFuIGF0dGFja2VyLWluZmx1ZW5jZWQgY29va2llIG5hbWUpIGNhdXNlIFJlRG9TIG9yXG4gICAgICAgIC8vIG1hdGNoIHRoZSB3cm9uZyBjb29raWUuIEJyb3dzZXJzIG1heSBzZXJpYWxpemUgY29va2llIHBhaXJzIGFzIGVpdGhlciBcIjtcIiBvclxuICAgICAgICAvLyBcIjsgXCIsIHNvIGlnbm9yZSBvcHRpb25hbCB3aGl0ZXNwYWNlIGJlZm9yZSBlYWNoIGNvb2tpZSBuYW1lLlxuICAgICAgICBjb25zdCBjb29raWVzID0gZG9jdW1lbnQuY29va2llLnNwbGl0KCc7Jyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29va2llcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGNvb2tpZSA9IGNvb2tpZXNbaV0ucmVwbGFjZSgvXlxccysvLCAnJyk7XG4gICAgICAgICAgY29uc3QgZXEgPSBjb29raWUuaW5kZXhPZignPScpO1xuICAgICAgICAgIGlmIChlcSAhPT0gLTEgJiYgY29va2llLnNsaWNlKDAsIGVxKSA9PT0gbmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChjb29raWUuc2xpY2UoZXEgKyAxKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSxcblxuICAgICAgcmVtb3ZlKG5hbWUpIHtcbiAgICAgICAgdGhpcy53cml0ZShuYW1lLCAnJywgRGF0ZS5ub3coKSAtIDg2NDAwMDAwLCAnLycpO1xuICAgICAgfSxcbiAgICB9XG4gIDogLy8gTm9uLXN0YW5kYXJkIGJyb3dzZXIgZW52ICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICAgIHtcbiAgICAgIHdyaXRlKCkge30sXG4gICAgICByZWFkKCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0sXG4gICAgICByZW1vdmUoKSB7fSxcbiAgICB9O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgaXNBYnNvbHV0ZVVSTCBmcm9tICcuLi9oZWxwZXJzL2lzQWJzb2x1dGVVUkwuanMnO1xuaW1wb3J0IGNvbWJpbmVVUkxzIGZyb20gJy4uL2hlbHBlcnMvY29tYmluZVVSTHMuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgYmFzZVVSTCB3aXRoIHRoZSByZXF1ZXN0ZWRVUkwsXG4gKiBvbmx5IHdoZW4gdGhlIHJlcXVlc3RlZFVSTCBpcyBub3QgYWxyZWFkeSBhbiBhYnNvbHV0ZSBVUkwuXG4gKiBJZiB0aGUgcmVxdWVzdFVSTCBpcyBhYnNvbHV0ZSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSByZXF1ZXN0ZWRVUkwgdW50b3VjaGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlcXVlc3RlZFVSTCBBYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gY29tYmluZVxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21iaW5lZCBmdWxsIHBhdGhcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRGdWxsUGF0aChiYXNlVVJMLCByZXF1ZXN0ZWRVUkwsIGFsbG93QWJzb2x1dGVVcmxzKSB7XG4gIGxldCBpc1JlbGF0aXZlVXJsID0gIWlzQWJzb2x1dGVVUkwocmVxdWVzdGVkVVJMKTtcbiAgaWYgKGJhc2VVUkwgJiYgKGlzUmVsYXRpdmVVcmwgfHwgYWxsb3dBYnNvbHV0ZVVybHMgPT09IGZhbHNlKSkge1xuICAgIHJldHVybiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZXF1ZXN0ZWRVUkwpO1xuICB9XG4gIHJldHVybiByZXF1ZXN0ZWRVUkw7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgVVJMIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIFVSTCBpcyBhYnNvbHV0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzQWJzb2x1dGVVUkwodXJsKSB7XG4gIC8vIEEgVVJMIGlzIGNvbnNpZGVyZWQgYWJzb2x1dGUgaWYgaXQgYmVnaW5zIHdpdGggXCI8c2NoZW1lPjovL1wiIG9yIFwiLy9cIiAocHJvdG9jb2wtcmVsYXRpdmUgVVJMKS5cbiAgLy8gUkZDIDM5ODYgZGVmaW5lcyBzY2hlbWUgbmFtZSBhcyBhIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgYmVnaW5uaW5nIHdpdGggYSBsZXR0ZXIgYW5kIGZvbGxvd2VkXG4gIC8vIGJ5IGFueSBjb21iaW5hdGlvbiBvZiBsZXR0ZXJzLCBkaWdpdHMsIHBsdXMsIHBlcmlvZCwgb3IgaHlwaGVuLlxuICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gL14oW2Etel1bYS16XFxkK1xcLS5dKjopP1xcL1xcLy9pLnRlc3QodXJsKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFVSTCBieSBjb21iaW5pbmcgdGhlIHNwZWNpZmllZCBVUkxzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwgVGhlIGJhc2UgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpdmVVUkwgVGhlIHJlbGF0aXZlIFVSTFxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21iaW5lZCBVUkxcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVsYXRpdmVVUkwpIHtcbiAgcmV0dXJuIHJlbGF0aXZlVVJMXG4gICAgPyBiYXNlVVJMLnJlcGxhY2UoL1xcLz9cXC8kLywgJycpICsgJy8nICsgcmVsYXRpdmVVUkwucmVwbGFjZSgvXlxcLysvLCAnJylcbiAgICA6IGJhc2VVUkw7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gJy4vQXhpb3NIZWFkZXJzLmpzJztcblxuY29uc3QgaGVhZGVyc1RvT2JqZWN0ID0gKHRoaW5nKSA9PiAodGhpbmcgaW5zdGFuY2VvZiBBeGlvc0hlYWRlcnMgPyB7IC4uLnRoaW5nIH0gOiB0aGluZyk7XG5cbi8qKlxuICogQ29uZmlnLXNwZWNpZmljIG1lcmdlLWZ1bmN0aW9uIHdoaWNoIGNyZWF0ZXMgYSBuZXcgY29uZmlnLW9iamVjdFxuICogYnkgbWVyZ2luZyB0d28gY29uZmlndXJhdGlvbiBvYmplY3RzIHRvZ2V0aGVyLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcxXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMlxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IE5ldyBvYmplY3QgcmVzdWx0aW5nIGZyb20gbWVyZ2luZyBjb25maWcyIHRvIGNvbmZpZzFcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWVyZ2VDb25maWcoY29uZmlnMSwgY29uZmlnMikge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgY29uZmlnMiA9IGNvbmZpZzIgfHwge307XG5cbiAgLy8gVXNlIGEgbnVsbC1wcm90b3R5cGUgb2JqZWN0IHNvIHRoYXQgZG93bnN0cmVhbSByZWFkcyBzdWNoIGFzIGBjb25maWcuYXV0aGBcbiAgLy8gb3IgYGNvbmZpZy5iYXNlVVJMYCBjYW5ub3QgaW5oZXJpdCBwb2xsdXRlZCB2YWx1ZXMgZnJvbSBPYmplY3QucHJvdG90eXBlLlxuICAvLyBgaGFzT3duUHJvcGVydHlgIGlzIHJlc3RvcmVkIGFzIGEgbm9uLWVudW1lcmFibGUgb3duIHNsb3QgdG8gcHJlc2VydmVcbiAgLy8gZXJnb25vbWljcyBmb3IgdXNlciBjb2RlIHRoYXQgcmVsaWVzIG9uIGl0LlxuICBjb25zdCBjb25maWcgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29uZmlnLCAnaGFzT3duUHJvcGVydHknLCB7XG4gICAgLy8gTnVsbC1wcm90byBkZXNjcmlwdG9yIHNvIGEgcG9sbHV0ZWQgT2JqZWN0LnByb3RvdHlwZS5nZXQgY2Fubm90IHR1cm5cbiAgICAvLyB0aGlzIGRhdGEgZGVzY3JpcHRvciBpbnRvIGFuIGFjY2Vzc29yIGRlc2NyaXB0b3Igb24gdGhlIHdheSBpbi5cbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgdmFsdWU6IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgd3JpdGFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICB9KTtcblxuICBmdW5jdGlvbiBnZXRNZXJnZWRWYWx1ZSh0YXJnZXQsIHNvdXJjZSwgcHJvcCwgY2FzZWxlc3MpIHtcbiAgICBpZiAodXRpbHMuaXNQbGFpbk9iamVjdCh0YXJnZXQpICYmIHV0aWxzLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzLm1lcmdlLmNhbGwoeyBjYXNlbGVzcyB9LCB0YXJnZXQsIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscy5pc1BsYWluT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB1dGlscy5tZXJnZSh7fSwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzQXJyYXkoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHNvdXJjZS5zbGljZSgpO1xuICAgIH1cbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgZnVuY3Rpb24gbWVyZ2VEZWVwUHJvcGVydGllcyhhLCBiLCBwcm9wLCBjYXNlbGVzcykge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZShhLCBiLCBwcm9wLCBjYXNlbGVzcyk7XG4gICAgfSBlbHNlIGlmICghdXRpbHMuaXNVbmRlZmluZWQoYSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGEsIHByb3AsIGNhc2VsZXNzKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gdmFsdWVGcm9tQ29uZmlnMihhLCBiKSB7XG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChiKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYik7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIGRlZmF1bHRUb0NvbmZpZzIoYSwgYikge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGIpO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGEpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBhKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gbWVyZ2VEaXJlY3RLZXlzKGEsIGIsIHByb3ApIHtcbiAgICBpZiAodXRpbHMuaGFzT3duUHJvcChjb25maWcyLCBwcm9wKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKGEsIGIpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaGFzT3duUHJvcChjb25maWcxLCBwcm9wKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbWVyZ2VNYXAgPSB7XG4gICAgdXJsOiB2YWx1ZUZyb21Db25maWcyLFxuICAgIG1ldGhvZDogdmFsdWVGcm9tQ29uZmlnMixcbiAgICBkYXRhOiB2YWx1ZUZyb21Db25maWcyLFxuICAgIGJhc2VVUkw6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdHJhbnNmb3JtUmVxdWVzdDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0cmFuc2Zvcm1SZXNwb25zZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBwYXJhbXNTZXJpYWxpemVyOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRpbWVvdXQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdGltZW91dE1lc3NhZ2U6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgd2l0aENyZWRlbnRpYWxzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHdpdGhYU1JGVG9rZW46IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgYWRhcHRlcjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICByZXNwb25zZVR5cGU6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgeHNyZkNvb2tpZU5hbWU6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgeHNyZkhlYWRlck5hbWU6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgb25VcGxvYWRQcm9ncmVzczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBvbkRvd25sb2FkUHJvZ3Jlc3M6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgZGVjb21wcmVzczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBtYXhDb250ZW50TGVuZ3RoOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG1heEJvZHlMZW5ndGg6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgYmVmb3JlUmVkaXJlY3Q6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdHJhbnNwb3J0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGh0dHBBZ2VudDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBodHRwc0FnZW50OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGNhbmNlbFRva2VuOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHNvY2tldFBhdGg6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgYWxsb3dlZFNvY2tldFBhdGhzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHJlc3BvbnNlRW5jb2Rpbmc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdmFsaWRhdGVTdGF0dXM6IG1lcmdlRGlyZWN0S2V5cyxcbiAgICBoZWFkZXJzOiAoYSwgYiwgcHJvcCkgPT5cbiAgICAgIG1lcmdlRGVlcFByb3BlcnRpZXMoaGVhZGVyc1RvT2JqZWN0KGEpLCBoZWFkZXJzVG9PYmplY3QoYiksIHByb3AsIHRydWUpLFxuICB9O1xuXG4gIHV0aWxzLmZvckVhY2goT2JqZWN0LmtleXMoeyAuLi5jb25maWcxLCAuLi5jb25maWcyIH0pLCBmdW5jdGlvbiBjb21wdXRlQ29uZmlnVmFsdWUocHJvcCkge1xuICAgIGlmIChwcm9wID09PSAnX19wcm90b19fJyB8fCBwcm9wID09PSAnY29uc3RydWN0b3InIHx8IHByb3AgPT09ICdwcm90b3R5cGUnKSByZXR1cm47XG4gICAgY29uc3QgbWVyZ2UgPSB1dGlscy5oYXNPd25Qcm9wKG1lcmdlTWFwLCBwcm9wKSA/IG1lcmdlTWFwW3Byb3BdIDogbWVyZ2VEZWVwUHJvcGVydGllcztcbiAgICBjb25zdCBhID0gdXRpbHMuaGFzT3duUHJvcChjb25maWcxLCBwcm9wKSA/IGNvbmZpZzFbcHJvcF0gOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgYiA9IHV0aWxzLmhhc093blByb3AoY29uZmlnMiwgcHJvcCkgPyBjb25maWcyW3Byb3BdIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGNvbmZpZ1ZhbHVlID0gbWVyZ2UoYSwgYiwgcHJvcCk7XG4gICAgKHV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZ1ZhbHVlKSAmJiBtZXJnZSAhPT0gbWVyZ2VEaXJlY3RLZXlzKSB8fCAoY29uZmlnW3Byb3BdID0gY29uZmlnVmFsdWUpO1xuICB9KTtcblxuICByZXR1cm4gY29uZmlnO1xufVxuIiwiaW1wb3J0IHBsYXRmb3JtIGZyb20gJy4uL3BsYXRmb3JtL2luZGV4LmpzJztcbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgaXNVUkxTYW1lT3JpZ2luIGZyb20gJy4vaXNVUkxTYW1lT3JpZ2luLmpzJztcbmltcG9ydCBjb29raWVzIGZyb20gJy4vY29va2llcy5qcyc7XG5pbXBvcnQgYnVpbGRGdWxsUGF0aCBmcm9tICcuLi9jb3JlL2J1aWxkRnVsbFBhdGguanMnO1xuaW1wb3J0IG1lcmdlQ29uZmlnIGZyb20gJy4uL2NvcmUvbWVyZ2VDb25maWcuanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuLi9jb3JlL0F4aW9zSGVhZGVycy5qcyc7XG5pbXBvcnQgYnVpbGRVUkwgZnJvbSAnLi9idWlsZFVSTC5qcyc7XG5cbmNvbnN0IEZPUk1fREFUQV9DT05URU5UX0hFQURFUlMgPSBbJ2NvbnRlbnQtdHlwZScsICdjb250ZW50LWxlbmd0aCddO1xuXG5mdW5jdGlvbiBzZXRGb3JtRGF0YUhlYWRlcnMoaGVhZGVycywgZm9ybUhlYWRlcnMsIHBvbGljeSkge1xuICBpZiAocG9saWN5ICE9PSAnY29udGVudC1vbmx5Jykge1xuICAgIGhlYWRlcnMuc2V0KGZvcm1IZWFkZXJzKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBPYmplY3QuZW50cmllcyhmb3JtSGVhZGVycykuZm9yRWFjaCgoW2tleSwgdmFsXSkgPT4ge1xuICAgIGlmIChGT1JNX0RBVEFfQ09OVEVOVF9IRUFERVJTLmluY2x1ZGVzKGtleS50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgaGVhZGVycy5zZXQoa2V5LCB2YWwpO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogRW5jb2RlIGEgVVRGLTggc3RyaW5nIHRvIGEgTGF0aW4tMSBieXRlIHN0cmluZyBmb3IgdXNlIHdpdGggYnRvYSgpLlxuICogVGhpcyBpcyBhIG1vZGVybiByZXBsYWNlbWVudCBmb3IgdGhlIGRlcHJlY2F0ZWQgdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KHN0cikpIHBhdHRlcm4uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0ciBUaGUgc3RyaW5nIHRvIGVuY29kZVxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFVURi04IGJ5dGVzIGFzIGEgTGF0aW4tMSBzdHJpbmdcbiAqL1xuY29uc3QgZW5jb2RlVVRGOCA9IChzdHIpID0+XG4gIGVuY29kZVVSSUNvbXBvbmVudChzdHIpLnJlcGxhY2UoLyUoWzAtOUEtRl17Mn0pL2dpLCAoXywgaGV4KSA9PlxuICAgIFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoaGV4LCAxNikpXG4gICk7XG5cbmZ1bmN0aW9uIHJlc29sdmVDb25maWcoY29uZmlnKSB7XG4gIGNvbnN0IG5ld0NvbmZpZyA9IG1lcmdlQ29uZmlnKHt9LCBjb25maWcpO1xuXG4gIC8vIFJlYWQgb25seSBvd24gcHJvcGVydGllcyB0byBwcmV2ZW50IHByb3RvdHlwZSBwb2xsdXRpb24gZ2FkZ2V0c1xuICAvLyAoZS5nLiBPYmplY3QucHJvdG90eXBlLmJhc2VVUkwgPSAnaHR0cHM6Ly9ldmlsLmNvbScpLlxuICBjb25zdCBvd24gPSAoa2V5KSA9PiAodXRpbHMuaGFzT3duUHJvcChuZXdDb25maWcsIGtleSkgPyBuZXdDb25maWdba2V5XSA6IHVuZGVmaW5lZCk7XG5cbiAgY29uc3QgZGF0YSA9IG93bignZGF0YScpO1xuICBsZXQgd2l0aFhTUkZUb2tlbiA9IG93bignd2l0aFhTUkZUb2tlbicpO1xuICBjb25zdCB4c3JmSGVhZGVyTmFtZSA9IG93bigneHNyZkhlYWRlck5hbWUnKTtcbiAgY29uc3QgeHNyZkNvb2tpZU5hbWUgPSBvd24oJ3hzcmZDb29raWVOYW1lJyk7XG4gIGxldCBoZWFkZXJzID0gb3duKCdoZWFkZXJzJyk7XG4gIGNvbnN0IGF1dGggPSBvd24oJ2F1dGgnKTtcbiAgY29uc3QgYmFzZVVSTCA9IG93bignYmFzZVVSTCcpO1xuICBjb25zdCBhbGxvd0Fic29sdXRlVXJscyA9IG93bignYWxsb3dBYnNvbHV0ZVVybHMnKTtcbiAgY29uc3QgdXJsID0gb3duKCd1cmwnKTtcblxuICBuZXdDb25maWcuaGVhZGVycyA9IGhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShoZWFkZXJzKTtcblxuICBuZXdDb25maWcudXJsID0gYnVpbGRVUkwoXG4gICAgYnVpbGRGdWxsUGF0aChiYXNlVVJMLCB1cmwsIGFsbG93QWJzb2x1dGVVcmxzKSxcbiAgICBvd24oJ3BhcmFtcycpLFxuICAgIG93bigncGFyYW1zU2VyaWFsaXplcicpXG4gICk7XG5cbiAgLy8gSFRUUCBiYXNpYyBhdXRoZW50aWNhdGlvblxuICBpZiAoYXV0aCkge1xuICAgIGhlYWRlcnMuc2V0KFxuICAgICAgJ0F1dGhvcml6YXRpb24nLFxuICAgICAgJ0Jhc2ljICcgK1xuICAgICAgICBidG9hKChhdXRoLnVzZXJuYW1lIHx8ICcnKSArICc6JyArIChhdXRoLnBhc3N3b3JkID8gZW5jb2RlVVRGOChhdXRoLnBhc3N3b3JkKSA6ICcnKSlcbiAgICApO1xuICB9XG5cbiAgaWYgKHV0aWxzLmlzRm9ybURhdGEoZGF0YSkpIHtcbiAgICBpZiAoXG4gICAgICBwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYgfHxcbiAgICAgIHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudiB8fFxuICAgICAgdXRpbHMuaXNSZWFjdE5hdGl2ZShkYXRhKVxuICAgICkge1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZSh1bmRlZmluZWQpOyAvLyBicm93c2VyL3dlYiB3b3JrZXIvUk4gaGFuZGxlcyBpdFxuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNGdW5jdGlvbihkYXRhLmdldEhlYWRlcnMpKSB7XG4gICAgICAvLyBOb2RlLmpzIEZvcm1EYXRhIChsaWtlIGZvcm0tZGF0YSBwYWNrYWdlKVxuICAgICAgc2V0Rm9ybURhdGFIZWFkZXJzKGhlYWRlcnMsIGRhdGEuZ2V0SGVhZGVycygpLCBvd24oJ2Zvcm1EYXRhSGVhZGVyUG9saWN5JykpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFkZCB4c3JmIGhlYWRlclxuICAvLyBUaGlzIGlzIG9ubHkgZG9uZSBpZiBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudC5cbiAgLy8gU3BlY2lmaWNhbGx5IG5vdCBpZiB3ZSdyZSBpbiBhIHdlYiB3b3JrZXIsIG9yIHJlYWN0LW5hdGl2ZS5cblxuICBpZiAocGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52KSB7XG4gICAgaWYgKHV0aWxzLmlzRnVuY3Rpb24od2l0aFhTUkZUb2tlbikpIHtcbiAgICAgIHdpdGhYU1JGVG9rZW4gPSB3aXRoWFNSRlRva2VuKG5ld0NvbmZpZyk7XG4gICAgfVxuXG4gICAgLy8gU3RyaWN0IGJvb2xlYW4gY2hlY2sg4oCUIHByZXZlbnRzIHByb3RvLXBvbGx1dGlvbiBnYWRnZXRzIChlLmcuIE9iamVjdC5wcm90b3R5cGUud2l0aFhTUkZUb2tlbiA9IDEpXG4gICAgLy8gYW5kIG1pc2NvbmZpZ3VyYXRpb25zIChlLmcuIFwiZmFsc2VcIikgZnJvbSBzaG9ydC1jaXJjdWl0aW5nIHRoZSBzYW1lLW9yaWdpbiBjaGVjayBhbmQgbGVha2luZ1xuICAgIC8vIHRoZSBYU1JGIHRva2VuIGNyb3NzLW9yaWdpbi5cbiAgICBjb25zdCBzaG91bGRTZW5kWFNSRiA9XG4gICAgICB3aXRoWFNSRlRva2VuID09PSB0cnVlIHx8ICh3aXRoWFNSRlRva2VuID09IG51bGwgJiYgaXNVUkxTYW1lT3JpZ2luKG5ld0NvbmZpZy51cmwpKTtcblxuICAgIGlmIChzaG91bGRTZW5kWFNSRikge1xuICAgICAgY29uc3QgeHNyZlZhbHVlID0geHNyZkhlYWRlck5hbWUgJiYgeHNyZkNvb2tpZU5hbWUgJiYgY29va2llcy5yZWFkKHhzcmZDb29raWVOYW1lKTtcblxuICAgICAgaWYgKHhzcmZWYWx1ZSkge1xuICAgICAgICBoZWFkZXJzLnNldCh4c3JmSGVhZGVyTmFtZSwgeHNyZlZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3Q29uZmlnO1xufVxuXG5leHBvcnQgZGVmYXVsdCByZXNvbHZlQ29uZmlnO1xuIiwiaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBzZXR0bGUgZnJvbSAnLi4vY29yZS9zZXR0bGUuanMnO1xuaW1wb3J0IHRyYW5zaXRpb25hbERlZmF1bHRzIGZyb20gJy4uL2RlZmF1bHRzL3RyYW5zaXRpb25hbC5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IENhbmNlbGVkRXJyb3IgZnJvbSAnLi4vY2FuY2VsL0NhbmNlbGVkRXJyb3IuanMnO1xuaW1wb3J0IHBhcnNlUHJvdG9jb2wgZnJvbSAnLi4vaGVscGVycy9wYXJzZVByb3RvY29sLmpzJztcbmltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gJy4uL2NvcmUvQXhpb3NIZWFkZXJzLmpzJztcbmltcG9ydCB7IHByb2dyZXNzRXZlbnRSZWR1Y2VyIH0gZnJvbSAnLi4vaGVscGVycy9wcm9ncmVzc0V2ZW50UmVkdWNlci5qcyc7XG5pbXBvcnQgcmVzb2x2ZUNvbmZpZyBmcm9tICcuLi9oZWxwZXJzL3Jlc29sdmVDb25maWcuanMnO1xuaW1wb3J0IHsgdG9CeXRlU3RyaW5nSGVhZGVyT2JqZWN0IH0gZnJvbSAnLi4vaGVscGVycy9zYW5pdGl6ZUhlYWRlclZhbHVlLmpzJztcblxuY29uc3QgaXNYSFJBZGFwdGVyU3VwcG9ydGVkID0gdHlwZW9mIFhNTEh0dHBSZXF1ZXN0ICE9PSAndW5kZWZpbmVkJztcblxuZXhwb3J0IGRlZmF1bHQgaXNYSFJBZGFwdGVyU3VwcG9ydGVkICYmXG4gIGZ1bmN0aW9uIChjb25maWcpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gZGlzcGF0Y2hYaHJSZXF1ZXN0KHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgY29uc3QgX2NvbmZpZyA9IHJlc29sdmVDb25maWcoY29uZmlnKTtcbiAgICAgIGxldCByZXF1ZXN0RGF0YSA9IF9jb25maWcuZGF0YTtcbiAgICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20oX2NvbmZpZy5oZWFkZXJzKS5ub3JtYWxpemUoKTtcbiAgICAgIGxldCB7IHJlc3BvbnNlVHlwZSwgb25VcGxvYWRQcm9ncmVzcywgb25Eb3dubG9hZFByb2dyZXNzIH0gPSBfY29uZmlnO1xuICAgICAgbGV0IG9uQ2FuY2VsZWQ7XG4gICAgICBsZXQgdXBsb2FkVGhyb3R0bGVkLCBkb3dubG9hZFRocm90dGxlZDtcbiAgICAgIGxldCBmbHVzaFVwbG9hZCwgZmx1c2hEb3dubG9hZDtcblxuICAgICAgZnVuY3Rpb24gZG9uZSgpIHtcbiAgICAgICAgZmx1c2hVcGxvYWQgJiYgZmx1c2hVcGxvYWQoKTsgLy8gZmx1c2ggZXZlbnRzXG4gICAgICAgIGZsdXNoRG93bmxvYWQgJiYgZmx1c2hEb3dubG9hZCgpOyAvLyBmbHVzaCBldmVudHNcblxuICAgICAgICBfY29uZmlnLmNhbmNlbFRva2VuICYmIF9jb25maWcuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUob25DYW5jZWxlZCk7XG5cbiAgICAgICAgX2NvbmZpZy5zaWduYWwgJiYgX2NvbmZpZy5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkNhbmNlbGVkKTtcbiAgICAgIH1cblxuICAgICAgbGV0IHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgICAgcmVxdWVzdC5vcGVuKF9jb25maWcubWV0aG9kLnRvVXBwZXJDYXNlKCksIF9jb25maWcudXJsLCB0cnVlKTtcblxuICAgICAgLy8gU2V0IHRoZSByZXF1ZXN0IHRpbWVvdXQgaW4gTVNcbiAgICAgIHJlcXVlc3QudGltZW91dCA9IF9jb25maWcudGltZW91dDtcblxuICAgICAgZnVuY3Rpb24gb25sb2FkZW5kKCkge1xuICAgICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gUHJlcGFyZSB0aGUgcmVzcG9uc2VcbiAgICAgICAgY29uc3QgcmVzcG9uc2VIZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20oXG4gICAgICAgICAgJ2dldEFsbFJlc3BvbnNlSGVhZGVycycgaW4gcmVxdWVzdCAmJiByZXF1ZXN0LmdldEFsbFJlc3BvbnNlSGVhZGVycygpXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9XG4gICAgICAgICAgIXJlc3BvbnNlVHlwZSB8fCByZXNwb25zZVR5cGUgPT09ICd0ZXh0JyB8fCByZXNwb25zZVR5cGUgPT09ICdqc29uJ1xuICAgICAgICAgICAgPyByZXF1ZXN0LnJlc3BvbnNlVGV4dFxuICAgICAgICAgICAgOiByZXF1ZXN0LnJlc3BvbnNlO1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IHtcbiAgICAgICAgICBkYXRhOiByZXNwb25zZURhdGEsXG4gICAgICAgICAgc3RhdHVzOiByZXF1ZXN0LnN0YXR1cyxcbiAgICAgICAgICBzdGF0dXNUZXh0OiByZXF1ZXN0LnN0YXR1c1RleHQsXG4gICAgICAgICAgaGVhZGVyczogcmVzcG9uc2VIZWFkZXJzLFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICByZXF1ZXN0LFxuICAgICAgICB9O1xuXG4gICAgICAgIHNldHRsZShcbiAgICAgICAgICBmdW5jdGlvbiBfcmVzb2x2ZSh2YWx1ZSkge1xuICAgICAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBmdW5jdGlvbiBfcmVqZWN0KGVycikge1xuICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXNwb25zZVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmICgnb25sb2FkZW5kJyBpbiByZXF1ZXN0KSB7XG4gICAgICAgIC8vIFVzZSBvbmxvYWRlbmQgaWYgYXZhaWxhYmxlXG4gICAgICAgIHJlcXVlc3Qub25sb2FkZW5kID0gb25sb2FkZW5kO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gTGlzdGVuIGZvciByZWFkeSBzdGF0ZSB0byBlbXVsYXRlIG9ubG9hZGVuZFxuICAgICAgICByZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uIGhhbmRsZUxvYWQoKSB7XG4gICAgICAgICAgaWYgKCFyZXF1ZXN0IHx8IHJlcXVlc3QucmVhZHlTdGF0ZSAhPT0gNCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFRoZSByZXF1ZXN0IGVycm9yZWQgb3V0IGFuZCB3ZSBkaWRuJ3QgZ2V0IGEgcmVzcG9uc2UsIHRoaXMgd2lsbCBiZVxuICAgICAgICAgIC8vIGhhbmRsZWQgYnkgb25lcnJvciBpbnN0ZWFkXG4gICAgICAgICAgLy8gV2l0aCBvbmUgZXhjZXB0aW9uOiByZXF1ZXN0IHRoYXQgdXNpbmcgZmlsZTogcHJvdG9jb2wsIG1vc3QgYnJvd3NlcnNcbiAgICAgICAgICAvLyB3aWxsIHJldHVybiBzdGF0dXMgYXMgMCBldmVuIHRob3VnaCBpdCdzIGEgc3VjY2Vzc2Z1bCByZXF1ZXN0XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgcmVxdWVzdC5zdGF0dXMgPT09IDAgJiZcbiAgICAgICAgICAgICEocmVxdWVzdC5yZXNwb25zZVVSTCAmJiByZXF1ZXN0LnJlc3BvbnNlVVJMLnN0YXJ0c1dpdGgoJ2ZpbGU6JykpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHJlYWR5c3RhdGUgaGFuZGxlciBpcyBjYWxsaW5nIGJlZm9yZSBvbmVycm9yIG9yIG9udGltZW91dCBoYW5kbGVycyxcbiAgICAgICAgICAvLyBzbyB3ZSBzaG91bGQgY2FsbCBvbmxvYWRlbmQgb24gdGhlIG5leHQgJ3RpY2snXG4gICAgICAgICAgc2V0VGltZW91dChvbmxvYWRlbmQpO1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyBIYW5kbGUgYnJvd3NlciByZXF1ZXN0IGNhbmNlbGxhdGlvbiAoYXMgb3Bwb3NlZCB0byBhIG1hbnVhbCBjYW5jZWxsYXRpb24pXG4gICAgICByZXF1ZXN0Lm9uYWJvcnQgPSBmdW5jdGlvbiBoYW5kbGVBYm9ydCgpIHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdSZXF1ZXN0IGFib3J0ZWQnLCBBeGlvc0Vycm9yLkVDT05OQUJPUlRFRCwgY29uZmlnLCByZXF1ZXN0KSk7XG4gICAgICAgIGRvbmUoKTtcblxuICAgICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgICAgfTtcblxuICAgICAgLy8gSGFuZGxlIGxvdyBsZXZlbCBuZXR3b3JrIGVycm9yc1xuICAgICAgcmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24gaGFuZGxlRXJyb3IoZXZlbnQpIHtcbiAgICAgICAgLy8gQnJvd3NlcnMgZGVsaXZlciBhIFByb2dyZXNzRXZlbnQgaW4gWEhSIG9uZXJyb3JcbiAgICAgICAgLy8gKG1lc3NhZ2UgbWF5IGJlIGVtcHR5OyB3aGVuIHByZXNlbnQsIHN1cmZhY2UgaXQpXG4gICAgICAgIC8vIFNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9BUEkvWE1MSHR0cFJlcXVlc3QvZXJyb3JfZXZlbnRcbiAgICAgICAgY29uc3QgbXNnID0gZXZlbnQgJiYgZXZlbnQubWVzc2FnZSA/IGV2ZW50Lm1lc3NhZ2UgOiAnTmV0d29yayBFcnJvcic7XG4gICAgICAgIGNvbnN0IGVyciA9IG5ldyBBeGlvc0Vycm9yKG1zZywgQXhpb3NFcnJvci5FUlJfTkVUV09SSywgY29uZmlnLCByZXF1ZXN0KTtcbiAgICAgICAgLy8gYXR0YWNoIHRoZSB1bmRlcmx5aW5nIGV2ZW50IGZvciBjb25zdW1lcnMgd2hvIHdhbnQgZGV0YWlsc1xuICAgICAgICBlcnIuZXZlbnQgPSBldmVudCB8fCBudWxsO1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIC8vIEhhbmRsZSB0aW1lb3V0XG4gICAgICByZXF1ZXN0Lm9udGltZW91dCA9IGZ1bmN0aW9uIGhhbmRsZVRpbWVvdXQoKSB7XG4gICAgICAgIGxldCB0aW1lb3V0RXJyb3JNZXNzYWdlID0gX2NvbmZpZy50aW1lb3V0XG4gICAgICAgICAgPyAndGltZW91dCBvZiAnICsgX2NvbmZpZy50aW1lb3V0ICsgJ21zIGV4Y2VlZGVkJ1xuICAgICAgICAgIDogJ3RpbWVvdXQgZXhjZWVkZWQnO1xuICAgICAgICBjb25zdCB0cmFuc2l0aW9uYWwgPSBfY29uZmlnLnRyYW5zaXRpb25hbCB8fCB0cmFuc2l0aW9uYWxEZWZhdWx0cztcbiAgICAgICAgaWYgKF9jb25maWcudGltZW91dEVycm9yTWVzc2FnZSkge1xuICAgICAgICAgIHRpbWVvdXRFcnJvck1lc3NhZ2UgPSBfY29uZmlnLnRpbWVvdXRFcnJvck1lc3NhZ2U7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KFxuICAgICAgICAgIG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSxcbiAgICAgICAgICAgIHRyYW5zaXRpb25hbC5jbGFyaWZ5VGltZW91dEVycm9yID8gQXhpb3NFcnJvci5FVElNRURPVVQgOiBBeGlvc0Vycm9yLkVDT05OQUJPUlRFRCxcbiAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgIHJlcXVlc3RcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIGRvbmUoKTtcblxuICAgICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgICAgfTtcblxuICAgICAgLy8gUmVtb3ZlIENvbnRlbnQtVHlwZSBpZiBkYXRhIGlzIHVuZGVmaW5lZFxuICAgICAgcmVxdWVzdERhdGEgPT09IHVuZGVmaW5lZCAmJiByZXF1ZXN0SGVhZGVycy5zZXRDb250ZW50VHlwZShudWxsKTtcblxuICAgICAgLy8gQWRkIGhlYWRlcnMgdG8gdGhlIHJlcXVlc3RcbiAgICAgIGlmICgnc2V0UmVxdWVzdEhlYWRlcicgaW4gcmVxdWVzdCkge1xuICAgICAgICB1dGlscy5mb3JFYWNoKHRvQnl0ZVN0cmluZ0hlYWRlck9iamVjdChyZXF1ZXN0SGVhZGVycyksIGZ1bmN0aW9uIHNldFJlcXVlc3RIZWFkZXIodmFsLCBrZXkpIHtcbiAgICAgICAgICByZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoa2V5LCB2YWwpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gQWRkIHdpdGhDcmVkZW50aWFscyB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChfY29uZmlnLndpdGhDcmVkZW50aWFscykpIHtcbiAgICAgICAgcmVxdWVzdC53aXRoQ3JlZGVudGlhbHMgPSAhIV9jb25maWcud2l0aENyZWRlbnRpYWxzO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgcmVzcG9uc2VUeXBlIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgICBpZiAocmVzcG9uc2VUeXBlICYmIHJlc3BvbnNlVHlwZSAhPT0gJ2pzb24nKSB7XG4gICAgICAgIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gX2NvbmZpZy5yZXNwb25zZVR5cGU7XG4gICAgICB9XG5cbiAgICAgIC8vIEhhbmRsZSBwcm9ncmVzcyBpZiBuZWVkZWRcbiAgICAgIGlmIChvbkRvd25sb2FkUHJvZ3Jlc3MpIHtcbiAgICAgICAgW2Rvd25sb2FkVGhyb3R0bGVkLCBmbHVzaERvd25sb2FkXSA9IHByb2dyZXNzRXZlbnRSZWR1Y2VyKG9uRG93bmxvYWRQcm9ncmVzcywgdHJ1ZSk7XG4gICAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBkb3dubG9hZFRocm90dGxlZCk7XG4gICAgICB9XG5cbiAgICAgIC8vIE5vdCBhbGwgYnJvd3NlcnMgc3VwcG9ydCB1cGxvYWQgZXZlbnRzXG4gICAgICBpZiAob25VcGxvYWRQcm9ncmVzcyAmJiByZXF1ZXN0LnVwbG9hZCkge1xuICAgICAgICBbdXBsb2FkVGhyb3R0bGVkLCBmbHVzaFVwbG9hZF0gPSBwcm9ncmVzc0V2ZW50UmVkdWNlcihvblVwbG9hZFByb2dyZXNzKTtcblxuICAgICAgICByZXF1ZXN0LnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHVwbG9hZFRocm90dGxlZCk7XG5cbiAgICAgICAgcmVxdWVzdC51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVuZCcsIGZsdXNoVXBsb2FkKTtcbiAgICAgIH1cblxuICAgICAgaWYgKF9jb25maWcuY2FuY2VsVG9rZW4gfHwgX2NvbmZpZy5zaWduYWwpIHtcbiAgICAgICAgLy8gSGFuZGxlIGNhbmNlbGxhdGlvblxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgICAgICBvbkNhbmNlbGVkID0gKGNhbmNlbCkgPT4ge1xuICAgICAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZWplY3QoIWNhbmNlbCB8fCBjYW5jZWwudHlwZSA/IG5ldyBDYW5jZWxlZEVycm9yKG51bGwsIGNvbmZpZywgcmVxdWVzdCkgOiBjYW5jZWwpO1xuICAgICAgICAgIHJlcXVlc3QuYWJvcnQoKTtcbiAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgICAgIH07XG5cbiAgICAgICAgX2NvbmZpZy5jYW5jZWxUb2tlbiAmJiBfY29uZmlnLmNhbmNlbFRva2VuLnN1YnNjcmliZShvbkNhbmNlbGVkKTtcbiAgICAgICAgaWYgKF9jb25maWcuc2lnbmFsKSB7XG4gICAgICAgICAgX2NvbmZpZy5zaWduYWwuYWJvcnRlZFxuICAgICAgICAgICAgPyBvbkNhbmNlbGVkKClcbiAgICAgICAgICAgIDogX2NvbmZpZy5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkNhbmNlbGVkKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBwcm90b2NvbCA9IHBhcnNlUHJvdG9jb2woX2NvbmZpZy51cmwpO1xuXG4gICAgICBpZiAocHJvdG9jb2wgJiYgIXBsYXRmb3JtLnByb3RvY29scy5pbmNsdWRlcyhwcm90b2NvbCkpIHtcbiAgICAgICAgcmVqZWN0KFxuICAgICAgICAgIG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICAgICAgJ1Vuc3VwcG9ydGVkIHByb3RvY29sICcgKyBwcm90b2NvbCArICc6JyxcbiAgICAgICAgICAgIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNULFxuICAgICAgICAgICAgY29uZmlnXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFNlbmQgdGhlIHJlcXVlc3RcbiAgICAgIHJlcXVlc3Quc2VuZChyZXF1ZXN0RGF0YSB8fCBudWxsKTtcbiAgICB9KTtcbiAgfTtcbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGFyc2VQcm90b2NvbCh1cmwpIHtcbiAgY29uc3QgbWF0Y2ggPSAvXihbLStcXHddezEsMjV9KTooPzpcXC9cXC8pPy8uZXhlYyh1cmwpO1xuICByZXR1cm4gKG1hdGNoICYmIG1hdGNoWzFdKSB8fCAnJztcbn1cbiIsImltcG9ydCBDYW5jZWxlZEVycm9yIGZyb20gJy4uL2NhbmNlbC9DYW5jZWxlZEVycm9yLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4uL2NvcmUvQXhpb3NFcnJvci5qcyc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuXG5jb25zdCBjb21wb3NlU2lnbmFscyA9IChzaWduYWxzLCB0aW1lb3V0KSA9PiB7XG4gIHNpZ25hbHMgPSBzaWduYWxzID8gc2lnbmFscy5maWx0ZXIoQm9vbGVhbikgOiBbXTtcblxuICBpZiAoIXRpbWVvdXQgJiYgIXNpZ25hbHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICBsZXQgYWJvcnRlZCA9IGZhbHNlO1xuXG4gIGNvbnN0IG9uYWJvcnQgPSBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgaWYgKCFhYm9ydGVkKSB7XG4gICAgICBhYm9ydGVkID0gdHJ1ZTtcbiAgICAgIHVuc3Vic2NyaWJlKCk7XG4gICAgICBjb25zdCBlcnIgPSByZWFzb24gaW5zdGFuY2VvZiBFcnJvciA/IHJlYXNvbiA6IHRoaXMucmVhc29uO1xuICAgICAgY29udHJvbGxlci5hYm9ydChcbiAgICAgICAgZXJyIGluc3RhbmNlb2YgQXhpb3NFcnJvclxuICAgICAgICAgID8gZXJyXG4gICAgICAgICAgOiBuZXcgQ2FuY2VsZWRFcnJvcihlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogZXJyKVxuICAgICAgKTtcbiAgICB9XG4gIH07XG5cbiAgbGV0IHRpbWVyID1cbiAgICB0aW1lb3V0ICYmXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aW1lciA9IG51bGw7XG4gICAgICBvbmFib3J0KG5ldyBBeGlvc0Vycm9yKGB0aW1lb3V0IG9mICR7dGltZW91dH1tcyBleGNlZWRlZGAsIEF4aW9zRXJyb3IuRVRJTUVET1VUKSk7XG4gICAgfSwgdGltZW91dCk7XG5cbiAgY29uc3QgdW5zdWJzY3JpYmUgPSAoKSA9PiB7XG4gICAgaWYgKCFzaWduYWxzKSB7IHJldHVybjsgfVxuICAgIHRpbWVyICYmIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgdGltZXIgPSBudWxsO1xuICAgIHNpZ25hbHMuZm9yRWFjaCgoc2lnbmFsKSA9PiB7XG4gICAgICBzaWduYWwudW5zdWJzY3JpYmVcbiAgICAgICAgPyBzaWduYWwudW5zdWJzY3JpYmUob25hYm9ydClcbiAgICAgICAgOiBzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbmFib3J0KTtcbiAgICB9KTtcbiAgICBzaWduYWxzID0gbnVsbDtcbiAgfTtcblxuICBzaWduYWxzLmZvckVhY2goKHNpZ25hbCkgPT4gc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25hYm9ydCkpO1xuXG4gIGNvbnN0IHsgc2lnbmFsIH0gPSBjb250cm9sbGVyO1xuXG4gIHNpZ25hbC51bnN1YnNjcmliZSA9ICgpID0+IHV0aWxzLmFzYXAodW5zdWJzY3JpYmUpO1xuXG4gIHJldHVybiBzaWduYWw7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb21wb3NlU2lnbmFscztcbiIsImV4cG9ydCBjb25zdCBzdHJlYW1DaHVuayA9IGZ1bmN0aW9uKiAoY2h1bmssIGNodW5rU2l6ZSkge1xuICBsZXQgbGVuID0gY2h1bmsuYnl0ZUxlbmd0aDtcblxuICBpZiAoIWNodW5rU2l6ZSB8fCBsZW4gPCBjaHVua1NpemUpIHtcbiAgICB5aWVsZCBjaHVuaztcbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgcG9zID0gMDtcbiAgbGV0IGVuZDtcblxuICB3aGlsZSAocG9zIDwgbGVuKSB7XG4gICAgZW5kID0gcG9zICsgY2h1bmtTaXplO1xuICAgIHlpZWxkIGNodW5rLnNsaWNlKHBvcywgZW5kKTtcbiAgICBwb3MgPSBlbmQ7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCByZWFkQnl0ZXMgPSBhc3luYyBmdW5jdGlvbiogKGl0ZXJhYmxlLCBjaHVua1NpemUpIHtcbiAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiByZWFkU3RyZWFtKGl0ZXJhYmxlKSkge1xuICAgIHlpZWxkKiBzdHJlYW1DaHVuayhjaHVuaywgY2h1bmtTaXplKTtcbiAgfVxufTtcblxuY29uc3QgcmVhZFN0cmVhbSA9IGFzeW5jIGZ1bmN0aW9uKiAoc3RyZWFtKSB7XG4gIGlmIChzdHJlYW1bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKSB7XG4gICAgeWllbGQqIHN0cmVhbTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCByZWFkZXIgPSBzdHJlYW0uZ2V0UmVhZGVyKCk7XG4gIHRyeSB7XG4gICAgZm9yICg7Oykge1xuICAgICAgY29uc3QgeyBkb25lLCB2YWx1ZSB9ID0gYXdhaXQgcmVhZGVyLnJlYWQoKTtcbiAgICAgIGlmIChkb25lKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgeWllbGQgdmFsdWU7XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IHJlYWRlci5jYW5jZWwoKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHRyYWNrU3RyZWFtID0gKHN0cmVhbSwgY2h1bmtTaXplLCBvblByb2dyZXNzLCBvbkZpbmlzaCkgPT4ge1xuICBjb25zdCBpdGVyYXRvciA9IHJlYWRCeXRlcyhzdHJlYW0sIGNodW5rU2l6ZSk7XG5cbiAgbGV0IGJ5dGVzID0gMDtcbiAgbGV0IGRvbmU7XG4gIGxldCBfb25GaW5pc2ggPSAoZSkgPT4ge1xuICAgIGlmICghZG9uZSkge1xuICAgICAgZG9uZSA9IHRydWU7XG4gICAgICBvbkZpbmlzaCAmJiBvbkZpbmlzaChlKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIG5ldyBSZWFkYWJsZVN0cmVhbShcbiAgICB7XG4gICAgICBhc3luYyBwdWxsKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCBpdGVyYXRvci5uZXh0KCk7XG5cbiAgICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgICAgX29uRmluaXNoKCk7XG4gICAgICAgICAgICBjb250cm9sbGVyLmNsb3NlKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IGxlbiA9IHZhbHVlLmJ5dGVMZW5ndGg7XG4gICAgICAgICAgaWYgKG9uUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgIGxldCBsb2FkZWRCeXRlcyA9IChieXRlcyArPSBsZW4pO1xuICAgICAgICAgICAgb25Qcm9ncmVzcyhsb2FkZWRCeXRlcyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShuZXcgVWludDhBcnJheSh2YWx1ZSkpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBfb25GaW5pc2goZXJyKTtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjYW5jZWwocmVhc29uKSB7XG4gICAgICAgIF9vbkZpbmlzaChyZWFzb24pO1xuICAgICAgICByZXR1cm4gaXRlcmF0b3IucmV0dXJuKCk7XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgaGlnaFdhdGVyTWFyazogMixcbiAgICB9XG4gICk7XG59O1xuIiwiZXhwb3J0IGNvbnN0IFZFUlNJT04gPSBcIjEuMTcuMFwiOyIsImltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcbmltcG9ydCBjb21wb3NlU2lnbmFscyBmcm9tICcuLi9oZWxwZXJzL2NvbXBvc2VTaWduYWxzLmpzJztcbmltcG9ydCB7IHRyYWNrU3RyZWFtIH0gZnJvbSAnLi4vaGVscGVycy90cmFja1N0cmVhbS5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gJy4uL2NvcmUvQXhpb3NIZWFkZXJzLmpzJztcbmltcG9ydCB7XG4gIHByb2dyZXNzRXZlbnRSZWR1Y2VyLFxuICBwcm9ncmVzc0V2ZW50RGVjb3JhdG9yLFxuICBhc3luY0RlY29yYXRvcixcbn0gZnJvbSAnLi4vaGVscGVycy9wcm9ncmVzc0V2ZW50UmVkdWNlci5qcyc7XG5pbXBvcnQgcmVzb2x2ZUNvbmZpZyBmcm9tICcuLi9oZWxwZXJzL3Jlc29sdmVDb25maWcuanMnO1xuaW1wb3J0IHNldHRsZSBmcm9tICcuLi9jb3JlL3NldHRsZS5qcyc7XG5pbXBvcnQgZXN0aW1hdGVEYXRhVVJMRGVjb2RlZEJ5dGVzIGZyb20gJy4uL2hlbHBlcnMvZXN0aW1hdGVEYXRhVVJMRGVjb2RlZEJ5dGVzLmpzJztcbmltcG9ydCB7IFZFUlNJT04gfSBmcm9tICcuLi9lbnYvZGF0YS5qcyc7XG5pbXBvcnQgeyB0b0J5dGVTdHJpbmdIZWFkZXJPYmplY3QgfSBmcm9tICcuLi9oZWxwZXJzL3Nhbml0aXplSGVhZGVyVmFsdWUuanMnO1xuXG5jb25zdCBERUZBVUxUX0NIVU5LX1NJWkUgPSA2NCAqIDEwMjQ7XG5cbmNvbnN0IHsgaXNGdW5jdGlvbiB9ID0gdXRpbHM7XG5cbi8qKlxuICogRW5jb2RlIGEgVVRGLTggc3RyaW5nIHRvIGEgTGF0aW4tMSBieXRlIHN0cmluZyBmb3IgdXNlIHdpdGggYnRvYSgpLlxuICogVGhpcyBpcyBhIG1vZGVybiByZXBsYWNlbWVudCBmb3IgdGhlIGRlcHJlY2F0ZWQgdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KHN0cikpIHBhdHRlcm4uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0ciBUaGUgc3RyaW5nIHRvIGVuY29kZVxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFVURi04IGJ5dGVzIGFzIGEgTGF0aW4tMSBzdHJpbmdcbiAqL1xuY29uc3QgZW5jb2RlVVRGOCA9IChzdHIpID0+XG4gIGVuY29kZVVSSUNvbXBvbmVudChzdHIpLnJlcGxhY2UoLyUoWzAtOUEtRl17Mn0pL2dpLCAoXywgaGV4KSA9PlxuICAgIFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoaGV4LCAxNikpXG4gICk7XG5cbi8vIE5vZGUncyBXSEFUV0cgVVJMIHBhcnNlciByZXR1cm5zIGB1c2VybmFtZWAgYW5kIGBwYXNzd29yZGAgcGVyY2VudC1lbmNvZGVkLlxuLy8gRGVjb2RlIGJlZm9yZSBjb21wb3NpbmcgdGhlIGBhdXRoYCBvcHRpb24gc28gY3JlZGVudGlhbHMgc3VjaCBhc1xuLy8gYG15JTQwZW1haWwuY29tOnBhc3NgIGFyZSBzZW50IGFzIGBteUBlbWFpbC5jb206cGFzc2AuIEZhbGxzIGJhY2sgdG8gdGhlXG4vLyBvcmlnaW5hbCB2YWx1ZSBmb3IgbWFsZm9ybWVkIGlucHV0IHNvIGEgYmFkIGVuY29kaW5nIG5ldmVyIHRocm93cy5cbmNvbnN0IGRlY29kZVVSSUNvbXBvbmVudFNhZmUgPSAodmFsdWUpID0+IHtcbiAgaWYgKCF1dGlscy5pc1N0cmluZyh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQodmFsdWUpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufTtcblxuY29uc3QgdGVzdCA9IChmbiwgLi4uYXJncykgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiAhIWZuKC4uLmFyZ3MpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG5jb25zdCBtYXliZVdpdGhBdXRoQ3JlZGVudGlhbHMgPSAodXJsKSA9PiB7XG4gIGNvbnN0IHByb3RvY29sSW5kZXggPSB1cmwuaW5kZXhPZignOi8vJyk7XG4gIGxldCB1cmxUb0NoZWNrID0gdXJsO1xuICBpZiAocHJvdG9jb2xJbmRleCAhPT0gLTEpIHtcbiAgICB1cmxUb0NoZWNrID0gdXJsVG9DaGVjay5zbGljZShwcm90b2NvbEluZGV4ICsgMyk7XG4gIH1cbiAgcmV0dXJuIHVybFRvQ2hlY2suaW5jbHVkZXMoJ0AnKSB8fCB1cmxUb0NoZWNrLmluY2x1ZGVzKCc6Jyk7XG59O1xuXG5jb25zdCBmYWN0b3J5ID0gKGVudikgPT4ge1xuICBjb25zdCBnbG9iYWxPYmplY3QgPVxuICAgIHV0aWxzLmdsb2JhbCAhPT0gdW5kZWZpbmVkICYmIHV0aWxzLmdsb2JhbCAhPT0gbnVsbFxuICAgICAgPyB1dGlscy5nbG9iYWxcbiAgICAgIDogZ2xvYmFsVGhpcztcbiAgY29uc3QgeyBSZWFkYWJsZVN0cmVhbSwgVGV4dEVuY29kZXIgfSA9IGdsb2JhbE9iamVjdDtcblxuICBlbnYgPSB1dGlscy5tZXJnZS5jYWxsKFxuICAgIHtcbiAgICAgIHNraXBVbmRlZmluZWQ6IHRydWUsXG4gICAgfSxcbiAgICB7XG4gICAgICBSZXF1ZXN0OiBnbG9iYWxPYmplY3QuUmVxdWVzdCxcbiAgICAgIFJlc3BvbnNlOiBnbG9iYWxPYmplY3QuUmVzcG9uc2UsXG4gICAgfSxcbiAgICBlbnZcbiAgKTtcblxuICBjb25zdCB7IGZldGNoOiBlbnZGZXRjaCwgUmVxdWVzdCwgUmVzcG9uc2UgfSA9IGVudjtcbiAgY29uc3QgaXNGZXRjaFN1cHBvcnRlZCA9IGVudkZldGNoID8gaXNGdW5jdGlvbihlbnZGZXRjaCkgOiB0eXBlb2YgZmV0Y2ggPT09ICdmdW5jdGlvbic7XG4gIGNvbnN0IGlzUmVxdWVzdFN1cHBvcnRlZCA9IGlzRnVuY3Rpb24oUmVxdWVzdCk7XG4gIGNvbnN0IGlzUmVzcG9uc2VTdXBwb3J0ZWQgPSBpc0Z1bmN0aW9uKFJlc3BvbnNlKTtcblxuICBpZiAoIWlzRmV0Y2hTdXBwb3J0ZWQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBpc1JlYWRhYmxlU3RyZWFtU3VwcG9ydGVkID0gaXNGZXRjaFN1cHBvcnRlZCAmJiBpc0Z1bmN0aW9uKFJlYWRhYmxlU3RyZWFtKTtcblxuICBjb25zdCBlbmNvZGVUZXh0ID1cbiAgICBpc0ZldGNoU3VwcG9ydGVkICYmXG4gICAgKHR5cGVvZiBUZXh0RW5jb2RlciA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyAoXG4gICAgICAgICAgKGVuY29kZXIpID0+IChzdHIpID0+XG4gICAgICAgICAgICBlbmNvZGVyLmVuY29kZShzdHIpXG4gICAgICAgICkobmV3IFRleHRFbmNvZGVyKCkpXG4gICAgICA6IGFzeW5jIChzdHIpID0+IG5ldyBVaW50OEFycmF5KGF3YWl0IG5ldyBSZXF1ZXN0KHN0cikuYXJyYXlCdWZmZXIoKSkpO1xuXG4gIGNvbnN0IHN1cHBvcnRzUmVxdWVzdFN0cmVhbSA9XG4gICAgaXNSZXF1ZXN0U3VwcG9ydGVkICYmXG4gICAgaXNSZWFkYWJsZVN0cmVhbVN1cHBvcnRlZCAmJlxuICAgIHRlc3QoKCkgPT4ge1xuICAgICAgbGV0IGR1cGxleEFjY2Vzc2VkID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IHJlcXVlc3QgPSBuZXcgUmVxdWVzdChwbGF0Zm9ybS5vcmlnaW4sIHtcbiAgICAgICAgYm9keTogbmV3IFJlYWRhYmxlU3RyZWFtKCksXG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBnZXQgZHVwbGV4KCkge1xuICAgICAgICAgIGR1cGxleEFjY2Vzc2VkID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm4gJ2hhbGYnO1xuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGhhc0NvbnRlbnRUeXBlID0gcmVxdWVzdC5oZWFkZXJzLmhhcygnQ29udGVudC1UeXBlJyk7XG5cbiAgICAgIGlmIChyZXF1ZXN0LmJvZHkgIT0gbnVsbCkge1xuICAgICAgICByZXF1ZXN0LmJvZHkuY2FuY2VsKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkdXBsZXhBY2Nlc3NlZCAmJiAhaGFzQ29udGVudFR5cGU7XG4gICAgfSk7XG5cbiAgY29uc3Qgc3VwcG9ydHNSZXNwb25zZVN0cmVhbSA9XG4gICAgaXNSZXNwb25zZVN1cHBvcnRlZCAmJlxuICAgIGlzUmVhZGFibGVTdHJlYW1TdXBwb3J0ZWQgJiZcbiAgICB0ZXN0KCgpID0+IHV0aWxzLmlzUmVhZGFibGVTdHJlYW0obmV3IFJlc3BvbnNlKCcnKS5ib2R5KSk7XG5cbiAgY29uc3QgcmVzb2x2ZXJzID0ge1xuICAgIHN0cmVhbTogc3VwcG9ydHNSZXNwb25zZVN0cmVhbSAmJiAoKHJlcykgPT4gcmVzLmJvZHkpLFxuICB9O1xuXG4gIGlzRmV0Y2hTdXBwb3J0ZWQgJiZcbiAgICAoKCkgPT4ge1xuICAgICAgWyd0ZXh0JywgJ2FycmF5QnVmZmVyJywgJ2Jsb2InLCAnZm9ybURhdGEnLCAnc3RyZWFtJ10uZm9yRWFjaCgodHlwZSkgPT4ge1xuICAgICAgICAhcmVzb2x2ZXJzW3R5cGVdICYmXG4gICAgICAgICAgKHJlc29sdmVyc1t0eXBlXSA9IChyZXMsIGNvbmZpZykgPT4ge1xuICAgICAgICAgICAgbGV0IG1ldGhvZCA9IHJlcyAmJiByZXNbdHlwZV07XG5cbiAgICAgICAgICAgIGlmIChtZXRob2QpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG1ldGhvZC5jYWxsKHJlcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICAgICAgICBgUmVzcG9uc2UgdHlwZSAnJHt0eXBlfScgaXMgbm90IHN1cHBvcnRlZGAsXG4gICAgICAgICAgICAgIEF4aW9zRXJyb3IuRVJSX05PVF9TVVBQT1JULFxuICAgICAgICAgICAgICBjb25maWdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KSgpO1xuXG4gIGNvbnN0IGdldEJvZHlMZW5ndGggPSBhc3luYyAoYm9keSkgPT4ge1xuICAgIGlmIChib2R5ID09IG51bGwpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGlmICh1dGlscy5pc0Jsb2IoYm9keSkpIHtcbiAgICAgIHJldHVybiBib2R5LnNpemU7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzLmlzU3BlY0NvbXBsaWFudEZvcm0oYm9keSkpIHtcbiAgICAgIGNvbnN0IF9yZXF1ZXN0ID0gbmV3IFJlcXVlc3QocGxhdGZvcm0ub3JpZ2luLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBib2R5LFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gKGF3YWl0IF9yZXF1ZXN0LmFycmF5QnVmZmVyKCkpLmJ5dGVMZW5ndGg7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXJWaWV3KGJvZHkpIHx8IHV0aWxzLmlzQXJyYXlCdWZmZXIoYm9keSkpIHtcbiAgICAgIHJldHVybiBib2R5LmJ5dGVMZW5ndGg7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKGJvZHkpKSB7XG4gICAgICBib2R5ID0gYm9keSArICcnO1xuICAgIH1cblxuICAgIGlmICh1dGlscy5pc1N0cmluZyhib2R5KSkge1xuICAgICAgcmV0dXJuIChhd2FpdCBlbmNvZGVUZXh0KGJvZHkpKS5ieXRlTGVuZ3RoO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCByZXNvbHZlQm9keUxlbmd0aCA9IGFzeW5jIChoZWFkZXJzLCBib2R5KSA9PiB7XG4gICAgY29uc3QgbGVuZ3RoID0gdXRpbHMudG9GaW5pdGVOdW1iZXIoaGVhZGVycy5nZXRDb250ZW50TGVuZ3RoKCkpO1xuXG4gICAgcmV0dXJuIGxlbmd0aCA9PSBudWxsID8gZ2V0Qm9keUxlbmd0aChib2R5KSA6IGxlbmd0aDtcbiAgfTtcblxuICByZXR1cm4gYXN5bmMgKGNvbmZpZykgPT4ge1xuICAgIGxldCB7XG4gICAgICB1cmwsXG4gICAgICBtZXRob2QsXG4gICAgICBkYXRhLFxuICAgICAgc2lnbmFsLFxuICAgICAgY2FuY2VsVG9rZW4sXG4gICAgICB0aW1lb3V0LFxuICAgICAgb25Eb3dubG9hZFByb2dyZXNzLFxuICAgICAgb25VcGxvYWRQcm9ncmVzcyxcbiAgICAgIHJlc3BvbnNlVHlwZSxcbiAgICAgIGhlYWRlcnMsXG4gICAgICB3aXRoQ3JlZGVudGlhbHMgPSAnc2FtZS1vcmlnaW4nLFxuICAgICAgZmV0Y2hPcHRpb25zLFxuICAgICAgbWF4Q29udGVudExlbmd0aCxcbiAgICAgIG1heEJvZHlMZW5ndGgsXG4gICAgfSA9IHJlc29sdmVDb25maWcoY29uZmlnKTtcblxuICAgIGNvbnN0IGhhc01heENvbnRlbnRMZW5ndGggPSB1dGlscy5pc051bWJlcihtYXhDb250ZW50TGVuZ3RoKSAmJiBtYXhDb250ZW50TGVuZ3RoID4gLTE7XG4gICAgY29uc3QgaGFzTWF4Qm9keUxlbmd0aCA9IHV0aWxzLmlzTnVtYmVyKG1heEJvZHlMZW5ndGgpICYmIG1heEJvZHlMZW5ndGggPiAtMTtcbiAgICBjb25zdCBvd24gPSAoa2V5KSA9PiAodXRpbHMuaGFzT3duUHJvcChjb25maWcsIGtleSkgPyBjb25maWdba2V5XSA6IHVuZGVmaW5lZCk7XG5cbiAgICBsZXQgX2ZldGNoID0gZW52RmV0Y2ggfHwgZmV0Y2g7XG5cbiAgICByZXNwb25zZVR5cGUgPSByZXNwb25zZVR5cGUgPyAocmVzcG9uc2VUeXBlICsgJycpLnRvTG93ZXJDYXNlKCkgOiAndGV4dCc7XG5cbiAgICBsZXQgY29tcG9zZWRTaWduYWwgPSBjb21wb3NlU2lnbmFscyhcbiAgICAgIFtzaWduYWwsIGNhbmNlbFRva2VuICYmIGNhbmNlbFRva2VuLnRvQWJvcnRTaWduYWwoKV0sXG4gICAgICB0aW1lb3V0XG4gICAgKTtcblxuICAgIGxldCByZXF1ZXN0ID0gbnVsbDtcblxuICAgIGNvbnN0IHVuc3Vic2NyaWJlID1cbiAgICAgIGNvbXBvc2VkU2lnbmFsICYmXG4gICAgICBjb21wb3NlZFNpZ25hbC51bnN1YnNjcmliZSAmJlxuICAgICAgKCgpID0+IHtcbiAgICAgICAgY29tcG9zZWRTaWduYWwudW5zdWJzY3JpYmUoKTtcbiAgICAgIH0pO1xuXG4gICAgbGV0IHJlcXVlc3RDb250ZW50TGVuZ3RoO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb25cbiAgICAgIGxldCBhdXRoID0gdW5kZWZpbmVkO1xuICAgICAgY29uc3QgY29uZmlnQXV0aCA9IG93bignYXV0aCcpO1xuXG4gICAgICBpZiAoY29uZmlnQXV0aCkge1xuICAgICAgICBjb25zdCB1c2VybmFtZSA9IGNvbmZpZ0F1dGgudXNlcm5hbWUgfHwgJyc7XG4gICAgICAgIGNvbnN0IHBhc3N3b3JkID0gY29uZmlnQXV0aC5wYXNzd29yZCB8fCAnJztcbiAgICAgICAgYXV0aCA9IHtcbiAgICAgICAgICB1c2VybmFtZSxcbiAgICAgICAgICBwYXNzd29yZFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAobWF5YmVXaXRoQXV0aENyZWRlbnRpYWxzKHVybCkpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkVVJMID0gbmV3IFVSTCh1cmwsIHBsYXRmb3JtLm9yaWdpbik7XG5cbiAgICAgICAgaWYgKCFhdXRoICYmIChwYXJzZWRVUkwudXNlcm5hbWUgfHwgcGFyc2VkVVJMLnBhc3N3b3JkKSkge1xuICAgICAgICAgIGNvbnN0IHVybFVzZXJuYW1lID0gZGVjb2RlVVJJQ29tcG9uZW50U2FmZShwYXJzZWRVUkwudXNlcm5hbWUpO1xuICAgICAgICAgIGNvbnN0IHVybFBhc3N3b3JkID0gZGVjb2RlVVJJQ29tcG9uZW50U2FmZShwYXJzZWRVUkwucGFzc3dvcmQpO1xuICAgICAgICAgIGF1dGggPSB7XG4gICAgICAgICAgICB1c2VybmFtZTogdXJsVXNlcm5hbWUsXG4gICAgICAgICAgICBwYXNzd29yZDogdXJsUGFzc3dvcmRcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcnNlZFVSTC51c2VybmFtZSB8fCBwYXJzZWRVUkwucGFzc3dvcmQpIHtcbiAgICAgICAgICBwYXJzZWRVUkwudXNlcm5hbWUgPSAnJztcbiAgICAgICAgICBwYXJzZWRVUkwucGFzc3dvcmQgPSAnJztcbiAgICAgICAgICB1cmwgPSBwYXJzZWRVUkwuaHJlZjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoYXV0aCkge1xuICAgICAgICBoZWFkZXJzLmRlbGV0ZSgnYXV0aG9yaXphdGlvbicpO1xuICAgICAgICBoZWFkZXJzLnNldChcbiAgICAgICAgICAnQXV0aG9yaXphdGlvbicsXG4gICAgICAgICAgJ0Jhc2ljICcgKyBidG9hKGVuY29kZVVURjgoKGF1dGgudXNlcm5hbWUgfHwgJycpICsgJzonICsgKGF1dGgucGFzc3dvcmQgfHwgJycpKSlcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gRW5mb3JjZSBtYXhDb250ZW50TGVuZ3RoIGZvciBkYXRhOiBVUkxzIHVwLWZyb250IHNvIHdlIG5ldmVyIG1hdGVyaWFsaXplXG4gICAgICAvLyBhbiBvdmVyc2l6ZWQgcGF5bG9hZC4gVGhlIEhUVFAgYWRhcHRlciBhcHBsaWVzIHRoZSBzYW1lIGNoZWNrIChzZWUgaHR0cC5qc1xuICAgICAgLy8gXCJpZiAocHJvdG9jb2wgPT09ICdkYXRhOicpXCIgYnJhbmNoKS5cbiAgICAgIGlmIChoYXNNYXhDb250ZW50TGVuZ3RoICYmIHR5cGVvZiB1cmwgPT09ICdzdHJpbmcnICYmIHVybC5zdGFydHNXaXRoKCdkYXRhOicpKSB7XG4gICAgICAgIGNvbnN0IGVzdGltYXRlZCA9IGVzdGltYXRlRGF0YVVSTERlY29kZWRCeXRlcyh1cmwpO1xuICAgICAgICBpZiAoZXN0aW1hdGVkID4gbWF4Q29udGVudExlbmd0aCkge1xuICAgICAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICAgICAgJ21heENvbnRlbnRMZW5ndGggc2l6ZSBvZiAnICsgbWF4Q29udGVudExlbmd0aCArICcgZXhjZWVkZWQnLFxuICAgICAgICAgICAgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFLFxuICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgcmVxdWVzdFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gRW5mb3JjZSBtYXhCb2R5TGVuZ3RoIGFnYWluc3QgdGhlIG91dGJvdW5kIHJlcXVlc3QgYm9keSBiZWZvcmUgZGlzcGF0Y2guXG4gICAgICAvLyBNaXJyb3JzIGh0dHAuanMgYmVoYXZpb3IgKEVSUl9CQURfUkVRVUVTVCAvICdSZXF1ZXN0IGJvZHkgbGFyZ2VyIHRoYW5cbiAgICAgIC8vIG1heEJvZHlMZW5ndGggbGltaXQnKS4gU2tpcCB3aGVuIHRoZSBib2R5IGxlbmd0aCBjYW5ub3QgYmUgZGV0ZXJtaW5lZFxuICAgICAgLy8gKGUuZy4gYSBsaXZlIFJlYWRhYmxlU3RyZWFtIHN1cHBsaWVkIGJ5IHRoZSBjYWxsZXIpLlxuICAgICAgaWYgKGhhc01heEJvZHlMZW5ndGggJiYgbWV0aG9kICE9PSAnZ2V0JyAmJiBtZXRob2QgIT09ICdoZWFkJykge1xuICAgICAgICBjb25zdCBvdXRib3VuZExlbmd0aCA9IGF3YWl0IHJlc29sdmVCb2R5TGVuZ3RoKGhlYWRlcnMsIGRhdGEpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdHlwZW9mIG91dGJvdW5kTGVuZ3RoID09PSAnbnVtYmVyJyAmJlxuICAgICAgICAgIGlzRmluaXRlKG91dGJvdW5kTGVuZ3RoKSAmJlxuICAgICAgICAgIG91dGJvdW5kTGVuZ3RoID4gbWF4Qm9keUxlbmd0aFxuICAgICAgICApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgICAgICdSZXF1ZXN0IGJvZHkgbGFyZ2VyIHRoYW4gbWF4Qm9keUxlbmd0aCBsaW1pdCcsXG4gICAgICAgICAgICBBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCxcbiAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgIHJlcXVlc3RcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgb25VcGxvYWRQcm9ncmVzcyAmJlxuICAgICAgICBzdXBwb3J0c1JlcXVlc3RTdHJlYW0gJiZcbiAgICAgICAgbWV0aG9kICE9PSAnZ2V0JyAmJlxuICAgICAgICBtZXRob2QgIT09ICdoZWFkJyAmJlxuICAgICAgICAocmVxdWVzdENvbnRlbnRMZW5ndGggPSBhd2FpdCByZXNvbHZlQm9keUxlbmd0aChoZWFkZXJzLCBkYXRhKSkgIT09IDBcbiAgICAgICkge1xuICAgICAgICBsZXQgX3JlcXVlc3QgPSBuZXcgUmVxdWVzdCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBkYXRhLFxuICAgICAgICAgIGR1cGxleDogJ2hhbGYnLFxuICAgICAgICB9KTtcblxuICAgICAgICBsZXQgY29udGVudFR5cGVIZWFkZXI7XG5cbiAgICAgICAgaWYgKHV0aWxzLmlzRm9ybURhdGEoZGF0YSkgJiYgKGNvbnRlbnRUeXBlSGVhZGVyID0gX3JlcXVlc3QuaGVhZGVycy5nZXQoJ2NvbnRlbnQtdHlwZScpKSkge1xuICAgICAgICAgIGhlYWRlcnMuc2V0Q29udGVudFR5cGUoY29udGVudFR5cGVIZWFkZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKF9yZXF1ZXN0LmJvZHkpIHtcbiAgICAgICAgICBjb25zdCBbb25Qcm9ncmVzcywgZmx1c2hdID0gcHJvZ3Jlc3NFdmVudERlY29yYXRvcihcbiAgICAgICAgICAgIHJlcXVlc3RDb250ZW50TGVuZ3RoLFxuICAgICAgICAgICAgcHJvZ3Jlc3NFdmVudFJlZHVjZXIoYXN5bmNEZWNvcmF0b3Iob25VcGxvYWRQcm9ncmVzcykpXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGRhdGEgPSB0cmFja1N0cmVhbShfcmVxdWVzdC5ib2R5LCBERUZBVUxUX0NIVU5LX1NJWkUsIG9uUHJvZ3Jlc3MsIGZsdXNoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIXV0aWxzLmlzU3RyaW5nKHdpdGhDcmVkZW50aWFscykpIHtcbiAgICAgICAgd2l0aENyZWRlbnRpYWxzID0gd2l0aENyZWRlbnRpYWxzID8gJ2luY2x1ZGUnIDogJ29taXQnO1xuICAgICAgfVxuXG4gICAgICAvLyBDbG91ZGZsYXJlIFdvcmtlcnMgdGhyb3dzIHdoZW4gY3JlZGVudGlhbHMgYXJlIGRlZmluZWRcbiAgICAgIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vY2xvdWRmbGFyZS93b3JrZXJkL2lzc3Vlcy85MDJcbiAgICAgIGNvbnN0IGlzQ3JlZGVudGlhbHNTdXBwb3J0ZWQgPSBpc1JlcXVlc3RTdXBwb3J0ZWQgJiYgJ2NyZWRlbnRpYWxzJyBpbiBSZXF1ZXN0LnByb3RvdHlwZTtcblxuICAgICAgLy8gSWYgZGF0YSBpcyBGb3JtRGF0YSBhbmQgQ29udGVudC1UeXBlIGlzIG11bHRpcGFydC9mb3JtLWRhdGEgd2l0aG91dCBib3VuZGFyeSxcbiAgICAgIC8vIGRlbGV0ZSBpdCBzbyBmZXRjaCBjYW4gc2V0IGl0IGNvcnJlY3RseSB3aXRoIHRoZSBib3VuZGFyeVxuICAgICAgaWYgKHV0aWxzLmlzRm9ybURhdGEoZGF0YSkpIHtcbiAgICAgICAgY29uc3QgY29udGVudFR5cGUgPSBoZWFkZXJzLmdldENvbnRlbnRUeXBlKCk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjb250ZW50VHlwZSAmJlxuICAgICAgICAgIC9ebXVsdGlwYXJ0XFwvZm9ybS1kYXRhL2kudGVzdChjb250ZW50VHlwZSkgJiZcbiAgICAgICAgICAhL2JvdW5kYXJ5PS9pLnRlc3QoY29udGVudFR5cGUpXG4gICAgICAgICkge1xuICAgICAgICAgIGhlYWRlcnMuZGVsZXRlKCdjb250ZW50LXR5cGUnKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTZXQgVXNlci1BZ2VudCBoZWFkZXIgaWYgbm90IGFscmVhZHkgc2V0IChmZXRjaCBkZWZhdWx0cyB0byAnbm9kZScgaW4gTm9kZS5qcylcbiAgICAgIGhlYWRlcnMuc2V0KCdVc2VyLUFnZW50JywgJ2F4aW9zLycgKyBWRVJTSU9OLCBmYWxzZSk7XG5cbiAgICAgIGNvbnN0IHJlc29sdmVkT3B0aW9ucyA9IHtcbiAgICAgICAgLi4uZmV0Y2hPcHRpb25zLFxuICAgICAgICBzaWduYWw6IGNvbXBvc2VkU2lnbmFsLFxuICAgICAgICBtZXRob2Q6IG1ldGhvZC50b1VwcGVyQ2FzZSgpLFxuICAgICAgICBoZWFkZXJzOiB0b0J5dGVTdHJpbmdIZWFkZXJPYmplY3QoaGVhZGVycy5ub3JtYWxpemUoKSksXG4gICAgICAgIGJvZHk6IGRhdGEsXG4gICAgICAgIGR1cGxleDogJ2hhbGYnLFxuICAgICAgICBjcmVkZW50aWFsczogaXNDcmVkZW50aWFsc1N1cHBvcnRlZCA/IHdpdGhDcmVkZW50aWFscyA6IHVuZGVmaW5lZCxcbiAgICAgIH07XG5cbiAgICAgIHJlcXVlc3QgPSBpc1JlcXVlc3RTdXBwb3J0ZWQgJiYgbmV3IFJlcXVlc3QodXJsLCByZXNvbHZlZE9wdGlvbnMpO1xuXG4gICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCAoaXNSZXF1ZXN0U3VwcG9ydGVkXG4gICAgICAgID8gX2ZldGNoKHJlcXVlc3QsIGZldGNoT3B0aW9ucylcbiAgICAgICAgOiBfZmV0Y2godXJsLCByZXNvbHZlZE9wdGlvbnMpKTtcblxuICAgICAgLy8gQ2hlYXAgcHJlLWNoZWNrOiBpZiB0aGUgc2VydmVyIGhvbmVzdGx5IGRlY2xhcmVzIGEgY29udGVudC1sZW5ndGggdGhhdFxuICAgICAgLy8gYWxyZWFkeSBleGNlZWRzIHRoZSBjYXAsIHJlamVjdCBiZWZvcmUgd2Ugc3RhcnQgc3RyZWFtaW5nLlxuICAgICAgaWYgKGhhc01heENvbnRlbnRMZW5ndGgpIHtcbiAgICAgICAgY29uc3QgZGVjbGFyZWRMZW5ndGggPSB1dGlscy50b0Zpbml0ZU51bWJlcihyZXNwb25zZS5oZWFkZXJzLmdldCgnY29udGVudC1sZW5ndGgnKSk7XG4gICAgICAgIGlmIChkZWNsYXJlZExlbmd0aCAhPSBudWxsICYmIGRlY2xhcmVkTGVuZ3RoID4gbWF4Q29udGVudExlbmd0aCkge1xuICAgICAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICAgICAgJ21heENvbnRlbnRMZW5ndGggc2l6ZSBvZiAnICsgbWF4Q29udGVudExlbmd0aCArICcgZXhjZWVkZWQnLFxuICAgICAgICAgICAgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFLFxuICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgcmVxdWVzdFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgaXNTdHJlYW1SZXNwb25zZSA9XG4gICAgICAgIHN1cHBvcnRzUmVzcG9uc2VTdHJlYW0gJiYgKHJlc3BvbnNlVHlwZSA9PT0gJ3N0cmVhbScgfHwgcmVzcG9uc2VUeXBlID09PSAncmVzcG9uc2UnKTtcblxuICAgICAgaWYgKFxuICAgICAgICBzdXBwb3J0c1Jlc3BvbnNlU3RyZWFtICYmXG4gICAgICAgIHJlc3BvbnNlLmJvZHkgJiZcbiAgICAgICAgKG9uRG93bmxvYWRQcm9ncmVzcyB8fCBoYXNNYXhDb250ZW50TGVuZ3RoIHx8IChpc1N0cmVhbVJlc3BvbnNlICYmIHVuc3Vic2NyaWJlKSlcbiAgICAgICkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0ge307XG5cbiAgICAgICAgWydzdGF0dXMnLCAnc3RhdHVzVGV4dCcsICdoZWFkZXJzJ10uZm9yRWFjaCgocHJvcCkgPT4ge1xuICAgICAgICAgIG9wdGlvbnNbcHJvcF0gPSByZXNwb25zZVtwcm9wXTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgcmVzcG9uc2VDb250ZW50TGVuZ3RoID0gdXRpbHMudG9GaW5pdGVOdW1iZXIocmVzcG9uc2UuaGVhZGVycy5nZXQoJ2NvbnRlbnQtbGVuZ3RoJykpO1xuXG4gICAgICAgIGNvbnN0IFtvblByb2dyZXNzLCBmbHVzaF0gPVxuICAgICAgICAgIChvbkRvd25sb2FkUHJvZ3Jlc3MgJiZcbiAgICAgICAgICAgIHByb2dyZXNzRXZlbnREZWNvcmF0b3IoXG4gICAgICAgICAgICAgIHJlc3BvbnNlQ29udGVudExlbmd0aCxcbiAgICAgICAgICAgICAgcHJvZ3Jlc3NFdmVudFJlZHVjZXIoYXN5bmNEZWNvcmF0b3Iob25Eb3dubG9hZFByb2dyZXNzKSwgdHJ1ZSlcbiAgICAgICAgICAgICkpIHx8XG4gICAgICAgICAgW107XG5cbiAgICAgICAgbGV0IGJ5dGVzUmVhZCA9IDA7XG4gICAgICAgIGNvbnN0IG9uQ2h1bmtQcm9ncmVzcyA9IChsb2FkZWRCeXRlcykgPT4ge1xuICAgICAgICAgIGlmIChoYXNNYXhDb250ZW50TGVuZ3RoKSB7XG4gICAgICAgICAgICBieXRlc1JlYWQgPSBsb2FkZWRCeXRlcztcbiAgICAgICAgICAgIGlmIChieXRlc1JlYWQgPiBtYXhDb250ZW50TGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICAgICAgICAgICdtYXhDb250ZW50TGVuZ3RoIHNpemUgb2YgJyArIG1heENvbnRlbnRMZW5ndGggKyAnIGV4Y2VlZGVkJyxcbiAgICAgICAgICAgICAgICBBeGlvc0Vycm9yLkVSUl9CQURfUkVTUE9OU0UsXG4gICAgICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgICAgIHJlcXVlc3RcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgb25Qcm9ncmVzcyAmJiBvblByb2dyZXNzKGxvYWRlZEJ5dGVzKTtcbiAgICAgICAgfTtcblxuICAgICAgICByZXNwb25zZSA9IG5ldyBSZXNwb25zZShcbiAgICAgICAgICB0cmFja1N0cmVhbShyZXNwb25zZS5ib2R5LCBERUZBVUxUX0NIVU5LX1NJWkUsIG9uQ2h1bmtQcm9ncmVzcywgKCkgPT4ge1xuICAgICAgICAgICAgZmx1c2ggJiYgZmx1c2goKTtcbiAgICAgICAgICAgIHVuc3Vic2NyaWJlICYmIHVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgb3B0aW9uc1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXNwb25zZVR5cGUgPSByZXNwb25zZVR5cGUgfHwgJ3RleHQnO1xuXG4gICAgICBsZXQgcmVzcG9uc2VEYXRhID0gYXdhaXQgcmVzb2x2ZXJzW3V0aWxzLmZpbmRLZXkocmVzb2x2ZXJzLCByZXNwb25zZVR5cGUpIHx8ICd0ZXh0J10oXG4gICAgICAgIHJlc3BvbnNlLFxuICAgICAgICBjb25maWdcbiAgICAgICk7XG5cbiAgICAgIC8vIEZhbGxiYWNrIGVuZm9yY2VtZW50IGZvciBlbnZpcm9ubWVudHMgd2l0aG91dCBSZWFkYWJsZVN0cmVhbSBzdXBwb3J0XG4gICAgICAvLyAobGVnYWN5IHJ1bnRpbWVzKS4gRGV0ZWN0IG1hdGVyaWFsaXplZCBzaXplIGZyb20gdHlwZWQgb3V0cHV0OyBza2lwXG4gICAgICAvLyBzdHJlYW1zL1Jlc3BvbnNlIHBhc3N0aHJvdWdoIHNpbmNlIHRoZSB1c2VyIHdpbGwgcmVhZCB0aG9zZSB0aGVtc2VsdmVzLlxuICAgICAgaWYgKGhhc01heENvbnRlbnRMZW5ndGggJiYgIXN1cHBvcnRzUmVzcG9uc2VTdHJlYW0gJiYgIWlzU3RyZWFtUmVzcG9uc2UpIHtcbiAgICAgICAgbGV0IG1hdGVyaWFsaXplZFNpemU7XG4gICAgICAgIGlmIChyZXNwb25zZURhdGEgIT0gbnVsbCkge1xuICAgICAgICAgIGlmICh0eXBlb2YgcmVzcG9uc2VEYXRhLmJ5dGVMZW5ndGggPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBtYXRlcmlhbGl6ZWRTaXplID0gcmVzcG9uc2VEYXRhLmJ5dGVMZW5ndGg7XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcmVzcG9uc2VEYXRhLnNpemUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBtYXRlcmlhbGl6ZWRTaXplID0gcmVzcG9uc2VEYXRhLnNpemU7XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcmVzcG9uc2VEYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgbWF0ZXJpYWxpemVkU2l6ZSA9XG4gICAgICAgICAgICAgIHR5cGVvZiBUZXh0RW5jb2RlciA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgICAgID8gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHJlc3BvbnNlRGF0YSkuYnl0ZUxlbmd0aFxuICAgICAgICAgICAgICAgIDogcmVzcG9uc2VEYXRhLmxlbmd0aDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBtYXRlcmlhbGl6ZWRTaXplID09PSAnbnVtYmVyJyAmJiBtYXRlcmlhbGl6ZWRTaXplID4gbWF4Q29udGVudExlbmd0aCkge1xuICAgICAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICAgICAgJ21heENvbnRlbnRMZW5ndGggc2l6ZSBvZiAnICsgbWF4Q29udGVudExlbmd0aCArICcgZXhjZWVkZWQnLFxuICAgICAgICAgICAgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFLFxuICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgcmVxdWVzdFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgIWlzU3RyZWFtUmVzcG9uc2UgJiYgdW5zdWJzY3JpYmUgJiYgdW5zdWJzY3JpYmUoKTtcblxuICAgICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwge1xuICAgICAgICAgIGRhdGE6IHJlc3BvbnNlRGF0YSxcbiAgICAgICAgICBoZWFkZXJzOiBBeGlvc0hlYWRlcnMuZnJvbShyZXNwb25zZS5oZWFkZXJzKSxcbiAgICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgICBzdGF0dXNUZXh0OiByZXNwb25zZS5zdGF0dXNUZXh0LFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICByZXF1ZXN0LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdW5zdWJzY3JpYmUgJiYgdW5zdWJzY3JpYmUoKTtcblxuICAgICAgLy8gU2FmYXJpIGNhbiBzdXJmYWNlIGZldGNoIGFib3J0cyBhcyBhIERPTUV4Y2VwdGlvbi1saWtlIG9iamVjdCB3aG9zZVxuICAgICAgLy8gYnJhbmRlZCBnZXR0ZXJzIHRocm93LiBQcmVmZXIgb3VyIGNvbXBvc2VkIHNpZ25hbCByZWFzb24gYmVmb3JlIHJlYWRpbmdcbiAgICAgIC8vIHRoZSBjYXVnaHQgZXJyb3IsIHByZXNlcnZpbmcgdGltZW91dCB2cyBjYW5jZWxsYXRpb24gc2VtYW50aWNzLlxuICAgICAgaWYgKGNvbXBvc2VkU2lnbmFsICYmIGNvbXBvc2VkU2lnbmFsLmFib3J0ZWQgJiYgY29tcG9zZWRTaWduYWwucmVhc29uIGluc3RhbmNlb2YgQXhpb3NFcnJvcikge1xuICAgICAgICBjb25zdCBjYW5jZWxlZEVycm9yID0gY29tcG9zZWRTaWduYWwucmVhc29uO1xuICAgICAgICBjYW5jZWxlZEVycm9yLmNvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgcmVxdWVzdCAmJiAoY2FuY2VsZWRFcnJvci5yZXF1ZXN0ID0gcmVxdWVzdCk7XG4gICAgICAgIGVyciAhPT0gY2FuY2VsZWRFcnJvciAmJiAoY2FuY2VsZWRFcnJvci5jYXVzZSA9IGVycik7XG4gICAgICAgIHRocm93IGNhbmNlbGVkRXJyb3I7XG4gICAgICB9XG5cbiAgICAgIGlmIChlcnIgJiYgZXJyLm5hbWUgPT09ICdUeXBlRXJyb3InICYmIC9Mb2FkIGZhaWxlZHxmZXRjaC9pLnRlc3QoZXJyLm1lc3NhZ2UpKSB7XG4gICAgICAgIHRocm93IE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgbmV3IEF4aW9zRXJyb3IoXG4gICAgICAgICAgICAnTmV0d29yayBFcnJvcicsXG4gICAgICAgICAgICBBeGlvc0Vycm9yLkVSUl9ORVRXT1JLLFxuICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICAgIGVyciAmJiBlcnIucmVzcG9uc2VcbiAgICAgICAgICApLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNhdXNlOiBlcnIuY2F1c2UgfHwgZXJyLFxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgQXhpb3NFcnJvci5mcm9tKGVyciwgZXJyICYmIGVyci5jb2RlLCBjb25maWcsIHJlcXVlc3QsIGVyciAmJiBlcnIucmVzcG9uc2UpO1xuICAgIH1cbiAgfTtcbn07XG5cbmNvbnN0IHNlZWRDYWNoZSA9IG5ldyBNYXAoKTtcblxuZXhwb3J0IGNvbnN0IGdldEZldGNoID0gKGNvbmZpZykgPT4ge1xuICBsZXQgZW52ID0gKGNvbmZpZyAmJiBjb25maWcuZW52KSB8fCB7fTtcbiAgY29uc3QgeyBmZXRjaCwgUmVxdWVzdCwgUmVzcG9uc2UgfSA9IGVudjtcbiAgY29uc3Qgc2VlZHMgPSBbUmVxdWVzdCwgUmVzcG9uc2UsIGZldGNoXTtcblxuICBsZXQgbGVuID0gc2VlZHMubGVuZ3RoLFxuICAgIGkgPSBsZW4sXG4gICAgc2VlZCxcbiAgICB0YXJnZXQsXG4gICAgbWFwID0gc2VlZENhY2hlO1xuXG4gIHdoaWxlIChpLS0pIHtcbiAgICBzZWVkID0gc2VlZHNbaV07XG4gICAgdGFyZ2V0ID0gbWFwLmdldChzZWVkKTtcblxuICAgIHRhcmdldCA9PT0gdW5kZWZpbmVkICYmIG1hcC5zZXQoc2VlZCwgKHRhcmdldCA9IGkgPyBuZXcgTWFwKCkgOiBmYWN0b3J5KGVudikpKTtcblxuICAgIG1hcCA9IHRhcmdldDtcbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59O1xuXG5jb25zdCBhZGFwdGVyID0gZ2V0RmV0Y2goKTtcblxuZXhwb3J0IGRlZmF1bHQgYWRhcHRlcjtcbiIsIi8qKlxuICogRXN0aW1hdGUgZGVjb2RlZCBieXRlIGxlbmd0aCBvZiBhIGRhdGE6Ly8gVVJMICp3aXRob3V0KiBhbGxvY2F0aW5nIGxhcmdlIGJ1ZmZlcnMuXG4gKiAtIEZvciBiYXNlNjQ6IGNvbXB1dGUgZXhhY3QgZGVjb2RlZCBzaXplIHVzaW5nIGxlbmd0aCBhbmQgcGFkZGluZztcbiAqICAgICAgICAgICAgICAgaGFuZGxlICVYWCBhdCB0aGUgY2hhcmFjdGVyLWNvdW50IGxldmVsIChubyBzdHJpbmcgYWxsb2NhdGlvbikuXG4gKiAtIEZvciBub24tYmFzZTY0OiB1c2UgVVRGLTggYnl0ZUxlbmd0aCBvZiB0aGUgZW5jb2RlZCBib2R5IGFzIGEgc2FmZSB1cHBlciBib3VuZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBlc3RpbWF0ZURhdGFVUkxEZWNvZGVkQnl0ZXModXJsKSB7XG4gIGlmICghdXJsIHx8IHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSByZXR1cm4gMDtcbiAgaWYgKCF1cmwuc3RhcnRzV2l0aCgnZGF0YTonKSkgcmV0dXJuIDA7XG5cbiAgY29uc3QgY29tbWEgPSB1cmwuaW5kZXhPZignLCcpO1xuICBpZiAoY29tbWEgPCAwKSByZXR1cm4gMDtcblxuICBjb25zdCBtZXRhID0gdXJsLnNsaWNlKDUsIGNvbW1hKTtcbiAgY29uc3QgYm9keSA9IHVybC5zbGljZShjb21tYSArIDEpO1xuICBjb25zdCBpc0Jhc2U2NCA9IC87YmFzZTY0L2kudGVzdChtZXRhKTtcblxuICBpZiAoaXNCYXNlNjQpIHtcbiAgICBsZXQgZWZmZWN0aXZlTGVuID0gYm9keS5sZW5ndGg7XG4gICAgY29uc3QgbGVuID0gYm9keS5sZW5ndGg7IC8vIGNhY2hlIGxlbmd0aFxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgaWYgKGJvZHkuY2hhckNvZGVBdChpKSA9PT0gMzcgLyogJyUnICovICYmIGkgKyAyIDwgbGVuKSB7XG4gICAgICAgIGNvbnN0IGEgPSBib2R5LmNoYXJDb2RlQXQoaSArIDEpO1xuICAgICAgICBjb25zdCBiID0gYm9keS5jaGFyQ29kZUF0KGkgKyAyKTtcbiAgICAgICAgY29uc3QgaXNIZXggPVxuICAgICAgICAgICgoYSA+PSA0OCAmJiBhIDw9IDU3KSB8fCAoYSA+PSA2NSAmJiBhIDw9IDcwKSB8fCAoYSA+PSA5NyAmJiBhIDw9IDEwMikpICYmXG4gICAgICAgICAgKChiID49IDQ4ICYmIGIgPD0gNTcpIHx8IChiID49IDY1ICYmIGIgPD0gNzApIHx8IChiID49IDk3ICYmIGIgPD0gMTAyKSk7XG5cbiAgICAgICAgaWYgKGlzSGV4KSB7XG4gICAgICAgICAgZWZmZWN0aXZlTGVuIC09IDI7XG4gICAgICAgICAgaSArPSAyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHBhZCA9IDA7XG4gICAgbGV0IGlkeCA9IGxlbiAtIDE7XG5cbiAgICBjb25zdCB0YWlsSXNQY3QzRCA9IChqKSA9PlxuICAgICAgaiA+PSAyICYmXG4gICAgICBib2R5LmNoYXJDb2RlQXQoaiAtIDIpID09PSAzNyAmJiAvLyAnJSdcbiAgICAgIGJvZHkuY2hhckNvZGVBdChqIC0gMSkgPT09IDUxICYmIC8vICczJ1xuICAgICAgKGJvZHkuY2hhckNvZGVBdChqKSA9PT0gNjggfHwgYm9keS5jaGFyQ29kZUF0KGopID09PSAxMDApOyAvLyAnRCcgb3IgJ2QnXG5cbiAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgIGlmIChib2R5LmNoYXJDb2RlQXQoaWR4KSA9PT0gNjEgLyogJz0nICovKSB7XG4gICAgICAgIHBhZCsrO1xuICAgICAgICBpZHgtLTtcbiAgICAgIH0gZWxzZSBpZiAodGFpbElzUGN0M0QoaWR4KSkge1xuICAgICAgICBwYWQrKztcbiAgICAgICAgaWR4IC09IDM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBhZCA9PT0gMSAmJiBpZHggPj0gMCkge1xuICAgICAgaWYgKGJvZHkuY2hhckNvZGVBdChpZHgpID09PSA2MSAvKiAnPScgKi8pIHtcbiAgICAgICAgcGFkKys7XG4gICAgICB9IGVsc2UgaWYgKHRhaWxJc1BjdDNEKGlkeCkpIHtcbiAgICAgICAgcGFkKys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZ3JvdXBzID0gTWF0aC5mbG9vcihlZmZlY3RpdmVMZW4gLyA0KTtcbiAgICBjb25zdCBieXRlcyA9IGdyb3VwcyAqIDMgLSAocGFkIHx8IDApO1xuICAgIHJldHVybiBieXRlcyA+IDAgPyBieXRlcyA6IDA7XG4gIH1cblxuICBpZiAodHlwZW9mIEJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIEJ1ZmZlci5ieXRlTGVuZ3RoID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5ieXRlTGVuZ3RoKGJvZHksICd1dGY4Jyk7XG4gIH1cblxuICAvLyBDb21wdXRlIFVURi04IGJ5dGUgbGVuZ3RoIGRpcmVjdGx5IGZyb20gVVRGLTE2IGNvZGUgdW5pdHMgd2l0aG91dCBhbGxvY2F0aW5nXG4gIC8vIGEgYnl0ZSBidWZmZXIgKFRleHRFbmNvZGVyLmVuY29kZSB3b3VsZCBkZWZlYXQgdGhlIERvUyBndWFyZCBvbiBsYXJnZSBib2RpZXMpLlxuICAvLyBVc2luZyBib2R5Lmxlbmd0aCBoZXJlIHdvdWxkIHVuZGVyY291bnQgbm9uLUFTQ0lJIChlLmcuICfigqwnIGlzIDEgY29kZSB1bml0XG4gIC8vIGJ1dCAzIFVURi04IGJ5dGVzKS5cbiAgbGV0IGJ5dGVzID0gMDtcbiAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGJvZHkubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBjb25zdCBjID0gYm9keS5jaGFyQ29kZUF0KGkpO1xuICAgIGlmIChjIDwgMHg4MCkge1xuICAgICAgYnl0ZXMgKz0gMTtcbiAgICB9IGVsc2UgaWYgKGMgPCAweDgwMCkge1xuICAgICAgYnl0ZXMgKz0gMjtcbiAgICB9IGVsc2UgaWYgKGMgPj0gMHhkODAwICYmIGMgPD0gMHhkYmZmICYmIGkgKyAxIDwgbGVuKSB7XG4gICAgICBjb25zdCBuZXh0ID0gYm9keS5jaGFyQ29kZUF0KGkgKyAxKTtcbiAgICAgIGlmIChuZXh0ID49IDB4ZGMwMCAmJiBuZXh0IDw9IDB4ZGZmZikge1xuICAgICAgICBieXRlcyArPSA0O1xuICAgICAgICBpKys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBieXRlcyArPSAzO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBieXRlcyArPSAzO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYnl0ZXM7XG59XG4iLCJpbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IGh0dHBBZGFwdGVyIGZyb20gJy4vaHR0cC5qcyc7XG5pbXBvcnQgeGhyQWRhcHRlciBmcm9tICcuL3hoci5qcyc7XG5pbXBvcnQgKiBhcyBmZXRjaEFkYXB0ZXIgZnJvbSAnLi9mZXRjaC5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuXG4vKipcbiAqIEtub3duIGFkYXB0ZXJzIG1hcHBpbmcuXG4gKiBQcm92aWRlcyBlbnZpcm9ubWVudC1zcGVjaWZpYyBhZGFwdGVycyBmb3IgQXhpb3M6XG4gKiAtIGBodHRwYCBmb3IgTm9kZS5qc1xuICogLSBgeGhyYCBmb3IgYnJvd3NlcnNcbiAqIC0gYGZldGNoYCBmb3IgZmV0Y2ggQVBJLWJhc2VkIHJlcXVlc3RzXG4gKlxuICogQHR5cGUge09iamVjdDxzdHJpbmcsIEZ1bmN0aW9ufE9iamVjdD59XG4gKi9cbmNvbnN0IGtub3duQWRhcHRlcnMgPSB7XG4gIGh0dHA6IGh0dHBBZGFwdGVyLFxuICB4aHI6IHhockFkYXB0ZXIsXG4gIGZldGNoOiB7XG4gICAgZ2V0OiBmZXRjaEFkYXB0ZXIuZ2V0RmV0Y2gsXG4gIH0sXG59O1xuXG4vLyBBc3NpZ24gYWRhcHRlciBuYW1lcyBmb3IgZWFzaWVyIGRlYnVnZ2luZyBhbmQgaWRlbnRpZmljYXRpb25cbnV0aWxzLmZvckVhY2goa25vd25BZGFwdGVycywgKGZuLCB2YWx1ZSkgPT4ge1xuICBpZiAoZm4pIHtcbiAgICB0cnkge1xuICAgICAgLy8gTnVsbC1wcm90byBkZXNjcmlwdG9ycyBzbyBhIHBvbGx1dGVkIE9iamVjdC5wcm90b3R5cGUuZ2V0IGNhbm5vdCB0dXJuXG4gICAgICAvLyB0aGVzZSBkYXRhIGRlc2NyaXB0b3JzIGludG8gYWNjZXNzb3IgZGVzY3JpcHRvcnMgb24gdGhlIHdheSBpbi5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgJ25hbWUnLCB7IF9fcHJvdG9fXzogbnVsbCwgdmFsdWUgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgJ2FkYXB0ZXJOYW1lJywgeyBfX3Byb3RvX186IG51bGwsIHZhbHVlIH0pO1xuICB9XG59KTtcblxuLyoqXG4gKiBSZW5kZXIgYSByZWplY3Rpb24gcmVhc29uIHN0cmluZyBmb3IgdW5rbm93biBvciB1bnN1cHBvcnRlZCBhZGFwdGVyc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb25cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmNvbnN0IHJlbmRlclJlYXNvbiA9IChyZWFzb24pID0+IGAtICR7cmVhc29ufWA7XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIGFkYXB0ZXIgaXMgcmVzb2x2ZWQgKGZ1bmN0aW9uLCBudWxsLCBvciBmYWxzZSlcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufG51bGx8ZmFsc2V9IGFkYXB0ZXJcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5jb25zdCBpc1Jlc29sdmVkSGFuZGxlID0gKGFkYXB0ZXIpID0+XG4gIHV0aWxzLmlzRnVuY3Rpb24oYWRhcHRlcikgfHwgYWRhcHRlciA9PT0gbnVsbCB8fCBhZGFwdGVyID09PSBmYWxzZTtcblxuLyoqXG4gKiBHZXQgdGhlIGZpcnN0IHN1aXRhYmxlIGFkYXB0ZXIgZnJvbSB0aGUgcHJvdmlkZWQgbGlzdC5cbiAqIFRyaWVzIGVhY2ggYWRhcHRlciBpbiBvcmRlciB1bnRpbCBhIHN1cHBvcnRlZCBvbmUgaXMgZm91bmQuXG4gKiBUaHJvd3MgYW4gQXhpb3NFcnJvciBpZiBubyBhZGFwdGVyIGlzIHN1aXRhYmxlLlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nfEZ1bmN0aW9uPnxzdHJpbmd8RnVuY3Rpb259IGFkYXB0ZXJzIC0gQWRhcHRlcihzKSBieSBuYW1lIG9yIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAtIEF4aW9zIHJlcXVlc3QgY29uZmlndXJhdGlvblxuICogQHRocm93cyB7QXhpb3NFcnJvcn0gSWYgbm8gc3VpdGFibGUgYWRhcHRlciBpcyBhdmFpbGFibGVcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gVGhlIHJlc29sdmVkIGFkYXB0ZXIgZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gZ2V0QWRhcHRlcihhZGFwdGVycywgY29uZmlnKSB7XG4gIGFkYXB0ZXJzID0gdXRpbHMuaXNBcnJheShhZGFwdGVycykgPyBhZGFwdGVycyA6IFthZGFwdGVyc107XG5cbiAgY29uc3QgeyBsZW5ndGggfSA9IGFkYXB0ZXJzO1xuICBsZXQgbmFtZU9yQWRhcHRlcjtcbiAgbGV0IGFkYXB0ZXI7XG5cbiAgY29uc3QgcmVqZWN0ZWRSZWFzb25zID0ge307XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIG5hbWVPckFkYXB0ZXIgPSBhZGFwdGVyc1tpXTtcbiAgICBsZXQgaWQ7XG5cbiAgICBhZGFwdGVyID0gbmFtZU9yQWRhcHRlcjtcblxuICAgIGlmICghaXNSZXNvbHZlZEhhbmRsZShuYW1lT3JBZGFwdGVyKSkge1xuICAgICAgYWRhcHRlciA9IGtub3duQWRhcHRlcnNbKGlkID0gU3RyaW5nKG5hbWVPckFkYXB0ZXIpKS50b0xvd2VyQ2FzZSgpXTtcblxuICAgICAgaWYgKGFkYXB0ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihgVW5rbm93biBhZGFwdGVyICcke2lkfSdgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYWRhcHRlciAmJiAodXRpbHMuaXNGdW5jdGlvbihhZGFwdGVyKSB8fCAoYWRhcHRlciA9IGFkYXB0ZXIuZ2V0KGNvbmZpZykpKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmVqZWN0ZWRSZWFzb25zW2lkIHx8ICcjJyArIGldID0gYWRhcHRlcjtcbiAgfVxuXG4gIGlmICghYWRhcHRlcikge1xuICAgIGNvbnN0IHJlYXNvbnMgPSBPYmplY3QuZW50cmllcyhyZWplY3RlZFJlYXNvbnMpLm1hcChcbiAgICAgIChbaWQsIHN0YXRlXSkgPT5cbiAgICAgICAgYGFkYXB0ZXIgJHtpZH0gYCArXG4gICAgICAgIChzdGF0ZSA9PT0gZmFsc2UgPyAnaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZW52aXJvbm1lbnQnIDogJ2lzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkJylcbiAgICApO1xuXG4gICAgbGV0IHMgPSBsZW5ndGhcbiAgICAgID8gcmVhc29ucy5sZW5ndGggPiAxXG4gICAgICAgID8gJ3NpbmNlIDpcXG4nICsgcmVhc29ucy5tYXAocmVuZGVyUmVhc29uKS5qb2luKCdcXG4nKVxuICAgICAgICA6ICcgJyArIHJlbmRlclJlYXNvbihyZWFzb25zWzBdKVxuICAgICAgOiAnYXMgbm8gYWRhcHRlciBzcGVjaWZpZWQnO1xuXG4gICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoXG4gICAgICBgVGhlcmUgaXMgbm8gc3VpdGFibGUgYWRhcHRlciB0byBkaXNwYXRjaCB0aGUgcmVxdWVzdCBgICsgcyxcbiAgICAgICdFUlJfTk9UX1NVUFBPUlQnXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBhZGFwdGVyO1xufVxuXG4vKipcbiAqIEV4cG9ydHMgQXhpb3MgYWRhcHRlcnMgYW5kIHV0aWxpdHkgdG8gcmVzb2x2ZSBhbiBhZGFwdGVyXG4gKi9cbmV4cG9ydCBkZWZhdWx0IHtcbiAgLyoqXG4gICAqIFJlc29sdmUgYW4gYWRhcHRlciBmcm9tIGEgbGlzdCBvZiBhZGFwdGVyIG5hbWVzIG9yIGZ1bmN0aW9ucy5cbiAgICogQHR5cGUge0Z1bmN0aW9ufVxuICAgKi9cbiAgZ2V0QWRhcHRlcixcblxuICAvKipcbiAgICogRXhwb3NlcyBhbGwga25vd24gYWRhcHRlcnNcbiAgICogQHR5cGUge09iamVjdDxzdHJpbmcsIEZ1bmN0aW9ufE9iamVjdD59XG4gICAqL1xuICBhZGFwdGVyczoga25vd25BZGFwdGVycyxcbn07XG4iLCIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc3RyaWN0XG5leHBvcnQgZGVmYXVsdCBudWxsO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdHJhbnNmb3JtRGF0YSBmcm9tICcuL3RyYW5zZm9ybURhdGEuanMnO1xuaW1wb3J0IGlzQ2FuY2VsIGZyb20gJy4uL2NhbmNlbC9pc0NhbmNlbC5qcyc7XG5pbXBvcnQgZGVmYXVsdHMgZnJvbSAnLi4vZGVmYXVsdHMvaW5kZXguanMnO1xuaW1wb3J0IENhbmNlbGVkRXJyb3IgZnJvbSAnLi4vY2FuY2VsL0NhbmNlbGVkRXJyb3IuanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuLi9jb3JlL0F4aW9zSGVhZGVycy5qcyc7XG5pbXBvcnQgYWRhcHRlcnMgZnJvbSAnLi4vYWRhcHRlcnMvYWRhcHRlcnMuanMnO1xuXG4vKipcbiAqIFRocm93cyBhIGBDYW5jZWxlZEVycm9yYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyB0aGF0IGlzIHRvIGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0XG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKSB7XG4gIGlmIChjb25maWcuY2FuY2VsVG9rZW4pIHtcbiAgICBjb25maWcuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpO1xuICB9XG5cbiAgaWYgKGNvbmZpZy5zaWduYWwgJiYgY29uZmlnLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgdGhyb3cgbmV3IENhbmNlbGVkRXJyb3IobnVsbCwgY29uZmlnKTtcbiAgfVxufVxuXG4vKipcbiAqIERpc3BhdGNoIGEgcmVxdWVzdCB0byB0aGUgc2VydmVyIHVzaW5nIHRoZSBjb25maWd1cmVkIGFkYXB0ZXIuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHRoYXQgaXMgdG8gYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RcbiAqXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gVGhlIFByb21pc2UgdG8gYmUgZnVsZmlsbGVkXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRpc3BhdGNoUmVxdWVzdChjb25maWcpIHtcbiAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gIGNvbmZpZy5oZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20oY29uZmlnLmhlYWRlcnMpO1xuXG4gIC8vIFRyYW5zZm9ybSByZXF1ZXN0IGRhdGFcbiAgY29uZmlnLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoY29uZmlnLCBjb25maWcudHJhbnNmb3JtUmVxdWVzdCk7XG5cbiAgaWYgKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXS5pbmRleE9mKGNvbmZpZy5tZXRob2QpICE9PSAtMSkge1xuICAgIGNvbmZpZy5oZWFkZXJzLnNldENvbnRlbnRUeXBlKCdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLCBmYWxzZSk7XG4gIH1cblxuICBjb25zdCBhZGFwdGVyID0gYWRhcHRlcnMuZ2V0QWRhcHRlcihjb25maWcuYWRhcHRlciB8fCBkZWZhdWx0cy5hZGFwdGVyLCBjb25maWcpO1xuXG4gIHJldHVybiBhZGFwdGVyKGNvbmZpZykudGhlbihcbiAgICBmdW5jdGlvbiBvbkFkYXB0ZXJSZXNvbHV0aW9uKHJlc3BvbnNlKSB7XG4gICAgICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgICAgIC8vIEV4cG9zZSB0aGUgY3VycmVudCByZXNwb25zZSBvbiBjb25maWcgc28gdGhhdCB0cmFuc2Zvcm1SZXNwb25zZSBjYW5cbiAgICAgIC8vIGF0dGFjaCBpdCB0byBhbnkgQXhpb3NFcnJvciBpdCB0aHJvd3MgKGUuZy4gb24gSlNPTiBwYXJzZSBmYWlsdXJlKS5cbiAgICAgIC8vIFdlIGNsZWFuIGl0IHVwIGFmdGVyd2FyZHMgdG8gYXZvaWQgcG9sbHV0aW5nIHRoZSBjb25maWcgb2JqZWN0LlxuICAgICAgY29uZmlnLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gICAgICB0cnkge1xuICAgICAgICByZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKGNvbmZpZywgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlLCByZXNwb25zZSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBkZWxldGUgY29uZmlnLnJlc3BvbnNlO1xuICAgICAgfVxuXG4gICAgICByZXNwb25zZS5oZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20ocmVzcG9uc2UuaGVhZGVycyk7XG5cbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxuICAgIGZ1bmN0aW9uIG9uQWRhcHRlclJlamVjdGlvbihyZWFzb24pIHtcbiAgICAgIGlmICghaXNDYW5jZWwocmVhc29uKSkge1xuICAgICAgICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgICAgICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICAgICAgaWYgKHJlYXNvbiAmJiByZWFzb24ucmVzcG9uc2UpIHtcbiAgICAgICAgICBjb25maWcucmVzcG9uc2UgPSByZWFzb24ucmVzcG9uc2U7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlYXNvbi5yZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZSxcbiAgICAgICAgICAgICAgcmVhc29uLnJlc3BvbnNlXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBkZWxldGUgY29uZmlnLnJlc3BvbnNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZWFzb24ucmVzcG9uc2UuaGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKHJlYXNvbi5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVhc29uKTtcbiAgICB9XG4gICk7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7IFZFUlNJT04gfSBmcm9tICcuLi9lbnYvZGF0YS5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuXG5jb25zdCB2YWxpZGF0b3JzID0ge307XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5bJ29iamVjdCcsICdib29sZWFuJywgJ251bWJlcicsICdmdW5jdGlvbicsICdzdHJpbmcnLCAnc3ltYm9sJ10uZm9yRWFjaCgodHlwZSwgaSkgPT4ge1xuICB2YWxpZGF0b3JzW3R5cGVdID0gZnVuY3Rpb24gdmFsaWRhdG9yKHRoaW5nKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGluZyA9PT0gdHlwZSB8fCAnYScgKyAoaSA8IDEgPyAnbiAnIDogJyAnKSArIHR5cGU7XG4gIH07XG59KTtcblxuY29uc3QgZGVwcmVjYXRlZFdhcm5pbmdzID0ge307XG5cbi8qKlxuICogVHJhbnNpdGlvbmFsIG9wdGlvbiB2YWxpZGF0b3JcbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufGJvb2xlYW4/fSB2YWxpZGF0b3IgLSBzZXQgdG8gZmFsc2UgaWYgdGhlIHRyYW5zaXRpb25hbCBvcHRpb24gaGFzIGJlZW4gcmVtb3ZlZFxuICogQHBhcmFtIHtzdHJpbmc/fSB2ZXJzaW9uIC0gZGVwcmVjYXRlZCB2ZXJzaW9uIC8gcmVtb3ZlZCBzaW5jZSB2ZXJzaW9uXG4gKiBAcGFyYW0ge3N0cmluZz99IG1lc3NhZ2UgLSBzb21lIG1lc3NhZ2Ugd2l0aCBhZGRpdGlvbmFsIGluZm9cbiAqXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259XG4gKi9cbnZhbGlkYXRvcnMudHJhbnNpdGlvbmFsID0gZnVuY3Rpb24gdHJhbnNpdGlvbmFsKHZhbGlkYXRvciwgdmVyc2lvbiwgbWVzc2FnZSkge1xuICBmdW5jdGlvbiBmb3JtYXRNZXNzYWdlKG9wdCwgZGVzYykge1xuICAgIHJldHVybiAoXG4gICAgICAnW0F4aW9zIHYnICtcbiAgICAgIFZFUlNJT04gK1xuICAgICAgXCJdIFRyYW5zaXRpb25hbCBvcHRpb24gJ1wiICtcbiAgICAgIG9wdCArXG4gICAgICBcIidcIiArXG4gICAgICBkZXNjICtcbiAgICAgIChtZXNzYWdlID8gJy4gJyArIG1lc3NhZ2UgOiAnJylcbiAgICApO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuICh2YWx1ZSwgb3B0LCBvcHRzKSA9PiB7XG4gICAgaWYgKHZhbGlkYXRvciA9PT0gZmFsc2UpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICBmb3JtYXRNZXNzYWdlKG9wdCwgJyBoYXMgYmVlbiByZW1vdmVkJyArICh2ZXJzaW9uID8gJyBpbiAnICsgdmVyc2lvbiA6ICcnKSksXG4gICAgICAgIEF4aW9zRXJyb3IuRVJSX0RFUFJFQ0FURURcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHZlcnNpb24gJiYgIWRlcHJlY2F0ZWRXYXJuaW5nc1tvcHRdKSB7XG4gICAgICBkZXByZWNhdGVkV2FybmluZ3Nbb3B0XSA9IHRydWU7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBmb3JtYXRNZXNzYWdlKFxuICAgICAgICAgIG9wdCxcbiAgICAgICAgICAnIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdicgKyB2ZXJzaW9uICsgJyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZSdcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdG9yID8gdmFsaWRhdG9yKHZhbHVlLCBvcHQsIG9wdHMpIDogdHJ1ZTtcbiAgfTtcbn07XG5cbnZhbGlkYXRvcnMuc3BlbGxpbmcgPSBmdW5jdGlvbiBzcGVsbGluZyhjb3JyZWN0U3BlbGxpbmcpIHtcbiAgcmV0dXJuICh2YWx1ZSwgb3B0KSA9PiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICBjb25zb2xlLndhcm4oYCR7b3B0fSBpcyBsaWtlbHkgYSBtaXNzcGVsbGluZyBvZiAke2NvcnJlY3RTcGVsbGluZ31gKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcbn07XG5cbi8qKlxuICogQXNzZXJ0IG9iamVjdCdzIHByb3BlcnRpZXMgdHlwZVxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge29iamVjdH0gc2NoZW1hXG4gKiBAcGFyYW0ge2Jvb2xlYW4/fSBhbGxvd1Vua25vd25cbiAqXG4gKiBAcmV0dXJucyB7b2JqZWN0fVxuICovXG5cbmZ1bmN0aW9uIGFzc2VydE9wdGlvbnMob3B0aW9ucywgc2NoZW1hLCBhbGxvd1Vua25vd24pIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0JywgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTl9WQUxVRSk7XG4gIH1cbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpO1xuICBsZXQgaSA9IGtleXMubGVuZ3RoO1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIGNvbnN0IG9wdCA9IGtleXNbaV07XG4gICAgLy8gVXNlIGhhc093blByb3BlcnR5IHNvIGEgcG9sbHV0ZWQgT2JqZWN0LnByb3RvdHlwZS48b3B0PiBjYW5ub3Qgc3VwcGx5XG4gICAgLy8gYSBub24tZnVuY3Rpb24gdmFsaWRhdG9yIGFuZCBjYXVzZSBhIFR5cGVFcnJvci5cbiAgICBjb25zdCB2YWxpZGF0b3IgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc2NoZW1hLCBvcHQpID8gc2NoZW1hW29wdF0gOiB1bmRlZmluZWQ7XG4gICAgaWYgKHZhbGlkYXRvcikge1xuICAgICAgY29uc3QgdmFsdWUgPSBvcHRpb25zW29wdF07XG4gICAgICBjb25zdCByZXN1bHQgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbGlkYXRvcih2YWx1ZSwgb3B0LCBvcHRpb25zKTtcbiAgICAgIGlmIChyZXN1bHQgIT09IHRydWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoXG4gICAgICAgICAgJ29wdGlvbiAnICsgb3B0ICsgJyBtdXN0IGJlICcgKyByZXN1bHQsXG4gICAgICAgICAgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTl9WQUxVRVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChhbGxvd1Vua25vd24gIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdVbmtub3duIG9wdGlvbiAnICsgb3B0LCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBhc3NlcnRPcHRpb25zLFxuICB2YWxpZGF0b3JzLFxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBidWlsZFVSTCBmcm9tICcuLi9oZWxwZXJzL2J1aWxkVVJMLmpzJztcbmltcG9ydCBJbnRlcmNlcHRvck1hbmFnZXIgZnJvbSAnLi9JbnRlcmNlcHRvck1hbmFnZXIuanMnO1xuaW1wb3J0IGRpc3BhdGNoUmVxdWVzdCBmcm9tICcuL2Rpc3BhdGNoUmVxdWVzdC5qcyc7XG5pbXBvcnQgbWVyZ2VDb25maWcgZnJvbSAnLi9tZXJnZUNvbmZpZy5qcyc7XG5pbXBvcnQgYnVpbGRGdWxsUGF0aCBmcm9tICcuL2J1aWxkRnVsbFBhdGguanMnO1xuaW1wb3J0IHZhbGlkYXRvciBmcm9tICcuLi9oZWxwZXJzL3ZhbGlkYXRvci5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gJy4vQXhpb3NIZWFkZXJzLmpzJztcbmltcG9ydCB0cmFuc2l0aW9uYWxEZWZhdWx0cyBmcm9tICcuLi9kZWZhdWx0cy90cmFuc2l0aW9uYWwuanMnO1xuXG5jb25zdCB2YWxpZGF0b3JzID0gdmFsaWRhdG9yLnZhbGlkYXRvcnM7XG5cbi8qKlxuICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlQ29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKlxuICogQHJldHVybiB7QXhpb3N9IEEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKi9cbmNsYXNzIEF4aW9zIHtcbiAgY29uc3RydWN0b3IoaW5zdGFuY2VDb25maWcpIHtcbiAgICB0aGlzLmRlZmF1bHRzID0gaW5zdGFuY2VDb25maWcgfHwge307XG4gICAgdGhpcy5pbnRlcmNlcHRvcnMgPSB7XG4gICAgICByZXF1ZXN0OiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyKCksXG4gICAgICByZXNwb25zZTogbmV3IEludGVyY2VwdG9yTWFuYWdlcigpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGlzcGF0Y2ggYSByZXF1ZXN0XG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfE9iamVjdH0gY29uZmlnT3JVcmwgVGhlIGNvbmZpZyBzcGVjaWZpYyBmb3IgdGhpcyByZXF1ZXN0IChtZXJnZWQgd2l0aCB0aGlzLmRlZmF1bHRzKVxuICAgKiBAcGFyYW0gez9PYmplY3R9IGNvbmZpZ1xuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gVGhlIFByb21pc2UgdG8gYmUgZnVsZmlsbGVkXG4gICAqL1xuICBhc3luYyByZXF1ZXN0KGNvbmZpZ09yVXJsLCBjb25maWcpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX3JlcXVlc3QoY29uZmlnT3JVcmwsIGNvbmZpZyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgbGV0IGR1bW15ID0ge307XG5cbiAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UgPyBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShkdW1teSkgOiAoZHVtbXkgPSBuZXcgRXJyb3IoKSk7XG5cbiAgICAgICAgLy8gc2xpY2Ugb2ZmIHRoZSBFcnJvcjogLi4uIGxpbmVcbiAgICAgICAgY29uc3Qgc3RhY2sgPSAoKCkgPT4ge1xuICAgICAgICAgIGlmICghZHVtbXkuc3RhY2spIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBmaXJzdE5ld2xpbmVJbmRleCA9IGR1bW15LnN0YWNrLmluZGV4T2YoJ1xcbicpO1xuXG4gICAgICAgICAgcmV0dXJuIGZpcnN0TmV3bGluZUluZGV4ID09PSAtMSA/ICcnIDogZHVtbXkuc3RhY2suc2xpY2UoZmlyc3ROZXdsaW5lSW5kZXggKyAxKTtcbiAgICAgICAgfSkoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoIWVyci5zdGFjaykge1xuICAgICAgICAgICAgZXJyLnN0YWNrID0gc3RhY2s7XG4gICAgICAgICAgICAvLyBtYXRjaCB3aXRob3V0IHRoZSAyIHRvcCBzdGFjayBsaW5lc1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3RhY2spIHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0TmV3bGluZUluZGV4ID0gc3RhY2suaW5kZXhPZignXFxuJyk7XG4gICAgICAgICAgICBjb25zdCBzZWNvbmROZXdsaW5lSW5kZXggPVxuICAgICAgICAgICAgICBmaXJzdE5ld2xpbmVJbmRleCA9PT0gLTEgPyAtMSA6IHN0YWNrLmluZGV4T2YoJ1xcbicsIGZpcnN0TmV3bGluZUluZGV4ICsgMSk7XG4gICAgICAgICAgICBjb25zdCBzdGFja1dpdGhvdXRUd29Ub3BMaW5lcyA9XG4gICAgICAgICAgICAgIHNlY29uZE5ld2xpbmVJbmRleCA9PT0gLTEgPyAnJyA6IHN0YWNrLnNsaWNlKHNlY29uZE5ld2xpbmVJbmRleCArIDEpO1xuXG4gICAgICAgICAgICBpZiAoIVN0cmluZyhlcnIuc3RhY2spLmVuZHNXaXRoKHN0YWNrV2l0aG91dFR3b1RvcExpbmVzKSkge1xuICAgICAgICAgICAgICBlcnIuc3RhY2sgKz0gJ1xcbicgKyBzdGFjaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAvLyBpZ25vcmUgdGhlIGNhc2Ugd2hlcmUgXCJzdGFja1wiIGlzIGFuIHVuLXdyaXRhYmxlIHByb3BlcnR5XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxuXG4gIF9yZXF1ZXN0KGNvbmZpZ09yVXJsLCBjb25maWcpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICAvLyBBbGxvdyBmb3IgYXhpb3MoJ2V4YW1wbGUvdXJsJ1ssIGNvbmZpZ10pIGEgbGEgZmV0Y2ggQVBJXG4gICAgaWYgKHR5cGVvZiBjb25maWdPclVybCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcbiAgICAgIGNvbmZpZy51cmwgPSBjb25maWdPclVybDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uZmlnID0gY29uZmlnT3JVcmwgfHwge307XG4gICAgfVxuXG4gICAgY29uZmlnID0gbWVyZ2VDb25maWcodGhpcy5kZWZhdWx0cywgY29uZmlnKTtcblxuICAgIGNvbnN0IHsgdHJhbnNpdGlvbmFsLCBwYXJhbXNTZXJpYWxpemVyLCBoZWFkZXJzIH0gPSBjb25maWc7XG5cbiAgICBpZiAodHJhbnNpdGlvbmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhbGlkYXRvci5hc3NlcnRPcHRpb25zKFxuICAgICAgICB0cmFuc2l0aW9uYWwsXG4gICAgICAgIHtcbiAgICAgICAgICBzaWxlbnRKU09OUGFyc2luZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKSxcbiAgICAgICAgICBmb3JjZWRKU09OUGFyc2luZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKSxcbiAgICAgICAgICBjbGFyaWZ5VGltZW91dEVycm9yOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pLFxuICAgICAgICAgIGxlZ2FjeUludGVyY2VwdG9yUmVxUmVzT3JkZXJpbmc6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiksXG4gICAgICAgICAgYWR2ZXJ0aXNlWnN0ZEFjY2VwdEVuY29kaW5nOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pLFxuICAgICAgICB9LFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zU2VyaWFsaXplciAhPSBudWxsKSB7XG4gICAgICBpZiAodXRpbHMuaXNGdW5jdGlvbihwYXJhbXNTZXJpYWxpemVyKSkge1xuICAgICAgICBjb25maWcucGFyYW1zU2VyaWFsaXplciA9IHtcbiAgICAgICAgICBzZXJpYWxpemU6IHBhcmFtc1NlcmlhbGl6ZXIsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWxpZGF0b3IuYXNzZXJ0T3B0aW9ucyhcbiAgICAgICAgICBwYXJhbXNTZXJpYWxpemVyLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGVuY29kZTogdmFsaWRhdG9ycy5mdW5jdGlvbixcbiAgICAgICAgICAgIHNlcmlhbGl6ZTogdmFsaWRhdG9ycy5mdW5jdGlvbixcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRydWVcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZXQgY29uZmlnLmFsbG93QWJzb2x1dGVVcmxzXG4gICAgaWYgKGNvbmZpZy5hbGxvd0Fic29sdXRlVXJscyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBkbyBub3RoaW5nXG4gICAgfSBlbHNlIGlmICh0aGlzLmRlZmF1bHRzLmFsbG93QWJzb2x1dGVVcmxzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbmZpZy5hbGxvd0Fic29sdXRlVXJscyA9IHRoaXMuZGVmYXVsdHMuYWxsb3dBYnNvbHV0ZVVybHM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbmZpZy5hbGxvd0Fic29sdXRlVXJscyA9IHRydWU7XG4gICAgfVxuXG4gICAgdmFsaWRhdG9yLmFzc2VydE9wdGlvbnMoXG4gICAgICBjb25maWcsXG4gICAgICB7XG4gICAgICAgIGJhc2VVcmw6IHZhbGlkYXRvcnMuc3BlbGxpbmcoJ2Jhc2VVUkwnKSxcbiAgICAgICAgd2l0aFhzcmZUb2tlbjogdmFsaWRhdG9ycy5zcGVsbGluZygnd2l0aFhTUkZUb2tlbicpLFxuICAgICAgfSxcbiAgICAgIHRydWVcbiAgICApO1xuXG4gICAgLy8gU2V0IGNvbmZpZy5tZXRob2RcbiAgICBjb25maWcubWV0aG9kID0gKGNvbmZpZy5tZXRob2QgfHwgdGhpcy5kZWZhdWx0cy5tZXRob2QgfHwgJ2dldCcpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAvLyBGbGF0dGVuIGhlYWRlcnNcbiAgICBsZXQgY29udGV4dEhlYWRlcnMgPSBoZWFkZXJzICYmIHV0aWxzLm1lcmdlKGhlYWRlcnMuY29tbW9uLCBoZWFkZXJzW2NvbmZpZy5tZXRob2RdKTtcblxuICAgIGhlYWRlcnMgJiZcbiAgICAgIHV0aWxzLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAncG9zdCcsICdwdXQnLCAncGF0Y2gnLCAncXVlcnknLCAnY29tbW9uJ10sIChtZXRob2QpID0+IHtcbiAgICAgICAgZGVsZXRlIGhlYWRlcnNbbWV0aG9kXTtcbiAgICAgIH0pO1xuXG4gICAgY29uZmlnLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuY29uY2F0KGNvbnRleHRIZWFkZXJzLCBoZWFkZXJzKTtcblxuICAgIC8vIGZpbHRlciBvdXQgc2tpcHBlZCBpbnRlcmNlcHRvcnNcbiAgICBjb25zdCByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbiA9IFtdO1xuICAgIGxldCBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSB0cnVlO1xuICAgIHRoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbiB1bnNoaWZ0UmVxdWVzdEludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgICAgaWYgKHR5cGVvZiBpbnRlcmNlcHRvci5ydW5XaGVuID09PSAnZnVuY3Rpb24nICYmIGludGVyY2VwdG9yLnJ1bldoZW4oY29uZmlnKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgJiYgaW50ZXJjZXB0b3Iuc3luY2hyb25vdXM7XG5cbiAgICAgIGNvbnN0IHRyYW5zaXRpb25hbCA9IGNvbmZpZy50cmFuc2l0aW9uYWwgfHwgdHJhbnNpdGlvbmFsRGVmYXVsdHM7XG4gICAgICBjb25zdCBsZWdhY3lJbnRlcmNlcHRvclJlcVJlc09yZGVyaW5nID1cbiAgICAgICAgdHJhbnNpdGlvbmFsICYmIHRyYW5zaXRpb25hbC5sZWdhY3lJbnRlcmNlcHRvclJlcVJlc09yZGVyaW5nO1xuXG4gICAgICBpZiAobGVnYWN5SW50ZXJjZXB0b3JSZXFSZXNPcmRlcmluZykge1xuICAgICAgICByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi51bnNoaWZ0KGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4ucHVzaChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbiA9IFtdO1xuICAgIHRoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24gcHVzaFJlc3BvbnNlSW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgICByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ucHVzaChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgICB9KTtcblxuICAgIGxldCBwcm9taXNlO1xuICAgIGxldCBpID0gMDtcbiAgICBsZXQgbGVuO1xuXG4gICAgaWYgKCFzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMpIHtcbiAgICAgIGNvbnN0IGNoYWluID0gW2Rpc3BhdGNoUmVxdWVzdC5iaW5kKHRoaXMpLCB1bmRlZmluZWRdO1xuICAgICAgY2hhaW4udW5zaGlmdCguLi5yZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbik7XG4gICAgICBjaGFpbi5wdXNoKC4uLnJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbik7XG4gICAgICBsZW4gPSBjaGFpbi5sZW5ndGg7XG5cbiAgICAgIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoY29uZmlnKTtcblxuICAgICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihjaGFpbltpKytdLCBjaGFpbltpKytdKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuXG4gICAgbGVuID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoO1xuXG4gICAgbGV0IG5ld0NvbmZpZyA9IGNvbmZpZztcblxuICAgIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgICBjb25zdCBvbkZ1bGZpbGxlZCA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluW2krK107XG4gICAgICBjb25zdCBvblJlamVjdGVkID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW5baSsrXTtcbiAgICAgIHRyeSB7XG4gICAgICAgIG5ld0NvbmZpZyA9IG9uRnVsZmlsbGVkKG5ld0NvbmZpZyk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBvblJlamVjdGVkLmNhbGwodGhpcywgZXJyb3IpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcHJvbWlzZSA9IGRpc3BhdGNoUmVxdWVzdC5jYWxsKHRoaXMsIG5ld0NvbmZpZyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgfVxuXG4gICAgaSA9IDA7XG4gICAgbGVuID0gcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLmxlbmd0aDtcblxuICAgIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbltpKytdLCByZXNwb25zZUludGVyY2VwdG9yQ2hhaW5baSsrXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cblxuICBnZXRVcmkoY29uZmlnKSB7XG4gICAgY29uZmlnID0gbWVyZ2VDb25maWcodGhpcy5kZWZhdWx0cywgY29uZmlnKTtcbiAgICBjb25zdCBmdWxsUGF0aCA9IGJ1aWxkRnVsbFBhdGgoY29uZmlnLmJhc2VVUkwsIGNvbmZpZy51cmwsIGNvbmZpZy5hbGxvd0Fic29sdXRlVXJscyk7XG4gICAgcmV0dXJuIGJ1aWxkVVJMKGZ1bGxQYXRoLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplcik7XG4gIH1cbn1cblxuLy8gUHJvdmlkZSBhbGlhc2VzIGZvciBzdXBwb3J0ZWQgcmVxdWVzdCBtZXRob2RzXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ29wdGlvbnMnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZE5vRGF0YShtZXRob2QpIHtcbiAgLyplc2xpbnQgZnVuYy1uYW1lczowKi9cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbiAodXJsLCBjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KFxuICAgICAgbWVyZ2VDb25maWcoY29uZmlnIHx8IHt9LCB7XG4gICAgICAgIG1ldGhvZCxcbiAgICAgICAgdXJsLFxuICAgICAgICBkYXRhOiAoY29uZmlnIHx8IHt9KS5kYXRhLFxuICAgICAgfSlcbiAgICApO1xuICB9O1xufSk7XG5cbnV0aWxzLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCcsICdxdWVyeSddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIGZ1bmN0aW9uIGdlbmVyYXRlSFRUUE1ldGhvZChpc0Zvcm0pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gaHR0cE1ldGhvZCh1cmwsIGRhdGEsIGNvbmZpZykge1xuICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdChcbiAgICAgICAgbWVyZ2VDb25maWcoY29uZmlnIHx8IHt9LCB7XG4gICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgIGhlYWRlcnM6IGlzRm9ybVxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJyxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7fSxcbiAgICAgICAgICB1cmwsXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfTtcbiAgfVxuXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZ2VuZXJhdGVIVFRQTWV0aG9kKCk7XG5cbiAgLy8gUVVFUlkgaXMgYSBzYWZlL2lkZW1wb3RlbnQgcmVhZCBtZXRob2Q7IG11bHRpcGFydCBmb3JtIGJvZGllcyBkb24ndCBmaXRcbiAgLy8gaXRzIHNlbWFudGljcywgc28gbm8gcXVlcnlGb3JtIHNob3J0aGFuZCBpcyBnZW5lcmF0ZWQuXG4gIGlmIChtZXRob2QgIT09ICdxdWVyeScpIHtcbiAgICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kICsgJ0Zvcm0nXSA9IGdlbmVyYXRlSFRUUE1ldGhvZCh0cnVlKTtcbiAgfVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IEF4aW9zO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgQ2FuY2VsZWRFcnJvciBmcm9tICcuL0NhbmNlbGVkRXJyb3IuanMnO1xuXG4vKipcbiAqIEEgYENhbmNlbFRva2VuYCBpcyBhbiBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byByZXF1ZXN0IGNhbmNlbGxhdGlvbiBvZiBhbiBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXhlY3V0b3IgVGhlIGV4ZWN1dG9yIGZ1bmN0aW9uLlxuICpcbiAqIEByZXR1cm5zIHtDYW5jZWxUb2tlbn1cbiAqL1xuY2xhc3MgQ2FuY2VsVG9rZW4ge1xuICBjb25zdHJ1Y3RvcihleGVjdXRvcikge1xuICAgIGlmICh0eXBlb2YgZXhlY3V0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4nKTtcbiAgICB9XG5cbiAgICBsZXQgcmVzb2x2ZVByb21pc2U7XG5cbiAgICB0aGlzLnByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiBwcm9taXNlRXhlY3V0b3IocmVzb2x2ZSkge1xuICAgICAgcmVzb2x2ZVByb21pc2UgPSByZXNvbHZlO1xuICAgIH0pO1xuXG4gICAgY29uc3QgdG9rZW4gPSB0aGlzO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICB0aGlzLnByb21pc2UudGhlbigoY2FuY2VsKSA9PiB7XG4gICAgICBpZiAoIXRva2VuLl9saXN0ZW5lcnMpIHJldHVybjtcblxuICAgICAgbGV0IGkgPSB0b2tlbi5fbGlzdGVuZXJzLmxlbmd0aDtcblxuICAgICAgd2hpbGUgKGktLSA+IDApIHtcbiAgICAgICAgdG9rZW4uX2xpc3RlbmVyc1tpXShjYW5jZWwpO1xuICAgICAgfVxuICAgICAgdG9rZW4uX2xpc3RlbmVycyA9IG51bGw7XG4gICAgfSk7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgIHRoaXMucHJvbWlzZS50aGVuID0gKG9uZnVsZmlsbGVkKSA9PiB7XG4gICAgICBsZXQgX3Jlc29sdmU7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIHRva2VuLnN1YnNjcmliZShyZXNvbHZlKTtcbiAgICAgICAgX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgICAgfSkudGhlbihvbmZ1bGZpbGxlZCk7XG5cbiAgICAgIHByb21pc2UuY2FuY2VsID0gZnVuY3Rpb24gcmVqZWN0KCkge1xuICAgICAgICB0b2tlbi51bnN1YnNjcmliZShfcmVzb2x2ZSk7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9O1xuXG4gICAgZXhlY3V0b3IoZnVuY3Rpb24gY2FuY2VsKG1lc3NhZ2UsIGNvbmZpZywgcmVxdWVzdCkge1xuICAgICAgaWYgKHRva2VuLnJlYXNvbikge1xuICAgICAgICAvLyBDYW5jZWxsYXRpb24gaGFzIGFscmVhZHkgYmVlbiByZXF1ZXN0ZWRcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0b2tlbi5yZWFzb24gPSBuZXcgQ2FuY2VsZWRFcnJvcihtZXNzYWdlLCBjb25maWcsIHJlcXVlc3QpO1xuICAgICAgcmVzb2x2ZVByb21pc2UodG9rZW4ucmVhc29uKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaHJvd3MgYSBgQ2FuY2VsZWRFcnJvcmAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAgICovXG4gIHRocm93SWZSZXF1ZXN0ZWQoKSB7XG4gICAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgICB0aHJvdyB0aGlzLnJlYXNvbjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlIHRvIHRoZSBjYW5jZWwgc2lnbmFsXG4gICAqL1xuXG4gIHN1YnNjcmliZShsaXN0ZW5lcikge1xuICAgIGlmICh0aGlzLnJlYXNvbikge1xuICAgICAgbGlzdGVuZXIodGhpcy5yZWFzb24pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbGlzdGVuZXJzID0gW2xpc3RlbmVyXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVW5zdWJzY3JpYmUgZnJvbSB0aGUgY2FuY2VsIHNpZ25hbFxuICAgKi9cblxuICB1bnN1YnNjcmliZShsaXN0ZW5lcikge1xuICAgIGlmICghdGhpcy5fbGlzdGVuZXJzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fbGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgfVxuXG4gIHRvQWJvcnRTaWduYWwoKSB7XG4gICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICAgIGNvbnN0IGFib3J0ID0gKGVycikgPT4ge1xuICAgICAgY29udHJvbGxlci5hYm9ydChlcnIpO1xuICAgIH07XG5cbiAgICB0aGlzLnN1YnNjcmliZShhYm9ydCk7XG5cbiAgICBjb250cm9sbGVyLnNpZ25hbC51bnN1YnNjcmliZSA9ICgpID0+IHRoaXMudW5zdWJzY3JpYmUoYWJvcnQpO1xuXG4gICAgcmV0dXJuIGNvbnRyb2xsZXIuc2lnbmFsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gb2JqZWN0IHRoYXQgY29udGFpbnMgYSBuZXcgYENhbmNlbFRva2VuYCBhbmQgYSBmdW5jdGlvbiB0aGF0LCB3aGVuIGNhbGxlZCxcbiAgICogY2FuY2VscyB0aGUgYENhbmNlbFRva2VuYC5cbiAgICovXG4gIHN0YXRpYyBzb3VyY2UoKSB7XG4gICAgbGV0IGNhbmNlbDtcbiAgICBjb25zdCB0b2tlbiA9IG5ldyBDYW5jZWxUb2tlbihmdW5jdGlvbiBleGVjdXRvcihjKSB7XG4gICAgICBjYW5jZWwgPSBjO1xuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbixcbiAgICAgIGNhbmNlbCxcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENhbmNlbFRva2VuO1xuIiwiY29uc3QgSHR0cFN0YXR1c0NvZGUgPSB7XG4gIENvbnRpbnVlOiAxMDAsXG4gIFN3aXRjaGluZ1Byb3RvY29sczogMTAxLFxuICBQcm9jZXNzaW5nOiAxMDIsXG4gIEVhcmx5SGludHM6IDEwMyxcbiAgT2s6IDIwMCxcbiAgQ3JlYXRlZDogMjAxLFxuICBBY2NlcHRlZDogMjAyLFxuICBOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb246IDIwMyxcbiAgTm9Db250ZW50OiAyMDQsXG4gIFJlc2V0Q29udGVudDogMjA1LFxuICBQYXJ0aWFsQ29udGVudDogMjA2LFxuICBNdWx0aVN0YXR1czogMjA3LFxuICBBbHJlYWR5UmVwb3J0ZWQ6IDIwOCxcbiAgSW1Vc2VkOiAyMjYsXG4gIE11bHRpcGxlQ2hvaWNlczogMzAwLFxuICBNb3ZlZFBlcm1hbmVudGx5OiAzMDEsXG4gIEZvdW5kOiAzMDIsXG4gIFNlZU90aGVyOiAzMDMsXG4gIE5vdE1vZGlmaWVkOiAzMDQsXG4gIFVzZVByb3h5OiAzMDUsXG4gIFVudXNlZDogMzA2LFxuICBUZW1wb3JhcnlSZWRpcmVjdDogMzA3LFxuICBQZXJtYW5lbnRSZWRpcmVjdDogMzA4LFxuICBCYWRSZXF1ZXN0OiA0MDAsXG4gIFVuYXV0aG9yaXplZDogNDAxLFxuICBQYXltZW50UmVxdWlyZWQ6IDQwMixcbiAgRm9yYmlkZGVuOiA0MDMsXG4gIE5vdEZvdW5kOiA0MDQsXG4gIE1ldGhvZE5vdEFsbG93ZWQ6IDQwNSxcbiAgTm90QWNjZXB0YWJsZTogNDA2LFxuICBQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6IDQwNyxcbiAgUmVxdWVzdFRpbWVvdXQ6IDQwOCxcbiAgQ29uZmxpY3Q6IDQwOSxcbiAgR29uZTogNDEwLFxuICBMZW5ndGhSZXF1aXJlZDogNDExLFxuICBQcmVjb25kaXRpb25GYWlsZWQ6IDQxMixcbiAgUGF5bG9hZFRvb0xhcmdlOiA0MTMsXG4gIFVyaVRvb0xvbmc6IDQxNCxcbiAgVW5zdXBwb3J0ZWRNZWRpYVR5cGU6IDQxNSxcbiAgUmFuZ2VOb3RTYXRpc2ZpYWJsZTogNDE2LFxuICBFeHBlY3RhdGlvbkZhaWxlZDogNDE3LFxuICBJbUFUZWFwb3Q6IDQxOCxcbiAgTWlzZGlyZWN0ZWRSZXF1ZXN0OiA0MjEsXG4gIFVucHJvY2Vzc2FibGVFbnRpdHk6IDQyMixcbiAgTG9ja2VkOiA0MjMsXG4gIEZhaWxlZERlcGVuZGVuY3k6IDQyNCxcbiAgVG9vRWFybHk6IDQyNSxcbiAgVXBncmFkZVJlcXVpcmVkOiA0MjYsXG4gIFByZWNvbmRpdGlvblJlcXVpcmVkOiA0MjgsXG4gIFRvb01hbnlSZXF1ZXN0czogNDI5LFxuICBSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6IDQzMSxcbiAgVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnM6IDQ1MSxcbiAgSW50ZXJuYWxTZXJ2ZXJFcnJvcjogNTAwLFxuICBOb3RJbXBsZW1lbnRlZDogNTAxLFxuICBCYWRHYXRld2F5OiA1MDIsXG4gIFNlcnZpY2VVbmF2YWlsYWJsZTogNTAzLFxuICBHYXRld2F5VGltZW91dDogNTA0LFxuICBIdHRwVmVyc2lvbk5vdFN1cHBvcnRlZDogNTA1LFxuICBWYXJpYW50QWxzb05lZ290aWF0ZXM6IDUwNixcbiAgSW5zdWZmaWNpZW50U3RvcmFnZTogNTA3LFxuICBMb29wRGV0ZWN0ZWQ6IDUwOCxcbiAgTm90RXh0ZW5kZWQ6IDUxMCxcbiAgTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6IDUxMSxcbiAgV2ViU2VydmVySXNEb3duOiA1MjEsXG4gIENvbm5lY3Rpb25UaW1lZE91dDogNTIyLFxuICBPcmlnaW5Jc1VucmVhY2hhYmxlOiA1MjMsXG4gIFRpbWVvdXRPY2N1cnJlZDogNTI0LFxuICBTc2xIYW5kc2hha2VGYWlsZWQ6IDUyNSxcbiAgSW52YWxpZFNzbENlcnRpZmljYXRlOiA1MjYsXG59O1xuXG5PYmplY3QuZW50cmllcyhIdHRwU3RhdHVzQ29kZSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gIEh0dHBTdGF0dXNDb2RlW3ZhbHVlXSA9IGtleTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBIdHRwU3RhdHVzQ29kZTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMuanMnO1xuaW1wb3J0IGJpbmQgZnJvbSAnLi9oZWxwZXJzL2JpbmQuanMnO1xuaW1wb3J0IEF4aW9zIGZyb20gJy4vY29yZS9BeGlvcy5qcyc7XG5pbXBvcnQgbWVyZ2VDb25maWcgZnJvbSAnLi9jb3JlL21lcmdlQ29uZmlnLmpzJztcbmltcG9ydCBkZWZhdWx0cyBmcm9tICcuL2RlZmF1bHRzL2luZGV4LmpzJztcbmltcG9ydCBmb3JtRGF0YVRvSlNPTiBmcm9tICcuL2hlbHBlcnMvZm9ybURhdGFUb0pTT04uanMnO1xuaW1wb3J0IENhbmNlbGVkRXJyb3IgZnJvbSAnLi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qcyc7XG5pbXBvcnQgQ2FuY2VsVG9rZW4gZnJvbSAnLi9jYW5jZWwvQ2FuY2VsVG9rZW4uanMnO1xuaW1wb3J0IGlzQ2FuY2VsIGZyb20gJy4vY2FuY2VsL2lzQ2FuY2VsLmpzJztcbmltcG9ydCB7IFZFUlNJT04gfSBmcm9tICcuL2Vudi9kYXRhLmpzJztcbmltcG9ydCB0b0Zvcm1EYXRhIGZyb20gJy4vaGVscGVycy90b0Zvcm1EYXRhLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4vY29yZS9BeGlvc0Vycm9yLmpzJztcbmltcG9ydCBzcHJlYWQgZnJvbSAnLi9oZWxwZXJzL3NwcmVhZC5qcyc7XG5pbXBvcnQgaXNBeGlvc0Vycm9yIGZyb20gJy4vaGVscGVycy9pc0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuL2NvcmUvQXhpb3NIZWFkZXJzLmpzJztcbmltcG9ydCBhZGFwdGVycyBmcm9tICcuL2FkYXB0ZXJzL2FkYXB0ZXJzLmpzJztcbmltcG9ydCBIdHRwU3RhdHVzQ29kZSBmcm9tICcuL2hlbHBlcnMvSHR0cFN0YXR1c0NvZGUuanMnO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBkZWZhdWx0Q29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKlxuICogQHJldHVybnMge0F4aW9zfSBBIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICovXG5mdW5jdGlvbiBjcmVhdGVJbnN0YW5jZShkZWZhdWx0Q29uZmlnKSB7XG4gIGNvbnN0IGNvbnRleHQgPSBuZXcgQXhpb3MoZGVmYXVsdENvbmZpZyk7XG4gIGNvbnN0IGluc3RhbmNlID0gYmluZChBeGlvcy5wcm90b3R5cGUucmVxdWVzdCwgY29udGV4dCk7XG5cbiAgLy8gQ29weSBheGlvcy5wcm90b3R5cGUgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBBeGlvcy5wcm90b3R5cGUsIGNvbnRleHQsIHsgYWxsT3duS2V5czogdHJ1ZSB9KTtcblxuICAvLyBDb3B5IGNvbnRleHQgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBjb250ZXh0LCBudWxsLCB7IGFsbE93bktleXM6IHRydWUgfSk7XG5cbiAgLy8gRmFjdG9yeSBmb3IgY3JlYXRpbmcgbmV3IGluc3RhbmNlc1xuICBpbnN0YW5jZS5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaW5zdGFuY2VDb25maWcpIHtcbiAgICByZXR1cm4gY3JlYXRlSW5zdGFuY2UobWVyZ2VDb25maWcoZGVmYXVsdENvbmZpZywgaW5zdGFuY2VDb25maWcpKTtcbiAgfTtcblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbi8vIENyZWF0ZSB0aGUgZGVmYXVsdCBpbnN0YW5jZSB0byBiZSBleHBvcnRlZFxuY29uc3QgYXhpb3MgPSBjcmVhdGVJbnN0YW5jZShkZWZhdWx0cyk7XG5cbi8vIEV4cG9zZSBBeGlvcyBjbGFzcyB0byBhbGxvdyBjbGFzcyBpbmhlcml0YW5jZVxuYXhpb3MuQXhpb3MgPSBBeGlvcztcblxuLy8gRXhwb3NlIENhbmNlbCAmIENhbmNlbFRva2VuXG5heGlvcy5DYW5jZWxlZEVycm9yID0gQ2FuY2VsZWRFcnJvcjtcbmF4aW9zLkNhbmNlbFRva2VuID0gQ2FuY2VsVG9rZW47XG5heGlvcy5pc0NhbmNlbCA9IGlzQ2FuY2VsO1xuYXhpb3MuVkVSU0lPTiA9IFZFUlNJT047XG5heGlvcy50b0Zvcm1EYXRhID0gdG9Gb3JtRGF0YTtcblxuLy8gRXhwb3NlIEF4aW9zRXJyb3IgY2xhc3NcbmF4aW9zLkF4aW9zRXJyb3IgPSBBeGlvc0Vycm9yO1xuXG4vLyBhbGlhcyBmb3IgQ2FuY2VsZWRFcnJvciBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuYXhpb3MuQ2FuY2VsID0gYXhpb3MuQ2FuY2VsZWRFcnJvcjtcblxuLy8gRXhwb3NlIGFsbC9zcHJlYWRcbmF4aW9zLmFsbCA9IGZ1bmN0aW9uIGFsbChwcm9taXNlcykge1xuICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xufTtcblxuYXhpb3Muc3ByZWFkID0gc3ByZWFkO1xuXG4vLyBFeHBvc2UgaXNBeGlvc0Vycm9yXG5heGlvcy5pc0F4aW9zRXJyb3IgPSBpc0F4aW9zRXJyb3I7XG5cbi8vIEV4cG9zZSBtZXJnZUNvbmZpZ1xuYXhpb3MubWVyZ2VDb25maWcgPSBtZXJnZUNvbmZpZztcblxuYXhpb3MuQXhpb3NIZWFkZXJzID0gQXhpb3NIZWFkZXJzO1xuXG5heGlvcy5mb3JtVG9KU09OID0gKHRoaW5nKSA9PiBmb3JtRGF0YVRvSlNPTih1dGlscy5pc0hUTUxGb3JtKHRoaW5nKSA/IG5ldyBGb3JtRGF0YSh0aGluZykgOiB0aGluZyk7XG5cbmF4aW9zLmdldEFkYXB0ZXIgPSBhZGFwdGVycy5nZXRBZGFwdGVyO1xuXG5heGlvcy5IdHRwU3RhdHVzQ29kZSA9IEh0dHBTdGF0dXNDb2RlO1xuXG5heGlvcy5kZWZhdWx0ID0gYXhpb3M7XG5cbi8vIHRoaXMgbW9kdWxlIHNob3VsZCBvbmx5IGhhdmUgYSBkZWZhdWx0IGV4cG9ydFxuZXhwb3J0IGRlZmF1bHQgYXhpb3M7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogU3ludGFjdGljIHN1Z2FyIGZvciBpbnZva2luZyBhIGZ1bmN0aW9uIGFuZCBleHBhbmRpbmcgYW4gYXJyYXkgZm9yIGFyZ3VtZW50cy5cbiAqXG4gKiBDb21tb24gdXNlIGNhc2Ugd291bGQgYmUgdG8gdXNlIGBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHlgLlxuICpcbiAqICBgYGBqc1xuICogIGZ1bmN0aW9uIGYoeCwgeSwgeikge31cbiAqICBjb25zdCBhcmdzID0gWzEsIDIsIDNdO1xuICogIGYuYXBwbHkobnVsbCwgYXJncyk7XG4gKiAgYGBgXG4gKlxuICogV2l0aCBgc3ByZWFkYCB0aGlzIGV4YW1wbGUgY2FuIGJlIHJlLXdyaXR0ZW4uXG4gKlxuICogIGBgYGpzXG4gKiAgc3ByZWFkKGZ1bmN0aW9uKHgsIHksIHopIHt9KShbMSwgMiwgM10pO1xuICogIGBgYFxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKlxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzcHJlYWQoY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoYXJyKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFycik7XG4gIH07XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvc1xuICpcbiAqIEBwYXJhbSB7Kn0gcGF5bG9hZCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvcywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzQXhpb3NFcnJvcihwYXlsb2FkKSB7XG4gIHJldHVybiB1dGlscy5pc09iamVjdChwYXlsb2FkKSAmJiBwYXlsb2FkLmlzQXhpb3NFcnJvciA9PT0gdHJ1ZTtcbn1cbiIsImltcG9ydCBkZWJvdW5jZSBmcm9tICdsb2Rhc2gvZGVib3VuY2UnO1xuaW1wb3J0IGZsYXR0ZW4gZnJvbSAnbG9kYXNoL2ZsYXR0ZW4nO1xuaW1wb3J0IHRha2UgZnJvbSAnbG9kYXNoL3Rha2UnO1xuaW1wb3J0IHtcbiAgc29ydFNlYXJjaFJlc3VsdHMsXG4gIGlzU3RvcCxcbn0gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWhlbHBlcnMnO1xuaW1wb3J0IGZpbHRlck1hdGNoaW5nVG9JbnB1dCBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZmlsdGVyLW1hdGNoaW5nLXRvLWlucHV0JztcbmltcG9ydCBnZXRHZW9jb2RpbmdSZXN1bHRzIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMnO1xuaW1wb3J0IGdldEpzb24gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1qc29uJztcblxuZnVuY3Rpb24gZ2V0U3RvcHNGcm9tR2VvY29kaW5nKHN0b3BzLCBVUkxfUEVMSUFTX1BMQUNFKSB7XG4gIGlmICghc3RvcHMgfHwgc3RvcHMubGVuZ3RoIDwgMSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuICB9XG4gIGxldCBnaWRzID0gJyc7XG4gIGNvbnN0IHN0b3BzV2l0aEdpZHMgPSBzdG9wcy5tYXAoc3RvcCA9PiB7XG4gICAgY29uc3QgdHlwZSA9IHN0b3AudHlwZSA9PT0gJ3N0b3AnID8gJ3N0b3AnIDogJ3N0YXRpb24nO1xuICAgIGxldCBnaWQgPSBgZ3RmcyR7c3RvcC5ndGZzSWQuc3BsaXQoJzonKVswXS50b0xvd2VyQ2FzZSgpfToke3R5cGV9OkdURlM6JHtcbiAgICAgIHN0b3AuZ3Rmc0lkXG4gICAgfWA7XG4gICAgaWYgKHN0b3AuY29kZSkge1xuICAgICAgZ2lkICs9IGAjJHtzdG9wLmNvZGV9YDtcbiAgICB9XG4gICAgZ2lkcyArPSBgJHtnaWR9LGA7XG4gICAgcmV0dXJuIHsgLi4uc3RvcCwgZ2lkIH07XG4gIH0pO1xuICBjb25zdCBzdG9wU3RhdGlvbk1hcCA9IHN0b3BzV2l0aEdpZHMucmVkdWNlKGZ1bmN0aW9uIHJlZHUoXG4gICAgbWFwLFxuICAgIHN0b3BPclN0YXRpb24sXG4gICkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgIG1hcFtzdG9wT3JTdGF0aW9uLmdpZF0gPSBzdG9wT3JTdGF0aW9uO1xuICAgIHJldHVybiBtYXA7XG4gIH0sIHt9KTtcbiAgcmV0dXJuIGdldEpzb24oVVJMX1BFTElBU19QTEFDRSwge1xuICAgIGlkczogZ2lkcy5zbGljZSgwLCAtMSksXG4gICAgLy8gbGFuZzogY29udGV4dC5nZXRTdG9yZSgnUHJlZmVyZW5jZXNTdG9yZScpLmdldExhbmd1YWdlKCksIFRPRE8gZW5hYmxlIHRoaXMgd2hlbiBPVFAgc3VwcG9ydHMgdHJhbnNsYXRpb25zXG4gIH0pLnRoZW4ocmVzID0+IHtcbiAgICByZXR1cm4gcmVzLmZlYXR1cmVzLm1hcChzdG9wID0+IHtcbiAgICAgIGNvbnN0IGZhdm91cml0ZSA9IHtcbiAgICAgICAgdHlwZTogJ0Zhdm91cml0ZVN0b3AnLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgYWRkZW5kdW06IHN0b3AucHJvcGVydGllcy5hZGRlbmR1bSxcbiAgICAgICAgICBnaWQ6IHN0b3BTdGF0aW9uTWFwW3N0b3AucHJvcGVydGllcy5naWRdLmdpZCxcbiAgICAgICAgICBjb2RlOiBzdG9wU3RhdGlvbk1hcFtzdG9wLnByb3BlcnRpZXMuZ2lkXS5jb2RlLFxuICAgICAgICAgIGd0ZnNJZDogc3RvcFN0YXRpb25NYXBbc3RvcC5wcm9wZXJ0aWVzLmdpZF0uZ3Rmc0lkLFxuICAgICAgICAgIGxhc3RVcGRhdGVkOiBzdG9wU3RhdGlvbk1hcFtzdG9wLnByb3BlcnRpZXMuZ2lkXS5sYXN0VXBkYXRlZCxcbiAgICAgICAgICBmYXZvdXJpdGVJZDogc3RvcFN0YXRpb25NYXBbc3RvcC5wcm9wZXJ0aWVzLmdpZF0uZmF2b3VyaXRlSWQsXG4gICAgICAgICAgYWRkcmVzczogc3RvcC5wcm9wZXJ0aWVzLmxhYmVsLFxuICAgICAgICAgIGxheWVyOiBpc1N0b3Aoc3RvcC5wcm9wZXJ0aWVzKSA/ICdmYXZvdXJpdGVTdG9wJyA6ICdmYXZvdXJpdGVTdGF0aW9uJyxcbiAgICAgICAgfSxcbiAgICAgICAgZ2VvbWV0cnk6IHN0b3AuZ2VvbWV0cnksXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGZhdm91cml0ZTtcbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBmaWx0ZXJGYXZvdXJpdGVMb2NhdGlvbnMoZmF2b3VyaXRlcywgaW5wdXQpIHtcbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcbiAgICBmaWx0ZXJNYXRjaGluZ1RvSW5wdXQoZmF2b3VyaXRlcywgaW5wdXQsIFsnYWRkcmVzcycsICduYW1lJ10pLm1hcChpdGVtID0+ICh7XG4gICAgICB0eXBlOiAnRmF2b3VyaXRlUGxhY2UnLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAuLi5pdGVtLFxuICAgICAgICBsYWJlbDogaXRlbS5uYW1lLFxuICAgICAgICBsYXllcjogJ2Zhdm91cml0ZVBsYWNlJyxcbiAgICAgIH0sXG4gICAgICBnZW9tZXRyeTogeyB0eXBlOiAnUG9pbnQnLCBjb29yZGluYXRlczogW2l0ZW0ubG9uLCBpdGVtLmxhdF0gfSxcbiAgICB9KSksXG4gICk7XG59XG5mdW5jdGlvbiBzZWxlY3RQb3NpdGlvbkZvbU1hcChpbnB1dCkge1xuICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJyB8fCBpbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ1NlbGVjdEZyb21NYXAnLFxuICAgICAgICBhZGRyZXNzOiAnU2VsZWN0RnJvbU1hcCcsXG4gICAgICAgIGxhdDogbnVsbCxcbiAgICAgICAgbG9uOiBudWxsLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgbGFiZWxJZDogJ3NlbGVjdC1mcm9tLW1hcCcsXG4gICAgICAgICAgbGF5ZXI6ICdzZWxlY3RGcm9tTWFwJyxcbiAgICAgICAgICBhZGRyZXNzOiAnU2VsZWN0RnJvbU1hcCcsXG4gICAgICAgICAgbGF0OiBudWxsLFxuICAgICAgICAgIGxvbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAgZ2VvbWV0cnk6IHtcbiAgICAgICAgICB0eXBlOiAnUG9pbnQnLFxuICAgICAgICAgIGNvb3JkaW5hdGVzOiBbXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgXSk7XG4gIH1cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG59XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRQb3NpdGlvbklmRW1wdHkoaW5wdXQsIHBvc2l0aW9uKSB7XG4gIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnIHx8IGlucHV0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnQ3VycmVudExvY2F0aW9uJyxcbiAgICAgICAgYWRkcmVzczogcG9zaXRpb24uYWRkcmVzcyxcbiAgICAgICAgbGF0OiBwb3NpdGlvbi5sYXQsXG4gICAgICAgIGxvbjogcG9zaXRpb24ubG9uLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgbGFiZWxJZDogJ3VzZS1vd24tcG9zaXRpb24nLFxuICAgICAgICAgIGxheWVyOiAnY3VycmVudFBvc2l0aW9uJyxcbiAgICAgICAgICBhZGRyZXNzOiBwb3NpdGlvbi5hZGRyZXNzLFxuICAgICAgICAgIGxhdDogcG9zaXRpb24ubGF0LFxuICAgICAgICAgIGxvbjogcG9zaXRpb24ubG9uLFxuICAgICAgICB9LFxuICAgICAgICBnZW9tZXRyeToge1xuICAgICAgICAgIHR5cGU6ICdQb2ludCcsXG4gICAgICAgICAgY29vcmRpbmF0ZXM6IFtwb3NpdGlvbi5sb24sIHBvc2l0aW9uLmxhdF0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF0pO1xuICB9XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG59XG5cbmZ1bmN0aW9uIHNlbGVjdEZyb21Pd25Mb2NhdGlvbnMoaW5wdXQpIHtcbiAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycgfHwgaW5wdXQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdTZWxlY3RGcm9tT3duTG9jYXRpb25zJyxcbiAgICAgICAgYWRkcmVzczogJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnLFxuICAgICAgICBsYXQ6IG51bGwsXG4gICAgICAgIGxvbjogbnVsbCxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGxhYmVsSWQ6ICdzZWxlY3QtZnJvbS1vd24tbG9jYXRpb25zJyxcbiAgICAgICAgICBsYXllcjogJ293bkxvY2F0aW9ucycsXG4gICAgICAgICAgYWRkcmVzczogJ3NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnLFxuICAgICAgICAgIGxhdDogbnVsbCxcbiAgICAgICAgICBsb246IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIGdlb21ldHJ5OiB7XG4gICAgICAgICAgdHlwZTogJ1BvaW50JyxcbiAgICAgICAgICBjb29yZGluYXRlczogW10sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF0pO1xuICB9XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xufVxuXG5mdW5jdGlvbiBnZXRCYWNrU3VnZ2VzdGlvbigpIHtcbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXG4gICAge1xuICAgICAgdHlwZTogJ2JhY2snLFxuICAgICAgYWRkcmVzczogJ2JhY2snLFxuICAgICAgbGF0OiBudWxsLFxuICAgICAgbG9uOiBudWxsLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBsYWJlbElkOiAnYmFjaycsXG4gICAgICAgIGxheWVyOiAnYmFjaycsXG4gICAgICAgIGFkZHJlc3M6ICdiYWNrJyxcbiAgICAgICAgbGF0OiBudWxsLFxuICAgICAgICBsb246IG51bGwsXG4gICAgICB9LFxuICAgICAgZ2VvbWV0cnk6IHtcbiAgICAgICAgdHlwZTogJ1BvaW50JyxcbiAgICAgICAgY29vcmRpbmF0ZXM6IFtdLFxuICAgICAgfSxcbiAgICB9LFxuICBdKTtcbn1cblxuZnVuY3Rpb24gZmlsdGVyRmF2b3VyaXRlU3RvcHMoc3RvcHNBbmRTdGF0aW9ucywgaW5wdXQsIHVzZVN0b3BzLCB1c2VTdGF0aW9ucykge1xuICByZXR1cm4gc3RvcHNBbmRTdGF0aW9ucy50aGVuKHN0b3BzU3RhdGlvbnMgPT4ge1xuICAgIGNvbnN0IGNhbmRpZGF0ZXMgPSBzdG9wc1N0YXRpb25zLmZpbHRlcihzID0+XG4gICAgICBzLnR5cGUgPT09ICdzdG9wJyA/IHVzZVN0b3BzIDogdXNlU3RhdGlvbnMsXG4gICAgKTtcbiAgICByZXR1cm4gZmlsdGVyTWF0Y2hpbmdUb0lucHV0KGNhbmRpZGF0ZXMsIGlucHV0LCBbXG4gICAgICAncHJvcGVydGllcy5uYW1lJyxcbiAgICAgICdwcm9wZXJ0aWVzLm5hbWUnLFxuICAgICAgJ3Byb3BlcnRpZXMuYWRkcmVzcycsXG4gICAgXSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBmaWx0ZXJPbGRTZWFyY2hlcyhvbGRTZWFyY2hlcywgaW5wdXQsIGRyb3BMYXllcnMpIHtcbiAgbGV0IG1hdGNoaW5nT2xkU2VhcmNoZXMgPSBmaWx0ZXJNYXRjaGluZ1RvSW5wdXQob2xkU2VhcmNoZXMsIGlucHV0LCBbXG4gICAgJ3Byb3BlcnRpZXMubmFtZScsXG4gICAgJ3Byb3BlcnRpZXMubGFiZWwnLFxuICAgICdwcm9wZXJ0aWVzLmFkZHJlc3MnLFxuICAgICdwcm9wZXJ0aWVzLnNob3J0TmFtZScsXG4gICAgJ3Byb3BlcnRpZXMubG9uZ05hbWUnLFxuICBdKTtcbiAgaWYgKGRyb3BMYXllcnMpIHtcbiAgICAvLyBkb24ndCB3YW50IHRoZXNlXG4gICAgbWF0Y2hpbmdPbGRTZWFyY2hlcyA9IG1hdGNoaW5nT2xkU2VhcmNoZXMuZmlsdGVyKFxuICAgICAgaXRlbSA9PiAhZHJvcExheWVycy5pbmNsdWRlcyhpdGVtLnByb3BlcnRpZXMubGF5ZXIpLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcbiAgICB0YWtlKG1hdGNoaW5nT2xkU2VhcmNoZXMsIDEwKS5tYXAoaXRlbSA9PiB7XG4gICAgICBjb25zdCBuZXdJdGVtID0ge1xuICAgICAgICAuLi5pdGVtLFxuICAgICAgICB0eXBlOiAnT2xkU2VhcmNoJyxcbiAgICAgICAgdGltZXRhYmxlQ2xpY2tlZDogZmFsc2UsIC8vIHJlc2V0IGxhdGVzdCBzZWxlY3Rpb24gYWN0aW9uXG4gICAgICAgIGFycm93Q2xpY2tlZDogZmFsc2UsXG4gICAgICB9O1xuICAgICAgZGVsZXRlIG5ld0l0ZW0ucHJvcGVydGllcy5jb25maWRlbmNlO1xuICAgICAgcmV0dXJuIG5ld0l0ZW07XG4gICAgfSksXG4gICk7XG59XG5cbmZ1bmN0aW9uIGhhc0Zhdm91cml0ZXMoc2VhcmNoQ29udGV4dCkge1xuICBjb25zdCBmYXZvdXJpdGVMb2NhdGlvbnMgPSBzZWFyY2hDb250ZXh0LmdldEZhdm91cml0ZUxvY2F0aW9ucyhcbiAgICBzZWFyY2hDb250ZXh0LmNvbnRleHQsXG4gICk7XG4gIGlmIChmYXZvdXJpdGVMb2NhdGlvbnM/Lmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0IGZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9ucyA9XG4gICAgc2VhcmNoQ29udGV4dC5nZXRGYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnMoc2VhcmNoQ29udGV4dC5jb250ZXh0KTtcbiAgaWYgKGZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9ucz8ubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGNvbnN0IGZhdm91cml0ZVN0b3BzID0gc2VhcmNoQ29udGV4dC5nZXRGYXZvdXJpdGVTdG9wcyhzZWFyY2hDb250ZXh0LmNvbnRleHQpO1xuICByZXR1cm4gZmF2b3VyaXRlU3RvcHM/Lmxlbmd0aCA+IDA7XG59XG5cbmNvbnN0IHJvdXRlTGF5ZXJzID0gW1xuICAncm91dGUtVFJBTScsXG4gICdyb3V0ZS1CVVMnLFxuICAncm91dGUtUkFJTCcsXG4gICdyb3V0ZS1GRVJSWScsXG4gICdyb3V0ZS1TVUJXQVknLFxuICAncm91dGUtQUlSUExBTkUnLFxuICAncm91dGUtRlVOSUNVTEFSJyxcbl07XG5jb25zdCBsb2NhdGlvbkxheWVycyA9IFsndmVudWUnLCAnYWRkcmVzcycsICdzdHJlZXQnXTtcbmNvbnN0IHBhcmtpbmdMYXllcnMgPSBbJ2NhcnBhcmsnLCAnYmlrZXBhcmsnXTtcbmNvbnN0IHN0b3BMYXllcnMgPSBbJ3N0b3AnLCAnc3RhdGlvbiddO1xuXG4vKipcbiAqIEV4ZWN1dGVzIHRoZSBzZWFyY2hcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWFyY2hSZXN1bHRzKFxuICB0YXJnZXRzLFxuICBzb3VyY2VzLFxuICB0cmFuc3BvcnRNb2RlLFxuICBzZWFyY2hDb250ZXh0LFxuICBmaWx0ZXJSZXN1bHRzLFxuICBnZW9jb2RpbmdTaXplLFxuICB7IGlucHV0IH0sXG4gIGNhbGxiYWNrLFxuICBwYXRoT3B0cyxcbiAgcmVmUG9pbnQsXG4pIHtcbiAgY29uc3Qge1xuICAgIGdldFBvc2l0aW9ucyxcbiAgICBnZXRGYXZvdXJpdGVMb2NhdGlvbnMsXG4gICAgZ2V0T2xkU2VhcmNoZXMsXG4gICAgZ2V0RmF2b3VyaXRlU3RvcHMsXG4gICAgcGFya2luZ0FyZWFTb3VyY2VzLFxuICAgIGdldExhbmd1YWdlLFxuICAgIGdldFN0b3BBbmRTdGF0aW9uc1F1ZXJ5LFxuICAgIGdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uc1F1ZXJ5LFxuICAgIGdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9ucyxcbiAgICBnZXRGYXZvdXJpdGVSb3V0ZXNRdWVyeSxcbiAgICBnZXRGYXZvdXJpdGVSb3V0ZXMsXG4gICAgZ2V0Um91dGVzUXVlcnksXG4gICAgY29udGV4dCxcbiAgICBpc1BlbGlhc0xvY2F0aW9uQXdhcmU6IGxvY2F0aW9uQXdhcmUsXG4gICAgbWluaW1hbFJlZ2V4cCxcbiAgICBsaW5lUmVnZXhwLFxuICAgIFVSTF9QRUxJQVMsXG4gICAgVVJMX1BFTElBU19QTEFDRSxcbiAgICBmZWVkSURzLFxuICAgIGdlb2NvZGluZ1NlYXJjaFBhcmFtcyxcbiAgICBnZW9jb2RpbmdTb3VyY2VzLFxuICAgIGdldEZ1dHVyZVJvdXRlcyxcbiAgICBjaXR5QmlrZU5ldHdvcmtzLFxuICB9ID0gc2VhcmNoQ29udGV4dDtcbiAgLy8gaWYgbm8gdGFyZ2V0cyBhcmUgcHJvdmlkZWQsIHNlYXJjaCB0aGVtIGFsbC5cbiAgY29uc3QgYWxsVGFyZ2V0cyA9ICF0YXJnZXRzIHx8IHRhcmdldHMubGVuZ3RoID09PSAwO1xuICAvLyBpZiBubyBzb3VyY2VzIGFyZSBwcm92aWRlZCwgdXNlIHRoZW0gYWxsLlxuICBjb25zdCBhbGxTb3VyY2VzID0gIXNvdXJjZXMgfHwgc291cmNlcy5sZW5ndGggPT09IDA7XG4gIGNvbnN0IHBvc2l0aW9uID0gZ2V0UG9zaXRpb25zKGNvbnRleHQpO1xuICBjb25zdCBzZWFyY2hDb21wb25lbnRzID0gW107XG4gIGNvbnN0IHNlYXJjaGVzID0geyB0eXBlOiAnYWxsJywgdGVybTogaW5wdXQsIHJlc3VsdHM6IFtdIH07XG4gIGNvbnN0IGxhbmd1YWdlID0gZ2V0TGFuZ3VhZ2UoY29udGV4dCk7XG4gIGNvbnN0IGZvY3VzUG9pbnQgPVxuICAgIGxvY2F0aW9uQXdhcmUgJiYgcmVmUG9pbnQ/LmxhdCAmJiByZWZQb2ludD8ubG9uXG4gICAgICA/IHtcbiAgICAgICAgICAvLyBSb3VuZCBjb29yZGluYXRlcyB0byBhcHByb3ggMSBrbSwgaW4gb3JkZXIgdG8gaW1wcm92ZSBjYWNoaW5nXG4gICAgICAgICAgJ2ZvY3VzLnBvaW50LmxhdCc6IHJlZlBvaW50LmxhdC50b0ZpeGVkKDMpLFxuICAgICAgICAgICdmb2N1cy5wb2ludC5sb24nOiByZWZQb2ludC5sb24udG9GaXhlZCgzKSxcbiAgICAgICAgfVxuICAgICAgOiB7fTtcbiAgY29uc3QgbW9kZSA9IHRyYW5zcG9ydE1vZGUgPyB0cmFuc3BvcnRNb2RlLnNwbGl0KCctJylbMV0gOiB1bmRlZmluZWQ7XG4gIGlmIChcbiAgICB0YXJnZXRzLmluY2x1ZGVzKCdDdXJyZW50UG9zaXRpb24nKSAmJlxuICAgIHBvc2l0aW9uLnN0YXR1cyAhPT0gJ2dlb2xvY2F0aW9uLW5vdC1zdXBwb3J0ZWQnXG4gICkge1xuICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChnZXRDdXJyZW50UG9zaXRpb25JZkVtcHR5KGlucHV0LCBwb3NpdGlvbikpO1xuICB9XG4gIGlmIChhbGxUYXJnZXRzIHx8IHRhcmdldHMuaW5jbHVkZXMoJ01hcFBvc2l0aW9uJykpIHtcbiAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goc2VsZWN0UG9zaXRpb25Gb21NYXAoaW5wdXQpKTtcbiAgfVxuICBpZiAodGFyZ2V0cy5pbmNsdWRlcygnRnV0dXJlUm91dGVzJykpIHtcbiAgICBjb25zdCBpdGVtcyA9IGdldEZ1dHVyZVJvdXRlcyhjb250ZXh0KTtcbiAgICBzZWFyY2hDb21wb25lbnRzLnB1c2godGFrZShpdGVtcywgMykpO1xuICB9XG4gIGlmIChcbiAgICB0YXJnZXRzLmluY2x1ZGVzKCdTZWxlY3RGcm9tT3duTG9jYXRpb25zJykgJiZcbiAgICBoYXNGYXZvdXJpdGVzKHNlYXJjaENvbnRleHQpXG4gICkge1xuICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChzZWxlY3RGcm9tT3duTG9jYXRpb25zKGlucHV0KSk7XG4gIH1cbiAgaWYgKGFsbFRhcmdldHMgfHwgdGFyZ2V0cy5pbmNsdWRlcygnTG9jYXRpb25zJykpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWRlc3RydWN0dXJpbmdcbiAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSBnZW9jb2RpbmdTZWFyY2hQYXJhbXM7XG4gICAgaWYgKHNvdXJjZXMuaW5jbHVkZXMoJ0Zhdm91cml0ZScpKSB7XG4gICAgICBjb25zdCBmYXZvdXJpdGVMb2NhdGlvbnMgPSBnZXRGYXZvdXJpdGVMb2NhdGlvbnMoY29udGV4dCk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGZpbHRlckZhdm91cml0ZUxvY2F0aW9ucyhmYXZvdXJpdGVMb2NhdGlvbnMsIGlucHV0KSxcbiAgICAgICk7XG4gICAgICBpZiAoc291cmNlcy5pbmNsdWRlcygnQmFjaycpKSB7XG4gICAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChnZXRCYWNrU3VnZ2VzdGlvbigpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdEYXRhc291cmNlJykpIHtcbiAgICAgIGNvbnN0IGdlb2NvZGluZ0xheWVycyA9IFsndmVudWUnLCAnYWRkcmVzcycsICdzdHJlZXQnXTtcbiAgICAgIGlmICh0YXJnZXRzLmluY2x1ZGVzKCdTdGF0aW9ucycpKSB7XG4gICAgICAgIGdlb2NvZGluZ0xheWVycy5wdXNoKCdzdGF0aW9uJyk7IC8vIHNlYXJjaCBzdGF0aW9ucyBmcm9tIE9TTVxuICAgICAgfVxuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBnZXRHZW9jb2RpbmdSZXN1bHRzKFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICAgIHNlYXJjaFBhcmFtcyxcbiAgICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgICBmb2N1c1BvaW50LFxuICAgICAgICAgIGdlb2NvZGluZ1NvdXJjZXMuam9pbignLCcpLFxuICAgICAgICAgIFVSTF9QRUxJQVMsXG4gICAgICAgICAgbWluaW1hbFJlZ2V4cCxcbiAgICAgICAgICBnZW9jb2RpbmdMYXllcnMsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdIaXN0b3J5JykpIHtcbiAgICAgIGNvbnN0IGxvY2F0aW9uSGlzdG9yeSA9IGdldE9sZFNlYXJjaGVzKGNvbnRleHQsICdlbmRwb2ludCcpO1xuICAgICAgY29uc3QgZHJvcExheWVycyA9IFsnYmlrZXN0YXRpb24nXTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5zdG9wTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5yb3V0ZUxheWVycyk7XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ucGFya2luZ0xheWVycyk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGZpbHRlck9sZFNlYXJjaGVzKGxvY2F0aW9uSGlzdG9yeSwgaW5wdXQsIGRyb3BMYXllcnMpLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgaWYgKGFsbFRhcmdldHMgfHwgdGFyZ2V0cy5pbmNsdWRlcygnUGFya2luZ0FyZWFzJykpIHtcbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdEYXRhc291cmNlJykpIHtcbiAgICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IGdlb2NvZGluZ1NlYXJjaFBhcmFtcztcbiAgICAgIGlmIChnZW9jb2RpbmdTaXplICYmIGdlb2NvZGluZ1NpemUgIT09IDEwKSB7XG4gICAgICAgIHNlYXJjaFBhcmFtcy5zaXplID0gZ2VvY29kaW5nU2l6ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGdlb2NvZGluZ0xheWVycyA9IFsnY2FycGFyaycsICdiaWtlcGFyayddO1xuICAgICAgY29uc3QgZmVlZElkcyA9IHBhcmtpbmdBcmVhU291cmNlcyA/IHBhcmtpbmdBcmVhU291cmNlcy5qb2luKCcsJykgOiBudWxsO1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBnZXRHZW9jb2RpbmdSZXN1bHRzKFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICAgIHNlYXJjaFBhcmFtcyxcbiAgICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgICBmb2N1c1BvaW50LFxuICAgICAgICAgIGZlZWRJZHMsXG4gICAgICAgICAgVVJMX1BFTElBUyxcbiAgICAgICAgICBtaW5pbWFsUmVnZXhwLFxuICAgICAgICAgIGdlb2NvZGluZ0xheWVycyxcbiAgICAgICAgKS50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgICAgIGlmIChmaWx0ZXJSZXN1bHRzKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyUmVzdWx0cyhyZXN1bHRzLCBtb2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnSGlzdG9yeScpKSB7XG4gICAgICBjb25zdCBoaXN0b3J5ID0gZ2V0T2xkU2VhcmNoZXMoY29udGV4dCk7XG4gICAgICBjb25zdCBkcm9wTGF5ZXJzID0gWydiaWtlc3RhdGlvbiddO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnN0b3BMYXllcnMpO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnJvdXRlTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5sb2NhdGlvbkxheWVycyk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goZmlsdGVyT2xkU2VhcmNoZXMoaGlzdG9yeSwgaW5wdXQsIGRyb3BMYXllcnMpKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCB1c2VTdG9wcyA9IHRhcmdldHMuaW5jbHVkZXMoJ1N0b3BzJyk7XG4gIGNvbnN0IHVzZVN0YXRpb25zID0gdGFyZ2V0cy5pbmNsdWRlcygnU3RhdGlvbnMnKTtcblxuICBpZiAoYWxsVGFyZ2V0cyB8fCB1c2VTdG9wcyB8fCB1c2VTdGF0aW9ucykge1xuICAgIGlmIChzb3VyY2VzLmluY2x1ZGVzKCdGYXZvdXJpdGUnKSkge1xuICAgICAgY29uc3QgZmF2b3VyaXRlU3RvcHMgPSBnZXRGYXZvdXJpdGVTdG9wcyhjb250ZXh0KTtcbiAgICAgIGxldCBzdG9wc0FuZFN0YXRpb25zO1xuICAgICAgaWYgKGZhdm91cml0ZVN0b3BzLmV2ZXJ5KHN0b3AgPT4gc3RvcC50eXBlID09PSAnc3RhdGlvbicpKSB7XG4gICAgICAgIHN0b3BzQW5kU3RhdGlvbnMgPSBnZXRTdG9wc0Zyb21HZW9jb2RpbmcoXG4gICAgICAgICAgZmF2b3VyaXRlU3RvcHMsXG4gICAgICAgICAgVVJMX1BFTElBU19QTEFDRSxcbiAgICAgICAgKS50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgICAgIGlmIChmaWx0ZXJSZXN1bHRzKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyUmVzdWx0cyhyZXN1bHRzLCBtb2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RvcHNBbmRTdGF0aW9ucyA9IGdldFN0b3BBbmRTdGF0aW9uc1F1ZXJ5KGZhdm91cml0ZVN0b3BzKVxuICAgICAgICAgIC50aGVuKGZhdm91cml0ZXMgPT5cbiAgICAgICAgICAgIGdldFN0b3BzRnJvbUdlb2NvZGluZyhmYXZvdXJpdGVzLCBVUkxfUEVMSUFTX1BMQUNFKSxcbiAgICAgICAgICApXG4gICAgICAgICAgLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICAgICAgICBpZiAoZmlsdGVyUmVzdWx0cykge1xuICAgICAgICAgICAgICByZXR1cm4gZmlsdGVyUmVzdWx0cyhyZXN1bHRzLCBtb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBmaWx0ZXJGYXZvdXJpdGVTdG9wcyhzdG9wc0FuZFN0YXRpb25zLCBpbnB1dCwgdXNlU3RvcHMsIHVzZVN0YXRpb25zKSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0RhdGFzb3VyY2UnKSkge1xuICAgICAgY29uc3QgZ2VvY29kaW5nTGF5ZXJzID0gW107XG4gICAgICBpZiAodXNlU3RvcHMpIHtcbiAgICAgICAgZ2VvY29kaW5nTGF5ZXJzLnB1c2goJ3N0b3AnKTtcbiAgICAgIH1cbiAgICAgIGlmICh1c2VTdGF0aW9ucykge1xuICAgICAgICBnZW9jb2RpbmdMYXllcnMucHVzaCgnc3RhdGlvbicpO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2VhcmNoUGFyYW1zID1cbiAgICAgICAgZ2VvY29kaW5nU2l6ZSAmJiBnZW9jb2RpbmdTaXplICE9PSAxMCA/IHsgc2l6ZTogZ2VvY29kaW5nU2l6ZSB9IDoge307XG4gICAgICBpZiAoZ2VvY29kaW5nU2VhcmNoUGFyYW1zICYmIGdlb2NvZGluZ1NlYXJjaFBhcmFtc1snYm91bmRhcnkuY291bnRyeSddKSB7XG4gICAgICAgIHNlYXJjaFBhcmFtc1snYm91bmRhcnkuY291bnRyeSddID1cbiAgICAgICAgICBnZW9jb2RpbmdTZWFyY2hQYXJhbXNbJ2JvdW5kYXJ5LmNvdW50cnknXTtcbiAgICAgIH1cbiAgICAgIC8vIGEgbGl0dGxlIGhhY2s6IHdoZW4gc2VhcmNoaW5nIGxvY2F0aW9uIGRhdGEsIGF1dG9tYXRpY2FsbHkgZGVkdXBlIHN0b3BzXG4gICAgICAvLyB0aGlzIGNvdWxkIGJlIGEgbmV3IGV4cGxpY2l0IHByb3BcbiAgICAgIGlmIChhbGxUYXJnZXRzIHx8IHRhcmdldHMuaW5jbHVkZXMoJ0xvY2F0aW9ucycpKSB7XG4gICAgICAgIHNlYXJjaFBhcmFtcy5kZWR1cGVzdG9wcyA9IDE7XG4gICAgICB9XG4gICAgICBjb25zdCBmZWVkcyA9IGZlZWRJRHMubWFwKHYgPT4gYGd0ZnMke3Z9YCkuam9pbignLCcpO1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBnZXRHZW9jb2RpbmdSZXN1bHRzKFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICAgIHNlYXJjaFBhcmFtcyxcbiAgICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgICBmb2N1c1BvaW50LFxuICAgICAgICAgIGZlZWRzLFxuICAgICAgICAgIFVSTF9QRUxJQVMsXG4gICAgICAgICAgbWluaW1hbFJlZ2V4cCxcbiAgICAgICAgICBnZW9jb2RpbmdMYXllcnMsXG4gICAgICAgICkudGhlbihyZXN1bHRzID0+IHtcbiAgICAgICAgICBpZiAoZmlsdGVyUmVzdWx0cykge1xuICAgICAgICAgICAgcmV0dXJuIGZpbHRlclJlc3VsdHMocmVzdWx0cywgbW9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0hpc3RvcnknKSkge1xuICAgICAgY29uc3Qgc3RvcEhpc3RvcnkgPSBnZXRPbGRTZWFyY2hlcyhjb250ZXh0KS5maWx0ZXIoaXRlbSA9PiB7XG4gICAgICAgIGlmIChpdGVtLnByb3BlcnRpZXMuZ2lkKSB7XG4gICAgICAgICAgcmV0dXJuIGl0ZW0ucHJvcGVydGllcy5naWQuaW5jbHVkZXMoJ0dURlM6Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGRyb3BMYXllcnMgPSBbJ2Jpa2VzdGF0aW9uJ107XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ucm91dGVMYXllcnMpO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLmxvY2F0aW9uTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5wYXJraW5nTGF5ZXJzKTtcbiAgICAgIGlmICghdXNlU3RvcHMpIHtcbiAgICAgICAgZHJvcExheWVycy5wdXNoKCdzdG9wJyk7XG4gICAgICB9XG4gICAgICBpZiAoIXVzZVN0YXRpb25zKSB7XG4gICAgICAgIGRyb3BMYXllcnMucHVzaCgnc3RhdGlvbicpO1xuICAgICAgfVxuICAgICAgaWYgKHRyYW5zcG9ydE1vZGUpIHtcbiAgICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICAgIGZpbHRlck9sZFNlYXJjaGVzKHN0b3BIaXN0b3J5LCBpbnB1dCwgZHJvcExheWVycykudGhlbihyZXN1bHQgPT5cbiAgICAgICAgICAgIGZpbHRlclJlc3VsdHMgPyBmaWx0ZXJSZXN1bHRzKHJlc3VsdCwgbW9kZSkgOiByZXN1bHQsXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgICBmaWx0ZXJPbGRTZWFyY2hlcyhzdG9wSGlzdG9yeSwgaW5wdXQsIGRyb3BMYXllcnMpLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoYWxsVGFyZ2V0cyB8fCB0YXJnZXRzLmluY2x1ZGVzKCdSb3V0ZXMnKSkge1xuICAgIGlmIChzb3VyY2VzLmluY2x1ZGVzKCdGYXZvdXJpdGUnKSkge1xuICAgICAgY29uc3QgZmF2b3VyaXRlUm91dGVzID0gZ2V0RmF2b3VyaXRlUm91dGVzKGNvbnRleHQpO1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBnZXRGYXZvdXJpdGVSb3V0ZXNRdWVyeShmYXZvdXJpdGVSb3V0ZXMsIGlucHV0LCBtb2RlLCBwYXRoT3B0cykudGhlbihcbiAgICAgICAgICByZXN1bHQgPT5cbiAgICAgICAgICAgIGZpbHRlclJlc3VsdHMgPyBmaWx0ZXJSZXN1bHRzKHJlc3VsdCwgbW9kZSwgJ1JvdXRlcycpIDogcmVzdWx0LFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgZ2V0Um91dGVzUXVlcnkoaW5wdXQsIGZlZWRJRHMsIHRyYW5zcG9ydE1vZGUsIHBhdGhPcHRzKS50aGVuKHJlc3VsdCA9PlxuICAgICAgICBmaWx0ZXJSZXN1bHRzID8gZmlsdGVyUmVzdWx0cyhyZXN1bHQsIG1vZGUsICdSb3V0ZXMnKSA6IHJlc3VsdCxcbiAgICAgICksXG4gICAgKTtcbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdIaXN0b3J5JykpIHtcbiAgICAgIGNvbnN0IHJvdXRlSGlzdG9yeSA9IGdldE9sZFNlYXJjaGVzKGNvbnRleHQpO1xuICAgICAgY29uc3QgZHJvcExheWVycyA9IFsnYmlrZXN0YXRpb24nXTtcbiAgICAgIGlmICh0cmFuc3BvcnRNb2RlKSB7XG4gICAgICAgIGRyb3BMYXllcnMucHVzaCguLi5yb3V0ZUxheWVycy5maWx0ZXIoaSA9PiAhKGkgPT09IHRyYW5zcG9ydE1vZGUpKSk7XG4gICAgICB9XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4uc3RvcExheWVycyk7XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ubG9jYXRpb25MYXllcnMpO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnBhcmtpbmdMYXllcnMpO1xuXG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGZpbHRlck9sZFNlYXJjaGVzKHJvdXRlSGlzdG9yeSwgaW5wdXQsIGRyb3BMYXllcnMpLnRoZW4ocmVzdWx0cyA9PlxuICAgICAgICAgIGZpbHRlclJlc3VsdHMgPyBmaWx0ZXJSZXN1bHRzKHJlc3VsdHMsIG1vZGUsICdSb3V0ZXMnKSA6IHJlc3VsdHMsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBpZiAoYWxsVGFyZ2V0cyB8fCB0YXJnZXRzLmluY2x1ZGVzKCdWZWhpY2xlUmVudGFsU3RhdGlvbnMnKSkge1xuICAgIGlmIChzb3VyY2VzLmluY2x1ZGVzKCdGYXZvdXJpdGUnKSkge1xuICAgICAgY29uc3QgZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb24gPVxuICAgICAgICBnZXRGYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnMoY29udGV4dCk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uc1F1ZXJ5KFxuICAgICAgICAgIGZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uLFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnRGF0YXNvdXJjZScpKSB7XG4gICAgICBjb25zdCBnZW9jb2RpbmdMYXllcnMgPSBbJ2Jpa2VzdGF0aW9uJ107XG4gICAgICBjb25zdCBzZWFyY2hQYXJhbXMgPVxuICAgICAgICBnZW9jb2RpbmdTaXplICYmIGdlb2NvZGluZ1NpemUgIT09IDEwID8geyBzaXplOiBnZW9jb2RpbmdTaXplIH0gOiB7fTtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZ2V0R2VvY29kaW5nUmVzdWx0cyhcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICBzZWFyY2hQYXJhbXMsXG4gICAgICAgICAgbGFuZ3VhZ2UsXG4gICAgICAgICAgZm9jdXNQb2ludCxcbiAgICAgICAgICBjaXR5QmlrZU5ldHdvcmtzLmpvaW4oJywnKSxcbiAgICAgICAgICBVUkxfUEVMSUFTLFxuICAgICAgICAgIG1pbmltYWxSZWdleHAsXG4gICAgICAgICAgZ2VvY29kaW5nTGF5ZXJzLFxuICAgICAgICApLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICAgICAgaWYgKGZpbHRlclJlc3VsdHMpIHtcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJSZXN1bHRzKHJlc3VsdHMsIG1vZGUsICdWZWhpY2xlUmVudGFsU3RhdGlvbnMnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnSGlzdG9yeScpKSB7XG4gICAgICBjb25zdCBoaXN0b3J5ID0gZ2V0T2xkU2VhcmNoZXMoY29udGV4dCk7XG4gICAgICBjb25zdCBkcm9wTGF5ZXJzID0gWy4uLnN0b3BMYXllcnNdO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnJvdXRlTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5sb2NhdGlvbkxheWVycyk7XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ucGFya2luZ0xheWVycyk7XG5cbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChmaWx0ZXJPbGRTZWFyY2hlcyhoaXN0b3J5LCBpbnB1dCwgZHJvcExheWVycykpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHNlYXJjaFJlc3VsdHNQcm9taXNlID0gUHJvbWlzZS5hbGwoc2VhcmNoQ29tcG9uZW50cylcbiAgICAudGhlbihmbGF0dGVuKVxuICAgIC50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgc2VhcmNoZXMucmVzdWx0cyA9IHJlc3VsdHM7XG4gICAgfSlcbiAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgIHNlYXJjaGVzLmVycm9yID0gZXJyO1xuICAgIH0pO1xuICBzZWFyY2hSZXN1bHRzUHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICBjYWxsYmFjayh7XG4gICAgICAuLi5zZWFyY2hlcyxcbiAgICAgIHJlc3VsdHM6IHNvcnRTZWFyY2hSZXN1bHRzKGxpbmVSZWdleHAsIHNlYXJjaGVzLnJlc3VsdHMsIGlucHV0KSxcbiAgICB9KTtcbiAgfSk7XG59XG5cbmNvbnN0IGRlYm91bmNlZFNlYXJjaCA9IGRlYm91bmNlKGdldFNlYXJjaFJlc3VsdHMsIDMwMCwge1xuICBsZWFkaW5nOiB0cnVlLFxufSk7XG5cbmV4cG9ydCBjb25zdCBleGVjdXRlU2VhcmNoID0gKFxuICB0YXJnZXRzLFxuICBzb3VyY2VzLFxuICB0cmFuc3BvcnRNb2RlLFxuICBzZWFyY2hDb250ZXh0LFxuICBmaWx0ZXJSZXN1bHRzLFxuICBnZW9jb2RpbmdTaXplLFxuICBkYXRhLFxuICBjYWxsYmFjayxcbiAgcGF0aE9wdHMsXG4gIHJlZlBvaW50LFxuKSA9PiB7XG4gIGNhbGxiYWNrKG51bGwpOyAvLyBUaGlzIG1lYW5zICd3ZSBhcmUgc2VhcmNoaW5nJ1xuICBkZWJvdW5jZWRTZWFyY2goXG4gICAgdGFyZ2V0cyxcbiAgICBzb3VyY2VzLFxuICAgIHRyYW5zcG9ydE1vZGUsXG4gICAgc2VhcmNoQ29udGV4dCxcbiAgICBmaWx0ZXJSZXN1bHRzLFxuICAgIGdlb2NvZGluZ1NpemUsXG4gICAgZGF0YSxcbiAgICBjYWxsYmFjayxcbiAgICBwYXRoT3B0cyxcbiAgICByZWZQb2ludCxcbiAgKTtcbn07XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHNlcmlhbGl6ZSBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtc2VyaWFsaXplJztcbi8qKlxuICogIFJldHVybiBQcm9taXNlIGZvciBhIHVybCBqc29uIGdldCByZXF1ZXN0XG4gKlxuICogQG5hbWUgZ2V0SnNvblxuICogQHBhcmFtIHtTdHJpbmd9IHVybFxuICogQHBhcmFtIHtBcnJheX0gcGFyYW1zXG4gKiBAcmV0dXJucyB7T2JqZWN0fSByZXNwb25zZVxuICogQGV4YW1wbGVcbiAqIGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLmdldEpzb24ocGFyYW0xLCBwYXJhbTIpO1xuICogLy89cmVzcG9uc2VcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRKc29uKHVybCwgcGFyYW1zKSB7XG4gIHJldHVybiBheGlvc1xuICAgIC5nZXQoXG4gICAgICBlbmNvZGVVUkkodXJsKSArXG4gICAgICAgIChwYXJhbXNcbiAgICAgICAgICA/ICh1cmwuc2VhcmNoKC9cXD8vKSA9PT0gLTEgPyAnPycgOiAnJicpICsgc2VyaWFsaXplKHBhcmFtcylcbiAgICAgICAgICA6ICcnKSxcbiAgICAgIHtcbiAgICAgICAgdGltZW91dDogMTAwMDAsXG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG5cbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIEFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICApXG4gICAgLnRoZW4ocmVzID0+IHtcbiAgICAgIHJldHVybiByZXMuZGF0YTtcbiAgICB9KTtcbn1cbiIsImltcG9ydCB7IGNyZWF0ZUluc3RhbmNlIH0gZnJvbSAnaTE4bmV4dCc7XG5pbXBvcnQgdHJhbnNsYXRpb25zIGZyb20gJy4vdHJhbnNsYXRpb25zJztcblxuY29uc3QgaTE4biA9IGNyZWF0ZUluc3RhbmNlKHtcbiAgZmFsbGJhY2tMbmc6ICdmaScsXG4gIC8vIGRlYnVnOiB0cnVlLFxuICByZXNvdXJjZXM6IHRyYW5zbGF0aW9ucyxcbiAgZGVmYXVsdE5TOiAndHJhbnNsYXRpb24nLFxuICByZWFjdDoge1xuICAgIHVzZVN1c3BlbnNlOiB0cnVlLFxuICB9LFxufSk7XG5cbmkxOG4uaW5pdCgpO1xuXG5leHBvcnQgZGVmYXVsdCBpMThuO1xuIiwiY29uc3QgdHJhbnNsYXRpb25zID0ge1xuICBkZToge1xuICAgIHRyYW5zbGF0aW9uOiB7XG4gICAgICBhZGRyZXNzOiAnQWRyZXNzZScsXG4gICAgICAnYWRkcmVzcy1wbGFjZS1vci1idXNpbmVzcyc6ICdBZHJlc3MsIE9ydCBvciBHZXNjaMOkZnQnLFxuICAgICAgJ2FkZC12aWEtYnV0dG9uLWxhYmVsJzogJ0bDvGdlIFp3aXNjaGVuemllbCBoaW56dScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwnOlxuICAgICAgICAnU2V0IHN0b3AgZHVyYXRpb24gYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtY2xvc2UnOlxuICAgICAgICAnQ2xvc2Ugc3RvcCBkdXJhdGlvbiBzZWxlY3RvciBhdCB2aWEgcG9pbnQge3tpbmRleH19JyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1vcGVuJzpcbiAgICAgICAgJ09wZW4gc3RvcCBkdXJhdGlvbiBzZWxlY3RvciBhdCB2aWEgcG9pbnQge3tpbmRleH19JyxcbiAgICAgIGFpcnBsYW5lOiAnRmx1ZycsXG4gICAgICBhcnJpdmFsOiAnQW5rdW5mdCcsXG4gICAgICBiYWNrOiAnWnVyw7xjaycsXG4gICAgICBiaWtlcmVudGFsc3RhdGlvbjogJ0xlaWhyYWQtU3RhdGlvbicsXG4gICAgICBidXM6ICdCdXMnLFxuICAgICAgY2FuY2VsOiAnQWJicmVjaGVuJyxcbiAgICAgICdjbGVhci1idXR0b24tbGFiZWwnOiAnTMO2c2NoZW4nLFxuICAgICAgJ2NsZWFyLXNlYXJjaC1oaXN0b3J5JzogJ1N1Y2hoaXN0b3JpZSBsw7ZzY2hlbicsXG4gICAgICBjdXJyZW50cG9zaXRpb246ICdBa3R1ZWxsZSBQb3NpdGlvbicsXG4gICAgICBkZWxldGU6ICdMw7ZzY2hlbicsXG4gICAgICAnZGVsZXRlLW9sZC1zZWFyY2hlcy1oZWFkZXInOiAnV29sbGVuIFNpZSBkaWUgU3VjaC1IaXN0b3JpZSBsw7ZzY2hlbj8nLFxuICAgICAgZGVwYXJ0dXJlOiAnQWJmYWhydCcsXG4gICAgICBkZXN0aW5hdGlvbjogJ1ppZWwnLFxuICAgICAgJ2dpdmUtb3JpZ2luJzogJ1N0YXJ0IGVpbmdlYmVuLicsXG4gICAgICAnZ2l2ZS1kZXN0aW5hdGlvbic6ICdaaWVsIGVpbmdlYmVuLicsXG4gICAgICBmYXZvdXJpdGU6ICdGYXZvcml0ZW4nLFxuICAgICAgZmVycnk6ICdGw6RocmUnLFxuICAgICAgJ2Z1dHVyZS1yb3V0ZSc6ICdadWvDvG5mdGlnZSBWZXJiaW5kdW5nJyxcbiAgICAgIG9yaWdpbjogJ1N0YXJ0JyxcbiAgICAgICdvcmlnaW4tc3RvcC1uZWFyLXlvdSc6ICdTdGFydCcsXG4gICAgICBvd25sb2NhdGlvbnM6ICdFaWdlbmUgRmF2b3JpdGVuJyxcbiAgICAgIGxvYWRpbmc6ICdMYWRlbi4uLicsXG4gICAgICAnbWludXRlLXNob3J0JzogJ21pbicsXG4gICAgICByYWlsOiAnWnVnJyxcbiAgICAgIHNlYXJjaDogJ1N1Y2hlJyxcbiAgICAgICdzZWFyY2gtYWRkcmVzcy1vci1wbGFjZSc6ICdTdWNoZSBhbmhhbmQgdm9uIEFkcmVzc2Ugb2RlciBPcnRzYW5nYWJlJyxcbiAgICAgICdzZWFyY2gtYnV0dG9uLWxhYmVsJzogJ1N1Y2hlJyxcbiAgICAgICdzZWFyY2gtZGVzdGluYXRpb24nOiAnU3VjaGUgWmllbG9ydCwgTGluaWUgb3IgSGFsdGVzdGVsbGUnLFxuICAgICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1pbmRleCc6ICdaaWVsb3J0IGVpbmdlYmVuJyxcbiAgICAgICdzZWFyY2gtZGVzdGluYXRpb24tcmVzdWx0cy1idXQtbm8tc2VhcmNoJzpcbiAgICAgICAgJ0VyZ2Vibmlzc2UgaW4g4oCcWmllbG9ydOKAnS1SZWl0ZXIgYW56ZWlnZW4nLFxuICAgICAgJ3NlYXJjaC1uby1yZXN1bHRzJzogJ0tlaW4gT3J0IGdlZnVuZGVuLicsXG4gICAgICAnc2VhcmNoLW9yaWdpbic6ICdTdWNoZSBTdGFydG9ydCwgTGluaWUgb2RlciBIYWx0ZXN0ZWxsZScsXG4gICAgICAnc2VhcmNoLW9yaWdpbi1pbmRleCc6ICdTdGFydG9ydCBlaW5nZWJlbicsXG4gICAgICAnc2VhcmNoLXBvc2l0aW9uJzogJ1N0YW5kb3J0IGVybWl0dGVsbicsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsJzogJ1ZlbnVlLCBwbGFjZSBhbmQgc3RvcHNlYXJjaC4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtZGVza3RvcCc6XG4gICAgICAgICdOYXZpZ2F0ZSBsaXN0IHdpdGggYXJyb3cga2V5cyBhbmQgc2VsZWN0IHdpdGggZW50ZXIga2V5LicsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1tb2JpbGUnOlxuICAgICAgICAnRW50ZXIgdGhlIGxvY2F0aW9uIGFuZCBuYXZpZ2F0ZSBpbiB0aGUgbGlzdCBieSBzd2lwaW5nLicsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLW1vdmUtdG8tZGVzdGluYXRpb24nOlxuICAgICAgICAnQWZ0ZXIgc2VsZWN0aW5nIHRoZSBzdGFydGluZyBsb2NhdGlvbiB5b3UgYXJlIGF1dG9tYXRpY2FsbHkgbW92ZWQgdG8gdGhlIGRlc3RpbmF0aW9uIGZpZWxkLicsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbic6ICdUaGVyZSBpcyB7e2NvdW50fX0gc3VnZ2VzdGlvbiBhdmFpbGFibGUnLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW5fcGx1cmFsJzpcbiAgICAgICAgJ1RoZXJlIGFyZSB7e2NvdW50fX0gc3VnZ2VzdGlvbnMgYXZhaWxhYmxlJyxcbiAgICAgICdzZWFyY2gtY3VycmVudC1zdWdnZXN0aW9uJzogJ0FrdHVlbGxlIEF1c3dhaGw6IHt7c2VsZWN0aW9ufX0nLFxuICAgICAgc3RyZWV0OiAnU3RyYcOfZScsXG4gICAgICBzdWJ3YXk6ICdVLUJhaG4nLFxuICAgICAgc3RhdGlvbjogJ1N0YXRpb24nLFxuICAgICAgc3RvcDogJ0hhbHRlc3RlbGxlJyxcbiAgICAgICdzdG9wLW5lYXIteW91JzogJ1N1Y2hlIEhhbHRlc3RlbGxlbiB1bmQgTGluaWVuIGluIGRlciBOw6RoZScsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1idXMnOiAnU3VjaGUgQnVzbGluaWVuIG9yIEhhbHRlc3RlbGxlbicsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1jaXR5YmlrZSc6ICdTdWNoZSBMZWlocmFkLVN0YXRpb25lbicsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1yYWlsJzogJ1N1Y2hlIFp1Z3ZlcmJpbmR1bmdlbiBvZGVyIEJhaG5ow7ZmZScsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1zdWJ3YXknOiAnU3VjaGUgVS1CYWhuLUxpbmllbiBvZGVyIEhhbHRlc3RlbGxlbicsXG4gICAgICAnc3RvcC1uZWFyLXlvdS10cmFtJzogJ1N1Y2hlIFN0YWR0YmFobi1IYWx0ZXN0ZWxsZW4tU3VjaGUnLFxuICAgICAgJ3RvZGF5LWF0JzogJ0hldXRlIHVtJyxcbiAgICAgICd0b21vcnJvdy1hdCc6ICdNb3JnZW4gdW0nLFxuICAgICAgdHJhbTogJ1N0cmHDn2VuYmFobicsXG4gICAgICAndXNlLW93bi1wb3NpdGlvbic6ICdCZW51dHplIGFrdHVlbGxlbiBTdGFuZG9ydCcsXG4gICAgICAnc2VsZWN0LWZyb20tbWFwJzogJ1fDpGhsZSBQb3NpdGlvbiBhbmhhbmQgS2FydGUnLFxuICAgICAgJ3NlbGVjdC1mcm9tLW93bi1sb2NhdGlvbnMnOiAnQXVzIGVpZ2VuZW4gRmF2b3JpdGVuIGF1c3fDpGhsZW4nLFxuICAgICAgdmVudWU6ICdWZW51ZScsXG4gICAgICAndmlhLXBvaW50JzogJ1p3aXNjaGVuemllbCcsXG4gICAgICB3aGVyZTogJ1dvaGluPycsXG4gICAgICBwbGFjZTogJ09ydCcsXG4gICAgfSxcbiAgfSxcbiAgZW46IHtcbiAgICB0cmFuc2xhdGlvbjoge1xuICAgICAgYWRkcmVzczogJ0FkZHJlc3MnLFxuICAgICAgJ2FkZHJlc3MtcGxhY2Utb3ItYnVzaW5lc3MnOiAnQWRkcmVzcywgcGxhY2Ugb3IgYnVzaW5lc3MnLFxuICAgICAgJ2FkZC12aWEtYnV0dG9uLWxhYmVsJzogJ0FkZCB2aWEgcG9pbnQnLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsJzpcbiAgICAgICAgJ1NldCBzdG9wIGR1cmF0aW9uIGF0IHZpYSBwb2ludCB7e2luZGV4fX0nLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLWNsb3NlJzpcbiAgICAgICAgJ0Nsb3NlIHN0b3AgZHVyYXRpb24gc2VsZWN0b3IgYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtb3Blbic6XG4gICAgICAgICdPcGVuIHN0b3AgZHVyYXRpb24gc2VsZWN0b3IgYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgICBhaXJwbGFuZTogJ0ZsaWdodCcsXG4gICAgICBhcnJpdmFsOiAnQXJyaXZhbCcsXG4gICAgICBiYWNrOiAnQmFjaycsXG4gICAgICBiaWtlcGFyazogJ1BhcmsgJiBSaWRlIGZvciBiaWtlcycsXG4gICAgICBiaWtlcmVudGFsc3RhdGlvbjogJ0Jpa2Ugc3RhdGlvbicsXG4gICAgICBidXM6ICdidXMnLFxuICAgICAgY2FuY2VsOiAnQ2FuY2VsJyxcbiAgICAgIGNhcnBhcms6ICdQYXJrICYgUmlkZScsXG4gICAgICAnY2xlYXItYnV0dG9uLWxhYmVsJzogJ0NsZWFyJyxcbiAgICAgICdjbGVhci1zZWFyY2gtaGlzdG9yeSc6ICdDbGVhciBzZWFyY2ggaGlzdG9yeScsXG4gICAgICBjdXJyZW50cG9zaXRpb246ICdDdXJyZW50IHBvc2l0aW9uJyxcbiAgICAgIGRlbGV0ZTogJ0RlbGV0ZScsXG4gICAgICAnZGVsZXRlLW9sZC1zZWFyY2hlcy1oZWFkZXInOiAnRG8geW91IHdhbnQgdG8gY2xlYXIgdGhlIHNlYXJjaCBoaXN0b3J5PycsXG4gICAgICBkZXBhcnR1cmU6ICdEZXBhcnR1cmUnLFxuICAgICAgZGVzdGluYXRpb246ICdEZXN0aW5hdGlvbicsXG4gICAgICAnZ2l2ZS1vcmlnaW4nOiAnRW50ZXIgeW91ciBvcmlnaW4uJyxcbiAgICAgICdnaXZlLWRlc3RpbmF0aW9uJzogJ0VudGVyIHlvdXIgZGVzdGluYXRpb24nLFxuICAgICAgZmF2b3VyaXRlOiAnRmF2b3VyaXRlJyxcbiAgICAgIGZlcnJ5OiAnRmVycnknLFxuICAgICAgJ2Z1dHVyZS1yb3V0ZSc6ICdGdXR1cmUgcm91dGUnLFxuICAgICAgb3JpZ2luOiAnU3RhcnQnLFxuICAgICAgJ29yaWdpbi1zdG9wLW5lYXIteW91JzogJ1N0YXJ0JyxcbiAgICAgIG93bmxvY2F0aW9uczogJ093biBsb2NhdGlvbnMnLFxuICAgICAgbG9hZGluZzogJ0xvYWRpbmcuLi4nLFxuICAgICAgJ21pbnV0ZS1zaG9ydCc6ICdtJyxcbiAgICAgIHBsYXRmb3JtOiAnUGxhdGZvcm0nLFxuICAgICAgcmFpbDogJ1RyYWluJyxcbiAgICAgIHJlcXVpcmVkOiAncmVxdWlyZWQgZmllbGQnLFxuICAgICAgc2VhcmNoOiAnU2VhcmNoJyxcbiAgICAgICdzZWFyY2gtYWRkcmVzcy1vci1wbGFjZSc6ICdTZWFyY2ggYnkgYWRkcmVzcyBvciBwbGFjZSBuYW1lJyxcbiAgICAgICdzZWFyY2gtYnV0dG9uLWxhYmVsJzogJ1NlYXJjaCcsXG4gICAgICAnc2VhcmNoLWRlc3RpbmF0aW9uJzogJ1NlYXJjaCBkZXN0aW5hdGlvbiwgcm91dGUgb3Igc3RvcCcsXG4gICAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLWluZGV4JzogJ0VudGVyIGRlc3RpbmF0aW9uJyxcbiAgICAgICdzZWFyY2gtZGVzdGluYXRpb24tcmVzdWx0cy1idXQtbm8tc2VhcmNoJzpcbiAgICAgICAgJ1ZpZXcgcmVzdWx0cyBpbiB0aGUgYWRqYWNlbnQg4oCcRGVzdGluYXRpb27igJ0gdGFiJyxcbiAgICAgICdzZWFyY2gtbm8tcmVzdWx0cyc6ICdObyBsb2NhdGlvbicsXG4gICAgICAnc2VhcmNoLW9yaWdpbic6ICdTZWFyY2ggb3JpZ2luLCByb3V0ZSBvciBzdG9wJyxcbiAgICAgICdzZWFyY2gtb3JpZ2luLWluZGV4JzogJ0VudGVyIG9yaWdpbicsXG4gICAgICAnc2VhcmNoLXBvc2l0aW9uJzogJ0RldGVjdCBsb2NhdGlvbicsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsJzogJ1ZlbnVlLCBwbGFjZSBhbmQgc3RvcHNlYXJjaC4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtZGVza3RvcCc6XG4gICAgICAgICdOYXZpZ2F0ZSBsaXN0IHdpdGggYXJyb3cga2V5cyBhbmQgc2VsZWN0IHdpdGggZW50ZXIga2V5LicsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1tb2JpbGUnOlxuICAgICAgICAnRW50ZXIgdGhlIGxvY2F0aW9uIGFuZCBuYXZpZ2F0ZSBpbiB0aGUgbGlzdCBieSBzd2lwaW5nLicsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLW1vdmUtdG8tZGVzdGluYXRpb24nOlxuICAgICAgICAnQWZ0ZXIgc2VsZWN0aW5nIHRoZSBzdGFydGluZyBsb2NhdGlvbiB5b3UgYXJlIGF1dG9tYXRpY2FsbHkgbW92ZWQgdG8gdGhlIGRlc3RpbmF0aW9uIGZpZWxkLicsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbic6ICdUaGVyZSBpcyB7e2NvdW50fX0gc3VnZ2VzdGlvbiBhdmFpbGFibGUnLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW5fcGx1cmFsJzpcbiAgICAgICAgJ1RoZXJlIGFyZSB7e2NvdW50fX0gc3VnZ2VzdGlvbnMgYXZhaWxhYmxlJyxcbiAgICAgICdzZWFyY2gtY3VycmVudC1zdWdnZXN0aW9uJzogJ0N1cnJlbnQgc2VsZWN0aW9uOiB7e3NlbGVjdGlvbn19JyxcbiAgICAgIHN0cmVldDogJ1N0cmVldCcsXG4gICAgICBzdWJ3YXk6ICdNZXRybycsXG4gICAgICBzdGF0aW9uOiAnU3RhdGlvbicsXG4gICAgICBzdG9wOiAnU3RvcCcsXG4gICAgICAnc3RvcC1uZWFyLXlvdSc6ICdTZWFyY2ggc3RvcHMgYW5kIHJvdXRlcycsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1haXJwbGFuZSc6ICdTZWFyY2ggZmxpZ2h0cyBvciBhaXJwb3J0cycsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1iaWtlcGFyayc6ICdTZWFyY2ggYmlrZSBwYXJrcycsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1idXMnOiAnU2VhcmNoIGJ1cyByb3V0ZXMgb3Igc3RvcHMnLFxuICAgICAgJ3N0b3AtbmVhci15b3UtY2FycGFyayc6ICdTZWFyY2ggY2FyIHBhcmtzJyxcbiAgICAgICdzdG9wLW5lYXIteW91LWNpdHliaWtlJzogJ1NlYXJjaCBjaXR5IGJpa2Ugc3RhdGlvbnMnLFxuICAgICAgJ3N0b3AtbmVhci15b3UtcmFpbCc6ICdTZWFyY2ggdHJhaW4gcm91dGVzIG9yIHN0YXRpb25zJyxcbiAgICAgICdzdG9wLW5lYXIteW91LXN1YndheSc6ICdTZWFyY2ggbWV0cm8gcm91dGVzIG9yIHN0YXRpb25zICcsXG4gICAgICAnc3RvcC1uZWFyLXlvdS10cmFtJzogJ1NlYXJjaCB0cmFtIHJvdXRlcyBvciBzdG9wcycsXG4gICAgICAnc3RvcC1yb3V0ZS1zdGF0aW9uJzogJ0J1cyBhbmQgc3RvcCBzZWFyY2gnLFxuICAgICAgJ3RvZGF5LWF0JzogJ3RvZGF5IGF0JyxcbiAgICAgICd0b21vcnJvdy1hdCc6ICd0b21vcnJvdyBhdCcsXG4gICAgICB0cmFtOiAnVHJhbScsXG4gICAgICB0cmFjazogJ1RyYWNrJyxcbiAgICAgICd1c2Utb3duLXBvc2l0aW9uJzogJ1VzZSBjdXJyZW50IGxvY2F0aW9uJyxcbiAgICAgICdzZWxlY3QtZnJvbS1tYXAnOiAnU2VsZWN0IHBvc2l0aW9uIGZyb20gbWFwJyxcbiAgICAgICdzZWxlY3QtZnJvbS1vd24tbG9jYXRpb25zJzogJ1NlbGVjdCBmcm9tIG93biBsb2NhdGlvbnMnLFxuICAgICAgdmVudWU6ICdWZW51ZScsXG4gICAgICAndmlhLXBvaW50JzogJ1ZpYSBwb2ludCcsXG4gICAgICB3aGVyZTogJ1doZXJlIHRvPycsXG4gICAgICBwbGFjZTogJ0xvY2F0aW9uJyxcbiAgICB9LFxuICB9LFxuICBmaToge1xuICAgIHRyYW5zbGF0aW9uOiB7XG4gICAgICBhZGRyZXNzOiAnT3NvaXRlJyxcbiAgICAgICdhZGRyZXNzLXBsYWNlLW9yLWJ1c2luZXNzJzogJ09zb2l0ZSwgcGFpa2thIHRhaSB5cml0eXMnLFxuICAgICAgJ2FkZC12aWEtYnV0dG9uLWxhYmVsJzogJ0xpc8Okw6QgdsOkbGlwaXN0ZScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwnOlxuICAgICAgICAnQXNldGEgdsOkbGlwaXN0ZWVsbGUge3tpbmRleH19IHB5c8OkaGR5a3NlbiBrZXN0bycsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtY2xvc2UnOlxuICAgICAgICAnQXZhYSB2w6RsaXBpc3RlZW4ge3tpbmRleH19IHB5c8OkaGR5a3NlbiBrZXN0byB2YWxpdHNpbicsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtb3Blbic6XG4gICAgICAgICdTdWxqZSB2w6RsaXBpc3RlZW4ge3tpbmRleH19IHB5c8OkaGR5a3NlbiBrZXN0byB2YWxpdHNpbicsXG4gICAgICBhaXJwbGFuZTogJ0xlbnRva29uZScsXG4gICAgICBhcnJpdmFsOiAnUGVyaWxsw6QnLFxuICAgICAgYmFjazogJ1Rha2Fpc2luJyxcbiAgICAgIHZlaGljbGVyZW50YWxzdGF0aW9uOiAnUHnDtnLDpGFzZW1hJyxcbiAgICAgIGJpa2VwYXJrOiAnTGlpdHludMOkcHlzw6Rrw7ZpbnRpJyxcbiAgICAgIGJ1czogJ2J1c3NpJyxcbiAgICAgIGNhbmNlbDogJ1BlcnV1dGEnLFxuICAgICAgY2FycGFyazogJ0xpaXR5bnTDpHB5c8Oka8O2aW50aScsXG4gICAgICAnY2xlYXItYnV0dG9uLWxhYmVsJzogJ1R5aGplbm7DpCcsXG4gICAgICAnY2xlYXItc2VhcmNoLWhpc3RvcnknOiAnVHloamVubsOkIGhha3VoaXN0b3JpYScsXG4gICAgICBjdXJyZW50cG9zaXRpb246ICdUw6Rtw6RuaGV0a2luZW4gc2lqYWludGknLFxuICAgICAgZGVsZXRlOiAnUG9pc3RhJyxcbiAgICAgICdkZWxldGUtb2xkLXNlYXJjaGVzLWhlYWRlcic6ICdIYWx1YXRrbyB0eWhqZW50w6TDpCBoYWt1aGlzdG9yaWFuPycsXG4gICAgICBkZXBhcnR1cmU6ICdMw6RodMO2YWlrYScsXG4gICAgICBkZXN0aW5hdGlvbjogJ03DpMOkcsOkbnDDpMOkJyxcbiAgICAgIGZhdm91cml0ZTogJ1N1b3Npa2tpJyxcbiAgICAgIGZlcnJ5OiAnTGF1dHRhJyxcbiAgICAgICdmdXR1cmUtcm91dGUnOiAnVHVsZXZhIHJlaXR0aScsXG4gICAgICAnZ2l2ZS1vcmlnaW4nOiAnTMOkaHTDtnBhaWtrYScsXG4gICAgICAnZ2l2ZS1kZXN0aW5hdGlvbic6ICdNw6TDpHLDpG5ww6TDpCcsXG4gICAgICBvcmlnaW46ICdMw6RodMO2cGFpa2thJyxcbiAgICAgICdvcmlnaW4tc3RvcC1uZWFyLXlvdSc6ICdMw6RodMO2cGFpa2thJyxcbiAgICAgIG93bmxvY2F0aW9uczogJ09tYXQgcGFpa2F0JyxcbiAgICAgIGxvYWRpbmc6ICdMYWRhdGFhbi4uLicsXG4gICAgICAnbWludXRlLXNob3J0JzogJ21pbicsXG4gICAgICBwbGF0Zm9ybTogJ0xhaXR1cmknLFxuICAgICAgcmFpbDogJ0p1bmEnLFxuICAgICAgcmVxdWlyZWQ6ICdwYWtvbGxpbmVuIGtlbnR0w6QnLFxuICAgICAgc2VhcmNoOiAnRXRzaScsXG4gICAgICAnc2VhcmNoLWFkZHJlc3Mtb3ItcGxhY2UnOiAnSGFlIG9zb2l0dGVlbGxhIHRhaSBwYWlrYW4gbmltZWxsw6QnLFxuICAgICAgJ3NlYXJjaC1idXR0b24tbGFiZWwnOiAnSGFlJyxcbiAgICAgICdzZWFyY2gtZGVzdGluYXRpb24nOiAnSGFlIG3DpMOkcsOkbnDDpMOkdMOkLCBsaW5qYWEgdGFpIHB5c8Oka2tpw6QnLFxuICAgICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1pbmRleCc6ICdTecO2dMOkIG3DpMOkcsOkbnDDpMOkJyxcbiAgICAgICdzZWFyY2gtZGVzdGluYXRpb24tcmVzdWx0cy1idXQtbm8tc2VhcmNoJzpcbiAgICAgICAgJ0thdHNvIHR1bG9rc2V0IHZpZXJlaXNlbHTDpCBNw6TDpHLDpG5ww6TDpC12w6RsaWxlaGRlbHTDpCcsXG4gICAgICAnc2VhcmNoLW5vLXJlc3VsdHMnOiAnRWkgdHVsb2tzaWEnLFxuICAgICAgJ3NlYXJjaC1vcmlnaW4nOiAnSGFlIGzDpGh0w7ZwYWlra2FhLCBsaW5qYWEgdGFpIHB5c8Oka2tpw6QnLFxuICAgICAgJ3NlYXJjaC1vcmlnaW4taW5kZXgnOiAnU3nDtnTDpCBsw6RodMO2cGFpa2thJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwnOiAnUGFpa2thLCBsaW5qYSBqYSBweXPDpGtraWhha3UuJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLWRlc2t0b3AnOlxuICAgICAgICAnTmF2aWdvaSBsaXN0YXNzYSBudW9saW7DpHBww6RpbWlsbMOkIGphIHZhbGl0c2UgZW50ZXJpbGzDpC4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtbW9iaWxlJzpcbiAgICAgICAgJ1N5w7Z0w6Qgc2lqYWludGkgamEgbmF2aWdvaSBsaXN0YXNzYSBweXloa8OkaXNlbcOkbGzDpC4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1tb3ZlLXRvLWRlc3RpbmF0aW9uJzpcbiAgICAgICAgJ1ZhbGl0dHVhc2kgbMOkaHTDtnBhaWthbiBzaWlycnl0w6TDpG4gc3VvcmFhbiBtw6TDpHLDpG5ww6TDpC1rZW50dMOkw6RuLicsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbic6ICcgTMO2eWRldHRpaW4ge3tjb3VudH19IGVoZG90dXMnLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW5fcGx1cmFsJzogJyBMw7Z5ZGV0dGlpbiB7e2NvdW50fX0gZWhkb3R1c3RhJyxcbiAgICAgICdzZWFyY2gtY3VycmVudC1zdWdnZXN0aW9uJzogJ1TDpG3DpG5oZXRraW5lbiB2YWxpbnRhOiB7e3NlbGVjdGlvbn19JyxcbiAgICAgICdzZWFyY2gtcG9zaXRpb24nOiAnUGFpa2FubmEnLFxuICAgICAgc3RyZWV0OiAnS2F0dScsXG4gICAgICBzdWJ3YXk6ICdNZXRybycsXG4gICAgICBzdGF0aW9uOiAnQXNlbWEnLFxuICAgICAgc3RvcDogJ1B5c8Oka2tpJyxcbiAgICAgICdzdG9wLW5lYXIteW91JzogJ0xpbmphLCBweXPDpGtraSB0YWkgYXNlbWEnLFxuICAgICAgJ3N0b3AtbmVhci15b3UtYWlycGxhbmUnOiAnSGFlIGxlbnRvamEgdGFpIGxlbnRvYXNlbWFhJyxcbiAgICAgICdzdG9wLW5lYXIteW91LWJpa2VwYXJrJzogJ0hhZSBwecO2csOkcGFya2tpYScsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1idXMnOiAnSGFlIGJ1c3NpbGluamFhIHRhaSBweXPDpGtracOkJyxcbiAgICAgICdzdG9wLW5lYXIteW91LWNhcnBhcmsnOiAnSGFlIGF1dG9wYXJra2lhJyxcbiAgICAgICdzdG9wLW5lYXIteW91LWNpdHliaWtlJzogJ0hhZSBrYXVwdW5raXB5w7Zyw6Rhc2VtYWEnLFxuICAgICAgJ3N0b3AtbmVhci15b3UtcmFpbCc6ICdIYWUgbMOkaGlqdW5hYSB0YWkgYXNlbWFhJyxcbiAgICAgICdzdG9wLW5lYXIteW91LXN1YndheSc6ICdIYWUgbWV0cm9saW5qYWEgdGFpIGFzZW1hYScsXG4gICAgICAnc3RvcC1uZWFyLXlvdS10cmFtJzogJ0hhZSByYWl0aW9saW5qYWEgdGFpIHB5c8Oka2tpw6QnLFxuICAgICAgJ3N0b3Atcm91dGUtc3RhdGlvbic6ICdMaW5qYS0gamEgcHlzw6Rra2loYWt1JyxcbiAgICAgICd0b2RheS1hdCc6ICd0w6Ruw6TDpG4ga2xvJyxcbiAgICAgICd0b21vcnJvdy1hdCc6ICdodW9tZW5uYSBrbG8nLFxuICAgICAgdHJhbTogJ1JhaXRpb3ZhdW51JyxcbiAgICAgIHRyYWNrOiAnUmFpZGUnLFxuICAgICAgJ3VzZS1vd24tcG9zaXRpb24nOiAnS8OkeXTDpCBueWt5aXN0w6Qgc2lqYWludGlhJyxcbiAgICAgICdzZWxlY3QtZnJvbS1tYXAnOiAnVmFsaXRzZSBzaWphaW50aSBrYXJ0YWx0YScsXG4gICAgICAnc2VsZWN0LWZyb20tb3duLWxvY2F0aW9ucyc6ICdWYWxpdHNlIG9taXN0YSBwYWlrb2lzdGEnLFxuICAgICAgdmVudWU6ICdQYWlra2EnLFxuICAgICAgJ3ZpYS1wb2ludCc6ICdWw6RsaXBpc3RlJyxcbiAgICAgIHdoZXJlOiAnTWlubmUgbWVubsOkw6RuPycsXG4gICAgICBwbGFjZTogJ1BhaWtrYScsXG4gICAgfSxcbiAgfSxcbiAgcGw6IHtcbiAgICB0cmFuc2xhdGlvbjoge1xuICAgICAgYWRkcmVzczogJ0FkcmVzJyxcbiAgICAgICdhZGRyZXNzLXBsYWNlLW9yLWJ1c2luZXNzJzogJ0FkcmVzLCBtaWVqc2NlIGx1YiBmaXJtYScsXG4gICAgICAnYWRkLXZpYS1idXR0b24tbGFiZWwnOiAnRG9kYWogcHVua3QgcG/Fm3JlZG5pJyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbCc6XG4gICAgICAgICdXeWJpZXJ6IGN6YXMgcG9zdG9qdSBkbGEgcHVua3R1IHt7aW5kZXh9fScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtY2xvc2UnOlxuICAgICAgICAnWmFta25paiB3eWJvcm5payBjemFzdSBwb3N0b2p1IHcgcHVua2NpZSB7e2luZGV4fX0nLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLW9wZW4nOlxuICAgICAgICAnT3R3w7NyeiB3eWJvcm5payBjemFzdSBwb3N0b2p1IHcgcHVua2NpZSB7e2luZGV4fX0nLFxuICAgICAgYWlycGxhbmU6ICdMb3QnLFxuICAgICAgYXJyaXZhbDogJ1ByenlqYXpkJyxcbiAgICAgIGJhY2s6ICdXcsOzxIcnLFxuICAgICAgYmlrZXBhcms6ICdQYXJrdWogaSBKZWTFuiBkbGEgcm93ZXLDs3cnLFxuICAgICAgYmlrZXJlbnRhbHN0YXRpb246ICdTdGFjamEgcm93ZXJvd2EnLFxuICAgICAgYnVzOiAnYXV0b2J1cycsXG4gICAgICBjYW5jZWw6ICdBbnVsdWonLFxuICAgICAgY2FycGFyazogJ1Bhcmt1aiBpIEplZMW6JyxcbiAgICAgICdjbGVhci1idXR0b24tbGFiZWwnOiAnV3ljennFm8SHJyxcbiAgICAgICdjbGVhci1zZWFyY2gtaGlzdG9yeSc6ICdXeWN6ecWbxIcgaGlzdG9yacSZIHd5c3p1a2l3YW5pYScsXG4gICAgICBjdXJyZW50cG9zaXRpb246ICdPYmVjbmUgcG/Fgm/FvGVuaWUnLFxuICAgICAgZGVsZXRlOiAnVXN1xYQnLFxuICAgICAgJ2RlbGV0ZS1vbGQtc2VhcmNoZXMtaGVhZGVyJzpcbiAgICAgICAgJ0N6eSBuYSBwZXdubyBjaGNlc3ogd3ljennFm2NpxIcgaGlzdG9yacSZIHd5c3p1a2l3YW5pYT8nLFxuICAgICAgZGVwYXJ0dXJlOiAnT2RqYXpkJyxcbiAgICAgIGRlc3RpbmF0aW9uOiAnQ2VsJyxcbiAgICAgICdnaXZlLW9yaWdpbic6ICdXcHJvd2Fkxbogc3fDs2ogcHVua3QgcG9jesSFdGtvd3kuJyxcbiAgICAgICdnaXZlLWRlc3RpbmF0aW9uJzogJ1dwcm93YWTFuiBzd8OzaiBjZWwnLFxuICAgICAgZmF2b3VyaXRlOiAnVWx1YmlvbmUnLFxuICAgICAgZmVycnk6ICdQcm9tJyxcbiAgICAgICdmdXR1cmUtcm91dGUnOiAnUHJ6eXN6xYJhIHRyYXNhJyxcbiAgICAgIG9yaWdpbjogJ1BvY3rEhXRlaycsXG4gICAgICAnb3JpZ2luLXN0b3AtbmVhci15b3UnOiAnUG9jesSFdGVrJyxcbiAgICAgIG93bmxvY2F0aW9uczogJ1fFgmFzbmUgbWllanNjYScsXG4gICAgICBsb2FkaW5nOiAnxYFhZG93YW5pZeKApicsXG4gICAgICAnbWludXRlLXNob3J0JzogJ21pbi4nLFxuICAgICAgcGxhdGZvcm06ICdQZXJvbicsXG4gICAgICByYWlsOiAnUG9jacSFZycsXG4gICAgICByZXF1aXJlZDogJ3d5bWFnYW5lIHBvbGUnLFxuICAgICAgc2VhcmNoOiAnU3p1a2FqJyxcbiAgICAgICdzZWFyY2gtYWRkcmVzcy1vci1wbGFjZSc6ICdTenVrYWogcG8gYWRyZXNpZSBsdWIgbmF6d2llIG1pZWpzY2EnLFxuICAgICAgJ3NlYXJjaC1idXR0b24tbGFiZWwnOiAnU3p1a2FqJyxcbiAgICAgICdzZWFyY2gtZGVzdGluYXRpb24nOiAnU3p1a2FqIGNlbHUsIHRyYXN5IGx1YiBwcnp5c3Rhbmt1JyxcbiAgICAgICdzZWFyY2gtZGVzdGluYXRpb24taW5kZXgnOiAnV3Byb3dhZMW6IHB1bmt0IGRvY2Vsb3d5JyxcbiAgICAgICdzZWFyY2gtZGVzdGluYXRpb24tcmVzdWx0cy1idXQtbm8tc2VhcmNoJzpcbiAgICAgICAgJ1d5xZt3aWV0bCB3eW5pa2kgdyBzxIVzaWVkbmllaiBrYXJjaWUg4oCeQ2Vs4oCdJyxcbiAgICAgICdzZWFyY2gtbm8tcmVzdWx0cyc6ICdCcmFrIGxva2FsaXphY2ppJyxcbiAgICAgICdzZWFyY2gtb3JpZ2luJzogJ1d5c3p1a2FqIHBvY3rEhXRlaywga29uaWVjIGx1YiBwdW5rdCBwb8WbcmVkbmknLFxuICAgICAgJ3NlYXJjaC1vcmlnaW4taW5kZXgnOiAnV3Byb3dhZMW6IHB1bmt0IHBvY3rEhXRrb3d5JyxcbiAgICAgICdzZWFyY2gtcG9zaXRpb24nOiAnV3lrcnlqIGxva2FsaXphY2rEmScsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsJzogJ01pZWpzY2UsIGxva2FsaXphY2phIGkgcHJ6eXN0YW5lay4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtZGVza3RvcCc6XG4gICAgICAgICdOYXdpZ3VqIHBvIGxpxZtjaWUgdcW8eXdhasSFYyBzdHJ6YcWCZWsgaSB3eWJpZXJhaiBrbGF3aXN6ZW0gRW50ZXIuJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLW1vYmlsZSc6XG4gICAgICAgICdXcHJvd2FkxbogbG9rYWxpemFjasSZIGkgbmF3aWd1aiBwbyBsacWbY2llIGdlc3RhbWkgcHJ6ZXN1d2FuaWEuJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtbW92ZS10by1kZXN0aW5hdGlvbic6XG4gICAgICAgICdQbyB3eWJyYW5pdSBsb2thbGl6YWNqaSBwb2N6xIV0a293ZWosIGF1dG9tYXR5Y3puaWUgcHJ6ZWpkemllc3ogZG8gcG9sYSBtaWVqc2NhIGRvY2Vsb3dlZ28uJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuJzogJ0Rvc3TEmXBuYSBqZXN0IHt7Y291bnR9fSBwcm9wb3p5Y2phJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuX2Zldyc6ICdEb3N0xJlwbmUgc8SFIHt7Y291bnR9fSBwcm9wb3p5Y2plJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuX290aGVyJzogJ0Rvc3TEmXBuZSBqZXN0IHt7Y291bnR9fSBwcm9wb3p5Y2ppJyxcbiAgICAgICdzZWFyY2gtY3VycmVudC1zdWdnZXN0aW9uJzogJ09iZWNueSB3eWLDs3I6IHt7c2VsZWN0aW9ufX0nLFxuICAgICAgc3RyZWV0OiAnVWxpY2EnLFxuICAgICAgc3Vid2F5OiAnTWV0cm8nLFxuICAgICAgc3RhdGlvbjogJ1N0YWNqYScsXG4gICAgICBzdG9wOiAnUHJ6eXN0YW5laycsXG4gICAgICAnc3RvcC1uZWFyLXlvdSc6ICdTenVrYWogcHJ6eXN0YW5rw7N3IGkgdHJhcycsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1haXJwbGFuZSc6ICdTenVrYWogbG90w7N3IGkgbG90bmlzaycsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1idXMnOiAnU3p1a2FqIHRyYXMgYXV0b2J1c293eWNoIGkgcHJ6eXN0YW5rw7N3JyxcbiAgICAgICdzdG9wLW5lYXIteW91LWNpdHliaWtlJzogJ1N6dWthaiBzdGFjamkgcm93ZXLDs3cgbWllanNraWNoJyxcbiAgICAgICdzdG9wLW5lYXIteW91LXJhaWwnOiAnU3p1a2FqIHRyYXMga29sZWpvd3ljaCBpIHByenlzdGFua8OzdycsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1zdWJ3YXknOiAnU3p1a2FqIHRyYXMgbWV0cmEgaSBwcnp5c3RhbmvDs3cgJyxcbiAgICAgICdzdG9wLW5lYXIteW91LXRyYW0nOiAnU3p1a2FqIHRyYXMgdHJhbXdham93eWNoIGkgcHJ6eXN0YW5rw7N3JyxcbiAgICAgICdzdG9wLXJvdXRlLXN0YXRpb24nOiAnV3lzenVraXdhbmllIGF1dG9idXPDs3cgaSBwcnp5c3RhbmvDs3cnLFxuICAgICAgJ3RvZGF5LWF0JzogJ2R6acWbIG8nLFxuICAgICAgJ3RvbW9ycm93LWF0JzogJ2p1dHJvIG8nLFxuICAgICAgdHJhbTogJ1RyYW13YWonLFxuICAgICAgdHJhY2s6ICdUb3InLFxuICAgICAgJ3VzZS1vd24tcG9zaXRpb24nOiAnVcW8eWogb2JlY25laiBsb2thbGl6YWNqaScsXG4gICAgICAnc2VsZWN0LWZyb20tbWFwJzogJ1d5YmllcnogbWllanNjZSBuYSBtYXBpZScsXG4gICAgICAnc2VsZWN0LWZyb20tb3duLWxvY2F0aW9ucyc6ICdXeWJpZXJ6IHogd8WCYXNueWNoIG1pZWpzYycsXG4gICAgICB2ZW51ZTogJ01pZWpzY2UnLFxuICAgICAgJ3ZpYS1wb2ludCc6ICdQcnpleiBwdW5rdCcsXG4gICAgICB3aGVyZTogJ0Rva8SFZD8nLFxuICAgICAgcGxhY2U6ICdNaWVqc2NlJyxcbiAgICB9LFxuICB9LFxuICBzdjoge1xuICAgIHRyYW5zbGF0aW9uOiB7XG4gICAgICBhZGRyZXNzOiAnQWRyZXNzJyxcbiAgICAgICdhZGRyZXNzLXBsYWNlLW9yLWJ1c2luZXNzJzogJ0FkcmVzcywgcGxhdHMgZWxsZXIgZsO2cmV0YWcnLFxuICAgICAgJ2FkZC12aWEtYnV0dG9uLWxhYmVsJzogJ0zDpGdnIHRpbGwgdmlhcHVua3QnLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsJzpcbiAgICAgICAgJ1N0w6RsbCBpbiB2YXJha3RpZ2hldCBmw7ZyIHZpYXB1bmt0ZW4ge3tpbmRleH19JyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1jbG9zZSc6XG4gICAgICAgICdTdMOkbmcgdsOkbGphcmVuIGbDtnIgdmFyYWt0aWdoZXQgdmlkIHZpYS1wdW5rdGVuIHt7aW5kZXh9fScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtb3Blbic6XG4gICAgICAgICfDlnBwbmEgdsOkbGphcmVuIGbDtnIgdmFyYWt0aWdoZXQgdmlkIHZpYS1wdW5rdGVuIHt7aW5kZXh9fScsXG4gICAgICBhaXJwbGFuZTogJ0ZseWcnLFxuICAgICAgYXJyaXZhbDogJ0FubMOkbmRlcicsXG4gICAgICBiYWNrOiAnVGlsbGJha2EnLFxuICAgICAgYmlrZXJlbnRhbHN0YXRpb246ICdTdGFkc2N5a2Vsc3RhdGlvbicsXG4gICAgICBiaWtlcGFyazogJ0Fuc2x1dG5pbmdzcGFya2VyaW5nIGbDtnIgY3lrbGFyJyxcbiAgICAgIGJ1czogJ0J1c3NpJyxcbiAgICAgIGNhbmNlbDogJ0F2YnJ5dCcsXG4gICAgICBjYXJwYXJrOiAnSW5mYXJ0c3BhcmtlcmluZycsXG4gICAgICAnY2xlYXItYnV0dG9uLWxhYmVsJzogJ1TDtm0nLFxuICAgICAgJ2NsZWFyLXNlYXJjaC1oaXN0b3J5JzogJ1TDtm0gc8O2a2hpc3RvcmlrZW4nLFxuICAgICAgY3VycmVudHBvc2l0aW9uOiAnTnV2YXJhbmRlIHBvc2l0aW9uJyxcbiAgICAgIGRlbGV0ZTogJ1RhIGJvcnQnLFxuICAgICAgJ2RlbGV0ZS1vbGQtc2VhcmNoZXMtaGVhZGVyJzogJ1ZpbGwgZHUgdMO2bW1hIHPDtmtoaXN0b3Jpa2VuPycsXG4gICAgICBkZXBhcnR1cmU6ICdBdmfDpW5nc3RpZCcsXG4gICAgICBkZXN0aW5hdGlvbjogJ0Rlc3RpbmF0aW9uJyxcbiAgICAgIGZhdm91cml0ZTogJ0Zhdm9yaXQnLFxuICAgICAgZmVycnk6ICdGw6RyamEnLFxuICAgICAgJ2Z1dHVyZS1yb3V0ZSc6ICdGcmFtdGlkYSBydXR0JyxcbiAgICAgICdnaXZlLWRlc3RpbmF0aW9uJzogJ1Nrcml2IGluIGRpbiBkZXN0aW5hdGlvbicsXG4gICAgICAnZ2l2ZS1vcmlnaW4nOiAnU2tyaXYgaW4gZGluIGF2ZsOkcmRzcGxhdHMnLFxuICAgICAgb3JpZ2luOiAnQXZmw6RyZHNwbGF0cycsXG4gICAgICAnb3JpZ2luLXN0b3AtbmVhci15b3UnOiAnQXZmw6RyZHNwbGF0cycsXG4gICAgICBvd25sb2NhdGlvbnM6ICdFZ25hIHBsYXRzZXInLFxuICAgICAgbG9hZGluZzogJ0xhZGRhci4uLicsXG4gICAgICAnbWludXRlLXNob3J0JzogJ21pbicsXG4gICAgICBwbGF0Zm9ybTogJ1BsYXR0Zm9ybScsXG4gICAgICByYWlsOiAnVMOlZycsXG4gICAgICByZXF1aXJlZDogJ29ibGlnYXRvcmlza3QgZsOkbHQnLFxuICAgICAgc2VhcmNoOiAnU8O2aycsXG4gICAgICAnc2VhcmNoLWFkZHJlc3Mtb3ItcGxhY2UnOiAnU8O2ayBtZWQgYWRyZXNzZW4gZWxsZXIgcGxhdHNlbnMgbmFtbicsXG4gICAgICAnc2VhcmNoLWJ1dHRvbi1sYWJlbCc6ICdTw7ZrJyxcbiAgICAgICdzZWFyY2gtZGVzdGluYXRpb24nOiAnU8O2ayBkZXN0aW5hdGlvbiwgbGluamUgZWxsZXIgaMOlbGxwbGF0cycsXG4gICAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLWluZGV4JzogJ1Nrcml2IGRlc3RpbmF0aW9uJyxcbiAgICAgICdzZWFyY2gtZGVzdGluYXRpb24tcmVzdWx0cy1idXQtbm8tc2VhcmNoJzpcbiAgICAgICAgJ1NlIHJlc3VsdGF0ZW4gdW5kZXIgZmxpa2VuIERlc3RpbmF0aW9uJyxcbiAgICAgICdzZWFyY2gtbm8tcmVzdWx0cyc6ICdJbmdhIHPDtmtyZXN1bHRhdCcsXG4gICAgICAnc2VhcmNoLW9yaWdpbic6ICdTw7ZrIGF2ZsOkcmRzcGxhdHMsIGxpbmplIGVsbGVyIGjDpWxscGxhdHMnLFxuICAgICAgJ3NlYXJjaC1vcmlnaW4taW5kZXgnOiAnU2tyaXYgYXZmw6RyZHNwbGF0cycsXG4gICAgICAnc2VhcmNoLXBvc2l0aW9uJzogJ1PDtmsgcG9zaXRpb24nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbCc6ICdQbGF0cywgbGluamUgb2NoIGjDpWxscGxhdHNzw7ZrbmluZy4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtZGVza3RvcCc6XG4gICAgICAgICdOYXZpZ2VyYSBsaXN0YW4gbWVkIHBpbHRhbmdlbnRlcm5hIG9jaCB2w6RsaiBtZWQgRW50ZXItdGFuZ2V0ZW4uJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLW1vYmlsZSc6XG4gICAgICAgICdBbmdlIHBsYXRzZW4gb2NoIG5hdmlnZXJhIGkgbGlzdGFuIGdlbm9tIGF0dCBzdmVwYS4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1tb3ZlLXRvLWRlc3RpbmF0aW9uJzpcbiAgICAgICAgJ0VmdGVyIGF0dCBkdSB2YWx0IGF2Z8OlbmdzcGxhdHNlbiB0YXMgZHUgZGlyZWt0IHRpbGwgRGVzdGluYXRpb24tZsOkbHRldC4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW4nOiAnSGl0dGFkZSB7e2NvdW50fX0gZsO2cnNsYWcnLFxuICAgICAgJ3NlYXJjaC1jdXJyZW50LXN1Z2dlc3Rpb24nOiAnTnV2YXJhbmRlIHZhbDoge3tzZWxlY3Rpb259fScsXG4gICAgICBzdHJlZXQ6ICdHYXRhJyxcbiAgICAgIHN1YndheTogJ01ldHJvJyxcbiAgICAgIHN0YXRpb246ICdTdGF0aW9uJyxcbiAgICAgIHN0b3A6ICdIw6VsbHBsYXRzJyxcbiAgICAgICdzdG9wLW5lYXIteW91JzogJ1PDtmsgaMOlbGxwbGF0c2VyIGVsbGVyIGxpbmplcicsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1haXJwbGFuZSc6ICdTw7ZrIGZseWcgZWxsZXIgZmx5Z3BsYXRzZXInLFxuICAgICAgJ3N0b3AtbmVhci15b3UtYmlrZXBhcmsnOiAnU8O2ayBjeWtlbHBhcmtlcmluZycsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1idXMnOiAnU8O2ayBidXNzbGluamVyIGVsbGVyIGjDpWxscGxhdHNlcicsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1jYXJwYXJrJzogJ1PDtmsgYW5zbHV0bmluZ3NwYXJrZXJpbmcnLFxuICAgICAgJ3N0b3AtbmVhci15b3UtY2l0eWJpa2UnOiAnU8O2ayBzdGFkc2N5a2Vsc3RhdGlvbmVyJyxcbiAgICAgICdzdG9wLW5lYXIteW91LXJhaWwnOiAnU8O2ayBuw6RydMOlZ2VyIGVsbGVyIHN0YXRpb25lcicsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1zdWJ3YXknOiAnU8O2ayBtZXRyb2xpbmplciBlbGxlciBzdGF0aW9uZXInLFxuICAgICAgJ3N0b3AtbmVhci15b3UtdHJhbSc6ICdTw7ZrIHNww6VydmFnbmxpbmplciBlbGxlciBow6VsbHBsYXRzZXInLFxuICAgICAgJ3N0b3Atcm91dGUtc3RhdGlvbic6ICdCdXNzIG9jaCBzdG9wcCBzw7ZrbmluZ2VuJyxcbiAgICAgICd0b2RheS1hdCc6ICdpIGRhZyBrbCcsXG4gICAgICAndG9tb3Jyb3ctYXQnOiAnaSBtb3Jnb24nLFxuICAgICAgdHJhbTogJ1Nww6VydmFnbicsXG4gICAgICB0cmFjazogJ1Nww6VyJyxcbiAgICAgICd1c2Utb3duLXBvc2l0aW9uJzogJ0FudsOkbmQgbWluIHBvc2l0aW9uJyxcbiAgICAgICdzZWxlY3QtZnJvbS1tYXAnOiAnVsOkbGogcG9zaXRpb24gZnLDpW4ga2FydGFuJyxcbiAgICAgICdzZWxlY3QtZnJvbS1vd24tbG9jYXRpb25zJzogJ1bDpGxqIGZyw6VuIGVnbmEgcGxhdHNlcicsXG4gICAgICB2ZW51ZTogJ03DtnRlc3BsYXRzJyxcbiAgICAgICd2aWEtcG9pbnQnOiAnVmlhIHB1bmt0JyxcbiAgICAgIHdoZXJlOiAnVmFydCB2aWxsIGR1IMOla2E/JyxcbiAgICAgIHBsYWNlOiAnUGxhdHMnLFxuICAgIH0sXG4gIH0sXG59O1xuXG5leHBvcnQgZGVmYXVsdCB0cmFuc2xhdGlvbnM7XG4iLCJmdW5jdGlvbiBzdHlsZUluamVjdChjc3MsIHJlZikge1xuICBpZiAoIHJlZiA9PT0gdm9pZCAwICkgcmVmID0ge307XG4gIHZhciBpbnNlcnRBdCA9IHJlZi5pbnNlcnRBdDtcblxuICBpZiAoIWNzcyB8fCB0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7IHJldHVybjsgfVxuXG4gIHZhciBoZWFkID0gZG9jdW1lbnQuaGVhZCB8fCBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdO1xuICB2YXIgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICBzdHlsZS50eXBlID0gJ3RleHQvY3NzJztcblxuICBpZiAoaW5zZXJ0QXQgPT09ICd0b3AnKSB7XG4gICAgaWYgKGhlYWQuZmlyc3RDaGlsZCkge1xuICAgICAgaGVhZC5pbnNlcnRCZWZvcmUoc3R5bGUsIGhlYWQuZmlyc3RDaGlsZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBoZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgfVxuXG4gIGlmIChzdHlsZS5zdHlsZVNoZWV0KSB7XG4gICAgc3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuICB9IGVsc2Uge1xuICAgIHN0eWxlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0eWxlSW5qZWN0O1xuIiwiaW1wb3J0IHVuaXFXaXRoIGZyb20gJ2xvZGFzaC91bmlxV2l0aCc7XG5pbXBvcnQgaXNFcXVhbCBmcm9tICdsb2Rhc2gvaXNFcXVhbCc7XG5pbXBvcnQgbWVtb2l6ZSBmcm9tICdsb2Rhc2gvbWVtb2l6ZSc7XG5pbXBvcnQgZXNjYXBlUmVnRXhwIGZyb20gJ2xvZGFzaC9lc2NhcGVSZWdFeHAnO1xuaW1wb3J0IGNsb25lRGVlcCBmcm9tICdsb2Rhc2gvY2xvbmVEZWVwJztcblxuLyoqXG4gKiBMb2NhdGlvbiBwcm9wZXJ0aWVzLlxuICogQHR5cGVkZWYge0xvY2F0aW9uUHJvcGVydGllc31cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYXllciBTdWdnZXN0aW9uIGxheWVyLlxuICogQHByb3BlcnR5IHtsYXR9IFtudW1iZXJdXG4gKiBAcHJvcGVydHkge2xvbn0gW251bWJlcl1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhZGRyZXNzIEFkZHJlc3MuXG4gKi9cblxuLyoqXG4gKiBSZXR1cm5zIGxvY2FsYWRtaW4gKGNpdHkgbmFtZSkgZm9yIHN1Z2dlc3Rpb25zXG4gKlxuICogQG5hbWUgZ2V0TG9jYWxhZG1pblxuICogQHBhcmFtIHtPYmplY3R9IHN1Z2dlc3Rpb24gc3VnZ2VzdGlvbidzIHByb3BlcnRpZXMgZnJvbSBnZW9jb2Rpbmcgb3IgYSBmYXZvdXJpdGUgc3RvcC9zdGF0aW9uLlxuICogRXhwZWN0cyBsYXN0IHBhcnQgb2YgYW4gYWRkcmVzcyAoYWZ0ZXIgJywnKSB0byBjb250YWluIHRoZSBjaXR5IG5hbWUgb2YgdGhlIHN1Z2dlc3Rpb24gbG9jYXRpb24uXG4gKiBAcmV0dXJucyB7U3RyaW5nfSAgQ2l0eSBuYW1lIG9yIGVtcHR5IHN0cmluZ1xuICovXG5jb25zdCBnZXRMb2NhbGFkbWluID0gc3VnZ2VzdGlvbiA9PlxuICBzdWdnZXN0aW9uLmxvY2FsYWRtaW4gfHxcbiAgc3VnZ2VzdGlvbi5sb2NhbGFkbWluIHx8XG4gIChzdWdnZXN0aW9uLmFkZHJlc3MgJiZcbiAgICBzdWdnZXN0aW9uLmFkZHJlc3MubGFzdEluZGV4T2YoJywnKSA8IHN1Z2dlc3Rpb24uYWRkcmVzcy5sZW5ndGggLSAyICYmXG4gICAgc3VnZ2VzdGlvbi5hZGRyZXNzLnN1YnN0cmluZyhzdWdnZXN0aW9uLmFkZHJlc3MubGFzdEluZGV4T2YoJywnKSArIDIpKSB8fFxuICAnJztcblxuZXhwb3J0IGNvbnN0IGdldFN0b3BDb2RlID0gKHsgaWQsIGNvZGUgfSkgPT4ge1xuICBpZiAoY29kZSkge1xuICAgIHJldHVybiBjb2RlO1xuICB9XG4gIGlmIChcbiAgICBpZCA9PT0gdW5kZWZpbmVkIHx8XG4gICAgdHlwZW9mIGlkLmluZGV4T2YgPT09ICd1bmRlZmluZWQnIHx8XG4gICAgaWQuaW5kZXhPZignIycpID09PSAtMVxuICApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIC8vIGlkIGZyb20gcGVsaWFzXG4gIHJldHVybiBpZC5zdWJzdHJpbmcoaWQuaW5kZXhPZignIycpICsgMSk7XG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0RmF2b3VyaXRlUGxhY2VMYWJlbCA9IChuYW1lLCBhZGRyZXNzKSA9PiBbXG4gIG5hbWUgfHwgKGFkZHJlc3MgJiYgYWRkcmVzcy5zcGxpdCgnLCcpWzBdKSxcbiAgdHlwZW9mIGFkZHJlc3MgPT09ICdzdHJpbmcnXG4gICAgPyBhZGRyZXNzLnJlcGxhY2UobmV3IFJlZ0V4cChgJHtlc2NhcGVSZWdFeHAobmFtZSl9KFsgLF18JCkrYCksICcnKVxuICAgIDogJycsXG5dO1xuXG4vKipcbiAqIEZvcm1hdCBzdWdnZXN0aW9uLXBhaXIgW25hbWUsIGFkZHJlc3NdIGJ5IGBzdWdnZXN0aW9uLmxheWVyYC5cbiAqXG4gKiBAbmFtZSBnZXROYW1lTGFiZWxcbiAqIEBwYXJhbSB7TG9jYXRpb25Qcm9wZXJ0aWVzfSBzdWdnZXN0aW9uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwbGFpbl1cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXkuPHN0cmluZz59IEZvcm1hdHRlZCBsYWJlbC5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldE5hbWVMYWJlbCA9IG1lbW9pemUoXG4gIChzdWdnZXN0aW9uLCBwbGFpbiA9IGZhbHNlKSA9PiB7XG4gICAgc3dpdGNoIChzdWdnZXN0aW9uLmxheWVyKSB7XG4gICAgICBjYXNlICdjdXJyZW50UG9zaXRpb24nOlxuICAgICAgICByZXR1cm4gW3N1Z2dlc3Rpb24ubGFiZWxJZCwgc3VnZ2VzdGlvbi5hZGRyZXNzXTtcbiAgICAgIGNhc2UgJ3NlbGVjdEZyb21NYXAnOlxuICAgICAgY2FzZSAnb3duTG9jYXRpb25zJzpcbiAgICAgIGNhc2UgJ2JhY2snOlxuICAgICAgICByZXR1cm4gW3N1Z2dlc3Rpb24ubGFiZWxJZF07XG4gICAgICBjYXNlICdmYXZvdXJpdGVQbGFjZSc6XG4gICAgICAgIHJldHVybiBmb3JtYXRGYXZvdXJpdGVQbGFjZUxhYmVsKHN1Z2dlc3Rpb24ubmFtZSwgc3VnZ2VzdGlvbi5hZGRyZXNzKTtcbiAgICAgIGNhc2UgJ2Zhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uJzpcbiAgICAgIGNhc2UgJ2Jpa2VzdGF0aW9uJzpcbiAgICAgICAgcmV0dXJuIFtzdWdnZXN0aW9uLm5hbWVdO1xuICAgICAgY2FzZSAnZmF2b3VyaXRlUm91dGUnOlxuICAgICAgY2FzZSAncm91dGUtQlVTJzpcbiAgICAgIGNhc2UgJ3JvdXRlLVRSQU0nOlxuICAgICAgY2FzZSAncm91dGUtUkFJTCc6XG4gICAgICBjYXNlICdyb3V0ZS1TVUJXQVknOlxuICAgICAgY2FzZSAncm91dGUtRkVSUlknOlxuICAgICAgY2FzZSAncm91dGUtRlVOSUNVTEFSJzpcbiAgICAgIGNhc2UgJ3JvdXRlLUFJUlBMQU5FJzpcbiAgICAgICAgcmV0dXJuICFwbGFpbiAmJiBzdWdnZXN0aW9uLnNob3J0TmFtZVxuICAgICAgICAgID8gW1xuICAgICAgICAgICAgICBzdWdnZXN0aW9uLmd0ZnNJZCxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5tb2RlLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubG9uZ05hbWUsXG4gICAgICAgICAgICBdXG4gICAgICAgICAgOiBbXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24uc2hvcnROYW1lLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLmxvbmdOYW1lLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLmFnZW5jeSA/IHN1Z2dlc3Rpb24uYWdlbmN5Lm5hbWUgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBdO1xuICAgICAgY2FzZSAndmVudWUnOlxuICAgICAgY2FzZSAnYWRkcmVzcyc6XG4gICAgICBjYXNlICdzdHJlZXQnOlxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIHN1Z2dlc3Rpb24ubmFtZSxcbiAgICAgICAgICBzdWdnZXN0aW9uLmxhYmVsLnJlcGxhY2UoXG4gICAgICAgICAgICBuZXcgUmVnRXhwKGAke2VzY2FwZVJlZ0V4cChzdWdnZXN0aW9uLm5hbWUpfSgsKT8oICk/YCksXG4gICAgICAgICAgICAnJyxcbiAgICAgICAgICApLFxuICAgICAgICBdO1xuICAgICAgY2FzZSAnZmF2b3VyaXRlU3RvcCc6XG4gICAgICBjYXNlICdzdG9wJzpcbiAgICAgICAgcmV0dXJuIHBsYWluXG4gICAgICAgICAgPyBbXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubmFtZSB8fFxuICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubGFiZWwgfHxcbiAgICAgICAgICAgICAgICAoc3VnZ2VzdGlvbi5hZGRyZXNzICYmIHN1Z2dlc3Rpb24uYWRkcmVzcy5zcGxpdCgnLCcpWzBdKSxcbiAgICAgICAgICAgICAgZ2V0TG9jYWxhZG1pbihzdWdnZXN0aW9uKSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5uYW1lLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLmlkLFxuICAgICAgICAgICAgICBnZXRTdG9wQ29kZShzdWdnZXN0aW9uKSxcbiAgICAgICAgICAgICAgZ2V0TG9jYWxhZG1pbihzdWdnZXN0aW9uKSxcbiAgICAgICAgICAgIF07XG4gICAgICBjYXNlICdmYXZvdXJpdGVTdGF0aW9uJzpcbiAgICAgIGNhc2UgJ3N0YXRpb24nOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBzdWdnZXN0aW9uLm5hbWUgfHxcbiAgICAgICAgICAgIHN1Z2dlc3Rpb24ubGFiZWwgfHxcbiAgICAgICAgICAgIChzdWdnZXN0aW9uLmFkZHJlc3MgJiYgc3VnZ2VzdGlvbi5hZGRyZXNzLnNwbGl0KCcsJylbMF0pLFxuICAgICAgICAgIGdldExvY2FsYWRtaW4oc3VnZ2VzdGlvbiksXG4gICAgICAgIF07XG4gICAgfVxuICB9LFxuICAoaXRlbSwgcGxhaW4pID0+IHtcbiAgICBjb25zdCBpID0gY2xvbmVEZWVwKGl0ZW0pO1xuICAgIGkucGxhaW4gPSBwbGFpbjtcbiAgICByZXR1cm4gaTtcbiAgfSxcbik7XG5cbi8qKlxuICogQ2hlY2tzIHRoYXQgZmVhdHVyZXMgYXJlIHVuaXF1ZSBieSBsYWJlbFxuICpcbiAqIEBuYW1lIHVuaXFCeUxhYmVsXG4gKiBAcGFyYW0ge0FycmF5fSBmZWF0dXJlcyBBcnJheSBvZiBmZWF0dXJlc1xuICogQHJldHVybnMge0FycmF5fSAgQXJyYXkgb2YgdW5pcXVlIGZlYXR1cmVzXG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwudW5pcUJ5TGFiZWwoZmVhdHVyZXMpO1xuICogLy89IEFycmF5KDIpXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVuaXFCeUxhYmVsKGZlYXR1cmVzKSB7XG4gIHJldHVybiB1bmlxV2l0aChmZWF0dXJlcywgKGZlYXQxLCBmZWF0MikgPT4ge1xuICAgIGlmIChmZWF0MS50eXBlID09PSAnRnV0dXJlUm91dGUnIHx8IGZlYXQyLnR5cGUgPT09ICdGdXR1cmVSb3V0ZScpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIGlzRXF1YWwoZ2V0TmFtZUxhYmVsKGZlYXQxLnByb3BlcnRpZXMpLCBnZXROYW1lTGFiZWwoZmVhdDIucHJvcGVydGllcykpICYmXG4gICAgICBmZWF0MS5wcm9wZXJ0aWVzLmxheWVyID09PSBmZWF0Mi5wcm9wZXJ0aWVzLmxheWVyXG4gICAgKTtcbiAgfSk7XG59XG4iLCJpbXBvcnQge1xuICBnZXROYW1lTGFiZWwsXG4gIGdldFN0b3BDb2RlLFxufSBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtdW5pcS1ieS1sYWJlbCc7XG5pbXBvcnQgeyBnZXRTdG9wTmFtZSB9IGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1oZWxwZXJzJztcbmltcG9ydCBnZXRMYWJlbCBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWxhYmVsJztcbmltcG9ydCB7IERhdGVUaW1lIH0gZnJvbSAnbHV4b24nO1xuXG5leHBvcnQgY29uc3QgaXNLZXlib2FyZFNlbGVjdGlvbkV2ZW50ID0gZXZlbnQgPT4ge1xuICBjb25zdCBzcGFjZSA9IFsxMywgJyAnLCAnU3BhY2ViYXInXTtcbiAgY29uc3QgZW50ZXIgPSBbMzIsICdFbnRlciddO1xuICBjb25zdCBrZXkgPSAoZXZlbnQgJiYgKGV2ZW50LmtleSB8fCBldmVudC53aGljaCB8fCBldmVudC5rZXlDb2RlKSkgfHwgJyc7XG5cbiAgaWYgKCFrZXkgfHwgIXNwYWNlLmNvbmNhdChlbnRlcikuaW5jbHVkZXMoa2V5KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1BPSVNlYXJjaCA9IGlkID0+XG4gIGlkID09PSAnb3JpZ2luJyB8fFxuICBpZCA9PT0gJ2Rlc3RpbmF0aW9uJyB8fFxuICBpZCA9PT0gJ3ZpYS1wb2ludCcgfHxcbiAgaWQgPT09ICdvcmlnaW4tc3RvcC1uZWFyLXlvdSc7XG5cbmV4cG9ydCBjb25zdCBnZXRQbGF0Zm9ybSA9IChhZGRlbmR1bSwgbG5nLCB0KSA9PiB7XG4gIC8vIGNoZWNrIGlmIGk4MW4gaXMgaW5pdGlhbGl6ZWRcbiAgaWYgKCF0KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoIWFkZGVuZHVtIHx8ICFhZGRlbmR1bS5HVEZTLnBsYXRmb3JtKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCB7IG1vZGVzLCBwbGF0Zm9ybSB9ID0gYWRkZW5kdW0uR1RGUztcbiAgY29uc3QgdHlwZSA9XG4gICAgbW9kZXMgJiYgbW9kZXNbMF0gPT09ICdSQUlMJyA/IHQoJ3RyYWNrJywgeyBsbmcgfSkgOiB0KCdwbGF0Zm9ybScsIHsgbG5nIH0pO1xuICByZXR1cm4gW3R5cGUsIHBsYXRmb3JtXTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdWdnZXN0aW9uQ29udGVudChpdGVtLCBsbmcsIHQpIHtcbiAgLy8gY2hlY2sgaWYgaTgxbiBpcyBpbml0aWFsaXplZFxuICBpZiAoIXQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmIChpdGVtLnR5cGUgIT09ICdGdXR1cmVSb3V0ZScpIHtcbiAgICBpZiAoaXRlbS50eXBlID09PSAnU2VsZWN0RnJvbU1hcCcpIHtcbiAgICAgIHJldHVybiBbJycsIHQoJ3NlbGVjdC1mcm9tLW1hcCcsIHsgbG5nIH0pXTtcbiAgICB9XG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gJ0N1cnJlbnRMb2NhdGlvbicpIHtcbiAgICAgIHJldHVybiBbJycsIHQoJ3VzZS1vd24tcG9zaXRpb24nLCB7IGxuZyB9KV07XG4gICAgfVxuICAgIGlmIChpdGVtLnR5cGUgPT09ICdTZWxlY3RGcm9tT3duTG9jYXRpb25zJykge1xuICAgICAgcmV0dXJuIFsnJywgdCgnc2VsZWN0LWZyb20tb3duLWxvY2F0aW9ucycsIHsgbG5nIH0pXTtcbiAgICB9XG4gICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdCAqL1xuICAgIGxldCBbbmFtZSwgbGFiZWxdID0gZ2V0TmFtZUxhYmVsKGl0ZW0ucHJvcGVydGllcywgdHJ1ZSk7XG4gICAgbGV0IHN1Z2dlc3Rpb25UeXBlO1xuICAgIGlmIChcbiAgICAgIGl0ZW0ucHJvcGVydGllcy5sYXllci50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdiaWtlcmVudGFsJykgfHxcbiAgICAgIGl0ZW0ucHJvcGVydGllcy5sYXllci50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdiaWtlc3RhdGlvbicpXG4gICAgKSB7XG4gICAgICBzdWdnZXN0aW9uVHlwZSA9IHQoJ3ZlaGljbGVyZW50YWxzdGF0aW9uJywgeyBsbmcgfSk7XG4gICAgICBjb25zdCBzdG9wQ29kZSA9IGl0ZW0ucHJvcGVydGllcy5sYWJlbElkO1xuICAgICAgcmV0dXJuIFtzdWdnZXN0aW9uVHlwZSwgbmFtZSwgdW5kZWZpbmVkLCBzdG9wQ29kZV07XG4gICAgfVxuXG4gICAgaWYgKGl0ZW0ucHJvcGVydGllcy5sYXllciA9PT0gJ2Jpa2VwYXJrJykge1xuICAgICAgc3VnZ2VzdGlvblR5cGUgPSB0KCdiaWtlcGFyaycsIHsgbG5nIH0pO1xuICAgICAgcmV0dXJuIFtzdWdnZXN0aW9uVHlwZSwgbmFtZSwgdW5kZWZpbmVkLCB1bmRlZmluZWRdO1xuICAgIH1cblxuICAgIGlmIChpdGVtLnByb3BlcnRpZXMubGF5ZXIgPT09ICdjYXJwYXJrJykge1xuICAgICAgc3VnZ2VzdGlvblR5cGUgPSB0KCdjYXJwYXJrJywgeyBsbmcgfSk7XG4gICAgICByZXR1cm4gW3N1Z2dlc3Rpb25UeXBlLCBuYW1lLCB1bmRlZmluZWQsIHVuZGVmaW5lZF07XG4gICAgfVxuXG4gICAgaWYgKGl0ZW0ucHJvcGVydGllcy5tb2RlKSB7XG4gICAgICBzdWdnZXN0aW9uVHlwZSA9IHQoXG4gICAgICAgIGl0ZW0ucHJvcGVydGllcy5tb2RlLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgnZmF2b3VyaXRlJywgJycpLFxuICAgICAgICB7IGxuZyB9LFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbGF5ZXIgPSBpdGVtLnByb3BlcnRpZXMubGF5ZXJcbiAgICAgICAgLnJlcGxhY2UoJ3JvdXRlLScsICcnKVxuICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAucmVwbGFjZSgnZmF2b3VyaXRlJywgJycpO1xuICAgICAgc3VnZ2VzdGlvblR5cGUgPSB0KGxheWVyLCB7IGxuZyB9KTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBpdGVtLnByb3BlcnRpZXMuaWQgJiZcbiAgICAgIChpdGVtLnByb3BlcnRpZXMubGF5ZXIgPT09ICdzdG9wJyB8fCBpdGVtLnByb3BlcnRpZXMubGF5ZXIgPT09ICdzdGF0aW9uJylcbiAgICApIHtcbiAgICAgIGNvbnN0IHN0b3BDb2RlID0gZ2V0U3RvcENvZGUoaXRlbS5wcm9wZXJ0aWVzKTtcbiAgICAgIGNvbnN0IG1vZGUgPSBpdGVtLnByb3BlcnRpZXMuYWRkZW5kdW0/LkdURlMubW9kZXM7XG4gICAgICBjb25zdCBwbGF0Zm9ybSA9IGdldFBsYXRmb3JtKGl0ZW0ucHJvcGVydGllcy5hZGRlbmR1bSwgbG5nLCB0KTtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHN1Z2dlc3Rpb25UeXBlLFxuICAgICAgICBnZXRTdG9wTmFtZShuYW1lLCBzdG9wQ29kZSksXG4gICAgICAgIGxhYmVsLFxuICAgICAgICBzdG9wQ29kZSxcbiAgICAgICAgbW9kZSxcbiAgICAgICAgcGxhdGZvcm0sXG4gICAgICBdO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBpdGVtLnByb3BlcnRpZXMubGF5ZXIgPT09ICdmYXZvdXJpdGVTdG9wJyB8fFxuICAgICAgaXRlbS5wcm9wZXJ0aWVzLmxheWVyID09PSAnZmF2b3VyaXRlU3RhdGlvbidcbiAgICApIHtcbiAgICAgIGNvbnN0IHsgYWRkcmVzcywgY29kZSB9ID0gaXRlbS5wcm9wZXJ0aWVzO1xuICAgICAgY29uc3Qgc3RvTmFtZSA9IGFkZHJlc3MgPyBnZXRTdG9wTmFtZShhZGRyZXNzLnNwbGl0KCcsJylbMF0sIGNvZGUpIDogbmFtZTtcbiAgICAgIGNvbnN0IHBsYXRmb3JtID0gZ2V0UGxhdGZvcm0oaXRlbS5wcm9wZXJ0aWVzLmFkZGVuZHVtLCBsbmcpO1xuICAgICAgcmV0dXJuIFtzdWdnZXN0aW9uVHlwZSwgc3RvTmFtZSwgbGFiZWwsIGNvZGUsIHVuZGVmaW5lZCwgcGxhdGZvcm1dO1xuICAgIH1cbiAgICByZXR1cm4gW3N1Z2dlc3Rpb25UeXBlLCBuYW1lLCBsYWJlbF07XG4gIH1cbiAgY29uc3QgeyBvcmlnaW4sIGRlc3RpbmF0aW9uIH0gPSBpdGVtLnByb3BlcnRpZXM7XG4gIGNvbnN0IHRhaWwxID0gb3JpZ2luLmxvY2FsaXR5ID8gYCwgJHtvcmlnaW4ubG9jYWxpdHl9IGZvb2JhcmAgOiAnJztcbiAgY29uc3QgdGFpbDIgPSBkZXN0aW5hdGlvbi5sb2NhbGl0eSA/IGAsICR7ZGVzdGluYXRpb24ubG9jYWxpdHl9YCA6ICcnO1xuICBjb25zdCBuYW1lMSA9IG9yaWdpbi5uYW1lO1xuICBjb25zdCBuYW1lMiA9IGRlc3RpbmF0aW9uLm5hbWU7XG4gIHJldHVybiBbXG4gICAgdCgnZnV0dXJlLXJvdXRlJywgeyBsbmcgfSksXG4gICAgYCR7dCgnb3JpZ2luJywgeyBsbmcgfSl9ICR7bmFtZTF9JHt0YWlsMX0gJHt0KCdkZXN0aW5hdGlvbicsIHtcbiAgICAgIGxuZyxcbiAgICB9KX0gJHtuYW1lMn0ke3RhaWwyfWAsXG4gICAgaXRlbS50cmFuc2xhdGVkVGV4dCxcbiAgXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zbGF0ZUZ1dHVyZVJvdXRlU3VnZ2VzdGlvblRpbWUoaXRlbSwgbG5nLCB0KSB7XG4gIC8vIGNoZWNrIGlmIGk4MW4gaXMgaW5pdGlhbGl6ZWRcbiAgaWYgKCF0KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCB0aW1lID0gRGF0ZVRpbWUuZnJvbVNlY29uZHMoTnVtYmVyKGl0ZW0ucHJvcGVydGllcy50aW1lKSk7XG4gIGNvbnN0IG5vdyA9IERhdGVUaW1lLm5vdygpO1xuICBsZXQgc3RyID0gaXRlbS5wcm9wZXJ0aWVzLmFycml2ZUJ5XG4gICAgPyB0KCdhcnJpdmFsJywgeyBsbmcgfSlcbiAgICA6IHQoJ2RlcGFydHVyZScsIHsgbG5nIH0pO1xuICBpZiAodGltZS5oYXNTYW1lKG5vdywgJ2RheScpKSB7XG4gICAgc3RyID0gYCR7c3RyfSAke3QoJ3RvZGF5LWF0Jyl9YDtcbiAgfSBlbHNlIGlmICh0aW1lLmhhc1NhbWUobm93LnBsdXMoeyBkYXlzOiAxIH0pLCAnZGF5JykpIHtcbiAgICBzdHIgPSBgJHtzdHJ9ICR7dCgndG9tb3Jyb3ctYXQnLCB7IGxuZyB9KX1gO1xuICB9IGVsc2Uge1xuICAgIHN0ciA9IGAke3N0cn0gJHt0aW1lLnRvRm9ybWF0KCdjY2MgZC5MLicpfWA7XG4gIH1cbiAgc3RyID0gYCR7c3RyfSAke3RpbWUudG9Gb3JtYXQoJ0hIOm1tJyl9YDtcbiAgcmV0dXJuIHN0cjtcbn1cblxuZXhwb3J0IGNvbnN0IGdldFN1Z2dlc3Rpb25WYWx1ZSA9IHN1Z2dlc3Rpb24gPT4ge1xuICBpZiAoXG4gICAgc3VnZ2VzdGlvbi50eXBlID09PSAnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycgfHxcbiAgICBzdWdnZXN0aW9uLnR5cGUgPT09ICdiYWNrJ1xuICApIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgcmV0dXJuIGdldExhYmVsKHN1Z2dlc3Rpb24ucHJvcGVydGllcyk7XG59O1xuXG5leHBvcnQgY29uc3Qgc3VnZ2VzdGlvbkFzQXJpYUNvbnRlbnQgPSAoeyBzdWdnZXN0aW9ucywgdCwgbG5nIH0pID0+IHtcbiAgbGV0IGxhYmVsID0gW107XG4gIGNvbnN0IGZpcnN0U3VnZ2VzdGlvbiA9IHN1Z2dlc3Rpb25zWzBdO1xuICBpZiAoZmlyc3RTdWdnZXN0aW9uKSB7XG4gICAgaWYgKGZpcnN0U3VnZ2VzdGlvbi50eXBlICYmIGZpcnN0U3VnZ2VzdGlvbi50eXBlLmluY2x1ZGVzKCdGYXZvdXJpdGUnKSkge1xuICAgICAgbGFiZWwucHVzaCh0KCdmYXZvdXJpdGUnLCB7IGxuZyB9KSk7XG4gICAgfVxuICAgIGxhYmVsID0gbGFiZWwuY29uY2F0KGdldFN1Z2dlc3Rpb25Db250ZW50KHN1Z2dlc3Rpb25zWzBdLCBsbmcpKTtcbiAgfVxuICByZXR1cm4gWy4uLm5ldyBTZXQobGFiZWwpXS5qb2luKCcgLSAnKTtcbn07XG4iLCJpbXBvcnQgeyBnZXROYW1lTGFiZWwgfSBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtdW5pcS1ieS1sYWJlbCc7XG4vKipcbiAqIFJldHVybnMgbGFiZWwgZm9yIHByb3BlcnRpZXNcbiAqXG4gKiBAbmFtZSBnZXRMYWJlbFxuICogQHBhcmFtIHsqfSBwcm9wZXJ0aWVzIG9iamVjdFxuICogQHJldHVybnMge0Jvb2xlYW59IHRydWUvZmFsc2VcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0TGFiZWwocHJvcGVydGllcykge1xuICBjb25zdCBwYXJ0cyA9IGdldE5hbWVMYWJlbChwcm9wZXJ0aWVzLCB0cnVlKTtcbiAgc3dpdGNoIChwcm9wZXJ0aWVzLmxheWVyKSB7XG4gICAgY2FzZSAnc2VsZWN0RnJvbU1hcCc6XG4gICAgY2FzZSAnY3VycmVudFBvc2l0aW9uJzpcbiAgICBjYXNlICdvd25Mb2NhdGlvbnMnOlxuICAgIGNhc2UgJ2JhY2snOlxuICAgICAgcmV0dXJuIHBhcnRzWzFdIHx8IHBhcnRzWzBdO1xuICAgIGNhc2UgJ2Zhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uJzpcbiAgICBjYXNlICdmYXZvdXJpdGVQbGFjZSc6XG4gICAgICByZXR1cm4gcGFydHNbMF07XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBwYXJ0cy5sZW5ndGggPiAxICYmIHBhcnRzWzFdICE9PSAnJ1xuICAgICAgICA/IHBhcnRzLmpvaW4oJywgJylcbiAgICAgICAgOiBwYXJ0c1sxXSB8fCBwYXJ0c1swXTtcbiAgfVxufVxuIiwiLyohIEZvciBsaWNlbnNlIGluZm9ybWF0aW9uIHBsZWFzZSBzZWUgaW5kZXguanMuTElDRU5TRS50eHQgKi9cbiFmdW5jdGlvbihlLHQpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcIm9iamVjdFwiPT10eXBlb2YgbW9kdWxlKW1vZHVsZS5leHBvcnRzPXQocmVxdWlyZShcInJlYWN0XCIpKTtlbHNlIGlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZClkZWZpbmUoW1wicmVhY3RcIl0sdCk7ZWxzZXt2YXIgbj1cIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cz90KHJlcXVpcmUoXCJyZWFjdFwiKSk6dChlLnJlYWN0KTtmb3IodmFyIG8gaW4gbikoXCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHM/ZXhwb3J0czplKVtvXT1uW29dfX0oXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjp0aGlzLChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD17ODg4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgbyxyO3I9dm9pZCAwIT09bi5nP24uZzpcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp0aGlzLG89ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oZSl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHQ9e2lnbm9yZTpcIltkYXRhLXNjcm9sbC1pZ25vcmVdXCIsaGVhZGVyOm51bGwsdG9wT25FbXB0eUhhc2g6ITAsc3BlZWQ6NTAwLHNwZWVkQXNEdXJhdGlvbjohMSxkdXJhdGlvbk1heDpudWxsLGR1cmF0aW9uTWluOm51bGwsY2xpcDohMCxvZmZzZXQ6MCxlYXNpbmc6XCJlYXNlSW5PdXRDdWJpY1wiLGN1c3RvbUVhc2luZzpudWxsLHVwZGF0ZVVSTDohMCxwb3BzdGF0ZTohMCxlbWl0RXZlbnRzOiEwfSxuPWZ1bmN0aW9uKCl7dmFyIGU9e307cmV0dXJuIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoYXJndW1lbnRzLChmdW5jdGlvbih0KXtmb3IodmFyIG4gaW4gdCl7aWYoIXQuaGFzT3duUHJvcGVydHkobikpcmV0dXJuO2Vbbl09dFtuXX19KSksZX0sbz1mdW5jdGlvbihlKXtcIiNcIj09PWUuY2hhckF0KDApJiYoZT1lLnN1YnN0cigxKSk7Zm9yKHZhciB0LG49U3RyaW5nKGUpLG89bi5sZW5ndGgscj0tMSx1PVwiXCIsaT1uLmNoYXJDb2RlQXQoMCk7KytyPG87KXtpZigwPT09KHQ9bi5jaGFyQ29kZUF0KHIpKSl0aHJvdyBuZXcgSW52YWxpZENoYXJhY3RlckVycm9yKFwiSW52YWxpZCBjaGFyYWN0ZXI6IHRoZSBpbnB1dCBjb250YWlucyBVKzAwMDAuXCIpO3UrPXQ+PTEmJnQ8PTMxfHwxMjc9PXR8fDA9PT1yJiZ0Pj00OCYmdDw9NTd8fDE9PT1yJiZ0Pj00OCYmdDw9NTcmJjQ1PT09aT9cIlxcXFxcIit0LnRvU3RyaW5nKDE2KStcIiBcIjp0Pj0xMjh8fDQ1PT09dHx8OTU9PT10fHx0Pj00OCYmdDw9NTd8fHQ+PTY1JiZ0PD05MHx8dD49OTcmJnQ8PTEyMj9uLmNoYXJBdChyKTpcIlxcXFxcIituLmNoYXJBdChyKX1yZXR1cm5cIiNcIit1fSxyPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgubWF4KGRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0LGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxIZWlnaHQsZG9jdW1lbnQuYm9keS5vZmZzZXRIZWlnaHQsZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm9mZnNldEhlaWdodCxkb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodCxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KX0sdT1mdW5jdGlvbih0KXtyZXR1cm4gdD8obj10LHBhcnNlSW50KGUuZ2V0Q29tcHV0ZWRTdHlsZShuKS5oZWlnaHQsMTApK3Qub2Zmc2V0VG9wKTowO3ZhciBufSxpPWZ1bmN0aW9uKHQsbixvKXswPT09dCYmZG9jdW1lbnQuYm9keS5mb2N1cygpLG98fCh0LmZvY3VzKCksZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PXQmJih0LnNldEF0dHJpYnV0ZShcInRhYmluZGV4XCIsXCItMVwiKSx0LmZvY3VzKCksdC5zdHlsZS5vdXRsaW5lPVwibm9uZVwiKSxlLnNjcm9sbFRvKDAsbikpfSxzPWZ1bmN0aW9uKHQsbixvLHIpe2lmKG4uZW1pdEV2ZW50cyYmXCJmdW5jdGlvblwiPT10eXBlb2YgZS5DdXN0b21FdmVudCl7dmFyIHU9bmV3IEN1c3RvbUV2ZW50KHQse2J1YmJsZXM6ITAsZGV0YWlsOnthbmNob3I6byx0b2dnbGU6cn19KTtkb2N1bWVudC5kaXNwYXRjaEV2ZW50KHUpfX07cmV0dXJuIGZ1bmN0aW9uKGMsYSl7dmFyIGwsZixkLHYscD17Y2FuY2VsU2Nyb2xsOmZ1bmN0aW9uKGUpe2NhbmNlbEFuaW1hdGlvbkZyYW1lKHYpLHY9bnVsbCxlfHxzKFwic2Nyb2xsQ2FuY2VsXCIsbCl9LGFuaW1hdGVTY3JvbGw6ZnVuY3Rpb24obyxjLGEpe3AuY2FuY2VsU2Nyb2xsKCk7dmFyIGY9bihsfHx0LGF8fHt9KSxoPVwiW29iamVjdCBOdW1iZXJdXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobyksbT1ofHwhby50YWdOYW1lP251bGw6bztpZihofHxtKXt2YXIgeT1lLnBhZ2VZT2Zmc2V0O2YuaGVhZGVyJiYhZCYmKGQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihmLmhlYWRlcikpO3ZhciBiLGcsdyxFPXUoZCksTz1oP286ZnVuY3Rpb24odCxuLG8sdSl7dmFyIGk9MDtpZih0Lm9mZnNldFBhcmVudClkb3tpKz10Lm9mZnNldFRvcCx0PXQub2Zmc2V0UGFyZW50fXdoaWxlKHQpO3JldHVybiBpPU1hdGgubWF4KGktbi1vLDApLHUmJihpPU1hdGgubWluKGkscigpLWUuaW5uZXJIZWlnaHQpKSxpfShtLEUscGFyc2VJbnQoXCJmdW5jdGlvblwiPT10eXBlb2YgZi5vZmZzZXQ/Zi5vZmZzZXQobyxjKTpmLm9mZnNldCwxMCksZi5jbGlwKSxTPU8teSxfPXIoKSxJPTAsTT1mdW5jdGlvbihlLHQpe3ZhciBuPXQuc3BlZWRBc0R1cmF0aW9uP3Quc3BlZWQ6TWF0aC5hYnMoZS8xZTMqdC5zcGVlZCk7cmV0dXJuIHQuZHVyYXRpb25NYXgmJm4+dC5kdXJhdGlvbk1heD90LmR1cmF0aW9uTWF4OnQuZHVyYXRpb25NaW4mJm48dC5kdXJhdGlvbk1pbj90LmR1cmF0aW9uTWluOnBhcnNlSW50KG4sMTApfShTLGYpLEw9ZnVuY3Rpb24odCl7Ynx8KGI9dCksSSs9dC1iLHc9eStTKmZ1bmN0aW9uKGUsdCl7dmFyIG47cmV0dXJuXCJlYXNlSW5RdWFkXCI9PT1lLmVhc2luZyYmKG49dCp0KSxcImVhc2VPdXRRdWFkXCI9PT1lLmVhc2luZyYmKG49dCooMi10KSksXCJlYXNlSW5PdXRRdWFkXCI9PT1lLmVhc2luZyYmKG49dDwuNT8yKnQqdDooNC0yKnQpKnQtMSksXCJlYXNlSW5DdWJpY1wiPT09ZS5lYXNpbmcmJihuPXQqdCp0KSxcImVhc2VPdXRDdWJpY1wiPT09ZS5lYXNpbmcmJihuPS0tdCp0KnQrMSksXCJlYXNlSW5PdXRDdWJpY1wiPT09ZS5lYXNpbmcmJihuPXQ8LjU/NCp0KnQqdDoodC0xKSooMip0LTIpKigyKnQtMikrMSksXCJlYXNlSW5RdWFydFwiPT09ZS5lYXNpbmcmJihuPXQqdCp0KnQpLFwiZWFzZU91dFF1YXJ0XCI9PT1lLmVhc2luZyYmKG49MS0gLS10KnQqdCp0KSxcImVhc2VJbk91dFF1YXJ0XCI9PT1lLmVhc2luZyYmKG49dDwuNT84KnQqdCp0KnQ6MS04Ki0tdCp0KnQqdCksXCJlYXNlSW5RdWludFwiPT09ZS5lYXNpbmcmJihuPXQqdCp0KnQqdCksXCJlYXNlT3V0UXVpbnRcIj09PWUuZWFzaW5nJiYobj0xKy0tdCp0KnQqdCp0KSxcImVhc2VJbk91dFF1aW50XCI9PT1lLmVhc2luZyYmKG49dDwuNT8xNip0KnQqdCp0KnQ6MSsxNiotLXQqdCp0KnQqdCksZS5jdXN0b21FYXNpbmcmJihuPWUuY3VzdG9tRWFzaW5nKHQpKSxufHx0fShmLGc9KGc9MD09PU0/MDpJL00pPjE/MTpnKSxlLnNjcm9sbFRvKDAsTWF0aC5mbG9vcih3KSksZnVuY3Rpb24odCxuKXt2YXIgcj1lLnBhZ2VZT2Zmc2V0O2lmKHQ9PW58fHI9PW58fCh5PG4mJmUuaW5uZXJIZWlnaHQrcik+PV8pcmV0dXJuIHAuY2FuY2VsU2Nyb2xsKCEwKSxpKG8sbixoKSxzKFwic2Nyb2xsU3RvcFwiLGYsbyxjKSxiPW51bGwsdj1udWxsLCEwfSh3LE8pfHwodj1lLnJlcXVlc3RBbmltYXRpb25GcmFtZShMKSxiPXQpfTswPT09ZS5wYWdlWU9mZnNldCYmZS5zY3JvbGxUbygwLDApLGZ1bmN0aW9uKGUsdCxuKXt0fHxoaXN0b3J5LnB1c2hTdGF0ZSYmbi51cGRhdGVVUkwmJmhpc3RvcnkucHVzaFN0YXRlKHtzbW9vdGhTY3JvbGw6SlNPTi5zdHJpbmdpZnkobiksYW5jaG9yOmUuaWR9LGRvY3VtZW50LnRpdGxlLGU9PT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ/XCIjdG9wXCI6XCIjXCIrZS5pZCl9KG8saCxmKSxcIm1hdGNoTWVkaWFcImluIGUmJmUubWF0Y2hNZWRpYShcIihwcmVmZXJzLXJlZHVjZWQtbW90aW9uKVwiKS5tYXRjaGVzP2kobyxNYXRoLmZsb29yKE8pLCExKToocyhcInNjcm9sbFN0YXJ0XCIsZixvLGMpLHAuY2FuY2VsU2Nyb2xsKCEwKSxlLnJlcXVlc3RBbmltYXRpb25GcmFtZShMKSl9fX0saD1mdW5jdGlvbih0KXtpZighdC5kZWZhdWx0UHJldmVudGVkJiYhKDAhPT10LmJ1dHRvbnx8dC5tZXRhS2V5fHx0LmN0cmxLZXl8fHQuc2hpZnRLZXkpJiZcImNsb3Nlc3RcImluIHQudGFyZ2V0JiYoZj10LnRhcmdldC5jbG9zZXN0KGMpKSYmXCJhXCI9PT1mLnRhZ05hbWUudG9Mb3dlckNhc2UoKSYmIXQudGFyZ2V0LmNsb3Nlc3QobC5pZ25vcmUpJiZmLmhvc3RuYW1lPT09ZS5sb2NhdGlvbi5ob3N0bmFtZSYmZi5wYXRobmFtZT09PWUubG9jYXRpb24ucGF0aG5hbWUmJi8jLy50ZXN0KGYuaHJlZikpe3ZhciBuLHI7dHJ5e249byhkZWNvZGVVUklDb21wb25lbnQoZi5oYXNoKSl9Y2F0Y2goZSl7bj1vKGYuaGFzaCl9aWYoXCIjXCI9PT1uKXtpZighbC50b3BPbkVtcHR5SGFzaClyZXR1cm47cj1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnR9ZWxzZSByPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Iobik7KHI9cnx8XCIjdG9wXCIhPT1uP3I6ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSYmKHQucHJldmVudERlZmF1bHQoKSxmdW5jdGlvbih0KXtpZihoaXN0b3J5LnJlcGxhY2VTdGF0ZSYmdC51cGRhdGVVUkwmJiFoaXN0b3J5LnN0YXRlKXt2YXIgbj1lLmxvY2F0aW9uLmhhc2g7bj1ufHxcIlwiLGhpc3RvcnkucmVwbGFjZVN0YXRlKHtzbW9vdGhTY3JvbGw6SlNPTi5zdHJpbmdpZnkodCksYW5jaG9yOm58fGUucGFnZVlPZmZzZXR9LGRvY3VtZW50LnRpdGxlLG58fGUubG9jYXRpb24uaHJlZil9fShsKSxwLmFuaW1hdGVTY3JvbGwocixmKSl9fSxtPWZ1bmN0aW9uKGUpe2lmKG51bGwhPT1oaXN0b3J5LnN0YXRlJiZoaXN0b3J5LnN0YXRlLnNtb290aFNjcm9sbCYmaGlzdG9yeS5zdGF0ZS5zbW9vdGhTY3JvbGw9PT1KU09OLnN0cmluZ2lmeShsKSl7dmFyIHQ9aGlzdG9yeS5zdGF0ZS5hbmNob3I7XCJzdHJpbmdcIj09dHlwZW9mIHQmJnQmJiEodD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKG8oaGlzdG9yeS5zdGF0ZS5hbmNob3IpKSl8fHAuYW5pbWF0ZVNjcm9sbCh0LG51bGwse3VwZGF0ZVVSTDohMX0pfX07cmV0dXJuIHAuZGVzdHJveT1mdW5jdGlvbigpe2wmJihkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIixoLCExKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb3BzdGF0ZVwiLG0sITEpLHAuY2FuY2VsU2Nyb2xsKCksbD1udWxsLGY9bnVsbCxkPW51bGwsdj1udWxsKX0sZnVuY3Rpb24oKXtpZighKFwicXVlcnlTZWxlY3RvclwiaW4gZG9jdW1lbnQmJlwiYWRkRXZlbnRMaXN0ZW5lclwiaW4gZSYmXCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWVcImluIGUmJlwiY2xvc2VzdFwiaW4gZS5FbGVtZW50LnByb3RvdHlwZSkpdGhyb3dcIlNtb290aCBTY3JvbGw6IFRoaXMgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSByZXF1aXJlZCBKYXZhU2NyaXB0IG1ldGhvZHMgYW5kIGJyb3dzZXIgQVBJcy5cIjtwLmRlc3Ryb3koKSxsPW4odCxhfHx7fSksZD1sLmhlYWRlcj9kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGwuaGVhZGVyKTpudWxsLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLGgsITEpLGwudXBkYXRlVVJMJiZsLnBvcHN0YXRlJiZlLmFkZEV2ZW50TGlzdGVuZXIoXCJwb3BzdGF0ZVwiLG0sITEpfSgpLHB9fShyKX0uYXBwbHkodCxbXSksdm9pZCAwPT09b3x8KGUuZXhwb3J0cz1vKX0sNDMyOmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjt2YXIgbz10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4sbyl7dm9pZCAwPT09byYmKG89biksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbyx7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KX06ZnVuY3Rpb24oZSx0LG4sbyl7dm9pZCAwPT09byYmKG89biksZVtvXT10W25dfSkscj10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxvKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSkscihuKDQ3KSx0KSxyKG4oOTI2KSx0KSxyKG4oMzQ5KSx0KSxyKG4oMTM3KSx0KSxyKG4oNzI5KSx0KSxyKG4oMzgzKSx0KSxyKG4oNDUwKSx0KSxyKG4oMzU4KSx0KSxyKG4oNzUzKSx0KSxyKG4oODY5KSx0KSxyKG4oMzUyKSx0KSxyKG4oNDQ2KSx0KSxyKG4oMTY0KSx0KSxyKG4oMzA1KSx0KSxyKG4oNTAyKSx0KX0sMzQ5OmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZUFycm93TmF2aWdhdGlvbj12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlQXJyb3dOYXZpZ2F0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PWUubGlzdEl0ZW1zLG49ZS5vbkFycm93VXBPckRvd24scj0oMCxvLnVzZVN0YXRlKSgwKSx1PXJbMF0saT1yWzFdLHM9KDAsby51c2VDYWxsYmFjaykoKGZ1bmN0aW9uKGUpe2koZSl9KSxbdF0pLGM9ZnVuY3Rpb24oZSl7dmFyIG89ZS5rZXk7aWYobnVsbD09dD92b2lkIDA6dC5sZW5ndGgpaWYoXCJBcnJvd1VwXCI9PT1vKW4mJm4oKSxlLnByZXZlbnREZWZhdWx0KCkscyh1PjA/dS0xOnQubGVuZ3RoLTEpO2Vsc2V7aWYoXCJBcnJvd0Rvd25cIiE9PW8pcmV0dXJuO24mJm4oKSxlLnByZXZlbnREZWZhdWx0KCksdTx0Lmxlbmd0aC0xP3ModSsxKTpzKDApfX07cmV0dXJuKDAsby51c2VFZmZlY3QpKChmdW5jdGlvbigpe3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIixjKSxmdW5jdGlvbigpe3JldHVybiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIixjKX19KSksKDAsby51c2VFZmZlY3QpKChmdW5jdGlvbigpe3MoMCl9KSxbdF0pLHtzZWxlY3RlZEluZGV4OnV9fX0sNDQ2OmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZURlYm91bmNlPXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VEZWJvdW5jZT1mdW5jdGlvbihlLHQpe3ZvaWQgMD09PXQmJih0PTMwMCk7dmFyIG49KDAsby51c2VTdGF0ZSkoZSkscj1uWzBdLHU9blsxXTtyZXR1cm4oMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7dmFyIG49c2V0VGltZW91dCgoZnVuY3Rpb24oKXt1KGUpfSksdCk7cmV0dXJuIGZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KG4pfX0pLFtlLHRdKSxyfX0sMTY0OmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZUVsZW1lbnRTaXplPXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VFbGVtZW50U2l6ZT1mdW5jdGlvbigpe3ZhciBlLHQsbj0oMCxvLnVzZVJlZikobnVsbCk7cmV0dXJuW24se3dpZHRoOm51bGw9PT0oZT1udWxsPT1uP3ZvaWQgMDpuLmN1cnJlbnQpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmNsaWVudFdpZHRoLGhlaWdodDpudWxsPT09KHQ9bnVsbD09bj92b2lkIDA6bi5jdXJyZW50KXx8dm9pZCAwPT09dD92b2lkIDA6dC5jbGllbnRIZWlnaHR9XX0sdC5kZWZhdWx0PXQudXNlRWxlbWVudFNpemV9LDEzNzpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VJbnRlcnNlY3Rpb25PYnNlcnZlcj12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlSW50ZXJzZWN0aW9uT2JzZXJ2ZXI9ZnVuY3Rpb24oZSl7dmFyIHQ9KDAsby51c2VSZWYpKG51bGwpLG49KDAsby51c2VTdGF0ZSkoITEpLHI9blswXSx1PW5bMV0saT1mdW5jdGlvbihlKXt2YXIgdD1lWzBdO3UodC5pc0ludGVyc2VjdGluZyl9O3JldHVybigwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXtpZih3aW5kb3cmJndpbmRvdy5JbnRlcnNlY3Rpb25PYnNlcnZlcil7dmFyIG49bmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGksZSksbz10LmN1cnJlbnQ7cmV0dXJuIHQuY3VycmVudCYmbi5vYnNlcnZlKHQuY3VycmVudCksZnVuY3Rpb24oKXtvJiZuLnVub2JzZXJ2ZShvKX19dSghMSl9KSxbdCxlXSkse2NvbnRhaW5lclJlZjp0LGlzVmlzaWJsZTpyfX0sdC5kZWZhdWx0PXQudXNlSW50ZXJzZWN0aW9uT2JzZXJ2ZXJ9LDcyOTpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VJc0JyZWFrcG9pbnQ9dm9pZCAwO3ZhciBvPW4oMTU2KSxyPW4oNDMyKSx1PXt4czoxLG1vYmlsZVNtYWxsOjMyMCxtb2JpbGU6Mzc1LHRhYmxldDo3NjgsdGFibGV0TGFyZ2U6OTIwLGRlc2t0b3BTbWFsbDoxMDI0LGRlc2t0b3A6MTI2MCxkZXNrdG9wTGFyZ2U6MTQ0MH07dC51c2VJc0JyZWFrcG9pbnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9XCJzdHJpbmdcIj09dHlwZW9mIGU/dVtlXTplLG49KDAsby51c2VTdGF0ZSkobnVsbCksaT1uWzBdLHM9blsxXSxjPSgwLG8udXNlQ2FsbGJhY2spKChmdW5jdGlvbigpe3Mod2luZG93LmlubmVyV2lkdGgpfSksW10pO3JldHVybigwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXtjKCl9KSxbXSksKDAsci51c2VPblJlc2l6ZSkoYyksaT49dH0sdC5kZWZhdWx0PXQudXNlSXNCcmVha3BvaW50fSw0NTA6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlSXNMb2FkaW5nQWZ0ZXJFcnJvcj12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlSXNMb2FkaW5nQWZ0ZXJFcnJvcj1mdW5jdGlvbihlLHQpe3ZhciBuPSgwLG8udXNlU3RhdGUpKHQpLHI9blswXSx1PW5bMV07cmV0dXJuKDAsby51c2VFZmZlY3QpKChmdW5jdGlvbigpe2V8fHUodCl9KSxbZSx0XSksZSYmcn19LDMwNTpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VJc01vYmlsZT12b2lkIDA7dmFyIG89big3MjkpO3QudXNlSXNNb2JpbGU9ZnVuY3Rpb24oKXtyZXR1cm4hKDAsby51c2VJc0JyZWFrcG9pbnQpKFwidGFibGV0XCIpfSx0LmRlZmF1bHQ9dC51c2VJc01vYmlsZX0sMzgzOmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3Q9dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3Q9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz9vLnVzZUxheW91dEVmZmVjdDpvLnVzZUVmZmVjdCx0LmRlZmF1bHQ9dC51c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0fSw3NTM6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlT25Mb3NlRm9jdXNXaXRoaW49dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZU9uTG9zZUZvY3VzV2l0aGluPWZ1bmN0aW9uKGUpe3ZhciB0PWUucmVmLG49ZS5jYWxsYmFjayxyPWUud2F0Y2g7KDAsby51c2VFZmZlY3QpKChmdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKCl7dmFyIGU7aWYocilyZXR1cm4obnVsbD09PShlPXQuY3VycmVudCl8fHZvaWQgMD09PWU/dm9pZCAwOmUubWF0Y2hlcyhcIjpmb2N1cy13aXRoaW5cIikpP3ZvaWQgMDpuKCl9O3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIixlKSxmdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIixlKX19KSxbbix0LHJdKX0sdC5kZWZhdWx0PXQudXNlT25Mb3NlRm9jdXNXaXRoaW59LDUwMjpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VPblJlc2l6ZT12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlT25SZXNpemU9ZnVuY3Rpb24oZSl7KDAsby51c2VFZmZlY3QpKChmdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKCl7ZSh3aW5kb3cuaW5uZXJXaWR0aCl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLHQse3Bhc3NpdmU6ITB9KSxmdW5jdGlvbigpe3JldHVybiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLHQpfX0pLFtdKX0sdC5kZWZhdWx0PXQudXNlT25SZXNpemV9LDM1MjpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VPbldpbmRvd0ZvY3VzPXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VPbldpbmRvd0ZvY3VzPWZ1bmN0aW9uKGUpeygwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbigpe2UmJlwidmlzaWJsZVwiPT09ZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlJiZlKCl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInZpc2liaWxpdHljaGFuZ2VcIix0LCExKSxmdW5jdGlvbigpe3JldHVybiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInZpc2liaWxpdHljaGFuZ2VcIix0KX19KSxbZV0pfX0sNDc6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlT3V0c2lkZVJlYWN0ZXI9dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZU91dHNpZGVSZWFjdGVyPWZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihuKXtlLmN1cnJlbnQmJiFlLmN1cnJlbnQuY29udGFpbnMobi50YXJnZXQpJiZ0KCl9KDAsby51c2VFZmZlY3QpKChmdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsbiksZnVuY3Rpb24oKXtkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsbil9fSkpfX0sODY5OmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZVJ1bkFmdGVyVXBkYXRlPXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VSdW5BZnRlclVwZGF0ZT1mdW5jdGlvbigpe3ZhciBlPSgwLG8udXNlUmVmKShudWxsKTtyZXR1cm4oMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7ZS5jdXJyZW50JiYoZS5jdXJyZW50KCksZS5jdXJyZW50PW51bGwpfSkpLGZ1bmN0aW9uKHQpe2UuY3VycmVudD10fX0sdC5kZWZhdWx0PXQudXNlUnVuQWZ0ZXJVcGRhdGV9LDkyNjpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VTY3JvbGxMb2NrPXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VTY3JvbGxMb2NrPWZ1bmN0aW9uKCl7cmV0dXJue2xvY2s6KDAsby51c2VDYWxsYmFjaykoKGZ1bmN0aW9uKCl7dmFyIGU9d2luZG93LnNjcm9sbFkrXCJweFwiLHQ9ZG9jdW1lbnQuYm9keTt0LnN0eWxlLnBvc2l0aW9uPVwiZml4ZWRcIix0LnN0eWxlLnRvcD1cIi1cIitlfSksW10pLHVubG9jazooMCxvLnVzZUNhbGxiYWNrKSgoZnVuY3Rpb24oKXt2YXIgZT1kb2N1bWVudC5ib2R5LHQ9ZS5zdHlsZS50b3Asbj0tMSpwYXJzZUludCh0fHxcIjBcIik7ZS5zdHlsZS5wb3NpdGlvbj1cIlwiLGUuc3R5bGUudG9wPVwiXCIsbiYmd2luZG93LnNjcm9sbFRvKDAsLTEqcGFyc2VJbnQodHx8XCIwXCIpKX0pLFtdKX19fSwzNTg6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO3ZhciBvPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlU21vb3RoU2Nyb2xsPXZvaWQgMDt2YXIgcj1uKDE1NiksdT1vKG4oODg4KSk7dC51c2VTbW9vdGhTY3JvbGw9ZnVuY3Rpb24oZSl7dmFyIHQ9KDAsci51c2VSZWYpKG51bGwpLG49ZS5yZWYsbz1lLm9mZnNldCxpPXZvaWQgMD09PW8/MDpvLHM9ZS5zcGVlZCxjPXZvaWQgMD09PXM/NTAwOnM7cmV0dXJuKDAsci51c2VFZmZlY3QpKChmdW5jdGlvbigpe3QuY3VycmVudD1uZXcgdS5kZWZhdWx0KG51bGwse3NwZWVkOmMsc3BlZWRBc0R1cmF0aW9uOiEwfSl9KSxbXSksKDAsci51c2VDYWxsYmFjaykoKGZ1bmN0aW9uKCl7biYmdC5jdXJyZW50JiZ0LmN1cnJlbnQuYW5pbWF0ZVNjcm9sbChuLmN1cnJlbnQsbnVsbCx7b2Zmc2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGl9LHVwZGF0ZVVSTDohMX0pfSksW2ksbl0pfX0sMTU2OmZ1bmN0aW9uKHQpe1widXNlIHN0cmljdFwiO3QuZXhwb3J0cz1lfX0sbj17fTtmdW5jdGlvbiBvKGUpe3ZhciByPW5bZV07aWYodm9pZCAwIT09cilyZXR1cm4gci5leHBvcnRzO3ZhciB1PW5bZV09e2V4cG9ydHM6e319O3JldHVybiB0W2VdLmNhbGwodS5leHBvcnRzLHUsdS5leHBvcnRzLG8pLHUuZXhwb3J0c31yZXR1cm4gby5nPWZ1bmN0aW9uKCl7aWYoXCJvYmplY3RcIj09dHlwZW9mIGdsb2JhbFRoaXMpcmV0dXJuIGdsb2JhbFRoaXM7dHJ5e3JldHVybiB0aGlzfHxuZXcgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpfWNhdGNoKGUpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3cpcmV0dXJuIHdpbmRvd319KCksbyg0MzIpfSgpfSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiaW1wb3J0IG9iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIi4vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZS5qc1wiO1xuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHtcbiAgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9O1xuICB2YXIgbyxcbiAgICByLFxuICAgIGkgPSBvYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpO1xuICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgIHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtcbiAgICBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIC0xID09PSB0LmluZGV4T2YobykgJiYge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pO1xuICB9XG4gIHJldHVybiBpO1xufVxuZXhwb3J0IHsgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIGFzIGRlZmF1bHQgfTsiLCJmdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7XG4gIGlmIChudWxsID09IHIpIHJldHVybiB7fTtcbiAgdmFyIHQgPSB7fTtcbiAgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkge1xuICAgIGlmICgtMSAhPT0gZS5pbmRleE9mKG4pKSBjb250aW51ZTtcbiAgICB0W25dID0gcltuXTtcbiAgfVxuICByZXR1cm4gdDtcbn1cbmV4cG9ydCB7IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgU3VnZ2VzdGlvbkl0ZW0gZnJvbSAnQGRpZ2l0cmFuc2l0LWNvbXBvbmVudC9kaWdpdHJhbnNpdC1jb21wb25lbnQtc3VnZ2VzdGlvbi1pdGVtJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0JztcbmltcG9ydCBjeCBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7XG4gIGdldFN1Z2dlc3Rpb25Db250ZW50LFxuICB0cmFuc2xhdGVGdXR1cmVSb3V0ZVN1Z2dlc3Rpb25UaW1lLFxufSBmcm9tICcuLi91dGlscy91dGlscyc7XG5cbmZ1bmN0aW9uIFN1Z2dlc3Rpb24oe1xuICBpdGVtLFxuICBsbmcsXG4gIGdldEl0ZW1Qcm9wcyxcbiAgaGlnaGxpZ2h0ZWRJbmRleCxcbiAgaXRlbUluZGV4LFxuICBzdHlsZXMsXG4gIC4uLnJlc3Rcbn0pIHtcbiAgY29uc3QgW3RdID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgY29uc3QgbmV3SXRlbSA9XG4gICAgaXRlbS50eXBlID09PSAnRnV0dXJlUm91dGUnXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgIHRyYW5zbGF0ZWRUZXh0OiB0cmFuc2xhdGVGdXR1cmVSb3V0ZVN1Z2dlc3Rpb25UaW1lKGl0ZW0sIGxuZywgdCksXG4gICAgICAgIH1cbiAgICAgIDogaXRlbTtcbiAgY29uc3QgY29udGVudCA9IGdldFN1Z2dlc3Rpb25Db250ZW50KGl0ZW0sIGxuZywgdCk7XG4gIHJldHVybiAoXG4gICAgPGxpXG4gICAgICBjbGFzc05hbWU9e2N4KFxuICAgICAgICBzdHlsZXMuc3VnZ2VzdGlvbixcbiAgICAgICAgaGlnaGxpZ2h0ZWRJbmRleCA9PT0gaXRlbUluZGV4ICYmIHN0eWxlcy5zdWdnZXN0aW9uSGlnaGxpZ2h0ZWQsXG4gICAgICApfVxuICAgICAgey4uLmdldEl0ZW1Qcm9wcyh7IGluZGV4OiBpdGVtSW5kZXggfSl9XG4gICAgPlxuICAgICAgPFN1Z2dlc3Rpb25JdGVtIGl0ZW09e25ld0l0ZW19IGNvbnRlbnQ9e2NvbnRlbnR9IGxuZz17bG5nfSB7Li4ucmVzdH0gLz5cbiAgICA8L2xpPlxuICApO1xufVxuY29uc3QgaXRlbVNoYXBlID0gUHJvcFR5cGVzLnNoYXBlKHtcbiAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgdHlwZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgYWRkcmVzczogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2VsZWN0ZWRJY29uSWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGljb25Db2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgdHJhbnNsYXRlZFRleHQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHByb3BlcnRpZXM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgbGF5ZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgbG9jYWxhZG1pbjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBtb2RlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHNvdXJjZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBhcnJvd0NsaWNrZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIGRlc3RpbmF0aW9uOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIGxvY2FsYWRtaW46IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgfSksXG4gICAgb3JpZ2luOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIGxvY2FsYWRtaW46IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgfSksXG4gIH0pLFxufSk7XG5cblN1Z2dlc3Rpb24ucHJvcFR5cGVzID0ge1xuICBpdGVtOiBpdGVtU2hhcGUuaXNSZXF1aXJlZCxcbiAgbG5nOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGdldEl0ZW1Qcm9wczogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgaGlnaGxpZ2h0ZWRJbmRleDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICBpdGVtSW5kZXg6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgc3R5bGVzOiBQcm9wVHlwZXMub2JqZWN0T2YoUHJvcFR5cGVzLnN0cmluZykuaXNSZXF1aXJlZCxcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBTdWdnZXN0aW9ucyh7XG4gIHN1Z2dlc3Rpb25zLFxuICBnZXRNZW51UHJvcHMsXG4gIGdldEl0ZW1Qcm9wcyxcbiAgbG5nLFxuICBzdHlsZXMsXG4gIGhpZGRlbixcbiAgcmVuZGVyQ2xlYXJIaXN0b3J5QnV0dG9uLFxuICBoYW5kbGVDbGVhckhpc3RvcnksXG4gIC4uLnJlc3Rcbn0pIHtcbiAgY29uc3QgW3RdID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2N4KFtcbiAgICAgICAgc3R5bGVzLnN1Z2dlc3Rpb25zQ29udGFpbmVyT3BlbixcbiAgICAgICAgc3R5bGVzLnN1Z2dlc3Rpb25zQ29udGFpbmVyLFxuICAgICAgICBoaWRkZW4gJiYgc3R5bGVzLmhpZGRlbixcbiAgICAgIF0pfVxuICAgID5cbiAgICAgIDx1bCBjbGFzc05hbWU9e3N0eWxlcy5zdWdnZXN0aW9uc0xpc3R9IHsuLi5nZXRNZW51UHJvcHMoKX0+XG4gICAgICAgIHtzdWdnZXN0aW9ucy5tYXAoKHN1Z2dlc3Rpb24sIGkpID0+IHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPFN1Z2dlc3Rpb25cbiAgICAgICAgICAgICAga2V5PXtgJHtzdWdnZXN0aW9uLnR5cGV9LSR7XG4gICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5wcm9wZXJ0aWVzLmdpZCB8fFxuICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24ucHJvcGVydGllcy5ndGZzSWQgfHxcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShzdWdnZXN0aW9uLnByb3BlcnRpZXMpXG4gICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICBnZXRJdGVtUHJvcHM9e2dldEl0ZW1Qcm9wc31cbiAgICAgICAgICAgICAgaXRlbUluZGV4PXtpfVxuICAgICAgICAgICAgICBpdGVtPXtzdWdnZXN0aW9ufVxuICAgICAgICAgICAgICBsbmc9e2xuZ31cbiAgICAgICAgICAgICAgc3R5bGVzPXtzdHlsZXN9XG4gICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApO1xuICAgICAgICB9KX1cbiAgICAgICAge3JlbmRlckNsZWFySGlzdG9yeUJ1dHRvbiAmJiAoXG4gICAgICAgICAgPGxpIHsuLi5nZXRJdGVtUHJvcHMoeyBpbmRleDogc3VnZ2VzdGlvbnMubGVuZ3RoIH0pfT5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlQ2xlYXJIaXN0b3J5fVxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ2NsZWFyLXNlYXJjaC1oaXN0b3J5J119XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt0KCdjbGVhci1zZWFyY2gtaGlzdG9yeScsIHsgbG5nIH0pfVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9saT5cbiAgICAgICAgKX1cbiAgICAgIDwvdWw+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cblN1Z2dlc3Rpb25zLnByb3BUeXBlcyA9IHtcbiAgc3VnZ2VzdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKGl0ZW1TaGFwZSkuaXNSZXF1aXJlZCxcbiAgZ2V0TWVudVByb3BzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBnZXRJdGVtUHJvcHM6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGxuZzogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBzdHlsZXM6IFByb3BUeXBlcy5vYmplY3RPZihQcm9wVHlwZXMuc3RyaW5nKS5pc1JlcXVpcmVkLFxuICBoaWRkZW46IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIHJlbmRlckNsZWFySGlzdG9yeUJ1dHRvbjogUHJvcFR5cGVzLmJvb2wsXG4gIGhhbmRsZUNsZWFySGlzdG9yeTogUHJvcFR5cGVzLmZ1bmMsXG59O1xuXG5TdWdnZXN0aW9ucy5kZWZhdWx0UHJvcHMgPSB7XG4gIHJlbmRlckNsZWFySGlzdG9yeUJ1dHRvbjogZmFsc2UsXG4gIGhhbmRsZUNsZWFySGlzdG9yeTogKCkgPT4gdW5kZWZpbmVkLFxufTtcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgSWNvbiBmcm9tICdAZGlnaXRyYW5zaXQtY29tcG9uZW50L2RpZ2l0cmFuc2l0LWNvbXBvbmVudC1pY29uJztcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG4vKipcbiAqIElucHV0IGNsZWFyIGJ1dHRvbiBlbGVtZW50XG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBDbGVhckJ1dHRvblByb3BzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gY29sb3IgLy8gaGV4IGNvbG9yIHN0cmluZ1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGxuZyAvLyBsYW5ndWFnZSwgZWcuICdmaSdcbiAqIEBwcm9wZXJ0eSB7KCkgPT4gdm9pZH0gY2xlYXJJbnB1dFxuICogQHByb3BlcnR5IHsoKSA9PiB2b2lkfSBbb25LZXlEb3duXVxuICogQHBhcmFtIHtDbGVhckJ1dHRvblByb3BzfSBwcm9wc1xuICogQHJldHVybnMge0pTWC5FbGVtZW50fVxuICovXG5leHBvcnQgY29uc3QgQ2xlYXJCdXR0b24gPSAoeyBjb2xvciwgbG5nLCBjbGVhcklucHV0LCBvbktleURvd24sIHN0eWxlcyB9KSA9PiB7XG4gIGNvbnN0IFt0XSA9IHVzZVRyYW5zbGF0aW9uKCk7XG4gIHJldHVybiAoXG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzc05hbWU9e3N0eWxlc1snY2xlYXItaW5wdXQnXX1cbiAgICAgIG9uQ2xpY2s9e2NsZWFySW5wdXR9XG4gICAgICBhcmlhLWxhYmVsPXt0KCdjbGVhci1idXR0b24tbGFiZWwnLCB7IGxuZyB9KX1cbiAgICAgIG9uS2V5RG93bj17b25LZXlEb3dufVxuICAgID5cbiAgICAgIDxJY29uIGltZz1cImNsb3NlXCIgY29sb3I9e2NvbG9yfSAvPlxuICAgIDwvYnV0dG9uPlxuICApO1xufTtcblxuQ2xlYXJCdXR0b24ucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBsbmc6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgY2xlYXJJbnB1dDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgb25LZXlEb3duOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBzdHlsZXM6IFByb3BUeXBlcy5vYmplY3RPZihQcm9wVHlwZXMuc3RyaW5nKS5pc1JlcXVpcmVkLFxufTtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VSZWYsIHVzZUxheW91dEVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY3ggZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBDbGVhckJ1dHRvbiB9IGZyb20gJy4vQ2xlYXJCdXR0b24nO1xuaW1wb3J0IHsgaXNLZXlib2FyZFNlbGVjdGlvbkV2ZW50IH0gZnJvbSAnLi4vdXRpbHMvdXRpbHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gSW5wdXQoe1xuICBpZCxcbiAgbG5nLFxuICB2YWx1ZSxcbiAgcGxhY2Vob2xkZXIsXG4gIHJlcXVpcmVkLFxuICBnZXRJbnB1dFByb3BzLFxuICBnZXRMYWJlbFByb3BzLFxuICBjbGVhcklucHV0LFxuICBhcmlhTGFiZWwsXG4gIGlucHV0UmVmLFxuICBzdHlsZXMsXG4gIHJlbmRlckxhYmVsLFxuICBpc01vYmlsZSxcbiAgaW5wdXRDbGFzc05hbWUsXG4gIHRyYW5zcG9ydE1vZGUsXG4gIGNsZWFyQnV0dG9uQ29sb3IsXG4gIGF1dG9Gb2N1cyxcbiAgaW5wdXRPbkJsdXIsXG59KSB7XG4gIGNvbnN0IGN1cnNvclJlZiA9IHVzZVJlZihudWxsKTtcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGVsID0gaW5wdXRSZWYuY3VycmVudDtcbiAgICBpZiAoZWwgJiYgY3Vyc29yUmVmLmN1cnJlbnQgIT09IG51bGwgJiYgZWwgPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgIGVsLnNldFNlbGVjdGlvblJhbmdlKGN1cnNvclJlZi5jdXJyZW50LCBjdXJzb3JSZWYuY3VycmVudCk7XG4gICAgfVxuICB9LCBbdmFsdWVdKTtcblxuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSBlID0+IHtcbiAgICBjdXJzb3JSZWYuY3VycmVudCA9IGUudGFyZ2V0LnNlbGVjdGlvblN0YXJ0O1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb250YWluZXJ9PlxuICAgICAge3JlbmRlckxhYmVsICYmIChcbiAgICAgICAgPGxhYmVsXG4gICAgICAgICAgey4uLmdldExhYmVsUHJvcHMoe1xuICAgICAgICAgICAgY2xhc3NOYW1lOiBzdHlsZXNbJ3NyLW9ubHknXSxcbiAgICAgICAgICAgIGh0bWxGb3I6IGlkLFxuICAgICAgICAgIH0pfVxuICAgICAgICA+XG4gICAgICAgICAge2FyaWFMYWJlbH1cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICl9XG4gICAgICA8aW5wdXRcbiAgICAgICAgYXJpYS1sYWJlbD17YXJpYUxhYmVsfVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganN4LWExMXkvbm8tYXV0b2ZvY3VzXG4gICAgICAgIGF1dG9Gb2N1cz17YXV0b0ZvY3VzfVxuICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICAgIHJlcXVpcmVkPXtyZXF1aXJlZH1cbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBjbGFzc05hbWU9e2N4KFxuICAgICAgICAgIHN0eWxlcy5pbnB1dCxcbiAgICAgICAgICBpc01vYmlsZSAmJiB0cmFuc3BvcnRNb2RlID8gc3R5bGVzLnRoaW4gOiAnJyxcbiAgICAgICAgICBzdHlsZXNbaWRdIHx8ICcnLFxuICAgICAgICAgIHZhbHVlID8gc3R5bGVzLmhhc1ZhbHVlIDogJycsXG4gICAgICAgICAgaW5wdXRDbGFzc05hbWUsXG4gICAgICAgICl9XG4gICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgaWQ9e2lkfVxuICAgICAgICB7Li4uZ2V0SW5wdXRQcm9wcyh7XG4gICAgICAgICAgcmVmOiBpbnB1dFJlZixcbiAgICAgICAgICBvbkJsdXI6IGlucHV0T25CbHVyLFxuICAgICAgICAgIG9uQ2hhbmdlOiBoYW5kbGVDaGFuZ2UsXG4gICAgICAgIH0pfVxuICAgICAgLz5cbiAgICAgIHt2YWx1ZSAmJiAoXG4gICAgICAgIDxDbGVhckJ1dHRvblxuICAgICAgICAgIGxuZz17bG5nfVxuICAgICAgICAgIGNsZWFySW5wdXQ9eygpID0+IGNsZWFySW5wdXQoaW5wdXRSZWYpfVxuICAgICAgICAgIHN0eWxlcz17c3R5bGVzfVxuICAgICAgICAgIGNvbG9yPXtjbGVhckJ1dHRvbkNvbG9yfVxuICAgICAgICAgIG9uS2V5RG93bj17ZSA9PiBpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQoZSkgJiYgY2xlYXJJbnB1dChpbnB1dFJlZil9XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5JbnB1dC5wcm9wVHlwZXMgPSB7XG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGxuZzogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICByZXF1aXJlZDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgdmFsdWU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgZ2V0SW5wdXRQcm9wczogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgZ2V0TGFiZWxQcm9wczogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgY2xlYXJJbnB1dDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgYXJpYUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGlucHV0UmVmOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGN1cnJlbnQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgfSkuaXNSZXF1aXJlZCxcbiAgc3R5bGVzOiBQcm9wVHlwZXMub2JqZWN0T2YoUHJvcFR5cGVzLnN0cmluZykuaXNSZXF1aXJlZCxcbiAgcmVuZGVyTGFiZWw6IFByb3BUeXBlcy5ib29sLFxuICBpc01vYmlsZTogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgaW5wdXRDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgdHJhbnNwb3J0TW9kZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgY2xlYXJCdXR0b25Db2xvcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBhdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICBpbnB1dE9uQmx1cjogUHJvcFR5cGVzLmZ1bmMsXG59O1xuXG5JbnB1dC5kZWZhdWx0UHJvcHMgPSB7XG4gIGF1dG9Gb2N1czogZmFsc2UsXG4gIHJlbmRlckxhYmVsOiBmYWxzZSxcbiAgdHJhbnNwb3J0TW9kZTogdW5kZWZpbmVkLFxuICBpbnB1dE9uQmx1cjogKCkgPT4ge30sXG59O1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJlYWN0TW9kYWwgZnJvbSAncmVhY3QtbW9kYWwnO1xuaW1wb3J0IERpYWxvZ01vZGFsIGZyb20gJ0BkaWdpdHJhbnNpdC1jb21wb25lbnQvZGlnaXRyYW5zaXQtY29tcG9uZW50LWRpYWxvZy1tb2RhbCc7XG5pbXBvcnQgSWNvbiBmcm9tICdAZGlnaXRyYW5zaXQtY29tcG9uZW50L2RpZ2l0cmFuc2l0LWNvbXBvbmVudC1pY29uJztcbmltcG9ydCBob29rcyBmcm9tICdAaHNsLWZpL2hvb2tzJztcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCc7XG5pbXBvcnQgeyB1c2VDb21ib2JveCB9IGZyb20gJ2Rvd25zaGlmdCc7XG5pbXBvcnQgbW9iaWxlU3R5bGVzIGZyb20gJy4vTW9iaWxlU2VhcmNoLnNjc3MnO1xuaW1wb3J0IG1vYmlsZU5vU2Nyb2xsU3R5bGVzIGZyb20gJy4vTW9iaWxlTm9TY3JvbGwuc2Nzcyc7XG5pbXBvcnQgeyBTdWdnZXN0aW9ucyB9IGZyb20gJy4vU3VnZ2VzdGlvbnMnO1xuaW1wb3J0IHsgSW5wdXQgfSBmcm9tICcuL0lucHV0JztcbmltcG9ydCB7XG4gIGlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudCxcbiAgZ2V0U3VnZ2VzdGlvblZhbHVlLFxuICBpc1BPSVNlYXJjaCxcbn0gZnJvbSAnLi4vdXRpbHMvdXRpbHMnO1xuXG4vKipcbiAqIEB0eXBlZGVmIEF1dG9zdWdnZXN0U3RhdGVcbiAqIEBwcm9wZXJ0eSB7YXJyYXl9IHN1Z2dlc3Rpb25zXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHJlbmRlck1vYmlsZVxuICpcbiAqIEB0eXBlZGVmIE1vYmlsZVZpZXdQcm9wc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGFwcEVsZW1lbnRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpZFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHBsYWNlaG9sZGVyXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9ufSBjbGVhcklucHV0XG4gKiBAcHJvcGVydHkge2Z1bmN0aW9ufSBvblNlbGVjdGVkSXRlbUNoYW5nZVxuICogQHByb3BlcnR5IHtvYmplY3R9IGZvbnRXZWlnaHRzXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9ufSBjbGVhck9sZFNlYXJjaGVzXG4gKiBAcHJvcGVydHkge29iamVjdH0gc3VnZ2VzdGlvblByb3BzXG4gKiBAcHJvcGVydHkge29iamVjdH0gY29sb3JzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbG5nXG4gKiBAcHJvcGVydHkge29iamVjdH0gYXJpYVByb3BzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdmFsdWVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpbnB1dENsYXNzTmFtZVxuICogQHByb3BlcnR5IHtib29sZWFufSByZXF1aXJlZFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFttb2JpbGVMYWJlbF1cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3Nob3dTY3JvbGxdXG4gKiBAcHJvcGVydHkge0F1dG9zdWdnZXN0U3RhdGV9IHN0YXRlXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9ufSBkaXNwYXRjaFxuICpcbiAqIEBwYXJhbSB7TW9iaWxlVmlld1Byb3BzfSBwcm9wc1xuICogQHJldHVybnMge0pTWC5FbGVtZW50fVxuICovXG5jb25zdCBNb2JpbGVWaWV3ID0gKHtcbiAgYXBwRWxlbWVudCxcbiAgaWQsXG4gIHBsYWNlaG9sZGVyLFxuICBjbGVhcklucHV0LFxuICBvblNlbGVjdGVkSXRlbUNoYW5nZSxcbiAgZm9udFdlaWdodHMsXG4gIGNsZWFyT2xkU2VhcmNoZXMsXG4gIHN1Z2dlc3Rpb25Qcm9wcyxcbiAgbG5nLFxuICBhcmlhUHJvcHMsXG4gIHZhbHVlLFxuICBpbnB1dENsYXNzTmFtZSxcbiAgcmVxdWlyZWQsXG4gIG1vYmlsZUxhYmVsLFxuICBzaG93U2Nyb2xsLFxuICBzdGF0ZSxcbiAgZGlzcGF0Y2gsXG4gIGNvbG9ycyxcbn0pID0+IHtcbiAgY29uc3QgW3RdID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgY29uc3QgeyBsb2NrLCB1bmxvY2sgfSA9IGhvb2tzLnVzZVNjcm9sbExvY2soKTtcbiAgY29uc3Qgc3R5bGVzID0gc2hvd1Njcm9sbCA/IG1vYmlsZVN0eWxlcyA6IG1vYmlsZU5vU2Nyb2xsU3R5bGVzO1xuICBjb25zdCBpbnB1dElkID0gYCR7aWR9LWlucHV0YDtcbiAgY29uc3QgbGFiZWxJZCA9IGAke2lkfS1sYWJlbGA7XG4gIGNvbnN0IFtpc0RpYWxvZ09wZW4sIHNldERpYWxvZ09wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBpbnB1dFJlZiA9IFJlYWN0LnVzZVJlZigpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgUmVhY3RNb2RhbC5zZXRBcHBFbGVtZW50KGFwcEVsZW1lbnQpO1xuICB9LCBbXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoc3RhdGUucmVuZGVyTW9iaWxlKSB7XG4gICAgICBsb2NrKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVubG9jaygpO1xuICAgIH1cbiAgfSwgW3N0YXRlLnJlbmRlck1vYmlsZV0pO1xuXG4gIC8qKlxuICAgKiBpbmRlcGVuZGVudCBob29rcyBpbiBtb2JpbGUgdmlldy5cbiAgICogaW5wdXRWYWx1ZSBhbmQgc3VnZ2VzdGlvbiBzdGF0ZXMgYXJlIGtlcHQgaW4gdGhlIHBhcmVudFxuICAgKi9cbiAgY29uc3Qge1xuICAgIGhpZ2hsaWdodGVkSW5kZXgsXG4gICAgZ2V0TGFiZWxQcm9wcyxcbiAgICBnZXRNZW51UHJvcHMsXG4gICAgZ2V0SW5wdXRQcm9wcyxcbiAgICBnZXRJdGVtUHJvcHMsXG4gICAgc2V0SGlnaGxpZ2h0ZWRJbmRleCxcbiAgfSA9IHVzZUNvbWJvYm94KHtcbiAgICBpdGVtczogc3RhdGUuc3VnZ2VzdGlvbnMsXG4gICAgaW5wdXRWYWx1ZTogdmFsdWUsXG4gICAgaXNPcGVuOiB0cnVlLFxuICAgIG9uU2VsZWN0ZWRJdGVtQ2hhbmdlOiBjaGFuZ2VzID0+IHtcbiAgICAgIG9uU2VsZWN0ZWRJdGVtQ2hhbmdlKGNoYW5nZXMpO1xuICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnVE9HR0xFX01FTlUnLCBpc01vYmlsZTogdHJ1ZSB9KTtcbiAgICB9LFxuICAgIGlucHV0SWQsXG4gICAgbGFiZWxJZCxcbiAgICBzZWxlY3RlZEl0ZW06IG51bGwsXG4gICAgZGVmYXVsdEhpZ2hsaWdodGVkSW5kZXg6IC0xLFxuICAgIG9uSW5wdXRWYWx1ZUNoYW5nZTogKHsgaW5wdXRWYWx1ZSB9KSA9PlxuICAgICAgc3RhdGUucmVuZGVyTW9iaWxlICYmIC8vIHByZXZlbnQgdXBkYXRpbmcgdmFsdWUgd2hlbiB0aGUgc2VhcmNoIGlzIG5vdCBvcGVuXG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdJTlBVVF9DSEFOR0UnLCB2YWx1ZTogaW5wdXRWYWx1ZSB9KSxcbiAgICBzdGF0ZVJlZHVjZXI6IChvbGRTdGF0ZSwgeyBjaGFuZ2VzLCB0eXBlIH0pID0+IHtcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIHVzZUNvbWJvYm94LnN0YXRlQ2hhbmdlVHlwZXMuSW5wdXRLZXlEb3duRXNjYXBlOiB7XG4gICAgICAgICAgc2V0SGlnaGxpZ2h0ZWRJbmRleCgtMSk7XG4gICAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnVE9HR0xFX01FTlUnLCBpc01vYmlsZTogdHJ1ZSB9KTtcbiAgICAgICAgICByZXR1cm4gb2xkU3RhdGU7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSB1c2VDb21ib2JveC5zdGF0ZUNoYW5nZVR5cGVzLklucHV0S2V5RG93bkVudGVyOlxuICAgICAgICAgIGlmIChzdGF0ZS5sb2FkaW5nKSB7XG4gICAgICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdQRU5ESU5HX0VOVEVSJywgZW50ZXJQZW5kaW5nOiB0cnVlIH0pO1xuICAgICAgICAgICAgcmV0dXJuIG9sZFN0YXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBzZWxlY3QgdGhlIGZpcnN0IGl0ZW0gaWYgbm9uZSBpcyBoaWdobGlnaHRlZFxuICAgICAgICAgIGlmIChvbGRTdGF0ZS5oaWdobGlnaHRlZEluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4uY2hhbmdlcyxcbiAgICAgICAgICAgICAgc2VsZWN0ZWRJdGVtOiBzdGF0ZS5zdWdnZXN0aW9uc1swXSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjaGFuZ2VzO1xuICAgICAgICAvLyBhbGxvd3MgdGFiYmluZyBvdXQgb2YgaW5wdXQgZmllbGQgd2l0aG91dCBjbG9zaW5nXG4gICAgICAgIGNhc2UgdXNlQ29tYm9ib3guc3RhdGVDaGFuZ2VUeXBlcy5JbnB1dEJsdXI6IHtcbiAgICAgICAgICByZXR1cm4gb2xkU3RhdGU7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gY2hhbmdlcztcbiAgICAgIH1cbiAgICB9LFxuICAgIGl0ZW1Ub1N0cmluZyhzdWdnZXN0aW9uKSB7XG4gICAgICByZXR1cm4gc3VnZ2VzdGlvbiA/IGdldFN1Z2dlc3Rpb25WYWx1ZShzdWdnZXN0aW9uKSA6ICcnO1xuICAgIH0sXG4gIH0pO1xuICAvLyBjYWxsIHRvIHN1cHByZXNzIHJlZiBlcnJvcnMgZnJvbSBkb3duc2hpZnRcbiAgZ2V0TGFiZWxQcm9wcyh7fSwgeyBzdXBwcmVzc1JlZkVycm9yOiB0cnVlIH0pO1xuICBnZXRNZW51UHJvcHMoe30sIHsgc3VwcHJlc3NSZWZFcnJvcjogdHJ1ZSB9KTtcbiAgZ2V0SW5wdXRQcm9wcyh7fSwgeyBzdXBwcmVzc1JlZkVycm9yOiB0cnVlIH0pO1xuICBnZXRJdGVtUHJvcHMoeyBpbmRleDogLTEgfSwgeyBzdXBwcmVzc1JlZkVycm9yOiB0cnVlIH0pO1xuXG4gIGNvbnN0IHsgYXJpYVJlcXVpcmVkVGV4dCwgU2VhcmNoQmFySWQsIGFyaWFDdXJyZW50U3VnZ2VzdGlvbiB9ID0gYXJpYVByb3BzO1xuICBjb25zdCBhcmlhTGFiZWwgPSBhcmlhUmVxdWlyZWRUZXh0XG4gICAgLmNvbmNhdCgnICcpXG4gICAgLmNvbmNhdChTZWFyY2hCYXJJZClcbiAgICAuY29uY2F0KCcgJylcbiAgICAuY29uY2F0KGFyaWFDdXJyZW50U3VnZ2VzdGlvbik7XG4gIHJldHVybiAoXG4gICAgPFJlYWN0TW9kYWxcbiAgICAgIGlzT3Blbj17c3RhdGUucmVuZGVyTW9iaWxlfVxuICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ21vYmlsZS1tb2RhbCddfVxuICAgICAgb3ZlcmxheUNsYXNzTmFtZT17c3R5bGVzWydtb2JpbGUtbW9kYWwtb3ZlcmxheSddfVxuICAgICAgc2hvdWxkUmV0dXJuRm9jdXNBZnRlckNsb3NlPXtmYWxzZX1cbiAgICAgIHNob3VsZENsb3NlT25Fc2NcbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17c3R5bGVzWydtb2JpbGUtbW9kYWwtY29udGVudCddfVxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICctLWNvbG9yJzogY29sb3JzLnByaW1hcnksXG4gICAgICAgICAgJy0tYWNjZXNzaWJsZS1wcmltYXJ5LWNvbG9yJzogY29sb3JzLmFjY2Vzc2libGVQcmltYXJ5LFxuICAgICAgICAgICctLWhvdmVyLWNvbG9yJzogY29sb3JzLmhvdmVyLFxuICAgICAgICAgICctLWZvbnQtd2VpZ2h0LW1lZGl1bSc6IGZvbnRXZWlnaHRzLm1lZGl1bSxcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlc1snY29tYm9ib3gtY29udGFpbmVyJ119IGh0bWxGb3I9e2lucHV0SWR9PlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ2NvbWJvYm94LWljb24nXX1cbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgc2V0SGlnaGxpZ2h0ZWRJbmRleCgtMSk7XG4gICAgICAgICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ1RPR0dMRV9NRU5VJywgaXNNb2JpbGU6IHRydWUgfSk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgb25LZXlEb3duPXtlID0+IHtcbiAgICAgICAgICAgICAgaWYgKGlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudChlKSkge1xuICAgICAgICAgICAgICAgIHNldEhpZ2hsaWdodGVkSW5kZXgoLTEpO1xuICAgICAgICAgICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ1RPR0dMRV9NRU5VJywgaXNNb2JpbGU6IHRydWUgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBhcmlhLWxhYmVsPXt0KCdjYW5jZWwnLCB7IGxuZyB9KX1cbiAgICAgICAgICAgIHRhYkluZGV4PXswfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxJY29uIGltZz1cImFycm93XCIgY29sb3I9e2NvbG9ycy5wcmltYXJ5fSAvPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzWydyaWdodC1jb2x1bW4nXX0+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlc1snY29tYm9ib3gtbGFiZWwnXX1cbiAgICAgICAgICAgICAgaWQ9e2xhYmVsSWR9XG4gICAgICAgICAgICAgIHsuLi5nZXRMYWJlbFByb3BzKCl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHttb2JpbGVMYWJlbH1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17XG4gICAgICAgICAgICAgICAgaXNQT0lTZWFyY2goaWQpXG4gICAgICAgICAgICAgICAgICA/IHQoJ2FkZHJlc3MtcGxhY2Utb3ItYnVzaW5lc3MnLCB7IGxuZyB9KVxuICAgICAgICAgICAgICAgICAgOiBwbGFjZWhvbGRlclxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlkPXtpZH1cbiAgICAgICAgICAgICAgbG5nPXtsbmd9XG4gICAgICAgICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgICAgICAgZ2V0SW5wdXRQcm9wcz17Z2V0SW5wdXRQcm9wc31cbiAgICAgICAgICAgICAgZ2V0TGFiZWxQcm9wcz17Z2V0TGFiZWxQcm9wc31cbiAgICAgICAgICAgICAgY2xlYXJJbnB1dD17KCkgPT4gY2xlYXJJbnB1dChpbnB1dFJlZil9XG4gICAgICAgICAgICAgIGFyaWFMYWJlbD17YXJpYUxhYmVsfVxuICAgICAgICAgICAgICBpbnB1dFJlZj17aW5wdXRSZWZ9XG4gICAgICAgICAgICAgIHN0eWxlcz17c3R5bGVzfVxuICAgICAgICAgICAgICByZW5kZXJMYWJlbD17ZmFsc2V9XG4gICAgICAgICAgICAgIGNsZWFyQnV0dG9uQ29sb3I9e2NvbG9ycy5wcmltYXJ5fVxuICAgICAgICAgICAgICBhdXRvRm9jdXNcbiAgICAgICAgICAgICAgaW5wdXRDbGFzc05hbWU9e2lucHV0Q2xhc3NOYW1lfVxuICAgICAgICAgICAgICByZXF1aXJlZD17cmVxdWlyZWR9XG4gICAgICAgICAgICAgIGlzTW9iaWxlXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPFN1Z2dlc3Rpb25zXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb25zPXtzdGF0ZS5zdWdnZXN0aW9uc31cbiAgICAgICAgICAgICAgZ2V0TWVudVByb3BzPXtnZXRNZW51UHJvcHN9XG4gICAgICAgICAgICAgIGdldEl0ZW1Qcm9wcz17Z2V0SXRlbVByb3BzfVxuICAgICAgICAgICAgICBoaWdobGlnaHRlZEluZGV4PXtoaWdobGlnaHRlZEluZGV4fVxuICAgICAgICAgICAgICBpc09wZW4gLy8gd2hlbiBtb2JpbGUgdmlldyBpcyBvcGVuIHdlIGFsd2F5cyB3YW50IHRvIHNob3cgc3VnZ2VzdGlvbnNcbiAgICAgICAgICAgICAgaGlkZGVuPXtmYWxzZX1cbiAgICAgICAgICAgICAgbG5nPXtsbmd9XG4gICAgICAgICAgICAgIHN0eWxlcz17c3R5bGVzfVxuICAgICAgICAgICAgICByZW5kZXJDbGVhckhpc3RvcnlCdXR0b25cbiAgICAgICAgICAgICAgaGFuZGxlQ2xlYXJIaXN0b3J5PXsoKSA9PiBzZXREaWFsb2dPcGVuKHRydWUpfVxuICAgICAgICAgICAgICB7Li4uc3VnZ2VzdGlvblByb3BzfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8RGlhbG9nTW9kYWxcbiAgICAgICAgICBhcHBFbGVtZW50PXthcHBFbGVtZW50fVxuICAgICAgICAgIGlzTW9kYWxPcGVuPXtpc0RpYWxvZ09wZW59XG4gICAgICAgICAgaGFuZGxlQ2xvc2U9eygpID0+IHNldERpYWxvZ09wZW4oZmFsc2UpfVxuICAgICAgICAgIGhlYWRlclRleHQ9e3QoJ2RlbGV0ZS1vbGQtc2VhcmNoZXMtaGVhZGVyJywgeyBsbmcgfSl9XG4gICAgICAgICAgcHJpbWFyeUJ1dHRvblRleHQ9e3QoJ2RlbGV0ZScsIHsgbG5nIH0pfVxuICAgICAgICAgIHNlY29uZGFyeUJ1dHRvblRleHQ9e3QoJ2NhbmNlbCcsIHsgbG5nIH0pfVxuICAgICAgICAgIHByaW1hcnlCdXR0b25PbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICBjbGVhck9sZFNlYXJjaGVzKCk7XG4gICAgICAgICAgICBzZXREaWFsb2dPcGVuKGZhbHNlKTtcbiAgICAgICAgICB9fVxuICAgICAgICAgIHNlY29uZGFyeUJ1dHRvbk9uQ2xpY2s9eygpID0+IHNldERpYWxvZ09wZW4oZmFsc2UpfVxuICAgICAgICAgIGNvbG9ycz17Y29sb3JzfVxuICAgICAgICAgIGZvbnRXZWlnaHRzPXtmb250V2VpZ2h0c31cbiAgICAgICAgICBsYW5nPXtsbmd9XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L1JlYWN0TW9kYWw+XG4gICk7XG59O1xuXG5Nb2JpbGVWaWV3LnByb3BUeXBlcyA9IHtcbiAgYXBwRWxlbWVudDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBpZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBjbGVhcklucHV0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBjbGVhck9sZFNlYXJjaGVzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBvblNlbGVjdGVkSXRlbUNoYW5nZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgdmFsdWU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgY29sb3JzOiBQcm9wVHlwZXMub2JqZWN0T2YoUHJvcFR5cGVzLnN0cmluZykuaXNSZXF1aXJlZCxcbiAgZm9udFdlaWdodHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgbWVkaXVtOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gIH0pLmlzUmVxdWlyZWQsXG4gIHN1Z2dlc3Rpb25Qcm9wczogUHJvcFR5cGVzLnNoYXBlKHt9KS5pc1JlcXVpcmVkLFxuICBhcmlhUHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYXJpYVJlcXVpcmVkVGV4dDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIFNlYXJjaEJhcklkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgYXJpYUN1cnJlbnRTdWdnZXN0aW9uOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIH0pLmlzUmVxdWlyZWQsXG4gIGlucHV0Q2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIG1vYmlsZUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBzaG93U2Nyb2xsOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBsbmc6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgc3RhdGU6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgc3VnZ2VzdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7fSkpLmlzUmVxdWlyZWQsXG4gICAgcmVuZGVyTW9iaWxlOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIGxvYWRpbmc6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIH0pLmlzUmVxdWlyZWQsXG4gIGRpc3BhdGNoOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgTW9iaWxlVmlldztcbiIsImV4cG9ydCBjb25zdCBzZWFyY2hSZWR1Y2VyID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgIGNhc2UgJ0lOUFVUX0NIQU5HRSc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgdmFsdWU6IGFjdGlvbi52YWx1ZSxcbiAgICAgIH07XG4gICAgY2FzZSAnRkVUQ0hfU1VHR0VTVElPTlMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGxvYWRpbmc6IGFjdGlvbi5sb2FkaW5nLFxuICAgICAgICBzdWdnZXN0aW9uczogYWN0aW9uLnN1Z2dlc3Rpb25zIHx8IHN0YXRlLnN1Z2dlc3Rpb25zLFxuICAgICAgfTtcbiAgICBjYXNlICdDTEVBUl9TVUdHRVNUSU9OUyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc3VnZ2VzdGlvbnM6IFtdLFxuICAgICAgfTtcbiAgICBjYXNlICdSRVNFVF9TT1VSQ0VTJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzb3VyY2VzOiBhY3Rpb24uc291cmNlcyxcbiAgICAgIH07XG4gICAgY2FzZSAnU0VUX1NPVVJDRVMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNob3dPd25QbGFjZXM6IGFjdGlvbi5zaG93T3duUGxhY2VzLFxuICAgICAgICBzb3VyY2VzOiBhY3Rpb24uc291cmNlcyxcbiAgICAgICAgcGVuZGluZ1NlbGVjdGlvbjogYWN0aW9uLnBlbmRpbmdTZWxlY3Rpb24sXG4gICAgICB9O1xuICAgIGNhc2UgJ0NMRUFSJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgIGlzQ2xlYXJlZDogdHJ1ZSxcbiAgICAgICAgc3VnZ2VzdGlvbnM6IFtdLFxuICAgICAgfTtcbiAgICBjYXNlICdJTlBVVF9CTFVSJzoge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHZhbHVlOiBhY3Rpb24udmFsdWUgfHwgc3RhdGUudmFsdWUsXG4gICAgICAgIGlzQ2xlYXJlZDogYWN0aW9uLmlzTW9iaWxlID8gZmFsc2UgOiBzdGF0ZS5pc0NsZWFyZWQsXG4gICAgICAgIHBlbmRpbmdTZWxlY3Rpb246IG51bGwsXG4gICAgICAgIHNob3dPd25QbGFjZXM6IGZhbHNlLFxuICAgICAgfTtcbiAgICB9XG4gICAgY2FzZSAnUkVTRVQnOiB7XG4gICAgICByZXR1cm4gYWN0aW9uLmluaXRpYWxTdGF0ZTtcbiAgICB9XG4gICAgY2FzZSAnUEVORElOR19FTlRFUic6IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBlbnRlclBlbmRpbmc6IGFjdGlvbi5lbnRlclBlbmRpbmcsXG4gICAgICB9O1xuICAgIH1cbiAgICBjYXNlICdUT0dHTEVfTUVOVSc6IHtcbiAgICAgIGlmIChhY3Rpb24uaXNNb2JpbGUpIHtcbiAgICAgICAgaWYgKCFzdGF0ZS5yZW5kZXJNb2JpbGUpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICByZW5kZXJNb2JpbGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogc3RhdGUuaXNDbGVhcmVkID8gJycgOiBzdGF0ZS52YWx1ZSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcmVuZGVyTW9iaWxlOiBmYWxzZSxcbiAgICAgICAgICBpc0NsZWFyZWQ6IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGlzTWVudU9wZW46ICFzdGF0ZS5pc01lbnVPcGVuLFxuICAgICAgICByZW5kZXJNb2JpbGU6IGFjdGlvbi5pc01vYmlsZSAmJiAhc3RhdGUucmVuZGVyTW9iaWxlLFxuICAgICAgfTtcbiAgICB9XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufTtcbiIsIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyAqL1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZUNhbGxiYWNrLCB1c2VSZWYsIHVzZVJlZHVjZXIgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBJMThuZXh0UHJvdmlkZXIsIHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCc7XG5pbXBvcnQgY3ggZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBleGVjdXRlU2VhcmNoIH0gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWV4ZWN1dGUtc2VhcmNoLWltbWlkaWF0ZSc7XG5pbXBvcnQgeyB1c2VDb21ib2JveCB9IGZyb20gJ2Rvd25zaGlmdCc7XG5pbXBvcnQgSWNvbiwge1xuICBkZWZhdWx0Q29sb3JzLFxufSBmcm9tICdAZGlnaXRyYW5zaXQtY29tcG9uZW50L2RpZ2l0cmFuc2l0LWNvbXBvbmVudC1pY29uJztcbmltcG9ydCBpMThuIGZyb20gJy4vdXRpbHMvaTE4bic7XG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vY29tcG9uZW50cy9zdHlsZXMuc2Nzcyc7XG5pbXBvcnQgeyBnZXRTdWdnZXN0aW9uVmFsdWUsIHN1Z2dlc3Rpb25Bc0FyaWFDb250ZW50IH0gZnJvbSAnLi91dGlscy91dGlscyc7XG5pbXBvcnQgTW9iaWxlVmlldyBmcm9tICcuL2NvbXBvbmVudHMvTW9iaWxlVmlldyc7XG5pbXBvcnQgeyBJbnB1dCB9IGZyb20gJy4vY29tcG9uZW50cy9JbnB1dCc7XG5pbXBvcnQgeyBTdWdnZXN0aW9ucyB9IGZyb20gJy4vY29tcG9uZW50cy9TdWdnZXN0aW9ucyc7XG5pbXBvcnQgeyBzZWFyY2hSZWR1Y2VyIH0gZnJvbSAnLi91dGlscy9zZWFyY2hSZWR1Y2VyJztcblxuY29uc3QgZ2V0QXJpYVByb3BzID0gKHtcbiAgaWQsXG4gIGFyaWFMYWJlbCxcbiAgbG5nLFxuICB0LFxuICBpc01vYmlsZSxcbiAgc3VnZ2VzdGlvbnMsXG4gIHZhbHVlLFxuICByZXF1aXJlZCxcbn0pID0+IHtcbiAgY29uc3QgYXJpYUJhcklkID0gaWQucmVwbGFjZSgnc2VhcmNoZmllbGQtJywgJycpO1xuICBjb25zdCBTZWFyY2hCYXJJZCA9XG4gICAgYXJpYUxhYmVsIHx8IHQoYXJpYUJhcklkLCB7IGxuZyB9KS5yZXBsYWNlKCdzZWFyY2hmaWVsZC0nLCAnJykuY29uY2F0KCcuJyk7IC8vIEZ1bGwgc3RvcCBtYWtlcyBzY3JlZW4gcmVhZGVyIHNwZWVjaCBjbGVhcmVyLlxuICBjb25zdCBhcmlhUmVxdWlyZWRUZXh0ID0gcmVxdWlyZWQgPyBgJHt0KCdyZXF1aXJlZCcsIHsgbG5nIH0pfS5gIDogJyc7XG4gIGNvbnN0IGFyaWFMYWJlbEluc3RydWN0aW9ucyA9IGlzTW9iaWxlXG4gICAgPyB0KCdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLW1vYmlsZScsIHsgbG5nIH0pXG4gICAgOiB0KCdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLWRlc2t0b3AnLCB7IGxuZyB9KTtcbiAgY29uc3QgbW92aW5nVG9EZXN0aW5hdGlvbkZpZWxkVGV4dCA9XG4gICAgaWQgPT09ICdvcmlnaW4nXG4gICAgICA/IHQoJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1tb3ZlLXRvLWRlc3RpbmF0aW9uJywgeyBsbmcgfSlcbiAgICAgIDogJyc7XG4gIGNvbnN0IGFyaWFMYWJlbFRleHQgPSBhcmlhTGFiZWxJbnN0cnVjdGlvbnNcbiAgICAuY29uY2F0KCcgJylcbiAgICAuY29uY2F0KG1vdmluZ1RvRGVzdGluYXRpb25GaWVsZFRleHQpO1xuXG4gIGNvbnN0IGFyaWFTdWdnZXN0aW9uTGVuID0gdCgnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbicsIHtcbiAgICBjb3VudDogc3VnZ2VzdGlvbnMubGVuZ3RoLFxuICAgIGxuZyxcbiAgfSk7XG5cbiAgY29uc3QgYXJpYUN1cnJlbnRTdWdnZXN0aW9uID1cbiAgICBzdWdnZXN0aW9uQXNBcmlhQ29udGVudCh7IHN1Z2dlc3Rpb25zLCB0LCBsbmcgfSkgfHwgdmFsdWVcbiAgICAgID8gdCgnc2VhcmNoLWN1cnJlbnQtc3VnZ2VzdGlvbicsIHtcbiAgICAgICAgICBsbmcsXG4gICAgICAgICAgc2VsZWN0aW9uOlxuICAgICAgICAgICAgc3VnZ2VzdGlvbkFzQXJpYUNvbnRlbnQoeyBzdWdnZXN0aW9ucywgdCwgbG5nIH0pLnRvTG93ZXJDYXNlKCkgfHxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICB9KVxuICAgICAgOiAnJztcblxuICByZXR1cm4ge1xuICAgIFNlYXJjaEJhcklkLFxuICAgIGFyaWFSZXF1aXJlZFRleHQsXG4gICAgYXJpYUxhYmVsVGV4dCxcbiAgICBhcmlhU3VnZ2VzdGlvbkxlbixcbiAgICBhcmlhQ3VycmVudFN1Z2dlc3Rpb24sXG4gIH07XG59O1xuXG5jb25zdCBwb3NpdGlvbnMgPSBbXG4gICdWYWxpdHR1IHNpamFpbnRpJyxcbiAgJ055a3lpbmVuIHNpamFpbnRpc2knLFxuICAnQ3VycmVudCBwb3NpdGlvbicsXG4gICdTZWxlY3RlZCBsb2NhdGlvbicsXG4gICdWYWxkIHBvc2l0aW9uJyxcbiAgJ0FudsOkbmQgbWluIHBvc2l0aW9uJyxcbiAgJ01pbiBwb3NpdGlvbicsXG4gICdLw6R5dMOkIG55a3lpc3TDpCBzaWphaW50aWEnLFxuICAnVXNlIGN1cnJlbnQgbG9jYXRpb24nLFxuICAnWW91ciBjdXJyZW50IGxvY2F0aW9uJyxcbiAgJ1d5YnJhbmUgbWllanNjZScsXG5dO1xuXG4vKipcbiAqIFRha2VzIHRoZSB0YXJnZXRzIGFuZCBtb2RpZmllcyB0aGVtIGJhc2VkIG9uIG93blBsYWNlcyBhbmQgaXNMb2NhdGlvblNlYXJjaFxuICogQHBhcmFtIHtvYmplY3R9IHByb3BzXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBwcm9wcy50YXJnZXRzXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHByb3BzLmlzTG9jYXRpb25TZWFyY2hcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gcHJvcHMuaXNNb2JpbGVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gcHJvcHMub3duUGxhY2VzXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBwcm9wcy5zb3VyY2VzXG4gKiBAcmV0dXJucyB7c3RyaW5nW119IG5ld1RhcmdldHNcbiAqL1xuY29uc3QgZ2V0TmV3VGFyZ2V0cyA9ICh7XG4gIHRhcmdldHMsXG4gIGlzTG9jYXRpb25TZWFyY2gsXG4gIGlzTW9iaWxlLFxuICBvd25QbGFjZXMsXG4gIHNvdXJjZXMsXG59KSA9PiB7XG4gIGNvbnN0IHVzZUFsbCA9ICF0YXJnZXRzPy5sZW5ndGg7XG4gIGxldCBuZXdUYXJnZXRzO1xuICBpZiAob3duUGxhY2VzKSB7XG4gICAgbmV3VGFyZ2V0cyA9IFsnTG9jYXRpb25zJ107XG4gICAgaWYgKHVzZUFsbCB8fCB0YXJnZXRzLmluY2x1ZGVzKCdTdG9wcycpKSB7XG4gICAgICBuZXdUYXJnZXRzLnB1c2goJ1N0b3BzJyk7XG4gICAgfVxuICAgIGlmICh1c2VBbGwgfHwgdGFyZ2V0cy5pbmNsdWRlcygnU3RhdGlvbnMnKSkge1xuICAgICAgbmV3VGFyZ2V0cy5wdXNoKCdTdGF0aW9ucycpO1xuICAgIH1cbiAgICBpZiAodXNlQWxsIHx8IHRhcmdldHMuaW5jbHVkZXMoJ1ZlaGljbGVSZW50YWxTdGF0aW9ucycpKSB7XG4gICAgICBuZXdUYXJnZXRzLnB1c2goJ1ZlaGljbGVSZW50YWxTdGF0aW9ucycpO1xuICAgIH1cbiAgfSBlbHNlIGlmICghdXNlQWxsKSB7XG4gICAgbmV3VGFyZ2V0cyA9IFsuLi50YXJnZXRzXTtcbiAgICAvLyBpbiBkZXNrdG9wLCBmYXZvcml0ZXMgYXJlIGFjY2Vzc2VkIHZpYSBzdWIgc2VhcmNoXG4gICAgaWYgKFxuICAgICAgaXNMb2NhdGlvblNlYXJjaCAmJlxuICAgICAgIWlzTW9iaWxlICYmXG4gICAgICAoIXNvdXJjZXMubGVuZ3RoIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0Zhdm91cml0ZScpKVxuICAgICkge1xuICAgICAgbmV3VGFyZ2V0cy5wdXNoKCdTZWxlY3RGcm9tT3duTG9jYXRpb25zJyk7XG4gICAgfVxuICB9XG4gIHJldHVybiBuZXdUYXJnZXRzO1xufTtcblxuLyoqXG4gKiBAZXhhbXBsZVxuICogY29uc3Qgc2VhcmNoQ29udGV4dCA9IHtcbiAqICAgaXNQZWxpYXNMb2NhdGlvbkF3YXJlOiBmYWxzZSAvLyB0cnVlIC8gZmFsc2UgZG9lcyBMZXQgUGVsaWFzIHN1Z2dlc3QgYmFzZWQgb24gY3VycmVudCB1c2VyIGxvY2F0aW9uXG4gKiAgIG1pbmltYWxSZWdleHA6IHVuZGVmaW5lZCAvLyB1c2VkIGZvciB0ZXN0aW5nIG1pbi4gcmVnZXhwLiBGb3IgZXhhbXBsZTogbmV3IFJlZ0V4cCgnLnsyLH0nKSxcbiAqICAgbGluZVJlZ2V4cDogdW5kZWZpbmVkIC8vICBpZGVudGlmeSBzZWFyY2hlcyBmb3Igcm91dGUgbnVtYmVycy9sYWJlbHM6IGJ1cyB8IHRyYWluIHwgbWV0cm8uIEZvciBleGFtcGxlOiBuZXcgUmVnRXhwKFxuICogICAgLy8gICAnKF5bMC05XStbYS16XT8kfF5beXVsZWFwaW5rcnRkel0kfChebVsxMl0/Yj8kKSknLFxuICogICAgLy8gICdpJyxcbiAqICAgIC8vICApLFxuICogICBVUkxfUEVMSUFTOiAnJyAvLyB1cmwgZm9yIHBlbGlhcyBzZWFyY2hlc1xuICogICBmZWVkSURzOiBbJ0hTTCcsICdIU0xMYXV0dGEnXSAvLyBGZWVkSWQncyBsaWtlICBbSFNMLCBIU0xMYXV0dGFdXG4gKiAgIGdlb2NvZGluZ1NvdXJjZXM6IFsnb2EnLCdvc20nLCdubHNmaSddICAvLyBzb3VyY2VzIGZvciBnZW9jb2RpbmdcbiAqICAgZ2VvY29kaW5nU2VhcmNoUGFyYW1zOyB7fSAgLy8gU2VhcmNocGFybWFzIGZybyBnZW9jb2RpbmdcbiAqICAgZ2V0RmF2b3VyaXRlTG9jYXRpb25zOiAoKSA9PiAoe30pLCAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgYXJyYXkgb2YgZmF2b3VyaXRlIGxvY2F0aW9ucy5cbiAqICAgZ2V0RmF2b3VyaXRlU3RvcHM6ICgpID0+ICh7fSksICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgYXJyYXkgb2YgZmF2b3VyaXRlIHN0b3BzLlxuICogICBnZXRMYW5ndWFnZTogKCkgPT4gKHt9KSwgICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBjdXJyZW50IGxhbmd1YWdlLlxuICogICBnZXRGYXZvdXJpdGVSb3V0ZXM6ICgpID0+ICh7fSksICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhcnJheSBvZiBmYXZvdXJpdGUgcm91dGVzLlxuICogICBnZXRQb3NpdGlvbnM6ICgpID0+ICh7fSksICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyB1c2VyJ3MgZ2VvbG9jYXRpb24uXG4gKiAgIGdldFJvdXRlc1F1ZXJ5OiAoKSA9PiAoe30pLCAgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIHF1ZXJ5IGZvciBmZXRjaGluZyByb3V0ZXMuXG4gKiAgIGdldFN0b3BBbmRTdGF0aW9uc1F1ZXJ5OiAoKSA9PiAoe30pLCAgLy8gRnVuY3Rpb24gdGhhdCBmZXRjaGVzIGZhdm91cml0ZSBzdG9wcyBhbmQgc3RhdGlvbnMgZnJvbSBncmFwaHFsIEFQSS5cbiAqICAgZ2V0RmF2b3VyaXRlUm91dGVzUXVlcnk6ICgpID0+ICh7fSksICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgcXVlcnkgZm9yIGZldGNoaW5nIGZhdm91cml0ZSByb3V0ZXMuXG4gKiAgIGdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uczogKCkgPT4gKHt9KSwgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBmYXZvdXJpdGUgYmlrZSByZW50YWwgc3RhdGlvbi5cbiAqICAgZ2V0RmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zUXVlcnk6ICgpID0+ICh7fSksIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBxdWVyeSBmb3IgZmV0Y2hpbmcgZmF2b3VyaXRlIGJpa2UgcmVudGFsIHN0YXRpb25zLlxuICogICBzdGFydExvY2F0aW9uV2F0Y2g6ICgpID0+ICh7fSksICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgbG9jYXRlcyB1c2VycyBnZW9sb2NhdGlvbi5cbiAqICAgc2F2ZVNlYXJjaDogKCkgPT4gKHt9KSwgICAgICAgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHNhdmVzIHNlYXJjaCB0byBvbGQgc2VhcmNoZXMgc3RvcmUuXG4gKiAgIGNsZWFyT2xkU2VhcmNoZXM6ICgpID0+ICh7fSksICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCBjbGVhcnMgb2xkIHNlYXJjaGVzIHN0b3JlLlxuICogICBnZXRGdXR1cmVSb3V0ZXM6ICgpID0+ICh7fSksICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJuIGZ1dHVyZSByb3V0ZXNcbiAqICAgc2F2ZUZ1dHVyZVJvdXRlOiAoKSA9PiAoe30pLCAgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHNhdmVzIGEgZnV0dXJlIHJvdXRlXG4gKiAgIGNsZWFyRnV0dXJlUm91dGVzOiAoKSA9PiAoe30pLCAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCBjbGVhcnMgZnV0dXJlIHJvdXRlc1xuICogfTtcbiAqIGNvbnN0IGxhbmcgPSAnZmknOyAvLyBlbiwgZmkgb3Igc3ZcbiAqIGNvbnN0IG9uU2VsZWN0ID0gKGl0ZW0sIGlkKSA9PiB7XG4gKiAgICAvLyBGdW50aW9uYWxpdHkgd2hlbiB1c2VyIHNlbGVjdHMgYSBzdWdnZXNpb25zLiBObyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGlzIGdpdmVuLlxuICogICAgcmV0dXJuIG51bGw7XG4gKiB9O1xuICogY29uc3Qgb25DbGVhciA9IGlkID0+IHtcbiAqICAgIC8vIENhbGxlZCAgd2hlbiB1c2VyIGNsaWNrcyB0aGUgY2xlYXIgc2VhcmNoIHN0cmluZyBidXR0b24uIE5vIGRlZmF1bHQgaW1wbGVtZW50YXRpb24uXG4gKiAgICByZXR1cm4gbnVsbDtcbiAqIH07XG4gKiBjb25zdCBnZXRBdXRvU3VnZ2VzdEljb25zOiB7XG4gKiAgIC8vIENhbGxlZCBmb3IgZXZlcnkgY2l0eSBiaWtlIHN0YXRpb24gcmVuZGVyZWQgYXMgYSBzZWFyY2ggc3VnZ2VzdGlvbi4gU2hvdWxkIHJldHVybiB0aGUgaWNvbiBhbmRcbiAqICAgLy8gY29sb3IgdXNlZCBmb3IgdGhhdCBzdGF0aW9uLiBUd28gaWNvbnMgYXJlIGF2YWlsYWJsZSwgJ2NpdHliaWtlLXN0b3AtZGlnaXRyYW5zaXQnIGFuZGl0eWJpa2Utc3RvcC1kaWdpdHJhbnNpdC1zZWNvbmRhcnknLlxuICogICBjaXR5YmlrZXM6IHN0YXRpb24gPT4ge1xuICogICAgICByZXR1cm4gWydjaXR5YmlrZS1zdG9wLWRpZ2l0cmFuc2l0JywgJyNmMmI2MmQnXTtcbiAqICAgfVxuICogfVxuICogY29uc3QgdHJhbnNwb3J0TW9kZSA9IHVuZGVmaW5lZDtcbiAqIGNvbnN0IHBsYWNlaG9sZGVyID0gXCJzdG9wLW5lYXIteW91XCI7XG4gKiBjb25zdCB0YXJnZXRzID0gWydMb2NhdGlvbnMnLCAnU3RvcHMnLCAnUm91dGVzJ107IC8vIERlZmluZXMgd2hhdCB5b3UgYXJlIHNlYXJjaGluZy4gT3B0aW9ucyBhcmUgTG9jYXRpb25zLCBTdG9wcywgU3RhdGlvbnMsIFJvdXRlcywgVmVoaWNsZVJlbnRhbFN0YXRpb25zLCBGdXR1cmVSb3V0ZXMsIE1hcFBvc2l0aW9uIGFuZCBDdXJyZW50UG9zaXRpb24uIExlYXZlIGVtcHR5IHRvIHNlYXJjaCBhbGwgdGFyZ2V0cy5cbiAqIGNvbnN0IHNvdXJjZXMgPSBbJ0Zhdm91cml0ZScsICdIaXN0b3J5JywgJ0RhdGFzb3VyY2UnXSAvLyBEZWZpbmVzIHdoZXJlIHlvdSBhcmUgc2VhcmNoaW5nLiBhbGwgYXZhaWxhYmxlIGFyZTogRmF2b3VyaXRlLCBIaXN0b3J5IChwcmV2aW91c2x5IHNlYXJjaGVkIHNlYXJjaGVzKSBhbmQgRGF0YXNvdXJjZS4gTGVhdmUgZW1wdHkgdG8gdXNlIGFsbCBzb3VyY2VzLlxuICogcmV0dXJuIChcbiAqICA8RFRBdXRvc3VnZ2VzdFxuICogICAgYXBwRWxlbWVudD17YXBwRWxlbWVudH0gLy8gUmVxdWlyZWQuIFJvb3QgZWxlbWVudCdzIGlkLiBOZWVkZWQgZm9yIHJlYWN0LW1vZGFsIGNvbXBvbmVudC5cbiAqICAgIHNlYXJjaENvbnRleHQ9e3NlYXJjaENvbnRleHR9XG4gKiAgICBpY29uPVwib3JpZ2luXCIgLy8gT3B0aW9uYWwgU3RyaW5nIGZvciBpY29uIHRoYXQgaXMgc2hvd24gbGVmdCBvZiBzZWFyY2hmaWVsZC4gdXNlZCB3aXRoIEljb24gbGlicmFyeVxuICogICAgaWQ9XCJvcmlnaW5cIiAvLyB1c2VkIGZvciBzdHlsZSBwcm9wcyBhbmQgaW5mbyBmb3IgY29tcG9uZW50LlxuICogICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfSAvLyBTdHJpbmcgdGhhdCBpcyBzaG93bnMgaW5pdGFsbHkgaW4gc2VhcmNoIGZpZWxkXG4gKiAgICB2YWx1ZT1cIlwiIC8vIGUuZy4gdXNlciB0eXBlZCBzdHJpbmcgdGhhdCBpcyBzaG93biBpbiBzZWFyY2ggZmllbGRcbiAqICAgIG9uU2VsZWN0PXtvblNlbGVjdH1cbiAqICAgIG9uQ2xlYXI9e29uQ2xlYXJ9XG4gKiAgICBsYW5nPXtsYW5nfVxuICogICAgZ2V0QXV0b1N1Z2dlc3RJY29ucz17Z2V0QXV0b1N1Z2dlc3RJY29uc31cbiAqICAgIHRyYW5zcG9ydE1vZGU9e3RyYW5zcG9ydE1vZGV9IC8vIHRyYW5zcG9ydG1vZGUgd2l0aCB3aGljaCB3ZSBmaWx0ZXIgdGhlIHJvdXRlcywgZS5nLiByb3V0ZS1CVVNcbiAqICAgIGdlb2NvZGluZ1NpemU9ezEwfSAvLyBkZWZpbmVzIGhvdyBtYW55IHN0b3BzIGFuZCBzdGF0aW9ucyB0byBmZXRjaCBmcm9tIGdlb2NvZGluZy4gVXNlZnVsIGlmIHlvdSB3YW50IHRvIGZpbHRlciB0aGUgcmVzdWx0cyBhbmQgc3RpbGwgZ2V0IGEgcmVhc29uYWJsZSBhbW91bnQgb2Ygc3VnZ2VzdGlvbnMuXG4gKiAgICBmaWx0ZXJSZXN1bHRzPXtyZXN1bHRzID0+IHJldHVybiByZXN1bHRzfSAvLyBPcHRpb25hbCBmaWx0ZXJpbmcgZnVuY3Rpb24gZm9yIHJvdXRlcyBhbmQgc3RvcHNcbiAqICAgIGhhbmRlbFZpYVBvaW50cz17KCkgPT4gcmV0dXJuIG51bGwgfSAvLyBPcHRpb25hbCBWaWEgcG9pbnQgaGFuZGxpbmcgbG9naWMuIFRoaXMgaXMgY3VycmVudGx5IG1hbmFnZWQgd2l0aCBEVEF1dG9zdWdnZXN0cGFuZWwgYnkgZGVmYXVsdCwgYnV0IGlmIERUQXV0b3N1Z2dlc3QgaXMgdXNlZCBzZXBlcmF0ZWxseSBvd24gaW1wbGVtZW50YXRpb24gbXVzdCBiZSBwcm92aWRlZC5cbiAqICAgIGZvY3VzQ2hhbmdlPXsoKSA9PiByZXR1cm4gbnVsbH0gLy8gV2hlbiBzdWdnZXN0aW9uIGlzIHNlbGVjdGVkLCBoYW5kbGUgY2hhbmdpbmcgZm9jdXMuIFRoaXMgaXMgY3VycmVudGx5IG1hbmFnZWQgd2l0aCBEVEF1dG9zdWdnZXN0cGFuZWwgYnkgZGVmYXVsdCwgYnV0IGlmIERUQXV0b3N1Z2dlc3QgaXMgdXNlZCBzZXBlcmF0ZWxseSBvd24gaW1wbGVtZW50YXRpb24gbXVzdCBiZSBwcm92aWRlZC5cbiAqICAgIHN0b3JlUmVmPXsoKSA9PiByZXR1cm4gbnVsbH0gLy8gRnVuY3Rpb25hbGl0eSB0byBzdG9yZSByZWZzLiBDdXJyZW5sdHkgbWFuYWdlZCB3aXRoIERUQXV0b3N1Z2dlc3RwYW5lbCBieSBkZWZhdWx0LCBidXQgaWYgRFRBdXRvc3VnZ2VzdCBpcyB1c2VkIHNlcGVyYXRlbGx5IG93biBpbXBsZW1lbnRhdGlvbiBtdXN0IGJlIHByb3ZpZGVkLlxuICogICAgc291cmNlcz17c291cmNlc31cbiAqICAgIHRhcmdldHM9e3RhcmdldHN9XG4gKiAgICBpc01vYmlsZSAgLy8gT3B0aW9uYWwuIERlZmF1bHRzIHRvIGZhbHNlLiBXaGV0aGVyIHRvIHVzZSBtb2JpbGUgc2VhcmNoLlxuICogICAgbW9iaWxlTGFiZWw9XCJDdXN0b20gbGFiZWxcIiAvLyBPcHRpb25hbC4gQ3VzdG9tIGxhYmVsIHRleHQgZm9yIGF1dG9zdWdnZXN0IGZpZWxkIG9uIG1vYmlsZS5cbiAqICAgIGlucHV0Q2xhc3NOYW1lPVwiXCIgLy8gT3B0aW9uYWwuIEN1c3RvbSBjbGFzc25hbWUgYXBwbGllZCB0byB0aGUgaW5wdXQgZWxlbWVudCBvZiB0aGUgY29tcG9uZW50IGZvciBwcm92aWRpbmcgQ1NTIHN0eWxlcy5cbiAqICAgIHRyYW5zbGF0ZWRQbGFjZWhvbGRlcj0gLy8gT3B0aW9uYWwuIEN1c3RvbiB0cmFuc2xhdGVkIHBsYWNlaG9sZGVyIHRleHQgZm9yIGF1dG9zdWdnZXN0IGZpZWxkLlxuICpcbiAqIEB0eXBlZGVmIERUQXV0b3N1Z2dlc3RQcm9wc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGFwcEVsZW1lbnRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpZFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHBsYWNlaG9sZGVyXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9ufSBvblNlbGVjdFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtpY29uXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFt2YWx1ZV1cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IFtvbkNsZWFyXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtsYW5nXVxuICogQHByb3BlcnR5IHtPYmplY3R9IFtnZXRBdXRvU3VnZ2VzdEljb25zXVxuICogQHByb3BlcnR5IHtmdW5jdGlvbn0gW2hhbmRsZVZpYVBvaW50c11cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IFtmb2N1c0NoYW5nZV1cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IFtzdG9yZVJlZl1cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2lzTW9iaWxlXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFttb2JpbGVMYWJlbF1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbaW5wdXRDbGFzc05hbWVdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3RyYW5zbGF0ZWRQbGFjZWhvbGRlcl1cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3JlcXVpcmVkXVxuICogQHByb3BlcnR5IHtPYmplY3R9IFtmb250V2VpZ2h0c11cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbY29sb3JzXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFttb2RlU2V0XVxuICogQHByb3BlcnR5IHtib29sZWFufSBbc2hvd1Njcm9sbF1cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2lzRW1iZWRkZWRdXG4gKiBHZW9jb2RpbmcgcmVsYXRlZCBwcm9wc1xuICogQHByb3BlcnR5IHtPYmplY3R9IHNlYXJjaENvbnRleHRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbdHJhbnNwb3J0TW9kZV1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFt0YXJnZXRzXVxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gW3NvdXJjZXNdXG4gKiBAcHJvcGVydHkge251bWJlcn0gW2dlb2NvZGluZ1NpemVdXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9ufSBbZmlsdGVyUmVzdWx0c11cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbcGF0aE9wdHNdXG4gKiBAcHJvcGVydHkge09iamVjdH0gW3JlZlBvaW50XVxuICogQHBhcmFtIHtEVEF1dG9zdWdnZXN0UHJvcHN9IHByb3BzXG4gKiBAcmV0dXJucyB7SlNYLkVsZW1lbnR9XG4gKi9cbmZ1bmN0aW9uIERUQXV0b3N1Z2dlc3Qoe1xuICBhcHBFbGVtZW50LFxuICBpZCxcbiAgcGxhY2Vob2xkZXIsXG4gIG9uU2VsZWN0LFxuICBpY29uLFxuICB2YWx1ZSxcbiAgb25DbGVhcixcbiAgbGFuZzogbG5nLFxuICBnZXRBdXRvU3VnZ2VzdEljb25zLFxuICBoYW5kbGVWaWFQb2ludHMsXG4gIGZvY3VzQ2hhbmdlLFxuICBzdG9yZVJlZixcbiAgaXNNb2JpbGUsXG4gIG1vYmlsZUxhYmVsLFxuICBpbnB1dENsYXNzTmFtZSxcbiAgdHJhbnNsYXRlZFBsYWNlaG9sZGVyLFxuICByZXF1aXJlZCxcbiAgYXJpYUxhYmVsLFxuICBmb250V2VpZ2h0cyxcbiAgY29sb3JzLFxuICBtb2RlU2V0LFxuICBzaG93U2Nyb2xsLFxuICBpc0VtYmVkZGVkLFxuICB0cmFuc3BvcnRNb2RlLFxuICB0YXJnZXRzLFxuICBzb3VyY2VzLFxuICBnZW9jb2RpbmdTaXplLFxuICBmaWx0ZXJSZXN1bHRzLFxuICBzZWFyY2hDb250ZXh0LFxuICBwYXRoT3B0cyxcbiAgcmVmUG9pbnQsXG59KSB7XG4gIGNvbnN0IFt0XSA9IHVzZVRyYW5zbGF0aW9uKCk7XG4gIGNvbnN0IGluaXRpYWxTdGF0ZSA9IHtcbiAgICBzdWdnZXN0aW9uczogW10sXG4gICAgbG9hZGluZzogZmFsc2UsXG4gICAgc291cmNlcyxcbiAgICBzaG93T3duUGxhY2VzOiBmYWxzZSxcbiAgICBwZW5kaW5nU2VsZWN0aW9uOiBudWxsLFxuICAgIGlzQ2xlYXJlZDogZmFsc2UsXG4gICAgcmVuZGVyTW9iaWxlOiBmYWxzZSxcbiAgICB2YWx1ZSxcbiAgICBlbnRlclBlbmRpbmc6IGZhbHNlLFxuICAgIGlzTWVudU9wZW46IGZhbHNlLFxuICB9O1xuICBjb25zdCBbc3RhdGUsIGRpc3BhdGNoXSA9IHVzZVJlZHVjZXIoc2VhcmNoUmVkdWNlciwgaW5pdGlhbFN0YXRlKTtcbiAgLy8gUmVzZXQgdGhlIHN0YXRlIHdoZW4gdmFsdWUgb3Igc291cmNlcyBjaGFuZ2UsIHRoaXMgYWxzbyB0cmlnZ2VycyBhIG5ldyBzZWFyY2hcbiAgdXNlRWZmZWN0KCgpID0+IGRpc3BhdGNoKHsgdHlwZTogJ1JFU0VUJywgaW5pdGlhbFN0YXRlIH0pLCBbdmFsdWVdKTtcbiAgdXNlRWZmZWN0KCgpID0+IGRpc3BhdGNoKHsgdHlwZTogJ1JFU0VUX1NPVVJDRVMnLCBzb3VyY2VzIH0pLCBbc291cmNlc10pO1xuICAvLyBjcmVhdGUgYW5kIHN0b3JlIGlucHV0IHJlZiBpbiB0aGUgcGFyZW50IGlmIHN0b3JlUmVmIGlzIHByb3ZpZGVkXG4gIGNvbnN0IGlucHV0UmVmID0gdXNlUmVmKGlkKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoc3RvcmVSZWYpIHtcbiAgICAgIHN0b3JlUmVmKGlucHV0UmVmLmN1cnJlbnQpO1xuICAgIH1cbiAgfSwgW2lucHV0UmVmLmN1cnJlbnRdKTtcblxuICBjb25zdCBmZXRjaFN1Z2dlc3Rpb25zID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IHVzZUFsbCA9ICF0YXJnZXRzPy5sZW5ndGg7XG4gICAgY29uc3QgaXNMb2NhdGlvblNlYXJjaCA9IHVzZUFsbCB8fCB0YXJnZXRzLmluY2x1ZGVzKCdMb2NhdGlvbnMnKTtcblxuICAgIGNvbnN0IG5ld1RhcmdldHMgPSBnZXROZXdUYXJnZXRzKHtcbiAgICAgIHRhcmdldHMsXG4gICAgICBpc0xvY2F0aW9uU2VhcmNoLFxuICAgICAgaXNNb2JpbGUsXG4gICAgICBvd25QbGFjZXM6IHN0YXRlLnNob3dPd25QbGFjZXMsXG4gICAgICBzb3VyY2VzOiBzdGF0ZS5zb3VyY2VzLFxuICAgIH0pO1xuICAgIC8vIHJlbW92ZSAgbG9jYXRpb24gZmF2b3VyaXRlcyBpbiBkZXNrdG9wIHNlYXJjaCAoY29sbGVjdGlvbiBpdGVtIHJlcGxhY2VzIGl0IGluIHRhcmdldCBhcnJheSlcbiAgICBjb25zdCBuZXdTb3VyY2VzID0gc3RhdGUuc291cmNlc1xuICAgICAgPyBzdGF0ZS5zb3VyY2VzLmZpbHRlcihcbiAgICAgICAgICBzID0+XG4gICAgICAgICAgICAhaXNMb2NhdGlvblNlYXJjaCB8fFxuICAgICAgICAgICAgIXMgPT09ICdGYXZvdXJpdGUnIHx8XG4gICAgICAgICAgICBzdGF0ZS5zaG93T3duUGxhY2VzIHx8XG4gICAgICAgICAgICBpc01vYmlsZSxcbiAgICAgICAgKVxuICAgICAgOiBzdGF0ZS5zb3VyY2VzO1xuICAgIGV4ZWN1dGVTZWFyY2goXG4gICAgICBuZXdUYXJnZXRzLFxuICAgICAgbmV3U291cmNlcyxcbiAgICAgIHRyYW5zcG9ydE1vZGUsXG4gICAgICBzZWFyY2hDb250ZXh0LFxuICAgICAgZmlsdGVyUmVzdWx0cyxcbiAgICAgIGdlb2NvZGluZ1NpemUsXG4gICAgICB7XG4gICAgICAgIGlucHV0OiBzdGF0ZS52YWx1ZSB8fCAnJyxcbiAgICAgIH0sXG4gICAgICBzZWFyY2hSZXN1bHQgPT4ge1xuICAgICAgICBpZiAoc2VhcmNoUmVzdWx0ID09IG51bGwpIHtcbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAnRkVUQ0hfU1VHR0VTVElPTlMnLFxuICAgICAgICAgICAgbG9hZGluZzogdHJ1ZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXdTdWdnZXN0aW9ucyA9IChzZWFyY2hSZXN1bHQucmVzdWx0cyB8fCBbXSlcbiAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgc3VnZ2VzdGlvbiA9PlxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLnR5cGUgIT09ICdGdXR1cmVSb3V0ZScgfHxcbiAgICAgICAgICAgICAgKHN1Z2dlc3Rpb24udHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJyAmJlxuICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24ucHJvcGVydGllcy50aW1lID4gRGF0ZS5ub3coKSAvIDEwMDApLFxuICAgICAgICAgIClcbiAgICAgICAgICAubWFwKHN1Z2dlc3Rpb24gPT4ge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLnR5cGUgPT09ICdDdXJyZW50TG9jYXRpb24nIHx8XG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24udHlwZSA9PT0gJ1NlbGVjdEZyb21NYXAnIHx8XG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24udHlwZSA9PT0gJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnIHx8XG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24udHlwZSA9PT0gJ2JhY2snXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgY29uc3QgdHJhbnNsYXRlZFN1Z2dlc3Rpb24gPSB7IC4uLnN1Z2dlc3Rpb24gfTtcbiAgICAgICAgICAgICAgdHJhbnNsYXRlZFN1Z2dlc3Rpb24ucHJvcGVydGllcy5sYWJlbElkID0gdChcbiAgICAgICAgICAgICAgICBzdWdnZXN0aW9uLnByb3BlcnRpZXMubGFiZWxJZCxcbiAgICAgICAgICAgICAgICB7IGxuZyB9LFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICByZXR1cm4gdHJhbnNsYXRlZFN1Z2dlc3Rpb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc3VnZ2VzdGlvbjtcbiAgICAgICAgICB9KTtcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6ICdGRVRDSF9TVUdHRVNUSU9OUycsXG4gICAgICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgc3VnZ2VzdGlvbnM6IG5ld1N1Z2dlc3Rpb25zLFxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBwYXRoT3B0cyxcbiAgICAgIHJlZlBvaW50LFxuICAgICk7XG4gIH0sIFtcbiAgICBzdGF0ZS52YWx1ZSxcbiAgICBzdGF0ZS5zb3VyY2VzLFxuICAgIHN0YXRlLnNob3dPd25QbGFjZXMsXG4gICAgdGFyZ2V0cyxcbiAgICB0cmFuc3BvcnRNb2RlLFxuICAgIHNlYXJjaENvbnRleHQsXG4gICAgZmlsdGVyUmVzdWx0cyxcbiAgICBnZW9jb2RpbmdTaXplLFxuICAgIGlzTW9iaWxlLFxuICAgIGxuZyxcbiAgICBwYXRoT3B0cyxcbiAgICByZWZQb2ludCxcbiAgICBpZCxcbiAgXSk7XG5cbiAgY29uc3Qgc2VsZWN0U3VnZ2VzdGlvbiA9IHVzZUNhbGxiYWNrKFxuICAgIChzdWdnZXN0aW9uLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKCFzdWdnZXN0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChoYW5kbGVWaWFQb2ludHMpIHtcbiAgICAgICAgaGFuZGxlVmlhUG9pbnRzKHN1Z2dlc3Rpb24sIGluZGV4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9uU2VsZWN0KHN1Z2dlc3Rpb24sIGlkKTtcbiAgICAgIH1cbiAgICAgIGlmIChmb2N1c0NoYW5nZSAmJiAoIWlzTW9iaWxlIHx8IGlzRW1iZWRkZWQpKSB7XG4gICAgICAgIGZvY3VzQ2hhbmdlKCk7XG4gICAgICB9XG4gICAgICBpZiAoaW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgICBpbnB1dFJlZi5jdXJyZW50LmJsdXIoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtpc01vYmlsZV0sXG4gICk7XG5cbiAgY29uc3Qgb25TZWxlY3RlZEl0ZW1DaGFuZ2UgPSBjaGFuZ2VzID0+XG4gICAgc2VsZWN0U3VnZ2VzdGlvbihjaGFuZ2VzLnNlbGVjdGVkSXRlbSwgY2hhbmdlcy5oaWdobGlnaHRlZEluZGV4KTtcblxuICBjb25zdCB7XG4gICAgaXNPcGVuLFxuICAgIGhpZ2hsaWdodGVkSW5kZXgsXG4gICAgZ2V0TGFiZWxQcm9wcyxcbiAgICBnZXRNZW51UHJvcHMsXG4gICAgZ2V0SW5wdXRQcm9wcyxcbiAgICBnZXRJdGVtUHJvcHMsXG4gICAgc2VsZWN0SXRlbSxcbiAgICBvcGVuTWVudSxcbiAgICBjbG9zZU1lbnUsXG4gIH0gPSB1c2VDb21ib2JveCh7XG4gICAgaW5wdXRJZDogaWQsXG4gICAgaW5wdXRWYWx1ZTogc3RhdGUudmFsdWUsXG4gICAgZGVmYXVsdEhpZ2hsaWdodGVkSW5kZXg6IDAsXG4gICAgb25JbnB1dFZhbHVlQ2hhbmdlOiAoeyBpbnB1dFZhbHVlIH0pID0+XG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdJTlBVVF9DSEFOR0UnLCB2YWx1ZTogaW5wdXRWYWx1ZSB9KSxcbiAgICBzdGF0ZVJlZHVjZXI6IHVzZUNhbGxiYWNrKFxuICAgICAgKG9sZFN0YXRlLCB7IHR5cGUsIGNoYW5nZXMgfSkgPT4ge1xuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICBjYXNlIHVzZUNvbWJvYm94LnN0YXRlQ2hhbmdlVHlwZXMuSXRlbUNsaWNrOlxuICAgICAgICAgIGNhc2UgdXNlQ29tYm9ib3guc3RhdGVDaGFuZ2VUeXBlcy5JbnB1dEtleURvd25FbnRlcjoge1xuICAgICAgICAgICAgLy8gc2V0Q2xlYXJlZChmYWxzZSk7XG4gICAgICAgICAgICAvLyBrZWVwIGVudGVyUHJlc3NlZFJlZiB0byBtYWtlIHNlbGVjdGlvbiB3aGVuIHN1Z2dlc3Rpb25zIGhhdmUgbG9hZGVkXG4gICAgICAgICAgICBpZiAoc3RhdGUubG9hZGluZykge1xuICAgICAgICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdQRU5ESU5HX0VOVEVSJywgZW50ZXJQZW5kaW5nOiB0cnVlIH0pO1xuICAgICAgICAgICAgICByZXR1cm4gb2xkU3RhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWNoYW5nZXMuc2VsZWN0ZWRJdGVtKSB7XG4gICAgICAgICAgICAgIHJldHVybiBjaGFuZ2VzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNoYW5nZXMuc2VsZWN0ZWRJdGVtLnR5cGUgPT09ICdTZWxlY3RGcm9tT3duTG9jYXRpb25zJykge1xuICAgICAgICAgICAgICAvLyBpZiBzZWxlY3RpbmcgZnJvbSBvd24gbG9jYXRpb25zLCBrZWVwIG1lbnUgb3BlbiBhbmQga2VlcCBvbGQgc3RhdGVcbiAgICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgIHR5cGU6ICdTRVRfU09VUkNFUycsXG4gICAgICAgICAgICAgICAgc291cmNlczogWydGYXZvdXJpdGUnLCAnQmFjayddLFxuICAgICAgICAgICAgICAgIHNob3dPd25QbGFjZXM6IHRydWUsXG4gICAgICAgICAgICAgICAgcGVuZGluZ1NlbGVjdGlvbjogY2hhbmdlcy5zZWxlY3RlZEl0ZW0udHlwZSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHJldHVybiBvbGRTdGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjaGFuZ2VzLnNlbGVjdGVkSXRlbS50eXBlID09PSAnYmFjaycpIHtcbiAgICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgIHR5cGU6ICdTRVRfU09VUkNFUycsXG4gICAgICAgICAgICAgICAgc291cmNlcyxcbiAgICAgICAgICAgICAgICBzaG93T3duUGxhY2VzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBwZW5kaW5nU2VsZWN0aW9uOiBudWxsLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcmV0dXJuIG9sZFN0YXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNoYW5nZXM7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgdXNlQ29tYm9ib3guc3RhdGVDaGFuZ2VUeXBlcy5JbnB1dENsaWNrOiB7XG4gICAgICAgICAgICAvLyBjbGVhciBpbnB1dCBpZiBjdXJyZW50IHBvc2l0aW9uIG9yIHNlbGVjdGVkIGxvY2F0aW9uIGlzIHNob3duXG4gICAgICAgICAgICBpZiAocG9zaXRpb25zLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgICAgICAgICByZXR1cm4geyAuLi5jaGFuZ2VzLCBpbnB1dFZhbHVlOiAnJywgaXNPcGVuOiB0cnVlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5jaGFuZ2VzLFxuICAgICAgICAgICAgICBpc09wZW46IHRydWUsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIHVzZUNvbWJvYm94LnN0YXRlQ2hhbmdlVHlwZXMuSW5wdXRCbHVyOiB7XG4gICAgICAgICAgICBpZiAoY2hhbmdlcy5zZWxlY3RlZEl0ZW0pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5jaGFuZ2VzLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkSXRlbTogb2xkU3RhdGUuc2VsZWN0SXRlbSxcbiAgICAgICAgICAgICAgICBpbnB1dFZhbHVlOiBvbGRTdGF0ZS5pbnB1dFZhbHVlLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNoYW5nZXM7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgdXNlQ29tYm9ib3guc3RhdGVDaGFuZ2VUeXBlcy5JbnB1dEtleURvd25Fc2NhcGU6IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLmNoYW5nZXMsXG4gICAgICAgICAgICAgIGlucHV0VmFsdWU6ICcnLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgcmV0dXJuIGNoYW5nZXM7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgW3N0YXRlLmxvYWRpbmcsIHZhbHVlLCBpc01vYmlsZV0sXG4gICAgKSxcbiAgICBpdGVtczogc3RhdGUuc3VnZ2VzdGlvbnMsXG4gICAgaXRlbVRvU3RyaW5nKHN1Z2dlc3Rpb24pIHtcbiAgICAgIHJldHVybiBzdWdnZXN0aW9uID8gZ2V0U3VnZ2VzdGlvblZhbHVlKHN1Z2dlc3Rpb24pIDogJyc7XG4gICAgfSxcbiAgICBvblNlbGVjdGVkSXRlbUNoYW5nZSxcbiAgICBvbklzT3BlbkNoYW5nZTogY2hhbmdlcyA9PiB7XG4gICAgICBpZiAoY2hhbmdlcy5pc09wZW4gJiYgIXN0YXRlLnJlbmRlck1vYmlsZSkge1xuICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdUT0dHTEVfTUVOVScsIGlzTW9iaWxlIH0pO1xuICAgICAgfVxuICAgIH0sXG4gIH0pO1xuICBjb25zdCBpbnB1dE9uQmx1ciA9ICgpID0+IHtcbiAgICBkaXNwYXRjaCh7XG4gICAgICBpc01vYmlsZSxcbiAgICAgIHZhbHVlOiAhaXNNb2JpbGUgJiYgdmFsdWUsXG4gICAgICB0eXBlOiAnSU5QVVRfQkxVUicsXG4gICAgfSk7XG4gICAgaWYgKCFpc01vYmlsZSkge1xuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiAnUkVTRVQnLFxuICAgICAgICBpbml0aWFsU3RhdGUsXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgY2xlYXJJbnB1dCA9IHJlZiA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnQ0xFQVInIH0pO1xuICAgIGlmIChvbkNsZWFyKSB7XG4gICAgICBvbkNsZWFyKGlkKTtcbiAgICB9XG4gICAgaWYgKHJlZi5jdXJyZW50KSB7XG4gICAgICByZWYuY3VycmVudC5mb2N1cygpO1xuICAgIH1cbiAgICBvcGVuTWVudSgpO1xuICB9O1xuXG4gIC8vIEZldGNoIHN1Z2dlc3Rpb25zIHdoZW4gaXNPcGVuLCB2YWx1ZSwgb3IgZmV0Y2hTdWdnZXN0aW9ucyBkZXBlbmRlbmNpZXMgY2hhbmdlXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gRG9uJ3Qgc2VhcmNoIHdoZW4gdGhlIHNlYXJjaCBmaWVsZCAoc3RhdGUudmFsdWUpIGNvbnRhaW5zIHBvc2l0aW9uIHN0cmluZ3MgdGhhdCB3ZXJlIGdpdmVuIGFzIGEgcHJvcCAodmFsdWUpLFxuICAgIC8vIGJlY2F1c2UgdGhleSBhcmUgVUkgbGFiZWxzIG5vdCByZWFsIHNlYXJjaCB0ZXJtcy4gRmV0Y2hpbmcgc3VnZ2VzdGlvbnMgd2l0aCB0aGVtIGNhdXNlZCBhIHF1aWNrbHkgZmxhc2hpbmcgc2V0IG9mXG4gICAgLy8gaXJyZWxldmFudCByZXN1bHRzLCBlLmcuICdLw6R5dMOkIG55a3lpc3TDpCBzaWphaW50aWEnIC0+ICdDaXR5LWvDpHl0w6R2w6QnLlxuICAgIGlmIChcbiAgICAgIChpc09wZW4gfHwgc3RhdGUucmVuZGVyTW9iaWxlKSAmJlxuICAgICAgIShzdGF0ZS52YWx1ZSA9PT0gdmFsdWUgJiYgcG9zaXRpb25zLmluY2x1ZGVzKHZhbHVlKSlcbiAgICApIHtcbiAgICAgIGZldGNoU3VnZ2VzdGlvbnMoc3RhdGUudmFsdWUpO1xuICAgIH1cbiAgfSwgW2lzT3Blbiwgc3RhdGUucmVuZGVyTW9iaWxlLCBzdGF0ZS52YWx1ZSwgZmV0Y2hTdWdnZXN0aW9uc10pO1xuXG4gIC8vIHRoaXMgZWZmZWN0IGhhbmRsZXMgc2VsZWN0aW5nIHRoZSBzdWdnZXN0aW9uIHdoZW4gZW50ZXIgd2FzIHByZXNzZWQgYnV0IHN1Z2dlc3Rpb25zIHdlcmUgc3RpbGwgbG9hZGluZ1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzdGF0ZS5lbnRlclBlbmRpbmcgJiYgIXN0YXRlLmxvYWRpbmcpIHtcbiAgICAgIHNlbGVjdFN1Z2dlc3Rpb24oc3RhdGUuc3VnZ2VzdGlvbnNbMF0sIDApO1xuICAgICAgY2xvc2VNZW51KCk7XG4gICAgfVxuICB9LCBbc3RhdGUubG9hZGluZywgc3RhdGUucGVuZGluZ0VudGVyLCBzdGF0ZS5zdWdnZXN0aW9uc10pO1xuXG4gIGNvbnN0IGJhc2VJdGVtUHJvcHMgPSB7XG4gICAgbG9hZGluZzogc3RhdGUubG9hZGluZyxcbiAgICBpc01vYmlsZSxcbiAgICBhcmlhRmF2b3VyaXRlU3RyaW5nOiB0KCdmYXZvdXJpdGUnLCB7IGxuZyB9KSxcbiAgICBmb250V2VpZ2h0cyxcbiAgICBnZXRBdXRvU3VnZ2VzdEljb25zLFxuICAgIGNvbG9ycyxcbiAgICBtb2RlU2V0LFxuICB9O1xuXG4gIGNvbnN0IHtcbiAgICBhcmlhQ3VycmVudFN1Z2dlc3Rpb24sXG4gICAgYXJpYVJlcXVpcmVkVGV4dCxcbiAgICBTZWFyY2hCYXJJZCxcbiAgICBhcmlhTGFiZWxUZXh0LFxuICB9ID0gZ2V0QXJpYVByb3BzKHtcbiAgICBpZCxcbiAgICBsbmcsXG4gICAgdCxcbiAgICBpc01vYmlsZSxcbiAgICBhcmlhTGFiZWwsXG4gICAgc3VnZ2VzdGlvbnM6IHN0YXRlLnN1Z2dlc3Rpb25zLFxuICAgIHZhbHVlOiBzdGF0ZS52YWx1ZSxcbiAgICByZXF1aXJlZCxcbiAgfSk7XG5cbiAgY29uc3QgbW9iaWxlQ2xlYXJPbGRTZWFyY2hlcyA9ICgpID0+IHtcbiAgICBjb25zdCB7IGNvbnRleHQsIGNsZWFyT2xkU2VhcmNoZXMsIGNsZWFyRnV0dXJlUm91dGVzIH0gPSBzZWFyY2hDb250ZXh0O1xuICAgIGlmIChjb250ZXh0ICYmIGNsZWFyT2xkU2VhcmNoZXMpIHtcbiAgICAgIGNsZWFyT2xkU2VhcmNoZXMoY29udGV4dCk7XG4gICAgICBpZiAoY2xlYXJGdXR1cmVSb3V0ZXMpIHtcbiAgICAgICAgY2xlYXJGdXR1cmVSb3V0ZXMoY29udGV4dCk7XG4gICAgICB9XG4gICAgICBmZXRjaFN1Z2dlc3Rpb25zKHN0YXRlLnZhbHVlKTtcbiAgICB9XG4gIH07XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIXN0YXRlLnJlbmRlck1vYmlsZSAmJiAhaXNPcGVuKSB7XG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdSRVNFVCcsIGluaXRpYWxTdGF0ZSB9KTtcbiAgICB9XG4gIH0sIFtzdGF0ZS5yZW5kZXJNb2JpbGUsIGlzT3Blbl0pO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHtpc01vYmlsZSAmJiAoXG4gICAgICAgIDxNb2JpbGVWaWV3XG4gICAgICAgICAgcGxhY2Vob2xkZXI9e3QocGxhY2Vob2xkZXIsIHsgbG5nIH0pfVxuICAgICAgICAgIGZvbnRXZWlnaHRzPXtmb250V2VpZ2h0c31cbiAgICAgICAgICBjbGVhck9sZFNlYXJjaGVzPXttb2JpbGVDbGVhck9sZFNlYXJjaGVzfVxuICAgICAgICAgIGFwcEVsZW1lbnQ9e2FwcEVsZW1lbnR9XG4gICAgICAgICAgbW9iaWxlTGFiZWw9e21vYmlsZUxhYmVsIHx8IHQoaWQsIHsgbG5nIH0pfVxuICAgICAgICAgIGFyaWFQcm9wcz17e1xuICAgICAgICAgICAgYXJpYUN1cnJlbnRTdWdnZXN0aW9uLFxuICAgICAgICAgICAgU2VhcmNoQmFySWQsXG4gICAgICAgICAgICBhcmlhUmVxdWlyZWRUZXh0LFxuICAgICAgICAgIH19XG4gICAgICAgICAgaWQ9e2lkfVxuICAgICAgICAgIGxuZz17bG5nfVxuICAgICAgICAgIG9uU2VsZWN0ZWRJdGVtQ2hhbmdlPXtvblNlbGVjdGVkSXRlbUNoYW5nZX1cbiAgICAgICAgICB2YWx1ZT17c3RhdGUudmFsdWV9XG4gICAgICAgICAgY2xlYXJJbnB1dD17Y2xlYXJJbnB1dH1cbiAgICAgICAgICBzdWdnZXN0aW9uUHJvcHM9e2Jhc2VJdGVtUHJvcHN9XG4gICAgICAgICAgc2hvd1Njcm9sbD17ISFzaG93U2Nyb2xsfVxuICAgICAgICAgIGNvbG9ycz17Y29sb3JzfVxuICAgICAgICAgIGlucHV0Q2xhc3NOYW1lPXtpbnB1dENsYXNzTmFtZX1cbiAgICAgICAgICByZXF1aXJlZD17cmVxdWlyZWR9XG4gICAgICAgICAgc3RhdGU9e3N0YXRlfVxuICAgICAgICAgIGRpc3BhdGNoPXtkaXNwYXRjaH1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjeChbXG4gICAgICAgICAgc3R5bGVzWydhdXRvc3VnZ2VzdC1pbnB1dC1jb250YWluZXInXSxcbiAgICAgICAgICBzdHlsZXNbaWRdLFxuICAgICAgICAgIHN0YXRlLnJlbmRlck1vYmlsZSAmJiAnaGlkZGVuJyxcbiAgICAgICAgXSl9XG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgJy0tY29sb3InOiBjb2xvcnMucHJpbWFyeSxcbiAgICAgICAgICAnLS1ob3Zlci1jb2xvcic6IGNvbG9ycy5ob3ZlcixcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge2ljb24gJiYgKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y3goW1xuICAgICAgICAgICAgICBzdHlsZXNbJ2F1dG9zdWdnZXN0LWlucHV0LWljb24nXSxcbiAgICAgICAgICAgICAgc3R5bGVzW2lkXSxcbiAgICAgICAgICAgICAgaW5wdXRDbGFzc05hbWUgJiYgc3R5bGVzW2Ake2lucHV0Q2xhc3NOYW1lfS1pbnB1dC1pY29uYF0sXG4gICAgICAgICAgICBdKX1cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9e2FyaWFSZXF1aXJlZFRleHRcbiAgICAgICAgICAgICAgLmNvbmNhdCgnICcpXG4gICAgICAgICAgICAgIC5jb25jYXQoU2VhcmNoQmFySWQpXG4gICAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgICAuY29uY2F0KHQoJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbCcsIHsgbG5nIH0pKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8SWNvbiBpbWc9e2Ake2ljb259YH0gLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgICAgPElucHV0XG4gICAgICAgICAgaW5wdXRDbGFzc05hbWU9e2lucHV0Q2xhc3NOYW1lfVxuICAgICAgICAgIGFyaWFMYWJlbD17YXJpYUN1cnJlbnRTdWdnZXN0aW9uXG4gICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgIC5jb25jYXQoYXJpYVJlcXVpcmVkVGV4dClcbiAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgLmNvbmNhdChTZWFyY2hCYXJJZClcbiAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgLmNvbmNhdChhcmlhTGFiZWxUZXh0KX1cbiAgICAgICAgICBpZD17aWR9XG4gICAgICAgICAgbG5nPXtsbmd9XG4gICAgICAgICAgZ2V0SW5wdXRQcm9wcz17Z2V0SW5wdXRQcm9wc31cbiAgICAgICAgICBnZXRMYWJlbFByb3BzPXtnZXRMYWJlbFByb3BzfVxuICAgICAgICAgIHNlbGVjdEl0ZW09e3NlbGVjdEl0ZW19XG4gICAgICAgICAgdmFsdWU9e3N0YXRlLnZhbHVlfVxuICAgICAgICAgIGNsZWFySW5wdXQ9e2NsZWFySW5wdXR9XG4gICAgICAgICAgaW5wdXRSZWY9e2lucHV0UmVmfVxuICAgICAgICAgIHN0eWxlcz17c3R5bGVzfVxuICAgICAgICAgIGNsZWFyQnV0dG9uQ29sb3I9e2NvbG9ycy5wcmltYXJ5fVxuICAgICAgICAgIHBsYWNlaG9sZGVyPXt0cmFuc2xhdGVkUGxhY2Vob2xkZXIgfHwgdChwbGFjZWhvbGRlciwgeyBsbmcgfSl9XG4gICAgICAgICAgcmVxdWlyZWQ9e3JlcXVpcmVkfVxuICAgICAgICAgIHRyYW5zcG9ydE1vZGU9e3RyYW5zcG9ydE1vZGV9XG4gICAgICAgICAgaXNNb2JpbGU9e2lzTW9iaWxlfVxuICAgICAgICAgIGlucHV0T25CbHVyPXtpbnB1dE9uQmx1cn1cbiAgICAgICAgLz5cblxuICAgICAgICA8U3VnZ2VzdGlvbnNcbiAgICAgICAgICBoaWRkZW49eyFpc09wZW4gfHwgIXN0YXRlLnN1Z2dlc3Rpb25zLmxlbmd0aCB8fCBpc01vYmlsZX1cbiAgICAgICAgICBoaWdobGlnaHRlZEluZGV4PXtoaWdobGlnaHRlZEluZGV4fVxuICAgICAgICAgIGdldEl0ZW1Qcm9wcz17Z2V0SXRlbVByb3BzfVxuICAgICAgICAgIGdldE1lbnVQcm9wcz17Z2V0TWVudVByb3BzfVxuICAgICAgICAgIHN1Z2dlc3Rpb25zPXtzdGF0ZS5zdWdnZXN0aW9uc31cbiAgICAgICAgICBsbmc9e2xuZ31cbiAgICAgICAgICBzdHlsZXM9e3N0eWxlc31cbiAgICAgICAgICB7Li4uYmFzZUl0ZW1Qcm9wc31cbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvPlxuICApO1xufVxuXG5EVEF1dG9zdWdnZXN0LnByb3BUeXBlcyA9IHtcbiAgYXBwRWxlbWVudDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBpY29uOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBpZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICB0cmFuc2xhdGVkUGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB0cmFuc3BvcnRNb2RlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBnZW9jb2RpbmdTaXplOiBQcm9wVHlwZXMubnVtYmVyLFxuICBmaWx0ZXJSZXN1bHRzOiBQcm9wVHlwZXMuZnVuYyxcbiAgc2VhcmNoQ29udGV4dDogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBVUkxfUEVMSUFTOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgIGNvbnRleHQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgY2xlYXJPbGRTZWFyY2hlczogUHJvcFR5cGVzLmZ1bmMsXG4gICAgY2xlYXJGdXR1cmVSb3V0ZXM6IFByb3BUeXBlcy5mdW5jLFxuICB9KS5pc1JlcXVpcmVkLFxuICBzb3VyY2VzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc3RyaW5nKSxcbiAgdGFyZ2V0czogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZyksXG4gIGFyaWFMYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgb25TZWxlY3Q6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIG9uQ2xlYXI6IFByb3BUeXBlcy5mdW5jLFxuICBzdG9yZVJlZjogUHJvcFR5cGVzLmZ1bmMsXG4gIGhhbmRsZVZpYVBvaW50czogUHJvcFR5cGVzLmZ1bmMsXG4gIGZvY3VzQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgbGFuZzogUHJvcFR5cGVzLnN0cmluZyxcbiAgaXNNb2JpbGU6IFByb3BUeXBlcy5ib29sLFxuICBwYXRoT3B0czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICByb3V0ZXNQcmVmaXg6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgc3RvcHNQcmVmaXg6IFByb3BUeXBlcy5zdHJpbmcsXG4gIH0pLFxuICBtb2JpbGVMYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgcmVmUG9pbnQ6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYWRkcmVzczogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBsYXQ6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgbG9uOiBQcm9wVHlwZXMubnVtYmVyLFxuICB9KSxcbiAgaW5wdXRDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGZvbnRXZWlnaHRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIG1lZGl1bTogUHJvcFR5cGVzLm51bWJlcixcbiAgfSksXG4gIGNvbG9yczogUHJvcFR5cGVzLm9iamVjdE9mKFByb3BUeXBlcy5zdHJpbmcpLFxuICBnZXRBdXRvU3VnZ2VzdEljb25zOiBQcm9wVHlwZXMub2JqZWN0T2YoUHJvcFR5cGVzLmZ1bmMpLFxuICByZXF1aXJlZDogUHJvcFR5cGVzLmJvb2wsXG4gIG1vZGVTZXQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNob3dTY3JvbGw6IFByb3BUeXBlcy5ib29sLFxuICBpc0VtYmVkZGVkOiBQcm9wVHlwZXMuYm9vbCxcbn07XG5cbkRUQXV0b3N1Z2dlc3QuZGVmYXVsdFByb3BzID0ge1xuICBpY29uOiB1bmRlZmluZWQsXG4gIHZhbHVlOiAnJyxcbiAgdHJhbnNwb3J0TW9kZTogdW5kZWZpbmVkLFxuICBmaWx0ZXJSZXN1bHRzOiB1bmRlZmluZWQsXG4gIG9uQ2xlYXI6IHVuZGVmaW5lZCxcbiAgbGFuZzogJ2ZpJyxcbiAgc3RvcmVSZWY6IHVuZGVmaW5lZCxcbiAgaGFuZGxlVmlhUG9pbnRzOiB1bmRlZmluZWQsXG4gIGZvY3VzQ2hhbmdlOiB1bmRlZmluZWQsXG4gIGdldEF1dG9TdWdnZXN0SWNvbnM6IHVuZGVmaW5lZCxcbiAgc291cmNlczogW10sXG4gIHRhcmdldHM6IHVuZGVmaW5lZCxcbiAgaXNNb2JpbGU6IGZhbHNlLFxuICBpc0VtYmVkZGVkOiBmYWxzZSxcbiAgZ2VvY29kaW5nU2l6ZTogdW5kZWZpbmVkLFxuICBwYXRoT3B0czoge1xuICAgIHJvdXRlc1ByZWZpeDogJ2xpbmphdCcsXG4gICAgc3RvcHNQcmVmaXg6ICdweXNha2l0JyxcbiAgfSxcbiAgYXJpYUxhYmVsOiB1bmRlZmluZWQsXG4gIG1vYmlsZUxhYmVsOiB1bmRlZmluZWQsXG4gIGlucHV0Q2xhc3NOYW1lOiAnJyxcbiAgdHJhbnNsYXRlZFBsYWNlaG9sZGVyOiB1bmRlZmluZWQsXG4gIGZvbnRXZWlnaHRzOiB7XG4gICAgbWVkaXVtOiA1MDAsXG4gIH0sXG4gIGNvbG9yczogZGVmYXVsdENvbG9ycyxcbiAgcmVxdWlyZWQ6IGZhbHNlLFxuICBtb2RlU2V0OiB1bmRlZmluZWQsXG4gIHNob3dTY3JvbGw6IGZhbHNlLFxuICByZWZQb2ludDoge30sXG59O1xuXG5leHBvcnQgZGVmYXVsdCBwcm9wcyA9PiB7XG4gIHJldHVybiAoXG4gICAgPEkxOG5leHRQcm92aWRlciBpMThuPXtpMThufT5cbiAgICAgIDxEVEF1dG9zdWdnZXN0IHsuLi5wcm9wc30gLz5cbiAgICA8L0kxOG5leHRQcm92aWRlcj5cbiAgKTtcbn07XG4iXSwibmFtZXMiOlsiX3R5cGVvZiIsIm8iLCJTeW1ib2wiLCJpdGVyYXRvciIsImNvbnN0cnVjdG9yIiwicHJvdG90eXBlIiwidG9Qcm9wZXJ0eUtleSIsInQiLCJpIiwiciIsImUiLCJ0b1ByaW1pdGl2ZSIsImNhbGwiLCJUeXBlRXJyb3IiLCJTdHJpbmciLCJOdW1iZXIiLCJfZGVmaW5lUHJvcGVydHkiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwidHJ1RXEiLCJ2YWwxIiwidmFsMiIsImd0ZnNTdG9wTGF5ZXJzIiwidmVoaWNsZVJlbnRhbExheWVycyIsImxhYmVsSWRUb0dpZCIsImlkIiwicGFydHMiLCJzcGxpdCIsImxlbmd0aCIsImlzRHVwbGljYXRlIiwiaXRlbTEiLCJpdGVtMiIsInByb3BzMSIsInByb3BlcnRpZXMiLCJwcm9wczIiLCJ0eXBlIiwibzEiLCJvcmlnaW4iLCJkMSIsImRlc3RpbmF0aW9uIiwibzIiLCJkMiIsIm5hbWUiLCJsb2NhbGFkbWluIiwiaW5jbHVkZXMiLCJsYXllciIsImdpZCIsImxhYmVsSWQiLCJndGZzSWQiLCJwMSIsImdlb21ldHJ5IiwiY29vcmRpbmF0ZXMiLCJ1bmRlZmluZWQiLCJwMiIsIk1hdGgiLCJhYnMiLCJsYWJlbCIsImFkZHJlc3MiLCJub3JtYWxpemUiLCJzdHIiLCJpc1N0cmluZyIsInRvTG93ZXJDYXNlIiwic3BsaXRTaG9ydE5hbWVBdExldHRlcnMiLCJ0ZXN0U2hvcnROYW1lTWF0Y2hlc0xpbmVXaXRoTnVtYmVyc0FuZExldHRlcnMiLCJ0ZXN0IiwiTGF5ZXJUeXBlIiwiaXNTdG9wIiwiZ2V0TGF5ZXJSYW5rIiwic291cmNlIiwiaW5kZXhPZiIsInNvcnRTZWFyY2hSZXN1bHRzIiwibGluZVJlZ2V4cCIsInJlc3VsdHMiLCJ0ZXJtIiwiQXJyYXkiLCJpc0FycmF5IiwiaXNMaW5lSWRlbnRpZmllciIsIm5vcm1hbGl6ZWRUZXJtIiwiaXNMaW5lU2VhcmNoIiwib3JkZXJlZFJlc3VsdHMiLCJvcmRlckJ5IiwiZmlsdGVyIiwicmVzdWx0Iiwic2hvcnROYW1lIiwiY29uZmlkZW5jZSIsIm1hdGNoIiwicmVzdWx0UHJvcGVydGllcyIsIm1hcCIsImVsZW1lbnQiLCJub3JtYWxpemVkVmFsdWUiLCJyZWR1Y2UiLCJwcmV2aW91cyIsImN1cnJlbnQiLCJ1bmlxV2l0aCIsImdldFN0b3BOYW1lIiwic3RvcENvZGUiLCJsYXN0SW5kZXhPZiIsInN1YnN0cmluZyIsImZpbHRlck1hdGNoaW5nVG9JbnB1dCIsImxpc3QiLCJJbnB1dCIsImZpZWxkcyIsImlucHV0IiwidHJpbSIsIm11bHRpV29yZCIsIml0ZW0iLCJmb3JFYWNoIiwicE5hbWUiLCJnZXQiLCJzcGxpY2UiLCJqb2luIiwiY29uY2F0IiwicmVwbGFjZSIsImJpbmQiLCJmbiIsInRoaXNBcmciLCJhcHBseSIsImFyZ3VtZW50cyIsInRvU3RyaW5nIiwiZ2V0UHJvdG90eXBlT2YiLCJ0b1N0cmluZ1RhZyIsImtpbmRPZiIsImNhY2hlIiwiY3JlYXRlIiwidGhpbmciLCJzbGljZSIsImtpbmRPZlRlc3QiLCJ0eXBlT2ZUZXN0IiwiaXNVbmRlZmluZWQiLCJpc0J1ZmZlciIsInZhbCIsImlzRnVuY3Rpb24iLCJpc0FycmF5QnVmZmVyIiwiaXNOdW1iZXIiLCJpc09iamVjdCIsImlzUGxhaW5PYmplY3QiLCJpc0RhdGUiLCJpc0ZpbGUiLCJpc0Jsb2IiLCJpc0ZpbGVMaXN0IiwiRyIsImdsb2JhbFRoaXMiLCJzZWxmIiwid2luZG93IiwiZ2xvYmFsIiwiRm9ybURhdGFDdG9yIiwiRm9ybURhdGEiLCJpc1VSTFNlYXJjaFBhcmFtcyIsImlzUmVhZGFibGVTdHJlYW0iLCJpc1JlcXVlc3QiLCJpc1Jlc3BvbnNlIiwiaXNIZWFkZXJzIiwib2JqIiwiYWxsT3duS2V5cyIsImwiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImxlbiIsImtleSIsImZpbmRLZXkiLCJfa2V5IiwiX2dsb2JhbCIsImlzQ29udGV4dERlZmluZWQiLCJjb250ZXh0IiwiaXNUeXBlZEFycmF5IiwiVHlwZWRBcnJheSIsIlVpbnQ4QXJyYXkiLCJpc0hUTUxGb3JtIiwiaGFzT3duUHJvcGVydHkiLCJwcm9wIiwiaXNSZWdFeHAiLCJyZWR1Y2VEZXNjcmlwdG9ycyIsInJlZHVjZXIiLCJkZXNjcmlwdG9ycyIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJyZWR1Y2VkRGVzY3JpcHRvcnMiLCJkZXNjcmlwdG9yIiwicmV0IiwiZGVmaW5lUHJvcGVydGllcyIsImlzQXN5bmNGbiIsIl9zZXRJbW1lZGlhdGUiLCJzZXRJbW1lZGlhdGVTdXBwb3J0ZWQiLCJzZXRJbW1lZGlhdGUiLCJwb3N0TWVzc2FnZVN1cHBvcnRlZCIsInBvc3RNZXNzYWdlIiwidG9rZW4iLCJyYW5kb20iLCJjYWxsYmFja3MiLCJhZGRFdmVudExpc3RlbmVyIiwiZGF0YSIsInNoaWZ0IiwiY2IiLCJwdXNoIiwic2V0VGltZW91dCIsImFzYXAiLCJxdWV1ZU1pY3JvdGFzayIsInByb2Nlc3MiLCJuZXh0VGljayIsInV0aWxzJDMiLCJpc0Zvcm1EYXRhIiwia2luZCIsImFwcGVuZCIsImlzQXJyYXlCdWZmZXJWaWV3IiwiQXJyYXlCdWZmZXIiLCJpc1ZpZXciLCJidWZmZXIiLCJpc0Jvb2xlYW4iLCJpc0VtcHR5T2JqZWN0IiwiaXNSZWFjdE5hdGl2ZUJsb2IiLCJ1cmkiLCJpc1JlYWN0TmF0aXZlIiwiZm9ybURhdGEiLCJnZXRQYXJ0cyIsImlzU3RyZWFtIiwicGlwZSIsIm1lcmdlIiwiY2FzZWxlc3MiLCJza2lwVW5kZWZpbmVkIiwidGhpcyIsImFzc2lnblZhbHVlIiwidGFyZ2V0S2V5IiwiZXh0ZW5kIiwiYSIsImIiLCJzdHJpcEJPTSIsImNvbnRlbnQiLCJjaGFyQ29kZUF0IiwiaW5oZXJpdHMiLCJzdXBlckNvbnN0cnVjdG9yIiwicHJvcHMiLCJhc3NpZ24iLCJ0b0ZsYXRPYmplY3QiLCJzb3VyY2VPYmoiLCJkZXN0T2JqIiwicHJvcEZpbHRlciIsIm1lcmdlZCIsImVuZHNXaXRoIiwic2VhcmNoU3RyaW5nIiwicG9zaXRpb24iLCJsYXN0SW5kZXgiLCJ0b0FycmF5IiwiYXJyIiwiZm9yRWFjaEVudHJ5IiwiX2l0ZXJhdG9yIiwibmV4dCIsImRvbmUiLCJwYWlyIiwibWF0Y2hBbGwiLCJyZWdFeHAiLCJtYXRjaGVzIiwiZXhlYyIsImhhc093blByb3AiLCJmcmVlemVNZXRob2RzIiwic2V0IiwiRXJyb3IiLCJ0b09iamVjdFNldCIsImFycmF5T3JTdHJpbmciLCJkZWxpbWl0ZXIiLCJkZWZpbmUiLCJ0b0NhbWVsQ2FzZSIsIm0iLCJ0b1VwcGVyQ2FzZSIsIm5vb3AiLCJ0b0Zpbml0ZU51bWJlciIsImRlZmF1bHRWYWx1ZSIsImlzRmluaXRlIiwiaXNTcGVjQ29tcGxpYW50Rm9ybSIsInRvSlNPTk9iamVjdCIsInN0YWNrIiwidmlzaXQiLCJ0YXJnZXQiLCJyZWR1Y2VkVmFsdWUiLCJpc1RoZW5hYmxlIiwidGhlbiIsImNhdGNoIiwiaXNJdGVyYWJsZSIsIkF4aW9zRXJyb3IiLCJmcm9tIiwiZXJyb3IiLCJjb2RlIiwiY29uZmlnIiwicmVxdWVzdCIsInJlc3BvbnNlIiwiY3VzdG9tUHJvcHMiLCJheGlvc0Vycm9yIiwibWVzc2FnZSIsImNhdXNlIiwic3RhdHVzIiwic3VwZXIiLCJpc0F4aW9zRXJyb3IiLCJ0b0pTT04iLCJkZXNjcmlwdGlvbiIsIm51bWJlciIsImZpbGVOYW1lIiwibGluZU51bWJlciIsImNvbHVtbk51bWJlciIsInV0aWxzIiwiRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJFUlJfQkFEX09QVElPTiIsIkVDT05OQUJPUlRFRCIsIkVUSU1FRE9VVCIsIkVSUl9ORVRXT1JLIiwiRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUyIsIkVSUl9ERVBSRUNBVEVEIiwiRVJSX0JBRF9SRVNQT05TRSIsIkVSUl9CQURfUkVRVUVTVCIsIkVSUl9DQU5DRUxFRCIsIkVSUl9OT1RfU1VQUE9SVCIsIkVSUl9JTlZBTElEX1VSTCIsIkF4aW9zRXJyb3IkMyIsImlzVmlzaXRhYmxlIiwicmVtb3ZlQnJhY2tldHMiLCJyZW5kZXJLZXkiLCJwYXRoIiwiZG90cyIsInByZWRpY2F0ZXMiLCJ0b0Zvcm1EYXRhIiwib3B0aW9ucyIsIm1ldGFUb2tlbnMiLCJpbmRleGVzIiwib3B0aW9uIiwidmlzaXRvciIsImRlZmF1bHRWaXNpdG9yIiwidXNlQmxvYiIsIkJsb2IiLCJjb252ZXJ0VmFsdWUiLCJ0b0lTT1N0cmluZyIsIkJ1ZmZlciIsIkpTT04iLCJzdHJpbmdpZnkiLCJzb21lIiwiaXNGbGF0QXJyYXkiLCJlbCIsImluZGV4IiwiZXhwb3NlZEhlbHBlcnMiLCJidWlsZCIsInBvcCIsImVuY29kZSIsImNoYXJNYXAiLCJlbmNvZGVVUklDb21wb25lbnQiLCJBeGlvc1VSTFNlYXJjaFBhcmFtcyIsInBhcmFtcyIsIl9wYWlycyIsImJ1aWxkVVJMIiwidXJsIiwiX2VuY29kZSIsIl9vcHRpb25zIiwic2VyaWFsaXplIiwic2VyaWFsaXplRm4iLCJzZXJpYWxpemVkUGFyYW1zIiwiaGFzaG1hcmtJbmRleCIsInByb3RvdHlwZSQxIiwiZW5jb2RlciIsIkludGVyY2VwdG9yTWFuYWdlciQzIiwiaGFuZGxlcnMiLCJ1c2UiLCJmdWxmaWxsZWQiLCJyZWplY3RlZCIsInN5bmNocm9ub3VzIiwicnVuV2hlbiIsImVqZWN0IiwiY2xlYXIiLCJoIiwidHJhbnNpdGlvbmFsRGVmYXVsdHMkMSIsInNpbGVudEpTT05QYXJzaW5nIiwiZm9yY2VkSlNPTlBhcnNpbmciLCJjbGFyaWZ5VGltZW91dEVycm9yIiwibGVnYWN5SW50ZXJjZXB0b3JSZXFSZXNPcmRlcmluZyIsInBsYXRmb3JtJDMiLCJpc0Jyb3dzZXIiLCJjbGFzc2VzIiwiVVJMU2VhcmNoUGFyYW1zIiwicHJvdG9jb2xzIiwiaGFzQnJvd3NlckVudiIsImRvY3VtZW50IiwiX25hdmlnYXRvciIsIm5hdmlnYXRvciIsImhhc1N0YW5kYXJkQnJvd3NlckVudiIsInByb2R1Y3QiLCJoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYiLCJXb3JrZXJHbG9iYWxTY29wZSIsImltcG9ydFNjcmlwdHMiLCJsb2NhdGlvbiIsImhyZWYiLCJwbGF0Zm9ybSQyIiwicGxhdGZvcm0iLCJmb3JtRGF0YVRvSlNPTiIsImJ1aWxkUGF0aCIsImlzTnVtZXJpY0tleSIsImlzTGFzdCIsImFycmF5VG9PYmplY3QiLCJlbnRyaWVzIiwicGFyc2VQcm9wUGF0aCIsImRlZmF1bHRzIiwidHJhbnNpdGlvbmFsIiwidHJhbnNpdGlvbmFsRGVmYXVsdHMiLCJhZGFwdGVyIiwidHJhbnNmb3JtUmVxdWVzdCIsImhlYWRlcnMiLCJjb250ZW50VHlwZSIsImdldENvbnRlbnRUeXBlIiwiaGFzSlNPTkNvbnRlbnRUeXBlIiwiaXNPYmplY3RQYXlsb2FkIiwic2V0Q29udGVudFR5cGUiLCJoZWxwZXJzIiwiaXNOb2RlIiwidG9VUkxFbmNvZGVkRm9ybSIsImZvcm1TZXJpYWxpemVyIiwiX0Zvcm1EYXRhIiwiZW52IiwicmF3VmFsdWUiLCJwYXJzZXIiLCJwYXJzZSIsInN0cmluZ2lmeVNhZmVseSIsInRyYW5zZm9ybVJlc3BvbnNlIiwiSlNPTlJlcXVlc3RlZCIsInJlc3BvbnNlVHlwZSIsInN0cmljdEpTT05QYXJzaW5nIiwicGFyc2VSZXZpdmVyIiwidGltZW91dCIsInhzcmZDb29raWVOYW1lIiwieHNyZkhlYWRlck5hbWUiLCJtYXhDb250ZW50TGVuZ3RoIiwibWF4Qm9keUxlbmd0aCIsInZhbGlkYXRlU3RhdHVzIiwiY29tbW9uIiwiQWNjZXB0IiwibWV0aG9kIiwiZGVmYXVsdHMkMyIsImlnbm9yZUR1cGxpY2F0ZU9mIiwiJGludGVybmFscyIsImFzc2VydFZhbGlkSGVhZGVyVmFsdWUiLCJoZWFkZXIiLCJ2IiwiaXNWYWxpZEhlYWRlclZhbHVlIiwibm9ybWFsaXplSGVhZGVyIiwibm9ybWFsaXplVmFsdWUiLCJlbmQiLCJjaGFyQ29kZSIsInN0cmlwVHJhaWxpbmdDUkxGIiwibWF0Y2hIZWFkZXJWYWx1ZSIsImlzSGVhZGVyTmFtZUZpbHRlciIsIkF4aW9zSGVhZGVycyIsInZhbHVlT3JSZXdyaXRlIiwicmV3cml0ZSIsInNldEhlYWRlciIsIl92YWx1ZSIsIl9oZWFkZXIiLCJfcmV3cml0ZSIsImxIZWFkZXIiLCJzZXRIZWFkZXJzIiwicmF3SGVhZGVycyIsInBhcnNlZCIsImxpbmUiLCJwYXJzZUhlYWRlcnMiLCJkZXN0IiwiZW50cnkiLCJ0b2tlbnMiLCJ0b2tlbnNSRSIsInBhcnNlVG9rZW5zIiwiaGFzIiwibWF0Y2hlciIsImRlbGV0ZWQiLCJkZWxldGVIZWFkZXIiLCJmb3JtYXQiLCJub3JtYWxpemVkIiwidyIsImNoYXIiLCJmb3JtYXRIZWFkZXIiLCJ0YXJnZXRzIiwiYXNTdHJpbmdzIiwiZ2V0U2V0Q29va2llIiwiZmlyc3QiLCJjb21wdXRlZCIsImFjY2Vzc29yIiwiYWNjZXNzb3JzIiwiZGVmaW5lQWNjZXNzb3IiLCJhY2Nlc3Nvck5hbWUiLCJtZXRob2ROYW1lIiwiYXJnMSIsImFyZzIiLCJhcmczIiwiYnVpbGRBY2Nlc3NvcnMiLCJBeGlvc0hlYWRlcnMkMiIsIm1hcHBlZCIsImhlYWRlclZhbHVlIiwiQXhpb3NIZWFkZXJzJDMiLCJ0cmFuc2Zvcm1EYXRhIiwiZm5zIiwiaXNDYW5jZWwiLCJfX0NBTkNFTF9fIiwiQ2FuY2VsZWRFcnJvciQzIiwic2V0dGxlIiwicmVzb2x2ZSIsInJlamVjdCIsImZsb29yIiwicHJvZ3Jlc3NFdmVudFJlZHVjZXIiLCJsaXN0ZW5lciIsImlzRG93bmxvYWRTdHJlYW0iLCJmcmVxIiwiYnl0ZXNOb3RpZmllZCIsIl9zcGVlZG9tZXRlciIsInNhbXBsZXNDb3VudCIsIm1pbiIsImJ5dGVzIiwidGltZXN0YW1wcyIsImZpcnN0U2FtcGxlVFMiLCJoZWFkIiwidGFpbCIsImNodW5rTGVuZ3RoIiwibm93IiwiRGF0ZSIsInN0YXJ0ZWRBdCIsImJ5dGVzQ291bnQiLCJwYXNzZWQiLCJyb3VuZCIsInNwZWVkb21ldGVyIiwibGFzdEFyZ3MiLCJ0aW1lciIsInRpbWVzdGFtcCIsInRocmVzaG9sZCIsImludm9rZSIsImFyZ3MiLCJjbGVhclRpbWVvdXQiLCJ0aHJvdHRsZSIsImxvYWRlZCIsInRvdGFsIiwibGVuZ3RoQ29tcHV0YWJsZSIsInByb2dyZXNzQnl0ZXMiLCJyYXRlIiwicHJvZ3Jlc3MiLCJlc3RpbWF0ZWQiLCJldmVudCIsInByb2dyZXNzRXZlbnREZWNvcmF0b3IiLCJ0aHJvdHRsZWQiLCJhc3luY0RlY29yYXRvciIsImlzTVNJRSIsIlVSTCIsInByb3RvY29sIiwiaG9zdCIsInBvcnQiLCJ1c2VyQWdlbnQiLCJ3cml0ZSIsImV4cGlyZXMiLCJkb21haW4iLCJzZWN1cmUiLCJzYW1lU2l0ZSIsImNvb2tpZSIsInRvVVRDU3RyaW5nIiwicmVhZCIsIlJlZ0V4cCIsImRlY29kZVVSSUNvbXBvbmVudCIsInJlbW92ZSIsImJ1aWxkRnVsbFBhdGgiLCJiYXNlVVJMIiwicmVxdWVzdGVkVVJMIiwiYWxsb3dBYnNvbHV0ZVVybHMiLCJpc1JlbGF0aXZlVXJsIiwicmVsYXRpdmVVUkwiLCJjb21iaW5lVVJMcyIsImhlYWRlcnNUb09iamVjdCIsIm1lcmdlQ29uZmlnIiwiY29uZmlnMSIsImNvbmZpZzIiLCJnZXRNZXJnZWRWYWx1ZSIsIm1lcmdlRGVlcFByb3BlcnRpZXMiLCJ2YWx1ZUZyb21Db25maWcyIiwiZGVmYXVsdFRvQ29uZmlnMiIsIm1lcmdlRGlyZWN0S2V5cyIsIm1lcmdlTWFwIiwicGFyYW1zU2VyaWFsaXplciIsInRpbWVvdXRNZXNzYWdlIiwid2l0aENyZWRlbnRpYWxzIiwid2l0aFhTUkZUb2tlbiIsIm9uVXBsb2FkUHJvZ3Jlc3MiLCJvbkRvd25sb2FkUHJvZ3Jlc3MiLCJkZWNvbXByZXNzIiwiYmVmb3JlUmVkaXJlY3QiLCJ0cmFuc3BvcnQiLCJodHRwQWdlbnQiLCJodHRwc0FnZW50IiwiY2FuY2VsVG9rZW4iLCJzb2NrZXRQYXRoIiwicmVzcG9uc2VFbmNvZGluZyIsImNvbmZpZ1ZhbHVlIiwicmVzb2x2ZUNvbmZpZyQxIiwibmV3Q29uZmlnIiwiYXV0aCIsImJ0b2EiLCJ1c2VybmFtZSIsInBhc3N3b3JkIiwidW5lc2NhcGUiLCJnZXRIZWFkZXJzIiwiZm9ybUhlYWRlcnMiLCJhbGxvd2VkSGVhZGVycyIsImlzVVJMU2FtZU9yaWdpbiIsInhzcmZWYWx1ZSIsImNvb2tpZXMiLCJ4aHJBZGFwdGVyJDEiLCJYTUxIdHRwUmVxdWVzdCIsIlByb21pc2UiLCJfY29uZmlnIiwicmVzb2x2ZUNvbmZpZyIsInJlcXVlc3REYXRhIiwicmVxdWVzdEhlYWRlcnMiLCJvbkNhbmNlbGVkIiwidXBsb2FkVGhyb3R0bGVkIiwiZG93bmxvYWRUaHJvdHRsZWQiLCJmbHVzaFVwbG9hZCIsImZsdXNoRG93bmxvYWQiLCJ1bnN1YnNjcmliZSIsInNpZ25hbCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJvbmxvYWRlbmQiLCJyZXNwb25zZUhlYWRlcnMiLCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiLCJlcnIiLCJyZXNwb25zZVRleHQiLCJzdGF0dXNUZXh0Iiwib3BlbiIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlYWR5U3RhdGUiLCJyZXNwb25zZVVSTCIsIm9uYWJvcnQiLCJvbmVycm9yIiwibXNnIiwib250aW1lb3V0IiwidGltZW91dEVycm9yTWVzc2FnZSIsInNldFJlcXVlc3RIZWFkZXIiLCJ1cGxvYWQiLCJjYW5jZWwiLCJDYW5jZWxlZEVycm9yIiwiYWJvcnQiLCJzdWJzY3JpYmUiLCJhYm9ydGVkIiwicGFyc2VQcm90b2NvbCIsInNlbmQiLCJjb21wb3NlU2lnbmFscyQzIiwic2lnbmFscyIsIkJvb2xlYW4iLCJjb250cm9sbGVyIiwiQWJvcnRDb250cm9sbGVyIiwicmVhc29uIiwic3RyZWFtQ2h1bmsiLCJjaHVuayIsImNodW5rU2l6ZSIsImJ5dGVMZW5ndGgiLCJwb3MiLCJyZWFkU3RyZWFtIiwiYXN5bmMiLCJzdHJlYW0iLCJhc3luY0l0ZXJhdG9yIiwicmVhZGVyIiwiZ2V0UmVhZGVyIiwidHJhY2tTdHJlYW0iLCJvblByb2dyZXNzIiwib25GaW5pc2giLCJpdGVyYWJsZSIsInJlYWRCeXRlcyIsIl9vbkZpbmlzaCIsIlJlYWRhYmxlU3RyZWFtIiwicHVsbCIsImNsb3NlIiwibG9hZGVkQnl0ZXMiLCJlbnF1ZXVlIiwicmV0dXJuIiwiaGlnaFdhdGVyTWFyayIsImdsb2JhbEZldGNoQVBJIiwiUmVxdWVzdCIsIlJlc3BvbnNlIiwiVGV4dEVuY29kZXIiLCJmYWN0b3J5IiwiZmV0Y2giLCJlbnZGZXRjaCIsImlzRmV0Y2hTdXBwb3J0ZWQiLCJpc1JlcXVlc3RTdXBwb3J0ZWQiLCJpc1Jlc3BvbnNlU3VwcG9ydGVkIiwiaXNSZWFkYWJsZVN0cmVhbVN1cHBvcnRlZCIsImVuY29kZVRleHQiLCJhcnJheUJ1ZmZlciIsInN1cHBvcnRzUmVxdWVzdFN0cmVhbSIsImR1cGxleEFjY2Vzc2VkIiwiYm9keSIsImhhc0NvbnRlbnRUeXBlIiwiZHVwbGV4Iiwic3VwcG9ydHNSZXNwb25zZVN0cmVhbSIsInJlc29sdmVycyIsInJlcyIsInJlc29sdmVCb2R5TGVuZ3RoIiwiZ2V0Q29udGVudExlbmd0aCIsInNpemUiLCJfcmVxdWVzdCIsImdldEJvZHlMZW5ndGgiLCJmZXRjaE9wdGlvbnMiLCJfZmV0Y2giLCJjb21wb3NlZFNpZ25hbCIsImNvbXBvc2VTaWduYWxzIiwidG9BYm9ydFNpZ25hbCIsInJlcXVlc3RDb250ZW50TGVuZ3RoIiwiY29udGVudFR5cGVIZWFkZXIiLCJmbHVzaCIsImlzQ3JlZGVudGlhbHNTdXBwb3J0ZWQiLCJyZXNvbHZlZE9wdGlvbnMiLCJjcmVkZW50aWFscyIsImlzU3RyZWFtUmVzcG9uc2UiLCJyZXNwb25zZUNvbnRlbnRMZW5ndGgiLCJyZXNwb25zZURhdGEiLCJzZWVkQ2FjaGUiLCJNYXAiLCJnZXRGZXRjaCIsInNlZWRzIiwic2VlZCIsImdldEZldGNoJDEiLCJrbm93bkFkYXB0ZXJzIiwiaHR0cCIsInhociIsInhockFkYXB0ZXIiLCJmZXRjaEFkYXB0ZXIuZ2V0RmV0Y2giLCJyZW5kZXJSZWFzb24iLCJpc1Jlc29sdmVkSGFuZGxlIiwiYWRhcHRlcnMkMSIsImdldEFkYXB0ZXIiLCJhZGFwdGVycyIsIm5hbWVPckFkYXB0ZXIiLCJyZWplY3RlZFJlYXNvbnMiLCJyZWFzb25zIiwic3RhdGUiLCJzIiwidGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZCIsInRocm93SWZSZXF1ZXN0ZWQiLCJkaXNwYXRjaFJlcXVlc3QiLCJWRVJTSU9OIiwidmFsaWRhdG9ycyIsImRlcHJlY2F0ZWRXYXJuaW5ncyIsInZhbGlkYXRvcnMkMyIsInZhbGlkYXRvciIsInZlcnNpb24iLCJmb3JtYXRNZXNzYWdlIiwib3B0IiwiZGVzYyIsIm9wdHMiLCJjb25zb2xlIiwid2FybiIsInNwZWxsaW5nIiwiY29ycmVjdFNwZWxsaW5nIiwidmFsaWRhdG9yJDEiLCJhc3NlcnRPcHRpb25zIiwic2NoZW1hIiwiYWxsb3dVbmtub3duIiwiQXhpb3MiLCJpbnN0YW5jZUNvbmZpZyIsImludGVyY2VwdG9ycyIsIkludGVyY2VwdG9yTWFuYWdlciIsImNvbmZpZ09yVXJsIiwiZHVtbXkiLCJjYXB0dXJlU3RhY2tUcmFjZSIsImZpcnN0TmV3bGluZUluZGV4Iiwic2Vjb25kTmV3bGluZUluZGV4Iiwic3RhY2tXaXRob3V0VHdvVG9wTGluZXMiLCJib29sZWFuIiwiZnVuY3Rpb24iLCJiYXNlVXJsIiwid2l0aFhzcmZUb2tlbiIsImNvbnRleHRIZWFkZXJzIiwicmVxdWVzdEludGVyY2VwdG9yQ2hhaW4iLCJzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMiLCJpbnRlcmNlcHRvciIsInVuc2hpZnQiLCJyZXNwb25zZUludGVyY2VwdG9yQ2hhaW4iLCJwcm9taXNlIiwiY2hhaW4iLCJvbkZ1bGZpbGxlZCIsIm9uUmVqZWN0ZWQiLCJnZXRVcmkiLCJnZW5lcmF0ZUhUVFBNZXRob2QiLCJpc0Zvcm0iLCJBeGlvcyQzIiwiQ2FuY2VsVG9rZW4iLCJleGVjdXRvciIsInJlc29sdmVQcm9taXNlIiwiX2xpc3RlbmVycyIsIm9uZnVsZmlsbGVkIiwiX3Jlc29sdmUiLCJjIiwiQ2FuY2VsVG9rZW4kMyIsIkh0dHBTdGF0dXNDb2RlIiwiQ29udGludWUiLCJTd2l0Y2hpbmdQcm90b2NvbHMiLCJQcm9jZXNzaW5nIiwiRWFybHlIaW50cyIsIk9rIiwiQ3JlYXRlZCIsIkFjY2VwdGVkIiwiTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uIiwiTm9Db250ZW50IiwiUmVzZXRDb250ZW50IiwiUGFydGlhbENvbnRlbnQiLCJNdWx0aVN0YXR1cyIsIkFscmVhZHlSZXBvcnRlZCIsIkltVXNlZCIsIk11bHRpcGxlQ2hvaWNlcyIsIk1vdmVkUGVybWFuZW50bHkiLCJGb3VuZCIsIlNlZU90aGVyIiwiTm90TW9kaWZpZWQiLCJVc2VQcm94eSIsIlVudXNlZCIsIlRlbXBvcmFyeVJlZGlyZWN0IiwiUGVybWFuZW50UmVkaXJlY3QiLCJCYWRSZXF1ZXN0IiwiVW5hdXRob3JpemVkIiwiUGF5bWVudFJlcXVpcmVkIiwiRm9yYmlkZGVuIiwiTm90Rm91bmQiLCJNZXRob2ROb3RBbGxvd2VkIiwiTm90QWNjZXB0YWJsZSIsIlByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZCIsIlJlcXVlc3RUaW1lb3V0IiwiQ29uZmxpY3QiLCJHb25lIiwiTGVuZ3RoUmVxdWlyZWQiLCJQcmVjb25kaXRpb25GYWlsZWQiLCJQYXlsb2FkVG9vTGFyZ2UiLCJVcmlUb29Mb25nIiwiVW5zdXBwb3J0ZWRNZWRpYVR5cGUiLCJSYW5nZU5vdFNhdGlzZmlhYmxlIiwiRXhwZWN0YXRpb25GYWlsZWQiLCJJbUFUZWFwb3QiLCJNaXNkaXJlY3RlZFJlcXVlc3QiLCJVbnByb2Nlc3NhYmxlRW50aXR5IiwiTG9ja2VkIiwiRmFpbGVkRGVwZW5kZW5jeSIsIlRvb0Vhcmx5IiwiVXBncmFkZVJlcXVpcmVkIiwiUHJlY29uZGl0aW9uUmVxdWlyZWQiLCJUb29NYW55UmVxdWVzdHMiLCJSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2UiLCJVbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29ucyIsIkludGVybmFsU2VydmVyRXJyb3IiLCJOb3RJbXBsZW1lbnRlZCIsIkJhZEdhdGV3YXkiLCJTZXJ2aWNlVW5hdmFpbGFibGUiLCJHYXRld2F5VGltZW91dCIsIkh0dHBWZXJzaW9uTm90U3VwcG9ydGVkIiwiVmFyaWFudEFsc29OZWdvdGlhdGVzIiwiSW5zdWZmaWNpZW50U3RvcmFnZSIsIkxvb3BEZXRlY3RlZCIsIk5vdEV4dGVuZGVkIiwiTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQiLCJXZWJTZXJ2ZXJJc0Rvd24iLCJDb25uZWN0aW9uVGltZWRPdXQiLCJPcmlnaW5Jc1VucmVhY2hhYmxlIiwiVGltZW91dE9jY3VycmVkIiwiU3NsSGFuZHNoYWtlRmFpbGVkIiwiSW52YWxpZFNzbENlcnRpZmljYXRlIiwiSHR0cFN0YXR1c0NvZGUkMyIsImF4aW9zIiwiY3JlYXRlSW5zdGFuY2UiLCJkZWZhdWx0Q29uZmlnIiwiaW5zdGFuY2UiLCJDYW5jZWwiLCJhbGwiLCJwcm9taXNlcyIsInNwcmVhZCIsImNhbGxiYWNrIiwicGF5bG9hZCIsImF4aW9zJDIiLCJmb3JtVG9KU09OIiwiZGVmYXVsdCIsImF4aW9zJDMiLCJwcmVmaXgiLCJwIiwiayIsImdldEdlb2NvZGluZ1Jlc3VsdHMiLCJzZWFyY2hQYXJhbXMiLCJsYW5nIiwiZm9jdXNQb2ludCIsInNvdXJjZXMiLCJwZWxpYXNVcmwiLCJtaW5pbWFsUmVnZXhwIiwiZ2VvY29kaW5nTGF5ZXJzIiwidGV4dCIsIlBFTElBU19VUkwiLCJsYXllcnMiLCJlbmNvZGVVUkkiLCJzZWFyY2giLCJmZWF0dXJlcyIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwidXRpbHMkMSIsInByb3RvIiwib2JqcyIsImV4aXN0aW5nIiwic3ltYm9scyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImoiLCJzeW1ib2wiLCJfX3Byb3RvX18iLCJ2aXNpdGVkIiwiV2Vha1NldCIsImFkZCIsImRlbGV0ZSIsIklOVkFMSURfVU5JQ09ERV9IRUFERVJfVkFMVUVfQ0hBUlMiLCJJTlZBTElEX0JZVEVfU1RSSU5HX0hFQURFUl9WQUxVRV9DSEFSUyIsInNhbml0aXplVmFsdWUiLCJpbnZhbGlkQ2hhcnMiLCJzdGFydCIsInRyaW1TUG9ySFRBQiIsInRvQnl0ZVN0cmluZ0hlYWRlck9iamVjdCIsImJ5dGVTdHJpbmdIZWFkZXJzIiwic2FuaXRpemVCeXRlU3RyaW5nSGVhZGVyVmFsdWUiLCJzYW5pdGl6ZUhlYWRlclZhbHVlIiwiQXhpb3NIZWFkZXJzJDEiLCJyZWRhY3RDb25maWciLCJyZWRhY3RLZXlzIiwibG93ZXJLZXlzIiwiU2V0Iiwic2VlbiIsImhhc093bk9yUHJvdG90eXBlVG9KU09OIiwicmVkYWN0Iiwic2VyaWFsaXplZENvbmZpZyIsIkVDT05OUkVGVVNFRCIsIkVSUl9GT1JNX0RBVEFfREVQVEhfRVhDRUVERUQiLCJBeGlvc0Vycm9yJDEiLCJfQmxvYiIsIm1heERlcHRoIiwiZGVwdGgiLCJJbnRlcmNlcHRvck1hbmFnZXIkMSIsImFkdmVydGlzZVpzdGRBY2NlcHRFbmNvZGluZyIsInBsYXRmb3JtJDEiLCJvd24iLCJkZWZhdWx0cyQxIiwiQ2FuY2VsZWRFcnJvciQxIiwicmF3TG9hZGVkIiwibWF4IiwiZXEiLCJhbGxvd2VkU29ja2V0UGF0aHMiLCJGT1JNX0RBVEFfQ09OVEVOVF9IRUFERVJTIiwiXyIsImhleCIsImZyb21DaGFyQ29kZSIsInBhcnNlSW50IiwicG9saWN5Iiwic2V0Rm9ybURhdGFIZWFkZXJzIiwic3RhcnRzV2l0aCIsImNvbXBvc2VTaWduYWxzJDEiLCJkZWNvZGVVUklDb21wb25lbnRTYWZlIiwiZ2xvYmFsT2JqZWN0IiwiaGFzTWF4Q29udGVudExlbmd0aCIsImhhc01heEJvZHlMZW5ndGgiLCJjb25maWdBdXRoIiwicHJvdG9jb2xJbmRleCIsInVybFRvQ2hlY2siLCJtYXliZVdpdGhBdXRoQ3JlZGVudGlhbHMiLCJwYXJzZWRVUkwiLCJ1cmxVc2VybmFtZSIsImNvbW1hIiwibWV0YSIsImVmZmVjdGl2ZUxlbiIsInBhZCIsImlkeCIsInRhaWxJc1BjdDNEIiwiZXN0aW1hdGVEYXRhVVJMRGVjb2RlZEJ5dGVzIiwib3V0Ym91bmRMZW5ndGgiLCJkZWNsYXJlZExlbmd0aCIsImJ5dGVzUmVhZCIsIm9uQ2h1bmtQcm9ncmVzcyIsIm1hdGVyaWFsaXplZFNpemUiLCJjYW5jZWxlZEVycm9yIiwidmFsaWRhdG9ycyQxIiwiQXhpb3MkMSIsIkNhbmNlbFRva2VuJDEiLCJIdHRwU3RhdHVzQ29kZSQxIiwiYXhpb3MkMSIsImdldFN0b3BzRnJvbUdlb2NvZGluZyIsInN0b3BzIiwiVVJMX1BFTElBU19QTEFDRSIsImdpZHMiLCJzdG9wU3RhdGlvbk1hcCIsInN0b3AiLCJfb2JqZWN0U3ByZWFkIiwic3RvcE9yU3RhdGlvbiIsImlkcyIsImFkZGVuZHVtIiwibGFzdFVwZGF0ZWQiLCJmYXZvdXJpdGVJZCIsImZpbHRlck9sZFNlYXJjaGVzIiwib2xkU2VhcmNoZXMiLCJkcm9wTGF5ZXJzIiwibWF0Y2hpbmdPbGRTZWFyY2hlcyIsInRha2UiLCJuZXdJdGVtIiwidGltZXRhYmxlQ2xpY2tlZCIsImFycm93Q2xpY2tlZCIsInJvdXRlTGF5ZXJzIiwibG9jYXRpb25MYXllcnMiLCJwYXJraW5nTGF5ZXJzIiwic3RvcExheWVycyIsImRlYm91bmNlZFNlYXJjaCIsImRlYm91bmNlIiwidHJhbnNwb3J0TW9kZSIsInNlYXJjaENvbnRleHQiLCJmaWx0ZXJSZXN1bHRzIiwiZ2VvY29kaW5nU2l6ZSIsInBhdGhPcHRzIiwicmVmUG9pbnQiLCJnZXRQb3NpdGlvbnMiLCJnZXRGYXZvdXJpdGVMb2NhdGlvbnMiLCJnZXRPbGRTZWFyY2hlcyIsImdldEZhdm91cml0ZVN0b3BzIiwicGFya2luZ0FyZWFTb3VyY2VzIiwiZ2V0TGFuZ3VhZ2UiLCJnZXRTdG9wQW5kU3RhdGlvbnNRdWVyeSIsImdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uc1F1ZXJ5IiwiZ2V0RmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zIiwiZ2V0RmF2b3VyaXRlUm91dGVzUXVlcnkiLCJnZXRGYXZvdXJpdGVSb3V0ZXMiLCJnZXRSb3V0ZXNRdWVyeSIsImlzUGVsaWFzTG9jYXRpb25Bd2FyZSIsImxvY2F0aW9uQXdhcmUiLCJVUkxfUEVMSUFTIiwiZmVlZElEcyIsImdlb2NvZGluZ1NlYXJjaFBhcmFtcyIsImdlb2NvZGluZ1NvdXJjZXMiLCJnZXRGdXR1cmVSb3V0ZXMiLCJjaXR5QmlrZU5ldHdvcmtzIiwiYWxsVGFyZ2V0cyIsImFsbFNvdXJjZXMiLCJzZWFyY2hDb21wb25lbnRzIiwic2VhcmNoZXMiLCJsYW5ndWFnZSIsImxhdCIsImxvbiIsInRvRml4ZWQiLCJtb2RlIiwiZ2V0Q3VycmVudFBvc2l0aW9uSWZFbXB0eSIsInNlbGVjdFBvc2l0aW9uRm9tTWFwIiwiaXRlbXMiLCJmYXZvdXJpdGVMb2NhdGlvbnMiLCJmYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnMiLCJmYXZvdXJpdGVTdG9wcyIsImhhc0Zhdm91cml0ZXMiLCJzZWxlY3RGcm9tT3duTG9jYXRpb25zIiwiZmF2b3VyaXRlcyIsImZpbHRlckZhdm91cml0ZUxvY2F0aW9ucyIsImxvY2F0aW9uSGlzdG9yeSIsImZlZWRJZHMiLCJoaXN0b3J5IiwidXNlU3RvcHMiLCJ1c2VTdGF0aW9ucyIsInN0b3BzQW5kU3RhdGlvbnMiLCJldmVyeSIsInN0b3BzU3RhdGlvbnMiLCJmaWx0ZXJGYXZvdXJpdGVTdG9wcyIsImRlZHVwZXN0b3BzIiwiZmVlZHMiLCJzdG9wSGlzdG9yeSIsImZhdm91cml0ZVJvdXRlcyIsInJvdXRlSGlzdG9yeSIsImZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uIiwiZmxhdHRlbiIsImxlYWRpbmciLCJpMThuIiwiZmFsbGJhY2tMbmciLCJyZXNvdXJjZXMiLCJkZSIsInRyYW5zbGF0aW9uIiwiYWlycGxhbmUiLCJhcnJpdmFsIiwiYmFjayIsImJpa2VyZW50YWxzdGF0aW9uIiwiYnVzIiwiY3VycmVudHBvc2l0aW9uIiwiZGVwYXJ0dXJlIiwiZmF2b3VyaXRlIiwiZmVycnkiLCJvd25sb2NhdGlvbnMiLCJsb2FkaW5nIiwicmFpbCIsInN0cmVldCIsInN1YndheSIsInN0YXRpb24iLCJ0cmFtIiwidmVudWUiLCJ3aGVyZSIsInBsYWNlIiwiZW4iLCJiaWtlcGFyayIsImNhcnBhcmsiLCJyZXF1aXJlZCIsInRyYWNrIiwiZmkiLCJ2ZWhpY2xlcmVudGFsc3RhdGlvbiIsInBsIiwic3YiLCJkZWZhdWx0TlMiLCJyZWFjdCIsInVzZVN1c3BlbnNlIiwic3R5bGVJbmplY3QiLCJjc3MiLCJyZWYiLCJpbnNlcnRBdCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwic3R5bGUiLCJjcmVhdGVFbGVtZW50IiwiZmlyc3RDaGlsZCIsImluc2VydEJlZm9yZSIsImFwcGVuZENoaWxkIiwic3R5bGVTaGVldCIsImNzc1RleHQiLCJjcmVhdGVUZXh0Tm9kZSIsImluaXQiLCJnZXRMb2NhbGFkbWluIiwic3VnZ2VzdGlvbiIsImdldFN0b3BDb2RlIiwiZ2V0TmFtZUxhYmVsIiwibWVtb2l6ZSIsInBsYWluIiwiZXNjYXBlUmVnRXhwIiwibG9uZ05hbWUiLCJhZ2VuY3kiLCJmb3JtYXRGYXZvdXJpdGVQbGFjZUxhYmVsIiwiY2xvbmVEZWVwIiwiaXNLZXlib2FyZFNlbGVjdGlvbkV2ZW50Iiwid2hpY2giLCJrZXlDb2RlIiwicHJldmVudERlZmF1bHQiLCJpc1BPSVNlYXJjaCIsImdldFBsYXRmb3JtIiwibG5nIiwiR1RGUyIsIm1vZGVzIiwiZ2V0U3VnZ2VzdGlvbkNvbnRlbnQiLCJzdWdnZXN0aW9uVHlwZSIsIl9pdGVtJHByb3BlcnRpZXMkYWRkZSIsInRhaWwxIiwibG9jYWxpdHkiLCJ0YWlsMiIsIm5hbWUxIiwibmFtZTIiLCJ0cmFuc2xhdGVkVGV4dCIsInRyYW5zbGF0ZUZ1dHVyZVJvdXRlU3VnZ2VzdGlvblRpbWUiLCJ0aW1lIiwiRGF0ZVRpbWUiLCJmcm9tU2Vjb25kcyIsImFycml2ZUJ5IiwiaGFzU2FtZSIsInBsdXMiLCJkYXlzIiwidG9Gb3JtYXQiLCJnZXRTdWdnZXN0aW9uVmFsdWUiLCJnZXRMYWJlbCIsInN1Z2dlc3Rpb25Bc0FyaWFDb250ZW50Iiwic3VnZ2VzdGlvbnMiLCJmaXJzdFN1Z2dlc3Rpb24iLCJtb2R1bGUiLCJleHBvcnRzIiwicmVxdWlyZSQkMCIsIm4iLCJnIiwiaWdub3JlIiwidG9wT25FbXB0eUhhc2giLCJzcGVlZCIsInNwZWVkQXNEdXJhdGlvbiIsImR1cmF0aW9uTWF4IiwiZHVyYXRpb25NaW4iLCJjbGlwIiwib2Zmc2V0IiwiZWFzaW5nIiwiY3VzdG9tRWFzaW5nIiwidXBkYXRlVVJMIiwicG9wc3RhdGUiLCJlbWl0RXZlbnRzIiwiY2hhckF0Iiwic3Vic3RyIiwidSIsIkludmFsaWRDaGFyYWN0ZXJFcnJvciIsInNjcm9sbEhlaWdodCIsImRvY3VtZW50RWxlbWVudCIsIm9mZnNldEhlaWdodCIsImNsaWVudEhlaWdodCIsImdldENvbXB1dGVkU3R5bGUiLCJoZWlnaHQiLCJvZmZzZXRUb3AiLCJmb2N1cyIsImFjdGl2ZUVsZW1lbnQiLCJzZXRBdHRyaWJ1dGUiLCJvdXRsaW5lIiwic2Nyb2xsVG8iLCJDdXN0b21FdmVudCIsImJ1YmJsZXMiLCJkZXRhaWwiLCJhbmNob3IiLCJ0b2dnbGUiLCJkaXNwYXRjaEV2ZW50IiwiZiIsImQiLCJjYW5jZWxTY3JvbGwiLCJjYW5jZWxBbmltYXRpb25GcmFtZSIsImFuaW1hdGVTY3JvbGwiLCJ0YWdOYW1lIiwieSIsInBhZ2VZT2Zmc2V0IiwicXVlcnlTZWxlY3RvciIsIkUiLCJPIiwib2Zmc2V0UGFyZW50IiwiaW5uZXJIZWlnaHQiLCJTIiwiSSIsIk0iLCJMIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwicHVzaFN0YXRlIiwic21vb3RoU2Nyb2xsIiwidGl0bGUiLCJtYXRjaE1lZGlhIiwiZGVmYXVsdFByZXZlbnRlZCIsImJ1dHRvbiIsIm1ldGFLZXkiLCJjdHJsS2V5Iiwic2hpZnRLZXkiLCJjbG9zZXN0IiwiaG9zdG5hbWUiLCJwYXRobmFtZSIsImhhc2giLCJyZXBsYWNlU3RhdGUiLCJkZXN0cm95IiwiRWxlbWVudCIsIl9fY3JlYXRlQmluZGluZyIsIl9fZXhwb3J0U3RhciIsInVzZUFycm93TmF2aWdhdGlvbiIsImxpc3RJdGVtcyIsIm9uQXJyb3dVcE9yRG93biIsInVzZVN0YXRlIiwidXNlQ2FsbGJhY2siLCJ1c2VFZmZlY3QiLCJzZWxlY3RlZEluZGV4IiwidXNlRGVib3VuY2UiLCJ1c2VFbGVtZW50U2l6ZSIsInVzZVJlZiIsIndpZHRoIiwiY2xpZW50V2lkdGgiLCJ1c2VJbnRlcnNlY3Rpb25PYnNlcnZlciIsImlzSW50ZXJzZWN0aW5nIiwiSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLCJvYnNlcnZlIiwidW5vYnNlcnZlIiwiY29udGFpbmVyUmVmIiwiaXNWaXNpYmxlIiwidXNlSXNCcmVha3BvaW50IiwieHMiLCJtb2JpbGVTbWFsbCIsIm1vYmlsZSIsInRhYmxldCIsInRhYmxldExhcmdlIiwiZGVza3RvcFNtYWxsIiwiZGVza3RvcCIsImRlc2t0b3BMYXJnZSIsImlubmVyV2lkdGgiLCJ1c2VPblJlc2l6ZSIsInVzZUlzTG9hZGluZ0FmdGVyRXJyb3IiLCJ1c2VJc01vYmlsZSIsInVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QiLCJ1c2VMYXlvdXRFZmZlY3QiLCJ1c2VPbkxvc2VGb2N1c1dpdGhpbiIsIndhdGNoIiwicGFzc2l2ZSIsInVzZU9uV2luZG93Rm9jdXMiLCJ2aXNpYmlsaXR5U3RhdGUiLCJ1c2VPdXRzaWRlUmVhY3RlciIsImNvbnRhaW5zIiwidXNlUnVuQWZ0ZXJVcGRhdGUiLCJ1c2VTY3JvbGxMb2NrIiwibG9jayIsInNjcm9sbFkiLCJ0b3AiLCJ1bmxvY2siLCJfX2ltcG9ydERlZmF1bHQiLCJfX2VzTW9kdWxlIiwidXNlU21vb3RoU2Nyb2xsIiwiRnVuY3Rpb24iLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJvYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwiU3VnZ2VzdGlvbiIsIl9yZWYiLCJnZXRJdGVtUHJvcHMiLCJoaWdobGlnaHRlZEluZGV4IiwiaXRlbUluZGV4Iiwic3R5bGVzIiwicmVzdCIsIl9leGNsdWRlZCIsInVzZVRyYW5zbGF0aW9uIiwiUmVhY3QiLCJjbGFzc05hbWUiLCJjeCIsInN1Z2dlc3Rpb25IaWdobGlnaHRlZCIsIlN1Z2dlc3Rpb25JdGVtIiwiaXRlbVNoYXBlIiwiUHJvcFR5cGVzIiwiTk9ERV9FTlYiLCJzaGFwZSIsInN0cmluZyIsInNlbGVjdGVkSWNvbklkIiwiaWNvbkNvbG9yIiwiY29sb3IiLCJib29sIiwiU3VnZ2VzdGlvbnMiLCJfcmVmMiIsImdldE1lbnVQcm9wcyIsImhpZGRlbiIsInJlbmRlckNsZWFySGlzdG9yeUJ1dHRvbiIsImhhbmRsZUNsZWFySGlzdG9yeSIsIl9leGNsdWRlZDIiLCJzdWdnZXN0aW9uc0NvbnRhaW5lck9wZW4iLCJzdWdnZXN0aW9uc0NvbnRhaW5lciIsInN1Z2dlc3Rpb25zTGlzdCIsIm9uQ2xpY2siLCJwcm9wVHlwZXMiLCJpc1JlcXVpcmVkIiwiZnVuYyIsIm9iamVjdE9mIiwiYXJyYXlPZiIsImRlZmF1bHRQcm9wcyIsIkNsZWFyQnV0dG9uIiwiY2xlYXJJbnB1dCIsIm9uS2V5RG93biIsIkljb24iLCJpbWciLCJwbGFjZWhvbGRlciIsImdldElucHV0UHJvcHMiLCJnZXRMYWJlbFByb3BzIiwiYXJpYUxhYmVsIiwiaW5wdXRSZWYiLCJyZW5kZXJMYWJlbCIsImlzTW9iaWxlIiwiaW5wdXRDbGFzc05hbWUiLCJjbGVhckJ1dHRvbkNvbG9yIiwiYXV0b0ZvY3VzIiwiaW5wdXRPbkJsdXIiLCJjdXJzb3JSZWYiLCJzZXRTZWxlY3Rpb25SYW5nZSIsImNvbnRhaW5lciIsImh0bWxGb3IiLCJ0aGluIiwiaGFzVmFsdWUiLCJvbkJsdXIiLCJvbkNoYW5nZSIsInNlbGVjdGlvblN0YXJ0Iiwib25lT2ZUeXBlIiwib2JqZWN0IiwiTW9iaWxlVmlldyIsImFwcEVsZW1lbnQiLCJvblNlbGVjdGVkSXRlbUNoYW5nZSIsImZvbnRXZWlnaHRzIiwiY2xlYXJPbGRTZWFyY2hlcyIsInN1Z2dlc3Rpb25Qcm9wcyIsImFyaWFQcm9wcyIsIm1vYmlsZUxhYmVsIiwic2hvd1Njcm9sbCIsImRpc3BhdGNoIiwiY29sb3JzIiwiaG9va3MiLCJtb2JpbGVTdHlsZXMiLCJtb2JpbGVOb1Njcm9sbFN0eWxlcyIsImlucHV0SWQiLCJpc0RpYWxvZ09wZW4iLCJzZXREaWFsb2dPcGVuIiwiUmVhY3RNb2RhbCIsInNldEFwcEVsZW1lbnQiLCJyZW5kZXJNb2JpbGUiLCJzZXRIaWdobGlnaHRlZEluZGV4IiwidXNlQ29tYm9ib3giLCJpbnB1dFZhbHVlIiwiaXNPcGVuIiwiY2hhbmdlcyIsInNlbGVjdGVkSXRlbSIsImRlZmF1bHRIaWdobGlnaHRlZEluZGV4Iiwib25JbnB1dFZhbHVlQ2hhbmdlIiwic3RhdGVSZWR1Y2VyIiwib2xkU3RhdGUiLCJzdGF0ZUNoYW5nZVR5cGVzIiwiSW5wdXRLZXlEb3duRXNjYXBlIiwiSW5wdXRLZXlEb3duRW50ZXIiLCJlbnRlclBlbmRpbmciLCJJbnB1dEJsdXIiLCJpdGVtVG9TdHJpbmciLCJzdXBwcmVzc1JlZkVycm9yIiwiYXJpYVJlcXVpcmVkVGV4dCIsIlNlYXJjaEJhcklkIiwiYXJpYUN1cnJlbnRTdWdnZXN0aW9uIiwib3ZlcmxheUNsYXNzTmFtZSIsInNob3VsZFJldHVybkZvY3VzQWZ0ZXJDbG9zZSIsInNob3VsZENsb3NlT25Fc2MiLCJwcmltYXJ5IiwiYWNjZXNzaWJsZVByaW1hcnkiLCJob3ZlciIsIm1lZGl1bSIsInRhYkluZGV4IiwiRGlhbG9nTW9kYWwiLCJpc01vZGFsT3BlbiIsImhhbmRsZUNsb3NlIiwiaGVhZGVyVGV4dCIsInByaW1hcnlCdXR0b25UZXh0Iiwic2Vjb25kYXJ5QnV0dG9uVGV4dCIsInByaW1hcnlCdXR0b25PbkNsaWNrIiwic2Vjb25kYXJ5QnV0dG9uT25DbGljayIsInNlYXJjaFJlZHVjZXIiLCJhY3Rpb24iLCJzaG93T3duUGxhY2VzIiwicGVuZGluZ1NlbGVjdGlvbiIsImlzQ2xlYXJlZCIsImluaXRpYWxTdGF0ZSIsImlzTWVudU9wZW4iLCJwb3NpdGlvbnMiLCJEVEF1dG9zdWdnZXN0Iiwib25TZWxlY3QiLCJpY29uIiwib25DbGVhciIsImdldEF1dG9TdWdnZXN0SWNvbnMiLCJoYW5kbGVWaWFQb2ludHMiLCJmb2N1c0NoYW5nZSIsInN0b3JlUmVmIiwidHJhbnNsYXRlZFBsYWNlaG9sZGVyIiwibW9kZVNldCIsImlzRW1iZWRkZWQiLCJ1c2VSZWR1Y2VyIiwiZmV0Y2hTdWdnZXN0aW9ucyIsImlzTG9jYXRpb25TZWFyY2giLCJuZXdUYXJnZXRzIiwiZ2V0TmV3VGFyZ2V0cyIsIm93blBsYWNlcyIsInVzZUFsbCIsImV4ZWN1dGVTZWFyY2giLCJzZWFyY2hSZXN1bHQiLCJuZXdTdWdnZXN0aW9ucyIsInRyYW5zbGF0ZWRTdWdnZXN0aW9uIiwic2VsZWN0U3VnZ2VzdGlvbiIsImJsdXIiLCJzZWxlY3RJdGVtIiwib3Blbk1lbnUiLCJjbG9zZU1lbnUiLCJJdGVtQ2xpY2siLCJJbnB1dENsaWNrIiwib25Jc09wZW5DaGFuZ2UiLCJwZW5kaW5nRW50ZXIiLCJiYXNlSXRlbVByb3BzIiwiYXJpYUZhdm91cml0ZVN0cmluZyIsImFyaWFMYWJlbFRleHQiLCJnZXRBcmlhUHJvcHMiLCJhcmlhQmFySWQiLCJhcmlhTGFiZWxJbnN0cnVjdGlvbnMiLCJtb3ZpbmdUb0Rlc3RpbmF0aW9uRmllbGRUZXh0IiwiYXJpYVN1Z2dlc3Rpb25MZW4iLCJjb3VudCIsInNlbGVjdGlvbiIsIkZyYWdtZW50IiwibW9iaWxlQ2xlYXJPbGRTZWFyY2hlcyIsImNsZWFyRnV0dXJlUm91dGVzIiwicm91dGVzUHJlZml4Iiwic3RvcHNQcmVmaXgiLCJkZWZhdWx0Q29sb3JzIiwiSTE4bmV4dFByb3ZpZGVy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
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(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"],t):t((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,t,n,r,o,u,i,s,a,l,c,d,p,f,h,g,b,m,y,E,A,F,w){"use strict";function v(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var _=v(t),C=v(n),D=v(o),S=v(u),B=v(i),O=v(s),R=v(a),x=v(l),k=v(c),j=v(d),P=v(f),T=v(b),N=v(m),L=v(y),M=v(A),I=v(F),U=v(w);function q(e){return q="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},q(e)}function z(e){var t=function(e,t){if("object"!=q(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=q(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==q(t)?t:t+""}function H(e,t,n){return(t=z(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function V(e,t){return e&&t&&e===t}const W=["stop","station","favouriteStop","favouriteStation"],$=["favouriteVehicleRentalStation","bikestation"];function J(e){if(!e)return"";const t=e.split(":");return 0===t.length?"":`citybikes${t[0]}:bikestation:${t[1]}`}function K(e,t){const n=e.properties,r=t.properties;if("FutureRoute"===e.type&&"FutureRoute"===t.type){const e=n.origin,t=n.destination,o=r.origin,u=r.destination;return`${e.name}//${e.localadmin}//${t.name}//${t.localadmin}`===`${o.name}//${o.localadmin}//${u.name}//${u.localadmin}`}if("FutureRoute"===e.type||"FutureRoute"===t.type)return!1;if($.includes(n.layer)&&$.includes(r.layer)){return(n.gid||J(n.labelId))===(r.gid||J(r.labelId))}if(n.gtfsId&&r.gtfsId)return n.gtfsId===r.gtfsId;if(W.includes(n.layer)&&W.includes(r.layer)&&n.gid&&r.gid)return n.gid===r.gid;const o=e&&e.geometry?e.geometry.coordinates:void 0,u=t&&t.geometry?t.geometry.coordinates:void 0;return!!(o&&u&&Math.abs(o[0]-u[0])<1e-6&&Math.abs(o[1]-u[1])<1e-6&&(V(n.name,r.name)||V(n.label,r.label)||V(n.address,r.address)||V(n.address,r.label)||V(n.label,r.address)))}const G=e=>R.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-\u088F\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\u0C5C\u0C5D\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDC-\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-\uA7DC\uA7F1-\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\u{10000}-\u{1000B}\u{1000D}-\u{10026}\u{10028}-\u{1003A}\u{1003C}\u{1003D}\u{1003F}-\u{1004D}\u{10050}-\u{1005D}\u{10080}-\u{100FA}\u{10280}-\u{1029C}\u{102A0}-\u{102D0}\u{10300}-\u{1031F}\u{1032D}-\u{10340}\u{10342}-\u{10349}\u{10350}-\u{10375}\u{10380}-\u{1039D}\u{103A0}-\u{103C3}\u{103C8}-\u{103CF}\u{10400}-\u{1049D}\u{104B0}-\u{104D3}\u{104D8}-\u{104FB}\u{10500}-\u{10527}\u{10530}-\u{10563}\u{10570}-\u{1057A}\u{1057C}-\u{1058A}\u{1058C}-\u{10592}\u{10594}\u{10595}\u{10597}-\u{105A1}\u{105A3}-\u{105B1}\u{105B3}-\u{105B9}\u{105BB}\u{105BC}\u{105C0}-\u{105F3}\u{10600}-\u{10736}\u{10740}-\u{10755}\u{10760}-\u{10767}\u{10780}-\u{10785}\u{10787}-\u{107B0}\u{107B2}-\u{107BA}\u{10800}-\u{10805}\u{10808}\u{1080A}-\u{10835}\u{10837}\u{10838}\u{1083C}\u{1083F}-\u{10855}\u{10860}-\u{10876}\u{10880}-\u{1089E}\u{108E0}-\u{108F2}\u{108F4}\u{108F5}\u{10900}-\u{10915}\u{10920}-\u{10939}\u{10940}-\u{10959}\u{10980}-\u{109B7}\u{109BE}\u{109BF}\u{10A00}\u{10A10}-\u{10A13}\u{10A15}-\u{10A17}\u{10A19}-\u{10A35}\u{10A60}-\u{10A7C}\u{10A80}-\u{10A9C}\u{10AC0}-\u{10AC7}\u{10AC9}-\u{10AE4}\u{10B00}-\u{10B35}\u{10B40}-\u{10B55}\u{10B60}-\u{10B72}\u{10B80}-\u{10B91}\u{10C00}-\u{10C48}\u{10C80}-\u{10CB2}\u{10CC0}-\u{10CF2}\u{10D00}-\u{10D23}\u{10D4A}-\u{10D65}\u{10D6F}-\u{10D85}\u{10E80}-\u{10EA9}\u{10EB0}\u{10EB1}\u{10EC2}-\u{10EC7}\u{10F00}-\u{10F1C}\u{10F27}\u{10F30}-\u{10F45}\u{10F70}-\u{10F81}\u{10FB0}-\u{10FC4}\u{10FE0}-\u{10FF6}\u{11003}-\u{11037}\u{11071}\u{11072}\u{11075}\u{11083}-\u{110AF}\u{110D0}-\u{110E8}\u{11103}-\u{11126}\u{11144}\u{11147}\u{11150}-\u{11172}\u{11176}\u{11183}-\u{111B2}\u{111C1}-\u{111C4}\u{111DA}\u{111DC}\u{11200}-\u{11211}\u{11213}-\u{1122B}\u{1123F}\u{11240}\u{11280}-\u{11286}\u{11288}\u{1128A}-\u{1128D}\u{1128F}-\u{1129D}\u{1129F}-\u{112A8}\u{112B0}-\u{112DE}\u{11305}-\u{1130C}\u{1130F}\u{11310}\u{11313}-\u{11328}\u{1132A}-\u{11330}\u{11332}\u{11333}\u{11335}-\u{11339}\u{1133D}\u{11350}\u{1135D}-\u{11361}\u{11380}-\u{11389}\u{1138B}\u{1138E}\u{11390}-\u{113B5}\u{113B7}\u{113D1}\u{113D3}\u{11400}-\u{11434}\u{11447}-\u{1144A}\u{1145F}-\u{11461}\u{11480}-\u{114AF}\u{114C4}\u{114C5}\u{114C7}\u{11580}-\u{115AE}\u{115D8}-\u{115DB}\u{11600}-\u{1162F}\u{11644}\u{11680}-\u{116AA}\u{116B8}\u{11700}-\u{1171A}\u{11740}-\u{11746}\u{11800}-\u{1182B}\u{118A0}-\u{118DF}\u{118FF}-\u{11906}\u{11909}\u{1190C}-\u{11913}\u{11915}\u{11916}\u{11918}-\u{1192F}\u{1193F}\u{11941}\u{119A0}-\u{119A7}\u{119AA}-\u{119D0}\u{119E1}\u{119E3}\u{11A00}\u{11A0B}-\u{11A32}\u{11A3A}\u{11A50}\u{11A5C}-\u{11A89}\u{11A9D}\u{11AB0}-\u{11AF8}\u{11BC0}-\u{11BE0}\u{11C00}-\u{11C08}\u{11C0A}-\u{11C2E}\u{11C40}\u{11C72}-\u{11C8F}\u{11D00}-\u{11D06}\u{11D08}\u{11D09}\u{11D0B}-\u{11D30}\u{11D46}\u{11D60}-\u{11D65}\u{11D67}\u{11D68}\u{11D6A}-\u{11D89}\u{11D98}\u{11DB0}-\u{11DDB}\u{11EE0}-\u{11EF2}\u{11F02}\u{11F04}-\u{11F10}\u{11F12}-\u{11F33}\u{11FB0}\u{12000}-\u{12399}\u{12480}-\u{12543}\u{12F90}-\u{12FF0}\u{13000}-\u{1342F}\u{13441}-\u{13446}\u{13460}-\u{143FA}\u{14400}-\u{14646}\u{16100}-\u{1611D}\u{16800}-\u{16A38}\u{16A40}-\u{16A5E}\u{16A70}-\u{16ABE}\u{16AD0}-\u{16AED}\u{16B00}-\u{16B2F}\u{16B40}-\u{16B43}\u{16B63}-\u{16B77}\u{16B7D}-\u{16B8F}\u{16D40}-\u{16D6C}\u{16E40}-\u{16E7F}\u{16EA0}-\u{16EB8}\u{16EBB}-\u{16ED3}\u{16F00}-\u{16F4A}\u{16F50}\u{16F93}-\u{16F9F}\u{16FE0}\u{16FE1}\u{16FE3}\u{16FF2}\u{16FF3}\u{17000}-\u{18CD5}\u{18CFF}-\u{18D1E}\u{18D80}-\u{18DF2}\u{1AFF0}-\u{1AFF3}\u{1AFF5}-\u{1AFFB}\u{1AFFD}\u{1AFFE}\u{1B000}-\u{1B122}\u{1B132}\u{1B150}-\u{1B152}\u{1B155}\u{1B164}-\u{1B167}\u{1B170}-\u{1B2FB}\u{1BC00}-\u{1BC6A}\u{1BC70}-\u{1BC7C}\u{1BC80}-\u{1BC88}\u{1BC90}-\u{1BC99}\u{1D400}-\u{1D454}\u{1D456}-\u{1D49C}\u{1D49E}\u{1D49F}\u{1D4A2}\u{1D4A5}\u{1D4A6}\u{1D4A9}-\u{1D4AC}\u{1D4AE}-\u{1D4B9}\u{1D4BB}\u{1D4BD}-\u{1D4C3}\u{1D4C5}-\u{1D505}\u{1D507}-\u{1D50A}\u{1D50D}-\u{1D514}\u{1D516}-\u{1D51C}\u{1D51E}-\u{1D539}\u{1D53B}-\u{1D53E}\u{1D540}-\u{1D544}\u{1D546}\u{1D54A}-\u{1D550}\u{1D552}-\u{1D6A5}\u{1D6A8}-\u{1D6C0}\u{1D6C2}-\u{1D6DA}\u{1D6DC}-\u{1D6FA}\u{1D6FC}-\u{1D714}\u{1D716}-\u{1D734}\u{1D736}-\u{1D74E}\u{1D750}-\u{1D76E}\u{1D770}-\u{1D788}\u{1D78A}-\u{1D7A8}\u{1D7AA}-\u{1D7C2}\u{1D7C4}-\u{1D7CB}\u{1DF00}-\u{1DF1E}\u{1DF25}-\u{1DF2A}\u{1E030}-\u{1E06D}\u{1E100}-\u{1E12C}\u{1E137}-\u{1E13D}\u{1E14E}\u{1E290}-\u{1E2AD}\u{1E2C0}-\u{1E2EB}\u{1E4D0}-\u{1E4EB}\u{1E5D0}-\u{1E5ED}\u{1E5F0}\u{1E6C0}-\u{1E6DE}\u{1E6E0}-\u{1E6E2}\u{1E6E4}\u{1E6E5}\u{1E6E7}-\u{1E6ED}\u{1E6F0}-\u{1E6F4}\u{1E6FE}\u{1E6FF}\u{1E7E0}-\u{1E7E6}\u{1E7E8}-\u{1E7EB}\u{1E7ED}\u{1E7EE}\u{1E7F0}-\u{1E7FE}\u{1E800}-\u{1E8C4}\u{1E900}-\u{1E943}\u{1E94B}\u{1EE00}-\u{1EE03}\u{1EE05}-\u{1EE1F}\u{1EE21}\u{1EE22}\u{1EE24}\u{1EE27}\u{1EE29}-\u{1EE32}\u{1EE34}-\u{1EE37}\u{1EE39}\u{1EE3B}\u{1EE42}\u{1EE47}\u{1EE49}\u{1EE4B}\u{1EE4D}-\u{1EE4F}\u{1EE51}\u{1EE52}\u{1EE54}\u{1EE57}\u{1EE59}\u{1EE5B}\u{1EE5D}\u{1EE5F}\u{1EE61}\u{1EE62}\u{1EE64}\u{1EE67}-\u{1EE6A}\u{1EE6C}-\u{1EE72}\u{1EE74}-\u{1EE77}\u{1EE79}-\u{1EE7C}\u{1EE7E}\u{1EE80}-\u{1EE89}\u{1EE8B}-\u{1EE9B}\u{1EEA1}-\u{1EEA3}\u{1EEA5}-\u{1EEA9}\u{1EEAB}-\u{1EEBB}\u{20000}-\u{2A6DF}\u{2A700}-\u{2B81D}\u{2B820}-\u{2CEAD}\u{2CEB0}-\u{2EBE0}\u{2EBF0}-\u{2EE5D}\u{2F800}-\u{2FA1D}\u{30000}-\u{3134A}\u{31350}-\u{33479}]+)/u),Q=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-\u088F\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\u0C5C\u0C5D\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDC-\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-\uA7DC\uA7F1-\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\u{10000}-\u{1000B}\u{1000D}-\u{10026}\u{10028}-\u{1003A}\u{1003C}\u{1003D}\u{1003F}-\u{1004D}\u{10050}-\u{1005D}\u{10080}-\u{100FA}\u{10280}-\u{1029C}\u{102A0}-\u{102D0}\u{10300}-\u{1031F}\u{1032D}-\u{10340}\u{10342}-\u{10349}\u{10350}-\u{10375}\u{10380}-\u{1039D}\u{103A0}-\u{103C3}\u{103C8}-\u{103CF}\u{10400}-\u{1049D}\u{104B0}-\u{104D3}\u{104D8}-\u{104FB}\u{10500}-\u{10527}\u{10530}-\u{10563}\u{10570}-\u{1057A}\u{1057C}-\u{1058A}\u{1058C}-\u{10592}\u{10594}\u{10595}\u{10597}-\u{105A1}\u{105A3}-\u{105B1}\u{105B3}-\u{105B9}\u{105BB}\u{105BC}\u{105C0}-\u{105F3}\u{10600}-\u{10736}\u{10740}-\u{10755}\u{10760}-\u{10767}\u{10780}-\u{10785}\u{10787}-\u{107B0}\u{107B2}-\u{107BA}\u{10800}-\u{10805}\u{10808}\u{1080A}-\u{10835}\u{10837}\u{10838}\u{1083C}\u{1083F}-\u{10855}\u{10860}-\u{10876}\u{10880}-\u{1089E}\u{108E0}-\u{108F2}\u{108F4}\u{108F5}\u{10900}-\u{10915}\u{10920}-\u{10939}\u{10940}-\u{10959}\u{10980}-\u{109B7}\u{109BE}\u{109BF}\u{10A00}\u{10A10}-\u{10A13}\u{10A15}-\u{10A17}\u{10A19}-\u{10A35}\u{10A60}-\u{10A7C}\u{10A80}-\u{10A9C}\u{10AC0}-\u{10AC7}\u{10AC9}-\u{10AE4}\u{10B00}-\u{10B35}\u{10B40}-\u{10B55}\u{10B60}-\u{10B72}\u{10B80}-\u{10B91}\u{10C00}-\u{10C48}\u{10C80}-\u{10CB2}\u{10CC0}-\u{10CF2}\u{10D00}-\u{10D23}\u{10D4A}-\u{10D65}\u{10D6F}-\u{10D85}\u{10E80}-\u{10EA9}\u{10EB0}\u{10EB1}\u{10EC2}-\u{10EC7}\u{10F00}-\u{10F1C}\u{10F27}\u{10F30}-\u{10F45}\u{10F70}-\u{10F81}\u{10FB0}-\u{10FC4}\u{10FE0}-\u{10FF6}\u{11003}-\u{11037}\u{11071}\u{11072}\u{11075}\u{11083}-\u{110AF}\u{110D0}-\u{110E8}\u{11103}-\u{11126}\u{11144}\u{11147}\u{11150}-\u{11172}\u{11176}\u{11183}-\u{111B2}\u{111C1}-\u{111C4}\u{111DA}\u{111DC}\u{11200}-\u{11211}\u{11213}-\u{1122B}\u{1123F}\u{11240}\u{11280}-\u{11286}\u{11288}\u{1128A}-\u{1128D}\u{1128F}-\u{1129D}\u{1129F}-\u{112A8}\u{112B0}-\u{112DE}\u{11305}-\u{1130C}\u{1130F}\u{11310}\u{11313}-\u{11328}\u{1132A}-\u{11330}\u{11332}\u{11333}\u{11335}-\u{11339}\u{1133D}\u{11350}\u{1135D}-\u{11361}\u{11380}-\u{11389}\u{1138B}\u{1138E}\u{11390}-\u{113B5}\u{113B7}\u{113D1}\u{113D3}\u{11400}-\u{11434}\u{11447}-\u{1144A}\u{1145F}-\u{11461}\u{11480}-\u{114AF}\u{114C4}\u{114C5}\u{114C7}\u{11580}-\u{115AE}\u{115D8}-\u{115DB}\u{11600}-\u{1162F}\u{11644}\u{11680}-\u{116AA}\u{116B8}\u{11700}-\u{1171A}\u{11740}-\u{11746}\u{11800}-\u{1182B}\u{118A0}-\u{118DF}\u{118FF}-\u{11906}\u{11909}\u{1190C}-\u{11913}\u{11915}\u{11916}\u{11918}-\u{1192F}\u{1193F}\u{11941}\u{119A0}-\u{119A7}\u{119AA}-\u{119D0}\u{119E1}\u{119E3}\u{11A00}\u{11A0B}-\u{11A32}\u{11A3A}\u{11A50}\u{11A5C}-\u{11A89}\u{11A9D}\u{11AB0}-\u{11AF8}\u{11BC0}-\u{11BE0}\u{11C00}-\u{11C08}\u{11C0A}-\u{11C2E}\u{11C40}\u{11C72}-\u{11C8F}\u{11D00}-\u{11D06}\u{11D08}\u{11D09}\u{11D0B}-\u{11D30}\u{11D46}\u{11D60}-\u{11D65}\u{11D67}\u{11D68}\u{11D6A}-\u{11D89}\u{11D98}\u{11DB0}-\u{11DDB}\u{11EE0}-\u{11EF2}\u{11F02}\u{11F04}-\u{11F10}\u{11F12}-\u{11F33}\u{11FB0}\u{12000}-\u{12399}\u{12480}-\u{12543}\u{12F90}-\u{12FF0}\u{13000}-\u{1342F}\u{13441}-\u{13446}\u{13460}-\u{143FA}\u{14400}-\u{14646}\u{16100}-\u{1611D}\u{16800}-\u{16A38}\u{16A40}-\u{16A5E}\u{16A70}-\u{16ABE}\u{16AD0}-\u{16AED}\u{16B00}-\u{16B2F}\u{16B40}-\u{16B43}\u{16B63}-\u{16B77}\u{16B7D}-\u{16B8F}\u{16D40}-\u{16D6C}\u{16E40}-\u{16E7F}\u{16EA0}-\u{16EB8}\u{16EBB}-\u{16ED3}\u{16F00}-\u{16F4A}\u{16F50}\u{16F93}-\u{16F9F}\u{16FE0}\u{16FE1}\u{16FE3}\u{16FF2}\u{16FF3}\u{17000}-\u{18CD5}\u{18CFF}-\u{18D1E}\u{18D80}-\u{18DF2}\u{1AFF0}-\u{1AFF3}\u{1AFF5}-\u{1AFFB}\u{1AFFD}\u{1AFFE}\u{1B000}-\u{1B122}\u{1B132}\u{1B150}-\u{1B152}\u{1B155}\u{1B164}-\u{1B167}\u{1B170}-\u{1B2FB}\u{1BC00}-\u{1BC6A}\u{1BC70}-\u{1BC7C}\u{1BC80}-\u{1BC88}\u{1BC90}-\u{1BC99}\u{1D400}-\u{1D454}\u{1D456}-\u{1D49C}\u{1D49E}\u{1D49F}\u{1D4A2}\u{1D4A5}\u{1D4A6}\u{1D4A9}-\u{1D4AC}\u{1D4AE}-\u{1D4B9}\u{1D4BB}\u{1D4BD}-\u{1D4C3}\u{1D4C5}-\u{1D505}\u{1D507}-\u{1D50A}\u{1D50D}-\u{1D514}\u{1D516}-\u{1D51C}\u{1D51E}-\u{1D539}\u{1D53B}-\u{1D53E}\u{1D540}-\u{1D544}\u{1D546}\u{1D54A}-\u{1D550}\u{1D552}-\u{1D6A5}\u{1D6A8}-\u{1D6C0}\u{1D6C2}-\u{1D6DA}\u{1D6DC}-\u{1D6FA}\u{1D6FC}-\u{1D714}\u{1D716}-\u{1D734}\u{1D736}-\u{1D74E}\u{1D750}-\u{1D76E}\u{1D770}-\u{1D788}\u{1D78A}-\u{1D7A8}\u{1D7AA}-\u{1D7C2}\u{1D7C4}-\u{1D7CB}\u{1DF00}-\u{1DF1E}\u{1DF25}-\u{1DF2A}\u{1E030}-\u{1E06D}\u{1E100}-\u{1E12C}\u{1E137}-\u{1E13D}\u{1E14E}\u{1E290}-\u{1E2AD}\u{1E2C0}-\u{1E2EB}\u{1E4D0}-\u{1E4EB}\u{1E5D0}-\u{1E5ED}\u{1E5F0}\u{1E6C0}-\u{1E6DE}\u{1E6E0}-\u{1E6E2}\u{1E6E4}\u{1E6E5}\u{1E6E7}-\u{1E6ED}\u{1E6F0}-\u{1E6F4}\u{1E6FE}\u{1E6FF}\u{1E7E0}-\u{1E7E6}\u{1E7E8}-\u{1E7EB}\u{1E7ED}\u{1E7EE}\u{1E7F0}-\u{1E7FE}\u{1E800}-\u{1E8C4}\u{1E900}-\u{1E943}\u{1E94B}\u{1EE00}-\u{1EE03}\u{1EE05}-\u{1EE1F}\u{1EE21}\u{1EE22}\u{1EE24}\u{1EE27}\u{1EE29}-\u{1EE32}\u{1EE34}-\u{1EE37}\u{1EE39}\u{1EE3B}\u{1EE42}\u{1EE47}\u{1EE49}\u{1EE4B}\u{1EE4D}-\u{1EE4F}\u{1EE51}\u{1EE52}\u{1EE54}\u{1EE57}\u{1EE59}\u{1EE5B}\u{1EE5D}\u{1EE5F}\u{1EE61}\u{1EE62}\u{1EE64}\u{1EE67}-\u{1EE6A}\u{1EE6C}-\u{1EE72}\u{1EE74}-\u{1EE77}\u{1EE79}-\u{1EE7C}\u{1EE7E}\u{1EE80}-\u{1EE89}\u{1EE8B}-\u{1EE9B}\u{1EEA1}-\u{1EEA3}\u{1EEA5}-\u{1EEA9}\u{1EEAB}-\u{1EEBB}\u{20000}-\u{2A6DF}\u{2A700}-\u{2B81D}\u{2B820}-\u{2CEAD}\u{2CEB0}-\u{2EBE0}\u{2EBF0}-\u{2EE5D}\u{2F800}-\u{2FA1D}\u{30000}-\u{3134A}\u{31350}-\u{33479}]+$/u.test(e),Z="back",Y="currentPosition",ee="favouriteStop",te="favouriteStation",ne="favouritePlace",re="favouriteRoute",oe="favouriteVehicleRentalStation",ue="futureRoute",ie="station",se="selectFromMap",ae="ownLocations",le="stop",ce="bikestation",de="carpark",pe="bikepark",fe=({layer:e,type:t})=>"stop"===e||"favouriteStop"===e||"stop"===t||"favouriteStop"===t,he=(e,t)=>{switch(e){case Y:return 1;case Z:return.9;case se:return.8;case ae:return.79;case te:case ne:case ee:case re:case oe:return.45;case ue:return.44;case ie:return R.default(t)&&0===t.indexOf("gtfs")?.43:.42;case de:case pe:case ce:return.38;case le:return.36;default:return.41}},ge=(e,t,n="")=>{if(!Array.isArray(t)||!t.length)return t;const r=t=>R.default(t)&&e&&e.test(t),o=G(n),u=r(o),i=x.default(t.filter(e=>e),[e=>u&&r(G(e.properties.shortName))&&0===G(e.properties.shortName).indexOf(o)?1:0,e=>{const{confidence:t,layer:n,source:r}=e.properties;if(0===o.length)return he(n,r);if(!t)return he(n,r)+((e,t)=>R.default(e)&&0!==e.length?["name","label","address","shortName"].map(e=>({name:e,value:t[e]})).filter(e=>R.default(e.value)&&e.value.length>0).map(t=>{let n=G(t.value);return 0===n.indexOf(e)?("shortName"===t.name&&Q(n)&&([n]=X(n)),.5+e.length/n.length):.5*e.length/(e.length+1)}).reduce((e,t)=>t>e?t:e,0):0)(o,e.properties);switch(n){case ie:return t+(0===r.indexOf("gtfs")?.02:.01);case le:case de:case pe:return t-.05;case ce:return t-.04;default:return t}},e=>{if(e.properties.shortName)return Q(e.properties.shortName)?X(e.properties.shortName)[0]:e.properties.shortName},e=>{if(e.properties.shortName)return Q(e.properties.shortName)?X(e.properties.shortName)[1]:e.properties.shortName},"properties.longName"],["desc","desc","asc","asc","asc"]);return k.default(i,K)},be=(e,t)=>null!=t&&-1!==e.lastIndexOf(t)?e.substring(0,e.lastIndexOf(t)-1):e;function me(e,t,n){if("string"==typeof t&&t.length>0){const r=t.toLowerCase().trim(),o=r.includes(" ")||r.includes(",");return e.filter(e=>{let t=[];n.forEach(n=>{let r=j.default(e,n);o||"properties.label"!==n&&"address"!==n||!r||(r=r.split(","),r.length>2?r.splice(r.length-2,2):r.length>1&&r.splice(r.length-1,1),r=r.join(",")),r&&(t=o?t.concat(r.toLowerCase()):t.concat(r.toLowerCase().replace(/,/g," ").split(" ")))});for(let e=0;e<t.length;e++)if(0===t[e].indexOf(r))return!0;return!1})}return e}function ye(e,t){return function(){return e.apply(t,arguments)}}const{toString:Ee}=Object.prototype,{getPrototypeOf:Ae}=Object,{iterator:Fe,toStringTag:we}=Symbol,ve=(_e=Object.create(null),e=>{const t=Ee.call(e);return _e[t]||(_e[t]=t.slice(8,-1).toLowerCase())});var _e;const Ce=e=>(e=e.toLowerCase(),t=>ve(t)===e),De=e=>t=>typeof t===e,{isArray:Se}=Array,Be=De("undefined");function Oe(e){return null!==e&&!Be(e)&&null!==e.constructor&&!Be(e.constructor)&&ke(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const Re=Ce("ArrayBuffer");const xe=De("string"),ke=De("function"),je=De("number"),Pe=e=>null!==e&&"object"==typeof e,Te=e=>{if("object"!==ve(e))return!1;const t=Ae(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t)||we in e||Fe in e)},Ne=Ce("Date"),Le=Ce("File"),Me=Ce("Blob"),Ie=Ce("FileList");const Ue="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},qe=void 0!==Ue.FormData?Ue.FormData:void 0,ze=Ce("URLSearchParams"),[He,Ve,We,$e]=["ReadableStream","Request","Response","Headers"].map(Ce);function Je(e,t,{allOwnKeys:n=!1}={}){if(null==e)return;let r,o;if("object"!=typeof e&&(e=[e]),Se(e))for(r=0,o=e.length;r<o;r++)t.call(null,e[r],r,e);else{if(Oe(e))return;const o=n?Object.getOwnPropertyNames(e):Object.keys(e),u=o.length;let i;for(r=0;r<u;r++)i=o[r],t.call(null,e[i],i,e)}}function Ke(e,t){if(Oe(e))return null;t=t.toLowerCase();const n=Object.keys(e);let r,o=n.length;for(;o-- >0;)if(r=n[o],t===r.toLowerCase())return r;return null}const Ge="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,Xe=e=>!Be(e)&&e!==Ge;const Qe=(Ze="undefined"!=typeof Uint8Array&&Ae(Uint8Array),e=>Ze&&e instanceof Ze);var Ze;const Ye=Ce("HTMLFormElement"),et=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),tt=Ce("RegExp"),nt=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),r={};Je(n,(n,o)=>{let u;!1!==(u=t(n,o,e))&&(r[o]=u||n)}),Object.defineProperties(e,r)};const rt=Ce("AsyncFunction"),ot=(ut="function"==typeof setImmediate,it=ke(Ge.postMessage),ut?setImmediate:it?(st=`axios@${Math.random()}`,at=[],Ge.addEventListener("message",({source:e,data:t})=>{e===Ge&&t===st&&at.length&&at.shift()()},!1),e=>{at.push(e),Ge.postMessage(st,"*")}):e=>setTimeout(e));var ut,it,st,at;const lt="undefined"!=typeof queueMicrotask?queueMicrotask.bind(Ge):"undefined"!=typeof process&&process.nextTick||ot;var ct={isArray:Se,isArrayBuffer:Re,isBuffer:Oe,isFormData:e=>{let t;return e&&(qe&&e instanceof qe||ke(e.append)&&("formdata"===(t=ve(e))||"object"===t&&ke(e.toString)&&"[object FormData]"===e.toString()))},isArrayBufferView:function(e){let t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&Re(e.buffer),t},isString:xe,isNumber:je,isBoolean:e=>!0===e||!1===e,isObject:Pe,isPlainObject:Te,isEmptyObject:e=>{if(!Pe(e)||Oe(e))return!1;try{return 0===Object.keys(e).length&&Object.getPrototypeOf(e)===Object.prototype}catch(e){return!1}},isReadableStream:He,isRequest:Ve,isResponse:We,isHeaders:$e,isUndefined:Be,isDate:Ne,isFile:Le,isReactNativeBlob:e=>!(!e||void 0===e.uri),isReactNative:e=>e&&void 0!==e.getParts,isBlob:Me,isRegExp:tt,isFunction:ke,isStream:e=>Pe(e)&&ke(e.pipe),isURLSearchParams:ze,isTypedArray:Qe,isFileList:Ie,forEach:Je,merge:function e(){const{caseless:t,skipUndefined:n}=Xe(this)&&this||{},r={},o=(o,u)=>{if("__proto__"===u||"constructor"===u||"prototype"===u)return;const i=t&&Ke(r,u)||u;Te(r[i])&&Te(o)?r[i]=e(r[i],o):Te(o)?r[i]=e({},o):Se(o)?r[i]=o.slice():n&&Be(o)||(r[i]=o)};for(let e=0,t=arguments.length;e<t;e++)arguments[e]&&Je(arguments[e],o);return r},extend:(e,t,n,{allOwnKeys:r}={})=>(Je(t,(t,r)=>{n&&ke(t)?Object.defineProperty(e,r,{value:ye(t,n),writable:!0,enumerable:!0,configurable:!0}):Object.defineProperty(e,r,{value:t,writable:!0,enumerable:!0,configurable:!0})},{allOwnKeys:r}),e),trim:e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""),stripBOM:e=>(65279===e.charCodeAt(0)&&(e=e.slice(1)),e),inherits:(e,t,n,r)=>{e.prototype=Object.create(t.prototype,r),Object.defineProperty(e.prototype,"constructor",{value:e,writable:!0,enumerable:!1,configurable:!0}),Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},toFlatObject:(e,t,n,r)=>{let o,u,i;const s={};if(t=t||{},null==e)return t;do{for(o=Object.getOwnPropertyNames(e),u=o.length;u-- >0;)i=o[u],r&&!r(i,e,t)||s[i]||(t[i]=e[i],s[i]=!0);e=!1!==n&&Ae(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},kindOf:ve,kindOfTest:Ce,endsWith:(e,t,n)=>{e=String(e),(void 0===n||n>e.length)&&(n=e.length),n-=t.length;const r=e.indexOf(t,n);return-1!==r&&r===n},toArray:e=>{if(!e)return null;if(Se(e))return e;let t=e.length;if(!je(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},forEachEntry:(e,t)=>{const n=(e&&e[Fe]).call(e);let r;for(;(r=n.next())&&!r.done;){const n=r.value;t.call(e,n[0],n[1])}},matchAll:(e,t)=>{let n;const r=[];for(;null!==(n=e.exec(t));)r.push(n);return r},isHTMLForm:Ye,hasOwnProperty:et,hasOwnProp:et,reduceDescriptors:nt,freezeMethods:e=>{nt(e,(t,n)=>{if(ke(e)&&-1!==["arguments","caller","callee"].indexOf(n))return!1;const r=e[n];ke(r)&&(t.enumerable=!1,"writable"in t?t.writable=!1:t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")}))})},toObjectSet:(e,t)=>{const n={},r=e=>{e.forEach(e=>{n[e]=!0})};return Se(e)?r(e):r(String(e).split(t)),n},toCamelCase:e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(e,t,n){return t.toUpperCase()+n}),noop:()=>{},toFiniteNumber:(e,t)=>null!=e&&Number.isFinite(e=+e)?e:t,findKey:Ke,global:Ge,isContextDefined:Xe,isSpecCompliantForm:function(e){return!!(e&&ke(e.append)&&"FormData"===e[we]&&e[Fe])},toJSONObject:e=>{const t=new Array(10),n=(e,r)=>{if(Pe(e)){if(t.indexOf(e)>=0)return;if(Oe(e))return e;if(!("toJSON"in e)){t[r]=e;const o=Se(e)?[]:{};return Je(e,(e,t)=>{const u=n(e,r+1);!Be(u)&&(o[t]=u)}),t[r]=void 0,o}}return e};return n(e,0)},isAsyncFn:rt,isThenable:e=>e&&(Pe(e)||ke(e))&&ke(e.then)&&ke(e.catch),setImmediate:ot,asap:lt,isIterable:e=>null!=e&&ke(e[Fe])};class dt extends Error{static from(e,t,n,r,o,u){const i=new dt(e.message,t||e.code,n,r,o);return i.cause=e,i.name=e.name,null!=e.status&&null==i.status&&(i.status=e.status),u&&Object.assign(i,u),i}constructor(e,t,n,r,o){super(e),Object.defineProperty(this,"message",{value:e,enumerable:!0,writable:!0,configurable:!0}),this.name="AxiosError",this.isAxiosError=!0,t&&(this.code=t),n&&(this.config=n),r&&(this.request=r),o&&(this.response=o,this.status=o.status)}toJSON(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:ct.toJSONObject(this.config),code:this.code,status:this.status}}}dt.ERR_BAD_OPTION_VALUE="ERR_BAD_OPTION_VALUE",dt.ERR_BAD_OPTION="ERR_BAD_OPTION",dt.ECONNABORTED="ECONNABORTED",dt.ETIMEDOUT="ETIMEDOUT",dt.ERR_NETWORK="ERR_NETWORK",dt.ERR_FR_TOO_MANY_REDIRECTS="ERR_FR_TOO_MANY_REDIRECTS",dt.ERR_DEPRECATED="ERR_DEPRECATED",dt.ERR_BAD_RESPONSE="ERR_BAD_RESPONSE",dt.ERR_BAD_REQUEST="ERR_BAD_REQUEST",dt.ERR_CANCELED="ERR_CANCELED",dt.ERR_NOT_SUPPORT="ERR_NOT_SUPPORT",dt.ERR_INVALID_URL="ERR_INVALID_URL";var pt=dt;function ft(e){return ct.isPlainObject(e)||ct.isArray(e)}function ht(e){return ct.endsWith(e,"[]")?e.slice(0,-2):e}function gt(e,t,n){return e?e.concat(t).map(function(e,t){return e=ht(e),!n&&t?"["+e+"]":e}).join(n?".":""):t}const bt=ct.toFlatObject(ct,{},null,function(e){return/^is[A-Z]/.test(e)});function mt(e,t,n){if(!ct.isObject(e))throw new TypeError("target must be an object");t=t||new FormData;const r=(n=ct.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,function(e,t){return!ct.isUndefined(t[e])})).metaTokens,o=n.visitor||l,u=n.dots,i=n.indexes,s=(n.Blob||"undefined"!=typeof Blob&&Blob)&&ct.isSpecCompliantForm(t);if(!ct.isFunction(o))throw new TypeError("visitor must be a function");function a(e){if(null===e)return"";if(ct.isDate(e))return e.toISOString();if(ct.isBoolean(e))return e.toString();if(!s&&ct.isBlob(e))throw new pt("Blob is not supported. Use a Buffer instead.");return ct.isArrayBuffer(e)||ct.isTypedArray(e)?s&&"function"==typeof Blob?new Blob([e]):Buffer.from(e):e}function l(e,n,o){let s=e;if(ct.isReactNative(t)&&ct.isReactNativeBlob(e))return t.append(gt(o,n,u),a(e)),!1;if(e&&!o&&"object"==typeof e)if(ct.endsWith(n,"{}"))n=r?n:n.slice(0,-2),e=JSON.stringify(e);else if(ct.isArray(e)&&function(e){return ct.isArray(e)&&!e.some(ft)}(e)||(ct.isFileList(e)||ct.endsWith(n,"[]"))&&(s=ct.toArray(e)))return n=ht(n),s.forEach(function(e,r){!ct.isUndefined(e)&&null!==e&&t.append(!0===i?gt([n],r,u):null===i?n:n+"[]",a(e))}),!1;return!!ft(e)||(t.append(gt(o,n,u),a(e)),!1)}const c=[],d=Object.assign(bt,{defaultVisitor:l,convertValue:a,isVisitable:ft});if(!ct.isObject(e))throw new TypeError("data must be an object");return function e(n,r){if(!ct.isUndefined(n)){if(-1!==c.indexOf(n))throw Error("Circular reference detected in "+r.join("."));c.push(n),ct.forEach(n,function(n,u){!0===(!(ct.isUndefined(n)||null===n)&&o.call(t,n,ct.isString(u)?u.trim():u,r,d))&&e(n,r?r.concat(u):[u])}),c.pop()}}(e),t}function yt(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(e){return t[e]})}function Et(e,t){this._pairs=[],e&&mt(e,this,t)}const At=Et.prototype;function Ft(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+")}function wt(e,t,n){if(!t)return e;const r=n&&n.encode||Ft,o=ct.isFunction(n)?{serialize:n}:n,u=o&&o.serialize;let i;if(i=u?u(t,o):ct.isURLSearchParams(t)?t.toString():new Et(t,o).toString(r),i){const t=e.indexOf("#");-1!==t&&(e=e.slice(0,t)),e+=(-1===e.indexOf("?")?"?":"&")+i}return e}At.append=function(e,t){this._pairs.push([e,t])},At.toString=function(e){const t=e?function(t){return e.call(this,t,yt)}:yt;return this._pairs.map(function(e){return t(e[0])+"="+t(e[1])},"").join("&")};var vt=class{constructor(){this.handlers=[]}use(e,t,n){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){ct.forEach(this.handlers,function(t){null!==t&&e(t)})}},_t={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1,legacyInterceptorReqResOrdering:!0},Ct={isBrowser:!0,classes:{URLSearchParams:"undefined"!=typeof URLSearchParams?URLSearchParams:Et,FormData:"undefined"!=typeof FormData?FormData:null,Blob:"undefined"!=typeof Blob?Blob:null},protocols:["http","https","file","blob","url","data"]};const Dt="undefined"!=typeof window&&"undefined"!=typeof document,St="object"==typeof navigator&&navigator||void 0,Bt=Dt&&(!St||["ReactNative","NativeScript","NS"].indexOf(St.product)<0),Ot="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"==typeof self.importScripts,Rt=Dt&&window.location.href||"http://localhost";var xt={...Object.freeze({__proto__:null,hasBrowserEnv:Dt,hasStandardBrowserWebWorkerEnv:Ot,hasStandardBrowserEnv:Bt,navigator:St,origin:Rt}),...Ct};function kt(e){function t(e,n,r,o){let u=e[o++];if("__proto__"===u)return!0;const i=Number.isFinite(+u),s=o>=e.length;if(u=!u&&ct.isArray(r)?r.length:u,s)return ct.hasOwnProp(r,u)?r[u]=[r[u],n]:r[u]=n,!i;r[u]&&ct.isObject(r[u])||(r[u]=[]);return t(e,n,r[u],o)&&ct.isArray(r[u])&&(r[u]=function(e){const t={},n=Object.keys(e);let r;const o=n.length;let u;for(r=0;r<o;r++)u=n[r],t[u]=e[u];return t}(r[u])),!i}if(ct.isFormData(e)&&ct.isFunction(e.entries)){const n={};return ct.forEachEntry(e,(e,r)=>{t(function(e){return ct.matchAll(/\w+|\[(\w*)]/g,e).map(e=>"[]"===e[0]?"":e[1]||e[0])}(e),r,n,0)}),n}return null}const jt={transitional:_t,adapter:["xhr","http","fetch"],transformRequest:[function(e,t){const n=t.getContentType()||"",r=n.indexOf("application/json")>-1,o=ct.isObject(e);o&&ct.isHTMLForm(e)&&(e=new FormData(e));if(ct.isFormData(e))return r?JSON.stringify(kt(e)):e;if(ct.isArrayBuffer(e)||ct.isBuffer(e)||ct.isStream(e)||ct.isFile(e)||ct.isBlob(e)||ct.isReadableStream(e))return e;if(ct.isArrayBufferView(e))return e.buffer;if(ct.isURLSearchParams(e))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let u;if(o){if(n.indexOf("application/x-www-form-urlencoded")>-1)return function(e,t){return mt(e,new xt.classes.URLSearchParams,{visitor:function(e,t,n,r){return xt.isNode&&ct.isBuffer(e)?(this.append(t,e.toString("base64")),!1):r.defaultVisitor.apply(this,arguments)},...t})}(e,this.formSerializer).toString();if((u=ct.isFileList(e))||n.indexOf("multipart/form-data")>-1){const t=this.env&&this.env.FormData;return mt(u?{"files[]":e}:e,t&&new t,this.formSerializer)}}return o||r?(t.setContentType("application/json",!1),function(e,t,n){if(ct.isString(e))try{return(t||JSON.parse)(e),ct.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(n||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){const t=this.transitional||jt.transitional,n=t&&t.forcedJSONParsing,r="json"===this.responseType;if(ct.isResponse(e)||ct.isReadableStream(e))return e;if(e&&ct.isString(e)&&(n&&!this.responseType||r)){const n=!(t&&t.silentJSONParsing)&&r;try{return JSON.parse(e,this.parseReviver)}catch(e){if(n){if("SyntaxError"===e.name)throw pt.from(e,pt.ERR_BAD_RESPONSE,this,null,this.response);throw e}}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:xt.classes.FormData,Blob:xt.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};ct.forEach(["delete","get","head","post","put","patch"],e=>{jt.headers[e]={}});var Pt=jt;const Tt=ct.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]);const Nt=Symbol("internals");function Lt(e,t){if(!1!==e&&null!=e)if(ct.isArray(e))e.forEach(e=>Lt(e,t));else if(!(e=>!/[\r\n]/.test(e))(String(e)))throw new Error(`Invalid character in header content ["${t}"]`)}function Mt(e){return e&&String(e).trim().toLowerCase()}function It(e){return!1===e||null==e?e:ct.isArray(e)?e.map(It):function(e){let t=e.length;for(;t>0;){const n=e.charCodeAt(t-1);if(10!==n&&13!==n)break;t-=1}return t===e.length?e:e.slice(0,t)}(String(e))}function Ut(e,t,n,r,o){return ct.isFunction(r)?r.call(this,t,n):(o&&(t=n),ct.isString(t)?ct.isString(r)?-1!==t.indexOf(r):ct.isRegExp(r)?r.test(t):void 0:void 0)}class qt{constructor(e){e&&this.set(e)}set(e,t,n){const r=this;function o(e,t,n){const o=Mt(t);if(!o)throw new Error("header name must be a non-empty string");const u=ct.findKey(r,o);(!u||void 0===r[u]||!0===n||void 0===n&&!1!==r[u])&&(Lt(e,t),r[u||t]=It(e))}const u=(e,t)=>ct.forEach(e,(e,n)=>o(e,n,t));if(ct.isPlainObject(e)||e instanceof this.constructor)u(e,t);else if(ct.isString(e)&&(e=e.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim()))u((e=>{const t={};let n,r,o;return e&&e.split("\n").forEach(function(e){o=e.indexOf(":"),n=e.substring(0,o).trim().toLowerCase(),r=e.substring(o+1).trim(),!n||t[n]&&Tt[n]||("set-cookie"===n?t[n]?t[n].push(r):t[n]=[r]:t[n]=t[n]?t[n]+", "+r:r)}),t})(e),t);else if(ct.isObject(e)&&ct.isIterable(e)){let n,r,o={};for(const t of e){if(!ct.isArray(t))throw TypeError("Object iterator must return a key-value pair");o[r=t[0]]=(n=o[r])?ct.isArray(n)?[...n,t[1]]:[n,t[1]]:t[1]}u(o,t)}else null!=e&&o(t,e,n);return this}get(e,t){if(e=Mt(e)){const n=ct.findKey(this,e);if(n){const e=this[n];if(!t)return e;if(!0===t)return function(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let r;for(;r=n.exec(e);)t[r[1]]=r[2];return t}(e);if(ct.isFunction(t))return t.call(this,e,n);if(ct.isRegExp(t))return t.exec(e);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,t){if(e=Mt(e)){const n=ct.findKey(this,e);return!(!n||void 0===this[n]||t&&!Ut(0,this[n],n,t))}return!1}delete(e,t){const n=this;let r=!1;function o(e){if(e=Mt(e)){const o=ct.findKey(n,e);!o||t&&!Ut(0,n[o],o,t)||(delete n[o],r=!0)}}return ct.isArray(e)?e.forEach(o):o(e),r}clear(e){const t=Object.keys(this);let n=t.length,r=!1;for(;n--;){const o=t[n];e&&!Ut(0,this[o],o,e,!0)||(delete this[o],r=!0)}return r}normalize(e){const t=this,n={};return ct.forEach(this,(r,o)=>{const u=ct.findKey(n,o);if(u)return t[u]=It(r),void delete t[o];const i=e?function(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(e,t,n)=>t.toUpperCase()+n)}(o):String(o).trim();i!==o&&delete t[o],t[i]=It(r),n[i]=!0}),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const t=Object.create(null);return ct.forEach(this,(n,r)=>{null!=n&&!1!==n&&(t[r]=e&&ct.isArray(n)?n.join(", "):n)}),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([e,t])=>e+": "+t).join("\n")}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...t){const n=new this(e);return t.forEach(e=>n.set(e)),n}static accessor(e){const t=(this[Nt]=this[Nt]={accessors:{}}).accessors,n=this.prototype;function r(e){const r=Mt(e);t[r]||(!function(e,t){const n=ct.toCamelCase(" "+t);["get","set","has"].forEach(r=>{Object.defineProperty(e,r+n,{value:function(e,n,o){return this[r].call(this,t,e,n,o)},configurable:!0})})}(n,e),t[r]=!0)}return ct.isArray(e)?e.forEach(r):r(e),this}}qt.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),ct.reduceDescriptors(qt.prototype,({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(e){this[n]=e}}}),ct.freezeMethods(qt);var zt=qt;function Ht(e,t){const n=this||Pt,r=t||n,o=zt.from(r.headers);let u=r.data;return ct.forEach(e,function(e){u=e.call(n,u,o.normalize(),t?t.status:void 0)}),o.normalize(),u}function Vt(e){return!(!e||!e.__CANCEL__)}var Wt=class extends pt{constructor(e,t,n){super(null==e?"canceled":e,pt.ERR_CANCELED,t,n),this.name="CanceledError",this.__CANCEL__=!0}};function $t(e,t,n){const r=n.config.validateStatus;n.status&&r&&!r(n.status)?t(new pt("Request failed with status code "+n.status,[pt.ERR_BAD_REQUEST,pt.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n)):e(n)}const Jt=(e,t,n=3)=>{let r=0;const o=function(e,t){e=e||10;const n=new Array(e),r=new Array(e);let o,u=0,i=0;return t=void 0!==t?t:1e3,function(s){const a=Date.now(),l=r[i];o||(o=a),n[u]=s,r[u]=a;let c=i,d=0;for(;c!==u;)d+=n[c++],c%=e;if(u=(u+1)%e,u===i&&(i=(i+1)%e),a-o<t)return;const p=l&&a-l;return p?Math.round(1e3*d/p):void 0}}(50,250);return function(e,t){let n,r,o=0,u=1e3/t;const i=(t,u=Date.now())=>{o=u,n=null,r&&(clearTimeout(r),r=null),e(...t)};return[(...e)=>{const t=Date.now(),s=t-o;s>=u?i(e,t):(n=e,r||(r=setTimeout(()=>{r=null,i(n)},u-s)))},()=>n&&i(n)]}(n=>{const u=n.loaded,i=n.lengthComputable?n.total:void 0,s=u-r,a=o(s);r=u;e({loaded:u,total:i,progress:i?u/i:void 0,bytes:s,rate:a||void 0,estimated:a&&i&&u<=i?(i-u)/a:void 0,event:n,lengthComputable:null!=i,[t?"download":"upload"]:!0})},n)},Kt=(e,t)=>{const n=null!=e;return[r=>t[0]({lengthComputable:n,total:e,loaded:r}),t[1]]},Gt=e=>(...t)=>ct.asap(()=>e(...t));var Xt=xt.hasStandardBrowserEnv?((e,t)=>n=>(n=new URL(n,xt.origin),e.protocol===n.protocol&&e.host===n.host&&(t||e.port===n.port)))(new URL(xt.origin),xt.navigator&&/(msie|trident)/i.test(xt.navigator.userAgent)):()=>!0,Qt=xt.hasStandardBrowserEnv?{write(e,t,n,r,o,u,i){if("undefined"==typeof document)return;const s=[`${e}=${encodeURIComponent(t)}`];ct.isNumber(n)&&s.push(`expires=${new Date(n).toUTCString()}`),ct.isString(r)&&s.push(`path=${r}`),ct.isString(o)&&s.push(`domain=${o}`),!0===u&&s.push("secure"),ct.isString(i)&&s.push(`SameSite=${i}`),document.cookie=s.join("; ")},read(e){if("undefined"==typeof document)return null;const t=document.cookie.match(new RegExp("(?:^|; )"+e+"=([^;]*)"));return t?decodeURIComponent(t[1]):null},remove(e){this.write(e,"",Date.now()-864e5,"/")}}:{write(){},read:()=>null,remove(){}};function Zt(e,t,n){let r=!("string"==typeof(o=t)&&/^([a-z][a-z\d+\-.]*:)?\/\//i.test(o));var o;return e&&(r||0==n)?function(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}(e,t):t}const Yt=e=>e instanceof zt?{...e}:e;function en(e,t){t=t||{};const n={};function r(e,t,n,r){return ct.isPlainObject(e)&&ct.isPlainObject(t)?ct.merge.call({caseless:r},e,t):ct.isPlainObject(t)?ct.merge({},t):ct.isArray(t)?t.slice():t}function o(e,t,n,o){return ct.isUndefined(t)?ct.isUndefined(e)?void 0:r(void 0,e,0,o):r(e,t,0,o)}function u(e,t){if(!ct.isUndefined(t))return r(void 0,t)}function i(e,t){return ct.isUndefined(t)?ct.isUndefined(e)?void 0:r(void 0,e):r(void 0,t)}function s(n,o,u){return u in t?r(n,o):u in e?r(void 0,n):void 0}const a={url:u,method:u,data:u,baseURL:i,transformRequest:i,transformResponse:i,paramsSerializer:i,timeout:i,timeoutMessage:i,withCredentials:i,withXSRFToken:i,adapter:i,responseType:i,xsrfCookieName:i,xsrfHeaderName:i,onUploadProgress:i,onDownloadProgress:i,decompress:i,maxContentLength:i,maxBodyLength:i,beforeRedirect:i,transport:i,httpAgent:i,httpsAgent:i,cancelToken:i,socketPath:i,responseEncoding:i,validateStatus:s,headers:(e,t,n)=>o(Yt(e),Yt(t),0,!0)};return ct.forEach(Object.keys({...e,...t}),function(r){if("__proto__"===r||"constructor"===r||"prototype"===r)return;const u=ct.hasOwnProp(a,r)?a[r]:o,i=u(e[r],t[r],r);ct.isUndefined(i)&&u!==s||(n[r]=i)}),n}var tn=e=>{const t=en({},e);let{data:n,withXSRFToken:r,xsrfHeaderName:o,xsrfCookieName:u,headers:i,auth:s}=t;if(t.headers=i=zt.from(i),t.url=wt(Zt(t.baseURL,t.url,t.allowAbsoluteUrls),e.params,e.paramsSerializer),s&&i.set("Authorization","Basic "+btoa((s.username||"")+":"+(s.password?unescape(encodeURIComponent(s.password)):""))),ct.isFormData(n))if(xt.hasStandardBrowserEnv||xt.hasStandardBrowserWebWorkerEnv)i.setContentType(void 0);else if(ct.isFunction(n.getHeaders)){const e=n.getHeaders(),t=["content-type","content-length"];Object.entries(e).forEach(([e,n])=>{t.includes(e.toLowerCase())&&i.set(e,n)})}if(xt.hasStandardBrowserEnv&&(r&&ct.isFunction(r)&&(r=r(t)),r||!1!==r&&Xt(t.url))){const e=o&&u&&Qt.read(u);e&&i.set(o,e)}return t};var nn="undefined"!=typeof XMLHttpRequest&&function(e){return new Promise(function(t,n){const r=tn(e);let o=r.data;const u=zt.from(r.headers).normalize();let i,s,a,l,c,{responseType:d,onUploadProgress:p,onDownloadProgress:f}=r;function h(){l&&l(),c&&c(),r.cancelToken&&r.cancelToken.unsubscribe(i),r.signal&&r.signal.removeEventListener("abort",i)}let g=new XMLHttpRequest;function b(){if(!g)return;const r=zt.from("getAllResponseHeaders"in g&&g.getAllResponseHeaders());$t(function(e){t(e),h()},function(e){n(e),h()},{data:d&&"text"!==d&&"json"!==d?g.response:g.responseText,status:g.status,statusText:g.statusText,headers:r,config:e,request:g}),g=null}g.open(r.method.toUpperCase(),r.url,!0),g.timeout=r.timeout,"onloadend"in g?g.onloadend=b:g.onreadystatechange=function(){g&&4===g.readyState&&(0!==g.status||g.responseURL&&0===g.responseURL.indexOf("file:"))&&setTimeout(b)},g.onabort=function(){g&&(n(new pt("Request aborted",pt.ECONNABORTED,e,g)),g=null)},g.onerror=function(t){const r=t&&t.message?t.message:"Network Error",o=new pt(r,pt.ERR_NETWORK,e,g);o.event=t||null,n(o),g=null},g.ontimeout=function(){let t=r.timeout?"timeout of "+r.timeout+"ms exceeded":"timeout exceeded";const o=r.transitional||_t;r.timeoutErrorMessage&&(t=r.timeoutErrorMessage),n(new pt(t,o.clarifyTimeoutError?pt.ETIMEDOUT:pt.ECONNABORTED,e,g)),g=null},void 0===o&&u.setContentType(null),"setRequestHeader"in g&&ct.forEach(u.toJSON(),function(e,t){g.setRequestHeader(t,e)}),ct.isUndefined(r.withCredentials)||(g.withCredentials=!!r.withCredentials),d&&"json"!==d&&(g.responseType=r.responseType),f&&([a,c]=Jt(f,!0),g.addEventListener("progress",a)),p&&g.upload&&([s,l]=Jt(p),g.upload.addEventListener("progress",s),g.upload.addEventListener("loadend",l)),(r.cancelToken||r.signal)&&(i=t=>{g&&(n(!t||t.type?new Wt(null,e,g):t),g.abort(),g=null)},r.cancelToken&&r.cancelToken.subscribe(i),r.signal&&(r.signal.aborted?i():r.signal.addEventListener("abort",i)));const m=function(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}(r.url);m&&-1===xt.protocols.indexOf(m)?n(new pt("Unsupported protocol "+m+":",pt.ERR_BAD_REQUEST,e)):g.send(o||null)})};var rn=(e,t)=>{const{length:n}=e=e?e.filter(Boolean):[];if(t||n){let n,r=new AbortController;const o=function(e){if(!n){n=!0,i();const t=e instanceof Error?e:this.reason;r.abort(t instanceof pt?t:new Wt(t instanceof Error?t.message:t))}};let u=t&&setTimeout(()=>{u=null,o(new pt(`timeout of ${t}ms exceeded`,pt.ETIMEDOUT))},t);const i=()=>{e&&(u&&clearTimeout(u),u=null,e.forEach(e=>{e.unsubscribe?e.unsubscribe(o):e.removeEventListener("abort",o)}),e=null)};e.forEach(e=>e.addEventListener("abort",o));const{signal:s}=r;return s.unsubscribe=()=>ct.asap(i),s}};const on=function*(e,t){let n=e.byteLength;if(!t||n<t)return void(yield e);let r,o=0;for(;o<n;)r=o+t,yield e.slice(o,r),o=r},un=async function*(e){if(e[Symbol.asyncIterator])return void(yield*e);const t=e.getReader();try{for(;;){const{done:e,value:n}=await t.read();if(e)break;yield n}}finally{await t.cancel()}},sn=(e,t,n,r)=>{const o=async function*(e,t){for await(const n of un(e))yield*on(n,t)}(e,t);let u,i=0,s=e=>{u||(u=!0,r&&r(e))};return new ReadableStream({async pull(e){try{const{done:t,value:r}=await o.next();if(t)return s(),void e.close();let u=r.byteLength;if(n){let e=i+=u;n(e)}e.enqueue(new Uint8Array(r))}catch(e){throw s(e),e}},cancel:e=>(s(e),o.return())},{highWaterMark:2})},{isFunction:an}=ct,ln=(({Request:e,Response:t})=>({Request:e,Response:t}))(ct.global),{ReadableStream:cn,TextEncoder:dn}=ct.global,pn=(e,...t)=>{try{return!!e(...t)}catch(e){return!1}},fn=e=>{e=ct.merge.call({skipUndefined:!0},ln,e);const{fetch:t,Request:n,Response:r}=e,o=t?an(t):"function"==typeof fetch,u=an(n),i=an(r);if(!o)return!1;const s=o&&an(cn),a=o&&("function"==typeof dn?(l=new dn,e=>l.encode(e)):async e=>new Uint8Array(await new n(e).arrayBuffer()));var l;const c=u&&s&&pn(()=>{let e=!1;const t=new cn,r=new n(xt.origin,{body:t,method:"POST",get duplex(){return e=!0,"half"}}).headers.has("Content-Type");return t.cancel(),e&&!r}),d=i&&s&&pn(()=>ct.isReadableStream(new r("").body)),p={stream:d&&(e=>e.body)};o&&["text","arrayBuffer","blob","formData","stream"].forEach(e=>{!p[e]&&(p[e]=(t,n)=>{let r=t&&t[e];if(r)return r.call(t);throw new pt(`Response type '${e}' is not supported`,pt.ERR_NOT_SUPPORT,n)})});const f=async(e,t)=>{const r=ct.toFiniteNumber(e.getContentLength());return null==r?(async e=>{if(null==e)return 0;if(ct.isBlob(e))return e.size;if(ct.isSpecCompliantForm(e)){const t=new n(xt.origin,{method:"POST",body:e});return(await t.arrayBuffer()).byteLength}return ct.isArrayBufferView(e)||ct.isArrayBuffer(e)?e.byteLength:(ct.isURLSearchParams(e)&&(e+=""),ct.isString(e)?(await a(e)).byteLength:void 0)})(t):r};return async e=>{let{url:o,method:i,data:s,signal:a,cancelToken:l,timeout:h,onDownloadProgress:g,onUploadProgress:b,responseType:m,headers:y,withCredentials:E="same-origin",fetchOptions:A}=tn(e),F=t||fetch;m=m?(m+"").toLowerCase():"text";let w=rn([a,l&&l.toAbortSignal()],h),v=null;const _=w&&w.unsubscribe&&(()=>{w.unsubscribe()});let C;try{if(b&&c&&"get"!==i&&"head"!==i&&0!==(C=await f(y,s))){let e,t=new n(o,{method:"POST",body:s,duplex:"half"});if(ct.isFormData(s)&&(e=t.headers.get("content-type"))&&y.setContentType(e),t.body){const[e,n]=Kt(C,Jt(Gt(b)));s=sn(t.body,65536,e,n)}}ct.isString(E)||(E=E?"include":"omit");const t=u&&"credentials"in n.prototype,a={...A,signal:w,method:i.toUpperCase(),headers:y.normalize().toJSON(),body:s,duplex:"half",credentials:t?E:void 0};v=u&&new n(o,a);let l=await(u?F(v,A):F(o,a));const h=d&&("stream"===m||"response"===m);if(d&&(g||h&&_)){const e={};["status","statusText","headers"].forEach(t=>{e[t]=l[t]});const t=ct.toFiniteNumber(l.headers.get("content-length")),[n,o]=g&&Kt(t,Jt(Gt(g),!0))||[];l=new r(sn(l.body,65536,n,()=>{o&&o(),_&&_()}),e)}m=m||"text";let D=await p[ct.findKey(p,m)||"text"](l,e);return!h&&_&&_(),await new Promise((t,n)=>{$t(t,n,{data:D,headers:zt.from(l.headers),status:l.status,statusText:l.statusText,config:e,request:v})})}catch(t){if(_&&_(),t&&"TypeError"===t.name&&/Load failed|fetch/i.test(t.message))throw Object.assign(new pt("Network Error",pt.ERR_NETWORK,e,v,t&&t.response),{cause:t.cause||t});throw pt.from(t,t&&t.code,e,v,t&&t.response)}}},hn=new Map,gn=e=>{let t=e&&e.env||{};const{fetch:n,Request:r,Response:o}=t,u=[r,o,n];let i,s,a=u.length,l=hn;for(;a--;)i=u[a],s=l.get(i),void 0===s&&l.set(i,s=a?new Map:fn(t)),l=s;return s};gn();const bn={http:null,xhr:nn,fetch:{get:gn}};ct.forEach(bn,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch(e){}Object.defineProperty(e,"adapterName",{value:t})}});const mn=e=>`- ${e}`,yn=e=>ct.isFunction(e)||null===e||!1===e;var En={getAdapter:function(e,t){e=ct.isArray(e)?e:[e];const{length:n}=e;let r,o;const u={};for(let i=0;i<n;i++){let n;if(r=e[i],o=r,!yn(r)&&(o=bn[(n=String(r)).toLowerCase()],void 0===o))throw new pt(`Unknown adapter '${n}'`);if(o&&(ct.isFunction(o)||(o=o.get(t))))break;u[n||"#"+i]=o}if(!o){const e=Object.entries(u).map(([e,t])=>`adapter ${e} `+(!1===t?"is not supported by the environment":"is not available in the build"));let t=n?e.length>1?"since :\n"+e.map(mn).join("\n"):" "+mn(e[0]):"as no adapter specified";throw new pt("There is no suitable adapter to dispatch the request "+t,"ERR_NOT_SUPPORT")}return o},adapters:bn};function An(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new Wt(null,e)}function Fn(e){An(e),e.headers=zt.from(e.headers),e.data=Ht.call(e,e.transformRequest),-1!==["post","put","patch"].indexOf(e.method)&&e.headers.setContentType("application/x-www-form-urlencoded",!1);return En.getAdapter(e.adapter||Pt.adapter,e)(e).then(function(t){return An(e),t.data=Ht.call(e,e.transformResponse,t),t.headers=zt.from(t.headers),t},function(t){return Vt(t)||(An(e),t&&t.response&&(t.response.data=Ht.call(e,e.transformResponse,t.response),t.response.headers=zt.from(t.response.headers))),Promise.reject(t)})}const wn="1.15.0",vn={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{vn[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}});const _n={};vn.transitional=function(e,t,n){function r(e,t){return"[Axios v"+wn+"] Transitional option '"+e+"'"+t+(n?". "+n:"")}return(n,o,u)=>{if(!1===e)throw new pt(r(o," has been removed"+(t?" in "+t:"")),pt.ERR_DEPRECATED);return t&&!_n[o]&&(_n[o]=!0,console.warn(r(o," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(n,o,u)}},vn.spelling=function(e){return(t,n)=>(console.warn(`${n} is likely a misspelling of ${e}`),!0)};var Cn={assertOptions:function(e,t,n){if("object"!=typeof e)throw new pt("options must be an object",pt.ERR_BAD_OPTION_VALUE);const r=Object.keys(e);let o=r.length;for(;o-- >0;){const u=r[o],i=t[u];if(i){const t=e[u],n=void 0===t||i(t,u,e);if(!0!==n)throw new pt("option "+u+" must be "+n,pt.ERR_BAD_OPTION_VALUE);continue}if(!0!==n)throw new pt("Unknown option "+u,pt.ERR_BAD_OPTION)}},validators:vn};const Dn=Cn.validators;class Sn{constructor(e){this.defaults=e||{},this.interceptors={request:new vt,response:new vt}}async request(e,t){try{return await this._request(e,t)}catch(e){if(e instanceof Error){let t={};Error.captureStackTrace?Error.captureStackTrace(t):t=new Error;const n=(()=>{if(!t.stack)return"";const e=t.stack.indexOf("\n");return-1===e?"":t.stack.slice(e+1)})();try{if(e.stack){if(n){const t=n.indexOf("\n"),r=-1===t?-1:n.indexOf("\n",t+1),o=-1===r?"":n.slice(r+1);String(e.stack).endsWith(o)||(e.stack+="\n"+n)}}else e.stack=n}catch(e){}}throw e}}_request(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{},t=en(this.defaults,t);const{transitional:n,paramsSerializer:r,headers:o}=t;void 0!==n&&Cn.assertOptions(n,{silentJSONParsing:Dn.transitional(Dn.boolean),forcedJSONParsing:Dn.transitional(Dn.boolean),clarifyTimeoutError:Dn.transitional(Dn.boolean),legacyInterceptorReqResOrdering:Dn.transitional(Dn.boolean)},!1),null!=r&&(ct.isFunction(r)?t.paramsSerializer={serialize:r}:Cn.assertOptions(r,{encode:Dn.function,serialize:Dn.function},!0)),void 0!==t.allowAbsoluteUrls||(void 0!==this.defaults.allowAbsoluteUrls?t.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:t.allowAbsoluteUrls=!0),Cn.assertOptions(t,{baseUrl:Dn.spelling("baseURL"),withXsrfToken:Dn.spelling("withXSRFToken")},!0),t.method=(t.method||this.defaults.method||"get").toLowerCase();let u=o&&ct.merge(o.common,o[t.method]);o&&ct.forEach(["delete","get","head","post","put","patch","common"],e=>{delete o[e]}),t.headers=zt.concat(u,o);const i=[];let s=!0;this.interceptors.request.forEach(function(e){if("function"==typeof e.runWhen&&!1===e.runWhen(t))return;s=s&&e.synchronous;const n=t.transitional||_t;n&&n.legacyInterceptorReqResOrdering?i.unshift(e.fulfilled,e.rejected):i.push(e.fulfilled,e.rejected)});const a=[];let l;this.interceptors.response.forEach(function(e){a.push(e.fulfilled,e.rejected)});let c,d=0;if(!s){const e=[Fn.bind(this),void 0];for(e.unshift(...i),e.push(...a),c=e.length,l=Promise.resolve(t);d<c;)l=l.then(e[d++],e[d++]);return l}c=i.length;let p=t;for(;d<c;){const e=i[d++],t=i[d++];try{p=e(p)}catch(e){t.call(this,e);break}}try{l=Fn.call(this,p)}catch(e){return Promise.reject(e)}for(d=0,c=a.length;d<c;)l=l.then(a[d++],a[d++]);return l}getUri(e){return wt(Zt((e=en(this.defaults,e)).baseURL,e.url,e.allowAbsoluteUrls),e.params,e.paramsSerializer)}}ct.forEach(["delete","get","head","options"],function(e){Sn.prototype[e]=function(t,n){return this.request(en(n||{},{method:e,url:t,data:(n||{}).data}))}}),ct.forEach(["post","put","patch"],function(e){function t(t){return function(n,r,o){return this.request(en(o||{},{method:e,headers:t?{"Content-Type":"multipart/form-data"}:{},url:n,data:r}))}}Sn.prototype[e]=t(),Sn.prototype[e+"Form"]=t(!0)});var Bn=Sn;class On{constructor(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");let t;this.promise=new Promise(function(e){t=e});const n=this;this.promise.then(e=>{if(!n._listeners)return;let t=n._listeners.length;for(;t-- >0;)n._listeners[t](e);n._listeners=null}),this.promise.then=e=>{let t;const r=new Promise(e=>{n.subscribe(e),t=e}).then(e);return r.cancel=function(){n.unsubscribe(t)},r},e(function(e,r,o){n.reason||(n.reason=new Wt(e,r,o),t(n.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}toAbortSignal(){const e=new AbortController,t=t=>{e.abort(t)};return this.subscribe(t),e.signal.unsubscribe=()=>this.unsubscribe(t),e.signal}static source(){let e;return{token:new On(function(t){e=t}),cancel:e}}}var Rn=On;const xn={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511,WebServerIsDown:521,ConnectionTimedOut:522,OriginIsUnreachable:523,TimeoutOccurred:524,SslHandshakeFailed:525,InvalidSslCertificate:526};Object.entries(xn).forEach(([e,t])=>{xn[t]=e});var kn=xn;const jn=function e(t){const n=new Bn(t),r=ye(Bn.prototype.request,n);return ct.extend(r,Bn.prototype,n,{allOwnKeys:!0}),ct.extend(r,n,null,{allOwnKeys:!0}),r.create=function(n){return e(en(t,n))},r}(Pt);jn.Axios=Bn,jn.CanceledError=Wt,jn.CancelToken=Rn,jn.isCancel=Vt,jn.VERSION=wn,jn.toFormData=mt,jn.AxiosError=pt,jn.Cancel=jn.CanceledError,jn.all=function(e){return Promise.all(e)},jn.spread=function(e){return function(t){return e.apply(null,t)}},jn.isAxiosError=function(e){return ct.isObject(e)&&!0===e.isAxiosError},jn.mergeConfig=en,jn.AxiosHeaders=zt,jn.formToJSON=e=>kt(ct.isHTMLForm(e)?new FormData(e):e),jn.getAdapter=En.getAdapter,jn.HttpStatusCode=kn,jn.default=jn;var Pn=jn;function Tn(e,t){return e?Object.keys(e).map(n=>{const r=t||n,o=e[n];return"object"==typeof o?Tn(o,r):`${encodeURIComponent(r)}=${encodeURIComponent(o)}`}).join("&"):""}function Nn(e,t,n,r,o,u,i,s){const a=e?e.trim():null;if(null==a||a.length<1||i&&!i.test(a))return Promise.resolve([]);const l=u||"https://api.digitransit.fi/geocoding/v1/search";let c={text:a,...t,...r,lang:n};if(o&&(c={...c,sources:o}),s){const e=s.toString();c={...c,layers:e}}return(d=l,p=c,Pn.get(encodeURI(d)+(p?(-1===d.search(/\?/)?"?":"&")+Tn(p):""),{timeout:1e4,method:"GET",headers:{Accept:"application/json"}}).then(e=>e.data)).then(e=>e.features);var d,p}function Ln(e,t){return function(){return e.apply(t,arguments)}}const{toString:Mn}=Object.prototype,{getPrototypeOf:In}=Object,{iterator:Un,toStringTag:qn}=Symbol,zn=(e=>t=>{const n=Mn.call(t);return e[n]||(e[n]=n.slice(8,-1).toLowerCase())})(Object.create(null)),Hn=e=>(e=e.toLowerCase(),t=>zn(t)===e),Vn=e=>t=>typeof t===e,{isArray:Wn}=Array,$n=Vn("undefined");function Jn(e){return null!==e&&!$n(e)&&null!==e.constructor&&!$n(e.constructor)&&Xn(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const Kn=Hn("ArrayBuffer");const Gn=Vn("string"),Xn=Vn("function"),Qn=Vn("number"),Zn=e=>null!==e&&"object"==typeof e,Yn=e=>{if("object"!==zn(e))return!1;const t=In(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t)||qn in e||Un in e)},er=Hn("Date"),tr=Hn("File"),nr=Hn("Blob"),rr=Hn("FileList");const or="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},ur=void 0!==or.FormData?or.FormData:void 0,ir=Hn("URLSearchParams"),[sr,ar,lr,cr]=["ReadableStream","Request","Response","Headers"].map(Hn);function dr(e,t,{allOwnKeys:n=!1}={}){if(null==e)return;let r,o;if("object"!=typeof e&&(e=[e]),Wn(e))for(r=0,o=e.length;r<o;r++)t.call(null,e[r],r,e);else{if(Jn(e))return;const o=n?Object.getOwnPropertyNames(e):Object.keys(e),u=o.length;let i;for(r=0;r<u;r++)i=o[r],t.call(null,e[i],i,e)}}function pr(e,t){if(Jn(e))return null;t=t.toLowerCase();const n=Object.keys(e);let r,o=n.length;for(;o-- >0;)if(r=n[o],t===r.toLowerCase())return r;return null}const fr="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,hr=e=>!$n(e)&&e!==fr;const gr=(e=>t=>e&&t instanceof e)("undefined"!=typeof Uint8Array&&In(Uint8Array)),br=Hn("HTMLFormElement"),mr=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),{propertyIsEnumerable:yr}=Object.prototype,Er=Hn("RegExp"),Ar=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),r={};dr(n,(n,o)=>{let u;!1!==(u=t(n,o,e))&&(r[o]=u||n)}),Object.defineProperties(e,r)};const Fr=Hn("AsyncFunction"),wr=((e,t)=>e?setImmediate:t?((e,t)=>(fr.addEventListener("message",({source:n,data:r})=>{n===fr&&r===e&&t.length&&t.shift()()},!1),n=>{t.push(n),fr.postMessage(e,"*")}))(`axios@${Math.random()}`,[]):e=>setTimeout(e))("function"==typeof setImmediate,Xn(fr.postMessage)),vr="undefined"!=typeof queueMicrotask?queueMicrotask.bind(fr):"undefined"!=typeof process&&process.nextTick||wr;var _r={isArray:Wn,isArrayBuffer:Kn,isBuffer:Jn,isFormData:e=>{if(!e)return!1;if(ur&&e instanceof ur)return!0;const t=In(e);if(!t||t===Object.prototype)return!1;if(!Xn(e.append))return!1;const n=zn(e);return"formdata"===n||"object"===n&&Xn(e.toString)&&"[object FormData]"===e.toString()},isArrayBufferView:function(e){let t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&Kn(e.buffer),t},isString:Gn,isNumber:Qn,isBoolean:e=>!0===e||!1===e,isObject:Zn,isPlainObject:Yn,isEmptyObject:e=>{if(!Zn(e)||Jn(e))return!1;try{return 0===Object.keys(e).length&&Object.getPrototypeOf(e)===Object.prototype}catch(e){return!1}},isReadableStream:sr,isRequest:ar,isResponse:lr,isHeaders:cr,isUndefined:$n,isDate:er,isFile:tr,isReactNativeBlob:e=>!(!e||void 0===e.uri),isReactNative:e=>e&&void 0!==e.getParts,isBlob:nr,isRegExp:Er,isFunction:Xn,isStream:e=>Zn(e)&&Xn(e.pipe),isURLSearchParams:ir,isTypedArray:gr,isFileList:rr,forEach:dr,merge:function e(...t){const{caseless:n,skipUndefined:r}=hr(this)&&this||{},o={},u=(t,u)=>{if("__proto__"===u||"constructor"===u||"prototype"===u)return;const i=n&&"string"==typeof u&&pr(o,u)||u,s=mr(o,i)?o[i]:void 0;Yn(s)&&Yn(t)?o[i]=e(s,t):Yn(t)?o[i]=e({},t):Wn(t)?o[i]=t.slice():r&&$n(t)||(o[i]=t)};for(let e=0,n=t.length;e<n;e++){const n=t[e];if(!n||Jn(n))continue;if(dr(n,u),"object"!=typeof n||Wn(n))continue;const r=Object.getOwnPropertySymbols(n);for(let e=0;e<r.length;e++){const t=r[e];yr.call(n,t)&&u(n[t],t)}}return o},extend:(e,t,n,{allOwnKeys:r}={})=>(dr(t,(t,r)=>{n&&Xn(t)?Object.defineProperty(e,r,{__proto__:null,value:Ln(t,n),writable:!0,enumerable:!0,configurable:!0}):Object.defineProperty(e,r,{__proto__:null,value:t,writable:!0,enumerable:!0,configurable:!0})},{allOwnKeys:r}),e),trim:e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""),stripBOM:e=>(65279===e.charCodeAt(0)&&(e=e.slice(1)),e),inherits:(e,t,n,r)=>{e.prototype=Object.create(t.prototype,r),Object.defineProperty(e.prototype,"constructor",{__proto__:null,value:e,writable:!0,enumerable:!1,configurable:!0}),Object.defineProperty(e,"super",{__proto__:null,value:t.prototype}),n&&Object.assign(e.prototype,n)},toFlatObject:(e,t,n,r)=>{let o,u,i;const s={};if(t=t||{},null==e)return t;do{for(o=Object.getOwnPropertyNames(e),u=o.length;u-- >0;)i=o[u],r&&!r(i,e,t)||s[i]||(t[i]=e[i],s[i]=!0);e=!1!==n&&In(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},kindOf:zn,kindOfTest:Hn,endsWith:(e,t,n)=>{e=String(e),(void 0===n||n>e.length)&&(n=e.length),n-=t.length;const r=e.indexOf(t,n);return-1!==r&&r===n},toArray:e=>{if(!e)return null;if(Wn(e))return e;let t=e.length;if(!Qn(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},forEachEntry:(e,t)=>{const n=(e&&e[Un]).call(e);let r;for(;(r=n.next())&&!r.done;){const n=r.value;t.call(e,n[0],n[1])}},matchAll:(e,t)=>{let n;const r=[];for(;null!==(n=e.exec(t));)r.push(n);return r},isHTMLForm:br,hasOwnProperty:mr,hasOwnProp:mr,reduceDescriptors:Ar,freezeMethods:e=>{Ar(e,(t,n)=>{if(Xn(e)&&["arguments","caller","callee"].includes(n))return!1;const r=e[n];Xn(r)&&(t.enumerable=!1,"writable"in t?t.writable=!1:t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")}))})},toObjectSet:(e,t)=>{const n={},r=e=>{e.forEach(e=>{n[e]=!0})};return Wn(e)?r(e):r(String(e).split(t)),n},toCamelCase:e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(e,t,n){return t.toUpperCase()+n}),noop:()=>{},toFiniteNumber:(e,t)=>null!=e&&Number.isFinite(e=+e)?e:t,findKey:pr,global:fr,isContextDefined:hr,isSpecCompliantForm:function(e){return!!(e&&Xn(e.append)&&"FormData"===e[qn]&&e[Un])},toJSONObject:e=>{const t=new WeakSet,n=e=>{if(Zn(e)){if(t.has(e))return;if(Jn(e))return e;if(!("toJSON"in e)){t.add(e);const r=Wn(e)?[]:{};return dr(e,(e,t)=>{const o=n(e);!$n(o)&&(r[t]=o)}),t.delete(e),r}}return e};return n(e)},isAsyncFn:Fr,isThenable:e=>e&&(Zn(e)||Xn(e))&&Xn(e.then)&&Xn(e.catch),setImmediate:wr,asap:vr,isIterable:e=>null!=e&&Xn(e[Un])};const Cr=_r.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]);const Dr=new RegExp("[\\u0000-\\u0008\\u000a-\\u001f\\u007f]+","g"),Sr=new RegExp("[^\\u0009\\u0020-\\u007e\\u0080-\\u00ff]+","g");function Br(e,t){return _r.isArray(e)?e.map(e=>Br(e,t)):function(e){let t=0,n=e.length;for(;t<n;){const n=e.charCodeAt(t);if(9!==n&&32!==n)break;t+=1}for(;n>t;){const t=e.charCodeAt(n-1);if(9!==t&&32!==t)break;n-=1}return 0===t&&n===e.length?e:e.slice(t,n)}(String(e).replace(t,""))}function Or(e){const t=Object.create(null);return _r.forEach(e.toJSON(),(e,n)=>{t[n]=(e=>Br(e,Sr))(e)}),t}const Rr=Symbol("internals");function xr(e){return e&&String(e).trim().toLowerCase()}function kr(e){return!1===e||null==e?e:_r.isArray(e)?e.map(kr):(e=>Br(e,Dr))(String(e))}function jr(e,t,n,r,o){return _r.isFunction(r)?r.call(this,t,n):(o&&(t=n),_r.isString(t)?_r.isString(r)?-1!==t.indexOf(r):_r.isRegExp(r)?r.test(t):void 0:void 0)}class Pr{constructor(e){e&&this.set(e)}set(e,t,n){const r=this;function o(e,t,n){const o=xr(t);if(!o)return;const u=_r.findKey(r,o);(!u||void 0===r[u]||!0===n||void 0===n&&!1!==r[u])&&(r[u||t]=kr(e))}const u=(e,t)=>_r.forEach(e,(e,n)=>o(e,n,t));if(_r.isPlainObject(e)||e instanceof this.constructor)u(e,t);else if(_r.isString(e)&&(e=e.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim()))u((e=>{const t={};let n,r,o;return e&&e.split("\n").forEach(function(e){o=e.indexOf(":"),n=e.substring(0,o).trim().toLowerCase(),r=e.substring(o+1).trim(),!n||t[n]&&Cr[n]||("set-cookie"===n?t[n]?t[n].push(r):t[n]=[r]:t[n]=t[n]?t[n]+", "+r:r)}),t})(e),t);else if(_r.isObject(e)&&_r.isIterable(e)){let n,r,o={};for(const t of e){if(!_r.isArray(t))throw new TypeError("Object iterator must return a key-value pair");o[r=t[0]]=(n=o[r])?_r.isArray(n)?[...n,t[1]]:[n,t[1]]:t[1]}u(o,t)}else null!=e&&o(t,e,n);return this}get(e,t){if(e=xr(e)){const n=_r.findKey(this,e);if(n){const e=this[n];if(!t)return e;if(!0===t)return function(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let r;for(;r=n.exec(e);)t[r[1]]=r[2];return t}(e);if(_r.isFunction(t))return t.call(this,e,n);if(_r.isRegExp(t))return t.exec(e);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,t){if(e=xr(e)){const n=_r.findKey(this,e);return!(!n||void 0===this[n]||t&&!jr(0,this[n],n,t))}return!1}delete(e,t){const n=this;let r=!1;function o(e){if(e=xr(e)){const o=_r.findKey(n,e);!o||t&&!jr(0,n[o],o,t)||(delete n[o],r=!0)}}return _r.isArray(e)?e.forEach(o):o(e),r}clear(e){const t=Object.keys(this);let n=t.length,r=!1;for(;n--;){const o=t[n];e&&!jr(0,this[o],o,e,!0)||(delete this[o],r=!0)}return r}normalize(e){const t=this,n={};return _r.forEach(this,(r,o)=>{const u=_r.findKey(n,o);if(u)return t[u]=kr(r),void delete t[o];const i=e?function(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(e,t,n)=>t.toUpperCase()+n)}(o):String(o).trim();i!==o&&delete t[o],t[i]=kr(r),n[i]=!0}),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const t=Object.create(null);return _r.forEach(this,(n,r)=>{null!=n&&!1!==n&&(t[r]=e&&_r.isArray(n)?n.join(", "):n)}),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([e,t])=>e+": "+t).join("\n")}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...t){const n=new this(e);return t.forEach(e=>n.set(e)),n}static accessor(e){const t=(this[Rr]=this[Rr]={accessors:{}}).accessors,n=this.prototype;function r(e){const r=xr(e);t[r]||(!function(e,t){const n=_r.toCamelCase(" "+t);["get","set","has"].forEach(r=>{Object.defineProperty(e,r+n,{__proto__:null,value:function(e,n,o){return this[r].call(this,t,e,n,o)},configurable:!0})})}(n,e),t[r]=!0)}return _r.isArray(e)?e.forEach(r):r(e),this}}Pr.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),_r.reduceDescriptors(Pr.prototype,({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(e){this[n]=e}}}),_r.freezeMethods(Pr);var Tr=Pr;function Nr(e,t){const n=new Set(t.map(e=>String(e).toLowerCase())),r=[],o=e=>{if(null===e||"object"!=typeof e)return e;if(_r.isBuffer(e))return e;if(-1!==r.indexOf(e))return;let t;if(e instanceof Tr&&(e=e.toJSON()),r.push(e),_r.isArray(e))t=[],e.forEach((e,n)=>{const r=o(e);_r.isUndefined(r)||(t[n]=r)});else{if(!_r.isPlainObject(e)&&function(e){if(_r.hasOwnProp(e,"toJSON"))return!0;let t=Object.getPrototypeOf(e);for(;t&&t!==Object.prototype;){if(_r.hasOwnProp(t,"toJSON"))return!0;t=Object.getPrototypeOf(t)}return!1}(e))return r.pop(),e;t=Object.create(null);for(const[r,u]of Object.entries(e)){const e=n.has(r.toLowerCase())?"[REDACTED ****]":o(u);_r.isUndefined(e)||(t[r]=e)}}return r.pop(),t};return o(e)}class Lr extends Error{static from(e,t,n,r,o,u){const i=new Lr(e.message,t||e.code,n,r,o);return i.cause=e,i.name=e.name,null!=e.status&&null==i.status&&(i.status=e.status),u&&Object.assign(i,u),i}constructor(e,t,n,r,o){super(e),Object.defineProperty(this,"message",{__proto__:null,value:e,enumerable:!0,writable:!0,configurable:!0}),this.name="AxiosError",this.isAxiosError=!0,t&&(this.code=t),n&&(this.config=n),r&&(this.request=r),o&&(this.response=o,this.status=o.status)}toJSON(){const e=this.config,t=e&&_r.hasOwnProp(e,"redact")?e.redact:void 0,n=_r.isArray(t)&&t.length>0?Nr(e,t):_r.toJSONObject(e);return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:n,code:this.code,status:this.status}}}Lr.ERR_BAD_OPTION_VALUE="ERR_BAD_OPTION_VALUE",Lr.ERR_BAD_OPTION="ERR_BAD_OPTION",Lr.ECONNABORTED="ECONNABORTED",Lr.ETIMEDOUT="ETIMEDOUT",Lr.ECONNREFUSED="ECONNREFUSED",Lr.ERR_NETWORK="ERR_NETWORK",Lr.ERR_FR_TOO_MANY_REDIRECTS="ERR_FR_TOO_MANY_REDIRECTS",Lr.ERR_DEPRECATED="ERR_DEPRECATED",Lr.ERR_BAD_RESPONSE="ERR_BAD_RESPONSE",Lr.ERR_BAD_REQUEST="ERR_BAD_REQUEST",Lr.ERR_CANCELED="ERR_CANCELED",Lr.ERR_NOT_SUPPORT="ERR_NOT_SUPPORT",Lr.ERR_INVALID_URL="ERR_INVALID_URL",Lr.ERR_FORM_DATA_DEPTH_EXCEEDED="ERR_FORM_DATA_DEPTH_EXCEEDED";var Mr=Lr;function Ir(e){return _r.isPlainObject(e)||_r.isArray(e)}function Ur(e){return _r.endsWith(e,"[]")?e.slice(0,-2):e}function qr(e,t,n){return e?e.concat(t).map(function(e,t){return e=Ur(e),!n&&t?"["+e+"]":e}).join(n?".":""):t}const zr=_r.toFlatObject(_r,{},null,function(e){return/^is[A-Z]/.test(e)});function Hr(e,t,n){if(!_r.isObject(e))throw new TypeError("target must be an object");t=t||new FormData;const r=(n=_r.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,function(e,t){return!_r.isUndefined(t[e])})).metaTokens,o=n.visitor||d,u=n.dots,i=n.indexes,s=n.Blob||"undefined"!=typeof Blob&&Blob,a=void 0===n.maxDepth?100:n.maxDepth,l=s&&_r.isSpecCompliantForm(t);if(!_r.isFunction(o))throw new TypeError("visitor must be a function");function c(e){if(null===e)return"";if(_r.isDate(e))return e.toISOString();if(_r.isBoolean(e))return e.toString();if(!l&&_r.isBlob(e))throw new Mr("Blob is not supported. Use a Buffer instead.");return _r.isArrayBuffer(e)||_r.isTypedArray(e)?l&&"function"==typeof Blob?new Blob([e]):Buffer.from(e):e}function d(e,n,o){let s=e;if(_r.isReactNative(t)&&_r.isReactNativeBlob(e))return t.append(qr(o,n,u),c(e)),!1;if(e&&!o&&"object"==typeof e)if(_r.endsWith(n,"{}"))n=r?n:n.slice(0,-2),e=JSON.stringify(e);else if(_r.isArray(e)&&function(e){return _r.isArray(e)&&!e.some(Ir)}(e)||(_r.isFileList(e)||_r.endsWith(n,"[]"))&&(s=_r.toArray(e)))return n=Ur(n),s.forEach(function(e,r){!_r.isUndefined(e)&&null!==e&&t.append(!0===i?qr([n],r,u):null===i?n:n+"[]",c(e))}),!1;return!!Ir(e)||(t.append(qr(o,n,u),c(e)),!1)}const p=[],f=Object.assign(zr,{defaultVisitor:d,convertValue:c,isVisitable:Ir});if(!_r.isObject(e))throw new TypeError("data must be an object");return function e(n,r,u=0){if(!_r.isUndefined(n)){if(u>a)throw new Mr("Object is too deeply nested ("+u+" levels). Max depth: "+a,Mr.ERR_FORM_DATA_DEPTH_EXCEEDED);if(-1!==p.indexOf(n))throw new Error("Circular reference detected in "+r.join("."));p.push(n),_r.forEach(n,function(n,i){!0===(!(_r.isUndefined(n)||null===n)&&o.call(t,n,_r.isString(i)?i.trim():i,r,f))&&e(n,r?r.concat(i):[i],u+1)}),p.pop()}}(e),t}function Vr(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"};return encodeURIComponent(e).replace(/[!'()~]|%20/g,function(e){return t[e]})}function Wr(e,t){this._pairs=[],e&&Hr(e,this,t)}const $r=Wr.prototype;function Jr(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+")}function Kr(e,t,n){if(!t)return e;const r=n&&n.encode||Jr,o=_r.isFunction(n)?{serialize:n}:n,u=o&&o.serialize;let i;if(i=u?u(t,o):_r.isURLSearchParams(t)?t.toString():new Wr(t,o).toString(r),i){const t=e.indexOf("#");-1!==t&&(e=e.slice(0,t)),e+=(-1===e.indexOf("?")?"?":"&")+i}return e}$r.append=function(e,t){this._pairs.push([e,t])},$r.toString=function(e){const t=e?function(t){return e.call(this,t,Vr)}:Vr;return this._pairs.map(function(e){return t(e[0])+"="+t(e[1])},"").join("&")};var Gr=class{constructor(){this.handlers=[]}use(e,t,n){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){_r.forEach(this.handlers,function(t){null!==t&&e(t)})}},Xr={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1,legacyInterceptorReqResOrdering:!0,advertiseZstdAcceptEncoding:!1},Qr={isBrowser:!0,classes:{URLSearchParams:"undefined"!=typeof URLSearchParams?URLSearchParams:Wr,FormData:"undefined"!=typeof FormData?FormData:null,Blob:"undefined"!=typeof Blob?Blob:null},protocols:["http","https","file","blob","url","data"]};const Zr="undefined"!=typeof window&&"undefined"!=typeof document,Yr="object"==typeof navigator&&navigator||void 0,eo=Zr&&(!Yr||["ReactNative","NativeScript","NS"].indexOf(Yr.product)<0),to="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"==typeof self.importScripts,no=Zr&&window.location.href||"http://localhost";var ro={...Object.freeze({__proto__:null,hasBrowserEnv:Zr,hasStandardBrowserWebWorkerEnv:to,hasStandardBrowserEnv:eo,navigator:Yr,origin:no}),...Qr};function oo(e){function t(e,n,r,o){let u=e[o++];if("__proto__"===u)return!0;const i=Number.isFinite(+u),s=o>=e.length;if(u=!u&&_r.isArray(r)?r.length:u,s)return _r.hasOwnProp(r,u)?r[u]=_r.isArray(r[u])?r[u].concat(n):[r[u],n]:r[u]=n,!i;_r.hasOwnProp(r,u)&&_r.isObject(r[u])||(r[u]=[]);return t(e,n,r[u],o)&&_r.isArray(r[u])&&(r[u]=function(e){const t={},n=Object.keys(e);let r;const o=n.length;let u;for(r=0;r<o;r++)u=n[r],t[u]=e[u];return t}(r[u])),!i}if(_r.isFormData(e)&&_r.isFunction(e.entries)){const n={};return _r.forEachEntry(e,(e,r)=>{t(function(e){return _r.matchAll(/\w+|\[(\w*)]/g,e).map(e=>"[]"===e[0]?"":e[1]||e[0])}(e),r,n,0)}),n}return null}const uo=(e,t)=>null!=e&&_r.hasOwnProp(e,t)?e[t]:void 0;const io={transitional:Xr,adapter:["xhr","http","fetch"],transformRequest:[function(e,t){const n=t.getContentType()||"",r=n.indexOf("application/json")>-1,o=_r.isObject(e);o&&_r.isHTMLForm(e)&&(e=new FormData(e));if(_r.isFormData(e))return r?JSON.stringify(oo(e)):e;if(_r.isArrayBuffer(e)||_r.isBuffer(e)||_r.isStream(e)||_r.isFile(e)||_r.isBlob(e)||_r.isReadableStream(e))return e;if(_r.isArrayBufferView(e))return e.buffer;if(_r.isURLSearchParams(e))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let u;if(o){const t=uo(this,"formSerializer");if(n.indexOf("application/x-www-form-urlencoded")>-1)return function(e,t){return Hr(e,new ro.classes.URLSearchParams,{visitor:function(e,t,n,r){return ro.isNode&&_r.isBuffer(e)?(this.append(t,e.toString("base64")),!1):r.defaultVisitor.apply(this,arguments)},...t})}(e,t).toString();if((u=_r.isFileList(e))||n.indexOf("multipart/form-data")>-1){const n=uo(this,"env"),r=n&&n.FormData;return Hr(u?{"files[]":e}:e,r&&new r,t)}}return o||r?(t.setContentType("application/json",!1),function(e,t,n){if(_r.isString(e))try{return(t||JSON.parse)(e),_r.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(n||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){const t=uo(this,"transitional")||io.transitional,n=t&&t.forcedJSONParsing,r=uo(this,"responseType"),o="json"===r;if(_r.isResponse(e)||_r.isReadableStream(e))return e;if(e&&_r.isString(e)&&(n&&!r||o)){const n=!(t&&t.silentJSONParsing)&&o;try{return JSON.parse(e,uo(this,"parseReviver"))}catch(e){if(n){if("SyntaxError"===e.name)throw Mr.from(e,Mr.ERR_BAD_RESPONSE,this,null,uo(this,"response"));throw e}}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:ro.classes.FormData,Blob:ro.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};_r.forEach(["delete","get","head","post","put","patch","query"],e=>{io.headers[e]={}});var so=io;function ao(e,t){const n=this||so,r=t||n,o=Tr.from(r.headers);let u=r.data;return _r.forEach(e,function(e){u=e.call(n,u,o.normalize(),t?t.status:void 0)}),o.normalize(),u}function lo(e){return!(!e||!e.__CANCEL__)}var co=class extends Mr{constructor(e,t,n){super(null==e?"canceled":e,Mr.ERR_CANCELED,t,n),this.name="CanceledError",this.__CANCEL__=!0}};function po(e,t,n){const r=n.config.validateStatus;n.status&&r&&!r(n.status)?t(new Mr("Request failed with status code "+n.status,n.status>=400&&n.status<500?Mr.ERR_BAD_REQUEST:Mr.ERR_BAD_RESPONSE,n.config,n.request,n)):e(n)}const fo=(e,t,n=3)=>{let r=0;const o=function(e,t){e=e||10;const n=new Array(e),r=new Array(e);let o,u=0,i=0;return t=void 0!==t?t:1e3,function(s){const a=Date.now(),l=r[i];o||(o=a),n[u]=s,r[u]=a;let c=i,d=0;for(;c!==u;)d+=n[c++],c%=e;if(u=(u+1)%e,u===i&&(i=(i+1)%e),a-o<t)return;const p=l&&a-l;return p?Math.round(1e3*d/p):void 0}}(50,250);return function(e,t){let n,r,o=0,u=1e3/t;const i=(t,u=Date.now())=>{o=u,n=null,r&&(clearTimeout(r),r=null),e(...t)};return[(...e)=>{const t=Date.now(),s=t-o;s>=u?i(e,t):(n=e,r||(r=setTimeout(()=>{r=null,i(n)},u-s)))},()=>n&&i(n)]}(n=>{if(!n||"number"!=typeof n.loaded)return;const u=n.loaded,i=n.lengthComputable?n.total:void 0,s=null!=i?Math.min(u,i):u,a=Math.max(0,s-r),l=o(a);r=Math.max(r,s);e({loaded:s,total:i,progress:i?s/i:void 0,bytes:a,rate:l||void 0,estimated:l&&i?(i-s)/l:void 0,event:n,lengthComputable:null!=i,[t?"download":"upload"]:!0})},n)},ho=(e,t)=>{const n=null!=e;return[r=>t[0]({lengthComputable:n,total:e,loaded:r}),t[1]]},go=e=>(...t)=>_r.asap(()=>e(...t));var bo=ro.hasStandardBrowserEnv?((e,t)=>n=>(n=new URL(n,ro.origin),e.protocol===n.protocol&&e.host===n.host&&(t||e.port===n.port)))(new URL(ro.origin),ro.navigator&&/(msie|trident)/i.test(ro.navigator.userAgent)):()=>!0,mo=ro.hasStandardBrowserEnv?{write(e,t,n,r,o,u,i){if("undefined"==typeof document)return;const s=[`${e}=${encodeURIComponent(t)}`];_r.isNumber(n)&&s.push(`expires=${new Date(n).toUTCString()}`),_r.isString(r)&&s.push(`path=${r}`),_r.isString(o)&&s.push(`domain=${o}`),!0===u&&s.push("secure"),_r.isString(i)&&s.push(`SameSite=${i}`),document.cookie=s.join("; ")},read(e){if("undefined"==typeof document)return null;const t=document.cookie.split(";");for(let n=0;n<t.length;n++){const r=t[n].replace(/^\s+/,""),o=r.indexOf("=");if(-1!==o&&r.slice(0,o)===e)return decodeURIComponent(r.slice(o+1))}return null},remove(e){this.write(e,"",Date.now()-864e5,"/")}}:{write(){},read:()=>null,remove(){}};function yo(e,t,n){let r=!("string"==typeof(o=t)&&/^([a-z][a-z\d+\-.]*:)?\/\//i.test(o));var o;return e&&(r||!1===n)?function(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}(e,t):t}const Eo=e=>e instanceof Tr?{...e}:e;function Ao(e,t){t=t||{};const n=Object.create(null);function r(e,t,n,r){return _r.isPlainObject(e)&&_r.isPlainObject(t)?_r.merge.call({caseless:r},e,t):_r.isPlainObject(t)?_r.merge({},t):_r.isArray(t)?t.slice():t}function o(e,t,n,o){return _r.isUndefined(t)?_r.isUndefined(e)?void 0:r(void 0,e,0,o):r(e,t,0,o)}function u(e,t){if(!_r.isUndefined(t))return r(void 0,t)}function i(e,t){return _r.isUndefined(t)?_r.isUndefined(e)?void 0:r(void 0,e):r(void 0,t)}function s(n,o,u){return _r.hasOwnProp(t,u)?r(n,o):_r.hasOwnProp(e,u)?r(void 0,n):void 0}Object.defineProperty(n,"hasOwnProperty",{__proto__:null,value:Object.prototype.hasOwnProperty,enumerable:!1,writable:!0,configurable:!0});const a={url:u,method:u,data:u,baseURL:i,transformRequest:i,transformResponse:i,paramsSerializer:i,timeout:i,timeoutMessage:i,withCredentials:i,withXSRFToken:i,adapter:i,responseType:i,xsrfCookieName:i,xsrfHeaderName:i,onUploadProgress:i,onDownloadProgress:i,decompress:i,maxContentLength:i,maxBodyLength:i,beforeRedirect:i,transport:i,httpAgent:i,httpsAgent:i,cancelToken:i,socketPath:i,allowedSocketPaths:i,responseEncoding:i,validateStatus:s,headers:(e,t,n)=>o(Eo(e),Eo(t),0,!0)};return _r.forEach(Object.keys({...e,...t}),function(r){if("__proto__"===r||"constructor"===r||"prototype"===r)return;const u=_r.hasOwnProp(a,r)?a[r]:o,i=u(_r.hasOwnProp(e,r)?e[r]:void 0,_r.hasOwnProp(t,r)?t[r]:void 0,r);_r.isUndefined(i)&&u!==s||(n[r]=i)}),n}const Fo=["content-type","content-length"];function wo(e){const t=Ao({},e),n=e=>_r.hasOwnProp(t,e)?t[e]:void 0,r=n("data");let o=n("withXSRFToken");const u=n("xsrfHeaderName"),i=n("xsrfCookieName");let s=n("headers");const a=n("auth"),l=n("baseURL"),c=n("allowAbsoluteUrls"),d=n("url");var p;if(t.headers=s=Tr.from(s),t.url=Kr(yo(l,d,c),n("params"),n("paramsSerializer")),a&&s.set("Authorization","Basic "+btoa((a.username||"")+":"+(a.password?(p=a.password,encodeURIComponent(p).replace(/%([0-9A-F]{2})/gi,(e,t)=>String.fromCharCode(parseInt(t,16)))):""))),_r.isFormData(r)&&(ro.hasStandardBrowserEnv||ro.hasStandardBrowserWebWorkerEnv||_r.isReactNative(r)?s.setContentType(void 0):_r.isFunction(r.getHeaders)&&function(e,t,n){"content-only"===n?Object.entries(t).forEach(([t,n])=>{Fo.includes(t.toLowerCase())&&e.set(t,n)}):e.set(t)}(s,r.getHeaders(),n("formDataHeaderPolicy"))),ro.hasStandardBrowserEnv){_r.isFunction(o)&&(o=o(t));if(!0===o||null==o&&bo(t.url)){const e=u&&i&&mo.read(i);e&&s.set(u,e)}}return t}var vo="undefined"!=typeof XMLHttpRequest&&function(e){return new Promise(function(t,n){const r=wo(e);let o=r.data;const u=Tr.from(r.headers).normalize();let i,s,a,l,c,{responseType:d,onUploadProgress:p,onDownloadProgress:f}=r;function h(){l&&l(),c&&c(),r.cancelToken&&r.cancelToken.unsubscribe(i),r.signal&&r.signal.removeEventListener("abort",i)}let g=new XMLHttpRequest;function b(){if(!g)return;const r=Tr.from("getAllResponseHeaders"in g&&g.getAllResponseHeaders());po(function(e){t(e),h()},function(e){n(e),h()},{data:d&&"text"!==d&&"json"!==d?g.response:g.responseText,status:g.status,statusText:g.statusText,headers:r,config:e,request:g}),g=null}g.open(r.method.toUpperCase(),r.url,!0),g.timeout=r.timeout,"onloadend"in g?g.onloadend=b:g.onreadystatechange=function(){g&&4===g.readyState&&(0!==g.status||g.responseURL&&g.responseURL.startsWith("file:"))&&setTimeout(b)},g.onabort=function(){g&&(n(new Mr("Request aborted",Mr.ECONNABORTED,e,g)),h(),g=null)},g.onerror=function(t){const r=t&&t.message?t.message:"Network Error",o=new Mr(r,Mr.ERR_NETWORK,e,g);o.event=t||null,n(o),h(),g=null},g.ontimeout=function(){let t=r.timeout?"timeout of "+r.timeout+"ms exceeded":"timeout exceeded";const o=r.transitional||Xr;r.timeoutErrorMessage&&(t=r.timeoutErrorMessage),n(new Mr(t,o.clarifyTimeoutError?Mr.ETIMEDOUT:Mr.ECONNABORTED,e,g)),h(),g=null},void 0===o&&u.setContentType(null),"setRequestHeader"in g&&_r.forEach(Or(u),function(e,t){g.setRequestHeader(t,e)}),_r.isUndefined(r.withCredentials)||(g.withCredentials=!!r.withCredentials),d&&"json"!==d&&(g.responseType=r.responseType),f&&([a,c]=fo(f,!0),g.addEventListener("progress",a)),p&&g.upload&&([s,l]=fo(p),g.upload.addEventListener("progress",s),g.upload.addEventListener("loadend",l)),(r.cancelToken||r.signal)&&(i=t=>{g&&(n(!t||t.type?new co(null,e,g):t),g.abort(),h(),g=null)},r.cancelToken&&r.cancelToken.subscribe(i),r.signal&&(r.signal.aborted?i():r.signal.addEventListener("abort",i)));const m=function(e){const t=/^([-+\w]{1,25}):(?:\/\/)?/.exec(e);return t&&t[1]||""}(r.url);!m||ro.protocols.includes(m)?g.send(o||null):n(new Mr("Unsupported protocol "+m+":",Mr.ERR_BAD_REQUEST,e))})};var _o=(e,t)=>{if(e=e?e.filter(Boolean):[],!t&&!e.length)return;const n=new AbortController;let r=!1;const o=function(e){if(!r){r=!0,i();const t=e instanceof Error?e:this.reason;n.abort(t instanceof Mr?t:new co(t instanceof Error?t.message:t))}};let u=t&&setTimeout(()=>{u=null,o(new Mr(`timeout of ${t}ms exceeded`,Mr.ETIMEDOUT))},t);const i=()=>{e&&(u&&clearTimeout(u),u=null,e.forEach(e=>{e.unsubscribe?e.unsubscribe(o):e.removeEventListener("abort",o)}),e=null)};e.forEach(e=>e.addEventListener("abort",o));const{signal:s}=n;return s.unsubscribe=()=>_r.asap(i),s};const Co=function*(e,t){let n=e.byteLength;if(!t||n<t)return void(yield e);let r,o=0;for(;o<n;)r=o+t,yield e.slice(o,r),o=r},Do=async function*(e){if(e[Symbol.asyncIterator])return void(yield*e);const t=e.getReader();try{for(;;){const{done:e,value:n}=await t.read();if(e)break;yield n}}finally{await t.cancel()}},So=(e,t,n,r)=>{const o=async function*(e,t){for await(const n of Do(e))yield*Co(n,t)}(e,t);let u,i=0,s=e=>{u||(u=!0,r&&r(e))};return new ReadableStream({async pull(e){try{const{done:t,value:r}=await o.next();if(t)return s(),void e.close();let u=r.byteLength;if(n){let e=i+=u;n(e)}e.enqueue(new Uint8Array(r))}catch(e){throw s(e),e}},cancel:e=>(s(e),o.return())},{highWaterMark:2})};const Bo="1.17.0",{isFunction:Oo}=_r,Ro=e=>{if(!_r.isString(e))return e;try{return decodeURIComponent(e)}catch(t){return e}},xo=(e,...t)=>{try{return!!e(...t)}catch(e){return!1}},ko=e=>{const t=void 0!==_r.global&&null!==_r.global?_r.global:globalThis,{ReadableStream:n,TextEncoder:r}=t;e=_r.merge.call({skipUndefined:!0},{Request:t.Request,Response:t.Response},e);const{fetch:o,Request:u,Response:i}=e,s=o?Oo(o):"function"==typeof fetch,a=Oo(u),l=Oo(i);if(!s)return!1;const c=s&&Oo(n),d=s&&("function"==typeof r?(p=new r,e=>p.encode(e)):async e=>new Uint8Array(await new u(e).arrayBuffer()));var p;const f=a&&c&&xo(()=>{let e=!1;const t=new u(ro.origin,{body:new n,method:"POST",get duplex(){return e=!0,"half"}}),r=t.headers.has("Content-Type");return null!=t.body&&t.body.cancel(),e&&!r}),h=l&&c&&xo(()=>_r.isReadableStream(new i("").body)),g={stream:h&&(e=>e.body)};s&&["text","arrayBuffer","blob","formData","stream"].forEach(e=>{!g[e]&&(g[e]=(t,n)=>{let r=t&&t[e];if(r)return r.call(t);throw new Mr(`Response type '${e}' is not supported`,Mr.ERR_NOT_SUPPORT,n)})});const b=async(e,t)=>{const n=_r.toFiniteNumber(e.getContentLength());return null==n?(async e=>{if(null==e)return 0;if(_r.isBlob(e))return e.size;if(_r.isSpecCompliantForm(e)){const t=new u(ro.origin,{method:"POST",body:e});return(await t.arrayBuffer()).byteLength}return _r.isArrayBufferView(e)||_r.isArrayBuffer(e)?e.byteLength:(_r.isURLSearchParams(e)&&(e+=""),_r.isString(e)?(await d(e)).byteLength:void 0)})(t):n};return async e=>{let{url:t,method:n,data:s,signal:l,cancelToken:c,timeout:d,onDownloadProgress:p,onUploadProgress:m,responseType:y,headers:E,withCredentials:A="same-origin",fetchOptions:F,maxContentLength:w,maxBodyLength:v}=wo(e);const _=_r.isNumber(w)&&w>-1,C=_r.isNumber(v)&&v>-1;let D=o||fetch;y=y?(y+"").toLowerCase():"text";let S=_o([l,c&&c.toAbortSignal()],d),B=null;const O=S&&S.unsubscribe&&(()=>{S.unsubscribe()});let R;try{let o;const l=(k="auth",_r.hasOwnProp(e,k)?e[k]:void 0);if(l){const e=l.username||"";o={username:e,password:l.password||""}}if((e=>{const t=e.indexOf("://");let n=e;return-1!==t&&(n=n.slice(t+3)),n.includes("@")||n.includes(":")})(t)){const e=new URL(t,ro.origin);if(!o&&(e.username||e.password)){const t=Ro(e.username);o={username:t,password:Ro(e.password)}}(e.username||e.password)&&(e.username="",e.password="",t=e.href)}if(o&&(E.delete("authorization"),E.set("Authorization","Basic "+btoa((x=(o.username||"")+":"+(o.password||""),encodeURIComponent(x).replace(/%([0-9A-F]{2})/gi,(e,t)=>String.fromCharCode(parseInt(t,16))))))),_&&"string"==typeof t&&t.startsWith("data:")){const n=function(e){if(!e||"string"!=typeof e)return 0;if(!e.startsWith("data:"))return 0;const t=e.indexOf(",");if(t<0)return 0;const n=e.slice(5,t),r=e.slice(t+1);if(/;base64/i.test(n)){let e=r.length;const t=r.length;for(let n=0;n<t;n++)if(37===r.charCodeAt(n)&&n+2<t){const t=r.charCodeAt(n+1),o=r.charCodeAt(n+2);(t>=48&&t<=57||t>=65&&t<=70||t>=97&&t<=102)&&(o>=48&&o<=57||o>=65&&o<=70||o>=97&&o<=102)&&(e-=2,n+=2)}let n=0,o=t-1;const u=e=>e>=2&&37===r.charCodeAt(e-2)&&51===r.charCodeAt(e-1)&&(68===r.charCodeAt(e)||100===r.charCodeAt(e));o>=0&&(61===r.charCodeAt(o)?(n++,o--):u(o)&&(n++,o-=3)),1===n&&o>=0&&(61===r.charCodeAt(o)||u(o))&&n++;const i=3*Math.floor(e/4)-(n||0);return i>0?i:0}if("undefined"!=typeof Buffer&&"function"==typeof Buffer.byteLength)return Buffer.byteLength(r,"utf8");let o=0;for(let e=0,t=r.length;e<t;e++){const n=r.charCodeAt(e);if(n<128)o+=1;else if(n<2048)o+=2;else if(n>=55296&&n<=56319&&e+1<t){const t=r.charCodeAt(e+1);t>=56320&&t<=57343?(o+=4,e++):o+=3}else o+=3}return o}(t);if(n>w)throw new Mr("maxContentLength size of "+w+" exceeded",Mr.ERR_BAD_RESPONSE,e,B)}if(C&&"get"!==n&&"head"!==n){const t=await b(E,s);if("number"==typeof t&&isFinite(t)&&t>v)throw new Mr("Request body larger than maxBodyLength limit",Mr.ERR_BAD_REQUEST,e,B)}if(m&&f&&"get"!==n&&"head"!==n&&0!==(R=await b(E,s))){let e,n=new u(t,{method:"POST",body:s,duplex:"half"});if(_r.isFormData(s)&&(e=n.headers.get("content-type"))&&E.setContentType(e),n.body){const[e,t]=ho(R,fo(go(m)));s=So(n.body,65536,e,t)}}_r.isString(A)||(A=A?"include":"omit");const c=a&&"credentials"in u.prototype;if(_r.isFormData(s)){const e=E.getContentType();e&&/^multipart\/form-data/i.test(e)&&!/boundary=/i.test(e)&&E.delete("content-type")}E.set("User-Agent","axios/"+Bo,!1);const d={...F,signal:S,method:n.toUpperCase(),headers:Or(E.normalize()),body:s,duplex:"half",credentials:c?A:void 0};B=a&&new u(t,d);let j=await(a?D(B,F):D(t,d));if(_){const t=_r.toFiniteNumber(j.headers.get("content-length"));if(null!=t&&t>w)throw new Mr("maxContentLength size of "+w+" exceeded",Mr.ERR_BAD_RESPONSE,e,B)}const P=h&&("stream"===y||"response"===y);if(h&&j.body&&(p||_||P&&O)){const t={};["status","statusText","headers"].forEach(e=>{t[e]=j[e]});const n=_r.toFiniteNumber(j.headers.get("content-length")),[r,o]=p&&ho(n,fo(go(p),!0))||[];let u=0;const s=t=>{if(_&&(u=t,u>w))throw new Mr("maxContentLength size of "+w+" exceeded",Mr.ERR_BAD_RESPONSE,e,B);r&&r(t)};j=new i(So(j.body,65536,s,()=>{o&&o(),O&&O()}),t)}y=y||"text";let T=await g[_r.findKey(g,y)||"text"](j,e);if(_&&!h&&!P){let t;if(null!=T&&("number"==typeof T.byteLength?t=T.byteLength:"number"==typeof T.size?t=T.size:"string"==typeof T&&(t="function"==typeof r?(new r).encode(T).byteLength:T.length)),"number"==typeof t&&t>w)throw new Mr("maxContentLength size of "+w+" exceeded",Mr.ERR_BAD_RESPONSE,e,B)}return!P&&O&&O(),await new Promise((t,n)=>{po(t,n,{data:T,headers:Tr.from(j.headers),status:j.status,statusText:j.statusText,config:e,request:B})})}catch(t){if(O&&O(),S&&S.aborted&&S.reason instanceof Mr){const n=S.reason;throw n.config=e,B&&(n.request=B),t!==n&&(n.cause=t),n}if(t&&"TypeError"===t.name&&/Load failed|fetch/i.test(t.message))throw Object.assign(new Mr("Network Error",Mr.ERR_NETWORK,e,B,t&&t.response),{cause:t.cause||t});throw Mr.from(t,t&&t.code,e,B,t&&t.response)}var x,k}},jo=new Map,Po=e=>{let t=e&&e.env||{};const{fetch:n,Request:r,Response:o}=t,u=[r,o,n];let i,s,a=u.length,l=jo;for(;a--;)i=u[a],s=l.get(i),void 0===s&&l.set(i,s=a?new Map:ko(t)),l=s;return s};Po();const To={http:null,xhr:vo,fetch:{get:Po}};_r.forEach(To,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{__proto__:null,value:t})}catch(e){}Object.defineProperty(e,"adapterName",{__proto__:null,value:t})}});const No=e=>`- ${e}`,Lo=e=>_r.isFunction(e)||null===e||!1===e;var Mo={getAdapter:function(e,t){e=_r.isArray(e)?e:[e];const{length:n}=e;let r,o;const u={};for(let i=0;i<n;i++){let n;if(r=e[i],o=r,!Lo(r)&&(o=To[(n=String(r)).toLowerCase()],void 0===o))throw new Mr(`Unknown adapter '${n}'`);if(o&&(_r.isFunction(o)||(o=o.get(t))))break;u[n||"#"+i]=o}if(!o){const e=Object.entries(u).map(([e,t])=>`adapter ${e} `+(!1===t?"is not supported by the environment":"is not available in the build"));let t=n?e.length>1?"since :\n"+e.map(No).join("\n"):" "+No(e[0]):"as no adapter specified";throw new Mr("There is no suitable adapter to dispatch the request "+t,"ERR_NOT_SUPPORT")}return o},adapters:To};function Io(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new co(null,e)}function Uo(e){Io(e),e.headers=Tr.from(e.headers),e.data=ao.call(e,e.transformRequest),-1!==["post","put","patch"].indexOf(e.method)&&e.headers.setContentType("application/x-www-form-urlencoded",!1);return Mo.getAdapter(e.adapter||so.adapter,e)(e).then(function(t){Io(e),e.response=t;try{t.data=ao.call(e,e.transformResponse,t)}finally{delete e.response}return t.headers=Tr.from(t.headers),t},function(t){if(!lo(t)&&(Io(e),t&&t.response)){e.response=t.response;try{t.response.data=ao.call(e,e.transformResponse,t.response)}finally{delete e.response}t.response.headers=Tr.from(t.response.headers)}return Promise.reject(t)})}const qo={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{qo[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}});const zo={};qo.transitional=function(e,t,n){function r(e,t){return"[Axios v"+Bo+"] Transitional option '"+e+"'"+t+(n?". "+n:"")}return(n,o,u)=>{if(!1===e)throw new Mr(r(o," has been removed"+(t?" in "+t:"")),Mr.ERR_DEPRECATED);return t&&!zo[o]&&(zo[o]=!0,console.warn(r(o," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(n,o,u)}},qo.spelling=function(e){return(t,n)=>(console.warn(`${n} is likely a misspelling of ${e}`),!0)};var Ho={assertOptions:function(e,t,n){if("object"!=typeof e)throw new Mr("options must be an object",Mr.ERR_BAD_OPTION_VALUE);const r=Object.keys(e);let o=r.length;for(;o-- >0;){const u=r[o],i=Object.prototype.hasOwnProperty.call(t,u)?t[u]:void 0;if(i){const t=e[u],n=void 0===t||i(t,u,e);if(!0!==n)throw new Mr("option "+u+" must be "+n,Mr.ERR_BAD_OPTION_VALUE);continue}if(!0!==n)throw new Mr("Unknown option "+u,Mr.ERR_BAD_OPTION)}},validators:qo};const Vo=Ho.validators;class Wo{constructor(e){this.defaults=e||{},this.interceptors={request:new Gr,response:new Gr}}async request(e,t){try{return await this._request(e,t)}catch(e){if(e instanceof Error){let t={};Error.captureStackTrace?Error.captureStackTrace(t):t=new Error;const n=(()=>{if(!t.stack)return"";const e=t.stack.indexOf("\n");return-1===e?"":t.stack.slice(e+1)})();try{if(e.stack){if(n){const t=n.indexOf("\n"),r=-1===t?-1:n.indexOf("\n",t+1),o=-1===r?"":n.slice(r+1);String(e.stack).endsWith(o)||(e.stack+="\n"+n)}}else e.stack=n}catch(e){}}throw e}}_request(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{},t=Ao(this.defaults,t);const{transitional:n,paramsSerializer:r,headers:o}=t;void 0!==n&&Ho.assertOptions(n,{silentJSONParsing:Vo.transitional(Vo.boolean),forcedJSONParsing:Vo.transitional(Vo.boolean),clarifyTimeoutError:Vo.transitional(Vo.boolean),legacyInterceptorReqResOrdering:Vo.transitional(Vo.boolean),advertiseZstdAcceptEncoding:Vo.transitional(Vo.boolean)},!1),null!=r&&(_r.isFunction(r)?t.paramsSerializer={serialize:r}:Ho.assertOptions(r,{encode:Vo.function,serialize:Vo.function},!0)),void 0!==t.allowAbsoluteUrls||(void 0!==this.defaults.allowAbsoluteUrls?t.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:t.allowAbsoluteUrls=!0),Ho.assertOptions(t,{baseUrl:Vo.spelling("baseURL"),withXsrfToken:Vo.spelling("withXSRFToken")},!0),t.method=(t.method||this.defaults.method||"get").toLowerCase();let u=o&&_r.merge(o.common,o[t.method]);o&&_r.forEach(["delete","get","head","post","put","patch","query","common"],e=>{delete o[e]}),t.headers=Tr.concat(u,o);const i=[];let s=!0;this.interceptors.request.forEach(function(e){if("function"==typeof e.runWhen&&!1===e.runWhen(t))return;s=s&&e.synchronous;const n=t.transitional||Xr;n&&n.legacyInterceptorReqResOrdering?i.unshift(e.fulfilled,e.rejected):i.push(e.fulfilled,e.rejected)});const a=[];let l;this.interceptors.response.forEach(function(e){a.push(e.fulfilled,e.rejected)});let c,d=0;if(!s){const e=[Uo.bind(this),void 0];for(e.unshift(...i),e.push(...a),c=e.length,l=Promise.resolve(t);d<c;)l=l.then(e[d++],e[d++]);return l}c=i.length;let p=t;for(;d<c;){const e=i[d++],t=i[d++];try{p=e(p)}catch(e){t.call(this,e);break}}try{l=Uo.call(this,p)}catch(e){return Promise.reject(e)}for(d=0,c=a.length;d<c;)l=l.then(a[d++],a[d++]);return l}getUri(e){return Kr(yo((e=Ao(this.defaults,e)).baseURL,e.url,e.allowAbsoluteUrls),e.params,e.paramsSerializer)}}_r.forEach(["delete","get","head","options"],function(e){Wo.prototype[e]=function(t,n){return this.request(Ao(n||{},{method:e,url:t,data:(n||{}).data}))}}),_r.forEach(["post","put","patch","query"],function(e){function t(t){return function(n,r,o){return this.request(Ao(o||{},{method:e,headers:t?{"Content-Type":"multipart/form-data"}:{},url:n,data:r}))}}Wo.prototype[e]=t(),"query"!==e&&(Wo.prototype[e+"Form"]=t(!0))});var $o=Wo;class Jo{constructor(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");let t;this.promise=new Promise(function(e){t=e});const n=this;this.promise.then(e=>{if(!n._listeners)return;let t=n._listeners.length;for(;t-- >0;)n._listeners[t](e);n._listeners=null}),this.promise.then=e=>{let t;const r=new Promise(e=>{n.subscribe(e),t=e}).then(e);return r.cancel=function(){n.unsubscribe(t)},r},e(function(e,r,o){n.reason||(n.reason=new co(e,r,o),t(n.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}toAbortSignal(){const e=new AbortController,t=t=>{e.abort(t)};return this.subscribe(t),e.signal.unsubscribe=()=>this.unsubscribe(t),e.signal}static source(){let e;return{token:new Jo(function(t){e=t}),cancel:e}}}var Ko=Jo;const Go={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511,WebServerIsDown:521,ConnectionTimedOut:522,OriginIsUnreachable:523,TimeoutOccurred:524,SslHandshakeFailed:525,InvalidSslCertificate:526};Object.entries(Go).forEach(([e,t])=>{Go[t]=e});var Xo=Go;const Qo=function e(t){const n=new $o(t),r=Ln($o.prototype.request,n);return _r.extend(r,$o.prototype,n,{allOwnKeys:!0}),_r.extend(r,n,null,{allOwnKeys:!0}),r.create=function(n){return e(Ao(t,n))},r}(so);Qo.Axios=$o,Qo.CanceledError=co,Qo.CancelToken=Ko,Qo.isCancel=lo,Qo.VERSION=Bo,Qo.toFormData=Hr,Qo.AxiosError=Mr,Qo.Cancel=Qo.CanceledError,Qo.all=function(e){return Promise.all(e)},Qo.spread=function(e){return function(t){return e.apply(null,t)}},Qo.isAxiosError=function(e){return _r.isObject(e)&&!0===e.isAxiosError},Qo.mergeConfig=Ao,Qo.AxiosHeaders=Tr,Qo.formToJSON=e=>oo(_r.isHTMLForm(e)?new FormData(e):e),Qo.getAdapter=Mo.getAdapter,Qo.HttpStatusCode=Xo,Qo.default=Qo;var Zo=Qo;function Yo(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function eu(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Yo(Object(n),!0).forEach(function(t){H(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Yo(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function tu(e,t){if(!e||e.length<1)return Promise.resolve([]);let n="";const r=e.map(e=>{const t="stop"===e.type?"stop":"station";let r=`gtfs${e.gtfsId.split(":")[0].toLowerCase()}:${t}:GTFS:${e.gtfsId}`;return e.code&&(r+=`#${e.code}`),n+=`${r},`,eu(eu({},e),{},{gid:r})}).reduce(function(e,t){return e[t.gid]=t,e},{});return(o=t,u={ids:n.slice(0,-1)},Zo.get(encodeURI(o)+(u?(-1===o.search(/\?/)?"?":"&")+Tn(u):""),{timeout:1e4,method:"GET",headers:{Accept:"application/json"}}).then(e=>e.data)).then(e=>e.features.map(e=>({type:"FavouriteStop",properties:{addendum:e.properties.addendum,gid:r[e.properties.gid].gid,code:r[e.properties.gid].code,gtfsId:r[e.properties.gid].gtfsId,lastUpdated:r[e.properties.gid].lastUpdated,favouriteId:r[e.properties.gid].favouriteId,address:e.properties.label,layer:fe(e.properties)?"favouriteStop":"favouriteStation"},geometry:e.geometry})));var o,u}function nu(e,t,n){let r=me(e,t,["properties.name","properties.label","properties.address","properties.shortName","properties.longName"]);return n&&(r=r.filter(e=>!n.includes(e.properties.layer))),Promise.resolve(O.default(r,10).map(e=>{const t=eu(eu({},e),{},{type:"OldSearch",timetableClicked:!1,arrowClicked:!1});return delete t.properties.confidence,t}))}const ru=["route-TRAM","route-BUS","route-RAIL","route-FERRY","route-SUBWAY","route-AIRPLANE","route-FUNICULAR"],ou=["venue","address","street"],uu=["carpark","bikepark"],iu=["stop","station"];const su=S.default(function(e,t,n,r,o,u,{input:i},s,a,l){const{getPositions:c,getFavouriteLocations:d,getOldSearches:p,getFavouriteStops:f,parkingAreaSources:h,getLanguage:g,getStopAndStationsQuery:b,getFavouriteVehicleRentalStationsQuery:m,getFavouriteVehicleRentalStations:y,getFavouriteRoutesQuery:E,getFavouriteRoutes:A,getRoutesQuery:F,context:w,isPeliasLocationAware:v,minimalRegexp:_,lineRegexp:C,URL_PELIAS:D,URL_PELIAS_PLACE:S,feedIDs:R,geocodingSearchParams:x,geocodingSources:k,getFutureRoutes:j,cityBikeNetworks:P}=r,T=!e||0===e.length,N=!t||0===t.length,L=c(w),M=[],I={type:"all",term:i,results:[]},U=g(w),q=v&&null!=l&&l.lat&&null!=l&&l.lon?{"focus.point.lat":l.lat.toFixed(3),"focus.point.lon":l.lon.toFixed(3)}:{},z=n?n.split("-")[1]:void 0;if(e.includes("CurrentPosition")&&"geolocation-not-supported"!==L.status&&M.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([])}(i,L)),(T||e.includes("MapPosition"))&&M.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=j(w);M.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 n=e.getFavouriteVehicleRentalStations(e.context);if((null==n?void 0:n.length)>0)return!0;const r=e.getFavouriteStops(e.context);return(null==r?void 0:r.length)>0}(r)&&M.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)),T||e.includes("Locations")){const n=x;if(t.includes("Favourite")){const e=d(w);M.push(function(e,t){return Promise.resolve(me(e,t,["address","name"]).map(e=>({type:"FavouritePlace",properties:eu(eu({},e),{},{label:e.name,layer:"favouritePlace"}),geometry:{type:"Point",coordinates:[e.lon,e.lat]}})))}(e,i)),t.includes("Back")&&M.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(N||t.includes("Datasource")){const t=["venue","address","street"];e.includes("Stations")&&t.push("station"),M.push(Nn(i,n,U,q,k.join(","),D,_,t))}if(N||t.includes("History")){const e=p(w,"endpoint"),t=["bikestation"];t.push(...iu),t.push(...ru),t.push(...uu),M.push(nu(e,i,t))}}if(T||e.includes("ParkingAreas")){if(N||t.includes("Datasource")){const e=x;u&&10!==u&&(e.size=u);const t=["carpark","bikepark"],n=h?h.join(","):null;M.push(Nn(i,e,U,q,n,D,_,t).then(e=>o?o(e,z):e))}if(N||t.includes("History")){const e=p(w),t=["bikestation"];t.push(...iu),t.push(...ru),t.push(...ou),M.push(nu(e,i,t))}}const H=e.includes("Stops"),V=e.includes("Stations");if(T||H||V){if(t.includes("Favourite")){const e=f(w);let t;t=e.every(e=>"station"===e.type)?tu(e,S).then(e=>o?o(e,z):e):b(e).then(e=>tu(e,S)).then(e=>o?o(e,z):e),M.push(function(e,t,n,r){return e.then(e=>me(e.filter(e=>"stop"===e.type?n:r),t,["properties.name","properties.name","properties.address"]))}(t,i,H,V))}if(N||t.includes("Datasource")){const t=[];H&&t.push("stop"),V&&t.push("station");const n=u&&10!==u?{size:u}:{};x&&x["boundary.country"]&&(n["boundary.country"]=x["boundary.country"]),(T||e.includes("Locations"))&&(n.dedupestops=1);const r=R.map(e=>`gtfs${e}`).join(",");M.push(Nn(i,n,U,q,r,D,_,t).then(e=>o?o(e,z):e))}if(N||t.includes("History")){const e=p(w).filter(e=>!e.properties.gid||e.properties.gid.includes("GTFS:")),t=["bikestation"];t.push(...ru),t.push(...ou),t.push(...uu),H||t.push("stop"),V||t.push("station"),n?M.push(nu(e,i,t).then(e=>o?o(e,z):e)):M.push(nu(e,i,t))}}if(T||e.includes("Routes")){if(t.includes("Favourite")){const e=A(w);M.push(E(e,i,z,a).then(e=>o?o(e,z,"Routes"):e))}if(M.push(F(i,R,n,a).then(e=>o?o(e,z,"Routes"):e)),N||t.includes("History")){const e=p(w),t=["bikestation"];n&&t.push(...ru.filter(e=>!(e===n))),t.push(...iu),t.push(...ou),t.push(...uu),M.push(nu(e,i,t).then(e=>o?o(e,z,"Routes"):e))}}if(T||e.includes("VehicleRentalStations")){if(t.includes("Favourite")){const e=y(w);M.push(m(e,i))}if(N||t.includes("Datasource")){const e=["bikestation"],t=u&&10!==u?{size:u}:{};M.push(Nn(i,t,U,q,P.join(","),D,_,e).then(e=>o?o(e,z,"VehicleRentalStations"):e))}if(N||t.includes("History")){const e=p(w),t=[...iu];t.push(...ru),t.push(...ou),t.push(...uu),M.push(nu(e,i,t))}}Promise.all(M).then(B.default).then(e=>{I.results=e}).catch(e=>{I.error=e}).then(()=>{s(eu(eu({},I),{},{results:ge(C,I.results,i)}))})},300,{leading:!0}),au=h.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 lu(e,t){void 0===t&&(t={});var n=t.insertAt;if(e&&"undefined"!=typeof document){var r=document.head||document.getElementsByTagName("head")[0],o=document.createElement("style");o.type="text/css","top"===n&&r.firstChild?r.insertBefore(o,r.firstChild):r.appendChild(o),o.styleSheet?o.styleSheet.cssText=e:o.appendChild(document.createTextNode(e))}}au.init();var cu={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",hidden:"styles_hidden__Y0n2p"};lu("input[type=text] {\n margin: 0;\n}\n\n.styles_container__CyBuz {\n display: flex;\n width: 100%;\n}\n.styles_container__CyBuz .styles_input__x7Oye.styles_favourite__xn1Du {\n padding-left: 47px;\n}\n.styles_container__CyBuz .styles_input__x7Oye.styles_thin__ToA7- {\n height: 34px;\n}\n.styles_container__CyBuz .styles_input__x7Oye {\n font-size: 16px;\n font-family: inherit;\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}\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}\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 }\n}\n.styles_container__CyBuz .styles_input__x7Oye::-webkit-input-placeholder {\n color: #666;\n opacity: 1;\n font-size: 15px;\n}\n.styles_container__CyBuz .styles_input__x7Oye::placeholder {\n color: #666;\n opacity: 1;\n font-size: 15px;\n}\n\n.styles_hasValue__qkIFF {\n color: #333;\n}\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(2.625rem + 9px);\n z-index: 20;\n}\n\n.styles_suggestionsContainer__-FUbj {\n background-color: white;\n z-index: 20;\n}\n.styles_suggestionsContainer__-FUbj .styles_suggestionsList__e-mac {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n background: white;\n}\n.styles_suggestionsContainer__-FUbj .styles_suggestionsList__e-mac li:hover {\n background: #f2f5f7;\n}\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\n.styles_suggestionHighlighted__vdJIb {\n background-color: #f2f5f7;\n}\n\n.styles_autosuggest-input-container__C4ks3 {\n position: relative;\n width: 100%;\n}\n.styles_autosuggest-input-container__C4ks3.styles_origin__J6GD2 {\n z-index: 16;\n}\n.styles_autosuggest-input-container__C4ks3.styles_destination__yOA4k {\n z-index: 10;\n}\n.styles_autosuggest-input-container__C4ks3.styles_stop-route-station__ofvbR {\n z-index: 9;\n}\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}\n.styles_autosuggest-input-icon__-XA83 svg {\n width: 16px;\n height: 24px;\n}\n.styles_autosuggest-input-icon__-XA83.styles_origin__J6GD2 svg {\n color: #4ea700;\n fill: #4ea700;\n width: 16px;\n height: 16px;\n}\n.styles_autosuggest-input-icon__-XA83.styles_destination__yOA4k svg {\n fill: #ec5188;\n width: 16px;\n height: 24px;\n}\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}\n.styles_autosuggest-input-icon__-XA83.styles_origin-stop-near-you__Vq9IO svg {\n fill: #888;\n width: 16px;\n height: 16px;\n}\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}\nbutton.styles_clear-input__KFeWb svg {\n fill: var(--color);\n width: 16px;\n height: 16px;\n}\nbutton.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}\nbutton.styles_clear-input__KFeWb:active {\n background-color: transparent;\n color: inherit;\n}\nbutton.styles_clear-input__KFeWb:hover {\n background-color: transparent;\n color: inherit;\n}\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}\n\n.styles_hidden__Y0n2p {\n visibility: hidden;\n}");const du=e=>e.localadmin||e.localadmin||e.address&&e.address.lastIndexOf(",")<e.address.length-2&&e.address.substring(e.address.lastIndexOf(",")+2)||"",pu=({id:e,code:t})=>t||(void 0!==e&&void 0!==e.indexOf&&-1!==e.indexOf("#")?e.substring(e.indexOf("#")+1):void 0),fu=T.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 n=e.name,r=e.address,[n||r&&r.split(",")[0],"string"==typeof r?r.replace(new RegExp(`${N.default(n)}([ ,]|$)+`),""):""];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(`${N.default(e.name)}(,)?( )?`),"")];case"favouriteStop":case"stop":return t?[e.name||e.label||e.address&&e.address.split(",")[0],du(e)]:[e.name,e.id,pu(e),du(e)];default:return[e.name||e.label||e.address&&e.address.split(",")[0],du(e)]}var n,r},(e,t)=>{const n=L.default(e);return n.plain=t,n});const hu=e=>{const t=e&&(e.key||e.which||e.keyCode)||"";return!(!t||![13," ","Spacebar"].concat([32,"Enter"]).includes(t))&&(e.preventDefault(),!0)},gu=e=>"origin"===e||"destination"===e||"via-point"===e||"origin-stop-near-you"===e,bu=(e,t,n)=>{if(!n)return;if(!e||!e.GTFS.platform)return;const{modes:r,platform:o}=e.GTFS;return[r&&"RAIL"===r[0]?n("track",{lng:t}):n("platform",{lng:t}),o]};function mu(e,t,n){if(!n)return;if("FutureRoute"!==e.type){if("SelectFromMap"===e.type)return["",n("select-from-map",{lng:t})];if("CurrentLocation"===e.type)return["",n("use-own-position",{lng:t})];if("SelectFromOwnLocations"===e.type)return["",n("select-from-own-locations",{lng:t})];let o,[u,i]=fu(e.properties,!0);if(e.properties.layer.toLowerCase().includes("bikerental")||e.properties.layer.toLowerCase().includes("bikestation")){o=n("vehiclerentalstation",{lng:t});return[o,u,void 0,e.properties.labelId]}if("bikepark"===e.properties.layer)return o=n("bikepark",{lng:t}),[o,u,void 0,void 0];if("carpark"===e.properties.layer)return o=n("carpark",{lng:t}),[o,u,void 0,void 0];if(e.properties.mode)o=n(e.properties.mode.toLowerCase().replace("favourite",""),{lng:t});else{o=n(e.properties.layer.replace("route-","").toLowerCase().replace("favourite",""),{lng:t})}if(e.properties.id&&("stop"===e.properties.layer||"station"===e.properties.layer)){var r;const s=pu(e.properties),a=null===(r=e.properties.addendum)||void 0===r?void 0:r.GTFS.modes,l=bu(e.properties.addendum,t,n);return[o,be(u,s),i,s,a,l]}if("favouriteStop"===e.properties.layer||"favouriteStation"===e.properties.layer){const{address:n,code:r}=e.properties;return[o,n?be(n.split(",")[0],r):u,i,r,void 0,bu(e.properties.addendum,t)]}return[o,u,i]}const{origin:o,destination:u}=e.properties,i=o.locality?`, ${o.locality} foobar`:"",s=u.locality?`, ${u.locality}`:"",a=o.name,l=u.name;return[n("future-route",{lng:t}),`${n("origin",{lng:t})} ${a}${i} ${n("destination",{lng:t})} ${l}${s}`,e.translatedText]}function yu(e,t,n){if(!n)return;const r=E.DateTime.fromSeconds(Number(e.properties.time)),o=E.DateTime.now();let u=e.properties.arriveBy?n("arrival",{lng:t}):n("departure",{lng:t});return u=r.hasSame(o,"day")?`${u} ${n("today-at")}`:r.hasSame(o.plus({days:1}),"day")?`${u} ${n("tomorrow-at",{lng:t})}`:`${u} ${r.toFormat("ccc d.L.")}`,u=`${u} ${r.toFormat("HH:mm")}`,u}const Eu=e=>"SelectFromOwnLocations"===e.type||"back"===e.type?"":function(e){const t=fu(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),Au=({suggestions:e,t:t,lng:n})=>{let r=[];const o=e[0];return o&&(o.type&&o.type.includes("Favourite")&&r.push(t("favourite",{lng:n})),r=r.concat(mu(e[0],n))),[...new Set(r)].join(" - ")};function Fu(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var wu,vu={exports:{}};
2
+ /*! For license information please see index.js.LICENSE.txt */var _u=(wu||(wu=1,function(e){var t;"undefined"!=typeof self&&self,e.exports=(t=C.default,function(){var e={888:function(e,t,n){var r,o;o=void 0!==n.g?n.g:"undefined"!=typeof window?window:this,r=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},n=function(){var e={};return Array.prototype.forEach.call(arguments,function(t){for(var n in t){if(!t.hasOwnProperty(n))return;e[n]=t[n]}}),e},r=function(e){"#"===e.charAt(0)&&(e=e.substr(1));for(var t,n=String(e),r=n.length,o=-1,u="",i=n.charCodeAt(0);++o<r;){if(0===(t=n.charCodeAt(o)))throw new InvalidCharacterError("Invalid character: the input contains U+0000.");u+=t>=1&&t<=31||127==t||0===o&&t>=48&&t<=57||1===o&&t>=48&&t<=57&&45===i?"\\"+t.toString(16)+" ":t>=128||45===t||95===t||t>=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122?n.charAt(o):"\\"+n.charAt(o)}return"#"+u},o=function(){return Math.max(document.body.scrollHeight,document.documentElement.scrollHeight,document.body.offsetHeight,document.documentElement.offsetHeight,document.body.clientHeight,document.documentElement.clientHeight)},u=function(t){return t?(n=t,parseInt(e.getComputedStyle(n).height,10)+t.offsetTop):0;var n},i=function(t,n,r){0===t&&document.body.focus(),r||(t.focus(),document.activeElement!==t&&(t.setAttribute("tabindex","-1"),t.focus(),t.style.outline="none"),e.scrollTo(0,n))},s=function(t,n,r,o){if(n.emitEvents&&"function"==typeof e.CustomEvent){var u=new CustomEvent(t,{bubbles:!0,detail:{anchor:r,toggle:o}});document.dispatchEvent(u)}};return function(a,l){var c,d,p,f,h={cancelScroll:function(e){cancelAnimationFrame(f),f=null,e||s("scrollCancel",c)},animateScroll:function(r,a,l){h.cancelScroll();var d=n(c||t,l||{}),g="[object Number]"===Object.prototype.toString.call(r),b=g||!r.tagName?null:r;if(g||b){var m=e.pageYOffset;d.header&&!p&&(p=document.querySelector(d.header));var y,E,A,F=u(p),w=g?r:function(t,n,r,u){var i=0;if(t.offsetParent)do{i+=t.offsetTop,t=t.offsetParent}while(t);return i=Math.max(i-n-r,0),u&&(i=Math.min(i,o()-e.innerHeight)),i}(b,F,parseInt("function"==typeof d.offset?d.offset(r,a):d.offset,10),d.clip),v=w-m,_=o(),C=0,D=function(e,t){var n=t.speedAsDuration?t.speed:Math.abs(e/1e3*t.speed);return t.durationMax&&n>t.durationMax?t.durationMax:t.durationMin&&n<t.durationMin?t.durationMin:parseInt(n,10)}(v,d),S=function(t){y||(y=t),C+=t-y,A=m+v*function(e,t){var n;return"easeInQuad"===e.easing&&(n=t*t),"easeOutQuad"===e.easing&&(n=t*(2-t)),"easeInOutQuad"===e.easing&&(n=t<.5?2*t*t:(4-2*t)*t-1),"easeInCubic"===e.easing&&(n=t*t*t),"easeOutCubic"===e.easing&&(n=--t*t*t+1),"easeInOutCubic"===e.easing&&(n=t<.5?4*t*t*t:(t-1)*(2*t-2)*(2*t-2)+1),"easeInQuart"===e.easing&&(n=t*t*t*t),"easeOutQuart"===e.easing&&(n=1- --t*t*t*t),"easeInOutQuart"===e.easing&&(n=t<.5?8*t*t*t*t:1-8*--t*t*t*t),"easeInQuint"===e.easing&&(n=t*t*t*t*t),"easeOutQuint"===e.easing&&(n=1+--t*t*t*t*t),"easeInOutQuint"===e.easing&&(n=t<.5?16*t*t*t*t*t:1+16*--t*t*t*t*t),e.customEasing&&(n=e.customEasing(t)),n||t}(d,E=(E=0===D?0:C/D)>1?1:E),e.scrollTo(0,Math.floor(A)),function(t,n){var o=e.pageYOffset;if(t==n||o==n||(m<n&&e.innerHeight+o)>=_)return h.cancelScroll(!0),i(r,n,g),s("scrollStop",d,r,a),y=null,f=null,!0}(A,w)||(f=e.requestAnimationFrame(S),y=t)};0===e.pageYOffset&&e.scrollTo(0,0),function(e,t,n){t||history.pushState&&n.updateURL&&history.pushState({smoothScroll:JSON.stringify(n),anchor:e.id},document.title,e===document.documentElement?"#top":"#"+e.id)}(r,g,d),"matchMedia"in e&&e.matchMedia("(prefers-reduced-motion)").matches?i(r,Math.floor(w),!1):(s("scrollStart",d,r,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 n,o;try{n=r(decodeURIComponent(d.hash))}catch(e){n=r(d.hash)}if("#"===n){if(!c.topOnEmptyHash)return;o=document.documentElement}else o=document.querySelector(n);(o=o||"#top"!==n?o:document.documentElement)&&(t.preventDefault(),function(t){if(history.replaceState&&t.updateURL&&!history.state){var n=e.location.hash;n=n||"",history.replaceState({smoothScroll:JSON.stringify(t),anchor:n||e.pageYOffset},document.title,n||e.location.href)}}(c),h.animateScroll(o,d))}},b=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(r(history.state.anchor)))||h.animateScroll(t,null,{updateURL:!1})}};return h.destroy=function(){c&&(document.removeEventListener("click",g,!1),e.removeEventListener("popstate",b,!1),h.cancelScroll(),c=null,d=null,p=null,f=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=n(t,l||{}),p=c.header?document.querySelector(c.header):null,document.addEventListener("click",g,!1),c.updateURL&&c.popstate&&e.addEventListener("popstate",b,!1)}(),h}}(o)}.apply(t,[]),void 0===r||(e.exports=r)},432:function(e,t,n){var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||r(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),o(n(47),t),o(n(926),t),o(n(349),t),o(n(137),t),o(n(729),t),o(n(383),t),o(n(450),t),o(n(358),t),o(n(753),t),o(n(869),t),o(n(352),t),o(n(446),t),o(n(164),t),o(n(305),t),o(n(502),t)},349:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useArrowNavigation=void 0;var r=n(156);t.useArrowNavigation=function(e){var t=e.listItems,n=e.onArrowUpOrDown,o=(0,r.useState)(0),u=o[0],i=o[1],s=(0,r.useCallback)(function(e){i(e)},[t]),a=function(e){var r=e.key;if(null==t?void 0:t.length)if("ArrowUp"===r)n&&n(),e.preventDefault(),s(u>0?u-1:t.length-1);else{if("ArrowDown"!==r)return;n&&n(),e.preventDefault(),u<t.length-1?s(u+1):s(0)}};return(0,r.useEffect)(function(){return window.addEventListener("keydown",a),function(){return window.removeEventListener("keydown",a)}}),(0,r.useEffect)(function(){s(0)},[t]),{selectedIndex:u}}},446:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useDebounce=void 0;var r=n(156);t.useDebounce=function(e,t){void 0===t&&(t=300);var n=(0,r.useState)(e),o=n[0],u=n[1];return(0,r.useEffect)(function(){var n=setTimeout(function(){u(e)},t);return function(){clearTimeout(n)}},[e,t]),o}},164:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useElementSize=void 0;var r=n(156);t.useElementSize=function(){var e,t,n=(0,r.useRef)(null);return[n,{width:null===(e=null==n?void 0:n.current)||void 0===e?void 0:e.clientWidth,height:null===(t=null==n?void 0:n.current)||void 0===t?void 0:t.clientHeight}]},t.default=t.useElementSize},137:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useIntersectionObserver=void 0;var r=n(156);t.useIntersectionObserver=function(e){var t=(0,r.useRef)(null),n=(0,r.useState)(!1),o=n[0],u=n[1],i=function(e){var t=e[0];u(t.isIntersecting)};return(0,r.useEffect)(function(){if(window&&window.IntersectionObserver){var n=new IntersectionObserver(i,e),r=t.current;return t.current&&n.observe(t.current),function(){r&&n.unobserve(r)}}u(!1)},[t,e]),{containerRef:t,isVisible:o}},t.default=t.useIntersectionObserver},729:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useIsBreakpoint=void 0;var r=n(156),o=n(432),u={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?u[e]:e,n=(0,r.useState)(null),i=n[0],s=n[1],a=(0,r.useCallback)(function(){s(window.innerWidth)},[]);return(0,r.useEffect)(function(){a()},[]),(0,o.useOnResize)(a),i>=t},t.default=t.useIsBreakpoint},450:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useIsLoadingAfterError=void 0;var r=n(156);t.useIsLoadingAfterError=function(e,t){var n=(0,r.useState)(t),o=n[0],u=n[1];return(0,r.useEffect)(function(){e||u(t)},[e,t]),e&&o}},305:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useIsMobile=void 0;var r=n(729);t.useIsMobile=function(){return!(0,r.useIsBreakpoint)("tablet")},t.default=t.useIsMobile},383:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useIsomorphicLayoutEffect=void 0;var r=n(156);t.useIsomorphicLayoutEffect="undefined"!=typeof window?r.useLayoutEffect:r.useEffect,t.default=t.useIsomorphicLayoutEffect},753:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useOnLoseFocusWithin=void 0;var r=n(156);t.useOnLoseFocusWithin=function(e){var t=e.ref,n=e.callback,o=e.watch;(0,r.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:n()};return document.addEventListener("keyup",e),function(){return document.removeEventListener("keyup",e)}},[n,t,o])},t.default=t.useOnLoseFocusWithin},502:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useOnResize=void 0;var r=n(156);t.useOnResize=function(e){(0,r.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,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useOnWindowFocus=void 0;var r=n(156);t.useOnWindowFocus=function(e){(0,r.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,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useOutsideReacter=void 0;var r=n(156);t.useOutsideReacter=function(e,t){function n(n){e.current&&!e.current.contains(n.target)&&t()}(0,r.useEffect)(function(){return document.addEventListener("mousedown",n),function(){document.removeEventListener("mousedown",n)}})}},869:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useRunAfterUpdate=void 0;var r=n(156);t.useRunAfterUpdate=function(){var e=(0,r.useRef)(null);return(0,r.useEffect)(function(){e.current&&(e.current(),e.current=null)}),function(t){e.current=t}},t.default=t.useRunAfterUpdate},926:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useScrollLock=void 0;var r=n(156);t.useScrollLock=function(){return{lock:(0,r.useCallback)(function(){var e=window.scrollY+"px",t=document.body;t.style.position="fixed",t.style.top="-"+e},[]),unlock:(0,r.useCallback)(function(){var e=document.body,t=e.style.top,n=-1*parseInt(t||"0");e.style.position="",e.style.top="",n&&window.scrollTo(0,-1*parseInt(t||"0"))},[])}}},358:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.useSmoothScroll=void 0;var o=n(156),u=r(n(888));t.useSmoothScroll=function(e){var t=(0,o.useRef)(null),n=e.ref,r=e.offset,i=void 0===r?0:r,s=e.speed,a=void 0===s?500:s;return(0,o.useEffect)(function(){t.current=new u.default(null,{speed:a,speedAsDuration:!0})},[]),(0,o.useCallback)(function(){n&&t.current&&t.current.animateScroll(n.current,null,{offset:function(){return i},updateURL:!1})},[i,n])}},156:function(e){e.exports=t}},n={};function r(t){var o=n[t];if(void 0!==o)return o.exports;var u=n[t]={exports:{}};return e[t].call(u.exports,u,u.exports,r),u.exports}return r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r(432)}())}(vu)),vu.exports),Cu=Fu(_u),Du={"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"};lu("input[type=text] {\n margin: 0;\n padding: 0;\n}\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\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}\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\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}\n.MobileSearch_combobox-icon__3syCw svg {\n width: 14px;\n height: 21px;\n transform: rotate(-180deg);\n}\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\n.MobileSearch_container__JtL5q {\n display: flex;\n align-items: center;\n width: 100%;\n}\n.MobileSearch_container__JtL5q .MobileSearch_input__Sjo1c {\n font-family: inherit;\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}\n.MobileSearch_container__JtL5q .MobileSearch_input__Sjo1c:focus {\n outline: none;\n border: none;\n box-shadow: none;\n background: #fff;\n}\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}\nbutton.MobileSearch_clear-input__SGpE8 svg {\n fill: var(--color);\n width: 16px;\n height: 16px;\n}\nbutton.MobileSearch_clear-input__SGpE8:focus {\n background-color: transparent;\n color: inherit;\n}\nbutton.MobileSearch_clear-input__SGpE8:active {\n background-color: transparent;\n color: inherit;\n}\nbutton.MobileSearch_clear-input__SGpE8:hover {\n background-color: transparent;\n color: inherit;\n}\n\n.MobileSearch_hasValue__H1RPq {\n color: #333;\n}\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\n.MobileSearch_suggestionHighlighted__xpMMN {\n background-color: #f2f5f7;\n}\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}\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\n.MobileSearch_clear-search-history__cO30c {\n display: flex;\n font-family: inherit;\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}\n.MobileSearch_suggestionHighlighted__xpMMN .MobileSearch_clear-search-history__cO30c {\n background-color: transparent;\n color: inherit;\n}\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\n.MobileSearch_mobile-modal__DFUUM {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n}\n.MobileSearch_mobile-modal__DFUUM.ReactModal__Content--after-open > div {\n transform: translateY(0);\n}\n.MobileSearch_mobile-modal__DFUUM.ReactModal__Content--before-close > div {\n transform: translateY(10%);\n}\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 Su={"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 Bu(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var u=Object.getOwnPropertySymbols(e);for(r=0;r<u.length;r++)n=u[r],-1===t.indexOf(n)&&{}.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}lu("input[type=text] {\n margin: 0;\n padding: 0;\n}\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\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}\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\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}\n.MobileNoScroll_combobox-icon__WlXar svg {\n width: 14px;\n height: 21px;\n transform: rotate(-180deg);\n}\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\n.MobileNoScroll_container__veReP {\n display: flex;\n align-items: center;\n width: 100%;\n}\n.MobileNoScroll_container__veReP .MobileNoScroll_input__zo9Gg {\n font-family: inherit;\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}\n.MobileNoScroll_container__veReP .MobileNoScroll_input__zo9Gg:focus {\n outline: none;\n border: none;\n box-shadow: none;\n background: #fff;\n}\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}\nbutton.MobileNoScroll_clear-input__lQlxs svg {\n fill: var(--color);\n width: 16px;\n height: 16px;\n}\nbutton.MobileNoScroll_clear-input__lQlxs:focus {\n background-color: transparent;\n color: inherit;\n}\nbutton.MobileNoScroll_clear-input__lQlxs:active {\n background-color: transparent;\n color: inherit;\n}\nbutton.MobileNoScroll_clear-input__lQlxs:hover {\n background-color: transparent;\n color: inherit;\n}\n\n.MobileNoScroll_hasValue__1Gx3J {\n color: #333;\n}\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\n.MobileNoScroll_suggestionHighlighted__zxzXj {\n background-color: #f2f5f7;\n}\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}\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\n.MobileNoScroll_clear-search-history__vR2Xw {\n display: flex;\n font-family: inherit;\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}\n.MobileNoScroll_suggestionHighlighted__zxzXj .MobileNoScroll_clear-search-history__vR2Xw {\n background-color: transparent;\n color: inherit;\n}\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\n.MobileNoScroll_mobile-modal__xYuHh {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n}\n.MobileNoScroll_mobile-modal__xYuHh.ReactModal__Content--after-open > div {\n transform: translateY(0);\n}\n.MobileNoScroll_mobile-modal__xYuHh.ReactModal__Content--before-close > div {\n transform: translateY(10%);\n}\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\n.MobileNoScroll_suggestionsContainerOpen__sX1RA {\n -ms-overflow-style: none; /* Internet Explorer 10+ */\n scrollbar-width: none; /* Firefox */\n}\n.MobileNoScroll_suggestionsContainerOpen__sX1RA::-webkit-scrollbar {\n display: none; /* Safari and Chrome */\n}");const Ou=["item","lng","getItemProps","highlightedIndex","itemIndex","styles"],Ru=["suggestions","getMenuProps","getItemProps","lng","styles","hidden","renderClearHistoryButton","handleClearHistory"];function xu(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function ku(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?xu(Object(n),!0).forEach(function(t){H(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):xu(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function ju(e){let{item:t,lng:n,getItemProps:o,highlightedIndex:u,itemIndex:i,styles:s}=e,a=Bu(e,Ou);const[l]=r.useTranslation(),c="FutureRoute"===t.type?ku(ku({},t),{},{translatedText:yu(t,n,l)}):t,d=mu(t,n,l);return C.default.createElement("li",Object.assign({className:D.default(s.suggestion,u===i&&s.suggestionHighlighted)},o({index:i})),C.default.createElement(U.default,Object.assign({item:c,content:d,lng:n},a)))}const Pu="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 Tu(e){let{suggestions:t,getMenuProps:n,getItemProps:o,lng:u,styles:i,hidden:s,renderClearHistoryButton:a,handleClearHistory:l}=e,c=Bu(e,Ru);const[d]=r.useTranslation();return C.default.createElement("div",{className:D.default(i.suggestionsContainerOpen,i.suggestionsContainer,s&&i.hidden)},C.default.createElement("ul",Object.assign({className:i.suggestionsList},n()),t.map((e,t)=>C.default.createElement(ju,Object.assign({key:`${e.type}-${e.properties.gid||e.properties.gtfsId||JSON.stringify(e.properties)}`,getItemProps:o,itemIndex:t,item:e,lng:u,styles:i},c))),a&&C.default.createElement("li",o({index:t.length}),C.default.createElement("button",{onClick:l,type:"button",className:i["clear-search-history"]},d("clear-search-history",{lng:u})))))}"production"!==process.env.NODE_ENV&&(ju.propTypes={item:Pu.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&&(Tu.propTypes={suggestions:_.default.arrayOf(Pu).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}),Tu.defaultProps={renderClearHistoryButton:!1,handleClearHistory:()=>{}};const Nu=({color:e,lng:t,clearInput:n,onKeyDown:o,styles:u})=>{const[i]=r.useTranslation();return C.default.createElement("button",{type:"button",className:u["clear-input"],onClick:n,"aria-label":i("clear-button-label",{lng:t}),onKeyDown:o},C.default.createElement(P.default,{img:"close",color:e}))};function Lu({id:e,lng:t,value:r,placeholder:o,required:u,getInputProps:i,getLabelProps:s,clearInput:a,ariaLabel:l,inputRef:c,styles:d,renderLabel:p,isMobile:f,inputClassName:h,transportMode:g,clearButtonColor:b,autoFocus:m,inputOnBlur:y}){const E=n.useRef(null);n.useLayoutEffect(()=>{const e=c.current;e&&null!==E.current&&e===document.activeElement&&e.setSelectionRange(E.current,E.current)},[r]);return C.default.createElement("div",{className:d.container},p&&C.default.createElement("label",s({className:d["sr-only"],htmlFor:e}),l),C.default.createElement("input",Object.assign({"aria-label":l,autoFocus:m,placeholder:o,required:u,type:"text",className:D.default(d.input,d[e],h,f&&g&&d.thin,r&&d.hasValue),value:r,id:e},i({ref:c,onBlur:y,onChange:e=>{E.current=e.target.selectionStart}}))),r&&C.default.createElement(Nu,{lng:t,clearInput:()=>a(c),styles:d,color:b,onKeyDown:e=>hu(e)&&a(c)}))}function Mu(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Iu(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Mu(Object(n),!0).forEach(function(t){H(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Mu(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}"production"!==process.env.NODE_ENV&&(Nu.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&&(Lu.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}),Lu.defaultProps={autoFocus:!1,renderLabel:!1,transportMode:void 0,inputOnBlur:()=>{}};const Uu=({appElement:e,id:t,placeholder:o,clearInput:u,onSelectedItemChange:i,fontWeights:s,clearOldSearches:a,suggestionProps:l,lng:c,ariaProps:d,value:f,inputClassName:h,required:g,mobileLabel:b,showScroll:m,state:y,dispatch:E,colors:A})=>{const[F]=r.useTranslation(),{lock:w,unlock:v}=Cu.useScrollLock(),_=m?Du:Su,D=`${t}-input`,S=`${t}-label`,[B,O]=n.useState(!1),R=C.default.useRef();n.useEffect(()=>{M.default.setAppElement(e)},[]),n.useEffect(()=>{y.renderMobile?w():v()},[y.renderMobile]);const{highlightedIndex:x,getLabelProps:k,getMenuProps:j,getInputProps:T,getItemProps:N,setHighlightedIndex:L}=p.useCombobox({items:y.suggestions,inputValue:f,isOpen:!0,onSelectedItemChange:e=>{i(e),E({type:"TOGGLE_MENU",isMobile:!0})},inputId:D,labelId:S,selectedItem:null,defaultHighlightedIndex:-1,onInputValueChange:({inputValue:e})=>y.renderMobile&&E({type:"INPUT_CHANGE",value:e}),stateReducer:(e,{changes:t,type:n})=>{switch(n){case p.useCombobox.stateChangeTypes.InputKeyDownEscape:return L(-1),E({type:"TOGGLE_MENU",isMobile:!0}),e;case p.useCombobox.stateChangeTypes.InputKeyDownEnter:return y.loading?(E({type:"PENDING_ENTER",enterPending:!0}),e):-1===e.highlightedIndex?Iu(Iu({},t),{},{selectedItem:y.suggestions[0]}):t;case p.useCombobox.stateChangeTypes.InputBlur:return e;default:return t}},itemToString:e=>e?Eu(e):""});k({},{suppressRefError:!0}),j({},{suppressRefError:!0}),T({},{suppressRefError:!0}),N({index:-1},{suppressRefError:!0});const{ariaRequiredText:U,SearchBarId:q,ariaCurrentSuggestion:z}=d,H=U.concat(" ").concat(q).concat(" ").concat(z);return C.default.createElement(M.default,{isOpen:y.renderMobile,className:_["mobile-modal"],overlayClassName:_["mobile-modal-overlay"],shouldReturnFocusAfterClose:!1,shouldCloseOnEsc:!0},C.default.createElement("div",{className:_["mobile-modal-content"],style:{"--color":A.primary,"--accessible-primary-color":A.accessiblePrimary,"--hover-color":A.hover,"--font-weight-medium":s.medium}},C.default.createElement("div",{className:_["combobox-container"],htmlFor:D},C.default.createElement("button",{type:"button",className:_["combobox-icon"],onClick:()=>{L(-1),E({type:"TOGGLE_MENU",isMobile:!0})},onKeyDown:e=>{hu(e)&&(L(-1),E({type:"TOGGLE_MENU",isMobile:!0}))},"aria-label":F("cancel",{lng:c}),tabIndex:0},C.default.createElement(P.default,{img:"arrow",color:A.primary})),C.default.createElement("span",{className:_["right-column"]},C.default.createElement("span",Object.assign({className:_["combobox-label"],id:S},k()),b),C.default.createElement(Lu,{placeholder:gu(t)?F("address-place-or-business",{lng:c}):o,id:t,lng:c,value:f,getInputProps:T,getLabelProps:k,clearInput:()=>u(R),ariaLabel:H,inputRef:R,styles:_,renderLabel:!1,clearButtonColor:A.primary,autoFocus:!0,inputClassName:h,required:g,isMobile:!0}),C.default.createElement(Tu,Object.assign({suggestions:y.suggestions,getMenuProps:j,getItemProps:N,highlightedIndex:x,isOpen:!0,hidden:!1,lng:c,styles:_,renderClearHistoryButton:!0,handleClearHistory:()=>O(!0)},l)))),C.default.createElement(I.default,{appElement:e,isModalOpen:B,handleClose:()=>O(!1),headerText:F("delete-old-searches-header",{lng:c}),primaryButtonText:F("delete",{lng:c}),secondaryButtonText:F("cancel",{lng:c}),primaryButtonOnClick:()=>{a(),O(!1)},secondaryButtonOnClick:()=>O(!1),colors:A,fontWeights:s,lang:c})))};function qu(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function zu(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?qu(Object(n),!0).forEach(function(t){H(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):qu(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}"production"!==process.env.NODE_ENV&&(Uu.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 Hu=(e,t)=>{switch(t.type){case"INPUT_CHANGE":return zu(zu({},e),{},{value:t.value});case"FETCH_SUGGESTIONS":return zu(zu({},e),{},{loading:t.loading,suggestions:t.suggestions||e.suggestions});case"CLEAR_SUGGESTIONS":return zu(zu({},e),{},{suggestions:[]});case"RESET_SOURCES":return zu(zu({},e),{},{sources:t.sources});case"SET_SOURCES":return zu(zu({},e),{},{showOwnPlaces:t.showOwnPlaces,sources:t.sources,pendingSelection:t.pendingSelection});case"CLEAR":return zu(zu({},e),{},{value:"",isCleared:!0,suggestions:[]});case"INPUT_BLUR":return zu(zu({},e),{},{value:t.value||e.value,isCleared:!t.isMobile&&e.isCleared,pendingSelection:null,showOwnPlaces:!1});case"RESET":return t.initialState;case"PENDING_ENTER":return zu(zu({},e),{},{enterPending:t.enterPending});case"TOGGLE_MENU":return t.isMobile?e.renderMobile?zu(zu({},e),{},{renderMobile:!1,isCleared:!1}):zu(zu({},e),{},{renderMobile:!0,value:e.isCleared?"":e.value}):zu(zu({},e),{},{isMenuOpen:!e.isMenuOpen,renderMobile:t.isMobile&&!e.renderMobile});default:return e}};function Vu(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Wu(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Vu(Object(n),!0).forEach(function(t){H(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Vu(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}const $u=["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 Ju({appElement:e,id:t,placeholder:o,onSelect:u,icon:i,value:s,onClear:a,lang:l,getAutoSuggestIcons:c,handleViaPoints:d,focusChange:f,storeRef:h,isMobile:g,mobileLabel:b,inputClassName:m,translatedPlaceholder:y,required:E,ariaLabel:A,fontWeights:F,colors:w,modeSet:v,showScroll:_,isEmbedded:S,transportMode:B,targets:O,sources:R,geocodingSize:x,filterResults:k,searchContext:j,pathOpts:T,refPoint:N}){const[L]=r.useTranslation(),M={suggestions:[],loading:!1,sources:R,showOwnPlaces:!1,pendingSelection:null,isCleared:!1,renderMobile:!1,value:s,enterPending:!1,isMenuOpen:!1},[I,U]=n.useReducer(Hu,M);n.useEffect(()=>U({type:"RESET",initialState:M}),[s]),n.useEffect(()=>U({type:"RESET_SOURCES",sources:R}),[R]);const q=n.useRef(t);n.useEffect(()=>{h&&h(q.current)},[q.current]);const z=n.useCallback(()=>{const e=!(null!=O&&O.length)||O.includes("Locations"),t=(({targets:e,isLocationSearch:t,isMobile:n,ownPlaces:r,sources:o})=>{const u=!(null!=e&&e.length);let i;return r?(i=["Locations"],(u||e.includes("Stops"))&&i.push("Stops"),(u||e.includes("Stations"))&&i.push("Stations"),(u||e.includes("VehicleRentalStations"))&&i.push("VehicleRentalStations")):u||(i=[...e],!t||n||o.length&&!o.includes("Favourite")||i.push("SelectFromOwnLocations")),i})({targets:O,isLocationSearch:e,isMobile:g,ownPlaces:I.showOwnPlaces,sources:I.sources});((e,t,n,r,o,u,i,s,a,l)=>{s(null),su(e,t,n,r,o,u,i,s,a,l)})(t,I.sources?I.sources.filter(t=>!e||"Favourite"===!t||I.showOwnPlaces||g):I.sources,B,j,k,x,{input:I.value||""},e=>{if(null==e)return void U({type:"FETCH_SUGGESTIONS",loading:!0});const t=(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 t=Wu({},e);return t.properties.labelId=L(e.properties.labelId,{lng:l}),t}return e});U({type:"FETCH_SUGGESTIONS",loading:!1,suggestions:t})},T,N)},[I.value,I.sources,I.showOwnPlaces,O,B,j,k,x,g,l,T,N,t]),H=n.useCallback((e,n)=>{e&&(d?d(e,n):u(e,t),!f||g&&!S||f(),q.current&&q.current.blur())},[g]),V=e=>H(e.selectedItem,e.highlightedIndex),{isOpen:W,highlightedIndex:$,getLabelProps:J,getMenuProps:K,getInputProps:G,getItemProps:X,selectItem:Q,openMenu:Z,closeMenu:Y}=p.useCombobox({inputId:t,inputValue:I.value,defaultHighlightedIndex:0,onInputValueChange:({inputValue:e})=>U({type:"INPUT_CHANGE",value:e}),stateReducer:n.useCallback((e,{type:t,changes:n})=>{switch(t){case p.useCombobox.stateChangeTypes.ItemClick:case p.useCombobox.stateChangeTypes.InputKeyDownEnter:return I.loading?(U({type:"PENDING_ENTER",enterPending:!0}),e):n.selectedItem?"SelectFromOwnLocations"===n.selectedItem.type?(U({type:"SET_SOURCES",sources:["Favourite","Back"],showOwnPlaces:!0,pendingSelection:n.selectedItem.type}),e):"back"===n.selectedItem.type?(U({type:"SET_SOURCES",sources:R,showOwnPlaces:!1,pendingSelection:null}),e):n:n;case p.useCombobox.stateChangeTypes.InputClick:return $u.includes(s)?Wu(Wu({},n),{},{inputValue:"",isOpen:!0}):Wu(Wu({},n),{},{isOpen:!0});case p.useCombobox.stateChangeTypes.InputBlur:return n.selectedItem?Wu(Wu({},n),{},{selectedItem:e.selectItem,inputValue:e.inputValue}):n;case p.useCombobox.stateChangeTypes.InputKeyDownEscape:return Wu(Wu({},n),{},{inputValue:""});default:return n}},[I.loading,s,g]),items:I.suggestions,itemToString:e=>e?Eu(e):"",onSelectedItemChange:V,onIsOpenChange:e=>{e.isOpen&&!I.renderMobile&&U({type:"TOGGLE_MENU",isMobile:g})}}),ee=e=>{U({type:"CLEAR"}),a&&a(t),e.current&&e.current.focus(),Z()};n.useEffect(()=>{!W&&!I.renderMobile||I.value===s&&$u.includes(s)||z(I.value)},[W,I.renderMobile,I.value,z]),n.useEffect(()=>{I.enterPending&&!I.loading&&(H(I.suggestions[0],0),Y())},[I.loading,I.pendingEnter,I.suggestions]);const te={loading:I.loading,isMobile:g,ariaFavouriteString:L("favourite",{lng:l}),fontWeights:F,getAutoSuggestIcons:c,colors:w,modeSet:v},{ariaCurrentSuggestion:ne,ariaRequiredText:re,SearchBarId:oe,ariaLabelText:ue}=(({id:e,ariaLabel:t,lng:n,t:r,isMobile:o,suggestions:u,value:i,required:s})=>{const a=e.replace("searchfield-",""),l=t||r(a,{lng:n}).replace("searchfield-","").concat("."),c=s?`${r("required",{lng:n})}.`:"",d=r(o?"search-autosuggest-label-instructions-mobile":"search-autosuggest-label-instructions-desktop",{lng:n}),p="origin"===e?r("search-autosuggest-label-move-to-destination",{lng:n}):"";return{SearchBarId:l,ariaRequiredText:c,ariaLabelText:d.concat(" ").concat(p),ariaSuggestionLen:r("search-autosuggest-len",{count:u.length,lng:n}),ariaCurrentSuggestion:Au({suggestions:u,t:r,lng:n})||i?r("search-current-suggestion",{lng:n,selection:Au({suggestions:u,t:r,lng:n}).toLowerCase()||i}):""}})({id:t,lng:l,t:L,isMobile:g,ariaLabel:A,suggestions:I.suggestions,value:I.value,required:E});return n.useEffect(()=>{I.renderMobile||W||U({type:"RESET",initialState:M})},[I.renderMobile,W]),C.default.createElement(C.default.Fragment,null,g&&C.default.createElement(Uu,{placeholder:L(o,{lng:l}),fontWeights:F,clearOldSearches:()=>{const{context:e,clearOldSearches:t,clearFutureRoutes:n}=j;e&&t&&(t(e),n&&n(e),z(I.value))},appElement:e,mobileLabel:b||L(t,{lng:l}),ariaProps:{ariaCurrentSuggestion:ne,SearchBarId:oe,ariaRequiredText:re},id:t,lng:l,onSelectedItemChange:V,value:I.value,clearInput:ee,suggestionProps:te,showScroll:!!_,colors:w,inputClassName:m,required:E,state:I,dispatch:U}),C.default.createElement("div",{className:D.default(cu["autosuggest-input-container"],cu[t],I.renderMobile&&"hidden"),style:{"--color":w.primary,"--hover-color":w.hover}},i&&C.default.createElement("div",{className:D.default(cu["autosuggest-input-icon"],cu[t],m&&cu[`${m}-input-icon`]),"aria-label":re.concat(" ").concat(oe).concat(" ").concat(L("search-autosuggest-label",{lng:l}))},C.default.createElement(P.default,{img:`${i}`})),C.default.createElement(Lu,{inputClassName:m,ariaLabel:ne.concat(" ").concat(re).concat(" ").concat(oe).concat(" ").concat(ue),id:t,lng:l,getInputProps:G,getLabelProps:J,selectItem:Q,value:I.value,clearInput:ee,inputRef:q,styles:cu,clearButtonColor:w.primary,placeholder:y||L(o,{lng:l}),required:E,transportMode:B,isMobile:g,inputOnBlur:()=>{U({isMobile:g,value:!g&&s,type:"INPUT_BLUR"}),g||U({type:"RESET",initialState:M})}}),C.default.createElement(Tu,Object.assign({hidden:!W||!I.suggestions.length||g,highlightedIndex:$,getItemProps:X,getMenuProps:K,suggestions:I.suggestions,lng:l,styles:cu},te))))}"production"!==process.env.NODE_ENV&&(Ju.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}),Ju.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:f.defaultColors,required:!1,modeSet:void 0,showScroll:!1,refPoint:{}};e.default=e=>C.default.createElement(r.I18nextProvider,{i18n:au},C.default.createElement(Ju,e)),Object.defineProperty(e,"__esModule",{value:!0})});
3
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZGV2ZWxvcG1lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Qcm9wZXJ0eUtleS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1ByaW1pdGl2ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXRydS1lcS9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWlzLWR1cGxpY2F0ZS9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWhlbHBlcnMvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1maWx0ZXItbWF0Y2hpbmctdG8taW5wdXQvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1nZW9jb2RpbmctcmVzdWx0cy9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYmluZC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWdlb2NvZGluZy1yZXN1bHRzL25vZGVfbW9kdWxlcy9heGlvcy9saWIvdXRpbHMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1nZW9jb2RpbmctcmVzdWx0cy9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3NFcnJvci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWdlb2NvZGluZy1yZXN1bHRzL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy90b0Zvcm1EYXRhLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL0F4aW9zVVJMU2VhcmNoUGFyYW1zLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2J1aWxkVVJMLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0ludGVyY2VwdG9yTWFuYWdlci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWdlb2NvZGluZy1yZXN1bHRzL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZGVmYXVsdHMvdHJhbnNpdGlvbmFsLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9icm93c2VyL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9icm93c2VyL2NsYXNzZXMvVVJMU2VhcmNoUGFyYW1zLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9icm93c2VyL2NsYXNzZXMvRm9ybURhdGEuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1nZW9jb2RpbmctcmVzdWx0cy9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2Jyb3dzZXIvY2xhc3Nlcy9CbG9iLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9jb21tb24vdXRpbHMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1nZW9jb2RpbmctcmVzdWx0cy9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2Zvcm1EYXRhVG9KU09OLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9kZWZhdWx0cy9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWdlb2NvZGluZy1yZXN1bHRzL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy90b1VSTEVuY29kZWRGb3JtLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3BhcnNlSGVhZGVycy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWdlb2NvZGluZy1yZXN1bHRzL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9BeGlvc0hlYWRlcnMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1nZW9jb2RpbmctcmVzdWx0cy9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvdHJhbnNmb3JtRGF0YS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWdlb2NvZGluZy1yZXN1bHRzL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL2lzQ2FuY2VsLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWdlb2NvZGluZy1yZXN1bHRzL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9zZXR0bGUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1nZW9jb2RpbmctcmVzdWx0cy9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcHJvZ3Jlc3NFdmVudFJlZHVjZXIuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1nZW9jb2RpbmctcmVzdWx0cy9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvc3BlZWRvbWV0ZXIuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1nZW9jb2RpbmctcmVzdWx0cy9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdGhyb3R0bGUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1nZW9jb2RpbmctcmVzdWx0cy9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2Nvb2tpZXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1nZW9jb2RpbmctcmVzdWx0cy9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvYnVpbGRGdWxsUGF0aC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWdlb2NvZGluZy1yZXN1bHRzL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0Fic29sdXRlVVJMLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2NvbWJpbmVVUkxzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL21lcmdlQ29uZmlnLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3Jlc29sdmVDb25maWcuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1nZW9jb2RpbmctcmVzdWx0cy9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2FkYXB0ZXJzL3hoci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWdlb2NvZGluZy1yZXN1bHRzL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9wYXJzZVByb3RvY29sLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2NvbXBvc2VTaWduYWxzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3RyYWNrU3RyZWFtLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9hZGFwdGVycy9mZXRjaC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWdlb2NvZGluZy1yZXN1bHRzL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYWRhcHRlcnMvYWRhcHRlcnMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1nZW9jb2RpbmctcmVzdWx0cy9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvbnVsbC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWdlb2NvZGluZy1yZXN1bHRzL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9kaXNwYXRjaFJlcXVlc3QuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1nZW9jb2RpbmctcmVzdWx0cy9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2Vudi9kYXRhLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3ZhbGlkYXRvci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWdlb2NvZGluZy1yZXN1bHRzL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9BeGlvcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWdlb2NvZGluZy1yZXN1bHRzL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL0NhbmNlbFRva2VuLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL0h0dHBTdGF0dXNDb2RlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMvbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9heGlvcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWdlb2NvZGluZy1yZXN1bHRzL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9zcHJlYWQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1nZW9jb2RpbmctcmVzdWx0cy9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNBeGlvc0Vycm9yLmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtc2VyaWFsaXplL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1nZW9jb2RpbmctcmVzdWx0cy9ub2RlX21vZHVsZXMvQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1qc29uL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2JpbmQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3V0aWxzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3BhcnNlSGVhZGVycy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9zYW5pdGl6ZUhlYWRlclZhbHVlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0F4aW9zSGVhZGVycy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9BeGlvc0Vycm9yLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3RvRm9ybURhdGEuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvQXhpb3NVUkxTZWFyY2hQYXJhbXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYnVpbGRVUkwuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvSW50ZXJjZXB0b3JNYW5hZ2VyLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9kZWZhdWx0cy90cmFuc2l0aW9uYWwuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2Jyb3dzZXIvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2Jyb3dzZXIvY2xhc3Nlcy9VUkxTZWFyY2hQYXJhbXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2Jyb3dzZXIvY2xhc3Nlcy9Gb3JtRGF0YS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vYnJvd3Nlci9jbGFzc2VzL0Jsb2IuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2NvbW1vbi91dGlscy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vaW5kZXguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvZm9ybURhdGFUb0pTT04uanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2RlZmF1bHRzL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3RvVVJMRW5jb2RlZEZvcm0uanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvdHJhbnNmb3JtRGF0YS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL2lzQ2FuY2VsLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9zZXR0bGUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcHJvZ3Jlc3NFdmVudFJlZHVjZXIuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvc3BlZWRvbWV0ZXIuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdGhyb3R0bGUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2Nvb2tpZXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvYnVpbGRGdWxsUGF0aC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0Fic29sdXRlVVJMLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2NvbWJpbmVVUkxzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL21lcmdlQ29uZmlnLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3Jlc29sdmVDb25maWcuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2FkYXB0ZXJzL3hoci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9wYXJzZVByb3RvY29sLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2NvbXBvc2VTaWduYWxzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3RyYWNrU3RyZWFtLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9lbnYvZGF0YS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYWRhcHRlcnMvZmV0Y2guanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvZXN0aW1hdGVEYXRhVVJMRGVjb2RlZEJ5dGVzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9hZGFwdGVycy9hZGFwdGVycy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9udWxsLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL2Rpc3BhdGNoUmVxdWVzdC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy92YWxpZGF0b3IuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3MuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9DYW5jZWxUb2tlbi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9IdHRwU3RhdHVzQ29kZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYXhpb3MuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvc3ByZWFkLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzQXhpb3NFcnJvci5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWV4ZWN1dGUtc2VhcmNoLWltbWlkaWF0ZS9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1qc29uL2luZGV4LmpzIiwiLi4vc3JjL3V0aWxzL2kxOG4uanMiLCIuLi9zcmMvdXRpbHMvdHJhbnNsYXRpb25zLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWluamVjdC9kaXN0L3N0eWxlLWluamVjdC5lcy5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXVuaXEtYnktbGFiZWwvaW5kZXguanMiLCIuLi9zcmMvdXRpbHMvdXRpbHMuanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtbGFiZWwvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGhzbC1maS9ob29rcy9saWIvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZS5qcyIsIi4uL3NyYy9jb21wb25lbnRzL1N1Z2dlc3Rpb25zLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvQ2xlYXJCdXR0b24uanMiLCIuLi9zcmMvY29tcG9uZW50cy9JbnB1dC5qcyIsIi4uL3NyYy9jb21wb25lbnRzL01vYmlsZVZpZXcuanMiLCIuLi9zcmMvdXRpbHMvc2VhcmNoUmVkdWNlci5qcyIsIi4uL3NyYy9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBfdHlwZW9mKG8pIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gdHlwZW9mIG87XG4gIH0gOiBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvO1xuICB9LCBfdHlwZW9mKG8pO1xufVxuZXhwb3J0IHsgX3R5cGVvZiBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5pbXBvcnQgdG9QcmltaXRpdmUgZnJvbSBcIi4vdG9QcmltaXRpdmUuanNcIjtcbmZ1bmN0aW9uIHRvUHJvcGVydHlLZXkodCkge1xuICB2YXIgaSA9IHRvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpO1xuICByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiO1xufVxuZXhwb3J0IHsgdG9Qcm9wZXJ0eUtleSBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5mdW5jdGlvbiB0b1ByaW1pdGl2ZSh0LCByKSB7XG4gIGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0O1xuICB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTtcbiAgaWYgKHZvaWQgMCAhPT0gZSkge1xuICAgIHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpO1xuICAgIGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTtcbiAgfVxuICByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpO1xufVxuZXhwb3J0IHsgdG9QcmltaXRpdmUgYXMgZGVmYXVsdCB9OyIsImltcG9ydCB0b1Byb3BlcnR5S2V5IGZyb20gXCIuL3RvUHJvcGVydHlLZXkuanNcIjtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7XG4gIHJldHVybiAociA9IHRvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwge1xuICAgIHZhbHVlOiB0LFxuICAgIGVudW1lcmFibGU6ICEwLFxuICAgIGNvbmZpZ3VyYWJsZTogITAsXG4gICAgd3JpdGFibGU6ICEwXG4gIH0pIDogZVtyXSA9IHQsIGU7XG59XG5leHBvcnQgeyBfZGVmaW5lUHJvcGVydHkgYXMgZGVmYXVsdCB9OyIsIi8qKlxuICogIGFjY2VwdCBlcXVhbGl0eSBvZiBub24gbnVsbGlzaCB2YWx1ZXNcbiAqXG4gKiBAbmFtZSB0cnVFcVxuICogQHBhcmFtIHtCb29sZWFufE51bWJlcnxCaWdJbnR8U3RyaW5nfFN5bWJvbHxPYmplY3R9IHZhbDEgRmlyc3QgdmFsdWUgdG8gYmUgY29tcGFyZWRcbiAqIEBwYXJhbSB7Qm9vbGVhbnxOdW1iZXJ8QmlnSW50fFN0cmluZ3xTeW1ib2x8T2JqZWN0fSBwYXJhbTIgU2Vjb25kIHZhbHVlIHRvIGJlIGNvbXBhcmVkXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZS9mYWxzZVxuICogQGV4YW1wbGVcbiAqIGRpZ2l0cmFuc2l0LXV0aWwudHJ1RXEoJzInLCAnMicpO1xuICogLy89dHJ1ZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0cnVFcSh2YWwxLCB2YWwyKSB7XG4gIHJldHVybiB2YWwxICYmIHZhbDIgJiYgdmFsMSA9PT0gdmFsMjtcbn1cbiIsImltcG9ydCB0cnVFcSBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtdHJ1LWVxJztcbi8qKlxuICogQ2hlY2tzIHRoYXQgaXMgaXRlbXMgZHVwbGljYXRlXG4gKlxuICogQG5hbWUgaXNEdXBsaWNhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBpdGVtMSBPYmplY3QgY29udGFpbmluZyBmb2xsb3dpbmcgYXR0cmlidXRlczpcbiAqIHtcbiAqICBwcm9wZXJ0aWVzIHtcbiAqICAgICAgZ3Rmc0lkOiBTdHJpbmdcbiAqICAgICAgZ2lkOiBTdHJpbmcgZnJvbSBnZW9jb2RlclxuICogICAgICBuYW1lOiBTdHJpbmdcbiAqICAgICAgbGFiZWw6IFN0cmluZ1xuICogICAgICAgYWRkcmVzczogU3RyaW5nXG4gKiAgICAgIGdlb21ldHJ5IHtcbiAqICAgICAgICAgY29vcmRpbmF0ZXMgW051bWJlciBsYXQsIE51bWJlciBsb25dXG4gKiAgICAgIH1cbiAqICB9XG4gKiB9XG4gKiBAcGFyYW0ge09iamVjdH0gaXRlbTIgT2JqZWN0IHdpdGggc2FtZSBhdHRyaWJ1dGVzIGFzIGl0ZW0xXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZS9mYWxzZVxuICogQGV4YW1wbGVcbiAqIGRpZ2l0cmFuc2l0LXV0aWwuaXNEdXBsaWNhdGUocGFyYW0xLCBwYXJhbTIpO1xuICogLy89dHJ1ZVxuICovXG5cbmNvbnN0IGd0ZnNTdG9wTGF5ZXJzID0gWydzdG9wJywgJ3N0YXRpb24nLCAnZmF2b3VyaXRlU3RvcCcsICdmYXZvdXJpdGVTdGF0aW9uJ107XG5jb25zdCB2ZWhpY2xlUmVudGFsTGF5ZXJzID0gWydmYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbicsICdiaWtlc3RhdGlvbiddO1xuXG5mdW5jdGlvbiBsYWJlbElkVG9HaWQoaWQpIHtcbiAgaWYgKCFpZCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICBjb25zdCBwYXJ0cyA9IGlkLnNwbGl0KCc6Jyk7XG4gIGlmIChwYXJ0cy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgcmV0dXJuIGBjaXR5YmlrZXMke3BhcnRzWzBdfTpiaWtlc3RhdGlvbjoke3BhcnRzWzFdfWA7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzRHVwbGljYXRlKGl0ZW0xLCBpdGVtMikge1xuICBjb25zdCBwcm9wczEgPSBpdGVtMS5wcm9wZXJ0aWVzO1xuICBjb25zdCBwcm9wczIgPSBpdGVtMi5wcm9wZXJ0aWVzO1xuXG4gIGlmIChpdGVtMS50eXBlID09PSAnRnV0dXJlUm91dGUnICYmIGl0ZW0yLnR5cGUgPT09ICdGdXR1cmVSb3V0ZScpIHtcbiAgICBjb25zdCBvMSA9IHByb3BzMS5vcmlnaW47XG4gICAgY29uc3QgZDEgPSBwcm9wczEuZGVzdGluYXRpb247XG4gICAgY29uc3QgbzIgPSBwcm9wczIub3JpZ2luO1xuICAgIGNvbnN0IGQyID0gcHJvcHMyLmRlc3RpbmF0aW9uO1xuXG4gICAgY29uc3QgbmFtZTEgPSBgJHtvMS5uYW1lfS8vJHtvMS5sb2NhbGFkbWlufS8vJHtkMS5uYW1lfS8vJHtkMS5sb2NhbGFkbWlufWA7XG4gICAgY29uc3QgbmFtZTIgPSBgJHtvMi5uYW1lfS8vJHtvMi5sb2NhbGFkbWlufS8vJHtkMi5uYW1lfS8vJHtkMi5sb2NhbGFkbWlufWA7XG5cbiAgICByZXR1cm4gbmFtZTEgPT09IG5hbWUyO1xuICB9XG4gIGlmIChpdGVtMS50eXBlID09PSAnRnV0dXJlUm91dGUnIHx8IGl0ZW0yLnR5cGUgPT09ICdGdXR1cmVSb3V0ZScpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKFxuICAgIHZlaGljbGVSZW50YWxMYXllcnMuaW5jbHVkZXMocHJvcHMxLmxheWVyKSAmJlxuICAgIHZlaGljbGVSZW50YWxMYXllcnMuaW5jbHVkZXMocHJvcHMyLmxheWVyKVxuICApIHtcbiAgICBjb25zdCBpZDEgPSBwcm9wczEuZ2lkIHx8IGxhYmVsSWRUb0dpZChwcm9wczEubGFiZWxJZCk7XG4gICAgY29uc3QgaWQyID0gcHJvcHMyLmdpZCB8fCBsYWJlbElkVG9HaWQocHJvcHMyLmxhYmVsSWQpO1xuICAgIHJldHVybiBpZDEgPT09IGlkMjtcbiAgfVxuICBpZiAocHJvcHMxLmd0ZnNJZCAmJiBwcm9wczIuZ3Rmc0lkKSB7XG4gICAgcmV0dXJuIHByb3BzMS5ndGZzSWQgPT09IHByb3BzMi5ndGZzSWQ7XG4gIH1cbiAgaWYgKFxuICAgIGd0ZnNTdG9wTGF5ZXJzLmluY2x1ZGVzKHByb3BzMS5sYXllcikgJiZcbiAgICBndGZzU3RvcExheWVycy5pbmNsdWRlcyhwcm9wczIubGF5ZXIpICYmXG4gICAgcHJvcHMxLmdpZCAmJlxuICAgIHByb3BzMi5naWRcbiAgKSB7XG4gICAgcmV0dXJuIHByb3BzMS5naWQgPT09IHByb3BzMi5naWQ7XG4gIH1cblxuICBjb25zdCBwMSA9IGl0ZW0xICYmIGl0ZW0xLmdlb21ldHJ5ID8gaXRlbTEuZ2VvbWV0cnkuY29vcmRpbmF0ZXMgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IHAyID0gaXRlbTIgJiYgaXRlbTIuZ2VvbWV0cnkgPyBpdGVtMi5nZW9tZXRyeS5jb29yZGluYXRlcyA6IHVuZGVmaW5lZDtcblxuICBpZiAocDEgJiYgcDIpIHtcbiAgICAvLyBib3RoIGhhdmUgZ2VvbWV0cnlcbiAgICBpZiAoTWF0aC5hYnMocDFbMF0gLSBwMlswXSkgPCAxZS02ICYmIE1hdGguYWJzKHAxWzFdIC0gcDJbMV0pIDwgMWUtNikge1xuICAgICAgLy8gbG9jYXRpb24gbWF0Y2ggaXMgbm90IGVub3VnaC4gUmVxdWlyZSBhIGNvbW1vbiBwcm9wZXJ0eVxuICAgICAgaWYgKFxuICAgICAgICB0cnVFcShwcm9wczEubmFtZSwgcHJvcHMyLm5hbWUpIHx8XG4gICAgICAgIHRydUVxKHByb3BzMS5sYWJlbCwgcHJvcHMyLmxhYmVsKSB8fFxuICAgICAgICB0cnVFcShwcm9wczEuYWRkcmVzcywgcHJvcHMyLmFkZHJlc3MpIHx8XG4gICAgICAgIHRydUVxKHByb3BzMS5hZGRyZXNzLCBwcm9wczIubGFiZWwpIHx8XG4gICAgICAgIHRydUVxKHByb3BzMS5sYWJlbCwgcHJvcHMyLmFkZHJlc3MpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbiIsImltcG9ydCBpc1N0cmluZyBmcm9tICdsb2Rhc2gvaXNTdHJpbmcnO1xuaW1wb3J0IG9yZGVyQnkgZnJvbSAnbG9kYXNoL29yZGVyQnknO1xuaW1wb3J0IHVuaXFXaXRoIGZyb20gJ2xvZGFzaC91bmlxV2l0aCc7XG5pbXBvcnQgaXNEdXBsaWNhdGUgZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWlzLWR1cGxpY2F0ZSc7XG5cbmNvbnN0IG5vcm1hbGl6ZSA9IHN0ciA9PiB7XG4gIGlmICghaXNTdHJpbmcoc3RyKSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICByZXR1cm4gc3RyLnRvTG93ZXJDYXNlKCk7XG59O1xuXG5jb25zdCBzcGxpdFNob3J0TmFtZUF0TGV0dGVycyA9IHN0ciA9PiB7XG4gIHJldHVybiBzdHIuc3BsaXQoLyhcXHB7TH0rKS91KTtcbn07XG5cbmNvbnN0IHRlc3RTaG9ydE5hbWVNYXRjaGVzTGluZVdpdGhOdW1iZXJzQW5kTGV0dGVycyA9IHN0ciA9PiB7XG4gIHJldHVybiAvXlswLTldK1xccHtMfSskL3UudGVzdChzdHIpO1xufTtcblxuLyoqXG4gKiBMYXllclR5cGUgZGVwaWN0cyB0aGUgdHlwZSBvZiB0aGUgcG9pbnQtb2YtaW50ZXJlc3QuXG4gKi9cbmNvbnN0IExheWVyVHlwZSA9IHtcbiAgQWRkcmVzczogJ2FkZHJlc3MnLFxuICBCYWNrOiAnYmFjaycsXG4gIEN1cnJlbnRQb3NpdGlvbjogJ2N1cnJlbnRQb3NpdGlvbicsXG4gIEZhdm91cml0ZVN0b3A6ICdmYXZvdXJpdGVTdG9wJyxcbiAgRmF2b3VyaXRlU3RhdGlvbjogJ2Zhdm91cml0ZVN0YXRpb24nLFxuICBGYXZvdXJpdGVQbGFjZTogJ2Zhdm91cml0ZVBsYWNlJyxcbiAgRmF2b3VyaXRlUm91dGU6ICdmYXZvdXJpdGVSb3V0ZScsXG4gIEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uOiAnZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb24nLFxuICBGdXR1cmVSb3V0ZTogJ2Z1dHVyZVJvdXRlJyxcbiAgU3RhdGlvbjogJ3N0YXRpb24nLFxuICBTZWxlY3RGcm9tTWFwOiAnc2VsZWN0RnJvbU1hcCcsXG4gIFNlbGVjdEZyb21Pd25Mb2NhdGlvbnM6ICdvd25Mb2NhdGlvbnMnLFxuICBTdG9wOiAnc3RvcCcsXG4gIFN0cmVldDogJ3N0cmVldCcsXG4gIFZlbnVlOiAndmVudWUnLFxuICBWZWhpY2xlUmVudGFsU3RhdGlvbjogJ2Jpa2VzdGF0aW9uJyxcbiAgQ2FyUGFyazogJ2NhcnBhcmsnLFxuICBCaWtlUGFyazogJ2Jpa2VwYXJrJyxcbn07XG5leHBvcnQgY29uc3QgaXNTdG9wID0gKHsgbGF5ZXIsIHR5cGUgfSkgPT5cbiAgbGF5ZXIgPT09ICdzdG9wJyB8fFxuICBsYXllciA9PT0gJ2Zhdm91cml0ZVN0b3AnIHx8XG4gIHR5cGUgPT09ICdzdG9wJyB8fFxuICB0eXBlID09PSAnZmF2b3VyaXRlU3RvcCc7XG5cbmNvbnN0IERFRkFVTFRfUk9VVEVTX1BSRUZJWCA9ICdsaW5qYXQnO1xuY29uc3QgREVGQVVMVF9TVE9QU19QUkVGSVggPSAncHlzYWtpdCc7XG5cbmV4cG9ydCBjb25zdCBtYXBSb3V0ZSA9IChpdGVtLCBwYXRoT3B0cykgPT4ge1xuICBpZiAoaXRlbSA9PT0gbnVsbCB8fCBpdGVtID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IG9wdHMgPSBwYXRoT3B0cyB8fCB7fTtcblxuICBjb25zdCByb3V0ZXNQcmVmaXggPSBvcHRzLnJvdXRlc1ByZWZpeCB8fCBERUZBVUxUX1JPVVRFU19QUkVGSVg7XG4gIGNvbnN0IHN0b3BzUHJlZml4ID0gb3B0cy5zdG9wc1ByZWZpeCB8fCBERUZBVUxUX1NUT1BTX1BSRUZJWDtcblxuICBjb25zdCBsaW5rID0gYC8ke3JvdXRlc1ByZWZpeH0vJHtlbmNvZGVVUklDb21wb25lbnQoXG4gICAgaXRlbS5ndGZzSWQsXG4gICl9LyR7c3RvcHNQcmVmaXh9YDtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnUm91dGUnLFxuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIC4uLml0ZW0sXG4gICAgICBsYXllcjogYHJvdXRlLSR7aXRlbS5tb2RlfWAsXG4gICAgICBsaW5rLFxuICAgIH0sXG4gICAgZ2VvbWV0cnk6IHtcbiAgICAgIGNvb3JkaW5hdGVzOiBudWxsLFxuICAgIH0sXG4gIH07XG59O1xuXG4vKipcbiAqIFRyaWVzIHRvIG1hdGNoIHRoZSBnaXZlbiBzZWFyY2ggdGVybSBhZ2FpbnMgdGhlIGNvbGxlY3Rpb24gb2YgcHJvcGVydGllc1xuICogZm9yIGEgZ2VvY29kaW5nIHJlc3VsdCAobWluOiAwLCBtYXg6IDEuNSkuIFRoZSBiZXN0IG1hdGNoIHdpbGwgcmV0dXJuIGEgbnVtYmVyIG9mIDEuNS5cbiAqIFdvcnNlIG1hdGNoZXMgd2lsbCByZXR1cm4gMCBvciAwLjUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5vcm1hbGl6ZWRUZXJtIHRoZSBub3JtYWxpemVkIHNlYXJjaCB0ZXJtLlxuICogQHBhcmFtIHsqfSByZXN1bHRQcm9wZXJ0aWVzIHRoZSBnZW9jb2RpbmcgcmVzdWx0J3MgcHJvcGVydHkgY29sbGVjdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IG1hdGNoID0gKG5vcm1hbGl6ZWRUZXJtLCByZXN1bHRQcm9wZXJ0aWVzKSA9PiB7XG4gIGlmICghaXNTdHJpbmcobm9ybWFsaXplZFRlcm0pIHx8IG5vcm1hbGl6ZWRUZXJtLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgY29uc3QgbWF0Y2hQcm9wcyA9IFsnbmFtZScsICdsYWJlbCcsICdhZGRyZXNzJywgJ3Nob3J0TmFtZSddO1xuICByZXR1cm4gbWF0Y2hQcm9wc1xuICAgIC5tYXAobmFtZSA9PiB7XG4gICAgICByZXR1cm4geyBuYW1lLCB2YWx1ZTogcmVzdWx0UHJvcGVydGllc1tuYW1lXSB9O1xuICAgIH0pXG4gICAgLmZpbHRlcihlbGVtZW50ID0+IGlzU3RyaW5nKGVsZW1lbnQudmFsdWUpICYmIGVsZW1lbnQudmFsdWUubGVuZ3RoID4gMClcbiAgICAubWFwKGVsZW1lbnQgPT4ge1xuICAgICAgbGV0IG5vcm1hbGl6ZWRWYWx1ZSA9IG5vcm1hbGl6ZShlbGVtZW50LnZhbHVlKTtcbiAgICAgIGlmIChub3JtYWxpemVkVmFsdWUuaW5kZXhPZihub3JtYWxpemVkVGVybSkgPT09IDApIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGVsZW1lbnQubmFtZSA9PT0gJ3Nob3J0TmFtZScgJiZcbiAgICAgICAgICB0ZXN0U2hvcnROYW1lTWF0Y2hlc0xpbmVXaXRoTnVtYmVyc0FuZExldHRlcnMobm9ybWFsaXplZFZhbHVlKVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBJZiB0aGUgc2hvcnROYW1lIGlzIG9mIGEgY2VydGFpbiBmb3JtYXQgKGUuZy4gODlBKSwgaXQgaXMgdHJlYXRlZCBoZXJlXG4gICAgICAgICAgLy8gYXMgaWYgaXQgaGFkIHRoZSBsZW5ndGggb2YgdGhlIG51bWJlcnMgd2l0aCB0aGUgbGV0dGVycyByZW1vdmVkLlxuICAgICAgICAgIC8vIFNvIHRoZSBsZW5ndGggb2YgODlBIHdvdWxkIGJlIHRyZWF0ZWQgYXMgMi5cbiAgICAgICAgICBbbm9ybWFsaXplZFZhbHVlXSA9IHNwbGl0U2hvcnROYW1lQXRMZXR0ZXJzKG5vcm1hbGl6ZWRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZnVsbCBtYXRjaCBhdCBzdGFydC4gUmV0dXJuIG1heCByZXN1bHQgd2hlbiBtYXRjaCBpcyBmdWxsLCBub3Qgb25seSBwYXJ0aWFsXG4gICAgICAgIHJldHVybiAwLjUgKyBub3JtYWxpemVkVGVybS5sZW5ndGggLyBub3JtYWxpemVkVmFsdWUubGVuZ3RoO1xuICAgICAgfVxuICAgICAgLy8gYmVjYXVzZSBvZiBmaWx0ZXJtYXRjaGluZ3RvaW5wdXQsIHdlIGtub3cgdGhhdCBtYXRjaCBvY2N1cnJlZCBzb21ld2hlcmVcbiAgICAgIC8vIGRvbid0IHJ1biBmaWx0ZXJtYXRjaGluZyBhZ2FpbiBidXQgZXN0aW1hdGUgcm91Z2hseTpcbiAgICAgIC8vIHRoZSBsb25nZXIgdGhlIG1hdGNoaW5nIHN0cmluZywgdGhlIGJldHRlciBjb25maWRlbmNlLCBtYXggYmVpbmcgMC41XG4gICAgICByZXR1cm4gKDAuNSAqIG5vcm1hbGl6ZWRUZXJtLmxlbmd0aCkgLyAobm9ybWFsaXplZFRlcm0ubGVuZ3RoICsgMSk7XG4gICAgfSlcbiAgICAucmVkdWNlKFxuICAgICAgKHByZXZpb3VzLCBjdXJyZW50KSA9PiAoY3VycmVudCA+IHByZXZpb3VzID8gY3VycmVudCA6IHByZXZpb3VzKSxcbiAgICAgIDAsXG4gICAgKTtcbn07XG5cbi8qKlxuICogUmFua3MgdGhlIHJlc3VsdCBiYXNlZCBvbiBpdHMgbGF5ZXIgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGxheWVyIHRoZSBsYXllciBwcm9wZXJ0eS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgdGhlIHNvdXJjZSBwcm9wZXJ0eS5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldExheWVyUmFuayA9IChsYXllciwgc291cmNlKSA9PiB7XG4gIHN3aXRjaCAobGF5ZXIpIHtcbiAgICBjYXNlIExheWVyVHlwZS5DdXJyZW50UG9zaXRpb246XG4gICAgICByZXR1cm4gMTtcbiAgICBjYXNlIExheWVyVHlwZS5CYWNrOlxuICAgICAgcmV0dXJuIDAuOTtcbiAgICBjYXNlIExheWVyVHlwZS5TZWxlY3RGcm9tTWFwOlxuICAgICAgcmV0dXJuIDAuODtcbiAgICBjYXNlIExheWVyVHlwZS5TZWxlY3RGcm9tT3duTG9jYXRpb25zOlxuICAgICAgcmV0dXJuIDAuNzk7XG4gICAgY2FzZSBMYXllclR5cGUuRmF2b3VyaXRlU3RhdGlvbjpcbiAgICBjYXNlIExheWVyVHlwZS5GYXZvdXJpdGVQbGFjZTpcbiAgICBjYXNlIExheWVyVHlwZS5GYXZvdXJpdGVTdG9wOlxuICAgIGNhc2UgTGF5ZXJUeXBlLkZhdm91cml0ZVJvdXRlOlxuICAgIGNhc2UgTGF5ZXJUeXBlLkZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uOlxuICAgICAgcmV0dXJuIDAuNDU7XG4gICAgY2FzZSBMYXllclR5cGUuRnV0dXJlUm91dGU6XG4gICAgICByZXR1cm4gMC40NDtcbiAgICBjYXNlIExheWVyVHlwZS5TdGF0aW9uOiB7XG4gICAgICBpZiAoaXNTdHJpbmcoc291cmNlKSAmJiBzb3VyY2UuaW5kZXhPZignZ3RmcycpID09PSAwKSB7XG4gICAgICAgIHJldHVybiAwLjQzO1xuICAgICAgfVxuICAgICAgcmV0dXJuIDAuNDI7XG4gICAgfVxuICAgIGNhc2UgTGF5ZXJUeXBlLkNhclBhcms6XG4gICAgICByZXR1cm4gMC4zODtcbiAgICBjYXNlIExheWVyVHlwZS5CaWtlUGFyazpcbiAgICAgIHJldHVybiAwLjM4O1xuICAgIGNhc2UgTGF5ZXJUeXBlLlZlaGljbGVSZW50YWxTdGF0aW9uOlxuICAgICAgcmV0dXJuIDAuMzg7XG4gICAgY2FzZSBMYXllclR5cGUuU3RvcDpcbiAgICAgIHJldHVybiAwLjM2O1xuICAgIGRlZmF1bHQ6XG4gICAgICAvLyB2ZW51ZSwgYWRkcmVzcywgc3RyZWV0LCByb3V0ZS14eHhcbiAgICAgIHJldHVybiAwLjQxO1xuICB9XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byBzb3J0IHRoZSByZXN1bHRzLiBPcmRlcnMgYXMgZm9sbG93czpcbiAqICAtIGN1cnJlbnQgcG9zaXRpb24gZmlyc3QgZm9yIGFuIGVtcHR5IHNlYXJjaFxuICogIC0gbWF0Y2hpbmcgcm91dGVzIGZpcnN0XG4gKiAgLSBvdGhlcndpc2UgYnkgY29uZmlkZW5jZSwgZXhjZXB0IHRoYXQ6XG4gKiAgICAtIGJvb3N0IHdlbGwgbWF0Y2hpbmcgc3RhdGlvbnMgKGVzcGVjaWFsbHkgZnJvbSBHVEZTKVxuICogICAgLSByYW5rIHN0b3BzIGxvd2VyIGFzIHRoZXkgdGVuZCB0byBvY2N1cHkgbW9zdCBvZiB0aGUgc2VhcmNoIHJlc3VsdHNcbiAqICAtIGl0ZW1zIHdpdGggbm8gY29uZmlkZW5jZSAob2xkIHNlYXJjaGVzIGFuZCBmYXZvcml0ZXMpOlxuICogICAgLSByYW5rIGZhdm91cml0ZXMgYmV0dGVyIHRoYW4gb3JkaW5hcnkgb2xkIHNlYXJjaGVzXG4gKiAgICAtIHJhbmsgZnVsbCBtYXRjaCBiZXR0ZXIgdGhhbiBwYXJ0aWFsIG1hdGNoXG4gKiAgICAtIHJhbmsgbWF0Y2ggYXQgbWlkZGxlIHdvcmQgbG93ZXIgdGhhbiBtYXRjaCBhdCB0aGUgYmVnaW5uaW5nXG4gKiAgICAtIHJhbmsgYmlrZSByZW50YWwgc3RhdGlvbnMgbG93ZXJcbiAqIEBwYXJhbSB7KltdfSByZXN1bHRzIFRoZSBzZWFyY2ggcmVzdWx0cyB0aGF0IHdlcmUgcmVjZWl2ZWRcbiAqIEBwYXJhbSB7U3RyaW5nfSB0ZXJtIFRoZSBzZWFyY2ggdGVybSB0aGF0IHdhcyB1c2VkXG4gKi9cbmV4cG9ydCBjb25zdCBzb3J0U2VhcmNoUmVzdWx0cyA9IChsaW5lUmVnZXhwLCByZXN1bHRzLCB0ZXJtID0gJycpID0+IHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHJlc3VsdHMpIHx8ICFyZXN1bHRzLmxlbmd0aCkge1xuICAgIHJldHVybiByZXN1bHRzO1xuICB9XG4gIGNvbnN0IGlzTGluZUlkZW50aWZpZXIgPSB2YWx1ZSA9PlxuICAgIGlzU3RyaW5nKHZhbHVlKSAmJiBsaW5lUmVnZXhwICYmIGxpbmVSZWdleHAudGVzdCh2YWx1ZSk7XG5cbiAgY29uc3Qgbm9ybWFsaXplZFRlcm0gPSBub3JtYWxpemUodGVybSk7XG4gIGNvbnN0IGlzTGluZVNlYXJjaCA9IGlzTGluZUlkZW50aWZpZXIobm9ybWFsaXplZFRlcm0pO1xuXG4gIGNvbnN0IG9yZGVyZWRSZXN1bHRzID0gb3JkZXJCeShcbiAgICByZXN1bHRzLmZpbHRlcihyID0+IHIpLFxuICAgIFtcbiAgICAgIC8vIHJhbmsgbWF0Y2hpbmcgcm91dGVzIGJlc3RcbiAgICAgIHJlc3VsdCA9PlxuICAgICAgICBpc0xpbmVTZWFyY2ggJiZcbiAgICAgICAgaXNMaW5lSWRlbnRpZmllcihub3JtYWxpemUocmVzdWx0LnByb3BlcnRpZXMuc2hvcnROYW1lKSkgJiZcbiAgICAgICAgbm9ybWFsaXplKHJlc3VsdC5wcm9wZXJ0aWVzLnNob3J0TmFtZSkuaW5kZXhPZihub3JtYWxpemVkVGVybSkgPT09IDBcbiAgICAgICAgICA/IDFcbiAgICAgICAgICA6IDAsXG5cbiAgICAgIHJlc3VsdCA9PiB7XG4gICAgICAgIGNvbnN0IHsgY29uZmlkZW5jZSwgbGF5ZXIsIHNvdXJjZSB9ID0gcmVzdWx0LnByb3BlcnRpZXM7XG4gICAgICAgIGlmIChub3JtYWxpemVkVGVybS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAvLyBEb2luZyBzZWFyY2ggd2l0aCBlbXB0eSBzdHJpbmcuXG4gICAgICAgICAgLy8gTm8gY29uZmlkZW5jZSB0byBtYXRjaCwgc28gdXNlIHJhbmtlZCBvbGQgc2VhcmNoZXMgYW5kIGZhdm91cml0ZXNcbiAgICAgICAgICByZXR1cm4gZ2V0TGF5ZXJSYW5rKGxheWVyLCBzb3VyY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbXVzdCBoYW5kbGUgYSBtaXh1cCBvZiBnZW9jb2RlciBzZWFyY2hlcyBhbmQgaXRlbXMgYWJvdmVcbiAgICAgICAgLy8gTm9ybWFsIGNvbmZpZGVuY2UgcmFuZ2UgZnJvbSBnZW9jb2RlciBpcyBhYm91dCAwLjMgLi4gMVxuICAgICAgICBpZiAoIWNvbmZpZGVuY2UpIHtcbiAgICAgICAgICAvLyBub3QgZnJvbSBnZW9jb2RlciwgZXN0aW1hdGUgY29uZmlkZW5jZSBvdXJzZWx2ZXNcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgZ2V0TGF5ZXJSYW5rKGxheWVyLCBzb3VyY2UpICtcbiAgICAgICAgICAgIG1hdGNoKG5vcm1hbGl6ZWRUZXJtLCByZXN1bHQucHJvcGVydGllcylcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIC8vIGdlb2NvZGVkIGl0ZW1zIHdpdGggY29uZmlkZW5jZSwganVzdCBhZGp1c3QgYSBsaXR0bGVcbiAgICAgICAgc3dpdGNoIChsYXllcikge1xuICAgICAgICAgIGNhc2UgTGF5ZXJUeXBlLlN0YXRpb246IHtcbiAgICAgICAgICAgIGNvbnN0IGJvb3N0ID0gc291cmNlLmluZGV4T2YoJ2d0ZnMnKSA9PT0gMCA/IDAuMDIgOiAwLjAxO1xuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZGVuY2UgKyBib29zdDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBMYXllclR5cGUuU3RvcDpcbiAgICAgICAgICAgIHJldHVybiBjb25maWRlbmNlIC0gMC4wNTtcbiAgICAgICAgICBjYXNlIExheWVyVHlwZS5DYXJQYXJrOlxuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZGVuY2UgLSAwLjA1O1xuICAgICAgICAgIGNhc2UgTGF5ZXJUeXBlLkJpa2VQYXJrOlxuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZGVuY2UgLSAwLjA1O1xuICAgICAgICAgIGNhc2UgTGF5ZXJUeXBlLlZlaGljbGVSZW50YWxTdGF0aW9uOlxuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZGVuY2UgLSAwLjA0O1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gY29uZmlkZW5jZTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHJlc3VsdCA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQucHJvcGVydGllcy5zaG9ydE5hbWUpIHtcbiAgICAgICAgICByZXR1cm4gdGVzdFNob3J0TmFtZU1hdGNoZXNMaW5lV2l0aE51bWJlcnNBbmRMZXR0ZXJzKFxuICAgICAgICAgICAgcmVzdWx0LnByb3BlcnRpZXMuc2hvcnROYW1lLFxuICAgICAgICAgIClcbiAgICAgICAgICAgID8gc3BsaXRTaG9ydE5hbWVBdExldHRlcnMocmVzdWx0LnByb3BlcnRpZXMuc2hvcnROYW1lKVswXVxuICAgICAgICAgICAgOiByZXN1bHQucHJvcGVydGllcy5zaG9ydE5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0sXG4gICAgICByZXN1bHQgPT4ge1xuICAgICAgICBpZiAocmVzdWx0LnByb3BlcnRpZXMuc2hvcnROYW1lKSB7XG4gICAgICAgICAgcmV0dXJuIHRlc3RTaG9ydE5hbWVNYXRjaGVzTGluZVdpdGhOdW1iZXJzQW5kTGV0dGVycyhcbiAgICAgICAgICAgIHJlc3VsdC5wcm9wZXJ0aWVzLnNob3J0TmFtZSxcbiAgICAgICAgICApXG4gICAgICAgICAgICA/IHNwbGl0U2hvcnROYW1lQXRMZXR0ZXJzKHJlc3VsdC5wcm9wZXJ0aWVzLnNob3J0TmFtZSlbMV1cbiAgICAgICAgICAgIDogcmVzdWx0LnByb3BlcnRpZXMuc2hvcnROYW1lO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9LFxuICAgICAgJ3Byb3BlcnRpZXMubG9uZ05hbWUnLFxuICAgIF0sXG4gICAgWydkZXNjJywgJ2Rlc2MnLCAnYXNjJywgJ2FzYycsICdhc2MnXSxcbiAgKTtcblxuICByZXR1cm4gdW5pcVdpdGgob3JkZXJlZFJlc3VsdHMsIGlzRHVwbGljYXRlKTtcbn07XG5cbi8qKlxuICogUGFyc2VzIHN0b3AncyBuYW1lIHdpdGhvdXQgc3RvcCBjb2RlIGZyb20gYSBzdG9wIG5hbWUgZnJvbSBnZW9jb2RpbmcgcmVzdWx0c1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbCBzdG9wJ3MgbmFtZSBmcm9tIGdlb2NvZGluZyByZXN1bHRzLlxuICogQHBhcmFtIHtzdHJpbmd9IHN0b3BDb2RlIHN0b3AgY29kZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFN0b3BOYW1lID0gKG5hbWUsIHN0b3BDb2RlKSA9PiB7XG4gIGlmIChcbiAgICBzdG9wQ29kZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgc3RvcENvZGUgIT09IG51bGwgJiZcbiAgICBuYW1lLmxhc3RJbmRleE9mKHN0b3BDb2RlKSAhPT0gLTFcbiAgKSB7XG4gICAgcmV0dXJuIG5hbWUuc3Vic3RyaW5nKDAsIG5hbWUubGFzdEluZGV4T2Yoc3RvcENvZGUpIC0gMSk7XG4gIH1cbiAgcmV0dXJuIG5hbWU7XG59O1xuIiwiaW1wb3J0IGdldCBmcm9tICdsb2Rhc2gvZ2V0JztcblxuLyoqXG4gKiBGdW5jdGlvbiB0aGF0IGZpbHRlcnMgbGlzdCBtYXRjaGluZyB0byBpbnB1dC5cbiAqXG4gKiBAbmFtZSBmaWx0ZXJNYXRjaGluZ1RvSW5wdXRcbiAqIEBwYXJhbSB7QXJyYXl9IGxpc3QgTGlzdCBjb250YWluaW4gb2JqZWN0cyBlLmcoICB7XG4gKiAgICAgICAgIHR5cGU6ICdGZWF0dXJlJ1xuICogICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gKiAgICAgICAgICAgbGFiZWw6ICd0ZXN0YWRkcmVzczQnLFxuICogICAgICAgICAgIGxheWVyOiAnYWRkcmVzcycsXG4gKiAgICAgICAgICAgbmFtZTogJ3Rlc3RhZGRyZXNzNCcsXG4gKiAgICAgICAgIH0sXG4gKiAgICAgICAgIGdlb21ldHJ5OiB7IGNvb3JkaW5hdGVzOiBbbG9uLCBsYXRdIH0sXG4gKiAgICAgICB9LClcbiAqIEBwYXJhbSB7U3RyaW5nfSBJbnB1dCBJbnB1dCBnaXZlbiBmb3IgZmlsdGVyaW5nIHRoZSBsaXN0XG4gKiBAcGFyYW0ge0FycmF5fSBmaWVsZHMgTGlzdCBvZiBmaWVsZHMgdGhhdCBsaXN0IGlzIGZpbHRlcmVkIGJ5IGUuZyAoW3Byb3BlcnRpZXMubGFiZWwsIHByb3BlcnRpZXMubmFtZV0pXG4gKiBAcmV0dXJucyB7QXJyYXl9IEZpbHRlcmVkIEFycmF5LlxuICogQGV4YW1wbGVcbiAqIGRpZ2l0cmFuc2l0LXV0aWwuZmlsdGVyTWF0Y2hpbmdUb0lucHV0KFt7dHlwZTogZmVhdHVyZSwgcHJvcGVydGllcyB7IC4uLiBuYW1lOiB0ZXN0YWRkcmVzczQgfSAuLi4gfV0sICd0ZXN0YWRkcmVzczQnLCAncHJvcGVydGllcy5uYW1lJyk7XG4gKiAvLz0gTGlzdCBjb250YWluaW5nIG9iamVjdCB3aXRoIGdpdmVuIG5hbWUuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZpbHRlck1hdGNoaW5nVG9JbnB1dChsaXN0LCBJbnB1dCwgZmllbGRzKSB7XG4gIGlmICh0eXBlb2YgSW5wdXQgPT09ICdzdHJpbmcnICYmIElucHV0Lmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBpbnB1dCA9IElucHV0LnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgIGNvbnN0IG11bHRpV29yZCA9IGlucHV0LmluY2x1ZGVzKCcgJykgfHwgaW5wdXQuaW5jbHVkZXMoJywnKTtcbiAgICByZXR1cm4gbGlzdC5maWx0ZXIoaXRlbSA9PiB7XG4gICAgICBsZXQgcGFydHMgPSBbXTtcbiAgICAgIGZpZWxkcy5mb3JFYWNoKHBOYW1lID0+IHtcbiAgICAgICAgbGV0IHZhbHVlID0gZ2V0KGl0ZW0sIHBOYW1lKTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgIW11bHRpV29yZCAmJlxuICAgICAgICAgIChwTmFtZSA9PT0gJ3Byb3BlcnRpZXMubGFiZWwnIHx8IHBOYW1lID09PSAnYWRkcmVzcycpICYmXG4gICAgICAgICAgdmFsdWVcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gc3BlY2lhbCBjYXNlOiBkcm9wIGxhc3QgcGFydHMgaS5lLiBjaXR5IGFuZCBuZWlnaGJvdXJob29kXG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zcGxpdCgnLCcpO1xuICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICB2YWx1ZS5zcGxpY2UodmFsdWUubGVuZ3RoIC0gMiwgMik7XG4gICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICB2YWx1ZS5zcGxpY2UodmFsdWUubGVuZ3RoIC0gMSwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhbHVlID0gdmFsdWUuam9pbignLCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIGlmIChtdWx0aVdvcmQpIHtcbiAgICAgICAgICAgIHBhcnRzID0gcGFydHMuY29uY2F0KHZhbHVlLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXJ0cyA9IHBhcnRzLmNvbmNhdChcbiAgICAgICAgICAgICAgdmFsdWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8sL2csICcgJykuc3BsaXQoJyAnKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHBhcnRzW2ldLmluZGV4T2YoaW5wdXQpID09PSAwKSB7XG4gICAgICAgICAgLy8gYWNjZXB0IG1hdGNoIG9ubHkgYXQgd29yZCBzdGFydFxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbGlzdDtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDcmVhdGUgYSBib3VuZCB2ZXJzaW9uIG9mIGEgZnVuY3Rpb24gd2l0aCBhIHNwZWNpZmllZCBgdGhpc2AgY29udGV4dFxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIC0gVGhlIGZ1bmN0aW9uIHRvIGJpbmRcbiAqIEBwYXJhbSB7Kn0gdGhpc0FyZyAtIFRoZSB2YWx1ZSB0byBiZSBwYXNzZWQgYXMgdGhlIGB0aGlzYCBwYXJhbWV0ZXJcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gQSBuZXcgZnVuY3Rpb24gdGhhdCB3aWxsIGNhbGwgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIHdpdGggdGhlIHNwZWNpZmllZCBgdGhpc2AgY29udGV4dFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBiaW5kKGZuLCB0aGlzQXJnKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKCkge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGlzQXJnLCBhcmd1bWVudHMpO1xuICB9O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgYmluZCBmcm9tICcuL2hlbHBlcnMvYmluZC5qcyc7XG5cbi8vIHV0aWxzIGlzIGEgbGlicmFyeSBvZiBnZW5lcmljIGhlbHBlciBmdW5jdGlvbnMgbm9uLXNwZWNpZmljIHRvIGF4aW9zXG5cbmNvbnN0IHsgdG9TdHJpbmcgfSA9IE9iamVjdC5wcm90b3R5cGU7XG5jb25zdCB7IGdldFByb3RvdHlwZU9mIH0gPSBPYmplY3Q7XG5jb25zdCB7IGl0ZXJhdG9yLCB0b1N0cmluZ1RhZyB9ID0gU3ltYm9sO1xuXG5jb25zdCBraW5kT2YgPSAoKGNhY2hlKSA9PiAodGhpbmcpID0+IHtcbiAgY29uc3Qgc3RyID0gdG9TdHJpbmcuY2FsbCh0aGluZyk7XG4gIHJldHVybiBjYWNoZVtzdHJdIHx8IChjYWNoZVtzdHJdID0gc3RyLnNsaWNlKDgsIC0xKS50b0xvd2VyQ2FzZSgpKTtcbn0pKE9iamVjdC5jcmVhdGUobnVsbCkpO1xuXG5jb25zdCBraW5kT2ZUZXN0ID0gKHR5cGUpID0+IHtcbiAgdHlwZSA9IHR5cGUudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuICh0aGluZykgPT4ga2luZE9mKHRoaW5nKSA9PT0gdHlwZTtcbn07XG5cbmNvbnN0IHR5cGVPZlRlc3QgPSAodHlwZSkgPT4gKHRoaW5nKSA9PiB0eXBlb2YgdGhpbmcgPT09IHR5cGU7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBub24tbnVsbCBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXksIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCB7IGlzQXJyYXkgfSA9IEFycmF5O1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIHVuZGVmaW5lZFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzVW5kZWZpbmVkID0gdHlwZU9mVGVzdCgndW5kZWZpbmVkJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCdWZmZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNCdWZmZXIodmFsKSB7XG4gIHJldHVybiAoXG4gICAgdmFsICE9PSBudWxsICYmXG4gICAgIWlzVW5kZWZpbmVkKHZhbCkgJiZcbiAgICB2YWwuY29uc3RydWN0b3IgIT09IG51bGwgJiZcbiAgICAhaXNVbmRlZmluZWQodmFsLmNvbnN0cnVjdG9yKSAmJlxuICAgIGlzRnVuY3Rpb24odmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyKSAmJlxuICAgIHZhbC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcih2YWwpXG4gICk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNBcnJheUJ1ZmZlciA9IGtpbmRPZlRlc3QoJ0FycmF5QnVmZmVyJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyVmlldyh2YWwpIHtcbiAgbGV0IHJlc3VsdDtcbiAgaWYgKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiYgQXJyYXlCdWZmZXIuaXNWaWV3KSB7XG4gICAgcmVzdWx0ID0gQXJyYXlCdWZmZXIuaXNWaWV3KHZhbCk7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gdmFsICYmIHZhbC5idWZmZXIgJiYgaXNBcnJheUJ1ZmZlcih2YWwuYnVmZmVyKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgU3RyaW5nXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmluZywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzU3RyaW5nID0gdHlwZU9mVGVzdCgnc3RyaW5nJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZ1bmN0aW9uLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGdW5jdGlvbiA9IHR5cGVPZlRlc3QoJ2Z1bmN0aW9uJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBOdW1iZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgTnVtYmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNOdW1iZXIgPSB0eXBlT2ZUZXN0KCdudW1iZXInKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHRoaW5nIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNPYmplY3QgPSAodGhpbmcpID0+IHRoaW5nICE9PSBudWxsICYmIHR5cGVvZiB0aGluZyA9PT0gJ29iamVjdCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCb29sZWFuXG4gKlxuICogQHBhcmFtIHsqfSB0aGluZyBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCb29sZWFuLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNCb29sZWFuID0gKHRoaW5nKSA9PiB0aGluZyA9PT0gdHJ1ZSB8fCB0aGluZyA9PT0gZmFsc2U7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgcGxhaW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNQbGFpbk9iamVjdCA9ICh2YWwpID0+IHtcbiAgaWYgKGtpbmRPZih2YWwpICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKHZhbCk7XG4gIHJldHVybiAoXG4gICAgKHByb3RvdHlwZSA9PT0gbnVsbCB8fFxuICAgICAgcHJvdG90eXBlID09PSBPYmplY3QucHJvdG90eXBlIHx8XG4gICAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG90eXBlKSA9PT0gbnVsbCkgJiZcbiAgICAhKHRvU3RyaW5nVGFnIGluIHZhbCkgJiZcbiAgICAhKGl0ZXJhdG9yIGluIHZhbClcbiAgKTtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gZW1wdHkgb2JqZWN0IChzYWZlbHkgaGFuZGxlcyBCdWZmZXJzKVxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gZW1wdHkgb2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNFbXB0eU9iamVjdCA9ICh2YWwpID0+IHtcbiAgLy8gRWFybHkgcmV0dXJuIGZvciBub24tb2JqZWN0cyBvciBCdWZmZXJzIHRvIHByZXZlbnQgUmFuZ2VFcnJvclxuICBpZiAoIWlzT2JqZWN0KHZhbCkgfHwgaXNCdWZmZXIodmFsKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHZhbCkubGVuZ3RoID09PSAwICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWwpID09PSBPYmplY3QucHJvdG90eXBlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gRmFsbGJhY2sgZm9yIGFueSBvdGhlciBvYmplY3RzIHRoYXQgbWlnaHQgY2F1c2UgUmFuZ2VFcnJvciB3aXRoIE9iamVjdC5rZXlzKClcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBEYXRlXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIERhdGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0RhdGUgPSBraW5kT2ZUZXN0KCdEYXRlJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGaWxlXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZpbGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0ZpbGUgPSBraW5kT2ZUZXN0KCdGaWxlJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBSZWFjdCBOYXRpdmUgQmxvYlxuICogUmVhY3QgTmF0aXZlIFwiYmxvYlwiOiBhbiBvYmplY3Qgd2l0aCBhIGB1cmlgIGF0dHJpYnV0ZS4gT3B0aW9uYWxseSwgaXQgY2FuXG4gKiBhbHNvIGhhdmUgYSBgbmFtZWAgYW5kIGB0eXBlYCBhdHRyaWJ1dGUgdG8gc3BlY2lmeSBmaWxlbmFtZSBhbmQgY29udGVudCB0eXBlXG4gKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QtbmF0aXZlL2Jsb2IvMjY2ODRjZjNhZGY0MDk0ZWI2YzQwNWQzNDVhNzViZjhjN2MwYmY4OC9MaWJyYXJpZXMvTmV0d29yay9Gb3JtRGF0YS5qcyNMNjgtTDcxXG4gKiBcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBSZWFjdCBOYXRpdmUgQmxvYiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzUmVhY3ROYXRpdmVCbG9iID0gKHZhbHVlKSA9PiB7XG4gIHJldHVybiAhISh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUudXJpICE9PSAndW5kZWZpbmVkJyk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGVudmlyb25tZW50IGlzIFJlYWN0IE5hdGl2ZVxuICogUmVhY3ROYXRpdmUgYEZvcm1EYXRhYCBoYXMgYSBub24tc3RhbmRhcmQgYGdldFBhcnRzKClgIG1ldGhvZFxuICogXG4gKiBAcGFyYW0geyp9IGZvcm1EYXRhIFRoZSBmb3JtRGF0YSB0byB0ZXN0XG4gKiBcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIGVudmlyb25tZW50IGlzIFJlYWN0IE5hdGl2ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzUmVhY3ROYXRpdmUgPSAoZm9ybURhdGEpID0+IGZvcm1EYXRhICYmIHR5cGVvZiBmb3JtRGF0YS5nZXRQYXJ0cyAhPT0gJ3VuZGVmaW5lZCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCbG9iXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJsb2IsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Jsb2IgPSBraW5kT2ZUZXN0KCdCbG9iJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGaWxlTGlzdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGaWxlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGaWxlTGlzdCA9IGtpbmRPZlRlc3QoJ0ZpbGVMaXN0Jyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJlYW1cbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyZWFtLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNTdHJlYW0gPSAodmFsKSA9PiBpc09iamVjdCh2YWwpICYmIGlzRnVuY3Rpb24odmFsLnBpcGUpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRm9ybURhdGFcbiAqXG4gKiBAcGFyYW0geyp9IHRoaW5nIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gRm9ybURhdGEsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBnZXRHbG9iYWwoKSB7XG4gIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcpIHJldHVybiBnbG9iYWxUaGlzO1xuICBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSByZXR1cm4gc2VsZjtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSByZXR1cm4gd2luZG93O1xuICBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHJldHVybiBnbG9iYWw7XG4gIHJldHVybiB7fTtcbn1cblxuY29uc3QgRyA9IGdldEdsb2JhbCgpO1xuY29uc3QgRm9ybURhdGFDdG9yID0gdHlwZW9mIEcuRm9ybURhdGEgIT09ICd1bmRlZmluZWQnID8gRy5Gb3JtRGF0YSA6IHVuZGVmaW5lZDtcblxuY29uc3QgaXNGb3JtRGF0YSA9ICh0aGluZykgPT4ge1xuICBsZXQga2luZDtcbiAgcmV0dXJuIHRoaW5nICYmIChcbiAgICAoRm9ybURhdGFDdG9yICYmIHRoaW5nIGluc3RhbmNlb2YgRm9ybURhdGFDdG9yKSB8fCAoXG4gICAgICBpc0Z1bmN0aW9uKHRoaW5nLmFwcGVuZCkgJiYgKFxuICAgICAgICAoa2luZCA9IGtpbmRPZih0aGluZykpID09PSAnZm9ybWRhdGEnIHx8XG4gICAgICAgIC8vIGRldGVjdCBmb3JtLWRhdGEgaW5zdGFuY2VcbiAgICAgICAgKGtpbmQgPT09ICdvYmplY3QnICYmIGlzRnVuY3Rpb24odGhpbmcudG9TdHJpbmcpICYmIHRoaW5nLnRvU3RyaW5nKCkgPT09ICdbb2JqZWN0IEZvcm1EYXRhXScpXG4gICAgICApXG4gICAgKVxuICApO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzVVJMU2VhcmNoUGFyYW1zID0ga2luZE9mVGVzdCgnVVJMU2VhcmNoUGFyYW1zJyk7XG5cbmNvbnN0IFtpc1JlYWRhYmxlU3RyZWFtLCBpc1JlcXVlc3QsIGlzUmVzcG9uc2UsIGlzSGVhZGVyc10gPSBbXG4gICdSZWFkYWJsZVN0cmVhbScsXG4gICdSZXF1ZXN0JyxcbiAgJ1Jlc3BvbnNlJyxcbiAgJ0hlYWRlcnMnLFxuXS5tYXAoa2luZE9mVGVzdCk7XG5cbi8qKlxuICogVHJpbSBleGNlc3Mgd2hpdGVzcGFjZSBvZmYgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0ciBUaGUgU3RyaW5nIHRvIHRyaW1cbiAqXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgU3RyaW5nIGZyZWVkIG9mIGV4Y2VzcyB3aGl0ZXNwYWNlXG4gKi9cbmNvbnN0IHRyaW0gPSAoc3RyKSA9PiB7XG4gIHJldHVybiBzdHIudHJpbSA/IHN0ci50cmltKCkgOiBzdHIucmVwbGFjZSgvXltcXHNcXHVGRUZGXFx4QTBdK3xbXFxzXFx1RkVGRlxceEEwXSskL2csICcnKTtcbn07XG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBhbiBBcnJheSBvciBhbiBPYmplY3QgaW52b2tpbmcgYSBmdW5jdGlvbiBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmIGBvYmpgIGlzIGFuIEFycmF5IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwgaW5kZXgsIGFuZCBjb21wbGV0ZSBhcnJheSBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmICdvYmonIGlzIGFuIE9iamVjdCBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGtleSwgYW5kIGNvbXBsZXRlIG9iamVjdCBmb3IgZWFjaCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdHxBcnJheTx1bmtub3duPn0gb2JqIFRoZSBvYmplY3QgdG8gaXRlcmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGNhbGxiYWNrIHRvIGludm9rZSBmb3IgZWFjaCBpdGVtXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5hbGxPd25LZXlzID0gZmFsc2VdXG4gKiBAcmV0dXJucyB7YW55fVxuICovXG5mdW5jdGlvbiBmb3JFYWNoKG9iaiwgZm4sIHsgYWxsT3duS2V5cyA9IGZhbHNlIH0gPSB7fSkge1xuICAvLyBEb24ndCBib3RoZXIgaWYgbm8gdmFsdWUgcHJvdmlkZWRcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBpO1xuICBsZXQgbDtcblxuICAvLyBGb3JjZSBhbiBhcnJheSBpZiBub3QgYWxyZWFkeSBzb21ldGhpbmcgaXRlcmFibGVcbiAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gICAgb2JqID0gW29ial07XG4gIH1cblxuICBpZiAoaXNBcnJheShvYmopKSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIGFycmF5IHZhbHVlc1xuICAgIGZvciAoaSA9IDAsIGwgPSBvYmoubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBmbi5jYWxsKG51bGwsIG9ialtpXSwgaSwgb2JqKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gQnVmZmVyIGNoZWNrXG4gICAgaWYgKGlzQnVmZmVyKG9iaikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJdGVyYXRlIG92ZXIgb2JqZWN0IGtleXNcbiAgICBjb25zdCBrZXlzID0gYWxsT3duS2V5cyA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikgOiBPYmplY3Qua2V5cyhvYmopO1xuICAgIGNvbnN0IGxlbiA9IGtleXMubGVuZ3RoO1xuICAgIGxldCBrZXk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICBmbi5jYWxsKG51bGwsIG9ialtrZXldLCBrZXksIG9iaik7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogRmluZHMgYSBrZXkgaW4gYW4gb2JqZWN0LCBjYXNlLWluc2Vuc2l0aXZlLCByZXR1cm5pbmcgdGhlIGFjdHVhbCBrZXkgbmFtZS5cbiAqIFJldHVybnMgbnVsbCBpZiB0aGUgb2JqZWN0IGlzIGEgQnVmZmVyIG9yIGlmIG5vIG1hdGNoIGlzIGZvdW5kLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogLSBUaGUgb2JqZWN0IHRvIHNlYXJjaC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IHRvIGZpbmQgKGNhc2UtaW5zZW5zaXRpdmUpLlxuICogQHJldHVybnMgez9zdHJpbmd9IFRoZSBhY3R1YWwga2V5IG5hbWUgaWYgZm91bmQsIG90aGVyd2lzZSBudWxsLlxuICovXG5mdW5jdGlvbiBmaW5kS2V5KG9iaiwga2V5KSB7XG4gIGlmIChpc0J1ZmZlcihvYmopKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBrZXkgPSBrZXkudG9Mb3dlckNhc2UoKTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG4gIGxldCBpID0ga2V5cy5sZW5ndGg7XG4gIGxldCBfa2V5O1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIF9rZXkgPSBrZXlzW2ldO1xuICAgIGlmIChrZXkgPT09IF9rZXkudG9Mb3dlckNhc2UoKSkge1xuICAgICAgcmV0dXJuIF9rZXk7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5jb25zdCBfZ2xvYmFsID0gKCgpID0+IHtcbiAgLyplc2xpbnQgbm8tdW5kZWY6MCovXG4gIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcpIHJldHVybiBnbG9iYWxUaGlzO1xuICByZXR1cm4gdHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogZ2xvYmFsO1xufSkoKTtcblxuY29uc3QgaXNDb250ZXh0RGVmaW5lZCA9IChjb250ZXh0KSA9PiAhaXNVbmRlZmluZWQoY29udGV4dCkgJiYgY29udGV4dCAhPT0gX2dsb2JhbDtcblxuLyoqXG4gKiBBY2NlcHRzIHZhcmFyZ3MgZXhwZWN0aW5nIGVhY2ggYXJndW1lbnQgdG8gYmUgYW4gb2JqZWN0LCB0aGVuXG4gKiBpbW11dGFibHkgbWVyZ2VzIHRoZSBwcm9wZXJ0aWVzIG9mIGVhY2ggb2JqZWN0IGFuZCByZXR1cm5zIHJlc3VsdC5cbiAqXG4gKiBXaGVuIG11bHRpcGxlIG9iamVjdHMgY29udGFpbiB0aGUgc2FtZSBrZXkgdGhlIGxhdGVyIG9iamVjdCBpblxuICogdGhlIGFyZ3VtZW50cyBsaXN0IHdpbGwgdGFrZSBwcmVjZWRlbmNlLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIGNvbnN0IHJlc3VsdCA9IG1lcmdlKHtmb286IDEyM30sIHtmb286IDQ1Nn0pO1xuICogY29uc29sZS5sb2cocmVzdWx0LmZvbyk7IC8vIG91dHB1dHMgNDU2XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqMSBPYmplY3QgdG8gbWVyZ2VcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXN1bHQgb2YgYWxsIG1lcmdlIHByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gbWVyZ2UoLyogb2JqMSwgb2JqMiwgb2JqMywgLi4uICovKSB7XG4gIGNvbnN0IHsgY2FzZWxlc3MsIHNraXBVbmRlZmluZWQgfSA9IChpc0NvbnRleHREZWZpbmVkKHRoaXMpICYmIHRoaXMpIHx8IHt9O1xuICBjb25zdCByZXN1bHQgPSB7fTtcbiAgY29uc3QgYXNzaWduVmFsdWUgPSAodmFsLCBrZXkpID0+IHtcbiAgICAvLyBTa2lwIGRhbmdlcm91cyBwcm9wZXJ0eSBuYW1lcyB0byBwcmV2ZW50IHByb3RvdHlwZSBwb2xsdXRpb25cbiAgICBpZiAoa2V5ID09PSAnX19wcm90b19fJyB8fCBrZXkgPT09ICdjb25zdHJ1Y3RvcicgfHwga2V5ID09PSAncHJvdG90eXBlJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRhcmdldEtleSA9IChjYXNlbGVzcyAmJiBmaW5kS2V5KHJlc3VsdCwga2V5KSkgfHwga2V5O1xuICAgIGlmIChpc1BsYWluT2JqZWN0KHJlc3VsdFt0YXJnZXRLZXldKSAmJiBpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gbWVyZ2UocmVzdWx0W3RhcmdldEtleV0sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gbWVyZ2Uoe30sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc0FycmF5KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gdmFsLnNsaWNlKCk7XG4gICAgfSBlbHNlIGlmICghc2tpcFVuZGVmaW5lZCB8fCAhaXNVbmRlZmluZWQodmFsKSkge1xuICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSB2YWw7XG4gICAgfVxuICB9O1xuXG4gIGZvciAobGV0IGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGFyZ3VtZW50c1tpXSAmJiBmb3JFYWNoKGFyZ3VtZW50c1tpXSwgYXNzaWduVmFsdWUpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRXh0ZW5kcyBvYmplY3QgYSBieSBtdXRhYmx5IGFkZGluZyB0byBpdCB0aGUgcHJvcGVydGllcyBvZiBvYmplY3QgYi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYSBUaGUgb2JqZWN0IHRvIGJlIGV4dGVuZGVkXG4gKiBAcGFyYW0ge09iamVjdH0gYiBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tXG4gKiBAcGFyYW0ge09iamVjdH0gdGhpc0FyZyBUaGUgb2JqZWN0IHRvIGJpbmQgZnVuY3Rpb24gdG9cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLmFsbE93bktleXNdXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgcmVzdWx0aW5nIHZhbHVlIG9mIG9iamVjdCBhXG4gKi9cbmNvbnN0IGV4dGVuZCA9IChhLCBiLCB0aGlzQXJnLCB7IGFsbE93bktleXMgfSA9IHt9KSA9PiB7XG4gIGZvckVhY2goXG4gICAgYixcbiAgICAodmFsLCBrZXkpID0+IHtcbiAgICAgIGlmICh0aGlzQXJnICYmIGlzRnVuY3Rpb24odmFsKSkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYSwga2V5LCB7XG4gICAgICAgICAgdmFsdWU6IGJpbmQodmFsLCB0aGlzQXJnKSxcbiAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYSwga2V5LCB7XG4gICAgICAgICAgdmFsdWU6IHZhbCxcbiAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICB7IGFsbE93bktleXMgfVxuICApO1xuICByZXR1cm4gYTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGJ5dGUgb3JkZXIgbWFya2VyLiBUaGlzIGNhdGNoZXMgRUYgQkIgQkYgKHRoZSBVVEYtOCBCT00pXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnQgd2l0aCBCT01cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBjb250ZW50IHZhbHVlIHdpdGhvdXQgQk9NXG4gKi9cbmNvbnN0IHN0cmlwQk9NID0gKGNvbnRlbnQpID0+IHtcbiAgaWYgKGNvbnRlbnQuY2hhckNvZGVBdCgwKSA9PT0gMHhmZWZmKSB7XG4gICAgY29udGVudCA9IGNvbnRlbnQuc2xpY2UoMSk7XG4gIH1cbiAgcmV0dXJuIGNvbnRlbnQ7XG59O1xuXG4vKipcbiAqIEluaGVyaXQgdGhlIHByb3RvdHlwZSBtZXRob2RzIGZyb20gb25lIGNvbnN0cnVjdG9yIGludG8gYW5vdGhlclxuICogQHBhcmFtIHtmdW5jdGlvbn0gY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHN1cGVyQ29uc3RydWN0b3JcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcHJvcHNdXG4gKiBAcGFyYW0ge29iamVjdH0gW2Rlc2NyaXB0b3JzXVxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5jb25zdCBpbmhlcml0cyA9IChjb25zdHJ1Y3Rvciwgc3VwZXJDb25zdHJ1Y3RvciwgcHJvcHMsIGRlc2NyaXB0b3JzKSA9PiB7XG4gIGNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIGRlc2NyaXB0b3JzKTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnN0cnVjdG9yLnByb3RvdHlwZSwgJ2NvbnN0cnVjdG9yJywge1xuICAgIHZhbHVlOiBjb25zdHJ1Y3RvcixcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gIH0pO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29uc3RydWN0b3IsICdzdXBlcicsIHtcbiAgICB2YWx1ZTogc3VwZXJDb25zdHJ1Y3Rvci5wcm90b3R5cGUsXG4gIH0pO1xuICBwcm9wcyAmJiBPYmplY3QuYXNzaWduKGNvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvcHMpO1xufTtcblxuLyoqXG4gKiBSZXNvbHZlIG9iamVjdCB3aXRoIGRlZXAgcHJvdG90eXBlIGNoYWluIHRvIGEgZmxhdCBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2VPYmogc291cmNlIG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IFtkZXN0T2JqXVxuICogQHBhcmFtIHtGdW5jdGlvbnxCb29sZWFufSBbZmlsdGVyXVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3Byb3BGaWx0ZXJdXG4gKlxuICogQHJldHVybnMge09iamVjdH1cbiAqL1xuY29uc3QgdG9GbGF0T2JqZWN0ID0gKHNvdXJjZU9iaiwgZGVzdE9iaiwgZmlsdGVyLCBwcm9wRmlsdGVyKSA9PiB7XG4gIGxldCBwcm9wcztcbiAgbGV0IGk7XG4gIGxldCBwcm9wO1xuICBjb25zdCBtZXJnZWQgPSB7fTtcblxuICBkZXN0T2JqID0gZGVzdE9iaiB8fCB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVxLW51bGwsZXFlcWVxXG4gIGlmIChzb3VyY2VPYmogPT0gbnVsbCkgcmV0dXJuIGRlc3RPYmo7XG5cbiAgZG8ge1xuICAgIHByb3BzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc291cmNlT2JqKTtcbiAgICBpID0gcHJvcHMubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgICBwcm9wID0gcHJvcHNbaV07XG4gICAgICBpZiAoKCFwcm9wRmlsdGVyIHx8IHByb3BGaWx0ZXIocHJvcCwgc291cmNlT2JqLCBkZXN0T2JqKSkgJiYgIW1lcmdlZFtwcm9wXSkge1xuICAgICAgICBkZXN0T2JqW3Byb3BdID0gc291cmNlT2JqW3Byb3BdO1xuICAgICAgICBtZXJnZWRbcHJvcF0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBzb3VyY2VPYmogPSBmaWx0ZXIgIT09IGZhbHNlICYmIGdldFByb3RvdHlwZU9mKHNvdXJjZU9iaik7XG4gIH0gd2hpbGUgKHNvdXJjZU9iaiAmJiAoIWZpbHRlciB8fCBmaWx0ZXIoc291cmNlT2JqLCBkZXN0T2JqKSkgJiYgc291cmNlT2JqICE9PSBPYmplY3QucHJvdG90eXBlKTtcblxuICByZXR1cm4gZGVzdE9iajtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgc3RyaW5nIGVuZHMgd2l0aCB0aGUgY2hhcmFjdGVycyBvZiBhIHNwZWNpZmllZCBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VhcmNoU3RyaW5nXG4gKiBAcGFyYW0ge051bWJlcn0gW3Bvc2l0aW9uPSAwXVxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5jb25zdCBlbmRzV2l0aCA9IChzdHIsIHNlYXJjaFN0cmluZywgcG9zaXRpb24pID0+IHtcbiAgc3RyID0gU3RyaW5nKHN0cik7XG4gIGlmIChwb3NpdGlvbiA9PT0gdW5kZWZpbmVkIHx8IHBvc2l0aW9uID4gc3RyLmxlbmd0aCkge1xuICAgIHBvc2l0aW9uID0gc3RyLmxlbmd0aDtcbiAgfVxuICBwb3NpdGlvbiAtPSBzZWFyY2hTdHJpbmcubGVuZ3RoO1xuICBjb25zdCBsYXN0SW5kZXggPSBzdHIuaW5kZXhPZihzZWFyY2hTdHJpbmcsIHBvc2l0aW9uKTtcbiAgcmV0dXJuIGxhc3RJbmRleCAhPT0gLTEgJiYgbGFzdEluZGV4ID09PSBwb3NpdGlvbjtcbn07XG5cbi8qKlxuICogUmV0dXJucyBuZXcgYXJyYXkgZnJvbSBhcnJheSBsaWtlIG9iamVjdCBvciBudWxsIGlmIGZhaWxlZFxuICpcbiAqIEBwYXJhbSB7Kn0gW3RoaW5nXVxuICpcbiAqIEByZXR1cm5zIHs/QXJyYXl9XG4gKi9cbmNvbnN0IHRvQXJyYXkgPSAodGhpbmcpID0+IHtcbiAgaWYgKCF0aGluZykgcmV0dXJuIG51bGw7XG4gIGlmIChpc0FycmF5KHRoaW5nKSkgcmV0dXJuIHRoaW5nO1xuICBsZXQgaSA9IHRoaW5nLmxlbmd0aDtcbiAgaWYgKCFpc051bWJlcihpKSkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGFyciA9IG5ldyBBcnJheShpKTtcbiAgd2hpbGUgKGktLSA+IDApIHtcbiAgICBhcnJbaV0gPSB0aGluZ1tpXTtcbiAgfVxuICByZXR1cm4gYXJyO1xufTtcblxuLyoqXG4gKiBDaGVja2luZyBpZiB0aGUgVWludDhBcnJheSBleGlzdHMgYW5kIGlmIGl0IGRvZXMsIGl0IHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGNoZWNrcyBpZiB0aGVcbiAqIHRoaW5nIHBhc3NlZCBpbiBpcyBhbiBpbnN0YW5jZSBvZiBVaW50OEFycmF5XG4gKlxuICogQHBhcmFtIHtUeXBlZEFycmF5fVxuICpcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbmNvbnN0IGlzVHlwZWRBcnJheSA9ICgoVHlwZWRBcnJheSkgPT4ge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICByZXR1cm4gKHRoaW5nKSA9PiB7XG4gICAgcmV0dXJuIFR5cGVkQXJyYXkgJiYgdGhpbmcgaW5zdGFuY2VvZiBUeXBlZEFycmF5O1xuICB9O1xufSkodHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnICYmIGdldFByb3RvdHlwZU9mKFVpbnQ4QXJyYXkpKTtcblxuLyoqXG4gKiBGb3IgZWFjaCBlbnRyeSBpbiB0aGUgb2JqZWN0LCBjYWxsIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBrZXkgYW5kIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PGFueSwgYW55Pn0gb2JqIC0gVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAtIFRoZSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIGVudHJ5LlxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5jb25zdCBmb3JFYWNoRW50cnkgPSAob2JqLCBmbikgPT4ge1xuICBjb25zdCBnZW5lcmF0b3IgPSBvYmogJiYgb2JqW2l0ZXJhdG9yXTtcblxuICBjb25zdCBfaXRlcmF0b3IgPSBnZW5lcmF0b3IuY2FsbChvYmopO1xuXG4gIGxldCByZXN1bHQ7XG5cbiAgd2hpbGUgKChyZXN1bHQgPSBfaXRlcmF0b3IubmV4dCgpKSAmJiAhcmVzdWx0LmRvbmUpIHtcbiAgICBjb25zdCBwYWlyID0gcmVzdWx0LnZhbHVlO1xuICAgIGZuLmNhbGwob2JqLCBwYWlyWzBdLCBwYWlyWzFdKTtcbiAgfVxufTtcblxuLyoqXG4gKiBJdCB0YWtlcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBhbmQgYSBzdHJpbmcsIGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIGFsbCB0aGUgbWF0Y2hlc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWdFeHAgLSBUaGUgcmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIGFnYWluc3QuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIC0gVGhlIHN0cmluZyB0byBzZWFyY2guXG4gKlxuICogQHJldHVybnMge0FycmF5PGJvb2xlYW4+fVxuICovXG5jb25zdCBtYXRjaEFsbCA9IChyZWdFeHAsIHN0cikgPT4ge1xuICBsZXQgbWF0Y2hlcztcbiAgY29uc3QgYXJyID0gW107XG5cbiAgd2hpbGUgKChtYXRjaGVzID0gcmVnRXhwLmV4ZWMoc3RyKSkgIT09IG51bGwpIHtcbiAgICBhcnIucHVzaChtYXRjaGVzKTtcbiAgfVxuXG4gIHJldHVybiBhcnI7XG59O1xuXG4vKiBDaGVja2luZyBpZiB0aGUga2luZE9mVGVzdCBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBwYXNzZWQgYW4gSFRNTEZvcm1FbGVtZW50LiAqL1xuY29uc3QgaXNIVE1MRm9ybSA9IGtpbmRPZlRlc3QoJ0hUTUxGb3JtRWxlbWVudCcpO1xuXG5jb25zdCB0b0NhbWVsQ2FzZSA9IChzdHIpID0+IHtcbiAgcmV0dXJuIHN0ci50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xcc10oW2EtelxcZF0pKFxcdyopL2csIGZ1bmN0aW9uIHJlcGxhY2VyKG0sIHAxLCBwMikge1xuICAgIHJldHVybiBwMS50b1VwcGVyQ2FzZSgpICsgcDI7XG4gIH0pO1xufTtcblxuLyogQ3JlYXRpbmcgYSBmdW5jdGlvbiB0aGF0IHdpbGwgY2hlY2sgaWYgYW4gb2JqZWN0IGhhcyBhIHByb3BlcnR5LiAqL1xuY29uc3QgaGFzT3duUHJvcGVydHkgPSAoXG4gICh7IGhhc093blByb3BlcnR5IH0pID0+XG4gIChvYmosIHByb3ApID0+XG4gICAgaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApXG4pKE9iamVjdC5wcm90b3R5cGUpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgUmVnRXhwIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBSZWdFeHAgb2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNSZWdFeHAgPSBraW5kT2ZUZXN0KCdSZWdFeHAnKTtcblxuY29uc3QgcmVkdWNlRGVzY3JpcHRvcnMgPSAob2JqLCByZWR1Y2VyKSA9PiB7XG4gIGNvbnN0IGRlc2NyaXB0b3JzID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob2JqKTtcbiAgY29uc3QgcmVkdWNlZERlc2NyaXB0b3JzID0ge307XG5cbiAgZm9yRWFjaChkZXNjcmlwdG9ycywgKGRlc2NyaXB0b3IsIG5hbWUpID0+IHtcbiAgICBsZXQgcmV0O1xuICAgIGlmICgocmV0ID0gcmVkdWNlcihkZXNjcmlwdG9yLCBuYW1lLCBvYmopKSAhPT0gZmFsc2UpIHtcbiAgICAgIHJlZHVjZWREZXNjcmlwdG9yc1tuYW1lXSA9IHJldCB8fCBkZXNjcmlwdG9yO1xuICAgIH1cbiAgfSk7XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMob2JqLCByZWR1Y2VkRGVzY3JpcHRvcnMpO1xufTtcblxuLyoqXG4gKiBNYWtlcyBhbGwgbWV0aG9kcyByZWFkLW9ubHlcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqL1xuXG5jb25zdCBmcmVlemVNZXRob2RzID0gKG9iaikgPT4ge1xuICByZWR1Y2VEZXNjcmlwdG9ycyhvYmosIChkZXNjcmlwdG9yLCBuYW1lKSA9PiB7XG4gICAgLy8gc2tpcCByZXN0cmljdGVkIHByb3BzIGluIHN0cmljdCBtb2RlXG4gICAgaWYgKGlzRnVuY3Rpb24ob2JqKSAmJiBbJ2FyZ3VtZW50cycsICdjYWxsZXInLCAnY2FsbGVlJ10uaW5kZXhPZihuYW1lKSAhPT0gLTEpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IG9ialtuYW1lXTtcblxuICAgIGlmICghaXNGdW5jdGlvbih2YWx1ZSkpIHJldHVybjtcblxuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGZhbHNlO1xuXG4gICAgaWYgKCd3cml0YWJsZScgaW4gZGVzY3JpcHRvcikge1xuICAgICAgZGVzY3JpcHRvci53cml0YWJsZSA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghZGVzY3JpcHRvci5zZXQpIHtcbiAgICAgIGRlc2NyaXB0b3Iuc2V0ID0gKCkgPT4ge1xuICAgICAgICB0aHJvdyBFcnJvcihcIkNhbiBub3QgcmV3cml0ZSByZWFkLW9ubHkgbWV0aG9kICdcIiArIG5hbWUgKyBcIidcIik7XG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIGFuIGFycmF5IG9yIGEgZGVsaW1pdGVkIHN0cmluZyBpbnRvIGFuIG9iamVjdCBzZXQgd2l0aCB2YWx1ZXMgYXMga2V5cyBhbmQgdHJ1ZSBhcyB2YWx1ZXMuXG4gKiBVc2VmdWwgZm9yIGZhc3QgbWVtYmVyc2hpcCBjaGVja3MuXG4gKlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IGFycmF5T3JTdHJpbmcgLSBUaGUgYXJyYXkgb3Igc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZGVsaW1pdGVyIC0gVGhlIGRlbGltaXRlciB0byB1c2UgaWYgaW5wdXQgaXMgYSBzdHJpbmcuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBBbiBvYmplY3Qgd2l0aCBrZXlzIGZyb20gdGhlIGFycmF5IG9yIHN0cmluZywgdmFsdWVzIHNldCB0byB0cnVlLlxuICovXG5jb25zdCB0b09iamVjdFNldCA9IChhcnJheU9yU3RyaW5nLCBkZWxpbWl0ZXIpID0+IHtcbiAgY29uc3Qgb2JqID0ge307XG5cbiAgY29uc3QgZGVmaW5lID0gKGFycikgPT4ge1xuICAgIGFyci5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgb2JqW3ZhbHVlXSA9IHRydWU7XG4gICAgfSk7XG4gIH07XG5cbiAgaXNBcnJheShhcnJheU9yU3RyaW5nKSA/IGRlZmluZShhcnJheU9yU3RyaW5nKSA6IGRlZmluZShTdHJpbmcoYXJyYXlPclN0cmluZykuc3BsaXQoZGVsaW1pdGVyKSk7XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fTtcblxuY29uc3QgdG9GaW5pdGVOdW1iZXIgPSAodmFsdWUsIGRlZmF1bHRWYWx1ZSkgPT4ge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiBOdW1iZXIuaXNGaW5pdGUoKHZhbHVlID0gK3ZhbHVlKSkgPyB2YWx1ZSA6IGRlZmF1bHRWYWx1ZTtcbn07XG5cbi8qKlxuICogSWYgdGhlIHRoaW5nIGlzIGEgRm9ybURhdGEgb2JqZWN0LCByZXR1cm4gdHJ1ZSwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cbiAqXG4gKiBAcGFyYW0ge3Vua25vd259IHRoaW5nIC0gVGhlIHRoaW5nIHRvIGNoZWNrLlxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc1NwZWNDb21wbGlhbnRGb3JtKHRoaW5nKSB7XG4gIHJldHVybiAhIShcbiAgICB0aGluZyAmJlxuICAgIGlzRnVuY3Rpb24odGhpbmcuYXBwZW5kKSAmJlxuICAgIHRoaW5nW3RvU3RyaW5nVGFnXSA9PT0gJ0Zvcm1EYXRhJyAmJlxuICAgIHRoaW5nW2l0ZXJhdG9yXVxuICApO1xufVxuXG4vKipcbiAqIFJlY3Vyc2l2ZWx5IGNvbnZlcnRzIGFuIG9iamVjdCB0byBhIEpTT04tY29tcGF0aWJsZSBvYmplY3QsIGhhbmRsaW5nIGNpcmN1bGFyIHJlZmVyZW5jZXMgYW5kIEJ1ZmZlcnMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iaiAtIFRoZSBvYmplY3QgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBKU09OLWNvbXBhdGlibGUgb2JqZWN0LlxuICovXG5jb25zdCB0b0pTT05PYmplY3QgPSAob2JqKSA9PiB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IEFycmF5KDEwKTtcblxuICBjb25zdCB2aXNpdCA9IChzb3VyY2UsIGkpID0+IHtcbiAgICBpZiAoaXNPYmplY3Qoc291cmNlKSkge1xuICAgICAgaWYgKHN0YWNrLmluZGV4T2Yoc291cmNlKSA+PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy9CdWZmZXIgY2hlY2tcbiAgICAgIGlmIChpc0J1ZmZlcihzb3VyY2UpKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2U7XG4gICAgICB9XG5cbiAgICAgIGlmICghKCd0b0pTT04nIGluIHNvdXJjZSkpIHtcbiAgICAgICAgc3RhY2tbaV0gPSBzb3VyY2U7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGlzQXJyYXkoc291cmNlKSA/IFtdIDoge307XG5cbiAgICAgICAgZm9yRWFjaChzb3VyY2UsICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVkdWNlZFZhbHVlID0gdmlzaXQodmFsdWUsIGkgKyAxKTtcbiAgICAgICAgICAhaXNVbmRlZmluZWQocmVkdWNlZFZhbHVlKSAmJiAodGFyZ2V0W2tleV0gPSByZWR1Y2VkVmFsdWUpO1xuICAgICAgICB9KTtcblxuICAgICAgICBzdGFja1tpXSA9IHVuZGVmaW5lZDtcblxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzb3VyY2U7XG4gIH07XG5cbiAgcmV0dXJuIHZpc2l0KG9iaiwgMCk7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgaWYgYSB2YWx1ZSBpcyBhbiBhc3luYyBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0geyp9IHRoaW5nIC0gVGhlIHZhbHVlIHRvIHRlc3QuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBhc3luYyBmdW5jdGlvbiwgb3RoZXJ3aXNlIGZhbHNlLlxuICovXG5jb25zdCBpc0FzeW5jRm4gPSBraW5kT2ZUZXN0KCdBc3luY0Z1bmN0aW9uJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiBhIHZhbHVlIGlzIHRoZW5hYmxlIChoYXMgdGhlbiBhbmQgY2F0Y2ggbWV0aG9kcykuXG4gKlxuICogQHBhcmFtIHsqfSB0aGluZyAtIFRoZSB2YWx1ZSB0byB0ZXN0LlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgdGhlbmFibGUsIG90aGVyd2lzZSBmYWxzZS5cbiAqL1xuY29uc3QgaXNUaGVuYWJsZSA9ICh0aGluZykgPT5cbiAgdGhpbmcgJiZcbiAgKGlzT2JqZWN0KHRoaW5nKSB8fCBpc0Z1bmN0aW9uKHRoaW5nKSkgJiZcbiAgaXNGdW5jdGlvbih0aGluZy50aGVuKSAmJlxuICBpc0Z1bmN0aW9uKHRoaW5nLmNhdGNoKTtcblxuLy8gb3JpZ2luYWwgY29kZVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL0RpZ2l0YWxCcmFpbkpTL0F4aW9zUHJvbWlzZS9ibG9iLzE2ZGVhYjEzNzEwZWMwOTc3OTkyMjEzMWYzZmE1OTU0MzIwZjgzYWIvbGliL3V0aWxzLmpzI0wxMS1MMzRcblxuLyoqXG4gKiBQcm92aWRlcyBhIGNyb3NzLXBsYXRmb3JtIHNldEltbWVkaWF0ZSBpbXBsZW1lbnRhdGlvbi5cbiAqIFVzZXMgbmF0aXZlIHNldEltbWVkaWF0ZSBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBmYWxscyBiYWNrIHRvIHBvc3RNZXNzYWdlIG9yIHNldFRpbWVvdXQuXG4gKlxuICogQHBhcmFtIHtib29sZWFufSBzZXRJbW1lZGlhdGVTdXBwb3J0ZWQgLSBXaGV0aGVyIHNldEltbWVkaWF0ZSBpcyBzdXBwb3J0ZWQuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHBvc3RNZXNzYWdlU3VwcG9ydGVkIC0gV2hldGhlciBwb3N0TWVzc2FnZSBpcyBzdXBwb3J0ZWQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgZnVuY3Rpb24gdG8gc2NoZWR1bGUgYSBjYWxsYmFjayBhc3luY2hyb25vdXNseS5cbiAqL1xuY29uc3QgX3NldEltbWVkaWF0ZSA9ICgoc2V0SW1tZWRpYXRlU3VwcG9ydGVkLCBwb3N0TWVzc2FnZVN1cHBvcnRlZCkgPT4ge1xuICBpZiAoc2V0SW1tZWRpYXRlU3VwcG9ydGVkKSB7XG4gICAgcmV0dXJuIHNldEltbWVkaWF0ZTtcbiAgfVxuXG4gIHJldHVybiBwb3N0TWVzc2FnZVN1cHBvcnRlZFxuICAgID8gKCh0b2tlbiwgY2FsbGJhY2tzKSA9PiB7XG4gICAgICAgIF9nbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgICAnbWVzc2FnZScsXG4gICAgICAgICAgKHsgc291cmNlLCBkYXRhIH0pID0+IHtcbiAgICAgICAgICAgIGlmIChzb3VyY2UgPT09IF9nbG9iYWwgJiYgZGF0YSA9PT0gdG9rZW4pIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2tzLmxlbmd0aCAmJiBjYWxsYmFja3Muc2hpZnQoKSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmFsc2VcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gKGNiKSA9PiB7XG4gICAgICAgICAgY2FsbGJhY2tzLnB1c2goY2IpO1xuICAgICAgICAgIF9nbG9iYWwucG9zdE1lc3NhZ2UodG9rZW4sICcqJyk7XG4gICAgICAgIH07XG4gICAgICB9KShgYXhpb3NAJHtNYXRoLnJhbmRvbSgpfWAsIFtdKVxuICAgIDogKGNiKSA9PiBzZXRUaW1lb3V0KGNiKTtcbn0pKHR5cGVvZiBzZXRJbW1lZGlhdGUgPT09ICdmdW5jdGlvbicsIGlzRnVuY3Rpb24oX2dsb2JhbC5wb3N0TWVzc2FnZSkpO1xuXG4vKipcbiAqIFNjaGVkdWxlcyBhIG1pY3JvdGFzayBvciBhc3luY2hyb25vdXMgY2FsbGJhY2sgYXMgc29vbiBhcyBwb3NzaWJsZS5cbiAqIFVzZXMgcXVldWVNaWNyb3Rhc2sgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgZmFsbHMgYmFjayB0byBwcm9jZXNzLm5leHRUaWNrIG9yIF9zZXRJbW1lZGlhdGUuXG4gKlxuICogQHR5cGUge0Z1bmN0aW9ufVxuICovXG5jb25zdCBhc2FwID1cbiAgdHlwZW9mIHF1ZXVlTWljcm90YXNrICE9PSAndW5kZWZpbmVkJ1xuICAgID8gcXVldWVNaWNyb3Rhc2suYmluZChfZ2xvYmFsKVxuICAgIDogKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBwcm9jZXNzLm5leHRUaWNrKSB8fCBfc2V0SW1tZWRpYXRlO1xuXG4vLyAqKioqKioqKioqKioqKioqKioqKipcblxuY29uc3QgaXNJdGVyYWJsZSA9ICh0aGluZykgPT4gdGhpbmcgIT0gbnVsbCAmJiBpc0Z1bmN0aW9uKHRoaW5nW2l0ZXJhdG9yXSk7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgaXNBcnJheSxcbiAgaXNBcnJheUJ1ZmZlcixcbiAgaXNCdWZmZXIsXG4gIGlzRm9ybURhdGEsXG4gIGlzQXJyYXlCdWZmZXJWaWV3LFxuICBpc1N0cmluZyxcbiAgaXNOdW1iZXIsXG4gIGlzQm9vbGVhbixcbiAgaXNPYmplY3QsXG4gIGlzUGxhaW5PYmplY3QsXG4gIGlzRW1wdHlPYmplY3QsXG4gIGlzUmVhZGFibGVTdHJlYW0sXG4gIGlzUmVxdWVzdCxcbiAgaXNSZXNwb25zZSxcbiAgaXNIZWFkZXJzLFxuICBpc1VuZGVmaW5lZCxcbiAgaXNEYXRlLFxuICBpc0ZpbGUsXG4gIGlzUmVhY3ROYXRpdmVCbG9iLFxuICBpc1JlYWN0TmF0aXZlLFxuICBpc0Jsb2IsXG4gIGlzUmVnRXhwLFxuICBpc0Z1bmN0aW9uLFxuICBpc1N0cmVhbSxcbiAgaXNVUkxTZWFyY2hQYXJhbXMsXG4gIGlzVHlwZWRBcnJheSxcbiAgaXNGaWxlTGlzdCxcbiAgZm9yRWFjaCxcbiAgbWVyZ2UsXG4gIGV4dGVuZCxcbiAgdHJpbSxcbiAgc3RyaXBCT00sXG4gIGluaGVyaXRzLFxuICB0b0ZsYXRPYmplY3QsXG4gIGtpbmRPZixcbiAga2luZE9mVGVzdCxcbiAgZW5kc1dpdGgsXG4gIHRvQXJyYXksXG4gIGZvckVhY2hFbnRyeSxcbiAgbWF0Y2hBbGwsXG4gIGlzSFRNTEZvcm0sXG4gIGhhc093blByb3BlcnR5LFxuICBoYXNPd25Qcm9wOiBoYXNPd25Qcm9wZXJ0eSwgLy8gYW4gYWxpYXMgdG8gYXZvaWQgRVNMaW50IG5vLXByb3RvdHlwZS1idWlsdGlucyBkZXRlY3Rpb25cbiAgcmVkdWNlRGVzY3JpcHRvcnMsXG4gIGZyZWV6ZU1ldGhvZHMsXG4gIHRvT2JqZWN0U2V0LFxuICB0b0NhbWVsQ2FzZSxcbiAgbm9vcCxcbiAgdG9GaW5pdGVOdW1iZXIsXG4gIGZpbmRLZXksXG4gIGdsb2JhbDogX2dsb2JhbCxcbiAgaXNDb250ZXh0RGVmaW5lZCxcbiAgaXNTcGVjQ29tcGxpYW50Rm9ybSxcbiAgdG9KU09OT2JqZWN0LFxuICBpc0FzeW5jRm4sXG4gIGlzVGhlbmFibGUsXG4gIHNldEltbWVkaWF0ZTogX3NldEltbWVkaWF0ZSxcbiAgYXNhcCxcbiAgaXNJdGVyYWJsZSxcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5cbmNsYXNzIEF4aW9zRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHN0YXRpYyBmcm9tKGVycm9yLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlLCBjdXN0b21Qcm9wcykge1xuICAgIGNvbnN0IGF4aW9zRXJyb3IgPSBuZXcgQXhpb3NFcnJvcihlcnJvci5tZXNzYWdlLCBjb2RlIHx8IGVycm9yLmNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UpO1xuICAgIGF4aW9zRXJyb3IuY2F1c2UgPSBlcnJvcjtcbiAgICBheGlvc0Vycm9yLm5hbWUgPSBlcnJvci5uYW1lO1xuXG4gICAgLy8gUHJlc2VydmUgc3RhdHVzIGZyb20gdGhlIG9yaWdpbmFsIGVycm9yIGlmIG5vdCBhbHJlYWR5IHNldCBmcm9tIHJlc3BvbnNlXG4gICAgaWYgKGVycm9yLnN0YXR1cyAhPSBudWxsICYmIGF4aW9zRXJyb3Iuc3RhdHVzID09IG51bGwpIHtcbiAgICAgIGF4aW9zRXJyb3Iuc3RhdHVzID0gZXJyb3Iuc3RhdHVzO1xuICAgIH1cblxuICAgIGN1c3RvbVByb3BzICYmIE9iamVjdC5hc3NpZ24oYXhpb3NFcnJvciwgY3VzdG9tUHJvcHMpO1xuICAgIHJldHVybiBheGlvc0Vycm9yO1xuICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gRXJyb3Igd2l0aCB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UsIGNvbmZpZywgZXJyb3IgY29kZSwgcmVxdWVzdCBhbmQgcmVzcG9uc2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2NvZGVdIFRoZSBlcnJvciBjb2RlIChmb3IgZXhhbXBsZSwgJ0VDT05OQUJPUlRFRCcpLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbY29uZmlnXSBUaGUgY29uZmlnLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbcmVxdWVzdF0gVGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtyZXNwb25zZV0gVGhlIHJlc3BvbnNlLlxuICAgICAqXG4gICAgICogQHJldHVybnMge0Vycm9yfSBUaGUgY3JlYXRlZCBlcnJvci5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgIFxuICAgICAgLy8gTWFrZSBtZXNzYWdlIGVudW1lcmFibGUgdG8gbWFpbnRhaW4gYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgICAgLy8gVGhlIG5hdGl2ZSBFcnJvciBjb25zdHJ1Y3RvciBzZXRzIG1lc3NhZ2UgYXMgbm9uLWVudW1lcmFibGUsXG4gICAgICAvLyBidXQgYXhpb3MgPCB2MS4xMy4zIGhhZCBpdCBhcyBlbnVtZXJhYmxlXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ21lc3NhZ2UnLCB7XG4gICAgICAgICAgdmFsdWU6IG1lc3NhZ2UsXG4gICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICB0aGlzLm5hbWUgPSAnQXhpb3NFcnJvcic7XG4gICAgICB0aGlzLmlzQXhpb3NFcnJvciA9IHRydWU7XG4gICAgICBjb2RlICYmICh0aGlzLmNvZGUgPSBjb2RlKTtcbiAgICAgIGNvbmZpZyAmJiAodGhpcy5jb25maWcgPSBjb25maWcpO1xuICAgICAgcmVxdWVzdCAmJiAodGhpcy5yZXF1ZXN0ID0gcmVxdWVzdCk7XG4gICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gICAgICAgICAgdGhpcy5zdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICB9XG4gICAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gU3RhbmRhcmRcbiAgICAgIG1lc3NhZ2U6IHRoaXMubWVzc2FnZSxcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIC8vIE1pY3Jvc29mdFxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICBudW1iZXI6IHRoaXMubnVtYmVyLFxuICAgICAgLy8gTW96aWxsYVxuICAgICAgZmlsZU5hbWU6IHRoaXMuZmlsZU5hbWUsXG4gICAgICBsaW5lTnVtYmVyOiB0aGlzLmxpbmVOdW1iZXIsXG4gICAgICBjb2x1bW5OdW1iZXI6IHRoaXMuY29sdW1uTnVtYmVyLFxuICAgICAgc3RhY2s6IHRoaXMuc3RhY2ssXG4gICAgICAvLyBBeGlvc1xuICAgICAgY29uZmlnOiB1dGlscy50b0pTT05PYmplY3QodGhpcy5jb25maWcpLFxuICAgICAgY29kZTogdGhpcy5jb2RlLFxuICAgICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICB9O1xuICB9XG59XG5cbi8vIFRoaXMgY2FuIGJlIGNoYW5nZWQgdG8gc3RhdGljIHByb3BlcnRpZXMgYXMgc29vbiBhcyB0aGUgcGFyc2VyIG9wdGlvbnMgaW4gLmVzbGludC5janMgYXJlIHVwZGF0ZWQuXG5BeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OX1ZBTFVFID0gJ0VSUl9CQURfT1BUSU9OX1ZBTFVFJztcbkF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT04gPSAnRVJSX0JBRF9PUFRJT04nO1xuQXhpb3NFcnJvci5FQ09OTkFCT1JURUQgPSAnRUNPTk5BQk9SVEVEJztcbkF4aW9zRXJyb3IuRVRJTUVET1VUID0gJ0VUSU1FRE9VVCc7XG5BeGlvc0Vycm9yLkVSUl9ORVRXT1JLID0gJ0VSUl9ORVRXT1JLJztcbkF4aW9zRXJyb3IuRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUyA9ICdFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTJztcbkF4aW9zRXJyb3IuRVJSX0RFUFJFQ0FURUQgPSAnRVJSX0RFUFJFQ0FURUQnO1xuQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFID0gJ0VSUl9CQURfUkVTUE9OU0UnO1xuQXhpb3NFcnJvci5FUlJfQkFEX1JFUVVFU1QgPSAnRVJSX0JBRF9SRVFVRVNUJztcbkF4aW9zRXJyb3IuRVJSX0NBTkNFTEVEID0gJ0VSUl9DQU5DRUxFRCc7XG5BeGlvc0Vycm9yLkVSUl9OT1RfU1VQUE9SVCA9ICdFUlJfTk9UX1NVUFBPUlQnO1xuQXhpb3NFcnJvci5FUlJfSU5WQUxJRF9VUkwgPSAnRVJSX0lOVkFMSURfVVJMJztcblxuZXhwb3J0IGRlZmF1bHQgQXhpb3NFcnJvcjtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4uL2NvcmUvQXhpb3NFcnJvci5qcyc7XG4vLyB0ZW1wb3JhcnkgaG90Zml4IHRvIGF2b2lkIGNpcmN1bGFyIHJlZmVyZW5jZXMgdW50aWwgQXhpb3NVUkxTZWFyY2hQYXJhbXMgaXMgcmVmYWN0b3JlZFxuaW1wb3J0IFBsYXRmb3JtRm9ybURhdGEgZnJvbSAnLi4vcGxhdGZvcm0vbm9kZS9jbGFzc2VzL0Zvcm1EYXRhLmpzJztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIHRoZSBnaXZlbiB0aGluZyBpcyBhIGFycmF5IG9yIGpzIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGhpbmcgLSBUaGUgb2JqZWN0IG9yIGFycmF5IHRvIGJlIHZpc2l0ZWQuXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzVmlzaXRhYmxlKHRoaW5nKSB7XG4gIHJldHVybiB1dGlscy5pc1BsYWluT2JqZWN0KHRoaW5nKSB8fCB1dGlscy5pc0FycmF5KHRoaW5nKTtcbn1cblxuLyoqXG4gKiBJdCByZW1vdmVzIHRoZSBicmFja2V0cyBmcm9tIHRoZSBlbmQgb2YgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgcGFyYW1ldGVyLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSBrZXkgd2l0aG91dCB0aGUgYnJhY2tldHMuXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUJyYWNrZXRzKGtleSkge1xuICByZXR1cm4gdXRpbHMuZW5kc1dpdGgoa2V5LCAnW10nKSA/IGtleS5zbGljZSgwLCAtMikgOiBrZXk7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBwYXRoLCBhIGtleSwgYW5kIGEgYm9vbGVhbiwgYW5kIHJldHVybnMgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIFRoZSBwYXRoIHRvIHRoZSBjdXJyZW50IGtleS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBjdXJyZW50IG9iamVjdCBiZWluZyBpdGVyYXRlZCBvdmVyLlxuICogQHBhcmFtIHtzdHJpbmd9IGRvdHMgLSBJZiB0cnVlLCB0aGUga2V5IHdpbGwgYmUgcmVuZGVyZWQgd2l0aCBkb3RzIGluc3RlYWQgb2YgYnJhY2tldHMuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIHBhdGggdG8gdGhlIGN1cnJlbnQga2V5LlxuICovXG5mdW5jdGlvbiByZW5kZXJLZXkocGF0aCwga2V5LCBkb3RzKSB7XG4gIGlmICghcGF0aCkgcmV0dXJuIGtleTtcbiAgcmV0dXJuIHBhdGhcbiAgICAuY29uY2F0KGtleSlcbiAgICAubWFwKGZ1bmN0aW9uIGVhY2godG9rZW4sIGkpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgdG9rZW4gPSByZW1vdmVCcmFja2V0cyh0b2tlbik7XG4gICAgICByZXR1cm4gIWRvdHMgJiYgaSA/ICdbJyArIHRva2VuICsgJ10nIDogdG9rZW47XG4gICAgfSlcbiAgICAuam9pbihkb3RzID8gJy4nIDogJycpO1xufVxuXG4vKipcbiAqIElmIHRoZSBhcnJheSBpcyBhbiBhcnJheSBhbmQgbm9uZSBvZiBpdHMgZWxlbWVudHMgYXJlIHZpc2l0YWJsZSwgdGhlbiBpdCdzIGEgZmxhdCBhcnJheS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PGFueT59IGFyciAtIFRoZSBhcnJheSB0byBjaGVja1xuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0ZsYXRBcnJheShhcnIpIHtcbiAgcmV0dXJuIHV0aWxzLmlzQXJyYXkoYXJyKSAmJiAhYXJyLnNvbWUoaXNWaXNpdGFibGUpO1xufVxuXG5jb25zdCBwcmVkaWNhdGVzID0gdXRpbHMudG9GbGF0T2JqZWN0KHV0aWxzLCB7fSwgbnVsbCwgZnVuY3Rpb24gZmlsdGVyKHByb3ApIHtcbiAgcmV0dXJuIC9eaXNbQS1aXS8udGVzdChwcm9wKTtcbn0pO1xuXG4vKipcbiAqIENvbnZlcnQgYSBkYXRhIG9iamVjdCB0byBGb3JtRGF0YVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEBwYXJhbSB7P09iamVjdH0gW2Zvcm1EYXRhXVxuICogQHBhcmFtIHs/T2JqZWN0fSBbb3B0aW9uc11cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLnZpc2l0b3JdXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLm1ldGFUb2tlbnMgPSB0cnVlXVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5kb3RzID0gZmFsc2VdXG4gKiBAcGFyYW0gez9Cb29sZWFufSBbb3B0aW9ucy5pbmRleGVzID0gZmFsc2VdXG4gKlxuICogQHJldHVybnMge09iamVjdH1cbiAqKi9cblxuLyoqXG4gKiBJdCBjb252ZXJ0cyBhbiBvYmplY3QgaW50byBhIEZvcm1EYXRhIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PGFueSwgYW55Pn0gb2JqIC0gVGhlIG9iamVjdCB0byBjb252ZXJ0IHRvIGZvcm0gZGF0YS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtRGF0YSAtIFRoZSBGb3JtRGF0YSBvYmplY3QgdG8gYXBwZW5kIHRvLlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBhbnk+fSBvcHRpb25zXG4gKlxuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24gdG9Gb3JtRGF0YShvYmosIGZvcm1EYXRhLCBvcHRpb25zKSB7XG4gIGlmICghdXRpbHMuaXNPYmplY3Qob2JqKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3RhcmdldCBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIGZvcm1EYXRhID0gZm9ybURhdGEgfHwgbmV3IChQbGF0Zm9ybUZvcm1EYXRhIHx8IEZvcm1EYXRhKSgpO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBvcHRpb25zID0gdXRpbHMudG9GbGF0T2JqZWN0KFxuICAgIG9wdGlvbnMsXG4gICAge1xuICAgICAgbWV0YVRva2VuczogdHJ1ZSxcbiAgICAgIGRvdHM6IGZhbHNlLFxuICAgICAgaW5kZXhlczogZmFsc2UsXG4gICAgfSxcbiAgICBmYWxzZSxcbiAgICBmdW5jdGlvbiBkZWZpbmVkKG9wdGlvbiwgc291cmNlKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgICAgIHJldHVybiAhdXRpbHMuaXNVbmRlZmluZWQoc291cmNlW29wdGlvbl0pO1xuICAgIH1cbiAgKTtcblxuICBjb25zdCBtZXRhVG9rZW5zID0gb3B0aW9ucy5tZXRhVG9rZW5zO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgY29uc3QgdmlzaXRvciA9IG9wdGlvbnMudmlzaXRvciB8fCBkZWZhdWx0VmlzaXRvcjtcbiAgY29uc3QgZG90cyA9IG9wdGlvbnMuZG90cztcbiAgY29uc3QgaW5kZXhlcyA9IG9wdGlvbnMuaW5kZXhlcztcbiAgY29uc3QgX0Jsb2IgPSBvcHRpb25zLkJsb2IgfHwgKHR5cGVvZiBCbG9iICE9PSAndW5kZWZpbmVkJyAmJiBCbG9iKTtcbiAgY29uc3QgdXNlQmxvYiA9IF9CbG9iICYmIHV0aWxzLmlzU3BlY0NvbXBsaWFudEZvcm0oZm9ybURhdGEpO1xuXG4gIGlmICghdXRpbHMuaXNGdW5jdGlvbih2aXNpdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3Zpc2l0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cblxuICBmdW5jdGlvbiBjb252ZXJ0VmFsdWUodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHJldHVybiAnJztcblxuICAgIGlmICh1dGlscy5pc0RhdGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWUudG9JU09TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXNCb29sZWFuKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgaWYgKCF1c2VCbG9iICYmIHV0aWxzLmlzQmxvYih2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdCbG9iIGlzIG5vdCBzdXBwb3J0ZWQuIFVzZSBhIEJ1ZmZlciBpbnN0ZWFkLicpO1xuICAgIH1cblxuICAgIGlmICh1dGlscy5pc0FycmF5QnVmZmVyKHZhbHVlKSB8fCB1dGlscy5pc1R5cGVkQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdXNlQmxvYiAmJiB0eXBlb2YgQmxvYiA9PT0gJ2Z1bmN0aW9uJyA/IG5ldyBCbG9iKFt2YWx1ZV0pIDogQnVmZmVyLmZyb20odmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZhdWx0IHZpc2l0b3IuXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd8TnVtYmVyfSBrZXlcbiAgICogQHBhcmFtIHtBcnJheTxTdHJpbmd8TnVtYmVyPn0gcGF0aFxuICAgKiBAdGhpcyB7Rm9ybURhdGF9XG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSByZXR1cm4gdHJ1ZSB0byB2aXNpdCB0aGUgZWFjaCBwcm9wIG9mIHRoZSB2YWx1ZSByZWN1cnNpdmVseVxuICAgKi9cbiAgZnVuY3Rpb24gZGVmYXVsdFZpc2l0b3IodmFsdWUsIGtleSwgcGF0aCkge1xuICAgIGxldCBhcnIgPSB2YWx1ZTtcblxuICAgIGlmICh1dGlscy5pc1JlYWN0TmF0aXZlKGZvcm1EYXRhKSAmJiB1dGlscy5pc1JlYWN0TmF0aXZlQmxvYih2YWx1ZSkpIHtcbiAgICAgIGZvcm1EYXRhLmFwcGVuZChyZW5kZXJLZXkocGF0aCwga2V5LCBkb3RzKSwgY29udmVydFZhbHVlKHZhbHVlKSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlICYmICFwYXRoICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmICh1dGlscy5lbmRzV2l0aChrZXksICd7fScpKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBrZXkgPSBtZXRhVG9rZW5zID8ga2V5IDoga2V5LnNsaWNlKDAsIC0yKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIHZhbHVlID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgKHV0aWxzLmlzQXJyYXkodmFsdWUpICYmIGlzRmxhdEFycmF5KHZhbHVlKSkgfHxcbiAgICAgICAgKCh1dGlscy5pc0ZpbGVMaXN0KHZhbHVlKSB8fCB1dGlscy5lbmRzV2l0aChrZXksICdbXScpKSAmJiAoYXJyID0gdXRpbHMudG9BcnJheSh2YWx1ZSkpKVxuICAgICAgKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBrZXkgPSByZW1vdmVCcmFja2V0cyhrZXkpO1xuXG4gICAgICAgIGFyci5mb3JFYWNoKGZ1bmN0aW9uIGVhY2goZWwsIGluZGV4KSB7XG4gICAgICAgICAgISh1dGlscy5pc1VuZGVmaW5lZChlbCkgfHwgZWwgPT09IG51bGwpICYmXG4gICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoXG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXN0ZWQtdGVybmFyeVxuICAgICAgICAgICAgICBpbmRleGVzID09PSB0cnVlXG4gICAgICAgICAgICAgICAgPyByZW5kZXJLZXkoW2tleV0sIGluZGV4LCBkb3RzKVxuICAgICAgICAgICAgICAgIDogaW5kZXhlcyA9PT0gbnVsbFxuICAgICAgICAgICAgICAgICAgPyBrZXlcbiAgICAgICAgICAgICAgICAgIDoga2V5ICsgJ1tdJyxcbiAgICAgICAgICAgICAgY29udmVydFZhbHVlKGVsKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNWaXNpdGFibGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQocmVuZGVyS2V5KHBhdGgsIGtleSwgZG90cyksIGNvbnZlcnRWYWx1ZSh2YWx1ZSkpO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3Qgc3RhY2sgPSBbXTtcblxuICBjb25zdCBleHBvc2VkSGVscGVycyA9IE9iamVjdC5hc3NpZ24ocHJlZGljYXRlcywge1xuICAgIGRlZmF1bHRWaXNpdG9yLFxuICAgIGNvbnZlcnRWYWx1ZSxcbiAgICBpc1Zpc2l0YWJsZSxcbiAgfSk7XG5cbiAgZnVuY3Rpb24gYnVpbGQodmFsdWUsIHBhdGgpIHtcbiAgICBpZiAodXRpbHMuaXNVbmRlZmluZWQodmFsdWUpKSByZXR1cm47XG5cbiAgICBpZiAoc3RhY2suaW5kZXhPZih2YWx1ZSkgIT09IC0xKSB7XG4gICAgICB0aHJvdyBFcnJvcignQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICcgKyBwYXRoLmpvaW4oJy4nKSk7XG4gICAgfVxuXG4gICAgc3RhY2sucHVzaCh2YWx1ZSk7XG5cbiAgICB1dGlscy5mb3JFYWNoKHZhbHVlLCBmdW5jdGlvbiBlYWNoKGVsLCBrZXkpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9XG4gICAgICAgICEodXRpbHMuaXNVbmRlZmluZWQoZWwpIHx8IGVsID09PSBudWxsKSAmJlxuICAgICAgICB2aXNpdG9yLmNhbGwoZm9ybURhdGEsIGVsLCB1dGlscy5pc1N0cmluZyhrZXkpID8ga2V5LnRyaW0oKSA6IGtleSwgcGF0aCwgZXhwb3NlZEhlbHBlcnMpO1xuXG4gICAgICBpZiAocmVzdWx0ID09PSB0cnVlKSB7XG4gICAgICAgIGJ1aWxkKGVsLCBwYXRoID8gcGF0aC5jb25jYXQoa2V5KSA6IFtrZXldKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHN0YWNrLnBvcCgpO1xuICB9XG5cbiAgaWYgKCF1dGlscy5pc09iamVjdChvYmopKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZGF0YSBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICB9XG5cbiAgYnVpbGQob2JqKTtcblxuICByZXR1cm4gZm9ybURhdGE7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHRvRm9ybURhdGE7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB0b0Zvcm1EYXRhIGZyb20gJy4vdG9Gb3JtRGF0YS5qcyc7XG5cbi8qKlxuICogSXQgZW5jb2RlcyBhIHN0cmluZyBieSByZXBsYWNpbmcgYWxsIGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90IGluIHRoZSB1bnJlc2VydmVkIHNldCB3aXRoXG4gKiB0aGVpciBwZXJjZW50LWVuY29kZWQgZXF1aXZhbGVudHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIC0gVGhlIHN0cmluZyB0byBlbmNvZGUuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGVuY29kZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBlbmNvZGUoc3RyKSB7XG4gIGNvbnN0IGNoYXJNYXAgPSB7XG4gICAgJyEnOiAnJTIxJyxcbiAgICBcIidcIjogJyUyNycsXG4gICAgJygnOiAnJTI4JyxcbiAgICAnKSc6ICclMjknLFxuICAgICd+JzogJyU3RScsXG4gICAgJyUyMCc6ICcrJyxcbiAgICAnJTAwJzogJ1xceDAwJyxcbiAgfTtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHIpLnJlcGxhY2UoL1shJygpfl18JTIwfCUwMC9nLCBmdW5jdGlvbiByZXBsYWNlcihtYXRjaCkge1xuICAgIHJldHVybiBjaGFyTWFwW21hdGNoXTtcbiAgfSk7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBwYXJhbXMgb2JqZWN0IGFuZCBjb252ZXJ0cyBpdCB0byBhIEZvcm1EYXRhIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgYW55Pn0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgdG8gYmUgY29udmVydGVkIHRvIGEgRm9ybURhdGEgb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBhbnk+fSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgb2JqZWN0IHBhc3NlZCB0byB0aGUgQXhpb3MgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIEF4aW9zVVJMU2VhcmNoUGFyYW1zKHBhcmFtcywgb3B0aW9ucykge1xuICB0aGlzLl9wYWlycyA9IFtdO1xuXG4gIHBhcmFtcyAmJiB0b0Zvcm1EYXRhKHBhcmFtcywgdGhpcywgb3B0aW9ucyk7XG59XG5cbmNvbnN0IHByb3RvdHlwZSA9IEF4aW9zVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZTtcblxucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uIGFwcGVuZChuYW1lLCB2YWx1ZSkge1xuICB0aGlzLl9wYWlycy5wdXNoKFtuYW1lLCB2YWx1ZV0pO1xufTtcblxucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoZW5jb2Rlcikge1xuICBjb25zdCBfZW5jb2RlID0gZW5jb2RlclxuICAgID8gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBlbmNvZGVyLmNhbGwodGhpcywgdmFsdWUsIGVuY29kZSk7XG4gICAgICB9XG4gICAgOiBlbmNvZGU7XG5cbiAgcmV0dXJuIHRoaXMuX3BhaXJzXG4gICAgLm1hcChmdW5jdGlvbiBlYWNoKHBhaXIpIHtcbiAgICAgIHJldHVybiBfZW5jb2RlKHBhaXJbMF0pICsgJz0nICsgX2VuY29kZShwYWlyWzFdKTtcbiAgICB9LCAnJylcbiAgICAuam9pbignJicpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgQXhpb3NVUkxTZWFyY2hQYXJhbXM7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgQXhpb3NVUkxTZWFyY2hQYXJhbXMgZnJvbSAnLi4vaGVscGVycy9BeGlvc1VSTFNlYXJjaFBhcmFtcy5qcyc7XG5cbi8qKlxuICogSXQgcmVwbGFjZXMgVVJMLWVuY29kZWQgZm9ybXMgb2YgYDpgLCBgJGAsIGAsYCwgYW5kIHNwYWNlcyB3aXRoXG4gKiB0aGVpciBwbGFpbiBjb3VudGVycGFydHMgKGA6YCwgYCRgLCBgLGAsIGArYCkuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbCBUaGUgdmFsdWUgdG8gYmUgZW5jb2RlZC5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZW5jb2RlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZW5jb2RlKHZhbCkge1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHZhbClcbiAgICAucmVwbGFjZSgvJTNBL2dpLCAnOicpXG4gICAgLnJlcGxhY2UoLyUyNC9nLCAnJCcpXG4gICAgLnJlcGxhY2UoLyUyQy9naSwgJywnKVxuICAgIC5yZXBsYWNlKC8lMjAvZywgJysnKTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIFVSTCBieSBhcHBlbmRpbmcgcGFyYW1zIHRvIHRoZSBlbmRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBiYXNlIG9mIHRoZSB1cmwgKGUuZy4sIGh0dHA6Ly93d3cuZ29vZ2xlLmNvbSlcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcGFyYW1zXSBUaGUgcGFyYW1zIHRvIGJlIGFwcGVuZGVkXG4gKiBAcGFyYW0gez8ob2JqZWN0fEZ1bmN0aW9uKX0gb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgdXJsXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkVVJMKHVybCwgcGFyYW1zLCBvcHRpb25zKSB7XG4gIGlmICghcGFyYW1zKSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuXG4gIGNvbnN0IF9lbmNvZGUgPSAob3B0aW9ucyAmJiBvcHRpb25zLmVuY29kZSkgfHwgZW5jb2RlO1xuXG4gIGNvbnN0IF9vcHRpb25zID0gdXRpbHMuaXNGdW5jdGlvbihvcHRpb25zKVxuICAgID8ge1xuICAgICAgICBzZXJpYWxpemU6IG9wdGlvbnMsXG4gICAgICB9XG4gICAgOiBvcHRpb25zO1xuXG4gIGNvbnN0IHNlcmlhbGl6ZUZuID0gX29wdGlvbnMgJiYgX29wdGlvbnMuc2VyaWFsaXplO1xuXG4gIGxldCBzZXJpYWxpemVkUGFyYW1zO1xuXG4gIGlmIChzZXJpYWxpemVGbikge1xuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSBzZXJpYWxpemVGbihwYXJhbXMsIF9vcHRpb25zKTtcbiAgfSBlbHNlIHtcbiAgICBzZXJpYWxpemVkUGFyYW1zID0gdXRpbHMuaXNVUkxTZWFyY2hQYXJhbXMocGFyYW1zKVxuICAgICAgPyBwYXJhbXMudG9TdHJpbmcoKVxuICAgICAgOiBuZXcgQXhpb3NVUkxTZWFyY2hQYXJhbXMocGFyYW1zLCBfb3B0aW9ucykudG9TdHJpbmcoX2VuY29kZSk7XG4gIH1cblxuICBpZiAoc2VyaWFsaXplZFBhcmFtcykge1xuICAgIGNvbnN0IGhhc2htYXJrSW5kZXggPSB1cmwuaW5kZXhPZignIycpO1xuXG4gICAgaWYgKGhhc2htYXJrSW5kZXggIT09IC0xKSB7XG4gICAgICB1cmwgPSB1cmwuc2xpY2UoMCwgaGFzaG1hcmtJbmRleCk7XG4gICAgfVxuICAgIHVybCArPSAodXJsLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJicpICsgc2VyaWFsaXplZFBhcmFtcztcbiAgfVxuXG4gIHJldHVybiB1cmw7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5cbmNsYXNzIEludGVyY2VwdG9yTWFuYWdlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaGFuZGxlcnMgPSBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBuZXcgaW50ZXJjZXB0b3IgdG8gdGhlIHN0YWNrXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bGZpbGxlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGB0aGVuYCBmb3IgYSBgUHJvbWlzZWBcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0ZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgcmVqZWN0YCBmb3IgYSBgUHJvbWlzZWBcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgVGhlIG9wdGlvbnMgZm9yIHRoZSBpbnRlcmNlcHRvciwgc3luY2hyb25vdXMgYW5kIHJ1bldoZW5cbiAgICpcbiAgICogQHJldHVybiB7TnVtYmVyfSBBbiBJRCB1c2VkIHRvIHJlbW92ZSBpbnRlcmNlcHRvciBsYXRlclxuICAgKi9cbiAgdXNlKGZ1bGZpbGxlZCwgcmVqZWN0ZWQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLmhhbmRsZXJzLnB1c2goe1xuICAgICAgZnVsZmlsbGVkLFxuICAgICAgcmVqZWN0ZWQsXG4gICAgICBzeW5jaHJvbm91czogb3B0aW9ucyA/IG9wdGlvbnMuc3luY2hyb25vdXMgOiBmYWxzZSxcbiAgICAgIHJ1bldoZW46IG9wdGlvbnMgPyBvcHRpb25zLnJ1bldoZW4gOiBudWxsLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXJzLmxlbmd0aCAtIDE7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFuIGludGVyY2VwdG9yIGZyb20gdGhlIHN0YWNrXG4gICAqXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBpZCBUaGUgSUQgdGhhdCB3YXMgcmV0dXJuZWQgYnkgYHVzZWBcbiAgICpcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBlamVjdChpZCkge1xuICAgIGlmICh0aGlzLmhhbmRsZXJzW2lkXSkge1xuICAgICAgdGhpcy5oYW5kbGVyc1tpZF0gPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciBhbGwgaW50ZXJjZXB0b3JzIGZyb20gdGhlIHN0YWNrXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgY2xlYXIoKSB7XG4gICAgaWYgKHRoaXMuaGFuZGxlcnMpIHtcbiAgICAgIHRoaXMuaGFuZGxlcnMgPSBbXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSXRlcmF0ZSBvdmVyIGFsbCB0aGUgcmVnaXN0ZXJlZCBpbnRlcmNlcHRvcnNcbiAgICpcbiAgICogVGhpcyBtZXRob2QgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3Igc2tpcHBpbmcgb3ZlciBhbnlcbiAgICogaW50ZXJjZXB0b3JzIHRoYXQgbWF5IGhhdmUgYmVjb21lIGBudWxsYCBjYWxsaW5nIGBlamVjdGAuXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIGludGVyY2VwdG9yXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZm9yRWFjaChmbikge1xuICAgIHV0aWxzLmZvckVhY2godGhpcy5oYW5kbGVycywgZnVuY3Rpb24gZm9yRWFjaEhhbmRsZXIoaCkge1xuICAgICAgaWYgKGggIT09IG51bGwpIHtcbiAgICAgICAgZm4oaCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSW50ZXJjZXB0b3JNYW5hZ2VyO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHNpbGVudEpTT05QYXJzaW5nOiB0cnVlLFxuICBmb3JjZWRKU09OUGFyc2luZzogdHJ1ZSxcbiAgY2xhcmlmeVRpbWVvdXRFcnJvcjogZmFsc2UsXG4gIGxlZ2FjeUludGVyY2VwdG9yUmVxUmVzT3JkZXJpbmc6IHRydWUsXG59O1xuIiwiaW1wb3J0IFVSTFNlYXJjaFBhcmFtcyBmcm9tICcuL2NsYXNzZXMvVVJMU2VhcmNoUGFyYW1zLmpzJztcbmltcG9ydCBGb3JtRGF0YSBmcm9tICcuL2NsYXNzZXMvRm9ybURhdGEuanMnO1xuaW1wb3J0IEJsb2IgZnJvbSAnLi9jbGFzc2VzL0Jsb2IuanMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGlzQnJvd3NlcjogdHJ1ZSxcbiAgY2xhc3Nlczoge1xuICAgIFVSTFNlYXJjaFBhcmFtcyxcbiAgICBGb3JtRGF0YSxcbiAgICBCbG9iLFxuICB9LFxuICBwcm90b2NvbHM6IFsnaHR0cCcsICdodHRwcycsICdmaWxlJywgJ2Jsb2InLCAndXJsJywgJ2RhdGEnXSxcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBBeGlvc1VSTFNlYXJjaFBhcmFtcyBmcm9tICcuLi8uLi8uLi9oZWxwZXJzL0F4aW9zVVJMU2VhcmNoUGFyYW1zLmpzJztcbmV4cG9ydCBkZWZhdWx0IHR5cGVvZiBVUkxTZWFyY2hQYXJhbXMgIT09ICd1bmRlZmluZWQnID8gVVJMU2VhcmNoUGFyYW1zIDogQXhpb3NVUkxTZWFyY2hQYXJhbXM7XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IHR5cGVvZiBGb3JtRGF0YSAhPT0gJ3VuZGVmaW5lZCcgPyBGb3JtRGF0YSA6IG51bGw7XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IHR5cGVvZiBCbG9iICE9PSAndW5kZWZpbmVkJyA/IEJsb2IgOiBudWxsO1xuIiwiY29uc3QgaGFzQnJvd3NlckVudiA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCc7XG5cbmNvbnN0IF9uYXZpZ2F0b3IgPSAodHlwZW9mIG5hdmlnYXRvciA9PT0gJ29iamVjdCcgJiYgbmF2aWdhdG9yKSB8fCB1bmRlZmluZWQ7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50XG4gKlxuICogVGhpcyBhbGxvd3MgYXhpb3MgdG8gcnVuIGluIGEgd2ViIHdvcmtlciwgYW5kIHJlYWN0LW5hdGl2ZS5cbiAqIEJvdGggZW52aXJvbm1lbnRzIHN1cHBvcnQgWE1MSHR0cFJlcXVlc3QsIGJ1dCBub3QgZnVsbHkgc3RhbmRhcmQgZ2xvYmFscy5cbiAqXG4gKiB3ZWIgd29ya2VyczpcbiAqICB0eXBlb2Ygd2luZG93IC0+IHVuZGVmaW5lZFxuICogIHR5cGVvZiBkb2N1bWVudCAtPiB1bmRlZmluZWRcbiAqXG4gKiByZWFjdC1uYXRpdmU6XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ1JlYWN0TmF0aXZlJ1xuICogbmF0aXZlc2NyaXB0XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ05hdGl2ZVNjcmlwdCcgb3IgJ05TJ1xuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5jb25zdCBoYXNTdGFuZGFyZEJyb3dzZXJFbnYgPVxuICBoYXNCcm93c2VyRW52ICYmXG4gICghX25hdmlnYXRvciB8fCBbJ1JlYWN0TmF0aXZlJywgJ05hdGl2ZVNjcmlwdCcsICdOUyddLmluZGV4T2YoX25hdmlnYXRvci5wcm9kdWN0KSA8IDApO1xuXG4vKipcbiAqIERldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciB3ZWJXb3JrZXIgZW52aXJvbm1lbnRcbiAqXG4gKiBBbHRob3VnaCB0aGUgYGlzU3RhbmRhcmRCcm93c2VyRW52YCBtZXRob2QgaW5kaWNhdGVzIHRoYXRcbiAqIGBhbGxvd3MgYXhpb3MgdG8gcnVuIGluIGEgd2ViIHdvcmtlcmAsIHRoZSBXZWJXb3JrZXIgd2lsbCBzdGlsbCBiZVxuICogZmlsdGVyZWQgb3V0IGR1ZSB0byBpdHMganVkZ21lbnQgc3RhbmRhcmRcbiAqIGB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnYC5cbiAqIFRoaXMgbGVhZHMgdG8gYSBwcm9ibGVtIHdoZW4gYXhpb3MgcG9zdCBgRm9ybURhdGFgIGluIHdlYldvcmtlclxuICovXG5jb25zdCBoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYgPSAoKCkgPT4ge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgICBzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUgJiZcbiAgICB0eXBlb2Ygc2VsZi5pbXBvcnRTY3JpcHRzID09PSAnZnVuY3Rpb24nXG4gICk7XG59KSgpO1xuXG5jb25zdCBvcmlnaW4gPSAoaGFzQnJvd3NlckVudiAmJiB3aW5kb3cubG9jYXRpb24uaHJlZikgfHwgJ2h0dHA6Ly9sb2NhbGhvc3QnO1xuXG5leHBvcnQge1xuICBoYXNCcm93c2VyRW52LFxuICBoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYsXG4gIGhhc1N0YW5kYXJkQnJvd3NlckVudixcbiAgX25hdmlnYXRvciBhcyBuYXZpZ2F0b3IsXG4gIG9yaWdpbixcbn07XG4iLCJpbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi9ub2RlL2luZGV4LmpzJztcbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gJy4vY29tbW9uL3V0aWxzLmpzJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICAuLi51dGlscyxcbiAgLi4ucGxhdGZvcm0sXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuXG4vKipcbiAqIEl0IHRha2VzIGEgc3RyaW5nIGxpa2UgYGZvb1t4XVt5XVt6XWAgYW5kIHJldHVybnMgYW4gYXJyYXkgbGlrZSBgWydmb28nLCAneCcsICd5JywgJ3onXVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBzdHJpbmdzLlxuICovXG5mdW5jdGlvbiBwYXJzZVByb3BQYXRoKG5hbWUpIHtcbiAgLy8gZm9vW3hdW3ldW3pdXG4gIC8vIGZvby54LnkuelxuICAvLyBmb28teC15LXpcbiAgLy8gZm9vIHggeSB6XG4gIHJldHVybiB1dGlscy5tYXRjaEFsbCgvXFx3K3xcXFsoXFx3KildL2csIG5hbWUpLm1hcCgobWF0Y2gpID0+IHtcbiAgICByZXR1cm4gbWF0Y2hbMF0gPT09ICdbXScgPyAnJyA6IG1hdGNoWzFdIHx8IG1hdGNoWzBdO1xuICB9KTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGFuIGFycmF5IHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PGFueT59IGFyciAtIFRoZSBhcnJheSB0byBjb252ZXJ0IHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAcmV0dXJucyBBbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSBrZXlzIGFuZCB2YWx1ZXMgYXMgdGhlIGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheVRvT2JqZWN0KGFycikge1xuICBjb25zdCBvYmogPSB7fTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGFycik7XG4gIGxldCBpO1xuICBjb25zdCBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgbGV0IGtleTtcbiAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAga2V5ID0ga2V5c1tpXTtcbiAgICBvYmpba2V5XSA9IGFycltrZXldO1xuICB9XG4gIHJldHVybiBvYmo7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBGb3JtRGF0YSBvYmplY3QgYW5kIHJldHVybnMgYSBKYXZhU2NyaXB0IG9iamVjdFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtRGF0YSBUaGUgRm9ybURhdGEgb2JqZWN0IHRvIGNvbnZlcnQgdG8gSlNPTi5cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0PHN0cmluZywgYW55PiB8IG51bGx9IFRoZSBjb252ZXJ0ZWQgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBmb3JtRGF0YVRvSlNPTihmb3JtRGF0YSkge1xuICBmdW5jdGlvbiBidWlsZFBhdGgocGF0aCwgdmFsdWUsIHRhcmdldCwgaW5kZXgpIHtcbiAgICBsZXQgbmFtZSA9IHBhdGhbaW5kZXgrK107XG5cbiAgICBpZiAobmFtZSA9PT0gJ19fcHJvdG9fXycpIHJldHVybiB0cnVlO1xuXG4gICAgY29uc3QgaXNOdW1lcmljS2V5ID0gTnVtYmVyLmlzRmluaXRlKCtuYW1lKTtcbiAgICBjb25zdCBpc0xhc3QgPSBpbmRleCA+PSBwYXRoLmxlbmd0aDtcbiAgICBuYW1lID0gIW5hbWUgJiYgdXRpbHMuaXNBcnJheSh0YXJnZXQpID8gdGFyZ2V0Lmxlbmd0aCA6IG5hbWU7XG5cbiAgICBpZiAoaXNMYXN0KSB7XG4gICAgICBpZiAodXRpbHMuaGFzT3duUHJvcCh0YXJnZXQsIG5hbWUpKSB7XG4gICAgICAgIHRhcmdldFtuYW1lXSA9IFt0YXJnZXRbbmFtZV0sIHZhbHVlXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRhcmdldFtuYW1lXSA9IHZhbHVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gIWlzTnVtZXJpY0tleTtcbiAgICB9XG5cbiAgICBpZiAoIXRhcmdldFtuYW1lXSB8fCAhdXRpbHMuaXNPYmplY3QodGFyZ2V0W25hbWVdKSkge1xuICAgICAgdGFyZ2V0W25hbWVdID0gW107XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYnVpbGRQYXRoKHBhdGgsIHZhbHVlLCB0YXJnZXRbbmFtZV0sIGluZGV4KTtcblxuICAgIGlmIChyZXN1bHQgJiYgdXRpbHMuaXNBcnJheSh0YXJnZXRbbmFtZV0pKSB7XG4gICAgICB0YXJnZXRbbmFtZV0gPSBhcnJheVRvT2JqZWN0KHRhcmdldFtuYW1lXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICFpc051bWVyaWNLZXk7XG4gIH1cblxuICBpZiAodXRpbHMuaXNGb3JtRGF0YShmb3JtRGF0YSkgJiYgdXRpbHMuaXNGdW5jdGlvbihmb3JtRGF0YS5lbnRyaWVzKSkge1xuICAgIGNvbnN0IG9iaiA9IHt9O1xuXG4gICAgdXRpbHMuZm9yRWFjaEVudHJ5KGZvcm1EYXRhLCAobmFtZSwgdmFsdWUpID0+IHtcbiAgICAgIGJ1aWxkUGF0aChwYXJzZVByb3BQYXRoKG5hbWUpLCB2YWx1ZSwgb2JqLCAwKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZm9ybURhdGFUb0pTT047XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IHRyYW5zaXRpb25hbERlZmF1bHRzIGZyb20gJy4vdHJhbnNpdGlvbmFsLmpzJztcbmltcG9ydCB0b0Zvcm1EYXRhIGZyb20gJy4uL2hlbHBlcnMvdG9Gb3JtRGF0YS5qcyc7XG5pbXBvcnQgdG9VUkxFbmNvZGVkRm9ybSBmcm9tICcuLi9oZWxwZXJzL3RvVVJMRW5jb2RlZEZvcm0uanMnO1xuaW1wb3J0IHBsYXRmb3JtIGZyb20gJy4uL3BsYXRmb3JtL2luZGV4LmpzJztcbmltcG9ydCBmb3JtRGF0YVRvSlNPTiBmcm9tICcuLi9oZWxwZXJzL2Zvcm1EYXRhVG9KU09OLmpzJztcblxuLyoqXG4gKiBJdCB0YWtlcyBhIHN0cmluZywgdHJpZXMgdG8gcGFyc2UgaXQsIGFuZCBpZiBpdCBmYWlscywgaXQgcmV0dXJucyB0aGUgc3RyaW5naWZpZWQgdmVyc2lvblxuICogb2YgdGhlIGlucHV0XG4gKlxuICogQHBhcmFtIHthbnl9IHJhd1ZhbHVlIC0gVGhlIHZhbHVlIHRvIGJlIHN0cmluZ2lmaWVkLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcGFyc2VyIC0gQSBmdW5jdGlvbiB0aGF0IHBhcnNlcyBhIHN0cmluZyBpbnRvIGEgSmF2YVNjcmlwdCBvYmplY3QuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlbmNvZGVyIC0gQSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgdmFsdWUgYW5kIHJldHVybnMgYSBzdHJpbmcuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gQSBzdHJpbmdpZmllZCB2ZXJzaW9uIG9mIHRoZSByYXdWYWx1ZS5cbiAqL1xuZnVuY3Rpb24gc3RyaW5naWZ5U2FmZWx5KHJhd1ZhbHVlLCBwYXJzZXIsIGVuY29kZXIpIHtcbiAgaWYgKHV0aWxzLmlzU3RyaW5nKHJhd1ZhbHVlKSkge1xuICAgIHRyeSB7XG4gICAgICAocGFyc2VyIHx8IEpTT04ucGFyc2UpKHJhd1ZhbHVlKTtcbiAgICAgIHJldHVybiB1dGlscy50cmltKHJhd1ZhbHVlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZS5uYW1lICE9PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIChlbmNvZGVyIHx8IEpTT04uc3RyaW5naWZ5KShyYXdWYWx1ZSk7XG59XG5cbmNvbnN0IGRlZmF1bHRzID0ge1xuICB0cmFuc2l0aW9uYWw6IHRyYW5zaXRpb25hbERlZmF1bHRzLFxuXG4gIGFkYXB0ZXI6IFsneGhyJywgJ2h0dHAnLCAnZmV0Y2gnXSxcblxuICB0cmFuc2Zvcm1SZXF1ZXN0OiBbXG4gICAgZnVuY3Rpb24gdHJhbnNmb3JtUmVxdWVzdChkYXRhLCBoZWFkZXJzKSB7XG4gICAgICBjb25zdCBjb250ZW50VHlwZSA9IGhlYWRlcnMuZ2V0Q29udGVudFR5cGUoKSB8fCAnJztcbiAgICAgIGNvbnN0IGhhc0pTT05Db250ZW50VHlwZSA9IGNvbnRlbnRUeXBlLmluZGV4T2YoJ2FwcGxpY2F0aW9uL2pzb24nKSA+IC0xO1xuICAgICAgY29uc3QgaXNPYmplY3RQYXlsb2FkID0gdXRpbHMuaXNPYmplY3QoZGF0YSk7XG5cbiAgICAgIGlmIChpc09iamVjdFBheWxvYWQgJiYgdXRpbHMuaXNIVE1MRm9ybShkYXRhKSkge1xuICAgICAgICBkYXRhID0gbmV3IEZvcm1EYXRhKGRhdGEpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpc0Zvcm1EYXRhID0gdXRpbHMuaXNGb3JtRGF0YShkYXRhKTtcblxuICAgICAgaWYgKGlzRm9ybURhdGEpIHtcbiAgICAgICAgcmV0dXJuIGhhc0pTT05Db250ZW50VHlwZSA/IEpTT04uc3RyaW5naWZ5KGZvcm1EYXRhVG9KU09OKGRhdGEpKSA6IGRhdGE7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgdXRpbHMuaXNBcnJheUJ1ZmZlcihkYXRhKSB8fFxuICAgICAgICB1dGlscy5pc0J1ZmZlcihkYXRhKSB8fFxuICAgICAgICB1dGlscy5pc1N0cmVhbShkYXRhKSB8fFxuICAgICAgICB1dGlscy5pc0ZpbGUoZGF0YSkgfHxcbiAgICAgICAgdXRpbHMuaXNCbG9iKGRhdGEpIHx8XG4gICAgICAgIHV0aWxzLmlzUmVhZGFibGVTdHJlYW0oZGF0YSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgIH1cbiAgICAgIGlmICh1dGlscy5pc0FycmF5QnVmZmVyVmlldyhkYXRhKSkge1xuICAgICAgICByZXR1cm4gZGF0YS5idWZmZXI7XG4gICAgICB9XG4gICAgICBpZiAodXRpbHMuaXNVUkxTZWFyY2hQYXJhbXMoZGF0YSkpIHtcbiAgICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgnLCBmYWxzZSk7XG4gICAgICAgIHJldHVybiBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICB9XG5cbiAgICAgIGxldCBpc0ZpbGVMaXN0O1xuXG4gICAgICBpZiAoaXNPYmplY3RQYXlsb2FkKSB7XG4gICAgICAgIGlmIChjb250ZW50VHlwZS5pbmRleE9mKCdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKSA+IC0xKSB7XG4gICAgICAgICAgcmV0dXJuIHRvVVJMRW5jb2RlZEZvcm0oZGF0YSwgdGhpcy5mb3JtU2VyaWFsaXplcikudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAoaXNGaWxlTGlzdCA9IHV0aWxzLmlzRmlsZUxpc3QoZGF0YSkpIHx8XG4gICAgICAgICAgY29udGVudFR5cGUuaW5kZXhPZignbXVsdGlwYXJ0L2Zvcm0tZGF0YScpID4gLTFcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgX0Zvcm1EYXRhID0gdGhpcy5lbnYgJiYgdGhpcy5lbnYuRm9ybURhdGE7XG5cbiAgICAgICAgICByZXR1cm4gdG9Gb3JtRGF0YShcbiAgICAgICAgICAgIGlzRmlsZUxpc3QgPyB7ICdmaWxlc1tdJzogZGF0YSB9IDogZGF0YSxcbiAgICAgICAgICAgIF9Gb3JtRGF0YSAmJiBuZXcgX0Zvcm1EYXRhKCksXG4gICAgICAgICAgICB0aGlzLmZvcm1TZXJpYWxpemVyXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaXNPYmplY3RQYXlsb2FkIHx8IGhhc0pTT05Db250ZW50VHlwZSkge1xuICAgICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKCdhcHBsaWNhdGlvbi9qc29uJywgZmFsc2UpO1xuICAgICAgICByZXR1cm4gc3RyaW5naWZ5U2FmZWx5KGRhdGEpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9LFxuICBdLFxuXG4gIHRyYW5zZm9ybVJlc3BvbnNlOiBbXG4gICAgZnVuY3Rpb24gdHJhbnNmb3JtUmVzcG9uc2UoZGF0YSkge1xuICAgICAgY29uc3QgdHJhbnNpdGlvbmFsID0gdGhpcy50cmFuc2l0aW9uYWwgfHwgZGVmYXVsdHMudHJhbnNpdGlvbmFsO1xuICAgICAgY29uc3QgZm9yY2VkSlNPTlBhcnNpbmcgPSB0cmFuc2l0aW9uYWwgJiYgdHJhbnNpdGlvbmFsLmZvcmNlZEpTT05QYXJzaW5nO1xuICAgICAgY29uc3QgSlNPTlJlcXVlc3RlZCA9IHRoaXMucmVzcG9uc2VUeXBlID09PSAnanNvbic7XG5cbiAgICAgIGlmICh1dGlscy5pc1Jlc3BvbnNlKGRhdGEpIHx8IHV0aWxzLmlzUmVhZGFibGVTdHJlYW0oZGF0YSkpIHtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgZGF0YSAmJlxuICAgICAgICB1dGlscy5pc1N0cmluZyhkYXRhKSAmJlxuICAgICAgICAoKGZvcmNlZEpTT05QYXJzaW5nICYmICF0aGlzLnJlc3BvbnNlVHlwZSkgfHwgSlNPTlJlcXVlc3RlZClcbiAgICAgICkge1xuICAgICAgICBjb25zdCBzaWxlbnRKU09OUGFyc2luZyA9IHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwuc2lsZW50SlNPTlBhcnNpbmc7XG4gICAgICAgIGNvbnN0IHN0cmljdEpTT05QYXJzaW5nID0gIXNpbGVudEpTT05QYXJzaW5nICYmIEpTT05SZXF1ZXN0ZWQ7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkYXRhLCB0aGlzLnBhcnNlUmV2aXZlcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBpZiAoc3RyaWN0SlNPTlBhcnNpbmcpIHtcbiAgICAgICAgICAgIGlmIChlLm5hbWUgPT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgICAgICAgdGhyb3cgQXhpb3NFcnJvci5mcm9tKGUsIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVNQT05TRSwgdGhpcywgbnVsbCwgdGhpcy5yZXNwb25zZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9LFxuICBdLFxuXG4gIC8qKlxuICAgKiBBIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIHRvIGFib3J0IGEgcmVxdWVzdC4gSWYgc2V0IHRvIDAgKGRlZmF1bHQpIGFcbiAgICogdGltZW91dCBpcyBub3QgY3JlYXRlZC5cbiAgICovXG4gIHRpbWVvdXQ6IDAsXG5cbiAgeHNyZkNvb2tpZU5hbWU6ICdYU1JGLVRPS0VOJyxcbiAgeHNyZkhlYWRlck5hbWU6ICdYLVhTUkYtVE9LRU4nLFxuXG4gIG1heENvbnRlbnRMZW5ndGg6IC0xLFxuICBtYXhCb2R5TGVuZ3RoOiAtMSxcblxuICBlbnY6IHtcbiAgICBGb3JtRGF0YTogcGxhdGZvcm0uY2xhc3Nlcy5Gb3JtRGF0YSxcbiAgICBCbG9iOiBwbGF0Zm9ybS5jbGFzc2VzLkJsb2IsXG4gIH0sXG5cbiAgdmFsaWRhdGVTdGF0dXM6IGZ1bmN0aW9uIHZhbGlkYXRlU3RhdHVzKHN0YXR1cykge1xuICAgIHJldHVybiBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMDtcbiAgfSxcblxuICBoZWFkZXJzOiB7XG4gICAgY29tbW9uOiB7XG4gICAgICBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyonLFxuICAgICAgJ0NvbnRlbnQtVHlwZSc6IHVuZGVmaW5lZCxcbiAgICB9LFxuICB9LFxufTtcblxudXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdwb3N0JywgJ3B1dCcsICdwYXRjaCddLCAobWV0aG9kKSA9PiB7XG4gIGRlZmF1bHRzLmhlYWRlcnNbbWV0aG9kXSA9IHt9O1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRzO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IHRvRm9ybURhdGEgZnJvbSAnLi90b0Zvcm1EYXRhLmpzJztcbmltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvVVJMRW5jb2RlZEZvcm0oZGF0YSwgb3B0aW9ucykge1xuICByZXR1cm4gdG9Gb3JtRGF0YShkYXRhLCBuZXcgcGxhdGZvcm0uY2xhc3Nlcy5VUkxTZWFyY2hQYXJhbXMoKSwge1xuICAgIHZpc2l0b3I6IGZ1bmN0aW9uICh2YWx1ZSwga2V5LCBwYXRoLCBoZWxwZXJzKSB7XG4gICAgICBpZiAocGxhdGZvcm0uaXNOb2RlICYmIHV0aWxzLmlzQnVmZmVyKHZhbHVlKSkge1xuICAgICAgICB0aGlzLmFwcGVuZChrZXksIHZhbHVlLnRvU3RyaW5nKCdiYXNlNjQnKSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGhlbHBlcnMuZGVmYXVsdFZpc2l0b3IuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuXG4vLyBSYXdBeGlvc0hlYWRlcnMgd2hvc2UgZHVwbGljYXRlcyBhcmUgaWdub3JlZCBieSBub2RlXG4vLyBjLmYuIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvaHR0cC5odG1sI2h0dHBfbWVzc2FnZV9oZWFkZXJzXG5jb25zdCBpZ25vcmVEdXBsaWNhdGVPZiA9IHV0aWxzLnRvT2JqZWN0U2V0KFtcbiAgJ2FnZScsXG4gICdhdXRob3JpemF0aW9uJyxcbiAgJ2NvbnRlbnQtbGVuZ3RoJyxcbiAgJ2NvbnRlbnQtdHlwZScsXG4gICdldGFnJyxcbiAgJ2V4cGlyZXMnLFxuICAnZnJvbScsXG4gICdob3N0JyxcbiAgJ2lmLW1vZGlmaWVkLXNpbmNlJyxcbiAgJ2lmLXVubW9kaWZpZWQtc2luY2UnLFxuICAnbGFzdC1tb2RpZmllZCcsXG4gICdsb2NhdGlvbicsXG4gICdtYXgtZm9yd2FyZHMnLFxuICAncHJveHktYXV0aG9yaXphdGlvbicsXG4gICdyZWZlcmVyJyxcbiAgJ3JldHJ5LWFmdGVyJyxcbiAgJ3VzZXItYWdlbnQnLFxuXSk7XG5cbi8qKlxuICogUGFyc2UgaGVhZGVycyBpbnRvIGFuIG9iamVjdFxuICpcbiAqIGBgYFxuICogRGF0ZTogV2VkLCAyNyBBdWcgMjAxNCAwODo1ODo0OSBHTVRcbiAqIENvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvblxuICogQ29ubmVjdGlvbjoga2VlcC1hbGl2ZVxuICogVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWRcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSByYXdIZWFkZXJzIEhlYWRlcnMgbmVlZGluZyB0byBiZSBwYXJzZWRcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBIZWFkZXJzIHBhcnNlZCBpbnRvIGFuIG9iamVjdFxuICovXG5leHBvcnQgZGVmYXVsdCAocmF3SGVhZGVycykgPT4ge1xuICBjb25zdCBwYXJzZWQgPSB7fTtcbiAgbGV0IGtleTtcbiAgbGV0IHZhbDtcbiAgbGV0IGk7XG5cbiAgcmF3SGVhZGVycyAmJlxuICAgIHJhd0hlYWRlcnMuc3BsaXQoJ1xcbicpLmZvckVhY2goZnVuY3Rpb24gcGFyc2VyKGxpbmUpIHtcbiAgICAgIGkgPSBsaW5lLmluZGV4T2YoJzonKTtcbiAgICAgIGtleSA9IGxpbmUuc3Vic3RyaW5nKDAsIGkpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgdmFsID0gbGluZS5zdWJzdHJpbmcoaSArIDEpLnRyaW0oKTtcblxuICAgICAgaWYgKCFrZXkgfHwgKHBhcnNlZFtrZXldICYmIGlnbm9yZUR1cGxpY2F0ZU9mW2tleV0pKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGtleSA9PT0gJ3NldC1jb29raWUnKSB7XG4gICAgICAgIGlmIChwYXJzZWRba2V5XSkge1xuICAgICAgICAgIHBhcnNlZFtrZXldLnB1c2godmFsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYXJzZWRba2V5XSA9IFt2YWxdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJzZWRba2V5XSA9IHBhcnNlZFtrZXldID8gcGFyc2VkW2tleV0gKyAnLCAnICsgdmFsIDogdmFsO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIHJldHVybiBwYXJzZWQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IHBhcnNlSGVhZGVycyBmcm9tICcuLi9oZWxwZXJzL3BhcnNlSGVhZGVycy5qcyc7XG5cbmNvbnN0ICRpbnRlcm5hbHMgPSBTeW1ib2woJ2ludGVybmFscycpO1xuXG5jb25zdCBpc1ZhbGlkSGVhZGVyVmFsdWUgPSAodmFsdWUpID0+ICEvW1xcclxcbl0vLnRlc3QodmFsdWUpO1xuXG5mdW5jdGlvbiBhc3NlcnRWYWxpZEhlYWRlclZhbHVlKHZhbHVlLCBoZWFkZXIpIHtcbiAgaWYgKHZhbHVlID09PSBmYWxzZSB8fCB2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHV0aWxzLmlzQXJyYXkodmFsdWUpKSB7XG4gICAgdmFsdWUuZm9yRWFjaCgodikgPT4gYXNzZXJ0VmFsaWRIZWFkZXJWYWx1ZSh2LCBoZWFkZXIpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoIWlzVmFsaWRIZWFkZXJWYWx1ZShTdHJpbmcodmFsdWUpKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjaGFyYWN0ZXIgaW4gaGVhZGVyIGNvbnRlbnQgW1wiJHtoZWFkZXJ9XCJdYCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplSGVhZGVyKGhlYWRlcikge1xuICByZXR1cm4gaGVhZGVyICYmIFN0cmluZyhoZWFkZXIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBzdHJpcFRyYWlsaW5nQ1JMRihzdHIpIHtcbiAgbGV0IGVuZCA9IHN0ci5sZW5ndGg7XG5cbiAgd2hpbGUgKGVuZCA+IDApIHtcbiAgICBjb25zdCBjaGFyQ29kZSA9IHN0ci5jaGFyQ29kZUF0KGVuZCAtIDEpO1xuXG4gICAgaWYgKGNoYXJDb2RlICE9PSAxMCAmJiBjaGFyQ29kZSAhPT0gMTMpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGVuZCAtPSAxO1xuICB9XG5cbiAgcmV0dXJuIGVuZCA9PT0gc3RyLmxlbmd0aCA/IHN0ciA6IHN0ci5zbGljZSgwLCBlbmQpO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVWYWx1ZSh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IGZhbHNlIHx8IHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gdXRpbHMuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5tYXAobm9ybWFsaXplVmFsdWUpIDogc3RyaXBUcmFpbGluZ0NSTEYoU3RyaW5nKHZhbHVlKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVG9rZW5zKHN0cikge1xuICBjb25zdCB0b2tlbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBjb25zdCB0b2tlbnNSRSA9IC8oW15cXHMsOz1dKylcXHMqKD86PVxccyooW14sO10rKSk/L2c7XG4gIGxldCBtYXRjaDtcblxuICB3aGlsZSAoKG1hdGNoID0gdG9rZW5zUkUuZXhlYyhzdHIpKSkge1xuICAgIHRva2Vuc1ttYXRjaFsxXV0gPSBtYXRjaFsyXTtcbiAgfVxuXG4gIHJldHVybiB0b2tlbnM7XG59XG5cbmNvbnN0IGlzVmFsaWRIZWFkZXJOYW1lID0gKHN0cikgPT4gL15bLV9hLXpBLVowLTleYHx+LCEjJCUmJyorLl0rJC8udGVzdChzdHIudHJpbSgpKTtcblxuZnVuY3Rpb24gbWF0Y2hIZWFkZXJWYWx1ZShjb250ZXh0LCB2YWx1ZSwgaGVhZGVyLCBmaWx0ZXIsIGlzSGVhZGVyTmFtZUZpbHRlcikge1xuICBpZiAodXRpbHMuaXNGdW5jdGlvbihmaWx0ZXIpKSB7XG4gICAgcmV0dXJuIGZpbHRlci5jYWxsKHRoaXMsIHZhbHVlLCBoZWFkZXIpO1xuICB9XG5cbiAgaWYgKGlzSGVhZGVyTmFtZUZpbHRlcikge1xuICAgIHZhbHVlID0gaGVhZGVyO1xuICB9XG5cbiAgaWYgKCF1dGlscy5pc1N0cmluZyh2YWx1ZSkpIHJldHVybjtcblxuICBpZiAodXRpbHMuaXNTdHJpbmcoZmlsdGVyKSkge1xuICAgIHJldHVybiB2YWx1ZS5pbmRleE9mKGZpbHRlcikgIT09IC0xO1xuICB9XG5cbiAgaWYgKHV0aWxzLmlzUmVnRXhwKGZpbHRlcikpIHtcbiAgICByZXR1cm4gZmlsdGVyLnRlc3QodmFsdWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEhlYWRlcihoZWFkZXIpIHtcbiAgcmV0dXJuIGhlYWRlclxuICAgIC50cmltKClcbiAgICAudG9Mb3dlckNhc2UoKVxuICAgIC5yZXBsYWNlKC8oW2EtelxcZF0pKFxcdyopL2csICh3LCBjaGFyLCBzdHIpID0+IHtcbiAgICAgIHJldHVybiBjaGFyLnRvVXBwZXJDYXNlKCkgKyBzdHI7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQWNjZXNzb3JzKG9iaiwgaGVhZGVyKSB7XG4gIGNvbnN0IGFjY2Vzc29yTmFtZSA9IHV0aWxzLnRvQ2FtZWxDYXNlKCcgJyArIGhlYWRlcik7XG5cbiAgWydnZXQnLCAnc2V0JywgJ2hhcyddLmZvckVhY2goKG1ldGhvZE5hbWUpID0+IHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBtZXRob2ROYW1lICsgYWNjZXNzb3JOYW1lLCB7XG4gICAgICB2YWx1ZTogZnVuY3Rpb24gKGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbbWV0aG9kTmFtZV0uY2FsbCh0aGlzLCBoZWFkZXIsIGFyZzEsIGFyZzIsIGFyZzMpO1xuICAgICAgfSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB9KTtcbiAgfSk7XG59XG5cbmNsYXNzIEF4aW9zSGVhZGVycyB7XG4gIGNvbnN0cnVjdG9yKGhlYWRlcnMpIHtcbiAgICBoZWFkZXJzICYmIHRoaXMuc2V0KGhlYWRlcnMpO1xuICB9XG5cbiAgc2V0KGhlYWRlciwgdmFsdWVPclJld3JpdGUsIHJld3JpdGUpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgIGZ1bmN0aW9uIHNldEhlYWRlcihfdmFsdWUsIF9oZWFkZXIsIF9yZXdyaXRlKSB7XG4gICAgICBjb25zdCBsSGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKF9oZWFkZXIpO1xuXG4gICAgICBpZiAoIWxIZWFkZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdoZWFkZXIgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBrZXkgPSB1dGlscy5maW5kS2V5KHNlbGYsIGxIZWFkZXIpO1xuXG4gICAgICBpZiAoXG4gICAgICAgICFrZXkgfHxcbiAgICAgICAgc2VsZltrZXldID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgX3Jld3JpdGUgPT09IHRydWUgfHxcbiAgICAgICAgKF9yZXdyaXRlID09PSB1bmRlZmluZWQgJiYgc2VsZltrZXldICE9PSBmYWxzZSlcbiAgICAgICkge1xuICAgICAgICBhc3NlcnRWYWxpZEhlYWRlclZhbHVlKF92YWx1ZSwgX2hlYWRlcik7XG4gICAgICAgIHNlbGZba2V5IHx8IF9oZWFkZXJdID0gbm9ybWFsaXplVmFsdWUoX3ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzZXRIZWFkZXJzID0gKGhlYWRlcnMsIF9yZXdyaXRlKSA9PlxuICAgICAgdXRpbHMuZm9yRWFjaChoZWFkZXJzLCAoX3ZhbHVlLCBfaGVhZGVyKSA9PiBzZXRIZWFkZXIoX3ZhbHVlLCBfaGVhZGVyLCBfcmV3cml0ZSkpO1xuXG4gICAgaWYgKHV0aWxzLmlzUGxhaW5PYmplY3QoaGVhZGVyKSB8fCBoZWFkZXIgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKSB7XG4gICAgICBzZXRIZWFkZXJzKGhlYWRlciwgdmFsdWVPclJld3JpdGUpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNTdHJpbmcoaGVhZGVyKSAmJiAoaGVhZGVyID0gaGVhZGVyLnRyaW0oKSkgJiYgIWlzVmFsaWRIZWFkZXJOYW1lKGhlYWRlcikpIHtcbiAgICAgIHNldEhlYWRlcnMocGFyc2VIZWFkZXJzKGhlYWRlciksIHZhbHVlT3JSZXdyaXRlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzT2JqZWN0KGhlYWRlcikgJiYgdXRpbHMuaXNJdGVyYWJsZShoZWFkZXIpKSB7XG4gICAgICBsZXQgb2JqID0ge30sXG4gICAgICAgIGRlc3QsXG4gICAgICAgIGtleTtcbiAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgaGVhZGVyKSB7XG4gICAgICAgIGlmICghdXRpbHMuaXNBcnJheShlbnRyeSkpIHtcbiAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoJ09iamVjdCBpdGVyYXRvciBtdXN0IHJldHVybiBhIGtleS12YWx1ZSBwYWlyJyk7XG4gICAgICAgIH1cblxuICAgICAgICBvYmpbKGtleSA9IGVudHJ5WzBdKV0gPSAoZGVzdCA9IG9ialtrZXldKVxuICAgICAgICAgID8gdXRpbHMuaXNBcnJheShkZXN0KVxuICAgICAgICAgICAgPyBbLi4uZGVzdCwgZW50cnlbMV1dXG4gICAgICAgICAgICA6IFtkZXN0LCBlbnRyeVsxXV1cbiAgICAgICAgICA6IGVudHJ5WzFdO1xuICAgICAgfVxuXG4gICAgICBzZXRIZWFkZXJzKG9iaiwgdmFsdWVPclJld3JpdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBoZWFkZXIgIT0gbnVsbCAmJiBzZXRIZWFkZXIodmFsdWVPclJld3JpdGUsIGhlYWRlciwgcmV3cml0ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBnZXQoaGVhZGVyLCBwYXJzZXIpIHtcbiAgICBoZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoaGVhZGVyKTtcblxuICAgIGlmIChoZWFkZXIpIHtcbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzLmZpbmRLZXkodGhpcywgaGVhZGVyKTtcblxuICAgICAgaWYgKGtleSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXNba2V5XTtcblxuICAgICAgICBpZiAoIXBhcnNlcikge1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJzZXIgPT09IHRydWUpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VUb2tlbnModmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHV0aWxzLmlzRnVuY3Rpb24ocGFyc2VyKSkge1xuICAgICAgICAgIHJldHVybiBwYXJzZXIuY2FsbCh0aGlzLCB2YWx1ZSwga2V5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1dGlscy5pc1JlZ0V4cChwYXJzZXIpKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlci5leGVjKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3BhcnNlciBtdXN0IGJlIGJvb2xlYW58cmVnZXhwfGZ1bmN0aW9uJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaGFzKGhlYWRlciwgbWF0Y2hlcikge1xuICAgIGhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihoZWFkZXIpO1xuXG4gICAgaWYgKGhlYWRlcikge1xuICAgICAgY29uc3Qga2V5ID0gdXRpbHMuZmluZEtleSh0aGlzLCBoZWFkZXIpO1xuXG4gICAgICByZXR1cm4gISEoXG4gICAgICAgIGtleSAmJlxuICAgICAgICB0aGlzW2tleV0gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAoIW1hdGNoZXIgfHwgbWF0Y2hIZWFkZXJWYWx1ZSh0aGlzLCB0aGlzW2tleV0sIGtleSwgbWF0Y2hlcikpXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGRlbGV0ZShoZWFkZXIsIG1hdGNoZXIpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBsZXQgZGVsZXRlZCA9IGZhbHNlO1xuXG4gICAgZnVuY3Rpb24gZGVsZXRlSGVhZGVyKF9oZWFkZXIpIHtcbiAgICAgIF9oZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoX2hlYWRlcik7XG5cbiAgICAgIGlmIChfaGVhZGVyKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHV0aWxzLmZpbmRLZXkoc2VsZiwgX2hlYWRlcik7XG5cbiAgICAgICAgaWYgKGtleSAmJiAoIW1hdGNoZXIgfHwgbWF0Y2hIZWFkZXJWYWx1ZShzZWxmLCBzZWxmW2tleV0sIGtleSwgbWF0Y2hlcikpKSB7XG4gICAgICAgICAgZGVsZXRlIHNlbGZba2V5XTtcblxuICAgICAgICAgIGRlbGV0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzLmlzQXJyYXkoaGVhZGVyKSkge1xuICAgICAgaGVhZGVyLmZvckVhY2goZGVsZXRlSGVhZGVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlSGVhZGVyKGhlYWRlcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlbGV0ZWQ7XG4gIH1cblxuICBjbGVhcihtYXRjaGVyKSB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMpO1xuICAgIGxldCBpID0ga2V5cy5sZW5ndGg7XG4gICAgbGV0IGRlbGV0ZWQgPSBmYWxzZTtcblxuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIGNvbnN0IGtleSA9IGtleXNbaV07XG4gICAgICBpZiAoIW1hdGNoZXIgfHwgbWF0Y2hIZWFkZXJWYWx1ZSh0aGlzLCB0aGlzW2tleV0sIGtleSwgbWF0Y2hlciwgdHJ1ZSkpIHtcbiAgICAgICAgZGVsZXRlIHRoaXNba2V5XTtcbiAgICAgICAgZGVsZXRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlbGV0ZWQ7XG4gIH1cblxuICBub3JtYWxpemUoZm9ybWF0KSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgaGVhZGVycyA9IHt9O1xuXG4gICAgdXRpbHMuZm9yRWFjaCh0aGlzLCAodmFsdWUsIGhlYWRlcikgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gdXRpbHMuZmluZEtleShoZWFkZXJzLCBoZWFkZXIpO1xuXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIHNlbGZba2V5XSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKTtcbiAgICAgICAgZGVsZXRlIHNlbGZbaGVhZGVyXTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBub3JtYWxpemVkID0gZm9ybWF0ID8gZm9ybWF0SGVhZGVyKGhlYWRlcikgOiBTdHJpbmcoaGVhZGVyKS50cmltKCk7XG5cbiAgICAgIGlmIChub3JtYWxpemVkICE9PSBoZWFkZXIpIHtcbiAgICAgICAgZGVsZXRlIHNlbGZbaGVhZGVyXTtcbiAgICAgIH1cblxuICAgICAgc2VsZltub3JtYWxpemVkXSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKTtcblxuICAgICAgaGVhZGVyc1tub3JtYWxpemVkXSA9IHRydWU7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGNvbmNhdCguLi50YXJnZXRzKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IuY29uY2F0KHRoaXMsIC4uLnRhcmdldHMpO1xuICB9XG5cbiAgdG9KU09OKGFzU3RyaW5ncykge1xuICAgIGNvbnN0IG9iaiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICB1dGlscy5mb3JFYWNoKHRoaXMsICh2YWx1ZSwgaGVhZGVyKSA9PiB7XG4gICAgICB2YWx1ZSAhPSBudWxsICYmXG4gICAgICAgIHZhbHVlICE9PSBmYWxzZSAmJlxuICAgICAgICAob2JqW2hlYWRlcl0gPSBhc1N0cmluZ3MgJiYgdXRpbHMuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5qb2luKCcsICcpIDogdmFsdWUpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKVtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSlcbiAgICAgIC5tYXAoKFtoZWFkZXIsIHZhbHVlXSkgPT4gaGVhZGVyICsgJzogJyArIHZhbHVlKVxuICAgICAgLmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgZ2V0U2V0Q29va2llKCkge1xuICAgIHJldHVybiB0aGlzLmdldCgnc2V0LWNvb2tpZScpIHx8IFtdO1xuICB9XG5cbiAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgIHJldHVybiAnQXhpb3NIZWFkZXJzJztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tKHRoaW5nKSB7XG4gICAgcmV0dXJuIHRoaW5nIGluc3RhbmNlb2YgdGhpcyA/IHRoaW5nIDogbmV3IHRoaXModGhpbmcpO1xuICB9XG5cbiAgc3RhdGljIGNvbmNhdChmaXJzdCwgLi4udGFyZ2V0cykge1xuICAgIGNvbnN0IGNvbXB1dGVkID0gbmV3IHRoaXMoZmlyc3QpO1xuXG4gICAgdGFyZ2V0cy5mb3JFYWNoKCh0YXJnZXQpID0+IGNvbXB1dGVkLnNldCh0YXJnZXQpKTtcblxuICAgIHJldHVybiBjb21wdXRlZDtcbiAgfVxuXG4gIHN0YXRpYyBhY2Nlc3NvcihoZWFkZXIpIHtcbiAgICBjb25zdCBpbnRlcm5hbHMgPVxuICAgICAgKHRoaXNbJGludGVybmFsc10gPVxuICAgICAgdGhpc1skaW50ZXJuYWxzXSA9XG4gICAgICAgIHtcbiAgICAgICAgICBhY2Nlc3NvcnM6IHt9LFxuICAgICAgICB9KTtcblxuICAgIGNvbnN0IGFjY2Vzc29ycyA9IGludGVybmFscy5hY2Nlc3NvcnM7XG4gICAgY29uc3QgcHJvdG90eXBlID0gdGhpcy5wcm90b3R5cGU7XG5cbiAgICBmdW5jdGlvbiBkZWZpbmVBY2Nlc3NvcihfaGVhZGVyKSB7XG4gICAgICBjb25zdCBsSGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKF9oZWFkZXIpO1xuXG4gICAgICBpZiAoIWFjY2Vzc29yc1tsSGVhZGVyXSkge1xuICAgICAgICBidWlsZEFjY2Vzc29ycyhwcm90b3R5cGUsIF9oZWFkZXIpO1xuICAgICAgICBhY2Nlc3NvcnNbbEhlYWRlcl0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHV0aWxzLmlzQXJyYXkoaGVhZGVyKSA/IGhlYWRlci5mb3JFYWNoKGRlZmluZUFjY2Vzc29yKSA6IGRlZmluZUFjY2Vzc29yKGhlYWRlcik7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxufVxuXG5BeGlvc0hlYWRlcnMuYWNjZXNzb3IoW1xuICAnQ29udGVudC1UeXBlJyxcbiAgJ0NvbnRlbnQtTGVuZ3RoJyxcbiAgJ0FjY2VwdCcsXG4gICdBY2NlcHQtRW5jb2RpbmcnLFxuICAnVXNlci1BZ2VudCcsXG4gICdBdXRob3JpemF0aW9uJyxcbl0pO1xuXG4vLyByZXNlcnZlZCBuYW1lcyBob3RmaXhcbnV0aWxzLnJlZHVjZURlc2NyaXB0b3JzKEF4aW9zSGVhZGVycy5wcm90b3R5cGUsICh7IHZhbHVlIH0sIGtleSkgPT4ge1xuICBsZXQgbWFwcGVkID0ga2V5WzBdLnRvVXBwZXJDYXNlKCkgKyBrZXkuc2xpY2UoMSk7IC8vIG1hcCBgc2V0YCA9PiBgU2V0YFxuICByZXR1cm4ge1xuICAgIGdldDogKCkgPT4gdmFsdWUsXG4gICAgc2V0KGhlYWRlclZhbHVlKSB7XG4gICAgICB0aGlzW21hcHBlZF0gPSBoZWFkZXJWYWx1ZTtcbiAgICB9LFxuICB9O1xufSk7XG5cbnV0aWxzLmZyZWV6ZU1ldGhvZHMoQXhpb3NIZWFkZXJzKTtcblxuZXhwb3J0IGRlZmF1bHQgQXhpb3NIZWFkZXJzO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IGRlZmF1bHRzIGZyb20gJy4uL2RlZmF1bHRzL2luZGV4LmpzJztcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSAnLi4vY29yZS9BeGlvc0hlYWRlcnMuanMnO1xuXG4vKipcbiAqIFRyYW5zZm9ybSB0aGUgZGF0YSBmb3IgYSByZXF1ZXN0IG9yIGEgcmVzcG9uc2VcbiAqXG4gKiBAcGFyYW0ge0FycmF5fEZ1bmN0aW9ufSBmbnMgQSBzaW5nbGUgZnVuY3Rpb24gb3IgQXJyYXkgb2YgZnVuY3Rpb25zXG4gKiBAcGFyYW0gez9PYmplY3R9IHJlc3BvbnNlIFRoZSByZXNwb25zZSBvYmplY3RcbiAqXG4gKiBAcmV0dXJucyB7Kn0gVGhlIHJlc3VsdGluZyB0cmFuc2Zvcm1lZCBkYXRhXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRyYW5zZm9ybURhdGEoZm5zLCByZXNwb25zZSkge1xuICBjb25zdCBjb25maWcgPSB0aGlzIHx8IGRlZmF1bHRzO1xuICBjb25zdCBjb250ZXh0ID0gcmVzcG9uc2UgfHwgY29uZmlnO1xuICBjb25zdCBoZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20oY29udGV4dC5oZWFkZXJzKTtcbiAgbGV0IGRhdGEgPSBjb250ZXh0LmRhdGE7XG5cbiAgdXRpbHMuZm9yRWFjaChmbnMsIGZ1bmN0aW9uIHRyYW5zZm9ybShmbikge1xuICAgIGRhdGEgPSBmbi5jYWxsKGNvbmZpZywgZGF0YSwgaGVhZGVycy5ub3JtYWxpemUoKSwgcmVzcG9uc2UgPyByZXNwb25zZS5zdGF0dXMgOiB1bmRlZmluZWQpO1xuICB9KTtcblxuICBoZWFkZXJzLm5vcm1hbGl6ZSgpO1xuXG4gIHJldHVybiBkYXRhO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0NhbmNlbCh2YWx1ZSkge1xuICByZXR1cm4gISEodmFsdWUgJiYgdmFsdWUuX19DQU5DRUxfXyk7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4uL2NvcmUvQXhpb3NFcnJvci5qcyc7XG5cbmNsYXNzIENhbmNlbGVkRXJyb3IgZXh0ZW5kcyBBeGlvc0Vycm9yIHtcbiAgLyoqXG4gICAqIEEgYENhbmNlbGVkRXJyb3JgIGlzIGFuIG9iamVjdCB0aGF0IGlzIHRocm93biB3aGVuIGFuIG9wZXJhdGlvbiBpcyBjYW5jZWxlZC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmc9fSBtZXNzYWdlIFRoZSBtZXNzYWdlLlxuICAgKiBAcGFyYW0ge09iamVjdD19IGNvbmZpZyBUaGUgY29uZmlnLlxuICAgKiBAcGFyYW0ge09iamVjdD19IHJlcXVlc3QgVGhlIHJlcXVlc3QuXG4gICAqXG4gICAqIEByZXR1cm5zIHtDYW5jZWxlZEVycm9yfSBUaGUgY3JlYXRlZCBlcnJvci5cbiAgICovXG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UsIGNvbmZpZywgcmVxdWVzdCkge1xuICAgIHN1cGVyKG1lc3NhZ2UgPT0gbnVsbCA/ICdjYW5jZWxlZCcgOiBtZXNzYWdlLCBBeGlvc0Vycm9yLkVSUl9DQU5DRUxFRCwgY29uZmlnLCByZXF1ZXN0KTtcbiAgICB0aGlzLm5hbWUgPSAnQ2FuY2VsZWRFcnJvcic7XG4gICAgdGhpcy5fX0NBTkNFTF9fID0gdHJ1ZTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDYW5jZWxlZEVycm9yO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuL0F4aW9zRXJyb3IuanMnO1xuXG4vKipcbiAqIFJlc29sdmUgb3IgcmVqZWN0IGEgUHJvbWlzZSBiYXNlZCBvbiByZXNwb25zZSBzdGF0dXMuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVzb2x2ZSBBIGZ1bmN0aW9uIHRoYXQgcmVzb2x2ZXMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3QgQSBmdW5jdGlvbiB0aGF0IHJlamVjdHMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge29iamVjdH0gcmVzcG9uc2UgVGhlIHJlc3BvbnNlLlxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9IFRoZSByZXNwb25zZS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgcmVzcG9uc2UpIHtcbiAgY29uc3QgdmFsaWRhdGVTdGF0dXMgPSByZXNwb25zZS5jb25maWcudmFsaWRhdGVTdGF0dXM7XG4gIGlmICghcmVzcG9uc2Uuc3RhdHVzIHx8ICF2YWxpZGF0ZVN0YXR1cyB8fCB2YWxpZGF0ZVN0YXR1cyhyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gIH0gZWxzZSB7XG4gICAgcmVqZWN0KFxuICAgICAgbmV3IEF4aW9zRXJyb3IoXG4gICAgICAgICdSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICcgKyByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgIFtBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCwgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFXVtcbiAgICAgICAgICBNYXRoLmZsb29yKHJlc3BvbnNlLnN0YXR1cyAvIDEwMCkgLSA0XG4gICAgICAgIF0sXG4gICAgICAgIHJlc3BvbnNlLmNvbmZpZyxcbiAgICAgICAgcmVzcG9uc2UucmVxdWVzdCxcbiAgICAgICAgcmVzcG9uc2VcbiAgICAgIClcbiAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgc3BlZWRvbWV0ZXIgZnJvbSAnLi9zcGVlZG9tZXRlci5qcyc7XG5pbXBvcnQgdGhyb3R0bGUgZnJvbSAnLi90aHJvdHRsZS5qcyc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuXG5leHBvcnQgY29uc3QgcHJvZ3Jlc3NFdmVudFJlZHVjZXIgPSAobGlzdGVuZXIsIGlzRG93bmxvYWRTdHJlYW0sIGZyZXEgPSAzKSA9PiB7XG4gIGxldCBieXRlc05vdGlmaWVkID0gMDtcbiAgY29uc3QgX3NwZWVkb21ldGVyID0gc3BlZWRvbWV0ZXIoNTAsIDI1MCk7XG5cbiAgcmV0dXJuIHRocm90dGxlKChlKSA9PiB7XG4gICAgY29uc3QgbG9hZGVkID0gZS5sb2FkZWQ7XG4gICAgY29uc3QgdG90YWwgPSBlLmxlbmd0aENvbXB1dGFibGUgPyBlLnRvdGFsIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHByb2dyZXNzQnl0ZXMgPSBsb2FkZWQgLSBieXRlc05vdGlmaWVkO1xuICAgIGNvbnN0IHJhdGUgPSBfc3BlZWRvbWV0ZXIocHJvZ3Jlc3NCeXRlcyk7XG4gICAgY29uc3QgaW5SYW5nZSA9IGxvYWRlZCA8PSB0b3RhbDtcblxuICAgIGJ5dGVzTm90aWZpZWQgPSBsb2FkZWQ7XG5cbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgbG9hZGVkLFxuICAgICAgdG90YWwsXG4gICAgICBwcm9ncmVzczogdG90YWwgPyBsb2FkZWQgLyB0b3RhbCA6IHVuZGVmaW5lZCxcbiAgICAgIGJ5dGVzOiBwcm9ncmVzc0J5dGVzLFxuICAgICAgcmF0ZTogcmF0ZSA/IHJhdGUgOiB1bmRlZmluZWQsXG4gICAgICBlc3RpbWF0ZWQ6IHJhdGUgJiYgdG90YWwgJiYgaW5SYW5nZSA/ICh0b3RhbCAtIGxvYWRlZCkgLyByYXRlIDogdW5kZWZpbmVkLFxuICAgICAgZXZlbnQ6IGUsXG4gICAgICBsZW5ndGhDb21wdXRhYmxlOiB0b3RhbCAhPSBudWxsLFxuICAgICAgW2lzRG93bmxvYWRTdHJlYW0gPyAnZG93bmxvYWQnIDogJ3VwbG9hZCddOiB0cnVlLFxuICAgIH07XG5cbiAgICBsaXN0ZW5lcihkYXRhKTtcbiAgfSwgZnJlcSk7XG59O1xuXG5leHBvcnQgY29uc3QgcHJvZ3Jlc3NFdmVudERlY29yYXRvciA9ICh0b3RhbCwgdGhyb3R0bGVkKSA9PiB7XG4gIGNvbnN0IGxlbmd0aENvbXB1dGFibGUgPSB0b3RhbCAhPSBudWxsO1xuXG4gIHJldHVybiBbXG4gICAgKGxvYWRlZCkgPT5cbiAgICAgIHRocm90dGxlZFswXSh7XG4gICAgICAgIGxlbmd0aENvbXB1dGFibGUsXG4gICAgICAgIHRvdGFsLFxuICAgICAgICBsb2FkZWQsXG4gICAgICB9KSxcbiAgICB0aHJvdHRsZWRbMV0sXG4gIF07XG59O1xuXG5leHBvcnQgY29uc3QgYXN5bmNEZWNvcmF0b3IgPVxuICAoZm4pID0+XG4gICguLi5hcmdzKSA9PlxuICAgIHV0aWxzLmFzYXAoKCkgPT4gZm4oLi4uYXJncykpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENhbGN1bGF0ZSBkYXRhIG1heFJhdGVcbiAqIEBwYXJhbSB7TnVtYmVyfSBbc2FtcGxlc0NvdW50PSAxMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSBbbWluPSAxMDAwXVxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBzcGVlZG9tZXRlcihzYW1wbGVzQ291bnQsIG1pbikge1xuICBzYW1wbGVzQ291bnQgPSBzYW1wbGVzQ291bnQgfHwgMTA7XG4gIGNvbnN0IGJ5dGVzID0gbmV3IEFycmF5KHNhbXBsZXNDb3VudCk7XG4gIGNvbnN0IHRpbWVzdGFtcHMgPSBuZXcgQXJyYXkoc2FtcGxlc0NvdW50KTtcbiAgbGV0IGhlYWQgPSAwO1xuICBsZXQgdGFpbCA9IDA7XG4gIGxldCBmaXJzdFNhbXBsZVRTO1xuXG4gIG1pbiA9IG1pbiAhPT0gdW5kZWZpbmVkID8gbWluIDogMTAwMDtcblxuICByZXR1cm4gZnVuY3Rpb24gcHVzaChjaHVua0xlbmd0aCkge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICBjb25zdCBzdGFydGVkQXQgPSB0aW1lc3RhbXBzW3RhaWxdO1xuXG4gICAgaWYgKCFmaXJzdFNhbXBsZVRTKSB7XG4gICAgICBmaXJzdFNhbXBsZVRTID0gbm93O1xuICAgIH1cblxuICAgIGJ5dGVzW2hlYWRdID0gY2h1bmtMZW5ndGg7XG4gICAgdGltZXN0YW1wc1toZWFkXSA9IG5vdztcblxuICAgIGxldCBpID0gdGFpbDtcbiAgICBsZXQgYnl0ZXNDb3VudCA9IDA7XG5cbiAgICB3aGlsZSAoaSAhPT0gaGVhZCkge1xuICAgICAgYnl0ZXNDb3VudCArPSBieXRlc1tpKytdO1xuICAgICAgaSA9IGkgJSBzYW1wbGVzQ291bnQ7XG4gICAgfVxuXG4gICAgaGVhZCA9IChoZWFkICsgMSkgJSBzYW1wbGVzQ291bnQ7XG5cbiAgICBpZiAoaGVhZCA9PT0gdGFpbCkge1xuICAgICAgdGFpbCA9ICh0YWlsICsgMSkgJSBzYW1wbGVzQ291bnQ7XG4gICAgfVxuXG4gICAgaWYgKG5vdyAtIGZpcnN0U2FtcGxlVFMgPCBtaW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXNzZWQgPSBzdGFydGVkQXQgJiYgbm93IC0gc3RhcnRlZEF0O1xuXG4gICAgcmV0dXJuIHBhc3NlZCA/IE1hdGgucm91bmQoKGJ5dGVzQ291bnQgKiAxMDAwKSAvIHBhc3NlZCkgOiB1bmRlZmluZWQ7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNwZWVkb21ldGVyO1xuIiwiLyoqXG4gKiBUaHJvdHRsZSBkZWNvcmF0b3JcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcGFyYW0ge051bWJlcn0gZnJlcVxuICogQHJldHVybiB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIHRocm90dGxlKGZuLCBmcmVxKSB7XG4gIGxldCB0aW1lc3RhbXAgPSAwO1xuICBsZXQgdGhyZXNob2xkID0gMTAwMCAvIGZyZXE7XG4gIGxldCBsYXN0QXJncztcbiAgbGV0IHRpbWVyO1xuXG4gIGNvbnN0IGludm9rZSA9IChhcmdzLCBub3cgPSBEYXRlLm5vdygpKSA9PiB7XG4gICAgdGltZXN0YW1wID0gbm93O1xuICAgIGxhc3RBcmdzID0gbnVsbDtcbiAgICBpZiAodGltZXIpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICB0aW1lciA9IG51bGw7XG4gICAgfVxuICAgIGZuKC4uLmFyZ3MpO1xuICB9O1xuXG4gIGNvbnN0IHRocm90dGxlZCA9ICguLi5hcmdzKSA9PiB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBwYXNzZWQgPSBub3cgLSB0aW1lc3RhbXA7XG4gICAgaWYgKHBhc3NlZCA+PSB0aHJlc2hvbGQpIHtcbiAgICAgIGludm9rZShhcmdzLCBub3cpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsYXN0QXJncyA9IGFyZ3M7XG4gICAgICBpZiAoIXRpbWVyKSB7XG4gICAgICAgIHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGltZXIgPSBudWxsO1xuICAgICAgICAgIGludm9rZShsYXN0QXJncyk7XG4gICAgICAgIH0sIHRocmVzaG9sZCAtIHBhc3NlZCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGZsdXNoID0gKCkgPT4gbGFzdEFyZ3MgJiYgaW52b2tlKGxhc3RBcmdzKTtcblxuICByZXR1cm4gW3Rocm90dGxlZCwgZmx1c2hdO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0aHJvdHRsZTtcbiIsImltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlckVudlxuICA/ICgob3JpZ2luLCBpc01TSUUpID0+ICh1cmwpID0+IHtcbiAgICAgIHVybCA9IG5ldyBVUkwodXJsLCBwbGF0Zm9ybS5vcmlnaW4pO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICBvcmlnaW4ucHJvdG9jb2wgPT09IHVybC5wcm90b2NvbCAmJlxuICAgICAgICBvcmlnaW4uaG9zdCA9PT0gdXJsLmhvc3QgJiZcbiAgICAgICAgKGlzTVNJRSB8fCBvcmlnaW4ucG9ydCA9PT0gdXJsLnBvcnQpXG4gICAgICApO1xuICAgIH0pKFxuICAgICAgbmV3IFVSTChwbGF0Zm9ybS5vcmlnaW4pLFxuICAgICAgcGxhdGZvcm0ubmF2aWdhdG9yICYmIC8obXNpZXx0cmlkZW50KS9pLnRlc3QocGxhdGZvcm0ubmF2aWdhdG9yLnVzZXJBZ2VudClcbiAgICApXG4gIDogKCkgPT4gdHJ1ZTtcbiIsImltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuXG5leHBvcnQgZGVmYXVsdCBwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnZcbiAgPyAvLyBTdGFuZGFyZCBicm93c2VyIGVudnMgc3VwcG9ydCBkb2N1bWVudC5jb29raWVcbiAgICB7XG4gICAgICB3cml0ZShuYW1lLCB2YWx1ZSwgZXhwaXJlcywgcGF0aCwgZG9tYWluLCBzZWN1cmUsIHNhbWVTaXRlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgY29va2llID0gW2Ake25hbWV9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKX1gXTtcblxuICAgICAgICBpZiAodXRpbHMuaXNOdW1iZXIoZXhwaXJlcykpIHtcbiAgICAgICAgICBjb29raWUucHVzaChgZXhwaXJlcz0ke25ldyBEYXRlKGV4cGlyZXMpLnRvVVRDU3RyaW5nKCl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHV0aWxzLmlzU3RyaW5nKHBhdGgpKSB7XG4gICAgICAgICAgY29va2llLnB1c2goYHBhdGg9JHtwYXRofWApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1dGlscy5pc1N0cmluZyhkb21haW4pKSB7XG4gICAgICAgICAgY29va2llLnB1c2goYGRvbWFpbj0ke2RvbWFpbn1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VjdXJlID09PSB0cnVlKSB7XG4gICAgICAgICAgY29va2llLnB1c2goJ3NlY3VyZScpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1dGlscy5pc1N0cmluZyhzYW1lU2l0ZSkpIHtcbiAgICAgICAgICBjb29raWUucHVzaChgU2FtZVNpdGU9JHtzYW1lU2l0ZX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRvY3VtZW50LmNvb2tpZSA9IGNvb2tpZS5qb2luKCc7ICcpO1xuICAgICAgfSxcblxuICAgICAgcmVhZChuYW1lKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSByZXR1cm4gbnVsbDtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBkb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgnKD86Xnw7ICknICsgbmFtZSArICc9KFteO10qKScpKTtcbiAgICAgICAgcmV0dXJuIG1hdGNoID8gZGVjb2RlVVJJQ29tcG9uZW50KG1hdGNoWzFdKSA6IG51bGw7XG4gICAgICB9LFxuXG4gICAgICByZW1vdmUobmFtZSkge1xuICAgICAgICB0aGlzLndyaXRlKG5hbWUsICcnLCBEYXRlLm5vdygpIC0gODY0MDAwMDAsICcvJyk7XG4gICAgICB9LFxuICAgIH1cbiAgOiAvLyBOb24tc3RhbmRhcmQgYnJvd3NlciBlbnYgKHdlYiB3b3JrZXJzLCByZWFjdC1uYXRpdmUpIGxhY2sgbmVlZGVkIHN1cHBvcnQuXG4gICAge1xuICAgICAgd3JpdGUoKSB7fSxcbiAgICAgIHJlYWQoKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSxcbiAgICAgIHJlbW92ZSgpIHt9LFxuICAgIH07XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBpc0Fic29sdXRlVVJMIGZyb20gJy4uL2hlbHBlcnMvaXNBYnNvbHV0ZVVSTC5qcyc7XG5pbXBvcnQgY29tYmluZVVSTHMgZnJvbSAnLi4vaGVscGVycy9jb21iaW5lVVJMcy5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBVUkwgYnkgY29tYmluaW5nIHRoZSBiYXNlVVJMIHdpdGggdGhlIHJlcXVlc3RlZFVSTCxcbiAqIG9ubHkgd2hlbiB0aGUgcmVxdWVzdGVkVVJMIGlzIG5vdCBhbHJlYWR5IGFuIGFic29sdXRlIFVSTC5cbiAqIElmIHRoZSByZXF1ZXN0VVJMIGlzIGFic29sdXRlLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHJlcXVlc3RlZFVSTCB1bnRvdWNoZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwgVGhlIGJhc2UgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVxdWVzdGVkVVJMIEFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBjb21iaW5lXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIGZ1bGwgcGF0aFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBidWlsZEZ1bGxQYXRoKGJhc2VVUkwsIHJlcXVlc3RlZFVSTCwgYWxsb3dBYnNvbHV0ZVVybHMpIHtcbiAgbGV0IGlzUmVsYXRpdmVVcmwgPSAhaXNBYnNvbHV0ZVVSTChyZXF1ZXN0ZWRVUkwpO1xuICBpZiAoYmFzZVVSTCAmJiAoaXNSZWxhdGl2ZVVybCB8fCBhbGxvd0Fic29sdXRlVXJscyA9PSBmYWxzZSkpIHtcbiAgICByZXR1cm4gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKTtcbiAgfVxuICByZXR1cm4gcmVxdWVzdGVkVVJMO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgc3BlY2lmaWVkIFVSTCBpcyBhYnNvbHV0ZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIFVSTCB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0Fic29sdXRlVVJMKHVybCkge1xuICAvLyBBIFVSTCBpcyBjb25zaWRlcmVkIGFic29sdXRlIGlmIGl0IGJlZ2lucyB3aXRoIFwiPHNjaGVtZT46Ly9cIiBvciBcIi8vXCIgKHByb3RvY29sLXJlbGF0aXZlIFVSTCkuXG4gIC8vIFJGQyAzOTg2IGRlZmluZXMgc2NoZW1lIG5hbWUgYXMgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIGJlZ2lubmluZyB3aXRoIGEgbGV0dGVyIGFuZCBmb2xsb3dlZFxuICAvLyBieSBhbnkgY29tYmluYXRpb24gb2YgbGV0dGVycywgZGlnaXRzLCBwbHVzLCBwZXJpb2QsIG9yIGh5cGhlbi5cbiAgaWYgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIC9eKFthLXpdW2EtelxcZCtcXC0uXSo6KT9cXC9cXC8vaS50ZXN0KHVybCk7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBVUkwgYnkgY29tYmluaW5nIHRoZSBzcGVjaWZpZWQgVVJMc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aXZlVVJMIFRoZSByZWxhdGl2ZSBVUkxcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tYmluZWQgVVJMXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbWJpbmVVUkxzKGJhc2VVUkwsIHJlbGF0aXZlVVJMKSB7XG4gIHJldHVybiByZWxhdGl2ZVVSTFxuICAgID8gYmFzZVVSTC5yZXBsYWNlKC9cXC8/XFwvJC8sICcnKSArICcvJyArIHJlbGF0aXZlVVJMLnJlcGxhY2UoL15cXC8rLywgJycpXG4gICAgOiBiYXNlVVJMO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuL0F4aW9zSGVhZGVycy5qcyc7XG5cbmNvbnN0IGhlYWRlcnNUb09iamVjdCA9ICh0aGluZykgPT4gKHRoaW5nIGluc3RhbmNlb2YgQXhpb3NIZWFkZXJzID8geyAuLi50aGluZyB9IDogdGhpbmcpO1xuXG4vKipcbiAqIENvbmZpZy1zcGVjaWZpYyBtZXJnZS1mdW5jdGlvbiB3aGljaCBjcmVhdGVzIGEgbmV3IGNvbmZpZy1vYmplY3RcbiAqIGJ5IG1lcmdpbmcgdHdvIGNvbmZpZ3VyYXRpb24gb2JqZWN0cyB0b2dldGhlci5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMVxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZzJcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBOZXcgb2JqZWN0IHJlc3VsdGluZyBmcm9tIG1lcmdpbmcgY29uZmlnMiB0byBjb25maWcxXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1lcmdlQ29uZmlnKGNvbmZpZzEsIGNvbmZpZzIpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIGNvbmZpZzIgPSBjb25maWcyIHx8IHt9O1xuICBjb25zdCBjb25maWcgPSB7fTtcblxuICBmdW5jdGlvbiBnZXRNZXJnZWRWYWx1ZSh0YXJnZXQsIHNvdXJjZSwgcHJvcCwgY2FzZWxlc3MpIHtcbiAgICBpZiAodXRpbHMuaXNQbGFpbk9iamVjdCh0YXJnZXQpICYmIHV0aWxzLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzLm1lcmdlLmNhbGwoeyBjYXNlbGVzcyB9LCB0YXJnZXQsIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscy5pc1BsYWluT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB1dGlscy5tZXJnZSh7fSwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzQXJyYXkoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHNvdXJjZS5zbGljZSgpO1xuICAgIH1cbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgZnVuY3Rpb24gbWVyZ2VEZWVwUHJvcGVydGllcyhhLCBiLCBwcm9wLCBjYXNlbGVzcykge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZShhLCBiLCBwcm9wLCBjYXNlbGVzcyk7XG4gICAgfSBlbHNlIGlmICghdXRpbHMuaXNVbmRlZmluZWQoYSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGEsIHByb3AsIGNhc2VsZXNzKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gdmFsdWVGcm9tQ29uZmlnMihhLCBiKSB7XG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChiKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYik7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIGRlZmF1bHRUb0NvbmZpZzIoYSwgYikge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGIpO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGEpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBhKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gbWVyZ2VEaXJlY3RLZXlzKGEsIGIsIHByb3ApIHtcbiAgICBpZiAocHJvcCBpbiBjb25maWcyKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUoYSwgYik7XG4gICAgfSBlbHNlIGlmIChwcm9wIGluIGNvbmZpZzEpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGEpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG1lcmdlTWFwID0ge1xuICAgIHVybDogdmFsdWVGcm9tQ29uZmlnMixcbiAgICBtZXRob2Q6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgZGF0YTogdmFsdWVGcm9tQ29uZmlnMixcbiAgICBiYXNlVVJMOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRyYW5zZm9ybVJlcXVlc3Q6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdHJhbnNmb3JtUmVzcG9uc2U6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgcGFyYW1zU2VyaWFsaXplcjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0aW1lb3V0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRpbWVvdXRNZXNzYWdlOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHdpdGhDcmVkZW50aWFsczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB3aXRoWFNSRlRva2VuOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGFkYXB0ZXI6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgcmVzcG9uc2VUeXBlOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHhzcmZDb29raWVOYW1lOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHhzcmZIZWFkZXJOYW1lOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG9uVXBsb2FkUHJvZ3Jlc3M6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgb25Eb3dubG9hZFByb2dyZXNzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGRlY29tcHJlc3M6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgbWF4Q29udGVudExlbmd0aDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBtYXhCb2R5TGVuZ3RoOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGJlZm9yZVJlZGlyZWN0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRyYW5zcG9ydDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBodHRwQWdlbnQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgaHR0cHNBZ2VudDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBjYW5jZWxUb2tlbjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBzb2NrZXRQYXRoOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHJlc3BvbnNlRW5jb2Rpbmc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdmFsaWRhdGVTdGF0dXM6IG1lcmdlRGlyZWN0S2V5cyxcbiAgICBoZWFkZXJzOiAoYSwgYiwgcHJvcCkgPT5cbiAgICAgIG1lcmdlRGVlcFByb3BlcnRpZXMoaGVhZGVyc1RvT2JqZWN0KGEpLCBoZWFkZXJzVG9PYmplY3QoYiksIHByb3AsIHRydWUpLFxuICB9O1xuXG4gIHV0aWxzLmZvckVhY2goT2JqZWN0LmtleXMoeyAuLi5jb25maWcxLCAuLi5jb25maWcyIH0pLCBmdW5jdGlvbiBjb21wdXRlQ29uZmlnVmFsdWUocHJvcCkge1xuICAgIGlmIChwcm9wID09PSAnX19wcm90b19fJyB8fCBwcm9wID09PSAnY29uc3RydWN0b3InIHx8IHByb3AgPT09ICdwcm90b3R5cGUnKSByZXR1cm47XG4gICAgY29uc3QgbWVyZ2UgPSB1dGlscy5oYXNPd25Qcm9wKG1lcmdlTWFwLCBwcm9wKSA/IG1lcmdlTWFwW3Byb3BdIDogbWVyZ2VEZWVwUHJvcGVydGllcztcbiAgICBjb25zdCBjb25maWdWYWx1ZSA9IG1lcmdlKGNvbmZpZzFbcHJvcF0sIGNvbmZpZzJbcHJvcF0sIHByb3ApO1xuICAgICh1dGlscy5pc1VuZGVmaW5lZChjb25maWdWYWx1ZSkgJiYgbWVyZ2UgIT09IG1lcmdlRGlyZWN0S2V5cykgfHwgKGNvbmZpZ1twcm9wXSA9IGNvbmZpZ1ZhbHVlKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGNvbmZpZztcbn1cbiIsImltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IGlzVVJMU2FtZU9yaWdpbiBmcm9tICcuL2lzVVJMU2FtZU9yaWdpbi5qcyc7XG5pbXBvcnQgY29va2llcyBmcm9tICcuL2Nvb2tpZXMuanMnO1xuaW1wb3J0IGJ1aWxkRnVsbFBhdGggZnJvbSAnLi4vY29yZS9idWlsZEZ1bGxQYXRoLmpzJztcbmltcG9ydCBtZXJnZUNvbmZpZyBmcm9tICcuLi9jb3JlL21lcmdlQ29uZmlnLmpzJztcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSAnLi4vY29yZS9BeGlvc0hlYWRlcnMuanMnO1xuaW1wb3J0IGJ1aWxkVVJMIGZyb20gJy4vYnVpbGRVUkwuanMnO1xuXG5leHBvcnQgZGVmYXVsdCAoY29uZmlnKSA9PiB7XG4gIGNvbnN0IG5ld0NvbmZpZyA9IG1lcmdlQ29uZmlnKHt9LCBjb25maWcpO1xuXG4gIGxldCB7IGRhdGEsIHdpdGhYU1JGVG9rZW4sIHhzcmZIZWFkZXJOYW1lLCB4c3JmQ29va2llTmFtZSwgaGVhZGVycywgYXV0aCB9ID0gbmV3Q29uZmlnO1xuXG4gIG5ld0NvbmZpZy5oZWFkZXJzID0gaGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKGhlYWRlcnMpO1xuXG4gIG5ld0NvbmZpZy51cmwgPSBidWlsZFVSTChcbiAgICBidWlsZEZ1bGxQYXRoKG5ld0NvbmZpZy5iYXNlVVJMLCBuZXdDb25maWcudXJsLCBuZXdDb25maWcuYWxsb3dBYnNvbHV0ZVVybHMpLFxuICAgIGNvbmZpZy5wYXJhbXMsXG4gICAgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXJcbiAgKTtcblxuICAvLyBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uXG4gIGlmIChhdXRoKSB7XG4gICAgaGVhZGVycy5zZXQoXG4gICAgICAnQXV0aG9yaXphdGlvbicsXG4gICAgICAnQmFzaWMgJyArXG4gICAgICAgIGJ0b2EoXG4gICAgICAgICAgKGF1dGgudXNlcm5hbWUgfHwgJycpICtcbiAgICAgICAgICAgICc6JyArXG4gICAgICAgICAgICAoYXV0aC5wYXNzd29yZCA/IHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChhdXRoLnBhc3N3b3JkKSkgOiAnJylcbiAgICAgICAgKVxuICAgICk7XG4gIH1cblxuICBpZiAodXRpbHMuaXNGb3JtRGF0YShkYXRhKSkge1xuICAgIGlmIChwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYgfHwgcGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52KSB7XG4gICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKHVuZGVmaW5lZCk7IC8vIGJyb3dzZXIgaGFuZGxlcyBpdFxuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNGdW5jdGlvbihkYXRhLmdldEhlYWRlcnMpKSB7XG4gICAgICAvLyBOb2RlLmpzIEZvcm1EYXRhIChsaWtlIGZvcm0tZGF0YSBwYWNrYWdlKVxuICAgICAgY29uc3QgZm9ybUhlYWRlcnMgPSBkYXRhLmdldEhlYWRlcnMoKTtcbiAgICAgIC8vIE9ubHkgc2V0IHNhZmUgaGVhZGVycyB0byBhdm9pZCBvdmVyd3JpdGluZyBzZWN1cml0eSBoZWFkZXJzXG4gICAgICBjb25zdCBhbGxvd2VkSGVhZGVycyA9IFsnY29udGVudC10eXBlJywgJ2NvbnRlbnQtbGVuZ3RoJ107XG4gICAgICBPYmplY3QuZW50cmllcyhmb3JtSGVhZGVycykuZm9yRWFjaCgoW2tleSwgdmFsXSkgPT4ge1xuICAgICAgICBpZiAoYWxsb3dlZEhlYWRlcnMuaW5jbHVkZXMoa2V5LnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgaGVhZGVycy5zZXQoa2V5LCB2YWwpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvLyBBZGQgeHNyZiBoZWFkZXJcbiAgLy8gVGhpcyBpcyBvbmx5IGRvbmUgaWYgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnQuXG4gIC8vIFNwZWNpZmljYWxseSBub3QgaWYgd2UncmUgaW4gYSB3ZWIgd29ya2VyLCBvciByZWFjdC1uYXRpdmUuXG5cbiAgaWYgKHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlckVudikge1xuICAgIHdpdGhYU1JGVG9rZW4gJiYgdXRpbHMuaXNGdW5jdGlvbih3aXRoWFNSRlRva2VuKSAmJiAod2l0aFhTUkZUb2tlbiA9IHdpdGhYU1JGVG9rZW4obmV3Q29uZmlnKSk7XG5cbiAgICBpZiAod2l0aFhTUkZUb2tlbiB8fCAod2l0aFhTUkZUb2tlbiAhPT0gZmFsc2UgJiYgaXNVUkxTYW1lT3JpZ2luKG5ld0NvbmZpZy51cmwpKSkge1xuICAgICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgICBjb25zdCB4c3JmVmFsdWUgPSB4c3JmSGVhZGVyTmFtZSAmJiB4c3JmQ29va2llTmFtZSAmJiBjb29raWVzLnJlYWQoeHNyZkNvb2tpZU5hbWUpO1xuXG4gICAgICBpZiAoeHNyZlZhbHVlKSB7XG4gICAgICAgIGhlYWRlcnMuc2V0KHhzcmZIZWFkZXJOYW1lLCB4c3JmVmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXdDb25maWc7XG59O1xuIiwiaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBzZXR0bGUgZnJvbSAnLi4vY29yZS9zZXR0bGUuanMnO1xuaW1wb3J0IHRyYW5zaXRpb25hbERlZmF1bHRzIGZyb20gJy4uL2RlZmF1bHRzL3RyYW5zaXRpb25hbC5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IENhbmNlbGVkRXJyb3IgZnJvbSAnLi4vY2FuY2VsL0NhbmNlbGVkRXJyb3IuanMnO1xuaW1wb3J0IHBhcnNlUHJvdG9jb2wgZnJvbSAnLi4vaGVscGVycy9wYXJzZVByb3RvY29sLmpzJztcbmltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gJy4uL2NvcmUvQXhpb3NIZWFkZXJzLmpzJztcbmltcG9ydCB7IHByb2dyZXNzRXZlbnRSZWR1Y2VyIH0gZnJvbSAnLi4vaGVscGVycy9wcm9ncmVzc0V2ZW50UmVkdWNlci5qcyc7XG5pbXBvcnQgcmVzb2x2ZUNvbmZpZyBmcm9tICcuLi9oZWxwZXJzL3Jlc29sdmVDb25maWcuanMnO1xuXG5jb25zdCBpc1hIUkFkYXB0ZXJTdXBwb3J0ZWQgPSB0eXBlb2YgWE1MSHR0cFJlcXVlc3QgIT09ICd1bmRlZmluZWQnO1xuXG5leHBvcnQgZGVmYXVsdCBpc1hIUkFkYXB0ZXJTdXBwb3J0ZWQgJiZcbiAgZnVuY3Rpb24gKGNvbmZpZykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiBkaXNwYXRjaFhoclJlcXVlc3QocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBjb25zdCBfY29uZmlnID0gcmVzb2x2ZUNvbmZpZyhjb25maWcpO1xuICAgICAgbGV0IHJlcXVlc3REYXRhID0gX2NvbmZpZy5kYXRhO1xuICAgICAgY29uc3QgcmVxdWVzdEhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShfY29uZmlnLmhlYWRlcnMpLm5vcm1hbGl6ZSgpO1xuICAgICAgbGV0IHsgcmVzcG9uc2VUeXBlLCBvblVwbG9hZFByb2dyZXNzLCBvbkRvd25sb2FkUHJvZ3Jlc3MgfSA9IF9jb25maWc7XG4gICAgICBsZXQgb25DYW5jZWxlZDtcbiAgICAgIGxldCB1cGxvYWRUaHJvdHRsZWQsIGRvd25sb2FkVGhyb3R0bGVkO1xuICAgICAgbGV0IGZsdXNoVXBsb2FkLCBmbHVzaERvd25sb2FkO1xuXG4gICAgICBmdW5jdGlvbiBkb25lKCkge1xuICAgICAgICBmbHVzaFVwbG9hZCAmJiBmbHVzaFVwbG9hZCgpOyAvLyBmbHVzaCBldmVudHNcbiAgICAgICAgZmx1c2hEb3dubG9hZCAmJiBmbHVzaERvd25sb2FkKCk7IC8vIGZsdXNoIGV2ZW50c1xuXG4gICAgICAgIF9jb25maWcuY2FuY2VsVG9rZW4gJiYgX2NvbmZpZy5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShvbkNhbmNlbGVkKTtcblxuICAgICAgICBfY29uZmlnLnNpZ25hbCAmJiBfY29uZmlnLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQ2FuY2VsZWQpO1xuICAgICAgfVxuXG4gICAgICBsZXQgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXG4gICAgICByZXF1ZXN0Lm9wZW4oX2NvbmZpZy5tZXRob2QudG9VcHBlckNhc2UoKSwgX2NvbmZpZy51cmwsIHRydWUpO1xuXG4gICAgICAvLyBTZXQgdGhlIHJlcXVlc3QgdGltZW91dCBpbiBNU1xuICAgICAgcmVxdWVzdC50aW1lb3V0ID0gX2NvbmZpZy50aW1lb3V0O1xuXG4gICAgICBmdW5jdGlvbiBvbmxvYWRlbmQoKSB7XG4gICAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBQcmVwYXJlIHRoZSByZXNwb25zZVxuICAgICAgICBjb25zdCByZXNwb25zZUhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShcbiAgICAgICAgICAnZ2V0QWxsUmVzcG9uc2VIZWFkZXJzJyBpbiByZXF1ZXN0ICYmIHJlcXVlc3QuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKClcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgcmVzcG9uc2VEYXRhID1cbiAgICAgICAgICAhcmVzcG9uc2VUeXBlIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ3RleHQnIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nXG4gICAgICAgICAgICA/IHJlcXVlc3QucmVzcG9uc2VUZXh0XG4gICAgICAgICAgICA6IHJlcXVlc3QucmVzcG9uc2U7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgICAgICAgIGRhdGE6IHJlc3BvbnNlRGF0YSxcbiAgICAgICAgICBzdGF0dXM6IHJlcXVlc3Quc3RhdHVzLFxuICAgICAgICAgIHN0YXR1c1RleHQ6IHJlcXVlc3Quc3RhdHVzVGV4dCxcbiAgICAgICAgICBoZWFkZXJzOiByZXNwb25zZUhlYWRlcnMsXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIHJlcXVlc3QsXG4gICAgICAgIH07XG5cbiAgICAgICAgc2V0dGxlKFxuICAgICAgICAgIGZ1bmN0aW9uIF9yZXNvbHZlKHZhbHVlKSB7XG4gICAgICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZ1bmN0aW9uIF9yZWplY3QoZXJyKSB7XG4gICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc3BvbnNlXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKCdvbmxvYWRlbmQnIGluIHJlcXVlc3QpIHtcbiAgICAgICAgLy8gVXNlIG9ubG9hZGVuZCBpZiBhdmFpbGFibGVcbiAgICAgICAgcmVxdWVzdC5vbmxvYWRlbmQgPSBvbmxvYWRlbmQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBMaXN0ZW4gZm9yIHJlYWR5IHN0YXRlIHRvIGVtdWxhdGUgb25sb2FkZW5kXG4gICAgICAgIHJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gaGFuZGxlTG9hZCgpIHtcbiAgICAgICAgICBpZiAoIXJlcXVlc3QgfHwgcmVxdWVzdC5yZWFkeVN0YXRlICE9PSA0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gVGhlIHJlcXVlc3QgZXJyb3JlZCBvdXQgYW5kIHdlIGRpZG4ndCBnZXQgYSByZXNwb25zZSwgdGhpcyB3aWxsIGJlXG4gICAgICAgICAgLy8gaGFuZGxlZCBieSBvbmVycm9yIGluc3RlYWRcbiAgICAgICAgICAvLyBXaXRoIG9uZSBleGNlcHRpb246IHJlcXVlc3QgdGhhdCB1c2luZyBmaWxlOiBwcm90b2NvbCwgbW9zdCBicm93c2Vyc1xuICAgICAgICAgIC8vIHdpbGwgcmV0dXJuIHN0YXR1cyBhcyAwIGV2ZW4gdGhvdWdoIGl0J3MgYSBzdWNjZXNzZnVsIHJlcXVlc3RcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICByZXF1ZXN0LnN0YXR1cyA9PT0gMCAmJlxuICAgICAgICAgICAgIShyZXF1ZXN0LnJlc3BvbnNlVVJMICYmIHJlcXVlc3QucmVzcG9uc2VVUkwuaW5kZXhPZignZmlsZTonKSA9PT0gMClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gcmVhZHlzdGF0ZSBoYW5kbGVyIGlzIGNhbGxpbmcgYmVmb3JlIG9uZXJyb3Igb3Igb250aW1lb3V0IGhhbmRsZXJzLFxuICAgICAgICAgIC8vIHNvIHdlIHNob3VsZCBjYWxsIG9ubG9hZGVuZCBvbiB0aGUgbmV4dCAndGljaydcbiAgICAgICAgICBzZXRUaW1lb3V0KG9ubG9hZGVuZCk7XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIEhhbmRsZSBicm93c2VyIHJlcXVlc3QgY2FuY2VsbGF0aW9uIChhcyBvcHBvc2VkIHRvIGEgbWFudWFsIGNhbmNlbGxhdGlvbilcbiAgICAgIHJlcXVlc3Qub25hYm9ydCA9IGZ1bmN0aW9uIGhhbmRsZUFib3J0KCkge1xuICAgICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ1JlcXVlc3QgYWJvcnRlZCcsIEF4aW9zRXJyb3IuRUNPTk5BQk9SVEVELCBjb25maWcsIHJlcXVlc3QpKTtcblxuICAgICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgICAgfTtcblxuICAgICAgLy8gSGFuZGxlIGxvdyBsZXZlbCBuZXR3b3JrIGVycm9yc1xuICAgICAgcmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24gaGFuZGxlRXJyb3IoZXZlbnQpIHtcbiAgICAgICAgLy8gQnJvd3NlcnMgZGVsaXZlciBhIFByb2dyZXNzRXZlbnQgaW4gWEhSIG9uZXJyb3JcbiAgICAgICAgLy8gKG1lc3NhZ2UgbWF5IGJlIGVtcHR5OyB3aGVuIHByZXNlbnQsIHN1cmZhY2UgaXQpXG4gICAgICAgIC8vIFNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9BUEkvWE1MSHR0cFJlcXVlc3QvZXJyb3JfZXZlbnRcbiAgICAgICAgY29uc3QgbXNnID0gZXZlbnQgJiYgZXZlbnQubWVzc2FnZSA/IGV2ZW50Lm1lc3NhZ2UgOiAnTmV0d29yayBFcnJvcic7XG4gICAgICAgIGNvbnN0IGVyciA9IG5ldyBBeGlvc0Vycm9yKG1zZywgQXhpb3NFcnJvci5FUlJfTkVUV09SSywgY29uZmlnLCByZXF1ZXN0KTtcbiAgICAgICAgLy8gYXR0YWNoIHRoZSB1bmRlcmx5aW5nIGV2ZW50IGZvciBjb25zdW1lcnMgd2hvIHdhbnQgZGV0YWlsc1xuICAgICAgICBlcnIuZXZlbnQgPSBldmVudCB8fCBudWxsO1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgICB9O1xuXG4gICAgICAvLyBIYW5kbGUgdGltZW91dFxuICAgICAgcmVxdWVzdC5vbnRpbWVvdXQgPSBmdW5jdGlvbiBoYW5kbGVUaW1lb3V0KCkge1xuICAgICAgICBsZXQgdGltZW91dEVycm9yTWVzc2FnZSA9IF9jb25maWcudGltZW91dFxuICAgICAgICAgID8gJ3RpbWVvdXQgb2YgJyArIF9jb25maWcudGltZW91dCArICdtcyBleGNlZWRlZCdcbiAgICAgICAgICA6ICd0aW1lb3V0IGV4Y2VlZGVkJztcbiAgICAgICAgY29uc3QgdHJhbnNpdGlvbmFsID0gX2NvbmZpZy50cmFuc2l0aW9uYWwgfHwgdHJhbnNpdGlvbmFsRGVmYXVsdHM7XG4gICAgICAgIGlmIChfY29uZmlnLnRpbWVvdXRFcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgICB0aW1lb3V0RXJyb3JNZXNzYWdlID0gX2NvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChcbiAgICAgICAgICBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgICAgIHRpbWVvdXRFcnJvck1lc3NhZ2UsXG4gICAgICAgICAgICB0cmFuc2l0aW9uYWwuY2xhcmlmeVRpbWVvdXRFcnJvciA/IEF4aW9zRXJyb3IuRVRJTUVET1VUIDogQXhpb3NFcnJvci5FQ09OTkFCT1JURUQsXG4gICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICByZXF1ZXN0XG4gICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgICB9O1xuXG4gICAgICAvLyBSZW1vdmUgQ29udGVudC1UeXBlIGlmIGRhdGEgaXMgdW5kZWZpbmVkXG4gICAgICByZXF1ZXN0RGF0YSA9PT0gdW5kZWZpbmVkICYmIHJlcXVlc3RIZWFkZXJzLnNldENvbnRlbnRUeXBlKG51bGwpO1xuXG4gICAgICAvLyBBZGQgaGVhZGVycyB0byB0aGUgcmVxdWVzdFxuICAgICAgaWYgKCdzZXRSZXF1ZXN0SGVhZGVyJyBpbiByZXF1ZXN0KSB7XG4gICAgICAgIHV0aWxzLmZvckVhY2gocmVxdWVzdEhlYWRlcnMudG9KU09OKCksIGZ1bmN0aW9uIHNldFJlcXVlc3RIZWFkZXIodmFsLCBrZXkpIHtcbiAgICAgICAgICByZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoa2V5LCB2YWwpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gQWRkIHdpdGhDcmVkZW50aWFscyB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChfY29uZmlnLndpdGhDcmVkZW50aWFscykpIHtcbiAgICAgICAgcmVxdWVzdC53aXRoQ3JlZGVudGlhbHMgPSAhIV9jb25maWcud2l0aENyZWRlbnRpYWxzO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgcmVzcG9uc2VUeXBlIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgICBpZiAocmVzcG9uc2VUeXBlICYmIHJlc3BvbnNlVHlwZSAhPT0gJ2pzb24nKSB7XG4gICAgICAgIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gX2NvbmZpZy5yZXNwb25zZVR5cGU7XG4gICAgICB9XG5cbiAgICAgIC8vIEhhbmRsZSBwcm9ncmVzcyBpZiBuZWVkZWRcbiAgICAgIGlmIChvbkRvd25sb2FkUHJvZ3Jlc3MpIHtcbiAgICAgICAgW2Rvd25sb2FkVGhyb3R0bGVkLCBmbHVzaERvd25sb2FkXSA9IHByb2dyZXNzRXZlbnRSZWR1Y2VyKG9uRG93bmxvYWRQcm9ncmVzcywgdHJ1ZSk7XG4gICAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBkb3dubG9hZFRocm90dGxlZCk7XG4gICAgICB9XG5cbiAgICAgIC8vIE5vdCBhbGwgYnJvd3NlcnMgc3VwcG9ydCB1cGxvYWQgZXZlbnRzXG4gICAgICBpZiAob25VcGxvYWRQcm9ncmVzcyAmJiByZXF1ZXN0LnVwbG9hZCkge1xuICAgICAgICBbdXBsb2FkVGhyb3R0bGVkLCBmbHVzaFVwbG9hZF0gPSBwcm9ncmVzc0V2ZW50UmVkdWNlcihvblVwbG9hZFByb2dyZXNzKTtcblxuICAgICAgICByZXF1ZXN0LnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHVwbG9hZFRocm90dGxlZCk7XG5cbiAgICAgICAgcmVxdWVzdC51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVuZCcsIGZsdXNoVXBsb2FkKTtcbiAgICAgIH1cblxuICAgICAgaWYgKF9jb25maWcuY2FuY2VsVG9rZW4gfHwgX2NvbmZpZy5zaWduYWwpIHtcbiAgICAgICAgLy8gSGFuZGxlIGNhbmNlbGxhdGlvblxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgICAgICBvbkNhbmNlbGVkID0gKGNhbmNlbCkgPT4ge1xuICAgICAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZWplY3QoIWNhbmNlbCB8fCBjYW5jZWwudHlwZSA/IG5ldyBDYW5jZWxlZEVycm9yKG51bGwsIGNvbmZpZywgcmVxdWVzdCkgOiBjYW5jZWwpO1xuICAgICAgICAgIHJlcXVlc3QuYWJvcnQoKTtcbiAgICAgICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICAgICAgfTtcblxuICAgICAgICBfY29uZmlnLmNhbmNlbFRva2VuICYmIF9jb25maWcuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKG9uQ2FuY2VsZWQpO1xuICAgICAgICBpZiAoX2NvbmZpZy5zaWduYWwpIHtcbiAgICAgICAgICBfY29uZmlnLnNpZ25hbC5hYm9ydGVkXG4gICAgICAgICAgICA/IG9uQ2FuY2VsZWQoKVxuICAgICAgICAgICAgOiBfY29uZmlnLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQ2FuY2VsZWQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHByb3RvY29sID0gcGFyc2VQcm90b2NvbChfY29uZmlnLnVybCk7XG5cbiAgICAgIGlmIChwcm90b2NvbCAmJiBwbGF0Zm9ybS5wcm90b2NvbHMuaW5kZXhPZihwcm90b2NvbCkgPT09IC0xKSB7XG4gICAgICAgIHJlamVjdChcbiAgICAgICAgICBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgICAgICdVbnN1cHBvcnRlZCBwcm90b2NvbCAnICsgcHJvdG9jb2wgKyAnOicsXG4gICAgICAgICAgICBBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCxcbiAgICAgICAgICAgIGNvbmZpZ1xuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBTZW5kIHRoZSByZXF1ZXN0XG4gICAgICByZXF1ZXN0LnNlbmQocmVxdWVzdERhdGEgfHwgbnVsbCk7XG4gICAgfSk7XG4gIH07XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBhcnNlUHJvdG9jb2wodXJsKSB7XG4gIGNvbnN0IG1hdGNoID0gL14oWy0rXFx3XXsxLDI1fSkoOj9cXC9cXC98OikvLmV4ZWModXJsKTtcbiAgcmV0dXJuIChtYXRjaCAmJiBtYXRjaFsxXSkgfHwgJyc7XG59XG4iLCJpbXBvcnQgQ2FuY2VsZWRFcnJvciBmcm9tICcuLi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcblxuY29uc3QgY29tcG9zZVNpZ25hbHMgPSAoc2lnbmFscywgdGltZW91dCkgPT4ge1xuICBjb25zdCB7IGxlbmd0aCB9ID0gKHNpZ25hbHMgPSBzaWduYWxzID8gc2lnbmFscy5maWx0ZXIoQm9vbGVhbikgOiBbXSk7XG5cbiAgaWYgKHRpbWVvdXQgfHwgbGVuZ3RoKSB7XG4gICAgbGV0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICBsZXQgYWJvcnRlZDtcblxuICAgIGNvbnN0IG9uYWJvcnQgPSBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICBpZiAoIWFib3J0ZWQpIHtcbiAgICAgICAgYWJvcnRlZCA9IHRydWU7XG4gICAgICAgIHVuc3Vic2NyaWJlKCk7XG4gICAgICAgIGNvbnN0IGVyciA9IHJlYXNvbiBpbnN0YW5jZW9mIEVycm9yID8gcmVhc29uIDogdGhpcy5yZWFzb247XG4gICAgICAgIGNvbnRyb2xsZXIuYWJvcnQoXG4gICAgICAgICAgZXJyIGluc3RhbmNlb2YgQXhpb3NFcnJvclxuICAgICAgICAgICAgPyBlcnJcbiAgICAgICAgICAgIDogbmV3IENhbmNlbGVkRXJyb3IoZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IGVycilcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgbGV0IHRpbWVyID1cbiAgICAgIHRpbWVvdXQgJiZcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aW1lciA9IG51bGw7XG4gICAgICAgIG9uYWJvcnQobmV3IEF4aW9zRXJyb3IoYHRpbWVvdXQgb2YgJHt0aW1lb3V0fW1zIGV4Y2VlZGVkYCwgQXhpb3NFcnJvci5FVElNRURPVVQpKTtcbiAgICAgIH0sIHRpbWVvdXQpO1xuXG4gICAgY29uc3QgdW5zdWJzY3JpYmUgPSAoKSA9PiB7XG4gICAgICBpZiAoc2lnbmFscykge1xuICAgICAgICB0aW1lciAmJiBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICB0aW1lciA9IG51bGw7XG4gICAgICAgIHNpZ25hbHMuZm9yRWFjaCgoc2lnbmFsKSA9PiB7XG4gICAgICAgICAgc2lnbmFsLnVuc3Vic2NyaWJlXG4gICAgICAgICAgICA/IHNpZ25hbC51bnN1YnNjcmliZShvbmFib3J0KVxuICAgICAgICAgICAgOiBzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbmFib3J0KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHNpZ25hbHMgPSBudWxsO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBzaWduYWxzLmZvckVhY2goKHNpZ25hbCkgPT4gc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25hYm9ydCkpO1xuXG4gICAgY29uc3QgeyBzaWduYWwgfSA9IGNvbnRyb2xsZXI7XG5cbiAgICBzaWduYWwudW5zdWJzY3JpYmUgPSAoKSA9PiB1dGlscy5hc2FwKHVuc3Vic2NyaWJlKTtcblxuICAgIHJldHVybiBzaWduYWw7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvc2VTaWduYWxzO1xuIiwiZXhwb3J0IGNvbnN0IHN0cmVhbUNodW5rID0gZnVuY3Rpb24qIChjaHVuaywgY2h1bmtTaXplKSB7XG4gIGxldCBsZW4gPSBjaHVuay5ieXRlTGVuZ3RoO1xuXG4gIGlmICghY2h1bmtTaXplIHx8IGxlbiA8IGNodW5rU2l6ZSkge1xuICAgIHlpZWxkIGNodW5rO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBwb3MgPSAwO1xuICBsZXQgZW5kO1xuXG4gIHdoaWxlIChwb3MgPCBsZW4pIHtcbiAgICBlbmQgPSBwb3MgKyBjaHVua1NpemU7XG4gICAgeWllbGQgY2h1bmsuc2xpY2UocG9zLCBlbmQpO1xuICAgIHBvcyA9IGVuZDtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHJlYWRCeXRlcyA9IGFzeW5jIGZ1bmN0aW9uKiAoaXRlcmFibGUsIGNodW5rU2l6ZSkge1xuICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIHJlYWRTdHJlYW0oaXRlcmFibGUpKSB7XG4gICAgeWllbGQqIHN0cmVhbUNodW5rKGNodW5rLCBjaHVua1NpemUpO1xuICB9XG59O1xuXG5jb25zdCByZWFkU3RyZWFtID0gYXN5bmMgZnVuY3Rpb24qIChzdHJlYW0pIHtcbiAgaWYgKHN0cmVhbVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0pIHtcbiAgICB5aWVsZCogc3RyZWFtO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHJlYWRlciA9IHN0cmVhbS5nZXRSZWFkZXIoKTtcbiAgdHJ5IHtcbiAgICBmb3IgKDs7KSB7XG4gICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCByZWFkZXIucmVhZCgpO1xuICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICB5aWVsZCB2YWx1ZTtcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgcmVhZGVyLmNhbmNlbCgpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgdHJhY2tTdHJlYW0gPSAoc3RyZWFtLCBjaHVua1NpemUsIG9uUHJvZ3Jlc3MsIG9uRmluaXNoKSA9PiB7XG4gIGNvbnN0IGl0ZXJhdG9yID0gcmVhZEJ5dGVzKHN0cmVhbSwgY2h1bmtTaXplKTtcblxuICBsZXQgYnl0ZXMgPSAwO1xuICBsZXQgZG9uZTtcbiAgbGV0IF9vbkZpbmlzaCA9IChlKSA9PiB7XG4gICAgaWYgKCFkb25lKSB7XG4gICAgICBkb25lID0gdHJ1ZTtcbiAgICAgIG9uRmluaXNoICYmIG9uRmluaXNoKGUpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKFxuICAgIHtcbiAgICAgIGFzeW5jIHB1bGwoY29udHJvbGxlcikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IGl0ZXJhdG9yLm5leHQoKTtcblxuICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICBfb25GaW5pc2goKTtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsZXQgbGVuID0gdmFsdWUuYnl0ZUxlbmd0aDtcbiAgICAgICAgICBpZiAob25Qcm9ncmVzcykge1xuICAgICAgICAgICAgbGV0IGxvYWRlZEJ5dGVzID0gKGJ5dGVzICs9IGxlbik7XG4gICAgICAgICAgICBvblByb2dyZXNzKGxvYWRlZEJ5dGVzKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KHZhbHVlKSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIF9vbkZpbmlzaChlcnIpO1xuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGNhbmNlbChyZWFzb24pIHtcbiAgICAgICAgX29uRmluaXNoKHJlYXNvbik7XG4gICAgICAgIHJldHVybiBpdGVyYXRvci5yZXR1cm4oKTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBoaWdoV2F0ZXJNYXJrOiAyLFxuICAgIH1cbiAgKTtcbn07XG4iLCJpbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4uL2NvcmUvQXhpb3NFcnJvci5qcyc7XG5pbXBvcnQgY29tcG9zZVNpZ25hbHMgZnJvbSAnLi4vaGVscGVycy9jb21wb3NlU2lnbmFscy5qcyc7XG5pbXBvcnQgeyB0cmFja1N0cmVhbSB9IGZyb20gJy4uL2hlbHBlcnMvdHJhY2tTdHJlYW0uanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuLi9jb3JlL0F4aW9zSGVhZGVycy5qcyc7XG5pbXBvcnQge1xuICBwcm9ncmVzc0V2ZW50UmVkdWNlcixcbiAgcHJvZ3Jlc3NFdmVudERlY29yYXRvcixcbiAgYXN5bmNEZWNvcmF0b3IsXG59IGZyb20gJy4uL2hlbHBlcnMvcHJvZ3Jlc3NFdmVudFJlZHVjZXIuanMnO1xuaW1wb3J0IHJlc29sdmVDb25maWcgZnJvbSAnLi4vaGVscGVycy9yZXNvbHZlQ29uZmlnLmpzJztcbmltcG9ydCBzZXR0bGUgZnJvbSAnLi4vY29yZS9zZXR0bGUuanMnO1xuXG5jb25zdCBERUZBVUxUX0NIVU5LX1NJWkUgPSA2NCAqIDEwMjQ7XG5cbmNvbnN0IHsgaXNGdW5jdGlvbiB9ID0gdXRpbHM7XG5cbmNvbnN0IGdsb2JhbEZldGNoQVBJID0gKCh7IFJlcXVlc3QsIFJlc3BvbnNlIH0pID0+ICh7XG4gIFJlcXVlc3QsXG4gIFJlc3BvbnNlLFxufSkpKHV0aWxzLmdsb2JhbCk7XG5cbmNvbnN0IHsgUmVhZGFibGVTdHJlYW0sIFRleHRFbmNvZGVyIH0gPSB1dGlscy5nbG9iYWw7XG5cbmNvbnN0IHRlc3QgPSAoZm4sIC4uLmFyZ3MpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFmbiguLi5hcmdzKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuY29uc3QgZmFjdG9yeSA9IChlbnYpID0+IHtcbiAgZW52ID0gdXRpbHMubWVyZ2UuY2FsbChcbiAgICB7XG4gICAgICBza2lwVW5kZWZpbmVkOiB0cnVlLFxuICAgIH0sXG4gICAgZ2xvYmFsRmV0Y2hBUEksXG4gICAgZW52XG4gICk7XG5cbiAgY29uc3QgeyBmZXRjaDogZW52RmV0Y2gsIFJlcXVlc3QsIFJlc3BvbnNlIH0gPSBlbnY7XG4gIGNvbnN0IGlzRmV0Y2hTdXBwb3J0ZWQgPSBlbnZGZXRjaCA/IGlzRnVuY3Rpb24oZW52RmV0Y2gpIDogdHlwZW9mIGZldGNoID09PSAnZnVuY3Rpb24nO1xuICBjb25zdCBpc1JlcXVlc3RTdXBwb3J0ZWQgPSBpc0Z1bmN0aW9uKFJlcXVlc3QpO1xuICBjb25zdCBpc1Jlc3BvbnNlU3VwcG9ydGVkID0gaXNGdW5jdGlvbihSZXNwb25zZSk7XG5cbiAgaWYgKCFpc0ZldGNoU3VwcG9ydGVkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgaXNSZWFkYWJsZVN0cmVhbVN1cHBvcnRlZCA9IGlzRmV0Y2hTdXBwb3J0ZWQgJiYgaXNGdW5jdGlvbihSZWFkYWJsZVN0cmVhbSk7XG5cbiAgY29uc3QgZW5jb2RlVGV4dCA9XG4gICAgaXNGZXRjaFN1cHBvcnRlZCAmJlxuICAgICh0eXBlb2YgVGV4dEVuY29kZXIgPT09ICdmdW5jdGlvbidcbiAgICAgID8gKFxuICAgICAgICAgIChlbmNvZGVyKSA9PiAoc3RyKSA9PlxuICAgICAgICAgICAgZW5jb2Rlci5lbmNvZGUoc3RyKVxuICAgICAgICApKG5ldyBUZXh0RW5jb2RlcigpKVxuICAgICAgOiBhc3luYyAoc3RyKSA9PiBuZXcgVWludDhBcnJheShhd2FpdCBuZXcgUmVxdWVzdChzdHIpLmFycmF5QnVmZmVyKCkpKTtcblxuICBjb25zdCBzdXBwb3J0c1JlcXVlc3RTdHJlYW0gPVxuICAgIGlzUmVxdWVzdFN1cHBvcnRlZCAmJlxuICAgIGlzUmVhZGFibGVTdHJlYW1TdXBwb3J0ZWQgJiZcbiAgICB0ZXN0KCgpID0+IHtcbiAgICAgIGxldCBkdXBsZXhBY2Nlc3NlZCA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBib2R5ID0gbmV3IFJlYWRhYmxlU3RyZWFtKCk7XG5cbiAgICAgIGNvbnN0IGhhc0NvbnRlbnRUeXBlID0gbmV3IFJlcXVlc3QocGxhdGZvcm0ub3JpZ2luLCB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBnZXQgZHVwbGV4KCkge1xuICAgICAgICAgIGR1cGxleEFjY2Vzc2VkID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm4gJ2hhbGYnO1xuICAgICAgICB9LFxuICAgICAgfSkuaGVhZGVycy5oYXMoJ0NvbnRlbnQtVHlwZScpO1xuXG4gICAgICBib2R5LmNhbmNlbCgpO1xuXG4gICAgICByZXR1cm4gZHVwbGV4QWNjZXNzZWQgJiYgIWhhc0NvbnRlbnRUeXBlO1xuICAgIH0pO1xuXG4gIGNvbnN0IHN1cHBvcnRzUmVzcG9uc2VTdHJlYW0gPVxuICAgIGlzUmVzcG9uc2VTdXBwb3J0ZWQgJiZcbiAgICBpc1JlYWRhYmxlU3RyZWFtU3VwcG9ydGVkICYmXG4gICAgdGVzdCgoKSA9PiB1dGlscy5pc1JlYWRhYmxlU3RyZWFtKG5ldyBSZXNwb25zZSgnJykuYm9keSkpO1xuXG4gIGNvbnN0IHJlc29sdmVycyA9IHtcbiAgICBzdHJlYW06IHN1cHBvcnRzUmVzcG9uc2VTdHJlYW0gJiYgKChyZXMpID0+IHJlcy5ib2R5KSxcbiAgfTtcblxuICBpc0ZldGNoU3VwcG9ydGVkICYmXG4gICAgKCgpID0+IHtcbiAgICAgIFsndGV4dCcsICdhcnJheUJ1ZmZlcicsICdibG9iJywgJ2Zvcm1EYXRhJywgJ3N0cmVhbSddLmZvckVhY2goKHR5cGUpID0+IHtcbiAgICAgICAgIXJlc29sdmVyc1t0eXBlXSAmJlxuICAgICAgICAgIChyZXNvbHZlcnNbdHlwZV0gPSAocmVzLCBjb25maWcpID0+IHtcbiAgICAgICAgICAgIGxldCBtZXRob2QgPSByZXMgJiYgcmVzW3R5cGVdO1xuXG4gICAgICAgICAgICBpZiAobWV0aG9kKSB7XG4gICAgICAgICAgICAgIHJldHVybiBtZXRob2QuY2FsbChyZXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgICAgICAgYFJlc3BvbnNlIHR5cGUgJyR7dHlwZX0nIGlzIG5vdCBzdXBwb3J0ZWRgLFxuICAgICAgICAgICAgICBBeGlvc0Vycm9yLkVSUl9OT1RfU1VQUE9SVCxcbiAgICAgICAgICAgICAgY29uZmlnXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSkoKTtcblxuICBjb25zdCBnZXRCb2R5TGVuZ3RoID0gYXN5bmMgKGJvZHkpID0+IHtcbiAgICBpZiAoYm9keSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXNCbG9iKGJvZHkpKSB7XG4gICAgICByZXR1cm4gYm9keS5zaXplO1xuICAgIH1cblxuICAgIGlmICh1dGlscy5pc1NwZWNDb21wbGlhbnRGb3JtKGJvZHkpKSB7XG4gICAgICBjb25zdCBfcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHBsYXRmb3JtLm9yaWdpbiwge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgYm9keSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIChhd2FpdCBfcmVxdWVzdC5hcnJheUJ1ZmZlcigpKS5ieXRlTGVuZ3RoO1xuICAgIH1cblxuICAgIGlmICh1dGlscy5pc0FycmF5QnVmZmVyVmlldyhib2R5KSB8fCB1dGlscy5pc0FycmF5QnVmZmVyKGJvZHkpKSB7XG4gICAgICByZXR1cm4gYm9keS5ieXRlTGVuZ3RoO1xuICAgIH1cblxuICAgIGlmICh1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhib2R5KSkge1xuICAgICAgYm9keSA9IGJvZHkgKyAnJztcbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXNTdHJpbmcoYm9keSkpIHtcbiAgICAgIHJldHVybiAoYXdhaXQgZW5jb2RlVGV4dChib2R5KSkuYnl0ZUxlbmd0aDtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgcmVzb2x2ZUJvZHlMZW5ndGggPSBhc3luYyAoaGVhZGVycywgYm9keSkgPT4ge1xuICAgIGNvbnN0IGxlbmd0aCA9IHV0aWxzLnRvRmluaXRlTnVtYmVyKGhlYWRlcnMuZ2V0Q29udGVudExlbmd0aCgpKTtcblxuICAgIHJldHVybiBsZW5ndGggPT0gbnVsbCA/IGdldEJvZHlMZW5ndGgoYm9keSkgOiBsZW5ndGg7XG4gIH07XG5cbiAgcmV0dXJuIGFzeW5jIChjb25maWcpID0+IHtcbiAgICBsZXQge1xuICAgICAgdXJsLFxuICAgICAgbWV0aG9kLFxuICAgICAgZGF0YSxcbiAgICAgIHNpZ25hbCxcbiAgICAgIGNhbmNlbFRva2VuLFxuICAgICAgdGltZW91dCxcbiAgICAgIG9uRG93bmxvYWRQcm9ncmVzcyxcbiAgICAgIG9uVXBsb2FkUHJvZ3Jlc3MsXG4gICAgICByZXNwb25zZVR5cGUsXG4gICAgICBoZWFkZXJzLFxuICAgICAgd2l0aENyZWRlbnRpYWxzID0gJ3NhbWUtb3JpZ2luJyxcbiAgICAgIGZldGNoT3B0aW9ucyxcbiAgICB9ID0gcmVzb2x2ZUNvbmZpZyhjb25maWcpO1xuXG4gICAgbGV0IF9mZXRjaCA9IGVudkZldGNoIHx8IGZldGNoO1xuXG4gICAgcmVzcG9uc2VUeXBlID0gcmVzcG9uc2VUeXBlID8gKHJlc3BvbnNlVHlwZSArICcnKS50b0xvd2VyQ2FzZSgpIDogJ3RleHQnO1xuXG4gICAgbGV0IGNvbXBvc2VkU2lnbmFsID0gY29tcG9zZVNpZ25hbHMoXG4gICAgICBbc2lnbmFsLCBjYW5jZWxUb2tlbiAmJiBjYW5jZWxUb2tlbi50b0Fib3J0U2lnbmFsKCldLFxuICAgICAgdGltZW91dFxuICAgICk7XG5cbiAgICBsZXQgcmVxdWVzdCA9IG51bGw7XG5cbiAgICBjb25zdCB1bnN1YnNjcmliZSA9XG4gICAgICBjb21wb3NlZFNpZ25hbCAmJlxuICAgICAgY29tcG9zZWRTaWduYWwudW5zdWJzY3JpYmUgJiZcbiAgICAgICgoKSA9PiB7XG4gICAgICAgIGNvbXBvc2VkU2lnbmFsLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9KTtcblxuICAgIGxldCByZXF1ZXN0Q29udGVudExlbmd0aDtcblxuICAgIHRyeSB7XG4gICAgICBpZiAoXG4gICAgICAgIG9uVXBsb2FkUHJvZ3Jlc3MgJiZcbiAgICAgICAgc3VwcG9ydHNSZXF1ZXN0U3RyZWFtICYmXG4gICAgICAgIG1ldGhvZCAhPT0gJ2dldCcgJiZcbiAgICAgICAgbWV0aG9kICE9PSAnaGVhZCcgJiZcbiAgICAgICAgKHJlcXVlc3RDb250ZW50TGVuZ3RoID0gYXdhaXQgcmVzb2x2ZUJvZHlMZW5ndGgoaGVhZGVycywgZGF0YSkpICE9PSAwXG4gICAgICApIHtcbiAgICAgICAgbGV0IF9yZXF1ZXN0ID0gbmV3IFJlcXVlc3QodXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZGF0YSxcbiAgICAgICAgICBkdXBsZXg6ICdoYWxmJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbGV0IGNvbnRlbnRUeXBlSGVhZGVyO1xuXG4gICAgICAgIGlmICh1dGlscy5pc0Zvcm1EYXRhKGRhdGEpICYmIChjb250ZW50VHlwZUhlYWRlciA9IF9yZXF1ZXN0LmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKSkpIHtcbiAgICAgICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKGNvbnRlbnRUeXBlSGVhZGVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChfcmVxdWVzdC5ib2R5KSB7XG4gICAgICAgICAgY29uc3QgW29uUHJvZ3Jlc3MsIGZsdXNoXSA9IHByb2dyZXNzRXZlbnREZWNvcmF0b3IoXG4gICAgICAgICAgICByZXF1ZXN0Q29udGVudExlbmd0aCxcbiAgICAgICAgICAgIHByb2dyZXNzRXZlbnRSZWR1Y2VyKGFzeW5jRGVjb3JhdG9yKG9uVXBsb2FkUHJvZ3Jlc3MpKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBkYXRhID0gdHJhY2tTdHJlYW0oX3JlcXVlc3QuYm9keSwgREVGQVVMVF9DSFVOS19TSVpFLCBvblByb2dyZXNzLCBmbHVzaCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCF1dGlscy5pc1N0cmluZyh3aXRoQ3JlZGVudGlhbHMpKSB7XG4gICAgICAgIHdpdGhDcmVkZW50aWFscyA9IHdpdGhDcmVkZW50aWFscyA/ICdpbmNsdWRlJyA6ICdvbWl0JztcbiAgICAgIH1cblxuICAgICAgLy8gQ2xvdWRmbGFyZSBXb3JrZXJzIHRocm93cyB3aGVuIGNyZWRlbnRpYWxzIGFyZSBkZWZpbmVkXG4gICAgICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2Nsb3VkZmxhcmUvd29ya2VyZC9pc3N1ZXMvOTAyXG4gICAgICBjb25zdCBpc0NyZWRlbnRpYWxzU3VwcG9ydGVkID0gaXNSZXF1ZXN0U3VwcG9ydGVkICYmICdjcmVkZW50aWFscycgaW4gUmVxdWVzdC5wcm90b3R5cGU7XG5cbiAgICAgIGNvbnN0IHJlc29sdmVkT3B0aW9ucyA9IHtcbiAgICAgICAgLi4uZmV0Y2hPcHRpb25zLFxuICAgICAgICBzaWduYWw6IGNvbXBvc2VkU2lnbmFsLFxuICAgICAgICBtZXRob2Q6IG1ldGhvZC50b1VwcGVyQ2FzZSgpLFxuICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLm5vcm1hbGl6ZSgpLnRvSlNPTigpLFxuICAgICAgICBib2R5OiBkYXRhLFxuICAgICAgICBkdXBsZXg6ICdoYWxmJyxcbiAgICAgICAgY3JlZGVudGlhbHM6IGlzQ3JlZGVudGlhbHNTdXBwb3J0ZWQgPyB3aXRoQ3JlZGVudGlhbHMgOiB1bmRlZmluZWQsXG4gICAgICB9O1xuXG4gICAgICByZXF1ZXN0ID0gaXNSZXF1ZXN0U3VwcG9ydGVkICYmIG5ldyBSZXF1ZXN0KHVybCwgcmVzb2x2ZWRPcHRpb25zKTtcblxuICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgKGlzUmVxdWVzdFN1cHBvcnRlZFxuICAgICAgICA/IF9mZXRjaChyZXF1ZXN0LCBmZXRjaE9wdGlvbnMpXG4gICAgICAgIDogX2ZldGNoKHVybCwgcmVzb2x2ZWRPcHRpb25zKSk7XG5cbiAgICAgIGNvbnN0IGlzU3RyZWFtUmVzcG9uc2UgPVxuICAgICAgICBzdXBwb3J0c1Jlc3BvbnNlU3RyZWFtICYmIChyZXNwb25zZVR5cGUgPT09ICdzdHJlYW0nIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ3Jlc3BvbnNlJyk7XG5cbiAgICAgIGlmIChzdXBwb3J0c1Jlc3BvbnNlU3RyZWFtICYmIChvbkRvd25sb2FkUHJvZ3Jlc3MgfHwgKGlzU3RyZWFtUmVzcG9uc2UgJiYgdW5zdWJzY3JpYmUpKSkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0ge307XG5cbiAgICAgICAgWydzdGF0dXMnLCAnc3RhdHVzVGV4dCcsICdoZWFkZXJzJ10uZm9yRWFjaCgocHJvcCkgPT4ge1xuICAgICAgICAgIG9wdGlvbnNbcHJvcF0gPSByZXNwb25zZVtwcm9wXTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgcmVzcG9uc2VDb250ZW50TGVuZ3RoID0gdXRpbHMudG9GaW5pdGVOdW1iZXIocmVzcG9uc2UuaGVhZGVycy5nZXQoJ2NvbnRlbnQtbGVuZ3RoJykpO1xuXG4gICAgICAgIGNvbnN0IFtvblByb2dyZXNzLCBmbHVzaF0gPVxuICAgICAgICAgIChvbkRvd25sb2FkUHJvZ3Jlc3MgJiZcbiAgICAgICAgICAgIHByb2dyZXNzRXZlbnREZWNvcmF0b3IoXG4gICAgICAgICAgICAgIHJlc3BvbnNlQ29udGVudExlbmd0aCxcbiAgICAgICAgICAgICAgcHJvZ3Jlc3NFdmVudFJlZHVjZXIoYXN5bmNEZWNvcmF0b3Iob25Eb3dubG9hZFByb2dyZXNzKSwgdHJ1ZSlcbiAgICAgICAgICAgICkpIHx8XG4gICAgICAgICAgW107XG5cbiAgICAgICAgcmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UoXG4gICAgICAgICAgdHJhY2tTdHJlYW0ocmVzcG9uc2UuYm9keSwgREVGQVVMVF9DSFVOS19TSVpFLCBvblByb2dyZXNzLCAoKSA9PiB7XG4gICAgICAgICAgICBmbHVzaCAmJiBmbHVzaCgpO1xuICAgICAgICAgICAgdW5zdWJzY3JpYmUgJiYgdW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBvcHRpb25zXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJlc3BvbnNlVHlwZSA9IHJlc3BvbnNlVHlwZSB8fCAndGV4dCc7XG5cbiAgICAgIGxldCByZXNwb25zZURhdGEgPSBhd2FpdCByZXNvbHZlcnNbdXRpbHMuZmluZEtleShyZXNvbHZlcnMsIHJlc3BvbnNlVHlwZSkgfHwgJ3RleHQnXShcbiAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgIGNvbmZpZ1xuICAgICAgKTtcblxuICAgICAgIWlzU3RyZWFtUmVzcG9uc2UgJiYgdW5zdWJzY3JpYmUgJiYgdW5zdWJzY3JpYmUoKTtcblxuICAgICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwge1xuICAgICAgICAgIGRhdGE6IHJlc3BvbnNlRGF0YSxcbiAgICAgICAgICBoZWFkZXJzOiBBeGlvc0hlYWRlcnMuZnJvbShyZXNwb25zZS5oZWFkZXJzKSxcbiAgICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgICBzdGF0dXNUZXh0OiByZXNwb25zZS5zdGF0dXNUZXh0LFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICByZXF1ZXN0LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdW5zdWJzY3JpYmUgJiYgdW5zdWJzY3JpYmUoKTtcblxuICAgICAgaWYgKGVyciAmJiBlcnIubmFtZSA9PT0gJ1R5cGVFcnJvcicgJiYgL0xvYWQgZmFpbGVkfGZldGNoL2kudGVzdChlcnIubWVzc2FnZSkpIHtcbiAgICAgICAgdGhyb3cgT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgICAgICdOZXR3b3JrIEVycm9yJyxcbiAgICAgICAgICAgIEF4aW9zRXJyb3IuRVJSX05FVFdPUkssXG4gICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICByZXF1ZXN0LFxuICAgICAgICAgICAgZXJyICYmIGVyci5yZXNwb25zZVxuICAgICAgICAgICksXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2F1c2U6IGVyci5jYXVzZSB8fCBlcnIsXG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBBeGlvc0Vycm9yLmZyb20oZXJyLCBlcnIgJiYgZXJyLmNvZGUsIGNvbmZpZywgcmVxdWVzdCwgZXJyICYmIGVyci5yZXNwb25zZSk7XG4gICAgfVxuICB9O1xufTtcblxuY29uc3Qgc2VlZENhY2hlID0gbmV3IE1hcCgpO1xuXG5leHBvcnQgY29uc3QgZ2V0RmV0Y2ggPSAoY29uZmlnKSA9PiB7XG4gIGxldCBlbnYgPSAoY29uZmlnICYmIGNvbmZpZy5lbnYpIHx8IHt9O1xuICBjb25zdCB7IGZldGNoLCBSZXF1ZXN0LCBSZXNwb25zZSB9ID0gZW52O1xuICBjb25zdCBzZWVkcyA9IFtSZXF1ZXN0LCBSZXNwb25zZSwgZmV0Y2hdO1xuXG4gIGxldCBsZW4gPSBzZWVkcy5sZW5ndGgsXG4gICAgaSA9IGxlbixcbiAgICBzZWVkLFxuICAgIHRhcmdldCxcbiAgICBtYXAgPSBzZWVkQ2FjaGU7XG5cbiAgd2hpbGUgKGktLSkge1xuICAgIHNlZWQgPSBzZWVkc1tpXTtcbiAgICB0YXJnZXQgPSBtYXAuZ2V0KHNlZWQpO1xuXG4gICAgdGFyZ2V0ID09PSB1bmRlZmluZWQgJiYgbWFwLnNldChzZWVkLCAodGFyZ2V0ID0gaSA/IG5ldyBNYXAoKSA6IGZhY3RvcnkoZW52KSkpO1xuXG4gICAgbWFwID0gdGFyZ2V0O1xuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn07XG5cbmNvbnN0IGFkYXB0ZXIgPSBnZXRGZXRjaCgpO1xuXG5leHBvcnQgZGVmYXVsdCBhZGFwdGVyO1xuIiwiaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBodHRwQWRhcHRlciBmcm9tICcuL2h0dHAuanMnO1xuaW1wb3J0IHhockFkYXB0ZXIgZnJvbSAnLi94aHIuanMnO1xuaW1wb3J0ICogYXMgZmV0Y2hBZGFwdGVyIGZyb20gJy4vZmV0Y2guanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcblxuLyoqXG4gKiBLbm93biBhZGFwdGVycyBtYXBwaW5nLlxuICogUHJvdmlkZXMgZW52aXJvbm1lbnQtc3BlY2lmaWMgYWRhcHRlcnMgZm9yIEF4aW9zOlxuICogLSBgaHR0cGAgZm9yIE5vZGUuanNcbiAqIC0gYHhocmAgZm9yIGJyb3dzZXJzXG4gKiAtIGBmZXRjaGAgZm9yIGZldGNoIEFQSS1iYXNlZCByZXF1ZXN0c1xuICpcbiAqIEB0eXBlIHtPYmplY3Q8c3RyaW5nLCBGdW5jdGlvbnxPYmplY3Q+fVxuICovXG5jb25zdCBrbm93bkFkYXB0ZXJzID0ge1xuICBodHRwOiBodHRwQWRhcHRlcixcbiAgeGhyOiB4aHJBZGFwdGVyLFxuICBmZXRjaDoge1xuICAgIGdldDogZmV0Y2hBZGFwdGVyLmdldEZldGNoLFxuICB9LFxufTtcblxuLy8gQXNzaWduIGFkYXB0ZXIgbmFtZXMgZm9yIGVhc2llciBkZWJ1Z2dpbmcgYW5kIGlkZW50aWZpY2F0aW9uXG51dGlscy5mb3JFYWNoKGtub3duQWRhcHRlcnMsIChmbiwgdmFsdWUpID0+IHtcbiAgaWYgKGZuKSB7XG4gICAgdHJ5IHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgJ25hbWUnLCB7IHZhbHVlIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eVxuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZm4sICdhZGFwdGVyTmFtZScsIHsgdmFsdWUgfSk7XG4gIH1cbn0pO1xuXG4vKipcbiAqIFJlbmRlciBhIHJlamVjdGlvbiByZWFzb24gc3RyaW5nIGZvciB1bmtub3duIG9yIHVuc3VwcG9ydGVkIGFkYXB0ZXJzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvblxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuY29uc3QgcmVuZGVyUmVhc29uID0gKHJlYXNvbikgPT4gYC0gJHtyZWFzb259YDtcblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgYWRhcHRlciBpcyByZXNvbHZlZCAoZnVuY3Rpb24sIG51bGwsIG9yIGZhbHNlKVxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb258bnVsbHxmYWxzZX0gYWRhcHRlclxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmNvbnN0IGlzUmVzb2x2ZWRIYW5kbGUgPSAoYWRhcHRlcikgPT5cbiAgdXRpbHMuaXNGdW5jdGlvbihhZGFwdGVyKSB8fCBhZGFwdGVyID09PSBudWxsIHx8IGFkYXB0ZXIgPT09IGZhbHNlO1xuXG4vKipcbiAqIEdldCB0aGUgZmlyc3Qgc3VpdGFibGUgYWRhcHRlciBmcm9tIHRoZSBwcm92aWRlZCBsaXN0LlxuICogVHJpZXMgZWFjaCBhZGFwdGVyIGluIG9yZGVyIHVudGlsIGEgc3VwcG9ydGVkIG9uZSBpcyBmb3VuZC5cbiAqIFRocm93cyBhbiBBeGlvc0Vycm9yIGlmIG5vIGFkYXB0ZXIgaXMgc3VpdGFibGUuXG4gKlxuICogQHBhcmFtIHtBcnJheTxzdHJpbmd8RnVuY3Rpb24+fHN0cmluZ3xGdW5jdGlvbn0gYWRhcHRlcnMgLSBBZGFwdGVyKHMpIGJ5IG5hbWUgb3IgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gQXhpb3MgcmVxdWVzdCBjb25maWd1cmF0aW9uXG4gKiBAdGhyb3dzIHtBeGlvc0Vycm9yfSBJZiBubyBzdWl0YWJsZSBhZGFwdGVyIGlzIGF2YWlsYWJsZVxuICogQHJldHVybnMge0Z1bmN0aW9ufSBUaGUgcmVzb2x2ZWQgYWRhcHRlciBmdW5jdGlvblxuICovXG5mdW5jdGlvbiBnZXRBZGFwdGVyKGFkYXB0ZXJzLCBjb25maWcpIHtcbiAgYWRhcHRlcnMgPSB1dGlscy5pc0FycmF5KGFkYXB0ZXJzKSA/IGFkYXB0ZXJzIDogW2FkYXB0ZXJzXTtcblxuICBjb25zdCB7IGxlbmd0aCB9ID0gYWRhcHRlcnM7XG4gIGxldCBuYW1lT3JBZGFwdGVyO1xuICBsZXQgYWRhcHRlcjtcblxuICBjb25zdCByZWplY3RlZFJlYXNvbnMgPSB7fTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgbmFtZU9yQWRhcHRlciA9IGFkYXB0ZXJzW2ldO1xuICAgIGxldCBpZDtcblxuICAgIGFkYXB0ZXIgPSBuYW1lT3JBZGFwdGVyO1xuXG4gICAgaWYgKCFpc1Jlc29sdmVkSGFuZGxlKG5hbWVPckFkYXB0ZXIpKSB7XG4gICAgICBhZGFwdGVyID0ga25vd25BZGFwdGVyc1soaWQgPSBTdHJpbmcobmFtZU9yQWRhcHRlcikpLnRvTG93ZXJDYXNlKCldO1xuXG4gICAgICBpZiAoYWRhcHRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKGBVbmtub3duIGFkYXB0ZXIgJyR7aWR9J2ApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhZGFwdGVyICYmICh1dGlscy5pc0Z1bmN0aW9uKGFkYXB0ZXIpIHx8IChhZGFwdGVyID0gYWRhcHRlci5nZXQoY29uZmlnKSkpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZWplY3RlZFJlYXNvbnNbaWQgfHwgJyMnICsgaV0gPSBhZGFwdGVyO1xuICB9XG5cbiAgaWYgKCFhZGFwdGVyKSB7XG4gICAgY29uc3QgcmVhc29ucyA9IE9iamVjdC5lbnRyaWVzKHJlamVjdGVkUmVhc29ucykubWFwKFxuICAgICAgKFtpZCwgc3RhdGVdKSA9PlxuICAgICAgICBgYWRhcHRlciAke2lkfSBgICtcbiAgICAgICAgKHN0YXRlID09PSBmYWxzZSA/ICdpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCcgOiAnaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgYnVpbGQnKVxuICAgICk7XG5cbiAgICBsZXQgcyA9IGxlbmd0aFxuICAgICAgPyByZWFzb25zLmxlbmd0aCA+IDFcbiAgICAgICAgPyAnc2luY2UgOlxcbicgKyByZWFzb25zLm1hcChyZW5kZXJSZWFzb24pLmpvaW4oJ1xcbicpXG4gICAgICAgIDogJyAnICsgcmVuZGVyUmVhc29uKHJlYXNvbnNbMF0pXG4gICAgICA6ICdhcyBubyBhZGFwdGVyIHNwZWNpZmllZCc7XG5cbiAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihcbiAgICAgIGBUaGVyZSBpcyBubyBzdWl0YWJsZSBhZGFwdGVyIHRvIGRpc3BhdGNoIHRoZSByZXF1ZXN0IGAgKyBzLFxuICAgICAgJ0VSUl9OT1RfU1VQUE9SVCdcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGFkYXB0ZXI7XG59XG5cbi8qKlxuICogRXhwb3J0cyBBeGlvcyBhZGFwdGVycyBhbmQgdXRpbGl0eSB0byByZXNvbHZlIGFuIGFkYXB0ZXJcbiAqL1xuZXhwb3J0IGRlZmF1bHQge1xuICAvKipcbiAgICogUmVzb2x2ZSBhbiBhZGFwdGVyIGZyb20gYSBsaXN0IG9mIGFkYXB0ZXIgbmFtZXMgb3IgZnVuY3Rpb25zLlxuICAgKiBAdHlwZSB7RnVuY3Rpb259XG4gICAqL1xuICBnZXRBZGFwdGVyLFxuXG4gIC8qKlxuICAgKiBFeHBvc2VzIGFsbCBrbm93biBhZGFwdGVyc1xuICAgKiBAdHlwZSB7T2JqZWN0PHN0cmluZywgRnVuY3Rpb258T2JqZWN0Pn1cbiAgICovXG4gIGFkYXB0ZXJzOiBrbm93bkFkYXB0ZXJzLFxufTtcbiIsIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzdHJpY3RcbmV4cG9ydCBkZWZhdWx0IG51bGw7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB0cmFuc2Zvcm1EYXRhIGZyb20gJy4vdHJhbnNmb3JtRGF0YS5qcyc7XG5pbXBvcnQgaXNDYW5jZWwgZnJvbSAnLi4vY2FuY2VsL2lzQ2FuY2VsLmpzJztcbmltcG9ydCBkZWZhdWx0cyBmcm9tICcuLi9kZWZhdWx0cy9pbmRleC5qcyc7XG5pbXBvcnQgQ2FuY2VsZWRFcnJvciBmcm9tICcuLi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gJy4uL2NvcmUvQXhpb3NIZWFkZXJzLmpzJztcbmltcG9ydCBhZGFwdGVycyBmcm9tICcuLi9hZGFwdGVycy9hZGFwdGVycy5qcyc7XG5cbi8qKlxuICogVGhyb3dzIGEgYENhbmNlbGVkRXJyb3JgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHRoYXQgaXMgdG8gYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RcbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpIHtcbiAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgIGNvbmZpZy5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCk7XG4gIH1cblxuICBpZiAoY29uZmlnLnNpZ25hbCAmJiBjb25maWcuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICB0aHJvdyBuZXcgQ2FuY2VsZWRFcnJvcihudWxsLCBjb25maWcpO1xuICB9XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggYSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgdXNpbmcgdGhlIGNvbmZpZ3VyZWQgYWRhcHRlci5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIFRoZSBjb25maWcgdGhhdCBpcyB0byBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdFxuICpcbiAqIEByZXR1cm5zIHtQcm9taXNlfSBUaGUgUHJvbWlzZSB0byBiZSBmdWxmaWxsZWRcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGlzcGF0Y2hSZXF1ZXN0KGNvbmZpZykge1xuICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgY29uZmlnLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShjb25maWcuaGVhZGVycyk7XG5cbiAgLy8gVHJhbnNmb3JtIHJlcXVlc3QgZGF0YVxuICBjb25maWcuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChjb25maWcsIGNvbmZpZy50cmFuc2Zvcm1SZXF1ZXN0KTtcblxuICBpZiAoWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLmluZGV4T2YoY29uZmlnLm1ldGhvZCkgIT09IC0xKSB7XG4gICAgY29uZmlnLmhlYWRlcnMuc2V0Q29udGVudFR5cGUoJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsIGZhbHNlKTtcbiAgfVxuXG4gIGNvbnN0IGFkYXB0ZXIgPSBhZGFwdGVycy5nZXRBZGFwdGVyKGNvbmZpZy5hZGFwdGVyIHx8IGRlZmF1bHRzLmFkYXB0ZXIsIGNvbmZpZyk7XG5cbiAgcmV0dXJuIGFkYXB0ZXIoY29uZmlnKS50aGVuKFxuICAgIGZ1bmN0aW9uIG9uQWRhcHRlclJlc29sdXRpb24ocmVzcG9uc2UpIHtcbiAgICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICAgIHJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoY29uZmlnLCBjb25maWcudHJhbnNmb3JtUmVzcG9uc2UsIHJlc3BvbnNlKTtcblxuICAgICAgcmVzcG9uc2UuaGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKHJlc3BvbnNlLmhlYWRlcnMpO1xuXG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSxcbiAgICBmdW5jdGlvbiBvbkFkYXB0ZXJSZWplY3Rpb24ocmVhc29uKSB7XG4gICAgICBpZiAoIWlzQ2FuY2VsKHJlYXNvbikpIHtcbiAgICAgICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgICAgIGlmIChyZWFzb24gJiYgcmVhc29uLnJlc3BvbnNlKSB7XG4gICAgICAgICAgcmVhc29uLnJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICBjb25maWcudHJhbnNmb3JtUmVzcG9uc2UsXG4gICAgICAgICAgICByZWFzb24ucmVzcG9uc2VcbiAgICAgICAgICApO1xuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZS5oZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20ocmVhc29uLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZWFzb24pO1xuICAgIH1cbiAgKTtcbn1cbiIsImV4cG9ydCBjb25zdCBWRVJTSU9OID0gXCIxLjE1LjBcIjsiLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7IFZFUlNJT04gfSBmcm9tICcuLi9lbnYvZGF0YS5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuXG5jb25zdCB2YWxpZGF0b3JzID0ge307XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5bJ29iamVjdCcsICdib29sZWFuJywgJ251bWJlcicsICdmdW5jdGlvbicsICdzdHJpbmcnLCAnc3ltYm9sJ10uZm9yRWFjaCgodHlwZSwgaSkgPT4ge1xuICB2YWxpZGF0b3JzW3R5cGVdID0gZnVuY3Rpb24gdmFsaWRhdG9yKHRoaW5nKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGluZyA9PT0gdHlwZSB8fCAnYScgKyAoaSA8IDEgPyAnbiAnIDogJyAnKSArIHR5cGU7XG4gIH07XG59KTtcblxuY29uc3QgZGVwcmVjYXRlZFdhcm5pbmdzID0ge307XG5cbi8qKlxuICogVHJhbnNpdGlvbmFsIG9wdGlvbiB2YWxpZGF0b3JcbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufGJvb2xlYW4/fSB2YWxpZGF0b3IgLSBzZXQgdG8gZmFsc2UgaWYgdGhlIHRyYW5zaXRpb25hbCBvcHRpb24gaGFzIGJlZW4gcmVtb3ZlZFxuICogQHBhcmFtIHtzdHJpbmc/fSB2ZXJzaW9uIC0gZGVwcmVjYXRlZCB2ZXJzaW9uIC8gcmVtb3ZlZCBzaW5jZSB2ZXJzaW9uXG4gKiBAcGFyYW0ge3N0cmluZz99IG1lc3NhZ2UgLSBzb21lIG1lc3NhZ2Ugd2l0aCBhZGRpdGlvbmFsIGluZm9cbiAqXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259XG4gKi9cbnZhbGlkYXRvcnMudHJhbnNpdGlvbmFsID0gZnVuY3Rpb24gdHJhbnNpdGlvbmFsKHZhbGlkYXRvciwgdmVyc2lvbiwgbWVzc2FnZSkge1xuICBmdW5jdGlvbiBmb3JtYXRNZXNzYWdlKG9wdCwgZGVzYykge1xuICAgIHJldHVybiAoXG4gICAgICAnW0F4aW9zIHYnICtcbiAgICAgIFZFUlNJT04gK1xuICAgICAgXCJdIFRyYW5zaXRpb25hbCBvcHRpb24gJ1wiICtcbiAgICAgIG9wdCArXG4gICAgICBcIidcIiArXG4gICAgICBkZXNjICtcbiAgICAgIChtZXNzYWdlID8gJy4gJyArIG1lc3NhZ2UgOiAnJylcbiAgICApO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuICh2YWx1ZSwgb3B0LCBvcHRzKSA9PiB7XG4gICAgaWYgKHZhbGlkYXRvciA9PT0gZmFsc2UpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICBmb3JtYXRNZXNzYWdlKG9wdCwgJyBoYXMgYmVlbiByZW1vdmVkJyArICh2ZXJzaW9uID8gJyBpbiAnICsgdmVyc2lvbiA6ICcnKSksXG4gICAgICAgIEF4aW9zRXJyb3IuRVJSX0RFUFJFQ0FURURcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHZlcnNpb24gJiYgIWRlcHJlY2F0ZWRXYXJuaW5nc1tvcHRdKSB7XG4gICAgICBkZXByZWNhdGVkV2FybmluZ3Nbb3B0XSA9IHRydWU7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBmb3JtYXRNZXNzYWdlKFxuICAgICAgICAgIG9wdCxcbiAgICAgICAgICAnIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdicgKyB2ZXJzaW9uICsgJyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZSdcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdG9yID8gdmFsaWRhdG9yKHZhbHVlLCBvcHQsIG9wdHMpIDogdHJ1ZTtcbiAgfTtcbn07XG5cbnZhbGlkYXRvcnMuc3BlbGxpbmcgPSBmdW5jdGlvbiBzcGVsbGluZyhjb3JyZWN0U3BlbGxpbmcpIHtcbiAgcmV0dXJuICh2YWx1ZSwgb3B0KSA9PiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICBjb25zb2xlLndhcm4oYCR7b3B0fSBpcyBsaWtlbHkgYSBtaXNzcGVsbGluZyBvZiAke2NvcnJlY3RTcGVsbGluZ31gKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcbn07XG5cbi8qKlxuICogQXNzZXJ0IG9iamVjdCdzIHByb3BlcnRpZXMgdHlwZVxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge29iamVjdH0gc2NoZW1hXG4gKiBAcGFyYW0ge2Jvb2xlYW4/fSBhbGxvd1Vua25vd25cbiAqXG4gKiBAcmV0dXJucyB7b2JqZWN0fVxuICovXG5cbmZ1bmN0aW9uIGFzc2VydE9wdGlvbnMob3B0aW9ucywgc2NoZW1hLCBhbGxvd1Vua25vd24pIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0JywgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTl9WQUxVRSk7XG4gIH1cbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpO1xuICBsZXQgaSA9IGtleXMubGVuZ3RoO1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIGNvbnN0IG9wdCA9IGtleXNbaV07XG4gICAgY29uc3QgdmFsaWRhdG9yID0gc2NoZW1hW29wdF07XG4gICAgaWYgKHZhbGlkYXRvcikge1xuICAgICAgY29uc3QgdmFsdWUgPSBvcHRpb25zW29wdF07XG4gICAgICBjb25zdCByZXN1bHQgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbGlkYXRvcih2YWx1ZSwgb3B0LCBvcHRpb25zKTtcbiAgICAgIGlmIChyZXN1bHQgIT09IHRydWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoXG4gICAgICAgICAgJ29wdGlvbiAnICsgb3B0ICsgJyBtdXN0IGJlICcgKyByZXN1bHQsXG4gICAgICAgICAgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTl9WQUxVRVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChhbGxvd1Vua25vd24gIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdVbmtub3duIG9wdGlvbiAnICsgb3B0LCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBhc3NlcnRPcHRpb25zLFxuICB2YWxpZGF0b3JzLFxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBidWlsZFVSTCBmcm9tICcuLi9oZWxwZXJzL2J1aWxkVVJMLmpzJztcbmltcG9ydCBJbnRlcmNlcHRvck1hbmFnZXIgZnJvbSAnLi9JbnRlcmNlcHRvck1hbmFnZXIuanMnO1xuaW1wb3J0IGRpc3BhdGNoUmVxdWVzdCBmcm9tICcuL2Rpc3BhdGNoUmVxdWVzdC5qcyc7XG5pbXBvcnQgbWVyZ2VDb25maWcgZnJvbSAnLi9tZXJnZUNvbmZpZy5qcyc7XG5pbXBvcnQgYnVpbGRGdWxsUGF0aCBmcm9tICcuL2J1aWxkRnVsbFBhdGguanMnO1xuaW1wb3J0IHZhbGlkYXRvciBmcm9tICcuLi9oZWxwZXJzL3ZhbGlkYXRvci5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gJy4vQXhpb3NIZWFkZXJzLmpzJztcbmltcG9ydCB0cmFuc2l0aW9uYWxEZWZhdWx0cyBmcm9tICcuLi9kZWZhdWx0cy90cmFuc2l0aW9uYWwuanMnO1xuXG5jb25zdCB2YWxpZGF0b3JzID0gdmFsaWRhdG9yLnZhbGlkYXRvcnM7XG5cbi8qKlxuICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlQ29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKlxuICogQHJldHVybiB7QXhpb3N9IEEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKi9cbmNsYXNzIEF4aW9zIHtcbiAgY29uc3RydWN0b3IoaW5zdGFuY2VDb25maWcpIHtcbiAgICB0aGlzLmRlZmF1bHRzID0gaW5zdGFuY2VDb25maWcgfHwge307XG4gICAgdGhpcy5pbnRlcmNlcHRvcnMgPSB7XG4gICAgICByZXF1ZXN0OiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyKCksXG4gICAgICByZXNwb25zZTogbmV3IEludGVyY2VwdG9yTWFuYWdlcigpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGlzcGF0Y2ggYSByZXF1ZXN0XG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfE9iamVjdH0gY29uZmlnT3JVcmwgVGhlIGNvbmZpZyBzcGVjaWZpYyBmb3IgdGhpcyByZXF1ZXN0IChtZXJnZWQgd2l0aCB0aGlzLmRlZmF1bHRzKVxuICAgKiBAcGFyYW0gez9PYmplY3R9IGNvbmZpZ1xuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gVGhlIFByb21pc2UgdG8gYmUgZnVsZmlsbGVkXG4gICAqL1xuICBhc3luYyByZXF1ZXN0KGNvbmZpZ09yVXJsLCBjb25maWcpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX3JlcXVlc3QoY29uZmlnT3JVcmwsIGNvbmZpZyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgbGV0IGR1bW15ID0ge307XG5cbiAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UgPyBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShkdW1teSkgOiAoZHVtbXkgPSBuZXcgRXJyb3IoKSk7XG5cbiAgICAgICAgLy8gc2xpY2Ugb2ZmIHRoZSBFcnJvcjogLi4uIGxpbmVcbiAgICAgICAgY29uc3Qgc3RhY2sgPSAoKCkgPT4ge1xuICAgICAgICAgIGlmICghZHVtbXkuc3RhY2spIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBmaXJzdE5ld2xpbmVJbmRleCA9IGR1bW15LnN0YWNrLmluZGV4T2YoJ1xcbicpO1xuXG4gICAgICAgICAgcmV0dXJuIGZpcnN0TmV3bGluZUluZGV4ID09PSAtMSA/ICcnIDogZHVtbXkuc3RhY2suc2xpY2UoZmlyc3ROZXdsaW5lSW5kZXggKyAxKTtcbiAgICAgICAgfSkoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoIWVyci5zdGFjaykge1xuICAgICAgICAgICAgZXJyLnN0YWNrID0gc3RhY2s7XG4gICAgICAgICAgICAvLyBtYXRjaCB3aXRob3V0IHRoZSAyIHRvcCBzdGFjayBsaW5lc1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3RhY2spIHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0TmV3bGluZUluZGV4ID0gc3RhY2suaW5kZXhPZignXFxuJyk7XG4gICAgICAgICAgICBjb25zdCBzZWNvbmROZXdsaW5lSW5kZXggPVxuICAgICAgICAgICAgICBmaXJzdE5ld2xpbmVJbmRleCA9PT0gLTEgPyAtMSA6IHN0YWNrLmluZGV4T2YoJ1xcbicsIGZpcnN0TmV3bGluZUluZGV4ICsgMSk7XG4gICAgICAgICAgICBjb25zdCBzdGFja1dpdGhvdXRUd29Ub3BMaW5lcyA9XG4gICAgICAgICAgICAgIHNlY29uZE5ld2xpbmVJbmRleCA9PT0gLTEgPyAnJyA6IHN0YWNrLnNsaWNlKHNlY29uZE5ld2xpbmVJbmRleCArIDEpO1xuXG4gICAgICAgICAgICBpZiAoIVN0cmluZyhlcnIuc3RhY2spLmVuZHNXaXRoKHN0YWNrV2l0aG91dFR3b1RvcExpbmVzKSkge1xuICAgICAgICAgICAgICBlcnIuc3RhY2sgKz0gJ1xcbicgKyBzdGFjaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAvLyBpZ25vcmUgdGhlIGNhc2Ugd2hlcmUgXCJzdGFja1wiIGlzIGFuIHVuLXdyaXRhYmxlIHByb3BlcnR5XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxuXG4gIF9yZXF1ZXN0KGNvbmZpZ09yVXJsLCBjb25maWcpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICAvLyBBbGxvdyBmb3IgYXhpb3MoJ2V4YW1wbGUvdXJsJ1ssIGNvbmZpZ10pIGEgbGEgZmV0Y2ggQVBJXG4gICAgaWYgKHR5cGVvZiBjb25maWdPclVybCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcbiAgICAgIGNvbmZpZy51cmwgPSBjb25maWdPclVybDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uZmlnID0gY29uZmlnT3JVcmwgfHwge307XG4gICAgfVxuXG4gICAgY29uZmlnID0gbWVyZ2VDb25maWcodGhpcy5kZWZhdWx0cywgY29uZmlnKTtcblxuICAgIGNvbnN0IHsgdHJhbnNpdGlvbmFsLCBwYXJhbXNTZXJpYWxpemVyLCBoZWFkZXJzIH0gPSBjb25maWc7XG5cbiAgICBpZiAodHJhbnNpdGlvbmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhbGlkYXRvci5hc3NlcnRPcHRpb25zKFxuICAgICAgICB0cmFuc2l0aW9uYWwsXG4gICAgICAgIHtcbiAgICAgICAgICBzaWxlbnRKU09OUGFyc2luZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKSxcbiAgICAgICAgICBmb3JjZWRKU09OUGFyc2luZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKSxcbiAgICAgICAgICBjbGFyaWZ5VGltZW91dEVycm9yOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pLFxuICAgICAgICAgIGxlZ2FjeUludGVyY2VwdG9yUmVxUmVzT3JkZXJpbmc6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiksXG4gICAgICAgIH0sXG4gICAgICAgIGZhbHNlXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXNTZXJpYWxpemVyICE9IG51bGwpIHtcbiAgICAgIGlmICh1dGlscy5pc0Z1bmN0aW9uKHBhcmFtc1NlcmlhbGl6ZXIpKSB7XG4gICAgICAgIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyID0ge1xuICAgICAgICAgIHNlcmlhbGl6ZTogcGFyYW1zU2VyaWFsaXplcixcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbGlkYXRvci5hc3NlcnRPcHRpb25zKFxuICAgICAgICAgIHBhcmFtc1NlcmlhbGl6ZXIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgZW5jb2RlOiB2YWxpZGF0b3JzLmZ1bmN0aW9uLFxuICAgICAgICAgICAgc2VyaWFsaXplOiB2YWxpZGF0b3JzLmZ1bmN0aW9uLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdHJ1ZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNldCBjb25maWcuYWxsb3dBYnNvbHV0ZVVybHNcbiAgICBpZiAoY29uZmlnLmFsbG93QWJzb2x1dGVVcmxzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICB9IGVsc2UgaWYgKHRoaXMuZGVmYXVsdHMuYWxsb3dBYnNvbHV0ZVVybHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uZmlnLmFsbG93QWJzb2x1dGVVcmxzID0gdGhpcy5kZWZhdWx0cy5hbGxvd0Fic29sdXRlVXJscztcbiAgICB9IGVsc2Uge1xuICAgICAgY29uZmlnLmFsbG93QWJzb2x1dGVVcmxzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YWxpZGF0b3IuYXNzZXJ0T3B0aW9ucyhcbiAgICAgIGNvbmZpZyxcbiAgICAgIHtcbiAgICAgICAgYmFzZVVybDogdmFsaWRhdG9ycy5zcGVsbGluZygnYmFzZVVSTCcpLFxuICAgICAgICB3aXRoWHNyZlRva2VuOiB2YWxpZGF0b3JzLnNwZWxsaW5nKCd3aXRoWFNSRlRva2VuJyksXG4gICAgICB9LFxuICAgICAgdHJ1ZVxuICAgICk7XG5cbiAgICAvLyBTZXQgY29uZmlnLm1ldGhvZFxuICAgIGNvbmZpZy5tZXRob2QgPSAoY29uZmlnLm1ldGhvZCB8fCB0aGlzLmRlZmF1bHRzLm1ldGhvZCB8fCAnZ2V0JykudG9Mb3dlckNhc2UoKTtcblxuICAgIC8vIEZsYXR0ZW4gaGVhZGVyc1xuICAgIGxldCBjb250ZXh0SGVhZGVycyA9IGhlYWRlcnMgJiYgdXRpbHMubWVyZ2UoaGVhZGVycy5jb21tb24sIGhlYWRlcnNbY29uZmlnLm1ldGhvZF0pO1xuXG4gICAgaGVhZGVycyAmJlxuICAgICAgdXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdwb3N0JywgJ3B1dCcsICdwYXRjaCcsICdjb21tb24nXSwgKG1ldGhvZCkgPT4ge1xuICAgICAgICBkZWxldGUgaGVhZGVyc1ttZXRob2RdO1xuICAgICAgfSk7XG5cbiAgICBjb25maWcuaGVhZGVycyA9IEF4aW9zSGVhZGVycy5jb25jYXQoY29udGV4dEhlYWRlcnMsIGhlYWRlcnMpO1xuXG4gICAgLy8gZmlsdGVyIG91dCBza2lwcGVkIGludGVyY2VwdG9yc1xuICAgIGNvbnN0IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluID0gW107XG4gICAgbGV0IHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyA9IHRydWU7XG4gICAgdGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uIHVuc2hpZnRSZXF1ZXN0SW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgICBpZiAodHlwZW9mIGludGVyY2VwdG9yLnJ1bldoZW4gPT09ICdmdW5jdGlvbicgJiYgaW50ZXJjZXB0b3IucnVuV2hlbihjb25maWcpID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyA9IHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyAmJiBpbnRlcmNlcHRvci5zeW5jaHJvbm91cztcblxuICAgICAgY29uc3QgdHJhbnNpdGlvbmFsID0gY29uZmlnLnRyYW5zaXRpb25hbCB8fCB0cmFuc2l0aW9uYWxEZWZhdWx0cztcbiAgICAgIGNvbnN0IGxlZ2FjeUludGVyY2VwdG9yUmVxUmVzT3JkZXJpbmcgPVxuICAgICAgICB0cmFuc2l0aW9uYWwgJiYgdHJhbnNpdGlvbmFsLmxlZ2FjeUludGVyY2VwdG9yUmVxUmVzT3JkZXJpbmc7XG5cbiAgICAgIGlmIChsZWdhY3lJbnRlcmNlcHRvclJlcVJlc09yZGVyaW5nKSB7XG4gICAgICAgIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLnVuc2hpZnQoaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi5wdXNoKGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluID0gW107XG4gICAgdGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbiBwdXNoUmVzcG9uc2VJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICAgIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5wdXNoKGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgbGV0IHByb21pc2U7XG4gICAgbGV0IGkgPSAwO1xuICAgIGxldCBsZW47XG5cbiAgICBpZiAoIXN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycykge1xuICAgICAgY29uc3QgY2hhaW4gPSBbZGlzcGF0Y2hSZXF1ZXN0LmJpbmQodGhpcyksIHVuZGVmaW5lZF07XG4gICAgICBjaGFpbi51bnNoaWZ0KC4uLnJlcXVlc3RJbnRlcmNlcHRvckNoYWluKTtcbiAgICAgIGNoYWluLnB1c2goLi4ucmVzcG9uc2VJbnRlcmNlcHRvckNoYWluKTtcbiAgICAgIGxlbiA9IGNoYWluLmxlbmd0aDtcblxuICAgICAgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShjb25maWcpO1xuXG4gICAgICB3aGlsZSAoaSA8IGxlbikge1xuICAgICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKGNoYWluW2krK10sIGNoYWluW2krK10pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9XG5cbiAgICBsZW4gPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi5sZW5ndGg7XG5cbiAgICBsZXQgbmV3Q29uZmlnID0gY29uZmlnO1xuXG4gICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgIGNvbnN0IG9uRnVsZmlsbGVkID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW5baSsrXTtcbiAgICAgIGNvbnN0IG9uUmVqZWN0ZWQgPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbltpKytdO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbmV3Q29uZmlnID0gb25GdWxmaWxsZWQobmV3Q29uZmlnKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIG9uUmVqZWN0ZWQuY2FsbCh0aGlzLCBlcnJvcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBwcm9taXNlID0gZGlzcGF0Y2hSZXF1ZXN0LmNhbGwodGhpcywgbmV3Q29uZmlnKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICB9XG5cbiAgICBpID0gMDtcbiAgICBsZW4gPSByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4ocmVzcG9uc2VJbnRlcmNlcHRvckNoYWluW2krK10sIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbltpKytdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxuXG4gIGdldFVyaShjb25maWcpIHtcbiAgICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gYnVpbGRGdWxsUGF0aChjb25maWcuYmFzZVVSTCwgY29uZmlnLnVybCwgY29uZmlnLmFsbG93QWJzb2x1dGVVcmxzKTtcbiAgICByZXR1cm4gYnVpbGRVUkwoZnVsbFBhdGgsIGNvbmZpZy5wYXJhbXMsIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyKTtcbiAgfVxufVxuXG4vLyBQcm92aWRlIGFsaWFzZXMgZm9yIHN1cHBvcnRlZCByZXF1ZXN0IG1ldGhvZHNcbnV0aWxzLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAnb3B0aW9ucyddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kTm9EYXRhKG1ldGhvZCkge1xuICAvKmVzbGludCBmdW5jLW5hbWVzOjAqL1xuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uICh1cmwsIGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QoXG4gICAgICBtZXJnZUNvbmZpZyhjb25maWcgfHwge30sIHtcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICB1cmwsXG4gICAgICAgIGRhdGE6IChjb25maWcgfHwge30pLmRhdGEsXG4gICAgICB9KVxuICAgICk7XG4gIH07XG59KTtcblxudXRpbHMuZm9yRWFjaChbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2RXaXRoRGF0YShtZXRob2QpIHtcbiAgZnVuY3Rpb24gZ2VuZXJhdGVIVFRQTWV0aG9kKGlzRm9ybSkge1xuICAgIHJldHVybiBmdW5jdGlvbiBodHRwTWV0aG9kKHVybCwgZGF0YSwgY29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KFxuICAgICAgICBtZXJnZUNvbmZpZyhjb25maWcgfHwge30sIHtcbiAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgaGVhZGVyczogaXNGb3JtXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGEnLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHt9LFxuICAgICAgICAgIHVybCxcbiAgICAgICAgICBkYXRhLFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9O1xuICB9XG5cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZF0gPSBnZW5lcmF0ZUhUVFBNZXRob2QoKTtcblxuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kICsgJ0Zvcm0nXSA9IGdlbmVyYXRlSFRUUE1ldGhvZCh0cnVlKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBBeGlvcztcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IENhbmNlbGVkRXJyb3IgZnJvbSAnLi9DYW5jZWxlZEVycm9yLmpzJztcblxuLyoqXG4gKiBBIGBDYW5jZWxUb2tlbmAgaXMgYW4gb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVxdWVzdCBjYW5jZWxsYXRpb24gb2YgYW4gb3BlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGV4ZWN1dG9yIFRoZSBleGVjdXRvciBmdW5jdGlvbi5cbiAqXG4gKiBAcmV0dXJucyB7Q2FuY2VsVG9rZW59XG4gKi9cbmNsYXNzIENhbmNlbFRva2VuIHtcbiAgY29uc3RydWN0b3IoZXhlY3V0b3IpIHtcbiAgICBpZiAodHlwZW9mIGV4ZWN1dG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uJyk7XG4gICAgfVxuXG4gICAgbGV0IHJlc29sdmVQcm9taXNlO1xuXG4gICAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gcHJvbWlzZUV4ZWN1dG9yKHJlc29sdmUpIHtcbiAgICAgIHJlc29sdmVQcm9taXNlID0gcmVzb2x2ZTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHRva2VuID0gdGhpcztcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgdGhpcy5wcm9taXNlLnRoZW4oKGNhbmNlbCkgPT4ge1xuICAgICAgaWYgKCF0b2tlbi5fbGlzdGVuZXJzKSByZXR1cm47XG5cbiAgICAgIGxldCBpID0gdG9rZW4uX2xpc3RlbmVycy5sZW5ndGg7XG5cbiAgICAgIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgICAgIHRva2VuLl9saXN0ZW5lcnNbaV0oY2FuY2VsKTtcbiAgICAgIH1cbiAgICAgIHRva2VuLl9saXN0ZW5lcnMgPSBudWxsO1xuICAgIH0pO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICB0aGlzLnByb21pc2UudGhlbiA9IChvbmZ1bGZpbGxlZCkgPT4ge1xuICAgICAgbGV0IF9yZXNvbHZlO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICB0b2tlbi5zdWJzY3JpYmUocmVzb2x2ZSk7XG4gICAgICAgIF9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgIH0pLnRoZW4ob25mdWxmaWxsZWQpO1xuXG4gICAgICBwcm9taXNlLmNhbmNlbCA9IGZ1bmN0aW9uIHJlamVjdCgpIHtcbiAgICAgICAgdG9rZW4udW5zdWJzY3JpYmUoX3Jlc29sdmUpO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfTtcblxuICAgIGV4ZWN1dG9yKGZ1bmN0aW9uIGNhbmNlbChtZXNzYWdlLCBjb25maWcsIHJlcXVlc3QpIHtcbiAgICAgIGlmICh0b2tlbi5yZWFzb24pIHtcbiAgICAgICAgLy8gQ2FuY2VsbGF0aW9uIGhhcyBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdG9rZW4ucmVhc29uID0gbmV3IENhbmNlbGVkRXJyb3IobWVzc2FnZSwgY29uZmlnLCByZXF1ZXN0KTtcbiAgICAgIHJlc29sdmVQcm9taXNlKHRva2VuLnJlYXNvbik7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhyb3dzIGEgYENhbmNlbGVkRXJyb3JgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gICAqL1xuICB0aHJvd0lmUmVxdWVzdGVkKCkge1xuICAgIGlmICh0aGlzLnJlYXNvbikge1xuICAgICAgdGhyb3cgdGhpcy5yZWFzb247XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN1YnNjcmliZSB0byB0aGUgY2FuY2VsIHNpZ25hbFxuICAgKi9cblxuICBzdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgICBpZiAodGhpcy5yZWFzb24pIHtcbiAgICAgIGxpc3RlbmVyKHRoaXMucmVhc29uKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbGlzdGVuZXJzKSB7XG4gICAgICB0aGlzLl9saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVycyA9IFtsaXN0ZW5lcl07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVuc3Vic2NyaWJlIGZyb20gdGhlIGNhbmNlbCBzaWduYWxcbiAgICovXG5cbiAgdW5zdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgICBpZiAoIXRoaXMuX2xpc3RlbmVycykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpbmRleCA9IHRoaXMuX2xpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gIH1cblxuICB0b0Fib3J0U2lnbmFsKCkge1xuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICBjb25zdCBhYm9ydCA9IChlcnIpID0+IHtcbiAgICAgIGNvbnRyb2xsZXIuYWJvcnQoZXJyKTtcbiAgICB9O1xuXG4gICAgdGhpcy5zdWJzY3JpYmUoYWJvcnQpO1xuXG4gICAgY29udHJvbGxlci5zaWduYWwudW5zdWJzY3JpYmUgPSAoKSA9PiB0aGlzLnVuc3Vic2NyaWJlKGFib3J0KTtcblxuICAgIHJldHVybiBjb250cm9sbGVyLnNpZ25hbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIGEgbmV3IGBDYW5jZWxUb2tlbmAgYW5kIGEgZnVuY3Rpb24gdGhhdCwgd2hlbiBjYWxsZWQsXG4gICAqIGNhbmNlbHMgdGhlIGBDYW5jZWxUb2tlbmAuXG4gICAqL1xuICBzdGF0aWMgc291cmNlKCkge1xuICAgIGxldCBjYW5jZWw7XG4gICAgY29uc3QgdG9rZW4gPSBuZXcgQ2FuY2VsVG9rZW4oZnVuY3Rpb24gZXhlY3V0b3IoYykge1xuICAgICAgY2FuY2VsID0gYztcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW4sXG4gICAgICBjYW5jZWwsXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDYW5jZWxUb2tlbjtcbiIsImNvbnN0IEh0dHBTdGF0dXNDb2RlID0ge1xuICBDb250aW51ZTogMTAwLFxuICBTd2l0Y2hpbmdQcm90b2NvbHM6IDEwMSxcbiAgUHJvY2Vzc2luZzogMTAyLFxuICBFYXJseUhpbnRzOiAxMDMsXG4gIE9rOiAyMDAsXG4gIENyZWF0ZWQ6IDIwMSxcbiAgQWNjZXB0ZWQ6IDIwMixcbiAgTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uOiAyMDMsXG4gIE5vQ29udGVudDogMjA0LFxuICBSZXNldENvbnRlbnQ6IDIwNSxcbiAgUGFydGlhbENvbnRlbnQ6IDIwNixcbiAgTXVsdGlTdGF0dXM6IDIwNyxcbiAgQWxyZWFkeVJlcG9ydGVkOiAyMDgsXG4gIEltVXNlZDogMjI2LFxuICBNdWx0aXBsZUNob2ljZXM6IDMwMCxcbiAgTW92ZWRQZXJtYW5lbnRseTogMzAxLFxuICBGb3VuZDogMzAyLFxuICBTZWVPdGhlcjogMzAzLFxuICBOb3RNb2RpZmllZDogMzA0LFxuICBVc2VQcm94eTogMzA1LFxuICBVbnVzZWQ6IDMwNixcbiAgVGVtcG9yYXJ5UmVkaXJlY3Q6IDMwNyxcbiAgUGVybWFuZW50UmVkaXJlY3Q6IDMwOCxcbiAgQmFkUmVxdWVzdDogNDAwLFxuICBVbmF1dGhvcml6ZWQ6IDQwMSxcbiAgUGF5bWVudFJlcXVpcmVkOiA0MDIsXG4gIEZvcmJpZGRlbjogNDAzLFxuICBOb3RGb3VuZDogNDA0LFxuICBNZXRob2ROb3RBbGxvd2VkOiA0MDUsXG4gIE5vdEFjY2VwdGFibGU6IDQwNixcbiAgUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOiA0MDcsXG4gIFJlcXVlc3RUaW1lb3V0OiA0MDgsXG4gIENvbmZsaWN0OiA0MDksXG4gIEdvbmU6IDQxMCxcbiAgTGVuZ3RoUmVxdWlyZWQ6IDQxMSxcbiAgUHJlY29uZGl0aW9uRmFpbGVkOiA0MTIsXG4gIFBheWxvYWRUb29MYXJnZTogNDEzLFxuICBVcmlUb29Mb25nOiA0MTQsXG4gIFVuc3VwcG9ydGVkTWVkaWFUeXBlOiA0MTUsXG4gIFJhbmdlTm90U2F0aXNmaWFibGU6IDQxNixcbiAgRXhwZWN0YXRpb25GYWlsZWQ6IDQxNyxcbiAgSW1BVGVhcG90OiA0MTgsXG4gIE1pc2RpcmVjdGVkUmVxdWVzdDogNDIxLFxuICBVbnByb2Nlc3NhYmxlRW50aXR5OiA0MjIsXG4gIExvY2tlZDogNDIzLFxuICBGYWlsZWREZXBlbmRlbmN5OiA0MjQsXG4gIFRvb0Vhcmx5OiA0MjUsXG4gIFVwZ3JhZGVSZXF1aXJlZDogNDI2LFxuICBQcmVjb25kaXRpb25SZXF1aXJlZDogNDI4LFxuICBUb29NYW55UmVxdWVzdHM6IDQyOSxcbiAgUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlOiA0MzEsXG4gIFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOiA0NTEsXG4gIEludGVybmFsU2VydmVyRXJyb3I6IDUwMCxcbiAgTm90SW1wbGVtZW50ZWQ6IDUwMSxcbiAgQmFkR2F0ZXdheTogNTAyLFxuICBTZXJ2aWNlVW5hdmFpbGFibGU6IDUwMyxcbiAgR2F0ZXdheVRpbWVvdXQ6IDUwNCxcbiAgSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6IDUwNSxcbiAgVmFyaWFudEFsc29OZWdvdGlhdGVzOiA1MDYsXG4gIEluc3VmZmljaWVudFN0b3JhZ2U6IDUwNyxcbiAgTG9vcERldGVjdGVkOiA1MDgsXG4gIE5vdEV4dGVuZGVkOiA1MTAsXG4gIE5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkOiA1MTEsXG4gIFdlYlNlcnZlcklzRG93bjogNTIxLFxuICBDb25uZWN0aW9uVGltZWRPdXQ6IDUyMixcbiAgT3JpZ2luSXNVbnJlYWNoYWJsZTogNTIzLFxuICBUaW1lb3V0T2NjdXJyZWQ6IDUyNCxcbiAgU3NsSGFuZHNoYWtlRmFpbGVkOiA1MjUsXG4gIEludmFsaWRTc2xDZXJ0aWZpY2F0ZTogNTI2LFxufTtcblxuT2JqZWN0LmVudHJpZXMoSHR0cFN0YXR1c0NvZGUpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICBIdHRwU3RhdHVzQ29kZVt2YWx1ZV0gPSBrZXk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgSHR0cFN0YXR1c0NvZGU7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzLmpzJztcbmltcG9ydCBiaW5kIGZyb20gJy4vaGVscGVycy9iaW5kLmpzJztcbmltcG9ydCBBeGlvcyBmcm9tICcuL2NvcmUvQXhpb3MuanMnO1xuaW1wb3J0IG1lcmdlQ29uZmlnIGZyb20gJy4vY29yZS9tZXJnZUNvbmZpZy5qcyc7XG5pbXBvcnQgZGVmYXVsdHMgZnJvbSAnLi9kZWZhdWx0cy9pbmRleC5qcyc7XG5pbXBvcnQgZm9ybURhdGFUb0pTT04gZnJvbSAnLi9oZWxwZXJzL2Zvcm1EYXRhVG9KU09OLmpzJztcbmltcG9ydCBDYW5jZWxlZEVycm9yIGZyb20gJy4vY2FuY2VsL0NhbmNlbGVkRXJyb3IuanMnO1xuaW1wb3J0IENhbmNlbFRva2VuIGZyb20gJy4vY2FuY2VsL0NhbmNlbFRva2VuLmpzJztcbmltcG9ydCBpc0NhbmNlbCBmcm9tICcuL2NhbmNlbC9pc0NhbmNlbC5qcyc7XG5pbXBvcnQgeyBWRVJTSU9OIH0gZnJvbSAnLi9lbnYvZGF0YS5qcyc7XG5pbXBvcnQgdG9Gb3JtRGF0YSBmcm9tICcuL2hlbHBlcnMvdG9Gb3JtRGF0YS5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuL2NvcmUvQXhpb3NFcnJvci5qcyc7XG5pbXBvcnQgc3ByZWFkIGZyb20gJy4vaGVscGVycy9zcHJlYWQuanMnO1xuaW1wb3J0IGlzQXhpb3NFcnJvciBmcm9tICcuL2hlbHBlcnMvaXNBeGlvc0Vycm9yLmpzJztcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSAnLi9jb3JlL0F4aW9zSGVhZGVycy5qcyc7XG5pbXBvcnQgYWRhcHRlcnMgZnJvbSAnLi9hZGFwdGVycy9hZGFwdGVycy5qcyc7XG5pbXBvcnQgSHR0cFN0YXR1c0NvZGUgZnJvbSAnLi9oZWxwZXJzL0h0dHBTdGF0dXNDb2RlLmpzJztcblxuLyoqXG4gKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZGVmYXVsdENvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm5zIHtBeGlvc30gQSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdENvbmZpZykge1xuICBjb25zdCBjb250ZXh0ID0gbmV3IEF4aW9zKGRlZmF1bHRDb25maWcpO1xuICBjb25zdCBpbnN0YW5jZSA9IGJpbmQoQXhpb3MucHJvdG90eXBlLnJlcXVlc3QsIGNvbnRleHQpO1xuXG4gIC8vIENvcHkgYXhpb3MucHJvdG90eXBlIHRvIGluc3RhbmNlXG4gIHV0aWxzLmV4dGVuZChpbnN0YW5jZSwgQXhpb3MucHJvdG90eXBlLCBjb250ZXh0LCB7IGFsbE93bktleXM6IHRydWUgfSk7XG5cbiAgLy8gQ29weSBjb250ZXh0IHRvIGluc3RhbmNlXG4gIHV0aWxzLmV4dGVuZChpbnN0YW5jZSwgY29udGV4dCwgbnVsbCwgeyBhbGxPd25LZXlzOiB0cnVlIH0pO1xuXG4gIC8vIEZhY3RvcnkgZm9yIGNyZWF0aW5nIG5ldyBpbnN0YW5jZXNcbiAgaW5zdGFuY2UuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGluc3RhbmNlQ29uZmlnKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUluc3RhbmNlKG1lcmdlQ29uZmlnKGRlZmF1bHRDb25maWcsIGluc3RhbmNlQ29uZmlnKSk7XG4gIH07XG5cbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuXG4vLyBDcmVhdGUgdGhlIGRlZmF1bHQgaW5zdGFuY2UgdG8gYmUgZXhwb3J0ZWRcbmNvbnN0IGF4aW9zID0gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdHMpO1xuXG4vLyBFeHBvc2UgQXhpb3MgY2xhc3MgdG8gYWxsb3cgY2xhc3MgaW5oZXJpdGFuY2VcbmF4aW9zLkF4aW9zID0gQXhpb3M7XG5cbi8vIEV4cG9zZSBDYW5jZWwgJiBDYW5jZWxUb2tlblxuYXhpb3MuQ2FuY2VsZWRFcnJvciA9IENhbmNlbGVkRXJyb3I7XG5heGlvcy5DYW5jZWxUb2tlbiA9IENhbmNlbFRva2VuO1xuYXhpb3MuaXNDYW5jZWwgPSBpc0NhbmNlbDtcbmF4aW9zLlZFUlNJT04gPSBWRVJTSU9OO1xuYXhpb3MudG9Gb3JtRGF0YSA9IHRvRm9ybURhdGE7XG5cbi8vIEV4cG9zZSBBeGlvc0Vycm9yIGNsYXNzXG5heGlvcy5BeGlvc0Vycm9yID0gQXhpb3NFcnJvcjtcblxuLy8gYWxpYXMgZm9yIENhbmNlbGVkRXJyb3IgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbmF4aW9zLkNhbmNlbCA9IGF4aW9zLkNhbmNlbGVkRXJyb3I7XG5cbi8vIEV4cG9zZSBhbGwvc3ByZWFkXG5heGlvcy5hbGwgPSBmdW5jdGlvbiBhbGwocHJvbWlzZXMpIHtcbiAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKTtcbn07XG5cbmF4aW9zLnNwcmVhZCA9IHNwcmVhZDtcblxuLy8gRXhwb3NlIGlzQXhpb3NFcnJvclxuYXhpb3MuaXNBeGlvc0Vycm9yID0gaXNBeGlvc0Vycm9yO1xuXG4vLyBFeHBvc2UgbWVyZ2VDb25maWdcbmF4aW9zLm1lcmdlQ29uZmlnID0gbWVyZ2VDb25maWc7XG5cbmF4aW9zLkF4aW9zSGVhZGVycyA9IEF4aW9zSGVhZGVycztcblxuYXhpb3MuZm9ybVRvSlNPTiA9ICh0aGluZykgPT4gZm9ybURhdGFUb0pTT04odXRpbHMuaXNIVE1MRm9ybSh0aGluZykgPyBuZXcgRm9ybURhdGEodGhpbmcpIDogdGhpbmcpO1xuXG5heGlvcy5nZXRBZGFwdGVyID0gYWRhcHRlcnMuZ2V0QWRhcHRlcjtcblxuYXhpb3MuSHR0cFN0YXR1c0NvZGUgPSBIdHRwU3RhdHVzQ29kZTtcblxuYXhpb3MuZGVmYXVsdCA9IGF4aW9zO1xuXG4vLyB0aGlzIG1vZHVsZSBzaG91bGQgb25seSBoYXZlIGEgZGVmYXVsdCBleHBvcnRcbmV4cG9ydCBkZWZhdWx0IGF4aW9zO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFN5bnRhY3RpYyBzdWdhciBmb3IgaW52b2tpbmcgYSBmdW5jdGlvbiBhbmQgZXhwYW5kaW5nIGFuIGFycmF5IGZvciBhcmd1bWVudHMuXG4gKlxuICogQ29tbW9uIHVzZSBjYXNlIHdvdWxkIGJlIHRvIHVzZSBgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5YC5cbiAqXG4gKiAgYGBganNcbiAqICBmdW5jdGlvbiBmKHgsIHksIHopIHt9XG4gKiAgY29uc3QgYXJncyA9IFsxLCAyLCAzXTtcbiAqICBmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICogIGBgYFxuICpcbiAqIFdpdGggYHNwcmVhZGAgdGhpcyBleGFtcGxlIGNhbiBiZSByZS13cml0dGVuLlxuICpcbiAqICBgYGBqc1xuICogIHNwcmVhZChmdW5jdGlvbih4LCB5LCB6KSB7fSkoWzEsIDIsIDNdKTtcbiAqICBgYGBcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICpcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3ByZWFkKGNhbGxiYWNrKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKGFycikge1xuICAgIHJldHVybiBjYWxsYmFjay5hcHBseShudWxsLCBhcnIpO1xuICB9O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgcGF5bG9hZCBpcyBhbiBlcnJvciB0aHJvd24gYnkgQXhpb3NcbiAqXG4gKiBAcGFyYW0geyp9IHBheWxvYWQgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgcGF5bG9hZCBpcyBhbiBlcnJvciB0aHJvd24gYnkgQXhpb3MsIG90aGVyd2lzZSBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0F4aW9zRXJyb3IocGF5bG9hZCkge1xuICByZXR1cm4gdXRpbHMuaXNPYmplY3QocGF5bG9hZCkgJiYgcGF5bG9hZC5pc0F4aW9zRXJyb3IgPT09IHRydWU7XG59XG4iLCIvKipcbiAqIFNlcmlhbGl6ZXMgb2JqZWN0c1xuICpcbiAqIEBuYW1lIHNlcmlhbGl6ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBPYmplY3QgdG8gYmUgc2VyaWFsaXplZFxuICogQHBhcmFtIHtBbnl9IHByZWZpeFxuICogQHJldHVybnMge1N0cmluZ30gU2VyaWFsaXplZCBvYmplY3RcbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC5zZXJpYWxpemUocGFyYW0xLCBwYXJhbTIpO1xuICogLy89dHJ1ZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzZXJpYWxpemUob2JqLCBwcmVmaXgpIHtcbiAgaWYgKCFvYmopIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iailcbiAgICAubWFwKHAgPT4ge1xuICAgICAgY29uc3QgayA9IHByZWZpeCB8fCBwO1xuICAgICAgY29uc3QgdiA9IG9ialtwXTtcblxuICAgICAgcmV0dXJuIHR5cGVvZiB2ID09PSAnb2JqZWN0J1xuICAgICAgICA/IHNlcmlhbGl6ZSh2LCBrKVxuICAgICAgICA6IGAke2VuY29kZVVSSUNvbXBvbmVudChrKX09JHtlbmNvZGVVUklDb21wb25lbnQodil9YDtcbiAgICB9KVxuICAgIC5qb2luKCcmJyk7XG59XG4iLCJpbXBvcnQgZ2V0SnNvbiBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWpzb24nO1xuXG5jb25zdCBERUZBVUxUX1BFTElBU19VUkwgPSAnaHR0cHM6Ly9hcGkuZGlnaXRyYW5zaXQuZmkvZ2VvY29kaW5nL3YxL3NlYXJjaCc7XG4vKipcbiAqIDxERVNDUklQVElPTj5cbiAqXG4gKiBAbmFtZSBnZXRHZW9jb2RpbmdSZXN1bHRzXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VhcmNoU3RyaW5nXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VhcmNoUGFyYW1zIChPcHRpb25hbCkgUGFyYW1ldGVycyBhcHBlbmRlZCB0byB1cmwsIGJhc2ljYWxseSBib3ggLyBwb2x5Z29uIHRvIHJlc3RyaWN0IHNlYXJjaCBhcmVhXG4gKiBAcGFyYW0ge1N0cmluZ30gbGFuZyAoT3B0aW9uYWwpIHNlYXJjaCBsYW5ndWFnZVxuICogQHBhcmFtIHtPYmplY3R9IGZvY3VzUG9pbnQgKE9wdGlvbmFsKSBPd24gUG9zaXRpb24gKFBFTElBUyBBUEkpXG4gKiBAcGFyYW0ge1N0cmluZ30gc291cmNlcyAoT3B0aW9uYWwpIHNlYXJjaCBzb3VyY2VzIChlLmcgT1NNLCBHVEZTLi4pXG4gKiBAcGFyYW0ge09iamVjdH0gbWluaW1hbFJlZ2V4cCAoT3B0aW9uYWwpIFJlZ2V4cCBmb3IgdGVzdGluZ1xuICogQHBhcmFtIHsqfSBnZW9jb2RpbmdMYXllcnMgKE9wdGlvbmFsKSBBcnJheSBvZiBzdHJpbmdzIHRoYXQgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hpY2ggbGF5ZXJzIGlzIHNlYXJjaGVkLCBlLmcuIFsndmVudWUnLCAnYWRkcmVzcycsICdzdG9wJ11cbiAqIEByZXR1cm5zIHtTdHJpbmd9IFJlc3VsdHMgaW4gSlNPTiBmb3JtXG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwuZ2V0R2VvY29kaW5nUmVzdWx0cyhcInJlc3VsdFwiKTtcbiAqIC8vPSBlLmcuIHt0ZXh0OlwicmVzdWx0XCJ9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEdlb2NvZGluZ1Jlc3VsdHMoXG4gIHNlYXJjaFN0cmluZyxcbiAgc2VhcmNoUGFyYW1zLFxuICBsYW5nLFxuICBmb2N1c1BvaW50LFxuICBzb3VyY2VzLFxuICBwZWxpYXNVcmwsXG4gIG1pbmltYWxSZWdleHAsXG4gIGdlb2NvZGluZ0xheWVycyxcbikge1xuICBjb25zdCB0ZXh0ID0gc2VhcmNoU3RyaW5nID8gc2VhcmNoU3RyaW5nLnRyaW0oKSA6IG51bGw7XG4gIGlmIChcbiAgICB0ZXh0ID09PSB1bmRlZmluZWQgfHxcbiAgICB0ZXh0ID09PSBudWxsIHx8XG4gICAgdGV4dC5sZW5ndGggPCAxIHx8XG4gICAgKG1pbmltYWxSZWdleHAgJiYgIW1pbmltYWxSZWdleHAudGVzdCh0ZXh0KSlcbiAgKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG4gIH1cbiAgY29uc3QgUEVMSUFTX1VSTCA9IHBlbGlhc1VybCB8fCBERUZBVUxUX1BFTElBU19VUkw7XG4gIGxldCBvcHRzID0geyB0ZXh0LCAuLi5zZWFyY2hQYXJhbXMsIC4uLmZvY3VzUG9pbnQsIGxhbmcgfTtcbiAgaWYgKHNvdXJjZXMpIHtcbiAgICBvcHRzID0geyAuLi5vcHRzLCBzb3VyY2VzIH07XG4gIH1cbiAgaWYgKGdlb2NvZGluZ0xheWVycykge1xuICAgIGNvbnN0IGxheWVycyA9IGdlb2NvZGluZ0xheWVycy50b1N0cmluZygpO1xuICAgIG9wdHMgPSB7IC4uLm9wdHMsIGxheWVycyB9O1xuICB9XG4gIHJldHVybiBnZXRKc29uKFBFTElBU19VUkwsIG9wdHMpLnRoZW4ocmVzID0+IHtcbiAgICByZXR1cm4gcmVzLmZlYXR1cmVzO1xuICB9KTtcbn1cbiIsImltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgc2VyaWFsaXplIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1zZXJpYWxpemUnO1xuLyoqXG4gKiAgUmV0dXJuIFByb21pc2UgZm9yIGEgdXJsIGpzb24gZ2V0IHJlcXVlc3RcbiAqXG4gKiBAbmFtZSBnZXRKc29uXG4gKiBAcGFyYW0ge1N0cmluZ30gdXJsXG4gKiBAcGFyYW0ge0FycmF5fSBwYXJhbXNcbiAqIEByZXR1cm5zIHtPYmplY3R9IHJlc3BvbnNlXG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwuZ2V0SnNvbihwYXJhbTEsIHBhcmFtMik7XG4gKiAvLz1yZXNwb25zZVxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEpzb24odXJsLCBwYXJhbXMpIHtcbiAgcmV0dXJuIGF4aW9zXG4gICAgLmdldChcbiAgICAgIGVuY29kZVVSSSh1cmwpICtcbiAgICAgICAgKHBhcmFtc1xuICAgICAgICAgID8gKHVybC5zZWFyY2goL1xcPy8pID09PSAtMSA/ICc/JyA6ICcmJykgKyBzZXJpYWxpemUocGFyYW1zKVxuICAgICAgICAgIDogJycpLFxuICAgICAge1xuICAgICAgICB0aW1lb3V0OiAxMDAwMCxcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcblxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgQWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIClcbiAgICAudGhlbihyZXMgPT4ge1xuICAgICAgcmV0dXJuIHJlcy5kYXRhO1xuICAgIH0pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENyZWF0ZSBhIGJvdW5kIHZlcnNpb24gb2YgYSBmdW5jdGlvbiB3aXRoIGEgc3BlY2lmaWVkIGB0aGlzYCBjb250ZXh0XG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gLSBUaGUgZnVuY3Rpb24gdG8gYmluZFxuICogQHBhcmFtIHsqfSB0aGlzQXJnIC0gVGhlIHZhbHVlIHRvIGJlIHBhc3NlZCBhcyB0aGUgYHRoaXNgIHBhcmFtZXRlclxuICogQHJldHVybnMge0Z1bmN0aW9ufSBBIG5ldyBmdW5jdGlvbiB0aGF0IHdpbGwgY2FsbCB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gd2l0aCB0aGUgc3BlY2lmaWVkIGB0aGlzYCBjb250ZXh0XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJpbmQoZm4sIHRoaXNBcmcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXNBcmcsIGFyZ3VtZW50cyk7XG4gIH07XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBiaW5kIGZyb20gJy4vaGVscGVycy9iaW5kLmpzJztcblxuLy8gdXRpbHMgaXMgYSBsaWJyYXJ5IG9mIGdlbmVyaWMgaGVscGVyIGZ1bmN0aW9ucyBub24tc3BlY2lmaWMgdG8gYXhpb3NcblxuY29uc3QgeyB0b1N0cmluZyB9ID0gT2JqZWN0LnByb3RvdHlwZTtcbmNvbnN0IHsgZ2V0UHJvdG90eXBlT2YgfSA9IE9iamVjdDtcbmNvbnN0IHsgaXRlcmF0b3IsIHRvU3RyaW5nVGFnIH0gPSBTeW1ib2w7XG5cbmNvbnN0IGtpbmRPZiA9ICgoY2FjaGUpID0+ICh0aGluZykgPT4ge1xuICBjb25zdCBzdHIgPSB0b1N0cmluZy5jYWxsKHRoaW5nKTtcbiAgcmV0dXJuIGNhY2hlW3N0cl0gfHwgKGNhY2hlW3N0cl0gPSBzdHIuc2xpY2UoOCwgLTEpLnRvTG93ZXJDYXNlKCkpO1xufSkoT2JqZWN0LmNyZWF0ZShudWxsKSk7XG5cbmNvbnN0IGtpbmRPZlRlc3QgPSAodHlwZSkgPT4ge1xuICB0eXBlID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gKHRoaW5nKSA9PiBraW5kT2YodGhpbmcpID09PSB0eXBlO1xufTtcblxuY29uc3QgdHlwZU9mVGVzdCA9ICh0eXBlKSA9PiAodGhpbmcpID0+IHR5cGVvZiB0aGluZyA9PT0gdHlwZTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIG5vbi1udWxsIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IHsgaXNBcnJheSB9ID0gQXJyYXk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgdW5kZWZpbmVkXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNVbmRlZmluZWQgPSB0eXBlT2ZUZXN0KCd1bmRlZmluZWQnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0J1ZmZlcih2YWwpIHtcbiAgcmV0dXJuIChcbiAgICB2YWwgIT09IG51bGwgJiZcbiAgICAhaXNVbmRlZmluZWQodmFsKSAmJlxuICAgIHZhbC5jb25zdHJ1Y3RvciAhPT0gbnVsbCAmJlxuICAgICFpc1VuZGVmaW5lZCh2YWwuY29uc3RydWN0b3IpICYmXG4gICAgaXNGdW5jdGlvbih2YWwuY29uc3RydWN0b3IuaXNCdWZmZXIpICYmXG4gICAgdmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyKHZhbClcbiAgKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0FycmF5QnVmZmVyID0ga2luZE9mVGVzdCgnQXJyYXlCdWZmZXInKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlCdWZmZXJWaWV3KHZhbCkge1xuICBsZXQgcmVzdWx0O1xuICBpZiAodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJiBBcnJheUJ1ZmZlci5pc1ZpZXcpIHtcbiAgICByZXN1bHQgPSBBcnJheUJ1ZmZlci5pc1ZpZXcodmFsKTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSB2YWwgJiYgdmFsLmJ1ZmZlciAmJiBpc0FycmF5QnVmZmVyKHZhbC5idWZmZXIpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJpbmdcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyaW5nLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNTdHJpbmcgPSB0eXBlT2ZUZXN0KCdzdHJpbmcnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRnVuY3Rpb24sIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Z1bmN0aW9uID0gdHlwZU9mVGVzdCgnZnVuY3Rpb24nKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIE51bWJlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBOdW1iZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc051bWJlciA9IHR5cGVPZlRlc3QoJ251bWJlcicpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdGhpbmcgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc09iamVjdCA9ICh0aGluZykgPT4gdGhpbmcgIT09IG51bGwgJiYgdHlwZW9mIHRoaW5nID09PSAnb2JqZWN0JztcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJvb2xlYW5cbiAqXG4gKiBAcGFyYW0geyp9IHRoaW5nIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJvb2xlYW4sIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Jvb2xlYW4gPSAodGhpbmcpID0+IHRoaW5nID09PSB0cnVlIHx8IHRoaW5nID09PSBmYWxzZTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHBsYWluIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1BsYWluT2JqZWN0ID0gKHZhbCkgPT4ge1xuICBpZiAoa2luZE9mKHZhbCkgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgcHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YodmFsKTtcbiAgcmV0dXJuIChcbiAgICAocHJvdG90eXBlID09PSBudWxsIHx8XG4gICAgICBwcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGUgfHxcbiAgICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90b3R5cGUpID09PSBudWxsKSAmJlxuICAgICEodG9TdHJpbmdUYWcgaW4gdmFsKSAmJlxuICAgICEoaXRlcmF0b3IgaW4gdmFsKVxuICApO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBlbXB0eSBvYmplY3QgKHNhZmVseSBoYW5kbGVzIEJ1ZmZlcnMpXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBlbXB0eSBvYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0VtcHR5T2JqZWN0ID0gKHZhbCkgPT4ge1xuICAvLyBFYXJseSByZXR1cm4gZm9yIG5vbi1vYmplY3RzIG9yIEJ1ZmZlcnMgdG8gcHJldmVudCBSYW5nZUVycm9yXG4gIGlmICghaXNPYmplY3QodmFsKSB8fCBpc0J1ZmZlcih2YWwpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModmFsKS5sZW5ndGggPT09IDAgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbCkgPT09IE9iamVjdC5wcm90b3R5cGU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBGYWxsYmFjayBmb3IgYW55IG90aGVyIG9iamVjdHMgdGhhdCBtaWdodCBjYXVzZSBSYW5nZUVycm9yIHdpdGggT2JqZWN0LmtleXMoKVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIERhdGVcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRGF0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRGF0ZSA9IGtpbmRPZlRlc3QoJ0RhdGUnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZpbGVcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRmlsZSA9IGtpbmRPZlRlc3QoJ0ZpbGUnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFJlYWN0IE5hdGl2ZSBCbG9iXG4gKiBSZWFjdCBOYXRpdmUgXCJibG9iXCI6IGFuIG9iamVjdCB3aXRoIGEgYHVyaWAgYXR0cmlidXRlLiBPcHRpb25hbGx5LCBpdCBjYW5cbiAqIGFsc28gaGF2ZSBhIGBuYW1lYCBhbmQgYHR5cGVgIGF0dHJpYnV0ZSB0byBzcGVjaWZ5IGZpbGVuYW1lIGFuZCBjb250ZW50IHR5cGVcbiAqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC1uYXRpdmUvYmxvYi8yNjY4NGNmM2FkZjQwOTRlYjZjNDA1ZDM0NWE3NWJmOGM3YzBiZjg4L0xpYnJhcmllcy9OZXR3b3JrL0Zvcm1EYXRhLmpzI0w2OC1MNzFcbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBSZWFjdCBOYXRpdmUgQmxvYiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzUmVhY3ROYXRpdmVCbG9iID0gKHZhbHVlKSA9PiB7XG4gIHJldHVybiAhISh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUudXJpICE9PSAndW5kZWZpbmVkJyk7XG59O1xuXG4vKipcbiAqIERldGVybWluZSBpZiBlbnZpcm9ubWVudCBpcyBSZWFjdCBOYXRpdmVcbiAqIFJlYWN0TmF0aXZlIGBGb3JtRGF0YWAgaGFzIGEgbm9uLXN0YW5kYXJkIGBnZXRQYXJ0cygpYCBtZXRob2RcbiAqXG4gKiBAcGFyYW0geyp9IGZvcm1EYXRhIFRoZSBmb3JtRGF0YSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgZW52aXJvbm1lbnQgaXMgUmVhY3QgTmF0aXZlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNSZWFjdE5hdGl2ZSA9IChmb3JtRGF0YSkgPT4gZm9ybURhdGEgJiYgdHlwZW9mIGZvcm1EYXRhLmdldFBhcnRzICE9PSAndW5kZWZpbmVkJztcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJsb2JcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQmxvYiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzQmxvYiA9IGtpbmRPZlRlc3QoJ0Jsb2InKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZpbGVMaXN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZpbGVMaXN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGaWxlTGlzdCA9IGtpbmRPZlRlc3QoJ0ZpbGVMaXN0Jyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJlYW1cbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyZWFtLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNTdHJlYW0gPSAodmFsKSA9PiBpc09iamVjdCh2YWwpICYmIGlzRnVuY3Rpb24odmFsLnBpcGUpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRm9ybURhdGFcbiAqXG4gKiBAcGFyYW0geyp9IHRoaW5nIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gRm9ybURhdGEsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBnZXRHbG9iYWwoKSB7XG4gIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcpIHJldHVybiBnbG9iYWxUaGlzO1xuICBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSByZXR1cm4gc2VsZjtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSByZXR1cm4gd2luZG93O1xuICBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHJldHVybiBnbG9iYWw7XG4gIHJldHVybiB7fTtcbn1cblxuY29uc3QgRyA9IGdldEdsb2JhbCgpO1xuY29uc3QgRm9ybURhdGFDdG9yID0gdHlwZW9mIEcuRm9ybURhdGEgIT09ICd1bmRlZmluZWQnID8gRy5Gb3JtRGF0YSA6IHVuZGVmaW5lZDtcblxuY29uc3QgaXNGb3JtRGF0YSA9ICh0aGluZykgPT4ge1xuICBpZiAoIXRoaW5nKSByZXR1cm4gZmFsc2U7XG4gIGlmIChGb3JtRGF0YUN0b3IgJiYgdGhpbmcgaW5zdGFuY2VvZiBGb3JtRGF0YUN0b3IpIHJldHVybiB0cnVlO1xuICAvLyBSZWplY3QgcGxhaW4gb2JqZWN0cyBpbmhlcml0aW5nIGRpcmVjdGx5IGZyb20gT2JqZWN0LnByb3RvdHlwZSBzbyBwcm90b3R5cGUtcG9sbHV0aW9uIGdhZGdldHMgY2FuJ3Qgc3Bvb2YgRm9ybURhdGEuXG4gIGNvbnN0IHByb3RvID0gZ2V0UHJvdG90eXBlT2YodGhpbmcpO1xuICBpZiAoIXByb3RvIHx8IHByb3RvID09PSBPYmplY3QucHJvdG90eXBlKSByZXR1cm4gZmFsc2U7XG4gIGlmICghaXNGdW5jdGlvbih0aGluZy5hcHBlbmQpKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGtpbmQgPSBraW5kT2YodGhpbmcpO1xuICByZXR1cm4gKFxuICAgIGtpbmQgPT09ICdmb3JtZGF0YScgfHxcbiAgICAvLyBkZXRlY3QgZm9ybS1kYXRhIGluc3RhbmNlXG4gICAgKGtpbmQgPT09ICdvYmplY3QnICYmIGlzRnVuY3Rpb24odGhpbmcudG9TdHJpbmcpICYmIHRoaW5nLnRvU3RyaW5nKCkgPT09ICdbb2JqZWN0IEZvcm1EYXRhXScpXG4gICk7XG59O1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNVUkxTZWFyY2hQYXJhbXMgPSBraW5kT2ZUZXN0KCdVUkxTZWFyY2hQYXJhbXMnKTtcblxuY29uc3QgW2lzUmVhZGFibGVTdHJlYW0sIGlzUmVxdWVzdCwgaXNSZXNwb25zZSwgaXNIZWFkZXJzXSA9IFtcbiAgJ1JlYWRhYmxlU3RyZWFtJyxcbiAgJ1JlcXVlc3QnLFxuICAnUmVzcG9uc2UnLFxuICAnSGVhZGVycycsXG5dLm1hcChraW5kT2ZUZXN0KTtcblxuLyoqXG4gKiBUcmltIGV4Y2VzcyB3aGl0ZXNwYWNlIG9mZiB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyIFRoZSBTdHJpbmcgdG8gdHJpbVxuICpcbiAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBTdHJpbmcgZnJlZWQgb2YgZXhjZXNzIHdoaXRlc3BhY2VcbiAqL1xuY29uc3QgdHJpbSA9IChzdHIpID0+IHtcbiAgcmV0dXJuIHN0ci50cmltID8gc3RyLnRyaW0oKSA6IHN0ci5yZXBsYWNlKC9eW1xcc1xcdUZFRkZcXHhBMF0rfFtcXHNcXHVGRUZGXFx4QTBdKyQvZywgJycpO1xufTtcbi8qKlxuICogSXRlcmF0ZSBvdmVyIGFuIEFycmF5IG9yIGFuIE9iamVjdCBpbnZva2luZyBhIGZ1bmN0aW9uIGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgYG9iamAgaXMgYW4gQXJyYXkgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBpbmRleCwgYW5kIGNvbXBsZXRlIGFycmF5IGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgJ29iaicgaXMgYW4gT2JqZWN0IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwga2V5LCBhbmQgY29tcGxldGUgb2JqZWN0IGZvciBlYWNoIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fEFycmF5PHVua25vd24+fSBvYmogVGhlIG9iamVjdCB0byBpdGVyYXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGZvciBlYWNoIGl0ZW1cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLmFsbE93bktleXMgPSBmYWxzZV1cbiAqIEByZXR1cm5zIHthbnl9XG4gKi9cbmZ1bmN0aW9uIGZvckVhY2gob2JqLCBmbiwgeyBhbGxPd25LZXlzID0gZmFsc2UgfSA9IHt9KSB7XG4gIC8vIERvbid0IGJvdGhlciBpZiBubyB2YWx1ZSBwcm92aWRlZFxuICBpZiAob2JqID09PSBudWxsIHx8IHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IGk7XG4gIGxldCBsO1xuXG4gIC8vIEZvcmNlIGFuIGFycmF5IGlmIG5vdCBhbHJlYWR5IHNvbWV0aGluZyBpdGVyYWJsZVxuICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICBvYmogPSBbb2JqXTtcbiAgfVxuXG4gIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgYXJyYXkgdmFsdWVzXG4gICAgZm9yIChpID0gMCwgbCA9IG9iai5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2ldLCBpLCBvYmopO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBCdWZmZXIgY2hlY2tcbiAgICBpZiAoaXNCdWZmZXIob2JqKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEl0ZXJhdGUgb3ZlciBvYmplY3Qga2V5c1xuICAgIGNvbnN0IGtleXMgPSBhbGxPd25LZXlzID8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKSA6IE9iamVjdC5rZXlzKG9iaik7XG4gICAgY29uc3QgbGVuID0ga2V5cy5sZW5ndGg7XG4gICAgbGV0IGtleTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAga2V5ID0ga2V5c1tpXTtcbiAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2tleV0sIGtleSwgb2JqKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBGaW5kcyBhIGtleSBpbiBhbiBvYmplY3QsIGNhc2UtaW5zZW5zaXRpdmUsIHJldHVybmluZyB0aGUgYWN0dWFsIGtleSBuYW1lLlxuICogUmV0dXJucyBudWxsIGlmIHRoZSBvYmplY3QgaXMgYSBCdWZmZXIgb3IgaWYgbm8gbWF0Y2ggaXMgZm91bmQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iaiAtIFRoZSBvYmplY3QgdG8gc2VhcmNoLlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgdG8gZmluZCAoY2FzZS1pbnNlbnNpdGl2ZSkuXG4gKiBAcmV0dXJucyB7P3N0cmluZ30gVGhlIGFjdHVhbCBrZXkgbmFtZSBpZiBmb3VuZCwgb3RoZXJ3aXNlIG51bGwuXG4gKi9cbmZ1bmN0aW9uIGZpbmRLZXkob2JqLCBrZXkpIHtcbiAgaWYgKGlzQnVmZmVyKG9iaikpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGtleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgbGV0IGkgPSBrZXlzLmxlbmd0aDtcbiAgbGV0IF9rZXk7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgX2tleSA9IGtleXNbaV07XG4gICAgaWYgKGtleSA9PT0gX2tleS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICByZXR1cm4gX2tleTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmNvbnN0IF9nbG9iYWwgPSAoKCkgPT4ge1xuICAvKmVzbGludCBuby11bmRlZjowKi9cbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJykgcmV0dXJuIGdsb2JhbFRoaXM7XG4gIHJldHVybiB0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgPyBzZWxmIDogdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiBnbG9iYWw7XG59KSgpO1xuXG5jb25zdCBpc0NvbnRleHREZWZpbmVkID0gKGNvbnRleHQpID0+ICFpc1VuZGVmaW5lZChjb250ZXh0KSAmJiBjb250ZXh0ICE9PSBfZ2xvYmFsO1xuXG4vKipcbiAqIEFjY2VwdHMgdmFyYXJncyBleHBlY3RpbmcgZWFjaCBhcmd1bWVudCB0byBiZSBhbiBvYmplY3QsIHRoZW5cbiAqIGltbXV0YWJseSBtZXJnZXMgdGhlIHByb3BlcnRpZXMgb2YgZWFjaCBvYmplY3QgYW5kIHJldHVybnMgcmVzdWx0LlxuICpcbiAqIFdoZW4gbXVsdGlwbGUgb2JqZWN0cyBjb250YWluIHRoZSBzYW1lIGtleSB0aGUgbGF0ZXIgb2JqZWN0IGluXG4gKiB0aGUgYXJndW1lbnRzIGxpc3Qgd2lsbCB0YWtlIHByZWNlZGVuY2UuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogY29uc3QgcmVzdWx0ID0gbWVyZ2Uoe2ZvbzogMTIzfSwge2ZvbzogNDU2fSk7XG4gKiBjb25zb2xlLmxvZyhyZXN1bHQuZm9vKTsgLy8gb3V0cHV0cyA0NTZcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmoxIE9iamVjdCB0byBtZXJnZVxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJlc3VsdCBvZiBhbGwgbWVyZ2UgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBtZXJnZSguLi5vYmpzKSB7XG4gIGNvbnN0IHsgY2FzZWxlc3MsIHNraXBVbmRlZmluZWQgfSA9IChpc0NvbnRleHREZWZpbmVkKHRoaXMpICYmIHRoaXMpIHx8IHt9O1xuICBjb25zdCByZXN1bHQgPSB7fTtcbiAgY29uc3QgYXNzaWduVmFsdWUgPSAodmFsLCBrZXkpID0+IHtcbiAgICAvLyBTa2lwIGRhbmdlcm91cyBwcm9wZXJ0eSBuYW1lcyB0byBwcmV2ZW50IHByb3RvdHlwZSBwb2xsdXRpb25cbiAgICBpZiAoa2V5ID09PSAnX19wcm90b19fJyB8fCBrZXkgPT09ICdjb25zdHJ1Y3RvcicgfHwga2V5ID09PSAncHJvdG90eXBlJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGZpbmRLZXkgbG93ZXJjYXNlcyB0aGUga2V5LCBzbyBjYXNlbGVzcyBsb29rdXAgb25seSBhcHBsaWVzIHRvIHN0cmluZ3Mg4oCUXG4gICAgLy8gc3ltYm9sIGtleXMgYXJlIGlkZW50aXR5LW1hdGNoZWQuXG4gICAgY29uc3QgdGFyZ2V0S2V5ID0gKGNhc2VsZXNzICYmIHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnICYmIGZpbmRLZXkocmVzdWx0LCBrZXkpKSB8fCBrZXk7XG4gICAgLy8gUmVhZCB2aWEgb3duLXByb3Agb25seSDigJQgYSBiYXJlIGByZXN1bHRbdGFyZ2V0S2V5XWAgd2Fsa3MgdGhlIHByb3RvdHlwZVxuICAgIC8vIGNoYWluLCBzbyBhIHBvbGx1dGVkIE9iamVjdC5wcm90b3R5cGUgdmFsdWUgY291bGQgc3VyZmFjZSBoZXJlIGFuZCBnZXRcbiAgICAvLyBjb3BpZWQgaW50byB0aGUgbWVyZ2VkIHJlc3VsdC5cbiAgICBjb25zdCBleGlzdGluZyA9IGhhc093blByb3BlcnR5KHJlc3VsdCwgdGFyZ2V0S2V5KSA/IHJlc3VsdFt0YXJnZXRLZXldIDogdW5kZWZpbmVkO1xuICAgIGlmIChpc1BsYWluT2JqZWN0KGV4aXN0aW5nKSAmJiBpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gbWVyZ2UoZXhpc3RpbmcsIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gbWVyZ2Uoe30sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc0FycmF5KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gdmFsLnNsaWNlKCk7XG4gICAgfSBlbHNlIGlmICghc2tpcFVuZGVmaW5lZCB8fCAhaXNVbmRlZmluZWQodmFsKSkge1xuICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSB2YWw7XG4gICAgfVxuICB9O1xuXG4gIGZvciAobGV0IGkgPSAwLCBsID0gb2Jqcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBjb25zdCBzb3VyY2UgPSBvYmpzW2ldO1xuICAgIGlmICghc291cmNlIHx8IGlzQnVmZmVyKHNvdXJjZSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGZvckVhY2goc291cmNlLCBhc3NpZ25WYWx1ZSk7XG5cbiAgICBpZiAodHlwZW9mIHNvdXJjZSAhPT0gJ29iamVjdCcgfHwgaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpO1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgc3ltYm9scy5sZW5ndGg7IGorKykge1xuICAgICAgY29uc3Qgc3ltYm9sID0gc3ltYm9sc1tqXTtcbiAgICAgIGlmIChwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwgc3ltYm9sKSkge1xuICAgICAgICBhc3NpZ25WYWx1ZShzb3VyY2Vbc3ltYm9sXSwgc3ltYm9sKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBFeHRlbmRzIG9iamVjdCBhIGJ5IG11dGFibHkgYWRkaW5nIHRvIGl0IHRoZSBwcm9wZXJ0aWVzIG9mIG9iamVjdCBiLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBhIFRoZSBvYmplY3QgdG8gYmUgZXh0ZW5kZWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBiIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb21cbiAqIEBwYXJhbSB7T2JqZWN0fSB0aGlzQXJnIFRoZSBvYmplY3QgdG8gYmluZCBmdW5jdGlvbiB0b1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuYWxsT3duS2V5c11cbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSByZXN1bHRpbmcgdmFsdWUgb2Ygb2JqZWN0IGFcbiAqL1xuY29uc3QgZXh0ZW5kID0gKGEsIGIsIHRoaXNBcmcsIHsgYWxsT3duS2V5cyB9ID0ge30pID0+IHtcbiAgZm9yRWFjaChcbiAgICBiLFxuICAgICh2YWwsIGtleSkgPT4ge1xuICAgICAgaWYgKHRoaXNBcmcgJiYgaXNGdW5jdGlvbih2YWwpKSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLCBrZXksIHtcbiAgICAgICAgICAvLyBOdWxsLXByb3RvIGRlc2NyaXB0b3Igc28gYSBwb2xsdXRlZCBPYmplY3QucHJvdG90eXBlLmdldCBjYW5ub3RcbiAgICAgICAgICAvLyBoaWphY2sgZGVmaW5lUHJvcGVydHkncyBhY2Nlc3Nvci12cy1kYXRhIHJlc29sdXRpb24uXG4gICAgICAgICAgX19wcm90b19fOiBudWxsLFxuICAgICAgICAgIHZhbHVlOiBiaW5kKHZhbCwgdGhpc0FyZyksXG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsIGtleSwge1xuICAgICAgICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAgICAgICB2YWx1ZTogdmFsLFxuICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHsgYWxsT3duS2V5cyB9XG4gICk7XG4gIHJldHVybiBhO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYnl0ZSBvcmRlciBtYXJrZXIuIFRoaXMgY2F0Y2hlcyBFRiBCQiBCRiAodGhlIFVURi04IEJPTSlcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCB3aXRoIEJPTVxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IGNvbnRlbnQgdmFsdWUgd2l0aG91dCBCT01cbiAqL1xuY29uc3Qgc3RyaXBCT00gPSAoY29udGVudCkgPT4ge1xuICBpZiAoY29udGVudC5jaGFyQ29kZUF0KDApID09PSAweGZlZmYpIHtcbiAgICBjb250ZW50ID0gY29udGVudC5zbGljZSgxKTtcbiAgfVxuICByZXR1cm4gY29udGVudDtcbn07XG5cbi8qKlxuICogSW5oZXJpdCB0aGUgcHJvdG90eXBlIG1ldGhvZHMgZnJvbSBvbmUgY29uc3RydWN0b3IgaW50byBhbm90aGVyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtmdW5jdGlvbn0gc3VwZXJDb25zdHJ1Y3RvclxuICogQHBhcmFtIHtvYmplY3R9IFtwcm9wc11cbiAqIEBwYXJhbSB7b2JqZWN0fSBbZGVzY3JpcHRvcnNdXG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmNvbnN0IGluaGVyaXRzID0gKGNvbnN0cnVjdG9yLCBzdXBlckNvbnN0cnVjdG9yLCBwcm9wcywgZGVzY3JpcHRvcnMpID0+IHtcbiAgY29uc3RydWN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNvbnN0cnVjdG9yLnByb3RvdHlwZSwgZGVzY3JpcHRvcnMpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29uc3RydWN0b3IucHJvdG90eXBlLCAnY29uc3RydWN0b3InLCB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIHZhbHVlOiBjb25zdHJ1Y3RvcixcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gIH0pO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29uc3RydWN0b3IsICdzdXBlcicsIHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgdmFsdWU6IHN1cGVyQ29uc3RydWN0b3IucHJvdG90eXBlLFxuICB9KTtcbiAgcHJvcHMgJiYgT2JqZWN0LmFzc2lnbihjb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3BzKTtcbn07XG5cbi8qKlxuICogUmVzb2x2ZSBvYmplY3Qgd2l0aCBkZWVwIHByb3RvdHlwZSBjaGFpbiB0byBhIGZsYXQgb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlT2JqIHNvdXJjZSBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBbZGVzdE9ial1cbiAqIEBwYXJhbSB7RnVuY3Rpb258Qm9vbGVhbn0gW2ZpbHRlcl1cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcm9wRmlsdGVyXVxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKi9cbmNvbnN0IHRvRmxhdE9iamVjdCA9IChzb3VyY2VPYmosIGRlc3RPYmosIGZpbHRlciwgcHJvcEZpbHRlcikgPT4ge1xuICBsZXQgcHJvcHM7XG4gIGxldCBpO1xuICBsZXQgcHJvcDtcbiAgY29uc3QgbWVyZ2VkID0ge307XG5cbiAgZGVzdE9iaiA9IGRlc3RPYmogfHwge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lcS1udWxsLGVxZXFlcVxuICBpZiAoc291cmNlT2JqID09IG51bGwpIHJldHVybiBkZXN0T2JqO1xuXG4gIGRvIHtcbiAgICBwcm9wcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZU9iaik7XG4gICAgaSA9IHByb3BzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tID4gMCkge1xuICAgICAgcHJvcCA9IHByb3BzW2ldO1xuICAgICAgaWYgKCghcHJvcEZpbHRlciB8fCBwcm9wRmlsdGVyKHByb3AsIHNvdXJjZU9iaiwgZGVzdE9iaikpICYmICFtZXJnZWRbcHJvcF0pIHtcbiAgICAgICAgZGVzdE9ialtwcm9wXSA9IHNvdXJjZU9ialtwcm9wXTtcbiAgICAgICAgbWVyZ2VkW3Byb3BdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgc291cmNlT2JqID0gZmlsdGVyICE9PSBmYWxzZSAmJiBnZXRQcm90b3R5cGVPZihzb3VyY2VPYmopO1xuICB9IHdoaWxlIChzb3VyY2VPYmogJiYgKCFmaWx0ZXIgfHwgZmlsdGVyKHNvdXJjZU9iaiwgZGVzdE9iaikpICYmIHNvdXJjZU9iaiAhPT0gT2JqZWN0LnByb3RvdHlwZSk7XG5cbiAgcmV0dXJuIGRlc3RPYmo7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciBhIHN0cmluZyBlbmRzIHdpdGggdGhlIGNoYXJhY3RlcnMgb2YgYSBzcGVjaWZpZWQgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHBhcmFtIHtTdHJpbmd9IHNlYXJjaFN0cmluZ1xuICogQHBhcmFtIHtOdW1iZXJ9IFtwb3NpdGlvbj0gMF1cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuY29uc3QgZW5kc1dpdGggPSAoc3RyLCBzZWFyY2hTdHJpbmcsIHBvc2l0aW9uKSA9PiB7XG4gIHN0ciA9IFN0cmluZyhzdHIpO1xuICBpZiAocG9zaXRpb24gPT09IHVuZGVmaW5lZCB8fCBwb3NpdGlvbiA+IHN0ci5sZW5ndGgpIHtcbiAgICBwb3NpdGlvbiA9IHN0ci5sZW5ndGg7XG4gIH1cbiAgcG9zaXRpb24gLT0gc2VhcmNoU3RyaW5nLmxlbmd0aDtcbiAgY29uc3QgbGFzdEluZGV4ID0gc3RyLmluZGV4T2Yoc2VhcmNoU3RyaW5nLCBwb3NpdGlvbik7XG4gIHJldHVybiBsYXN0SW5kZXggIT09IC0xICYmIGxhc3RJbmRleCA9PT0gcG9zaXRpb247XG59O1xuXG4vKipcbiAqIFJldHVybnMgbmV3IGFycmF5IGZyb20gYXJyYXkgbGlrZSBvYmplY3Qgb3IgbnVsbCBpZiBmYWlsZWRcbiAqXG4gKiBAcGFyYW0geyp9IFt0aGluZ11cbiAqXG4gKiBAcmV0dXJucyB7P0FycmF5fVxuICovXG5jb25zdCB0b0FycmF5ID0gKHRoaW5nKSA9PiB7XG4gIGlmICghdGhpbmcpIHJldHVybiBudWxsO1xuICBpZiAoaXNBcnJheSh0aGluZykpIHJldHVybiB0aGluZztcbiAgbGV0IGkgPSB0aGluZy5sZW5ndGg7XG4gIGlmICghaXNOdW1iZXIoaSkpIHJldHVybiBudWxsO1xuICBjb25zdCBhcnIgPSBuZXcgQXJyYXkoaSk7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgYXJyW2ldID0gdGhpbmdbaV07XG4gIH1cbiAgcmV0dXJuIGFycjtcbn07XG5cbi8qKlxuICogQ2hlY2tpbmcgaWYgdGhlIFVpbnQ4QXJyYXkgZXhpc3RzIGFuZCBpZiBpdCBkb2VzLCBpdCByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBjaGVja3MgaWYgdGhlXG4gKiB0aGluZyBwYXNzZWQgaW4gaXMgYW4gaW5zdGFuY2Ugb2YgVWludDhBcnJheVxuICpcbiAqIEBwYXJhbSB7VHlwZWRBcnJheX1cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5jb25zdCBpc1R5cGVkQXJyYXkgPSAoKFR5cGVkQXJyYXkpID0+IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuICh0aGluZykgPT4ge1xuICAgIHJldHVybiBUeXBlZEFycmF5ICYmIHRoaW5nIGluc3RhbmNlb2YgVHlwZWRBcnJheTtcbiAgfTtcbn0pKHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJyAmJiBnZXRQcm90b3R5cGVPZihVaW50OEFycmF5KSk7XG5cbi8qKlxuICogRm9yIGVhY2ggZW50cnkgaW4gdGhlIG9iamVjdCwgY2FsbCB0aGUgZnVuY3Rpb24gd2l0aCB0aGUga2V5IGFuZCB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdDxhbnksIGFueT59IG9iaiAtIFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gLSBUaGUgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBlbnRyeS5cbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuY29uc3QgZm9yRWFjaEVudHJ5ID0gKG9iaiwgZm4pID0+IHtcbiAgY29uc3QgZ2VuZXJhdG9yID0gb2JqICYmIG9ialtpdGVyYXRvcl07XG5cbiAgY29uc3QgX2l0ZXJhdG9yID0gZ2VuZXJhdG9yLmNhbGwob2JqKTtcblxuICBsZXQgcmVzdWx0O1xuXG4gIHdoaWxlICgocmVzdWx0ID0gX2l0ZXJhdG9yLm5leHQoKSkgJiYgIXJlc3VsdC5kb25lKSB7XG4gICAgY29uc3QgcGFpciA9IHJlc3VsdC52YWx1ZTtcbiAgICBmbi5jYWxsKG9iaiwgcGFpclswXSwgcGFpclsxXSk7XG4gIH1cbn07XG5cbi8qKlxuICogSXQgdGFrZXMgYSByZWd1bGFyIGV4cHJlc3Npb24gYW5kIGEgc3RyaW5nLCBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiBhbGwgdGhlIG1hdGNoZXNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVnRXhwIC0gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCBhZ2FpbnN0LlxuICogQHBhcmFtIHtzdHJpbmd9IHN0ciAtIFRoZSBzdHJpbmcgdG8gc2VhcmNoLlxuICpcbiAqIEByZXR1cm5zIHtBcnJheTxib29sZWFuPn1cbiAqL1xuY29uc3QgbWF0Y2hBbGwgPSAocmVnRXhwLCBzdHIpID0+IHtcbiAgbGV0IG1hdGNoZXM7XG4gIGNvbnN0IGFyciA9IFtdO1xuXG4gIHdoaWxlICgobWF0Y2hlcyA9IHJlZ0V4cC5leGVjKHN0cikpICE9PSBudWxsKSB7XG4gICAgYXJyLnB1c2gobWF0Y2hlcyk7XG4gIH1cblxuICByZXR1cm4gYXJyO1xufTtcblxuLyogQ2hlY2tpbmcgaWYgdGhlIGtpbmRPZlRlc3QgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gcGFzc2VkIGFuIEhUTUxGb3JtRWxlbWVudC4gKi9cbmNvbnN0IGlzSFRNTEZvcm0gPSBraW5kT2ZUZXN0KCdIVE1MRm9ybUVsZW1lbnQnKTtcblxuY29uc3QgdG9DYW1lbENhc2UgPSAoc3RyKSA9PiB7XG4gIHJldHVybiBzdHIudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bLV9cXHNdKFthLXpcXGRdKShcXHcqKS9nLCBmdW5jdGlvbiByZXBsYWNlcihtLCBwMSwgcDIpIHtcbiAgICByZXR1cm4gcDEudG9VcHBlckNhc2UoKSArIHAyO1xuICB9KTtcbn07XG5cbi8qIENyZWF0aW5nIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGNoZWNrIGlmIGFuIG9iamVjdCBoYXMgYSBwcm9wZXJ0eS4gKi9cbmNvbnN0IGhhc093blByb3BlcnR5ID0gKFxuICAoeyBoYXNPd25Qcm9wZXJ0eSB9KSA9PlxuICAob2JqLCBwcm9wKSA9PlxuICAgIGhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKVxuKShPYmplY3QucHJvdG90eXBlKTtcblxuY29uc3QgeyBwcm9wZXJ0eUlzRW51bWVyYWJsZSB9ID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFJlZ0V4cCBvYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgUmVnRXhwIG9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzUmVnRXhwID0ga2luZE9mVGVzdCgnUmVnRXhwJyk7XG5cbmNvbnN0IHJlZHVjZURlc2NyaXB0b3JzID0gKG9iaiwgcmVkdWNlcikgPT4ge1xuICBjb25zdCBkZXNjcmlwdG9ycyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG9iaik7XG4gIGNvbnN0IHJlZHVjZWREZXNjcmlwdG9ycyA9IHt9O1xuXG4gIGZvckVhY2goZGVzY3JpcHRvcnMsIChkZXNjcmlwdG9yLCBuYW1lKSA9PiB7XG4gICAgbGV0IHJldDtcbiAgICBpZiAoKHJldCA9IHJlZHVjZXIoZGVzY3JpcHRvciwgbmFtZSwgb2JqKSkgIT09IGZhbHNlKSB7XG4gICAgICByZWR1Y2VkRGVzY3JpcHRvcnNbbmFtZV0gPSByZXQgfHwgZGVzY3JpcHRvcjtcbiAgICB9XG4gIH0pO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG9iaiwgcmVkdWNlZERlc2NyaXB0b3JzKTtcbn07XG5cbi8qKlxuICogTWFrZXMgYWxsIG1ldGhvZHMgcmVhZC1vbmx5XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKi9cblxuY29uc3QgZnJlZXplTWV0aG9kcyA9IChvYmopID0+IHtcbiAgcmVkdWNlRGVzY3JpcHRvcnMob2JqLCAoZGVzY3JpcHRvciwgbmFtZSkgPT4ge1xuICAgIC8vIHNraXAgcmVzdHJpY3RlZCBwcm9wcyBpbiBzdHJpY3QgbW9kZVxuICAgIGlmIChpc0Z1bmN0aW9uKG9iaikgJiYgWydhcmd1bWVudHMnLCAnY2FsbGVyJywgJ2NhbGxlZSddLmluY2x1ZGVzKG5hbWUpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWUgPSBvYmpbbmFtZV07XG5cbiAgICBpZiAoIWlzRnVuY3Rpb24odmFsdWUpKSByZXR1cm47XG5cbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBmYWxzZTtcblxuICAgIGlmICgnd3JpdGFibGUnIGluIGRlc2NyaXB0b3IpIHtcbiAgICAgIGRlc2NyaXB0b3Iud3JpdGFibGUgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWRlc2NyaXB0b3Iuc2V0KSB7XG4gICAgICBkZXNjcmlwdG9yLnNldCA9ICgpID0+IHtcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJDYW4gbm90IHJld3JpdGUgcmVhZC1vbmx5IG1ldGhvZCAnXCIgKyBuYW1lICsgXCInXCIpO1xuICAgICAgfTtcbiAgICB9XG4gIH0pO1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBhcnJheSBvciBhIGRlbGltaXRlZCBzdHJpbmcgaW50byBhbiBvYmplY3Qgc2V0IHdpdGggdmFsdWVzIGFzIGtleXMgYW5kIHRydWUgYXMgdmFsdWVzLlxuICogVXNlZnVsIGZvciBmYXN0IG1lbWJlcnNoaXAgY2hlY2tzLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBhcnJheU9yU3RyaW5nIC0gVGhlIGFycmF5IG9yIHN0cmluZyB0byBjb252ZXJ0LlxuICogQHBhcmFtIHtzdHJpbmd9IGRlbGltaXRlciAtIFRoZSBkZWxpbWl0ZXIgdG8gdXNlIGlmIGlucHV0IGlzIGEgc3RyaW5nLlxuICogQHJldHVybnMge09iamVjdH0gQW4gb2JqZWN0IHdpdGgga2V5cyBmcm9tIHRoZSBhcnJheSBvciBzdHJpbmcsIHZhbHVlcyBzZXQgdG8gdHJ1ZS5cbiAqL1xuY29uc3QgdG9PYmplY3RTZXQgPSAoYXJyYXlPclN0cmluZywgZGVsaW1pdGVyKSA9PiB7XG4gIGNvbnN0IG9iaiA9IHt9O1xuXG4gIGNvbnN0IGRlZmluZSA9IChhcnIpID0+IHtcbiAgICBhcnIuZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICAgIG9ialt2YWx1ZV0gPSB0cnVlO1xuICAgIH0pO1xuICB9O1xuXG4gIGlzQXJyYXkoYXJyYXlPclN0cmluZykgPyBkZWZpbmUoYXJyYXlPclN0cmluZykgOiBkZWZpbmUoU3RyaW5nKGFycmF5T3JTdHJpbmcpLnNwbGl0KGRlbGltaXRlcikpO1xuXG4gIHJldHVybiBvYmo7XG59O1xuXG5jb25zdCBub29wID0gKCkgPT4ge307XG5cbmNvbnN0IHRvRmluaXRlTnVtYmVyID0gKHZhbHVlLCBkZWZhdWx0VmFsdWUpID0+IHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgTnVtYmVyLmlzRmluaXRlKCh2YWx1ZSA9ICt2YWx1ZSkpID8gdmFsdWUgOiBkZWZhdWx0VmFsdWU7XG59O1xuXG4vKipcbiAqIElmIHRoZSB0aGluZyBpcyBhIEZvcm1EYXRhIG9iamVjdCwgcmV0dXJuIHRydWUsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXG4gKlxuICogQHBhcmFtIHt1bmtub3dufSB0aGluZyAtIFRoZSB0aGluZyB0byBjaGVjay5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNTcGVjQ29tcGxpYW50Rm9ybSh0aGluZykge1xuICByZXR1cm4gISEoXG4gICAgdGhpbmcgJiZcbiAgICBpc0Z1bmN0aW9uKHRoaW5nLmFwcGVuZCkgJiZcbiAgICB0aGluZ1t0b1N0cmluZ1RhZ10gPT09ICdGb3JtRGF0YScgJiZcbiAgICB0aGluZ1tpdGVyYXRvcl1cbiAgKTtcbn1cblxuLyoqXG4gKiBSZWN1cnNpdmVseSBjb252ZXJ0cyBhbiBvYmplY3QgdG8gYSBKU09OLWNvbXBhdGlibGUgb2JqZWN0LCBoYW5kbGluZyBjaXJjdWxhciByZWZlcmVuY2VzIGFuZCBCdWZmZXJzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogLSBUaGUgb2JqZWN0IHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgSlNPTi1jb21wYXRpYmxlIG9iamVjdC5cbiAqL1xuY29uc3QgdG9KU09OT2JqZWN0ID0gKG9iaikgPT4ge1xuICBjb25zdCB2aXNpdGVkID0gbmV3IFdlYWtTZXQoKTtcblxuICBjb25zdCB2aXNpdCA9IChzb3VyY2UpID0+IHtcbiAgICBpZiAoaXNPYmplY3Qoc291cmNlKSkge1xuICAgICAgaWYgKHZpc2l0ZWQuaGFzKHNvdXJjZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvL0J1ZmZlciBjaGVja1xuICAgICAgaWYgKGlzQnVmZmVyKHNvdXJjZSkpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCEoJ3RvSlNPTicgaW4gc291cmNlKSkge1xuICAgICAgICAvLyBhZGQtb24gZGVzY2VudCAvIGRlbGV0ZS1vbi1hc2NlbnQ6IHByZXNlcnZlcyBwYXRoIHNlbWFudGljcywgc28gREFHIG5vZGVzIHNlcmlhbGlzZSBhdCBldmVyeSBvY2N1cnJlbmNlIChzZWUgIzcyMzApLlxuICAgICAgICB2aXNpdGVkLmFkZChzb3VyY2UpO1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBpc0FycmF5KHNvdXJjZSkgPyBbXSA6IHt9O1xuXG4gICAgICAgIGZvckVhY2goc291cmNlLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlZHVjZWRWYWx1ZSA9IHZpc2l0KHZhbHVlKTtcbiAgICAgICAgICAhaXNVbmRlZmluZWQocmVkdWNlZFZhbHVlKSAmJiAodGFyZ2V0W2tleV0gPSByZWR1Y2VkVmFsdWUpO1xuICAgICAgICB9KTtcblxuICAgICAgICB2aXNpdGVkLmRlbGV0ZShzb3VyY2UpO1xuXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfTtcblxuICByZXR1cm4gdmlzaXQob2JqKTtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiBhIHZhbHVlIGlzIGFuIGFzeW5jIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7Kn0gdGhpbmcgLSBUaGUgdmFsdWUgdG8gdGVzdC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIGFzeW5jIGZ1bmN0aW9uLCBvdGhlcndpc2UgZmFsc2UuXG4gKi9cbmNvbnN0IGlzQXN5bmNGbiA9IGtpbmRPZlRlc3QoJ0FzeW5jRnVuY3Rpb24nKTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIGEgdmFsdWUgaXMgdGhlbmFibGUgKGhhcyB0aGVuIGFuZCBjYXRjaCBtZXRob2RzKS5cbiAqXG4gKiBAcGFyYW0geyp9IHRoaW5nIC0gVGhlIHZhbHVlIHRvIHRlc3QuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyB0aGVuYWJsZSwgb3RoZXJ3aXNlIGZhbHNlLlxuICovXG5jb25zdCBpc1RoZW5hYmxlID0gKHRoaW5nKSA9PlxuICB0aGluZyAmJlxuICAoaXNPYmplY3QodGhpbmcpIHx8IGlzRnVuY3Rpb24odGhpbmcpKSAmJlxuICBpc0Z1bmN0aW9uKHRoaW5nLnRoZW4pICYmXG4gIGlzRnVuY3Rpb24odGhpbmcuY2F0Y2gpO1xuXG4vLyBvcmlnaW5hbCBjb2RlXG4vLyBodHRwczovL2dpdGh1Yi5jb20vRGlnaXRhbEJyYWluSlMvQXhpb3NQcm9taXNlL2Jsb2IvMTZkZWFiMTM3MTBlYzA5Nzc5OTIyMTMxZjNmYTU5NTQzMjBmODNhYi9saWIvdXRpbHMuanMjTDExLUwzNFxuXG4vKipcbiAqIFByb3ZpZGVzIGEgY3Jvc3MtcGxhdGZvcm0gc2V0SW1tZWRpYXRlIGltcGxlbWVudGF0aW9uLlxuICogVXNlcyBuYXRpdmUgc2V0SW1tZWRpYXRlIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGZhbGxzIGJhY2sgdG8gcG9zdE1lc3NhZ2Ugb3Igc2V0VGltZW91dC5cbiAqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHNldEltbWVkaWF0ZVN1cHBvcnRlZCAtIFdoZXRoZXIgc2V0SW1tZWRpYXRlIGlzIHN1cHBvcnRlZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gcG9zdE1lc3NhZ2VTdXBwb3J0ZWQgLSBXaGV0aGVyIHBvc3RNZXNzYWdlIGlzIHN1cHBvcnRlZC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gQSBmdW5jdGlvbiB0byBzY2hlZHVsZSBhIGNhbGxiYWNrIGFzeW5jaHJvbm91c2x5LlxuICovXG5jb25zdCBfc2V0SW1tZWRpYXRlID0gKChzZXRJbW1lZGlhdGVTdXBwb3J0ZWQsIHBvc3RNZXNzYWdlU3VwcG9ydGVkKSA9PiB7XG4gIGlmIChzZXRJbW1lZGlhdGVTdXBwb3J0ZWQpIHtcbiAgICByZXR1cm4gc2V0SW1tZWRpYXRlO1xuICB9XG5cbiAgcmV0dXJuIHBvc3RNZXNzYWdlU3VwcG9ydGVkXG4gICAgPyAoKHRva2VuLCBjYWxsYmFja3MpID0+IHtcbiAgICAgICAgX2dsb2JhbC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAgICdtZXNzYWdlJyxcbiAgICAgICAgICAoeyBzb3VyY2UsIGRhdGEgfSkgPT4ge1xuICAgICAgICAgICAgaWYgKHNvdXJjZSA9PT0gX2dsb2JhbCAmJiBkYXRhID09PSB0b2tlbikge1xuICAgICAgICAgICAgICBjYWxsYmFja3MubGVuZ3RoICYmIGNhbGxiYWNrcy5zaGlmdCgpKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBmYWxzZVxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiAoY2IpID0+IHtcbiAgICAgICAgICBjYWxsYmFja3MucHVzaChjYik7XG4gICAgICAgICAgX2dsb2JhbC5wb3N0TWVzc2FnZSh0b2tlbiwgJyonKTtcbiAgICAgICAgfTtcbiAgICAgIH0pKGBheGlvc0Ake01hdGgucmFuZG9tKCl9YCwgW10pXG4gICAgOiAoY2IpID0+IHNldFRpbWVvdXQoY2IpO1xufSkodHlwZW9mIHNldEltbWVkaWF0ZSA9PT0gJ2Z1bmN0aW9uJywgaXNGdW5jdGlvbihfZ2xvYmFsLnBvc3RNZXNzYWdlKSk7XG5cbi8qKlxuICogU2NoZWR1bGVzIGEgbWljcm90YXNrIG9yIGFzeW5jaHJvbm91cyBjYWxsYmFjayBhcyBzb29uIGFzIHBvc3NpYmxlLlxuICogVXNlcyBxdWV1ZU1pY3JvdGFzayBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBmYWxscyBiYWNrIHRvIHByb2Nlc3MubmV4dFRpY2sgb3IgX3NldEltbWVkaWF0ZS5cbiAqXG4gKiBAdHlwZSB7RnVuY3Rpb259XG4gKi9cbmNvbnN0IGFzYXAgPVxuICB0eXBlb2YgcXVldWVNaWNyb3Rhc2sgIT09ICd1bmRlZmluZWQnXG4gICAgPyBxdWV1ZU1pY3JvdGFzay5iaW5kKF9nbG9iYWwpXG4gICAgOiAodHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIHByb2Nlc3MubmV4dFRpY2spIHx8IF9zZXRJbW1lZGlhdGU7XG5cbi8vICoqKioqKioqKioqKioqKioqKioqKlxuXG5jb25zdCBpc0l0ZXJhYmxlID0gKHRoaW5nKSA9PiB0aGluZyAhPSBudWxsICYmIGlzRnVuY3Rpb24odGhpbmdbaXRlcmF0b3JdKTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBpc0FycmF5LFxuICBpc0FycmF5QnVmZmVyLFxuICBpc0J1ZmZlcixcbiAgaXNGb3JtRGF0YSxcbiAgaXNBcnJheUJ1ZmZlclZpZXcsXG4gIGlzU3RyaW5nLFxuICBpc051bWJlcixcbiAgaXNCb29sZWFuLFxuICBpc09iamVjdCxcbiAgaXNQbGFpbk9iamVjdCxcbiAgaXNFbXB0eU9iamVjdCxcbiAgaXNSZWFkYWJsZVN0cmVhbSxcbiAgaXNSZXF1ZXN0LFxuICBpc1Jlc3BvbnNlLFxuICBpc0hlYWRlcnMsXG4gIGlzVW5kZWZpbmVkLFxuICBpc0RhdGUsXG4gIGlzRmlsZSxcbiAgaXNSZWFjdE5hdGl2ZUJsb2IsXG4gIGlzUmVhY3ROYXRpdmUsXG4gIGlzQmxvYixcbiAgaXNSZWdFeHAsXG4gIGlzRnVuY3Rpb24sXG4gIGlzU3RyZWFtLFxuICBpc1VSTFNlYXJjaFBhcmFtcyxcbiAgaXNUeXBlZEFycmF5LFxuICBpc0ZpbGVMaXN0LFxuICBmb3JFYWNoLFxuICBtZXJnZSxcbiAgZXh0ZW5kLFxuICB0cmltLFxuICBzdHJpcEJPTSxcbiAgaW5oZXJpdHMsXG4gIHRvRmxhdE9iamVjdCxcbiAga2luZE9mLFxuICBraW5kT2ZUZXN0LFxuICBlbmRzV2l0aCxcbiAgdG9BcnJheSxcbiAgZm9yRWFjaEVudHJ5LFxuICBtYXRjaEFsbCxcbiAgaXNIVE1MRm9ybSxcbiAgaGFzT3duUHJvcGVydHksXG4gIGhhc093blByb3A6IGhhc093blByb3BlcnR5LCAvLyBhbiBhbGlhcyB0byBhdm9pZCBFU0xpbnQgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIGRldGVjdGlvblxuICByZWR1Y2VEZXNjcmlwdG9ycyxcbiAgZnJlZXplTWV0aG9kcyxcbiAgdG9PYmplY3RTZXQsXG4gIHRvQ2FtZWxDYXNlLFxuICBub29wLFxuICB0b0Zpbml0ZU51bWJlcixcbiAgZmluZEtleSxcbiAgZ2xvYmFsOiBfZ2xvYmFsLFxuICBpc0NvbnRleHREZWZpbmVkLFxuICBpc1NwZWNDb21wbGlhbnRGb3JtLFxuICB0b0pTT05PYmplY3QsXG4gIGlzQXN5bmNGbixcbiAgaXNUaGVuYWJsZSxcbiAgc2V0SW1tZWRpYXRlOiBfc2V0SW1tZWRpYXRlLFxuICBhc2FwLFxuICBpc0l0ZXJhYmxlLFxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcblxuLy8gUmF3QXhpb3NIZWFkZXJzIHdob3NlIGR1cGxpY2F0ZXMgYXJlIGlnbm9yZWQgYnkgbm9kZVxuLy8gYy5mLiBodHRwczovL25vZGVqcy5vcmcvYXBpL2h0dHAuaHRtbCNodHRwX21lc3NhZ2VfaGVhZGVyc1xuY29uc3QgaWdub3JlRHVwbGljYXRlT2YgPSB1dGlscy50b09iamVjdFNldChbXG4gICdhZ2UnLFxuICAnYXV0aG9yaXphdGlvbicsXG4gICdjb250ZW50LWxlbmd0aCcsXG4gICdjb250ZW50LXR5cGUnLFxuICAnZXRhZycsXG4gICdleHBpcmVzJyxcbiAgJ2Zyb20nLFxuICAnaG9zdCcsXG4gICdpZi1tb2RpZmllZC1zaW5jZScsXG4gICdpZi11bm1vZGlmaWVkLXNpbmNlJyxcbiAgJ2xhc3QtbW9kaWZpZWQnLFxuICAnbG9jYXRpb24nLFxuICAnbWF4LWZvcndhcmRzJyxcbiAgJ3Byb3h5LWF1dGhvcml6YXRpb24nLFxuICAncmVmZXJlcicsXG4gICdyZXRyeS1hZnRlcicsXG4gICd1c2VyLWFnZW50Jyxcbl0pO1xuXG4vKipcbiAqIFBhcnNlIGhlYWRlcnMgaW50byBhbiBvYmplY3RcbiAqXG4gKiBgYGBcbiAqIERhdGU6IFdlZCwgMjcgQXVnIDIwMTQgMDg6NTg6NDkgR01UXG4gKiBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb25cbiAqIENvbm5lY3Rpb246IGtlZXAtYWxpdmVcbiAqIFRyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gcmF3SGVhZGVycyBIZWFkZXJzIG5lZWRpbmcgdG8gYmUgcGFyc2VkXG4gKlxuICogQHJldHVybnMge09iamVjdH0gSGVhZGVycyBwYXJzZWQgaW50byBhbiBvYmplY3RcbiAqL1xuZXhwb3J0IGRlZmF1bHQgKHJhd0hlYWRlcnMpID0+IHtcbiAgY29uc3QgcGFyc2VkID0ge307XG4gIGxldCBrZXk7XG4gIGxldCB2YWw7XG4gIGxldCBpO1xuXG4gIHJhd0hlYWRlcnMgJiZcbiAgICByYXdIZWFkZXJzLnNwbGl0KCdcXG4nKS5mb3JFYWNoKGZ1bmN0aW9uIHBhcnNlcihsaW5lKSB7XG4gICAgICBpID0gbGluZS5pbmRleE9mKCc6Jyk7XG4gICAgICBrZXkgPSBsaW5lLnN1YnN0cmluZygwLCBpKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIHZhbCA9IGxpbmUuc3Vic3RyaW5nKGkgKyAxKS50cmltKCk7XG5cbiAgICAgIGlmICgha2V5IHx8IChwYXJzZWRba2V5XSAmJiBpZ25vcmVEdXBsaWNhdGVPZltrZXldKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChrZXkgPT09ICdzZXQtY29va2llJykge1xuICAgICAgICBpZiAocGFyc2VkW2tleV0pIHtcbiAgICAgICAgICBwYXJzZWRba2V5XS5wdXNoKHZhbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGFyc2VkW2tleV0gPSBbdmFsXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyc2VkW2tleV0gPSBwYXJzZWRba2V5XSA/IHBhcnNlZFtrZXldICsgJywgJyArIHZhbCA6IHZhbDtcbiAgICAgIH1cbiAgICB9KTtcblxuICByZXR1cm4gcGFyc2VkO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcblxuZnVuY3Rpb24gdHJpbVNQb3JIVEFCKHN0cikge1xuICBsZXQgc3RhcnQgPSAwO1xuICBsZXQgZW5kID0gc3RyLmxlbmd0aDtcblxuICB3aGlsZSAoc3RhcnQgPCBlbmQpIHtcbiAgICBjb25zdCBjb2RlID0gc3RyLmNoYXJDb2RlQXQoc3RhcnQpO1xuXG4gICAgaWYgKGNvZGUgIT09IDB4MDkgJiYgY29kZSAhPT0gMHgyMCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgc3RhcnQgKz0gMTtcbiAgfVxuXG4gIHdoaWxlIChlbmQgPiBzdGFydCkge1xuICAgIGNvbnN0IGNvZGUgPSBzdHIuY2hhckNvZGVBdChlbmQgLSAxKTtcblxuICAgIGlmIChjb2RlICE9PSAweDA5ICYmIGNvZGUgIT09IDB4MjApIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGVuZCAtPSAxO1xuICB9XG5cbiAgcmV0dXJuIHN0YXJ0ID09PSAwICYmIGVuZCA9PT0gc3RyLmxlbmd0aCA/IHN0ciA6IHN0ci5zbGljZShzdGFydCwgZW5kKTtcbn1cblxuLy8gVGhlIGNvbnRyb2wtY29kZSByYW5nZXMgYXJlIGludGVudGlvbmFsOiBoZWFkZXIgc2FuaXRpemF0aW9uIHN0cmlwcyBDMC9ERUwgYnl0ZXMuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29udHJvbC1yZWdleFxuY29uc3QgSU5WQUxJRF9VTklDT0RFX0hFQURFUl9WQUxVRV9DSEFSUyA9IG5ldyBSZWdFeHAoJ1tcXFxcdTAwMDAtXFxcXHUwMDA4XFxcXHUwMDBhLVxcXFx1MDAxZlxcXFx1MDA3Zl0rJywgJ2cnKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4XG5jb25zdCBJTlZBTElEX0JZVEVfU1RSSU5HX0hFQURFUl9WQUxVRV9DSEFSUyA9IG5ldyBSZWdFeHAoJ1teXFxcXHUwMDA5XFxcXHUwMDIwLVxcXFx1MDA3ZVxcXFx1MDA4MC1cXFxcdTAwZmZdKycsICdnJyk7XG5cbmZ1bmN0aW9uIHNhbml0aXplVmFsdWUodmFsdWUsIGludmFsaWRDaGFycykge1xuICBpZiAodXRpbHMuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWUubWFwKChpdGVtKSA9PiBzYW5pdGl6ZVZhbHVlKGl0ZW0sIGludmFsaWRDaGFycykpO1xuICB9XG5cbiAgcmV0dXJuIHRyaW1TUG9ySFRBQihTdHJpbmcodmFsdWUpLnJlcGxhY2UoaW52YWxpZENoYXJzLCAnJykpO1xufVxuXG5leHBvcnQgY29uc3Qgc2FuaXRpemVIZWFkZXJWYWx1ZSA9ICh2YWx1ZSkgPT5cbiAgc2FuaXRpemVWYWx1ZSh2YWx1ZSwgSU5WQUxJRF9VTklDT0RFX0hFQURFUl9WQUxVRV9DSEFSUyk7XG5cbmV4cG9ydCBjb25zdCBzYW5pdGl6ZUJ5dGVTdHJpbmdIZWFkZXJWYWx1ZSA9ICh2YWx1ZSkgPT5cbiAgc2FuaXRpemVWYWx1ZSh2YWx1ZSwgSU5WQUxJRF9CWVRFX1NUUklOR19IRUFERVJfVkFMVUVfQ0hBUlMpO1xuXG5leHBvcnQgZnVuY3Rpb24gdG9CeXRlU3RyaW5nSGVhZGVyT2JqZWN0KGhlYWRlcnMpIHtcbiAgY29uc3QgYnl0ZVN0cmluZ0hlYWRlcnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gIHV0aWxzLmZvckVhY2goaGVhZGVycy50b0pTT04oKSwgKHZhbHVlLCBoZWFkZXIpID0+IHtcbiAgICBieXRlU3RyaW5nSGVhZGVyc1toZWFkZXJdID0gc2FuaXRpemVCeXRlU3RyaW5nSGVhZGVyVmFsdWUodmFsdWUpO1xuICB9KTtcblxuICByZXR1cm4gYnl0ZVN0cmluZ0hlYWRlcnM7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgcGFyc2VIZWFkZXJzIGZyb20gJy4uL2hlbHBlcnMvcGFyc2VIZWFkZXJzLmpzJztcbmltcG9ydCB7IHNhbml0aXplSGVhZGVyVmFsdWUgfSBmcm9tICcuLi9oZWxwZXJzL3Nhbml0aXplSGVhZGVyVmFsdWUuanMnO1xuXG5jb25zdCAkaW50ZXJuYWxzID0gU3ltYm9sKCdpbnRlcm5hbHMnKTtcblxuZnVuY3Rpb24gbm9ybWFsaXplSGVhZGVyKGhlYWRlcikge1xuICByZXR1cm4gaGVhZGVyICYmIFN0cmluZyhoZWFkZXIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVWYWx1ZSh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IGZhbHNlIHx8IHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gdXRpbHMuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5tYXAobm9ybWFsaXplVmFsdWUpIDogc2FuaXRpemVIZWFkZXJWYWx1ZShTdHJpbmcodmFsdWUpKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VUb2tlbnMoc3RyKSB7XG4gIGNvbnN0IHRva2VucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGNvbnN0IHRva2Vuc1JFID0gLyhbXlxccyw7PV0rKVxccyooPzo9XFxzKihbXiw7XSspKT8vZztcbiAgbGV0IG1hdGNoO1xuXG4gIHdoaWxlICgobWF0Y2ggPSB0b2tlbnNSRS5leGVjKHN0cikpKSB7XG4gICAgdG9rZW5zW21hdGNoWzFdXSA9IG1hdGNoWzJdO1xuICB9XG5cbiAgcmV0dXJuIHRva2Vucztcbn1cblxuY29uc3QgaXNWYWxpZEhlYWRlck5hbWUgPSAoc3RyKSA9PiAvXlstX2EtekEtWjAtOV5gfH4sISMkJSYnKisuXSskLy50ZXN0KHN0ci50cmltKCkpO1xuXG5mdW5jdGlvbiBtYXRjaEhlYWRlclZhbHVlKGNvbnRleHQsIHZhbHVlLCBoZWFkZXIsIGZpbHRlciwgaXNIZWFkZXJOYW1lRmlsdGVyKSB7XG4gIGlmICh1dGlscy5pc0Z1bmN0aW9uKGZpbHRlcikpIHtcbiAgICByZXR1cm4gZmlsdGVyLmNhbGwodGhpcywgdmFsdWUsIGhlYWRlcik7XG4gIH1cblxuICBpZiAoaXNIZWFkZXJOYW1lRmlsdGVyKSB7XG4gICAgdmFsdWUgPSBoZWFkZXI7XG4gIH1cblxuICBpZiAoIXV0aWxzLmlzU3RyaW5nKHZhbHVlKSkgcmV0dXJuO1xuXG4gIGlmICh1dGlscy5pc1N0cmluZyhmaWx0ZXIpKSB7XG4gICAgcmV0dXJuIHZhbHVlLmluZGV4T2YoZmlsdGVyKSAhPT0gLTE7XG4gIH1cblxuICBpZiAodXRpbHMuaXNSZWdFeHAoZmlsdGVyKSkge1xuICAgIHJldHVybiBmaWx0ZXIudGVzdCh2YWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZm9ybWF0SGVhZGVyKGhlYWRlcikge1xuICByZXR1cm4gaGVhZGVyXG4gICAgLnRyaW0oKVxuICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgLnJlcGxhY2UoLyhbYS16XFxkXSkoXFx3KikvZywgKHcsIGNoYXIsIHN0cikgPT4ge1xuICAgICAgcmV0dXJuIGNoYXIudG9VcHBlckNhc2UoKSArIHN0cjtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gYnVpbGRBY2Nlc3NvcnMob2JqLCBoZWFkZXIpIHtcbiAgY29uc3QgYWNjZXNzb3JOYW1lID0gdXRpbHMudG9DYW1lbENhc2UoJyAnICsgaGVhZGVyKTtcblxuICBbJ2dldCcsICdzZXQnLCAnaGFzJ10uZm9yRWFjaCgobWV0aG9kTmFtZSkgPT4ge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIG1ldGhvZE5hbWUgKyBhY2Nlc3Nvck5hbWUsIHtcbiAgICAgIC8vIE51bGwtcHJvdG8gZGVzY3JpcHRvciBzbyBhIHBvbGx1dGVkIE9iamVjdC5wcm90b3R5cGUuZ2V0IGNhbm5vdCB0dXJuXG4gICAgICAvLyB0aGlzIGRhdGEgZGVzY3JpcHRvciBpbnRvIGFuIGFjY2Vzc29yIGRlc2NyaXB0b3Igb24gdGhlIHdheSBpbi5cbiAgICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiAoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgICAgICByZXR1cm4gdGhpc1ttZXRob2ROYW1lXS5jYWxsKHRoaXMsIGhlYWRlciwgYXJnMSwgYXJnMiwgYXJnMyk7XG4gICAgICB9LFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIH0pO1xuICB9KTtcbn1cblxuY2xhc3MgQXhpb3NIZWFkZXJzIHtcbiAgY29uc3RydWN0b3IoaGVhZGVycykge1xuICAgIGhlYWRlcnMgJiYgdGhpcy5zZXQoaGVhZGVycyk7XG4gIH1cblxuICBzZXQoaGVhZGVyLCB2YWx1ZU9yUmV3cml0ZSwgcmV3cml0ZSkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gICAgZnVuY3Rpb24gc2V0SGVhZGVyKF92YWx1ZSwgX2hlYWRlciwgX3Jld3JpdGUpIHtcbiAgICAgIGNvbnN0IGxIZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoX2hlYWRlcik7XG5cbiAgICAgIGlmICghbEhlYWRlcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzLmZpbmRLZXkoc2VsZiwgbEhlYWRlcik7XG5cbiAgICAgIGlmIChcbiAgICAgICAgIWtleSB8fFxuICAgICAgICBzZWxmW2tleV0gPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICBfcmV3cml0ZSA9PT0gdHJ1ZSB8fFxuICAgICAgICAoX3Jld3JpdGUgPT09IHVuZGVmaW5lZCAmJiBzZWxmW2tleV0gIT09IGZhbHNlKVxuICAgICAgKSB7XG4gICAgICAgIHNlbGZba2V5IHx8IF9oZWFkZXJdID0gbm9ybWFsaXplVmFsdWUoX3ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzZXRIZWFkZXJzID0gKGhlYWRlcnMsIF9yZXdyaXRlKSA9PlxuICAgICAgdXRpbHMuZm9yRWFjaChoZWFkZXJzLCAoX3ZhbHVlLCBfaGVhZGVyKSA9PiBzZXRIZWFkZXIoX3ZhbHVlLCBfaGVhZGVyLCBfcmV3cml0ZSkpO1xuXG4gICAgaWYgKHV0aWxzLmlzUGxhaW5PYmplY3QoaGVhZGVyKSB8fCBoZWFkZXIgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKSB7XG4gICAgICBzZXRIZWFkZXJzKGhlYWRlciwgdmFsdWVPclJld3JpdGUpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNTdHJpbmcoaGVhZGVyKSAmJiAoaGVhZGVyID0gaGVhZGVyLnRyaW0oKSkgJiYgIWlzVmFsaWRIZWFkZXJOYW1lKGhlYWRlcikpIHtcbiAgICAgIHNldEhlYWRlcnMocGFyc2VIZWFkZXJzKGhlYWRlciksIHZhbHVlT3JSZXdyaXRlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzT2JqZWN0KGhlYWRlcikgJiYgdXRpbHMuaXNJdGVyYWJsZShoZWFkZXIpKSB7XG4gICAgICBsZXQgb2JqID0ge30sXG4gICAgICAgIGRlc3QsXG4gICAgICAgIGtleTtcbiAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgaGVhZGVyKSB7XG4gICAgICAgIGlmICghdXRpbHMuaXNBcnJheShlbnRyeSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3QgaXRlcmF0b3IgbXVzdCByZXR1cm4gYSBrZXktdmFsdWUgcGFpcicpO1xuICAgICAgICB9XG5cbiAgICAgICAgb2JqWyhrZXkgPSBlbnRyeVswXSldID0gKGRlc3QgPSBvYmpba2V5XSlcbiAgICAgICAgICA/IHV0aWxzLmlzQXJyYXkoZGVzdClcbiAgICAgICAgICAgID8gWy4uLmRlc3QsIGVudHJ5WzFdXVxuICAgICAgICAgICAgOiBbZGVzdCwgZW50cnlbMV1dXG4gICAgICAgICAgOiBlbnRyeVsxXTtcbiAgICAgIH1cblxuICAgICAgc2V0SGVhZGVycyhvYmosIHZhbHVlT3JSZXdyaXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGVhZGVyICE9IG51bGwgJiYgc2V0SGVhZGVyKHZhbHVlT3JSZXdyaXRlLCBoZWFkZXIsIHJld3JpdGUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZ2V0KGhlYWRlciwgcGFyc2VyKSB7XG4gICAgaGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKGhlYWRlcik7XG5cbiAgICBpZiAoaGVhZGVyKSB7XG4gICAgICBjb25zdCBrZXkgPSB1dGlscy5maW5kS2V5KHRoaXMsIGhlYWRlcik7XG5cbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzW2tleV07XG5cbiAgICAgICAgaWYgKCFwYXJzZXIpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyc2VyID09PSB0cnVlKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlVG9rZW5zKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1dGlscy5pc0Z1bmN0aW9uKHBhcnNlcikpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VyLmNhbGwodGhpcywgdmFsdWUsIGtleSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXRpbHMuaXNSZWdFeHAocGFyc2VyKSkge1xuICAgICAgICAgIHJldHVybiBwYXJzZXIuZXhlYyh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGhhcyhoZWFkZXIsIG1hdGNoZXIpIHtcbiAgICBoZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoaGVhZGVyKTtcblxuICAgIGlmIChoZWFkZXIpIHtcbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzLmZpbmRLZXkodGhpcywgaGVhZGVyKTtcblxuICAgICAgcmV0dXJuICEhKFxuICAgICAgICBrZXkgJiZcbiAgICAgICAgdGhpc1trZXldICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgKCFtYXRjaGVyIHx8IG1hdGNoSGVhZGVyVmFsdWUodGhpcywgdGhpc1trZXldLCBrZXksIG1hdGNoZXIpKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBkZWxldGUoaGVhZGVyLCBtYXRjaGVyKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgbGV0IGRlbGV0ZWQgPSBmYWxzZTtcblxuICAgIGZ1bmN0aW9uIGRlbGV0ZUhlYWRlcihfaGVhZGVyKSB7XG4gICAgICBfaGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKF9oZWFkZXIpO1xuXG4gICAgICBpZiAoX2hlYWRlcikge1xuICAgICAgICBjb25zdCBrZXkgPSB1dGlscy5maW5kS2V5KHNlbGYsIF9oZWFkZXIpO1xuXG4gICAgICAgIGlmIChrZXkgJiYgKCFtYXRjaGVyIHx8IG1hdGNoSGVhZGVyVmFsdWUoc2VsZiwgc2VsZltrZXldLCBrZXksIG1hdGNoZXIpKSkge1xuICAgICAgICAgIGRlbGV0ZSBzZWxmW2tleV07XG5cbiAgICAgICAgICBkZWxldGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh1dGlscy5pc0FycmF5KGhlYWRlcikpIHtcbiAgICAgIGhlYWRlci5mb3JFYWNoKGRlbGV0ZUhlYWRlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZUhlYWRlcihoZWFkZXIpO1xuICAgIH1cblxuICAgIHJldHVybiBkZWxldGVkO1xuICB9XG5cbiAgY2xlYXIobWF0Y2hlcikge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh0aGlzKTtcbiAgICBsZXQgaSA9IGtleXMubGVuZ3RoO1xuICAgIGxldCBkZWxldGVkID0gZmFsc2U7XG5cbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgICAgaWYgKCFtYXRjaGVyIHx8IG1hdGNoSGVhZGVyVmFsdWUodGhpcywgdGhpc1trZXldLCBrZXksIG1hdGNoZXIsIHRydWUpKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzW2tleV07XG4gICAgICAgIGRlbGV0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkZWxldGVkO1xuICB9XG5cbiAgbm9ybWFsaXplKGZvcm1hdCkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGNvbnN0IGhlYWRlcnMgPSB7fTtcblxuICAgIHV0aWxzLmZvckVhY2godGhpcywgKHZhbHVlLCBoZWFkZXIpID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzLmZpbmRLZXkoaGVhZGVycywgaGVhZGVyKTtcblxuICAgICAgaWYgKGtleSkge1xuICAgICAgICBzZWxmW2tleV0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIGRlbGV0ZSBzZWxmW2hlYWRlcl07XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IGZvcm1hdCA/IGZvcm1hdEhlYWRlcihoZWFkZXIpIDogU3RyaW5nKGhlYWRlcikudHJpbSgpO1xuXG4gICAgICBpZiAobm9ybWFsaXplZCAhPT0gaGVhZGVyKSB7XG4gICAgICAgIGRlbGV0ZSBzZWxmW2hlYWRlcl07XG4gICAgICB9XG5cbiAgICAgIHNlbGZbbm9ybWFsaXplZF0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSk7XG5cbiAgICAgIGhlYWRlcnNbbm9ybWFsaXplZF0gPSB0cnVlO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBjb25jYXQoLi4udGFyZ2V0cykge1xuICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLmNvbmNhdCh0aGlzLCAuLi50YXJnZXRzKTtcbiAgfVxuXG4gIHRvSlNPTihhc1N0cmluZ3MpIHtcbiAgICBjb25zdCBvYmogPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgdXRpbHMuZm9yRWFjaCh0aGlzLCAodmFsdWUsIGhlYWRlcikgPT4ge1xuICAgICAgdmFsdWUgIT0gbnVsbCAmJlxuICAgICAgICB2YWx1ZSAhPT0gZmFsc2UgJiZcbiAgICAgICAgKG9ialtoZWFkZXJdID0gYXNTdHJpbmdzICYmIHV0aWxzLmlzQXJyYXkodmFsdWUpID8gdmFsdWUuam9pbignLCAnKSA6IHZhbHVlKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSlbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpXG4gICAgICAubWFwKChbaGVhZGVyLCB2YWx1ZV0pID0+IGhlYWRlciArICc6ICcgKyB2YWx1ZSlcbiAgICAgIC5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIGdldFNldENvb2tpZSgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXQoJ3NldC1jb29raWUnKSB8fCBbXTtcbiAgfVxuXG4gIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHtcbiAgICByZXR1cm4gJ0F4aW9zSGVhZGVycyc7XG4gIH1cblxuICBzdGF0aWMgZnJvbSh0aGluZykge1xuICAgIHJldHVybiB0aGluZyBpbnN0YW5jZW9mIHRoaXMgPyB0aGluZyA6IG5ldyB0aGlzKHRoaW5nKTtcbiAgfVxuXG4gIHN0YXRpYyBjb25jYXQoZmlyc3QsIC4uLnRhcmdldHMpIHtcbiAgICBjb25zdCBjb21wdXRlZCA9IG5ldyB0aGlzKGZpcnN0KTtcblxuICAgIHRhcmdldHMuZm9yRWFjaCgodGFyZ2V0KSA9PiBjb21wdXRlZC5zZXQodGFyZ2V0KSk7XG5cbiAgICByZXR1cm4gY29tcHV0ZWQ7XG4gIH1cblxuICBzdGF0aWMgYWNjZXNzb3IoaGVhZGVyKSB7XG4gICAgY29uc3QgaW50ZXJuYWxzID1cbiAgICAgICh0aGlzWyRpbnRlcm5hbHNdID1cbiAgICAgIHRoaXNbJGludGVybmFsc10gPVxuICAgICAgICB7XG4gICAgICAgICAgYWNjZXNzb3JzOiB7fSxcbiAgICAgICAgfSk7XG5cbiAgICBjb25zdCBhY2Nlc3NvcnMgPSBpbnRlcm5hbHMuYWNjZXNzb3JzO1xuICAgIGNvbnN0IHByb3RvdHlwZSA9IHRoaXMucHJvdG90eXBlO1xuXG4gICAgZnVuY3Rpb24gZGVmaW5lQWNjZXNzb3IoX2hlYWRlcikge1xuICAgICAgY29uc3QgbEhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihfaGVhZGVyKTtcblxuICAgICAgaWYgKCFhY2Nlc3NvcnNbbEhlYWRlcl0pIHtcbiAgICAgICAgYnVpbGRBY2Nlc3NvcnMocHJvdG90eXBlLCBfaGVhZGVyKTtcbiAgICAgICAgYWNjZXNzb3JzW2xIZWFkZXJdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB1dGlscy5pc0FycmF5KGhlYWRlcikgPyBoZWFkZXIuZm9yRWFjaChkZWZpbmVBY2Nlc3NvcikgOiBkZWZpbmVBY2Nlc3NvcihoZWFkZXIpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn1cblxuQXhpb3NIZWFkZXJzLmFjY2Vzc29yKFtcbiAgJ0NvbnRlbnQtVHlwZScsXG4gICdDb250ZW50LUxlbmd0aCcsXG4gICdBY2NlcHQnLFxuICAnQWNjZXB0LUVuY29kaW5nJyxcbiAgJ1VzZXItQWdlbnQnLFxuICAnQXV0aG9yaXphdGlvbicsXG5dKTtcblxuLy8gcmVzZXJ2ZWQgbmFtZXMgaG90Zml4XG51dGlscy5yZWR1Y2VEZXNjcmlwdG9ycyhBeGlvc0hlYWRlcnMucHJvdG90eXBlLCAoeyB2YWx1ZSB9LCBrZXkpID0+IHtcbiAgbGV0IG1hcHBlZCA9IGtleVswXS50b1VwcGVyQ2FzZSgpICsga2V5LnNsaWNlKDEpOyAvLyBtYXAgYHNldGAgPT4gYFNldGBcbiAgcmV0dXJuIHtcbiAgICBnZXQ6ICgpID0+IHZhbHVlLFxuICAgIHNldChoZWFkZXJWYWx1ZSkge1xuICAgICAgdGhpc1ttYXBwZWRdID0gaGVhZGVyVmFsdWU7XG4gICAgfSxcbiAgfTtcbn0pO1xuXG51dGlscy5mcmVlemVNZXRob2RzKEF4aW9zSGVhZGVycyk7XG5cbmV4cG9ydCBkZWZhdWx0IEF4aW9zSGVhZGVycztcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSAnLi9BeGlvc0hlYWRlcnMuanMnO1xuXG5jb25zdCBSRURBQ1RFRCA9ICdbUkVEQUNURUQgKioqKl0nO1xuXG5mdW5jdGlvbiBoYXNPd25PclByb3RvdHlwZVRvSlNPTihzb3VyY2UpIHtcbiAgaWYgKHV0aWxzLmhhc093blByb3Aoc291cmNlLCAndG9KU09OJykpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGxldCBwcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yoc291cmNlKTtcblxuICB3aGlsZSAocHJvdG90eXBlICYmIHByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSkge1xuICAgIGlmICh1dGlscy5oYXNPd25Qcm9wKHByb3RvdHlwZSwgJ3RvSlNPTicpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG90eXBlKTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLy8gQnVpbGQgYSBwbGFpbi1vYmplY3Qgc25hcHNob3Qgb2YgYGNvbmZpZ2AgYW5kIHJlcGxhY2UgdGhlIHZhbHVlIG9mIGFueSBrZXlcbi8vIChjYXNlLWluc2Vuc2l0aXZlKSBsaXN0ZWQgaW4gYHJlZGFjdEtleXNgIHdpdGggUkVEQUNURUQuIFdhbGtzIHRocm91Z2ggYXJyYXlzXG4vLyBhbmQgQXhpb3NIZWFkZXJzLCBhbmQgc2hvcnQtY2lyY3VpdHMgb24gY2lyY3VsYXIgcmVmZXJlbmNlcy5cbmZ1bmN0aW9uIHJlZGFjdENvbmZpZyhjb25maWcsIHJlZGFjdEtleXMpIHtcbiAgY29uc3QgbG93ZXJLZXlzID0gbmV3IFNldChyZWRhY3RLZXlzLm1hcCgoaykgPT4gU3RyaW5nKGspLnRvTG93ZXJDYXNlKCkpKTtcbiAgY29uc3Qgc2VlbiA9IFtdO1xuXG4gIGNvbnN0IHZpc2l0ID0gKHNvdXJjZSkgPT4ge1xuICAgIGlmIChzb3VyY2UgPT09IG51bGwgfHwgdHlwZW9mIHNvdXJjZSAhPT0gJ29iamVjdCcpIHJldHVybiBzb3VyY2U7XG4gICAgaWYgKHV0aWxzLmlzQnVmZmVyKHNvdXJjZSkpIHJldHVybiBzb3VyY2U7XG4gICAgaWYgKHNlZW4uaW5kZXhPZihzb3VyY2UpICE9PSAtMSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIGlmIChzb3VyY2UgaW5zdGFuY2VvZiBBeGlvc0hlYWRlcnMpIHtcbiAgICAgIHNvdXJjZSA9IHNvdXJjZS50b0pTT04oKTtcbiAgICB9XG5cbiAgICBzZWVuLnB1c2goc291cmNlKTtcblxuICAgIGxldCByZXN1bHQ7XG4gICAgaWYgKHV0aWxzLmlzQXJyYXkoc291cmNlKSkge1xuICAgICAgcmVzdWx0ID0gW107XG4gICAgICBzb3VyY2UuZm9yRWFjaCgodiwgaSkgPT4ge1xuICAgICAgICBjb25zdCByZWR1Y2VkVmFsdWUgPSB2aXNpdCh2KTtcbiAgICAgICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChyZWR1Y2VkVmFsdWUpKSB7XG4gICAgICAgICAgcmVzdWx0W2ldID0gcmVkdWNlZFZhbHVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCF1dGlscy5pc1BsYWluT2JqZWN0KHNvdXJjZSkgJiYgaGFzT3duT3JQcm90b3R5cGVUb0pTT04oc291cmNlKSkge1xuICAgICAgICBzZWVuLnBvcCgpO1xuICAgICAgICByZXR1cm4gc291cmNlO1xuICAgICAgfVxuXG4gICAgICByZXN1bHQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoc291cmNlKSkge1xuICAgICAgICBjb25zdCByZWR1Y2VkVmFsdWUgPSBsb3dlcktleXMuaGFzKGtleS50b0xvd2VyQ2FzZSgpKSA/IFJFREFDVEVEIDogdmlzaXQodmFsdWUpO1xuICAgICAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKHJlZHVjZWRWYWx1ZSkpIHtcbiAgICAgICAgICByZXN1bHRba2V5XSA9IHJlZHVjZWRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHNlZW4ucG9wKCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICByZXR1cm4gdmlzaXQoY29uZmlnKTtcbn1cblxuY2xhc3MgQXhpb3NFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgc3RhdGljIGZyb20oZXJyb3IsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UsIGN1c3RvbVByb3BzKSB7XG4gICAgY29uc3QgYXhpb3NFcnJvciA9IG5ldyBBeGlvc0Vycm9yKGVycm9yLm1lc3NhZ2UsIGNvZGUgfHwgZXJyb3IuY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSk7XG4gICAgYXhpb3NFcnJvci5jYXVzZSA9IGVycm9yO1xuICAgIGF4aW9zRXJyb3IubmFtZSA9IGVycm9yLm5hbWU7XG5cbiAgICAvLyBQcmVzZXJ2ZSBzdGF0dXMgZnJvbSB0aGUgb3JpZ2luYWwgZXJyb3IgaWYgbm90IGFscmVhZHkgc2V0IGZyb20gcmVzcG9uc2VcbiAgICBpZiAoZXJyb3Iuc3RhdHVzICE9IG51bGwgJiYgYXhpb3NFcnJvci5zdGF0dXMgPT0gbnVsbCkge1xuICAgICAgYXhpb3NFcnJvci5zdGF0dXMgPSBlcnJvci5zdGF0dXM7XG4gICAgfVxuXG4gICAgY3VzdG9tUHJvcHMgJiYgT2JqZWN0LmFzc2lnbihheGlvc0Vycm9yLCBjdXN0b21Qcm9wcyk7XG4gICAgcmV0dXJuIGF4aW9zRXJyb3I7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIEVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBtZXNzYWdlLCBjb25maWcsIGVycm9yIGNvZGUsIHJlcXVlc3QgYW5kIHJlc3BvbnNlLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtjb2RlXSBUaGUgZXJyb3IgY29kZSAoZm9yIGV4YW1wbGUsICdFQ09OTkFCT1JURUQnKS5cbiAgICogQHBhcmFtIHtPYmplY3R9IFtjb25maWddIFRoZSBjb25maWcuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbcmVxdWVzdF0gVGhlIHJlcXVlc3QuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbcmVzcG9uc2VdIFRoZSByZXNwb25zZS5cbiAgICpcbiAgICogQHJldHVybnMge0Vycm9yfSBUaGUgY3JlYXRlZCBlcnJvci5cbiAgICovXG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcblxuICAgIC8vIE1ha2UgbWVzc2FnZSBlbnVtZXJhYmxlIHRvIG1haW50YWluIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgICAvLyBUaGUgbmF0aXZlIEVycm9yIGNvbnN0cnVjdG9yIHNldHMgbWVzc2FnZSBhcyBub24tZW51bWVyYWJsZSxcbiAgICAvLyBidXQgYXhpb3MgPCB2MS4xMy4zIGhhZCBpdCBhcyBlbnVtZXJhYmxlXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdtZXNzYWdlJywge1xuICAgICAgLy8gTnVsbC1wcm90byBkZXNjcmlwdG9yIHNvIGEgcG9sbHV0ZWQgT2JqZWN0LnByb3RvdHlwZS5nZXQgY2Fubm90IHR1cm5cbiAgICAgIC8vIHRoaXMgZGF0YSBkZXNjcmlwdG9yIGludG8gYW4gYWNjZXNzb3IgZGVzY3JpcHRvciBvbiB0aGUgd2F5IGluLlxuICAgICAgX19wcm90b19fOiBudWxsLFxuICAgICAgdmFsdWU6IG1lc3NhZ2UsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgfSk7XG5cbiAgICB0aGlzLm5hbWUgPSAnQXhpb3NFcnJvcic7XG4gICAgdGhpcy5pc0F4aW9zRXJyb3IgPSB0cnVlO1xuICAgIGNvZGUgJiYgKHRoaXMuY29kZSA9IGNvZGUpO1xuICAgIGNvbmZpZyAmJiAodGhpcy5jb25maWcgPSBjb25maWcpO1xuICAgIHJlcXVlc3QgJiYgKHRoaXMucmVxdWVzdCA9IHJlcXVlc3QpO1xuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICAgICAgdGhpcy5zdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgfVxuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIC8vIE9wdC1pbiByZWRhY3Rpb246IHdoZW4gdGhlIHJlcXVlc3QgY29uZmlnIGNhcnJpZXMgYSBgcmVkYWN0YCBhcnJheSwgdGhlXG4gICAgLy8gdmFsdWUgb2YgYW55IG1hdGNoaW5nIGtleSAoY2FzZS1pbnNlbnNpdGl2ZSwgYXQgYW55IGRlcHRoKSBpcyByZXBsYWNlZFxuICAgIC8vIHdpdGggUkVEQUNURUQgaW4gdGhlIHNlcmlhbGl6ZWQgc25hcHNob3QuIFVuZGVmaW5lZCBvciBlbXB0eSBsZWF2ZXMgdGhlXG4gICAgLy8gZXhpc3Rpbmcgc2VyaWFsaXphdGlvbiBiZWhhdmlvciB1bmNoYW5nZWQuXG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWc7XG4gICAgY29uc3QgcmVkYWN0S2V5cyA9IGNvbmZpZyAmJiB1dGlscy5oYXNPd25Qcm9wKGNvbmZpZywgJ3JlZGFjdCcpID8gY29uZmlnLnJlZGFjdCA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBzZXJpYWxpemVkQ29uZmlnID1cbiAgICAgIHV0aWxzLmlzQXJyYXkocmVkYWN0S2V5cykgJiYgcmVkYWN0S2V5cy5sZW5ndGggPiAwXG4gICAgICAgID8gcmVkYWN0Q29uZmlnKGNvbmZpZywgcmVkYWN0S2V5cylcbiAgICAgICAgOiB1dGlscy50b0pTT05PYmplY3QoY29uZmlnKTtcblxuICAgIHJldHVybiB7XG4gICAgICAvLyBTdGFuZGFyZFxuICAgICAgbWVzc2FnZTogdGhpcy5tZXNzYWdlLFxuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgLy8gTWljcm9zb2Z0XG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgIG51bWJlcjogdGhpcy5udW1iZXIsXG4gICAgICAvLyBNb3ppbGxhXG4gICAgICBmaWxlTmFtZTogdGhpcy5maWxlTmFtZSxcbiAgICAgIGxpbmVOdW1iZXI6IHRoaXMubGluZU51bWJlcixcbiAgICAgIGNvbHVtbk51bWJlcjogdGhpcy5jb2x1bW5OdW1iZXIsXG4gICAgICBzdGFjazogdGhpcy5zdGFjayxcbiAgICAgIC8vIEF4aW9zXG4gICAgICBjb25maWc6IHNlcmlhbGl6ZWRDb25maWcsXG4gICAgICBjb2RlOiB0aGlzLmNvZGUsXG4gICAgICBzdGF0dXM6IHRoaXMuc3RhdHVzLFxuICAgIH07XG4gIH1cbn1cblxuLy8gVGhpcyBjYW4gYmUgY2hhbmdlZCB0byBzdGF0aWMgcHJvcGVydGllcyBhcyBzb29uIGFzIHRoZSBwYXJzZXIgb3B0aW9ucyBpbiAuZXNsaW50LmNqcyBhcmUgdXBkYXRlZC5cbkF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT05fVkFMVUUgPSAnRVJSX0JBRF9PUFRJT05fVkFMVUUnO1xuQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTiA9ICdFUlJfQkFEX09QVElPTic7XG5BeGlvc0Vycm9yLkVDT05OQUJPUlRFRCA9ICdFQ09OTkFCT1JURUQnO1xuQXhpb3NFcnJvci5FVElNRURPVVQgPSAnRVRJTUVET1VUJztcbkF4aW9zRXJyb3IuRUNPTk5SRUZVU0VEID0gJ0VDT05OUkVGVVNFRCc7XG5BeGlvc0Vycm9yLkVSUl9ORVRXT1JLID0gJ0VSUl9ORVRXT1JLJztcbkF4aW9zRXJyb3IuRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUyA9ICdFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTJztcbkF4aW9zRXJyb3IuRVJSX0RFUFJFQ0FURUQgPSAnRVJSX0RFUFJFQ0FURUQnO1xuQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFID0gJ0VSUl9CQURfUkVTUE9OU0UnO1xuQXhpb3NFcnJvci5FUlJfQkFEX1JFUVVFU1QgPSAnRVJSX0JBRF9SRVFVRVNUJztcbkF4aW9zRXJyb3IuRVJSX0NBTkNFTEVEID0gJ0VSUl9DQU5DRUxFRCc7XG5BeGlvc0Vycm9yLkVSUl9OT1RfU1VQUE9SVCA9ICdFUlJfTk9UX1NVUFBPUlQnO1xuQXhpb3NFcnJvci5FUlJfSU5WQUxJRF9VUkwgPSAnRVJSX0lOVkFMSURfVVJMJztcbkF4aW9zRXJyb3IuRVJSX0ZPUk1fREFUQV9ERVBUSF9FWENFRURFRCA9ICdFUlJfRk9STV9EQVRBX0RFUFRIX0VYQ0VFREVEJztcblxuZXhwb3J0IGRlZmF1bHQgQXhpb3NFcnJvcjtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4uL2NvcmUvQXhpb3NFcnJvci5qcyc7XG4vLyB0ZW1wb3JhcnkgaG90Zml4IHRvIGF2b2lkIGNpcmN1bGFyIHJlZmVyZW5jZXMgdW50aWwgQXhpb3NVUkxTZWFyY2hQYXJhbXMgaXMgcmVmYWN0b3JlZFxuaW1wb3J0IFBsYXRmb3JtRm9ybURhdGEgZnJvbSAnLi4vcGxhdGZvcm0vbm9kZS9jbGFzc2VzL0Zvcm1EYXRhLmpzJztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIHRoZSBnaXZlbiB0aGluZyBpcyBhIGFycmF5IG9yIGpzIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGhpbmcgLSBUaGUgb2JqZWN0IG9yIGFycmF5IHRvIGJlIHZpc2l0ZWQuXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzVmlzaXRhYmxlKHRoaW5nKSB7XG4gIHJldHVybiB1dGlscy5pc1BsYWluT2JqZWN0KHRoaW5nKSB8fCB1dGlscy5pc0FycmF5KHRoaW5nKTtcbn1cblxuLyoqXG4gKiBJdCByZW1vdmVzIHRoZSBicmFja2V0cyBmcm9tIHRoZSBlbmQgb2YgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgcGFyYW1ldGVyLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSBrZXkgd2l0aG91dCB0aGUgYnJhY2tldHMuXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUJyYWNrZXRzKGtleSkge1xuICByZXR1cm4gdXRpbHMuZW5kc1dpdGgoa2V5LCAnW10nKSA/IGtleS5zbGljZSgwLCAtMikgOiBrZXk7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBwYXRoLCBhIGtleSwgYW5kIGEgYm9vbGVhbiwgYW5kIHJldHVybnMgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIFRoZSBwYXRoIHRvIHRoZSBjdXJyZW50IGtleS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBjdXJyZW50IG9iamVjdCBiZWluZyBpdGVyYXRlZCBvdmVyLlxuICogQHBhcmFtIHtzdHJpbmd9IGRvdHMgLSBJZiB0cnVlLCB0aGUga2V5IHdpbGwgYmUgcmVuZGVyZWQgd2l0aCBkb3RzIGluc3RlYWQgb2YgYnJhY2tldHMuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIHBhdGggdG8gdGhlIGN1cnJlbnQga2V5LlxuICovXG5mdW5jdGlvbiByZW5kZXJLZXkocGF0aCwga2V5LCBkb3RzKSB7XG4gIGlmICghcGF0aCkgcmV0dXJuIGtleTtcbiAgcmV0dXJuIHBhdGhcbiAgICAuY29uY2F0KGtleSlcbiAgICAubWFwKGZ1bmN0aW9uIGVhY2godG9rZW4sIGkpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgdG9rZW4gPSByZW1vdmVCcmFja2V0cyh0b2tlbik7XG4gICAgICByZXR1cm4gIWRvdHMgJiYgaSA/ICdbJyArIHRva2VuICsgJ10nIDogdG9rZW47XG4gICAgfSlcbiAgICAuam9pbihkb3RzID8gJy4nIDogJycpO1xufVxuXG4vKipcbiAqIElmIHRoZSBhcnJheSBpcyBhbiBhcnJheSBhbmQgbm9uZSBvZiBpdHMgZWxlbWVudHMgYXJlIHZpc2l0YWJsZSwgdGhlbiBpdCdzIGEgZmxhdCBhcnJheS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PGFueT59IGFyciAtIFRoZSBhcnJheSB0byBjaGVja1xuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0ZsYXRBcnJheShhcnIpIHtcbiAgcmV0dXJuIHV0aWxzLmlzQXJyYXkoYXJyKSAmJiAhYXJyLnNvbWUoaXNWaXNpdGFibGUpO1xufVxuXG5jb25zdCBwcmVkaWNhdGVzID0gdXRpbHMudG9GbGF0T2JqZWN0KHV0aWxzLCB7fSwgbnVsbCwgZnVuY3Rpb24gZmlsdGVyKHByb3ApIHtcbiAgcmV0dXJuIC9eaXNbQS1aXS8udGVzdChwcm9wKTtcbn0pO1xuXG4vKipcbiAqIENvbnZlcnQgYSBkYXRhIG9iamVjdCB0byBGb3JtRGF0YVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEBwYXJhbSB7P09iamVjdH0gW2Zvcm1EYXRhXVxuICogQHBhcmFtIHs/T2JqZWN0fSBbb3B0aW9uc11cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLnZpc2l0b3JdXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLm1ldGFUb2tlbnMgPSB0cnVlXVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5kb3RzID0gZmFsc2VdXG4gKiBAcGFyYW0gez9Cb29sZWFufSBbb3B0aW9ucy5pbmRleGVzID0gZmFsc2VdXG4gKlxuICogQHJldHVybnMge09iamVjdH1cbiAqKi9cblxuLyoqXG4gKiBJdCBjb252ZXJ0cyBhbiBvYmplY3QgaW50byBhIEZvcm1EYXRhIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PGFueSwgYW55Pn0gb2JqIC0gVGhlIG9iamVjdCB0byBjb252ZXJ0IHRvIGZvcm0gZGF0YS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtRGF0YSAtIFRoZSBGb3JtRGF0YSBvYmplY3QgdG8gYXBwZW5kIHRvLlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBhbnk+fSBvcHRpb25zXG4gKlxuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24gdG9Gb3JtRGF0YShvYmosIGZvcm1EYXRhLCBvcHRpb25zKSB7XG4gIGlmICghdXRpbHMuaXNPYmplY3Qob2JqKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3RhcmdldCBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIGZvcm1EYXRhID0gZm9ybURhdGEgfHwgbmV3IChQbGF0Zm9ybUZvcm1EYXRhIHx8IEZvcm1EYXRhKSgpO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBvcHRpb25zID0gdXRpbHMudG9GbGF0T2JqZWN0KFxuICAgIG9wdGlvbnMsXG4gICAge1xuICAgICAgbWV0YVRva2VuczogdHJ1ZSxcbiAgICAgIGRvdHM6IGZhbHNlLFxuICAgICAgaW5kZXhlczogZmFsc2UsXG4gICAgfSxcbiAgICBmYWxzZSxcbiAgICBmdW5jdGlvbiBkZWZpbmVkKG9wdGlvbiwgc291cmNlKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgICAgIHJldHVybiAhdXRpbHMuaXNVbmRlZmluZWQoc291cmNlW29wdGlvbl0pO1xuICAgIH1cbiAgKTtcblxuICBjb25zdCBtZXRhVG9rZW5zID0gb3B0aW9ucy5tZXRhVG9rZW5zO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgY29uc3QgdmlzaXRvciA9IG9wdGlvbnMudmlzaXRvciB8fCBkZWZhdWx0VmlzaXRvcjtcbiAgY29uc3QgZG90cyA9IG9wdGlvbnMuZG90cztcbiAgY29uc3QgaW5kZXhlcyA9IG9wdGlvbnMuaW5kZXhlcztcbiAgY29uc3QgX0Jsb2IgPSBvcHRpb25zLkJsb2IgfHwgKHR5cGVvZiBCbG9iICE9PSAndW5kZWZpbmVkJyAmJiBCbG9iKTtcbiAgY29uc3QgbWF4RGVwdGggPSBvcHRpb25zLm1heERlcHRoID09PSB1bmRlZmluZWQgPyAxMDAgOiBvcHRpb25zLm1heERlcHRoO1xuICBjb25zdCB1c2VCbG9iID0gX0Jsb2IgJiYgdXRpbHMuaXNTcGVjQ29tcGxpYW50Rm9ybShmb3JtRGF0YSk7XG5cbiAgaWYgKCF1dGlscy5pc0Z1bmN0aW9uKHZpc2l0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndmlzaXRvciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbnZlcnRWYWx1ZSh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuICcnO1xuXG4gICAgaWYgKHV0aWxzLmlzRGF0ZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZS50b0lTT1N0cmluZygpO1xuICAgIH1cblxuICAgIGlmICh1dGlscy5pc0Jvb2xlYW4odmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBpZiAoIXVzZUJsb2IgJiYgdXRpbHMuaXNCbG9iKHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ0Jsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEgQnVmZmVyIGluc3RlYWQuJyk7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXIodmFsdWUpIHx8IHV0aWxzLmlzVHlwZWRBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB1c2VCbG9iICYmIHR5cGVvZiBCbG9iID09PSAnZnVuY3Rpb24nID8gbmV3IEJsb2IoW3ZhbHVlXSkgOiBCdWZmZXIuZnJvbSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmF1bHQgdmlzaXRvci5cbiAgICpcbiAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ3xOdW1iZXJ9IGtleVxuICAgKiBAcGFyYW0ge0FycmF5PFN0cmluZ3xOdW1iZXI+fSBwYXRoXG4gICAqIEB0aGlzIHtGb3JtRGF0YX1cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHJldHVybiB0cnVlIHRvIHZpc2l0IHRoZSBlYWNoIHByb3Agb2YgdGhlIHZhbHVlIHJlY3Vyc2l2ZWx5XG4gICAqL1xuICBmdW5jdGlvbiBkZWZhdWx0VmlzaXRvcih2YWx1ZSwga2V5LCBwYXRoKSB7XG4gICAgbGV0IGFyciA9IHZhbHVlO1xuXG4gICAgaWYgKHV0aWxzLmlzUmVhY3ROYXRpdmUoZm9ybURhdGEpICYmIHV0aWxzLmlzUmVhY3ROYXRpdmVCbG9iKHZhbHVlKSkge1xuICAgICAgZm9ybURhdGEuYXBwZW5kKHJlbmRlcktleShwYXRoLCBrZXksIGRvdHMpLCBjb252ZXJ0VmFsdWUodmFsdWUpKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUgJiYgIXBhdGggJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKHV0aWxzLmVuZHNXaXRoKGtleSwgJ3t9JykpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIGtleSA9IG1ldGFUb2tlbnMgPyBrZXkgOiBrZXkuc2xpY2UoMCwgLTIpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgdmFsdWUgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAodXRpbHMuaXNBcnJheSh2YWx1ZSkgJiYgaXNGbGF0QXJyYXkodmFsdWUpKSB8fFxuICAgICAgICAoKHV0aWxzLmlzRmlsZUxpc3QodmFsdWUpIHx8IHV0aWxzLmVuZHNXaXRoKGtleSwgJ1tdJykpICYmIChhcnIgPSB1dGlscy50b0FycmF5KHZhbHVlKSkpXG4gICAgICApIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIGtleSA9IHJlbW92ZUJyYWNrZXRzKGtleSk7XG5cbiAgICAgICAgYXJyLmZvckVhY2goZnVuY3Rpb24gZWFjaChlbCwgaW5kZXgpIHtcbiAgICAgICAgICAhKHV0aWxzLmlzVW5kZWZpbmVkKGVsKSB8fCBlbCA9PT0gbnVsbCkgJiZcbiAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5lc3RlZC10ZXJuYXJ5XG4gICAgICAgICAgICAgIGluZGV4ZXMgPT09IHRydWVcbiAgICAgICAgICAgICAgICA/IHJlbmRlcktleShba2V5XSwgaW5kZXgsIGRvdHMpXG4gICAgICAgICAgICAgICAgOiBpbmRleGVzID09PSBudWxsXG4gICAgICAgICAgICAgICAgICA/IGtleVxuICAgICAgICAgICAgICAgICAgOiBrZXkgKyAnW10nLFxuICAgICAgICAgICAgICBjb252ZXJ0VmFsdWUoZWwpXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc1Zpc2l0YWJsZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZvcm1EYXRhLmFwcGVuZChyZW5kZXJLZXkocGF0aCwga2V5LCBkb3RzKSwgY29udmVydFZhbHVlKHZhbHVlKSk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBzdGFjayA9IFtdO1xuXG4gIGNvbnN0IGV4cG9zZWRIZWxwZXJzID0gT2JqZWN0LmFzc2lnbihwcmVkaWNhdGVzLCB7XG4gICAgZGVmYXVsdFZpc2l0b3IsXG4gICAgY29udmVydFZhbHVlLFxuICAgIGlzVmlzaXRhYmxlLFxuICB9KTtcblxuICBmdW5jdGlvbiBidWlsZCh2YWx1ZSwgcGF0aCwgZGVwdGggPSAwKSB7XG4gICAgaWYgKHV0aWxzLmlzVW5kZWZpbmVkKHZhbHVlKSkgcmV0dXJuO1xuXG4gICAgaWYgKGRlcHRoID4gbWF4RGVwdGgpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICAnT2JqZWN0IGlzIHRvbyBkZWVwbHkgbmVzdGVkICgnICsgZGVwdGggKyAnIGxldmVscykuIE1heCBkZXB0aDogJyArIG1heERlcHRoLFxuICAgICAgICBBeGlvc0Vycm9yLkVSUl9GT1JNX0RBVEFfREVQVEhfRVhDRUVERURcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHN0YWNrLmluZGV4T2YodmFsdWUpICE9PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gJyArIHBhdGguam9pbignLicpKTtcbiAgICB9XG5cbiAgICBzdGFjay5wdXNoKHZhbHVlKTtcblxuICAgIHV0aWxzLmZvckVhY2godmFsdWUsIGZ1bmN0aW9uIGVhY2goZWwsIGtleSkge1xuICAgICAgY29uc3QgcmVzdWx0ID1cbiAgICAgICAgISh1dGlscy5pc1VuZGVmaW5lZChlbCkgfHwgZWwgPT09IG51bGwpICYmXG4gICAgICAgIHZpc2l0b3IuY2FsbChmb3JtRGF0YSwgZWwsIHV0aWxzLmlzU3RyaW5nKGtleSkgPyBrZXkudHJpbSgpIDoga2V5LCBwYXRoLCBleHBvc2VkSGVscGVycyk7XG5cbiAgICAgIGlmIChyZXN1bHQgPT09IHRydWUpIHtcbiAgICAgICAgYnVpbGQoZWwsIHBhdGggPyBwYXRoLmNvbmNhdChrZXkpIDogW2tleV0sIGRlcHRoICsgMSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBzdGFjay5wb3AoKTtcbiAgfVxuXG4gIGlmICghdXRpbHMuaXNPYmplY3Qob2JqKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2RhdGEgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgfVxuXG4gIGJ1aWxkKG9iaik7XG5cbiAgcmV0dXJuIGZvcm1EYXRhO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0b0Zvcm1EYXRhO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdG9Gb3JtRGF0YSBmcm9tICcuL3RvRm9ybURhdGEuanMnO1xuXG4vKipcbiAqIEl0IGVuY29kZXMgYSBzdHJpbmcgYnkgcmVwbGFjaW5nIGFsbCBjaGFyYWN0ZXJzIHRoYXQgYXJlIG5vdCBpbiB0aGUgdW5yZXNlcnZlZCBzZXQgd2l0aFxuICogdGhlaXIgcGVyY2VudC1lbmNvZGVkIGVxdWl2YWxlbnRzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0ciAtIFRoZSBzdHJpbmcgdG8gZW5jb2RlLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBlbmNvZGVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gZW5jb2RlKHN0cikge1xuICBjb25zdCBjaGFyTWFwID0ge1xuICAgICchJzogJyUyMScsXG4gICAgXCInXCI6ICclMjcnLFxuICAgICcoJzogJyUyOCcsXG4gICAgJyknOiAnJTI5JyxcbiAgICAnfic6ICclN0UnLFxuICAgICclMjAnOiAnKycsXG4gIH07XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyKS5yZXBsYWNlKC9bIScoKX5dfCUyMC9nLCBmdW5jdGlvbiByZXBsYWNlcihtYXRjaCkge1xuICAgIHJldHVybiBjaGFyTWFwW21hdGNoXTtcbiAgfSk7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBwYXJhbXMgb2JqZWN0IGFuZCBjb252ZXJ0cyBpdCB0byBhIEZvcm1EYXRhIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgYW55Pn0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgdG8gYmUgY29udmVydGVkIHRvIGEgRm9ybURhdGEgb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBhbnk+fSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgb2JqZWN0IHBhc3NlZCB0byB0aGUgQXhpb3MgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIEF4aW9zVVJMU2VhcmNoUGFyYW1zKHBhcmFtcywgb3B0aW9ucykge1xuICB0aGlzLl9wYWlycyA9IFtdO1xuXG4gIHBhcmFtcyAmJiB0b0Zvcm1EYXRhKHBhcmFtcywgdGhpcywgb3B0aW9ucyk7XG59XG5cbmNvbnN0IHByb3RvdHlwZSA9IEF4aW9zVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZTtcblxucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uIGFwcGVuZChuYW1lLCB2YWx1ZSkge1xuICB0aGlzLl9wYWlycy5wdXNoKFtuYW1lLCB2YWx1ZV0pO1xufTtcblxucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoZW5jb2Rlcikge1xuICBjb25zdCBfZW5jb2RlID0gZW5jb2RlclxuICAgID8gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBlbmNvZGVyLmNhbGwodGhpcywgdmFsdWUsIGVuY29kZSk7XG4gICAgICB9XG4gICAgOiBlbmNvZGU7XG5cbiAgcmV0dXJuIHRoaXMuX3BhaXJzXG4gICAgLm1hcChmdW5jdGlvbiBlYWNoKHBhaXIpIHtcbiAgICAgIHJldHVybiBfZW5jb2RlKHBhaXJbMF0pICsgJz0nICsgX2VuY29kZShwYWlyWzFdKTtcbiAgICB9LCAnJylcbiAgICAuam9pbignJicpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgQXhpb3NVUkxTZWFyY2hQYXJhbXM7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgQXhpb3NVUkxTZWFyY2hQYXJhbXMgZnJvbSAnLi9BeGlvc1VSTFNlYXJjaFBhcmFtcy5qcyc7XG5cbi8qKlxuICogSXQgcmVwbGFjZXMgVVJMLWVuY29kZWQgZm9ybXMgb2YgYDpgLCBgJGAsIGAsYCwgYW5kIHNwYWNlcyB3aXRoXG4gKiB0aGVpciBwbGFpbiBjb3VudGVycGFydHMgKGA6YCwgYCRgLCBgLGAsIGArYCkuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbCBUaGUgdmFsdWUgdG8gYmUgZW5jb2RlZC5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZW5jb2RlZCB2YWx1ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZSh2YWwpIHtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh2YWwpXG4gICAgLnJlcGxhY2UoLyUzQS9naSwgJzonKVxuICAgIC5yZXBsYWNlKC8lMjQvZywgJyQnKVxuICAgIC5yZXBsYWNlKC8lMkMvZ2ksICcsJylcbiAgICAucmVwbGFjZSgvJTIwL2csICcrJyk7XG59XG5cbi8qKlxuICogQnVpbGQgYSBVUkwgYnkgYXBwZW5kaW5nIHBhcmFtcyB0byB0aGUgZW5kXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgYmFzZSBvZiB0aGUgdXJsIChlLmcuLCBodHRwOi8vd3d3Lmdvb2dsZS5jb20pXG4gKiBAcGFyYW0ge29iamVjdH0gW3BhcmFtc10gVGhlIHBhcmFtcyB0byBiZSBhcHBlbmRlZFxuICogQHBhcmFtIHs/KG9iamVjdHxGdW5jdGlvbil9IG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIHVybFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBidWlsZFVSTCh1cmwsIHBhcmFtcywgb3B0aW9ucykge1xuICBpZiAoIXBhcmFtcykge1xuICAgIHJldHVybiB1cmw7XG4gIH1cblxuICBjb25zdCBfZW5jb2RlID0gKG9wdGlvbnMgJiYgb3B0aW9ucy5lbmNvZGUpIHx8IGVuY29kZTtcblxuICBjb25zdCBfb3B0aW9ucyA9IHV0aWxzLmlzRnVuY3Rpb24ob3B0aW9ucylcbiAgICA/IHtcbiAgICAgICAgc2VyaWFsaXplOiBvcHRpb25zLFxuICAgICAgfVxuICAgIDogb3B0aW9ucztcblxuICBjb25zdCBzZXJpYWxpemVGbiA9IF9vcHRpb25zICYmIF9vcHRpb25zLnNlcmlhbGl6ZTtcblxuICBsZXQgc2VyaWFsaXplZFBhcmFtcztcblxuICBpZiAoc2VyaWFsaXplRm4pIHtcbiAgICBzZXJpYWxpemVkUGFyYW1zID0gc2VyaWFsaXplRm4ocGFyYW1zLCBfb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKHBhcmFtcylcbiAgICAgID8gcGFyYW1zLnRvU3RyaW5nKClcbiAgICAgIDogbmV3IEF4aW9zVVJMU2VhcmNoUGFyYW1zKHBhcmFtcywgX29wdGlvbnMpLnRvU3RyaW5nKF9lbmNvZGUpO1xuICB9XG5cbiAgaWYgKHNlcmlhbGl6ZWRQYXJhbXMpIHtcbiAgICBjb25zdCBoYXNobWFya0luZGV4ID0gdXJsLmluZGV4T2YoJyMnKTtcblxuICAgIGlmIChoYXNobWFya0luZGV4ICE9PSAtMSkge1xuICAgICAgdXJsID0gdXJsLnNsaWNlKDAsIGhhc2htYXJrSW5kZXgpO1xuICAgIH1cbiAgICB1cmwgKz0gKHVybC5pbmRleE9mKCc/JykgPT09IC0xID8gJz8nIDogJyYnKSArIHNlcmlhbGl6ZWRQYXJhbXM7XG4gIH1cblxuICByZXR1cm4gdXJsO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuXG5jbGFzcyBJbnRlcmNlcHRvck1hbmFnZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmhhbmRsZXJzID0gW107XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgbmV3IGludGVyY2VwdG9yIHRvIHRoZSBzdGFja1xuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdWxmaWxsZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgdGhlbmAgZm9yIGEgYFByb21pc2VgXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHJlamVjdGAgZm9yIGEgYFByb21pc2VgXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIFRoZSBvcHRpb25zIGZvciB0aGUgaW50ZXJjZXB0b3IsIHN5bmNocm9ub3VzIGFuZCBydW5XaGVuXG4gICAqXG4gICAqIEByZXR1cm4ge051bWJlcn0gQW4gSUQgdXNlZCB0byByZW1vdmUgaW50ZXJjZXB0b3IgbGF0ZXJcbiAgICovXG4gIHVzZShmdWxmaWxsZWQsIHJlamVjdGVkLCBvcHRpb25zKSB7XG4gICAgdGhpcy5oYW5kbGVycy5wdXNoKHtcbiAgICAgIGZ1bGZpbGxlZCxcbiAgICAgIHJlamVjdGVkLFxuICAgICAgc3luY2hyb25vdXM6IG9wdGlvbnMgPyBvcHRpb25zLnN5bmNocm9ub3VzIDogZmFsc2UsXG4gICAgICBydW5XaGVuOiBvcHRpb25zID8gb3B0aW9ucy5ydW5XaGVuIDogbnVsbCxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVycy5sZW5ndGggLSAxO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbiBpbnRlcmNlcHRvciBmcm9tIHRoZSBzdGFja1xuICAgKlxuICAgKiBAcGFyYW0ge051bWJlcn0gaWQgVGhlIElEIHRoYXQgd2FzIHJldHVybmVkIGJ5IGB1c2VgXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZWplY3QoaWQpIHtcbiAgICBpZiAodGhpcy5oYW5kbGVyc1tpZF0pIHtcbiAgICAgIHRoaXMuaGFuZGxlcnNbaWRdID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgYWxsIGludGVyY2VwdG9ycyBmcm9tIHRoZSBzdGFja1xuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGNsZWFyKCkge1xuICAgIGlmICh0aGlzLmhhbmRsZXJzKSB7XG4gICAgICB0aGlzLmhhbmRsZXJzID0gW107XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGUgb3ZlciBhbGwgdGhlIHJlZ2lzdGVyZWQgaW50ZXJjZXB0b3JzXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIHNraXBwaW5nIG92ZXIgYW55XG4gICAqIGludGVyY2VwdG9ycyB0aGF0IG1heSBoYXZlIGJlY29tZSBgbnVsbGAgY2FsbGluZyBgZWplY3RgLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBpbnRlcmNlcHRvclxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGZvckVhY2goZm4pIHtcbiAgICB1dGlscy5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsIGZ1bmN0aW9uIGZvckVhY2hIYW5kbGVyKGgpIHtcbiAgICAgIGlmIChoICE9PSBudWxsKSB7XG4gICAgICAgIGZuKGgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEludGVyY2VwdG9yTWFuYWdlcjtcbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBzaWxlbnRKU09OUGFyc2luZzogdHJ1ZSxcbiAgZm9yY2VkSlNPTlBhcnNpbmc6IHRydWUsXG4gIGNsYXJpZnlUaW1lb3V0RXJyb3I6IGZhbHNlLFxuICBsZWdhY3lJbnRlcmNlcHRvclJlcVJlc09yZGVyaW5nOiB0cnVlLFxuICBhZHZlcnRpc2Vac3RkQWNjZXB0RW5jb2Rpbmc6IGZhbHNlLFxufTtcbiIsImltcG9ydCBVUkxTZWFyY2hQYXJhbXMgZnJvbSAnLi9jbGFzc2VzL1VSTFNlYXJjaFBhcmFtcy5qcyc7XG5pbXBvcnQgRm9ybURhdGEgZnJvbSAnLi9jbGFzc2VzL0Zvcm1EYXRhLmpzJztcbmltcG9ydCBCbG9iIGZyb20gJy4vY2xhc3Nlcy9CbG9iLmpzJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBpc0Jyb3dzZXI6IHRydWUsXG4gIGNsYXNzZXM6IHtcbiAgICBVUkxTZWFyY2hQYXJhbXMsXG4gICAgRm9ybURhdGEsXG4gICAgQmxvYixcbiAgfSxcbiAgcHJvdG9jb2xzOiBbJ2h0dHAnLCAnaHR0cHMnLCAnZmlsZScsICdibG9iJywgJ3VybCcsICdkYXRhJ10sXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgQXhpb3NVUkxTZWFyY2hQYXJhbXMgZnJvbSAnLi4vLi4vLi4vaGVscGVycy9BeGlvc1VSTFNlYXJjaFBhcmFtcy5qcyc7XG5leHBvcnQgZGVmYXVsdCB0eXBlb2YgVVJMU2VhcmNoUGFyYW1zICE9PSAndW5kZWZpbmVkJyA/IFVSTFNlYXJjaFBhcmFtcyA6IEF4aW9zVVJMU2VhcmNoUGFyYW1zO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgZGVmYXVsdCB0eXBlb2YgRm9ybURhdGEgIT09ICd1bmRlZmluZWQnID8gRm9ybURhdGEgOiBudWxsO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgZGVmYXVsdCB0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcgPyBCbG9iIDogbnVsbDtcbiIsImNvbnN0IGhhc0Jyb3dzZXJFbnYgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnO1xuXG5jb25zdCBfbmF2aWdhdG9yID0gKHR5cGVvZiBuYXZpZ2F0b3IgPT09ICdvYmplY3QnICYmIG5hdmlnYXRvcikgfHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIERldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudFxuICpcbiAqIFRoaXMgYWxsb3dzIGF4aW9zIHRvIHJ1biBpbiBhIHdlYiB3b3JrZXIsIGFuZCByZWFjdC1uYXRpdmUuXG4gKiBCb3RoIGVudmlyb25tZW50cyBzdXBwb3J0IFhNTEh0dHBSZXF1ZXN0LCBidXQgbm90IGZ1bGx5IHN0YW5kYXJkIGdsb2JhbHMuXG4gKlxuICogd2ViIHdvcmtlcnM6XG4gKiAgdHlwZW9mIHdpbmRvdyAtPiB1bmRlZmluZWRcbiAqICB0eXBlb2YgZG9jdW1lbnQgLT4gdW5kZWZpbmVkXG4gKlxuICogcmVhY3QtbmF0aXZlOlxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdSZWFjdE5hdGl2ZSdcbiAqIG5hdGl2ZXNjcmlwdFxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdOYXRpdmVTY3JpcHQnIG9yICdOUydcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuY29uc3QgaGFzU3RhbmRhcmRCcm93c2VyRW52ID1cbiAgaGFzQnJvd3NlckVudiAmJlxuICAoIV9uYXZpZ2F0b3IgfHwgWydSZWFjdE5hdGl2ZScsICdOYXRpdmVTY3JpcHQnLCAnTlMnXS5pbmRleE9mKF9uYXZpZ2F0b3IucHJvZHVjdCkgPCAwKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgd2UncmUgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgd2ViV29ya2VyIGVudmlyb25tZW50XG4gKlxuICogQWx0aG91Z2ggdGhlIGBpc1N0YW5kYXJkQnJvd3NlckVudmAgbWV0aG9kIGluZGljYXRlcyB0aGF0XG4gKiBgYWxsb3dzIGF4aW9zIHRvIHJ1biBpbiBhIHdlYiB3b3JrZXJgLCB0aGUgV2ViV29ya2VyIHdpbGwgc3RpbGwgYmVcbiAqIGZpbHRlcmVkIG91dCBkdWUgdG8gaXRzIGp1ZGdtZW50IHN0YW5kYXJkXG4gKiBgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJ2AuXG4gKiBUaGlzIGxlYWRzIHRvIGEgcHJvYmxlbSB3aGVuIGF4aW9zIHBvc3QgYEZvcm1EYXRhYCBpbiB3ZWJXb3JrZXJcbiAqL1xuY29uc3QgaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52ID0gKCgpID0+IHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICAgc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlICYmXG4gICAgdHlwZW9mIHNlbGYuaW1wb3J0U2NyaXB0cyA9PT0gJ2Z1bmN0aW9uJ1xuICApO1xufSkoKTtcblxuY29uc3Qgb3JpZ2luID0gKGhhc0Jyb3dzZXJFbnYgJiYgd2luZG93LmxvY2F0aW9uLmhyZWYpIHx8ICdodHRwOi8vbG9jYWxob3N0JztcblxuZXhwb3J0IHtcbiAgaGFzQnJvd3NlckVudixcbiAgaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52LFxuICBoYXNTdGFuZGFyZEJyb3dzZXJFbnYsXG4gIF9uYXZpZ2F0b3IgYXMgbmF2aWdhdG9yLFxuICBvcmlnaW4sXG59O1xuIiwiaW1wb3J0IHBsYXRmb3JtIGZyb20gJy4vbm9kZS9pbmRleC5qcyc7XG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tICcuL2NvbW1vbi91dGlscy5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgLi4udXRpbHMsXG4gIC4uLnBsYXRmb3JtLFxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcblxuLyoqXG4gKiBJdCB0YWtlcyBhIHN0cmluZyBsaWtlIGBmb29beF1beV1bel1gIGFuZCByZXR1cm5zIGFuIGFycmF5IGxpa2UgYFsnZm9vJywgJ3gnLCAneScsICd6J11cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKlxuICogQHJldHVybnMgQW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAqL1xuZnVuY3Rpb24gcGFyc2VQcm9wUGF0aChuYW1lKSB7XG4gIC8vIGZvb1t4XVt5XVt6XVxuICAvLyBmb28ueC55LnpcbiAgLy8gZm9vLXgteS16XG4gIC8vIGZvbyB4IHkgelxuICByZXR1cm4gdXRpbHMubWF0Y2hBbGwoL1xcdyt8XFxbKFxcdyopXS9nLCBuYW1lKS5tYXAoKG1hdGNoKSA9PiB7XG4gICAgcmV0dXJuIG1hdGNoWzBdID09PSAnW10nID8gJycgOiBtYXRjaFsxXSB8fCBtYXRjaFswXTtcbiAgfSk7XG59XG5cbi8qKlxuICogQ29udmVydCBhbiBhcnJheSB0byBhbiBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtBcnJheTxhbnk+fSBhcnIgLSBUaGUgYXJyYXkgdG8gY29udmVydCB0byBhbiBvYmplY3QuXG4gKlxuICogQHJldHVybnMgQW4gb2JqZWN0IHdpdGggdGhlIHNhbWUga2V5cyBhbmQgdmFsdWVzIGFzIHRoZSBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlUb09iamVjdChhcnIpIHtcbiAgY29uc3Qgb2JqID0ge307XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhhcnIpO1xuICBsZXQgaTtcbiAgY29uc3QgbGVuID0ga2V5cy5sZW5ndGg7XG4gIGxldCBrZXk7XG4gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIGtleSA9IGtleXNbaV07XG4gICAgb2JqW2tleV0gPSBhcnJba2V5XTtcbiAgfVxuICByZXR1cm4gb2JqO1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgRm9ybURhdGEgb2JqZWN0IGFuZCByZXR1cm5zIGEgSmF2YVNjcmlwdCBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9ybURhdGEgVGhlIEZvcm1EYXRhIG9iamVjdCB0byBjb252ZXJ0IHRvIEpTT04uXG4gKlxuICogQHJldHVybnMge09iamVjdDxzdHJpbmcsIGFueT4gfCBudWxsfSBUaGUgY29udmVydGVkIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gZm9ybURhdGFUb0pTT04oZm9ybURhdGEpIHtcbiAgZnVuY3Rpb24gYnVpbGRQYXRoKHBhdGgsIHZhbHVlLCB0YXJnZXQsIGluZGV4KSB7XG4gICAgbGV0IG5hbWUgPSBwYXRoW2luZGV4KytdO1xuXG4gICAgaWYgKG5hbWUgPT09ICdfX3Byb3RvX18nKSByZXR1cm4gdHJ1ZTtcblxuICAgIGNvbnN0IGlzTnVtZXJpY0tleSA9IE51bWJlci5pc0Zpbml0ZSgrbmFtZSk7XG4gICAgY29uc3QgaXNMYXN0ID0gaW5kZXggPj0gcGF0aC5sZW5ndGg7XG4gICAgbmFtZSA9ICFuYW1lICYmIHV0aWxzLmlzQXJyYXkodGFyZ2V0KSA/IHRhcmdldC5sZW5ndGggOiBuYW1lO1xuXG4gICAgaWYgKGlzTGFzdCkge1xuICAgICAgaWYgKHV0aWxzLmhhc093blByb3AodGFyZ2V0LCBuYW1lKSkge1xuICAgICAgICB0YXJnZXRbbmFtZV0gPSB1dGlscy5pc0FycmF5KHRhcmdldFtuYW1lXSlcbiAgICAgICAgICA/IHRhcmdldFtuYW1lXS5jb25jYXQodmFsdWUpXG4gICAgICAgICAgOiBbdGFyZ2V0W25hbWVdLCB2YWx1ZV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXRbbmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICFpc051bWVyaWNLZXk7XG4gICAgfVxuXG4gICAgaWYgKCF1dGlscy5oYXNPd25Qcm9wKHRhcmdldCwgbmFtZSkgfHwgIXV0aWxzLmlzT2JqZWN0KHRhcmdldFtuYW1lXSkpIHtcbiAgICAgIHRhcmdldFtuYW1lXSA9IFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGJ1aWxkUGF0aChwYXRoLCB2YWx1ZSwgdGFyZ2V0W25hbWVdLCBpbmRleCk7XG5cbiAgICBpZiAocmVzdWx0ICYmIHV0aWxzLmlzQXJyYXkodGFyZ2V0W25hbWVdKSkge1xuICAgICAgdGFyZ2V0W25hbWVdID0gYXJyYXlUb09iamVjdCh0YXJnZXRbbmFtZV0pO1xuICAgIH1cblxuICAgIHJldHVybiAhaXNOdW1lcmljS2V5O1xuICB9XG5cbiAgaWYgKHV0aWxzLmlzRm9ybURhdGEoZm9ybURhdGEpICYmIHV0aWxzLmlzRnVuY3Rpb24oZm9ybURhdGEuZW50cmllcykpIHtcbiAgICBjb25zdCBvYmogPSB7fTtcblxuICAgIHV0aWxzLmZvckVhY2hFbnRyeShmb3JtRGF0YSwgKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgICBidWlsZFBhdGgocGFyc2VQcm9wUGF0aChuYW1lKSwgdmFsdWUsIG9iaiwgMCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZvcm1EYXRhVG9KU09OO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcbmltcG9ydCB0cmFuc2l0aW9uYWxEZWZhdWx0cyBmcm9tICcuL3RyYW5zaXRpb25hbC5qcyc7XG5pbXBvcnQgdG9Gb3JtRGF0YSBmcm9tICcuLi9oZWxwZXJzL3RvRm9ybURhdGEuanMnO1xuaW1wb3J0IHRvVVJMRW5jb2RlZEZvcm0gZnJvbSAnLi4vaGVscGVycy90b1VSTEVuY29kZWRGb3JtLmpzJztcbmltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5pbXBvcnQgZm9ybURhdGFUb0pTT04gZnJvbSAnLi4vaGVscGVycy9mb3JtRGF0YVRvSlNPTi5qcyc7XG5cbmNvbnN0IG93biA9IChvYmosIGtleSkgPT4gKG9iaiAhPSBudWxsICYmIHV0aWxzLmhhc093blByb3Aob2JqLCBrZXkpID8gb2JqW2tleV0gOiB1bmRlZmluZWQpO1xuXG4vKipcbiAqIEl0IHRha2VzIGEgc3RyaW5nLCB0cmllcyB0byBwYXJzZSBpdCwgYW5kIGlmIGl0IGZhaWxzLCBpdCByZXR1cm5zIHRoZSBzdHJpbmdpZmllZCB2ZXJzaW9uXG4gKiBvZiB0aGUgaW5wdXRcbiAqXG4gKiBAcGFyYW0ge2FueX0gcmF3VmFsdWUgLSBUaGUgdmFsdWUgdG8gYmUgc3RyaW5naWZpZWQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwYXJzZXIgLSBBIGZ1bmN0aW9uIHRoYXQgcGFyc2VzIGEgc3RyaW5nIGludG8gYSBKYXZhU2NyaXB0IG9iamVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVuY29kZXIgLSBBIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSB2YWx1ZSBhbmQgcmV0dXJucyBhIHN0cmluZy5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIHN0cmluZ2lmaWVkIHZlcnNpb24gb2YgdGhlIHJhd1ZhbHVlLlxuICovXG5mdW5jdGlvbiBzdHJpbmdpZnlTYWZlbHkocmF3VmFsdWUsIHBhcnNlciwgZW5jb2Rlcikge1xuICBpZiAodXRpbHMuaXNTdHJpbmcocmF3VmFsdWUpKSB7XG4gICAgdHJ5IHtcbiAgICAgIChwYXJzZXIgfHwgSlNPTi5wYXJzZSkocmF3VmFsdWUpO1xuICAgICAgcmV0dXJuIHV0aWxzLnRyaW0ocmF3VmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlLm5hbWUgIT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gKGVuY29kZXIgfHwgSlNPTi5zdHJpbmdpZnkpKHJhd1ZhbHVlKTtcbn1cblxuY29uc3QgZGVmYXVsdHMgPSB7XG4gIHRyYW5zaXRpb25hbDogdHJhbnNpdGlvbmFsRGVmYXVsdHMsXG5cbiAgYWRhcHRlcjogWyd4aHInLCAnaHR0cCcsICdmZXRjaCddLFxuXG4gIHRyYW5zZm9ybVJlcXVlc3Q6IFtcbiAgICBmdW5jdGlvbiB0cmFuc2Zvcm1SZXF1ZXN0KGRhdGEsIGhlYWRlcnMpIHtcbiAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gaGVhZGVycy5nZXRDb250ZW50VHlwZSgpIHx8ICcnO1xuICAgICAgY29uc3QgaGFzSlNPTkNvbnRlbnRUeXBlID0gY29udGVudFR5cGUuaW5kZXhPZignYXBwbGljYXRpb24vanNvbicpID4gLTE7XG4gICAgICBjb25zdCBpc09iamVjdFBheWxvYWQgPSB1dGlscy5pc09iamVjdChkYXRhKTtcblxuICAgICAgaWYgKGlzT2JqZWN0UGF5bG9hZCAmJiB1dGlscy5pc0hUTUxGb3JtKGRhdGEpKSB7XG4gICAgICAgIGRhdGEgPSBuZXcgRm9ybURhdGEoZGF0YSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlzRm9ybURhdGEgPSB1dGlscy5pc0Zvcm1EYXRhKGRhdGEpO1xuXG4gICAgICBpZiAoaXNGb3JtRGF0YSkge1xuICAgICAgICByZXR1cm4gaGFzSlNPTkNvbnRlbnRUeXBlID8gSlNPTi5zdHJpbmdpZnkoZm9ybURhdGFUb0pTT04oZGF0YSkpIDogZGF0YTtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICB1dGlscy5pc0FycmF5QnVmZmVyKGRhdGEpIHx8XG4gICAgICAgIHV0aWxzLmlzQnVmZmVyKGRhdGEpIHx8XG4gICAgICAgIHV0aWxzLmlzU3RyZWFtKGRhdGEpIHx8XG4gICAgICAgIHV0aWxzLmlzRmlsZShkYXRhKSB8fFxuICAgICAgICB1dGlscy5pc0Jsb2IoZGF0YSkgfHxcbiAgICAgICAgdXRpbHMuaXNSZWFkYWJsZVN0cmVhbShkYXRhKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgfVxuICAgICAgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXJWaWV3KGRhdGEpKSB7XG4gICAgICAgIHJldHVybiBkYXRhLmJ1ZmZlcjtcbiAgICAgIH1cbiAgICAgIGlmICh1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhkYXRhKSkge1xuICAgICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKCdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCcsIGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIGRhdGEudG9TdHJpbmcoKTtcbiAgICAgIH1cblxuICAgICAgbGV0IGlzRmlsZUxpc3Q7XG5cbiAgICAgIGlmIChpc09iamVjdFBheWxvYWQpIHtcbiAgICAgICAgY29uc3QgZm9ybVNlcmlhbGl6ZXIgPSBvd24odGhpcywgJ2Zvcm1TZXJpYWxpemVyJyk7XG4gICAgICAgIGlmIChjb250ZW50VHlwZS5pbmRleE9mKCdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKSA+IC0xKSB7XG4gICAgICAgICAgcmV0dXJuIHRvVVJMRW5jb2RlZEZvcm0oZGF0YSwgZm9ybVNlcmlhbGl6ZXIpLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgKGlzRmlsZUxpc3QgPSB1dGlscy5pc0ZpbGVMaXN0KGRhdGEpKSB8fFxuICAgICAgICAgIGNvbnRlbnRUeXBlLmluZGV4T2YoJ211bHRpcGFydC9mb3JtLWRhdGEnKSA+IC0xXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IGVudiA9IG93bih0aGlzLCAnZW52Jyk7XG4gICAgICAgICAgY29uc3QgX0Zvcm1EYXRhID0gZW52ICYmIGVudi5Gb3JtRGF0YTtcblxuICAgICAgICAgIHJldHVybiB0b0Zvcm1EYXRhKFxuICAgICAgICAgICAgaXNGaWxlTGlzdCA/IHsgJ2ZpbGVzW10nOiBkYXRhIH0gOiBkYXRhLFxuICAgICAgICAgICAgX0Zvcm1EYXRhICYmIG5ldyBfRm9ybURhdGEoKSxcbiAgICAgICAgICAgIGZvcm1TZXJpYWxpemVyXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaXNPYmplY3RQYXlsb2FkIHx8IGhhc0pTT05Db250ZW50VHlwZSkge1xuICAgICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKCdhcHBsaWNhdGlvbi9qc29uJywgZmFsc2UpO1xuICAgICAgICByZXR1cm4gc3RyaW5naWZ5U2FmZWx5KGRhdGEpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9LFxuICBdLFxuXG4gIHRyYW5zZm9ybVJlc3BvbnNlOiBbXG4gICAgZnVuY3Rpb24gdHJhbnNmb3JtUmVzcG9uc2UoZGF0YSkge1xuICAgICAgY29uc3QgdHJhbnNpdGlvbmFsID0gb3duKHRoaXMsICd0cmFuc2l0aW9uYWwnKSB8fCBkZWZhdWx0cy50cmFuc2l0aW9uYWw7XG4gICAgICBjb25zdCBmb3JjZWRKU09OUGFyc2luZyA9IHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwuZm9yY2VkSlNPTlBhcnNpbmc7XG4gICAgICBjb25zdCByZXNwb25zZVR5cGUgPSBvd24odGhpcywgJ3Jlc3BvbnNlVHlwZScpO1xuICAgICAgY29uc3QgSlNPTlJlcXVlc3RlZCA9IHJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nO1xuXG4gICAgICBpZiAodXRpbHMuaXNSZXNwb25zZShkYXRhKSB8fCB1dGlscy5pc1JlYWRhYmxlU3RyZWFtKGRhdGEpKSB7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIGRhdGEgJiZcbiAgICAgICAgdXRpbHMuaXNTdHJpbmcoZGF0YSkgJiZcbiAgICAgICAgKChmb3JjZWRKU09OUGFyc2luZyAmJiAhcmVzcG9uc2VUeXBlKSB8fCBKU09OUmVxdWVzdGVkKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IHNpbGVudEpTT05QYXJzaW5nID0gdHJhbnNpdGlvbmFsICYmIHRyYW5zaXRpb25hbC5zaWxlbnRKU09OUGFyc2luZztcbiAgICAgICAgY29uc3Qgc3RyaWN0SlNPTlBhcnNpbmcgPSAhc2lsZW50SlNPTlBhcnNpbmcgJiYgSlNPTlJlcXVlc3RlZDtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKGRhdGEsIG93bih0aGlzLCAncGFyc2VSZXZpdmVyJykpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgaWYgKHN0cmljdEpTT05QYXJzaW5nKSB7XG4gICAgICAgICAgICBpZiAoZS5uYW1lID09PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgICAgICAgIHRocm93IEF4aW9zRXJyb3IuZnJvbShlLCBBeGlvc0Vycm9yLkVSUl9CQURfUkVTUE9OU0UsIHRoaXMsIG51bGwsIG93bih0aGlzLCAncmVzcG9uc2UnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9LFxuICBdLFxuXG4gIC8qKlxuICAgKiBBIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIHRvIGFib3J0IGEgcmVxdWVzdC4gSWYgc2V0IHRvIDAgKGRlZmF1bHQpIGFcbiAgICogdGltZW91dCBpcyBub3QgY3JlYXRlZC5cbiAgICovXG4gIHRpbWVvdXQ6IDAsXG5cbiAgeHNyZkNvb2tpZU5hbWU6ICdYU1JGLVRPS0VOJyxcbiAgeHNyZkhlYWRlck5hbWU6ICdYLVhTUkYtVE9LRU4nLFxuXG4gIG1heENvbnRlbnRMZW5ndGg6IC0xLFxuICBtYXhCb2R5TGVuZ3RoOiAtMSxcblxuICBlbnY6IHtcbiAgICBGb3JtRGF0YTogcGxhdGZvcm0uY2xhc3Nlcy5Gb3JtRGF0YSxcbiAgICBCbG9iOiBwbGF0Zm9ybS5jbGFzc2VzLkJsb2IsXG4gIH0sXG5cbiAgdmFsaWRhdGVTdGF0dXM6IGZ1bmN0aW9uIHZhbGlkYXRlU3RhdHVzKHN0YXR1cykge1xuICAgIHJldHVybiBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMDtcbiAgfSxcblxuICBoZWFkZXJzOiB7XG4gICAgY29tbW9uOiB7XG4gICAgICBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyonLFxuICAgICAgJ0NvbnRlbnQtVHlwZSc6IHVuZGVmaW5lZCxcbiAgICB9LFxuICB9LFxufTtcblxudXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdwb3N0JywgJ3B1dCcsICdwYXRjaCcsICdxdWVyeSddLCAobWV0aG9kKSA9PiB7XG4gIGRlZmF1bHRzLmhlYWRlcnNbbWV0aG9kXSA9IHt9O1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRzO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IHRvRm9ybURhdGEgZnJvbSAnLi90b0Zvcm1EYXRhLmpzJztcbmltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvVVJMRW5jb2RlZEZvcm0oZGF0YSwgb3B0aW9ucykge1xuICByZXR1cm4gdG9Gb3JtRGF0YShkYXRhLCBuZXcgcGxhdGZvcm0uY2xhc3Nlcy5VUkxTZWFyY2hQYXJhbXMoKSwge1xuICAgIHZpc2l0b3I6IGZ1bmN0aW9uICh2YWx1ZSwga2V5LCBwYXRoLCBoZWxwZXJzKSB7XG4gICAgICBpZiAocGxhdGZvcm0uaXNOb2RlICYmIHV0aWxzLmlzQnVmZmVyKHZhbHVlKSkge1xuICAgICAgICB0aGlzLmFwcGVuZChrZXksIHZhbHVlLnRvU3RyaW5nKCdiYXNlNjQnKSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGhlbHBlcnMuZGVmYXVsdFZpc2l0b3IuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IGRlZmF1bHRzIGZyb20gJy4uL2RlZmF1bHRzL2luZGV4LmpzJztcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSAnLi4vY29yZS9BeGlvc0hlYWRlcnMuanMnO1xuXG4vKipcbiAqIFRyYW5zZm9ybSB0aGUgZGF0YSBmb3IgYSByZXF1ZXN0IG9yIGEgcmVzcG9uc2VcbiAqXG4gKiBAcGFyYW0ge0FycmF5fEZ1bmN0aW9ufSBmbnMgQSBzaW5nbGUgZnVuY3Rpb24gb3IgQXJyYXkgb2YgZnVuY3Rpb25zXG4gKiBAcGFyYW0gez9PYmplY3R9IHJlc3BvbnNlIFRoZSByZXNwb25zZSBvYmplY3RcbiAqXG4gKiBAcmV0dXJucyB7Kn0gVGhlIHJlc3VsdGluZyB0cmFuc2Zvcm1lZCBkYXRhXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRyYW5zZm9ybURhdGEoZm5zLCByZXNwb25zZSkge1xuICBjb25zdCBjb25maWcgPSB0aGlzIHx8IGRlZmF1bHRzO1xuICBjb25zdCBjb250ZXh0ID0gcmVzcG9uc2UgfHwgY29uZmlnO1xuICBjb25zdCBoZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20oY29udGV4dC5oZWFkZXJzKTtcbiAgbGV0IGRhdGEgPSBjb250ZXh0LmRhdGE7XG5cbiAgdXRpbHMuZm9yRWFjaChmbnMsIGZ1bmN0aW9uIHRyYW5zZm9ybShmbikge1xuICAgIGRhdGEgPSBmbi5jYWxsKGNvbmZpZywgZGF0YSwgaGVhZGVycy5ub3JtYWxpemUoKSwgcmVzcG9uc2UgPyByZXNwb25zZS5zdGF0dXMgOiB1bmRlZmluZWQpO1xuICB9KTtcblxuICBoZWFkZXJzLm5vcm1hbGl6ZSgpO1xuXG4gIHJldHVybiBkYXRhO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0NhbmNlbCh2YWx1ZSkge1xuICByZXR1cm4gISEodmFsdWUgJiYgdmFsdWUuX19DQU5DRUxfXyk7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4uL2NvcmUvQXhpb3NFcnJvci5qcyc7XG5cbmNsYXNzIENhbmNlbGVkRXJyb3IgZXh0ZW5kcyBBeGlvc0Vycm9yIHtcbiAgLyoqXG4gICAqIEEgYENhbmNlbGVkRXJyb3JgIGlzIGFuIG9iamVjdCB0aGF0IGlzIHRocm93biB3aGVuIGFuIG9wZXJhdGlvbiBpcyBjYW5jZWxlZC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmc9fSBtZXNzYWdlIFRoZSBtZXNzYWdlLlxuICAgKiBAcGFyYW0ge09iamVjdD19IGNvbmZpZyBUaGUgY29uZmlnLlxuICAgKiBAcGFyYW0ge09iamVjdD19IHJlcXVlc3QgVGhlIHJlcXVlc3QuXG4gICAqXG4gICAqIEByZXR1cm5zIHtDYW5jZWxlZEVycm9yfSBUaGUgY3JlYXRlZCBlcnJvci5cbiAgICovXG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UsIGNvbmZpZywgcmVxdWVzdCkge1xuICAgIHN1cGVyKG1lc3NhZ2UgPT0gbnVsbCA/ICdjYW5jZWxlZCcgOiBtZXNzYWdlLCBBeGlvc0Vycm9yLkVSUl9DQU5DRUxFRCwgY29uZmlnLCByZXF1ZXN0KTtcbiAgICB0aGlzLm5hbWUgPSAnQ2FuY2VsZWRFcnJvcic7XG4gICAgdGhpcy5fX0NBTkNFTF9fID0gdHJ1ZTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDYW5jZWxlZEVycm9yO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuL0F4aW9zRXJyb3IuanMnO1xuXG4vKipcbiAqIFJlc29sdmUgb3IgcmVqZWN0IGEgUHJvbWlzZSBiYXNlZCBvbiByZXNwb25zZSBzdGF0dXMuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVzb2x2ZSBBIGZ1bmN0aW9uIHRoYXQgcmVzb2x2ZXMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3QgQSBmdW5jdGlvbiB0aGF0IHJlamVjdHMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge29iamVjdH0gcmVzcG9uc2UgVGhlIHJlc3BvbnNlLlxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9IFRoZSByZXNwb25zZS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgcmVzcG9uc2UpIHtcbiAgY29uc3QgdmFsaWRhdGVTdGF0dXMgPSByZXNwb25zZS5jb25maWcudmFsaWRhdGVTdGF0dXM7XG4gIGlmICghcmVzcG9uc2Uuc3RhdHVzIHx8ICF2YWxpZGF0ZVN0YXR1cyB8fCB2YWxpZGF0ZVN0YXR1cyhyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gIH0gZWxzZSB7XG4gICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgJ1JlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgJyArIHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIHJlc3BvbnNlLnN0YXR1cyA+PSA0MDAgJiYgcmVzcG9uc2Uuc3RhdHVzIDwgNTAwID8gQXhpb3NFcnJvci5FUlJfQkFEX1JFUVVFU1QgOiBBeGlvc0Vycm9yLkVSUl9CQURfUkVTUE9OU0UsXG4gICAgICByZXNwb25zZS5jb25maWcsXG4gICAgICByZXNwb25zZS5yZXF1ZXN0LFxuICAgICAgcmVzcG9uc2VcbiAgICApKTtcbiAgfVxufVxuIiwiaW1wb3J0IHNwZWVkb21ldGVyIGZyb20gJy4vc3BlZWRvbWV0ZXIuanMnO1xuaW1wb3J0IHRocm90dGxlIGZyb20gJy4vdGhyb3R0bGUuanMnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcblxuZXhwb3J0IGNvbnN0IHByb2dyZXNzRXZlbnRSZWR1Y2VyID0gKGxpc3RlbmVyLCBpc0Rvd25sb2FkU3RyZWFtLCBmcmVxID0gMykgPT4ge1xuICBsZXQgYnl0ZXNOb3RpZmllZCA9IDA7XG4gIGNvbnN0IF9zcGVlZG9tZXRlciA9IHNwZWVkb21ldGVyKDUwLCAyNTApO1xuXG4gIHJldHVybiB0aHJvdHRsZSgoZSkgPT4ge1xuICAgIGlmICghZSB8fCB0eXBlb2YgZS5sb2FkZWQgIT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJhd0xvYWRlZCA9IGUubG9hZGVkO1xuICAgIGNvbnN0IHRvdGFsID0gZS5sZW5ndGhDb21wdXRhYmxlID8gZS50b3RhbCA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBsb2FkZWQgPSB0b3RhbCAhPSBudWxsID8gTWF0aC5taW4ocmF3TG9hZGVkLCB0b3RhbCkgOiByYXdMb2FkZWQ7XG4gICAgY29uc3QgcHJvZ3Jlc3NCeXRlcyA9IE1hdGgubWF4KDAsIGxvYWRlZCAtIGJ5dGVzTm90aWZpZWQpO1xuICAgIGNvbnN0IHJhdGUgPSBfc3BlZWRvbWV0ZXIocHJvZ3Jlc3NCeXRlcyk7XG5cbiAgICBieXRlc05vdGlmaWVkID0gTWF0aC5tYXgoYnl0ZXNOb3RpZmllZCwgbG9hZGVkKTtcblxuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBsb2FkZWQsXG4gICAgICB0b3RhbCxcbiAgICAgIHByb2dyZXNzOiB0b3RhbCA/IGxvYWRlZCAvIHRvdGFsIDogdW5kZWZpbmVkLFxuICAgICAgYnl0ZXM6IHByb2dyZXNzQnl0ZXMsXG4gICAgICByYXRlOiByYXRlID8gcmF0ZSA6IHVuZGVmaW5lZCxcbiAgICAgIGVzdGltYXRlZDogcmF0ZSAmJiB0b3RhbCA/ICh0b3RhbCAtIGxvYWRlZCkgLyByYXRlIDogdW5kZWZpbmVkLFxuICAgICAgZXZlbnQ6IGUsXG4gICAgICBsZW5ndGhDb21wdXRhYmxlOiB0b3RhbCAhPSBudWxsLFxuICAgICAgW2lzRG93bmxvYWRTdHJlYW0gPyAnZG93bmxvYWQnIDogJ3VwbG9hZCddOiB0cnVlLFxuICAgIH07XG5cbiAgICBsaXN0ZW5lcihkYXRhKTtcbiAgfSwgZnJlcSk7XG59O1xuXG5leHBvcnQgY29uc3QgcHJvZ3Jlc3NFdmVudERlY29yYXRvciA9ICh0b3RhbCwgdGhyb3R0bGVkKSA9PiB7XG4gIGNvbnN0IGxlbmd0aENvbXB1dGFibGUgPSB0b3RhbCAhPSBudWxsO1xuXG4gIHJldHVybiBbXG4gICAgKGxvYWRlZCkgPT5cbiAgICAgIHRocm90dGxlZFswXSh7XG4gICAgICAgIGxlbmd0aENvbXB1dGFibGUsXG4gICAgICAgIHRvdGFsLFxuICAgICAgICBsb2FkZWQsXG4gICAgICB9KSxcbiAgICB0aHJvdHRsZWRbMV0sXG4gIF07XG59O1xuXG5leHBvcnQgY29uc3QgYXN5bmNEZWNvcmF0b3IgPVxuICAoZm4pID0+XG4gICguLi5hcmdzKSA9PlxuICAgIHV0aWxzLmFzYXAoKCkgPT4gZm4oLi4uYXJncykpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENhbGN1bGF0ZSBkYXRhIG1heFJhdGVcbiAqIEBwYXJhbSB7TnVtYmVyfSBbc2FtcGxlc0NvdW50PSAxMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSBbbWluPSAxMDAwXVxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBzcGVlZG9tZXRlcihzYW1wbGVzQ291bnQsIG1pbikge1xuICBzYW1wbGVzQ291bnQgPSBzYW1wbGVzQ291bnQgfHwgMTA7XG4gIGNvbnN0IGJ5dGVzID0gbmV3IEFycmF5KHNhbXBsZXNDb3VudCk7XG4gIGNvbnN0IHRpbWVzdGFtcHMgPSBuZXcgQXJyYXkoc2FtcGxlc0NvdW50KTtcbiAgbGV0IGhlYWQgPSAwO1xuICBsZXQgdGFpbCA9IDA7XG4gIGxldCBmaXJzdFNhbXBsZVRTO1xuXG4gIG1pbiA9IG1pbiAhPT0gdW5kZWZpbmVkID8gbWluIDogMTAwMDtcblxuICByZXR1cm4gZnVuY3Rpb24gcHVzaChjaHVua0xlbmd0aCkge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICBjb25zdCBzdGFydGVkQXQgPSB0aW1lc3RhbXBzW3RhaWxdO1xuXG4gICAgaWYgKCFmaXJzdFNhbXBsZVRTKSB7XG4gICAgICBmaXJzdFNhbXBsZVRTID0gbm93O1xuICAgIH1cblxuICAgIGJ5dGVzW2hlYWRdID0gY2h1bmtMZW5ndGg7XG4gICAgdGltZXN0YW1wc1toZWFkXSA9IG5vdztcblxuICAgIGxldCBpID0gdGFpbDtcbiAgICBsZXQgYnl0ZXNDb3VudCA9IDA7XG5cbiAgICB3aGlsZSAoaSAhPT0gaGVhZCkge1xuICAgICAgYnl0ZXNDb3VudCArPSBieXRlc1tpKytdO1xuICAgICAgaSA9IGkgJSBzYW1wbGVzQ291bnQ7XG4gICAgfVxuXG4gICAgaGVhZCA9IChoZWFkICsgMSkgJSBzYW1wbGVzQ291bnQ7XG5cbiAgICBpZiAoaGVhZCA9PT0gdGFpbCkge1xuICAgICAgdGFpbCA9ICh0YWlsICsgMSkgJSBzYW1wbGVzQ291bnQ7XG4gICAgfVxuXG4gICAgaWYgKG5vdyAtIGZpcnN0U2FtcGxlVFMgPCBtaW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXNzZWQgPSBzdGFydGVkQXQgJiYgbm93IC0gc3RhcnRlZEF0O1xuXG4gICAgcmV0dXJuIHBhc3NlZCA/IE1hdGgucm91bmQoKGJ5dGVzQ291bnQgKiAxMDAwKSAvIHBhc3NlZCkgOiB1bmRlZmluZWQ7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNwZWVkb21ldGVyO1xuIiwiLyoqXG4gKiBUaHJvdHRsZSBkZWNvcmF0b3JcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcGFyYW0ge051bWJlcn0gZnJlcVxuICogQHJldHVybiB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIHRocm90dGxlKGZuLCBmcmVxKSB7XG4gIGxldCB0aW1lc3RhbXAgPSAwO1xuICBsZXQgdGhyZXNob2xkID0gMTAwMCAvIGZyZXE7XG4gIGxldCBsYXN0QXJncztcbiAgbGV0IHRpbWVyO1xuXG4gIGNvbnN0IGludm9rZSA9IChhcmdzLCBub3cgPSBEYXRlLm5vdygpKSA9PiB7XG4gICAgdGltZXN0YW1wID0gbm93O1xuICAgIGxhc3RBcmdzID0gbnVsbDtcbiAgICBpZiAodGltZXIpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICB0aW1lciA9IG51bGw7XG4gICAgfVxuICAgIGZuKC4uLmFyZ3MpO1xuICB9O1xuXG4gIGNvbnN0IHRocm90dGxlZCA9ICguLi5hcmdzKSA9PiB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBwYXNzZWQgPSBub3cgLSB0aW1lc3RhbXA7XG4gICAgaWYgKHBhc3NlZCA+PSB0aHJlc2hvbGQpIHtcbiAgICAgIGludm9rZShhcmdzLCBub3cpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsYXN0QXJncyA9IGFyZ3M7XG4gICAgICBpZiAoIXRpbWVyKSB7XG4gICAgICAgIHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGltZXIgPSBudWxsO1xuICAgICAgICAgIGludm9rZShsYXN0QXJncyk7XG4gICAgICAgIH0sIHRocmVzaG9sZCAtIHBhc3NlZCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGZsdXNoID0gKCkgPT4gbGFzdEFyZ3MgJiYgaW52b2tlKGxhc3RBcmdzKTtcblxuICByZXR1cm4gW3Rocm90dGxlZCwgZmx1c2hdO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0aHJvdHRsZTtcbiIsImltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlckVudlxuICA/ICgob3JpZ2luLCBpc01TSUUpID0+ICh1cmwpID0+IHtcbiAgICAgIHVybCA9IG5ldyBVUkwodXJsLCBwbGF0Zm9ybS5vcmlnaW4pO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICBvcmlnaW4ucHJvdG9jb2wgPT09IHVybC5wcm90b2NvbCAmJlxuICAgICAgICBvcmlnaW4uaG9zdCA9PT0gdXJsLmhvc3QgJiZcbiAgICAgICAgKGlzTVNJRSB8fCBvcmlnaW4ucG9ydCA9PT0gdXJsLnBvcnQpXG4gICAgICApO1xuICAgIH0pKFxuICAgICAgbmV3IFVSTChwbGF0Zm9ybS5vcmlnaW4pLFxuICAgICAgcGxhdGZvcm0ubmF2aWdhdG9yICYmIC8obXNpZXx0cmlkZW50KS9pLnRlc3QocGxhdGZvcm0ubmF2aWdhdG9yLnVzZXJBZ2VudClcbiAgICApXG4gIDogKCkgPT4gdHJ1ZTtcbiIsImltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuXG5leHBvcnQgZGVmYXVsdCBwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnZcbiAgPyAvLyBTdGFuZGFyZCBicm93c2VyIGVudnMgc3VwcG9ydCBkb2N1bWVudC5jb29raWVcbiAgICB7XG4gICAgICB3cml0ZShuYW1lLCB2YWx1ZSwgZXhwaXJlcywgcGF0aCwgZG9tYWluLCBzZWN1cmUsIHNhbWVTaXRlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgY29va2llID0gW2Ake25hbWV9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKX1gXTtcblxuICAgICAgICBpZiAodXRpbHMuaXNOdW1iZXIoZXhwaXJlcykpIHtcbiAgICAgICAgICBjb29raWUucHVzaChgZXhwaXJlcz0ke25ldyBEYXRlKGV4cGlyZXMpLnRvVVRDU3RyaW5nKCl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHV0aWxzLmlzU3RyaW5nKHBhdGgpKSB7XG4gICAgICAgICAgY29va2llLnB1c2goYHBhdGg9JHtwYXRofWApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1dGlscy5pc1N0cmluZyhkb21haW4pKSB7XG4gICAgICAgICAgY29va2llLnB1c2goYGRvbWFpbj0ke2RvbWFpbn1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VjdXJlID09PSB0cnVlKSB7XG4gICAgICAgICAgY29va2llLnB1c2goJ3NlY3VyZScpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1dGlscy5pc1N0cmluZyhzYW1lU2l0ZSkpIHtcbiAgICAgICAgICBjb29raWUucHVzaChgU2FtZVNpdGU9JHtzYW1lU2l0ZX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRvY3VtZW50LmNvb2tpZSA9IGNvb2tpZS5qb2luKCc7ICcpO1xuICAgICAgfSxcblxuICAgICAgcmVhZChuYW1lKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSByZXR1cm4gbnVsbDtcbiAgICAgICAgLy8gTWF0Y2ggbmFtZT12YWx1ZSBieSBzcGxpdHRpbmcgb24gdGhlIHNlbWljb2xvbiBzZXBhcmF0b3IgaW5zdGVhZCBvZiBidWlsZGluZyBhXG4gICAgICAgIC8vIFJlZ0V4cCBmcm9tIGBuYW1lYCDigJQgaW50ZXJwb2xhdGluZyBhbiB1bmVzY2FwZWQgc3RyaW5nIGludG8gYSBSZWdFeHAgd291bGQgbGV0XG4gICAgICAgIC8vIG1ldGFjaGFyYWN0ZXJzIChlLmcuIGAuKz9gIGluIGFuIGF0dGFja2VyLWluZmx1ZW5jZWQgY29va2llIG5hbWUpIGNhdXNlIFJlRG9TIG9yXG4gICAgICAgIC8vIG1hdGNoIHRoZSB3cm9uZyBjb29raWUuIEJyb3dzZXJzIG1heSBzZXJpYWxpemUgY29va2llIHBhaXJzIGFzIGVpdGhlciBcIjtcIiBvclxuICAgICAgICAvLyBcIjsgXCIsIHNvIGlnbm9yZSBvcHRpb25hbCB3aGl0ZXNwYWNlIGJlZm9yZSBlYWNoIGNvb2tpZSBuYW1lLlxuICAgICAgICBjb25zdCBjb29raWVzID0gZG9jdW1lbnQuY29va2llLnNwbGl0KCc7Jyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29va2llcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGNvb2tpZSA9IGNvb2tpZXNbaV0ucmVwbGFjZSgvXlxccysvLCAnJyk7XG4gICAgICAgICAgY29uc3QgZXEgPSBjb29raWUuaW5kZXhPZignPScpO1xuICAgICAgICAgIGlmIChlcSAhPT0gLTEgJiYgY29va2llLnNsaWNlKDAsIGVxKSA9PT0gbmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChjb29raWUuc2xpY2UoZXEgKyAxKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSxcblxuICAgICAgcmVtb3ZlKG5hbWUpIHtcbiAgICAgICAgdGhpcy53cml0ZShuYW1lLCAnJywgRGF0ZS5ub3coKSAtIDg2NDAwMDAwLCAnLycpO1xuICAgICAgfSxcbiAgICB9XG4gIDogLy8gTm9uLXN0YW5kYXJkIGJyb3dzZXIgZW52ICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICAgIHtcbiAgICAgIHdyaXRlKCkge30sXG4gICAgICByZWFkKCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0sXG4gICAgICByZW1vdmUoKSB7fSxcbiAgICB9O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgaXNBYnNvbHV0ZVVSTCBmcm9tICcuLi9oZWxwZXJzL2lzQWJzb2x1dGVVUkwuanMnO1xuaW1wb3J0IGNvbWJpbmVVUkxzIGZyb20gJy4uL2hlbHBlcnMvY29tYmluZVVSTHMuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgYmFzZVVSTCB3aXRoIHRoZSByZXF1ZXN0ZWRVUkwsXG4gKiBvbmx5IHdoZW4gdGhlIHJlcXVlc3RlZFVSTCBpcyBub3QgYWxyZWFkeSBhbiBhYnNvbHV0ZSBVUkwuXG4gKiBJZiB0aGUgcmVxdWVzdFVSTCBpcyBhYnNvbHV0ZSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSByZXF1ZXN0ZWRVUkwgdW50b3VjaGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlcXVlc3RlZFVSTCBBYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gY29tYmluZVxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21iaW5lZCBmdWxsIHBhdGhcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRGdWxsUGF0aChiYXNlVVJMLCByZXF1ZXN0ZWRVUkwsIGFsbG93QWJzb2x1dGVVcmxzKSB7XG4gIGxldCBpc1JlbGF0aXZlVXJsID0gIWlzQWJzb2x1dGVVUkwocmVxdWVzdGVkVVJMKTtcbiAgaWYgKGJhc2VVUkwgJiYgKGlzUmVsYXRpdmVVcmwgfHwgYWxsb3dBYnNvbHV0ZVVybHMgPT09IGZhbHNlKSkge1xuICAgIHJldHVybiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZXF1ZXN0ZWRVUkwpO1xuICB9XG4gIHJldHVybiByZXF1ZXN0ZWRVUkw7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgVVJMIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIFVSTCBpcyBhYnNvbHV0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzQWJzb2x1dGVVUkwodXJsKSB7XG4gIC8vIEEgVVJMIGlzIGNvbnNpZGVyZWQgYWJzb2x1dGUgaWYgaXQgYmVnaW5zIHdpdGggXCI8c2NoZW1lPjovL1wiIG9yIFwiLy9cIiAocHJvdG9jb2wtcmVsYXRpdmUgVVJMKS5cbiAgLy8gUkZDIDM5ODYgZGVmaW5lcyBzY2hlbWUgbmFtZSBhcyBhIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgYmVnaW5uaW5nIHdpdGggYSBsZXR0ZXIgYW5kIGZvbGxvd2VkXG4gIC8vIGJ5IGFueSBjb21iaW5hdGlvbiBvZiBsZXR0ZXJzLCBkaWdpdHMsIHBsdXMsIHBlcmlvZCwgb3IgaHlwaGVuLlxuICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gL14oW2Etel1bYS16XFxkK1xcLS5dKjopP1xcL1xcLy9pLnRlc3QodXJsKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFVSTCBieSBjb21iaW5pbmcgdGhlIHNwZWNpZmllZCBVUkxzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwgVGhlIGJhc2UgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpdmVVUkwgVGhlIHJlbGF0aXZlIFVSTFxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21iaW5lZCBVUkxcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVsYXRpdmVVUkwpIHtcbiAgcmV0dXJuIHJlbGF0aXZlVVJMXG4gICAgPyBiYXNlVVJMLnJlcGxhY2UoL1xcLz9cXC8kLywgJycpICsgJy8nICsgcmVsYXRpdmVVUkwucmVwbGFjZSgvXlxcLysvLCAnJylcbiAgICA6IGJhc2VVUkw7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gJy4vQXhpb3NIZWFkZXJzLmpzJztcblxuY29uc3QgaGVhZGVyc1RvT2JqZWN0ID0gKHRoaW5nKSA9PiAodGhpbmcgaW5zdGFuY2VvZiBBeGlvc0hlYWRlcnMgPyB7IC4uLnRoaW5nIH0gOiB0aGluZyk7XG5cbi8qKlxuICogQ29uZmlnLXNwZWNpZmljIG1lcmdlLWZ1bmN0aW9uIHdoaWNoIGNyZWF0ZXMgYSBuZXcgY29uZmlnLW9iamVjdFxuICogYnkgbWVyZ2luZyB0d28gY29uZmlndXJhdGlvbiBvYmplY3RzIHRvZ2V0aGVyLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcxXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMlxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IE5ldyBvYmplY3QgcmVzdWx0aW5nIGZyb20gbWVyZ2luZyBjb25maWcyIHRvIGNvbmZpZzFcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWVyZ2VDb25maWcoY29uZmlnMSwgY29uZmlnMikge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgY29uZmlnMiA9IGNvbmZpZzIgfHwge307XG5cbiAgLy8gVXNlIGEgbnVsbC1wcm90b3R5cGUgb2JqZWN0IHNvIHRoYXQgZG93bnN0cmVhbSByZWFkcyBzdWNoIGFzIGBjb25maWcuYXV0aGBcbiAgLy8gb3IgYGNvbmZpZy5iYXNlVVJMYCBjYW5ub3QgaW5oZXJpdCBwb2xsdXRlZCB2YWx1ZXMgZnJvbSBPYmplY3QucHJvdG90eXBlLlxuICAvLyBgaGFzT3duUHJvcGVydHlgIGlzIHJlc3RvcmVkIGFzIGEgbm9uLWVudW1lcmFibGUgb3duIHNsb3QgdG8gcHJlc2VydmVcbiAgLy8gZXJnb25vbWljcyBmb3IgdXNlciBjb2RlIHRoYXQgcmVsaWVzIG9uIGl0LlxuICBjb25zdCBjb25maWcgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29uZmlnLCAnaGFzT3duUHJvcGVydHknLCB7XG4gICAgLy8gTnVsbC1wcm90byBkZXNjcmlwdG9yIHNvIGEgcG9sbHV0ZWQgT2JqZWN0LnByb3RvdHlwZS5nZXQgY2Fubm90IHR1cm5cbiAgICAvLyB0aGlzIGRhdGEgZGVzY3JpcHRvciBpbnRvIGFuIGFjY2Vzc29yIGRlc2NyaXB0b3Igb24gdGhlIHdheSBpbi5cbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgdmFsdWU6IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgd3JpdGFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICB9KTtcblxuICBmdW5jdGlvbiBnZXRNZXJnZWRWYWx1ZSh0YXJnZXQsIHNvdXJjZSwgcHJvcCwgY2FzZWxlc3MpIHtcbiAgICBpZiAodXRpbHMuaXNQbGFpbk9iamVjdCh0YXJnZXQpICYmIHV0aWxzLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzLm1lcmdlLmNhbGwoeyBjYXNlbGVzcyB9LCB0YXJnZXQsIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscy5pc1BsYWluT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB1dGlscy5tZXJnZSh7fSwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzQXJyYXkoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHNvdXJjZS5zbGljZSgpO1xuICAgIH1cbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgZnVuY3Rpb24gbWVyZ2VEZWVwUHJvcGVydGllcyhhLCBiLCBwcm9wLCBjYXNlbGVzcykge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZShhLCBiLCBwcm9wLCBjYXNlbGVzcyk7XG4gICAgfSBlbHNlIGlmICghdXRpbHMuaXNVbmRlZmluZWQoYSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGEsIHByb3AsIGNhc2VsZXNzKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gdmFsdWVGcm9tQ29uZmlnMihhLCBiKSB7XG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChiKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYik7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIGRlZmF1bHRUb0NvbmZpZzIoYSwgYikge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGIpO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGEpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBhKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gbWVyZ2VEaXJlY3RLZXlzKGEsIGIsIHByb3ApIHtcbiAgICBpZiAodXRpbHMuaGFzT3duUHJvcChjb25maWcyLCBwcm9wKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKGEsIGIpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaGFzT3duUHJvcChjb25maWcxLCBwcm9wKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbWVyZ2VNYXAgPSB7XG4gICAgdXJsOiB2YWx1ZUZyb21Db25maWcyLFxuICAgIG1ldGhvZDogdmFsdWVGcm9tQ29uZmlnMixcbiAgICBkYXRhOiB2YWx1ZUZyb21Db25maWcyLFxuICAgIGJhc2VVUkw6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdHJhbnNmb3JtUmVxdWVzdDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0cmFuc2Zvcm1SZXNwb25zZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBwYXJhbXNTZXJpYWxpemVyOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRpbWVvdXQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdGltZW91dE1lc3NhZ2U6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgd2l0aENyZWRlbnRpYWxzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHdpdGhYU1JGVG9rZW46IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgYWRhcHRlcjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICByZXNwb25zZVR5cGU6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgeHNyZkNvb2tpZU5hbWU6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgeHNyZkhlYWRlck5hbWU6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgb25VcGxvYWRQcm9ncmVzczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBvbkRvd25sb2FkUHJvZ3Jlc3M6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgZGVjb21wcmVzczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBtYXhDb250ZW50TGVuZ3RoOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG1heEJvZHlMZW5ndGg6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgYmVmb3JlUmVkaXJlY3Q6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdHJhbnNwb3J0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGh0dHBBZ2VudDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBodHRwc0FnZW50OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGNhbmNlbFRva2VuOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHNvY2tldFBhdGg6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgYWxsb3dlZFNvY2tldFBhdGhzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHJlc3BvbnNlRW5jb2Rpbmc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdmFsaWRhdGVTdGF0dXM6IG1lcmdlRGlyZWN0S2V5cyxcbiAgICBoZWFkZXJzOiAoYSwgYiwgcHJvcCkgPT5cbiAgICAgIG1lcmdlRGVlcFByb3BlcnRpZXMoaGVhZGVyc1RvT2JqZWN0KGEpLCBoZWFkZXJzVG9PYmplY3QoYiksIHByb3AsIHRydWUpLFxuICB9O1xuXG4gIHV0aWxzLmZvckVhY2goT2JqZWN0LmtleXMoeyAuLi5jb25maWcxLCAuLi5jb25maWcyIH0pLCBmdW5jdGlvbiBjb21wdXRlQ29uZmlnVmFsdWUocHJvcCkge1xuICAgIGlmIChwcm9wID09PSAnX19wcm90b19fJyB8fCBwcm9wID09PSAnY29uc3RydWN0b3InIHx8IHByb3AgPT09ICdwcm90b3R5cGUnKSByZXR1cm47XG4gICAgY29uc3QgbWVyZ2UgPSB1dGlscy5oYXNPd25Qcm9wKG1lcmdlTWFwLCBwcm9wKSA/IG1lcmdlTWFwW3Byb3BdIDogbWVyZ2VEZWVwUHJvcGVydGllcztcbiAgICBjb25zdCBhID0gdXRpbHMuaGFzT3duUHJvcChjb25maWcxLCBwcm9wKSA/IGNvbmZpZzFbcHJvcF0gOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgYiA9IHV0aWxzLmhhc093blByb3AoY29uZmlnMiwgcHJvcCkgPyBjb25maWcyW3Byb3BdIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGNvbmZpZ1ZhbHVlID0gbWVyZ2UoYSwgYiwgcHJvcCk7XG4gICAgKHV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZ1ZhbHVlKSAmJiBtZXJnZSAhPT0gbWVyZ2VEaXJlY3RLZXlzKSB8fCAoY29uZmlnW3Byb3BdID0gY29uZmlnVmFsdWUpO1xuICB9KTtcblxuICByZXR1cm4gY29uZmlnO1xufVxuIiwiaW1wb3J0IHBsYXRmb3JtIGZyb20gJy4uL3BsYXRmb3JtL2luZGV4LmpzJztcbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgaXNVUkxTYW1lT3JpZ2luIGZyb20gJy4vaXNVUkxTYW1lT3JpZ2luLmpzJztcbmltcG9ydCBjb29raWVzIGZyb20gJy4vY29va2llcy5qcyc7XG5pbXBvcnQgYnVpbGRGdWxsUGF0aCBmcm9tICcuLi9jb3JlL2J1aWxkRnVsbFBhdGguanMnO1xuaW1wb3J0IG1lcmdlQ29uZmlnIGZyb20gJy4uL2NvcmUvbWVyZ2VDb25maWcuanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuLi9jb3JlL0F4aW9zSGVhZGVycy5qcyc7XG5pbXBvcnQgYnVpbGRVUkwgZnJvbSAnLi9idWlsZFVSTC5qcyc7XG5cbmNvbnN0IEZPUk1fREFUQV9DT05URU5UX0hFQURFUlMgPSBbJ2NvbnRlbnQtdHlwZScsICdjb250ZW50LWxlbmd0aCddO1xuXG5mdW5jdGlvbiBzZXRGb3JtRGF0YUhlYWRlcnMoaGVhZGVycywgZm9ybUhlYWRlcnMsIHBvbGljeSkge1xuICBpZiAocG9saWN5ICE9PSAnY29udGVudC1vbmx5Jykge1xuICAgIGhlYWRlcnMuc2V0KGZvcm1IZWFkZXJzKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBPYmplY3QuZW50cmllcyhmb3JtSGVhZGVycykuZm9yRWFjaCgoW2tleSwgdmFsXSkgPT4ge1xuICAgIGlmIChGT1JNX0RBVEFfQ09OVEVOVF9IRUFERVJTLmluY2x1ZGVzKGtleS50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgaGVhZGVycy5zZXQoa2V5LCB2YWwpO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogRW5jb2RlIGEgVVRGLTggc3RyaW5nIHRvIGEgTGF0aW4tMSBieXRlIHN0cmluZyBmb3IgdXNlIHdpdGggYnRvYSgpLlxuICogVGhpcyBpcyBhIG1vZGVybiByZXBsYWNlbWVudCBmb3IgdGhlIGRlcHJlY2F0ZWQgdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KHN0cikpIHBhdHRlcm4uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0ciBUaGUgc3RyaW5nIHRvIGVuY29kZVxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFVURi04IGJ5dGVzIGFzIGEgTGF0aW4tMSBzdHJpbmdcbiAqL1xuY29uc3QgZW5jb2RlVVRGOCA9IChzdHIpID0+XG4gIGVuY29kZVVSSUNvbXBvbmVudChzdHIpLnJlcGxhY2UoLyUoWzAtOUEtRl17Mn0pL2dpLCAoXywgaGV4KSA9PlxuICAgIFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoaGV4LCAxNikpXG4gICk7XG5cbmZ1bmN0aW9uIHJlc29sdmVDb25maWcoY29uZmlnKSB7XG4gIGNvbnN0IG5ld0NvbmZpZyA9IG1lcmdlQ29uZmlnKHt9LCBjb25maWcpO1xuXG4gIC8vIFJlYWQgb25seSBvd24gcHJvcGVydGllcyB0byBwcmV2ZW50IHByb3RvdHlwZSBwb2xsdXRpb24gZ2FkZ2V0c1xuICAvLyAoZS5nLiBPYmplY3QucHJvdG90eXBlLmJhc2VVUkwgPSAnaHR0cHM6Ly9ldmlsLmNvbScpLlxuICBjb25zdCBvd24gPSAoa2V5KSA9PiAodXRpbHMuaGFzT3duUHJvcChuZXdDb25maWcsIGtleSkgPyBuZXdDb25maWdba2V5XSA6IHVuZGVmaW5lZCk7XG5cbiAgY29uc3QgZGF0YSA9IG93bignZGF0YScpO1xuICBsZXQgd2l0aFhTUkZUb2tlbiA9IG93bignd2l0aFhTUkZUb2tlbicpO1xuICBjb25zdCB4c3JmSGVhZGVyTmFtZSA9IG93bigneHNyZkhlYWRlck5hbWUnKTtcbiAgY29uc3QgeHNyZkNvb2tpZU5hbWUgPSBvd24oJ3hzcmZDb29raWVOYW1lJyk7XG4gIGxldCBoZWFkZXJzID0gb3duKCdoZWFkZXJzJyk7XG4gIGNvbnN0IGF1dGggPSBvd24oJ2F1dGgnKTtcbiAgY29uc3QgYmFzZVVSTCA9IG93bignYmFzZVVSTCcpO1xuICBjb25zdCBhbGxvd0Fic29sdXRlVXJscyA9IG93bignYWxsb3dBYnNvbHV0ZVVybHMnKTtcbiAgY29uc3QgdXJsID0gb3duKCd1cmwnKTtcblxuICBuZXdDb25maWcuaGVhZGVycyA9IGhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShoZWFkZXJzKTtcblxuICBuZXdDb25maWcudXJsID0gYnVpbGRVUkwoXG4gICAgYnVpbGRGdWxsUGF0aChiYXNlVVJMLCB1cmwsIGFsbG93QWJzb2x1dGVVcmxzKSxcbiAgICBvd24oJ3BhcmFtcycpLFxuICAgIG93bigncGFyYW1zU2VyaWFsaXplcicpXG4gICk7XG5cbiAgLy8gSFRUUCBiYXNpYyBhdXRoZW50aWNhdGlvblxuICBpZiAoYXV0aCkge1xuICAgIGhlYWRlcnMuc2V0KFxuICAgICAgJ0F1dGhvcml6YXRpb24nLFxuICAgICAgJ0Jhc2ljICcgK1xuICAgICAgICBidG9hKChhdXRoLnVzZXJuYW1lIHx8ICcnKSArICc6JyArIChhdXRoLnBhc3N3b3JkID8gZW5jb2RlVVRGOChhdXRoLnBhc3N3b3JkKSA6ICcnKSlcbiAgICApO1xuICB9XG5cbiAgaWYgKHV0aWxzLmlzRm9ybURhdGEoZGF0YSkpIHtcbiAgICBpZiAoXG4gICAgICBwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYgfHxcbiAgICAgIHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudiB8fFxuICAgICAgdXRpbHMuaXNSZWFjdE5hdGl2ZShkYXRhKVxuICAgICkge1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZSh1bmRlZmluZWQpOyAvLyBicm93c2VyL3dlYiB3b3JrZXIvUk4gaGFuZGxlcyBpdFxuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNGdW5jdGlvbihkYXRhLmdldEhlYWRlcnMpKSB7XG4gICAgICAvLyBOb2RlLmpzIEZvcm1EYXRhIChsaWtlIGZvcm0tZGF0YSBwYWNrYWdlKVxuICAgICAgc2V0Rm9ybURhdGFIZWFkZXJzKGhlYWRlcnMsIGRhdGEuZ2V0SGVhZGVycygpLCBvd24oJ2Zvcm1EYXRhSGVhZGVyUG9saWN5JykpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFkZCB4c3JmIGhlYWRlclxuICAvLyBUaGlzIGlzIG9ubHkgZG9uZSBpZiBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudC5cbiAgLy8gU3BlY2lmaWNhbGx5IG5vdCBpZiB3ZSdyZSBpbiBhIHdlYiB3b3JrZXIsIG9yIHJlYWN0LW5hdGl2ZS5cblxuICBpZiAocGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52KSB7XG4gICAgaWYgKHV0aWxzLmlzRnVuY3Rpb24od2l0aFhTUkZUb2tlbikpIHtcbiAgICAgIHdpdGhYU1JGVG9rZW4gPSB3aXRoWFNSRlRva2VuKG5ld0NvbmZpZyk7XG4gICAgfVxuXG4gICAgLy8gU3RyaWN0IGJvb2xlYW4gY2hlY2sg4oCUIHByZXZlbnRzIHByb3RvLXBvbGx1dGlvbiBnYWRnZXRzIChlLmcuIE9iamVjdC5wcm90b3R5cGUud2l0aFhTUkZUb2tlbiA9IDEpXG4gICAgLy8gYW5kIG1pc2NvbmZpZ3VyYXRpb25zIChlLmcuIFwiZmFsc2VcIikgZnJvbSBzaG9ydC1jaXJjdWl0aW5nIHRoZSBzYW1lLW9yaWdpbiBjaGVjayBhbmQgbGVha2luZ1xuICAgIC8vIHRoZSBYU1JGIHRva2VuIGNyb3NzLW9yaWdpbi5cbiAgICBjb25zdCBzaG91bGRTZW5kWFNSRiA9XG4gICAgICB3aXRoWFNSRlRva2VuID09PSB0cnVlIHx8ICh3aXRoWFNSRlRva2VuID09IG51bGwgJiYgaXNVUkxTYW1lT3JpZ2luKG5ld0NvbmZpZy51cmwpKTtcblxuICAgIGlmIChzaG91bGRTZW5kWFNSRikge1xuICAgICAgY29uc3QgeHNyZlZhbHVlID0geHNyZkhlYWRlck5hbWUgJiYgeHNyZkNvb2tpZU5hbWUgJiYgY29va2llcy5yZWFkKHhzcmZDb29raWVOYW1lKTtcblxuICAgICAgaWYgKHhzcmZWYWx1ZSkge1xuICAgICAgICBoZWFkZXJzLnNldCh4c3JmSGVhZGVyTmFtZSwgeHNyZlZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3Q29uZmlnO1xufVxuXG5leHBvcnQgZGVmYXVsdCByZXNvbHZlQ29uZmlnO1xuIiwiaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBzZXR0bGUgZnJvbSAnLi4vY29yZS9zZXR0bGUuanMnO1xuaW1wb3J0IHRyYW5zaXRpb25hbERlZmF1bHRzIGZyb20gJy4uL2RlZmF1bHRzL3RyYW5zaXRpb25hbC5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IENhbmNlbGVkRXJyb3IgZnJvbSAnLi4vY2FuY2VsL0NhbmNlbGVkRXJyb3IuanMnO1xuaW1wb3J0IHBhcnNlUHJvdG9jb2wgZnJvbSAnLi4vaGVscGVycy9wYXJzZVByb3RvY29sLmpzJztcbmltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gJy4uL2NvcmUvQXhpb3NIZWFkZXJzLmpzJztcbmltcG9ydCB7IHByb2dyZXNzRXZlbnRSZWR1Y2VyIH0gZnJvbSAnLi4vaGVscGVycy9wcm9ncmVzc0V2ZW50UmVkdWNlci5qcyc7XG5pbXBvcnQgcmVzb2x2ZUNvbmZpZyBmcm9tICcuLi9oZWxwZXJzL3Jlc29sdmVDb25maWcuanMnO1xuaW1wb3J0IHsgdG9CeXRlU3RyaW5nSGVhZGVyT2JqZWN0IH0gZnJvbSAnLi4vaGVscGVycy9zYW5pdGl6ZUhlYWRlclZhbHVlLmpzJztcblxuY29uc3QgaXNYSFJBZGFwdGVyU3VwcG9ydGVkID0gdHlwZW9mIFhNTEh0dHBSZXF1ZXN0ICE9PSAndW5kZWZpbmVkJztcblxuZXhwb3J0IGRlZmF1bHQgaXNYSFJBZGFwdGVyU3VwcG9ydGVkICYmXG4gIGZ1bmN0aW9uIChjb25maWcpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gZGlzcGF0Y2hYaHJSZXF1ZXN0KHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgY29uc3QgX2NvbmZpZyA9IHJlc29sdmVDb25maWcoY29uZmlnKTtcbiAgICAgIGxldCByZXF1ZXN0RGF0YSA9IF9jb25maWcuZGF0YTtcbiAgICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20oX2NvbmZpZy5oZWFkZXJzKS5ub3JtYWxpemUoKTtcbiAgICAgIGxldCB7IHJlc3BvbnNlVHlwZSwgb25VcGxvYWRQcm9ncmVzcywgb25Eb3dubG9hZFByb2dyZXNzIH0gPSBfY29uZmlnO1xuICAgICAgbGV0IG9uQ2FuY2VsZWQ7XG4gICAgICBsZXQgdXBsb2FkVGhyb3R0bGVkLCBkb3dubG9hZFRocm90dGxlZDtcbiAgICAgIGxldCBmbHVzaFVwbG9hZCwgZmx1c2hEb3dubG9hZDtcblxuICAgICAgZnVuY3Rpb24gZG9uZSgpIHtcbiAgICAgICAgZmx1c2hVcGxvYWQgJiYgZmx1c2hVcGxvYWQoKTsgLy8gZmx1c2ggZXZlbnRzXG4gICAgICAgIGZsdXNoRG93bmxvYWQgJiYgZmx1c2hEb3dubG9hZCgpOyAvLyBmbHVzaCBldmVudHNcblxuICAgICAgICBfY29uZmlnLmNhbmNlbFRva2VuICYmIF9jb25maWcuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUob25DYW5jZWxlZCk7XG5cbiAgICAgICAgX2NvbmZpZy5zaWduYWwgJiYgX2NvbmZpZy5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkNhbmNlbGVkKTtcbiAgICAgIH1cblxuICAgICAgbGV0IHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgICAgcmVxdWVzdC5vcGVuKF9jb25maWcubWV0aG9kLnRvVXBwZXJDYXNlKCksIF9jb25maWcudXJsLCB0cnVlKTtcblxuICAgICAgLy8gU2V0IHRoZSByZXF1ZXN0IHRpbWVvdXQgaW4gTVNcbiAgICAgIHJlcXVlc3QudGltZW91dCA9IF9jb25maWcudGltZW91dDtcblxuICAgICAgZnVuY3Rpb24gb25sb2FkZW5kKCkge1xuICAgICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gUHJlcGFyZSB0aGUgcmVzcG9uc2VcbiAgICAgICAgY29uc3QgcmVzcG9uc2VIZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20oXG4gICAgICAgICAgJ2dldEFsbFJlc3BvbnNlSGVhZGVycycgaW4gcmVxdWVzdCAmJiByZXF1ZXN0LmdldEFsbFJlc3BvbnNlSGVhZGVycygpXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9XG4gICAgICAgICAgIXJlc3BvbnNlVHlwZSB8fCByZXNwb25zZVR5cGUgPT09ICd0ZXh0JyB8fCByZXNwb25zZVR5cGUgPT09ICdqc29uJ1xuICAgICAgICAgICAgPyByZXF1ZXN0LnJlc3BvbnNlVGV4dFxuICAgICAgICAgICAgOiByZXF1ZXN0LnJlc3BvbnNlO1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IHtcbiAgICAgICAgICBkYXRhOiByZXNwb25zZURhdGEsXG4gICAgICAgICAgc3RhdHVzOiByZXF1ZXN0LnN0YXR1cyxcbiAgICAgICAgICBzdGF0dXNUZXh0OiByZXF1ZXN0LnN0YXR1c1RleHQsXG4gICAgICAgICAgaGVhZGVyczogcmVzcG9uc2VIZWFkZXJzLFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICByZXF1ZXN0LFxuICAgICAgICB9O1xuXG4gICAgICAgIHNldHRsZShcbiAgICAgICAgICBmdW5jdGlvbiBfcmVzb2x2ZSh2YWx1ZSkge1xuICAgICAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBmdW5jdGlvbiBfcmVqZWN0KGVycikge1xuICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXNwb25zZVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmICgnb25sb2FkZW5kJyBpbiByZXF1ZXN0KSB7XG4gICAgICAgIC8vIFVzZSBvbmxvYWRlbmQgaWYgYXZhaWxhYmxlXG4gICAgICAgIHJlcXVlc3Qub25sb2FkZW5kID0gb25sb2FkZW5kO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gTGlzdGVuIGZvciByZWFkeSBzdGF0ZSB0byBlbXVsYXRlIG9ubG9hZGVuZFxuICAgICAgICByZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uIGhhbmRsZUxvYWQoKSB7XG4gICAgICAgICAgaWYgKCFyZXF1ZXN0IHx8IHJlcXVlc3QucmVhZHlTdGF0ZSAhPT0gNCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFRoZSByZXF1ZXN0IGVycm9yZWQgb3V0IGFuZCB3ZSBkaWRuJ3QgZ2V0IGEgcmVzcG9uc2UsIHRoaXMgd2lsbCBiZVxuICAgICAgICAgIC8vIGhhbmRsZWQgYnkgb25lcnJvciBpbnN0ZWFkXG4gICAgICAgICAgLy8gV2l0aCBvbmUgZXhjZXB0aW9uOiByZXF1ZXN0IHRoYXQgdXNpbmcgZmlsZTogcHJvdG9jb2wsIG1vc3QgYnJvd3NlcnNcbiAgICAgICAgICAvLyB3aWxsIHJldHVybiBzdGF0dXMgYXMgMCBldmVuIHRob3VnaCBpdCdzIGEgc3VjY2Vzc2Z1bCByZXF1ZXN0XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgcmVxdWVzdC5zdGF0dXMgPT09IDAgJiZcbiAgICAgICAgICAgICEocmVxdWVzdC5yZXNwb25zZVVSTCAmJiByZXF1ZXN0LnJlc3BvbnNlVVJMLnN0YXJ0c1dpdGgoJ2ZpbGU6JykpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHJlYWR5c3RhdGUgaGFuZGxlciBpcyBjYWxsaW5nIGJlZm9yZSBvbmVycm9yIG9yIG9udGltZW91dCBoYW5kbGVycyxcbiAgICAgICAgICAvLyBzbyB3ZSBzaG91bGQgY2FsbCBvbmxvYWRlbmQgb24gdGhlIG5leHQgJ3RpY2snXG4gICAgICAgICAgc2V0VGltZW91dChvbmxvYWRlbmQpO1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyBIYW5kbGUgYnJvd3NlciByZXF1ZXN0IGNhbmNlbGxhdGlvbiAoYXMgb3Bwb3NlZCB0byBhIG1hbnVhbCBjYW5jZWxsYXRpb24pXG4gICAgICByZXF1ZXN0Lm9uYWJvcnQgPSBmdW5jdGlvbiBoYW5kbGVBYm9ydCgpIHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdSZXF1ZXN0IGFib3J0ZWQnLCBBeGlvc0Vycm9yLkVDT05OQUJPUlRFRCwgY29uZmlnLCByZXF1ZXN0KSk7XG4gICAgICAgIGRvbmUoKTtcblxuICAgICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgICAgfTtcblxuICAgICAgLy8gSGFuZGxlIGxvdyBsZXZlbCBuZXR3b3JrIGVycm9yc1xuICAgICAgcmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24gaGFuZGxlRXJyb3IoZXZlbnQpIHtcbiAgICAgICAgLy8gQnJvd3NlcnMgZGVsaXZlciBhIFByb2dyZXNzRXZlbnQgaW4gWEhSIG9uZXJyb3JcbiAgICAgICAgLy8gKG1lc3NhZ2UgbWF5IGJlIGVtcHR5OyB3aGVuIHByZXNlbnQsIHN1cmZhY2UgaXQpXG4gICAgICAgIC8vIFNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9BUEkvWE1MSHR0cFJlcXVlc3QvZXJyb3JfZXZlbnRcbiAgICAgICAgY29uc3QgbXNnID0gZXZlbnQgJiYgZXZlbnQubWVzc2FnZSA/IGV2ZW50Lm1lc3NhZ2UgOiAnTmV0d29yayBFcnJvcic7XG4gICAgICAgIGNvbnN0IGVyciA9IG5ldyBBeGlvc0Vycm9yKG1zZywgQXhpb3NFcnJvci5FUlJfTkVUV09SSywgY29uZmlnLCByZXF1ZXN0KTtcbiAgICAgICAgLy8gYXR0YWNoIHRoZSB1bmRlcmx5aW5nIGV2ZW50IGZvciBjb25zdW1lcnMgd2hvIHdhbnQgZGV0YWlsc1xuICAgICAgICBlcnIuZXZlbnQgPSBldmVudCB8fCBudWxsO1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIC8vIEhhbmRsZSB0aW1lb3V0XG4gICAgICByZXF1ZXN0Lm9udGltZW91dCA9IGZ1bmN0aW9uIGhhbmRsZVRpbWVvdXQoKSB7XG4gICAgICAgIGxldCB0aW1lb3V0RXJyb3JNZXNzYWdlID0gX2NvbmZpZy50aW1lb3V0XG4gICAgICAgICAgPyAndGltZW91dCBvZiAnICsgX2NvbmZpZy50aW1lb3V0ICsgJ21zIGV4Y2VlZGVkJ1xuICAgICAgICAgIDogJ3RpbWVvdXQgZXhjZWVkZWQnO1xuICAgICAgICBjb25zdCB0cmFuc2l0aW9uYWwgPSBfY29uZmlnLnRyYW5zaXRpb25hbCB8fCB0cmFuc2l0aW9uYWxEZWZhdWx0cztcbiAgICAgICAgaWYgKF9jb25maWcudGltZW91dEVycm9yTWVzc2FnZSkge1xuICAgICAgICAgIHRpbWVvdXRFcnJvck1lc3NhZ2UgPSBfY29uZmlnLnRpbWVvdXRFcnJvck1lc3NhZ2U7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KFxuICAgICAgICAgIG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSxcbiAgICAgICAgICAgIHRyYW5zaXRpb25hbC5jbGFyaWZ5VGltZW91dEVycm9yID8gQXhpb3NFcnJvci5FVElNRURPVVQgOiBBeGlvc0Vycm9yLkVDT05OQUJPUlRFRCxcbiAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgIHJlcXVlc3RcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIGRvbmUoKTtcblxuICAgICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgICAgfTtcblxuICAgICAgLy8gUmVtb3ZlIENvbnRlbnQtVHlwZSBpZiBkYXRhIGlzIHVuZGVmaW5lZFxuICAgICAgcmVxdWVzdERhdGEgPT09IHVuZGVmaW5lZCAmJiByZXF1ZXN0SGVhZGVycy5zZXRDb250ZW50VHlwZShudWxsKTtcblxuICAgICAgLy8gQWRkIGhlYWRlcnMgdG8gdGhlIHJlcXVlc3RcbiAgICAgIGlmICgnc2V0UmVxdWVzdEhlYWRlcicgaW4gcmVxdWVzdCkge1xuICAgICAgICB1dGlscy5mb3JFYWNoKHRvQnl0ZVN0cmluZ0hlYWRlck9iamVjdChyZXF1ZXN0SGVhZGVycyksIGZ1bmN0aW9uIHNldFJlcXVlc3RIZWFkZXIodmFsLCBrZXkpIHtcbiAgICAgICAgICByZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoa2V5LCB2YWwpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gQWRkIHdpdGhDcmVkZW50aWFscyB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChfY29uZmlnLndpdGhDcmVkZW50aWFscykpIHtcbiAgICAgICAgcmVxdWVzdC53aXRoQ3JlZGVudGlhbHMgPSAhIV9jb25maWcud2l0aENyZWRlbnRpYWxzO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgcmVzcG9uc2VUeXBlIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgICBpZiAocmVzcG9uc2VUeXBlICYmIHJlc3BvbnNlVHlwZSAhPT0gJ2pzb24nKSB7XG4gICAgICAgIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gX2NvbmZpZy5yZXNwb25zZVR5cGU7XG4gICAgICB9XG5cbiAgICAgIC8vIEhhbmRsZSBwcm9ncmVzcyBpZiBuZWVkZWRcbiAgICAgIGlmIChvbkRvd25sb2FkUHJvZ3Jlc3MpIHtcbiAgICAgICAgW2Rvd25sb2FkVGhyb3R0bGVkLCBmbHVzaERvd25sb2FkXSA9IHByb2dyZXNzRXZlbnRSZWR1Y2VyKG9uRG93bmxvYWRQcm9ncmVzcywgdHJ1ZSk7XG4gICAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBkb3dubG9hZFRocm90dGxlZCk7XG4gICAgICB9XG5cbiAgICAgIC8vIE5vdCBhbGwgYnJvd3NlcnMgc3VwcG9ydCB1cGxvYWQgZXZlbnRzXG4gICAgICBpZiAob25VcGxvYWRQcm9ncmVzcyAmJiByZXF1ZXN0LnVwbG9hZCkge1xuICAgICAgICBbdXBsb2FkVGhyb3R0bGVkLCBmbHVzaFVwbG9hZF0gPSBwcm9ncmVzc0V2ZW50UmVkdWNlcihvblVwbG9hZFByb2dyZXNzKTtcblxuICAgICAgICByZXF1ZXN0LnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHVwbG9hZFRocm90dGxlZCk7XG5cbiAgICAgICAgcmVxdWVzdC51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVuZCcsIGZsdXNoVXBsb2FkKTtcbiAgICAgIH1cblxuICAgICAgaWYgKF9jb25maWcuY2FuY2VsVG9rZW4gfHwgX2NvbmZpZy5zaWduYWwpIHtcbiAgICAgICAgLy8gSGFuZGxlIGNhbmNlbGxhdGlvblxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgICAgICBvbkNhbmNlbGVkID0gKGNhbmNlbCkgPT4ge1xuICAgICAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZWplY3QoIWNhbmNlbCB8fCBjYW5jZWwudHlwZSA/IG5ldyBDYW5jZWxlZEVycm9yKG51bGwsIGNvbmZpZywgcmVxdWVzdCkgOiBjYW5jZWwpO1xuICAgICAgICAgIHJlcXVlc3QuYWJvcnQoKTtcbiAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgICAgIH07XG5cbiAgICAgICAgX2NvbmZpZy5jYW5jZWxUb2tlbiAmJiBfY29uZmlnLmNhbmNlbFRva2VuLnN1YnNjcmliZShvbkNhbmNlbGVkKTtcbiAgICAgICAgaWYgKF9jb25maWcuc2lnbmFsKSB7XG4gICAgICAgICAgX2NvbmZpZy5zaWduYWwuYWJvcnRlZFxuICAgICAgICAgICAgPyBvbkNhbmNlbGVkKClcbiAgICAgICAgICAgIDogX2NvbmZpZy5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkNhbmNlbGVkKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBwcm90b2NvbCA9IHBhcnNlUHJvdG9jb2woX2NvbmZpZy51cmwpO1xuXG4gICAgICBpZiAocHJvdG9jb2wgJiYgIXBsYXRmb3JtLnByb3RvY29scy5pbmNsdWRlcyhwcm90b2NvbCkpIHtcbiAgICAgICAgcmVqZWN0KFxuICAgICAgICAgIG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICAgICAgJ1Vuc3VwcG9ydGVkIHByb3RvY29sICcgKyBwcm90b2NvbCArICc6JyxcbiAgICAgICAgICAgIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNULFxuICAgICAgICAgICAgY29uZmlnXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFNlbmQgdGhlIHJlcXVlc3RcbiAgICAgIHJlcXVlc3Quc2VuZChyZXF1ZXN0RGF0YSB8fCBudWxsKTtcbiAgICB9KTtcbiAgfTtcbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGFyc2VQcm90b2NvbCh1cmwpIHtcbiAgY29uc3QgbWF0Y2ggPSAvXihbLStcXHddezEsMjV9KTooPzpcXC9cXC8pPy8uZXhlYyh1cmwpO1xuICByZXR1cm4gKG1hdGNoICYmIG1hdGNoWzFdKSB8fCAnJztcbn1cbiIsImltcG9ydCBDYW5jZWxlZEVycm9yIGZyb20gJy4uL2NhbmNlbC9DYW5jZWxlZEVycm9yLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4uL2NvcmUvQXhpb3NFcnJvci5qcyc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuXG5jb25zdCBjb21wb3NlU2lnbmFscyA9IChzaWduYWxzLCB0aW1lb3V0KSA9PiB7XG4gIHNpZ25hbHMgPSBzaWduYWxzID8gc2lnbmFscy5maWx0ZXIoQm9vbGVhbikgOiBbXTtcblxuICBpZiAoIXRpbWVvdXQgJiYgIXNpZ25hbHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICBsZXQgYWJvcnRlZCA9IGZhbHNlO1xuXG4gIGNvbnN0IG9uYWJvcnQgPSBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgaWYgKCFhYm9ydGVkKSB7XG4gICAgICBhYm9ydGVkID0gdHJ1ZTtcbiAgICAgIHVuc3Vic2NyaWJlKCk7XG4gICAgICBjb25zdCBlcnIgPSByZWFzb24gaW5zdGFuY2VvZiBFcnJvciA/IHJlYXNvbiA6IHRoaXMucmVhc29uO1xuICAgICAgY29udHJvbGxlci5hYm9ydChcbiAgICAgICAgZXJyIGluc3RhbmNlb2YgQXhpb3NFcnJvclxuICAgICAgICAgID8gZXJyXG4gICAgICAgICAgOiBuZXcgQ2FuY2VsZWRFcnJvcihlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogZXJyKVxuICAgICAgKTtcbiAgICB9XG4gIH07XG5cbiAgbGV0IHRpbWVyID1cbiAgICB0aW1lb3V0ICYmXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aW1lciA9IG51bGw7XG4gICAgICBvbmFib3J0KG5ldyBBeGlvc0Vycm9yKGB0aW1lb3V0IG9mICR7dGltZW91dH1tcyBleGNlZWRlZGAsIEF4aW9zRXJyb3IuRVRJTUVET1VUKSk7XG4gICAgfSwgdGltZW91dCk7XG5cbiAgY29uc3QgdW5zdWJzY3JpYmUgPSAoKSA9PiB7XG4gICAgaWYgKCFzaWduYWxzKSB7IHJldHVybjsgfVxuICAgIHRpbWVyICYmIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgdGltZXIgPSBudWxsO1xuICAgIHNpZ25hbHMuZm9yRWFjaCgoc2lnbmFsKSA9PiB7XG4gICAgICBzaWduYWwudW5zdWJzY3JpYmVcbiAgICAgICAgPyBzaWduYWwudW5zdWJzY3JpYmUob25hYm9ydClcbiAgICAgICAgOiBzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbmFib3J0KTtcbiAgICB9KTtcbiAgICBzaWduYWxzID0gbnVsbDtcbiAgfTtcblxuICBzaWduYWxzLmZvckVhY2goKHNpZ25hbCkgPT4gc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25hYm9ydCkpO1xuXG4gIGNvbnN0IHsgc2lnbmFsIH0gPSBjb250cm9sbGVyO1xuXG4gIHNpZ25hbC51bnN1YnNjcmliZSA9ICgpID0+IHV0aWxzLmFzYXAodW5zdWJzY3JpYmUpO1xuXG4gIHJldHVybiBzaWduYWw7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb21wb3NlU2lnbmFscztcbiIsImV4cG9ydCBjb25zdCBzdHJlYW1DaHVuayA9IGZ1bmN0aW9uKiAoY2h1bmssIGNodW5rU2l6ZSkge1xuICBsZXQgbGVuID0gY2h1bmsuYnl0ZUxlbmd0aDtcblxuICBpZiAoIWNodW5rU2l6ZSB8fCBsZW4gPCBjaHVua1NpemUpIHtcbiAgICB5aWVsZCBjaHVuaztcbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgcG9zID0gMDtcbiAgbGV0IGVuZDtcblxuICB3aGlsZSAocG9zIDwgbGVuKSB7XG4gICAgZW5kID0gcG9zICsgY2h1bmtTaXplO1xuICAgIHlpZWxkIGNodW5rLnNsaWNlKHBvcywgZW5kKTtcbiAgICBwb3MgPSBlbmQ7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCByZWFkQnl0ZXMgPSBhc3luYyBmdW5jdGlvbiogKGl0ZXJhYmxlLCBjaHVua1NpemUpIHtcbiAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiByZWFkU3RyZWFtKGl0ZXJhYmxlKSkge1xuICAgIHlpZWxkKiBzdHJlYW1DaHVuayhjaHVuaywgY2h1bmtTaXplKTtcbiAgfVxufTtcblxuY29uc3QgcmVhZFN0cmVhbSA9IGFzeW5jIGZ1bmN0aW9uKiAoc3RyZWFtKSB7XG4gIGlmIChzdHJlYW1bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKSB7XG4gICAgeWllbGQqIHN0cmVhbTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCByZWFkZXIgPSBzdHJlYW0uZ2V0UmVhZGVyKCk7XG4gIHRyeSB7XG4gICAgZm9yICg7Oykge1xuICAgICAgY29uc3QgeyBkb25lLCB2YWx1ZSB9ID0gYXdhaXQgcmVhZGVyLnJlYWQoKTtcbiAgICAgIGlmIChkb25lKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgeWllbGQgdmFsdWU7XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IHJlYWRlci5jYW5jZWwoKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHRyYWNrU3RyZWFtID0gKHN0cmVhbSwgY2h1bmtTaXplLCBvblByb2dyZXNzLCBvbkZpbmlzaCkgPT4ge1xuICBjb25zdCBpdGVyYXRvciA9IHJlYWRCeXRlcyhzdHJlYW0sIGNodW5rU2l6ZSk7XG5cbiAgbGV0IGJ5dGVzID0gMDtcbiAgbGV0IGRvbmU7XG4gIGxldCBfb25GaW5pc2ggPSAoZSkgPT4ge1xuICAgIGlmICghZG9uZSkge1xuICAgICAgZG9uZSA9IHRydWU7XG4gICAgICBvbkZpbmlzaCAmJiBvbkZpbmlzaChlKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIG5ldyBSZWFkYWJsZVN0cmVhbShcbiAgICB7XG4gICAgICBhc3luYyBwdWxsKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCBpdGVyYXRvci5uZXh0KCk7XG5cbiAgICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgICAgX29uRmluaXNoKCk7XG4gICAgICAgICAgICBjb250cm9sbGVyLmNsb3NlKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IGxlbiA9IHZhbHVlLmJ5dGVMZW5ndGg7XG4gICAgICAgICAgaWYgKG9uUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgIGxldCBsb2FkZWRCeXRlcyA9IChieXRlcyArPSBsZW4pO1xuICAgICAgICAgICAgb25Qcm9ncmVzcyhsb2FkZWRCeXRlcyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShuZXcgVWludDhBcnJheSh2YWx1ZSkpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBfb25GaW5pc2goZXJyKTtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjYW5jZWwocmVhc29uKSB7XG4gICAgICAgIF9vbkZpbmlzaChyZWFzb24pO1xuICAgICAgICByZXR1cm4gaXRlcmF0b3IucmV0dXJuKCk7XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgaGlnaFdhdGVyTWFyazogMixcbiAgICB9XG4gICk7XG59O1xuIiwiZXhwb3J0IGNvbnN0IFZFUlNJT04gPSBcIjEuMTcuMFwiOyIsImltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcbmltcG9ydCBjb21wb3NlU2lnbmFscyBmcm9tICcuLi9oZWxwZXJzL2NvbXBvc2VTaWduYWxzLmpzJztcbmltcG9ydCB7IHRyYWNrU3RyZWFtIH0gZnJvbSAnLi4vaGVscGVycy90cmFja1N0cmVhbS5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gJy4uL2NvcmUvQXhpb3NIZWFkZXJzLmpzJztcbmltcG9ydCB7XG4gIHByb2dyZXNzRXZlbnRSZWR1Y2VyLFxuICBwcm9ncmVzc0V2ZW50RGVjb3JhdG9yLFxuICBhc3luY0RlY29yYXRvcixcbn0gZnJvbSAnLi4vaGVscGVycy9wcm9ncmVzc0V2ZW50UmVkdWNlci5qcyc7XG5pbXBvcnQgcmVzb2x2ZUNvbmZpZyBmcm9tICcuLi9oZWxwZXJzL3Jlc29sdmVDb25maWcuanMnO1xuaW1wb3J0IHNldHRsZSBmcm9tICcuLi9jb3JlL3NldHRsZS5qcyc7XG5pbXBvcnQgZXN0aW1hdGVEYXRhVVJMRGVjb2RlZEJ5dGVzIGZyb20gJy4uL2hlbHBlcnMvZXN0aW1hdGVEYXRhVVJMRGVjb2RlZEJ5dGVzLmpzJztcbmltcG9ydCB7IFZFUlNJT04gfSBmcm9tICcuLi9lbnYvZGF0YS5qcyc7XG5pbXBvcnQgeyB0b0J5dGVTdHJpbmdIZWFkZXJPYmplY3QgfSBmcm9tICcuLi9oZWxwZXJzL3Nhbml0aXplSGVhZGVyVmFsdWUuanMnO1xuXG5jb25zdCBERUZBVUxUX0NIVU5LX1NJWkUgPSA2NCAqIDEwMjQ7XG5cbmNvbnN0IHsgaXNGdW5jdGlvbiB9ID0gdXRpbHM7XG5cbi8qKlxuICogRW5jb2RlIGEgVVRGLTggc3RyaW5nIHRvIGEgTGF0aW4tMSBieXRlIHN0cmluZyBmb3IgdXNlIHdpdGggYnRvYSgpLlxuICogVGhpcyBpcyBhIG1vZGVybiByZXBsYWNlbWVudCBmb3IgdGhlIGRlcHJlY2F0ZWQgdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KHN0cikpIHBhdHRlcm4uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0ciBUaGUgc3RyaW5nIHRvIGVuY29kZVxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFVURi04IGJ5dGVzIGFzIGEgTGF0aW4tMSBzdHJpbmdcbiAqL1xuY29uc3QgZW5jb2RlVVRGOCA9IChzdHIpID0+XG4gIGVuY29kZVVSSUNvbXBvbmVudChzdHIpLnJlcGxhY2UoLyUoWzAtOUEtRl17Mn0pL2dpLCAoXywgaGV4KSA9PlxuICAgIFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoaGV4LCAxNikpXG4gICk7XG5cbi8vIE5vZGUncyBXSEFUV0cgVVJMIHBhcnNlciByZXR1cm5zIGB1c2VybmFtZWAgYW5kIGBwYXNzd29yZGAgcGVyY2VudC1lbmNvZGVkLlxuLy8gRGVjb2RlIGJlZm9yZSBjb21wb3NpbmcgdGhlIGBhdXRoYCBvcHRpb24gc28gY3JlZGVudGlhbHMgc3VjaCBhc1xuLy8gYG15JTQwZW1haWwuY29tOnBhc3NgIGFyZSBzZW50IGFzIGBteUBlbWFpbC5jb206cGFzc2AuIEZhbGxzIGJhY2sgdG8gdGhlXG4vLyBvcmlnaW5hbCB2YWx1ZSBmb3IgbWFsZm9ybWVkIGlucHV0IHNvIGEgYmFkIGVuY29kaW5nIG5ldmVyIHRocm93cy5cbmNvbnN0IGRlY29kZVVSSUNvbXBvbmVudFNhZmUgPSAodmFsdWUpID0+IHtcbiAgaWYgKCF1dGlscy5pc1N0cmluZyh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQodmFsdWUpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufTtcblxuY29uc3QgdGVzdCA9IChmbiwgLi4uYXJncykgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiAhIWZuKC4uLmFyZ3MpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG5jb25zdCBtYXliZVdpdGhBdXRoQ3JlZGVudGlhbHMgPSAodXJsKSA9PiB7XG4gIGNvbnN0IHByb3RvY29sSW5kZXggPSB1cmwuaW5kZXhPZignOi8vJyk7XG4gIGxldCB1cmxUb0NoZWNrID0gdXJsO1xuICBpZiAocHJvdG9jb2xJbmRleCAhPT0gLTEpIHtcbiAgICB1cmxUb0NoZWNrID0gdXJsVG9DaGVjay5zbGljZShwcm90b2NvbEluZGV4ICsgMyk7XG4gIH1cbiAgcmV0dXJuIHVybFRvQ2hlY2suaW5jbHVkZXMoJ0AnKSB8fCB1cmxUb0NoZWNrLmluY2x1ZGVzKCc6Jyk7XG59O1xuXG5jb25zdCBmYWN0b3J5ID0gKGVudikgPT4ge1xuICBjb25zdCBnbG9iYWxPYmplY3QgPVxuICAgIHV0aWxzLmdsb2JhbCAhPT0gdW5kZWZpbmVkICYmIHV0aWxzLmdsb2JhbCAhPT0gbnVsbFxuICAgICAgPyB1dGlscy5nbG9iYWxcbiAgICAgIDogZ2xvYmFsVGhpcztcbiAgY29uc3QgeyBSZWFkYWJsZVN0cmVhbSwgVGV4dEVuY29kZXIgfSA9IGdsb2JhbE9iamVjdDtcblxuICBlbnYgPSB1dGlscy5tZXJnZS5jYWxsKFxuICAgIHtcbiAgICAgIHNraXBVbmRlZmluZWQ6IHRydWUsXG4gICAgfSxcbiAgICB7XG4gICAgICBSZXF1ZXN0OiBnbG9iYWxPYmplY3QuUmVxdWVzdCxcbiAgICAgIFJlc3BvbnNlOiBnbG9iYWxPYmplY3QuUmVzcG9uc2UsXG4gICAgfSxcbiAgICBlbnZcbiAgKTtcblxuICBjb25zdCB7IGZldGNoOiBlbnZGZXRjaCwgUmVxdWVzdCwgUmVzcG9uc2UgfSA9IGVudjtcbiAgY29uc3QgaXNGZXRjaFN1cHBvcnRlZCA9IGVudkZldGNoID8gaXNGdW5jdGlvbihlbnZGZXRjaCkgOiB0eXBlb2YgZmV0Y2ggPT09ICdmdW5jdGlvbic7XG4gIGNvbnN0IGlzUmVxdWVzdFN1cHBvcnRlZCA9IGlzRnVuY3Rpb24oUmVxdWVzdCk7XG4gIGNvbnN0IGlzUmVzcG9uc2VTdXBwb3J0ZWQgPSBpc0Z1bmN0aW9uKFJlc3BvbnNlKTtcblxuICBpZiAoIWlzRmV0Y2hTdXBwb3J0ZWQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBpc1JlYWRhYmxlU3RyZWFtU3VwcG9ydGVkID0gaXNGZXRjaFN1cHBvcnRlZCAmJiBpc0Z1bmN0aW9uKFJlYWRhYmxlU3RyZWFtKTtcblxuICBjb25zdCBlbmNvZGVUZXh0ID1cbiAgICBpc0ZldGNoU3VwcG9ydGVkICYmXG4gICAgKHR5cGVvZiBUZXh0RW5jb2RlciA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyAoXG4gICAgICAgICAgKGVuY29kZXIpID0+IChzdHIpID0+XG4gICAgICAgICAgICBlbmNvZGVyLmVuY29kZShzdHIpXG4gICAgICAgICkobmV3IFRleHRFbmNvZGVyKCkpXG4gICAgICA6IGFzeW5jIChzdHIpID0+IG5ldyBVaW50OEFycmF5KGF3YWl0IG5ldyBSZXF1ZXN0KHN0cikuYXJyYXlCdWZmZXIoKSkpO1xuXG4gIGNvbnN0IHN1cHBvcnRzUmVxdWVzdFN0cmVhbSA9XG4gICAgaXNSZXF1ZXN0U3VwcG9ydGVkICYmXG4gICAgaXNSZWFkYWJsZVN0cmVhbVN1cHBvcnRlZCAmJlxuICAgIHRlc3QoKCkgPT4ge1xuICAgICAgbGV0IGR1cGxleEFjY2Vzc2VkID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IHJlcXVlc3QgPSBuZXcgUmVxdWVzdChwbGF0Zm9ybS5vcmlnaW4sIHtcbiAgICAgICAgYm9keTogbmV3IFJlYWRhYmxlU3RyZWFtKCksXG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBnZXQgZHVwbGV4KCkge1xuICAgICAgICAgIGR1cGxleEFjY2Vzc2VkID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm4gJ2hhbGYnO1xuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGhhc0NvbnRlbnRUeXBlID0gcmVxdWVzdC5oZWFkZXJzLmhhcygnQ29udGVudC1UeXBlJyk7XG5cbiAgICAgIGlmIChyZXF1ZXN0LmJvZHkgIT0gbnVsbCkge1xuICAgICAgICByZXF1ZXN0LmJvZHkuY2FuY2VsKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkdXBsZXhBY2Nlc3NlZCAmJiAhaGFzQ29udGVudFR5cGU7XG4gICAgfSk7XG5cbiAgY29uc3Qgc3VwcG9ydHNSZXNwb25zZVN0cmVhbSA9XG4gICAgaXNSZXNwb25zZVN1cHBvcnRlZCAmJlxuICAgIGlzUmVhZGFibGVTdHJlYW1TdXBwb3J0ZWQgJiZcbiAgICB0ZXN0KCgpID0+IHV0aWxzLmlzUmVhZGFibGVTdHJlYW0obmV3IFJlc3BvbnNlKCcnKS5ib2R5KSk7XG5cbiAgY29uc3QgcmVzb2x2ZXJzID0ge1xuICAgIHN0cmVhbTogc3VwcG9ydHNSZXNwb25zZVN0cmVhbSAmJiAoKHJlcykgPT4gcmVzLmJvZHkpLFxuICB9O1xuXG4gIGlzRmV0Y2hTdXBwb3J0ZWQgJiZcbiAgICAoKCkgPT4ge1xuICAgICAgWyd0ZXh0JywgJ2FycmF5QnVmZmVyJywgJ2Jsb2InLCAnZm9ybURhdGEnLCAnc3RyZWFtJ10uZm9yRWFjaCgodHlwZSkgPT4ge1xuICAgICAgICAhcmVzb2x2ZXJzW3R5cGVdICYmXG4gICAgICAgICAgKHJlc29sdmVyc1t0eXBlXSA9IChyZXMsIGNvbmZpZykgPT4ge1xuICAgICAgICAgICAgbGV0IG1ldGhvZCA9IHJlcyAmJiByZXNbdHlwZV07XG5cbiAgICAgICAgICAgIGlmIChtZXRob2QpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG1ldGhvZC5jYWxsKHJlcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICAgICAgICBgUmVzcG9uc2UgdHlwZSAnJHt0eXBlfScgaXMgbm90IHN1cHBvcnRlZGAsXG4gICAgICAgICAgICAgIEF4aW9zRXJyb3IuRVJSX05PVF9TVVBQT1JULFxuICAgICAgICAgICAgICBjb25maWdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KSgpO1xuXG4gIGNvbnN0IGdldEJvZHlMZW5ndGggPSBhc3luYyAoYm9keSkgPT4ge1xuICAgIGlmIChib2R5ID09IG51bGwpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGlmICh1dGlscy5pc0Jsb2IoYm9keSkpIHtcbiAgICAgIHJldHVybiBib2R5LnNpemU7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzLmlzU3BlY0NvbXBsaWFudEZvcm0oYm9keSkpIHtcbiAgICAgIGNvbnN0IF9yZXF1ZXN0ID0gbmV3IFJlcXVlc3QocGxhdGZvcm0ub3JpZ2luLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBib2R5LFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gKGF3YWl0IF9yZXF1ZXN0LmFycmF5QnVmZmVyKCkpLmJ5dGVMZW5ndGg7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXJWaWV3KGJvZHkpIHx8IHV0aWxzLmlzQXJyYXlCdWZmZXIoYm9keSkpIHtcbiAgICAgIHJldHVybiBib2R5LmJ5dGVMZW5ndGg7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKGJvZHkpKSB7XG4gICAgICBib2R5ID0gYm9keSArICcnO1xuICAgIH1cblxuICAgIGlmICh1dGlscy5pc1N0cmluZyhib2R5KSkge1xuICAgICAgcmV0dXJuIChhd2FpdCBlbmNvZGVUZXh0KGJvZHkpKS5ieXRlTGVuZ3RoO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCByZXNvbHZlQm9keUxlbmd0aCA9IGFzeW5jIChoZWFkZXJzLCBib2R5KSA9PiB7XG4gICAgY29uc3QgbGVuZ3RoID0gdXRpbHMudG9GaW5pdGVOdW1iZXIoaGVhZGVycy5nZXRDb250ZW50TGVuZ3RoKCkpO1xuXG4gICAgcmV0dXJuIGxlbmd0aCA9PSBudWxsID8gZ2V0Qm9keUxlbmd0aChib2R5KSA6IGxlbmd0aDtcbiAgfTtcblxuICByZXR1cm4gYXN5bmMgKGNvbmZpZykgPT4ge1xuICAgIGxldCB7XG4gICAgICB1cmwsXG4gICAgICBtZXRob2QsXG4gICAgICBkYXRhLFxuICAgICAgc2lnbmFsLFxuICAgICAgY2FuY2VsVG9rZW4sXG4gICAgICB0aW1lb3V0LFxuICAgICAgb25Eb3dubG9hZFByb2dyZXNzLFxuICAgICAgb25VcGxvYWRQcm9ncmVzcyxcbiAgICAgIHJlc3BvbnNlVHlwZSxcbiAgICAgIGhlYWRlcnMsXG4gICAgICB3aXRoQ3JlZGVudGlhbHMgPSAnc2FtZS1vcmlnaW4nLFxuICAgICAgZmV0Y2hPcHRpb25zLFxuICAgICAgbWF4Q29udGVudExlbmd0aCxcbiAgICAgIG1heEJvZHlMZW5ndGgsXG4gICAgfSA9IHJlc29sdmVDb25maWcoY29uZmlnKTtcblxuICAgIGNvbnN0IGhhc01heENvbnRlbnRMZW5ndGggPSB1dGlscy5pc051bWJlcihtYXhDb250ZW50TGVuZ3RoKSAmJiBtYXhDb250ZW50TGVuZ3RoID4gLTE7XG4gICAgY29uc3QgaGFzTWF4Qm9keUxlbmd0aCA9IHV0aWxzLmlzTnVtYmVyKG1heEJvZHlMZW5ndGgpICYmIG1heEJvZHlMZW5ndGggPiAtMTtcbiAgICBjb25zdCBvd24gPSAoa2V5KSA9PiAodXRpbHMuaGFzT3duUHJvcChjb25maWcsIGtleSkgPyBjb25maWdba2V5XSA6IHVuZGVmaW5lZCk7XG5cbiAgICBsZXQgX2ZldGNoID0gZW52RmV0Y2ggfHwgZmV0Y2g7XG5cbiAgICByZXNwb25zZVR5cGUgPSByZXNwb25zZVR5cGUgPyAocmVzcG9uc2VUeXBlICsgJycpLnRvTG93ZXJDYXNlKCkgOiAndGV4dCc7XG5cbiAgICBsZXQgY29tcG9zZWRTaWduYWwgPSBjb21wb3NlU2lnbmFscyhcbiAgICAgIFtzaWduYWwsIGNhbmNlbFRva2VuICYmIGNhbmNlbFRva2VuLnRvQWJvcnRTaWduYWwoKV0sXG4gICAgICB0aW1lb3V0XG4gICAgKTtcblxuICAgIGxldCByZXF1ZXN0ID0gbnVsbDtcblxuICAgIGNvbnN0IHVuc3Vic2NyaWJlID1cbiAgICAgIGNvbXBvc2VkU2lnbmFsICYmXG4gICAgICBjb21wb3NlZFNpZ25hbC51bnN1YnNjcmliZSAmJlxuICAgICAgKCgpID0+IHtcbiAgICAgICAgY29tcG9zZWRTaWduYWwudW5zdWJzY3JpYmUoKTtcbiAgICAgIH0pO1xuXG4gICAgbGV0IHJlcXVlc3RDb250ZW50TGVuZ3RoO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb25cbiAgICAgIGxldCBhdXRoID0gdW5kZWZpbmVkO1xuICAgICAgY29uc3QgY29uZmlnQXV0aCA9IG93bignYXV0aCcpO1xuXG4gICAgICBpZiAoY29uZmlnQXV0aCkge1xuICAgICAgICBjb25zdCB1c2VybmFtZSA9IGNvbmZpZ0F1dGgudXNlcm5hbWUgfHwgJyc7XG4gICAgICAgIGNvbnN0IHBhc3N3b3JkID0gY29uZmlnQXV0aC5wYXNzd29yZCB8fCAnJztcbiAgICAgICAgYXV0aCA9IHtcbiAgICAgICAgICB1c2VybmFtZSxcbiAgICAgICAgICBwYXNzd29yZFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAobWF5YmVXaXRoQXV0aENyZWRlbnRpYWxzKHVybCkpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkVVJMID0gbmV3IFVSTCh1cmwsIHBsYXRmb3JtLm9yaWdpbik7XG5cbiAgICAgICAgaWYgKCFhdXRoICYmIChwYXJzZWRVUkwudXNlcm5hbWUgfHwgcGFyc2VkVVJMLnBhc3N3b3JkKSkge1xuICAgICAgICAgIGNvbnN0IHVybFVzZXJuYW1lID0gZGVjb2RlVVJJQ29tcG9uZW50U2FmZShwYXJzZWRVUkwudXNlcm5hbWUpO1xuICAgICAgICAgIGNvbnN0IHVybFBhc3N3b3JkID0gZGVjb2RlVVJJQ29tcG9uZW50U2FmZShwYXJzZWRVUkwucGFzc3dvcmQpO1xuICAgICAgICAgIGF1dGggPSB7XG4gICAgICAgICAgICB1c2VybmFtZTogdXJsVXNlcm5hbWUsXG4gICAgICAgICAgICBwYXNzd29yZDogdXJsUGFzc3dvcmRcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcnNlZFVSTC51c2VybmFtZSB8fCBwYXJzZWRVUkwucGFzc3dvcmQpIHtcbiAgICAgICAgICBwYXJzZWRVUkwudXNlcm5hbWUgPSAnJztcbiAgICAgICAgICBwYXJzZWRVUkwucGFzc3dvcmQgPSAnJztcbiAgICAgICAgICB1cmwgPSBwYXJzZWRVUkwuaHJlZjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoYXV0aCkge1xuICAgICAgICBoZWFkZXJzLmRlbGV0ZSgnYXV0aG9yaXphdGlvbicpO1xuICAgICAgICBoZWFkZXJzLnNldChcbiAgICAgICAgICAnQXV0aG9yaXphdGlvbicsXG4gICAgICAgICAgJ0Jhc2ljICcgKyBidG9hKGVuY29kZVVURjgoKGF1dGgudXNlcm5hbWUgfHwgJycpICsgJzonICsgKGF1dGgucGFzc3dvcmQgfHwgJycpKSlcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gRW5mb3JjZSBtYXhDb250ZW50TGVuZ3RoIGZvciBkYXRhOiBVUkxzIHVwLWZyb250IHNvIHdlIG5ldmVyIG1hdGVyaWFsaXplXG4gICAgICAvLyBhbiBvdmVyc2l6ZWQgcGF5bG9hZC4gVGhlIEhUVFAgYWRhcHRlciBhcHBsaWVzIHRoZSBzYW1lIGNoZWNrIChzZWUgaHR0cC5qc1xuICAgICAgLy8gXCJpZiAocHJvdG9jb2wgPT09ICdkYXRhOicpXCIgYnJhbmNoKS5cbiAgICAgIGlmIChoYXNNYXhDb250ZW50TGVuZ3RoICYmIHR5cGVvZiB1cmwgPT09ICdzdHJpbmcnICYmIHVybC5zdGFydHNXaXRoKCdkYXRhOicpKSB7XG4gICAgICAgIGNvbnN0IGVzdGltYXRlZCA9IGVzdGltYXRlRGF0YVVSTERlY29kZWRCeXRlcyh1cmwpO1xuICAgICAgICBpZiAoZXN0aW1hdGVkID4gbWF4Q29udGVudExlbmd0aCkge1xuICAgICAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICAgICAgJ21heENvbnRlbnRMZW5ndGggc2l6ZSBvZiAnICsgbWF4Q29udGVudExlbmd0aCArICcgZXhjZWVkZWQnLFxuICAgICAgICAgICAgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFLFxuICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgcmVxdWVzdFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gRW5mb3JjZSBtYXhCb2R5TGVuZ3RoIGFnYWluc3QgdGhlIG91dGJvdW5kIHJlcXVlc3QgYm9keSBiZWZvcmUgZGlzcGF0Y2guXG4gICAgICAvLyBNaXJyb3JzIGh0dHAuanMgYmVoYXZpb3IgKEVSUl9CQURfUkVRVUVTVCAvICdSZXF1ZXN0IGJvZHkgbGFyZ2VyIHRoYW5cbiAgICAgIC8vIG1heEJvZHlMZW5ndGggbGltaXQnKS4gU2tpcCB3aGVuIHRoZSBib2R5IGxlbmd0aCBjYW5ub3QgYmUgZGV0ZXJtaW5lZFxuICAgICAgLy8gKGUuZy4gYSBsaXZlIFJlYWRhYmxlU3RyZWFtIHN1cHBsaWVkIGJ5IHRoZSBjYWxsZXIpLlxuICAgICAgaWYgKGhhc01heEJvZHlMZW5ndGggJiYgbWV0aG9kICE9PSAnZ2V0JyAmJiBtZXRob2QgIT09ICdoZWFkJykge1xuICAgICAgICBjb25zdCBvdXRib3VuZExlbmd0aCA9IGF3YWl0IHJlc29sdmVCb2R5TGVuZ3RoKGhlYWRlcnMsIGRhdGEpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdHlwZW9mIG91dGJvdW5kTGVuZ3RoID09PSAnbnVtYmVyJyAmJlxuICAgICAgICAgIGlzRmluaXRlKG91dGJvdW5kTGVuZ3RoKSAmJlxuICAgICAgICAgIG91dGJvdW5kTGVuZ3RoID4gbWF4Qm9keUxlbmd0aFxuICAgICAgICApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgICAgICdSZXF1ZXN0IGJvZHkgbGFyZ2VyIHRoYW4gbWF4Qm9keUxlbmd0aCBsaW1pdCcsXG4gICAgICAgICAgICBBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCxcbiAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgIHJlcXVlc3RcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgb25VcGxvYWRQcm9ncmVzcyAmJlxuICAgICAgICBzdXBwb3J0c1JlcXVlc3RTdHJlYW0gJiZcbiAgICAgICAgbWV0aG9kICE9PSAnZ2V0JyAmJlxuICAgICAgICBtZXRob2QgIT09ICdoZWFkJyAmJlxuICAgICAgICAocmVxdWVzdENvbnRlbnRMZW5ndGggPSBhd2FpdCByZXNvbHZlQm9keUxlbmd0aChoZWFkZXJzLCBkYXRhKSkgIT09IDBcbiAgICAgICkge1xuICAgICAgICBsZXQgX3JlcXVlc3QgPSBuZXcgUmVxdWVzdCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBkYXRhLFxuICAgICAgICAgIGR1cGxleDogJ2hhbGYnLFxuICAgICAgICB9KTtcblxuICAgICAgICBsZXQgY29udGVudFR5cGVIZWFkZXI7XG5cbiAgICAgICAgaWYgKHV0aWxzLmlzRm9ybURhdGEoZGF0YSkgJiYgKGNvbnRlbnRUeXBlSGVhZGVyID0gX3JlcXVlc3QuaGVhZGVycy5nZXQoJ2NvbnRlbnQtdHlwZScpKSkge1xuICAgICAgICAgIGhlYWRlcnMuc2V0Q29udGVudFR5cGUoY29udGVudFR5cGVIZWFkZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKF9yZXF1ZXN0LmJvZHkpIHtcbiAgICAgICAgICBjb25zdCBbb25Qcm9ncmVzcywgZmx1c2hdID0gcHJvZ3Jlc3NFdmVudERlY29yYXRvcihcbiAgICAgICAgICAgIHJlcXVlc3RDb250ZW50TGVuZ3RoLFxuICAgICAgICAgICAgcHJvZ3Jlc3NFdmVudFJlZHVjZXIoYXN5bmNEZWNvcmF0b3Iob25VcGxvYWRQcm9ncmVzcykpXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGRhdGEgPSB0cmFja1N0cmVhbShfcmVxdWVzdC5ib2R5LCBERUZBVUxUX0NIVU5LX1NJWkUsIG9uUHJvZ3Jlc3MsIGZsdXNoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIXV0aWxzLmlzU3RyaW5nKHdpdGhDcmVkZW50aWFscykpIHtcbiAgICAgICAgd2l0aENyZWRlbnRpYWxzID0gd2l0aENyZWRlbnRpYWxzID8gJ2luY2x1ZGUnIDogJ29taXQnO1xuICAgICAgfVxuXG4gICAgICAvLyBDbG91ZGZsYXJlIFdvcmtlcnMgdGhyb3dzIHdoZW4gY3JlZGVudGlhbHMgYXJlIGRlZmluZWRcbiAgICAgIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vY2xvdWRmbGFyZS93b3JrZXJkL2lzc3Vlcy85MDJcbiAgICAgIGNvbnN0IGlzQ3JlZGVudGlhbHNTdXBwb3J0ZWQgPSBpc1JlcXVlc3RTdXBwb3J0ZWQgJiYgJ2NyZWRlbnRpYWxzJyBpbiBSZXF1ZXN0LnByb3RvdHlwZTtcblxuICAgICAgLy8gSWYgZGF0YSBpcyBGb3JtRGF0YSBhbmQgQ29udGVudC1UeXBlIGlzIG11bHRpcGFydC9mb3JtLWRhdGEgd2l0aG91dCBib3VuZGFyeSxcbiAgICAgIC8vIGRlbGV0ZSBpdCBzbyBmZXRjaCBjYW4gc2V0IGl0IGNvcnJlY3RseSB3aXRoIHRoZSBib3VuZGFyeVxuICAgICAgaWYgKHV0aWxzLmlzRm9ybURhdGEoZGF0YSkpIHtcbiAgICAgICAgY29uc3QgY29udGVudFR5cGUgPSBoZWFkZXJzLmdldENvbnRlbnRUeXBlKCk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjb250ZW50VHlwZSAmJlxuICAgICAgICAgIC9ebXVsdGlwYXJ0XFwvZm9ybS1kYXRhL2kudGVzdChjb250ZW50VHlwZSkgJiZcbiAgICAgICAgICAhL2JvdW5kYXJ5PS9pLnRlc3QoY29udGVudFR5cGUpXG4gICAgICAgICkge1xuICAgICAgICAgIGhlYWRlcnMuZGVsZXRlKCdjb250ZW50LXR5cGUnKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTZXQgVXNlci1BZ2VudCBoZWFkZXIgaWYgbm90IGFscmVhZHkgc2V0IChmZXRjaCBkZWZhdWx0cyB0byAnbm9kZScgaW4gTm9kZS5qcylcbiAgICAgIGhlYWRlcnMuc2V0KCdVc2VyLUFnZW50JywgJ2F4aW9zLycgKyBWRVJTSU9OLCBmYWxzZSk7XG5cbiAgICAgIGNvbnN0IHJlc29sdmVkT3B0aW9ucyA9IHtcbiAgICAgICAgLi4uZmV0Y2hPcHRpb25zLFxuICAgICAgICBzaWduYWw6IGNvbXBvc2VkU2lnbmFsLFxuICAgICAgICBtZXRob2Q6IG1ldGhvZC50b1VwcGVyQ2FzZSgpLFxuICAgICAgICBoZWFkZXJzOiB0b0J5dGVTdHJpbmdIZWFkZXJPYmplY3QoaGVhZGVycy5ub3JtYWxpemUoKSksXG4gICAgICAgIGJvZHk6IGRhdGEsXG4gICAgICAgIGR1cGxleDogJ2hhbGYnLFxuICAgICAgICBjcmVkZW50aWFsczogaXNDcmVkZW50aWFsc1N1cHBvcnRlZCA/IHdpdGhDcmVkZW50aWFscyA6IHVuZGVmaW5lZCxcbiAgICAgIH07XG5cbiAgICAgIHJlcXVlc3QgPSBpc1JlcXVlc3RTdXBwb3J0ZWQgJiYgbmV3IFJlcXVlc3QodXJsLCByZXNvbHZlZE9wdGlvbnMpO1xuXG4gICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCAoaXNSZXF1ZXN0U3VwcG9ydGVkXG4gICAgICAgID8gX2ZldGNoKHJlcXVlc3QsIGZldGNoT3B0aW9ucylcbiAgICAgICAgOiBfZmV0Y2godXJsLCByZXNvbHZlZE9wdGlvbnMpKTtcblxuICAgICAgLy8gQ2hlYXAgcHJlLWNoZWNrOiBpZiB0aGUgc2VydmVyIGhvbmVzdGx5IGRlY2xhcmVzIGEgY29udGVudC1sZW5ndGggdGhhdFxuICAgICAgLy8gYWxyZWFkeSBleGNlZWRzIHRoZSBjYXAsIHJlamVjdCBiZWZvcmUgd2Ugc3RhcnQgc3RyZWFtaW5nLlxuICAgICAgaWYgKGhhc01heENvbnRlbnRMZW5ndGgpIHtcbiAgICAgICAgY29uc3QgZGVjbGFyZWRMZW5ndGggPSB1dGlscy50b0Zpbml0ZU51bWJlcihyZXNwb25zZS5oZWFkZXJzLmdldCgnY29udGVudC1sZW5ndGgnKSk7XG4gICAgICAgIGlmIChkZWNsYXJlZExlbmd0aCAhPSBudWxsICYmIGRlY2xhcmVkTGVuZ3RoID4gbWF4Q29udGVudExlbmd0aCkge1xuICAgICAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICAgICAgJ21heENvbnRlbnRMZW5ndGggc2l6ZSBvZiAnICsgbWF4Q29udGVudExlbmd0aCArICcgZXhjZWVkZWQnLFxuICAgICAgICAgICAgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFLFxuICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgcmVxdWVzdFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgaXNTdHJlYW1SZXNwb25zZSA9XG4gICAgICAgIHN1cHBvcnRzUmVzcG9uc2VTdHJlYW0gJiYgKHJlc3BvbnNlVHlwZSA9PT0gJ3N0cmVhbScgfHwgcmVzcG9uc2VUeXBlID09PSAncmVzcG9uc2UnKTtcblxuICAgICAgaWYgKFxuICAgICAgICBzdXBwb3J0c1Jlc3BvbnNlU3RyZWFtICYmXG4gICAgICAgIHJlc3BvbnNlLmJvZHkgJiZcbiAgICAgICAgKG9uRG93bmxvYWRQcm9ncmVzcyB8fCBoYXNNYXhDb250ZW50TGVuZ3RoIHx8IChpc1N0cmVhbVJlc3BvbnNlICYmIHVuc3Vic2NyaWJlKSlcbiAgICAgICkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0ge307XG5cbiAgICAgICAgWydzdGF0dXMnLCAnc3RhdHVzVGV4dCcsICdoZWFkZXJzJ10uZm9yRWFjaCgocHJvcCkgPT4ge1xuICAgICAgICAgIG9wdGlvbnNbcHJvcF0gPSByZXNwb25zZVtwcm9wXTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgcmVzcG9uc2VDb250ZW50TGVuZ3RoID0gdXRpbHMudG9GaW5pdGVOdW1iZXIocmVzcG9uc2UuaGVhZGVycy5nZXQoJ2NvbnRlbnQtbGVuZ3RoJykpO1xuXG4gICAgICAgIGNvbnN0IFtvblByb2dyZXNzLCBmbHVzaF0gPVxuICAgICAgICAgIChvbkRvd25sb2FkUHJvZ3Jlc3MgJiZcbiAgICAgICAgICAgIHByb2dyZXNzRXZlbnREZWNvcmF0b3IoXG4gICAgICAgICAgICAgIHJlc3BvbnNlQ29udGVudExlbmd0aCxcbiAgICAgICAgICAgICAgcHJvZ3Jlc3NFdmVudFJlZHVjZXIoYXN5bmNEZWNvcmF0b3Iob25Eb3dubG9hZFByb2dyZXNzKSwgdHJ1ZSlcbiAgICAgICAgICAgICkpIHx8XG4gICAgICAgICAgW107XG5cbiAgICAgICAgbGV0IGJ5dGVzUmVhZCA9IDA7XG4gICAgICAgIGNvbnN0IG9uQ2h1bmtQcm9ncmVzcyA9IChsb2FkZWRCeXRlcykgPT4ge1xuICAgICAgICAgIGlmIChoYXNNYXhDb250ZW50TGVuZ3RoKSB7XG4gICAgICAgICAgICBieXRlc1JlYWQgPSBsb2FkZWRCeXRlcztcbiAgICAgICAgICAgIGlmIChieXRlc1JlYWQgPiBtYXhDb250ZW50TGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICAgICAgICAgICdtYXhDb250ZW50TGVuZ3RoIHNpemUgb2YgJyArIG1heENvbnRlbnRMZW5ndGggKyAnIGV4Y2VlZGVkJyxcbiAgICAgICAgICAgICAgICBBeGlvc0Vycm9yLkVSUl9CQURfUkVTUE9OU0UsXG4gICAgICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgICAgIHJlcXVlc3RcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgb25Qcm9ncmVzcyAmJiBvblByb2dyZXNzKGxvYWRlZEJ5dGVzKTtcbiAgICAgICAgfTtcblxuICAgICAgICByZXNwb25zZSA9IG5ldyBSZXNwb25zZShcbiAgICAgICAgICB0cmFja1N0cmVhbShyZXNwb25zZS5ib2R5LCBERUZBVUxUX0NIVU5LX1NJWkUsIG9uQ2h1bmtQcm9ncmVzcywgKCkgPT4ge1xuICAgICAgICAgICAgZmx1c2ggJiYgZmx1c2goKTtcbiAgICAgICAgICAgIHVuc3Vic2NyaWJlICYmIHVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgb3B0aW9uc1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXNwb25zZVR5cGUgPSByZXNwb25zZVR5cGUgfHwgJ3RleHQnO1xuXG4gICAgICBsZXQgcmVzcG9uc2VEYXRhID0gYXdhaXQgcmVzb2x2ZXJzW3V0aWxzLmZpbmRLZXkocmVzb2x2ZXJzLCByZXNwb25zZVR5cGUpIHx8ICd0ZXh0J10oXG4gICAgICAgIHJlc3BvbnNlLFxuICAgICAgICBjb25maWdcbiAgICAgICk7XG5cbiAgICAgIC8vIEZhbGxiYWNrIGVuZm9yY2VtZW50IGZvciBlbnZpcm9ubWVudHMgd2l0aG91dCBSZWFkYWJsZVN0cmVhbSBzdXBwb3J0XG4gICAgICAvLyAobGVnYWN5IHJ1bnRpbWVzKS4gRGV0ZWN0IG1hdGVyaWFsaXplZCBzaXplIGZyb20gdHlwZWQgb3V0cHV0OyBza2lwXG4gICAgICAvLyBzdHJlYW1zL1Jlc3BvbnNlIHBhc3N0aHJvdWdoIHNpbmNlIHRoZSB1c2VyIHdpbGwgcmVhZCB0aG9zZSB0aGVtc2VsdmVzLlxuICAgICAgaWYgKGhhc01heENvbnRlbnRMZW5ndGggJiYgIXN1cHBvcnRzUmVzcG9uc2VTdHJlYW0gJiYgIWlzU3RyZWFtUmVzcG9uc2UpIHtcbiAgICAgICAgbGV0IG1hdGVyaWFsaXplZFNpemU7XG4gICAgICAgIGlmIChyZXNwb25zZURhdGEgIT0gbnVsbCkge1xuICAgICAgICAgIGlmICh0eXBlb2YgcmVzcG9uc2VEYXRhLmJ5dGVMZW5ndGggPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBtYXRlcmlhbGl6ZWRTaXplID0gcmVzcG9uc2VEYXRhLmJ5dGVMZW5ndGg7XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcmVzcG9uc2VEYXRhLnNpemUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBtYXRlcmlhbGl6ZWRTaXplID0gcmVzcG9uc2VEYXRhLnNpemU7XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcmVzcG9uc2VEYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgbWF0ZXJpYWxpemVkU2l6ZSA9XG4gICAgICAgICAgICAgIHR5cGVvZiBUZXh0RW5jb2RlciA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgICAgID8gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHJlc3BvbnNlRGF0YSkuYnl0ZUxlbmd0aFxuICAgICAgICAgICAgICAgIDogcmVzcG9uc2VEYXRhLmxlbmd0aDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBtYXRlcmlhbGl6ZWRTaXplID09PSAnbnVtYmVyJyAmJiBtYXRlcmlhbGl6ZWRTaXplID4gbWF4Q29udGVudExlbmd0aCkge1xuICAgICAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICAgICAgJ21heENvbnRlbnRMZW5ndGggc2l6ZSBvZiAnICsgbWF4Q29udGVudExlbmd0aCArICcgZXhjZWVkZWQnLFxuICAgICAgICAgICAgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFLFxuICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgcmVxdWVzdFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgIWlzU3RyZWFtUmVzcG9uc2UgJiYgdW5zdWJzY3JpYmUgJiYgdW5zdWJzY3JpYmUoKTtcblxuICAgICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwge1xuICAgICAgICAgIGRhdGE6IHJlc3BvbnNlRGF0YSxcbiAgICAgICAgICBoZWFkZXJzOiBBeGlvc0hlYWRlcnMuZnJvbShyZXNwb25zZS5oZWFkZXJzKSxcbiAgICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgICBzdGF0dXNUZXh0OiByZXNwb25zZS5zdGF0dXNUZXh0LFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICByZXF1ZXN0LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdW5zdWJzY3JpYmUgJiYgdW5zdWJzY3JpYmUoKTtcblxuICAgICAgLy8gU2FmYXJpIGNhbiBzdXJmYWNlIGZldGNoIGFib3J0cyBhcyBhIERPTUV4Y2VwdGlvbi1saWtlIG9iamVjdCB3aG9zZVxuICAgICAgLy8gYnJhbmRlZCBnZXR0ZXJzIHRocm93LiBQcmVmZXIgb3VyIGNvbXBvc2VkIHNpZ25hbCByZWFzb24gYmVmb3JlIHJlYWRpbmdcbiAgICAgIC8vIHRoZSBjYXVnaHQgZXJyb3IsIHByZXNlcnZpbmcgdGltZW91dCB2cyBjYW5jZWxsYXRpb24gc2VtYW50aWNzLlxuICAgICAgaWYgKGNvbXBvc2VkU2lnbmFsICYmIGNvbXBvc2VkU2lnbmFsLmFib3J0ZWQgJiYgY29tcG9zZWRTaWduYWwucmVhc29uIGluc3RhbmNlb2YgQXhpb3NFcnJvcikge1xuICAgICAgICBjb25zdCBjYW5jZWxlZEVycm9yID0gY29tcG9zZWRTaWduYWwucmVhc29uO1xuICAgICAgICBjYW5jZWxlZEVycm9yLmNvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgcmVxdWVzdCAmJiAoY2FuY2VsZWRFcnJvci5yZXF1ZXN0ID0gcmVxdWVzdCk7XG4gICAgICAgIGVyciAhPT0gY2FuY2VsZWRFcnJvciAmJiAoY2FuY2VsZWRFcnJvci5jYXVzZSA9IGVycik7XG4gICAgICAgIHRocm93IGNhbmNlbGVkRXJyb3I7XG4gICAgICB9XG5cbiAgICAgIGlmIChlcnIgJiYgZXJyLm5hbWUgPT09ICdUeXBlRXJyb3InICYmIC9Mb2FkIGZhaWxlZHxmZXRjaC9pLnRlc3QoZXJyLm1lc3NhZ2UpKSB7XG4gICAgICAgIHRocm93IE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgbmV3IEF4aW9zRXJyb3IoXG4gICAgICAgICAgICAnTmV0d29yayBFcnJvcicsXG4gICAgICAgICAgICBBeGlvc0Vycm9yLkVSUl9ORVRXT1JLLFxuICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICAgIGVyciAmJiBlcnIucmVzcG9uc2VcbiAgICAgICAgICApLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNhdXNlOiBlcnIuY2F1c2UgfHwgZXJyLFxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgQXhpb3NFcnJvci5mcm9tKGVyciwgZXJyICYmIGVyci5jb2RlLCBjb25maWcsIHJlcXVlc3QsIGVyciAmJiBlcnIucmVzcG9uc2UpO1xuICAgIH1cbiAgfTtcbn07XG5cbmNvbnN0IHNlZWRDYWNoZSA9IG5ldyBNYXAoKTtcblxuZXhwb3J0IGNvbnN0IGdldEZldGNoID0gKGNvbmZpZykgPT4ge1xuICBsZXQgZW52ID0gKGNvbmZpZyAmJiBjb25maWcuZW52KSB8fCB7fTtcbiAgY29uc3QgeyBmZXRjaCwgUmVxdWVzdCwgUmVzcG9uc2UgfSA9IGVudjtcbiAgY29uc3Qgc2VlZHMgPSBbUmVxdWVzdCwgUmVzcG9uc2UsIGZldGNoXTtcblxuICBsZXQgbGVuID0gc2VlZHMubGVuZ3RoLFxuICAgIGkgPSBsZW4sXG4gICAgc2VlZCxcbiAgICB0YXJnZXQsXG4gICAgbWFwID0gc2VlZENhY2hlO1xuXG4gIHdoaWxlIChpLS0pIHtcbiAgICBzZWVkID0gc2VlZHNbaV07XG4gICAgdGFyZ2V0ID0gbWFwLmdldChzZWVkKTtcblxuICAgIHRhcmdldCA9PT0gdW5kZWZpbmVkICYmIG1hcC5zZXQoc2VlZCwgKHRhcmdldCA9IGkgPyBuZXcgTWFwKCkgOiBmYWN0b3J5KGVudikpKTtcblxuICAgIG1hcCA9IHRhcmdldDtcbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59O1xuXG5jb25zdCBhZGFwdGVyID0gZ2V0RmV0Y2goKTtcblxuZXhwb3J0IGRlZmF1bHQgYWRhcHRlcjtcbiIsIi8qKlxuICogRXN0aW1hdGUgZGVjb2RlZCBieXRlIGxlbmd0aCBvZiBhIGRhdGE6Ly8gVVJMICp3aXRob3V0KiBhbGxvY2F0aW5nIGxhcmdlIGJ1ZmZlcnMuXG4gKiAtIEZvciBiYXNlNjQ6IGNvbXB1dGUgZXhhY3QgZGVjb2RlZCBzaXplIHVzaW5nIGxlbmd0aCBhbmQgcGFkZGluZztcbiAqICAgICAgICAgICAgICAgaGFuZGxlICVYWCBhdCB0aGUgY2hhcmFjdGVyLWNvdW50IGxldmVsIChubyBzdHJpbmcgYWxsb2NhdGlvbikuXG4gKiAtIEZvciBub24tYmFzZTY0OiB1c2UgVVRGLTggYnl0ZUxlbmd0aCBvZiB0aGUgZW5jb2RlZCBib2R5IGFzIGEgc2FmZSB1cHBlciBib3VuZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBlc3RpbWF0ZURhdGFVUkxEZWNvZGVkQnl0ZXModXJsKSB7XG4gIGlmICghdXJsIHx8IHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSByZXR1cm4gMDtcbiAgaWYgKCF1cmwuc3RhcnRzV2l0aCgnZGF0YTonKSkgcmV0dXJuIDA7XG5cbiAgY29uc3QgY29tbWEgPSB1cmwuaW5kZXhPZignLCcpO1xuICBpZiAoY29tbWEgPCAwKSByZXR1cm4gMDtcblxuICBjb25zdCBtZXRhID0gdXJsLnNsaWNlKDUsIGNvbW1hKTtcbiAgY29uc3QgYm9keSA9IHVybC5zbGljZShjb21tYSArIDEpO1xuICBjb25zdCBpc0Jhc2U2NCA9IC87YmFzZTY0L2kudGVzdChtZXRhKTtcblxuICBpZiAoaXNCYXNlNjQpIHtcbiAgICBsZXQgZWZmZWN0aXZlTGVuID0gYm9keS5sZW5ndGg7XG4gICAgY29uc3QgbGVuID0gYm9keS5sZW5ndGg7IC8vIGNhY2hlIGxlbmd0aFxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgaWYgKGJvZHkuY2hhckNvZGVBdChpKSA9PT0gMzcgLyogJyUnICovICYmIGkgKyAyIDwgbGVuKSB7XG4gICAgICAgIGNvbnN0IGEgPSBib2R5LmNoYXJDb2RlQXQoaSArIDEpO1xuICAgICAgICBjb25zdCBiID0gYm9keS5jaGFyQ29kZUF0KGkgKyAyKTtcbiAgICAgICAgY29uc3QgaXNIZXggPVxuICAgICAgICAgICgoYSA+PSA0OCAmJiBhIDw9IDU3KSB8fCAoYSA+PSA2NSAmJiBhIDw9IDcwKSB8fCAoYSA+PSA5NyAmJiBhIDw9IDEwMikpICYmXG4gICAgICAgICAgKChiID49IDQ4ICYmIGIgPD0gNTcpIHx8IChiID49IDY1ICYmIGIgPD0gNzApIHx8IChiID49IDk3ICYmIGIgPD0gMTAyKSk7XG5cbiAgICAgICAgaWYgKGlzSGV4KSB7XG4gICAgICAgICAgZWZmZWN0aXZlTGVuIC09IDI7XG4gICAgICAgICAgaSArPSAyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHBhZCA9IDA7XG4gICAgbGV0IGlkeCA9IGxlbiAtIDE7XG5cbiAgICBjb25zdCB0YWlsSXNQY3QzRCA9IChqKSA9PlxuICAgICAgaiA+PSAyICYmXG4gICAgICBib2R5LmNoYXJDb2RlQXQoaiAtIDIpID09PSAzNyAmJiAvLyAnJSdcbiAgICAgIGJvZHkuY2hhckNvZGVBdChqIC0gMSkgPT09IDUxICYmIC8vICczJ1xuICAgICAgKGJvZHkuY2hhckNvZGVBdChqKSA9PT0gNjggfHwgYm9keS5jaGFyQ29kZUF0KGopID09PSAxMDApOyAvLyAnRCcgb3IgJ2QnXG5cbiAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgIGlmIChib2R5LmNoYXJDb2RlQXQoaWR4KSA9PT0gNjEgLyogJz0nICovKSB7XG4gICAgICAgIHBhZCsrO1xuICAgICAgICBpZHgtLTtcbiAgICAgIH0gZWxzZSBpZiAodGFpbElzUGN0M0QoaWR4KSkge1xuICAgICAgICBwYWQrKztcbiAgICAgICAgaWR4IC09IDM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBhZCA9PT0gMSAmJiBpZHggPj0gMCkge1xuICAgICAgaWYgKGJvZHkuY2hhckNvZGVBdChpZHgpID09PSA2MSAvKiAnPScgKi8pIHtcbiAgICAgICAgcGFkKys7XG4gICAgICB9IGVsc2UgaWYgKHRhaWxJc1BjdDNEKGlkeCkpIHtcbiAgICAgICAgcGFkKys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZ3JvdXBzID0gTWF0aC5mbG9vcihlZmZlY3RpdmVMZW4gLyA0KTtcbiAgICBjb25zdCBieXRlcyA9IGdyb3VwcyAqIDMgLSAocGFkIHx8IDApO1xuICAgIHJldHVybiBieXRlcyA+IDAgPyBieXRlcyA6IDA7XG4gIH1cblxuICBpZiAodHlwZW9mIEJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIEJ1ZmZlci5ieXRlTGVuZ3RoID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5ieXRlTGVuZ3RoKGJvZHksICd1dGY4Jyk7XG4gIH1cblxuICAvLyBDb21wdXRlIFVURi04IGJ5dGUgbGVuZ3RoIGRpcmVjdGx5IGZyb20gVVRGLTE2IGNvZGUgdW5pdHMgd2l0aG91dCBhbGxvY2F0aW5nXG4gIC8vIGEgYnl0ZSBidWZmZXIgKFRleHRFbmNvZGVyLmVuY29kZSB3b3VsZCBkZWZlYXQgdGhlIERvUyBndWFyZCBvbiBsYXJnZSBib2RpZXMpLlxuICAvLyBVc2luZyBib2R5Lmxlbmd0aCBoZXJlIHdvdWxkIHVuZGVyY291bnQgbm9uLUFTQ0lJIChlLmcuICfigqwnIGlzIDEgY29kZSB1bml0XG4gIC8vIGJ1dCAzIFVURi04IGJ5dGVzKS5cbiAgbGV0IGJ5dGVzID0gMDtcbiAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGJvZHkubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBjb25zdCBjID0gYm9keS5jaGFyQ29kZUF0KGkpO1xuICAgIGlmIChjIDwgMHg4MCkge1xuICAgICAgYnl0ZXMgKz0gMTtcbiAgICB9IGVsc2UgaWYgKGMgPCAweDgwMCkge1xuICAgICAgYnl0ZXMgKz0gMjtcbiAgICB9IGVsc2UgaWYgKGMgPj0gMHhkODAwICYmIGMgPD0gMHhkYmZmICYmIGkgKyAxIDwgbGVuKSB7XG4gICAgICBjb25zdCBuZXh0ID0gYm9keS5jaGFyQ29kZUF0KGkgKyAxKTtcbiAgICAgIGlmIChuZXh0ID49IDB4ZGMwMCAmJiBuZXh0IDw9IDB4ZGZmZikge1xuICAgICAgICBieXRlcyArPSA0O1xuICAgICAgICBpKys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBieXRlcyArPSAzO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBieXRlcyArPSAzO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYnl0ZXM7XG59XG4iLCJpbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IGh0dHBBZGFwdGVyIGZyb20gJy4vaHR0cC5qcyc7XG5pbXBvcnQgeGhyQWRhcHRlciBmcm9tICcuL3hoci5qcyc7XG5pbXBvcnQgKiBhcyBmZXRjaEFkYXB0ZXIgZnJvbSAnLi9mZXRjaC5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuXG4vKipcbiAqIEtub3duIGFkYXB0ZXJzIG1hcHBpbmcuXG4gKiBQcm92aWRlcyBlbnZpcm9ubWVudC1zcGVjaWZpYyBhZGFwdGVycyBmb3IgQXhpb3M6XG4gKiAtIGBodHRwYCBmb3IgTm9kZS5qc1xuICogLSBgeGhyYCBmb3IgYnJvd3NlcnNcbiAqIC0gYGZldGNoYCBmb3IgZmV0Y2ggQVBJLWJhc2VkIHJlcXVlc3RzXG4gKlxuICogQHR5cGUge09iamVjdDxzdHJpbmcsIEZ1bmN0aW9ufE9iamVjdD59XG4gKi9cbmNvbnN0IGtub3duQWRhcHRlcnMgPSB7XG4gIGh0dHA6IGh0dHBBZGFwdGVyLFxuICB4aHI6IHhockFkYXB0ZXIsXG4gIGZldGNoOiB7XG4gICAgZ2V0OiBmZXRjaEFkYXB0ZXIuZ2V0RmV0Y2gsXG4gIH0sXG59O1xuXG4vLyBBc3NpZ24gYWRhcHRlciBuYW1lcyBmb3IgZWFzaWVyIGRlYnVnZ2luZyBhbmQgaWRlbnRpZmljYXRpb25cbnV0aWxzLmZvckVhY2goa25vd25BZGFwdGVycywgKGZuLCB2YWx1ZSkgPT4ge1xuICBpZiAoZm4pIHtcbiAgICB0cnkge1xuICAgICAgLy8gTnVsbC1wcm90byBkZXNjcmlwdG9ycyBzbyBhIHBvbGx1dGVkIE9iamVjdC5wcm90b3R5cGUuZ2V0IGNhbm5vdCB0dXJuXG4gICAgICAvLyB0aGVzZSBkYXRhIGRlc2NyaXB0b3JzIGludG8gYWNjZXNzb3IgZGVzY3JpcHRvcnMgb24gdGhlIHdheSBpbi5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgJ25hbWUnLCB7IF9fcHJvdG9fXzogbnVsbCwgdmFsdWUgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgJ2FkYXB0ZXJOYW1lJywgeyBfX3Byb3RvX186IG51bGwsIHZhbHVlIH0pO1xuICB9XG59KTtcblxuLyoqXG4gKiBSZW5kZXIgYSByZWplY3Rpb24gcmVhc29uIHN0cmluZyBmb3IgdW5rbm93biBvciB1bnN1cHBvcnRlZCBhZGFwdGVyc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb25cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmNvbnN0IHJlbmRlclJlYXNvbiA9IChyZWFzb24pID0+IGAtICR7cmVhc29ufWA7XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIGFkYXB0ZXIgaXMgcmVzb2x2ZWQgKGZ1bmN0aW9uLCBudWxsLCBvciBmYWxzZSlcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufG51bGx8ZmFsc2V9IGFkYXB0ZXJcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5jb25zdCBpc1Jlc29sdmVkSGFuZGxlID0gKGFkYXB0ZXIpID0+XG4gIHV0aWxzLmlzRnVuY3Rpb24oYWRhcHRlcikgfHwgYWRhcHRlciA9PT0gbnVsbCB8fCBhZGFwdGVyID09PSBmYWxzZTtcblxuLyoqXG4gKiBHZXQgdGhlIGZpcnN0IHN1aXRhYmxlIGFkYXB0ZXIgZnJvbSB0aGUgcHJvdmlkZWQgbGlzdC5cbiAqIFRyaWVzIGVhY2ggYWRhcHRlciBpbiBvcmRlciB1bnRpbCBhIHN1cHBvcnRlZCBvbmUgaXMgZm91bmQuXG4gKiBUaHJvd3MgYW4gQXhpb3NFcnJvciBpZiBubyBhZGFwdGVyIGlzIHN1aXRhYmxlLlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nfEZ1bmN0aW9uPnxzdHJpbmd8RnVuY3Rpb259IGFkYXB0ZXJzIC0gQWRhcHRlcihzKSBieSBuYW1lIG9yIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAtIEF4aW9zIHJlcXVlc3QgY29uZmlndXJhdGlvblxuICogQHRocm93cyB7QXhpb3NFcnJvcn0gSWYgbm8gc3VpdGFibGUgYWRhcHRlciBpcyBhdmFpbGFibGVcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gVGhlIHJlc29sdmVkIGFkYXB0ZXIgZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gZ2V0QWRhcHRlcihhZGFwdGVycywgY29uZmlnKSB7XG4gIGFkYXB0ZXJzID0gdXRpbHMuaXNBcnJheShhZGFwdGVycykgPyBhZGFwdGVycyA6IFthZGFwdGVyc107XG5cbiAgY29uc3QgeyBsZW5ndGggfSA9IGFkYXB0ZXJzO1xuICBsZXQgbmFtZU9yQWRhcHRlcjtcbiAgbGV0IGFkYXB0ZXI7XG5cbiAgY29uc3QgcmVqZWN0ZWRSZWFzb25zID0ge307XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIG5hbWVPckFkYXB0ZXIgPSBhZGFwdGVyc1tpXTtcbiAgICBsZXQgaWQ7XG5cbiAgICBhZGFwdGVyID0gbmFtZU9yQWRhcHRlcjtcblxuICAgIGlmICghaXNSZXNvbHZlZEhhbmRsZShuYW1lT3JBZGFwdGVyKSkge1xuICAgICAgYWRhcHRlciA9IGtub3duQWRhcHRlcnNbKGlkID0gU3RyaW5nKG5hbWVPckFkYXB0ZXIpKS50b0xvd2VyQ2FzZSgpXTtcblxuICAgICAgaWYgKGFkYXB0ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihgVW5rbm93biBhZGFwdGVyICcke2lkfSdgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYWRhcHRlciAmJiAodXRpbHMuaXNGdW5jdGlvbihhZGFwdGVyKSB8fCAoYWRhcHRlciA9IGFkYXB0ZXIuZ2V0KGNvbmZpZykpKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmVqZWN0ZWRSZWFzb25zW2lkIHx8ICcjJyArIGldID0gYWRhcHRlcjtcbiAgfVxuXG4gIGlmICghYWRhcHRlcikge1xuICAgIGNvbnN0IHJlYXNvbnMgPSBPYmplY3QuZW50cmllcyhyZWplY3RlZFJlYXNvbnMpLm1hcChcbiAgICAgIChbaWQsIHN0YXRlXSkgPT5cbiAgICAgICAgYGFkYXB0ZXIgJHtpZH0gYCArXG4gICAgICAgIChzdGF0ZSA9PT0gZmFsc2UgPyAnaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZW52aXJvbm1lbnQnIDogJ2lzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkJylcbiAgICApO1xuXG4gICAgbGV0IHMgPSBsZW5ndGhcbiAgICAgID8gcmVhc29ucy5sZW5ndGggPiAxXG4gICAgICAgID8gJ3NpbmNlIDpcXG4nICsgcmVhc29ucy5tYXAocmVuZGVyUmVhc29uKS5qb2luKCdcXG4nKVxuICAgICAgICA6ICcgJyArIHJlbmRlclJlYXNvbihyZWFzb25zWzBdKVxuICAgICAgOiAnYXMgbm8gYWRhcHRlciBzcGVjaWZpZWQnO1xuXG4gICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoXG4gICAgICBgVGhlcmUgaXMgbm8gc3VpdGFibGUgYWRhcHRlciB0byBkaXNwYXRjaCB0aGUgcmVxdWVzdCBgICsgcyxcbiAgICAgICdFUlJfTk9UX1NVUFBPUlQnXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBhZGFwdGVyO1xufVxuXG4vKipcbiAqIEV4cG9ydHMgQXhpb3MgYWRhcHRlcnMgYW5kIHV0aWxpdHkgdG8gcmVzb2x2ZSBhbiBhZGFwdGVyXG4gKi9cbmV4cG9ydCBkZWZhdWx0IHtcbiAgLyoqXG4gICAqIFJlc29sdmUgYW4gYWRhcHRlciBmcm9tIGEgbGlzdCBvZiBhZGFwdGVyIG5hbWVzIG9yIGZ1bmN0aW9ucy5cbiAgICogQHR5cGUge0Z1bmN0aW9ufVxuICAgKi9cbiAgZ2V0QWRhcHRlcixcblxuICAvKipcbiAgICogRXhwb3NlcyBhbGwga25vd24gYWRhcHRlcnNcbiAgICogQHR5cGUge09iamVjdDxzdHJpbmcsIEZ1bmN0aW9ufE9iamVjdD59XG4gICAqL1xuICBhZGFwdGVyczoga25vd25BZGFwdGVycyxcbn07XG4iLCIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc3RyaWN0XG5leHBvcnQgZGVmYXVsdCBudWxsO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdHJhbnNmb3JtRGF0YSBmcm9tICcuL3RyYW5zZm9ybURhdGEuanMnO1xuaW1wb3J0IGlzQ2FuY2VsIGZyb20gJy4uL2NhbmNlbC9pc0NhbmNlbC5qcyc7XG5pbXBvcnQgZGVmYXVsdHMgZnJvbSAnLi4vZGVmYXVsdHMvaW5kZXguanMnO1xuaW1wb3J0IENhbmNlbGVkRXJyb3IgZnJvbSAnLi4vY2FuY2VsL0NhbmNlbGVkRXJyb3IuanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuLi9jb3JlL0F4aW9zSGVhZGVycy5qcyc7XG5pbXBvcnQgYWRhcHRlcnMgZnJvbSAnLi4vYWRhcHRlcnMvYWRhcHRlcnMuanMnO1xuXG4vKipcbiAqIFRocm93cyBhIGBDYW5jZWxlZEVycm9yYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyB0aGF0IGlzIHRvIGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0XG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKSB7XG4gIGlmIChjb25maWcuY2FuY2VsVG9rZW4pIHtcbiAgICBjb25maWcuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpO1xuICB9XG5cbiAgaWYgKGNvbmZpZy5zaWduYWwgJiYgY29uZmlnLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgdGhyb3cgbmV3IENhbmNlbGVkRXJyb3IobnVsbCwgY29uZmlnKTtcbiAgfVxufVxuXG4vKipcbiAqIERpc3BhdGNoIGEgcmVxdWVzdCB0byB0aGUgc2VydmVyIHVzaW5nIHRoZSBjb25maWd1cmVkIGFkYXB0ZXIuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHRoYXQgaXMgdG8gYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RcbiAqXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gVGhlIFByb21pc2UgdG8gYmUgZnVsZmlsbGVkXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRpc3BhdGNoUmVxdWVzdChjb25maWcpIHtcbiAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gIGNvbmZpZy5oZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20oY29uZmlnLmhlYWRlcnMpO1xuXG4gIC8vIFRyYW5zZm9ybSByZXF1ZXN0IGRhdGFcbiAgY29uZmlnLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoY29uZmlnLCBjb25maWcudHJhbnNmb3JtUmVxdWVzdCk7XG5cbiAgaWYgKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXS5pbmRleE9mKGNvbmZpZy5tZXRob2QpICE9PSAtMSkge1xuICAgIGNvbmZpZy5oZWFkZXJzLnNldENvbnRlbnRUeXBlKCdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLCBmYWxzZSk7XG4gIH1cblxuICBjb25zdCBhZGFwdGVyID0gYWRhcHRlcnMuZ2V0QWRhcHRlcihjb25maWcuYWRhcHRlciB8fCBkZWZhdWx0cy5hZGFwdGVyLCBjb25maWcpO1xuXG4gIHJldHVybiBhZGFwdGVyKGNvbmZpZykudGhlbihcbiAgICBmdW5jdGlvbiBvbkFkYXB0ZXJSZXNvbHV0aW9uKHJlc3BvbnNlKSB7XG4gICAgICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgICAgIC8vIEV4cG9zZSB0aGUgY3VycmVudCByZXNwb25zZSBvbiBjb25maWcgc28gdGhhdCB0cmFuc2Zvcm1SZXNwb25zZSBjYW5cbiAgICAgIC8vIGF0dGFjaCBpdCB0byBhbnkgQXhpb3NFcnJvciBpdCB0aHJvd3MgKGUuZy4gb24gSlNPTiBwYXJzZSBmYWlsdXJlKS5cbiAgICAgIC8vIFdlIGNsZWFuIGl0IHVwIGFmdGVyd2FyZHMgdG8gYXZvaWQgcG9sbHV0aW5nIHRoZSBjb25maWcgb2JqZWN0LlxuICAgICAgY29uZmlnLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gICAgICB0cnkge1xuICAgICAgICByZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKGNvbmZpZywgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlLCByZXNwb25zZSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBkZWxldGUgY29uZmlnLnJlc3BvbnNlO1xuICAgICAgfVxuXG4gICAgICByZXNwb25zZS5oZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20ocmVzcG9uc2UuaGVhZGVycyk7XG5cbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxuICAgIGZ1bmN0aW9uIG9uQWRhcHRlclJlamVjdGlvbihyZWFzb24pIHtcbiAgICAgIGlmICghaXNDYW5jZWwocmVhc29uKSkge1xuICAgICAgICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgICAgICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICAgICAgaWYgKHJlYXNvbiAmJiByZWFzb24ucmVzcG9uc2UpIHtcbiAgICAgICAgICBjb25maWcucmVzcG9uc2UgPSByZWFzb24ucmVzcG9uc2U7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlYXNvbi5yZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZSxcbiAgICAgICAgICAgICAgcmVhc29uLnJlc3BvbnNlXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBkZWxldGUgY29uZmlnLnJlc3BvbnNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZWFzb24ucmVzcG9uc2UuaGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKHJlYXNvbi5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVhc29uKTtcbiAgICB9XG4gICk7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7IFZFUlNJT04gfSBmcm9tICcuLi9lbnYvZGF0YS5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuXG5jb25zdCB2YWxpZGF0b3JzID0ge307XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5bJ29iamVjdCcsICdib29sZWFuJywgJ251bWJlcicsICdmdW5jdGlvbicsICdzdHJpbmcnLCAnc3ltYm9sJ10uZm9yRWFjaCgodHlwZSwgaSkgPT4ge1xuICB2YWxpZGF0b3JzW3R5cGVdID0gZnVuY3Rpb24gdmFsaWRhdG9yKHRoaW5nKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGluZyA9PT0gdHlwZSB8fCAnYScgKyAoaSA8IDEgPyAnbiAnIDogJyAnKSArIHR5cGU7XG4gIH07XG59KTtcblxuY29uc3QgZGVwcmVjYXRlZFdhcm5pbmdzID0ge307XG5cbi8qKlxuICogVHJhbnNpdGlvbmFsIG9wdGlvbiB2YWxpZGF0b3JcbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufGJvb2xlYW4/fSB2YWxpZGF0b3IgLSBzZXQgdG8gZmFsc2UgaWYgdGhlIHRyYW5zaXRpb25hbCBvcHRpb24gaGFzIGJlZW4gcmVtb3ZlZFxuICogQHBhcmFtIHtzdHJpbmc/fSB2ZXJzaW9uIC0gZGVwcmVjYXRlZCB2ZXJzaW9uIC8gcmVtb3ZlZCBzaW5jZSB2ZXJzaW9uXG4gKiBAcGFyYW0ge3N0cmluZz99IG1lc3NhZ2UgLSBzb21lIG1lc3NhZ2Ugd2l0aCBhZGRpdGlvbmFsIGluZm9cbiAqXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259XG4gKi9cbnZhbGlkYXRvcnMudHJhbnNpdGlvbmFsID0gZnVuY3Rpb24gdHJhbnNpdGlvbmFsKHZhbGlkYXRvciwgdmVyc2lvbiwgbWVzc2FnZSkge1xuICBmdW5jdGlvbiBmb3JtYXRNZXNzYWdlKG9wdCwgZGVzYykge1xuICAgIHJldHVybiAoXG4gICAgICAnW0F4aW9zIHYnICtcbiAgICAgIFZFUlNJT04gK1xuICAgICAgXCJdIFRyYW5zaXRpb25hbCBvcHRpb24gJ1wiICtcbiAgICAgIG9wdCArXG4gICAgICBcIidcIiArXG4gICAgICBkZXNjICtcbiAgICAgIChtZXNzYWdlID8gJy4gJyArIG1lc3NhZ2UgOiAnJylcbiAgICApO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuICh2YWx1ZSwgb3B0LCBvcHRzKSA9PiB7XG4gICAgaWYgKHZhbGlkYXRvciA9PT0gZmFsc2UpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICBmb3JtYXRNZXNzYWdlKG9wdCwgJyBoYXMgYmVlbiByZW1vdmVkJyArICh2ZXJzaW9uID8gJyBpbiAnICsgdmVyc2lvbiA6ICcnKSksXG4gICAgICAgIEF4aW9zRXJyb3IuRVJSX0RFUFJFQ0FURURcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHZlcnNpb24gJiYgIWRlcHJlY2F0ZWRXYXJuaW5nc1tvcHRdKSB7XG4gICAgICBkZXByZWNhdGVkV2FybmluZ3Nbb3B0XSA9IHRydWU7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBmb3JtYXRNZXNzYWdlKFxuICAgICAgICAgIG9wdCxcbiAgICAgICAgICAnIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdicgKyB2ZXJzaW9uICsgJyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZSdcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdG9yID8gdmFsaWRhdG9yKHZhbHVlLCBvcHQsIG9wdHMpIDogdHJ1ZTtcbiAgfTtcbn07XG5cbnZhbGlkYXRvcnMuc3BlbGxpbmcgPSBmdW5jdGlvbiBzcGVsbGluZyhjb3JyZWN0U3BlbGxpbmcpIHtcbiAgcmV0dXJuICh2YWx1ZSwgb3B0KSA9PiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICBjb25zb2xlLndhcm4oYCR7b3B0fSBpcyBsaWtlbHkgYSBtaXNzcGVsbGluZyBvZiAke2NvcnJlY3RTcGVsbGluZ31gKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcbn07XG5cbi8qKlxuICogQXNzZXJ0IG9iamVjdCdzIHByb3BlcnRpZXMgdHlwZVxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge29iamVjdH0gc2NoZW1hXG4gKiBAcGFyYW0ge2Jvb2xlYW4/fSBhbGxvd1Vua25vd25cbiAqXG4gKiBAcmV0dXJucyB7b2JqZWN0fVxuICovXG5cbmZ1bmN0aW9uIGFzc2VydE9wdGlvbnMob3B0aW9ucywgc2NoZW1hLCBhbGxvd1Vua25vd24pIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0JywgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTl9WQUxVRSk7XG4gIH1cbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpO1xuICBsZXQgaSA9IGtleXMubGVuZ3RoO1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIGNvbnN0IG9wdCA9IGtleXNbaV07XG4gICAgLy8gVXNlIGhhc093blByb3BlcnR5IHNvIGEgcG9sbHV0ZWQgT2JqZWN0LnByb3RvdHlwZS48b3B0PiBjYW5ub3Qgc3VwcGx5XG4gICAgLy8gYSBub24tZnVuY3Rpb24gdmFsaWRhdG9yIGFuZCBjYXVzZSBhIFR5cGVFcnJvci5cbiAgICBjb25zdCB2YWxpZGF0b3IgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc2NoZW1hLCBvcHQpID8gc2NoZW1hW29wdF0gOiB1bmRlZmluZWQ7XG4gICAgaWYgKHZhbGlkYXRvcikge1xuICAgICAgY29uc3QgdmFsdWUgPSBvcHRpb25zW29wdF07XG4gICAgICBjb25zdCByZXN1bHQgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbGlkYXRvcih2YWx1ZSwgb3B0LCBvcHRpb25zKTtcbiAgICAgIGlmIChyZXN1bHQgIT09IHRydWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoXG4gICAgICAgICAgJ29wdGlvbiAnICsgb3B0ICsgJyBtdXN0IGJlICcgKyByZXN1bHQsXG4gICAgICAgICAgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTl9WQUxVRVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChhbGxvd1Vua25vd24gIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdVbmtub3duIG9wdGlvbiAnICsgb3B0LCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBhc3NlcnRPcHRpb25zLFxuICB2YWxpZGF0b3JzLFxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBidWlsZFVSTCBmcm9tICcuLi9oZWxwZXJzL2J1aWxkVVJMLmpzJztcbmltcG9ydCBJbnRlcmNlcHRvck1hbmFnZXIgZnJvbSAnLi9JbnRlcmNlcHRvck1hbmFnZXIuanMnO1xuaW1wb3J0IGRpc3BhdGNoUmVxdWVzdCBmcm9tICcuL2Rpc3BhdGNoUmVxdWVzdC5qcyc7XG5pbXBvcnQgbWVyZ2VDb25maWcgZnJvbSAnLi9tZXJnZUNvbmZpZy5qcyc7XG5pbXBvcnQgYnVpbGRGdWxsUGF0aCBmcm9tICcuL2J1aWxkRnVsbFBhdGguanMnO1xuaW1wb3J0IHZhbGlkYXRvciBmcm9tICcuLi9oZWxwZXJzL3ZhbGlkYXRvci5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gJy4vQXhpb3NIZWFkZXJzLmpzJztcbmltcG9ydCB0cmFuc2l0aW9uYWxEZWZhdWx0cyBmcm9tICcuLi9kZWZhdWx0cy90cmFuc2l0aW9uYWwuanMnO1xuXG5jb25zdCB2YWxpZGF0b3JzID0gdmFsaWRhdG9yLnZhbGlkYXRvcnM7XG5cbi8qKlxuICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlQ29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKlxuICogQHJldHVybiB7QXhpb3N9IEEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKi9cbmNsYXNzIEF4aW9zIHtcbiAgY29uc3RydWN0b3IoaW5zdGFuY2VDb25maWcpIHtcbiAgICB0aGlzLmRlZmF1bHRzID0gaW5zdGFuY2VDb25maWcgfHwge307XG4gICAgdGhpcy5pbnRlcmNlcHRvcnMgPSB7XG4gICAgICByZXF1ZXN0OiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyKCksXG4gICAgICByZXNwb25zZTogbmV3IEludGVyY2VwdG9yTWFuYWdlcigpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGlzcGF0Y2ggYSByZXF1ZXN0XG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfE9iamVjdH0gY29uZmlnT3JVcmwgVGhlIGNvbmZpZyBzcGVjaWZpYyBmb3IgdGhpcyByZXF1ZXN0IChtZXJnZWQgd2l0aCB0aGlzLmRlZmF1bHRzKVxuICAgKiBAcGFyYW0gez9PYmplY3R9IGNvbmZpZ1xuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gVGhlIFByb21pc2UgdG8gYmUgZnVsZmlsbGVkXG4gICAqL1xuICBhc3luYyByZXF1ZXN0KGNvbmZpZ09yVXJsLCBjb25maWcpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX3JlcXVlc3QoY29uZmlnT3JVcmwsIGNvbmZpZyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgbGV0IGR1bW15ID0ge307XG5cbiAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UgPyBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShkdW1teSkgOiAoZHVtbXkgPSBuZXcgRXJyb3IoKSk7XG5cbiAgICAgICAgLy8gc2xpY2Ugb2ZmIHRoZSBFcnJvcjogLi4uIGxpbmVcbiAgICAgICAgY29uc3Qgc3RhY2sgPSAoKCkgPT4ge1xuICAgICAgICAgIGlmICghZHVtbXkuc3RhY2spIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBmaXJzdE5ld2xpbmVJbmRleCA9IGR1bW15LnN0YWNrLmluZGV4T2YoJ1xcbicpO1xuXG4gICAgICAgICAgcmV0dXJuIGZpcnN0TmV3bGluZUluZGV4ID09PSAtMSA/ICcnIDogZHVtbXkuc3RhY2suc2xpY2UoZmlyc3ROZXdsaW5lSW5kZXggKyAxKTtcbiAgICAgICAgfSkoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoIWVyci5zdGFjaykge1xuICAgICAgICAgICAgZXJyLnN0YWNrID0gc3RhY2s7XG4gICAgICAgICAgICAvLyBtYXRjaCB3aXRob3V0IHRoZSAyIHRvcCBzdGFjayBsaW5lc1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3RhY2spIHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0TmV3bGluZUluZGV4ID0gc3RhY2suaW5kZXhPZignXFxuJyk7XG4gICAgICAgICAgICBjb25zdCBzZWNvbmROZXdsaW5lSW5kZXggPVxuICAgICAgICAgICAgICBmaXJzdE5ld2xpbmVJbmRleCA9PT0gLTEgPyAtMSA6IHN0YWNrLmluZGV4T2YoJ1xcbicsIGZpcnN0TmV3bGluZUluZGV4ICsgMSk7XG4gICAgICAgICAgICBjb25zdCBzdGFja1dpdGhvdXRUd29Ub3BMaW5lcyA9XG4gICAgICAgICAgICAgIHNlY29uZE5ld2xpbmVJbmRleCA9PT0gLTEgPyAnJyA6IHN0YWNrLnNsaWNlKHNlY29uZE5ld2xpbmVJbmRleCArIDEpO1xuXG4gICAgICAgICAgICBpZiAoIVN0cmluZyhlcnIuc3RhY2spLmVuZHNXaXRoKHN0YWNrV2l0aG91dFR3b1RvcExpbmVzKSkge1xuICAgICAgICAgICAgICBlcnIuc3RhY2sgKz0gJ1xcbicgKyBzdGFjaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAvLyBpZ25vcmUgdGhlIGNhc2Ugd2hlcmUgXCJzdGFja1wiIGlzIGFuIHVuLXdyaXRhYmxlIHByb3BlcnR5XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxuXG4gIF9yZXF1ZXN0KGNvbmZpZ09yVXJsLCBjb25maWcpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICAvLyBBbGxvdyBmb3IgYXhpb3MoJ2V4YW1wbGUvdXJsJ1ssIGNvbmZpZ10pIGEgbGEgZmV0Y2ggQVBJXG4gICAgaWYgKHR5cGVvZiBjb25maWdPclVybCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcbiAgICAgIGNvbmZpZy51cmwgPSBjb25maWdPclVybDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uZmlnID0gY29uZmlnT3JVcmwgfHwge307XG4gICAgfVxuXG4gICAgY29uZmlnID0gbWVyZ2VDb25maWcodGhpcy5kZWZhdWx0cywgY29uZmlnKTtcblxuICAgIGNvbnN0IHsgdHJhbnNpdGlvbmFsLCBwYXJhbXNTZXJpYWxpemVyLCBoZWFkZXJzIH0gPSBjb25maWc7XG5cbiAgICBpZiAodHJhbnNpdGlvbmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhbGlkYXRvci5hc3NlcnRPcHRpb25zKFxuICAgICAgICB0cmFuc2l0aW9uYWwsXG4gICAgICAgIHtcbiAgICAgICAgICBzaWxlbnRKU09OUGFyc2luZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKSxcbiAgICAgICAgICBmb3JjZWRKU09OUGFyc2luZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKSxcbiAgICAgICAgICBjbGFyaWZ5VGltZW91dEVycm9yOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pLFxuICAgICAgICAgIGxlZ2FjeUludGVyY2VwdG9yUmVxUmVzT3JkZXJpbmc6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiksXG4gICAgICAgICAgYWR2ZXJ0aXNlWnN0ZEFjY2VwdEVuY29kaW5nOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pLFxuICAgICAgICB9LFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zU2VyaWFsaXplciAhPSBudWxsKSB7XG4gICAgICBpZiAodXRpbHMuaXNGdW5jdGlvbihwYXJhbXNTZXJpYWxpemVyKSkge1xuICAgICAgICBjb25maWcucGFyYW1zU2VyaWFsaXplciA9IHtcbiAgICAgICAgICBzZXJpYWxpemU6IHBhcmFtc1NlcmlhbGl6ZXIsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWxpZGF0b3IuYXNzZXJ0T3B0aW9ucyhcbiAgICAgICAgICBwYXJhbXNTZXJpYWxpemVyLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGVuY29kZTogdmFsaWRhdG9ycy5mdW5jdGlvbixcbiAgICAgICAgICAgIHNlcmlhbGl6ZTogdmFsaWRhdG9ycy5mdW5jdGlvbixcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRydWVcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZXQgY29uZmlnLmFsbG93QWJzb2x1dGVVcmxzXG4gICAgaWYgKGNvbmZpZy5hbGxvd0Fic29sdXRlVXJscyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBkbyBub3RoaW5nXG4gICAgfSBlbHNlIGlmICh0aGlzLmRlZmF1bHRzLmFsbG93QWJzb2x1dGVVcmxzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbmZpZy5hbGxvd0Fic29sdXRlVXJscyA9IHRoaXMuZGVmYXVsdHMuYWxsb3dBYnNvbHV0ZVVybHM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbmZpZy5hbGxvd0Fic29sdXRlVXJscyA9IHRydWU7XG4gICAgfVxuXG4gICAgdmFsaWRhdG9yLmFzc2VydE9wdGlvbnMoXG4gICAgICBjb25maWcsXG4gICAgICB7XG4gICAgICAgIGJhc2VVcmw6IHZhbGlkYXRvcnMuc3BlbGxpbmcoJ2Jhc2VVUkwnKSxcbiAgICAgICAgd2l0aFhzcmZUb2tlbjogdmFsaWRhdG9ycy5zcGVsbGluZygnd2l0aFhTUkZUb2tlbicpLFxuICAgICAgfSxcbiAgICAgIHRydWVcbiAgICApO1xuXG4gICAgLy8gU2V0IGNvbmZpZy5tZXRob2RcbiAgICBjb25maWcubWV0aG9kID0gKGNvbmZpZy5tZXRob2QgfHwgdGhpcy5kZWZhdWx0cy5tZXRob2QgfHwgJ2dldCcpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAvLyBGbGF0dGVuIGhlYWRlcnNcbiAgICBsZXQgY29udGV4dEhlYWRlcnMgPSBoZWFkZXJzICYmIHV0aWxzLm1lcmdlKGhlYWRlcnMuY29tbW9uLCBoZWFkZXJzW2NvbmZpZy5tZXRob2RdKTtcblxuICAgIGhlYWRlcnMgJiZcbiAgICAgIHV0aWxzLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAncG9zdCcsICdwdXQnLCAncGF0Y2gnLCAncXVlcnknLCAnY29tbW9uJ10sIChtZXRob2QpID0+IHtcbiAgICAgICAgZGVsZXRlIGhlYWRlcnNbbWV0aG9kXTtcbiAgICAgIH0pO1xuXG4gICAgY29uZmlnLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuY29uY2F0KGNvbnRleHRIZWFkZXJzLCBoZWFkZXJzKTtcblxuICAgIC8vIGZpbHRlciBvdXQgc2tpcHBlZCBpbnRlcmNlcHRvcnNcbiAgICBjb25zdCByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbiA9IFtdO1xuICAgIGxldCBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSB0cnVlO1xuICAgIHRoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbiB1bnNoaWZ0UmVxdWVzdEludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgICAgaWYgKHR5cGVvZiBpbnRlcmNlcHRvci5ydW5XaGVuID09PSAnZnVuY3Rpb24nICYmIGludGVyY2VwdG9yLnJ1bldoZW4oY29uZmlnKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgJiYgaW50ZXJjZXB0b3Iuc3luY2hyb25vdXM7XG5cbiAgICAgIGNvbnN0IHRyYW5zaXRpb25hbCA9IGNvbmZpZy50cmFuc2l0aW9uYWwgfHwgdHJhbnNpdGlvbmFsRGVmYXVsdHM7XG4gICAgICBjb25zdCBsZWdhY3lJbnRlcmNlcHRvclJlcVJlc09yZGVyaW5nID1cbiAgICAgICAgdHJhbnNpdGlvbmFsICYmIHRyYW5zaXRpb25hbC5sZWdhY3lJbnRlcmNlcHRvclJlcVJlc09yZGVyaW5nO1xuXG4gICAgICBpZiAobGVnYWN5SW50ZXJjZXB0b3JSZXFSZXNPcmRlcmluZykge1xuICAgICAgICByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi51bnNoaWZ0KGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4ucHVzaChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbiA9IFtdO1xuICAgIHRoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24gcHVzaFJlc3BvbnNlSW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgICByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ucHVzaChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgICB9KTtcblxuICAgIGxldCBwcm9taXNlO1xuICAgIGxldCBpID0gMDtcbiAgICBsZXQgbGVuO1xuXG4gICAgaWYgKCFzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMpIHtcbiAgICAgIGNvbnN0IGNoYWluID0gW2Rpc3BhdGNoUmVxdWVzdC5iaW5kKHRoaXMpLCB1bmRlZmluZWRdO1xuICAgICAgY2hhaW4udW5zaGlmdCguLi5yZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbik7XG4gICAgICBjaGFpbi5wdXNoKC4uLnJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbik7XG4gICAgICBsZW4gPSBjaGFpbi5sZW5ndGg7XG5cbiAgICAgIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoY29uZmlnKTtcblxuICAgICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihjaGFpbltpKytdLCBjaGFpbltpKytdKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuXG4gICAgbGVuID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoO1xuXG4gICAgbGV0IG5ld0NvbmZpZyA9IGNvbmZpZztcblxuICAgIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgICBjb25zdCBvbkZ1bGZpbGxlZCA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluW2krK107XG4gICAgICBjb25zdCBvblJlamVjdGVkID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW5baSsrXTtcbiAgICAgIHRyeSB7XG4gICAgICAgIG5ld0NvbmZpZyA9IG9uRnVsZmlsbGVkKG5ld0NvbmZpZyk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBvblJlamVjdGVkLmNhbGwodGhpcywgZXJyb3IpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcHJvbWlzZSA9IGRpc3BhdGNoUmVxdWVzdC5jYWxsKHRoaXMsIG5ld0NvbmZpZyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgfVxuXG4gICAgaSA9IDA7XG4gICAgbGVuID0gcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLmxlbmd0aDtcblxuICAgIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbltpKytdLCByZXNwb25zZUludGVyY2VwdG9yQ2hhaW5baSsrXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cblxuICBnZXRVcmkoY29uZmlnKSB7XG4gICAgY29uZmlnID0gbWVyZ2VDb25maWcodGhpcy5kZWZhdWx0cywgY29uZmlnKTtcbiAgICBjb25zdCBmdWxsUGF0aCA9IGJ1aWxkRnVsbFBhdGgoY29uZmlnLmJhc2VVUkwsIGNvbmZpZy51cmwsIGNvbmZpZy5hbGxvd0Fic29sdXRlVXJscyk7XG4gICAgcmV0dXJuIGJ1aWxkVVJMKGZ1bGxQYXRoLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplcik7XG4gIH1cbn1cblxuLy8gUHJvdmlkZSBhbGlhc2VzIGZvciBzdXBwb3J0ZWQgcmVxdWVzdCBtZXRob2RzXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ29wdGlvbnMnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZE5vRGF0YShtZXRob2QpIHtcbiAgLyplc2xpbnQgZnVuYy1uYW1lczowKi9cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbiAodXJsLCBjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KFxuICAgICAgbWVyZ2VDb25maWcoY29uZmlnIHx8IHt9LCB7XG4gICAgICAgIG1ldGhvZCxcbiAgICAgICAgdXJsLFxuICAgICAgICBkYXRhOiAoY29uZmlnIHx8IHt9KS5kYXRhLFxuICAgICAgfSlcbiAgICApO1xuICB9O1xufSk7XG5cbnV0aWxzLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCcsICdxdWVyeSddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIGZ1bmN0aW9uIGdlbmVyYXRlSFRUUE1ldGhvZChpc0Zvcm0pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gaHR0cE1ldGhvZCh1cmwsIGRhdGEsIGNvbmZpZykge1xuICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdChcbiAgICAgICAgbWVyZ2VDb25maWcoY29uZmlnIHx8IHt9LCB7XG4gICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgIGhlYWRlcnM6IGlzRm9ybVxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJyxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7fSxcbiAgICAgICAgICB1cmwsXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfTtcbiAgfVxuXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZ2VuZXJhdGVIVFRQTWV0aG9kKCk7XG5cbiAgLy8gUVVFUlkgaXMgYSBzYWZlL2lkZW1wb3RlbnQgcmVhZCBtZXRob2Q7IG11bHRpcGFydCBmb3JtIGJvZGllcyBkb24ndCBmaXRcbiAgLy8gaXRzIHNlbWFudGljcywgc28gbm8gcXVlcnlGb3JtIHNob3J0aGFuZCBpcyBnZW5lcmF0ZWQuXG4gIGlmIChtZXRob2QgIT09ICdxdWVyeScpIHtcbiAgICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kICsgJ0Zvcm0nXSA9IGdlbmVyYXRlSFRUUE1ldGhvZCh0cnVlKTtcbiAgfVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IEF4aW9zO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgQ2FuY2VsZWRFcnJvciBmcm9tICcuL0NhbmNlbGVkRXJyb3IuanMnO1xuXG4vKipcbiAqIEEgYENhbmNlbFRva2VuYCBpcyBhbiBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byByZXF1ZXN0IGNhbmNlbGxhdGlvbiBvZiBhbiBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXhlY3V0b3IgVGhlIGV4ZWN1dG9yIGZ1bmN0aW9uLlxuICpcbiAqIEByZXR1cm5zIHtDYW5jZWxUb2tlbn1cbiAqL1xuY2xhc3MgQ2FuY2VsVG9rZW4ge1xuICBjb25zdHJ1Y3RvcihleGVjdXRvcikge1xuICAgIGlmICh0eXBlb2YgZXhlY3V0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4nKTtcbiAgICB9XG5cbiAgICBsZXQgcmVzb2x2ZVByb21pc2U7XG5cbiAgICB0aGlzLnByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiBwcm9taXNlRXhlY3V0b3IocmVzb2x2ZSkge1xuICAgICAgcmVzb2x2ZVByb21pc2UgPSByZXNvbHZlO1xuICAgIH0pO1xuXG4gICAgY29uc3QgdG9rZW4gPSB0aGlzO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICB0aGlzLnByb21pc2UudGhlbigoY2FuY2VsKSA9PiB7XG4gICAgICBpZiAoIXRva2VuLl9saXN0ZW5lcnMpIHJldHVybjtcblxuICAgICAgbGV0IGkgPSB0b2tlbi5fbGlzdGVuZXJzLmxlbmd0aDtcblxuICAgICAgd2hpbGUgKGktLSA+IDApIHtcbiAgICAgICAgdG9rZW4uX2xpc3RlbmVyc1tpXShjYW5jZWwpO1xuICAgICAgfVxuICAgICAgdG9rZW4uX2xpc3RlbmVycyA9IG51bGw7XG4gICAgfSk7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgIHRoaXMucHJvbWlzZS50aGVuID0gKG9uZnVsZmlsbGVkKSA9PiB7XG4gICAgICBsZXQgX3Jlc29sdmU7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIHRva2VuLnN1YnNjcmliZShyZXNvbHZlKTtcbiAgICAgICAgX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgICAgfSkudGhlbihvbmZ1bGZpbGxlZCk7XG5cbiAgICAgIHByb21pc2UuY2FuY2VsID0gZnVuY3Rpb24gcmVqZWN0KCkge1xuICAgICAgICB0b2tlbi51bnN1YnNjcmliZShfcmVzb2x2ZSk7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9O1xuXG4gICAgZXhlY3V0b3IoZnVuY3Rpb24gY2FuY2VsKG1lc3NhZ2UsIGNvbmZpZywgcmVxdWVzdCkge1xuICAgICAgaWYgKHRva2VuLnJlYXNvbikge1xuICAgICAgICAvLyBDYW5jZWxsYXRpb24gaGFzIGFscmVhZHkgYmVlbiByZXF1ZXN0ZWRcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0b2tlbi5yZWFzb24gPSBuZXcgQ2FuY2VsZWRFcnJvcihtZXNzYWdlLCBjb25maWcsIHJlcXVlc3QpO1xuICAgICAgcmVzb2x2ZVByb21pc2UodG9rZW4ucmVhc29uKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaHJvd3MgYSBgQ2FuY2VsZWRFcnJvcmAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAgICovXG4gIHRocm93SWZSZXF1ZXN0ZWQoKSB7XG4gICAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgICB0aHJvdyB0aGlzLnJlYXNvbjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlIHRvIHRoZSBjYW5jZWwgc2lnbmFsXG4gICAqL1xuXG4gIHN1YnNjcmliZShsaXN0ZW5lcikge1xuICAgIGlmICh0aGlzLnJlYXNvbikge1xuICAgICAgbGlzdGVuZXIodGhpcy5yZWFzb24pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbGlzdGVuZXJzID0gW2xpc3RlbmVyXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVW5zdWJzY3JpYmUgZnJvbSB0aGUgY2FuY2VsIHNpZ25hbFxuICAgKi9cblxuICB1bnN1YnNjcmliZShsaXN0ZW5lcikge1xuICAgIGlmICghdGhpcy5fbGlzdGVuZXJzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fbGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgfVxuXG4gIHRvQWJvcnRTaWduYWwoKSB7XG4gICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICAgIGNvbnN0IGFib3J0ID0gKGVycikgPT4ge1xuICAgICAgY29udHJvbGxlci5hYm9ydChlcnIpO1xuICAgIH07XG5cbiAgICB0aGlzLnN1YnNjcmliZShhYm9ydCk7XG5cbiAgICBjb250cm9sbGVyLnNpZ25hbC51bnN1YnNjcmliZSA9ICgpID0+IHRoaXMudW5zdWJzY3JpYmUoYWJvcnQpO1xuXG4gICAgcmV0dXJuIGNvbnRyb2xsZXIuc2lnbmFsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gb2JqZWN0IHRoYXQgY29udGFpbnMgYSBuZXcgYENhbmNlbFRva2VuYCBhbmQgYSBmdW5jdGlvbiB0aGF0LCB3aGVuIGNhbGxlZCxcbiAgICogY2FuY2VscyB0aGUgYENhbmNlbFRva2VuYC5cbiAgICovXG4gIHN0YXRpYyBzb3VyY2UoKSB7XG4gICAgbGV0IGNhbmNlbDtcbiAgICBjb25zdCB0b2tlbiA9IG5ldyBDYW5jZWxUb2tlbihmdW5jdGlvbiBleGVjdXRvcihjKSB7XG4gICAgICBjYW5jZWwgPSBjO1xuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbixcbiAgICAgIGNhbmNlbCxcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENhbmNlbFRva2VuO1xuIiwiY29uc3QgSHR0cFN0YXR1c0NvZGUgPSB7XG4gIENvbnRpbnVlOiAxMDAsXG4gIFN3aXRjaGluZ1Byb3RvY29sczogMTAxLFxuICBQcm9jZXNzaW5nOiAxMDIsXG4gIEVhcmx5SGludHM6IDEwMyxcbiAgT2s6IDIwMCxcbiAgQ3JlYXRlZDogMjAxLFxuICBBY2NlcHRlZDogMjAyLFxuICBOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb246IDIwMyxcbiAgTm9Db250ZW50OiAyMDQsXG4gIFJlc2V0Q29udGVudDogMjA1LFxuICBQYXJ0aWFsQ29udGVudDogMjA2LFxuICBNdWx0aVN0YXR1czogMjA3LFxuICBBbHJlYWR5UmVwb3J0ZWQ6IDIwOCxcbiAgSW1Vc2VkOiAyMjYsXG4gIE11bHRpcGxlQ2hvaWNlczogMzAwLFxuICBNb3ZlZFBlcm1hbmVudGx5OiAzMDEsXG4gIEZvdW5kOiAzMDIsXG4gIFNlZU90aGVyOiAzMDMsXG4gIE5vdE1vZGlmaWVkOiAzMDQsXG4gIFVzZVByb3h5OiAzMDUsXG4gIFVudXNlZDogMzA2LFxuICBUZW1wb3JhcnlSZWRpcmVjdDogMzA3LFxuICBQZXJtYW5lbnRSZWRpcmVjdDogMzA4LFxuICBCYWRSZXF1ZXN0OiA0MDAsXG4gIFVuYXV0aG9yaXplZDogNDAxLFxuICBQYXltZW50UmVxdWlyZWQ6IDQwMixcbiAgRm9yYmlkZGVuOiA0MDMsXG4gIE5vdEZvdW5kOiA0MDQsXG4gIE1ldGhvZE5vdEFsbG93ZWQ6IDQwNSxcbiAgTm90QWNjZXB0YWJsZTogNDA2LFxuICBQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6IDQwNyxcbiAgUmVxdWVzdFRpbWVvdXQ6IDQwOCxcbiAgQ29uZmxpY3Q6IDQwOSxcbiAgR29uZTogNDEwLFxuICBMZW5ndGhSZXF1aXJlZDogNDExLFxuICBQcmVjb25kaXRpb25GYWlsZWQ6IDQxMixcbiAgUGF5bG9hZFRvb0xhcmdlOiA0MTMsXG4gIFVyaVRvb0xvbmc6IDQxNCxcbiAgVW5zdXBwb3J0ZWRNZWRpYVR5cGU6IDQxNSxcbiAgUmFuZ2VOb3RTYXRpc2ZpYWJsZTogNDE2LFxuICBFeHBlY3RhdGlvbkZhaWxlZDogNDE3LFxuICBJbUFUZWFwb3Q6IDQxOCxcbiAgTWlzZGlyZWN0ZWRSZXF1ZXN0OiA0MjEsXG4gIFVucHJvY2Vzc2FibGVFbnRpdHk6IDQyMixcbiAgTG9ja2VkOiA0MjMsXG4gIEZhaWxlZERlcGVuZGVuY3k6IDQyNCxcbiAgVG9vRWFybHk6IDQyNSxcbiAgVXBncmFkZVJlcXVpcmVkOiA0MjYsXG4gIFByZWNvbmRpdGlvblJlcXVpcmVkOiA0MjgsXG4gIFRvb01hbnlSZXF1ZXN0czogNDI5LFxuICBSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6IDQzMSxcbiAgVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnM6IDQ1MSxcbiAgSW50ZXJuYWxTZXJ2ZXJFcnJvcjogNTAwLFxuICBOb3RJbXBsZW1lbnRlZDogNTAxLFxuICBCYWRHYXRld2F5OiA1MDIsXG4gIFNlcnZpY2VVbmF2YWlsYWJsZTogNTAzLFxuICBHYXRld2F5VGltZW91dDogNTA0LFxuICBIdHRwVmVyc2lvbk5vdFN1cHBvcnRlZDogNTA1LFxuICBWYXJpYW50QWxzb05lZ290aWF0ZXM6IDUwNixcbiAgSW5zdWZmaWNpZW50U3RvcmFnZTogNTA3LFxuICBMb29wRGV0ZWN0ZWQ6IDUwOCxcbiAgTm90RXh0ZW5kZWQ6IDUxMCxcbiAgTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6IDUxMSxcbiAgV2ViU2VydmVySXNEb3duOiA1MjEsXG4gIENvbm5lY3Rpb25UaW1lZE91dDogNTIyLFxuICBPcmlnaW5Jc1VucmVhY2hhYmxlOiA1MjMsXG4gIFRpbWVvdXRPY2N1cnJlZDogNTI0LFxuICBTc2xIYW5kc2hha2VGYWlsZWQ6IDUyNSxcbiAgSW52YWxpZFNzbENlcnRpZmljYXRlOiA1MjYsXG59O1xuXG5PYmplY3QuZW50cmllcyhIdHRwU3RhdHVzQ29kZSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gIEh0dHBTdGF0dXNDb2RlW3ZhbHVlXSA9IGtleTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBIdHRwU3RhdHVzQ29kZTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMuanMnO1xuaW1wb3J0IGJpbmQgZnJvbSAnLi9oZWxwZXJzL2JpbmQuanMnO1xuaW1wb3J0IEF4aW9zIGZyb20gJy4vY29yZS9BeGlvcy5qcyc7XG5pbXBvcnQgbWVyZ2VDb25maWcgZnJvbSAnLi9jb3JlL21lcmdlQ29uZmlnLmpzJztcbmltcG9ydCBkZWZhdWx0cyBmcm9tICcuL2RlZmF1bHRzL2luZGV4LmpzJztcbmltcG9ydCBmb3JtRGF0YVRvSlNPTiBmcm9tICcuL2hlbHBlcnMvZm9ybURhdGFUb0pTT04uanMnO1xuaW1wb3J0IENhbmNlbGVkRXJyb3IgZnJvbSAnLi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qcyc7XG5pbXBvcnQgQ2FuY2VsVG9rZW4gZnJvbSAnLi9jYW5jZWwvQ2FuY2VsVG9rZW4uanMnO1xuaW1wb3J0IGlzQ2FuY2VsIGZyb20gJy4vY2FuY2VsL2lzQ2FuY2VsLmpzJztcbmltcG9ydCB7IFZFUlNJT04gfSBmcm9tICcuL2Vudi9kYXRhLmpzJztcbmltcG9ydCB0b0Zvcm1EYXRhIGZyb20gJy4vaGVscGVycy90b0Zvcm1EYXRhLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4vY29yZS9BeGlvc0Vycm9yLmpzJztcbmltcG9ydCBzcHJlYWQgZnJvbSAnLi9oZWxwZXJzL3NwcmVhZC5qcyc7XG5pbXBvcnQgaXNBeGlvc0Vycm9yIGZyb20gJy4vaGVscGVycy9pc0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuL2NvcmUvQXhpb3NIZWFkZXJzLmpzJztcbmltcG9ydCBhZGFwdGVycyBmcm9tICcuL2FkYXB0ZXJzL2FkYXB0ZXJzLmpzJztcbmltcG9ydCBIdHRwU3RhdHVzQ29kZSBmcm9tICcuL2hlbHBlcnMvSHR0cFN0YXR1c0NvZGUuanMnO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBkZWZhdWx0Q29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKlxuICogQHJldHVybnMge0F4aW9zfSBBIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICovXG5mdW5jdGlvbiBjcmVhdGVJbnN0YW5jZShkZWZhdWx0Q29uZmlnKSB7XG4gIGNvbnN0IGNvbnRleHQgPSBuZXcgQXhpb3MoZGVmYXVsdENvbmZpZyk7XG4gIGNvbnN0IGluc3RhbmNlID0gYmluZChBeGlvcy5wcm90b3R5cGUucmVxdWVzdCwgY29udGV4dCk7XG5cbiAgLy8gQ29weSBheGlvcy5wcm90b3R5cGUgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBBeGlvcy5wcm90b3R5cGUsIGNvbnRleHQsIHsgYWxsT3duS2V5czogdHJ1ZSB9KTtcblxuICAvLyBDb3B5IGNvbnRleHQgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBjb250ZXh0LCBudWxsLCB7IGFsbE93bktleXM6IHRydWUgfSk7XG5cbiAgLy8gRmFjdG9yeSBmb3IgY3JlYXRpbmcgbmV3IGluc3RhbmNlc1xuICBpbnN0YW5jZS5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaW5zdGFuY2VDb25maWcpIHtcbiAgICByZXR1cm4gY3JlYXRlSW5zdGFuY2UobWVyZ2VDb25maWcoZGVmYXVsdENvbmZpZywgaW5zdGFuY2VDb25maWcpKTtcbiAgfTtcblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbi8vIENyZWF0ZSB0aGUgZGVmYXVsdCBpbnN0YW5jZSB0byBiZSBleHBvcnRlZFxuY29uc3QgYXhpb3MgPSBjcmVhdGVJbnN0YW5jZShkZWZhdWx0cyk7XG5cbi8vIEV4cG9zZSBBeGlvcyBjbGFzcyB0byBhbGxvdyBjbGFzcyBpbmhlcml0YW5jZVxuYXhpb3MuQXhpb3MgPSBBeGlvcztcblxuLy8gRXhwb3NlIENhbmNlbCAmIENhbmNlbFRva2VuXG5heGlvcy5DYW5jZWxlZEVycm9yID0gQ2FuY2VsZWRFcnJvcjtcbmF4aW9zLkNhbmNlbFRva2VuID0gQ2FuY2VsVG9rZW47XG5heGlvcy5pc0NhbmNlbCA9IGlzQ2FuY2VsO1xuYXhpb3MuVkVSU0lPTiA9IFZFUlNJT047XG5heGlvcy50b0Zvcm1EYXRhID0gdG9Gb3JtRGF0YTtcblxuLy8gRXhwb3NlIEF4aW9zRXJyb3IgY2xhc3NcbmF4aW9zLkF4aW9zRXJyb3IgPSBBeGlvc0Vycm9yO1xuXG4vLyBhbGlhcyBmb3IgQ2FuY2VsZWRFcnJvciBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuYXhpb3MuQ2FuY2VsID0gYXhpb3MuQ2FuY2VsZWRFcnJvcjtcblxuLy8gRXhwb3NlIGFsbC9zcHJlYWRcbmF4aW9zLmFsbCA9IGZ1bmN0aW9uIGFsbChwcm9taXNlcykge1xuICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xufTtcblxuYXhpb3Muc3ByZWFkID0gc3ByZWFkO1xuXG4vLyBFeHBvc2UgaXNBeGlvc0Vycm9yXG5heGlvcy5pc0F4aW9zRXJyb3IgPSBpc0F4aW9zRXJyb3I7XG5cbi8vIEV4cG9zZSBtZXJnZUNvbmZpZ1xuYXhpb3MubWVyZ2VDb25maWcgPSBtZXJnZUNvbmZpZztcblxuYXhpb3MuQXhpb3NIZWFkZXJzID0gQXhpb3NIZWFkZXJzO1xuXG5heGlvcy5mb3JtVG9KU09OID0gKHRoaW5nKSA9PiBmb3JtRGF0YVRvSlNPTih1dGlscy5pc0hUTUxGb3JtKHRoaW5nKSA/IG5ldyBGb3JtRGF0YSh0aGluZykgOiB0aGluZyk7XG5cbmF4aW9zLmdldEFkYXB0ZXIgPSBhZGFwdGVycy5nZXRBZGFwdGVyO1xuXG5heGlvcy5IdHRwU3RhdHVzQ29kZSA9IEh0dHBTdGF0dXNDb2RlO1xuXG5heGlvcy5kZWZhdWx0ID0gYXhpb3M7XG5cbi8vIHRoaXMgbW9kdWxlIHNob3VsZCBvbmx5IGhhdmUgYSBkZWZhdWx0IGV4cG9ydFxuZXhwb3J0IGRlZmF1bHQgYXhpb3M7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogU3ludGFjdGljIHN1Z2FyIGZvciBpbnZva2luZyBhIGZ1bmN0aW9uIGFuZCBleHBhbmRpbmcgYW4gYXJyYXkgZm9yIGFyZ3VtZW50cy5cbiAqXG4gKiBDb21tb24gdXNlIGNhc2Ugd291bGQgYmUgdG8gdXNlIGBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHlgLlxuICpcbiAqICBgYGBqc1xuICogIGZ1bmN0aW9uIGYoeCwgeSwgeikge31cbiAqICBjb25zdCBhcmdzID0gWzEsIDIsIDNdO1xuICogIGYuYXBwbHkobnVsbCwgYXJncyk7XG4gKiAgYGBgXG4gKlxuICogV2l0aCBgc3ByZWFkYCB0aGlzIGV4YW1wbGUgY2FuIGJlIHJlLXdyaXR0ZW4uXG4gKlxuICogIGBgYGpzXG4gKiAgc3ByZWFkKGZ1bmN0aW9uKHgsIHksIHopIHt9KShbMSwgMiwgM10pO1xuICogIGBgYFxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKlxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzcHJlYWQoY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoYXJyKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFycik7XG4gIH07XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvc1xuICpcbiAqIEBwYXJhbSB7Kn0gcGF5bG9hZCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvcywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzQXhpb3NFcnJvcihwYXlsb2FkKSB7XG4gIHJldHVybiB1dGlscy5pc09iamVjdChwYXlsb2FkKSAmJiBwYXlsb2FkLmlzQXhpb3NFcnJvciA9PT0gdHJ1ZTtcbn1cbiIsImltcG9ydCBkZWJvdW5jZSBmcm9tICdsb2Rhc2gvZGVib3VuY2UnO1xuaW1wb3J0IGZsYXR0ZW4gZnJvbSAnbG9kYXNoL2ZsYXR0ZW4nO1xuaW1wb3J0IHRha2UgZnJvbSAnbG9kYXNoL3Rha2UnO1xuaW1wb3J0IHtcbiAgc29ydFNlYXJjaFJlc3VsdHMsXG4gIGlzU3RvcCxcbn0gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWhlbHBlcnMnO1xuaW1wb3J0IGZpbHRlck1hdGNoaW5nVG9JbnB1dCBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZmlsdGVyLW1hdGNoaW5nLXRvLWlucHV0JztcbmltcG9ydCBnZXRHZW9jb2RpbmdSZXN1bHRzIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMnO1xuaW1wb3J0IGdldEpzb24gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1qc29uJztcblxuZnVuY3Rpb24gZ2V0U3RvcHNGcm9tR2VvY29kaW5nKHN0b3BzLCBVUkxfUEVMSUFTX1BMQUNFKSB7XG4gIGlmICghc3RvcHMgfHwgc3RvcHMubGVuZ3RoIDwgMSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuICB9XG4gIGxldCBnaWRzID0gJyc7XG4gIGNvbnN0IHN0b3BzV2l0aEdpZHMgPSBzdG9wcy5tYXAoc3RvcCA9PiB7XG4gICAgY29uc3QgdHlwZSA9IHN0b3AudHlwZSA9PT0gJ3N0b3AnID8gJ3N0b3AnIDogJ3N0YXRpb24nO1xuICAgIGxldCBnaWQgPSBgZ3RmcyR7c3RvcC5ndGZzSWQuc3BsaXQoJzonKVswXS50b0xvd2VyQ2FzZSgpfToke3R5cGV9OkdURlM6JHtcbiAgICAgIHN0b3AuZ3Rmc0lkXG4gICAgfWA7XG4gICAgaWYgKHN0b3AuY29kZSkge1xuICAgICAgZ2lkICs9IGAjJHtzdG9wLmNvZGV9YDtcbiAgICB9XG4gICAgZ2lkcyArPSBgJHtnaWR9LGA7XG4gICAgcmV0dXJuIHsgLi4uc3RvcCwgZ2lkIH07XG4gIH0pO1xuICBjb25zdCBzdG9wU3RhdGlvbk1hcCA9IHN0b3BzV2l0aEdpZHMucmVkdWNlKGZ1bmN0aW9uIHJlZHUoXG4gICAgbWFwLFxuICAgIHN0b3BPclN0YXRpb24sXG4gICkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgIG1hcFtzdG9wT3JTdGF0aW9uLmdpZF0gPSBzdG9wT3JTdGF0aW9uO1xuICAgIHJldHVybiBtYXA7XG4gIH0sIHt9KTtcbiAgcmV0dXJuIGdldEpzb24oVVJMX1BFTElBU19QTEFDRSwge1xuICAgIGlkczogZ2lkcy5zbGljZSgwLCAtMSksXG4gICAgLy8gbGFuZzogY29udGV4dC5nZXRTdG9yZSgnUHJlZmVyZW5jZXNTdG9yZScpLmdldExhbmd1YWdlKCksIFRPRE8gZW5hYmxlIHRoaXMgd2hlbiBPVFAgc3VwcG9ydHMgdHJhbnNsYXRpb25zXG4gIH0pLnRoZW4ocmVzID0+IHtcbiAgICByZXR1cm4gcmVzLmZlYXR1cmVzLm1hcChzdG9wID0+IHtcbiAgICAgIGNvbnN0IGZhdm91cml0ZSA9IHtcbiAgICAgICAgdHlwZTogJ0Zhdm91cml0ZVN0b3AnLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgYWRkZW5kdW06IHN0b3AucHJvcGVydGllcy5hZGRlbmR1bSxcbiAgICAgICAgICBnaWQ6IHN0b3BTdGF0aW9uTWFwW3N0b3AucHJvcGVydGllcy5naWRdLmdpZCxcbiAgICAgICAgICBjb2RlOiBzdG9wU3RhdGlvbk1hcFtzdG9wLnByb3BlcnRpZXMuZ2lkXS5jb2RlLFxuICAgICAgICAgIGd0ZnNJZDogc3RvcFN0YXRpb25NYXBbc3RvcC5wcm9wZXJ0aWVzLmdpZF0uZ3Rmc0lkLFxuICAgICAgICAgIGxhc3RVcGRhdGVkOiBzdG9wU3RhdGlvbk1hcFtzdG9wLnByb3BlcnRpZXMuZ2lkXS5sYXN0VXBkYXRlZCxcbiAgICAgICAgICBmYXZvdXJpdGVJZDogc3RvcFN0YXRpb25NYXBbc3RvcC5wcm9wZXJ0aWVzLmdpZF0uZmF2b3VyaXRlSWQsXG4gICAgICAgICAgYWRkcmVzczogc3RvcC5wcm9wZXJ0aWVzLmxhYmVsLFxuICAgICAgICAgIGxheWVyOiBpc1N0b3Aoc3RvcC5wcm9wZXJ0aWVzKSA/ICdmYXZvdXJpdGVTdG9wJyA6ICdmYXZvdXJpdGVTdGF0aW9uJyxcbiAgICAgICAgfSxcbiAgICAgICAgZ2VvbWV0cnk6IHN0b3AuZ2VvbWV0cnksXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGZhdm91cml0ZTtcbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBmaWx0ZXJGYXZvdXJpdGVMb2NhdGlvbnMoZmF2b3VyaXRlcywgaW5wdXQpIHtcbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcbiAgICBmaWx0ZXJNYXRjaGluZ1RvSW5wdXQoZmF2b3VyaXRlcywgaW5wdXQsIFsnYWRkcmVzcycsICduYW1lJ10pLm1hcChpdGVtID0+ICh7XG4gICAgICB0eXBlOiAnRmF2b3VyaXRlUGxhY2UnLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAuLi5pdGVtLFxuICAgICAgICBsYWJlbDogaXRlbS5uYW1lLFxuICAgICAgICBsYXllcjogJ2Zhdm91cml0ZVBsYWNlJyxcbiAgICAgIH0sXG4gICAgICBnZW9tZXRyeTogeyB0eXBlOiAnUG9pbnQnLCBjb29yZGluYXRlczogW2l0ZW0ubG9uLCBpdGVtLmxhdF0gfSxcbiAgICB9KSksXG4gICk7XG59XG5mdW5jdGlvbiBzZWxlY3RQb3NpdGlvbkZvbU1hcChpbnB1dCkge1xuICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJyB8fCBpbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ1NlbGVjdEZyb21NYXAnLFxuICAgICAgICBhZGRyZXNzOiAnU2VsZWN0RnJvbU1hcCcsXG4gICAgICAgIGxhdDogbnVsbCxcbiAgICAgICAgbG9uOiBudWxsLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgbGFiZWxJZDogJ3NlbGVjdC1mcm9tLW1hcCcsXG4gICAgICAgICAgbGF5ZXI6ICdzZWxlY3RGcm9tTWFwJyxcbiAgICAgICAgICBhZGRyZXNzOiAnU2VsZWN0RnJvbU1hcCcsXG4gICAgICAgICAgbGF0OiBudWxsLFxuICAgICAgICAgIGxvbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAgZ2VvbWV0cnk6IHtcbiAgICAgICAgICB0eXBlOiAnUG9pbnQnLFxuICAgICAgICAgIGNvb3JkaW5hdGVzOiBbXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgXSk7XG4gIH1cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG59XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRQb3NpdGlvbklmRW1wdHkoaW5wdXQsIHBvc2l0aW9uKSB7XG4gIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnIHx8IGlucHV0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnQ3VycmVudExvY2F0aW9uJyxcbiAgICAgICAgYWRkcmVzczogcG9zaXRpb24uYWRkcmVzcyxcbiAgICAgICAgbGF0OiBwb3NpdGlvbi5sYXQsXG4gICAgICAgIGxvbjogcG9zaXRpb24ubG9uLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgbGFiZWxJZDogJ3VzZS1vd24tcG9zaXRpb24nLFxuICAgICAgICAgIGxheWVyOiAnY3VycmVudFBvc2l0aW9uJyxcbiAgICAgICAgICBhZGRyZXNzOiBwb3NpdGlvbi5hZGRyZXNzLFxuICAgICAgICAgIGxhdDogcG9zaXRpb24ubGF0LFxuICAgICAgICAgIGxvbjogcG9zaXRpb24ubG9uLFxuICAgICAgICB9LFxuICAgICAgICBnZW9tZXRyeToge1xuICAgICAgICAgIHR5cGU6ICdQb2ludCcsXG4gICAgICAgICAgY29vcmRpbmF0ZXM6IFtwb3NpdGlvbi5sb24sIHBvc2l0aW9uLmxhdF0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF0pO1xuICB9XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG59XG5cbmZ1bmN0aW9uIHNlbGVjdEZyb21Pd25Mb2NhdGlvbnMoaW5wdXQpIHtcbiAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycgfHwgaW5wdXQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdTZWxlY3RGcm9tT3duTG9jYXRpb25zJyxcbiAgICAgICAgYWRkcmVzczogJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnLFxuICAgICAgICBsYXQ6IG51bGwsXG4gICAgICAgIGxvbjogbnVsbCxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGxhYmVsSWQ6ICdzZWxlY3QtZnJvbS1vd24tbG9jYXRpb25zJyxcbiAgICAgICAgICBsYXllcjogJ293bkxvY2F0aW9ucycsXG4gICAgICAgICAgYWRkcmVzczogJ3NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnLFxuICAgICAgICAgIGxhdDogbnVsbCxcbiAgICAgICAgICBsb246IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIGdlb21ldHJ5OiB7XG4gICAgICAgICAgdHlwZTogJ1BvaW50JyxcbiAgICAgICAgICBjb29yZGluYXRlczogW10sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF0pO1xuICB9XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xufVxuXG5mdW5jdGlvbiBnZXRCYWNrU3VnZ2VzdGlvbigpIHtcbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXG4gICAge1xuICAgICAgdHlwZTogJ2JhY2snLFxuICAgICAgYWRkcmVzczogJ2JhY2snLFxuICAgICAgbGF0OiBudWxsLFxuICAgICAgbG9uOiBudWxsLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBsYWJlbElkOiAnYmFjaycsXG4gICAgICAgIGxheWVyOiAnYmFjaycsXG4gICAgICAgIGFkZHJlc3M6ICdiYWNrJyxcbiAgICAgICAgbGF0OiBudWxsLFxuICAgICAgICBsb246IG51bGwsXG4gICAgICB9LFxuICAgICAgZ2VvbWV0cnk6IHtcbiAgICAgICAgdHlwZTogJ1BvaW50JyxcbiAgICAgICAgY29vcmRpbmF0ZXM6IFtdLFxuICAgICAgfSxcbiAgICB9LFxuICBdKTtcbn1cblxuZnVuY3Rpb24gZmlsdGVyRmF2b3VyaXRlU3RvcHMoc3RvcHNBbmRTdGF0aW9ucywgaW5wdXQsIHVzZVN0b3BzLCB1c2VTdGF0aW9ucykge1xuICByZXR1cm4gc3RvcHNBbmRTdGF0aW9ucy50aGVuKHN0b3BzU3RhdGlvbnMgPT4ge1xuICAgIGNvbnN0IGNhbmRpZGF0ZXMgPSBzdG9wc1N0YXRpb25zLmZpbHRlcihzID0+XG4gICAgICBzLnR5cGUgPT09ICdzdG9wJyA/IHVzZVN0b3BzIDogdXNlU3RhdGlvbnMsXG4gICAgKTtcbiAgICByZXR1cm4gZmlsdGVyTWF0Y2hpbmdUb0lucHV0KGNhbmRpZGF0ZXMsIGlucHV0LCBbXG4gICAgICAncHJvcGVydGllcy5uYW1lJyxcbiAgICAgICdwcm9wZXJ0aWVzLm5hbWUnLFxuICAgICAgJ3Byb3BlcnRpZXMuYWRkcmVzcycsXG4gICAgXSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBmaWx0ZXJPbGRTZWFyY2hlcyhvbGRTZWFyY2hlcywgaW5wdXQsIGRyb3BMYXllcnMpIHtcbiAgbGV0IG1hdGNoaW5nT2xkU2VhcmNoZXMgPSBmaWx0ZXJNYXRjaGluZ1RvSW5wdXQob2xkU2VhcmNoZXMsIGlucHV0LCBbXG4gICAgJ3Byb3BlcnRpZXMubmFtZScsXG4gICAgJ3Byb3BlcnRpZXMubGFiZWwnLFxuICAgICdwcm9wZXJ0aWVzLmFkZHJlc3MnLFxuICAgICdwcm9wZXJ0aWVzLnNob3J0TmFtZScsXG4gICAgJ3Byb3BlcnRpZXMubG9uZ05hbWUnLFxuICBdKTtcbiAgaWYgKGRyb3BMYXllcnMpIHtcbiAgICAvLyBkb24ndCB3YW50IHRoZXNlXG4gICAgbWF0Y2hpbmdPbGRTZWFyY2hlcyA9IG1hdGNoaW5nT2xkU2VhcmNoZXMuZmlsdGVyKFxuICAgICAgaXRlbSA9PiAhZHJvcExheWVycy5pbmNsdWRlcyhpdGVtLnByb3BlcnRpZXMubGF5ZXIpLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcbiAgICB0YWtlKG1hdGNoaW5nT2xkU2VhcmNoZXMsIDEwKS5tYXAoaXRlbSA9PiB7XG4gICAgICBjb25zdCBuZXdJdGVtID0ge1xuICAgICAgICAuLi5pdGVtLFxuICAgICAgICB0eXBlOiAnT2xkU2VhcmNoJyxcbiAgICAgICAgdGltZXRhYmxlQ2xpY2tlZDogZmFsc2UsIC8vIHJlc2V0IGxhdGVzdCBzZWxlY3Rpb24gYWN0aW9uXG4gICAgICAgIGFycm93Q2xpY2tlZDogZmFsc2UsXG4gICAgICB9O1xuICAgICAgZGVsZXRlIG5ld0l0ZW0ucHJvcGVydGllcy5jb25maWRlbmNlO1xuICAgICAgcmV0dXJuIG5ld0l0ZW07XG4gICAgfSksXG4gICk7XG59XG5cbmZ1bmN0aW9uIGhhc0Zhdm91cml0ZXMoc2VhcmNoQ29udGV4dCkge1xuICBjb25zdCBmYXZvdXJpdGVMb2NhdGlvbnMgPSBzZWFyY2hDb250ZXh0LmdldEZhdm91cml0ZUxvY2F0aW9ucyhcbiAgICBzZWFyY2hDb250ZXh0LmNvbnRleHQsXG4gICk7XG4gIGlmIChmYXZvdXJpdGVMb2NhdGlvbnM/Lmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0IGZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9ucyA9XG4gICAgc2VhcmNoQ29udGV4dC5nZXRGYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnMoc2VhcmNoQ29udGV4dC5jb250ZXh0KTtcbiAgaWYgKGZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9ucz8ubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGNvbnN0IGZhdm91cml0ZVN0b3BzID0gc2VhcmNoQ29udGV4dC5nZXRGYXZvdXJpdGVTdG9wcyhzZWFyY2hDb250ZXh0LmNvbnRleHQpO1xuICByZXR1cm4gZmF2b3VyaXRlU3RvcHM/Lmxlbmd0aCA+IDA7XG59XG5cbmNvbnN0IHJvdXRlTGF5ZXJzID0gW1xuICAncm91dGUtVFJBTScsXG4gICdyb3V0ZS1CVVMnLFxuICAncm91dGUtUkFJTCcsXG4gICdyb3V0ZS1GRVJSWScsXG4gICdyb3V0ZS1TVUJXQVknLFxuICAncm91dGUtQUlSUExBTkUnLFxuICAncm91dGUtRlVOSUNVTEFSJyxcbl07XG5jb25zdCBsb2NhdGlvbkxheWVycyA9IFsndmVudWUnLCAnYWRkcmVzcycsICdzdHJlZXQnXTtcbmNvbnN0IHBhcmtpbmdMYXllcnMgPSBbJ2NhcnBhcmsnLCAnYmlrZXBhcmsnXTtcbmNvbnN0IHN0b3BMYXllcnMgPSBbJ3N0b3AnLCAnc3RhdGlvbiddO1xuXG4vKipcbiAqIEV4ZWN1dGVzIHRoZSBzZWFyY2hcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWFyY2hSZXN1bHRzKFxuICB0YXJnZXRzLFxuICBzb3VyY2VzLFxuICB0cmFuc3BvcnRNb2RlLFxuICBzZWFyY2hDb250ZXh0LFxuICBmaWx0ZXJSZXN1bHRzLFxuICBnZW9jb2RpbmdTaXplLFxuICB7IGlucHV0IH0sXG4gIGNhbGxiYWNrLFxuICBwYXRoT3B0cyxcbiAgcmVmUG9pbnQsXG4pIHtcbiAgY29uc3Qge1xuICAgIGdldFBvc2l0aW9ucyxcbiAgICBnZXRGYXZvdXJpdGVMb2NhdGlvbnMsXG4gICAgZ2V0T2xkU2VhcmNoZXMsXG4gICAgZ2V0RmF2b3VyaXRlU3RvcHMsXG4gICAgcGFya2luZ0FyZWFTb3VyY2VzLFxuICAgIGdldExhbmd1YWdlLFxuICAgIGdldFN0b3BBbmRTdGF0aW9uc1F1ZXJ5LFxuICAgIGdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uc1F1ZXJ5LFxuICAgIGdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9ucyxcbiAgICBnZXRGYXZvdXJpdGVSb3V0ZXNRdWVyeSxcbiAgICBnZXRGYXZvdXJpdGVSb3V0ZXMsXG4gICAgZ2V0Um91dGVzUXVlcnksXG4gICAgY29udGV4dCxcbiAgICBpc1BlbGlhc0xvY2F0aW9uQXdhcmU6IGxvY2F0aW9uQXdhcmUsXG4gICAgbWluaW1hbFJlZ2V4cCxcbiAgICBsaW5lUmVnZXhwLFxuICAgIFVSTF9QRUxJQVMsXG4gICAgVVJMX1BFTElBU19QTEFDRSxcbiAgICBmZWVkSURzLFxuICAgIGdlb2NvZGluZ1NlYXJjaFBhcmFtcyxcbiAgICBnZW9jb2RpbmdTb3VyY2VzLFxuICAgIGdldEZ1dHVyZVJvdXRlcyxcbiAgICBjaXR5QmlrZU5ldHdvcmtzLFxuICB9ID0gc2VhcmNoQ29udGV4dDtcbiAgLy8gaWYgbm8gdGFyZ2V0cyBhcmUgcHJvdmlkZWQsIHNlYXJjaCB0aGVtIGFsbC5cbiAgY29uc3QgYWxsVGFyZ2V0cyA9ICF0YXJnZXRzIHx8IHRhcmdldHMubGVuZ3RoID09PSAwO1xuICAvLyBpZiBubyBzb3VyY2VzIGFyZSBwcm92aWRlZCwgdXNlIHRoZW0gYWxsLlxuICBjb25zdCBhbGxTb3VyY2VzID0gIXNvdXJjZXMgfHwgc291cmNlcy5sZW5ndGggPT09IDA7XG4gIGNvbnN0IHBvc2l0aW9uID0gZ2V0UG9zaXRpb25zKGNvbnRleHQpO1xuICBjb25zdCBzZWFyY2hDb21wb25lbnRzID0gW107XG4gIGNvbnN0IHNlYXJjaGVzID0geyB0eXBlOiAnYWxsJywgdGVybTogaW5wdXQsIHJlc3VsdHM6IFtdIH07XG4gIGNvbnN0IGxhbmd1YWdlID0gZ2V0TGFuZ3VhZ2UoY29udGV4dCk7XG4gIGNvbnN0IGZvY3VzUG9pbnQgPVxuICAgIGxvY2F0aW9uQXdhcmUgJiYgcmVmUG9pbnQ/LmxhdCAmJiByZWZQb2ludD8ubG9uXG4gICAgICA/IHtcbiAgICAgICAgICAvLyBSb3VuZCBjb29yZGluYXRlcyB0byBhcHByb3ggMSBrbSwgaW4gb3JkZXIgdG8gaW1wcm92ZSBjYWNoaW5nXG4gICAgICAgICAgJ2ZvY3VzLnBvaW50LmxhdCc6IHJlZlBvaW50LmxhdC50b0ZpeGVkKDMpLFxuICAgICAgICAgICdmb2N1cy5wb2ludC5sb24nOiByZWZQb2ludC5sb24udG9GaXhlZCgzKSxcbiAgICAgICAgfVxuICAgICAgOiB7fTtcbiAgY29uc3QgbW9kZSA9IHRyYW5zcG9ydE1vZGUgPyB0cmFuc3BvcnRNb2RlLnNwbGl0KCctJylbMV0gOiB1bmRlZmluZWQ7XG4gIGlmIChcbiAgICB0YXJnZXRzLmluY2x1ZGVzKCdDdXJyZW50UG9zaXRpb24nKSAmJlxuICAgIHBvc2l0aW9uLnN0YXR1cyAhPT0gJ2dlb2xvY2F0aW9uLW5vdC1zdXBwb3J0ZWQnXG4gICkge1xuICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChnZXRDdXJyZW50UG9zaXRpb25JZkVtcHR5KGlucHV0LCBwb3NpdGlvbikpO1xuICB9XG4gIGlmIChhbGxUYXJnZXRzIHx8IHRhcmdldHMuaW5jbHVkZXMoJ01hcFBvc2l0aW9uJykpIHtcbiAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goc2VsZWN0UG9zaXRpb25Gb21NYXAoaW5wdXQpKTtcbiAgfVxuICBpZiAodGFyZ2V0cy5pbmNsdWRlcygnRnV0dXJlUm91dGVzJykpIHtcbiAgICBjb25zdCBpdGVtcyA9IGdldEZ1dHVyZVJvdXRlcyhjb250ZXh0KTtcbiAgICBzZWFyY2hDb21wb25lbnRzLnB1c2godGFrZShpdGVtcywgMykpO1xuICB9XG4gIGlmIChcbiAgICB0YXJnZXRzLmluY2x1ZGVzKCdTZWxlY3RGcm9tT3duTG9jYXRpb25zJykgJiZcbiAgICBoYXNGYXZvdXJpdGVzKHNlYXJjaENvbnRleHQpXG4gICkge1xuICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChzZWxlY3RGcm9tT3duTG9jYXRpb25zKGlucHV0KSk7XG4gIH1cbiAgaWYgKGFsbFRhcmdldHMgfHwgdGFyZ2V0cy5pbmNsdWRlcygnTG9jYXRpb25zJykpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWRlc3RydWN0dXJpbmdcbiAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSBnZW9jb2RpbmdTZWFyY2hQYXJhbXM7XG4gICAgaWYgKHNvdXJjZXMuaW5jbHVkZXMoJ0Zhdm91cml0ZScpKSB7XG4gICAgICBjb25zdCBmYXZvdXJpdGVMb2NhdGlvbnMgPSBnZXRGYXZvdXJpdGVMb2NhdGlvbnMoY29udGV4dCk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGZpbHRlckZhdm91cml0ZUxvY2F0aW9ucyhmYXZvdXJpdGVMb2NhdGlvbnMsIGlucHV0KSxcbiAgICAgICk7XG4gICAgICBpZiAoc291cmNlcy5pbmNsdWRlcygnQmFjaycpKSB7XG4gICAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChnZXRCYWNrU3VnZ2VzdGlvbigpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdEYXRhc291cmNlJykpIHtcbiAgICAgIGNvbnN0IGdlb2NvZGluZ0xheWVycyA9IFsndmVudWUnLCAnYWRkcmVzcycsICdzdHJlZXQnXTtcbiAgICAgIGlmICh0YXJnZXRzLmluY2x1ZGVzKCdTdGF0aW9ucycpKSB7XG4gICAgICAgIGdlb2NvZGluZ0xheWVycy5wdXNoKCdzdGF0aW9uJyk7IC8vIHNlYXJjaCBzdGF0aW9ucyBmcm9tIE9TTVxuICAgICAgfVxuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBnZXRHZW9jb2RpbmdSZXN1bHRzKFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICAgIHNlYXJjaFBhcmFtcyxcbiAgICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgICBmb2N1c1BvaW50LFxuICAgICAgICAgIGdlb2NvZGluZ1NvdXJjZXMuam9pbignLCcpLFxuICAgICAgICAgIFVSTF9QRUxJQVMsXG4gICAgICAgICAgbWluaW1hbFJlZ2V4cCxcbiAgICAgICAgICBnZW9jb2RpbmdMYXllcnMsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdIaXN0b3J5JykpIHtcbiAgICAgIGNvbnN0IGxvY2F0aW9uSGlzdG9yeSA9IGdldE9sZFNlYXJjaGVzKGNvbnRleHQsICdlbmRwb2ludCcpO1xuICAgICAgY29uc3QgZHJvcExheWVycyA9IFsnYmlrZXN0YXRpb24nXTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5zdG9wTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5yb3V0ZUxheWVycyk7XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ucGFya2luZ0xheWVycyk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGZpbHRlck9sZFNlYXJjaGVzKGxvY2F0aW9uSGlzdG9yeSwgaW5wdXQsIGRyb3BMYXllcnMpLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgaWYgKGFsbFRhcmdldHMgfHwgdGFyZ2V0cy5pbmNsdWRlcygnUGFya2luZ0FyZWFzJykpIHtcbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdEYXRhc291cmNlJykpIHtcbiAgICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IGdlb2NvZGluZ1NlYXJjaFBhcmFtcztcbiAgICAgIGlmIChnZW9jb2RpbmdTaXplICYmIGdlb2NvZGluZ1NpemUgIT09IDEwKSB7XG4gICAgICAgIHNlYXJjaFBhcmFtcy5zaXplID0gZ2VvY29kaW5nU2l6ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGdlb2NvZGluZ0xheWVycyA9IFsnY2FycGFyaycsICdiaWtlcGFyayddO1xuICAgICAgY29uc3QgZmVlZElkcyA9IHBhcmtpbmdBcmVhU291cmNlcyA/IHBhcmtpbmdBcmVhU291cmNlcy5qb2luKCcsJykgOiBudWxsO1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBnZXRHZW9jb2RpbmdSZXN1bHRzKFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICAgIHNlYXJjaFBhcmFtcyxcbiAgICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgICBmb2N1c1BvaW50LFxuICAgICAgICAgIGZlZWRJZHMsXG4gICAgICAgICAgVVJMX1BFTElBUyxcbiAgICAgICAgICBtaW5pbWFsUmVnZXhwLFxuICAgICAgICAgIGdlb2NvZGluZ0xheWVycyxcbiAgICAgICAgKS50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgICAgIGlmIChmaWx0ZXJSZXN1bHRzKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyUmVzdWx0cyhyZXN1bHRzLCBtb2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnSGlzdG9yeScpKSB7XG4gICAgICBjb25zdCBoaXN0b3J5ID0gZ2V0T2xkU2VhcmNoZXMoY29udGV4dCk7XG4gICAgICBjb25zdCBkcm9wTGF5ZXJzID0gWydiaWtlc3RhdGlvbiddO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnN0b3BMYXllcnMpO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnJvdXRlTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5sb2NhdGlvbkxheWVycyk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goZmlsdGVyT2xkU2VhcmNoZXMoaGlzdG9yeSwgaW5wdXQsIGRyb3BMYXllcnMpKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCB1c2VTdG9wcyA9IHRhcmdldHMuaW5jbHVkZXMoJ1N0b3BzJyk7XG4gIGNvbnN0IHVzZVN0YXRpb25zID0gdGFyZ2V0cy5pbmNsdWRlcygnU3RhdGlvbnMnKTtcblxuICBpZiAoYWxsVGFyZ2V0cyB8fCB1c2VTdG9wcyB8fCB1c2VTdGF0aW9ucykge1xuICAgIGlmIChzb3VyY2VzLmluY2x1ZGVzKCdGYXZvdXJpdGUnKSkge1xuICAgICAgY29uc3QgZmF2b3VyaXRlU3RvcHMgPSBnZXRGYXZvdXJpdGVTdG9wcyhjb250ZXh0KTtcbiAgICAgIGxldCBzdG9wc0FuZFN0YXRpb25zO1xuICAgICAgaWYgKGZhdm91cml0ZVN0b3BzLmV2ZXJ5KHN0b3AgPT4gc3RvcC50eXBlID09PSAnc3RhdGlvbicpKSB7XG4gICAgICAgIHN0b3BzQW5kU3RhdGlvbnMgPSBnZXRTdG9wc0Zyb21HZW9jb2RpbmcoXG4gICAgICAgICAgZmF2b3VyaXRlU3RvcHMsXG4gICAgICAgICAgVVJMX1BFTElBU19QTEFDRSxcbiAgICAgICAgKS50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgICAgIGlmIChmaWx0ZXJSZXN1bHRzKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyUmVzdWx0cyhyZXN1bHRzLCBtb2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RvcHNBbmRTdGF0aW9ucyA9IGdldFN0b3BBbmRTdGF0aW9uc1F1ZXJ5KGZhdm91cml0ZVN0b3BzKVxuICAgICAgICAgIC50aGVuKGZhdm91cml0ZXMgPT5cbiAgICAgICAgICAgIGdldFN0b3BzRnJvbUdlb2NvZGluZyhmYXZvdXJpdGVzLCBVUkxfUEVMSUFTX1BMQUNFKSxcbiAgICAgICAgICApXG4gICAgICAgICAgLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICAgICAgICBpZiAoZmlsdGVyUmVzdWx0cykge1xuICAgICAgICAgICAgICByZXR1cm4gZmlsdGVyUmVzdWx0cyhyZXN1bHRzLCBtb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBmaWx0ZXJGYXZvdXJpdGVTdG9wcyhzdG9wc0FuZFN0YXRpb25zLCBpbnB1dCwgdXNlU3RvcHMsIHVzZVN0YXRpb25zKSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0RhdGFzb3VyY2UnKSkge1xuICAgICAgY29uc3QgZ2VvY29kaW5nTGF5ZXJzID0gW107XG4gICAgICBpZiAodXNlU3RvcHMpIHtcbiAgICAgICAgZ2VvY29kaW5nTGF5ZXJzLnB1c2goJ3N0b3AnKTtcbiAgICAgIH1cbiAgICAgIGlmICh1c2VTdGF0aW9ucykge1xuICAgICAgICBnZW9jb2RpbmdMYXllcnMucHVzaCgnc3RhdGlvbicpO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2VhcmNoUGFyYW1zID1cbiAgICAgICAgZ2VvY29kaW5nU2l6ZSAmJiBnZW9jb2RpbmdTaXplICE9PSAxMCA/IHsgc2l6ZTogZ2VvY29kaW5nU2l6ZSB9IDoge307XG4gICAgICBpZiAoZ2VvY29kaW5nU2VhcmNoUGFyYW1zICYmIGdlb2NvZGluZ1NlYXJjaFBhcmFtc1snYm91bmRhcnkuY291bnRyeSddKSB7XG4gICAgICAgIHNlYXJjaFBhcmFtc1snYm91bmRhcnkuY291bnRyeSddID1cbiAgICAgICAgICBnZW9jb2RpbmdTZWFyY2hQYXJhbXNbJ2JvdW5kYXJ5LmNvdW50cnknXTtcbiAgICAgIH1cbiAgICAgIC8vIGEgbGl0dGxlIGhhY2s6IHdoZW4gc2VhcmNoaW5nIGxvY2F0aW9uIGRhdGEsIGF1dG9tYXRpY2FsbHkgZGVkdXBlIHN0b3BzXG4gICAgICAvLyB0aGlzIGNvdWxkIGJlIGEgbmV3IGV4cGxpY2l0IHByb3BcbiAgICAgIGlmIChhbGxUYXJnZXRzIHx8IHRhcmdldHMuaW5jbHVkZXMoJ0xvY2F0aW9ucycpKSB7XG4gICAgICAgIHNlYXJjaFBhcmFtcy5kZWR1cGVzdG9wcyA9IDE7XG4gICAgICB9XG4gICAgICBjb25zdCBmZWVkcyA9IGZlZWRJRHMubWFwKHYgPT4gYGd0ZnMke3Z9YCkuam9pbignLCcpO1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBnZXRHZW9jb2RpbmdSZXN1bHRzKFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICAgIHNlYXJjaFBhcmFtcyxcbiAgICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgICBmb2N1c1BvaW50LFxuICAgICAgICAgIGZlZWRzLFxuICAgICAgICAgIFVSTF9QRUxJQVMsXG4gICAgICAgICAgbWluaW1hbFJlZ2V4cCxcbiAgICAgICAgICBnZW9jb2RpbmdMYXllcnMsXG4gICAgICAgICkudGhlbihyZXN1bHRzID0+IHtcbiAgICAgICAgICBpZiAoZmlsdGVyUmVzdWx0cykge1xuICAgICAgICAgICAgcmV0dXJuIGZpbHRlclJlc3VsdHMocmVzdWx0cywgbW9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0hpc3RvcnknKSkge1xuICAgICAgY29uc3Qgc3RvcEhpc3RvcnkgPSBnZXRPbGRTZWFyY2hlcyhjb250ZXh0KS5maWx0ZXIoaXRlbSA9PiB7XG4gICAgICAgIGlmIChpdGVtLnByb3BlcnRpZXMuZ2lkKSB7XG4gICAgICAgICAgcmV0dXJuIGl0ZW0ucHJvcGVydGllcy5naWQuaW5jbHVkZXMoJ0dURlM6Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGRyb3BMYXllcnMgPSBbJ2Jpa2VzdGF0aW9uJ107XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ucm91dGVMYXllcnMpO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLmxvY2F0aW9uTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5wYXJraW5nTGF5ZXJzKTtcbiAgICAgIGlmICghdXNlU3RvcHMpIHtcbiAgICAgICAgZHJvcExheWVycy5wdXNoKCdzdG9wJyk7XG4gICAgICB9XG4gICAgICBpZiAoIXVzZVN0YXRpb25zKSB7XG4gICAgICAgIGRyb3BMYXllcnMucHVzaCgnc3RhdGlvbicpO1xuICAgICAgfVxuICAgICAgaWYgKHRyYW5zcG9ydE1vZGUpIHtcbiAgICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICAgIGZpbHRlck9sZFNlYXJjaGVzKHN0b3BIaXN0b3J5LCBpbnB1dCwgZHJvcExheWVycykudGhlbihyZXN1bHQgPT5cbiAgICAgICAgICAgIGZpbHRlclJlc3VsdHMgPyBmaWx0ZXJSZXN1bHRzKHJlc3VsdCwgbW9kZSkgOiByZXN1bHQsXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgICBmaWx0ZXJPbGRTZWFyY2hlcyhzdG9wSGlzdG9yeSwgaW5wdXQsIGRyb3BMYXllcnMpLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoYWxsVGFyZ2V0cyB8fCB0YXJnZXRzLmluY2x1ZGVzKCdSb3V0ZXMnKSkge1xuICAgIGlmIChzb3VyY2VzLmluY2x1ZGVzKCdGYXZvdXJpdGUnKSkge1xuICAgICAgY29uc3QgZmF2b3VyaXRlUm91dGVzID0gZ2V0RmF2b3VyaXRlUm91dGVzKGNvbnRleHQpO1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBnZXRGYXZvdXJpdGVSb3V0ZXNRdWVyeShmYXZvdXJpdGVSb3V0ZXMsIGlucHV0LCBtb2RlLCBwYXRoT3B0cykudGhlbihcbiAgICAgICAgICByZXN1bHQgPT5cbiAgICAgICAgICAgIGZpbHRlclJlc3VsdHMgPyBmaWx0ZXJSZXN1bHRzKHJlc3VsdCwgbW9kZSwgJ1JvdXRlcycpIDogcmVzdWx0LFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgZ2V0Um91dGVzUXVlcnkoaW5wdXQsIGZlZWRJRHMsIHRyYW5zcG9ydE1vZGUsIHBhdGhPcHRzKS50aGVuKHJlc3VsdCA9PlxuICAgICAgICBmaWx0ZXJSZXN1bHRzID8gZmlsdGVyUmVzdWx0cyhyZXN1bHQsIG1vZGUsICdSb3V0ZXMnKSA6IHJlc3VsdCxcbiAgICAgICksXG4gICAgKTtcbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdIaXN0b3J5JykpIHtcbiAgICAgIGNvbnN0IHJvdXRlSGlzdG9yeSA9IGdldE9sZFNlYXJjaGVzKGNvbnRleHQpO1xuICAgICAgY29uc3QgZHJvcExheWVycyA9IFsnYmlrZXN0YXRpb24nXTtcbiAgICAgIGlmICh0cmFuc3BvcnRNb2RlKSB7XG4gICAgICAgIGRyb3BMYXllcnMucHVzaCguLi5yb3V0ZUxheWVycy5maWx0ZXIoaSA9PiAhKGkgPT09IHRyYW5zcG9ydE1vZGUpKSk7XG4gICAgICB9XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4uc3RvcExheWVycyk7XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ubG9jYXRpb25MYXllcnMpO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnBhcmtpbmdMYXllcnMpO1xuXG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGZpbHRlck9sZFNlYXJjaGVzKHJvdXRlSGlzdG9yeSwgaW5wdXQsIGRyb3BMYXllcnMpLnRoZW4ocmVzdWx0cyA9PlxuICAgICAgICAgIGZpbHRlclJlc3VsdHMgPyBmaWx0ZXJSZXN1bHRzKHJlc3VsdHMsIG1vZGUsICdSb3V0ZXMnKSA6IHJlc3VsdHMsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBpZiAoYWxsVGFyZ2V0cyB8fCB0YXJnZXRzLmluY2x1ZGVzKCdWZWhpY2xlUmVudGFsU3RhdGlvbnMnKSkge1xuICAgIGlmIChzb3VyY2VzLmluY2x1ZGVzKCdGYXZvdXJpdGUnKSkge1xuICAgICAgY29uc3QgZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb24gPVxuICAgICAgICBnZXRGYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnMoY29udGV4dCk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uc1F1ZXJ5KFxuICAgICAgICAgIGZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uLFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnRGF0YXNvdXJjZScpKSB7XG4gICAgICBjb25zdCBnZW9jb2RpbmdMYXllcnMgPSBbJ2Jpa2VzdGF0aW9uJ107XG4gICAgICBjb25zdCBzZWFyY2hQYXJhbXMgPVxuICAgICAgICBnZW9jb2RpbmdTaXplICYmIGdlb2NvZGluZ1NpemUgIT09IDEwID8geyBzaXplOiBnZW9jb2RpbmdTaXplIH0gOiB7fTtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZ2V0R2VvY29kaW5nUmVzdWx0cyhcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICBzZWFyY2hQYXJhbXMsXG4gICAgICAgICAgbGFuZ3VhZ2UsXG4gICAgICAgICAgZm9jdXNQb2ludCxcbiAgICAgICAgICBjaXR5QmlrZU5ldHdvcmtzLmpvaW4oJywnKSxcbiAgICAgICAgICBVUkxfUEVMSUFTLFxuICAgICAgICAgIG1pbmltYWxSZWdleHAsXG4gICAgICAgICAgZ2VvY29kaW5nTGF5ZXJzLFxuICAgICAgICApLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICAgICAgaWYgKGZpbHRlclJlc3VsdHMpIHtcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJSZXN1bHRzKHJlc3VsdHMsIG1vZGUsICdWZWhpY2xlUmVudGFsU3RhdGlvbnMnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnSGlzdG9yeScpKSB7XG4gICAgICBjb25zdCBoaXN0b3J5ID0gZ2V0T2xkU2VhcmNoZXMoY29udGV4dCk7XG4gICAgICBjb25zdCBkcm9wTGF5ZXJzID0gWy4uLnN0b3BMYXllcnNdO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnJvdXRlTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5sb2NhdGlvbkxheWVycyk7XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ucGFya2luZ0xheWVycyk7XG5cbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChmaWx0ZXJPbGRTZWFyY2hlcyhoaXN0b3J5LCBpbnB1dCwgZHJvcExheWVycykpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHNlYXJjaFJlc3VsdHNQcm9taXNlID0gUHJvbWlzZS5hbGwoc2VhcmNoQ29tcG9uZW50cylcbiAgICAudGhlbihmbGF0dGVuKVxuICAgIC50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgc2VhcmNoZXMucmVzdWx0cyA9IHJlc3VsdHM7XG4gICAgfSlcbiAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgIHNlYXJjaGVzLmVycm9yID0gZXJyO1xuICAgIH0pO1xuICBzZWFyY2hSZXN1bHRzUHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICBjYWxsYmFjayh7XG4gICAgICAuLi5zZWFyY2hlcyxcbiAgICAgIHJlc3VsdHM6IHNvcnRTZWFyY2hSZXN1bHRzKGxpbmVSZWdleHAsIHNlYXJjaGVzLnJlc3VsdHMsIGlucHV0KSxcbiAgICB9KTtcbiAgfSk7XG59XG5cbmNvbnN0IGRlYm91bmNlZFNlYXJjaCA9IGRlYm91bmNlKGdldFNlYXJjaFJlc3VsdHMsIDMwMCwge1xuICBsZWFkaW5nOiB0cnVlLFxufSk7XG5cbmV4cG9ydCBjb25zdCBleGVjdXRlU2VhcmNoID0gKFxuICB0YXJnZXRzLFxuICBzb3VyY2VzLFxuICB0cmFuc3BvcnRNb2RlLFxuICBzZWFyY2hDb250ZXh0LFxuICBmaWx0ZXJSZXN1bHRzLFxuICBnZW9jb2RpbmdTaXplLFxuICBkYXRhLFxuICBjYWxsYmFjayxcbiAgcGF0aE9wdHMsXG4gIHJlZlBvaW50LFxuKSA9PiB7XG4gIGNhbGxiYWNrKG51bGwpOyAvLyBUaGlzIG1lYW5zICd3ZSBhcmUgc2VhcmNoaW5nJ1xuICBkZWJvdW5jZWRTZWFyY2goXG4gICAgdGFyZ2V0cyxcbiAgICBzb3VyY2VzLFxuICAgIHRyYW5zcG9ydE1vZGUsXG4gICAgc2VhcmNoQ29udGV4dCxcbiAgICBmaWx0ZXJSZXN1bHRzLFxuICAgIGdlb2NvZGluZ1NpemUsXG4gICAgZGF0YSxcbiAgICBjYWxsYmFjayxcbiAgICBwYXRoT3B0cyxcbiAgICByZWZQb2ludCxcbiAgKTtcbn07XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHNlcmlhbGl6ZSBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtc2VyaWFsaXplJztcbi8qKlxuICogIFJldHVybiBQcm9taXNlIGZvciBhIHVybCBqc29uIGdldCByZXF1ZXN0XG4gKlxuICogQG5hbWUgZ2V0SnNvblxuICogQHBhcmFtIHtTdHJpbmd9IHVybFxuICogQHBhcmFtIHtBcnJheX0gcGFyYW1zXG4gKiBAcmV0dXJucyB7T2JqZWN0fSByZXNwb25zZVxuICogQGV4YW1wbGVcbiAqIGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLmdldEpzb24ocGFyYW0xLCBwYXJhbTIpO1xuICogLy89cmVzcG9uc2VcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRKc29uKHVybCwgcGFyYW1zKSB7XG4gIHJldHVybiBheGlvc1xuICAgIC5nZXQoXG4gICAgICBlbmNvZGVVUkkodXJsKSArXG4gICAgICAgIChwYXJhbXNcbiAgICAgICAgICA/ICh1cmwuc2VhcmNoKC9cXD8vKSA9PT0gLTEgPyAnPycgOiAnJicpICsgc2VyaWFsaXplKHBhcmFtcylcbiAgICAgICAgICA6ICcnKSxcbiAgICAgIHtcbiAgICAgICAgdGltZW91dDogMTAwMDAsXG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG5cbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIEFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICApXG4gICAgLnRoZW4ocmVzID0+IHtcbiAgICAgIHJldHVybiByZXMuZGF0YTtcbiAgICB9KTtcbn1cbiIsImltcG9ydCB7IGNyZWF0ZUluc3RhbmNlIH0gZnJvbSAnaTE4bmV4dCc7XG5pbXBvcnQgdHJhbnNsYXRpb25zIGZyb20gJy4vdHJhbnNsYXRpb25zJztcblxuY29uc3QgaTE4biA9IGNyZWF0ZUluc3RhbmNlKHtcbiAgZmFsbGJhY2tMbmc6ICdmaScsXG4gIC8vIGRlYnVnOiB0cnVlLFxuICByZXNvdXJjZXM6IHRyYW5zbGF0aW9ucyxcbiAgZGVmYXVsdE5TOiAndHJhbnNsYXRpb24nLFxuICByZWFjdDoge1xuICAgIHVzZVN1c3BlbnNlOiB0cnVlLFxuICB9LFxufSk7XG5cbmkxOG4uaW5pdCgpO1xuXG5leHBvcnQgZGVmYXVsdCBpMThuO1xuIiwiY29uc3QgdHJhbnNsYXRpb25zID0ge1xuICBkZToge1xuICAgIHRyYW5zbGF0aW9uOiB7XG4gICAgICBhZGRyZXNzOiAnQWRyZXNzZScsXG4gICAgICAnYWRkcmVzcy1wbGFjZS1vci1idXNpbmVzcyc6ICdBZHJlc3MsIE9ydCBvciBHZXNjaMOkZnQnLFxuICAgICAgJ2FkZC12aWEtYnV0dG9uLWxhYmVsJzogJ0bDvGdlIFp3aXNjaGVuemllbCBoaW56dScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwnOlxuICAgICAgICAnU2V0IHN0b3AgZHVyYXRpb24gYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtY2xvc2UnOlxuICAgICAgICAnQ2xvc2Ugc3RvcCBkdXJhdGlvbiBzZWxlY3RvciBhdCB2aWEgcG9pbnQge3tpbmRleH19JyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1vcGVuJzpcbiAgICAgICAgJ09wZW4gc3RvcCBkdXJhdGlvbiBzZWxlY3RvciBhdCB2aWEgcG9pbnQge3tpbmRleH19JyxcbiAgICAgIGFpcnBsYW5lOiAnRmx1ZycsXG4gICAgICBhcnJpdmFsOiAnQW5rdW5mdCcsXG4gICAgICBiYWNrOiAnWnVyw7xjaycsXG4gICAgICBiaWtlcmVudGFsc3RhdGlvbjogJ0xlaWhyYWQtU3RhdGlvbicsXG4gICAgICBidXM6ICdCdXMnLFxuICAgICAgY2FuY2VsOiAnQWJicmVjaGVuJyxcbiAgICAgICdjbGVhci1idXR0b24tbGFiZWwnOiAnTMO2c2NoZW4nLFxuICAgICAgJ2NsZWFyLXNlYXJjaC1oaXN0b3J5JzogJ1N1Y2hoaXN0b3JpZSBsw7ZzY2hlbicsXG4gICAgICBjdXJyZW50cG9zaXRpb246ICdBa3R1ZWxsZSBQb3NpdGlvbicsXG4gICAgICBkZWxldGU6ICdMw7ZzY2hlbicsXG4gICAgICAnZGVsZXRlLW9sZC1zZWFyY2hlcy1oZWFkZXInOiAnV29sbGVuIFNpZSBkaWUgU3VjaC1IaXN0b3JpZSBsw7ZzY2hlbj8nLFxuICAgICAgZGVwYXJ0dXJlOiAnQWJmYWhydCcsXG4gICAgICBkZXN0aW5hdGlvbjogJ1ppZWwnLFxuICAgICAgJ2dpdmUtb3JpZ2luJzogJ1N0YXJ0IGVpbmdlYmVuLicsXG4gICAgICAnZ2l2ZS1kZXN0aW5hdGlvbic6ICdaaWVsIGVpbmdlYmVuLicsXG4gICAgICBmYXZvdXJpdGU6ICdGYXZvcml0ZW4nLFxuICAgICAgZmVycnk6ICdGw6RocmUnLFxuICAgICAgJ2Z1dHVyZS1yb3V0ZSc6ICdadWvDvG5mdGlnZSBWZXJiaW5kdW5nJyxcbiAgICAgIG9yaWdpbjogJ1N0YXJ0JyxcbiAgICAgICdvcmlnaW4tc3RvcC1uZWFyLXlvdSc6ICdTdGFydCcsXG4gICAgICBvd25sb2NhdGlvbnM6ICdFaWdlbmUgRmF2b3JpdGVuJyxcbiAgICAgIGxvYWRpbmc6ICdMYWRlbi4uLicsXG4gICAgICAnbWludXRlLXNob3J0JzogJ21pbicsXG4gICAgICByYWlsOiAnWnVnJyxcbiAgICAgIHNlYXJjaDogJ1N1Y2hlJyxcbiAgICAgICdzZWFyY2gtYWRkcmVzcy1vci1wbGFjZSc6ICdTdWNoZSBhbmhhbmQgdm9uIEFkcmVzc2Ugb2RlciBPcnRzYW5nYWJlJyxcbiAgICAgICdzZWFyY2gtYnV0dG9uLWxhYmVsJzogJ1N1Y2hlJyxcbiAgICAgICdzZWFyY2gtZGVzdGluYXRpb24nOiAnU3VjaGUgWmllbG9ydCwgTGluaWUgb3IgSGFsdGVzdGVsbGUnLFxuICAgICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1pbmRleCc6ICdaaWVsb3J0IGVpbmdlYmVuJyxcbiAgICAgICdzZWFyY2gtZGVzdGluYXRpb24tcmVzdWx0cy1idXQtbm8tc2VhcmNoJzpcbiAgICAgICAgJ0VyZ2Vibmlzc2UgaW4g4oCcWmllbG9ydOKAnS1SZWl0ZXIgYW56ZWlnZW4nLFxuICAgICAgJ3NlYXJjaC1uby1yZXN1bHRzJzogJ0tlaW4gT3J0IGdlZnVuZGVuLicsXG4gICAgICAnc2VhcmNoLW9yaWdpbic6ICdTdWNoZSBTdGFydG9ydCwgTGluaWUgb2RlciBIYWx0ZXN0ZWxsZScsXG4gICAgICAnc2VhcmNoLW9yaWdpbi1pbmRleCc6ICdTdGFydG9ydCBlaW5nZWJlbicsXG4gICAgICAnc2VhcmNoLXBvc2l0aW9uJzogJ1N0YW5kb3J0IGVybWl0dGVsbicsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsJzogJ1ZlbnVlLCBwbGFjZSBhbmQgc3RvcHNlYXJjaC4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtZGVza3RvcCc6XG4gICAgICAgICdOYXZpZ2F0ZSBsaXN0IHdpdGggYXJyb3cga2V5cyBhbmQgc2VsZWN0IHdpdGggZW50ZXIga2V5LicsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1tb2JpbGUnOlxuICAgICAgICAnRW50ZXIgdGhlIGxvY2F0aW9uIGFuZCBuYXZpZ2F0ZSBpbiB0aGUgbGlzdCBieSBzd2lwaW5nLicsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLW1vdmUtdG8tZGVzdGluYXRpb24nOlxuICAgICAgICAnQWZ0ZXIgc2VsZWN0aW5nIHRoZSBzdGFydGluZyBsb2NhdGlvbiB5b3UgYXJlIGF1dG9tYXRpY2FsbHkgbW92ZWQgdG8gdGhlIGRlc3RpbmF0aW9uIGZpZWxkLicsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbic6ICdUaGVyZSBpcyB7e2NvdW50fX0gc3VnZ2VzdGlvbiBhdmFpbGFibGUnLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW5fcGx1cmFsJzpcbiAgICAgICAgJ1RoZXJlIGFyZSB7e2NvdW50fX0gc3VnZ2VzdGlvbnMgYXZhaWxhYmxlJyxcbiAgICAgICdzZWFyY2gtY3VycmVudC1zdWdnZXN0aW9uJzogJ0FrdHVlbGxlIEF1c3dhaGw6IHt7c2VsZWN0aW9ufX0nLFxuICAgICAgc3RyZWV0OiAnU3RyYcOfZScsXG4gICAgICBzdWJ3YXk6ICdVLUJhaG4nLFxuICAgICAgc3RhdGlvbjogJ1N0YXRpb24nLFxuICAgICAgc3RvcDogJ0hhbHRlc3RlbGxlJyxcbiAgICAgICdzdG9wLW5lYXIteW91JzogJ1N1Y2hlIEhhbHRlc3RlbGxlbiB1bmQgTGluaWVuIGluIGRlciBOw6RoZScsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1idXMnOiAnU3VjaGUgQnVzbGluaWVuIG9yIEhhbHRlc3RlbGxlbicsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1jaXR5YmlrZSc6ICdTdWNoZSBMZWlocmFkLVN0YXRpb25lbicsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1yYWlsJzogJ1N1Y2hlIFp1Z3ZlcmJpbmR1bmdlbiBvZGVyIEJhaG5ow7ZmZScsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1zdWJ3YXknOiAnU3VjaGUgVS1CYWhuLUxpbmllbiBvZGVyIEhhbHRlc3RlbGxlbicsXG4gICAgICAnc3RvcC1uZWFyLXlvdS10cmFtJzogJ1N1Y2hlIFN0YWR0YmFobi1IYWx0ZXN0ZWxsZW4tU3VjaGUnLFxuICAgICAgJ3RvZGF5LWF0JzogJ0hldXRlIHVtJyxcbiAgICAgICd0b21vcnJvdy1hdCc6ICdNb3JnZW4gdW0nLFxuICAgICAgdHJhbTogJ1N0cmHDn2VuYmFobicsXG4gICAgICAndXNlLW93bi1wb3NpdGlvbic6ICdCZW51dHplIGFrdHVlbGxlbiBTdGFuZG9ydCcsXG4gICAgICAnc2VsZWN0LWZyb20tbWFwJzogJ1fDpGhsZSBQb3NpdGlvbiBhbmhhbmQgS2FydGUnLFxuICAgICAgJ3NlbGVjdC1mcm9tLW93bi1sb2NhdGlvbnMnOiAnQXVzIGVpZ2VuZW4gRmF2b3JpdGVuIGF1c3fDpGhsZW4nLFxuICAgICAgdmVudWU6ICdWZW51ZScsXG4gICAgICAndmlhLXBvaW50JzogJ1p3aXNjaGVuemllbCcsXG4gICAgICB3aGVyZTogJ1dvaGluPycsXG4gICAgICBwbGFjZTogJ09ydCcsXG4gICAgfSxcbiAgfSxcbiAgZW46IHtcbiAgICB0cmFuc2xhdGlvbjoge1xuICAgICAgYWRkcmVzczogJ0FkZHJlc3MnLFxuICAgICAgJ2FkZHJlc3MtcGxhY2Utb3ItYnVzaW5lc3MnOiAnQWRkcmVzcywgcGxhY2Ugb3IgYnVzaW5lc3MnLFxuICAgICAgJ2FkZC12aWEtYnV0dG9uLWxhYmVsJzogJ0FkZCB2aWEgcG9pbnQnLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsJzpcbiAgICAgICAgJ1NldCBzdG9wIGR1cmF0aW9uIGF0IHZpYSBwb2ludCB7e2luZGV4fX0nLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLWNsb3NlJzpcbiAgICAgICAgJ0Nsb3NlIHN0b3AgZHVyYXRpb24gc2VsZWN0b3IgYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtb3Blbic6XG4gICAgICAgICdPcGVuIHN0b3AgZHVyYXRpb24gc2VsZWN0b3IgYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgICBhaXJwbGFuZTogJ0ZsaWdodCcsXG4gICAgICBhcnJpdmFsOiAnQXJyaXZhbCcsXG4gICAgICBiYWNrOiAnQmFjaycsXG4gICAgICBiaWtlcGFyazogJ1BhcmsgJiBSaWRlIGZvciBiaWtlcycsXG4gICAgICBiaWtlcmVudGFsc3RhdGlvbjogJ0Jpa2Ugc3RhdGlvbicsXG4gICAgICBidXM6ICdidXMnLFxuICAgICAgY2FuY2VsOiAnQ2FuY2VsJyxcbiAgICAgIGNhcnBhcms6ICdQYXJrICYgUmlkZScsXG4gICAgICAnY2xlYXItYnV0dG9uLWxhYmVsJzogJ0NsZWFyJyxcbiAgICAgICdjbGVhci1zZWFyY2gtaGlzdG9yeSc6ICdDbGVhciBzZWFyY2ggaGlzdG9yeScsXG4gICAgICBjdXJyZW50cG9zaXRpb246ICdDdXJyZW50IHBvc2l0aW9uJyxcbiAgICAgIGRlbGV0ZTogJ0RlbGV0ZScsXG4gICAgICAnZGVsZXRlLW9sZC1zZWFyY2hlcy1oZWFkZXInOiAnRG8geW91IHdhbnQgdG8gY2xlYXIgdGhlIHNlYXJjaCBoaXN0b3J5PycsXG4gICAgICBkZXBhcnR1cmU6ICdEZXBhcnR1cmUnLFxuICAgICAgZGVzdGluYXRpb246ICdEZXN0aW5hdGlvbicsXG4gICAgICAnZ2l2ZS1vcmlnaW4nOiAnRW50ZXIgeW91ciBvcmlnaW4uJyxcbiAgICAgICdnaXZlLWRlc3RpbmF0aW9uJzogJ0VudGVyIHlvdXIgZGVzdGluYXRpb24nLFxuICAgICAgZmF2b3VyaXRlOiAnRmF2b3VyaXRlJyxcbiAgICAgIGZlcnJ5OiAnRmVycnknLFxuICAgICAgJ2Z1dHVyZS1yb3V0ZSc6ICdGdXR1cmUgcm91dGUnLFxuICAgICAgb3JpZ2luOiAnU3RhcnQnLFxuICAgICAgJ29yaWdpbi1zdG9wLW5lYXIteW91JzogJ1N0YXJ0JyxcbiAgICAgIG93bmxvY2F0aW9uczogJ093biBsb2NhdGlvbnMnLFxuICAgICAgbG9hZGluZzogJ0xvYWRpbmcuLi4nLFxuICAgICAgJ21pbnV0ZS1zaG9ydCc6ICdtJyxcbiAgICAgIHBsYXRmb3JtOiAnUGxhdGZvcm0nLFxuICAgICAgcmFpbDogJ1RyYWluJyxcbiAgICAgIHJlcXVpcmVkOiAncmVxdWlyZWQgZmllbGQnLFxuICAgICAgc2VhcmNoOiAnU2VhcmNoJyxcbiAgICAgICdzZWFyY2gtYWRkcmVzcy1vci1wbGFjZSc6ICdTZWFyY2ggYnkgYWRkcmVzcyBvciBwbGFjZSBuYW1lJyxcbiAgICAgICdzZWFyY2gtYnV0dG9uLWxhYmVsJzogJ1NlYXJjaCcsXG4gICAgICAnc2VhcmNoLWRlc3RpbmF0aW9uJzogJ1NlYXJjaCBkZXN0aW5hdGlvbiwgcm91dGUgb3Igc3RvcCcsXG4gICAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLWluZGV4JzogJ0VudGVyIGRlc3RpbmF0aW9uJyxcbiAgICAgICdzZWFyY2gtZGVzdGluYXRpb24tcmVzdWx0cy1idXQtbm8tc2VhcmNoJzpcbiAgICAgICAgJ1ZpZXcgcmVzdWx0cyBpbiB0aGUgYWRqYWNlbnQg4oCcRGVzdGluYXRpb27igJ0gdGFiJyxcbiAgICAgICdzZWFyY2gtbm8tcmVzdWx0cyc6ICdObyBsb2NhdGlvbicsXG4gICAgICAnc2VhcmNoLW9yaWdpbic6ICdTZWFyY2ggb3JpZ2luLCByb3V0ZSBvciBzdG9wJyxcbiAgICAgICdzZWFyY2gtb3JpZ2luLWluZGV4JzogJ0VudGVyIG9yaWdpbicsXG4gICAgICAnc2VhcmNoLXBvc2l0aW9uJzogJ0RldGVjdCBsb2NhdGlvbicsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsJzogJ1ZlbnVlLCBwbGFjZSBhbmQgc3RvcHNlYXJjaC4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtZGVza3RvcCc6XG4gICAgICAgICdOYXZpZ2F0ZSBsaXN0IHdpdGggYXJyb3cga2V5cyBhbmQgc2VsZWN0IHdpdGggZW50ZXIga2V5LicsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1tb2JpbGUnOlxuICAgICAgICAnRW50ZXIgdGhlIGxvY2F0aW9uIGFuZCBuYXZpZ2F0ZSBpbiB0aGUgbGlzdCBieSBzd2lwaW5nLicsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLW1vdmUtdG8tZGVzdGluYXRpb24nOlxuICAgICAgICAnQWZ0ZXIgc2VsZWN0aW5nIHRoZSBzdGFydGluZyBsb2NhdGlvbiB5b3UgYXJlIGF1dG9tYXRpY2FsbHkgbW92ZWQgdG8gdGhlIGRlc3RpbmF0aW9uIGZpZWxkLicsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbic6ICdUaGVyZSBpcyB7e2NvdW50fX0gc3VnZ2VzdGlvbiBhdmFpbGFibGUnLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW5fcGx1cmFsJzpcbiAgICAgICAgJ1RoZXJlIGFyZSB7e2NvdW50fX0gc3VnZ2VzdGlvbnMgYXZhaWxhYmxlJyxcbiAgICAgICdzZWFyY2gtY3VycmVudC1zdWdnZXN0aW9uJzogJ0N1cnJlbnQgc2VsZWN0aW9uOiB7e3NlbGVjdGlvbn19JyxcbiAgICAgIHN0cmVldDogJ1N0cmVldCcsXG4gICAgICBzdWJ3YXk6ICdNZXRybycsXG4gICAgICBzdGF0aW9uOiAnU3RhdGlvbicsXG4gICAgICBzdG9wOiAnU3RvcCcsXG4gICAgICAnc3RvcC1uZWFyLXlvdSc6ICdTZWFyY2ggc3RvcHMgYW5kIHJvdXRlcycsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1haXJwbGFuZSc6ICdTZWFyY2ggZmxpZ2h0cyBvciBhaXJwb3J0cycsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1iaWtlcGFyayc6ICdTZWFyY2ggYmlrZSBwYXJrcycsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1idXMnOiAnU2VhcmNoIGJ1cyByb3V0ZXMgb3Igc3RvcHMnLFxuICAgICAgJ3N0b3AtbmVhci15b3UtY2FycGFyayc6ICdTZWFyY2ggY2FyIHBhcmtzJyxcbiAgICAgICdzdG9wLW5lYXIteW91LWNpdHliaWtlJzogJ1NlYXJjaCBjaXR5IGJpa2Ugc3RhdGlvbnMnLFxuICAgICAgJ3N0b3AtbmVhci15b3UtcmFpbCc6ICdTZWFyY2ggdHJhaW4gcm91dGVzIG9yIHN0YXRpb25zJyxcbiAgICAgICdzdG9wLW5lYXIteW91LXN1YndheSc6ICdTZWFyY2ggbWV0cm8gcm91dGVzIG9yIHN0YXRpb25zICcsXG4gICAgICAnc3RvcC1uZWFyLXlvdS10cmFtJzogJ1NlYXJjaCB0cmFtIHJvdXRlcyBvciBzdG9wcycsXG4gICAgICAnc3RvcC1yb3V0ZS1zdGF0aW9uJzogJ0J1cyBhbmQgc3RvcCBzZWFyY2gnLFxuICAgICAgJ3RvZGF5LWF0JzogJ3RvZGF5IGF0JyxcbiAgICAgICd0b21vcnJvdy1hdCc6ICd0b21vcnJvdyBhdCcsXG4gICAgICB0cmFtOiAnVHJhbScsXG4gICAgICB0cmFjazogJ1RyYWNrJyxcbiAgICAgICd1c2Utb3duLXBvc2l0aW9uJzogJ1VzZSBjdXJyZW50IGxvY2F0aW9uJyxcbiAgICAgICdzZWxlY3QtZnJvbS1tYXAnOiAnU2VsZWN0IHBvc2l0aW9uIGZyb20gbWFwJyxcbiAgICAgICdzZWxlY3QtZnJvbS1vd24tbG9jYXRpb25zJzogJ1NlbGVjdCBmcm9tIG93biBsb2NhdGlvbnMnLFxuICAgICAgdmVudWU6ICdWZW51ZScsXG4gICAgICAndmlhLXBvaW50JzogJ1ZpYSBwb2ludCcsXG4gICAgICB3aGVyZTogJ1doZXJlIHRvPycsXG4gICAgICBwbGFjZTogJ0xvY2F0aW9uJyxcbiAgICB9LFxuICB9LFxuICBmaToge1xuICAgIHRyYW5zbGF0aW9uOiB7XG4gICAgICBhZGRyZXNzOiAnT3NvaXRlJyxcbiAgICAgICdhZGRyZXNzLXBsYWNlLW9yLWJ1c2luZXNzJzogJ09zb2l0ZSwgcGFpa2thIHRhaSB5cml0eXMnLFxuICAgICAgJ2FkZC12aWEtYnV0dG9uLWxhYmVsJzogJ0xpc8Okw6QgdsOkbGlwaXN0ZScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwnOlxuICAgICAgICAnQXNldGEgdsOkbGlwaXN0ZWVsbGUge3tpbmRleH19IHB5c8OkaGR5a3NlbiBrZXN0bycsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtY2xvc2UnOlxuICAgICAgICAnQXZhYSB2w6RsaXBpc3RlZW4ge3tpbmRleH19IHB5c8OkaGR5a3NlbiBrZXN0byB2YWxpdHNpbicsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtb3Blbic6XG4gICAgICAgICdTdWxqZSB2w6RsaXBpc3RlZW4ge3tpbmRleH19IHB5c8OkaGR5a3NlbiBrZXN0byB2YWxpdHNpbicsXG4gICAgICBhaXJwbGFuZTogJ0xlbnRva29uZScsXG4gICAgICBhcnJpdmFsOiAnUGVyaWxsw6QnLFxuICAgICAgYmFjazogJ1Rha2Fpc2luJyxcbiAgICAgIHZlaGljbGVyZW50YWxzdGF0aW9uOiAnUHnDtnLDpGFzZW1hJyxcbiAgICAgIGJpa2VwYXJrOiAnTGlpdHludMOkcHlzw6Rrw7ZpbnRpJyxcbiAgICAgIGJ1czogJ2J1c3NpJyxcbiAgICAgIGNhbmNlbDogJ1BlcnV1dGEnLFxuICAgICAgY2FycGFyazogJ0xpaXR5bnTDpHB5c8Oka8O2aW50aScsXG4gICAgICAnY2xlYXItYnV0dG9uLWxhYmVsJzogJ1R5aGplbm7DpCcsXG4gICAgICAnY2xlYXItc2VhcmNoLWhpc3RvcnknOiAnVHloamVubsOkIGhha3VoaXN0b3JpYScsXG4gICAgICBjdXJyZW50cG9zaXRpb246ICdUw6Rtw6RuaGV0a2luZW4gc2lqYWludGknLFxuICAgICAgZGVsZXRlOiAnUG9pc3RhJyxcbiAgICAgICdkZWxldGUtb2xkLXNlYXJjaGVzLWhlYWRlcic6ICdIYWx1YXRrbyB0eWhqZW50w6TDpCBoYWt1aGlzdG9yaWFuPycsXG4gICAgICBkZXBhcnR1cmU6ICdMw6RodMO2YWlrYScsXG4gICAgICBkZXN0aW5hdGlvbjogJ03DpMOkcsOkbnDDpMOkJyxcbiAgICAgIGZhdm91cml0ZTogJ1N1b3Npa2tpJyxcbiAgICAgIGZlcnJ5OiAnTGF1dHRhJyxcbiAgICAgICdmdXR1cmUtcm91dGUnOiAnVHVsZXZhIHJlaXR0aScsXG4gICAgICAnZ2l2ZS1vcmlnaW4nOiAnTMOkaHTDtnBhaWtrYScsXG4gICAgICAnZ2l2ZS1kZXN0aW5hdGlvbic6ICdNw6TDpHLDpG5ww6TDpCcsXG4gICAgICBvcmlnaW46ICdMw6RodMO2cGFpa2thJyxcbiAgICAgICdvcmlnaW4tc3RvcC1uZWFyLXlvdSc6ICdMw6RodMO2cGFpa2thJyxcbiAgICAgIG93bmxvY2F0aW9uczogJ09tYXQgcGFpa2F0JyxcbiAgICAgIGxvYWRpbmc6ICdMYWRhdGFhbi4uLicsXG4gICAgICAnbWludXRlLXNob3J0JzogJ21pbicsXG4gICAgICBwbGF0Zm9ybTogJ0xhaXR1cmknLFxuICAgICAgcmFpbDogJ0p1bmEnLFxuICAgICAgcmVxdWlyZWQ6ICdwYWtvbGxpbmVuIGtlbnR0w6QnLFxuICAgICAgc2VhcmNoOiAnRXRzaScsXG4gICAgICAnc2VhcmNoLWFkZHJlc3Mtb3ItcGxhY2UnOiAnSGFlIG9zb2l0dGVlbGxhIHRhaSBwYWlrYW4gbmltZWxsw6QnLFxuICAgICAgJ3NlYXJjaC1idXR0b24tbGFiZWwnOiAnSGFlJyxcbiAgICAgICdzZWFyY2gtZGVzdGluYXRpb24nOiAnSGFlIG3DpMOkcsOkbnDDpMOkdMOkLCBsaW5qYWEgdGFpIHB5c8Oka2tpw6QnLFxuICAgICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1pbmRleCc6ICdTecO2dMOkIG3DpMOkcsOkbnDDpMOkJyxcbiAgICAgICdzZWFyY2gtZGVzdGluYXRpb24tcmVzdWx0cy1idXQtbm8tc2VhcmNoJzpcbiAgICAgICAgJ0thdHNvIHR1bG9rc2V0IHZpZXJlaXNlbHTDpCBNw6TDpHLDpG5ww6TDpC12w6RsaWxlaGRlbHTDpCcsXG4gICAgICAnc2VhcmNoLW5vLXJlc3VsdHMnOiAnRWkgdHVsb2tzaWEnLFxuICAgICAgJ3NlYXJjaC1vcmlnaW4nOiAnSGFlIGzDpGh0w7ZwYWlra2FhLCBsaW5qYWEgdGFpIHB5c8Oka2tpw6QnLFxuICAgICAgJ3NlYXJjaC1vcmlnaW4taW5kZXgnOiAnU3nDtnTDpCBsw6RodMO2cGFpa2thJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwnOiAnUGFpa2thLCBsaW5qYSBqYSBweXPDpGtraWhha3UuJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLWRlc2t0b3AnOlxuICAgICAgICAnTmF2aWdvaSBsaXN0YXNzYSBudW9saW7DpHBww6RpbWlsbMOkIGphIHZhbGl0c2UgZW50ZXJpbGzDpC4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtbW9iaWxlJzpcbiAgICAgICAgJ1N5w7Z0w6Qgc2lqYWludGkgamEgbmF2aWdvaSBsaXN0YXNzYSBweXloa8OkaXNlbcOkbGzDpC4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1tb3ZlLXRvLWRlc3RpbmF0aW9uJzpcbiAgICAgICAgJ1ZhbGl0dHVhc2kgbMOkaHTDtnBhaWthbiBzaWlycnl0w6TDpG4gc3VvcmFhbiBtw6TDpHLDpG5ww6TDpC1rZW50dMOkw6RuLicsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbic6ICcgTMO2eWRldHRpaW4ge3tjb3VudH19IGVoZG90dXMnLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW5fcGx1cmFsJzogJyBMw7Z5ZGV0dGlpbiB7e2NvdW50fX0gZWhkb3R1c3RhJyxcbiAgICAgICdzZWFyY2gtY3VycmVudC1zdWdnZXN0aW9uJzogJ1TDpG3DpG5oZXRraW5lbiB2YWxpbnRhOiB7e3NlbGVjdGlvbn19JyxcbiAgICAgICdzZWFyY2gtcG9zaXRpb24nOiAnUGFpa2FubmEnLFxuICAgICAgc3RyZWV0OiAnS2F0dScsXG4gICAgICBzdWJ3YXk6ICdNZXRybycsXG4gICAgICBzdGF0aW9uOiAnQXNlbWEnLFxuICAgICAgc3RvcDogJ1B5c8Oka2tpJyxcbiAgICAgICdzdG9wLW5lYXIteW91JzogJ0xpbmphLCBweXPDpGtraSB0YWkgYXNlbWEnLFxuICAgICAgJ3N0b3AtbmVhci15b3UtYWlycGxhbmUnOiAnSGFlIGxlbnRvamEgdGFpIGxlbnRvYXNlbWFhJyxcbiAgICAgICdzdG9wLW5lYXIteW91LWJpa2VwYXJrJzogJ0hhZSBwecO2csOkcGFya2tpYScsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1idXMnOiAnSGFlIGJ1c3NpbGluamFhIHRhaSBweXPDpGtracOkJyxcbiAgICAgICdzdG9wLW5lYXIteW91LWNhcnBhcmsnOiAnSGFlIGF1dG9wYXJra2lhJyxcbiAgICAgICdzdG9wLW5lYXIteW91LWNpdHliaWtlJzogJ0hhZSBrYXVwdW5raXB5w7Zyw6Rhc2VtYWEnLFxuICAgICAgJ3N0b3AtbmVhci15b3UtcmFpbCc6ICdIYWUgbMOkaGlqdW5hYSB0YWkgYXNlbWFhJyxcbiAgICAgICdzdG9wLW5lYXIteW91LXN1YndheSc6ICdIYWUgbWV0cm9saW5qYWEgdGFpIGFzZW1hYScsXG4gICAgICAnc3RvcC1uZWFyLXlvdS10cmFtJzogJ0hhZSByYWl0aW9saW5qYWEgdGFpIHB5c8Oka2tpw6QnLFxuICAgICAgJ3N0b3Atcm91dGUtc3RhdGlvbic6ICdMaW5qYS0gamEgcHlzw6Rra2loYWt1JyxcbiAgICAgICd0b2RheS1hdCc6ICd0w6Ruw6TDpG4ga2xvJyxcbiAgICAgICd0b21vcnJvdy1hdCc6ICdodW9tZW5uYSBrbG8nLFxuICAgICAgdHJhbTogJ1JhaXRpb3ZhdW51JyxcbiAgICAgIHRyYWNrOiAnUmFpZGUnLFxuICAgICAgJ3VzZS1vd24tcG9zaXRpb24nOiAnS8OkeXTDpCBueWt5aXN0w6Qgc2lqYWludGlhJyxcbiAgICAgICdzZWxlY3QtZnJvbS1tYXAnOiAnVmFsaXRzZSBzaWphaW50aSBrYXJ0YWx0YScsXG4gICAgICAnc2VsZWN0LWZyb20tb3duLWxvY2F0aW9ucyc6ICdWYWxpdHNlIG9taXN0YSBwYWlrb2lzdGEnLFxuICAgICAgdmVudWU6ICdQYWlra2EnLFxuICAgICAgJ3ZpYS1wb2ludCc6ICdWw6RsaXBpc3RlJyxcbiAgICAgIHdoZXJlOiAnTWlubmUgbWVubsOkw6RuPycsXG4gICAgICBwbGFjZTogJ1BhaWtrYScsXG4gICAgfSxcbiAgfSxcbiAgcGw6IHtcbiAgICB0cmFuc2xhdGlvbjoge1xuICAgICAgYWRkcmVzczogJ0FkcmVzJyxcbiAgICAgICdhZGRyZXNzLXBsYWNlLW9yLWJ1c2luZXNzJzogJ0FkcmVzLCBtaWVqc2NlIGx1YiBmaXJtYScsXG4gICAgICAnYWRkLXZpYS1idXR0b24tbGFiZWwnOiAnRG9kYWogcHVua3QgcG/Fm3JlZG5pJyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbCc6XG4gICAgICAgICdXeWJpZXJ6IGN6YXMgcG9zdG9qdSBkbGEgcHVua3R1IHt7aW5kZXh9fScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtY2xvc2UnOlxuICAgICAgICAnWmFta25paiB3eWJvcm5payBjemFzdSBwb3N0b2p1IHcgcHVua2NpZSB7e2luZGV4fX0nLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLW9wZW4nOlxuICAgICAgICAnT3R3w7NyeiB3eWJvcm5payBjemFzdSBwb3N0b2p1IHcgcHVua2NpZSB7e2luZGV4fX0nLFxuICAgICAgYWlycGxhbmU6ICdMb3QnLFxuICAgICAgYXJyaXZhbDogJ1ByenlqYXpkJyxcbiAgICAgIGJhY2s6ICdXcsOzxIcnLFxuICAgICAgYmlrZXBhcms6ICdQYXJrdWogaSBKZWTFuiBkbGEgcm93ZXLDs3cnLFxuICAgICAgYmlrZXJlbnRhbHN0YXRpb246ICdTdGFjamEgcm93ZXJvd2EnLFxuICAgICAgYnVzOiAnYXV0b2J1cycsXG4gICAgICBjYW5jZWw6ICdBbnVsdWonLFxuICAgICAgY2FycGFyazogJ1Bhcmt1aiBpIEplZMW6JyxcbiAgICAgICdjbGVhci1idXR0b24tbGFiZWwnOiAnV3ljennFm8SHJyxcbiAgICAgICdjbGVhci1zZWFyY2gtaGlzdG9yeSc6ICdXeWN6ecWbxIcgaGlzdG9yacSZIHd5c3p1a2l3YW5pYScsXG4gICAgICBjdXJyZW50cG9zaXRpb246ICdPYmVjbmUgcG/Fgm/FvGVuaWUnLFxuICAgICAgZGVsZXRlOiAnVXN1xYQnLFxuICAgICAgJ2RlbGV0ZS1vbGQtc2VhcmNoZXMtaGVhZGVyJzpcbiAgICAgICAgJ0N6eSBuYSBwZXdubyBjaGNlc3ogd3ljennFm2NpxIcgaGlzdG9yacSZIHd5c3p1a2l3YW5pYT8nLFxuICAgICAgZGVwYXJ0dXJlOiAnT2RqYXpkJyxcbiAgICAgIGRlc3RpbmF0aW9uOiAnQ2VsJyxcbiAgICAgICdnaXZlLW9yaWdpbic6ICdXcHJvd2Fkxbogc3fDs2ogcHVua3QgcG9jesSFdGtvd3kuJyxcbiAgICAgICdnaXZlLWRlc3RpbmF0aW9uJzogJ1dwcm93YWTFuiBzd8OzaiBjZWwnLFxuICAgICAgZmF2b3VyaXRlOiAnVWx1YmlvbmUnLFxuICAgICAgZmVycnk6ICdQcm9tJyxcbiAgICAgICdmdXR1cmUtcm91dGUnOiAnUHJ6eXN6xYJhIHRyYXNhJyxcbiAgICAgIG9yaWdpbjogJ1BvY3rEhXRlaycsXG4gICAgICAnb3JpZ2luLXN0b3AtbmVhci15b3UnOiAnUG9jesSFdGVrJyxcbiAgICAgIG93bmxvY2F0aW9uczogJ1fFgmFzbmUgbWllanNjYScsXG4gICAgICBsb2FkaW5nOiAnxYFhZG93YW5pZeKApicsXG4gICAgICAnbWludXRlLXNob3J0JzogJ21pbi4nLFxuICAgICAgcGxhdGZvcm06ICdQZXJvbicsXG4gICAgICByYWlsOiAnUG9jacSFZycsXG4gICAgICByZXF1aXJlZDogJ3d5bWFnYW5lIHBvbGUnLFxuICAgICAgc2VhcmNoOiAnU3p1a2FqJyxcbiAgICAgICdzZWFyY2gtYWRkcmVzcy1vci1wbGFjZSc6ICdTenVrYWogcG8gYWRyZXNpZSBsdWIgbmF6d2llIG1pZWpzY2EnLFxuICAgICAgJ3NlYXJjaC1idXR0b24tbGFiZWwnOiAnU3p1a2FqJyxcbiAgICAgICdzZWFyY2gtZGVzdGluYXRpb24nOiAnU3p1a2FqIGNlbHUsIHRyYXN5IGx1YiBwcnp5c3Rhbmt1JyxcbiAgICAgICdzZWFyY2gtZGVzdGluYXRpb24taW5kZXgnOiAnV3Byb3dhZMW6IHB1bmt0IGRvY2Vsb3d5JyxcbiAgICAgICdzZWFyY2gtZGVzdGluYXRpb24tcmVzdWx0cy1idXQtbm8tc2VhcmNoJzpcbiAgICAgICAgJ1d5xZt3aWV0bCB3eW5pa2kgdyBzxIVzaWVkbmllaiBrYXJjaWUg4oCeQ2Vs4oCdJyxcbiAgICAgICdzZWFyY2gtbm8tcmVzdWx0cyc6ICdCcmFrIGxva2FsaXphY2ppJyxcbiAgICAgICdzZWFyY2gtb3JpZ2luJzogJ1d5c3p1a2FqIHBvY3rEhXRlaywga29uaWVjIGx1YiBwdW5rdCBwb8WbcmVkbmknLFxuICAgICAgJ3NlYXJjaC1vcmlnaW4taW5kZXgnOiAnV3Byb3dhZMW6IHB1bmt0IHBvY3rEhXRrb3d5JyxcbiAgICAgICdzZWFyY2gtcG9zaXRpb24nOiAnV3lrcnlqIGxva2FsaXphY2rEmScsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsJzogJ01pZWpzY2UsIGxva2FsaXphY2phIGkgcHJ6eXN0YW5lay4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtZGVza3RvcCc6XG4gICAgICAgICdOYXdpZ3VqIHBvIGxpxZtjaWUgdcW8eXdhasSFYyBzdHJ6YcWCZWsgaSB3eWJpZXJhaiBrbGF3aXN6ZW0gRW50ZXIuJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLW1vYmlsZSc6XG4gICAgICAgICdXcHJvd2FkxbogbG9rYWxpemFjasSZIGkgbmF3aWd1aiBwbyBsacWbY2llIGdlc3RhbWkgcHJ6ZXN1d2FuaWEuJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtbW92ZS10by1kZXN0aW5hdGlvbic6XG4gICAgICAgICdQbyB3eWJyYW5pdSBsb2thbGl6YWNqaSBwb2N6xIV0a293ZWosIGF1dG9tYXR5Y3puaWUgcHJ6ZWpkemllc3ogZG8gcG9sYSBtaWVqc2NhIGRvY2Vsb3dlZ28uJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuJzogJ0Rvc3TEmXBuYSBqZXN0IHt7Y291bnR9fSBwcm9wb3p5Y2phJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuX2Zldyc6ICdEb3N0xJlwbmUgc8SFIHt7Y291bnR9fSBwcm9wb3p5Y2plJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuX290aGVyJzogJ0Rvc3TEmXBuZSBqZXN0IHt7Y291bnR9fSBwcm9wb3p5Y2ppJyxcbiAgICAgICdzZWFyY2gtY3VycmVudC1zdWdnZXN0aW9uJzogJ09iZWNueSB3eWLDs3I6IHt7c2VsZWN0aW9ufX0nLFxuICAgICAgc3RyZWV0OiAnVWxpY2EnLFxuICAgICAgc3Vid2F5OiAnTWV0cm8nLFxuICAgICAgc3RhdGlvbjogJ1N0YWNqYScsXG4gICAgICBzdG9wOiAnUHJ6eXN0YW5laycsXG4gICAgICAnc3RvcC1uZWFyLXlvdSc6ICdTenVrYWogcHJ6eXN0YW5rw7N3IGkgdHJhcycsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1haXJwbGFuZSc6ICdTenVrYWogbG90w7N3IGkgbG90bmlzaycsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1idXMnOiAnU3p1a2FqIHRyYXMgYXV0b2J1c293eWNoIGkgcHJ6eXN0YW5rw7N3JyxcbiAgICAgICdzdG9wLW5lYXIteW91LWNpdHliaWtlJzogJ1N6dWthaiBzdGFjamkgcm93ZXLDs3cgbWllanNraWNoJyxcbiAgICAgICdzdG9wLW5lYXIteW91LXJhaWwnOiAnU3p1a2FqIHRyYXMga29sZWpvd3ljaCBpIHByenlzdGFua8OzdycsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1zdWJ3YXknOiAnU3p1a2FqIHRyYXMgbWV0cmEgaSBwcnp5c3RhbmvDs3cgJyxcbiAgICAgICdzdG9wLW5lYXIteW91LXRyYW0nOiAnU3p1a2FqIHRyYXMgdHJhbXdham93eWNoIGkgcHJ6eXN0YW5rw7N3JyxcbiAgICAgICdzdG9wLXJvdXRlLXN0YXRpb24nOiAnV3lzenVraXdhbmllIGF1dG9idXPDs3cgaSBwcnp5c3RhbmvDs3cnLFxuICAgICAgJ3RvZGF5LWF0JzogJ2R6acWbIG8nLFxuICAgICAgJ3RvbW9ycm93LWF0JzogJ2p1dHJvIG8nLFxuICAgICAgdHJhbTogJ1RyYW13YWonLFxuICAgICAgdHJhY2s6ICdUb3InLFxuICAgICAgJ3VzZS1vd24tcG9zaXRpb24nOiAnVcW8eWogb2JlY25laiBsb2thbGl6YWNqaScsXG4gICAgICAnc2VsZWN0LWZyb20tbWFwJzogJ1d5YmllcnogbWllanNjZSBuYSBtYXBpZScsXG4gICAgICAnc2VsZWN0LWZyb20tb3duLWxvY2F0aW9ucyc6ICdXeWJpZXJ6IHogd8WCYXNueWNoIG1pZWpzYycsXG4gICAgICB2ZW51ZTogJ01pZWpzY2UnLFxuICAgICAgJ3ZpYS1wb2ludCc6ICdQcnpleiBwdW5rdCcsXG4gICAgICB3aGVyZTogJ0Rva8SFZD8nLFxuICAgICAgcGxhY2U6ICdNaWVqc2NlJyxcbiAgICB9LFxuICB9LFxuICBzdjoge1xuICAgIHRyYW5zbGF0aW9uOiB7XG4gICAgICBhZGRyZXNzOiAnQWRyZXNzJyxcbiAgICAgICdhZGRyZXNzLXBsYWNlLW9yLWJ1c2luZXNzJzogJ0FkcmVzcywgcGxhdHMgZWxsZXIgZsO2cmV0YWcnLFxuICAgICAgJ2FkZC12aWEtYnV0dG9uLWxhYmVsJzogJ0zDpGdnIHRpbGwgdmlhcHVua3QnLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsJzpcbiAgICAgICAgJ1N0w6RsbCBpbiB2YXJha3RpZ2hldCBmw7ZyIHZpYXB1bmt0ZW4ge3tpbmRleH19JyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1jbG9zZSc6XG4gICAgICAgICdTdMOkbmcgdsOkbGphcmVuIGbDtnIgdmFyYWt0aWdoZXQgdmlkIHZpYS1wdW5rdGVuIHt7aW5kZXh9fScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtb3Blbic6XG4gICAgICAgICfDlnBwbmEgdsOkbGphcmVuIGbDtnIgdmFyYWt0aWdoZXQgdmlkIHZpYS1wdW5rdGVuIHt7aW5kZXh9fScsXG4gICAgICBhaXJwbGFuZTogJ0ZseWcnLFxuICAgICAgYXJyaXZhbDogJ0FubMOkbmRlcicsXG4gICAgICBiYWNrOiAnVGlsbGJha2EnLFxuICAgICAgYmlrZXJlbnRhbHN0YXRpb246ICdTdGFkc2N5a2Vsc3RhdGlvbicsXG4gICAgICBiaWtlcGFyazogJ0Fuc2x1dG5pbmdzcGFya2VyaW5nIGbDtnIgY3lrbGFyJyxcbiAgICAgIGJ1czogJ0J1c3NpJyxcbiAgICAgIGNhbmNlbDogJ0F2YnJ5dCcsXG4gICAgICBjYXJwYXJrOiAnSW5mYXJ0c3BhcmtlcmluZycsXG4gICAgICAnY2xlYXItYnV0dG9uLWxhYmVsJzogJ1TDtm0nLFxuICAgICAgJ2NsZWFyLXNlYXJjaC1oaXN0b3J5JzogJ1TDtm0gc8O2a2hpc3RvcmlrZW4nLFxuICAgICAgY3VycmVudHBvc2l0aW9uOiAnTnV2YXJhbmRlIHBvc2l0aW9uJyxcbiAgICAgIGRlbGV0ZTogJ1RhIGJvcnQnLFxuICAgICAgJ2RlbGV0ZS1vbGQtc2VhcmNoZXMtaGVhZGVyJzogJ1ZpbGwgZHUgdMO2bW1hIHPDtmtoaXN0b3Jpa2VuPycsXG4gICAgICBkZXBhcnR1cmU6ICdBdmfDpW5nc3RpZCcsXG4gICAgICBkZXN0aW5hdGlvbjogJ0Rlc3RpbmF0aW9uJyxcbiAgICAgIGZhdm91cml0ZTogJ0Zhdm9yaXQnLFxuICAgICAgZmVycnk6ICdGw6RyamEnLFxuICAgICAgJ2Z1dHVyZS1yb3V0ZSc6ICdGcmFtdGlkYSBydXR0JyxcbiAgICAgICdnaXZlLWRlc3RpbmF0aW9uJzogJ1Nrcml2IGluIGRpbiBkZXN0aW5hdGlvbicsXG4gICAgICAnZ2l2ZS1vcmlnaW4nOiAnU2tyaXYgaW4gZGluIGF2ZsOkcmRzcGxhdHMnLFxuICAgICAgb3JpZ2luOiAnQXZmw6RyZHNwbGF0cycsXG4gICAgICAnb3JpZ2luLXN0b3AtbmVhci15b3UnOiAnQXZmw6RyZHNwbGF0cycsXG4gICAgICBvd25sb2NhdGlvbnM6ICdFZ25hIHBsYXRzZXInLFxuICAgICAgbG9hZGluZzogJ0xhZGRhci4uLicsXG4gICAgICAnbWludXRlLXNob3J0JzogJ21pbicsXG4gICAgICBwbGF0Zm9ybTogJ1BsYXR0Zm9ybScsXG4gICAgICByYWlsOiAnVMOlZycsXG4gICAgICByZXF1aXJlZDogJ29ibGlnYXRvcmlza3QgZsOkbHQnLFxuICAgICAgc2VhcmNoOiAnU8O2aycsXG4gICAgICAnc2VhcmNoLWFkZHJlc3Mtb3ItcGxhY2UnOiAnU8O2ayBtZWQgYWRyZXNzZW4gZWxsZXIgcGxhdHNlbnMgbmFtbicsXG4gICAgICAnc2VhcmNoLWJ1dHRvbi1sYWJlbCc6ICdTw7ZrJyxcbiAgICAgICdzZWFyY2gtZGVzdGluYXRpb24nOiAnU8O2ayBkZXN0aW5hdGlvbiwgbGluamUgZWxsZXIgaMOlbGxwbGF0cycsXG4gICAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLWluZGV4JzogJ1Nrcml2IGRlc3RpbmF0aW9uJyxcbiAgICAgICdzZWFyY2gtZGVzdGluYXRpb24tcmVzdWx0cy1idXQtbm8tc2VhcmNoJzpcbiAgICAgICAgJ1NlIHJlc3VsdGF0ZW4gdW5kZXIgZmxpa2VuIERlc3RpbmF0aW9uJyxcbiAgICAgICdzZWFyY2gtbm8tcmVzdWx0cyc6ICdJbmdhIHPDtmtyZXN1bHRhdCcsXG4gICAgICAnc2VhcmNoLW9yaWdpbic6ICdTw7ZrIGF2ZsOkcmRzcGxhdHMsIGxpbmplIGVsbGVyIGjDpWxscGxhdHMnLFxuICAgICAgJ3NlYXJjaC1vcmlnaW4taW5kZXgnOiAnU2tyaXYgYXZmw6RyZHNwbGF0cycsXG4gICAgICAnc2VhcmNoLXBvc2l0aW9uJzogJ1PDtmsgcG9zaXRpb24nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbCc6ICdQbGF0cywgbGluamUgb2NoIGjDpWxscGxhdHNzw7ZrbmluZy4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtZGVza3RvcCc6XG4gICAgICAgICdOYXZpZ2VyYSBsaXN0YW4gbWVkIHBpbHRhbmdlbnRlcm5hIG9jaCB2w6RsaiBtZWQgRW50ZXItdGFuZ2V0ZW4uJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLW1vYmlsZSc6XG4gICAgICAgICdBbmdlIHBsYXRzZW4gb2NoIG5hdmlnZXJhIGkgbGlzdGFuIGdlbm9tIGF0dCBzdmVwYS4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1tb3ZlLXRvLWRlc3RpbmF0aW9uJzpcbiAgICAgICAgJ0VmdGVyIGF0dCBkdSB2YWx0IGF2Z8OlbmdzcGxhdHNlbiB0YXMgZHUgZGlyZWt0IHRpbGwgRGVzdGluYXRpb24tZsOkbHRldC4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW4nOiAnSGl0dGFkZSB7e2NvdW50fX0gZsO2cnNsYWcnLFxuICAgICAgJ3NlYXJjaC1jdXJyZW50LXN1Z2dlc3Rpb24nOiAnTnV2YXJhbmRlIHZhbDoge3tzZWxlY3Rpb259fScsXG4gICAgICBzdHJlZXQ6ICdHYXRhJyxcbiAgICAgIHN1YndheTogJ01ldHJvJyxcbiAgICAgIHN0YXRpb246ICdTdGF0aW9uJyxcbiAgICAgIHN0b3A6ICdIw6VsbHBsYXRzJyxcbiAgICAgICdzdG9wLW5lYXIteW91JzogJ1PDtmsgaMOlbGxwbGF0c2VyIGVsbGVyIGxpbmplcicsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1haXJwbGFuZSc6ICdTw7ZrIGZseWcgZWxsZXIgZmx5Z3BsYXRzZXInLFxuICAgICAgJ3N0b3AtbmVhci15b3UtYmlrZXBhcmsnOiAnU8O2ayBjeWtlbHBhcmtlcmluZycsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1idXMnOiAnU8O2ayBidXNzbGluamVyIGVsbGVyIGjDpWxscGxhdHNlcicsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1jYXJwYXJrJzogJ1PDtmsgYW5zbHV0bmluZ3NwYXJrZXJpbmcnLFxuICAgICAgJ3N0b3AtbmVhci15b3UtY2l0eWJpa2UnOiAnU8O2ayBzdGFkc2N5a2Vsc3RhdGlvbmVyJyxcbiAgICAgICdzdG9wLW5lYXIteW91LXJhaWwnOiAnU8O2ayBuw6RydMOlZ2VyIGVsbGVyIHN0YXRpb25lcicsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1zdWJ3YXknOiAnU8O2ayBtZXRyb2xpbmplciBlbGxlciBzdGF0aW9uZXInLFxuICAgICAgJ3N0b3AtbmVhci15b3UtdHJhbSc6ICdTw7ZrIHNww6VydmFnbmxpbmplciBlbGxlciBow6VsbHBsYXRzZXInLFxuICAgICAgJ3N0b3Atcm91dGUtc3RhdGlvbic6ICdCdXNzIG9jaCBzdG9wcCBzw7ZrbmluZ2VuJyxcbiAgICAgICd0b2RheS1hdCc6ICdpIGRhZyBrbCcsXG4gICAgICAndG9tb3Jyb3ctYXQnOiAnaSBtb3Jnb24nLFxuICAgICAgdHJhbTogJ1Nww6VydmFnbicsXG4gICAgICB0cmFjazogJ1Nww6VyJyxcbiAgICAgICd1c2Utb3duLXBvc2l0aW9uJzogJ0FudsOkbmQgbWluIHBvc2l0aW9uJyxcbiAgICAgICdzZWxlY3QtZnJvbS1tYXAnOiAnVsOkbGogcG9zaXRpb24gZnLDpW4ga2FydGFuJyxcbiAgICAgICdzZWxlY3QtZnJvbS1vd24tbG9jYXRpb25zJzogJ1bDpGxqIGZyw6VuIGVnbmEgcGxhdHNlcicsXG4gICAgICB2ZW51ZTogJ03DtnRlc3BsYXRzJyxcbiAgICAgICd2aWEtcG9pbnQnOiAnVmlhIHB1bmt0JyxcbiAgICAgIHdoZXJlOiAnVmFydCB2aWxsIGR1IMOla2E/JyxcbiAgICAgIHBsYWNlOiAnUGxhdHMnLFxuICAgIH0sXG4gIH0sXG59O1xuXG5leHBvcnQgZGVmYXVsdCB0cmFuc2xhdGlvbnM7XG4iLCJmdW5jdGlvbiBzdHlsZUluamVjdChjc3MsIHJlZikge1xuICBpZiAoIHJlZiA9PT0gdm9pZCAwICkgcmVmID0ge307XG4gIHZhciBpbnNlcnRBdCA9IHJlZi5pbnNlcnRBdDtcblxuICBpZiAoIWNzcyB8fCB0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7IHJldHVybjsgfVxuXG4gIHZhciBoZWFkID0gZG9jdW1lbnQuaGVhZCB8fCBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdO1xuICB2YXIgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICBzdHlsZS50eXBlID0gJ3RleHQvY3NzJztcblxuICBpZiAoaW5zZXJ0QXQgPT09ICd0b3AnKSB7XG4gICAgaWYgKGhlYWQuZmlyc3RDaGlsZCkge1xuICAgICAgaGVhZC5pbnNlcnRCZWZvcmUoc3R5bGUsIGhlYWQuZmlyc3RDaGlsZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBoZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgfVxuXG4gIGlmIChzdHlsZS5zdHlsZVNoZWV0KSB7XG4gICAgc3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuICB9IGVsc2Uge1xuICAgIHN0eWxlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0eWxlSW5qZWN0O1xuIiwiaW1wb3J0IHVuaXFXaXRoIGZyb20gJ2xvZGFzaC91bmlxV2l0aCc7XG5pbXBvcnQgaXNFcXVhbCBmcm9tICdsb2Rhc2gvaXNFcXVhbCc7XG5pbXBvcnQgbWVtb2l6ZSBmcm9tICdsb2Rhc2gvbWVtb2l6ZSc7XG5pbXBvcnQgZXNjYXBlUmVnRXhwIGZyb20gJ2xvZGFzaC9lc2NhcGVSZWdFeHAnO1xuaW1wb3J0IGNsb25lRGVlcCBmcm9tICdsb2Rhc2gvY2xvbmVEZWVwJztcblxuLyoqXG4gKiBMb2NhdGlvbiBwcm9wZXJ0aWVzLlxuICogQHR5cGVkZWYge0xvY2F0aW9uUHJvcGVydGllc31cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYXllciBTdWdnZXN0aW9uIGxheWVyLlxuICogQHByb3BlcnR5IHtsYXR9IFtudW1iZXJdXG4gKiBAcHJvcGVydHkge2xvbn0gW251bWJlcl1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhZGRyZXNzIEFkZHJlc3MuXG4gKi9cblxuLyoqXG4gKiBSZXR1cm5zIGxvY2FsYWRtaW4gKGNpdHkgbmFtZSkgZm9yIHN1Z2dlc3Rpb25zXG4gKlxuICogQG5hbWUgZ2V0TG9jYWxhZG1pblxuICogQHBhcmFtIHtPYmplY3R9IHN1Z2dlc3Rpb24gc3VnZ2VzdGlvbidzIHByb3BlcnRpZXMgZnJvbSBnZW9jb2Rpbmcgb3IgYSBmYXZvdXJpdGUgc3RvcC9zdGF0aW9uLlxuICogRXhwZWN0cyBsYXN0IHBhcnQgb2YgYW4gYWRkcmVzcyAoYWZ0ZXIgJywnKSB0byBjb250YWluIHRoZSBjaXR5IG5hbWUgb2YgdGhlIHN1Z2dlc3Rpb24gbG9jYXRpb24uXG4gKiBAcmV0dXJucyB7U3RyaW5nfSAgQ2l0eSBuYW1lIG9yIGVtcHR5IHN0cmluZ1xuICovXG5jb25zdCBnZXRMb2NhbGFkbWluID0gc3VnZ2VzdGlvbiA9PlxuICBzdWdnZXN0aW9uLmxvY2FsYWRtaW4gfHxcbiAgc3VnZ2VzdGlvbi5sb2NhbGFkbWluIHx8XG4gIChzdWdnZXN0aW9uLmFkZHJlc3MgJiZcbiAgICBzdWdnZXN0aW9uLmFkZHJlc3MubGFzdEluZGV4T2YoJywnKSA8IHN1Z2dlc3Rpb24uYWRkcmVzcy5sZW5ndGggLSAyICYmXG4gICAgc3VnZ2VzdGlvbi5hZGRyZXNzLnN1YnN0cmluZyhzdWdnZXN0aW9uLmFkZHJlc3MubGFzdEluZGV4T2YoJywnKSArIDIpKSB8fFxuICAnJztcblxuZXhwb3J0IGNvbnN0IGdldFN0b3BDb2RlID0gKHsgaWQsIGNvZGUgfSkgPT4ge1xuICBpZiAoY29kZSkge1xuICAgIHJldHVybiBjb2RlO1xuICB9XG4gIGlmIChcbiAgICBpZCA9PT0gdW5kZWZpbmVkIHx8XG4gICAgdHlwZW9mIGlkLmluZGV4T2YgPT09ICd1bmRlZmluZWQnIHx8XG4gICAgaWQuaW5kZXhPZignIycpID09PSAtMVxuICApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIC8vIGlkIGZyb20gcGVsaWFzXG4gIHJldHVybiBpZC5zdWJzdHJpbmcoaWQuaW5kZXhPZignIycpICsgMSk7XG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0RmF2b3VyaXRlUGxhY2VMYWJlbCA9IChuYW1lLCBhZGRyZXNzKSA9PiBbXG4gIG5hbWUgfHwgKGFkZHJlc3MgJiYgYWRkcmVzcy5zcGxpdCgnLCcpWzBdKSxcbiAgdHlwZW9mIGFkZHJlc3MgPT09ICdzdHJpbmcnXG4gICAgPyBhZGRyZXNzLnJlcGxhY2UobmV3IFJlZ0V4cChgJHtlc2NhcGVSZWdFeHAobmFtZSl9KFsgLF18JCkrYCksICcnKVxuICAgIDogJycsXG5dO1xuXG4vKipcbiAqIEZvcm1hdCBzdWdnZXN0aW9uLXBhaXIgW25hbWUsIGFkZHJlc3NdIGJ5IGBzdWdnZXN0aW9uLmxheWVyYC5cbiAqXG4gKiBAbmFtZSBnZXROYW1lTGFiZWxcbiAqIEBwYXJhbSB7TG9jYXRpb25Qcm9wZXJ0aWVzfSBzdWdnZXN0aW9uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwbGFpbl1cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXkuPHN0cmluZz59IEZvcm1hdHRlZCBsYWJlbC5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldE5hbWVMYWJlbCA9IG1lbW9pemUoXG4gIChzdWdnZXN0aW9uLCBwbGFpbiA9IGZhbHNlKSA9PiB7XG4gICAgc3dpdGNoIChzdWdnZXN0aW9uLmxheWVyKSB7XG4gICAgICBjYXNlICdjdXJyZW50UG9zaXRpb24nOlxuICAgICAgICByZXR1cm4gW3N1Z2dlc3Rpb24ubGFiZWxJZCwgc3VnZ2VzdGlvbi5hZGRyZXNzXTtcbiAgICAgIGNhc2UgJ3NlbGVjdEZyb21NYXAnOlxuICAgICAgY2FzZSAnb3duTG9jYXRpb25zJzpcbiAgICAgIGNhc2UgJ2JhY2snOlxuICAgICAgICByZXR1cm4gW3N1Z2dlc3Rpb24ubGFiZWxJZF07XG4gICAgICBjYXNlICdmYXZvdXJpdGVQbGFjZSc6XG4gICAgICAgIHJldHVybiBmb3JtYXRGYXZvdXJpdGVQbGFjZUxhYmVsKHN1Z2dlc3Rpb24ubmFtZSwgc3VnZ2VzdGlvbi5hZGRyZXNzKTtcbiAgICAgIGNhc2UgJ2Zhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uJzpcbiAgICAgIGNhc2UgJ2Jpa2VzdGF0aW9uJzpcbiAgICAgICAgcmV0dXJuIFtzdWdnZXN0aW9uLm5hbWVdO1xuICAgICAgY2FzZSAnZmF2b3VyaXRlUm91dGUnOlxuICAgICAgY2FzZSAncm91dGUtQlVTJzpcbiAgICAgIGNhc2UgJ3JvdXRlLVRSQU0nOlxuICAgICAgY2FzZSAncm91dGUtUkFJTCc6XG4gICAgICBjYXNlICdyb3V0ZS1TVUJXQVknOlxuICAgICAgY2FzZSAncm91dGUtRkVSUlknOlxuICAgICAgY2FzZSAncm91dGUtRlVOSUNVTEFSJzpcbiAgICAgIGNhc2UgJ3JvdXRlLUFJUlBMQU5FJzpcbiAgICAgICAgcmV0dXJuICFwbGFpbiAmJiBzdWdnZXN0aW9uLnNob3J0TmFtZVxuICAgICAgICAgID8gW1xuICAgICAgICAgICAgICBzdWdnZXN0aW9uLmd0ZnNJZCxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5tb2RlLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubG9uZ05hbWUsXG4gICAgICAgICAgICBdXG4gICAgICAgICAgOiBbXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24uc2hvcnROYW1lLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLmxvbmdOYW1lLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLmFnZW5jeSA/IHN1Z2dlc3Rpb24uYWdlbmN5Lm5hbWUgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBdO1xuICAgICAgY2FzZSAndmVudWUnOlxuICAgICAgY2FzZSAnYWRkcmVzcyc6XG4gICAgICBjYXNlICdzdHJlZXQnOlxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIHN1Z2dlc3Rpb24ubmFtZSxcbiAgICAgICAgICBzdWdnZXN0aW9uLmxhYmVsLnJlcGxhY2UoXG4gICAgICAgICAgICBuZXcgUmVnRXhwKGAke2VzY2FwZVJlZ0V4cChzdWdnZXN0aW9uLm5hbWUpfSgsKT8oICk/YCksXG4gICAgICAgICAgICAnJyxcbiAgICAgICAgICApLFxuICAgICAgICBdO1xuICAgICAgY2FzZSAnZmF2b3VyaXRlU3RvcCc6XG4gICAgICBjYXNlICdzdG9wJzpcbiAgICAgICAgcmV0dXJuIHBsYWluXG4gICAgICAgICAgPyBbXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubmFtZSB8fFxuICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubGFiZWwgfHxcbiAgICAgICAgICAgICAgICAoc3VnZ2VzdGlvbi5hZGRyZXNzICYmIHN1Z2dlc3Rpb24uYWRkcmVzcy5zcGxpdCgnLCcpWzBdKSxcbiAgICAgICAgICAgICAgZ2V0TG9jYWxhZG1pbihzdWdnZXN0aW9uKSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5uYW1lLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLmlkLFxuICAgICAgICAgICAgICBnZXRTdG9wQ29kZShzdWdnZXN0aW9uKSxcbiAgICAgICAgICAgICAgZ2V0TG9jYWxhZG1pbihzdWdnZXN0aW9uKSxcbiAgICAgICAgICAgIF07XG4gICAgICBjYXNlICdmYXZvdXJpdGVTdGF0aW9uJzpcbiAgICAgIGNhc2UgJ3N0YXRpb24nOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBzdWdnZXN0aW9uLm5hbWUgfHxcbiAgICAgICAgICAgIHN1Z2dlc3Rpb24ubGFiZWwgfHxcbiAgICAgICAgICAgIChzdWdnZXN0aW9uLmFkZHJlc3MgJiYgc3VnZ2VzdGlvbi5hZGRyZXNzLnNwbGl0KCcsJylbMF0pLFxuICAgICAgICAgIGdldExvY2FsYWRtaW4oc3VnZ2VzdGlvbiksXG4gICAgICAgIF07XG4gICAgfVxuICB9LFxuICAoaXRlbSwgcGxhaW4pID0+IHtcbiAgICBjb25zdCBpID0gY2xvbmVEZWVwKGl0ZW0pO1xuICAgIGkucGxhaW4gPSBwbGFpbjtcbiAgICByZXR1cm4gaTtcbiAgfSxcbik7XG5cbi8qKlxuICogQ2hlY2tzIHRoYXQgZmVhdHVyZXMgYXJlIHVuaXF1ZSBieSBsYWJlbFxuICpcbiAqIEBuYW1lIHVuaXFCeUxhYmVsXG4gKiBAcGFyYW0ge0FycmF5fSBmZWF0dXJlcyBBcnJheSBvZiBmZWF0dXJlc1xuICogQHJldHVybnMge0FycmF5fSAgQXJyYXkgb2YgdW5pcXVlIGZlYXR1cmVzXG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwudW5pcUJ5TGFiZWwoZmVhdHVyZXMpO1xuICogLy89IEFycmF5KDIpXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVuaXFCeUxhYmVsKGZlYXR1cmVzKSB7XG4gIHJldHVybiB1bmlxV2l0aChmZWF0dXJlcywgKGZlYXQxLCBmZWF0MikgPT4ge1xuICAgIGlmIChmZWF0MS50eXBlID09PSAnRnV0dXJlUm91dGUnIHx8IGZlYXQyLnR5cGUgPT09ICdGdXR1cmVSb3V0ZScpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIGlzRXF1YWwoZ2V0TmFtZUxhYmVsKGZlYXQxLnByb3BlcnRpZXMpLCBnZXROYW1lTGFiZWwoZmVhdDIucHJvcGVydGllcykpICYmXG4gICAgICBmZWF0MS5wcm9wZXJ0aWVzLmxheWVyID09PSBmZWF0Mi5wcm9wZXJ0aWVzLmxheWVyXG4gICAgKTtcbiAgfSk7XG59XG4iLCJpbXBvcnQge1xuICBnZXROYW1lTGFiZWwsXG4gIGdldFN0b3BDb2RlLFxufSBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtdW5pcS1ieS1sYWJlbCc7XG5pbXBvcnQgeyBnZXRTdG9wTmFtZSB9IGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1oZWxwZXJzJztcbmltcG9ydCBnZXRMYWJlbCBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWxhYmVsJztcbmltcG9ydCB7IERhdGVUaW1lIH0gZnJvbSAnbHV4b24nO1xuXG5leHBvcnQgY29uc3QgaXNLZXlib2FyZFNlbGVjdGlvbkV2ZW50ID0gZXZlbnQgPT4ge1xuICBjb25zdCBzcGFjZSA9IFsxMywgJyAnLCAnU3BhY2ViYXInXTtcbiAgY29uc3QgZW50ZXIgPSBbMzIsICdFbnRlciddO1xuICBjb25zdCBrZXkgPSAoZXZlbnQgJiYgKGV2ZW50LmtleSB8fCBldmVudC53aGljaCB8fCBldmVudC5rZXlDb2RlKSkgfHwgJyc7XG5cbiAgaWYgKCFrZXkgfHwgIXNwYWNlLmNvbmNhdChlbnRlcikuaW5jbHVkZXMoa2V5KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1BPSVNlYXJjaCA9IGlkID0+XG4gIGlkID09PSAnb3JpZ2luJyB8fFxuICBpZCA9PT0gJ2Rlc3RpbmF0aW9uJyB8fFxuICBpZCA9PT0gJ3ZpYS1wb2ludCcgfHxcbiAgaWQgPT09ICdvcmlnaW4tc3RvcC1uZWFyLXlvdSc7XG5cbmV4cG9ydCBjb25zdCBnZXRQbGF0Zm9ybSA9IChhZGRlbmR1bSwgbG5nLCB0KSA9PiB7XG4gIC8vIGNoZWNrIGlmIGk4MW4gaXMgaW5pdGlhbGl6ZWRcbiAgaWYgKCF0KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoIWFkZGVuZHVtIHx8ICFhZGRlbmR1bS5HVEZTLnBsYXRmb3JtKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCB7IG1vZGVzLCBwbGF0Zm9ybSB9ID0gYWRkZW5kdW0uR1RGUztcbiAgY29uc3QgdHlwZSA9XG4gICAgbW9kZXMgJiYgbW9kZXNbMF0gPT09ICdSQUlMJyA/IHQoJ3RyYWNrJywgeyBsbmcgfSkgOiB0KCdwbGF0Zm9ybScsIHsgbG5nIH0pO1xuICByZXR1cm4gW3R5cGUsIHBsYXRmb3JtXTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdWdnZXN0aW9uQ29udGVudChpdGVtLCBsbmcsIHQpIHtcbiAgLy8gY2hlY2sgaWYgaTgxbiBpcyBpbml0aWFsaXplZFxuICBpZiAoIXQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmIChpdGVtLnR5cGUgIT09ICdGdXR1cmVSb3V0ZScpIHtcbiAgICBpZiAoaXRlbS50eXBlID09PSAnU2VsZWN0RnJvbU1hcCcpIHtcbiAgICAgIHJldHVybiBbJycsIHQoJ3NlbGVjdC1mcm9tLW1hcCcsIHsgbG5nIH0pXTtcbiAgICB9XG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gJ0N1cnJlbnRMb2NhdGlvbicpIHtcbiAgICAgIHJldHVybiBbJycsIHQoJ3VzZS1vd24tcG9zaXRpb24nLCB7IGxuZyB9KV07XG4gICAgfVxuICAgIGlmIChpdGVtLnR5cGUgPT09ICdTZWxlY3RGcm9tT3duTG9jYXRpb25zJykge1xuICAgICAgcmV0dXJuIFsnJywgdCgnc2VsZWN0LWZyb20tb3duLWxvY2F0aW9ucycsIHsgbG5nIH0pXTtcbiAgICB9XG4gICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdCAqL1xuICAgIGxldCBbbmFtZSwgbGFiZWxdID0gZ2V0TmFtZUxhYmVsKGl0ZW0ucHJvcGVydGllcywgdHJ1ZSk7XG4gICAgbGV0IHN1Z2dlc3Rpb25UeXBlO1xuICAgIGlmIChcbiAgICAgIGl0ZW0ucHJvcGVydGllcy5sYXllci50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdiaWtlcmVudGFsJykgfHxcbiAgICAgIGl0ZW0ucHJvcGVydGllcy5sYXllci50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdiaWtlc3RhdGlvbicpXG4gICAgKSB7XG4gICAgICBzdWdnZXN0aW9uVHlwZSA9IHQoJ3ZlaGljbGVyZW50YWxzdGF0aW9uJywgeyBsbmcgfSk7XG4gICAgICBjb25zdCBzdG9wQ29kZSA9IGl0ZW0ucHJvcGVydGllcy5sYWJlbElkO1xuICAgICAgcmV0dXJuIFtzdWdnZXN0aW9uVHlwZSwgbmFtZSwgdW5kZWZpbmVkLCBzdG9wQ29kZV07XG4gICAgfVxuXG4gICAgaWYgKGl0ZW0ucHJvcGVydGllcy5sYXllciA9PT0gJ2Jpa2VwYXJrJykge1xuICAgICAgc3VnZ2VzdGlvblR5cGUgPSB0KCdiaWtlcGFyaycsIHsgbG5nIH0pO1xuICAgICAgcmV0dXJuIFtzdWdnZXN0aW9uVHlwZSwgbmFtZSwgdW5kZWZpbmVkLCB1bmRlZmluZWRdO1xuICAgIH1cblxuICAgIGlmIChpdGVtLnByb3BlcnRpZXMubGF5ZXIgPT09ICdjYXJwYXJrJykge1xuICAgICAgc3VnZ2VzdGlvblR5cGUgPSB0KCdjYXJwYXJrJywgeyBsbmcgfSk7XG4gICAgICByZXR1cm4gW3N1Z2dlc3Rpb25UeXBlLCBuYW1lLCB1bmRlZmluZWQsIHVuZGVmaW5lZF07XG4gICAgfVxuXG4gICAgaWYgKGl0ZW0ucHJvcGVydGllcy5tb2RlKSB7XG4gICAgICBzdWdnZXN0aW9uVHlwZSA9IHQoXG4gICAgICAgIGl0ZW0ucHJvcGVydGllcy5tb2RlLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgnZmF2b3VyaXRlJywgJycpLFxuICAgICAgICB7IGxuZyB9LFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbGF5ZXIgPSBpdGVtLnByb3BlcnRpZXMubGF5ZXJcbiAgICAgICAgLnJlcGxhY2UoJ3JvdXRlLScsICcnKVxuICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAucmVwbGFjZSgnZmF2b3VyaXRlJywgJycpO1xuICAgICAgc3VnZ2VzdGlvblR5cGUgPSB0KGxheWVyLCB7IGxuZyB9KTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBpdGVtLnByb3BlcnRpZXMuaWQgJiZcbiAgICAgIChpdGVtLnByb3BlcnRpZXMubGF5ZXIgPT09ICdzdG9wJyB8fCBpdGVtLnByb3BlcnRpZXMubGF5ZXIgPT09ICdzdGF0aW9uJylcbiAgICApIHtcbiAgICAgIGNvbnN0IHN0b3BDb2RlID0gZ2V0U3RvcENvZGUoaXRlbS5wcm9wZXJ0aWVzKTtcbiAgICAgIGNvbnN0IG1vZGUgPSBpdGVtLnByb3BlcnRpZXMuYWRkZW5kdW0/LkdURlMubW9kZXM7XG4gICAgICBjb25zdCBwbGF0Zm9ybSA9IGdldFBsYXRmb3JtKGl0ZW0ucHJvcGVydGllcy5hZGRlbmR1bSwgbG5nLCB0KTtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHN1Z2dlc3Rpb25UeXBlLFxuICAgICAgICBnZXRTdG9wTmFtZShuYW1lLCBzdG9wQ29kZSksXG4gICAgICAgIGxhYmVsLFxuICAgICAgICBzdG9wQ29kZSxcbiAgICAgICAgbW9kZSxcbiAgICAgICAgcGxhdGZvcm0sXG4gICAgICBdO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBpdGVtLnByb3BlcnRpZXMubGF5ZXIgPT09ICdmYXZvdXJpdGVTdG9wJyB8fFxuICAgICAgaXRlbS5wcm9wZXJ0aWVzLmxheWVyID09PSAnZmF2b3VyaXRlU3RhdGlvbidcbiAgICApIHtcbiAgICAgIGNvbnN0IHsgYWRkcmVzcywgY29kZSB9ID0gaXRlbS5wcm9wZXJ0aWVzO1xuICAgICAgY29uc3Qgc3RvTmFtZSA9IGFkZHJlc3MgPyBnZXRTdG9wTmFtZShhZGRyZXNzLnNwbGl0KCcsJylbMF0sIGNvZGUpIDogbmFtZTtcbiAgICAgIGNvbnN0IHBsYXRmb3JtID0gZ2V0UGxhdGZvcm0oaXRlbS5wcm9wZXJ0aWVzLmFkZGVuZHVtLCBsbmcpO1xuICAgICAgcmV0dXJuIFtzdWdnZXN0aW9uVHlwZSwgc3RvTmFtZSwgbGFiZWwsIGNvZGUsIHVuZGVmaW5lZCwgcGxhdGZvcm1dO1xuICAgIH1cbiAgICByZXR1cm4gW3N1Z2dlc3Rpb25UeXBlLCBuYW1lLCBsYWJlbF07XG4gIH1cbiAgY29uc3QgeyBvcmlnaW4sIGRlc3RpbmF0aW9uIH0gPSBpdGVtLnByb3BlcnRpZXM7XG4gIGNvbnN0IHRhaWwxID0gb3JpZ2luLmxvY2FsaXR5ID8gYCwgJHtvcmlnaW4ubG9jYWxpdHl9IGZvb2JhcmAgOiAnJztcbiAgY29uc3QgdGFpbDIgPSBkZXN0aW5hdGlvbi5sb2NhbGl0eSA/IGAsICR7ZGVzdGluYXRpb24ubG9jYWxpdHl9YCA6ICcnO1xuICBjb25zdCBuYW1lMSA9IG9yaWdpbi5uYW1lO1xuICBjb25zdCBuYW1lMiA9IGRlc3RpbmF0aW9uLm5hbWU7XG4gIHJldHVybiBbXG4gICAgdCgnZnV0dXJlLXJvdXRlJywgeyBsbmcgfSksXG4gICAgYCR7dCgnb3JpZ2luJywgeyBsbmcgfSl9ICR7bmFtZTF9JHt0YWlsMX0gJHt0KCdkZXN0aW5hdGlvbicsIHtcbiAgICAgIGxuZyxcbiAgICB9KX0gJHtuYW1lMn0ke3RhaWwyfWAsXG4gICAgaXRlbS50cmFuc2xhdGVkVGV4dCxcbiAgXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zbGF0ZUZ1dHVyZVJvdXRlU3VnZ2VzdGlvblRpbWUoaXRlbSwgbG5nLCB0KSB7XG4gIC8vIGNoZWNrIGlmIGk4MW4gaXMgaW5pdGlhbGl6ZWRcbiAgaWYgKCF0KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCB0aW1lID0gRGF0ZVRpbWUuZnJvbVNlY29uZHMoTnVtYmVyKGl0ZW0ucHJvcGVydGllcy50aW1lKSk7XG4gIGNvbnN0IG5vdyA9IERhdGVUaW1lLm5vdygpO1xuICBsZXQgc3RyID0gaXRlbS5wcm9wZXJ0aWVzLmFycml2ZUJ5XG4gICAgPyB0KCdhcnJpdmFsJywgeyBsbmcgfSlcbiAgICA6IHQoJ2RlcGFydHVyZScsIHsgbG5nIH0pO1xuICBpZiAodGltZS5oYXNTYW1lKG5vdywgJ2RheScpKSB7XG4gICAgc3RyID0gYCR7c3RyfSAke3QoJ3RvZGF5LWF0Jyl9YDtcbiAgfSBlbHNlIGlmICh0aW1lLmhhc1NhbWUobm93LnBsdXMoeyBkYXlzOiAxIH0pLCAnZGF5JykpIHtcbiAgICBzdHIgPSBgJHtzdHJ9ICR7dCgndG9tb3Jyb3ctYXQnLCB7IGxuZyB9KX1gO1xuICB9IGVsc2Uge1xuICAgIHN0ciA9IGAke3N0cn0gJHt0aW1lLnRvRm9ybWF0KCdjY2MgZC5MLicpfWA7XG4gIH1cbiAgc3RyID0gYCR7c3RyfSAke3RpbWUudG9Gb3JtYXQoJ0hIOm1tJyl9YDtcbiAgcmV0dXJuIHN0cjtcbn1cblxuZXhwb3J0IGNvbnN0IGdldFN1Z2dlc3Rpb25WYWx1ZSA9IHN1Z2dlc3Rpb24gPT4ge1xuICBpZiAoXG4gICAgc3VnZ2VzdGlvbi50eXBlID09PSAnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycgfHxcbiAgICBzdWdnZXN0aW9uLnR5cGUgPT09ICdiYWNrJ1xuICApIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgcmV0dXJuIGdldExhYmVsKHN1Z2dlc3Rpb24ucHJvcGVydGllcyk7XG59O1xuXG5leHBvcnQgY29uc3Qgc3VnZ2VzdGlvbkFzQXJpYUNvbnRlbnQgPSAoeyBzdWdnZXN0aW9ucywgdCwgbG5nIH0pID0+IHtcbiAgbGV0IGxhYmVsID0gW107XG4gIGNvbnN0IGZpcnN0U3VnZ2VzdGlvbiA9IHN1Z2dlc3Rpb25zWzBdO1xuICBpZiAoZmlyc3RTdWdnZXN0aW9uKSB7XG4gICAgaWYgKGZpcnN0U3VnZ2VzdGlvbi50eXBlICYmIGZpcnN0U3VnZ2VzdGlvbi50eXBlLmluY2x1ZGVzKCdGYXZvdXJpdGUnKSkge1xuICAgICAgbGFiZWwucHVzaCh0KCdmYXZvdXJpdGUnLCB7IGxuZyB9KSk7XG4gICAgfVxuICAgIGxhYmVsID0gbGFiZWwuY29uY2F0KGdldFN1Z2dlc3Rpb25Db250ZW50KHN1Z2dlc3Rpb25zWzBdLCBsbmcpKTtcbiAgfVxuICByZXR1cm4gWy4uLm5ldyBTZXQobGFiZWwpXS5qb2luKCcgLSAnKTtcbn07XG4iLCJpbXBvcnQgeyBnZXROYW1lTGFiZWwgfSBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtdW5pcS1ieS1sYWJlbCc7XG4vKipcbiAqIFJldHVybnMgbGFiZWwgZm9yIHByb3BlcnRpZXNcbiAqXG4gKiBAbmFtZSBnZXRMYWJlbFxuICogQHBhcmFtIHsqfSBwcm9wZXJ0aWVzIG9iamVjdFxuICogQHJldHVybnMge0Jvb2xlYW59IHRydWUvZmFsc2VcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0TGFiZWwocHJvcGVydGllcykge1xuICBjb25zdCBwYXJ0cyA9IGdldE5hbWVMYWJlbChwcm9wZXJ0aWVzLCB0cnVlKTtcbiAgc3dpdGNoIChwcm9wZXJ0aWVzLmxheWVyKSB7XG4gICAgY2FzZSAnc2VsZWN0RnJvbU1hcCc6XG4gICAgY2FzZSAnY3VycmVudFBvc2l0aW9uJzpcbiAgICBjYXNlICdvd25Mb2NhdGlvbnMnOlxuICAgIGNhc2UgJ2JhY2snOlxuICAgICAgcmV0dXJuIHBhcnRzWzFdIHx8IHBhcnRzWzBdO1xuICAgIGNhc2UgJ2Zhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uJzpcbiAgICBjYXNlICdmYXZvdXJpdGVQbGFjZSc6XG4gICAgICByZXR1cm4gcGFydHNbMF07XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBwYXJ0cy5sZW5ndGggPiAxICYmIHBhcnRzWzFdICE9PSAnJ1xuICAgICAgICA/IHBhcnRzLmpvaW4oJywgJylcbiAgICAgICAgOiBwYXJ0c1sxXSB8fCBwYXJ0c1swXTtcbiAgfVxufVxuIiwiLyohIEZvciBsaWNlbnNlIGluZm9ybWF0aW9uIHBsZWFzZSBzZWUgaW5kZXguanMuTElDRU5TRS50eHQgKi9cbiFmdW5jdGlvbihlLHQpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcIm9iamVjdFwiPT10eXBlb2YgbW9kdWxlKW1vZHVsZS5leHBvcnRzPXQocmVxdWlyZShcInJlYWN0XCIpKTtlbHNlIGlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZClkZWZpbmUoW1wicmVhY3RcIl0sdCk7ZWxzZXt2YXIgbj1cIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cz90KHJlcXVpcmUoXCJyZWFjdFwiKSk6dChlLnJlYWN0KTtmb3IodmFyIG8gaW4gbikoXCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHM/ZXhwb3J0czplKVtvXT1uW29dfX0oXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjp0aGlzLChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD17ODg4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgbyxyO3I9dm9pZCAwIT09bi5nP24uZzpcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp0aGlzLG89ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oZSl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHQ9e2lnbm9yZTpcIltkYXRhLXNjcm9sbC1pZ25vcmVdXCIsaGVhZGVyOm51bGwsdG9wT25FbXB0eUhhc2g6ITAsc3BlZWQ6NTAwLHNwZWVkQXNEdXJhdGlvbjohMSxkdXJhdGlvbk1heDpudWxsLGR1cmF0aW9uTWluOm51bGwsY2xpcDohMCxvZmZzZXQ6MCxlYXNpbmc6XCJlYXNlSW5PdXRDdWJpY1wiLGN1c3RvbUVhc2luZzpudWxsLHVwZGF0ZVVSTDohMCxwb3BzdGF0ZTohMCxlbWl0RXZlbnRzOiEwfSxuPWZ1bmN0aW9uKCl7dmFyIGU9e307cmV0dXJuIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoYXJndW1lbnRzLChmdW5jdGlvbih0KXtmb3IodmFyIG4gaW4gdCl7aWYoIXQuaGFzT3duUHJvcGVydHkobikpcmV0dXJuO2Vbbl09dFtuXX19KSksZX0sbz1mdW5jdGlvbihlKXtcIiNcIj09PWUuY2hhckF0KDApJiYoZT1lLnN1YnN0cigxKSk7Zm9yKHZhciB0LG49U3RyaW5nKGUpLG89bi5sZW5ndGgscj0tMSx1PVwiXCIsaT1uLmNoYXJDb2RlQXQoMCk7KytyPG87KXtpZigwPT09KHQ9bi5jaGFyQ29kZUF0KHIpKSl0aHJvdyBuZXcgSW52YWxpZENoYXJhY3RlckVycm9yKFwiSW52YWxpZCBjaGFyYWN0ZXI6IHRoZSBpbnB1dCBjb250YWlucyBVKzAwMDAuXCIpO3UrPXQ+PTEmJnQ8PTMxfHwxMjc9PXR8fDA9PT1yJiZ0Pj00OCYmdDw9NTd8fDE9PT1yJiZ0Pj00OCYmdDw9NTcmJjQ1PT09aT9cIlxcXFxcIit0LnRvU3RyaW5nKDE2KStcIiBcIjp0Pj0xMjh8fDQ1PT09dHx8OTU9PT10fHx0Pj00OCYmdDw9NTd8fHQ+PTY1JiZ0PD05MHx8dD49OTcmJnQ8PTEyMj9uLmNoYXJBdChyKTpcIlxcXFxcIituLmNoYXJBdChyKX1yZXR1cm5cIiNcIit1fSxyPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgubWF4KGRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0LGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxIZWlnaHQsZG9jdW1lbnQuYm9keS5vZmZzZXRIZWlnaHQsZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm9mZnNldEhlaWdodCxkb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodCxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KX0sdT1mdW5jdGlvbih0KXtyZXR1cm4gdD8obj10LHBhcnNlSW50KGUuZ2V0Q29tcHV0ZWRTdHlsZShuKS5oZWlnaHQsMTApK3Qub2Zmc2V0VG9wKTowO3ZhciBufSxpPWZ1bmN0aW9uKHQsbixvKXswPT09dCYmZG9jdW1lbnQuYm9keS5mb2N1cygpLG98fCh0LmZvY3VzKCksZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PXQmJih0LnNldEF0dHJpYnV0ZShcInRhYmluZGV4XCIsXCItMVwiKSx0LmZvY3VzKCksdC5zdHlsZS5vdXRsaW5lPVwibm9uZVwiKSxlLnNjcm9sbFRvKDAsbikpfSxzPWZ1bmN0aW9uKHQsbixvLHIpe2lmKG4uZW1pdEV2ZW50cyYmXCJmdW5jdGlvblwiPT10eXBlb2YgZS5DdXN0b21FdmVudCl7dmFyIHU9bmV3IEN1c3RvbUV2ZW50KHQse2J1YmJsZXM6ITAsZGV0YWlsOnthbmNob3I6byx0b2dnbGU6cn19KTtkb2N1bWVudC5kaXNwYXRjaEV2ZW50KHUpfX07cmV0dXJuIGZ1bmN0aW9uKGMsYSl7dmFyIGwsZixkLHYscD17Y2FuY2VsU2Nyb2xsOmZ1bmN0aW9uKGUpe2NhbmNlbEFuaW1hdGlvbkZyYW1lKHYpLHY9bnVsbCxlfHxzKFwic2Nyb2xsQ2FuY2VsXCIsbCl9LGFuaW1hdGVTY3JvbGw6ZnVuY3Rpb24obyxjLGEpe3AuY2FuY2VsU2Nyb2xsKCk7dmFyIGY9bihsfHx0LGF8fHt9KSxoPVwiW29iamVjdCBOdW1iZXJdXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobyksbT1ofHwhby50YWdOYW1lP251bGw6bztpZihofHxtKXt2YXIgeT1lLnBhZ2VZT2Zmc2V0O2YuaGVhZGVyJiYhZCYmKGQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihmLmhlYWRlcikpO3ZhciBiLGcsdyxFPXUoZCksTz1oP286ZnVuY3Rpb24odCxuLG8sdSl7dmFyIGk9MDtpZih0Lm9mZnNldFBhcmVudClkb3tpKz10Lm9mZnNldFRvcCx0PXQub2Zmc2V0UGFyZW50fXdoaWxlKHQpO3JldHVybiBpPU1hdGgubWF4KGktbi1vLDApLHUmJihpPU1hdGgubWluKGkscigpLWUuaW5uZXJIZWlnaHQpKSxpfShtLEUscGFyc2VJbnQoXCJmdW5jdGlvblwiPT10eXBlb2YgZi5vZmZzZXQ/Zi5vZmZzZXQobyxjKTpmLm9mZnNldCwxMCksZi5jbGlwKSxTPU8teSxfPXIoKSxJPTAsTT1mdW5jdGlvbihlLHQpe3ZhciBuPXQuc3BlZWRBc0R1cmF0aW9uP3Quc3BlZWQ6TWF0aC5hYnMoZS8xZTMqdC5zcGVlZCk7cmV0dXJuIHQuZHVyYXRpb25NYXgmJm4+dC5kdXJhdGlvbk1heD90LmR1cmF0aW9uTWF4OnQuZHVyYXRpb25NaW4mJm48dC5kdXJhdGlvbk1pbj90LmR1cmF0aW9uTWluOnBhcnNlSW50KG4sMTApfShTLGYpLEw9ZnVuY3Rpb24odCl7Ynx8KGI9dCksSSs9dC1iLHc9eStTKmZ1bmN0aW9uKGUsdCl7dmFyIG47cmV0dXJuXCJlYXNlSW5RdWFkXCI9PT1lLmVhc2luZyYmKG49dCp0KSxcImVhc2VPdXRRdWFkXCI9PT1lLmVhc2luZyYmKG49dCooMi10KSksXCJlYXNlSW5PdXRRdWFkXCI9PT1lLmVhc2luZyYmKG49dDwuNT8yKnQqdDooNC0yKnQpKnQtMSksXCJlYXNlSW5DdWJpY1wiPT09ZS5lYXNpbmcmJihuPXQqdCp0KSxcImVhc2VPdXRDdWJpY1wiPT09ZS5lYXNpbmcmJihuPS0tdCp0KnQrMSksXCJlYXNlSW5PdXRDdWJpY1wiPT09ZS5lYXNpbmcmJihuPXQ8LjU/NCp0KnQqdDoodC0xKSooMip0LTIpKigyKnQtMikrMSksXCJlYXNlSW5RdWFydFwiPT09ZS5lYXNpbmcmJihuPXQqdCp0KnQpLFwiZWFzZU91dFF1YXJ0XCI9PT1lLmVhc2luZyYmKG49MS0gLS10KnQqdCp0KSxcImVhc2VJbk91dFF1YXJ0XCI9PT1lLmVhc2luZyYmKG49dDwuNT84KnQqdCp0KnQ6MS04Ki0tdCp0KnQqdCksXCJlYXNlSW5RdWludFwiPT09ZS5lYXNpbmcmJihuPXQqdCp0KnQqdCksXCJlYXNlT3V0UXVpbnRcIj09PWUuZWFzaW5nJiYobj0xKy0tdCp0KnQqdCp0KSxcImVhc2VJbk91dFF1aW50XCI9PT1lLmVhc2luZyYmKG49dDwuNT8xNip0KnQqdCp0KnQ6MSsxNiotLXQqdCp0KnQqdCksZS5jdXN0b21FYXNpbmcmJihuPWUuY3VzdG9tRWFzaW5nKHQpKSxufHx0fShmLGc9KGc9MD09PU0/MDpJL00pPjE/MTpnKSxlLnNjcm9sbFRvKDAsTWF0aC5mbG9vcih3KSksZnVuY3Rpb24odCxuKXt2YXIgcj1lLnBhZ2VZT2Zmc2V0O2lmKHQ9PW58fHI9PW58fCh5PG4mJmUuaW5uZXJIZWlnaHQrcik+PV8pcmV0dXJuIHAuY2FuY2VsU2Nyb2xsKCEwKSxpKG8sbixoKSxzKFwic2Nyb2xsU3RvcFwiLGYsbyxjKSxiPW51bGwsdj1udWxsLCEwfSh3LE8pfHwodj1lLnJlcXVlc3RBbmltYXRpb25GcmFtZShMKSxiPXQpfTswPT09ZS5wYWdlWU9mZnNldCYmZS5zY3JvbGxUbygwLDApLGZ1bmN0aW9uKGUsdCxuKXt0fHxoaXN0b3J5LnB1c2hTdGF0ZSYmbi51cGRhdGVVUkwmJmhpc3RvcnkucHVzaFN0YXRlKHtzbW9vdGhTY3JvbGw6SlNPTi5zdHJpbmdpZnkobiksYW5jaG9yOmUuaWR9LGRvY3VtZW50LnRpdGxlLGU9PT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ/XCIjdG9wXCI6XCIjXCIrZS5pZCl9KG8saCxmKSxcIm1hdGNoTWVkaWFcImluIGUmJmUubWF0Y2hNZWRpYShcIihwcmVmZXJzLXJlZHVjZWQtbW90aW9uKVwiKS5tYXRjaGVzP2kobyxNYXRoLmZsb29yKE8pLCExKToocyhcInNjcm9sbFN0YXJ0XCIsZixvLGMpLHAuY2FuY2VsU2Nyb2xsKCEwKSxlLnJlcXVlc3RBbmltYXRpb25GcmFtZShMKSl9fX0saD1mdW5jdGlvbih0KXtpZighdC5kZWZhdWx0UHJldmVudGVkJiYhKDAhPT10LmJ1dHRvbnx8dC5tZXRhS2V5fHx0LmN0cmxLZXl8fHQuc2hpZnRLZXkpJiZcImNsb3Nlc3RcImluIHQudGFyZ2V0JiYoZj10LnRhcmdldC5jbG9zZXN0KGMpKSYmXCJhXCI9PT1mLnRhZ05hbWUudG9Mb3dlckNhc2UoKSYmIXQudGFyZ2V0LmNsb3Nlc3QobC5pZ25vcmUpJiZmLmhvc3RuYW1lPT09ZS5sb2NhdGlvbi5ob3N0bmFtZSYmZi5wYXRobmFtZT09PWUubG9jYXRpb24ucGF0aG5hbWUmJi8jLy50ZXN0KGYuaHJlZikpe3ZhciBuLHI7dHJ5e249byhkZWNvZGVVUklDb21wb25lbnQoZi5oYXNoKSl9Y2F0Y2goZSl7bj1vKGYuaGFzaCl9aWYoXCIjXCI9PT1uKXtpZighbC50b3BPbkVtcHR5SGFzaClyZXR1cm47cj1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnR9ZWxzZSByPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Iobik7KHI9cnx8XCIjdG9wXCIhPT1uP3I6ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSYmKHQucHJldmVudERlZmF1bHQoKSxmdW5jdGlvbih0KXtpZihoaXN0b3J5LnJlcGxhY2VTdGF0ZSYmdC51cGRhdGVVUkwmJiFoaXN0b3J5LnN0YXRlKXt2YXIgbj1lLmxvY2F0aW9uLmhhc2g7bj1ufHxcIlwiLGhpc3RvcnkucmVwbGFjZVN0YXRlKHtzbW9vdGhTY3JvbGw6SlNPTi5zdHJpbmdpZnkodCksYW5jaG9yOm58fGUucGFnZVlPZmZzZXR9LGRvY3VtZW50LnRpdGxlLG58fGUubG9jYXRpb24uaHJlZil9fShsKSxwLmFuaW1hdGVTY3JvbGwocixmKSl9fSxtPWZ1bmN0aW9uKGUpe2lmKG51bGwhPT1oaXN0b3J5LnN0YXRlJiZoaXN0b3J5LnN0YXRlLnNtb290aFNjcm9sbCYmaGlzdG9yeS5zdGF0ZS5zbW9vdGhTY3JvbGw9PT1KU09OLnN0cmluZ2lmeShsKSl7dmFyIHQ9aGlzdG9yeS5zdGF0ZS5hbmNob3I7XCJzdHJpbmdcIj09dHlwZW9mIHQmJnQmJiEodD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKG8oaGlzdG9yeS5zdGF0ZS5hbmNob3IpKSl8fHAuYW5pbWF0ZVNjcm9sbCh0LG51bGwse3VwZGF0ZVVSTDohMX0pfX07cmV0dXJuIHAuZGVzdHJveT1mdW5jdGlvbigpe2wmJihkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIixoLCExKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb3BzdGF0ZVwiLG0sITEpLHAuY2FuY2VsU2Nyb2xsKCksbD1udWxsLGY9bnVsbCxkPW51bGwsdj1udWxsKX0sZnVuY3Rpb24oKXtpZighKFwicXVlcnlTZWxlY3RvclwiaW4gZG9jdW1lbnQmJlwiYWRkRXZlbnRMaXN0ZW5lclwiaW4gZSYmXCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWVcImluIGUmJlwiY2xvc2VzdFwiaW4gZS5FbGVtZW50LnByb3RvdHlwZSkpdGhyb3dcIlNtb290aCBTY3JvbGw6IFRoaXMgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSByZXF1aXJlZCBKYXZhU2NyaXB0IG1ldGhvZHMgYW5kIGJyb3dzZXIgQVBJcy5cIjtwLmRlc3Ryb3koKSxsPW4odCxhfHx7fSksZD1sLmhlYWRlcj9kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGwuaGVhZGVyKTpudWxsLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLGgsITEpLGwudXBkYXRlVVJMJiZsLnBvcHN0YXRlJiZlLmFkZEV2ZW50TGlzdGVuZXIoXCJwb3BzdGF0ZVwiLG0sITEpfSgpLHB9fShyKX0uYXBwbHkodCxbXSksdm9pZCAwPT09b3x8KGUuZXhwb3J0cz1vKX0sNDMyOmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjt2YXIgbz10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4sbyl7dm9pZCAwPT09byYmKG89biksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbyx7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KX06ZnVuY3Rpb24oZSx0LG4sbyl7dm9pZCAwPT09byYmKG89biksZVtvXT10W25dfSkscj10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxvKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSkscihuKDQ3KSx0KSxyKG4oOTI2KSx0KSxyKG4oMzQ5KSx0KSxyKG4oMTM3KSx0KSxyKG4oNzI5KSx0KSxyKG4oMzgzKSx0KSxyKG4oNDUwKSx0KSxyKG4oMzU4KSx0KSxyKG4oNzUzKSx0KSxyKG4oODY5KSx0KSxyKG4oMzUyKSx0KSxyKG4oNDQ2KSx0KSxyKG4oMTY0KSx0KSxyKG4oMzA1KSx0KSxyKG4oNTAyKSx0KX0sMzQ5OmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZUFycm93TmF2aWdhdGlvbj12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlQXJyb3dOYXZpZ2F0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PWUubGlzdEl0ZW1zLG49ZS5vbkFycm93VXBPckRvd24scj0oMCxvLnVzZVN0YXRlKSgwKSx1PXJbMF0saT1yWzFdLHM9KDAsby51c2VDYWxsYmFjaykoKGZ1bmN0aW9uKGUpe2koZSl9KSxbdF0pLGM9ZnVuY3Rpb24oZSl7dmFyIG89ZS5rZXk7aWYobnVsbD09dD92b2lkIDA6dC5sZW5ndGgpaWYoXCJBcnJvd1VwXCI9PT1vKW4mJm4oKSxlLnByZXZlbnREZWZhdWx0KCkscyh1PjA/dS0xOnQubGVuZ3RoLTEpO2Vsc2V7aWYoXCJBcnJvd0Rvd25cIiE9PW8pcmV0dXJuO24mJm4oKSxlLnByZXZlbnREZWZhdWx0KCksdTx0Lmxlbmd0aC0xP3ModSsxKTpzKDApfX07cmV0dXJuKDAsby51c2VFZmZlY3QpKChmdW5jdGlvbigpe3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIixjKSxmdW5jdGlvbigpe3JldHVybiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIixjKX19KSksKDAsby51c2VFZmZlY3QpKChmdW5jdGlvbigpe3MoMCl9KSxbdF0pLHtzZWxlY3RlZEluZGV4OnV9fX0sNDQ2OmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZURlYm91bmNlPXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VEZWJvdW5jZT1mdW5jdGlvbihlLHQpe3ZvaWQgMD09PXQmJih0PTMwMCk7dmFyIG49KDAsby51c2VTdGF0ZSkoZSkscj1uWzBdLHU9blsxXTtyZXR1cm4oMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7dmFyIG49c2V0VGltZW91dCgoZnVuY3Rpb24oKXt1KGUpfSksdCk7cmV0dXJuIGZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KG4pfX0pLFtlLHRdKSxyfX0sMTY0OmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZUVsZW1lbnRTaXplPXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VFbGVtZW50U2l6ZT1mdW5jdGlvbigpe3ZhciBlLHQsbj0oMCxvLnVzZVJlZikobnVsbCk7cmV0dXJuW24se3dpZHRoOm51bGw9PT0oZT1udWxsPT1uP3ZvaWQgMDpuLmN1cnJlbnQpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmNsaWVudFdpZHRoLGhlaWdodDpudWxsPT09KHQ9bnVsbD09bj92b2lkIDA6bi5jdXJyZW50KXx8dm9pZCAwPT09dD92b2lkIDA6dC5jbGllbnRIZWlnaHR9XX0sdC5kZWZhdWx0PXQudXNlRWxlbWVudFNpemV9LDEzNzpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VJbnRlcnNlY3Rpb25PYnNlcnZlcj12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlSW50ZXJzZWN0aW9uT2JzZXJ2ZXI9ZnVuY3Rpb24oZSl7dmFyIHQ9KDAsby51c2VSZWYpKG51bGwpLG49KDAsby51c2VTdGF0ZSkoITEpLHI9blswXSx1PW5bMV0saT1mdW5jdGlvbihlKXt2YXIgdD1lWzBdO3UodC5pc0ludGVyc2VjdGluZyl9O3JldHVybigwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXtpZih3aW5kb3cmJndpbmRvdy5JbnRlcnNlY3Rpb25PYnNlcnZlcil7dmFyIG49bmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGksZSksbz10LmN1cnJlbnQ7cmV0dXJuIHQuY3VycmVudCYmbi5vYnNlcnZlKHQuY3VycmVudCksZnVuY3Rpb24oKXtvJiZuLnVub2JzZXJ2ZShvKX19dSghMSl9KSxbdCxlXSkse2NvbnRhaW5lclJlZjp0LGlzVmlzaWJsZTpyfX0sdC5kZWZhdWx0PXQudXNlSW50ZXJzZWN0aW9uT2JzZXJ2ZXJ9LDcyOTpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VJc0JyZWFrcG9pbnQ9dm9pZCAwO3ZhciBvPW4oMTU2KSxyPW4oNDMyKSx1PXt4czoxLG1vYmlsZVNtYWxsOjMyMCxtb2JpbGU6Mzc1LHRhYmxldDo3NjgsdGFibGV0TGFyZ2U6OTIwLGRlc2t0b3BTbWFsbDoxMDI0LGRlc2t0b3A6MTI2MCxkZXNrdG9wTGFyZ2U6MTQ0MH07dC51c2VJc0JyZWFrcG9pbnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9XCJzdHJpbmdcIj09dHlwZW9mIGU/dVtlXTplLG49KDAsby51c2VTdGF0ZSkobnVsbCksaT1uWzBdLHM9blsxXSxjPSgwLG8udXNlQ2FsbGJhY2spKChmdW5jdGlvbigpe3Mod2luZG93LmlubmVyV2lkdGgpfSksW10pO3JldHVybigwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXtjKCl9KSxbXSksKDAsci51c2VPblJlc2l6ZSkoYyksaT49dH0sdC5kZWZhdWx0PXQudXNlSXNCcmVha3BvaW50fSw0NTA6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlSXNMb2FkaW5nQWZ0ZXJFcnJvcj12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlSXNMb2FkaW5nQWZ0ZXJFcnJvcj1mdW5jdGlvbihlLHQpe3ZhciBuPSgwLG8udXNlU3RhdGUpKHQpLHI9blswXSx1PW5bMV07cmV0dXJuKDAsby51c2VFZmZlY3QpKChmdW5jdGlvbigpe2V8fHUodCl9KSxbZSx0XSksZSYmcn19LDMwNTpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VJc01vYmlsZT12b2lkIDA7dmFyIG89big3MjkpO3QudXNlSXNNb2JpbGU9ZnVuY3Rpb24oKXtyZXR1cm4hKDAsby51c2VJc0JyZWFrcG9pbnQpKFwidGFibGV0XCIpfSx0LmRlZmF1bHQ9dC51c2VJc01vYmlsZX0sMzgzOmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3Q9dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3Q9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz9vLnVzZUxheW91dEVmZmVjdDpvLnVzZUVmZmVjdCx0LmRlZmF1bHQ9dC51c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0fSw3NTM6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlT25Mb3NlRm9jdXNXaXRoaW49dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZU9uTG9zZUZvY3VzV2l0aGluPWZ1bmN0aW9uKGUpe3ZhciB0PWUucmVmLG49ZS5jYWxsYmFjayxyPWUud2F0Y2g7KDAsby51c2VFZmZlY3QpKChmdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKCl7dmFyIGU7aWYocilyZXR1cm4obnVsbD09PShlPXQuY3VycmVudCl8fHZvaWQgMD09PWU/dm9pZCAwOmUubWF0Y2hlcyhcIjpmb2N1cy13aXRoaW5cIikpP3ZvaWQgMDpuKCl9O3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIixlKSxmdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIixlKX19KSxbbix0LHJdKX0sdC5kZWZhdWx0PXQudXNlT25Mb3NlRm9jdXNXaXRoaW59LDUwMjpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VPblJlc2l6ZT12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlT25SZXNpemU9ZnVuY3Rpb24oZSl7KDAsby51c2VFZmZlY3QpKChmdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKCl7ZSh3aW5kb3cuaW5uZXJXaWR0aCl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLHQse3Bhc3NpdmU6ITB9KSxmdW5jdGlvbigpe3JldHVybiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLHQpfX0pLFtdKX0sdC5kZWZhdWx0PXQudXNlT25SZXNpemV9LDM1MjpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VPbldpbmRvd0ZvY3VzPXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VPbldpbmRvd0ZvY3VzPWZ1bmN0aW9uKGUpeygwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbigpe2UmJlwidmlzaWJsZVwiPT09ZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlJiZlKCl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInZpc2liaWxpdHljaGFuZ2VcIix0LCExKSxmdW5jdGlvbigpe3JldHVybiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInZpc2liaWxpdHljaGFuZ2VcIix0KX19KSxbZV0pfX0sNDc6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlT3V0c2lkZVJlYWN0ZXI9dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZU91dHNpZGVSZWFjdGVyPWZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihuKXtlLmN1cnJlbnQmJiFlLmN1cnJlbnQuY29udGFpbnMobi50YXJnZXQpJiZ0KCl9KDAsby51c2VFZmZlY3QpKChmdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsbiksZnVuY3Rpb24oKXtkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsbil9fSkpfX0sODY5OmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZVJ1bkFmdGVyVXBkYXRlPXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VSdW5BZnRlclVwZGF0ZT1mdW5jdGlvbigpe3ZhciBlPSgwLG8udXNlUmVmKShudWxsKTtyZXR1cm4oMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7ZS5jdXJyZW50JiYoZS5jdXJyZW50KCksZS5jdXJyZW50PW51bGwpfSkpLGZ1bmN0aW9uKHQpe2UuY3VycmVudD10fX0sdC5kZWZhdWx0PXQudXNlUnVuQWZ0ZXJVcGRhdGV9LDkyNjpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VTY3JvbGxMb2NrPXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VTY3JvbGxMb2NrPWZ1bmN0aW9uKCl7cmV0dXJue2xvY2s6KDAsby51c2VDYWxsYmFjaykoKGZ1bmN0aW9uKCl7dmFyIGU9d2luZG93LnNjcm9sbFkrXCJweFwiLHQ9ZG9jdW1lbnQuYm9keTt0LnN0eWxlLnBvc2l0aW9uPVwiZml4ZWRcIix0LnN0eWxlLnRvcD1cIi1cIitlfSksW10pLHVubG9jazooMCxvLnVzZUNhbGxiYWNrKSgoZnVuY3Rpb24oKXt2YXIgZT1kb2N1bWVudC5ib2R5LHQ9ZS5zdHlsZS50b3Asbj0tMSpwYXJzZUludCh0fHxcIjBcIik7ZS5zdHlsZS5wb3NpdGlvbj1cIlwiLGUuc3R5bGUudG9wPVwiXCIsbiYmd2luZG93LnNjcm9sbFRvKDAsLTEqcGFyc2VJbnQodHx8XCIwXCIpKX0pLFtdKX19fSwzNTg6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO3ZhciBvPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlU21vb3RoU2Nyb2xsPXZvaWQgMDt2YXIgcj1uKDE1NiksdT1vKG4oODg4KSk7dC51c2VTbW9vdGhTY3JvbGw9ZnVuY3Rpb24oZSl7dmFyIHQ9KDAsci51c2VSZWYpKG51bGwpLG49ZS5yZWYsbz1lLm9mZnNldCxpPXZvaWQgMD09PW8/MDpvLHM9ZS5zcGVlZCxjPXZvaWQgMD09PXM/NTAwOnM7cmV0dXJuKDAsci51c2VFZmZlY3QpKChmdW5jdGlvbigpe3QuY3VycmVudD1uZXcgdS5kZWZhdWx0KG51bGwse3NwZWVkOmMsc3BlZWRBc0R1cmF0aW9uOiEwfSl9KSxbXSksKDAsci51c2VDYWxsYmFjaykoKGZ1bmN0aW9uKCl7biYmdC5jdXJyZW50JiZ0LmN1cnJlbnQuYW5pbWF0ZVNjcm9sbChuLmN1cnJlbnQsbnVsbCx7b2Zmc2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGl9LHVwZGF0ZVVSTDohMX0pfSksW2ksbl0pfX0sMTU2OmZ1bmN0aW9uKHQpe1widXNlIHN0cmljdFwiO3QuZXhwb3J0cz1lfX0sbj17fTtmdW5jdGlvbiBvKGUpe3ZhciByPW5bZV07aWYodm9pZCAwIT09cilyZXR1cm4gci5leHBvcnRzO3ZhciB1PW5bZV09e2V4cG9ydHM6e319O3JldHVybiB0W2VdLmNhbGwodS5leHBvcnRzLHUsdS5leHBvcnRzLG8pLHUuZXhwb3J0c31yZXR1cm4gby5nPWZ1bmN0aW9uKCl7aWYoXCJvYmplY3RcIj09dHlwZW9mIGdsb2JhbFRoaXMpcmV0dXJuIGdsb2JhbFRoaXM7dHJ5e3JldHVybiB0aGlzfHxuZXcgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpfWNhdGNoKGUpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3cpcmV0dXJuIHdpbmRvd319KCksbyg0MzIpfSgpfSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiaW1wb3J0IG9iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIi4vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZS5qc1wiO1xuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHtcbiAgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9O1xuICB2YXIgbyxcbiAgICByLFxuICAgIGkgPSBvYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpO1xuICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgIHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtcbiAgICBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIC0xID09PSB0LmluZGV4T2YobykgJiYge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pO1xuICB9XG4gIHJldHVybiBpO1xufVxuZXhwb3J0IHsgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIGFzIGRlZmF1bHQgfTsiLCJmdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7XG4gIGlmIChudWxsID09IHIpIHJldHVybiB7fTtcbiAgdmFyIHQgPSB7fTtcbiAgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkge1xuICAgIGlmICgtMSAhPT0gZS5pbmRleE9mKG4pKSBjb250aW51ZTtcbiAgICB0W25dID0gcltuXTtcbiAgfVxuICByZXR1cm4gdDtcbn1cbmV4cG9ydCB7IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgU3VnZ2VzdGlvbkl0ZW0gZnJvbSAnQGRpZ2l0cmFuc2l0LWNvbXBvbmVudC9kaWdpdHJhbnNpdC1jb21wb25lbnQtc3VnZ2VzdGlvbi1pdGVtJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0JztcbmltcG9ydCBjeCBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7XG4gIGdldFN1Z2dlc3Rpb25Db250ZW50LFxuICB0cmFuc2xhdGVGdXR1cmVSb3V0ZVN1Z2dlc3Rpb25UaW1lLFxufSBmcm9tICcuLi91dGlscy91dGlscyc7XG5cbmZ1bmN0aW9uIFN1Z2dlc3Rpb24oe1xuICBpdGVtLFxuICBsbmcsXG4gIGdldEl0ZW1Qcm9wcyxcbiAgaGlnaGxpZ2h0ZWRJbmRleCxcbiAgaXRlbUluZGV4LFxuICBzdHlsZXMsXG4gIC4uLnJlc3Rcbn0pIHtcbiAgY29uc3QgW3RdID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgY29uc3QgbmV3SXRlbSA9XG4gICAgaXRlbS50eXBlID09PSAnRnV0dXJlUm91dGUnXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgIHRyYW5zbGF0ZWRUZXh0OiB0cmFuc2xhdGVGdXR1cmVSb3V0ZVN1Z2dlc3Rpb25UaW1lKGl0ZW0sIGxuZywgdCksXG4gICAgICAgIH1cbiAgICAgIDogaXRlbTtcbiAgY29uc3QgY29udGVudCA9IGdldFN1Z2dlc3Rpb25Db250ZW50KGl0ZW0sIGxuZywgdCk7XG4gIHJldHVybiAoXG4gICAgPGxpXG4gICAgICBjbGFzc05hbWU9e2N4KFxuICAgICAgICBzdHlsZXMuc3VnZ2VzdGlvbixcbiAgICAgICAgaGlnaGxpZ2h0ZWRJbmRleCA9PT0gaXRlbUluZGV4ICYmIHN0eWxlcy5zdWdnZXN0aW9uSGlnaGxpZ2h0ZWQsXG4gICAgICApfVxuICAgICAgey4uLmdldEl0ZW1Qcm9wcyh7IGluZGV4OiBpdGVtSW5kZXggfSl9XG4gICAgPlxuICAgICAgPFN1Z2dlc3Rpb25JdGVtIGl0ZW09e25ld0l0ZW19IGNvbnRlbnQ9e2NvbnRlbnR9IGxuZz17bG5nfSB7Li4ucmVzdH0gLz5cbiAgICA8L2xpPlxuICApO1xufVxuY29uc3QgaXRlbVNoYXBlID0gUHJvcFR5cGVzLnNoYXBlKHtcbiAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgdHlwZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgYWRkcmVzczogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2VsZWN0ZWRJY29uSWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGljb25Db2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgdHJhbnNsYXRlZFRleHQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHByb3BlcnRpZXM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgbGF5ZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgbG9jYWxhZG1pbjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBtb2RlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHNvdXJjZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBhcnJvd0NsaWNrZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIGRlc3RpbmF0aW9uOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIGxvY2FsYWRtaW46IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgfSksXG4gICAgb3JpZ2luOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIGxvY2FsYWRtaW46IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgfSksXG4gIH0pLFxufSk7XG5cblN1Z2dlc3Rpb24ucHJvcFR5cGVzID0ge1xuICBpdGVtOiBpdGVtU2hhcGUuaXNSZXF1aXJlZCxcbiAgbG5nOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGdldEl0ZW1Qcm9wczogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgaGlnaGxpZ2h0ZWRJbmRleDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICBpdGVtSW5kZXg6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgc3R5bGVzOiBQcm9wVHlwZXMub2JqZWN0T2YoUHJvcFR5cGVzLnN0cmluZykuaXNSZXF1aXJlZCxcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBTdWdnZXN0aW9ucyh7XG4gIHN1Z2dlc3Rpb25zLFxuICBnZXRNZW51UHJvcHMsXG4gIGdldEl0ZW1Qcm9wcyxcbiAgbG5nLFxuICBzdHlsZXMsXG4gIGhpZGRlbixcbiAgcmVuZGVyQ2xlYXJIaXN0b3J5QnV0dG9uLFxuICBoYW5kbGVDbGVhckhpc3RvcnksXG4gIC4uLnJlc3Rcbn0pIHtcbiAgY29uc3QgW3RdID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2N4KFtcbiAgICAgICAgc3R5bGVzLnN1Z2dlc3Rpb25zQ29udGFpbmVyT3BlbixcbiAgICAgICAgc3R5bGVzLnN1Z2dlc3Rpb25zQ29udGFpbmVyLFxuICAgICAgICBoaWRkZW4gJiYgc3R5bGVzLmhpZGRlbixcbiAgICAgIF0pfVxuICAgID5cbiAgICAgIDx1bCBjbGFzc05hbWU9e3N0eWxlcy5zdWdnZXN0aW9uc0xpc3R9IHsuLi5nZXRNZW51UHJvcHMoKX0+XG4gICAgICAgIHtzdWdnZXN0aW9ucy5tYXAoKHN1Z2dlc3Rpb24sIGkpID0+IHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPFN1Z2dlc3Rpb25cbiAgICAgICAgICAgICAga2V5PXtgJHtzdWdnZXN0aW9uLnR5cGV9LSR7XG4gICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5wcm9wZXJ0aWVzLmdpZCB8fFxuICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24ucHJvcGVydGllcy5ndGZzSWQgfHxcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShzdWdnZXN0aW9uLnByb3BlcnRpZXMpXG4gICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICBnZXRJdGVtUHJvcHM9e2dldEl0ZW1Qcm9wc31cbiAgICAgICAgICAgICAgaXRlbUluZGV4PXtpfVxuICAgICAgICAgICAgICBpdGVtPXtzdWdnZXN0aW9ufVxuICAgICAgICAgICAgICBsbmc9e2xuZ31cbiAgICAgICAgICAgICAgc3R5bGVzPXtzdHlsZXN9XG4gICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApO1xuICAgICAgICB9KX1cbiAgICAgICAge3JlbmRlckNsZWFySGlzdG9yeUJ1dHRvbiAmJiAoXG4gICAgICAgICAgPGxpIHsuLi5nZXRJdGVtUHJvcHMoeyBpbmRleDogc3VnZ2VzdGlvbnMubGVuZ3RoIH0pfT5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlQ2xlYXJIaXN0b3J5fVxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ2NsZWFyLXNlYXJjaC1oaXN0b3J5J119XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt0KCdjbGVhci1zZWFyY2gtaGlzdG9yeScsIHsgbG5nIH0pfVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9saT5cbiAgICAgICAgKX1cbiAgICAgIDwvdWw+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cblN1Z2dlc3Rpb25zLnByb3BUeXBlcyA9IHtcbiAgc3VnZ2VzdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKGl0ZW1TaGFwZSkuaXNSZXF1aXJlZCxcbiAgZ2V0TWVudVByb3BzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBnZXRJdGVtUHJvcHM6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGxuZzogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBzdHlsZXM6IFByb3BUeXBlcy5vYmplY3RPZihQcm9wVHlwZXMuc3RyaW5nKS5pc1JlcXVpcmVkLFxuICBoaWRkZW46IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIHJlbmRlckNsZWFySGlzdG9yeUJ1dHRvbjogUHJvcFR5cGVzLmJvb2wsXG4gIGhhbmRsZUNsZWFySGlzdG9yeTogUHJvcFR5cGVzLmZ1bmMsXG59O1xuXG5TdWdnZXN0aW9ucy5kZWZhdWx0UHJvcHMgPSB7XG4gIHJlbmRlckNsZWFySGlzdG9yeUJ1dHRvbjogZmFsc2UsXG4gIGhhbmRsZUNsZWFySGlzdG9yeTogKCkgPT4gdW5kZWZpbmVkLFxufTtcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgSWNvbiBmcm9tICdAZGlnaXRyYW5zaXQtY29tcG9uZW50L2RpZ2l0cmFuc2l0LWNvbXBvbmVudC1pY29uJztcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG4vKipcbiAqIElucHV0IGNsZWFyIGJ1dHRvbiBlbGVtZW50XG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBDbGVhckJ1dHRvblByb3BzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gY29sb3IgLy8gaGV4IGNvbG9yIHN0cmluZ1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGxuZyAvLyBsYW5ndWFnZSwgZWcuICdmaSdcbiAqIEBwcm9wZXJ0eSB7KCkgPT4gdm9pZH0gY2xlYXJJbnB1dFxuICogQHByb3BlcnR5IHsoKSA9PiB2b2lkfSBbb25LZXlEb3duXVxuICogQHBhcmFtIHtDbGVhckJ1dHRvblByb3BzfSBwcm9wc1xuICogQHJldHVybnMge0pTWC5FbGVtZW50fVxuICovXG5leHBvcnQgY29uc3QgQ2xlYXJCdXR0b24gPSAoeyBjb2xvciwgbG5nLCBjbGVhcklucHV0LCBvbktleURvd24sIHN0eWxlcyB9KSA9PiB7XG4gIGNvbnN0IFt0XSA9IHVzZVRyYW5zbGF0aW9uKCk7XG4gIHJldHVybiAoXG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzc05hbWU9e3N0eWxlc1snY2xlYXItaW5wdXQnXX1cbiAgICAgIG9uQ2xpY2s9e2NsZWFySW5wdXR9XG4gICAgICBhcmlhLWxhYmVsPXt0KCdjbGVhci1idXR0b24tbGFiZWwnLCB7IGxuZyB9KX1cbiAgICAgIG9uS2V5RG93bj17b25LZXlEb3dufVxuICAgID5cbiAgICAgIDxJY29uIGltZz1cImNsb3NlXCIgY29sb3I9e2NvbG9yfSAvPlxuICAgIDwvYnV0dG9uPlxuICApO1xufTtcblxuQ2xlYXJCdXR0b24ucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBsbmc6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgY2xlYXJJbnB1dDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgb25LZXlEb3duOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBzdHlsZXM6IFByb3BUeXBlcy5vYmplY3RPZihQcm9wVHlwZXMuc3RyaW5nKS5pc1JlcXVpcmVkLFxufTtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VSZWYsIHVzZUxheW91dEVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY3ggZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBDbGVhckJ1dHRvbiB9IGZyb20gJy4vQ2xlYXJCdXR0b24nO1xuaW1wb3J0IHsgaXNLZXlib2FyZFNlbGVjdGlvbkV2ZW50IH0gZnJvbSAnLi4vdXRpbHMvdXRpbHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gSW5wdXQoe1xuICBpZCxcbiAgbG5nLFxuICB2YWx1ZSxcbiAgcGxhY2Vob2xkZXIsXG4gIHJlcXVpcmVkLFxuICBnZXRJbnB1dFByb3BzLFxuICBnZXRMYWJlbFByb3BzLFxuICBjbGVhcklucHV0LFxuICBhcmlhTGFiZWwsXG4gIGlucHV0UmVmLFxuICBzdHlsZXMsXG4gIHJlbmRlckxhYmVsLFxuICBpc01vYmlsZSxcbiAgaW5wdXRDbGFzc05hbWUsXG4gIHRyYW5zcG9ydE1vZGUsXG4gIGNsZWFyQnV0dG9uQ29sb3IsXG4gIGF1dG9Gb2N1cyxcbiAgaW5wdXRPbkJsdXIsXG59KSB7XG4gIGNvbnN0IGN1cnNvclJlZiA9IHVzZVJlZihudWxsKTtcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGVsID0gaW5wdXRSZWYuY3VycmVudDtcbiAgICBpZiAoZWwgJiYgY3Vyc29yUmVmLmN1cnJlbnQgIT09IG51bGwgJiYgZWwgPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgIGVsLnNldFNlbGVjdGlvblJhbmdlKGN1cnNvclJlZi5jdXJyZW50LCBjdXJzb3JSZWYuY3VycmVudCk7XG4gICAgfVxuICB9LCBbdmFsdWVdKTtcblxuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSBlID0+IHtcbiAgICBjdXJzb3JSZWYuY3VycmVudCA9IGUudGFyZ2V0LnNlbGVjdGlvblN0YXJ0O1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb250YWluZXJ9PlxuICAgICAge3JlbmRlckxhYmVsICYmIChcbiAgICAgICAgPGxhYmVsXG4gICAgICAgICAgey4uLmdldExhYmVsUHJvcHMoe1xuICAgICAgICAgICAgY2xhc3NOYW1lOiBzdHlsZXNbJ3NyLW9ubHknXSxcbiAgICAgICAgICAgIGh0bWxGb3I6IGlkLFxuICAgICAgICAgIH0pfVxuICAgICAgICA+XG4gICAgICAgICAge2FyaWFMYWJlbH1cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICl9XG4gICAgICA8aW5wdXRcbiAgICAgICAgYXJpYS1sYWJlbD17YXJpYUxhYmVsfVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganN4LWExMXkvbm8tYXV0b2ZvY3VzXG4gICAgICAgIGF1dG9Gb2N1cz17YXV0b0ZvY3VzfVxuICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICAgIHJlcXVpcmVkPXtyZXF1aXJlZH1cbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBjbGFzc05hbWU9e2N4KFxuICAgICAgICAgIHN0eWxlcy5pbnB1dCxcbiAgICAgICAgICBpc01vYmlsZSAmJiB0cmFuc3BvcnRNb2RlID8gc3R5bGVzLnRoaW4gOiAnJyxcbiAgICAgICAgICBzdHlsZXNbaWRdIHx8ICcnLFxuICAgICAgICAgIHZhbHVlID8gc3R5bGVzLmhhc1ZhbHVlIDogJycsXG4gICAgICAgICAgaW5wdXRDbGFzc05hbWUsXG4gICAgICAgICl9XG4gICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgaWQ9e2lkfVxuICAgICAgICB7Li4uZ2V0SW5wdXRQcm9wcyh7XG4gICAgICAgICAgcmVmOiBpbnB1dFJlZixcbiAgICAgICAgICBvbkJsdXI6IGlucHV0T25CbHVyLFxuICAgICAgICAgIG9uQ2hhbmdlOiBoYW5kbGVDaGFuZ2UsXG4gICAgICAgIH0pfVxuICAgICAgLz5cbiAgICAgIHt2YWx1ZSAmJiAoXG4gICAgICAgIDxDbGVhckJ1dHRvblxuICAgICAgICAgIGxuZz17bG5nfVxuICAgICAgICAgIGNsZWFySW5wdXQ9eygpID0+IGNsZWFySW5wdXQoaW5wdXRSZWYpfVxuICAgICAgICAgIHN0eWxlcz17c3R5bGVzfVxuICAgICAgICAgIGNvbG9yPXtjbGVhckJ1dHRvbkNvbG9yfVxuICAgICAgICAgIG9uS2V5RG93bj17ZSA9PiBpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQoZSkgJiYgY2xlYXJJbnB1dChpbnB1dFJlZil9XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5JbnB1dC5wcm9wVHlwZXMgPSB7XG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGxuZzogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICByZXF1aXJlZDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgdmFsdWU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgZ2V0SW5wdXRQcm9wczogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgZ2V0TGFiZWxQcm9wczogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgY2xlYXJJbnB1dDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgYXJpYUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGlucHV0UmVmOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGN1cnJlbnQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgfSkuaXNSZXF1aXJlZCxcbiAgc3R5bGVzOiBQcm9wVHlwZXMub2JqZWN0T2YoUHJvcFR5cGVzLnN0cmluZykuaXNSZXF1aXJlZCxcbiAgcmVuZGVyTGFiZWw6IFByb3BUeXBlcy5ib29sLFxuICBpc01vYmlsZTogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgaW5wdXRDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgdHJhbnNwb3J0TW9kZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgY2xlYXJCdXR0b25Db2xvcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBhdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICBpbnB1dE9uQmx1cjogUHJvcFR5cGVzLmZ1bmMsXG59O1xuXG5JbnB1dC5kZWZhdWx0UHJvcHMgPSB7XG4gIGF1dG9Gb2N1czogZmFsc2UsXG4gIHJlbmRlckxhYmVsOiBmYWxzZSxcbiAgdHJhbnNwb3J0TW9kZTogdW5kZWZpbmVkLFxuICBpbnB1dE9uQmx1cjogKCkgPT4ge30sXG59O1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJlYWN0TW9kYWwgZnJvbSAncmVhY3QtbW9kYWwnO1xuaW1wb3J0IERpYWxvZ01vZGFsIGZyb20gJ0BkaWdpdHJhbnNpdC1jb21wb25lbnQvZGlnaXRyYW5zaXQtY29tcG9uZW50LWRpYWxvZy1tb2RhbCc7XG5pbXBvcnQgSWNvbiBmcm9tICdAZGlnaXRyYW5zaXQtY29tcG9uZW50L2RpZ2l0cmFuc2l0LWNvbXBvbmVudC1pY29uJztcbmltcG9ydCBob29rcyBmcm9tICdAaHNsLWZpL2hvb2tzJztcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCc7XG5pbXBvcnQgeyB1c2VDb21ib2JveCB9IGZyb20gJ2Rvd25zaGlmdCc7XG5pbXBvcnQgbW9iaWxlU3R5bGVzIGZyb20gJy4vTW9iaWxlU2VhcmNoLnNjc3MnO1xuaW1wb3J0IG1vYmlsZU5vU2Nyb2xsU3R5bGVzIGZyb20gJy4vTW9iaWxlTm9TY3JvbGwuc2Nzcyc7XG5pbXBvcnQgeyBTdWdnZXN0aW9ucyB9IGZyb20gJy4vU3VnZ2VzdGlvbnMnO1xuaW1wb3J0IHsgSW5wdXQgfSBmcm9tICcuL0lucHV0JztcbmltcG9ydCB7XG4gIGlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudCxcbiAgZ2V0U3VnZ2VzdGlvblZhbHVlLFxuICBpc1BPSVNlYXJjaCxcbn0gZnJvbSAnLi4vdXRpbHMvdXRpbHMnO1xuXG4vKipcbiAqIEB0eXBlZGVmIEF1dG9zdWdnZXN0U3RhdGVcbiAqIEBwcm9wZXJ0eSB7YXJyYXl9IHN1Z2dlc3Rpb25zXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHJlbmRlck1vYmlsZVxuICpcbiAqIEB0eXBlZGVmIE1vYmlsZVZpZXdQcm9wc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGFwcEVsZW1lbnRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpZFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHBsYWNlaG9sZGVyXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9ufSBjbGVhcklucHV0XG4gKiBAcHJvcGVydHkge2Z1bmN0aW9ufSBvblNlbGVjdGVkSXRlbUNoYW5nZVxuICogQHByb3BlcnR5IHtvYmplY3R9IGZvbnRXZWlnaHRzXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9ufSBjbGVhck9sZFNlYXJjaGVzXG4gKiBAcHJvcGVydHkge29iamVjdH0gc3VnZ2VzdGlvblByb3BzXG4gKiBAcHJvcGVydHkge29iamVjdH0gY29sb3JzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbG5nXG4gKiBAcHJvcGVydHkge29iamVjdH0gYXJpYVByb3BzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdmFsdWVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpbnB1dENsYXNzTmFtZVxuICogQHByb3BlcnR5IHtib29sZWFufSByZXF1aXJlZFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFttb2JpbGVMYWJlbF1cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3Nob3dTY3JvbGxdXG4gKiBAcHJvcGVydHkge0F1dG9zdWdnZXN0U3RhdGV9IHN0YXRlXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9ufSBkaXNwYXRjaFxuICpcbiAqIEBwYXJhbSB7TW9iaWxlVmlld1Byb3BzfSBwcm9wc1xuICogQHJldHVybnMge0pTWC5FbGVtZW50fVxuICovXG5jb25zdCBNb2JpbGVWaWV3ID0gKHtcbiAgYXBwRWxlbWVudCxcbiAgaWQsXG4gIHBsYWNlaG9sZGVyLFxuICBjbGVhcklucHV0LFxuICBvblNlbGVjdGVkSXRlbUNoYW5nZSxcbiAgZm9udFdlaWdodHMsXG4gIGNsZWFyT2xkU2VhcmNoZXMsXG4gIHN1Z2dlc3Rpb25Qcm9wcyxcbiAgbG5nLFxuICBhcmlhUHJvcHMsXG4gIHZhbHVlLFxuICBpbnB1dENsYXNzTmFtZSxcbiAgcmVxdWlyZWQsXG4gIG1vYmlsZUxhYmVsLFxuICBzaG93U2Nyb2xsLFxuICBzdGF0ZSxcbiAgZGlzcGF0Y2gsXG4gIGNvbG9ycyxcbn0pID0+IHtcbiAgY29uc3QgW3RdID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgY29uc3QgeyBsb2NrLCB1bmxvY2sgfSA9IGhvb2tzLnVzZVNjcm9sbExvY2soKTtcbiAgY29uc3Qgc3R5bGVzID0gc2hvd1Njcm9sbCA/IG1vYmlsZVN0eWxlcyA6IG1vYmlsZU5vU2Nyb2xsU3R5bGVzO1xuICBjb25zdCBpbnB1dElkID0gYCR7aWR9LWlucHV0YDtcbiAgY29uc3QgbGFiZWxJZCA9IGAke2lkfS1sYWJlbGA7XG4gIGNvbnN0IFtpc0RpYWxvZ09wZW4sIHNldERpYWxvZ09wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBpbnB1dFJlZiA9IFJlYWN0LnVzZVJlZigpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgUmVhY3RNb2RhbC5zZXRBcHBFbGVtZW50KGFwcEVsZW1lbnQpO1xuICB9LCBbXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoc3RhdGUucmVuZGVyTW9iaWxlKSB7XG4gICAgICBsb2NrKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVubG9jaygpO1xuICAgIH1cbiAgfSwgW3N0YXRlLnJlbmRlck1vYmlsZV0pO1xuXG4gIC8qKlxuICAgKiBpbmRlcGVuZGVudCBob29rcyBpbiBtb2JpbGUgdmlldy5cbiAgICogaW5wdXRWYWx1ZSBhbmQgc3VnZ2VzdGlvbiBzdGF0ZXMgYXJlIGtlcHQgaW4gdGhlIHBhcmVudFxuICAgKi9cbiAgY29uc3Qge1xuICAgIGhpZ2hsaWdodGVkSW5kZXgsXG4gICAgZ2V0TGFiZWxQcm9wcyxcbiAgICBnZXRNZW51UHJvcHMsXG4gICAgZ2V0SW5wdXRQcm9wcyxcbiAgICBnZXRJdGVtUHJvcHMsXG4gICAgc2V0SGlnaGxpZ2h0ZWRJbmRleCxcbiAgfSA9IHVzZUNvbWJvYm94KHtcbiAgICBpdGVtczogc3RhdGUuc3VnZ2VzdGlvbnMsXG4gICAgaW5wdXRWYWx1ZTogdmFsdWUsXG4gICAgaXNPcGVuOiB0cnVlLFxuICAgIG9uU2VsZWN0ZWRJdGVtQ2hhbmdlOiBjaGFuZ2VzID0+IHtcbiAgICAgIG9uU2VsZWN0ZWRJdGVtQ2hhbmdlKGNoYW5nZXMpO1xuICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnVE9HR0xFX01FTlUnLCBpc01vYmlsZTogdHJ1ZSB9KTtcbiAgICB9LFxuICAgIGlucHV0SWQsXG4gICAgbGFiZWxJZCxcbiAgICBzZWxlY3RlZEl0ZW06IG51bGwsXG4gICAgZGVmYXVsdEhpZ2hsaWdodGVkSW5kZXg6IC0xLFxuICAgIG9uSW5wdXRWYWx1ZUNoYW5nZTogKHsgaW5wdXRWYWx1ZSB9KSA9PlxuICAgICAgc3RhdGUucmVuZGVyTW9iaWxlICYmIC8vIHByZXZlbnQgdXBkYXRpbmcgdmFsdWUgd2hlbiB0aGUgc2VhcmNoIGlzIG5vdCBvcGVuXG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdJTlBVVF9DSEFOR0UnLCB2YWx1ZTogaW5wdXRWYWx1ZSB9KSxcbiAgICBzdGF0ZVJlZHVjZXI6IChvbGRTdGF0ZSwgeyBjaGFuZ2VzLCB0eXBlIH0pID0+IHtcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIHVzZUNvbWJvYm94LnN0YXRlQ2hhbmdlVHlwZXMuSW5wdXRLZXlEb3duRXNjYXBlOiB7XG4gICAgICAgICAgc2V0SGlnaGxpZ2h0ZWRJbmRleCgtMSk7XG4gICAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnVE9HR0xFX01FTlUnLCBpc01vYmlsZTogdHJ1ZSB9KTtcbiAgICAgICAgICByZXR1cm4gb2xkU3RhdGU7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSB1c2VDb21ib2JveC5zdGF0ZUNoYW5nZVR5cGVzLklucHV0S2V5RG93bkVudGVyOlxuICAgICAgICAgIGlmIChzdGF0ZS5sb2FkaW5nKSB7XG4gICAgICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdQRU5ESU5HX0VOVEVSJywgZW50ZXJQZW5kaW5nOiB0cnVlIH0pO1xuICAgICAgICAgICAgcmV0dXJuIG9sZFN0YXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBzZWxlY3QgdGhlIGZpcnN0IGl0ZW0gaWYgbm9uZSBpcyBoaWdobGlnaHRlZFxuICAgICAgICAgIGlmIChvbGRTdGF0ZS5oaWdobGlnaHRlZEluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4uY2hhbmdlcyxcbiAgICAgICAgICAgICAgc2VsZWN0ZWRJdGVtOiBzdGF0ZS5zdWdnZXN0aW9uc1swXSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjaGFuZ2VzO1xuICAgICAgICAvLyBhbGxvd3MgdGFiYmluZyBvdXQgb2YgaW5wdXQgZmllbGQgd2l0aG91dCBjbG9zaW5nXG4gICAgICAgIGNhc2UgdXNlQ29tYm9ib3guc3RhdGVDaGFuZ2VUeXBlcy5JbnB1dEJsdXI6IHtcbiAgICAgICAgICByZXR1cm4gb2xkU3RhdGU7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gY2hhbmdlcztcbiAgICAgIH1cbiAgICB9LFxuICAgIGl0ZW1Ub1N0cmluZyhzdWdnZXN0aW9uKSB7XG4gICAgICByZXR1cm4gc3VnZ2VzdGlvbiA/IGdldFN1Z2dlc3Rpb25WYWx1ZShzdWdnZXN0aW9uKSA6ICcnO1xuICAgIH0sXG4gIH0pO1xuICAvLyBjYWxsIHRvIHN1cHByZXNzIHJlZiBlcnJvcnMgZnJvbSBkb3duc2hpZnRcbiAgZ2V0TGFiZWxQcm9wcyh7fSwgeyBzdXBwcmVzc1JlZkVycm9yOiB0cnVlIH0pO1xuICBnZXRNZW51UHJvcHMoe30sIHsgc3VwcHJlc3NSZWZFcnJvcjogdHJ1ZSB9KTtcbiAgZ2V0SW5wdXRQcm9wcyh7fSwgeyBzdXBwcmVzc1JlZkVycm9yOiB0cnVlIH0pO1xuICBnZXRJdGVtUHJvcHMoeyBpbmRleDogLTEgfSwgeyBzdXBwcmVzc1JlZkVycm9yOiB0cnVlIH0pO1xuXG4gIGNvbnN0IHsgYXJpYVJlcXVpcmVkVGV4dCwgU2VhcmNoQmFySWQsIGFyaWFDdXJyZW50U3VnZ2VzdGlvbiB9ID0gYXJpYVByb3BzO1xuICBjb25zdCBhcmlhTGFiZWwgPSBhcmlhUmVxdWlyZWRUZXh0XG4gICAgLmNvbmNhdCgnICcpXG4gICAgLmNvbmNhdChTZWFyY2hCYXJJZClcbiAgICAuY29uY2F0KCcgJylcbiAgICAuY29uY2F0KGFyaWFDdXJyZW50U3VnZ2VzdGlvbik7XG4gIHJldHVybiAoXG4gICAgPFJlYWN0TW9kYWxcbiAgICAgIGlzT3Blbj17c3RhdGUucmVuZGVyTW9iaWxlfVxuICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ21vYmlsZS1tb2RhbCddfVxuICAgICAgb3ZlcmxheUNsYXNzTmFtZT17c3R5bGVzWydtb2JpbGUtbW9kYWwtb3ZlcmxheSddfVxuICAgICAgc2hvdWxkUmV0dXJuRm9jdXNBZnRlckNsb3NlPXtmYWxzZX1cbiAgICAgIHNob3VsZENsb3NlT25Fc2NcbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17c3R5bGVzWydtb2JpbGUtbW9kYWwtY29udGVudCddfVxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICctLWNvbG9yJzogY29sb3JzLnByaW1hcnksXG4gICAgICAgICAgJy0tYWNjZXNzaWJsZS1wcmltYXJ5LWNvbG9yJzogY29sb3JzLmFjY2Vzc2libGVQcmltYXJ5LFxuICAgICAgICAgICctLWhvdmVyLWNvbG9yJzogY29sb3JzLmhvdmVyLFxuICAgICAgICAgICctLWZvbnQtd2VpZ2h0LW1lZGl1bSc6IGZvbnRXZWlnaHRzLm1lZGl1bSxcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlc1snY29tYm9ib3gtY29udGFpbmVyJ119IGh0bWxGb3I9e2lucHV0SWR9PlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ2NvbWJvYm94LWljb24nXX1cbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgc2V0SGlnaGxpZ2h0ZWRJbmRleCgtMSk7XG4gICAgICAgICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ1RPR0dMRV9NRU5VJywgaXNNb2JpbGU6IHRydWUgfSk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgb25LZXlEb3duPXtlID0+IHtcbiAgICAgICAgICAgICAgaWYgKGlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudChlKSkge1xuICAgICAgICAgICAgICAgIHNldEhpZ2hsaWdodGVkSW5kZXgoLTEpO1xuICAgICAgICAgICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ1RPR0dMRV9NRU5VJywgaXNNb2JpbGU6IHRydWUgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBhcmlhLWxhYmVsPXt0KCdjYW5jZWwnLCB7IGxuZyB9KX1cbiAgICAgICAgICAgIHRhYkluZGV4PXswfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxJY29uIGltZz1cImFycm93XCIgY29sb3I9e2NvbG9ycy5wcmltYXJ5fSAvPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzWydyaWdodC1jb2x1bW4nXX0+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlc1snY29tYm9ib3gtbGFiZWwnXX1cbiAgICAgICAgICAgICAgaWQ9e2xhYmVsSWR9XG4gICAgICAgICAgICAgIHsuLi5nZXRMYWJlbFByb3BzKCl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHttb2JpbGVMYWJlbH1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17XG4gICAgICAgICAgICAgICAgaXNQT0lTZWFyY2goaWQpXG4gICAgICAgICAgICAgICAgICA/IHQoJ2FkZHJlc3MtcGxhY2Utb3ItYnVzaW5lc3MnLCB7IGxuZyB9KVxuICAgICAgICAgICAgICAgICAgOiBwbGFjZWhvbGRlclxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlkPXtpZH1cbiAgICAgICAgICAgICAgbG5nPXtsbmd9XG4gICAgICAgICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgICAgICAgZ2V0SW5wdXRQcm9wcz17Z2V0SW5wdXRQcm9wc31cbiAgICAgICAgICAgICAgZ2V0TGFiZWxQcm9wcz17Z2V0TGFiZWxQcm9wc31cbiAgICAgICAgICAgICAgY2xlYXJJbnB1dD17KCkgPT4gY2xlYXJJbnB1dChpbnB1dFJlZil9XG4gICAgICAgICAgICAgIGFyaWFMYWJlbD17YXJpYUxhYmVsfVxuICAgICAgICAgICAgICBpbnB1dFJlZj17aW5wdXRSZWZ9XG4gICAgICAgICAgICAgIHN0eWxlcz17c3R5bGVzfVxuICAgICAgICAgICAgICByZW5kZXJMYWJlbD17ZmFsc2V9XG4gICAgICAgICAgICAgIGNsZWFyQnV0dG9uQ29sb3I9e2NvbG9ycy5wcmltYXJ5fVxuICAgICAgICAgICAgICBhdXRvRm9jdXNcbiAgICAgICAgICAgICAgaW5wdXRDbGFzc05hbWU9e2lucHV0Q2xhc3NOYW1lfVxuICAgICAgICAgICAgICByZXF1aXJlZD17cmVxdWlyZWR9XG4gICAgICAgICAgICAgIGlzTW9iaWxlXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPFN1Z2dlc3Rpb25zXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb25zPXtzdGF0ZS5zdWdnZXN0aW9uc31cbiAgICAgICAgICAgICAgZ2V0TWVudVByb3BzPXtnZXRNZW51UHJvcHN9XG4gICAgICAgICAgICAgIGdldEl0ZW1Qcm9wcz17Z2V0SXRlbVByb3BzfVxuICAgICAgICAgICAgICBoaWdobGlnaHRlZEluZGV4PXtoaWdobGlnaHRlZEluZGV4fVxuICAgICAgICAgICAgICBpc09wZW4gLy8gd2hlbiBtb2JpbGUgdmlldyBpcyBvcGVuIHdlIGFsd2F5cyB3YW50IHRvIHNob3cgc3VnZ2VzdGlvbnNcbiAgICAgICAgICAgICAgaGlkZGVuPXtmYWxzZX1cbiAgICAgICAgICAgICAgbG5nPXtsbmd9XG4gICAgICAgICAgICAgIHN0eWxlcz17c3R5bGVzfVxuICAgICAgICAgICAgICByZW5kZXJDbGVhckhpc3RvcnlCdXR0b25cbiAgICAgICAgICAgICAgaGFuZGxlQ2xlYXJIaXN0b3J5PXsoKSA9PiBzZXREaWFsb2dPcGVuKHRydWUpfVxuICAgICAgICAgICAgICB7Li4uc3VnZ2VzdGlvblByb3BzfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8RGlhbG9nTW9kYWxcbiAgICAgICAgICBhcHBFbGVtZW50PXthcHBFbGVtZW50fVxuICAgICAgICAgIGlzTW9kYWxPcGVuPXtpc0RpYWxvZ09wZW59XG4gICAgICAgICAgaGFuZGxlQ2xvc2U9eygpID0+IHNldERpYWxvZ09wZW4oZmFsc2UpfVxuICAgICAgICAgIGhlYWRlclRleHQ9e3QoJ2RlbGV0ZS1vbGQtc2VhcmNoZXMtaGVhZGVyJywgeyBsbmcgfSl9XG4gICAgICAgICAgcHJpbWFyeUJ1dHRvblRleHQ9e3QoJ2RlbGV0ZScsIHsgbG5nIH0pfVxuICAgICAgICAgIHNlY29uZGFyeUJ1dHRvblRleHQ9e3QoJ2NhbmNlbCcsIHsgbG5nIH0pfVxuICAgICAgICAgIHByaW1hcnlCdXR0b25PbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICBjbGVhck9sZFNlYXJjaGVzKCk7XG4gICAgICAgICAgICBzZXREaWFsb2dPcGVuKGZhbHNlKTtcbiAgICAgICAgICB9fVxuICAgICAgICAgIHNlY29uZGFyeUJ1dHRvbk9uQ2xpY2s9eygpID0+IHNldERpYWxvZ09wZW4oZmFsc2UpfVxuICAgICAgICAgIGNvbG9ycz17Y29sb3JzfVxuICAgICAgICAgIGZvbnRXZWlnaHRzPXtmb250V2VpZ2h0c31cbiAgICAgICAgICBsYW5nPXtsbmd9XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L1JlYWN0TW9kYWw+XG4gICk7XG59O1xuXG5Nb2JpbGVWaWV3LnByb3BUeXBlcyA9IHtcbiAgYXBwRWxlbWVudDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBpZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBjbGVhcklucHV0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBjbGVhck9sZFNlYXJjaGVzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBvblNlbGVjdGVkSXRlbUNoYW5nZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgdmFsdWU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgY29sb3JzOiBQcm9wVHlwZXMub2JqZWN0T2YoUHJvcFR5cGVzLnN0cmluZykuaXNSZXF1aXJlZCxcbiAgZm9udFdlaWdodHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgbWVkaXVtOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gIH0pLmlzUmVxdWlyZWQsXG4gIHN1Z2dlc3Rpb25Qcm9wczogUHJvcFR5cGVzLnNoYXBlKHt9KS5pc1JlcXVpcmVkLFxuICBhcmlhUHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYXJpYVJlcXVpcmVkVGV4dDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIFNlYXJjaEJhcklkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgYXJpYUN1cnJlbnRTdWdnZXN0aW9uOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIH0pLmlzUmVxdWlyZWQsXG4gIGlucHV0Q2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIG1vYmlsZUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBzaG93U2Nyb2xsOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBsbmc6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgc3RhdGU6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgc3VnZ2VzdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7fSkpLmlzUmVxdWlyZWQsXG4gICAgcmVuZGVyTW9iaWxlOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIGxvYWRpbmc6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIH0pLmlzUmVxdWlyZWQsXG4gIGRpc3BhdGNoOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgTW9iaWxlVmlldztcbiIsImV4cG9ydCBjb25zdCBzZWFyY2hSZWR1Y2VyID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgIGNhc2UgJ0lOUFVUX0NIQU5HRSc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgdmFsdWU6IGFjdGlvbi52YWx1ZSxcbiAgICAgIH07XG4gICAgY2FzZSAnRkVUQ0hfU1VHR0VTVElPTlMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGxvYWRpbmc6IGFjdGlvbi5sb2FkaW5nLFxuICAgICAgICBzdWdnZXN0aW9uczogYWN0aW9uLnN1Z2dlc3Rpb25zIHx8IHN0YXRlLnN1Z2dlc3Rpb25zLFxuICAgICAgfTtcbiAgICBjYXNlICdDTEVBUl9TVUdHRVNUSU9OUyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc3VnZ2VzdGlvbnM6IFtdLFxuICAgICAgfTtcbiAgICBjYXNlICdSRVNFVF9TT1VSQ0VTJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzb3VyY2VzOiBhY3Rpb24uc291cmNlcyxcbiAgICAgIH07XG4gICAgY2FzZSAnU0VUX1NPVVJDRVMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNob3dPd25QbGFjZXM6IGFjdGlvbi5zaG93T3duUGxhY2VzLFxuICAgICAgICBzb3VyY2VzOiBhY3Rpb24uc291cmNlcyxcbiAgICAgICAgcGVuZGluZ1NlbGVjdGlvbjogYWN0aW9uLnBlbmRpbmdTZWxlY3Rpb24sXG4gICAgICB9O1xuICAgIGNhc2UgJ0NMRUFSJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgIGlzQ2xlYXJlZDogdHJ1ZSxcbiAgICAgICAgc3VnZ2VzdGlvbnM6IFtdLFxuICAgICAgfTtcbiAgICBjYXNlICdJTlBVVF9CTFVSJzoge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHZhbHVlOiBhY3Rpb24udmFsdWUgfHwgc3RhdGUudmFsdWUsXG4gICAgICAgIGlzQ2xlYXJlZDogYWN0aW9uLmlzTW9iaWxlID8gZmFsc2UgOiBzdGF0ZS5pc0NsZWFyZWQsXG4gICAgICAgIHBlbmRpbmdTZWxlY3Rpb246IG51bGwsXG4gICAgICAgIHNob3dPd25QbGFjZXM6IGZhbHNlLFxuICAgICAgfTtcbiAgICB9XG4gICAgY2FzZSAnUkVTRVQnOiB7XG4gICAgICByZXR1cm4gYWN0aW9uLmluaXRpYWxTdGF0ZTtcbiAgICB9XG4gICAgY2FzZSAnUEVORElOR19FTlRFUic6IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBlbnRlclBlbmRpbmc6IGFjdGlvbi5lbnRlclBlbmRpbmcsXG4gICAgICB9O1xuICAgIH1cbiAgICBjYXNlICdUT0dHTEVfTUVOVSc6IHtcbiAgICAgIGlmIChhY3Rpb24uaXNNb2JpbGUpIHtcbiAgICAgICAgaWYgKCFzdGF0ZS5yZW5kZXJNb2JpbGUpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICByZW5kZXJNb2JpbGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogc3RhdGUuaXNDbGVhcmVkID8gJycgOiBzdGF0ZS52YWx1ZSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcmVuZGVyTW9iaWxlOiBmYWxzZSxcbiAgICAgICAgICBpc0NsZWFyZWQ6IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGlzTWVudU9wZW46ICFzdGF0ZS5pc01lbnVPcGVuLFxuICAgICAgICByZW5kZXJNb2JpbGU6IGFjdGlvbi5pc01vYmlsZSAmJiAhc3RhdGUucmVuZGVyTW9iaWxlLFxuICAgICAgfTtcbiAgICB9XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufTtcbiIsIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyAqL1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZUNhbGxiYWNrLCB1c2VSZWYsIHVzZVJlZHVjZXIgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBJMThuZXh0UHJvdmlkZXIsIHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCc7XG5pbXBvcnQgY3ggZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBleGVjdXRlU2VhcmNoIH0gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWV4ZWN1dGUtc2VhcmNoLWltbWlkaWF0ZSc7XG5pbXBvcnQgeyB1c2VDb21ib2JveCB9IGZyb20gJ2Rvd25zaGlmdCc7XG5pbXBvcnQgSWNvbiwge1xuICBkZWZhdWx0Q29sb3JzLFxufSBmcm9tICdAZGlnaXRyYW5zaXQtY29tcG9uZW50L2RpZ2l0cmFuc2l0LWNvbXBvbmVudC1pY29uJztcbmltcG9ydCBpMThuIGZyb20gJy4vdXRpbHMvaTE4bic7XG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vY29tcG9uZW50cy9zdHlsZXMuc2Nzcyc7XG5pbXBvcnQgeyBnZXRTdWdnZXN0aW9uVmFsdWUsIHN1Z2dlc3Rpb25Bc0FyaWFDb250ZW50IH0gZnJvbSAnLi91dGlscy91dGlscyc7XG5pbXBvcnQgTW9iaWxlVmlldyBmcm9tICcuL2NvbXBvbmVudHMvTW9iaWxlVmlldyc7XG5pbXBvcnQgeyBJbnB1dCB9IGZyb20gJy4vY29tcG9uZW50cy9JbnB1dCc7XG5pbXBvcnQgeyBTdWdnZXN0aW9ucyB9IGZyb20gJy4vY29tcG9uZW50cy9TdWdnZXN0aW9ucyc7XG5pbXBvcnQgeyBzZWFyY2hSZWR1Y2VyIH0gZnJvbSAnLi91dGlscy9zZWFyY2hSZWR1Y2VyJztcblxuY29uc3QgZ2V0QXJpYVByb3BzID0gKHtcbiAgaWQsXG4gIGFyaWFMYWJlbCxcbiAgbG5nLFxuICB0LFxuICBpc01vYmlsZSxcbiAgc3VnZ2VzdGlvbnMsXG4gIHZhbHVlLFxuICByZXF1aXJlZCxcbn0pID0+IHtcbiAgY29uc3QgYXJpYUJhcklkID0gaWQucmVwbGFjZSgnc2VhcmNoZmllbGQtJywgJycpO1xuICBjb25zdCBTZWFyY2hCYXJJZCA9XG4gICAgYXJpYUxhYmVsIHx8IHQoYXJpYUJhcklkLCB7IGxuZyB9KS5yZXBsYWNlKCdzZWFyY2hmaWVsZC0nLCAnJykuY29uY2F0KCcuJyk7IC8vIEZ1bGwgc3RvcCBtYWtlcyBzY3JlZW4gcmVhZGVyIHNwZWVjaCBjbGVhcmVyLlxuICBjb25zdCBhcmlhUmVxdWlyZWRUZXh0ID0gcmVxdWlyZWQgPyBgJHt0KCdyZXF1aXJlZCcsIHsgbG5nIH0pfS5gIDogJyc7XG4gIGNvbnN0IGFyaWFMYWJlbEluc3RydWN0aW9ucyA9IGlzTW9iaWxlXG4gICAgPyB0KCdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLW1vYmlsZScsIHsgbG5nIH0pXG4gICAgOiB0KCdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLWRlc2t0b3AnLCB7IGxuZyB9KTtcbiAgY29uc3QgbW92aW5nVG9EZXN0aW5hdGlvbkZpZWxkVGV4dCA9XG4gICAgaWQgPT09ICdvcmlnaW4nXG4gICAgICA/IHQoJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1tb3ZlLXRvLWRlc3RpbmF0aW9uJywgeyBsbmcgfSlcbiAgICAgIDogJyc7XG4gIGNvbnN0IGFyaWFMYWJlbFRleHQgPSBhcmlhTGFiZWxJbnN0cnVjdGlvbnNcbiAgICAuY29uY2F0KCcgJylcbiAgICAuY29uY2F0KG1vdmluZ1RvRGVzdGluYXRpb25GaWVsZFRleHQpO1xuXG4gIGNvbnN0IGFyaWFTdWdnZXN0aW9uTGVuID0gdCgnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbicsIHtcbiAgICBjb3VudDogc3VnZ2VzdGlvbnMubGVuZ3RoLFxuICAgIGxuZyxcbiAgfSk7XG5cbiAgY29uc3QgYXJpYUN1cnJlbnRTdWdnZXN0aW9uID1cbiAgICBzdWdnZXN0aW9uQXNBcmlhQ29udGVudCh7IHN1Z2dlc3Rpb25zLCB0LCBsbmcgfSkgfHwgdmFsdWVcbiAgICAgID8gdCgnc2VhcmNoLWN1cnJlbnQtc3VnZ2VzdGlvbicsIHtcbiAgICAgICAgICBsbmcsXG4gICAgICAgICAgc2VsZWN0aW9uOlxuICAgICAgICAgICAgc3VnZ2VzdGlvbkFzQXJpYUNvbnRlbnQoeyBzdWdnZXN0aW9ucywgdCwgbG5nIH0pLnRvTG93ZXJDYXNlKCkgfHxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICB9KVxuICAgICAgOiAnJztcblxuICByZXR1cm4ge1xuICAgIFNlYXJjaEJhcklkLFxuICAgIGFyaWFSZXF1aXJlZFRleHQsXG4gICAgYXJpYUxhYmVsVGV4dCxcbiAgICBhcmlhU3VnZ2VzdGlvbkxlbixcbiAgICBhcmlhQ3VycmVudFN1Z2dlc3Rpb24sXG4gIH07XG59O1xuXG5jb25zdCBwb3NpdGlvbnMgPSBbXG4gICdWYWxpdHR1IHNpamFpbnRpJyxcbiAgJ055a3lpbmVuIHNpamFpbnRpc2knLFxuICAnQ3VycmVudCBwb3NpdGlvbicsXG4gICdTZWxlY3RlZCBsb2NhdGlvbicsXG4gICdWYWxkIHBvc2l0aW9uJyxcbiAgJ0FudsOkbmQgbWluIHBvc2l0aW9uJyxcbiAgJ01pbiBwb3NpdGlvbicsXG4gICdLw6R5dMOkIG55a3lpc3TDpCBzaWphaW50aWEnLFxuICAnVXNlIGN1cnJlbnQgbG9jYXRpb24nLFxuICAnWW91ciBjdXJyZW50IGxvY2F0aW9uJyxcbiAgJ1d5YnJhbmUgbWllanNjZScsXG5dO1xuXG4vKipcbiAqIFRha2VzIHRoZSB0YXJnZXRzIGFuZCBtb2RpZmllcyB0aGVtIGJhc2VkIG9uIG93blBsYWNlcyBhbmQgaXNMb2NhdGlvblNlYXJjaFxuICogQHBhcmFtIHtvYmplY3R9IHByb3BzXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBwcm9wcy50YXJnZXRzXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHByb3BzLmlzTG9jYXRpb25TZWFyY2hcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gcHJvcHMuaXNNb2JpbGVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gcHJvcHMub3duUGxhY2VzXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBwcm9wcy5zb3VyY2VzXG4gKiBAcmV0dXJucyB7c3RyaW5nW119IG5ld1RhcmdldHNcbiAqL1xuY29uc3QgZ2V0TmV3VGFyZ2V0cyA9ICh7XG4gIHRhcmdldHMsXG4gIGlzTG9jYXRpb25TZWFyY2gsXG4gIGlzTW9iaWxlLFxuICBvd25QbGFjZXMsXG4gIHNvdXJjZXMsXG59KSA9PiB7XG4gIGNvbnN0IHVzZUFsbCA9ICF0YXJnZXRzPy5sZW5ndGg7XG4gIGxldCBuZXdUYXJnZXRzO1xuICBpZiAob3duUGxhY2VzKSB7XG4gICAgbmV3VGFyZ2V0cyA9IFsnTG9jYXRpb25zJ107XG4gICAgaWYgKHVzZUFsbCB8fCB0YXJnZXRzLmluY2x1ZGVzKCdTdG9wcycpKSB7XG4gICAgICBuZXdUYXJnZXRzLnB1c2goJ1N0b3BzJyk7XG4gICAgfVxuICAgIGlmICh1c2VBbGwgfHwgdGFyZ2V0cy5pbmNsdWRlcygnU3RhdGlvbnMnKSkge1xuICAgICAgbmV3VGFyZ2V0cy5wdXNoKCdTdGF0aW9ucycpO1xuICAgIH1cbiAgICBpZiAodXNlQWxsIHx8IHRhcmdldHMuaW5jbHVkZXMoJ1ZlaGljbGVSZW50YWxTdGF0aW9ucycpKSB7XG4gICAgICBuZXdUYXJnZXRzLnB1c2goJ1ZlaGljbGVSZW50YWxTdGF0aW9ucycpO1xuICAgIH1cbiAgfSBlbHNlIGlmICghdXNlQWxsKSB7XG4gICAgbmV3VGFyZ2V0cyA9IFsuLi50YXJnZXRzXTtcbiAgICAvLyBpbiBkZXNrdG9wLCBmYXZvcml0ZXMgYXJlIGFjY2Vzc2VkIHZpYSBzdWIgc2VhcmNoXG4gICAgaWYgKFxuICAgICAgaXNMb2NhdGlvblNlYXJjaCAmJlxuICAgICAgIWlzTW9iaWxlICYmXG4gICAgICAoIXNvdXJjZXMubGVuZ3RoIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0Zhdm91cml0ZScpKVxuICAgICkge1xuICAgICAgbmV3VGFyZ2V0cy5wdXNoKCdTZWxlY3RGcm9tT3duTG9jYXRpb25zJyk7XG4gICAgfVxuICB9XG4gIHJldHVybiBuZXdUYXJnZXRzO1xufTtcblxuLyoqXG4gKiBAZXhhbXBsZVxuICogY29uc3Qgc2VhcmNoQ29udGV4dCA9IHtcbiAqICAgaXNQZWxpYXNMb2NhdGlvbkF3YXJlOiBmYWxzZSAvLyB0cnVlIC8gZmFsc2UgZG9lcyBMZXQgUGVsaWFzIHN1Z2dlc3QgYmFzZWQgb24gY3VycmVudCB1c2VyIGxvY2F0aW9uXG4gKiAgIG1pbmltYWxSZWdleHA6IHVuZGVmaW5lZCAvLyB1c2VkIGZvciB0ZXN0aW5nIG1pbi4gcmVnZXhwLiBGb3IgZXhhbXBsZTogbmV3IFJlZ0V4cCgnLnsyLH0nKSxcbiAqICAgbGluZVJlZ2V4cDogdW5kZWZpbmVkIC8vICBpZGVudGlmeSBzZWFyY2hlcyBmb3Igcm91dGUgbnVtYmVycy9sYWJlbHM6IGJ1cyB8IHRyYWluIHwgbWV0cm8uIEZvciBleGFtcGxlOiBuZXcgUmVnRXhwKFxuICogICAgLy8gICAnKF5bMC05XStbYS16XT8kfF5beXVsZWFwaW5rcnRkel0kfChebVsxMl0/Yj8kKSknLFxuICogICAgLy8gICdpJyxcbiAqICAgIC8vICApLFxuICogICBVUkxfUEVMSUFTOiAnJyAvLyB1cmwgZm9yIHBlbGlhcyBzZWFyY2hlc1xuICogICBmZWVkSURzOiBbJ0hTTCcsICdIU0xMYXV0dGEnXSAvLyBGZWVkSWQncyBsaWtlICBbSFNMLCBIU0xMYXV0dGFdXG4gKiAgIGdlb2NvZGluZ1NvdXJjZXM6IFsnb2EnLCdvc20nLCdubHNmaSddICAvLyBzb3VyY2VzIGZvciBnZW9jb2RpbmdcbiAqICAgZ2VvY29kaW5nU2VhcmNoUGFyYW1zOyB7fSAgLy8gU2VhcmNocGFybWFzIGZybyBnZW9jb2RpbmdcbiAqICAgZ2V0RmF2b3VyaXRlTG9jYXRpb25zOiAoKSA9PiAoe30pLCAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgYXJyYXkgb2YgZmF2b3VyaXRlIGxvY2F0aW9ucy5cbiAqICAgZ2V0RmF2b3VyaXRlU3RvcHM6ICgpID0+ICh7fSksICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgYXJyYXkgb2YgZmF2b3VyaXRlIHN0b3BzLlxuICogICBnZXRMYW5ndWFnZTogKCkgPT4gKHt9KSwgICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBjdXJyZW50IGxhbmd1YWdlLlxuICogICBnZXRGYXZvdXJpdGVSb3V0ZXM6ICgpID0+ICh7fSksICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhcnJheSBvZiBmYXZvdXJpdGUgcm91dGVzLlxuICogICBnZXRQb3NpdGlvbnM6ICgpID0+ICh7fSksICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyB1c2VyJ3MgZ2VvbG9jYXRpb24uXG4gKiAgIGdldFJvdXRlc1F1ZXJ5OiAoKSA9PiAoe30pLCAgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIHF1ZXJ5IGZvciBmZXRjaGluZyByb3V0ZXMuXG4gKiAgIGdldFN0b3BBbmRTdGF0aW9uc1F1ZXJ5OiAoKSA9PiAoe30pLCAgLy8gRnVuY3Rpb24gdGhhdCBmZXRjaGVzIGZhdm91cml0ZSBzdG9wcyBhbmQgc3RhdGlvbnMgZnJvbSBncmFwaHFsIEFQSS5cbiAqICAgZ2V0RmF2b3VyaXRlUm91dGVzUXVlcnk6ICgpID0+ICh7fSksICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgcXVlcnkgZm9yIGZldGNoaW5nIGZhdm91cml0ZSByb3V0ZXMuXG4gKiAgIGdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uczogKCkgPT4gKHt9KSwgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBmYXZvdXJpdGUgYmlrZSByZW50YWwgc3RhdGlvbi5cbiAqICAgZ2V0RmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zUXVlcnk6ICgpID0+ICh7fSksIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBxdWVyeSBmb3IgZmV0Y2hpbmcgZmF2b3VyaXRlIGJpa2UgcmVudGFsIHN0YXRpb25zLlxuICogICBzdGFydExvY2F0aW9uV2F0Y2g6ICgpID0+ICh7fSksICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgbG9jYXRlcyB1c2VycyBnZW9sb2NhdGlvbi5cbiAqICAgc2F2ZVNlYXJjaDogKCkgPT4gKHt9KSwgICAgICAgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHNhdmVzIHNlYXJjaCB0byBvbGQgc2VhcmNoZXMgc3RvcmUuXG4gKiAgIGNsZWFyT2xkU2VhcmNoZXM6ICgpID0+ICh7fSksICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCBjbGVhcnMgb2xkIHNlYXJjaGVzIHN0b3JlLlxuICogICBnZXRGdXR1cmVSb3V0ZXM6ICgpID0+ICh7fSksICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJuIGZ1dHVyZSByb3V0ZXNcbiAqICAgc2F2ZUZ1dHVyZVJvdXRlOiAoKSA9PiAoe30pLCAgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHNhdmVzIGEgZnV0dXJlIHJvdXRlXG4gKiAgIGNsZWFyRnV0dXJlUm91dGVzOiAoKSA9PiAoe30pLCAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCBjbGVhcnMgZnV0dXJlIHJvdXRlc1xuICogfTtcbiAqIGNvbnN0IGxhbmcgPSAnZmknOyAvLyBlbiwgZmkgb3Igc3ZcbiAqIGNvbnN0IG9uU2VsZWN0ID0gKGl0ZW0sIGlkKSA9PiB7XG4gKiAgICAvLyBGdW50aW9uYWxpdHkgd2hlbiB1c2VyIHNlbGVjdHMgYSBzdWdnZXNpb25zLiBObyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGlzIGdpdmVuLlxuICogICAgcmV0dXJuIG51bGw7XG4gKiB9O1xuICogY29uc3Qgb25DbGVhciA9IGlkID0+IHtcbiAqICAgIC8vIENhbGxlZCAgd2hlbiB1c2VyIGNsaWNrcyB0aGUgY2xlYXIgc2VhcmNoIHN0cmluZyBidXR0b24uIE5vIGRlZmF1bHQgaW1wbGVtZW50YXRpb24uXG4gKiAgICByZXR1cm4gbnVsbDtcbiAqIH07XG4gKiBjb25zdCBnZXRBdXRvU3VnZ2VzdEljb25zOiB7XG4gKiAgIC8vIENhbGxlZCBmb3IgZXZlcnkgY2l0eSBiaWtlIHN0YXRpb24gcmVuZGVyZWQgYXMgYSBzZWFyY2ggc3VnZ2VzdGlvbi4gU2hvdWxkIHJldHVybiB0aGUgaWNvbiBhbmRcbiAqICAgLy8gY29sb3IgdXNlZCBmb3IgdGhhdCBzdGF0aW9uLiBUd28gaWNvbnMgYXJlIGF2YWlsYWJsZSwgJ2NpdHliaWtlLXN0b3AtZGlnaXRyYW5zaXQnIGFuZGl0eWJpa2Utc3RvcC1kaWdpdHJhbnNpdC1zZWNvbmRhcnknLlxuICogICBjaXR5YmlrZXM6IHN0YXRpb24gPT4ge1xuICogICAgICByZXR1cm4gWydjaXR5YmlrZS1zdG9wLWRpZ2l0cmFuc2l0JywgJyNmMmI2MmQnXTtcbiAqICAgfVxuICogfVxuICogY29uc3QgdHJhbnNwb3J0TW9kZSA9IHVuZGVmaW5lZDtcbiAqIGNvbnN0IHBsYWNlaG9sZGVyID0gXCJzdG9wLW5lYXIteW91XCI7XG4gKiBjb25zdCB0YXJnZXRzID0gWydMb2NhdGlvbnMnLCAnU3RvcHMnLCAnUm91dGVzJ107IC8vIERlZmluZXMgd2hhdCB5b3UgYXJlIHNlYXJjaGluZy4gT3B0aW9ucyBhcmUgTG9jYXRpb25zLCBTdG9wcywgU3RhdGlvbnMsIFJvdXRlcywgVmVoaWNsZVJlbnRhbFN0YXRpb25zLCBGdXR1cmVSb3V0ZXMsIE1hcFBvc2l0aW9uIGFuZCBDdXJyZW50UG9zaXRpb24uIExlYXZlIGVtcHR5IHRvIHNlYXJjaCBhbGwgdGFyZ2V0cy5cbiAqIGNvbnN0IHNvdXJjZXMgPSBbJ0Zhdm91cml0ZScsICdIaXN0b3J5JywgJ0RhdGFzb3VyY2UnXSAvLyBEZWZpbmVzIHdoZXJlIHlvdSBhcmUgc2VhcmNoaW5nLiBhbGwgYXZhaWxhYmxlIGFyZTogRmF2b3VyaXRlLCBIaXN0b3J5IChwcmV2aW91c2x5IHNlYXJjaGVkIHNlYXJjaGVzKSBhbmQgRGF0YXNvdXJjZS4gTGVhdmUgZW1wdHkgdG8gdXNlIGFsbCBzb3VyY2VzLlxuICogcmV0dXJuIChcbiAqICA8RFRBdXRvc3VnZ2VzdFxuICogICAgYXBwRWxlbWVudD17YXBwRWxlbWVudH0gLy8gUmVxdWlyZWQuIFJvb3QgZWxlbWVudCdzIGlkLiBOZWVkZWQgZm9yIHJlYWN0LW1vZGFsIGNvbXBvbmVudC5cbiAqICAgIHNlYXJjaENvbnRleHQ9e3NlYXJjaENvbnRleHR9XG4gKiAgICBpY29uPVwib3JpZ2luXCIgLy8gT3B0aW9uYWwgU3RyaW5nIGZvciBpY29uIHRoYXQgaXMgc2hvd24gbGVmdCBvZiBzZWFyY2hmaWVsZC4gdXNlZCB3aXRoIEljb24gbGlicmFyeVxuICogICAgaWQ9XCJvcmlnaW5cIiAvLyB1c2VkIGZvciBzdHlsZSBwcm9wcyBhbmQgaW5mbyBmb3IgY29tcG9uZW50LlxuICogICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfSAvLyBTdHJpbmcgdGhhdCBpcyBzaG93bnMgaW5pdGFsbHkgaW4gc2VhcmNoIGZpZWxkXG4gKiAgICB2YWx1ZT1cIlwiIC8vIGUuZy4gdXNlciB0eXBlZCBzdHJpbmcgdGhhdCBpcyBzaG93biBpbiBzZWFyY2ggZmllbGRcbiAqICAgIG9uU2VsZWN0PXtvblNlbGVjdH1cbiAqICAgIG9uQ2xlYXI9e29uQ2xlYXJ9XG4gKiAgICBsYW5nPXtsYW5nfVxuICogICAgZ2V0QXV0b1N1Z2dlc3RJY29ucz17Z2V0QXV0b1N1Z2dlc3RJY29uc31cbiAqICAgIHRyYW5zcG9ydE1vZGU9e3RyYW5zcG9ydE1vZGV9IC8vIHRyYW5zcG9ydG1vZGUgd2l0aCB3aGljaCB3ZSBmaWx0ZXIgdGhlIHJvdXRlcywgZS5nLiByb3V0ZS1CVVNcbiAqICAgIGdlb2NvZGluZ1NpemU9ezEwfSAvLyBkZWZpbmVzIGhvdyBtYW55IHN0b3BzIGFuZCBzdGF0aW9ucyB0byBmZXRjaCBmcm9tIGdlb2NvZGluZy4gVXNlZnVsIGlmIHlvdSB3YW50IHRvIGZpbHRlciB0aGUgcmVzdWx0cyBhbmQgc3RpbGwgZ2V0IGEgcmVhc29uYWJsZSBhbW91bnQgb2Ygc3VnZ2VzdGlvbnMuXG4gKiAgICBmaWx0ZXJSZXN1bHRzPXtyZXN1bHRzID0+IHJldHVybiByZXN1bHRzfSAvLyBPcHRpb25hbCBmaWx0ZXJpbmcgZnVuY3Rpb24gZm9yIHJvdXRlcyBhbmQgc3RvcHNcbiAqICAgIGhhbmRlbFZpYVBvaW50cz17KCkgPT4gcmV0dXJuIG51bGwgfSAvLyBPcHRpb25hbCBWaWEgcG9pbnQgaGFuZGxpbmcgbG9naWMuIFRoaXMgaXMgY3VycmVudGx5IG1hbmFnZWQgd2l0aCBEVEF1dG9zdWdnZXN0cGFuZWwgYnkgZGVmYXVsdCwgYnV0IGlmIERUQXV0b3N1Z2dlc3QgaXMgdXNlZCBzZXBlcmF0ZWxseSBvd24gaW1wbGVtZW50YXRpb24gbXVzdCBiZSBwcm92aWRlZC5cbiAqICAgIGZvY3VzQ2hhbmdlPXsoKSA9PiByZXR1cm4gbnVsbH0gLy8gV2hlbiBzdWdnZXN0aW9uIGlzIHNlbGVjdGVkLCBoYW5kbGUgY2hhbmdpbmcgZm9jdXMuIFRoaXMgaXMgY3VycmVudGx5IG1hbmFnZWQgd2l0aCBEVEF1dG9zdWdnZXN0cGFuZWwgYnkgZGVmYXVsdCwgYnV0IGlmIERUQXV0b3N1Z2dlc3QgaXMgdXNlZCBzZXBlcmF0ZWxseSBvd24gaW1wbGVtZW50YXRpb24gbXVzdCBiZSBwcm92aWRlZC5cbiAqICAgIHN0b3JlUmVmPXsoKSA9PiByZXR1cm4gbnVsbH0gLy8gRnVuY3Rpb25hbGl0eSB0byBzdG9yZSByZWZzLiBDdXJyZW5sdHkgbWFuYWdlZCB3aXRoIERUQXV0b3N1Z2dlc3RwYW5lbCBieSBkZWZhdWx0LCBidXQgaWYgRFRBdXRvc3VnZ2VzdCBpcyB1c2VkIHNlcGVyYXRlbGx5IG93biBpbXBsZW1lbnRhdGlvbiBtdXN0IGJlIHByb3ZpZGVkLlxuICogICAgc291cmNlcz17c291cmNlc31cbiAqICAgIHRhcmdldHM9e3RhcmdldHN9XG4gKiAgICBpc01vYmlsZSAgLy8gT3B0aW9uYWwuIERlZmF1bHRzIHRvIGZhbHNlLiBXaGV0aGVyIHRvIHVzZSBtb2JpbGUgc2VhcmNoLlxuICogICAgbW9iaWxlTGFiZWw9XCJDdXN0b20gbGFiZWxcIiAvLyBPcHRpb25hbC4gQ3VzdG9tIGxhYmVsIHRleHQgZm9yIGF1dG9zdWdnZXN0IGZpZWxkIG9uIG1vYmlsZS5cbiAqICAgIGlucHV0Q2xhc3NOYW1lPVwiXCIgLy8gT3B0aW9uYWwuIEN1c3RvbSBjbGFzc25hbWUgYXBwbGllZCB0byB0aGUgaW5wdXQgZWxlbWVudCBvZiB0aGUgY29tcG9uZW50IGZvciBwcm92aWRpbmcgQ1NTIHN0eWxlcy5cbiAqICAgIHRyYW5zbGF0ZWRQbGFjZWhvbGRlcj0gLy8gT3B0aW9uYWwuIEN1c3RvbiB0cmFuc2xhdGVkIHBsYWNlaG9sZGVyIHRleHQgZm9yIGF1dG9zdWdnZXN0IGZpZWxkLlxuICpcbiAqIEB0eXBlZGVmIERUQXV0b3N1Z2dlc3RQcm9wc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGFwcEVsZW1lbnRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpZFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHBsYWNlaG9sZGVyXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9ufSBvblNlbGVjdFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtpY29uXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFt2YWx1ZV1cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IFtvbkNsZWFyXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtsYW5nXVxuICogQHByb3BlcnR5IHtPYmplY3R9IFtnZXRBdXRvU3VnZ2VzdEljb25zXVxuICogQHByb3BlcnR5IHtmdW5jdGlvbn0gW2hhbmRsZVZpYVBvaW50c11cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IFtmb2N1c0NoYW5nZV1cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IFtzdG9yZVJlZl1cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2lzTW9iaWxlXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFttb2JpbGVMYWJlbF1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbaW5wdXRDbGFzc05hbWVdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3RyYW5zbGF0ZWRQbGFjZWhvbGRlcl1cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3JlcXVpcmVkXVxuICogQHByb3BlcnR5IHtPYmplY3R9IFtmb250V2VpZ2h0c11cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbY29sb3JzXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFttb2RlU2V0XVxuICogQHByb3BlcnR5IHtib29sZWFufSBbc2hvd1Njcm9sbF1cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2lzRW1iZWRkZWRdXG4gKiBHZW9jb2RpbmcgcmVsYXRlZCBwcm9wc1xuICogQHByb3BlcnR5IHtPYmplY3R9IHNlYXJjaENvbnRleHRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbdHJhbnNwb3J0TW9kZV1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFt0YXJnZXRzXVxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gW3NvdXJjZXNdXG4gKiBAcHJvcGVydHkge251bWJlcn0gW2dlb2NvZGluZ1NpemVdXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9ufSBbZmlsdGVyUmVzdWx0c11cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbcGF0aE9wdHNdXG4gKiBAcHJvcGVydHkge09iamVjdH0gW3JlZlBvaW50XVxuICogQHBhcmFtIHtEVEF1dG9zdWdnZXN0UHJvcHN9IHByb3BzXG4gKiBAcmV0dXJucyB7SlNYLkVsZW1lbnR9XG4gKi9cbmZ1bmN0aW9uIERUQXV0b3N1Z2dlc3Qoe1xuICBhcHBFbGVtZW50LFxuICBpZCxcbiAgcGxhY2Vob2xkZXIsXG4gIG9uU2VsZWN0LFxuICBpY29uLFxuICB2YWx1ZSxcbiAgb25DbGVhcixcbiAgbGFuZzogbG5nLFxuICBnZXRBdXRvU3VnZ2VzdEljb25zLFxuICBoYW5kbGVWaWFQb2ludHMsXG4gIGZvY3VzQ2hhbmdlLFxuICBzdG9yZVJlZixcbiAgaXNNb2JpbGUsXG4gIG1vYmlsZUxhYmVsLFxuICBpbnB1dENsYXNzTmFtZSxcbiAgdHJhbnNsYXRlZFBsYWNlaG9sZGVyLFxuICByZXF1aXJlZCxcbiAgYXJpYUxhYmVsLFxuICBmb250V2VpZ2h0cyxcbiAgY29sb3JzLFxuICBtb2RlU2V0LFxuICBzaG93U2Nyb2xsLFxuICBpc0VtYmVkZGVkLFxuICB0cmFuc3BvcnRNb2RlLFxuICB0YXJnZXRzLFxuICBzb3VyY2VzLFxuICBnZW9jb2RpbmdTaXplLFxuICBmaWx0ZXJSZXN1bHRzLFxuICBzZWFyY2hDb250ZXh0LFxuICBwYXRoT3B0cyxcbiAgcmVmUG9pbnQsXG59KSB7XG4gIGNvbnN0IFt0XSA9IHVzZVRyYW5zbGF0aW9uKCk7XG4gIGNvbnN0IGluaXRpYWxTdGF0ZSA9IHtcbiAgICBzdWdnZXN0aW9uczogW10sXG4gICAgbG9hZGluZzogZmFsc2UsXG4gICAgc291cmNlcyxcbiAgICBzaG93T3duUGxhY2VzOiBmYWxzZSxcbiAgICBwZW5kaW5nU2VsZWN0aW9uOiBudWxsLFxuICAgIGlzQ2xlYXJlZDogZmFsc2UsXG4gICAgcmVuZGVyTW9iaWxlOiBmYWxzZSxcbiAgICB2YWx1ZSxcbiAgICBlbnRlclBlbmRpbmc6IGZhbHNlLFxuICAgIGlzTWVudU9wZW46IGZhbHNlLFxuICB9O1xuICBjb25zdCBbc3RhdGUsIGRpc3BhdGNoXSA9IHVzZVJlZHVjZXIoc2VhcmNoUmVkdWNlciwgaW5pdGlhbFN0YXRlKTtcbiAgLy8gUmVzZXQgdGhlIHN0YXRlIHdoZW4gdmFsdWUgb3Igc291cmNlcyBjaGFuZ2UsIHRoaXMgYWxzbyB0cmlnZ2VycyBhIG5ldyBzZWFyY2hcbiAgdXNlRWZmZWN0KCgpID0+IGRpc3BhdGNoKHsgdHlwZTogJ1JFU0VUJywgaW5pdGlhbFN0YXRlIH0pLCBbdmFsdWVdKTtcbiAgdXNlRWZmZWN0KCgpID0+IGRpc3BhdGNoKHsgdHlwZTogJ1JFU0VUX1NPVVJDRVMnLCBzb3VyY2VzIH0pLCBbc291cmNlc10pO1xuICAvLyBjcmVhdGUgYW5kIHN0b3JlIGlucHV0IHJlZiBpbiB0aGUgcGFyZW50IGlmIHN0b3JlUmVmIGlzIHByb3ZpZGVkXG4gIGNvbnN0IGlucHV0UmVmID0gdXNlUmVmKGlkKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoc3RvcmVSZWYpIHtcbiAgICAgIHN0b3JlUmVmKGlucHV0UmVmLmN1cnJlbnQpO1xuICAgIH1cbiAgfSwgW2lucHV0UmVmLmN1cnJlbnRdKTtcblxuICBjb25zdCBmZXRjaFN1Z2dlc3Rpb25zID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IHVzZUFsbCA9ICF0YXJnZXRzPy5sZW5ndGg7XG4gICAgY29uc3QgaXNMb2NhdGlvblNlYXJjaCA9IHVzZUFsbCB8fCB0YXJnZXRzLmluY2x1ZGVzKCdMb2NhdGlvbnMnKTtcblxuICAgIGNvbnN0IG5ld1RhcmdldHMgPSBnZXROZXdUYXJnZXRzKHtcbiAgICAgIHRhcmdldHMsXG4gICAgICBpc0xvY2F0aW9uU2VhcmNoLFxuICAgICAgaXNNb2JpbGUsXG4gICAgICBvd25QbGFjZXM6IHN0YXRlLnNob3dPd25QbGFjZXMsXG4gICAgICBzb3VyY2VzOiBzdGF0ZS5zb3VyY2VzLFxuICAgIH0pO1xuICAgIC8vIHJlbW92ZSAgbG9jYXRpb24gZmF2b3VyaXRlcyBpbiBkZXNrdG9wIHNlYXJjaCAoY29sbGVjdGlvbiBpdGVtIHJlcGxhY2VzIGl0IGluIHRhcmdldCBhcnJheSlcbiAgICBjb25zdCBuZXdTb3VyY2VzID0gc3RhdGUuc291cmNlc1xuICAgICAgPyBzdGF0ZS5zb3VyY2VzLmZpbHRlcihcbiAgICAgICAgICBzID0+XG4gICAgICAgICAgICAhaXNMb2NhdGlvblNlYXJjaCB8fFxuICAgICAgICAgICAgIXMgPT09ICdGYXZvdXJpdGUnIHx8XG4gICAgICAgICAgICBzdGF0ZS5zaG93T3duUGxhY2VzIHx8XG4gICAgICAgICAgICBpc01vYmlsZSxcbiAgICAgICAgKVxuICAgICAgOiBzdGF0ZS5zb3VyY2VzO1xuICAgIGV4ZWN1dGVTZWFyY2goXG4gICAgICBuZXdUYXJnZXRzLFxuICAgICAgbmV3U291cmNlcyxcbiAgICAgIHRyYW5zcG9ydE1vZGUsXG4gICAgICBzZWFyY2hDb250ZXh0LFxuICAgICAgZmlsdGVyUmVzdWx0cyxcbiAgICAgIGdlb2NvZGluZ1NpemUsXG4gICAgICB7XG4gICAgICAgIGlucHV0OiBzdGF0ZS52YWx1ZSB8fCAnJyxcbiAgICAgIH0sXG4gICAgICBzZWFyY2hSZXN1bHQgPT4ge1xuICAgICAgICBpZiAoc2VhcmNoUmVzdWx0ID09IG51bGwpIHtcbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAnRkVUQ0hfU1VHR0VTVElPTlMnLFxuICAgICAgICAgICAgbG9hZGluZzogdHJ1ZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXdTdWdnZXN0aW9ucyA9IChzZWFyY2hSZXN1bHQucmVzdWx0cyB8fCBbXSlcbiAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgc3VnZ2VzdGlvbiA9PlxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLnR5cGUgIT09ICdGdXR1cmVSb3V0ZScgfHxcbiAgICAgICAgICAgICAgKHN1Z2dlc3Rpb24udHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJyAmJlxuICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24ucHJvcGVydGllcy50aW1lID4gRGF0ZS5ub3coKSAvIDEwMDApLFxuICAgICAgICAgIClcbiAgICAgICAgICAubWFwKHN1Z2dlc3Rpb24gPT4ge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLnR5cGUgPT09ICdDdXJyZW50TG9jYXRpb24nIHx8XG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24udHlwZSA9PT0gJ1NlbGVjdEZyb21NYXAnIHx8XG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24udHlwZSA9PT0gJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnIHx8XG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24udHlwZSA9PT0gJ2JhY2snXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgY29uc3QgdHJhbnNsYXRlZFN1Z2dlc3Rpb24gPSB7IC4uLnN1Z2dlc3Rpb24gfTtcbiAgICAgICAgICAgICAgdHJhbnNsYXRlZFN1Z2dlc3Rpb24ucHJvcGVydGllcy5sYWJlbElkID0gdChcbiAgICAgICAgICAgICAgICBzdWdnZXN0aW9uLnByb3BlcnRpZXMubGFiZWxJZCxcbiAgICAgICAgICAgICAgICB7IGxuZyB9LFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICByZXR1cm4gdHJhbnNsYXRlZFN1Z2dlc3Rpb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc3VnZ2VzdGlvbjtcbiAgICAgICAgICB9KTtcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6ICdGRVRDSF9TVUdHRVNUSU9OUycsXG4gICAgICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgc3VnZ2VzdGlvbnM6IG5ld1N1Z2dlc3Rpb25zLFxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBwYXRoT3B0cyxcbiAgICAgIHJlZlBvaW50LFxuICAgICk7XG4gIH0sIFtcbiAgICBzdGF0ZS52YWx1ZSxcbiAgICBzdGF0ZS5zb3VyY2VzLFxuICAgIHN0YXRlLnNob3dPd25QbGFjZXMsXG4gICAgdGFyZ2V0cyxcbiAgICB0cmFuc3BvcnRNb2RlLFxuICAgIHNlYXJjaENvbnRleHQsXG4gICAgZmlsdGVyUmVzdWx0cyxcbiAgICBnZW9jb2RpbmdTaXplLFxuICAgIGlzTW9iaWxlLFxuICAgIGxuZyxcbiAgICBwYXRoT3B0cyxcbiAgICByZWZQb2ludCxcbiAgICBpZCxcbiAgXSk7XG5cbiAgY29uc3Qgc2VsZWN0U3VnZ2VzdGlvbiA9IHVzZUNhbGxiYWNrKFxuICAgIChzdWdnZXN0aW9uLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKCFzdWdnZXN0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChoYW5kbGVWaWFQb2ludHMpIHtcbiAgICAgICAgaGFuZGxlVmlhUG9pbnRzKHN1Z2dlc3Rpb24sIGluZGV4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9uU2VsZWN0KHN1Z2dlc3Rpb24sIGlkKTtcbiAgICAgIH1cbiAgICAgIGlmIChmb2N1c0NoYW5nZSAmJiAoIWlzTW9iaWxlIHx8IGlzRW1iZWRkZWQpKSB7XG4gICAgICAgIGZvY3VzQ2hhbmdlKCk7XG4gICAgICB9XG4gICAgICBpZiAoaW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgICBpbnB1dFJlZi5jdXJyZW50LmJsdXIoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtpc01vYmlsZV0sXG4gICk7XG5cbiAgY29uc3Qgb25TZWxlY3RlZEl0ZW1DaGFuZ2UgPSBjaGFuZ2VzID0+XG4gICAgc2VsZWN0U3VnZ2VzdGlvbihjaGFuZ2VzLnNlbGVjdGVkSXRlbSwgY2hhbmdlcy5oaWdobGlnaHRlZEluZGV4KTtcblxuICBjb25zdCB7XG4gICAgaXNPcGVuLFxuICAgIGhpZ2hsaWdodGVkSW5kZXgsXG4gICAgZ2V0TGFiZWxQcm9wcyxcbiAgICBnZXRNZW51UHJvcHMsXG4gICAgZ2V0SW5wdXRQcm9wcyxcbiAgICBnZXRJdGVtUHJvcHMsXG4gICAgc2VsZWN0SXRlbSxcbiAgICBvcGVuTWVudSxcbiAgICBjbG9zZU1lbnUsXG4gIH0gPSB1c2VDb21ib2JveCh7XG4gICAgaW5wdXRJZDogaWQsXG4gICAgaW5wdXRWYWx1ZTogc3RhdGUudmFsdWUsXG4gICAgZGVmYXVsdEhpZ2hsaWdodGVkSW5kZXg6IDAsXG4gICAgb25JbnB1dFZhbHVlQ2hhbmdlOiAoeyBpbnB1dFZhbHVlIH0pID0+XG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdJTlBVVF9DSEFOR0UnLCB2YWx1ZTogaW5wdXRWYWx1ZSB9KSxcbiAgICBzdGF0ZVJlZHVjZXI6IHVzZUNhbGxiYWNrKFxuICAgICAgKG9sZFN0YXRlLCB7IHR5cGUsIGNoYW5nZXMgfSkgPT4ge1xuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICBjYXNlIHVzZUNvbWJvYm94LnN0YXRlQ2hhbmdlVHlwZXMuSXRlbUNsaWNrOlxuICAgICAgICAgIGNhc2UgdXNlQ29tYm9ib3guc3RhdGVDaGFuZ2VUeXBlcy5JbnB1dEtleURvd25FbnRlcjoge1xuICAgICAgICAgICAgLy8gc2V0Q2xlYXJlZChmYWxzZSk7XG4gICAgICAgICAgICAvLyBrZWVwIGVudGVyUHJlc3NlZFJlZiB0byBtYWtlIHNlbGVjdGlvbiB3aGVuIHN1Z2dlc3Rpb25zIGhhdmUgbG9hZGVkXG4gICAgICAgICAgICBpZiAoc3RhdGUubG9hZGluZykge1xuICAgICAgICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdQRU5ESU5HX0VOVEVSJywgZW50ZXJQZW5kaW5nOiB0cnVlIH0pO1xuICAgICAgICAgICAgICByZXR1cm4gb2xkU3RhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWNoYW5nZXMuc2VsZWN0ZWRJdGVtKSB7XG4gICAgICAgICAgICAgIHJldHVybiBjaGFuZ2VzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNoYW5nZXMuc2VsZWN0ZWRJdGVtLnR5cGUgPT09ICdTZWxlY3RGcm9tT3duTG9jYXRpb25zJykge1xuICAgICAgICAgICAgICAvLyBpZiBzZWxlY3RpbmcgZnJvbSBvd24gbG9jYXRpb25zLCBrZWVwIG1lbnUgb3BlbiBhbmQga2VlcCBvbGQgc3RhdGVcbiAgICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgIHR5cGU6ICdTRVRfU09VUkNFUycsXG4gICAgICAgICAgICAgICAgc291cmNlczogWydGYXZvdXJpdGUnLCAnQmFjayddLFxuICAgICAgICAgICAgICAgIHNob3dPd25QbGFjZXM6IHRydWUsXG4gICAgICAgICAgICAgICAgcGVuZGluZ1NlbGVjdGlvbjogY2hhbmdlcy5zZWxlY3RlZEl0ZW0udHlwZSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHJldHVybiBvbGRTdGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjaGFuZ2VzLnNlbGVjdGVkSXRlbS50eXBlID09PSAnYmFjaycpIHtcbiAgICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgIHR5cGU6ICdTRVRfU09VUkNFUycsXG4gICAgICAgICAgICAgICAgc291cmNlcyxcbiAgICAgICAgICAgICAgICBzaG93T3duUGxhY2VzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBwZW5kaW5nU2VsZWN0aW9uOiBudWxsLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcmV0dXJuIG9sZFN0YXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNoYW5nZXM7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgdXNlQ29tYm9ib3guc3RhdGVDaGFuZ2VUeXBlcy5JbnB1dENsaWNrOiB7XG4gICAgICAgICAgICAvLyBjbGVhciBpbnB1dCBpZiBjdXJyZW50IHBvc2l0aW9uIG9yIHNlbGVjdGVkIGxvY2F0aW9uIGlzIHNob3duXG4gICAgICAgICAgICBpZiAocG9zaXRpb25zLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgICAgICAgICByZXR1cm4geyAuLi5jaGFuZ2VzLCBpbnB1dFZhbHVlOiAnJywgaXNPcGVuOiB0cnVlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5jaGFuZ2VzLFxuICAgICAgICAgICAgICBpc09wZW46IHRydWUsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIHVzZUNvbWJvYm94LnN0YXRlQ2hhbmdlVHlwZXMuSW5wdXRCbHVyOiB7XG4gICAgICAgICAgICBpZiAoY2hhbmdlcy5zZWxlY3RlZEl0ZW0pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5jaGFuZ2VzLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkSXRlbTogb2xkU3RhdGUuc2VsZWN0SXRlbSxcbiAgICAgICAgICAgICAgICBpbnB1dFZhbHVlOiBvbGRTdGF0ZS5pbnB1dFZhbHVlLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNoYW5nZXM7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgdXNlQ29tYm9ib3guc3RhdGVDaGFuZ2VUeXBlcy5JbnB1dEtleURvd25Fc2NhcGU6IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLmNoYW5nZXMsXG4gICAgICAgICAgICAgIGlucHV0VmFsdWU6ICcnLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgcmV0dXJuIGNoYW5nZXM7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgW3N0YXRlLmxvYWRpbmcsIHZhbHVlLCBpc01vYmlsZV0sXG4gICAgKSxcbiAgICBpdGVtczogc3RhdGUuc3VnZ2VzdGlvbnMsXG4gICAgaXRlbVRvU3RyaW5nKHN1Z2dlc3Rpb24pIHtcbiAgICAgIHJldHVybiBzdWdnZXN0aW9uID8gZ2V0U3VnZ2VzdGlvblZhbHVlKHN1Z2dlc3Rpb24pIDogJyc7XG4gICAgfSxcbiAgICBvblNlbGVjdGVkSXRlbUNoYW5nZSxcbiAgICBvbklzT3BlbkNoYW5nZTogY2hhbmdlcyA9PiB7XG4gICAgICBpZiAoY2hhbmdlcy5pc09wZW4gJiYgIXN0YXRlLnJlbmRlck1vYmlsZSkge1xuICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdUT0dHTEVfTUVOVScsIGlzTW9iaWxlIH0pO1xuICAgICAgfVxuICAgIH0sXG4gIH0pO1xuICBjb25zdCBpbnB1dE9uQmx1ciA9ICgpID0+IHtcbiAgICBkaXNwYXRjaCh7XG4gICAgICBpc01vYmlsZSxcbiAgICAgIHZhbHVlOiAhaXNNb2JpbGUgJiYgdmFsdWUsXG4gICAgICB0eXBlOiAnSU5QVVRfQkxVUicsXG4gICAgfSk7XG4gICAgaWYgKCFpc01vYmlsZSkge1xuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiAnUkVTRVQnLFxuICAgICAgICBpbml0aWFsU3RhdGUsXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgY2xlYXJJbnB1dCA9IHJlZiA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnQ0xFQVInIH0pO1xuICAgIGlmIChvbkNsZWFyKSB7XG4gICAgICBvbkNsZWFyKGlkKTtcbiAgICB9XG4gICAgaWYgKHJlZi5jdXJyZW50KSB7XG4gICAgICByZWYuY3VycmVudC5mb2N1cygpO1xuICAgIH1cbiAgICBvcGVuTWVudSgpO1xuICB9O1xuXG4gIC8vIEZldGNoIHN1Z2dlc3Rpb25zIHdoZW4gaXNPcGVuLCB2YWx1ZSwgb3IgZmV0Y2hTdWdnZXN0aW9ucyBkZXBlbmRlbmNpZXMgY2hhbmdlXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gRG9uJ3Qgc2VhcmNoIHdoZW4gdGhlIHNlYXJjaCBmaWVsZCAoc3RhdGUudmFsdWUpIGNvbnRhaW5zIHBvc2l0aW9uIHN0cmluZ3MgdGhhdCB3ZXJlIGdpdmVuIGFzIGEgcHJvcCAodmFsdWUpLFxuICAgIC8vIGJlY2F1c2UgdGhleSBhcmUgVUkgbGFiZWxzIG5vdCByZWFsIHNlYXJjaCB0ZXJtcy4gRmV0Y2hpbmcgc3VnZ2VzdGlvbnMgd2l0aCB0aGVtIGNhdXNlZCBhIHF1aWNrbHkgZmxhc2hpbmcgc2V0IG9mXG4gICAgLy8gaXJyZWxldmFudCByZXN1bHRzLCBlLmcuICdLw6R5dMOkIG55a3lpc3TDpCBzaWphaW50aWEnIC0+ICdDaXR5LWvDpHl0w6R2w6QnLlxuICAgIGlmIChcbiAgICAgIChpc09wZW4gfHwgc3RhdGUucmVuZGVyTW9iaWxlKSAmJlxuICAgICAgIShzdGF0ZS52YWx1ZSA9PT0gdmFsdWUgJiYgcG9zaXRpb25zLmluY2x1ZGVzKHZhbHVlKSlcbiAgICApIHtcbiAgICAgIGZldGNoU3VnZ2VzdGlvbnMoc3RhdGUudmFsdWUpO1xuICAgIH1cbiAgfSwgW2lzT3Blbiwgc3RhdGUucmVuZGVyTW9iaWxlLCBzdGF0ZS52YWx1ZSwgZmV0Y2hTdWdnZXN0aW9uc10pO1xuXG4gIC8vIHRoaXMgZWZmZWN0IGhhbmRsZXMgc2VsZWN0aW5nIHRoZSBzdWdnZXN0aW9uIHdoZW4gZW50ZXIgd2FzIHByZXNzZWQgYnV0IHN1Z2dlc3Rpb25zIHdlcmUgc3RpbGwgbG9hZGluZ1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzdGF0ZS5lbnRlclBlbmRpbmcgJiYgIXN0YXRlLmxvYWRpbmcpIHtcbiAgICAgIHNlbGVjdFN1Z2dlc3Rpb24oc3RhdGUuc3VnZ2VzdGlvbnNbMF0sIDApO1xuICAgICAgY2xvc2VNZW51KCk7XG4gICAgfVxuICB9LCBbc3RhdGUubG9hZGluZywgc3RhdGUucGVuZGluZ0VudGVyLCBzdGF0ZS5zdWdnZXN0aW9uc10pO1xuXG4gIGNvbnN0IGJhc2VJdGVtUHJvcHMgPSB7XG4gICAgbG9hZGluZzogc3RhdGUubG9hZGluZyxcbiAgICBpc01vYmlsZSxcbiAgICBhcmlhRmF2b3VyaXRlU3RyaW5nOiB0KCdmYXZvdXJpdGUnLCB7IGxuZyB9KSxcbiAgICBmb250V2VpZ2h0cyxcbiAgICBnZXRBdXRvU3VnZ2VzdEljb25zLFxuICAgIGNvbG9ycyxcbiAgICBtb2RlU2V0LFxuICB9O1xuXG4gIGNvbnN0IHtcbiAgICBhcmlhQ3VycmVudFN1Z2dlc3Rpb24sXG4gICAgYXJpYVJlcXVpcmVkVGV4dCxcbiAgICBTZWFyY2hCYXJJZCxcbiAgICBhcmlhTGFiZWxUZXh0LFxuICB9ID0gZ2V0QXJpYVByb3BzKHtcbiAgICBpZCxcbiAgICBsbmcsXG4gICAgdCxcbiAgICBpc01vYmlsZSxcbiAgICBhcmlhTGFiZWwsXG4gICAgc3VnZ2VzdGlvbnM6IHN0YXRlLnN1Z2dlc3Rpb25zLFxuICAgIHZhbHVlOiBzdGF0ZS52YWx1ZSxcbiAgICByZXF1aXJlZCxcbiAgfSk7XG5cbiAgY29uc3QgbW9iaWxlQ2xlYXJPbGRTZWFyY2hlcyA9ICgpID0+IHtcbiAgICBjb25zdCB7IGNvbnRleHQsIGNsZWFyT2xkU2VhcmNoZXMsIGNsZWFyRnV0dXJlUm91dGVzIH0gPSBzZWFyY2hDb250ZXh0O1xuICAgIGlmIChjb250ZXh0ICYmIGNsZWFyT2xkU2VhcmNoZXMpIHtcbiAgICAgIGNsZWFyT2xkU2VhcmNoZXMoY29udGV4dCk7XG4gICAgICBpZiAoY2xlYXJGdXR1cmVSb3V0ZXMpIHtcbiAgICAgICAgY2xlYXJGdXR1cmVSb3V0ZXMoY29udGV4dCk7XG4gICAgICB9XG4gICAgICBmZXRjaFN1Z2dlc3Rpb25zKHN0YXRlLnZhbHVlKTtcbiAgICB9XG4gIH07XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIXN0YXRlLnJlbmRlck1vYmlsZSAmJiAhaXNPcGVuKSB7XG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdSRVNFVCcsIGluaXRpYWxTdGF0ZSB9KTtcbiAgICB9XG4gIH0sIFtzdGF0ZS5yZW5kZXJNb2JpbGUsIGlzT3Blbl0pO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHtpc01vYmlsZSAmJiAoXG4gICAgICAgIDxNb2JpbGVWaWV3XG4gICAgICAgICAgcGxhY2Vob2xkZXI9e3QocGxhY2Vob2xkZXIsIHsgbG5nIH0pfVxuICAgICAgICAgIGZvbnRXZWlnaHRzPXtmb250V2VpZ2h0c31cbiAgICAgICAgICBjbGVhck9sZFNlYXJjaGVzPXttb2JpbGVDbGVhck9sZFNlYXJjaGVzfVxuICAgICAgICAgIGFwcEVsZW1lbnQ9e2FwcEVsZW1lbnR9XG4gICAgICAgICAgbW9iaWxlTGFiZWw9e21vYmlsZUxhYmVsIHx8IHQoaWQsIHsgbG5nIH0pfVxuICAgICAgICAgIGFyaWFQcm9wcz17e1xuICAgICAgICAgICAgYXJpYUN1cnJlbnRTdWdnZXN0aW9uLFxuICAgICAgICAgICAgU2VhcmNoQmFySWQsXG4gICAgICAgICAgICBhcmlhUmVxdWlyZWRUZXh0LFxuICAgICAgICAgIH19XG4gICAgICAgICAgaWQ9e2lkfVxuICAgICAgICAgIGxuZz17bG5nfVxuICAgICAgICAgIG9uU2VsZWN0ZWRJdGVtQ2hhbmdlPXtvblNlbGVjdGVkSXRlbUNoYW5nZX1cbiAgICAgICAgICB2YWx1ZT17c3RhdGUudmFsdWV9XG4gICAgICAgICAgY2xlYXJJbnB1dD17Y2xlYXJJbnB1dH1cbiAgICAgICAgICBzdWdnZXN0aW9uUHJvcHM9e2Jhc2VJdGVtUHJvcHN9XG4gICAgICAgICAgc2hvd1Njcm9sbD17ISFzaG93U2Nyb2xsfVxuICAgICAgICAgIGNvbG9ycz17Y29sb3JzfVxuICAgICAgICAgIGlucHV0Q2xhc3NOYW1lPXtpbnB1dENsYXNzTmFtZX1cbiAgICAgICAgICByZXF1aXJlZD17cmVxdWlyZWR9XG4gICAgICAgICAgc3RhdGU9e3N0YXRlfVxuICAgICAgICAgIGRpc3BhdGNoPXtkaXNwYXRjaH1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjeChbXG4gICAgICAgICAgc3R5bGVzWydhdXRvc3VnZ2VzdC1pbnB1dC1jb250YWluZXInXSxcbiAgICAgICAgICBzdHlsZXNbaWRdLFxuICAgICAgICAgIHN0YXRlLnJlbmRlck1vYmlsZSAmJiAnaGlkZGVuJyxcbiAgICAgICAgXSl9XG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgJy0tY29sb3InOiBjb2xvcnMucHJpbWFyeSxcbiAgICAgICAgICAnLS1ob3Zlci1jb2xvcic6IGNvbG9ycy5ob3ZlcixcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge2ljb24gJiYgKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y3goW1xuICAgICAgICAgICAgICBzdHlsZXNbJ2F1dG9zdWdnZXN0LWlucHV0LWljb24nXSxcbiAgICAgICAgICAgICAgc3R5bGVzW2lkXSxcbiAgICAgICAgICAgICAgaW5wdXRDbGFzc05hbWUgJiYgc3R5bGVzW2Ake2lucHV0Q2xhc3NOYW1lfS1pbnB1dC1pY29uYF0sXG4gICAgICAgICAgICBdKX1cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9e2FyaWFSZXF1aXJlZFRleHRcbiAgICAgICAgICAgICAgLmNvbmNhdCgnICcpXG4gICAgICAgICAgICAgIC5jb25jYXQoU2VhcmNoQmFySWQpXG4gICAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgICAuY29uY2F0KHQoJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbCcsIHsgbG5nIH0pKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8SWNvbiBpbWc9e2Ake2ljb259YH0gLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgICAgPElucHV0XG4gICAgICAgICAgaW5wdXRDbGFzc05hbWU9e2lucHV0Q2xhc3NOYW1lfVxuICAgICAgICAgIGFyaWFMYWJlbD17YXJpYUN1cnJlbnRTdWdnZXN0aW9uXG4gICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgIC5jb25jYXQoYXJpYVJlcXVpcmVkVGV4dClcbiAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgLmNvbmNhdChTZWFyY2hCYXJJZClcbiAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgLmNvbmNhdChhcmlhTGFiZWxUZXh0KX1cbiAgICAgICAgICBpZD17aWR9XG4gICAgICAgICAgbG5nPXtsbmd9XG4gICAgICAgICAgZ2V0SW5wdXRQcm9wcz17Z2V0SW5wdXRQcm9wc31cbiAgICAgICAgICBnZXRMYWJlbFByb3BzPXtnZXRMYWJlbFByb3BzfVxuICAgICAgICAgIHNlbGVjdEl0ZW09e3NlbGVjdEl0ZW19XG4gICAgICAgICAgdmFsdWU9e3N0YXRlLnZhbHVlfVxuICAgICAgICAgIGNsZWFySW5wdXQ9e2NsZWFySW5wdXR9XG4gICAgICAgICAgaW5wdXRSZWY9e2lucHV0UmVmfVxuICAgICAgICAgIHN0eWxlcz17c3R5bGVzfVxuICAgICAgICAgIGNsZWFyQnV0dG9uQ29sb3I9e2NvbG9ycy5wcmltYXJ5fVxuICAgICAgICAgIHBsYWNlaG9sZGVyPXt0cmFuc2xhdGVkUGxhY2Vob2xkZXIgfHwgdChwbGFjZWhvbGRlciwgeyBsbmcgfSl9XG4gICAgICAgICAgcmVxdWlyZWQ9e3JlcXVpcmVkfVxuICAgICAgICAgIHRyYW5zcG9ydE1vZGU9e3RyYW5zcG9ydE1vZGV9XG4gICAgICAgICAgaXNNb2JpbGU9e2lzTW9iaWxlfVxuICAgICAgICAgIGlucHV0T25CbHVyPXtpbnB1dE9uQmx1cn1cbiAgICAgICAgLz5cblxuICAgICAgICA8U3VnZ2VzdGlvbnNcbiAgICAgICAgICBoaWRkZW49eyFpc09wZW4gfHwgIXN0YXRlLnN1Z2dlc3Rpb25zLmxlbmd0aCB8fCBpc01vYmlsZX1cbiAgICAgICAgICBoaWdobGlnaHRlZEluZGV4PXtoaWdobGlnaHRlZEluZGV4fVxuICAgICAgICAgIGdldEl0ZW1Qcm9wcz17Z2V0SXRlbVByb3BzfVxuICAgICAgICAgIGdldE1lbnVQcm9wcz17Z2V0TWVudVByb3BzfVxuICAgICAgICAgIHN1Z2dlc3Rpb25zPXtzdGF0ZS5zdWdnZXN0aW9uc31cbiAgICAgICAgICBsbmc9e2xuZ31cbiAgICAgICAgICBzdHlsZXM9e3N0eWxlc31cbiAgICAgICAgICB7Li4uYmFzZUl0ZW1Qcm9wc31cbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvPlxuICApO1xufVxuXG5EVEF1dG9zdWdnZXN0LnByb3BUeXBlcyA9IHtcbiAgYXBwRWxlbWVudDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBpY29uOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBpZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICB0cmFuc2xhdGVkUGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB0cmFuc3BvcnRNb2RlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBnZW9jb2RpbmdTaXplOiBQcm9wVHlwZXMubnVtYmVyLFxuICBmaWx0ZXJSZXN1bHRzOiBQcm9wVHlwZXMuZnVuYyxcbiAgc2VhcmNoQ29udGV4dDogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBVUkxfUEVMSUFTOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgIGNvbnRleHQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgY2xlYXJPbGRTZWFyY2hlczogUHJvcFR5cGVzLmZ1bmMsXG4gICAgY2xlYXJGdXR1cmVSb3V0ZXM6IFByb3BUeXBlcy5mdW5jLFxuICB9KS5pc1JlcXVpcmVkLFxuICBzb3VyY2VzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc3RyaW5nKSxcbiAgdGFyZ2V0czogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZyksXG4gIGFyaWFMYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgb25TZWxlY3Q6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIG9uQ2xlYXI6IFByb3BUeXBlcy5mdW5jLFxuICBzdG9yZVJlZjogUHJvcFR5cGVzLmZ1bmMsXG4gIGhhbmRsZVZpYVBvaW50czogUHJvcFR5cGVzLmZ1bmMsXG4gIGZvY3VzQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgbGFuZzogUHJvcFR5cGVzLnN0cmluZyxcbiAgaXNNb2JpbGU6IFByb3BUeXBlcy5ib29sLFxuICBwYXRoT3B0czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICByb3V0ZXNQcmVmaXg6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgc3RvcHNQcmVmaXg6IFByb3BUeXBlcy5zdHJpbmcsXG4gIH0pLFxuICBtb2JpbGVMYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgcmVmUG9pbnQ6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYWRkcmVzczogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBsYXQ6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgbG9uOiBQcm9wVHlwZXMubnVtYmVyLFxuICB9KSxcbiAgaW5wdXRDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGZvbnRXZWlnaHRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIG1lZGl1bTogUHJvcFR5cGVzLm51bWJlcixcbiAgfSksXG4gIGNvbG9yczogUHJvcFR5cGVzLm9iamVjdE9mKFByb3BUeXBlcy5zdHJpbmcpLFxuICBnZXRBdXRvU3VnZ2VzdEljb25zOiBQcm9wVHlwZXMub2JqZWN0T2YoUHJvcFR5cGVzLmZ1bmMpLFxuICByZXF1aXJlZDogUHJvcFR5cGVzLmJvb2wsXG4gIG1vZGVTZXQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNob3dTY3JvbGw6IFByb3BUeXBlcy5ib29sLFxuICBpc0VtYmVkZGVkOiBQcm9wVHlwZXMuYm9vbCxcbn07XG5cbkRUQXV0b3N1Z2dlc3QuZGVmYXVsdFByb3BzID0ge1xuICBpY29uOiB1bmRlZmluZWQsXG4gIHZhbHVlOiAnJyxcbiAgdHJhbnNwb3J0TW9kZTogdW5kZWZpbmVkLFxuICBmaWx0ZXJSZXN1bHRzOiB1bmRlZmluZWQsXG4gIG9uQ2xlYXI6IHVuZGVmaW5lZCxcbiAgbGFuZzogJ2ZpJyxcbiAgc3RvcmVSZWY6IHVuZGVmaW5lZCxcbiAgaGFuZGxlVmlhUG9pbnRzOiB1bmRlZmluZWQsXG4gIGZvY3VzQ2hhbmdlOiB1bmRlZmluZWQsXG4gIGdldEF1dG9TdWdnZXN0SWNvbnM6IHVuZGVmaW5lZCxcbiAgc291cmNlczogW10sXG4gIHRhcmdldHM6IHVuZGVmaW5lZCxcbiAgaXNNb2JpbGU6IGZhbHNlLFxuICBpc0VtYmVkZGVkOiBmYWxzZSxcbiAgZ2VvY29kaW5nU2l6ZTogdW5kZWZpbmVkLFxuICBwYXRoT3B0czoge1xuICAgIHJvdXRlc1ByZWZpeDogJ2xpbmphdCcsXG4gICAgc3RvcHNQcmVmaXg6ICdweXNha2l0JyxcbiAgfSxcbiAgYXJpYUxhYmVsOiB1bmRlZmluZWQsXG4gIG1vYmlsZUxhYmVsOiB1bmRlZmluZWQsXG4gIGlucHV0Q2xhc3NOYW1lOiAnJyxcbiAgdHJhbnNsYXRlZFBsYWNlaG9sZGVyOiB1bmRlZmluZWQsXG4gIGZvbnRXZWlnaHRzOiB7XG4gICAgbWVkaXVtOiA1MDAsXG4gIH0sXG4gIGNvbG9yczogZGVmYXVsdENvbG9ycyxcbiAgcmVxdWlyZWQ6IGZhbHNlLFxuICBtb2RlU2V0OiB1bmRlZmluZWQsXG4gIHNob3dTY3JvbGw6IGZhbHNlLFxuICByZWZQb2ludDoge30sXG59O1xuXG5leHBvcnQgZGVmYXVsdCBwcm9wcyA9PiB7XG4gIHJldHVybiAoXG4gICAgPEkxOG5leHRQcm92aWRlciBpMThuPXtpMThufT5cbiAgICAgIDxEVEF1dG9zdWdnZXN0IHsuLi5wcm9wc30gLz5cbiAgICA8L0kxOG5leHRQcm92aWRlcj5cbiAgKTtcbn07XG4iXSwibmFtZXMiOlsiX3R5cGVvZiIsIm8iLCJTeW1ib2wiLCJpdGVyYXRvciIsImNvbnN0cnVjdG9yIiwicHJvdG90eXBlIiwidG9Qcm9wZXJ0eUtleSIsInQiLCJpIiwiciIsImUiLCJ0b1ByaW1pdGl2ZSIsImNhbGwiLCJUeXBlRXJyb3IiLCJTdHJpbmciLCJOdW1iZXIiLCJfZGVmaW5lUHJvcGVydHkiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwidHJ1RXEiLCJ2YWwxIiwidmFsMiIsImd0ZnNTdG9wTGF5ZXJzIiwidmVoaWNsZVJlbnRhbExheWVycyIsImxhYmVsSWRUb0dpZCIsImlkIiwicGFydHMiLCJzcGxpdCIsImxlbmd0aCIsImlzRHVwbGljYXRlIiwiaXRlbTEiLCJpdGVtMiIsInByb3BzMSIsInByb3BlcnRpZXMiLCJwcm9wczIiLCJ0eXBlIiwibzEiLCJvcmlnaW4iLCJkMSIsImRlc3RpbmF0aW9uIiwibzIiLCJkMiIsIm5hbWUiLCJsb2NhbGFkbWluIiwiaW5jbHVkZXMiLCJsYXllciIsImdpZCIsImxhYmVsSWQiLCJndGZzSWQiLCJwMSIsImdlb21ldHJ5IiwiY29vcmRpbmF0ZXMiLCJ1bmRlZmluZWQiLCJwMiIsIk1hdGgiLCJhYnMiLCJsYWJlbCIsImFkZHJlc3MiLCJub3JtYWxpemUiLCJzdHIiLCJpc1N0cmluZyIsInRvTG93ZXJDYXNlIiwic3BsaXRTaG9ydE5hbWVBdExldHRlcnMiLCJ0ZXN0U2hvcnROYW1lTWF0Y2hlc0xpbmVXaXRoTnVtYmVyc0FuZExldHRlcnMiLCJ0ZXN0IiwiTGF5ZXJUeXBlIiwiaXNTdG9wIiwiZ2V0TGF5ZXJSYW5rIiwic291cmNlIiwiaW5kZXhPZiIsInNvcnRTZWFyY2hSZXN1bHRzIiwibGluZVJlZ2V4cCIsInJlc3VsdHMiLCJ0ZXJtIiwiQXJyYXkiLCJpc0FycmF5IiwiaXNMaW5lSWRlbnRpZmllciIsIm5vcm1hbGl6ZWRUZXJtIiwiaXNMaW5lU2VhcmNoIiwib3JkZXJlZFJlc3VsdHMiLCJvcmRlckJ5IiwiZmlsdGVyIiwicmVzdWx0Iiwic2hvcnROYW1lIiwiY29uZmlkZW5jZSIsIm1hdGNoIiwicmVzdWx0UHJvcGVydGllcyIsIm1hcCIsImVsZW1lbnQiLCJub3JtYWxpemVkVmFsdWUiLCJyZWR1Y2UiLCJwcmV2aW91cyIsImN1cnJlbnQiLCJ1bmlxV2l0aCIsImdldFN0b3BOYW1lIiwic3RvcENvZGUiLCJsYXN0SW5kZXhPZiIsInN1YnN0cmluZyIsImZpbHRlck1hdGNoaW5nVG9JbnB1dCIsImxpc3QiLCJJbnB1dCIsImZpZWxkcyIsImlucHV0IiwidHJpbSIsIm11bHRpV29yZCIsIml0ZW0iLCJmb3JFYWNoIiwicE5hbWUiLCJnZXQiLCJzcGxpY2UiLCJqb2luIiwiY29uY2F0IiwicmVwbGFjZSIsImJpbmQiLCJmbiIsInRoaXNBcmciLCJhcHBseSIsImFyZ3VtZW50cyIsInRvU3RyaW5nIiwiZ2V0UHJvdG90eXBlT2YiLCJ0b1N0cmluZ1RhZyIsImtpbmRPZiIsImNhY2hlIiwiY3JlYXRlIiwidGhpbmciLCJzbGljZSIsImtpbmRPZlRlc3QiLCJ0eXBlT2ZUZXN0IiwiaXNVbmRlZmluZWQiLCJpc0J1ZmZlciIsInZhbCIsImlzRnVuY3Rpb24iLCJpc0FycmF5QnVmZmVyIiwiaXNOdW1iZXIiLCJpc09iamVjdCIsImlzUGxhaW5PYmplY3QiLCJpc0RhdGUiLCJpc0ZpbGUiLCJpc0Jsb2IiLCJpc0ZpbGVMaXN0IiwiRyIsImdsb2JhbFRoaXMiLCJzZWxmIiwid2luZG93IiwiZ2xvYmFsIiwiRm9ybURhdGFDdG9yIiwiRm9ybURhdGEiLCJpc1VSTFNlYXJjaFBhcmFtcyIsImlzUmVhZGFibGVTdHJlYW0iLCJpc1JlcXVlc3QiLCJpc1Jlc3BvbnNlIiwiaXNIZWFkZXJzIiwib2JqIiwiYWxsT3duS2V5cyIsImwiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImxlbiIsImtleSIsImZpbmRLZXkiLCJfa2V5IiwiX2dsb2JhbCIsImlzQ29udGV4dERlZmluZWQiLCJjb250ZXh0IiwiaXNUeXBlZEFycmF5IiwiVHlwZWRBcnJheSIsIlVpbnQ4QXJyYXkiLCJpc0hUTUxGb3JtIiwiaGFzT3duUHJvcGVydHkiLCJwcm9wIiwiaXNSZWdFeHAiLCJyZWR1Y2VEZXNjcmlwdG9ycyIsInJlZHVjZXIiLCJkZXNjcmlwdG9ycyIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJyZWR1Y2VkRGVzY3JpcHRvcnMiLCJkZXNjcmlwdG9yIiwicmV0IiwiZGVmaW5lUHJvcGVydGllcyIsImlzQXN5bmNGbiIsIl9zZXRJbW1lZGlhdGUiLCJzZXRJbW1lZGlhdGVTdXBwb3J0ZWQiLCJzZXRJbW1lZGlhdGUiLCJwb3N0TWVzc2FnZVN1cHBvcnRlZCIsInBvc3RNZXNzYWdlIiwidG9rZW4iLCJyYW5kb20iLCJjYWxsYmFja3MiLCJhZGRFdmVudExpc3RlbmVyIiwiZGF0YSIsInNoaWZ0IiwiY2IiLCJwdXNoIiwic2V0VGltZW91dCIsImFzYXAiLCJxdWV1ZU1pY3JvdGFzayIsInByb2Nlc3MiLCJuZXh0VGljayIsInV0aWxzJDMiLCJpc0Zvcm1EYXRhIiwia2luZCIsImFwcGVuZCIsImlzQXJyYXlCdWZmZXJWaWV3IiwiQXJyYXlCdWZmZXIiLCJpc1ZpZXciLCJidWZmZXIiLCJpc0Jvb2xlYW4iLCJpc0VtcHR5T2JqZWN0IiwiaXNSZWFjdE5hdGl2ZUJsb2IiLCJ1cmkiLCJpc1JlYWN0TmF0aXZlIiwiZm9ybURhdGEiLCJnZXRQYXJ0cyIsImlzU3RyZWFtIiwicGlwZSIsIm1lcmdlIiwiY2FzZWxlc3MiLCJza2lwVW5kZWZpbmVkIiwidGhpcyIsImFzc2lnblZhbHVlIiwidGFyZ2V0S2V5IiwiZXh0ZW5kIiwiYSIsImIiLCJzdHJpcEJPTSIsImNvbnRlbnQiLCJjaGFyQ29kZUF0IiwiaW5oZXJpdHMiLCJzdXBlckNvbnN0cnVjdG9yIiwicHJvcHMiLCJhc3NpZ24iLCJ0b0ZsYXRPYmplY3QiLCJzb3VyY2VPYmoiLCJkZXN0T2JqIiwicHJvcEZpbHRlciIsIm1lcmdlZCIsImVuZHNXaXRoIiwic2VhcmNoU3RyaW5nIiwicG9zaXRpb24iLCJsYXN0SW5kZXgiLCJ0b0FycmF5IiwiYXJyIiwiZm9yRWFjaEVudHJ5IiwiX2l0ZXJhdG9yIiwibmV4dCIsImRvbmUiLCJwYWlyIiwibWF0Y2hBbGwiLCJyZWdFeHAiLCJtYXRjaGVzIiwiZXhlYyIsImhhc093blByb3AiLCJmcmVlemVNZXRob2RzIiwic2V0IiwiRXJyb3IiLCJ0b09iamVjdFNldCIsImFycmF5T3JTdHJpbmciLCJkZWxpbWl0ZXIiLCJkZWZpbmUiLCJ0b0NhbWVsQ2FzZSIsIm0iLCJ0b1VwcGVyQ2FzZSIsIm5vb3AiLCJ0b0Zpbml0ZU51bWJlciIsImRlZmF1bHRWYWx1ZSIsImlzRmluaXRlIiwiaXNTcGVjQ29tcGxpYW50Rm9ybSIsInRvSlNPTk9iamVjdCIsInN0YWNrIiwidmlzaXQiLCJ0YXJnZXQiLCJyZWR1Y2VkVmFsdWUiLCJpc1RoZW5hYmxlIiwidGhlbiIsImNhdGNoIiwiaXNJdGVyYWJsZSIsIkF4aW9zRXJyb3IiLCJmcm9tIiwiZXJyb3IiLCJjb2RlIiwiY29uZmlnIiwicmVxdWVzdCIsInJlc3BvbnNlIiwiY3VzdG9tUHJvcHMiLCJheGlvc0Vycm9yIiwibWVzc2FnZSIsImNhdXNlIiwic3RhdHVzIiwic3VwZXIiLCJpc0F4aW9zRXJyb3IiLCJ0b0pTT04iLCJkZXNjcmlwdGlvbiIsIm51bWJlciIsImZpbGVOYW1lIiwibGluZU51bWJlciIsImNvbHVtbk51bWJlciIsInV0aWxzIiwiRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJFUlJfQkFEX09QVElPTiIsIkVDT05OQUJPUlRFRCIsIkVUSU1FRE9VVCIsIkVSUl9ORVRXT1JLIiwiRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUyIsIkVSUl9ERVBSRUNBVEVEIiwiRVJSX0JBRF9SRVNQT05TRSIsIkVSUl9CQURfUkVRVUVTVCIsIkVSUl9DQU5DRUxFRCIsIkVSUl9OT1RfU1VQUE9SVCIsIkVSUl9JTlZBTElEX1VSTCIsIkF4aW9zRXJyb3IkMyIsImlzVmlzaXRhYmxlIiwicmVtb3ZlQnJhY2tldHMiLCJyZW5kZXJLZXkiLCJwYXRoIiwiZG90cyIsInByZWRpY2F0ZXMiLCJ0b0Zvcm1EYXRhIiwib3B0aW9ucyIsIm1ldGFUb2tlbnMiLCJpbmRleGVzIiwib3B0aW9uIiwidmlzaXRvciIsImRlZmF1bHRWaXNpdG9yIiwidXNlQmxvYiIsIkJsb2IiLCJjb252ZXJ0VmFsdWUiLCJ0b0lTT1N0cmluZyIsIkJ1ZmZlciIsIkpTT04iLCJzdHJpbmdpZnkiLCJzb21lIiwiaXNGbGF0QXJyYXkiLCJlbCIsImluZGV4IiwiZXhwb3NlZEhlbHBlcnMiLCJidWlsZCIsInBvcCIsImVuY29kZSIsImNoYXJNYXAiLCJlbmNvZGVVUklDb21wb25lbnQiLCJBeGlvc1VSTFNlYXJjaFBhcmFtcyIsInBhcmFtcyIsIl9wYWlycyIsImJ1aWxkVVJMIiwidXJsIiwiX2VuY29kZSIsIl9vcHRpb25zIiwic2VyaWFsaXplIiwic2VyaWFsaXplRm4iLCJzZXJpYWxpemVkUGFyYW1zIiwiaGFzaG1hcmtJbmRleCIsInByb3RvdHlwZSQxIiwiZW5jb2RlciIsIkludGVyY2VwdG9yTWFuYWdlciQzIiwiaGFuZGxlcnMiLCJ1c2UiLCJmdWxmaWxsZWQiLCJyZWplY3RlZCIsInN5bmNocm9ub3VzIiwicnVuV2hlbiIsImVqZWN0IiwiY2xlYXIiLCJoIiwidHJhbnNpdGlvbmFsRGVmYXVsdHMkMSIsInNpbGVudEpTT05QYXJzaW5nIiwiZm9yY2VkSlNPTlBhcnNpbmciLCJjbGFyaWZ5VGltZW91dEVycm9yIiwibGVnYWN5SW50ZXJjZXB0b3JSZXFSZXNPcmRlcmluZyIsInBsYXRmb3JtJDMiLCJpc0Jyb3dzZXIiLCJjbGFzc2VzIiwiVVJMU2VhcmNoUGFyYW1zIiwicHJvdG9jb2xzIiwiaGFzQnJvd3NlckVudiIsImRvY3VtZW50IiwiX25hdmlnYXRvciIsIm5hdmlnYXRvciIsImhhc1N0YW5kYXJkQnJvd3NlckVudiIsInByb2R1Y3QiLCJoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYiLCJXb3JrZXJHbG9iYWxTY29wZSIsImltcG9ydFNjcmlwdHMiLCJsb2NhdGlvbiIsImhyZWYiLCJwbGF0Zm9ybSQyIiwicGxhdGZvcm0iLCJmb3JtRGF0YVRvSlNPTiIsImJ1aWxkUGF0aCIsImlzTnVtZXJpY0tleSIsImlzTGFzdCIsImFycmF5VG9PYmplY3QiLCJlbnRyaWVzIiwicGFyc2VQcm9wUGF0aCIsImRlZmF1bHRzIiwidHJhbnNpdGlvbmFsIiwidHJhbnNpdGlvbmFsRGVmYXVsdHMiLCJhZGFwdGVyIiwidHJhbnNmb3JtUmVxdWVzdCIsImhlYWRlcnMiLCJjb250ZW50VHlwZSIsImdldENvbnRlbnRUeXBlIiwiaGFzSlNPTkNvbnRlbnRUeXBlIiwiaXNPYmplY3RQYXlsb2FkIiwic2V0Q29udGVudFR5cGUiLCJoZWxwZXJzIiwiaXNOb2RlIiwidG9VUkxFbmNvZGVkRm9ybSIsImZvcm1TZXJpYWxpemVyIiwiX0Zvcm1EYXRhIiwiZW52IiwicmF3VmFsdWUiLCJwYXJzZXIiLCJwYXJzZSIsInN0cmluZ2lmeVNhZmVseSIsInRyYW5zZm9ybVJlc3BvbnNlIiwiSlNPTlJlcXVlc3RlZCIsInJlc3BvbnNlVHlwZSIsInN0cmljdEpTT05QYXJzaW5nIiwicGFyc2VSZXZpdmVyIiwidGltZW91dCIsInhzcmZDb29raWVOYW1lIiwieHNyZkhlYWRlck5hbWUiLCJtYXhDb250ZW50TGVuZ3RoIiwibWF4Qm9keUxlbmd0aCIsInZhbGlkYXRlU3RhdHVzIiwiY29tbW9uIiwiQWNjZXB0IiwibWV0aG9kIiwiZGVmYXVsdHMkMyIsImlnbm9yZUR1cGxpY2F0ZU9mIiwiJGludGVybmFscyIsImFzc2VydFZhbGlkSGVhZGVyVmFsdWUiLCJoZWFkZXIiLCJ2IiwiaXNWYWxpZEhlYWRlclZhbHVlIiwibm9ybWFsaXplSGVhZGVyIiwibm9ybWFsaXplVmFsdWUiLCJlbmQiLCJjaGFyQ29kZSIsInN0cmlwVHJhaWxpbmdDUkxGIiwibWF0Y2hIZWFkZXJWYWx1ZSIsImlzSGVhZGVyTmFtZUZpbHRlciIsIkF4aW9zSGVhZGVycyIsInZhbHVlT3JSZXdyaXRlIiwicmV3cml0ZSIsInNldEhlYWRlciIsIl92YWx1ZSIsIl9oZWFkZXIiLCJfcmV3cml0ZSIsImxIZWFkZXIiLCJzZXRIZWFkZXJzIiwicmF3SGVhZGVycyIsInBhcnNlZCIsImxpbmUiLCJwYXJzZUhlYWRlcnMiLCJkZXN0IiwiZW50cnkiLCJ0b2tlbnMiLCJ0b2tlbnNSRSIsInBhcnNlVG9rZW5zIiwiaGFzIiwibWF0Y2hlciIsImRlbGV0ZWQiLCJkZWxldGVIZWFkZXIiLCJmb3JtYXQiLCJub3JtYWxpemVkIiwidyIsImNoYXIiLCJmb3JtYXRIZWFkZXIiLCJ0YXJnZXRzIiwiYXNTdHJpbmdzIiwiZ2V0U2V0Q29va2llIiwiZmlyc3QiLCJjb21wdXRlZCIsImFjY2Vzc29yIiwiYWNjZXNzb3JzIiwiZGVmaW5lQWNjZXNzb3IiLCJhY2Nlc3Nvck5hbWUiLCJtZXRob2ROYW1lIiwiYXJnMSIsImFyZzIiLCJhcmczIiwiYnVpbGRBY2Nlc3NvcnMiLCJBeGlvc0hlYWRlcnMkMiIsIm1hcHBlZCIsImhlYWRlclZhbHVlIiwiQXhpb3NIZWFkZXJzJDMiLCJ0cmFuc2Zvcm1EYXRhIiwiZm5zIiwiaXNDYW5jZWwiLCJfX0NBTkNFTF9fIiwiQ2FuY2VsZWRFcnJvciQzIiwic2V0dGxlIiwicmVzb2x2ZSIsInJlamVjdCIsImZsb29yIiwicHJvZ3Jlc3NFdmVudFJlZHVjZXIiLCJsaXN0ZW5lciIsImlzRG93bmxvYWRTdHJlYW0iLCJmcmVxIiwiYnl0ZXNOb3RpZmllZCIsIl9zcGVlZG9tZXRlciIsInNhbXBsZXNDb3VudCIsIm1pbiIsImJ5dGVzIiwidGltZXN0YW1wcyIsImZpcnN0U2FtcGxlVFMiLCJoZWFkIiwidGFpbCIsImNodW5rTGVuZ3RoIiwibm93IiwiRGF0ZSIsInN0YXJ0ZWRBdCIsImJ5dGVzQ291bnQiLCJwYXNzZWQiLCJyb3VuZCIsInNwZWVkb21ldGVyIiwibGFzdEFyZ3MiLCJ0aW1lciIsInRpbWVzdGFtcCIsInRocmVzaG9sZCIsImludm9rZSIsImFyZ3MiLCJjbGVhclRpbWVvdXQiLCJ0aHJvdHRsZSIsImxvYWRlZCIsInRvdGFsIiwibGVuZ3RoQ29tcHV0YWJsZSIsInByb2dyZXNzQnl0ZXMiLCJyYXRlIiwicHJvZ3Jlc3MiLCJlc3RpbWF0ZWQiLCJldmVudCIsInByb2dyZXNzRXZlbnREZWNvcmF0b3IiLCJ0aHJvdHRsZWQiLCJhc3luY0RlY29yYXRvciIsImlzTVNJRSIsIlVSTCIsInByb3RvY29sIiwiaG9zdCIsInBvcnQiLCJ1c2VyQWdlbnQiLCJ3cml0ZSIsImV4cGlyZXMiLCJkb21haW4iLCJzZWN1cmUiLCJzYW1lU2l0ZSIsImNvb2tpZSIsInRvVVRDU3RyaW5nIiwicmVhZCIsIlJlZ0V4cCIsImRlY29kZVVSSUNvbXBvbmVudCIsInJlbW92ZSIsImJ1aWxkRnVsbFBhdGgiLCJiYXNlVVJMIiwicmVxdWVzdGVkVVJMIiwiYWxsb3dBYnNvbHV0ZVVybHMiLCJpc1JlbGF0aXZlVXJsIiwicmVsYXRpdmVVUkwiLCJjb21iaW5lVVJMcyIsImhlYWRlcnNUb09iamVjdCIsIm1lcmdlQ29uZmlnIiwiY29uZmlnMSIsImNvbmZpZzIiLCJnZXRNZXJnZWRWYWx1ZSIsIm1lcmdlRGVlcFByb3BlcnRpZXMiLCJ2YWx1ZUZyb21Db25maWcyIiwiZGVmYXVsdFRvQ29uZmlnMiIsIm1lcmdlRGlyZWN0S2V5cyIsIm1lcmdlTWFwIiwicGFyYW1zU2VyaWFsaXplciIsInRpbWVvdXRNZXNzYWdlIiwid2l0aENyZWRlbnRpYWxzIiwid2l0aFhTUkZUb2tlbiIsIm9uVXBsb2FkUHJvZ3Jlc3MiLCJvbkRvd25sb2FkUHJvZ3Jlc3MiLCJkZWNvbXByZXNzIiwiYmVmb3JlUmVkaXJlY3QiLCJ0cmFuc3BvcnQiLCJodHRwQWdlbnQiLCJodHRwc0FnZW50IiwiY2FuY2VsVG9rZW4iLCJzb2NrZXRQYXRoIiwicmVzcG9uc2VFbmNvZGluZyIsImNvbmZpZ1ZhbHVlIiwicmVzb2x2ZUNvbmZpZyQxIiwibmV3Q29uZmlnIiwiYXV0aCIsImJ0b2EiLCJ1c2VybmFtZSIsInBhc3N3b3JkIiwidW5lc2NhcGUiLCJnZXRIZWFkZXJzIiwiZm9ybUhlYWRlcnMiLCJhbGxvd2VkSGVhZGVycyIsImlzVVJMU2FtZU9yaWdpbiIsInhzcmZWYWx1ZSIsImNvb2tpZXMiLCJ4aHJBZGFwdGVyJDEiLCJYTUxIdHRwUmVxdWVzdCIsIlByb21pc2UiLCJfY29uZmlnIiwicmVzb2x2ZUNvbmZpZyIsInJlcXVlc3REYXRhIiwicmVxdWVzdEhlYWRlcnMiLCJvbkNhbmNlbGVkIiwidXBsb2FkVGhyb3R0bGVkIiwiZG93bmxvYWRUaHJvdHRsZWQiLCJmbHVzaFVwbG9hZCIsImZsdXNoRG93bmxvYWQiLCJ1bnN1YnNjcmliZSIsInNpZ25hbCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJvbmxvYWRlbmQiLCJyZXNwb25zZUhlYWRlcnMiLCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiLCJlcnIiLCJyZXNwb25zZVRleHQiLCJzdGF0dXNUZXh0Iiwib3BlbiIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlYWR5U3RhdGUiLCJyZXNwb25zZVVSTCIsIm9uYWJvcnQiLCJvbmVycm9yIiwibXNnIiwib250aW1lb3V0IiwidGltZW91dEVycm9yTWVzc2FnZSIsInNldFJlcXVlc3RIZWFkZXIiLCJ1cGxvYWQiLCJjYW5jZWwiLCJDYW5jZWxlZEVycm9yIiwiYWJvcnQiLCJzdWJzY3JpYmUiLCJhYm9ydGVkIiwicGFyc2VQcm90b2NvbCIsInNlbmQiLCJjb21wb3NlU2lnbmFscyQzIiwic2lnbmFscyIsIkJvb2xlYW4iLCJjb250cm9sbGVyIiwiQWJvcnRDb250cm9sbGVyIiwicmVhc29uIiwic3RyZWFtQ2h1bmsiLCJjaHVuayIsImNodW5rU2l6ZSIsImJ5dGVMZW5ndGgiLCJwb3MiLCJyZWFkU3RyZWFtIiwiYXN5bmMiLCJzdHJlYW0iLCJhc3luY0l0ZXJhdG9yIiwicmVhZGVyIiwiZ2V0UmVhZGVyIiwidHJhY2tTdHJlYW0iLCJvblByb2dyZXNzIiwib25GaW5pc2giLCJpdGVyYWJsZSIsInJlYWRCeXRlcyIsIl9vbkZpbmlzaCIsIlJlYWRhYmxlU3RyZWFtIiwicHVsbCIsImNsb3NlIiwibG9hZGVkQnl0ZXMiLCJlbnF1ZXVlIiwicmV0dXJuIiwiaGlnaFdhdGVyTWFyayIsImdsb2JhbEZldGNoQVBJIiwiUmVxdWVzdCIsIlJlc3BvbnNlIiwiVGV4dEVuY29kZXIiLCJmYWN0b3J5IiwiZmV0Y2giLCJlbnZGZXRjaCIsImlzRmV0Y2hTdXBwb3J0ZWQiLCJpc1JlcXVlc3RTdXBwb3J0ZWQiLCJpc1Jlc3BvbnNlU3VwcG9ydGVkIiwiaXNSZWFkYWJsZVN0cmVhbVN1cHBvcnRlZCIsImVuY29kZVRleHQiLCJhcnJheUJ1ZmZlciIsInN1cHBvcnRzUmVxdWVzdFN0cmVhbSIsImR1cGxleEFjY2Vzc2VkIiwiYm9keSIsImhhc0NvbnRlbnRUeXBlIiwiZHVwbGV4Iiwic3VwcG9ydHNSZXNwb25zZVN0cmVhbSIsInJlc29sdmVycyIsInJlcyIsInJlc29sdmVCb2R5TGVuZ3RoIiwiZ2V0Q29udGVudExlbmd0aCIsInNpemUiLCJfcmVxdWVzdCIsImdldEJvZHlMZW5ndGgiLCJmZXRjaE9wdGlvbnMiLCJfZmV0Y2giLCJjb21wb3NlZFNpZ25hbCIsImNvbXBvc2VTaWduYWxzIiwidG9BYm9ydFNpZ25hbCIsInJlcXVlc3RDb250ZW50TGVuZ3RoIiwiY29udGVudFR5cGVIZWFkZXIiLCJmbHVzaCIsImlzQ3JlZGVudGlhbHNTdXBwb3J0ZWQiLCJyZXNvbHZlZE9wdGlvbnMiLCJjcmVkZW50aWFscyIsImlzU3RyZWFtUmVzcG9uc2UiLCJyZXNwb25zZUNvbnRlbnRMZW5ndGgiLCJyZXNwb25zZURhdGEiLCJzZWVkQ2FjaGUiLCJNYXAiLCJnZXRGZXRjaCIsInNlZWRzIiwic2VlZCIsImdldEZldGNoJDEiLCJrbm93bkFkYXB0ZXJzIiwiaHR0cCIsInhociIsInhockFkYXB0ZXIiLCJmZXRjaEFkYXB0ZXIuZ2V0RmV0Y2giLCJyZW5kZXJSZWFzb24iLCJpc1Jlc29sdmVkSGFuZGxlIiwiYWRhcHRlcnMkMSIsImdldEFkYXB0ZXIiLCJhZGFwdGVycyIsIm5hbWVPckFkYXB0ZXIiLCJyZWplY3RlZFJlYXNvbnMiLCJyZWFzb25zIiwic3RhdGUiLCJzIiwidGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZCIsInRocm93SWZSZXF1ZXN0ZWQiLCJkaXNwYXRjaFJlcXVlc3QiLCJWRVJTSU9OIiwidmFsaWRhdG9ycyIsImRlcHJlY2F0ZWRXYXJuaW5ncyIsInZhbGlkYXRvcnMkMyIsInZhbGlkYXRvciIsInZlcnNpb24iLCJmb3JtYXRNZXNzYWdlIiwib3B0IiwiZGVzYyIsIm9wdHMiLCJjb25zb2xlIiwid2FybiIsInNwZWxsaW5nIiwiY29ycmVjdFNwZWxsaW5nIiwidmFsaWRhdG9yJDEiLCJhc3NlcnRPcHRpb25zIiwic2NoZW1hIiwiYWxsb3dVbmtub3duIiwiQXhpb3MiLCJpbnN0YW5jZUNvbmZpZyIsImludGVyY2VwdG9ycyIsIkludGVyY2VwdG9yTWFuYWdlciIsImNvbmZpZ09yVXJsIiwiZHVtbXkiLCJjYXB0dXJlU3RhY2tUcmFjZSIsImZpcnN0TmV3bGluZUluZGV4Iiwic2Vjb25kTmV3bGluZUluZGV4Iiwic3RhY2tXaXRob3V0VHdvVG9wTGluZXMiLCJib29sZWFuIiwiZnVuY3Rpb24iLCJiYXNlVXJsIiwid2l0aFhzcmZUb2tlbiIsImNvbnRleHRIZWFkZXJzIiwicmVxdWVzdEludGVyY2VwdG9yQ2hhaW4iLCJzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMiLCJpbnRlcmNlcHRvciIsInVuc2hpZnQiLCJyZXNwb25zZUludGVyY2VwdG9yQ2hhaW4iLCJwcm9taXNlIiwiY2hhaW4iLCJvbkZ1bGZpbGxlZCIsIm9uUmVqZWN0ZWQiLCJnZXRVcmkiLCJnZW5lcmF0ZUhUVFBNZXRob2QiLCJpc0Zvcm0iLCJBeGlvcyQzIiwiQ2FuY2VsVG9rZW4iLCJleGVjdXRvciIsInJlc29sdmVQcm9taXNlIiwiX2xpc3RlbmVycyIsIm9uZnVsZmlsbGVkIiwiX3Jlc29sdmUiLCJjIiwiQ2FuY2VsVG9rZW4kMyIsIkh0dHBTdGF0dXNDb2RlIiwiQ29udGludWUiLCJTd2l0Y2hpbmdQcm90b2NvbHMiLCJQcm9jZXNzaW5nIiwiRWFybHlIaW50cyIsIk9rIiwiQ3JlYXRlZCIsIkFjY2VwdGVkIiwiTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uIiwiTm9Db250ZW50IiwiUmVzZXRDb250ZW50IiwiUGFydGlhbENvbnRlbnQiLCJNdWx0aVN0YXR1cyIsIkFscmVhZHlSZXBvcnRlZCIsIkltVXNlZCIsIk11bHRpcGxlQ2hvaWNlcyIsIk1vdmVkUGVybWFuZW50bHkiLCJGb3VuZCIsIlNlZU90aGVyIiwiTm90TW9kaWZpZWQiLCJVc2VQcm94eSIsIlVudXNlZCIsIlRlbXBvcmFyeVJlZGlyZWN0IiwiUGVybWFuZW50UmVkaXJlY3QiLCJCYWRSZXF1ZXN0IiwiVW5hdXRob3JpemVkIiwiUGF5bWVudFJlcXVpcmVkIiwiRm9yYmlkZGVuIiwiTm90Rm91bmQiLCJNZXRob2ROb3RBbGxvd2VkIiwiTm90QWNjZXB0YWJsZSIsIlByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZCIsIlJlcXVlc3RUaW1lb3V0IiwiQ29uZmxpY3QiLCJHb25lIiwiTGVuZ3RoUmVxdWlyZWQiLCJQcmVjb25kaXRpb25GYWlsZWQiLCJQYXlsb2FkVG9vTGFyZ2UiLCJVcmlUb29Mb25nIiwiVW5zdXBwb3J0ZWRNZWRpYVR5cGUiLCJSYW5nZU5vdFNhdGlzZmlhYmxlIiwiRXhwZWN0YXRpb25GYWlsZWQiLCJJbUFUZWFwb3QiLCJNaXNkaXJlY3RlZFJlcXVlc3QiLCJVbnByb2Nlc3NhYmxlRW50aXR5IiwiTG9ja2VkIiwiRmFpbGVkRGVwZW5kZW5jeSIsIlRvb0Vhcmx5IiwiVXBncmFkZVJlcXVpcmVkIiwiUHJlY29uZGl0aW9uUmVxdWlyZWQiLCJUb29NYW55UmVxdWVzdHMiLCJSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2UiLCJVbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29ucyIsIkludGVybmFsU2VydmVyRXJyb3IiLCJOb3RJbXBsZW1lbnRlZCIsIkJhZEdhdGV3YXkiLCJTZXJ2aWNlVW5hdmFpbGFibGUiLCJHYXRld2F5VGltZW91dCIsIkh0dHBWZXJzaW9uTm90U3VwcG9ydGVkIiwiVmFyaWFudEFsc29OZWdvdGlhdGVzIiwiSW5zdWZmaWNpZW50U3RvcmFnZSIsIkxvb3BEZXRlY3RlZCIsIk5vdEV4dGVuZGVkIiwiTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQiLCJXZWJTZXJ2ZXJJc0Rvd24iLCJDb25uZWN0aW9uVGltZWRPdXQiLCJPcmlnaW5Jc1VucmVhY2hhYmxlIiwiVGltZW91dE9jY3VycmVkIiwiU3NsSGFuZHNoYWtlRmFpbGVkIiwiSW52YWxpZFNzbENlcnRpZmljYXRlIiwiSHR0cFN0YXR1c0NvZGUkMyIsImF4aW9zIiwiY3JlYXRlSW5zdGFuY2UiLCJkZWZhdWx0Q29uZmlnIiwiaW5zdGFuY2UiLCJDYW5jZWwiLCJhbGwiLCJwcm9taXNlcyIsInNwcmVhZCIsImNhbGxiYWNrIiwicGF5bG9hZCIsImF4aW9zJDIiLCJmb3JtVG9KU09OIiwiZGVmYXVsdCIsImF4aW9zJDMiLCJwcmVmaXgiLCJwIiwiayIsImdldEdlb2NvZGluZ1Jlc3VsdHMiLCJzZWFyY2hQYXJhbXMiLCJsYW5nIiwiZm9jdXNQb2ludCIsInNvdXJjZXMiLCJwZWxpYXNVcmwiLCJtaW5pbWFsUmVnZXhwIiwiZ2VvY29kaW5nTGF5ZXJzIiwidGV4dCIsIlBFTElBU19VUkwiLCJsYXllcnMiLCJlbmNvZGVVUkkiLCJzZWFyY2giLCJmZWF0dXJlcyIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwidXRpbHMkMSIsInByb3RvIiwib2JqcyIsImV4aXN0aW5nIiwic3ltYm9scyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImoiLCJzeW1ib2wiLCJfX3Byb3RvX18iLCJ2aXNpdGVkIiwiV2Vha1NldCIsImFkZCIsImRlbGV0ZSIsIklOVkFMSURfVU5JQ09ERV9IRUFERVJfVkFMVUVfQ0hBUlMiLCJJTlZBTElEX0JZVEVfU1RSSU5HX0hFQURFUl9WQUxVRV9DSEFSUyIsInNhbml0aXplVmFsdWUiLCJpbnZhbGlkQ2hhcnMiLCJzdGFydCIsInRyaW1TUG9ySFRBQiIsInRvQnl0ZVN0cmluZ0hlYWRlck9iamVjdCIsImJ5dGVTdHJpbmdIZWFkZXJzIiwic2FuaXRpemVCeXRlU3RyaW5nSGVhZGVyVmFsdWUiLCJzYW5pdGl6ZUhlYWRlclZhbHVlIiwiQXhpb3NIZWFkZXJzJDEiLCJyZWRhY3RDb25maWciLCJyZWRhY3RLZXlzIiwibG93ZXJLZXlzIiwiU2V0Iiwic2VlbiIsImhhc093bk9yUHJvdG90eXBlVG9KU09OIiwicmVkYWN0Iiwic2VyaWFsaXplZENvbmZpZyIsIkVDT05OUkVGVVNFRCIsIkVSUl9GT1JNX0RBVEFfREVQVEhfRVhDRUVERUQiLCJBeGlvc0Vycm9yJDEiLCJfQmxvYiIsIm1heERlcHRoIiwiZGVwdGgiLCJJbnRlcmNlcHRvck1hbmFnZXIkMSIsImFkdmVydGlzZVpzdGRBY2NlcHRFbmNvZGluZyIsInBsYXRmb3JtJDEiLCJvd24iLCJkZWZhdWx0cyQxIiwiQ2FuY2VsZWRFcnJvciQxIiwicmF3TG9hZGVkIiwibWF4IiwiZXEiLCJhbGxvd2VkU29ja2V0UGF0aHMiLCJGT1JNX0RBVEFfQ09OVEVOVF9IRUFERVJTIiwiXyIsImhleCIsImZyb21DaGFyQ29kZSIsInBhcnNlSW50IiwicG9saWN5Iiwic2V0Rm9ybURhdGFIZWFkZXJzIiwic3RhcnRzV2l0aCIsImNvbXBvc2VTaWduYWxzJDEiLCJkZWNvZGVVUklDb21wb25lbnRTYWZlIiwiZ2xvYmFsT2JqZWN0IiwiaGFzTWF4Q29udGVudExlbmd0aCIsImhhc01heEJvZHlMZW5ndGgiLCJjb25maWdBdXRoIiwicHJvdG9jb2xJbmRleCIsInVybFRvQ2hlY2siLCJtYXliZVdpdGhBdXRoQ3JlZGVudGlhbHMiLCJwYXJzZWRVUkwiLCJ1cmxVc2VybmFtZSIsImNvbW1hIiwibWV0YSIsImVmZmVjdGl2ZUxlbiIsInBhZCIsImlkeCIsInRhaWxJc1BjdDNEIiwiZXN0aW1hdGVEYXRhVVJMRGVjb2RlZEJ5dGVzIiwib3V0Ym91bmRMZW5ndGgiLCJkZWNsYXJlZExlbmd0aCIsImJ5dGVzUmVhZCIsIm9uQ2h1bmtQcm9ncmVzcyIsIm1hdGVyaWFsaXplZFNpemUiLCJjYW5jZWxlZEVycm9yIiwidmFsaWRhdG9ycyQxIiwiQXhpb3MkMSIsIkNhbmNlbFRva2VuJDEiLCJIdHRwU3RhdHVzQ29kZSQxIiwiYXhpb3MkMSIsImdldFN0b3BzRnJvbUdlb2NvZGluZyIsInN0b3BzIiwiVVJMX1BFTElBU19QTEFDRSIsImdpZHMiLCJzdG9wU3RhdGlvbk1hcCIsInN0b3AiLCJfb2JqZWN0U3ByZWFkIiwic3RvcE9yU3RhdGlvbiIsImlkcyIsImFkZGVuZHVtIiwibGFzdFVwZGF0ZWQiLCJmYXZvdXJpdGVJZCIsImZpbHRlck9sZFNlYXJjaGVzIiwib2xkU2VhcmNoZXMiLCJkcm9wTGF5ZXJzIiwibWF0Y2hpbmdPbGRTZWFyY2hlcyIsInRha2UiLCJuZXdJdGVtIiwidGltZXRhYmxlQ2xpY2tlZCIsImFycm93Q2xpY2tlZCIsInJvdXRlTGF5ZXJzIiwibG9jYXRpb25MYXllcnMiLCJwYXJraW5nTGF5ZXJzIiwic3RvcExheWVycyIsImRlYm91bmNlZFNlYXJjaCIsImRlYm91bmNlIiwidHJhbnNwb3J0TW9kZSIsInNlYXJjaENvbnRleHQiLCJmaWx0ZXJSZXN1bHRzIiwiZ2VvY29kaW5nU2l6ZSIsInBhdGhPcHRzIiwicmVmUG9pbnQiLCJnZXRQb3NpdGlvbnMiLCJnZXRGYXZvdXJpdGVMb2NhdGlvbnMiLCJnZXRPbGRTZWFyY2hlcyIsImdldEZhdm91cml0ZVN0b3BzIiwicGFya2luZ0FyZWFTb3VyY2VzIiwiZ2V0TGFuZ3VhZ2UiLCJnZXRTdG9wQW5kU3RhdGlvbnNRdWVyeSIsImdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uc1F1ZXJ5IiwiZ2V0RmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zIiwiZ2V0RmF2b3VyaXRlUm91dGVzUXVlcnkiLCJnZXRGYXZvdXJpdGVSb3V0ZXMiLCJnZXRSb3V0ZXNRdWVyeSIsImlzUGVsaWFzTG9jYXRpb25Bd2FyZSIsImxvY2F0aW9uQXdhcmUiLCJVUkxfUEVMSUFTIiwiZmVlZElEcyIsImdlb2NvZGluZ1NlYXJjaFBhcmFtcyIsImdlb2NvZGluZ1NvdXJjZXMiLCJnZXRGdXR1cmVSb3V0ZXMiLCJjaXR5QmlrZU5ldHdvcmtzIiwiYWxsVGFyZ2V0cyIsImFsbFNvdXJjZXMiLCJzZWFyY2hDb21wb25lbnRzIiwic2VhcmNoZXMiLCJsYW5ndWFnZSIsImxhdCIsImxvbiIsInRvRml4ZWQiLCJtb2RlIiwiZ2V0Q3VycmVudFBvc2l0aW9uSWZFbXB0eSIsInNlbGVjdFBvc2l0aW9uRm9tTWFwIiwiaXRlbXMiLCJmYXZvdXJpdGVMb2NhdGlvbnMiLCJmYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnMiLCJmYXZvdXJpdGVTdG9wcyIsImhhc0Zhdm91cml0ZXMiLCJzZWxlY3RGcm9tT3duTG9jYXRpb25zIiwiZmF2b3VyaXRlcyIsImZpbHRlckZhdm91cml0ZUxvY2F0aW9ucyIsImxvY2F0aW9uSGlzdG9yeSIsImZlZWRJZHMiLCJoaXN0b3J5IiwidXNlU3RvcHMiLCJ1c2VTdGF0aW9ucyIsInN0b3BzQW5kU3RhdGlvbnMiLCJldmVyeSIsInN0b3BzU3RhdGlvbnMiLCJmaWx0ZXJGYXZvdXJpdGVTdG9wcyIsImRlZHVwZXN0b3BzIiwiZmVlZHMiLCJzdG9wSGlzdG9yeSIsImZhdm91cml0ZVJvdXRlcyIsInJvdXRlSGlzdG9yeSIsImZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uIiwiZmxhdHRlbiIsImxlYWRpbmciLCJpMThuIiwiZmFsbGJhY2tMbmciLCJyZXNvdXJjZXMiLCJkZSIsInRyYW5zbGF0aW9uIiwiYWlycGxhbmUiLCJhcnJpdmFsIiwiYmFjayIsImJpa2VyZW50YWxzdGF0aW9uIiwiYnVzIiwiY3VycmVudHBvc2l0aW9uIiwiZGVwYXJ0dXJlIiwiZmF2b3VyaXRlIiwiZmVycnkiLCJvd25sb2NhdGlvbnMiLCJsb2FkaW5nIiwicmFpbCIsInN0cmVldCIsInN1YndheSIsInN0YXRpb24iLCJ0cmFtIiwidmVudWUiLCJ3aGVyZSIsInBsYWNlIiwiZW4iLCJiaWtlcGFyayIsImNhcnBhcmsiLCJyZXF1aXJlZCIsInRyYWNrIiwiZmkiLCJ2ZWhpY2xlcmVudGFsc3RhdGlvbiIsInBsIiwic3YiLCJkZWZhdWx0TlMiLCJyZWFjdCIsInVzZVN1c3BlbnNlIiwic3R5bGVJbmplY3QiLCJjc3MiLCJyZWYiLCJpbnNlcnRBdCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwic3R5bGUiLCJjcmVhdGVFbGVtZW50IiwiZmlyc3RDaGlsZCIsImluc2VydEJlZm9yZSIsImFwcGVuZENoaWxkIiwic3R5bGVTaGVldCIsImNzc1RleHQiLCJjcmVhdGVUZXh0Tm9kZSIsImluaXQiLCJnZXRMb2NhbGFkbWluIiwic3VnZ2VzdGlvbiIsImdldFN0b3BDb2RlIiwiZ2V0TmFtZUxhYmVsIiwibWVtb2l6ZSIsInBsYWluIiwiZXNjYXBlUmVnRXhwIiwibG9uZ05hbWUiLCJhZ2VuY3kiLCJmb3JtYXRGYXZvdXJpdGVQbGFjZUxhYmVsIiwiY2xvbmVEZWVwIiwiaXNLZXlib2FyZFNlbGVjdGlvbkV2ZW50Iiwid2hpY2giLCJrZXlDb2RlIiwicHJldmVudERlZmF1bHQiLCJpc1BPSVNlYXJjaCIsImdldFBsYXRmb3JtIiwibG5nIiwiR1RGUyIsIm1vZGVzIiwiZ2V0U3VnZ2VzdGlvbkNvbnRlbnQiLCJzdWdnZXN0aW9uVHlwZSIsIl9pdGVtJHByb3BlcnRpZXMkYWRkZSIsInRhaWwxIiwibG9jYWxpdHkiLCJ0YWlsMiIsIm5hbWUxIiwibmFtZTIiLCJ0cmFuc2xhdGVkVGV4dCIsInRyYW5zbGF0ZUZ1dHVyZVJvdXRlU3VnZ2VzdGlvblRpbWUiLCJ0aW1lIiwiRGF0ZVRpbWUiLCJmcm9tU2Vjb25kcyIsImFycml2ZUJ5IiwiaGFzU2FtZSIsInBsdXMiLCJkYXlzIiwidG9Gb3JtYXQiLCJnZXRTdWdnZXN0aW9uVmFsdWUiLCJnZXRMYWJlbCIsInN1Z2dlc3Rpb25Bc0FyaWFDb250ZW50Iiwic3VnZ2VzdGlvbnMiLCJmaXJzdFN1Z2dlc3Rpb24iLCJtb2R1bGUiLCJleHBvcnRzIiwicmVxdWlyZSQkMCIsIm4iLCJnIiwiaWdub3JlIiwidG9wT25FbXB0eUhhc2giLCJzcGVlZCIsInNwZWVkQXNEdXJhdGlvbiIsImR1cmF0aW9uTWF4IiwiZHVyYXRpb25NaW4iLCJjbGlwIiwib2Zmc2V0IiwiZWFzaW5nIiwiY3VzdG9tRWFzaW5nIiwidXBkYXRlVVJMIiwicG9wc3RhdGUiLCJlbWl0RXZlbnRzIiwiY2hhckF0Iiwic3Vic3RyIiwidSIsIkludmFsaWRDaGFyYWN0ZXJFcnJvciIsInNjcm9sbEhlaWdodCIsImRvY3VtZW50RWxlbWVudCIsIm9mZnNldEhlaWdodCIsImNsaWVudEhlaWdodCIsImdldENvbXB1dGVkU3R5bGUiLCJoZWlnaHQiLCJvZmZzZXRUb3AiLCJmb2N1cyIsImFjdGl2ZUVsZW1lbnQiLCJzZXRBdHRyaWJ1dGUiLCJvdXRsaW5lIiwic2Nyb2xsVG8iLCJDdXN0b21FdmVudCIsImJ1YmJsZXMiLCJkZXRhaWwiLCJhbmNob3IiLCJ0b2dnbGUiLCJkaXNwYXRjaEV2ZW50IiwiZiIsImQiLCJjYW5jZWxTY3JvbGwiLCJjYW5jZWxBbmltYXRpb25GcmFtZSIsImFuaW1hdGVTY3JvbGwiLCJ0YWdOYW1lIiwieSIsInBhZ2VZT2Zmc2V0IiwicXVlcnlTZWxlY3RvciIsIkUiLCJPIiwib2Zmc2V0UGFyZW50IiwiaW5uZXJIZWlnaHQiLCJTIiwiSSIsIk0iLCJMIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwicHVzaFN0YXRlIiwic21vb3RoU2Nyb2xsIiwidGl0bGUiLCJtYXRjaE1lZGlhIiwiZGVmYXVsdFByZXZlbnRlZCIsImJ1dHRvbiIsIm1ldGFLZXkiLCJjdHJsS2V5Iiwic2hpZnRLZXkiLCJjbG9zZXN0IiwiaG9zdG5hbWUiLCJwYXRobmFtZSIsImhhc2giLCJyZXBsYWNlU3RhdGUiLCJkZXN0cm95IiwiRWxlbWVudCIsIl9fY3JlYXRlQmluZGluZyIsIl9fZXhwb3J0U3RhciIsInVzZUFycm93TmF2aWdhdGlvbiIsImxpc3RJdGVtcyIsIm9uQXJyb3dVcE9yRG93biIsInVzZVN0YXRlIiwidXNlQ2FsbGJhY2siLCJ1c2VFZmZlY3QiLCJzZWxlY3RlZEluZGV4IiwidXNlRGVib3VuY2UiLCJ1c2VFbGVtZW50U2l6ZSIsInVzZVJlZiIsIndpZHRoIiwiY2xpZW50V2lkdGgiLCJ1c2VJbnRlcnNlY3Rpb25PYnNlcnZlciIsImlzSW50ZXJzZWN0aW5nIiwiSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLCJvYnNlcnZlIiwidW5vYnNlcnZlIiwiY29udGFpbmVyUmVmIiwiaXNWaXNpYmxlIiwidXNlSXNCcmVha3BvaW50IiwieHMiLCJtb2JpbGVTbWFsbCIsIm1vYmlsZSIsInRhYmxldCIsInRhYmxldExhcmdlIiwiZGVza3RvcFNtYWxsIiwiZGVza3RvcCIsImRlc2t0b3BMYXJnZSIsImlubmVyV2lkdGgiLCJ1c2VPblJlc2l6ZSIsInVzZUlzTG9hZGluZ0FmdGVyRXJyb3IiLCJ1c2VJc01vYmlsZSIsInVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QiLCJ1c2VMYXlvdXRFZmZlY3QiLCJ1c2VPbkxvc2VGb2N1c1dpdGhpbiIsIndhdGNoIiwicGFzc2l2ZSIsInVzZU9uV2luZG93Rm9jdXMiLCJ2aXNpYmlsaXR5U3RhdGUiLCJ1c2VPdXRzaWRlUmVhY3RlciIsImNvbnRhaW5zIiwidXNlUnVuQWZ0ZXJVcGRhdGUiLCJ1c2VTY3JvbGxMb2NrIiwibG9jayIsInNjcm9sbFkiLCJ0b3AiLCJ1bmxvY2siLCJfX2ltcG9ydERlZmF1bHQiLCJfX2VzTW9kdWxlIiwidXNlU21vb3RoU2Nyb2xsIiwiRnVuY3Rpb24iLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJvYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwiU3VnZ2VzdGlvbiIsIl9yZWYiLCJnZXRJdGVtUHJvcHMiLCJoaWdobGlnaHRlZEluZGV4IiwiaXRlbUluZGV4Iiwic3R5bGVzIiwicmVzdCIsIl9leGNsdWRlZCIsInVzZVRyYW5zbGF0aW9uIiwiUmVhY3QiLCJjbGFzc05hbWUiLCJjeCIsInN1Z2dlc3Rpb25IaWdobGlnaHRlZCIsIlN1Z2dlc3Rpb25JdGVtIiwiaXRlbVNoYXBlIiwiUHJvcFR5cGVzIiwiTk9ERV9FTlYiLCJzaGFwZSIsInN0cmluZyIsInNlbGVjdGVkSWNvbklkIiwiaWNvbkNvbG9yIiwiY29sb3IiLCJib29sIiwiU3VnZ2VzdGlvbnMiLCJfcmVmMiIsImdldE1lbnVQcm9wcyIsImhpZGRlbiIsInJlbmRlckNsZWFySGlzdG9yeUJ1dHRvbiIsImhhbmRsZUNsZWFySGlzdG9yeSIsIl9leGNsdWRlZDIiLCJzdWdnZXN0aW9uc0NvbnRhaW5lck9wZW4iLCJzdWdnZXN0aW9uc0NvbnRhaW5lciIsInN1Z2dlc3Rpb25zTGlzdCIsIm9uQ2xpY2siLCJwcm9wVHlwZXMiLCJpc1JlcXVpcmVkIiwiZnVuYyIsIm9iamVjdE9mIiwiYXJyYXlPZiIsImRlZmF1bHRQcm9wcyIsIkNsZWFyQnV0dG9uIiwiY2xlYXJJbnB1dCIsIm9uS2V5RG93biIsIkljb24iLCJpbWciLCJwbGFjZWhvbGRlciIsImdldElucHV0UHJvcHMiLCJnZXRMYWJlbFByb3BzIiwiYXJpYUxhYmVsIiwiaW5wdXRSZWYiLCJyZW5kZXJMYWJlbCIsImlzTW9iaWxlIiwiaW5wdXRDbGFzc05hbWUiLCJjbGVhckJ1dHRvbkNvbG9yIiwiYXV0b0ZvY3VzIiwiaW5wdXRPbkJsdXIiLCJjdXJzb3JSZWYiLCJzZXRTZWxlY3Rpb25SYW5nZSIsImNvbnRhaW5lciIsImh0bWxGb3IiLCJ0aGluIiwiaGFzVmFsdWUiLCJvbkJsdXIiLCJvbkNoYW5nZSIsInNlbGVjdGlvblN0YXJ0Iiwib25lT2ZUeXBlIiwib2JqZWN0IiwiTW9iaWxlVmlldyIsImFwcEVsZW1lbnQiLCJvblNlbGVjdGVkSXRlbUNoYW5nZSIsImZvbnRXZWlnaHRzIiwiY2xlYXJPbGRTZWFyY2hlcyIsInN1Z2dlc3Rpb25Qcm9wcyIsImFyaWFQcm9wcyIsIm1vYmlsZUxhYmVsIiwic2hvd1Njcm9sbCIsImRpc3BhdGNoIiwiY29sb3JzIiwiaG9va3MiLCJtb2JpbGVTdHlsZXMiLCJtb2JpbGVOb1Njcm9sbFN0eWxlcyIsImlucHV0SWQiLCJpc0RpYWxvZ09wZW4iLCJzZXREaWFsb2dPcGVuIiwiUmVhY3RNb2RhbCIsInNldEFwcEVsZW1lbnQiLCJyZW5kZXJNb2JpbGUiLCJzZXRIaWdobGlnaHRlZEluZGV4IiwidXNlQ29tYm9ib3giLCJpbnB1dFZhbHVlIiwiaXNPcGVuIiwiY2hhbmdlcyIsInNlbGVjdGVkSXRlbSIsImRlZmF1bHRIaWdobGlnaHRlZEluZGV4Iiwib25JbnB1dFZhbHVlQ2hhbmdlIiwic3RhdGVSZWR1Y2VyIiwib2xkU3RhdGUiLCJzdGF0ZUNoYW5nZVR5cGVzIiwiSW5wdXRLZXlEb3duRXNjYXBlIiwiSW5wdXRLZXlEb3duRW50ZXIiLCJlbnRlclBlbmRpbmciLCJJbnB1dEJsdXIiLCJpdGVtVG9TdHJpbmciLCJzdXBwcmVzc1JlZkVycm9yIiwiYXJpYVJlcXVpcmVkVGV4dCIsIlNlYXJjaEJhcklkIiwiYXJpYUN1cnJlbnRTdWdnZXN0aW9uIiwib3ZlcmxheUNsYXNzTmFtZSIsInNob3VsZFJldHVybkZvY3VzQWZ0ZXJDbG9zZSIsInNob3VsZENsb3NlT25Fc2MiLCJwcmltYXJ5IiwiYWNjZXNzaWJsZVByaW1hcnkiLCJob3ZlciIsIm1lZGl1bSIsInRhYkluZGV4IiwiRGlhbG9nTW9kYWwiLCJpc01vZGFsT3BlbiIsImhhbmRsZUNsb3NlIiwiaGVhZGVyVGV4dCIsInByaW1hcnlCdXR0b25UZXh0Iiwic2Vjb25kYXJ5QnV0dG9uVGV4dCIsInByaW1hcnlCdXR0b25PbkNsaWNrIiwic2Vjb25kYXJ5QnV0dG9uT25DbGljayIsInNlYXJjaFJlZHVjZXIiLCJhY3Rpb24iLCJzaG93T3duUGxhY2VzIiwicGVuZGluZ1NlbGVjdGlvbiIsImlzQ2xlYXJlZCIsImluaXRpYWxTdGF0ZSIsImlzTWVudU9wZW4iLCJwb3NpdGlvbnMiLCJEVEF1dG9zdWdnZXN0Iiwib25TZWxlY3QiLCJpY29uIiwib25DbGVhciIsImdldEF1dG9TdWdnZXN0SWNvbnMiLCJoYW5kbGVWaWFQb2ludHMiLCJmb2N1c0NoYW5nZSIsInN0b3JlUmVmIiwidHJhbnNsYXRlZFBsYWNlaG9sZGVyIiwibW9kZVNldCIsImlzRW1iZWRkZWQiLCJ1c2VSZWR1Y2VyIiwiZmV0Y2hTdWdnZXN0aW9ucyIsImlzTG9jYXRpb25TZWFyY2giLCJuZXdUYXJnZXRzIiwiZ2V0TmV3VGFyZ2V0cyIsIm93blBsYWNlcyIsInVzZUFsbCIsImV4ZWN1dGVTZWFyY2giLCJzZWFyY2hSZXN1bHQiLCJuZXdTdWdnZXN0aW9ucyIsInRyYW5zbGF0ZWRTdWdnZXN0aW9uIiwic2VsZWN0U3VnZ2VzdGlvbiIsImJsdXIiLCJzZWxlY3RJdGVtIiwib3Blbk1lbnUiLCJjbG9zZU1lbnUiLCJJdGVtQ2xpY2siLCJJbnB1dENsaWNrIiwib25Jc09wZW5DaGFuZ2UiLCJwZW5kaW5nRW50ZXIiLCJiYXNlSXRlbVByb3BzIiwiYXJpYUZhdm91cml0ZVN0cmluZyIsImFyaWFMYWJlbFRleHQiLCJnZXRBcmlhUHJvcHMiLCJhcmlhQmFySWQiLCJhcmlhTGFiZWxJbnN0cnVjdGlvbnMiLCJtb3ZpbmdUb0Rlc3RpbmF0aW9uRmllbGRUZXh0IiwiYXJpYVN1Z2dlc3Rpb25MZW4iLCJjb3VudCIsInNlbGVjdGlvbiIsIkZyYWdtZW50IiwibW9iaWxlQ2xlYXJPbGRTZWFyY2hlcyIsImNsZWFyRnV0dXJlUm91dGVzIiwicm91dGVzUHJlZml4Iiwic3RvcHNQcmVmaXgiLCJkZWZhdWx0Q29sb3JzIiwiSTE4bmV4dFByb3ZpZGVy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