@digitransit-component/digitransit-component-autosuggest 7.2.1 → 7.2.3

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 +0,0 @@
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,o,r,i,s,a,l,u,c,d,p,f,h,g,b,m,y,_,v,w,S){"use strict";function O(e){return e&&e.__esModule?e:{default:e}}var E=O(t),k=O(n),x=O(r),R=O(i),j=O(s),P=O(a),C=O(l),N=O(u),M=O(c),T=O(d),A=O(f),L=O(b),I=O(m),F=O(y),D=O(v),q=O(w),U=O(S);function z(e){return z="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},z(e)}function B(e){var t=function(e,t){if("object"!=z(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var o=n.call(e,t);if("object"!=z(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==z(t)?t:t+""}function H(e,t,n){return(t=B(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 G(e){if(!e)return"";const t=e.split(":");return 0===t.length?"":`citybikes${t[0]}:bikestation:${t[1]}`}function J(e,t){const n=e.properties,o=t.properties;if("FutureRoute"===e.type&&"FutureRoute"===t.type){const e=n.origin,t=n.destination,r=o.origin,i=o.destination;return`${e.name}//${e.localadmin}//${t.name}//${t.localadmin}`===`${r.name}//${r.localadmin}//${i.name}//${i.localadmin}`}if("FutureRoute"===e.type||"FutureRoute"===t.type)return!1;if($.includes(n.layer)&&$.includes(o.layer)){return(n.gid||G(n.labelId))===(o.gid||G(o.labelId))}if(n.gtfsId&&o.gtfsId)return n.gtfsId===o.gtfsId;if(W.includes(n.layer)&&W.includes(o.layer)&&n.gid&&o.gid)return n.gid===o.gid;const r=e&&e.geometry?e.geometry.coordinates:void 0,i=t&&t.geometry?t.geometry.coordinates:void 0;return!!(r&&i&&Math.abs(r[0]-i[0])<1e-6&&Math.abs(r[1]-i[1])<1e-6&&(V(n.name,o.name)||V(n.label,o.label)||V(n.address,o.address)||V(n.address,o.label)||V(n.label,o.address)))}const K=e=>C.default(e)?e.toLowerCase():"",Z=e=>e.split(/(\p{L}+)/u),X=e=>/^[0-9]+\p{L}+$/u.test(e),Q="back",Y="currentPosition",ee="favouriteStop",te="favouriteStation",ne="favouritePlace",oe="favouriteRoute",re="favouriteVehicleRentalStation",ie="futureRoute",se="station",ae="selectFromMap",le="ownLocations",ue="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 Q:return.9;case ae:return.8;case le:return.79;case te:case ne:case ee:case oe:case re:return.45;case ie:return.44;case se:return C.default(t)&&0===t.indexOf("gtfs")?.43:.42;case de:case pe:case ce:return.38;case ue:return.36;default:return.41}},ge=(e,t,n="")=>{if(!Array.isArray(t)||!t.length)return t;const o=t=>C.default(t)&&e&&e.test(t),r=K(n),i=o(r),s=N.default(t.filter(e=>e),[e=>i&&o(K(e.properties.shortName))&&0===K(e.properties.shortName).indexOf(r)?1:0,e=>{const{confidence:t,layer:n,source:o}=e.properties;if(0===r.length)return he(n,o);if(!t)return he(n,o)+((e,t)=>C.default(e)&&0!==e.length?["name","label","address","shortName"].map(e=>({name:e,value:t[e]})).filter(e=>C.default(e.value)&&e.value.length>0).map(t=>{let n=K(t.value);return 0===n.indexOf(e)?("shortName"===t.name&&X(n)&&([n]=Z(n)),.5+e.length/n.length):.5*e.length/(e.length+1)}).reduce((e,t)=>t>e?t:e,0):0)(r,e.properties);switch(n){case se:return t+(0===o.indexOf("gtfs")?.02:.01);case ue:case de:case pe:return t-.05;case ce:return t-.04;default:return t}},e=>{if(e.properties.shortName)return X(e.properties.shortName)?Z(e.properties.shortName)[0]:e.properties.shortName},e=>{if(e.properties.shortName)return X(e.properties.shortName)?Z(e.properties.shortName)[1]:e.properties.shortName},"properties.longName"],["desc","desc","asc","asc","asc"]);return M.default(s,J)},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 o=t.toLowerCase().trim(),r=o.includes(" ")||o.includes(",");return e.filter(e=>{let t=[];n.forEach(n=>{let o=T.default(e,n);r||"properties.label"!==n&&"address"!==n||!o||(o=o.split(","),o.length>2?o.splice(o.length-2,2):o.length>1&&o.splice(o.length-1,1),o=o.join(",")),o&&(t=r?t.concat(o.toLowerCase()):t.concat(o.toLowerCase().replace(/,/g," ").split(" ")))});for(let e=0;e<t.length;e++)if(0===t[e].indexOf(o))return!0;return!1})}return e}function ye(e,t){return function(){return e.apply(t,arguments)}}const{toString:_e}=Object.prototype,{getPrototypeOf:ve}=Object,{iterator:we,toStringTag:Se}=Symbol,Oe=(Ee=Object.create(null),e=>{const t=_e.call(e);return Ee[t]||(Ee[t]=t.slice(8,-1).toLowerCase())});var Ee;const ke=e=>(e=e.toLowerCase(),t=>Oe(t)===e),xe=e=>t=>typeof t===e,{isArray:Re}=Array,je=xe("undefined");function Pe(e){return null!==e&&!je(e)&&null!==e.constructor&&!je(e.constructor)&&Me(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const Ce=ke("ArrayBuffer");const Ne=xe("string"),Me=xe("function"),Te=xe("number"),Ae=e=>null!==e&&"object"==typeof e,Le=e=>{if("object"!==Oe(e))return!1;const t=ve(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t)||Se in e||we in e)},Ie=ke("Date"),Fe=ke("File"),De=ke("Blob"),qe=ke("FileList");const Ue="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},ze=void 0!==Ue.FormData?Ue.FormData:void 0,Be=ke("URLSearchParams"),[He,Ve,We,$e]=["ReadableStream","Request","Response","Headers"].map(ke);function Ge(e,t,{allOwnKeys:n=!1}={}){if(null==e)return;let o,r;if("object"!=typeof e&&(e=[e]),Re(e))for(o=0,r=e.length;o<r;o++)t.call(null,e[o],o,e);else{if(Pe(e))return;const r=n?Object.getOwnPropertyNames(e):Object.keys(e),i=r.length;let s;for(o=0;o<i;o++)s=r[o],t.call(null,e[s],s,e)}}function Je(e,t){if(Pe(e))return null;t=t.toLowerCase();const n=Object.keys(e);let o,r=n.length;for(;r-- >0;)if(o=n[r],t===o.toLowerCase())return o;return null}const Ke="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,Ze=e=>!je(e)&&e!==Ke;const Xe=(Qe="undefined"!=typeof Uint8Array&&ve(Uint8Array),e=>Qe&&e instanceof Qe);var Qe;const Ye=ke("HTMLFormElement"),et=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),{propertyIsEnumerable:tt}=Object.prototype,nt=ke("RegExp"),ot=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),o={};Ge(n,(n,r)=>{let i;!1!==(i=t(n,r,e))&&(o[r]=i||n)}),Object.defineProperties(e,o)};const rt=ke("AsyncFunction"),it=(st="function"==typeof setImmediate,at=Me(Ke.postMessage),st?setImmediate:at?(lt=`axios@${Math.random()}`,ut=[],Ke.addEventListener("message",({source:e,data:t})=>{e===Ke&&t===lt&&ut.length&&ut.shift()()},!1),e=>{ut.push(e),Ke.postMessage(lt,"*")}):e=>setTimeout(e));var st,at,lt,ut;const ct="undefined"!=typeof queueMicrotask?queueMicrotask.bind(Ke):"undefined"!=typeof process&&process.nextTick||it;var dt={isArray:Re,isArrayBuffer:Ce,isBuffer:Pe,isFormData:e=>{if(!e)return!1;if(ze&&e instanceof ze)return!0;const t=ve(e);if(!t||t===Object.prototype)return!1;if(!Me(e.append))return!1;const n=Oe(e);return"formdata"===n||"object"===n&&Me(e.toString)&&"[object FormData]"===e.toString()},isArrayBufferView:function(e){let t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&Ce(e.buffer),t},isString:Ne,isNumber:Te,isBoolean:e=>!0===e||!1===e,isObject:Ae,isPlainObject:Le,isEmptyObject:e=>{if(!Ae(e)||Pe(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:je,isDate:Ie,isFile:Fe,isReactNativeBlob:e=>!(!e||void 0===e.uri),isReactNative:e=>e&&void 0!==e.getParts,isBlob:De,isRegExp:nt,isFunction:Me,isStream:e=>Ae(e)&&Me(e.pipe),isURLSearchParams:Be,isTypedArray:Xe,isFileList:qe,forEach:Ge,merge:function e(...t){const{caseless:n,skipUndefined:o}=Ze(this)&&this||{},r={},i=(t,i)=>{if("__proto__"===i||"constructor"===i||"prototype"===i)return;const s=n&&"string"==typeof i&&Je(r,i)||i,a=et(r,s)?r[s]:void 0;Le(a)&&Le(t)?r[s]=e(a,t):Le(t)?r[s]=e({},t):Re(t)?r[s]=t.slice():o&&je(t)||(r[s]=t)};for(let e=0,n=t.length;e<n;e++){const n=t[e];if(!n||Pe(n))continue;if(Ge(n,i),"object"!=typeof n||Re(n))continue;const o=Object.getOwnPropertySymbols(n);for(let e=0;e<o.length;e++){const t=o[e];tt.call(n,t)&&i(n[t],t)}}return r},extend:(e,t,n,{allOwnKeys:o}={})=>(Ge(t,(t,o)=>{n&&Me(t)?Object.defineProperty(e,o,{__proto__:null,value:ye(t,n),writable:!0,enumerable:!0,configurable:!0}):Object.defineProperty(e,o,{__proto__:null,value:t,writable:!0,enumerable:!0,configurable:!0})},{allOwnKeys:o}),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,o)=>{e.prototype=Object.create(t.prototype,o),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,o)=>{let r,i,s;const a={};if(t=t||{},null==e)return t;do{for(r=Object.getOwnPropertyNames(e),i=r.length;i-- >0;)s=r[i],o&&!o(s,e,t)||a[s]||(t[s]=e[s],a[s]=!0);e=!1!==n&&ve(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},kindOf:Oe,kindOfTest:ke,endsWith:(e,t,n)=>{e=String(e),(void 0===n||n>e.length)&&(n=e.length),n-=t.length;const o=e.indexOf(t,n);return-1!==o&&o===n},toArray:e=>{if(!e)return null;if(Re(e))return e;let t=e.length;if(!Te(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},forEachEntry:(e,t)=>{const n=(e&&e[we]).call(e);let o;for(;(o=n.next())&&!o.done;){const n=o.value;t.call(e,n[0],n[1])}},matchAll:(e,t)=>{let n;const o=[];for(;null!==(n=e.exec(t));)o.push(n);return o},isHTMLForm:Ye,hasOwnProperty:et,hasOwnProp:et,reduceDescriptors:ot,freezeMethods:e=>{ot(e,(t,n)=>{if(Me(e)&&["arguments","caller","callee"].includes(n))return!1;const o=e[n];Me(o)&&(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={},o=e=>{e.forEach(e=>{n[e]=!0})};return Re(e)?o(e):o(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:Je,global:Ke,isContextDefined:Ze,isSpecCompliantForm:function(e){return!!(e&&Me(e.append)&&"FormData"===e[Se]&&e[we])},toJSONObject:e=>{const t=new WeakSet,n=e=>{if(Ae(e)){if(t.has(e))return;if(Pe(e))return e;if(!("toJSON"in e)){t.add(e);const o=Re(e)?[]:{};return Ge(e,(e,t)=>{const r=n(e);!je(r)&&(o[t]=r)}),t.delete(e),o}}return e};return n(e)},isAsyncFn:rt,isThenable:e=>e&&(Ae(e)||Me(e))&&Me(e.then)&&Me(e.catch),setImmediate:it,asap:ct,isIterable:e=>null!=e&&Me(e[we])};const pt=dt.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 ft=new RegExp("[\\u0000-\\u0008\\u000a-\\u001f\\u007f]+","g"),ht=new RegExp("[^\\u0009\\u0020-\\u007e\\u0080-\\u00ff]+","g");function gt(e,t){return dt.isArray(e)?e.map(e=>gt(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 bt(e){const t=Object.create(null);return dt.forEach(e.toJSON(),(e,n)=>{t[n]=(e=>gt(e,ht))(e)}),t}const mt=Symbol("internals");function yt(e){return e&&String(e).trim().toLowerCase()}function _t(e){return!1===e||null==e?e:dt.isArray(e)?e.map(_t):(e=>gt(e,ft))(String(e))}function vt(e,t,n,o,r){return dt.isFunction(o)?o.call(this,t,n):(r&&(t=n),dt.isString(t)?dt.isString(o)?-1!==t.indexOf(o):dt.isRegExp(o)?o.test(t):void 0:void 0)}let wt=class{constructor(e){e&&this.set(e)}set(e,t,n){const o=this;function r(e,t,n){const r=yt(t);if(!r)return;const i=dt.findKey(o,r);(!i||void 0===o[i]||!0===n||void 0===n&&!1!==o[i])&&(o[i||t]=_t(e))}const i=(e,t)=>dt.forEach(e,(e,n)=>r(e,n,t));if(dt.isPlainObject(e)||e instanceof this.constructor)i(e,t);else if(dt.isString(e)&&(e=e.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim()))i((e=>{const t={};let n,o,r;return e&&e.split("\n").forEach(function(e){r=e.indexOf(":"),n=e.substring(0,r).trim().toLowerCase(),o=e.substring(r+1).trim(),!n||t[n]&&pt[n]||("set-cookie"===n?t[n]?t[n].push(o):t[n]=[o]:t[n]=t[n]?t[n]+", "+o:o)}),t})(e),t);else if(dt.isObject(e)&&dt.isIterable(e)){let n,o,r={};for(const t of e){if(!dt.isArray(t))throw new TypeError("Object iterator must return a key-value pair");r[o=t[0]]=(n=r[o])?dt.isArray(n)?[...n,t[1]]:[n,t[1]]:t[1]}i(r,t)}else null!=e&&r(t,e,n);return this}get(e,t){if(e=yt(e)){const n=dt.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 o;for(;o=n.exec(e);)t[o[1]]=o[2];return t}(e);if(dt.isFunction(t))return t.call(this,e,n);if(dt.isRegExp(t))return t.exec(e);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,t){if(e=yt(e)){const n=dt.findKey(this,e);return!(!n||void 0===this[n]||t&&!vt(0,this[n],n,t))}return!1}delete(e,t){const n=this;let o=!1;function r(e){if(e=yt(e)){const r=dt.findKey(n,e);!r||t&&!vt(0,n[r],r,t)||(delete n[r],o=!0)}}return dt.isArray(e)?e.forEach(r):r(e),o}clear(e){const t=Object.keys(this);let n=t.length,o=!1;for(;n--;){const r=t[n];e&&!vt(0,this[r],r,e,!0)||(delete this[r],o=!0)}return o}normalize(e){const t=this,n={};return dt.forEach(this,(o,r)=>{const i=dt.findKey(n,r);if(i)return t[i]=_t(o),void delete t[r];const s=e?function(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(e,t,n)=>t.toUpperCase()+n)}(r):String(r).trim();s!==r&&delete t[r],t[s]=_t(o),n[s]=!0}),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const t=Object.create(null);return dt.forEach(this,(n,o)=>{null!=n&&!1!==n&&(t[o]=e&&dt.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[mt]=this[mt]={accessors:{}}).accessors,n=this.prototype;function o(e){const o=yt(e);t[o]||(!function(e,t){const n=dt.toCamelCase(" "+t);["get","set","has"].forEach(o=>{Object.defineProperty(e,o+n,{__proto__:null,value:function(e,n,r){return this[o].call(this,t,e,n,r)},configurable:!0})})}(n,e),t[o]=!0)}return dt.isArray(e)?e.forEach(o):o(e),this}};wt.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),dt.reduceDescriptors(wt.prototype,({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(e){this[n]=e}}}),dt.freezeMethods(wt);function St(e,t){const n=new Set(t.map(e=>String(e).toLowerCase())),o=[],r=e=>{if(null===e||"object"!=typeof e)return e;if(dt.isBuffer(e))return e;if(-1!==o.indexOf(e))return;let t;if(e instanceof wt&&(e=e.toJSON()),o.push(e),dt.isArray(e))t=[],e.forEach((e,n)=>{const o=r(e);dt.isUndefined(o)||(t[n]=o)});else{if(!dt.isPlainObject(e)&&function(e){if(dt.hasOwnProp(e,"toJSON"))return!0;let t=Object.getPrototypeOf(e);for(;t&&t!==Object.prototype;){if(dt.hasOwnProp(t,"toJSON"))return!0;t=Object.getPrototypeOf(t)}return!1}(e))return o.pop(),e;t=Object.create(null);for(const[o,i]of Object.entries(e)){const e=n.has(o.toLowerCase())?"[REDACTED ****]":r(i);dt.isUndefined(e)||(t[o]=e)}}return o.pop(),t};return r(e)}let Ot=class e extends Error{static from(t,n,o,r,i,s){const a=new e(t.message,n||t.code,o,r,i);return a.cause=t,a.name=t.name,null!=t.status&&null==a.status&&(a.status=t.status),s&&Object.assign(a,s),a}constructor(e,t,n,o,r){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),o&&(this.request=o),r&&(this.response=r,this.status=r.status)}toJSON(){const e=this.config,t=e&&dt.hasOwnProp(e,"redact")?e.redact:void 0,n=dt.isArray(t)&&t.length>0?St(e,t):dt.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}}};Ot.ERR_BAD_OPTION_VALUE="ERR_BAD_OPTION_VALUE",Ot.ERR_BAD_OPTION="ERR_BAD_OPTION",Ot.ECONNABORTED="ECONNABORTED",Ot.ETIMEDOUT="ETIMEDOUT",Ot.ECONNREFUSED="ECONNREFUSED",Ot.ERR_NETWORK="ERR_NETWORK",Ot.ERR_FR_TOO_MANY_REDIRECTS="ERR_FR_TOO_MANY_REDIRECTS",Ot.ERR_DEPRECATED="ERR_DEPRECATED",Ot.ERR_BAD_RESPONSE="ERR_BAD_RESPONSE",Ot.ERR_BAD_REQUEST="ERR_BAD_REQUEST",Ot.ERR_CANCELED="ERR_CANCELED",Ot.ERR_NOT_SUPPORT="ERR_NOT_SUPPORT",Ot.ERR_INVALID_URL="ERR_INVALID_URL",Ot.ERR_FORM_DATA_DEPTH_EXCEEDED="ERR_FORM_DATA_DEPTH_EXCEEDED";function Et(e){return dt.isPlainObject(e)||dt.isArray(e)}function kt(e){return dt.endsWith(e,"[]")?e.slice(0,-2):e}function xt(e,t,n){return e?e.concat(t).map(function(e,t){return e=kt(e),!n&&t?"["+e+"]":e}).join(n?".":""):t}const Rt=dt.toFlatObject(dt,{},null,function(e){return/^is[A-Z]/.test(e)});function jt(e,t,n){if(!dt.isObject(e))throw new TypeError("target must be an object");t=t||new FormData;const o=(n=dt.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,function(e,t){return!dt.isUndefined(t[e])})).metaTokens,r=n.visitor||d,i=n.dots,s=n.indexes,a=n.Blob||"undefined"!=typeof Blob&&Blob,l=void 0===n.maxDepth?100:n.maxDepth,u=a&&dt.isSpecCompliantForm(t);if(!dt.isFunction(r))throw new TypeError("visitor must be a function");function c(e){if(null===e)return"";if(dt.isDate(e))return e.toISOString();if(dt.isBoolean(e))return e.toString();if(!u&&dt.isBlob(e))throw new Ot("Blob is not supported. Use a Buffer instead.");return dt.isArrayBuffer(e)||dt.isTypedArray(e)?u&&"function"==typeof Blob?new Blob([e]):Buffer.from(e):e}function d(e,n,r){let a=e;if(dt.isReactNative(t)&&dt.isReactNativeBlob(e))return t.append(xt(r,n,i),c(e)),!1;if(e&&!r&&"object"==typeof e)if(dt.endsWith(n,"{}"))n=o?n:n.slice(0,-2),e=JSON.stringify(e);else if(dt.isArray(e)&&function(e){return dt.isArray(e)&&!e.some(Et)}(e)||(dt.isFileList(e)||dt.endsWith(n,"[]"))&&(a=dt.toArray(e)))return n=kt(n),a.forEach(function(e,o){!dt.isUndefined(e)&&null!==e&&t.append(!0===s?xt([n],o,i):null===s?n:n+"[]",c(e))}),!1;return!!Et(e)||(t.append(xt(r,n,i),c(e)),!1)}const p=[],f=Object.assign(Rt,{defaultVisitor:d,convertValue:c,isVisitable:Et});if(!dt.isObject(e))throw new TypeError("data must be an object");return function e(n,o,i=0){if(!dt.isUndefined(n)){if(i>l)throw new Ot("Object is too deeply nested ("+i+" levels). Max depth: "+l,Ot.ERR_FORM_DATA_DEPTH_EXCEEDED);if(-1!==p.indexOf(n))throw new Error("Circular reference detected in "+o.join("."));p.push(n),dt.forEach(n,function(n,s){!0===(!(dt.isUndefined(n)||null===n)&&r.call(t,n,dt.isString(s)?s.trim():s,o,f))&&e(n,o?o.concat(s):[s],i+1)}),p.pop()}}(e),t}function Pt(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"};return encodeURIComponent(e).replace(/[!'()~]|%20/g,function(e){return t[e]})}function Ct(e,t){this._pairs=[],e&&jt(e,this,t)}const Nt=Ct.prototype;function Mt(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+")}function Tt(e,t,n){if(!t)return e;const o=n&&n.encode||Mt,r=dt.isFunction(n)?{serialize:n}:n,i=r&&r.serialize;let s;if(s=i?i(t,r):dt.isURLSearchParams(t)?t.toString():new Ct(t,r).toString(o),s){const t=e.indexOf("#");-1!==t&&(e=e.slice(0,t)),e+=(-1===e.indexOf("?")?"?":"&")+s}return e}Nt.append=function(e,t){this._pairs.push([e,t])},Nt.toString=function(e){const t=e?function(t){return e.call(this,t,Pt)}:Pt;return this._pairs.map(function(e){return t(e[0])+"="+t(e[1])},"").join("&")};class At{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){dt.forEach(this.handlers,function(t){null!==t&&e(t)})}}var Lt={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1,legacyInterceptorReqResOrdering:!0,advertiseZstdAcceptEncoding:!1},It={isBrowser:!0,classes:{URLSearchParams:"undefined"!=typeof URLSearchParams?URLSearchParams:Ct,FormData:"undefined"!=typeof FormData?FormData:null,Blob:"undefined"!=typeof Blob?Blob:null},protocols:["http","https","file","blob","url","data"]};const Ft="undefined"!=typeof window&&"undefined"!=typeof document,Dt="object"==typeof navigator&&navigator||void 0,qt=Ft&&(!Dt||["ReactNative","NativeScript","NS"].indexOf(Dt.product)<0),Ut="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"==typeof self.importScripts,zt=Ft&&window.location.href||"http://localhost";var Bt={...Object.freeze({__proto__:null,hasBrowserEnv:Ft,hasStandardBrowserEnv:qt,hasStandardBrowserWebWorkerEnv:Ut,navigator:Dt,origin:zt}),...It};function Ht(e){function t(e,n,o,r){let i=e[r++];if("__proto__"===i)return!0;const s=Number.isFinite(+i),a=r>=e.length;if(i=!i&&dt.isArray(o)?o.length:i,a)return dt.hasOwnProp(o,i)?o[i]=dt.isArray(o[i])?o[i].concat(n):[o[i],n]:o[i]=n,!s;dt.hasOwnProp(o,i)&&dt.isObject(o[i])||(o[i]=[]);return t(e,n,o[i],r)&&dt.isArray(o[i])&&(o[i]=function(e){const t={},n=Object.keys(e);let o;const r=n.length;let i;for(o=0;o<r;o++)i=n[o],t[i]=e[i];return t}(o[i])),!s}if(dt.isFormData(e)&&dt.isFunction(e.entries)){const n={};return dt.forEachEntry(e,(e,o)=>{t(function(e){return dt.matchAll(/\w+|\[(\w*)]/g,e).map(e=>"[]"===e[0]?"":e[1]||e[0])}(e),o,n,0)}),n}return null}const Vt=(e,t)=>null!=e&&dt.hasOwnProp(e,t)?e[t]:void 0;const Wt={transitional:Lt,adapter:["xhr","http","fetch"],transformRequest:[function(e,t){const n=t.getContentType()||"",o=n.indexOf("application/json")>-1,r=dt.isObject(e);r&&dt.isHTMLForm(e)&&(e=new FormData(e));if(dt.isFormData(e))return o?JSON.stringify(Ht(e)):e;if(dt.isArrayBuffer(e)||dt.isBuffer(e)||dt.isStream(e)||dt.isFile(e)||dt.isBlob(e)||dt.isReadableStream(e))return e;if(dt.isArrayBufferView(e))return e.buffer;if(dt.isURLSearchParams(e))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let i;if(r){const t=Vt(this,"formSerializer");if(n.indexOf("application/x-www-form-urlencoded")>-1)return function(e,t){return jt(e,new Bt.classes.URLSearchParams,{visitor:function(e,t,n,o){return Bt.isNode&&dt.isBuffer(e)?(this.append(t,e.toString("base64")),!1):o.defaultVisitor.apply(this,arguments)},...t})}(e,t).toString();if((i=dt.isFileList(e))||n.indexOf("multipart/form-data")>-1){const n=Vt(this,"env"),o=n&&n.FormData;return jt(i?{"files[]":e}:e,o&&new o,t)}}return r||o?(t.setContentType("application/json",!1),function(e,t,n){if(dt.isString(e))try{return(t||JSON.parse)(e),dt.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(n||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){const t=Vt(this,"transitional")||Wt.transitional,n=t&&t.forcedJSONParsing,o=Vt(this,"responseType"),r="json"===o;if(dt.isResponse(e)||dt.isReadableStream(e))return e;if(e&&dt.isString(e)&&(n&&!o||r)){const n=!(t&&t.silentJSONParsing)&&r;try{return JSON.parse(e,Vt(this,"parseReviver"))}catch(e){if(n){if("SyntaxError"===e.name)throw Ot.from(e,Ot.ERR_BAD_RESPONSE,this,null,Vt(this,"response"));throw e}}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:Bt.classes.FormData,Blob:Bt.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};function $t(e,t){const n=this||Wt,o=t||n,r=wt.from(o.headers);let i=o.data;return dt.forEach(e,function(e){i=e.call(n,i,r.normalize(),t?t.status:void 0)}),r.normalize(),i}function Gt(e){return!(!e||!e.__CANCEL__)}dt.forEach(["delete","get","head","post","put","patch","query"],e=>{Wt.headers[e]={}});let Jt=class extends Ot{constructor(e,t,n){super(null==e?"canceled":e,Ot.ERR_CANCELED,t,n),this.name="CanceledError",this.__CANCEL__=!0}};function Kt(e,t,n){const o=n.config.validateStatus;n.status&&o&&!o(n.status)?t(new Ot("Request failed with status code "+n.status,n.status>=400&&n.status<500?Ot.ERR_BAD_REQUEST:Ot.ERR_BAD_RESPONSE,n.config,n.request,n)):e(n)}const Zt=(e,t,n=3)=>{let o=0;const r=function(e,t){e=e||10;const n=new Array(e),o=new Array(e);let r,i=0,s=0;return t=void 0!==t?t:1e3,function(a){const l=Date.now(),u=o[s];r||(r=l),n[i]=a,o[i]=l;let c=s,d=0;for(;c!==i;)d+=n[c++],c%=e;if(i=(i+1)%e,i===s&&(s=(s+1)%e),l-r<t)return;const p=u&&l-u;return p?Math.round(1e3*d/p):void 0}}(50,250);return function(e,t){let n,o,r=0,i=1e3/t;const s=(t,i=Date.now())=>{r=i,n=null,o&&(clearTimeout(o),o=null),e(...t)};return[(...e)=>{const t=Date.now(),a=t-r;a>=i?s(e,t):(n=e,o||(o=setTimeout(()=>{o=null,s(n)},i-a)))},()=>n&&s(n)]}(n=>{if(!n||"number"!=typeof n.loaded)return;const i=n.loaded,s=n.lengthComputable?n.total:void 0,a=null!=s?Math.min(i,s):i,l=Math.max(0,a-o),u=r(l);o=Math.max(o,a);e({loaded:a,total:s,progress:s?a/s:void 0,bytes:l,rate:u||void 0,estimated:u&&s?(s-a)/u:void 0,event:n,lengthComputable:null!=s,[t?"download":"upload"]:!0})},n)},Xt=(e,t)=>{const n=null!=e;return[o=>t[0]({lengthComputable:n,total:e,loaded:o}),t[1]]},Qt=e=>(...t)=>dt.asap(()=>e(...t));var Yt=Bt.hasStandardBrowserEnv?((e,t)=>n=>(n=new URL(n,Bt.origin),e.protocol===n.protocol&&e.host===n.host&&(t||e.port===n.port)))(new URL(Bt.origin),Bt.navigator&&/(msie|trident)/i.test(Bt.navigator.userAgent)):()=>!0,en=Bt.hasStandardBrowserEnv?{write(e,t,n,o,r,i,s){if("undefined"==typeof document)return;const a=[`${e}=${encodeURIComponent(t)}`];dt.isNumber(n)&&a.push(`expires=${new Date(n).toUTCString()}`),dt.isString(o)&&a.push(`path=${o}`),dt.isString(r)&&a.push(`domain=${r}`),!0===i&&a.push("secure"),dt.isString(s)&&a.push(`SameSite=${s}`),document.cookie=a.join("; ")},read(e){if("undefined"==typeof document)return null;const t=document.cookie.split(";");for(let n=0;n<t.length;n++){const o=t[n].replace(/^\s+/,""),r=o.indexOf("=");if(-1!==r&&o.slice(0,r)===e)return decodeURIComponent(o.slice(r+1))}return null},remove(e){this.write(e,"",Date.now()-864e5,"/")}}:{write(){},read:()=>null,remove(){}};function tn(e,t,n){let o=!("string"==typeof(r=t)&&/^([a-z][a-z\d+\-.]*:)?\/\//i.test(r));var r;return e&&(o||!1===n)?function(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}(e,t):t}const nn=e=>e instanceof wt?{...e}:e;function on(e,t){t=t||{};const n=Object.create(null);function o(e,t,n,o){return dt.isPlainObject(e)&&dt.isPlainObject(t)?dt.merge.call({caseless:o},e,t):dt.isPlainObject(t)?dt.merge({},t):dt.isArray(t)?t.slice():t}function r(e,t,n,r){return dt.isUndefined(t)?dt.isUndefined(e)?void 0:o(void 0,e,0,r):o(e,t,0,r)}function i(e,t){if(!dt.isUndefined(t))return o(void 0,t)}function s(e,t){return dt.isUndefined(t)?dt.isUndefined(e)?void 0:o(void 0,e):o(void 0,t)}function a(n,r,i){return dt.hasOwnProp(t,i)?o(n,r):dt.hasOwnProp(e,i)?o(void 0,n):void 0}Object.defineProperty(n,"hasOwnProperty",{__proto__:null,value:Object.prototype.hasOwnProperty,enumerable:!1,writable:!0,configurable:!0});const l={url:i,method:i,data:i,baseURL:s,transformRequest:s,transformResponse:s,paramsSerializer:s,timeout:s,timeoutMessage:s,withCredentials:s,withXSRFToken:s,adapter:s,responseType:s,xsrfCookieName:s,xsrfHeaderName:s,onUploadProgress:s,onDownloadProgress:s,decompress:s,maxContentLength:s,maxBodyLength:s,beforeRedirect:s,transport:s,httpAgent:s,httpsAgent:s,cancelToken:s,socketPath:s,allowedSocketPaths:s,responseEncoding:s,validateStatus:a,headers:(e,t,n)=>r(nn(e),nn(t),0,!0)};return dt.forEach(Object.keys({...e,...t}),function(o){if("__proto__"===o||"constructor"===o||"prototype"===o)return;const i=dt.hasOwnProp(l,o)?l[o]:r,s=i(dt.hasOwnProp(e,o)?e[o]:void 0,dt.hasOwnProp(t,o)?t[o]:void 0,o);dt.isUndefined(s)&&i!==a||(n[o]=s)}),n}const rn=["content-type","content-length"];function sn(e){const t=on({},e),n=e=>dt.hasOwnProp(t,e)?t[e]:void 0,o=n("data");let r=n("withXSRFToken");const i=n("xsrfHeaderName"),s=n("xsrfCookieName");let a=n("headers");const l=n("auth"),u=n("baseURL"),c=n("allowAbsoluteUrls"),d=n("url");var p;if(t.headers=a=wt.from(a),t.url=Tt(tn(u,d,c),n("params"),n("paramsSerializer")),l&&a.set("Authorization","Basic "+btoa((l.username||"")+":"+(l.password?(p=l.password,encodeURIComponent(p).replace(/%([0-9A-F]{2})/gi,(e,t)=>String.fromCharCode(parseInt(t,16)))):""))),dt.isFormData(o)&&(Bt.hasStandardBrowserEnv||Bt.hasStandardBrowserWebWorkerEnv||dt.isReactNative(o)?a.setContentType(void 0):dt.isFunction(o.getHeaders)&&function(e,t,n){"content-only"===n?Object.entries(t).forEach(([t,n])=>{rn.includes(t.toLowerCase())&&e.set(t,n)}):e.set(t)}(a,o.getHeaders(),n("formDataHeaderPolicy"))),Bt.hasStandardBrowserEnv){dt.isFunction(r)&&(r=r(t));if(!0===r||null==r&&Yt(t.url)){const e=i&&s&&en.read(s);e&&a.set(i,e)}}return t}var an="undefined"!=typeof XMLHttpRequest&&function(e){return new Promise(function(t,n){const o=sn(e);let r=o.data;const i=wt.from(o.headers).normalize();let s,a,l,u,c,{responseType:d,onUploadProgress:p,onDownloadProgress:f}=o;function h(){u&&u(),c&&c(),o.cancelToken&&o.cancelToken.unsubscribe(s),o.signal&&o.signal.removeEventListener("abort",s)}let g=new XMLHttpRequest;function b(){if(!g)return;const o=wt.from("getAllResponseHeaders"in g&&g.getAllResponseHeaders());Kt(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:o,config:e,request:g}),g=null}g.open(o.method.toUpperCase(),o.url,!0),g.timeout=o.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 Ot("Request aborted",Ot.ECONNABORTED,e,g)),h(),g=null)},g.onerror=function(t){const o=t&&t.message?t.message:"Network Error",r=new Ot(o,Ot.ERR_NETWORK,e,g);r.event=t||null,n(r),h(),g=null},g.ontimeout=function(){let t=o.timeout?"timeout of "+o.timeout+"ms exceeded":"timeout exceeded";const r=o.transitional||Lt;o.timeoutErrorMessage&&(t=o.timeoutErrorMessage),n(new Ot(t,r.clarifyTimeoutError?Ot.ETIMEDOUT:Ot.ECONNABORTED,e,g)),h(),g=null},void 0===r&&i.setContentType(null),"setRequestHeader"in g&&dt.forEach(bt(i),function(e,t){g.setRequestHeader(t,e)}),dt.isUndefined(o.withCredentials)||(g.withCredentials=!!o.withCredentials),d&&"json"!==d&&(g.responseType=o.responseType),f&&([l,c]=Zt(f,!0),g.addEventListener("progress",l)),p&&g.upload&&([a,u]=Zt(p),g.upload.addEventListener("progress",a),g.upload.addEventListener("loadend",u)),(o.cancelToken||o.signal)&&(s=t=>{g&&(n(!t||t.type?new Jt(null,e,g):t),g.abort(),h(),g=null)},o.cancelToken&&o.cancelToken.subscribe(s),o.signal&&(o.signal.aborted?s():o.signal.addEventListener("abort",s)));const m=function(e){const t=/^([-+\w]{1,25}):(?:\/\/)?/.exec(e);return t&&t[1]||""}(o.url);!m||Bt.protocols.includes(m)?g.send(r||null):n(new Ot("Unsupported protocol "+m+":",Ot.ERR_BAD_REQUEST,e))})};const ln=(e,t)=>{if(e=e?e.filter(Boolean):[],!t&&!e.length)return;const n=new AbortController;let o=!1;const r=function(e){if(!o){o=!0,s();const t=e instanceof Error?e:this.reason;n.abort(t instanceof Ot?t:new Jt(t instanceof Error?t.message:t))}};let i=t&&setTimeout(()=>{i=null,r(new Ot(`timeout of ${t}ms exceeded`,Ot.ETIMEDOUT))},t);const s=()=>{e&&(i&&clearTimeout(i),i=null,e.forEach(e=>{e.unsubscribe?e.unsubscribe(r):e.removeEventListener("abort",r)}),e=null)};e.forEach(e=>e.addEventListener("abort",r));const{signal:a}=n;return a.unsubscribe=()=>dt.asap(s),a},un=function*(e,t){let n=e.byteLength;if(n<t)return void(yield e);let o,r=0;for(;r<n;)o=r+t,yield e.slice(r,o),r=o},cn=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()}},dn=(e,t,n,o)=>{const r=async function*(e,t){for await(const n of cn(e))yield*un(n,t)}(e,t);let i,s=0,a=e=>{i||(i=!0,o&&o(e))};return new ReadableStream({async pull(e){try{const{done:t,value:o}=await r.next();if(t)return a(),void e.close();let i=o.byteLength;if(n){let e=s+=i;n(e)}e.enqueue(new Uint8Array(o))}catch(e){throw a(e),e}},cancel:e=>(a(e),r.return())},{highWaterMark:2})};const pn="1.17.0",{isFunction:fn}=dt,hn=e=>{if(!dt.isString(e))return e;try{return decodeURIComponent(e)}catch(t){return e}},gn=(e,...t)=>{try{return!!e(...t)}catch(e){return!1}},bn=e=>{const t=void 0!==dt.global&&null!==dt.global?dt.global:globalThis,{ReadableStream:n,TextEncoder:o}=t;e=dt.merge.call({skipUndefined:!0},{Request:t.Request,Response:t.Response},e);const{fetch:r,Request:i,Response:s}=e,a=r?fn(r):"function"==typeof fetch,l=fn(i),u=fn(s);if(!a)return!1;const c=a&&fn(n),d=a&&("function"==typeof o?(p=new o,e=>p.encode(e)):async e=>new Uint8Array(await new i(e).arrayBuffer()));var p;const f=l&&c&&gn(()=>{let e=!1;const t=new i(Bt.origin,{body:new n,method:"POST",get duplex(){return e=!0,"half"}}),o=t.headers.has("Content-Type");return null!=t.body&&t.body.cancel(),e&&!o}),h=u&&c&&gn(()=>dt.isReadableStream(new s("").body)),g={stream:h&&(e=>e.body)};a&&["text","arrayBuffer","blob","formData","stream"].forEach(e=>{!g[e]&&(g[e]=(t,n)=>{let o=t&&t[e];if(o)return o.call(t);throw new Ot(`Response type '${e}' is not supported`,Ot.ERR_NOT_SUPPORT,n)})});const b=async(e,t)=>{const n=dt.toFiniteNumber(e.getContentLength());return null==n?(async e=>{if(null==e)return 0;if(dt.isBlob(e))return e.size;if(dt.isSpecCompliantForm(e)){const t=new i(Bt.origin,{method:"POST",body:e});return(await t.arrayBuffer()).byteLength}return dt.isArrayBufferView(e)||dt.isArrayBuffer(e)?e.byteLength:(dt.isURLSearchParams(e)&&(e+=""),dt.isString(e)?(await d(e)).byteLength:void 0)})(t):n};return async e=>{let{url:t,method:n,data:a,signal:u,cancelToken:c,timeout:d,onDownloadProgress:p,onUploadProgress:m,responseType:y,headers:_,withCredentials:v="same-origin",fetchOptions:w,maxContentLength:S,maxBodyLength:O}=sn(e);const E=dt.isNumber(S)&&S>-1,k=dt.isNumber(O)&&O>-1;let x=r||fetch;y=y?(y+"").toLowerCase():"text";let R=ln([u,c&&c.toAbortSignal()],d),j=null;const P=R&&R.unsubscribe&&(()=>{R.unsubscribe()});let C;try{let r;const u=(M="auth",dt.hasOwnProp(e,M)?e[M]:void 0);if(u){const e=u.username||"";r={username:e,password:u.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,Bt.origin);if(!r&&(e.username||e.password)){const t=hn(e.username);r={username:t,password:hn(e.password)}}(e.username||e.password)&&(e.username="",e.password="",t=e.href)}if(r&&(_.delete("authorization"),_.set("Authorization","Basic "+btoa((N=(r.username||"")+":"+(r.password||""),encodeURIComponent(N).replace(/%([0-9A-F]{2})/gi,(e,t)=>String.fromCharCode(parseInt(t,16))))))),E&&"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),o=e.slice(t+1);if(/;base64/i.test(n)){let e=o.length;const t=o.length;for(let n=0;n<t;n++)if(37===o.charCodeAt(n)&&n+2<t){const t=o.charCodeAt(n+1),r=o.charCodeAt(n+2);(t>=48&&t<=57||t>=65&&t<=70||t>=97&&t<=102)&&(r>=48&&r<=57||r>=65&&r<=70||r>=97&&r<=102)&&(e-=2,n+=2)}let n=0,r=t-1;const i=e=>e>=2&&37===o.charCodeAt(e-2)&&51===o.charCodeAt(e-1)&&(68===o.charCodeAt(e)||100===o.charCodeAt(e));r>=0&&(61===o.charCodeAt(r)?(n++,r--):i(r)&&(n++,r-=3)),1===n&&r>=0&&(61===o.charCodeAt(r)||i(r))&&n++;const s=3*Math.floor(e/4)-(n||0);return s>0?s:0}if("undefined"!=typeof Buffer&&"function"==typeof Buffer.byteLength)return Buffer.byteLength(o,"utf8");let r=0;for(let e=0,t=o.length;e<t;e++){const n=o.charCodeAt(e);if(n<128)r+=1;else if(n<2048)r+=2;else if(n>=55296&&n<=56319&&e+1<t){const t=o.charCodeAt(e+1);t>=56320&&t<=57343?(r+=4,e++):r+=3}else r+=3}return r}(t);if(n>S)throw new Ot("maxContentLength size of "+S+" exceeded",Ot.ERR_BAD_RESPONSE,e,j)}if(k&&"get"!==n&&"head"!==n){const t=await b(_,a);if("number"==typeof t&&isFinite(t)&&t>O)throw new Ot("Request body larger than maxBodyLength limit",Ot.ERR_BAD_REQUEST,e,j)}if(m&&f&&"get"!==n&&"head"!==n&&0!==(C=await b(_,a))){let e,n=new i(t,{method:"POST",body:a,duplex:"half"});if(dt.isFormData(a)&&(e=n.headers.get("content-type"))&&_.setContentType(e),n.body){const[e,t]=Xt(C,Zt(Qt(m)));a=dn(n.body,65536,e,t)}}dt.isString(v)||(v=v?"include":"omit");const c=l&&"credentials"in i.prototype;if(dt.isFormData(a)){const e=_.getContentType();e&&/^multipart\/form-data/i.test(e)&&!/boundary=/i.test(e)&&_.delete("content-type")}_.set("User-Agent","axios/"+pn,!1);const d={...w,signal:R,method:n.toUpperCase(),headers:bt(_.normalize()),body:a,duplex:"half",credentials:c?v:void 0};j=l&&new i(t,d);let T=await(l?x(j,w):x(t,d));if(E){const t=dt.toFiniteNumber(T.headers.get("content-length"));if(null!=t&&t>S)throw new Ot("maxContentLength size of "+S+" exceeded",Ot.ERR_BAD_RESPONSE,e,j)}const A=h&&("stream"===y||"response"===y);if(h&&T.body&&(p||E||A&&P)){const t={};["status","statusText","headers"].forEach(e=>{t[e]=T[e]});const n=dt.toFiniteNumber(T.headers.get("content-length")),[o,r]=p&&Xt(n,Zt(Qt(p),!0))||[];let i=0;const a=t=>{if(E&&(i=t,i>S))throw new Ot("maxContentLength size of "+S+" exceeded",Ot.ERR_BAD_RESPONSE,e,j);o&&o(t)};T=new s(dn(T.body,65536,a,()=>{r&&r(),P&&P()}),t)}y=y||"text";let L=await g[dt.findKey(g,y)||"text"](T,e);if(E&&!h&&!A){let t;if(null!=L&&("number"==typeof L.byteLength?t=L.byteLength:"number"==typeof L.size?t=L.size:"string"==typeof L&&(t="function"==typeof o?(new o).encode(L).byteLength:L.length)),"number"==typeof t&&t>S)throw new Ot("maxContentLength size of "+S+" exceeded",Ot.ERR_BAD_RESPONSE,e,j)}return!A&&P&&P(),await new Promise((t,n)=>{Kt(t,n,{data:L,headers:wt.from(T.headers),status:T.status,statusText:T.statusText,config:e,request:j})})}catch(t){if(P&&P(),R&&R.aborted&&R.reason instanceof Ot){const n=R.reason;throw n.config=e,j&&(n.request=j),t!==n&&(n.cause=t),n}if(t&&"TypeError"===t.name&&/Load failed|fetch/i.test(t.message))throw Object.assign(new Ot("Network Error",Ot.ERR_NETWORK,e,j,t&&t.response),{cause:t.cause||t});throw Ot.from(t,t&&t.code,e,j,t&&t.response)}var N,M}},mn=new Map,yn=e=>{let t=e&&e.env||{};const{fetch:n,Request:o,Response:r}=t,i=[o,r,n];let s,a,l=i.length,u=mn;for(;l--;)s=i[l],a=u.get(s),void 0===a&&u.set(s,a=l?new Map:bn(t)),u=a;return a};yn();const _n={http:null,xhr:an,fetch:{get:yn}};dt.forEach(_n,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{__proto__:null,value:t})}catch(e){}Object.defineProperty(e,"adapterName",{__proto__:null,value:t})}});const vn=e=>`- ${e}`,wn=e=>dt.isFunction(e)||null===e||!1===e;var Sn={getAdapter:function(e,t){e=dt.isArray(e)?e:[e];const{length:n}=e;let o,r;const i={};for(let s=0;s<n;s++){let n;if(o=e[s],r=o,!wn(o)&&(r=_n[(n=String(o)).toLowerCase()],void 0===r))throw new Ot(`Unknown adapter '${n}'`);if(r&&(dt.isFunction(r)||(r=r.get(t))))break;i[n||"#"+s]=r}if(!r){const e=Object.entries(i).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(vn).join("\n"):" "+vn(e[0]):"as no adapter specified";throw new Ot("There is no suitable adapter to dispatch the request "+t,"ERR_NOT_SUPPORT")}return r},adapters:_n};function On(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new Jt(null,e)}function En(e){On(e),e.headers=wt.from(e.headers),e.data=$t.call(e,e.transformRequest),-1!==["post","put","patch"].indexOf(e.method)&&e.headers.setContentType("application/x-www-form-urlencoded",!1);return Sn.getAdapter(e.adapter||Wt.adapter,e)(e).then(function(t){On(e),e.response=t;try{t.data=$t.call(e,e.transformResponse,t)}finally{delete e.response}return t.headers=wt.from(t.headers),t},function(t){if(!Gt(t)&&(On(e),t&&t.response)){e.response=t.response;try{t.response.data=$t.call(e,e.transformResponse,t.response)}finally{delete e.response}t.response.headers=wt.from(t.response.headers)}return Promise.reject(t)})}const kn={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{kn[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}});const xn={};kn.transitional=function(e,t,n){function o(e,t){return"[Axios v"+pn+"] Transitional option '"+e+"'"+t+(n?". "+n:"")}return(n,r,i)=>{if(!1===e)throw new Ot(o(r," has been removed"+(t?" in "+t:"")),Ot.ERR_DEPRECATED);return t&&!xn[r]&&(xn[r]=!0,console.warn(o(r," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(n,r,i)}},kn.spelling=function(e){return(t,n)=>(console.warn(`${n} is likely a misspelling of ${e}`),!0)};var Rn={assertOptions:function(e,t,n){if("object"!=typeof e)throw new Ot("options must be an object",Ot.ERR_BAD_OPTION_VALUE);const o=Object.keys(e);let r=o.length;for(;r-- >0;){const i=o[r],s=Object.prototype.hasOwnProperty.call(t,i)?t[i]:void 0;if(s){const t=e[i],n=void 0===t||s(t,i,e);if(!0!==n)throw new Ot("option "+i+" must be "+n,Ot.ERR_BAD_OPTION_VALUE);continue}if(!0!==n)throw new Ot("Unknown option "+i,Ot.ERR_BAD_OPTION)}},validators:kn};const jn=Rn.validators;let Pn=class{constructor(e){this.defaults=e||{},this.interceptors={request:new At,response:new At}}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"),o=-1===t?-1:n.indexOf("\n",t+1),r=-1===o?"":n.slice(o+1);String(e.stack).endsWith(r)||(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=on(this.defaults,t);const{transitional:n,paramsSerializer:o,headers:r}=t;void 0!==n&&Rn.assertOptions(n,{silentJSONParsing:jn.transitional(jn.boolean),forcedJSONParsing:jn.transitional(jn.boolean),clarifyTimeoutError:jn.transitional(jn.boolean),legacyInterceptorReqResOrdering:jn.transitional(jn.boolean),advertiseZstdAcceptEncoding:jn.transitional(jn.boolean)},!1),null!=o&&(dt.isFunction(o)?t.paramsSerializer={serialize:o}:Rn.assertOptions(o,{encode:jn.function,serialize:jn.function},!0)),void 0!==t.allowAbsoluteUrls||(void 0!==this.defaults.allowAbsoluteUrls?t.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:t.allowAbsoluteUrls=!0),Rn.assertOptions(t,{baseUrl:jn.spelling("baseURL"),withXsrfToken:jn.spelling("withXSRFToken")},!0),t.method=(t.method||this.defaults.method||"get").toLowerCase();let i=r&&dt.merge(r.common,r[t.method]);r&&dt.forEach(["delete","get","head","post","put","patch","query","common"],e=>{delete r[e]}),t.headers=wt.concat(i,r);const s=[];let a=!0;this.interceptors.request.forEach(function(e){if("function"==typeof e.runWhen&&!1===e.runWhen(t))return;a=a&&e.synchronous;const n=t.transitional||Lt;n&&n.legacyInterceptorReqResOrdering?s.unshift(e.fulfilled,e.rejected):s.push(e.fulfilled,e.rejected)});const l=[];let u;this.interceptors.response.forEach(function(e){l.push(e.fulfilled,e.rejected)});let c,d=0;if(!a){const e=[En.bind(this),void 0];for(e.unshift(...s),e.push(...l),c=e.length,u=Promise.resolve(t);d<c;)u=u.then(e[d++],e[d++]);return u}c=s.length;let p=t;for(;d<c;){const e=s[d++],t=s[d++];try{p=e(p)}catch(e){t.call(this,e);break}}try{u=En.call(this,p)}catch(e){return Promise.reject(e)}for(d=0,c=l.length;d<c;)u=u.then(l[d++],l[d++]);return u}getUri(e){return Tt(tn((e=on(this.defaults,e)).baseURL,e.url,e.allowAbsoluteUrls),e.params,e.paramsSerializer)}};dt.forEach(["delete","get","head","options"],function(e){Pn.prototype[e]=function(t,n){return this.request(on(n||{},{method:e,url:t,data:(n||{}).data}))}}),dt.forEach(["post","put","patch","query"],function(e){function t(t){return function(n,o,r){return this.request(on(r||{},{method:e,headers:t?{"Content-Type":"multipart/form-data"}:{},url:n,data:o}))}}Pn.prototype[e]=t(),"query"!==e&&(Pn.prototype[e+"Form"]=t(!0))});const Cn={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(Cn).forEach(([e,t])=>{Cn[t]=e});const Nn=function e(t){const n=new Pn(t),o=ye(Pn.prototype.request,n);return dt.extend(o,Pn.prototype,n,{allOwnKeys:!0}),dt.extend(o,n,null,{allOwnKeys:!0}),o.create=function(n){return e(on(t,n))},o}(Wt);Nn.Axios=Pn,Nn.CanceledError=Jt,Nn.CancelToken=class e{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 o=new Promise(e=>{n.subscribe(e),t=e}).then(e);return o.cancel=function(){n.unsubscribe(t)},o},e(function(e,o,r){n.reason||(n.reason=new Jt(e,o,r),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 t;return{token:new e(function(e){t=e}),cancel:t}}},Nn.isCancel=Gt,Nn.VERSION=pn,Nn.toFormData=jt,Nn.AxiosError=Ot,Nn.Cancel=Nn.CanceledError,Nn.all=function(e){return Promise.all(e)},Nn.spread=function(e){return function(t){return e.apply(null,t)}},Nn.isAxiosError=function(e){return dt.isObject(e)&&!0===e.isAxiosError},Nn.mergeConfig=on,Nn.AxiosHeaders=wt,Nn.formToJSON=e=>Ht(dt.isHTMLForm(e)?new FormData(e):e),Nn.getAdapter=Sn.getAdapter,Nn.HttpStatusCode=Cn,Nn.default=Nn;const{Axios:Mn,AxiosError:Tn,CanceledError:An,isCancel:Ln,CancelToken:In,VERSION:Fn,all:Dn,Cancel:qn,isAxiosError:Un,spread:zn,toFormData:Bn,AxiosHeaders:Hn,HttpStatusCode:Vn,formToJSON:Wn,getAdapter:$n,mergeConfig:Gn,create:Jn}=Nn;function Kn(e,t){return e?Object.keys(e).map(n=>{const o=t||n,r=e[n];return"object"==typeof r?Kn(r,o):`${encodeURIComponent(o)}=${encodeURIComponent(r)}`}).join("&"):""}function Zn(e,t){return Nn.get(encodeURI(e)+(t?(-1===e.search(/\?/)?"?":"&")+Kn(t):""),{timeout:1e4,method:"GET",headers:{Accept:"application/json"}}).then(e=>e.data)}function Xn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,o)}return n}function Qn(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Xn(Object(n),!0).forEach(function(t){H(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Xn(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Yn(e,t,n,o,r,i,s,a){const l=e?e.trim():null;if(null==l||l.length<1||s&&!s.test(l))return Promise.resolve([]);const u=i||"https://api.digitransit.fi/geocoding/v1/search";let c=Qn(Qn(Qn({text:l},t),o),{},{lang:n});if(r&&(c=Qn(Qn({},c),{},{sources:r})),a){const e=a.toString();c=Qn(Qn({},c),{},{layers:e})}return Zn(u,c).then(e=>e.features)}function eo(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,o)}return n}function to(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?eo(Object(n),!0).forEach(function(t){H(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):eo(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function no(e,t){if(!e||e.length<1)return Promise.resolve([]);let n="";const o=e.map(e=>{const t="stop"===e.type?"stop":"station";let o=`gtfs${e.gtfsId.split(":")[0].toLowerCase()}:${t}:GTFS:${e.gtfsId}`;return e.code&&(o+=`#${e.code}`),n+=`${o},`,to(to({},e),{},{gid:o})}).reduce(function(e,t){return e[t.gid]=t,e},{});return Zn(t,{ids:n.slice(0,-1)}).then(e=>e.features.map(e=>({type:"FavouriteStop",properties:{addendum:e.properties.addendum,gid:o[e.properties.gid].gid,code:o[e.properties.gid].code,gtfsId:o[e.properties.gid].gtfsId,lastUpdated:o[e.properties.gid].lastUpdated,favouriteId:o[e.properties.gid].favouriteId,address:e.properties.label,layer:fe(e.properties)?"favouriteStop":"favouriteStation"},geometry:e.geometry})))}function oo(e,t,n){let o=me(e,t,["properties.name","properties.label","properties.address","properties.shortName","properties.longName"]);return n&&(o=o.filter(e=>!n.includes(e.properties.layer))),Promise.resolve(P.default(o,10).map(e=>{const t=to(to({},e),{},{type:"OldSearch",timetableClicked:!1,arrowClicked:!1});return delete t.properties.confidence,t}))}const ro=["route-TRAM","route-BUS","route-RAIL","route-FERRY","route-SUBWAY","route-AIRPLANE","route-FUNICULAR"],io=["venue","address","street"],so=["carpark","bikepark"],ao=["stop","station"];const lo=R.default(function(e,t,n,o,r,i,{input:s},a,l,u){const{getPositions:c,getFavouriteLocations:d,getOldSearches:p,getFavouriteStops:f,parkingAreaSources:h,getLanguage:g,getStopAndStationsQuery:b,getFavouriteVehicleRentalStationsQuery:m,getFavouriteVehicleRentalStations:y,getFavouriteRoutesQuery:_,getFavouriteRoutes:v,getRoutesQuery:w,context:S,isPeliasLocationAware:O,minimalRegexp:E,lineRegexp:k,URL_PELIAS:x,URL_PELIAS_PLACE:R,feedIDs:C,geocodingSearchParams:N,geocodingSources:M,getFutureRoutes:T,cityBikeNetworks:A}=o,L=!e||0===e.length,I=!t||0===t.length,F=c(S),D=[],q={type:"all",term:s,results:[]},U=g(S),z=O&&u?.lat&&u?.lon?{"focus.point.lat":u.lat.toFixed(3),"focus.point.lon":u.lon.toFixed(3)}:{},B=n?n.split("-")[1]:void 0;if(e.includes("CurrentPosition")&&"geolocation-not-supported"!==F.status&&D.push(function(e,t){return"string"!=typeof e||0===e.length?Promise.resolve([{type:"CurrentLocation",address:t.address,lat:t.lat,lon:t.lon,properties:{labelId:"use-own-position",layer:"currentPosition",address:t.address,lat:t.lat,lon:t.lon},geometry:{type:"Point",coordinates:[t.lon,t.lat]}}]):Promise.resolve([])}(s,F)),(L||e.includes("MapPosition"))&&D.push(function(e){return"string"!=typeof e||0===e.length?Promise.resolve([{type:"SelectFromMap",address:"SelectFromMap",lat:null,lon:null,properties:{labelId:"select-from-map",layer:"selectFromMap",address:"SelectFromMap",lat:null,lon:null},geometry:{type:"Point",coordinates:[]}}]):Promise.resolve([])}(s)),e.includes("FutureRoutes")){const e=T(S);D.push(P.default(e,3))}if(e.includes("SelectFromOwnLocations")&&function(e){const t=e.getFavouriteLocations(e.context);if(t?.length>0)return!0;const n=e.getFavouriteVehicleRentalStations(e.context);if(n?.length>0)return!0;const o=e.getFavouriteStops(e.context);return o?.length>0}(o)&&D.push(function(e){return"string"!=typeof e||0===e.length?Promise.resolve([{type:"SelectFromOwnLocations",address:"SelectFromOwnLocations",lat:null,lon:null,properties:{labelId:"select-from-own-locations",layer:"ownLocations",address:"selectFromOwnLocations",lat:null,lon:null},geometry:{type:"Point",coordinates:[]}}]):Promise.resolve([])}(s)),L||e.includes("Locations")){const n=N;if(t.includes("Favourite")){const e=d(S);D.push(function(e,t){return Promise.resolve(me(e,t,["address","name"]).map(e=>({type:"FavouritePlace",properties:to(to({},e),{},{label:e.name,layer:"favouritePlace"}),geometry:{type:"Point",coordinates:[e.lon,e.lat]}})))}(e,s)),t.includes("Back")&&D.push(Promise.resolve([{type:"back",address:"back",lat:null,lon:null,properties:{labelId:"back",layer:"back",address:"back",lat:null,lon:null},geometry:{type:"Point",coordinates:[]}}]))}if(I||t.includes("Datasource")){const t=["venue","address","street"];e.includes("Stations")&&t.push("station"),D.push(Yn(s,n,U,z,M.join(","),x,E,t))}if(I||t.includes("History")){const e=p(S,"endpoint"),t=["bikestation"];t.push(...ao),t.push(...ro),t.push(...so),D.push(oo(e,s,t))}}if(L||e.includes("ParkingAreas")){if(I||t.includes("Datasource")){const e=N;i&&10!==i&&(e.size=i);const t=["carpark","bikepark"],n=h?h.join(","):null;D.push(Yn(s,e,U,z,n,x,E,t).then(e=>r?r(e,B):e))}if(I||t.includes("History")){const e=p(S),t=["bikestation"];t.push(...ao),t.push(...ro),t.push(...io),D.push(oo(e,s,t))}}const H=e.includes("Stops"),V=e.includes("Stations");if(L||H||V){if(t.includes("Favourite")){const e=f(S);let t;t=e.every(e=>"station"===e.type)?no(e,R).then(e=>r?r(e,B):e):b(e).then(e=>no(e,R)).then(e=>r?r(e,B):e),D.push(function(e,t,n,o){return e.then(e=>me(e.filter(e=>"stop"===e.type?n:o),t,["properties.name","properties.name","properties.address"]))}(t,s,H,V))}if(I||t.includes("Datasource")){const t=[];H&&t.push("stop"),V&&t.push("station");const n=i&&10!==i?{size:i}:{};N&&N["boundary.country"]&&(n["boundary.country"]=N["boundary.country"]),(L||e.includes("Locations"))&&(n.dedupestops=1);const o=C.map(e=>`gtfs${e}`).join(",");D.push(Yn(s,n,U,z,o,x,E,t).then(e=>r?r(e,B):e))}if(I||t.includes("History")){const e=p(S).filter(e=>!e.properties.gid||e.properties.gid.includes("GTFS:")),t=["bikestation"];t.push(...ro),t.push(...io),t.push(...so),H||t.push("stop"),V||t.push("station"),n?D.push(oo(e,s,t).then(e=>r?r(e,B):e)):D.push(oo(e,s,t))}}if(L||e.includes("Routes")){if(t.includes("Favourite")){const e=v(S);D.push(_(e,s,B,l).then(e=>r?r(e,B,"Routes"):e))}if(D.push(w(s,C,n,l).then(e=>r?r(e,B,"Routes"):e)),I||t.includes("History")){const e=p(S),t=["bikestation"];n&&t.push(...ro.filter(e=>!(e===n))),t.push(...ao),t.push(...io),t.push(...so),D.push(oo(e,s,t).then(e=>r?r(e,B,"Routes"):e))}}if(L||e.includes("VehicleRentalStations")){if(t.includes("Favourite")){const e=y(S);D.push(m(e,s))}if(I||t.includes("Datasource")){const e=["bikestation"],t=i&&10!==i?{size:i}:{};D.push(Yn(s,t,U,z,A.join(","),x,E,e).then(e=>r?r(e,B,"VehicleRentalStations"):e))}if(I||t.includes("History")){const e=p(S),t=[...ao];t.push(...ro),t.push(...io),t.push(...so),D.push(oo(e,s,t))}}Promise.all(D).then(j.default).then(e=>{q.results=e}).catch(e=>{q.error=e}).then(()=>{a(to(to({},q),{},{results:ge(k,q.results,s)}))})},300,{leading:!0}),uo=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 co(e,t){void 0===t&&(t={});var n=t.insertAt;if(e&&"undefined"!=typeof document){var o=document.head||document.getElementsByTagName("head")[0],r=document.createElement("style");r.type="text/css","top"===n&&o.firstChild?o.insertBefore(r,o.firstChild):o.appendChild(r),r.styleSheet?r.styleSheet.cssText=e:r.appendChild(document.createTextNode(e))}}uo.init();var po={container:"styles_container__phMWv",input:"styles_input__XOlHi",favourite:"styles_favourite__iMVL9",thin:"styles_thin__5MIo-",hasValue:"styles_hasValue__9E-Ar",suggestionsContainerOpen:"styles_suggestionsContainerOpen__EgHNQ",suggestionsContainer:"styles_suggestionsContainer__95aNk",suggestionsList:"styles_suggestionsList__Ste1F",suggestion:"styles_suggestion__HPcxK",suggestionHighlighted:"styles_suggestionHighlighted__2nTM-","autosuggest-input-container":"styles_autosuggest-input-container__w2GR-",origin:"styles_origin__RKtku",destination:"styles_destination__WvxGK","stop-route-station":"styles_stop-route-station__bi6MC","autosuggest-input-icon":"styles_autosuggest-input-icon__-lP2J","origin-stop-near-you":"styles_origin-stop-near-you__fBzyH","clear-input":"styles_clear-input__5p3Wu","sr-only":"styles_sr-only__7vJvw",hidden:"styles_hidden__Ff9DG"};co("input[type=text] {\n margin: 0;\n}\n\n.styles_container__phMWv {\n display: flex;\n width: 100%;\n}\n.styles_container__phMWv .styles_input__XOlHi.styles_favourite__iMVL9 {\n padding-left: 47px;\n}\n.styles_container__phMWv .styles_input__XOlHi.styles_thin__5MIo- {\n height: 34px;\n}\n.styles_container__phMWv .styles_input__XOlHi {\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 appearance: none;\n}\n.styles_container__phMWv .styles_input__XOlHi: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__phMWv .styles_input__XOlHi {\n font-size: 15px;\n height: 44px;\n padding-left: 49px;\n }\n}\n.styles_container__phMWv .styles_input__XOlHi::placeholder {\n color: #666;\n opacity: 1;\n font-size: 15px;\n}\n\n.styles_hasValue__9E-Ar {\n color: #333;\n}\n\n.styles_suggestionsContainerOpen__EgHNQ {\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__95aNk {\n background-color: white;\n z-index: 20;\n}\n.styles_suggestionsContainer__95aNk .styles_suggestionsList__Ste1F {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n background: white;\n}\n.styles_suggestionsContainer__95aNk .styles_suggestionsList__Ste1F li:hover {\n background: #f2f5f7;\n}\n\n.styles_suggestion__HPcxK {\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__2nTM- {\n background-color: #f2f5f7;\n}\n\n.styles_autosuggest-input-container__w2GR- {\n position: relative;\n width: 100%;\n}\n.styles_autosuggest-input-container__w2GR-.styles_origin__RKtku {\n z-index: 16;\n}\n.styles_autosuggest-input-container__w2GR-.styles_destination__WvxGK {\n z-index: 10;\n}\n.styles_autosuggest-input-container__w2GR-.styles_stop-route-station__bi6MC {\n z-index: 9;\n}\n\n.styles_autosuggest-input-icon__-lP2J {\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__-lP2J svg {\n width: 16px;\n height: 24px;\n}\n.styles_autosuggest-input-icon__-lP2J.styles_origin__RKtku svg {\n color: #4ea700;\n fill: #4ea700;\n width: 16px;\n height: 16px;\n}\n.styles_autosuggest-input-icon__-lP2J.styles_destination__WvxGK svg {\n fill: #ec5188;\n width: 16px;\n height: 24px;\n}\n.styles_autosuggest-input-icon__-lP2J.styles_stop-route-station__bi6MC svg, .styles_autosuggest-input-icon__-lP2J.styles_favourite__iMVL9 svg {\n fill: #888;\n width: 16px;\n height: 16px;\n}\n.styles_autosuggest-input-icon__-lP2J.styles_origin-stop-near-you__fBzyH svg {\n fill: #888;\n width: 16px;\n height: 16px;\n}\n\nbutton.styles_clear-input__5p3Wu {\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__5p3Wu svg {\n fill: var(--color);\n width: 16px;\n height: 16px;\n}\nbutton.styles_clear-input__5p3Wu: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__5p3Wu:active {\n background-color: transparent;\n color: inherit;\n}\nbutton.styles_clear-input__5p3Wu:hover {\n background-color: transparent;\n color: inherit;\n}\n\n.styles_sr-only__7vJvw:not(:focus, :active) {\n clip: rect(0 0 0 0);\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__Ff9DG {\n visibility: hidden;\n}");const fo=e=>e.localadmin||e.localadmin||e.address&&e.address.lastIndexOf(",")<e.address.length-2&&e.address.substring(e.address.lastIndexOf(",")+2)||"",ho=({id:e,code:t})=>t||(void 0!==e&&void 0!==e.indexOf&&-1!==e.indexOf("#")?e.substring(e.indexOf("#")+1):void 0),go=L.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,o=e.address,[n||o&&o.split(",")[0],"string"==typeof o?o.replace(new RegExp(`${I.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(`${I.default(e.name)}(,)?( )?`),"")];case"favouriteStop":case"stop":return t?[e.name||e.label||e.address&&e.address.split(",")[0],fo(e)]:[e.name,e.id,ho(e),fo(e)];default:return[e.name||e.label||e.address&&e.address.split(",")[0],fo(e)]}var n,o},(e,t)=>{const n=F.default(e);return n.plain=t,n});const bo=e=>{const t=e&&(e.key||e.which||e.keyCode)||"";return!(!t||![13," ","Spacebar"].concat([32,"Enter"]).includes(t))&&(e.preventDefault(),!0)},mo=e=>"origin"===e||"destination"===e||"via-point"===e||"origin-stop-near-you"===e,yo=(e,t,n)=>{if(!n)return;if(!e||!e.GTFS.platform)return;const{modes:o,platform:r}=e.GTFS;return[o&&"RAIL"===o[0]?n("track",{lng:t}):n("platform",{lng:t}),r]};function _o(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,[r,i]=go(e.properties,!0);if(e.properties.layer.toLowerCase().includes("bikerental")||e.properties.layer.toLowerCase().includes("bikestation")){o=n("vehiclerentalstation",{lng:t});return[o,r,void 0,e.properties.labelId]}if("bikepark"===e.properties.layer)return o=n("bikepark",{lng:t}),[o,r,void 0,void 0];if("carpark"===e.properties.layer)return o=n("carpark",{lng:t}),[o,r,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)){const s=ho(e.properties),a=e.properties.addendum?.GTFS.modes,l=yo(e.properties.addendum,t,n);return[o,be(r,s),i,s,a,l]}if("favouriteStop"===e.properties.layer||"favouriteStation"===e.properties.layer){const{address:n,code:s}=e.properties;return[o,n?be(n.split(",")[0],s):r,i,s,void 0,yo(e.properties.addendum,t)]}return[o,r,i]}const{origin:o,destination:r}=e.properties,i=o.locality?`, ${o.locality} foobar`:"",s=r.locality?`, ${r.locality}`:"",a=o.name,l=r.name;return[n("future-route",{lng:t}),`${n("origin",{lng:t})} ${a}${i} ${n("destination",{lng:t})} ${l}${s}`,e.translatedText]}function vo(e,t,n){if(!n)return;const o=_.DateTime.fromSeconds(Number(e.properties.time)),r=_.DateTime.now();let i=e.properties.arriveBy?n("arrival",{lng:t}):n("departure",{lng:t});return i=o.hasSame(r,"day")?`${i} ${n("today-at")}`:o.hasSame(r.plus({days:1}),"day")?`${i} ${n("tomorrow-at",{lng:t})}`:`${i} ${o.toFormat("ccc d.L.")}`,i=`${i} ${o.toFormat("HH:mm")}`,i}const wo=e=>"SelectFromOwnLocations"===e.type||"back"===e.type?"":function(e){const t=go(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),So=({suggestions:e,t:t,lng:n})=>{let o=[];const r=e[0];return r&&(r.type&&r.type.includes("Favourite")&&o.push(t("favourite",{lng:n})),o=o.concat(_o(e[0],n))),[...new Set(o)].join(" - ")};function Oo(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var Eo,ko={exports:{}};
2
- /*! For license information please see index.js.LICENSE.txt */var xo=(Eo||(Eo=1,function(e){var t;"undefined"!=typeof self&&self,e.exports=(t=k.default,function(){var e={888:function(e,t,n){var o,r;r=void 0!==n.g?n.g:"undefined"!=typeof window?window:this,o=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},o=function(e){"#"===e.charAt(0)&&(e=e.substr(1));for(var t,n=String(e),o=n.length,r=-1,i="",s=n.charCodeAt(0);++r<o;){if(0===(t=n.charCodeAt(r)))throw new InvalidCharacterError("Invalid character: the input contains U+0000.");i+=t>=1&&t<=31||127==t||0===r&&t>=48&&t<=57||1===r&&t>=48&&t<=57&&45===s?"\\"+t.toString(16)+" ":t>=128||45===t||95===t||t>=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122?n.charAt(r):"\\"+n.charAt(r)}return"#"+i},r=function(){return Math.max(document.body.scrollHeight,document.documentElement.scrollHeight,document.body.offsetHeight,document.documentElement.offsetHeight,document.body.clientHeight,document.documentElement.clientHeight)},i=function(t){return t?(n=t,parseInt(e.getComputedStyle(n).height,10)+t.offsetTop):0;var n},s=function(t,n,o){0===t&&document.body.focus(),o||(t.focus(),document.activeElement!==t&&(t.setAttribute("tabindex","-1"),t.focus(),t.style.outline="none"),e.scrollTo(0,n))},a=function(t,n,o,r){if(n.emitEvents&&"function"==typeof e.CustomEvent){var i=new CustomEvent(t,{bubbles:!0,detail:{anchor:o,toggle:r}});document.dispatchEvent(i)}};return function(l,u){var c,d,p,f,h={cancelScroll:function(e){cancelAnimationFrame(f),f=null,e||a("scrollCancel",c)},animateScroll:function(o,l,u){h.cancelScroll();var d=n(c||t,u||{}),g="[object Number]"===Object.prototype.toString.call(o),b=g||!o.tagName?null:o;if(g||b){var m=e.pageYOffset;d.header&&!p&&(p=document.querySelector(d.header));var y,_,v,w=i(p),S=g?o:function(t,n,o,i){var s=0;if(t.offsetParent)do{s+=t.offsetTop,t=t.offsetParent}while(t);return s=Math.max(s-n-o,0),i&&(s=Math.min(s,r()-e.innerHeight)),s}(b,w,parseInt("function"==typeof d.offset?d.offset(o,l):d.offset,10),d.clip),O=S-m,E=r(),k=0,x=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)}(O,d),R=function(t){y||(y=t),k+=t-y,v=m+O*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,_=(_=0===x?0:k/x)>1?1:_),e.scrollTo(0,Math.floor(v)),function(t,n){var r=e.pageYOffset;if(t==n||r==n||(m<n&&e.innerHeight+r)>=E)return h.cancelScroll(!0),s(o,n,g),a("scrollStop",d,o,l),y=null,f=null,!0}(v,S)||(f=e.requestAnimationFrame(R),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)}(o,g,d),"matchMedia"in e&&e.matchMedia("(prefers-reduced-motion)").matches?s(o,Math.floor(S),!1):(a("scrollStart",d,o,l),h.cancelScroll(!0),e.requestAnimationFrame(R))}}},g=function(t){if(!t.defaultPrevented&&!(0!==t.button||t.metaKey||t.ctrlKey||t.shiftKey)&&"closest"in t.target&&(d=t.target.closest(l))&&"a"===d.tagName.toLowerCase()&&!t.target.closest(c.ignore)&&d.hostname===e.location.hostname&&d.pathname===e.location.pathname&&/#/.test(d.href)){var n,r;try{n=o(decodeURIComponent(d.hash))}catch(e){n=o(d.hash)}if("#"===n){if(!c.topOnEmptyHash)return;r=document.documentElement}else r=document.querySelector(n);(r=r||"#top"!==n?r: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(r,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(o(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,u||{}),p=c.header?document.querySelector(c.header):null,document.addEventListener("click",g,!1),c.updateURL&&c.popstate&&e.addEventListener("popstate",b,!1)}(),h}}(r)}.apply(t,[]),void 0===o||(e.exports=o)},432:function(e,t,n){var o=this&&this.__createBinding||(Object.create?function(e,t,n,o){void 0===o&&(o=n),Object.defineProperty(e,o,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,o){void 0===o&&(o=n),e[o]=t[n]}),r=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||o(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),r(n(47),t),r(n(926),t),r(n(349),t),r(n(137),t),r(n(729),t),r(n(383),t),r(n(450),t),r(n(358),t),r(n(753),t),r(n(869),t),r(n(352),t),r(n(446),t),r(n(164),t),r(n(305),t),r(n(502),t)},349:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useArrowNavigation=void 0;var o=n(156);t.useArrowNavigation=function(e){var t=e.listItems,n=e.onArrowUpOrDown,r=(0,o.useState)(0),i=r[0],s=r[1],a=(0,o.useCallback)(function(e){s(e)},[t]),l=function(e){var o=e.key;if(null==t?void 0:t.length)if("ArrowUp"===o)n&&n(),e.preventDefault(),a(i>0?i-1:t.length-1);else{if("ArrowDown"!==o)return;n&&n(),e.preventDefault(),i<t.length-1?a(i+1):a(0)}};return(0,o.useEffect)(function(){return window.addEventListener("keydown",l),function(){return window.removeEventListener("keydown",l)}}),(0,o.useEffect)(function(){a(0)},[t]),{selectedIndex:i}}},446:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useDebounce=void 0;var o=n(156);t.useDebounce=function(e,t){void 0===t&&(t=300);var n=(0,o.useState)(e),r=n[0],i=n[1];return(0,o.useEffect)(function(){var n=setTimeout(function(){i(e)},t);return function(){clearTimeout(n)}},[e,t]),r}},164:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useElementSize=void 0;var o=n(156);t.useElementSize=function(){var e,t,n=(0,o.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 o=n(156);t.useIntersectionObserver=function(e){var t=(0,o.useRef)(null),n=(0,o.useState)(!1),r=n[0],i=n[1],s=function(e){var t=e[0];i(t.isIntersecting)};return(0,o.useEffect)(function(){if(window&&window.IntersectionObserver){var n=new IntersectionObserver(s,e),o=t.current;return t.current&&n.observe(t.current),function(){o&&n.unobserve(o)}}i(!1)},[t,e]),{containerRef:t,isVisible:r}},t.default=t.useIntersectionObserver},729:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useIsBreakpoint=void 0;var o=n(156),r=n(432),i={xs:1,mobileSmall:320,mobile:375,tablet:768,tabletLarge:920,desktopSmall:1024,desktop:1260,desktopLarge:1440};t.useIsBreakpoint=function(e){var t="string"==typeof e?i[e]:e,n=(0,o.useState)(null),s=n[0],a=n[1],l=(0,o.useCallback)(function(){a(window.innerWidth)},[]);return(0,o.useEffect)(function(){l()},[]),(0,r.useOnResize)(l),s>=t},t.default=t.useIsBreakpoint},450:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useIsLoadingAfterError=void 0;var o=n(156);t.useIsLoadingAfterError=function(e,t){var n=(0,o.useState)(t),r=n[0],i=n[1];return(0,o.useEffect)(function(){e||i(t)},[e,t]),e&&r}},305:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useIsMobile=void 0;var o=n(729);t.useIsMobile=function(){return!(0,o.useIsBreakpoint)("tablet")},t.default=t.useIsMobile},383:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useIsomorphicLayoutEffect=void 0;var o=n(156);t.useIsomorphicLayoutEffect="undefined"!=typeof window?o.useLayoutEffect:o.useEffect,t.default=t.useIsomorphicLayoutEffect},753:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useOnLoseFocusWithin=void 0;var o=n(156);t.useOnLoseFocusWithin=function(e){var t=e.ref,n=e.callback,r=e.watch;(0,o.useEffect)(function(){var e=function(){var e;if(r)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,r])},t.default=t.useOnLoseFocusWithin},502:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useOnResize=void 0;var o=n(156);t.useOnResize=function(e){(0,o.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 o=n(156);t.useOnWindowFocus=function(e){(0,o.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 o=n(156);t.useOutsideReacter=function(e,t){function n(n){e.current&&!e.current.contains(n.target)&&t()}(0,o.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 o=n(156);t.useRunAfterUpdate=function(){var e=(0,o.useRef)(null);return(0,o.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 o=n(156);t.useScrollLock=function(){return{lock:(0,o.useCallback)(function(){var e=window.scrollY+"px",t=document.body;t.style.position="fixed",t.style.top="-"+e},[]),unlock:(0,o.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 o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.useSmoothScroll=void 0;var r=n(156),i=o(n(888));t.useSmoothScroll=function(e){var t=(0,r.useRef)(null),n=e.ref,o=e.offset,s=void 0===o?0:o,a=e.speed,l=void 0===a?500:a;return(0,r.useEffect)(function(){t.current=new i.default(null,{speed:l,speedAsDuration:!0})},[]),(0,r.useCallback)(function(){n&&t.current&&t.current.animateScroll(n.current,null,{offset:function(){return s},updateURL:!1})},[s,n])}},156:function(e){e.exports=t}},n={};function o(t){var r=n[t];if(void 0!==r)return r.exports;var i=n[t]={exports:{}};return e[t].call(i.exports,i,i.exports,o),i.exports}return o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),o(432)}())}(ko)),ko.exports),Ro=Oo(xo),jo={"fullscreen-root":"MobileSearch_fullscreen-root__szErN","combobox-container":"MobileSearch_combobox-container__gRQHI","right-column":"MobileSearch_right-column__k-Ucu","combobox-icon":"MobileSearch_combobox-icon__knbNt","combobox-label":"MobileSearch_combobox-label__ja5CB",container:"MobileSearch_container__chi4V",input:"MobileSearch_input__D0TO8","clear-input":"MobileSearch_clear-input__Zmsjv",hasValue:"MobileSearch_hasValue__otRvt",suggestion:"MobileSearch_suggestion__eZPnh",suggestionHighlighted:"MobileSearch_suggestionHighlighted__EAXIz",suggestionsContainerOpen:"MobileSearch_suggestionsContainerOpen__v-FSY",suggestionsList:"MobileSearch_suggestionsList__uvUIS","clear-search-history":"MobileSearch_clear-search-history__pgb3Q","mobile-modal-overlay":"MobileSearch_mobile-modal-overlay__BJJad","mobile-modal":"MobileSearch_mobile-modal__k7FUp","mobile-modal-content":"MobileSearch_mobile-modal-content__-8h52"};co("input[type=text] {\n margin: 0;\n padding: 0;\n}\n\n.MobileSearch_fullscreen-root__szErN {\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__gRQHI {\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__gRQHI .MobileSearch_right-column__k-Ucu {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n padding-top: 9px;\n}\n\n.MobileSearch_combobox-icon__knbNt {\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__knbNt svg {\n width: 14px;\n height: 21px;\n transform: rotate(-180deg);\n}\n\n.MobileSearch_combobox-label__ja5CB {\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__chi4V {\n display: flex;\n align-items: center;\n width: 100%;\n}\n.MobileSearch_container__chi4V .MobileSearch_input__D0TO8 {\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 appearance: none;\n}\n.MobileSearch_container__chi4V .MobileSearch_input__D0TO8:focus {\n outline: none;\n border: none;\n box-shadow: none;\n background: #fff;\n}\n\nbutton.MobileSearch_clear-input__Zmsjv {\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__Zmsjv svg {\n fill: var(--color);\n width: 16px;\n height: 16px;\n}\nbutton.MobileSearch_clear-input__Zmsjv:focus {\n background-color: transparent;\n color: inherit;\n}\nbutton.MobileSearch_clear-input__Zmsjv:active {\n background-color: transparent;\n color: inherit;\n}\nbutton.MobileSearch_clear-input__Zmsjv:hover {\n background-color: transparent;\n color: inherit;\n}\n\n.MobileSearch_hasValue__otRvt {\n color: #333;\n}\n\n.MobileSearch_suggestion__eZPnh {\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__EAXIz {\n background-color: #f2f5f7;\n}\n\n.MobileSearch_suggestionsContainerOpen__v-FSY {\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__v-FSY .MobileSearch_suggestionsList__uvUIS {\n width: 100vw;\n list-style: none;\n padding-left: 0;\n margin: 0;\n background: #f2f5f7;\n}\n\n.MobileSearch_clear-search-history__pgb3Q {\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__EAXIz .MobileSearch_clear-search-history__pgb3Q {\n background-color: transparent;\n color: inherit;\n}\n\n.MobileSearch_mobile-modal-overlay__BJJad {\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__k7FUp {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n}\n.MobileSearch_mobile-modal__k7FUp.ReactModal__Content--after-open > div {\n transform: translateY(0);\n}\n.MobileSearch_mobile-modal__k7FUp.ReactModal__Content--before-close > div {\n transform: translateY(10%);\n}\n\n.MobileSearch_mobile-modal-content__-8h52 {\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 Po={"fullscreen-root":"MobileNoScroll_fullscreen-root__lNJEA","combobox-container":"MobileNoScroll_combobox-container__RxlD2","right-column":"MobileNoScroll_right-column__nAwWs","combobox-icon":"MobileNoScroll_combobox-icon__cRRSO","combobox-label":"MobileNoScroll_combobox-label__Z-JOt",container:"MobileNoScroll_container__J1jw0",input:"MobileNoScroll_input__B9G27","clear-input":"MobileNoScroll_clear-input__j-O-m",hasValue:"MobileNoScroll_hasValue__pLUYi",suggestion:"MobileNoScroll_suggestion__gnuNt",suggestionHighlighted:"MobileNoScroll_suggestionHighlighted__LDP8O",suggestionsContainerOpen:"MobileNoScroll_suggestionsContainerOpen__XT2dw",suggestionsList:"MobileNoScroll_suggestionsList__GSeGB","clear-search-history":"MobileNoScroll_clear-search-history__RqZFq","mobile-modal-overlay":"MobileNoScroll_mobile-modal-overlay__Ltu0Y","mobile-modal":"MobileNoScroll_mobile-modal__GjOpx","mobile-modal-content":"MobileNoScroll_mobile-modal-content__0976f"};function Co(e,t){if(null==e)return{};var n,o,r=function(e,t){if(null==e)return{};var n={};for(var o in e)if({}.hasOwnProperty.call(e,o)){if(-1!==t.indexOf(o))continue;n[o]=e[o]}return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o<i.length;o++)n=i[o],-1===t.indexOf(n)&&{}.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}co("input[type=text] {\n margin: 0;\n padding: 0;\n}\n\n.MobileNoScroll_fullscreen-root__lNJEA {\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__RxlD2 {\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__RxlD2 .MobileNoScroll_right-column__nAwWs {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n padding-top: 9px;\n}\n\n.MobileNoScroll_combobox-icon__cRRSO {\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__cRRSO svg {\n width: 14px;\n height: 21px;\n transform: rotate(-180deg);\n}\n\n.MobileNoScroll_combobox-label__Z-JOt {\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__J1jw0 {\n display: flex;\n align-items: center;\n width: 100%;\n}\n.MobileNoScroll_container__J1jw0 .MobileNoScroll_input__B9G27 {\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 appearance: none;\n}\n.MobileNoScroll_container__J1jw0 .MobileNoScroll_input__B9G27:focus {\n outline: none;\n border: none;\n box-shadow: none;\n background: #fff;\n}\n\nbutton.MobileNoScroll_clear-input__j-O-m {\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__j-O-m svg {\n fill: var(--color);\n width: 16px;\n height: 16px;\n}\nbutton.MobileNoScroll_clear-input__j-O-m:focus {\n background-color: transparent;\n color: inherit;\n}\nbutton.MobileNoScroll_clear-input__j-O-m:active {\n background-color: transparent;\n color: inherit;\n}\nbutton.MobileNoScroll_clear-input__j-O-m:hover {\n background-color: transparent;\n color: inherit;\n}\n\n.MobileNoScroll_hasValue__pLUYi {\n color: #333;\n}\n\n.MobileNoScroll_suggestion__gnuNt {\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__LDP8O {\n background-color: #f2f5f7;\n}\n\n.MobileNoScroll_suggestionsContainerOpen__XT2dw {\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__XT2dw .MobileNoScroll_suggestionsList__GSeGB {\n width: 100vw;\n list-style: none;\n padding-left: 0;\n margin: 0;\n background: #f2f5f7;\n}\n\n.MobileNoScroll_clear-search-history__RqZFq {\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__LDP8O .MobileNoScroll_clear-search-history__RqZFq {\n background-color: transparent;\n color: inherit;\n}\n\n.MobileNoScroll_mobile-modal-overlay__Ltu0Y {\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__GjOpx {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n}\n.MobileNoScroll_mobile-modal__GjOpx.ReactModal__Content--after-open > div {\n transform: translateY(0);\n}\n.MobileNoScroll_mobile-modal__GjOpx.ReactModal__Content--before-close > div {\n transform: translateY(10%);\n}\n\n.MobileNoScroll_mobile-modal-content__0976f {\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__XT2dw {\n -ms-overflow-style: none; /* Internet Explorer 10+ */\n scrollbar-width: none; /* Firefox */\n}\n.MobileNoScroll_suggestionsContainerOpen__XT2dw::-webkit-scrollbar {\n display: none; /* Safari and Chrome */\n}");const No=["item","lng","getItemProps","highlightedIndex","itemIndex","styles"],Mo=["suggestions","getMenuProps","getItemProps","lng","styles","hidden","renderClearHistoryButton","handleClearHistory"];function To(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,o)}return n}function Ao(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?To(Object(n),!0).forEach(function(t){H(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):To(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}const Lo=n.memo(function(e){let{item:t,lng:n,getItemProps:r,highlightedIndex:i,itemIndex:s,styles:a}=e,l=Co(e,No);const[u]=o.useTranslation(),c="FutureRoute"===t.type?Ao(Ao({},t),{},{translatedText:vo(t,n,u)}):t,d=_o(t,n,u);return k.default.createElement("li",Object.assign({className:x.default(a.suggestion,i===s&&a.suggestionHighlighted)},r({index:s})),k.default.createElement(U.default,Object.assign({item:c,content:d,lng:n},l)))}),Io="production"!==process.env.NODE_ENV?E.default.shape({name:E.default.string,type:E.default.string,address:E.default.string,selectedIconId:E.default.string,iconColor:E.default.string,translatedText:E.default.string,properties:E.default.shape({layer:E.default.string,color:E.default.string,localadmin:E.default.string,mode:E.default.string,id:E.default.string,source:E.default.string,arrowClicked:E.default.bool,destination:E.default.shape({name:E.default.string,localadmin:E.default.string}),origin:E.default.shape({name:E.default.string,localadmin:E.default.string})})}):{};"production"!==process.env.NODE_ENV&&(Lo.propTypes={item:Io.isRequired,lng:E.default.string.isRequired,getItemProps:E.default.func.isRequired,highlightedIndex:E.default.number.isRequired,itemIndex:E.default.number.isRequired,styles:E.default.objectOf(E.default.string).isRequired});const Fo=n.memo(function(e){let{suggestions:t,getMenuProps:n,getItemProps:r,lng:i,styles:s,hidden:a,renderClearHistoryButton:l,handleClearHistory:u}=e,c=Co(e,Mo);const[d]=o.useTranslation();return k.default.createElement("div",{className:x.default(s.suggestionsContainerOpen,s.suggestionsContainer,a&&s.hidden)},k.default.createElement("ul",Object.assign({className:s.suggestionsList},n()),t.map((e,t)=>k.default.createElement(Lo,Object.assign({key:`${e.type}-${e.properties.gid||e.properties.gtfsId||JSON.stringify(e.properties)}`,getItemProps:r,itemIndex:t,item:e,lng:i,styles:s},c))),l&&k.default.createElement("li",null,k.default.createElement("button",{onClick:u,type:"button",className:s["clear-search-history"]},d("clear-search-history",{lng:i})))))});"production"!==process.env.NODE_ENV&&(Fo.propTypes={suggestions:E.default.arrayOf(Io).isRequired,getMenuProps:E.default.func.isRequired,getItemProps:E.default.func.isRequired,lng:E.default.string.isRequired,styles:E.default.objectOf(E.default.string).isRequired,hidden:E.default.bool.isRequired,renderClearHistoryButton:E.default.bool,handleClearHistory:E.default.func}),Fo.defaultProps={renderClearHistoryButton:!1,handleClearHistory:()=>{}};const Do=({color:e,lng:t,clearInput:n,onKeyDown:r,styles:i})=>{const[s]=o.useTranslation();return k.default.createElement("button",{type:"button",className:i["clear-input"],onClick:n,"aria-label":s("clear-button-label",{lng:t}),onKeyDown:r},k.default.createElement(A.default,{img:"close",color:e}))};function qo({id:e,lng:t,value:n,placeholder:o,required:r,getInputProps:i,getLabelProps:s,clearInput:a,ariaLabel:l,inputRef:u,styles:c,renderLabel:d,isMobile:p,inputClassName:f,transportMode:h,clearButtonColor:g,autoFocus:b,inputOnBlur:m,onValueChange:y}){return k.default.createElement("div",{className:c.container},d&&k.default.createElement("label",s({className:c["sr-only"],htmlFor:e}),l),k.default.createElement("input",Object.assign({"aria-label":l,autoFocus:b,placeholder:o,required:r,type:"text",className:x.default(c.input,c[e],f,p&&h&&c.thin,n&&c.hasValue),id:e},i({ref:u,onBlur:m,onChange:e=>{y(e.target.value)}}))),n&&k.default.createElement(Do,{lng:t,clearInput:()=>a(u),styles:c,color:g,onKeyDown:e=>bo(e)&&a(u)}))}function Uo(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,o)}return n}function zo(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Uo(Object(n),!0).forEach(function(t){H(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Uo(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}"production"!==process.env.NODE_ENV&&(Do.propTypes={color:E.default.string.isRequired,lng:E.default.string.isRequired,clearInput:E.default.func.isRequired,onKeyDown:E.default.func.isRequired,styles:E.default.objectOf(E.default.string).isRequired}),"production"!==process.env.NODE_ENV&&(qo.propTypes={id:E.default.string.isRequired,lng:E.default.string.isRequired,placeholder:E.default.string.isRequired,required:E.default.bool.isRequired,value:E.default.string.isRequired,getInputProps:E.default.func.isRequired,getLabelProps:E.default.func.isRequired,clearInput:E.default.func.isRequired,ariaLabel:E.default.string.isRequired,inputRef:E.default.shape({current:E.default.oneOfType([E.default.string,E.default.object])}).isRequired,styles:E.default.objectOf(E.default.string).isRequired,renderLabel:E.default.bool,isMobile:E.default.bool.isRequired,inputClassName:E.default.string.isRequired,transportMode:E.default.string,clearButtonColor:E.default.string.isRequired,autoFocus:E.default.bool,inputOnBlur:E.default.func,onValueChange:E.default.func.isRequired}),qo.defaultProps={autoFocus:!1,renderLabel:!1,transportMode:void 0,inputOnBlur:()=>{}};const Bo=({appElement:e,id:t,placeholder:r,clearInput:i,onSelectedItemChange:s,fontWeights:a,clearOldSearches:l,suggestionProps:u,lng:c,ariaProps:d,value:f,inputClassName:h,required:g,mobileLabel:b,showScroll:m,state:y,dispatch:_,colors:v})=>{const[w]=o.useTranslation(),{lock:S,unlock:O}=Ro.useScrollLock(),E=m?jo:Po,x=`${t}-input`,R=`${t}-label`,[j,P]=n.useState(!1),C=k.default.useRef();n.useEffect(()=>{D.default.setAppElement(e)},[]),n.useEffect(()=>{y.renderMobile?S():O()},[y.renderMobile]);const{highlightedIndex:N,getLabelProps:M,getMenuProps:T,getInputProps:L,getItemProps:I,setHighlightedIndex:F}=p.useCombobox({items:y.suggestions,inputValue:f,isOpen:!0,onSelectedItemChange:e=>{s(e),_({type:"TOGGLE_MENU",isMobile:!0})},inputId:x,labelId:R,selectedItem:null,defaultHighlightedIndex:-1,onInputValueChange:({inputValue:e,type:t})=>y.renderMobile&&t!==p.useCombobox.stateChangeTypes.InputChange&&_({type:"INPUT_CHANGE",value:e}),stateReducer:(e,{changes:t,type:n})=>{switch(n){case p.useCombobox.stateChangeTypes.InputKeyDownEscape:return F(-1),_({type:"TOGGLE_MENU",isMobile:!0}),e;case p.useCombobox.stateChangeTypes.InputKeyDownEnter:return y.loading?(_({type:"PENDING_ENTER",enterPending:!0}),e):-1===e.highlightedIndex?zo(zo({},t),{},{selectedItem:y.suggestions[0]}):t;case p.useCombobox.stateChangeTypes.InputBlur:return e;default:return t}},itemToString:e=>e?wo(e):""});T({},{suppressRefError:!0}),L({},{suppressRefError:!0});const U=n.useCallback(e=>y.renderMobile&&_({type:"INPUT_CHANGE",value:e}),[y.renderMobile,_]),z=n.useCallback(()=>P(!0),[]),{ariaRequiredText:B,SearchBarId:H,ariaCurrentSuggestion:V}=d,W=B.concat(" ").concat(H).concat(" ").concat(V);return k.default.createElement(D.default,{isOpen:y.renderMobile,className:E["mobile-modal"],overlayClassName:E["mobile-modal-overlay"],shouldReturnFocusAfterClose:!1,shouldCloseOnEsc:!0},k.default.createElement("div",{className:E["mobile-modal-content"],style:{"--color":v.primary,"--accessible-primary-color":v.accessiblePrimary,"--hover-color":v.hover,"--font-weight-medium":a.medium}},k.default.createElement("div",{className:E["combobox-container"],htmlFor:x},k.default.createElement("button",{type:"button",className:E["combobox-icon"],onClick:()=>{F(-1),_({type:"TOGGLE_MENU",isMobile:!0})},onKeyDown:e=>{bo(e)&&(F(-1),_({type:"TOGGLE_MENU",isMobile:!0}))},"aria-label":w("cancel",{lng:c}),tabIndex:0},k.default.createElement(A.default,{img:"arrow",color:v.primary})),k.default.createElement("span",{className:E["right-column"]},k.default.createElement("span",Object.assign({className:E["combobox-label"],id:R},M()),b),k.default.createElement(qo,{placeholder:mo(t)?w("address-place-or-business",{lng:c}):r,id:t,lng:c,value:f,getInputProps:L,getLabelProps:M,clearInput:()=>i(C),ariaLabel:W,inputRef:C,styles:E,renderLabel:!1,clearButtonColor:v.primary,autoFocus:!0,inputClassName:h,required:g,isMobile:!0,onValueChange:U}),k.default.createElement(Fo,Object.assign({suggestions:y.suggestions,getMenuProps:T,getItemProps:I,highlightedIndex:N,isOpen:!0,hidden:!1,lng:c,styles:E,renderClearHistoryButton:!0,handleClearHistory:z},u)))),k.default.createElement(q.default,{isModalOpen:j,handleClose:()=>P(!1),headerText:w("delete-old-searches-header",{lng:c}),primaryButtonText:w("delete",{lng:c}),secondaryButtonText:w("cancel",{lng:c}),primaryButtonOnClick:()=>{l(),P(!1)},secondaryButtonOnClick:()=>P(!1),lang:c})))};function Ho(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,o)}return n}function Vo(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ho(Object(n),!0).forEach(function(t){H(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ho(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}"production"!==process.env.NODE_ENV&&(Bo.propTypes={appElement:E.default.string.isRequired,id:E.default.string.isRequired,clearInput:E.default.func.isRequired,clearOldSearches:E.default.func.isRequired,onSelectedItemChange:E.default.func.isRequired,value:E.default.string.isRequired,colors:E.default.objectOf(E.default.string).isRequired,fontWeights:E.default.shape({medium:E.default.number.isRequired}).isRequired,suggestionProps:E.default.shape({}).isRequired,ariaProps:E.default.shape({ariaRequiredText:E.default.string.isRequired,SearchBarId:E.default.string.isRequired,ariaCurrentSuggestion:E.default.string.isRequired}).isRequired,inputClassName:E.default.string.isRequired,placeholder:E.default.string.isRequired,mobileLabel:E.default.string.isRequired,required:E.default.bool.isRequired,showScroll:E.default.bool.isRequired,lng:E.default.string.isRequired,state:E.default.shape({suggestions:E.default.arrayOf(E.default.shape({})).isRequired,renderMobile:E.default.bool.isRequired,loading:E.default.bool.isRequired}).isRequired,dispatch:E.default.func.isRequired});const Wo=(e,t)=>{switch(t.type){case"INPUT_CHANGE":return Vo(Vo({},e),{},{value:t.value});case"FETCH_SUGGESTIONS":return t.loading!==e.loading||t.suggestions?Vo(Vo({},e),{},{loading:t.loading,suggestions:t.suggestions||e.suggestions}):e;case"CLEAR_SUGGESTIONS":return Vo(Vo({},e),{},{suggestions:[]});case"RESET_SOURCES":return Vo(Vo({},e),{},{sources:t.sources});case"SET_SOURCES":return Vo(Vo({},e),{},{showOwnPlaces:t.showOwnPlaces,sources:t.sources,pendingSelection:t.pendingSelection});case"CLEAR":return Vo(Vo({},e),{},{value:"",isCleared:!0,suggestions:[]});case"INPUT_BLUR":return Vo(Vo({},e),{},{value:t.value||e.value,isCleared:!t.isMobile&&e.isCleared,pendingSelection:null,showOwnPlaces:!1});case"RESET":return t.initialState;case"PENDING_ENTER":return Vo(Vo({},e),{},{enterPending:t.enterPending});case"TOGGLE_MENU":return t.isMobile?e.renderMobile?Vo(Vo({},e),{},{renderMobile:!1,isCleared:!1}):Vo(Vo({},e),{},{renderMobile:!0,value:e.isCleared?"":e.value}):Vo(Vo({},e),{},{isMenuOpen:!e.isMenuOpen,renderMobile:t.isMobile&&!e.renderMobile});default:return e}};function $o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,o)}return n}function Go(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?$o(Object(n),!0).forEach(function(t){H(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):$o(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}const Jo=["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 Ko({appElement:e,id:t,placeholder:r,onSelect:i,icon:s,value:a,onClear:l,lang:u,getAutoSuggestIcons:c,handleViaPoints:d,focusChange:f,storeRef:h,isMobile:g,mobileLabel:b,inputClassName:m,translatedPlaceholder:y,required:_,ariaLabel:v,fontWeights:w,colors:S,modeSet:O,showScroll:E,isEmbedded:R,transportMode:j,targets:P,sources:C,geocodingSize:N,filterResults:M,searchContext:T,pathOpts:L,refPoint:I}){const[F]=o.useTranslation(),D={suggestions:[],loading:!1,sources:C,showOwnPlaces:!1,pendingSelection:null,isCleared:!1,renderMobile:!1,value:a,enterPending:!1,isMenuOpen:!1},[q,U]=n.useReducer(Wo,D);n.useEffect(()=>U({type:"RESET",initialState:D}),[a]),n.useEffect(()=>U({type:"RESET_SOURCES",sources:C}),[C]);const z=n.useRef(t);n.useEffect(()=>{h&&h(z.current)},[z.current]);const B=n.useCallback(()=>{const e=!P?.length||P.includes("Locations"),t=(({targets:e,isLocationSearch:t,isMobile:n,ownPlaces:o,sources:r})=>{const i=!e?.length;let s;return o?(s=["Locations"],(i||e.includes("Stops"))&&s.push("Stops"),(i||e.includes("Stations"))&&s.push("Stations"),(i||e.includes("VehicleRentalStations"))&&s.push("VehicleRentalStations")):i||(s=[...e],!t||n||r.length&&!r.includes("Favourite")||s.push("SelectFromOwnLocations")),s})({targets:P,isLocationSearch:e,isMobile:g,ownPlaces:q.showOwnPlaces,sources:q.sources});((e,t,n,o,r,i,s,a,l,u)=>{a(null),lo(e,t,n,o,r,i,s,a,l,u)})(t,q.sources?q.sources.filter(t=>!e||"Favourite"===!t||q.showOwnPlaces||g):q.sources,j,T,M,N,{input:q.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=Go({},e);return t.properties.labelId=F(e.properties.labelId,{lng:u}),t}return e});U({type:"FETCH_SUGGESTIONS",loading:!1,suggestions:t})},L,I)},[q.value,q.sources,q.showOwnPlaces,P,j,T,M,N,g,u,L,I,t]),H=n.useCallback((e,n)=>{e&&(d?d(e,n):i(e,t),!f||g&&!R||f(),z.current&&z.current.blur())},[g]),V=e=>H(e.selectedItem,e.highlightedIndex),{isOpen:W,highlightedIndex:$,getLabelProps:G,getMenuProps:J,getInputProps:K,getItemProps:Z,selectItem:X,openMenu:Q,closeMenu:Y}=p.useCombobox({inputId:t,inputValue:q.value,defaultHighlightedIndex:0,onInputValueChange:({inputValue:e,type:t})=>t!==p.useCombobox.stateChangeTypes.InputChange&&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 q.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:C,showOwnPlaces:!1,pendingSelection:null}),e):n:n;case p.useCombobox.stateChangeTypes.InputClick:return Jo.includes(a)?Go(Go({},n),{},{inputValue:"",isOpen:!0}):Go(Go({},n),{},{isOpen:!0});case p.useCombobox.stateChangeTypes.InputBlur:return n.selectedItem?Go(Go({},n),{},{selectedItem:e.selectItem,inputValue:e.inputValue}):n;case p.useCombobox.stateChangeTypes.InputKeyDownEscape:return Go(Go({},n),{},{inputValue:""});default:return n}},[q.loading,a,g]),items:q.suggestions,itemToString:e=>e?wo(e):"",onSelectedItemChange:V,onIsOpenChange:e=>{e.isOpen&&!q.renderMobile&&U({type:"TOGGLE_MENU",isMobile:g})}}),ee=e=>{U({type:"CLEAR"}),l&&l(t),e.current&&e.current.focus(),Q()},te=n.useCallback(e=>U({type:"INPUT_CHANGE",value:e}),[]);n.useEffect(()=>{!W&&!q.renderMobile||q.value===a&&Jo.includes(a)||B(q.value)},[W,q.renderMobile,q.value,B]),n.useEffect(()=>{q.enterPending&&!q.loading&&(H(q.suggestions[0],0),Y())},[q.loading,q.pendingEnter,q.suggestions]);const ne=n.useMemo(()=>({loading:q.loading,isMobile:g,ariaFavouriteString:F("favourite",{lng:u}),fontWeights:w,getAutoSuggestIcons:c,colors:S,modeSet:O}),[q.loading,g,F,u,w,c,S,O]),{ariaCurrentSuggestion:oe,ariaRequiredText:re,SearchBarId:ie,ariaLabelText:se}=(({id:e,ariaLabel:t,lng:n,t:o,isMobile:r,suggestions:i,value:s,required:a})=>{const l=e.replace("searchfield-",""),u=t||o(l,{lng:n}).replace("searchfield-","").concat("."),c=a?`${o("required",{lng:n})}.`:"",d=o(r?"search-autosuggest-label-instructions-mobile":"search-autosuggest-label-instructions-desktop",{lng:n}),p="origin"===e?o("search-autosuggest-label-move-to-destination",{lng:n}):"";return{SearchBarId:u,ariaRequiredText:c,ariaLabelText:d.concat(" ").concat(p),ariaSuggestionLen:o("search-autosuggest-len",{count:i.length,lng:n}),ariaCurrentSuggestion:So({suggestions:i,t:o,lng:n})||s?o("search-current-suggestion",{lng:n,selection:So({suggestions:i,t:o,lng:n}).toLowerCase()||s}):""}})({id:t,lng:u,t:F,isMobile:g,ariaLabel:v,suggestions:q.suggestions,value:q.value,required:_});return n.useEffect(()=>{q.renderMobile||W||U({type:"RESET",initialState:D})},[q.renderMobile,W]),k.default.createElement(k.default.Fragment,null,g&&k.default.createElement(Bo,{placeholder:F(r,{lng:u}),fontWeights:w,clearOldSearches:()=>{const{context:e,clearOldSearches:t,clearFutureRoutes:n}=T;e&&t&&(t(e),n&&n(e),B(q.value))},appElement:e,mobileLabel:b||F(t,{lng:u}),ariaProps:{ariaCurrentSuggestion:oe,SearchBarId:ie,ariaRequiredText:re},id:t,lng:u,onSelectedItemChange:V,value:q.value,clearInput:ee,suggestionProps:ne,showScroll:!!E,colors:S,inputClassName:m,required:_,state:q,dispatch:U}),k.default.createElement("div",{className:x.default(po["autosuggest-input-container"],po[t],q.renderMobile&&"hidden"),style:{"--color":S.primary,"--hover-color":S.hover}},s&&k.default.createElement("div",{className:x.default(po["autosuggest-input-icon"],po[t],m&&po[`${m}-input-icon`]),"aria-label":re.concat(" ").concat(ie).concat(" ").concat(F("search-autosuggest-label",{lng:u}))},k.default.createElement(A.default,{img:`${s}`})),k.default.createElement(qo,{inputClassName:m,ariaLabel:oe.concat(" ").concat(re).concat(" ").concat(ie).concat(" ").concat(se),id:t,lng:u,getInputProps:K,getLabelProps:G,selectItem:X,value:q.value,clearInput:ee,inputRef:z,styles:po,clearButtonColor:S.primary,placeholder:y||F(r,{lng:u}),required:_,transportMode:j,isMobile:g,inputOnBlur:()=>{U({isMobile:g,value:!g&&a,type:"INPUT_BLUR"}),g||U({type:"RESET",initialState:D})},onValueChange:te}),k.default.createElement(Fo,Object.assign({hidden:!W||!q.suggestions.length||g,highlightedIndex:$,getItemProps:Z,getMenuProps:J,suggestions:q.suggestions,lng:u,styles:po},ne))))}"production"!==process.env.NODE_ENV&&(Ko.propTypes={appElement:E.default.string.isRequired,icon:E.default.string,id:E.default.string.isRequired,placeholder:E.default.string.isRequired,translatedPlaceholder:E.default.string,value:E.default.string,transportMode:E.default.string,geocodingSize:E.default.number,filterResults:E.default.func,searchContext:E.default.shape({URL_PELIAS:E.default.string,context:E.default.object,clearOldSearches:E.default.func,clearFutureRoutes:E.default.func}).isRequired,sources:E.default.arrayOf(E.default.string),targets:E.default.arrayOf(E.default.string),ariaLabel:E.default.string,onSelect:E.default.func.isRequired,onClear:E.default.func,storeRef:E.default.func,handleViaPoints:E.default.func,focusChange:E.default.func,lang:E.default.string,isMobile:E.default.bool,pathOpts:E.default.shape({routesPrefix:E.default.string,stopsPrefix:E.default.string}),mobileLabel:E.default.string,refPoint:E.default.shape({address:E.default.string,lat:E.default.number,lon:E.default.number}),inputClassName:E.default.string,fontWeights:E.default.shape({medium:E.default.number}),colors:E.default.objectOf(E.default.string),getAutoSuggestIcons:E.default.objectOf(E.default.func),required:E.default.bool,modeSet:E.default.string,showScroll:E.default.bool,isEmbedded:E.default.bool}),Ko.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=>k.default.createElement(o.I18nextProvider,{i18n:uo},k.default.createElement(Ko,e)),Object.defineProperty(e,"__esModule",{value:!0})});
3
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZGV2ZWxvcG1lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Qcm9wZXJ0eUtleS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1ByaW1pdGl2ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXRydS1lcS9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWlzLWR1cGxpY2F0ZS9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWhlbHBlcnMvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1maWx0ZXItbWF0Y2hpbmctdG8taW5wdXQvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYmluZC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvdXRpbHMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcGFyc2VIZWFkZXJzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3Nhbml0aXplSGVhZGVyVmFsdWUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3NIZWFkZXJzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0F4aW9zRXJyb3IuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdG9Gb3JtRGF0YS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9BeGlvc1VSTFNlYXJjaFBhcmFtcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9idWlsZFVSTC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9JbnRlcmNlcHRvck1hbmFnZXIuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2RlZmF1bHRzL3RyYW5zaXRpb25hbC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vYnJvd3Nlci9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vYnJvd3Nlci9jbGFzc2VzL1VSTFNlYXJjaFBhcmFtcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vYnJvd3Nlci9jbGFzc2VzL0Zvcm1EYXRhLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9icm93c2VyL2NsYXNzZXMvQmxvYi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vY29tbW9uL3V0aWxzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9mb3JtRGF0YVRvSlNPTi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZGVmYXVsdHMvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdG9VUkxFbmNvZGVkRm9ybS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS90cmFuc2Zvcm1EYXRhLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvaXNDYW5jZWwuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9DYW5jZWxlZEVycm9yLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL3NldHRsZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9wcm9ncmVzc0V2ZW50UmVkdWNlci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9zcGVlZG9tZXRlci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy90aHJvdHRsZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc1VSTFNhbWVPcmlnaW4uanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvY29va2llcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9idWlsZEZ1bGxQYXRoLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzQWJzb2x1dGVVUkwuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvY29tYmluZVVSTHMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvbWVyZ2VDb25maWcuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcmVzb2x2ZUNvbmZpZy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYWRhcHRlcnMveGhyLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3BhcnNlUHJvdG9jb2wuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvY29tcG9zZVNpZ25hbHMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdHJhY2tTdHJlYW0uanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2Vudi9kYXRhLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9hZGFwdGVycy9mZXRjaC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9lc3RpbWF0ZURhdGFVUkxEZWNvZGVkQnl0ZXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2FkYXB0ZXJzL2FkYXB0ZXJzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL251bGwuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvZGlzcGF0Y2hSZXF1ZXN0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3ZhbGlkYXRvci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9BeGlvcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9IdHRwU3RhdHVzQ29kZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYXhpb3MuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9DYW5jZWxUb2tlbi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9zcHJlYWQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNBeGlvc0Vycm9yLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtc2VyaWFsaXplL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWpzb24vaW5kZXguanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1leGVjdXRlLXNlYXJjaC1pbW1pZGlhdGUvaW5kZXguanMiLCIuLi9zcmMvdXRpbHMvaTE4bi5qcyIsIi4uL3NyYy91dGlscy90cmFuc2xhdGlvbnMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtaW5qZWN0L2Rpc3Qvc3R5bGUtaW5qZWN0LmVzLmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtdW5pcS1ieS1sYWJlbC9pbmRleC5qcyIsIi4uL3NyYy91dGlscy91dGlscy5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1sYWJlbC9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AaHNsLWZpL2hvb2tzL2xpYi9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvU3VnZ2VzdGlvbnMuanMiLCIuLi9zcmMvY29tcG9uZW50cy9DbGVhckJ1dHRvbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0lucHV0LmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvTW9iaWxlVmlldy5qcyIsIi4uL3NyYy91dGlscy9zZWFyY2hSZWR1Y2VyLmpzIiwiLi4vc3JjL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF90eXBlb2Yobykge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiB0eXBlb2YgbztcbiAgfSA6IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87XG4gIH0sIF90eXBlb2Yobyk7XG59XG5leHBvcnQgeyBfdHlwZW9mIGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCB0b1ByaW1pdGl2ZSBmcm9tIFwiLi90b1ByaW1pdGl2ZS5qc1wiO1xuZnVuY3Rpb24gdG9Qcm9wZXJ0eUtleSh0KSB7XG4gIHZhciBpID0gdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7XG4gIHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7XG59XG5leHBvcnQgeyB0b1Byb3BlcnR5S2V5IGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmZ1bmN0aW9uIHRvUHJpbWl0aXZlKHQsIHIpIHtcbiAgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7XG4gIHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdO1xuICBpZiAodm9pZCAwICE9PSBlKSB7XG4gICAgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7XG4gICAgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpO1xuICB9XG4gIHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7XG59XG5leHBvcnQgeyB0b1ByaW1pdGl2ZSBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IHRvUHJvcGVydHlLZXkgZnJvbSBcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHtcbiAgcmV0dXJuIChyID0gdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7XG4gICAgdmFsdWU6IHQsXG4gICAgZW51bWVyYWJsZTogITAsXG4gICAgY29uZmlndXJhYmxlOiAhMCxcbiAgICB3cml0YWJsZTogITBcbiAgfSkgOiBlW3JdID0gdCwgZTtcbn1cbmV4cG9ydCB7IF9kZWZpbmVQcm9wZXJ0eSBhcyBkZWZhdWx0IH07IiwiLyoqXG4gKiAgYWNjZXB0IGVxdWFsaXR5IG9mIG5vbiBudWxsaXNoIHZhbHVlc1xuICpcbiAqIEBuYW1lIHRydUVxXG4gKiBAcGFyYW0ge0Jvb2xlYW58TnVtYmVyfEJpZ0ludHxTdHJpbmd8U3ltYm9sfE9iamVjdH0gdmFsMSBGaXJzdCB2YWx1ZSB0byBiZSBjb21wYXJlZFxuICogQHBhcmFtIHtCb29sZWFufE51bWJlcnxCaWdJbnR8U3RyaW5nfFN5bWJvbHxPYmplY3R9IHBhcmFtMiBTZWNvbmQgdmFsdWUgdG8gYmUgY29tcGFyZWRcbiAqIEByZXR1cm5zIHtCb29sZWFufSB0cnVlL2ZhbHNlXG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtdXRpbC50cnVFcSgnMicsICcyJyk7XG4gKiAvLz10cnVlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRydUVxKHZhbDEsIHZhbDIpIHtcbiAgcmV0dXJuIHZhbDEgJiYgdmFsMiAmJiB2YWwxID09PSB2YWwyO1xufVxuIiwiaW1wb3J0IHRydUVxIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC10cnUtZXEnO1xuLyoqXG4gKiBDaGVja3MgdGhhdCBpcyBpdGVtcyBkdXBsaWNhdGVcbiAqXG4gKiBAbmFtZSBpc0R1cGxpY2F0ZVxuICogQHBhcmFtIHtPYmplY3R9IGl0ZW0xIE9iamVjdCBjb250YWluaW5nIGZvbGxvd2luZyBhdHRyaWJ1dGVzOlxuICoge1xuICogIHByb3BlcnRpZXMge1xuICogICAgICBndGZzSWQ6IFN0cmluZ1xuICogICAgICBnaWQ6IFN0cmluZyBmcm9tIGdlb2NvZGVyXG4gKiAgICAgIG5hbWU6IFN0cmluZ1xuICogICAgICBsYWJlbDogU3RyaW5nXG4gKiAgICAgICBhZGRyZXNzOiBTdHJpbmdcbiAqICAgICAgZ2VvbWV0cnkge1xuICogICAgICAgICBjb29yZGluYXRlcyBbTnVtYmVyIGxhdCwgTnVtYmVyIGxvbl1cbiAqICAgICAgfVxuICogIH1cbiAqIH1cbiAqIEBwYXJhbSB7T2JqZWN0fSBpdGVtMiBPYmplY3Qgd2l0aCBzYW1lIGF0dHJpYnV0ZXMgYXMgaXRlbTFcbiAqIEByZXR1cm5zIHtCb29sZWFufSB0cnVlL2ZhbHNlXG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtdXRpbC5pc0R1cGxpY2F0ZShwYXJhbTEsIHBhcmFtMik7XG4gKiAvLz10cnVlXG4gKi9cblxuY29uc3QgZ3Rmc1N0b3BMYXllcnMgPSBbJ3N0b3AnLCAnc3RhdGlvbicsICdmYXZvdXJpdGVTdG9wJywgJ2Zhdm91cml0ZVN0YXRpb24nXTtcbmNvbnN0IHZlaGljbGVSZW50YWxMYXllcnMgPSBbJ2Zhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uJywgJ2Jpa2VzdGF0aW9uJ107XG5cbmZ1bmN0aW9uIGxhYmVsSWRUb0dpZChpZCkge1xuICBpZiAoIWlkKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIGNvbnN0IHBhcnRzID0gaWQuc3BsaXQoJzonKTtcbiAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICByZXR1cm4gYGNpdHliaWtlcyR7cGFydHNbMF19OmJpa2VzdGF0aW9uOiR7cGFydHNbMV19YDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNEdXBsaWNhdGUoaXRlbTEsIGl0ZW0yKSB7XG4gIGNvbnN0IHByb3BzMSA9IGl0ZW0xLnByb3BlcnRpZXM7XG4gIGNvbnN0IHByb3BzMiA9IGl0ZW0yLnByb3BlcnRpZXM7XG5cbiAgaWYgKGl0ZW0xLnR5cGUgPT09ICdGdXR1cmVSb3V0ZScgJiYgaXRlbTIudHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJykge1xuICAgIGNvbnN0IG8xID0gcHJvcHMxLm9yaWdpbjtcbiAgICBjb25zdCBkMSA9IHByb3BzMS5kZXN0aW5hdGlvbjtcbiAgICBjb25zdCBvMiA9IHByb3BzMi5vcmlnaW47XG4gICAgY29uc3QgZDIgPSBwcm9wczIuZGVzdGluYXRpb247XG5cbiAgICBjb25zdCBuYW1lMSA9IGAke28xLm5hbWV9Ly8ke28xLmxvY2FsYWRtaW59Ly8ke2QxLm5hbWV9Ly8ke2QxLmxvY2FsYWRtaW59YDtcbiAgICBjb25zdCBuYW1lMiA9IGAke28yLm5hbWV9Ly8ke28yLmxvY2FsYWRtaW59Ly8ke2QyLm5hbWV9Ly8ke2QyLmxvY2FsYWRtaW59YDtcblxuICAgIHJldHVybiBuYW1lMSA9PT0gbmFtZTI7XG4gIH1cbiAgaWYgKGl0ZW0xLnR5cGUgPT09ICdGdXR1cmVSb3V0ZScgfHwgaXRlbTIudHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoXG4gICAgdmVoaWNsZVJlbnRhbExheWVycy5pbmNsdWRlcyhwcm9wczEubGF5ZXIpICYmXG4gICAgdmVoaWNsZVJlbnRhbExheWVycy5pbmNsdWRlcyhwcm9wczIubGF5ZXIpXG4gICkge1xuICAgIGNvbnN0IGlkMSA9IHByb3BzMS5naWQgfHwgbGFiZWxJZFRvR2lkKHByb3BzMS5sYWJlbElkKTtcbiAgICBjb25zdCBpZDIgPSBwcm9wczIuZ2lkIHx8IGxhYmVsSWRUb0dpZChwcm9wczIubGFiZWxJZCk7XG4gICAgcmV0dXJuIGlkMSA9PT0gaWQyO1xuICB9XG4gIGlmIChwcm9wczEuZ3Rmc0lkICYmIHByb3BzMi5ndGZzSWQpIHtcbiAgICByZXR1cm4gcHJvcHMxLmd0ZnNJZCA9PT0gcHJvcHMyLmd0ZnNJZDtcbiAgfVxuICBpZiAoXG4gICAgZ3Rmc1N0b3BMYXllcnMuaW5jbHVkZXMocHJvcHMxLmxheWVyKSAmJlxuICAgIGd0ZnNTdG9wTGF5ZXJzLmluY2x1ZGVzKHByb3BzMi5sYXllcikgJiZcbiAgICBwcm9wczEuZ2lkICYmXG4gICAgcHJvcHMyLmdpZFxuICApIHtcbiAgICByZXR1cm4gcHJvcHMxLmdpZCA9PT0gcHJvcHMyLmdpZDtcbiAgfVxuXG4gIGNvbnN0IHAxID0gaXRlbTEgJiYgaXRlbTEuZ2VvbWV0cnkgPyBpdGVtMS5nZW9tZXRyeS5jb29yZGluYXRlcyA6IHVuZGVmaW5lZDtcbiAgY29uc3QgcDIgPSBpdGVtMiAmJiBpdGVtMi5nZW9tZXRyeSA/IGl0ZW0yLmdlb21ldHJ5LmNvb3JkaW5hdGVzIDogdW5kZWZpbmVkO1xuXG4gIGlmIChwMSAmJiBwMikge1xuICAgIC8vIGJvdGggaGF2ZSBnZW9tZXRyeVxuICAgIGlmIChNYXRoLmFicyhwMVswXSAtIHAyWzBdKSA8IDFlLTYgJiYgTWF0aC5hYnMocDFbMV0gLSBwMlsxXSkgPCAxZS02KSB7XG4gICAgICAvLyBsb2NhdGlvbiBtYXRjaCBpcyBub3QgZW5vdWdoLiBSZXF1aXJlIGEgY29tbW9uIHByb3BlcnR5XG4gICAgICBpZiAoXG4gICAgICAgIHRydUVxKHByb3BzMS5uYW1lLCBwcm9wczIubmFtZSkgfHxcbiAgICAgICAgdHJ1RXEocHJvcHMxLmxhYmVsLCBwcm9wczIubGFiZWwpIHx8XG4gICAgICAgIHRydUVxKHByb3BzMS5hZGRyZXNzLCBwcm9wczIuYWRkcmVzcykgfHxcbiAgICAgICAgdHJ1RXEocHJvcHMxLmFkZHJlc3MsIHByb3BzMi5sYWJlbCkgfHxcbiAgICAgICAgdHJ1RXEocHJvcHMxLmxhYmVsLCBwcm9wczIuYWRkcmVzcylcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuIiwiaW1wb3J0IGlzU3RyaW5nIGZyb20gJ2xvZGFzaC9pc1N0cmluZyc7XG5pbXBvcnQgb3JkZXJCeSBmcm9tICdsb2Rhc2gvb3JkZXJCeSc7XG5pbXBvcnQgdW5pcVdpdGggZnJvbSAnbG9kYXNoL3VuaXFXaXRoJztcbmltcG9ydCBpc0R1cGxpY2F0ZSBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtaXMtZHVwbGljYXRlJztcblxuY29uc3Qgbm9ybWFsaXplID0gc3RyID0+IHtcbiAgaWYgKCFpc1N0cmluZyhzdHIpKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIHJldHVybiBzdHIudG9Mb3dlckNhc2UoKTtcbn07XG5cbmNvbnN0IHNwbGl0U2hvcnROYW1lQXRMZXR0ZXJzID0gc3RyID0+IHtcbiAgcmV0dXJuIHN0ci5zcGxpdCgvKFxccHtMfSspL3UpO1xufTtcblxuY29uc3QgdGVzdFNob3J0TmFtZU1hdGNoZXNMaW5lV2l0aE51bWJlcnNBbmRMZXR0ZXJzID0gc3RyID0+IHtcbiAgcmV0dXJuIC9eWzAtOV0rXFxwe0x9KyQvdS50ZXN0KHN0cik7XG59O1xuXG4vKipcbiAqIExheWVyVHlwZSBkZXBpY3RzIHRoZSB0eXBlIG9mIHRoZSBwb2ludC1vZi1pbnRlcmVzdC5cbiAqL1xuY29uc3QgTGF5ZXJUeXBlID0ge1xuICBBZGRyZXNzOiAnYWRkcmVzcycsXG4gIEJhY2s6ICdiYWNrJyxcbiAgQ3VycmVudFBvc2l0aW9uOiAnY3VycmVudFBvc2l0aW9uJyxcbiAgRmF2b3VyaXRlU3RvcDogJ2Zhdm91cml0ZVN0b3AnLFxuICBGYXZvdXJpdGVTdGF0aW9uOiAnZmF2b3VyaXRlU3RhdGlvbicsXG4gIEZhdm91cml0ZVBsYWNlOiAnZmF2b3VyaXRlUGxhY2UnLFxuICBGYXZvdXJpdGVSb3V0ZTogJ2Zhdm91cml0ZVJvdXRlJyxcbiAgRmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb246ICdmYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbicsXG4gIEZ1dHVyZVJvdXRlOiAnZnV0dXJlUm91dGUnLFxuICBTdGF0aW9uOiAnc3RhdGlvbicsXG4gIFNlbGVjdEZyb21NYXA6ICdzZWxlY3RGcm9tTWFwJyxcbiAgU2VsZWN0RnJvbU93bkxvY2F0aW9uczogJ293bkxvY2F0aW9ucycsXG4gIFN0b3A6ICdzdG9wJyxcbiAgU3RyZWV0OiAnc3RyZWV0JyxcbiAgVmVudWU6ICd2ZW51ZScsXG4gIFZlaGljbGVSZW50YWxTdGF0aW9uOiAnYmlrZXN0YXRpb24nLFxuICBDYXJQYXJrOiAnY2FycGFyaycsXG4gIEJpa2VQYXJrOiAnYmlrZXBhcmsnLFxufTtcbmV4cG9ydCBjb25zdCBpc1N0b3AgPSAoeyBsYXllciwgdHlwZSB9KSA9PlxuICBsYXllciA9PT0gJ3N0b3AnIHx8XG4gIGxheWVyID09PSAnZmF2b3VyaXRlU3RvcCcgfHxcbiAgdHlwZSA9PT0gJ3N0b3AnIHx8XG4gIHR5cGUgPT09ICdmYXZvdXJpdGVTdG9wJztcblxuY29uc3QgREVGQVVMVF9ST1VURVNfUFJFRklYID0gJ2xpbmphdCc7XG5jb25zdCBERUZBVUxUX1NUT1BTX1BSRUZJWCA9ICdweXNha2l0JztcblxuZXhwb3J0IGNvbnN0IG1hcFJvdXRlID0gKGl0ZW0sIHBhdGhPcHRzKSA9PiB7XG4gIGlmIChpdGVtID09PSBudWxsIHx8IGl0ZW0gPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3Qgb3B0cyA9IHBhdGhPcHRzIHx8IHt9O1xuXG4gIGNvbnN0IHJvdXRlc1ByZWZpeCA9IG9wdHMucm91dGVzUHJlZml4IHx8IERFRkFVTFRfUk9VVEVTX1BSRUZJWDtcbiAgY29uc3Qgc3RvcHNQcmVmaXggPSBvcHRzLnN0b3BzUHJlZml4IHx8IERFRkFVTFRfU1RPUFNfUFJFRklYO1xuXG4gIGNvbnN0IGxpbmsgPSBgLyR7cm91dGVzUHJlZml4fS8ke2VuY29kZVVSSUNvbXBvbmVudChcbiAgICBpdGVtLmd0ZnNJZCxcbiAgKX0vJHtzdG9wc1ByZWZpeH1gO1xuICByZXR1cm4ge1xuICAgIHR5cGU6ICdSb3V0ZScsXG4gICAgcHJvcGVydGllczoge1xuICAgICAgLi4uaXRlbSxcbiAgICAgIGxheWVyOiBgcm91dGUtJHtpdGVtLm1vZGV9YCxcbiAgICAgIGxpbmssXG4gICAgfSxcbiAgICBnZW9tZXRyeToge1xuICAgICAgY29vcmRpbmF0ZXM6IG51bGwsXG4gICAgfSxcbiAgfTtcbn07XG5cbi8qKlxuICogVHJpZXMgdG8gbWF0Y2ggdGhlIGdpdmVuIHNlYXJjaCB0ZXJtIGFnYWlucyB0aGUgY29sbGVjdGlvbiBvZiBwcm9wZXJ0aWVzXG4gKiBmb3IgYSBnZW9jb2RpbmcgcmVzdWx0IChtaW46IDAsIG1heDogMS41KS4gVGhlIGJlc3QgbWF0Y2ggd2lsbCByZXR1cm4gYSBudW1iZXIgb2YgMS41LlxuICogV29yc2UgbWF0Y2hlcyB3aWxsIHJldHVybiAwIG9yIDAuNS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbm9ybWFsaXplZFRlcm0gdGhlIG5vcm1hbGl6ZWQgc2VhcmNoIHRlcm0uXG4gKiBAcGFyYW0geyp9IHJlc3VsdFByb3BlcnRpZXMgdGhlIGdlb2NvZGluZyByZXN1bHQncyBwcm9wZXJ0eSBjb2xsZWN0aW9uLlxuICovXG5leHBvcnQgY29uc3QgbWF0Y2ggPSAobm9ybWFsaXplZFRlcm0sIHJlc3VsdFByb3BlcnRpZXMpID0+IHtcbiAgaWYgKCFpc1N0cmluZyhub3JtYWxpemVkVGVybSkgfHwgbm9ybWFsaXplZFRlcm0ubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBjb25zdCBtYXRjaFByb3BzID0gWyduYW1lJywgJ2xhYmVsJywgJ2FkZHJlc3MnLCAnc2hvcnROYW1lJ107XG4gIHJldHVybiBtYXRjaFByb3BzXG4gICAgLm1hcChuYW1lID0+IHtcbiAgICAgIHJldHVybiB7IG5hbWUsIHZhbHVlOiByZXN1bHRQcm9wZXJ0aWVzW25hbWVdIH07XG4gICAgfSlcbiAgICAuZmlsdGVyKGVsZW1lbnQgPT4gaXNTdHJpbmcoZWxlbWVudC52YWx1ZSkgJiYgZWxlbWVudC52YWx1ZS5sZW5ndGggPiAwKVxuICAgIC5tYXAoZWxlbWVudCA9PiB7XG4gICAgICBsZXQgbm9ybWFsaXplZFZhbHVlID0gbm9ybWFsaXplKGVsZW1lbnQudmFsdWUpO1xuICAgICAgaWYgKG5vcm1hbGl6ZWRWYWx1ZS5pbmRleE9mKG5vcm1hbGl6ZWRUZXJtKSA9PT0gMCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZWxlbWVudC5uYW1lID09PSAnc2hvcnROYW1lJyAmJlxuICAgICAgICAgIHRlc3RTaG9ydE5hbWVNYXRjaGVzTGluZVdpdGhOdW1iZXJzQW5kTGV0dGVycyhub3JtYWxpemVkVmFsdWUpXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIElmIHRoZSBzaG9ydE5hbWUgaXMgb2YgYSBjZXJ0YWluIGZvcm1hdCAoZS5nLiA4OUEpLCBpdCBpcyB0cmVhdGVkIGhlcmVcbiAgICAgICAgICAvLyBhcyBpZiBpdCBoYWQgdGhlIGxlbmd0aCBvZiB0aGUgbnVtYmVycyB3aXRoIHRoZSBsZXR0ZXJzIHJlbW92ZWQuXG4gICAgICAgICAgLy8gU28gdGhlIGxlbmd0aCBvZiA4OUEgd291bGQgYmUgdHJlYXRlZCBhcyAyLlxuICAgICAgICAgIFtub3JtYWxpemVkVmFsdWVdID0gc3BsaXRTaG9ydE5hbWVBdExldHRlcnMobm9ybWFsaXplZFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBmdWxsIG1hdGNoIGF0IHN0YXJ0LiBSZXR1cm4gbWF4IHJlc3VsdCB3aGVuIG1hdGNoIGlzIGZ1bGwsIG5vdCBvbmx5IHBhcnRpYWxcbiAgICAgICAgcmV0dXJuIDAuNSArIG5vcm1hbGl6ZWRUZXJtLmxlbmd0aCAvIG5vcm1hbGl6ZWRWYWx1ZS5sZW5ndGg7XG4gICAgICB9XG4gICAgICAvLyBiZWNhdXNlIG9mIGZpbHRlcm1hdGNoaW5ndG9pbnB1dCwgd2Uga25vdyB0aGF0IG1hdGNoIG9jY3VycmVkIHNvbWV3aGVyZVxuICAgICAgLy8gZG9uJ3QgcnVuIGZpbHRlcm1hdGNoaW5nIGFnYWluIGJ1dCBlc3RpbWF0ZSByb3VnaGx5OlxuICAgICAgLy8gdGhlIGxvbmdlciB0aGUgbWF0Y2hpbmcgc3RyaW5nLCB0aGUgYmV0dGVyIGNvbmZpZGVuY2UsIG1heCBiZWluZyAwLjVcbiAgICAgIHJldHVybiAoMC41ICogbm9ybWFsaXplZFRlcm0ubGVuZ3RoKSAvIChub3JtYWxpemVkVGVybS5sZW5ndGggKyAxKTtcbiAgICB9KVxuICAgIC5yZWR1Y2UoXG4gICAgICAocHJldmlvdXMsIGN1cnJlbnQpID0+IChjdXJyZW50ID4gcHJldmlvdXMgPyBjdXJyZW50IDogcHJldmlvdXMpLFxuICAgICAgMCxcbiAgICApO1xufTtcblxuLyoqXG4gKiBSYW5rcyB0aGUgcmVzdWx0IGJhc2VkIG9uIGl0cyBsYXllciBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXIgdGhlIGxheWVyIHByb3BlcnR5LlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSB0aGUgc291cmNlIHByb3BlcnR5LlxuICovXG5leHBvcnQgY29uc3QgZ2V0TGF5ZXJSYW5rID0gKGxheWVyLCBzb3VyY2UpID0+IHtcbiAgc3dpdGNoIChsYXllcikge1xuICAgIGNhc2UgTGF5ZXJUeXBlLkN1cnJlbnRQb3NpdGlvbjpcbiAgICAgIHJldHVybiAxO1xuICAgIGNhc2UgTGF5ZXJUeXBlLkJhY2s6XG4gICAgICByZXR1cm4gMC45O1xuICAgIGNhc2UgTGF5ZXJUeXBlLlNlbGVjdEZyb21NYXA6XG4gICAgICByZXR1cm4gMC44O1xuICAgIGNhc2UgTGF5ZXJUeXBlLlNlbGVjdEZyb21Pd25Mb2NhdGlvbnM6XG4gICAgICByZXR1cm4gMC43OTtcbiAgICBjYXNlIExheWVyVHlwZS5GYXZvdXJpdGVTdGF0aW9uOlxuICAgIGNhc2UgTGF5ZXJUeXBlLkZhdm91cml0ZVBsYWNlOlxuICAgIGNhc2UgTGF5ZXJUeXBlLkZhdm91cml0ZVN0b3A6XG4gICAgY2FzZSBMYXllclR5cGUuRmF2b3VyaXRlUm91dGU6XG4gICAgY2FzZSBMYXllclR5cGUuRmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb246XG4gICAgICByZXR1cm4gMC40NTtcbiAgICBjYXNlIExheWVyVHlwZS5GdXR1cmVSb3V0ZTpcbiAgICAgIHJldHVybiAwLjQ0O1xuICAgIGNhc2UgTGF5ZXJUeXBlLlN0YXRpb246IHtcbiAgICAgIGlmIChpc1N0cmluZyhzb3VyY2UpICYmIHNvdXJjZS5pbmRleE9mKCdndGZzJykgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIDAuNDM7XG4gICAgICB9XG4gICAgICByZXR1cm4gMC40MjtcbiAgICB9XG4gICAgY2FzZSBMYXllclR5cGUuQ2FyUGFyazpcbiAgICAgIHJldHVybiAwLjM4O1xuICAgIGNhc2UgTGF5ZXJUeXBlLkJpa2VQYXJrOlxuICAgICAgcmV0dXJuIDAuMzg7XG4gICAgY2FzZSBMYXllclR5cGUuVmVoaWNsZVJlbnRhbFN0YXRpb246XG4gICAgICByZXR1cm4gMC4zODtcbiAgICBjYXNlIExheWVyVHlwZS5TdG9wOlxuICAgICAgcmV0dXJuIDAuMzY7XG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIHZlbnVlLCBhZGRyZXNzLCBzdHJlZXQsIHJvdXRlLXh4eFxuICAgICAgcmV0dXJuIDAuNDE7XG4gIH1cbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRvIHNvcnQgdGhlIHJlc3VsdHMuIE9yZGVycyBhcyBmb2xsb3dzOlxuICogIC0gY3VycmVudCBwb3NpdGlvbiBmaXJzdCBmb3IgYW4gZW1wdHkgc2VhcmNoXG4gKiAgLSBtYXRjaGluZyByb3V0ZXMgZmlyc3RcbiAqICAtIG90aGVyd2lzZSBieSBjb25maWRlbmNlLCBleGNlcHQgdGhhdDpcbiAqICAgIC0gYm9vc3Qgd2VsbCBtYXRjaGluZyBzdGF0aW9ucyAoZXNwZWNpYWxseSBmcm9tIEdURlMpXG4gKiAgICAtIHJhbmsgc3RvcHMgbG93ZXIgYXMgdGhleSB0ZW5kIHRvIG9jY3VweSBtb3N0IG9mIHRoZSBzZWFyY2ggcmVzdWx0c1xuICogIC0gaXRlbXMgd2l0aCBubyBjb25maWRlbmNlIChvbGQgc2VhcmNoZXMgYW5kIGZhdm9yaXRlcyk6XG4gKiAgICAtIHJhbmsgZmF2b3VyaXRlcyBiZXR0ZXIgdGhhbiBvcmRpbmFyeSBvbGQgc2VhcmNoZXNcbiAqICAgIC0gcmFuayBmdWxsIG1hdGNoIGJldHRlciB0aGFuIHBhcnRpYWwgbWF0Y2hcbiAqICAgIC0gcmFuayBtYXRjaCBhdCBtaWRkbGUgd29yZCBsb3dlciB0aGFuIG1hdGNoIGF0IHRoZSBiZWdpbm5pbmdcbiAqICAgIC0gcmFuayBiaWtlIHJlbnRhbCBzdGF0aW9ucyBsb3dlclxuICogQHBhcmFtIHsqW119IHJlc3VsdHMgVGhlIHNlYXJjaCByZXN1bHRzIHRoYXQgd2VyZSByZWNlaXZlZFxuICogQHBhcmFtIHtTdHJpbmd9IHRlcm0gVGhlIHNlYXJjaCB0ZXJtIHRoYXQgd2FzIHVzZWRcbiAqL1xuZXhwb3J0IGNvbnN0IHNvcnRTZWFyY2hSZXN1bHRzID0gKGxpbmVSZWdleHAsIHJlc3VsdHMsIHRlcm0gPSAnJykgPT4ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkocmVzdWx0cykgfHwgIXJlc3VsdHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cbiAgY29uc3QgaXNMaW5lSWRlbnRpZmllciA9IHZhbHVlID0+XG4gICAgaXNTdHJpbmcodmFsdWUpICYmIGxpbmVSZWdleHAgJiYgbGluZVJlZ2V4cC50ZXN0KHZhbHVlKTtcblxuICBjb25zdCBub3JtYWxpemVkVGVybSA9IG5vcm1hbGl6ZSh0ZXJtKTtcbiAgY29uc3QgaXNMaW5lU2VhcmNoID0gaXNMaW5lSWRlbnRpZmllcihub3JtYWxpemVkVGVybSk7XG5cbiAgY29uc3Qgb3JkZXJlZFJlc3VsdHMgPSBvcmRlckJ5KFxuICAgIHJlc3VsdHMuZmlsdGVyKHIgPT4gciksXG4gICAgW1xuICAgICAgLy8gcmFuayBtYXRjaGluZyByb3V0ZXMgYmVzdFxuICAgICAgcmVzdWx0ID0+XG4gICAgICAgIGlzTGluZVNlYXJjaCAmJlxuICAgICAgICBpc0xpbmVJZGVudGlmaWVyKG5vcm1hbGl6ZShyZXN1bHQucHJvcGVydGllcy5zaG9ydE5hbWUpKSAmJlxuICAgICAgICBub3JtYWxpemUocmVzdWx0LnByb3BlcnRpZXMuc2hvcnROYW1lKS5pbmRleE9mKG5vcm1hbGl6ZWRUZXJtKSA9PT0gMFxuICAgICAgICAgID8gMVxuICAgICAgICAgIDogMCxcblxuICAgICAgcmVzdWx0ID0+IHtcbiAgICAgICAgY29uc3QgeyBjb25maWRlbmNlLCBsYXllciwgc291cmNlIH0gPSByZXN1bHQucHJvcGVydGllcztcbiAgICAgICAgaWYgKG5vcm1hbGl6ZWRUZXJtLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIC8vIERvaW5nIHNlYXJjaCB3aXRoIGVtcHR5IHN0cmluZy5cbiAgICAgICAgICAvLyBObyBjb25maWRlbmNlIHRvIG1hdGNoLCBzbyB1c2UgcmFua2VkIG9sZCBzZWFyY2hlcyBhbmQgZmF2b3VyaXRlc1xuICAgICAgICAgIHJldHVybiBnZXRMYXllclJhbmsobGF5ZXIsIHNvdXJjZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBtdXN0IGhhbmRsZSBhIG1peHVwIG9mIGdlb2NvZGVyIHNlYXJjaGVzIGFuZCBpdGVtcyBhYm92ZVxuICAgICAgICAvLyBOb3JtYWwgY29uZmlkZW5jZSByYW5nZSBmcm9tIGdlb2NvZGVyIGlzIGFib3V0IDAuMyAuLiAxXG4gICAgICAgIGlmICghY29uZmlkZW5jZSkge1xuICAgICAgICAgIC8vIG5vdCBmcm9tIGdlb2NvZGVyLCBlc3RpbWF0ZSBjb25maWRlbmNlIG91cnNlbHZlc1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBnZXRMYXllclJhbmsobGF5ZXIsIHNvdXJjZSkgK1xuICAgICAgICAgICAgbWF0Y2gobm9ybWFsaXplZFRlcm0sIHJlc3VsdC5wcm9wZXJ0aWVzKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZ2VvY29kZWQgaXRlbXMgd2l0aCBjb25maWRlbmNlLCBqdXN0IGFkanVzdCBhIGxpdHRsZVxuICAgICAgICBzd2l0Y2ggKGxheWVyKSB7XG4gICAgICAgICAgY2FzZSBMYXllclR5cGUuU3RhdGlvbjoge1xuICAgICAgICAgICAgY29uc3QgYm9vc3QgPSBzb3VyY2UuaW5kZXhPZignZ3RmcycpID09PSAwID8gMC4wMiA6IDAuMDE7XG4gICAgICAgICAgICByZXR1cm4gY29uZmlkZW5jZSArIGJvb3N0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIExheWVyVHlwZS5TdG9wOlxuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZGVuY2UgLSAwLjA1O1xuICAgICAgICAgIGNhc2UgTGF5ZXJUeXBlLkNhclBhcms6XG4gICAgICAgICAgICByZXR1cm4gY29uZmlkZW5jZSAtIDAuMDU7XG4gICAgICAgICAgY2FzZSBMYXllclR5cGUuQmlrZVBhcms6XG4gICAgICAgICAgICByZXR1cm4gY29uZmlkZW5jZSAtIDAuMDU7XG4gICAgICAgICAgY2FzZSBMYXllclR5cGUuVmVoaWNsZVJlbnRhbFN0YXRpb246XG4gICAgICAgICAgICByZXR1cm4gY29uZmlkZW5jZSAtIDAuMDQ7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBjb25maWRlbmNlO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcmVzdWx0ID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdC5wcm9wZXJ0aWVzLnNob3J0TmFtZSkge1xuICAgICAgICAgIHJldHVybiB0ZXN0U2hvcnROYW1lTWF0Y2hlc0xpbmVXaXRoTnVtYmVyc0FuZExldHRlcnMoXG4gICAgICAgICAgICByZXN1bHQucHJvcGVydGllcy5zaG9ydE5hbWUsXG4gICAgICAgICAgKVxuICAgICAgICAgICAgPyBzcGxpdFNob3J0TmFtZUF0TGV0dGVycyhyZXN1bHQucHJvcGVydGllcy5zaG9ydE5hbWUpWzBdXG4gICAgICAgICAgICA6IHJlc3VsdC5wcm9wZXJ0aWVzLnNob3J0TmFtZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSxcbiAgICAgIHJlc3VsdCA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQucHJvcGVydGllcy5zaG9ydE5hbWUpIHtcbiAgICAgICAgICByZXR1cm4gdGVzdFNob3J0TmFtZU1hdGNoZXNMaW5lV2l0aE51bWJlcnNBbmRMZXR0ZXJzKFxuICAgICAgICAgICAgcmVzdWx0LnByb3BlcnRpZXMuc2hvcnROYW1lLFxuICAgICAgICAgIClcbiAgICAgICAgICAgID8gc3BsaXRTaG9ydE5hbWVBdExldHRlcnMocmVzdWx0LnByb3BlcnRpZXMuc2hvcnROYW1lKVsxXVxuICAgICAgICAgICAgOiByZXN1bHQucHJvcGVydGllcy5zaG9ydE5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0sXG4gICAgICAncHJvcGVydGllcy5sb25nTmFtZScsXG4gICAgXSxcbiAgICBbJ2Rlc2MnLCAnZGVzYycsICdhc2MnLCAnYXNjJywgJ2FzYyddLFxuICApO1xuXG4gIHJldHVybiB1bmlxV2l0aChvcmRlcmVkUmVzdWx0cywgaXNEdXBsaWNhdGUpO1xufTtcblxuLyoqXG4gKiBQYXJzZXMgc3RvcCdzIG5hbWUgd2l0aG91dCBzdG9wIGNvZGUgZnJvbSBhIHN0b3AgbmFtZSBmcm9tIGdlb2NvZGluZyByZXN1bHRzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsIHN0b3AncyBuYW1lIGZyb20gZ2VvY29kaW5nIHJlc3VsdHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RvcENvZGUgc3RvcCBjb2RlLlxuICovXG5leHBvcnQgY29uc3QgZ2V0U3RvcE5hbWUgPSAobmFtZSwgc3RvcENvZGUpID0+IHtcbiAgaWYgKFxuICAgIHN0b3BDb2RlICE9PSB1bmRlZmluZWQgJiZcbiAgICBzdG9wQ29kZSAhPT0gbnVsbCAmJlxuICAgIG5hbWUubGFzdEluZGV4T2Yoc3RvcENvZGUpICE9PSAtMVxuICApIHtcbiAgICByZXR1cm4gbmFtZS5zdWJzdHJpbmcoMCwgbmFtZS5sYXN0SW5kZXhPZihzdG9wQ29kZSkgLSAxKTtcbiAgfVxuICByZXR1cm4gbmFtZTtcbn07XG4iLCJpbXBvcnQgZ2V0IGZyb20gJ2xvZGFzaC9nZXQnO1xuXG4vKipcbiAqIEZ1bmN0aW9uIHRoYXQgZmlsdGVycyBsaXN0IG1hdGNoaW5nIHRvIGlucHV0LlxuICpcbiAqIEBuYW1lIGZpbHRlck1hdGNoaW5nVG9JbnB1dFxuICogQHBhcmFtIHtBcnJheX0gbGlzdCBMaXN0IGNvbnRhaW5pbiBvYmplY3RzIGUuZyggIHtcbiAqICAgICAgICAgdHlwZTogJ0ZlYXR1cmUnXG4gKiAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAqICAgICAgICAgICBsYWJlbDogJ3Rlc3RhZGRyZXNzNCcsXG4gKiAgICAgICAgICAgbGF5ZXI6ICdhZGRyZXNzJyxcbiAqICAgICAgICAgICBuYW1lOiAndGVzdGFkZHJlc3M0JyxcbiAqICAgICAgICAgfSxcbiAqICAgICAgICAgZ2VvbWV0cnk6IHsgY29vcmRpbmF0ZXM6IFtsb24sIGxhdF0gfSxcbiAqICAgICAgIH0sKVxuICogQHBhcmFtIHtTdHJpbmd9IElucHV0IElucHV0IGdpdmVuIGZvciBmaWx0ZXJpbmcgdGhlIGxpc3RcbiAqIEBwYXJhbSB7QXJyYXl9IGZpZWxkcyBMaXN0IG9mIGZpZWxkcyB0aGF0IGxpc3QgaXMgZmlsdGVyZWQgYnkgZS5nIChbcHJvcGVydGllcy5sYWJlbCwgcHJvcGVydGllcy5uYW1lXSlcbiAqIEByZXR1cm5zIHtBcnJheX0gRmlsdGVyZWQgQXJyYXkuXG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtdXRpbC5maWx0ZXJNYXRjaGluZ1RvSW5wdXQoW3t0eXBlOiBmZWF0dXJlLCBwcm9wZXJ0aWVzIHsgLi4uIG5hbWU6IHRlc3RhZGRyZXNzNCB9IC4uLiB9XSwgJ3Rlc3RhZGRyZXNzNCcsICdwcm9wZXJ0aWVzLm5hbWUnKTtcbiAqIC8vPSBMaXN0IGNvbnRhaW5pbmcgb2JqZWN0IHdpdGggZ2l2ZW4gbmFtZS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZmlsdGVyTWF0Y2hpbmdUb0lucHV0KGxpc3QsIElucHV0LCBmaWVsZHMpIHtcbiAgaWYgKHR5cGVvZiBJbnB1dCA9PT0gJ3N0cmluZycgJiYgSW5wdXQubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGlucHV0ID0gSW5wdXQudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgY29uc3QgbXVsdGlXb3JkID0gaW5wdXQuaW5jbHVkZXMoJyAnKSB8fCBpbnB1dC5pbmNsdWRlcygnLCcpO1xuICAgIHJldHVybiBsaXN0LmZpbHRlcihpdGVtID0+IHtcbiAgICAgIGxldCBwYXJ0cyA9IFtdO1xuICAgICAgZmllbGRzLmZvckVhY2gocE5hbWUgPT4ge1xuICAgICAgICBsZXQgdmFsdWUgPSBnZXQoaXRlbSwgcE5hbWUpO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAhbXVsdGlXb3JkICYmXG4gICAgICAgICAgKHBOYW1lID09PSAncHJvcGVydGllcy5sYWJlbCcgfHwgcE5hbWUgPT09ICdhZGRyZXNzJykgJiZcbiAgICAgICAgICB2YWx1ZVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBzcGVjaWFsIGNhc2U6IGRyb3AgbGFzdCBwYXJ0cyBpLmUuIGNpdHkgYW5kIG5laWdoYm91cmhvb2RcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnNwbGl0KCcsJyk7XG4gICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgIHZhbHVlLnNwbGljZSh2YWx1ZS5sZW5ndGggLSAyLCAyKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHZhbHVlLnNwbGljZSh2YWx1ZS5sZW5ndGggLSAxLCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZS5qb2luKCcsJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKG11bHRpV29yZCkge1xuICAgICAgICAgICAgcGFydHMgPSBwYXJ0cy5jb25jYXQodmFsdWUudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcnRzID0gcGFydHMuY29uY2F0KFxuICAgICAgICAgICAgICB2YWx1ZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLywvZywgJyAnKS5zcGxpdCgnICcpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAocGFydHNbaV0uaW5kZXhPZihpbnB1dCkgPT09IDApIHtcbiAgICAgICAgICAvLyBhY2NlcHQgbWF0Y2ggb25seSBhdCB3b3JkIHN0YXJ0XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBsaXN0O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENyZWF0ZSBhIGJvdW5kIHZlcnNpb24gb2YgYSBmdW5jdGlvbiB3aXRoIGEgc3BlY2lmaWVkIGB0aGlzYCBjb250ZXh0XG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gLSBUaGUgZnVuY3Rpb24gdG8gYmluZFxuICogQHBhcmFtIHsqfSB0aGlzQXJnIC0gVGhlIHZhbHVlIHRvIGJlIHBhc3NlZCBhcyB0aGUgYHRoaXNgIHBhcmFtZXRlclxuICogQHJldHVybnMge0Z1bmN0aW9ufSBBIG5ldyBmdW5jdGlvbiB0aGF0IHdpbGwgY2FsbCB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gd2l0aCB0aGUgc3BlY2lmaWVkIGB0aGlzYCBjb250ZXh0XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJpbmQoZm4sIHRoaXNBcmcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXNBcmcsIGFyZ3VtZW50cyk7XG4gIH07XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBiaW5kIGZyb20gJy4vaGVscGVycy9iaW5kLmpzJztcblxuLy8gdXRpbHMgaXMgYSBsaWJyYXJ5IG9mIGdlbmVyaWMgaGVscGVyIGZ1bmN0aW9ucyBub24tc3BlY2lmaWMgdG8gYXhpb3NcblxuY29uc3QgeyB0b1N0cmluZyB9ID0gT2JqZWN0LnByb3RvdHlwZTtcbmNvbnN0IHsgZ2V0UHJvdG90eXBlT2YgfSA9IE9iamVjdDtcbmNvbnN0IHsgaXRlcmF0b3IsIHRvU3RyaW5nVGFnIH0gPSBTeW1ib2w7XG5cbmNvbnN0IGtpbmRPZiA9ICgoY2FjaGUpID0+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+IHtcbiAgICAgICAgZGVsZXRlIGhlYWRlcnNbbWV0aG9kXTtcbiAgICAgIH0pO1xuXG4gICAgY29uZmlnLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuY29uY2F0KGNvbnRleHRIZWFkZXJzLCBoZWFkZXJzKTtcblxuICAgIC8vIGZpbHRlciBvdXQgc2tpcHBlZCBpbnRlcmNlcHRvcnNcbiAgICBjb25zdCByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbiA9IFtdO1xuICAgIGxldCBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSB0cnVlO1xuICAgIHRoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbiB1bnNoaWZ0UmVxdWVzdEludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgICAgaWYgKHR5cGVvZiBpbnRlcmNlcHRvci5ydW5XaGVuID09PSAnZnVuY3Rpb24nICYmIGludGVyY2VwdG9yLnJ1bldoZW4oY29uZmlnKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgJiYgaW50ZXJjZXB0b3Iuc3luY2hyb25vdXM7XG5cbiAgICAgIGNvbnN0IHRyYW5zaXRpb25hbCA9IGNvbmZpZy50cmFuc2l0aW9uYWwgfHwgdHJhbnNpdGlvbmFsRGVmYXVsdHM7XG4gICAgICBjb25zdCBsZWdhY3lJbnRlcmNlcHRvclJlcVJlc09yZGVyaW5nID1cbiAgICAgICAgdHJhbnNpdGlvbmFsICYmIHRyYW5zaXRpb25hbC5sZWdhY3lJbnRlcmNlcHRvclJlcVJlc09yZGVyaW5nO1xuXG4gICAgICBpZiAobGVnYWN5SW50ZXJjZXB0b3JSZXFSZXNPcmRlcmluZykge1xuICAgICAgICByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi51bnNoaWZ0KGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4ucHVzaChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbiA9IFtdO1xuICAgIHRoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24gcHVzaFJlc3BvbnNlSW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgICByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ucHVzaChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgICB9KTtcblxuICAgIGxldCBwcm9taXNlO1xuICAgIGxldCBpID0gMDtcbiAgICBsZXQgbGVuO1xuXG4gICAgaWYgKCFzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMpIHtcbiAgICAgIGNvbnN0IGNoYWluID0gW2Rpc3BhdGNoUmVxdWVzdC5iaW5kKHRoaXMpLCB1bmRlZmluZWRdO1xuICAgICAgY2hhaW4udW5zaGlmdCguLi5yZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbik7XG4gICAgICBjaGFpbi5wdXNoKC4uLnJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbik7XG4gICAgICBsZW4gPSBjaGFpbi5sZW5ndGg7XG5cbiAgICAgIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoY29uZmlnKTtcblxuICAgICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihjaGFpbltpKytdLCBjaGFpbltpKytdKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuXG4gICAgbGVuID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoO1xuXG4gICAgbGV0IG5ld0NvbmZpZyA9IGNvbmZpZztcblxuICAgIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgICBjb25zdCBvbkZ1bGZpbGxlZCA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluW2krK107XG4gICAgICBjb25zdCBvblJlamVjdGVkID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW5baSsrXTtcbiAgICAgIHRyeSB7XG4gICAgICAgIG5ld0NvbmZpZyA9IG9uRnVsZmlsbGVkKG5ld0NvbmZpZyk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBvblJlamVjdGVkLmNhbGwodGhpcywgZXJyb3IpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcHJvbWlzZSA9IGRpc3BhdGNoUmVxdWVzdC5jYWxsKHRoaXMsIG5ld0NvbmZpZyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgfVxuXG4gICAgaSA9IDA7XG4gICAgbGVuID0gcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLmxlbmd0aDtcblxuICAgIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbltpKytdLCByZXNwb25zZUludGVyY2VwdG9yQ2hhaW5baSsrXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cblxuICBnZXRVcmkoY29uZmlnKSB7XG4gICAgY29uZmlnID0gbWVyZ2VDb25maWcodGhpcy5kZWZhdWx0cywgY29uZmlnKTtcbiAgICBjb25zdCBmdWxsUGF0aCA9IGJ1aWxkRnVsbFBhdGgoY29uZmlnLmJhc2VVUkwsIGNvbmZpZy51cmwsIGNvbmZpZy5hbGxvd0Fic29sdXRlVXJscyk7XG4gICAgcmV0dXJuIGJ1aWxkVVJMKGZ1bGxQYXRoLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplcik7XG4gIH1cbn1cblxuLy8gUHJvdmlkZSBhbGlhc2VzIGZvciBzdXBwb3J0ZWQgcmVxdWVzdCBtZXRob2RzXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ29wdGlvbnMnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZE5vRGF0YShtZXRob2QpIHtcbiAgLyplc2xpbnQgZnVuYy1uYW1lczowKi9cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbiAodXJsLCBjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KFxuICAgICAgbWVyZ2VDb25maWcoY29uZmlnIHx8IHt9LCB7XG4gICAgICAgIG1ldGhvZCxcbiAgICAgICAgdXJsLFxuICAgICAgICBkYXRhOiAoY29uZmlnIHx8IHt9KS5kYXRhLFxuICAgICAgfSlcbiAgICApO1xuICB9O1xufSk7XG5cbnV0aWxzLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCcsICdxdWVyeSddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIGZ1bmN0aW9uIGdlbmVyYXRlSFRUUE1ldGhvZChpc0Zvcm0pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gaHR0cE1ldGhvZCh1cmwsIGRhdGEsIGNvbmZpZykge1xuICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdChcbiAgICAgICAgbWVyZ2VDb25maWcoY29uZmlnIHx8IHt9LCB7XG4gICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgIGhlYWRlcnM6IGlzRm9ybVxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJyxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7fSxcbiAgICAgICAgICB1cmwsXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfTtcbiAgfVxuXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZ2VuZXJhdGVIVFRQTWV0aG9kKCk7XG5cbiAgLy8gUVVFUlkgaXMgYSBzYWZlL2lkZW1wb3RlbnQgcmVhZCBtZXRob2Q7IG11bHRpcGFydCBmb3JtIGJvZGllcyBkb24ndCBmaXRcbiAgLy8gaXRzIHNlbWFudGljcywgc28gbm8gcXVlcnlGb3JtIHNob3J0aGFuZCBpcyBnZW5lcmF0ZWQuXG4gIGlmIChtZXRob2QgIT09ICdxdWVyeScpIHtcbiAgICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kICsgJ0Zvcm0nXSA9IGdlbmVyYXRlSFRUUE1ldGhvZCh0cnVlKTtcbiAgfVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IEF4aW9zO1xuIiwiY29uc3QgSHR0cFN0YXR1c0NvZGUgPSB7XG4gIENvbnRpbnVlOiAxMDAsXG4gIFN3aXRjaGluZ1Byb3RvY29sczogMTAxLFxuICBQcm9jZXNzaW5nOiAxMDIsXG4gIEVhcmx5SGludHM6IDEwMyxcbiAgT2s6IDIwMCxcbiAgQ3JlYXRlZDogMjAxLFxuICBBY2NlcHRlZDogMjAyLFxuICBOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb246IDIwMyxcbiAgTm9Db250ZW50OiAyMDQsXG4gIFJlc2V0Q29udGVudDogMjA1LFxuICBQYXJ0aWFsQ29udGVudDogMjA2LFxuICBNdWx0aVN0YXR1czogMjA3LFxuICBBbHJlYWR5UmVwb3J0ZWQ6IDIwOCxcbiAgSW1Vc2VkOiAyMjYsXG4gIE11bHRpcGxlQ2hvaWNlczogMzAwLFxuICBNb3ZlZFBlcm1hbmVudGx5OiAzMDEsXG4gIEZvdW5kOiAzMDIsXG4gIFNlZU90aGVyOiAzMDMsXG4gIE5vdE1vZGlmaWVkOiAzMDQsXG4gIFVzZVByb3h5OiAzMDUsXG4gIFVudXNlZDogMzA2LFxuICBUZW1wb3JhcnlSZWRpcmVjdDogMzA3LFxuICBQZXJtYW5lbnRSZWRpcmVjdDogMzA4LFxuICBCYWRSZXF1ZXN0OiA0MDAsXG4gIFVuYXV0aG9yaXplZDogNDAxLFxuICBQYXltZW50UmVxdWlyZWQ6IDQwMixcbiAgRm9yYmlkZGVuOiA0MDMsXG4gIE5vdEZvdW5kOiA0MDQsXG4gIE1ldGhvZE5vdEFsbG93ZWQ6IDQwNSxcbiAgTm90QWNjZXB0YWJsZTogNDA2LFxuICBQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6IDQwNyxcbiAgUmVxdWVzdFRpbWVvdXQ6IDQwOCxcbiAgQ29uZmxpY3Q6IDQwOSxcbiAgR29uZTogNDEwLFxuICBMZW5ndGhSZXF1aXJlZDogNDExLFxuICBQcmVjb25kaXRpb25GYWlsZWQ6IDQxMixcbiAgUGF5bG9hZFRvb0xhcmdlOiA0MTMsXG4gIFVyaVRvb0xvbmc6IDQxNCxcbiAgVW5zdXBwb3J0ZWRNZWRpYVR5cGU6IDQxNSxcbiAgUmFuZ2VOb3RTYXRpc2ZpYWJsZTogNDE2LFxuICBFeHBlY3RhdGlvbkZhaWxlZDogNDE3LFxuICBJbUFUZWFwb3Q6IDQxOCxcbiAgTWlzZGlyZWN0ZWRSZXF1ZXN0OiA0MjEsXG4gIFVucHJvY2Vzc2FibGVFbnRpdHk6IDQyMixcbiAgTG9ja2VkOiA0MjMsXG4gIEZhaWxlZERlcGVuZGVuY3k6IDQyNCxcbiAgVG9vRWFybHk6IDQyNSxcbiAgVXBncmFkZVJlcXVpcmVkOiA0MjYsXG4gIFByZWNvbmRpdGlvblJlcXVpcmVkOiA0MjgsXG4gIFRvb01hbnlSZXF1ZXN0czogNDI5LFxuICBSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6IDQzMSxcbiAgVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnM6IDQ1MSxcbiAgSW50ZXJuYWxTZXJ2ZXJFcnJvcjogNTAwLFxuICBOb3RJbXBsZW1lbnRlZDogNTAxLFxuICBCYWRHYXRld2F5OiA1MDIsXG4gIFNlcnZpY2VVbmF2YWlsYWJsZTogNTAzLFxuICBHYXRld2F5VGltZW91dDogNTA0LFxuICBIdHRwVmVyc2lvbk5vdFN1cHBvcnRlZDogNTA1LFxuICBWYXJpYW50QWxzb05lZ290aWF0ZXM6IDUwNixcbiAgSW5zdWZmaWNpZW50U3RvcmFnZTogNTA3LFxuICBMb29wRGV0ZWN0ZWQ6IDUwOCxcbiAgTm90RXh0ZW5kZWQ6IDUxMCxcbiAgTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6IDUxMSxcbiAgV2ViU2VydmVySXNEb3duOiA1MjEsXG4gIENvbm5lY3Rpb25UaW1lZE91dDogNTIyLFxuICBPcmlnaW5Jc1VucmVhY2hhYmxlOiA1MjMsXG4gIFRpbWVvdXRPY2N1cnJlZDogNTI0LFxuICBTc2xIYW5kc2hha2VGYWlsZWQ6IDUyNSxcbiAgSW52YWxpZFNzbENlcnRpZmljYXRlOiA1MjYsXG59O1xuXG5PYmplY3QuZW50cmllcyhIdHRwU3RhdHVzQ29kZSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gIEh0dHBTdGF0dXNDb2RlW3ZhbHVlXSA9IGtleTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBIdHRwU3RhdHVzQ29kZTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMuanMnO1xuaW1wb3J0IGJpbmQgZnJvbSAnLi9oZWxwZXJzL2JpbmQuanMnO1xuaW1wb3J0IEF4aW9zIGZyb20gJy4vY29yZS9BeGlvcy5qcyc7XG5pbXBvcnQgbWVyZ2VDb25maWcgZnJvbSAnLi9jb3JlL21lcmdlQ29uZmlnLmpzJztcbmltcG9ydCBkZWZhdWx0cyBmcm9tICcuL2RlZmF1bHRzL2luZGV4LmpzJztcbmltcG9ydCBmb3JtRGF0YVRvSlNPTiBmcm9tICcuL2hlbHBlcnMvZm9ybURhdGFUb0pTT04uanMnO1xuaW1wb3J0IENhbmNlbGVkRXJyb3IgZnJvbSAnLi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qcyc7XG5pbXBvcnQgQ2FuY2VsVG9rZW4gZnJvbSAnLi9jYW5jZWwvQ2FuY2VsVG9rZW4uanMnO1xuaW1wb3J0IGlzQ2FuY2VsIGZyb20gJy4vY2FuY2VsL2lzQ2FuY2VsLmpzJztcbmltcG9ydCB7IFZFUlNJT04gfSBmcm9tICcuL2Vudi9kYXRhLmpzJztcbmltcG9ydCB0b0Zvcm1EYXRhIGZyb20gJy4vaGVscGVycy90b0Zvcm1EYXRhLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4vY29yZS9BeGlvc0Vycm9yLmpzJztcbmltcG9ydCBzcHJlYWQgZnJvbSAnLi9oZWxwZXJzL3NwcmVhZC5qcyc7XG5pbXBvcnQgaXNBeGlvc0Vycm9yIGZyb20gJy4vaGVscGVycy9pc0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuL2NvcmUvQXhpb3NIZWFkZXJzLmpzJztcbmltcG9ydCBhZGFwdGVycyBmcm9tICcuL2FkYXB0ZXJzL2FkYXB0ZXJzLmpzJztcbmltcG9ydCBIdHRwU3RhdHVzQ29kZSBmcm9tICcuL2hlbHBlcnMvSHR0cFN0YXR1c0NvZGUuanMnO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBkZWZhdWx0Q29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKlxuICogQHJldHVybnMge0F4aW9zfSBBIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICovXG5mdW5jdGlvbiBjcmVhdGVJbnN0YW5jZShkZWZhdWx0Q29uZmlnKSB7XG4gIGNvbnN0IGNvbnRleHQgPSBuZXcgQXhpb3MoZGVmYXVsdENvbmZpZyk7XG4gIGNvbnN0IGluc3RhbmNlID0gYmluZChBeGlvcy5wcm90b3R5cGUucmVxdWVzdCwgY29udGV4dCk7XG5cbiAgLy8gQ29weSBheGlvcy5wcm90b3R5cGUgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBBeGlvcy5wcm90b3R5cGUsIGNvbnRleHQsIHsgYWxsT3duS2V5czogdHJ1ZSB9KTtcblxuICAvLyBDb3B5IGNvbnRleHQgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBjb250ZXh0LCBudWxsLCB7IGFsbE93bktleXM6IHRydWUgfSk7XG5cbiAgLy8gRmFjdG9yeSBmb3IgY3JlYXRpbmcgbmV3IGluc3RhbmNlc1xuICBpbnN0YW5jZS5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaW5zdGFuY2VDb25maWcpIHtcbiAgICByZXR1cm4gY3JlYXRlSW5zdGFuY2UobWVyZ2VDb25maWcoZGVmYXVsdENvbmZpZywgaW5zdGFuY2VDb25maWcpKTtcbiAgfTtcblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbi8vIENyZWF0ZSB0aGUgZGVmYXVsdCBpbnN0YW5jZSB0byBiZSBleHBvcnRlZFxuY29uc3QgYXhpb3MgPSBjcmVhdGVJbnN0YW5jZShkZWZhdWx0cyk7XG5cbi8vIEV4cG9zZSBBeGlvcyBjbGFzcyB0byBhbGxvdyBjbGFzcyBpbmhlcml0YW5jZVxuYXhpb3MuQXhpb3MgPSBBeGlvcztcblxuLy8gRXhwb3NlIENhbmNlbCAmIENhbmNlbFRva2VuXG5heGlvcy5DYW5jZWxlZEVycm9yID0gQ2FuY2VsZWRFcnJvcjtcbmF4aW9zLkNhbmNlbFRva2VuID0gQ2FuY2VsVG9rZW47XG5heGlvcy5pc0NhbmNlbCA9IGlzQ2FuY2VsO1xuYXhpb3MuVkVSU0lPTiA9IFZFUlNJT047XG5heGlvcy50b0Zvcm1EYXRhID0gdG9Gb3JtRGF0YTtcblxuLy8gRXhwb3NlIEF4aW9zRXJyb3IgY2xhc3NcbmF4aW9zLkF4aW9zRXJyb3IgPSBBeGlvc0Vycm9yO1xuXG4vLyBhbGlhcyBmb3IgQ2FuY2VsZWRFcnJvciBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuYXhpb3MuQ2FuY2VsID0gYXhpb3MuQ2FuY2VsZWRFcnJvcjtcblxuLy8gRXhwb3NlIGFsbC9zcHJlYWRcbmF4aW9zLmFsbCA9IGZ1bmN0aW9uIGFsbChwcm9taXNlcykge1xuICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xufTtcblxuYXhpb3Muc3ByZWFkID0gc3ByZWFkO1xuXG4vLyBFeHBvc2UgaXNBeGlvc0Vycm9yXG5heGlvcy5pc0F4aW9zRXJyb3IgPSBpc0F4aW9zRXJyb3I7XG5cbi8vIEV4cG9zZSBtZXJnZUNvbmZpZ1xuYXhpb3MubWVyZ2VDb25maWcgPSBtZXJnZUNvbmZpZztcblxuYXhpb3MuQXhpb3NIZWFkZXJzID0gQXhpb3NIZWFkZXJzO1xuXG5heGlvcy5mb3JtVG9KU09OID0gKHRoaW5nKSA9PiBmb3JtRGF0YVRvSlNPTih1dGlscy5pc0hUTUxGb3JtKHRoaW5nKSA/IG5ldyBGb3JtRGF0YSh0aGluZykgOiB0aGluZyk7XG5cbmF4aW9zLmdldEFkYXB0ZXIgPSBhZGFwdGVycy5nZXRBZGFwdGVyO1xuXG5heGlvcy5IdHRwU3RhdHVzQ29kZSA9IEh0dHBTdGF0dXNDb2RlO1xuXG5heGlvcy5kZWZhdWx0ID0gYXhpb3M7XG5cbi8vIHRoaXMgbW9kdWxlIHNob3VsZCBvbmx5IGhhdmUgYSBkZWZhdWx0IGV4cG9ydFxuZXhwb3J0IGRlZmF1bHQgYXhpb3M7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBDYW5jZWxlZEVycm9yIGZyb20gJy4vQ2FuY2VsZWRFcnJvci5qcyc7XG5cbi8qKlxuICogQSBgQ2FuY2VsVG9rZW5gIGlzIGFuIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlcXVlc3QgY2FuY2VsbGF0aW9uIG9mIGFuIG9wZXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBleGVjdXRvciBUaGUgZXhlY3V0b3IgZnVuY3Rpb24uXG4gKlxuICogQHJldHVybnMge0NhbmNlbFRva2VufVxuICovXG5jbGFzcyBDYW5jZWxUb2tlbiB7XG4gIGNvbnN0cnVjdG9yKGV4ZWN1dG9yKSB7XG4gICAgaWYgKHR5cGVvZiBleGVjdXRvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLicpO1xuICAgIH1cblxuICAgIGxldCByZXNvbHZlUHJvbWlzZTtcblxuICAgIHRoaXMucHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIHByb21pc2VFeGVjdXRvcihyZXNvbHZlKSB7XG4gICAgICByZXNvbHZlUHJvbWlzZSA9IHJlc29sdmU7XG4gICAgfSk7XG5cbiAgICBjb25zdCB0b2tlbiA9IHRoaXM7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgIHRoaXMucHJvbWlzZS50aGVuKChjYW5jZWwpID0+IHtcbiAgICAgIGlmICghdG9rZW4uX2xpc3RlbmVycykgcmV0dXJuO1xuXG4gICAgICBsZXQgaSA9IHRva2VuLl9saXN0ZW5lcnMubGVuZ3RoO1xuXG4gICAgICB3aGlsZSAoaS0tID4gMCkge1xuICAgICAgICB0b2tlbi5fbGlzdGVuZXJzW2ldKGNhbmNlbCk7XG4gICAgICB9XG4gICAgICB0b2tlbi5fbGlzdGVuZXJzID0gbnVsbDtcbiAgICB9KTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgdGhpcy5wcm9taXNlLnRoZW4gPSAob25mdWxmaWxsZWQpID0+IHtcbiAgICAgIGxldCBfcmVzb2x2ZTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgdG9rZW4uc3Vic2NyaWJlKHJlc29sdmUpO1xuICAgICAgICBfcmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICB9KS50aGVuKG9uZnVsZmlsbGVkKTtcblxuICAgICAgcHJvbWlzZS5jYW5jZWwgPSBmdW5jdGlvbiByZWplY3QoKSB7XG4gICAgICAgIHRva2VuLnVuc3Vic2NyaWJlKF9yZXNvbHZlKTtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH07XG5cbiAgICBleGVjdXRvcihmdW5jdGlvbiBjYW5jZWwobWVzc2FnZSwgY29uZmlnLCByZXF1ZXN0KSB7XG4gICAgICBpZiAodG9rZW4ucmVhc29uKSB7XG4gICAgICAgIC8vIENhbmNlbGxhdGlvbiBoYXMgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZFxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRva2VuLnJlYXNvbiA9IG5ldyBDYW5jZWxlZEVycm9yKG1lc3NhZ2UsIGNvbmZpZywgcmVxdWVzdCk7XG4gICAgICByZXNvbHZlUHJvbWlzZSh0b2tlbi5yZWFzb24pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRocm93cyBhIGBDYW5jZWxlZEVycm9yYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICAgKi9cbiAgdGhyb3dJZlJlcXVlc3RlZCgpIHtcbiAgICBpZiAodGhpcy5yZWFzb24pIHtcbiAgICAgIHRocm93IHRoaXMucmVhc29uO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJzY3JpYmUgdG8gdGhlIGNhbmNlbCBzaWduYWxcbiAgICovXG5cbiAgc3Vic2NyaWJlKGxpc3RlbmVyKSB7XG4gICAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgICBsaXN0ZW5lcih0aGlzLnJlYXNvbik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2xpc3RlbmVycykge1xuICAgICAgdGhpcy5fbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9saXN0ZW5lcnMgPSBbbGlzdGVuZXJdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVbnN1YnNjcmliZSBmcm9tIHRoZSBjYW5jZWwgc2lnbmFsXG4gICAqL1xuXG4gIHVuc3Vic2NyaWJlKGxpc3RlbmVyKSB7XG4gICAgaWYgKCF0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLl9saXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5fbGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICB9XG5cbiAgdG9BYm9ydFNpZ25hbCgpIHtcbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gICAgY29uc3QgYWJvcnQgPSAoZXJyKSA9PiB7XG4gICAgICBjb250cm9sbGVyLmFib3J0KGVycik7XG4gICAgfTtcblxuICAgIHRoaXMuc3Vic2NyaWJlKGFib3J0KTtcblxuICAgIGNvbnRyb2xsZXIuc2lnbmFsLnVuc3Vic2NyaWJlID0gKCkgPT4gdGhpcy51bnN1YnNjcmliZShhYm9ydCk7XG5cbiAgICByZXR1cm4gY29udHJvbGxlci5zaWduYWw7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBvYmplY3QgdGhhdCBjb250YWlucyBhIG5ldyBgQ2FuY2VsVG9rZW5gIGFuZCBhIGZ1bmN0aW9uIHRoYXQsIHdoZW4gY2FsbGVkLFxuICAgKiBjYW5jZWxzIHRoZSBgQ2FuY2VsVG9rZW5gLlxuICAgKi9cbiAgc3RhdGljIHNvdXJjZSgpIHtcbiAgICBsZXQgY2FuY2VsO1xuICAgIGNvbnN0IHRva2VuID0gbmV3IENhbmNlbFRva2VuKGZ1bmN0aW9uIGV4ZWN1dG9yKGMpIHtcbiAgICAgIGNhbmNlbCA9IGM7XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRva2VuLFxuICAgICAgY2FuY2VsLFxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2FuY2VsVG9rZW47XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogU3ludGFjdGljIHN1Z2FyIGZvciBpbnZva2luZyBhIGZ1bmN0aW9uIGFuZCBleHBhbmRpbmcgYW4gYXJyYXkgZm9yIGFyZ3VtZW50cy5cbiAqXG4gKiBDb21tb24gdXNlIGNhc2Ugd291bGQgYmUgdG8gdXNlIGBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHlgLlxuICpcbiAqICBgYGBqc1xuICogIGZ1bmN0aW9uIGYoeCwgeSwgeikge31cbiAqICBjb25zdCBhcmdzID0gWzEsIDIsIDNdO1xuICogIGYuYXBwbHkobnVsbCwgYXJncyk7XG4gKiAgYGBgXG4gKlxuICogV2l0aCBgc3ByZWFkYCB0aGlzIGV4YW1wbGUgY2FuIGJlIHJlLXdyaXR0ZW4uXG4gKlxuICogIGBgYGpzXG4gKiAgc3ByZWFkKGZ1bmN0aW9uKHgsIHksIHopIHt9KShbMSwgMiwgM10pO1xuICogIGBgYFxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKlxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzcHJlYWQoY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoYXJyKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFycik7XG4gIH07XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvc1xuICpcbiAqIEBwYXJhbSB7Kn0gcGF5bG9hZCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvcywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzQXhpb3NFcnJvcihwYXlsb2FkKSB7XG4gIHJldHVybiB1dGlscy5pc09iamVjdChwYXlsb2FkKSAmJiBwYXlsb2FkLmlzQXhpb3NFcnJvciA9PT0gdHJ1ZTtcbn1cbiIsImltcG9ydCBheGlvcyBmcm9tICcuL2xpYi9heGlvcy5qcyc7XG5cbi8vIFRoaXMgbW9kdWxlIGlzIGludGVuZGVkIHRvIHVud3JhcCBBeGlvcyBkZWZhdWx0IGV4cG9ydCBhcyBuYW1lZC5cbi8vIEtlZXAgdG9wLWxldmVsIGV4cG9ydCBzYW1lIHdpdGggc3RhdGljIHByb3BlcnRpZXNcbi8vIHNvIHRoYXQgaXQgY2FuIGtlZXAgc2FtZSB3aXRoIGVzIG1vZHVsZSBvciBjanNcbmNvbnN0IHtcbiAgQXhpb3MsXG4gIEF4aW9zRXJyb3IsXG4gIENhbmNlbGVkRXJyb3IsXG4gIGlzQ2FuY2VsLFxuICBDYW5jZWxUb2tlbixcbiAgVkVSU0lPTixcbiAgYWxsLFxuICBDYW5jZWwsXG4gIGlzQXhpb3NFcnJvcixcbiAgc3ByZWFkLFxuICB0b0Zvcm1EYXRhLFxuICBBeGlvc0hlYWRlcnMsXG4gIEh0dHBTdGF0dXNDb2RlLFxuICBmb3JtVG9KU09OLFxuICBnZXRBZGFwdGVyLFxuICBtZXJnZUNvbmZpZyxcbiAgY3JlYXRlLFxufSA9IGF4aW9zO1xuXG5leHBvcnQge1xuICBheGlvcyBhcyBkZWZhdWx0LFxuICBjcmVhdGUsXG4gIEF4aW9zLFxuICBBeGlvc0Vycm9yLFxuICBDYW5jZWxlZEVycm9yLFxuICBpc0NhbmNlbCxcbiAgQ2FuY2VsVG9rZW4sXG4gIFZFUlNJT04sXG4gIGFsbCxcbiAgQ2FuY2VsLFxuICBpc0F4aW9zRXJyb3IsXG4gIHNwcmVhZCxcbiAgdG9Gb3JtRGF0YSxcbiAgQXhpb3NIZWFkZXJzLFxuICBIdHRwU3RhdHVzQ29kZSxcbiAgZm9ybVRvSlNPTixcbiAgZ2V0QWRhcHRlcixcbiAgbWVyZ2VDb25maWcsXG59O1xuIiwiLyoqXG4gKiBTZXJpYWxpemVzIG9iamVjdHNcbiAqXG4gKiBAbmFtZSBzZXJpYWxpemVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogT2JqZWN0IHRvIGJlIHNlcmlhbGl6ZWRcbiAqIEBwYXJhbSB7QW55fSBwcmVmaXhcbiAqIEByZXR1cm5zIHtTdHJpbmd9IFNlcmlhbGl6ZWQgb2JqZWN0XG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwuc2VyaWFsaXplKHBhcmFtMSwgcGFyYW0yKTtcbiAqIC8vPXRydWVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2VyaWFsaXplKG9iaiwgcHJlZml4KSB7XG4gIGlmICghb2JqKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopXG4gICAgLm1hcChwID0+IHtcbiAgICAgIGNvbnN0IGsgPSBwcmVmaXggfHwgcDtcbiAgICAgIGNvbnN0IHYgPSBvYmpbcF07XG5cbiAgICAgIHJldHVybiB0eXBlb2YgdiA9PT0gJ29iamVjdCdcbiAgICAgICAgPyBzZXJpYWxpemUodiwgaylcbiAgICAgICAgOiBgJHtlbmNvZGVVUklDb21wb25lbnQoayl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHYpfWA7XG4gICAgfSlcbiAgICAuam9pbignJicpO1xufVxuIiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCBzZXJpYWxpemUgZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXNlcmlhbGl6ZSc7XG4vKipcbiAqICBSZXR1cm4gUHJvbWlzZSBmb3IgYSB1cmwganNvbiBnZXQgcmVxdWVzdFxuICpcbiAqIEBuYW1lIGdldEpzb25cbiAqIEBwYXJhbSB7U3RyaW5nfSB1cmxcbiAqIEBwYXJhbSB7QXJyYXl9IHBhcmFtc1xuICogQHJldHVybnMge09iamVjdH0gcmVzcG9uc2VcbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC5nZXRKc29uKHBhcmFtMSwgcGFyYW0yKTtcbiAqIC8vPXJlc3BvbnNlXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0SnNvbih1cmwsIHBhcmFtcykge1xuICByZXR1cm4gYXhpb3NcbiAgICAuZ2V0KFxuICAgICAgZW5jb2RlVVJJKHVybCkgK1xuICAgICAgICAocGFyYW1zXG4gICAgICAgICAgPyAodXJsLnNlYXJjaCgvXFw/LykgPT09IC0xID8gJz8nIDogJyYnKSArIHNlcmlhbGl6ZShwYXJhbXMpXG4gICAgICAgICAgOiAnJyksXG4gICAgICB7XG4gICAgICAgIHRpbWVvdXQ6IDEwMDAwLFxuICAgICAgICBtZXRob2Q6ICdHRVQnLFxuXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgKVxuICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICByZXR1cm4gcmVzLmRhdGE7XG4gICAgfSk7XG59XG4iLCJpbXBvcnQgZ2V0SnNvbiBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWpzb24nO1xuXG5jb25zdCBERUZBVUxUX1BFTElBU19VUkwgPSAnaHR0cHM6Ly9hcGkuZGlnaXRyYW5zaXQuZmkvZ2VvY29kaW5nL3YxL3NlYXJjaCc7XG4vKipcbiAqIDxERVNDUklQVElPTj5cbiAqXG4gKiBAbmFtZSBnZXRHZW9jb2RpbmdSZXN1bHRzXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VhcmNoU3RyaW5nXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VhcmNoUGFyYW1zIChPcHRpb25hbCkgUGFyYW1ldGVycyBhcHBlbmRlZCB0byB1cmwsIGJhc2ljYWxseSBib3ggLyBwb2x5Z29uIHRvIHJlc3RyaWN0IHNlYXJjaCBhcmVhXG4gKiBAcGFyYW0ge1N0cmluZ30gbGFuZyAoT3B0aW9uYWwpIHNlYXJjaCBsYW5ndWFnZVxuICogQHBhcmFtIHtPYmplY3R9IGZvY3VzUG9pbnQgKE9wdGlvbmFsKSBPd24gUG9zaXRpb24gKFBFTElBUyBBUEkpXG4gKiBAcGFyYW0ge1N0cmluZ30gc291cmNlcyAoT3B0aW9uYWwpIHNlYXJjaCBzb3VyY2VzIChlLmcgT1NNLCBHVEZTLi4pXG4gKiBAcGFyYW0ge09iamVjdH0gbWluaW1hbFJlZ2V4cCAoT3B0aW9uYWwpIFJlZ2V4cCBmb3IgdGVzdGluZ1xuICogQHBhcmFtIHsqfSBnZW9jb2RpbmdMYXllcnMgKE9wdGlvbmFsKSBBcnJheSBvZiBzdHJpbmdzIHRoYXQgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hpY2ggbGF5ZXJzIGlzIHNlYXJjaGVkLCBlLmcuIFsndmVudWUnLCAnYWRkcmVzcycsICdzdG9wJ11cbiAqIEByZXR1cm5zIHtTdHJpbmd9IFJlc3VsdHMgaW4gSlNPTiBmb3JtXG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwuZ2V0R2VvY29kaW5nUmVzdWx0cyhcInJlc3VsdFwiKTtcbiAqIC8vPSBlLmcuIHt0ZXh0OlwicmVzdWx0XCJ9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEdlb2NvZGluZ1Jlc3VsdHMoXG4gIHNlYXJjaFN0cmluZyxcbiAgc2VhcmNoUGFyYW1zLFxuICBsYW5nLFxuICBmb2N1c1BvaW50LFxuICBzb3VyY2VzLFxuICBwZWxpYXNVcmwsXG4gIG1pbmltYWxSZWdleHAsXG4gIGdlb2NvZGluZ0xheWVycyxcbikge1xuICBjb25zdCB0ZXh0ID0gc2VhcmNoU3RyaW5nID8gc2VhcmNoU3RyaW5nLnRyaW0oKSA6IG51bGw7XG4gIGlmIChcbiAgICB0ZXh0ID09PSB1bmRlZmluZWQgfHxcbiAgICB0ZXh0ID09PSBudWxsIHx8XG4gICAgdGV4dC5sZW5ndGggPCAxIHx8XG4gICAgKG1pbmltYWxSZWdleHAgJiYgIW1pbmltYWxSZWdleHAudGVzdCh0ZXh0KSlcbiAgKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG4gIH1cbiAgY29uc3QgUEVMSUFTX1VSTCA9IHBlbGlhc1VybCB8fCBERUZBVUxUX1BFTElBU19VUkw7XG4gIGxldCBvcHRzID0geyB0ZXh0LCAuLi5zZWFyY2hQYXJhbXMsIC4uLmZvY3VzUG9pbnQsIGxhbmcgfTtcbiAgaWYgKHNvdXJjZXMpIHtcbiAgICBvcHRzID0geyAuLi5vcHRzLCBzb3VyY2VzIH07XG4gIH1cbiAgaWYgKGdlb2NvZGluZ0xheWVycykge1xuICAgIGNvbnN0IGxheWVycyA9IGdlb2NvZGluZ0xheWVycy50b1N0cmluZygpO1xuICAgIG9wdHMgPSB7IC4uLm9wdHMsIGxheWVycyB9O1xuICB9XG4gIHJldHVybiBnZXRKc29uKFBFTElBU19VUkwsIG9wdHMpLnRoZW4ocmVzID0+IHtcbiAgICByZXR1cm4gcmVzLmZlYXR1cmVzO1xuICB9KTtcbn1cbiIsImltcG9ydCBkZWJvdW5jZSBmcm9tICdsb2Rhc2gvZGVib3VuY2UnO1xuaW1wb3J0IGZsYXR0ZW4gZnJvbSAnbG9kYXNoL2ZsYXR0ZW4nO1xuaW1wb3J0IHRha2UgZnJvbSAnbG9kYXNoL3Rha2UnO1xuaW1wb3J0IHtcbiAgc29ydFNlYXJjaFJlc3VsdHMsXG4gIGlzU3RvcCxcbn0gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWhlbHBlcnMnO1xuaW1wb3J0IGZpbHRlck1hdGNoaW5nVG9JbnB1dCBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZmlsdGVyLW1hdGNoaW5nLXRvLWlucHV0JztcbmltcG9ydCBnZXRHZW9jb2RpbmdSZXN1bHRzIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMnO1xuaW1wb3J0IGdldEpzb24gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1qc29uJztcblxuZnVuY3Rpb24gZ2V0U3RvcHNGcm9tR2VvY29kaW5nKHN0b3BzLCBVUkxfUEVMSUFTX1BMQUNFKSB7XG4gIGlmICghc3RvcHMgfHwgc3RvcHMubGVuZ3RoIDwgMSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuICB9XG4gIGxldCBnaWRzID0gJyc7XG4gIGNvbnN0IHN0b3BzV2l0aEdpZHMgPSBzdG9wcy5tYXAoc3RvcCA9PiB7XG4gICAgY29uc3QgdHlwZSA9IHN0b3AudHlwZSA9PT0gJ3N0b3AnID8gJ3N0b3AnIDogJ3N0YXRpb24nO1xuICAgIGxldCBnaWQgPSBgZ3RmcyR7c3RvcC5ndGZzSWQuc3BsaXQoJzonKVswXS50b0xvd2VyQ2FzZSgpfToke3R5cGV9OkdURlM6JHtcbiAgICAgIHN0b3AuZ3Rmc0lkXG4gICAgfWA7XG4gICAgaWYgKHN0b3AuY29kZSkge1xuICAgICAgZ2lkICs9IGAjJHtzdG9wLmNvZGV9YDtcbiAgICB9XG4gICAgZ2lkcyArPSBgJHtnaWR9LGA7XG4gICAgcmV0dXJuIHsgLi4uc3RvcCwgZ2lkIH07XG4gIH0pO1xuICBjb25zdCBzdG9wU3RhdGlvbk1hcCA9IHN0b3BzV2l0aEdpZHMucmVkdWNlKGZ1bmN0aW9uIHJlZHUoXG4gICAgbWFwLFxuICAgIHN0b3BPclN0YXRpb24sXG4gICkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgIG1hcFtzdG9wT3JTdGF0aW9uLmdpZF0gPSBzdG9wT3JTdGF0aW9uO1xuICAgIHJldHVybiBtYXA7XG4gIH0sIHt9KTtcbiAgcmV0dXJuIGdldEpzb24oVVJMX1BFTElBU19QTEFDRSwge1xuICAgIGlkczogZ2lkcy5zbGljZSgwLCAtMSksXG4gICAgLy8gbGFuZzogY29udGV4dC5nZXRMYW5ndWFnZShjb250ZXh0KSwgVE9ETyBlbmFibGUgdGhpcyB3aGVuIE9UUCBzdXBwb3J0cyB0cmFuc2xhdGlvbnNcbiAgfSkudGhlbihyZXMgPT4ge1xuICAgIHJldHVybiByZXMuZmVhdHVyZXMubWFwKHN0b3AgPT4ge1xuICAgICAgY29uc3QgZmF2b3VyaXRlID0ge1xuICAgICAgICB0eXBlOiAnRmF2b3VyaXRlU3RvcCcsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBhZGRlbmR1bTogc3RvcC5wcm9wZXJ0aWVzLmFkZGVuZHVtLFxuICAgICAgICAgIGdpZDogc3RvcFN0YXRpb25NYXBbc3RvcC5wcm9wZXJ0aWVzLmdpZF0uZ2lkLFxuICAgICAgICAgIGNvZGU6IHN0b3BTdGF0aW9uTWFwW3N0b3AucHJvcGVydGllcy5naWRdLmNvZGUsXG4gICAgICAgICAgZ3Rmc0lkOiBzdG9wU3RhdGlvbk1hcFtzdG9wLnByb3BlcnRpZXMuZ2lkXS5ndGZzSWQsXG4gICAgICAgICAgbGFzdFVwZGF0ZWQ6IHN0b3BTdGF0aW9uTWFwW3N0b3AucHJvcGVydGllcy5naWRdLmxhc3RVcGRhdGVkLFxuICAgICAgICAgIGZhdm91cml0ZUlkOiBzdG9wU3RhdGlvbk1hcFtzdG9wLnByb3BlcnRpZXMuZ2lkXS5mYXZvdXJpdGVJZCxcbiAgICAgICAgICBhZGRyZXNzOiBzdG9wLnByb3BlcnRpZXMubGFiZWwsXG4gICAgICAgICAgbGF5ZXI6IGlzU3RvcChzdG9wLnByb3BlcnRpZXMpID8gJ2Zhdm91cml0ZVN0b3AnIDogJ2Zhdm91cml0ZVN0YXRpb24nLFxuICAgICAgICB9LFxuICAgICAgICBnZW9tZXRyeTogc3RvcC5nZW9tZXRyeSxcbiAgICAgIH07XG4gICAgICByZXR1cm4gZmF2b3VyaXRlO1xuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGZpbHRlckZhdm91cml0ZUxvY2F0aW9ucyhmYXZvdXJpdGVzLCBpbnB1dCkge1xuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuICAgIGZpbHRlck1hdGNoaW5nVG9JbnB1dChmYXZvdXJpdGVzLCBpbnB1dCwgWydhZGRyZXNzJywgJ25hbWUnXSkubWFwKGl0ZW0gPT4gKHtcbiAgICAgIHR5cGU6ICdGYXZvdXJpdGVQbGFjZScsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIC4uLml0ZW0sXG4gICAgICAgIGxhYmVsOiBpdGVtLm5hbWUsXG4gICAgICAgIGxheWVyOiAnZmF2b3VyaXRlUGxhY2UnLFxuICAgICAgfSxcbiAgICAgIGdlb21ldHJ5OiB7IHR5cGU6ICdQb2ludCcsIGNvb3JkaW5hdGVzOiBbaXRlbS5sb24sIGl0ZW0ubGF0XSB9LFxuICAgIH0pKSxcbiAgKTtcbn1cbmZ1bmN0aW9uIHNlbGVjdFBvc2l0aW9uRm9tTWFwKGlucHV0KSB7XG4gIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnIHx8IGlucHV0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnU2VsZWN0RnJvbU1hcCcsXG4gICAgICAgIGFkZHJlc3M6ICdTZWxlY3RGcm9tTWFwJyxcbiAgICAgICAgbGF0OiBudWxsLFxuICAgICAgICBsb246IG51bGwsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBsYWJlbElkOiAnc2VsZWN0LWZyb20tbWFwJyxcbiAgICAgICAgICBsYXllcjogJ3NlbGVjdEZyb21NYXAnLFxuICAgICAgICAgIGFkZHJlc3M6ICdTZWxlY3RGcm9tTWFwJyxcbiAgICAgICAgICBsYXQ6IG51bGwsXG4gICAgICAgICAgbG9uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICBnZW9tZXRyeToge1xuICAgICAgICAgIHR5cGU6ICdQb2ludCcsXG4gICAgICAgICAgY29vcmRpbmF0ZXM6IFtdLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICBdKTtcbiAgfVxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q3VycmVudFBvc2l0aW9uSWZFbXB0eShpbnB1dCwgcG9zaXRpb24pIHtcbiAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycgfHwgaW5wdXQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdDdXJyZW50TG9jYXRpb24nLFxuICAgICAgICBhZGRyZXNzOiBwb3NpdGlvbi5hZGRyZXNzLFxuICAgICAgICBsYXQ6IHBvc2l0aW9uLmxhdCxcbiAgICAgICAgbG9uOiBwb3NpdGlvbi5sb24sXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBsYWJlbElkOiAndXNlLW93bi1wb3NpdGlvbicsXG4gICAgICAgICAgbGF5ZXI6ICdjdXJyZW50UG9zaXRpb24nLFxuICAgICAgICAgIGFkZHJlc3M6IHBvc2l0aW9uLmFkZHJlc3MsXG4gICAgICAgICAgbGF0OiBwb3NpdGlvbi5sYXQsXG4gICAgICAgICAgbG9uOiBwb3NpdGlvbi5sb24sXG4gICAgICAgIH0sXG4gICAgICAgIGdlb21ldHJ5OiB7XG4gICAgICAgICAgdHlwZTogJ1BvaW50JyxcbiAgICAgICAgICBjb29yZGluYXRlczogW3Bvc2l0aW9uLmxvbiwgcG9zaXRpb24ubGF0XSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgXSk7XG4gIH1cblxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcbn1cblxuZnVuY3Rpb24gc2VsZWN0RnJvbU93bkxvY2F0aW9ucyhpbnB1dCkge1xuICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJyB8fCBpbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnLFxuICAgICAgICBhZGRyZXNzOiAnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycsXG4gICAgICAgIGxhdDogbnVsbCxcbiAgICAgICAgbG9uOiBudWxsLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgbGFiZWxJZDogJ3NlbGVjdC1mcm9tLW93bi1sb2NhdGlvbnMnLFxuICAgICAgICAgIGxheWVyOiAnb3duTG9jYXRpb25zJyxcbiAgICAgICAgICBhZGRyZXNzOiAnc2VsZWN0RnJvbU93bkxvY2F0aW9ucycsXG4gICAgICAgICAgbGF0OiBudWxsLFxuICAgICAgICAgIGxvbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAgZ2VvbWV0cnk6IHtcbiAgICAgICAgICB0eXBlOiAnUG9pbnQnLFxuICAgICAgICAgIGNvb3JkaW5hdGVzOiBbXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgXSk7XG4gIH1cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG59XG5cbmZ1bmN0aW9uIGdldEJhY2tTdWdnZXN0aW9uKCkge1xuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtcbiAgICB7XG4gICAgICB0eXBlOiAnYmFjaycsXG4gICAgICBhZGRyZXNzOiAnYmFjaycsXG4gICAgICBsYXQ6IG51bGwsXG4gICAgICBsb246IG51bGwsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIGxhYmVsSWQ6ICdiYWNrJyxcbiAgICAgICAgbGF5ZXI6ICdiYWNrJyxcbiAgICAgICAgYWRkcmVzczogJ2JhY2snLFxuICAgICAgICBsYXQ6IG51bGwsXG4gICAgICAgIGxvbjogbnVsbCxcbiAgICAgIH0sXG4gICAgICBnZW9tZXRyeToge1xuICAgICAgICB0eXBlOiAnUG9pbnQnLFxuICAgICAgICBjb29yZGluYXRlczogW10sXG4gICAgICB9LFxuICAgIH0sXG4gIF0pO1xufVxuXG5mdW5jdGlvbiBmaWx0ZXJGYXZvdXJpdGVTdG9wcyhzdG9wc0FuZFN0YXRpb25zLCBpbnB1dCwgdXNlU3RvcHMsIHVzZVN0YXRpb25zKSB7XG4gIHJldHVybiBzdG9wc0FuZFN0YXRpb25zLnRoZW4oc3RvcHNTdGF0aW9ucyA9PiB7XG4gICAgY29uc3QgY2FuZGlkYXRlcyA9IHN0b3BzU3RhdGlvbnMuZmlsdGVyKHMgPT5cbiAgICAgIHMudHlwZSA9PT0gJ3N0b3AnID8gdXNlU3RvcHMgOiB1c2VTdGF0aW9ucyxcbiAgICApO1xuICAgIHJldHVybiBmaWx0ZXJNYXRjaGluZ1RvSW5wdXQoY2FuZGlkYXRlcywgaW5wdXQsIFtcbiAgICAgICdwcm9wZXJ0aWVzLm5hbWUnLFxuICAgICAgJ3Byb3BlcnRpZXMubmFtZScsXG4gICAgICAncHJvcGVydGllcy5hZGRyZXNzJyxcbiAgICBdKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGZpbHRlck9sZFNlYXJjaGVzKG9sZFNlYXJjaGVzLCBpbnB1dCwgZHJvcExheWVycykge1xuICBsZXQgbWF0Y2hpbmdPbGRTZWFyY2hlcyA9IGZpbHRlck1hdGNoaW5nVG9JbnB1dChvbGRTZWFyY2hlcywgaW5wdXQsIFtcbiAgICAncHJvcGVydGllcy5uYW1lJyxcbiAgICAncHJvcGVydGllcy5sYWJlbCcsXG4gICAgJ3Byb3BlcnRpZXMuYWRkcmVzcycsXG4gICAgJ3Byb3BlcnRpZXMuc2hvcnROYW1lJyxcbiAgICAncHJvcGVydGllcy5sb25nTmFtZScsXG4gIF0pO1xuICBpZiAoZHJvcExheWVycykge1xuICAgIC8vIGRvbid0IHdhbnQgdGhlc2VcbiAgICBtYXRjaGluZ09sZFNlYXJjaGVzID0gbWF0Y2hpbmdPbGRTZWFyY2hlcy5maWx0ZXIoXG4gICAgICBpdGVtID0+ICFkcm9wTGF5ZXJzLmluY2x1ZGVzKGl0ZW0ucHJvcGVydGllcy5sYXllciksXG4gICAgKTtcbiAgfVxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuICAgIHRha2UobWF0Y2hpbmdPbGRTZWFyY2hlcywgMTApLm1hcChpdGVtID0+IHtcbiAgICAgIGNvbnN0IG5ld0l0ZW0gPSB7XG4gICAgICAgIC4uLml0ZW0sXG4gICAgICAgIHR5cGU6ICdPbGRTZWFyY2gnLFxuICAgICAgICB0aW1ldGFibGVDbGlja2VkOiBmYWxzZSwgLy8gcmVzZXQgbGF0ZXN0IHNlbGVjdGlvbiBhY3Rpb25cbiAgICAgICAgYXJyb3dDbGlja2VkOiBmYWxzZSxcbiAgICAgIH07XG4gICAgICBkZWxldGUgbmV3SXRlbS5wcm9wZXJ0aWVzLmNvbmZpZGVuY2U7XG4gICAgICByZXR1cm4gbmV3SXRlbTtcbiAgICB9KSxcbiAgKTtcbn1cblxuZnVuY3Rpb24gaGFzRmF2b3VyaXRlcyhzZWFyY2hDb250ZXh0KSB7XG4gIGNvbnN0IGZhdm91cml0ZUxvY2F0aW9ucyA9IHNlYXJjaENvbnRleHQuZ2V0RmF2b3VyaXRlTG9jYXRpb25zKFxuICAgIHNlYXJjaENvbnRleHQuY29udGV4dCxcbiAgKTtcbiAgaWYgKGZhdm91cml0ZUxvY2F0aW9ucz8ubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY29uc3QgZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zID1cbiAgICBzZWFyY2hDb250ZXh0LmdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9ucyhzZWFyY2hDb250ZXh0LmNvbnRleHQpO1xuICBpZiAoZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zPy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgY29uc3QgZmF2b3VyaXRlU3RvcHMgPSBzZWFyY2hDb250ZXh0LmdldEZhdm91cml0ZVN0b3BzKHNlYXJjaENvbnRleHQuY29udGV4dCk7XG4gIHJldHVybiBmYXZvdXJpdGVTdG9wcz8ubGVuZ3RoID4gMDtcbn1cblxuY29uc3Qgcm91dGVMYXllcnMgPSBbXG4gICdyb3V0ZS1UUkFNJyxcbiAgJ3JvdXRlLUJVUycsXG4gICdyb3V0ZS1SQUlMJyxcbiAgJ3JvdXRlLUZFUlJZJyxcbiAgJ3JvdXRlLVNVQldBWScsXG4gICdyb3V0ZS1BSVJQTEFORScsXG4gICdyb3V0ZS1GVU5JQ1VMQVInLFxuXTtcbmNvbnN0IGxvY2F0aW9uTGF5ZXJzID0gWyd2ZW51ZScsICdhZGRyZXNzJywgJ3N0cmVldCddO1xuY29uc3QgcGFya2luZ0xheWVycyA9IFsnY2FycGFyaycsICdiaWtlcGFyayddO1xuY29uc3Qgc3RvcExheWVycyA9IFsnc3RvcCcsICdzdGF0aW9uJ107XG5cbi8qKlxuICogRXhlY3V0ZXMgdGhlIHNlYXJjaFxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNlYXJjaFJlc3VsdHMoXG4gIHRhcmdldHMsXG4gIHNvdXJjZXMsXG4gIHRyYW5zcG9ydE1vZGUsXG4gIHNlYXJjaENvbnRleHQsXG4gIGZpbHRlclJlc3VsdHMsXG4gIGdlb2NvZGluZ1NpemUsXG4gIHsgaW5wdXQgfSxcbiAgY2FsbGJhY2ssXG4gIHBhdGhPcHRzLFxuICByZWZQb2ludCxcbikge1xuICBjb25zdCB7XG4gICAgZ2V0UG9zaXRpb25zLFxuICAgIGdldEZhdm91cml0ZUxvY2F0aW9ucyxcbiAgICBnZXRPbGRTZWFyY2hlcyxcbiAgICBnZXRGYXZvdXJpdGVTdG9wcyxcbiAgICBwYXJraW5nQXJlYVNvdXJjZXMsXG4gICAgZ2V0TGFuZ3VhZ2UsXG4gICAgZ2V0U3RvcEFuZFN0YXRpb25zUXVlcnksXG4gICAgZ2V0RmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zUXVlcnksXG4gICAgZ2V0RmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zLFxuICAgIGdldEZhdm91cml0ZVJvdXRlc1F1ZXJ5LFxuICAgIGdldEZhdm91cml0ZVJvdXRlcyxcbiAgICBnZXRSb3V0ZXNRdWVyeSxcbiAgICBjb250ZXh0LFxuICAgIGlzUGVsaWFzTG9jYXRpb25Bd2FyZTogbG9jYXRpb25Bd2FyZSxcbiAgICBtaW5pbWFsUmVnZXhwLFxuICAgIGxpbmVSZWdleHAsXG4gICAgVVJMX1BFTElBUyxcbiAgICBVUkxfUEVMSUFTX1BMQUNFLFxuICAgIGZlZWRJRHMsXG4gICAgZ2VvY29kaW5nU2VhcmNoUGFyYW1zLFxuICAgIGdlb2NvZGluZ1NvdXJjZXMsXG4gICAgZ2V0RnV0dXJlUm91dGVzLFxuICAgIGNpdHlCaWtlTmV0d29ya3MsXG4gIH0gPSBzZWFyY2hDb250ZXh0O1xuICAvLyBpZiBubyB0YXJnZXRzIGFyZSBwcm92aWRlZCwgc2VhcmNoIHRoZW0gYWxsLlxuICBjb25zdCBhbGxUYXJnZXRzID0gIXRhcmdldHMgfHwgdGFyZ2V0cy5sZW5ndGggPT09IDA7XG4gIC8vIGlmIG5vIHNvdXJjZXMgYXJlIHByb3ZpZGVkLCB1c2UgdGhlbSBhbGwuXG4gIGNvbnN0IGFsbFNvdXJjZXMgPSAhc291cmNlcyB8fCBzb3VyY2VzLmxlbmd0aCA9PT0gMDtcbiAgY29uc3QgcG9zaXRpb24gPSBnZXRQb3NpdGlvbnMoY29udGV4dCk7XG4gIGNvbnN0IHNlYXJjaENvbXBvbmVudHMgPSBbXTtcbiAgY29uc3Qgc2VhcmNoZXMgPSB7IHR5cGU6ICdhbGwnLCB0ZXJtOiBpbnB1dCwgcmVzdWx0czogW10gfTtcbiAgY29uc3QgbGFuZ3VhZ2UgPSBnZXRMYW5ndWFnZShjb250ZXh0KTtcbiAgY29uc3QgZm9jdXNQb2ludCA9XG4gICAgbG9jYXRpb25Bd2FyZSAmJiByZWZQb2ludD8ubGF0ICYmIHJlZlBvaW50Py5sb25cbiAgICAgID8ge1xuICAgICAgICAgIC8vIFJvdW5kIGNvb3JkaW5hdGVzIHRvIGFwcHJveCAxIGttLCBpbiBvcmRlciB0byBpbXByb3ZlIGNhY2hpbmdcbiAgICAgICAgICAnZm9jdXMucG9pbnQubGF0JzogcmVmUG9pbnQubGF0LnRvRml4ZWQoMyksXG4gICAgICAgICAgJ2ZvY3VzLnBvaW50Lmxvbic6IHJlZlBvaW50Lmxvbi50b0ZpeGVkKDMpLFxuICAgICAgICB9XG4gICAgICA6IHt9O1xuICBjb25zdCBtb2RlID0gdHJhbnNwb3J0TW9kZSA/IHRyYW5zcG9ydE1vZGUuc3BsaXQoJy0nKVsxXSA6IHVuZGVmaW5lZDtcbiAgaWYgKFxuICAgIHRhcmdldHMuaW5jbHVkZXMoJ0N1cnJlbnRQb3NpdGlvbicpICYmXG4gICAgcG9zaXRpb24uc3RhdHVzICE9PSAnZ2VvbG9jYXRpb24tbm90LXN1cHBvcnRlZCdcbiAgKSB7XG4gICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKGdldEN1cnJlbnRQb3NpdGlvbklmRW1wdHkoaW5wdXQsIHBvc2l0aW9uKSk7XG4gIH1cbiAgaWYgKGFsbFRhcmdldHMgfHwgdGFyZ2V0cy5pbmNsdWRlcygnTWFwUG9zaXRpb24nKSkge1xuICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChzZWxlY3RQb3NpdGlvbkZvbU1hcChpbnB1dCkpO1xuICB9XG4gIGlmICh0YXJnZXRzLmluY2x1ZGVzKCdGdXR1cmVSb3V0ZXMnKSkge1xuICAgIGNvbnN0IGl0ZW1zID0gZ2V0RnV0dXJlUm91dGVzKGNvbnRleHQpO1xuICAgIHNlYXJjaENvbXBvbmVudHMucHVzaCh0YWtlKGl0ZW1zLCAzKSk7XG4gIH1cbiAgaWYgKFxuICAgIHRhcmdldHMuaW5jbHVkZXMoJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnKSAmJlxuICAgIGhhc0Zhdm91cml0ZXMoc2VhcmNoQ29udGV4dClcbiAgKSB7XG4gICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKHNlbGVjdEZyb21Pd25Mb2NhdGlvbnMoaW5wdXQpKTtcbiAgfVxuICBpZiAoYWxsVGFyZ2V0cyB8fCB0YXJnZXRzLmluY2x1ZGVzKCdMb2NhdGlvbnMnKSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItZGVzdHJ1Y3R1cmluZ1xuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IGdlb2NvZGluZ1NlYXJjaFBhcmFtcztcbiAgICBpZiAoc291cmNlcy5pbmNsdWRlcygnRmF2b3VyaXRlJykpIHtcbiAgICAgIGNvbnN0IGZhdm91cml0ZUxvY2F0aW9ucyA9IGdldEZhdm91cml0ZUxvY2F0aW9ucyhjb250ZXh0KTtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZmlsdGVyRmF2b3VyaXRlTG9jYXRpb25zKGZhdm91cml0ZUxvY2F0aW9ucywgaW5wdXQpLFxuICAgICAgKTtcbiAgICAgIGlmIChzb3VyY2VzLmluY2x1ZGVzKCdCYWNrJykpIHtcbiAgICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKGdldEJhY2tTdWdnZXN0aW9uKCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0RhdGFzb3VyY2UnKSkge1xuICAgICAgY29uc3QgZ2VvY29kaW5nTGF5ZXJzID0gWyd2ZW51ZScsICdhZGRyZXNzJywgJ3N0cmVldCddO1xuICAgICAgaWYgKHRhcmdldHMuaW5jbHVkZXMoJ1N0YXRpb25zJykpIHtcbiAgICAgICAgZ2VvY29kaW5nTGF5ZXJzLnB1c2goJ3N0YXRpb24nKTsgLy8gc2VhcmNoIHN0YXRpb25zIGZyb20gT1NNXG4gICAgICB9XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGdldEdlb2NvZGluZ1Jlc3VsdHMoXG4gICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgc2VhcmNoUGFyYW1zLFxuICAgICAgICAgIGxhbmd1YWdlLFxuICAgICAgICAgIGZvY3VzUG9pbnQsXG4gICAgICAgICAgZ2VvY29kaW5nU291cmNlcy5qb2luKCcsJyksXG4gICAgICAgICAgVVJMX1BFTElBUyxcbiAgICAgICAgICBtaW5pbWFsUmVnZXhwLFxuICAgICAgICAgIGdlb2NvZGluZ0xheWVycyxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0hpc3RvcnknKSkge1xuICAgICAgY29uc3QgbG9jYXRpb25IaXN0b3J5ID0gZ2V0T2xkU2VhcmNoZXMoY29udGV4dCwgJ2VuZHBvaW50Jyk7XG4gICAgICBjb25zdCBkcm9wTGF5ZXJzID0gWydiaWtlc3RhdGlvbiddO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnN0b3BMYXllcnMpO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnJvdXRlTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5wYXJraW5nTGF5ZXJzKTtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZmlsdGVyT2xkU2VhcmNoZXMobG9jYXRpb25IaXN0b3J5LCBpbnB1dCwgZHJvcExheWVycyksXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBpZiAoYWxsVGFyZ2V0cyB8fCB0YXJnZXRzLmluY2x1ZGVzKCdQYXJraW5nQXJlYXMnKSkge1xuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0RhdGFzb3VyY2UnKSkge1xuICAgICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gZ2VvY29kaW5nU2VhcmNoUGFyYW1zO1xuICAgICAgaWYgKGdlb2NvZGluZ1NpemUgJiYgZ2VvY29kaW5nU2l6ZSAhPT0gMTApIHtcbiAgICAgICAgc2VhcmNoUGFyYW1zLnNpemUgPSBnZW9jb2RpbmdTaXplO1xuICAgICAgfVxuICAgICAgY29uc3QgZ2VvY29kaW5nTGF5ZXJzID0gWydjYXJwYXJrJywgJ2Jpa2VwYXJrJ107XG4gICAgICBjb25zdCBmZWVkSWRzID0gcGFya2luZ0FyZWFTb3VyY2VzID8gcGFya2luZ0FyZWFTb3VyY2VzLmpvaW4oJywnKSA6IG51bGw7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGdldEdlb2NvZGluZ1Jlc3VsdHMoXG4gICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgc2VhcmNoUGFyYW1zLFxuICAgICAgICAgIGxhbmd1YWdlLFxuICAgICAgICAgIGZvY3VzUG9pbnQsXG4gICAgICAgICAgZmVlZElkcyxcbiAgICAgICAgICBVUkxfUEVMSUFTLFxuICAgICAgICAgIG1pbmltYWxSZWdleHAsXG4gICAgICAgICAgZ2VvY29kaW5nTGF5ZXJzLFxuICAgICAgICApLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICAgICAgaWYgKGZpbHRlclJlc3VsdHMpIHtcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJSZXN1bHRzKHJlc3VsdHMsIG1vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdIaXN0b3J5JykpIHtcbiAgICAgIGNvbnN0IGhpc3RvcnkgPSBnZXRPbGRTZWFyY2hlcyhjb250ZXh0KTtcbiAgICAgIGNvbnN0IGRyb3BMYXllcnMgPSBbJ2Jpa2VzdGF0aW9uJ107XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4uc3RvcExheWVycyk7XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ucm91dGVMYXllcnMpO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLmxvY2F0aW9uTGF5ZXJzKTtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChmaWx0ZXJPbGRTZWFyY2hlcyhoaXN0b3J5LCBpbnB1dCwgZHJvcExheWVycykpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHVzZVN0b3BzID0gdGFyZ2V0cy5pbmNsdWRlcygnU3RvcHMnKTtcbiAgY29uc3QgdXNlU3RhdGlvbnMgPSB0YXJnZXRzLmluY2x1ZGVzKCdTdGF0aW9ucycpO1xuXG4gIGlmIChhbGxUYXJnZXRzIHx8IHVzZVN0b3BzIHx8IHVzZVN0YXRpb25zKSB7XG4gICAgaWYgKHNvdXJjZXMuaW5jbHVkZXMoJ0Zhdm91cml0ZScpKSB7XG4gICAgICBjb25zdCBmYXZvdXJpdGVTdG9wcyA9IGdldEZhdm91cml0ZVN0b3BzKGNvbnRleHQpO1xuICAgICAgbGV0IHN0b3BzQW5kU3RhdGlvbnM7XG4gICAgICBpZiAoZmF2b3VyaXRlU3RvcHMuZXZlcnkoc3RvcCA9PiBzdG9wLnR5cGUgPT09ICdzdGF0aW9uJykpIHtcbiAgICAgICAgc3RvcHNBbmRTdGF0aW9ucyA9IGdldFN0b3BzRnJvbUdlb2NvZGluZyhcbiAgICAgICAgICBmYXZvdXJpdGVTdG9wcyxcbiAgICAgICAgICBVUkxfUEVMSUFTX1BMQUNFLFxuICAgICAgICApLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICAgICAgaWYgKGZpbHRlclJlc3VsdHMpIHtcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJSZXN1bHRzKHJlc3VsdHMsIG1vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdG9wc0FuZFN0YXRpb25zID0gZ2V0U3RvcEFuZFN0YXRpb25zUXVlcnkoZmF2b3VyaXRlU3RvcHMpXG4gICAgICAgICAgLnRoZW4oZmF2b3VyaXRlcyA9PlxuICAgICAgICAgICAgZ2V0U3RvcHNGcm9tR2VvY29kaW5nKGZhdm91cml0ZXMsIFVSTF9QRUxJQVNfUExBQ0UpLFxuICAgICAgICAgIClcbiAgICAgICAgICAudGhlbihyZXN1bHRzID0+IHtcbiAgICAgICAgICAgIGlmIChmaWx0ZXJSZXN1bHRzKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmaWx0ZXJSZXN1bHRzKHJlc3VsdHMsIG1vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGZpbHRlckZhdm91cml0ZVN0b3BzKHN0b3BzQW5kU3RhdGlvbnMsIGlucHV0LCB1c2VTdG9wcywgdXNlU3RhdGlvbnMpLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnRGF0YXNvdXJjZScpKSB7XG4gICAgICBjb25zdCBnZW9jb2RpbmdMYXllcnMgPSBbXTtcbiAgICAgIGlmICh1c2VTdG9wcykge1xuICAgICAgICBnZW9jb2RpbmdMYXllcnMucHVzaCgnc3RvcCcpO1xuICAgICAgfVxuICAgICAgaWYgKHVzZVN0YXRpb25zKSB7XG4gICAgICAgIGdlb2NvZGluZ0xheWVycy5wdXNoKCdzdGF0aW9uJyk7XG4gICAgICB9XG4gICAgICBjb25zdCBzZWFyY2hQYXJhbXMgPVxuICAgICAgICBnZW9jb2RpbmdTaXplICYmIGdlb2NvZGluZ1NpemUgIT09IDEwID8geyBzaXplOiBnZW9jb2RpbmdTaXplIH0gOiB7fTtcbiAgICAgIGlmIChnZW9jb2RpbmdTZWFyY2hQYXJhbXMgJiYgZ2VvY29kaW5nU2VhcmNoUGFyYW1zWydib3VuZGFyeS5jb3VudHJ5J10pIHtcbiAgICAgICAgc2VhcmNoUGFyYW1zWydib3VuZGFyeS5jb3VudHJ5J10gPVxuICAgICAgICAgIGdlb2NvZGluZ1NlYXJjaFBhcmFtc1snYm91bmRhcnkuY291bnRyeSddO1xuICAgICAgfVxuICAgICAgLy8gYSBsaXR0bGUgaGFjazogd2hlbiBzZWFyY2hpbmcgbG9jYXRpb24gZGF0YSwgYXV0b21hdGljYWxseSBkZWR1cGUgc3RvcHNcbiAgICAgIC8vIHRoaXMgY291bGQgYmUgYSBuZXcgZXhwbGljaXQgcHJvcFxuICAgICAgaWYgKGFsbFRhcmdldHMgfHwgdGFyZ2V0cy5pbmNsdWRlcygnTG9jYXRpb25zJykpIHtcbiAgICAgICAgc2VhcmNoUGFyYW1zLmRlZHVwZXN0b3BzID0gMTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGZlZWRzID0gZmVlZElEcy5tYXAodiA9PiBgZ3RmcyR7dn1gKS5qb2luKCcsJyk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGdldEdlb2NvZGluZ1Jlc3VsdHMoXG4gICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgc2VhcmNoUGFyYW1zLFxuICAgICAgICAgIGxhbmd1YWdlLFxuICAgICAgICAgIGZvY3VzUG9pbnQsXG4gICAgICAgICAgZmVlZHMsXG4gICAgICAgICAgVVJMX1BFTElBUyxcbiAgICAgICAgICBtaW5pbWFsUmVnZXhwLFxuICAgICAgICAgIGdlb2NvZGluZ0xheWVycyxcbiAgICAgICAgKS50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgICAgIGlmIChmaWx0ZXJSZXN1bHRzKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyUmVzdWx0cyhyZXN1bHRzLCBtb2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnSGlzdG9yeScpKSB7XG4gICAgICBjb25zdCBzdG9wSGlzdG9yeSA9IGdldE9sZFNlYXJjaGVzKGNvbnRleHQpLmZpbHRlcihpdGVtID0+IHtcbiAgICAgICAgaWYgKGl0ZW0ucHJvcGVydGllcy5naWQpIHtcbiAgICAgICAgICByZXR1cm4gaXRlbS5wcm9wZXJ0aWVzLmdpZC5pbmNsdWRlcygnR1RGUzonKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZHJvcExheWVycyA9IFsnYmlrZXN0YXRpb24nXTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5yb3V0ZUxheWVycyk7XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ubG9jYXRpb25MYXllcnMpO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnBhcmtpbmdMYXllcnMpO1xuICAgICAgaWYgKCF1c2VTdG9wcykge1xuICAgICAgICBkcm9wTGF5ZXJzLnB1c2goJ3N0b3AnKTtcbiAgICAgIH1cbiAgICAgIGlmICghdXNlU3RhdGlvbnMpIHtcbiAgICAgICAgZHJvcExheWVycy5wdXNoKCdzdGF0aW9uJyk7XG4gICAgICB9XG4gICAgICBpZiAodHJhbnNwb3J0TW9kZSkge1xuICAgICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgICAgZmlsdGVyT2xkU2VhcmNoZXMoc3RvcEhpc3RvcnksIGlucHV0LCBkcm9wTGF5ZXJzKS50aGVuKHJlc3VsdCA9PlxuICAgICAgICAgICAgZmlsdGVyUmVzdWx0cyA/IGZpbHRlclJlc3VsdHMocmVzdWx0LCBtb2RlKSA6IHJlc3VsdCxcbiAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICAgIGZpbHRlck9sZFNlYXJjaGVzKHN0b3BIaXN0b3J5LCBpbnB1dCwgZHJvcExheWVycyksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChhbGxUYXJnZXRzIHx8IHRhcmdldHMuaW5jbHVkZXMoJ1JvdXRlcycpKSB7XG4gICAgaWYgKHNvdXJjZXMuaW5jbHVkZXMoJ0Zhdm91cml0ZScpKSB7XG4gICAgICBjb25zdCBmYXZvdXJpdGVSb3V0ZXMgPSBnZXRGYXZvdXJpdGVSb3V0ZXMoY29udGV4dCk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGdldEZhdm91cml0ZVJvdXRlc1F1ZXJ5KGZhdm91cml0ZVJvdXRlcywgaW5wdXQsIG1vZGUsIHBhdGhPcHRzKS50aGVuKFxuICAgICAgICAgIHJlc3VsdCA9PlxuICAgICAgICAgICAgZmlsdGVyUmVzdWx0cyA/IGZpbHRlclJlc3VsdHMocmVzdWx0LCBtb2RlLCAnUm91dGVzJykgOiByZXN1bHQsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICBnZXRSb3V0ZXNRdWVyeShpbnB1dCwgZmVlZElEcywgdHJhbnNwb3J0TW9kZSwgcGF0aE9wdHMpLnRoZW4ocmVzdWx0ID0+XG4gICAgICAgIGZpbHRlclJlc3VsdHMgPyBmaWx0ZXJSZXN1bHRzKHJlc3VsdCwgbW9kZSwgJ1JvdXRlcycpIDogcmVzdWx0LFxuICAgICAgKSxcbiAgICApO1xuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0hpc3RvcnknKSkge1xuICAgICAgY29uc3Qgcm91dGVIaXN0b3J5ID0gZ2V0T2xkU2VhcmNoZXMoY29udGV4dCk7XG4gICAgICBjb25zdCBkcm9wTGF5ZXJzID0gWydiaWtlc3RhdGlvbiddO1xuICAgICAgaWYgKHRyYW5zcG9ydE1vZGUpIHtcbiAgICAgICAgZHJvcExheWVycy5wdXNoKC4uLnJvdXRlTGF5ZXJzLmZpbHRlcihpID0+ICEoaSA9PT0gdHJhbnNwb3J0TW9kZSkpKTtcbiAgICAgIH1cbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5zdG9wTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5sb2NhdGlvbkxheWVycyk7XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ucGFya2luZ0xheWVycyk7XG5cbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZmlsdGVyT2xkU2VhcmNoZXMocm91dGVIaXN0b3J5LCBpbnB1dCwgZHJvcExheWVycykudGhlbihyZXN1bHRzID0+XG4gICAgICAgICAgZmlsdGVyUmVzdWx0cyA/IGZpbHRlclJlc3VsdHMocmVzdWx0cywgbW9kZSwgJ1JvdXRlcycpIDogcmVzdWx0cyxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIGlmIChhbGxUYXJnZXRzIHx8IHRhcmdldHMuaW5jbHVkZXMoJ1ZlaGljbGVSZW50YWxTdGF0aW9ucycpKSB7XG4gICAgaWYgKHNvdXJjZXMuaW5jbHVkZXMoJ0Zhdm91cml0ZScpKSB7XG4gICAgICBjb25zdCBmYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbiA9XG4gICAgICAgIGdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9ucyhjb250ZXh0KTtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZ2V0RmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zUXVlcnkoXG4gICAgICAgICAgZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb24sXG4gICAgICAgICAgaW5wdXQsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdEYXRhc291cmNlJykpIHtcbiAgICAgIGNvbnN0IGdlb2NvZGluZ0xheWVycyA9IFsnYmlrZXN0YXRpb24nXTtcbiAgICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9XG4gICAgICAgIGdlb2NvZGluZ1NpemUgJiYgZ2VvY29kaW5nU2l6ZSAhPT0gMTAgPyB7IHNpemU6IGdlb2NvZGluZ1NpemUgfSA6IHt9O1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBnZXRHZW9jb2RpbmdSZXN1bHRzKFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICAgIHNlYXJjaFBhcmFtcyxcbiAgICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgICBmb2N1c1BvaW50LFxuICAgICAgICAgIGNpdHlCaWtlTmV0d29ya3Muam9pbignLCcpLFxuICAgICAgICAgIFVSTF9QRUxJQVMsXG4gICAgICAgICAgbWluaW1hbFJlZ2V4cCxcbiAgICAgICAgICBnZW9jb2RpbmdMYXllcnMsXG4gICAgICAgICkudGhlbihyZXN1bHRzID0+IHtcbiAgICAgICAgICBpZiAoZmlsdGVyUmVzdWx0cykge1xuICAgICAgICAgICAgcmV0dXJuIGZpbHRlclJlc3VsdHMocmVzdWx0cywgbW9kZSwgJ1ZlaGljbGVSZW50YWxTdGF0aW9ucycpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdIaXN0b3J5JykpIHtcbiAgICAgIGNvbnN0IGhpc3RvcnkgPSBnZXRPbGRTZWFyY2hlcyhjb250ZXh0KTtcbiAgICAgIGNvbnN0IGRyb3BMYXllcnMgPSBbLi4uc3RvcExheWVyc107XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ucm91dGVMYXllcnMpO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLmxvY2F0aW9uTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5wYXJraW5nTGF5ZXJzKTtcblxuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKGZpbHRlck9sZFNlYXJjaGVzKGhpc3RvcnksIGlucHV0LCBkcm9wTGF5ZXJzKSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc2VhcmNoUmVzdWx0c1Byb21pc2UgPSBQcm9taXNlLmFsbChzZWFyY2hDb21wb25lbnRzKVxuICAgIC50aGVuKGZsYXR0ZW4pXG4gICAgLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICBzZWFyY2hlcy5yZXN1bHRzID0gcmVzdWx0cztcbiAgICB9KVxuICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgc2VhcmNoZXMuZXJyb3IgPSBlcnI7XG4gICAgfSk7XG4gIHNlYXJjaFJlc3VsdHNQcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgIGNhbGxiYWNrKHtcbiAgICAgIC4uLnNlYXJjaGVzLFxuICAgICAgcmVzdWx0czogc29ydFNlYXJjaFJlc3VsdHMobGluZVJlZ2V4cCwgc2VhcmNoZXMucmVzdWx0cywgaW5wdXQpLFxuICAgIH0pO1xuICB9KTtcbn1cblxuY29uc3QgZGVib3VuY2VkU2VhcmNoID0gZGVib3VuY2UoZ2V0U2VhcmNoUmVzdWx0cywgMzAwLCB7XG4gIGxlYWRpbmc6IHRydWUsXG59KTtcblxuZXhwb3J0IGNvbnN0IGV4ZWN1dGVTZWFyY2ggPSAoXG4gIHRhcmdldHMsXG4gIHNvdXJjZXMsXG4gIHRyYW5zcG9ydE1vZGUsXG4gIHNlYXJjaENvbnRleHQsXG4gIGZpbHRlclJlc3VsdHMsXG4gIGdlb2NvZGluZ1NpemUsXG4gIGRhdGEsXG4gIGNhbGxiYWNrLFxuICBwYXRoT3B0cyxcbiAgcmVmUG9pbnQsXG4pID0+IHtcbiAgY2FsbGJhY2sobnVsbCk7IC8vIFRoaXMgbWVhbnMgJ3dlIGFyZSBzZWFyY2hpbmcnXG4gIGRlYm91bmNlZFNlYXJjaChcbiAgICB0YXJnZXRzLFxuICAgIHNvdXJjZXMsXG4gICAgdHJhbnNwb3J0TW9kZSxcbiAgICBzZWFyY2hDb250ZXh0LFxuICAgIGZpbHRlclJlc3VsdHMsXG4gICAgZ2VvY29kaW5nU2l6ZSxcbiAgICBkYXRhLFxuICAgIGNhbGxiYWNrLFxuICAgIHBhdGhPcHRzLFxuICAgIHJlZlBvaW50LFxuICApO1xufTtcbiIsImltcG9ydCB7IGNyZWF0ZUluc3RhbmNlIH0gZnJvbSAnaTE4bmV4dCc7XG5pbXBvcnQgdHJhbnNsYXRpb25zIGZyb20gJy4vdHJhbnNsYXRpb25zJztcblxuY29uc3QgaTE4biA9IGNyZWF0ZUluc3RhbmNlKHtcbiAgZmFsbGJhY2tMbmc6ICdmaScsXG4gIC8vIGRlYnVnOiB0cnVlLFxuICByZXNvdXJjZXM6IHRyYW5zbGF0aW9ucyxcbiAgZGVmYXVsdE5TOiAndHJhbnNsYXRpb24nLFxuICByZWFjdDoge1xuICAgIHVzZVN1c3BlbnNlOiB0cnVlLFxuICB9LFxufSk7XG5cbmkxOG4uaW5pdCgpO1xuXG5leHBvcnQgZGVmYXVsdCBpMThuO1xuIiwiY29uc3QgdHJhbnNsYXRpb25zID0ge1xuICBkZToge1xuICAgIHRyYW5zbGF0aW9uOiB7XG4gICAgICBhZGRyZXNzOiAnQWRyZXNzZScsXG4gICAgICAnYWRkcmVzcy1wbGFjZS1vci1idXNpbmVzcyc6ICdBZHJlc3MsIE9ydCBvciBHZXNjaMOkZnQnLFxuICAgICAgJ2FkZC12aWEtYnV0dG9uLWxhYmVsJzogJ0bDvGdlIFp3aXNjaGVuemllbCBoaW56dScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwnOlxuICAgICAgICAnU2V0IHN0b3AgZHVyYXRpb24gYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtY2xvc2UnOlxuICAgICAgICAnQ2xvc2Ugc3RvcCBkdXJhdGlvbiBzZWxlY3RvciBhdCB2aWEgcG9pbnQge3tpbmRleH19JyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1vcGVuJzpcbiAgICAgICAgJ09wZW4gc3RvcCBkdXJhdGlvbiBzZWxlY3RvciBhdCB2aWEgcG9pbnQge3tpbmRleH19JyxcbiAgICAgIGFpcnBsYW5lOiAnRmx1ZycsXG4gICAgICBhcnJpdmFsOiAnQW5rdW5mdCcsXG4gICAgICBiYWNrOiAnWnVyw7xjaycsXG4gICAgICBiaWtlcmVudGFsc3RhdGlvbjogJ0xlaWhyYWQtU3RhdGlvbicsXG4gICAgICBidXM6ICdCdXMnLFxuICAgICAgY2FuY2VsOiAnQWJicmVjaGVuJyxcbiAgICAgICdjbGVhci1idXR0b24tbGFiZWwnOiAnTMO2c2NoZW4nLFxuICAgICAgJ2NsZWFyLXNlYXJjaC1oaXN0b3J5JzogJ1N1Y2hoaXN0b3JpZSBsw7ZzY2hlbicsXG4gICAgICBjdXJyZW50cG9zaXRpb246ICdBa3R1ZWxsZSBQb3NpdGlvbicsXG4gICAgICBkZWxldGU6ICdMw7ZzY2hlbicsXG4gICAgICAnZGVsZXRlLW9sZC1zZWFyY2hlcy1oZWFkZXInOiAnV29sbGVuIFNpZSBkaWUgU3VjaC1IaXN0b3JpZSBsw7ZzY2hlbj8nLFxuICAgICAgZGVwYXJ0dXJlOiAnQWJmYWhydCcsXG4gICAgICBkZXN0aW5hdGlvbjogJ1ppZWwnLFxuICAgICAgJ2dpdmUtb3JpZ2luJzogJ1N0YXJ0IGVpbmdlYmVuLicsXG4gICAgICAnZ2l2ZS1kZXN0aW5hdGlvbic6ICdaaWVsIGVpbmdlYmVuLicsXG4gICAgICBmYXZvdXJpdGU6ICdGYXZvcml0ZW4nLFxuICAgICAgZmVycnk6ICdGw6RocmUnLFxuICAgICAgJ2Z1dHVyZS1yb3V0ZSc6ICdadWvDvG5mdGlnZSBWZXJiaW5kdW5nJyxcbiAgICAgIG9yaWdpbjogJ1N0YXJ0JyxcbiAgICAgICdvcmlnaW4tc3RvcC1uZWFyLXlvdSc6ICdTdGFydCcsXG4gICAgICBvd25sb2NhdGlvbnM6ICdFaWdlbmUgRmF2b3JpdGVuJyxcbiAgICAgIGxvYWRpbmc6ICdMYWRlbi4uLicsXG4gICAgICAnbWludXRlLXNob3J0JzogJ21pbicsXG4gICAgICByYWlsOiAnWnVnJyxcbiAgICAgIHNlYXJjaDogJ1N1Y2hlJyxcbiAgICAgICdzZWFyY2gtYWRkcmVzcy1vci1wbGFjZSc6ICdTdWNoZSBhbmhhbmQgdm9uIEFkcmVzc2Ugb2RlciBPcnRzYW5nYWJlJyxcbiAgICAgICdzZWFyY2gtYnV0dG9uLWxhYmVsJzogJ1N1Y2hlJyxcbiAgICAgICdzZWFyY2gtZGVzdGluYXRpb24nOiAnU3VjaGUgWmllbG9ydCwgTGluaWUgb3IgSGFsdGVzdGVsbGUnLFxuICAgICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1pbmRleCc6ICdaaWVsb3J0IGVpbmdlYmVuJyxcbiAgICAgICdzZWFyY2gtZGVzdGluYXRpb24tcmVzdWx0cy1idXQtbm8tc2VhcmNoJzpcbiAgICAgICAgJ0VyZ2Vibmlzc2UgaW4g4oCcWmllbG9ydOKAnS1SZWl0ZXIgYW56ZWlnZW4nLFxuICAgICAgJ3NlYXJjaC1uby1yZXN1bHRzJzogJ0tlaW4gT3J0IGdlZnVuZGVuLicsXG4gICAgICAnc2VhcmNoLW9yaWdpbic6ICdTdWNoZSBTdGFydG9ydCwgTGluaWUgb2RlciBIYWx0ZXN0ZWxsZScsXG4gICAgICAnc2VhcmNoLW9yaWdpbi1pbmRleCc6ICdTdGFydG9ydCBlaW5nZWJlbicsXG4gICAgICAnc2VhcmNoLXBvc2l0aW9uJzogJ1N0YW5kb3J0IGVybWl0dGVsbicsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsJzogJ1ZlbnVlLCBwbGFjZSBhbmQgc3RvcHNlYXJjaC4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtZGVza3RvcCc6XG4gICAgICAgICdOYXZpZ2F0ZSBsaXN0IHdpdGggYXJyb3cga2V5cyBhbmQgc2VsZWN0IHdpdGggZW50ZXIga2V5LicsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1tb2JpbGUnOlxuICAgICAgICAnRW50ZXIgdGhlIGxvY2F0aW9uIGFuZCBuYXZpZ2F0ZSBpbiB0aGUgbGlzdCBieSBzd2lwaW5nLicsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLW1vdmUtdG8tZGVzdGluYXRpb24nOlxuICAgICAgICAnQWZ0ZXIgc2VsZWN0aW5nIHRoZSBzdGFydGluZyBsb2NhdGlvbiB5b3UgYXJlIGF1dG9tYXRpY2FsbHkgbW92ZWQgdG8gdGhlIGRlc3RpbmF0aW9uIGZpZWxkLicsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbic6ICdUaGVyZSBpcyB7e2NvdW50fX0gc3VnZ2VzdGlvbiBhdmFpbGFibGUnLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW5fcGx1cmFsJzpcbiAgICAgICAgJ1RoZXJlIGFyZSB7e2NvdW50fX0gc3VnZ2VzdGlvbnMgYXZhaWxhYmxlJyxcbiAgICAgICdzZWFyY2gtY3VycmVudC1zdWdnZXN0aW9uJzogJ0FrdHVlbGxlIEF1c3dhaGw6IHt7c2VsZWN0aW9ufX0nLFxuICAgICAgc3RyZWV0OiAnU3RyYcOfZScsXG4gICAgICBzdWJ3YXk6ICdVLUJhaG4nLFxuICAgICAgc3RhdGlvbjogJ1N0YXRpb24nLFxuICAgICAgc3RvcDogJ0hhbHRlc3RlbGxlJyxcbiAgICAgICdzdG9wLW5lYXIteW91JzogJ1N1Y2hlIEhhbHRlc3RlbGxlbiB1bmQgTGluaWVuIGluIGRlciBOw6RoZScsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1idXMnOiAnU3VjaGUgQnVzbGluaWVuIG9yIEhhbHRlc3RlbGxlbicsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1jaXR5YmlrZSc6ICdTdWNoZSBMZWlocmFkLVN0YXRpb25lbicsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1yYWlsJzogJ1N1Y2hlIFp1Z3ZlcmJpbmR1bmdlbiBvZGVyIEJhaG5ow7ZmZScsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1zdWJ3YXknOiAnU3VjaGUgVS1CYWhuLUxpbmllbiBvZGVyIEhhbHRlc3RlbGxlbicsXG4gICAgICAnc3RvcC1uZWFyLXlvdS10cmFtJzogJ1N1Y2hlIFN0YWR0YmFobi1IYWx0ZXN0ZWxsZW4tU3VjaGUnLFxuICAgICAgJ3RvZGF5LWF0JzogJ0hldXRlIHVtJyxcbiAgICAgICd0b21vcnJvdy1hdCc6ICdNb3JnZW4gdW0nLFxuICAgICAgdHJhbTogJ1N0cmHDn2VuYmFobicsXG4gICAgICAndXNlLW93bi1wb3NpdGlvbic6ICdCZW51dHplIGFrdHVlbGxlbiBTdGFuZG9ydCcsXG4gICAgICAnc2VsZWN0LWZyb20tbWFwJzogJ1fDpGhsZSBQb3NpdGlvbiBhbmhhbmQgS2FydGUnLFxuICAgICAgJ3NlbGVjdC1mcm9tLW93bi1sb2NhdGlvbnMnOiAnQXVzIGVpZ2VuZW4gRmF2b3JpdGVuIGF1c3fDpGhsZW4nLFxuICAgICAgdmVudWU6ICdWZW51ZScsXG4gICAgICAndmlhLXBvaW50JzogJ1p3aXNjaGVuemllbCcsXG4gICAgICB3aGVyZTogJ1dvaGluPycsXG4gICAgICBwbGFjZTogJ09ydCcsXG4gICAgfSxcbiAgfSxcbiAgZW46IHtcbiAgICB0cmFuc2xhdGlvbjoge1xuICAgICAgYWRkcmVzczogJ0FkZHJlc3MnLFxuICAgICAgJ2FkZHJlc3MtcGxhY2Utb3ItYnVzaW5lc3MnOiAnQWRkcmVzcywgcGxhY2Ugb3IgYnVzaW5lc3MnLFxuICAgICAgJ2FkZC12aWEtYnV0dG9uLWxhYmVsJzogJ0FkZCB2aWEgcG9pbnQnLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsJzpcbiAgICAgICAgJ1NldCBzdG9wIGR1cmF0aW9uIGF0IHZpYSBwb2ludCB7e2luZGV4fX0nLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLWNsb3NlJzpcbiAgICAgICAgJ0Nsb3NlIHN0b3AgZHVyYXRpb24gc2VsZWN0b3IgYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtb3Blbic6XG4gICAgICAgICdPcGVuIHN0b3AgZHVyYXRpb24gc2VsZWN0b3IgYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgICBhaXJwbGFuZTogJ0ZsaWdodCcsXG4gICAgICBhcnJpdmFsOiAnQXJyaXZhbCcsXG4gICAgICBiYWNrOiAnQmFjaycsXG4gICAgICBiaWtlcGFyazogJ1BhcmsgJiBSaWRlIGZvciBiaWtlcycsXG4gICAgICBiaWtlcmVudGFsc3RhdGlvbjogJ0Jpa2Ugc3RhdGlvbicsXG4gICAgICBidXM6ICdidXMnLFxuICAgICAgY2FuY2VsOiAnQ2FuY2VsJyxcbiAgICAgIGNhcnBhcms6ICdQYXJrICYgUmlkZScsXG4gICAgICAnY2xlYXItYnV0dG9uLWxhYmVsJzogJ0NsZWFyJyxcbiAgICAgICdjbGVhci1zZWFyY2gtaGlzdG9yeSc6ICdDbGVhciBzZWFyY2ggaGlzdG9yeScsXG4gICAgICBjdXJyZW50cG9zaXRpb246ICdDdXJyZW50IHBvc2l0aW9uJyxcbiAgICAgIGRlbGV0ZTogJ0RlbGV0ZScsXG4gICAgICAnZGVsZXRlLW9sZC1zZWFyY2hlcy1oZWFkZXInOiAnRG8geW91IHdhbnQgdG8gY2xlYXIgdGhlIHNlYXJjaCBoaXN0b3J5PycsXG4gICAgICBkZXBhcnR1cmU6ICdEZXBhcnR1cmUnLFxuICAgICAgZGVzdGluYXRpb246ICdEZXN0aW5hdGlvbicsXG4gICAgICAnZ2l2ZS1vcmlnaW4nOiAnRW50ZXIgeW91ciBvcmlnaW4uJyxcbiAgICAgICdnaXZlLWRlc3RpbmF0aW9uJzogJ0VudGVyIHlvdXIgZGVzdGluYXRpb24nLFxuICAgICAgZmF2b3VyaXRlOiAnRmF2b3VyaXRlJyxcbiAgICAgIGZlcnJ5OiAnRmVycnknLFxuICAgICAgJ2Z1dHVyZS1yb3V0ZSc6ICdGdXR1cmUgcm91dGUnLFxuICAgICAgb3JpZ2luOiAnU3RhcnQnLFxuICAgICAgJ29yaWdpbi1zdG9wLW5lYXIteW91JzogJ1N0YXJ0JyxcbiAgICAgIG93bmxvY2F0aW9uczogJ093biBsb2NhdGlvbnMnLFxuICAgICAgbG9hZGluZzogJ0xvYWRpbmcuLi4nLFxuICAgICAgJ21pbnV0ZS1zaG9ydCc6ICdtJyxcbiAgICAgIHBsYXRmb3JtOiAnUGxhdGZvcm0nLFxuICAgICAgcmFpbDogJ1RyYWluJyxcbiAgICAgIHJlcXVpcmVkOiAncmVxdWlyZWQgZmllbGQnLFxuICAgICAgc2VhcmNoOiAnU2VhcmNoJyxcbiAgICAgICdzZWFyY2gtYWRkcmVzcy1vci1wbGFjZSc6ICdTZWFyY2ggYnkgYWRkcmVzcyBvciBwbGFjZSBuYW1lJyxcbiAgICAgICdzZWFyY2gtYnV0dG9uLWxhYmVsJzogJ1NlYXJjaCcsXG4gICAgICAnc2VhcmNoLWRlc3RpbmF0aW9uJzogJ1NlYXJjaCBkZXN0aW5hdGlvbiwgcm91dGUgb3Igc3RvcCcsXG4gICAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLWluZGV4JzogJ0VudGVyIGRlc3RpbmF0aW9uJyxcbiAgICAgICdzZWFyY2gtZGVzdGluYXRpb24tcmVzdWx0cy1idXQtbm8tc2VhcmNoJzpcbiAgICAgICAgJ1ZpZXcgcmVzdWx0cyBpbiB0aGUgYWRqYWNlbnQg4oCcRGVzdGluYXRpb27igJ0gdGFiJyxcbiAgICAgICdzZWFyY2gtbm8tcmVzdWx0cyc6ICdObyBsb2NhdGlvbicsXG4gICAgICAnc2VhcmNoLW9yaWdpbic6ICdTZWFyY2ggb3JpZ2luLCByb3V0ZSBvciBzdG9wJyxcbiAgICAgICdzZWFyY2gtb3JpZ2luLWluZGV4JzogJ0VudGVyIG9yaWdpbicsXG4gICAgICAnc2VhcmNoLXBvc2l0aW9uJzogJ0RldGVjdCBsb2NhdGlvbicsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsJzogJ1ZlbnVlLCBwbGFjZSBhbmQgc3RvcHNlYXJjaC4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtZGVza3RvcCc6XG4gICAgICAgICdOYXZpZ2F0ZSBsaXN0IHdpdGggYXJyb3cga2V5cyBhbmQgc2VsZWN0IHdpdGggZW50ZXIga2V5LicsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1tb2JpbGUnOlxuICAgICAgICAnRW50ZXIgdGhlIGxvY2F0aW9uIGFuZCBuYXZpZ2F0ZSBpbiB0aGUgbGlzdCBieSBzd2lwaW5nLicsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLW1vdmUtdG8tZGVzdGluYXRpb24nOlxuICAgICAgICAnQWZ0ZXIgc2VsZWN0aW5nIHRoZSBzdGFydGluZyBsb2NhdGlvbiB5b3UgYXJlIGF1dG9tYXRpY2FsbHkgbW92ZWQgdG8gdGhlIGRlc3RpbmF0aW9uIGZpZWxkLicsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbic6ICdUaGVyZSBpcyB7e2NvdW50fX0gc3VnZ2VzdGlvbiBhdmFpbGFibGUnLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW5fcGx1cmFsJzpcbiAgICAgICAgJ1RoZXJlIGFyZSB7e2NvdW50fX0gc3VnZ2VzdGlvbnMgYXZhaWxhYmxlJyxcbiAgICAgICdzZWFyY2gtY3VycmVudC1zdWdnZXN0aW9uJzogJ0N1cnJlbnQgc2VsZWN0aW9uOiB7e3NlbGVjdGlvbn19JyxcbiAgICAgIHN0cmVldDogJ1N0cmVldCcsXG4gICAgICBzdWJ3YXk6ICdNZXRybycsXG4gICAgICBzdGF0aW9uOiAnU3RhdGlvbicsXG4gICAgICBzdG9wOiAnU3RvcCcsXG4gICAgICAnc3RvcC1uZWFyLXlvdSc6ICdTZWFyY2ggc3RvcHMgYW5kIHJvdXRlcycsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1haXJwbGFuZSc6ICdTZWFyY2ggZmxpZ2h0cyBvciBhaXJwb3J0cycsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1iaWtlcGFyayc6ICdTZWFyY2ggYmlrZSBwYXJrcycsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1idXMnOiAnU2VhcmNoIGJ1cyByb3V0ZXMgb3Igc3RvcHMnLFxuICAgICAgJ3N0b3AtbmVhci15b3UtY2FycGFyayc6ICdTZWFyY2ggY2FyIHBhcmtzJyxcbiAgICAgICdzdG9wLW5lYXIteW91LWNpdHliaWtlJzogJ1NlYXJjaCBjaXR5IGJpa2Ugc3RhdGlvbnMnLFxuICAgICAgJ3N0b3AtbmVhci15b3UtcmFpbCc6ICdTZWFyY2ggdHJhaW4gcm91dGVzIG9yIHN0YXRpb25zJyxcbiAgICAgICdzdG9wLW5lYXIteW91LXN1YndheSc6ICdTZWFyY2ggbWV0cm8gcm91dGVzIG9yIHN0YXRpb25zICcsXG4gICAgICAnc3RvcC1uZWFyLXlvdS10cmFtJzogJ1NlYXJjaCB0cmFtIHJvdXRlcyBvciBzdG9wcycsXG4gICAgICAnc3RvcC1yb3V0ZS1zdGF0aW9uJzogJ0J1cyBhbmQgc3RvcCBzZWFyY2gnLFxuICAgICAgJ3RvZGF5LWF0JzogJ3RvZGF5IGF0JyxcbiAgICAgICd0b21vcnJvdy1hdCc6ICd0b21vcnJvdyBhdCcsXG4gICAgICB0cmFtOiAnVHJhbScsXG4gICAgICB0cmFjazogJ1RyYWNrJyxcbiAgICAgICd1c2Utb3duLXBvc2l0aW9uJzogJ1VzZSBjdXJyZW50IGxvY2F0aW9uJyxcbiAgICAgICdzZWxlY3QtZnJvbS1tYXAnOiAnU2VsZWN0IHBvc2l0aW9uIGZyb20gbWFwJyxcbiAgICAgICdzZWxlY3QtZnJvbS1vd24tbG9jYXRpb25zJzogJ1NlbGVjdCBmcm9tIG93biBsb2NhdGlvbnMnLFxuICAgICAgdmVudWU6ICdWZW51ZScsXG4gICAgICAndmlhLXBvaW50JzogJ1ZpYSBwb2ludCcsXG4gICAgICB3aGVyZTogJ1doZXJlIHRvPycsXG4gICAgICBwbGFjZTogJ0xvY2F0aW9uJyxcbiAgICB9LFxuICB9LFxuICBmaToge1xuICAgIHRyYW5zbGF0aW9uOiB7XG4gICAgICBhZGRyZXNzOiAnT3NvaXRlJyxcbiAgICAgICdhZGRyZXNzLXBsYWNlLW9yLWJ1c2luZXNzJzogJ09zb2l0ZSwgcGFpa2thIHRhaSB5cml0eXMnLFxuICAgICAgJ2FkZC12aWEtYnV0dG9uLWxhYmVsJzogJ0xpc8Okw6QgdsOkbGlwaXN0ZScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwnOlxuICAgICAgICAnQXNldGEgdsOkbGlwaXN0ZWVsbGUge3tpbmRleH19IHB5c8OkaGR5a3NlbiBrZXN0bycsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtY2xvc2UnOlxuICAgICAgICAnQXZhYSB2w6RsaXBpc3RlZW4ge3tpbmRleH19IHB5c8OkaGR5a3NlbiBrZXN0byB2YWxpdHNpbicsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtb3Blbic6XG4gICAgICAgICdTdWxqZSB2w6RsaXBpc3RlZW4ge3tpbmRleH19IHB5c8OkaGR5a3NlbiBrZXN0byB2YWxpdHNpbicsXG4gICAgICBhaXJwbGFuZTogJ0xlbnRva29uZScsXG4gICAgICBhcnJpdmFsOiAnUGVyaWxsw6QnLFxuICAgICAgYmFjazogJ1Rha2Fpc2luJyxcbiAgICAgIHZlaGljbGVyZW50YWxzdGF0aW9uOiAnUHnDtnLDpGFzZW1hJyxcbiAgICAgIGJpa2VwYXJrOiAnTGlpdHludMOkcHlzw6Rrw7ZpbnRpJyxcbiAgICAgIGJ1czogJ2J1c3NpJyxcbiAgICAgIGNhbmNlbDogJ1BlcnV1dGEnLFxuICAgICAgY2FycGFyazogJ0xpaXR5bnTDpHB5c8Oka8O2aW50aScsXG4gICAgICAnY2xlYXItYnV0dG9uLWxhYmVsJzogJ1R5aGplbm7DpCcsXG4gICAgICAnY2xlYXItc2VhcmNoLWhpc3RvcnknOiAnVHloamVubsOkIGhha3VoaXN0b3JpYScsXG4gICAgICBjdXJyZW50cG9zaXRpb246ICdUw6Rtw6RuaGV0a2luZW4gc2lqYWludGknLFxuICAgICAgZGVsZXRlOiAnUG9pc3RhJyxcbiAgICAgICdkZWxldGUtb2xkLXNlYXJjaGVzLWhlYWRlcic6ICdIYWx1YXRrbyB0eWhqZW50w6TDpCBoYWt1aGlzdG9yaWFuPycsXG4gICAgICBkZXBhcnR1cmU6ICdMw6RodMO2YWlrYScsXG4gICAgICBkZXN0aW5hdGlvbjogJ03DpMOkcsOkbnDDpMOkJyxcbiAgICAgIGZhdm91cml0ZTogJ1N1b3Npa2tpJyxcbiAgICAgIGZlcnJ5OiAnTGF1dHRhJyxcbiAgICAgICdmdXR1cmUtcm91dGUnOiAnVHVsZXZhIHJlaXR0aScsXG4gICAgICAnZ2l2ZS1vcmlnaW4nOiAnTMOkaHTDtnBhaWtrYScsXG4gICAgICAnZ2l2ZS1kZXN0aW5hdGlvbic6ICdNw6TDpHLDpG5ww6TDpCcsXG4gICAgICBvcmlnaW46ICdMw6RodMO2cGFpa2thJyxcbiAgICAgICdvcmlnaW4tc3RvcC1uZWFyLXlvdSc6ICdMw6RodMO2cGFpa2thJyxcbiAgICAgIG93bmxvY2F0aW9uczogJ09tYXQgcGFpa2F0JyxcbiAgICAgIGxvYWRpbmc6ICdMYWRhdGFhbi4uLicsXG4gICAgICAnbWludXRlLXNob3J0JzogJ21pbicsXG4gICAgICBwbGF0Zm9ybTogJ0xhaXR1cmknLFxuICAgICAgcmFpbDogJ0p1bmEnLFxuICAgICAgcmVxdWlyZWQ6ICdwYWtvbGxpbmVuIGtlbnR0w6QnLFxuICAgICAgc2VhcmNoOiAnRXRzaScsXG4gICAgICAnc2VhcmNoLWFkZHJlc3Mtb3ItcGxhY2UnOiAnSGFlIG9zb2l0dGVlbGxhIHRhaSBwYWlrYW4gbmltZWxsw6QnLFxuICAgICAgJ3NlYXJjaC1idXR0b24tbGFiZWwnOiAnSGFlJyxcbiAgICAgICdzZWFyY2gtZGVzdGluYXRpb24nOiAnSGFlIG3DpMOkcsOkbnDDpMOkdMOkLCBsaW5qYWEgdGFpIHB5c8Oka2tpw6QnLFxuICAgICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1pbmRleCc6ICdTecO2dMOkIG3DpMOkcsOkbnDDpMOkJyxcbiAgICAgICdzZWFyY2gtZGVzdGluYXRpb24tcmVzdWx0cy1idXQtbm8tc2VhcmNoJzpcbiAgICAgICAgJ0thdHNvIHR1bG9rc2V0IHZpZXJlaXNlbHTDpCBNw6TDpHLDpG5ww6TDpC12w6RsaWxlaGRlbHTDpCcsXG4gICAgICAnc2VhcmNoLW5vLXJlc3VsdHMnOiAnRWkgdHVsb2tzaWEnLFxuICAgICAgJ3NlYXJjaC1vcmlnaW4nOiAnSGFlIGzDpGh0w7ZwYWlra2FhLCBsaW5qYWEgdGFpIHB5c8Oka2tpw6QnLFxuICAgICAgJ3NlYXJjaC1vcmlnaW4taW5kZXgnOiAnU3nDtnTDpCBsw6RodMO2cGFpa2thJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwnOiAnUGFpa2thLCBsaW5qYSBqYSBweXPDpGtraWhha3UuJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLWRlc2t0b3AnOlxuICAgICAgICAnTmF2aWdvaSBsaXN0YXNzYSBudW9saW7DpHBww6RpbWlsbMOkIGphIHZhbGl0c2UgZW50ZXJpbGzDpC4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtbW9iaWxlJzpcbiAgICAgICAgJ1N5w7Z0w6Qgc2lqYWludGkgamEgbmF2aWdvaSBsaXN0YXNzYSBweXloa8OkaXNlbcOkbGzDpC4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1tb3ZlLXRvLWRlc3RpbmF0aW9uJzpcbiAgICAgICAgJ1ZhbGl0dHVhc2kgbMOkaHTDtnBhaWthbiBzaWlycnl0w6TDpG4gc3VvcmFhbiBtw6TDpHLDpG5ww6TDpC1rZW50dMOkw6RuLicsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbic6ICcgTMO2eWRldHRpaW4ge3tjb3VudH19IGVoZG90dXMnLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW5fcGx1cmFsJzogJyBMw7Z5ZGV0dGlpbiB7e2NvdW50fX0gZWhkb3R1c3RhJyxcbiAgICAgICdzZWFyY2gtY3VycmVudC1zdWdnZXN0aW9uJzogJ1TDpG3DpG5oZXRraW5lbiB2YWxpbnRhOiB7e3NlbGVjdGlvbn19JyxcbiAgICAgICdzZWFyY2gtcG9zaXRpb24nOiAnUGFpa2FubmEnLFxuICAgICAgc3RyZWV0OiAnS2F0dScsXG4gICAgICBzdWJ3YXk6ICdNZXRybycsXG4gICAgICBzdGF0aW9uOiAnQXNlbWEnLFxuICAgICAgc3RvcDogJ1B5c8Oka2tpJyxcbiAgICAgICdzdG9wLW5lYXIteW91JzogJ0xpbmphLCBweXPDpGtraSB0YWkgYXNlbWEnLFxuICAgICAgJ3N0b3AtbmVhci15b3UtYWlycGxhbmUnOiAnSGFlIGxlbnRvamEgdGFpIGxlbnRvYXNlbWFhJyxcbiAgICAgICdzdG9wLW5lYXIteW91LWJpa2VwYXJrJzogJ0hhZSBwecO2csOkcGFya2tpYScsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1idXMnOiAnSGFlIGJ1c3NpbGluamFhIHRhaSBweXPDpGtracOkJyxcbiAgICAgICdzdG9wLW5lYXIteW91LWNhcnBhcmsnOiAnSGFlIGF1dG9wYXJra2lhJyxcbiAgICAgICdzdG9wLW5lYXIteW91LWNpdHliaWtlJzogJ0hhZSBrYXVwdW5raXB5w7Zyw6Rhc2VtYWEnLFxuICAgICAgJ3N0b3AtbmVhci15b3UtcmFpbCc6ICdIYWUgbMOkaGlqdW5hYSB0YWkgYXNlbWFhJyxcbiAgICAgICdzdG9wLW5lYXIteW91LXN1YndheSc6ICdIYWUgbWV0cm9saW5qYWEgdGFpIGFzZW1hYScsXG4gICAgICAnc3RvcC1uZWFyLXlvdS10cmFtJzogJ0hhZSByYWl0aW9saW5qYWEgdGFpIHB5c8Oka2tpw6QnLFxuICAgICAgJ3N0b3Atcm91dGUtc3RhdGlvbic6ICdMaW5qYS0gamEgcHlzw6Rra2loYWt1JyxcbiAgICAgICd0b2RheS1hdCc6ICd0w6Ruw6TDpG4ga2xvJyxcbiAgICAgICd0b21vcnJvdy1hdCc6ICdodW9tZW5uYSBrbG8nLFxuICAgICAgdHJhbTogJ1JhaXRpb3ZhdW51JyxcbiAgICAgIHRyYWNrOiAnUmFpZGUnLFxuICAgICAgJ3VzZS1vd24tcG9zaXRpb24nOiAnS8OkeXTDpCBueWt5aXN0w6Qgc2lqYWludGlhJyxcbiAgICAgICdzZWxlY3QtZnJvbS1tYXAnOiAnVmFsaXRzZSBzaWphaW50aSBrYXJ0YWx0YScsXG4gICAgICAnc2VsZWN0LWZyb20tb3duLWxvY2F0aW9ucyc6ICdWYWxpdHNlIG9taXN0YSBwYWlrb2lzdGEnLFxuICAgICAgdmVudWU6ICdQYWlra2EnLFxuICAgICAgJ3ZpYS1wb2ludCc6ICdWw6RsaXBpc3RlJyxcbiAgICAgIHdoZXJlOiAnTWlubmUgbWVubsOkw6RuPycsXG4gICAgICBwbGFjZTogJ1BhaWtrYScsXG4gICAgfSxcbiAgfSxcbiAgcGw6IHtcbiAgICB0cmFuc2xhdGlvbjoge1xuICAgICAgYWRkcmVzczogJ0FkcmVzJyxcbiAgICAgICdhZGRyZXNzLXBsYWNlLW9yLWJ1c2luZXNzJzogJ0FkcmVzLCBtaWVqc2NlIGx1YiBmaXJtYScsXG4gICAgICAnYWRkLXZpYS1idXR0b24tbGFiZWwnOiAnRG9kYWogcHVua3QgcG/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/NTAwOnM7cmV0dXJuKDAsci51c2VFZmZlY3QpKChmdW5jdGlvbigpe3QuY3VycmVudD1uZXcgdS5kZWZhdWx0KG51bGwse3NwZWVkOmMsc3BlZWRBc0R1cmF0aW9uOiEwfSl9KSxbXSksKDAsci51c2VDYWxsYmFjaykoKGZ1bmN0aW9uKCl7biYmdC5jdXJyZW50JiZ0LmN1cnJlbnQuYW5pbWF0ZVNjcm9sbChuLmN1cnJlbnQsbnVsbCx7b2Zmc2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGl9LHVwZGF0ZVVSTDohMX0pfSksW2ksbl0pfX0sMTU2OmZ1bmN0aW9uKHQpe1widXNlIHN0cmljdFwiO3QuZXhwb3J0cz1lfX0sbj17fTtmdW5jdGlvbiBvKGUpe3ZhciByPW5bZV07aWYodm9pZCAwIT09cilyZXR1cm4gci5leHBvcnRzO3ZhciB1PW5bZV09e2V4cG9ydHM6e319O3JldHVybiB0W2VdLmNhbGwodS5leHBvcnRzLHUsdS5leHBvcnRzLG8pLHUuZXhwb3J0c31yZXR1cm4gby5nPWZ1bmN0aW9uKCl7aWYoXCJvYmplY3RcIj09dHlwZW9mIGdsb2JhbFRoaXMpcmV0dXJuIGdsb2JhbFRoaXM7dHJ5e3JldHVybiB0aGlzfHxuZXcgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpfWNhdGNoKGUpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3cpcmV0dXJuIHdpbmRvd319KCksbyg0MzIpfSgpfSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiaW1wb3J0IG9iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIi4vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZS5qc1wiO1xuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHtcbiAgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9O1xuICB2YXIgbyxcbiAgICByLFxuICAgIGkgPSBvYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpO1xuICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgIHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtcbiAgICBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIC0xID09PSB0LmluZGV4T2YobykgJiYge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pO1xuICB9XG4gIHJldHVybiBpO1xufVxuZXhwb3J0IHsgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIGFzIGRlZmF1bHQgfTsiLCJmdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7XG4gIGlmIChudWxsID09IHIpIHJldHVybiB7fTtcbiAgdmFyIHQgPSB7fTtcbiAgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkge1xuICAgIGlmICgtMSAhPT0gZS5pbmRleE9mKG4pKSBjb250aW51ZTtcbiAgICB0W25dID0gcltuXTtcbiAgfVxuICByZXR1cm4gdDtcbn1cbmV4cG9ydCB7IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgU3VnZ2VzdGlvbkl0ZW0gZnJvbSAnQGRpZ2l0cmFuc2l0LWNvbXBvbmVudC9kaWdpdHJhbnNpdC1jb21wb25lbnQtc3VnZ2VzdGlvbi1pdGVtJztcbmltcG9ydCBSZWFjdCwgeyBtZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCc7XG5pbXBvcnQgY3ggZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQge1xuICBnZXRTdWdnZXN0aW9uQ29udGVudCxcbiAgdHJhbnNsYXRlRnV0dXJlUm91dGVTdWdnZXN0aW9uVGltZSxcbn0gZnJvbSAnLi4vdXRpbHMvdXRpbHMnO1xuXG5jb25zdCBTdWdnZXN0aW9uID0gbWVtbyhmdW5jdGlvbiBTdWdnZXN0aW9uKHtcbiAgaXRlbSxcbiAgbG5nLFxuICBnZXRJdGVtUHJvcHMsXG4gIGhpZ2hsaWdodGVkSW5kZXgsXG4gIGl0ZW1JbmRleCxcbiAgc3R5bGVzLFxuICAuLi5yZXN0XG59KSB7XG4gIGNvbnN0IFt0XSA9IHVzZVRyYW5zbGF0aW9uKCk7XG4gIGNvbnN0IG5ld0l0ZW0gPVxuICAgIGl0ZW0udHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJ1xuICAgICAgPyB7XG4gICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICB0cmFuc2xhdGVkVGV4dDogdHJhbnNsYXRlRnV0dXJlUm91dGVTdWdnZXN0aW9uVGltZShpdGVtLCBsbmcsIHQpLFxuICAgICAgICB9XG4gICAgICA6IGl0ZW07XG4gIGNvbnN0IGNvbnRlbnQgPSBnZXRTdWdnZXN0aW9uQ29udGVudChpdGVtLCBsbmcsIHQpO1xuICByZXR1cm4gKFxuICAgIDxsaVxuICAgICAgY2xhc3NOYW1lPXtjeChcbiAgICAgICAgc3R5bGVzLnN1Z2dlc3Rpb24sXG4gICAgICAgIGhpZ2hsaWdodGVkSW5kZXggPT09IGl0ZW1JbmRleCAmJiBzdHlsZXMuc3VnZ2VzdGlvbkhpZ2hsaWdodGVkLFxuICAgICAgKX1cbiAgICAgIHsuLi5nZXRJdGVtUHJvcHMoeyBpbmRleDogaXRlbUluZGV4IH0pfVxuICAgID5cbiAgICAgIDxTdWdnZXN0aW9uSXRlbSBpdGVtPXtuZXdJdGVtfSBjb250ZW50PXtjb250ZW50fSBsbmc9e2xuZ30gey4uLnJlc3R9IC8+XG4gICAgPC9saT5cbiAgKTtcbn0pO1xuY29uc3QgaXRlbVNoYXBlID0gUHJvcFR5cGVzLnNoYXBlKHtcbiAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgdHlwZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgYWRkcmVzczogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2VsZWN0ZWRJY29uSWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGljb25Db2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgdHJhbnNsYXRlZFRleHQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHByb3BlcnRpZXM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgbGF5ZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgbG9jYWxhZG1pbjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBtb2RlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHNvdXJjZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBhcnJvd0NsaWNrZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIGRlc3RpbmF0aW9uOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIGxvY2FsYWRtaW46IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgfSksXG4gICAgb3JpZ2luOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIGxvY2FsYWRtaW46IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgfSksXG4gIH0pLFxufSk7XG5cblN1Z2dlc3Rpb24ucHJvcFR5cGVzID0ge1xuICBpdGVtOiBpdGVtU2hhcGUuaXNSZXF1aXJlZCxcbiAgbG5nOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGdldEl0ZW1Qcm9wczogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgaGlnaGxpZ2h0ZWRJbmRleDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICBpdGVtSW5kZXg6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgc3R5bGVzOiBQcm9wVHlwZXMub2JqZWN0T2YoUHJvcFR5cGVzLnN0cmluZykuaXNSZXF1aXJlZCxcbn07XG5cbmV4cG9ydCBjb25zdCBTdWdnZXN0aW9ucyA9IG1lbW8oZnVuY3Rpb24gU3VnZ2VzdGlvbnMoe1xuICBzdWdnZXN0aW9ucyxcbiAgZ2V0TWVudVByb3BzLFxuICBnZXRJdGVtUHJvcHMsXG4gIGxuZyxcbiAgc3R5bGVzLFxuICBoaWRkZW4sXG4gIHJlbmRlckNsZWFySGlzdG9yeUJ1dHRvbixcbiAgaGFuZGxlQ2xlYXJIaXN0b3J5LFxuICAuLi5yZXN0XG59KSB7XG4gIGNvbnN0IFt0XSA9IHVzZVRyYW5zbGF0aW9uKCk7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjeChbXG4gICAgICAgIHN0eWxlcy5zdWdnZXN0aW9uc0NvbnRhaW5lck9wZW4sXG4gICAgICAgIHN0eWxlcy5zdWdnZXN0aW9uc0NvbnRhaW5lcixcbiAgICAgICAgaGlkZGVuICYmIHN0eWxlcy5oaWRkZW4sXG4gICAgICBdKX1cbiAgICA+XG4gICAgICA8dWwgY2xhc3NOYW1lPXtzdHlsZXMuc3VnZ2VzdGlvbnNMaXN0fSB7Li4uZ2V0TWVudVByb3BzKCl9PlxuICAgICAgICB7c3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uLCBpKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxTdWdnZXN0aW9uXG4gICAgICAgICAgICAgIGtleT17YCR7c3VnZ2VzdGlvbi50eXBlfS0ke1xuICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24ucHJvcGVydGllcy5naWQgfHxcbiAgICAgICAgICAgICAgICBzdWdnZXN0aW9uLnByb3BlcnRpZXMuZ3Rmc0lkIHx8XG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoc3VnZ2VzdGlvbi5wcm9wZXJ0aWVzKVxuICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgZ2V0SXRlbVByb3BzPXtnZXRJdGVtUHJvcHN9XG4gICAgICAgICAgICAgIGl0ZW1JbmRleD17aX1cbiAgICAgICAgICAgICAgaXRlbT17c3VnZ2VzdGlvbn1cbiAgICAgICAgICAgICAgbG5nPXtsbmd9XG4gICAgICAgICAgICAgIHN0eWxlcz17c3R5bGVzfVxuICAgICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKTtcbiAgICAgICAgfSl9XG4gICAgICAgIHtyZW5kZXJDbGVhckhpc3RvcnlCdXR0b24gJiYgKFxuICAgICAgICAgIC8vIE5vdCBhIHNlbGVjdGFibGUgZG93bnNoaWZ0IGl0ZW0sIHNvIGdldEl0ZW1Qcm9wcyBpcyBpbnRlbnRpb25hbGx5XG4gICAgICAgICAgLy8gbm90IHVzZWQgaGVyZSAoaXRzIGluZGV4IHdvdWxkIGFsd2F5cyBiZSBvdXQgb2YgdGhlIGl0ZW1zIGJvdW5kcykuXG4gICAgICAgICAgPGxpPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVDbGVhckhpc3Rvcnl9XG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlc1snY2xlYXItc2VhcmNoLWhpc3RvcnknXX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3QoJ2NsZWFyLXNlYXJjaC1oaXN0b3J5JywgeyBsbmcgfSl9XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2xpPlxuICAgICAgICApfVxuICAgICAgPC91bD5cbiAgICA8L2Rpdj5cbiAgKTtcbn0pO1xuXG5TdWdnZXN0aW9ucy5wcm9wVHlwZXMgPSB7XG4gIHN1Z2dlc3Rpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihpdGVtU2hhcGUpLmlzUmVxdWlyZWQsXG4gIGdldE1lbnVQcm9wczogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgZ2V0SXRlbVByb3BzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBsbmc6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgc3R5bGVzOiBQcm9wVHlwZXMub2JqZWN0T2YoUHJvcFR5cGVzLnN0cmluZykuaXNSZXF1aXJlZCxcbiAgaGlkZGVuOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICByZW5kZXJDbGVhckhpc3RvcnlCdXR0b246IFByb3BUeXBlcy5ib29sLFxuICBoYW5kbGVDbGVhckhpc3Rvcnk6IFByb3BUeXBlcy5mdW5jLFxufTtcblxuU3VnZ2VzdGlvbnMuZGVmYXVsdFByb3BzID0ge1xuICByZW5kZXJDbGVhckhpc3RvcnlCdXR0b246IGZhbHNlLFxuICBoYW5kbGVDbGVhckhpc3Rvcnk6ICgpID0+IHVuZGVmaW5lZCxcbn07XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEljb24gZnJvbSAnQGRpZ2l0cmFuc2l0LWNvbXBvbmVudC9kaWdpdHJhbnNpdC1jb21wb25lbnQtaWNvbic7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuLyoqXG4gKiBJbnB1dCBjbGVhciBidXR0b24gZWxlbWVudFxuICogQHR5cGVkZWYge29iamVjdH0gQ2xlYXJCdXR0b25Qcm9wc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGNvbG9yIC8vIGhleCBjb2xvciBzdHJpbmdcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsbmcgLy8gbGFuZ3VhZ2UsIGVnLiAnZmknXG4gKiBAcHJvcGVydHkgeygpID0+IHZvaWR9IGNsZWFySW5wdXRcbiAqIEBwcm9wZXJ0eSB7KCkgPT4gdm9pZH0gW29uS2V5RG93bl1cbiAqIEBwYXJhbSB7Q2xlYXJCdXR0b25Qcm9wc30gcHJvcHNcbiAqIEByZXR1cm5zIHtKU1guRWxlbWVudH1cbiAqL1xuZXhwb3J0IGNvbnN0IENsZWFyQnV0dG9uID0gKHsgY29sb3IsIGxuZywgY2xlYXJJbnB1dCwgb25LZXlEb3duLCBzdHlsZXMgfSkgPT4ge1xuICBjb25zdCBbdF0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICByZXR1cm4gKFxuICAgIDxidXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ2NsZWFyLWlucHV0J119XG4gICAgICBvbkNsaWNrPXtjbGVhcklucHV0fVxuICAgICAgYXJpYS1sYWJlbD17dCgnY2xlYXItYnV0dG9uLWxhYmVsJywgeyBsbmcgfSl9XG4gICAgICBvbktleURvd249e29uS2V5RG93bn1cbiAgICA+XG4gICAgICA8SWNvbiBpbWc9XCJjbG9zZVwiIGNvbG9yPXtjb2xvcn0gLz5cbiAgICA8L2J1dHRvbj5cbiAgKTtcbn07XG5cbkNsZWFyQnV0dG9uLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgbG5nOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGNsZWFySW5wdXQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIG9uS2V5RG93bjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgc3R5bGVzOiBQcm9wVHlwZXMub2JqZWN0T2YoUHJvcFR5cGVzLnN0cmluZykuaXNSZXF1aXJlZCxcbn07XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjeCBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IENsZWFyQnV0dG9uIH0gZnJvbSAnLi9DbGVhckJ1dHRvbic7XG5pbXBvcnQgeyBpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQgfSBmcm9tICcuLi91dGlscy91dGlscyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBJbnB1dCh7XG4gIGlkLFxuICBsbmcsXG4gIHZhbHVlLFxuICBwbGFjZWhvbGRlcixcbiAgcmVxdWlyZWQsXG4gIGdldElucHV0UHJvcHMsXG4gIGdldExhYmVsUHJvcHMsXG4gIGNsZWFySW5wdXQsXG4gIGFyaWFMYWJlbCxcbiAgaW5wdXRSZWYsXG4gIHN0eWxlcyxcbiAgcmVuZGVyTGFiZWwsXG4gIGlzTW9iaWxlLFxuICBpbnB1dENsYXNzTmFtZSxcbiAgdHJhbnNwb3J0TW9kZSxcbiAgY2xlYXJCdXR0b25Db2xvcixcbiAgYXV0b0ZvY3VzLFxuICBpbnB1dE9uQmx1cixcbiAgb25WYWx1ZUNoYW5nZSxcbn0pIHtcbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gZSA9PiB7XG4gICAgLy8gRG93bnNoaWZ0IHJlcG9ydHMgdGhlIG5ldyB2YWx1ZSBvbmx5IGluIGFuIGVmZmVjdCwgb25lIHJlbmRlciBsYXRlci4gVW50aWxcbiAgICAvLyB0aGVuIGl0IGZlZWRzIHRoZSBzdGFsZSBjb250cm9sbGVkIGlucHV0VmFsdWUgYmFjayBpbnRvIHRoZSBET00gbm9kZSwgd2hpY2hcbiAgICAvLyB3aXBlcyB0aGUga2V5c3Ryb2tlIGFuZCBkZXN5bmNzIEFuZHJvaWQga2V5Ym9hcmRzJyBjb21wb3NpbmcgcmFuZ2UuXG4gICAgb25WYWx1ZUNoYW5nZShlLnRhcmdldC52YWx1ZSk7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbnRhaW5lcn0+XG4gICAgICB7cmVuZGVyTGFiZWwgJiYgKFxuICAgICAgICA8bGFiZWxcbiAgICAgICAgICB7Li4uZ2V0TGFiZWxQcm9wcyh7XG4gICAgICAgICAgICBjbGFzc05hbWU6IHN0eWxlc1snc3Itb25seSddLFxuICAgICAgICAgICAgaHRtbEZvcjogaWQsXG4gICAgICAgICAgfSl9XG4gICAgICAgID5cbiAgICAgICAgICB7YXJpYUxhYmVsfVxuICAgICAgICA8L2xhYmVsPlxuICAgICAgKX1cbiAgICAgIDxpbnB1dFxuICAgICAgICBhcmlhLWxhYmVsPXthcmlhTGFiZWx9XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc3gtYTExeS9uby1hdXRvZm9jdXNcbiAgICAgICAgYXV0b0ZvY3VzPXthdXRvRm9jdXN9XG4gICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgICAgcmVxdWlyZWQ9e3JlcXVpcmVkfVxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIGNsYXNzTmFtZT17Y3goXG4gICAgICAgICAgc3R5bGVzLmlucHV0LFxuICAgICAgICAgIGlzTW9iaWxlICYmIHRyYW5zcG9ydE1vZGUgPyBzdHlsZXMudGhpbiA6ICcnLFxuICAgICAgICAgIHN0eWxlc1tpZF0gfHwgJycsXG4gICAgICAgICAgdmFsdWUgPyBzdHlsZXMuaGFzVmFsdWUgOiAnJyxcbiAgICAgICAgICBpbnB1dENsYXNzTmFtZSxcbiAgICAgICAgKX1cbiAgICAgICAgaWQ9e2lkfVxuICAgICAgICB7Li4uZ2V0SW5wdXRQcm9wcyh7XG4gICAgICAgICAgcmVmOiBpbnB1dFJlZixcbiAgICAgICAgICBvbkJsdXI6IGlucHV0T25CbHVyLFxuICAgICAgICAgIG9uQ2hhbmdlOiBoYW5kbGVDaGFuZ2UsXG4gICAgICAgIH0pfVxuICAgICAgLz5cbiAgICAgIHt2YWx1ZSAmJiAoXG4gICAgICAgIDxDbGVhckJ1dHRvblxuICAgICAgICAgIGxuZz17bG5nfVxuICAgICAgICAgIGNsZWFySW5wdXQ9eygpID0+IGNsZWFySW5wdXQoaW5wdXRSZWYpfVxuICAgICAgICAgIHN0eWxlcz17c3R5bGVzfVxuICAgICAgICAgIGNvbG9yPXtjbGVhckJ1dHRvbkNvbG9yfVxuICAgICAgICAgIG9uS2V5RG93bj17ZSA9PiBpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQoZSkgJiYgY2xlYXJJbnB1dChpbnB1dFJlZil9XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5JbnB1dC5wcm9wVHlwZXMgPSB7XG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGxuZzogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICByZXF1aXJlZDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgdmFsdWU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgZ2V0SW5wdXRQcm9wczogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgZ2V0TGFiZWxQcm9wczogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgY2xlYXJJbnB1dDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgYXJpYUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGlucHV0UmVmOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGN1cnJlbnQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgfSkuaXNSZXF1aXJlZCxcbiAgc3R5bGVzOiBQcm9wVHlwZXMub2JqZWN0T2YoUHJvcFR5cGVzLnN0cmluZykuaXNSZXF1aXJlZCxcbiAgcmVuZGVyTGFiZWw6IFByb3BUeXBlcy5ib29sLFxuICBpc01vYmlsZTogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgaW5wdXRDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgdHJhbnNwb3J0TW9kZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgY2xlYXJCdXR0b25Db2xvcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBhdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICBpbnB1dE9uQmx1cjogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uVmFsdWVDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG59O1xuXG5JbnB1dC5kZWZhdWx0UHJvcHMgPSB7XG4gIGF1dG9Gb2N1czogZmFsc2UsXG4gIHJlbmRlckxhYmVsOiBmYWxzZSxcbiAgdHJhbnNwb3J0TW9kZTogdW5kZWZpbmVkLFxuICBpbnB1dE9uQmx1cjogKCkgPT4ge30sXG59O1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QsIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdE1vZGFsIGZyb20gJ3JlYWN0LW1vZGFsJztcbmltcG9ydCBEaWFsb2dNb2RhbCBmcm9tICdAZGlnaXRyYW5zaXQtY29tcG9uZW50L2RpZ2l0cmFuc2l0LWNvbXBvbmVudC1kaWFsb2ctbW9kYWwnO1xuaW1wb3J0IEljb24gZnJvbSAnQGRpZ2l0cmFuc2l0LWNvbXBvbmVudC9kaWdpdHJhbnNpdC1jb21wb25lbnQtaWNvbic7XG5pbXBvcnQgaG9va3MgZnJvbSAnQGhzbC1maS9ob29rcyc7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnO1xuaW1wb3J0IHsgdXNlQ29tYm9ib3ggfSBmcm9tICdkb3duc2hpZnQnO1xuaW1wb3J0IG1vYmlsZVN0eWxlcyBmcm9tICcuL01vYmlsZVNlYXJjaC5zY3NzJztcbmltcG9ydCBtb2JpbGVOb1Njcm9sbFN0eWxlcyBmcm9tICcuL01vYmlsZU5vU2Nyb2xsLnNjc3MnO1xuaW1wb3J0IHsgU3VnZ2VzdGlvbnMgfSBmcm9tICcuL1N1Z2dlc3Rpb25zJztcbmltcG9ydCB7IElucHV0IH0gZnJvbSAnLi9JbnB1dCc7XG5pbXBvcnQge1xuICBpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQsXG4gIGdldFN1Z2dlc3Rpb25WYWx1ZSxcbiAgaXNQT0lTZWFyY2gsXG59IGZyb20gJy4uL3V0aWxzL3V0aWxzJztcblxuLyoqXG4gKiBAdHlwZWRlZiBBdXRvc3VnZ2VzdFN0YXRlXG4gKiBAcHJvcGVydHkge2FycmF5fSBzdWdnZXN0aW9uc1xuICogQHByb3BlcnR5IHtib29sZWFufSByZW5kZXJNb2JpbGVcbiAqXG4gKiBAdHlwZWRlZiBNb2JpbGVWaWV3UHJvcHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhcHBFbGVtZW50XG4gKiBAcHJvcGVydHkge3N0cmluZ30gaWRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwbGFjZWhvbGRlclxuICogQHByb3BlcnR5IHtmdW5jdGlvbn0gY2xlYXJJbnB1dFxuICogQHByb3BlcnR5IHtmdW5jdGlvbn0gb25TZWxlY3RlZEl0ZW1DaGFuZ2VcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBmb250V2VpZ2h0c1xuICogQHByb3BlcnR5IHtmdW5jdGlvbn0gY2xlYXJPbGRTZWFyY2hlc1xuICogQHByb3BlcnR5IHtvYmplY3R9IHN1Z2dlc3Rpb25Qcm9wc1xuICogQHByb3BlcnR5IHtvYmplY3R9IGNvbG9yc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGxuZ1xuICogQHByb3BlcnR5IHtvYmplY3R9IGFyaWFQcm9wc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IHZhbHVlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gaW5wdXRDbGFzc05hbWVcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcmVxdWlyZWRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbW9iaWxlTGFiZWxdXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtzaG93U2Nyb2xsXVxuICogQHByb3BlcnR5IHtBdXRvc3VnZ2VzdFN0YXRlfSBzdGF0ZVxuICogQHByb3BlcnR5IHtmdW5jdGlvbn0gZGlzcGF0Y2hcbiAqXG4gKiBAcGFyYW0ge01vYmlsZVZpZXdQcm9wc30gcHJvcHNcbiAqIEByZXR1cm5zIHtKU1guRWxlbWVudH1cbiAqL1xuY29uc3QgTW9iaWxlVmlldyA9ICh7XG4gIGFwcEVsZW1lbnQsXG4gIGlkLFxuICBwbGFjZWhvbGRlcixcbiAgY2xlYXJJbnB1dCxcbiAgb25TZWxlY3RlZEl0ZW1DaGFuZ2UsXG4gIGZvbnRXZWlnaHRzLFxuICBjbGVhck9sZFNlYXJjaGVzLFxuICBzdWdnZXN0aW9uUHJvcHMsXG4gIGxuZyxcbiAgYXJpYVByb3BzLFxuICB2YWx1ZSxcbiAgaW5wdXRDbGFzc05hbWUsXG4gIHJlcXVpcmVkLFxuICBtb2JpbGVMYWJlbCxcbiAgc2hvd1Njcm9sbCxcbiAgc3RhdGUsXG4gIGRpc3BhdGNoLFxuICBjb2xvcnMsXG59KSA9PiB7XG4gIGNvbnN0IFt0XSA9IHVzZVRyYW5zbGF0aW9uKCk7XG4gIGNvbnN0IHsgbG9jaywgdW5sb2NrIH0gPSBob29rcy51c2VTY3JvbGxMb2NrKCk7XG4gIGNvbnN0IHN0eWxlcyA9IHNob3dTY3JvbGwgPyBtb2JpbGVTdHlsZXMgOiBtb2JpbGVOb1Njcm9sbFN0eWxlcztcbiAgY29uc3QgaW5wdXRJZCA9IGAke2lkfS1pbnB1dGA7XG4gIGNvbnN0IGxhYmVsSWQgPSBgJHtpZH0tbGFiZWxgO1xuICBjb25zdCBbaXNEaWFsb2dPcGVuLCBzZXREaWFsb2dPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgaW5wdXRSZWYgPSBSZWFjdC51c2VSZWYoKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIFJlYWN0TW9kYWwuc2V0QXBwRWxlbWVudChhcHBFbGVtZW50KTtcbiAgfSwgW10pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHN0YXRlLnJlbmRlck1vYmlsZSkge1xuICAgICAgbG9jaygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB1bmxvY2soKTtcbiAgICB9XG4gIH0sIFtzdGF0ZS5yZW5kZXJNb2JpbGVdKTtcblxuICAvKipcbiAgICogaW5kZXBlbmRlbnQgaG9va3MgaW4gbW9iaWxlIHZpZXcuXG4gICAqIGlucHV0VmFsdWUgYW5kIHN1Z2dlc3Rpb24gc3RhdGVzIGFyZSBrZXB0IGluIHRoZSBwYXJlbnRcbiAgICovXG4gIGNvbnN0IHtcbiAgICBoaWdobGlnaHRlZEluZGV4LFxuICAgIGdldExhYmVsUHJvcHMsXG4gICAgZ2V0TWVudVByb3BzLFxuICAgIGdldElucHV0UHJvcHMsXG4gICAgZ2V0SXRlbVByb3BzLFxuICAgIHNldEhpZ2hsaWdodGVkSW5kZXgsXG4gIH0gPSB1c2VDb21ib2JveCh7XG4gICAgaXRlbXM6IHN0YXRlLnN1Z2dlc3Rpb25zLFxuICAgIGlucHV0VmFsdWU6IHZhbHVlLFxuICAgIGlzT3BlbjogdHJ1ZSxcbiAgICBvblNlbGVjdGVkSXRlbUNoYW5nZTogY2hhbmdlcyA9PiB7XG4gICAgICBvblNlbGVjdGVkSXRlbUNoYW5nZShjaGFuZ2VzKTtcbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ1RPR0dMRV9NRU5VJywgaXNNb2JpbGU6IHRydWUgfSk7XG4gICAgfSxcbiAgICBpbnB1dElkLFxuICAgIGxhYmVsSWQsXG4gICAgc2VsZWN0ZWRJdGVtOiBudWxsLFxuICAgIGRlZmF1bHRIaWdobGlnaHRlZEluZGV4OiAtMSxcbiAgICBvbklucHV0VmFsdWVDaGFuZ2U6ICh7IGlucHV0VmFsdWUsIHR5cGUgfSkgPT5cbiAgICAgIHN0YXRlLnJlbmRlck1vYmlsZSAmJiAvLyBwcmV2ZW50IHVwZGF0aW5nIHZhbHVlIHdoZW4gdGhlIHNlYXJjaCBpcyBub3Qgb3BlblxuICAgICAgdHlwZSAhPT0gdXNlQ29tYm9ib3guc3RhdGVDaGFuZ2VUeXBlcy5JbnB1dENoYW5nZSAmJiAvLyB0eXBpbmcgaXMgZGlzcGF0Y2hlZCBzeW5jaHJvbm91c2x5IGJ5IElucHV0XG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdJTlBVVF9DSEFOR0UnLCB2YWx1ZTogaW5wdXRWYWx1ZSB9KSxcbiAgICBzdGF0ZVJlZHVjZXI6IChvbGRTdGF0ZSwgeyBjaGFuZ2VzLCB0eXBlIH0pID0+IHtcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIHVzZUNvbWJvYm94LnN0YXRlQ2hhbmdlVHlwZXMuSW5wdXRLZXlEb3duRXNjYXBlOiB7XG4gICAgICAgICAgc2V0SGlnaGxpZ2h0ZWRJbmRleCgtMSk7XG4gICAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnVE9HR0xFX01FTlUnLCBpc01vYmlsZTogdHJ1ZSB9KTtcbiAgICAgICAgICByZXR1cm4gb2xkU3RhdGU7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSB1c2VDb21ib2JveC5zdGF0ZUNoYW5nZVR5cGVzLklucHV0S2V5RG93bkVudGVyOlxuICAgICAgICAgIGlmIChzdGF0ZS5sb2FkaW5nKSB7XG4gICAgICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdQRU5ESU5HX0VOVEVSJywgZW50ZXJQZW5kaW5nOiB0cnVlIH0pO1xuICAgICAgICAgICAgcmV0dXJuIG9sZFN0YXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBzZWxlY3QgdGhlIGZpcnN0IGl0ZW0gaWYgbm9uZSBpcyBoaWdobGlnaHRlZFxuICAgICAgICAgIGlmIChvbGRTdGF0ZS5oaWdobGlnaHRlZEluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4uY2hhbmdlcyxcbiAgICAgICAgICAgICAgc2VsZWN0ZWRJdGVtOiBzdGF0ZS5zdWdnZXN0aW9uc1swXSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjaGFuZ2VzO1xuICAgICAgICAvLyBhbGxvd3MgdGFiYmluZyBvdXQgb2YgaW5wdXQgZmllbGQgd2l0aG91dCBjbG9zaW5nXG4gICAgICAgIGNhc2UgdXNlQ29tYm9ib3guc3RhdGVDaGFuZ2VUeXBlcy5JbnB1dEJsdXI6IHtcbiAgICAgICAgICByZXR1cm4gb2xkU3RhdGU7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gY2hhbmdlcztcbiAgICAgIH1cbiAgICB9LFxuICAgIGl0ZW1Ub1N0cmluZyhzdWdnZXN0aW9uKSB7XG4gICAgICByZXR1cm4gc3VnZ2VzdGlvbiA/IGdldFN1Z2dlc3Rpb25WYWx1ZShzdWdnZXN0aW9uKSA6ICcnO1xuICAgIH0sXG4gIH0pO1xuICAvLyBjYWxsIHRvIHN1cHByZXNzIHJlZiBlcnJvcnMgZnJvbSBkb3duc2hpZnRcbiAgZ2V0TWVudVByb3BzKHt9LCB7IHN1cHByZXNzUmVmRXJyb3I6IHRydWUgfSk7XG4gIGdldElucHV0UHJvcHMoe30sIHsgc3VwcHJlc3NSZWZFcnJvcjogdHJ1ZSB9KTtcblxuICBjb25zdCBoYW5kbGVWYWx1ZUNoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgIG5ld1ZhbHVlID0+XG4gICAgICBzdGF0ZS5yZW5kZXJNb2JpbGUgJiYgZGlzcGF0Y2goeyB0eXBlOiAnSU5QVVRfQ0hBTkdFJywgdmFsdWU6IG5ld1ZhbHVlIH0pLFxuICAgIFtzdGF0ZS5yZW5kZXJNb2JpbGUsIGRpc3BhdGNoXSxcbiAgKTtcblxuICBjb25zdCBoYW5kbGVDbGVhckhpc3RvcnkgPSB1c2VDYWxsYmFjaygoKSA9PiBzZXREaWFsb2dPcGVuKHRydWUpLCBbXSk7XG5cbiAgY29uc3QgeyBhcmlhUmVxdWlyZWRUZXh0LCBTZWFyY2hCYXJJZCwgYXJpYUN1cnJlbnRTdWdnZXN0aW9uIH0gPSBhcmlhUHJvcHM7XG4gIGNvbnN0IGFyaWFMYWJlbCA9IGFyaWFSZXF1aXJlZFRleHRcbiAgICAuY29uY2F0KCcgJylcbiAgICAuY29uY2F0KFNlYXJjaEJhcklkKVxuICAgIC5jb25jYXQoJyAnKVxuICAgIC5jb25jYXQoYXJpYUN1cnJlbnRTdWdnZXN0aW9uKTtcbiAgcmV0dXJuIChcbiAgICA8UmVhY3RNb2RhbFxuICAgICAgaXNPcGVuPXtzdGF0ZS5yZW5kZXJNb2JpbGV9XG4gICAgICBjbGFzc05hbWU9e3N0eWxlc1snbW9iaWxlLW1vZGFsJ119XG4gICAgICBvdmVybGF5Q2xhc3NOYW1lPXtzdHlsZXNbJ21vYmlsZS1tb2RhbC1vdmVybGF5J119XG4gICAgICBzaG91bGRSZXR1cm5Gb2N1c0FmdGVyQ2xvc2U9e2ZhbHNlfVxuICAgICAgc2hvdWxkQ2xvc2VPbkVzY1xuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ21vYmlsZS1tb2RhbC1jb250ZW50J119XG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgJy0tY29sb3InOiBjb2xvcnMucHJpbWFyeSxcbiAgICAgICAgICAnLS1hY2Nlc3NpYmxlLXByaW1hcnktY29sb3InOiBjb2xvcnMuYWNjZXNzaWJsZVByaW1hcnksXG4gICAgICAgICAgJy0taG92ZXItY29sb3InOiBjb2xvcnMuaG92ZXIsXG4gICAgICAgICAgJy0tZm9udC13ZWlnaHQtbWVkaXVtJzogZm9udFdlaWdodHMubWVkaXVtLFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzWydjb21ib2JveC1jb250YWluZXInXX0gaHRtbEZvcj17aW5wdXRJZH0+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlc1snY29tYm9ib3gtaWNvbiddfVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICBzZXRIaWdobGlnaHRlZEluZGV4KC0xKTtcbiAgICAgICAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnVE9HR0xFX01FTlUnLCBpc01vYmlsZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBvbktleURvd249e2UgPT4ge1xuICAgICAgICAgICAgICBpZiAoaXNLZXlib2FyZFNlbGVjdGlvbkV2ZW50KGUpKSB7XG4gICAgICAgICAgICAgICAgc2V0SGlnaGxpZ2h0ZWRJbmRleCgtMSk7XG4gICAgICAgICAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnVE9HR0xFX01FTlUnLCBpc01vYmlsZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9e3QoJ2NhbmNlbCcsIHsgbG5nIH0pfVxuICAgICAgICAgICAgdGFiSW5kZXg9ezB9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEljb24gaW1nPVwiYXJyb3dcIiBjb2xvcj17Y29sb3JzLnByaW1hcnl9IC8+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXNbJ3JpZ2h0LWNvbHVtbiddfT5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzWydjb21ib2JveC1sYWJlbCddfVxuICAgICAgICAgICAgICBpZD17bGFiZWxJZH1cbiAgICAgICAgICAgICAgey4uLmdldExhYmVsUHJvcHMoKX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge21vYmlsZUxhYmVsfVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtcbiAgICAgICAgICAgICAgICBpc1BPSVNlYXJjaChpZClcbiAgICAgICAgICAgICAgICAgID8gdCgnYWRkcmVzcy1wbGFjZS1vci1idXNpbmVzcycsIHsgbG5nIH0pXG4gICAgICAgICAgICAgICAgICA6IHBsYWNlaG9sZGVyXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWQ9e2lkfVxuICAgICAgICAgICAgICBsbmc9e2xuZ31cbiAgICAgICAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICAgICAgICBnZXRJbnB1dFByb3BzPXtnZXRJbnB1dFByb3BzfVxuICAgICAgICAgICAgICBnZXRMYWJlbFByb3BzPXtnZXRMYWJlbFByb3BzfVxuICAgICAgICAgICAgICBjbGVhcklucHV0PXsoKSA9PiBjbGVhcklucHV0KGlucHV0UmVmKX1cbiAgICAgICAgICAgICAgYXJpYUxhYmVsPXthcmlhTGFiZWx9XG4gICAgICAgICAgICAgIGlucHV0UmVmPXtpbnB1dFJlZn1cbiAgICAgICAgICAgICAgc3R5bGVzPXtzdHlsZXN9XG4gICAgICAgICAgICAgIHJlbmRlckxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgICAgY2xlYXJCdXR0b25Db2xvcj17Y29sb3JzLnByaW1hcnl9XG4gICAgICAgICAgICAgIGF1dG9Gb2N1c1xuICAgICAgICAgICAgICBpbnB1dENsYXNzTmFtZT17aW5wdXRDbGFzc05hbWV9XG4gICAgICAgICAgICAgIHJlcXVpcmVkPXtyZXF1aXJlZH1cbiAgICAgICAgICAgICAgaXNNb2JpbGVcbiAgICAgICAgICAgICAgb25WYWx1ZUNoYW5nZT17aGFuZGxlVmFsdWVDaGFuZ2V9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPFN1Z2dlc3Rpb25zXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb25zPXtzdGF0ZS5zdWdnZXN0aW9uc31cbiAgICAgICAgICAgICAgZ2V0TWVudVByb3BzPXtnZXRNZW51UHJvcHN9XG4gICAgICAgICAgICAgIGdldEl0ZW1Qcm9wcz17Z2V0SXRlbVByb3BzfVxuICAgICAgICAgICAgICBoaWdobGlnaHRlZEluZGV4PXtoaWdobGlnaHRlZEluZGV4fVxuICAgICAgICAgICAgICBpc09wZW4gLy8gd2hlbiBtb2JpbGUgdmlldyBpcyBvcGVuIHdlIGFsd2F5cyB3YW50IHRvIHNob3cgc3VnZ2VzdGlvbnNcbiAgICAgICAgICAgICAgaGlkZGVuPXtmYWxzZX1cbiAgICAgICAgICAgICAgbG5nPXtsbmd9XG4gICAgICAgICAgICAgIHN0eWxlcz17c3R5bGVzfVxuICAgICAgICAgICAgICByZW5kZXJDbGVhckhpc3RvcnlCdXR0b25cbiAgICAgICAgICAgICAgaGFuZGxlQ2xlYXJIaXN0b3J5PXtoYW5kbGVDbGVhckhpc3Rvcnl9XG4gICAgICAgICAgICAgIHsuLi5zdWdnZXN0aW9uUHJvcHN9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxEaWFsb2dNb2RhbFxuICAgICAgICAgIGlzTW9kYWxPcGVuPXtpc0RpYWxvZ09wZW59XG4gICAgICAgICAgaGFuZGxlQ2xvc2U9eygpID0+IHNldERpYWxvZ09wZW4oZmFsc2UpfVxuICAgICAgICAgIGhlYWRlclRleHQ9e3QoJ2RlbGV0ZS1vbGQtc2VhcmNoZXMtaGVhZGVyJywgeyBsbmcgfSl9XG4gICAgICAgICAgcHJpbWFyeUJ1dHRvblRleHQ9e3QoJ2RlbGV0ZScsIHsgbG5nIH0pfVxuICAgICAgICAgIHNlY29uZGFyeUJ1dHRvblRleHQ9e3QoJ2NhbmNlbCcsIHsgbG5nIH0pfVxuICAgICAgICAgIHByaW1hcnlCdXR0b25PbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICBjbGVhck9sZFNlYXJjaGVzKCk7XG4gICAgICAgICAgICBzZXREaWFsb2dPcGVuKGZhbHNlKTtcbiAgICAgICAgICB9fVxuICAgICAgICAgIHNlY29uZGFyeUJ1dHRvbk9uQ2xpY2s9eygpID0+IHNldERpYWxvZ09wZW4oZmFsc2UpfVxuICAgICAgICAgIGxhbmc9e2xuZ31cbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvUmVhY3RNb2RhbD5cbiAgKTtcbn07XG5cbk1vYmlsZVZpZXcucHJvcFR5cGVzID0ge1xuICBhcHBFbGVtZW50OiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGNsZWFySW5wdXQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGNsZWFyT2xkU2VhcmNoZXM6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIG9uU2VsZWN0ZWRJdGVtQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICB2YWx1ZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBjb2xvcnM6IFByb3BUeXBlcy5vYmplY3RPZihQcm9wVHlwZXMuc3RyaW5nKS5pc1JlcXVpcmVkLFxuICBmb250V2VpZ2h0czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBtZWRpdW06IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgfSkuaXNSZXF1aXJlZCxcbiAgc3VnZ2VzdGlvblByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe30pLmlzUmVxdWlyZWQsXG4gIGFyaWFQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBhcmlhUmVxdWlyZWRUZXh0OiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgU2VhcmNoQmFySWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBhcmlhQ3VycmVudFN1Z2dlc3Rpb246IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgfSkuaXNSZXF1aXJlZCxcbiAgaW5wdXRDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgbW9iaWxlTGFiZWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIHNob3dTY3JvbGw6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIGxuZzogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBzdGF0ZTogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBzdWdnZXN0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHt9KSkuaXNSZXF1aXJlZCxcbiAgICByZW5kZXJNb2JpbGU6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gICAgbG9hZGluZzogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgfSkuaXNSZXF1aXJlZCxcbiAgZGlzcGF0Y2g6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBNb2JpbGVWaWV3O1xuIiwiZXhwb3J0IGNvbnN0IHNlYXJjaFJlZHVjZXIgPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnSU5QVVRfQ0hBTkdFJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICB2YWx1ZTogYWN0aW9uLnZhbHVlLFxuICAgICAgfTtcbiAgICBjYXNlICdGRVRDSF9TVUdHRVNUSU9OUyc6XG4gICAgICByZXR1cm4gYWN0aW9uLmxvYWRpbmcgPT09IHN0YXRlLmxvYWRpbmcgJiYgIWFjdGlvbi5zdWdnZXN0aW9uc1xuICAgICAgICA/IHN0YXRlXG4gICAgICAgIDoge1xuICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICBsb2FkaW5nOiBhY3Rpb24ubG9hZGluZyxcbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zOiBhY3Rpb24uc3VnZ2VzdGlvbnMgfHwgc3RhdGUuc3VnZ2VzdGlvbnMsXG4gICAgICAgICAgfTtcbiAgICBjYXNlICdDTEVBUl9TVUdHRVNUSU9OUyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc3VnZ2VzdGlvbnM6IFtdLFxuICAgICAgfTtcbiAgICBjYXNlICdSRVNFVF9TT1VSQ0VTJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzb3VyY2VzOiBhY3Rpb24uc291cmNlcyxcbiAgICAgIH07XG4gICAgY2FzZSAnU0VUX1NPVVJDRVMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNob3dPd25QbGFjZXM6IGFjdGlvbi5zaG93T3duUGxhY2VzLFxuICAgICAgICBzb3VyY2VzOiBhY3Rpb24uc291cmNlcyxcbiAgICAgICAgcGVuZGluZ1NlbGVjdGlvbjogYWN0aW9uLnBlbmRpbmdTZWxlY3Rpb24sXG4gICAgICB9O1xuICAgIGNhc2UgJ0NMRUFSJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgIGlzQ2xlYXJlZDogdHJ1ZSxcbiAgICAgICAgc3VnZ2VzdGlvbnM6IFtdLFxuICAgICAgfTtcbiAgICBjYXNlICdJTlBVVF9CTFVSJzoge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHZhbHVlOiBhY3Rpb24udmFsdWUgfHwgc3RhdGUudmFsdWUsXG4gICAgICAgIGlzQ2xlYXJlZDogYWN0aW9uLmlzTW9iaWxlID8gZmFsc2UgOiBzdGF0ZS5pc0NsZWFyZWQsXG4gICAgICAgIHBlbmRpbmdTZWxlY3Rpb246IG51bGwsXG4gICAgICAgIHNob3dPd25QbGFjZXM6IGZhbHNlLFxuICAgICAgfTtcbiAgICB9XG4gICAgY2FzZSAnUkVTRVQnOiB7XG4gICAgICByZXR1cm4gYWN0aW9uLmluaXRpYWxTdGF0ZTtcbiAgICB9XG4gICAgY2FzZSAnUEVORElOR19FTlRFUic6IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBlbnRlclBlbmRpbmc6IGFjdGlvbi5lbnRlclBlbmRpbmcsXG4gICAgICB9O1xuICAgIH1cbiAgICBjYXNlICdUT0dHTEVfTUVOVSc6IHtcbiAgICAgIGlmIChhY3Rpb24uaXNNb2JpbGUpIHtcbiAgICAgICAgaWYgKCFzdGF0ZS5yZW5kZXJNb2JpbGUpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICByZW5kZXJNb2JpbGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogc3RhdGUuaXNDbGVhcmVkID8gJycgOiBzdGF0ZS52YWx1ZSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcmVuZGVyTW9iaWxlOiBmYWxzZSxcbiAgICAgICAgICBpc0NsZWFyZWQ6IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGlzTWVudU9wZW46ICFzdGF0ZS5pc01lbnVPcGVuLFxuICAgICAgICByZW5kZXJNb2JpbGU6IGFjdGlvbi5pc01vYmlsZSAmJiAhc3RhdGUucmVuZGVyTW9iaWxlLFxuICAgICAgfTtcbiAgICB9XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufTtcbiIsIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyAqL1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCwge1xuICB1c2VFZmZlY3QsXG4gIHVzZUNhbGxiYWNrLFxuICB1c2VNZW1vLFxuICB1c2VSZWYsXG4gIHVzZVJlZHVjZXIsXG59IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEkxOG5leHRQcm92aWRlciwgdXNlVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0JztcbmltcG9ydCBjeCBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGV4ZWN1dGVTZWFyY2ggfSBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZXhlY3V0ZS1zZWFyY2gtaW1taWRpYXRlJztcbmltcG9ydCB7IHVzZUNvbWJvYm94IH0gZnJvbSAnZG93bnNoaWZ0JztcbmltcG9ydCBJY29uLCB7XG4gIGRlZmF1bHRDb2xvcnMsXG59IGZyb20gJ0BkaWdpdHJhbnNpdC1jb21wb25lbnQvZGlnaXRyYW5zaXQtY29tcG9uZW50LWljb24nO1xuaW1wb3J0IGkxOG4gZnJvbSAnLi91dGlscy9pMThuJztcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9jb21wb25lbnRzL3N0eWxlcy5zY3NzJztcbmltcG9ydCB7IGdldFN1Z2dlc3Rpb25WYWx1ZSwgc3VnZ2VzdGlvbkFzQXJpYUNvbnRlbnQgfSBmcm9tICcuL3V0aWxzL3V0aWxzJztcbmltcG9ydCBNb2JpbGVWaWV3IGZyb20gJy4vY29tcG9uZW50cy9Nb2JpbGVWaWV3JztcbmltcG9ydCB7IElucHV0IH0gZnJvbSAnLi9jb21wb25lbnRzL0lucHV0JztcbmltcG9ydCB7IFN1Z2dlc3Rpb25zIH0gZnJvbSAnLi9jb21wb25lbnRzL1N1Z2dlc3Rpb25zJztcbmltcG9ydCB7IHNlYXJjaFJlZHVjZXIgfSBmcm9tICcuL3V0aWxzL3NlYXJjaFJlZHVjZXInO1xuXG5jb25zdCBnZXRBcmlhUHJvcHMgPSAoe1xuICBpZCxcbiAgYXJpYUxhYmVsLFxuICBsbmcsXG4gIHQsXG4gIGlzTW9iaWxlLFxuICBzdWdnZXN0aW9ucyxcbiAgdmFsdWUsXG4gIHJlcXVpcmVkLFxufSkgPT4ge1xuICBjb25zdCBhcmlhQmFySWQgPSBpZC5yZXBsYWNlKCdzZWFyY2hmaWVsZC0nLCAnJyk7XG4gIGNvbnN0IFNlYXJjaEJhcklkID1cbiAgICBhcmlhTGFiZWwgfHwgdChhcmlhQmFySWQsIHsgbG5nIH0pLnJlcGxhY2UoJ3NlYXJjaGZpZWxkLScsICcnKS5jb25jYXQoJy4nKTsgLy8gRnVsbCBzdG9wIG1ha2VzIHNjcmVlbiByZWFkZXIgc3BlZWNoIGNsZWFyZXIuXG4gIGNvbnN0IGFyaWFSZXF1aXJlZFRleHQgPSByZXF1aXJlZCA/IGAke3QoJ3JlcXVpcmVkJywgeyBsbmcgfSl9LmAgOiAnJztcbiAgY29uc3QgYXJpYUxhYmVsSW5zdHJ1Y3Rpb25zID0gaXNNb2JpbGVcbiAgICA/IHQoJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtbW9iaWxlJywgeyBsbmcgfSlcbiAgICA6IHQoJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtZGVza3RvcCcsIHsgbG5nIH0pO1xuICBjb25zdCBtb3ZpbmdUb0Rlc3RpbmF0aW9uRmllbGRUZXh0ID1cbiAgICBpZCA9PT0gJ29yaWdpbidcbiAgICAgID8gdCgnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLW1vdmUtdG8tZGVzdGluYXRpb24nLCB7IGxuZyB9KVxuICAgICAgOiAnJztcbiAgY29uc3QgYXJpYUxhYmVsVGV4dCA9IGFyaWFMYWJlbEluc3RydWN0aW9uc1xuICAgIC5jb25jYXQoJyAnKVxuICAgIC5jb25jYXQobW92aW5nVG9EZXN0aW5hdGlvbkZpZWxkVGV4dCk7XG5cbiAgY29uc3QgYXJpYVN1Z2dlc3Rpb25MZW4gPSB0KCdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuJywge1xuICAgIGNvdW50OiBzdWdnZXN0aW9ucy5sZW5ndGgsXG4gICAgbG5nLFxuICB9KTtcblxuICBjb25zdCBhcmlhQ3VycmVudFN1Z2dlc3Rpb24gPVxuICAgIHN1Z2dlc3Rpb25Bc0FyaWFDb250ZW50KHsgc3VnZ2VzdGlvbnMsIHQsIGxuZyB9KSB8fCB2YWx1ZVxuICAgICAgPyB0KCdzZWFyY2gtY3VycmVudC1zdWdnZXN0aW9uJywge1xuICAgICAgICAgIGxuZyxcbiAgICAgICAgICBzZWxlY3Rpb246XG4gICAgICAgICAgICBzdWdnZXN0aW9uQXNBcmlhQ29udGVudCh7IHN1Z2dlc3Rpb25zLCB0LCBsbmcgfSkudG9Mb3dlckNhc2UoKSB8fFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgIH0pXG4gICAgICA6ICcnO1xuXG4gIHJldHVybiB7XG4gICAgU2VhcmNoQmFySWQsXG4gICAgYXJpYVJlcXVpcmVkVGV4dCxcbiAgICBhcmlhTGFiZWxUZXh0LFxuICAgIGFyaWFTdWdnZXN0aW9uTGVuLFxuICAgIGFyaWFDdXJyZW50U3VnZ2VzdGlvbixcbiAgfTtcbn07XG5cbmNvbnN0IHBvc2l0aW9ucyA9IFtcbiAgJ1ZhbGl0dHUgc2lqYWludGknLFxuICAnTnlreWluZW4gc2lqYWludGlzaScsXG4gICdDdXJyZW50IHBvc2l0aW9uJyxcbiAgJ1NlbGVjdGVkIGxvY2F0aW9uJyxcbiAgJ1ZhbGQgcG9zaXRpb24nLFxuICAnQW52w6RuZCBtaW4gcG9zaXRpb24nLFxuICAnTWluIHBvc2l0aW9uJyxcbiAgJ0vDpHl0w6QgbnlreWlzdMOkIHNpamFpbnRpYScsXG4gICdVc2UgY3VycmVudCBsb2NhdGlvbicsXG4gICdZb3VyIGN1cnJlbnQgbG9jYXRpb24nLFxuICAnV3licmFuZSBtaWVqc2NlJyxcbl07XG5cbi8qKlxuICogVGFrZXMgdGhlIHRhcmdldHMgYW5kIG1vZGlmaWVzIHRoZW0gYmFzZWQgb24gb3duUGxhY2VzIGFuZCBpc0xvY2F0aW9uU2VhcmNoXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHNcbiAqIEBwYXJhbSB7c3RyaW5nW119IHByb3BzLnRhcmdldHNcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gcHJvcHMuaXNMb2NhdGlvblNlYXJjaFxuICogQHBhcmFtIHtib29sZWFufSBwcm9wcy5pc01vYmlsZVxuICogQHBhcmFtIHtib29sZWFufSBwcm9wcy5vd25QbGFjZXNcbiAqIEBwYXJhbSB7c3RyaW5nW119IHByb3BzLnNvdXJjZXNcbiAqIEByZXR1cm5zIHtzdHJpbmdbXX0gbmV3VGFyZ2V0c1xuICovXG5jb25zdCBnZXROZXdUYXJnZXRzID0gKHtcbiAgdGFyZ2V0cyxcbiAgaXNMb2NhdGlvblNlYXJjaCxcbiAgaXNNb2JpbGUsXG4gIG93blBsYWNlcyxcbiAgc291cmNlcyxcbn0pID0+IHtcbiAgY29uc3QgdXNlQWxsID0gIXRhcmdldHM/Lmxlbmd0aDtcbiAgbGV0IG5ld1RhcmdldHM7XG4gIGlmIChvd25QbGFjZXMpIHtcbiAgICBuZXdUYXJnZXRzID0gWydMb2NhdGlvbnMnXTtcbiAgICBpZiAodXNlQWxsIHx8IHRhcmdldHMuaW5jbHVkZXMoJ1N0b3BzJykpIHtcbiAgICAgIG5ld1RhcmdldHMucHVzaCgnU3RvcHMnKTtcbiAgICB9XG4gICAgaWYgKHVzZUFsbCB8fCB0YXJnZXRzLmluY2x1ZGVzKCdTdGF0aW9ucycpKSB7XG4gICAgICBuZXdUYXJnZXRzLnB1c2goJ1N0YXRpb25zJyk7XG4gICAgfVxuICAgIGlmICh1c2VBbGwgfHwgdGFyZ2V0cy5pbmNsdWRlcygnVmVoaWNsZVJlbnRhbFN0YXRpb25zJykpIHtcbiAgICAgIG5ld1RhcmdldHMucHVzaCgnVmVoaWNsZVJlbnRhbFN0YXRpb25zJyk7XG4gICAgfVxuICB9IGVsc2UgaWYgKCF1c2VBbGwpIHtcbiAgICBuZXdUYXJnZXRzID0gWy4uLnRhcmdldHNdO1xuICAgIC8vIGluIGRlc2t0b3AsIGZhdm9yaXRlcyBhcmUgYWNjZXNzZWQgdmlhIHN1YiBzZWFyY2hcbiAgICBpZiAoXG4gICAgICBpc0xvY2F0aW9uU2VhcmNoICYmXG4gICAgICAhaXNNb2JpbGUgJiZcbiAgICAgICghc291cmNlcy5sZW5ndGggfHwgc291cmNlcy5pbmNsdWRlcygnRmF2b3VyaXRlJykpXG4gICAgKSB7XG4gICAgICBuZXdUYXJnZXRzLnB1c2goJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5ld1RhcmdldHM7XG59O1xuXG4vKipcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBzZWFyY2hDb250ZXh0ID0ge1xuICogICBpc1BlbGlhc0xvY2F0aW9uQXdhcmU6IGZhbHNlIC8vIHRydWUgLyBmYWxzZSBkb2VzIExldCBQZWxpYXMgc3VnZ2VzdCBiYXNlZCBvbiBjdXJyZW50IHVzZXIgbG9jYXRpb25cbiAqICAgbWluaW1hbFJlZ2V4cDogdW5kZWZpbmVkIC8vIHVzZWQgZm9yIHRlc3RpbmcgbWluLiByZWdleHAuIEZvciBleGFtcGxlOiBuZXcgUmVnRXhwKCcuezIsfScpLFxuICogICBsaW5lUmVnZXhwOiB1bmRlZmluZWQgLy8gIGlkZW50aWZ5IHNlYXJjaGVzIGZvciByb3V0ZSBudW1iZXJzL2xhYmVsczogYnVzIHwgdHJhaW4gfCBtZXRyby4gRm9yIGV4YW1wbGU6IG5ldyBSZWdFeHAoXG4gKiAgICAvLyAgICcoXlswLTldK1thLXpdPyR8Xlt5dWxlYXBpbmtydGR6XSR8KF5tWzEyXT9iPyQpKScsXG4gKiAgICAvLyAgJ2knLFxuICogICAgLy8gICksXG4gKiAgIFVSTF9QRUxJQVM6ICcnIC8vIHVybCBmb3IgcGVsaWFzIHNlYXJjaGVzXG4gKiAgIGZlZWRJRHM6IFsnSFNMJywgJ0hTTExhdXR0YSddIC8vIEZlZWRJZCdzIGxpa2UgIFtIU0wsIEhTTExhdXR0YV1cbiAqICAgZ2VvY29kaW5nU291cmNlczogWydvYScsJ29zbScsJ25sc2ZpJ10gIC8vIHNvdXJjZXMgZm9yIGdlb2NvZGluZ1xuICogICBnZW9jb2RpbmdTZWFyY2hQYXJhbXM7IHt9ICAvLyBTZWFyY2hwYXJtYXMgZnJvIGdlb2NvZGluZ1xuICogICBnZXRGYXZvdXJpdGVMb2NhdGlvbnM6ICgpID0+ICh7fSksICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhcnJheSBvZiBmYXZvdXJpdGUgbG9jYXRpb25zLlxuICogICBnZXRGYXZvdXJpdGVTdG9wczogKCkgPT4gKHt9KSwgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhcnJheSBvZiBmYXZvdXJpdGUgc3RvcHMuXG4gKiAgIGdldExhbmd1YWdlOiAoKSA9PiAoe30pLCAgICAgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIGN1cnJlbnQgbGFuZ3VhZ2UuXG4gKiAgIGdldEZhdm91cml0ZVJvdXRlczogKCkgPT4gKHt9KSwgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIGFycmF5IG9mIGZhdm91cml0ZSByb3V0ZXMuXG4gKiAgIGdldFBvc2l0aW9uczogKCkgPT4gKHt9KSwgICAgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIHVzZXIncyBnZW9sb2NhdGlvbi5cbiAqICAgZ2V0Um91dGVzUXVlcnk6ICgpID0+ICh7fSksICAgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgcXVlcnkgZm9yIGZldGNoaW5nIHJvdXRlcy5cbiAqICAgZ2V0U3RvcEFuZFN0YXRpb25zUXVlcnk6ICgpID0+ICh7fSksICAvLyBGdW5jdGlvbiB0aGF0IGZldGNoZXMgZmF2b3VyaXRlIHN0b3BzIGFuZCBzdGF0aW9ucyBmcm9tIGdyYXBocWwgQVBJLlxuICogICBnZXRGYXZvdXJpdGVSb3V0ZXNRdWVyeTogKCkgPT4gKHt9KSwgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBxdWVyeSBmb3IgZmV0Y2hpbmcgZmF2b3VyaXRlIHJvdXRlcy5cbiAqICAgZ2V0RmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zOiAoKSA9PiAoe30pLCAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIGZhdm91cml0ZSBiaWtlIHJlbnRhbCBzdGF0aW9uLlxuICogICBnZXRGYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnNRdWVyeTogKCkgPT4gKHt9KSwgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIHF1ZXJ5IGZvciBmZXRjaGluZyBmYXZvdXJpdGUgYmlrZSByZW50YWwgc3RhdGlvbnMuXG4gKiAgIHN0YXJ0TG9jYXRpb25XYXRjaDogKCkgPT4gKHt9KSwgICAgICAgLy8gRnVuY3Rpb24gdGhhdCBsb2NhdGVzIHVzZXJzIGdlb2xvY2F0aW9uLlxuICogICBzYXZlU2VhcmNoOiAoKSA9PiAoe30pLCAgICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgc2F2ZXMgc2VhcmNoIHRvIG9sZCBzZWFyY2hlcyBzdG9yZS5cbiAqICAgY2xlYXJPbGRTZWFyY2hlczogKCkgPT4gKHt9KSwgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IGNsZWFycyBvbGQgc2VhcmNoZXMgc3RvcmUuXG4gKiAgIGdldEZ1dHVyZVJvdXRlczogKCkgPT4gKHt9KSwgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm4gZnV0dXJlIHJvdXRlc1xuICogICBzYXZlRnV0dXJlUm91dGU6ICgpID0+ICh7fSksICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgc2F2ZXMgYSBmdXR1cmUgcm91dGVcbiAqICAgY2xlYXJGdXR1cmVSb3V0ZXM6ICgpID0+ICh7fSksICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IGNsZWFycyBmdXR1cmUgcm91dGVzXG4gKiB9O1xuICogY29uc3QgbGFuZyA9ICdmaSc7IC8vIGVuLCBmaSBvciBzdlxuICogY29uc3Qgb25TZWxlY3QgPSAoaXRlbSwgaWQpID0+IHtcbiAqICAgIC8vIEZ1bnRpb25hbGl0eSB3aGVuIHVzZXIgc2VsZWN0cyBhIHN1Z2dlc2lvbnMuIE5vIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gaXMgZ2l2ZW4uXG4gKiAgICByZXR1cm4gbnVsbDtcbiAqIH07XG4gKiBjb25zdCBvbkNsZWFyID0gaWQgPT4ge1xuICogICAgLy8gQ2FsbGVkICB3aGVuIHVzZXIgY2xpY2tzIHRoZSBjbGVhciBzZWFyY2ggc3RyaW5nIGJ1dHRvbi4gTm8gZGVmYXVsdCBpbXBsZW1lbnRhdGlvbi5cbiAqICAgIHJldHVybiBudWxsO1xuICogfTtcbiAqIGNvbnN0IGdldEF1dG9TdWdnZXN0SWNvbnM6IHtcbiAqICAgLy8gQ2FsbGVkIGZvciBldmVyeSBjaXR5IGJpa2Ugc3RhdGlvbiByZW5kZXJlZCBhcyBhIHNlYXJjaCBzdWdnZXN0aW9uLiBTaG91bGQgcmV0dXJuIHRoZSBpY29uIGFuZFxuICogICAvLyBjb2xvciB1c2VkIGZvciB0aGF0IHN0YXRpb24uIFR3byBpY29ucyBhcmUgYXZhaWxhYmxlLCAnY2l0eWJpa2Utc3RvcC1kaWdpdHJhbnNpdCcgYW5kaXR5YmlrZS1zdG9wLWRpZ2l0cmFuc2l0LXNlY29uZGFyeScuXG4gKiAgIGNpdHliaWtlczogc3RhdGlvbiA9PiB7XG4gKiAgICAgIHJldHVybiBbJ2NpdHliaWtlLXN0b3AtZGlnaXRyYW5zaXQnLCAnI2YyYjYyZCddO1xuICogICB9XG4gKiB9XG4gKiBjb25zdCB0cmFuc3BvcnRNb2RlID0gdW5kZWZpbmVkO1xuICogY29uc3QgcGxhY2Vob2xkZXIgPSBcInN0b3AtbmVhci15b3VcIjtcbiAqIGNvbnN0IHRhcmdldHMgPSBbJ0xvY2F0aW9ucycsICdTdG9wcycsICdSb3V0ZXMnXTsgLy8gRGVmaW5lcyB3aGF0IHlvdSBhcmUgc2VhcmNoaW5nLiBPcHRpb25zIGFyZSBMb2NhdGlvbnMsIFN0b3BzLCBTdGF0aW9ucywgUm91dGVzLCBWZWhpY2xlUmVudGFsU3RhdGlvbnMsIEZ1dHVyZVJvdXRlcywgTWFwUG9zaXRpb24gYW5kIEN1cnJlbnRQb3NpdGlvbi4gTGVhdmUgZW1wdHkgdG8gc2VhcmNoIGFsbCB0YXJnZXRzLlxuICogY29uc3Qgc291cmNlcyA9IFsnRmF2b3VyaXRlJywgJ0hpc3RvcnknLCAnRGF0YXNvdXJjZSddIC8vIERlZmluZXMgd2hlcmUgeW91IGFyZSBzZWFyY2hpbmcuIGFsbCBhdmFpbGFibGUgYXJlOiBGYXZvdXJpdGUsIEhpc3RvcnkgKHByZXZpb3VzbHkgc2VhcmNoZWQgc2VhcmNoZXMpIGFuZCBEYXRhc291cmNlLiBMZWF2ZSBlbXB0eSB0byB1c2UgYWxsIHNvdXJjZXMuXG4gKiByZXR1cm4gKFxuICogIDxEVEF1dG9zdWdnZXN0XG4gKiAgICBhcHBFbGVtZW50PXthcHBFbGVtZW50fSAvLyBSZXF1aXJlZC4gUm9vdCBlbGVtZW50J3MgaWQuIE5lZWRlZCBmb3IgcmVhY3QtbW9kYWwgY29tcG9uZW50LlxuICogICAgc2VhcmNoQ29udGV4dD17c2VhcmNoQ29udGV4dH1cbiAqICAgIGljb249XCJvcmlnaW5cIiAvLyBPcHRpb25hbCBTdHJpbmcgZm9yIGljb24gdGhhdCBpcyBzaG93biBsZWZ0IG9mIHNlYXJjaGZpZWxkLiB1c2VkIHdpdGggSWNvbiBsaWJyYXJ5XG4gKiAgICBpZD1cIm9yaWdpblwiIC8vIHVzZWQgZm9yIHN0eWxlIHByb3BzIGFuZCBpbmZvIGZvciBjb21wb25lbnQuXG4gKiAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9IC8vIFN0cmluZyB0aGF0IGlzIHNob3ducyBpbml0YWxseSBpbiBzZWFyY2ggZmllbGRcbiAqICAgIHZhbHVlPVwiXCIgLy8gZS5nLiB1c2VyIHR5cGVkIHN0cmluZyB0aGF0IGlzIHNob3duIGluIHNlYXJjaCBmaWVsZFxuICogICAgb25TZWxlY3Q9e29uU2VsZWN0fVxuICogICAgb25DbGVhcj17b25DbGVhcn1cbiAqICAgIGxhbmc9e2xhbmd9XG4gKiAgICBnZXRBdXRvU3VnZ2VzdEljb25zPXtnZXRBdXRvU3VnZ2VzdEljb25zfVxuICogICAgdHJhbnNwb3J0TW9kZT17dHJhbnNwb3J0TW9kZX0gLy8gdHJhbnNwb3J0bW9kZSB3aXRoIHdoaWNoIHdlIGZpbHRlciB0aGUgcm91dGVzLCBlLmcuIHJvdXRlLUJVU1xuICogICAgZ2VvY29kaW5nU2l6ZT17MTB9IC8vIGRlZmluZXMgaG93IG1hbnkgc3RvcHMgYW5kIHN0YXRpb25zIHRvIGZldGNoIGZyb20gZ2VvY29kaW5nLiBVc2VmdWwgaWYgeW91IHdhbnQgdG8gZmlsdGVyIHRoZSByZXN1bHRzIGFuZCBzdGlsbCBnZXQgYSByZWFzb25hYmxlIGFtb3VudCBvZiBzdWdnZXN0aW9ucy5cbiAqICAgIGZpbHRlclJlc3VsdHM9e3Jlc3VsdHMgPT4gcmV0dXJuIHJlc3VsdHN9IC8vIE9wdGlvbmFsIGZpbHRlcmluZyBmdW5jdGlvbiBmb3Igcm91dGVzIGFuZCBzdG9wc1xuICogICAgaGFuZGVsVmlhUG9pbnRzPXsoKSA9PiByZXR1cm4gbnVsbCB9IC8vIE9wdGlvbmFsIFZpYSBwb2ludCBoYW5kbGluZyBsb2dpYy4gVGhpcyBpcyBjdXJyZW50bHkgbWFuYWdlZCB3aXRoIERUQXV0b3N1Z2dlc3RwYW5lbCBieSBkZWZhdWx0LCBidXQgaWYgRFRBdXRvc3VnZ2VzdCBpcyB1c2VkIHNlcGVyYXRlbGx5IG93biBpbXBsZW1lbnRhdGlvbiBtdXN0IGJlIHByb3ZpZGVkLlxuICogICAgZm9jdXNDaGFuZ2U9eygpID0+IHJldHVybiBudWxsfSAvLyBXaGVuIHN1Z2dlc3Rpb24gaXMgc2VsZWN0ZWQsIGhhbmRsZSBjaGFuZ2luZyBmb2N1cy4gVGhpcyBpcyBjdXJyZW50bHkgbWFuYWdlZCB3aXRoIERUQXV0b3N1Z2dlc3RwYW5lbCBieSBkZWZhdWx0LCBidXQgaWYgRFRBdXRvc3VnZ2VzdCBpcyB1c2VkIHNlcGVyYXRlbGx5IG93biBpbXBsZW1lbnRhdGlvbiBtdXN0IGJlIHByb3ZpZGVkLlxuICogICAgc3RvcmVSZWY9eygpID0+IHJldHVybiBudWxsfSAvLyBGdW5jdGlvbmFsaXR5IHRvIHN0b3JlIHJlZnMuIEN1cnJlbmx0eSBtYW5hZ2VkIHdpdGggRFRBdXRvc3VnZ2VzdHBhbmVsIGJ5IGRlZmF1bHQsIGJ1dCBpZiBEVEF1dG9zdWdnZXN0IGlzIHVzZWQgc2VwZXJhdGVsbHkgb3duIGltcGxlbWVudGF0aW9uIG11c3QgYmUgcHJvdmlkZWQuXG4gKiAgICBzb3VyY2VzPXtzb3VyY2VzfVxuICogICAgdGFyZ2V0cz17dGFyZ2V0c31cbiAqICAgIGlzTW9iaWxlICAvLyBPcHRpb25hbC4gRGVmYXVsdHMgdG8gZmFsc2UuIFdoZXRoZXIgdG8gdXNlIG1vYmlsZSBzZWFyY2guXG4gKiAgICBtb2JpbGVMYWJlbD1cIkN1c3RvbSBsYWJlbFwiIC8vIE9wdGlvbmFsLiBDdXN0b20gbGFiZWwgdGV4dCBmb3IgYXV0b3N1Z2dlc3QgZmllbGQgb24gbW9iaWxlLlxuICogICAgaW5wdXRDbGFzc05hbWU9XCJcIiAvLyBPcHRpb25hbC4gQ3VzdG9tIGNsYXNzbmFtZSBhcHBsaWVkIHRvIHRoZSBpbnB1dCBlbGVtZW50IG9mIHRoZSBjb21wb25lbnQgZm9yIHByb3ZpZGluZyBDU1Mgc3R5bGVzLlxuICogICAgdHJhbnNsYXRlZFBsYWNlaG9sZGVyPSAvLyBPcHRpb25hbC4gQ3VzdG9uIHRyYW5zbGF0ZWQgcGxhY2Vob2xkZXIgdGV4dCBmb3IgYXV0b3N1Z2dlc3QgZmllbGQuXG4gKlxuICogQHR5cGVkZWYgRFRBdXRvc3VnZ2VzdFByb3BzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYXBwRWxlbWVudFxuICogQHByb3BlcnR5IHtzdHJpbmd9IGlkXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcGxhY2Vob2xkZXJcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IG9uU2VsZWN0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2ljb25dXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3ZhbHVlXVxuICogQHByb3BlcnR5IHtmdW5jdGlvbn0gW29uQ2xlYXJdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2xhbmddXG4gKiBAcHJvcGVydHkge09iamVjdH0gW2dldEF1dG9TdWdnZXN0SWNvbnNdXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9ufSBbaGFuZGxlVmlhUG9pbnRzXVxuICogQHByb3BlcnR5IHtmdW5jdGlvbn0gW2ZvY3VzQ2hhbmdlXVxuICogQHByb3BlcnR5IHtmdW5jdGlvbn0gW3N0b3JlUmVmXVxuICogQHByb3BlcnR5IHtib29sZWFufSBbaXNNb2JpbGVdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW21vYmlsZUxhYmVsXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtpbnB1dENsYXNzTmFtZV1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbdHJhbnNsYXRlZFBsYWNlaG9sZGVyXVxuICogQHByb3BlcnR5IHtib29sZWFufSBbcmVxdWlyZWRdXG4gKiBAcHJvcGVydHkge09iamVjdH0gW2ZvbnRXZWlnaHRzXVxuICogQHByb3BlcnR5IHtPYmplY3R9IFtjb2xvcnNdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW21vZGVTZXRdXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtzaG93U2Nyb2xsXVxuICogQHByb3BlcnR5IHtib29sZWFufSBbaXNFbWJlZGRlZF1cbiAqIEdlb2NvZGluZyByZWxhdGVkIHByb3BzXG4gKiBAcHJvcGVydHkge09iamVjdH0gc2VhcmNoQ29udGV4dFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFt0cmFuc3BvcnRNb2RlXVxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gW3RhcmdldHNdXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbc291cmNlc11cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbZ2VvY29kaW5nU2l6ZV1cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IFtmaWx0ZXJSZXN1bHRzXVxuICogQHByb3BlcnR5IHtPYmplY3R9IFtwYXRoT3B0c11cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbcmVmUG9pbnRdXG4gKiBAcGFyYW0ge0RUQXV0b3N1Z2dlc3RQcm9wc30gcHJvcHNcbiAqIEByZXR1cm5zIHtKU1guRWxlbWVudH1cbiAqL1xuZnVuY3Rpb24gRFRBdXRvc3VnZ2VzdCh7XG4gIGFwcEVsZW1lbnQsXG4gIGlkLFxuICBwbGFjZWhvbGRlcixcbiAgb25TZWxlY3QsXG4gIGljb24sXG4gIHZhbHVlLFxuICBvbkNsZWFyLFxuICBsYW5nOiBsbmcsXG4gIGdldEF1dG9TdWdnZXN0SWNvbnMsXG4gIGhhbmRsZVZpYVBvaW50cyxcbiAgZm9jdXNDaGFuZ2UsXG4gIHN0b3JlUmVmLFxuICBpc01vYmlsZSxcbiAgbW9iaWxlTGFiZWwsXG4gIGlucHV0Q2xhc3NOYW1lLFxuICB0cmFuc2xhdGVkUGxhY2Vob2xkZXIsXG4gIHJlcXVpcmVkLFxuICBhcmlhTGFiZWwsXG4gIGZvbnRXZWlnaHRzLFxuICBjb2xvcnMsXG4gIG1vZGVTZXQsXG4gIHNob3dTY3JvbGwsXG4gIGlzRW1iZWRkZWQsXG4gIHRyYW5zcG9ydE1vZGUsXG4gIHRhcmdldHMsXG4gIHNvdXJjZXMsXG4gIGdlb2NvZGluZ1NpemUsXG4gIGZpbHRlclJlc3VsdHMsXG4gIHNlYXJjaENvbnRleHQsXG4gIHBhdGhPcHRzLFxuICByZWZQb2ludCxcbn0pIHtcbiAgY29uc3QgW3RdID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgY29uc3QgaW5pdGlhbFN0YXRlID0ge1xuICAgIHN1Z2dlc3Rpb25zOiBbXSxcbiAgICBsb2FkaW5nOiBmYWxzZSxcbiAgICBzb3VyY2VzLFxuICAgIHNob3dPd25QbGFjZXM6IGZhbHNlLFxuICAgIHBlbmRpbmdTZWxlY3Rpb246IG51bGwsXG4gICAgaXNDbGVhcmVkOiBmYWxzZSxcbiAgICByZW5kZXJNb2JpbGU6IGZhbHNlLFxuICAgIHZhbHVlLFxuICAgIGVudGVyUGVuZGluZzogZmFsc2UsXG4gICAgaXNNZW51T3BlbjogZmFsc2UsXG4gIH07XG4gIGNvbnN0IFtzdGF0ZSwgZGlzcGF0Y2hdID0gdXNlUmVkdWNlcihzZWFyY2hSZWR1Y2VyLCBpbml0aWFsU3RhdGUpO1xuICAvLyBSZXNldCB0aGUgc3RhdGUgd2hlbiB2YWx1ZSBvciBzb3VyY2VzIGNoYW5nZSwgdGhpcyBhbHNvIHRyaWdnZXJzIGEgbmV3IHNlYXJjaFxuICB1c2VFZmZlY3QoKCkgPT4gZGlzcGF0Y2goeyB0eXBlOiAnUkVTRVQnLCBpbml0aWFsU3RhdGUgfSksIFt2YWx1ZV0pO1xuICB1c2VFZmZlY3QoKCkgPT4gZGlzcGF0Y2goeyB0eXBlOiAnUkVTRVRfU09VUkNFUycsIHNvdXJjZXMgfSksIFtzb3VyY2VzXSk7XG4gIC8vIGNyZWF0ZSBhbmQgc3RvcmUgaW5wdXQgcmVmIGluIHRoZSBwYXJlbnQgaWYgc3RvcmVSZWYgaXMgcHJvdmlkZWRcbiAgY29uc3QgaW5wdXRSZWYgPSB1c2VSZWYoaWQpO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzdG9yZVJlZikge1xuICAgICAgc3RvcmVSZWYoaW5wdXRSZWYuY3VycmVudCk7XG4gICAgfVxuICB9LCBbaW5wdXRSZWYuY3VycmVudF0pO1xuXG4gIGNvbnN0IGZldGNoU3VnZ2VzdGlvbnMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgdXNlQWxsID0gIXRhcmdldHM/Lmxlbmd0aDtcbiAgICBjb25zdCBpc0xvY2F0aW9uU2VhcmNoID0gdXNlQWxsIHx8IHRhcmdldHMuaW5jbHVkZXMoJ0xvY2F0aW9ucycpO1xuXG4gICAgY29uc3QgbmV3VGFyZ2V0cyA9IGdldE5ld1RhcmdldHMoe1xuICAgICAgdGFyZ2V0cyxcbiAgICAgIGlzTG9jYXRpb25TZWFyY2gsXG4gICAgICBpc01vYmlsZSxcbiAgICAgIG93blBsYWNlczogc3RhdGUuc2hvd093blBsYWNlcyxcbiAgICAgIHNvdXJjZXM6IHN0YXRlLnNvdXJjZXMsXG4gICAgfSk7XG4gICAgLy8gcmVtb3ZlICBsb2NhdGlvbiBmYXZvdXJpdGVzIGluIGRlc2t0b3Agc2VhcmNoIChjb2xsZWN0aW9uIGl0ZW0gcmVwbGFjZXMgaXQgaW4gdGFyZ2V0IGFycmF5KVxuICAgIGNvbnN0IG5ld1NvdXJjZXMgPSBzdGF0ZS5zb3VyY2VzXG4gICAgICA/IHN0YXRlLnNvdXJjZXMuZmlsdGVyKFxuICAgICAgICAgIHMgPT5cbiAgICAgICAgICAgICFpc0xvY2F0aW9uU2VhcmNoIHx8XG4gICAgICAgICAgICAhcyA9PT0gJ0Zhdm91cml0ZScgfHxcbiAgICAgICAgICAgIHN0YXRlLnNob3dPd25QbGFjZXMgfHxcbiAgICAgICAgICAgIGlzTW9iaWxlLFxuICAgICAgICApXG4gICAgICA6IHN0YXRlLnNvdXJjZXM7XG4gICAgZXhlY3V0ZVNlYXJjaChcbiAgICAgIG5ld1RhcmdldHMsXG4gICAgICBuZXdTb3VyY2VzLFxuICAgICAgdHJhbnNwb3J0TW9kZSxcbiAgICAgIHNlYXJjaENvbnRleHQsXG4gICAgICBmaWx0ZXJSZXN1bHRzLFxuICAgICAgZ2VvY29kaW5nU2l6ZSxcbiAgICAgIHtcbiAgICAgICAgaW5wdXQ6IHN0YXRlLnZhbHVlIHx8ICcnLFxuICAgICAgfSxcbiAgICAgIHNlYXJjaFJlc3VsdCA9PiB7XG4gICAgICAgIGlmIChzZWFyY2hSZXN1bHQgPT0gbnVsbCkge1xuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdGRVRDSF9TVUdHRVNUSU9OUycsXG4gICAgICAgICAgICBsb2FkaW5nOiB0cnVlLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5ld1N1Z2dlc3Rpb25zID0gKHNlYXJjaFJlc3VsdC5yZXN1bHRzIHx8IFtdKVxuICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICBzdWdnZXN0aW9uID0+XG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24udHlwZSAhPT0gJ0Z1dHVyZVJvdXRlJyB8fFxuICAgICAgICAgICAgICAoc3VnZ2VzdGlvbi50eXBlID09PSAnRnV0dXJlUm91dGUnICYmXG4gICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5wcm9wZXJ0aWVzLnRpbWUgPiBEYXRlLm5vdygpIC8gMTAwMCksXG4gICAgICAgICAgKVxuICAgICAgICAgIC5tYXAoc3VnZ2VzdGlvbiA9PiB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24udHlwZSA9PT0gJ0N1cnJlbnRMb2NhdGlvbicgfHxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi50eXBlID09PSAnU2VsZWN0RnJvbU1hcCcgfHxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi50eXBlID09PSAnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycgfHxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi50eXBlID09PSAnYmFjaydcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBjb25zdCB0cmFuc2xhdGVkU3VnZ2VzdGlvbiA9IHsgLi4uc3VnZ2VzdGlvbiB9O1xuICAgICAgICAgICAgICB0cmFuc2xhdGVkU3VnZ2VzdGlvbi5wcm9wZXJ0aWVzLmxhYmVsSWQgPSB0KFxuICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24ucHJvcGVydGllcy5sYWJlbElkLFxuICAgICAgICAgICAgICAgIHsgbG5nIH0sXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIHJldHVybiB0cmFuc2xhdGVkU3VnZ2VzdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzdWdnZXN0aW9uO1xuICAgICAgICAgIH0pO1xuICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogJ0ZFVENIX1NVR0dFU1RJT05TJyxcbiAgICAgICAgICBsb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICBzdWdnZXN0aW9uczogbmV3U3VnZ2VzdGlvbnMsXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIHBhdGhPcHRzLFxuICAgICAgcmVmUG9pbnQsXG4gICAgKTtcbiAgfSwgW1xuICAgIHN0YXRlLnZhbHVlLFxuICAgIHN0YXRlLnNvdXJjZXMsXG4gICAgc3RhdGUuc2hvd093blBsYWNlcyxcbiAgICB0YXJnZXRzLFxuICAgIHRyYW5zcG9ydE1vZGUsXG4gICAgc2VhcmNoQ29udGV4dCxcbiAgICBmaWx0ZXJSZXN1bHRzLFxuICAgIGdlb2NvZGluZ1NpemUsXG4gICAgaXNNb2JpbGUsXG4gICAgbG5nLFxuICAgIHBhdGhPcHRzLFxuICAgIHJlZlBvaW50LFxuICAgIGlkLFxuICBdKTtcblxuICBjb25zdCBzZWxlY3RTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soXG4gICAgKHN1Z2dlc3Rpb24sIGluZGV4KSA9PiB7XG4gICAgICBpZiAoIXN1Z2dlc3Rpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGhhbmRsZVZpYVBvaW50cykge1xuICAgICAgICBoYW5kbGVWaWFQb2ludHMoc3VnZ2VzdGlvbiwgaW5kZXgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb25TZWxlY3Qoc3VnZ2VzdGlvbiwgaWQpO1xuICAgICAgfVxuICAgICAgaWYgKGZvY3VzQ2hhbmdlICYmICghaXNNb2JpbGUgfHwgaXNFbWJlZGRlZCkpIHtcbiAgICAgICAgZm9jdXNDaGFuZ2UoKTtcbiAgICAgIH1cbiAgICAgIGlmIChpbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICAgIGlucHV0UmVmLmN1cnJlbnQuYmx1cigpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW2lzTW9iaWxlXSxcbiAgKTtcblxuICBjb25zdCBvblNlbGVjdGVkSXRlbUNoYW5nZSA9IGNoYW5nZXMgPT5cbiAgICBzZWxlY3RTdWdnZXN0aW9uKGNoYW5nZXMuc2VsZWN0ZWRJdGVtLCBjaGFuZ2VzLmhpZ2hsaWdodGVkSW5kZXgpO1xuXG4gIGNvbnN0IHtcbiAgICBpc09wZW4sXG4gICAgaGlnaGxpZ2h0ZWRJbmRleCxcbiAgICBnZXRMYWJlbFByb3BzLFxuICAgIGdldE1lbnVQcm9wcyxcbiAgICBnZXRJbnB1dFByb3BzLFxuICAgIGdldEl0ZW1Qcm9wcyxcbiAgICBzZWxlY3RJdGVtLFxuICAgIG9wZW5NZW51LFxuICAgIGNsb3NlTWVudSxcbiAgfSA9IHVzZUNvbWJvYm94KHtcbiAgICBpbnB1dElkOiBpZCxcbiAgICBpbnB1dFZhbHVlOiBzdGF0ZS52YWx1ZSxcbiAgICBkZWZhdWx0SGlnaGxpZ2h0ZWRJbmRleDogMCxcbiAgICAvLyBUeXBpbmcgaXMgZGlzcGF0Y2hlZCBzeW5jaHJvbm91c2x5IGJ5IElucHV0LiBEb3duc2hpZnQgcmVwb3J0cyBpdCBmcm9tIGFuXG4gICAgLy8gZWZmZWN0IGEgcmVuZGVyIGxhdGUsIHdoaWNoIHdvdWxkIG92ZXJ3cml0ZSBuZXdlciBrZXlzdHJva2VzLlxuICAgIG9uSW5wdXRWYWx1ZUNoYW5nZTogKHsgaW5wdXRWYWx1ZSwgdHlwZSB9KSA9PlxuICAgICAgdHlwZSAhPT0gdXNlQ29tYm9ib3guc3RhdGVDaGFuZ2VUeXBlcy5JbnB1dENoYW5nZSAmJlxuICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnSU5QVVRfQ0hBTkdFJywgdmFsdWU6IGlucHV0VmFsdWUgfSksXG4gICAgc3RhdGVSZWR1Y2VyOiB1c2VDYWxsYmFjayhcbiAgICAgIChvbGRTdGF0ZSwgeyB0eXBlLCBjaGFuZ2VzIH0pID0+IHtcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSB1c2VDb21ib2JveC5zdGF0ZUNoYW5nZVR5cGVzLkl0ZW1DbGljazpcbiAgICAgICAgICBjYXNlIHVzZUNvbWJvYm94LnN0YXRlQ2hhbmdlVHlwZXMuSW5wdXRLZXlEb3duRW50ZXI6IHtcbiAgICAgICAgICAgIC8vIHNldENsZWFyZWQoZmFsc2UpO1xuICAgICAgICAgICAgLy8ga2VlcCBlbnRlclByZXNzZWRSZWYgdG8gbWFrZSBzZWxlY3Rpb24gd2hlbiBzdWdnZXN0aW9ucyBoYXZlIGxvYWRlZFxuICAgICAgICAgICAgaWYgKHN0YXRlLmxvYWRpbmcpIHtcbiAgICAgICAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnUEVORElOR19FTlRFUicsIGVudGVyUGVuZGluZzogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgcmV0dXJuIG9sZFN0YXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFjaGFuZ2VzLnNlbGVjdGVkSXRlbSkge1xuICAgICAgICAgICAgICByZXR1cm4gY2hhbmdlcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjaGFuZ2VzLnNlbGVjdGVkSXRlbS50eXBlID09PSAnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycpIHtcbiAgICAgICAgICAgICAgLy8gaWYgc2VsZWN0aW5nIGZyb20gb3duIGxvY2F0aW9ucywga2VlcCBtZW51IG9wZW4gYW5kIGtlZXAgb2xkIHN0YXRlXG4gICAgICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnU0VUX1NPVVJDRVMnLFxuICAgICAgICAgICAgICAgIHNvdXJjZXM6IFsnRmF2b3VyaXRlJywgJ0JhY2snXSxcbiAgICAgICAgICAgICAgICBzaG93T3duUGxhY2VzOiB0cnVlLFxuICAgICAgICAgICAgICAgIHBlbmRpbmdTZWxlY3Rpb246IGNoYW5nZXMuc2VsZWN0ZWRJdGVtLnR5cGUsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICByZXR1cm4gb2xkU3RhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2hhbmdlcy5zZWxlY3RlZEl0ZW0udHlwZSA9PT0gJ2JhY2snKSB7XG4gICAgICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnU0VUX1NPVVJDRVMnLFxuICAgICAgICAgICAgICAgIHNvdXJjZXMsXG4gICAgICAgICAgICAgICAgc2hvd093blBsYWNlczogZmFsc2UsXG4gICAgICAgICAgICAgICAgcGVuZGluZ1NlbGVjdGlvbjogbnVsbCxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHJldHVybiBvbGRTdGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjaGFuZ2VzO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIHVzZUNvbWJvYm94LnN0YXRlQ2hhbmdlVHlwZXMuSW5wdXRDbGljazoge1xuICAgICAgICAgICAgLy8gY2xlYXIgaW5wdXQgaWYgY3VycmVudCBwb3NpdGlvbiBvciBzZWxlY3RlZCBsb2NhdGlvbiBpcyBzaG93blxuICAgICAgICAgICAgaWYgKHBvc2l0aW9ucy5pbmNsdWRlcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uY2hhbmdlcywgaW5wdXRWYWx1ZTogJycsIGlzT3BlbjogdHJ1ZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4uY2hhbmdlcyxcbiAgICAgICAgICAgICAgaXNPcGVuOiB0cnVlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSB1c2VDb21ib2JveC5zdGF0ZUNoYW5nZVR5cGVzLklucHV0Qmx1cjoge1xuICAgICAgICAgICAgaWYgKGNoYW5nZXMuc2VsZWN0ZWRJdGVtKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLi4uY2hhbmdlcyxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEl0ZW06IG9sZFN0YXRlLnNlbGVjdEl0ZW0sXG4gICAgICAgICAgICAgICAgaW5wdXRWYWx1ZTogb2xkU3RhdGUuaW5wdXRWYWx1ZSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjaGFuZ2VzO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIHVzZUNvbWJvYm94LnN0YXRlQ2hhbmdlVHlwZXMuSW5wdXRLZXlEb3duRXNjYXBlOiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5jaGFuZ2VzLFxuICAgICAgICAgICAgICBpbnB1dFZhbHVlOiAnJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIHJldHVybiBjaGFuZ2VzO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFtzdGF0ZS5sb2FkaW5nLCB2YWx1ZSwgaXNNb2JpbGVdLFxuICAgICksXG4gICAgaXRlbXM6IHN0YXRlLnN1Z2dlc3Rpb25zLFxuICAgIGl0ZW1Ub1N0cmluZyhzdWdnZXN0aW9uKSB7XG4gICAgICByZXR1cm4gc3VnZ2VzdGlvbiA/IGdldFN1Z2dlc3Rpb25WYWx1ZShzdWdnZXN0aW9uKSA6ICcnO1xuICAgIH0sXG4gICAgb25TZWxlY3RlZEl0ZW1DaGFuZ2UsXG4gICAgb25Jc09wZW5DaGFuZ2U6IGNoYW5nZXMgPT4ge1xuICAgICAgaWYgKGNoYW5nZXMuaXNPcGVuICYmICFzdGF0ZS5yZW5kZXJNb2JpbGUpIHtcbiAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnVE9HR0xFX01FTlUnLCBpc01vYmlsZSB9KTtcbiAgICAgIH1cbiAgICB9LFxuICB9KTtcbiAgY29uc3QgaW5wdXRPbkJsdXIgPSAoKSA9PiB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgaXNNb2JpbGUsXG4gICAgICB2YWx1ZTogIWlzTW9iaWxlICYmIHZhbHVlLFxuICAgICAgdHlwZTogJ0lOUFVUX0JMVVInLFxuICAgIH0pO1xuICAgIGlmICghaXNNb2JpbGUpIHtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogJ1JFU0VUJyxcbiAgICAgICAgaW5pdGlhbFN0YXRlLFxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGNsZWFySW5wdXQgPSByZWYgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ0NMRUFSJyB9KTtcbiAgICBpZiAob25DbGVhcikge1xuICAgICAgb25DbGVhcihpZCk7XG4gICAgfVxuICAgIGlmIChyZWYuY3VycmVudCkge1xuICAgICAgcmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICB9XG4gICAgb3Blbk1lbnUoKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVWYWx1ZUNoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgIG5ld1ZhbHVlID0+IGRpc3BhdGNoKHsgdHlwZTogJ0lOUFVUX0NIQU5HRScsIHZhbHVlOiBuZXdWYWx1ZSB9KSxcbiAgICBbXSxcbiAgKTtcblxuICAvLyBGZXRjaCBzdWdnZXN0aW9ucyB3aGVuIGlzT3BlbiwgdmFsdWUsIG9yIGZldGNoU3VnZ2VzdGlvbnMgZGVwZW5kZW5jaWVzIGNoYW5nZVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIERvbid0IHNlYXJjaCB3aGVuIHRoZSBzZWFyY2ggZmllbGQgKHN0YXRlLnZhbHVlKSBjb250YWlucyBwb3NpdGlvbiBzdHJpbmdzIHRoYXQgd2VyZSBnaXZlbiBhcyBhIHByb3AgKHZhbHVlKSxcbiAgICAvLyBiZWNhdXNlIHRoZXkgYXJlIFVJIGxhYmVscyBub3QgcmVhbCBzZWFyY2ggdGVybXMuIEZldGNoaW5nIHN1Z2dlc3Rpb25zIHdpdGggdGhlbSBjYXVzZWQgYSBxdWlja2x5IGZsYXNoaW5nIHNldCBvZlxuICAgIC8vIGlycmVsZXZhbnQgcmVzdWx0cywgZS5nLiAnS8OkeXTDpCBueWt5aXN0w6Qgc2lqYWludGlhJyAtPiAnQ2l0eS1rw6R5dMOkdsOkJy5cbiAgICBpZiAoXG4gICAgICAoaXNPcGVuIHx8IHN0YXRlLnJlbmRlck1vYmlsZSkgJiZcbiAgICAgICEoc3RhdGUudmFsdWUgPT09IHZhbHVlICYmIHBvc2l0aW9ucy5pbmNsdWRlcyh2YWx1ZSkpXG4gICAgKSB7XG4gICAgICBmZXRjaFN1Z2dlc3Rpb25zKHN0YXRlLnZhbHVlKTtcbiAgICB9XG4gIH0sIFtpc09wZW4sIHN0YXRlLnJlbmRlck1vYmlsZSwgc3RhdGUudmFsdWUsIGZldGNoU3VnZ2VzdGlvbnNdKTtcblxuICAvLyB0aGlzIGVmZmVjdCBoYW5kbGVzIHNlbGVjdGluZyB0aGUgc3VnZ2VzdGlvbiB3aGVuIGVudGVyIHdhcyBwcmVzc2VkIGJ1dCBzdWdnZXN0aW9ucyB3ZXJlIHN0aWxsIGxvYWRpbmdcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoc3RhdGUuZW50ZXJQZW5kaW5nICYmICFzdGF0ZS5sb2FkaW5nKSB7XG4gICAgICBzZWxlY3RTdWdnZXN0aW9uKHN0YXRlLnN1Z2dlc3Rpb25zWzBdLCAwKTtcbiAgICAgIGNsb3NlTWVudSgpO1xuICAgIH1cbiAgfSwgW3N0YXRlLmxvYWRpbmcsIHN0YXRlLnBlbmRpbmdFbnRlciwgc3RhdGUuc3VnZ2VzdGlvbnNdKTtcblxuICBjb25zdCBiYXNlSXRlbVByb3BzID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoe1xuICAgICAgbG9hZGluZzogc3RhdGUubG9hZGluZyxcbiAgICAgIGlzTW9iaWxlLFxuICAgICAgYXJpYUZhdm91cml0ZVN0cmluZzogdCgnZmF2b3VyaXRlJywgeyBsbmcgfSksXG4gICAgICBmb250V2VpZ2h0cyxcbiAgICAgIGdldEF1dG9TdWdnZXN0SWNvbnMsXG4gICAgICBjb2xvcnMsXG4gICAgICBtb2RlU2V0LFxuICAgIH0pLFxuICAgIFtcbiAgICAgIHN0YXRlLmxvYWRpbmcsXG4gICAgICBpc01vYmlsZSxcbiAgICAgIHQsXG4gICAgICBsbmcsXG4gICAgICBmb250V2VpZ2h0cyxcbiAgICAgIGdldEF1dG9TdWdnZXN0SWNvbnMsXG4gICAgICBjb2xvcnMsXG4gICAgICBtb2RlU2V0LFxuICAgIF0sXG4gICk7XG5cbiAgY29uc3Qge1xuICAgIGFyaWFDdXJyZW50U3VnZ2VzdGlvbixcbiAgICBhcmlhUmVxdWlyZWRUZXh0LFxuICAgIFNlYXJjaEJhcklkLFxuICAgIGFyaWFMYWJlbFRleHQsXG4gIH0gPSBnZXRBcmlhUHJvcHMoe1xuICAgIGlkLFxuICAgIGxuZyxcbiAgICB0LFxuICAgIGlzTW9iaWxlLFxuICAgIGFyaWFMYWJlbCxcbiAgICBzdWdnZXN0aW9uczogc3RhdGUuc3VnZ2VzdGlvbnMsXG4gICAgdmFsdWU6IHN0YXRlLnZhbHVlLFxuICAgIHJlcXVpcmVkLFxuICB9KTtcblxuICBjb25zdCBtb2JpbGVDbGVhck9sZFNlYXJjaGVzID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgY29udGV4dCwgY2xlYXJPbGRTZWFyY2hlcywgY2xlYXJGdXR1cmVSb3V0ZXMgfSA9IHNlYXJjaENvbnRleHQ7XG4gICAgaWYgKGNvbnRleHQgJiYgY2xlYXJPbGRTZWFyY2hlcykge1xuICAgICAgY2xlYXJPbGRTZWFyY2hlcyhjb250ZXh0KTtcbiAgICAgIGlmIChjbGVhckZ1dHVyZVJvdXRlcykge1xuICAgICAgICBjbGVhckZ1dHVyZVJvdXRlcyhjb250ZXh0KTtcbiAgICAgIH1cbiAgICAgIGZldGNoU3VnZ2VzdGlvbnMoc3RhdGUudmFsdWUpO1xuICAgIH1cbiAgfTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghc3RhdGUucmVuZGVyTW9iaWxlICYmICFpc09wZW4pIHtcbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ1JFU0VUJywgaW5pdGlhbFN0YXRlIH0pO1xuICAgIH1cbiAgfSwgW3N0YXRlLnJlbmRlck1vYmlsZSwgaXNPcGVuXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge2lzTW9iaWxlICYmIChcbiAgICAgICAgPE1vYmlsZVZpZXdcbiAgICAgICAgICBwbGFjZWhvbGRlcj17dChwbGFjZWhvbGRlciwgeyBsbmcgfSl9XG4gICAgICAgICAgZm9udFdlaWdodHM9e2ZvbnRXZWlnaHRzfVxuICAgICAgICAgIGNsZWFyT2xkU2VhcmNoZXM9e21vYmlsZUNsZWFyT2xkU2VhcmNoZXN9XG4gICAgICAgICAgYXBwRWxlbWVudD17YXBwRWxlbWVudH1cbiAgICAgICAgICBtb2JpbGVMYWJlbD17bW9iaWxlTGFiZWwgfHwgdChpZCwgeyBsbmcgfSl9XG4gICAgICAgICAgYXJpYVByb3BzPXt7XG4gICAgICAgICAgICBhcmlhQ3VycmVudFN1Z2dlc3Rpb24sXG4gICAgICAgICAgICBTZWFyY2hCYXJJZCxcbiAgICAgICAgICAgIGFyaWFSZXF1aXJlZFRleHQsXG4gICAgICAgICAgfX1cbiAgICAgICAgICBpZD17aWR9XG4gICAgICAgICAgbG5nPXtsbmd9XG4gICAgICAgICAgb25TZWxlY3RlZEl0ZW1DaGFuZ2U9e29uU2VsZWN0ZWRJdGVtQ2hhbmdlfVxuICAgICAgICAgIHZhbHVlPXtzdGF0ZS52YWx1ZX1cbiAgICAgICAgICBjbGVhcklucHV0PXtjbGVhcklucHV0fVxuICAgICAgICAgIHN1Z2dlc3Rpb25Qcm9wcz17YmFzZUl0ZW1Qcm9wc31cbiAgICAgICAgICBzaG93U2Nyb2xsPXshIXNob3dTY3JvbGx9XG4gICAgICAgICAgY29sb3JzPXtjb2xvcnN9XG4gICAgICAgICAgaW5wdXRDbGFzc05hbWU9e2lucHV0Q2xhc3NOYW1lfVxuICAgICAgICAgIHJlcXVpcmVkPXtyZXF1aXJlZH1cbiAgICAgICAgICBzdGF0ZT17c3RhdGV9XG4gICAgICAgICAgZGlzcGF0Y2g9e2Rpc3BhdGNofVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e2N4KFtcbiAgICAgICAgICBzdHlsZXNbJ2F1dG9zdWdnZXN0LWlucHV0LWNvbnRhaW5lciddLFxuICAgICAgICAgIHN0eWxlc1tpZF0sXG4gICAgICAgICAgc3RhdGUucmVuZGVyTW9iaWxlICYmICdoaWRkZW4nLFxuICAgICAgICBdKX1cbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAnLS1jb2xvcic6IGNvbG9ycy5wcmltYXJ5LFxuICAgICAgICAgICctLWhvdmVyLWNvbG9yJzogY29sb3JzLmhvdmVyLFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICB7aWNvbiAmJiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjeChbXG4gICAgICAgICAgICAgIHN0eWxlc1snYXV0b3N1Z2dlc3QtaW5wdXQtaWNvbiddLFxuICAgICAgICAgICAgICBzdHlsZXNbaWRdLFxuICAgICAgICAgICAgICBpbnB1dENsYXNzTmFtZSAmJiBzdHlsZXNbYCR7aW5wdXRDbGFzc05hbWV9LWlucHV0LWljb25gXSxcbiAgICAgICAgICAgIF0pfVxuICAgICAgICAgICAgYXJpYS1sYWJlbD17YXJpYVJlcXVpcmVkVGV4dFxuICAgICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgICAgLmNvbmNhdChTZWFyY2hCYXJJZClcbiAgICAgICAgICAgICAgLmNvbmNhdCgnICcpXG4gICAgICAgICAgICAgIC5jb25jYXQodCgnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsJywgeyBsbmcgfSkpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxJY29uIGltZz17YCR7aWNvbn1gfSAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgICA8SW5wdXRcbiAgICAgICAgICBpbnB1dENsYXNzTmFtZT17aW5wdXRDbGFzc05hbWV9XG4gICAgICAgICAgYXJpYUxhYmVsPXthcmlhQ3VycmVudFN1Z2dlc3Rpb25cbiAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgLmNvbmNhdChhcmlhUmVxdWlyZWRUZXh0KVxuICAgICAgICAgICAgLmNvbmNhdCgnICcpXG4gICAgICAgICAgICAuY29uY2F0KFNlYXJjaEJhcklkKVxuICAgICAgICAgICAgLmNvbmNhdCgnICcpXG4gICAgICAgICAgICAuY29uY2F0KGFyaWFMYWJlbFRleHQpfVxuICAgICAgICAgIGlkPXtpZH1cbiAgICAgICAgICBsbmc9e2xuZ31cbiAgICAgICAgICBnZXRJbnB1dFByb3BzPXtnZXRJbnB1dFByb3BzfVxuICAgICAgICAgIGdldExhYmVsUHJvcHM9e2dldExhYmVsUHJvcHN9XG4gICAgICAgICAgc2VsZWN0SXRlbT17c2VsZWN0SXRlbX1cbiAgICAgICAgICB2YWx1ZT17c3RhdGUudmFsdWV9XG4gICAgICAgICAgY2xlYXJJbnB1dD17Y2xlYXJJbnB1dH1cbiAgICAgICAgICBpbnB1dFJlZj17aW5wdXRSZWZ9XG4gICAgICAgICAgc3R5bGVzPXtzdHlsZXN9XG4gICAgICAgICAgY2xlYXJCdXR0b25Db2xvcj17Y29sb3JzLnByaW1hcnl9XG4gICAgICAgICAgcGxhY2Vob2xkZXI9e3RyYW5zbGF0ZWRQbGFjZWhvbGRlciB8fCB0KHBsYWNlaG9sZGVyLCB7IGxuZyB9KX1cbiAgICAgICAgICByZXF1aXJlZD17cmVxdWlyZWR9XG4gICAgICAgICAgdHJhbnNwb3J0TW9kZT17dHJhbnNwb3J0TW9kZX1cbiAgICAgICAgICBpc01vYmlsZT17aXNNb2JpbGV9XG4gICAgICAgICAgaW5wdXRPbkJsdXI9e2lucHV0T25CbHVyfVxuICAgICAgICAgIG9uVmFsdWVDaGFuZ2U9e2hhbmRsZVZhbHVlQ2hhbmdlfVxuICAgICAgICAvPlxuXG4gICAgICAgIDxTdWdnZXN0aW9uc1xuICAgICAgICAgIGhpZGRlbj17IWlzT3BlbiB8fCAhc3RhdGUuc3VnZ2VzdGlvbnMubGVuZ3RoIHx8IGlzTW9iaWxlfVxuICAgICAgICAgIGhpZ2hsaWdodGVkSW5kZXg9e2hpZ2hsaWdodGVkSW5kZXh9XG4gICAgICAgICAgZ2V0SXRlbVByb3BzPXtnZXRJdGVtUHJvcHN9XG4gICAgICAgICAgZ2V0TWVudVByb3BzPXtnZXRNZW51UHJvcHN9XG4gICAgICAgICAgc3VnZ2VzdGlvbnM9e3N0YXRlLnN1Z2dlc3Rpb25zfVxuICAgICAgICAgIGxuZz17bG5nfVxuICAgICAgICAgIHN0eWxlcz17c3R5bGVzfVxuICAgICAgICAgIHsuLi5iYXNlSXRlbVByb3BzfVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgPC8+XG4gICk7XG59XG5cbkRUQXV0b3N1Z2dlc3QucHJvcFR5cGVzID0ge1xuICBhcHBFbGVtZW50OiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGljb246IFByb3BUeXBlcy5zdHJpbmcsXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIHRyYW5zbGF0ZWRQbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgdmFsdWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHRyYW5zcG9ydE1vZGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGdlb2NvZGluZ1NpemU6IFByb3BUeXBlcy5udW1iZXIsXG4gIGZpbHRlclJlc3VsdHM6IFByb3BUeXBlcy5mdW5jLFxuICBzZWFyY2hDb250ZXh0OiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIFVSTF9QRUxJQVM6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgY29udGV4dDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBjbGVhck9sZFNlYXJjaGVzOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBjbGVhckZ1dHVyZVJvdXRlczogUHJvcFR5cGVzLmZ1bmMsXG4gIH0pLmlzUmVxdWlyZWQsXG4gIHNvdXJjZXM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zdHJpbmcpLFxuICB0YXJnZXRzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc3RyaW5nKSxcbiAgYXJpYUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBvblNlbGVjdDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgb25DbGVhcjogUHJvcFR5cGVzLmZ1bmMsXG4gIHN0b3JlUmVmOiBQcm9wVHlwZXMuZnVuYyxcbiAgaGFuZGxlVmlhUG9pbnRzOiBQcm9wVHlwZXMuZnVuYyxcbiAgZm9jdXNDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBsYW5nOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBpc01vYmlsZTogUHJvcFR5cGVzLmJvb2wsXG4gIHBhdGhPcHRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIHJvdXRlc1ByZWZpeDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBzdG9wc1ByZWZpeDogUHJvcFR5cGVzLnN0cmluZyxcbiAgfSksXG4gIG1vYmlsZUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICByZWZQb2ludDogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBhZGRyZXNzOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGxhdDogUHJvcFR5cGVzLm51bWJlcixcbiAgICBsb246IFByb3BUeXBlcy5udW1iZXIsXG4gIH0pLFxuICBpbnB1dENsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgZm9udFdlaWdodHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgbWVkaXVtOiBQcm9wVHlwZXMubnVtYmVyLFxuICB9KSxcbiAgY29sb3JzOiBQcm9wVHlwZXMub2JqZWN0T2YoUHJvcFR5cGVzLnN0cmluZyksXG4gIGdldEF1dG9TdWdnZXN0SWNvbnM6IFByb3BUeXBlcy5vYmplY3RPZihQcm9wVHlwZXMuZnVuYyksXG4gIHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgbW9kZVNldDogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2hvd1Njcm9sbDogUHJvcFR5cGVzLmJvb2wsXG4gIGlzRW1iZWRkZWQ6IFByb3BUeXBlcy5ib29sLFxufTtcblxuRFRBdXRvc3VnZ2VzdC5kZWZhdWx0UHJvcHMgPSB7XG4gIGljb246IHVuZGVmaW5lZCxcbiAgdmFsdWU6ICcnLFxuICB0cmFuc3BvcnRNb2RlOiB1bmRlZmluZWQsXG4gIGZpbHRlclJlc3VsdHM6IHVuZGVmaW5lZCxcbiAgb25DbGVhcjogdW5kZWZpbmVkLFxuICBsYW5nOiAnZmknLFxuICBzdG9yZVJlZjogdW5kZWZpbmVkLFxuICBoYW5kbGVWaWFQb2ludHM6IHVuZGVmaW5lZCxcbiAgZm9jdXNDaGFuZ2U6IHVuZGVmaW5lZCxcbiAgZ2V0QXV0b1N1Z2dlc3RJY29uczogdW5kZWZpbmVkLFxuICBzb3VyY2VzOiBbXSxcbiAgdGFyZ2V0czogdW5kZWZpbmVkLFxuICBpc01vYmlsZTogZmFsc2UsXG4gIGlzRW1iZWRkZWQ6IGZhbHNlLFxuICBnZW9jb2RpbmdTaXplOiB1bmRlZmluZWQsXG4gIHBhdGhPcHRzOiB7XG4gICAgcm91dGVzUHJlZml4OiAnbGluamF0JyxcbiAgICBzdG9wc1ByZWZpeDogJ3B5c2FraXQnLFxuICB9LFxuICBhcmlhTGFiZWw6IHVuZGVmaW5lZCxcbiAgbW9iaWxlTGFiZWw6IHVuZGVmaW5lZCxcbiAgaW5wdXRDbGFzc05hbWU6ICcnLFxuICB0cmFuc2xhdGVkUGxhY2Vob2xkZXI6IHVuZGVmaW5lZCxcbiAgZm9udFdlaWdodHM6IHtcbiAgICBtZWRpdW06IDUwMCxcbiAgfSxcbiAgY29sb3JzOiBkZWZhdWx0Q29sb3JzLFxuICByZXF1aXJlZDogZmFsc2UsXG4gIG1vZGVTZXQ6IHVuZGVmaW5lZCxcbiAgc2hvd1Njcm9sbDogZmFsc2UsXG4gIHJlZlBvaW50OiB7fSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHByb3BzID0+IHtcbiAgcmV0dXJuIChcbiAgICA8STE4bmV4dFByb3ZpZGVyIGkxOG49e2kxOG59PlxuICAgICAgPERUQXV0b3N1Z2dlc3Qgey4uLnByb3BzfSAvPlxuICAgIDwvSTE4bmV4dFByb3ZpZGVyPlxuICApO1xufTtcbiJdLCJuYW1lcyI6WyJfdHlwZW9mIiwibyIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiY29uc3RydWN0b3IiLCJwcm90b3R5cGUiLCJ0b1Byb3BlcnR5S2V5IiwidCIsImkiLCJyIiwiZSIsInRvUHJpbWl0aXZlIiwiY2FsbCIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsIl9kZWZpbmVQcm9wZXJ0eSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJ0cnVFcSIsInZhbDEiLCJ2YWwyIiwiZ3Rmc1N0b3BMYXllcnMiLCJ2ZWhpY2xlUmVudGFsTGF5ZXJzIiwibGFiZWxJZFRvR2lkIiwiaWQiLCJwYXJ0cyIsInNwbGl0IiwibGVuZ3RoIiwiaXNEdXBsaWNhdGUiLCJpdGVtMSIsIml0ZW0yIiwicHJvcHMxIiwicHJvcGVydGllcyIsInByb3BzMiIsInR5cGUiLCJvMSIsIm9yaWdpbiIsImQxIiwiZGVzdGluYXRpb24iLCJvMiIsImQyIiwibmFtZSIsImxvY2FsYWRtaW4iLCJpbmNsdWRlcyIsImxheWVyIiwiZ2lkIiwibGFiZWxJZCIsImd0ZnNJZCIsInAxIiwiZ2VvbWV0cnkiLCJjb29yZGluYXRlcyIsInVuZGVmaW5lZCIsInAyIiwiTWF0aCIsImFicyIsImxhYmVsIiwiYWRkcmVzcyIsIm5vcm1hbGl6ZSIsInN0ciIsImlzU3RyaW5nIiwidG9Mb3dlckNhc2UiLCJzcGxpdFNob3J0TmFtZUF0TGV0dGVycyIsInRlc3RTaG9ydE5hbWVNYXRjaGVzTGluZVdpdGhOdW1iZXJzQW5kTGV0dGVycyIsInRlc3QiLCJMYXllclR5cGUiLCJpc1N0b3AiLCJnZXRMYXllclJhbmsiLCJzb3VyY2UiLCJpbmRleE9mIiwic29ydFNlYXJjaFJlc3VsdHMiLCJsaW5lUmVnZXhwIiwicmVzdWx0cyIsInRlcm0iLCJBcnJheSIsImlzQXJyYXkiLCJpc0xpbmVJZGVudGlmaWVyIiwibm9ybWFsaXplZFRlcm0iLCJpc0xpbmVTZWFyY2giLCJvcmRlcmVkUmVzdWx0cyIsIm9yZGVyQnkiLCJmaWx0ZXIiLCJyZXN1bHQiLCJzaG9ydE5hbWUiLCJjb25maWRlbmNlIiwibWF0Y2giLCJyZXN1bHRQcm9wZXJ0aWVzIiwibWFwIiwiZWxlbWVudCIsIm5vcm1hbGl6ZWRWYWx1ZSIsInJlZHVjZSIsInByZXZpb3VzIiwiY3VycmVudCIsInVuaXFXaXRoIiwiZ2V0U3RvcE5hbWUiLCJzdG9wQ29kZSIsImxhc3RJbmRleE9mIiwic3Vic3RyaW5nIiwiZmlsdGVyTWF0Y2hpbmdUb0lucHV0IiwibGlzdCIsIklucHV0IiwiZmllbGRzIiwiaW5wdXQiLCJ0cmltIiwibXVsdGlXb3JkIiwiaXRlbSIsImZvckVhY2giLCJwTmFtZSIsImdldCIsInNwbGljZSIsImpvaW4iLCJjb25jYXQiLCJyZXBsYWNlIiwiYmluZCIsImZuIiwidGhpc0FyZyIsImFwcGx5IiwiYXJndW1lbnRzIiwidG9TdHJpbmciLCJnZXRQcm90b3R5cGVPZiIsInRvU3RyaW5nVGFnIiwia2luZE9mIiwiY2FjaGUiLCJjcmVhdGUiLCJ0aGluZyIsInNsaWNlIiwia2luZE9mVGVzdCIsInR5cGVPZlRlc3QiLCJpc1VuZGVmaW5lZCIsImlzQnVmZmVyIiwidmFsIiwiaXNGdW5jdGlvbiIsImlzQXJyYXlCdWZmZXIiLCJpc051bWJlciIsImlzT2JqZWN0IiwiaXNQbGFpbk9iamVjdCIsImlzRGF0ZSIsImlzRmlsZSIsImlzQmxvYiIsImlzRmlsZUxpc3QiLCJHIiwiZ2xvYmFsVGhpcyIsInNlbGYiLCJ3aW5kb3ciLCJnbG9iYWwiLCJGb3JtRGF0YUN0b3IiLCJGb3JtRGF0YSIsImlzVVJMU2VhcmNoUGFyYW1zIiwiaXNSZWFkYWJsZVN0cmVhbSIsImlzUmVxdWVzdCIsImlzUmVzcG9uc2UiLCJpc0hlYWRlcnMiLCJvYmoiLCJhbGxPd25LZXlzIiwibCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwibGVuIiwia2V5IiwiZmluZEtleSIsIl9rZXkiLCJfZ2xvYmFsIiwiaXNDb250ZXh0RGVmaW5lZCIsImNvbnRleHQiLCJpc1R5cGVkQXJyYXkiLCJUeXBlZEFycmF5IiwiVWludDhBcnJheSIsImlzSFRNTEZvcm0iLCJoYXNPd25Qcm9wZXJ0eSIsInByb3AiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsImlzUmVnRXhwIiwicmVkdWNlRGVzY3JpcHRvcnMiLCJyZWR1Y2VyIiwiZGVzY3JpcHRvcnMiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwicmVkdWNlZERlc2NyaXB0b3JzIiwiZGVzY3JpcHRvciIsInJldCIsImRlZmluZVByb3BlcnRpZXMiLCJpc0FzeW5jRm4iLCJfc2V0SW1tZWRpYXRlIiwic2V0SW1tZWRpYXRlU3VwcG9ydGVkIiwic2V0SW1tZWRpYXRlIiwicG9zdE1lc3NhZ2VTdXBwb3J0ZWQiLCJwb3N0TWVzc2FnZSIsInRva2VuIiwicmFuZG9tIiwiY2FsbGJhY2tzIiwiYWRkRXZlbnRMaXN0ZW5lciIsImRhdGEiLCJzaGlmdCIsImNiIiwicHVzaCIsInNldFRpbWVvdXQiLCJhc2FwIiwicXVldWVNaWNyb3Rhc2siLCJwcm9jZXNzIiwibmV4dFRpY2siLCJ1dGlscyQxIiwiaXNGb3JtRGF0YSIsInByb3RvIiwiYXBwZW5kIiwia2luZCIsImlzQXJyYXlCdWZmZXJWaWV3IiwiQXJyYXlCdWZmZXIiLCJpc1ZpZXciLCJidWZmZXIiLCJpc0Jvb2xlYW4iLCJpc0VtcHR5T2JqZWN0IiwiaXNSZWFjdE5hdGl2ZUJsb2IiLCJ1cmkiLCJpc1JlYWN0TmF0aXZlIiwiZm9ybURhdGEiLCJnZXRQYXJ0cyIsImlzU3RyZWFtIiwicGlwZSIsIm1lcmdlIiwib2JqcyIsImNhc2VsZXNzIiwic2tpcFVuZGVmaW5lZCIsInRoaXMiLCJhc3NpZ25WYWx1ZSIsInRhcmdldEtleSIsImV4aXN0aW5nIiwic3ltYm9scyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImoiLCJzeW1ib2wiLCJleHRlbmQiLCJhIiwiYiIsIl9fcHJvdG9fXyIsInN0cmlwQk9NIiwiY29udGVudCIsImNoYXJDb2RlQXQiLCJpbmhlcml0cyIsInN1cGVyQ29uc3RydWN0b3IiLCJwcm9wcyIsImFzc2lnbiIsInRvRmxhdE9iamVjdCIsInNvdXJjZU9iaiIsImRlc3RPYmoiLCJwcm9wRmlsdGVyIiwibWVyZ2VkIiwiZW5kc1dpdGgiLCJzZWFyY2hTdHJpbmciLCJwb3NpdGlvbiIsImxhc3RJbmRleCIsInRvQXJyYXkiLCJhcnIiLCJmb3JFYWNoRW50cnkiLCJfaXRlcmF0b3IiLCJuZXh0IiwiZG9uZSIsInBhaXIiLCJtYXRjaEFsbCIsInJlZ0V4cCIsIm1hdGNoZXMiLCJleGVjIiwiaGFzT3duUHJvcCIsImZyZWV6ZU1ldGhvZHMiLCJzZXQiLCJFcnJvciIsInRvT2JqZWN0U2V0IiwiYXJyYXlPclN0cmluZyIsImRlbGltaXRlciIsImRlZmluZSIsInRvQ2FtZWxDYXNlIiwibSIsInRvVXBwZXJDYXNlIiwibm9vcCIsInRvRmluaXRlTnVtYmVyIiwiZGVmYXVsdFZhbHVlIiwiaXNGaW5pdGUiLCJpc1NwZWNDb21wbGlhbnRGb3JtIiwidG9KU09OT2JqZWN0IiwidmlzaXRlZCIsIldlYWtTZXQiLCJ2aXNpdCIsImhhcyIsImFkZCIsInRhcmdldCIsInJlZHVjZWRWYWx1ZSIsImRlbGV0ZSIsImlzVGhlbmFibGUiLCJ0aGVuIiwiY2F0Y2giLCJpc0l0ZXJhYmxlIiwiaWdub3JlRHVwbGljYXRlT2YiLCJ1dGlscyIsIklOVkFMSURfVU5JQ09ERV9IRUFERVJfVkFMVUVfQ0hBUlMiLCJSZWdFeHAiLCJJTlZBTElEX0JZVEVfU1RSSU5HX0hFQURFUl9WQUxVRV9DSEFSUyIsInNhbml0aXplVmFsdWUiLCJpbnZhbGlkQ2hhcnMiLCJzdGFydCIsImVuZCIsImNvZGUiLCJ0cmltU1BvckhUQUIiLCJ0b0J5dGVTdHJpbmdIZWFkZXJPYmplY3QiLCJoZWFkZXJzIiwiYnl0ZVN0cmluZ0hlYWRlcnMiLCJ0b0pTT04iLCJoZWFkZXIiLCJzYW5pdGl6ZUJ5dGVTdHJpbmdIZWFkZXJWYWx1ZSIsIiRpbnRlcm5hbHMiLCJub3JtYWxpemVIZWFkZXIiLCJub3JtYWxpemVWYWx1ZSIsInNhbml0aXplSGVhZGVyVmFsdWUiLCJtYXRjaEhlYWRlclZhbHVlIiwiaXNIZWFkZXJOYW1lRmlsdGVyIiwiQXhpb3NIZWFkZXJzJDEiLCJ2YWx1ZU9yUmV3cml0ZSIsInJld3JpdGUiLCJzZXRIZWFkZXIiLCJfdmFsdWUiLCJfaGVhZGVyIiwiX3Jld3JpdGUiLCJsSGVhZGVyIiwic2V0SGVhZGVycyIsInJhd0hlYWRlcnMiLCJwYXJzZWQiLCJsaW5lIiwicGFyc2VIZWFkZXJzIiwiZGVzdCIsImVudHJ5IiwicGFyc2VyIiwidG9rZW5zIiwidG9rZW5zUkUiLCJwYXJzZVRva2VucyIsIm1hdGNoZXIiLCJkZWxldGVkIiwiZGVsZXRlSGVhZGVyIiwiY2xlYXIiLCJmb3JtYXQiLCJub3JtYWxpemVkIiwidyIsImNoYXIiLCJmb3JtYXRIZWFkZXIiLCJ0YXJnZXRzIiwiYXNTdHJpbmdzIiwiZW50cmllcyIsImdldFNldENvb2tpZSIsImZyb20iLCJmaXJzdCIsImNvbXB1dGVkIiwiYWNjZXNzb3IiLCJhY2Nlc3NvcnMiLCJkZWZpbmVBY2Nlc3NvciIsImFjY2Vzc29yTmFtZSIsIm1ldGhvZE5hbWUiLCJhcmcxIiwiYXJnMiIsImFyZzMiLCJidWlsZEFjY2Vzc29ycyIsIkF4aW9zSGVhZGVycyIsIm1hcHBlZCIsImhlYWRlclZhbHVlIiwicmVkYWN0Q29uZmlnIiwiY29uZmlnIiwicmVkYWN0S2V5cyIsImxvd2VyS2V5cyIsIlNldCIsImsiLCJzZWVuIiwidiIsImhhc093bk9yUHJvdG90eXBlVG9KU09OIiwicG9wIiwiQXhpb3NFcnJvciIsImVycm9yIiwicmVxdWVzdCIsInJlc3BvbnNlIiwiY3VzdG9tUHJvcHMiLCJheGlvc0Vycm9yIiwibWVzc2FnZSIsImNhdXNlIiwic3RhdHVzIiwic3VwZXIiLCJpc0F4aW9zRXJyb3IiLCJyZWRhY3QiLCJzZXJpYWxpemVkQ29uZmlnIiwiZGVzY3JpcHRpb24iLCJudW1iZXIiLCJmaWxlTmFtZSIsImxpbmVOdW1iZXIiLCJjb2x1bW5OdW1iZXIiLCJzdGFjayIsIkVSUl9CQURfT1BUSU9OX1ZBTFVFIiwiRVJSX0JBRF9PUFRJT04iLCJFQ09OTkFCT1JURUQiLCJFVElNRURPVVQiLCJFQ09OTlJFRlVTRUQiLCJFUlJfTkVUV09SSyIsIkVSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMiLCJFUlJfREVQUkVDQVRFRCIsIkVSUl9CQURfUkVTUE9OU0UiLCJFUlJfQkFEX1JFUVVFU1QiLCJFUlJfQ0FOQ0VMRUQiLCJFUlJfTk9UX1NVUFBPUlQiLCJFUlJfSU5WQUxJRF9VUkwiLCJFUlJfRk9STV9EQVRBX0RFUFRIX0VYQ0VFREVEIiwiaXNWaXNpdGFibGUiLCJyZW1vdmVCcmFja2V0cyIsInJlbmRlcktleSIsInBhdGgiLCJkb3RzIiwicHJlZGljYXRlcyIsInRvRm9ybURhdGEiLCJvcHRpb25zIiwibWV0YVRva2VucyIsImluZGV4ZXMiLCJvcHRpb24iLCJ2aXNpdG9yIiwiZGVmYXVsdFZpc2l0b3IiLCJfQmxvYiIsIkJsb2IiLCJtYXhEZXB0aCIsInVzZUJsb2IiLCJjb252ZXJ0VmFsdWUiLCJ0b0lTT1N0cmluZyIsIkJ1ZmZlciIsIkpTT04iLCJzdHJpbmdpZnkiLCJzb21lIiwiaXNGbGF0QXJyYXkiLCJlbCIsImluZGV4IiwiZXhwb3NlZEhlbHBlcnMiLCJidWlsZCIsImRlcHRoIiwiZW5jb2RlIiwiY2hhck1hcCIsImVuY29kZVVSSUNvbXBvbmVudCIsIkF4aW9zVVJMU2VhcmNoUGFyYW1zIiwicGFyYW1zIiwiX3BhaXJzIiwiYnVpbGRVUkwiLCJ1cmwiLCJfZW5jb2RlIiwiX29wdGlvbnMiLCJzZXJpYWxpemUiLCJzZXJpYWxpemVGbiIsInNlcmlhbGl6ZWRQYXJhbXMiLCJoYXNobWFya0luZGV4IiwiZW5jb2RlciIsIkludGVyY2VwdG9yTWFuYWdlciIsImhhbmRsZXJzIiwidXNlIiwiZnVsZmlsbGVkIiwicmVqZWN0ZWQiLCJzeW5jaHJvbm91cyIsInJ1bldoZW4iLCJlamVjdCIsImgiLCJ0cmFuc2l0aW9uYWxEZWZhdWx0cyIsInNpbGVudEpTT05QYXJzaW5nIiwiZm9yY2VkSlNPTlBhcnNpbmciLCJjbGFyaWZ5VGltZW91dEVycm9yIiwibGVnYWN5SW50ZXJjZXB0b3JSZXFSZXNPcmRlcmluZyIsImFkdmVydGlzZVpzdGRBY2NlcHRFbmNvZGluZyIsInBsYXRmb3JtJDEiLCJpc0Jyb3dzZXIiLCJjbGFzc2VzIiwiVVJMU2VhcmNoUGFyYW1zIiwicHJvdG9jb2xzIiwiaGFzQnJvd3NlckVudiIsImRvY3VtZW50IiwiX25hdmlnYXRvciIsIm5hdmlnYXRvciIsImhhc1N0YW5kYXJkQnJvd3NlckVudiIsInByb2R1Y3QiLCJoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYiLCJXb3JrZXJHbG9iYWxTY29wZSIsImltcG9ydFNjcmlwdHMiLCJsb2NhdGlvbiIsImhyZWYiLCJwbGF0Zm9ybSIsImZvcm1EYXRhVG9KU09OIiwiYnVpbGRQYXRoIiwiaXNOdW1lcmljS2V5IiwiaXNMYXN0IiwiYXJyYXlUb09iamVjdCIsInBhcnNlUHJvcFBhdGgiLCJvd24iLCJkZWZhdWx0cyIsInRyYW5zaXRpb25hbCIsImFkYXB0ZXIiLCJ0cmFuc2Zvcm1SZXF1ZXN0IiwiY29udGVudFR5cGUiLCJnZXRDb250ZW50VHlwZSIsImhhc0pTT05Db250ZW50VHlwZSIsImlzT2JqZWN0UGF5bG9hZCIsInNldENvbnRlbnRUeXBlIiwiZm9ybVNlcmlhbGl6ZXIiLCJoZWxwZXJzIiwiaXNOb2RlIiwidG9VUkxFbmNvZGVkRm9ybSIsImVudiIsIl9Gb3JtRGF0YSIsInJhd1ZhbHVlIiwicGFyc2UiLCJzdHJpbmdpZnlTYWZlbHkiLCJ0cmFuc2Zvcm1SZXNwb25zZSIsInJlc3BvbnNlVHlwZSIsIkpTT05SZXF1ZXN0ZWQiLCJzdHJpY3RKU09OUGFyc2luZyIsInRpbWVvdXQiLCJ4c3JmQ29va2llTmFtZSIsInhzcmZIZWFkZXJOYW1lIiwibWF4Q29udGVudExlbmd0aCIsIm1heEJvZHlMZW5ndGgiLCJ2YWxpZGF0ZVN0YXR1cyIsImNvbW1vbiIsIkFjY2VwdCIsInRyYW5zZm9ybURhdGEiLCJmbnMiLCJpc0NhbmNlbCIsIl9fQ0FOQ0VMX18iLCJtZXRob2QiLCJzZXR0bGUiLCJyZXNvbHZlIiwicmVqZWN0IiwicHJvZ3Jlc3NFdmVudFJlZHVjZXIiLCJsaXN0ZW5lciIsImlzRG93bmxvYWRTdHJlYW0iLCJmcmVxIiwiYnl0ZXNOb3RpZmllZCIsIl9zcGVlZG9tZXRlciIsInNhbXBsZXNDb3VudCIsIm1pbiIsImJ5dGVzIiwidGltZXN0YW1wcyIsImZpcnN0U2FtcGxlVFMiLCJoZWFkIiwidGFpbCIsImNodW5rTGVuZ3RoIiwibm93IiwiRGF0ZSIsInN0YXJ0ZWRBdCIsImJ5dGVzQ291bnQiLCJwYXNzZWQiLCJyb3VuZCIsInNwZWVkb21ldGVyIiwibGFzdEFyZ3MiLCJ0aW1lciIsInRpbWVzdGFtcCIsInRocmVzaG9sZCIsImludm9rZSIsImFyZ3MiLCJjbGVhclRpbWVvdXQiLCJ0aHJvdHRsZSIsImxvYWRlZCIsInJhd0xvYWRlZCIsInRvdGFsIiwibGVuZ3RoQ29tcHV0YWJsZSIsInByb2dyZXNzQnl0ZXMiLCJtYXgiLCJyYXRlIiwicHJvZ3Jlc3MiLCJlc3RpbWF0ZWQiLCJldmVudCIsInByb2dyZXNzRXZlbnREZWNvcmF0b3IiLCJ0aHJvdHRsZWQiLCJhc3luY0RlY29yYXRvciIsImlzVVJMU2FtZU9yaWdpbiIsImlzTVNJRSIsIlVSTCIsInByb3RvY29sIiwiaG9zdCIsInBvcnQiLCJ1c2VyQWdlbnQiLCJjb29raWVzIiwid3JpdGUiLCJleHBpcmVzIiwiZG9tYWluIiwic2VjdXJlIiwic2FtZVNpdGUiLCJjb29raWUiLCJ0b1VUQ1N0cmluZyIsInJlYWQiLCJlcSIsImRlY29kZVVSSUNvbXBvbmVudCIsInJlbW92ZSIsImJ1aWxkRnVsbFBhdGgiLCJiYXNlVVJMIiwicmVxdWVzdGVkVVJMIiwiYWxsb3dBYnNvbHV0ZVVybHMiLCJpc1JlbGF0aXZlVXJsIiwicmVsYXRpdmVVUkwiLCJjb21iaW5lVVJMcyIsImhlYWRlcnNUb09iamVjdCIsIm1lcmdlQ29uZmlnIiwiY29uZmlnMSIsImNvbmZpZzIiLCJnZXRNZXJnZWRWYWx1ZSIsIm1lcmdlRGVlcFByb3BlcnRpZXMiLCJ2YWx1ZUZyb21Db25maWcyIiwiZGVmYXVsdFRvQ29uZmlnMiIsIm1lcmdlRGlyZWN0S2V5cyIsIm1lcmdlTWFwIiwicGFyYW1zU2VyaWFsaXplciIsInRpbWVvdXRNZXNzYWdlIiwid2l0aENyZWRlbnRpYWxzIiwid2l0aFhTUkZUb2tlbiIsIm9uVXBsb2FkUHJvZ3Jlc3MiLCJvbkRvd25sb2FkUHJvZ3Jlc3MiLCJkZWNvbXByZXNzIiwiYmVmb3JlUmVkaXJlY3QiLCJ0cmFuc3BvcnQiLCJodHRwQWdlbnQiLCJodHRwc0FnZW50IiwiY2FuY2VsVG9rZW4iLCJzb2NrZXRQYXRoIiwiYWxsb3dlZFNvY2tldFBhdGhzIiwicmVzcG9uc2VFbmNvZGluZyIsImNvbmZpZ1ZhbHVlIiwiRk9STV9EQVRBX0NPTlRFTlRfSEVBREVSUyIsInJlc29sdmVDb25maWciLCJuZXdDb25maWciLCJhdXRoIiwiYnRvYSIsInVzZXJuYW1lIiwicGFzc3dvcmQiLCJfIiwiaGV4IiwiZnJvbUNoYXJDb2RlIiwicGFyc2VJbnQiLCJnZXRIZWFkZXJzIiwiZm9ybUhlYWRlcnMiLCJwb2xpY3kiLCJzZXRGb3JtRGF0YUhlYWRlcnMiLCJ4c3JmVmFsdWUiLCJ4aHJBZGFwdGVyIiwiWE1MSHR0cFJlcXVlc3QiLCJQcm9taXNlIiwiX2NvbmZpZyIsInJlcXVlc3REYXRhIiwicmVxdWVzdEhlYWRlcnMiLCJvbkNhbmNlbGVkIiwidXBsb2FkVGhyb3R0bGVkIiwiZG93bmxvYWRUaHJvdHRsZWQiLCJmbHVzaFVwbG9hZCIsImZsdXNoRG93bmxvYWQiLCJ1bnN1YnNjcmliZSIsInNpZ25hbCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJvbmxvYWRlbmQiLCJyZXNwb25zZUhlYWRlcnMiLCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiLCJlcnIiLCJyZXNwb25zZVRleHQiLCJzdGF0dXNUZXh0Iiwib3BlbiIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlYWR5U3RhdGUiLCJyZXNwb25zZVVSTCIsInN0YXJ0c1dpdGgiLCJvbmFib3J0Iiwib25lcnJvciIsIm1zZyIsIm9udGltZW91dCIsInRpbWVvdXRFcnJvck1lc3NhZ2UiLCJzZXRSZXF1ZXN0SGVhZGVyIiwidXBsb2FkIiwiY2FuY2VsIiwiQ2FuY2VsZWRFcnJvciIsImFib3J0Iiwic3Vic2NyaWJlIiwiYWJvcnRlZCIsInBhcnNlUHJvdG9jb2wiLCJzZW5kIiwiY29tcG9zZVNpZ25hbHMiLCJzaWduYWxzIiwiQm9vbGVhbiIsImNvbnRyb2xsZXIiLCJBYm9ydENvbnRyb2xsZXIiLCJyZWFzb24iLCJzdHJlYW1DaHVuayIsImNodW5rIiwiY2h1bmtTaXplIiwiYnl0ZUxlbmd0aCIsInBvcyIsInJlYWRTdHJlYW0iLCJhc3luYyIsInN0cmVhbSIsImFzeW5jSXRlcmF0b3IiLCJyZWFkZXIiLCJnZXRSZWFkZXIiLCJ0cmFja1N0cmVhbSIsIm9uUHJvZ3Jlc3MiLCJvbkZpbmlzaCIsIml0ZXJhYmxlIiwicmVhZEJ5dGVzIiwiX29uRmluaXNoIiwiUmVhZGFibGVTdHJlYW0iLCJwdWxsIiwiY2xvc2UiLCJsb2FkZWRCeXRlcyIsImVucXVldWUiLCJyZXR1cm4iLCJoaWdoV2F0ZXJNYXJrIiwiVkVSU0lPTiIsImRlY29kZVVSSUNvbXBvbmVudFNhZmUiLCJmYWN0b3J5IiwiZ2xvYmFsT2JqZWN0IiwiVGV4dEVuY29kZXIiLCJSZXF1ZXN0IiwiUmVzcG9uc2UiLCJmZXRjaCIsImVudkZldGNoIiwiaXNGZXRjaFN1cHBvcnRlZCIsImlzUmVxdWVzdFN1cHBvcnRlZCIsImlzUmVzcG9uc2VTdXBwb3J0ZWQiLCJpc1JlYWRhYmxlU3RyZWFtU3VwcG9ydGVkIiwiZW5jb2RlVGV4dCIsImFycmF5QnVmZmVyIiwic3VwcG9ydHNSZXF1ZXN0U3RyZWFtIiwiZHVwbGV4QWNjZXNzZWQiLCJib2R5IiwiZHVwbGV4IiwiaGFzQ29udGVudFR5cGUiLCJzdXBwb3J0c1Jlc3BvbnNlU3RyZWFtIiwicmVzb2x2ZXJzIiwicmVzIiwicmVzb2x2ZUJvZHlMZW5ndGgiLCJnZXRDb250ZW50TGVuZ3RoIiwic2l6ZSIsIl9yZXF1ZXN0IiwiZ2V0Qm9keUxlbmd0aCIsImZldGNoT3B0aW9ucyIsImhhc01heENvbnRlbnRMZW5ndGgiLCJoYXNNYXhCb2R5TGVuZ3RoIiwiX2ZldGNoIiwiY29tcG9zZWRTaWduYWwiLCJ0b0Fib3J0U2lnbmFsIiwicmVxdWVzdENvbnRlbnRMZW5ndGgiLCJjb25maWdBdXRoIiwicHJvdG9jb2xJbmRleCIsInVybFRvQ2hlY2siLCJtYXliZVdpdGhBdXRoQ3JlZGVudGlhbHMiLCJwYXJzZWRVUkwiLCJ1cmxVc2VybmFtZSIsImNvbW1hIiwibWV0YSIsImVmZmVjdGl2ZUxlbiIsInBhZCIsImlkeCIsInRhaWxJc1BjdDNEIiwiZmxvb3IiLCJjIiwiZXN0aW1hdGVEYXRhVVJMRGVjb2RlZEJ5dGVzIiwib3V0Ym91bmRMZW5ndGgiLCJjb250ZW50VHlwZUhlYWRlciIsImZsdXNoIiwiaXNDcmVkZW50aWFsc1N1cHBvcnRlZCIsInJlc29sdmVkT3B0aW9ucyIsImNyZWRlbnRpYWxzIiwiZGVjbGFyZWRMZW5ndGgiLCJpc1N0cmVhbVJlc3BvbnNlIiwicmVzcG9uc2VDb250ZW50TGVuZ3RoIiwiYnl0ZXNSZWFkIiwib25DaHVua1Byb2dyZXNzIiwicmVzcG9uc2VEYXRhIiwibWF0ZXJpYWxpemVkU2l6ZSIsImNhbmNlbGVkRXJyb3IiLCJzZWVkQ2FjaGUiLCJNYXAiLCJnZXRGZXRjaCIsInNlZWRzIiwic2VlZCIsImtub3duQWRhcHRlcnMiLCJodHRwIiwieGhyIiwiZmV0Y2hBZGFwdGVyLmdldEZldGNoIiwicmVuZGVyUmVhc29uIiwiaXNSZXNvbHZlZEhhbmRsZSIsImFkYXB0ZXJzIiwiZ2V0QWRhcHRlciIsIm5hbWVPckFkYXB0ZXIiLCJyZWplY3RlZFJlYXNvbnMiLCJyZWFzb25zIiwic3RhdGUiLCJzIiwidGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZCIsInRocm93SWZSZXF1ZXN0ZWQiLCJkaXNwYXRjaFJlcXVlc3QiLCJ2YWxpZGF0b3JzIiwiZGVwcmVjYXRlZFdhcm5pbmdzIiwidmFsaWRhdG9yIiwidmVyc2lvbiIsImZvcm1hdE1lc3NhZ2UiLCJvcHQiLCJkZXNjIiwib3B0cyIsImNvbnNvbGUiLCJ3YXJuIiwic3BlbGxpbmciLCJjb3JyZWN0U3BlbGxpbmciLCJhc3NlcnRPcHRpb25zIiwic2NoZW1hIiwiYWxsb3dVbmtub3duIiwiQXhpb3MkMSIsImluc3RhbmNlQ29uZmlnIiwiaW50ZXJjZXB0b3JzIiwiY29uZmlnT3JVcmwiLCJkdW1teSIsImNhcHR1cmVTdGFja1RyYWNlIiwiZmlyc3ROZXdsaW5lSW5kZXgiLCJzZWNvbmROZXdsaW5lSW5kZXgiLCJzdGFja1dpdGhvdXRUd29Ub3BMaW5lcyIsImJvb2xlYW4iLCJmdW5jdGlvbiIsImJhc2VVcmwiLCJ3aXRoWHNyZlRva2VuIiwiY29udGV4dEhlYWRlcnMiLCJyZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbiIsInN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyIsImludGVyY2VwdG9yIiwidW5zaGlmdCIsInJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbiIsInByb21pc2UiLCJjaGFpbiIsIm9uRnVsZmlsbGVkIiwib25SZWplY3RlZCIsImdldFVyaSIsIkF4aW9zIiwiZ2VuZXJhdGVIVFRQTWV0aG9kIiwiaXNGb3JtIiwiSHR0cFN0YXR1c0NvZGUiLCJDb250aW51ZSIsIlN3aXRjaGluZ1Byb3RvY29scyIsIlByb2Nlc3NpbmciLCJFYXJseUhpbnRzIiwiT2siLCJDcmVhdGVkIiwiQWNjZXB0ZWQiLCJOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb24iLCJOb0NvbnRlbnQiLCJSZXNldENvbnRlbnQiLCJQYXJ0aWFsQ29udGVudCIsIk11bHRpU3RhdHVzIiwiQWxyZWFkeVJlcG9ydGVkIiwiSW1Vc2VkIiwiTXVsdGlwbGVDaG9pY2VzIiwiTW92ZWRQZXJtYW5lbnRseSIsIkZvdW5kIiwiU2VlT3RoZXIiLCJOb3RNb2RpZmllZCIsIlVzZVByb3h5IiwiVW51c2VkIiwiVGVtcG9yYXJ5UmVkaXJlY3QiLCJQZXJtYW5lbnRSZWRpcmVjdCIsIkJhZFJlcXVlc3QiLCJVbmF1dGhvcml6ZWQiLCJQYXltZW50UmVxdWlyZWQiLCJGb3JiaWRkZW4iLCJOb3RGb3VuZCIsIk1ldGhvZE5vdEFsbG93ZWQiLCJOb3RBY2NlcHRhYmxlIiwiUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkIiwiUmVxdWVzdFRpbWVvdXQiLCJDb25mbGljdCIsIkdvbmUiLCJMZW5ndGhSZXF1aXJlZCIsIlByZWNvbmRpdGlvbkZhaWxlZCIsIlBheWxvYWRUb29MYXJnZSIsIlVyaVRvb0xvbmciLCJVbnN1cHBvcnRlZE1lZGlhVHlwZSIsIlJhbmdlTm90U2F0aXNmaWFibGUiLCJFeHBlY3RhdGlvbkZhaWxlZCIsIkltQVRlYXBvdCIsIk1pc2RpcmVjdGVkUmVxdWVzdCIsIlVucHJvY2Vzc2FibGVFbnRpdHkiLCJMb2NrZWQiLCJGYWlsZWREZXBlbmRlbmN5IiwiVG9vRWFybHkiLCJVcGdyYWRlUmVxdWlyZWQiLCJQcmVjb25kaXRpb25SZXF1aXJlZCIsIlRvb01hbnlSZXF1ZXN0cyIsIlJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZSIsIlVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zIiwiSW50ZXJuYWxTZXJ2ZXJFcnJvciIsIk5vdEltcGxlbWVudGVkIiwiQmFkR2F0ZXdheSIsIlNlcnZpY2VVbmF2YWlsYWJsZSIsIkdhdGV3YXlUaW1lb3V0IiwiSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQiLCJWYXJpYW50QWxzb05lZ290aWF0ZXMiLCJJbnN1ZmZpY2llbnRTdG9yYWdlIiwiTG9vcERldGVjdGVkIiwiTm90RXh0ZW5kZWQiLCJOZXR3b3JrQXV0aGVudGljYXRpb25SZXF1aXJlZCIsIldlYlNlcnZlcklzRG93biIsIkNvbm5lY3Rpb25UaW1lZE91dCIsIk9yaWdpbklzVW5yZWFjaGFibGUiLCJUaW1lb3V0T2NjdXJyZWQiLCJTc2xIYW5kc2hha2VGYWlsZWQiLCJJbnZhbGlkU3NsQ2VydGlmaWNhdGUiLCJheGlvcyIsImNyZWF0ZUluc3RhbmNlIiwiZGVmYXVsdENvbmZpZyIsImluc3RhbmNlIiwiQ2FuY2VsVG9rZW4iLCJleGVjdXRvciIsInJlc29sdmVQcm9taXNlIiwiX2xpc3RlbmVycyIsIm9uZnVsZmlsbGVkIiwiX3Jlc29sdmUiLCJDYW5jZWwiLCJhbGwiLCJwcm9taXNlcyIsInNwcmVhZCIsImNhbGxiYWNrIiwicGF5bG9hZCIsImZvcm1Ub0pTT04iLCJkZWZhdWx0IiwicHJlZml4IiwicCIsImdldEpzb24iLCJlbmNvZGVVUkkiLCJzZWFyY2giLCJnZXRHZW9jb2RpbmdSZXN1bHRzIiwic2VhcmNoUGFyYW1zIiwibGFuZyIsImZvY3VzUG9pbnQiLCJzb3VyY2VzIiwicGVsaWFzVXJsIiwibWluaW1hbFJlZ2V4cCIsImdlb2NvZGluZ0xheWVycyIsInRleHQiLCJQRUxJQVNfVVJMIiwiX29iamVjdFNwcmVhZCIsImxheWVycyIsImZlYXR1cmVzIiwiZ2V0U3RvcHNGcm9tR2VvY29kaW5nIiwic3RvcHMiLCJVUkxfUEVMSUFTX1BMQUNFIiwiZ2lkcyIsInN0b3BTdGF0aW9uTWFwIiwic3RvcCIsInN0b3BPclN0YXRpb24iLCJpZHMiLCJhZGRlbmR1bSIsImxhc3RVcGRhdGVkIiwiZmF2b3VyaXRlSWQiLCJmaWx0ZXJPbGRTZWFyY2hlcyIsIm9sZFNlYXJjaGVzIiwiZHJvcExheWVycyIsIm1hdGNoaW5nT2xkU2VhcmNoZXMiLCJ0YWtlIiwibmV3SXRlbSIsInRpbWV0YWJsZUNsaWNrZWQiLCJhcnJvd0NsaWNrZWQiLCJyb3V0ZUxheWVycyIsImxvY2F0aW9uTGF5ZXJzIiwicGFya2luZ0xheWVycyIsInN0b3BMYXllcnMiLCJkZWJvdW5jZWRTZWFyY2giLCJkZWJvdW5jZSIsInRyYW5zcG9ydE1vZGUiLCJzZWFyY2hDb250ZXh0IiwiZmlsdGVyUmVzdWx0cyIsImdlb2NvZGluZ1NpemUiLCJwYXRoT3B0cyIsInJlZlBvaW50IiwiZ2V0UG9zaXRpb25zIiwiZ2V0RmF2b3VyaXRlTG9jYXRpb25zIiwiZ2V0T2xkU2VhcmNoZXMiLCJnZXRGYXZvdXJpdGVTdG9wcyIsInBhcmtpbmdBcmVhU291cmNlcyIsImdldExhbmd1YWdlIiwiZ2V0U3RvcEFuZFN0YXRpb25zUXVlcnkiLCJnZXRGYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnNRdWVyeSIsImdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9ucyIsImdldEZhdm91cml0ZVJvdXRlc1F1ZXJ5IiwiZ2V0RmF2b3VyaXRlUm91dGVzIiwiZ2V0Um91dGVzUXVlcnkiLCJpc1BlbGlhc0xvY2F0aW9uQXdhcmUiLCJsb2NhdGlvbkF3YXJlIiwiVVJMX1BFTElBUyIsImZlZWRJRHMiLCJnZW9jb2RpbmdTZWFyY2hQYXJhbXMiLCJnZW9jb2RpbmdTb3VyY2VzIiwiZ2V0RnV0dXJlUm91dGVzIiwiY2l0eUJpa2VOZXR3b3JrcyIsImFsbFRhcmdldHMiLCJhbGxTb3VyY2VzIiwic2VhcmNoQ29tcG9uZW50cyIsInNlYXJjaGVzIiwibGFuZ3VhZ2UiLCJsYXQiLCJsb24iLCJ0b0ZpeGVkIiwibW9kZSIsImdldEN1cnJlbnRQb3NpdGlvbklmRW1wdHkiLCJzZWxlY3RQb3NpdGlvbkZvbU1hcCIsIml0ZW1zIiwiZmF2b3VyaXRlTG9jYXRpb25zIiwiZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zIiwiZmF2b3VyaXRlU3RvcHMiLCJoYXNGYXZvdXJpdGVzIiwic2VsZWN0RnJvbU93bkxvY2F0aW9ucyIsImZhdm91cml0ZXMiLCJmaWx0ZXJGYXZvdXJpdGVMb2NhdGlvbnMiLCJsb2NhdGlvbkhpc3RvcnkiLCJmZWVkSWRzIiwiaGlzdG9yeSIsInVzZVN0b3BzIiwidXNlU3RhdGlvbnMiLCJzdG9wc0FuZFN0YXRpb25zIiwiZXZlcnkiLCJzdG9wc1N0YXRpb25zIiwiZmlsdGVyRmF2b3VyaXRlU3RvcHMiLCJkZWR1cGVzdG9wcyIsImZlZWRzIiwic3RvcEhpc3RvcnkiLCJmYXZvdXJpdGVSb3V0ZXMiLCJyb3V0ZUhpc3RvcnkiLCJmYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbiIsImZsYXR0ZW4iLCJsZWFkaW5nIiwiaTE4biIsImZhbGxiYWNrTG5nIiwicmVzb3VyY2VzIiwiZGUiLCJ0cmFuc2xhdGlvbiIsImFpcnBsYW5lIiwiYXJyaXZhbCIsImJhY2siLCJiaWtlcmVudGFsc3RhdGlvbiIsImJ1cyIsImN1cnJlbnRwb3NpdGlvbiIsImRlcGFydHVyZSIsImZhdm91cml0ZSIsImZlcnJ5Iiwib3dubG9jYXRpb25zIiwibG9hZGluZyIsInJhaWwiLCJzdHJlZXQiLCJzdWJ3YXkiLCJzdGF0aW9uIiwidHJhbSIsInZlbnVlIiwid2hlcmUiLCJwbGFjZSIsImVuIiwiYmlrZXBhcmsiLCJjYXJwYXJrIiwicmVxdWlyZWQiLCJ0cmFjayIsImZpIiwidmVoaWNsZXJlbnRhbHN0YXRpb24iLCJwbCIsInN2IiwiZGVmYXVsdE5TIiwicmVhY3QiLCJ1c2VTdXNwZW5zZSIsInN0eWxlSW5qZWN0IiwiY3NzIiwicmVmIiwiaW5zZXJ0QXQiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsInN0eWxlIiwiY3JlYXRlRWxlbWVudCIsImZpcnN0Q2hpbGQiLCJpbnNlcnRCZWZvcmUiLCJhcHBlbmRDaGlsZCIsInN0eWxlU2hlZXQiLCJjc3NUZXh0IiwiY3JlYXRlVGV4dE5vZGUiLCJpbml0IiwiZ2V0TG9jYWxhZG1pbiIsInN1Z2dlc3Rpb24iLCJnZXRTdG9wQ29kZSIsImdldE5hbWVMYWJlbCIsIm1lbW9pemUiLCJwbGFpbiIsImVzY2FwZVJlZ0V4cCIsImxvbmdOYW1lIiwiYWdlbmN5IiwiZm9ybWF0RmF2b3VyaXRlUGxhY2VMYWJlbCIsImNsb25lRGVlcCIsImlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudCIsIndoaWNoIiwia2V5Q29kZSIsInByZXZlbnREZWZhdWx0IiwiaXNQT0lTZWFyY2giLCJnZXRQbGF0Zm9ybSIsImxuZyIsIkdURlMiLCJtb2RlcyIsImdldFN1Z2dlc3Rpb25Db250ZW50Iiwic3VnZ2VzdGlvblR5cGUiLCJ0YWlsMSIsImxvY2FsaXR5IiwidGFpbDIiLCJuYW1lMSIsIm5hbWUyIiwidHJhbnNsYXRlZFRleHQiLCJ0cmFuc2xhdGVGdXR1cmVSb3V0ZVN1Z2dlc3Rpb25UaW1lIiwidGltZSIsIkRhdGVUaW1lIiwiZnJvbVNlY29uZHMiLCJhcnJpdmVCeSIsImhhc1NhbWUiLCJwbHVzIiwiZGF5cyIsInRvRm9ybWF0IiwiZ2V0U3VnZ2VzdGlvblZhbHVlIiwiZ2V0TGFiZWwiLCJzdWdnZXN0aW9uQXNBcmlhQ29udGVudCIsInN1Z2dlc3Rpb25zIiwiZmlyc3RTdWdnZXN0aW9uIiwibW9kdWxlIiwiZXhwb3J0cyIsInJlcXVpcmUkJDAiLCJuIiwiZyIsImlnbm9yZSIsInRvcE9uRW1wdHlIYXNoIiwic3BlZWQiLCJzcGVlZEFzRHVyYXRpb24iLCJkdXJhdGlvbk1heCIsImR1cmF0aW9uTWluIiwiY2xpcCIsIm9mZnNldCIsImVhc2luZyIsImN1c3RvbUVhc2luZyIsInVwZGF0ZVVSTCIsInBvcHN0YXRlIiwiZW1pdEV2ZW50cyIsImNoYXJBdCIsInN1YnN0ciIsInUiLCJJbnZhbGlkQ2hhcmFjdGVyRXJyb3IiLCJzY3JvbGxIZWlnaHQiLCJkb2N1bWVudEVsZW1lbnQiLCJvZmZzZXRIZWlnaHQiLCJjbGllbnRIZWlnaHQiLCJnZXRDb21wdXRlZFN0eWxlIiwiaGVpZ2h0Iiwib2Zmc2V0VG9wIiwiZm9jdXMiLCJhY3RpdmVFbGVtZW50Iiwic2V0QXR0cmlidXRlIiwib3V0bGluZSIsInNjcm9sbFRvIiwiQ3VzdG9tRXZlbnQiLCJidWJibGVzIiwiZGV0YWlsIiwiYW5jaG9yIiwidG9nZ2xlIiwiZGlzcGF0Y2hFdmVudCIsImYiLCJkIiwiY2FuY2VsU2Nyb2xsIiwiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCJhbmltYXRlU2Nyb2xsIiwidGFnTmFtZSIsInkiLCJwYWdlWU9mZnNldCIsInF1ZXJ5U2VsZWN0b3IiLCJFIiwiTyIsIm9mZnNldFBhcmVudCIsImlubmVySGVpZ2h0IiwiUyIsIkkiLCJNIiwiTCIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsInB1c2hTdGF0ZSIsInNtb290aFNjcm9sbCIsInRpdGxlIiwibWF0Y2hNZWRpYSIsImRlZmF1bHRQcmV2ZW50ZWQiLCJidXR0b24iLCJtZXRhS2V5IiwiY3RybEtleSIsInNoaWZ0S2V5IiwiY2xvc2VzdCIsImhvc3RuYW1lIiwicGF0aG5hbWUiLCJoYXNoIiwicmVwbGFjZVN0YXRlIiwiZGVzdHJveSIsIkVsZW1lbnQiLCJfX2NyZWF0ZUJpbmRpbmciLCJfX2V4cG9ydFN0YXIiLCJ1c2VBcnJvd05hdmlnYXRpb24iLCJsaXN0SXRlbXMiLCJvbkFycm93VXBPckRvd24iLCJ1c2VTdGF0ZSIsInVzZUNhbGxiYWNrIiwidXNlRWZmZWN0Iiwic2VsZWN0ZWRJbmRleCIsInVzZURlYm91bmNlIiwidXNlRWxlbWVudFNpemUiLCJ1c2VSZWYiLCJ3aWR0aCIsImNsaWVudFdpZHRoIiwidXNlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLCJpc0ludGVyc2VjdGluZyIsIkludGVyc2VjdGlvbk9ic2VydmVyIiwib2JzZXJ2ZSIsInVub2JzZXJ2ZSIsImNvbnRhaW5lclJlZiIsImlzVmlzaWJsZSIsInVzZUlzQnJlYWtwb2ludCIsInhzIiwibW9iaWxlU21hbGwiLCJtb2JpbGUiLCJ0YWJsZXQiLCJ0YWJsZXRMYXJnZSIsImRlc2t0b3BTbWFsbCIsImRlc2t0b3AiLCJkZXNrdG9wTGFyZ2UiLCJpbm5lcldpZHRoIiwidXNlT25SZXNpemUiLCJ1c2VJc0xvYWRpbmdBZnRlckVycm9yIiwidXNlSXNNb2JpbGUiLCJ1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0IiwidXNlTGF5b3V0RWZmZWN0IiwidXNlT25Mb3NlRm9jdXNXaXRoaW4iLCJ3YXRjaCIsInBhc3NpdmUiLCJ1c2VPbldpbmRvd0ZvY3VzIiwidmlzaWJpbGl0eVN0YXRlIiwidXNlT3V0c2lkZVJlYWN0ZXIiLCJjb250YWlucyIsInVzZVJ1bkFmdGVyVXBkYXRlIiwidXNlU2Nyb2xsTG9jayIsImxvY2siLCJzY3JvbGxZIiwidG9wIiwidW5sb2NrIiwiX19pbXBvcnREZWZhdWx0IiwiX19lc01vZHVsZSIsInVzZVNtb290aFNjcm9sbCIsIkZ1bmN0aW9uIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwib2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsIlN1Z2dlc3Rpb24iLCJtZW1vIiwiX3JlZiIsImdldEl0ZW1Qcm9wcyIsImhpZ2hsaWdodGVkSW5kZXgiLCJpdGVtSW5kZXgiLCJzdHlsZXMiLCJyZXN0IiwiX2V4Y2x1ZGVkIiwidXNlVHJhbnNsYXRpb24iLCJSZWFjdCIsImNsYXNzTmFtZSIsImN4Iiwic3VnZ2VzdGlvbkhpZ2hsaWdodGVkIiwiU3VnZ2VzdGlvbkl0ZW0iLCJpdGVtU2hhcGUiLCJOT0RFX0VOViIsIlByb3BUeXBlcyIsInNoYXBlIiwic3RyaW5nIiwic2VsZWN0ZWRJY29uSWQiLCJpY29uQ29sb3IiLCJjb2xvciIsImJvb2wiLCJwcm9wVHlwZXMiLCJpc1JlcXVpcmVkIiwiZnVuYyIsIm9iamVjdE9mIiwiU3VnZ2VzdGlvbnMiLCJfcmVmMiIsImdldE1lbnVQcm9wcyIsImhpZGRlbiIsInJlbmRlckNsZWFySGlzdG9yeUJ1dHRvbiIsImhhbmRsZUNsZWFySGlzdG9yeSIsIl9leGNsdWRlZDIiLCJzdWdnZXN0aW9uc0NvbnRhaW5lck9wZW4iLCJzdWdnZXN0aW9uc0NvbnRhaW5lciIsInN1Z2dlc3Rpb25zTGlzdCIsIm9uQ2xpY2siLCJhcnJheU9mIiwiZGVmYXVsdFByb3BzIiwiQ2xlYXJCdXR0b24iLCJjbGVhcklucHV0Iiwib25LZXlEb3duIiwiSWNvbiIsImltZyIsInBsYWNlaG9sZGVyIiwiZ2V0SW5wdXRQcm9wcyIsImdldExhYmVsUHJvcHMiLCJhcmlhTGFiZWwiLCJpbnB1dFJlZiIsInJlbmRlckxhYmVsIiwiaXNNb2JpbGUiLCJpbnB1dENsYXNzTmFtZSIsImNsZWFyQnV0dG9uQ29sb3IiLCJhdXRvRm9jdXMiLCJpbnB1dE9uQmx1ciIsIm9uVmFsdWVDaGFuZ2UiLCJjb250YWluZXIiLCJodG1sRm9yIiwidGhpbiIsImhhc1ZhbHVlIiwib25CbHVyIiwib25DaGFuZ2UiLCJvbmVPZlR5cGUiLCJvYmplY3QiLCJNb2JpbGVWaWV3IiwiYXBwRWxlbWVudCIsIm9uU2VsZWN0ZWRJdGVtQ2hhbmdlIiwiZm9udFdlaWdodHMiLCJjbGVhck9sZFNlYXJjaGVzIiwic3VnZ2VzdGlvblByb3BzIiwiYXJpYVByb3BzIiwibW9iaWxlTGFiZWwiLCJzaG93U2Nyb2xsIiwiZGlzcGF0Y2giLCJjb2xvcnMiLCJob29rcyIsIm1vYmlsZVN0eWxlcyIsIm1vYmlsZU5vU2Nyb2xsU3R5bGVzIiwiaW5wdXRJZCIsImlzRGlhbG9nT3BlbiIsInNldERpYWxvZ09wZW4iLCJSZWFjdE1vZGFsIiwic2V0QXBwRWxlbWVudCIsInJlbmRlck1vYmlsZSIsInNldEhpZ2hsaWdodGVkSW5kZXgiLCJ1c2VDb21ib2JveCIsImlucHV0VmFsdWUiLCJpc09wZW4iLCJjaGFuZ2VzIiwic2VsZWN0ZWRJdGVtIiwiZGVmYXVsdEhpZ2hsaWdodGVkSW5kZXgiLCJvbklucHV0VmFsdWVDaGFuZ2UiLCJzdGF0ZUNoYW5nZVR5cGVzIiwiSW5wdXRDaGFuZ2UiLCJzdGF0ZVJlZHVjZXIiLCJvbGRTdGF0ZSIsIklucHV0S2V5RG93bkVzY2FwZSIsIklucHV0S2V5RG93bkVudGVyIiwiZW50ZXJQZW5kaW5nIiwiSW5wdXRCbHVyIiwiaXRlbVRvU3RyaW5nIiwic3VwcHJlc3NSZWZFcnJvciIsImhhbmRsZVZhbHVlQ2hhbmdlIiwibmV3VmFsdWUiLCJhcmlhUmVxdWlyZWRUZXh0IiwiU2VhcmNoQmFySWQiLCJhcmlhQ3VycmVudFN1Z2dlc3Rpb24iLCJvdmVybGF5Q2xhc3NOYW1lIiwic2hvdWxkUmV0dXJuRm9jdXNBZnRlckNsb3NlIiwic2hvdWxkQ2xvc2VPbkVzYyIsInByaW1hcnkiLCJhY2Nlc3NpYmxlUHJpbWFyeSIsImhvdmVyIiwibWVkaXVtIiwidGFiSW5kZXgiLCJEaWFsb2dNb2RhbCIsImlzTW9kYWxPcGVuIiwiaGFuZGxlQ2xvc2UiLCJoZWFkZXJUZXh0IiwicHJpbWFyeUJ1dHRvblRleHQiLCJzZWNvbmRhcnlCdXR0b25UZXh0IiwicHJpbWFyeUJ1dHRvbk9uQ2xpY2siLCJzZWNvbmRhcnlCdXR0b25PbkNsaWNrIiwic2VhcmNoUmVkdWNlciIsImFjdGlvbiIsInNob3dPd25QbGFjZXMiLCJwZW5kaW5nU2VsZWN0aW9uIiwiaXNDbGVhcmVkIiwiaW5pdGlhbFN0YXRlIiwiaXNNZW51T3BlbiIsInBvc2l0aW9ucyIsIkRUQXV0b3N1Z2dlc3QiLCJvblNlbGVjdCIsImljb24iLCJvbkNsZWFyIiwiZ2V0QXV0b1N1Z2dlc3RJY29ucyIsImhhbmRsZVZpYVBvaW50cyIsImZvY3VzQ2hhbmdlIiwic3RvcmVSZWYiLCJ0cmFuc2xhdGVkUGxhY2Vob2xkZXIiLCJtb2RlU2V0IiwiaXNFbWJlZGRlZCIsInVzZVJlZHVjZXIiLCJmZXRjaFN1Z2dlc3Rpb25zIiwiaXNMb2NhdGlvblNlYXJjaCIsIm5ld1RhcmdldHMiLCJnZXROZXdUYXJnZXRzIiwib3duUGxhY2VzIiwidXNlQWxsIiwiZXhlY3V0ZVNlYXJjaCIsInNlYXJjaFJlc3VsdCIsIm5ld1N1Z2dlc3Rpb25zIiwidHJhbnNsYXRlZFN1Z2dlc3Rpb24iLCJzZWxlY3RTdWdnZXN0aW9uIiwiYmx1ciIsInNlbGVjdEl0ZW0iLCJvcGVuTWVudSIsImNsb3NlTWVudSIsIkl0ZW1DbGljayIsIklucHV0Q2xpY2siLCJvbklzT3BlbkNoYW5nZSIsInBlbmRpbmdFbnRlciIsImJhc2VJdGVtUHJvcHMiLCJ1c2VNZW1vIiwiYXJpYUZhdm91cml0ZVN0cmluZyIsImFyaWFMYWJlbFRleHQiLCJnZXRBcmlhUHJvcHMiLCJhcmlhQmFySWQiLCJhcmlhTGFiZWxJbnN0cnVjdGlvbnMiLCJtb3ZpbmdUb0Rlc3RpbmF0aW9uRmllbGRUZXh0IiwiYXJpYVN1Z2dlc3Rpb25MZW4iLCJjb3VudCIsInNlbGVjdGlvbiIsIkZyYWdtZW50IiwibW9iaWxlQ2xlYXJPbGRTZWFyY2hlcyIsImNsZWFyRnV0dXJlUm91dGVzIiwicm91dGVzUHJlZml4Iiwic3RvcHNQcmVmaXgiLCJkZWZhdWx0Q29sb3JzIiwiSTE4bmV4dFByb3ZpZGVyIl0sIm1hcHBpbmdzIjoib3hEQUFBLFNBQVNBLEVBQVFDLEdBR2YsT0FBT0QsRUFBVSxtQkFBcUJFLFFBQVUsaUJBQW1CQSxPQUFPQyxTQUFXLFNBQVVGLEdBQzdGLGNBQWNBLENBQ2hCLEVBQUksU0FBVUEsR0FDWixPQUFPQSxHQUFLLG1CQUFxQkMsUUFBVUQsRUFBRUcsY0FBZ0JGLFFBQVVELElBQU1DLE9BQU9HLFVBQVksZ0JBQWtCSixDQUNwSCxFQUFHRCxFQUFRQyxFQUNiLENDTkEsU0FBU0ssRUFBY0MsR0FDckIsSUFBSUMsRUNGTixTQUFxQkQsRUFBR0UsR0FDdEIsR0FBSSxVQUFZVCxFQUFRTyxLQUFPQSxFQUFHLE9BQU9BLEVBQ3pDLElBQUlHLEVBQUlILEVBQUVMLE9BQU9TLGFBQ2pCLFFBQUksSUFBV0QsRUFBRyxDQUNoQixJQUFJRixFQUFJRSxFQUFFRSxLQUFLTCxFQUFHRSxHQUNsQixHQUFJLFVBQVlULEVBQVFRLEdBQUksT0FBT0EsRUFDbkMsTUFBTSxJQUFJSyxVQUFVLCtDQUN0QixDQUNBLE9BQVEsV0FBYUosRUFBSUssT0FBU0MsUUFBUVIsRUFDNUMsQ0RQVUksQ0FBWUosRUFBRyxVQUN2QixNQUFPLFVBQVlQLEVBQVFRLEdBQUtBLEVBQUlBLEVBQUksRUFDMUMsQ0VKQSxTQUFTUSxFQUFnQk4sRUFBR0QsRUFBR0YsR0FDN0IsT0FBUUUsRUFBSUgsRUFBY0csTUFBT0MsRUFBSU8sT0FBT0MsZUFBZVIsRUFBR0QsRUFBRyxDQUMvRFUsTUFBT1osRUFDUGEsWUFBWSxFQUNaQyxjQUFjLEVBQ2RDLFVBQVUsSUFDUFosRUFBRUQsR0FBS0YsRUFBR0csQ0FDakIsQ0NHZSxTQUFTYSxFQUFNQyxFQUFNQyxHQUNsQyxPQUFPRCxHQUFRQyxHQUFRRCxJQUFTQyxDQUNsQyxDQ1lBLE1BQU1DLEVBQWlCLENBQUMsT0FBUSxVQUFXLGdCQUFpQixvQkFDdERDLEVBQXNCLENBQUMsZ0NBQWlDLGVBRTlELFNBQVNDLEVBQWFDLEdBQ3BCLElBQUtBLEVBQ0gsTUFBTyxHQUVULE1BQU1DLEVBQVFELEVBQUdFLE1BQU0sS0FDdkIsT0FBcUIsSUFBakJELEVBQU1FLE9BQ0QsR0FFRixZQUFZRixFQUFNLGtCQUFrQkEsRUFBTSxJQUNuRCxDQUVlLFNBQVNHLEVBQVlDLEVBQU9DLEdBQ3pDLE1BQU1DLEVBQVNGLEVBQU1HLFdBQ2ZDLEVBQVNILEVBQU1FLFdBRXJCLEdBQW1CLGdCQUFmSCxFQUFNSyxNQUF5QyxnQkFBZkosRUFBTUksS0FBd0IsQ0FDaEUsTUFBTUMsRUFBS0osRUFBT0ssT0FDWkMsRUFBS04sRUFBT08sWUFDWkMsRUFBS04sRUFBT0csT0FDWkksRUFBS1AsRUFBT0ssWUFLbEIsTUFIYyxHQUFHSCxFQUFHTSxTQUFTTixFQUFHTyxlQUFlTCxFQUFHSSxTQUFTSixFQUFHSyxlQUNoRCxHQUFHSCxFQUFHRSxTQUFTRixFQUFHRyxlQUFlRixFQUFHQyxTQUFTRCxFQUFHRSxZQUdoRSxDQUNBLEdBQW1CLGdCQUFmYixFQUFNSyxNQUF5QyxnQkFBZkosRUFBTUksS0FDeEMsT0FBTyxFQUVULEdBQ0VaLEVBQW9CcUIsU0FBU1osRUFBT2EsUUFDcEN0QixFQUFvQnFCLFNBQVNWLEVBQU9XLE9BQ3BDLENBR0EsT0FGWWIsRUFBT2MsS0FBT3RCLEVBQWFRLEVBQU9lLGFBQ2xDYixFQUFPWSxLQUFPdEIsRUFBYVUsRUFBT2EsU0FFaEQsQ0FDQSxHQUFJZixFQUFPZ0IsUUFBVWQsRUFBT2MsT0FDMUIsT0FBT2hCLEVBQU9nQixTQUFXZCxFQUFPYyxPQUVsQyxHQUNFMUIsRUFBZXNCLFNBQVNaLEVBQU9hLFFBQy9CdkIsRUFBZXNCLFNBQVNWLEVBQU9XLFFBQy9CYixFQUFPYyxLQUNQWixFQUFPWSxJQUVQLE9BQU9kLEVBQU9jLE1BQVFaLEVBQU9ZLElBRy9CLE1BQU1HLEVBQUtuQixHQUFTQSxFQUFNb0IsU0FBV3BCLEVBQU1vQixTQUFTQyxpQkFBY0MsRUFDNURDLEVBQUt0QixHQUFTQSxFQUFNbUIsU0FBV25CLEVBQU1tQixTQUFTQyxpQkFBY0MsRUFFbEUsU0FBSUgsR0FBTUksR0FFSkMsS0FBS0MsSUFBSU4sRUFBRyxHQUFLSSxFQUFHLElBQU0sTUFBUUMsS0FBS0MsSUFBSU4sRUFBRyxHQUFLSSxFQUFHLElBQU0sT0FHNURsQyxFQUFNYSxFQUFPVSxLQUFNUixFQUFPUSxPQUMxQnZCLEVBQU1hLEVBQU93QixNQUFPdEIsRUFBT3NCLFFBQzNCckMsRUFBTWEsRUFBT3lCLFFBQVN2QixFQUFPdUIsVUFDN0J0QyxFQUFNYSxFQUFPeUIsUUFBU3ZCLEVBQU9zQixRQUM3QnJDLEVBQU1hLEVBQU93QixNQUFPdEIsRUFBT3VCLFVBT25DLENDM0ZBLE1BQU1DLEVBQVlDLEdBQ1hDLEVBQUFBLFFBQVNELEdBR1BBLEVBQUlFLGNBRkYsR0FLTEMsRUFBMEJILEdBQ3ZCQSxFQUFJaEMsTUFBTSxhQUdib0MsRUFBZ0RKLEdBQzdDLGtCQUFrQkssS0FBS0wsR0FNMUJNLEVBRUUsT0FGRkEsRUFHYSxrQkFIYkEsR0FJVyxnQkFKWEEsR0FLYyxtQkFMZEEsR0FNWSxpQkFOWkEsR0FPWSxpQkFQWkEsR0FRMkIsZ0NBUjNCQSxHQVNTLGNBVFRBLEdBVUssVUFWTEEsR0FXVyxnQkFYWEEsR0FZb0IsZUFacEJBLEdBYUUsT0FiRkEsR0FnQmtCLGNBaEJsQkEsR0FpQkssVUFqQkxBLEdBa0JNLFdBRUNDLEdBQVNBLEVBQUdyQixRQUFPVixVQUNwQixTQUFWVSxHQUNVLGtCQUFWQSxHQUNTLFNBQVRWLEdBQ1Msa0JBQVRBLEVBa0ZXZ0MsR0FBZUEsQ0FBQ3RCLEVBQU91QixLQUNsQyxPQUFRdkIsR0FDTixLQUFLb0IsRUFDSCxPQUFPLEVBQ1QsS0FBS0EsRUFDSCxNQUFPLEdBQ1QsS0FBS0EsR0FDSCxNQUFPLEdBQ1QsS0FBS0EsR0FDSCxNQUFPLElBQ1QsS0FBS0EsR0FDTCxLQUFLQSxHQUNMLEtBQUtBLEdBQ0wsS0FBS0EsR0FDTCxLQUFLQSxHQUNILE1BQU8sSUFDVCxLQUFLQSxHQUNILE1BQU8sSUFDVCxLQUFLQSxHQUNILE9BQUlMLEVBQUFBLFFBQVNRLElBQXNDLElBQTNCQSxFQUFPQyxRQUFRLFFBQzlCLElBRUYsSUFFVCxLQUFLSixHQUVMLEtBQUtBLEdBRUwsS0FBS0EsR0FDSCxNQUFPLElBQ1QsS0FBS0EsR0FDSCxNQUFPLElBQ1QsUUFFRSxNQUFPLE1BbUJBSyxHQUFvQkEsQ0FBQ0MsRUFBWUMsRUFBU0MsRUFBTyxNQUM1RCxJQUFLQyxNQUFNQyxRQUFRSCxLQUFhQSxFQUFRNUMsT0FDdEMsT0FBTzRDLEVBRVQsTUFBTUksRUFBbUI3RCxHQUN2QjZDLFVBQVM3QyxJQUFVd0QsR0FBY0EsRUFBV1AsS0FBS2pELEdBRTdDOEQsRUFBaUJuQixFQUFVZSxHQUMzQkssRUFBZUYsRUFBaUJDLEdBRWhDRSxFQUFpQkMsRUFBQUEsUUFDckJSLEVBQVFTLE9BQU81RSxHQUFLQSxHQUNwQixDQUVFNkUsR0FDRUosR0FDQUYsRUFBaUJsQixFQUFVd0IsRUFBT2pELFdBQVdrRCxhQUNzQixJQUFuRXpCLEVBQVV3QixFQUFPakQsV0FBV2tELFdBQVdkLFFBQVFRLEdBQzNDLEVBQ0EsRUFFTkssSUFDRSxNQUFNRSxXQUFFQSxFQUFVdkMsTUFBRUEsRUFBS3VCLE9BQUVBLEdBQVdjLEVBQU9qRCxXQUM3QyxHQUE4QixJQUExQjRDLEVBQWVqRCxPQUdqQixPQUFPdUMsR0FBYXRCLEVBQU91QixHQUs3QixJQUFLZ0IsRUFFSCxPQUNFakIsR0FBYXRCLEVBQU91QixHQWxJWGlCLEVBQUNSLEVBQWdCUyxJQUMvQjFCLEVBQUFBLFFBQVNpQixJQUE2QyxJQUExQkEsRUFBZWpELE9BSTdCLENBQUMsT0FBUSxRQUFTLFVBQVcsYUFFN0MyRCxJQUFJN0MsSUFDSSxDQUFFQSxPQUFNM0IsTUFBT3VFLEVBQWlCNUMsTUFFeEN1QyxPQUFPTyxHQUFXNUIsRUFBQUEsUUFBUzRCLEVBQVF6RSxRQUFVeUUsRUFBUXpFLE1BQU1hLE9BQVMsR0FDcEUyRCxJQUFJQyxJQUNILElBQUlDLEVBQWtCL0IsRUFBVThCLEVBQVF6RSxPQUN4QyxPQUFnRCxJQUE1QzBFLEVBQWdCcEIsUUFBUVEsSUFFUCxjQUFqQlcsRUFBUTlDLE1BQ1JxQixFQUE4QzBCLE1BSzdDQSxHQUFtQjNCLEVBQXdCMkIsSUFHdkMsR0FBTVosRUFBZWpELE9BQVM2RCxFQUFnQjdELFFBSy9DLEdBQU1pRCxFQUFlakQsUUFBV2lELEVBQWVqRCxPQUFTLEtBRWpFOEQsT0FDQyxDQUFDQyxFQUFVQyxJQUFhQSxFQUFVRCxFQUFXQyxFQUFVRCxFQUN2RCxHQS9CSyxFQWlJQ04sQ0FBTVIsRUFBZ0JLLEVBQU9qRCxZQUlqQyxPQUFRWSxHQUNOLEtBQUtvQixHQUVILE9BQU9tQixHQURrQyxJQUEzQmhCLEVBQU9DLFFBQVEsUUFBZ0IsSUFBTyxLQUd0RCxLQUFLSixHQUVMLEtBQUtBLEdBRUwsS0FBS0EsR0FDSCxPQUFPbUIsRUFBYSxJQUN0QixLQUFLbkIsR0FDSCxPQUFPbUIsRUFBYSxJQUN0QixRQUNFLE9BQU9BLElBR2JGLElBQ0UsR0FBSUEsRUFBT2pELFdBQVdrRCxVQUNwQixPQUFPcEIsRUFDTG1CLEVBQU9qRCxXQUFXa0QsV0FFaEJyQixFQUF3Qm9CLEVBQU9qRCxXQUFXa0QsV0FBVyxHQUNyREQsRUFBT2pELFdBQVdrRCxXQUkxQkQsSUFDRSxHQUFJQSxFQUFPakQsV0FBV2tELFVBQ3BCLE9BQU9wQixFQUNMbUIsRUFBT2pELFdBQVdrRCxXQUVoQnJCLEVBQXdCb0IsRUFBT2pELFdBQVdrRCxXQUFXLEdBQ3JERCxFQUFPakQsV0FBV2tELFdBSTFCLHVCQUVGLENBQUMsT0FBUSxPQUFRLE1BQU8sTUFBTyxRQUdqQyxPQUFPVSxFQUFBQSxRQUFTZCxFQUFnQmxELElBU3JCaUUsR0FBY0EsQ0FBQ3BELEVBQU1xRCxJQUU5QkEsY0FFQXJELEVBQUtzRCxZQUFZRCxHQUVWckQsRUFBS3VELFVBQVUsRUFBR3ZELEVBQUtzRCxZQUFZRCxHQUFZLEdBRWpEckQsRUNsUU0sU0FBU3dELEdBQXNCQyxFQUFNQyxFQUFPQyxHQUN6RCxHQUFxQixpQkFBVkQsR0FBc0JBLEVBQU14RSxPQUFTLEVBQUcsQ0FDakQsTUFBTTBFLEVBQVFGLEVBQU12QyxjQUFjMEMsT0FDNUJDLEVBQVlGLEVBQU0xRCxTQUFTLE1BQVEwRCxFQUFNMUQsU0FBUyxLQUN4RCxPQUFPdUQsRUFBS2xCLE9BQU93QixJQUNqQixJQUFJL0UsRUFBUSxHQUNaMkUsRUFBT0ssUUFBUUMsSUFDYixJQUFJNUYsRUFBUTZGLEVBQUFBLFFBQUlILEVBQU1FLEdBR25CSCxHQUNVLHFCQUFWRyxHQUEwQyxZQUFWQSxJQUNqQzVGLElBR0FBLEVBQVFBLEVBQU1ZLE1BQU0sS0FDaEJaLEVBQU1hLE9BQVMsRUFDakJiLEVBQU04RixPQUFPOUYsRUFBTWEsT0FBUyxFQUFHLEdBQ3RCYixFQUFNYSxPQUFTLEdBQ3hCYixFQUFNOEYsT0FBTzlGLEVBQU1hLE9BQVMsRUFBRyxHQUVqQ2IsRUFBUUEsRUFBTStGLEtBQUssTUFFakIvRixJQUVBVyxFQURFOEUsRUFDTTlFLEVBQU1xRixPQUFPaEcsRUFBTThDLGVBRW5CbkMsRUFBTXFGLE9BQ1poRyxFQUFNOEMsY0FBY21ELFFBQVEsS0FBTSxLQUFLckYsTUFBTSxTQUtyRCxJQUFLLElBQUl2QixFQUFJLEVBQUdBLEVBQUlzQixFQUFNRSxPQUFReEIsSUFDaEMsR0FBZ0MsSUFBNUJzQixFQUFNdEIsR0FBR2lFLFFBQVFpQyxHQUVuQixPQUFPLEVBR1gsT0FBTyxHQUVYLENBRUEsT0FBT0gsQ0FDVCxDQ3pEZSxTQUFTYyxHQUFLQyxFQUFJQyxHQUMvQixPQUFPLFdBQ0wsT0FBT0QsRUFBR0UsTUFBTUQsRUFBU0UsVUFDM0IsQ0FDRixDQ1BBLE1BQU1DLFNBQUVBLElBQWF6RyxPQUFPWixXQUN0QnNILGVBQUVBLElBQW1CMUcsUUFDckJkLFNBQUVBLEdBQVF5SCxZQUFFQSxJQUFnQjFILE9BRTVCMkgsSUFBV0MsR0FHZDdHLE9BQU84RyxPQUFPLE1BSFdDLElBQzFCLE1BQU1qRSxFQUFNMkQsR0FBUzlHLEtBQUtvSCxHQUMxQixPQUFPRixHQUFNL0QsS0FBUytELEdBQU0vRCxHQUFPQSxFQUFJa0UsTUFBTSxNQUFPaEUsaUJBRnZDLElBQUU2RCxHQUtqQixNQUFNSSxHQUFjM0YsSUFDbEJBLEVBQU9BLEVBQUswQixjQUNKK0QsR0FBVUgsR0FBT0csS0FBV3pGLEdBR2hDNEYsR0FBYzVGLEdBQVV5RixVQUFpQkEsSUFBVXpGLEdBU25Ed0MsUUFBRUEsSUFBWUQsTUFTZHNELEdBQWNELEdBQVcsYUFTL0IsU0FBU0UsR0FBU0MsR0FDaEIsT0FDVSxPQUFSQSxJQUNDRixHQUFZRSxJQUNPLE9BQXBCQSxFQUFJbEksY0FDSGdJLEdBQVlFLEVBQUlsSSxjQUNqQm1JLEdBQVdELEVBQUlsSSxZQUFZaUksV0FDM0JDLEVBQUlsSSxZQUFZaUksU0FBU0MsRUFFN0IsQ0FTQSxNQUFNRSxHQUFnQk4sR0FBVyxlQTBCakMsTUFBTWxFLEdBQVdtRSxHQUFXLFVBUXRCSSxHQUFhSixHQUFXLFlBU3hCTSxHQUFXTixHQUFXLFVBU3RCTyxHQUFZVixHQUFvQixPQUFWQSxHQUFtQyxpQkFBVkEsRUFpQi9DVyxHQUFpQkwsSUFDckIsR0FBb0IsV0FBaEJULEdBQU9TLEdBQ1QsT0FBTyxFQUdULE1BQU1qSSxFQUFZc0gsR0FBZVcsR0FDakMsUUFDaUIsT0FBZGpJLEdBQ0NBLElBQWNZLE9BQU9aLFdBQ2dCLE9BQXJDWSxPQUFPMEcsZUFBZXRILElBQ3RCdUgsTUFBZVUsR0FDZm5JLE1BQVltSSxJQWdDWk0sR0FBU1YsR0FBVyxRQVNwQlcsR0FBU1gsR0FBVyxRQWtDcEJZLEdBQVNaLEdBQVcsUUFTcEJhLEdBQWFiLEdBQVcsWUEwQjlCLE1BQU1jLEdBUHNCLG9CQUFmQyxXQUFtQ0EsV0FDMUIsb0JBQVRDLEtBQTZCQSxLQUNsQixvQkFBWEMsT0FBK0JBLE9BQ3BCLG9CQUFYQyxPQUErQkEsT0FDbkMsQ0FBQSxFQUlIQyxRQUFxQyxJQUFmTCxHQUFFTSxTQUEyQk4sR0FBRU0sY0FBVzlGLEVBd0JoRStGLEdBQW9CckIsR0FBVyxvQkFFOUJzQixHQUFrQkMsR0FBV0MsR0FBWUMsSUFBYSxDQUMzRCxpQkFDQSxVQUNBLFdBQ0EsV0FDQWhFLElBQUl1QyxJQTRCTixTQUFTcEIsR0FBUThDLEVBQUt0QyxHQUFJdUMsV0FBRUEsR0FBYSxHQUFVLElBRWpELEdBQUlELFFBQ0YsT0FHRixJQUFJcEosRUFDQXNKLEVBUUosR0FMbUIsaUJBQVJGLElBRVRBLEVBQU0sQ0FBQ0EsSUFHTDdFLEdBQVE2RSxHQUVWLElBQUtwSixFQUFJLEVBQUdzSixFQUFJRixFQUFJNUgsT0FBUXhCLEVBQUlzSixFQUFHdEosSUFDakM4RyxFQUFHMUcsS0FBSyxLQUFNZ0osRUFBSXBKLEdBQUlBLEVBQUdvSixPQUV0QixDQUVMLEdBQUl2QixHQUFTdUIsR0FDWCxPQUlGLE1BQU1HLEVBQU9GLEVBQWE1SSxPQUFPK0ksb0JBQW9CSixHQUFPM0ksT0FBTzhJLEtBQUtILEdBQ2xFSyxFQUFNRixFQUFLL0gsT0FDakIsSUFBSWtJLEVBRUosSUFBSzFKLEVBQUksRUFBR0EsRUFBSXlKLEVBQUt6SixJQUNuQjBKLEVBQU1ILEVBQUt2SixHQUNYOEcsRUFBRzFHLEtBQUssS0FBTWdKLEVBQUlNLEdBQU1BLEVBQUtOLEVBRWpDLENBQ0YsQ0FVQSxTQUFTTyxHQUFRUCxFQUFLTSxHQUNwQixHQUFJN0IsR0FBU3VCLEdBQ1gsT0FBTyxLQUdUTSxFQUFNQSxFQUFJakcsY0FDVixNQUFNOEYsRUFBTzlJLE9BQU84SSxLQUFLSCxHQUN6QixJQUNJUSxFQURBNUosRUFBSXVKLEVBQUsvSCxPQUViLEtBQU94QixLQUFNLEdBRVgsR0FEQTRKLEVBQU9MLEVBQUt2SixHQUNSMEosSUFBUUUsRUFBS25HLGNBQ2YsT0FBT21HLEVBR1gsT0FBTyxJQUNULENBRUEsTUFBTUMsR0FFc0Isb0JBQWZwQixXQUFtQ0EsV0FDdkIsb0JBQVRDLEtBQXVCQSxLQUF5QixvQkFBWEMsT0FBeUJBLE9BQVNDLE9BR2pGa0IsR0FBb0JDLElBQWFuQyxHQUFZbUMsSUFBWUEsSUFBWUYsR0FpRjNFLE1Bc0pNRyxJQUFpQkMsR0FLRSxvQkFBZkMsWUFBOEIvQyxHQUFlK0MsWUFIN0MxQyxHQUNDeUMsSUFBY3pDLGFBQWlCeUMsSUFIckIsSUFBRUEsR0FldkIsTUFpQ01FLEdBQWF6QyxHQUFXLG1CQVN4QjBDLEdBQWlCLEdBQ2xCQSxvQkFDSCxDQUFDaEIsRUFBS2lCLElBQ0pELEVBQWVoSyxLQUFLZ0osRUFBS2lCLEdBSE4sQ0FJckI1SixPQUFPWixZQUVIeUsscUJBQUVBLElBQXlCN0osT0FBT1osVUFTbEMwSyxHQUFXN0MsR0FBVyxVQUV0QjhDLEdBQW9CLENBQUNwQixFQUFLcUIsS0FDOUIsTUFBTUMsRUFBY2pLLE9BQU9rSywwQkFBMEJ2QixHQUMvQ3dCLEVBQXFCLENBQUEsRUFFM0J0RSxHQUFRb0UsRUFBYSxDQUFDRyxFQUFZdkksS0FDaEMsSUFBSXdJLEdBQzJDLEtBQTFDQSxFQUFNTCxFQUFRSSxFQUFZdkksRUFBTThHLE1BQ25Dd0IsRUFBbUJ0SSxHQUFRd0ksR0FBT0QsS0FJdENwSyxPQUFPc0ssaUJBQWlCM0IsRUFBS3dCLElBb0YvQixNQTBDTUksR0FBWXRELEdBQVcsaUJBeUJ2QnVELElBQWtCQyxHQXVCRyxtQkFBakJDLGFBdkJxQ0MsR0F1QlJyRCxHQUFXOEIsR0FBUXdCLGFBdEJwREgsR0FDS0MsYUFHRkMsSUFDREUsR0FlQyxTQUFTcEksS0FBS3FJLFdBZlJDLEdBZW9CLEdBZDNCM0IsR0FBUTRCLGlCQUNOLFVBQ0EsRUFBR3pILFNBQVEwSCxXQUNMMUgsSUFBVzZGLElBQVc2QixJQUFTSixJQUNqQ0UsR0FBVWhLLFFBQVVnSyxHQUFVRyxPQUFWSCxLQUd4QixHQUdNSSxJQUNOSixHQUFVSyxLQUFLRCxHQUNmL0IsR0FBUXdCLFlBQVlDLEdBQU8sT0FHOUJNLEdBQU9FLFdBQVdGLElBdEJILElBQUVWLEdBQXVCRSxHQU12Q0UsR0FBT0UsR0F5QmYsTUFBTU8sR0FDc0Isb0JBQW5CQyxlQUNIQSxlQUFlbkYsS0FBS2dELElBQ0Esb0JBQVpvQyxTQUEyQkEsUUFBUUMsVUFBYWpCLEdBTTlELElBQUFrQixHQUFlLENBQ2I1SCxXQUNBeUQsaUJBQ0FILFlBQ0F1RSxXQTluQmtCNUUsSUFDbEIsSUFBS0EsRUFBTyxPQUFPLEVBQ25CLEdBQUlxQixJQUFnQnJCLGFBQWlCcUIsR0FBYyxPQUFPLEVBRTFELE1BQU13RCxFQUFRbEYsR0FBZUssR0FDN0IsSUFBSzZFLEdBQVNBLElBQVU1TCxPQUFPWixVQUFXLE9BQU8sRUFDakQsSUFBS2tJLEdBQVdQLEVBQU04RSxRQUFTLE9BQU8sRUFDdEMsTUFBTUMsRUFBT2xGLEdBQU9HLEdBQ3BCLE1BQ1csYUFBVCtFLEdBRVUsV0FBVEEsR0FBcUJ4RSxHQUFXUCxFQUFNTixXQUFrQyxzQkFBckJNLEVBQU1OLFlBb25CNURzRixrQkF2ekJGLFNBQTJCMUUsR0FDekIsSUFBSWhELEVBTUosT0FKRUEsRUFEeUIsb0JBQWhCMkgsYUFBK0JBLFlBQVlDLE9BQzNDRCxZQUFZQyxPQUFPNUUsR0FFbkJBLEdBQU9BLEVBQUk2RSxRQUFVM0UsR0FBY0YsRUFBSTZFLFFBRTNDN0gsQ0FDVCxFQWd6QkV0QixZQUNBeUUsWUFDQTJFLFVBdndCaUJwRixJQUFvQixJQUFWQSxJQUE0QixJQUFWQSxFQXd3QjdDVSxZQUNBQyxpQkFDQTBFLGNBM3VCcUIvRSxJQUVyQixJQUFLSSxHQUFTSixJQUFRRCxHQUFTQyxHQUM3QixPQUFPLEVBR1QsSUFDRSxPQUFtQyxJQUE1QnJILE9BQU84SSxLQUFLekIsR0FBS3RHLFFBQWdCZixPQUFPMEcsZUFBZVcsS0FBU3JILE9BQU9aLFNBQ2hGLENBQUUsTUFBT0ssR0FFUCxPQUFPLENBQ1QsR0FpdUJBOEksb0JBQ0FDLGFBQ0FDLGNBQ0FDLGFBQ0F2QixlQUNBUSxVQUNBQyxVQUNBeUUsa0JBeHNCeUJuTSxNQUNmQSxRQUE4QixJQUFkQSxFQUFNb00sS0F3c0JoQ0MsY0E3ckJxQkMsR0FBYUEsUUFBeUMsSUFBdEJBLEVBQVNDLFNBOHJCOUQ1RSxVQUNBaUMsWUFDRnhDLFdBQUVBLEdBQ0FvRixTQXRxQmdCckYsR0FBUUksR0FBU0osSUFBUUMsR0FBV0QsRUFBSXNGLE1BdXFCeERyRSxxQkFDQWlCLGdCQUNBekIsY0FDQWpDLFdBQ0ErRyxNQXBnQkYsU0FBU0EsS0FBU0MsR0FDaEIsTUFBTUMsU0FBRUEsRUFBUUMsY0FBRUEsR0FBbUIxRCxHQUFpQjJELE9BQVNBLE1BQVMsQ0FBQSxFQUNsRTNJLEVBQVMsQ0FBQSxFQUNUNEksRUFBYyxDQUFDNUYsRUFBSzRCLEtBRXhCLEdBQVksY0FBUkEsR0FBK0IsZ0JBQVJBLEdBQWlDLGNBQVJBLEVBQ2xELE9BS0YsTUFBTWlFLEVBQWFKLEdBQTJCLGlCQUFSN0QsR0FBb0JDLEdBQVE3RSxFQUFRNEUsSUFBU0EsRUFJN0VrRSxFQUFXeEQsR0FBZXRGLEVBQVE2SSxHQUFhN0ksRUFBTzZJLFFBQWEzSyxFQUNyRW1GLEdBQWN5RixJQUFhekYsR0FBY0wsR0FDM0NoRCxFQUFPNkksR0FBYU4sRUFBTU8sRUFBVTlGLEdBQzNCSyxHQUFjTCxHQUN2QmhELEVBQU82SSxHQUFhTixFQUFNLENBQUEsRUFBSXZGLEdBQ3JCdkQsR0FBUXVELEdBQ2pCaEQsRUFBTzZJLEdBQWE3RixFQUFJTCxRQUNkK0YsR0FBa0I1RixHQUFZRSxLQUN4Q2hELEVBQU82SSxHQUFhN0YsSUFJeEIsSUFBSyxJQUFJOUgsRUFBSSxFQUFHc0osRUFBSWdFLEVBQUs5TCxPQUFReEIsRUFBSXNKLEVBQUd0SixJQUFLLENBQzNDLE1BQU1nRSxFQUFTc0osRUFBS3ROLEdBQ3BCLElBQUtnRSxHQUFVNkQsR0FBUzdELEdBQ3RCLFNBS0YsR0FGQXNDLEdBQVF0QyxFQUFRMEosR0FFTSxpQkFBWDFKLEdBQXVCTyxHQUFRUCxHQUN4QyxTQUdGLE1BQU02SixFQUFVcE4sT0FBT3FOLHNCQUFzQjlKLEdBQzdDLElBQUssSUFBSStKLEVBQUksRUFBR0EsRUFBSUYsRUFBUXJNLE9BQVF1TSxJQUFLLENBQ3ZDLE1BQU1DLEVBQVNILEVBQVFFLEdBQ25CekQsR0FBcUJsSyxLQUFLNEQsRUFBUWdLLElBQ3BDTixFQUFZMUosRUFBT2dLLEdBQVNBLEVBRWhDLENBQ0YsQ0FDQSxPQUFPbEosQ0FDVCxFQXFkRW1KLE9BeGNhLENBQUNDLEVBQUdDLEVBQUdwSCxHQUFXc0MsY0FBZSxNQUM5Qy9DLEdBQ0U2SCxFQUNBLENBQUNyRyxFQUFLNEIsS0FDQTNDLEdBQVdnQixHQUFXRCxHQUN4QnJILE9BQU9DLGVBQWV3TixFQUFHeEUsRUFBSyxDQUc1QjBFLFVBQVcsS0FDWHpOLE1BQU9rRyxHQUFLaUIsRUFBS2YsR0FDakJqRyxVQUFVLEVBQ1ZGLFlBQVksRUFDWkMsY0FBYyxJQUdoQkosT0FBT0MsZUFBZXdOLEVBQUd4RSxFQUFLLENBQzVCMEUsVUFBVyxLQUNYek4sTUFBT21ILEVBQ1BoSCxVQUFVLEVBQ1ZGLFlBQVksRUFDWkMsY0FBYyxLQUlwQixDQUFFd0ksZUFFRzZFLEdBK2FQL0gsS0FubkJZNUMsR0FDTEEsRUFBSTRDLEtBQU81QyxFQUFJNEMsT0FBUzVDLEVBQUlxRCxRQUFRLHFDQUFzQyxJQW1uQmpGeUgsU0F0YWdCQyxJQUNjLFFBQTFCQSxFQUFRQyxXQUFXLEtBQ3JCRCxFQUFVQSxFQUFRN0csTUFBTSxJQUVuQjZHLEdBbWFQRSxTQXZaZSxDQUFDNU8sRUFBYTZPLEVBQWtCQyxFQUFPaEUsS0FDdEQ5SyxFQUFZQyxVQUFZWSxPQUFPOEcsT0FBT2tILEVBQWlCNU8sVUFBVzZLLEdBQ2xFakssT0FBT0MsZUFBZWQsRUFBWUMsVUFBVyxjQUFlLENBQzFEdU8sVUFBVyxLQUNYek4sTUFBT2YsRUFDUGtCLFVBQVUsRUFDVkYsWUFBWSxFQUNaQyxjQUFjLElBRWhCSixPQUFPQyxlQUFlZCxFQUFhLFFBQVMsQ0FDMUN3TyxVQUFXLEtBQ1h6TixNQUFPOE4sRUFBaUI1TyxZQUUxQjZPLEdBQVNqTyxPQUFPa08sT0FBTy9PLEVBQVlDLFVBQVc2TyxJQTJZOUNFLGFBL1htQixDQUFDQyxFQUFXQyxFQUFTakssRUFBUWtLLEtBQ2hELElBQUlMLEVBQ0ExTyxFQUNBcUssRUFDSixNQUFNMkUsRUFBUyxDQUFBLEVBSWYsR0FGQUYsRUFBVUEsR0FBVyxDQUFBLEVBRUosTUFBYkQsRUFBbUIsT0FBT0MsRUFFOUIsRUFBRyxDQUdELElBRkFKLEVBQVFqTyxPQUFPK0ksb0JBQW9CcUYsR0FDbkM3TyxFQUFJME8sRUFBTWxOLE9BQ0h4QixLQUFNLEdBQ1hxSyxFQUFPcUUsRUFBTTFPLEdBQ1ArTyxJQUFjQSxFQUFXMUUsRUFBTXdFLEVBQVdDLElBQWNFLEVBQU8zRSxLQUNuRXlFLEVBQVF6RSxHQUFRd0UsRUFBVXhFLEdBQzFCMkUsRUFBTzNFLElBQVEsR0FHbkJ3RSxHQUF1QixJQUFYaEssR0FBb0JzQyxHQUFlMEgsRUFDakQsT0FBU0EsS0FBZWhLLEdBQVVBLEVBQU9nSyxFQUFXQyxLQUFhRCxJQUFjcE8sT0FBT1osV0FFdEYsT0FBT2lQLEdBeVdQekgsVUFDQUssY0FDQXVILFNBL1ZlLENBQUMxTCxFQUFLMkwsRUFBY0MsS0FDbkM1TCxFQUFNakQsT0FBT2lELFNBQ0lQLElBQWJtTSxHQUEwQkEsRUFBVzVMLEVBQUkvQixVQUMzQzJOLEVBQVc1TCxFQUFJL0IsUUFFakIyTixHQUFZRCxFQUFhMU4sT0FDekIsTUFBTTROLEVBQVk3TCxFQUFJVSxRQUFRaUwsRUFBY0MsR0FDNUMsV0FBT0MsR0FBb0JBLElBQWNELEdBeVZ6Q0UsUUEvVWU3SCxJQUNmLElBQUtBLEVBQU8sT0FBTyxLQUNuQixHQUFJakQsR0FBUWlELEdBQVEsT0FBT0EsRUFDM0IsSUFBSXhILEVBQUl3SCxFQUFNaEcsT0FDZCxJQUFLeUcsR0FBU2pJLEdBQUksT0FBTyxLQUN6QixNQUFNc1AsRUFBTSxJQUFJaEwsTUFBTXRFLEdBQ3RCLEtBQU9BLEtBQU0sR0FDWHNQLEVBQUl0UCxHQUFLd0gsRUFBTXhILEdBRWpCLE9BQU9zUCxHQXVVUEMsYUE1U21CLENBQUNuRyxFQUFLdEMsS0FDekIsTUFFTTBJLEdBRllwRyxHQUFPQSxFQUFJekosS0FFRFMsS0FBS2dKLEdBRWpDLElBQUl0RSxFQUVKLE1BQVFBLEVBQVMwSyxFQUFVQyxVQUFZM0ssRUFBTzRLLE1BQU0sQ0FDbEQsTUFBTUMsRUFBTzdLLEVBQU9uRSxNQUNwQm1HLEVBQUcxRyxLQUFLZ0osRUFBS3VHLEVBQUssR0FBSUEsRUFBSyxHQUM3QixHQW1TQUMsU0F4UmUsQ0FBQ0MsRUFBUXRNLEtBQ3hCLElBQUl1TSxFQUNKLE1BQU1SLEVBQU0sR0FFWixLQUF3QyxRQUFoQ1EsRUFBVUQsRUFBT0UsS0FBS3hNLEtBQzVCK0wsRUFBSXpELEtBQUtpRSxHQUdYLE9BQU9SLEdBaVJQbkYsY0FDQUMsa0JBQ0E0RixXQUFZNUYsR0FDWkkscUJBQ0F5RixjQXBPcUI3RyxJQUNyQm9CLEdBQWtCcEIsRUFBSyxDQUFDeUIsRUFBWXZJLEtBRWxDLEdBQUl5RixHQUFXcUIsSUFBUSxDQUFDLFlBQWEsU0FBVSxVQUFVNUcsU0FBU0YsR0FDaEUsT0FBTyxFQUdULE1BQU0zQixFQUFReUksRUFBSTlHLEdBRWJ5RixHQUFXcEgsS0FFaEJrSyxFQUFXakssWUFBYSxFQUVwQixhQUFjaUssRUFDaEJBLEVBQVcvSixVQUFXLEVBSW5CK0osRUFBV3FGLE1BQ2RyRixFQUFXcUYsSUFBTSxLQUNmLE1BQU1DLE1BQU0scUNBQXVDN04sRUFBTyxXQWlOaEU4TixZQW5Na0IsQ0FBQ0MsRUFBZUMsS0FDbEMsTUFBTWxILEVBQU0sQ0FBQSxFQUVObUgsRUFBVWpCLElBQ2RBLEVBQUloSixRQUFTM0YsSUFDWHlJLEVBQUl6SSxJQUFTLEtBTWpCLE9BRkE0RCxHQUFROEwsR0FBaUJFLEVBQU9GLEdBQWlCRSxFQUFPalEsT0FBTytQLEdBQWU5TyxNQUFNK08sSUFFN0VsSCxHQXlMUG9ILFlBalJtQmpOLEdBQ1pBLEVBQUlFLGNBQWNtRCxRQUFRLHdCQUF5QixTQUFrQjZKLEVBQUc1TixFQUFJSSxHQUNqRixPQUFPSixFQUFHNk4sY0FBZ0J6TixDQUM1QixHQStRQTBOLEtBdkxXLE9Bd0xYQyxlQXRMcUIsQ0FBQ2pRLEVBQU9rUSxJQUNiLE1BQVRsUSxHQUFpQkosT0FBT3VRLFNBQVVuUSxHQUFTQSxHQUFVQSxFQUFRa1EsRUFzTHBFbEgsV0FDQWYsT0FBUWlCLEdBQ1JDLG9CQUNBaUgsb0JBL0tGLFNBQTZCdkosR0FDM0IsU0FDRUEsR0FDQU8sR0FBV1AsRUFBTThFLFNBQ00sYUFBdkI5RSxFQUFNSixLQUNOSSxFQUFNN0gsSUFFVixFQXlLRXFSLGFBaktvQjVILElBQ3BCLE1BQU02SCxFQUFVLElBQUlDLFFBRWRDLEVBQVNuTixJQUNiLEdBQUlrRSxHQUFTbEUsR0FBUyxDQUNwQixHQUFJaU4sRUFBUUcsSUFBSXBOLEdBQ2QsT0FJRixHQUFJNkQsR0FBUzdELEdBQ1gsT0FBT0EsRUFHVCxLQUFNLFdBQVlBLEdBQVMsQ0FFekJpTixFQUFRSSxJQUFJck4sR0FDWixNQUFNc04sRUFBUy9NLEdBQVFQLEdBQVUsR0FBSyxDQUFBLEVBU3RDLE9BUEFzQyxHQUFRdEMsRUFBUSxDQUFDckQsRUFBTytJLEtBQ3RCLE1BQU02SCxFQUFlSixFQUFNeFEsSUFDMUJpSCxHQUFZMkosS0FBa0JELEVBQU81SCxHQUFPNkgsS0FHL0NOLEVBQVFPLE9BQU94TixHQUVSc04sQ0FDVCxDQUNGLENBRUEsT0FBT3ROLEdBR1QsT0FBT21OLEVBQU0vSCxJQWlJYjRCLGFBQ0F5RyxXQWpIa0JqSyxHQUNsQkEsSUFDQ1UsR0FBU1YsSUFBVU8sR0FBV1AsS0FDL0JPLEdBQVdQLEVBQU1rSyxPQUNqQjNKLEdBQVdQLEVBQU1tSyxPQThHakJ4RyxhQUFjRixHQUNkYyxRQUNBNkYsV0E3RGtCcEssR0FBbUIsTUFBVEEsR0FBaUJPLEdBQVdQLEVBQU03SCxNQ3AzQmhFLE1BQU1rUyxHQUFvQkMsR0FBTTFCLFlBQVksQ0FDMUMsTUFDQSxnQkFDQSxpQkFDQSxlQUNBLE9BQ0EsVUFDQSxPQUNBLE9BQ0Esb0JBQ0Esc0JBQ0EsZ0JBQ0EsV0FDQSxlQUNBLHNCQUNBLFVBQ0EsY0FDQSxlQ1VGLE1BQU0yQixHQUFxQyxJQUFJQyxPQUFPLDJDQUE0QyxLQUU1RkMsR0FBeUMsSUFBSUQsT0FBTyw0Q0FBNkMsS0FFdkcsU0FBU0UsR0FBY3ZSLEVBQU93UixHQUM1QixPQUFJTCxHQUFNdk4sUUFBUTVELEdBQ1RBLEVBQU13RSxJQUFLa0IsR0FBUzZMLEdBQWM3TCxFQUFNOEwsSUFuQ25ELFNBQXNCNU8sR0FDcEIsSUFBSTZPLEVBQVEsRUFDUkMsRUFBTTlPLEVBQUkvQixPQUVkLEtBQU80USxFQUFRQyxHQUFLLENBQ2xCLE1BQU1DLEVBQU8vTyxFQUFJZ0wsV0FBVzZELEdBRTVCLEdBQWEsSUFBVEUsR0FBMEIsS0FBVEEsRUFDbkIsTUFHRkYsR0FBUyxDQUNYLENBRUEsS0FBT0MsRUFBTUQsR0FBTyxDQUNsQixNQUFNRSxFQUFPL08sRUFBSWdMLFdBQVc4RCxFQUFNLEdBRWxDLEdBQWEsSUFBVEMsR0FBMEIsS0FBVEEsRUFDbkIsTUFHRkQsR0FBTyxDQUNULENBRUEsT0FBaUIsSUFBVkQsR0FBZUMsSUFBUTlPLEVBQUkvQixPQUFTK0IsRUFBTUEsRUFBSWtFLE1BQU0ySyxFQUFPQyxFQUNwRSxDQWFTRSxDQUFhalMsT0FBT0ssR0FBT2lHLFFBQVF1TCxFQUFjLElBQzFELENBUU8sU0FBU0ssR0FBeUJDLEdBQ3ZDLE1BQU1DLEVBQW9CalMsT0FBTzhHLE9BQU8sTUFNeEMsT0FKQXVLLEdBQU14TCxRQUFRbU0sRUFBUUUsU0FBVSxDQUFDaFMsRUFBT2lTLEtBQ3RDRixFQUFrQkUsR0FQdUIsQ0FBQ2pTLEdBQzVDdVIsR0FBY3ZSLEVBQU9zUixJQU1TWSxDQUE4QmxTLEtBR3JEK1IsQ0FDVCxDQ3JEQSxNQUFNSSxHQUFhcFQsT0FBTyxhQUUxQixTQUFTcVQsR0FBZ0JILEdBQ3ZCLE9BQU9BLEdBQVV0UyxPQUFPc1MsR0FBUXpNLE9BQU8xQyxhQUN6QyxDQUVBLFNBQVN1UCxHQUFlclMsR0FDdEIsT0FBYyxJQUFWQSxHQUE0QixNQUFUQSxFQUNkQSxFQUdGbVIsR0FBTXZOLFFBQVE1RCxHQUFTQSxFQUFNd0UsSUFBSTZOLElENEJQLENBQUNyUyxHQUNsQ3VSLEdBQWN2UixFQUFPb1IsSUM3QnFDa0IsQ0FBb0IzUyxPQUFPSyxHQUN2RixDQWdCQSxTQUFTdVMsR0FBaUJuSixFQUFTcEosRUFBT2lTLEVBQVEvTixFQUFRc08sR0FDeEQsT0FBSXJCLEdBQU0vSixXQUFXbEQsR0FDWkEsRUFBT3pFLEtBQUtxTixLQUFNOU0sRUFBT2lTLElBRzlCTyxJQUNGeFMsRUFBUWlTLEdBR0xkLEdBQU10TyxTQUFTN0MsR0FFaEJtUixHQUFNdE8sU0FBU3FCLElBQ2dCLElBQTFCbEUsRUFBTXNELFFBQVFZLEdBR25CaU4sR0FBTXZILFNBQVMxRixHQUNWQSxFQUFPakIsS0FBS2pELFFBRHJCLE9BTkEsRUFTRixDQTJCQSxJQUFBeVMsR0FBQSxNQUNFLFdBQUF4VCxDQUFZNlMsR0FDVkEsR0FBV2hGLEtBQUt5QyxJQUFJdUMsRUFDdEIsQ0FFQSxHQUFBdkMsQ0FBSTBDLEVBQVFTLEVBQWdCQyxHQUMxQixNQUFNNUssRUFBTytFLEtBRWIsU0FBUzhGLEVBQVVDLEVBQVFDLEVBQVNDLEdBQ2xDLE1BQU1DLEVBQVVaLEdBQWdCVSxHQUVoQyxJQUFLRSxFQUNILE9BR0YsTUFBTWpLLEVBQU1vSSxHQUFNbkksUUFBUWpCLEVBQU1pTCxLQUc3QmpLLFFBQ2ExRyxJQUFkMEYsRUFBS2dCLEtBQ1EsSUFBYmdLLFFBQ2MxUSxJQUFiMFEsSUFBd0MsSUFBZGhMLEVBQUtnQixNQUVoQ2hCLEVBQUtnQixHQUFPK0osR0FBV1QsR0FBZVEsR0FFMUMsQ0FFQSxNQUFNSSxFQUFhLENBQUNuQixFQUFTaUIsSUFDM0I1QixHQUFNeEwsUUFBUW1NLEVBQVMsQ0FBQ2UsRUFBUUMsSUFBWUYsRUFBVUMsRUFBUUMsRUFBU0MsSUFFekUsR0FBSTVCLEdBQU0zSixjQUFjeUssSUFBV0EsYUFBa0JuRixLQUFLN04sWUFDeERnVSxFQUFXaEIsRUFBUVMsUUFDZCxHQUFJdkIsR0FBTXRPLFNBQVNvUCxLQUFZQSxFQUFTQSxFQUFPek0sVUEvRXZCLGlDQUFpQ3ZDLEtBK0VvQmdQLEVBL0VYek0sUUFnRnZFeU4sRUZ4RVMsQ0FBQ0MsSUFDZCxNQUFNQyxFQUFTLENBQUEsRUFDZixJQUFJcEssRUFDQTVCLEVBQ0E5SCxFQXVCSixPQXJCQTZULEdBQ0VBLEVBQVd0UyxNQUFNLE1BQU0rRSxRQUFRLFNBQWdCeU4sR0FDN0MvVCxFQUFJK1QsRUFBSzlQLFFBQVEsS0FDakJ5RixFQUFNcUssRUFBS2xPLFVBQVUsRUFBRzdGLEdBQUdtRyxPQUFPMUMsY0FDbENxRSxFQUFNaU0sRUFBS2xPLFVBQVU3RixFQUFJLEdBQUdtRyxRQUV2QnVELEdBQVFvSyxFQUFPcEssSUFBUW1JLEdBQWtCbkksS0FJbEMsZUFBUkEsRUFDRW9LLEVBQU9wSyxHQUNUb0ssRUFBT3BLLEdBQUttQyxLQUFLL0QsR0FFakJnTSxFQUFPcEssR0FBTyxDQUFDNUIsR0FHakJnTSxFQUFPcEssR0FBT29LLEVBQU9wSyxHQUFPb0ssRUFBT3BLLEdBQU8sS0FBTzVCLEVBQU1BLEVBRTNELEdBRUtnTSxHRTZDUUUsQ0FBYXBCLEdBQVNTLFFBQzVCLEdBQUl2QixHQUFNNUosU0FBUzBLLElBQVdkLEdBQU1GLFdBQVdnQixHQUFTLENBQzdELElBQ0VxQixFQUNBdkssRUFGRU4sRUFBTSxDQUFBLEVBR1YsSUFBSyxNQUFNOEssS0FBU3RCLEVBQVEsQ0FDMUIsSUFBS2QsR0FBTXZOLFFBQVEyUCxHQUNqQixNQUFNLElBQUk3VCxVQUFVLGdEQUd0QitJLEVBQUtNLEVBQU13SyxFQUFNLEtBQVFELEVBQU83SyxFQUFJTSxJQUNoQ29JLEdBQU12TixRQUFRMFAsR0FDWixJQUFJQSxFQUFNQyxFQUFNLElBQ2hCLENBQUNELEVBQU1DLEVBQU0sSUFDZkEsRUFBTSxFQUNaLENBRUFOLEVBQVd4SyxFQUFLaUssRUFDbEIsTUFDWSxNQUFWVCxHQUFrQlcsRUFBVUYsRUFBZ0JULEVBQVFVLEdBR3RELE9BQU83RixJQUNULENBRUEsR0FBQWpILENBQUlvTSxFQUFRdUIsR0FHVixHQUZBdkIsRUFBU0csR0FBZ0JILEdBRWIsQ0FDVixNQUFNbEosRUFBTW9JLEdBQU1uSSxRQUFROEQsS0FBTW1GLEdBRWhDLEdBQUlsSixFQUFLLENBQ1AsTUFBTS9JLEVBQVE4TSxLQUFLL0QsR0FFbkIsSUFBS3lLLEVBQ0gsT0FBT3hULEVBR1QsSUFBZSxJQUFYd1QsRUFDRixPQW5JVixTQUFxQjVRLEdBQ25CLE1BQU02USxFQUFTM1QsT0FBTzhHLE9BQU8sTUFDdkI4TSxFQUFXLG1DQUNqQixJQUFJcFAsRUFFSixLQUFRQSxFQUFRb1AsRUFBU3RFLEtBQUt4TSxJQUM1QjZRLEVBQU9uUCxFQUFNLElBQU1BLEVBQU0sR0FHM0IsT0FBT21QLENBQ1QsQ0F5SGlCRSxDQUFZM1QsR0FHckIsR0FBSW1SLEdBQU0vSixXQUFXb00sR0FDbkIsT0FBT0EsRUFBTy9ULEtBQUtxTixLQUFNOU0sRUFBTytJLEdBR2xDLEdBQUlvSSxHQUFNdkgsU0FBUzRKLEdBQ2pCLE9BQU9BLEVBQU9wRSxLQUFLcFAsR0FHckIsTUFBTSxJQUFJTixVQUFVLHlDQUN0QixDQUNGLENBQ0YsQ0FFQSxHQUFBK1EsQ0FBSXdCLEVBQVEyQixHQUdWLEdBRkEzQixFQUFTRyxHQUFnQkgsR0FFYixDQUNWLE1BQU1sSixFQUFNb0ksR0FBTW5JLFFBQVE4RCxLQUFNbUYsR0FFaEMsU0FDRWxKLFFBQ2MxRyxJQUFkeUssS0FBSy9ELElBQ0g2SyxJQUFXckIsR0FBaUJ6RixFQUFNQSxLQUFLL0QsR0FBTUEsRUFBSzZLLEdBRXhELENBRUEsT0FBTyxDQUNULENBRUEsT0FBTzNCLEVBQVEyQixHQUNiLE1BQU03TCxFQUFPK0UsS0FDYixJQUFJK0csR0FBVSxFQUVkLFNBQVNDLEVBQWFoQixHQUdwQixHQUZBQSxFQUFVVixHQUFnQlUsR0FFYixDQUNYLE1BQU0vSixFQUFNb0ksR0FBTW5JLFFBQVFqQixFQUFNK0ssSUFFNUIvSixHQUFTNkssSUFBV3JCLEdBQWlCeEssRUFBTUEsRUFBS2dCLEdBQU1BLEVBQUs2SyxZQUN0RDdMLEVBQUtnQixHQUVaOEssR0FBVSxFQUVkLENBQ0YsQ0FRQSxPQU5JMUMsR0FBTXZOLFFBQVFxTyxHQUNoQkEsRUFBT3RNLFFBQVFtTyxHQUVmQSxFQUFhN0IsR0FHUjRCLENBQ1QsQ0FFQSxLQUFBRSxDQUFNSCxHQUNKLE1BQU1oTCxFQUFPOUksT0FBTzhJLEtBQUtrRSxNQUN6QixJQUFJek4sRUFBSXVKLEVBQUsvSCxPQUNUZ1QsR0FBVSxFQUVkLEtBQU94VSxLQUFLLENBQ1YsTUFBTTBKLEVBQU1ILEVBQUt2SixHQUNadVUsSUFBV3JCLEdBQWlCekYsRUFBTUEsS0FBSy9ELEdBQU1BLEVBQUs2SyxHQUFTLFlBQ3ZEOUcsS0FBSy9ELEdBQ1o4SyxHQUFVLEVBRWQsQ0FFQSxPQUFPQSxDQUNULENBRUEsU0FBQWxSLENBQVVxUixHQUNSLE1BQU1qTSxFQUFPK0UsS0FDUGdGLEVBQVUsQ0FBQSxFQXNCaEIsT0FwQkFYLEdBQU14TCxRQUFRbUgsS0FBTSxDQUFDOU0sRUFBT2lTLEtBQzFCLE1BQU1sSixFQUFNb0ksR0FBTW5JLFFBQVE4SSxFQUFTRyxHQUVuQyxHQUFJbEosRUFHRixPQUZBaEIsRUFBS2dCLEdBQU9zSixHQUFlclMsZUFDcEIrSCxFQUFLa0ssR0FJZCxNQUFNZ0MsRUFBYUQsRUF6THpCLFNBQXNCL0IsR0FDcEIsT0FBT0EsRUFDSnpNLE9BQ0ExQyxjQUNBbUQsUUFBUSxrQkFBbUIsQ0FBQ2lPLEVBQUdDLEVBQU12UixJQUM3QnVSLEVBQUtwRSxjQUFnQm5OLEVBRWxDLENBa0xrQ3dSLENBQWFuQyxHQUFVdFMsT0FBT3NTLEdBQVF6TSxPQUU5RHlPLElBQWVoQyxVQUNWbEssRUFBS2tLLEdBR2RsSyxFQUFLa00sR0FBYzVCLEdBQWVyUyxHQUVsQzhSLEVBQVFtQyxJQUFjLElBR2pCbkgsSUFDVCxDQUVBLE1BQUE5RyxJQUFVcU8sR0FDUixPQUFPdkgsS0FBSzdOLFlBQVkrRyxPQUFPOEcsUUFBU3VILEVBQzFDLENBRUEsTUFBQXJDLENBQU9zQyxHQUNMLE1BQU03TCxFQUFNM0ksT0FBTzhHLE9BQU8sTUFRMUIsT0FOQXVLLEdBQU14TCxRQUFRbUgsS0FBTSxDQUFDOU0sRUFBT2lTLEtBQ2pCLE1BQVRqUyxJQUNZLElBQVZBLElBQ0N5SSxFQUFJd0osR0FBVXFDLEdBQWFuRCxHQUFNdk4sUUFBUTVELEdBQVNBLEVBQU0rRixLQUFLLE1BQVEvRixLQUduRXlJLENBQ1QsQ0FFQSxDQUFDMUosT0FBT0MsWUFDTixPQUFPYyxPQUFPeVUsUUFBUXpILEtBQUtrRixVQUFValQsT0FBT0MsV0FDOUMsQ0FFQSxRQUFBdUgsR0FDRSxPQUFPekcsT0FBT3lVLFFBQVF6SCxLQUFLa0YsVUFDeEJ4TixJQUFJLEVBQUV5TixFQUFRalMsS0FBV2lTLEVBQVMsS0FBT2pTLEdBQ3pDK0YsS0FBSyxLQUNWLENBRUEsWUFBQXlPLEdBQ0UsT0FBTzFILEtBQUtqSCxJQUFJLGVBQWlCLEVBQ25DLENBRUEsSUFBSzlHLE9BQU8wSCxlQUNWLE1BQU8sY0FDVCxDQUVBLFdBQU9nTyxDQUFLNU4sR0FDVixPQUFPQSxhQUFpQmlHLEtBQU9qRyxFQUFRLElBQUlpRyxLQUFLakcsRUFDbEQsQ0FFQSxhQUFPYixDQUFPME8sS0FBVUwsR0FDdEIsTUFBTU0sRUFBVyxJQUFJN0gsS0FBSzRILEdBSTFCLE9BRkFMLEVBQVExTyxRQUFTZ0wsR0FBV2dFLEVBQVNwRixJQUFJb0IsSUFFbENnRSxDQUNULENBRUEsZUFBT0MsQ0FBUzNDLEdBQ2QsTUFPTTRDLEdBTkgvSCxLQUFLcUYsSUFDTnJGLEtBQUtxRixJQUNILENBQ0UwQyxVQUFXLENBQUEsSUFHV0EsVUFDdEIzVixFQUFZNE4sS0FBSzVOLFVBRXZCLFNBQVM0VixFQUFlaEMsR0FDdEIsTUFBTUUsRUFBVVosR0FBZ0JVLEdBRTNCK0IsRUFBVTdCLE1BMVByQixTQUF3QnZLLEVBQUt3SixHQUMzQixNQUFNOEMsRUFBZTVELEdBQU10QixZQUFZLElBQU1vQyxHQUU3QyxDQUFDLE1BQU8sTUFBTyxPQUFPdE0sUUFBU3FQLElBQzdCbFYsT0FBT0MsZUFBZTBJLEVBQUt1TSxFQUFhRCxFQUFjLENBR3BEdEgsVUFBVyxLQUNYek4sTUFBTyxTQUFVaVYsRUFBTUMsRUFBTUMsR0FDM0IsT0FBT3JJLEtBQUtrSSxHQUFZdlYsS0FBS3FOLEtBQU1tRixFQUFRZ0QsRUFBTUMsRUFBTUMsRUFDekQsRUFDQWpWLGNBQWMsS0FHcEIsQ0E2T1FrVixDQUFlbFcsRUFBVzRULEdBQzFCK0IsRUFBVTdCLElBQVcsRUFFekIsQ0FJQSxPQUZBN0IsR0FBTXZOLFFBQVFxTyxHQUFVQSxFQUFPdE0sUUFBUW1QLEdBQWtCQSxFQUFlN0MsR0FFakVuRixJQUNULEdBR0Z1SSxHQUFhVCxTQUFTLENBQ3BCLGVBQ0EsaUJBQ0EsU0FDQSxrQkFDQSxhQUNBLGtCQUlGekQsR0FBTXRILGtCQUFrQndMLEdBQWFuVyxVQUFXLEVBQUdjLFNBQVMrSSxLQUMxRCxJQUFJdU0sRUFBU3ZNLEVBQUksR0FBR2dILGNBQWdCaEgsRUFBSWpDLE1BQU0sR0FDOUMsTUFBTyxDQUNMakIsSUFBSyxJQUFNN0YsRUFDWCxHQUFBdVAsQ0FBSWdHLEdBQ0Z6SSxLQUFLd0ksR0FBVUMsQ0FDakIsS0FJSnBFLEdBQU03QixjQUFjK0YsSUM3VHBCLFNBQVNHLEdBQWFDLEVBQVFDLEdBQzVCLE1BQU1DLEVBQVksSUFBSUMsSUFBSUYsRUFBV2xSLElBQUtxUixHQUFNbFcsT0FBT2tXLEdBQUcvUyxnQkFDcERnVCxFQUFPLEdBRVB0RixFQUFTbk4sSUFDYixHQUFlLE9BQVhBLEdBQXFDLGlCQUFYQSxFQUFxQixPQUFPQSxFQUMxRCxHQUFJOE4sR0FBTWpLLFNBQVM3RCxHQUFTLE9BQU9BLEVBQ25DLElBQTZCLElBQXpCeVMsRUFBS3hTLFFBQVFELEdBQWdCLE9BUWpDLElBQUljLEVBQ0osR0FQSWQsYUFBa0JnUyxLQUNwQmhTLEVBQVNBLEVBQU8yTyxVQUdsQjhELEVBQUs1SyxLQUFLN0gsR0FHTjhOLEdBQU12TixRQUFRUCxHQUNoQmMsRUFBUyxHQUNUZCxFQUFPc0MsUUFBUSxDQUFDb1EsRUFBRzFXLEtBQ2pCLE1BQU11UixFQUFlSixFQUFNdUYsR0FDdEI1RSxHQUFNbEssWUFBWTJKLEtBQ3JCek0sRUFBTzlFLEdBQUt1UixTQUdYLENBQ0wsSUFBS08sR0FBTTNKLGNBQWNuRSxJQTlDL0IsU0FBaUNBLEdBQy9CLEdBQUk4TixHQUFNOUIsV0FBV2hNLEVBQVEsVUFDM0IsT0FBTyxFQUdULElBQUluRSxFQUFZWSxPQUFPMEcsZUFBZW5ELEdBRXRDLEtBQU9uRSxHQUFhQSxJQUFjWSxPQUFPWixXQUFXLENBQ2xELEdBQUlpUyxHQUFNOUIsV0FBV25RLEVBQVcsVUFDOUIsT0FBTyxFQUdUQSxFQUFZWSxPQUFPMEcsZUFBZXRILEVBQ3BDLENBRUEsT0FBTyxDQUNULENBOEIwQzhXLENBQXdCM1MsR0FFMUQsT0FEQXlTLEVBQUtHLE1BQ0U1UyxFQUdUYyxFQUFTckUsT0FBTzhHLE9BQU8sTUFDdkIsSUFBSyxNQUFPbUMsRUFBSy9JLEtBQVVGLE9BQU95VSxRQUFRbFIsR0FBUyxDQUNqRCxNQUFNdU4sRUFBZStFLEVBQVVsRixJQUFJMUgsRUFBSWpHLGVBdkQ5QixrQkF1RDBEME4sRUFBTXhRLEdBQ3BFbVIsR0FBTWxLLFlBQVkySixLQUNyQnpNLEVBQU80RSxHQUFPNkgsRUFFbEIsQ0FDRixDQUdBLE9BREFrRixFQUFLRyxNQUNFOVIsR0FHVCxPQUFPcU0sRUFBTWlGLEVBQ2YsUUFFQSxNQUFNUyxVQUFtQjFHLE1BQ3ZCLFdBQU9pRixDQUFLMEIsRUFBT3hFLEVBQU04RCxFQUFRVyxFQUFTQyxFQUFVQyxHQUNsRCxNQUFNQyxFQUFhLElBQUlMLEVBQVdDLEVBQU1LLFFBQVM3RSxHQUFRd0UsRUFBTXhFLEtBQU04RCxFQUFRVyxFQUFTQyxHQVV0RixPQVRBRSxFQUFXRSxNQUFRTixFQUNuQkksRUFBVzVVLEtBQU93VSxFQUFNeFUsS0FHSixNQUFoQndVLEVBQU1PLFFBQXVDLE1BQXJCSCxFQUFXRyxTQUNyQ0gsRUFBV0csT0FBU1AsRUFBTU8sUUFHNUJKLEdBQWV4VyxPQUFPa08sT0FBT3VJLEVBQVlELEdBQ2xDQyxDQUNULENBYUEsV0FBQXRYLENBQVl1WCxFQUFTN0UsRUFBTThELEVBQVFXLEVBQVNDLEdBQzFDTSxNQUFNSCxHQUtOMVcsT0FBT0MsZUFBZStNLEtBQU0sVUFBVyxDQUdyQ1csVUFBVyxLQUNYek4sTUFBT3dXLEVBQ1B2VyxZQUFZLEVBQ1pFLFVBQVUsRUFDVkQsY0FBYyxJQUdoQjRNLEtBQUtuTCxLQUFPLGFBQ1ptTCxLQUFLOEosY0FBZSxFQUNwQmpGLElBQVM3RSxLQUFLNkUsS0FBT0EsR0FDckI4RCxJQUFXM0ksS0FBSzJJLE9BQVNBLEdBQ3pCVyxJQUFZdEosS0FBS3NKLFFBQVVBLEdBQ3ZCQyxJQUNGdkosS0FBS3VKLFNBQVdBLEVBQ2hCdkosS0FBSzRKLE9BQVNMLEVBQVNLLE9BRTNCLENBRUEsTUFBQTFFLEdBS0UsTUFBTXlELEVBQVMzSSxLQUFLMkksT0FDZEMsRUFBYUQsR0FBVXRFLEdBQU05QixXQUFXb0csRUFBUSxVQUFZQSxFQUFPb0IsWUFBU3hVLEVBQzVFeVUsRUFDSjNGLEdBQU12TixRQUFROFIsSUFBZUEsRUFBVzdVLE9BQVMsRUFDN0MyVSxHQUFhQyxFQUFRQyxHQUNyQnZFLEdBQU1kLGFBQWFvRixHQUV6QixNQUFPLENBRUxlLFFBQVMxSixLQUFLMEosUUFDZDdVLEtBQU1tTCxLQUFLbkwsS0FFWG9WLFlBQWFqSyxLQUFLaUssWUFDbEJDLE9BQVFsSyxLQUFLa0ssT0FFYkMsU0FBVW5LLEtBQUttSyxTQUNmQyxXQUFZcEssS0FBS29LLFdBQ2pCQyxhQUFjckssS0FBS3FLLGFBQ25CQyxNQUFPdEssS0FBS3NLLE1BRVozQixPQUFRcUIsRUFDUm5GLEtBQU03RSxLQUFLNkUsS0FDWCtFLE9BQVE1SixLQUFLNEosT0FFakIsR0FJRlIsR0FBV21CLHFCQUF1Qix1QkFDbENuQixHQUFXb0IsZUFBaUIsaUJBQzVCcEIsR0FBV3FCLGFBQWUsZUFDMUJyQixHQUFXc0IsVUFBWSxZQUN2QnRCLEdBQVd1QixhQUFlLGVBQzFCdkIsR0FBV3dCLFlBQWMsY0FDekJ4QixHQUFXeUIsMEJBQTRCLDRCQUN2Q3pCLEdBQVcwQixlQUFpQixpQkFDNUIxQixHQUFXMkIsaUJBQW1CLG1CQUM5QjNCLEdBQVc0QixnQkFBa0Isa0JBQzdCNUIsR0FBVzZCLGFBQWUsZUFDMUI3QixHQUFXOEIsZ0JBQWtCLGtCQUM3QjlCLEdBQVcrQixnQkFBa0Isa0JBQzdCL0IsR0FBV2dDLDZCQUErQiwrQkMvSjFDLFNBQVNDLEdBQVl0UixHQUNuQixPQUFPc0ssR0FBTTNKLGNBQWNYLElBQVVzSyxHQUFNdk4sUUFBUWlELEVBQ3JELENBU0EsU0FBU3VSLEdBQWVyUCxHQUN0QixPQUFPb0ksR0FBTTdDLFNBQVN2RixFQUFLLE1BQVFBLEVBQUlqQyxNQUFNLEdBQUcsR0FBTWlDLENBQ3hELENBV0EsU0FBU3NQLEdBQVVDLEVBQU12UCxFQUFLd1AsR0FDNUIsT0FBS0QsRUFDRUEsRUFDSnRTLE9BQU8rQyxHQUNQdkUsSUFBSSxTQUFjbUcsRUFBT3RMLEdBR3hCLE9BREFzTCxFQUFReU4sR0FBZXpOLElBQ2Y0TixHQUFRbFosRUFBSSxJQUFNc0wsRUFBUSxJQUFNQSxDQUMxQyxHQUNDNUUsS0FBS3dTLEVBQU8sSUFBTSxJQVJIeFAsQ0FTcEIsQ0FhQSxNQUFNeVAsR0FBYXJILEdBQU1sRCxhQUFha0QsR0FBTyxDQUFBLEVBQUksS0FBTSxTQUFnQnpILEdBQ3JFLE1BQU8sV0FBV3pHLEtBQUt5RyxFQUN6QixHQXlCQSxTQUFTK08sR0FBV2hRLEVBQUs2RCxFQUFVb00sR0FDakMsSUFBS3ZILEdBQU01SixTQUFTa0IsR0FDbEIsTUFBTSxJQUFJL0ksVUFBVSw0QkFJdEI0TSxFQUFXQSxHQUFZLElBQUEsU0FpQnZCLE1BQU1xTSxHQWRORCxFQUFVdkgsR0FBTWxELGFBQ2R5SyxFQUNBLENBQ0VDLFlBQVksRUFDWkosTUFBTSxFQUNOSyxTQUFTLElBRVgsRUFDQSxTQUFpQkMsRUFBUXhWLEdBRXZCLE9BQVE4TixHQUFNbEssWUFBWTVELEVBQU93VixHQUNuQyxJQUd5QkYsV0FFckJHLEVBQVVKLEVBQVFJLFNBQVdDLEVBQzdCUixFQUFPRyxFQUFRSCxLQUNmSyxFQUFVRixFQUFRRSxRQUNsQkksRUFBUU4sRUFBUU8sTUFBeUIsb0JBQVRBLE1BQXdCQSxLQUN4REMsT0FBZ0M3VyxJQUFyQnFXLEVBQVFRLFNBQXlCLElBQU1SLEVBQVFRLFNBQzFEQyxFQUFVSCxHQUFTN0gsR0FBTWYsb0JBQW9COUQsR0FFbkQsSUFBSzZFLEdBQU0vSixXQUFXMFIsR0FDcEIsTUFBTSxJQUFJcFosVUFBVSw4QkFHdEIsU0FBUzBaLEVBQWFwWixHQUNwQixHQUFjLE9BQVZBLEVBQWdCLE1BQU8sR0FFM0IsR0FBSW1SLEdBQU0xSixPQUFPekgsR0FDZixPQUFPQSxFQUFNcVosY0FHZixHQUFJbEksR0FBTWxGLFVBQVVqTSxHQUNsQixPQUFPQSxFQUFNdUcsV0FHZixJQUFLNFMsR0FBV2hJLEdBQU14SixPQUFPM0gsR0FDM0IsTUFBTSxJQUFJa1csR0FBVyxnREFHdkIsT0FBSS9FLEdBQU05SixjQUFjckgsSUFBVW1SLEdBQU05SCxhQUFhckosR0FDNUNtWixHQUEyQixtQkFBVEYsS0FBc0IsSUFBSUEsS0FBSyxDQUFDalosSUFBVXNaLE9BQU83RSxLQUFLelUsR0FHMUVBLENBQ1QsQ0FZQSxTQUFTK1ksRUFBZS9ZLEVBQU8rSSxFQUFLdVAsR0FDbEMsSUFBSTNKLEVBQU0zTyxFQUVWLEdBQUltUixHQUFNOUUsY0FBY0MsSUFBYTZFLEdBQU1oRixrQkFBa0JuTSxHQUUzRCxPQURBc00sRUFBU1gsT0FBTzBNLEdBQVVDLEVBQU12UCxFQUFLd1AsR0FBT2EsRUFBYXBaLEtBQ2xELEVBR1QsR0FBSUEsSUFBVXNZLEdBQXlCLGlCQUFWdFksRUFDM0IsR0FBSW1SLEdBQU03QyxTQUFTdkYsRUFBSyxNQUV0QkEsRUFBTTRQLEVBQWE1UCxFQUFNQSxFQUFJakMsTUFBTSxNQUVuQzlHLEVBQVF1WixLQUFLQyxVQUFVeFosUUFDbEIsR0FDSm1SLEdBQU12TixRQUFRNUQsSUFsSHZCLFNBQXFCMk8sR0FDbkIsT0FBT3dDLEdBQU12TixRQUFRK0ssS0FBU0EsRUFBSThLLEtBQUt0QixHQUN6QyxDQWdIaUN1QixDQUFZMVosS0FDbkNtUixHQUFNdkosV0FBVzVILElBQVVtUixHQUFNN0MsU0FBU3ZGLEVBQUssU0FBVzRGLEVBQU13QyxHQUFNekMsUUFBUTFPLElBaUJoRixPQWRBK0ksRUFBTXFQLEdBQWVyUCxHQUVyQjRGLEVBQUloSixRQUFRLFNBQWNnVSxFQUFJQyxJQUMxQnpJLEdBQU1sSyxZQUFZMFMsSUFBYyxPQUFQQSxHQUN6QnJOLEVBQVNYLFFBRUssSUFBWmlOLEVBQ0lQLEdBQVUsQ0FBQ3RQLEdBQU02USxFQUFPckIsR0FDWixPQUFaSyxFQUNFN1AsRUFDQUEsRUFBTSxLQUNacVEsRUFBYU8sR0FFbkIsSUFDTyxFQUlYLFFBQUl4QixHQUFZblksS0FJaEJzTSxFQUFTWCxPQUFPME0sR0FBVUMsRUFBTXZQLEVBQUt3UCxHQUFPYSxFQUFhcFosS0FFbEQsRUFDVCxDQUVBLE1BQU1vWCxFQUFRLEdBRVJ5QyxFQUFpQi9aLE9BQU9rTyxPQUFPd0ssR0FBWSxDQUMvQ08saUJBQ0FLLGVBQ0FqQixpQkFnQ0YsSUFBS2hILEdBQU01SixTQUFTa0IsR0FDbEIsTUFBTSxJQUFJL0ksVUFBVSwwQkFLdEIsT0FuQ0EsU0FBU29hLEVBQU05WixFQUFPc1ksRUFBTXlCLEVBQVEsR0FDbEMsSUFBSTVJLEdBQU1sSyxZQUFZakgsR0FBdEIsQ0FFQSxHQUFJK1osRUFBUWIsRUFDVixNQUFNLElBQUloRCxHQUNSLGdDQUFrQzZELEVBQVEsd0JBQTBCYixFQUNwRWhELEdBQVdnQyw4QkFJZixJQUE2QixJQUF6QmQsRUFBTTlULFFBQVF0RCxHQUNoQixNQUFNLElBQUl3UCxNQUFNLGtDQUFvQzhJLEVBQUt2UyxLQUFLLE1BR2hFcVIsRUFBTWxNLEtBQUtsTCxHQUVYbVIsR0FBTXhMLFFBQVEzRixFQUFPLFNBQWMyWixFQUFJNVEsSUFLdEIsT0FIWG9JLEdBQU1sSyxZQUFZMFMsSUFBYyxPQUFQQSxJQUMzQmIsRUFBUXJaLEtBQUs2TSxFQUFVcU4sRUFBSXhJLEdBQU10TyxTQUFTa0csR0FBT0EsRUFBSXZELE9BQVN1RCxFQUFLdVAsRUFBTXVCLEtBR3pFQyxFQUFNSCxFQUFJckIsRUFBT0EsRUFBS3RTLE9BQU8rQyxHQUFPLENBQUNBLEdBQU1nUixFQUFRLEVBRXZELEdBRUEzQyxFQUFNbkIsS0F6QndCLENBMEJoQyxDQU1BNkQsQ0FBTXJSLEdBRUM2RCxDQUNULENDMU9BLFNBQVMwTixHQUFPcFgsR0FDZCxNQUFNcVgsRUFBVSxDQUNkLElBQUssTUFDTCxJQUFLLE1BQ0wsSUFBSyxNQUNMLElBQUssTUFDTCxJQUFLLE1BQ0wsTUFBTyxLQUVULE9BQU9DLG1CQUFtQnRYLEdBQUtxRCxRQUFRLGVBQWdCLFNBQWtCM0IsR0FDdkUsT0FBTzJWLEVBQVEzVixFQUNqQixFQUNGLENBVUEsU0FBUzZWLEdBQXFCQyxFQUFRMUIsR0FDcEM1TCxLQUFLdU4sT0FBUyxHQUVkRCxHQUFVM0IsR0FBVzJCLEVBQVF0TixLQUFNNEwsRUFDckMsQ0FFQSxNQUFNeFosR0FBWWliLEdBQXFCamIsVUMzQmhDLFNBQVM4YSxHQUFPN1MsR0FDckIsT0FBTytTLG1CQUFtQi9TLEdBQ3ZCbEIsUUFBUSxRQUFTLEtBQ2pCQSxRQUFRLE9BQVEsS0FDaEJBLFFBQVEsUUFBUyxLQUNqQkEsUUFBUSxPQUFRLElBQ3JCLENBV2UsU0FBU3FVLEdBQVNDLEVBQUtILEVBQVExQixHQUM1QyxJQUFLMEIsRUFDSCxPQUFPRyxFQUdULE1BQU1DLEVBQVc5QixHQUFXQSxFQUFRc0IsUUFBV0EsR0FFekNTLEVBQVd0SixHQUFNL0osV0FBV3NSLEdBQzlCLENBQ0VnQyxVQUFXaEMsR0FFYkEsRUFFRWlDLEVBQWNGLEdBQVlBLEVBQVNDLFVBRXpDLElBQUlFLEVBVUosR0FQRUEsRUFERUQsRUFDaUJBLEVBQVlQLEVBQVFLLEdBRXBCdEosR0FBTS9JLGtCQUFrQmdTLEdBQ3ZDQSxFQUFPN1QsV0FDUCxJQUFJNFQsR0FBcUJDLEVBQVFLLEdBQVVsVSxTQUFTaVUsR0FHdERJLEVBQWtCLENBQ3BCLE1BQU1DLEVBQWdCTixFQUFJalgsUUFBUSxNQUVaLElBQWxCdVgsSUFDRk4sRUFBTUEsRUFBSXpULE1BQU0sRUFBRytULElBRXJCTixTQUFRQSxFQUFJalgsUUFBUSxLQUFjLElBQU0sS0FBT3NYLENBQ2pELENBRUEsT0FBT0wsQ0FDVCxDRHZCQXJiLEdBQVV5TSxPQUFTLFNBQWdCaEssRUFBTTNCLEdBQ3ZDOE0sS0FBS3VOLE9BQU9uUCxLQUFLLENBQUN2SixFQUFNM0IsR0FDMUIsRUFFQWQsR0FBVXFILFNBQVcsU0FBa0J1VSxHQUNyQyxNQUFNTixFQUFVTSxFQUNaLFNBQVU5YSxHQUNSLE9BQU84YSxFQUFRcmIsS0FBS3FOLEtBQU05TSxFQUFPZ2EsR0FDbkMsRUFDQUEsR0FFSixPQUFPbE4sS0FBS3VOLE9BQ1Q3VixJQUFJLFNBQWN3SyxHQUNqQixPQUFPd0wsRUFBUXhMLEVBQUssSUFBTSxJQUFNd0wsRUFBUXhMLEVBQUssR0FDL0MsRUFBRyxJQUNGakosS0FBSyxJQUNWLEVFdERBLE1BQU1nVixHQUNKLFdBQUE5YixHQUNFNk4sS0FBS2tPLFNBQVcsRUFDbEIsQ0FXQSxHQUFBQyxDQUFJQyxFQUFXQyxFQUFVekMsR0FPdkIsT0FOQTVMLEtBQUtrTyxTQUFTOVAsS0FBSyxDQUNqQmdRLFlBQ0FDLFdBQ0FDLGNBQWExQyxHQUFVQSxFQUFRMEMsWUFDL0JDLFFBQVMzQyxFQUFVQSxFQUFRMkMsUUFBVSxPQUVoQ3ZPLEtBQUtrTyxTQUFTbmEsT0FBUyxDQUNoQyxDQVNBLEtBQUF5YSxDQUFNNWEsR0FDQW9NLEtBQUtrTyxTQUFTdGEsS0FDaEJvTSxLQUFLa08sU0FBU3RhLEdBQU0sS0FFeEIsQ0FPQSxLQUFBcVQsR0FDTWpILEtBQUtrTyxXQUNQbE8sS0FBS2tPLFNBQVcsR0FFcEIsQ0FZQSxPQUFBclYsQ0FBUVEsR0FDTmdMLEdBQU14TCxRQUFRbUgsS0FBS2tPLFNBQVUsU0FBd0JPLEdBQ3pDLE9BQU5BLEdBQ0ZwVixFQUFHb1YsRUFFUCxFQUNGLEVDbEVGLElBQUFDLEdBQWUsQ0FDYkMsbUJBQW1CLEVBQ25CQyxtQkFBbUIsRUFDbkJDLHFCQUFxQixFQUNyQkMsaUNBQWlDLEVBQ2pDQyw2QkFBNkIsR0NIL0JDLEdBQWUsQ0FDYkMsV0FBVyxFQUNYQyxRQUFTLENBQ1hDLGdCQ0owQyxvQkFBcEJBLGdCQUFrQ0EsZ0JBQWtCOUIsR0RLMUVoUyxTRU5tQyxvQkFBYkEsU0FBMkJBLFNBQVcsS0ZPNUQ4USxLR1ArQixvQkFBVEEsS0FBdUJBLEtBQU8sTUhTbERpRCxVQUFXLENBQUMsT0FBUSxRQUFTLE9BQVEsT0FBUSxNQUFPLFNJWHRELE1BQU1DLEdBQWtDLG9CQUFYblUsUUFBOEMsb0JBQWJvVSxTQUV4REMsR0FBbUMsaUJBQWRDLFdBQTBCQSxnQkFBY2phLEVBbUI3RGthLEdBQ0pKLE1BQ0VFLElBQWMsQ0FBQyxjQUFlLGVBQWdCLE1BQU0vWSxRQUFRK1ksR0FBV0csU0FBVyxHQVdoRkMsR0FFMkIsb0JBQXRCQyxtQkFFUDNVLGdCQUFnQjJVLG1CQUNjLG1CQUF2QjNVLEtBQUs0VSxjQUlWcmIsR0FBVTZhLElBQWlCblUsT0FBTzRVLFNBQVNDLE1BQVMsdUJDeEMxREMsR0FBZSwwSUFFVkEsSUMyQ0wsU0FBU0MsR0FBZXpRLEdBQ3RCLFNBQVMwUSxFQUFVMUUsRUFBTXRZLEVBQU8yUSxFQUFRaUosR0FDdEMsSUFBSWpZLEVBQU8yVyxFQUFLc0IsS0FFaEIsR0FBYSxjQUFUalksRUFBc0IsT0FBTyxFQUVqQyxNQUFNc2IsRUFBZXJkLE9BQU91USxVQUFVeE8sR0FDaEN1YixFQUFTdEQsR0FBU3RCLEVBQUt6WCxPQUc3QixHQUZBYyxHQUFRQSxHQUFRd1AsR0FBTXZOLFFBQVErTSxHQUFVQSxFQUFPOVAsT0FBU2MsRUFFcER1YixFQVNGLE9BUkkvTCxHQUFNOUIsV0FBV3NCLEVBQVFoUCxHQUMzQmdQLEVBQU9oUCxHQUFRd1AsR0FBTXZOLFFBQVErTSxFQUFPaFAsSUFDaENnUCxFQUFPaFAsR0FBTXFFLE9BQU9oRyxHQUNwQixDQUFDMlEsRUFBT2hQLEdBQU8zQixHQUVuQjJRLEVBQU9oUCxHQUFRM0IsR0FHVGlkLEVBR0w5TCxHQUFNOUIsV0FBV3NCLEVBQVFoUCxJQUFVd1AsR0FBTTVKLFNBQVNvSixFQUFPaFAsTUFDNURnUCxFQUFPaFAsR0FBUSxJQVNqQixPQU5lcWIsRUFBVTFFLEVBQU10WSxFQUFPMlEsRUFBT2hQLEdBQU9pWSxJQUV0Q3pJLEdBQU12TixRQUFRK00sRUFBT2hQLE1BQ2pDZ1AsRUFBT2hQLEdBakRiLFNBQXVCZ04sR0FDckIsTUFBTWxHLEVBQU0sQ0FBQSxFQUNORyxFQUFPOUksT0FBTzhJLEtBQUsrRixHQUN6QixJQUFJdFAsRUFDSixNQUFNeUosRUFBTUYsRUFBSy9ILE9BQ2pCLElBQUlrSSxFQUNKLElBQUsxSixFQUFJLEVBQUdBLEVBQUl5SixFQUFLekosSUFDbkIwSixFQUFNSCxFQUFLdkosR0FDWG9KLEVBQUlNLEdBQU80RixFQUFJNUYsR0FFakIsT0FBT04sQ0FDVCxDQXNDcUIwVSxDQUFjeE0sRUFBT2hQLE1BRzlCc2IsQ0FDVixDQUVBLEdBQUk5TCxHQUFNMUYsV0FBV2EsSUFBYTZFLEdBQU0vSixXQUFXa0YsRUFBU2lJLFNBQVUsQ0FDcEUsTUFBTTlMLEVBQU0sQ0FBQSxFQU1aLE9BSkEwSSxHQUFNdkMsYUFBYXRDLEVBQVUsQ0FBQzNLLEVBQU0zQixLQUNsQ2dkLEVBNUVOLFNBQXVCcmIsR0FLckIsT0FBT3dQLEdBQU1sQyxTQUFTLGdCQUFpQnROLEdBQU02QyxJQUFLRixHQUM1QixPQUFiQSxFQUFNLEdBQWMsR0FBS0EsRUFBTSxJQUFNQSxFQUFNLEdBRXRELENBb0VnQjhZLENBQWN6YixHQUFPM0IsRUFBT3lJLEVBQUssS0FHdENBLENBQ1QsQ0FFQSxPQUFPLElBQ1QsQ0NwRkEsTUFBTTRVLEdBQU0sQ0FBQzVVLEVBQUtNLElBQWdCLE1BQVBOLEdBQWUwSSxHQUFNOUIsV0FBVzVHLEVBQUtNLEdBQU9OLEVBQUlNLFFBQU8xRyxFQTJCbEYsTUFBTWliLEdBQVcsQ0FDZkMsYUFBYy9CLEdBRWRnQyxRQUFTLENBQUMsTUFBTyxPQUFRLFNBRXpCQyxpQkFBa0IsQ0FDaEIsU0FBMEIxUyxFQUFNK0csR0FDOUIsTUFBTTRMLEVBQWM1TCxFQUFRNkwsa0JBQW9CLEdBQzFDQyxFQUFxQkYsRUFBWXBhLFFBQVEscUJBQXNCLEVBQy9EdWEsRUFBa0IxTSxHQUFNNUosU0FBU3dELEdBRW5DOFMsR0FBbUIxTSxHQUFNM0gsV0FBV3VCLEtBQ3RDQSxFQUFPLElBQUk1QyxTQUFTNEMsSUFLdEIsR0FGbUJvRyxHQUFNMUYsV0FBV1YsR0FHbEMsT0FBTzZTLEVBQXFCckUsS0FBS0MsVUFBVXVELEdBQWVoUyxJQUFTQSxFQUdyRSxHQUNFb0csR0FBTTlKLGNBQWMwRCxJQUNwQm9HLEdBQU1qSyxTQUFTNkQsSUFDZm9HLEdBQU0zRSxTQUFTekIsSUFDZm9HLEdBQU16SixPQUFPcUQsSUFDYm9HLEdBQU14SixPQUFPb0QsSUFDYm9HLEdBQU05SSxpQkFBaUIwQyxHQUV2QixPQUFPQSxFQUVULEdBQUlvRyxHQUFNdEYsa0JBQWtCZCxHQUMxQixPQUFPQSxFQUFLaUIsT0FFZCxHQUFJbUYsR0FBTS9JLGtCQUFrQjJDLEdBRTFCLE9BREErRyxFQUFRZ00sZUFBZSxtREFBbUQsR0FDbkUvUyxFQUFLeEUsV0FHZCxJQUFJcUIsRUFFSixHQUFJaVcsRUFBaUIsQ0FDbkIsTUFBTUUsRUFBaUJWLEdBQUl2USxLQUFNLGtCQUNqQyxHQUFJNFEsRUFBWXBhLFFBQVEsc0NBQXVDLEVBQzdELE9DM0VLLFNBQTBCeUgsRUFBTTJOLEdBQzdDLE9BQU9ELEdBQVcxTixFQUFNLElBQUkrUixHQUFTZCxRQUFRQyxnQkFBbUIsQ0FDOURuRCxRQUFTLFNBQVU5WSxFQUFPK0ksRUFBS3VQLEVBQU0wRixHQUNuQyxPQUFJbEIsR0FBU21CLFFBQVU5TSxHQUFNakssU0FBU2xILElBQ3BDOE0sS0FBS25CLE9BQU81QyxFQUFLL0ksRUFBTXVHLFNBQVMsWUFDekIsR0FHRnlYLEVBQVFqRixlQUFlMVMsTUFBTXlHLEtBQU14RyxVQUM1QyxLQUNHb1MsR0FFUCxDRCtEaUJ3RixDQUFpQm5ULEVBQU1nVCxHQUFnQnhYLFdBR2hELElBQ0dxQixFQUFhdUosR0FBTXZKLFdBQVdtRCxLQUMvQjJTLEVBQVlwYSxRQUFRLHdCQUF5QixFQUM3QyxDQUNBLE1BQU02YSxFQUFNZCxHQUFJdlEsS0FBTSxPQUNoQnNSLEVBQVlELEdBQU9BLEVBQUloVyxTQUU3QixPQUFPc1EsR0FDTDdRLEVBQWEsQ0FBRSxVQUFXbUQsR0FBU0EsRUFDbkNxVCxHQUFhLElBQUlBLEVBQ2pCTCxFQUVKLENBQ0YsQ0FFQSxPQUFJRixHQUFtQkQsR0FDckI5TCxFQUFRZ00sZUFBZSxvQkFBb0IsR0E5RW5ELFNBQXlCTyxFQUFVN0ssRUFBUXNILEdBQ3pDLEdBQUkzSixHQUFNdE8sU0FBU3diLEdBQ2pCLElBRUUsT0FEQzdLLEdBQVUrRixLQUFLK0UsT0FBT0QsR0FDaEJsTixHQUFNM0wsS0FBSzZZLEVBQ3BCLENBQUUsTUFBTzllLEdBQ1AsR0FBZSxnQkFBWEEsRUFBRW9DLEtBQ0osTUFBTXBDLENBRVYsQ0FHRixPQUFRdWIsR0FBV3ZCLEtBQUtDLFdBQVc2RSxFQUNyQyxDQWtFZUUsQ0FBZ0J4VCxJQUdsQkEsQ0FDVCxHQUdGeVQsa0JBQW1CLENBQ2pCLFNBQTJCelQsR0FDekIsTUFBTXdTLEVBQWVGLEdBQUl2USxLQUFNLGlCQUFtQndRLEdBQVNDLGFBQ3JEN0IsRUFBb0I2QixHQUFnQkEsRUFBYTdCLGtCQUNqRCtDLEVBQWVwQixHQUFJdlEsS0FBTSxnQkFDekI0UixFQUFpQyxTQUFqQkQsRUFFdEIsR0FBSXROLEdBQU01SSxXQUFXd0MsSUFBU29HLEdBQU05SSxpQkFBaUIwQyxHQUNuRCxPQUFPQSxFQUdULEdBQ0VBLEdBQ0FvRyxHQUFNdE8sU0FBU2tJLEtBQ2IyUSxJQUFzQitDLEdBQWlCQyxHQUN6QyxDQUNBLE1BQ01DLElBRG9CcEIsR0FBZ0JBLEVBQWE5QixvQkFDUGlELEVBRWhELElBQ0UsT0FBT25GLEtBQUsrRSxNQUFNdlQsRUFBTXNTLEdBQUl2USxLQUFNLGdCQUNwQyxDQUFFLE1BQU92TixHQUNQLEdBQUlvZixFQUFtQixDQUNyQixHQUFlLGdCQUFYcGYsRUFBRW9DLEtBQ0osTUFBTXVVLEdBQVd6QixLQUFLbFYsRUFBRzJXLEdBQVcyQixpQkFBa0IvSyxLQUFNLEtBQU11USxHQUFJdlEsS0FBTSxhQUU5RSxNQUFNdk4sQ0FDUixDQUNGLENBQ0YsQ0FFQSxPQUFPd0wsQ0FDVCxHQU9GNlQsUUFBUyxFQUVUQyxlQUFnQixhQUNoQkMsZUFBZ0IsZUFFaEJDLGtCQUFrQixFQUNsQkMsZUFBZSxFQUVmYixJQUFLLENBQ0hoVyxTQUFVMlUsR0FBU2QsUUFBUTdULFNBQzNCOFEsS0FBTTZELEdBQVNkLFFBQVEvQyxNQUd6QmdHLGVBQWdCLFNBQXdCdkksR0FDdEMsT0FBT0EsR0FBVSxLQUFPQSxFQUFTLEdBQ25DLEVBRUE1RSxRQUFTLENBQ1BvTixPQUFRLENBQ05DLE9BQVEsb0NBQ1Isb0JBQWdCOWMsS0V6SlAsU0FBUytjLEdBQWNDLEVBQUtoSixHQUN6QyxNQUFNWixFQUFTM0ksTUFBUXdRLEdBQ2pCbFUsRUFBVWlOLEdBQVlaLEVBQ3RCM0QsRUFBVXVELEdBQWFaLEtBQUtyTCxFQUFRMEksU0FDMUMsSUFBSS9HLEVBQU8zQixFQUFRMkIsS0FRbkIsT0FOQW9HLEdBQU14TCxRQUFRMFosRUFBSyxTQUFtQmxaLEdBQ3BDNEUsRUFBTzVFLEVBQUcxRyxLQUFLZ1csRUFBUTFLLEVBQU0rRyxFQUFRblAsWUFBYTBULEVBQVdBLEVBQVNLLFlBQVNyVSxFQUNqRixHQUVBeVAsRUFBUW5QLFlBRURvSSxDQUNULENDekJlLFNBQVN1VSxHQUFTdGYsR0FDL0IsU0FBVUEsSUFBU0EsRUFBTXVmLFdBQzNCLENId0tBcE8sR0FBTXhMLFFBQVEsQ0FBQyxTQUFVLE1BQU8sT0FBUSxPQUFRLE1BQU8sUUFBUyxTQUFXNlosSUFDekVsQyxHQUFTeEwsUUFBUTBOLEdBQVUsQ0FBQSxXSXpLN0IsY0FBNEJ0SixHQVUxQixXQUFBalgsQ0FBWXVYLEVBQVNmLEVBQVFXLEdBQzNCTyxNQUFpQixNQUFYSCxFQUFrQixXQUFhQSxFQUFTTixHQUFXNkIsYUFBY3RDLEVBQVFXLEdBQy9FdEosS0FBS25MLEtBQU8sZ0JBQ1ptTCxLQUFLeVMsWUFBYSxDQUNwQixHQ0xhLFNBQVNFLEdBQU9DLEVBQVNDLEVBQVF0SixHQUM5QyxNQUFNNEksRUFBaUI1SSxFQUFTWixPQUFPd0osZUFDbEM1SSxFQUFTSyxRQUFXdUksSUFBa0JBLEVBQWU1SSxFQUFTSyxRQUdqRWlKLEVBQU8sSUFBSXpKLEdBQ1QsbUNBQXFDRyxFQUFTSyxPQUM5Q0wsRUFBU0ssUUFBVSxLQUFPTCxFQUFTSyxPQUFTLElBQU1SLEdBQVc0QixnQkFBa0I1QixHQUFXMkIsaUJBQzFGeEIsRUFBU1osT0FDVFksRUFBU0QsUUFDVEMsSUFQRnFKLEVBQVFySixFQVVaLENDdEJPLE1BQU11SixHQUF1QixDQUFDQyxFQUFVQyxFQUFrQkMsRUFBTyxLQUN0RSxJQUFJQyxFQUFnQixFQUNwQixNQUFNQyxFQ0VSLFNBQXFCQyxFQUFjQyxHQUNqQ0QsRUFBZUEsR0FBZ0IsR0FDL0IsTUFBTUUsRUFBUSxJQUFJemMsTUFBTXVjLEdBQ2xCRyxFQUFhLElBQUkxYyxNQUFNdWMsR0FDN0IsSUFFSUksRUFGQUMsRUFBTyxFQUNQQyxFQUFPLEVBS1gsT0FGQUwsT0FBYzlkLElBQVI4ZCxFQUFvQkEsRUFBTSxJQUV6QixTQUFjTSxHQUNuQixNQUFNQyxFQUFNQyxLQUFLRCxNQUVYRSxFQUFZUCxFQUFXRyxHQUV4QkYsSUFDSEEsRUFBZ0JJLEdBR2xCTixFQUFNRyxHQUFRRSxFQUNkSixFQUFXRSxHQUFRRyxFQUVuQixJQUFJcmhCLEVBQUltaEIsRUFDSkssRUFBYSxFQUVqQixLQUFPeGhCLElBQU1raEIsR0FDWE0sR0FBY1QsRUFBTS9nQixLQUNwQkEsR0FBUTZnQixFQVNWLEdBTkFLLEdBQVFBLEVBQU8sR0FBS0wsRUFFaEJLLElBQVNDLElBQ1hBLEdBQVFBLEVBQU8sR0FBS04sR0FHbEJRLEVBQU1KLEVBQWdCSCxFQUN4QixPQUdGLE1BQU1XLEVBQVNGLEdBQWFGLEVBQU1FLEVBRWxDLE9BQU9FLEVBQVN2ZSxLQUFLd2UsTUFBb0IsSUFBYkYsRUFBcUJDLFFBQVV6ZSxDQUM3RCxDQUNGLENEOUN1QjJlLENBQVksR0FBSSxLQUVyQyxPRUZGLFNBQWtCN2EsRUFBSTRaLEdBQ3BCLElBRUlrQixFQUNBQyxFQUhBQyxFQUFZLEVBQ1pDLEVBQVksSUFBT3JCLEVBSXZCLE1BQU1zQixFQUFTLENBQUNDLEVBQU1aLEVBQU1DLEtBQUtELFNBQy9CUyxFQUFZVCxFQUNaTyxFQUFXLEtBQ1BDLElBQ0ZLLGFBQWFMLEdBQ2JBLEVBQVEsTUFFVi9hLEtBQU1tYixJQXFCUixNQUFPLENBbEJXLElBQUlBLEtBQ3BCLE1BQU1aLEVBQU1DLEtBQUtELE1BQ1hJLEVBQVNKLEVBQU1TLEVBQ2pCTCxHQUFVTSxFQUNaQyxFQUFPQyxFQUFNWixJQUViTyxFQUFXSyxFQUNOSixJQUNIQSxFQUFRL1YsV0FBVyxLQUNqQitWLEVBQVEsS0FDUkcsRUFBT0osSUFDTkcsRUFBWU4sTUFLUCxJQUFNRyxHQUFZSSxFQUFPSixHQUd6QyxDRmpDU08sQ0FBVWppQixJQUNmLElBQUtBLEdBQXlCLGlCQUFiQSxFQUFFa2lCLE9BQ2pCLE9BRUYsTUFBTUMsRUFBWW5pQixFQUFFa2lCLE9BQ2RFLEVBQVFwaUIsRUFBRXFpQixpQkFBbUJyaUIsRUFBRW9pQixXQUFRdGYsRUFDdkNvZixFQUFrQixNQUFURSxFQUFnQnBmLEtBQUs0ZCxJQUFJdUIsRUFBV0MsR0FBU0QsRUFDdERHLEVBQWdCdGYsS0FBS3VmLElBQUksRUFBR0wsRUFBU3pCLEdBQ3JDK0IsRUFBTzlCLEVBQWE0QixHQUUxQjdCLEVBQWdCemQsS0FBS3VmLElBQUk5QixFQUFleUIsR0FjeEM1QixFQVphLENBQ1g0QixTQUNBRSxRQUNBSyxTQUFVTCxFQUFRRixFQUFTRSxPQUFRdGYsRUFDbkMrZCxNQUFPeUIsRUFDUEUsS0FBTUEsUUFBYzFmLEVBQ3BCNGYsVUFBV0YsR0FBUUosR0FBU0EsRUFBUUYsR0FBVU0sT0FBTzFmLEVBQ3JENmYsTUFBTzNpQixFQUNQcWlCLGlCQUEyQixNQUFURCxFQUNsQixDQUFDN0IsRUFBbUIsV0FBYSxXQUFXLEtBSTdDQyxJQUdRb0MsR0FBeUIsQ0FBQ1IsRUFBT1MsS0FDNUMsTUFBTVIsRUFBNEIsTUFBVEQsRUFFekIsTUFBTyxDQUNKRixHQUNDVyxFQUFVLEdBQUcsQ0FDWFIsbUJBQ0FELFFBQ0FGLFdBRUpXLEVBQVUsS0FJREMsR0FDVmxjLEdBQ0QsSUFBSW1iLElBQ0ZuUSxHQUFNL0YsS0FBSyxJQUFNakYsS0FBTW1iLElHbkQzQixJQUFBZ0IsR0FBZXhGLEdBQVNQLHNCQUNwQixFQUFFamIsRUFBUWloQixJQUFZaEksSUFDcEJBLEVBQU0sSUFBSWlJLElBQUlqSSxFQUFLdUMsR0FBU3hiLFFBRzFCQSxFQUFPbWhCLFdBQWFsSSxFQUFJa0ksVUFDeEJuaEIsRUFBT29oQixPQUFTbkksRUFBSW1JLE9BQ25CSCxHQUFVamhCLEVBQU9xaEIsT0FBU3BJLEVBQUlvSSxPQU5uQyxDQVNFLElBQUlILElBQUkxRixHQUFTeGIsUUFDakJ3YixHQUFTUixXQUFhLGtCQUFrQnJaLEtBQUs2WixHQUFTUixVQUFVc0csWUFFbEUsS0FBTSxFQ1pWQyxHQUFlL0YsR0FBU1Asc0JBRXBCLENBQ0UsS0FBQXVHLENBQU1uaEIsRUFBTTNCLEVBQU8raUIsRUFBU3pLLEVBQU0wSyxFQUFRQyxFQUFRQyxHQUNoRCxHQUF3QixvQkFBYjlHLFNBQTBCLE9BRXJDLE1BQU0rRyxFQUFTLENBQUMsR0FBR3hoQixLQUFRdVksbUJBQW1CbGEsTUFFMUNtUixHQUFNN0osU0FBU3liLElBQ2pCSSxFQUFPalksS0FBSyxXQUFXLElBQUl5VixLQUFLb0MsR0FBU0ssaUJBRXZDalMsR0FBTXRPLFNBQVN5VixJQUNqQjZLLEVBQU9qWSxLQUFLLFFBQVFvTixLQUVsQm5ILEdBQU10TyxTQUFTbWdCLElBQ2pCRyxFQUFPalksS0FBSyxVQUFVOFgsTUFFVCxJQUFYQyxHQUNGRSxFQUFPalksS0FBSyxVQUVWaUcsR0FBTXRPLFNBQVNxZ0IsSUFDakJDLEVBQU9qWSxLQUFLLFlBQVlnWSxLQUcxQjlHLFNBQVMrRyxPQUFTQSxFQUFPcGQsS0FBSyxLQUNoQyxFQUVBLElBQUFzZCxDQUFLMWhCLEdBQ0gsR0FBd0Isb0JBQWJ5YSxTQUEwQixPQUFPLEtBTTVDLE1BQU15RyxFQUFVekcsU0FBUytHLE9BQU92aUIsTUFBTSxLQUN0QyxJQUFLLElBQUl2QixFQUFJLEVBQUdBLEVBQUl3akIsRUFBUWhpQixPQUFReEIsSUFBSyxDQUN2QyxNQUFNOGpCLEVBQVNOLEVBQVF4akIsR0FBRzRHLFFBQVEsT0FBUSxJQUNwQ3FkLEVBQUtILEVBQU83ZixRQUFRLEtBQzFCLElBQVcsSUFBUGdnQixHQUFhSCxFQUFPcmMsTUFBTSxFQUFHd2MsS0FBUTNoQixFQUN2QyxPQUFPNGhCLG1CQUFtQkosRUFBT3JjLE1BQU13YyxFQUFLLEdBRWhELENBQ0EsT0FBTyxJQUNULEVBRUEsTUFBQUUsQ0FBTzdoQixHQUNMbUwsS0FBS2dXLE1BQU1uaEIsRUFBTSxHQUFJZ2YsS0FBS0QsTUFBUSxNQUFVLElBQzlDLEdBR0YsQ0FDRSxLQUFBb0MsR0FBUyxFQUNUTyxLQUFJLElBQ0ssS0FFVCxNQUFBRyxHQUFVLEdDM0NELFNBQVNDLEdBQWNDLEVBQVNDLEVBQWNDLEdBQzNELElBQUlDLElDSGUsaUJBSmlCdEosRURPRG9KLElDQzVCLDhCQUE4QjFnQixLQUFLc1gsSUFSN0IsSUFBdUJBLEVEUXBDLE9BQUltSixJQUFZRyxJQUF1QyxJQUF0QkQsR0VQcEIsU0FBcUJGLEVBQVNJLEdBQzNDLE9BQU9BLEVBQ0hKLEVBQVF6ZCxRQUFRLFNBQVUsSUFBTSxJQUFNNmQsRUFBWTdkLFFBQVEsT0FBUSxJQUNsRXlkLENBQ04sQ0ZJV0ssQ0FBWUwsRUFBU0MsR0FFdkJBLENBQ1QsQ0doQkEsTUFBTUssR0FBbUJuZCxHQUFXQSxhQUFpQndPLEdBQWUsSUFBS3hPLEdBQVVBLEVBV3BFLFNBQVNvZCxHQUFZQyxFQUFTQyxHQUUzQ0EsRUFBVUEsR0FBVyxDQUFBLEVBTXJCLE1BQU0xTyxFQUFTM1YsT0FBTzhHLE9BQU8sTUFXN0IsU0FBU3dkLEVBQWV6VCxFQUFRdE4sRUFBUXFHLEVBQU1rRCxHQUM1QyxPQUFJdUUsR0FBTTNKLGNBQWNtSixJQUFXUSxHQUFNM0osY0FBY25FLEdBQzlDOE4sR0FBTXpFLE1BQU1qTixLQUFLLENBQUVtTixZQUFZK0QsRUFBUXROLEdBQ3JDOE4sR0FBTTNKLGNBQWNuRSxHQUN0QjhOLEdBQU16RSxNQUFNLENBQUEsRUFBSXJKLEdBQ2Q4TixHQUFNdk4sUUFBUVAsR0FDaEJBLEVBQU95RCxRQUVUekQsQ0FDVCxDQUVBLFNBQVNnaEIsRUFBb0I5VyxFQUFHQyxFQUFHOUQsRUFBTWtELEdBQ3ZDLE9BQUt1RSxHQUFNbEssWUFBWXVHLEdBRVgyRCxHQUFNbEssWUFBWXNHLFFBQXZCLEVBQ0U2VyxPQUFlL2hCLEVBQVdrTCxFQUFHN0QsRUFBTWtELEdBRm5Dd1gsRUFBZTdXLEVBQUdDLEVBQUc5RCxFQUFNa0QsRUFJdEMsQ0FHQSxTQUFTMFgsRUFBaUIvVyxFQUFHQyxHQUMzQixJQUFLMkQsR0FBTWxLLFlBQVl1RyxHQUNyQixPQUFPNFcsT0FBZS9oQixFQUFXbUwsRUFFckMsQ0FHQSxTQUFTK1csRUFBaUJoWCxFQUFHQyxHQUMzQixPQUFLMkQsR0FBTWxLLFlBQVl1RyxHQUVYMkQsR0FBTWxLLFlBQVlzRyxRQUF2QixFQUNFNlcsT0FBZS9oQixFQUFXa0wsR0FGMUI2VyxPQUFlL2hCLEVBQVdtTCxFQUlyQyxDQUdBLFNBQVNnWCxFQUFnQmpYLEVBQUdDLEVBQUc5RCxHQUM3QixPQUFJeUgsR0FBTTlCLFdBQVc4VSxFQUFTemEsR0FDckIwYSxFQUFlN1csRUFBR0MsR0FDaEIyRCxHQUFNOUIsV0FBVzZVLEVBQVN4YSxHQUM1QjBhLE9BQWUvaEIsRUFBV2tMLFFBRDVCLENBR1QsQ0FwREF6TixPQUFPQyxlQUFlMFYsRUFBUSxpQkFBa0IsQ0FHOUNoSSxVQUFXLEtBQ1h6TixNQUFPRixPQUFPWixVQUFVdUssZUFDeEJ4SixZQUFZLEVBQ1pFLFVBQVUsRUFDVkQsY0FBYyxJQStDaEIsTUFBTXVrQixFQUFXLENBQ2ZsSyxJQUFLK0osRUFDTDlFLE9BQVE4RSxFQUNSdlosS0FBTXVaLEVBQ05aLFFBQVNhLEVBQ1Q5RyxpQkFBa0I4RyxFQUNsQi9GLGtCQUFtQitGLEVBQ25CRyxpQkFBa0JILEVBQ2xCM0YsUUFBUzJGLEVBQ1RJLGVBQWdCSixFQUNoQkssZ0JBQWlCTCxFQUNqQk0sY0FBZU4sRUFDZi9HLFFBQVMrRyxFQUNUOUYsYUFBYzhGLEVBQ2QxRixlQUFnQjBGLEVBQ2hCekYsZUFBZ0J5RixFQUNoQk8saUJBQWtCUCxFQUNsQlEsbUJBQW9CUixFQUNwQlMsV0FBWVQsRUFDWnhGLGlCQUFrQndGLEVBQ2xCdkYsY0FBZXVGLEVBQ2ZVLGVBQWdCVixFQUNoQlcsVUFBV1gsRUFDWFksVUFBV1osRUFDWGEsV0FBWWIsRUFDWmMsWUFBYWQsRUFDYmUsV0FBWWYsRUFDWmdCLG1CQUFvQmhCLEVBQ3BCaUIsaUJBQWtCakIsRUFDbEJ0RixlQUFnQnVGLEVBQ2hCMVMsUUFBUyxDQUFDdkUsRUFBR0MsRUFBRzlELElBQ2QyYSxFQUFvQkwsR0FBZ0J6VyxHQUFJeVcsR0FBZ0J4VyxHQUFJOUQsR0FBTSxJQVl0RSxPQVRBeUgsR0FBTXhMLFFBQVE3RixPQUFPOEksS0FBSyxJQUFLc2IsS0FBWUMsSUFBWSxTQUE0QnphLEdBQ2pGLEdBQWEsY0FBVEEsR0FBaUMsZ0JBQVRBLEdBQW1DLGNBQVRBLEVBQXNCLE9BQzVFLE1BQU1nRCxFQUFReUUsR0FBTTlCLFdBQVdvVixFQUFVL2EsR0FBUSthLEVBQVMvYSxHQUFRMmEsRUFHNURvQixFQUFjL1ksRUFGVnlFLEdBQU05QixXQUFXNlUsRUFBU3hhLEdBQVF3YSxFQUFReGEsUUFBUXJILEVBQ2xEOE8sR0FBTTlCLFdBQVc4VSxFQUFTemEsR0FBUXlhLEVBQVF6YSxRQUFRckgsRUFDNUJxSCxHQUMvQnlILEdBQU1sSyxZQUFZd2UsSUFBZ0IvWSxJQUFVOFgsSUFBcUIvTyxFQUFPL0wsR0FBUStiLEVBQ25GLEdBRU9oUSxDQUNULENDbEhBLE1BQU1pUSxHQUE0QixDQUFDLGVBQWdCLGtCQTRCbkQsU0FBU0MsR0FBY2xRLEdBQ3JCLE1BQU1tUSxFQUFZM0IsR0FBWSxDQUFBLEVBQUl4TyxHQUk1QjRILEVBQU90VSxHQUFTb0ksR0FBTTlCLFdBQVd1VyxFQUFXN2MsR0FBTzZjLEVBQVU3YyxRQUFPMUcsRUFFcEUwSSxFQUFPc1MsRUFBSSxRQUNqQixJQUFJd0gsRUFBZ0J4SCxFQUFJLGlCQUN4QixNQUFNeUIsRUFBaUJ6QixFQUFJLGtCQUNyQndCLEVBQWlCeEIsRUFBSSxrQkFDM0IsSUFBSXZMLEVBQVV1TCxFQUFJLFdBQ2xCLE1BQU13SSxFQUFPeEksRUFBSSxRQUNYcUcsRUFBVXJHLEVBQUksV0FDZHVHLEVBQW9CdkcsRUFBSSxxQkFDeEI5QyxFQUFNOEMsRUFBSSxPQXBCQyxJQUFDemEsRUF3RGxCLEdBbENBZ2pCLEVBQVU5VCxRQUFVQSxFQUFVdUQsR0FBYVosS0FBSzNDLEdBRWhEOFQsRUFBVXJMLElBQU1ELEdBQ2RtSixHQUFjQyxFQUFTbkosRUFBS3FKLEdBQzVCdkcsRUFBSSxVQUNKQSxFQUFJLHFCQUlGd0ksR0FDRi9ULEVBQVF2QyxJQUNOLGdCQUNBLFNBQ0V1VyxNQUFNRCxFQUFLRSxVQUFZLElBQU0sS0FBT0YsRUFBS0csVUFuQzdCcGpCLEVBbUNtRGlqQixFQUFLRyxTQWxDMUU5TCxtQkFBbUJ0WCxHQUFLcUQsUUFBUSxtQkFBb0IsQ0FBQ2dnQixFQUFHQyxJQUN0RHZtQixPQUFPd21CLGFBQWFDLFNBQVNGLEVBQUssT0FpQ2tELE1BSWxGL1UsR0FBTTFGLFdBQVdWLEtBRWpCK1IsR0FBU1AsdUJBQ1RPLEdBQVNMLGdDQUNUdEwsR0FBTTlFLGNBQWN0QixHQUVwQitHLEVBQVFnTSxvQkFBZXpiLEdBQ2Q4TyxHQUFNL0osV0FBVzJELEVBQUtzYixhQW5FckMsU0FBNEJ2VSxFQUFTd1UsRUFBYUMsR0FDakMsaUJBQVhBLEVBS0p6bUIsT0FBT3lVLFFBQVErUixHQUFhM2dCLFFBQVEsRUFBRW9ELEVBQUs1QixNQUNyQ3VlLEdBQTBCN2pCLFNBQVNrSCxFQUFJakcsZ0JBQ3pDZ1AsRUFBUXZDLElBQUl4RyxFQUFLNUIsS0FObkIySyxFQUFRdkMsSUFBSStXLEVBU2hCLENBMERNRSxDQUFtQjFVLEVBQVMvRyxFQUFLc2IsYUFBY2hKLEVBQUksMEJBUW5EUCxHQUFTUCxzQkFBdUIsQ0FDOUJwTCxHQUFNL0osV0FBV3lkLEtBQ25CQSxFQUFnQkEsRUFBY2UsSUFTaEMsSUFGb0IsSUFBbEJmLEdBQTRDLE1BQWpCQSxHQUF5QnZDLEdBQWdCc0QsRUFBVXJMLEtBRTVELENBQ2xCLE1BQU1rTSxFQUFZM0gsR0FBa0JELEdBQWtCZ0UsR0FBUVEsS0FBS3hFLEdBRS9ENEgsR0FDRjNVLEVBQVF2QyxJQUFJdVAsRUFBZ0IySCxFQUVoQyxDQUNGLENBRUEsT0FBT2IsQ0FDVCxDQy9GQSxJQUFBYyxHQUZ3RCxvQkFBbkJDLGdCQUduQyxTQUFVbFIsR0FDUixPQUFPLElBQUltUixRQUFRLFNBQTRCbEgsRUFBU0MsR0FDdEQsTUFBTWtILEVBQVVsQixHQUFjbFEsR0FDOUIsSUFBSXFSLEVBQWNELEVBQVE5YixLQUMxQixNQUFNZ2MsRUFBaUIxUixHQUFhWixLQUFLb1MsRUFBUS9VLFNBQVNuUCxZQUMxRCxJQUNJcWtCLEVBQ0FDLEVBQWlCQyxFQUNqQkMsRUFBYUMsR0FIYjNJLGFBQUVBLEVBQVlxRyxpQkFBRUEsRUFBZ0JDLG1CQUFFQSxHQUF1QjhCLEVBSzdELFNBQVM5WCxJQUNQb1ksR0FBZUEsSUFDZkMsR0FBaUJBLElBRWpCUCxFQUFReEIsYUFBZXdCLEVBQVF4QixZQUFZZ0MsWUFBWUwsR0FFdkRILEVBQVFTLFFBQVVULEVBQVFTLE9BQU9DLG9CQUFvQixRQUFTUCxFQUNoRSxDQUVBLElBQUk1USxFQUFVLElBQUl1USxlQU9sQixTQUFTYSxJQUNQLElBQUtwUixFQUNILE9BR0YsTUFBTXFSLEVBQWtCcFMsR0FBYVosS0FDbkMsMEJBQTJCMkIsR0FBV0EsRUFBUXNSLHlCQWVoRGpJLEdBQ0UsU0FBa0J6ZixHQUNoQjBmLEVBQVExZixHQUNSK08sR0FDRixFQUNBLFNBQWlCNFksR0FDZmhJLEVBQU9nSSxHQUNQNVksR0FDRixFQWpCZSxDQUNmaEUsS0FKQzBULEdBQWlDLFNBQWpCQSxHQUE0QyxTQUFqQkEsRUFFeENySSxFQUFRQyxTQURSRCxFQUFRd1IsYUFJWmxSLE9BQVFOLEVBQVFNLE9BQ2hCbVIsV0FBWXpSLEVBQVF5UixXQUNwQi9WLFFBQVMyVixFQUNUaFMsU0FDQVcsWUFnQkZBLEVBQVUsSUFDWixDQXhDQUEsRUFBUTBSLEtBQUtqQixFQUFRckgsT0FBT3pQLGNBQWU4VyxFQUFRdE0sS0FBSyxHQUd4RG5FLEVBQVF3SSxRQUFVaUksRUFBUWpJLFFBdUN0QixjQUFleEksRUFFakJBLEVBQVFvUixVQUFZQSxFQUdwQnBSLEVBQVEyUixtQkFBcUIsV0FDdEIzUixHQUFrQyxJQUF2QkEsRUFBUTRSLGFBU0gsSUFBbkI1UixFQUFRTSxRQUNOTixFQUFRNlIsYUFBZTdSLEVBQVE2UixZQUFZQyxXQUFXLFdBTTFEL2MsV0FBV3FjLEVBQ2IsRUFJRnBSLEVBQVErUixRQUFVLFdBQ1gvUixJQUlMdUosRUFBTyxJQUFJekosR0FBVyxrQkFBbUJBLEdBQVdxQixhQUFjOUIsRUFBUVcsSUFDMUVySCxJQUdBcUgsRUFBVSxLQUNaLEVBR0FBLEVBQVFnUyxRQUFVLFNBQXFCbEcsR0FJckMsTUFBTW1HLEVBQU1uRyxHQUFTQSxFQUFNMUwsUUFBVTBMLEVBQU0xTCxRQUFVLGdCQUMvQ21SLEVBQU0sSUFBSXpSLEdBQVdtUyxFQUFLblMsR0FBV3dCLFlBQWFqQyxFQUFRVyxHQUVoRXVSLEVBQUl6RixNQUFRQSxHQUFTLEtBQ3JCdkMsRUFBT2dJLEdBQ1A1WSxJQUNBcUgsRUFBVSxJQUNaLEVBR0FBLEVBQVFrUyxVQUFZLFdBQ2xCLElBQUlDLEVBQXNCMUIsRUFBUWpJLFFBQzlCLGNBQWdCaUksRUFBUWpJLFFBQVUsY0FDbEMsbUJBQ0osTUFBTXJCLEVBQWVzSixFQUFRdEosY0FBZ0IvQixHQUN6Q3FMLEVBQVEwQixzQkFDVkEsRUFBc0IxQixFQUFRMEIscUJBRWhDNUksRUFDRSxJQUFJekosR0FDRnFTLEVBQ0FoTCxFQUFhNUIsb0JBQXNCekYsR0FBV3NCLFVBQVl0QixHQUFXcUIsYUFDckU5QixFQUNBVyxJQUdKckgsSUFHQXFILEVBQVUsSUFDWixPQUdnQi9ULElBQWhCeWtCLEdBQTZCQyxFQUFlakosZUFBZSxNQUd2RCxxQkFBc0IxSCxHQUN4QmpGLEdBQU14TCxRQUFRa00sR0FBeUJrVixHQUFpQixTQUEwQjVmLEVBQUs0QixHQUNyRnFOLEVBQVFvUyxpQkFBaUJ6ZixFQUFLNUIsRUFDaEMsR0FJR2dLLEdBQU1sSyxZQUFZNGYsRUFBUWpDLG1CQUM3QnhPLEVBQVF3TyxrQkFBb0JpQyxFQUFRakMsaUJBSWxDbkcsR0FBaUMsU0FBakJBLElBQ2xCckksRUFBUXFJLGFBQWVvSSxFQUFRcEksY0FJN0JzRyxLQUNEbUMsRUFBbUJFLEdBQWlCeEgsR0FBcUJtRixHQUFvQixHQUM5RTNPLEVBQVF0TCxpQkFBaUIsV0FBWW9jLElBSW5DcEMsR0FBb0IxTyxFQUFRcVMsVUFDN0J4QixFQUFpQkUsR0FBZXZILEdBQXFCa0YsR0FFdEQxTyxFQUFRcVMsT0FBTzNkLGlCQUFpQixXQUFZbWMsR0FFNUM3USxFQUFRcVMsT0FBTzNkLGlCQUFpQixVQUFXcWMsS0FHekNOLEVBQVF4QixhQUFld0IsRUFBUVMsVUFHakNOLEVBQWMwQixJQUNQdFMsSUFHTHVKLEdBQVErSSxHQUFVQSxFQUFPdG5CLEtBQU8sSUFBSXVuQixHQUFjLEtBQU1sVCxFQUFRVyxHQUFXc1MsR0FDM0V0UyxFQUFRd1MsUUFDUjdaLElBQ0FxSCxFQUFVLE9BR1p5USxFQUFReEIsYUFBZXdCLEVBQVF4QixZQUFZd0QsVUFBVTdCLEdBQ2pESCxFQUFRUyxTQUNWVCxFQUFRUyxPQUFPd0IsUUFDWDlCLElBQ0FILEVBQVFTLE9BQU94YyxpQkFBaUIsUUFBU2tjLEtBSWpELE1BQU12RSxFQ2hORyxTQUF1QmxJLEdBQ3BDLE1BQU1qVyxFQUFRLDRCQUE0QjhLLEtBQUttTCxHQUMvQyxPQUFRalcsR0FBU0EsRUFBTSxJQUFPLEVBQ2hDLENENk11QnlrQixDQUFjbEMsRUFBUXRNLE1BRW5Da0ksR0FBYTNGLEdBQVNaLFVBQVVyYSxTQUFTNGdCLEdBWTdDck0sRUFBUTRTLEtBQUtsQyxHQUFlLE1BWDFCbkgsRUFDRSxJQUFJekosR0FDRix3QkFBMEJ1TSxFQUFXLElBQ3JDdk0sR0FBVzRCLGdCQUNYckMsR0FRUixFQUNGLEVFOU5GLE1BQU13VCxHQUFpQixDQUFDQyxFQUFTdEssS0FHL0IsR0FGQXNLLEVBQVVBLEVBQVVBLEVBQVFobEIsT0FBT2lsQixTQUFXLElBRXpDdkssSUFBWXNLLEVBQVFyb0IsT0FDdkIsT0FHRixNQUFNdW9CLEVBQWEsSUFBSUMsZ0JBRXZCLElBQUlQLEdBQVUsRUFFZCxNQUFNWCxFQUFVLFNBQVVtQixHQUN4QixJQUFLUixFQUFTLENBQ1pBLEdBQVUsRUFDVnpCLElBQ0EsTUFBTU0sRUFBTTJCLGFBQWtCOVosTUFBUThaLEVBQVN4YyxLQUFLd2MsT0FDcERGLEVBQVdSLE1BQ1RqQixhQUFlelIsR0FDWHlSLEVBQ0EsSUFBSWdCLEdBQWNoQixhQUFlblksTUFBUW1ZLEVBQUluUixRQUFVbVIsR0FFL0QsQ0FDRixFQUVBLElBQUl6RyxFQUNGdEMsR0FDQXpULFdBQVcsS0FDVCtWLEVBQVEsS0FDUmlILEVBQVEsSUFBSWpTLEdBQVcsY0FBYzBJLGVBQXNCMUksR0FBV3NCLGFBQ3JFb0gsR0FFTCxNQUFNeUksRUFBYyxLQUNiNkIsSUFDTGhJLEdBQVNLLGFBQWFMLEdBQ3RCQSxFQUFRLEtBQ1JnSSxFQUFRdmpCLFFBQVMyaEIsSUFDZkEsRUFBT0QsWUFDSEMsRUFBT0QsWUFBWWMsR0FDbkJiLEVBQU9DLG9CQUFvQixRQUFTWSxLQUUxQ2UsRUFBVSxPQUdaQSxFQUFRdmpCLFFBQVMyaEIsR0FBV0EsRUFBT3hjLGlCQUFpQixRQUFTcWQsSUFFN0QsTUFBTWIsT0FBRUEsR0FBVzhCLEVBSW5CLE9BRkE5QixFQUFPRCxZQUFjLElBQU1sVyxHQUFNL0YsS0FBS2ljLEdBRS9CQyxHQ3JESWlDLEdBQWMsVUFBV0MsRUFBT0MsR0FDM0MsSUFBSTNnQixFQUFNMGdCLEVBQU1FLFdBRWhCLEdBQWtCNWdCLEVBQU0yZ0IsRUFFdEIsa0JBRE1ELEdBSVIsSUFDSTlYLEVBREFpWSxFQUFNLEVBR1YsS0FBT0EsRUFBTTdnQixHQUNYNEksRUFBTWlZLEVBQU1GLFFBQ05ELEVBQU0xaUIsTUFBTTZpQixFQUFLalksR0FDdkJpWSxFQUFNalksQ0FFVixFQVFNa1ksR0FBYUMsZ0JBQWlCQyxHQUNsQyxHQUFJQSxFQUFPL3FCLE9BQU9nckIsZUFFaEIsa0JBRE9ELEdBSVQsTUFBTUUsRUFBU0YsRUFBT0csWUFDdEIsSUFDRSxPQUFTLENBQ1AsTUFBTWxiLEtBQUVBLEVBQUkvTyxNQUFFQSxTQUFnQmdxQixFQUFPM0csT0FDckMsR0FBSXRVLEVBQ0YsWUFFSS9PLENBQ1IsQ0FDRixDQUFDLGNBQ09ncUIsRUFBT3RCLFFBQ2YsQ0FDRixFQUVhd0IsR0FBYyxDQUFDSixFQUFRTCxFQUFXVSxFQUFZQyxLQUN6RCxNQUFNcHJCLEVBM0JpQjZxQixnQkFBaUJRLEVBQVVaLEdBQ2xELFVBQVcsTUFBTUQsS0FBU0ksR0FBV1MsU0FDNUJkLEdBQVlDLEVBQU9DLEVBRTlCLENBdUJtQmEsQ0FBVVIsRUFBUUwsR0FFbkMsSUFDSTFhLEVBREFxUixFQUFRLEVBRVJtSyxFQUFhaHJCLElBQ1Z3UCxJQUNIQSxHQUFPLEVBQ1BxYixHQUFZQSxFQUFTN3FCLEtBSXpCLE9BQU8sSUFBSWlyQixlQUNULENBQ0UsVUFBTUMsQ0FBS3JCLEdBQ1QsSUFDRSxNQUFNcmEsS0FBRUEsRUFBSS9PLE1BQUVBLFNBQWdCaEIsRUFBUzhQLE9BRXZDLEdBQUlDLEVBR0YsT0FGQXdiLFNBQ0FuQixFQUFXc0IsUUFJYixJQUFJNWhCLEVBQU05SSxFQUFNMHBCLFdBQ2hCLEdBQUlTLEVBQVksQ0FDZCxJQUFJUSxFQUFldkssR0FBU3RYLEVBQzVCcWhCLEVBQVdRLEVBQ2IsQ0FDQXZCLEVBQVd3QixRQUFRLElBQUlyaEIsV0FBV3ZKLEdBQ3BDLENBQUUsTUFBTzJuQixHQUVQLE1BREE0QyxFQUFVNUMsR0FDSkEsQ0FDUixDQUNGLEVBQ0FlLE9BQU9ZLElBQ0xpQixFQUFVakIsR0FDSHRxQixFQUFTNnJCLFdBR3BCLENBQ0VDLGNBQWUsS0NyRmQsTUFBTUMsR0FBVSxVQ21CakIzakIsV0FBRUEsSUFBZStKLEdBbUJqQjZaLEdBQTBCaHJCLElBQzlCLElBQUttUixHQUFNdE8sU0FBUzdDLEdBQ2xCLE9BQU9BLEVBR1QsSUFDRSxPQUFPdWpCLG1CQUFtQnZqQixFQUM1QixDQUFFLE1BQU9tVyxHQUNQLE9BQU9uVyxDQUNULEdBR0lpRCxHQUFPLENBQUNrRCxLQUFPbWIsS0FDbkIsSUFDRSxRQUFTbmIsS0FBTW1iLEVBQ2pCLENBQUUsTUFBTy9oQixHQUNQLE9BQU8sQ0FDVCxHQVlJMHJCLEdBQVc5TSxJQUNmLE1BQU0rTSxPQUNhN29CLElBQWpCOE8sR0FBTWxKLFFBQXlDLE9BQWpCa0osR0FBTWxKLE9BQ2hDa0osR0FBTWxKLE9BQ05ILFlBQ0EwaUIsZUFBRUEsRUFBY1csWUFBRUEsR0FBZ0JELEVBRXhDL00sRUFBTWhOLEdBQU16RSxNQUFNak4sS0FDaEIsQ0FDRW9OLGVBQWUsR0FFakIsQ0FDRXVlLFFBQVNGLEVBQWFFLFFBQ3RCQyxTQUFVSCxFQUFhRyxVQUV6QmxOLEdBR0YsTUFBUW1OLE1BQU9DLEVBQVFILFFBQUVBLEVBQU9DLFNBQUVBLEdBQWFsTixFQUN6Q3FOLEVBQW1CRCxFQUFXbmtCLEdBQVdta0IsR0FBNkIsbUJBQVZELE1BQzVERyxFQUFxQnJrQixHQUFXZ2tCLEdBQ2hDTSxFQUFzQnRrQixHQUFXaWtCLEdBRXZDLElBQUtHLEVBQ0gsT0FBTyxFQUdULE1BQU1HLEVBQTRCSCxHQUFvQnBrQixHQUFXb2pCLEdBRTNEb0IsRUFDSkosSUFDd0IsbUJBQWhCTCxHQUVEclEsRUFFRCxJQUFJcVEsRUFGVXZvQixHQUNaa1ksRUFBUWQsT0FBT3BYLElBRW5CaW5CLE1BQU9qbkIsR0FBUSxJQUFJMkcsaUJBQWlCLElBQUk2aEIsRUFBUXhvQixHQUFLaXBCLGdCQUpyRCxJQUNHL1EsRUFLVCxNQUFNZ1IsRUFDSkwsR0FDQUUsR0FDQTFvQixHQUFLLEtBQ0gsSUFBSThvQixHQUFpQixFQUVyQixNQUFNM1YsRUFBVSxJQUFJZ1YsRUFBUXRPLEdBQVN4YixPQUFRLENBQzNDMHFCLEtBQU0sSUFBSXhCLEVBQ1ZoTCxPQUFRLE9BQ1IsVUFBSXlNLEdBRUYsT0FEQUYsR0FBaUIsRUFDVixNQUNULElBR0lHLEVBQWlCOVYsRUFBUXRFLFFBQVFyQixJQUFJLGdCQU0zQyxPQUpvQixNQUFoQjJGLEVBQVE0VixNQUNWNVYsRUFBUTRWLEtBQUt0RCxTQUdScUQsSUFBbUJHLElBR3hCQyxFQUNKVCxHQUNBQyxHQUNBMW9CLEdBQUssSUFBTWtPLEdBQU05SSxpQkFBaUIsSUFBSWdqQixFQUFTLElBQUlXLE9BRS9DSSxFQUFZLENBQ2hCdEMsT0FBUXFDLEdBQXNCLENBQU1FLEdBQVFBLEVBQUlMLE9BR2xEUixHQUVJLENBQUMsT0FBUSxjQUFlLE9BQVEsV0FBWSxVQUFVN2xCLFFBQVN2RSxLQUM1RGdyQixFQUFVaHJCLEtBQ1JnckIsRUFBVWhyQixHQUFRLENBQUNpckIsRUFBSzVXLEtBQ3ZCLElBQUkrSixFQUFTNk0sR0FBT0EsRUFBSWpyQixHQUV4QixHQUFJb2UsRUFDRixPQUFPQSxFQUFPL2YsS0FBSzRzQixHQUdyQixNQUFNLElBQUluVyxHQUNSLGtCQUFrQjlVLHNCQUNsQjhVLEdBQVc4QixnQkFDWHZDLE9BTVosTUE4Qk02VyxFQUFvQnpDLE1BQU8vWCxFQUFTa2EsS0FDeEMsTUFBTW5yQixFQUFTc1EsR0FBTWxCLGVBQWU2QixFQUFReWEsb0JBRTVDLE9BQWlCLE1BQVYxckIsRUFqQ2FncEIsT0FBT21DLElBQzNCLEdBQVksTUFBUkEsRUFDRixPQUFPLEVBR1QsR0FBSTdhLEdBQU14SixPQUFPcWtCLEdBQ2YsT0FBT0EsRUFBS1EsS0FHZCxHQUFJcmIsR0FBTWYsb0JBQW9CNGIsR0FBTyxDQUNuQyxNQUFNUyxFQUFXLElBQUlyQixFQUFRdE8sR0FBU3hiLE9BQVEsQ0FDNUNrZSxPQUFRLE9BQ1J3TSxTQUVGLGFBQWNTLEVBQVNaLGVBQWVuQyxVQUN4QyxDQUVBLE9BQUl2WSxHQUFNdEYsa0JBQWtCbWdCLElBQVM3YSxHQUFNOUosY0FBYzJrQixHQUNoREEsRUFBS3RDLFlBR1Z2WSxHQUFNL0ksa0JBQWtCNGpCLEtBQzFCQSxHQUFjLElBR1o3YSxHQUFNdE8sU0FBU21wQixVQUNISixFQUFXSSxJQUFPdEMsZ0JBRGxDLElBUXdCZ0QsQ0FBY1YsR0FBUW5yQixHQUdoRCxPQUFPZ3BCLE1BQU9wVSxJQUNaLElBQUk4RSxJQUNGQSxFQUFHaUYsT0FDSEEsRUFBTXpVLEtBQ05BLEVBQUl1YyxPQUNKQSxFQUFNakMsWUFDTkEsRUFBV3pHLFFBQ1hBLEVBQU9tRyxtQkFDUEEsRUFBa0JELGlCQUNsQkEsRUFBZ0JyRyxhQUNoQkEsRUFBWTNNLFFBQ1pBLEVBQU84UyxnQkFDUEEsRUFBa0IsY0FBYStILGFBQy9CQSxFQUFZNU4saUJBQ1pBLEVBQWdCQyxjQUNoQkEsR0FDRTJHLEdBQWNsUSxHQUVsQixNQUFNbVgsRUFBc0J6YixHQUFNN0osU0FBU3lYLElBQXFCQSxHQUFtQixFQUM3RThOLEVBQW1CMWIsR0FBTTdKLFNBQVMwWCxJQUFrQkEsR0FBZ0IsRUFHMUUsSUFBSThOLEVBQVN2QixHQUFZRCxNQUV6QjdNLEVBQWVBLEdBQWdCQSxFQUFlLElBQUkzYixjQUFnQixPQUVsRSxJQUFJaXFCLEVBQWlCOUQsR0FDbkIsQ0FBQzNCLEVBQVFqQyxHQUFlQSxFQUFZMkgsaUJBQ3BDcE8sR0FHRXhJLEVBQVUsS0FFZCxNQUFNaVIsRUFDSjBGLEdBQ0FBLEVBQWUxRixhQUNyQixNQUNRMEYsRUFBZTFGLGFBQ2hCLEdBRUgsSUFBSTRGLEVBRUosSUFFRSxJQUFJcEgsRUFDSixNQUFNcUgsR0F6Qktua0IsRUF5QlksT0F6QkhvSSxHQUFNOUIsV0FBV29HLEVBQVExTSxHQUFPME0sRUFBTzFNLFFBQU8xRyxHQTJCbEUsR0FBSTZxQixFQUFZLENBQ2QsTUFBTW5ILEVBQVdtSCxFQUFXbkgsVUFBWSxHQUV4Q0YsRUFBTyxDQUNMRSxXQUNBQyxTQUhla0gsRUFBV2xILFVBQVksR0FLMUMsQ0FFQSxHQWhNMkIsQ0FBQ3pMLElBQ2hDLE1BQU00UyxFQUFnQjVTLEVBQUlqWCxRQUFRLE9BQ2xDLElBQUk4cEIsRUFBYTdTLEVBSWpCLE9BSHNCLElBQWxCNFMsSUFDRkMsRUFBYUEsRUFBV3RtQixNQUFNcW1CLEVBQWdCLElBRXpDQyxFQUFXdnJCLFNBQVMsTUFBUXVyQixFQUFXdnJCLFNBQVMsTUEwTC9Dd3JCLENBQXlCOVMsR0FBTSxDQUNqQyxNQUFNK1MsRUFBWSxJQUFJOUssSUFBSWpJLEVBQUt1QyxHQUFTeGIsUUFFeEMsSUFBS3VrQixJQUFTeUgsRUFBVXZILFVBQVl1SCxFQUFVdEgsVUFBVyxDQUN2RCxNQUFNdUgsRUFBY3ZDLEdBQXVCc0MsRUFBVXZILFVBRXJERixFQUFPLENBQ0xFLFNBQVV3SCxFQUNWdkgsU0FIa0JnRixHQUF1QnNDLEVBQVV0SCxVQUt2RCxFQUVJc0gsRUFBVXZILFVBQVl1SCxFQUFVdEgsWUFDbENzSCxFQUFVdkgsU0FBVyxHQUNyQnVILEVBQVV0SCxTQUFXLEdBQ3JCekwsRUFBTStTLEVBQVV6USxLQUVwQixDQWFBLEdBWElnSixJQUNGL1QsRUFBUWpCLE9BQU8saUJBQ2ZpQixFQUFRdkMsSUFDTixnQkFDQSxTQUFXdVcsTUFwUERsakIsR0FvUGtCaWpCLEVBQUtFLFVBQVksSUFBTSxLQUFPRixFQUFLRyxVQUFZLElBblBuRjlMLG1CQUFtQnRYLEdBQUtxRCxRQUFRLG1CQUFvQixDQUFDZ2dCLEVBQUdDLElBQ3REdm1CLE9BQU93bUIsYUFBYUMsU0FBU0YsRUFBSyxVQXlQNUIwRyxHQUFzQyxpQkFBUnJTLEdBQW9CQSxFQUFJMk4sV0FBVyxTQUFVLENBQzdFLE1BQU1qRyxFQ2hSQyxTQUFxQzFILEdBQ2xELElBQUtBLEdBQXNCLGlCQUFSQSxFQUFrQixPQUFPLEVBQzVDLElBQUtBLEVBQUkyTixXQUFXLFNBQVUsT0FBTyxFQUVyQyxNQUFNc0YsRUFBUWpULEVBQUlqWCxRQUFRLEtBQzFCLEdBQUlrcUIsRUFBUSxFQUFHLE9BQU8sRUFFdEIsTUFBTUMsRUFBT2xULEVBQUl6VCxNQUFNLEVBQUcwbUIsR0FDcEJ4QixFQUFPelIsRUFBSXpULE1BQU0wbUIsRUFBUSxHQUcvQixHQUZpQixXQUFXdnFCLEtBQUt3cUIsR0FFbkIsQ0FDWixJQUFJQyxFQUFlMUIsRUFBS25yQixPQUN4QixNQUFNaUksRUFBTWtqQixFQUFLbnJCLE9BRWpCLElBQUssSUFBSXhCLEVBQUksRUFBR0EsRUFBSXlKLEVBQUt6SixJQUN2QixHQUEyQixLQUF2QjJzQixFQUFLcGUsV0FBV3ZPLElBQXVCQSxFQUFJLEVBQUl5SixFQUFLLENBQ3RELE1BQU15RSxFQUFJeWUsRUFBS3BlLFdBQVd2TyxFQUFJLEdBQ3hCbU8sRUFBSXdlLEVBQUtwZSxXQUFXdk8sRUFBSSxJQUUxQmtPLEdBQUssSUFBTUEsR0FBSyxJQUFRQSxHQUFLLElBQU1BLEdBQUssSUFBUUEsR0FBSyxJQUFNQSxHQUFLLE9BQ2hFQyxHQUFLLElBQU1BLEdBQUssSUFBUUEsR0FBSyxJQUFNQSxHQUFLLElBQVFBLEdBQUssSUFBTUEsR0FBSyxPQUdsRWtnQixHQUFnQixFQUNoQnJ1QixHQUFLLEVBRVQsQ0FHRixJQUFJc3VCLEVBQU0sRUFDTkMsRUFBTTlrQixFQUFNLEVBRWhCLE1BQU0ra0IsRUFBZXpnQixHQUNuQkEsR0FBSyxHQUNzQixLQUEzQjRlLEVBQUtwZSxXQUFXUixFQUFJLElBQ08sS0FBM0I0ZSxFQUFLcGUsV0FBV1IsRUFBSSxLQUNJLEtBQXZCNGUsRUFBS3BlLFdBQVdSLElBQW9DLE1BQXZCNGUsRUFBS3BlLFdBQVdSLElBRTVDd2dCLEdBQU8sSUFDb0IsS0FBekI1QixFQUFLcGUsV0FBV2dnQixJQUNsQkQsSUFDQUMsS0FDU0MsRUFBWUQsS0FDckJELElBQ0FDLEdBQU8sSUFJQyxJQUFSRCxHQUFhQyxHQUFPLElBQ08sS0FBekI1QixFQUFLcGUsV0FBV2dnQixJQUVUQyxFQUFZRCxLQURyQkQsSUFNSixNQUNNdk4sRUFBaUIsRUFEUjdkLEtBQUt1ckIsTUFBTUosRUFBZSxJQUNiQyxHQUFPLEdBQ25DLE9BQU92TixFQUFRLEVBQUlBLEVBQVEsQ0FDN0IsQ0FFQSxHQUFzQixvQkFBWDlHLFFBQXVELG1CQUF0QkEsT0FBT29RLFdBQ2pELE9BQU9wUSxPQUFPb1EsV0FBV3NDLEVBQU0sUUFPakMsSUFBSTVMLEVBQVEsRUFDWixJQUFLLElBQUkvZ0IsRUFBSSxFQUFHeUosRUFBTWtqQixFQUFLbnJCLE9BQVF4QixFQUFJeUosRUFBS3pKLElBQUssQ0FDL0MsTUFBTTB1QixFQUFJL0IsRUFBS3BlLFdBQVd2TyxHQUMxQixHQUFJMHVCLEVBQUksSUFDTjNOLEdBQVMsT0FDSixHQUFJMk4sRUFBSSxLQUNiM04sR0FBUyxPQUNKLEdBQUkyTixHQUFLLE9BQVVBLEdBQUssT0FBVTF1QixFQUFJLEVBQUl5SixFQUFLLENBQ3BELE1BQU1nRyxFQUFPa2QsRUFBS3BlLFdBQVd2TyxFQUFJLEdBQzdCeVAsR0FBUSxPQUFVQSxHQUFRLE9BQzVCc1IsR0FBUyxFQUNUL2dCLEtBRUErZ0IsR0FBUyxDQUViLE1BQ0VBLEdBQVMsQ0FFYixDQUNBLE9BQU9BLENBQ1QsQ0RzTDBCNE4sQ0FBNEJ6VCxHQUM5QyxHQUFJMEgsRUFBWWxELEVBQ2QsTUFBTSxJQUFJN0ksR0FDUiw0QkFBOEI2SSxFQUFtQixZQUNqRDdJLEdBQVcyQixpQkFDWHBDLEVBQ0FXLEVBR04sQ0FNQSxHQUFJeVcsR0FBK0IsUUFBWHJOLEdBQStCLFNBQVhBLEVBQW1CLENBQzdELE1BQU15TyxRQUF1QjNCLEVBQWtCeGEsRUFBUy9HLEdBQ3hELEdBQzRCLGlCQUFuQmtqQixHQUNQOWQsU0FBUzhkLElBQ1RBLEVBQWlCalAsRUFFakIsTUFBTSxJQUFJOUksR0FDUiwrQ0FDQUEsR0FBVzRCLGdCQUNYckMsRUFDQVcsRUFHTixDQUVBLEdBQ0UwTyxHQUNBZ0gsR0FDVyxRQUFYdE0sR0FDVyxTQUFYQSxHQUNvRSxLQUFuRXlOLFFBQTZCWCxFQUFrQnhhLEVBQVMvRyxJQUN6RCxDQUNBLElBTUltakIsRUFOQXpCLEVBQVcsSUFBSXJCLEVBQVE3USxFQUFLLENBQzlCaUYsT0FBUSxPQUNSd00sS0FBTWpoQixFQUNOa2hCLE9BQVEsU0FTVixHQUpJOWEsR0FBTTFGLFdBQVdWLEtBQVVtakIsRUFBb0J6QixFQUFTM2EsUUFBUWpNLElBQUksa0JBQ3RFaU0sRUFBUWdNLGVBQWVvUSxHQUdyQnpCLEVBQVNULEtBQU0sQ0FDakIsTUFBTzdCLEVBQVlnRSxHQUFTaE0sR0FDMUI4SyxFQUNBck4sR0FBcUJ5QyxHQUFleUMsS0FHdEMvWixFQUFPbWYsR0FBWXVDLEVBQVNULEtBaFVYLE1BZ1VxQzdCLEVBQVlnRSxFQUNwRSxDQUNGLENBRUtoZCxHQUFNdE8sU0FBUytoQixLQUNsQkEsRUFBa0JBLEVBQWtCLFVBQVksUUFLbEQsTUFBTXdKLEVBQXlCM0MsR0FBc0IsZ0JBQWlCTCxFQUFRbHNCLFVBSTlFLEdBQUlpUyxHQUFNMUYsV0FBV1YsR0FBTyxDQUMxQixNQUFNMlMsRUFBYzVMLEVBQVE2TCxpQkFFMUJELEdBQ0EseUJBQXlCemEsS0FBS3lhLEtBQzdCLGFBQWF6YSxLQUFLeWEsSUFFbkI1TCxFQUFRakIsT0FBTyxlQUVuQixDQUdBaUIsRUFBUXZDLElBQUksYUFBYyxTQUFXd2IsSUFBUyxHQUU5QyxNQUFNc0QsRUFBa0IsSUFDbkIxQixFQUNIckYsT0FBUXlGLEVBQ1J2TixPQUFRQSxFQUFPelAsY0FDZitCLFFBQVNELEdBQXlCQyxFQUFRblAsYUFDMUNxcEIsS0FBTWpoQixFQUNOa2hCLE9BQVEsT0FDUnFDLFlBQWFGLEVBQXlCeEosT0FBa0J2aUIsR0FHMUQrVCxFQUFVcVYsR0FBc0IsSUFBSUwsRUFBUTdRLEVBQUs4VCxHQUVqRCxJQUFJaFksUUFBa0JvVixFQUNsQnFCLEVBQU8xVyxFQUFTdVcsR0FDaEJHLEVBQU92UyxFQUFLOFQsSUFJaEIsR0FBSXpCLEVBQXFCLENBQ3ZCLE1BQU0yQixFQUFpQnBkLEdBQU1sQixlQUFlb0csRUFBU3ZFLFFBQVFqTSxJQUFJLG1CQUNqRSxHQUFzQixNQUFsQjBvQixHQUEwQkEsRUFBaUJ4UCxFQUM3QyxNQUFNLElBQUk3SSxHQUNSLDRCQUE4QjZJLEVBQW1CLFlBQ2pEN0ksR0FBVzJCLGlCQUNYcEMsRUFDQVcsRUFHTixDQUVBLE1BQU1vWSxFQUNKckMsSUFBNEMsV0FBakIxTixHQUE4QyxhQUFqQkEsR0FFMUQsR0FDRTBOLEdBQ0E5VixFQUFTMlYsT0FDUmpILEdBQXNCNkgsR0FBd0I0QixHQUFvQm5ILEdBQ25FLENBQ0EsTUFBTTNPLEVBQVUsQ0FBQSxFQUVoQixDQUFDLFNBQVUsYUFBYyxXQUFXL1MsUUFBUytELElBQzNDZ1AsRUFBUWhQLEdBQVEyTSxFQUFTM00sS0FHM0IsTUFBTStrQixFQUF3QnRkLEdBQU1sQixlQUFlb0csRUFBU3ZFLFFBQVFqTSxJQUFJLG9CQUVqRXNrQixFQUFZZ0UsR0FDaEJwSixHQUNDNUMsR0FDRXNNLEVBQ0E3TyxHQUFxQnlDLEdBQWUwQyxJQUFxQixLQUU3RCxHQUVGLElBQUkySixFQUFZLEVBQ2hCLE1BQU1DLEVBQW1CaEUsSUFDdkIsR0FBSWlDLElBQ0Y4QixFQUFZL0QsRUFDUitELEVBQVkzUCxHQUNkLE1BQU0sSUFBSTdJLEdBQ1IsNEJBQThCNkksRUFBbUIsWUFDakQ3SSxHQUFXMkIsaUJBQ1hwQyxFQUNBVyxHQUlOK1QsR0FBY0EsRUFBV1EsSUFHM0J0VSxFQUFXLElBQUlnVixFQUNibkIsR0FBWTdULEVBQVMyVixLQW5hSixNQW1hOEIyQyxFQUFpQixLQUM5RFIsR0FBU0EsSUFDVDlHLEdBQWVBLE1BRWpCM08sRUFFSixDQUVBK0YsRUFBZUEsR0FBZ0IsT0FFL0IsSUFBSW1RLFFBQXFCeEMsRUFBVWpiLEdBQU1uSSxRQUFRb2pCLEVBQVczTixJQUFpQixRQUMzRXBJLEVBQ0FaLEdBTUYsR0FBSW1YLElBQXdCVCxJQUEyQnFDLEVBQWtCLENBQ3ZFLElBQUlLLEVBYUosR0Fab0IsTUFBaEJELElBQ3FDLGlCQUE1QkEsRUFBYWxGLFdBQ3RCbUYsRUFBbUJELEVBQWFsRixXQUNNLGlCQUF0QmtGLEVBQWFwQyxLQUM3QnFDLEVBQW1CRCxFQUFhcEMsS0FDQyxpQkFBakJvQyxJQUNoQkMsRUFDeUIsbUJBQWhCMUQsR0FDSCxJQUFJQSxHQUFjblIsT0FBTzRVLEdBQWNsRixXQUN2Q2tGLEVBQWEvdEIsU0FHUyxpQkFBckJndUIsR0FBaUNBLEVBQW1COVAsRUFDN0QsTUFBTSxJQUFJN0ksR0FDUiw0QkFBOEI2SSxFQUFtQixZQUNqRDdJLEdBQVcyQixpQkFDWHBDLEVBQ0FXLEVBR04sQ0FJQSxPQUZDb1ksR0FBb0JuSCxHQUFlQSxVQUV2QixJQUFJVCxRQUFRLENBQUNsSCxFQUFTQyxLQUNqQ0YsR0FBT0MsRUFBU0MsRUFBUSxDQUN0QjVVLEtBQU02akIsRUFDTjljLFFBQVN1RCxHQUFhWixLQUFLNEIsRUFBU3ZFLFNBQ3BDNEUsT0FBUUwsRUFBU0ssT0FDakJtUixXQUFZeFIsRUFBU3dSLFdBQ3JCcFMsU0FDQVcsYUFHTixDQUFFLE1BQU91UixHQU1QLEdBTEFOLEdBQWVBLElBS1gwRixHQUFrQkEsRUFBZWpFLFNBQVdpRSxFQUFlekQsa0JBQWtCcFQsR0FBWSxDQUMzRixNQUFNNFksRUFBZ0IvQixFQUFlekQsT0FJckMsTUFIQXdGLEVBQWNyWixPQUFTQSxFQUN2QlcsSUFBWTBZLEVBQWMxWSxRQUFVQSxHQUNwQ3VSLElBQVFtSCxJQUFrQkEsRUFBY3JZLE1BQVFrUixHQUMxQ21ILENBQ1IsQ0FFQSxHQUFJbkgsR0FBb0IsY0FBYkEsRUFBSWhtQixNQUF3QixxQkFBcUJzQixLQUFLMGtCLEVBQUluUixTQUNuRSxNQUFNMVcsT0FBT2tPLE9BQ1gsSUFBSWtJLEdBQ0YsZ0JBQ0FBLEdBQVd3QixZQUNYakMsRUFDQVcsRUFDQXVSLEdBQU9BLEVBQUl0UixVQUViLENBQ0VJLE1BQU9rUixFQUFJbFIsT0FBU2tSLElBSzFCLE1BQU16UixHQUFXekIsS0FBS2tULEVBQUtBLEdBQU9BLEVBQUloVyxLQUFNOEQsRUFBUVcsRUFBU3VSLEdBQU9BLEVBQUl0UixTQUMxRSxDQTNlZSxJQUFDelQsRUF5TEhtRyxJQXNUWGdtQixHQUFZLElBQUlDLElBRVRDLEdBQVl4WixJQUN2QixJQUFJMEksRUFBTzFJLEdBQVVBLEVBQU8wSSxLQUFRLENBQUEsRUFDcEMsTUFBTW1OLE1BQUVBLEVBQUtGLFFBQUVBLEVBQU9DLFNBQUVBLEdBQWFsTixFQUMvQitRLEVBQVEsQ0FBQzlELEVBQVNDLEVBQVVDLEdBRWxDLElBRUU2RCxFQUNBeGUsRUFGQXRSLEVBRFE2dkIsRUFBTXJ1QixPQUlkMkQsRUFBTXVxQixHQUVSLEtBQU8xdkIsS0FDTDh2QixFQUFPRCxFQUFNN3ZCLEdBQ2JzUixFQUFTbk0sRUFBSXFCLElBQUlzcEIsUUFFTjlzQixJQUFYc08sR0FBd0JuTSxFQUFJK0ssSUFBSTRmLEVBQU94ZSxFQUFTdFIsRUFBSSxJQUFJMnZCLElBQVEvRCxHQUFROU0sSUFFeEUzWixFQUFNbU0sRUFHUixPQUFPQSxHQUdPc2UsS0V0aEJoQixNQUFNRyxHQUFnQixDQUNwQkMsS0NmYSxLRGdCYkMsSUFBSzVJLEdBQ0w0RSxNQUFPLENBQ0x6bEIsSUFBSzBwQixLQUtUcGUsR0FBTXhMLFFBQVF5cEIsR0FBZSxDQUFDanBCLEVBQUluRyxLQUNoQyxHQUFJbUcsRUFBSSxDQUNOLElBR0VyRyxPQUFPQyxlQUFlb0csRUFBSSxPQUFRLENBQUVzSCxVQUFXLEtBQU16TixTQUN2RCxDQUFFLE1BQU9ULEdBRVQsQ0FDQU8sT0FBT0MsZUFBZW9HLEVBQUksY0FBZSxDQUFFc0gsVUFBVyxLQUFNek4sU0FDOUQsSUFTRixNQUFNd3ZCLEdBQWdCbEcsR0FBVyxLQUFLQSxJQVFoQ21HLEdBQW9CalMsR0FDeEJyTSxHQUFNL0osV0FBV29XLElBQXdCLE9BQVpBLElBQWdDLElBQVpBLEVBbUVuRCxJQUFBa1MsR0FBZSxDQUtmQyxXQTVEQSxTQUFvQkQsRUFBVWphLEdBQzVCaWEsRUFBV3ZlLEdBQU12TixRQUFROHJCLEdBQVlBLEVBQVcsQ0FBQ0EsR0FFakQsTUFBTTd1QixPQUFFQSxHQUFXNnVCLEVBQ25CLElBQUlFLEVBQ0FwUyxFQUVKLE1BQU1xUyxFQUFrQixDQUFBLEVBRXhCLElBQUssSUFBSXh3QixFQUFJLEVBQUdBLEVBQUl3QixFQUFReEIsSUFBSyxDQUUvQixJQUFJcUIsRUFJSixHQUxBa3ZCLEVBQWdCRixFQUFTcndCLEdBR3pCbWUsRUFBVW9TLEdBRUxILEdBQWlCRyxLQUNwQnBTLEVBQVU0UixJQUFlMXVCLEVBQUtmLE9BQU9pd0IsSUFBZ0I5c0Isb0JBRXJDVCxJQUFabWIsR0FDRixNQUFNLElBQUl0SCxHQUFXLG9CQUFvQnhWLE1BSTdDLEdBQUk4YyxJQUFZck0sR0FBTS9KLFdBQVdvVyxLQUFhQSxFQUFVQSxFQUFRM1gsSUFBSTRQLEtBQ2xFLE1BR0ZvYSxFQUFnQm52QixHQUFNLElBQU1yQixHQUFLbWUsQ0FDbkMsQ0FFQSxJQUFLQSxFQUFTLENBQ1osTUFBTXNTLEVBQVVod0IsT0FBT3lVLFFBQVFzYixHQUFpQnJyQixJQUM5QyxFQUFFOUQsRUFBSXF2QixLQUNKLFdBQVdydkIsT0FDQSxJQUFWcXZCLEVBQWtCLHNDQUF3QyxrQ0FHL0QsSUFBSUMsRUFBSW52QixFQUNKaXZCLEVBQVFqdkIsT0FBUyxFQUNmLFlBQWNpdkIsRUFBUXRyQixJQUFJZ3JCLElBQWN6cEIsS0FBSyxNQUM3QyxJQUFNeXBCLEdBQWFNLEVBQVEsSUFDN0IsMEJBRUosTUFBTSxJQUFJNVosR0FDUix3REFBMEQ4WixFQUMxRCxrQkFFSixDQUVBLE9BQU94UyxDQUNULEVBZ0JFa1MsU0FBVU4sSUVsSFosU0FBU2EsR0FBNkJ4YSxHQUtwQyxHQUpJQSxFQUFPNFAsYUFDVDVQLEVBQU80UCxZQUFZNkssbUJBR2pCemEsRUFBTzZSLFFBQVU3UixFQUFPNlIsT0FBT3dCLFFBQ2pDLE1BQU0sSUFBSUgsR0FBYyxLQUFNbFQsRUFFbEMsQ0FTZSxTQUFTMGEsR0FBZ0IxYSxHQUN0Q3dhLEdBQTZCeGEsR0FFN0JBLEVBQU8zRCxRQUFVdUQsR0FBYVosS0FBS2dCLEVBQU8zRCxTQUcxQzJELEVBQU8xSyxLQUFPcVUsR0FBYzNmLEtBQUtnVyxFQUFRQSxFQUFPZ0ksdUJBRTVDLENBQUMsT0FBUSxNQUFPLFNBQVNuYSxRQUFRbVMsRUFBTytKLFNBQzFDL0osRUFBTzNELFFBQVFnTSxlQUFlLHFDQUFxQyxHQUtyRSxPQUZnQjRSLEdBQVNDLFdBQVdsYSxFQUFPK0gsU0FBV0YsR0FBU0UsUUFBUy9ILEVBRWpFK0gsQ0FBUS9ILEdBQVExRSxLQUNyQixTQUE2QnNGLEdBQzNCNFosR0FBNkJ4YSxHQUs3QkEsRUFBT1ksU0FBV0EsRUFDbEIsSUFDRUEsRUFBU3RMLEtBQU9xVSxHQUFjM2YsS0FBS2dXLEVBQVFBLEVBQU8rSSxrQkFBbUJuSSxFQUN2RSxDQUFDLGVBQ1FaLEVBQU9ZLFFBQ2hCLENBSUEsT0FGQUEsRUFBU3ZFLFFBQVV1RCxHQUFhWixLQUFLNEIsRUFBU3ZFLFNBRXZDdUUsQ0FDVCxFQUNBLFNBQTRCaVQsR0FDMUIsSUFBS2hLLEdBQVNnSyxLQUNaMkcsR0FBNkJ4YSxHQUd6QjZULEdBQVVBLEVBQU9qVCxVQUFVLENBQzdCWixFQUFPWSxTQUFXaVQsRUFBT2pULFNBQ3pCLElBQ0VpVCxFQUFPalQsU0FBU3RMLEtBQU9xVSxHQUFjM2YsS0FDbkNnVyxFQUNBQSxFQUFPK0ksa0JBQ1A4SyxFQUFPalQsU0FFWCxDQUFDLGVBQ1FaLEVBQU9ZLFFBQ2hCLENBQ0FpVCxFQUFPalQsU0FBU3ZFLFFBQVV1RCxHQUFhWixLQUFLNlUsRUFBT2pULFNBQVN2RSxRQUM5RCxDQUdGLE9BQU84VSxRQUFRakgsT0FBTzJKLEVBQ3hCLEVBRUosQ0NuRkEsTUFBTThHLEdBQWEsQ0FBQSxFQUduQixDQUFDLFNBQVUsVUFBVyxTQUFVLFdBQVksU0FBVSxVQUFVenFCLFFBQVEsQ0FBQ3ZFLEVBQU0vQixLQUM3RSt3QixHQUFXaHZCLEdBQVEsU0FBbUJ5RixHQUNwQyxjQUFjQSxJQUFVekYsR0FBUSxLQUFPL0IsRUFBSSxFQUFJLEtBQU8sS0FBTytCLENBQy9ELElBR0YsTUFBTWl2QixHQUFxQixDQUFBLEVBVzNCRCxHQUFXN1MsYUFBZSxTQUFzQitTLEVBQVdDLEVBQVMvWixHQUNsRSxTQUFTZ2EsRUFBY0MsRUFBS0MsR0FDMUIsTUFDRSxXQUNBM0YsR0FDQSwwQkFDQTBGLEVBQ0EsSUFDQUMsR0FDQ2xhLEVBQVUsS0FBT0EsRUFBVSxHQUVoQyxDQUdBLE1BQU8sQ0FBQ3hXLEVBQU95d0IsRUFBS0UsS0FDbEIsSUFBa0IsSUFBZEwsRUFDRixNQUFNLElBQUlwYSxHQUNSc2EsRUFBY0MsRUFBSyxxQkFBdUJGLEVBQVUsT0FBU0EsRUFBVSxLQUN2RXJhLEdBQVcwQixnQkFlZixPQVhJMlksSUFBWUYsR0FBbUJJLEtBQ2pDSixHQUFtQkksSUFBTyxFQUUxQkcsUUFBUUMsS0FDTkwsRUFDRUMsRUFDQSwrQkFBaUNGLEVBQVUsOENBSzFDRCxHQUFZQSxFQUFVdHdCLEVBQU95d0IsRUFBS0UsR0FFN0MsRUFFQVAsR0FBV1UsU0FBVyxTQUFrQkMsR0FDdEMsTUFBTyxDQUFDL3dCLEVBQU95d0IsS0FFYkcsUUFBUUMsS0FBSyxHQUFHSixnQ0FBa0NNLE1BQzNDLEVBRVgsRUF3Q0EsSUFBQVQsR0FBZSxDQUNiVSxjQTdCRixTQUF1QnRZLEVBQVN1WSxFQUFRQyxHQUN0QyxHQUF1QixpQkFBWnhZLEVBQ1QsTUFBTSxJQUFJeEMsR0FBVyw0QkFBNkJBLEdBQVdtQixzQkFFL0QsTUFBTXpPLEVBQU85SSxPQUFPOEksS0FBSzhQLEdBQ3pCLElBQUlyWixFQUFJdUosRUFBSy9ILE9BQ2IsS0FBT3hCLEtBQU0sR0FBRyxDQUNkLE1BQU1veEIsRUFBTTduQixFQUFLdkosR0FHWGl4QixFQUFZeHdCLE9BQU9aLFVBQVV1SyxlQUFlaEssS0FBS3d4QixFQUFRUixHQUFPUSxFQUFPUixRQUFPcHVCLEVBQ3BGLEdBQUlpdUIsRUFBVyxDQUNiLE1BQU10d0IsRUFBUTBZLEVBQVErWCxHQUNoQnRzQixPQUFtQjlCLElBQVZyQyxHQUF1QnN3QixFQUFVdHdCLEVBQU95d0IsRUFBSy9YLEdBQzVELElBQWUsSUFBWHZVLEVBQ0YsTUFBTSxJQUFJK1IsR0FDUixVQUFZdWEsRUFBTSxZQUFjdHNCLEVBQ2hDK1IsR0FBV21CLHNCQUdmLFFBQ0YsQ0FDQSxJQUFxQixJQUFqQjZaLEVBQ0YsTUFBTSxJQUFJaGIsR0FBVyxrQkFBb0J1YSxFQUFLdmEsR0FBV29CLGVBRTdELENBQ0YsRUFJQThZLFdBQUVBLElDbEdGLE1BQU1BLEdBQWFFLEdBQVVGLFdBUzdCLElBQUFlLEdBQUEsTUFDRSxXQUFBbHlCLENBQVlteUIsR0FDVnRrQixLQUFLd1EsU0FBVzhULEdBQWtCLENBQUEsRUFDbEN0a0IsS0FBS3VrQixhQUFlLENBQ2xCamIsUUFBUyxJQUFJMkUsR0FDYjFFLFNBQVUsSUFBSTBFLEdBRWxCLENBVUEsYUFBTTNFLENBQVFrYixFQUFhN2IsR0FDekIsSUFDRSxhQUFhM0ksS0FBSzJmLFNBQVM2RSxFQUFhN2IsRUFDMUMsQ0FBRSxNQUFPa1MsR0FDUCxHQUFJQSxhQUFlblksTUFBTyxDQUN4QixJQUFJK2hCLEVBQVEsQ0FBQSxFQUVaL2hCLE1BQU1naUIsa0JBQW9CaGlCLE1BQU1naUIsa0JBQWtCRCxHQUFVQSxFQUFRLElBQUkvaEIsTUFHeEUsTUFBTTRILEVBQVEsTUFDWixJQUFLbWEsRUFBTW5hLE1BQ1QsTUFBTyxHQUdULE1BQU1xYSxFQUFvQkYsRUFBTW5hLE1BQU05VCxRQUFRLE1BRTlDLE9BQTZCLElBQXRCbXVCLEVBQTJCLEdBQUtGLEVBQU1uYSxNQUFNdFEsTUFBTTJxQixFQUFvQixFQUM5RSxFQVJhLEdBU2QsSUFDRSxHQUFLOUosRUFBSXZRLE9BR0YsR0FBSUEsRUFBTyxDQUNoQixNQUFNcWEsRUFBb0JyYSxFQUFNOVQsUUFBUSxNQUNsQ291QixHQUNtQixJQUF2QkQsR0FBNEIsRUFBSXJhLEVBQU05VCxRQUFRLEtBQU1tdUIsRUFBb0IsR0FDcEVFLEdBQ29CLElBQXhCRCxFQUE0QixHQUFLdGEsRUFBTXRRLE1BQU00cUIsRUFBcUIsR0FFL0QveEIsT0FBT2dvQixFQUFJdlEsT0FBTzlJLFNBQVNxakIsS0FDOUJoSyxFQUFJdlEsT0FBUyxLQUFPQSxFQUV4QixPQVpFdVEsRUFBSXZRLE1BQVFBLENBYWhCLENBQUUsTUFBTzdYLEdBRVQsQ0FDRixDQUVBLE1BQU1vb0IsQ0FDUixDQUNGLENBRUEsUUFBQThFLENBQVM2RSxFQUFhN2IsR0FHTyxpQkFBaEI2YixHQUNUN2IsRUFBU0EsR0FBVSxDQUFBLEdBQ1o4RSxJQUFNK1csRUFFYjdiLEVBQVM2YixHQUFlLENBQUEsRUFHMUI3YixFQUFTd08sR0FBWW5YLEtBQUt3USxTQUFVN0gsR0FFcEMsTUFBTThILGFBQUVBLEVBQVltSCxpQkFBRUEsRUFBZ0I1UyxRQUFFQSxHQUFZMkQsT0FFL0JwVCxJQUFqQmtiLEdBQ0YrUyxHQUFVVSxjQUNSelQsRUFDQSxDQUNFOUIsa0JBQW1CMlUsR0FBVzdTLGFBQWE2UyxHQUFXd0IsU0FDdERsVyxrQkFBbUIwVSxHQUFXN1MsYUFBYTZTLEdBQVd3QixTQUN0RGpXLG9CQUFxQnlVLEdBQVc3UyxhQUFhNlMsR0FBV3dCLFNBQ3hEaFcsZ0NBQWlDd1UsR0FBVzdTLGFBQWE2UyxHQUFXd0IsU0FDcEUvViw0QkFBNkJ1VSxHQUFXN1MsYUFBYTZTLEdBQVd3QixXQUVsRSxHQUlvQixNQUFwQmxOLElBQ0V2VCxHQUFNL0osV0FBV3NkLEdBQ25CalAsRUFBT2lQLGlCQUFtQixDQUN4QmhLLFVBQVdnSyxHQUdiNEwsR0FBVVUsY0FDUnRNLEVBQ0EsQ0FDRTFLLE9BQVFvVyxHQUFXeUIsU0FDbkJuWCxVQUFXMFYsR0FBV3lCLFdBRXhCLFNBTTJCeHZCLElBQTdCb1QsRUFBT21PLHlCQUVvQ3ZoQixJQUFwQ3lLLEtBQUt3USxTQUFTc0csa0JBQ3ZCbk8sRUFBT21PLGtCQUFvQjlXLEtBQUt3USxTQUFTc0csa0JBRXpDbk8sRUFBT21PLG1CQUFvQixHQUc3QjBNLEdBQVVVLGNBQ1J2YixFQUNBLENBQ0VxYyxRQUFTMUIsR0FBV1UsU0FBUyxXQUM3QmlCLGNBQWUzQixHQUFXVSxTQUFTLG1CQUVyQyxHQUlGcmIsRUFBTytKLFFBQVUvSixFQUFPK0osUUFBVTFTLEtBQUt3USxTQUFTa0MsUUFBVSxPQUFPMWMsY0FHakUsSUFBSWt2QixFQUFpQmxnQixHQUFXWCxHQUFNekUsTUFBTW9GLEVBQVFvTixPQUFRcE4sRUFBUTJELEVBQU8rSixTQUUzRTFOLEdBQ0VYLEdBQU14TCxRQUFRLENBQUMsU0FBVSxNQUFPLE9BQVEsT0FBUSxNQUFPLFFBQVMsUUFBUyxVQUFZNlosV0FDNUUxTixFQUFRME4sS0FHbkIvSixFQUFPM0QsUUFBVXVELEdBQWFyUCxPQUFPZ3NCLEVBQWdCbGdCLEdBR3JELE1BQU1tZ0IsRUFBMEIsR0FDaEMsSUFBSUMsR0FBaUMsRUFDckNwbEIsS0FBS3VrQixhQUFhamIsUUFBUXpRLFFBQVEsU0FBb0N3c0IsR0FDcEUsR0FBbUMsbUJBQXhCQSxFQUFZOVcsVUFBMEQsSUFBaEM4VyxFQUFZOVcsUUFBUTVGLEdBQ25FLE9BR0Z5YyxFQUFpQ0EsR0FBa0NDLEVBQVkvVyxZQUUvRSxNQUFNbUMsRUFBZTlILEVBQU84SCxjQUFnQi9CLEdBRTFDK0IsR0FBZ0JBLEVBQWEzQixnQ0FHN0JxVyxFQUF3QkcsUUFBUUQsRUFBWWpYLFVBQVdpWCxFQUFZaFgsVUFFbkU4VyxFQUF3Qi9tQixLQUFLaW5CLEVBQVlqWCxVQUFXaVgsRUFBWWhYLFNBRXBFLEdBRUEsTUFBTWtYLEVBQTJCLEdBS2pDLElBQUlDLEVBSkp4bEIsS0FBS3VrQixhQUFhaGIsU0FBUzFRLFFBQVEsU0FBa0N3c0IsR0FDbkVFLEVBQXlCbm5CLEtBQUtpbkIsRUFBWWpYLFVBQVdpWCxFQUFZaFgsU0FDbkUsR0FHQSxJQUNJclMsRUFEQXpKLEVBQUksRUFHUixJQUFLNnlCLEVBQWdDLENBQ25DLE1BQU1LLEVBQVEsQ0FBQ3BDLEdBQWdCanFCLEtBQUs0RyxXQUFPekssR0FPM0MsSUFOQWt3QixFQUFNSCxXQUFXSCxHQUNqQk0sRUFBTXJuQixRQUFRbW5CLEdBQ2R2cEIsRUFBTXlwQixFQUFNMXhCLE9BRVp5eEIsRUFBVTFMLFFBQVFsSCxRQUFRakssR0FFbkJwVyxFQUFJeUosR0FDVHdwQixFQUFVQSxFQUFRdmhCLEtBQUt3aEIsRUFBTWx6QixLQUFNa3pCLEVBQU1sekIsTUFHM0MsT0FBT2l6QixDQUNULENBRUF4cEIsRUFBTW1wQixFQUF3QnB4QixPQUU5QixJQUFJK2tCLEVBQVluUSxFQUVoQixLQUFPcFcsRUFBSXlKLEdBQUssQ0FDZCxNQUFNMHBCLEVBQWNQLEVBQXdCNXlCLEtBQ3RDb3pCLEVBQWFSLEVBQXdCNXlCLEtBQzNDLElBQ0V1bUIsRUFBWTRNLEVBQVk1TSxFQUMxQixDQUFFLE1BQU96UCxHQUNQc2MsRUFBV2h6QixLQUFLcU4sS0FBTXFKLEdBQ3RCLEtBQ0YsQ0FDRixDQUVBLElBQ0VtYyxFQUFVbkMsR0FBZ0Ixd0IsS0FBS3FOLEtBQU04WSxFQUN2QyxDQUFFLE1BQU96UCxHQUNQLE9BQU95USxRQUFRakgsT0FBT3hKLEVBQ3hCLENBS0EsSUFIQTlXLEVBQUksRUFDSnlKLEVBQU11cEIsRUFBeUJ4eEIsT0FFeEJ4QixFQUFJeUosR0FDVHdwQixFQUFVQSxFQUFRdmhCLEtBQUtzaEIsRUFBeUJoekIsS0FBTWd6QixFQUF5Qmh6QixNQUdqRixPQUFPaXpCLENBQ1QsQ0FFQSxNQUFBSSxDQUFPamQsR0FHTCxPQUFPNkUsR0FEVW1KLElBRGpCaE8sRUFBU3dPLEdBQVluWCxLQUFLd1EsU0FBVTdILElBQ0VpTyxRQUFTak8sRUFBTzhFLElBQUs5RSxFQUFPbU8sbUJBQ3hDbk8sRUFBTzJFLE9BQVEzRSxFQUFPaVAsaUJBQ2xELEdBSUZ2VCxHQUFNeEwsUUFBUSxDQUFDLFNBQVUsTUFBTyxPQUFRLFdBQVksU0FBNkI2WixHQUUvRW1ULEdBQU16ekIsVUFBVXNnQixHQUFVLFNBQVVqRixFQUFLOUUsR0FDdkMsT0FBTzNJLEtBQUtzSixRQUNWNk4sR0FBWXhPLEdBQVUsR0FBSSxDQUN4QitKLFNBQ0FqRixNQUNBeFAsTUFBTzBLLEdBQVUsQ0FBQSxHQUFJMUssT0FHM0IsQ0FDRixHQUVBb0csR0FBTXhMLFFBQVEsQ0FBQyxPQUFRLE1BQU8sUUFBUyxTQUFVLFNBQStCNlosR0FDOUUsU0FBU29ULEVBQW1CQyxHQUMxQixPQUFPLFNBQW9CdFksRUFBS3hQLEVBQU0wSyxHQUNwQyxPQUFPM0ksS0FBS3NKLFFBQ1Y2TixHQUFZeE8sR0FBVSxHQUFJLENBQ3hCK0osU0FDQTFOLFFBQVMrZ0IsRUFDTCxDQUNFLGVBQWdCLHVCQUVsQixDQUFBLEVBQ0p0WSxNQUNBeFAsU0FHTixDQUNGLENBRUE0bkIsR0FBTXp6QixVQUFVc2dCLEdBQVVvVCxJQUlYLFVBQVhwVCxJQUNGbVQsR0FBTXp6QixVQUFVc2dCLEVBQVMsUUFBVW9ULEdBQW1CLEdBRTFELEdDdlJBLE1BQU1FLEdBQWlCLENBQ3JCQyxTQUFVLElBQ1ZDLG1CQUFvQixJQUNwQkMsV0FBWSxJQUNaQyxXQUFZLElBQ1pDLEdBQUksSUFDSkMsUUFBUyxJQUNUQyxTQUFVLElBQ1ZDLDRCQUE2QixJQUM3QkMsVUFBVyxJQUNYQyxhQUFjLElBQ2RDLGVBQWdCLElBQ2hCQyxZQUFhLElBQ2JDLGdCQUFpQixJQUNqQkMsT0FBUSxJQUNSQyxnQkFBaUIsSUFDakJDLGlCQUFrQixJQUNsQkMsTUFBTyxJQUNQQyxTQUFVLElBQ1ZDLFlBQWEsSUFDYkMsU0FBVSxJQUNWQyxPQUFRLElBQ1JDLGtCQUFtQixJQUNuQkMsa0JBQW1CLElBQ25CQyxXQUFZLElBQ1pDLGFBQWMsSUFDZEMsZ0JBQWlCLElBQ2pCQyxVQUFXLElBQ1hDLFNBQVUsSUFDVkMsaUJBQWtCLElBQ2xCQyxjQUFlLElBQ2ZDLDRCQUE2QixJQUM3QkMsZUFBZ0IsSUFDaEJDLFNBQVUsSUFDVkMsS0FBTSxJQUNOQyxlQUFnQixJQUNoQkMsbUJBQW9CLElBQ3BCQyxnQkFBaUIsSUFDakJDLFdBQVksSUFDWkMscUJBQXNCLElBQ3RCQyxvQkFBcUIsSUFDckJDLGtCQUFtQixJQUNuQkMsVUFBVyxJQUNYQyxtQkFBb0IsSUFDcEJDLG9CQUFxQixJQUNyQkMsT0FBUSxJQUNSQyxpQkFBa0IsSUFDbEJDLFNBQVUsSUFDVkMsZ0JBQWlCLElBQ2pCQyxxQkFBc0IsSUFDdEJDLGdCQUFpQixJQUNqQkMsNEJBQTZCLElBQzdCQywyQkFBNEIsSUFDNUJDLG9CQUFxQixJQUNyQkMsZUFBZ0IsSUFDaEJDLFdBQVksSUFDWkMsbUJBQW9CLElBQ3BCQyxlQUFnQixJQUNoQkMsd0JBQXlCLElBQ3pCQyxzQkFBdUIsSUFDdkJDLG9CQUFxQixJQUNyQkMsYUFBYyxJQUNkQyxZQUFhLElBQ2JDLDhCQUErQixJQUMvQkMsZ0JBQWlCLElBQ2pCQyxtQkFBb0IsSUFDcEJDLG9CQUFxQixJQUNyQkMsZ0JBQWlCLElBQ2pCQyxtQkFBb0IsSUFDcEJDLHNCQUF1QixLQUd6QnIzQixPQUFPeVUsUUFBUXVlLElBQWdCbnRCLFFBQVEsRUFBRW9ELEVBQUsvSSxNQUM1Qzh5QixHQUFlOXlCLEdBQVMrSSxJQzNCMUIsTUFBTXF1QixHQW5CTixTQUFTQyxFQUFlQyxHQUN0QixNQUFNbHVCLEVBQVUsSUFBSXVwQixHQUFNMkUsR0FDcEJDLEVBQVdyeEIsR0FBS3lzQixHQUFNenpCLFVBQVVrWCxRQUFTaE4sR0FhL0MsT0FWQStILEdBQU03RCxPQUFPaXFCLEVBQVU1RSxHQUFNenpCLFVBQVdrSyxFQUFTLENBQUVWLFlBQVksSUFHL0R5SSxHQUFNN0QsT0FBT2lxQixFQUFVbnVCLEVBQVMsS0FBTSxDQUFFVixZQUFZLElBR3BENnVCLEVBQVMzd0IsT0FBUyxTQUFnQndxQixHQUNoQyxPQUFPaUcsRUFBZXBULEdBQVlxVCxFQUFlbEcsR0FDbkQsRUFFT21HLENBQ1QsQ0FHY0YsQ0FBZS9aLElBRzdCOFosR0FBTXpFLE1BQVFBLEdBR2R5RSxHQUFNek8sY0FBZ0JBLEdBQ3RCeU8sR0FBTUksWUMxQ04sTUFBTUEsRUFDSixXQUFBdjRCLENBQVl3NEIsR0FDVixHQUF3QixtQkFBYkEsRUFDVCxNQUFNLElBQUkvM0IsVUFBVSxnQ0FHdEIsSUFBSWc0QixFQUVKNXFCLEtBQUt3bEIsUUFBVSxJQUFJMUwsUUFBUSxTQUF5QmxILEdBQ2xEZ1ksRUFBaUJoWSxDQUNuQixHQUVBLE1BQU0vVSxFQUFRbUMsS0FHZEEsS0FBS3dsQixRQUFRdmhCLEtBQU0yWCxJQUNqQixJQUFLL2QsRUFBTWd0QixXQUFZLE9BRXZCLElBQUl0NEIsRUFBSXNMLEVBQU1ndEIsV0FBVzkyQixPQUV6QixLQUFPeEIsS0FBTSxHQUNYc0wsRUFBTWd0QixXQUFXdDRCLEdBQUdxcEIsR0FFdEIvZCxFQUFNZ3RCLFdBQWEsT0FJckI3cUIsS0FBS3dsQixRQUFRdmhCLEtBQVE2bUIsSUFDbkIsSUFBSUMsRUFFSixNQUFNdkYsRUFBVSxJQUFJMUwsUUFBU2xILElBQzNCL1UsRUFBTWtlLFVBQVVuSixHQUNoQm1ZLEVBQVduWSxJQUNWM08sS0FBSzZtQixHQU1SLE9BSkF0RixFQUFRNUosT0FBUyxXQUNmL2QsRUFBTTBjLFlBQVl3USxFQUNwQixFQUVPdkYsR0FHVG1GLEVBQVMsU0FBZ0JqaEIsRUFBU2YsRUFBUVcsR0FDcEN6TCxFQUFNMmUsU0FLVjNlLEVBQU0yZSxPQUFTLElBQUlYLEdBQWNuUyxFQUFTZixFQUFRVyxHQUNsRHNoQixFQUFlL3NCLEVBQU0yZSxRQUN2QixFQUNGLENBS0EsZ0JBQUE0RyxHQUNFLEdBQUlwakIsS0FBS3djLE9BQ1AsTUFBTXhjLEtBQUt3YyxNQUVmLENBTUEsU0FBQVQsQ0FBVWhKLEdBQ0ovUyxLQUFLd2MsT0FDUHpKLEVBQVMvUyxLQUFLd2MsUUFJWnhjLEtBQUs2cUIsV0FDUDdxQixLQUFLNnFCLFdBQVd6c0IsS0FBSzJVLEdBRXJCL1MsS0FBSzZxQixXQUFhLENBQUM5WCxFQUV2QixDQU1BLFdBQUF3SCxDQUFZeEgsR0FDVixJQUFLL1MsS0FBSzZxQixXQUNSLE9BRUYsTUFBTS9kLEVBQVE5TSxLQUFLNnFCLFdBQVdyMEIsUUFBUXVjLElBQ3hCLElBQVZqRyxHQUNGOU0sS0FBSzZxQixXQUFXN3hCLE9BQU84VCxFQUFPLEVBRWxDLENBRUEsYUFBQW9ULEdBQ0UsTUFBTTVELEVBQWEsSUFBSUMsZ0JBRWpCVCxFQUFTakIsSUFDYnlCLEVBQVdSLE1BQU1qQixJQU9uQixPQUpBN2EsS0FBSytiLFVBQVVELEdBRWZRLEVBQVc5QixPQUFPRCxZQUFjLElBQU12YSxLQUFLdWEsWUFBWXVCLEdBRWhEUSxFQUFXOUIsTUFDcEIsQ0FNQSxhQUFPamtCLEdBQ0wsSUFBSXFsQixFQUlKLE1BQU8sQ0FDTC9kLE1BSlksSUFBSTZzQixFQUFZLFNBQWtCekosR0FDOUNyRixFQUFTcUYsQ0FDWCxHQUdFckYsU0FFSixHRDdFRjBPLEdBQU05WCxTQUFXQSxHQUNqQjhYLEdBQU1yTSxRQUFVQSxHQUNoQnFNLEdBQU0zZSxXQUFhQSxHQUduQjJlLEdBQU1saEIsV0FBYUEsR0FHbkJraEIsR0FBTVUsT0FBU1YsR0FBTXpPLGNBR3JCeU8sR0FBTVcsSUFBTSxTQUFhQyxHQUN2QixPQUFPcFIsUUFBUW1SLElBQUlDLEVBQ3JCLEVBRUFaLEdBQU1hLE9FOUNTLFNBQWdCQyxHQUM3QixPQUFPLFNBQWN2cEIsR0FDbkIsT0FBT3VwQixFQUFTN3hCLE1BQU0sS0FBTXNJLEVBQzlCLENBQ0YsRUY2Q0F5b0IsR0FBTXhnQixhRzdEUyxTQUFzQnVoQixHQUNuQyxPQUFPaG5CLEdBQU01SixTQUFTNHdCLEtBQXFDLElBQXpCQSxFQUFRdmhCLFlBQzVDLEVIOERBd2dCLEdBQU1uVCxZQUFjQSxHQUVwQm1ULEdBQU0vaEIsYUFBZUEsR0FFckIraEIsR0FBTWdCLFdBQWN2eEIsR0FBVWtXLEdBQWU1TCxHQUFNM0gsV0FBVzNDLEdBQVMsSUFBSXNCLFNBQVN0QixHQUFTQSxHQUU3RnV3QixHQUFNekgsV0FBYUQsR0FBU0MsV0FFNUJ5SCxHQUFNdEUsZUFBaUJBLEdBRXZCc0UsR0FBTWlCLFFBQVVqQixHSWhGaEIsTUFBTXpFLE1BQ0pBLEdBQUt6YyxXQUNMQSxHQUFVeVMsY0FDVkEsR0FBYXJKLFNBQ2JBLEdBQVFrWSxZQUNSQSxHQUFXek0sUUFDWEEsR0FBT2dOLElBQ1BBLEdBQUdELE9BQ0hBLEdBQU1saEIsYUFDTkEsR0FBWXFoQixPQUNaQSxHQUFNeGYsV0FDTkEsR0FBVXBELGFBQ1ZBLEdBQVl5ZCxlQUNaQSxHQUFjc0YsV0FDZEEsR0FBVXpJLFdBQ1ZBLEdBQVUxTCxZQUNWQSxHQUFXcmQsT0FDWEEsSUFDRXd3QixHQ1pXLFNBQVMxYyxHQUFValMsRUFBSzZ2QixHQUNyQyxPQUFLN3ZCLEVBR0UzSSxPQUFPOEksS0FBS0gsR0FDaEJqRSxJQUFJK3pCLElBQ0gsTUFBTTFpQixFQUFJeWlCLEdBQVVDLEVBQ2R4aUIsRUFBSXROLEVBQUk4dkIsR0FFZCxNQUFvQixpQkFBTnhpQixFQUNWMkUsR0FBVTNFLEVBQUdGLEdBQ2IsR0FBR3FFLG1CQUFtQnJFLE1BQU1xRSxtQkFBbUJuRSxPQUVwRGhRLEtBQUssS0FYQyxFQVlYLENDWGUsU0FBU3l5QixHQUFRamUsRUFBS0gsR0FDbkMsT0FBT2dkLEdBQ0p2eEIsSUFDQzR5QixVQUFVbGUsSUFDUEgsSUFDeUIsSUFBckJHLEVBQUltZSxPQUFPLE1BQWUsSUFBTSxLQUFPaGUsR0FBVU4sR0FDbEQsSUFDTixDQUNFd0UsUUFBUyxJQUNUWSxPQUFRLE1BRVIxTixRQUFTLENBQ1BxTixPQUFRLHNCQUlicE8sS0FBS3NiLEdBQ0dBLEVBQUl0aEIsS0FFakIsOGpCQ2RlLFNBQVM0dEIsR0FDdEJwcUIsRUFDQXFxQixFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxHQUVBLE1BQU1DLEVBQU81cUIsRUFBZUEsRUFBYS9JLE9BQVMsS0FDbEQsR0FDRTJ6QixTQUVBQSxFQUFLdDRCLE9BQVMsR0FDYm80QixJQUFrQkEsRUFBY2gyQixLQUFLazJCLEdBRXRDLE9BQU92UyxRQUFRbEgsUUFBUSxJQUV6QixNQUFNMFosRUFBYUosR0FwQ00saURBcUN6QixJQUFJckksRUFBSTBJLEdBQUFBLEdBQUFBLEdBQUEsQ0FBS0YsUUFBU1AsR0FBaUJFLEdBQVUsR0FBQSxDQUFFRCxTQUluRCxHQUhJRSxJQUNGcEksRUFBSTBJLEdBQUFBLE1BQVExSSxHQUFJLENBQUEsRUFBQSxDQUFFb0ksYUFFaEJHLEVBQWlCLENBQ25CLE1BQU1JLEVBQVNKLEVBQWdCM3lCLFdBQy9Cb3FCLEVBQUkwSSxHQUFBQSxNQUFRMUksR0FBSSxDQUFBLEVBQUEsQ0FBRTJJLFVBQ3BCLENBQ0EsT0FBT2QsR0FBUVksRUFBWXpJLEdBQU01ZixLQUFLc2IsR0FDN0JBLEVBQUlrTixTQUVmLDhqQkN2Q0EsU0FBU0MsR0FBc0JDLEVBQU9DLEdBQ3BDLElBQUtELEdBQVNBLEVBQU01NEIsT0FBUyxFQUMzQixPQUFPK2xCLFFBQVFsSCxRQUFRLElBRXpCLElBQUlpYSxFQUFPLEdBQ1gsTUFXTUMsRUFYZ0JILEVBQU1qMUIsSUFBSXExQixJQUM5QixNQUFNejRCLEVBQXFCLFNBQWR5NEIsRUFBS3o0QixLQUFrQixPQUFTLFVBQzdDLElBQUlXLEVBQU0sT0FBTzgzQixFQUFLNTNCLE9BQU9yQixNQUFNLEtBQUssR0FBR2tDLGlCQUFpQjFCLFVBQzFEeTRCLEVBQUs1M0IsU0FNUCxPQUpJNDNCLEVBQUtsb0IsT0FDUDVQLEdBQU8sSUFBSTgzQixFQUFLbG9CLFFBRWxCZ29CLEdBQVEsR0FBRzUzQixLQUNYczNCLEdBQUFBLEdBQUEsQ0FBQSxFQUFZUSxHQUFJLENBQUEsRUFBQSxDQUFFOTNCLFVBRWlCNEMsT0FBTyxTQUMxQ0gsRUFDQXMxQixHQUlBLE9BREF0MUIsRUFBSXMxQixFQUFjLzNCLEtBQU8rM0IsRUFDbEJ0MUIsQ0FDVCxFQUFHLENBQUEsR0FDSCxPQUFPZzBCLEdBQVFrQixFQUFrQixDQUMvQkssSUFBS0osRUFBSzd5QixNQUFNLEdBQUcsS0FFbEJpSyxLQUFLc2IsR0FDQ0EsRUFBSWtOLFNBQVMvMEIsSUFBSXExQixJQUNKLENBQ2hCejRCLEtBQU0sZ0JBQ05GLFdBQVksQ0FDVjg0QixTQUFVSCxFQUFLMzRCLFdBQVc4NEIsU0FDMUJqNEIsSUFBSzYzQixFQUFlQyxFQUFLMzRCLFdBQVdhLEtBQUtBLElBQ3pDNFAsS0FBTWlvQixFQUFlQyxFQUFLMzRCLFdBQVdhLEtBQUs0UCxLQUMxQzFQLE9BQVEyM0IsRUFBZUMsRUFBSzM0QixXQUFXYSxLQUFLRSxPQUM1Q2c0QixZQUFhTCxFQUFlQyxFQUFLMzRCLFdBQVdhLEtBQUtrNEIsWUFDakRDLFlBQWFOLEVBQWVDLEVBQUszNEIsV0FBV2EsS0FBS200QixZQUNqRHgzQixRQUFTbTNCLEVBQUszNEIsV0FBV3VCLE1BQ3pCWCxNQUFPcUIsR0FBTzAyQixFQUFLMzRCLFlBQWMsZ0JBQWtCLG9CQUVyRGlCLFNBQVUwM0IsRUFBSzEzQixZQUt2QixDQTZIQSxTQUFTZzRCLEdBQWtCQyxFQUFhNzBCLEVBQU84MEIsR0FDN0MsSUFBSUMsRUFBc0JuMUIsR0FBc0JpMUIsRUFBYTcwQixFQUFPLENBQ2xFLGtCQUNBLG1CQUNBLHFCQUNBLHVCQUNBLHdCQVFGLE9BTkk4MEIsSUFFRkMsRUFBc0JBLEVBQW9CcDJCLE9BQ3hDd0IsSUFBUzIwQixFQUFXeDRCLFNBQVM2RCxFQUFLeEUsV0FBV1ksU0FHMUM4a0IsUUFBUWxILFFBQ2I2YSxFQUFBQSxRQUFLRCxFQUFxQixJQUFJOTFCLElBQUlrQixJQUNoQyxNQUFNODBCLEVBQU9uQixHQUFBQSxNQUNSM3pCLEdBQUksR0FBQSxDQUNQdEUsS0FBTSxZQUNOcTVCLGtCQUFrQixFQUNsQkMsY0FBYyxJQUdoQixjQURPRixFQUFRdDVCLFdBQVdtRCxXQUNuQm0yQixJQUdiLENBbUJBLE1BQU1HLEdBQWMsQ0FDbEIsYUFDQSxZQUNBLGFBQ0EsY0FDQSxlQUNBLGlCQUNBLG1CQUVJQyxHQUFpQixDQUFDLFFBQVMsVUFBVyxVQUN0Q0MsR0FBZ0IsQ0FBQyxVQUFXLFlBQzVCQyxHQUFhLENBQUMsT0FBUSxXQThWNUIsTUFBTUMsR0FBa0JDLEVBQUFBLFFBeFZqQixTQUNMM21CLEVBQ0Ewa0IsRUFDQWtDLEVBQ0FDLEVBQ0FDLEVBQ0FDLEdBQ0E3MUIsTUFBRUEsR0FDRjJ5QixFQUNBbUQsRUFDQUMsR0FFQSxNQUFNQyxhQUNKQSxFQUFZQyxzQkFDWkEsRUFBcUJDLGVBQ3JCQSxFQUFjQyxrQkFDZEEsRUFBaUJDLG1CQUNqQkEsRUFBa0JDLFlBQ2xCQSxFQUFXQyx3QkFDWEEsRUFBdUJDLHVDQUN2QkEsRUFBc0NDLGtDQUN0Q0EsRUFBaUNDLHdCQUNqQ0EsRUFBdUJDLG1CQUN2QkEsRUFBa0JDLGVBQ2xCQSxFQUFjOXlCLFFBQ2RBLEVBQ0EreUIsc0JBQXVCQyxFQUFhbkQsY0FDcENBLEVBQWF6MUIsV0FDYkEsRUFBVTY0QixXQUNWQSxFQUFVM0MsaUJBQ1ZBLEVBQWdCNEMsUUFDaEJBLEVBQU9DLHNCQUNQQSxFQUFxQkMsaUJBQ3JCQSxFQUFnQkMsZ0JBQ2hCQSxFQUFlQyxpQkFDZkEsR0FDRXhCLEVBRUV5QixHQUFjdG9CLEdBQThCLElBQW5CQSxFQUFReFQsT0FFakMrN0IsR0FBYzdELEdBQThCLElBQW5CQSxFQUFRbDRCLE9BQ2pDMk4sRUFBVytzQixFQUFhbnlCLEdBQ3hCeXpCLEVBQW1CLEdBQ25CQyxFQUFXLENBQUUxN0IsS0FBTSxNQUFPc0MsS0FBTTZCLEVBQU85QixRQUFTLElBQ2hEczVCLEVBQVduQixFQUFZeHlCLEdBQ3ZCMHZCLEVBQ0pzRCxHQUFpQmQsR0FBVTBCLEtBQU8xQixHQUFVMkIsSUFDeEMsQ0FFRSxrQkFBbUIzQixFQUFTMEIsSUFBSUUsUUFBUSxHQUN4QyxrQkFBbUI1QixFQUFTMkIsSUFBSUMsUUFBUSxJQUUxQyxDQUFBLEVBQ0FDLEVBQU9sQyxFQUFnQkEsRUFBY3I2QixNQUFNLEtBQUssUUFBS3lCLEVBVTNELEdBUkVnUyxFQUFReFMsU0FBUyxvQkFDRyw4QkFBcEIyTSxFQUFTa0ksUUFFVG1tQixFQUFpQjN4QixLQTlNckIsU0FBbUMzRixFQUFPaUosR0FDeEMsTUFBcUIsaUJBQVZqSixHQUF1QyxJQUFqQkEsRUFBTTFFLE9BQzlCK2xCLFFBQVFsSCxRQUFRLENBQ3JCLENBQ0V0ZSxLQUFNLGtCQUNOc0IsUUFBUzhMLEVBQVM5TCxRQUNsQnM2QixJQUFLeHVCLEVBQVN3dUIsSUFDZEMsSUFBS3p1QixFQUFTeXVCLElBQ2QvN0IsV0FBWSxDQUNWYyxRQUFTLG1CQUNURixNQUFPLGtCQUNQWSxRQUFTOEwsRUFBUzlMLFFBQ2xCczZCLElBQUt4dUIsRUFBU3d1QixJQUNkQyxJQUFLenVCLEVBQVN5dUIsS0FFaEI5NkIsU0FBVSxDQUNSZixLQUFNLFFBQ05nQixZQUFhLENBQUNvTSxFQUFTeXVCLElBQUt6dUIsRUFBU3d1QixTQU10Q3BXLFFBQVFsSCxRQUFRLEdBQ3pCLENBc0wwQjBkLENBQTBCNzNCLEVBQU9pSixLQUVyRG11QixHQUFjdG9CLEVBQVF4UyxTQUFTLGlCQUNqQ2c3QixFQUFpQjN4QixLQTFPckIsU0FBOEIzRixHQUM1QixNQUFxQixpQkFBVkEsR0FBdUMsSUFBakJBLEVBQU0xRSxPQUM5QitsQixRQUFRbEgsUUFBUSxDQUNyQixDQUNFdGUsS0FBTSxnQkFDTnNCLFFBQVMsZ0JBQ1RzNkIsSUFBSyxLQUNMQyxJQUFLLEtBQ0wvN0IsV0FBWSxDQUNWYyxRQUFTLGtCQUNURixNQUFPLGdCQUNQWSxRQUFTLGdCQUNUczZCLElBQUssS0FDTEMsSUFBSyxNQUVQOTZCLFNBQVUsQ0FDUmYsS0FBTSxRQUNOZ0IsWUFBYSxPQUtkd2tCLFFBQVFsSCxRQUFRLEdBQ3pCLENBbU4wQjJkLENBQXFCOTNCLElBRXpDOE8sRUFBUXhTLFNBQVMsZ0JBQWlCLENBQ3BDLE1BQU15N0IsRUFBUWIsRUFBZ0JyekIsR0FDOUJ5ekIsRUFBaUIzeEIsS0FBS3F2QixFQUFBQSxRQUFLK0MsRUFBTyxHQUNwQyxDQU9BLEdBTEVqcEIsRUFBUXhTLFNBQVMsMkJBdEdyQixTQUF1QnE1QixHQUNyQixNQUFNcUMsRUFBcUJyQyxFQUFjTSxzQkFDdkNOLEVBQWM5eEIsU0FFaEIsR0FBSW0wQixHQUFvQjE4QixPQUFTLEVBQy9CLE9BQU8sRUFHVCxNQUFNMjhCLEVBQ0p0QyxFQUFjYSxrQ0FBa0NiLEVBQWM5eEIsU0FDaEUsR0FBSW8wQixHQUFnQzM4QixPQUFTLEVBQzNDLE9BQU8sRUFFVCxNQUFNNDhCLEVBQWlCdkMsRUFBY1Esa0JBQWtCUixFQUFjOXhCLFNBQ3JFLE9BQU9xMEIsR0FBZ0I1OEIsT0FBUyxDQUNsQyxDQXdGSTY4QixDQUFjeEMsSUFFZDJCLEVBQWlCM3hCLEtBak1yQixTQUFnQzNGLEdBQzlCLE1BQXFCLGlCQUFWQSxHQUF1QyxJQUFqQkEsRUFBTTFFLE9BQzlCK2xCLFFBQVFsSCxRQUFRLENBQ3JCLENBQ0V0ZSxLQUFNLHlCQUNOc0IsUUFBUyx5QkFDVHM2QixJQUFLLEtBQ0xDLElBQUssS0FDTC83QixXQUFZLENBQ1ZjLFFBQVMsNEJBQ1RGLE1BQU8sZUFDUFksUUFBUyx5QkFDVHM2QixJQUFLLEtBQ0xDLElBQUssTUFFUDk2QixTQUFVLENBQ1JmLEtBQU0sUUFDTmdCLFlBQWEsT0FLZHdrQixRQUFRbEgsUUFBUSxHQUN6QixDQTBLMEJpZSxDQUF1QnA0QixJQUUzQ28zQixHQUFjdG9CLEVBQVF4UyxTQUFTLGFBQWMsQ0FFL0MsTUFBTSsyQixFQUFlMkQsRUFDckIsR0FBSXhELEVBQVFsM0IsU0FBUyxhQUFjLENBQ2pDLE1BQU0wN0IsRUFBcUIvQixFQUFzQnB5QixHQUNqRHl6QixFQUFpQjN4QixLQXhRdkIsU0FBa0MweUIsRUFBWXI0QixHQUM1QyxPQUFPcWhCLFFBQVFsSCxRQUNidmEsR0FBc0J5NEIsRUFBWXI0QixFQUFPLENBQUMsVUFBVyxTQUFTZixJQUFJa0IsSUFBSSxDQUNwRXRFLEtBQU0saUJBQ05GLFdBQVVtNEIsR0FBQUEsTUFDTDN6QixHQUFJLENBQUEsRUFBQSxDQUNQakQsTUFBT2lELEVBQUsvRCxLQUNaRyxNQUFPLG1CQUVUSyxTQUFVLENBQUVmLEtBQU0sUUFBU2dCLFlBQWEsQ0FBQ3NELEVBQUt1M0IsSUFBS3YzQixFQUFLczNCLFNBRzlELENBNlBRYSxDQUF5Qk4sRUFBb0JoNEIsSUFFM0N3ekIsRUFBUWwzQixTQUFTLFNBQ25CZzdCLEVBQWlCM3hCLEtBbExoQjBiLFFBQVFsSCxRQUFRLENBQ3JCLENBQ0V0ZSxLQUFNLE9BQ05zQixRQUFTLE9BQ1RzNkIsSUFBSyxLQUNMQyxJQUFLLEtBQ0wvN0IsV0FBWSxDQUNWYyxRQUFTLE9BQ1RGLE1BQU8sT0FDUFksUUFBUyxPQUNUczZCLElBQUssS0FDTEMsSUFBSyxNQUVQOTZCLFNBQVUsQ0FDUmYsS0FBTSxRQUNOZ0IsWUFBYSxPQXFLakIsQ0FFQSxHQUFJdzZCLEdBQWM3RCxFQUFRbDNCLFNBQVMsY0FBZSxDQUNoRCxNQUFNcTNCLEVBQWtCLENBQUMsUUFBUyxVQUFXLFVBQ3pDN2tCLEVBQVF4UyxTQUFTLGFBQ25CcTNCLEVBQWdCaHVCLEtBQUssV0FFdkIyeEIsRUFBaUIzeEIsS0FDZnl0QixHQUNFcHpCLEVBQ0FxekIsRUFDQW1FLEVBQ0FqRSxFQUNBMEQsRUFBaUJ6MkIsS0FBSyxLQUN0QnMyQixFQUNBcEQsRUFDQUMsR0FHTixDQUNBLEdBQUkwRCxHQUFjN0QsRUFBUWwzQixTQUFTLFdBQVksQ0FDN0MsTUFBTWk4QixFQUFrQnJDLEVBQWVyeUIsRUFBUyxZQUMxQ2l4QixFQUFhLENBQUMsZUFDcEJBLEVBQVdudkIsUUFBUTR2QixJQUNuQlQsRUFBV252QixRQUFReXZCLElBQ25CTixFQUFXbnZCLFFBQVEydkIsSUFDbkJnQyxFQUFpQjN4QixLQUNmaXZCLEdBQWtCMkQsRUFBaUJ2NEIsRUFBTzgwQixHQUU5QyxDQUNGLENBQ0EsR0FBSXNDLEdBQWN0b0IsRUFBUXhTLFNBQVMsZ0JBQWlCLENBQ2xELEdBQUkrNkIsR0FBYzdELEVBQVFsM0IsU0FBUyxjQUFlLENBQ2hELE1BQU0rMkIsRUFBZTJELEVBQ2pCbkIsR0FBbUMsS0FBbEJBLElBQ25CeEMsRUFBYXBNLEtBQU80TyxHQUV0QixNQUFNbEMsRUFBa0IsQ0FBQyxVQUFXLFlBQzlCNkUsRUFBVXBDLEVBQXFCQSxFQUFtQjUxQixLQUFLLEtBQU8sS0FDcEU4MkIsRUFBaUIzeEIsS0FDZnl0QixHQUNFcHpCLEVBQ0FxekIsRUFDQW1FLEVBQ0FqRSxFQUNBaUYsRUFDQTFCLEVBQ0FwRCxFQUNBQyxHQUNBbm9CLEtBQUt0TixHQUNEMDNCLEVBQ0tBLEVBQWMxM0IsRUFBUzA1QixHQUV6QjE1QixHQUdiLENBQ0EsR0FBSW01QixHQUFjN0QsRUFBUWwzQixTQUFTLFdBQVksQ0FDN0MsTUFBTW04QixFQUFVdkMsRUFBZXJ5QixHQUN6Qml4QixFQUFhLENBQUMsZUFDcEJBLEVBQVdudkIsUUFBUTR2QixJQUNuQlQsRUFBV252QixRQUFReXZCLElBQ25CTixFQUFXbnZCLFFBQVEwdkIsSUFDbkJpQyxFQUFpQjN4QixLQUFLaXZCLEdBQWtCNkQsRUFBU3o0QixFQUFPODBCLEdBQzFELENBQ0YsQ0FFQSxNQUFNNEQsRUFBVzVwQixFQUFReFMsU0FBUyxTQUM1QnE4QixFQUFjN3BCLEVBQVF4UyxTQUFTLFlBRXJDLEdBQUk4NkIsR0FBY3NCLEdBQVlDLEVBQWEsQ0FDekMsR0FBSW5GLEVBQVFsM0IsU0FBUyxhQUFjLENBQ2pDLE1BQU00N0IsRUFBaUIvQixFQUFrQnR5QixHQUN6QyxJQUFJKzBCLEVBRUZBLEVBREVWLEVBQWVXLE1BQU12RSxHQUFzQixZQUFkQSxFQUFLejRCLE1BQ2pCbzRCLEdBQ2pCaUUsRUFDQS9ELEdBQ0Ezb0IsS0FBS3ROLEdBQ0QwM0IsRUFDS0EsRUFBYzEzQixFQUFTMDVCLEdBRXpCMTVCLEdBR1VvNEIsRUFBd0I0QixHQUN4QzFzQixLQUFLNnNCLEdBQ0pwRSxHQUFzQm9FLEVBQVlsRSxJQUVuQzNvQixLQUFLdE4sR0FDQTAzQixFQUNLQSxFQUFjMTNCLEVBQVMwNUIsR0FFekIxNUIsR0FHYm81QixFQUFpQjN4QixLQS9QdkIsU0FBOEJpekIsRUFBa0I1NEIsRUFBTzA0QixFQUFVQyxHQUMvRCxPQUFPQyxFQUFpQnB0QixLQUFLc3RCLEdBSXBCbDVCLEdBSFlrNUIsRUFBY242QixPQUFPOHJCLEdBQzNCLFNBQVhBLEVBQUU1dUIsS0FBa0I2OEIsRUFBV0MsR0FFUTM0QixFQUFPLENBQzlDLGtCQUNBLGtCQUNBLHVCQUdOLENBcVBRKzRCLENBQXFCSCxFQUFrQjU0QixFQUFPMDRCLEVBQVVDLEdBRTVELENBQ0EsR0FBSXRCLEdBQWM3RCxFQUFRbDNCLFNBQVMsY0FBZSxDQUNoRCxNQUFNcTNCLEVBQWtCLEdBQ3BCK0UsR0FDRi9FLEVBQWdCaHVCLEtBQUssUUFFbkJnekIsR0FDRmhGLEVBQWdCaHVCLEtBQUssV0FFdkIsTUFBTTB0QixFQUNKd0MsR0FBbUMsS0FBbEJBLEVBQXVCLENBQUU1TyxLQUFNNE8sR0FBa0IsQ0FBQSxFQUNoRW1CLEdBQXlCQSxFQUFzQixzQkFDakQzRCxFQUFhLG9CQUNYMkQsRUFBc0Isc0JBSXRCSSxHQUFjdG9CLEVBQVF4UyxTQUFTLGdCQUNqQysyQixFQUFhMkYsWUFBYyxHQUU3QixNQUFNQyxFQUFRbEMsRUFBUTkzQixJQUFJdVIsR0FBSyxPQUFPQSxLQUFLaFEsS0FBSyxLQUNoRDgyQixFQUFpQjN4QixLQUNmeXRCLEdBQ0VwekIsRUFDQXF6QixFQUNBbUUsRUFDQWpFLEVBQ0EwRixFQUNBbkMsRUFDQXBELEVBQ0FDLEdBQ0Fub0IsS0FBS3ROLEdBQ0QwM0IsRUFDS0EsRUFBYzEzQixFQUFTMDVCLEdBRXpCMTVCLEdBR2IsQ0FDQSxHQUFJbTVCLEdBQWM3RCxFQUFRbDNCLFNBQVMsV0FBWSxDQUM3QyxNQUFNNDhCLEVBQWNoRCxFQUFlcnlCLEdBQVNsRixPQUFPd0IsSUFDN0NBLEVBQUt4RSxXQUFXYSxLQUNYMkQsRUFBS3hFLFdBQVdhLElBQUlGLFNBQVMsVUFJbEN3NEIsRUFBYSxDQUFDLGVBQ3BCQSxFQUFXbnZCLFFBQVF5dkIsSUFDbkJOLEVBQVdudkIsUUFBUTB2QixJQUNuQlAsRUFBV252QixRQUFRMnZCLElBQ2RvRCxHQUNINUQsRUFBV252QixLQUFLLFFBRWJnekIsR0FDSDdELEVBQVdudkIsS0FBSyxXQUVkK3ZCLEVBQ0Y0QixFQUFpQjN4QixLQUNmaXZCLEdBQWtCc0UsRUFBYWw1QixFQUFPODBCLEdBQVl0cEIsS0FBSzVNLEdBQ3JEZzNCLEVBQWdCQSxFQUFjaDNCLEVBQVFnNUIsR0FBUWg1QixJQUlsRDA0QixFQUFpQjN4QixLQUNmaXZCLEdBQWtCc0UsRUFBYWw1QixFQUFPODBCLEdBRzVDLENBQ0YsQ0FDQSxHQUFJc0MsR0FBY3RvQixFQUFReFMsU0FBUyxVQUFXLENBQzVDLEdBQUlrM0IsRUFBUWwzQixTQUFTLGFBQWMsQ0FDakMsTUFBTTY4QixFQUFrQnpDLEVBQW1CN3lCLEdBQzNDeXpCLEVBQWlCM3hCLEtBQ2Y4d0IsRUFBd0IwQyxFQUFpQm41QixFQUFPNDNCLEVBQU05QixHQUFVdHFCLEtBQzlENU0sR0FDRWczQixFQUFnQkEsRUFBY2gzQixFQUFRZzVCLEVBQU0sVUFBWWg1QixHQUdoRSxDQU1BLEdBTEEwNEIsRUFBaUIzeEIsS0FDZmd4QixFQUFlMzJCLEVBQU8rMkIsRUFBU3JCLEVBQWVJLEdBQVV0cUIsS0FBSzVNLEdBQzNEZzNCLEVBQWdCQSxFQUFjaDNCLEVBQVFnNUIsRUFBTSxVQUFZaDVCLElBR3hEeTRCLEdBQWM3RCxFQUFRbDNCLFNBQVMsV0FBWSxDQUM3QyxNQUFNODhCLEVBQWVsRCxFQUFlcnlCLEdBQzlCaXhCLEVBQWEsQ0FBQyxlQUNoQlksR0FDRlosRUFBV252QixRQUFReXZCLEdBQVl6MkIsT0FBTzdFLEtBQU9BLElBQU00N0IsS0FFckRaLEVBQVdudkIsUUFBUTR2QixJQUNuQlQsRUFBV252QixRQUFRMHZCLElBQ25CUCxFQUFXbnZCLFFBQVEydkIsSUFFbkJnQyxFQUFpQjN4QixLQUNmaXZCLEdBQWtCd0UsRUFBY3A1QixFQUFPODBCLEdBQVl0cEIsS0FBS3ROLEdBQ3REMDNCLEVBQWdCQSxFQUFjMTNCLEVBQVMwNUIsRUFBTSxVQUFZMTVCLEdBRy9ELENBQ0YsQ0FDQSxHQUFJazVCLEdBQWN0b0IsRUFBUXhTLFNBQVMseUJBQTBCLENBQzNELEdBQUlrM0IsRUFBUWwzQixTQUFTLGFBQWMsQ0FDakMsTUFBTSs4QixFQUNKN0MsRUFBa0MzeUIsR0FDcEN5ekIsRUFBaUIzeEIsS0FDZjR3QixFQUNFOEMsRUFDQXI1QixHQUdOLENBQ0EsR0FBSXEzQixHQUFjN0QsRUFBUWwzQixTQUFTLGNBQWUsQ0FDaEQsTUFBTXEzQixFQUFrQixDQUFDLGVBQ25CTixFQUNKd0MsR0FBbUMsS0FBbEJBLEVBQXVCLENBQUU1TyxLQUFNNE8sR0FBa0IsQ0FBQSxFQUNwRXlCLEVBQWlCM3hCLEtBQ2Z5dEIsR0FDRXB6QixFQUNBcXpCLEVBQ0FtRSxFQUNBakUsRUFDQTRELEVBQWlCMzJCLEtBQUssS0FDdEJzMkIsRUFDQXBELEVBQ0FDLEdBQ0Fub0IsS0FBS3ROLEdBQ0QwM0IsRUFDS0EsRUFBYzEzQixFQUFTMDVCLEVBQU0seUJBRS9CMTVCLEdBR2IsQ0FDQSxHQUFJbTVCLEdBQWM3RCxFQUFRbDNCLFNBQVMsV0FBWSxDQUM3QyxNQUFNbThCLEVBQVV2QyxFQUFlcnlCLEdBQ3pCaXhCLEVBQWEsSUFBSVMsSUFDdkJULEVBQVdudkIsUUFBUXl2QixJQUNuQk4sRUFBV252QixRQUFRMHZCLElBQ25CUCxFQUFXbnZCLFFBQVEydkIsSUFFbkJnQyxFQUFpQjN4QixLQUFLaXZCLEdBQWtCNkQsRUFBU3o0QixFQUFPODBCLEdBQzFELENBQ0YsQ0FFNkJ6VCxRQUFRbVIsSUFBSThFLEdBQ3RDOXJCLEtBQUs4dEIsRUFBQUEsU0FDTDl0QixLQUFLdE4sSUFDSnE1QixFQUFTcjVCLFFBQVVBLElBRXBCdU4sTUFBTTJXLElBQ0xtVixFQUFTM21CLE1BQVF3UixJQUVBNVcsS0FBSyxLQUN4Qm1uQixFQUFRbUIsR0FBQUEsTUFDSHlELEdBQVEsQ0FBQSxFQUFBLENBQ1hyNUIsUUFBU0YsR0FBa0JDLEVBQVlzNUIsRUFBU3I1QixRQUFTOEIsT0FHL0QsRUFFbUQsSUFBSyxDQUN0RHU1QixTQUFTLElDMWtCTEMsR0FBTzFILEVBQUFBLGVBQWUsQ0FDMUIySCxZQUFhLEtBRWJDLFVDTm1CLENBQ25CQyxHQUFJLENBQ0ZDLFlBQWEsQ0FDWHo4QixRQUFTLFVBQ1QsNEJBQTZCLDBCQUM3Qix1QkFBd0IsMEJBQ3hCLGdDQUNFLDJDQUNGLHNDQUNFLHNEQUNGLHFDQUNFLHFEQUNGMDhCLFNBQVUsT0FDVkMsUUFBUyxVQUNUQyxLQUFNLFNBQ05DLGtCQUFtQixrQkFDbkJDLElBQUssTUFDTDlXLE9BQVEsWUFDUixxQkFBc0IsVUFDdEIsdUJBQXdCLHVCQUN4QitXLGdCQUFpQixvQkFDakI1dUIsT0FBUSxVQUNSLDZCQUE4Qix3Q0FDOUI2dUIsVUFBVyxVQUNYbCtCLFlBQWEsT0FDYixjQUFlLGtCQUNmLG1CQUFvQixpQkFDcEJtK0IsVUFBVyxZQUNYQyxNQUFPLFFBQ1AsZUFBZ0Isd0JBQ2hCdCtCLE9BQVEsUUFDUix1QkFBd0IsUUFDeEJ1K0IsYUFBYyxtQkFDZEMsUUFBUyxXQUNULGVBQWdCLE1BQ2hCQyxLQUFNLE1BQ05ySCxPQUFRLFFBQ1IsMEJBQTJCLDJDQUMzQixzQkFBdUIsUUFDdkIscUJBQXNCLHNDQUN0QiwyQkFBNEIsbUJBQzVCLDJDQUNFLDBDQUNGLG9CQUFxQixxQkFDckIsZ0JBQWlCLHlDQUNqQixzQkFBdUIsb0JBQ3ZCLGtCQUFtQixxQkFDbkIsMkJBQTRCLCtCQUM1QixnREFDRSwyREFDRiwrQ0FDRSwwREFDRiwrQ0FDRSw4RkFDRix5QkFBMEIsMENBQzFCLGdDQUNFLDRDQUNGLDRCQUE2QixrQ0FDN0JzSCxPQUFRLFNBQ1JDLE9BQVEsU0FDUkMsUUFBUyxVQUNUckcsS0FBTSxjQUNOLGdCQUFpQiw0Q0FDakIsb0JBQXFCLGtDQUNyQix5QkFBMEIsMEJBQzFCLHFCQUFzQixzQ0FDdEIsdUJBQXdCLHdDQUN4QixxQkFBc0IscUNBQ3RCLFdBQVksV0FDWixjQUFlLFlBQ2ZzRyxLQUFNLGNBQ04sbUJBQW9CLDZCQUNwQixrQkFBbUIsOEJBQ25CLDRCQUE2QixrQ0FDN0JDLE1BQU8sUUFDUCxZQUFhLGVBQ2JDLE1BQU8sU0FDUEMsTUFBTyxRQUdYQyxHQUFJLENBQ0ZwQixZQUFhLENBQ1h6OEIsUUFBUyxVQUNULDRCQUE2Qiw2QkFDN0IsdUJBQXdCLGdCQUN4QixnQ0FDRSwyQ0FDRixzQ0FDRSxzREFDRixxQ0FDRSxxREFDRjA4QixTQUFVLFNBQ1ZDLFFBQVMsVUFDVEMsS0FBTSxPQUNOa0IsU0FBVSx3QkFDVmpCLGtCQUFtQixlQUNuQkMsSUFBSyxNQUNMOVcsT0FBUSxTQUNSK1gsUUFBUyxjQUNULHFCQUFzQixRQUN0Qix1QkFBd0IsdUJBQ3hCaEIsZ0JBQWlCLG1CQUNqQjV1QixPQUFRLFNBQ1IsNkJBQThCLDJDQUM5QjZ1QixVQUFXLFlBQ1hsK0IsWUFBYSxjQUNiLGNBQWUscUJBQ2YsbUJBQW9CLHlCQUNwQm0rQixVQUFXLFlBQ1hDLE1BQU8sUUFDUCxlQUFnQixlQUNoQnQrQixPQUFRLFFBQ1IsdUJBQXdCLFFBQ3hCdStCLGFBQWMsZ0JBQ2RDLFFBQVMsYUFDVCxlQUFnQixJQUNoQmhqQixTQUFVLFdBQ1ZpakIsS0FBTSxRQUNOVyxTQUFVLGlCQUNWaEksT0FBUSxTQUNSLDBCQUEyQixrQ0FDM0Isc0JBQXVCLFNBQ3ZCLHFCQUFzQixvQ0FDdEIsMkJBQTRCLG9CQUM1QiwyQ0FDRSxpREFDRixvQkFBcUIsY0FDckIsZ0JBQWlCLCtCQUNqQixzQkFBdUIsZUFDdkIsa0JBQW1CLGtCQUNuQiwyQkFBNEIsK0JBQzVCLGdEQUNFLDJEQUNGLCtDQUNFLDBEQUNGLCtDQUNFLDhGQUNGLHlCQUEwQiwwQ0FDMUIsZ0NBQ0UsNENBQ0YsNEJBQTZCLG1DQUM3QnNILE9BQVEsU0FDUkMsT0FBUSxRQUNSQyxRQUFTLFVBQ1RyRyxLQUFNLE9BQ04sZ0JBQWlCLDBCQUNqQix5QkFBMEIsNkJBQzFCLHlCQUEwQixvQkFDMUIsb0JBQXFCLDZCQUNyQix3QkFBeUIsbUJBQ3pCLHlCQUEwQiw0QkFDMUIscUJBQXNCLGtDQUN0Qix1QkFBd0IsbUNBQ3hCLHFCQUFzQiw4QkFDdEIscUJBQXNCLHNCQUN0QixXQUFZLFdBQ1osY0FBZSxjQUNmc0csS0FBTSxPQUNOUSxNQUFPLFFBQ1AsbUJBQW9CLHVCQUNwQixrQkFBbUIsMkJBQ25CLDRCQUE2Qiw0QkFDN0JQLE1BQU8sUUFDUCxZQUFhLFlBQ2JDLE1BQU8sWUFDUEMsTUFBTyxhQUdYTSxHQUFJLENBQ0Z6QixZQUFhLENBQ1h6OEIsUUFBUyxTQUNULDRCQUE2Qiw0QkFDN0IsdUJBQXdCLGtCQUN4QixnQ0FDRSxrREFDRixzQ0FDRSx3REFDRixxQ0FDRSx5REFDRjA4QixTQUFVLFlBQ1ZDLFFBQVMsVUFDVEMsS0FBTSxXQUNOdUIscUJBQXNCLGFBQ3RCTCxTQUFVLHFCQUNWaEIsSUFBSyxRQUNMOVcsT0FBUSxVQUNSK1gsUUFBUyxxQkFDVCxxQkFBc0IsV0FDdEIsdUJBQXdCLHdCQUN4QmhCLGdCQUFpQix5QkFDakI1dUIsT0FBUSxTQUNSLDZCQUE4QixvQ0FDOUI2dUIsVUFBVyxZQUNYbCtCLFlBQWEsWUFDYm0rQixVQUFXLFdBQ1hDLE1BQU8sU0FDUCxlQUFnQixnQkFDaEIsY0FBZSxjQUNmLG1CQUFvQixZQUNwQnQrQixPQUFRLGNBQ1IsdUJBQXdCLGNBQ3hCdStCLGFBQWMsY0FDZEMsUUFBUyxjQUNULGVBQWdCLE1BQ2hCaGpCLFNBQVUsVUFDVmlqQixLQUFNLE9BQ05XLFNBQVUsb0JBQ1ZoSSxPQUFRLE9BQ1IsMEJBQTJCLHFDQUMzQixzQkFBdUIsTUFDdkIscUJBQXNCLHVDQUN0QiwyQkFBNEIsa0JBQzVCLDJDQUNFLG9EQUNGLG9CQUFxQixjQUNyQixnQkFBaUIsd0NBQ2pCLHNCQUF1QixvQkFDdkIsMkJBQTRCLGdDQUM1QixnREFDRSwwREFDRiwrQ0FDRSxxREFDRiwrQ0FDRSxnRUFDRix5QkFBMEIsZ0NBQzFCLGdDQUFpQyxrQ0FDakMsNEJBQTZCLHVDQUM3QixrQkFBbUIsV0FDbkJzSCxPQUFRLE9BQ1JDLE9BQVEsUUFDUkMsUUFBUyxRQUNUckcsS0FBTSxVQUNOLGdCQUFpQiwyQkFDakIseUJBQTBCLDhCQUMxQix5QkFBMEIsbUJBQzFCLG9CQUFxQiwrQkFDckIsd0JBQXlCLGtCQUN6Qix5QkFBMEIsMEJBQzFCLHFCQUFzQiwyQkFDdEIsdUJBQXdCLDZCQUN4QixxQkFBc0IsZ0NBQ3RCLHFCQUFzQix3QkFDdEIsV0FBWSxhQUNaLGNBQWUsZUFDZnNHLEtBQU0sY0FDTlEsTUFBTyxRQUNQLG1CQUFvQiwyQkFDcEIsa0JBQW1CLDRCQUNuQiw0QkFBNkIsMkJBQzdCUCxNQUFPLFNBQ1AsWUFBYSxZQUNiQyxNQUFPLGlCQUNQQyxNQUFPLFdBR1hRLEdBQUksQ0FDRjNCLFlBQWEsQ0FDWHo4QixRQUFTLFFBQ1QsNEJBQTZCLDJCQUM3Qix1QkFBd0IsdUJBQ3hCLGdDQUNFLDRDQUNGLHNDQUNFLHFEQUNGLHFDQUNFLG9EQUNGMDhCLFNBQVUsTUFDVkMsUUFBUyxXQUNUQyxLQUFNLE9BQ05rQixTQUFVLDRCQUNWakIsa0JBQW1CLGtCQUNuQkMsSUFBSyxVQUNMOVcsT0FBUSxTQUNSK1gsUUFBUyxnQkFDVCxxQkFBc0IsVUFDdEIsdUJBQXdCLGdDQUN4QmhCLGdCQUFpQixtQkFDakI1dUIsT0FBUSxPQUNSLDZCQUNFLHVEQUNGNnVCLFVBQVcsU0FDWGwrQixZQUFhLE1BQ2IsY0FBZSxrQ0FDZixtQkFBb0Isb0JBQ3BCbStCLFVBQVcsV0FDWEMsTUFBTyxPQUNQLGVBQWdCLGlCQUNoQnQrQixPQUFRLFdBQ1IsdUJBQXdCLFdBQ3hCdStCLGFBQWMsaUJBQ2RDLFFBQVMsYUFDVCxlQUFnQixPQUNoQmhqQixTQUFVLFFBQ1ZpakIsS0FBTSxTQUNOVyxTQUFVLGdCQUNWaEksT0FBUSxTQUNSLDBCQUEyQix1Q0FDM0Isc0JBQXVCLFNBQ3ZCLHFCQUFzQixvQ0FDdEIsMkJBQTRCLDBCQUM1QiwyQ0FDRSw0Q0FDRixvQkFBcUIsbUJBQ3JCLGdCQUFpQiwrQ0FDakIsc0JBQXVCLDRCQUN2QixrQkFBbUIscUJBQ25CLDJCQUE0QixxQ0FDNUIsZ0RBQ0Usa0VBQ0YsK0NBQ0UsZ0VBQ0YsK0NBQ0UsNkZBQ0YseUJBQTBCLHFDQUMxQiw2QkFBOEIsbUNBQzlCLCtCQUFnQyxxQ0FDaEMsNEJBQTZCLDhCQUM3QnNILE9BQVEsUUFDUkMsT0FBUSxRQUNSQyxRQUFTLFNBQ1RyRyxLQUFNLGFBQ04sZ0JBQWlCLDRCQUNqQix5QkFBMEIseUJBQzFCLG9CQUFxQix5Q0FDckIseUJBQTBCLGtDQUMxQixxQkFBc0IsdUNBQ3RCLHVCQUF3QixtQ0FDeEIscUJBQXNCLHlDQUN0QixxQkFBc0IsdUNBQ3RCLFdBQVksU0FDWixjQUFlLFVBQ2ZzRyxLQUFNLFVBQ05RLE1BQU8sTUFDUCxtQkFBb0IsMkJBQ3BCLGtCQUFtQiwyQkFDbkIsNEJBQTZCLDRCQUM3QlAsTUFBTyxVQUNQLFlBQWEsY0FDYkMsTUFBTyxTQUNQQyxNQUFPLFlBR1hTLEdBQUksQ0FDRjVCLFlBQWEsQ0FDWHo4QixRQUFTLFNBQ1QsNEJBQTZCLDhCQUM3Qix1QkFBd0IscUJBQ3hCLGdDQUNFLGdEQUNGLHNDQUNFLDJEQUNGLHFDQUNFLDJEQUNGMDhCLFNBQVUsT0FDVkMsUUFBUyxXQUNUQyxLQUFNLFdBQ05DLGtCQUFtQixvQkFDbkJpQixTQUFVLGtDQUNWaEIsSUFBSyxRQUNMOVcsT0FBUSxTQUNSK1gsUUFBUyxtQkFDVCxxQkFBc0IsTUFDdEIsdUJBQXdCLG9CQUN4QmhCLGdCQUFpQixxQkFDakI1dUIsT0FBUSxVQUNSLDZCQUE4QiwrQkFDOUI2dUIsVUFBVyxhQUNYbCtCLFlBQWEsY0FDYm0rQixVQUFXLFVBQ1hDLE1BQU8sUUFDUCxlQUFnQixnQkFDaEIsbUJBQW9CLDJCQUNwQixjQUFlLDRCQUNmdCtCLE9BQVEsZUFDUix1QkFBd0IsZUFDeEJ1K0IsYUFBYyxlQUNkQyxRQUFTLFlBQ1QsZUFBZ0IsTUFDaEJoakIsU0FBVSxZQUNWaWpCLEtBQU0sTUFDTlcsU0FBVSxxQkFDVmhJLE9BQVEsTUFDUiwwQkFBMkIsdUNBQzNCLHNCQUF1QixNQUN2QixxQkFBc0IseUNBQ3RCLDJCQUE0QixvQkFDNUIsMkNBQ0UseUNBQ0Ysb0JBQXFCLG1CQUNyQixnQkFBaUIsMENBQ2pCLHNCQUF1QixxQkFDdkIsa0JBQW1CLGVBQ25CLDJCQUE0QixxQ0FDNUIsZ0RBQ0Usa0VBQ0YsK0NBQ0Usc0RBQ0YsK0NBQ0UsMEVBQ0YseUJBQTBCLDRCQUMxQiw0QkFBNkIsK0JBQzdCc0gsT0FBUSxPQUNSQyxPQUFRLFFBQ1JDLFFBQVMsVUFDVHJHLEtBQU0sWUFDTixnQkFBaUIsK0JBQ2pCLHlCQUEwQiw2QkFDMUIseUJBQTBCLHFCQUMxQixvQkFBcUIsbUNBQ3JCLHdCQUF5QiwyQkFDekIseUJBQTBCLDBCQUMxQixxQkFBc0IsK0JBQ3RCLHVCQUF3QixrQ0FDeEIscUJBQXNCLHVDQUN0QixxQkFBc0IsMkJBQ3RCLFdBQVksV0FDWixjQUFlLFdBQ2ZzRyxLQUFNLFdBQ05RLE1BQU8sT0FDUCxtQkFBb0Isc0JBQ3BCLGtCQUFtQiw0QkFDbkIsNEJBQTZCLHlCQUM3QlAsTUFBTyxhQUNQLFlBQWEsWUFDYkMsTUFBTyxvQkFDUEMsTUFBTyxXRGxhWFUsVUFBVyxjQUNYQyxNQUFPLENBQ0xDLGFBQWEsS0VUakIsU0FBU0MsR0FBWUMsRUFBS0MsWUFDbkJBLElBQWlCQSxFQUFNLENBQUEsR0FDNUIsSUFBSUMsRUFBV0QsRUFBSUMsU0FFbkIsR0FBS0YsR0FBMkIsb0JBQWJobEIsU0FBbkIsQ0FFQSxJQUFJbUUsRUFBT25FLFNBQVNtRSxNQUFRbkUsU0FBU21sQixxQkFBcUIsUUFBUSxHQUM5REMsRUFBUXBsQixTQUFTcWxCLGNBQWMsU0FDbkNELEVBQU1wZ0MsS0FBTyxXQUVJLFFBQWJrZ0MsR0FDRS9nQixFQUFLbWhCLFdBQ1BuaEIsRUFBS29oQixhQUFhSCxFQUFPamhCLEVBQUttaEIsWUFLaENuaEIsRUFBS3FoQixZQUFZSixHQUdmQSxFQUFNSyxXQUNSTCxFQUFNSyxXQUFXQyxRQUFVVixFQUUzQkksRUFBTUksWUFBWXhsQixTQUFTMmxCLGVBQWVYLEdBbkJXLENBcUJ6RCxDRlpBckMsR0FBS2lELCs3S0dVTCxNQUFNQyxHQUFnQkMsR0FDcEJBLEVBQVd0Z0MsWUFDWHNnQyxFQUFXdGdDLFlBQ1ZzZ0MsRUFBV3gvQixTQUNWdy9CLEVBQVd4L0IsUUFBUXVDLFlBQVksS0FBT2k5QixFQUFXeC9CLFFBQVE3QixPQUFTLEdBQ2xFcWhDLEVBQVd4L0IsUUFBUXdDLFVBQVVnOUIsRUFBV3gvQixRQUFRdUMsWUFBWSxLQUFPLElBQ3JFLEdBRVdrOUIsR0FBY0EsRUFBR3poQyxLQUFJaVIsVUFDNUJBLFNBSUt0UCxJQUFQM0IsUUFDc0IsSUFBZkEsRUFBRzRDLGNBQ1Y1QyxFQUFHNEMsUUFBUSxLQUtONUMsRUFBR3dFLFVBQVV4RSxFQUFHNEMsUUFBUSxLQUFPLFFBUnRDLEdBMkJXOCtCLEdBQWVDLEVBQUFBLFFBQzFCLENBQUNILEVBQVlJLEdBQVEsS0FDbkIsT0FBUUosRUFBV3BnQyxPQUNqQixJQUFLLGtCQUNILE1BQU8sQ0FBQ29nQyxFQUFXbGdDLFFBQVNrZ0MsRUFBV3gvQixTQUN6QyxJQUFLLGdCQUNMLElBQUssZUFDTCxJQUFLLE9BQ0gsTUFBTyxDQUFDdy9CLEVBQVdsZ0MsU0FDckIsSUFBSyxpQkFDSCxPQTFCa0NMLEVBMEJEdWdDLEVBQVd2Z0MsS0ExQkplLEVBMEJVdy9CLEVBQVd4L0IsUUExQlQsQ0FDMURmLEdBQVNlLEdBQVdBLEVBQVE5QixNQUFNLEtBQUssR0FDcEIsaUJBQVo4QixFQUNIQSxFQUFRdUQsUUFBUSxJQUFJb0wsT0FBTyxHQUFHa3hCLEVBQUFBLFFBQWE1Z0MsZUFBbUIsSUFDOUQsSUF1QkEsSUFBSyxnQ0FDTCxJQUFLLGNBQ0gsTUFBTyxDQUFDdWdDLEVBQVd2Z0MsTUFDckIsSUFBSyxpQkFDTCxJQUFLLFlBQ0wsSUFBSyxhQUNMLElBQUssYUFDTCxJQUFLLGVBQ0wsSUFBSyxjQUNMLElBQUssa0JBQ0wsSUFBSyxpQkFDSCxPQUFRMmdDLEdBQVNKLEVBQVc5OUIsVUFDeEIsQ0FDRTg5QixFQUFXamdDLE9BQ1hpZ0MsRUFBVy9FLEtBQUtyNkIsY0FDaEJvL0IsRUFBV00sVUFFYixDQUNFTixFQUFXOTlCLFVBQ1g4OUIsRUFBV00sU0FDWE4sRUFBV08sT0FBU1AsRUFBV08sT0FBTzlnQyxVQUFPVSxHQUVyRCxJQUFLLFFBQ0wsSUFBSyxVQUNMLElBQUssU0FDSCxNQUFPLENBQ0w2L0IsRUFBV3ZnQyxLQUNYdWdDLEVBQVd6L0IsTUFBTXdELFFBQ2YsSUFBSW9MLE9BQU8sR0FBR2t4QixFQUFBQSxRQUFhTCxFQUFXdmdDLGlCQUN0QyxLQUdOLElBQUssZ0JBQ0wsSUFBSyxPQUNILE9BQU8yZ0MsRUFDSCxDQUNFSixFQUFXdmdDLE1BQ1R1Z0MsRUFBV3ovQixPQUNWeS9CLEVBQVd4L0IsU0FBV3cvQixFQUFXeC9CLFFBQVE5QixNQUFNLEtBQUssR0FDdkRxaEMsR0FBY0MsSUFFaEIsQ0FDRUEsRUFBV3ZnQyxLQUNYdWdDLEVBQVd4aEMsR0FDWHloQyxHQUFZRCxHQUNaRCxHQUFjQyxJQUl0QixRQUNFLE1BQU8sQ0FDTEEsRUFBV3ZnQyxNQUNUdWdDLEVBQVd6L0IsT0FDVnkvQixFQUFXeC9CLFNBQVd3L0IsRUFBV3gvQixRQUFROUIsTUFBTSxLQUFLLEdBQ3ZEcWhDLEdBQWNDLElBakZpQlEsSUFBQy9nQyxFQUFNZSxHQXFGOUMsQ0FBQ2dELEVBQU00OEIsS0FDTCxNQUFNampDLEVBQUlzakMsRUFBQUEsUUFBVWo5QixHQUVwQixPQURBckcsRUFBRWlqQyxNQUFRQSxFQUNIampDLElDOUhKLE1BQU11akMsR0FBMkIxZ0IsSUFDdEMsTUFFTW5aLEVBQU9tWixJQUFVQSxFQUFNblosS0FBT21aLEVBQU0yZ0IsT0FBUzNnQixFQUFNNGdCLFVBQWEsR0FFdEUsU0FBSy81QixJQUpTLENBQUMsR0FBSSxJQUFLLFlBSUwvQyxPQUhMLENBQUMsR0FBSSxVQUdjbkUsU0FBU2tILE1BRzFDbVosRUFBTTZnQixrQkFDQyxJQUdJQyxHQUFjdGlDLEdBQ2xCLFdBQVBBLEdBQ08sZ0JBQVBBLEdBQ08sY0FBUEEsR0FDTyx5QkFBUEEsRUFFV3VpQyxHQUFjQSxDQUFDakosRUFBVWtKLEVBQUs5akMsS0FFekMsSUFBS0EsRUFDSCxPQUVGLElBQUs0NkIsSUFBYUEsRUFBU21KLEtBQUtybUIsU0FDOUIsT0FFRixNQUFNc21CLE1BQUVBLEVBQUt0bUIsU0FBRUEsR0FBYWtkLEVBQVNtSixLQUdyQyxNQUFPLENBRExDLEdBQXNCLFNBQWJBLEVBQU0sR0FBZ0Joa0MsRUFBRSxRQUFTLENBQUU4akMsUUFBUzlqQyxFQUFFLFdBQVksQ0FBRThqQyxRQUN6RHBtQixJQUdULFNBQVN1bUIsR0FBcUIzOUIsRUFBTXc5QixFQUFLOWpDLEdBRTlDLElBQUtBLEVBQ0gsT0FFRixHQUFrQixnQkFBZHNHLEVBQUt0RSxLQUF3QixDQUMvQixHQUFrQixrQkFBZHNFLEVBQUt0RSxLQUNQLE1BQU8sQ0FBQyxHQUFJaEMsRUFBRSxrQkFBbUIsQ0FBRThqQyxTQUVyQyxHQUFrQixvQkFBZHg5QixFQUFLdEUsS0FDUCxNQUFPLENBQUMsR0FBSWhDLEVBQUUsbUJBQW9CLENBQUU4akMsU0FFdEMsR0FBa0IsMkJBQWR4OUIsRUFBS3RFLEtBQ1AsTUFBTyxDQUFDLEdBQUloQyxFQUFFLDRCQUE2QixDQUFFOGpDLFNBRy9DLElBQ0lJLEdBREMzaEMsRUFBTWMsR0FBUzIvQixHQUFhMThCLEVBQUt4RSxZQUFZLEdBRWxELEdBQ0V3RSxFQUFLeEUsV0FBV1ksTUFBTWdCLGNBQWNqQixTQUFTLGVBQzdDNkQsRUFBS3hFLFdBQVdZLE1BQU1nQixjQUFjakIsU0FBUyxlQUM3QyxDQUNBeWhDLEVBQWlCbGtDLEVBQUUsdUJBQXdCLENBQUU4akMsUUFFN0MsTUFBTyxDQUFDSSxFQUFnQjNoQyxPQUFNVSxFQURicUQsRUFBS3hFLFdBQVdjLFFBRW5DLENBRUEsR0FBOEIsYUFBMUIwRCxFQUFLeEUsV0FBV1ksTUFFbEIsT0FEQXdoQyxFQUFpQmxrQyxFQUFFLFdBQVksQ0FBRThqQyxRQUMxQixDQUFDSSxFQUFnQjNoQyxPQUFNVSxPQUFXQSxHQUczQyxHQUE4QixZQUExQnFELEVBQUt4RSxXQUFXWSxNQUVsQixPQURBd2hDLEVBQWlCbGtDLEVBQUUsVUFBVyxDQUFFOGpDLFFBQ3pCLENBQUNJLEVBQWdCM2hDLE9BQU1VLE9BQVdBLEdBRzNDLEdBQUlxRCxFQUFLeEUsV0FBV2k4QixLQUNsQm1HLEVBQWlCbGtDLEVBQ2ZzRyxFQUFLeEUsV0FBV2k4QixLQUFLcjZCLGNBQWNtRCxRQUFRLFlBQWEsSUFDeEQsQ0FBRWk5QixZQUVDLENBS0xJLEVBQWlCbGtDLEVBSkhzRyxFQUFLeEUsV0FBV1ksTUFDM0JtRSxRQUFRLFNBQVUsSUFDbEJuRCxjQUNBbUQsUUFBUSxZQUFhLElBQ0UsQ0FBRWk5QixPQUM5QixDQUVBLEdBQ0V4OUIsRUFBS3hFLFdBQVdSLEtBQ1csU0FBMUJnRixFQUFLeEUsV0FBV1ksT0FBOEMsWUFBMUI0RCxFQUFLeEUsV0FBV1ksT0FDckQsQ0FDQSxNQUFNa0QsRUFBV205QixHQUFZejhCLEVBQUt4RSxZQUM1Qmk4QixFQUFPejNCLEVBQUt4RSxXQUFXODRCLFVBQVVtSixLQUFLQyxNQUN0Q3RtQixFQUFXbW1CLEdBQVl2OUIsRUFBS3hFLFdBQVc4NEIsU0FBVWtKLEVBQUs5akMsR0FDNUQsTUFBTyxDQUNMa2tDLEVBQ0F2K0IsR0FBWXBELEVBQU1xRCxHQUNsQnZDLEVBQ0F1QyxFQUNBbTRCLEVBQ0FyZ0IsRUFFSixDQUNBLEdBQzRCLGtCQUExQnBYLEVBQUt4RSxXQUFXWSxPQUNVLHFCQUExQjRELEVBQUt4RSxXQUFXWSxNQUNoQixDQUNBLE1BQU1ZLFFBQUVBLEVBQU9pUCxLQUFFQSxHQUFTak0sRUFBS3hFLFdBRy9CLE1BQU8sQ0FBQ29pQyxFQUZRNWdDLEVBQVVxQyxHQUFZckMsRUFBUTlCLE1BQU0sS0FBSyxHQUFJK1EsR0FBUWhRLEVBRXBDYyxFQUFPa1AsT0FBTXRQLEVBRDdCNGdDLEdBQVl2OUIsRUFBS3hFLFdBQVc4NEIsU0FBVWtKLEdBRXpELENBQ0EsTUFBTyxDQUFDSSxFQUFnQjNoQyxFQUFNYyxFQUNoQyxDQUNBLE1BQU1uQixPQUFFQSxFQUFNRSxZQUFFQSxHQUFnQmtFLEVBQUt4RSxXQUMvQnFpQyxFQUFRamlDLEVBQU9raUMsU0FBVyxLQUFLbGlDLEVBQU9raUMsa0JBQW9CLEdBQzFEQyxFQUFRamlDLEVBQVlnaUMsU0FBVyxLQUFLaGlDLEVBQVlnaUMsV0FBYSxHQUM3REUsRUFBUXBpQyxFQUFPSyxLQUNmZ2lDLEVBQVFuaUMsRUFBWUcsS0FDMUIsTUFBTyxDQUNMdkMsRUFBRSxlQUFnQixDQUFFOGpDLFFBQ3BCLEdBQUc5akMsRUFBRSxTQUFVLENBQUU4akMsV0FBVVEsSUFBUUgsS0FBU25rQyxFQUFFLGNBQWUsQ0FDM0Q4akMsV0FDSVMsSUFBUUYsSUFDZC85QixFQUFLaytCLGVBRVQsQ0FFTyxTQUFTQyxHQUFtQ24rQixFQUFNdzlCLEVBQUs5akMsR0FFNUQsSUFBS0EsRUFDSCxPQUVGLE1BQU0wa0MsRUFBT0MsRUFBQUEsU0FBU0MsWUFBWXBrQyxPQUFPOEYsRUFBS3hFLFdBQVc0aUMsT0FDbkRwakIsRUFBTXFqQixFQUFBQSxTQUFTcmpCLE1BQ3JCLElBQUk5ZCxFQUFNOEMsRUFBS3hFLFdBQVcraUMsU0FDdEI3a0MsRUFBRSxVQUFXLENBQUU4akMsUUFDZjlqQyxFQUFFLFlBQWEsQ0FBRThqQyxRQVNyQixPQVBFdGdDLEVBREVraEMsRUFBS0ksUUFBUXhqQixFQUFLLE9BQ2QsR0FBRzlkLEtBQU94RCxFQUFFLGNBQ1Qwa0MsRUFBS0ksUUFBUXhqQixFQUFJeWpCLEtBQUssQ0FBRUMsS0FBTSxJQUFNLE9BQ3ZDLEdBQUd4aEMsS0FBT3hELEVBQUUsY0FBZSxDQUFFOGpDLFVBRTdCLEdBQUd0Z0MsS0FBT2toQyxFQUFLTyxTQUFTLGNBRWhDemhDLEVBQU0sR0FBR0EsS0FBT2toQyxFQUFLTyxTQUFTLFdBQ3ZCemhDLENBQ1QsQ0FFTyxNQUFNMGhDLEdBQXFCcEMsR0FFViwyQkFBcEJBLEVBQVc5Z0MsTUFDUyxTQUFwQjhnQyxFQUFXOWdDLEtBRUosR0NySkksU0FBa0JGLEdBQy9CLE1BQU1QLEVBQVF5aEMsR0FBYWxoQyxHQUFZLEdBQ3ZDLE9BQVFBLEVBQVdZLE9BQ2pCLElBQUssZ0JBQ0wsSUFBSyxrQkFDTCxJQUFLLGVBQ0wsSUFBSyxPQUNILE9BQU9uQixFQUFNLElBQU1BLEVBQU0sR0FDM0IsSUFBSyxnQ0FDTCxJQUFLLGlCQUNILE9BQU9BLEVBQU0sR0FDZixRQUNFLE9BQU9BLEVBQU1FLE9BQVMsR0FBa0IsS0FBYkYsRUFBTSxHQUM3QkEsRUFBTW9GLEtBQUssTUFDWHBGLEVBQU0sSUFBTUEsRUFBTSxHQUU1QixDRHVJUzRqQyxDQUFTckMsRUFBV2hoQyxZQUdoQnNqQyxHQUEwQkEsRUFBR0MsY0FBYXJsQyxJQUFHOGpDLFVBQ3hELElBQUl6Z0MsRUFBUSxHQUNaLE1BQU1paUMsRUFBa0JELEVBQVksR0FPcEMsT0FOSUMsSUFDRUEsRUFBZ0J0akMsTUFBUXNqQyxFQUFnQnRqQyxLQUFLUyxTQUFTLGNBQ3hEWSxFQUFNeUksS0FBSzlMLEVBQUUsWUFBYSxDQUFFOGpDLFNBRTlCemdDLEVBQVFBLEVBQU11RCxPQUFPcTlCLEdBQXFCb0IsRUFBWSxHQUFJdkIsS0FFckQsSUFBSSxJQUFJdHRCLElBQUluVCxJQUFRc0QsS0FBSzs0RkUxSzBTLElBQVd4RyxFQUE3QyxvQkFBb0J3SSxNQUFLQSxLQUEvUDQ4QixFQUFBQyxTQUFtUnJsQyxFQUFsUXNsQyxVQUE0USxXQUFXLElBQUl6bEMsRUFBRSxDQUFDLElBQUksU0FBU0csRUFBRUgsRUFBRTBsQyxHQUFHLElBQUlobUMsRUFBRVEsRUFBRUEsT0FBRSxJQUFTd2xDLEVBQUVDLEVBQUVELEVBQUVDLEVBQUUsb0JBQW9CLzhCLE9BQU9BLE9BQU84RSxLQUFLaE8sRUFBRSxXQUFXLE9BQU8sU0FBU1MsR0FBZ0IsSUFBSUgsRUFBRSxDQUFDNGxDLE9BQU8sdUJBQXVCL3lCLE9BQU8sS0FBS2d6QixnQkFBZSxFQUFHQyxNQUFNLElBQUlDLGlCQUFnQixFQUFHQyxZQUFZLEtBQUtDLFlBQVksS0FBS0MsTUFBSyxFQUFHQyxPQUFPLEVBQUVDLE9BQU8saUJBQWlCQyxhQUFhLEtBQUtDLFdBQVUsRUFBR0MsVUFBUyxFQUFHQyxZQUFXLEdBQUlkLEVBQUUsV0FBVyxJQUFJdmxDLEVBQUUsQ0FBQSxFQUFHLE9BQU9vRSxNQUFNekUsVUFBVXlHLFFBQVFsRyxLQUFLNkcsVUFBUyxTQUFXbEgsR0FBRyxJQUFJLElBQUkwbEMsS0FBSzFsQyxFQUFFLENBQUMsSUFBSUEsRUFBRXFLLGVBQWVxN0IsR0FBRyxPQUFPdmxDLEVBQUV1bEMsR0FBRzFsQyxFQUFFMGxDLEVBQUUsQ0FBRSxHQUFHdmxDLENBQUMsRUFBRVQsRUFBRSxTQUFTUyxHQUFHLE1BQU1BLEVBQUVzbUMsT0FBTyxLQUFLdG1DLEVBQUVBLEVBQUV1bUMsT0FBTyxJQUFJLElBQUksSUFBSTFtQyxFQUFFMGxDLEVBQUVubEMsT0FBT0osR0FBR1QsRUFBRWdtQyxFQUFFamtDLE9BQU92QixHQUFFLEVBQUd5bUMsRUFBRSxHQUFHMW1DLEVBQUV5bEMsRUFBRWwzQixXQUFXLEtBQUt0TyxFQUFFUixHQUFHLENBQUMsR0FBRyxLQUFLTSxFQUFFMGxDLEVBQUVsM0IsV0FBV3RPLElBQUksTUFBTSxJQUFJMG1DLHNCQUFzQixpREFBaURELEdBQUczbUMsR0FBRyxHQUFHQSxHQUFHLElBQUksS0FBS0EsR0FBRyxJQUFJRSxHQUFHRixHQUFHLElBQUlBLEdBQUcsSUFBSSxJQUFJRSxHQUFHRixHQUFHLElBQUlBLEdBQUcsSUFBSSxLQUFLQyxFQUFFLEtBQUtELEVBQUVtSCxTQUFTLElBQUksSUFBSW5ILEdBQUcsS0FBSyxLQUFLQSxHQUFHLEtBQUtBLEdBQUdBLEdBQUcsSUFBSUEsR0FBRyxJQUFJQSxHQUFHLElBQUlBLEdBQUcsSUFBSUEsR0FBRyxJQUFJQSxHQUFHLElBQUkwbEMsRUFBRWUsT0FBT3ZtQyxHQUFHLEtBQUt3bEMsRUFBRWUsT0FBT3ZtQyxFQUFFLENBQUMsTUFBTSxJQUFJeW1DLENBQUMsRUFBRXptQyxFQUFFLFdBQVcsT0FBT2lELEtBQUt1ZixJQUFJMUYsU0FBUzRQLEtBQUtpYSxhQUFhN3BCLFNBQVM4cEIsZ0JBQWdCRCxhQUFhN3BCLFNBQVM0UCxLQUFLbWEsYUFBYS9wQixTQUFTOHBCLGdCQUFnQkMsYUFBYS9wQixTQUFTNFAsS0FBS29hLGFBQWFocUIsU0FBUzhwQixnQkFBZ0JFLGFBQWEsRUFBRUwsRUFBRSxTQUFTM21DLEdBQUcsT0FBT0EsR0FBRzBsQyxFQUFFMWxDLEVBQUVnbkIsU0FBUzdtQixFQUFFOG1DLGlCQUFpQnZCLEdBQUd3QixPQUFPLElBQUlsbkMsRUFBRW1uQyxXQUFXLEVBQUUsSUFBSXpCLENBQUMsRUFBRXpsQyxFQUFFLFNBQVNELEVBQUUwbEMsRUFBRWhtQyxHQUFHLElBQUlNLEdBQUdnZCxTQUFTNFAsS0FBS3dhLFFBQVExbkMsSUFBSU0sRUFBRW9uQyxRQUFRcHFCLFNBQVNxcUIsZ0JBQWdCcm5DLElBQUlBLEVBQUVzbkMsYUFBYSxXQUFXLE1BQU10bkMsRUFBRW9uQyxRQUFRcG5DLEVBQUVvaUMsTUFBTW1GLFFBQVEsUUFBUXBuQyxFQUFFcW5DLFNBQVMsRUFBRTlCLEdBQUcsRUFBRTlVLEVBQUUsU0FBUzV3QixFQUFFMGxDLEVBQUVobUMsRUFBRVEsR0FBRyxHQUFHd2xDLEVBQUVjLFlBQVksbUJBQW1Ccm1DLEVBQUVzbkMsWUFBWSxDQUFDLElBQUlkLEVBQUUsSUFBSWMsWUFBWXpuQyxFQUFFLENBQUMwbkMsU0FBUSxFQUFHQyxPQUFPLENBQUNDLE9BQU9sb0MsRUFBRW1vQyxPQUFPM25DLEtBQUs4YyxTQUFTOHFCLGNBQWNuQixFQUFFLENBQUMsRUFBRSxPQUFPLFNBQVNoWSxFQUFFeGdCLEdBQUcsSUFBSTVFLEVBQUV3K0IsRUFBRUMsRUFBRXJ4QixFQUFFd2lCLEVBQUUsQ0FBQzhPLGFBQWEsU0FBUzluQyxHQUFHK25DLHFCQUFxQnZ4QixHQUFHQSxFQUFFLEtBQUt4VyxHQUFHeXdCLEVBQUUsZUFBZXJuQixFQUFFLEVBQUU0K0IsY0FBYyxTQUFTem9DLEVBQUVpdkIsRUFBRXhnQixHQUFHZ3JCLEVBQUU4TyxlQUFlLElBQUlGLEVBQUVyQyxFQUFFbjhCLEdBQUd2SixFQUFFbU8sR0FBRyxDQUFBLEdBQUlnTyxFQUFFLG9CQUFvQnpiLE9BQU9aLFVBQVVxSCxTQUFTOUcsS0FBS1gsR0FBR2dSLEVBQUV5TCxJQUFJemMsRUFBRTBvQyxRQUFRLEtBQUsxb0MsRUFBRSxHQUFHeWMsR0FBR3pMLEVBQUUsQ0FBQyxJQUFJMjNCLEVBQUVsb0MsRUFBRW1vQyxZQUFZUCxFQUFFbDFCLFNBQVNtMUIsSUFBSUEsRUFBRWhyQixTQUFTdXJCLGNBQWNSLEVBQUVsMUIsU0FBUyxJQUFJekUsRUFBRXUzQixFQUFFN3dCLEVBQUUwekIsRUFBRTdCLEVBQUVxQixHQUFHUyxFQUFFdHNCLEVBQUV6YyxFQUFFLFNBQVNNLEVBQUUwbEMsRUFBRWhtQyxFQUFFaW5DLEdBQUcsSUFBSTFtQyxFQUFFLEVBQUUsR0FBR0QsRUFBRTBvQyxhQUFhLEdBQUd6b0MsR0FBR0QsRUFBRW1uQyxVQUFVbm5DLEVBQUVBLEVBQUUwb0MsbUJBQW1CMW9DLEdBQUcsT0FBT0MsRUFBRWtELEtBQUt1ZixJQUFJemlCLEVBQUV5bEMsRUFBRWhtQyxFQUFFLEdBQUdpbkMsSUFBSTFtQyxFQUFFa0QsS0FBSzRkLElBQUk5Z0IsRUFBRUMsSUFBSUMsRUFBRXdvQyxjQUFjMW9DLENBQUMsQ0FBekosQ0FBMkp5USxFQUFFODNCLEVBQUV4aEIsU0FBUyxtQkFBbUIrZ0IsRUFBRTVCLE9BQU80QixFQUFFNUIsT0FBT3ptQyxFQUFFaXZCLEdBQUdvWixFQUFFNUIsT0FBTyxJQUFJNEIsRUFBRTdCLE1BQU0wQyxFQUFFSCxFQUFFSixFQUFFeGhCLEVBQUUzbUIsSUFBSTJvQyxFQUFFLEVBQUVDLEVBQUUsU0FBUzNvQyxFQUFFSCxHQUFHLElBQUkwbEMsRUFBRTFsQyxFQUFFK2xDLGdCQUFnQi9sQyxFQUFFOGxDLE1BQU0zaUMsS0FBS0MsSUFBSWpELEVBQUUsSUFBSUgsRUFBRThsQyxPQUFPLE9BQU85bEMsRUFBRWdtQyxhQUFhTixFQUFFMWxDLEVBQUVnbUMsWUFBWWhtQyxFQUFFZ21DLFlBQVlobUMsRUFBRWltQyxhQUFhUCxFQUFFMWxDLEVBQUVpbUMsWUFBWWptQyxFQUFFaW1DLFlBQVlqZixTQUFTMGUsRUFBRSxHQUFHLENBQXJMLENBQXVMa0QsRUFBRWIsR0FBR2dCLEVBQUUsU0FBUy9vQyxHQUFHb08sSUFBSUEsRUFBRXBPLEdBQUc2b0MsR0FBRzdvQyxFQUFFb08sRUFBRTBHLEVBQUV1ekIsRUFBRU8sRUFBRSxTQUFTem9DLEVBQUVILEdBQUcsSUFBSTBsQyxFQUFFLE1BQU0sZUFBZXZsQyxFQUFFaW1DLFNBQVNWLEVBQUUxbEMsRUFBRUEsR0FBRyxnQkFBZ0JHLEVBQUVpbUMsU0FBU1YsRUFBRTFsQyxHQUFHLEVBQUVBLElBQUksa0JBQWtCRyxFQUFFaW1DLFNBQVNWLEVBQUUxbEMsRUFBRSxHQUFHLEVBQUVBLEVBQUVBLEdBQUcsRUFBRSxFQUFFQSxHQUFHQSxFQUFFLEdBQUcsZ0JBQWdCRyxFQUFFaW1DLFNBQVNWLEVBQUUxbEMsRUFBRUEsRUFBRUEsR0FBRyxpQkFBaUJHLEVBQUVpbUMsU0FBU1YsSUFBSTFsQyxFQUFFQSxFQUFFQSxFQUFFLEdBQUcsbUJBQW1CRyxFQUFFaW1DLFNBQVNWLEVBQUUxbEMsRUFBRSxHQUFHLEVBQUVBLEVBQUVBLEVBQUVBLEdBQUdBLEVBQUUsSUFBSSxFQUFFQSxFQUFFLElBQUksRUFBRUEsRUFBRSxHQUFHLEdBQUcsZ0JBQWdCRyxFQUFFaW1DLFNBQVNWLEVBQUUxbEMsRUFBRUEsRUFBRUEsRUFBRUEsR0FBRyxpQkFBaUJHLEVBQUVpbUMsU0FBU1YsRUFBRSxLQUFLMWxDLEVBQUVBLEVBQUVBLEVBQUVBLEdBQUcsbUJBQW1CRyxFQUFFaW1DLFNBQVNWLEVBQUUxbEMsRUFBRSxHQUFHLEVBQUVBLEVBQUVBLEVBQUVBLEVBQUVBLEVBQUUsRUFBRSxJQUFJQSxFQUFFQSxFQUFFQSxFQUFFQSxHQUFHLGdCQUFnQkcsRUFBRWltQyxTQUFTVixFQUFFMWxDLEVBQUVBLEVBQUVBLEVBQUVBLEVBQUVBLEdBQUcsaUJBQWlCRyxFQUFFaW1DLFNBQVNWLEVBQUUsSUFBSTFsQyxFQUFFQSxFQUFFQSxFQUFFQSxFQUFFQSxHQUFHLG1CQUFtQkcsRUFBRWltQyxTQUFTVixFQUFFMWxDLEVBQUUsR0FBRyxHQUFHQSxFQUFFQSxFQUFFQSxFQUFFQSxFQUFFQSxFQUFFLEVBQUUsS0FBS0EsRUFBRUEsRUFBRUEsRUFBRUEsRUFBRUEsR0FBR0csRUFBRWttQyxlQUFlWCxFQUFFdmxDLEVBQUVrbUMsYUFBYXJtQyxJQUFJMGxDLEdBQUcxbEMsQ0FBQyxDQUE5bkIsQ0FBZ29CK25DLEVBQUVwQyxHQUFHQSxFQUFFLElBQUltRCxFQUFFLEVBQUVELEVBQUVDLEdBQUcsRUFBRSxFQUFFbkQsR0FBR3hsQyxFQUFFcW5DLFNBQVMsRUFBRXJrQyxLQUFLdXJCLE1BQU01WixJQUFJLFNBQVM5VSxFQUFFMGxDLEdBQUcsSUFBSXhsQyxFQUFFQyxFQUFFbW9DLFlBQVksR0FBR3RvQyxHQUFHMGxDLEdBQUd4bEMsR0FBR3dsQyxJQUFJMkMsRUFBRTNDLEdBQUd2bEMsRUFBRXdvQyxZQUFZem9DLElBQUkybUIsRUFBRSxPQUFPc1MsRUFBRThPLGNBQWEsR0FBSWhvQyxFQUFFUCxFQUFFZ21DLEVBQUV2cEIsR0FBR3lVLEVBQUUsYUFBYW1YLEVBQUVyb0MsRUFBRWl2QixHQUFHdmdCLEVBQUUsS0FBS3VJLEVBQUUsTUFBSyxDQUFFLENBQXBKLENBQXNKN0IsRUFBRTJ6QixLQUFLOXhCLEVBQUV4VyxFQUFFNm9DLHNCQUFzQkQsR0FBRzM2QixFQUFFcE8sRUFBRSxFQUFFLElBQUlHLEVBQUVtb0MsYUFBYW5vQyxFQUFFcW5DLFNBQVMsRUFBRSxHQUFHLFNBQVNybkMsRUFBRUgsRUFBRTBsQyxHQUFHMWxDLEdBQUc0K0IsUUFBUXFLLFdBQVd2RCxFQUFFWSxXQUFXMUgsUUFBUXFLLFVBQVUsQ0FBQ0MsYUFBYS91QixLQUFLQyxVQUFVc3JCLEdBQUdrQyxPQUFPem5DLEVBQUVtQixJQUFJMGIsU0FBU21zQixNQUFNaHBDLElBQUk2YyxTQUFTOHBCLGdCQUFnQixPQUFPLElBQUkzbUMsRUFBRW1CLEdBQUcsQ0FBOUssQ0FBZ0w1QixFQUFFeWMsRUFBRTRyQixHQUFHLGVBQWU1bkMsR0FBR0EsRUFBRWlwQyxXQUFXLDRCQUE0QnI1QixRQUFROVAsRUFBRVAsRUFBRXlELEtBQUt1ckIsTUFBTStaLElBQUcsSUFBSzdYLEVBQUUsY0FBY21YLEVBQUVyb0MsRUFBRWl2QixHQUFHd0ssRUFBRThPLGNBQWEsR0FBSTluQyxFQUFFNm9DLHNCQUFzQkQsR0FBRyxDQUFDLEdBQUc1c0IsRUFBRSxTQUFTbmMsR0FBRyxJQUFJQSxFQUFFcXBDLG9CQUFvQixJQUFJcnBDLEVBQUVzcEMsUUFBUXRwQyxFQUFFdXBDLFNBQVN2cEMsRUFBRXdwQyxTQUFTeHBDLEVBQUV5cEMsV0FBVyxZQUFZenBDLEVBQUV1UixTQUFTdzJCLEVBQUUvbkMsRUFBRXVSLE9BQU9tNEIsUUFBUS9hLEtBQUssTUFBTW9aLEVBQUVLLFFBQVExa0MsZ0JBQWdCMUQsRUFBRXVSLE9BQU9tNEIsUUFBUW5nQyxFQUFFcThCLFNBQVNtQyxFQUFFNEIsV0FBV3hwQyxFQUFFcWQsU0FBU21zQixVQUFVNUIsRUFBRTZCLFdBQVd6cEMsRUFBRXFkLFNBQVNvc0IsVUFBVSxJQUFJL2xDLEtBQUtra0MsRUFBRXRxQixNQUFNLENBQUMsSUFBSWlvQixFQUFFeGxDLEVBQUUsSUFBSXdsQyxFQUFFaG1DLEVBQUV5a0IsbUJBQW1CNGpCLEVBQUU4QixNQUFNLENBQUMsTUFBTTFwQyxHQUFHdWxDLEVBQUVobUMsRUFBRXFvQyxFQUFFOEIsS0FBSyxDQUFDLEdBQUcsTUFBTW5FLEVBQUUsQ0FBQyxJQUFJbjhCLEVBQUVzOEIsZUFBZSxPQUFPM2xDLEVBQUU4YyxTQUFTOHBCLGVBQWUsTUFBTTVtQyxFQUFFOGMsU0FBU3VyQixjQUFjN0MsSUFBSXhsQyxFQUFFQSxHQUFHLFNBQVN3bEMsRUFBRXhsQyxFQUFFOGMsU0FBUzhwQixtQkFBbUI5bUMsRUFBRTJqQyxpQkFBaUIsU0FBUzNqQyxHQUFHLEdBQUc0K0IsUUFBUWtMLGNBQWM5cEMsRUFBRXNtQyxZQUFZMUgsUUFBUWpPLE1BQU0sQ0FBQyxJQUFJK1UsRUFBRXZsQyxFQUFFcWQsU0FBU3FzQixLQUFLbkUsRUFBRUEsR0FBRyxHQUFHOUcsUUFBUWtMLGFBQWEsQ0FBQ1osYUFBYS91QixLQUFLQyxVQUFVcGEsR0FBRzRuQyxPQUFPbEMsR0FBR3ZsQyxFQUFFbW9DLGFBQWF0ckIsU0FBU21zQixNQUFNekQsR0FBR3ZsQyxFQUFFcWQsU0FBU0MsS0FBSyxDQUFDLENBQWpOLENBQW1ObFUsR0FBRzR2QixFQUFFZ1AsY0FBY2pvQyxFQUFFNm5DLEdBQUcsQ0FBQyxFQUFFcjNCLEVBQUUsU0FBU3ZRLEdBQUcsR0FBRyxPQUFPeStCLFFBQVFqTyxPQUFPaU8sUUFBUWpPLE1BQU11WSxjQUFjdEssUUFBUWpPLE1BQU11WSxlQUFlL3VCLEtBQUtDLFVBQVU3USxHQUFHLENBQUMsSUFBSXZKLEVBQUU0K0IsUUFBUWpPLE1BQU1pWCxPQUFPLGlCQUFpQjVuQyxHQUFHQSxLQUFLQSxFQUFFZ2QsU0FBU3VyQixjQUFjN29DLEVBQUVrL0IsUUFBUWpPLE1BQU1pWCxXQUFXek8sRUFBRWdQLGNBQWNub0MsRUFBRSxLQUFLLENBQUNzbUMsV0FBVSxHQUFJLENBQUMsRUFBRSxPQUFPbk4sRUFBRTRRLFFBQVEsV0FBV3hnQyxJQUFJeVQsU0FBU21MLG9CQUFvQixRQUFRaE0sR0FBRSxHQUFJaGMsRUFBRWdvQixvQkFBb0IsV0FBV3pYLEdBQUUsR0FBSXlvQixFQUFFOE8sZUFBZTErQixFQUFFLEtBQUt3K0IsRUFBRSxLQUFLQyxFQUFFLEtBQUtyeEIsRUFBRSxLQUFLLEVBQUUsV0FBVyxLQUFLLGtCQUFrQnFHLFVBQVUscUJBQXFCN2MsR0FBRywwQkFBMEJBLEdBQUcsWUFBWUEsRUFBRTZwQyxRQUFRbHFDLFdBQVcsS0FBSyxpR0FBaUdxNUIsRUFBRTRRLFVBQVV4Z0MsRUFBRW04QixFQUFFMWxDLEVBQUVtTyxHQUFHLElBQUk2NUIsRUFBRXorQixFQUFFc0osT0FBT21LLFNBQVN1ckIsY0FBY2gvQixFQUFFc0osUUFBUSxLQUFLbUssU0FBU3RSLGlCQUFpQixRQUFReVEsR0FBRSxHQUFJNVMsRUFBRSs4QixXQUFXLzhCLEVBQUVnOUIsVUFBVXBtQyxFQUFFdUwsaUJBQWlCLFdBQVdnRixHQUFFLEVBQUcsQ0FBdFosR0FBMFp5b0IsQ0FBQyxDQUFDLENBQXhqSyxDQUEwaktqNUIsRUFBRSxFQUFFK0csTUFBTWpILEVBQUUsU0FBSSxJQUFTTixJQUFJUyxFQUFFcWxDLFFBQVE5bEMsRUFBRSxFQUFFLElBQUksU0FBU1MsRUFBRUgsRUFBRTBsQyxHQUFnQixJQUFJaG1DLEVBQUVnTyxNQUFNQSxLQUFLdThCLGtCQUFrQnZwQyxPQUFPOEcsT0FBTyxTQUFTckgsRUFBRUgsRUFBRTBsQyxFQUFFaG1DLFFBQUcsSUFBU0EsSUFBSUEsRUFBRWdtQyxHQUFHaGxDLE9BQU9DLGVBQWVSLEVBQUVULEVBQUUsQ0FBQ21CLFlBQVcsRUFBRzRGLElBQUksV0FBVyxPQUFPekcsRUFBRTBsQyxFQUFFLEdBQUcsRUFBRSxTQUFTdmxDLEVBQUVILEVBQUUwbEMsRUFBRWhtQyxRQUFHLElBQVNBLElBQUlBLEVBQUVnbUMsR0FBR3ZsQyxFQUFFVCxHQUFHTSxFQUFFMGxDLEVBQUUsR0FBR3hsQyxFQUFFd04sTUFBTUEsS0FBS3c4QixjQUFjLFNBQVMvcEMsRUFBRUgsR0FBRyxJQUFJLElBQUkwbEMsS0FBS3ZsQyxFQUFFLFlBQVl1bEMsR0FBR2hsQyxPQUFPWixVQUFVdUssZUFBZWhLLEtBQUtMLEVBQUUwbEMsSUFBSWhtQyxFQUFFTSxFQUFFRyxFQUFFdWxDLEVBQUUsRUFBRWhsQyxPQUFPQyxlQUFlWCxFQUFFLGFBQWEsQ0FBQ1ksT0FBTSxJQUFLVixFQUFFd2xDLEVBQUUsSUFBSTFsQyxHQUFHRSxFQUFFd2xDLEVBQUUsS0FBSzFsQyxHQUFHRSxFQUFFd2xDLEVBQUUsS0FBSzFsQyxHQUFHRSxFQUFFd2xDLEVBQUUsS0FBSzFsQyxHQUFHRSxFQUFFd2xDLEVBQUUsS0FBSzFsQyxHQUFHRSxFQUFFd2xDLEVBQUUsS0FBSzFsQyxHQUFHRSxFQUFFd2xDLEVBQUUsS0FBSzFsQyxHQUFHRSxFQUFFd2xDLEVBQUUsS0FBSzFsQyxHQUFHRSxFQUFFd2xDLEVBQUUsS0FBSzFsQyxHQUFHRSxFQUFFd2xDLEVBQUUsS0FBSzFsQyxHQUFHRSxFQUFFd2xDLEVBQUUsS0FBSzFsQyxHQUFHRSxFQUFFd2xDLEVBQUUsS0FBSzFsQyxHQUFHRSxFQUFFd2xDLEVBQUUsS0FBSzFsQyxHQUFHRSxFQUFFd2xDLEVBQUUsS0FBSzFsQyxHQUFHRSxFQUFFd2xDLEVBQUUsS0FBSzFsQyxFQUFFLEVBQUUsSUFBSSxTQUFTRyxFQUFFSCxFQUFFMGxDLEdBQWdCaGxDLE9BQU9DLGVBQWVYLEVBQUUsYUFBYSxDQUFDWSxPQUFNLElBQUtaLEVBQUVtcUMsd0JBQW1CLEVBQU8sSUFBSXpxQyxFQUFFZ21DLEVBQUUsS0FBSzFsQyxFQUFFbXFDLG1CQUFtQixTQUFTaHFDLEdBQUcsSUFBSUgsRUFBRUcsRUFBRWlxQyxVQUFVMUUsRUFBRXZsQyxFQUFFa3FDLGdCQUFnQm5xQyxHQUFFLEVBQUdSLEVBQUU0cUMsVUFBVSxHQUFHM0QsRUFBRXptQyxFQUFFLEdBQUdELEVBQUVDLEVBQUUsR0FBRzB3QixHQUFFLEVBQUdseEIsRUFBRTZxQyxzQkFBdUJwcUMsR0FBR0YsRUFBRUUsRUFBRyxFQUFFLENBQUNILElBQUkydUIsRUFBRSxTQUFTeHVCLEdBQUcsSUFBSVQsRUFBRVMsRUFBRXdKLElBQUksR0FBRyxNQUFNM0osT0FBRSxFQUFPQSxFQUFFeUIsT0FBTyxHQUFHLFlBQVkvQixFQUFFZ21DLEdBQUdBLElBQUl2bEMsRUFBRXdqQyxpQkFBaUIvUyxFQUFFK1YsRUFBRSxFQUFFQSxFQUFFLEVBQUUzbUMsRUFBRXlCLE9BQU8sT0FBTyxDQUFDLEdBQUcsY0FBYy9CLEVBQUUsT0FBT2dtQyxHQUFHQSxJQUFJdmxDLEVBQUV3akMsaUJBQWlCZ0QsRUFBRTNtQyxFQUFFeUIsT0FBTyxFQUFFbXZCLEVBQUUrVixFQUFFLEdBQUcvVixFQUFFLEVBQUUsQ0FBQyxFQUFFLE9BQU0sRUFBR2x4QixFQUFFOHFDLFdBQVMsV0FBYyxPQUFPNWhDLE9BQU84QyxpQkFBaUIsVUFBVWlqQixHQUFHLFdBQVcsT0FBTy9sQixPQUFPdWYsb0JBQW9CLFVBQVV3RyxFQUFFLENBQUUsSUFBRyxFQUFHanZCLEVBQUU4cUMsV0FBUyxXQUFjNVosRUFBRSxFQUFHLEVBQUUsQ0FBQzV3QixJQUFJLENBQUN5cUMsY0FBYzlELEVBQUUsQ0FBQyxFQUFFLElBQUksU0FBU3htQyxFQUFFSCxFQUFFMGxDLEdBQWdCaGxDLE9BQU9DLGVBQWVYLEVBQUUsYUFBYSxDQUFDWSxPQUFNLElBQUtaLEVBQUUwcUMsaUJBQVksRUFBTyxJQUFJaHJDLEVBQUVnbUMsRUFBRSxLQUFLMWxDLEVBQUUwcUMsWUFBWSxTQUFTdnFDLEVBQUVILFFBQUcsSUFBU0EsSUFBSUEsRUFBRSxLQUFLLElBQUkwbEMsR0FBRSxFQUFHaG1DLEVBQUU0cUMsVUFBVW5xQyxHQUFHRCxFQUFFd2xDLEVBQUUsR0FBR2lCLEVBQUVqQixFQUFFLEdBQUcsT0FBTSxFQUFHaG1DLEVBQUU4cUMsV0FBUyxXQUFjLElBQUk5RSxFQUFFMzVCLFdBQVUsV0FBYTQ2QixFQUFFeG1DLEVBQUcsRUFBRUgsR0FBRyxPQUFPLFdBQVdtaUIsYUFBYXVqQixFQUFFLENBQUUsRUFBRSxDQUFDdmxDLEVBQUVILElBQUlFLENBQUMsQ0FBQyxFQUFFLElBQUksU0FBU0MsRUFBRUgsRUFBRTBsQyxHQUFnQmhsQyxPQUFPQyxlQUFlWCxFQUFFLGFBQWEsQ0FBQ1ksT0FBTSxJQUFLWixFQUFFMnFDLG9CQUFlLEVBQU8sSUFBSWpyQyxFQUFFZ21DLEVBQUUsS0FBSzFsQyxFQUFFMnFDLGVBQWUsV0FBVyxJQUFJeHFDLEVBQUVILEVBQUUwbEMsR0FBRSxFQUFHaG1DLEVBQUVrckMsUUFBUSxNQUFNLE1BQU0sQ0FBQ2xGLEVBQUUsQ0FBQ21GLE1BQU0sUUFBUTFxQyxFQUFFLE1BQU11bEMsT0FBRSxFQUFPQSxFQUFFamdDLG1CQUFtQnRGLE9BQUUsRUFBT0EsRUFBRTJxQyxZQUFZNUQsT0FBTyxRQUFRbG5DLEVBQUUsTUFBTTBsQyxPQUFFLEVBQU9BLEVBQUVqZ0MsZUFBVSxJQUFTekYsT0FBRSxFQUFPQSxFQUFFZ25DLGNBQWMsRUFBRWhuQyxFQUFFaTVCLFFBQVFqNUIsRUFBRTJxQyxjQUFjLEVBQUUsSUFBSSxTQUFTeHFDLEVBQUVILEVBQUUwbEMsR0FBZ0JobEMsT0FBT0MsZUFBZVgsRUFBRSxhQUFhLENBQUNZLE9BQU0sSUFBS1osRUFBRStxQyw2QkFBd0IsRUFBTyxJQUFJcnJDLEVBQUVnbUMsRUFBRSxLQUFLMWxDLEVBQUUrcUMsd0JBQXdCLFNBQVM1cUMsR0FBRyxJQUFJSCxHQUFFLEVBQUdOLEVBQUVrckMsUUFBUSxNQUFNbEYsR0FBRSxFQUFHaG1DLEVBQUU0cUMsV0FBVSxHQUFJcHFDLEVBQUV3bEMsRUFBRSxHQUFHaUIsRUFBRWpCLEVBQUUsR0FBR3psQyxFQUFFLFNBQVNFLEdBQUcsSUFBSUgsRUFBRUcsRUFBRSxHQUFHd21DLEVBQUUzbUMsRUFBRWdyQyxlQUFlLEVBQUUsT0FBTSxFQUFHdHJDLEVBQUU4cUMsV0FBUyxXQUFjLEdBQUc1aEMsUUFBUUEsT0FBT3FpQyxxQkFBcUIsQ0FBQyxJQUFJdkYsRUFBRSxJQUFJdUYscUJBQXFCaHJDLEVBQUVFLEdBQUdULEVBQUVNLEVBQUV5RixRQUFRLE9BQU96RixFQUFFeUYsU0FBU2lnQyxFQUFFd0YsUUFBUWxyQyxFQUFFeUYsU0FBUyxXQUFXL0YsR0FBR2dtQyxFQUFFeUYsVUFBVXpyQyxFQUFFLENBQUMsQ0FBQ2luQyxHQUFFLEVBQUksRUFBRSxDQUFDM21DLEVBQUVHLElBQUksQ0FBQ2lyQyxhQUFhcHJDLEVBQUVxckMsVUFBVW5yQyxFQUFFLEVBQUVGLEVBQUVpNUIsUUFBUWo1QixFQUFFK3FDLHVCQUF1QixFQUFFLElBQUksU0FBUzVxQyxFQUFFSCxFQUFFMGxDLEdBQWdCaGxDLE9BQU9DLGVBQWVYLEVBQUUsYUFBYSxDQUFDWSxPQUFNLElBQUtaLEVBQUVzckMscUJBQWdCLEVBQU8sSUFBSTVyQyxFQUFFZ21DLEVBQUUsS0FBS3hsQyxFQUFFd2xDLEVBQUUsS0FBS2lCLEVBQUUsQ0FBQzRFLEdBQUcsRUFBRUMsWUFBWSxJQUFJQyxPQUFPLElBQUlDLE9BQU8sSUFBSUMsWUFBWSxJQUFJQyxhQUFhLEtBQUtDLFFBQVEsS0FBS0MsYUFBYSxNQUFNOXJDLEVBQUVzckMsZ0JBQWdCLFNBQVNuckMsR0FBRyxJQUFJSCxFQUFFLGlCQUFpQkcsRUFBRXdtQyxFQUFFeG1DLEdBQUdBLEVBQUV1bEMsR0FBRSxFQUFHaG1DLEVBQUU0cUMsVUFBVSxNQUFNcnFDLEVBQUV5bEMsRUFBRSxHQUFHOVUsRUFBRThVLEVBQUUsR0FBRy9XLEdBQUUsRUFBR2p2QixFQUFFNnFDLGFBQVcsV0FBYzNaLEVBQUVob0IsT0FBT21qQyxXQUFZLEVBQUUsSUFBSSxPQUFNLEVBQUdyc0MsRUFBRThxQyxXQUFTLFdBQWM3YixHQUFJLEVBQUUsS0FBSSxFQUFHenVCLEVBQUU4ckMsYUFBYXJkLEdBQUcxdUIsR0FBR0QsQ0FBQyxFQUFFQSxFQUFFaTVCLFFBQVFqNUIsRUFBRXNyQyxlQUFlLEVBQUUsSUFBSSxTQUFTbnJDLEVBQUVILEVBQUUwbEMsR0FBZ0JobEMsT0FBT0MsZUFBZVgsRUFBRSxhQUFhLENBQUNZLE9BQU0sSUFBS1osRUFBRWlzQyw0QkFBdUIsRUFBTyxJQUFJdnNDLEVBQUVnbUMsRUFBRSxLQUFLMWxDLEVBQUVpc0MsdUJBQXVCLFNBQVM5ckMsRUFBRUgsR0FBRyxJQUFJMGxDLEdBQUUsRUFBR2htQyxFQUFFNHFDLFVBQVV0cUMsR0FBR0UsRUFBRXdsQyxFQUFFLEdBQUdpQixFQUFFakIsRUFBRSxHQUFHLE9BQU0sRUFBR2htQyxFQUFFOHFDLFdBQVMsV0FBY3JxQyxHQUFHd21DLEVBQUUzbUMsRUFBRyxFQUFFLENBQUNHLEVBQUVILElBQUlHLEdBQUdELENBQUMsQ0FBQyxFQUFFLElBQUksU0FBU0MsRUFBRUgsRUFBRTBsQyxHQUFnQmhsQyxPQUFPQyxlQUFlWCxFQUFFLGFBQWEsQ0FBQ1ksT0FBTSxJQUFLWixFQUFFa3NDLGlCQUFZLEVBQU8sSUFBSXhzQyxFQUFFZ21DLEVBQUUsS0FBSzFsQyxFQUFFa3NDLFlBQVksV0FBVyxRQUFPLEVBQUd4c0MsRUFBRTRyQyxpQkFBaUIsU0FBUyxFQUFFdHJDLEVBQUVpNUIsUUFBUWo1QixFQUFFa3NDLFdBQVcsRUFBRSxJQUFJLFNBQVMvckMsRUFBRUgsRUFBRTBsQyxHQUFnQmhsQyxPQUFPQyxlQUFlWCxFQUFFLGFBQWEsQ0FBQ1ksT0FBTSxJQUFLWixFQUFFbXNDLGlDQUFpQyxJQUFJenNDLEVBQUVnbUMsRUFBRSxLQUFLMWxDLEVBQUVtc0MsMEJBQTBCLG9CQUFvQnZqQyxPQUFPbEosRUFBRTBzQyxnQkFBZ0Ixc0MsRUFBRThxQyxVQUFVeHFDLEVBQUVpNUIsUUFBUWo1QixFQUFFbXNDLHlCQUF5QixFQUFFLElBQUksU0FBU2hzQyxFQUFFSCxFQUFFMGxDLEdBQWdCaGxDLE9BQU9DLGVBQWVYLEVBQUUsYUFBYSxDQUFDWSxPQUFNLElBQUtaLEVBQUVxc0MsMEJBQXFCLEVBQU8sSUFBSTNzQyxFQUFFZ21DLEVBQUUsS0FBSzFsQyxFQUFFcXNDLHFCQUFxQixTQUFTbHNDLEdBQUcsSUFBSUgsRUFBRUcsRUFBRThoQyxJQUFJeUQsRUFBRXZsQyxFQUFFMjRCLFNBQVM1NEIsRUFBRUMsRUFBRW1zQyxPQUFNLEVBQUc1c0MsRUFBRThxQyxXQUFTLFdBQWMsSUFBSXJxQyxFQUFFLFdBQVcsSUFBSUEsRUFBRSxHQUFHRCxFQUFFLE9BQU8sUUFBUUMsRUFBRUgsRUFBRXlGLGVBQVUsSUFBU3RGLE9BQUUsRUFBT0EsRUFBRTRQLFFBQVEsdUJBQWtCLEVBQU8yMUIsR0FBRyxFQUFFLE9BQU8xb0IsU0FBU3RSLGlCQUFpQixRQUFRdkwsR0FBRyxXQUFXLE9BQU82YyxTQUFTbUwsb0JBQW9CLFFBQVFob0IsRUFBRSxDQUFFLEVBQUUsQ0FBQ3VsQyxFQUFFMWxDLEVBQUVFLEdBQUcsRUFBRUYsRUFBRWk1QixRQUFRajVCLEVBQUVxc0Msb0JBQW9CLEVBQUUsSUFBSSxTQUFTbHNDLEVBQUVILEVBQUUwbEMsR0FBZ0JobEMsT0FBT0MsZUFBZVgsRUFBRSxhQUFhLENBQUNZLE9BQU0sSUFBS1osRUFBRWdzQyxpQkFBWSxFQUFPLElBQUl0c0MsRUFBRWdtQyxFQUFFLEtBQUsxbEMsRUFBRWdzQyxZQUFZLFNBQVM3ckMsSUFBRyxFQUFHVCxFQUFFOHFDLHNCQUF1QixJQUFJeHFDLEVBQUUsV0FBV0csRUFBRXlJLE9BQU9takMsV0FBVyxFQUFFLE9BQU9uakMsT0FBTzhDLGlCQUFpQixTQUFTMUwsRUFBRSxDQUFDdXNDLFNBQVEsSUFBSyxXQUFXLE9BQU8zakMsT0FBT3VmLG9CQUFvQixTQUFTbm9CLEVBQUUsQ0FBRSxFQUFFLEdBQUcsRUFBRUEsRUFBRWk1QixRQUFRajVCLEVBQUVnc0MsV0FBVyxFQUFFLElBQUksU0FBUzdyQyxFQUFFSCxFQUFFMGxDLEdBQWdCaGxDLE9BQU9DLGVBQWVYLEVBQUUsYUFBYSxDQUFDWSxPQUFNLElBQUtaLEVBQUV3c0Msc0JBQWlCLEVBQU8sSUFBSTlzQyxFQUFFZ21DLEVBQUUsS0FBSzFsQyxFQUFFd3NDLGlCQUFpQixTQUFTcnNDLElBQUcsRUFBR1QsRUFBRThxQyxXQUFTLFdBQWMsSUFBSXhxQyxFQUFFLFdBQVdHLEdBQUcsWUFBWTZjLFNBQVN5dkIsaUJBQWlCdHNDLEdBQUcsRUFBRSxPQUFPeUksT0FBTzhDLGlCQUFpQixtQkFBbUIxTCxHQUFFLEdBQUksV0FBVyxPQUFPNEksT0FBT3VmLG9CQUFvQixtQkFBbUJub0IsRUFBRSxDQUFFLEVBQUUsQ0FBQ0csR0FBRyxDQUFDLEVBQUUsR0FBRyxTQUFTQSxFQUFFSCxFQUFFMGxDLEdBQWdCaGxDLE9BQU9DLGVBQWVYLEVBQUUsYUFBYSxDQUFDWSxPQUFNLElBQUtaLEVBQUUwc0MsdUJBQWtCLEVBQU8sSUFBSWh0QyxFQUFFZ21DLEVBQUUsS0FBSzFsQyxFQUFFMHNDLGtCQUFrQixTQUFTdnNDLEVBQUVILEdBQUcsU0FBUzBsQyxFQUFFQSxHQUFHdmxDLEVBQUVzRixVQUFVdEYsRUFBRXNGLFFBQVFrbkMsU0FBU2pILEVBQUVuMEIsU0FBU3ZSLEdBQUcsRUFBQyxFQUFHTixFQUFFOHFDLFdBQVMsV0FBYyxPQUFPeHRCLFNBQVN0UixpQkFBaUIsWUFBWWc2QixHQUFHLFdBQVcxb0IsU0FBU21MLG9CQUFvQixZQUFZdWQsRUFBRSxDQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksU0FBU3ZsQyxFQUFFSCxFQUFFMGxDLEdBQWdCaGxDLE9BQU9DLGVBQWVYLEVBQUUsYUFBYSxDQUFDWSxPQUFNLElBQUtaLEVBQUU0c0MsdUJBQWtCLEVBQU8sSUFBSWx0QyxFQUFFZ21DLEVBQUUsS0FBSzFsQyxFQUFFNHNDLGtCQUFrQixXQUFXLElBQUl6c0MsR0FBRSxFQUFHVCxFQUFFa3JDLFFBQVEsTUFBTSxPQUFNLEVBQUdsckMsRUFBRThxQyxXQUFTLFdBQWNycUMsRUFBRXNGLFVBQVV0RixFQUFFc0YsVUFBVXRGLEVBQUVzRixRQUFRLEtBQU0sR0FBRyxTQUFTekYsR0FBR0csRUFBRXNGLFFBQVF6RixDQUFDLENBQUMsRUFBRUEsRUFBRWk1QixRQUFRajVCLEVBQUU0c0MsaUJBQWlCLEVBQUUsSUFBSSxTQUFTenNDLEVBQUVILEVBQUUwbEMsR0FBZ0JobEMsT0FBT0MsZUFBZVgsRUFBRSxhQUFhLENBQUNZLE9BQU0sSUFBS1osRUFBRTZzQyxtQkFBYyxFQUFPLElBQUludEMsRUFBRWdtQyxFQUFFLEtBQUsxbEMsRUFBRTZzQyxjQUFjLFdBQVcsTUFBTSxDQUFDQyxNQUFLLEVBQUdwdEMsRUFBRTZxQyxhQUFXLFdBQWMsSUFBSXBxQyxFQUFFeUksT0FBT21rQyxRQUFRLEtBQUsvc0MsRUFBRWdkLFNBQVM0UCxLQUFLNXNCLEVBQUVvaUMsTUFBTWh6QixTQUFTLFFBQVFwUCxFQUFFb2lDLE1BQU00SyxJQUFJLElBQUk3c0MsQ0FBRSxFQUFFLElBQUk4c0MsUUFBTyxFQUFHdnRDLEVBQUU2cUMsYUFBVyxXQUFjLElBQUlwcUMsRUFBRTZjLFNBQVM0UCxLQUFLNXNCLEVBQUVHLEVBQUVpaUMsTUFBTTRLLElBQUl0SCxHQUFFLEVBQUcxZSxTQUFTaG5CLEdBQUcsS0FBS0csRUFBRWlpQyxNQUFNaHpCLFNBQVMsR0FBR2pQLEVBQUVpaUMsTUFBTTRLLElBQUksR0FBR3RILEdBQUc5OEIsT0FBTzQrQixTQUFTLEdBQUUsRUFBR3hnQixTQUFTaG5CLEdBQUcsS0FBTSxFQUFFLElBQUksQ0FBQyxFQUFFLElBQUksU0FBU0csRUFBRUgsRUFBRTBsQyxHQUFnQixJQUFJaG1DLEVBQUVnTyxNQUFNQSxLQUFLdy9CLGlCQUFpQixTQUFTL3NDLEdBQUcsT0FBT0EsR0FBR0EsRUFBRWd0QyxXQUFXaHRDLEVBQUUsQ0FBQzg0QixRQUFROTRCLEVBQUUsRUFBRU8sT0FBT0MsZUFBZVgsRUFBRSxhQUFhLENBQUNZLE9BQU0sSUFBS1osRUFBRW90QyxxQkFBZ0IsRUFBTyxJQUFJbHRDLEVBQUV3bEMsRUFBRSxLQUFLaUIsRUFBRWpuQyxFQUFFZ21DLEVBQUUsTUFBTTFsQyxFQUFFb3RDLGdCQUFnQixTQUFTanRDLEdBQUcsSUFBSUgsR0FBRSxFQUFHRSxFQUFFMHFDLFFBQVEsTUFBTWxGLEVBQUV2bEMsRUFBRThoQyxJQUFJdmlDLEVBQUVTLEVBQUVnbUMsT0FBT2xtQyxPQUFFLElBQVNQLEVBQUUsRUFBRUEsRUFBRWt4QixFQUFFendCLEVBQUUybEMsTUFBTW5YLE9BQUUsSUFBU2lDLEVBQUUsSUFBSUEsRUFBRSxPQUFNLEVBQUcxd0IsRUFBRXNxQyxzQkFBdUJ4cUMsRUFBRXlGLFFBQVEsSUFBSWtoQyxFQUFFMU4sUUFBUSxLQUFLLENBQUM2TSxNQUFNblgsRUFBRW9YLGlCQUFnQixHQUFLLEVBQUUsS0FBSSxFQUFHN2xDLEVBQUVxcUMsYUFBVyxXQUFjN0UsR0FBRzFsQyxFQUFFeUYsU0FBU3pGLEVBQUV5RixRQUFRMGlDLGNBQWN6QyxFQUFFamdDLFFBQVEsS0FBSyxDQUFDMGdDLE9BQU8sV0FBVyxPQUFPbG1DLENBQUMsRUFBRXFtQyxXQUFVLEdBQUssRUFBRSxDQUFDcm1DLEVBQUV5bEMsR0FBRyxDQUFDLEVBQUUsSUFBSSxTQUFTMWxDLEdBQWdCQSxFQUFFd2xDLFFBQVFybEMsQ0FBQyxHQUFHdWxDLEVBQUUsQ0FBQSxFQUFHLFNBQVNobUMsRUFBRVMsR0FBRyxJQUFJRCxFQUFFd2xDLEVBQUV2bEMsR0FBRyxRQUFHLElBQVNELEVBQUUsT0FBT0EsRUFBRXNsQyxRQUFRLElBQUltQixFQUFFakIsRUFBRXZsQyxHQUFHLENBQUNxbEMsUUFBUSxJQUFJLE9BQU94bEMsRUFBRUcsR0FBR0UsS0FBS3NtQyxFQUFFbkIsUUFBUW1CLEVBQUVBLEVBQUVuQixRQUFROWxDLEdBQUdpbkMsRUFBRW5CLE9BQU8sQ0FBQyxPQUFPOWxDLEVBQUVpbUMsRUFBRSxXQUFXLEdBQUcsaUJBQWlCajlCLFdBQVcsT0FBT0EsV0FBVyxJQUFJLE9BQU9nRixNQUFNLElBQUkyL0IsU0FBUyxjQUFiLEVBQTZCLENBQUMsTUFBTWx0QyxHQUFHLEdBQUcsaUJBQWlCeUksT0FBTyxPQUFPQSxNQUFNLENBQUMsQ0FBN0osR0FBaUtsSixFQUFFLElBQUksQ0FBbmpZLGk3TUNBalcsU0FBUzR0QyxHQUF5Qm50QyxFQUFHSCxHQUNuQyxHQUFJLE1BQVFHLEVBQUcsTUFBTyxDQUFBLEVBQ3RCLElBQUlULEVBQ0ZRLEVBQ0FELEVDTEosU0FBdUNDLEVBQUdDLEdBQ3hDLEdBQUksTUFBUUQsRUFBRyxNQUFPLENBQUEsRUFDdEIsSUFBSUYsRUFBSSxDQUFBLEVBQ1IsSUFBSyxJQUFJMGxDLEtBQUt4bEMsRUFBRyxHQUFJLENBQUEsRUFBR21LLGVBQWVoSyxLQUFLSCxFQUFHd2xDLEdBQUksQ0FDakQsUUFBV3ZsQyxFQUFFK0QsUUFBUXdoQyxHQUFJLFNBQ3pCMWxDLEVBQUUwbEMsR0FBS3hsQyxFQUFFd2xDLEVBQ1gsQ0FDQSxPQUFPMWxDLENBQ1QsQ0RIUXV0QyxDQUE2QnB0QyxFQUFHSCxHQUN0QyxHQUFJVSxPQUFPcU4sc0JBQXVCLENBQ2hDLElBQUkyM0IsRUFBSWhsQyxPQUFPcU4sc0JBQXNCNU4sR0FDckMsSUFBS0QsRUFBSSxFQUFHQSxFQUFJd2xDLEVBQUVqa0MsT0FBUXZCLElBQUtSLEVBQUlnbUMsRUFBRXhsQyxJQUFJLElBQU9GLEVBQUVrRSxRQUFReEUsSUFBTSxDQUFBLEVBQUc2SyxxQkFBcUJsSyxLQUFLRixFQUFHVCxLQUFPTyxFQUFFUCxHQUFLUyxFQUFFVCxHQUNsSCxDQUNBLE9BQU9PLENBQ1QsNm5MRURBLE1BQU11dEMsR0FBYUMsRUFBQUEsS0FBSyxTQUFtQkMsR0FReEMsSUFSeUNwbkMsS0FDMUNBLEVBQUl3OUIsSUFDSkEsRUFBRzZKLGFBQ0hBLEVBQVlDLGlCQUNaQSxFQUFnQkMsVUFDaEJBLEVBQVNDLE9BQ1RBLEdBRURKLEVBRElLLEVBQUlULEdBQUFJLEVBQUFNLElBRVAsTUFBT2h1QyxHQUFLaXVDLG1CQUNON1MsRUFDVSxnQkFBZDkwQixFQUFLdEUsS0FBc0JpNEIsR0FBQUEsR0FBQSxDQUFBLEVBRWxCM3pCLEdBQUksR0FBQSxDQUNQaytCLGVBQWdCQyxHQUFtQ24rQixFQUFNdzlCLEVBQUs5akMsS0FFaEVzRyxFQUNBaUksRUFBVTAxQixHQUFxQjM5QixFQUFNdzlCLEVBQUs5akMsR0FDaEQsT0FDRWt1QyxFQUFBQSxRQUFBN0wsY0FBQSxLQUFBM2hDLE9BQUFrTyxPQUFBLENBQ0V1L0IsVUFBV0MsRUFBQUEsUUFDVE4sRUFBT2hMLFdBQ1A4SyxJQUFxQkMsR0FBYUMsRUFBT08sd0JBRXZDVixFQUFhLENBQUVuekIsTUFBT3F6QixLQUUxQkssRUFBQUEsUUFBQTdMLGNBQUNpTSxFQUFBQSxRQUFjNXRDLE9BQUFrTyxPQUFBLENBQUN0SSxLQUFNODBCLEVBQVM3c0IsUUFBU0EsRUFBU3UxQixJQUFLQSxHQUFTaUssSUFHckUsR0FDTVEsR0FBUyxlQUFBcmlDLFFBQUE2UyxJQUFBeXZCLFNBQUdDLEVBQUFBLFFBQVVDLE1BQU0sQ0FDaENuc0MsS0FBTWtzQyxFQUFBQSxRQUFVRSxPQUNoQjNzQyxLQUFNeXNDLEVBQUFBLFFBQVVFLE9BQ2hCcnJDLFFBQVNtckMsRUFBQUEsUUFBVUUsT0FDbkJDLGVBQWdCSCxFQUFBQSxRQUFVRSxPQUMxQkUsVUFBV0osRUFBQUEsUUFBVUUsT0FDckJuSyxlQUFnQmlLLEVBQUFBLFFBQVVFLE9BQzFCN3NDLFdBQVkyc0MsRUFBQUEsUUFBVUMsTUFBTSxDQUMxQmhzQyxNQUFPK3JDLEVBQUFBLFFBQVVFLE9BQ2pCRyxNQUFPTCxFQUFBQSxRQUFVRSxPQUNqQm5zQyxXQUFZaXNDLEVBQUFBLFFBQVVFLE9BQ3RCNVEsS0FBTTBRLEVBQUFBLFFBQVVFLE9BQ2hCcnRDLEdBQUltdEMsRUFBQUEsUUFBVUUsT0FDZDFxQyxPQUFRd3FDLEVBQUFBLFFBQVVFLE9BQ2xCclQsYUFBY21ULEVBQUFBLFFBQVVNLEtBQ3hCM3NDLFlBQWFxc0MsRUFBQUEsUUFBVUMsTUFBTSxDQUMzQm5zQyxLQUFNa3NDLEVBQUFBLFFBQVVFLE9BQ2hCbnNDLFdBQVlpc0MsRUFBQUEsUUFBVUUsU0FFeEJ6c0MsT0FBUXVzQyxFQUFBQSxRQUFVQyxNQUFNLENBQ3RCbnNDLEtBQU1rc0MsRUFBQUEsUUFBVUUsT0FDaEJuc0MsV0FBWWlzQyxFQUFBQSxRQUFVRSxhQUcxQixDQUFBLGlCQUVGemlDLFFBQUE2UyxJQUFBeXZCLFdBQUFoQixHQUFXd0IsVUFBWSxDQUNyQjFvQyxLQUFNaW9DLEdBQVVVLFdBQ2hCbkwsSUFBSzJLLEVBQUFBLFFBQVVFLE9BQU9NLFdBQ3RCdEIsYUFBY2MsRUFBQUEsUUFBVVMsS0FBS0QsV0FDN0JyQixpQkFBa0JhLEVBQUFBLFFBQVU3MkIsT0FBT3EzQixXQUNuQ3BCLFVBQVdZLEVBQUFBLFFBQVU3MkIsT0FBT3EzQixXQUM1Qm5CLE9BQVFXLEVBQUFBLFFBQVVVLFNBQVNWLEVBQUFBLFFBQVVFLFFBQVFNLGFBR3hDLE1BQU1HLEdBQWMzQixFQUFBQSxLQUFLLFNBQW9CNEIsR0FVakQsSUFWa0RoSyxZQUNuREEsRUFBV2lLLGFBQ1hBLEVBQVkzQixhQUNaQSxFQUFZN0osSUFDWkEsRUFBR2dLLE9BQ0hBLEVBQU15QixPQUNOQSxFQUFNQyx5QkFDTkEsRUFBd0JDLG1CQUN4QkEsR0FFREosRUFESXRCLEVBQUlULEdBQUErQixFQUFBSyxJQUVQLE1BQU8xdkMsR0FBS2l1QyxtQkFDWixPQUNFQyxFQUFBQSxRQUFBN0wsY0FBQSxNQUFBLENBQ0U4TCxVQUFXQyxFQUFBQSxRQUNUTixFQUFPNkIseUJBQ1A3QixFQUFPOEIscUJBQ1BMLEdBQVV6QixFQUFPeUIsU0FHbkJyQixFQUFBQSxRQUFBN0wsY0FBQSxLQUFBM2hDLE9BQUFrTyxPQUFBLENBQUl1L0IsVUFBV0wsRUFBTytCLGlCQUFxQlAsS0FDeENqSyxFQUFZamdDLElBQUksQ0FBQzA5QixFQUFZN2lDLElBRTFCaXVDLEVBQUFBLFFBQUE3TCxjQUFDbUwsR0FBVTlzQyxPQUFBa08sT0FBQSxDQUNUakYsSUFBSyxHQUFHbTVCLEVBQVc5Z0MsUUFDakI4Z0MsRUFBV2hoQyxXQUFXYSxLQUN0Qm1nQyxFQUFXaGhDLFdBQVdlLFFBQ3RCc1gsS0FBS0MsVUFBVTBvQixFQUFXaGhDLGNBRTVCNnJDLGFBQWNBLEVBQ2RFLFVBQVc1dEMsRUFDWHFHLEtBQU13OEIsRUFDTmdCLElBQUtBLEVBQ0xnSyxPQUFRQSxHQUNKQyxLQUlUeUIsR0FHQ3RCLEVBQUFBLFFBQUE3TCxjQUFBLEtBQUEsS0FDRTZMLEVBQUFBLFFBQUE3TCxjQUFBLFNBQUEsQ0FDRXlOLFFBQVNMLEVBQ1R6dEMsS0FBSyxTQUNMbXNDLFVBQVdMLEVBQU8seUJBRWpCOXRDLEVBQUUsdUJBQXdCLENBQUU4akMsV0FPM0Msa0JBRUE1M0IsUUFBQTZTLElBQUF5dkIsV0FBQVksR0FBWUosVUFBWSxDQUN0QjNKLFlBQWFvSixFQUFBQSxRQUFVc0IsUUFBUXhCLElBQVdVLFdBQzFDSyxhQUFjYixFQUFBQSxRQUFVUyxLQUFLRCxXQUM3QnRCLGFBQWNjLEVBQUFBLFFBQVVTLEtBQUtELFdBQzdCbkwsSUFBSzJLLEVBQUFBLFFBQVVFLE9BQU9NLFdBQ3RCbkIsT0FBUVcsRUFBQUEsUUFBVVUsU0FBU1YsRUFBQUEsUUFBVUUsUUFBUU0sV0FDN0NNLE9BQVFkLEVBQUFBLFFBQVVNLEtBQUtFLFdBQ3ZCTyx5QkFBMEJmLEVBQUFBLFFBQVVNLEtBQ3BDVSxtQkFBb0JoQixFQUFBQSxRQUFVUyxPQUdoQ0UsR0FBWVksYUFBZSxDQUN6QlIsMEJBQTBCLEVBQzFCQyxtQkFBb0JBLFFDaklmLE1BQU1RLEdBQWNBLEVBQUduQixRQUFPaEwsTUFBS29NLGFBQVlDLFlBQVdyQyxhQUMvRCxNQUFPOXRDLEdBQUtpdUMsbUJBQ1osT0FDRUMsRUFBQUEsUUFBQTdMLGNBQUEsU0FBQSxDQUNFcmdDLEtBQUssU0FDTG1zQyxVQUFXTCxFQUFPLGVBQ2xCZ0MsUUFBU0ksRUFDVCxhQUFZbHdDLEVBQUUscUJBQXNCLENBQUU4akMsUUFDdENxTSxVQUFXQSxHQUVYakMsRUFBQUEsUUFBQTdMLGNBQUMrTixVQUFJLENBQUNDLElBQUksUUFBUXZCLE1BQU9BLE1DbkJ4QixTQUFTN29DLElBQU0zRSxHQUNwQkEsRUFBRXdpQyxJQUNGQSxFQUFHbGpDLE1BQ0hBLEVBQUswdkMsWUFDTEEsRUFBV2hQLFNBQ1hBLEVBQVFpUCxjQUNSQSxFQUFhQyxjQUNiQSxFQUFhTixXQUNiQSxFQUFVTyxVQUNWQSxFQUFTQyxTQUNUQSxFQUFRNUMsT0FDUkEsRUFBTTZDLFlBQ05BLEVBQVdDLFNBQ1hBLEVBQVFDLGVBQ1JBLEVBQWNoVixjQUNkQSxFQUFhaVYsaUJBQ2JBLEVBQWdCQyxVQUNoQkEsRUFBU0MsWUFDVEEsRUFBV0MsY0FDWEEsSUFTQSxPQUNFL0MsRUFBQUEsUUFBQTdMLGNBQUEsTUFBQSxDQUFLOEwsVUFBV0wsRUFBT29ELFdBQ3BCUCxHQUNDekMsRUFBQUEsUUFBQTdMLGNBQUEsUUFDTW1PLEVBQWMsQ0FDaEJyQyxVQUFXTCxFQUFPLFdBQ2xCcUQsUUFBUzd2QyxJQUdWbXZDLEdBR0x2QyxFQUFBQSxRQUFBN0wsY0FBQSxRQUFBM2hDLE9BQUFrTyxPQUFBLENBQ0UsYUFBWTZoQyxFQUVaTSxVQUFXQSxFQUNYVCxZQUFhQSxFQUNiaFAsU0FBVUEsRUFDVnQvQixLQUFLLE9BQ0xtc0MsVUFBV0MsRUFBQUEsUUFDVE4sRUFBTzNuQyxNQUVQMm5DLEVBQU94c0MsR0FFUHV2QyxFQUhBRCxHQUFZL1UsR0FBZ0JpUyxFQUFPc0QsS0FFbkN4d0MsR0FBUWt0QyxFQUFPdUQsVUFHakIvdkMsR0FBSUEsR0FDQWl2QyxFQUFjLENBQ2hCdE8sSUFBS3lPLEVBQ0xZLE9BQVFOLEVBQ1JPLFNBckNhcHhDLElBSW5COHdDLEVBQWM5d0MsRUFBRW9SLE9BQU8zUSxZQW9DcEJBLEdBQ0NzdEMsRUFBQUEsUUFBQTdMLGNBQUM0TixHQUFXLENBQ1ZuTSxJQUFLQSxFQUNMb00sV0FBWUEsSUFBTUEsRUFBV1EsR0FDN0I1QyxPQUFRQSxFQUNSZ0IsTUFBT2dDLEVBQ1BYLFVBQVdod0MsR0FBS3FqQyxHQUF5QnJqQyxJQUFNK3ZDLEVBQVdRLEtBS3BFLDZrQkRoREF4a0MsUUFBQTZTLElBQUF5dkIsV0FBQXlCLEdBQVlqQixVQUFZLENBQ3RCRixNQUFPTCxFQUFBQSxRQUFVRSxPQUFPTSxXQUN4Qm5MLElBQUsySyxFQUFBQSxRQUFVRSxPQUFPTSxXQUN0QmlCLFdBQVl6QixFQUFBQSxRQUFVUyxLQUFLRCxXQUMzQmtCLFVBQVcxQixFQUFBQSxRQUFVUyxLQUFLRCxXQUMxQm5CLE9BQVFXLEVBQUFBLFFBQVVVLFNBQVNWLEVBQUFBLFFBQVVFLFFBQVFNLDRCQzZDL0MvaUMsUUFBQTZTLElBQUF5dkIsV0FBQXZvQyxHQUFNK29DLFVBQVksQ0FDaEIxdEMsR0FBSW10QyxFQUFBQSxRQUFVRSxPQUFPTSxXQUNyQm5MLElBQUsySyxFQUFBQSxRQUFVRSxPQUFPTSxXQUN0QnFCLFlBQWE3QixFQUFBQSxRQUFVRSxPQUFPTSxXQUM5QjNOLFNBQVVtTixFQUFBQSxRQUFVTSxLQUFLRSxXQUN6QnJ1QyxNQUFPNnRDLEVBQUFBLFFBQVVFLE9BQU9NLFdBQ3hCc0IsY0FBZTlCLEVBQUFBLFFBQVVTLEtBQUtELFdBQzlCdUIsY0FBZS9CLEVBQUFBLFFBQVVTLEtBQUtELFdBQzlCaUIsV0FBWXpCLEVBQUFBLFFBQVVTLEtBQUtELFdBQzNCd0IsVUFBV2hDLEVBQUFBLFFBQVVFLE9BQU9NLFdBQzVCeUIsU0FBVWpDLEVBQUFBLFFBQVVDLE1BQU0sQ0FDeEJqcEMsUUFBU2dwQyxFQUFBQSxRQUFVK0MsVUFBVSxDQUFDL0MsRUFBQUEsUUFBVUUsT0FBUUYsRUFBQUEsUUFBVWdELFdBQ3pEeEMsV0FDSG5CLE9BQVFXLEVBQUFBLFFBQVVVLFNBQVNWLEVBQUFBLFFBQVVFLFFBQVFNLFdBQzdDMEIsWUFBYWxDLEVBQUFBLFFBQVVNLEtBQ3ZCNkIsU0FBVW5DLEVBQUFBLFFBQVVNLEtBQUtFLFdBQ3pCNEIsZUFBZ0JwQyxFQUFBQSxRQUFVRSxPQUFPTSxXQUNqQ3BULGNBQWU0UyxFQUFBQSxRQUFVRSxPQUN6Qm1DLGlCQUFrQnJDLEVBQUFBLFFBQVVFLE9BQU9NLFdBQ25DOEIsVUFBV3RDLEVBQUFBLFFBQVVNLEtBQ3JCaUMsWUFBYXZDLEVBQUFBLFFBQVVTLEtBQ3ZCK0IsY0FBZXhDLEVBQUFBLFFBQVVTLEtBQUtELGFBR2hDaHBDLEdBQU0rcEMsYUFBZSxDQUNuQmUsV0FBVyxFQUNYSixhQUFhLEVBQ2I5VSxtQkFBZTU0QixFQUNmK3RDLFlBQWFBLFFDOURmLE1BQU1VLEdBQWFBLEVBQ2pCQyxhQUNBcndDLEtBQ0FndkMsY0FDQUosYUFDQTBCLHVCQUNBQyxjQUNBQyxtQkFDQUMsa0JBQ0FqTyxNQUNBa08sWUFDQXB4QyxRQUNBaXdDLGlCQUNBdlAsV0FDQTJRLGNBQ0FDLGFBQ0F2aEIsUUFDQXdoQixXQUNBQyxhQUVBLE1BQU9weUMsR0FBS2l1QyxvQkFDTm5CLEtBQUVBLEVBQUlHLE9BQUVBLEdBQVdvRixHQUFNeEYsZ0JBQ3pCaUIsRUFBU29FLEVBQWFJLEdBQWVDLEdBQ3JDQyxFQUFVLEdBQUdseEMsVUFDYnNCLEVBQVUsR0FBR3RCLFdBQ1pteEMsRUFBY0MsR0FBaUJwSSxFQUFBQSxVQUFTLEdBQ3pDb0csRUFBV3hDLEVBQUFBLFFBQU10RCxTQUV2QkosRUFBQUEsVUFBVSxLQUNSbUksRUFBQUEsUUFBV0MsY0FBY2pCLElBQ3hCLElBRUhuSCxFQUFBQSxVQUFVLEtBQ0o3WixFQUFNa2lCLGFBQ1IvRixJQUVBRyxLQUVELENBQUN0YyxFQUFNa2lCLGVBTVYsTUFBTWpGLGlCQUNKQSxFQUFnQjRDLGNBQ2hCQSxFQUFhbEIsYUFDYkEsRUFBWWlCLGNBQ1pBLEVBQWE1QyxhQUNiQSxFQUFZbUYsb0JBQ1pBLEdBQ0VDLGNBQVksQ0FDZDdVLE1BQU92TixFQUFNMFUsWUFDYjJOLFdBQVlweUMsRUFDWnF5QyxRQUFRLEVBQ1JyQixxQkFBc0JzQixJQUNwQnRCLEVBQXFCc0IsR0FDckJmLEVBQVMsQ0FBRW53QyxLQUFNLGNBQWU0dUMsVUFBVSxLQUU1QzRCLFVBQ0E1dkMsVUFDQXV3QyxhQUFjLEtBQ2RDLHlCQUF5QixFQUN6QkMsbUJBQW9CQSxFQUFHTCxhQUFZaHhDLFVBQ2pDMnVCLEVBQU1raUIsY0FDTjd3QyxJQUFTK3dDLEVBQUFBLFlBQVlPLGlCQUFpQkMsYUFDdENwQixFQUFTLENBQUVud0MsS0FBTSxlQUFnQnBCLE1BQU9veUMsSUFDMUNRLGFBQWNBLENBQUNDLEdBQVlQLFVBQVNseEMsV0FDbEMsT0FBUUEsR0FDTixLQUFLK3dDLEVBQUFBLFlBQVlPLGlCQUFpQkksbUJBR2hDLE9BRkFaLEdBQW9CLEdBQ3BCWCxFQUFTLENBQUVud0MsS0FBTSxjQUFlNHVDLFVBQVUsSUFDbkM2QyxFQUVULEtBQUtWLEVBQUFBLFlBQVlPLGlCQUFpQkssa0JBQ2hDLE9BQUloakIsRUFBTStQLFNBQ1J5UixFQUFTLENBQUVud0MsS0FBTSxnQkFBaUI0eEMsY0FBYyxJQUN6Q0gsUUFHTEEsRUFBUzdGLGlCQUNYM1QsR0FBQUEsR0FBQSxDQUFBLEVBQ0tpWixHQUFPLENBQUEsRUFBQSxDQUNWQyxhQUFjeGlCLEVBQU0wVSxZQUFZLEtBRzdCNk4sRUFFVCxLQUFLSCxFQUFBQSxZQUFZTyxpQkFBaUJPLFVBQ2hDLE9BQU9KLEVBRVQsUUFDRSxPQUFPUCxJQUdiWSxhQUFhaFIsR0FDSkEsRUFBYW9DLEdBQW1CcEMsR0FBYyxLQUl6RHdNLEVBQWEsQ0FBQSxFQUFJLENBQUV5RSxrQkFBa0IsSUFDckN4RCxFQUFjLENBQUEsRUFBSSxDQUFFd0Qsa0JBQWtCLElBRXRDLE1BQU1DLEVBQW9CekosRUFBQUEsWUFDeEIwSixHQUNFdGpCLEVBQU1raUIsY0FBZ0JWLEVBQVMsQ0FBRW53QyxLQUFNLGVBQWdCcEIsTUFBT3F6QyxJQUNoRSxDQUFDdGpCLEVBQU1raUIsYUFBY1YsSUFHakIxQyxFQUFxQmxGLEVBQUFBLFlBQVksSUFBTW1JLEdBQWMsR0FBTyxLQUU1RHdCLGlCQUFFQSxFQUFnQkMsWUFBRUEsRUFBV0Msc0JBQUVBLEdBQTBCcEMsRUFDM0R2QixFQUFZeUQsRUFDZnR0QyxPQUFPLEtBQ1BBLE9BQU91dEMsR0FDUHZ0QyxPQUFPLEtBQ1BBLE9BQU93dEMsR0FDVixPQUNFbEcsRUFBQUEsUUFBQTdMLGNBQUNzUSxVQUFVLENBQ1RNLE9BQVF0aUIsRUFBTWtpQixhQUNkMUUsVUFBV0wsRUFBTyxnQkFDbEJ1RyxpQkFBa0J2RyxFQUFPLHdCQUN6QndHLDZCQUE2QixFQUM3QkMsa0JBQWdCLEdBRWhCckcsRUFBQUEsUUFBQTdMLGNBQUEsTUFBQSxDQUNFOEwsVUFBV0wsRUFBTyx3QkFDbEIxTCxNQUFPLENBQ0wsVUFBV2dRLEVBQU9vQyxRQUNsQiw2QkFBOEJwQyxFQUFPcUMsa0JBQ3JDLGdCQUFpQnJDLEVBQU9zQyxNQUN4Qix1QkFBd0I3QyxFQUFZOEMsU0FHdEN6RyxFQUFBQSxRQUFBN0wsY0FBQSxNQUFBLENBQUs4TCxVQUFXTCxFQUFPLHNCQUF1QnFELFFBQVNxQixHQUNyRHRFLEVBQUFBLFFBQUE3TCxjQUFBLFNBQUEsQ0FDRXJnQyxLQUFLLFNBQ0xtc0MsVUFBV0wsRUFBTyxpQkFDbEJnQyxRQUFTQSxLQUNQZ0QsR0FBb0IsR0FDcEJYLEVBQVMsQ0FBRW53QyxLQUFNLGNBQWU0dUMsVUFBVSxLQUU1Q1QsVUFBV2h3QyxJQUNMcWpDLEdBQXlCcmpDLEtBQzNCMnlDLEdBQW9CLEdBQ3BCWCxFQUFTLENBQUVud0MsS0FBTSxjQUFlNHVDLFVBQVUsTUFHOUMsYUFBWTV3QyxFQUFFLFNBQVUsQ0FBRThqQyxRQUMxQjhRLFNBQVUsR0FFVjFHLEVBQUFBLFFBQUE3TCxjQUFDK04sVUFBSSxDQUFDQyxJQUFJLFFBQVF2QixNQUFPc0QsRUFBT29DLFdBRWxDdEcsRUFBQUEsUUFBQTdMLGNBQUEsT0FBQSxDQUFNOEwsVUFBV0wsRUFBTyxpQkFDdEJJLEVBQUFBLFFBQUE3TCxjQUFBLE9BQUEzaEMsT0FBQWtPLE9BQUEsQ0FDRXUvQixVQUFXTCxFQUFPLGtCQUNsQnhzQyxHQUFJc0IsR0FDQTR0QyxLQUVIeUIsR0FFSC9ELEVBQUFBLFFBQUE3TCxjQUFDcDhCLEdBQUssQ0FDSnFxQyxZQUNFMU0sR0FBWXRpQyxHQUNSdEIsRUFBRSw0QkFBNkIsQ0FBRThqQyxRQUNqQ3dNLEVBRU5odkMsR0FBSUEsRUFDSndpQyxJQUFLQSxFQUNMbGpDLE1BQU9BLEVBQ1AydkMsY0FBZUEsRUFDZkMsY0FBZUEsRUFDZk4sV0FBWUEsSUFBTUEsRUFBV1EsR0FDN0JELFVBQVdBLEVBQ1hDLFNBQVVBLEVBQ1Y1QyxPQUFRQSxFQUNSNkMsYUFBYSxFQUNiRyxpQkFBa0JzQixFQUFPb0MsUUFDekJ6RCxXQUFTLEVBQ1RGLGVBQWdCQSxFQUNoQnZQLFNBQVVBLEVBQ1ZzUCxVQUFRLEVBQ1JLLGNBQWUrQyxJQUVqQjlGLEVBQUFBLFFBQUE3TCxjQUFDK00sR0FBVzF1QyxPQUFBa08sT0FBQSxDQUNWeTJCLFlBQWExVSxFQUFNMFUsWUFDbkJpSyxhQUFjQSxFQUNkM0IsYUFBY0EsRUFDZEMsaUJBQWtCQSxFQUNsQnFGLFFBQU0sRUFDTjFELFFBQVEsRUFDUnpMLElBQUtBLEVBQ0xnSyxPQUFRQSxFQUNSMEIsMEJBQXdCLEVBQ3hCQyxtQkFBb0JBLEdBQ2hCc0MsTUFJVjdELEVBQUFBLFFBQUE3TCxjQUFDd1MsRUFBQUEsUUFBVyxDQUNWQyxZQUFhckMsRUFDYnNDLFlBQWFBLElBQU1yQyxHQUFjLEdBQ2pDc0MsV0FBWWgxQyxFQUFFLDZCQUE4QixDQUFFOGpDLFFBQzlDbVIsa0JBQW1CajFDLEVBQUUsU0FBVSxDQUFFOGpDLFFBQ2pDb1Isb0JBQXFCbDFDLEVBQUUsU0FBVSxDQUFFOGpDLFFBQ25DcVIscUJBQXNCQSxLQUNwQnJELElBQ0FZLEdBQWMsSUFFaEIwQyx1QkFBd0JBLElBQU0xQyxHQUFjLEdBQzVDalosS0FBTXFLLG1sQkFPaEI1M0IsUUFBQTZTLElBQUF5dkIsV0FBQWtELEdBQVcxQyxVQUFZLENBQ3JCMkMsV0FBWWxELEVBQUFBLFFBQVVFLE9BQU9NLFdBQzdCM3RDLEdBQUltdEMsRUFBQUEsUUFBVUUsT0FBT00sV0FDckJpQixXQUFZekIsRUFBQUEsUUFBVVMsS0FBS0QsV0FDM0I2QyxpQkFBa0JyRCxFQUFBQSxRQUFVUyxLQUFLRCxXQUNqQzJDLHFCQUFzQm5ELEVBQUFBLFFBQVVTLEtBQUtELFdBQ3JDcnVDLE1BQU82dEMsRUFBQUEsUUFBVUUsT0FBT00sV0FDeEJtRCxPQUFRM0QsRUFBQUEsUUFBVVUsU0FBU1YsRUFBQUEsUUFBVUUsUUFBUU0sV0FDN0M0QyxZQUFhcEQsRUFBQUEsUUFBVUMsTUFBTSxDQUMzQmlHLE9BQVFsRyxFQUFBQSxRQUFVNzJCLE9BQU9xM0IsYUFDeEJBLFdBQ0g4QyxnQkFBaUJ0RCxFQUFBQSxRQUFVQyxNQUFNLENBQUEsR0FBSU8sV0FDckMrQyxVQUFXdkQsRUFBQUEsUUFBVUMsTUFBTSxDQUN6QndGLGlCQUFrQnpGLEVBQUFBLFFBQVVFLE9BQU9NLFdBQ25Da0YsWUFBYTFGLEVBQUFBLFFBQVVFLE9BQU9NLFdBQzlCbUYsc0JBQXVCM0YsRUFBQUEsUUFBVUUsT0FBT00sYUFDdkNBLFdBQ0g0QixlQUFnQnBDLEVBQUFBLFFBQVVFLE9BQU9NLFdBQ2pDcUIsWUFBYTdCLEVBQUFBLFFBQVVFLE9BQU9NLFdBQzlCZ0QsWUFBYXhELEVBQUFBLFFBQVVFLE9BQU9NLFdBQzlCM04sU0FBVW1OLEVBQUFBLFFBQVVNLEtBQUtFLFdBQ3pCaUQsV0FBWXpELEVBQUFBLFFBQVVNLEtBQUtFLFdBQzNCbkwsSUFBSzJLLEVBQUFBLFFBQVVFLE9BQU9NLFdBQ3RCdGUsTUFBTzhkLEVBQUFBLFFBQVVDLE1BQU0sQ0FDckJySixZQUFhb0osRUFBQUEsUUFBVXNCLFFBQVF0QixFQUFBQSxRQUFVQyxNQUFNLENBQUEsSUFBS08sV0FDcEQ0RCxhQUFjcEUsRUFBQUEsUUFBVU0sS0FBS0UsV0FDN0J2TyxRQUFTK04sRUFBQUEsUUFBVU0sS0FBS0UsYUFDdkJBLFdBQ0hrRCxTQUFVMUQsRUFBQUEsUUFBVVMsS0FBS0QsYUNuU3BCLE1BQU1vRyxHQUFnQkEsQ0FBQzFrQixFQUFPMmtCLEtBQ25DLE9BQVFBLEVBQU90ekMsTUFDYixJQUFLLGVBQ0gsT0FBQWk0QixHQUFBQSxHQUFBLENBQUEsRUFDS3RKLEdBQUssQ0FBQSxFQUFBLENBQ1IvdkIsTUFBTzAwQyxFQUFPMTBDLFFBRWxCLElBQUssb0JBQ0gsT0FBTzAwQyxFQUFPNVUsVUFBWS9QLEVBQU0rUCxTQUFZNFUsRUFBT2pRLFlBQzFDcEwsR0FBQUEsTUFFQXRKLEdBQUssQ0FBQSxFQUFBLENBQ1IrUCxRQUFTNFUsRUFBTzVVLFFBQ2hCMkUsWUFBYWlRLEVBQU9qUSxhQUFlMVUsRUFBTTBVLGNBSjNDMVUsRUFNTixJQUFLLG9CQUNILE9BQUFzSixHQUFBQSxHQUFBLENBQUEsRUFDS3RKLEdBQUssQ0FBQSxFQUFBLENBQ1IwVSxZQUFhLEtBRWpCLElBQUssZ0JBQ0gsT0FBQXBMLEdBQUFBLEdBQUEsQ0FBQSxFQUNLdEosR0FBSyxDQUFBLEVBQUEsQ0FDUmdKLFFBQVMyYixFQUFPM2IsVUFFcEIsSUFBSyxjQUNILE9BQUFNLEdBQUFBLEdBQUEsQ0FBQSxFQUNLdEosR0FBSyxDQUFBLEVBQUEsQ0FDUjRrQixjQUFlRCxFQUFPQyxjQUN0QjViLFFBQVMyYixFQUFPM2IsUUFDaEI2YixpQkFBa0JGLEVBQU9FLG1CQUU3QixJQUFLLFFBQ0gsT0FBQXZiLEdBQUFBLEdBQUEsQ0FBQSxFQUNLdEosR0FBSyxDQUFBLEVBQUEsQ0FDUi92QixNQUFPLEdBQ1A2MEMsV0FBVyxFQUNYcFEsWUFBYSxLQUVqQixJQUFLLGFBQ0gsT0FBQXBMLEdBQUFBLEdBQUEsQ0FBQSxFQUNLdEosR0FBSyxDQUFBLEVBQUEsQ0FDUi92QixNQUFPMDBDLEVBQU8xMEMsT0FBUyt2QixFQUFNL3ZCLE1BQzdCNjBDLFdBQVdILEVBQU8xRSxVQUFtQmpnQixFQUFNOGtCLFVBQzNDRCxpQkFBa0IsS0FDbEJELGVBQWUsSUFHbkIsSUFBSyxRQUNILE9BQU9ELEVBQU9JLGFBRWhCLElBQUssZ0JBQ0gsT0FBQXpiLEdBQUFBLEdBQUEsQ0FBQSxFQUNLdEosR0FBSyxDQUFBLEVBQUEsQ0FDUmlqQixhQUFjMEIsRUFBTzFCLGVBR3pCLElBQUssY0FDSCxPQUFJMEIsRUFBTzFFLFNBQ0pqZ0IsRUFBTWtpQixhQU9YNVksR0FBQUEsR0FBQSxDQUFBLEVBQ0t0SixHQUFLLENBQUEsRUFBQSxDQUNSa2lCLGNBQWMsRUFDZDRDLFdBQVcsSUFUWHhiLEdBQUFBLEdBQUEsQ0FBQSxFQUNLdEosR0FBSyxDQUFBLEVBQUEsQ0FDUmtpQixjQUFjLEVBQ2RqeUMsTUFBTyt2QixFQUFNOGtCLFVBQVksR0FBSzlrQixFQUFNL3ZCLFFBUzFDcTVCLEdBQUFBLEdBQUEsQ0FBQSxFQUNLdEosR0FBSyxDQUFBLEVBQUEsQ0FDUmdsQixZQUFhaGxCLEVBQU1nbEIsV0FDbkI5QyxhQUFjeUMsRUFBTzFFLFdBQWFqZ0IsRUFBTWtpQixlQUc1QyxRQUNFLE9BQU9saUIsaWtCQ3ZEYixNQWlETWlsQixHQUFZLENBQ2hCLG1CQUNBLHNCQUNBLG1CQUNBLG9CQUNBLGdCQUNBLHNCQUNBLGVBQ0EsMkJBQ0EsdUJBQ0Esd0JBQ0EsbUJBNkpGLFNBQVNDLElBQWNsRSxXQUNyQkEsRUFBVXJ3QyxHQUNWQSxFQUFFZ3ZDLFlBQ0ZBLEVBQVd3RixTQUNYQSxFQUFRQyxLQUNSQSxFQUFJbjFDLE1BQ0pBLEVBQUtvMUMsUUFDTEEsRUFDQXZjLEtBQU1xSyxFQUFHbVMsb0JBQ1RBLEVBQW1CQyxnQkFDbkJBLEVBQWVDLFlBQ2ZBLEVBQVdDLFNBQ1hBLEVBQVF4RixTQUNSQSxFQUFRcUIsWUFDUkEsRUFBV3BCLGVBQ1hBLEVBQWN3RixzQkFDZEEsRUFBcUIvVSxTQUNyQkEsRUFBUW1QLFVBQ1JBLEVBQVNvQixZQUNUQSxFQUFXTyxPQUNYQSxFQUFNa0UsUUFDTkEsRUFBT3BFLFdBQ1BBLEVBQVVxRSxXQUNWQSxFQUFVMWEsY0FDVkEsRUFBYTVtQixRQUNiQSxFQUFPMGtCLFFBQ1BBLEVBQU9xQyxjQUNQQSxFQUFhRCxjQUNiQSxFQUFhRCxjQUNiQSxFQUFhRyxTQUNiQSxFQUFRQyxTQUNSQSxJQUVBLE1BQU9sOEIsR0FBS2l1QyxtQkFDTnlILEVBQWUsQ0FDbkJyUSxZQUFhLEdBQ2IzRSxTQUFTLEVBQ1QvRyxVQUNBNGIsZUFBZSxFQUNmQyxpQkFBa0IsS0FDbEJDLFdBQVcsRUFDWDVDLGNBQWMsRUFDZGp5QyxRQUNBZ3pDLGNBQWMsRUFDZCtCLFlBQVksSUFFUGhsQixFQUFPd2hCLEdBQVlxRSxFQUFBQSxXQUFXbkIsR0FBZUssR0FFcERsTCxFQUFBQSxVQUFVLElBQU0ySCxFQUFTLENBQUVud0MsS0FBTSxRQUFTMHpDLGlCQUFpQixDQUFDOTBDLElBQzVENHBDLEVBQUFBLFVBQVUsSUFBTTJILEVBQVMsQ0FBRW53QyxLQUFNLGdCQUFpQjIzQixZQUFZLENBQUNBLElBRS9ELE1BQU0rVyxFQUFXOUYsRUFBQUEsT0FBT3RwQyxHQUN4QmtwQyxFQUFBQSxVQUFVLEtBQ0o0TCxHQUNGQSxFQUFTMUYsRUFBU2pyQyxVQUVuQixDQUFDaXJDLEVBQVNqckMsVUFFYixNQUFNZ3hDLEVBQW1CbE0sRUFBQUEsWUFBWSxLQUNuQyxNQUNNbU0sR0FEVXpoQyxHQUFTeFQsUUFDVXdULEVBQVF4UyxTQUFTLGFBRTlDazBDLEVBOU1ZQyxHQUNwQjNoQyxVQUNBeWhDLG1CQUNBOUYsV0FDQWlHLFlBQ0FsZCxjQUVBLE1BQU1tZCxHQUFVN2hDLEdBQVN4VCxPQUN6QixJQUFJazFDLEVBdUJKLE9BdEJJRSxHQUNGRixFQUFhLENBQUMsY0FDVkcsR0FBVTdoQyxFQUFReFMsU0FBUyxXQUM3QmswQyxFQUFXN3FDLEtBQUssVUFFZGdyQyxHQUFVN2hDLEVBQVF4UyxTQUFTLGNBQzdCazBDLEVBQVc3cUMsS0FBSyxhQUVkZ3JDLEdBQVU3aEMsRUFBUXhTLFNBQVMsMkJBQzdCazBDLEVBQVc3cUMsS0FBSywwQkFFUmdyQyxJQUNWSCxFQUFhLElBQUkxaEMsSUFHZnloQyxHQUNDOUYsR0FDQ2pYLEVBQVFsNEIsU0FBVWs0QixFQUFRbDNCLFNBQVMsY0FFckNrMEMsRUFBVzdxQyxLQUFLLDJCQUdiNnFDLEdBK0tjQyxDQUFjLENBQy9CM2hDLFVBQ0F5aEMsbUJBQ0E5RixXQUNBaUcsVUFBV2xtQixFQUFNNGtCLGNBQ2pCNWIsUUFBU2hKLEVBQU1nSixVZjRSUW9kLEVBQzNCOWhDLEVBQ0Ewa0IsRUFDQWtDLEVBQ0FDLEVBQ0FDLEVBQ0FDLEVBQ0Fyd0IsRUFDQW10QixFQUNBbUQsRUFDQUMsS0FFQXBELEVBQVMsTUFDVDZDLEdBQ0UxbUIsRUFDQTBrQixFQUNBa0MsRUFDQUMsRUFDQUMsRUFDQUMsRUFDQXJ3QixFQUNBbXRCLEVBQ0FtRCxFQUNBQyxJZXZTQTZhLENBQ0VKLEVBVmlCaG1CLEVBQU1nSixRQUNyQmhKLEVBQU1nSixRQUFRNzBCLE9BQ1o4ckIsSUFDRzhsQixHQUNNLGVBQU45bEIsR0FDREQsRUFBTTRrQixlQUNOM0UsR0FFSmpnQixFQUFNZ0osUUFJUmtDLEVBQ0FDLEVBQ0FDLEVBQ0FDLEVBQ0EsQ0FDRTcxQixNQUFPd3FCLEVBQU0vdkIsT0FBUyxJQUV4Qm8yQyxJQUNFLEdBQW9CLE1BQWhCQSxFQUtGLFlBSkE3RSxFQUFTLENBQ1Bud0MsS0FBTSxvQkFDTjArQixTQUFTLElBS2IsTUFBTXVXLEdBQWtCRCxFQUFhM3lDLFNBQVcsSUFDN0NTLE9BQ0NnK0IsR0FDc0IsZ0JBQXBCQSxFQUFXOWdDLE1BQ1UsZ0JBQXBCOGdDLEVBQVc5Z0MsTUFDVjhnQyxFQUFXaGhDLFdBQVc0aUMsS0FBT25qQixLQUFLRCxNQUFRLEtBRS9DbGMsSUFBSTA5QixJQUNILEdBQ3NCLG9CQUFwQkEsRUFBVzlnQyxNQUNTLGtCQUFwQjhnQyxFQUFXOWdDLE1BQ1MsMkJBQXBCOGdDLEVBQVc5Z0MsTUFDUyxTQUFwQjhnQyxFQUFXOWdDLEtBQ1gsQ0FDQSxNQUFNazFDLEVBQW9CamQsR0FBQSxDQUFBLEVBQVE2SSxHQUtsQyxPQUpBb1UsRUFBcUJwMUMsV0FBV2MsUUFBVTVDLEVBQ3hDOGlDLEVBQVdoaEMsV0FBV2MsUUFDdEIsQ0FBRWtoQyxRQUVHb1QsQ0FDVCxDQUNBLE9BQU9wVSxJQUVYcVAsRUFBUyxDQUNQbndDLEtBQU0sb0JBQ04wK0IsU0FBUyxFQUNUMkUsWUFBYTRSLEtBR2pCaGIsRUFDQUMsSUFFRCxDQUNEdkwsRUFBTS92QixNQUNOK3ZCLEVBQU1nSixRQUNOaEosRUFBTTRrQixjQUNOdGdDLEVBQ0E0bUIsRUFDQUMsRUFDQUMsRUFDQUMsRUFDQTRVLEVBQ0E5TSxFQUNBN0gsRUFDQUMsRUFDQTU2QixJQUdJNjFDLEVBQW1CNU0sRUFBQUEsWUFDdkIsQ0FBQ3pILEVBQVl0b0IsS0FDTnNvQixJQUdEb1QsRUFDRkEsRUFBZ0JwVCxFQUFZdG9CLEdBRTVCczdCLEVBQVNoVCxFQUFZeGhDLElBRW5CNjBDLEdBQWlCdkYsSUFBWTJGLEdBQy9CSixJQUVFekYsRUFBU2pyQyxTQUNYaXJDLEVBQVNqckMsUUFBUTJ4QyxTQUdyQixDQUFDeEcsSUFHR2dCLEVBQXVCc0IsR0FDM0JpRSxFQUFpQmpFLEVBQVFDLGFBQWNELEVBQVF0RixtQkFFM0NxRixPQUNKQSxFQUFNckYsaUJBQ05BLEVBQWdCNEMsY0FDaEJBLEVBQWFsQixhQUNiQSxFQUFZaUIsY0FDWkEsRUFBYTVDLGFBQ2JBLEVBQVkwSixXQUNaQSxFQUFVQyxTQUNWQSxFQUFRQyxVQUNSQSxHQUNFeEUsY0FBWSxDQUNkUCxRQUFTbHhDLEVBQ1QweEMsV0FBWXJpQixFQUFNL3ZCLE1BQ2xCd3lDLHdCQUF5QixFQUd6QkMsbUJBQW9CQSxFQUFHTCxhQUFZaHhDLFVBQ2pDQSxJQUFTK3dDLEVBQUFBLFlBQVlPLGlCQUFpQkMsYUFDdENwQixFQUFTLENBQUVud0MsS0FBTSxlQUFnQnBCLE1BQU9veUMsSUFDMUNRLGFBQWNqSixFQUFBQSxZQUNaLENBQUNrSixHQUFZenhDLE9BQU1reEMsY0FDakIsT0FBUWx4QyxHQUNOLEtBQUsrd0MsRUFBQUEsWUFBWU8saUJBQWlCa0UsVUFDbEMsS0FBS3pFLEVBQUFBLFlBQVlPLGlCQUFpQkssa0JBR2hDLE9BQUloakIsRUFBTStQLFNBQ1J5UixFQUFTLENBQUVud0MsS0FBTSxnQkFBaUI0eEMsY0FBYyxJQUN6Q0gsR0FFSlAsRUFBUUMsYUFHcUIsMkJBQTlCRCxFQUFRQyxhQUFhbnhDLE1BRXZCbXdDLEVBQVMsQ0FDUG53QyxLQUFNLGNBQ04yM0IsUUFBUyxDQUFDLFlBQWEsUUFDdkI0YixlQUFlLEVBQ2ZDLGlCQUFrQnRDLEVBQVFDLGFBQWFueEMsT0FFbEN5eEMsR0FFeUIsU0FBOUJQLEVBQVFDLGFBQWFueEMsTUFDdkJtd0MsRUFBUyxDQUNQbndDLEtBQU0sY0FDTjIzQixVQUNBNGIsZUFBZSxFQUNmQyxpQkFBa0IsT0FFYi9CLEdBRUZQLEVBckJFQSxFQXVCWCxLQUFLSCxFQUFBQSxZQUFZTyxpQkFBaUJtRSxXQUVoQyxPQUFJN0IsR0FBVW56QyxTQUFTN0IsR0FDckJxNUIsR0FBQUEsR0FBQSxDQUFBLEVBQVlpWixHQUFPLENBQUEsRUFBQSxDQUFFRixXQUFZLEdBQUlDLFFBQVEsSUFFL0NoWixHQUFBQSxHQUFBLENBQUEsRUFDS2laLEdBQU8sQ0FBQSxFQUFBLENBQ1ZELFFBQVEsSUFHWixLQUFLRixFQUFBQSxZQUFZTyxpQkFBaUJPLFVBQ2hDLE9BQUlYLEVBQVFDLGFBQ1ZsWixHQUFBQSxHQUFBLENBQUEsRUFDS2laLEdBQU8sQ0FBQSxFQUFBLENBQ1ZDLGFBQWNNLEVBQVM0RCxXQUN2QnJFLFdBQVlTLEVBQVNULGFBR2xCRSxFQUVULEtBQUtILEVBQUFBLFlBQVlPLGlCQUFpQkksbUJBQ2hDLE9BQUF6WixHQUFBQSxHQUFBLENBQUEsRUFDS2laLEdBQU8sQ0FBQSxFQUFBLENBQ1ZGLFdBQVksS0FHaEIsUUFDRSxPQUFPRSxJQUliLENBQUN2aUIsRUFBTStQLFFBQVM5L0IsRUFBT2d3QyxJQUV6QjFTLE1BQU92TixFQUFNMFUsWUFDYnlPLGFBQWFoUixHQUNKQSxFQUFhb0MsR0FBbUJwQyxHQUFjLEdBRXZEOE8sdUJBQ0E4RixlQUFnQnhFLElBQ1ZBLEVBQVFELFNBQVd0aUIsRUFBTWtpQixjQUMzQlYsRUFBUyxDQUFFbndDLEtBQU0sY0FBZTR1QyxnQkFrQmhDVixHQUFhak8sSUFDakJrUSxFQUFTLENBQUVud0MsS0FBTSxVQUNiZzBDLEdBQ0ZBLEVBQVExMEMsR0FFTjJnQyxFQUFJeDhCLFNBQ053OEIsRUFBSXg4QixRQUFRMmhDLFFBRWRrUSxLQUdJdEQsR0FBb0J6SixFQUFBQSxZQUN4QjBKLEdBQVk5QixFQUFTLENBQUVud0MsS0FBTSxlQUFnQnBCLE1BQU9xekMsSUFDcEQsSUFJRnpKLEVBQUFBLFVBQVUsTUFLTHlJLElBQVV0aUIsRUFBTWtpQixjQUNmbGlCLEVBQU0vdkIsUUFBVUEsR0FBU2cxQyxHQUFVbnpDLFNBQVM3QixJQUU5QzYxQyxFQUFpQjlsQixFQUFNL3ZCLFFBRXhCLENBQUNxeUMsRUFBUXRpQixFQUFNa2lCLGFBQWNsaUIsRUFBTS92QixNQUFPNjFDLElBRzdDak0sRUFBQUEsVUFBVSxLQUNKN1osRUFBTWlqQixlQUFpQmpqQixFQUFNK1AsVUFDL0J5VyxFQUFpQnhtQixFQUFNMFUsWUFBWSxHQUFJLEdBQ3ZDa1MsTUFFRCxDQUFDNW1CLEVBQU0rUCxRQUFTL1AsRUFBTWduQixhQUFjaG5CLEVBQU0wVSxjQUU3QyxNQUFNdVMsR0FBZ0JDLEVBQUFBLFFBQ3BCLEtBQUEsQ0FDRW5YLFFBQVMvUCxFQUFNK1AsUUFDZmtRLFdBQ0FrSCxvQkFBcUI5M0MsRUFBRSxZQUFhLENBQUU4akMsUUFDdEMrTixjQUNBb0Usc0JBQ0E3RCxTQUNBa0UsWUFFRixDQUNFM2xCLEVBQU0rUCxRQUNOa1EsRUFDQTV3QyxFQUNBOGpDLEVBQ0ErTixFQUNBb0UsRUFDQTdELEVBQ0FrRSxLQUlFbEMsc0JBQ0pBLEdBQXFCRixpQkFDckJBLEdBQWdCQyxZQUNoQkEsR0FBVzRELGNBQ1hBLElBampCaUJDLEdBQ25CMTJDLEtBQ0FtdkMsWUFDQTNNLE1BQ0E5akMsSUFDQTR3QyxXQUNBdkwsY0FDQXprQyxRQUNBMGdDLGVBRUEsTUFBTTJXLEVBQVkzMkMsRUFBR3VGLFFBQVEsZUFBZ0IsSUFDdkNzdEMsRUFDSjFELEdBQWF6d0MsRUFBRWk0QyxFQUFXLENBQUVuVSxRQUFPajlCLFFBQVEsZUFBZ0IsSUFBSUQsT0FBTyxLQUNsRXN0QyxFQUFtQjVTLEVBQVcsR0FBR3RoQyxFQUFFLFdBQVksQ0FBRThqQyxXQUFZLEdBQzdEb1UsRUFDRmw0QyxFQUQwQjR3QyxFQUN4QiwrQ0FDQSxnREFEZ0QsQ0FBRTlNLFFBRWxEcVUsRUFDRyxXQUFQNzJDLEVBQ0l0QixFQUFFLCtDQUFnRCxDQUFFOGpDLFFBQ3BELEdBb0JOLE1BQU8sQ0FDTHFRLGNBQ0FELG1CQUNBNkQsY0F0Qm9CRyxFQUNuQnR4QyxPQUFPLEtBQ1BBLE9BQU91eEMsR0FxQlJDLGtCQW5Cd0JwNEMsRUFBRSx5QkFBMEIsQ0FDcERxNEMsTUFBT2hULEVBQVk1akMsT0FDbkJxaUMsUUFrQkFzUSxzQkFkQWhQLEdBQXdCLENBQUVDLGNBQWFybEMsSUFBRzhqQyxTQUFVbGpDLEVBQ2hEWixFQUFFLDRCQUE2QixDQUM3QjhqQyxNQUNBd1UsVUFDRWxULEdBQXdCLENBQUVDLGNBQWFybEMsSUFBRzhqQyxRQUFPcGdDLGVBQ2pEOUMsSUFFSixLQTRnQkZvM0MsQ0FBYSxDQUNmMTJDLEtBQ0F3aUMsTUFDQTlqQyxJQUNBNHdDLFdBQ0FILFlBQ0FwTCxZQUFhMVUsRUFBTTBVLFlBQ25CemtDLE1BQU8rdkIsRUFBTS92QixNQUNiMGdDLGFBb0JGLE9BTkFrSixFQUFBQSxVQUFVLEtBQ0g3WixFQUFNa2lCLGNBQWlCSSxHQUMxQmQsRUFBUyxDQUFFbndDLEtBQU0sUUFBUzB6QyxrQkFFM0IsQ0FBQy9rQixFQUFNa2lCLGFBQWNJLElBR3RCL0UsRUFBQUEsUUFBQTdMLGNBQUE2TCxFQUFBQSxRQUFBcUssU0FBQSxLQUNHM0gsR0FDQzFDLEVBQUFBLFFBQUE3TCxjQUFDcVAsR0FBVSxDQUNUcEIsWUFBYXR3QyxFQUFFc3dDLEVBQWEsQ0FBRXhNLFFBQzlCK04sWUFBYUEsRUFDYkMsaUJBdkJ1QjBHLEtBQzdCLE1BQU14dUMsUUFBRUEsRUFBTzhuQyxpQkFBRUEsRUFBZ0IyRyxrQkFBRUEsR0FBc0IzYyxFQUNyRDl4QixHQUFXOG5DLElBQ2JBLEVBQWlCOW5DLEdBQ2J5dUMsR0FDRkEsRUFBa0J6dUMsR0FFcEJ5c0MsRUFBaUI5bEIsRUFBTS92QixTQWlCbkIrd0MsV0FBWUEsRUFDWk0sWUFBYUEsR0FBZWp5QyxFQUFFc0IsRUFBSSxDQUFFd2lDLFFBQ3BDa08sVUFBVyxDQUNUb0MseUJBQ0FELGVBQ0FELHFCQUVGNXlDLEdBQUlBLEVBQ0p3aUMsSUFBS0EsRUFDTDhOLHFCQUFzQkEsRUFDdEJoeEMsTUFBTyt2QixFQUFNL3ZCLE1BQ2JzdkMsV0FBWUEsR0FDWjZCLGdCQUFpQjZGLEdBQ2pCMUYsYUFBY0EsRUFDZEUsT0FBUUEsRUFDUnZCLGVBQWdCQSxFQUNoQnZQLFNBQVVBLEVBQ1YzUSxNQUFPQSxFQUNQd2hCLFNBQVVBLElBSWRqRSxFQUFBQSxRQUFBN0wsY0FBQSxNQUFBLENBQ0U4TCxVQUFXQyxFQUFBQSxRQUNUTixHQUFPLCtCQUNQQSxHQUFPeHNDLEdBQ1BxdkIsRUFBTWtpQixjQUFnQixVQUV4QnpRLE1BQU8sQ0FDTCxVQUFXZ1EsRUFBT29DLFFBQ2xCLGdCQUFpQnBDLEVBQU9zQyxRQUd6QnFCLEdBQ0M3SCxFQUFBQSxRQUFBN0wsY0FBQSxNQUFBLENBQ0U4TCxVQUFXQyxFQUFBQSxRQUNUTixHQUFPLDBCQUNQQSxHQUFPeHNDLEdBQ1B1dkMsR0FBa0IvQyxHQUFPLEdBQUcrQyxpQkFFOUIsYUFBWXFELEdBQ1R0dEMsT0FBTyxLQUNQQSxPQUFPdXRDLElBQ1B2dEMsT0FBTyxLQUNQQSxPQUFPNUcsRUFBRSwyQkFBNEIsQ0FBRThqQyxVQUUxQ29LLEVBQUFBLFFBQUE3TCxjQUFDK04sVUFBSSxDQUFDQyxJQUFLLEdBQUcwRixPQUdsQjdILEVBQUFBLFFBQUE3TCxjQUFDcDhCLEdBQUssQ0FDSjRxQyxlQUFnQkEsRUFDaEJKLFVBQVcyRCxHQUNSeHRDLE9BQU8sS0FDUEEsT0FBT3N0QyxJQUNQdHRDLE9BQU8sS0FDUEEsT0FBT3V0QyxJQUNQdnRDLE9BQU8sS0FDUEEsT0FBT214QyxJQUNWejJDLEdBQUlBLEVBQ0p3aUMsSUFBS0EsRUFDTHlNLGNBQWVBLEVBQ2ZDLGNBQWVBLEVBQ2Y2RyxXQUFZQSxFQUNaejJDLE1BQU8rdkIsRUFBTS92QixNQUNic3ZDLFdBQVlBLEdBQ1pRLFNBQVVBLEVBQ1Y1QyxPQUFRQSxHQUNSZ0QsaUJBQWtCc0IsRUFBT29DLFFBQ3pCbEUsWUFBYStGLEdBQXlCcjJDLEVBQUVzd0MsRUFBYSxDQUFFeE0sUUFDdkR4QyxTQUFVQSxFQUNWekYsY0FBZUEsRUFDZitVLFNBQVVBLEVBQ1ZJLFlBekxZQSxLQUNsQm1CLEVBQVMsQ0FDUHZCLFdBQ0Fod0MsT0FBUWd3QyxHQUFZaHdDLEVBQ3BCb0IsS0FBTSxlQUVINHVDLEdBQ0h1QixFQUFTLENBQ1Bud0MsS0FBTSxRQUNOMHpDLGtCQWlMRXpFLGNBQWUrQyxLQUdqQjlGLEVBQUFBLFFBQUE3TCxjQUFDK00sR0FBVzF1QyxPQUFBa08sT0FBQSxDQUNWMmdDLFFBQVMwRCxJQUFXdGlCLEVBQU0wVSxZQUFZNWpDLFFBQVVtdkMsRUFDaERoRCxpQkFBa0JBLEVBQ2xCRCxhQUFjQSxFQUNkMkIsYUFBY0EsRUFDZGpLLFlBQWExVSxFQUFNMFUsWUFDbkJ2QixJQUFLQSxFQUNMZ0ssT0FBUUEsSUFDSjhKLE1BS2QsZ0JBRUExckMsUUFBQTZTLElBQUF5dkIsV0FBQXFILEdBQWM3RyxVQUFZLENBQ3hCMkMsV0FBWWxELEVBQUFBLFFBQVVFLE9BQU9NLFdBQzdCOEcsS0FBTXRILEVBQUFBLFFBQVVFLE9BQ2hCcnRDLEdBQUltdEMsRUFBQUEsUUFBVUUsT0FBT00sV0FDckJxQixZQUFhN0IsRUFBQUEsUUFBVUUsT0FBT00sV0FDOUJvSCxzQkFBdUI1SCxFQUFBQSxRQUFVRSxPQUNqQy90QyxNQUFPNnRDLEVBQUFBLFFBQVVFLE9BQ2pCOVMsY0FBZTRTLEVBQUFBLFFBQVVFLE9BQ3pCM1MsY0FBZXlTLEVBQUFBLFFBQVU3MkIsT0FDekJta0IsY0FBZTBTLEVBQUFBLFFBQVVTLEtBQ3pCcFQsY0FBZTJTLEVBQUFBLFFBQVVDLE1BQU0sQ0FDN0J6UixXQUFZd1IsRUFBQUEsUUFBVUUsT0FFdEIza0MsUUFBU3lrQyxFQUFBQSxRQUFVZ0QsT0FDbkJLLGlCQUFrQnJELEVBQUFBLFFBQVVTLEtBQzVCdUosa0JBQW1CaEssRUFBQUEsUUFBVVMsT0FDNUJELFdBQ0h0VixRQUFTOFUsRUFBQUEsUUFBVXNCLFFBQVF0QixFQUFBQSxRQUFVRSxRQUNyQzE1QixRQUFTdzVCLEVBQUFBLFFBQVVzQixRQUFRdEIsRUFBQUEsUUFBVUUsUUFDckM4QixVQUFXaEMsRUFBQUEsUUFBVUUsT0FDckJtSCxTQUFVckgsRUFBQUEsUUFBVVMsS0FBS0QsV0FDekIrRyxRQUFTdkgsRUFBQUEsUUFBVVMsS0FDbkJrSCxTQUFVM0gsRUFBQUEsUUFBVVMsS0FDcEJnSCxnQkFBaUJ6SCxFQUFBQSxRQUFVUyxLQUMzQmlILFlBQWExSCxFQUFBQSxRQUFVUyxLQUN2QnpWLEtBQU1nVixFQUFBQSxRQUFVRSxPQUNoQmlDLFNBQVVuQyxFQUFBQSxRQUFVTSxLQUNwQjlTLFNBQVV3UyxFQUFBQSxRQUFVQyxNQUFNLENBQ3hCZ0ssYUFBY2pLLEVBQUFBLFFBQVVFLE9BQ3hCZ0ssWUFBYWxLLEVBQUFBLFFBQVVFLFNBRXpCc0QsWUFBYXhELEVBQUFBLFFBQVVFLE9BQ3ZCelMsU0FBVXVTLEVBQUFBLFFBQVVDLE1BQU0sQ0FDeEJwckMsUUFBU21yQyxFQUFBQSxRQUFVRSxPQUNuQi9RLElBQUs2USxFQUFBQSxRQUFVNzJCLE9BQ2ZpbUIsSUFBSzRRLEVBQUFBLFFBQVU3MkIsU0FFakJpNUIsZUFBZ0JwQyxFQUFBQSxRQUFVRSxPQUMxQmtELFlBQWFwRCxFQUFBQSxRQUFVQyxNQUFNLENBQzNCaUcsT0FBUWxHLEVBQUFBLFFBQVU3MkIsU0FFcEJ3NkIsT0FBUTNELEVBQUFBLFFBQVVVLFNBQVNWLEVBQUFBLFFBQVVFLFFBQ3JDc0gsb0JBQXFCeEgsRUFBQUEsUUFBVVUsU0FBU1YsRUFBQUEsUUFBVVMsTUFDbEQ1TixTQUFVbU4sRUFBQUEsUUFBVU0sS0FDcEJ1SCxRQUFTN0gsRUFBQUEsUUFBVUUsT0FDbkJ1RCxXQUFZekQsRUFBQUEsUUFBVU0sS0FDdEJ3SCxXQUFZOUgsRUFBQUEsUUFBVU0sT0FHeEI4RyxHQUFjN0YsYUFBZSxDQUMzQitGLFVBQU05eUMsRUFDTnJDLE1BQU8sR0FDUGk3QixtQkFBZTU0QixFQUNmODRCLG1CQUFlOTRCLEVBQ2YreUMsYUFBUy95QyxFQUNUdzJCLEtBQU0sS0FDTjJjLGNBQVVuekMsRUFDVml6QyxxQkFBaUJqekMsRUFDakJrekMsaUJBQWFsekMsRUFDYmd6Qyx5QkFBcUJoekMsRUFDckIwMkIsUUFBUyxHQUNUMWtCLGFBQVNoUyxFQUNUMnRDLFVBQVUsRUFDVjJGLFlBQVksRUFDWnZhLG1CQUFlLzRCLEVBQ2ZnNUIsU0FBVSxDQUNSeWMsYUFBYyxTQUNkQyxZQUFhLFdBRWZsSSxlQUFXeHRDLEVBQ1hndkMsaUJBQWFodkMsRUFDYjR0QyxlQUFnQixHQUNoQndGLDJCQUF1QnB6QyxFQUN2QjR1QyxZQUFhLENBQ1g4QyxPQUFRLEtBRVZ2QyxPQUFRd0csRUFBQUEsY0FDUnRYLFVBQVUsRUFDVmdWLGFBQVNyekMsRUFDVGl2QyxZQUFZLEVBQ1poVyxTQUFVLENBQUEsYUFHR3Z0QixHQUVYdS9CLEVBQUFBLFFBQUE3TCxjQUFDd1csa0JBQWUsQ0FBQ2xaLEtBQU1BLElBQ3JCdU8sVUFBQTdMLGNBQUN3VCxHQUFrQmxuQyIsInhfZ29vZ2xlX2lnbm9yZUxpc3QiOlswLDEsMiwzLDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2Niw3MCw3MSw3Ml19